### Story Done
Works with
description: "End-of-story completion review. Reads the story file, verifies each acceptance criterion against the implementation, checks for GDD/ADR deviations, prompts code review, updates story sta
argument-hint: "[story-file-path] [--review full|lean|solo]"
allowed-tools: Read, Glob, Grep, Bash, Edit, AskUserQuestion, Task
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versionstory-doneExecute the skills CLI command in your project's root directory to begin installation:
Fetches story-done from Donchitos/Claude-Code-Game-Studios and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
Restart Cursor to activate story-done. Access via /story-done in your agent's command palette.
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
Submit your Claude Code skill and start earning
Automate repetitive workflows and reduce manual effort
Example
Generate reports, summarize documents, draft communications
Save 3-5 hours per week on routine tasks
Learn new skills, understand complex topics, get expert guidance
Example
Explain concepts, provide examples, suggest learning resources
Accelerate learning and skill development by 2x
Enhance output quality through reviews, suggestions, and refinements
Example
Review drafts, suggest improvements, catch errors
Improve work quality by 30-40% with less effort
0
total installs
0
this week
10.7K
GitHub stars
0
upvotes
Run in your terminal
0
installs
0
this week
10.7K
stars
| name | story-done |
| description | "End-of-story completion review. Reads the story file, verifies each acceptance criterion against the implementation, checks for GDD/ADR deviations, prompts code review, updates story status to Complete, and surfaces the next ready story from the sprint." |
| argument-hint | "[story-file-path] [--review full|lean|solo]" |
| user-invocable | true |
| allowed-tools | Read, Glob, Grep, Bash, Edit, AskUserQuestion, Task |
This skill closes the loop between design and implementation. Run it at the end of implementing any story. It ensures every acceptance criterion is verified before the story is marked done, GDD and ADR deviations are explicitly documented rather than silently introduced, code review is prompted rather than forgotten, and the story file reflects actual completion status.
Output: Updated story file (Status: Complete) + surfaced next story.
Resolve the review mode (once, store for all gate spawns this run):
--review [full|lean|solo] was passed → use thatproduction/review-mode.txt → use that valueleanSee .claude/docs/director-gates.md for the full check pattern.
If a file path is provided (e.g., /story-done production/epics/core/story-damage-calculator.md):
read that file directly.
If no argument is provided:
production/session-state/active.md for the currently active story.production/sprints/ and
look for stories marked IN PROGRESS.AskUserQuestion:
Read the full story file. Extract and hold in context:
TR-combat-001)2026-03-10)Type: field from the story header (Logic / Integration / Visual/Feel / UI / Config/Data)Also read:
docs/architecture/tr-registry.yaml — look up each TR-ID in the story.
Read the current requirement text from the registry entry. This is the
source of truth for what the GDD required — do not use any requirement text
that may be quoted inline in the story (it may be stale).docs/architecture/control-manifest.md header — extract the current
Manifest Version: date (used in Phase 4 staleness check)For each acceptance criterion in the story, attempt verification using one of three methods:
Glob for files the story said would be created.Bash.Grep for numeric literals in gameplay code
paths that should be in config files.Grep for player-facing strings in src/
that should be in localization files.AskUserQuestion)Batch up to 4 manual verification questions into a single AskUserQuestion call:
question: "Does [criterion]?"
options: "Yes — passes", "No — fails", "Not tested yet"
DEFERRED — requires playtest sessionAfter completing the pass/fail/deferred check above, map each acceptance criterion to the test that covers it:
For each acceptance criterion in the story:
Ask: is there a test — unit, integration, or confirmed manual playtest — that directly verifies this criterion?
tests/unit/ for a test file or function name that
matches the criterion's subject (use Glob and Grep)tests/integration/ similarlyAskUserQuestion
above with a "Yes — passes" answer, count that as a manual testProduce a traceability table:
| Criterion | Test | Status |
|-----------|------|--------|
| AC-1: [criterion text] | tests/unit/test_foo.gd::test_bar | COVERED |
| AC-2: [criterion text] | Manual playtest confirmation | COVERED |
| AC-3: [criterion text] | — | UNTESTED |
Apply these escalation rules:
For any ADVISORY untested criteria, add to the Completion Notes in Phase 7:
"Untested criteria: [AC-N list]. Recommend adding tests in a follow-up story."
Based on the Story Type extracted in Phase 2, check for required evidence:
| Story Type | Required Evidence | Gate Level |
|---|---|---|
| Logic | Automated unit test in tests/unit/[system]/ — must exist and pass | BLOCKING |
| Integration | Integration test in tests/integration/[system]/ OR playtest doc | BLOCKING |
| Visual/Feel | Screenshot + sign-off in production/qa/evidence/ | ADVISORY |
| UI | Manual walkthrough doc OR interaction test in production/qa/evidence/ | ADVISORY |
| Config/Data | Smoke check pass report in production/qa/smoke-*.md | ADVISORY |
For Logic stories: first read the story's Test Evidence section to extract the
exact required file path. Use Glob to check that exact path. If the exact path is not
found, also search tests/unit/[system]/ broadly (the file may have been placed at a
slightly different location). If no test file is found at either location:
[exact-path-from-Test-Evidence-section]. Create and run the test before marking
this story Complete."For Integration stories: read the story's Test Evidence section for the exact
required path. Use Glob to check that exact path first, then search
tests/integration/[system]/ broadly, then check production/session-logs/ for a
playtest record referencing this story.
If none found: flag as BLOCKING (same rule as Logic).
For Visual/Feel and UI stories: glob production/qa/evidence/ for a file
referencing this story. If none: flag as ADVISORY —
"No manual test evidence found. Create production/qa/evidence/[story-slug]-evidence.md
using the test-evidence template and obtain sign-off before final closure."
For Config/Data stories: check for any production/qa/smoke-*.md file.
If none: flag as ADVISORY — "No smoke check report found. Run /smoke-check."
If no Story Type is set: flag as ADVISORY —
"Story Type not declared. Add Type: [Logic|Integration|Visual/Feel|UI|Config/Data]
to the story header to enable test evidence gate enforcement in future stories."
Any BLOCKING test evidence gap prevents the COMPLETE verdict in Phase 6.
Compare the implementation against the design documents.
Run these checks automatically:
GDD rules check: Using the current requirement text from tr-registry.yaml
(looked up by the story's TR-ID), check that the implementation reflects what
the GDD actually requires now — not what it required when the story was written.
Grep the implemented files for key function names, data structures, or class
names mentioned in the current GDD section.
Manifest version staleness check: Compare the Manifest Version: date
embedded in the story header against the Manifest Version: date in the
current docs/architecture/control-manifest.md header.
ADVISORY: Story was written against manifest v[story-date]; current manifest is v[current-date]. New rules may apply. Run /story-readiness to check.ADR constraints check: Read the referenced ADR's Decision section. Check
for forbidden patterns from docs/architecture/control-manifest.md (if it
exists). Grep for patterns explicitly forbidden in the ADR.
Hardcoded values check: Grep the implemented files for numeric literals
in gameplay logic that should be in data files.
Scope check: Did the implementation touch files outside the story's stated scope? (files not listed in "files to create/modify")
For each deviation found, categorize:
Review mode check — apply before spawning QL-TEST-COVERAGE:
solo → skip. Note: "QL-TEST-COVERAGE skipped — Solo mode." Proceed to Phase 5.lean → skip (not a PHASE-GATE). Note: "QL-TEST-COVERAGE skipped — Lean mode." Proceed to Phase 5.full → spawn as normal.After completing the deviation checks in Phase 4, spawn qa-lead via Task using gate QL-TEST-COVERAGE (.claude/docs/director-gates.md).
Pass:
## QA Test Cases section (the pre-written test specs from story creation)## Acceptance Criteria listThe qa-lead reviews whether the tests actually cover what was specified — not just whether files exist.
Apply the verdict:
Skip this phase for Config/Data stories (no code tests required).
Review mode check — apply before spawning LP-CODE-REVIEW:
solo → skip. Note: "LP-CODE-REVIEW skipped — Solo mode." Proceed to Phase 6 (completion report).lean → skip (not a PHASE-GATE). Note: "LP-CODE-REVIEW skipped — Lean mode." Proceed to Phase 6 (completion report).full → spawn as normal.Spawn lead-programmer via Task using gate LP-CODE-REVIEW (.claude/docs/director-gates.md).
Pass: implementation file paths, story file path, relevant GDD section, governing ADR.
Present the verdict to the user. If CONCERNS, surface them via AskUserQuestion:
Revise flagged issues / Accept and proceed / Discuss further
If REJECT, do not proceed to Phase 6 verdict until the issues are resolved.If the story has no implementation files yet (verdict is being run before coding is done), skip this phase and note: "LP-CODE-REVIEW skipped — no implementation files found. Run after implementation is complete."
Before updating any files, present the full report:
## Story Done: [Story Name]
**Story**: [file path]
**Date**: [today]
### Acceptance Criteria: [X/Y passing]
- [x] [Criterion 1] — auto-verified (test passes)
- [x] [Criterion 2] — confirmed
- [ ] [Criterion 3] — FAILS: [reason]
- [?] [Criterion 4] — DEFERRED: requires playtest
### Test-Criterion Traceability
| Criterion | Test | Status |
|-----------|------|--------|
| AC-1: [text] | [test file::test name] | COVERED |
| AC-2: [text] | Manual confirmation | COVERED |
| AC-3: [text] | — | UNTESTED |
### Test Evidence
**Story Type**: [Logic | Integration | Visual/Feel | UI | Config/Data | Not declared]
**Required evidence**: [unit test file | integration test or playtest | screenshot + sign-off | walkthrough doc | smoke check pass]
**Evidence found**: [YES — `[path]` | NO — BLOCKING | NO — ADVISORY]
### Deviations
[NONE] OR:
- BLOCKING: [description] — [GDD/ADR reference]
- ADVISORY: [description] — user accepted / flagged for tech debt
### Scope
[All changes within stated scope] OR:
- Extra files touched: [list] — [note whether valid or scope creep]
### Verdict: COMPLETE / COMPLETE WITH NOTES / BLOCKED
Verdict definitions:
If the verdict is BLOCKED: do not proceed to Phase 7. List what must be fixed. Offer to help fix the blocking items.
Ask before writing: "May I update the story file to mark it Complete and log the completion notes?"
If yes, edit the story file:
Status: Complete## Completion Notes section at the bottom:## Completion Notes
**Completed**: [date]
**Criteria**: [X/Y passing] ([any deferred items listed])
**Deviations**: [None] or [list of advisory deviations]
**Test Evidence**: [Logic: test file at path | Visual/Feel: evidence doc at path | None required (Config/Data)]
**Code Review**: [Pending / Complete / Skipped]
If advisory deviations exist, ask: "Should I log these as tech debt in
docs/tech-debt-register.md?"
Update production/sprint-status.yaml (if it exists):
status: done and completed: [today's date]updated fieldAfter updating the story file, silently append to
production/session-state/active.md:
## Session Extract — /story-done [date]
- Verdict: [COMPLETE / COMPLETE WITH NOTES / BLOCKED]
- Story: [story file path] — [story title]
- Tech debt logged: [N items, or "None"]
- Next recommended: [next ready story title and path, or "None identified"]
If active.md does not exist, create it with this block as the initial content.
Confirm in conversation: "Session state updated."
After completion, help the developer keep momentum:
production/sprints/.Present:
### Next Up
The following stories are ready to pick up:
1. [Story name] — [1-line description] — Est: [X hrs]
2. [Story name] — [1-line description] — Est: [X hrs]
Run `/story-readiness [path]` to confirm a story is implementation-ready
before starting.
If no more Must Have stories remain in this sprint (all are Complete or Blocked):
### Sprint Close-Out Sequence
All Must Have stories are complete. QA sign-off is required before advancing.
Run these in order:
1. `/smoke-check sprint` — verify the critical path still works end-to-end
2. `/team-qa sprint` — full QA cycle: test case execution, bug triage, sign-off report
3. `/gate-check` — advance to the next phase once QA approves
Do not run `/gate-check` until `/team-qa` returns APPROVED or APPROVED WITH CONDITIONS.
If there are Should Have stories still unstarted, surface them alongside the close-out sequence so the user can choose: close the sprint now, or pull in more work first.
If no more stories are ready but Must Have stories are still In Progress (not Complete): "No more stories ready to start — [N] Must Have stories still in progress. Continue implementing those before sprint close-out."
AskUserQuestion for the code review prompt and for batching manual
criteria confirmations./story-readiness [next-story-path] to validate the next story before starting implementation/smoke-check sprint → /team-qa sprint → /gate-check/tech-debt to keep the register currentPrerequisites
Time Estimate
15-45 minutes depending on use case complexity
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.
✗ Avoid when
Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.
JuliusBrussee/caveman
JuliusBrussee/caveman
whyashthakker/agent-skills-marketing
JuliusBrussee/caveman
whyashthakker/agent-skills-marketing
vercel-labs/skills
story-done has been reliable in day-to-day use. Documentation quality is above average for community skills.
I recommend story-done for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
Keeps context tight: story-done is the kind of skill you can hand to a new teammate without a long onboarding doc.
We added story-done from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
We added story-done from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
Useful defaults in story-done — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
Solid pick for teams standardizing on skills: story-done is focused, and the summary matches what you get after install.
Registry listing for story-done matched our evaluation — installs cleanly and behaves as described in the markdown.
story-done reduced setup friction for our internal harness; good balance of opinion and flexibility.
story-done fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
showing 1-10 of 44