bisectlisted
Install: claude install-skill tokyubevoxelverse/bisect
# Bisect
Something used to work. Your job is to hand back the exact commit that broke it, with an explanation of *why* it broke. `git bisect` does the search; your job is building a reliable oracle and driving the machine.
## Phase 1 — Build the oracle
Translate the symptom into an executable check script that exits `0` when the behavior is good and non-zero when it's bad. This script is everything — a wrong oracle bisects to a wrong commit with total confidence.
- Prefer the narrowest observable signal: a failing test, a grep on output, an HTTP probe, an exit code — not "run the app and look."
- **Validate the oracle before trusting it:** it must fail at the suspected-bad ref (usually HEAD) and pass at some older ref. If the user can't name a good ref, probe backwards — last release tag, then earlier tags/dates — until the check passes. No verified good/bad pair, no bisect.
- If the symptom is flaky, make the oracle run the check N times and fail on any failure (or majority, if the flake is inverse). State the confidence tradeoff.
## Phase 2 — Drive the machine
- Work in a **separate worktree** (`git worktree add`) so the user's working directory is untouched.
- `git bisect start <bad> <good>`, then `git bisect run <oracle>`.
- Handle history friction:
- Commit doesn't build for unrelated reasons → `git bisect skip`.
- Build/setup steps changed across history → make the oracle detect and adapt (e.g. try both old and new install commands), or bisect in stages across