phasegate 0.31.0 → 0.39.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.
@@ -292,3 +292,102 @@ export async function initHarnessConfig(
292
292
  await fs.writeFile(configPath, JSON.stringify(template, null, 2) + '\n', 'utf-8');
293
293
  return { created: true, path: configPath };
294
294
  }
295
+
296
+ export interface DeployDesignDocsResult {
297
+ copiedFiles: string[];
298
+ skippedFiles: string[];
299
+ }
300
+
301
+ /**
302
+ * 設計原則ドキュメントを対象プロジェクトの docs/ にデプロイする。
303
+ * - docs/folder_management_rules.md → <projectRoot>/docs/folder_management_rules.md
304
+ * - docs/principles/*.md → <projectRoot>/docs/principles/*.md
305
+ * 既存ファイルは上書きせずスキップする。
306
+ */
307
+ export async function deployDesignDocs(
308
+ harnessRoot: string,
309
+ projectRoot: string,
310
+ ): Promise<DeployDesignDocsResult> {
311
+ const copiedFiles: string[] = [];
312
+ const skippedFiles: string[] = [];
313
+ const docsTargetDir = join(projectRoot, 'docs');
314
+ const principlesTargetDir = join(docsTargetDir, 'principles');
315
+
316
+ await fs.mkdir(docsTargetDir, { recursive: true });
317
+ await fs.mkdir(principlesTargetDir, { recursive: true });
318
+
319
+ const folderRulesRelativePath = join('docs', 'folder_management_rules.md');
320
+ const folderRulesSource = join(harnessRoot, folderRulesRelativePath);
321
+ const folderRulesTarget = join(projectRoot, folderRulesRelativePath);
322
+
323
+ try {
324
+ await fs.access(folderRulesTarget);
325
+ skippedFiles.push(folderRulesRelativePath);
326
+ } catch {
327
+ try {
328
+ await fs.access(folderRulesSource);
329
+ await fs.copyFile(folderRulesSource, folderRulesTarget);
330
+ copiedFiles.push(folderRulesRelativePath);
331
+ } catch {
332
+ // 配置元が存在しない場合はスキップ
333
+ }
334
+ }
335
+
336
+ const principlesSourceDir = join(harnessRoot, 'docs', 'principles');
337
+
338
+ try {
339
+ const principleEntries = await fs.readdir(principlesSourceDir, { withFileTypes: true });
340
+ const principleFiles = principleEntries
341
+ .filter((entry) => entry.isFile() && entry.name.endsWith('.md'))
342
+ .map((entry) => entry.name)
343
+ .sort();
344
+
345
+ for (const principleFile of principleFiles) {
346
+ const relativePath = join('docs', 'principles', principleFile);
347
+ const sourcePath = join(principlesSourceDir, principleFile);
348
+ const targetPath = join(projectRoot, relativePath);
349
+
350
+ try {
351
+ await fs.access(targetPath);
352
+ skippedFiles.push(relativePath);
353
+ } catch {
354
+ await fs.copyFile(sourcePath, targetPath);
355
+ copiedFiles.push(relativePath);
356
+ }
357
+ }
358
+ } catch {
359
+ // principles ディレクトリが存在しない場合はスキップ
360
+ }
361
+
362
+ return { copiedFiles, skippedFiles };
363
+ }
364
+
365
+ export interface DeployHuskyHookResult {
366
+ created: boolean;
367
+ path: string;
368
+ }
369
+
370
+ /**
371
+ * husky pre-commit フックを対象プロジェクトの .husky/ にデプロイする。
372
+ * 既存があればスキップする。実行権限 0o755 を付与する。
373
+ */
374
+ export async function deployHuskyHook(
375
+ harnessRoot: string,
376
+ projectRoot: string,
377
+ ): Promise<DeployHuskyHookResult> {
378
+ const targetPath = join(projectRoot, '.husky', 'pre-commit');
379
+
380
+ try {
381
+ await fs.access(targetPath);
382
+ return { created: false, path: targetPath };
383
+ } catch {
384
+ // 配置先が存在しない場合は新規作成
385
+ }
386
+
387
+ const sourcePath = join(harnessRoot, 'templates', '.husky', 'pre-commit');
388
+ await fs.mkdir(join(projectRoot, '.husky'), { recursive: true });
389
+ await fs.copyFile(sourcePath, targetPath);
390
+ await fs.chmod(targetPath, 0o755);
391
+
392
+ return { created: true, path: targetPath };
393
+ }
@@ -68,7 +68,7 @@ review: opus
68
68
 
69
69
  **このスキルは3フェーズで実行する。**
70
70
  - **Phase 1(計画)**: Opus がスコープ・方針・不明点を整理し、人間の承認を得る
71
- - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`scripts/delegate-sonnet.sh` 経由)
71
+ - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`npx phasegate delegate-sonnet` 経由)
72
72
  - **Phase 3(レビュー)**: Opus が成果物を検証し、問題があれば直接修正する
73
73
 
74
74
  **Phase 1/2/3を同時に実行してはならない。モデルルーティングの詳細は `docs/principles/model-routing.md` を参照。**
@@ -26,7 +26,7 @@ UnitドキュメントとConstructionのドメインモデル設計を元に、*
26
26
 
27
27
  **このスキルは3フェーズで実行する。**
28
28
  - **Phase 1(計画)**: Opus がスコープ・方針・不明点を整理し、人間の承認を得る
29
- - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`scripts/delegate-sonnet.sh` 経由)
29
+ - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`npx phasegate delegate-sonnet` 経由)
30
30
  - **Phase 3(レビュー)**: Opus が成果物を検証し、問題があれば直接修正する
31
31
 
32
32
  **Phase 1/2/3を同時に実行してはならない。モデルルーティングの詳細は `docs/principles/model-routing.md` を参照。**
@@ -18,7 +18,7 @@ review: opus
18
18
  ### 任意インプット(あれば参照)
19
19
  - **ドメインモデル** — `docs/product/construction/{unit}/domain_model.md`
20
20
  - **環境設計** — `docs/product/environment_contract.md`
21
- - **テスト規約** — `docs/principles/testing_rules.md`
21
+ - **テスト規約** — `docs/principles/testing-rules.md`
22
22
  - **既存ITテスト** — 既存パターンの参考
23
23
 
24
24
  ---
@@ -68,7 +68,7 @@ review: opus
68
68
 
69
69
  **このスキルは3フェーズで実行する。**
70
70
  - **Phase 1(計画)**: Opus がスコープ・方針・不明点を整理し、人間の承認を得る
71
- - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`scripts/delegate-sonnet.sh` 経由)
71
+ - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`npx phasegate delegate-sonnet` 経由)
72
72
  - **Phase 3(レビュー)**: Opus が成果物を検証し、問題があれば直接修正する
73
73
 
74
74
  **Phase 1/2/3を同時に実行してはならない。モデルルーティングの詳細は `docs/principles/model-routing.md` を参照。**
@@ -183,7 +183,7 @@ ITテスト設計のスコープ・テスト対象・不明点を整理し、人
183
183
  - **テストコードは生成しない**(設計文書のみ)— 実装は `story-implementor` スキル(codex-delegator経由、またはメインセッションで直接実行)が行う
184
184
  - 論理設計のすべてのユースケース・エンドポイントをカバーする
185
185
  - TDDプロセスの「正しくRED」になる状態を目指す設計を行う
186
- - テスト規約(`docs/principles/testing_rules.md`)がある場合は遵守する
186
+ - テスト規約(`docs/principles/testing-rules.md`)がある場合は遵守する
187
187
  - AAAパターン(Arrange-Act-Assert)を前提としたケース設計を行う
188
188
 
189
189
  ---
@@ -38,7 +38,7 @@ TDD実装フェーズ
38
38
  ### 推奨インプット(あれば参照)
39
39
  - **カバレッジレポート** — `docs/product/construction/{unit}/coverage_report.md`
40
40
  - **既存ITテスト** — `backend/test/integration/**/*.test.ts`(パターン参考)
41
- - **テスト規約** — `docs/principles/testing_rules.md`
41
+ - **テスト規約** — `docs/principles/testing-rules.md`
42
42
  - **ストーリー固有論理設計** — `docs/inception/{unit}/{story_id}/logical_design.md`
43
43
 
44
44
  ---
@@ -71,7 +71,7 @@ TDD実装フェーズ
71
71
 
72
72
  **このスキルは3フェーズで実行する。**
73
73
  - **Phase 1(計画)**: Opus がスコープ・方針・不明点を整理し、人間の承認を得る
74
- - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`scripts/delegate-sonnet.sh` 経由)
74
+ - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`npx phasegate delegate-sonnet` 経由)
75
75
  - **Phase 3(レビュー)**: Opus が成果物を検証し、問題があれば直接修正する
76
76
 
77
77
  **Phase 1/2/3を同時に実行してはならない。モデルルーティングの詳細は `docs/principles/model-routing.md` を参照。**
@@ -64,7 +64,7 @@ review: opus
64
64
 
65
65
  **このスキルは3フェーズで実行する。**
66
66
  - **Phase 1(計画)**: Opus がスコープ・方針・不明点を整理し、人間の承認を得る
67
- - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`scripts/delegate-sonnet.sh` 経由)
67
+ - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`npx phasegate delegate-sonnet` 経由)
68
68
  - **Phase 3(レビュー)**: Opus が成果物を検証し、問題があれば直接修正する
69
69
 
70
70
  **Phase 1/2/3を同時に実行してはならない。モデルルーティングの詳細は `docs/principles/model-routing.md` を参照。**
@@ -17,7 +17,7 @@ review: opus
17
17
 
18
18
  ### 任意インプット(あれば参照)
19
19
  - **UIモック** — `/mock/*.html`(画面フローの参考)
20
- - **テスト規約** — `docs/principles/testing_rules.md`
20
+ - **テスト規約** — `docs/principles/testing-rules.md`
21
21
  - **既存シナリオテスト** — 既存パターンの参考
22
22
 
23
23
  ---
@@ -95,7 +95,7 @@ story-implementor ← TDD実装
95
95
 
96
96
  **このスキルは3フェーズで実行する。**
97
97
  - **Phase 1(計画)**: Opus がスコープ・方針・不明点を整理し、人間の承認を得る
98
- - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`scripts/delegate-sonnet.sh` 経由)
98
+ - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`npx phasegate delegate-sonnet` 経由)
99
99
  - **Phase 3(レビュー)**: Opus が成果物を検証し、問題があれば直接修正する
100
100
 
101
101
  **Phase 1/2/3を同時に実行してはならない。モデルルーティングの詳細は `docs/principles/model-routing.md` を参照。**
@@ -200,7 +200,7 @@ story-implementor ← TDD実装
200
200
  - **テストコードは生成しない**(設計文書のみ)— 実装は `story-implementor` スキル(codex-delegator経由、またはメインセッションで直接実行)が行う
201
201
  - 受け入れ基準を漏れなくカバーする
202
202
  - TDDプロセスの「正しくRED」になる状態を目指す設計を行う
203
- - テスト規約(`docs/principles/testing_rules.md`)がある場合は遵守する
203
+ - テスト規約(`docs/principles/testing-rules.md`)がある場合は遵守する
204
204
  - Playwrightの使用を前提とする(プロジェクト固有の要件がある場合は調整)
205
205
 
206
206
  ---
@@ -37,7 +37,7 @@ TDD実装フェーズ
37
37
  - **カバレッジレポート** — `docs/product/construction/{unit}/coverage_report.md`
38
38
  - **既存シナリオテスト** — `e2e/tests/**/*.spec.ts`(パターン参考)
39
39
  - **UIUX設計** — `docs/inception/{unit}/{story_id}/uiux_design.md`
40
- - **テスト規約** — `docs/principles/testing_rules.md`
40
+ - **テスト規約** — `docs/principles/testing-rules.md`
41
41
 
42
42
  ---
43
43
 
@@ -62,7 +62,7 @@ TDD実装フェーズ
62
62
  ## 3フェーズ実行ルール
63
63
 
64
64
  - **Phase 1(計画)**: Opus がスコープ・方針・不明点を整理し、人間の承認を得る
65
- - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`scripts/delegate-sonnet.sh` 経由)
65
+ - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`npx phasegate delegate-sonnet` 経由)
66
66
  - **Phase 3(レビュー)**: Opus が成果物を検証し、問題があれば直接修正する
67
67
 
68
68
  **Phase 1/2/3を同時に実行してはならない。モデルルーティングの詳細は `docs/principles/model-routing.md` を参照。**
@@ -65,7 +65,7 @@ review: opus
65
65
 
66
66
  **このスキルは3フェーズで実行する。**
67
67
  - **Phase 1(計画)**: Opus がスコープ・方針・不明点を整理し、人間の承認を得る
68
- - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`scripts/delegate-sonnet.sh` 経由)
68
+ - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`npx phasegate delegate-sonnet` 経由)
69
69
  - **Phase 3(レビュー)**: Opus が成果物を検証し、問題があれば直接修正する
70
70
 
71
71
  **Phase 1/2/3を同時に実行してはならない。モデルルーティングの詳細は `docs/principles/model-routing.md` を参照。**
@@ -24,7 +24,7 @@ review: opus
24
24
 
25
25
  **このスキルは3フェーズで実行する。**
26
26
  - **Phase 1(計画)**: Opus がスコープ・方針・不明点を整理し、人間の承認を得る
27
- - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`scripts/delegate-sonnet.sh` 経由)
27
+ - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`npx phasegate delegate-sonnet` 経由)
28
28
  - **Phase 3(レビュー)**: Opus が成果物を検証し、問題があれば直接修正する
29
29
 
30
30
  **Phase 1/2/3を同時に実行してはならない。モデルルーティングの詳細は `docs/principles/model-routing.md` を参照。**
@@ -64,7 +64,7 @@ review: opus
64
64
 
65
65
  **このスキルは3フェーズで実行する。**
66
66
  - **Phase 1(計画)**: Opus がスコープ・方針・不明点を整理し、人間の承認を得る
67
- - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`scripts/delegate-sonnet.sh` 経由)
67
+ - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`npx phasegate delegate-sonnet` 経由)
68
68
  - **Phase 3(レビュー)**: Opus が成果物を検証し、問題があれば直接修正する
69
69
 
70
70
  **Phase 1/2/3を同時に実行してはならない。モデルルーティングの詳細は `docs/principles/model-routing.md` を参照。**
@@ -16,7 +16,7 @@ review: opus
16
16
 
17
17
  ### 任意インプット(あれば参照)
18
18
  - **論理設計** — `docs/product/construction/{unit}/logical_design.md`
19
- - **テスト規約** — `docs/principles/testing_rules.md`
19
+ - **テスト規約** — `docs/principles/testing-rules.md`
20
20
  - **既存ユニットテスト** — 既存パターンの参考
21
21
 
22
22
  ---
@@ -77,7 +77,7 @@ story-implementor ← TDD実装
77
77
 
78
78
  **このスキルは3フェーズで実行する。**
79
79
  - **Phase 1(計画)**: Opus がスコープ・方針・不明点を整理し、人間の承認を得る
80
- - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`scripts/delegate-sonnet.sh` 経由)
80
+ - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`npx phasegate delegate-sonnet` 経由)
81
81
  - **Phase 3(レビュー)**: Opus が成果物を検証し、問題があれば直接修正する
82
82
 
83
83
  **Phase 1/2/3を同時に実行してはならない。モデルルーティングの詳細は `docs/principles/model-routing.md` を参照。**
@@ -182,7 +182,7 @@ story-implementor ← TDD実装
182
182
  - **テストコードは生成しない**(設計文書のみ)— 実装は `story-implementor` スキル(codex-delegator経由、またはメインセッションで直接実行)が行う
183
183
  - ドメインモデルの不変条件を漏れなくカバーする
184
184
  - TDDプロセスの「正しくRED」になる状態を目指す設計を行う
185
- - テスト規約(`docs/principles/testing_rules.md`)がある場合は遵守する
185
+ - テスト規約(`docs/principles/testing-rules.md`)がある場合は遵守する
186
186
  - Vitest/Jest等のテストフレームワークを前提とする
187
187
 
188
188
  ---
@@ -36,7 +36,7 @@ TDD実装フェーズ
36
36
  ### 推奨インプット(あれば参照)
37
37
  - **カバレッジレポート** — `docs/product/construction/{unit}/coverage_report.md`
38
38
  - **既存ユニットテスト** — `backend/test/unit/**/*.test.ts`(パターン参考)
39
- - **テスト規約** — `docs/principles/testing_rules.md`
39
+ - **テスト規約** — `docs/principles/testing-rules.md`
40
40
 
41
41
  ---
42
42
 
@@ -60,7 +60,7 @@ TDD実装フェーズ
60
60
  ## 3フェーズ実行ルール
61
61
 
62
62
  - **Phase 1(計画)**: Opus がスコープ・方針・不明点を整理し、人間の承認を得る
63
- - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`scripts/delegate-sonnet.sh` 経由)
63
+ - **Phase 2(実行)**: Sonnet 4.6 に委任して成果物を生成する(`npx phasegate delegate-sonnet` 経由)
64
64
  - **Phase 3(レビュー)**: Opus が成果物を検証し、問題があれば直接修正する
65
65
 
66
66
  **Phase 1/2/3を同時に実行してはならない。モデルルーティングの詳細は `docs/principles/model-routing.md` を参照。**
@@ -15,7 +15,7 @@
15
15
  "hooks": [
16
16
  {
17
17
  "type": "command",
18
- "command": "npx tsx scripts/harness/agent-integration/presentation/pre-tool-use-hook.ts"
18
+ "command": "npx phasegate hook pre-tool-use"
19
19
  }
20
20
  ]
21
21
  }
@@ -38,7 +38,7 @@
38
38
  },
39
39
  {
40
40
  "type": "command",
41
- "command": "npx tsx scripts/harness/agent-integration/presentation/post-tool-use-hook.ts"
41
+ "command": "npx phasegate hook post-tool-use"
42
42
  }
43
43
  ]
44
44
  }
@@ -49,7 +49,7 @@
49
49
  "hooks": [
50
50
  {
51
51
  "type": "command",
52
- "command": "npx tsx scripts/harness/agent-integration/presentation/stop-hook.ts"
52
+ "command": "npx phasegate hook stop"
53
53
  }
54
54
  ]
55
55
  }
@@ -1,2 +1,2 @@
1
1
  npx lint-staged
2
- npx tsx scripts/harness/integrations/pre-commit.ts
2
+ npx phasegate pre-commit
@@ -1,30 +0,0 @@
1
- {
2
- "version": "1.0",
3
- "preset": "standard",
4
- "project": {
5
- "name": "my-project",
6
- "architecture": "clean-architecture",
7
- "paths": {
8
- "source": [
9
- "backend/src",
10
- "frontend/src"
11
- ],
12
- "docs": {
13
- "units": "docs/product/units",
14
- "inception": "docs/inception",
15
- "construction": "docs/product/construction"
16
- }
17
- },
18
- "naming": {
19
- "fileCase": "kebab-case",
20
- "classCase": "PascalCase",
21
- "unitToPath": "kebab-to-snake"
22
- }
23
- },
24
- "layers": {
25
- "L1_editor": { "enabled": true },
26
- "L2_precommit": { "enabled": true },
27
- "L3_ci": { "enabled": true },
28
- "L4_scheduled": { "enabled": false }
29
- }
30
- }