FlareBisect - Find Flare in your codebase.
Hour 0 — 23:40 — Locked the idea: bisect on flake rate instead of pass/fail. Repo’s up, README written before any code so I remember why this is cool by hour 10.
Hour 2 — 01:33 — Core loop: walk commit range, checkout each into a git worktree, run tests N times, count pass/fail. First time scripting worktrees, cleanup semantics bit me immediately.
Hour 3 — 02:20 — Needed a demo repo with an actual flaky bug. Wrote a throwaway project: module-level dict mutated by a thread with no lock. Good commit passes clean, bad commit fails ~30-40% of the time. Perfect.
Hour 4 — 03:05 — First real bug: worktree checkouts were reusing the same directory, so “parallel” runs were actually serialized and reading stale files. Race condition in the tool that detects race conditions. Fixed with per-run temp dirs.
Hour 7 — 05:30 — Wired up the actual bisection walk, narrowing the range by comparing midpoint flake rate to baseline. First full run against the demo repo — it found the real seeded bug commit. Stared at the terminal for a second like an idiot.
Hour 9 — 07:02 — Slept ~40 min on the floor next to the desk.
Hour 10 — 07:50 — AI explanation layer. First prompt was too open, got a 4-paragraph essay nobody’s reading in a 30s demo. Rewrote for one or two sentences, plain English.
Hour 11 — 08:41 — API key wasn’t loading — .env was being read after typer’s own startup. Moved load_dotenv() to the top of main. 25 minutes lost to printing None.
Hour 13 — 10:22 — Demo run was too slow for a 30s video (5 runs × 12 commits). Trimmed the demo repo’s range, made –runs configurable without touching real defaults.
Hour 14 — 11:15 — Built flarebisect demo as its own command so I’m not fumbling flags live. Should’ve done this at hour 3.
Hour 16 — 12:50 — Existential dip — is “flake rate as a bisectable signal” actually novel or just a dressed-up loop. Decided it doesn’t matter, demo’s good, keep going.
Hour 19 — 15:05 — Recorded the demo. Six takes. Too-small font, fat-fingered hash, then a clean one under 30 seconds.
Hour 20 — 15:50 — Slides — kept text minimal, letting the terminal recording carry it.
Hour 21 — 16:40 — Packaging pass so this is pip install-able, not clone-and-pray. pyproject.toml metadata, GitHub Actions build/publish workflow, twine check clean.
Also ripped out the hardcoded Claude API call — didn’t want to ship something that only works with my personal key. Abstracted behind a provider interface, added flarebisect config, verified it against local Ollama too (worse explanations, but the abstraction’s real).
Ended up redoing the CLI output a third time as a side effect of the provider switch. Wasn’t planning on it, no regrets.
Pushed to github.com/kaorii-ako/FlareBisect, stripped the Claude Code co-author trailer first.
Still not done — demo needs a re-record since the output changed again, slides aren’t finished. Going.
Comments 0
No comments yet. Be the first!
Sign in to join the conversation.