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
12 KiB
Skill Test Spec: /release-checklist
Skill Summary
/release-checklist [platform: pc|console|mobile|all] builds a pre-release
checklist scoped to the project. It resolves modes.rigor, modes.workflow,
project.stage and platform.cert_tier, reads CLAUDE.md and the current
milestone in production/milestones/, and reads open bugs from
production/qa/bugs/ (Severity and Status lines). The bug items use the release
gate's thresholds for the resolved workflow — an open S1, S2 or S3 fails at
full, only an open S1 at standard/minimal (an open S2/S3 is a listed risk)
— and with no bug files they read NOT ASSESSED — no bug records, never zero.
It scans the code root for TODO / FIXME / HACK,
always stating the denominator (scanned [N] source files: …), or
NOT ASSESSED — code root unresolved when no root resolves, or
NOT ASSESSED — no source files found to scan when the root is absent or empty.
Missing test output is reported as
Test results: NOT ASSESSED — no test output or CI logs found.
The checklist has Codebase Health, Build Verification, Quality Gates and Content
Complete sections, device blocks chosen by the argument (default all), then a
certification block chosen only by platform.cert_tier: none → a single
"Certification: omitted — cert_tier is 'none' …" line; itch → itch.io rows;
steam → Steamworks rows; console → TRC/XR/Lotcheck rows. Unset cert_tier
means asking which platforms are in scope, or
### Certification: NOT ASSESSED — cert tier unknown; unset is never treated as
none. It ends with Store / Distribution, Launch Readiness and
### Go / No-Go: [READY / NOT ASSESSED / NOT READY] — first match NOT READY (a
blocking item fails), then NOT ASSESSED (any section or item NOT ASSESSED), then READY —
then asks "May I write this to
production/releases/release-checklist-[version].md?". No director gates apply.
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
- Contains verdict keywords: READY, NOT READY, NOT ASSESSED
- Contains "May I write" language before writing the checklist
- Has a next-step handoff (
/gate-checkfor the formal verdict,/team-releasefor sign-offs)
Director Gate Checks
None. /release-checklist spawns no agents (Agent is not in its allowed
tools). The Sign-offs Required list (QA Lead, Technical Director, Producer,
Creative Director) is a checklist for humans, not spawned gates. Formal phase
advancement is /gate-check.
Test Cases
Case 1: Happy Path — PC Build on the Steam Tier
Fixture:
platform.cert_tier: steam;project.stage: Polish;engine.name: Godotsrc/has 40 source files containing 3 TODO, 1 FIXME and 0 HACK commentsproduction/milestones/holds the current milestoneproduction/qa/bugs/holdsBUG-0003.md(S1,**Status**: Closed) andBUG-0004.md(S4,**Status**: Open);modes.rigoris unset (workflow: minimal)- CI test output exists
Input: /release-checklist pc
Expected behavior:
- Skill reads
CLAUDE.mdand the current milestone - Codebase Health states the denominator:
scanned 40 source files: 3 TODO, 1 FIXME, 0 HACK, listing the FIXME - The PC device block is emitted; no Console or Mobile device block
- Certification is the Steamworks block only
- Store / Distribution, Launch Readiness and the Go / No-Go line follow
- Skill presents total items and known blockers, then asks "May I write this
to
production/releases/release-checklist-[version].md?"; next steps name/gate-checkand/team-release
Assertions:
- TODO/FIXME/HACK counts are reported with the number of files scanned
- Only the PC device block appears
- Certification contains Steamworks rows and no itch.io or console certification rows
- Go / No-Go is READY or NOT READY — never NOT ASSESSED, since every section in this fixture could be assessed
- The Quality Gates bug line is counted from
production/qa/bugs/(0 open S1, S2 or S3); the closed S1 and the open S4 fail nothing - Nothing is written before the "May I write" ask naming
production/releases/release-checklist-[version].md
Case 2: Device Argument and Certification Tier Are Separate Axes
Fixture:
platform.cert_tier: itch- Source files exist in the code root
Input: /release-checklist console
Expected behavior:
- The
consoleargument selects the Console device block (suspend/resume, user switching, controller prompts) - Certification follows
cert_tier, not the argument: only the itch.io block - No Steamworks rows and no TRC/XR/Lotcheck rows appear
Assertions:
- The Console device block is present
- The only certification block is itch.io
- No console certification rows (TRC/Lotcheck, first-party submission) appear
- No Steamworks rows appear
Case 3: cert_tier none vs Unset — Different Output
Fixture:
- Run A:
platform.cert_tier: none - Run B:
platform.cert_tierabsent (resolved block shows it as unset) and the user cannot say which platforms are in scope
Input: /release-checklist (no argument → device blocks for all)
Expected behavior:
- Run A emits no certification block, only the line "Certification: omitted — cert_tier is 'none' (internal build, alpha or jam release)."
- Run B asks which platforms are in scope instead of emitting every track;
with no answer it emits
### Certification: NOT ASSESSED — cert tier unknownand says why - In neither run does the
allargument cause every certification track to be emitted
Assertions:
- Run A shows the "omitted — cert_tier is 'none'" line and no certification rows
- Run B asks which platforms are in scope
- Run B's certification section is
NOT ASSESSED — cert tier unknown, not thenoneline - Neither run emits itch.io, Steamworks and console certification together
Case 4: Edge Case — Nothing to Scan, No Test Output
Fixture:
platform.cert_tier: steam- No
engine.name, no legacy engine value, and none ofsrc/,Assets/,Source/exists (code root unresolved) - No test output directories or CI logs
production/qa/bugs/holds one bug,BUG-0002.md(S2,**Status**: Closed)
Input: /release-checklist pc
Expected behavior:
- The code root is unresolved, so no scan runs
- Codebase Health reads
NOT ASSESSED — code root unresolved(.claude/docs/code-root-resolution.md), not0TODO/FIXME/HACK - The test line reads
Test results: NOT ASSESSED — no test output or CI logs foundrather than being omitted - The rest of the checklist is still generated and offered for writing
Assertions:
- No bare
0count is reported for TODO/FIXME/HACK - Codebase Health is
NOT ASSESSED — code root unresolved - The test-results NOT ASSESSED line is present
- Go / No-Go is never READY: it is NOT ASSESSED naming both unassessed sections, or NOT READY if a blocking item failed
- The write still waits for the "May I write" ask
Case 5: Director Gate Check — None; Sign-Offs Are Listed, Not Spawned
Fixture:
platform.cert_tier: console; source files present- Any review mode
Input: /release-checklist all
Expected behavior:
- Skill generates the checklist with all device blocks and the console certification block
- The Sign-offs Required list appears as unchecked items
- No director or other agent is spawned; no gate IDs appear
- Next steps point to
/gate-checkand/team-release
Assertions:
- No director gate is invoked and no gate skip message appears
- No subagent is spawned, although sign-offs are listed
- The console certification block is the only certification block
- Next steps name
/gate-checkand/team-release
Case 6: A Known Blocker Outranks an Unassessed Section
Fixture:
platform.cert_tier: steam;project.stage: Polish- No
engine.name, no legacy engine value, and none ofsrc/,Assets/,Source/exists (code root unresolved) - CI test output exists
production/qa/bugs/BUG-0007.mdis an S1 (Critical) bug with**Status**: Open
Input: /release-checklist pc
Expected behavior:
- Codebase Health reads
NOT ASSESSED — code root unresolved - Quality Gates' "Zero open S1 (Critical) bugs" fails — a blocking item, at every tier
- Go / No-Go is NOT READY: first match wins, and NOT READY ranks above NOT ASSESSED
- The Rationale lists the S1 bug as a blocking item; the unassessed Codebase Health section still reads NOT ASSESSED rather than being dropped
Assertions:
- Go / No-Go is NOT READY — not NOT ASSESSED
- The S1 bug is listed in the Rationale as a blocking item
- Codebase Health still shows
NOT ASSESSED — code root unresolved
Case 7: Bug Thresholds Follow the Workflow Tier
Fixture:
platform.cert_tier: steam; source files present; CI test output exists- Run A:
modes.rigor: standard(workflow: standard);production/qa/bugs/BUG-0012.mdis an S2 (High) bug with**Status**: Open, and no other bug is open - Run B:
modes.rigor: full(workflow: full);production/qa/bugs/BUG-0013.mdis an S3 (Medium) bug with**Status**: Open, and no other bug is open
Input: /release-checklist pc
Expected behavior:
- Both runs read the bugs from
production/qa/bugs/, not from the milestone - Run A: the open S2 fails no item — at
standardonly an open S1 blocks — and is listed in the Rationale as a risk; the S2/S3 row is not emitted - Run B: the "Zero open S2 (High) and S3 (Medium) bugs" row fails on the open S3, which is named in the Rationale as a blocking item; Go / No-Go is NOT READY
Assertions:
- Run A's Go / No-Go is not NOT READY because of the S2, and the S2 appears in the Rationale as a risk
- Run B's Go / No-Go is NOT READY, naming BUG-0013 as a blocking item
- Neither run offers a "documented exception" for the S3 at
workflow: full
Case 8: No Bug Records — NOT ASSESSED, Not Zero
Fixture:
platform.cert_tier: steam; source files present; CI test output existsproduction/qa/bugs/does not exist
Input: /release-checklist pc
Expected behavior:
- The Quality Gates bug line reads
NOT ASSESSED — no bug records, not0 - The bug items are not ticked
- Go / No-Go is NOT ASSESSED (naming the bug items), unless a blocking item failed elsewhere — never READY
- The output says bugs are filed with
/bug-report
Assertions:
- No bare
0bug count and no ticked "Zero open S1 (Critical) bugs" item NOT ASSESSED — no bug recordsappears- Go / No-Go is not READY
Protocol Compliance
- Resolves
platform.cert_tierand branches only onnone | itch | steam | console - Treats unset
cert_tieras a question (or NOT ASSESSED), never asnone - Chooses device blocks from the argument and certification from
cert_tier - States a denominator with every scan count, or reports NOT ASSESSED
- Reads open bugs from
production/qa/bugs/and applies the release gate's thresholds for the resolvedworkflow(S1–S3 atfull, S1 atstandard/minimal); no bug files →NOT ASSESSED — no bug records - Go / No-Go takes the first match: NOT READY, then NOT ASSESSED, then READY
- Presents totals and blockers before asking "May I write"
- Ends with
/gate-checkand/team-releaseas next steps
Coverage Notes
project.stagescoping (items for unreached phases marked out of scope) andmodes.rigor: minimaltrimming are not separately tested.- The mobile device block (App Store / Play Store rows kept in the device block by design) is not tested by a dedicated case.
- How READY vs NOT READY is decided depends on the unchecked items and the user's inputs; a live run is needed to verify the rationale text.
- A resolved code root that is absent or empty reads
NOT ASSESSED — no source files found to scan; not separately tested.