milestone-review について
milestone-reviewは、マイルストーンの進捗とプロジェクト状況を評価するClaudeスキルです。必要な入力を確認し、根拠のない項目は未評価と明示したうえで、利用可能なレポートやリスクに基づくGo/No-Goをまとめます。
主な機能
- 01マイルストーンとスプリント報告の確認
- 02欠損データを未評価として記録
- 03コード上のマーカーと未解決バグの集計
- 04リスク登録簿とブロック中のストーリーの確認
- 05マイルストーンのGo/No-Goレビュー作成
活用シーン
- 01マイルストーンの進捗状況の評価
- 02データ不足時のレビュー範囲の明確化
- 03進捗とリスクに基づくリリース判断
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ donchitos/ claude-code-game-studios --skill milestone-reviewインストール後、Claude Code で/milestone-reviewを入力して読み込まれたか確認します。
詳細
!bash "${CLAUDE_SKILL_DIR}/../../hooks/yaml-helper.sh" resolve_config --keys review_mode,automation,workflow
上記で解決済み — そのまま使用してください。--review はこの実行において review_mode を上書きします。ブロックがない場合は .claude/docs/config-resolution.md のデフォルト値が適用されます。
マイルストーンレビュー
入力不足 — レポートを作成する前にこれを確認してください
このスキルに必要な入力が存在しない場合、答えは「実行できませんでした」です — 記入済みのレポートではありません。 まず確認し、チェックが失敗したら停止してください。
- このスキルが読み取る入力を列挙します(データファイル、過去のレポート、プロファイラ出力、テスト結果、レジストリ、ソースコード)。
- それぞれについて
FOUNDまたはABSENTを記録します — 「存在すると仮定した」ではありません。 - あるセクションに必要な入力が ABSENT の場合、そのセクションは
NOT ASSESSED — NO DATAです。それを推定したり、隣接する成果物から推測したり、次にテンプレートを読む人に必須セルを埋めてもらうために残したりしないでください。 - すべての必須入力が ABSENT の場合、停止して
NOT ASSESSED — NO DATAを判定全体として報告し、何が欠けていたか、それを生成するスキルを明示してください。
NOT ASSESSED という判定は成功です。 データが存在しないときに「データは何を示しているか?」に対する正しく有用な答えです。これが防ぐ失敗モードは具体的です。判定 enum に「実行できませんでした」という状態がないレポートは、偽のクリーンパスを生み出します — 資産も基準もないプロジェクトで COMPLIANT を返す資産監査や、プロファイラデータがゼロで予算も一度も設定されていないのに「16.67ms の予算に対して 99% 超のヘッドルーム」を報告するパフォーマンスプロファイルなどです。
証拠の不在は、不在の証拠には決してなりません。 スキャンするファイルがないために一致が見つからないスキャンは、何も検証していません。2 つのうちどちらが起きたのかを明記してください — 読者は緑の結果からそれを判別できません。
フェーズ 0: 引数の解析
マイルストーン名(current または特定の名前)を抽出します。
完全なチェックパターンについては .claude/docs/director-gates.md を参照してください。個々のゲート定義は .claude/docs/director-gates/[gate-id].md にあります — 生成されたエージェントは自身のゲートファイルを読み取ります。親セッションでそれを読み取らないでください。
すべての AskUserQuestion 呼び出しは .claude/docs/automation-modes.md に従います
(collaborative は常に質問 · guided は主要なもののみ · autonomous はログに記録して続行。
automation_always_ask カテゴリは常にプロンプトを表示します)。
フェーズ 1:マイルストーンのデータを読み込む
production/milestones/ にマイルストーンの定義があれば読み込みます。引数が current の場合は、最終更新日時が最も新しいマイルストーンファイルを使用します。
production/milestones/に書き込むスキルはありません — 定義は.claude/docs/templates/milestone-definition.mdをもとに手作業で作成するため、ほとんどのプロジェクトには定義がありません。ディレクトリが存在しないか空の場合は、その旨を伝え、スプリントレポートのみをもとにレビューします。定義を捏造しないでください。currentの扱いには注意してください。このスキルは[milestone-name]-review.mdという名前で独自の出力を書き込むため、最終更新日時が最も新しいファイルが定義ではなく、過去の レビュー である可能性があります。選択時に-review.mdで終わるファイルは除外してください。
このマイルストーンに含まれるスプリントのレポートを production/sprints/ から集めます。まず、対象となるレポートの母数を確定します(glob で取得し、N 件を数えます)。次に、各レポート全体ではなく、マイルストーンレビューで実際に集計するセクションを読み取ります。
Grep pattern="^## (Sprint Goal|Capacity|Tasks|Carryover|Risks|Progress|Burndown Assessment|Emerging Risks|Definition of Done)" glob="production/sprints/sprint-*.md" output_mode="content" -A 12
これらの代替見出しは
/sprint-planが出力する見出しです(## Goalではなく## Sprint Goal)— マイルストーンレビューが想定する見出しではありません。実在する見出しのうち 1 つだけに一致するパターンでも、カウントは 0 以外になるため、以下のゼロ一致時の代替処理は実行されません。その結果、各レポートの一部だけを集計しながら、レビューでは網羅率が 100% と報告されてしまいます。
スキャンしたセクションからその範囲外の内容が参照されている場合、または一致するセクションがなかった場合は、スプリントレポートを 1 件まるごと読みます。一致するセクションが 0 件のレポートはテンプレート導入前のものなので、必ず読み、マイルストーンの履歴から黙って除外してはいけません。何も提供しなかったスプリントがあれば報告してください。スプリントをひそかに省いたマイルストーン概要は、作業量も遅延も過少に示すことになります。
ブロックされたストーリー — Blocked テーブルと PR-MILESTONE に渡すブロックされたストーリー数 — は、スプリントレポートのスキャン対象セクションには含まれていません。記録されている場所から読み取ります。production/sprint-status.yaml の status: blocked のストーリー(blocker フィールドを含む)と、そのスプリント外のストーリーについては grep を 1 回実行します。
Grep pattern="^> \*\*Status\*\*: Blocked|BLOCKED:" glob="production/epics/**/story-*.md" output_mode="content"
各ブロックされたストーリーは、そのエピックのフォルダーが実装する機能の下にある Blocked テーブルに、ブロッカー(yaml の blocker フィールド、またはストーリーの BLOCKED: メモ)とともに記載します。ストーリーファイルも sprint-status.yaml もない場合、Blocked テーブルとブロックされたストーリー数は 0 ではなく NOT ASSESSED — NO DATA です。
フェーズ 2:コードベースの健全性をスキャンする
- 未完了の作業を示す
TODO、FIXME、HACKマーカーをスキャンします production/qa/bugs/から Quality Metrics 用に、重大度別の未解決バグ数を数えます(/bug-triageと同様に、**Severity**行と**Status**行を grep で 1 回確認します)。バグファイルがない場合、バグの行は 0 ではなくNOT ASSESSED — NO DATAです- リスクレジスターがあれば
production/risk-register/を確認します(.claude/docs/templates/risk-register-entry.mdをもとに手作業で作成されます。これを書き込むスキルはないため、存在しなくても通常どおりです。リスク評価を黙って省略せず、存在しないことを記載してください)
フェーズ 3:マイルストーンレビューを生成する
# Milestone Review: [Milestone Name]
## Overview
- **Target Date**: [Date]
- **Current Date**: [Today]
- **Days Remaining**: [N]
- **Sprints Completed**: [X/Y]
## Feature Completeness
### Fully Complete
Only a feature whose Status is `Complete` goes here or counts toward the completion percentage; a Deferred feature stays in its denominator, named with the milestone it moved to.
| Feature | Acceptance Criteria | Test Status |
|---------|-------------------|-------------|
### Partially Complete
| Feature | % Done | Remaining Work | Risk to Milestone |
|---------|--------|---------------|------------------|
### Blocked
A started feature whose stories are Blocked goes here, not under Partially
Complete — name the blocker, so the review says why it stalled, not only that
the count moved.
| Feature | Blocked Stories | Blocker | Next Action / Owner |
|---------|----------------|---------|---------------------|
### Not Started
| Feature | Priority | Can Cut? | Impact of Cutting |
|---------|----------|----------|------------------|
## Quality Metrics
- **Open S1 Bugs**: [N] -- [List]
- **Open S2 Bugs**: [N]
- **Open S3 Bugs**: [N]
- **Test Coverage**: [X%]
- **Performance**: [Within budget? Details]
## Code Health
- **TODO count**: [N across codebase]
- **FIXME count**: [N]
- **HACK count**: [N]
- **Technical debt items**: [List critical ones]
## Risk Assessment
| Risk | Status | Impact if Realized | Mitigation Status |
|------|--------|-------------------|------------------|
## Velocity Analysis
- **Planned vs Completed** (across all sprints): [X/Y tasks = Z%]
- **Trend**: [Improving / Stable / Declining]
- **Adjusted estimate for remaining work**: [Days needed at current velocity]
## Scope Recommendations
### Protect (Must ship with milestone)
- [Feature and why]
### At Risk (May need to cut or simplify)
- [Feature and risk]
### Cut Candidates (Can defer without compromising milestone)
- [Feature and impact of cutting]
## Go/No-Go Assessment
**Recommendation**: [NOT ASSESSED / GO / CONDITIONAL GO / NO-GO]
**Conditions** (if conditional):
- [Condition 1 that must be met]
- [Condition 2 that must be met]
**Rationale**: [Explanation of the recommendation]
## Action Items
| # | Action | Owner | Deadline |
|---|--------|-------|----------|
フェーズ 3b:プロデューサーによるリスク評価
レビュー モードの確認 — PR-MILESTONE を起動する前に適用します。
solo→ スキップします。注記:「PR-MILESTONE をスキップしました — Solo モード。」プロデューサーの判定を含めずに、Go/No-Go セクションを提示します。lean→ スキップします(PHASE-GATE ではありません)。注記:「PR-MILESTONE をスキップしました — Lean モード。」プロデューサーの判定を含めずに、Go/No-Go セクションを提示します。full→ 通常どおり起動します。
Go/No-Go の推奨を作成する前に、ゲート PR-MILESTONE(.claude/docs/director-gates/pr-milestone.md)を使い、Agent 経由で producer を起動します。
渡す情報:マイルストーン名と目標日、現在の完了率、ブロックされているストーリーの数、スプリントレポートのベロシティデータ(利用できる場合)、カット候補の一覧。
プロデューサーの評価を Go/No-Go セクション内に記載します。プロデューサーの判定(ON TRACK/AT RISK/OFF TRACK)は、全体の推奨に反映されます。
OFF TRACK の場合は、推奨を作成する前に AskUserQuestion を使います。
- プロンプト:「プロデューサーの判定:OFF TRACK。マイルストーンの達成が危ぶまれています。このレビューでは NO-GO を推奨します。どのように進めますか?」
- 選択肢:
[A] NO-GO を受け入れる — この推奨を含むレビュー全体を作成する[B] CONDITIONAL GO に変更する — 受け入れるリスクは自分で記録する[C] 中止する — レビューを作成する前にブロッカーに対処する
AT RISK の場合は、AskUserQuestion を使います。
- プロンプト:「プロデューサーの判定:AT RISK。マイルストーンが遅れる可能性があります。Go/No-Go セクションをどのようにまとめますか?」
- 選択肢:
[A] CONDITIONAL GO — プロデューサーの条件をレビューに含める[B] NO-GO — 条件を期限内に満たせない[C] GO — リスクを受け入れて続行する
NOT ASSESSED の場合:不足している入力を明示します。ON TRACK とみなしてはならず、これに基づいて GO を推奨してはなりません。入力を補って PR-MILESTONE を再実行するか、NOT ASSESSED を推奨します。または、レビュー自体の調査結果から必要な場合は CONDITIONAL GO/NO-GO を推奨します(順位は .claude/docs/director-gates.md を参照)。
OFF TRACK の判定に反して GO を出してはなりません。ユーザーが上記の [B] を明示的に選択した場合に限り、CONDITIONAL GO を出します。
フェーズ 4:レビューの保存
レビューをユーザーに提示します。
「これを production/milestones/[milestone-name]-review.md に書き込んでもよろしいですか?」と尋ねます。
はいの場合、必要に応じてディレクトリを作成してファイルを書き込みます。判定:COMPLETE — マイルストーンレビューを保存しました。
いいえの場合、ここで停止します。判定:BLOCKED — ユーザーが書き込みを拒否しました。
フェーズ 5:次のステップ
- このマイルストーンが開発フェーズの境界を示す場合は、正式なフェーズゲート判定のために
/gate-checkを実行します。 - 上記のスコープ推奨に基づいて次のスプリントを調整するには、
/sprint-planを実行します(workflow: minimalではスプリントがないため、代わりにブリーフのビルド順序を調整します)。