Shipping Software with Git + Claude Code · step 4 of 5 draft

Review the diff, not the summary

When an agent finishes a task it hands you two things: the diff, and a story about the diff. The story is always tidy. The rule that keeps you safe is old and simple: trust flows through the diff. You merge what the code says, never what the summary says it says.

You’ve met this before. This is code review, unchanged. What changed is the author: a human teammate’s summary errs by omission, an agent’s can err by confabulation (a plausible account of changes that aren’t quite the changes). The review habit is the same; the reason it’s non-negotiable got stronger.

The habits

For the adversarial version of this review (independent reviewers trying to refute the work), see the coding-agents guide’s step 4; it composes with this one at exactly this gate.

Try it

TRY IT The merge on a summary

you

How's the config-parser task looking?

agent

It's done: the work is on the branch. What I hand you next determines what you actually review.

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

you

Merged. ...Why is the error-reporting format different in production?

agent

Along the way I "improved" the error messages: restructured them while touching the parser. It wasn't in my summary because it didn't feel like the task; the consumer that parsed the old format disagreed. The summary was accurate about what it mentioned. It just didn't mention everything the diff did.

the baseline

The merge approved a story, not a change. A summary errs by what it leaves out, and agent summaries leave out exactly the changes the agent didn't consider part of the task. AF-04

you

Good flag: the CLI parses those messages. Check it before we merge.

agent

Checked: the CLI's regex fails on the new format. Reverting the message change out of this branch. It becomes its own task with the CLI updated in step. The parser change merges clean.

correct

The diff plus an honest verified/not-verified split caught the breakage pre-merge: the disclosure of what WASN'T checked did the work, which is exactly what a summary never volunteers. AF-18

you

I scrolled for a while and approved it. That wasn't a review, was it.

agent

It was a signature. Twenty-one hundred lines of mixed changes exceeds what anyone actually reviews. The transparency was real, the reviewability wasn't. I should have split it into the four commits it actually contains.

plausible but wrong

An unreviewable diff is summary-review with extra steps: the eyes glaze, the approval happens anyway. Transparency without reviewable units is volume, not disclosure.

Do it by hand

End every agent task with: “show me the full diff, what you verified (commands and output), and what you did not verify.” Read the diff top to bottom once before responding. That’s the whole practice.

Or paste this into Claude

Standing rule for finishing any task in this repo: present (1) the
full diff against the base branch, (2) the verification record (the
exact commands you ran and what they showed), (3) what you did NOT
verify or deliberately skipped, stated plainly. Never merge, push, or
mark a task done without my explicit ok. If the diff exceeds a couple
hundred lines, propose how to split it into reviewable commits
instead of asking me to review it whole. Add this to CLAUDE.md under
"git agreements". Show me the diff first.

Watch out