A short passage from Addy Osmani, Morgan Westlee Lunt, and Qing Wang retires one of software's oldest safety rituals. What replaces it is cheaper, faster, and more demanding of the humans who remain.

Almost every engineering organization has a rule that sounds like safety: no code ships until another human has read it. Auditors like it. Managers can count it. It is also, according to a passage quoted by Simon Willison, an "imprecise proxy" for the question that actually matters: "what could go wrong with this change."

The authors, Addy Osmani, Morgan Westlee Lunt, and Qing Wang, describe more than a new tool. Their review process no longer sits at the end of the pipeline. It "runs continuously, more like spellcheck while you write," and "most changes have been reviewed and fixed by Claude at least once before a human is asked to look."

The common reading of that line is that AI helps reviewers. That reading is too narrow. The passage describes a change in where review sits, not a speedup of the old process. Review used to be a scarce human resource that every change waited in line for. It is turning into a cheap, always-on utility. Once the routine catches are handled by a machine, the human reviewer's job changes too. It stops being defect-hunting and becomes interrogation of the assumptions that no spellcheck can see.

That shift is mostly good news. It also carries a cost that few teams have priced in. The rest of this piece explains both.

"Did a human read it?" measured the ritual, not the risk

The two-person rule survived for decades because it was easy to verify. A merged pull request either had an approval or it did not. Nobody had to judge whether the approval meant anything. That is the core of the critique in the Osmani, Lunt, and Wang passage: the question of whether a human read the code stands in for a harder one, "what could go wrong with this change," and then asks which check is the right one to catch it.

Anyone who has worked on a large team knows the gap between those two questions. A 900-line change lands on a Friday afternoon. The reviewer skims, leaves two comments about variable names, and approves. The rule has been followed. The risk has not been examined.

The proxy failed in two predictable ways:

  • It spent human attention evenly. A one-line typo fix and a change to login handling got the same treatment: one approval. Risk is not spread evenly, so the attention should not have been either.
  • It rewarded visible nitpicks. Comments on formatting and naming are easy to write and easy to point to. Questions like "what happens when this fails halfway through?" take longer and leave less of a trail.

The reframing matters because it turns review from a compliance step into a routing problem. Every change carries some set of possible failures. For each failure there is a cheapest reliable detector: a test, a linter, a model pass, or a person who knows the system. The engineering task is to match failures to detectors.

The human-approval rule never did that matching. It assigned one generic detector, a tired colleague, to every failure type. The authors are not saying humans should stop reviewing. They are saying human review was never the safety property. It was a stand-in for one, and a weak one.

Moving review from the gate to the keyboard changes its economics

The second claim in the passage is about timing. "Before, review was a gate at the end of the road: write the code, open a PR, wait for your colleague." Now it runs continuously. That detail sounds procedural, but it changes how the whole system behaves.

A gate at the end of a process is a queue. Queues have three familiar properties:

  • Waiting time grows faster than load once reviewers are busy.
  • Batching follows, because developers who know they will wait push larger changes less often.
  • Rubber-stamping follows that, because large batches are exhausting to read carefully.

Under the gate model, the reviewer's attention was the bottleneck, and every routine mistake that reached it used up some of it. A missing null check, an unhandled error, an off-by-one: each forced a round trip of comment, fix, and re-review. That cost was paid in the scarcest resource on the team.

Continuous checking removes that cost. If, as the authors write, a model pass "catches most routine mistakes," the round trips for routine problems happen in seconds while the author is still writing. By the time a colleague is asked to look, the cheap fixes are already made. What reaches the human is a smaller and more interesting set of questions.

This follows a familiar pattern: when the marginal cost of an activity drops close to zero, it stops being scheduled and starts being ambient. Nobody books a spellcheck session. Nobody waits in line for syntax highlighting. Review is moving in the same direction, from an event to a background property of the editor.

The effect on attention is the important part. The passage says the continuous pass "saves team attention for higher-level questions and scrutiny." Read as economics, that is a reallocation: the team's fixed supply of careful thought moves away from detection and toward judgment. The open question is whether teams will actually spend the freed attention on judgment, or simply review faster and ship more.

On a Wardley map, defect detection is becoming a commodity

Wardley Mapping places each part of a value chain on an axis from genesis (novel, poorly understood, done by hand) through custom-built and product, to commodity (standardized, cheap, taken for granted). Components drift toward commodity over time, and the value moves to whatever new layer sits on top of them.

Code review has always been a bundle of separate activities with different maturity:

  • Style and formatting checks became commodity years ago, through automatic formatters.
  • Routine defect detection (unhandled errors, obvious logic slips, missing edge cases) has been moving from human craft toward a utility. The passage's claim that a model catches most routine mistakes before a human looks suggests it has largely arrived.
  • Design and assumption review (should this component exist, what does it trust, what happens at scale) remains custom work that depends on context.

The gate model bundled all three into one approval, so the commodity work hid the expensive work. Splitting the bundle exposes what was there all along. Most review comments were commodity detection performed by expensive people.

This matters for how teams value their reviewers. When a component becomes a commodity, the skill attached to it loses value and the skill one layer up gains it. The engineer known as a careful reviewer because they spot every unclosed resource will find a model doing that work at no marginal cost. The engineer known for asking "what happens when this runs on two machines instead of one?" becomes more valuable, because that question now carries a larger share of the remaining risk.

The map also predicts the next move. Once routine detection is a utility, competition shifts to the layer above: knowing which check to run on which change. That is the routing question the authors put at the center of their reframing. It is also where the next round of tooling will compete.

The bugs that hurt are assumption bugs, and they pass a spellcheck

If continuous model review handles routine mistakes, what is left for humans? Two security advisories published the same week suggest an answer.

The first concerns TanStack Start, a web application framework. According to the GitHub advisory for CVE-2026-102989, an unauthenticated attacker can craft a link that, when opened, makes an affected app return attacker-controlled HTML from its own origin and run the attacker's JavaScript there. The root cause, per the advisory, is that the transport "can pass request payload fields into internal middleware state instead of limiting them to public input fields." No single line in that bug looks wrong. The flaw is a missing boundary between data the app should trust and data it should not.

The second concerns LMCache, a caching layer used alongside AI model servers. The advisory for CVE-2026-105192 describes unauthenticated remote code execution. In distributed mode, LMCache opens a socket so worker processes can register and share data. "The intended clients are sibling LMCache processes," and there is "no CURVE, ZAP, password, or message authentication on that socket." The socket binds to localhost by default, unless the operator sets a routable address, which the advisory notes is how multi-node deployments are set up.

Read those two cases through the Trust Boundary Model: find every place where data crosses from one trust level to another, then inspect and enforce there. Both bugs sit on a boundary that the original design assumed away. In LMCache, the assumption was that only friendly processes would ever connect. That holds on one machine and fails on many. In TanStack Start, the assumption was that internal state and public input would stay separate. Neither is a typo. Both are statements about the world that turned out false.

This is the clearest case for what human review is now for. A model pass reading a diff can be very good at finding code that is locally wrong. It is structurally weaker at noticing a claim about the deployment environment that was never written down. The human reviewer who asks "who else can reach this port in production?" is not doing the old job faster. They are doing a different job, one the old gate model often had no time left for.

Continuous checking adds a layer of cheese, and a new hole

The Swiss Cheese Model treats safety as stacked imperfect layers. Accidents happen when the holes line up. By that standard, a continuous model pass is a clear gain: one more layer, applied to every change, at almost no cost per use. A defect now has to get past the model, the tests, and the human, not just the tests and the human.

The model also points to the risk. Layers protect only when their holes are independent. Two things could make them correlated.

  • Complacency. If reviewers learn that the model has already checked a change, they may start treating approval as confirmation, not inquiry. The hole in the human layer then moves to wherever the model's hole is, which is the worst place for it.
  • Skill atrophy. Reviewers built their instincts on routine defects. Reading a hundred unremarkable bugs is how people learn to sense the unusual one. Remove the routine work and you may remove the training ground for the judgment you now depend on.

The LangGraph 1.2.16 release notes give a small, ordinary example of the middle ground. The fixes include letting "other tasks finish when a resume value is invalid" and making sure a resumed command's update applies only once. In plain terms, both are about how a paused workflow behaves when it picks back up. These bugs are not typos, and they are not architecture failures either. They are the kind of edge cases that a model might or might not flag, and that a reviewer who has watched workflows misbehave would recognize.

That middle band is where the division of labor between model and human will be argued out, team by team. The passage claims the model catches "most routine mistakes." It makes no claim about the rest, and that silence is honest. The rest is the human's job, and it needs reviewers who still know what to look for.

The product is the routing, not the reviewer

The Harness Hypothesis holds that value in AI lives less in the model than in the system that connects the model to real work. Code review shows this well. A capable model reading diffs is useful. A system that decides which changes get a model pass, which get a security specialist, which get a test-coverage check, and which need a design conversation is a different and more valuable thing.

The authors' own phrasing points this way. Their replacement question is not "did a model read it?" It is "what could go wrong with this change," followed by matching each risk to the right check, automated or human. That is a routing decision, and the routing is the hard part.

In practice, a team taking the passage seriously would do three things:

  • Classify changes by risk, not size. A small change to how logins are handled deserves more human attention than a large refactor of display code. Line count was always a poor guide.
  • Require humans to state assumptions. For changes that touch trust boundaries (network listeners, authentication, data that arrives from outside), the reviewer's job is to write down what the change assumes about the world and check it. The LMCache socket and the TanStack input handling are both cases where one written sentence of assumption could have exposed the flaw.
  • Measure catches, not approvals. If the team keeps one metric, it should be which layer found which defect. That data shows where the holes line up.

On the Autonomy Spectrum, this model of review sits at a deliberate point. The model fixes routine problems on its own, close to full autonomy for a narrow, low-stakes task. The human keeps authority over judgment calls, closer to the copilot end. Most deployment failures come from putting automation at the wrong point on that spectrum. This arrangement puts it at different points for different kinds of risk, which is the right design.

The broader lesson extends beyond code. Any knowledge work with a human sign-off step (contract review, financial controls, editorial checks) has the same structure: a gate that measures attendance, used as a stand-in for risk. As agents take over the routine catches in those fields, the sign-off will move the same way. The humans who stay in the loop will be paid for the questions they ask, not the typos they find.

/Sources

/Key Takeaways

  1. "Did a human read the code?" was always a compliance proxy. The real question is which check, automated or human, is best placed to catch each specific risk.
  2. Moving review from an end-of-pipeline gate to a continuous background pass removes the queue, the batching, and much of the rubber-stamping that came with it.
  3. Routine defect detection is becoming a commodity. Value moves to assumption and design review, and to the routing that decides which check each change gets.
  4. The bugs that hurt most, like the unauthenticated LMCache socket and the TanStack Start input handling flaw, are assumption bugs that pass a line-by-line check. That is where human reviewers now earn their keep.
  5. The new risk is correlated failure: reviewers who trust the model's pass, and lose the instincts they built on routine bugs, line their holes up with the machine's.