A tiny TUI for reporting good / bad / skip / abort verdicts during a manual bisect.
Designed for jj bisect run, but works equally well with git bisect run
since both use the same exit-code contract.
jj bisect run (and git bisect run) hand verdicts back through the
process exit code: 0, 1, 125, 127. For automated tests that's fine,
but for manual bisects you end up typing exit 125 and remembering which
code is which. bshelper replaces that with a small modal picker that says
the words out loud.
┌─ bshelper · jj ─────────────────────────────────┐
│ │
│ Commit k7q4mzpw 78fa1c2b │
│ Author Steve Waits <steve@waits.net> │
│ Date 2026-04-29 14:22 │
│ │
│ Refactor parser to remove redundant clones │
│ ───────────────────────────────────────────── │
│ │
│ GOOD build / test passed │
│ BAD build / test failed │
│ ▶ SKIP can't tell — mark indecisive │
│ ABORT stop the bisection now │
│ │
│ ───────────────────────────────────────────── │
│ ↑/k ↓/j navigate · Enter commits: SKIP │
└─────────────────────────────────────────────────┘
cargo install bshelperWith Jujutsu (preferred):
jj bisect run --range 'a..b' -- bshelperWith Git:
git bisect start <bad> <good>
git bisect run bshelperbshelper detects the VCS at runtime: jj first, git as a fallback. The
selected verdict is reported via the process exit code so the parent
bisect run keeps walking the history.
| Verdict | Exit | Meaning |
|---|---|---|
| GOOD | 0 | build / test passed |
| BAD | 1 | build / test failed |
| SKIP | 125 | can't tell — mark indecisive |
| ABORT | 127 | stop the bisection now |
These match the git bisect run / jj bisect run contract exactly.
| Key | Action |
|---|---|
↑ / k |
move highlight up |
↓ / j |
move highlight down |
Enter |
commit the highlight |
The default highlight is SKIP — a stray Enter wastes a step but never
poisons the bisect. There is no second escape hatch: to abort, navigate to
ABORT and press Enter.
MIT — see LICENSE.