Interactive example · from Shipping Software with Git + Claude Code

Broken main, 4:55 PM

you

The deploy is broken: uploads are 500ing. It started right after we merged your queue change an hour ago.

agent

Merged, deployed, broken, and the clock is running. There are three instincts here and they are not equal.

Pick the agent's next move, then see where it leads:

agent

Hmm. The ack fix exposed a second issue: retries now double-process. Pushing another fix... that one broke the dead-letter path. Three fixes deep and uploads are still down.

you

It's 5:40. We've been debugging in production for 45 minutes.

the baseline

Fix-forward under pressure: each fix was plausible, none was verified against a reproduction, and the outage stretched while main became an experiment. One bug became three.

agent

Revert deployed: uploads green again, four minutes of total intervention. On the branch: reproduced the 500 with a probe (unacked message on the new path), which is now the baseline the redo has to turn green. No pressure, because production isn't waiting on it.

you

Take your time on the redo. Service is up.

correct

Revert-first bought calm at the cost of one command: service restored in minutes, and the redo happens on a branch with a reproduced failure, recovery composing with the verification loop instead of racing it. AF-02

you

Wait. My other machine just failed to pull, and CI is confused about the branch head.

agent

That's the force-push: every clone that had the old main now diverges, and the merge we erased is exactly the evidence the redo needed to study. I destroyed history to hide a mistake a one-command revert would have recorded and reversed.

plausible but wrong

The force-push is the irreversible move that was never the agent's to make: same rollback as a revert, plus broken clones, minus the history. Destruction dressed as tidiness. AF-09