Apply to my task
arXiv:2610.37434 ★ 88 Oct 27, 2026

A Checkpoint Between Stages: Why Coding Agents Miss Their Own Old Mistakes and How to Work Around It

Key result

A coding agent fails to notice 95% of its failed stages and builds the next stage right on top of them. That's why 63% of agents pass the first stage, but the whole feature works for only 28%. The checkpoint method lets you catch an old mistake before it drags the following stages down with it. The twist: old code rarely breaks, only in 3% of cases. The agent doesn't wreck the past, it just never looks back. The fix is an explicit command: "re-verify the previous stages and show the output." Important: this is our conclusion from the authors' data. They did not test this measure themselves.

01

TL;DR

The FeatureArc study tests what happens when a coding agent grows a single feature stage by stage: "build lesson booking," then "add payments," then "add rescheduling." Every new spec lands on code the agent wrote itself. Between stages, nobody tells it whether the previous stage passed. The paper has exactly one method: hidden checks after every stage plus a final check of the whole feature. The agent knows nothing about these checks.

The headline finding: an early mistake stays in the code and drags the following stages down with it. About 63% of agents pass the first stage, but the whole feature works for only 28%. After a failed stage, the next one passes just 23% of the time; after a successful one, 70%. Meanwhile, old code rarely breaks (3% of cases). The real problem is elsewhere: in 95% of cases the agent never notices that the previous stage was done wrong. Its self-checks look at the current stage and almost never look back.

The rule that follows: don't hand an agent a chain of extensions blindfolded. You need a checkpoint between stages, where a human, or the agent itself on an explicit command, re-verifies the earlier requirements. The authors didn't test this measure separately; it's a conclusion drawn from their data.

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

Here's how the authors set up the test:

STEP 1: Agent gets the code and the stage 1 spec → writes the implementation
CHECK: hidden tests verify (a) the new behavior, (b) that old behavior isn't broken
         → the agent is NOT told the result, NO rollback is done
STEP 2: Agent gets the stage 2 spec → builds on top of ITS OWN code (same session)
CHECK: the same checks
...
STEP N: final stage
OUTCOME: the whole feature is checked end to end on the final code

The delegation levels the authors introduce:

L1: the user tells the agent HOW to fix the failed stage
L2: the user points out WHICH behavior doesn't work
L3: the user only says "passed / failed"
L4: the user says nothing about past stages and just gives the next spec  ← this is what was tested
03

Example in Practice

The authors' method is a benchmark; the paper contains no ready-made prompts. Below is a practical application of the finding, built on top of the results, not a technique from the authors.

Task: You're using Claude Code to build a Discord bot for an online Spanish school. Stage 1 is lesson booking. Stage 2 is payments through Stripe. Stage 3 is reminders and rescheduling. In the past you'd fire off three specs in a row and discover at the end that booking no longer respects payment and rescheduling creates duplicates.

Prompt (before every new stage, starting with the second):

Before stage 2 ("Payments through Stripe"), stop and verify stage 1.

1. List every acceptance criterion for stage 1 from my spec.
2. For EACH criterion, run a check (a test or a manual run) and show the command output.
   Don't write "should work." Only the actual result.
3. If even one criterion fails, fix it, rerun the check,
   and show that it now passes. Do not move on to stage 2.
4. If everything passes, write "Stage 1: all criteria confirmed"
   and start stage 2.

After stage 2, run the checks for stages 1 and 2 together. This is
to make sure payments didn't break lesson booking.

Result: The model first lists the criteria from the previous stage. Then it shows the check output for each criterion. If something doesn't add up, it fixes it before the new stage begins. Only then does it move on to payments. At the end of the stage, you get a combined run of old and new checks.

04

Why It Works

The LLM's weakness. The agent judges its work by what it checks itself. And it mostly checks the current task. Once a stage fails, it almost never goes back to it, because in its picture of the world everything is "green." The new stage gets built on a crooked foundation and the error snowballs: in most failed later stages (73%), the culprit is a defect inherited from earlier.

The strength. The agent is good at following a direct, specific command: "list the criteria, run the check, show the output." It can read its own code and run tests. What it lacks isn't skill, it's the habit of looking back without being asked.

How the checkpoint exploits this. You turn "the agent will figure out on its own to check past work" into a mandatory step in the instructions. Your control levers: - Check depth. "Only the previous stage" is cheaper; "every stage from the first" is safer for long chains. - Demand proof. "Show the command output" kills the phrase "looks like everything works." - Criteria from the spec. Have the agent copy them verbatim. The authors saw that green self-tests often check something other than what was required. - Who checks. It can be the agent itself, a second agent in a fresh session (fresh eyes), or you by hand.

05

Prompt Template

This template is based on the paper's findings, not taken from the authors:

We are growing the feature "{feature}" in stages. We are now moving to stage {number}: "{stage_name}".

<BEFORE_START>
1. List the acceptance criteria for all completed stages ({stage_list}).
2. For each criterion, run a check and show the actual output.
3. If a criterion fails: fix it, rerun, show the result.
   Do not move to the new stage until everything is confirmed.
</BEFORE_START>

<NEW_STAGE>
{stage_spec}
Interfaces, names and error messages: {contract}
</NEW_STAGE>

<AFTER_STAGE>
Run the checks for the new stage AND all previous ones together.
Report as a table: stage — criterion — result.
If anything from earlier broke, fix it before handing off.
</AFTER_STAGE>

What to fill in: {feature} is what you're growing, {stage_list} is the stages already done, {stage_spec} is your description of the behavior and criteria, {contract} is function names, fields and error texts, so the checks don't have to guess.

🚀 Quick start: paste this into your chat with the agent:

Here is a template for a checkpoint between stages. Adapt it to my project: {describe the project and stages}.
Ask me questions to fill in the fields.

[paste the template above]

The model will ask how tests are run in your project, which stages are already done, and what their acceptance criteria are. It needs this so the check follows your requirements, not whatever the agent decided to check on its own.

06

Limitations

⚠️ This is a benchmark, not a proven technique: the authors measured how agents fail without feedback. They did not test intermediate checks or prompts like ours. The measure is inferred from the data, not proven by experiment.

⚠️ The agent checks the wrong thing: the authors separately analyzed cases where the agent's self-tests were green while the hidden tests failed. The agent may have picked the wrong expectations. So the command "run the checks" doesn't guarantee correctness. The criteria must be written out explicitly in your spec.

⚠️ Results depend on the model + harness combo: complete off-the-shelf agents were compared; the contributions of the model and the tool weren't separated.

⚠️ The test is harsh: no feedback, no rollback, one session. In real work you usually check something, so 28% is a lower bound, not a forecast.

⚠️ Code only: the finding is about multi-stage development. You can carry it over to writing or data analysis by analogy, but the paper doesn't cover that.

⚠️ The paper text was truncated: detailed per-model results and the root-cause analysis are missing from the provided excerpt. The conclusions rely on the abstract and introduction.

07

How They Studied It

The idea was simple: a real feature grows piece by piece, so the test should too. The Tencent team took the histories of real repositories (Python, TypeScript, Rust, Go) and pulled out chains of commits that successively extend the same feature. For each stage, LLM agents wrote a spec and an interface contract, and the existing tests were split into two kinds. The first check the new behavior; the second check that old behavior isn't broken. After filtering and manual review, 73 tasks, 263 stages, 53 repositories remained, with 2 to 10 stages per chain.

Ten coding agents worked in a single session. Hidden tests ran after every stage, but the agent never learned the results. There were no rollbacks, and the budget was four hours per stage.

The surprise was that new code barely breaks old code (3.3%). The main trouble isn't regressions, it's undetected defects: after a failure, the agent misses the error 95% of the time. Even the best agent, which passes the first stages 84% of the time, delivers a complete working feature in only 49%. The practical takeaway: success at one stage tells you nothing about the state of the whole feature.

The agents' trajectories were annotated by three LLM judges using a shared codebook. Decisions were made by majority vote, and disputed cases were resolved by the first author. He checked his own annotation blind on a sample, and agreement with the judges was 89–100%.

08

Adaptations and Extrapolations

🔧 Technique: independent reviewer → fresh eyes on old stages

Instead of self-checking, run a review in a new session:

You are signing off on another developer's work. Below are the specs for stages 1–2 and the code.
Don't trust their assurances. For each acceptance criterion, find confirmation in the code
or run a check. Return a list: criterion — confirmed / not confirmed — how.

Effect: the reviewer has no "it works anyway" habit. The paper did not test this hypothesis.

Extrapolation: a rule in CLAUDE.md / AGENTS.md

## Rules for staged work
- Before starting a new stage, list the acceptance criteria of all previous ones
  and confirm each by running a check, with the output in your reply.
- Don't write "checked" if you didn't run the command.
- If a previous stage fails, fix it before starting a new one.
- A stage is done = new and old tests run together.

This way the check is baked into your standing instructions and doesn't depend on whether you remember to ask for it.

09

Resources

  • FeatureArc: Benchmarking Coding Agents on Evolving Features — Yunlong Wang, Alyssa Wu, Cuiyun Gao, Jia Feng, Songyuanyi Lu, Zhichao Hu
  • Hunyuan Team, Tencent; The Chinese University of Hong Kong
  • Tools mentioned: Claude Code (code.claude.com/docs/en/overview), Codex CLI (github.com/openai/codex)

Research digest

Key result

A coding agent fails to notice 95% of its failed stages and builds the next stage right on top of them. That's why 63% of agents pass the first stage, but the whole feature works for only 28%. The checkpoint method lets you catch an old mistake before it drags the following stages down with it. The twist: old code rarely breaks, only in 3% of cases. The agent doesn't wreck the past, it just never looks back. The fix is an explicit command: "re-verify the previous stages and show the output." Important: this is our conclusion from the authors' data. They did not test this measure themselves.

Principle

The scheme is simple: before every new stage, the agent first signs off on the previous one. 1. It lists the acceptance criteria of the previous stage from your spec. 2. It runs a check for every criterion and shows the output. 3. It finds a failure, fixes it and reruns the check. 4. Only then does it pick up the new spec. After the new stage, the agent runs the old and new checks together. That way you can see payments didn't break lesson booking. Think of it like a construction site. A crack in the foundation is easier to patch before the second floor goes up. Later it spreads into the walls.

Why it works

The authors' data shows how an error travels down the chain. After a failed stage, the next one passes only 23% of the time. After a successful one, it passes 70% of the time. In 73% of later failures, the culprit is a defect inherited from an earlier stage. The agent can run tests and read its own code, but without a command it doesn't go back to the past. Its self-checks look only at the current task. To it, everything is "green" until you say otherwise. The checkpoint makes looking back a mandatory step, not a matter of conscience.

When to apply

Development with an agent → growing one feature in stages (booking, then payments, then rescheduling), especially when all stages run in a single session with no test runs between them. The longer the chain, the more an early mistake costs. NOT suited for one-off, single-step tasks. The paper has no evidence for writing or data analysis, so carry it over at your own risk.

Mini recipe

1. Write the criteria up front: for each stage, put a "what must work" list right in the spec. Have the agent copy them verbatim instead of inventing its own. 2. Put up a gate: from stage 2 on, require "list the criteria of the previous stages, run the check, show the command output." 3. Ban the word "should": you need the actual result of the run, not the phrase "looks like everything works." 4. Don't let it proceed on red: if something fails, it fixes and reruns. It doesn't move to the new stage. 5. Close each stage with a full run: checks for the new stage and all old ones together. Report as a table: stage, criterion, result. 6. For long chains, add fresh eyes: have a second agent in a new session run through the criteria. Or spot-check by hand.

Examples

[BAD]: `Now add payments through Stripe, then reminders and lesson rescheduling` [GOOD]: `Before stage 2 ("Payments through Stripe"), stop and verify stage 1. List the acceptance criteria for stage 1 from my spec. For each one, run a check and show the command output. Don't write "should work." If a criterion fails, fix it and rerun the check. Don't move on to payments until everything is confirmed. After stage 2, run the checks for stages 1 and 2 together and show them as a table: stage, criterion, result.` The difference: in the bad version, the agent decides on its own what to check and usually only looks forward. In the good one, looking back is written in as a mandatory step with proof.

In plain words

AI coding agents can crank out great results on a one-off task, but they fall apart fast over the long haul. The root of the problem is self-check blindness: the model tests only the current task and fully believes its past code is flawless. It never looks back. The agent just keeps bolting new logic onto its own half-working duct-tape fix, sincerely convinced that everything in the system is all green.

It's like hiring a contractor to build a house in phases: he pours a crooked foundation, gives himself an A+, and then quietly stacks the walls and the roof on top. It looks nice from the outside, but the load-bearing wall is already cracked. The guy is sure that technically everything checks out, since the new wallpaper went up perfectly straight, and the crack down below is now the residents' problem, right up until the house comes down on their heads.

The FeatureArc benchmark blew the lid off this mess: the agent was fed tasks one at a time, "build booking," then "add payments," then "bolt on rescheduling." The outcome was predictable: the hidden tests crash and burn. In 73% of failures at later stages, the culprit isn't tricky new code, it's an inherited hidden defect the model fumbled on the very first step.

The study was about programming, but the principle is universal. Long marketing funnels, legal document chains and LLM analytics pipelines fall apart exactly the same way. The moment you make an agent run a complex multi-step play with no outside referee, every next step dutifully soaks up the previous nonsense. Autonomy without oversight is guaranteed to turn your project into a house of cards.

Bottom line: blind trust in agents over a long run is a one-way ticket to the bottom. The model can't do self-criticism and won't go back to rework the old foundation. Either you bolt on hard external checks after every stage of the task, or the agent hands you a supposedly finished product and you get stuck in endless manual refactoring.

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 A Checkpoint Between Stages: Why Coding Agents Miss Their Own Old Mistakes and How to Work Around It arXiv:2610.37434

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