You are browsing as a guest. Sign up (or log in) to start making projects!

21h 39m 4s logged

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.

0
40

Comments 0

No comments yet. Be the first!