Troubleshooting Guide
Emergency procedures when stuck, tests failing, or errors occurring. Use after 30+ minutes stuck on same issue.
Emergency Procedures
When Stuck (>30 min on one issue)
STOP IMMEDIATELY - Don't keep trying random solutions
Follow this process:
- •
Document What You've Tried
- •List all approaches attempted
- •Note exact error messages
- •Record what changed between working and broken states
- •
Simplify & Isolate
- •Can you reproduce in isolation? (minimal test case)
- •Remove complexity: Comment out code until error disappears
- •Bisect: Is it old code or new code causing the issue?
- •
Check Fundamentals
- • Are dependencies installed and up to date?
- • Is configuration correct? (environment variables, paths)
- • Are file permissions correct?
- • Is the right version running? (restart server, clear cache)
- •
Search for Similar Issues
- •Google exact error message
- •Check GitHub issues for dependencies
- •Search Stack Overflow
- •Review
.claude/memory/for similar past problems
- •
Ask for Help
- •Present clear problem statement to user:
- •What are you trying to do?
- •What happens instead?
- •What have you tried?
- •What's the exact error?
- •Present clear problem statement to user:
- •
Record the Solution
- •Once resolved, create
.claude/memory/YYYY-MM-DD-issue-name.md - •Document: Problem, Root Cause, Solution, Prevention
- •Once resolved, create
When Tests Break Unexpectedly
Diagnosis Steps
- •
Identify When It Broke
bash# Check recent changes git diff HEAD~1 # Run tests on last commit git checkout HEAD~1 npm test # or cargo test, pytest, go test
- •
Isolate the Failing Test
bash# Run single test file npm test path/to/test.spec.ts # Run single test case npm test -t "specific test name"
- •
Check for Flakiness
- •Run test 10 times: Does it fail consistently?
- •Is it timing-dependent? (race condition)
- •Does order matter? (test interdependence)
Recovery Process
If tests broke after your change:
# Option 1: Revert and re-apply incrementally git reset --hard HEAD~1 # Re-apply changes one file at a time, testing after each # Option 2: Git bisect (find exact breaking commit) git bisect start git bisect bad HEAD git bisect good <last-known-good-commit> # Git will checkout commits; run tests and mark good/bad
If tests broke without your changes:
- •Check dependency updates (
package-lock.json,Cargo.lockchanges) - •Check environment differences (Node version, Python version)
- •Check for flaky tests (run 10 times to confirm)
When Security Issue Found
PRIORITY: CRITICAL
Immediate Actions
- •
DO NOT COMMIT vulnerable code
bash# Stash changes if needed git stash
- •
Fix Immediately
- •Security takes priority over all other work
- •Apply fix from guardrails or security best practices
- •
Add Regression Test
- •Ensure vulnerability can't be reintroduced
- •Test both the exploit and the fix
- •
Document in Memory
- •Create
.claude/memory/YYYY-MM-DD-security-fix-NAME.md - •Document: Vulnerability, Impact, Fix, Prevention
- •Create
- •
Review Similar Code
- •Search codebase for same pattern
- •Fix all instances (not just the one found)
Common Security Issues & Fixes
SQL Injection:
// ❌ Vulnerable
db.query(`SELECT * FROM users WHERE id = ${userId}`);
// ✅ Fixed
db.query('SELECT * FROM users WHERE id = ?', [userId]);
XSS (Cross-Site Scripting):
// ❌ Vulnerable element.innerHTML = userInput; // ✅ Fixed element.textContent = userInput; // Or use framework escaping (React auto-escapes)
Hardcoded Secrets:
// ❌ Vulnerable const API_KEY = "sk_live_abc123"; // ✅ Fixed const API_KEY = process.env.API_KEY;
When Performance Degrades
Diagnosis
- •
Measure First
- •Don't guess - profile the code
- •Use browser DevTools (frontend)
- •Use profilers (
cargo flamegraph,py-spy,pprof)
- •
Identify Bottleneck
bash# Node.js node --prof app.js node --prof-process isolate-*.log # Python python -m cProfile -o output.prof script.py python -m pstats output.prof # Go go test -bench . -cpuprofile=cpu.prof go tool pprof cpu.prof
- •
Common Culprits
- • N+1 database queries (use eager loading)
- • Large data loaded into memory (use pagination/streaming)
- • Inefficient algorithms (O(n²) when O(n) possible)
- • Missing indexes on database columns
- • Unnecessary re-renders (React, Vue)
- • Blocking I/O in async contexts
Fix Priorities
- •Big wins first: Fix O(n²) → O(n), add database indexes
- •Measure improvement: Benchmark before/after
- •Don't over-optimize: 80% of time spent in 20% of code
When Build Fails
Common Issues
Dependency Conflicts:
# Node.js rm -rf node_modules package-lock.json npm install # Python pip install --upgrade pip pip install -r requirements.txt --force-reinstall # Go go clean -modcache go mod tidy go mod download # Rust cargo clean cargo build
Version Mismatch:
- •Check Node/Python/Go/Rust version matches project requirements
- •Use version managers:
nvm,pyenv,gvm,rustup
Missing Environment Variables:
# Check .env.example vs .env diff .env.example .env # Set required variables export DATABASE_URL="..." export API_KEY="..."
When Git Issues Occur
Merge Conflicts
# Show conflicted files git status # Open files, look for conflict markers: <<<<<<< HEAD Your changes ======= Their changes >>>>>>> branch-name # Resolve manually, then: git add <resolved-files> git commit
Accidentally Committed Secrets
CRITICAL - Act immediately:
# Remove from last commit (if not pushed) git reset HEAD~1 # Remove secret from file # Add file to .gitignore git add . git commit -m "Remove secrets" # If already pushed - rotate the secret immediately # Then use BFG Repo-Cleaner or git-filter-branch
Lost Work
# Find lost commits git reflog # Recover lost commit git checkout <commit-hash> # Create branch from recovered commit git checkout -b recovery-branch
Red Flags (Stop & Reassess)
Stop immediately if you encounter these:
Code Red Flags
- •❌ Same error after 3 different attempted fixes
- •❌ Solution getting more complex instead of simpler
- •❌ Not understanding why a fix works ("it just works now")
- •❌ Touching >10 files for a "simple" bug fix
- •❌ Breaking existing tests to make new code work
Process Red Flags
- •❌ Skipping tests because "I'll add them later"
- •❌ Committing commented-out code "just in case"
- •❌ Ignoring linter errors "they're not important"
- •❌ Using
anyorunsafeto "make TypeScript/Rust happy" - •❌ Copying code without understanding it
When you see red flags:
- •STOP adding more code
- •Revert to last working state
- •Apply COMPLEX mode: Full 4D decomposition
- •Ask user for guidance if still stuck
Common Error Messages & Solutions
TypeScript/JavaScript
"Cannot find module"
npm install # or npm install <package-name>
"Type 'X' is not assignable to type 'Y'"
- •Check type definitions: Are they correct?
- •Use type assertions only if you're certain:
as Y - •Consider using
unknownand narrowing
"Module not found" (frontend)
- •Check import paths (case-sensitive)
- •Restart dev server
- •Clear build cache
Python
"ModuleNotFoundError"
pip install -r requirements.txt # Or pip install <module-name>
"IndentationError"
- •Use consistent indentation (spaces vs tabs)
- •Configure editor to use 4 spaces
"AttributeError: ... has no attribute ..."
- •Check object type (use
type()or debugger) - •Check if attribute exists (
hasattr())
Go
"cannot find package"
go mod tidy go mod download
"undefined: ..."
- •Check imports
- •Check if function/variable is exported (capitalized)
Rust
"cannot borrow x as mutable"
- •Only one mutable borrow allowed
- •Consider refactoring to avoid simultaneous borrows
"use of moved value"
- •Value was moved (ownership transferred)
- •Clone if needed, or use borrowing (
&)
Recovery Checklist
After resolving any major issue:
- • Tests passing
- • Guardrails validated
- • Root cause understood (not just symptom fixed)
- • Documented in
.claude/memory/if significant - • Similar code reviewed for same issue
- • Prevention added (test, linter rule, guardrail)
Remember: Being stuck is normal. Following a systematic process beats random attempts. Document your solutions - future you will thank you!