
milestone-review
Milestone progress review — completeness, quality metrics, risk, go/no-go recommendation. At checkpoints or before a deadline.
- Installs
- 472
- Last 24h
- +23
- Trending rank
- #5237
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/donchitos/claude-code-game-studios --skill milestone-review- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads milestone-review automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
!bash "${CLAUDE_SKILL_DIR}/../../hooks/yaml-helper.sh" resolve_config --keys review_mode,automation,workflow
Resolved above — use as-is; --review overrides review_mode for this run. No
block → defaults in .claude/docs/config-resolution.md.
Milestone Review
Insufficient input — check this before producing any report
If the inputs this skill needs do not exist, the answer is "could not run" — not a filled-in report. Check first, and stop if the check fails.
- List the inputs this skill reads (data files, prior reports, profiler output, test results, registries, source code).
- For each, record
FOUNDorABSENT— not "assumed present". - If any input required for a section is ABSENT, that section is
NOT ASSESSED — NO DATA. Do not estimate it, do not infer it from an adjacent artifact, and do not leave a mandated cell to be filled by whoever reads the template next. - If every required input is ABSENT, stop and report
NOT ASSESSED — NO DATAas the whole verdict, naming what was missing and which skill produces it.
A verdict of NOT ASSESSED is a success. It is the correct, useful answer to
"what does the data say?" when there is no data. The failure mode this prevents is
specific: a report whose verdict enum has no "could not run" state produces
false clean passes — an asset audit returning COMPLIANT on a project with no
assets and no standards, or a performance profile reporting ">99% headroom against
a 16.67ms budget" with zero profiler data and no budget ever set.
Absence of evidence is never evidence of absence. A scan that finds no matches because there are no files to scan has not verified anything. Say which of the two happened — a reader cannot tell from a green result.
Phase 0: Parse Arguments
Extract the milestone name (current or a specific name).
See .claude/docs/director-gates.md for the full check pattern. Individual gate definitions live in .claude/docs/director-gates/[gate-id].md — the spawned agent reads its own gate file; do not read it in the parent session.
Every AskUserQuestion call follows .claude/docs/automation-modes.md
(collaborative asks always · guided major-only · autonomous logs and proceeds;
automation_always_ask categories always prompt).
Phase 1: Load Milestone Data
Read the milestone definition from production/milestones/ if it exists. If the
argument is current, use the most recently modified milestone file.
No skill writes
production/milestones/— definitions are authored by hand from.claude/docs/templates/milestone-definition.md, so most projects have none. When the directory is absent or empty, say so and review against the sprint reports alone; do not fabricate a definition. Take care withcurrent: this skill writes its own output as[milestone-name]-review.md, so a most-recently-modified match can be a previous review rather than a definition. Skip files ending-review.mdwhen selecting.
Gather the sprint reports for sprints within this milestone from
production/sprints/. Establish the denominator (glob them, count N), then
scan the sections a milestone review actually aggregates rather than reading each
report whole:
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
These alternates are the headings
/sprint-planemits (## Sprint Goal, not## Goal) — not what a milestone review might expect. A pattern that matches only one real heading still returns a non-zero count, so the zero-match escape hatch below never fires and the review aggregates a fraction of each report while reporting full coverage.
Full-read a single sprint report when its scanned sections point outside themselves, or when it matched nothing — a zero-match report predates the template and must be read, never silently dropped from the milestone's history. Report any sprint that contributed nothing: a milestone summary that quietly omits a sprint understates the work and the slippage both.
Blocked stories — the Blocked table and the blocked story count passed to
PR-MILESTONE — are not in the sprint reports' scanned sections. Read them where
they are recorded: the status: blocked stories in production/sprint-status.yaml
(with their blocker field) and, for stories outside that sprint, one grep:
Grep pattern="^> \*\*Status\*\*: Blocked|BLOCKED:" glob="production/epics/**/story-*.md" output_mode="content"
Each blocked story goes in the Blocked table under the feature its epic folder
implements, with its blocker (the yaml blocker field or the story's BLOCKED:
note). With no story files and no sprint-status.yaml, the Blocked table and the
blocked story count are NOT ASSESSED — NO DATA, not zero.
Phase 2: Scan Codebase Health
- Scan for
TODO,FIXME,HACKmarkers that indicate incomplete work - Count open bugs by severity for Quality Metrics from
production/qa/bugs/(one grep of the**Severity**and**Status**lines, as/bug-triagedoes); with no bug files, the bug lines areNOT ASSESSED — NO DATA, not zero - Check the risk register at
production/risk-register/if it exists (hand-authored from.claude/docs/templates/risk-register-entry.md; no skill writes it, so absence is normal — note it rather than skipping risk assessment silently)
Phase 3: Generate the Milestone Review
# 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 |
|---|--------|-------|----------|
Phase 3b: Producer Risk Assessment
Review mode check — apply before spawning PR-MILESTONE:
solo→ skip. Note: "PR-MILESTONE skipped — Solo mode." Present the Go/No-Go section without a producer verdict.lean→ skip (not a PHASE-GATE). Note: "PR-MILESTONE skipped — Lean mode." Present the Go/No-Go section without a producer verdict.full→ spawn as normal.
Before generating the Go/No-Go recommendation, spawn producer via Agent using gate PR-MILESTONE (.claude/docs/director-gates/pr-milestone.md).
Pass: milestone name and target date, current completion percentage, blocked story count, velocity data from sprint reports (if available), list of cut candidates.
Present the producer's assessment inline within the Go/No-Go section. The producer's verdict (ON TRACK / AT RISK / OFF TRACK) informs the overall recommendation.
If OFF TRACK, use AskUserQuestion before generating the recommendation:
- Prompt: "Producer verdict: OFF TRACK. The milestone is in jeopardy. This review will recommend NO-GO. How do you want to proceed?"
- Options:
[A] Accept NO-GO — generate the full review with that recommendation[B] Override to CONDITIONAL GO — I'll document the accepted risks myself[C] Stop — I want to address blockers before generating the review
If AT RISK, use AskUserQuestion:
- Prompt: "Producer verdict: AT RISK. Milestone may slip. How should the Go/No-Go section be framed?"
- Options:
[A] CONDITIONAL GO — include producer's conditions in the review[B] NO-GO — conditions cannot be met in time[C] GO — I accept the risk and want to proceed
If NOT ASSESSED: name the missing input — it is not ON TRACK, and never recommend GO on it. Supply the input and re-run PR-MILESTONE, or recommend NOT ASSESSED — or CONDITIONAL GO / NO-GO where the review's own findings call for one (the rank in .claude/docs/director-gates.md).
Do not issue a GO against an OFF TRACK verdict; issue CONDITIONAL GO only if the user explicitly selects [B] above.
Phase 4: Save Review
Present the review to the user.
Ask: "May I write this to production/milestones/[milestone-name]-review.md?"
If yes, write the file, creating the directory if needed. Verdict: COMPLETE — milestone review saved.
If no, stop here. Verdict: BLOCKED — user declined write.
Phase 5: Next Steps
- Run
/gate-checkfor a formal phase gate verdict if this milestone marks a development phase boundary. - Run
/sprint-planto adjust the next sprint based on the scope recommendations above (atworkflow: minimal, which has no sprints, adjust the brief's build order instead).
FAQ
What does the milestone-review skill do?
Milestone progress review — completeness, quality metrics, risk, go/no-go recommendation. At checkpoints or before a deadline.
How do I install milestone-review?
Run npx skills add https://github.com/donchitos/claude-code-game-studios --skill milestone-review in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/milestone-review/ (personal) or .claude/skills/milestone-review/ (project).
Which AI agents can use milestone-review?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is milestone-review safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains milestone-review?
It is published by donchitos in donchitos/claude-code-game-studios. It has 472 recorded installs.
More from donchitos/claude-code-game-studios
balance-check
donchitos/claude-code-game-studios
Find balance outliers, broken progressions, degenerate strategies, economy imbalances in formulas and data. 'Check game balance'.
playtest-report
donchitos/claude-code-game-studios
Structured playtest report template, or turn existing playtest notes into structured feedback.
brainstorm
donchitos/claude-code-game-studios
Guides the user through finding and choosing a game concept. Use when the user wants game ideas, a new concept, a game jam idea, or to explore other directions, including dropping the current idea and starting over.
art-bible
donchitos/claude-code-game-studios
Author the Art Bible — visual identity gating asset production. Run before /map-systems.
team-narrative
donchitos/claude-code-game-studios
Orchestrate the narrative team — narrative-director, writer, world-builder, level-designer — for story, world lore, narrative-driven levels.
design-review
donchitos/claude-code-game-studios
Reviews one design document for completeness, internal consistency, implementability, and design standards. Before handing to programmers.
Popular code quality & workflow skills
grill-me
mattpocock/skills
A relentless interview to sharpen a plan or design.
improve-codebase-architecture
mattpocock/skills
Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.
handoff
mattpocock/skills
Compact the current conversation into a handoff document for another agent to pick up.
domain-modeling
mattpocock/skills
Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR.
codebase-design
mattpocock/skills
Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.
diagnosing-bugs
mattpocock/skills
Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.