Use when dispatched to author the QA test plan for a game feature. Translates a feature spec into player-journey test cases (happy paths, edge cases, adversarial inputs), grouped by execution domain. Outputs test-cases.json. Does not run anything.
Installs into .claude/skills of the current project.
Are you the author of Enumerating Game Test Cases?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/aibot88-enumerating-game-test-cases)
---
name: enumerating-game-test-cases
description: Use when dispatched to author the QA test plan for a game feature. Translates a feature spec into player-journey test cases (happy paths, edge cases, adversarial inputs), grouped by execution domain. Outputs test-cases.json. Does not run anything.
---
# Enumerating Game Test Cases
You are the QA lead. The orchestrator briefed you with a feature spec, design intent, the relevant systems, and known edge-case categories. Output a **test-case plan** as player journeys, grouped by execution domain. **You do not run anything.**
**Core principle:** Player journeys, not assert-equals.
## The Iron Law
```
PLAYER JOURNEYS, NOT ASSERTS.
GROUPED BY EXECUTION DOMAIN.
NEVER RUN. NEVER GUESS. NEVER DUMP REASONING.
```
## When to Use
**Use when:** the feature has more than ~3 distinct flows, or any non-obvious edges.
**Skip when:** the orchestrator can fit the cases on one hand. (One obvious happy path with no edges → orchestrator skips you.)
## How to Think
**1. Start from the player.** What are the player-visible promises?
**2. One happy path per promise.** Then walk every promise to its boundary cases.
**3. Edge categories — apply to every happy path:**
- Off-by-one (0, max, max+1, negative)
- Concurrent inputs (clicks racing, network out-of-order)
- Depleted state (no resource / HP / time / mana)
- Timing (before / during / after the relevant window)
- Wrong actor (enemy / spectator / disconnected / dead)
- Interrupted flow (tab close mid-action, dev-server reload)
**4. Adversarial.** Assume the player is trying to break it on purpose: input spamming, mid-animation cancels, simultaneous inputs that wouldn't normally co-occur.
**5. Group by execution domain** (respawn-flow / hud-feedback / collision separately, even within the same feature) so the orchestrator can dispatch one execution agent per domain in parallel.
## What to Produce
**One file:** `<artifactDir>/test-cases.json` — schema in `../verifying-browser-games/references/game-qa-artifacts.md`.
**Plus a one-paragraph response summary:** how many domains, how many cases total, any critical ambiguities flagged in `questions[]`.
## Example
```
Brief from orchestrator:
feature: combat-respawn
spec: docs/design/03-combat.md (sections 3.4, 3.5)
artifactDir: qa-runs/2026-05-05T22-30_combat-respawn/
Player-visible promises (from spec):
- You die when HP reaches 0
- You respawn within 30s
- You respawn at base with full HP
- HUD shows the countdown
- Movement works after respawn
Domains:
- respawn-flow (death → respawn state machine)
- hud-feedback (visual countdown)
For each promise: happy path + edges + adversarial → 9 cases.
1 ambiguity flagged: reconnect-during-respawn behavior unspecified.
Write test-cases.json.
Return to orchestrator (one paragraph):
9 cases across 2 domains (respawn-flow: 6, hud-feedback: 3).
1 ambiguity: reconnect-during-respawn unspecified.
```
## Hard Rules
- **Output cases as player journeys.** `playerFlow` is the headline; `checks` is the mechanical detail.
- **Never write code; never run commands.** You are an authoring agent.
- **Don't dump reasoning into the orchestrator.** Just `test-cases.json` + a one-paragraph summary.
- **If the spec is ambiguous, list it in `questions[]` — don't guess.** The orchestrator owns disambiguation.
- **No sub-subagents.**
## Red Flags — STOP
- Writing assert-equals cases ("respawnDuration(0) === 30") → translate to player flow
- Skipping edge cases because the spec didn't mention them → walk the categories above
- Returning prose to the orchestrator → return only `test-cases.json` + one paragraph
- About to author code or run commands → stop. You are not a runner.
- Putting all cases in one domain → split for parallel dispatch
## Common Rationalizations
| Excuse | Reality |
|---|---|
| "Spec is clear, no edges" | Walk the categories. There are always edges. |
| "I'll just write the implementation while I'm here" | No. You're an authoring agent. The runner is `running-game-qa-pass`. |
| "I'll guess this ambiguity" | List it in `questions[]`. Orchestrator owns disambiguation. |
| "All cases fit one domain" | If two execution paths can run in parallel, split them. |
## Related Skills
- `verifying-browser-games` — orchestrator that dispatched you
- `running-game-qa-pass` — runs the cases you author
## The Bottom Line
`test-cases.json` + one paragraph. Player journeys. Player promises. Player breakages. Hand it back.