spec-runner 1.1.9 → 1.1.13

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 (29) hide show
  1. package/bin/spec-runner-installer.js +14 -16
  2. package/package.json +1 -2
  3. package/spec-runner/templates/.claude/agents/code-reviewer.md +6 -36
  4. package/spec-runner/templates/.claude/agents/design-reviewer.md +1 -1
  5. package/spec-runner/templates/.claude/agents/impact-analyzer.md +51 -0
  6. package/spec-runner/templates/.claude/agents/test-runner.md +1 -1
  7. package/spec-runner/templates/.claude/rules/design-docs.md +1 -1
  8. package/spec-runner/templates/.claude/rules/sub-agent-delegation.md +37 -0
  9. package/spec-runner/templates/.claude/skills/architecture-definition/SKILL.md +5 -2
  10. package/spec-runner/templates/.claude/skills/architecture-skill-development/SKILL.md +11 -0
  11. package/spec-runner/templates/.claude/skills/design-change/SKILL.md +2 -2
  12. package/spec-runner/templates/.claude/skills/design-change/templates/90_ADR/ADR/343/203/206/343/203/263/343/203/227/343/203/254/343/203/274/343/203/210.md +1 -1
  13. package/spec-runner/templates/.claude/skills/harness-engineering/SKILL.md +1 -0
  14. package/spec-runner/templates/.claude/skills/plugin-development/SKILL.md +1 -1
  15. package/spec-runner/templates/.claude/skills/plugin-development/templates/02_/346/246/202/350/246/201/350/250/255/350/250/210/90_ADR/ADR/343/203/206/343/203/263/343/203/227/343/203/254/343/203/274/343/203/210.md +1 -1
  16. package/spec-runner/templates/.github/agents/code-reviewer.agent.md +6 -36
  17. package/spec-runner/templates/.github/agents/design-reviewer.agent.md +1 -1
  18. package/spec-runner/templates/.github/agents/impact-analyzer.agent.md +51 -0
  19. package/spec-runner/templates/.github/agents/test-runner.agent.md +1 -1
  20. package/spec-runner/templates/.github/instructions/design-docs.instructions.md +1 -1
  21. package/spec-runner/templates/.github/instructions/sub-agent-delegation.instructions.md +37 -0
  22. package/spec-runner/templates/.github/skills/architecture-definition/SKILL.md +5 -2
  23. package/spec-runner/templates/.github/skills/architecture-skill-development/SKILL.md +11 -0
  24. package/spec-runner/templates/.github/skills/design-change/SKILL.md +2 -2
  25. package/spec-runner/templates/.github/skills/design-change/templates/90_ADR/ADR/343/203/206/343/203/263/343/203/227/343/203/254/343/203/274/343/203/210.md +1 -1
  26. package/spec-runner/templates/.github/skills/harness-engineering/SKILL.md +1 -0
  27. package/spec-runner/templates/.github/skills/plugin-development/SKILL.md +1 -1
  28. package/spec-runner/templates/.github/skills/plugin-development/templates/02_/346/246/202/350/246/201/350/250/255/350/250/210/90_ADR/ADR/343/203/206/343/203/263/343/203/227/343/203/254/343/203/274/343/203/210.md +1 -1
  29. package/spec-runner/templates/CLAUDE.md +18 -0
@@ -336,28 +336,20 @@ function printBanner() {
336
336
  console.log("");
337
337
  }
338
338
 
339
- function printNextSteps(mode, archStatus) {
339
+ function printNextSteps(archStatus) {
340
340
  console.log("─────────────────────────────────────────");
341
- console.log("次のステップ:");
342
- console.log("");
343
- if (mode === "existing") {
344
- console.log(" 1. /existing-project-to-docs");
345
- console.log(" 既存コードから docs の draft と architecture contract を生成してください。");
341
+ if (archStatus === "decided") {
342
+ console.log("次のステップ:");
346
343
  console.log("");
347
- console.log(" 2. /architecture-skill-development");
348
- console.log(" architecture contract を元に、プロジェクト専用の skill を作成してください。");
349
- } else if (archStatus === "decided") {
350
344
  console.log(" 1. .spec-runner/architecture/architecture.yaml を用意してください。");
351
345
  console.log(" (既に決まっているアーキテクチャを記述)");
352
346
  console.log("");
353
- console.log(" 2. /architecture-skill-development");
354
- console.log(" architecture contract を元に、プロジェクト専用の skill を作成してください。");
347
+ console.log(" 2. Claude Code を開いて /architecture-skill-development を実行してください。");
355
348
  } else {
356
- console.log(" 1. /architecture-definition");
357
- console.log(" 対話形式でアーキテクチャを決め、docs と architecture contract を生成してください。");
349
+ console.log("次のステップ:");
358
350
  console.log("");
359
- console.log(" 2. /architecture-skill-development");
360
- console.log(" architecture contract を元に、プロジェクト専用の skill を作成してください。");
351
+ console.log(" Claude Code を開いて、作りたいものを伝えてください。");
352
+ console.log(" セットアップが自動で始まります。");
361
353
  }
362
354
  console.log("─────────────────────────────────────────");
363
355
  }
@@ -383,6 +375,12 @@ function main() {
383
375
  throw new Error(`Claude テンプレートが見つかりません: ${CLAUDE_TEMPLATE_DIR}`);
384
376
  }
385
377
 
378
+ // CLAUDE.md をプロジェクトルートへインストール(target によらず常に配置)
379
+ const claudeMdSrc = path.join(TEMPLATE_ROOT, "CLAUDE.md");
380
+ if (exists(claudeMdSrc)) {
381
+ copyFileWithPolicy(claudeMdSrc, path.join(CWD, "CLAUDE.md"), archiveRoot);
382
+ }
383
+
386
384
  console.log("");
387
385
  if (target === "claude" || target === "both") {
388
386
  mirrorTreeTo(DEST_CLAUDE_DIR, CLAUDE_TEMPLATE_DIR, archiveRoot);
@@ -405,7 +403,7 @@ function main() {
405
403
  else if (target === "copilot") console.log("完了: .github/ を導入しました。");
406
404
  else console.log("完了: .claude/ と .github/ を導入しました。");
407
405
  console.log("");
408
- printNextSteps(mode, archStatus);
406
+ printNextSteps(archStatus);
409
407
  }
410
408
 
411
409
  main();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spec-runner",
3
- "version": "1.1.9",
3
+ "version": "1.1.13",
4
4
  "description": "docs を正本にした開発運用ハーネスを Claude / Copilot に導入する",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -20,7 +20,6 @@
20
20
  "rails",
21
21
  "django",
22
22
  "nextjs",
23
- "spec-kit",
24
23
  "docs-as-code",
25
24
  "architecture-driven"
26
25
  ],
@@ -1,51 +1,21 @@
1
1
  ---
2
2
  name: code-reviewer
3
- description: コーディング規約ファイルへの適合をチェックする。コード変更後のレビューに使用する。
3
+ description: 実装・修正が完了したときに自動で呼ぶ。変更ファイルをコーディング規約と照合し違反を報告する。修正はしない。
4
4
  tools: Read, Grep, Glob, Bash
5
5
  model: sonnet
6
6
  ---
7
7
 
8
8
  # コーディング規約チェックエージェント
9
9
 
10
- 同梱のコーディング規約ファイルに定義されたコーディング規約への適合をチェックする。
10
+ 変更されたコードをコーディング規約と照合し、違反を報告する。
11
11
 
12
12
  ## 手順
13
13
 
14
14
  1. `git diff --name-only` で変更ファイルを確認する(引数でファイルが指定された場合はそちらを使用)
15
- 2. 変更された `.py` ファイルを読み込む
16
- 3. 以下のチェック項目を検証する
17
- 4. 違反を報告する
18
-
19
- ## チェック項目
20
-
21
- ### 命名規則
22
- - ファイル名: snake_case
23
- - クラス名: PascalCase
24
- - 関数・メソッド: snake_case
25
- - 変数: snake_case
26
- - 定数: UPPER_SNAKE_CASE
27
- - モジュール内部定数: _UPPER_SNAKE_CASE(先頭アンダースコア)
28
- - テストクラス: Test + PascalCase
29
- - テストメソッド: test_ + snake_case(日本語不可)
30
-
31
- ### 型ヒント
32
- - Python 3.12+ のビルトイン型を使用(`list[str]`, `dict[str, int]`, `str | None`)
33
- - `typing` モジュールの `List`, `Dict`, `Optional` を使っていないか
34
- - 値オブジェクトに `frozen=True` の dataclass を使っているか
35
-
36
- ### コメント・docstring
37
- - コメントが日本語であるか(英語コメント禁止)
38
- - モジュール先頭に1行概要があるか
39
- - 不要なdocstring(名前で意図が伝わる関数へのdocstring)がないか
40
-
41
- ### テストコメント
42
- - 全テストメソッドにdocstring(テスト意図を日本語1行)があるか
43
- - セットアップ5行以上のテストに `# 準備` / `# 実行` / `# 検証` があるか
44
- - テストクラスが3つ以上のファイルにセクション区切り(`# ====`)があるか
45
-
46
- ### プロジェクト構造
47
- - テストファイルが実装と同じディレクトリ構造にあるか
48
- - `__init__.py` が存在するか
15
+ 2. `.claude/rules/coding.md` を読み、チェック項目を把握する
16
+ 3. 変更されたソースファイルを読み込む
17
+ 4. チェック項目に照らして違反を検出する
18
+ 5. 違反を報告する
49
19
 
50
20
  ## 報告フォーマット
51
21
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: design-reviewer
3
- description: 設計書(docs/)と実装コード(src/)の整合性をチェックする。設計書と実装の乖離が心配なときに使用する。
3
+ description: 設計書を変更したとき、またはフェーズレビュー時に自動で呼ぶ。docssrc の乖離を報告する。修正はしない。
4
4
  tools: Read, Grep, Glob
5
5
  model: sonnet
6
6
  ---
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: impact-analyzer
3
+ description: design-change で影響範囲を調査するときに呼ぶ。変更対象の node_id またはファイルパスを受け取り、docs/ 全体の frontmatter を走査して depends_on / maps_to で連鎖する影響ファイルを一覧化する。
4
+ tools: Read, Grep, Glob
5
+ model: sonnet
6
+ ---
7
+
8
+ # 影響範囲分析エージェント
9
+
10
+ 変更対象の docs ノードを起点に、frontmatter の `depends_on` / `maps_to` を辿って影響を受けるファイルを一覧化する。
11
+
12
+ ## 入力
13
+
14
+ - 変更対象の `node_id`(例: `usecase.order_registration`)またはファイルパス
15
+
16
+ ## 手順
17
+
18
+ 1. `docs/` 配下の全 `.md` ファイルの frontmatter を読む
19
+ 2. `depends_on` に入力の node_id を含むファイルを「直接影響」として収集する
20
+ 3. 収集したファイルの node_id を起点に同じ検索を繰り返す(2階層まで)
21
+ 4. `maps_to` に入力の node_id を含む `src/` / `tests/` ファイルを「実装影響」として収集する
22
+ 5. 結果を一覧化する
23
+
24
+ ## 報告フォーマット
25
+
26
+ ```
27
+ ## 影響範囲分析
28
+
29
+ ### 起点
30
+ - node_id: {node_id}
31
+ - ファイル: {ファイルパス}
32
+
33
+ ### 直接影響(depends_on で参照)
34
+ - [ファイルパス] — node_id: {node_id}, kind: {kind}
35
+
36
+ ### 間接影響(2階層目)
37
+ - [ファイルパス] — node_id: {node_id}, kind: {kind}
38
+
39
+ ### 実装影響(maps_to で対応)
40
+ - [src/ または tests/ のファイルパス]
41
+
42
+ ### 影響なし(確認済みで変更不要)
43
+ - [ファイルパス] — 理由: {理由}
44
+ ```
45
+
46
+ ## 注意事項
47
+
48
+ - 読み取り専用(ファイルの変更は行わない)
49
+ - 日本語で報告する
50
+ - frontmatter が存在しないファイルはスキップする
51
+ - 影響ファイルが多い場合は kind 別にグループ化する
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: test-runner
3
- description: コード変更後にテストを実行し、失敗時は原因分析まで行う。コード修正・機能追加の後に使用する。
3
+ description: 実装・修正が完了したときに自動で呼ぶ。テストを実行し、失敗時は原因と修正案を報告する。コードは修正しない。
4
4
  tools: Read, Grep, Glob, Bash
5
5
  model: sonnet
6
6
  ---
@@ -44,7 +44,7 @@ spec_runner:
44
44
  | `docs/01_要件定義` | 日本語 | `要件定義.md` |
45
45
  | `docs/02_概要設計` | 日本語 | `ユースケース一覧.md`, `システム全体俯瞰.md` |
46
46
  | `docs/02_概要設計/ユースケース` | `UC-{日本語名}.md` | `UC-差異一覧表示.md` |
47
- | `docs/02_概要設計/90_ADR` | `ADR-0001-{slug}.md` | `ADR-0001-detailed-design-mirrors-src.md` |
47
+ | `docs/02_概要設計/90_ADR` | `mmdd-{日本語タイトル}.md` | `0404-詳細設計をsrcミラーにする.md` |
48
48
  | `docs/03_詳細設計/src/**` | `src/` に合わせた英語 `snake_case` | `agent.md`, `domain.md`, `skill.md` |
49
49
  | `docs/03_詳細設計/infrastructure/**` | 対応先に合わせる。例外で置く場合も `maps_to` 必須 | `database.md`, `schema.dbml` |
50
50
 
@@ -0,0 +1,37 @@
1
+ ---
2
+ description: メインエージェントがサブエージェントへ委任すべきタスクの指針
3
+ ---
4
+
5
+ # サブエージェント委任ルール
6
+
7
+ **メインエージェントは判断・対話・ファイル編集に集中する。検証・調査・実行は積極的にサブエージェントへ委任する。**
8
+
9
+ ## 委任する場面と委任先
10
+
11
+ | 場面 | 委任先 | タイミング |
12
+ |------|--------|-----------|
13
+ | 設計書⇔実装の整合性確認 | `@design-reviewer` | 設計書を変更したとき、フェーズレビュー時 |
14
+ | コーディング規約チェック | `@code-reviewer` | 実装・修正が完了したとき |
15
+ | テスト実行+失敗分析 | `@test-runner` | 実装・修正が完了したとき |
16
+ | 変更の影響範囲調査 | `@impact-analyzer` | design-change で影響範囲を洗うとき |
17
+
18
+ ## 並行起動
19
+
20
+ 独立して動けるエージェントは同時に起動する。
21
+
22
+ 例: 実装完了後 → `@test-runner` と `@code-reviewer` を**同時に**起動し、両方の結果を待ってからユーザーへ報告する。
23
+
24
+ ## メインエージェントが自分でやること
25
+
26
+ サブエージェントは会話の文脈を持たない。以下はメインエージェントが担う:
27
+
28
+ - ユーザーとの対話・意思決定・承認の受け取り
29
+ - フェーズの進行管理・次のアクションの判断
30
+ - ファイルの作成・編集
31
+ - サブエージェントの結果を解釈してユーザーへ伝える
32
+
33
+ ## 原則
34
+
35
+ - ファイルの検索・調査はスケールに関わらずサブエージェントに任せる(メインのコンテキスト節約)
36
+ - 検証タスクをメインエージェントが自分でやらない
37
+ - サブエージェントの報告はポイントを絞ってユーザーへ伝える(生の出力をそのまま貼らない)
@@ -48,10 +48,13 @@ Phase 5: 次の skill へ引き渡し
48
48
  - testing_policy
49
49
  3. ユーザーに確認・承認を得る
50
50
 
51
- ## Phase 5: 次の skill へ引き渡し
51
+ ## Phase 5: architecture-skill-development へ自動移行
52
52
 
53
- 1. `architecture-skill-development` に渡す前提を整理する
53
+ Phase 4 が承認されたら、**ユーザーにコマンドを打たせずに `architecture-skill-development` を続けて開始する**。
54
+
55
+ 1. `architecture-skill-development` に渡す前提(docs と architecture.yaml の所在)を要約する
54
56
  2. project 専用 skill に切り出すべき反復フローを列挙する
57
+ 3. 確認なしに `architecture-skill-development` Phase 1 へ進む
55
58
 
56
59
  ## 原則
57
60
 
@@ -117,6 +117,17 @@ Phase 7: セットアップ専用 skill のアーカイブ提案
117
117
  1. 上記の候補をユーザーに提示し、整理してよいか確認する
118
118
  2. 承認を得た skill を `.claude/skills/` と `.github/skills/` から削除する
119
119
  3. 必要であれば削除前にバックアップ先をユーザーに伝える
120
+ 4. `CLAUDE.md` を更新する
121
+ - 「初回自動起動」セクション(spec-runner インストール時に生成されたもの)を削除する
122
+ - 作成した project 専用 skill の名前と使いどころを記載する
123
+ - 例:
124
+ ```markdown
125
+ ## 開発ワークフロー
126
+ 新機能を実装するときは `/feature-development` を使う。
127
+ 既存機能を変更するときは `/design-change` を使う。
128
+ テストを書くときは `/test-driven-development` を使う。
129
+ ```
130
+ - `.claude/` と `.github/` 両系で内容が変わる場合は、それぞれに反映する
120
131
 
121
132
  ## 原則
122
133
 
@@ -30,7 +30,7 @@ Phase 6: TDD → 実装 → 検証
30
30
  - 影響を受ける機能カテゴリ
31
31
  - 技術的・ビジネス的制約
32
32
  2. 変更起点となる docs を特定する
33
- 3. frontmatter `depends_on` / `maps_to` を使って影響候補を軽く洗う
33
+ 3. `@impact-analyzer` に委任して `depends_on` / `maps_to` を辿る影響ファイルを洗い出す
34
34
  4. 変更が影響するドメインと成果物を一覧化する
35
35
  5. ユーザーに確認・承認を得る
36
36
 
@@ -41,7 +41,7 @@ Phase 6: TDD → 実装 → 検証
41
41
  3. 各案について概要・メリット・デメリット・適合性を示す
42
42
  4. ユーザーが案を決定する
43
43
  5. テンプレート `templates/90_ADR/ADRテンプレート.md` をコピーして生成する
44
- 6. ファイル名は `ADR-0001-{slug}.md` 形式にする
44
+ 6. ファイル名は `mmdd-{日本語タイトル}.md` 形式にする(例: `0404-キャッシュ戦略の変更.md`)
45
45
 
46
46
  ### ADR 配置ルール
47
47
 
@@ -7,7 +7,7 @@ spec_runner:
7
7
  maps_to: []
8
8
  ---
9
9
 
10
- # ADR-0001 {決定内容のタイトル}
10
+ # {決定内容のタイトル}
11
11
 
12
12
  **ステータス**: 提案 / 採用 / 廃止 / 置換
13
13
  **日付**: YYYY-MM-DD
@@ -90,6 +90,7 @@ Phase 4: 影響範囲の反映確認
90
90
  - 関連する skill / rule / agent / template の記述が矛盾していないか
91
91
  - Claude / Copilot の対応ファイルに反映漏れがないか
92
92
  - 今回限りのノイズをルール化していないか
93
+ - skill 名・起動条件・使いどころを変更した場合、`CLAUDE.md` の記述と一致しているか
93
94
 
94
95
  ## 原則
95
96
 
@@ -82,7 +82,7 @@ docs/
82
82
  1. 実装方針に意思決定が必要な場合だけ ADR を作る
83
83
  2. **必ず 3 案を比較する**
84
84
  3. テンプレート `templates/02_概要設計/90_ADR/ADRテンプレート.md` をコピーして生成する
85
- 4. 配置先は `docs/02_概要設計/90_ADR/ADR-0001-{slug}.md` を原則とする
85
+ 4. 配置先は `docs/02_概要設計/90_ADR/mmdd-{日本語タイトル}.md` を原則とする
86
86
  5. 採用案を概要設計へ反映してから次へ進む
87
87
 
88
88
  ## Phase 4: 詳細設計
@@ -7,7 +7,7 @@ spec_runner:
7
7
  maps_to: []
8
8
  ---
9
9
 
10
- # ADR-0001 {決定内容のタイトル}
10
+ # {決定内容のタイトル}
11
11
 
12
12
  **ステータス**: 提案 / 採用 / 廃止 / 置換
13
13
  **日付**: YYYY-MM-DD
@@ -1,51 +1,21 @@
1
1
  ---
2
2
  name: code-reviewer
3
- description: コーディング規約ファイルへの適合をチェックする。コード変更後のレビューに使用する。
3
+ description: 実装・修正が完了したときに自動で呼ぶ。変更ファイルをコーディング規約と照合し違反を報告する。修正はしない。
4
4
  tools: Read, Grep, Glob, Bash
5
5
  model: sonnet
6
6
  ---
7
7
 
8
8
  # コーディング規約チェックエージェント
9
9
 
10
- 同梱のコーディング規約ファイルに定義されたコーディング規約への適合をチェックする。
10
+ 変更されたコードをコーディング規約と照合し、違反を報告する。
11
11
 
12
12
  ## 手順
13
13
 
14
14
  1. `git diff --name-only` で変更ファイルを確認する(引数でファイルが指定された場合はそちらを使用)
15
- 2. 変更された `.py` ファイルを読み込む
16
- 3. 以下のチェック項目を検証する
17
- 4. 違反を報告する
18
-
19
- ## チェック項目
20
-
21
- ### 命名規則
22
- - ファイル名: snake_case
23
- - クラス名: PascalCase
24
- - 関数・メソッド: snake_case
25
- - 変数: snake_case
26
- - 定数: UPPER_SNAKE_CASE
27
- - モジュール内部定数: _UPPER_SNAKE_CASE(先頭アンダースコア)
28
- - テストクラス: Test + PascalCase
29
- - テストメソッド: test_ + snake_case(日本語不可)
30
-
31
- ### 型ヒント
32
- - Python 3.12+ のビルトイン型を使用(`list[str]`, `dict[str, int]`, `str | None`)
33
- - `typing` モジュールの `List`, `Dict`, `Optional` を使っていないか
34
- - 値オブジェクトに `frozen=True` の dataclass を使っているか
35
-
36
- ### コメント・docstring
37
- - コメントが日本語であるか(英語コメント禁止)
38
- - モジュール先頭に1行概要があるか
39
- - 不要なdocstring(名前で意図が伝わる関数へのdocstring)がないか
40
-
41
- ### テストコメント
42
- - 全テストメソッドにdocstring(テスト意図を日本語1行)があるか
43
- - セットアップ5行以上のテストに `# 準備` / `# 実行` / `# 検証` があるか
44
- - テストクラスが3つ以上のファイルにセクション区切り(`# ====`)があるか
45
-
46
- ### プロジェクト構造
47
- - テストファイルが実装と同じディレクトリ構造にあるか
48
- - `__init__.py` が存在するか
15
+ 2. `.github/instructions/coding.instructions.md` を読み、チェック項目を把握する
16
+ 3. 変更されたソースファイルを読み込む
17
+ 4. チェック項目に照らして違反を検出する
18
+ 5. 違反を報告する
49
19
 
50
20
  ## 報告フォーマット
51
21
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: design-reviewer
3
- description: 設計書(docs/)と実装コード(src/)の整合性をチェックする。設計書と実装の乖離が心配なときに使用する。
3
+ description: 設計書を変更したとき、またはフェーズレビュー時に自動で呼ぶ。docssrc の乖離を報告する。修正はしない。
4
4
  tools: Read, Grep, Glob
5
5
  model: sonnet
6
6
  ---
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: impact-analyzer
3
+ description: design-change で影響範囲を調査するときに呼ぶ。変更対象の node_id またはファイルパスを受け取り、docs/ 全体の frontmatter を走査して depends_on / maps_to で連鎖する影響ファイルを一覧化する。
4
+ tools: Read, Grep, Glob
5
+ model: sonnet
6
+ ---
7
+
8
+ # 影響範囲分析エージェント
9
+
10
+ 変更対象の docs ノードを起点に、frontmatter の `depends_on` / `maps_to` を辿って影響を受けるファイルを一覧化する。
11
+
12
+ ## 入力
13
+
14
+ - 変更対象の `node_id`(例: `usecase.order_registration`)またはファイルパス
15
+
16
+ ## 手順
17
+
18
+ 1. `docs/` 配下の全 `.md` ファイルの frontmatter を読む
19
+ 2. `depends_on` に入力の node_id を含むファイルを「直接影響」として収集する
20
+ 3. 収集したファイルの node_id を起点に同じ検索を繰り返す(2階層まで)
21
+ 4. `maps_to` に入力の node_id を含む `src/` / `tests/` ファイルを「実装影響」として収集する
22
+ 5. 結果を一覧化する
23
+
24
+ ## 報告フォーマット
25
+
26
+ ```
27
+ ## 影響範囲分析
28
+
29
+ ### 起点
30
+ - node_id: {node_id}
31
+ - ファイル: {ファイルパス}
32
+
33
+ ### 直接影響(depends_on で参照)
34
+ - [ファイルパス] — node_id: {node_id}, kind: {kind}
35
+
36
+ ### 間接影響(2階層目)
37
+ - [ファイルパス] — node_id: {node_id}, kind: {kind}
38
+
39
+ ### 実装影響(maps_to で対応)
40
+ - [src/ または tests/ のファイルパス]
41
+
42
+ ### 影響なし(確認済みで変更不要)
43
+ - [ファイルパス] — 理由: {理由}
44
+ ```
45
+
46
+ ## 注意事項
47
+
48
+ - 読み取り専用(ファイルの変更は行わない)
49
+ - 日本語で報告する
50
+ - frontmatter が存在しないファイルはスキップする
51
+ - 影響ファイルが多い場合は kind 別にグループ化する
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: test-runner
3
- description: コード変更後にテストを実行し、失敗時は原因分析まで行う。コード修正・機能追加の後に使用する。
3
+ description: 実装・修正が完了したときに自動で呼ぶ。テストを実行し、失敗時は原因と修正案を報告する。コードは修正しない。
4
4
  tools: Read, Grep, Glob, Bash
5
5
  model: sonnet
6
6
  ---
@@ -43,7 +43,7 @@ spec_runner:
43
43
  | `docs/01_要件定義` | 日本語 | `要件定義.md` |
44
44
  | `docs/02_概要設計` | 日本語 | `ユースケース一覧.md`, `システム全体俯瞰.md` |
45
45
  | `docs/02_概要設計/ユースケース` | `UC-{日本語名}.md` | `UC-差異一覧表示.md` |
46
- | `docs/02_概要設計/90_ADR` | `ADR-0001-{slug}.md` | `ADR-0001-detailed-design-mirrors-src.md` |
46
+ | `docs/02_概要設計/90_ADR` | `mmdd-{日本語タイトル}.md` | `0404-詳細設計をsrcミラーにする.md` |
47
47
  | `docs/03_詳細設計/src/**` | `src/` に合わせた英語 `snake_case` | `agent.md`, `domain.md`, `skill.md` |
48
48
  | `docs/03_詳細設計/infrastructure/**` | 対応先に合わせる。例外で置く場合も `maps_to` 必須 | `database.md`, `schema.dbml` |
49
49
 
@@ -0,0 +1,37 @@
1
+ ---
2
+ applyTo: "**"
3
+ ---
4
+
5
+ # サブエージェント委任ルール
6
+
7
+ **メインエージェントは判断・対話・ファイル編集に集中する。検証・調査・実行は積極的にサブエージェントへ委任する。**
8
+
9
+ ## 委任する場面と委任先
10
+
11
+ | 場面 | 委任先 | タイミング |
12
+ |------|--------|-----------|
13
+ | 設計書⇔実装の整合性確認 | `@design-reviewer` | 設計書を変更したとき、フェーズレビュー時 |
14
+ | コーディング規約チェック | `@code-reviewer` | 実装・修正が完了したとき |
15
+ | テスト実行+失敗分析 | `@test-runner` | 実装・修正が完了したとき |
16
+ | 変更の影響範囲調査 | `@impact-analyzer` | design-change で影響範囲を洗うとき |
17
+
18
+ ## 並行起動
19
+
20
+ 独立して動けるエージェントは同時に起動する。
21
+
22
+ 例: 実装完了後 → `@test-runner` と `@code-reviewer` を**同時に**起動し、両方の結果を待ってからユーザーへ報告する。
23
+
24
+ ## メインエージェントが自分でやること
25
+
26
+ サブエージェントは会話の文脈を持たない。以下はメインエージェントが担う:
27
+
28
+ - ユーザーとの対話・意思決定・承認の受け取り
29
+ - フェーズの進行管理・次のアクションの判断
30
+ - ファイルの作成・編集
31
+ - サブエージェントの結果を解釈してユーザーへ伝える
32
+
33
+ ## 原則
34
+
35
+ - ファイルの検索・調査はスケールに関わらずサブエージェントに任せる(メインのコンテキスト節約)
36
+ - 検証タスクをメインエージェントが自分でやらない
37
+ - サブエージェントの報告はポイントを絞ってユーザーへ伝える(生の出力をそのまま貼らない)
@@ -48,10 +48,13 @@ Phase 5: 次の skill へ引き渡し
48
48
  - testing_policy
49
49
  3. ユーザーに確認・承認を得る
50
50
 
51
- ## Phase 5: 次の skill へ引き渡し
51
+ ## Phase 5: architecture-skill-development へ自動移行
52
52
 
53
- 1. `architecture-skill-development` に渡す前提を整理する
53
+ Phase 4 が承認されたら、**ユーザーにコマンドを打たせずに `architecture-skill-development` を続けて開始する**。
54
+
55
+ 1. `architecture-skill-development` に渡す前提(docs と architecture.yaml の所在)を要約する
54
56
  2. project 専用 skill に切り出すべき反復フローを列挙する
57
+ 3. 確認なしに `architecture-skill-development` Phase 1 へ進む
55
58
 
56
59
  ## 原則
57
60
 
@@ -117,6 +117,17 @@ Phase 7: セットアップ専用 skill のアーカイブ提案
117
117
  1. 上記の候補をユーザーに提示し、整理してよいか確認する
118
118
  2. 承認を得た skill を `.claude/skills/` と `.github/skills/` から削除する
119
119
  3. 必要であれば削除前にバックアップ先をユーザーに伝える
120
+ 4. `CLAUDE.md` を更新する
121
+ - 「初回自動起動」セクション(spec-runner インストール時に生成されたもの)を削除する
122
+ - 作成した project 専用 skill の名前と使いどころを記載する
123
+ - 例:
124
+ ```markdown
125
+ ## 開発ワークフロー
126
+ 新機能を実装するときは `/feature-development` を使う。
127
+ 既存機能を変更するときは `/design-change` を使う。
128
+ テストを書くときは `/test-driven-development` を使う。
129
+ ```
130
+ - `.claude/` と `.github/` 両系で内容が変わる場合は、それぞれに反映する
120
131
 
121
132
  ## 原則
122
133
 
@@ -30,7 +30,7 @@ Phase 6: TDD → 実装 → 検証
30
30
  - 影響を受ける機能カテゴリ
31
31
  - 技術的・ビジネス的制約
32
32
  2. 変更起点となる docs を特定する
33
- 3. frontmatter `depends_on` / `maps_to` を使って影響候補を軽く洗う
33
+ 3. `@impact-analyzer` に委任して `depends_on` / `maps_to` を辿る影響ファイルを洗い出す
34
34
  4. 変更が影響するドメインと成果物を一覧化する
35
35
  5. ユーザーに確認・承認を得る
36
36
 
@@ -41,7 +41,7 @@ Phase 6: TDD → 実装 → 検証
41
41
  3. 各案について概要・メリット・デメリット・適合性を示す
42
42
  4. ユーザーが案を決定する
43
43
  5. テンプレート `templates/90_ADR/ADRテンプレート.md` をコピーして生成する
44
- 6. ファイル名は `ADR-0001-{slug}.md` 形式にする
44
+ 6. ファイル名は `mmdd-{日本語タイトル}.md` 形式にする(例: `0404-キャッシュ戦略の変更.md`)
45
45
 
46
46
  ### ADR 配置ルール
47
47
 
@@ -7,7 +7,7 @@ spec_runner:
7
7
  maps_to: []
8
8
  ---
9
9
 
10
- # ADR-0001 {決定内容のタイトル}
10
+ # {決定内容のタイトル}
11
11
 
12
12
  **ステータス**: 提案 / 採用 / 廃止 / 置換
13
13
  **日付**: YYYY-MM-DD
@@ -90,6 +90,7 @@ Phase 4: 影響範囲の反映確認
90
90
  - 関連する skill / rule / agent / template の記述が矛盾していないか
91
91
  - Claude / Copilot の対応ファイルに反映漏れがないか
92
92
  - 今回限りのノイズをルール化していないか
93
+ - skill 名・起動条件・使いどころを変更した場合、`CLAUDE.md` の記述と一致しているか
93
94
 
94
95
  ## 原則
95
96
 
@@ -82,7 +82,7 @@ docs/
82
82
  1. 実装方針に意思決定が必要な場合だけ ADR を作る
83
83
  2. **必ず 3 案を比較する**
84
84
  3. テンプレート `templates/02_概要設計/90_ADR/ADRテンプレート.md` をコピーして生成する
85
- 4. 配置先は `docs/02_概要設計/90_ADR/ADR-0001-{slug}.md` を原則とする
85
+ 4. 配置先は `docs/02_概要設計/90_ADR/mmdd-{日本語タイトル}.md` を原則とする
86
86
  5. 採用案を概要設計へ反映してから次へ進む
87
87
 
88
88
  ## Phase 4: 詳細設計
@@ -7,7 +7,7 @@ spec_runner:
7
7
  maps_to: []
8
8
  ---
9
9
 
10
- # ADR-0001 {決定内容のタイトル}
10
+ # {決定内容のタイトル}
11
11
 
12
12
  **ステータス**: 提案 / 採用 / 廃止 / 置換
13
13
  **日付**: YYYY-MM-DD
@@ -0,0 +1,18 @@
1
+ ## spec-runner セットアップ
2
+
3
+ ### 初回自動起動
4
+
5
+ ユーザーが最初に話しかけてきたとき、以下の条件を確認して自動的にセットアップを開始する。**ユーザーにスラッシュコマンドを打たせない。**
6
+
7
+ | 状態 | 判定方法 | 自動起動するスキル |
8
+ |------|---------|-----------------|
9
+ | 新規プロジェクト | `docs/` が存在しないか空 | `architecture-definition` |
10
+ | 既存プロジェクト | `docs/` にファイルがある | `existing-project-to-docs` |
11
+
12
+ どちらの場合も、そのスキルが完了したら続けて `architecture-skill-development` を自動起動する。
13
+
14
+ ### 判定の注意
15
+
16
+ - `docs/` の中身を確認してから判断する(ディレクトリ存在だけで判断しない)
17
+ - ユーザーが「〇〇を作りたい」「〇〇の開発を始めたい」のように要件・作業開始を示す発言をしたら起動する
18
+ - 雑談や質問など、明らかに要件でない場合は起動しない