02 / Notes from the workbench
Notes from the workbench.
Thoughts on software, AI, tools and things I learn along the way.
- Learning Go in 2026A TypeScript developer learns Go by building a small gym workout backend. What surprises you coming from TypeScript: no unions, zero values, errors as values, goroutines. The three traps that caught me, and a TypeScript to Go cheatsheet.
- Cloudflare Workers AI: everything the free tier decidedI wanted to run open models without the hardware to run them, so I built a scanner on Cloudflare Workers AI and kept it inside the free tier. The free tier is why it existed, why it worked, and in the end why it died.
- Diving into HerdrA terminal workspace manager that recognizes the coding agents running inside its panes. What it adds on top of tmux, how the client and the server split the work, what the five agent states actually mean, and where it stops helping.
- Contract tests without the stackA suite that checks two applications still agree without starting either of them. What Pact writes down, the two settings that stop it reporting green over half a contract, the pipeline rule that admits its own blind spot, and the part of the work worth handing to an agent.
- Making Stryker run on a Svelte monorepoThe practical half: how the configs are split, what a surviving mutant is actually telling you, the four fixes that cover most of them, and the details that cost real time to get right when the whole thing has to run on every merge request.
- Who checks the agent's testsCoverage says a line ran, not that anything was verified, and an agent asked for tests will happily produce the difference. Mutation testing tells the two apart. Putting it inside the agent's loop failed in exactly the way it was built to catch, and repairing that is what earns an automated check the right to block.
- The best model still needs rulesA refactor that could not be avoided turned into a fair test of coding agents, because it had to actually ship. The strongest model produced mediocre code on its own. What made it useful was the structure built around it, one correction at a time, and the limit that structure never removed was knowing the work was correct.
- Renovate: the cost of a locked-down agentThe major upgrades the automation will not open on its own. A frontier agent on a locked-down runner produced confident, wrong merge requests, because the safeguards that hardened it also cut it off from what it needed. Run without those constraints, a different agent could verify the same upgrade. The problem was never the model.
- Renovate: a small agent for the common failuresAutomated dependency merge requests fail in a handful of predictable ways. A small model clears the mechanical ones, and when it cannot, it writes down what it found.
- Renovate: refining the automationGrouping so the output stays readable, cooldowns that had to be taught not to fight each other, moving onto a managed swarm, and finally letting minor and patch updates merge themselves.
- Renovate: automating dependency managementInstalling the bot took an afternoon. Teaching it what our repository actually was took a year, and most of that is grouping, a regex, and a CI job that writes changesets on its behalf.
- Ten months of Svelte 5Atoms upward, Svelte 4 and Svelte 5 side by side the whole time, while the product kept shipping. Almost none of it hurt. This is the part that did.