Skip to main content

Command Palette

Search for a command to run...

Reviewing Code Nobody Typed: Human Judgment in an Agentic Workflow

A pull request arrives with thirty seven changed files, polished comments, and a description that explains the architecture with unusual confidence. The reviewer approves it. Two days later the team finds the bypassed authorization rule. Nothing looked careless. That was part of the problem.

Updated
•5 min read•View as Markdown
Reviewing Code Nobody Typed: Human Judgment in an Agentic Workflow
A
AI Architect. I design the boring control plane plumbing that keeps your impressive demos from quietly setting themselves on fire in production.

🗓️ Last updated: September 2026

A pull request arrives with thirty seven changed files, polished comments, comprehensive tests, and a description that explains the architecture with unusual confidence. The reviewer reads the summary, sees green checks, and approves. Two days later the team discovers that the patch duplicated an authorization rule and bypassed the actual policy service.

Nothing in the pull request looked careless. That was part of the problem.

Code review must change when producing plausible code becomes cheap. The reviewer's job is no longer to reward effort or infer care from presentation. It is to test whether the change belongs in the system.

Review intent before implementation

Begin with the task contract. What outcome was requested? Which boundaries were protected? Which files were expected to change? Which checks were required? If the pull request cannot answer these questions, reviewing the diff immediately is premature.

Then inspect the change map. Group files by purpose: production behavior, tests, configuration, dependencies, migrations, generated output, and documentation. Unexpected groups deserve attention. A small feature that changes deployment configuration may be correct, but it has crossed a boundary the task should explain.

Read the dangerous parts first

Review by risk, not file order. Start with public contracts, authentication, authorization, data access, migrations, concurrency, error handling, dependencies, and destructive operations. Generated formatting changes can wait. The review interface may sort alphabetically. Architecture does not.

Ask four questions of every material change:

  1. Is this behavior required?

  2. Is this the correct architectural location?

  3. What existing invariant could it violate?

  4. What evidence would expose that violation?

These questions work regardless of whether the author is a human, an agent, or the increasingly common partnership in which neither wishes to discuss individual responsibility.

Demand provenance without demanding a transcript

The reviewer needs the base commit, task contract, agent and tool version where relevant, files changed, commands run, and unresolved concerns. The reviewer usually does not need thousands of tokens of internal conversation. Preserve the full session for diagnosis according to policy, but present a concise, structured handoff for review.

Require citations from the summary to code, tests, and design decisions. A claim that compatibility was preserved should point to the contract check. A claim that a race was fixed should point to the synchronization change and concurrency test. Fluent explanation is not evidence. It is an invitation to find evidence.

Control diff shape

Large diffs reduce review quality. Ask agents to separate mechanical changes from behavioral ones. Package upgrades, formatting, generated output, and feature logic should not share a commit unless they are inseparable. Small coherent commits allow reviewers to inspect intent and revert safely.

Set escalation thresholds for dependency additions, public API changes, migrations, permission changes, and unusually broad diffs. A threshold need not reject the change. It changes the review route and required owners.

Use code ownership for domain boundaries. A coding agent can edit a payment module. It cannot manufacture the payment team's accountability by adding them to the pull request description.

Review the tests as production code

Tests written by the same agent are useful but not independent. Inspect whether they prove the requirement or simply reproduce the implementation. Look for deleted cases, weakened assertions, excessive mocking, snapshots accepted wholesale, and tests that never exercise the changed branch.

Run focused experiments when the risk warrants it. Revert the production fix and confirm the regression test fails. Change a boundary value. Simulate a timeout. Review is not confined to reading. Sometimes the quickest way to understand code is to make its assumptions uncomfortable.

Preserve human attention

Do not send every generated patch to the same approval queue. Classify work by risk. Documentation and mechanical refactors with strong checks may use lighter review. Contract, security, data, and infrastructure changes require owners with the relevant context.

Measure review load, rework, and escaped defects. If agent throughput rises while reviewer queues and defect rates rise faster, the organization has automated typing and created a new bottleneck. The dashboard may still call this productivity because dashboards enjoy optimism.

Failure modes

The first failure is summary substitution. The reviewer reads the agent's explanation instead of the code. Summaries guide attention; they do not replace inspection.

The second is green check hypnosis. Automated verification reduces risk but cannot prove that the requested behavior was correct or complete.

The third is authorship bias in either direction. Generated code is not automatically suspect, and human code is not automatically wise. Apply the same engineering standards while adjusting scrutiny for scale and provenance.

The architect's checklist

  1. Review the task contract before the diff.

  2. Inspect high risk boundaries before routine files.

  3. Require a structured handoff with evidence links.

  4. Separate mechanical and behavioral changes.

  5. Route sensitive changes to accountable domain owners.

  6. Track reviewer load, rework, and escaped defects together.

The purpose of review is not to determine whether code looks as though a competent person wrote it. Modern tools can arrange that appearance very efficiently. The purpose is to determine whether the change deserves to become part of the system.

Sources

  1. GitHub documentation for reviewing proposed changes

  2. Anthropic on harness design for long running application development

I

«Spot on, Alen! We've officially shifted from an era where writing code was the bottleneck to an era where architectural guardianship and validation are the real challenges.

As you brilliantly pointed out, the danger today isn't sloppy AI-generated code—it's "deceptively good" code: polished, passing all checks, and confidently explained, yet quietly bypassing core system invariants.

Shifting the review mindset from line-by-line inspection to intent, risk-first ordering, and provenance is exactly what engineering teams need to escape "Green Check Hypnosis." Thank you for this masterclass in modern system architecture!»

A
Alen Joy20d ago

Thank you! I think that’s exactly the shift, when code becomes cheap to produce, the scarce skill becomes knowing what the system should allow to change, and having enough evidence to challenge changes that look perfectly reasonable. “Green Check Hypnosis” is a real risk because passing checks can create confidence without necessarily proving architectural correctness. The reviewer’s job increasingly becomes protecting the system’s invariants, not just inspecting the code.

I

Review needs an evidence layer, not just a human approval checkbox. Imagine each generated change carrying a compact trace of intent, tests run, and assumptions touched. That gives reviewers a faster path to the risky edges and makes agency measurable.

A
Alen Joy20d ago

Yes, the interesting shift is from approval as a decision to approval as an evidence backed decision. If every generated change carried a compact map of intent, touched boundaries, verification performed, and assumptions introduced, review could focus attention where uncertainty actually lives. That makes agency observable rather than simply assumed.

Engineering With Coding Agents

Part 4 of 6

Four series of The Pragmatic Stack have explored the architecture and operation of LLM-powered systems: the discipline inside the agent, the systems around it, the operational practices that keep those systems running in production, and the .NET runtime used to implement them. All four series focused on systems that contain agents or agents that serve users. Series 5 examines a different kind of agent: one that opens your repository, understands your codebase, makes changes, and commits code. Coding agents are more than a new developer experience. They are a new actor in the software delivery system. Most delivery systems, including repositories, task backlogs, branching strategies, test suites, review processes, and deployment pipelines, were designed around human authors. Introducing automated authors changes the assumptions behind those systems. Some of those assumptions will need to evolve. Engineering With Coding Agents is a six article series focused on what needs to change and how engineering teams can adapt. This is the fifth series in The Pragmatic Stack. Series 1, Architecting Agents, covered the discipline inside an agent. Series 2, System Design, Reimagined, covered the systems around the agent. Series 3, Shipping AI Systems, covered how those systems are operated in production. Series 4, AI for the .NET Architect, covered what all of the above looks like in .NET. Series 5, Engineering With Coding Agents, covers what your software delivery system needs to handle agents as authors. What You Will Learn By the end of the series, you will have: A framework for making any repository legible to a coding agent without creating an extensive instruction manual. A task contract format that prevents vague intent from becoming production code faster than the team can identify and correct it. An isolation model for parallel coding agent work based on one branch, one worktree, and one environment per task. A six layer verification ladder that distinguishes software correctness from LLM benchmark performance. A code review approach designed for generated diffs at scale, with an emphasis on risk, provenance, and test evidence. A seven stage delivery loop that produces accepted, verified, and reviewable changes rather than raw generated output. The Articles 1. The Repository Is the Prompt: Preparing a Codebase for Coding Agents 2. The Ticket Is the Contract: Specifying Work for Coding Agents 3. One Agent, One Worktree: Isolation and Concurrency for Coding Agents 4. Tests Are the Verification Layer: Proving Agent Generated Changes 5. Reviewing Code Nobody Typed: Human Judgment in an Agentic Workflow 6. The Pull Request Is the Product: A Delivery System for Coding Agents Read the articles in order if you are building an agent ready delivery system from the ground up. If your organization has already begun adopting coding agents, start with the article that addresses the constraint you are currently encountering. The agent writes the code. The delivery system determines what reaches production.

Up next

Tests Are the Verification Layer: Proving Agent Generated Changes

The coding agent reports that the feature is complete. The project compiles. Four tests pass. The fifth was deleted because it represented legacy behavior. This is one way to achieve a green build.