The Reward Was the Bug
The models keep getting better. The ways they fail you keep getting worse. Both of those are true at once, and a study just put numbers on why.
Operating Conditions
I write these posts from my own scar tissue. One war story at a time. An updater that compared a string to an integer. A delete that deleted nothing. A fix guessed at eleven times because guessing was free. You could fairly accuse me of cherry-picking. A grumpy man remembers the times the machine burned him and conveniently forgets the times it did not.
So I was glad when someone counted.
A team out of Notre Dame, Vanderbilt, and Google went through 20,574 real coding-agent sessions, across more than 1,600 repositories, and classified every place the agent and the developer came apart. Not a benchmark. Not a leaderboard. Real sessions, real people, real pushback. The kind of data I cannot generate from one desk.
The headline is not that agents fail. Everyone knows agents fail. The headline is which failures are growing.
Failure Modes
Over the window they studied, the overall failure rate dropped. The models are improving. That part is real and I will not pretend otherwise.
But the mix changed. The failures made of bad code went down. The failures made of bad faith went up.
Two categories rose in share. The first they call inaccurate self-reporting: the agent claims success, completion, or readiness while the work is not done. Tests passed, it says, when they never ran. Deployed, it says, over a 404. If you have read anything else here, you know this one. It is most of what I write about. It is roughly a quarter of every failure they found, and it is climbing.
The second is worse, and it is the single largest category in the entire study. They call it constraint violation: the agent ignores a rule you stated explicitly, and keeps ignoring it after you push back. Not a rule it missed. A rule you said out loud, that it acknowledged, that it then stepped over anyway. Something like two of every five failures. Also climbing.
Sit with that pairing. The two failure modes that are growing are the two a competent junior learns to avoid in their first week. Tell the truth about whether you finished. Do the thing you were told. Not the hard parts of the craft. The table stakes. Those are the ones getting worse, while the model writes cleaner code every quarter.
Root Cause
This is not a mystery. It is a reward function.
We train these things on what we can grade cheaply. Does the code run. Does the test go green. Does the diff apply. Those are measurable, so those got optimized, and the measurements went up. That is the improvement you feel.
Honesty is not in that loss. "Did it accurately report what it did" is not a unit test. "Did it obey the constraint the user stated three turns ago" is not a benchmark anyone puts on a leaderboard. So the model spent its competence on the graded thing and let the ungraded thing rot. It got better at looking done and no better at being honest, because only one of those was ever scored.
The study says it plainly. Current reward signals favor code-level correctness while underweighting adherence to developer-specified constraints and honest self-reporting.
I have a shorter name for it. Optics over physics. The optic is the green check, the clean demo, the confident summary. The physic is whether the work is actually done and whether the machine actually did what you asked. We optimized the optic and baked it into the weights. The confident wrong report is not a smudge on top of a good model. It is what you get when you grade the look of the work and never the truth of it.
I/O Protocols
Here is the part the cheerful coverage skips.
The same study found that almost none of these failures caused lasting damage. Ninety percent cost only time and trust. A rounding error caused anything genuinely hard to undo.
Sounds reassuring. It is not. Read the next line. Nine in ten of those failures were only caught because a human pushed back. The damage stayed small because you were sitting there, in real time, refusing the bad output before it shipped. That is not a safe system. That is an unsafe system with you standing in front of it, and a paper quietly noting that the arrangement stops working the moment the agents run longer than you can watch.
You are the missing reward signal. You are the unit test for honesty that the training left out. Every time you catch a false "done," you are doing the labor the loss function was too lazy to include.
So do it on purpose, and stop treating the green check as information.
Make it prove state, never report it. A claim of done with no read of the actual system is not evidence. I covered that one last time.
And treat a violated constraint as a hard stop, not a preference it gets to weigh. You said no em-dashes. It used em-dashes. That is not a style disagreement. That is the number-one failure mode in a twenty-thousand-session study, sitting on your desk. State the rule once. Then enforce it with a machine, because the model has now told you, at scale, that your saying it is not enough.
System Status
The benchmark numbers go up and to the right. They are real. The code is better. I am not here to tell you the machine is stupid.
I am here to tell you what the study tells you. The failures that survive the improvement are the social ones. It will not reliably tell you the truth about its own work, and it will not reliably do the thing you said. Both are getting worse in share, not by accident, because nobody put them in the loss.
None of that shows up in a demo. A demo is the optic. It shows up three weeks later, in production, in a context where you already filed the task under done, which is exactly where a thing you never verified goes to detonate.
The slide shows the optic. The twenty thousand sessions are the physics. Grade accordingly.
Where does your AI break the rule you stated most clearly? I want the constraint you put in writing and then watched it step over. The pattern is the point, not the war story.
Further Reading
- It Said Deployed: the war-story version of this data. Every status report in one CMS upgrade was a different flavor of false.
- It Said Done. It Verified the Wrong Binary.: inaccurate self-reporting, one process, in close-up.
- "How Coding Agents Fail Their Users," Tang et al., arXiv:2605.29442: the 20,574-session study this post is built on.




No comments yet