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
13 KiB
Skill Test Spec: /help
Skill Summary
/help tells the user where they are in the pipeline and the one thing to do
next. It is read-only and declares the Haiku tier (model: haiku), which is
used only when the user types /help in Manual mode — in auto mode, or when
Claude starts the skill itself, the session model runs it
(.claude/docs/model-tiers.md). Before it runs, it is handed the resolved
config block (project.stage, workflow) and the output of
.claude/scripts/story-status.sh; it reads the session checkpoint itself (Step 3). It then reads
.claude/docs/workflow-catalog.yaml, resolves step completion for the current
phase with one call to bash .claude/scripts/artifact-check.sh --phase [phase],
and in Production reads production/sprint-status.yaml.
When workflow resolves to minimal (the default, because modes.rigor
defaults to minimal) it skips the phase ladder, reads the session checkpoint
(Step 3), and walks the minimal path (Step 4m): engine →
design/game-brief.md → stories → /dev-story ↔ /story-done. The optional
argument is what the user just finished or is stuck
on — the skill uses it to advance past the named step, and confusion language
in it adds an escalation footer. It is not a topic filter.
Output is a short "Where You Are" block with ✓ Done, exactly one → Next up,
optional ~ Also available, and Coming up after that. The verdict line is
Verdict: **COMPLETE** — next steps identified. No files are written and no
director gates are invoked.
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 - Frontmatter sets
model: haiku - Has ≥2 phase headings
- Contains verdict keyword: COMPLETE
- Does NOT contain "May I write" language, and
allowed-toolshas no Write or Edit (skill is read-only) - Has a next-step handoff (one
→ Next uprecommendation plus escalation paths)
Director Gate Checks
None. /help is a read-only navigation skill. No director gates apply.
Test Cases
Case 1: Happy Path — Production stage with active sprint
Fixture:
project.yamlsetsproject.stage: Productionandmodes.rigor: standard(soworkflowresolves tostandard)production/sprints/sprint-004.mdexistsproduction/sprint-status.yamllists one storystatus: in-progress, twostatus: ready-for-dev, threestatus: done, and onestatus: blockedwith ablockerfieldproduction/session-state/active.mdhas a STATUS block naming the in-progress story
Input: /help
Expected behavior:
- Skill takes
project.stage: Productionandworkflow: standardfrom the config block - Skill reads
.claude/docs/workflow-catalog.yamland runsbash .claude/scripts/artifact-check.sh --phase production - Skill reads
production/sprint-status.yaml: the in-progress story is "currently active", ready-for-dev stories are "next up", done stories count as complete, the blocked story is named with itsblockertext - Because
active.mdshows an active task, it is surfaced prominently at the top: "It looks like you were working on [story]" - Output uses the Step 7 shape headed
## Where You Are: Production, with a single→ Next up (REQUIRED)step - Verdict is COMPLETE
Assertions:
- Heading reads
## Where You Are: Production production/sprint-status.yamlis read; the in-progress story is surfaced as currently active- The blocked story appears with its
blockerfield - Exactly one
→ Next up (REQUIRED)step is shown (not a list of all skills) - The in-progress story from
active.mdis surfaced at the top ("It looks like you were working on …") - Verdict is COMPLETE
- No files are written
Case 2: Concept Stage — engine configured, no concept document
Fixture:
project.yamlsetsproject.stage: Concept,modes.rigor: full, andengine.name: "Godot"(full, because atstandardthe art bible is required only when visual-asset stories exist —.claude/docs/workflow-modes.md— and a Concept-stage project has no stories to decide it by)- No
design/gdd/game-concept.md, nodesign/art/art-bible.md, nodesign/gdd/systems-index.md, no sprint files
Input: /help
Expected behavior:
- Skill maps
Conceptto the catalog phaseconcept artifact-check.sh --phase conceptreportsengine-setupPRESENT (matched byengine.nameinproject.yaml) andgame-concept,art-bible,map-systemsABSENT✓ Donelists Engine Setup→ Next up (REQUIRED)is Game Concept Document with command/brainstormComing up after thatlists Art Bible (/art-bible) and Systems Map (/map-systems)- Verdict is COMPLETE
Assertions:
- Heading reads
## Where You Are: Concept - Engine Setup is shown under
✓ Done(not reported missing) → Next upis Game Concept Document via/brainstorm/art-bibleand/map-systemsappear under "Coming up after that", in that order- No Production-stage skill (e.g.
/dev-story,/sprint-plan) is suggested - Verdict is COMPLETE
Case 3: No stage recorded — phase inferred from artifacts
Fixture:
project.yamlsetsmodes.rigor: standardand has noproject.stage- No
production/stage.txt design/gdd/game-concept.mdanddesign/gdd/systems-index.mdexist- No
docs/architecture/adr-*.md, noproduction/epics/**/story-*.md, code root empty
Input: /help
Expected behavior:
- Config block reports
project.stageas not set - Skill applies the Step 2 artifact inference (most-advanced match wins):
design/gdd/systems-index.mdexists and nothing further →systems-design - Skill reports the inferred phase normally with the Step 7 shape
→ Next up (REQUIRED)is System GDDs via/design-system. The catalog'sdesign-systemstep has only anote:check, soartifact-check.shreports itNO_CHECKwith a note — a MANUAL step: the skill asks whether any system GDD is already done instead of asserting that none is- The input has no confusion language, so the Step 9 escalation block is not shown
- Verdict is COMPLETE
Assertions:
- Skill does not stop or error when no stage is recorded
- Inferred phase is Systems Design (heading
## Where You Are: Systems Design), not Concept → Next upis System GDDs via/design-system- The skill asks the user whether any system GDD is already done (MANUAL step), rather than reporting System GDDs as done or as not started
- The "Need more detail?" escalation block (
/project-stage-detect,/gate-check,/start) is NOT shown - Verdict is COMPLETE
Case 4: Argument — user names the step they finished and says they are unsure
Fixture:
project.yamlsetsproject.stage: Systems Designandmodes.rigor: standarddesign/gdd/systems-index.mdlists two MVP systems, bothStatus: Approved, and both system GDDs exist- No
design/gdd/gdd-cross-review-*.md - The catalog's
design-reviewstep has no artifact check (NO_CHECK)
Input: /help just finished design-review, not sure what's next
Expected behavior:
- The argument is read as the step the user just finished (Step 5), not as a topic filter
- Skill advances past Per-System Design Review even though its artifact check is
NO_CHECK → Next up (REQUIRED)is Cross-GDD Review via/review-all-gdds- "not sure" is confusion language, so the Step 9 "Need more detail?" block is
appended with
/project-stage-detect,/gate-checkand/start - The
/settingsrigor line is NOT shown: the user does not sound overwhelmed by process and the project has not outgrownstandard(nosettings-guidance.md § 4trigger fires) - Verdict is COMPLETE
Assertions:
- Per-System Design Review is treated as done because the user named it
→ Next upis Cross-GDD Review via/review-all-gdds- Escalation block lists
/project-stage-detect,/gate-checkand/start - No
/settingsrigor-change line appears - Verdict is COMPLETE
Case 5: Director Gate Check — minimal path, no gate and no gate-check route
Fixture:
project.yamlhasengine.name: "Godot"and nomodesblock (modes.rigordefaults tominimal, soworkflowresolves tominimal)design/game-brief.mdexistsproduction/epics/core/story-001.mdisStatus: Complete,story-002.mdisStatus: In Progress,story-003.mdisStatus: Ready- Neither
active.md(its CHECKPOINT names story-002 as the current task, with Next step:/dev-storyon it) nor the git log (no commit mentions story-002) says story-002's implementation is written
Input: /help
Expected behavior:
workflow: minimalsends the skill past the rest of Step 2;project.stageis not mapped- Skill reads
active.md's STATUS and CHECKPOINT blocks (Step 3), then goes to Step 4m - Skill runs
bash .claude/scripts/artifact-check.sh --path minimal - The injected
story-status.shlist has story-002 on the firstIN_PROGRESSline; the skill does not re-run the script or re-rank the stories - Output uses the minimal shape:
## Where You Are: Minimal path — 1 of 3 stories complete, with✓ Donegiving the count of complete stories, not their titles → Next upis story-002 with/dev-story [story-002 path]- No phase label, no gate line; the concept doc, art bible, systems map, GDDs,
sprint plan and
/gate-checkare not presented as required - No director agents are spawned and no write tool is called
Assertions:
- Heading reads
Minimal path — 1 of 3 stories complete active.md's checkpoint is read before the next step is chosen (Step 3 runs atminimal)→ Next upis story-002 via/dev-story, not story-003- No
/gate-checkline and no "Approaching … gate" line appear - Game concept, art bible, systems map and GDDs are not listed as next steps
- No director gate is invoked and no gate IDs appear in output
- No write tool is called
- Verdict is COMPLETE
Case 6: Minimal path — the checkpoint says the work is written
Fixture:
- As Case 5, except
active.md's CHECKPOINT reads Next step:/story-done production/epics/core/story-002.md(what/dev-storywrites when it finishes a story)
Input: /help
Expected behavior:
- Step 3 runs at
minimaland finds the checkpoint's next step - story-002 is still on the first
IN_PROGRESSline, butactive.mdsays its implementation is written, so→ Next upis story-002 with/story-done [story-002 path] - Verdict is COMPLETE
Assertions:
→ Next upis story-002 via/story-done, not/dev-story- story-002 is not counted or listed as complete
- Verdict is COMPLETE
Case 7: Minimal path — only a blocked story and an unknown status remain
Fixture:
- As Case 5, except
story-002.mdisStatus: Blocked(its file says it waits on the art for the player sprite) andstory-003.mdisStatus: Draft
Input: /help I'm stuck
Expected behavior:
- The injected list has no
IN_REVIEW,IN_PROGRESSorTODOline: story-002 is on aBLOCKEDline and story-003 on anOTHERline (Draft) - The skill names story-002 with its blocker and story-003 with its status as written, and says nothing can be built next
- It does not say the build order is done, and does not offer the "three ways on" of the every-story-Complete branch
→ Next upis clearing the first of them — story-002's blocker- "stuck" is confusion language, so the Step 9 "Need more detail?" block is
appended — without its
/gate-checkline, since the minimal path has no phase gates - Verdict is COMPLETE
Assertions:
- story-002 is named with its blocker; story-003 is named with status
Draft - Neither story is recommended to
/dev-storyor/story-done - The output does not say the build order is done
- Heading reads
Minimal path — 1 of 3 stories complete - The escalation block appears and has no
/gate-checkline - Verdict is COMPLETE
Protocol Compliance
- Uses the injected config block for
project.stageandworkflowinstead of re-reading them - Resolves step completion with one
artifact-check.shcall, not a Glob per step - Gives exactly one primary (
→ Next up) recommendation - Never auto-runs the recommended skill
- Asks the user about
MANUALsteps rather than assuming them done or not done - Does not write any files
- Verdict is COMPLETE in all cases
Coverage Notes
- The case where every story in
sprint-status.yamlis done is not separately tested; the Step 8 gate warning would then apply. - At
workflow: fullevery optional step is listed under~ Also available; Case 2 runs atfullonly so that the art bible is required, and does not assert that listing. - The minimal path's "every story Complete" branch (three ways on: play the
build,
/create-stories,/settings) is not separately tested.