Test Skill — Semantic Game Validation
Run deep validation on a generated game project, beyond what /build (Vite compilation) checks.
CRITICAL: DO NOT STOP UNTIL THE JOB IS DONE
Complete ALL checks in a SINGLE run. NEVER use AskUserQuestion.
First Step: Read CLAUDE.md
Read the CLAUDE.md file in the repo root to understand project structure and conventions.
Game Directory Detection
The argument may be a game path:
- •With path:
/test games/my-game - •Without path:
/test→ auto-detect by finding the most recently modifiedgames/*/GAME_DESIGN.md
After resolving the game directory, all operations run inside it.
Validation Checks
Check 1: Level Config Schema
For each <game-dir>/src/levels/level*.js, read the file and verify:
| Field | Required | Type |
|---|---|---|
id | Yes | number |
name | Yes | string |
environment | Yes | object with sky or enclosure |
decorations | Yes | array with 1+ entries |
props | Yes | array (can be empty) |
playerSpawn | Yes | object with position array |
exit | No | object or array (if present, must have position and targetLevel) |
For each decoration entry, check that type is one of the 13 built-in types: palmTree, tree, pineTree, rock, water, bird, stalactite, mushroom, crystal, coral, vine, lantern, column.
Check 2: Level Transition Graph
Collect all levels and their exit fields. Verify:
- •Every
targetLevelin an exit references a level file that exists - •No orphan levels (every level except level 1 is reachable from at least one other level's exit)
- •No self-referencing exits (
targetLevelpointing to the same level) - •Warn (not error) if the last level has no exit and no puzzles (dead end)
Check 3: Puzzle Registration
Read <game-dir>/src/engine/Engine.js and find:
- •All puzzle imports (
import { ... } from '../puzzle/puzzles/...') - •All
puzzleManager.register(...)calls - •Verify each imported puzzle class is registered
- •Verify each registered puzzle class is imported
If GAME_DESIGN.md lists mechanics, cross-reference:
- •Warn about mechanics listed in design but not implemented
- •Warn about implemented puzzles not in the design
Check 4: Puzzle Dependencies (if graph mode)
If any puzzle sets dependencies:
- •Verify all referenced dependency IDs match registered puzzle IDs
- •Check for circular dependencies (A depends on B, B depends on A)
- •Check for unreachable puzzles (dependencies that can never be met)
- •Verify at least one puzzle has no dependencies (root node)
Check 5: Model References
For each level config's props array:
- •Check that each referenced
.glbfile exists in<game-dir>/public/models/N/ - •Report missing models with their expected paths
Check 6: Import Verification
For each .js file in <game-dir>/src/:
- •Parse
importstatements - •Verify the target file exists (relative path resolution)
- •Report missing imports with file and line number
Output
Print a structured report:
Validation Results (games/<slug>): Levels: ✓ level1.js — schema valid, 4 decorations, 2 props ✓ level2.js — schema valid, 3 decorations, 0 props ✗ level3.js — missing playerSpawn.position Transitions: ✓ Level 1 → Level 2 (portal) ✓ Level 2 → Level 3 (portal) ✓ Level 3 — final level (no exit) Puzzles: ✓ 3 puzzles registered (collect_gems, rune_sequence, bridge_lever) ✓ Dependencies: valid graph (2 roots, no cycles) ⚠ GAME_DESIGN.md lists "key_puzzle" but no implementation found Models: ✓ All 4 model references resolved ✗ level2: treasure.glb not found in public/models/2/ Imports: ✓ All imports resolved Overall: PASS (1 warning, 1 model missing)
Use ✓ for pass, ✗ for fail, ⚠ for warning.
Severity:
- •
✗(error): schema violations, broken imports, missing puzzle registrations, circular dependencies - •
⚠(warning): missing models (may not be added yet), design/implementation mismatches, orphan levels
Overall: PASS if no errors (warnings are OK). FAIL if any errors.
Error Handling
Game directory not found
If the specified game path doesn't exist and auto-detect finds no games:
- •Print:
ERROR: No game found. Run /dream first to create a game, or specify the path: /test games/<slug> - •Stop
No level files found
- •Print:
ERROR: No level files found in <game-dir>/src/levels/. Run /scene to create levels. - •Stop
Level file can't be parsed
If a level file has syntax errors that prevent reading:
- •Report:
✗ levelN.js — parse error: <message> - •Continue with remaining levels
Engine.js not found or unrecognizable
- •Skip puzzle checks
- •Report:
⚠ Engine.js not found or not parseable — skipping puzzle checks