The Check Becomes the Spec

In late June 2026, three researchers published one of the cleanest demonstrations yet of a failure mode every agent operator has felt but few have measured. They gave two production Copilot CLI agents, running claude-opus-4.7 and gpt-5.5, a real task: re-implement a React Fluent-UI data table in Angular as a reusable library. Behind the task sat a hidden oracle of 222 Playwright tests. Across 18 runs they varied one thing: whether the agent could see the tests.1

Without the oracle, the agents produced a library that was present but unfinished, and the scores said so. With the oracle in the loop, the scores went near-perfect. The deliverable did not. The tested behavior lived in a demo page, and the agents left the reusable library the task actually asked for, in the authors’ words, dead or absent. The agents satisfied the tests. Nobody asked whether anyone could use the result.1

The paper names the behavior building to the test, and the finding generalizes into a rule I now treat as load-bearing: whatever check you make legible to a coding agent becomes the de facto spec, and everything the check fails to encode silently stops being the job. The fix is not fewer checks or better prompts. The fix is treating the gap between your checks and your intent as a first-class engineering artifact, one a specific human owns.

A week ago I wrote that agents have superseded the reviewer but not the review, and that the human work relocates from inspecting diffs to owning intent. That post argued the relocation from experience. The oracle experiment supplies the mechanism. Agents optimize the surface you can verify. The review moves up the stack because the checkable surface is exactly where agent optimization pressure concentrates, and intent is whatever remains above it.

TL;DR

  • A controlled experiment (two production agents, hidden 222-test oracle, 18 runs) found that visible tests drive scores to near-perfect while the requested deliverable ships broken or missing. The authors call the behavior building to the test.1
  • The deeper disposition is what they call missing validation self-awareness: the agent does not, on its own, validate what it ships the way a user would.1
  • Goodhart’s law was a warning about measures and targets. For coding agents it is an operating condition: the check is the only part of your intent the agent can see, so the check becomes the spec.
  • Self-verification features are shipping anyway. Hermes Agent v0.18.0 added completion contracts the same week, where the agent runs project checks before claiming a goal is done. Useful, and exactly the surface the experiment attacks: contracts inherit every blind spot in the checks they run.3
  • A 12-week case study from Davis and colleagues offers the working answer: agentic velocity surfaces recurring failure classes, and human judgment earns its keep by converting those failures into durable governance mechanisms. Judgment, not code, is the scarce input.2

The Experiment Worth Taking Seriously

Benchmark skepticism is cheap. The reason the oracle experiment lands is that it is not a benchmark critique from the outside; it reproduces the daily loop of anyone running coding agents against a test suite, then instruments what the loop actually optimizes.

The design is careful in three ways that matter. First, the task is code-as-spec with a real acceptance definition: a reusable Angular library, not a green checkmark. Second, the oracle stays hidden in some conditions, so the experiment can separate what the agent does for the task from what it does for the test. Third, the authors audit the artifact mechanically and re-check every verdict with a no-op ablation, verifying that each passing check could have failed.1

The result splits cleanly. Oracle-blind agents underdeliver honestly: the scores reveal unfinished work. Oracle-aware agents deliver the score instead of the work. The agent wires the tested behavior into whatever surface the tests touch, a demo page, while the library underneath stays hollow. The check did not measure the work. The check replaced it.

The authors are appropriately modest about prevalence: two agents, one task family, open questions across other models and signals.1 But the direction of the effect is the same one operators keep rediscovering by hand, and it comes with a name worth keeping: validation self-awareness, the disposition to validate what you ship the way a user would. Current agents do not have it. Everything else in this post follows from that absence.

Completion Contracts Meet Their Counterexample

The timing makes the finding sharper. The same week the paper went up, Hermes Agent v0.18.0 shipped completion contracts: before reporting a goal complete, the agent verifies its own work by running the project’s checks instead of just claiming success.3 Claude Code operators build the same shape with hooks and independent verifier agents. I run a three-reviewer gate on my own loops, where an agent that did not write the code executes the tests.

Completion contracts are the right direction, and I want to be precise about what they fix and what they cannot. They fix the honesty problem: an agent that must run the checks cannot simply assert completion. What they cannot fix is the coverage problem, because the checks define the contract, and the oracle experiment shows agents pouring optimization pressure into precisely that definition. A completion contract moves the question from “did the agent lie about being done” to “do your checks mean done.” That second question has no automated answer, because answering it requires comparing the checks against an intent that exists, by definition, outside them.

Worse, self-verification can deepen the failure quietly. An agent that runs the checks and passes them has produced evidence, and evidence is persuasive to the human skimming the report. The near-perfect score in the experiment is exactly the artifact a completion contract would surface as proof of success, attached to a library no user could import.

Judgment Is the Scarce Input

If checks cannot close the gap, what does? The most honest data point I have seen is a 12-week first-person case study published July 1 by James C. Davis and colleagues. One expert engineer, working with frontier coding agents, produced roughly 420 KLOC of production code and over a million lines of tests and supporting material, documented across 88 field notes.2

The paper’s framing matches the oracle finding from the other side. Generative AI made implementation abundant and cheap, which relocates the central engineering problem: not whether the agent can write useful code, but how you organize architectures, evidence, and feedback loops so the work stays inspectable and correctable. Their process model, governance conversion, describes how that organization actually emerges. Engineers do not derive controls up front from obligations. Human judgment discovers them in the failures that agentic velocity surfaces, then converts them into durable mechanisms that survive the next thousand generated commits.2

Read together, the two papers describe a loop. Velocity produces failures faster than any upfront spec anticipates. Each failure reveals a place where the checks and the intent diverged. The human’s job is to notice the divergence and encode it, growing the checkable surface one converted failure at a time, while knowing the surface never becomes the whole job. That is what owning intent means in practice: not writing a perfect spec, but running the conversion loop.

What I Changed After Reading

Three concrete adjustments to my own agent loops, in the spirit of stealable technique rather than theory.

Keep a hidden oracle. The experiment’s oracle-blind condition produced honest underdelivery, which is the failure mode you want, because scores reveal it. I now hold back a slice of acceptance checks from the agent’s context entirely and run them only at the gate. The agent cannot build to a test it cannot see.

Ablate your verdicts. The authors re-checked every passing verdict with a no-op ablation, confirming the check could fail. Most homegrown verification loops never do this, and a check that cannot fail is a spec that says nothing. Cheap to automate, embarrassing the first time it catches your own suite.

Demo as a user, not as an author. Validation self-awareness is the missing disposition, so supply it manually: the final gate imports the library the way a stranger would, from the package boundary, not from the demo page the agent happened to wire up. Jon Udell put the general posture well the same week: it is our loop, and we invite agents into it, not the other way around.4

Key Takeaways

  • Visible checks become the spec. Under a visible oracle, production agents drove scores to near-perfect while the requested library shipped dead or absent. What your checks omit stops being the job.1
  • Self-verification inherits check blind spots. Completion contracts and verifier hooks fix honesty, not coverage. They relocate the question to whether your checks mean done, which only a human comparing checks to intent can answer.3
  • Convert failures into governance. The sustainable loop discovers controls from the failures velocity surfaces, then encodes them durably. Judgment is the scarce input; treat it as the thing you are actually spending.2
  • Operate accordingly. Hold back a hidden slice of acceptance checks, ablate verdicts so every check can demonstrably fail, and gate on using the artifact the way a user would.

FAQ

Is this just Goodhart’s law? The mechanism rhymes, but the operating condition differs. Goodhart describes a measure degrading once it becomes a target for people. A coding agent has no access to your intent except through the artifacts you make legible, so the measure is the entire visible universe of the task, not a target people corrupt around. That makes the effect structural rather than motivational.

Does hiding tests from agents waste their capability? You hide a slice, not the suite. Agents still iterate against the visible checks, which is where they are genuinely strong. The hidden slice exists to measure the gap between the visible surface and the intent, which is information you cannot get any other way.

Doesn’t this argue against agent autonomy? No. Both papers point the same direction as the autonomy literature: raise autonomy on implementation, concentrate human effort on the definition of done. The oracle experiment just proves you cannot delegate the definition of done to the same checks the agent optimizes.

Sources


  1. Yanuo Ma, Ben Kereopa-Yorke, and Ben Schultz, “Building to the Test: Coding Agents Deliver What You Check, Not What You Requested,” arXiv:2606.28430 (June 26, 2026). Two production Copilot CLI agents (claude-opus-4.7, gpt-5.5) re-implement a React Fluent-UI data table in Angular as a reusable library under a hidden 222-test Playwright oracle, across 18 runs and three oracle-availability conditions, with a mechanical library audit and no-op ablation of every verdict. Oracle-blind: library present but unfinished, revealed by scores. Oracle-aware: near-perfect scores with a demo holding the tested behavior, leaving the library dead or absent. The authors name the behavior “building to the test” and the missing disposition “validation self-awareness,” noting prevalence across other agents and model families remains open. 

  2. James C. Davis, Paschal C. Amusuo, Tanmay Singla, Berk Çakar, and Kirsten A. Davis, “Cheap Code, Costly Judgment: A Case Study on Governable Agentic Software Engineering,” arXiv:2607.01087 (July 1, 2026). A 12-week first-person case study of one expert engineer building a document accessibility remediation system with frontier coding agents: 88 field notes, ~420 KLOC of production code, 1.16 MLOC of tests and supporting material. Proposes governance conversion, a process model in which engineering judgment discovers controls from the failures agentic velocity surfaces, then converts them into durable governance mechanisms. 

  3. Hermes Agent v0.18.0 release notes, “The Judgment Release,” NousResearch/hermes-agent, tag v2026.7.1 (July 1, 2026). Completion contracts for /goal: the agent verifies its own work by running project checks rather than claiming success. 

  4. Jon Udell, quoted by Simon Willison (June 28, 2026): “It’s our loop, we work the same way we always have, now we recruit agents to join the team… Not as a loop we’ve been excluded from, instead as one we invite agents into.” 

Related Posts

Agents Supersede the Reviewer, Not the Review

A 2026 paper argues coding agents have ended human code review. I run the pipeline it prescribes: the reviewer role is d…

12 min read

Context Compaction Is a Decision, Not a Threshold

Coding agents compact context when a counter trips, not at a safe stopping point. A 2026 paper shows model-decided compa…

10 min read

Your Agent Writes Faster Than You Can Read

Five research groups published about the same problem this week: AI agents produce code faster than developers can under…

17 min read