phasegate 0.16.0 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/README.ja.md +74 -42
  2. package/README.md +69 -9
  3. package/docs/ADR/ADR-013-story-reflection-gate.md +100 -0
  4. package/docs/guide/configuration.md +244 -7
  5. package/package.json +7 -5
  6. package/scripts/harness/adr-foundation/domain/ports/adr-document-parser-port.ts +1 -0
  7. package/scripts/harness/adr-foundation/domain/ports/adr-frontmatter-parser-port.ts +1 -0
  8. package/scripts/harness/adr-foundation/domain/ports/adr-repository-port.ts +1 -0
  9. package/scripts/harness/adr-foundation/domain/value-objects/adr-status.ts +6 -6
  10. package/scripts/harness/agent-integration/application/dto/handle-pre-tool-use-dto.ts +3 -1
  11. package/scripts/harness/agent-integration/application/usecases/handle-pre-tool-use-usecase.ts +108 -2
  12. package/scripts/harness/agent-integration/domain/ports/config-query-port.ts +2 -0
  13. package/scripts/harness/agent-integration/domain/ports/phase-gate-query-port.ts +1 -1
  14. package/scripts/harness/agent-integration/domain/ports/story-reflection-query-port.ts +8 -0
  15. package/scripts/harness/agent-integration/domain/services/bash-write-target-extractor.ts +258 -0
  16. package/scripts/harness/agent-integration/domain/services/hook-to-cli-translator.ts +21 -4
  17. package/scripts/harness/agent-integration/domain/value-objects/protected-file-list.ts +20 -0
  18. package/scripts/harness/agent-integration/domain/value-objects/story-reflection-query-result.ts +63 -0
  19. package/scripts/harness/agent-integration/infrastructure/adapters/file-system-story-reflection-query-adapter.ts +122 -0
  20. package/scripts/harness/agent-integration/infrastructure/adapters/harness-config-config-query-adapter.ts +20 -0
  21. package/scripts/harness/agent-integration/infrastructure/adapters/phase-gate-query-adapter.ts +17 -3
  22. package/scripts/harness/agent-integration/presentation/pre-tool-use-hook.ts +29 -2
  23. package/scripts/harness/biome-ast-engine/domain/services/lint-runner.ts +24 -0
  24. package/scripts/harness/biome-ast-engine/domain/services/rule-definition-registry.ts +1 -1
  25. package/scripts/harness/biome-ast-engine/domain/value-objects/source-module-snapshot.ts +5 -2
  26. package/scripts/harness/biome-ast-engine/infrastructure/adapters/node-workspace-file-adapter.ts +1 -1
  27. package/scripts/harness/biome-ast-engine/infrastructure/adapters/typescript-source-module-analyzer-adapter.ts +1 -1
  28. package/scripts/harness/biome-ast-engine/infrastructure/parsers/unit-comment-parser.ts +12 -7
  29. package/scripts/harness/ci-governance/composition-root.ts +1 -0
  30. package/scripts/harness/config-foundation/application/mappers/phase-config-section-mapper.ts +44 -0
  31. package/scripts/harness/config-foundation/application/usecases/load-resolved-config-use-case.ts +20 -1
  32. package/scripts/harness/config-foundation/domain/harness-config.ts +2 -1
  33. package/scripts/harness/config-foundation/domain/value-objects/phase-dependencies-config.ts +18 -4
  34. package/scripts/harness/config-foundation/infrastructure/schemas/harness-config-v2.schema.json +185 -10
  35. package/scripts/harness/config-foundation/infrastructure/validators/ajv-config-schema-validator.ts +2 -1
  36. package/scripts/harness/harness-api/application/dto/command-dispatch-input.ts +1 -0
  37. package/scripts/harness/harness-api/application/dto/command-dispatch-output.ts +1 -0
  38. package/scripts/harness/harness-api/application/dto/exit-code-decision-input.ts +1 -0
  39. package/scripts/harness/harness-api/application/dto/exit-code-decision-output.ts +1 -0
  40. package/scripts/harness/harness-api/application/dto/harness-api-response-contract.ts +1 -0
  41. package/scripts/harness/harness-api/application/dto/initialize-registry-input.ts +1 -0
  42. package/scripts/harness/harness-api/application/dto/registry-summary-output.ts +1 -0
  43. package/scripts/harness/harness-api/application/dto/status-derivation-input.ts +1 -0
  44. package/scripts/harness/harness-api/application/mappers/harness-api-response-mapper.ts +1 -0
  45. package/scripts/harness/harness-api/application/usecases/decide-exit-code-usecase.ts +1 -0
  46. package/scripts/harness/harness-api/application/usecases/derive-harness-status-usecase.ts +1 -0
  47. package/scripts/harness/harness-api/application/usecases/dispatch-command-usecase.ts +1 -0
  48. package/scripts/harness/harness-api/application/usecases/initialize-command-registry-usecase.ts +1 -0
  49. package/scripts/harness/harness-api/composition-root.ts +1 -0
  50. package/scripts/harness/harness-api/domain/ports/artifact-scanner-port.ts +1 -0
  51. package/scripts/harness/harness-api/domain/ports/biome-lint-port.ts +1 -0
  52. package/scripts/harness/harness-api/domain/ports/config-query-port.ts +1 -0
  53. package/scripts/harness/harness-api/domain/ports/impact-analysis-port.ts +1 -0
  54. package/scripts/harness/harness-api/domain/ports/phase-gate-query-port.ts +1 -0
  55. package/scripts/harness/harness-api/domain/ports/validator-execution-port.ts +1 -0
  56. package/scripts/harness/harness-api/domain/services/command-dispatch-service.ts +1 -0
  57. package/scripts/harness/harness-api/domain/services/command-registry.ts +1 -0
  58. package/scripts/harness/harness-api/domain/services/status-derivation-service.ts +1 -0
  59. package/scripts/harness/harness-api/domain/value-objects/artifact-scan-result.ts +1 -0
  60. package/scripts/harness/harness-api/domain/value-objects/check-ready-result.ts +1 -0
  61. package/scripts/harness/harness-api/domain/value-objects/ci-check-result.ts +1 -0
  62. package/scripts/harness/harness-api/domain/value-objects/cli-command-definition.ts +1 -0
  63. package/scripts/harness/harness-api/domain/value-objects/command-input-spec.ts +1 -0
  64. package/scripts/harness/harness-api/domain/value-objects/drift-report-summary.ts +1 -0
  65. package/scripts/harness/harness-api/domain/value-objects/exit-code-spec.ts +1 -0
  66. package/scripts/harness/harness-api/domain/value-objects/harness-api-response.ts +1 -0
  67. package/scripts/harness/harness-api/domain/value-objects/harness-status-summary.ts +1 -0
  68. package/scripts/harness/harness-api/domain/value-objects/layer-health.ts +1 -0
  69. package/scripts/harness/harness-api/domain/value-objects/phase-info.ts +1 -0
  70. package/scripts/harness/harness-api/index.ts +1 -0
  71. package/scripts/harness/harness-api/infrastructure/adapters/biome-ast-engine-lint-adapter.ts +1 -0
  72. package/scripts/harness/harness-api/infrastructure/adapters/file-system-artifact-scanner-adapter.ts +1 -0
  73. package/scripts/harness/harness-api/infrastructure/adapters/harness-config-query-adapter.ts +1 -0
  74. package/scripts/harness/harness-api/infrastructure/adapters/nyquist-validation-impact-analysis-adapter.ts +1 -0
  75. package/scripts/harness/harness-api/infrastructure/adapters/phase-dependency-model-query-adapter.ts +1 -0
  76. package/scripts/harness/harness-api/infrastructure/adapters/validator-system-execution-adapter.ts +1 -0
  77. package/scripts/harness/harness-api/presentation/dto/cli-output-options.ts +1 -0
  78. package/scripts/harness/harness-api/presentation/formatters/harness-api-json-formatter.ts +1 -0
  79. package/scripts/harness/harness-api/presentation/handlers/check-phase-handler.ts +1 -0
  80. package/scripts/harness/harness-api/presentation/handlers/check-ready-handler.ts +1 -0
  81. package/scripts/harness/harness-api/presentation/handlers/ci-check-handler.ts +1 -0
  82. package/scripts/harness/harness-api/presentation/handlers/complete-check-handler.ts +1 -0
  83. package/scripts/harness/harness-api/presentation/handlers/detect-drift-handler.ts +1 -0
  84. package/scripts/harness/harness-api/presentation/handlers/impact-analysis-handler.ts +1 -0
  85. package/scripts/harness/harness-api/presentation/handlers/lint-handler.ts +1 -0
  86. package/scripts/harness/harness-api/presentation/handlers/status-handler.ts +1 -0
  87. package/scripts/harness/harness-error/infrastructure/adapters/legacy-error-reporter-adapter.ts +7 -1
  88. package/scripts/harness/integrations/pre-commit.ts +1 -0
  89. package/scripts/harness/main.ts +154 -34
  90. package/scripts/harness/phase-dependency-model/application/dto/resolve-gate-result-dto.ts +14 -0
  91. package/scripts/harness/phase-dependency-model/application/services/phase-gate-result-mapper.ts +20 -0
  92. package/scripts/harness/phase-dependency-model/application/usecases/check-story-reflection-usecase.ts +42 -0
  93. package/scripts/harness/phase-dependency-model/application/usecases/resolve-gate-usecase.ts +161 -0
  94. package/scripts/harness/phase-dependency-model/composition-root.ts +57 -1
  95. package/scripts/harness/phase-dependency-model/domain/definitions/{default-phase-dependencies.ts → full-phase-dependencies.ts} +3 -3
  96. package/scripts/harness/phase-dependency-model/domain/definitions/{default-phase-nodes.ts → full-phase-nodes.ts} +1 -1
  97. package/scripts/harness/phase-dependency-model/domain/definitions/full-story-reflection-defaults.ts +28 -0
  98. package/scripts/harness/phase-dependency-model/domain/definitions/minimal-phase-dependencies.ts +32 -0
  99. package/scripts/harness/phase-dependency-model/domain/definitions/minimal-phase-nodes.ts +50 -0
  100. package/scripts/harness/phase-dependency-model/domain/definitions/minimal-story-reflection-defaults.ts +8 -0
  101. package/scripts/harness/phase-dependency-model/domain/definitions/standard-phase-dependencies.ts +39 -0
  102. package/scripts/harness/phase-dependency-model/domain/definitions/standard-phase-nodes.ts +118 -0
  103. package/scripts/harness/phase-dependency-model/domain/definitions/standard-story-reflection-defaults.ts +23 -0
  104. package/scripts/harness/phase-dependency-model/domain/models/phase-structure.ts +95 -23
  105. package/scripts/harness/phase-dependency-model/domain/ports/glob-matcher-port.ts +8 -0
  106. package/scripts/harness/phase-dependency-model/domain/ports/phase-config-provider-port.ts +2 -0
  107. package/scripts/harness/phase-dependency-model/domain/ports/story-annotation-verifier-port.ts +14 -0
  108. package/scripts/harness/phase-dependency-model/domain/ports/story-reflection-file-system-port.ts +16 -0
  109. package/scripts/harness/phase-dependency-model/domain/services/gate-graph.ts +223 -0
  110. package/scripts/harness/phase-dependency-model/domain/services/story-reflection-checker.ts +66 -0
  111. package/scripts/harness/phase-dependency-model/domain/values/gate-definition.ts +127 -0
  112. package/scripts/harness/phase-dependency-model/domain/values/gate-name.ts +40 -0
  113. package/scripts/harness/phase-dependency-model/domain/values/gate-story-annotation.ts +39 -0
  114. package/scripts/harness/phase-dependency-model/domain/values/phase-customization-policy.ts +16 -4
  115. package/scripts/harness/phase-dependency-model/domain/values/story-reflection-config.ts +44 -0
  116. package/scripts/harness/phase-dependency-model/domain/values/story-reflection-mapping.ts +91 -0
  117. package/scripts/harness/phase-dependency-model/domain/values/story-reflection-result.ts +55 -0
  118. package/scripts/harness/phase-dependency-model/infrastructure/adapters/picomatch-glob-matcher.ts +17 -0
  119. package/scripts/harness/phase-dependency-model/infrastructure/adapters/story-annotation-verifier-adapter.ts +46 -0
  120. package/scripts/harness/phase-dependency-model/infrastructure/config/custom-gates-config-parser.ts +22 -0
  121. package/scripts/harness/phase-dependency-model/infrastructure/config/harness-config-phase-config-provider.ts +78 -2
  122. package/scripts/harness/phase-dependency-model/infrastructure/filesystem/file-system-story-reflection-adapter.ts +94 -0
  123. package/scripts/harness/phase-dependency-model/presentation/cli/check-phase-gate-command-handler.ts +12 -4
  124. package/scripts/harness/phase-dependency-model/presentation/cli/story-reflection-status-presenter.ts +87 -0
  125. package/scripts/harness/regression-suite/application/dto/analyze-migration-input.ts +1 -0
  126. package/scripts/harness/regression-suite/application/dto/analyze-migration-output.ts +1 -0
  127. package/scripts/harness/regression-suite/application/dto/configure-ci-gate-input.ts +1 -0
  128. package/scripts/harness/regression-suite/application/dto/configure-ci-gate-output.ts +1 -0
  129. package/scripts/harness/regression-suite/application/dto/migrate-v0-tests-input.ts +1 -0
  130. package/scripts/harness/regression-suite/application/dto/migrate-v0-tests-output.ts +1 -0
  131. package/scripts/harness/regression-suite/application/dto/run-regression-suite-input.ts +1 -0
  132. package/scripts/harness/regression-suite/application/dto/run-regression-suite-output.ts +1 -0
  133. package/scripts/harness/regression-suite/application/mappers/migration-mapping-mapper.ts +1 -0
  134. package/scripts/harness/regression-suite/application/mappers/test-execution-summary-mapper.ts +1 -0
  135. package/scripts/harness/regression-suite/application/usecases/analyze-v0-migration-usecase.ts +1 -0
  136. package/scripts/harness/regression-suite/application/usecases/configure-ci-gate-usecase.ts +1 -0
  137. package/scripts/harness/regression-suite/application/usecases/migrate-v0-tests-usecase.ts +1 -0
  138. package/scripts/harness/regression-suite/application/usecases/run-agent-independence-guard-usecase.ts +1 -0
  139. package/scripts/harness/regression-suite/application/usecases/run-gng-gate-regression-usecase.ts +1 -0
  140. package/scripts/harness/regression-suite/application/usecases/run-k-requirements-regression-usecase.ts +1 -0
  141. package/scripts/harness/regression-suite/application/usecases/run-k14-k15-regression-usecase.ts +1 -0
  142. package/scripts/harness/regression-suite/composition-root.ts +1 -0
  143. package/scripts/harness/regression-suite/domain/aggregates/v0-test-migration.ts +1 -0
  144. package/scripts/harness/regression-suite/domain/ports/ci-gate-result-writer-port.ts +1 -0
  145. package/scripts/harness/regression-suite/domain/ports/config-query-port.ts +1 -0
  146. package/scripts/harness/regression-suite/domain/ports/import-analyzer-port.ts +1 -0
  147. package/scripts/harness/regression-suite/domain/ports/migration-mapping-repository-port.ts +1 -0
  148. package/scripts/harness/regression-suite/domain/ports/suite-registry-port.ts +1 -0
  149. package/scripts/harness/regression-suite/domain/ports/test-runner-port.ts +1 -0
  150. package/scripts/harness/regression-suite/domain/ports/v0-spec-reader-port.ts +1 -0
  151. package/scripts/harness/regression-suite/domain/services/import-guard-service.ts +1 -0
  152. package/scripts/harness/regression-suite/domain/services/migration-analyzer.ts +1 -0
  153. package/scripts/harness/regression-suite/domain/services/regression-runner.ts +1 -0
  154. package/scripts/harness/regression-suite/domain/value-objects/agent-independence-test.ts +1 -0
  155. package/scripts/harness/regression-suite/domain/value-objects/biome-modification-spec.ts +1 -0
  156. package/scripts/harness/regression-suite/domain/value-objects/ci-gate-config.ts +1 -0
  157. package/scripts/harness/regression-suite/domain/value-objects/coverage-rate.ts +1 -0
  158. package/scripts/harness/regression-suite/domain/value-objects/gng-condition-test.ts +1 -0
  159. package/scripts/harness/regression-suite/domain/value-objects/import-violation.ts +1 -0
  160. package/scripts/harness/regression-suite/domain/value-objects/k-requirement-test.ts +1 -0
  161. package/scripts/harness/regression-suite/domain/value-objects/migration-mapping.ts +1 -0
  162. package/scripts/harness/regression-suite/domain/value-objects/regression-suite-definition.ts +1 -0
  163. package/scripts/harness/regression-suite/domain/value-objects/suite-id.ts +1 -0
  164. package/scripts/harness/regression-suite/domain/value-objects/test-execution-summary.ts +1 -0
  165. package/scripts/harness/regression-suite/domain/value-objects/test-failure-detail.ts +1 -0
  166. package/scripts/harness/regression-suite/domain/value-objects/v0-test-id.ts +1 -0
  167. package/scripts/harness/regression-suite/domain/value-objects/v1-test-path.ts +1 -0
  168. package/scripts/harness/regression-suite/infrastructure/adapters/biome-ast-import-analyzer-adapter.ts +1 -0
  169. package/scripts/harness/regression-suite/infrastructure/adapters/file-system-v0-spec-reader-adapter.ts +1 -0
  170. package/scripts/harness/regression-suite/infrastructure/adapters/harness-config-query-adapter.ts +1 -0
  171. package/scripts/harness/regression-suite/infrastructure/adapters/json-ci-gate-result-writer-adapter.ts +1 -0
  172. package/scripts/harness/regression-suite/infrastructure/adapters/markdown-migration-mapping-repository-adapter.ts +1 -0
  173. package/scripts/harness/regression-suite/infrastructure/adapters/static-suite-registry-adapter.ts +1 -0
  174. package/scripts/harness/regression-suite/infrastructure/adapters/vitest-test-runner-adapter.ts +1 -0
  175. package/scripts/harness/regression-suite/infrastructure/registry/agent-independence-suite-definition.ts +1 -0
  176. package/scripts/harness/regression-suite/infrastructure/registry/gng-gate-suite-definition.ts +1 -0
  177. package/scripts/harness/regression-suite/infrastructure/registry/k-requirements-suite-definition.ts +1 -0
  178. package/scripts/harness/regression-suite/infrastructure/registry/v0-migration-suite-definition.ts +1 -0
  179. package/scripts/harness/setup/skill-deployer.ts +82 -5
  180. package/scripts/harness/shared-kernel/harness-api.ts +1 -0
  181. package/scripts/harness/skill-quality/composition-root.ts +1 -0
  182. package/scripts/harness/skill-quality/infrastructure/adapters/ajv-lesson-artifact-schema-adapter.ts +5 -4
  183. package/scripts/harness/traceability-model/domain/services/metadata-validator.ts +12 -10
  184. package/scripts/harness/traceability-model/infrastructure/parsers/source-metadata-parser.ts +16 -2
  185. package/skills/cascade-updater/SKILL.md +16 -3
  186. package/skills/codebase-mapper/SKILL.md +9 -9
  187. package/skills/codex-delegator/SKILL.md +5 -56
  188. package/skills/consistency-checker/SKILL.md +5 -9
  189. package/skills/consistency-checker/references//343/203/201/343/202/247/343/203/203/343/202/257/343/203/252/343/202/271/343/203/210.md +6 -3
  190. package/skills/doc-freshness-checker/SKILL.md +6 -6
  191. package/skills/engineering-perspective/SKILL.md +2 -58
  192. package/skills/engineering-perspective/references/domain-model.md +4 -135
  193. package/skills/implementation-readiness-checker/SKILL.md +18 -72
  194. package/skills/it-test-designer/SKILL.md +25 -161
  195. package/skills/it-test-designer/references/it-test-design-template.md +131 -0
  196. package/skills/it-test-logic-designer/SKILL.md +13 -388
  197. package/skills/it-test-logic-designer/references/controller-test-patterns.md +100 -0
  198. package/skills/it-test-logic-designer/references/repository-test-patterns.md +206 -0
  199. package/skills/it-test-logic-designer/references/usecase-test-patterns.md +87 -0
  200. package/skills/pointer-validator/SKILL.md +4 -4
  201. package/skills/scenario-test-designer/SKILL.md +4 -68
  202. package/skills/scenario-test-designer/references/scenario-test-design-template.md +41 -0
  203. package/skills/scenario-test-designer/references/scenario-test-plan-template.md +35 -0
  204. package/skills/scenario-test-logic-designer/SKILL.md +21 -304
  205. package/skills/scenario-test-logic-designer/references/msw-patterns.md +36 -0
  206. package/skills/scenario-test-logic-designer/references/playwright-patterns.md +237 -0
  207. package/skills/test-coverage-checker/SKILL.md +39 -121
  208. package/skills/test-coverage-checker/references/coverage-report-template.md +99 -0
  209. package/skills/uiux-designer/SKILL.md +27 -92
  210. package/skills/uiux-designer/references/data-testid-convention.md +38 -0
  211. package/skills/uiux-designer/references/uiux-design-template.md +105 -0
  212. package/skills/unit-test-designer/SKILL.md +5 -106
  213. package/skills/unit-test-designer/references/unit-test-design-template.md +127 -0
  214. package/skills/unit-test-logic-designer/SKILL.md +28 -250
  215. package/skills/unit-test-logic-designer/references/test-patterns.md +207 -0
@@ -1,3 +1,4 @@
1
+ // @layer application
1
2
  import type { SuiteIdValue } from '../../domain/value-objects/suite-id.js';
2
3
  import type { ExecutionMode } from '../../domain/value-objects/ci-gate-config.js';
3
4
 
@@ -1,3 +1,4 @@
1
+ // @layer application
1
2
  export interface MigrateV0TestsInput {
2
3
  confirmExecute?: boolean;
3
4
  outOfScopePattern?: string[];
@@ -1,3 +1,4 @@
1
+ // @layer application
1
2
  export interface MigrationMappingOutput {
2
3
  v0TestId: string;
3
4
  v1TestPath: string;
@@ -1,3 +1,4 @@
1
+ // @layer application
1
2
  import type { SuiteIdValue } from '../../domain/value-objects/suite-id.js';
2
3
 
3
4
  export interface RunRegressionSuiteInput {
@@ -1,3 +1,4 @@
1
+ // @layer application
1
2
  export interface TestFailureDetailOutput {
2
3
  testCaseId: string;
3
4
  errorMessage: string;
@@ -1,3 +1,4 @@
1
+ // @layer application
1
2
  import type { V0TestMigration } from '../../domain/aggregates/v0-test-migration.js';
2
3
  import type { MigrationMappingOutput } from '../dto/migrate-v0-tests-output.js';
3
4
 
@@ -1,3 +1,4 @@
1
+ // @layer application
1
2
  import type { TestExecutionSummary } from '../../domain/value-objects/test-execution-summary.js';
2
3
  import type { RunRegressionSuiteOutput } from '../dto/run-regression-suite-output.js';
3
4
 
@@ -1,3 +1,4 @@
1
+ // @layer application
1
2
  import { MigrationAnalyzer } from '../../domain/services/migration-analyzer.js';
2
3
  import type { V0SpecReaderPort } from '../../domain/ports/v0-spec-reader-port.js';
3
4
  import type { MigrationMappingRepositoryPort } from '../../domain/ports/migration-mapping-repository-port.js';
@@ -1,3 +1,4 @@
1
+ // @layer application
1
2
  import { SuiteId } from '../../domain/value-objects/suite-id.js';
2
3
  import { CiGateConfig } from '../../domain/value-objects/ci-gate-config.js';
3
4
  import type { ConfigQueryPort } from '../../domain/ports/config-query-port.js';
@@ -1,3 +1,4 @@
1
+ // @layer application
1
2
  import { MigrationAnalyzer } from '../../domain/services/migration-analyzer.js';
2
3
  import type { V0SpecReaderPort } from '../../domain/ports/v0-spec-reader-port.js';
3
4
  import type { MigrationMappingRepositoryPort } from '../../domain/ports/migration-mapping-repository-port.js';
@@ -1,3 +1,4 @@
1
+ // @layer application
1
2
  import { SuiteId } from '../../domain/value-objects/suite-id.js';
2
3
  import { TestExecutionSummary } from '../../domain/value-objects/test-execution-summary.js';
3
4
  import { TestFailureDetail } from '../../domain/value-objects/test-failure-detail.js';
@@ -1,3 +1,4 @@
1
+ // @layer application
1
2
  import { SuiteId } from '../../domain/value-objects/suite-id.js';
2
3
  import { TestExecutionSummary } from '../../domain/value-objects/test-execution-summary.js';
3
4
  import type { SuiteRegistryPort } from '../../domain/ports/suite-registry-port.js';
@@ -1,3 +1,4 @@
1
+ // @layer application
1
2
  import { SuiteId } from '../../domain/value-objects/suite-id.js';
2
3
  import { TestExecutionSummary } from '../../domain/value-objects/test-execution-summary.js';
3
4
  import type { SuiteRegistryPort } from '../../domain/ports/suite-registry-port.js';
@@ -1,3 +1,4 @@
1
+ // @layer application
1
2
  import { SuiteId } from '../../domain/value-objects/suite-id.js';
2
3
  import { TestExecutionSummary } from '../../domain/value-objects/test-execution-summary.js';
3
4
  import type { SuiteRegistryPort } from '../../domain/ports/suite-registry-port.js';
@@ -1,4 +1,5 @@
1
1
  /**
2
+ * @layer infrastructure
2
3
  * @unit regression-suite
3
4
  *
4
5
  * Composition Root - wires all dependencies together
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  import type { V0TestId } from '../value-objects/v0-test-id.js';
2
3
  import type { V1TestPath } from '../value-objects/v1-test-path.js';
3
4
  import type { BiomeModificationSpec } from '../value-objects/biome-modification-spec.js';
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  import type { SuiteIdValue } from '../value-objects/suite-id.js';
2
3
  import type { TestExecutionSummary } from '../value-objects/test-execution-summary.js';
3
4
 
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  export interface ConfigQueryPort {
2
3
  getCoverageThreshold(): Promise<number>;
3
4
  }
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  export interface ImportAnalyzerPort {
2
3
  analyzeImports(targetModule: string): Promise<string[]>;
3
4
  }
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  import type { V0TestMigration } from '../aggregates/v0-test-migration.js';
2
3
  import type { V0TestId } from '../value-objects/v0-test-id.js';
3
4
  import type { MigrationMapping } from '../value-objects/migration-mapping.js';
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  import type { SuiteId } from '../value-objects/suite-id.js';
2
3
  import type { RegressionSuiteDefinition } from '../value-objects/regression-suite-definition.js';
3
4
 
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  import type { TestCase } from '../value-objects/regression-suite-definition.js';
2
3
  import type { CoverageRate } from '../value-objects/coverage-rate.js';
3
4
  import type { TestFailureDetail } from '../value-objects/test-failure-detail.js';
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  import type { V0TestId } from '../value-objects/v0-test-id.js';
2
3
 
3
4
  export interface V0SpecReaderPort {
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  import type { AgentIndependenceTest } from '../value-objects/agent-independence-test.js';
2
3
  import { ImportViolation } from '../value-objects/import-violation.js';
3
4
  import type { ImportAnalyzerPort } from '../ports/import-analyzer-port.js';
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  import { V0TestMigration } from '../aggregates/v0-test-migration.js';
2
3
  import { V1TestPath } from '../value-objects/v1-test-path.js';
3
4
  import { BiomeModificationSpec } from '../value-objects/biome-modification-spec.js';
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  import type { SuiteId } from '../value-objects/suite-id.js';
2
3
  import { TestExecutionSummary } from '../value-objects/test-execution-summary.js';
3
4
  import { TestFailureDetail } from '../value-objects/test-failure-detail.js';
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  export interface AgentIndependenceTestProps {
2
3
  targetModule: string;
3
4
  forbiddenPatterns: string[];
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  export interface BiomeModificationSpecProps {
2
3
  targetApi: string;
3
4
  replacementApi: string;
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  import type { SuiteId } from './suite-id.js';
2
3
 
3
4
  export type ExecutionMode = 'parallel' | 'sequential';
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  export class CoverageRate {
2
3
  readonly value: number;
3
4
 
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  export interface GngConditionTestProps {
2
3
  gngNumber: string;
3
4
  targetUnit: string;
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  export interface ImportViolationProps {
2
3
  modulePath: string;
3
4
  forbiddenPackage: string;
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  export interface KRequirementTestProps {
2
3
  kNumber: string;
3
4
  targetUnit: string;
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  import type { V0TestId } from './v0-test-id.js';
2
3
  import type { V1TestPath } from './v1-test-path.js';
3
4
  import type { BiomeModificationSpec } from './biome-modification-spec.js';
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  import type { SuiteId } from './suite-id.js';
2
3
  import type { KRequirementTest } from './k-requirement-test.js';
3
4
  import type { GngConditionTest } from './gng-condition-test.js';
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  export type SuiteIdValue = 'k-requirements' | 'gng-gate' | 'v0-migration' | 'agent-independence';
2
3
 
3
4
  const VALID_SUITE_IDS: ReadonlySet<string> = new Set([
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  import type { CoverageRate } from './coverage-rate.js';
2
3
  import type { TestFailureDetail } from './test-failure-detail.js';
3
4
 
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  export interface TestFailureDetailProps {
2
3
  testCaseId: string;
3
4
  errorMessage: string;
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  export class V0TestId {
2
3
  readonly value: string;
3
4
 
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  export class V1TestPath {
2
3
  readonly value: string;
3
4
 
@@ -1,3 +1,4 @@
1
+ // @layer infrastructure
1
2
  import * as fs from 'node:fs/promises';
2
3
  import type { ImportAnalyzerPort } from '../../domain/ports/import-analyzer-port.js';
3
4
 
@@ -1,3 +1,4 @@
1
+ // @layer infrastructure
1
2
  import * as fs from 'node:fs/promises';
2
3
  import * as path from 'node:path';
3
4
  import { V0TestId } from '../../domain/value-objects/v0-test-id.js';
@@ -1,3 +1,4 @@
1
+ // @layer infrastructure
1
2
  import type { ConfigQueryPort } from '../../domain/ports/config-query-port.js';
2
3
 
3
4
  export class HarnessConfigQueryAdapter implements ConfigQueryPort {
@@ -1,3 +1,4 @@
1
+ // @layer infrastructure
1
2
  import * as fs from 'node:fs/promises';
2
3
  import * as path from 'node:path';
3
4
  import type { SuiteIdValue } from '../../domain/value-objects/suite-id.js';
@@ -1,3 +1,4 @@
1
+ // @layer infrastructure
1
2
  import * as fs from 'node:fs/promises';
2
3
  import * as path from 'node:path';
3
4
  import type { V0TestMigration } from '../../domain/aggregates/v0-test-migration.js';
@@ -1,3 +1,4 @@
1
+ // @layer infrastructure
1
2
  import type { SuiteId } from '../../domain/value-objects/suite-id.js';
2
3
  import type { RegressionSuiteDefinition } from '../../domain/value-objects/regression-suite-definition.js';
3
4
  import type { SuiteRegistryPort } from '../../domain/ports/suite-registry-port.js';
@@ -1,3 +1,4 @@
1
+ // @layer infrastructure
1
2
  import { execSync } from 'node:child_process';
2
3
  import { existsSync } from 'node:fs';
3
4
  import { join } from 'node:path';
@@ -1,3 +1,4 @@
1
+ // @layer infrastructure
1
2
  import { SuiteId } from '../../domain/value-objects/suite-id.js';
2
3
  import { RegressionSuiteDefinition } from '../../domain/value-objects/regression-suite-definition.js';
3
4
  import { AgentIndependenceTest } from '../../domain/value-objects/agent-independence-test.js';
@@ -1,3 +1,4 @@
1
+ // @layer infrastructure
1
2
  import { SuiteId } from '../../domain/value-objects/suite-id.js';
2
3
  import { RegressionSuiteDefinition } from '../../domain/value-objects/regression-suite-definition.js';
3
4
  import { GngConditionTest } from '../../domain/value-objects/gng-condition-test.js';
@@ -1,3 +1,4 @@
1
+ // @layer infrastructure
1
2
  import { SuiteId } from '../../domain/value-objects/suite-id.js';
2
3
  import { RegressionSuiteDefinition } from '../../domain/value-objects/regression-suite-definition.js';
3
4
  import { KRequirementTest } from '../../domain/value-objects/k-requirement-test.js';
@@ -1,3 +1,4 @@
1
+ // @layer infrastructure
1
2
  import { SuiteId } from '../../domain/value-objects/suite-id.js';
2
3
  import { RegressionSuiteDefinition } from '../../domain/value-objects/regression-suite-definition.js';
3
4
  import { KRequirementTest } from '../../domain/value-objects/k-requirement-test.js';
@@ -18,16 +18,86 @@ const HARNESS_CONFIG_FILE = 'phasegate.config.json';
18
18
  const HOOKS_TEMPLATE_DIR = join('templates', '.claude');
19
19
  const HOOKS_TARGET_DIR = '.claude';
20
20
 
21
+ // ── Skill Category Map ──
22
+
23
+ export type SkillCategory = 'core' | 'aidlc' | 'utility';
24
+ export type SkillSet = 'core' | 'all';
25
+
26
+ export const SKILL_CATEGORIES: Record<SkillCategory, readonly string[]> = {
27
+ core: [
28
+ 'cascade-updater',
29
+ 'codebase-mapper',
30
+ 'consistency-checker',
31
+ 'doc-freshness-checker',
32
+ 'engineering-perspective',
33
+ 'implementation-readiness-checker',
34
+ 'pointer-validator',
35
+ 'test-coverage-checker',
36
+ ],
37
+ aidlc: [
38
+ 'domain-designer',
39
+ 'environment-designer',
40
+ 'implementation-planner',
41
+ 'it-test-designer',
42
+ 'it-test-logic-designer',
43
+ 'logical-designer',
44
+ 'mock-designer',
45
+ 'product-architect',
46
+ 'quick-implementor',
47
+ 'scenario-test-designer',
48
+ 'scenario-test-logic-designer',
49
+ 'story-implementor',
50
+ 'story-mapper',
51
+ 'story-writer',
52
+ 'uiux-designer',
53
+ 'unit-designer',
54
+ 'unit-test-designer',
55
+ 'unit-test-logic-designer',
56
+ ],
57
+ utility: [
58
+ 'codex-delegator',
59
+ 'skill-creator',
60
+ ],
61
+ } as const;
62
+
63
+ /**
64
+ * 指定された SkillSet に含まれるスキル名の一覧を返す。
65
+ */
66
+ export function getSkillsForSet(skillSet: SkillSet): string[] {
67
+ if (skillSet === 'core') {
68
+ return [...SKILL_CATEGORIES.core];
69
+ }
70
+ return [
71
+ ...SKILL_CATEGORIES.core,
72
+ ...SKILL_CATEGORIES.aidlc,
73
+ ...SKILL_CATEGORIES.utility,
74
+ ];
75
+ }
76
+
77
+ /**
78
+ * スキル名からカテゴリを逆引きする。未知のスキルは null を返す。
79
+ */
80
+ export function getCategoryForSkill(skillName: string): SkillCategory | null {
81
+ for (const [category, skills] of Object.entries(SKILL_CATEGORIES)) {
82
+ if ((skills as readonly string[]).includes(skillName)) {
83
+ return category as SkillCategory;
84
+ }
85
+ }
86
+ return null;
87
+ }
88
+
21
89
  export interface DeployResult {
22
90
  deployedSkills: string[];
23
91
  targetDir: string;
24
92
  version: string;
25
93
  deployedAt: string;
94
+ skillSet: SkillSet;
26
95
  }
27
96
 
28
97
  export interface VersionInfo {
29
98
  version: string;
30
99
  deployedAt: string;
100
+ skillSet?: SkillSet;
31
101
  }
32
102
 
33
103
  interface PkgJson {
@@ -65,14 +135,20 @@ async function copyDirectory(src: string, dest: string): Promise<number> {
65
135
  * @param harnessRoot - harnessパッケージのルートディレクトリ(skills/がある場所)
66
136
  * @param projectRoot - デプロイ先プロジェクトのルートディレクトリ
67
137
  */
68
- export async function deploySkills(harnessRoot: string, projectRoot: string): Promise<DeployResult> {
138
+ export async function deploySkills(
139
+ harnessRoot: string,
140
+ projectRoot: string,
141
+ skillSet: SkillSet = 'all',
142
+ ): Promise<DeployResult> {
69
143
  const skillsSource = join(harnessRoot, SKILLS_SOURCE_DIR);
70
144
  const skillsTarget = join(projectRoot, SKILLS_TARGET_DIR);
71
145
  const version = await getHarnessVersion(harnessRoot);
72
146
  const deployedAt = new Date().toISOString();
73
147
 
74
148
  const skillDirs = await fs.readdir(skillsSource, { withFileTypes: true });
75
- const skills = skillDirs.filter((d) => d.isDirectory()).map((d) => d.name);
149
+ const allSkills = skillDirs.filter((d) => d.isDirectory()).map((d) => d.name);
150
+ const allowedSkills = getSkillsForSet(skillSet);
151
+ const skills = allSkills.filter((s) => allowedSkills.includes(s));
76
152
 
77
153
  await fs.mkdir(skillsTarget, { recursive: true });
78
154
 
@@ -82,14 +158,14 @@ export async function deploySkills(harnessRoot: string, projectRoot: string): Pr
82
158
  await copyDirectory(srcSkillDir, destSkillDir);
83
159
  }
84
160
 
85
- const versionInfo: VersionInfo = { version, deployedAt };
161
+ const versionInfo: VersionInfo = { version, deployedAt, skillSet };
86
162
  await fs.writeFile(
87
163
  join(skillsTarget, HARNESS_VERSION_FILE),
88
164
  JSON.stringify(versionInfo, null, 2) + '\n',
89
165
  'utf-8',
90
166
  );
91
167
 
92
- return { deployedSkills: skills, targetDir: skillsTarget, version, deployedAt };
168
+ return { deployedSkills: skills, targetDir: skillsTarget, version, deployedAt, skillSet };
93
169
  }
94
170
 
95
171
  /**
@@ -176,6 +252,7 @@ export async function deployHookScripts(
176
252
  export async function initHarnessConfig(
177
253
  projectRoot: string,
178
254
  projectName: string,
255
+ phasePreset?: 'full' | 'standard' | 'minimal' | 'custom',
179
256
  ): Promise<{ created: boolean; path: string }> {
180
257
  const configPath = join(projectRoot, HARNESS_CONFIG_FILE);
181
258
  try {
@@ -193,7 +270,7 @@ export async function initHarnessConfig(
193
270
  layers: {},
194
271
  quickMode: {},
195
272
  phaseDependencies: {
196
- preset: 'default',
273
+ preset: phasePreset ?? 'default',
197
274
  override: false,
198
275
  customRules: [],
199
276
  },
@@ -1,3 +1,4 @@
1
+ // @layer domain
1
2
  // harness-api.ts — Shared Kernel public entry for harness-api types
2
3
 
3
4
  export type { HarnessApiResponseContract } from '../harness-api/application/dto/harness-api-response-contract.js';
@@ -1,4 +1,5 @@
1
1
  /**
2
+ * @layer infrastructure
2
3
  * @unit skill-quality
3
4
  * Composition Root - wires all dependencies together
4
5
  */
@@ -2,7 +2,8 @@
2
2
  * @layer infrastructure
3
3
  * @unit skill-quality
4
4
  */
5
- import Ajv from 'ajv';
5
+ import AjvModule from 'ajv';
6
+ const Ajv = (AjvModule as any).default ?? AjvModule;
6
7
  import type { LessonArtifactSchemaPort } from '../../domain/ports/lesson-artifact-schema-port.js';
7
8
  import type { ValidationViolation } from '../../domain/types/validation-violation.js';
8
9
 
@@ -17,8 +18,8 @@ const LESSON_ARTIFACT_SCHEMA = {
17
18
  };
18
19
 
19
20
  export class AjvLessonArtifactSchemaAdapter implements LessonArtifactSchemaPort {
20
- private readonly ajv: Ajv;
21
- private readonly compiledValidator: ReturnType<Ajv['compile']>;
21
+ private readonly ajv: InstanceType<typeof Ajv>;
22
+ private readonly compiledValidator: ReturnType<InstanceType<typeof Ajv>["compile"]>;
22
23
 
23
24
  constructor() {
24
25
  this.ajv = new Ajv();
@@ -28,7 +29,7 @@ export class AjvLessonArtifactSchemaAdapter implements LessonArtifactSchemaPort
28
29
  async validate(json: unknown): Promise<readonly ValidationViolation[]> {
29
30
  const valid = this.compiledValidator(json);
30
31
  if (valid) return [];
31
- return (this.compiledValidator.errors ?? []).map((err) => ({
32
+ return (this.compiledValidator.errors ?? []).map((err: any) => ({
32
33
  ruleId: 'SCHEMA_VIOLATION',
33
34
  message: err.message ?? 'Schema validation error',
34
35
  location: err.instancePath,
@@ -80,10 +80,10 @@ export class MetadataValidator {
80
80
  }>;
81
81
  }): Promise<MetadataValidationResult> {
82
82
  const errors: TraceabilityHarnessError[] = [];
83
- const unitTag = input.tags.find((tag) => tag.type === '@unit');
83
+ const unitTags = input.tags.filter((tag) => tag.type === '@unit');
84
84
  const layerTag = input.tags.find((tag) => tag.type === '@layer');
85
85
 
86
- if (!unitTag) {
86
+ if (unitTags.length === 0) {
87
87
  errors.push(
88
88
  createError({
89
89
  message: '@unit が必要です',
@@ -111,14 +111,16 @@ export class MetadataValidator {
111
111
  );
112
112
  }
113
113
 
114
- if (unitTag && !(await hasUnit(this.unitDefinitionPort, unitTag.value))) {
115
- errors.push(
116
- createError({
117
- message: `@unit "${unitTag.value}" は unit 定義に存在しません`,
118
- suggestion: '登録済みの unit 名を指定してください',
119
- fixExample: '@unit traceability-model',
120
- }),
121
- );
114
+ for (const unitTag of unitTags) {
115
+ if (!(await hasUnit(this.unitDefinitionPort, unitTag.value))) {
116
+ errors.push(
117
+ createError({
118
+ message: `@unit "${unitTag.value}" は unit 定義に存在しません`,
119
+ suggestion: '登録済みの unit 名を指定してください',
120
+ fixExample: '@unit traceability-model',
121
+ }),
122
+ );
123
+ }
122
124
  }
123
125
 
124
126
  if (errors.length > 0) {
@@ -17,6 +17,20 @@ export interface ParsedMetadataTag {
17
17
  readonly lineNumber: number;
18
18
  }
19
19
 
20
+ function expandUnitTags(rawValue: string, lineNumber: number): ParsedMetadataTag[] {
21
+ if (!rawValue.includes(',')) {
22
+ return [{ type: '@unit', value: rawValue.trim(), lineNumber }];
23
+ }
24
+ return rawValue
25
+ .split(',')
26
+ .map((v) => ({
27
+ type: '@unit' as const,
28
+ value: v.trim(),
29
+ lineNumber,
30
+ }))
31
+ .filter((t) => t.value.length > 0);
32
+ }
33
+
20
34
  /**
21
35
  * 実装ファイル向けに @unit / @layer / @story-id を抽出する
22
36
  */
@@ -30,7 +44,7 @@ export function parseImplementationTags(content: string): readonly ParsedMetadat
30
44
 
31
45
  const unitMatch = UNIT_TAG_PATTERN.exec(line);
32
46
  if (unitMatch) {
33
- tags.push({ type: '@unit', value: unitMatch[1].trim(), lineNumber });
47
+ tags.push(...expandUnitTags(unitMatch[1], lineNumber));
34
48
  }
35
49
 
36
50
  const layerMatch = LAYER_TAG_PATTERN.exec(line);
@@ -80,7 +94,7 @@ export function parseAllTags(content: string): readonly ParsedMetadataTag[] {
80
94
 
81
95
  const unitMatch = UNIT_TAG_PATTERN.exec(line);
82
96
  if (unitMatch) {
83
- tags.push({ type: '@unit', value: unitMatch[1].trim(), lineNumber });
97
+ tags.push(...expandUnitTags(unitMatch[1], lineNumber));
84
98
  }
85
99
 
86
100
  const layerMatch = LAYER_TAG_PATTERN.exec(line);
@@ -9,6 +9,19 @@ review: opus
9
9
 
10
10
  下位フェーズでの発見・変更・人間からの指示を、正しいレイヤーの設計文書にフィードバックし、影響範囲を整合的に更新するスキル。
11
11
 
12
+ ## storyReflection ゲート通過の標準手段
13
+
14
+ `phaseDependencies.storyReflection`(ADR-013)は、`docs/inception/{unit}/{storyId}/` 配下の US/issue 設計が `docs/product/construction/{unit}/` の累積設計文書に反映されていない場合、`src/{unit}/*` および `scripts/harness/{unit}/*` への Write/Edit(Bash 迂回経由の書き込みも含む)を pre-tool-use hook でブロックする。
15
+
16
+ **cascade-updater はこの storyReflection ゲートを通過する標準手段である。**
17
+
18
+ - `full` / `standard` プリセットでは、inception の新規 US/issue を作成した後、実装着手前に cascade-updater を実行して product 文書に `@story-id {storyId}` を追記する
19
+ - cascade-updater を実行せずに実装へ進もうとすると `[L2-STORY-REFLECTION]` ブロックが発生する(エラー中で本スキルの実行が案内される)
20
+ - `minimal` プリセットでは storyReflection が無効化されるためゲート連動しないが、cascade-updater による設計整合性の維持は推奨される
21
+ - Quick Mode (`relaxedGates: ["phase-gate"]`) 時は storyReflection も緩和されるため、cascade-updater 実行の必須性は緩まる(ただし品質維持のため実行は推奨)
22
+
23
+ 詳細は ADR-013 および `docs/guide/configuration.md` の storyReflection セクションを参照。
24
+
12
25
  ## 前提条件チェック
13
26
 
14
27
  ### 必須インプット
@@ -21,10 +34,10 @@ review: opus
21
34
 
22
35
  **このスキルは3フェーズで実行する。**
23
36
  - **Phase 1(計画)**: Opus がスコープ・方針・不明点を整理し、人間の承認を得る
24
- - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`scripts/delegate-sonnet.sh` 経由)
37
+ - **Phase 2(実行)**: プロジェクトのモデルルーティング設定に従い、実行モデルに委譲して成果物を生成する
25
38
  - **Phase 3(レビュー)**: Opus が成果物を検証し、問題があれば直接修正する
26
39
 
27
- **Phase 1/2/3を同時に実行してはならない。モデルルーティングの詳細は `docs/principles/model-routing.md` を参照。**
40
+ **Phase 1/2/3を同時に実行してはならない。**
28
41
 
29
42
  ---
30
43
 
@@ -110,7 +123,7 @@ review: opus
110
123
 
111
124
  ### レビュー手順
112
125
  1. Sonnetが出力したファイルを読み込む
113
- 2. `docs/principles/model-routing.md` のレビュー観点 R1〜R7 に沿って検証する
126
+ 2. プロジェクトのレビュー基準に沿って検証する
114
127
  3. **スキル固有レビュー観点**を検証する
115
128
  4. 判定結果を出力する
116
129