Fix release for 1.1.1: the minimal path end to end, engine commands that run on Godot, Unity and Unreal, hook warnings you can see, and verdicts that say when they could not check. Details in CHANGELOG.md; upgrade steps in UPGRADING.md (v1.1.1 → v1.1.2). Fixes #67 Fixes #131 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WuJn2FdynEybfL5KC697nJ
11 KiB
Skill Test Spec: /sprint-status
Skill Summary
/sprint-status is a Haiku-tier read-only skill that produces a concise sprint
snapshot. It uses the sprint named by its argument, or the most recently
modified file in production/sprints/, and reads production/sprint-status.yaml
as the source of truth for story status (falling back to markdown scanning with
a warning when the yaml is absent). It greps the story files'
Last Updated fields and flags an In Progress story as STALE when its date is
more than 4 days old. The burndown verdict is On Track / At Risk / Behind,
derived from completion % against time consumed %, and any STALE story upgrades
it to at least At Risk. Fast escalation flags go at the top of the output: the
SPRINT AT RISK critical flag, the Must Haves completion flag, and the missing
stories flag. When no sprint files exist it points to /sprint-plan new at
standard/full workflow, and reports build-order progress at minimal —
where, if every unfinished story is Blocked, Draft or unstatused, it names them
(each blocked one with its blocker) and never reports the build order done. It
never writes files, invokes no director gates, and makes at most one
recommendation.
Static Assertions (Structural)
Checked against the SKILL.md by /skill-test spec — no fixture needed.
- Has required frontmatter fields:
name,description,argument-hint,user-invocable,allowed-tools - Has ≥2 phase headings or numbered check sections
- Contains burndown verdict keywords: On Track, At Risk, Behind
- Does NOT require "May I write" language (read-only skill)
- Has a next-step handoff (the Recommendation section)
Director Gate Checks
None. /sprint-status is a read-only reporting skill; no gates are invoked.
Test Cases
Case 1: Happy Path — Mixed sprint, At Risk with a blocked Must Have
Fixture:
production/sprints/sprint-004.mdis the most recently modified sprint fileproduction/sprint-status.yamlcovers sprint 4: it started 13 days ago and ends 7 days from today (65% of time consumed)- The yaml lists 6 stories:
- 3 with
status: done - 2 with
status: in-progress, both last updated within the past 2 days - 1 with
status: blocked,priority: must-have,blocker: "Waiting on physics ADR acceptance"
- 3 with
Input: /sprint-status
Expected behavior:
- Skill selects
sprint-004.mdand readsproduction/sprint-status.yaml - Skill computes 65% time consumed and 3/6 = 50% complete — 15 points behind
- A blocked Must Have with 35% of sprint time remaining (under 40%) triggers
the critical flag at the top: "SPRINT AT RISK: … Recommend replanning with
/sprint-plan update." - Skill outputs the status table with the blocker in the Blocker column and the burndown verdict At Risk
Assertions:
- Output includes "Progress: 3/6 tasks (50%)" and a status table listing all 6 stories
- The blocked story is named with "Waiting on physics ADR acceptance" in its Blocker column
- Burndown is At Risk (50% complete vs 65% time consumed — 15 points behind)
- The SPRINT AT RISK critical flag appears at the top, recommending
/sprint-plan update - Skill does not write any files
Case 2: All Stories Complete — On Track with completion flag
Fixture:
production/sprints/sprint-004.mdis the most recently modified sprint fileproduction/sprint-status.yamlcovers sprint 4: it started 5 days ago and ends 5 days from today (50% of time consumed)- All 5 stories have
status: done(3must-have, 2should-have)
Input: /sprint-status
Expected behavior:
- Skill reads the yaml — 5/5 complete
- 100% complete against 50% time consumed → On Track
- The completion flag appears at the top: "All Must Haves complete. Team can pull from Should Have backlog."
- Must-Haves at Risk reads "None."; the Attention Needed section is omitted
- Skill ends with a single recommendation
Assertions:
- Burndown is On Track
- The completion flag "All Must Haves complete. Team can pull from Should Have backlog." appears at the top
- Output shows "Progress: 5/5 tasks (100%)"
- Output makes at most one recommendation (or "Sprint is on track — no action needed.")
- No files are written
Case 3: No Sprint Files — Guidance to run /sprint-plan
Fixture:
production/sprints/directory is absentproject.yamlsetsmodes.workflow: standard
Input: /sprint-status
Expected behavior:
- Skill finds no sprint files
- At
standardworkflow, skill reports: "No sprint files found. Start a sprint with/sprint-plan new." - Skill stops
Assertions:
- Skill does not error or crash when no sprint file exists
- Output states "No sprint files found" and recommends
/sprint-plan new - Skill stops there — no burndown verdict and no status table are emitted
- The
workflow: minimalbuild-order report is not used atstandard
Case 4: Edge Case — Stale In Progress Story (flagged)
Fixture:
production/sprints/sprint-004.mdis the most recently modified sprint fileproduction/sprint-status.yamlcovers sprint 4: 10-day sprint, 5 days elapsed (50% of time consumed); 4 stories — 2done, 2in-progress(50% complete)production/epics/combat/story-003-dash.md(in progress) has> **Last Updated**: [6 days before today]production/epics/combat/story-004-parry.md(in progress) has> **Last Updated**: [3 days before today]- No stories are Blocked
Input: /sprint-status
Expected behavior:
- Skill resolves the dates with one grep for the
Last Updatedfield acrossproduction/epics/**/story-*.md - story-003 is 6 days old — more than the 4-day threshold — and is flagged STALE; story-004 (3 days) is not
- The Attention Needed table lists story-003 with its Last Updated date, Days Stale and the STALE note
- The burndown, On Track by percentage alone, is upgraded to At Risk with the reason "At Risk — 1 stale story(ies): …" naming story-003 with its own age, 6 days
Assertions:
- Dates come from the story files'
Last Updatedfield via a single grep, not fromactive.mdor a read per story - story-003 (6 days) is flagged STALE by name in Attention Needed; story-004 (3 days) is not flagged
- Burndown is At Risk despite 50% complete against 50% time consumed, and the escalation reason gives the stale count (1) and story-003's own age (6 days) as separate figures
- Output does not conflate "stale" with "Blocked" — story-003 keeps its IN PROGRESS status with a STALE note
Case 5: Gate Compliance — Read-only; no gate invocation
Fixture:
production/sprints/sprint-004.mdexists andproduction/sprint-status.yamllists 4 stories (2done, 2in-progress) with sprint datesproject.yamlsetsmodes.review_mode: full
Input: /sprint-status
Expected behavior:
- Skill reads the sprint and produces the status snapshot
- Skill does NOT invoke any director gate regardless of review mode
- Output is a plain status report with a Burndown verdict (On Track, At Risk or Behind)
- Skill does not prompt for user approval or ask to write any file
Assertions:
- No director gate is invoked in any review mode
- Output does not contain any "May I write" prompt
- Skill completes and returns a Burndown verdict without user interaction
review_modeis not among the keys the skill resolves (it resolvesstory_granularityandworkflow)
Case 6: Default Minimal Workflow — Build-order progress, no sprint files
Fixture:
production/sprints/does not existproject.yamlsets neithermodes.rigornormodes.workflow, so the injected block readsworkflow: minimal (rigor:minimal)- The injected
story-status.shlist reads:IN_REVIEW production/epics/core/story-003-dash.md IN_PROGRESS production/epics/core/story-002-jump.md TODO production/epics/core/story-004-parry.md (Ready) COMPLETE 1 of 4
Input: /sprint-status
Expected behavior:
- Skill finds no sprint files; at
workflow: minimalit reports build-order progress instead of pointing to/sprint-plan - Skill prints "Build order: 1 of 4 stories complete"
- Next is story-003 (In Review), the first line — ahead of story-002, which
comes first in file order; skill recommends
/story-done production/epics/core/story-003-dash.md - Skill stops — no burndown verdict, no status table, no write
Assertions:
- Output does not say "No sprint files found" and does not recommend
/sprint-plan new - Output shows "Build order: 1 of 4 stories complete" — the
In Reviewstory is not counted as complete - Next is story-003, the first line of the list, with
/story-doneand its path — the story files are not re-ranked into file order - No burndown verdict is emitted and no file is written
Case 7: Minimal Workflow — Every unfinished story Blocked or Draft
Fixture:
production/sprints/does not exist; the injected block readsworkflow: minimal (rigor:minimal)- The injected
story-status.shlist reads:BLOCKED production/epics/core/story-003-dash.md (Blocked) OTHER production/epics/core/story-004-parry.md (Draft) COMPLETE 2 of 4 - story-003's file carries the note
BLOCKED: waiting on the dash animation
Input: /sprint-status
Expected behavior:
- There is no
IN_REVIEW,IN_PROGRESSorTODOline and 2 of 4 stories are complete, so there is no Next and the build order is not done - Skill prints "Build order: 2 of 4 stories complete"
- Skill names story-003 with its blocker and story-004 with its status,
Draft - Skill makes one recommendation — clearing story-003's blocker — and stops
Assertions:
- Output never says the build order is done — no "Build order done" line, no three ways on
- No story is presented as Next — neither the Blocked story-003 nor the Draft story-004
- story-003 is named with its blocker, "waiting on the dash animation", from its
BLOCKED:note - story-004 is named with its status as written,
Draft - Output makes exactly one recommendation, and no file is written
Protocol Compliance
- Does NOT use Write or Edit tools (read-only skill)
- Presents the story status table before the Burndown verdict
- Does not ask for approval
- Ends with at most one recommended next step
- Declares
model: haiku(when a declared tier is used:.claude/docs/model-tiers.md)
Coverage Notes
- At
workflow: minimal, the all-Complete ("Build order done") andSTORIES nonebranches are not tested. - The markdown fallback when
production/sprint-status.yamlis absent (with its "Nosprint-status.yamlfound" warning) is not tested. - A sprint without dates ("burndown assessment skipped") is not tested.
- Selecting a specific sprint by argument (
/sprint-status 3) is not tested; the cases above use the most recently modified sprint file.