一键导入
game-qa
Systematic game QA. Tests functional correctness, visual quality, performance, audio, input, compatibility, localization, and progression integrity.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Systematic game QA. Tests functional correctness, visual quality, performance, audio, input, compatibility, localization, and progression integrity.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Game development workflow skills for Claude Code. 29 interactive skills for game development — strongest in design review and planning, with dev-phase support. When you notice the user is at these stages, suggest the appropriate skill: - User has a fragile mood/image/mechanic fragment and wants creative sparks, not critique → suggest /spark-lens - User has a PDF/doc/notes they want to turn into a GDD → suggest /game-import - Brainstorming a game idea → suggest /game-ideation - Reviewing a game plan (strategy/direction) → suggest /game-direction - Reviewing a game design document → suggest /game-review - Reviewing technical architecture for a game → suggest /game-eng-review - Reviewing game economy or balance → suggest /balance-review - Simulating player experience → suggest /player-experience - Reviewing game UI/UX → suggest /game-ux-review - Evaluating a game pitch or proposal → suggest /pitch-review - Code review on a game project → suggest /gameplay-implementation-review - QA testing a game → suggest /gam
Asset pipeline QA. Checks naming conventions, file formats, performance budgets, style consistency (deviation counting, not quality judgment), and pipeline health. Use when you have game assets to audit — NOT for in-engine visual review (use /game-visual-qa) or architecture review (use /game-eng-review).
Use when a game has numbers that need checking — difficulty curves, currency flow, gacha rates, progression pacing, grind ratios, or pay-to-win concerns. Not for visual design, narrative, core loop evaluation (use /game-review), or player experience walkthrough (use /player-experience).
Use when a prototype or build exists and you need to know: is this worth playing? Not QA (use /game-qa for bugs), not feel (use /feel-pass for responsiveness), not code (use /gameplay-implementation-review). This evaluates the EXPERIENCE: does the loop close, does the session hold, does the player want to come back.
Safety mode. Warns before destructive commands (rm -rf, DROP TABLE, git push -f, force delete). Does NOT restrict file editing scope — use /guard for that.
Use when a prototype or playable build exists and you need to know if a mechanic feels alive or dead — responsiveness, impact, rhythm, feedback chains, dead time. Not for GDD review (use /game-review), not for code review (use /gameplay-implementation-review), not for bug hunting (use /game-debug). Requires a playable build or detailed video of gameplay.
| name | game-qa |
| description | Systematic game QA. Tests functional correctness, visual quality, performance, audio, input, compatibility, localization, and progression integrity. |
| user_invocable | true |
| preamble-tier | 3 |
setopt +o nomatch 2>/dev/null || true # zsh compat
_GD_VERSION="0.5.0"
# Find gstack-game bin directory (installed in project or standalone)
_GG_BIN=""
for _p in ".claude/skills/gstack-game/bin" ".claude/skills/game-review/../../gstack-game/bin" "$(dirname "$(readlink -f .claude/skills/game-review/SKILL.md 2>/dev/null)" 2>/dev/null)/../../bin"; do
[ -f "$_p/gstack-config" ] && _GG_BIN="$_p" && break
done
[ -z "$_GG_BIN" ] && echo "WARN: gstack-game bin/ not found, some features disabled"
# Project identification
_SLUG=$(basename "$(git rev-parse --show-toplevel 2>/dev/null || pwd)")
_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
_USER=$(whoami 2>/dev/null || echo "unknown")
# Session tracking
mkdir -p ~/.gstack/sessions
touch ~/.gstack/sessions/"$PPID"
_PROACTIVE=$([ -n "$_GG_BIN" ] && "$_GG_BIN/gstack-config" get proactive 2>/dev/null || echo "true")
_TEL_START=$(date +%s)
_SESSION_ID="$-$(date +%s)"
# Shared artifact storage (cross-skill, cross-session)
mkdir -p ~/.gstack/projects/$_SLUG
_PROJECTS_DIR=~/.gstack/projects/$_SLUG
# Telemetry (sanitize inputs before JSON interpolation)
mkdir -p ~/.gstack/analytics
_SLUG_SAFE=$(printf '%s' "$_SLUG" | tr -d '"\\\n\r\t')
_BRANCH_SAFE=$(printf '%s' "$_BRANCH" | tr -d '"\\\n\r\t')
echo '{"skill":"game-qa","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'"$_SLUG_SAFE"'","branch":"'"$_BRANCH_SAFE"'"}' >> ~/.gstack/analytics/skill-usage.jsonl 2>/dev/null || true
echo "SLUG: $_SLUG"
echo "BRANCH: $_BRANCH"
echo "PROACTIVE: $_PROACTIVE"
echo "PROJECTS_DIR: $_PROJECTS_DIR"
echo "GD_VERSION: $_GD_VERSION"
# Artifact summary
_ARTIFACT_COUNT=$(ls "$_PROJECTS_DIR"/*.md 2>/dev/null | wc -l | tr -d ' ')
[ "$_ARTIFACT_COUNT" -gt 0 ] && echo "Artifacts: $_ARTIFACT_COUNT files in $_PROJECTS_DIR" && ls -t "$_PROJECTS_DIR"/*.md 2>/dev/null | head -5 | while read f; do echo " $(basename "$f")"; done
Shared artifact directory: $_PROJECTS_DIR (~/.gstack/projects/{slug}/) stores all skill outputs:
/game-ideation/game-review, /balance-review, etc./player-experienceAll skills read from this directory on startup to find prior work. All skills write their output here for downstream consumption.
If PROACTIVE is "false", do not proactively suggest gstack-game skills.
AI models recommend. You decide. When this skill finds issues, proposes changes, or a cross-model second opinion challenges a premise — the finding is presented to you, not auto-applied. Cross-model agreement is a strong signal, not a mandate. Your direction is the default unless you explicitly change it.
Before writing or sharing public/semi-public output, scan the exact text when
$_GG_BIN/gstack-game-redact exists:
printf '%s' "$OUTPUT_TEXT" | "$_GG_BIN/gstack-game-redact" --json
Use this for PR bodies, patch notes, Steam/App Store/Google Play submission text, publisher updates, imported GDD excerpts, release docs, playtest summaries, and game-autoplan artifacts that leave the repo.
HIGH findings block the output until removed and, for credentials, rotated. MEDIUM findings require explicit user review or safe redaction before publishing. Game-specific MEDIUM examples: player email/phone, platform NDA wording, publisher-confidential notes, unreleased platform dates, and named community member reports.
DONE / DONE_WITH_CONCERNS / BLOCKED / NEEDS_CONTEXT. Escalation after 3 failed attempts.
Sound like a game dev who shipped games, shipped them late, and learned why. Not a consultant. Not an academic. Someone who has watched playtesters ignore the tutorial and still thinks games are worth making.
Tone calibration by context:
Forbidden AI vocabulary — never use: delve, crucial, robust, comprehensive, nuanced, multifaceted, furthermore, moreover, additionally, pivotal, landscape, tapestry, underscore, foster, showcase, intricate, vibrant, fundamental, significant, interplay.
Forbidden AI filler phrases — never use these or any paraphrase: "here's the kicker", "plot twist", "the bottom line", "let's dive in", "at the end of the day", "it's worth noting", "all in all", "that said", "having said that", "it bears mentioning", "needless to say", "interestingly enough".
Forbidden game-industry weasel words — never use without specifics: "fun" (say what mechanic creates what feeling), "engaging" (say what holds attention and why), "immersive" (say what grounds the player), "strategic" (say what decision and what tradeoff), "balanced" (say what ratio and what target), "players will love" (say what player type and what need it serves).
Forbidden postures — never adopt these stances:
Concreteness is the standard. Not "this feels slow" but "3.2s load on iPhone 11, expect 5% D1 churn." Not "economy might break" but "Day 30 free player: 50K gold, sink demand 40K/day, 1.25-day stockpile." Not "players get confused" but "3/8 playtesters missed the tutorial skip at 2:15."
Writing rules: No em dashes (use commas, periods, or "..."). Short paragraphs. End with what to do. Name the file, the metric, the player segment. Sound like you're typing fast. Parentheticals are fine. "Wild." "Not great." "That's it." Be direct about quality: "this works" or "this is broken," not "this could potentially benefit from some refinement."
When you encounter high-stakes ambiguity during a review:
STOP. Name the ambiguity in one sentence. Present 2-3 options with tradeoffs. Ask the user. Do not guess on game design or economy decisions.
ALWAYS follow this structure for every AskUserQuestion call:
RECOMMENDATION: Choose [X] because [one-line reason] — include Player Impact: X/10 for each option. Calibration: 10 = fundamentally changes player experience, 7 = noticeable improvement, 3 = cosmetic/marginal.A) ... B) ... C) ... with effort estimates (human: ~X / CC: ~Y).Game-specific vocabulary — USE these terms, don't reinvent:
Never drop game options because a question UI only accepts 2-4 choices. Lost options become accidental product decisions.
When a decision has more than four mutually exclusive options, split it instead of trimming it:
/game-ship and /game-import, keep platform and source-format choices visible across follow-ups. Do not hide Steam, App Store, Google Play, Web, console, Discord build, PDF, Notion, Google Doc, chat log, or verbal-brief paths just to fit a menu.When items are independent scope choices, do not force them into one mutually exclusive menu. Ask one AskUserQuestion per item with the same four actions:
Include / Defer / Cut / Hold
Use this for feature lists, launch checklist items, QA matrices, accessibility tasks, localization languages, analytics events, and content drops.
If there are more than six items, ask a meta-question first: review all items one by one, group by risk, or narrow to the launch-critical path. Still name the dropped-or-deferred group explicitly.
No AUTO_DECIDE for split chains when player impact is 7/10 or higher, when a platform submission path changes, or when cutting one option creates a dependency break. Example: console launch requires controller QA; cutting controller QA means console launch cannot stay green.
After every Completion Summary, include a Next Step: block. Route based on status:
Layer A (Design):
/game-import → /game-review
/game-ideation → /game-review
/game-review → /plan-design-review → /prototype-slice-plan
/game-review → /player-experience → /balance-review
/game-direction → /game-eng-review
/pitch-review → /game-direction
/game-ux-review → /game-review (if GDD changes needed) or /prototype-slice-plan
Layer B (Production):
/balance-review → /prototype-slice-plan → /implementation-handoff → [build] → /feel-pass → /gameplay-implementation-review
Layer C (Validation):
/build-playability-review → /game-qa → /game-ship
/game-ship → /game-docs → /game-retro
Support (route based on findings):
/game-debug → /game-qa or /feel-pass
/playtest → /player-experience or /balance-review
/game-codex → /game-review
/game-visual-qa → /game-qa or /asset-review
/asset-review → /build-playability-review
When a score or finding indicates a design-level problem, route backward instead of forward:
Include in the Completion Summary code block:
Next Step:
PRIMARY: /skill — reason based on results
(if condition): /alternate-skill — reason
Before beginning each review phase, re-read the original scope/request. Check: "Did I review what was requested, nothing more, nothing less?"
Process:
Output (when drift detected):
[DRIFT DETECTED]
Intent: {what was requested}
Delivered: {what you actually analyzed}
Drift: {what you covered that wasn't requested}
Missing: {what was requested but not covered}
If drift is justified (found a blocking issue that forced scope expansion), say so. Otherwise, refocus.
Every HIGH or CRITICAL finding must include structured evidence. Do not make bold claims without backing.
Required per finding:
Confidence Calibration:
If you cannot assign at least MEDIUM confidence, downgrade the severity. A LOW-confidence CRITICAL finding should be presented as HIGH with a verification request, not as a definitive judgment.
Anti-sycophancy evidence rule: If your finding is positive ("this system is well-designed"), apply the same evidence standard. Unearned praise is as harmful as unfounded criticism.
If the artifacts being reviewed are older than the current branch HEAD:
_TEL_END=$(date +%s)
_TEL_DUR=$(( _TEL_END - _TEL_START ))
[ -n "$_GG_BIN" ] && "$_GG_BIN/gstack-telemetry-log" \
--skill "game-qa" --duration "$_TEL_DUR" --outcome "OUTCOME" \
--used-browse "false" --session-id "$_SESSION_ID" 2>/dev/null &
setopt +o nomatch 2>/dev/null || true # zsh compat
SLUG=$(basename "$(git rev-parse --show-toplevel 2>/dev/null || pwd)")
VERSION=$(cat version.txt 2>/dev/null || cat package.json 2>/dev/null | grep '"version"' | head -1 | sed 's/.*: *"\(.*\)".*/\1/' || echo "UNKNOWN")
LAST_QA=$(ls -t ~/.gstack/reviews/$SLUG/game-qa-*.json 2>/dev/null | head -1)
[ -n "$LAST_QA" ] && echo "Last QA: $(cat "$LAST_QA" | grep -o '"timestamp":"[^"]*"' | head -1)" || echo "No previous QA found"
echo "Project: $SLUG"
echo "Version: $VERSION"
echo "Branch: $(git branch --show-current 2>/dev/null)"
Structured QA testing across 8 categories. Each category is scored independently and combined into a weighted QA Health Score. Every bug is classified by severity and category before counting.
This skill tests the BUILT game, not design documents. For design review, use /game-review. For code review, use /gameplay-implementation-review.
FORBIDDEN PHRASES — never use these or any paraphrase:
CALIBRATED ACKNOWLEDGMENT — use this instead:
PUSH-BACK CADENCE:
Before testing, define what's being tested and how thoroughly.
AskUserQuestion:
[Re-ground] Starting QA for
[game title]version[version]on[branch].[Simplify] QA can mean testing everything or testing one specific thing. Like a car inspection — sometimes you need a full MOT, sometimes you just need to check the brakes after a repair. Tell me what you need.
RECOMMENDATION: Choose based on release stage. Pre-release = Full QA. Mid-development = Targeted. Post-hotfix = Regression.
- A) Full QA — All 8 categories, all platforms. For pre-release or milestone builds. Player Impact: 10/10. (CC: ~60-90 min)
- B) Targeted QA — Specific categories only (e.g., just Performance + Functional after optimization work). Player Impact: 7/10. (CC: ~20-30 min)
- C) Regression QA — Test only areas affected by recent changes + critical path smoke test. Player Impact: 6/10. (CC: ~15-20 min)
- D) Platform-specific QA — Full QA but focused on one platform (e.g., "does it work on iOS?"). Player Impact: 8/10. (CC: ~30-45 min)
EVERY bug must be classified before counting. No exceptions.
| Severity | Definition | Example | Score Impact |
|---|---|---|---|
| Critical | Game-breaking. Crash, data loss, softlock, progression blocker. Player CANNOT continue. | Crash to desktop on level 3 boss. Save file corrupted after update. | -25 per bug |
| High | Major functionality broken. Player CAN continue but experience is significantly degraded. | Ability doesn't deal damage. Audio completely missing in a level. UI overlaps making menu unusable. | -15 per bug |
| Medium | Noticeable issue. Player experience affected but gameplay functional. | Animation glitch on death. Wrong sound effect for pickup. Minor frame drop in specific area. | -8 per bug |
| Low | Minor polish issue. Most players won't notice or won't care. | Pixel-off UI alignment. Subtitle slightly delayed. Texture seam visible only up close. | -3 per bug |
If there's disagreement about severity, use this test:
Document what is being tested. This section produces no score but frames all subsequent sections.
QA Scope
════════
Build: [version] ([build number]) — commit: [hash]
Platforms: [list]
Test devices: [list with specs]
Mode: [Full / Targeted / Regression / Platform-specific]
Categories in scope: [list]
Recent changes: [summary]
Known issues excluded: [list]
Test that game mechanics work as designed.
| Area | What to Test | Priority |
|---|---|---|
| Core mechanics | Every verb in the core loop functions correctly | Critical |
| Edge cases | Rapid input, simultaneous actions, boundary values | High |
| Save / Load | Save, quit, reload — is state identical? | Critical |
| Progression | Can player advance through all gates? Any softlocks? | Critical |
| Economy | Purchase, earn, spend — are values correct? | High |
| Tutorial | Complete FTUE without errors or confusion | High |
| Menu functions | Every button/option works, settings persist | Medium |
| State transitions | Scene changes, pause/resume, backgrounding | Medium |
Start at 100. Deduct per bug found:
Section 2 Score: ___/100
STOP. One issue per AskUserQuestion.
Test rendering quality and visual consistency.
| Area | What to Test | Priority |
|---|---|---|
| Rendering artifacts | Z-fighting, texture pop-in, LOD transitions, shadow acne | High |
| Animation | Blending, transitions, T-pose, foot sliding, clipping | High |
| UI rendering | Overlap, overflow, scaling, font rendering, safe areas | High |
| Particle effects | Spawn correctly, despawn correctly, no lingering | Medium |
| Camera | Clipping through geometry, stuck states, smooth transitions | Medium |
| Lighting | Consistent across scenes, no light leaking, shadows correct | Medium |
Start at 100. Deduct per bug found:
Section 3 Score: ___/100
STOP. One issue per AskUserQuestion.
Test frame rate, loading times, memory usage, and stability.
| Area | What to Test | Benchmark |
|---|---|---|
| Frame rate | Average FPS, 1% lows, 0.1% lows in gameplay | Target FPS ±10% |
| Loading times | Initial load, scene transitions, respawn | <3s scene transition, <10s initial (mobile), <30s initial (PC/console) |
| Memory usage | Peak memory, memory growth over time (leak detection) | Below platform ceiling, no unbounded growth |
| Hitches / Stutters | Frame time spikes during gameplay | <3 hitches >100ms per minute |
| Thermal | Device temperature during extended play (mobile) | Device stays within normal thermal range after 30 min |
| Battery | Battery drain rate (mobile) | <15% per hour of active play |
| Install / Update size | Download and installed size per platform | Within platform limits |
Start at 100. Deduct per issue:
Section 4 Score: ___/100
STOP. One issue per AskUserQuestion.
Test sound effects, music, and audio system behavior.
| Area | What to Test | Priority |
|---|---|---|
| Sound triggers | Every action has its expected sound, at the right time | High |
| Volume balance | SFX vs music vs UI sounds — nothing overpowers others | High |
| Music transitions | Crossfades between tracks, correct music for scene | Medium |
| Missing audio | Any action or event with no sound when one is expected | High |
| Audio overlap | Rapid actions don't create ear-splitting stacking | Medium |
| Mute / Settings | Volume sliders work, mute persists across sessions | Medium |
| Spatial audio | 3D sound positioning correct (if applicable) | Low |
Start at 100. Deduct per bug:
Section 5 Score: ___/100
STOP. One issue per AskUserQuestion.
Test all supported input methods.
| Area | What to Test | Priority |
|---|---|---|
| Primary input | Every action responsive with correct input method | Critical |
| Input switching | Hot-swap between controller/keyboard/touch mid-game | High |
| Button prompts | Displayed prompts match active input device | High |
| Rebinding | Custom keybinds work and persist | Medium |
| Dead zones | Analog stick dead zones appropriate (not too sensitive, not too dead) | Medium |
| Simultaneous input | Multiple buttons, multi-touch, modifier keys | Medium |
| Touch targets | Touch targets >=44px, no overlapping hit areas (mobile) | High (mobile) |
Start at 100. Deduct per bug:
Section 6 Score: ___/100
STOP. One issue per AskUserQuestion.
Test across target devices, OS versions, and screen configurations.
| Area | What to Test | Priority |
|---|---|---|
| Target devices | Game runs on all stated supported devices | Critical |
| OS versions | Minimum supported OS version works | Critical |
| Screen resolutions | All target resolutions render correctly | High |
| Aspect ratios | 16:9, 18:9, 21:9, 4:3 — no cut-off, no stretching | High |
| Notch / Safe area | UI respects device notches and rounded corners | Medium (mobile) |
| Low-end fallback | Quality settings degrade gracefully on weak hardware | Medium |
| External displays | HDMI out, screen mirroring, ultrawide (if applicable) | Low |
Start at 100. Deduct per issue:
Section 7 Score: ___/100
STOP. One issue per AskUserQuestion.
Test localized text, layout, and cultural appropriateness.
Skip if game is single-language only. Score as N/A and redistribute 5% weight to Functional (+3%) and Visual (+2%).
| Area | What to Test | Priority |
|---|---|---|
| Text overflow | Translated text fits within UI containers (German +30%, Japanese variable) | High |
| Missing translations | Any untranslated strings in non-source language | High |
| Font support | All characters render correctly (CJK, Arabic RTL, diacritics) | Critical |
| Cultural issues | Icons, colors, gestures that may be offensive in target locales | Medium |
| Number/Date formats | Currency, dates, numbers formatted per locale | Medium |
| Concatenated strings | Strings built by concatenation often break in other languages | Medium |
Start at 100. Deduct per issue:
Section 8 Score: ___/100
STOP. One issue per AskUserQuestion.
Test that a player can complete the game from start to finish without blocks.
| Area | What to Test | Priority |
|---|---|---|
| Full playthrough | Can a player reach the end/endgame from a fresh start? | Critical |
| Softlock check | Any state where player cannot progress forward or backward? | Critical |
| Achievement triggers | All achievements/trophies attainable? | High |
| Save migration | Old saves work after update? | Critical (for updates) |
| Alternative paths | All branches/choices lead somewhere valid? | High |
| Endgame loop | Post-completion content accessible and functional? | Medium |
| New game plus | If applicable, NG+ works with carried-over state | Medium |
Start at 100. Deduct per issue:
Section 9 Score: ___/100
STOP. One issue per AskUserQuestion.
Calculate after all sections are tested:
QA Health Score
═══════════════════════════════════════════════
Section 2 — Functional: ___/100 (weight: 25%) → weighted: __.__
Section 3 — Visual: ___/100 (weight: 15%) → weighted: __.__
Section 4 — Performance: ___/100 (weight: 15%) → weighted: __.__
Section 5 — Audio: ___/100 (weight: 10%) → weighted: __.__
Section 6 — Input: ___/100 (weight: 10%) → weighted: __.__
Section 7 — Compatibility: ___/100 (weight: 10%) → weighted: __.__
Section 8 — Localization: ___/100 (weight: 5%) → weighted: __.__
Section 9 — Progression: ___/100 (weight: 10%) → weighted: __.__
─────────────────────────────────────────────
WEIGHTED TOTAL: __.__/100
Score Interpretation:
90-100 RELEASE-READY — Ship with confidence
75-89 GOOD — Minor issues, shippable with known issues list
60-74 NEEDS WORK — Significant bugs, fix before release
40-59 POOR — Major quality issues, not ready for players
0-39 CRITICAL — Game-breaking issues, needs fundamental fixes
Bug Summary:
Critical: ___ (list each)
High: ___
Medium: ___
Low: ___
Total: ___
Top 3 Score Impacts:
1. [Category] [Bug]: -___ because [specific reason]
2. [Category] [Bug]: -___ because [specific reason]
3. [Category] [Bug]: -___ because [specific reason]
After all sections are tested, calculate the QA Health Score. This is the baseline — the state BEFORE any fixes.
_BASELINE_FILE="/tmp/game-qa-baseline-${_BRANCH}.json"
echo '{"timestamp":"'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'","score":BASELINE_SCORE,"bugs":{"critical":N,"high":N,"medium":N,"low":N}}' > "$_BASELINE_FILE"
echo "Baseline saved: $_BASELINE_FILE"
Present the baseline:
QA Baseline: ___/100 Critical: ___ | High: ___ | Medium: ___ | Low: ___ Release status at baseline: [SHIP / SHIP_WITH_KNOWN / DO_NOT_SHIP]
A) Enter fix loop — fix what I can, re-test, re-score B) Report only — no fixes, just the bug report (like /qa-only) C) Stop here — save baseline, fix manually, re-run /game-qa later
STOP. Wait for answer.
If B or C: skip to Completion Summary with baseline as final score.
Sort all bugs by severity (Critical → High → Medium → Low). For each severity tier, classify:
| Bug | Fixable by agent? | Action |
|---|---|---|
| [bug] | YES — code fix | Enter fix loop |
| [bug] | YES — config/data change | Enter fix loop |
| [bug] | NO — needs design decision | Report as ASK |
| [bug] | NO — needs assets/content | Report as deferred |
| [bug] | NO — platform/hardware issue | Report as deferred |
Present triage results:
Fix loop will address: ___ bugs (___ critical, ___ high, ___ medium) Deferred (need human): ___ bugs Skipped (low severity, below tier): ___ bugs
Proceed with fix loop? A) Yes — fix all fixable bugs B) Fix critical + high only C) Skip fixes, report only
STOP. Wait for answer.
For each fixable bug, in severity order (Critical first):
# Find the relevant source file
grep -rn "KEYWORD_FROM_BUG" src/ scripts/ game/ 2>/dev/null | head -10
Only modify files directly related to the bug. No refactoring. No "improvements."
Apply the smallest possible fix. One bug = one change.
Rules:
git add <only-changed-files>
git commit -m "fix(qa): BUG-NNN — short description"
One commit per bug. Never bundle.
Re-test the specific bug:
| Result | Action |
|---|---|
| verified | Bug fixed, confirmed by re-test. Continue. |
| best-effort | Fix applied but can't fully verify (needs specific device, auth state, etc.). Note limitation. |
| reverted | Fix caused regression or didn't work. git revert HEAD. Mark as deferred. |
WTF-LIKELIHOOD:
Start at 0%
Each revert: +15%
Each fix touching >3 files: +5%
After fix 15: +1% per additional fix
All remaining Low severity: +10%
> 20% → STOP. Ask user: "I've made N fixes. M reverted. Continue or stop?"
Hard cap: 30 fixes → stop regardless
After all fixes (or fix loop stopped):
Score Delta:
Section Baseline Final Change
Functional: ___/100 ___/100 +___
Visual: ___/100 ___/100 +___
Performance: ___/100 ___/100 +___
Audio: ___/100 ___/100 +___
Input: ___/100 ___/100 +___
Compatibility: ___/100 ___/100 +___
Localization: ___/100 ___/100 +___
Progression: ___/100 ___/100 +___
WEIGHTED TOTAL: ___/100 ___/100 +___
⚠️ If final score < baseline: WARN prominently. A fix introduced a regression. List which fixes were made since baseline and which section regressed.
_DATETIME=$(date +%Y%m%d-%H%M%S)
echo "Saving to: $_PROJECTS_DIR/${_USER}-${_BRANCH}-qa-report-${_DATETIME}.md"
Write the full QA report (Baseline + Fixes Applied + Final Score + Delta + Bug List) to $_PROJECTS_DIR/{user}-{branch}-qa-report-{datetime}.md. If prior QA report exists, include Supersedes: {prior}.
This artifact is discoverable by:
/game-ship — checks QA status as release gate/game-retro — reads bug counts for sprint metrics/game-debug — reads bug details for investigation/game-qa Completion Summary
═══════════════════════════════════
Game: [title]
Version: [version] ([build number])
Branch: [branch]
Mode: [Full / Targeted / Regression / Platform-specific]
Platforms tested: [list]
Devices tested: [list]
Section Results:
Section 1 — Scope: [defined]
Section 2 — Functional: ___/100, ___ bugs found (___ critical, ___ high, ___ medium, ___ low)
Section 3 — Visual: ___/100, ___ bugs found
Section 4 — Performance: ___/100, ___ issues found
Section 5 — Audio: ___/100, ___ bugs found
Section 6 — Input: ___/100, ___ bugs found
Section 7 — Compatibility: ___/100, ___ issues found
Section 8 — Localization: ___/100 (or N/A), ___ issues found
Section 9 — Progression: ___/100, ___ issues found
WEIGHTED TOTAL (baseline): __.__/100
WEIGHTED TOTAL (final): __.__/100 (+__.__)
Fix Loop:
Bugs fixed (verified): ___
Bugs fixed (best-effort): ___
Bugs reverted: ___
Bugs deferred: ___
Release Recommendation: SHIP / SHIP_WITH_KNOWN_ISSUES / DO_NOT_SHIP / BLOCKED
Status: DONE / DONE_WITH_CONCERNS / BLOCKED / NEEDS_CONTEXT
Next Step:
PRIMARY: /game-ship — QA passed, prepare release
(if critical bugs): /game-debug — investigate blockers
(if score < 60): /build-playability-review — not ready, re-check playability
Status definitions:
Release Recommendation definitions:
For each bug found:
BUG-[number]
Severity: [Critical / High / Medium / Low]
Category: [Functional / Visual / Performance / Audio / Input / Compatibility / Localization / Progression]
Summary: [one-line description]
Steps to Reproduce:
1. [step]
2. [step]
3. [step]
Expected: [what should happen]
Actual: [what actually happens]
Platform: [platform + device]
Frequency: [always / sometimes (~X%) / rare]
Screenshot/Video: [reference if available]
- [Area]: Not tested because [reason]. Recommend testing when [condition].
[ -n "$_GG_BIN" ] && "$_GG_BIN/gstack-review-log" '{"skill":"game-qa","timestamp":"TIMESTAMP","status":"STATUS","score":"SCORE","mode":"MODE","bugs":{"critical":N,"high":N,"medium":N,"low":N,"total":N},"release_recommendation":"RECOMMENDATION","sections":{"functional":N,"visual":N,"performance":N,"audio":N,"input":N,"compatibility":N,"localization":N,"progression":N},"commit":"COMMIT"}' 2>/dev/null || true