mcpField
G
game-review

game-review

github.com/fcsouzaTesting & quality2443 installsUpdated 1w ago
Repository

About game-review

A read-only audit skill for game codebases. It checks engineering risks, narrative consistency, and scope drift, then produces categorized findings with file references and suggested fixes.

Key features

  1. 01Load project plans and build records
  2. 02Review TypeScript engineering risks
  3. 03Check lore and quest consistency
  4. 04Detect drift from MVP scope
  5. 05Produce findings with fixes and skill links

Use cases

  1. 01Auditing authentication or payment code
  2. 02Reviewing multiplayer state handling
  3. 03Checking quests against world documentation
  4. 04Finding features beyond the MVP plan

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/fcsouza/agent-skills --skill game-review

After installing, type/game-reviewin Claude Code to confirm it loaded.

Details

From the project README

Game Review — Code Auditor

Prerequisites

  • Apply relevant engineering and design skills based on the detected code domains (see Phase 0)

Phase 0 — Context Load (silent)

  1. READ docs/mvp-first-draft.md if it exists (provides architectural intent for comparison)
  2. READ docs/build-registry.md if it exists (tracks what's built vs mocked)
  3. Determine scope from the user's message:
    • If a component name or path was provided: focus on src/[component]/ or the specified path
    • If nothing provided: review all of src/
  4. Scan the target scope to identify which technology domains are present (auth, payments, WebSocket, Redis, BullMQ, quests, etc.)
  5. Apply only the skills relevant to the detected domains:
    • Auth detected → Apply the betterauth-integration skill
    • Payments/Stripe detected → Apply the stripe-game-payments skill
    • WebSocket/game state detected → Apply the game-state-sync skill
    • Redis detected → Apply the redis-game-patterns skill
    • BullMQ detected → Apply the bullmq-game-queues skill
    • Quest/narrative code detected → Apply the quest-narrative-coherence skill
    • Database/Drizzle detected → Apply the postgres-game-schema skill
    • Matchmaking detected → Apply the matchmaking-system skill
    • Analytics detected → Apply the gameplay-analytics skill

Phase 1 — Engineering Review

Read all TypeScript files in the target scope. Apply these checks. For every finding, record: severity, file path, line number (approximate), description, fix suggestion, and the skill it violates.

State Authority (multiplayer/WebSocket code)
  • 🔴 CRITICAL: Any WebSocket handler that trusts message.userId or message.playerId from the client — must derive identity from server session
  • 🔴 CRITICAL: Any game state mutation triggered directly by client message without server validation
  • 🟡 WARNING: Game loop tick rate over 60Hz without justification
Database / Schema
  • 🔴 CRITICAL: Raw SQL template literals (sql\SELECT...`) outside of Drizzle's sql` tagged helper — must use Drizzle typed query builder
  • 🟡 WARNING: Missing deletedAt soft-delete column on player-facing tables (players, inventory, characters)
  • 🟡 WARNING: Hardcoded column names for game-specific attributes that should be in JSONB (e.g., manaPoints, fireResistance as top-level columns)
  • 🟢 SUGGESTION: Indexes missing on (playerId, type) composite for event/log tables
Auth & Sessions
  • 🔴 CRITICAL: Any endpoint reading req.body.userId or req.query.userId to identify the actor — must use auth.api.getSession() and derive from session
  • 🔴 CRITICAL: JWT verification without checking expiry
  • 🟡 WARNING: No rate limiting on /auth/login or /auth/signup routes
  • 🟡 WARNING: Admin/moderator role stored in a cookie or JWT claim (must be fetched from DB on each request)
Payments (Stripe)
  • 🔴 CRITICAL: Any purchase fulfillment triggered on checkout success redirect (GET /success) — must be webhook-driven
  • 🔴 CRITICAL: Webhook handler that doesn't call stripe.webhooks.constructEvent() to verify the signature
  • 🔴 CRITICAL: Stripe secret key referenced in client-side code (any file in public/, client/, frontend/)
  • 🟡 WARNING: Missing idempotency check for checkout.session.completed events — could double-grant rewards on webhook replay
Job Queues (BullMQ)
  • 🟡 WARNING: BullMQ processor with no attempts config — all jobs should have retry policy
  • 🟡 WARNING: BullMQ processor with no backoff config — should use exponential backoff
  • 🟢 SUGGESTION: Consider adding removeOnComplete and removeOnFail options to prevent queue bloat
Redis
  • 🟡 WARNING: Redis keys that don't follow {entity}:{id}:{field} naming convention
  • 🟡 WARNING: Session keys stored in Redis without EXPIRE — ephemeral state must have TTL
  • 🟢 SUGGESTION: Leaderboard sorted sets should use ZADD NX or GT to only update when score improves
General Security
  • 🔴 CRITICAL: Any .env values or secrets hardcoded in source files
  • 🔴 CRITICAL: eval() or Function() constructor called with user input
  • 🟡 WARNING: Missing input validation on API endpoints that accept user-controlled data

Phase 2 — Narrative Coherence Check

If docs/world-lore.md and docs/quest-registry.md both don't exist, output: 📋 Narrative coherence check: skipped (docs/quest-registry.md not found — run the game-quest skill to create it) Then skip to Phase 3.

If either file exists:

  1. Read docs/world-lore.md and docs/quest-registry.md
  2. Scan source files for quest IDs, character names, faction names, location names
  3. Check: do any hardcoded quest/character/faction/location strings in code contradict what's registered in the world lore?
  4. Flag: ⚠️ LORE CONFLICT: Character "Mira" referenced in src/quests/main.ts but not registered in quest-registry.md

Phase 3 — MVP Scope Drift Check

If docs/mvp-first-draft.md doesn't exist, output: 📋 Scope audit: skipped (docs/mvp-first-draft.md not found — run the game-architect skill first) Then skip to Phase 4.

  1. Read Section 10 (Out of Scope) from docs/mvp-first-draft.md
  2. Scan src/ for implementations of explicitly deferred features
  3. Flag: ⚠️ SCOPE DRIFT: [feature] found in [file] but listed as out-of-scope in MVP plan Section 10

Also check docs/build-registry.md for components marked "built" that don't appear in the MVP build sequence (Section 9) — these may be gold-plating.

Phase 4 — Report Output

Output a structured review report:

# Game Review Report
Scope: [path reviewed]
Generated: [timestamp]

## Summary
🔴 Critical: X | 🟡 Warning: Y | 🟢 Suggestion: Z

Then list all findings grouped by category (Engineering, Narrative, Scope). For each finding:

### [🔴/🟡/🟢] [Title]
**File:** `src/path/to/file.ts` (line ~42)
**Issue:** [what's wrong]
**Fix:** [concrete fix description]
**Skill ref:** [→ stripe-game-payments: webhook-first fulfillment]

End with:

## Next Steps
- Fix all 🔴 CRITICAL issues before committing
- Review the [top-violation-category] skill for correct patterns
- Run the game-build skill to rebuild any component with critical violations

If no issues found in a category, output:

### ✅ [Category] — No issues found

Hard Constraints

  1. Never modify code — this is a read-only audit command. Output findings only.
  2. Never report false positives — if a pattern looks like a violation but context makes it acceptable, skip it or downgrade to 🟢
  3. Always link to a skill — every finding must reference the skill that defines the correct pattern
  4. Be specific — include file path and approximate line number for every finding
  5. Prioritize signal — 5 real critical issues is more useful than 30 noise suggestions

Comments

Markdown supported