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
12 KiB
Skill Test Spec: /architecture-review
Skill Summary
/architecture-review is an Opus-tier skill that checks whether the whole body
of architectural decisions covers the game's design. It extracts technical
requirements (TR-IDs) from every GDD, maps each one to the ADRs that cover it
in a traceability matrix, detects cross-ADR conflicts, orders ADRs by
dependency (via .claude/scripts/adr-dep-graph.sh), audits engine
compatibility against docs/engine-reference/, consults the primary engine
specialist, and checks docs/architecture/architecture.md coverage of the
systems index. It produces a PASS / CONCERNS / NOT ASSESSED / FAIL verdict.
It takes a focus argument (full by default, or coverage, consistency,
engine, single-gdd [path], rtm). After the report, it asks via
AskUserQuestion before writing the review report
(docs/architecture/architecture-review-[date].md), the traceability index and
docs/architecture/tr-registry.yaml. It is the quality gate between Technical
Setup and Pre-Production.
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: PASS, CONCERNS, NOT ASSESSED, FAIL
allowed-toolsincludes Write, so write-approval language is present ("May I update the systems index?", "May I updatedocs/architecture/tr-registry.yaml…")- Has a next-step handoff at the end (Phase 9)
- Documents the argument modes:
full,coverage,consistency,engine,single-gdd [path],rtm
Director Gate Checks
None. This skill resolves no review_mode (its config block requests only
automation and workflow) and spawns no director gate. The only agent it
spawns is the primary engine specialist in Phase 5. The architecture sign-off
gates (TD-ARCHITECTURE, LP-FEASIBILITY) belong to /create-architecture, not to
this skill.
Test Cases
Case 1: Happy Path — every requirement covered by an Accepted ADR
Fixture:
project.yamlsetsmodes.workflow: full,engine.name: Godot,engine.version: 4.6design/gdd/systems-index.mdplus two system GDDs (combat.md,inventory.md), each with a## Summaryand technical requirements in its Detailed Rulesdocs/architecture/adr-0001-*.md…adr-0003-*.md, each with## Status: Accepted,## GDD Requirements Addressed,## Engine Compatibilityand## ADR Dependencies, whose**Depends On**row is filled in —Noneforadr-0001,ADR-0001foradr-0002andadr-0003— soadr-dep-graph.shfinds real edges and lists no ADR underNO_DEPS_SECTION; together they cover every requirement; no two contradictdocs/architecture/architecture.mdexists and names every system in the index- No prior
docs/architecture/architecture-review-*.mdreport - Pre-gate items all exist:
tests/unit/,tests/integration/(the Godot test root),.github/workflows/tests.yml,design/accessibility-requirements.md,design/ux/interaction-patterns.md
Input: /architecture-review
Expected behavior:
- Freshness check prints
RECEIPT: NONE→ full review - Skill counts the denominators (N_gdd, N_adr), loads the needed sections with targeted Greps rather than whole files, and reports "Loaded [N] GDDs, [M] ADRs, engine: Godot 4.6"
- Skill extracts TR-IDs (reusing any existing
tr-registry.yamlIDs) and builds the matrix - Skill runs
bash .claude/scripts/adr-dep-graph.shand prints the recommended implementation order - Skill runs the engine audit and consults
godot-specialist - Report ends with
### Verdict: PASS - Phase 8 asks what to write; Phase 9 offers
/gate-check pre-production
Assertions:
- Output reports "Loaded [N] GDDs, [M] ADRs, engine: [name + version]"
- A Traceability Matrix lists each TR-ID with its GDD, system, requirement, ADR coverage and status; every row is ✅
- The ADR dependency order comes from
adr-dep-graph.sh, not hand-tracing, and putsadr-0001first;NO_DEPS_SECTIONis empty, so the acyclic result is a clean graph rather than a structural gap - Verdict is PASS only because all requirements are covered by Accepted ADRs, no conflicts exist, and engine references agree
- The report includes the
review-receipts.sh hashlines for the ADRs and GDDs reviewed - No file is written before the Phase 8
AskUserQuestion([A]all three files /[B]report only atdocs/architecture/architecture-review-[date].md/[C]nothing yet) - The closing widget offers
/gate-check pre-production, because every pre-gate checklist item is ✅
Case 2: Failure Path — Foundation gap plus a cross-ADR ownership conflict
Fixture:
- As Case 1, except:
save-system.md(a Foundation-layer system) requires "Player progress persists between sessions" and no ADR addresses itadr-0002andadr-0004are both Accepted and both claim authority over the player's health value
Input: /architecture-review
Expected behavior:
- The persistence requirement appears as a
❌ GAProw - The gap appears under "Coverage Gaps" with a suggested
/architecture-decision [title], Domain and Engine Risk - A conflict block
## Conflict: [ADR-0002] vs [ADR-0004]is printed - Verdict is FAIL; Blocking Issues list at least the Foundation gap
- Neither ADR is edited; the user decides the resolution
Assertions:
- Verdict is FAIL (a Foundation-layer requirement is uncovered)
- The gap row names the TR-ID, GDD and requirement, with a suggested
/architecture-decisioncommand - The conflict block names both ADR numbers, a Type (State / Data ownership), what each ADR claims, the Impact, and at least two resolution options
- Skill does NOT auto-resolve the conflict or edit either ADR
- If
docs/consistency-failures.mdexists, the Phase 8[A]option names it ("…and append 1 conflict entry todocs/consistency-failures.md") and the entry is appended only when the user picks[A];[B](report only) writes the report and nothing else; if the file does not exist, it is not created - The closing widget does not offer
/gate-check; it offers writing the missing ADR via/architecture-decision [system]
Case 3: Partial Path — coverage resting on a Proposed ADR
Fixture:
- As Case 1, except
adr-0003(the only ADR coveringTR-inventory-001) has## Status: Proposed adr-0004(Accepted) has**Depends On**: ADR-0003in its## ADR Dependenciestable
Input: /architecture-review
Expected behavior:
TR-inventory-001is marked🟡 Covered (Proposed), not ✅- The dependency analysis flags "ADR-0004 depends on ADR-0003 — but ADR-0003 is still Proposed"
- Verdict is capped at CONCERNS and names the way out:
/architecture-decision accept ADR-0003
Assertions:
- Skill reads each ADR's
## Statusbefore marking coverage; a Proposed ADR never yields ✅ - Verdict is CONCERNS (not PASS) when coverage rests on a Proposed ADR
- Output names
/architecture-decision accept ADR-0003as the route to clear it - The unresolved dependency on a Proposed ADR is flagged
Case 4: Edge Case — missing architecture document; malformed ADRs
Case 4a — no master architecture document:
- As Case 1, but
docs/architecture/architecture.mddoes not exist
Assertions (4a):
- The report states
Architecture document coverage: NOT ASSESSED — no docs/architecture/architecture.mdas a named line item, rather than showing no Phase 6 findings - The overall verdict is NOT ASSESSED, not PASS: Phase 6 is part of the
fullscope and did not run, even though every requirement is covered (a CONCERNS or FAIL finding elsewhere would still outrank it)
Case 4b — ADRs present but none has a scannable section:
- As Case 1 (
modes.workflow: full— at the defaultminimaltier, aproject.yamlwith nomodesblock, the skill does not apply), except the threedocs/architecture/adr-*.mdfiles carry none of the six headings the Phase 1b scan looks for:## Status,## Decision,## GDD Requirements Addressed,## Engine Compatibility,## ADR Dependencies,## Performance Implications
Assertions (4b):
- Skill reports "[N] ADRs found, none carries a scannable section — run
/architecture-decision retrofit [file]on each" (subcommand first — with the path first,/architecture-decisionwould start authoring a new ADR instead) - Skill does NOT report zero coverage or a design failure — it is a format failure
- Rows whose ADR has no
## Statusare❓ Not assessed, and the verdict is not PASS — nor FAIL on coverage grounds, since coverage is unknown rather than absent
Case 5: Engine specialist consultation — configured vs unconfigured engine
Case 5a — engine configured: Case 1 fixture (engine.name: Godot)
Expected behavior:
- After the Phase 5 engine audit, skill spawns
godot-specialistviaAgent, passing the engine-specific ADRs, the engine reference docs and the audit findings - The specialist's findings appear under
### Engine Specialist Findingsand count toward the verdict
Assertions (5a):
- The specialist is resolved from
engine.name(Godot →godot-specialist) - It is spawned after the engine audit, with the audit findings in its prompt
- Output includes an
### Engine Specialist Findingssection - No director gate (TD-ARCHITECTURE, LP-FEASIBILITY or any other gate ID) is spawned or mentioned
Case 5b — no engine configured: as Case 1, except engine.name is unset in project.yaml and technical-preferences.md is still [TO BE CONFIGURED]
Assertions (5b):
- No engine specialist is spawned
- Output records
Engine validation: NOT ASSESSED — no engine configuredrather than omitting the step - The verdict is NOT ASSESSED, not PASS — the engine audit is part of the
fullscope and had no pinned engine to check against, even though every requirement is covered
Protocol Compliance
- Shows the full traceability matrix before any write approval (the Phase 1a freshness question and Phase 2's ambiguous-requirement questions may come earlier)
- Every write approval uses
AskUserQuestionwith labelled options, not a plain-text "May I?" - Shows the content to be written (report, systems-index rows) before asking to write it
- Never renumbers or deletes existing
tr-registry.yamlentries; marking one deprecated is confirmed with the user - Verdict is one of exactly: PASS, CONCERNS, NOT ASSESSED, FAIL
- Ends with a Phase 9 handoff via
AskUserQuestion;/gate-checkis not offered while any pre-gate item is ❌
Coverage Notes
- The
coverage,consistency,engine,single-gddandrtmmodes are not individually fixture-tested; Cases 1–5 exercise the defaultfullmode. - Phase 5b (GDD revision flags written to
systems-index.mdasNeeds Revision) is not tested; it needs a HIGH RISK engine finding that contradicts a GDD. - The freshness receipt paths (everything
UNCHANGED, someCHANGED/NEW,UNRESOLVED) are not fixture-tested. - The
standardtier's reduced scope (architecture doc + critical ADRs only) is not tested. - The default
minimaltier (aproject.yamlwith nomodesblock), where the skill's scope table says the review does not apply, is not fixture-tested — every case pinsmodes.workflow: full. Nor isworkflow_overrides.system_overrides: this skill does not request that key, so a per-system tier has no effect on it.