mcpField
S
story-done

story-done

github.com/donchitosテスト・品質28.5k450 回インストール1 週間前に更新
リポジトリ

story-done について

story-done は、ゲーム開発のストーリーをレビューして完了処理する Claude スキルです。証拠やプロジェクト文書に照らして受け入れ条件を確認し、差異を報告したうえで、ユーザーの承認後にのみ完了として記録します。

主な機能

  1. 01証拠に基づく受け入れ条件の確認
  2. 02条件と証拠の対応表作成
  3. 03テスト証拠と実行結果のレビュー
  4. 04範囲や仕様からの逸脱の報告
  5. 05承認後のストーリーとスプリント状態の更新
  6. 06毎回のセッションチェックポイント記録

活用シーン

  1. 01完了処理前の受け入れ条件の確認
  2. 02ゲーム開発ストーリーのテスト証拠レビュー
  3. 03範囲外の変更や仕様逸脱の特定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/donchitos/claude-code-game-studios --skill story-done

インストール後、Claude Code で/story-doneを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

CONTRACT.md
references/
review-gates.md
sprint-next.md
tech-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> の組を取り除いたものがストーリーのパスです。入力がない場合:

  1. production/session-state/active.md のチェックポイントにある Current task 行がストーリーを示している場合は、そのストーリー。
  2. それ以外の場合は、進行中のストーリーを確認します:bash .claude/scripts/story-facts.sh --all を実行し、状態が IN_REVIEW または IN_PROGRESS の行を対象とします。複数ある場合は、「クローズするストーリーを選んでください」と質問し、ストーリーごとに選択肢を提示します。
  3. 該当するものがない場合は、パスを尋ねます。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: minimalqa.level: standardqa.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 を省略します)。

  1. GDD ルール(full;standard では必須セクション):変更されたファイルを検索し、現在の GDD テキストと TR 要件で使われている名称を確認します。
  2. **マニフェスト:**ストーリーの Manifest Version がマニフェストのバージョンより古い場合は ADVISORY:「マニフェスト v[story] に基づいて記述されています。現在は v[current] です — 確認するには /story-readiness を実行してください」。マニフェストがない場合は省略します。ストーリーの Manifest-Note: 行は、記載どおりに逸脱事項へ引き継ぎます。
  3. ADR の制約(full;standard では重要な ADR):ADR の Decision またはマニフェストで禁止されているパターンを検索します。
  4. 変更されたファイル内のハードコード値。
  5. **スコープ:**ストーリーの ## 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]

判定は、最初に一致したものを適用します:

  1. BLOCKED: 基準に不合格がある、または BLOCKING のギャップや逸脱が残っている。
  2. NOT ASSESSED: 基準を評価できなかった場合。該当するのは、観測可能な成果が定義されていない、ユーザーが「まだテストしていない」と回答した、レビューゲートが NOT ASSESSED を返し、その入力が提供されていない、エビデンスが存在するが読み取れない、または逸脱の判断基準となる GDD や ADR が存在しない場合です。それぞれを挙げ、解決に必要なことを示してください。2 つの合格判定より優先され、不合格を覆い隠すことはありません。
  3. COMPLETE WITH NOTES: すべての基準に合格しているか、DEFERRED であり、助言項目が列挙されている。情報行は助言項目ではありません。エビデンススタンプ行、スプリントファイルがないこと、実行結果によって COMPLETE が COMPLETE WITH NOTES に変わることはありません。
  4. COMPLETE: すべての基準に合格し、助言項目がない。

その後、何かを書く前に、次のように尋ねてください:「どのように進めますか?」選択肢: ストーリーをクローズする — Complete にしてメモを記録する(推奨) / クローズし、助言対象の逸脱を技術的負債として記録する / まだクローズしない — 先に修正します / 逸脱を承知のうえでクローズする。BLOCKED または NOT ASSESSED の場合は、「まだクローズしない」を推奨し、変更が必要な点を列挙してください。このようなストーリーのクローズは scope_changes の判断です。automation_always_ask 行にこれが記載されている場合は、ユーザー自身の依頼がきっかけであっても、すべての自動化モードで確認してください。クローズを明示的に選択した場合にのみ書き込んでください。

クローズ時:

  1. bash .claude/scripts/md-section.sh set-field <story> Status Complete を実行し、続けて set-field <story> "Last Updated" <YYYY-MM-DD> --after Status を実行します。
  2. ファイル編集を使って、ストーリーの末尾に追加してください。シェルコマンドは使用しないでください(シェルによる書き込みは、プロジェクトの書き込みチェックをスキップします)。
    ## 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]
    
  3. 「クローズし、技術的負債として記録する」を選択した場合は、references/tech-debt-row.md を読み、助言対象の逸脱ごとに1行追加してください。
  4. production/sprint-status.yaml が存在する場合、このストーリーのエントリを status: done および completed: [date] に設定し、トップレベルの updated を今日の日付に更新してください。クローズの回答には、この作業も含まれます。
  5. 推奨コミットを表示してください: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]

コメント