architecture-review-5fddad — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited architecture-review-5fddad (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
The architecture review validates that the complete body of architectural decisions covers all game design requirements, is internally consistent, and correctly targets the project's pinned engine version. It is the quality gate between Technical Setup and Pre-Production.
Argument modes:
to include story file paths and test file paths; outputs docs/architecture/requirements-traceability.md with the full GDD requirement → ADR → Story → Test chain. Use in Production phase when stories and tests exist.
Before reading any full document, use Grep to extract ## Summary sections from all GDDs and ADRs:
Grep pattern="## Summary" glob="design/gdd/*.md" output_mode="content" -A 4
Grep pattern="## Summary" glob="docs/architecture/adr-*.md" output_mode="content" -A 3For single-gdd [path] mode: use the target GDD's summary to identify which ADRs reference the same system (Grep ADRs for the system name), then full-read only those ADRs. Skip full-reading unrelated GDDs entirely.
For engine mode: only full-read ADRs — GDDs are not needed for engine checks.
For coverage or full mode: proceed to full-read everything below.
Read all inputs appropriate to the mode:
design/gdd/ — read every file completelydesign/gdd/systems-index.md — the authoritative list of systemsdocs/architecture/ — read every file completelydocs/architecture/architecture.md if it existsdocs/engine-reference/[engine]/VERSION.mddocs/engine-reference/[engine]/breaking-changes.mddocs/engine-reference/[engine]/deprecated-apis.mddocs/engine-reference/[engine]/modules/.claude/docs/technical-preferences.mdReport a count: "Loaded [N] GDDs, [M] ADRs, engine: [name + version]."
Also read `docs/consistency-failures.md` if it exists. Extract entries with Domain matching the systems under review (Architecture, Engine, or any GDD domain being covered). Surface recurring patterns as a "Known conflict-prone areas" note at the top of the Phase 4 conflict detection output.
Before extracting any requirements, read docs/architecture/tr-registry.yaml if it exists. Index existing entries by id and by normalized requirement text (lowercase, trimmed). This prevents ID renumbering across review runs.
For each requirement you extract, the matching rule is:
reuse that entry's TR-ID unchanged. Update the requirement text in the registry only if the GDD wording changed (same intent, clearer phrasing) — add a revised: [date] field.
TR-[system]-NNN for thatsystem, starting from the highest existing sequence + 1.
"Does '[new requirement text]' refer to the same requirement as TR-[system]-NNN: [existing text]', or is it a new requirement?"User answers: "Same requirement" (reuse ID) or "New requirement" (new ID).
For any requirement with status: deprecated in the registry — skip it. It was removed from the GDD intentionally.
For each GDD, read it and extract all technical requirements — things the architecture must provide for the system to work. A technical requirement is any statement that implies a specific architectural decision.
Categories to extract:
| Category | Example |
|---|---|
| Data structures | "Each entity has health, max health, status effects" → needs a component/data schema |
| Performance constraints | "Collision detection must run at 60fps with 200 entities" → physics budget ADR |
| Engine capability | "Inverse kinematics for character animation" → IK system ADR |
| Cross-system communication | "Damage system notifies UI and audio simultaneously" → event/signal architecture ADR |
| State persistence | "Player progress persists between sessions" → save system ADR |
| Threading/timing | "AI decisions happen off the main thread" → concurrency ADR |
| Platform requirements | "Supports keyboard, gamepad, touch" → input system ADR |
For each GDD, produce a structured list:
GDD: [filename]
System: [system name]
Technical Requirements:
TR-[GDD]-001: [requirement text] → Domain: [Physics/Rendering/etc]
TR-[GDD]-002: [requirement text] → Domain: [...]This becomes the requirements baseline — the complete set of what the architecture must cover.
For each technical requirement extracted in Phase 2, search the ADRs:
| Status | Meaning |
|---|---|
| ✅ Covered | An ADR explicitly addresses this requirement |
| ⚠️ Partial | An ADR partially covers this, or coverage is ambiguous |
| ❌ Gap | No ADR addresses this requirement |
Build the full matrix:
## Traceability Matrix
| Requirement ID | GDD | System | Requirement | ADR Coverage | Status |
|---------------|-----|--------|-------------|--------------|--------|
| TR-combat-001 | combat.md | Combat | Hitbox detection < 1 frame | ADR-0003 | ✅ |
| TR-combat-002 | combat.md | Combat | Combo window timing | — | ❌ GAP |
| TR-inventory-001 | inventory.md | Inventory | Persistent item storage | ADR-0005 | ✅ |Count the totals: X covered, Y partial, Z gaps.
Skip this phase unless the argument is `rtm` or `full` with stories present.
This phase extends the Phase 3 matrix to include the story that implements each requirement and the test that verifies it — producing the full Requirements Traceability Matrix (RTM).
Glob production/epics/**/*.md (excluding EPIC.md index files). For each story file:
TR-ID from the story's Context section## Test Evidence section — the stated test file pathGlob tests/unit/**/*_test.* and tests/integration/**/*_test.*. Build an index: system → [test file paths].
For each test file path from Step 3b-1, confirm via Glob whether the file actually exists. Note MISSING if the stated path does not exist.
For each TR-ID in the Phase 3 matrix, add:
found) / NONE (no test path stated, story type may be Visual/Feel/UI) / NO STORY (requirement has no story yet — pre-production gap)
Extended matrix format:
## Requirements Traceability Matrix (RTM)
| TR-ID | GDD | Requirement | ADR | Story | Test File | Test Status |
|-------|-----|-------------|-----|-------|-----------|-------------|
| TR-combat-001 | combat.md | Hitbox < 1 frame | ADR-0003 | story-001-hitbox.md | tests/unit/combat/hitbox_test.gd | COVERED |
| TR-combat-002 | combat.md | Combo window | — | story-002-combo.md | — | NONE (Visual/Feel) |
| TR-inventory-001 | inventory.md | Persistent storage | ADR-0005 | — | — | NO STORY |RTM coverage summary:
Compare every ADR against every other ADR to detect contradictions. A conflict exists when:
ADR-B defines System X with a different interface
N ms to AI, together they exceed the total frame budget
initialises before X
subsystem; ADR-B uses direct function calls to the same subsystem
(e.g. both Combat ADR and Character ADR claim to own the health value)
For each conflict found:
## Conflict: [ADR-NNNN] vs [ADR-MMMM]
Type: [Data ownership / Integration / Performance / Dependency / Pattern / State]
ADR-NNNN claims: [...]
ADR-MMMM claims: [...]
Impact: [What breaks if both are implemented as written]
Resolution options:
1. [Option A]
2. [Option B]After conflict detection, analyse the dependency graph across all ADRs:
dependencies come first (Foundation), ADRs that depend on those come next, etc.
that is still Proposed or does not exist, flag it:
⚠️ ADR-0005 depends on ADR-0002 — but ADR-0002 is still Proposed.
ADR-0005 cannot be safely implemented until ADR-0002 is Accepted.or transitively), flag it as a DEPENDENCY CYCLE:
🔴 DEPENDENCY CYCLE: ADR-0003 → ADR-0006 → ADR-0003
This cycle must be broken before either can be implemented. ### Recommended ADR Implementation Order (topologically sorted)
Foundation (no dependencies):
1. ADR-0001: [title]
2. ADR-0003: [title]
Depends on Foundation:
3. ADR-0002: [title] (requires ADR-0001)
4. ADR-0005: [title] (requires ADR-0003)
Feature layer:
5. ADR-0004: [title] (requires ADR-0002, ADR-0005)Across all ADRs, check for engine consistency:
deprecated-apis.mdOutput format:
### Engine Audit Results
Engine: [name + version]
ADRs with Engine Compatibility section: X / Y total
Deprecated API References:
- ADR-0002: uses [deprecated API] — deprecated since [version]
Stale Version References:
- ADR-0001: written for [older version] — current project version is [version]
Post-Cutoff API Conflicts:
- ADR-0004 and ADR-0007 both use [API] with incompatible assumptionsAfter completing the engine audit above, spawn the primary engine specialist via Task for a domain-expert second opinion:
.claude/docs/technical-preferences.md Engine Specialists section to get the primary specialistsubagent_type: [primary specialist] with: all ADRs that contain engine-specific decisions or Post-Cutoff APIs Used fields, the engine reference docs, and the Phase 5 audit findings. Ask them to:Incorporate additional findings under ### Engine Specialist Findings in the Phase 5 output. These feed into the final verdict — specialist-identified issues carry the same weight as audit-identified issues.
For each HIGH RISK engine finding from Phase 5, check whether any GDD makes an assumption that the verified engine reality contradicts.
Specific cases to check:
records a verified API behaviour that differs from the default LLM assumption, check all GDDs that reference the related system. Look for design rules written around the old (assumed) behaviour.
(e.g. "Jolt ignores HingeJoint3D damp", "D3D12 is now the default backend"), check GDDs that design mechanics around the affected feature.
check whether any GDD contains mechanics that assume the deprecated API's behaviour.
For each conflict found, record it in the GDD Revision Flags table:
### GDD Revision Flags (Architecture → Design Feedback)
These GDD assumptions conflict with verified engine behaviour or accepted ADRs.
The GDD should be revised before its system enters implementation.
| GDD | Assumption | Reality (from ADR/engine-reference) | Action |
|-----|-----------|--------------------------------------|--------|
| combat.md | "Use HingeJoint3D damp for weapon recoil" | Jolt ignores damp — ADR-0003 | Revise GDD |If no revision flags are found, write: "No GDD revision flags — all GDD assumptions are consistent with verified engine behaviour."
Ask: "Should I flag these GDDs for revision in the systems index?"
and add a short inline note in the adjacent Notes/Description column explaining the conflict. Ask for approval before writing. (Do NOT use parentheticals like "Needs Revision (Architecture Feedback)" — other skills match the exact string "Needs Revision" and parentheticals break that match.)
If docs/architecture/architecture.md exists, validate it against GDDs:
systems-index.md appear in the architecture layers?(orphaned architecture)?
## Architecture Review Report
Date: [date]
Engine: [name + version]
GDDs Reviewed: [N]
ADRs Reviewed: [M]
---
### Traceability Summary
Total requirements: [N]
✅ Covered: [X]
⚠️ Partial: [Y]
❌ Gaps: [Z]
### Coverage Gaps (no ADR exists)
For each gap:
❌ TR-[id]: [GDD] → [system] → [requirement]
Suggested ADR: "/architecture-decision [suggested title]"
Domain: [Physics/Rendering/etc]
Engine Risk: [LOW/MEDIUM/HIGH]
### Cross-ADR Conflicts
[List all conflicts from Phase 4]
### ADR Dependency Order
[Topologically sorted implementation order from Phase 4 — dependency ordering section]
[Unresolved dependencies and cycles if any]
### GDD Revision Flags
[GDD assumptions that conflict with verified engine behaviour — from Phase 5b]
[Or: "None — all GDD assumptions consistent with verified engine behaviour"]
### Engine Compatibility Issues
[List all engine issues from Phase 5]
### Architecture Document Coverage
[List missing systems and orphaned architecture from Phase 6]
---
### Verdict: [PASS / CONCERNS / FAIL]
PASS: All requirements covered, no conflicts, engine consistent
CONCERNS: Some gaps or partial coverage, but no blocking conflicts
FAIL: Critical gaps (Foundation/Core layer requirements uncovered),
or blocking cross-ADR conflicts detected
### Blocking Issues (must resolve before PASS)
[List items that must be resolved — FAIL verdict only]
### Required ADRs
[Prioritised list of ADRs to create, most foundational first]Use AskUserQuestion for the write approval:
docs/architecture/architecture-review-[date].mdFor rtm mode, additionally ask: "May I write the full Requirements Traceability Matrix to docs/architecture/requirements-traceability.md?"
RTM file format:
# Requirements Traceability Matrix (RTM)
> Last Updated: [date]
> Mode: /architecture-review rtm
> Coverage: [N]% full chain complete (GDD → ADR → Story → Test)
## How to read this matrix
| Column | Meaning |
|--------|---------|
| TR-ID | Stable requirement ID from tr-registry.yaml |
| GDD | Source design document |
| ADR | Architectural decision governing implementation |
| Story | Story file that implements this requirement |
| Test File | Automated test file path |
| Test Status | COVERED / MISSING / NONE / NO STORY |
## Full Traceability Matrix
| TR-ID | GDD | Requirement | ADR | Story | Test File | Status |
|-------|-----|-------------|-----|-------|-----------|--------|
[Full matrix rows from Phase 3b]
## Coverage Summary
| Status | Count | % |
|--------|-------|---|
| COVERED — full chain complete | [N] | [%] |
| MISSING test — story exists, no test | [N] | [%] |
| NO STORY — ADR exists, not yet implemented | [N] | [%] |
| NO ADR — architectural gap | [N] | [%] |
| **Total requirements** | **[N]** | **100%** |
## Uncovered Requirements (Priority Fix List)
Requirements where the full chain is broken, prioritised by layer:
### Foundation layer gaps
[list with suggested action per gap]
### Core layer gaps
[list]
### Feature / Presentation layer gaps
[list — lower priority]
## History
| Date | Full Chain % | Notes |
|------|-------------|-------|
| [date] | [%] | Initial RTM |Also ask: "May I update docs/architecture/tr-registry.yaml with new requirement IDs from this review?"
If yes:
requirement text and revised date for any entries whose GDDwording changed (ID stays the same)
status: deprecated for any registry entries whose GDD requirementno longer exists (confirm with user before marking deprecated)
last_updated and version fields at the topThis ensures all future story files can reference stable TR-IDs that persist across every subsequent architecture review.
After writing the review report, append any 🔴 CONFLICT entries found in Phase 4 to docs/consistency-failures.md (if the file exists):
### [YYYY-MM-DD] — /architecture-review — 🔴 CONFLICT
**Domain**: Architecture / [specific domain e.g. State Ownership, Performance]
**Documents involved**: [ADR-NNNN] vs [ADR-MMMM]
**What happened**: [specific conflict — what each ADR claims]
**Resolution**: [how it was or should be resolved]
**Pattern**: [generalised lesson for future ADR authors in this domain]Only append CONFLICT entries — do not log GAP entries (missing ADRs are expected before the architecture is complete). Do not create the file if missing — only append when it already exists.
After writing all approved files, silently append to production/session-state/active.md:
If active.md does not exist, create it with this block as the initial content. Confirm in conversation: "Session state updated."
The traceability index format:
# Architecture Traceability Index
Last Updated: [date]
Engine: [name + version]
## Coverage Summary
- Total requirements: [N]
- Covered: [X] ([%])
- Partial: [Y]
- Gaps: [Z]
## Full Matrix
[Complete traceability matrix from Phase 3]
## Known Gaps
[All ❌ items with suggested ADRs]
## Superseded Requirements
[Requirements whose GDD was changed after the ADR was written]After completing the review and writing approved files, present:
Foundation layer before Feature layer)
pre-production` to advance"
/architecture-review after each new ADR is writtento verify coverage improves"
Then close with AskUserQuestion:
/architecture-decision [system]/gate-check pre-production — if all blocking gaps are resolvedIf any spawned agent returns BLOCKED, errors, or fails to complete:
anything; let the user see the state
requirement or a design preference?"
despite CONCERNS or even FAIL findings
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.