7.6 KiB
Skill Test Spec: /story-readiness
Skill Summary
/story-readiness validates that a story file is ready for a developer to
pick up and implement. It checks four dimensions: Design (embedded GDD
requirements), Architecture (ADR references and status), Scope (clear
boundaries and DoD), and Definition of Done (testable criteria). It produces
a READY / NEEDS WORK / BLOCKED verdict. It is a read-only skill and runs
before any developer picks up a story.
Static Assertions (Structural)
Verified automatically by /skill-test static — no fixture needed.
- Has required frontmatter fields:
name,description,argument-hint,user-invocable,allowed-tools - Has ≥2 phase headings or numbered check sections
- Contains verdict keywords: READY, NEEDS WORK, BLOCKED
- Does NOT require "May I write" language (read-only skill)
- Has a next-step handoff (what to do after verdict)
Test Cases
Case 1: Happy Path — Fully ready story
Fixture:
- Story file exists at
production/epics/core/story-light-pickup.md - Story contains:
TR-ID: TR-light-001(GDD requirement reference)ADR: docs/architecture/adr-003-inventory.md- Referenced ADR exists and has status
Accepted - Referenced TR-ID exists in
docs/architecture/tr-registry.yaml - Story has
## Acceptance Criteriawith ≥3 testable items - Story has
## Definition of Donesection - Story has
Status: Ready for Dev - Manifest version in story header matches current
docs/architecture/control-manifest.md
Input: /story-readiness production/epics/core/story-light-pickup.md
Expected behavior:
- Skill reads the story file
- Skill reads the referenced ADR — verifies status is
Accepted - Skill reads
docs/architecture/tr-registry.yaml— verifies TR-ID exists - Skill reads
docs/architecture/control-manifest.md— verifies manifest version matches - Skill evaluates all 4 dimensions (Design, Architecture, Scope, DoD)
- Skill outputs READY verdict with all checks passing
Assertions:
- Skill reads the referenced ADR file (not just the story)
- Skill verifies ADR status is
Accepted(notProposed) - Skill reads
tr-registry.yamlto verify TR-ID exists - Output includes check results for all 4 dimensions
- Verdict is READY when all checks pass
- Skill does not write any files
Case 2: Blocked Path — Referenced ADR is Proposed (not Accepted)
Fixture:
- Story file exists with
ADR: docs/architecture/adr-005-light-system.md adr-005-light-system.mdexists but hasStatus: Proposed- All other story content is otherwise complete
Input: /story-readiness production/epics/core/story-light-system.md
Expected behavior:
- Skill reads the story
- Skill reads
adr-005-light-system.md— findsStatus: Proposed - Skill flags this as a BLOCKING issue (cannot implement against unaccepted ADR)
- Skill outputs BLOCKED verdict
- Skill recommends: accept or reject the ADR before picking up the story
Assertions:
- Verdict is BLOCKED (not NEEDS WORK or READY) when ADR is Proposed
- Output explicitly names the Proposed ADR as the blocker
- Output recommends resolving ADR status before proceeding
- Skill does not output READY regardless of other checks passing
Case 3: Needs Work — Missing Acceptance Criteria
Fixture:
- Story file exists but has no
## Acceptance Criteriasection - ADR reference exists and is
Accepted - TR-ID exists in registry
- Manifest version matches
Input: /story-readiness production/epics/core/story-oxygen-drain.md
Expected behavior:
- Skill reads the story
- Skill finds no Acceptance Criteria section
- Skill flags this as a NEEDS WORK issue (story is incomplete, not blocked)
- Skill outputs NEEDS WORK verdict
- Skill names the missing section and suggests adding measurable criteria
Assertions:
- Verdict is NEEDS WORK (not BLOCKED or READY) when Acceptance Criteria section is absent
- Output identifies the missing Acceptance Criteria section specifically
- Output suggests adding testable/measurable criteria
- Skill distinguishes NEEDS WORK (fixable without external dependencies) from BLOCKED (requires outside action)
Case 4: Edge Case — Stale manifest version
Fixture:
- Story file has
Manifest Version: 2026-01-15in its header docs/architecture/control-manifest.mdhasManifest Version: 2026-03-10- Versions do not match (story was created before manifest was updated)
Input: /story-readiness production/epics/core/story-mirror-rotation.md
Expected behavior:
- Skill reads the story and extracts manifest version
2026-01-15 - Skill reads control manifest header and extracts current version
2026-03-10 - Skill detects version mismatch
- Skill flags this as an ADVISORY issue (not blocking, but worth noting)
- Verdict is NEEDS WORK with manifest staleness noted
Assertions:
- Skill reads
docs/architecture/control-manifest.mdto get current version - Skill compares story's embedded manifest version against current manifest version
- Stale manifest version results in NEEDS WORK (not BLOCKED, not READY)
- Output explains that the story's embedded guidance may be outdated
Case 5: Director Gate — QL-STORY-READY behavior across review modes
Fixture:
- Story file exists and is READY (all 4 dimensions pass, ADR Accepted, criteria present)
production/session-state/review-mode.txtexists
Case 5a — full mode:
review-mode.txtcontainsfull
Input: /story-readiness production/epics/core/story-light-pickup.md (full mode)
Expected behavior:
- Skill reads review mode — determines
full - After completing its own 4-dimension check, skill invokes QL-STORY-READY gate
- QA lead reviews the story for readiness
- If QA lead verdict is INADEQUATE → story verdict is BLOCKED regardless of 4-dimension result
- If QA lead verdict is ADEQUATE → verdict proceeds normally
Assertions (5a):
- Skill reads review mode before deciding whether to invoke QL-STORY-READY
- QL-STORY-READY gate is invoked in full mode after the 4-dimension check completes
- A QA lead INADEQUATE verdict overrides a READY 4-dimension result → final verdict BLOCKED
- Gate invocation is noted in output: "Gate: QL-STORY-READY — [result]"
Case 5b — lean or solo mode:
review-mode.txtcontainsleanorsolo
Expected behavior:
- Skill reads review mode — determines
leanorsolo - QL-STORY-READY gate is SKIPPED
- Output notes the skip: "[QL-STORY-READY] skipped — Lean/Solo mode"
- Verdict is based on 4-dimension check only
Assertions (5b):
- QL-STORY-READY gate does NOT spawn in lean or solo mode
- Skip is explicitly noted in output
- Verdict is based on 4-dimension check alone
Protocol Compliance
- Does NOT use Write or Edit tools (read-only skill)
- Presents complete check results before verdict
- Does not ask for approval (no file writes)
- Ends with recommended next step (fix issues or proceed to implementation)
- Distinguishes three verdict levels clearly (READY vs NEEDS WORK vs BLOCKED)
Coverage Notes
- Case where TR-ID is missing from the registry entirely is not explicitly tested here; it follows the same NEEDS WORK pattern as Case 3.
- The "no argument" path (skill auto-detecting the current story) is not
tested because it depends on
production/session-state/active.mdcontent, which is hard to fixture reliably. - Stories with multiple ADR references are not tested; behavior is assumed to be additive (all ADRs must be Accepted for READY verdict).