sprint-status について
スプリント計画とストーリーの状態から、進捗の簡潔なスナップショットを作成する読み取り専用スキルです。状況把握向けで、ファイルは変更しません。
主な機能
- 01スプリント進捗の要約
- 02ストーリー状態マーカーの確認
- 03残り日数とバーンダウンの算出
- 04停滞・欠落ストーリーの警告
- 05提案は最大1件
活用シーン
- 01スプリントの進捗を素早く確認
- 02ブロック中または停滞中の作業を特定
- 03ビルド順の次のストーリーを確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ donchitos/ claude-code-game-studios --skill sprint-statusインストール後、Claude Code で/sprint-statusを入力して読み込まれたか確認します。
詳細
!bash "${CLAUDE_SKILL_DIR}/../../hooks/yaml-helper.sh" resolve_config --keys story_granularity,workflow
スプリント状況
これは迅速な状況把握の確認であり、スプリントレビューではありません。現在のスプリント計画とストーリーファイルを読み込み、ステータスマーカーをスキャンして、30行未満の簡潔なスナップショットを作成します。詳細なスプリント管理には、/sprint-plan update または /milestone-review を使用してください。
このスキルは読み取り専用です。 変更を提案したり、ファイルへの書き込みを求めたりすることはなく、具体的な提案は最大1つです。
story_granularity — バーンダウンの読み取り粒度を設定します。coarse(デフォルト、rigor: minimal)では機能単位のまとまり、balanced(rigor: standard)ではタスク単位、fine ではAC 単位です。
1. スプリントを探す
引数: $ARGUMENTS(空欄の場合は現在のスプリントを使用)
- 引数が指定されている場合(例:
/sprint-status 3)、production/sprints/を検索し、sprint-003.md、sprint-03.md、sprint-3.mdなどに一致するファイルを探します(/sprint-planは3桁で書き込みます)。見つかったファイルを報告してください。 - 引数が指定されていない場合は、
production/sprints/で最終更新日時が最も新しいファイルを探し、現在のスプリントとして扱います。 production/sprints/が存在しないか、空の場合:workflow: minimalでは、設計上スプリントはありません — brief のビルド順が計画であり、ストーリーファイルがその内容を保持します。代わりに進捗を報告してから終了します:- 以下のリストは、このスキルを読む前に
.claude/scripts/story-status.shが出力したものです。未完了のストーリーを1行ずつ、ルートの順序(IN_REVIEW、IN_PROGRESS、次にTODO—ReadyまたはNot Startedのストーリー — のビルド順)で並べ、その後にBLOCKED、OTHER、NO_STATUS、COMPLETEの件数が続きます:
- 以下のリストは、このスキルを読む前に
!bash "${CLAUDE_SKILL_DIR}/../../scripts/story-status.sh"
2. 15行未満で、`COMPLETE` 行から `Build order: [N] of [M] stories complete` を出力します(`Complete` と `Done` のストーリーのみを数えます — `In Review` は未完了です)。続けて **Next**:最初の `IN_REVIEW`、`IN_PROGRESS`、または `TODO` 行にあるストーリーを示します。リストはすでに最新です。スクリプトを再実行せず、ストーリーファイルの順序も入れ替えないでください — `In Progress` の作業を続ける前に、`In Review` のストーリーを完了します。作業内容はすでに書き込まれています。`IN_REVIEW` には `/story-done [path]`、`IN_PROGRESS` または `TODO` には `/dev-story [path]` を推奨します。`BLOCKED` のストーリーがあれば、ブロッカーとともに名前を挙げてください。そこが Next になることはありません。
3. すべてのストーリーが `Complete`(または `Done`)の場合 → 「Build order done: [M] of [M] stories complete.」と出力します。次の進め方を3つ提示します。ビルドをプレイする、`/create-stories` で brief から次のストーリーを追加する、またはゲームが1ページの brief では足りなくなっている場合は `/settings` で `modes.rigor` を上げる。
4. `STORIES none` — ストーリーファイルがまったくない場合 → 「No stories yet. Run `/create-stories` to turn the brief's build order into stories.」と出力します。
5. `IN_REVIEW`、`IN_PROGRESS`、`TODO` の行がなく、`COMPLETE` の件数が合計に満たない場合 — 未完了のストーリーはすべて `BLOCKED`、`OTHER`(`Draft` など)、または `NO_STATUS` です。**Next はなく**、ビルド順も**完了していません**。完了したと言ってはいけません。`Build order` 行を出力してから、各 `BLOCKED` ストーリーをブロッカーとともに示します。ブロッカーはストーリーファイルから読み取ります。通常は `BLOCKED:` の注記に記載されています。その他のストーリーは、記載どおりのステータスとともに示します。次の手順を1つ提案します。最初のブロッカーに必要な対応、またはそれに該当しない場合は、最初の `Draft` もしくはステータス未設定のストーリーを完了し、Status を `Ready` に設定します。
standardまたはfullの場合:「No sprint files found. Start a sprint with/sprint-plan new.」と報告して終了します。
スプリントファイルを最初から最後まで読みます。次の情報を抽出します:
- スプリント番号と目標
- 開始日と終了日
- 優先度(Must Have/Should Have/Nice to Have)、担当者、見積もりを含む、すべてのストーリーまたはタスクの項目
2. 残り日数の計算
今日の日付とスプリントファイルの終了日を使用して、次を計算します。
- スプリントの合計日数(終了日 − 開始日)
- 経過日数
- 残り日数
- 経過時間の割合
スプリントファイルに明示的な日付が含まれていない場合は、「スプリントの日付が見つからないため、バーンダウン評価をスキップしました。」と記載します。
3. ストーリーのステータスを確認
最初に、production/sprint-status.yaml があるか確認します。
存在する場合は、直接読み取ります。これが正式な情報源です。
各ストーリーの status と、設定されている場合は priority、owner、blocker を抽出します。これらはステータステーブルの各列に対応します。Markdown のスキャンは不要です。
スプリント計画を再解析する代わりに、sprint、goal、start、end の各フィールドを使用します。
sprint-status.yaml が存在しない場合(以前の形式のスプリント、または初回セットアップ時)は、Markdown のスキャンにフォールバックします。
- 項目にストーリーファイルのパスが記載されている場合は、そのファイルが存在するか確認します。 ファイルを読み取り、ステータスマーカー(DONE、COMPLETE、IN PROGRESS、 BLOCKED、NOT STARTED、大文字と小文字は区別しません)を探します。
- 項目にファイルパスがない場合(スプリント計画内のインラインタスク)は、 次にスプリント計画自体で、その項目の横にあるステータスマーカーを探します。
- ステータスマーカーが見つからない場合は、NOT STARTED に分類します。
- ファイルが参照されているものの存在しない場合は、MISSING に分類してその旨を記載します。
フォールバックを使用した場合は、出力の末尾に次の注記を追加します。
「⚠ sprint-status.yaml が見つからないため、ステータスは Markdown から推定しました。/sprint-plan update を実行して生成してください。」
任意(簡易確認のみ。詳細なスキャンは行わない):実装の兆候を確認するため、コードのルートディレクトリを grep して、ストーリーのシステムスラッグに一致するディレクトリ名またはファイル名を探すことができます。これは手がかりであり、確定的なステータスではありません。
古いストーリーの検出
すべてのストーリーのステータスを収集した後、各 IN PROGRESS ストーリーが古くなっていないか確認します。
- ストーリー群全体を対象に grep を1回だけ実行して日付を特定します。ストーリーごとに読み取る必要はありません。
日付は1行で確認でき、日付を探すために進行中のストーリーをすべて開くことが、この確認のコストのすべてだからです。
この1つのパターンですべてのフィールド名の表記違いに対応できます。一致するものがないストーリーには日付がありません。これは古い状態とは異なるため、「タイムスタンプ未記録」と報告し、経過日数は計算しません。Grep pattern="\*{0,2}(Last Updated|Updated|last-updated|updated_at)\*{0,2}[[:space:]]*:" glob="production/epics/**/story-*.md" output_mode="content"
\*{0,2}の囲みが、これを機能させている理由です。/create-storiesは> **Last Updated**: …を出力するため、単語の直後に:が続くことを条件とするパターンでは、 どのストーリーにも一致しません。「一致なし = タイムスタンプ未記録」という直前のルールと組み合わさることで、 この失敗は表面化しません。すべての進行中ストーリーがタイムスタンプ未記録と報告され、 古いストーリーの検出は一度も機能しなくなります。単純なUpdated:アンカーは使用しないでください。
- その日付から今日までの日数を計算します。
- 日付が4日より前の場合は、そのストーリーに STALE のフラグを付けます。(4日というしきい値は週末を考慮したものです。金曜日に最後に更新されたストーリーは、水曜日までは古い状態として扱われません。)
- ストーリーファイルに日付フィールドが見つからない場合は、「タイムスタンプなし — 古さを確認できません」と記載します。
- ストーリーに参照ファイルがない場合は、「インラインタスク — 古さを確認できません」と記載します。
STALE のストーリーは出力テーブルに含め、「対応が必要」セクション(フェーズ5の出力形式を参照)にもまとめます。
古いストーリーのエスカレーション:IN PROGRESS のストーリーに STALE のフラグが付いた場合(4日以上進捗がない場合)、完了率が通常の順調範囲内であっても、バーンダウン判定を少なくとも At Risk に引き上げます。このエスカレーション理由を次の形式で記録します。「At Risk — [S] 件のストーリーが古い:[タイトル]([D] 日)[, …]」。[S] は STALE のストーリー数を表し、各ストーリーには個別の [D] を付けます。これは、それぞれの Last Updated 日付からの日数です(最長日数でも平均日数でもありません)。
4. バーンダウン評価
次の項目を算出します。
- 完了タスク(DONE または COMPLETE)
- 進行中のタスク(IN PROGRESS)
- ブロックされているタスク(BLOCKED)
- 未着手のタスク(NOT STARTED または MISSING)
- 完了率:(完了数 / 合計数)* 100
完了率と経過時間の割合を比較して、バーンダウンを評価します。
- 順調:完了率が経過時間の割合の10ポイント以内、またはそれ以上
- リスクあり:完了率が経過時間の割合を10〜25ポイント下回っている
- 遅延:完了率が経過時間の割合を25ポイント超下回っている
日付が確認できない場合は、バーンダウン評価を省略し、「順調 / リスクあり / 遅延:不明 — スプリントの日付が見つかりません。」と報告します。
5. 出力
出力は簡潔にしてください。ストーリーのステータス表は必須です。省略しないでください。全体を50行未満にすることを目指し、特筆すべき点がなければ「顕在化しているリスク」セクションは省略してください。次の形式を使用します。
## Sprint [N] Status — [Today's Date]
**Sprint Goal**: [from sprint plan]
**Days Remaining**: [N] of [total] ([% time consumed])
### Progress: [complete/total] tasks ([%])
| Story / Task | Priority | Status | Owner | Blocker |
|----------------------|------------|-------------|---------|----------------|
| [title] | Must Have | DONE | [owner] | |
| [title] | Must Have | IN PROGRESS | [owner] | |
| [title] | Must Have | BLOCKED | [owner] | [brief reason] |
| [title] | Should Have| NOT STARTED | [owner] | |
### Attention Needed
| Story / Task | Status | Last Updated | Days Stale | Note |
|----------------------|-------------|----------------|------------|----------------|
| [title] | IN PROGRESS | [date or N/A] | [N days] | [STALE / no timestamp — cannot check staleness / inline task — cannot check staleness] |
*(Omit this section entirely if no IN PROGRESS stories are stale or have timestamp concerns.)*
### Burndown: [On Track / At Risk / Behind]
[1-2 sentences. If behind: which Must Haves are at risk. If on track: confirm
and note any Should Haves the team could pull.]
### Must-Haves at Risk
[List any Must Have stories that are BLOCKED or NOT STARTED with less than
40% of sprint time remaining. If none, write "None."]
### Emerging Risks
[Any risks visible from the story scan: missing files, cascading blockers,
stories with no owner. If none, write "None identified."]
### Recommendation
[One concrete action, or "Sprint is on track — no action needed."]
6. 迅速なエスカレーションルール
出力前に次のルールを適用し、該当する場合はステータス表より上の出力先頭にフラグを配置してください。
重大フラグ — Must Have ストーリーが BLOCKED または NOT STARTED で、スプリントの残り時間が40%未満の場合:
SPRINT AT RISK: [N] Must Have stories are not complete with [X]% of sprint
time remaining. Recommend replanning with `/sprint-plan update`.
完了フラグ — すべての Must Have ストーリーが DONE の場合:
All Must Haves complete. Team can pull from Should Have backlog.
ストーリー欠落フラグ — 参照されているストーリーファイルが存在しない場合:
NOTE: [N] story files referenced in the sprint plan are missing.
Run `/story-readiness sprint` to validate story file coverage.
協調プロトコル
このスキルは読み取り専用です。ディスク上のファイルから確認できる事実を報告します。
- スプリント計画は更新しません
- ストーリーのステータスは変更しません
- スコープの削減は提案しません(その場合は
/sprint-plan updateを使用します) - 1回の実行につき、提案は最大1つです
特定のストーリーの詳細を確認するには、ユーザーはストーリーファイルを直接読むか、/story-readiness [path] を実行できます。
スプリントの再計画には、/sprint-plan update を使用してください。
スプリント終了時の振り返りには、/retrospective を使用してください。