phasegate 0.91.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 (68) hide show
  1. package/CHANGELOG.md +169 -0
  2. package/README.ja.md +15 -7
  3. package/README.md +24 -4
  4. package/docs/ADR/ADR-015-architecture-preset.md +183 -0
  5. package/docs/guide/codex-integration.md +7 -2
  6. package/docs/guide/installation.md +10 -2
  7. package/docs/guide/preset-selection.md +170 -0
  8. package/docs/guide/quick-vs-full-mode.md +3 -3
  9. package/docs/guide/retrofit-adoption.md +19 -2
  10. package/docs/guide/skills-overview.md +1 -1
  11. package/package.json +7 -1
  12. package/scripts/harness/agent-integration/application/usecases/handle-pre-tool-use-usecase.ts +108 -100
  13. package/scripts/harness/agent-integration/domain/ports/phase-gate-query-port.ts +3 -3
  14. package/scripts/harness/agent-integration/domain/value-objects/write-target-scope.ts +26 -30
  15. package/scripts/harness/agent-integration/infrastructure/adapters/file-system-story-reflection-query-adapter.ts +6 -2
  16. package/scripts/harness/biome-ast-engine/application/dto/analyze-import-graph-input.ts +3 -0
  17. package/scripts/harness/biome-ast-engine/application/dto/resolve-enabled-rules-output.ts +2 -0
  18. package/scripts/harness/biome-ast-engine/application/mappers/resolve-enabled-rules-output-mapper.ts +4 -1
  19. package/scripts/harness/biome-ast-engine/application/usecases/analyze-import-graph-usecase.ts +4 -1
  20. package/scripts/harness/biome-ast-engine/application/usecases/execute-lint-usecase.ts +2 -0
  21. package/scripts/harness/biome-ast-engine/application/usecases/resolve-enabled-rules-usecase.ts +31 -3
  22. package/scripts/harness/biome-ast-engine/composition-root.ts +10 -2
  23. package/scripts/harness/biome-ast-engine/domain/ports/rule-config-provider-port.ts +16 -0
  24. package/scripts/harness/biome-ast-engine/domain/ports/source-module-analyzer-port.ts +5 -1
  25. package/scripts/harness/biome-ast-engine/domain/services/lint-runner.ts +5 -1
  26. package/scripts/harness/biome-ast-engine/domain/value-objects/architecture-spec.ts +38 -0
  27. package/scripts/harness/biome-ast-engine/domain/value-objects/layer-boundary.ts +7 -8
  28. package/scripts/harness/biome-ast-engine/domain/value-objects/layer-name.ts +15 -23
  29. package/scripts/harness/biome-ast-engine/domain/value-objects/source-module-snapshot.ts +11 -4
  30. package/scripts/harness/biome-ast-engine/infrastructure/adapters/harness-config-provider-adapter.ts +29 -3
  31. package/scripts/harness/biome-ast-engine/infrastructure/adapters/typescript-source-module-analyzer-adapter.ts +22 -15
  32. package/scripts/harness/biome-ast-engine/infrastructure/mappers/source-module-snapshot-mapper.ts +26 -17
  33. package/scripts/harness/config-foundation/application/dto/resolved-config-output.ts +1 -0
  34. package/scripts/harness/config-foundation/application/usecases/load-resolved-config-use-case.ts +34 -2
  35. package/scripts/harness/config-foundation/application/usecases/migrate-schema-use-case.ts +89 -0
  36. package/scripts/harness/config-foundation/composition-root.ts +8 -0
  37. package/scripts/harness/config-foundation/domain/harness-config.ts +6 -0
  38. package/scripts/harness/config-foundation/domain/services/architecture-resolution-service.ts +257 -0
  39. package/scripts/harness/config-foundation/domain/value-objects/architecture-config.ts +66 -0
  40. package/scripts/harness/config-foundation/domain/value-objects/architecture-preset-catalog.ts +75 -0
  41. package/scripts/harness/config-foundation/infrastructure/schemas/harness-config-v3.schema.json +546 -0
  42. package/scripts/harness/config-foundation/infrastructure/validators/ajv-config-schema-validator.ts +18 -6
  43. package/scripts/harness/config-foundation/presentation/cli/migrate-schema-command-handler.ts +83 -0
  44. package/scripts/harness/integrations/pre-commit.ts +211 -52
  45. package/scripts/harness/main.ts +460 -340
  46. package/scripts/harness/phase-dependency-model/domain/ports/story-reflection-file-system-port.ts +2 -4
  47. package/scripts/harness/phase-dependency-model/domain/services/story-reflection-checker.ts +54 -17
  48. package/scripts/harness/phase-dependency-model/infrastructure/filesystem/file-system-story-reflection-adapter.ts +154 -36
  49. package/scripts/harness/setup/skill-deployer.ts +140 -102
  50. package/scripts/harness/skill-quality/domain/errors/skill-quality-error.ts +24 -23
  51. package/scripts/harness/skill-quality/domain/value-objects/commit-message.ts +23 -7
  52. package/scripts/harness/traceability-model/application/usecases/apply-work-item-migration-usecase.ts +52 -0
  53. package/scripts/harness/traceability-model/application/usecases/plan-work-item-migration-usecase.ts +29 -0
  54. package/scripts/harness/traceability-model/application/usecases/validate-design-story-annotations-usecase.ts +83 -18
  55. package/scripts/harness/traceability-model/composition-root.ts +48 -30
  56. package/scripts/harness/traceability-model/domain/ports/design-document-port.ts +9 -15
  57. package/scripts/harness/traceability-model/domain/ports/work-item-migration-apply-port.ts +11 -0
  58. package/scripts/harness/traceability-model/domain/ports/work-item-migration-source-port.ts +9 -0
  59. package/scripts/harness/traceability-model/domain/services/work-item-migration-planner.ts +162 -0
  60. package/scripts/harness/traceability-model/domain/value-objects/work-item-frontmatter.ts +57 -0
  61. package/scripts/harness/traceability-model/domain/value-objects/work-item-migration-candidate.ts +47 -0
  62. package/scripts/harness/traceability-model/infrastructure/gateways/file-system-work-item-migration-apply-gateway.ts +110 -0
  63. package/scripts/harness/traceability-model/infrastructure/gateways/file-system-work-item-migration-source-gateway.ts +182 -0
  64. package/scripts/harness/traceability-model/infrastructure/gateways/markdown-design-document-gateway.ts +29 -43
  65. package/scripts/harness/traceability-model/infrastructure/parsers/work-item-frontmatter-parser.ts +136 -0
  66. package/scripts/harness/traceability-model/presentation/cli/migrate-work-items-command-handler.ts +186 -0
  67. package/skills/quick-implementor/SKILL.md +17 -1
  68. package/templates/.husky/commit-msg +1 -0
@@ -0,0 +1,170 @@
1
+ # Architecture Preset Selection Guide
2
+
3
+ phasegate の `phasegate.config.json` には `architecture.preset` を通じて「そのプロジェクトが採用しているアーキテクチャスタイル」を明示する。L1-003 (`no-layer-violation`) / L1-004 (`enforce-folder-structure`) はこの preset を参照して層名と依存方向を判定する。
4
+
5
+ preset の選択が正しくないと、本来合法な import が violation として検出される / 本来検出されるべき違反が通過する等の誤判定が発生する。本ガイドは preset 選択の判断基準と実例を示す。
6
+
7
+ ---
8
+
9
+ ## 用語の整理(呼称の混同を避ける)
10
+
11
+ phasegate には 2 系統の「プリセット」概念があり、役割が異なる:
12
+
13
+ | 系統 | 概念 | 設定キー | 例 |
14
+ |------|------|---------|----|
15
+ | **防御プリセット** | L3 CI で検査強度を選ぶ | `ci.preset` | `strict` / `lenient` |
16
+ | **アーキプリセット** | L1 の層構造と依存方向を定義 | `architecture.preset` | `clean` / `onion` / `hexagonal` / `layered` / `flat` / `strict-ddd` / `custom` |
17
+
18
+ 本ガイドの対象は **アーキプリセット**。CI 強度の選定は `docs/guide/configuration.md` を参照。
19
+
20
+ ---
21
+
22
+ ## 7 preset の早見表
23
+
24
+ | preset | 層構成 | 典型的な採用対象 |
25
+ |--------|--------|------------------|
26
+ | `clean` (default) | `domain / application / infrastructure / presentation` | Clean Architecture / AIDLC フルハーネス構成 |
27
+ | `strict-ddd` | `clean` + 循環依存禁止を厳格化 | DDD 重視の新規 PJ |
28
+ | `onion` | `domain / application / interface` | Onion Architecture |
29
+ | `hexagonal` | `core / ports / adapters` | Hexagonal / Ports-and-Adapters |
30
+ | `layered` | `presentation / business / data` | 古典的 3 層レイヤード |
31
+ | `flat` | 層分割なし | 小規模スクリプト・CLI ツール / retrofit 導入初期 |
32
+ | `custom` | `layers` + `allowedDependencies` を明示指定 | どの既成プリセットにも当てはまらない PJ |
33
+
34
+ 各 preset の詳細な層行列は `docs/inception/issues/ISSUE-014/wave1_schema_proposal.md §1.2` を参照。
35
+
36
+ ---
37
+
38
+ ## 選択フロー
39
+
40
+ ```
41
+ 1. 既存 PJ か新規 PJ か?
42
+ ├─ 新規 → Q2 へ
43
+ └─ 既存 → retrofit-adoption.md を先に参照 / 初期は `flat` でも可
44
+
45
+ 2. DDD / Clean Architecture を明示採用している?
46
+ ├─ はい → Q3 へ
47
+ └─ いいえ → Q4 へ
48
+
49
+ 3. 4 層分離(domain / application / infrastructure / presentation)を守っている?
50
+ ├─ はい → `clean`(循環依存も潰したい場合は `strict-ddd`)
51
+ └─ いいえ → カスタム Q5 へ
52
+
53
+ 4. フレームワーク構造に寄せている?
54
+ ├─ Onion (3 層 domain/application/interface) → `onion`
55
+ ├─ Hexagonal (core/ports/adapters) → `hexagonal`
56
+ ├─ MVC / 古典 3 層 (presentation/business/data) → `layered`
57
+ ├─ 小規模スクリプト / 層概念なし → `flat`
58
+ └─ それ以外 → `custom`
59
+
60
+ 5. `custom` を選ぶ場合、`layers` と `allowedDependencies` を明示指定する(例は後述)。
61
+ ```
62
+
63
+ ---
64
+
65
+ ## 設定例
66
+
67
+ ### `clean`(default、省略可)
68
+
69
+ ```json
70
+ {
71
+ "$schema": "./node_modules/phasegate/schemas/harness-config-v3.schema.json",
72
+ "architecture": { "preset": "clean" },
73
+ "l1": { "enabled": true, "rules": {} }
74
+ }
75
+ ```
76
+
77
+ ### `onion`
78
+
79
+ ```json
80
+ {
81
+ "architecture": { "preset": "onion" },
82
+ "l1": { "enabled": true, "rules": {} }
83
+ }
84
+ ```
85
+
86
+ ソースファイルの `@layer` タグは `domain` / `application` / `interface` のいずれかを使用する。
87
+
88
+ ### `hexagonal`
89
+
90
+ ```json
91
+ {
92
+ "architecture": { "preset": "hexagonal" },
93
+ "l1": { "enabled": true, "rules": {} }
94
+ }
95
+ ```
96
+
97
+ `@layer core` / `@layer ports` / `@layer adapters`。
98
+
99
+ ### `flat`(層分割なし)
100
+
101
+ ```json
102
+ {
103
+ "architecture": { "preset": "flat" },
104
+ "l1": { "enabled": true, "rules": {} }
105
+ }
106
+ ```
107
+
108
+ `flat` を指定すると L1-001 (`require-unit-comment`) / L1-002 (`require-layer-comment`) / L1-003 / L1-004 が user 明示なき限り auto-disable される。
109
+
110
+ ### `custom`(明示指定)
111
+
112
+ ```json
113
+ {
114
+ "architecture": {
115
+ "preset": "custom",
116
+ "layers": ["model", "service", "controller", "view"],
117
+ "allowedDependencies": {
118
+ "model": ["model"],
119
+ "service": ["service", "model"],
120
+ "controller": ["controller", "service", "model"],
121
+ "view": ["view", "controller"]
122
+ }
123
+ }
124
+ }
125
+ ```
126
+
127
+ `custom` では `layers` と `allowedDependencies` の両方が必須(片方欠けると config 検証で error)。
128
+
129
+ ---
130
+
131
+ ## override(preset に部分的な上書きを掛ける)
132
+
133
+ preset を base にして一部の `allowedDependencies` のみ書き換えたい場合:
134
+
135
+ ```json
136
+ {
137
+ "architecture": {
138
+ "preset": "clean",
139
+ "allowedDependencies": {
140
+ "presentation": ["presentation", "application"]
141
+ }
142
+ }
143
+ }
144
+ ```
145
+
146
+ 上書きしなかった層(`domain` / `application` / `infrastructure`)は preset 既定のまま。
147
+
148
+ 詳細な semantic validation ルール(C1 自己参照 auto-fill / C2 キー不整合 error / C3 値不整合 error / C4 layer 欠落 auto-fill / C5 循環依存 warn)は `docs/inception/issues/ISSUE-014/wave1_schema_proposal.md §1.3` を参照。
149
+
150
+ ---
151
+
152
+ ## 既存 v2 config からの移行
153
+
154
+ v0.86.0 より前の `phasegate.config.json` には `architecture` キーが無い。phasegate は後方互換で v2 も読めるが、**v3 への明示アップグレードを推奨**する:
155
+
156
+ ```bash
157
+ npx phasegate migrate --schema v3
158
+ ```
159
+
160
+ このコマンドは `phasegate.config.json` に `architecture: { preset: "clean" }` を追記して v3 化する(既に `architecture` がある場合は no-op)。
161
+
162
+ ---
163
+
164
+ ## 参照
165
+
166
+ - `docs/inception/issues/ISSUE-014/wave1_schema_proposal.md` — 設計提案とプリセット詳細
167
+ - `docs/inception/issues/ISSUE-014/issue_description.md` — issue 背景
168
+ - `docs/ADR/ADR-015-architecture-preset.md` — アーキ設計決定
169
+ - `docs/guide/retrofit-adoption.md` — 既存 PJ への後付け導入
170
+ - `docs/guide/configuration.md` — 他の config 項目
@@ -130,7 +130,7 @@ Running every change through Full AIDLC is genuinely heavy for one-person projec
130
130
  | Core | `docs/product/construction/<unit>/*.md` (contract docs) | Full |
131
131
  | Periphery | Internal helpers in `application/` that don't change ports | Quick-first, Full if contract impact emerges |
132
132
  | Periphery | `scripts/harness/presentation/` formatting / wording | Quick |
133
- | Periphery | `docs/guide/*`, `README.md`, `.claude/skills/*` tweaks | Quick |
133
+ | Periphery | `docs/guide/*`, `README.md`, `skills/*` tweaks | Quick |
134
134
  | Periphery | Version bumps, `phasegate.config.json` value edits | Quick |
135
135
 
136
136
  Codify the split in your head (or in a project CLAUDE.md note) — "`domain/**` is core, everything else starts Quick" is a healthy default for a single-maintainer project.
@@ -168,5 +168,5 @@ No. `allowedCategories` is a fixed enum (`bugfix`, `docs`, `test`, `config`). If
168
168
  - [Skills Overview](skills-overview.md) — full catalogue of 28 skills
169
169
  - [Layer Model](layer-model.md) — L0 through L4 defence layers
170
170
  - [Configuration](configuration.md) — `quickMode` configuration reference
171
- - `.claude/skills/quick-implementor/SKILL.md` — the Quick Mode skill definition
172
- - `.claude/skills/story-implementor/SKILL.md` — the Full Mode skill definition
171
+ - `skills/quick-implementor/SKILL.md` — the Quick Mode skill definition
172
+ - `skills/story-implementor/SKILL.md` — the Full Mode skill definition
@@ -44,7 +44,7 @@ Step 4: 新規 Unit / 構造変更は scaffold-design で設計文書を起こ
44
44
  npx phasegate init --name <project-name>
45
45
  ```
46
46
 
47
- - `.claude/skills/` に 28 スキルを配置
47
+ - `skills/` に 28 スキルを配置し、有効な agent 用に `.claude/skills` / `.codex/skills` を作成
48
48
  - `phasegate.config.json` を生成
49
49
  - `phasegate.config.json` に `baseline` セクションが未記載でも、v0.71.0 以降は
50
50
  **`baseline.enabled` の default が `true`** のため grandfather は既定で有効
@@ -97,7 +97,24 @@ monorepo など複数ディレクトリを持つ場合は配列で列挙:
97
97
  この設定を忘れると、phase-gate は `scripts/harness/` 配下しか見ないため、
98
98
  retrofit 対象の新規コード作成が block されず、結果として **phasegate が
99
99
  無効化された運用** になってしまう(ISSUE-007 Wave 8 で schema 上 overridable
100
- になるまで、この設定は config validator で拒否されていた)。
100
+ になるまで、この設定は config validator for 拒否されていた)。
101
+
102
+ ### architecture preset の選定(v0.86.0 以降)
103
+
104
+ retrofit 対象 PJ のアーキテクチャスタイルに合わせて `architecture.preset` を
105
+ 選ぶと、L1-003 / L1-004 が preset の層構造に従って判定される。既存コードが
106
+ Clean 4 層でない場合(オニオン / ヘキサゴナル / 古典レイヤード / 層分離なし)、
107
+ preset を合わせないと合法な import が violation として検出される。
108
+
109
+ 初期は層分離無しで運用したい場合は `flat` を選ぶと L1-001〜004 が auto-disable
110
+ される。選定ガイドと設定例は [Preset Selection Guide](./preset-selection.md) 参照。
111
+
112
+ 既存の v2 config(v0.86.0 未満相当、`architecture` キー無し)は下記で自動
113
+ アップグレードできる:
114
+
115
+ ```bash
116
+ npx phasegate migrate --schema v3
117
+ ```
101
118
 
102
119
  ---
103
120
 
@@ -1,6 +1,6 @@
1
1
  # Skills Overview
2
2
 
3
- Phasegate provides 28 skills covering the full AIDLC (AI-Driven Development Life Cycle). Skills are deployed to `.claude/skills/` by `npx phasegate init` and invoked as slash commands in AI agent sessions.
3
+ Phasegate provides 28 skills covering the full AIDLC (AI-Driven Development Life Cycle). `npx phasegate init` deploys the skill bodies to `skills/` and exposes them to enabled agents through `.claude/skills/` / `.codex/skills/` links.
4
4
 
5
5
  ## AIDLC Process — Skill Execution Order
6
6
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "phasegate",
3
- "version": "0.91.0",
3
+ "version": "0.107.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": "Apache-2.0",
@@ -51,6 +51,12 @@
51
51
  "phasegate:disable": "npx tsx scripts/harness/main.ts disable-feature",
52
52
  "phasegate:check-phase": "npx tsx scripts/harness/main.ts phasegate:check-phase",
53
53
  "phasegate:check-ready": "npx tsx scripts/harness/main.ts phasegate:check-ready",
54
+ "harness:status": "pnpm phasegate:status",
55
+ "harness:init": "npx tsx scripts/harness/main.ts init",
56
+ "harness:enable": "pnpm phasegate:enable",
57
+ "harness:disable": "pnpm phasegate:disable",
58
+ "harness:check-phase": "pnpm phasegate:check-phase",
59
+ "harness:check-ready": "pnpm phasegate:check-ready",
54
60
  "test": "vitest run --config scripts/harness/__tests__/vitest.config.forks.ts && vitest run --config scripts/harness/__tests__/vitest.config.ts"
55
61
  },
56
62
  "dependencies": {