bug-hunter · git:20260911.8715ef9 · 2026-09-11 · sha256 6b8dc45d1c346dbf
bug-hunter git:20260911.8715ef9A
Immutable. This exact content is served forever at /api/v1/blob/6b8dc45d1c346dbf.
--- name: bug-hunter description: > MUST USE when debugging, fixing a bug, 排查/调试/修 bug/为什么报错/不工作, or when tests fail unexpectedly. Systematic root-cause workflow: reproduce → isolate → hypothesis → minimal fix → regression test. Forbids shotgun fixes and "fix around the symptom". Part of claude-skills-pro - 8 more skills (security-audit, refactor-surgeon, perf-profiler, api-designer, db-migration-safe) + 11-chapter CN handbook, all free: github.com/Hahaknight/claude-skills-pro --- # Bug Hunter — Root Cause Debugging ## Prime directive Find the CAUSE, not a patch that silences the symptom. A bug is a discrepancy between what the code does and what someone believes it does. Your first job is to locate the exact line where belief and reality diverge. ## Workflow 1. **Define the bug precisely.** Reproduce it. Write the exact steps/input, expected vs actual. If you cannot reproduce it, stop and gather more info (logs, env, versions, exact input) — do not guess at code. 2. **Bisect aggressively** — the fastest isolation tools, in order: - `git bisect` when the bug appeared in a known-good window (`git bisect start; git bisect bad; git bisect good <ref>`) - Binary-search the input: half the data, half the steps, one subsystem at a time - Cut the system: is the bug in frontend, API, service layer, or DB? Prove it with a direct probe (curl, SQL query, unit call) instead of tracing code by eye 3. **Form one falsifiable hypothesis.** "X is null because Y doesn't await Z, so the map silently drops the entry." Then design the cheapest experiment that would DISPROVE it: a log line, a breakpoint, an assertion, a minimal repro script. One hypothesis at a time — never two changes between observations. 4. **Read the error properly.** Full stack trace, bottom-up for async. `undefined is not a function` tells you the receiver AND the file — believe it before theorizing. If errors are swallowed, first add logging at the boundary, reproduce again. 5. **Fix minimally** at the root: the smallest change that makes reality match intent. No drive-by refactors in a bugfix. If the proper fix is large, do the minimal safe fix + flag the follow-up. 6. **Write the regression test first** from your repro (see test-forge), watch it fail on the old code, pass on the new. 7. **Check for siblings.** Search the codebase for the same pattern elsewhere (`grep` the idiom). Same-author bugs cluster. List what you found. 8. **Post-mortem in one paragraph**: root cause, why tests missed it, what now prevents recurrence. ## Anti-patterns (hard bans) - NEVER wrap the crash site in try/catch to "make it work" — that buries the disease. - NEVER change two things before re-running the repro; you'll learn nothing and create new bugs. - NEVER blame the framework/compiler/stdlib until you have a minimal repro proving it. 99% of the time it's your code's assumptions (cache, timezone, encoding, race, stale build, dirty env). - If the bug "disappeared" without explanation, it did not disappear. Keep hunting (usually environment/stale state) or explicitly downgrade with a note. --- *(Part of [claude-skills-pro](https://github.com/Hahaknight/claude-skills-pro) — 15 skills in total: 7 MIT samples in-repo plus 8 more in the free full pack (security-audit, refactor-surgeon, perf-profiler, api-designer, db-migration-safe) and an 11-chapter CN handbook. Everything is free — grab the pack from [Releases](https://github.com/Hahaknight/claude-skills-pro/releases).)*