adopt
Brownfield audit — do existing artifacts actually work? Numbered migration plan. Unlike /project-stage-detect, checks compliance…
Quality review of test files and evidence — goes beyond existence, evaluates assertion coverage. ADEQUATE/INCOMPLETE/MISSING/NOT ASSESSED per story.
Claude Code
$ npx -y skills add Donchitos/Claude-Code-Game-Studios --skill test-evidence-review --agent claude-code
Codex
$ npx skills add Donchitos/Claude-Code-Game-Studios --skill test-evidence-review -a codex -y
Cursor
$ npx skills add Donchitos/Claude-Code-Game-Studios --skill test-evidence-review -a cursor -y
Gemini CLI
$ npx skills add Donchitos/Claude-Code-Game-Studios --skill test-evidence-review -a gemini-cli -y
GitHub Copilot
$ npx skills add Donchitos/Claude-Code-Game-Studios --skill test-evidence-review -a github-copilot -y
OpenCode
$ npx skills add Donchitos/Claude-Code-Game-Studios --skill test-evidence-review -a opencode -y
Windsurf
$ npx skills add Donchitos/Claude-Code-Game-Studios --skill test-evidence-review -a windsurf -y
name: test-evidence-review description: "Quality review of test files and evidence — goes beyond existence, evaluates assertion coverage. ADEQUATE/INCOMPLETE/MISSING/NOT ASSESSED per story." argument-hint: "[story-path | sprint | system-name]" user-invocable: true allowed-tools: Read, Glob, Grep, Write, Bash(bash "*/.claude/skills/test-evidence-review/../../hooks/yaml-helper.sh" resolve_config *), Bash(bash .claude/scripts/review-receipts.sh check *) model: sonnet
!`bash "${CLAUDE_SKILL_DIR}/../../hooks/yaml-helper.sh" resolve_config --keys automation,workflow,qa.level,testing.strict`
**Automation mode**: Resolve `modes.automation` (`project.local.yaml` → `project.yaml` → default `collaborative`). Every `AskUserQuestion` call and every file write follows `.claude/docs/automation-modes.md` (collaborative asks always · guided major-only · autonomous logs and proceeds; `automation_always_ask` categories always prompt).
**`qa.level` and `testing.strict`** (resolved above) decide what this review may call a blocker — the same rules `/story-done` closes stories by, so a BLOCKING item here is one that would stop `/story-done`:
with no test evidence (for Config/Data, no smoke report) is `WAIVED (qa.level: minimal)` — not MISSING — and raises no BLOCKING item; a test that does exist is still reviewed, but its gaps are ADVISORY. Visual/Feel and UI evidence (the retained screenshots, and the Visual/Feel sign-off) is never waived.
block (Logic→`logic`, Integration→`integration`, Visual/Feel→`visual`, UI→`ui`, Config/Data→`config`): `true` → BLOCKING, `false` → ADVISORY, `unset` → a plain-boolean `testing.strict: true|false` (legacy form) applies to every type; else the Default Gate Level in `.claude/docs/coding-standards.md` (BLOCKING for Logic, Integration, Visual/Feel and UI; ADVISORY for Config/Data). Every "BLOCKING" below means that story type's gate level.
`/smoke-check` verifies that test files **exist** and **pass**. This skill goes further — it reviews the **quality** of those tests and evidence documents. A test file that exists and passes may still leave critical behaviour uncovered. A manual evidence doc that exists may lack the sign-offs required for closure.
**Output:** Summary report (in conversation) + optional `production/qa/evidence-review-[date].md`
**When to run:**
---
**Modes:**
---
Based on the argument:
**Single story**: Read the story file directly. Extract: Story Type, Test Evidence section, story slug, system name.
**Sprint**: Read the most recently modified file in `production/sprints/`; extract the list of story file paths from the sprint plan.
**System**: Glob `production/epics/[system-name]/story-*.md`.
> **If the resolved scope contains ZERO stories, stop here.** Report > `NOT ASSESSED — no stories in scope`, name which scope was searched and which > path was empty, and route: no sprint file → `/sprint-plan new` (at `workflow: minimal`, > which has no sprints, `/test-evidence-review [epic-slug]` instead); a sprint plan > listing no stories → `/create-stories [epic-slug]`; a `[system-name]` glob that > matched nothing → name the glob. Do not continue to Section 3. > > **Guard the empty scope, not just the per-story unknown.** The verdict > vocabulary here — ADEQUATE / INCOMPLETE / MISSING — needs a "could not check" > value, or an unverifiable story acquires a verdict claiming somebody verified > it; that is what `NOT ASSESSED` is for. **But giving the per-story unknown a > home does nothing for the empty-scope unknown.** With no stories > the Section 6 report renders an empty Summary table and ends > `BLOCKING items: 0 / ADVISORY items: 0` — which reads as *everything reviewed, > all fine*. This skill gates story closure, and `coding-standards.md` marks Logic, > Integration, Visual/Feel and UI evidence BLOCKING, so a false-clean closes stories nobody > reviewed.
For the resulting story set, collect the fields below with **targeted section greps, not a full read of each story**:
Grep pattern="## Test Evidence" glob="production/epics/**/story-*.md" output_mode="content" -A 8 Grep pattern="## Acceptance Criteria" glob="production/epics/**/story-*.md" output_mode="content" -A 15
stated evidence path — both live under `## Test Evidence`, so the first grep's `-A 8` captures them.
Full-read a story only when its Test Evidence section is missing or ambiguous. (In Sprint mode, scope the globs to the sprint plan's story paths.)
---
For each story, find the evidence. **Check the story's stated evidence path first** — the one Section 2 captured from its `## Test Evidence` section. If it exists, use it. Fall back to searching only when no path is stated or it is not found:
**Logic stories**: search the engine's unit-test root — `tests/unit/[system]/` (Godot), `Assets/Tests/EditMode/` (Unity), `Source/<Module>/Private/Tests/` (Unreal); see `.claude/docs/directory-structure.md` — for a file whose name contains the story slug or its system. Test fil
Turn Claude Code into a full game dev studio — 49 AI agents, 72 workflow skills, and a complete coordination system mirroring real studio hierarchy.
Brownfield audit — do existing artifacts actually work? Numbered migration plan. Unlike /project-stage-detect, checks compliance…
Create an ADR documenting a technical decision: context, alternatives considered, consequences.
Traceability matrix mapping GDD requirements to ADRs. Finds gaps, cross-ADR conflicts, engine compatibility. PASS/CONCERNS/NOT…
Author the Art Bible — visual identity gating asset production. Run before /map-systems.
Audit assets against naming conventions, file size budgets, format standards. Finds orphaned assets, missing references.
Per-asset visual specs plus AI generation prompts from GDDs and character profiles. After the art bible.
Use your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by…
Create a new Architecture Decision Record with sequential numbering and AgentDB registration