phasegate 0.83.0 → 0.107.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 (78) hide show
  1. package/CHANGELOG.md +313 -0
  2. package/README.ja.md +15 -7
  3. package/README.md +24 -4
  4. package/docs/ADR/ADR-014-presentation-domain-dependency.md +82 -0
  5. package/docs/ADR/ADR-015-architecture-preset.md +183 -0
  6. package/docs/guide/codex-integration.md +7 -2
  7. package/docs/guide/installation.md +10 -2
  8. package/docs/guide/preset-selection.md +170 -0
  9. package/docs/guide/quick-vs-full-mode.md +3 -3
  10. package/docs/guide/retrofit-adoption.md +19 -2
  11. package/docs/guide/skills-overview.md +1 -1
  12. package/package.json +7 -1
  13. package/scripts/harness/adr-foundation/application/dto/application-errors.ts +0 -13
  14. package/scripts/harness/agent-integration/application/usecases/handle-pre-tool-use-usecase.ts +108 -100
  15. package/scripts/harness/agent-integration/domain/ports/error-guidance-query-port.ts +0 -8
  16. package/scripts/harness/agent-integration/domain/ports/phase-gate-query-port.ts +3 -3
  17. package/scripts/harness/agent-integration/domain/value-objects/write-target-scope.ts +26 -30
  18. package/scripts/harness/agent-integration/infrastructure/adapters/file-system-story-reflection-query-adapter.ts +6 -2
  19. package/scripts/harness/biome-ast-engine/application/dto/analyze-import-graph-input.ts +3 -0
  20. package/scripts/harness/biome-ast-engine/application/dto/resolve-enabled-rules-output.ts +2 -0
  21. package/scripts/harness/biome-ast-engine/application/mappers/resolve-enabled-rules-output-mapper.ts +4 -1
  22. package/scripts/harness/biome-ast-engine/application/usecases/analyze-import-graph-usecase.ts +4 -1
  23. package/scripts/harness/biome-ast-engine/application/usecases/execute-lint-usecase.ts +2 -0
  24. package/scripts/harness/biome-ast-engine/application/usecases/resolve-enabled-rules-usecase.ts +31 -3
  25. package/scripts/harness/biome-ast-engine/composition-root.ts +10 -2
  26. package/scripts/harness/biome-ast-engine/domain/ports/rule-config-provider-port.ts +16 -0
  27. package/scripts/harness/biome-ast-engine/domain/ports/source-module-analyzer-port.ts +5 -1
  28. package/scripts/harness/biome-ast-engine/domain/services/lint-runner.ts +5 -1
  29. package/scripts/harness/biome-ast-engine/domain/services/rule-definition-registry.ts +1 -0
  30. package/scripts/harness/biome-ast-engine/domain/value-objects/architecture-spec.ts +38 -0
  31. package/scripts/harness/biome-ast-engine/domain/value-objects/layer-boundary.ts +7 -8
  32. package/scripts/harness/biome-ast-engine/domain/value-objects/layer-name.ts +15 -23
  33. package/scripts/harness/biome-ast-engine/domain/value-objects/source-module-snapshot.ts +11 -4
  34. package/scripts/harness/biome-ast-engine/infrastructure/adapters/harness-config-provider-adapter.ts +29 -3
  35. package/scripts/harness/biome-ast-engine/infrastructure/adapters/typescript-source-module-analyzer-adapter.ts +22 -15
  36. package/scripts/harness/biome-ast-engine/infrastructure/mappers/source-module-snapshot-mapper.ts +26 -17
  37. package/scripts/harness/config-foundation/application/dto/resolved-config-output.ts +1 -0
  38. package/scripts/harness/config-foundation/application/usecases/load-resolved-config-use-case.ts +34 -2
  39. package/scripts/harness/config-foundation/application/usecases/migrate-schema-use-case.ts +89 -0
  40. package/scripts/harness/config-foundation/composition-root.ts +8 -0
  41. package/scripts/harness/config-foundation/domain/harness-config.ts +6 -0
  42. package/scripts/harness/config-foundation/domain/services/architecture-resolution-service.ts +257 -0
  43. package/scripts/harness/config-foundation/domain/value-objects/architecture-config.ts +66 -0
  44. package/scripts/harness/config-foundation/domain/value-objects/architecture-preset-catalog.ts +75 -0
  45. package/scripts/harness/config-foundation/infrastructure/schemas/harness-config-v3.schema.json +546 -0
  46. package/scripts/harness/config-foundation/infrastructure/validators/ajv-config-schema-validator.ts +18 -6
  47. package/scripts/harness/config-foundation/presentation/cli/migrate-schema-command-handler.ts +83 -0
  48. package/scripts/harness/integrations/pre-commit.ts +211 -52
  49. package/scripts/harness/main.ts +460 -340
  50. package/scripts/harness/phase-dependency-model/domain/ports/story-reflection-file-system-port.ts +2 -4
  51. package/scripts/harness/phase-dependency-model/domain/services/story-reflection-checker.ts +54 -17
  52. package/scripts/harness/phase-dependency-model/infrastructure/filesystem/file-system-story-reflection-adapter.ts +154 -36
  53. package/scripts/harness/setup/skill-deployer.ts +140 -102
  54. package/scripts/harness/skill-quality/domain/errors/skill-quality-error.ts +24 -23
  55. package/scripts/harness/skill-quality/domain/value-objects/commit-message.ts +23 -7
  56. package/scripts/harness/traceability-model/application/usecases/apply-work-item-migration-usecase.ts +52 -0
  57. package/scripts/harness/traceability-model/application/usecases/plan-work-item-migration-usecase.ts +29 -0
  58. package/scripts/harness/traceability-model/application/usecases/validate-design-story-annotations-usecase.ts +83 -18
  59. package/scripts/harness/traceability-model/composition-root.ts +48 -30
  60. package/scripts/harness/traceability-model/domain/ports/design-document-port.ts +9 -15
  61. package/scripts/harness/traceability-model/domain/ports/work-item-migration-apply-port.ts +11 -0
  62. package/scripts/harness/traceability-model/domain/ports/work-item-migration-source-port.ts +9 -0
  63. package/scripts/harness/traceability-model/domain/services/metadata-validator.ts +1 -1
  64. package/scripts/harness/traceability-model/domain/services/work-item-migration-planner.ts +162 -0
  65. package/scripts/harness/traceability-model/domain/value-objects/story-id.ts +3 -3
  66. package/scripts/harness/traceability-model/domain/value-objects/work-item-frontmatter.ts +57 -0
  67. package/scripts/harness/traceability-model/domain/value-objects/work-item-migration-candidate.ts +47 -0
  68. package/scripts/harness/traceability-model/infrastructure/gateways/file-system-work-item-migration-apply-gateway.ts +110 -0
  69. package/scripts/harness/traceability-model/infrastructure/gateways/file-system-work-item-migration-source-gateway.ts +182 -0
  70. package/scripts/harness/traceability-model/infrastructure/gateways/markdown-design-document-gateway.ts +29 -43
  71. package/scripts/harness/traceability-model/infrastructure/parsers/story-catalog-parser.ts +2 -2
  72. package/scripts/harness/traceability-model/infrastructure/parsers/work-item-frontmatter-parser.ts +136 -0
  73. package/scripts/harness/traceability-model/presentation/cli/migrate-work-items-command-handler.ts +186 -0
  74. package/skills/quick-implementor/SKILL.md +17 -1
  75. package/templates/.husky/commit-msg +1 -0
  76. package/scripts/harness/adr-foundation/application/dto/seed-adr-definition.ts +0 -21
  77. package/scripts/harness/adr-foundation/application/usecases/seed-initial-adrs-use-case.ts +0 -84
  78. package/scripts/harness/adr-foundation/infrastructure/seeds/initial-adr-definitions.ts +0 -161
package/CHANGELOG.md CHANGED
@@ -7,6 +7,319 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.100.0] - 2026-04-23
11
+
12
+ ### Added
13
+
14
+ - **ISSUE-014 Wave 6: preset 選定ガイド + `migrate` CLI + 呼称分離 + v0.86.0 未満警告** — Wave 5.5 までの実装を user 導線と docs に接続し ISSUE-014 を CLOSE する。
15
+ - **`docs/guide/preset-selection.md` 新設**: 7 preset(clean / strict-ddd / onion / hexagonal / layered / flat / custom)の早見表 + 選択フローチャート + 設定例 + override / custom の書式 + v2 → v3 移行手順。
16
+ - **README.md**: Presets 節を「Defense preset(`project.preset`)」「Architecture preset(`architecture.preset`)」の 2 テーブルに分け、preset-selection.md への導線を追加 + 呼称分離の補足。
17
+ - **CLAUDE.md**: 「防御プリセット(CI strict/lenient)」と「アーキプリセット(clean/onion/hex...)」の呼称分離ガイドを追記。issue / PR / チャットで「preset」とだけ書かず必ず種類を明示するルール化。
18
+ - **retrofit-adoption.md**: Step 1 に architecture preset 選定節を追加、`npx phasegate migrate --schema v3` の導線。
19
+ - **`phasegate migrate --schema v3` CLI 新設** (`scripts/harness/config-foundation/`): `MigrateSchemaUseCase` + `MigrateSchemaCommandHandler` + `main.ts` の switch-case `migrate` + ヘルプ追記。`phasegate.config.json` を読んで `architecture` キーが無ければ `{ preset: "clean" }` を追記して v3 化(idempotent)。
20
+ - **v0.86.0 未満警告**: `LoadResolvedConfigUseCase` が source document の `architecture` 有無で `schemaVersion: 'v2' | 'v3'` を判定して output DTO に追加。`main.ts` の `loadResolvedConfig()` が v2 検出時に `npx phasegate migrate --schema v3` の案内を **一度だけ** stderr に出力(同一プロセスで多重 load されても重複警告しない)。
21
+
22
+ ### Tests
23
+
24
+ - 新規 `scripts/harness/__tests__/unit/config-foundation/migrate-schema-use-case.test.ts` で 6 テスト: v2→v3 変換 / v3 no-op / array document で InvalidConfigShapeError / null document / 未対応 targetVersion / configPath 透過。
25
+ - 新規 `scripts/harness/__tests__/integration/config-foundation/migrate-schema-use-case.test.ts` で 2 テスト: tmp dir round-trip(v2 config → 永続化検証 / v3 config → mtime 不変で no-op 確認)。
26
+ - 既存 `load-resolved-config-use-case.test.ts` と `load-config-facade.test.ts` の toEqual 期待値に `schemaVersion: 'v2'` を追加。
27
+ - 全 3387 tests green(3368 unit/integration + 19 forks、+8 新規)、`npx phasegate lint` violations 0(1301 ファイル scan)。
28
+
29
+ ### Notes
30
+
31
+ - これにより ISSUE-014(アーキテクチャスタイルの config 対応)は Wave 1〜6 完走 → **CLOSED**。v0.86.0〜v0.99.0 の 14 バージョンで段階的に構築: Wave 1 設計文書 → Wave 2 VO 注入 → Wave 3 schema v3 → Wave 4 flat preset + biome-ast-engine 配線 → Wave 5 pipeline 全体に spec 配線 → Wave 5.5 3 preset dogfood integration test → Wave 6 guide + migrate CLI + 警告。
32
+ - `phasegate migrate --schema v3` は破壊的変更ではなく additive(既存フィールドは保持、`architecture` だけ追加)。本リポジトリ自身は Wave 3 時点で dogfood 済のため migrate 対象外。
33
+
34
+ ## [0.99.0] - 2026-04-23
35
+
36
+ ### Added
37
+
38
+ - **ISSUE-014 Wave 5.5: 3 preset(onion / hexagonal / layered)dogfood を vitest integration test で自動化** — Wave 5 で pipeline 配線は完成したが、外部 PJ 相当の end-to-end 検証は pre-tool-use-hook の `/tmp/**/src/domain/**` blocking で deferred していた。本 Wave では `/tmp/` への Claude Write を諦め、**テストランタイムの `fs.writeFileSync`(hook 対象外)で `os.tmpdir()` に fixture 展開する方針**に切り替えて解消。
39
+ - `scripts/harness/__tests__/integration/biome-ast-engine/preset-dogfood.integration.test.ts` を新設(`@story ISSUE-014`)。
40
+ - 各 preset につき「許容方向 import → violation 0 件」と「違反方向 import → `no-layer-violation` で検出」の 2 テスト × 3 preset = 計 6 テストを `createBiomeAstEngineModule(rootDir, { architecture })` 経由で `ExecuteLintUseCase.execute({ targets: ['src'], includeBiomeNative: false })` を呼び出して検証。
41
+ - 検証内容: onion(interface→domain 許容 / domain→interface 検出)、hexagonal(adapters→core 許容 / core→adapters 検出)、layered(presentation→business→data 許容 / data→presentation 検出)。
42
+
43
+ ### Tests
44
+
45
+ - 新規 `preset-dogfood.integration.test.ts` で 6 テスト追加(3354 → 3360)。
46
+ - 全 3379 tests green(3360 unit/integration + 19 forks)、`npx phasegate lint` violations 0(1297 ファイル scan)。
47
+
48
+ ### Notes
49
+
50
+ - 本 Wave は当初「`/tmp/phasegate-dogfood-*/` に実際のディレクトリを切って `npx phasegate lint` を走らせる外部検証」を想定していたが、pre-tool-use-hook が Claude の Write 経路で `/tmp/**/src/domain/**` を Full-mode 必須カテゴリと判定して blocking するため実行不能。hook の scope を narrow する修正は independent の refactoring スコープになるため、本 Wave では integration test ベースでの dogfood に切替(Claude が関与しない Node.js ランタイム書き込みは hook 対象外)。CLI 経由で phasegate.config.json を読み込む経路の検証は Wave 6 の `migrate` CLI テストで補完予定。
51
+ - ISSUE-014 は Wave 5.5 まで完了。残り Wave 6(ガイド追記 + `migrate` CLI + 呼称分離)で CLOSE 予定。
52
+
53
+ ## [0.98.0] - 2026-04-23
54
+
55
+ ### Added
56
+
57
+ - **ISSUE-014 Wave 5: `no-layer-violation` への `architecture.allowedDependencies` 注入 + pipeline 全体への spec 配線** — Wave 4 で flat preset 配線を作った後の、非 clean preset(onion / hexagonal / layered / strict-ddd / custom)を実際に lint 判定へ反映する改修。
58
+ - `ResolveEnabledRulesUseCase` 出力に `architectureSpec: ArchitectureSpec` を追加(DTO + mapper 拡張)。config-foundation の `preset / layers / allowedDependencies` を `freezeArchitectureSpec` で ArchitectureSpec に変換して下流へ伝播。
59
+ - `LintRunner.run(params)` の params に optional `architecture` を追加。`no-layer-violation` rule 内の `LayerBoundary.standardMatrix()` ハードコード呼び出しを `LayerBoundary.standardMatrix(architecture)` に置換(未指定時は `CLEAN_PRESET_SPEC` で後方互換)。
60
+ - `SourceModuleSnapshot.create(props, spec?)` で `@layer` tag の正規化が spec 経由になり、`core` / `interface` / `ports` 等の非 clean 層名が LayerName として認識可能に。
61
+ - `SourceModuleAnalyzerPort.analyzeMany(files, architecture?)` + `TypeScriptSourceModuleAnalyzerAdapter` + `source-module-snapshot-mapper.toSourceModuleSnapshot(raw, architecture?)` の 3 箇所に spec 伝播。
62
+ - `AnalyzeImportGraphUseCase` 入力 DTO に `architecture?` を追加、`ExecuteLintUseCase` が `resolvedRules.architectureSpec` を analyze/lintRunner の両方へ配線。
63
+
64
+ ### Tests
65
+
66
+ - 新規 `lint-runner.test.ts` に onion preset 2 件(`domain → interface` 違反検出 / `interface → domain` 許容)を追加 — architecture 注入経路を end-to-end で検証。
67
+ - 新規 `source-module-snapshot.test.ts` に hexagonal spec 正規化 2 件(`core` 値が LayerName として通る / spec 省略時は clean default で `null` に落ちる)を追加。
68
+ - 新規 `resolve-enabled-rules-usecase.test.ts` に onion architecture の architectureSpec 透過 1 件を追加。
69
+ - 既存 `analyze-import-graph-usecase.test.ts` / `execute-lint-usecase.test.ts` の mock 期待値を新シグネチャに更新。
70
+ - 全 3373 tests green(3354 unit + 19 forks、+5)、`npx phasegate lint` violations 0。
71
+
72
+ ### Notes
73
+
74
+ - 「外部 dogfood(`/tmp/phasegate-dogfood-onion` 等の 3 preset)」は pre-tool-use-hook が `/tmp/**/src/domain/**` への書き込みを quick-mode 外カテゴリとして blocking するため Wave 5.5 に延期。コード経路は unit test で end-to-end 検証済み。
75
+ - Wave 6(ガイド追記 + `migrate` CLI + v0.86.0 境界警告)は本 Wave の範囲外。
76
+
77
+ ## [0.97.0] - 2026-04-23
78
+
79
+ ### Added
80
+
81
+ - **ISSUE-014 Wave 4: `flat` preset auto-disable + user override 優先度 + architecture 配線** — Wave 3 で config-foundation がエクスポートした `architecture` を biome-ast-engine の L1 rule pipeline に接続した初回。
82
+ - `RuleConfigProviderPort` に `getArchitecture()` を追加し、`preset / layers / allowedDependencies` を供給。
83
+ - `HarnessConfigProviderAdapter` が architecture を保持・返却。未注入時は clean default に fallback。
84
+ - `createBiomeAstEngineModule` の `BiomeAstEngineModuleOptions` に `architecture?` を追加。
85
+ - `ResolveEnabledRulesUseCase` が `preset === 'flat'` 時に `require-unit-comment / require-layer-comment / no-layer-violation / enforce-folder-structure` を自動 `off` 扱い。**user 明示設定(rules or overrideRules)が存在する rule は preset 既定より優先**。
86
+ - `main.ts` が `resolvedConfig.architecture` を抽出し `createBiomeAstEngineModule` に渡す配線を追加。
87
+ - flat preset は `@layer` タグが残っていても L1-001/002/003/004 が skipped なので違反を発火しない(option A: 残存 tag は ignore)。
88
+
89
+ ### Tests
90
+
91
+ - `unit/biome-ast-engine/resolve-enabled-rules-usecase.test.ts` に 4 件追加(flat preset 未指定時の 4 rule skipped / user `error` 明示優先 / user overrideRules `off` 明示 / clean preset は既定で auto-disable されない)。
92
+
93
+ ### Notes
94
+
95
+ - Wave 5(`onion / hexagonal / layered / strict-ddd / custom` の実体活用 + dogfood)と Wave 6(ガイド追記 + migrate CLI)は別 Wave に送り、Wave 4 は flat 有効化のみに絞る。
96
+ - 現状 `no-layer-violation` rule は `LayerBoundary.standardMatrix()` をハードコード呼び出し中(`LintRunner`)。Wave 5 で architecture.allowedDependencies を注入する改修を予定。
97
+
98
+ ## [0.96.0] - 2026-04-23
99
+
100
+ ### Added
101
+
102
+ - **ISSUE-014 Wave 3: schema v3 + config-foundation による architecture preset のロード基盤** — Wave 2 で VO に注入口を用意した後の、config レイヤーでの実体化フェーズ。biome-ast-engine 側の配線は Wave 4 以降で担当する。
103
+ - 新規 `scripts/harness/config-foundation/infrastructure/schemas/harness-config-v3.schema.json` — v2 schema に `architecture` セクション(`preset` 必須、`custom` 時は `layers` + `allowedDependencies` 必須の `allOf/if/then`)を optional で追加。
104
+ - 新規 `domain/value-objects/architecture-config.ts` — `ArchitecturePresetId` / `ArchitectureConfigSource` / `ArchitectureConfigDocument` / `freezeArchitectureDocument` / `isArchitecturePresetId`。
105
+ - 新規 `domain/value-objects/architecture-preset-catalog.ts` — `clean / strict-ddd / onion / hexagonal / layered / flat` の 6 preset 定義(`custom` は source 側で明示)。
106
+ - 新規 `domain/services/architecture-resolution-service.ts` — preset 展開 + 明示 override マージ + semantic validation(C1 自己参照欠落は auto-fill + warn、C2 キー不整合は error、C3 値不整合は error、C4 layer 欠落は `{self}` auto-fill + warn、C5 循環依存は warn)+ layerDetection precedence(byPath=false+byTag=false は error)。
107
+ - `AjvConfigSchemaValidator` に構造検出(`architecture` キー有無)を追加し、v2/v3 schema を自動選択。
108
+ - `HarnessConfigResolvedDocument` に optional `architecture` を追加。`LoadResolvedConfigUseCase` が architecture を常時 resolve し、v2 config は `{ preset: "clean" }` 既定を synthesize。
109
+ - **phasegate レポ自身の `phasegate.config.json` に `architecture: { preset: "clean" }` dogfood 明示追記** — Wave 2 から移送された項目。v3 schema + loader が揃った本 Wave で初めて安全に追記可能。
110
+
111
+ ### Changed
112
+
113
+ - 既存 `load-resolved-config-use-case.test.ts` の `createMinimalResolvedDocument()` に clean デフォルトの architecture セクションを追加(新契約への追従)。
114
+
115
+ ### Tests
116
+
117
+ - 新規 `unit/config-foundation/architecture-resolution-service.test.ts` — 17 件。7 preset 展開 / custom explicit 必須 / preset+override merge / C1〜C5 semantic validation / layerDetection precedence / metadataTags override。
118
+ - 新規 `integration/config-foundation/ajv-config-schema-validator-v3.test.ts` — 5 件。v2 document / v3 document / 未知 preset / custom without layers のケース。
119
+ - 全 3345 tests green(3323 → +22)、`npx phasegate lint` violations 0。
120
+
121
+ ## [0.95.0] - 2026-04-23
122
+
123
+ ### Changed
124
+
125
+ - **ISSUE-014 Wave 2: `LayerName` / `LayerBoundary` VO を `ArchitectureSpec` 注入形式に改修** — Clean Architecture 固定値(`domain / application / infrastructure / presentation` と依存行列)を VO 内部から分離し、`ArchitectureSpec` 型 + `CLEAN_PRESET_SPEC` 定数として `scripts/harness/biome-ast-engine/domain/value-objects/architecture-spec.ts` に抽出。`LayerName.fromString` / `tryFromString` / `LayerBoundary.standardMatrix` が任意の spec を受け付けるようになった(default は `CLEAN_PRESET_SPEC` で既存挙動を維持)。
126
+ - `LayerNameValue` を `string` に緩和(外部参照が無い前提での型緩和)、`canDependOn` はインスタンスが保持する spec の `allowedDependencies` を参照する形式へ変更。
127
+ - 新規テスト 12 件追加(`architecture-spec.test.ts` 4 件 + `layer-name.test.ts` に onion preset 注入ケース 5 件 + `layer-boundary.test.ts` に onion 3×3 matrix ケース 3 件)。全 3323 テスト green、`npx phasegate lint` violations 0。
128
+
129
+ ### Plan re-sync
130
+
131
+ - Wave 2 計画の小さな穴を是正: 当初「`phasegate.config.json` に `architecture: { preset: "clean" }` を dogfood 明示追記」を Wave 2 に含めていたが、現行 schema v2 が root レベルで `additionalProperties: false` を指定しているため `architecture` キー追加は validation error になる。v3 schema + loader が提供される Wave 3 まで dogfood 更新を**移送**。`wave1_schema_proposal.md` §4 と `issue_description.md` の Wave 表を同期更新。
132
+
133
+ ## [0.94.0] - 2026-04-23
134
+
135
+ ### Changed
136
+
137
+ - **ISSUE-014 Wave 1 計画の再同期** — レビュー補修で追加された制約を Wave 分割計画に取り込み漏れがないか検証。以下 3 件を追加反映:
138
+ - Wave 3 に「§1.2 preset + 明示 override 解決ロジック」を明示追加(semantic validation とは別軸)
139
+ - Wave 6 に「防御プリセット / アーキプリセットの呼称分離ガイド」を明示追加(レビュー穴 #3 の plan 反映漏れ)
140
+ - 推定工数を再計算: Wave 3 は 1d → **1.5d**(preset override + semantic validation C1〜C5 + precedence を盛り込んだため)。合計 4.5d → **5d**
141
+ - `wave1_schema_proposal.md` §4 の Wave 分割表と `issue_description.md` 推奨実装順表を同期更新
142
+
143
+ ## [0.93.0] - 2026-04-23
144
+
145
+ ### Changed
146
+
147
+ - **ISSUE-014 Wave 1 レビュー補修** — v0.92.0 で起票した設計文書を批判的レビューにより 12 項目修正。詳細は v0.92.0 の "Review / Hardening" セクション参照(修正差分は v0.93.0 リリースで統合)。実装コード変更なし、設計文書のみ。
148
+
149
+ ## [0.92.0] - 2026-04-23
150
+
151
+ ### Added
152
+
153
+ - **ISSUE-014 Wave 1: アーキテクチャ preset 化の設計着地** — PhaseGate を Clean Architecture 固定から preset 選択式に拡張するための Wave 1(設計・文書作成)を完了。実装コードは含まない。
154
+ - `docs/ADR/ADR-015-architecture-preset.md` を Accepted 状態で起票。preset **7 種**(`clean` / `strict-ddd` / `onion` / `hexagonal` / `layered` / `flat` / `custom`)を採択し、`flat` 時の L1-001〜004 自動無効化、`metadataTags` での `@layer` / `@unit` タグ差し替え、schema v3 への下位互換マイグレーション戦略を決定。
155
+ - `docs/inception/issues/ISSUE-014/wave1_schema_proposal.md` を追加。`architecture` セクションの JSON Schema 断片、各 preset の層・`allowedDependencies` 定義、Wave 2〜6 の実装順序(推定 4.5d)を明文化。
156
+ - `docs/inception/issues/ISSUE-014/issue_description.md` の状態を `IN PROGRESS` に更新し、Wave 2 以降の入り口を記述。
157
+
158
+ ### Review / Hardening(批判的レビューによる穴補修)
159
+
160
+ Wave 1 成果物を批判的にレビューし、以下の穴を修正:
161
+
162
+ - **カウント誤り**: `preset 6 種` → **7 種** に修正(`clean` + `strict-ddd` + `onion` + `hexagonal` + `layered` + `flat` + `custom`)
163
+ - **schema 識別機構**: loader が v2 / v3 を判別する手段を構造検出(`architecture` キーの有無)に決定。明示的な `$schemaVersion` フィールドは追加しない方針を ADR-015 / §1.0 に明記
164
+ - **`project.preset` vs `architecture.preset` の直交性**: 既存 `project.preset`(防御プリセット)と新設 `architecture.preset`(アーキプリセット)の概念を ADR-015 で分離説明。CLI メッセージ・ドキュメントで区別呼称する方針を Wave 6 ガイドに委譲
165
+ - **semantic validation 穴**: `custom` preset の JSON Schema では validate できない制約(C1: 層名の自己参照、C2/C3: allowedDependencies キー/値の `layers` 配列整合、C4: 全 layer カバレッジ、C5: 循環依存警告)を §1.3 に列挙、Wave 3 実装に委譲
166
+ - **preset override 規則**: `preset` + 明示 `layers` / `allowedDependencies` 併記時のルール(明示値 override、partial override 許容)を §1.2 に追加
167
+ - **`layerDetection` precedence**: `byPath` / `byTag` の全組み合わせ(4 通り)の挙動を §3.4 の表に明示。`byPath: false, byTag: false` は schema error に
168
+ - **`flat` preset の残存 `@layer` tag 扱い**: 案 A(無視)/ B(warn)/ C(error)を列挙、Wave 4 で案 A 採用を推奨
169
+ - **preset vs user 個別設定の優先度**: `flat` preset が L1-001〜004 を無効化する場面で user の明示 `layers.L1.rules["L1-001"]: "error"` が上書きする規則を §2.8 に追加
170
+ - **ADR-005 矛盾の解消**: PhaseGate 自身が `clean` preset を名乗ることと ADR-005(Hexagonal 採用)の両立を「`domain` が Hexagonal の `core` に相当する」という哲学的整合で ADR-015 に明記
171
+ - **ADR-014 境界警告**: v0.86.0 未満から upgrade する user への「暗黙デフォルト変更」警告を Wave 6 ガイド + migrate CLI に入れる方針を明記
172
+ - **`@story` タグのスコープ定義**: test ファイルで使われる `@story` タグが本 Wave の `metadataTags` で扱われない理由(traceability-model 管轄)を §3.3 に追加
173
+ - **Wave 受け入れ基準の再設計**: 物理的な成果物存在と user レビュー完了を分離。物理 [x] / レビュー [ ] で Wave 1 完了判定の厳密性を確保
174
+
175
+ ### Scope notes
176
+
177
+ - Wave 1 は **設計・文書のみ**。`scripts/harness/` 配下のコード改修は含まず、既存テストへの影響なし。`LayerName` / `LayerBoundary` の config 注入改修は Wave 2、schema v3 実装は Wave 3、dogfood 検証は Wave 4〜5、ガイド追記は Wave 6 で順次実施予定。
178
+
179
+ ## [0.91.0] - 2026-04-23
180
+
181
+ ### Fixed
182
+
183
+ - **ISSUE-023: `StoryId` validator pattern が `HF\d+-\d{2}` を拒否する** — `HF2-XX` 形式(Phase 2 拡張 Epic)を正式サポート。
184
+ - `scripts/harness/traceability-model/domain/value-objects/story-id.ts`: `STORY_ID_PATTERN` を `/^H(?<epicNumber>F\d+|\d{2})-(?<storyNumber>\d{2})$/` に拡張。エラーメッセージも更新。
185
+ - `scripts/harness/traceability-model/domain/services/metadata-validator.ts:16`: `STORY_ID_PATTERN` を `/^H(?:F\d+|[0-9]{2})-[0-9]{2}$/` に同期。
186
+ - `scripts/harness/traceability-model/infrastructure/parsers/story-catalog-parser.ts`: `STORY_ID_LINE_PATTERN` と前後行コンテキスト形式の内部パターンを同期。`user_stories.md` から `HF2-XX` を StoryCatalog に収集可能に。
187
+ - `StoryId.getEpicNumber()` は `HF2-04` に対して `'F2'` を返す(従来の 2 桁数字は不変)。外部 API shape は維持。
188
+ - **ISSUE-010 完全 CLOSE(副次効果)** — `validate-metadata` FAIL: 103 → **0 件**。`docs/product/construction/` 配下の全 105 設計文書が PASS。Wave 1 (v0.87.0) / Wave 2 (v0.88.0) / Wave 3 (v0.89.0) / fuse-hooks-engine 削除 (v0.90.0) / 本リリースで完結。
189
+
190
+ ### Tests
191
+
192
+ - `scripts/harness/__tests__/unit/traceability-model/story-id.test.ts` に HF prefix ケース 3 件追加(3308 → 3311):
193
+ - `HF2-04` を正常に parse できること
194
+ - `HF10-99` のような複数桁 F-prefix も受理すること
195
+ - `HF2-04` の `getEpicNumber()` が `'F2'` を返すこと
196
+
197
+ ### Lint / Metadata state
198
+
199
+ - L1 violations: **0 件維持**(scanned 1289 files, no violations)
200
+ - `validate-metadata` FAIL: 7 → **0 件** 🎉
201
+ - 3311 件テスト全 green
202
+
203
+ ## [0.90.0] - 2026-04-23
204
+
205
+ ### Removed
206
+
207
+ - **fuse-hooks-engine Unit の完全削除** — Unit 定義(`docs/product/units/fuse_hooks_engine_unit.md`)・設計文書(`docs/product/construction/fuse-hooks-engine/` 7 件)・inception プラン(`docs/inception/fuse-hooks-engine/` 配下 8 件)を削除。
208
+ - `scripts/harness/` 配下に実装コードは一切存在せず、他 Unit からの import / 参照もなかった(Future Phase / v1 スコープ外として設計段階で凍結されていた Unit)。
209
+ - `docs/product/user_stories.md` から HF1-01 〜 HF1-05 の 5 ストーリーセクションと `H-F1` Epic 行を削除。v1 合計を 54 維持、全体(Future 含む)を 62 → 57 に更新。
210
+ - `docs/product/units/integration_contract.md` の依存図・Wave 実行計画・Validator ID Registry / CLI Command Registry の `fuse-hooks-engine` 参照を削除。L0 拡張ポイント(6.1 / 6.3)は「OS-level enforcement」の抽象概念として残置。
211
+ - `docs/product/units/agent_integration_unit.md` Stop Hook Adapter 行の `fuse-hooks-engine(Future: FUSE完了ゲートの参照実装)` 参照を `—` に変更。
212
+ - `docs/product/construction/agent-integration/unit_test_design.md` UT-WTS-I021 のサンプルパスを `fuse-hooks-engine/HF1-06` → `some-unit/HF1-06` に変更(WORK_ITEM_ID_PATTERN 後方互換テストは維持)。
213
+
214
+ ### Fixed
215
+
216
+ - **ISSUE-010 Wave 3 完全解消(fuse-hooks-engine 削除の副次効果)** — `validate-metadata` FAIL: 14 → **7**(fuse-hooks-engine 7 ファイル消失)。残 7 は `phase2-extensions` の `HF2-XX` 形式 StoryId で、validator `STORY_ID_PATTERN = /^H[0-9]{2}-[0-9]{2}$/` の拡張が別 issue 対象。
217
+
218
+ ### Lint / Metadata state
219
+
220
+ - L1 violations: **0 件維持**(scanned 1289 files, no violations)
221
+ - `validate-metadata` FAIL: 14 → **7**(-7)
222
+ - 既存 3308 件テスト全 green(regression なし)
223
+
224
+ ## [0.89.0] - 2026-04-23
225
+
226
+ ### Fixed
227
+
228
+ - **ISSUE-010 Wave 3(partial)** — 11 Unit × 7 設計文書 = 75 件に `@story-id` standalone 注釈を補填し PASS 化。
229
+ - `agent-integration` / `biome-ast-engine` / `ci-governance` / `harness-api` / `harness-error` / `nyquist-validation` / `phase-dependency-model` / `quick-mode` / `regression-suite` / `skill-quality` / `validator-system` の各 Unit の 7 ファイル(`coverage_report.md` / `domain_model.md` / `it_test_design.md` / `it_test_logic.md` / `logical_design.md` / `unit_test_design.md` / `unit_test_logic.md`)に H01-H15 系 StoryId を付与。
230
+ - 残 14 件(`fuse-hooks-engine` 7 + `phase2-extensions` 7)は `HF1-XX` / `HF2-XX` 形式の StoryId を必要とするが、`metadata-validator.STORY_ID_PATTERN = /^H[0-9]{2}-[0-9]{2}$/` が `HF` prefix 非対応のため PASS 化不可能。validator パターン拡張は別 issue 対象(ISSUE-019)として切り出し、本 Wave 3 は partial 完了。
231
+
232
+ ### Lint / Metadata state
233
+
234
+ - L1 violations: **0 件維持**
235
+ - `validate-metadata` FAIL: 89 → **14**(-75: 11 Unit × 7 ファイル解消)
236
+ - 残 14 件は HF-prefix validator 制約による既知の限界(新規回帰ではない)
237
+ - 既存 3308 件テスト全 green(regression なし)
238
+
239
+ ## [0.88.0] - 2026-04-23
240
+
241
+ ### Fixed
242
+
243
+ - **ISSUE-010 Wave 2** — `adr-foundation` / `config-foundation` Unit の設計文書 11 件に `@story-id` 注釈を standalone 形式で補填。
244
+ - adr-foundation 6 件(`coverage_report.md` / `domain_model.md` / `it_test_design.md` / `it_test_logic.md` / `unit_test_design.md` / `unit_test_logic.md`)に `@story-id H05-01 / H05-02 / H05-03` を追加。
245
+ - config-foundation 5 件(`coverage_report.md` / `domain_model.md` / `it_test_logic.md` / `unit_test_design.md` / `unit_test_logic.md`)に `@story-id H04-01 / H04-02 / H04-03` を追加。
246
+ - これにより両 Unit とも全 7 ファイル PASS 達成。
247
+
248
+ ### Lint / Metadata state
249
+
250
+ - L1 violations: **0 件維持**
251
+ - `validate-metadata` FAIL: 100 → **89**(adr-foundation 6 件 + config-foundation 5 件解消)
252
+ - 既存 3308 件テスト全 green(regression なし)
253
+
254
+ ## [0.87.0] - 2026-04-23
255
+
256
+ ### Fixed
257
+
258
+ - **ISSUE-010 Wave 1 + ISSUE-006 formal CLOSE** — traceability-model Unit の `@story-id` 注釈補填と ISSUE-006 機能的完遂の CLOSE 化。
259
+ - ISSUE-010 Wave 1: `docs/product/construction/traceability-model/` 残 3 件(`coverage_report.md` / `domain_model.md` / `unit_test_logic.md`)に `@story-id H03-01 / H03-02 / H03-03` を standalone 注釈として補填。`validate-metadata` の FAIL 件数 103 → 100(traceability-model Unit は 0 件到達)。
260
+ - ISSUE-006 CLOSE: Story A(v0.63.0 / `fullModeRequiredWhen` 設定駆動化)/ Story B(v0.64.0 / pre-tool-use hook 統合)/ P2-3(v0.45.0 / `docs/guide/quick-vs-full-mode.md`)すべて着地済のため formal CLOSE。外部PJ再レビュー(welcome-but-not-blocking)のみ残。
261
+
262
+ ### Lint / Metadata state
263
+
264
+ - L1 violations: **0 件維持**(v0.86.0 時点で完全解消済、本版で変更なし)
265
+ - `validate-metadata` FAIL: 103 → **100**(traceability-model 3 件解消)
266
+ - 既存 3308 件テスト全 green(regression なし)
267
+
268
+ ## [0.86.0] - 2026-04-23
269
+
270
+ ### Changed
271
+
272
+ - **ISSUE-019 / ADR-014** — LayerBoundary の解釈を **Robert C. Martin 版 Clean Architecture** に切り替え、`presentation → domain` 直接依存を許容。
273
+ - 変更: `ALLOWED_DEPENDENCIES.presentation` に `'domain'` を追加(`scripts/harness/biome-ast-engine/domain/value-objects/layer-name.ts:15-20`)。
274
+ - 背景: 従来の厳格 DDD Layered 解釈では presenter / formatter / CLI handler が domain VO / type / policy を read-only で参照するだけで L1-003 違反となっていたが、これは CA では一般的実装。read-only で DIP の本質を侵さない限り許容する。
275
+ - 禁止は継続: `presentation → infrastructure`、`domain → 他層`、`application → presentation` 等の逆方向依存。
276
+ - 緩和策の opt-in 提供は ISSUE-014(アーキ config 化)で対応予定。厳格派は `preset: "strict-ddd"` で現行挙動を維持可能とする。
277
+ - 新規 ADR: `docs/ADR/ADR-014-presentation-domain-dependency.md`。
278
+ - 新規 test: `layer-boundary.test.ts` に presentation→domain allowed、presentation→infrastructure disallowed の 2 ケース追加。
279
+
280
+ ### Lint state
281
+
282
+ - total: 8 → **0**(L1-003 presentation→domain 8 件解消、他 rule 増減無し)
283
+ - 既存 3308 件テスト全 green(新規 2 ケース込み)
284
+
285
+ ## [0.85.0] - 2026-04-23
286
+
287
+ ### Fixed
288
+
289
+ - **ISSUE-022** — Unit barrel (`**/index.ts`) が `no-layer-violation` で誤検知される問題を解消。
290
+ - 問題: ISSUE-017(v0.83.0)の `extractImports` 修正で `export ... from` 再帰走査が有効化された結果、`quick-mode/index.ts` の barrel 再エクスポート 7 件が `L1-003` で新規露出していた。Unit barrel は `main.ts` / `composition-root.ts` / `presentation/*-hook.ts` と同じ composition root / entry point の性質を持つが、`no-layer-violation.ignorePatterns` に含まれていなかった。
291
+ - 修正: `scripts/harness/biome-ast-engine/domain/services/rule-definition-registry.ts` の `no-layer-violation.ignorePatterns` に `'**/index.ts'` を追加。`scripts/harness/*/index.ts` の 11 件の Unit barrel が一括で除外される(sub-layer barrel は存在せず副作用リスク無)。
292
+ - 残 L1-003 8 件は全て `presentation → domain` パターン(ISSUE-019 の philosophical 案件スコープ)。
293
+
294
+ ### Lint state
295
+
296
+ - total: 15 → **8**(L1-003 barrel 誤検知 7 件解消)
297
+ - 残 L1-003: 8 件(全て ISSUE-019 スコープ: presentation → domain)
298
+ - 既存 3306 件テスト全 green(regression なし)
299
+
300
+ ## [0.84.0] - 2026-04-23
301
+
302
+ ### Removed
303
+
304
+ - **L1-006 解消** — `adr-foundation` の never-wired な seed 機能を削除。
305
+ - `scripts/harness/adr-foundation/infrastructure/seeds/initial-adr-definitions.ts` (11 件の seed 定義、docs/ADR/ 13 件の実 ADR と内容不一致で stale だった)
306
+ - `scripts/harness/adr-foundation/application/usecases/seed-initial-adrs-use-case.ts`
307
+ - `scripts/harness/adr-foundation/application/dto/seed-adr-definition.ts`
308
+ - `scripts/harness/__tests__/unit/adr-foundation/seed-initial-adrs-use-case.test.ts` (6 tests)
309
+ - `application-errors.ts` から未使用になった `SeedAdrDefinitionCountError` / `DuplicateAdrIdApplicationError` を削除
310
+ - `infrastructure/seeds/` ディレクトリ自体を削除
311
+ - composition-root に未配線・CLI 未公開だったため外部影響なし。実 ADR は `docs/ADR/` に直接 markdown として管理済み。
312
+
313
+ ### Fixed
314
+
315
+ - **L1-007 解消** — `agent-integration/domain/ports/error-guidance-query-port.ts` の JSDoc コメント密度超過を修正。WHAT を説明する冗長コメントを削除(型名から自明)。
316
+
317
+ ### Lint state
318
+
319
+ - total: 17 → **15**(L1-006: 1 → 0, L1-007: 1 → 0)
320
+ - 残 L1-003: 15 件(全て ISSUE-019 スコープ: barrel 再エクスポート 7 件 + presentation→domain 8 件)
321
+ - 既存 3312 件 - 6 件削除 = **3306 件** テスト全 green
322
+
10
323
  ## [0.83.0] - 2026-04-23
11
324
 
12
325
  ### Fixed
package/README.ja.md CHANGED
@@ -56,7 +56,7 @@ npm install --save-dev phasegate
56
56
  npx phasegate init --name <プロジェクト名> --preset standard
57
57
  ```
58
58
 
59
- `.claude/skills/` に28スキルを展開し、設計原則ドキュメント(`docs/principles/*.md`・`docs/folder_management_rules.md`)を配置し、`phasegate.config.json` を生成します。
59
+ `skills/` に28スキルを展開し、`.claude/skills` / `.codex/skills` などの agent 向け導線を作成し、設計原則ドキュメント(`docs/principles/*.md`・`docs/folder_management_rules.md`)を配置し、`phasegate.config.json` を生成します。
60
60
 
61
61
  `--preset` で初期構成を選択できます: `minimal`(プロトタイプ)/ `standard`(推奨)/ `strict`(本番)
62
62
 
@@ -606,15 +606,17 @@ Phasegate は [OpenAI Codex CLI](https://developers.openai.com/codex/cli) でも
606
606
  ### セットアップ(2 ステップ)
607
607
 
608
608
  ```bash
609
- # 1. Codex 向けに初期化(.codex/hooks.json を自動配置)
609
+ # 1. Codex 向けにプロジェクトを初期化(.codex/hooks.json や .codex/skills など project 内ファイルを作成)
610
610
  npx phasegate init --name my-project --agent codex --with-husky
611
611
 
612
- # 2. Codex hooks フィーチャーフラグを有効化
612
+ # 2. Codex CLI 側の feature flag を手動で有効化
613
613
  codex features enable codex_hooks
614
614
  ```
615
615
 
616
616
  Claude + Codex 両対応プロジェクトは `--agent both` を指定してください。
617
617
 
618
+ `init` が担当するのは project 内のセットアップです。`codex_hooks` の有効化は Codex 本体のユーザー設定なので、明示的に手動実行します。
619
+
618
620
  ### カバレッジと既知の制約
619
621
 
620
622
  Codex のネイティブ `apply_patch` ツールは内部の `ApplyPatchHandler` 経由で実行され hook を発火しません([openai/codex#16732](https://github.com/openai/codex/issues/16732))。このため pre-edit hard block は Bash 経由の書き込みに限定され、ネイティブ `apply_patch` の違反は **pre-commit (L2)** で commit 時にブロックされます。
@@ -786,16 +788,22 @@ your-project/
786
788
  │ │ └── {unit}/{US-XXX}/ # Level 2/3(Unit・ストーリー単位)
787
789
  │ └── ADR/
788
790
  ├── src/ # 実装コード(@unit/@layer 必須)
789
- └── .claude/
790
- ├── settings.json # Hooks 設定
791
- └── skills/ # npx phasegate init で展開
791
+ ├── .claude/
792
+ ├── settings.json # Hooks 設定
793
+ └── skills/ # ../skills への symlink
794
+ ├── .codex/
795
+ │ ├── hooks.json # Codex hooks 設定
796
+ │ └── skills/ # ../skills への symlink(Codex有効時)
797
+ └── skills/ # npx phasegate init で再生成可能
792
798
  ```
793
799
 
794
800
  ### 推奨 .gitignore
795
801
 
796
802
  ```
797
803
  node_modules/
798
- .claude/skills/ # npx phasegate init で再生成可能
804
+ skills/ # npx phasegate init で再生成可能
805
+ .claude/skills/ # skills/ への symlink
806
+ .codex/skills/ # skills/ への symlink
799
807
  dist/
800
808
  reports/
801
809
  ```
package/README.md CHANGED
@@ -49,7 +49,7 @@ npm install --save-dev phasegate
49
49
  npx phasegate init --name my-project
50
50
  ```
51
51
 
52
- This deploys 28 skills, design principles docs (`docs/principles/*.md`, `docs/folder_management_rules.md`), and generates `phasegate.config.json`.
52
+ This deploys 28 skills to `skills/`, creates agent-specific links such as `.claude/skills` or `.codex/skills`, installs design principles docs (`docs/principles/*.md`, `docs/folder_management_rules.md`), and generates `phasegate.config.json`.
53
53
 
54
54
  Optional: add `--with-husky` to also install a `.husky/pre-commit` hook that runs L2 validators.
55
55
 
@@ -155,7 +155,9 @@ Skills cover the full **AIDLC (AI-Driven Development Life Cycle)**, enforcing ph
155
155
 
156
156
  ### Presets
157
157
 
158
- `project.preset` -- overall layer strictness:
158
+ Phasegate has two orthogonal preset families defense and architecture. See the note at the end of this section for naming conventions.
159
+
160
+ **Defense preset** (`project.preset`) -- overall layer strictness:
159
161
 
160
162
  | Preset | Layers | Coverage | Use Case |
161
163
  |---|---|---|---|
@@ -163,6 +165,22 @@ Skills cover the full **AIDLC (AI-Driven Development Life Cycle)**, enforcing ph
163
165
  | `standard` | L1 - L3 | 90% | Production development (default) |
164
166
  | `strict` | L1 - L4 | 95% | Mission-critical systems |
165
167
 
168
+ **Architecture preset** (`architecture.preset`) -- layer names and dependency directions used by L1-003 / L1-004:
169
+
170
+ | Preset | Layers | Use Case |
171
+ |---|---|---|
172
+ | `clean` (default) | `domain / application / infrastructure / presentation` | Clean Architecture / AIDLC full harness |
173
+ | `strict-ddd` | `clean` layers + stricter cycle detection | DDD-focused new projects |
174
+ | `onion` | `domain / application / interface` | Onion Architecture |
175
+ | `hexagonal` | `core / ports / adapters` | Hexagonal / Ports-and-Adapters |
176
+ | `layered` | `presentation / business / data` | Classic 3-tier layered |
177
+ | `flat` | No layers | Small scripts / CLI tools / retrofit start |
178
+ | `custom` | User-defined `layers` + `allowedDependencies` | Any other shape |
179
+
180
+ For selection guidance and config examples see [Preset Selection Guide](docs/guide/preset-selection.md).
181
+
182
+ > **Naming convention**: "defense preset" refers to CI strictness (`strict` / `standard` / `minimal`). "architecture preset" refers to layer topology (`clean` / `onion` / `hexagonal` / `layered` / `flat` / `strict-ddd` / `custom`). They are set independently.
183
+
166
184
  `phaseDependencies.preset` -- phase-gate shape and storyReflection defaults (independent of `project.preset`):
167
185
 
168
186
  | Preset | Phase 3 gates | storyReflection default | Use Case |
@@ -274,15 +292,17 @@ Phasegate also integrates with [OpenAI Codex CLI](https://developers.openai.com/
274
292
  ### Quick setup
275
293
 
276
294
  ```bash
277
- # 1. Initialize with Codex agent support (auto-deploys .codex/hooks.json)
295
+ # 1. Initialize the project for Codex (creates project-local files such as .codex/hooks.json and .codex/skills)
278
296
  npx phasegate init --name my-project --agent codex --with-husky
279
297
 
280
- # 2. Enable Codex hooks feature flag
298
+ # 2. Enable the Codex CLI feature flag manually on your machine
281
299
  codex features enable codex_hooks
282
300
  ```
283
301
 
284
302
  For dual-agent projects (Claude + Codex), use `--agent both`.
285
303
 
304
+ `init` sets up files inside the project. The Codex CLI user-level setting (`codex_hooks`) remains an explicit manual step.
305
+
286
306
  ### Coverage and known limitation
287
307
 
288
308
  Because Codex's native `apply_patch` tool is routed through an internal `ApplyPatchHandler` and does not emit hook events ([openai/codex#16732](https://github.com/openai/codex/issues/16732)), pre-edit hard-block coverage is limited to Bash-based writes. Native `apply_patch` violations are caught at commit time by the pre-commit layer.
@@ -0,0 +1,82 @@
1
+ # ADR-014: presentation → domain 直接依存を許容する(Robert C. Martin 版 Clean Architecture 準拠)
2
+
3
+ ## Status
4
+
5
+ Accepted — 2026-04-23
6
+
7
+ ## Context
8
+
9
+ ADR-005 で採用した Hexagonal Architecture の派生で、phasegate の L1-003 `no-layer-violation` は当初 **presentation layer は presentation + application にしか依存できない**という厳格 DDD Layered 解釈を採用していた(`scripts/harness/biome-ast-engine/domain/value-objects/layer-name.ts:ALLOWED_DEPENDENCIES`)。
10
+
11
+ しかしこの解釈では、Clean Architecture 実装として一般的な以下のパターンが全て L1-003 違反として flag される:
12
+
13
+ - Presenter が Domain VO の値を読み取って表示用文字列に整形する
14
+ - Formatter が Domain Service(policy 系)の判定を呼んで整形する
15
+ - CLI handler が Domain Type(discriminated union 等)を switch して分岐する
16
+
17
+ ISSUE-019 で監査した時点で 8 件の違反が存在し、いずれも「read-only で VO/type/policy を display/format する」パターンで、Dependency Inversion Principle の本質(domain が外部の詳細に依存しない)は侵していなかった。
18
+
19
+ ### 哲学的立場の整理
20
+
21
+ | 派 | `presentation → domain` | 出典 |
22
+ |---|---|---|
23
+ | **Robert C. Martin 版 Clean Architecture** | ✅ 許容 | presenter は "Interface Adapters" ring にあり、Entity/VO は Enterprise Business Rules として全 ring から参照可能 |
24
+ | **厳格 DDD Layered** | ❌ 禁止 | presentation は application 経由で DTO を受け取り、domain を直接触らない |
25
+ | **phasegate 旧実装** | ❌ 禁止 | 厳格 DDD 派を採用(実装時の暗黙判断) |
26
+
27
+ ## Decision
28
+
29
+ `ALLOWED_DEPENDENCIES.presentation` に `'domain'` を追加し、**Robert C. Martin 版 Clean Architecture の解釈を phasegate 標準とする**:
30
+
31
+ ```typescript
32
+ const ALLOWED_DEPENDENCIES = {
33
+ domain: ['domain'],
34
+ application: ['application', 'domain'],
35
+ infrastructure: ['infrastructure', 'application', 'domain'],
36
+ presentation: ['presentation', 'application', 'domain'], // domain を追加
37
+ };
38
+ ```
39
+
40
+ ### 許容される具体パターン
41
+
42
+ - presenter/formatter が Domain VO を read-only で取得して表示用文字列に変換
43
+ - CLI handler が Domain Type を参照して分岐
44
+ - formatter が Domain Service の pure method(副作用なし)を呼んで判定
45
+
46
+ ### 依然として禁止されるパターン
47
+
48
+ - presentation → infrastructure の直接依存(DB/CLI/FS 直叩き)
49
+ - presentation から domain VO の mutation(domain は read-only で扱う)
50
+ - domain → presentation / application / infrastructure の逆方向依存(Dependency Inversion の核)
51
+
52
+ `infrastructure → domain` と `application → domain` の既存許容は維持。
53
+
54
+ ## Consequences
55
+
56
+ ### ポジティブ
57
+
58
+ - 既存 8 件の false positive が解消(L1-003 が 8 → 0 件)
59
+ - phasegate を他 PJ に導入したとき、Robert Martin 流 CA を採用している PJ で摩擦が激減
60
+ - `domain VO の直接 read` を presentation で許容する CA 一般的実装が lint を通るようになる
61
+
62
+ ### ネガティブ / トレードオフ
63
+
64
+ - 厳格 DDD 派(presentation → application → domain を強制したい PJ)では緩すぎる
65
+ - **緩和策**: ISSUE-014(アーキテクチャスタイル config 化)で `preset: "strict-ddd"` を選択肢として提供予定。厳格派は opt-in できる
66
+ - presenter が domain mutation を行うリスクは残る
67
+ - **緩和策**: domain VO を immutable(`readonly` + `Object.freeze`)に保つ既存 ADR-009(DDD Tactical Patterns)の規約で抑止
68
+
69
+ ### スコープ外(本 ADR で扱わない)
70
+
71
+ - application → presentation などの逆方向(Dependency Inversion 違反)の許容は検討対象外
72
+ - domain から他層への依存の許容は検討対象外
73
+ - preset による選択的緩和(`strict-ddd` / `classic-ca` / `custom` 等)は ISSUE-014 の範疇
74
+
75
+ ## 関連
76
+
77
+ - `scripts/harness/biome-ast-engine/domain/value-objects/layer-name.ts:15-20` — ALLOWED_DEPENDENCIES 実体
78
+ - `scripts/harness/biome-ast-engine/domain/value-objects/layer-boundary.ts:31-45` — standardMatrix
79
+ - ADR-005 (Hexagonal Architecture 採用) — 本 ADR はその依存方向規則の一部緩和
80
+ - ADR-009 (DDD Tactical Patterns) — domain immutability 規約で mutation リスクを抑止
81
+ - ISSUE-019 (LayerBoundary 再評価) — 本 ADR で CLOSED
82
+ - ISSUE-014 (architecture style config) — preset 化での opt-in 厳格派提供を予定