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
14 KiB
Skill Test Spec: /launch-checklist
Skill Summary
/launch-checklist generates a launch-readiness checklist across code, content,
QA, store, legal, infrastructure, community and operations, scoped to the
project. It is handed the resolved rigor, project.stage, platform.cert_tier
and automation, and scopes by them: out-of-reach phases are declared out of
scope, rigor: minimal drops process-weight items, and the Platform
Certification section is emitted only for the cert_tier value
(none | itch | steam | console). An unset cert_tier is a question, not a
licence to emit every track; if it cannot be determined the section is marked
NOT ASSESSED — cert tier unknown.
Phase 2 reads CLAUDE.md, the latest milestone, any existing checklist in
production/releases/ and the content calendar. Phase 3 scans the code root for
TODO/FIXME/HACK, debug output, placeholder assets and hardcoded dev values, and
reports every scan with its denominator (scanned [N] files, [M] hits) or
NOT ASSESSED — [reason]; an unassessable item is written - [?] with a legend,
never a bare box or tick. The bug rows follow workflow: S1 and S2 (or a
documented exception), and at full S1–S3 with no exceptions. Phase 4b asks one
AskUserQuestion per section about the items no scan or file settled, each
answered yes / no / not yet / N/A: yes ticks it, no or not yet is a failed item
(Blocking, or Conditional with a workaround or accepted risk), N/A leaves it out;
it is skipped, and says so, in dry-run and in autonomous mode. The checklist
ends in a Go / No-Go section. Blocking Items are every FAIL or unresolved
finding with no documented workaround or accepted risk; Conditional Items are
shortfalls with a documented workaround or an explicitly accepted risk. Overall
Status is computed from them, first match wins: NOT READY (any blocking item)
→ NOT ASSESSED (any [?] item, NOT ASSESSED section or unconfirmed item, each
named) → CONDITIONAL (any conditional item) → READY. Unless the argument is
dry-run, it asks "May I write this to
production/releases/launch-checklist-[date].md?" and creates nothing — not
even the directory — before the answer. Next steps: /gate-check release first
if project.stage is not Release (Polish, an earlier stage, or unset), then
/team-release. No director gates are spawned.
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, CONDITIONAL, NOT ASSESSED, NOT READY (Overall Status, first match NOT READY → NOT ASSESSED → CONDITIONAL → READY), and NOT ASSESSED for unassessable scans and cert tier
- Contains "May I write" language before writing the checklist, and creates no file or directory before the answer
- Has a Phase 4b that asks one
AskUserQuestionper section, answers yes / no / not yet / N/A, with no / not yet a failed item and N/A excluded - Has a next-step handoff (
/gate-check releaseonly whenproject.stageis notRelease, and/team-release)
Director Gate Checks
None. /launch-checklist has no Agent tool and spawns no director. The
"Sign-Offs Required" list (Creative Director, Technical Director, QA Lead,
Producer, Release Manager) is checklist text for humans, coordinated later via
/team-release; the formal gate verdict comes from /gate-check.
Test Cases
Case 1: Happy Path — Steam project, clean scans, every section confirmed, READY
Fixture:
project.yaml:project.stage: Release,modes.rigor: standard,platform.cert_tier: steam, engine Godot (code rootsrc/); a single-player game with no serverssrc/has 40 source files with no TODO/FIXME/HACK, no debug output, no placeholder or hardcoded dev valuesassets/exists with final assetsproduction/releases/does not exist yet- In Phase 4b the user answers
Yes — all of themfor every section, except the Infrastructure question, whereSome differgives each Servers item N/A and every Analytics and Monitoring item yes
Input: /launch-checklist 2026-11-01
Expected behavior:
- Target Launch reads 2026-11-01
- Phase 3 reports each scan as
scanned [N] files, 0 hits - Platform Certification contains only the Steam block (Steamworks SDK, store page, depot build, achievements, common content rules) plus the every-tier accessibility row
- The soak-test item asks for the longest soak
/soak-testruns (or a longer one run by hand), not a fixed duration/soak-testcannot produce - Phase 4b asks one
AskUserQuestionper section, listing only the items no scan or file settled (not the Phase 3 counts), each answered yes / no / not yet / N/A - The confirmed items are ticked
(confirmed by the user); the Servers items are written- N/A — [item]and left out of the status. Nothing is Blocking, Conditional or unconfirmed, so the first-match rule gives READY - Skill presents the checklist with a summary (Overall Status, total items, blocking count, conditional count, not-assessed count, departments with incomplete sections)
- Asks "May I write this to
production/releases/launch-checklist-[date].md?";production/releases/is not created before the answer - Next steps:
/team-release— the stage already readsRelease, so/gate-checkis not offered
Assertions:
- Every Phase 3 scan line shows its denominator (
scanned [N] files, [M] hits) - No console (TRC/Lotcheck) or itch.io items appear
- The soak-test item does not require a soak longer than
/soak-testoffers - Phase 4b asks at most one question per section, and no Phase 3 count is asked about
- Overall Status is READY — every item is ticked on evidence or on a Phase 4b answer, or marked N/A
- The summary gives total, blocking, conditional and not-assessed counts
- "May I write" names
production/releases/launch-checklist-[date].md, and no directory exists before the user answers it - Next steps name
/team-releaseand do not offer/gate-check
Case 2: Blocking Findings — FIXMEs and debug output
Fixture:
- As Case 1, but
src/contains 3FIXMEcomments and oneprint()debug call in production code src/also has oneHACKcomment whose justification is documented beside it
Input: /launch-checklist 2026-11-01
Expected behavior:
- Phase 3 counts the FIXMEs with their locations and finds the debug output
- Code Quality shows "FIXME count: 3 (zero required)" and the "No debug output" item unticked
- These appear under Blocking Items — findings with no workaround or accepted risk
- The justified HACK appears under Conditional Items, with its justification
- Overall Status is NOT READY — a blocking item outranks everything else
- "May I write" is still asked before saving
Assertions:
- FIXME count is 3, with file locations
- The debug
print()is reported and its item is not ticked - Blocking Items lists the FIXMEs and the debug output
- The documented HACK is under Conditional Items, not Blocking Items
- Overall Status is NOT READY (not READY, CONDITIONAL or NOT ASSESSED)
Case 3: Cert Tier Unset — Ask, do not emit every track
Fixture:
project.yaml:project.stage: Release,modes.rigor: standard, noplatform.cert_tier- Config block shows
platform.cert_tier: (unset -- ask which platforms are in scope)
Input: /launch-checklist 2026-11-01
Expected behavior:
- Skill asks which platforms are in scope instead of emitting all certification tracks
- If the user answers, only the matching tier block is emitted
- If it cannot be determined, the section is marked
NOT ASSESSED — cert tier unknown - Unset is not treated as
none— the section is not silently omitted
Assertions:
- Skill asks which platforms are in scope
- Console, Steam and itch.io blocks are never all emitted together
- Without an answer, the section reads
NOT ASSESSED — cert tier unknown - The "omitted — cert_tier is 'none'" line does not appear
Case 4: Nothing to Scan — [?] items, not green ticks
Fixture:
project.yaml:project.stage: Release,platform.cert_tier: itch, engine Godotsrc/exists but is empty; noassets/directory
Input: /launch-checklist 2026-11-01
Expected behavior:
- Phase 3 reports the code scans as
NOT ASSESSED — no source files(ordirectory empty) and the placeholder-asset scan asNOT ASSESSED — no asset folder, instead of zero hits - The affected items (e.g. "All placeholder art replaced with final assets",
"No debug output in production code") are written
- [?] - The legend
[?] = not assessed — the input to this check was absentis included - Platform Certification contains only the itch.io block
- Nothing was found, so Blocking Items is empty — and the
[?]items make the Overall Status NOT ASSESSED, naming the scans that could not run, never READY
Assertions:
- No scan with no input is reported as zero hits
- "All placeholder art replaced with final assets" is
- [?], not ticked and not- [ ] - The
[?]legend appears - No Steamworks or console items appear
- Overall Status is NOT ASSESSED and names the
[?]scans (code and placeholder-asset scans); it is not READY or CONDITIONAL
Case 5: Director Gate Check — Dry run, cert tier none
Fixture:
project.yaml:project.stage: Release,platform.cert_tier: none- Code root with source files
Input: /launch-checklist dry-run
Expected behavior:
- Target Launch reads DRY RUN
- Platform Certification is replaced by the one line
Platform Certification: omitted — cert_tier is 'none' (internal/jam release). - Phase 4b is skipped and the output says so; the items it would have asked stay unconfirmed, so the Overall Status is NOT ASSESSED
- The checklist is presented but no "May I write" ask is made and no file is written
- No director or other agent is spawned; no gate IDs appear
- Next steps name
/team-release; the stage readsRelease, so/gate-checkis not offered
Assertions:
- The "omitted — cert_tier is 'none'" line appears and no certification rows are emitted
- No Phase 4b question is asked in dry-run, the skip is stated, and the Overall Status is NOT ASSESSED
- No "May I write" ask and no file written in dry-run mode
- No director gate is invoked and no gate skip messages appear
- Next steps name
/team-releaseand do not offer/gate-check
Case 6: Stage Still Polish — Answers Make It CONDITIONAL, or NOT ASSESSED
Fixture:
- As Case 1, but
project.stage: Polishandmodes.rigor: full(workflow: full) - Variant A: in Phase 4b the Marketing items all get yes except "Press/influencer
review keys distributed", answered
not yet— the user says the keys go out on launch morning and the producer accepts the risk; every other section isYes — all of them(Servers N/A as in Case 1) - Variant B: as Variant A, but the user leaves the Legal question unanswered
Input: /launch-checklist 2026-11-01
Expected behavior:
- The Testing bug rows are the
workflow: fullones: zero S1, and zero S2 and S3 with no exceptions - Variant A: the press-keys item is a failed item with an accepted risk, so it goes under Conditional Items naming who accepted it; nothing is Blocking or unconfirmed; Overall Status is CONDITIONAL
- Variant B: the Legal items stay unconfirmed and are named; Overall Status is NOT ASSESSED (it outranks CONDITIONAL)
- Next steps: run
/gate-check releasefirst — the stage still readsPolish— then/team-release
Assertions:
- A
not yetanswer is never ticked; with an accepted risk it is listed under Conditional Items - Variant A's Overall Status is CONDITIONAL
- Variant B's Overall Status is NOT ASSESSED and names the unanswered Legal items
- No "documented exception" is offered for an S2 or S3 at
workflow: full - Next steps name
/gate-check releasebefore/team-release
Protocol Compliance
- Scopes the checklist by
project.stage,modes.rigorandplatform.cert_tier - Branches certification on the four
cert_tiervalues, not on platform names - Reports every scan with a denominator or
NOT ASSESSED — [reason] - Writes unassessable items as
- [?]with the legend - Asks "May I write" before saving (skipped entirely in dry-run), and creates no file or directory before the answer
- Asks one Phase 4b question per section for the items only a person can confirm, never answering them itself; skips Phase 4b, and says so, in
dry-runandautonomousmode - Names
/gate-check releasein next steps wheneverproject.stageis notRelease - Puts findings with no workaround or accepted risk under Blocking Items, and shortfalls with a documented workaround or accepted risk under Conditional Items
- Overall Status is READY, CONDITIONAL, NOT ASSESSED or NOT READY, first match NOT READY → NOT ASSESSED → CONDITIONAL → READY
Coverage Notes
cert_tier: console(TRC/Lotcheck, save-data, controller-mapping, age ratings) is not separately tested.- Stage scoping (items for phases not yet reached are declared out of scope) and
rigor: minimaltrimming are not separately tested. - An existing checklist in
production/releases/is read as context only; no comparison against it is tested.