story-done について
story-done は、ゲーム開発のストーリーをレビューして完了処理する Claude スキルです。証拠やプロジェクト文書に照らして受け入れ条件を確認し、差異を報告したうえで、ユーザーの承認後にのみ完了として記録します。
主な機能
- 01証拠に基づく受け入れ条件の確認
- 02条件と証拠の対応表作成
- 03テスト証拠と実行結果のレビュー
- 04範囲や仕様からの逸脱の報告
- 05承認後のストーリーとスプリント状態の更新
- 06毎回のセッションチェックポイント記録
活用シーン
- 01完了処理前の受け入れ条件の確認
- 02ゲーム開発ストーリーのテスト証拠レビュー
- 03範囲外の変更や仕様逸脱の特定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ donchitos/ claude-code-game-studios --skill story-doneインストール後、Claude Code で/story-doneを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
CONTRACT.mdreferences/review-gates.mdsprint-next.mdtech-debt-row.md詳細
!bash "${CLAUDE_SKILL_DIR}/../../hooks/yaml-helper.sh" resolve_config --keys review_mode,review_gate,automation,automation_always_ask,workflow,qa.level,gate_level,system_overrides
上記で解決済みです。そのまま使用してください。--review は review_mode を上書きします。ブロックしない場合の →
デフォルトについては .claude/docs/config-resolution.md を参照してください。
質問ツールを使って質問してください。質問ツールがない場合は、選択肢に番号を振って一覧表示し、待機するためにターンを終了してください。質問がスキップまたは却下されても回答とはみなしません。プレーンテキストで再度質問してください。
ストーリーの完了
完了したストーリーをクローズします。すべての受け入れ基準を証拠と照合し、GDD、ADR、ストーリー自体のスコープからの逸脱を事実として報告します。ストーリーを「完了」とするのは、ユーザーが「はい」と答えた場合のみです。
ユーザーの「はい」の後に書き込むもの: ストーリーファイル(Status、Last Updated、## Completion Notes セクション)と production/sprint-status.yaml のエントリー。ユーザーがそのオプションを選んだ場合に限り、docs/tech-debt-register.md にも書き込みます。判定にかかわらず、各実行の最後にセッションチェックポイントを書き込みます。
次: 次のストーリー(フェーズ 8)。
質問は .claude/docs/automation-modes.md に従います(コラボレーティブモードでは必ず質問し、ガイド付きモードでは重要な選択肢について質問し、自律モードでは記録して続行します。automation_always_ask のカテゴリーでは必ず質問します)。
チェックリスト(コピーして、進めながらチェックを付けてください):
- [ ] Phase 1: story found, facts and settings read
- [ ] Phase 2: what the story is checked against, loaded for its tier
- [ ] Phase 3: each criterion verified, traceability table built
- [ ] Phase 4: test evidence and run result checked
- [ ] Phase 5: deviations and scope checked
- [ ] Phase 6: review gates run, or their skip noted
- [ ] Phase 7: report and verdict shown; close asked
- [ ] Phase 8: next story named, checkpoint written, closing block printed
フェーズ 1:ストーリーとその設定
対象のストーリー。 スキル名の後に入力されたテキストから、--review <mode> の組を取り除いたものがストーリーのパスです。入力がない場合:
production/session-state/active.mdのチェックポイントにある Current task 行がストーリーを示している場合は、そのストーリー。- それ以外の場合は、進行中のストーリーを確認します:
bash .claude/scripts/story-facts.sh --allを実行し、状態がIN_REVIEWまたはIN_PROGRESSの行を対象とします。複数ある場合は、「クローズするストーリーを選んでください」と質問し、ストーリーごとに選択肢を提示します。 - 該当するものがない場合は、パスを尋ねます。
production/epics/にストーリーファイルが1つもない場合は、次のメッセージを表示して停止します: "production/epics/にストーリーが見つかりません。作成するには/create-stories [epic-slug]を実行してください(standardとfullでは、エピックがまだない場合、先に/create-epicsを実行してください)。"
ストーリーの事実。 bash .claude/scripts/story-facts.sh <story-path> を実行すると、ステータス、タイプ、レイヤー、TR-ID、ADR、基準の数、テスト証拠の状態、依存関係が得られます。次に、ストーリー全体を読みます。基準のテキスト、Test Evidence のパス、## Files、Out of Scope を確認してください。
ティア。 ストーリーのシステムに対する workflow は、GDD のファイル名のステムを使って特定します。GDD: パスが design/gdd/<stem>.md の場合は <stem> を使い、GDD パスがない場合に限って TR-ID の [system] を使います。そのシステムの system_overrides に該当する行があればその値を、なければプロジェクトの値を使います。
qa.level で必要となるもの(.claude/docs/coding-standards.md の証拠の行)。値は上記の qa.level 行から取得し、workflow や rigor から取得しないでください。この2つは別々に設定されるため、workflow: minimal でも qa.level: standard なら、Logic ストーリーにはユニットテストが必要です。
| チェック | qa.level: minimal | qa.level: standard | qa.level: full |
|---|---|---|---|
| Logic、Integration テスト | 免除 | 必須 | 必須 |
| Config/Data のスモークレポート | 免除 | 必須。デフォルトでは助言扱い | 必須。デフォルトではブロック対象 |
| Visual/Feel、UI の保持スクリーンショット | 必須 | 必須 | 必須 |
| 未テストの基準(フェーズ 3) | エスカレーションしない | 半数を超えるとブロック | 1つでもあればブロック |
見た目の確認が免除されることはありません。Visual/Feel または UI のストーリーでは、どのレベルでもスクリーンショットが必要です。タイプごとのゲートレベルは、上記の gate_level 行の値です。full では、Config/Data のデフォルト(config=advisory(default…))がブロック対象になります。明示的に testing.strict.config: false が設定されている場合は、引き続き助言扱いです。
フェーズ 2:ストーリーを照合する対象
ティアごとに確認します。各ドキュメントはセクション単位で読み、全文は読まないでください。
- **
full:**各 TR-ID の現在の要件テキスト。対象はdocs/architecture/tr-registry.yaml内のid: <TR-ID>\s*$に一致する行と、そのエントリーに続くテキストです(アンカーによってTR-combat-001がTR-combat-0010に一致するのを防ぎ、\s*は Windows の行末にも対応します)。ストーリー内で引用されたテキストは決して使用しないでください。GDD の Acceptance Criteria と Detailed Design はbash .claude/scripts/md-section.sh extract design/gdd/<file>.md "Acceptance Criteria"を実行し、次に"Detailed Design"についても同様に実行します(終了コード 3 の場合は"Detailed Rules"を試してください。これは同じセクションに対するデザイン標準での名称です)。 各 ADR のステータスはbash .claude/scripts/adr-status.sh <ADR ids>で確認し、その後、Decision セクションと Consequences セクションを確認します。 - **
standard:**同じ GDD セクションを確認します。ADR セクションは、重要な ADR に限って確認します(adr-status.shのレイヤー列が Foundation、またはレイヤーの記載がないもの)。 - **
minimal:**確認対象はありません。ストーリーの受け入れ基準が仕様です。
すべてのティアで、docs/architecture/control-manifest.md が存在する場合は、その Manifest Version 行を記録してください。
フェーズ 3:各基準を検証する
受け入れ基準を一つずつ確認します。
- **確認して判定:**基準に記載されたファイルが存在すること、基準に記載されたテストファイルが存在すること(「テストファイルあり」と報告し、「テスト合格」とは報告しないでください。ここではテストを実行しません)。ゲームプレイコード内にある、データファイルに置くべき数値リテラル。コードルート内にある、ローカライズファイルに置くべきプレイヤー向け文字列(
.claude/docs/code-root-resolution.mdに従ってルートを特定してください。特定できない場合は、ヒット数をゼロとせず、「NOT ASSESSED — code root unresolved」と報告してください)。 - **質問して確認:**動作(「プレイヤーは…のときダメージを受ける」など)、感触、パフォーマンスに関する基準。コードを読んだだけで合格としてはいけません。コードに書かれているのは期待される動作であり、ビルドでの実際の動作ではありません。質問 1 件あたり最大 4 項目まで:「Does [criterion]?」選択肢:Yes — passes / No — fails / Not tested yet。
Not tested yetは UNTESTED であり、誰かが確認するまでは判定は最良でも NOT ASSESSED のままです。 - **画面上で確認:**表示内容に関する基準は、
production/qa/evidence/[story-slug]/([story-slug]は.mdを除いたストーリーファイル名)に保存され、実際に開いて確認した画像で裏付けます。開いていない画像について説明してはいけません。チェックポイントのRun result: OBSERVED — <text>は/dev-storyによる説明であり、その旨を明示して引用してください。 - フルプレイテストが必要:
DEFERRED — requires playtest sessionとします。これはブロッカーにはなりません。
次に各基準を、それを裏付けるもの(テストルート内のテスト、「Yes — passes」、または保存された画像)に対応付けます。
| Criterion | Covered by | Status |
|-----------|------------|--------|
| AC-1: [text] | tests/unit/[system]/[file]::[test] | COVERED |
| AC-2: [text] | production/qa/evidence/[slug]/01-[what].png | COVERED |
| AC-3: [text] | — | UNTESTED |
未テストの基準はフェーズ 1 の表に従ってエスカレーションします。基準線より上はブロッキング、下は参考扱いとし、Completion Notes に「Untested criteria: [AC-N list]」として記載します。
フェーズ 4:テストの証拠と実行結果
ストーリーのタイプに応じて、フェーズ 1 のゲートレベルで確認します。qa.level によって免除されるチェックは省略し、その旨を記載します:Test evidence: waived at qa.level minimal。
- **ロジック:**ストーリーの「Test Evidence」セクションに記載された正確なパス、または
tests/unit/[system]/以下の任意の場所。 - **インテグレーション:**同様に
tests/integration/[system]/以下、またはproduction/qa/playtests/にある、このストーリーを名前で示すプレイテスト記録(/playtest-reportはここに記録を書き込みます)。 - **UI:**UI ストーリーは、変更した各画面の保存済みスクリーンショットが
production/qa/evidence/以下にあれば満たされます。証拠ドキュメントや承認は不要です。 - **ビジュアル/操作感:**スクリーンショットが必要です。また、ビジュアル/操作感のストーリーには承認も必要です:
production/qa/evidence/[story-slug]-evidence.mdにあるすべての承認行が[x] Approvedであること(1 人がすべての役割に署名してもかまいません)。 - 設定/データ:
production/qa/smoke-*.mdのレポートが必要です。ない場合:「スモークチェックレポートが見つかりません。/smoke-checkを実行してください。」 - **タイプなし:**参考情報:「Story Type が宣言されていません。ストーリーヘッダーに
Type:を追加してください。」
不足項目はゲートレベルのギャップです。BLOCKING は COMPLETE を停止させ、ADVISORY は注記に記載します。不足しているものと、その配置先を明記してください。画像が添付されていない証拠ドキュメントは証拠になりません。チェック内容の記述は主張にすぎません。
証拠はコードより古いですか? 保存済み画像については、bash .claude/scripts/review-receipts.sh check production/qa/evidence/[story-slug]/stamp.txt を実行します。CHANGED: または GONE: の各ファイルについて:「[file] は証拠の取得後に変更されています — 再取得してください。」RECEIPT: NONE の場合:「スタンプがありません — 証拠がコードより古いかどうかは判断できません」。これらの行を報告してください。判定結果が変わることはありません。
実行結果、その他すべてのタイプ。 /dev-story チェックポイント(Current task がこのストーリーを示している場合のみ)またはストーリーの Completion Notes から Run result: の行を取得します。パスを伴う OBSERVED は記録します。N/A — <reason> は、観察できるものがない理由を説明している場合のみ受け入れます(「ロジックのストーリーです」は該当しません)。画面上の項目が受け入れ基準に記載されているストーリーで NOT VERIFIED の場合は、ゲートレベルのギャップです。行がない場合は参考情報として、「ビルドを起動して確認したことを確認してください」と記載します。保存済み画像がない状態で、画面上の受け入れ基準に対してユーザーが「はい — 合格」と回答しても、それは観察ではなく主張です。ゲートレベルのギャップとなります。
フェーズ 5:逸脱とスコープ
ティアに応じて実行します(minimal では 1 と 3 を省略します)。
- GDD ルール(
full;standardでは必須セクション):変更されたファイルを検索し、現在の GDD テキストと TR 要件で使われている名称を確認します。 - **マニフェスト:**ストーリーの
Manifest Versionがマニフェストのバージョンより古い場合は ADVISORY:「マニフェスト v[story] に基づいて記述されています。現在は v[current] です — 確認するには/story-readinessを実行してください」。マニフェストがない場合は省略します。ストーリーのManifest-Note:行は、記載どおりに逸脱事項へ引き継ぎます。 - ADR の制約(
full;standardでは重要な ADR):ADR の Decision またはマニフェストで禁止されているパターンを検索します。 - 変更されたファイル内のハードコード値。
- **スコープ:**ストーリーの
## Filesに記載されたファイルと、変更されたコードおよびテストファイル(git status --porcelain)を照合します。リストに記載されていない変更ファイルは OUT OF SCOPE です。ストーリーに## Filesセクションがない場合、Current task がこのストーリーを示していればチェックポイントの Files in progress を使用します。それ以外の場合はScope: NOT ASSESSED — the story lists no filesと報告します。作業ツリーがクリーンな場合はScope: not checked — no uncommitted changes to compareと報告します。
各逸脱は、BLOCKING(GDD または ADR に矛盾する)、ADVISORY(逸脱しているが同じように動作する。判断はユーザーに委ねる)、または OUT OF SCOPE(参考情報)です。事実として記載し、判断はユーザーに委ねます。
フェーズ 6:レビューゲート
上記の review_gate 行を読んでください。
skill-gates=skip: エージェントは使用しません。QL-TEST-COVERAGE skipped — [Solo | Lean] modeとLP-CODE-REVIEW skipped — [Solo | Lean] modeを記録してください。leanモードでは、次のように尋ねます:「実装したファイルに対して/code-reviewを実行しましたか?」選択肢:はい — 合格した、または提案付きで承認された / いいえ — このストーリーではレビューを省略します / いいえ — スプリントの締めくくりまでに実行します。回答を Reviewed by に設定します。skill-gates=run:references/review-gates.mdと.claude/docs/director-gates.mdを読み、両方のゲートを今すぐ実行してください。スキップする場合は、読み込まないでください。
Reviewed by を空欄にしてはいけません。LP-CODE-REVIEW を実行した場合は lead-programmer、lean モードで「はい」と答えた場合は /code-review (you said you ran it; not verified here)、solo モードで「いいえ」と答えた場合、および実装ファイルがまだ存在しない場合は self, no independent review とします。
フェーズ 7:報告、判定、クローズ
## Story Done: [title]
**Story**: [path] · **Type**: [type] · **Date**: [today]
### Acceptance Criteria: [X/Y passing]
- [x] [criterion] — [how verified]
- [ ] [criterion] — FAILS: [reason]
- [?] [criterion] — DEFERRED: requires playtest
### Traceability
[the Phase 3 table]
### Test Evidence
**Required**: [what the type needs at this qa.level, or "waived at qa.level minimal"]
**Found**: [YES — path | NO — BLOCKING | NO — ADVISORY]
### Deviations
[NONE, or each: BLOCKING / ADVISORY / OUT OF SCOPE — description — reference]
### Review
**Reviewed by**: [value]
### Verdict: [COMPLETE | COMPLETE WITH NOTES | NOT ASSESSED | BLOCKED]
判定は、最初に一致したものを適用します:
- BLOCKED: 基準に不合格がある、または BLOCKING のギャップや逸脱が残っている。
- NOT ASSESSED: 基準を評価できなかった場合。該当するのは、観測可能な成果が定義されていない、ユーザーが「まだテストしていない」と回答した、レビューゲートが NOT ASSESSED を返し、その入力が提供されていない、エビデンスが存在するが読み取れない、または逸脱の判断基準となる GDD や ADR が存在しない場合です。それぞれを挙げ、解決に必要なことを示してください。2 つの合格判定より優先され、不合格を覆い隠すことはありません。
- COMPLETE WITH NOTES: すべての基準に合格しているか、DEFERRED であり、助言項目が列挙されている。情報行は助言項目ではありません。エビデンススタンプ行、スプリントファイルがないこと、実行結果によって COMPLETE が COMPLETE WITH NOTES に変わることはありません。
- COMPLETE: すべての基準に合格し、助言項目がない。
その後、何かを書く前に、次のように尋ねてください:「どのように進めますか?」選択肢:
ストーリーをクローズする — Complete にしてメモを記録する(推奨) / クローズし、助言対象の逸脱を技術的負債として記録する / まだクローズしない — 先に修正します / 逸脱を承知のうえでクローズする。BLOCKED または NOT ASSESSED の場合は、「まだクローズしない」を推奨し、変更が必要な点を列挙してください。このようなストーリーのクローズは scope_changes の判断です。automation_always_ask 行にこれが記載されている場合は、ユーザー自身の依頼がきっかけであっても、すべての自動化モードで確認してください。クローズを明示的に選択した場合にのみ書き込んでください。
クローズ時:
bash .claude/scripts/md-section.sh set-field <story> Status Completeを実行し、続けてset-field <story> "Last Updated" <YYYY-MM-DD> --after Statusを実行します。- ファイル編集を使って、ストーリーの末尾に追加してください。シェルコマンドは使用しないでください(シェルによる書き込みは、プロジェクトの書き込みチェックをスキップします)。
## Completion Notes **Completed**: [date] **Criteria**: [X/Y passing] ([deferred items]) **Deviations**: [None, or the advisory ones] **Test Evidence**: [path, or "waived at qa.level minimal", or "none required"] **Reviewed by**: [value] - 「クローズし、技術的負債として記録する」を選択した場合は、
references/tech-debt-row.mdを読み、助言対象の逸脱ごとに1行追加してください。 production/sprint-status.yamlが存在する場合、このストーリーのエントリをstatus: doneおよびcompleted: [date]に設定し、トップレベルのupdatedを今日の日付に更新してください。クローズの回答には、この作業も含まれます。- 推奨コミットを表示してください:
git add [the changed code and test files] [story path]およびgit commit -m "feat: [story title] ([TR-ID])"。
「まだクローズしない」の場合: ストーリーファイルを変更しないでください。ユーザーが指摘した内容を列挙してください。不合格の基準を自分で修正してはいけません。報告し、どうするかを尋ねてください。
フェーズ 8:次のストーリー、チェックポイント、終了
次のストーリー。 production/sprints/ にスプリント計画がない場合(workflow: minimal の場合は常に該当します):終了後に bash .claude/scripts/story-status.sh を実行し、このストーリーの新しいステータスを反映します。未完了のストーリーがルート順に表示されるので、順番を並べ替えないでください。次のストーリーは、最初の In Review ストーリー(最初の IN_REVIEW 行)、それがなければ最初の In Progress ストーリー、さらにそれもなければ最初の Ready または Not Started ストーリー(TODO)です。
### Next Up
**[Story NNN: title]** — [one line]
Run `/story-done [path]` to close it (In Review) — else `/dev-story [path]` to implement it.
上記の workflow 行が minimal の場合、/story-readiness の行は選択肢としても含め、いっさい表示しないでください。このパスでは使用しません。workflow: standard または full でスプリント計画がない場合は、「まず /story-readiness [path] を実行してください。」を追加します。
COMPLETE N of Nのみの場合:すべてのストーリーが構築されています。ビルドをプレイして違和感がある部分を記録する、/create-storiesを使ってブリーフからストーリーを追加する、またはゲームがブリーフの範囲を超えた場合は/settingsを使ってmodes.rigorを引き上げることを提案します。BLOCKED、OTHER、NO_STATUSの各行のみが残っている場合:次に取り組むものはなく、ビルド順序は完了していません。各ストーリーのブロッカー、Draft、またはno statusを明記します。- この分岐では、スプリントがないため、Sprint Close-Out Sequence は絶対に表示しないでください。
スプリント計画がある場合:references/sprint-next.md を読みます。
チェックポイントは、終了したかどうかにかかわらず、すべての判定で記録します。ブロックを bash .claude/scripts/session-state.sh checkpoint にパイプし、古いブロックを置き換えます。
**Updated:** [date]
**Branch:** `[current git branch]`
**Current task:** /story-done — [story path]: [verdict], [closed | left open]
**Next step:** [the Next Up command, or the fix the verdict named]
**Blocked on:** [nothing, or what blocked the verdict]
**Files in progress:** none
**Open questions:** [tech debt logged: N items, or none]
実行の最後の返信はこのブロックで終わります(以前に表示している場合も、もう一度表示します)。
Verdict: [COMPLETE | COMPLETE WITH NOTES | NOT ASSESSED | BLOCKED] — [story path]
Story: [closed — Status: Complete | left open — Status: [status]]
Review: [Reviewed by value; the gates' skip notes]
Next step: [/dev-story [path] | /story-done [path] | the fix | play the build]