Build log
Notes from the bench — what broke, what I changed, and why.
What broke building a bell clock
Forty-three bugs in ten days, almost none of them typos. The mistakes were beliefs — that a comment was true, that a stub stood in for a browser, that a green test meant what its name said. Here are the ten that generalise.
A clock that never counts down
BellTab is a school bell countdown that lives in the browser tab. Building it came down to one rule the browser forces on you, a set of gates that caught more than I did, and a lesson about restoring old code that I had to learn twice in one day.
I gave an AI tutor a Sudoku solver, then used the solver to grade it
A weekend build — an MCP server over Puzzle Lab's human solver, an agent that gives one hint, and an eval harness that scored 52 hints against ground truth. The number came back perfect, which turned out to be the interesting part.
Thirteen hours, no error
A security fix I'd reported as a win quietly killed my daily puzzle generation, and it left no trace anywhere — finding out why made me measure what my multi-zone architecture actually costs.
One column was doing four jobs
Cutting Puzzle Lab's daily from 30 boards to 6 meant one database column stopped meaning what it used to — and a safety net I'd relied on quietly stopped catching anything.
There's no such thing as a hard 4×4 Killer Sudoku
Shrinking Puzzle Lab's daily from 30 boards to 6 meant building a tiny Killer Sudoku — and measuring 16,000 of them showed the difficulty lever I rely on at 9×9 has nothing to push against at 4×4.
KSudoku exposes two difficulty knobs — one of them does nothing
Building Killer Sudoku generation, I reached for KSudoku's cage difficulty parameters and found one of the two was dead code — which is why Puzzle Lab grades by technique instead of by a knob.