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: /map-systems
Skill Summary
/map-systems decomposes a game concept into a systems index. It reads
design/gdd/game-concept.md (at minimal, design/game-brief.md) and the pillars,
enumerates explicit and implicit systems, maps dependencies into layers
(Foundation → Core → Feature → Presentation → Polish), assigns priority tiers
(MVP / Vertical Slice / Alpha / Full Vision), derives a design order, and writes
design/gdd/systems-index.md from .claude/docs/templates/systems-index.md after
approval. Each collaborative phase ends with an AskUserQuestion.
Three director gates run in sequence, each in its own phase:
TD-SYSTEM-BOUNDARY (technical-director) after the dependency map is approved,
PR-SCOPE (producer) after priorities are approved and before the write, and
CD-SYSTEMS (creative-director) after the index is written. In lean and solo
each is skipped with a named note. It is required before /design-system at
standard/full and optional at minimal. Verdicts: COMPLETE (index written) or
BLOCKED (user declined the write).
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: COMPLETE, BLOCKED
- Contains "May I write" collaborative protocol language (for
design/gdd/systems-index.md) - Has a next-step handoff at the end (
/design-system) - Documents three gates at their phases: TD-SYSTEM-BOUNDARY (Phase 3), PR-SCOPE (Phase 4), CD-SYSTEMS (Phase 5, after the write)
Director Gate Checks
In full mode, sequentially:
- TD-SYSTEM-BOUNDARY (
technical-director) — after the dependency ordering is approved, before priority assignment. REJECT → revise boundaries with the user; CONCERNS → noted inline in the index. - PR-SCOPE (
producer) — after priorities are approved, before the index is written. UNREALISTIC → offer to revise tier assignments before writing; OPTIMISTIC → show the suggested adjustments and ask whether to apply them. - CD-SYSTEMS (
creative-director) — after the index is written; it receives the index path, the pillars and core fantasy (the brief's pitch and "what they feel" line atminimal), every tier's assignments and the high-risk and bottleneck systems. REJECT → revise the system set before GDD authoring; CONCERNS →AskUserQuestion(Revise the system set/Accept — record them in the index/Discuss further); on Accept they are recorded as a> **Creative Director Note** (<tier>): …directly beneath the## Priority Tierstable.
Any of the three may answer NOT ASSESSED [missing input]; it is never read as
approval — the input is supplied and the gate re-run, or the run goes on with
[GATE-ID]: NOT ASSESSED — [input] recorded in the index.
In lean mode each is skipped with a note: "TD-SYSTEM-BOUNDARY skipped — Lean
mode.", "PR-SCOPE skipped — Lean mode.", "CD-SYSTEMS skipped — Lean mode."
In solo mode the same three notes appear with "Solo mode."
Test Cases
Case 1: Happy Path — Concept decomposed and index written in full review mode
Fixture:
project.yaml:modes.workflow: standard,modes.review_mode: fulldesign/gdd/game-concept.mdexists with Core Mechanics naming combat and an inventory, and an MVP Definition sectiondesign/gdd/game-pillars.mdexists with 2 pillars- No
design/gdd/systems-index.mdexists yet - TD-SYSTEM-BOUNDARY returns APPROVE, PR-SCOPE returns REALISTIC, CD-SYSTEMS returns APPROVE
Input: /map-systems
Expected behavior:
- Reads the concept and pillars; globs
design/gdd/*.md - Presents systems by category — name, category, one-sentence description, explicit or implicit (e.g. combat implies health, damage calculation, hit detection, combat UI) — and asks about missing / combined / unneeded systems
- Presents the layered dependency map (bottlenecks, leaf nodes, any cycles) and asks "Does this dependency ordering look right?…"
- After approval spawns TD-SYSTEM-BOUNDARY, passing the dependency graph (each system → what it depends on), the layer assignments, the bottleneck systems and any cycles with their proposed resolutions
- Presents priority tiers with reasoning that cites this project's pillars; after approval spawns PR-SCOPE
- Presents the summary (counts by category, MVP count, first 3 in design order,
high-risk items) and asks "May I write the systems index to
design/gdd/systems-index.md?" - Writes the index, then spawns CD-SYSTEMS with the index path, pillars/core fantasy, every tier's system assignments and the high-risk and bottleneck systems
- Updates
production/session-state/active.md; Verdict: COMPLETE; offers/design-system [first-system-in-order]
Assertions:
- Implicit systems are inferred and labelled implicit, with the reason given
- TD-SYSTEM-BOUNDARY spawns after the dependency map is approved and before priorities are presented, and is passed the full dependency graph — not a summary
- PR-SCOPE spawns after priorities are approved and before the write ask
- "May I write the systems index to
design/gdd/systems-index.md?" is asked and nothing is written before approval - CD-SYSTEMS spawns only after the index is written, and receives all four tiers and the high-risk systems — not the MVP list alone
- The Systems Enumeration table keeps the template's columns (
# / System Name / Category / Priority / Status / Design Doc / Depends On) — no added column active.mdis updated and the verdict is COMPLETE
Case 2: Failure Path — No game concept found
Fixture:
project.yaml:modes.workflow: standard- Neither
design/gdd/game-concept.mdnordesign/game-brief.mdexists
Input: /map-systems
Expected behavior:
- Phase 1 finds no concept
- Skill outputs: "No game concept found. Run
/brainstormfirst to create one, then come back to decompose it into systems." - Skill stops — no enumeration, no gates, no index
Assertions:
- The "No game concept found" message is printed
- Skill recommends
/brainstormas the next action - No systems enumeration is presented and no gate is spawned
- No
design/gdd/systems-index.mdis created and Verdict COMPLETE is not emitted
Case 3: Director Gate — CD-SYSTEMS returns CONCERNS after the write
Fixture:
- Game concept and pillars exist; no index yet
project.yaml:modes.workflow: standard,modes.review_mode: full- TD-SYSTEM-BOUNDARY returns APPROVE, PR-SCOPE returns REALISTIC
- CD-SYSTEMS returns CONCERNS: an MVP system implied by the core fantasy is missing
- At the CONCERNS question the user picks
Accept — record them in the index
Input: /map-systems
Expected behavior:
- The index is written after "May I write" approval
- CD-SYSTEMS is spawned and returns CONCERNS
- The concerns are shown with
AskUserQuestion:Revise the system set/Accept — record them in the index/Discuss further - On Accept, the concern is recorded in the index as
> **Creative Director Note** (MVP): …directly beneath the## Priority Tierstable - Session state is updated; Verdict: COMPLETE
Assertions:
- CD-SYSTEMS is spawned only after the index is written, not before the write ask
- The CONCERNS go to the user as a choice — the index is not edited before the user picks
- Only the Accept choice, which names the edit, leads to the note being written; it sits directly beneath the
## Priority Tierstable and names the MVP tier - Had the user picked
Revise the system set, the affected systems would be reworked with the user and the re-write of the index asked again - CONCERNS do not trigger a full re-decomposition (that path is REJECT's)
- Verdict is COMPLETE
Case 4: Edge Case — Systems index already exists
Fixture:
project.yaml:modes.workflow: standarddesign/gdd/game-concept.mdexistsdesign/gdd/systems-index.mdalready exists with 8 systems, 3 of them designed
Input: /map-systems
Expected behavior:
- Skill reads the existing index and presents its current status
- Skill asks: "The systems index already exists with 8 systems (3 designed, 5 not started). What would you like to do?" with "Update the index with new systems", "Design the next undesigned system", "Review and revise priorities"
- User chooses an action
- Skill resumes from the existing index rather than recreating it
Assertions:
- Skill detects and reads the existing index before proceeding
- The system count with designed / not-started split is presented
- All three options are offered — the index is not auto-overwritten
- Skill does NOT re-run a full decomposition from scratch without the user choosing to
Case 5: Director Gate — Lean and solo modes skip all three gates, noted
Fixture (lean mode):
- Game concept exists
project.yaml:modes.workflow: standard,modes.review_mode: lean
Lean mode expected behavior:
- Systems, dependencies and priorities are presented and approved as in Case 1
- Notes "TD-SYSTEM-BOUNDARY skipped — Lean mode." and "PR-SCOPE skipped — Lean mode." at their phases
- "May I write" is asked; the index is written after approval
- Notes "CD-SYSTEMS skipped — Lean mode."
- Session state is updated and Verdict: COMPLETE is printed
Assertions (lean mode):
- All three skip notes appear, each at its own phase
- No director agent is spawned
- The "May I write" ask still precedes the write
active.mdis updated and Verdict: COMPLETE is printed even though CD-SYSTEMS was skipped
Fixture (solo mode):
- Same concept,
project.yaml:modes.workflow: standard,modes.review_mode: full - Input:
/map-systems --review solo
Solo mode expected behavior:
--review solooverrides the resolvedfull- The same three gates are skipped, noted with "Solo mode."
Assertions (solo mode):
- All three skip notes carry the "Solo mode." label
- Behavior is otherwise identical to lean mode for this skill
Case 6: Guided mode — a new index is still asked for; an update is not
Fixture (new index):
project.yaml:modes.workflow: standard,modes.review_mode: solo,modes.automation: guided- Game concept exists; no
design/gdd/systems-index.md
Fixture (update):
- Same, but
design/gdd/systems-index.mdexists and the user chose "Update the index with new systems"
Input (both fixtures): /map-systems
Expected behavior:
- New index: after the summary, asks "May I write the systems index to
design/gdd/systems-index.md?" and writes only after yes —guidedasks "May I write?" for new files - Update: presents the summary, names
design/gdd/systems-index.md, writes the update without waiting for an explicit yes, and says what it wrote
Assertions:
- New index at
guided: the write ask is shown and nothing is written before it is answered - Update at
guided: no write ask; the summary and destination are shown before the write and the result is reported after it
Case 7: Director Gate — TD-SYSTEM-BOUNDARY returns REJECT
Fixture:
project.yaml:modes.workflow: standard,modes.review_mode: full- Game concept and pillars exist; no index yet
- TD-SYSTEM-BOUNDARY returns REJECT: two systems share one responsibility and must be merged
Input: /map-systems
Expected behavior:
- The dependency map is approved and TD-SYSTEM-BOUNDARY is spawned
- The REJECT is presented, naming the two systems
- The boundaries are revised with the user; the revised dependency map is shown
- Only then are priorities presented and PR-SCOPE spawned
Assertions:
- Priority assignment does not start while the REJECT is unresolved
- The revised boundaries are shown to the user before priorities are presented
- PR-SCOPE is not spawned and nothing is written before the revision
- The REJECT is not recorded as a note and passed over — that handling is CONCERNS'
Protocol Compliance
- Reads the game concept (or brief at
minimal) and pillars before any decomposition AskUserQuestionat enumeration, dependencies, priorities and the write- "May I write the systems index to
design/gdd/systems-index.md?" asked before writing — atcollaborative, and atguidedfor a new index - CD-SYSTEMS's CONCERNS reach the written index only through the user's choice; TD-SYSTEM-BOUNDARY's CONCERNS are noted inline in the index
- Gates run sequentially at their own phases in full mode, never before their inputs exist
- Skipped gates noted by name and mode in lean/solo output
- Ends with next-step handoff:
/design-system [next-system]
Coverage Notes
- Circular dependency detection and its proposed resolutions are part of Phase 3 — not independently fixture-tested here.
- PR-SCOPE UNREALISTIC, the CD-SYSTEMS REJECT path and a NOT ASSESSED answer from any of the three gates are not given fixtures.
autonomous(records the enumeration vialog_decisionand writes without asking) is not tested.- The
nextand[system-name]argument modes (handoff to/design-system) are not tested here — they are post-index conveniences. docs.densitydepth (where per-system prose goes) is not fixture-locked.