Writing & build logs.
Essays on software development, web builds, and AI tooling. Plus build notes from what I'm actually working on right now.
I fixed four pipeline bugs in three days. The success rate was 20%.
On the morning of 2026-06-13, three articles were blocked or in trouble before 09:00. Working backwards from a 20% autonomous success rate across five slots revealed something individual fix sessions don't surface: every fix had left the adjacent failure mode intact.
I patched the same privacy leak four times. The lesson isn't to be more careful.
Private repo names in a language stats page. A macOS username in a published plist example. A missing privacy policy when the newsletter went live. Four separate fixes, each reactive, each after deployment. Four is enough to name the pattern: the publish boundary has no scrubber.
145 words shipped on inheritance tax. 949 words fixed it. The gate measured the wrong thing.
The operator-publish gate cleared 145 words on UK Inheritance Tax because word count was above minimum and the verifier passed. IHT is YMYL content. A same-day ultracode rescue to 949 words proved the gate needs a depth signal, not just a length floor.
Eight pillars published. AdSense said low value content. The bottleneck was never volume.
Closing the 8-pillar map on 23 June was the point at which Phase 1.6's publish-volume theory ran out of runway. The AdSense low-value-content gate was already in place; more articles hadn't moved it. The real bottleneck is internal-link density and topic-cluster cohesion.
The check-in button opened a transaction form: how three device-QA bugs made bb-finance's Home gamification navigable
The three Home gamification blocks in bb-finance — Quests, Level, Streak — were pulling live data and doing nothing else. Tapping the Streak check-in opened the transaction form instead. Three bugs from the AnF device-QA round forced Phase N, which built the detail screens and routing that turned the blocks from decoration into navigation.




