Files
DonchitosandClaude Opus 5.5 b21fa0f7f2 Release 1.1.2 — the default path works end to end
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
2026-09-29 21:32:19 +10:00

13 KiB
Raw Permalink Blame History

Skill Test Spec: /vertical-slice

Skill Summary

/vertical-slice [--review full|lean|solo] is the Pre-Production validation build: one complete [start → challenge → resolution] loop at near-production quality, answering a falsifiable question about player experience and build feasibility. It reads the concept (design/gdd/game-concept.md, or design/game-brief.md at rigor: minimal), the systems index, the architecture and the control manifest, defines the validation question and a 3–5 minute scope, asks to record the plan in production/session-state/active.md, then asks "May I create the vertical slice directory at prototypes/[concept-name]-vertical-slice/ and begin implementation?". Every slice file starts with a VERTICAL SLICE - NOT FOR PRODUCTION header in that file's own comment syntax.

After a one-question-at-a-time debrief it writes prototypes/[concept-name]-vertical-slice/REPORT.md (from .claude/docs/templates/vertical-slice-report.md) and a prototypes/index.md row, one ask naming both. Verdicts are PROCEED / PIVOT / KILL, plus NOT ASSESSED when nobody has played the loop through from scratch — ranked above PROCEED and below PIVOT and KILL, and never recorded as PROCEED. The verdict feeds /gate-check production, which FAILs a built slice with any NO among its Vertical Slice Validation items, so PROCEED is not available after such a NO. In full review mode creative-director reviews the result via CD-PLAYTEST (APPROVE / CONCERNS / REJECT, or NOT ASSESSED): APPROVE keeps the recommendation; CONCERNS go to the user (Revise / Accept / Discuss); REJECT means PROCEED cannot stand — the user chooses PIVOT or KILL and the report records the director's reason. PIVOT writes a PIVOT-NOTE.md; KILL runs a five-item soundness check and appends to prototypes/GRAVEYARD.md.


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: PROCEED, PIVOT, KILL, NOT ASSESSED
  • Contains "May I" language before creating the slice directory and before writing REPORT.md, PIVOT-NOTE.md and GRAVEYARD.md
  • Has a next-step handoff per verdict (PROCEED → /create-epics, /create-stories, /sprint-plan, /gate-check production; PIVOT → /design-system, /architecture-decision, /vertical-slice; KILL → /brainstorm or /prototype)
  • Documents CD-PLAYTEST: spawned in full, skipped with a note in lean/solo

Director Gate Checks

  • Full mode: CD-PLAYTEST — creative-director receives the REPORT.md content, the validation question and the pillars and core fantasy (from design/gdd/game-concept.md, or the pitch and "what they feel" line from design/game-brief.md). APPROVE → the recommendation stands; CONCERNS → shown with the recommendation, and the user decides (Revise / Accept / Discuss); REJECT → a PROCEED cannot stand: the user chooses PIVOT or KILL, and REPORT.md records the director's reason (a PIVOT or KILL stands); NOT ASSESSED [missing input] → neither backs nor overturns the recommendation: the input is supplied and the gate re-run, or CD-PLAYTEST: NOT ASSESSED — [input] is recorded. Any change to REPORT.md and its prototypes/index.md row is asked first. When the slice's own verdict is NOT ASSESSED the gate is skipped: "CD-PLAYTEST skipped — the slice has not been played yet."
  • Lean mode: skipped — "CD-PLAYTEST skipped — Lean mode."
  • Solo mode: skipped — "CD-PLAYTEST skipped — Solo mode."

Test Cases

Case 1: Happy Path — slice built, played unaided, PROCEED

Fixture:

  • project.yaml: engine.name: Godot, engine.language: GDScript, modes.review_mode: solo
  • design/gdd/game-concept.md (core fantasy, pillars), design/gdd/systems-index.md, docs/architecture/architecture.md and docs/architecture/control-manifest.md exist; prototypes/ has no ember-trail-vertical-slice/
  • In the debrief the player finished the loop unaided, reached the first meaningful action in 40 seconds, felt the core fantasy and hit no fun blocker; the user answers PROCEED

Input: /vertical-slice

Expected behavior:

  1. Reads the concept, systems index, architecture and manifest; states a validation question covering player experience AND build feasibility
  2. Presents a 3–5 minute scope and the build plan; the confirmation names production/session-state/active.md, and the checkpoint is written there
  3. Asks "May I create the vertical slice directory at prototypes/ember-trail-vertical-slice/ and begin implementation?"; every GDScript file it writes starts with # VERTICAL SLICE - NOT FOR PRODUCTION
  4. Iterates with the user until the loop is playable, then asks for the from-scratch playthrough and puts the six debrief questions one at a time
  5. Drafts the report from .claude/docs/templates/vertical-slice-report.md with a day-by-day velocity log; asks "May I write this report to prototypes/ember-trail-vertical-slice/REPORT.md and add its row to prototypes/index.md?"; writes both
  6. Notes "CD-PLAYTEST skipped — Solo mode."
  7. PROCEED routes to /create-epics layer:foundation, /create-epics layer:core, /create-stories, /sprint-plan and /gate-check production

Assertions:

  • The validation question has both a player-experience and a build-feasibility part
  • Scope is confirmed, and the checkpoint ask names active.md, before any slice file is written
  • The directory ask comes before any slice file; each GDScript file's header is a # comment, never //
  • The debrief questions are asked one at a time, after the from-scratch playthrough
  • REPORT.md and the prototypes/index.md row are written only after one ask naming both; the row records PROCEED
  • The formal stage step is /gate-check production (Pre-Production → Production), not /gate-check pre-production

Case 2: Failure Path — a built slice with a NO cannot PROCEED

Fixture:

  • As Case 1, but in the debrief the player needed the developer to explain the core action (question 1: no)
  • The user answers PROCEED anyway, then picks PIVOT when asked

Input: /vertical-slice

Expected behavior:

  1. The skill does not record PROCEED: /gate-check production FAILs a built slice with any NO among its Vertical Slice Validation items (.claude/skills/gate-check/references/gate-production.md)
  2. It asks the user to choose PIVOT or KILL, naming question 1's answer as the reason
  3. The user picks PIVOT; REPORT.md is written, after its ask, with verdict PIVOT and the NO named
  4. The PIVOT route runs: the two carry-forward questions, one at a time, then "May I write this to prototypes/ember-trail-vertical-slice/PIVOT-NOTE.md?"

Assertions:

  • PROCEED is not written to REPORT.md or prototypes/index.md while a validation item is NO
  • The user, not the skill, chooses between PIVOT and KILL
  • The report names the failed validation item
  • PIVOT-NOTE.md is written only after its ask, with what worked, what failed and what the next slice should prove

Case 3: Mode Variant — CD-PLAYTEST in full, skipped in lean and solo

Fixture:

  • A slice has been debriefed with a PROCEED recommendation and REPORT.md written
  • Run A: modes.review_mode: full; CD-PLAYTEST returns APPROVE
  • Run B: modes.review_mode: lean
  • Run C: modes.review_mode: full, input /vertical-slice --review solo

Expected behavior:

  1. Run A: creative-director is spawned for CD-PLAYTEST after REPORT.md is written, with the REPORT.md content, the validation question and the pillars and core fantasy; APPROVE leaves PROCEED standing and REPORT.md unchanged
  2. Run B: no spawn; "CD-PLAYTEST skipped — Lean mode."
  3. Run C: --review solo overrides the resolved full; no spawn; "CD-PLAYTEST skipped — Solo mode."

Assertions:

  • Run A spawns CD-PLAYTEST only after REPORT.md exists, with the three inputs
  • Run A's APPROVE keeps the recommendation and triggers no REPORT.md update ask
  • Runs B and C spawn no director and print their skip notes
  • No other director gate is spawned in any run

Case 4: Edge Case — the slice is built but nobody has played it

Fixture:

  • The loop became demonstrable, but the user cannot play it through from scratch this session
  • modes.review_mode: full

Input: /vertical-slice

Expected behavior:

  1. The Phase 5 playthrough does not happen, so the verdict is NOT ASSESSED, with the reason
  2. REPORT.md, after its ask, records the velocity log and NOT ASSESSED; the prototypes/index.md row records NOT ASSESSED
  3. CD-PLAYTEST is not spawned: "CD-PLAYTEST skipped — the slice has not been played yet."
  4. Next steps: finish the playthrough and debrief from the active.md checkpoint, then update REPORT.md after asking; the slice is not taken to /gate-check production as if it had passed

Assertions:

  • The verdict is NOT ASSESSED — never PROCEED — and its reason is stated
  • NOT ASSESSED is ranked above PROCEED and below PIVOT and KILL
  • CD-PLAYTEST is not spawned for an unplayed slice, and the skip is announced
  • PROCEED's next steps are not offered

Case 5: Director Gate — CD-PLAYTEST returns REJECT, CONCERNS or NOT ASSESSED

Fixture:

  • A slice has been debriefed with a PROCEED recommendation and REPORT.md written; modes.review_mode: full; design/gdd/game-concept.md holds the pillars
  • Run A: CD-PLAYTEST returns REJECT — the core fantasy is not present. Asked PIVOT or KILL, the user picks KILL; no playtest session showed an emotional high point, and this is the third slice attempt on the concept
  • Run B: CD-PLAYTEST returns CONCERNS — the resolution beat undercuts a pillar; the user picks Accept with noted concerns
  • Run C: CD-PLAYTEST returns NOT ASSESSED — the pillars were missing from the context it received

Input: /vertical-slice

Expected behavior:

  1. Run A: the REJECT is read as the gate's word, not as a slice verdict. PROCEED cannot stand: the skill asks the user to choose PIVOT or KILL; the user picks KILL; after "May I update prototypes/[concept-name]-vertical-slice/REPORT.md and its prototypes/index.md row?" both record KILL and REPORT.md records the director's reason. Phase 8's KILL route runs: two checklist items apply, so the KILL is sound, and it asks "May I append this to prototypes/GRAVEYARD.md?"
  2. Run B: the concerns are shown beside PROCEED with Revise the recommendation / Accept with noted concerns / Discuss further; on Accept, PROCEED stands and, after the update ask, REPORT.md records the concerns
  3. Run C: the missing input is named; the gate is re-run with the pillars, or CD-PLAYTEST: NOT ASSESSED — [input] is recorded after the update ask; PROCEED is neither confirmed nor overturned by it

Assertions:

  • The director's answer is read as APPROVE / CONCERNS / REJECT / NOT ASSESSED — never as a PROCEED / PIVOT / KILL of its own
  • Run A: PROCEED is not kept after the REJECT; the user chooses PIVOT or KILL, and the director's reason is in REPORT.md
  • Run A: the GRAVEYARD.md entry is appended only after its ask, with a specific kill reason
  • Run B: the user decides; the recommendation changes only if the user revises it
  • Run C: NOT ASSESSED is not treated as APPROVE
  • Every REPORT.md / prototypes/index.md update follows an ask naming both

Protocol Compliance

  • Reads the concept (or the brief at minimal) before defining the validation question
  • Confirms scope before building; asks before recording the plan in active.md and before creating prototypes/[concept-name]-vertical-slice/
  • Keeps slice files under prototypes/, each with the VERTICAL SLICE - NOT FOR PRODUCTION header in its own comment syntax
  • Asks before writing REPORT.md (with its prototypes/index.md row), PIVOT-NOTE.md, GRAVEYARD.md and any post-gate report update
  • Never records PROCEED after a NO validation item, and never for a slice nobody has played
  • Applies the review mode before CD-PLAYTEST and prints the skip note when skipped
  • Ends with the per-verdict next steps

Coverage Notes

  • The multi-turn build loop, the day-3 sunk-cost stop and the day-by-day velocity log need a live run to verify.
  • Reading a prior PIVOT-NOTE.md on a re-run to frame the new validation question is not tested.
  • The rigor: minimal path (the brief's pitch and "what they feel" line in place of pillars) is not given its own fixture.
  • A KILL whose soundness checklist gives 0–1 items (one targeted PIVOT suggested instead) is not tested.
  • The networked-game limit (a local slice cannot validate network feel) is advisory text, not tested.