Validate that a story file is implementation-ready. Checks for embedded GDD requirements, ADR references, engine notes, clear acceptance criteria, and no open design questions. Produces READY / NEEDS WORK / BLOCKED verdict with specific gaps. Use when user says 'is this story ready', 'can I start on this story', 'is story X ready to implement'.
This skill validates that a story file contains everything a developer needs to begin implementation — no mid-sprint design interruptions, no guessing, no ambiguous acceptance criteria. Run it before assigning a story.
This skill is read-only. It never edits story files. It reports findings and asks whether the user wants help filling gaps.
Output: Verdict per story (READY / NEEDS WORK / BLOCKED) with a specific gap list for each non-ready story.
Resolve the review mode once at startup (store for all gate spawns this run):
--review [full|lean|solo] → use that valueproduction/review-mode.txt → use that valueleanSee .claude/docs/director-gates.md for the full check pattern and mode definitions.
Scope: $ARGUMENTS[0] (blank = ask user via AskUserQuestion)
/story-readiness production/epics/combat/story-001-basic-attack.md):
validate that single story file.sprint: read the current sprint plan from production/sprints/ (most
recent file), extract every story path it references, validate each one.all: glob production/epics/**/*.md, exclude EPIC.md index files,
validate every story file found.If no argument is given, use AskUserQuestion:
Report the scope before proceeding: "Validating [N] story files."
Before checking any stories, load reference documents once (not per-story):
design/gdd/systems-index.md — to know which systems have approved GDDsdocs/architecture/control-manifest.md — to know which manifest rules exist
(if the file does not exist, note it as missing once; do not re-flag per story)
Also extract the Manifest Version: date from the header block if the file exists.docs/architecture/tr-registry.yaml — index all entries by id. Used to
validate TR-IDs in stories. If the file does not exist, note it once; TR-ID
checks will auto-pass for all stories (registry predates stories, so missing
registry means stories are from before TR tracking was introduced).Status: field. Cache these so you
don't re-read the same ADR for every story.sprint) — to identify Must Have /
Should Have priority for escalation decisionsFor each story file, evaluate every item below. A story is READY only if all items pass or are explicitly marked N/A with a stated reason.
design/gdd/ path
and quotes or links a specific requirement, acceptance criterion, or rule from
that GDD — not just the GDD filename. A link to the document without tracing
to a specific requirement does not pass.Status: field using the cached ADR statuses loaded in Section 2.
Status: Accepted → pass.Status: Proposed → BLOCKED: the ADR may change before it is accepted,
and the story's implementation guidance could be wrong.
Fix: BLOCKED: ADR-NNNN is Proposed — wait for acceptance before implementing.TR-[system]-NNN
reference, look it up in the TR registry loaded in Section 2.
status: active → pass.status: deprecated or status: superseded-by: ... →
NEEDS WORK: the requirement was removed or replaced.
Fix: update the story to reference the current requirement ID or remove if no longer applicable./architecture-review run).Manifest Version: date
in its header AND docs/architecture/control-manifest.md exists:
Manifest Version: → pass.Manifest Version: to current.Manifest Version: field OR the manifest
does not exist.docs/architecture/control-manifest.md does not
exist yet (do not penalize stories written before the manifest was created).assets/, or file extensions .png, .jpg, .svg,
.wav, .ogg, .mp3, .glb, .gltf, .tres, .tscn, .res).
Type: field in its header
identifying the test category (Logic / Integration / Visual/Feel / UI / Config/Data).
Without this, test evidence requirements cannot be enforced at story close.
Fix: Add Type: [Logic|Integration|Visual/Feel|UI|Config/Data] to the story header.## Test Evidence section stating where evidence will be stored
(test file path for Logic/Integration, or evidence doc path for Visual/Feel/UI).
Fix: Add ## Test Evidence with the expected evidence location for the story's type.Assign one of three verdicts per story:
READY — All checklist items pass or have explicit N/A justifications. The story can be assigned immediately.
NEEDS WORK — One or more checklist items fail, but all dependency stories exist and are not DRAFT. The story can be fixed before assignment.
BLOCKED — One or more dependency stories are missing or in DRAFT state, OR a critical design question (flagged UNRESOLVED in a criterion or rule) has no owner. The story cannot be assigned until the blocker is resolved. Note: a story that is BLOCKED may also have NEEDS WORK items — list both.
## Story Readiness: [story title]
File: [path]
Verdict: [READY / NEEDS WORK / BLOCKED]
### Passing Checks (N/[total])
[list passing items briefly]
### Gaps
- [Checklist item]: [exact description of what is missing or wrong]
Fix: [specific text needed to resolve this gap]
### Blockers (if BLOCKED)
- [What is blocking]: [story ID or design question that must resolve first]
## Story Readiness Summary — [scope] — [date]
Ready: [N] stories
Needs Work: [N] stories
Blocked: [N] stories
### Ready Stories
- [story title] ([path])
### Needs Work
- [story title]: [primary gap — one line]
- [story title]: [primary gap — one line]
### Blocked Stories
- [story title]: Blocked by [story ID / design question]
---
[Full detail for each non-ready story follows, using the single-story format]
If the scope is sprint and any Must Have stories are NEEDS WORK or BLOCKED,
add a prominent warning at the top of the output:
WARNING: [N] Must Have stories are not implementation-ready.
[List them with their primary gap or blocker.]
Resolve these before the sprint begins or replan with `/sprint-plan update`.
This skill is read-only. It never proposes edits or asks to write files.
After reporting findings, offer:
"Would you like help filling in the gaps for any of these stories? I can draft the missing sections for your approval."
If the user says yes for a specific story, draft only the missing sections
in conversation. Do not use Write or Edit tools — the user (or
/create-stories) handles writing.
Redirect rules:
/create-epics [layer] then /create-stories [epic-slug] to generate stories from the GDD and ADR."/quick-design [description] to create a Quick Design Spec, then reference
that spec in the story."After completing a single-story readiness check (not all or sprint scope):
production/sprints/ (most recent).If any are found, surface up to 3:
### Other Ready Stories in This Sprint
1. [Story name] — [1-line description] — Est: [X hrs]
2. [Story name] — [1-line description] — Est: [X hrs]
Run `/story-readiness [path]` to validate before starting.
If no sprint file exists or no other ready stories are found, skip this section silently.
Apply the review mode resolved in Phase 0 before spawning QL-STORY-READY:
solo → skip. Note: "QL-STORY-READY skipped — Solo mode." Proceed to close.lean → skip. Note: "QL-STORY-READY skipped — Lean mode." Proceed to close.full → spawn as normal.Spawn qa-lead via Task using gate QL-STORY-READY (.claude/docs/director-gates.md).
Pass the following context:
Handle the verdict per standard rules in director-gates.md:
AskUserQuestion:
options: Update story with suggested gaps / Accept and proceed anyway / Discuss further./dev-story [story-path] to begin implementation once the story is READY/story-readiness sprint to check all stories in the current sprint at once/create-stories [epic-slug] if a story file is missing entirely