Writing & build logs.
Essays on software development, web builds, and AI tooling. Plus build notes from what I'm actually working on right now.
Three articles cleared every gate. None of them cleared the style guide.
Phase 9 of the article pipeline auto-pipeline shipped on 2026-06-11. Within 24 hours I was manually patching three articles that had cleared every automated check but violated the style guide's em-dash budget on all three. The scrubber had the right rule. It was checking the wrong scope.
Every post-merge the idea park fix was the same fix
Provenance sanitisation, SCRIPT_DIR co-location, BB_CALLER lint — three fixes shipped after the idea park merged. They look like different problems. They’re not. All three are the audit trail recording what it could infer rather than what actually happened.
Stop retrying the prompt: what the brief ledger taught the image harness
Four sessions into generating hero illustrations, I was still fixing the same structural mistakes on different posts. Each bad render was a lesson. The retry loop wasn't keeping them.
Both voice iterations failed the Cash ISA test. I shipped the original.
Two iterations of the uk-calculator-voice skill (analytical v2.0.0 and warmth-corrected v2.1.0) both failed the same blind A/B on Cash ISA drafts. The original v1.0.0 won both rounds. The ship was v1.1.0: a reset to the passing baseline with the recovery path formalised, not a third iteration attempt.
The inbox filter model drops strangers silently. I built a queue instead.
Inbox filters drop what they don't recognise. I wanted a record instead: every unknown sender parked, every blocked arrival logged, nothing silently gone. Five tables, four sync branches, and a historyId cursor later, the editorial pipeline's Inbox Hub does exactly that.




