mirror of
https://github.com/Donchitos/Claude-Code-Game-Studios.git
synced 2026-10-16 10:17:06 +00:00
Release 1.1.2 — the default path works end to end
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
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
7ed2c3e9c4
commit
b21fa0f7f2
@@ -7,7 +7,7 @@ allowed-tools: Read, Glob, Grep, Write, Bash(bash "*/.claude/skills/test-evidenc
|
||||
model: sonnet
|
||||
---
|
||||
|
||||
!`bash "${CLAUDE_SKILL_DIR}/../../hooks/yaml-helper.sh" resolve_config --keys automation`
|
||||
!`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
|
||||
@@ -15,6 +15,22 @@ 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`:
|
||||
- **`qa.level: minimal`** waives tests. A Logic, Integration or Config/Data story
|
||||
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.
|
||||
- **Gate level per story type**: take `testing.strict.<type>` from the resolved
|
||||
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.
|
||||
|
||||
# Test Evidence Review
|
||||
|
||||
`/smoke-check` verifies that test files **exist** and **pass**. This skill
|
||||
@@ -55,7 +71,8 @@ the list of story file paths from the sprint plan.
|
||||
|
||||
> **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`; a sprint plan
|
||||
> 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.
|
||||
>
|
||||
@@ -92,16 +109,23 @@ Full-read a story only when its Test Evidence section is missing or ambiguous.
|
||||
|
||||
## 3. Locate Evidence Files
|
||||
|
||||
For each story, find the evidence:
|
||||
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**: Glob `tests/unit/[system]/[story-slug]_test.*`
|
||||
- If not found, also try: Grep in `tests/unit/[system]/` for files
|
||||
containing the story slug
|
||||
**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 files are named per
|
||||
`.claude/rules/test-standards.md`, not necessarily `[story-slug]_test.*`.
|
||||
|
||||
**Integration stories**: Glob `tests/integration/[system]/[story-slug]_test.*`
|
||||
**Integration stories**: the same, under the integration root (`tests/integration/[system]/`,
|
||||
`Assets/Tests/PlayMode/`, or Unreal's test root)
|
||||
- Also check `production/session-logs/` for playtest records mentioning the story
|
||||
|
||||
**Visual/Feel and UI stories**: Glob `production/qa/evidence/[story-slug]-evidence.*`
|
||||
**Visual/Feel and UI stories**: Glob `production/qa/evidence/` for a retained image
|
||||
(`*.png`, `*.jpg`, `*.gif`) belonging to this story, and for
|
||||
`[story-slug]-evidence.*`
|
||||
|
||||
**Config/Data stories**: Glob `production/qa/smoke-*.md` (any smoke check report)
|
||||
|
||||
@@ -123,8 +147,9 @@ not cover the range of expected behaviour.
|
||||
Thresholds:
|
||||
- **3+ assertions per test function** → normal
|
||||
- **1-2 assertions per test function** → note as potentially thin
|
||||
- **0 assertions** (test exists but no asserts) → flag as BLOCKING — the
|
||||
test passes vacuously and proves nothing
|
||||
- **0 assertions** (test exists but no asserts) → flag as BLOCKING (the story
|
||||
type's gate level; ADVISORY at `qa.level: minimal`) — the test passes
|
||||
vacuously and proves nothing
|
||||
|
||||
### Edge case coverage
|
||||
|
||||
@@ -141,7 +166,9 @@ Heuristics:
|
||||
### Naming quality
|
||||
|
||||
Test function names should describe: the scenario + the expected result.
|
||||
Pattern: `test_[scenario]_[expected_outcome]`
|
||||
Pattern per engine (`.claude/rules/test-standards.md`): Godot
|
||||
`test_[scenario]_[expected]`, Unity `[Scenario]_[Expected]`, Unreal
|
||||
`<Project>.[System].[Scenario]`.
|
||||
|
||||
Flag functions named generically (`test_1`, `test_run`, `testBasic`) as
|
||||
**naming issues** — they make failures harder to diagnose.
|
||||
@@ -157,7 +184,14 @@ it by name is harder to maintain when the formula changes.
|
||||
|
||||
## 5. Review Manual Evidence Quality (Visual/Feel / UI)
|
||||
|
||||
For each evidence document found, read it and evaluate:
|
||||
For each evidence document found, read it and evaluate the checks below.
|
||||
|
||||
**A UI story needs no evidence document.** When it has none, its retained
|
||||
screenshots are the evidence: apply only Screenshot / artefact completeness (an
|
||||
image of each screen the story changes — a screen a criterion only navigates to,
|
||||
such as the title screen after Quit, needs none of its own) and Date coverage (the images'
|
||||
dates). A UI story is ADEQUATE on those two — never INCOMPLETE for lacking a doc,
|
||||
its criterion linkage or a sign-off.
|
||||
|
||||
### Criterion linkage
|
||||
|
||||
@@ -167,13 +201,13 @@ Missing criteria mean a criterion was never verified.
|
||||
|
||||
### Sign-off completeness
|
||||
|
||||
Check for three sign-off lines (or equivalent fields):
|
||||
- Developer sign-off
|
||||
- Designer / art-lead sign-off (for Visual/Feel)
|
||||
- QA lead sign-off
|
||||
|
||||
If any are missing or blank: flag as INCOMPLETE — the story cannot be fully
|
||||
closed without all required sign-offs.
|
||||
What closes the story follows the evidence table in
|
||||
`.claude/docs/coding-standards.md` — the same rule `/story-done` applies, at every
|
||||
`qa.level`:
|
||||
- **Visual/Feel**: the evidence doc (from the test-evidence template) must have
|
||||
every sign-off row `[x] Approved`. A blank or missing row is INCOMPLETE.
|
||||
- **UI**: no sign-off is required — the retained screenshots close it. Note a
|
||||
sign-off if one exists; never mark a UI story INCOMPLETE for lacking one.
|
||||
|
||||
### Screenshot / artefact completeness
|
||||
|
||||
@@ -182,8 +216,8 @@ For Visual/Feel stories: Glob `production/qa/evidence/` for a retained image
|
||||
visual check but retains no image is INCOMPLETE — this gate is BLOCKING by
|
||||
default, and a description is an assertion rather than evidence.
|
||||
|
||||
For UI stories: require the same retained screenshot of each screen touched,
|
||||
plus a walkthrough sequence (step-by-step interaction log).
|
||||
For UI stories: require the same retained screenshot of each screen touched.
|
||||
A walkthrough log is welcome but not required.
|
||||
|
||||
### Date coverage
|
||||
|
||||
@@ -202,8 +236,9 @@ For each story, assign a verdict:
|
||||
|---------|---------|
|
||||
| **ADEQUATE** | Test/evidence exists, passes quality checks, all criteria covered |
|
||||
| **INCOMPLETE** | Test/evidence exists but has quality gaps (thin assertions, missing sign-offs) |
|
||||
| **MISSING** | No test or evidence found for a story type that requires it |
|
||||
| **MISSING** | No test or evidence found for a story type that requires it at this `qa.level` |
|
||||
| **NOT ASSESSED** | The review could not be performed for this story — see below |
|
||||
| **WAIVED (qa.level: minimal)** | A Logic, Integration or Config/Data story with no test evidence at `qa.level: minimal` — tests are not required, so nothing is missing; name it as waived |
|
||||
|
||||
> **`NOT ASSESSED` is required, and it is not a softer `MISSING`.**
|
||||
> The other three verdicts all presume the review actually ran. `MISSING` means
|
||||
@@ -226,7 +261,9 @@ The overall sprint/system verdict is the worst story verdict present, and
|
||||
**`NOT ASSESSED` outranks `ADEQUATE`**: a run that could not assess part of its
|
||||
scope has not established that the scope is adequate. It does not outrank
|
||||
`INCOMPLETE` or `MISSING` — a known failure is more actionable than an unknown,
|
||||
and demoting a real failure behind an access problem would bury it.
|
||||
and demoting a real failure behind an access problem would bury it. `WAIVED`
|
||||
ranks below `ADEQUATE`: the overall verdict reads WAIVED only when every story
|
||||
in scope was waived, and the report names each waived story either way.
|
||||
|
||||
> Why this needed saying: evidence review **gates story completion**, and
|
||||
> `coding-standards.md` makes Logic, Integration, Visual/Feel and UI evidence BLOCKING. A verdict
|
||||
@@ -240,13 +277,14 @@ and demoting a real failure behind an access problem would bury it.
|
||||
> **Date**: [date]
|
||||
> **Scope**: [single story path | Sprint [N] | [system name]]
|
||||
> **Stories reviewed**: [N]
|
||||
> **Overall verdict**: ADEQUATE / INCOMPLETE / MISSING / NOT ASSESSED
|
||||
> **Overall verdict**: ADEQUATE / INCOMPLETE / MISSING / NOT ASSESSED / WAIVED
|
||||
> **qa.level**: [minimal | standard | full] — **testing.strict**: [the resolved per-type values, or "unset — coding-standards.md defaults"]
|
||||
|
||||
---
|
||||
|
||||
### Story-by-Story Results
|
||||
|
||||
#### [Story Title] — [Type] — [ADEQUATE/INCOMPLETE/MISSING/NOT ASSESSED]
|
||||
#### [Story Title] — [Type] — [ADEQUATE/INCOMPLETE/MISSING/NOT ASSESSED/WAIVED]
|
||||
|
||||
**Test/evidence path**: `[path]` (found) / (not found)
|
||||
|
||||
@@ -258,7 +296,7 @@ and demoting a real failure behind an access problem would bury it.
|
||||
|
||||
**Manual evidence quality** *(Visual/Feel/UI only)*:
|
||||
- Criterion linkage: [N/M criteria referenced]
|
||||
- Sign-offs: [Developer ✓ | Designer ✗ | QA Lead ✗]
|
||||
- Lead sign-off: [✓ approved | ✗ missing | deferred — reason] *(Visual/Feel only; a UI story needs none)*
|
||||
- Artefacts: [screenshots present / missing / N/A]
|
||||
- Freshness: [dated [date] — current / potentially stale]
|
||||
|
||||
@@ -274,8 +312,9 @@ and demoting a real failure behind an access problem would bury it.
|
||||
|-------|------|---------|--------|
|
||||
| [title] | Logic | ADEQUATE | None |
|
||||
| [title] | Integration | INCOMPLETE | Thin assertions (avg 1.2/function) |
|
||||
| [title] | Visual/Feel | INCOMPLETE | QA lead sign-off missing |
|
||||
| [title] | Visual/Feel | INCOMPLETE | Lead sign-off missing |
|
||||
| [title] | Logic | MISSING | No test file found |
|
||||
| [title] | Logic | WAIVED | No test — waived at `qa.level: minimal` |
|
||||
|
||||
**BLOCKING items** (must resolve before story can be closed): [N]
|
||||
**ADVISORY items** (should address before release): [N]
|
||||
|
||||
Reference in New Issue
Block a user