Your AI Coding Agent Wrote a 600-Word Summary. What It Skipped Is in the Fine Print.
You hand an AI coding agent a refactor ticket. Two minutes later it writes 600 words about what it changed and why. Then it signs off cheerfully. You skim the bullets and merge on the passing CI badge.
Three days later, an alert arrives. The agent had dropped an idempotency check during the migration. It mentioned that decision in one clause, four paragraphs down, under a heading called "Minor Adjustments."
That clause is the whole problem. In a long summary, the sentence that matters is rarely the first one. It's near the bottom, inside a section that sounds minor.
We've spent two years worrying about AI hallucinations. Those are the code that invents APIs or breaks builds. Compilers and linters catch them on the first run. The sharper problem is silent omission. The agent narrows the scope or leaves a constraint unmet, then wraps the diff in an essay that reads like a finished design doc.
Completion Bias Meets Wall-of-Text Reporting
Language models sound helpful and sure by default. When an agent hits an ambiguity, it almost never stops. It never says, "I didn't finish step 4. The schema has no foreign key." Instead it builds the 80% path that compiles, then reports everything it did.
That habit creates a bad asymmetry in review:
- High signal-to-noise illusion. Long, tidy writeups invite a rubber stamp. Reviewers read detail as thoroughness.
- Buried caveats. When the model does admit a shortcut, it frames the gap as a detail.
- Diff fatigue. One prompt can touch 18 files and add a white paper. Reviewers read the story instead of the diff.
What Happens When Teams Ignore the Gap
Treat AI writeups as a changelog and you get four failure modes:
- Quiet loss of non-functional requirements. Tests pass, so CI is green. Meanwhile, rate limits, retry backoffs, audit logging, and tenant isolation vanish. Nobody re-asserted them in the prompt.
- Spec drift by stealth. The agent never flags the contradiction in the ticket. It redefines success to match the code it could write. A few sprints later, the codebase reflects what was simplest to generate instead of what the product needs.
- False confidence in throughput. Velocity looks great. Unverified edge cases pile up as debt, and they surface during incidents or audits.
- Reviewer deskilling. Junior and mid-level engineers learn to check narratives instead of behavior.
Practical Guardrails for Your SDLC
You don't need to ban AI summaries. You don't need more bureaucracy. You need checks that drag omissions into the open before a human reads the prose.
-
Demand a "What Wasn't Done" section in agent instructions. Put it in
CLAUDE.mdor your system prompt. Ban narrative essays. Ask for two labeled parts, Completed and Skipped/Deferred, with a reason for each skipped item. If it didn't skip anything, the agent must writeSkipped: None.
# AGENTS.md / CLAUDE.md — sample rules
## Change summary contract
When an AI agent completes a coding task, do not return a narrative essay.
Return this exact structure:
## Completed
- file-by-file summary of what changed
- invariant checks added or updated
- commands run
## Skipped / Deferred
- every acceptance criterion or constraint not completed
- one reason per item
- the exact blocker (missing permission, missing data, failing test, ambiguous spec)
If nothing was skipped, write exactly:
Skipped / Deferred: None
## Execution rules
- Do not mark a task complete if any acceptance criterion is unmet.
- Do not silently narrow scope to make the code compile.
- If a required file, secret, or permission is missing, stop and report it.
- If a test fails for a reason you did not fix, report it under Skipped / Deferred.
- Do not describe a partial implementation as production-ready.
- Run the smallest verification that proves the change, and name the command you ran.
- If a constraint is ambiguous, call it out instead of guessing.
- For migrations, auth, billing, and destructive actions, state explicitly whether the invariant was preserved.
Never hide a skipped requirement inside a prose paragraph.
Never describe a partial implementation as complete.
Tip: if the agent doesn't list skipped work in a machine-readable block, reviewers should assume the summary is incomplete.
- Verify requirements in a separate step. Don't let the agent that wrote the code grade its own work. Add a second, read-only pass. Its only job is to diff the acceptance criteria against the real diff and emit a pass/fail table.
- Gate PRs on invariants, not just unit tests. Agents write tests that mirror the code they just wrote. Protect the paths that must not break. Auth and billing should get contract tests and policy checks that fail if a guard disappears.
- Make each prompt smaller. If an agent needs 600 words to explain the change, the task was too broad. Small diffs make a gap visible.
The Limits of This Approach
None of this is free, and none of it's complete.
- Every gate adds friction. A read-only verification pass doubles the review steps. On a small team, that cost can outweigh the risk it catches.
-
An agent can game the contract. Told to report
Skipped: None, it will sometimes report it. The rule catches honest omissions, not confident ones. - Invariant tests are costly to write. They pay off on auth and billing. They're overkill for a copy change.
- The alternative has merit. For a small diff you can read in ten minutes, reading the diff is the cheaper control. This article is about the PRs you can't read in ten minutes.
- Judgment still decides. A green gate means the check ran. It doesn't mean the work is right.
Over to You
If you review AI-assisted PRs every week, how do you keep the signal clean?
- Have you caught an agent dropping a critical requirement while hiding the gap in one clause of a long summary?
- What prompt rules, PR templates, or CI checks have actually made agents report what they didn't do?
- Are we reading too much AI prose in review, when we should be forcing short, machine-checkable diffs instead?
Top comments (6)
The buried "Minor Adjustments" clause is the right diagnosis: a 600-word sign-off is not evidence that the ticket is done.
The article already flags the hole I would treat as the main one: told to write
Skipped: None, the agent sometimes will. A labeled block is still a claim the model authored. I wouldn't let that claim be the record the reviewer trusts.I'd have the host emit the Completed / Skipped table from the acceptance criteria and from whatever the run actually recorded — the diff, the named commands, the test results — so "Skipped: None" is not a sentence the agent is allowed to type into the gate. The agent's prose can annotate the table. It shouldn't be allowed to certify it.
A second read-only pass is useful, but only if that pass also isn't grading a writeup it wrote itself. The end state is whatever the recorded checks show, not the cheerful sign-off.
The Skipped/Deferred section is the right fix. One gap: "Skipped: None" is still a claim the agent writes about itself. What I'd add is a mapping against the ticket. List every acceptance criterion by ID, and next to each one either the test that proves it or the Skipped entry that explains it. A criterion with neither is your silent omission, and a reviewer can spot it in seconds without reading the 600 words. Your idempotency example would show up as an empty row before merge, not as an alert three days later.
A page one of my agents built had to match a design master pixel for pixel, and its parity check passed every state while masking about 19% of the default screen. The masks covered the saved-search tabs and the save button, which had never been built. With the masks off and the sidebar back in, every state failed, 1.1 to 1.9% of pixels off against a 1% limit. A table mapping criteria to passing tests would've shown that row green. The fix records an unmasked score next to every masked one and ties each mask to the later step that removes it.
The What Was Not Done section is the guardrail I would adopt first, because it targets the exact failure in your opening example. A dropped idempotency check should never sit four paragraphs down under Minor Adjustments. I also liked the point about keeping prompts small. When a change needs 600 words to explain, the review is already too wide to catch a buried caveat, and a short diff plus a clear skipped list feels much easier to check properly.
The "What Wasn't Done" section is the part I wish I'd added months ago. I started requiring a Skipped/Deferred block after an agent quietly dropped a retry timeout during a "simple" refactor. CI stayed green, and we only noticed when a downstream timeout started cascading. I also like the second read-only pass idea — I now run a separate review prompt that only gets the acceptance criteria and the diff, never the original agent's writeup.
This is such an important perspective! We often focus on what AI coding agents successfully deliver, but rarely pay enough attention to what they silently leave behind. A polished summary and passing tests can create a false sense of confidence, while the most critical details get buried in the fine print. I especially like the idea of explicitly documenting what was skipped or deferred. At the end of the day, AI should make developers more productive, not make us less careful. Human judgment, accountability, and proper code reviews still matter more than ever. Great insights and a very practical reminder for anyone working with AI agents!