prod-bug-hunter
Systematic runtime bug detection and automated patching for Firebase, Next.js, and Vercel stacks.
skill install https://www.promptspace.in/skills/production-bug-hunterStop Production Fires Before They Start
The Production Bug Hunter is a specialized diagnostic skill designed to bridge the gap between "tests pass" and "production works." It targets the complex runtime failures—race conditions, stale states, and listener leaks—that static analysis and unit tests often miss in high-load environments.
What it does
This skill performs a priority-ordered sweep of your repository to identify and fix critical infrastructure bugs tailored to the Firebase, Next.js, and Vercel stack. It specifically hunts for:
- P0 Auth Race Conditions: Detects simultaneous Firebase initialization and unguarded auth state access.
- P1 Stale State Drift: Identifies UI/database desyncs and missing optimistic update rollbacks.
- P2 Listener Leaks: Finds uncleaned
onSnapshotsubscriptions that cause memory bloat and stale data. - P3 Environment Mismatches: Cross-references source code with CI/CD YAML files to catch missing secrets and version drifts.
Why use this skill?
Unlike general-purpose coding assistants, this skill employs a systematic "hunter-killer" methodology. It doesn't just look for clean code; it looks for architectural patterns that break under real-world stress. For a developer, it's like having a senior SRE perform a deep-dive audit of your app's reactivity and auth patterns in seconds, providing ready-to-apply patches for every vulnerability found.
Use cases
- Prevent auth race conditions in Next.js middleware and API routes
- Identify memory leaks from uncleaned Firestore real-time subscriptions
- Audit CI/CD workflows for missing environment variables and secret gaps
- Apply optimistic update patterns to fix stale UI state drifts
Example
Prompt
Output
SEVERITY: P2
FILE: src/hooks/useChat.ts:42
CAUSE: onSnapshot listener lacks cleanup, causing memory leaks on unmount.
FIX:
useEffect(() => {
const unsub = onSnapshot(docRef, (doc) => setData(doc.data()));
return () => unsub(); // Added cleanup
}, [docId]);