phasegate 0.15.0 → 0.31.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 (229) hide show
  1. package/README.ja.md +103 -71
  2. package/README.md +73 -13
  3. package/bin/{harness → phasegate} +1 -1
  4. package/docs/ADR/ADR-013-story-reflection-gate.md +100 -0
  5. package/docs/guide/cli-reference.md +9 -9
  6. package/docs/guide/configuration.md +245 -8
  7. package/docs/guide/hooks-integration.md +1 -1
  8. package/docs/guide/installation.md +6 -6
  9. package/docs/guide/layer-model.md +5 -5
  10. package/docs/guide/skills-overview.md +1 -1
  11. package/package.json +12 -10
  12. package/scripts/harness/adr-foundation/domain/ports/adr-document-parser-port.ts +1 -0
  13. package/scripts/harness/adr-foundation/domain/ports/adr-frontmatter-parser-port.ts +1 -0
  14. package/scripts/harness/adr-foundation/domain/ports/adr-repository-port.ts +1 -0
  15. package/scripts/harness/adr-foundation/domain/value-objects/adr-status.ts +6 -6
  16. package/scripts/harness/agent-integration/application/dto/handle-pre-tool-use-dto.ts +3 -1
  17. package/scripts/harness/agent-integration/application/usecases/handle-pre-tool-use-usecase.ts +109 -3
  18. package/scripts/harness/agent-integration/application/usecases/handle-stop-usecase.ts +1 -1
  19. package/scripts/harness/agent-integration/domain/ports/config-query-port.ts +2 -0
  20. package/scripts/harness/agent-integration/domain/ports/phase-gate-query-port.ts +1 -1
  21. package/scripts/harness/agent-integration/domain/ports/story-reflection-query-port.ts +8 -0
  22. package/scripts/harness/agent-integration/domain/services/bash-write-target-extractor.ts +258 -0
  23. package/scripts/harness/agent-integration/domain/services/hook-to-cli-translator.ts +25 -8
  24. package/scripts/harness/agent-integration/domain/value-objects/protected-file-list.ts +20 -0
  25. package/scripts/harness/agent-integration/domain/value-objects/story-reflection-query-result.ts +63 -0
  26. package/scripts/harness/agent-integration/infrastructure/adapters/child-process-cli-executor-adapter.ts +2 -2
  27. package/scripts/harness/agent-integration/infrastructure/adapters/file-system-story-reflection-query-adapter.ts +122 -0
  28. package/scripts/harness/agent-integration/infrastructure/adapters/harness-api-cli-command-registry-adapter.ts +10 -10
  29. package/scripts/harness/agent-integration/infrastructure/adapters/harness-config-config-query-adapter.ts +20 -0
  30. package/scripts/harness/agent-integration/infrastructure/adapters/phase-gate-query-adapter.ts +17 -3
  31. package/scripts/harness/agent-integration/presentation/pre-tool-use-hook.ts +29 -2
  32. package/scripts/harness/biome-ast-engine/domain/services/lint-runner.ts +24 -0
  33. package/scripts/harness/biome-ast-engine/domain/services/rule-definition-registry.ts +1 -1
  34. package/scripts/harness/biome-ast-engine/domain/value-objects/source-module-snapshot.ts +5 -2
  35. package/scripts/harness/biome-ast-engine/infrastructure/adapters/node-workspace-file-adapter.ts +1 -1
  36. package/scripts/harness/biome-ast-engine/infrastructure/adapters/typescript-source-module-analyzer-adapter.ts +1 -1
  37. package/scripts/harness/biome-ast-engine/infrastructure/parsers/unit-comment-parser.ts +12 -7
  38. package/scripts/harness/ci-governance/composition-root.ts +1 -0
  39. package/scripts/harness/ci-governance/infrastructure/adapters/agents-md-file-adapter.ts +2 -2
  40. package/scripts/harness/ci-governance/infrastructure/adapters/yaml-template-renderer-adapter.ts +2 -2
  41. package/scripts/harness/config-foundation/application/mappers/phase-config-section-mapper.ts +44 -0
  42. package/scripts/harness/config-foundation/application/usecases/load-resolved-config-use-case.ts +20 -1
  43. package/scripts/harness/config-foundation/domain/harness-config.ts +2 -1
  44. package/scripts/harness/config-foundation/domain/value-objects/phase-dependencies-config.ts +18 -4
  45. package/scripts/harness/config-foundation/infrastructure/schemas/harness-config-v2.schema.json +185 -10
  46. package/scripts/harness/config-foundation/infrastructure/validators/ajv-config-schema-validator.ts +2 -1
  47. package/scripts/harness/harness-api/application/dto/command-dispatch-input.ts +1 -0
  48. package/scripts/harness/harness-api/application/dto/command-dispatch-output.ts +1 -0
  49. package/scripts/harness/harness-api/application/dto/exit-code-decision-input.ts +1 -0
  50. package/scripts/harness/harness-api/application/dto/exit-code-decision-output.ts +1 -0
  51. package/scripts/harness/harness-api/application/dto/harness-api-response-contract.ts +1 -0
  52. package/scripts/harness/harness-api/application/dto/initialize-registry-input.ts +1 -0
  53. package/scripts/harness/harness-api/application/dto/registry-summary-output.ts +1 -0
  54. package/scripts/harness/harness-api/application/dto/status-derivation-input.ts +1 -0
  55. package/scripts/harness/harness-api/application/mappers/harness-api-response-mapper.ts +1 -0
  56. package/scripts/harness/harness-api/application/usecases/decide-exit-code-usecase.ts +4 -3
  57. package/scripts/harness/harness-api/application/usecases/derive-harness-status-usecase.ts +1 -0
  58. package/scripts/harness/harness-api/application/usecases/dispatch-command-usecase.ts +1 -0
  59. package/scripts/harness/harness-api/application/usecases/initialize-command-registry-usecase.ts +1 -0
  60. package/scripts/harness/harness-api/composition-root.ts +1 -0
  61. package/scripts/harness/harness-api/domain/ports/artifact-scanner-port.ts +1 -0
  62. package/scripts/harness/harness-api/domain/ports/biome-lint-port.ts +1 -0
  63. package/scripts/harness/harness-api/domain/ports/config-query-port.ts +1 -0
  64. package/scripts/harness/harness-api/domain/ports/impact-analysis-port.ts +1 -0
  65. package/scripts/harness/harness-api/domain/ports/phase-gate-query-port.ts +1 -0
  66. package/scripts/harness/harness-api/domain/ports/validator-execution-port.ts +1 -0
  67. package/scripts/harness/harness-api/domain/services/command-dispatch-service.ts +17 -16
  68. package/scripts/harness/harness-api/domain/services/command-registry.ts +4 -3
  69. package/scripts/harness/harness-api/domain/services/status-derivation-service.ts +1 -0
  70. package/scripts/harness/harness-api/domain/value-objects/artifact-scan-result.ts +1 -0
  71. package/scripts/harness/harness-api/domain/value-objects/check-ready-result.ts +1 -0
  72. package/scripts/harness/harness-api/domain/value-objects/ci-check-result.ts +1 -0
  73. package/scripts/harness/harness-api/domain/value-objects/cli-command-definition.ts +11 -10
  74. package/scripts/harness/harness-api/domain/value-objects/command-input-spec.ts +1 -0
  75. package/scripts/harness/harness-api/domain/value-objects/drift-report-summary.ts +1 -0
  76. package/scripts/harness/harness-api/domain/value-objects/exit-code-spec.ts +1 -0
  77. package/scripts/harness/harness-api/domain/value-objects/harness-api-response.ts +1 -0
  78. package/scripts/harness/harness-api/domain/value-objects/harness-status-summary.ts +1 -0
  79. package/scripts/harness/harness-api/domain/value-objects/layer-health.ts +1 -0
  80. package/scripts/harness/harness-api/domain/value-objects/phase-info.ts +1 -0
  81. package/scripts/harness/harness-api/index.ts +1 -0
  82. package/scripts/harness/harness-api/infrastructure/adapters/biome-ast-engine-lint-adapter.ts +1 -0
  83. package/scripts/harness/harness-api/infrastructure/adapters/file-system-artifact-scanner-adapter.ts +1 -0
  84. package/scripts/harness/harness-api/infrastructure/adapters/harness-config-query-adapter.ts +1 -0
  85. package/scripts/harness/harness-api/infrastructure/adapters/nyquist-validation-impact-analysis-adapter.ts +1 -0
  86. package/scripts/harness/harness-api/infrastructure/adapters/phase-dependency-model-query-adapter.ts +1 -0
  87. package/scripts/harness/harness-api/infrastructure/adapters/validator-system-execution-adapter.ts +1 -0
  88. package/scripts/harness/harness-api/presentation/dto/cli-output-options.ts +1 -0
  89. package/scripts/harness/harness-api/presentation/formatters/harness-api-json-formatter.ts +1 -0
  90. package/scripts/harness/harness-api/presentation/handlers/check-phase-handler.ts +2 -1
  91. package/scripts/harness/harness-api/presentation/handlers/check-ready-handler.ts +2 -1
  92. package/scripts/harness/harness-api/presentation/handlers/ci-check-handler.ts +2 -1
  93. package/scripts/harness/harness-api/presentation/handlers/complete-check-handler.ts +2 -1
  94. package/scripts/harness/harness-api/presentation/handlers/detect-drift-handler.ts +2 -1
  95. package/scripts/harness/harness-api/presentation/handlers/impact-analysis-handler.ts +2 -1
  96. package/scripts/harness/harness-api/presentation/handlers/lint-handler.ts +2 -1
  97. package/scripts/harness/harness-api/presentation/handlers/status-handler.ts +4 -3
  98. package/scripts/harness/harness-error/infrastructure/adapters/legacy-error-reporter-adapter.ts +7 -1
  99. package/scripts/harness/integrations/pre-commit.ts +1 -0
  100. package/scripts/harness/main.ts +173 -53
  101. package/scripts/harness/phase-dependency-model/application/dto/resolve-gate-result-dto.ts +14 -0
  102. package/scripts/harness/phase-dependency-model/application/services/phase-gate-result-mapper.ts +20 -0
  103. package/scripts/harness/phase-dependency-model/application/usecases/check-story-reflection-usecase.ts +42 -0
  104. package/scripts/harness/phase-dependency-model/application/usecases/resolve-gate-usecase.ts +161 -0
  105. package/scripts/harness/phase-dependency-model/composition-root.ts +57 -1
  106. package/scripts/harness/phase-dependency-model/domain/definitions/{default-phase-dependencies.ts → full-phase-dependencies.ts} +3 -3
  107. package/scripts/harness/phase-dependency-model/domain/definitions/{default-phase-nodes.ts → full-phase-nodes.ts} +1 -1
  108. package/scripts/harness/phase-dependency-model/domain/definitions/full-story-reflection-defaults.ts +28 -0
  109. package/scripts/harness/phase-dependency-model/domain/definitions/minimal-phase-dependencies.ts +32 -0
  110. package/scripts/harness/phase-dependency-model/domain/definitions/minimal-phase-nodes.ts +50 -0
  111. package/scripts/harness/phase-dependency-model/domain/definitions/minimal-story-reflection-defaults.ts +8 -0
  112. package/scripts/harness/phase-dependency-model/domain/definitions/standard-phase-dependencies.ts +39 -0
  113. package/scripts/harness/phase-dependency-model/domain/definitions/standard-phase-nodes.ts +118 -0
  114. package/scripts/harness/phase-dependency-model/domain/definitions/standard-story-reflection-defaults.ts +23 -0
  115. package/scripts/harness/phase-dependency-model/domain/models/phase-structure.ts +95 -23
  116. package/scripts/harness/phase-dependency-model/domain/ports/glob-matcher-port.ts +8 -0
  117. package/scripts/harness/phase-dependency-model/domain/ports/phase-config-provider-port.ts +2 -0
  118. package/scripts/harness/phase-dependency-model/domain/ports/story-annotation-verifier-port.ts +14 -0
  119. package/scripts/harness/phase-dependency-model/domain/ports/story-reflection-file-system-port.ts +16 -0
  120. package/scripts/harness/phase-dependency-model/domain/services/gate-graph.ts +223 -0
  121. package/scripts/harness/phase-dependency-model/domain/services/story-reflection-checker.ts +66 -0
  122. package/scripts/harness/phase-dependency-model/domain/values/gate-definition.ts +127 -0
  123. package/scripts/harness/phase-dependency-model/domain/values/gate-name.ts +40 -0
  124. package/scripts/harness/phase-dependency-model/domain/values/gate-story-annotation.ts +39 -0
  125. package/scripts/harness/phase-dependency-model/domain/values/phase-customization-policy.ts +16 -4
  126. package/scripts/harness/phase-dependency-model/domain/values/story-reflection-config.ts +44 -0
  127. package/scripts/harness/phase-dependency-model/domain/values/story-reflection-mapping.ts +91 -0
  128. package/scripts/harness/phase-dependency-model/domain/values/story-reflection-result.ts +55 -0
  129. package/scripts/harness/phase-dependency-model/infrastructure/adapters/picomatch-glob-matcher.ts +17 -0
  130. package/scripts/harness/phase-dependency-model/infrastructure/adapters/story-annotation-verifier-adapter.ts +46 -0
  131. package/scripts/harness/phase-dependency-model/infrastructure/config/custom-gates-config-parser.ts +22 -0
  132. package/scripts/harness/phase-dependency-model/infrastructure/config/harness-config-phase-config-provider.ts +78 -2
  133. package/scripts/harness/phase-dependency-model/infrastructure/filesystem/file-system-story-reflection-adapter.ts +94 -0
  134. package/scripts/harness/phase-dependency-model/presentation/cli/check-phase-gate-command-handler.ts +12 -4
  135. package/scripts/harness/phase-dependency-model/presentation/cli/story-reflection-status-presenter.ts +87 -0
  136. package/scripts/harness/quick-mode/application/usecases/execute-quick-ci-check-usecase.ts +1 -1
  137. package/scripts/harness/quick-mode/presentation/handlers/ci-check-quick-mode-handler.ts +1 -1
  138. package/scripts/harness/regression-suite/application/dto/analyze-migration-input.ts +1 -0
  139. package/scripts/harness/regression-suite/application/dto/analyze-migration-output.ts +1 -0
  140. package/scripts/harness/regression-suite/application/dto/configure-ci-gate-input.ts +1 -0
  141. package/scripts/harness/regression-suite/application/dto/configure-ci-gate-output.ts +1 -0
  142. package/scripts/harness/regression-suite/application/dto/migrate-v0-tests-input.ts +1 -0
  143. package/scripts/harness/regression-suite/application/dto/migrate-v0-tests-output.ts +1 -0
  144. package/scripts/harness/regression-suite/application/dto/run-regression-suite-input.ts +1 -0
  145. package/scripts/harness/regression-suite/application/dto/run-regression-suite-output.ts +1 -0
  146. package/scripts/harness/regression-suite/application/mappers/migration-mapping-mapper.ts +1 -0
  147. package/scripts/harness/regression-suite/application/mappers/test-execution-summary-mapper.ts +1 -0
  148. package/scripts/harness/regression-suite/application/usecases/analyze-v0-migration-usecase.ts +1 -0
  149. package/scripts/harness/regression-suite/application/usecases/configure-ci-gate-usecase.ts +1 -0
  150. package/scripts/harness/regression-suite/application/usecases/migrate-v0-tests-usecase.ts +1 -0
  151. package/scripts/harness/regression-suite/application/usecases/run-agent-independence-guard-usecase.ts +1 -0
  152. package/scripts/harness/regression-suite/application/usecases/run-gng-gate-regression-usecase.ts +1 -0
  153. package/scripts/harness/regression-suite/application/usecases/run-k-requirements-regression-usecase.ts +1 -0
  154. package/scripts/harness/regression-suite/application/usecases/run-k14-k15-regression-usecase.ts +1 -0
  155. package/scripts/harness/regression-suite/composition-root.ts +1 -0
  156. package/scripts/harness/regression-suite/domain/aggregates/v0-test-migration.ts +1 -0
  157. package/scripts/harness/regression-suite/domain/ports/ci-gate-result-writer-port.ts +1 -0
  158. package/scripts/harness/regression-suite/domain/ports/config-query-port.ts +1 -0
  159. package/scripts/harness/regression-suite/domain/ports/import-analyzer-port.ts +1 -0
  160. package/scripts/harness/regression-suite/domain/ports/migration-mapping-repository-port.ts +1 -0
  161. package/scripts/harness/regression-suite/domain/ports/suite-registry-port.ts +1 -0
  162. package/scripts/harness/regression-suite/domain/ports/test-runner-port.ts +1 -0
  163. package/scripts/harness/regression-suite/domain/ports/v0-spec-reader-port.ts +1 -0
  164. package/scripts/harness/regression-suite/domain/services/import-guard-service.ts +1 -0
  165. package/scripts/harness/regression-suite/domain/services/migration-analyzer.ts +1 -0
  166. package/scripts/harness/regression-suite/domain/services/regression-runner.ts +1 -0
  167. package/scripts/harness/regression-suite/domain/value-objects/agent-independence-test.ts +1 -0
  168. package/scripts/harness/regression-suite/domain/value-objects/biome-modification-spec.ts +1 -0
  169. package/scripts/harness/regression-suite/domain/value-objects/ci-gate-config.ts +1 -0
  170. package/scripts/harness/regression-suite/domain/value-objects/coverage-rate.ts +1 -0
  171. package/scripts/harness/regression-suite/domain/value-objects/gng-condition-test.ts +1 -0
  172. package/scripts/harness/regression-suite/domain/value-objects/import-violation.ts +1 -0
  173. package/scripts/harness/regression-suite/domain/value-objects/k-requirement-test.ts +1 -0
  174. package/scripts/harness/regression-suite/domain/value-objects/migration-mapping.ts +1 -0
  175. package/scripts/harness/regression-suite/domain/value-objects/regression-suite-definition.ts +1 -0
  176. package/scripts/harness/regression-suite/domain/value-objects/suite-id.ts +1 -0
  177. package/scripts/harness/regression-suite/domain/value-objects/test-execution-summary.ts +1 -0
  178. package/scripts/harness/regression-suite/domain/value-objects/test-failure-detail.ts +1 -0
  179. package/scripts/harness/regression-suite/domain/value-objects/v0-test-id.ts +1 -0
  180. package/scripts/harness/regression-suite/domain/value-objects/v1-test-path.ts +1 -0
  181. package/scripts/harness/regression-suite/infrastructure/adapters/biome-ast-import-analyzer-adapter.ts +1 -0
  182. package/scripts/harness/regression-suite/infrastructure/adapters/file-system-v0-spec-reader-adapter.ts +1 -0
  183. package/scripts/harness/regression-suite/infrastructure/adapters/harness-config-query-adapter.ts +1 -0
  184. package/scripts/harness/regression-suite/infrastructure/adapters/json-ci-gate-result-writer-adapter.ts +1 -0
  185. package/scripts/harness/regression-suite/infrastructure/adapters/markdown-migration-mapping-repository-adapter.ts +1 -0
  186. package/scripts/harness/regression-suite/infrastructure/adapters/static-suite-registry-adapter.ts +1 -0
  187. package/scripts/harness/regression-suite/infrastructure/adapters/vitest-test-runner-adapter.ts +1 -0
  188. package/scripts/harness/regression-suite/infrastructure/registry/agent-independence-suite-definition.ts +1 -0
  189. package/scripts/harness/regression-suite/infrastructure/registry/gng-gate-suite-definition.ts +1 -0
  190. package/scripts/harness/regression-suite/infrastructure/registry/k-requirements-suite-definition.ts +1 -0
  191. package/scripts/harness/regression-suite/infrastructure/registry/v0-migration-suite-definition.ts +1 -0
  192. package/scripts/harness/setup/skill-deployer.ts +82 -5
  193. package/scripts/harness/shared-kernel/harness-api.ts +1 -0
  194. package/scripts/harness/skill-quality/composition-root.ts +1 -0
  195. package/scripts/harness/skill-quality/infrastructure/adapters/ajv-lesson-artifact-schema-adapter.ts +5 -4
  196. package/scripts/harness/traceability-model/domain/services/metadata-validator.ts +12 -10
  197. package/scripts/harness/traceability-model/infrastructure/parsers/source-metadata-parser.ts +16 -2
  198. package/scripts/harness/validator-system/composition-root.ts +3 -3
  199. package/skills/cascade-updater/SKILL.md +16 -3
  200. package/skills/codebase-mapper/SKILL.md +9 -9
  201. package/skills/codex-delegator/SKILL.md +5 -56
  202. package/skills/consistency-checker/SKILL.md +5 -9
  203. 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
  204. package/skills/doc-freshness-checker/SKILL.md +6 -6
  205. package/skills/engineering-perspective/SKILL.md +2 -58
  206. package/skills/engineering-perspective/references/domain-model.md +4 -135
  207. package/skills/implementation-readiness-checker/SKILL.md +18 -72
  208. package/skills/it-test-designer/SKILL.md +25 -161
  209. package/skills/it-test-designer/references/it-test-design-template.md +131 -0
  210. package/skills/it-test-logic-designer/SKILL.md +13 -388
  211. package/skills/it-test-logic-designer/references/controller-test-patterns.md +100 -0
  212. package/skills/it-test-logic-designer/references/repository-test-patterns.md +206 -0
  213. package/skills/it-test-logic-designer/references/usecase-test-patterns.md +87 -0
  214. package/skills/pointer-validator/SKILL.md +4 -4
  215. package/skills/scenario-test-designer/SKILL.md +4 -68
  216. package/skills/scenario-test-designer/references/scenario-test-design-template.md +41 -0
  217. package/skills/scenario-test-designer/references/scenario-test-plan-template.md +35 -0
  218. package/skills/scenario-test-logic-designer/SKILL.md +21 -304
  219. package/skills/scenario-test-logic-designer/references/msw-patterns.md +36 -0
  220. package/skills/scenario-test-logic-designer/references/playwright-patterns.md +237 -0
  221. package/skills/test-coverage-checker/SKILL.md +39 -121
  222. package/skills/test-coverage-checker/references/coverage-report-template.md +99 -0
  223. package/skills/uiux-designer/SKILL.md +27 -92
  224. package/skills/uiux-designer/references/data-testid-convention.md +38 -0
  225. package/skills/uiux-designer/references/uiux-design-template.md +105 -0
  226. package/skills/unit-test-designer/SKILL.md +5 -106
  227. package/skills/unit-test-designer/references/unit-test-design-template.md +127 -0
  228. package/skills/unit-test-logic-designer/SKILL.md +28 -250
  229. package/skills/unit-test-logic-designer/references/test-patterns.md +207 -0
@@ -1,3 +1,4 @@
1
+ // @layer application
1
2
  export interface AnalyzeMigrationInput {
2
3
  dryRun?: boolean;
3
4
  outOfScopePattern?: string[];
@@ -1,3 +1,4 @@
1
+ // @layer application
1
2
  export interface AnalyzeMigrationOutput {
2
3
  totalCount: number;
3
4
  migratedCount: number;
@@ -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
  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);
@@ -185,9 +185,9 @@ export function createValidatorSystemModule(config?: object): ValidatorSystemMod
185
185
  const aggregateValidationResultsUseCase = new AggregateValidationResultsUseCase();
186
186
  const KNOWN_CLI_COMMANDS = [
187
187
  'validate', 'lint', 'ci-check', 'detect-drift',
188
- 'harness:check-ready', 'harness:check-phase', 'harness:ci-check',
189
- 'harness:detect-drift', 'harness:lint', 'harness:complete-check',
190
- 'harness:impact-analysis', 'harness:status',
188
+ 'phasegate:check-ready', 'phasegate:check-phase', 'phasegate:ci-check',
189
+ 'phasegate:detect-drift', 'phasegate:lint', 'phasegate:complete-check',
190
+ 'phasegate:impact-analysis', 'phasegate:status',
191
191
  ];
192
192
  const cwd = process.cwd();
193
193
  const itTestFileAnalyzerPort = new ItTestFileAnalyzerAdapter({