Skip to content
Agent Orchestration
Skill

/qa-plan

QA test plan for a sprint — classifies stories by Logic/Integration/Visual/UI, covers automated tests, manual cases, smoke scope.

From plugin
claude-code-game-studios
39k78 skills49 agents

Claude Code

$ npx -y skills add Donchitos/Claude-Code-Game-Studios --skill qa-plan --agent claude-code

SKILL.md

qa-plan.SKILL.md
name: qa-plan
description: "QA test plan for a sprint — classifies stories by Logic/Integration/Visual/UI, covers automated tests, manual cases, smoke scope."
argument-hint: "[sprint | feature: system-name | story: path]"
user-invocable: true
allowed-tools: Read, Glob, Grep, Write, Edit, AskUserQuestion, Bash(bash "*/.claude/skills/qa-plan/../../hooks/yaml-helper.sh" resolve_config *)
model: sonnet

!`bash "${CLAUDE_SKILL_DIR}/../../hooks/yaml-helper.sh" resolve_config --keys automation,workflow,qa.level,system_overrides`

Resolved above — use as-is. No block → defaults in `.claude/docs/config-resolution.md`.

QA Plan

This skill generates a structured QA plan for a sprint, feature, or individual story. It reads all in-scope story files and their referenced GDDs, classifies each story by test type, and produces a plan that tells developers exactly what to automate, what to verify manually, what the smoke test scope is, and when to bring in a playtester.

Run this before a sprint begins so the team knows upfront what testing work is required. A test plan written after implementation is a post-mortem, not a plan.

**Output:** `production/qa/qa-plan-[sprint-slug]-[date].md`

---

Every `AskUserQuestion` call follows `.claude/docs/automation-modes.md` (collaborative asks always · guided major-only · autonomous logs and proceeds; `automation_always_ask` categories always prompt).

**Workflow tier**: resolve per the GDD's system as each is read (per `.claude/docs/workflow-modes.md`): `workflow_overrides.system_overrides.<system>` if the block lists one, else the project value. It sets how many GDD sections the test plan is mined from — see Phase 2.

**`qa.level`**: at `minimal`, produce only a minimal smoke plan — drop the automated-test-required rows and the test-file DoD; at `standard`, a full plan per story type; at `full`, also add per-system coverage targets. Distinct axis from `workflow` (which sets how many GDD sections are mined). No level drops the Visual/Feel and UI screenshot rows — tests are waived at `minimal`, the look is not (`.claude/docs/coding-standards.md`).

Phase 1: Parse Scope

**Argument:** `$ARGUMENTS` (blank = ask user via AskUserQuestion)

Determine scope from the argument:

  • **`sprint`** — read the most recent file in `production/sprints/`, extract

every story file path referenced. If `production/sprint-status.yaml` exists, use it as the primary story list and fall back to the sprint plan for story metadata.

  • **`feature: [system-name]`** — glob `production/epics/*/story-*.md`, filter

to stories whose file path or title contains the system name. Also check the epic index file (`EPIC.md`) in that system's directory.

  • **`story: [path]`** — validate that the path exists and load that single file.
  • **No argument** — use `AskUserQuestion`:
  • "What is the scope for this QA plan?"
  • Options: "Current sprint", "Specific feature (enter system name)",

"Specific story (enter path)", "Full epic"

After resolving scope, report: "Building QA plan for [N] stories in [scope]."

If a story file path is referenced but the file does not exist, note it as MISSING and continue with the remaining stories. Do not fail the entire plan for one missing file.

> **If the resolved scope contains ZERO stories, stop — do not build a plan.** > Report `NOT ASSESSED — no stories in scope`, naming which scope was searched > and which path was empty, and route: > - no file in `production/sprints/` → "No sprint plan found. Run `/sprint-plan new`." > At `workflow: minimal` there are no sprints by design — route instead to > `/qa-plan feature: [epic-slug]` or `/qa-plan story: [path]`. > - a sprint plan exists but references no stories → "Sprint plan `[path]` lists no > stories. Run `/create-stories [epic-slug]`." > - `feature:`/`story:` scope matched nothing → name the glob that came back empty. > > **The N=0 guard is mandatory.** Without it an empty scope reports "Building QA > plan for 0 stories" and continues into Phase 4, producing a plan document with > empty tables — and **a QA plan for zero stories looks exactly like a completed > QA plan.** This skill gates the hand-off to manual QA, so a false-clean here > sends a build to QA on the strength of a plan that tested nothing. > > The rule at the top of this block still stands: one missing file among several > is MISSING-and-continue. This is the different case where there is no *several*.

---

Phase 2: Load Inputs

Establish the denominator first — glob the in-scope story files and count **N** — then collect the fields below with **targeted section greps, not a full read of each story**. A QA plan needs each story's type and acceptance criteria; it does not need its implementation notes, out-of-scope boundaries or ADR rationale, and reading N stories whole to reach two sections is where this phase's cost lives:

Grep pattern="^## Acceptance Criteria" glob="production/epics/**/story-*.md" output_mode="content" -A 15
Grep pattern="^> \*\*(Type|Status|Estimate)\*\*" glob="production/epics/**/story-*.md" output_mode="content"
Grep pattern="^## (Context|Dependencies)" glob="production/epics/**/story-*.md" output_mode="content" -A 8

(Scope the globs to the sprint plan's story paths in `sprint` mode.) From those:

  • **Story title** and story ID — from the file name and path; no read at all
  • **Story Type** field — from the header grep (e.g., `Type: Logic`)
  • **Acceptance criteria** — the complete numbered/bulleted list, from the first grep
  • **GDD / ADR reference** and **Dependencies** — from the `## Context` grep
  • **Estimate** — from the header grep if present
  • **Implementation files** and **Engine notes** — only needed for stories whose

test plan actually turns on them; full-read those individual stories

**Never treat an absent section as an absent story.** If a story matched no `## Acceptance Criteria`, full-read that one and say so — a story with no testable criteria is a QA finding in its own

Read more
@donchitos
Ships withclaude-code-game-studios

Turn Claude Code into a full game dev studio — 49 AI agents, 72 workflow skills, and a complete coordination system mirroring real studio hierarchy.

39k78 skills49 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
39.0k
Star history of Donchitos/Claude-Code-Game-Studios on GitHub, a chart by star-history.com

Other skills on claude-code-game-studios.

More skills from other plugins.

1password

1password

Set up and use 1Password CLI for sign-in, desktop integration, and reading or injecting secrets.

clawdis2w393k
@steipete@steipeteInstall Skill
computer-use

computer-use

Drives the GUI of a visible local app window through `orca computer`: accessibility tree, clicks, typing, menus, dialogs, and…

orca2w111k
@stablyai@stablyaiInstall Skill
agentmail

agentmail

Use your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by…

paperclip2w109k
@paperclipai@paperclipaiInstall Skill
adr-create

adr-create

Create a new Architecture Decision Record with sequential numbering and AgentDB registration

@ruvnet@ruvnetInstall Skill

Questions about qa-plan.

Which coding agents can use qa-plan?
qa-plan installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.