Context
Run many coding agents through branch, pull request, review and merge, and throughput collapses. An agent learns its context is stale only at merge time, a rebase forces it to re-understand a text diff, and after rebasing someone else lands first. Worse, git cannot see read-write staleness: agent A reads how a function works, agent B changes it, both merge cleanly, and A’s code is now wrong.
Decisions
One live main and a thin copy-on-write overlay per agent. A FUSE filesystem in Go mounts the git tree at the agent’s pinned commit with the agent’s changes on top, so editors, the compiler and the tests see a normal checkout. Every file opened is logged, which gives each agent’s read set for free, including the imports the compiler and test runner pulled in.
Checkpoints advance the view. Before each test run the agent’s view moves to the latest main, and each changed path is classified: a write-write overlap gets an entity-level merge, a change to something the agent read becomes a notice whose severity comes from a signature diff, and anything else is ignored.
Promotion is the merge. A single coordinator Durable Object is the only writer of main and holds the version clock, the overlay registry and the read-set index.
Benchmarked honestly: the same tasks, scheduler, agent loop and test runner against a pull request flow and a push-to-branch flow, with only version control changing.
Consequences
On the full bank, Live Main landed 336 of 336 tasks in 25.6 minutes and reached all green; the pull request flow landed 252, failed 81 and never went green in 79.4 minutes. Thirty breakages were caught before landing, against none for either baseline.
These are scripted agents on one shared laptop, so the wall times are relative rather than absolute, and one landed regression was a CI flake under load. It is a prototype that answers a question, not a product.