Apply to my task
arXiv:2610.25899 ★ 95 Oct 19, 2026

Acceptance bias: the agent takes someone else's “finished” work as its baseline and never checks it against the task

Key result

Work from a previous session passes ~98% of hidden tests, yet the agent fails 20–53 percentage points more often starting from it than from a clean slate. The paper offers no technique; it's a benchmark. But it implies a rule: treat a “done” from the previous session as unverified and check it against the original spec. The agent takes someone else's result as its baseline (the authors call this acceptance bias, a tendency to accept whatever you inherit). It skims the diff, runs the tests and ships. In 59–88% of failures on DeepSWE it finishes with the same failing tests it started with. Below is a prompt inspired by the paper. The authors didn't test it.

01

TL;DR

Hand a coding agent a repository with someone else's work in it (from another agent or a previous session), and it treats that work as the definition of what's left to do. It skims the diff, runs the tests and ships, barely checking the result against the original request. The authors call this acceptance bias (a tendency to accept whatever you inherit).

The headline finding: the same agent that solves a task from scratch fails several times more often when it starts from someone else's “almost done” result. The gap ranged from 20 to 53 percentage points. The work looks finished: on average it already passes ~98% of the hidden tests, and in half of the states only 1–3 tests fail. So the agent doesn't go looking for what's wrong. Most of the time (in 59–88% of failures on DeepSWE) it finishes with the exact same failing tests it started with, even though it passed those tests when starting from a clean slate. One more consequence: the agent leaderboard flips under this kind of start, so an agent that shines on a fresh start isn't necessarily good at finishing someone else's job.

Practical takeaway: a “done” from the previous session or agent can't be treated as input for the next one. Verify against the original spec, not against the current state of the code.

Want this for your own case? Apply this study to your task: AI adapts its method to what you are working on and writes the prompt.

02

Method Blueprint

The paper doesn't propose a technique; it's a benchmark. Here's the experimental setup the conclusion comes from:

STEP 1: A predecessor agent works the task → reports “done”, but hidden tests fail
STEP 2: Its final state is saved (code, files, installed software)
STEP 3: A new agent gets ONLY the original request + that state
        (no work history, no “this attempt failed” message)
STEP 4: Comparison: same agent, same task, but from a clean start
03

Example in Practice

The paper has no ready-made prompt. Below is a prompt inspired by it, not tested by the authors. It's here to show where the problem hits hardest: handing work off between sessions.

Task: Yesterday Claude Code in Cursor “finished” wiring an online store into Stripe: taking a payment, the confirmation webhook, refunds. Today you open a new session. There's no history, just the repository and yesterday's session message saying “all done.” If you simply write “polish it up and check it,” the new agent will most likely skim the code, run the existing tests and say “looks good.”

Prompt:

Below is the original spec. The previous session reported that the work is complete.
Treat that as an unverified claim, not a fact.

<spec>
1. Create a payment via Stripe with a receipt and sales tax calculated by Stripe Tax.
2. Webhook: on payment_intent.succeeded the order moves to “paid” status;
   a duplicate webhook must not repeat any actions.
3. Full and partial refunds from the admin panel.
4. When a payment is canceled, the inventory hold is released.
</spec>

How to work:
1. List every requirement from the spec as a separate item.
2. For each item, find where it is implemented in the repository
   and how it can be verified (test, request, run). 
   If you can't find it, mark it “not implemented.”
3. Do NOT rely on the code “looking finished”
   or on the existing tests passing: they may not
   cover the requirement.
4. For each item, write a separate check and run it.
5. Final table: requirement | where in code | how verified | status.
   Mark “done” only if the check was run and passed.
6. Fix everything that isn't “done” and repeat steps 4–5.

Result: The model first breaks the spec into items, then maps each item to the code. Next it writes and runs checks for every item, not just the tests that already exist. At the end you get a status table and a list of fixes. You can see which items yesterday's session skipped or got wrong (say, webhook idempotency or partial refunds).

04

Why It Works

The weakness. The model is bad at noticing what is missing from the text and the code. It struggles to find errors without external feedback and happily builds on top of someone else's mistakes instead of revisiting them. When the state looks finished, it has no signal to go hunting for gaps. The existing work “defines” the remaining scope: diff reviewed, tests run, nothing left to do.

The strength. The model is good at building from scratch. From a clean slate, the same agents passed these tests. It's also decent at checking a specific item against a specific criterion when that criterion is spelled out.

How to use this. You need to break the “anchor” (the attachment to the existing solution). That's why the prompt above: - puts the original spec above the state of the code and declares someone else's “done” unverified; - checks item by item against the spec rather than “let's see what's here”; - allows the “done” status only after a check has actually been run.

Knobs to turn: - Step 3 (“don't rely on the existing tests”) can go if your project's tests are trustworthy. - For small tasks, shrink the table to a list: “item → verified / not.” - If the work isn't critical, you can skip the repair entirely, roll back and start over: in the paper, a clean start is consistently better. That follows from the data, but the authors didn't test a “roll back” strategy on its own.

05

Prompt Template

The template is not from the paper either; it's built from its findings:

The original spec is below. The previous contributor reported that the work is complete.
Treat that as an unverified claim.

<spec>
{original_request}
</spec>

Steps:
1. Break the spec into separate, verifiable requirements.
2. For each one, find where it is implemented in {repo_or_environment}.
   Can't find it: “not implemented.”
3. Don't consider the work done because it looks
   finished or because {existing_checks} pass.
4. For each requirement, write and run your own check.
5. Output a table: requirement | where | how verified | status.
   “Done” only after a passing check.
6. Fix whatever isn't done and repeat steps 4–5.

Fill in: {original_request} is the original spec, verbatim, not paraphrased; {repo_or_environment} is where the agent works; {existing_checks} means tests, linter, CI.

06

Limitations

⚠️ The cure is untested: the paper measures the problem, not ways to fix it. The prompt above is a hypothesis based on the findings; the authors didn't measure its effect.

⚠️ Coding agents only: tested on tasks with repositories and a terminal. Carryover to writing, analytics and correspondence is likely, but the paper doesn't show it.

⚠️ Benchmarks, not live projects: the tasks come from benchmarks with strict hidden tests. In your project, “correct” is defined by the spec, and without a clear spec there's nothing to check against.

⚠️ Predecessors are open models: the “someone else's work” was produced by three families of open models. With output from other models or from humans the picture may differ (though the authors see a drop across all groups).

⚠️ Incomplete breakdown: the section on acceptance bias was cut off in the text we had, so details of agent behavior (what exactly they touch and leave alone) come from the abstract and introduction.

07

How They Studied It

The idea is simple: take well-known programming benchmarks (DeepSWE and Terminal-Bench) and, instead of a clean start, hand the agent a state where someone has already worked and declared “done”, even though the hidden tests fail. The predecessors were three open models, each given up to eight hours per task. The results were filtered to keep only cases where the agent declared the task complete but the tests still failed. Then two humans checked that the attempt was meaningful and that the tests matched the spec. That yielded 198 “residual” states from 111 tasks.

Next, five strong agents received only the original request and that state, with no history and no hint that the attempt had failed. The request, tests and tools stayed the same; only the starting point changed. Result: success dropped by 20–53 points (for example, from 72% to 20%) on DeepSWE and by 21–35 points on Terminal-Bench. Topping the leaderboard on a clean start didn't guarantee the best result when finishing someone else's work.

The surprise was that the states were almost correct: on average ~98% of tests already passed. You'd think it just needs a final push. But on tasks the agent solved from scratch, it failed from the inherited state in 61–81% of cases. In 59–88% of failures on DeepSWE, the agent handed in the work with the same set of failing tests, meaning it effectively fixed nothing. The practical lesson: “almost done” is more dangerous than “nothing there.”

08

Adaptations and Extrapolations

🔧 Technique: a reviewer with no access to the “completion report” → less anchoring

An idea inspired by the paper: don't show the reviewing agent the implementer's output (“all done, tests are green”). Give it only the spec and the repository.

You are an independent auditor. You have only the spec and the repository.
You don't have the implementer's report and never will.
Find what the spec requires that the code is missing, and prove it with a check you actually run.

The paper shows that even without a report, agents anchor on the state itself. That's why the rule “nothing counts as done without a check that was run” comes in handy here. The authors didn't test how well this combination works.

09

Resources

  • Paper: SWE-Residual: Evaluating Starting-State Robustness of Coding Agents
  • Code: https://github.com/userljz/SWEResidual
  • Authors: Jinze Li, Weijie Liu, Jinfeng Xu, Shuo Yang, Xin Yang, Yang Zhang, Yijun Wang, Zifei Shan, Edith C.H. Ngai
  • Institutions: The University of Hong Kong, Tencent, University of Tokyo, University of North Texas, The University of British Columbia
  • Related work: Recovery-Bench, Handoff Debt, Handoff Tax, FixedBench

Research digest

Key result

Work from a previous session passes ~98% of hidden tests, yet the agent fails 20–53 percentage points more often starting from it than from a clean slate. The paper offers no technique; it's a benchmark. But it implies a rule: treat a “done” from the previous session as unverified and check it against the original spec. The agent takes someone else's result as its baseline (the authors call this acceptance bias, a tendency to accept whatever you inherit). It skims the diff, runs the tests and ships. In 59–88% of failures on DeepSWE it finishes with the same failing tests it started with. Below is a prompt inspired by the paper. The authors didn't test it.

Principle

The agent doesn't look for gaps because the work looks finished. You can break that anchor with the order of verification. The scheme: the spec is split into items, then for each item you find its place in the code, then you write and run a check. Only after that does it get a status. The original spec outranks the state of the code, and someone else's “done” is declared an unverified claim. Think of a final walkthrough on a new apartment. The contractor says “all done.” You walk through with a checklist from the contract and test every outlet. You don't wander from room to room going “eh, looks fine.”

Why it works

The model is bad at noticing what's missing from the code. Without external feedback it happily builds on top of someone else's mistakes. When the state looks finished, there's no signal to hunt for gaps. Half of these starting states fail just 1–3 tests. The bug hides in the small stuff. The kicker: from a clean slate the same agents passed these tests, yet from an almost-finished result they fail several times more often. Someone else's work doesn't help; it gets in the way. There's a second unpleasant fact. The agent leaderboard flips under this kind of start. An agent that's strong on a fresh start isn't necessarily good at finishing someone else's work. But the model is decent at checking a specific item against an explicit criterion. So hand it that criterion directly.

When to apply

Handing work off between sessions and agents → finishing someone else's code against the original spec, especially when there's no history and the repository holds an “all done” message. If the work isn't critical, you can roll back and start over. In the paper a clean start is consistently better. But the authors didn't test a rollback strategy on its own. NOT a fit if there's no clear spec: there's nothing to check against. For writing and analytics the carryover is likely, but the paper doesn't show it.

Mini recipe

1. Give the spec as is: the original request, not paraphrased, in its own block. 2. Declare “done” hearsay: say that the previous contributor reported completion and that this is an unverified claim. 3. Break it into items: each requirement on its own line. 4. Find its place in the code: can't find it, then it's “not implemented.” 5. Forbid trusting appearances: code that “looks finished” and old tests passing are not proof. If your project's tests are reliable, this step can go. 6. Require a dedicated check per item: written and run, not just described. 7. Build the table: requirement | where in code | how verified | status. “Done” only after a passing check. 8. Fix and repeat: fix what isn't done and go through steps 6–7 again. For small tasks the table can shrink to a list: “item → verified / not.”

Examples

Situation: yesterday an agent “finished” Stripe checkout; today a new session starts with no history. [BAD]: `Polish it up and check that everything works` [GOOD]: `Below is the original spec. The previous session reported that the work is complete. Treat that as an unverified claim. Spec: 1) payment via Stripe with a receipt and sales tax from Stripe Tax; 2) the payment_intent.succeeded webhook moves the order to “paid,” and a duplicate webhook repeats nothing; 3) full and partial refunds from the admin panel; 4) when a payment is canceled, the inventory hold is released. Steps: list each requirement as a separate item. Find where it's implemented. Can't find it: “not implemented.” Don't rely on the code looking finished or old tests passing. For each item, write and run your own check. Output a table: requirement | where in code | how verified | status. Mark “done” only after a passing check. Fix everything else and rerun the checks.` With this prompt, checks for the duplicate webhook and partial refunds get written separately. Yesterday's gaps (for example, webhook idempotency) surface in the table.

In plain words

Models are spectacularly blind to whatever is simply not there in the code. When a coding agent inherits a repository full of someone else's work, its critical thinking jams solid: acceptance bias kicks in, a blind trust in whatever the last session left behind. The model doesn't check whether the original problem was actually solved; it naively takes someone else's diff as its baseline and cheerfully polishes the previous guy's mistakes.

It's like hiring a new contractor to finish a remodel after the last crew skipped town. Instead of checking whether anyone even poured the foundation, he spots some crooked wallpaper, touches up the baseboards, cheerfully reports “boss, we're all set” and sends you the invoice. On paper the job is done, the local tests didn't fail, but the house will come down at the first stiff breeze, because nobody looked at the original blueprint.

The creators of the SWE-Residual benchmark proved it: coding agents completely flunk at assessing a task's starting state. Drop an agent in halfway through and it will mechanically rerun the existing tests, fix a few commas in someone else's code and decide the mission is accomplished. Without an explicit error in the logs, the model doesn't hunt for hidden bugs: it will always choose to build on top of someone else's screwup rather than question it.

The authors dug into software, but the same rake hits any multi-agent pipeline and any long chain of tasks. Hand work from agent to agent, split a process into steps or reset the context, and every next agent turns into a yes-man that piles up systemic junk. Instead of smart autonomy you get a game of telephone where the last bot is polishing outright garbage.

Bottom line: hand an agent something half-baked and expect objectivity, and you've guaranteed a botched task. Either make the model validate the result strictly against the original spec every single time, or don't be surprised by green tests on completely broken code. Trusting intermediate context is, right now, the biggest brake on all of agentic development.

AI lab assistant

Apply this study to your task

Describe what you're working on. AI takes the method and the measured results from this paper and adapts them to your case, or writes a ready prompt built on them.

Based on Acceptance bias: the agent takes someone else's “finished” work as its baseline and never checks it against the task arXiv:2610.25899

Sign in to apply this study New accounts get 50 free credits.