diff --git a/codex-skill.yaml b/codex-skill.yaml index 79217dc..d031b24 100644 --- a/codex-skill.yaml +++ b/codex-skill.yaml @@ -4,6 +4,7 @@ style: paradigm: "OO" framework_bias: "Spring-like layering" + layering_bias: "Controller -> Service -> Repository with explicit domain/data layers" class_file_bias: "small" dataclass_bias: "strong" @@ -39,6 +40,20 @@ layering_by_language: domain: ["domain", "entities", "value-objects"] dto: ["dto", "contracts", "types"] mapping: ["mappers"] + kotlin: + controller: ["@RestController", "Controller"] + service: ["@Service", "UseCase"] + repository: ["@Repository"] + domain: ["domain"] + dto: ["dto"] + mapping: ["mapper"] + python: + controller: ["controllers", "routes"] + service: ["services", "use_cases"] + repository: ["repositories", "adapters", "ports"] + domain: ["domain", "entities", "value_objects"] + dto: ["dto", "contracts", "types"] + mapping: ["mappers"] cpp: controller: ["api", "handlers", "endpoints"] service: ["services", "use_cases"] @@ -48,8 +63,9 @@ layering_by_language: mapping: ["mappers"] size_limits: - class_file_lines_target: [50, 200] - methods_lines_soft_cap: 25 + class_file_lines_target: [40, 160] + class_file_lines_soft_cap: 200 + methods_lines_soft_cap: 20 cyclomatic_complexity_soft_cap: 8 one_top_level_class_per_file: true @@ -73,21 +89,33 @@ naming: repository_suffix: "Repository" dto_suffixes: ["Request", "Response", "Dto"] mapper_suffix: "Mapper" - exception_suffix: "Exception" + exception_suffixes: ["Exception"] naming_by_language: + kotlin: + controller_suffixes: ["Controller"] + service_suffixes: ["Service", "UseCase"] + repository_suffixes: ["Repository"] + dto_suffixes: ["Request", "Response", "Dto"] + exception_suffixes: ["Exception"] + python: + controller_suffixes: ["Controller", "Routes"] + service_suffixes: ["Service", "UseCase"] + repository_suffixes: ["Repository", "Port", "Adapter"] + dto_suffixes: ["Request", "Response", "Dto"] + exception_suffixes: ["Error"] typescript: controller_suffixes: ["Controller", "Routes"] service_suffixes: ["Service", "UseCase"] repository_suffixes: ["Repository", "Port", "Adapter"] dto_suffixes: ["Request", "Response", "Dto"] - error_suffixes: ["Error"] + exception_suffixes: ["Error"] cpp: controller_suffixes: ["Handler", "Endpoint"] service_suffixes: ["Service", "UseCase"] repository_suffixes: ["Repository", "Port", "Adapter"] dto_suffixes: ["Request", "Response", "Dto"] - error_suffixes: ["Error"] + exception_suffixes: ["Error"] dependencies: domain_must_not_depend_on_framework: true @@ -97,10 +125,12 @@ dependencies: typescript_rules: module_structure: - "Prefer one exported class per file (with small helper types allowed)." + - "DTO files may export multiple related types (no behavior)." - "Avoid deep barrel exports that obscure dependency direction." types: - "Prefer explicit types at boundaries." - "Use readonly properties; prefer Readonly for DTO shapes." + - "Use type/interface for DTOs; use classes for behavior." runtime_validation: - "If validation is needed, keep it at boundaries (e.g., schema/validator) not inside controllers." async: @@ -125,6 +155,8 @@ testing: testing_by_language: java: ["JUnit5", "SpringBootTest when needed"] + kotlin: ["JUnit5 or Kotest"] + python: ["Pytest"] typescript: ["Jest"] cpp: ["GoogleTest (if present) or Catch2 (if present); otherwise provide minimal harness"]