Full text not available for this paper

Summary of "Built on Broken Assumptions (BOBA): Why Coding Agents Cannot Be Left Alone"

Summary (Overview)

  • Core finding: Coding agents complete 95% of individual requests but only 51% of chains of 20 consecutive requests built on their own prior work, revealing a "Built on Broken Assumptions" phenomenon where unverified mistakes compound.
  • Key contribution: Introduces BOBA-Bench, a benchmark of 280 chains of 20 consecutive requests derived from 140 real open-source Python repositories (5,600 total requests), designed to evaluate agents in continuous, unattended development scenarios.
  • Root cause identified: The degradation is not caused by worse code quality (verified agent code is nearly as good a base as human code) but by silent misses—mistakes agents don't notice because their own tests pass, which then become broken foundations for subsequent requests.
  • Verification gap: Agents cannot self-verify—when asked to review implementations, they are correct only 53% of the time (barely better than a coin flip). A single external "verification failed" message plus one repair round lifts chain completion from 51% to 59%.
  • Implications: Current benchmarks that test agents one request at a time on human-written code dramatically overestimate real-world performance in autonomous, multi-request development scenarios.

Introduction and Theoretical Foundation

Background and Motivation

Coding agents (e.g., Codex, Claude Code, OpenHands) are increasingly deployed as autonomous developers that handle chains of requests, where each request builds on the previous one's output. While trajectory studies confirm that agents:

  • Rarely catch mistakes that nothing flags for them
  • Report wrong work as complete

Existing benchmarks evaluate agents on:

  • A single request
  • Human-written code
  • Verified once

This creates a fundamental mismatch between how agents are evaluated and how they're actually used in practice.

Prior Work Limitations

The paper identifies gaps in existing repository-evolution benchmarks:

BenchmarkGap
SWE-Milestone, ChainSWECarry verified and unverified work forward together, conflating authorship and verification effects
StaminaBench, EvoCodeBenchStop at first failure, never evaluating from unverified work

Key insight: Unattended development can only be measured by controlling what it lacks: verification. The paper argues that the central variable should be whether code was verified, not who wrote it.

Methodology

BOBA-Bench Construction

The benchmark transforms real repository commit histories into chains of 20 requests through a four-stage process:

  1. Mine history: Consecutive commits that change tests and source together become a request if new tests fail before and pass after the human patch
  2. Produce spec: Claude Opus 4.8 writes specifications from test diffs, commit messages, and issues (never from source code)
  3. Audit specifications: Three model families (GLM-5.2, Fable 5, GPT-5.6) must unanimously accept identical text
  4. Certify chains: 20 consecutive requests form a chain, sealed with frozen dependencies, where human patches must pass every hidden test at every state

Evaluation Protocol

The autonomous evaluation protocol delivers requests one at a time:

  • Each request in a fresh conversation (agent remembers nothing of earlier requests)
  • Graded against hidden tests after every request
  • Agent told nothing about its performance
  • All 20 requests run regardless of failures

Evaluation Settings

Five experimental settings isolate different variables:

SettingPurpose
AutonomousFull benchmark: agent left alone, no feedback
Agent Code / Human CodeIsolate authorship: verified agent code vs. human code as foundation
Silent ContinuationIsolate verification: issue next request on silent miss as if it passed
VerifiedExternal "verification failed" message + one repair round after misses
ReviewModel judges finished implementations without knowing author

Models Evaluated

Ten models on all 280 chains (8 attempts each): Claude Opus 5.5, Opus 5, Opus 4.8, Fable 5, GPT-6 Astra, GPT-6.1-sol, GPT-5.6-sol, GLM-5.3, GLM-5.3-Flash, Kimi K3.

Empirical Validation / Results

Chain Completion Findings

Table 2: Chain completion of ten coding agents on BOBA-Bench

Modelpass@1 (%)Single attempt (%)Strict pass@1 (%)Regression rate (%)pass@8 (%)Request completion (%)
Claude Opus 5.566.766.855.822.983.984.0
Claude Opus 561.660.750.528.182.980.8
GPT-6 Astra53.251.138.735.163.975.2
Claude Fable 551.551.838.240.572.173.2
GLM-5.351.246.439.830.176.173.0
GLM-5.3-Flash51.151.140.930.177.573.9
GPT-6.1-sol50.348.937.637.860.774.2
GPT-5.6-sol45.245.733.342.260.071.8
Kimi K344.245.433.742.868.268.8
Claude Opus 4.839.238.227.542.460.066.2

Key results:

  • Average chain completion: 51% (vs. 66–84% individual request completion)
  • Strict pass@1 (no request missed, no test broken): only 39% on average
  • Silent misses occur even within the first five requests across all models
  • 23–43% of attempts break a previously passing test later in the chain

Authorship vs. Verification Analysis

Figure 4: Verified foundations hold whoever built them

ComparisonResult
Agent code vs. human code (both verified)Gap: −3.6 to +0.8 percentage points (avg. −1 pp)
Unverified state vs. verified stateFailure rate nearly triples (avg. +18 pp)
Odds of failure per additional unverified mistakeRoughly doubles with each additional mistake

Key insight: When code is verified, agent-written code is nearly as buildable as human code. The degradation comes from unverified mistakes, not from authorship.

Failure Root Causes

Four primary causes of silent misses identified:

  1. Regressions (most common): Agents break behavior the request didn't touch (37–55% of first failures)
  2. Missed requirements: Part of specification left unimplemented (14% of failures)
  3. Wrong logic / integration errors: Wrong implementation or unreachable code (18% of failures)
  4. Trusting own tests: A green local test run barely lowers miss probability (8.3% vs. 8.6% for all submissions)

Cross-Model Review Experiment

Figure 5: No model is a reliable reviewer

Reviewer typeWrong code acceptedCorrect code rejectedYouden J
Lenient (Claude models, GLM-5.3, Kimi K3)77–95%1–8%≤ 0.15
Strict (GPT-6 Astra, GPT-6.1, GPT-5.6)40–55%41–58%≤ 0.04

Key finding: No model separates wrong from correct implementations well enough to serve as a check. The best Youden J is only 0.15 (where 1.0 is perfect).

Effect of External Verification

Table 41: Verified under the handoff protocol

Modelpass@1 Autonomous → VerifiedGain (pp)
Claude Opus 5.566.8 → 73.9+7.1
Claude Opus 560.7 → 69.6+8.9
GPT-6 Astra51.1 → 53.9+2.9
Claude Fable 551.8 → 63.9+12.1
GLM-5.346.4 → 68.6+22.1
GLM-5.3-Flash51.1 → 67.1+16.1
GPT-6.1 Sol48.9 → 52.9+3.9
GPT-5.6 Sol45.7 → 46.8+1.1
Kimi K345.4 → 52.5+7.1
Claude Opus 4.838.2 → 44.6+6.4

Key findings:

  • A single "verification failed" message + one repair round lifts chain completion by 1–22 points
  • Naming the failing test achieves in one round what insisting achieves in ~3 rounds
  • Repaired states are no longer broken foundations: next request fails on them no more often than on certified states
  • False alarms (rejecting correct work) cost little: ~98% of phantom repair rounds leave work passing

Theoretical and Practical Implications

For System Builders

  • Keep the verification line open in both directions: The verifier must see results; the model must receive verdicts
  • Widen what the verifier sees rather than multiplying rounds: naming failing tests beats repeated generic rejection
  • Multi-agent systems are especially exposed: models reviewing finished implementations barely beat chance, so the verifier's line must reach subagents directly

For Model Builders

The paper calls for prioritizing certification as much as implementation:

  1. Agents must tell wrong implementations from correct ones (currently barely better than chance)
  2. Agents must repair a miss in one round when told only "verification failed" (currently repair only a third to a half)
  3. Both must be achievable without a supervisor

For Benchmark Builders

Three properties enable observing the phenomenon:

  1. Agent's work persists across requests
  2. Correctness decided by a contract the agent cannot see or rewrite
  3. Requests depend on one another

Single-request benchmarks have none of these properties, which is why the phenomenon has gone unmeasured.

For Users

Two practical recommendations:

  1. Check before you build on it: Run or test a request's output before issuing the next request
  2. Say what you saw: Even imperfect verification feedback helps; occasional false alarms cost little

Conclusion

The paper demonstrates that coding agents build on broken assumptions: they complete most individual requests but only about half of the chains those requests form, primarily because they cannot detect their own mistakes. The problem is not the quality of code they write (verified agent code is nearly as good as human code) but their inability to verify their own work.

Future directions:

  • Model builders should make certifying a request as much a goal as implementing it
  • A single external "that's wrong" recovers part of the loss, but more than half of misses survive a repair round
  • The benchmark and all artifacts are released at https://github.com/amazon-agi/BOBA-bench for reproduction and extension

Bottom line: Coding agents are only as reliable as the checks they can reach—without verification, every request that follows is built on broken assumptions.

Related papers