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
16 KiB
Skill Test Spec: /team-combat
Skill Summary
Orchestrates the full combat team pipeline end-to-end for a single combat feature.
Coordinates game-designer, gameplay-programmer, ai-programmer, technical-artist,
sound-designer, the primary engine specialist, and qa-tester through six structured
phases: Design → Architecture (with engine specialist validation) → Implementation
(parallel) → Integration → Validation → Sign-off. Phase 0 resolves review_mode,
automation, team.size and workflow (which sizes the GDD); the full pipeline runs at team.size: small and above,
while the default individual runs gameplay-programmer alone (ai-programmer only if
AI work is flagged) and announces that collapse before Phase 1. Uses
AskUserQuestion at each phase transition, with an explicit [A]/[B]/[C] architecture
gate before implementation. Every agent writes to a destination named in the skill's
path table; the orchestrator's only write is the GDD, design/gdd/[feature].md,
from the game-designer's draft after a "May I write" approval. Produces a summary report with
verdict COMPLETE / NEEDS WORK / BLOCKED and handoffs to /code-review,
/balance-check, and /team-polish.
Static Assertions (Structural)
- Has required frontmatter fields:
name,description,argument-hint,user-invocable,allowed-tools - Has ≥2 phase headings (Phase 1 through Phase 6 are all present)
- Contains verdict keywords: COMPLETE, NEEDS WORK, BLOCKED
- Contains "File Write Protocol" — sub-agent drafts and QA artifacts stay inside the bounded exception, and implementation files (code root,
assets/) are outside it, asked for once as a set; the one orchestrator write isdesign/gdd/[feature].md, after its own "May I write" ask, becausedesign/is outside the exception - Names a concrete destination per phase:
production/combat/[feature]-gdd-draft.md(the game-designer's draft ofdesign/gdd/[feature].md),docs/architecture/[feature]-sketch.md,docs/architecture/[feature]-engine-notes.md,production/qa/test-cases/[feature]-cases.md,production/qa/bugs/BUG-[NNNN].md - Defines a phase gate as a decision point the pipeline itself lists, whatever the
automationmode, and claims no director spawn at phase gates - Has a next-step handoff at the end (references
/code-review,/balance-check,/team-polish) - Error Recovery Protocol section is present: verify a named artifact is on disk before treating a phase as done, surface BLOCKED immediately, always produce a partial report, full procedure (surface → assess → options → partial report) in
.claude/docs/error-recovery-protocol.md - Uses
AskUserQuestionat phase transitions for user approval before proceeding (collaborativemode) - Phase 0 resolves
team.size, and the skill requires a one-line active-set announcement before Phase 1 - Phase 0 resolves
workflow, and Phase 1 sizes the GDD by it:## Summaryplus all 8 sections atfull, the 5 standard sections plus Formulas for numeric rules atstandard, optional atminimal(the game brief is the record) - Phase 3 is explicitly marked as parallel (gameplay-programmer, ai-programmer, technical-artist, sound-designer)
- Phase 2 includes spawning the primary engine specialist, derived from
engine.nameinproject.yaml(Godot →godot-specialist), falling back to the Primary line in.claude/docs/technical-preferences.md - Team Composition lists all seven roles (game-designer, gameplay-programmer, ai-programmer, technical-artist, sound-designer, engine specialist, qa-tester)
Test Cases
Case 1: Happy Path — All agents succeed, full pipeline runs to completion
Fixture:
- Resolved config block:
team.size: small,automation: collaborative,workflow: full design/gdd/game-concept.mdexists and is populatedengine.nameinproject.yamlis Godot- No existing GDD for the requested combat feature
- The feature involves NPC reactions (enemies parry and riposte), so AI work is flagged
Input: /team-combat parry and riposte system
Expected behavior:
- Before any spawn, one line announces the active set for
team.size: small(the full Team Composition pipeline) - Phase 1 — game-designer spawned; drafts the design to
production/combat/parry-riposte-gdd-draft.mdcovering all 8 required sections (overview, player fantasy, rules, formulas, edge cases, dependencies, tuning knobs, acceptance criteria);AskUserQuestionpresents the draft and asks "May I write the design document todesign/gdd/parry-riposte.md?"; the orchestrator writes it on approval - Phase 2 — gameplay-programmer + ai-programmer spawned; produce architecture sketch with class structure, interfaces, and file list (
docs/architecture/parry-riposte-sketch.md); thengodot-specialistis spawned to validate idioms (docs/architecture/parry-riposte-engine-notes.md); engine specialist output incorporated AskUserQuestion"Architecture sketch complete. Approve to proceed with parallel implementation." with options [A] Proceed / [B] Revise the architecture first / [C] Stop here — implementation agents spawn only on [A]- Phase 3 — gameplay-programmer, ai-programmer, technical-artist, sound-designer spawned in parallel; the three implementing agents return the files they will create or change, one
AskUserQuestionasks for the whole set, and they write only after a yes; sound-designer drafts its event list toproduction/combat/parry-riposte-audio-events.md; all four return before Phase 4 begins - Phase 4 — integration wires together all Phase 3 outputs; tuning knobs verified as data-driven;
AskUserQuestionconfirms integration before Phase 5 - Phase 5 — qa-tester spawned; writes test cases from acceptance criteria to
production/qa/test-cases/parry-riposte-cases.md; verifies edge cases; performance impact checked against budget - Phase 6 — summary report produced: design status, implementation status per team member, test results, open issues; verdict: COMPLETE
- Next steps listed:
/code-review,/balance-check,/team-polish
Assertions:
- Active-set line naming
team.size: smallappears before the first agent is spawned AskUserQuestioncalled at each phase transition (at minimum before Phase 3 and before Phase 5)- The pre-Phase 3 gate offers [A] Proceed / [B] Revise / [C] Stop, and no implementation agent is spawned unless [A] is chosen
- Phase 3 agents launched simultaneously — no sequential dependency between gameplay-programmer, ai-programmer, technical-artist, sound-designer
- Engine specialist runs in Phase 2 before Phase 3 begins (output incorporated into architecture)
- Each agent prompt names its destination from the path table; no sub-agent writes under
design/ - No implementation file (code root,
assets/) is written before one ask covering the whole Phase 3 set - Nothing is written under
design/before the Phase 1 "May I write" approval, and the orchestrator's only Write isdesign/gdd/parry-riposte.md - Verdict COMPLETE present in final report
- Next steps include
/code-review,/balance-check,/team-polish - Design doc covers all 8 required GDD sections
Case 2: Blocked Agent — One subagent returns BLOCKED mid-pipeline
Fixture:
- Resolved config block:
team.size: small,automation: collaborative design/gdd/parry-riposte.mdexists (Phase 1 already complete)- ai-programmer agent returns BLOCKED because no AI system architecture ADR exists (ADR status is Proposed)
Input: /team-combat parry and riposte system
Expected behavior:
- Phase 1 — design doc found; game-designer confirms it is valid; phase approved
- Phase 2 — gameplay-programmer completes architecture sketch; ai-programmer returns BLOCKED: "ADR for AI behavior system is Proposed — cannot implement until ADR is Accepted"
- Error Recovery Protocol triggered: "ai-programmer: BLOCKED — AI behavior ADR is Proposed"
AskUserQuestionpresented with options: (a) Skip ai-programmer and note the gap; (b) Retry with narrower scope; (c) Stop here and run/architecture-decisionfirst- If user chooses (a): Phase 3 proceeds with gameplay-programmer, technical-artist, sound-designer only; ai-programmer gap noted in partial report
- Final report produced: partial implementation documented, ai-programmer section marked BLOCKED, overall verdict: BLOCKED
Assertions:
- BLOCKED surface message appears before any dependent phase continues
AskUserQuestionoffers at minimum three options: skip / retry / stop- Partial report produced — completed agents' work is not discarded
- Overall verdict is BLOCKED (not COMPLETE) when any agent is unresolved
- Blocked reason references the ADR and suggests
/architecture-decision - Orchestrator does not silently proceed past the blocked dependency
Case 3: No Argument — Clear usage guidance shown
Fixture:
- Any project state
Input: /team-combat (no argument)
Expected behavior:
- Skill detects no argument provided
- Outputs usage message explaining the required argument (combat feature description)
- Shows the invocation format
/team-combat [combat feature description] [--review full|lean|solo]with examples (melee parry system,ranged weapon spread) - Skill exits without spawning any subagents
Assertions:
- Skill does NOT spawn any subagents when no argument is given
- Usage message shows the full argument-hint:
/team-combat [combat feature description] [--review full|lean|solo] - Error message includes at least one example of a valid invocation
- No file reads beyond what is needed to detect the missing argument
- Verdict is NOT shown (pipeline never runs)
Case 4: Parallel Phase Validation — Phase 3 agents run simultaneously
Fixture:
- Resolved config block:
team.size: small,automation: collaborative design/gdd/parry-riposte.mdexists, is complete, and flags enemy AI reactions- Architecture sketch has been approved with option [A]
- Engine specialist has validated architecture
Input: /team-combat parry and riposte system (resuming from Phase 2 complete)
Expected behavior:
- Phase 3 begins after architecture approval
- All four Agent calls — gameplay-programmer, ai-programmer, technical-artist, sound-designer — are issued before any result is awaited
- Skill waits for all four agents to complete before proceeding to Phase 4
- If any single agent completes early, skill does not begin Phase 4 until all four have returned
Assertions:
- Four Agent calls issued in a single batch (no sequential waiting between them)
- Phase 4 does not begin until all four Phase 3 agents have returned results
- Skill does not pass one Phase 3 agent's output as input to another Phase 3 agent (they are independent)
- All four Phase 3 agent results referenced in the Phase 4 integration step
Case 5: Architecture Phase Engine Routing — Engine specialist resolved from config
Fixture (variant A — engine configured):
- Resolved config block:
team.size: small,automation: collaborative engine.nameinproject.yamlis Godot; engine version pinned indocs/engine-reference/godot/VERSION.md- Architecture sketch produced by gameplay-programmer is available, and the orchestrator has read it
Fixture (variant B — no engine configured):
- As variant A, except
engine.nameis unset inproject.yamland.claude/docs/technical-preferences.mdhas no Primary engine specialist (shows[TO BE CONFIGURED])
Input: /team-combat parry and riposte system
Expected behavior (variant A):
- Phase 2 — gameplay-programmer produces architecture sketch
- Skill derives the primary engine specialist from
engine.name(Godot →godot-specialist);technical-preferences.mdis consulted only ifengine.nameis absent - Engine specialist is spawned with a distilled brief of the architecture sketch (not a path to a document the orchestrator has already read) and asked the three Phase 2 questions: idiomatic class/node structure, engine-native systems to prefer, APIs deprecated or changed in the pinned engine version
- Engine specialist writes its notes to
docs/architecture/parry-riposte-engine-notes.md; the orchestrator checks the file exists before treating the step as done - Orchestrator incorporates engine notes into the architecture before presenting Phase 2 results to user
AskUserQuestionarchitecture gate includes engine specialist's notes alongside the architecture sketch
Expected behavior (variant B):
- Phase 2 — gameplay-programmer produces architecture sketch
- No engine specialist is spawned and no engine-notes file is expected
- The run output records
Engine validation: NOT ASSESSED — no engine configured (engine.name unset in project.yaml) - The architecture gate still runs; it presents the sketch without describing it as engine-validated
- When the run completes, the verdict is
COMPLETE — engine validation NOT ASSESSED (no engine configured)
Assertions:
- Engine specialist agent type is derived from
engine.name(falling back totechnical-preferences.md) — not hardcoded (variant A) - Because the orchestrator has already read the sketch, the engine specialist's brief carries the relevant sketch content inline rather than the sketch's path (variant A)
- Engine specialist checks for deprecated or changed APIs against the pinned engine version (variant A)
- Engine specialist output is incorporated before Phase 3 begins (not skipped or appended separately) (variant A)
- The engine specialist is not spawned and the run output records
Engine validation: NOT ASSESSED — no engine configured— the skip is never silent (variant B) - The architecture is never described as engine-validated when no specialist ran (variant B)
- When the run completes, its verdict reads
COMPLETE — engine validation NOT ASSESSED ([reason])— never a plain COMPLETE (variant B)
Protocol Compliance
- At the default
team.size: individual, the run opens with anActive set (team.size: individual): gameplay-programmerline and aNot spawned this run:line naming game-designer, technical-artist, sound-designer, the engine specialist and qa-tester (ai-programmer too unless AI work is flagged) — before any agent is spawned - In
collaborativemode,AskUserQuestionused at each phase transition — user approves before pipeline advances - Sub-agent writes are delegated via Agent — drafts and QA artifacts inside the bounded exception, implementation files only after one ask for the whole set; the orchestrator writes only
design/gdd/[feature].md, after a "May I write" approval - Error Recovery Protocol followed: surface → assess → offer options → partial report
- A phase whose named artifact is missing on disk is treated as failed, not done
- Phase 3 agents launched in parallel per skill spec
- Partial report always produced even when agents are BLOCKED
- Verdict is one of COMPLETE / NEEDS WORK / BLOCKED
- Next steps present at end of output:
/code-review,/balance-check,/team-polish - At
team.size: studio, the primary engine specialist's prompt allows its sub-specialists, Phase 5's qa-tester is told to find how the feature breaks rather than confirm it works, and the report says the adversarial pass ran; belowstudioneither addition appears
Coverage Notes
- The NEEDS WORK verdict path (qa-tester finds failures in Phase 5) is not separately tested here; it follows the same error recovery and partial report protocol as Case 2.
- "Retry with narrower scope" error recovery option is listed in assertions but its full
recursive behavior (splitting via
/create-stories) is covered by the/create-storiesspec. - Phase 4 integration logic (wiring gameplay, AI, VFX, audio) is validated implicitly by the Happy Path case; a dedicated integration test would require fixture code files.
- Engine specialist unavailable (no engine configured) is covered by Case 5 variant B.
- The
studioadditions (engine sub-specialists, adversarial review pass) are asserted in Protocol Compliance but not given their own case.