phasegate 0.117.0 → 0.118.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.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.118.0] - 2026-05-07
11
+
12
+ ### Fixed
13
+
14
+ - **WI-085 follow-up: validator-system / harness-api 経路で `paths` config が phase-dependency-model に流入していなかった問題を修正** — v0.117.0 リリース後のセルフホスト dogfooding で発見。`scripts/harness/validator-system/infrastructure/adapters/phase-dependency-phase-gate-policy-adapter.ts` および `scripts/harness/harness-api/infrastructure/adapters/phase-dependency-model-query-adapter.ts` が `createPhaseDependencyModelModule({ rootDir })` を `phaseConfig` 引数なしで呼んでおり、`paths.designDocs` / `paths.inceptionDocs` が L2-001 (`npx phasegate validate --layer L2`) と harness-api 経由の phase-gate query から到達できない状態だった。`agent-integration` 配下の `phase-gate-query-adapter.ts` と同等の `loadResolvedConfigUseCase` + `toPhaseConfigSection` 注入経路を 3 箇所追加。
15
+ - dogfood 検証: `paths.designDocs: "mydocs/product/construction"` / `paths.inceptionDocs: "mydocs/inception"` 設定で L2-001 ブロッカーが `mydocs/inception/_shared/product_overview_plan.md` 等を要求することを確認。
16
+ - デフォルト設定での挙動は v0.117.0 と完全互換(dogfood 復元後にベースラインブロッカー `docs/product/units/{unit}_unit.md` のみ残ることを確認)。
17
+
10
18
  ## [0.117.0] - 2026-05-07
11
19
 
12
20
  ### Fixed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "phasegate",
3
- "version": "0.117.0",
3
+ "version": "0.118.0",
4
4
  "packageManager": "pnpm@10.30.1",
5
5
  "description": "Phasegate — AI-agnostic quality defense toolkit. Enforces structural integrity between design intent and code.",
6
6
  "license": "MIT",
@@ -1,3 +1,4 @@
1
+ // @unit harness-api
1
2
  // @layer infrastructure
2
3
  // phase-dependency-model-query-adapter.ts — PhaseDependencyModelQueryAdapter
3
4
  // Wave 2完了後にリアル実装へ差し替え(旧: @stub: wave2-pending)
@@ -28,8 +29,17 @@ export class PhaseDependencyModelQueryAdapter implements PhaseGateQueryPort {
28
29
  const traceModule = createTraceabilityModelModule(rootDir);
29
30
  const storyIds = await traceModule.storyCatalog.getAllStoryIds();
30
31
 
32
+ // WI-085: paths config を phase-dependency-model に流入させる
33
+ const { createConfigFoundationModule } = await import('../../../config-foundation/composition-root.js');
34
+ const { toPhaseConfigSection } = await import('../../../config-foundation/application/mappers/phase-config-section-mapper.js');
35
+ const configModule = createConfigFoundationModule();
36
+ const resolvedConfig = await configModule.usecases.loadResolvedConfigUseCase.execute();
31
37
  const { createPhaseDependencyModelModule } = await import('../../../phase-dependency-model/composition-root.js');
32
- const phaseModule = createPhaseDependencyModelModule({ rootDir });
38
+ const phaseModule = createPhaseDependencyModelModule({
39
+ rootDir,
40
+ phaseConfig: toPhaseConfigSection(resolvedConfig.config),
41
+ reportOutputDir: resolvedConfig.config.reporting.outputDir,
42
+ });
33
43
 
34
44
  const results: PhaseGateStoryResult[] = [];
35
45
  for (const sid of storyIds) {
@@ -56,8 +66,17 @@ export class PhaseDependencyModelQueryAdapter implements PhaseGateQueryPort {
56
66
 
57
67
  async queryUnit(unitId: string): Promise<PhaseInfo | null> {
58
68
  try {
69
+ // WI-085: paths config を phase-dependency-model に流入させる
70
+ const { createConfigFoundationModule } = await import('../../../config-foundation/composition-root.js');
71
+ const { toPhaseConfigSection } = await import('../../../config-foundation/application/mappers/phase-config-section-mapper.js');
72
+ const configModule = createConfigFoundationModule();
73
+ const resolvedConfig = await configModule.usecases.loadResolvedConfigUseCase.execute();
59
74
  const { createPhaseDependencyModelModule } = await import('../../../phase-dependency-model/composition-root.js');
60
- const phaseModule = createPhaseDependencyModelModule({ rootDir });
75
+ const phaseModule = createPhaseDependencyModelModule({
76
+ rootDir,
77
+ phaseConfig: toPhaseConfigSection(resolvedConfig.config),
78
+ reportOutputDir: resolvedConfig.config.reporting.outputDir,
79
+ });
61
80
  const output = await phaseModule.checkPhaseGateCommandHandler.execute({
62
81
  targetLevel: 1,
63
82
  unitId,
@@ -13,8 +13,17 @@ export class PhaseDependencyPhaseGatePolicyAdapter implements PhaseGatePolicyPor
13
13
  violations: readonly HarnessErrorLike[];
14
14
  }> {
15
15
  try {
16
+ // WI-085: paths config を phase-dependency-model に流入させる
17
+ const { createConfigFoundationModule } = await import('../../../config-foundation/composition-root.js');
18
+ const { toPhaseConfigSection } = await import('../../../config-foundation/application/mappers/phase-config-section-mapper.js');
19
+ const configModule = createConfigFoundationModule();
20
+ const resolvedConfig = await configModule.usecases.loadResolvedConfigUseCase.execute();
16
21
  const { createPhaseDependencyModelModule } = await import('../../../phase-dependency-model/composition-root.js');
17
- const mod = createPhaseDependencyModelModule({ rootDir: process.cwd() });
22
+ const mod = createPhaseDependencyModelModule({
23
+ rootDir: process.cwd(),
24
+ phaseConfig: toPhaseConfigSection(resolvedConfig.config),
25
+ reportOutputDir: resolvedConfig.config.reporting.outputDir,
26
+ });
18
27
  const result = await mod.checkPhaseGateCommandHandler.execute({
19
28
  targetLevel: 2,
20
29
  unitId: context.unitName,