~/blog
Blog
Articles and thoughts on web development, architecture, and technology.
Claude Code checkpoints and /rewind: how to undo an agent's changes
How checkpointing and /rewind work in Claude Code, what a checkpoint captures, and where git still has to do the work.
read →Debugging with a coding agent: give it the search, keep the hypothesis
An AI debugging workflow for Claude Code and other agents: what the fault-localisation research shows agents miss, and how to split the work so the hypothesis stays with you.
How database indexes work: the B-tree under everything you shipped this week
A B-tree explained from the shape up, and why every index rule you memorised is that shape restated: leftmost prefix, sargable predicates, covering indexes, slow inserts.
Claude Code plan mode: decide before the agent writes
How plan mode works in Claude Code: the plan file on disk, the five phases you never see, and the places where read-only turns out to be a suggestion.
Git worktrees for parallel coding agents: what they isolate and what they share
Git worktrees give parallel coding agents their own files and nothing else. What --worktree isolates in Claude Code, what stays shared across the one .git, and the isolation choices the flag does not make for you.
Claude Code context management: when to /clear and when to /compact
Context management in Claude Code got harder when the window got bigger. What /context actually measures, why /compact is a lossy re-encode of your session, and the rule I use for when to clear instead.
Measuring AI code quality: the dashboard beyond coverage and mutation testing
Coverage proves a line ran, mutation testing proves a test would catch a bug, and neither tells you if the code is quietly getting harder to change. What complexity, clone detection and architecture fitness functions actually catch.
When not to use AI for coding: the tasks I still do by hand
Knowing when not to use AI for coding is already a skill you practise, unconsciously and badly. It is also what wrecked METR's follow-up study. Here is the dividing line I actually apply, and why difficulty is the wrong axis.
Claude Code /doctor: the health check became a context audit
What /doctor actually checks in Claude Code now: ten checks, and only two of them care whether the thing is installed. The rest audit what you loaded.
Who is responsible for AI-generated code? You are, and 2026 wrote it down
Accountability for AI-generated code stopped being a philosophical question this year. In January California barred "the AI did it" as a defence, Europe makes software a product in December, and no vendor indemnity covers your code being wrong.