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
18 KiB
Skill Test Spec: /create-architecture
Skill Summary
/create-architecture produces the master architecture document,
docs/architecture/architecture.md. Phase 0 loads context and stops early when
a prerequisite is missing: the engine reference docs (no engine → /setup-engine),
design/gdd/systems-index.md (absent at standard/full → /map-systems),
and design/gdd/game-concept.md (absent → /brainstorm; at minimal the
one-page design/game-brief.md stands in). It extracts a Technical Requirements
Baseline (TR-[gdd-slug]-[NNN]) from the requirement-bearing sections of every
GDD, inventories existing ADRs from their headers, and shows an Engine Knowledge
Gap Inventory with an AskUserQuestion before authoring.
Phases 1–4 (layer map, module ownership, data flow, API boundaries) are each
presented and approved. Phase 5 audits existing ADRs and maps every baseline
requirement to ADR coverage; uncovered requirements become Required New ADRs.
Phase 7 asks "All sections approved. May I write the master architecture
document?" with [A]/[B]/[C] options. Phase 7b collects the TD-ARCHITECTURE and
LP-FEASIBILITY reviews, presents them side by side, and asks before recording
the sign-off in the Document Status section. Phase 8 updates
production/session-state/active.md and prints a fixed handoff template.
An existing docs/architecture/architecture.md is never replaced unasked:
Phase 0e offers to update chosen sections in place (raising the document's
version), to rewrite it, or to stop. Focus-area arguments (layers,
data-flow, api-boundaries, adr-audit) are that update with one section
chosen; with no document yet, they offer the full walkthrough instead.
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 sign-off verdict keywords in the gates' own words:
APPROVE,CONCERNS,FEASIBLE, and theREVISED after …records - Contains ask-before-write language: write approvals via
AskUserQuestion("May I write the master architecture document?", "May I update the Document Status section…") - Has a next-step handoff at the end (
/architecture-decision,/architecture-review,/create-control-manifest) - Documents one consistent write model for
docs/architecture/architecture.md— when the file is first created and when each approved section is written - Documents gate behavior: TD-ARCHITECTURE + LP-FEASIBILITY in full mode; each skipped in lean/solo with a named note
- Documents the stop branches for a missing engine, systems index and game concept
- Documents retrofit: an existing
docs/architecture/architecture.mdis detected, and updating chosen sections is offered before any rewrite
Director Gate Checks
Review mode comes from the resolved review_mode (modes.review_mode in
project.yaml); --review full|lean|solo overrides it for one run.
In full mode: after docs/architecture/architecture.md is written, TD-ARCHITECTURE
(technical-director) and LP-FEASIBILITY (lead-programmer) review it. Each is
a spawned agent that reads its own gate file
(.claude/docs/director-gates/td-architecture.md, lp-feasibility.md); their
inputs are independent, so they spawn together and both verdicts are collected
before Step 3 presents them. The parent never reads those files: it passes
TD-ARCHITECTURE the document path, the Technical Requirements Baseline (TR-IDs
and count), the ADR list with statuses and the Engine Knowledge Gap Inventory.
In lean mode: neither is a PHASE-GATE, so both are skipped. Output notes
"TD-ARCHITECTURE and LP-FEASIBILITY skipped — Lean mode."
In solo mode: both are skipped with "TD-ARCHITECTURE and LP-FEASIBILITY
skipped — Solo mode."
Test Cases
Case 1: Happy Path — New architecture document, full mode, reviews approve
Fixture:
project.yamlhasengine.name: Godot,modes.review_mode: full,modes.workflow: fulldocs/engine-reference/godot/hasVERSION.md,breaking-changes.md,deprecated-apis.md,current-best-practices.mdandmodules/design/gdd/game-concept.mdanddesign/gdd/systems-index.mdexist with real contentdesign/gdd/combat.mdanddesign/gdd/inventory.mdfollow the GDD templatedocs/architecture/adr-0001-event-bus.mdexists (Status: Accepted)- No
docs/architecture/architecture.md - TD-ARCHITECTURE returns APPROVE; LP-FEASIBILITY returns FEASIBLE
Input: /create-architecture
Expected behavior:
- Phase 0a reads the four engine docs and only the
modules/docs matching domains in the systems index - Phase 0b Greps the requirement-bearing sections of each GDD (Detailed Rules/Design, Formulas, Dependencies, Tuning Knobs, Acceptance Criteria) and presents the Technical Requirements Baseline with IDs such as
TR-combat-001 - Phase 0c builds the ADR inventory from
## Status/## Summaryand**Domain**Greps, not full reads - Phase 0d shows the Engine Knowledge Gap Inventory and asks
[A] Proceed — flag HIGH RISK domains…/[B] Let me check the engine reference first…/[C] Show me which domains are HIGH RISK and why - Phases 1–4: each proposal (layer map, ownership map, each data-flow scenario, API boundaries) is shown and approved before the next, and each approval is recorded in
production/session-state/active.md— nothing is written to the architecture document before Phase 7 - Phase 7: a one-paragraph summary, then "All sections approved. May I write the master architecture document?" with
[A] Yes — write…/[B] Show me the full draft inline first…/[C] Not yet… - Phase 7b: TD-ARCHITECTURE (passed the document path, the TR baseline, the ADR list with statuses and the knowledge gap inventory) and LP-FEASIBILITY review the written document; both assessments are shown side by side; the user chooses
Accept — proceed to handoff - The proposed Document Status block is shown, then "May I update the Document Status section with the sign-off results?"
- Phase 8 writes a summary to
production/session-state/active.mdand prints the handoff with the headings "Architecture Complete", "Run These ADRs Next", "Gate-Check Readiness"; its Then: line names/architecture-review, then/create-control-manifestonce the review passes, and the readiness block names/gate-check pre-production
Assertions:
- The baseline uses
TR-[gdd-slug]-[NNN]IDs and is built from the scanned GDD sections, not whole-file reads - The knowledge gap inventory and its three-option
AskUserQuestioncome before Phase 1 - Each section is shown before its approval is asked
- The master document is written only after the Phase 7
AskUserQuestionapproval - TD-ARCHITECTURE and LP-FEASIBILITY are each spawned as agents (
technical-director,lead-programmer) after the document is written, and both verdicts are collected before Step 3 - TD-ARCHITECTURE is passed its four context items by name; the parent session does not read the gate file
- The Document Status sign-off is written only after the "May I update" approval
- The handoff uses the fixed template headings, with no trailing commentary
- The handoff names
/gate-check pre-production— never a[stage]placeholder, which while this skill runs would resolve to the gate already passed docs/architecture/architecture.mdis not written, even in part, before the Phase 7 ask; Phases 2–4 approvals go to the session state
Case 2: Review Concerns — LP-FEASIBILITY returns CONCERNS
Fixture:
- Same as Case 1, up to Phase 7b
- LP-FEASIBILITY returns CONCERNS: "Save/load path has no owning module for serialisation"
- Scenario (a): TD-ARCHITECTURE returns APPROVE
- Scenario (b): TD-ARCHITECTURE returns NOT ASSESSED, naming a context item it could not read
Input: /create-architecture
Expected behavior:
- Step 3 shows the Technical Director assessment and the Lead Programmer verdict side by side, including the specific concern
AskUserQuestion:Accept — proceed to handoff/Revise flagged items first/Discuss specific concerns- If Accept: the proposed Document Status reads
LP-FEASIBILITY: [date] — CONCERNS (accepted), and is applied only after "May I update the Document Status section…" is answered yes - If Revise: the flagged section is re-drafted and approved as in Phases 1–4, the revised document is written once through Phase 7's ask, and the status then reads
LP-FEASIBILITY: [date] — REVISED after CONCERNS - The skill does not record
FEASIBLEfor a review that returned CONCERNS - (b) Step 4 proposes
TD-ARCHITECTURE: [date] — NOT ASSESSED — [missing input], neverAPPROVE, and the handoff's first line saysNOT ASSESSED
Assertions:
- The concern text is shown to the user alongside the TD assessment
- The user is offered Accept / Revise flagged items first / Discuss specific concerns
- Accepting records
CONCERNS (accepted), notFEASIBLE - A revision records
REVISED after CONCERNS, and the revised document is written once, after its sections are approved - No Document Status change is written without the "May I update" approval
- (b) A NOT ASSESSED review is recorded with its missing input and never as an approval
Case 3: Lean and Solo Modes — Both reviews skipped, written with user approval only
Fixture:
- Same project as Case 1, but scenario (a):
project.yamlhasmodes.review_mode: lean - Scenario (b): same project, invoked with
--review solo
Input: (a) /create-architecture (b) /create-architecture --review solo
Expected behavior:
- Phases 0–7 run as in Case 1; the document is written after the Phase 7 approval
- At Phase 7b neither review runs; output notes (a) "TD-ARCHITECTURE and LP-FEASIBILITY skipped — Lean mode." (b) "TD-ARCHITECTURE and LP-FEASIBILITY skipped — Solo mode."
- Step 4 shows the Document Status block with both lines
skipped — [mode] modeand asks before applying it; the skill then proceeds to the Phase 8 handoff without blocking on the skipped reviews
Assertions:
- Neither
technical-directornorlead-programmeris spawned, and no TD-ARCHITECTURE review is applied in lean or solo mode - The skip note names both gates and the mode
- (b) The
--review soloargument overrides the resolvedreview_modefor the run - The document is written on user approval alone, and completion is not blocked
- Document Status records both reviews as skipped in that mode (after its ask), so the document says why it has no sign-off
- The Phase 8 handoff is still printed
Case 3b: Review Rejects — Accept Is Not Offered
Fixture:
- Same project as Case 1 in
fullmode;technical-directorreturnsTD-ARCHITECTURE: REJECT(a Core system depends on a Presentation-layer module);lead-programmerreturnsLP-FEASIBILITY: FEASIBLE
Input: /create-architecture
Expected behavior:
- Both reviews are spawned in parallel at Phase 7b
- Step 3 shows
TD-ARCHITECTURE: REJECTandLP-FEASIBILITY: FEASIBLEside by side - The
AskUserQuestionoffersRevise flagged items firstandDiscuss specific concerns— notAccept - On
Revise flagged items first, the flagged sections are re-drafted and approved as in Phases 1–4, and the revised document is written once, through Phase 7's ask - Nothing is recorded as approved; Step 4 records
REVISED after REJECT, and the handoff's first line carries the same value
Assertions:
technical-directorandlead-programmercalls are issued before either result is awaitedAccept — proceed to handoffis not an option while a REJECT stands- The revised document is written once, after the re-drafted sections are approved — not section by section
- Document Status never shows TD-ARCHITECTURE as APPROVE for this run; the handoff line says
REVISED after REJECT
Case 4: Edge Case — Systems index missing or empty
Fixture:
- Engine configured;
design/gdd/game-concept.mdexists - Scenario (a):
modes.workflow: standard, nodesign/gdd/systems-index.md - Scenario (b):
modes.workflow: standard,design/gdd/systems-index.mdexists but contains only template placeholders - Scenario (c):
modes.workflow: minimal, no systems index, no game concept,design/game-brief.mdexists
Input: /create-architecture
Expected behavior:
- The skill checks both design files exist before reading either
- (a) Stops with: "No systems index found. Run
/map-systemsfirst…" — no baseline is built, no file is written - (b) Treats the placeholder-only index as absent and stops the same way
- (c) Says the systems index is not required at
minimal, readsdesign/game-brief.mdin place of the concept, and proceeds
Assertions:
- (a) The skill stops with the
/map-systemsmessage and writes nothing - (b) A present-but-placeholder systems index is treated as absent
- (c) At
minimalthe skill says the index is not required and proceeds from the game brief - At
standard(a, b), no run continues past Phase 0b with a missing design file; atminimal(c) the brief stands in for both, and the run stops only if it is absent too
Case 5: ADR Audit — Proposed ADRs and uncovered requirements
Fixture:
- Same as Case 1, plus
docs/architecture/adr-0002-save-format.mdwithStatus: Proposed - Also
design/gdd/crafting.md, written before the GDD template, with none of the scanned section headings - Baseline requirement
TR-combat-002(combo state machine) is not covered by any ADR's GDD Requirements Addressed section or decision text
Input: /create-architecture
Expected behavior:
- Phase 0b's section Grep matches nothing in
crafting.md, so the skill full-reads it, says so, and its requirements enter the baseline asTR-crafting-NNN— a zero-match GDD is never treated as having no requirements - Phase 0c lists ADR-0001 (Accepted) and ADR-0002 (Proposed) with their domains
- Phase 5 shows the ADR quality table and the traceability table, marking
TR-combat-002as❌ GAP, with a covered/gap count - The gap is listed under Required New ADRs, grouped by layer with Foundation first, as
/architecture-decision [title] → covers: TR-combat-002 - Phase 8's "Gate-Check Readiness" lists ADR-0002 under "Accept ADRs" and the unwritten ADRs under "Write ADRs"
- "Run These ADRs Next" lists at most three ADRs from Phase 6, in priority order
Assertions:
crafting.md, which matched no scanned section, is full-read and reported, and contributes TR-IDs to the baseline- ADR statuses come from the header scan and ADR-0002 is reported as Proposed
TR-combat-002is marked as a GAP and becomes a Required New ADR naming the TR-ID it covers- Required New ADRs are grouped by layer, Foundation first
- "Gate-Check Readiness" lists ADR-0002 under "Accept ADRs"
- "Run These ADRs Next" lists no more than three entries
Case 6: Existing Architecture Document — Update in place, never overwritten unasked
Fixture:
- Same project as Case 1, but
project.yamlhasmodes.review_mode: lean - Scenario (a):
docs/architecture/architecture.mdexists atVersion: 2with every section written; the user picks[A] Update chosen sections in placeand chooses Data Flow - Scenario (b): no
docs/architecture/architecture.md; the input is/create-architecture layers
Input: (a) /create-architecture (b) /create-architecture layers
Expected behavior:
- (a) Phase 0e finds the document, reads its Document Status and headings, and asks "An architecture document already exists (v2, [last updated]). What should this run do?" with
[A] Update chosen sections in place/[B] Rewrite the whole document — replaces the existing file/[C] Stop - (a) Only Phase 3 (Data Flow) is authored; the output says which phases were skipped
- (a) Phase 7's ask names the Data Flow section and the change from v2 to v3; on yes, only
## Data Flowis replaced, withEdit, andVersionbecomes 3 - (a) Every other section of the document is unchanged, and the handoff names v3
- (b) The skill says there is no architecture document for the
layersfocus area to update, and offers the full walkthrough instead; nothing is written before the user answers
Assertions:
- (a) The existing document is detected before any authoring, and replacing it is only ever the user's explicit
[B]choice - (a) Only the chosen section is re-authored and written; the other sections are left as they were
- (a) The version is raised, not reset to v1.0
- (b) A focus-area run with no document writes nothing and offers the full walkthrough
Protocol Compliance
- Stops before authoring when the engine is missing, or on a
standard/fullproject when the systems index or game concept is missing; atminimalit proceeds fromdesign/game-brief.mdand stops only when that is absent too - Every section is shown in full before its approval is asked
- Write approvals use
AskUserQuestionwith labeled options, not plain-text asks - Follows one consistent write model for
docs/architecture/architecture.md, and never replaces an existing one without the user choosing to - TD-ARCHITECTURE and LP-FEASIBILITY run only in full mode; lean/solo print a skip note naming each gate and the mode
- The Document Status sign-off is recorded only after the "May I update" approval
- Ends with the fixed handoff template and next steps (
/architecture-decision,/architecture-review,/create-control-manifest)
Coverage Notes
- Of the focus-area arguments, only
layerswith no existing document is fixture-tested (Case 6 b). A focus-area run against an existing document follows Case 6 (a)'s update path but is not tested on its own. - The "no engine configured" stop is asserted structurally only.
workflow: standard(a system layer map and the critical ADR list only) is not fixture-tested past Phase 0b; Case 4 exercises only its stop branches.docs.densitydepth variations andguided/autonomousautomation modes are not tested.