Spec leader
承認済み Spec ファイルを起点に、Isolate → Plan → Implement → Verify → Code Review → ship の 6 ステージ遷移を制御する skill。本ワークフロー (docs/workflow.md) の Spec Review 以降を担当します。 spec-review skill が verdict: pass を返した直後に自動起動します。 加えて「Isolate 開始して」「spec-leader 起動」「<spec-name> の実装を始めて」 等の明示フレーズでも起動します。 Phase 3 では main agent 内で単独動作可能に実装し、Phase 5 で追加する orchestrator から呼ばれる前提のインタフェース (入力: spec.md パス、 出力: progress / result ファイルパス) を確定済みのため、Phase 5 で本 skill の 改修は不要です。 ship ステージの実行はユーザー最終承認後に限定します。失敗時は全停止して ユーザーに相談します。From its SKILL.md
npx -y skills add gassn/my-workflows --skill spec-leaderAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
40.0 KB, ~13.8k tokens by cl100k_base, as published. Nobody here has run it
Spec Leader Skill
承認済み Spec ファイルを入力として、Isolate → Plan → Implement → Verify → Code Review → ship の 6 ステージ遷移を制御する skill です。本プロジェクトのワークフロー (docs/workflow.md) における Spec Review 後〜ship までの一連のステージを担当します。
用語: 「Project Phase」「Workflow Stage (ステージ)」「Release Phase」「Spec」の定義は docs/glossary.md を参照してください。
1. 役割と位置づけ
ワークフロー上の位置:
... → writing-spec → spec-review → (pass) → writing-plan (main 側) → [spec-leader (本 skill)] → Learn
│
├─ Isolate (worktree 作成 + Spec/Plan コピー)
├─ Implement (developer + tdd-driver)
├─ Verify (verifier + verification-before-completion)
├─ Code Review (code-reviewer + security-reviewer + cross-model-reviewer)
└─ ship (ユーザー承認後、main merge + worktree 削除 + Plan archive)
Plan は spec-leader の前 (main 側で writing-plan が実行) です。Phase 5 並列化時に他 Spec の Plan (specs/*.plan.md) を参照可能にするための構造 (2026-04-22 改修)。
本 skill は ステージ遷移制御 に専念します。各ステージ内部の具体的処理は下位 skill / agent に委譲します。本 skill の価値は下記 3 点です。
- 単独動作可能: orchestrator 不在の Phase 3 でも、ユーザーが手動起動すれば spec.md からの一連の流れを完走できる
- Phase 5 改修不要インタフェース: 入力 = spec.md パス / 出力 = progress + result ファイルパス、の契約を固定。Phase 5 で orchestrator が本 skill を呼ぶ際、改修は不要
- 進捗の可視化と再現性: 各ステージの開始・完了・失敗を progress ファイルに機械可読形式で記録、中断・再開時の状態を一意に特定可能
2. 起動トリガー
2.1 自動起動 (第一トリガー)
spec-review skill が verdict pass を返した直後、本 skill を自動起動 します。
- 入力:
specs/<spec-name>.md(status:spec-complete) - 前提:
specs/<spec-name>.review.mdの verdict がpass
spec-review §9.2 で「spec-leader 実装後に自動起動」とされていた TODO は、本 skill 実装によって解消されます。spec-review 側の改修は必要ありません (本 skill が存在すれば自動呼び出し)。
2.2 明示フレーズ起動 (第二トリガー)
以下の発話で起動してください。
- 「Isolate 開始して」「worktree 作って <spec-name> の実装始めて」
- 「spec-leader 起動」「<spec-name> のステージ遷移開始」
- 「<spec-name> 実装フェーズへ」
2.3 Phase 5 での起動経路
Phase 5 では orchestrator skill が本 skill を呼び出します。orchestrator は複数 Spec を並列処理する際、各 Spec について本 skill を起動します。本 skill 側は「誰に呼ばれたか」を意識する必要はありません (入力 spec.md パスが与えられれば同一の動作)。
3. 前提条件の確認
skill 起動直後、以下を必ず確認してください。
- 入力 Spec ファイル (
specs/<spec-name>.md) の存在 - frontmatter
status: spec-complete specs/<spec-name>.review.mdの存在と verdict がpassspecs/<spec-name>.plan.mdの存在と frontmatterstatus: plan-completeorplan-revised(2026-04-22 改修: Plan が本 skill の前提条件に昇格)- プロジェクトルートが git リポジトリであること (
git rev-parse --is-inside-work-tree) - 対応する worktree (
worktrees/<spec-name>/) が未作成であること (再開時は §14 参照)
前提条件を満たさない場合の対応:
| 状況 | 対応 |
|---|---|
| Spec ファイル未存在 | 「対象 Spec が見つかりません」と返して終了 |
| status が spec-complete でない | 現在の status を表示、writing-spec または spec-review への差戻しを提案 |
| review.md が存在しない | 「Spec Review が未実施です。spec-review を先に起動してください」と返して終了 |
| review.md の verdict が pass でない | 「verdict が <verdict> です。writing-spec レビュー指摘対応モードで修正してください」と返して終了 |
| Plan ファイル未存在 | 「Plan が未作成です。先に writing-plan skill で specs/<spec-name>.plan.md を生成してください」と返して終了 (verdict: precondition-failed、precondition_violation: plan_missing) |
| Plan status が plan-complete / plan-revised でない | 現在の status (plan-writing / plan-draft 等) を表示、writing-plan の継続を促す |
| git リポジトリでない | 「worktree は git リポジトリ内でのみ動作します」と返して終了 |
| worktree が既に存在 | 「再開モード」として §14 の手順を実行 |
3.1 前提条件違反時の result.json 生成 (2026-04-22 iter-1 改修)
上記のいずれかで早期停止する場合、Phase 5 orchestrator が「なぜ処理されなかったか」を機械可読で取得できるよう、停止時点で specs/<spec-name>.result.json を以下で生成してください。
{
"spec": "<spec-name>",
"verdict": "precondition-failed",
"started_at": "<skill 起動時刻>",
"ended_at": "<停止時刻>",
"final_commit": null,
"stages_completed": [],
"stages_failed": [],
"stages_blocked": [],
"user_action_required": "<解消手順、上の対応列と同等の文言>",
"precondition_violation": "<違反した前提条件の識別子、例: 'review_verdict_not_pass'>",
"notes": "前提条件違反で処理未開始"
}
- progress.json は生成しない (処理が始まっていない = 進捗がないため)
- worktree / progress.md も生成しない
- result.json は再開モード / 次回起動判定のシグナルとしても利用される
これにより、orchestrator は result.json のみで「この Spec は次サイクルで何をすれば開始可能になるか」を判定できます。
4. インタフェース定義 (Phase 5 改修不要の契約)
Phase 3 時点で orchestrator 連携用インタフェースを固定します。Phase 5 で orchestrator を実装する際、本 skill の改修を不要とするための契約です。
4.1 入力
| 項目 | 型 | 説明 |
|---|---|---|
spec_path | string (相対パス) | specs/<spec-name>.md |
options (任意) | object | 実行オプション ({"skip_ship": true} 等) |
4.2 出力
| 項目 | 型 | 説明 |
|---|---|---|
progress_path | string | specs/<spec-name>.progress.json |
progress_md_path | string | worktrees/<spec-name>/progress.md (Isolate 完了後に生成) |
result_path | string | specs/<spec-name>.result.json (終了時に生成、shipped / aborted / paused) |
4.3 状態遷移の原則
- 各ステージは
pending → in_progress → (completed | failed | blocked)の 4 状態 - ステージ完了時に progress ファイルを更新 (原子的に書き込み、中断時は前回状態が残る)
- 失敗時は
failed/ 下位 skill 未実装時はblocked/ 中断時は状態維持 (in_progress)
4.4 Phase 5 での呼び出し方法
orchestrator 側は本 skill を以下のように呼び出す想定です (本 skill は変更不要)。
spec-leader skill を起動 (入力: spec_path, options)
→ progress_path を監視 (poll or watch)
→ result_path の生成を待つ
→ 結果を集約して次 Spec へ進む
5. ステージ遷移の全体フロー
本 skill は 5 ステージ (Isolate / Implement / Verify / Code Review / ship) を制御します。Plan ステージは本 skill の前に main agent + writing-plan skill で実行済 の前提 (2026-04-22 改修、Phase 5 並列化準備)。
[Plan 完了済] → [本 skill 起動] → Isolate → Implement → Verify → Code Review → (ユーザー承認) → ship → [終了]
│ │ │ │ │
└─────────┴───────────┴────────────┴──────── 失敗時 ────────→ [停止 + ユーザー相談]
5.1 Phase 3 時点の自動遷移範囲
- Isolate → Implement → Verify → Code Review まで自動遷移
- Code Review 完了 → ship はユーザー承認を必須 (Q5 確定)
- ship 完了後、Learn ステージは main agent + ユーザーの領域のため本 skill は起動せず、結果ファイルの生成と「Learn を実施してください」の提案に留める
5.1.1 複数 Spec の DAG 順起動 (2026-04-22 改修)
specs/dag.md は単一 / 複数 Spec にかかわらず常に存在 (spec-dag-builder が 1 ノード DAG も生成) します。本 skill は writing-plan skill から 1 Spec 単位で起動される想定で、本 skill 自体は 1 Spec を処理 します。
複数 Spec を扱う場合の起動制御は以下:
- Phase 3: writing-plan が DAG の parallel_group 順に 1 Spec ずつ Plan 生成 → 各 Plan 完了後に spec-leader を順次起動 (writing-plan SKILL.md §8.2 準拠)。本 skill は単純に呼ばれた Spec を処理するだけで、DAG を意識する必要はない
- Phase 5: orchestrator skill が DAG の parallel_group 内で複数 spec-leader を並列起動。本 skill のインタフェース (入力: spec_path / 出力: progress.json + result.json) は変更不要で、orchestrator が他 Spec の result.json を監視して依存解決
本 skill の責務はあくまで 1 Spec の Isolate〜ship 遷移制御です。DAG 解析や複数 Spec 協調は writing-plan / orchestrator の責務となります。
5.2 進捗ファイルの更新タイミング
| タイミング | 更新内容 |
|---|---|
| skill 起動時 | progress.json / progress.md を初期化 (すべてのステージを pending)、updated_at を設定 |
| ステージ開始時 | 前ステージの status が completed / failed / blocked のいずれかで確定している ことを検証した上で、current_stage を当該ステージ、stages.<stage>.status を in_progress に、started_at を記録、updated_at を更新 |
| ステージ完了時 | stages.<stage>.status を completed、completed_at と outputs を記録、updated_at を更新 |
| ステージ失敗時 | stages.<stage>.status を failed、error を記録、updated_at を更新、全停止 |
| 下位 skill 未実装時 | stages.<stage>.status を blocked、missing_skill を記録、updated_at を更新、全停止 |
| iteration ループ時 (2026-04-20 tmux-dashboard-mvp learn §5.3) | receiving-code-review → Implement 再 → Verify 再 → Code Review 再 の各再ステージ 開始時 / 完了時にも main 側 progress.json を更新。stages.<stage>.outputs.iteration_N に各 iteration の started_at / completed_at / 結果サマリを追記。frontmatter の review_iteration も合わせて更新 |
| skill 終了時 | result.json を生成 (§7 整合性チェックを通過後のみ) |
5.2.1 更新契約の強化 (2026-04-22 iter-3 改修)
iter-3 統合テストで progress.json の plan.status: in_progress が未更新のまま result.json が verdict: shipped となる不整合が発生しました。再発防止のため以下を必須化:
- atomic write: progress.json の書き換えは
<path>.tmpに全文書き込み →renameで置換。部分書き込み状態を中断で生じさせない - ステージ遷移時の二段検証: 次ステージ開始前に「前ステージの
statusが pending のままでないこと」「前ステージのstarted_atが記録済であればcompleted_atまたはfailed_at/ エラー記録が揃っていること」を検証。検証失敗時は progress の破損として停止 + ユーザー相談 - updated_at の厳守: いかなる更新でも
updated_atの更新を忘れない。古いupdated_atのまま次操作を行うと stalled とみなされる - ステージ飛ばし禁止:
pending→in_progressを経由せず直接completedにしない。また blocked / failed のステージがあるまま後続を開始しない - iteration トレーサビリティの厳守 (2026-04-20 tmux-dashboard-mvp learn §5.3): receiving-code-review による再 Implement → 再 Verify → 再 Code Review ループ中も main 側 progress.json を更新し続ける。iteration 番号は frontmatter
review_iterationに記録し、各再ステージの実施記録はstages.<stage>.outputs.iteration_N(N=1, 2, ...) として追記する。iteration 完了時にstages.<stage>.completed_atを最新 iteration の終了時刻で更新する。これを怠ると、ship 直前にユーザー / orchestrator が古い状態 (iteration 1 時点) を見て「ステージが止まっている」と誤認する事故が起こる (tmux-dashboard-mvp サイクルで実際に発生)
6. 進捗ファイル仕様
6.1 progress.json (機械可読、main 側)
パス: specs/<spec-name>.progress.json
{
"spec": "<spec-name>",
"spec_path": "specs/<spec-name>.md",
"review_path": "specs/<spec-name>.review.md",
"plan_path": "specs/<spec-name>.plan.md",
"started_at": "2026-04-20T22:30:00Z",
"updated_at": "2026-04-20T22:45:00Z",
"current_stage": "isolate",
"stages": {
"isolate": {
"status": "in_progress",
"started_at": "2026-04-20T22:30:00Z",
"completed_at": null,
"outputs": null
},
"implement": {"status": "pending", "started_at": null, "completed_at": null, "outputs": null},
"verify": {"status": "pending", "started_at": null, "completed_at": null, "outputs": null},
"code_review": {"status": "pending", "started_at": null, "completed_at": null, "outputs": null},
"ship": {"status": "pending", "started_at": null, "completed_at": null, "outputs": null}
}
}
Plan は main 側で事前に完了している前提のため、stages には含めません。plan_path を frontmatter 相当のメタとして記録し、Isolate ステージで worktree にコピーします。
6.2 progress.md (人間可読、worktree 内)
パス: worktrees/<spec-name>/progress.md (Isolate 完了後に生成)
---
spec: <spec-name>
started: 2026-04-20T22:30:00Z
updated: 2026-04-20T22:45:00Z
current_stage: plan
---
# Progress: <spec-name>
## Stages
- [x] **Isolate** (2026-04-20T22:30:00Z → 22:30:15Z)
- worktree: `worktrees/<spec-name>/`
- branch: `spec/<spec-name>`
- Spec / Plan / Review を worktree 内にコピー済
- [ ] **Implement** (進行中)
- [ ] **Verify**
- [ ] **Code Review**
- [ ] **ship** (ユーザー承認後)
(※ Plan ステージは本 skill の前に main 側で完了済、stages に含めない)
## ログ
2026-04-20T22:30:00Z [isolate] worktree 作成開始
2026-04-20T22:30:15Z [isolate] 完了 (branch: spec/<spec-name>)
2026-04-20T22:30:20Z [plan] writing-plan 起動
...
7. 結果ファイル仕様
パス: specs/<spec-name>.result.json (終了時に生成)
{
"spec": "<spec-name>",
"verdict": "shipped | shipped-manual | aborted | aborted-on-resume | paused | precondition-failed",
"started_at": "2026-04-20T22:30:00Z",
"ended_at": "2026-04-20T23:45:00Z",
"final_commit": "abc123def...",
"stages_completed": ["isolate", "plan", "implement", "verify", "code_review", "ship"],
"stages_failed": [],
"stages_blocked": [],
"user_action_required": null,
"integrity_warnings": [],
"notes": "全ステージ正常完了、main にマージ済"
}
7.1 verdict 種別
| verdict | 意味 | 条件 |
|---|---|---|
shipped | 正常完了 (全ステージ機械的に整合) | ship ステージ成功 + 整合性チェック pass + cross-model-reviewer 実施済 (verdict: pass) |
shipped-manual | 正常完了だが手動介入あり (2026-04-22 新設、iter-3 知見) | ship ステージ成功 + 整合性チェックで警告あり、integrity_warnings に記録 |
shipped-cross-model-pending | 正常完了だが cross-model-reviewer が PENDING のまま (2026-04-22 新設、iter-4 知見) | ship ステージ成功 + code / security reviewer は pass + cross-model は PENDING placeholder (Phase 3 手動依頼運用)。将来外部モデル呼び出し実装後は区別可能に |
aborted | 失敗で終了 | どこかのステージで failed、stages_failed に記録 |
aborted-on-resume | 再開モードで中止選択 (2026-04-22 新設、iter-2 知見) | §14 再開モードで「中止」ユーザー選択 |
paused | 下位 skill 未実装で停止 | ステージが blocked、stages_blocked / user_action_required に指示 |
precondition-failed | 前提条件違反で停止 (2026-04-22 新設、iter-1 知見) | §3 前提条件チェックで NG、user_action_required に修正手順 |
7.2 integrity_warnings (2026-04-22 iter-3 改修)
result.json 生成時に progress.json との整合性チェックを行い、不一致があれば integrity_warnings 配列に記録します。verdict は手動介入を含む派生値 (shipped-manual) に切り替え、隠蔽を防ぎます。
整合性チェック項目
stages_completedの各要素について、progress.jsonstages.<name>.status == "completed"であることstages_failed/stages_blockedの各要素について、progress.json と status が一致することstarted_at/ended_atのタイムスタンプが progress.json の最古started_at/ 最新updated_atと整合すること- progress.json に
in_progressのまま残っているステージがないこと (handoff 漏れの検出)
警告の記録形式
"integrity_warnings": [
{
"kind": "stage_status_mismatch",
"stage": "plan",
"progress_status": "in_progress",
"result_declared": "completed",
"note": "手動介入で completed 扱いに補完された可能性"
}
]
影響
- 警告がある場合、verdict が
shipped→shipped-manualに自動切替 - learn skill が
integrity_warningsを受けて Try 提案として具体化 (spec-leader の progress 更新漏れとして) - orchestrator (Phase 5) は
shipped-manualを手動介入の必要があった Spec として分類、類似ケースの再発時に早期警告
8. Isolate ステージ
目的: Plan が確定した Spec について git worktree を作成し、main 側の Spec / Plan / Review ファイルを worktree 内にコピーして実装の作業環境を整える (2026-04-22 改修)。
8.1 処理手順
worktrees/ディレクトリが存在しなければ作成git worktree add worktrees/<spec-name> -b spec/<spec-name>実行 (新規ブランチで worktree 作成)- main 側の 3 ファイルを worktree 内にコピー (
cpのみ使用、mvは厳禁、2026-04-22 iter-5 改修):specs/<spec-name>.md→cpでworktrees/<spec-name>/specs/<spec-name>.mdへspecs/<spec-name>.plan.md→cpでworktrees/<spec-name>/plans/<spec-name>.mdへ (worktree 側では従来通りplans/サブディレクトリ命名)specs/<spec-name>.review.md→cpでworktrees/<spec-name>/specs/<spec-name>.review.mdへ (参考情報)git mvや shell のmvは使わない: worktree は master と同一 git 空間のため、rename 操作が commit に乗ると master 側ファイルが merge で消失する (iter-5 で実測された事故)
references_other_plansの処理 (2026-04-24 Phase 6 バッチ 2 (c) learn Try 6.1 改修、依存 Spec がある場合のみ実行):specs/<spec-name>.plan.mdの frontmatter からreferences_other_plansを読み、各エントリに対して以下を実行:- 対象は
specs/archive/<ref-spec>.plan.md(ship 済の先行 Spec Plan、本 skill はdepends_on違反時は §3 前提条件で既に停止している前提) cpのみ使用 (mvは厳禁、理由は 3 と同じ) でworktrees/<spec-name>/plans/<ref-spec>.mdにコピー- コピー失敗時は
references_other_plansに記載された先行 Spec が未 ship の可能性、stages.isolateをfailedに記録して停止 (§3 前提条件の強化として機能) - コピー完了した先行 Plan のパスを
stages.isolate.outputs.referenced_plans配列に記録 - 効果: Implement ステージで developer agent / main agent が先行 Spec の API 契約 (関数シグネチャ / 公開変数 / 定数定義) を worktree 内で直接参照できるようになり、依存 Spec 実装時の「先行 API との整合性」を machine-readable に担保 (Phase 6 バッチ 2 (c) の実運用で成立確認済)
- 対象は
worktrees/<spec-name>/progress.mdを生成- progress.json の
stages.isolateをcompletedに更新 (outputs に worktree / branch / 各コピー先パス / referenced_plans を記録)
8.2 品質ゲート
- worktree ディレクトリが存在すること
worktrees/<spec-name>/specs/<spec-name>.mdが読めることworktrees/<spec-name>/plans/<spec-name>.mdが読めること (Implement ステージで developer agent が参照する)references_other_plansがあれば、対応するworktrees/<spec-name>/plans/<ref-spec>.mdが全て読めること (2026-04-24 Try 6.1 追加、依存 Spec の archive plan.md が worktree にコピー済かを確認)git worktree listに当該 worktree が表示されること
8.3 失敗時
- worktree 作成コマンドが失敗した場合、エラーメッセージを progress に記録して全停止
- 主な失敗原因: ブランチ名重複、ディスク容量不足、git config 問題
- Plan ファイルコピー失敗時も同様に failed として停止 (Plan は Implement の前提のため skip 不可)
8.4 main 側 Plan の扱い
Isolate はコピーのみで main 側の specs/<spec-name>.plan.md は削除しません。Phase 5 の並列 spec-leader が他 Spec の Plan を参照できるよう、ship ステージまで main 側に保持します。
10. Implement ステージ
目的: Plan ファイルのタスクを TDD で実装する。並列実行時は git index 競合を物理的に排除する sub-worktree 方式を採用する (2026-04-22 iter-3 改修)。
10.1 処理手順
tdd-driverskill を起動 (テスト先行強制モード)- Plan §5.2 の並列判定ロジック (依存 DAG +
files_touched積集合空) から並列実行可能なタスクグループを抽出 - 並列グループ内の各タスクについて sub-worktree を作成:
git worktree add worktrees/<spec>/sub-<task-id> spec/<spec-name>(親 worktree の HEAD から分岐、独立 index) - 各 developer agent を
allowed_files= Plan のfiles_touchedを渡して起動、sub-worktree 内で作業 - 全 developer 完了後、親 worktree で
git cherry-pick <各 sub-worktree の commit>で順次統合 (逐次実行、index 競合を親で起こさせない) - 全タスク完了で sub-worktree を削除 (
git worktree remove --force worktrees/<spec>/sub-<task-id>) - progress.json の
stages.implementをcompletedに更新 (outputs に各 T-N の commit SHA を記録)
10.2 並列実行の具体的フロー
並列グループ: [T-1, T-2] (files_touched 積集合空)
逐次: [T-integrate]
1. sub-worktree 作成:
git worktree add worktrees/calculator/sub-T-1 spec/calculator
git worktree add worktrees/calculator/sub-T-2 spec/calculator
2. developer agent 並列起動:
developer (T-1, allowed_files=[calculator/add.py, tests/test_add.py], cwd=sub-T-1)
developer (T-2, allowed_files=[calculator/subtract.py, tests/test_subtract.py], cwd=sub-T-2)
3. 各 developer が独立 index で commit 作成 (競合一切なし)
4. 親 worktree で cherry-pick 統合:
cd worktrees/calculator
git cherry-pick <T-1 の sub-worktree 最終 commit>
git cherry-pick <T-2 の sub-worktree 最終 commit>
5. T-integrate は親 worktree で逐次実行 (__init__.py 等の共通ファイル編集)
6. sub-worktree クリーンアップ
10.3 品質ゲート
- Plan ファイルの全タスク (チェックボックス) が完了済 ([x]) であること
- 新規コミットが親 worktree 内 (spec/<spec-name> ブランチ) に作成されていること
- cherry-pick 時にコンフリクトが発生していないこと (発生時は stages.implement を failed に記録して停止、ユーザーに手動解消を依頼)
- sub-worktree がすべて削除されていること
10.4 下位 skill / agent 未実装時
tdd-driverskill 未実装 → blockeddeveloperagent 未実装 → blocked- いずれの場合も progress に missing を記録して全停止
10.5 Phase 3 移行措置 (並列実行未使用)
Phase 3 初期は Agent Teams の多階層 subagent 動作が未検証のため、sub-worktree 方式は任意 です。順次実行 (全タスクを直列、親 worktree で 1 つずつ実装) でも本 skill は動作します。ただし Plan の files_touched は必須 (Phase 5 並列化の準備として記録される)。
実運用で並列化を有効にする場合は、spec-leader 起動時に options.parallel_implement: true を渡して sub-worktree 方式を有効化します。
11. Verify ステージ
目的: 全テスト / lint / 型チェックを実行し、全項目 pass を確認する。
11.1 処理手順
verification-before-completionskill を起動verifieragent を呼び出し、以下を並列実行:- 全テスト (
npm test/pytest/go test等) - lint (
eslint/ruff/golangci-lint等) - 型チェック (
tsc --noEmit/mypy/go vet等)
- 全テスト (
- 検証レポートを progress.md に追記
- 全項目 pass で
stages.verifyをcompletedに更新
11.2 品質ゲート
- 全検証項目が pass
- 失敗項目があれば Implement ステージに戻って修正 (Phase 3 では手動介入、Phase 5 で自動 rollback 検討)
11.3 下位 skill / agent 未実装時
verification-before-completion/verifierいずれか未実装 → blocked
12. Code Review ステージ
目的: code / security / cross-model の独立レビューを並列実行する。
12.1 処理手順
- 以下の 3 agent を並列起動:
code-reviewer: コード品質観点 (可読性 / 設計 / 単純性)security-reviewer: セキュリティ観点 (OWASP Top 10 / 認証認可 / 入力検証)cross-model-reviewer: 他モデル (Codex 等) による独立審査
- 各 reviewer の結果を
worktrees/<spec-name>/reviews/code.md/security.md/cross-model.mdに保存 - 全 reviewer の verdict を統合し、1 つでも reject があれば
stages.code_reviewをfailedに
12.2 差戻し時の対応
receiving-code-reviewskill を起動し、レビュー指摘を spec-leader 配下の Implement ステージに戻して対応- Implement → Verify → Code Review の再実行ループ (最大 3 回、超えたらユーザー相談)
12.3 下位 skill / agent 未実装時
code-reviewer/security-reviewer/cross-model-reviewer/receiving-code-review/cross-model-reviewのいずれか未実装 → blocked
13. ship ステージ (ユーザー承認後)
目的: worktree を main にマージし、worktree を削除する。
13.1 ユーザー承認の取得
Code Review 完了後、以下をユーザーに提示して承認を求めます。
- Code Review 結果サマリ (全 reviewer pass)
- 変更差分のサマリ (
git diff spec/<spec-name> mainの概要) - merge コマンド (通常は
git merge --no-ff spec/<spec-name>)
承認を得てから ship を実行します。承認前に自動 merge してはいけません。
13.2 処理手順
- worktree 内の一時ファイルをクリーン (2026-04-22 iter-5 改修、merge コンフリクト予防):
__pycache__/、.pytest_cache/、node_modules/、dist/、build/、.venv/等の生成物を削除- 実装言語に応じた clean ターゲット (
npm run clean/make clean等) を実行 - これにより merge 時に未追跡ファイル / index 競合による Aborting を予防 (iter-5 で
__pycache__競合が発生した事例あり)
- main ブランチに切り替え (
git checkout main) - spec/<spec-name> を merge (
git merge --no-ff spec/<spec-name>) - merge 後 main で再度テスト実行 (品質ゲート)
- worktree 削除 (
git worktree remove worktrees/<spec-name>) - spec/<spec-name> ブランチ削除 (任意、ユーザー確認)
- Spec / Plan / Review / Code Review 結果を archive 移動 + worktree 作業ファイルの main 掃除 (2026-04-22 iter-4 + 2026-04-20 tmux-dashboard-mvp learn §5.4 改修):
- archive 移動 (frontmatter
status: archivedに更新):specs/<spec-name>.md→specs/archive/<spec-name>.mdspecs/<spec-name>.plan.md→specs/archive/<spec-name>.plan.mdspecs/<spec-name>.plan.meta.json→specs/archive/<spec-name>.plan.meta.jsonspecs/<spec-name>.review.md→specs/archive/<spec-name>.review.mdspecs/dag.md→specs/archive/<spec-name>.dag.md(単一 Spec の 1 ノード DAG も将来の設計判断参照用に保持)specs/<spec-name>.progress.json→specs/archive/<spec-name>.progress.jsonworktrees/<spec-name>/reviews/consolidated.md→specs/archive/<spec-name>.consolidated.md(iter-4 改修、受信 review の長期保存。worktree 削除前にcpでコピーしておき、ship ステップ 6 で archive 確定)
- worktree 作業ファイルの main 掃除 (2026-04-20 追加): merge 時に main に流入する以下のファイルは、spec-leader §4.1 の成果物ではない ため ship commit で
git rmする:plans/<spec-name>.md(worktree 側の Plan コピー、main 側は archive に残す)progress.md(worktree 側の人間可読進捗、archive には JSON のみで十分)reviews/code.md/reviews/security.md/reviews/cross-model.md(consolidated.md を archive に残せば個別 reviewer の生ログは main 不要)verify-report.md(Verify 結果は progress.jsonstages.verify.outputsに構造化済)
- 上記削除の根拠: worktree は作業空間であり、main は「プロダクトコード + archive」のみで保たれるべき。
git rm漏れがあると main の history に作業ログが残り続け、リポジトリ成長率が無意味に増える (tmux-dashboard-mvp サイクルで 1309 行 → ship 掃除で 752 行削減の実績) - archive 移動と worktree 掃除は同一 ship commit 内で行う (部分的に残すと整合性警告の原因になる)
- archive 移動 (frontmatter
- progress.json の
stages.shipをcompleted、最終的にresult.jsonを生成
13.3 品質ゲート
- main での再テストが pass
- worktree が正常に削除されている
- spec.md / plan.md / review.md の 3 ファイルが archive に移動されている
13.4 失敗時
- merge コンフリクト → 「コンフリクト解消後に spec-leader 再開モードで起動してください」と停止
- main 再テスト fail → 直前の merge を revert (
git revert HEAD) して停止
14. 再開モード (中断からの復旧)
worktree が既に存在する状態で本 skill が起動された場合、再開モード として処理します。
14.1 判定
worktrees/<spec-name>/が存在specs/<spec-name>.progress.jsonが存在
14.2 処理
- progress.json を読み込み、最終状態を特定
current_stageのstatusを確認:in_progress→ 中断した可能性。ユーザーに確認後、当該ステージを再実行 or 完了扱いにfailed/blocked→ 原因解消後にユーザー承認で当該ステージを再実行completed→ 次ステージから再開
- 再開ステージから通常フローに合流
14.3 ユーザー確認の必須化
再開モードでは、どのステージから再開するかを必ずユーザーに確認 してから処理を進めます。自動判断による意図しない再実行を防止します。
14.4 ユーザーが「中止」選択時の挙動 (2026-04-22 iter-2 改修)
再開モードでユーザーが「中止」を選択した場合、現在の progress.json 状態を変更せずに、以下で result.json を生成して終了します。
{
"spec": "<spec-name>",
"verdict": "aborted-on-resume",
"started_at": "<progress.json の started_at を引き継ぎ>",
"ended_at": "<中止時刻>",
"final_commit": null,
"stages_completed": ["<completed だったステージを列挙>"],
"stages_failed": [],
"stages_blocked": ["<blocked だったステージを列挙>"],
"user_action_required": "ユーザー中止。worktree / progress.json は保持、後日 spec-leader 再起動で再開モードに再入場可能",
"resume_point_at_abort": "<current_stage の値>",
"notes": "再開モードで中止選択"
}
14.4.1 保持されるもの / 破棄されるもの
| 対象 | 挙動 |
|---|---|
worktrees/<spec-name>/ | 保持 (再開用) |
specs/<spec-name>.progress.json | 保持 |
worktrees/<spec-name>/progress.md | 保持 |
specs/<spec-name>.result.json | 上記 JSON で生成 |
14.4.2 再再開の可能性
aborted-on-resume は回復可能な状態です。後日 spec-leader を再起動すると再び再開モードに入り、§14.2 手順に従って状態確認からやり直します。完全な破棄が必要な場合は、ユーザーが明示的に worktrees/<spec-name>/ を削除 + progress.json / result.json を削除してから新規に spec-leader を起動します。
15. 失敗時の全停止 + ユーザー相談
どのステージでも失敗が発生した場合、全停止 + ユーザー相談 に移行します (Q6 確定)。
15.1 全停止の手順
- 失敗したステージの progress を
failedに更新、errorに原因を記録 - 後続ステージは
pendingのまま (飛ばさない) result.jsonをverdict: abortedで生成- ユーザーに以下を報告:
- 失敗ステージ
- 失敗原因
- 再開手順 (「原因解消後、spec-leader を再起動すると再開モードで復旧します」)
15.2 自動リトライの方針
Phase 3 では自動リトライを行いません (Q6 = (a) 全停止)。下位 skill / agent が独自にリトライする場合は本 skill は関与しません。
16. 未実装下位 skill / agent の扱い (Phase 3 初期)
Phase 3 時点では下位 skill / agent の多くが未実装です。本 skill は以下のように扱います。
16.1 検出方法
各ステージ開始時、必要な skill が ~/.claude/skills/<skill-name>/SKILL.md として存在するかを確認します。agent についても同様に agents/ ディレクトリ or 設定を参照します。
16.2 未実装時の挙動 (Q3 確定: 呼び出し定義のみ)
stages.<stage>.statusをblockedにstages.<stage>.missing_skill/missing_agentに不足を列挙- 全停止 + ユーザー報告
result.jsonのverdictをpausedに
16.3 実装状況の表 (2026-04-22 時点、Plan と Isolate 順序反転後)
Plan は本 skill の前提条件 (main 側で writing-plan 事前実行済) として扱うため、本表の対象外 (前提チェックは §3 参照)。本 skill が制御する 5 ステージ:
| ステージ | 必要 skill | 必要 agent | 実装状況 |
|---|---|---|---|
| Isolate | (本 skill で直接 git worktree + ファイルコピー実行) | — | ○ |
| Implement | tdd-driver ○ | developer ○ (2026-04-21 実装) | ○ |
| Verify | verification-before-completion ○ | verifier ○ (2026-04-21 実装) | ○ |
| Code Review | receiving-code-review ○ / cross-model-review ○ | 3 reviewer agent ○ (2026-04-21 実装) | ○ |
| ship | (本 skill で直接 git merge + archive 移動実行) | — | ○ |
2026-04-22 時点で Phase 3 の全 skill (11 種) + agent (5 種) が実装完了し、iter-3 統合完走テスト (verdict: shipped) で全 5 ステージ通過を確認済み。Phase 5 対応の残 agent (investigator / spec-reviewer / orchestrator) は本 skill の動作に影響しない。
17. Phase 5 改修不要性の保証
本 skill は Phase 5 で orchestrator が追加された際に改修不要であるよう、以下を担保しています。
| 観点 | 担保 |
|---|---|
| 呼び出し元の抽象化 | 本 skill は「誰に呼ばれたか」を意識しない (入力 spec_path のみに依存) |
| 状態の外部化 | 内部状態を持たず、すべての進捗を progress.json に記録 (orchestrator からも参照可能) |
| 結果の機械可読化 | result.json で終了状態を表現 (orchestrator が次 Spec へ進む判断に使用可能) |
| 並列呼び出し安全性 | worktree 単位で動作、他 Spec との状態共有なし (orchestrator が本 skill を並列起動しても衝突しない) |
| 下位 skill の入出力契約 | writing-plan は plan.md、verifier は検証レポート、等、下位との契約はファイルベース (変更不要) |
18. 失敗・アンチパターン
以下を行ってはいけません。
- ❌ Spec ファイルを読まずにステージ遷移を開始する
- ❌ spec-review の verdict が pass でない Spec を処理する
- ❌ worktree 作成を省略して main で直接実装する
- ❌ Code Review 完了後、ユーザー承認なしに ship を実行する
- ❌ 失敗時に progress を更新せず終了する (後の再開モードが破綻する)
- ❌ 下位 skill 未実装時に「代わりに本 skill で処理する」と判断する (責務逸脱、呼び出し定義に留める)
- ❌ progress.json / progress.md のどちらか一方だけ更新する (両方を一貫性をもって更新)
- ❌ main ブランチで本 skill を起動する (main 汚染防止、必ず worktree で作業)
- ❌ 再開モードでステージ状態をユーザー確認なしに変更する
- ❌ result.json 生成を飛ばしてして終了する (Phase 5 orchestrator が結果取得できなくなる)
- ❌ iteration ループ中に main 側 progress.json を更新しない (2026-04-20 tmux-dashboard-mvp learn §5.3、ship 直前の状態誤認事故の原因)
- ❌ worktree 側作業ファイル (plans/ / progress.md / reviews/*.md / verify-report.md) を main に残したまま ship する (2026-04-20 tmux-dashboard-mvp learn §5.4、§13.2 の 6 項目で明示的
git rmが必要)
What ships with it: 10 files
32.5 KB alongside SKILL.md, 1 of them executable
evals/
- evals.json5.2 KB
- fixtures/README.md3.1 KB
- fixtures/setup-git-fixture.shruns3.2 KB
- inputs/specs/login.md13.8 KB
- inputs/specs/login-needsfix.review.md1.5 KB
- inputs/specs/login.plan.md2.3 KB
- inputs/specs/login.progress.json1010 B
- inputs/specs/login.review.md1.5 KB
- inputs/specs/login-writing.plan.md286 B
- inputs/worktrees/login/progress.md713 B