Home • Articles • AI delivery • Why do AI coding agents say done too early?

Why do AI coding agents say done too early?

Ada, Bas and Inès compare an early completion signal with unfinished software checkpoints.

TL;DR

AI coding agents say “done” too early because they can finish the requested edit without proving the whole delivery outcome. Their stopping point usually follows the prompt, visible tests and tool feedback. Define done as observable evidence instead: acceptance behaviour demonstrated, relevant regression checks passed on the final commit, documentation updated, risks named and a human reviewer satisfied. If a requirement has no proof method, the agent can report completion while the team still has unresolved product and release work.

In this article
  1. “Done” is usually hidden inside the request
  2. A green check can describe the wrong job
  3. Tool success is not product success
  4. Ask the agent to report status, not confidence
  5. Give the agent a refusal condition
  6. Reopen work when the evidence changes
  7. Frequently Asked Questions

7 min read

An agent can modify the requested files, run a test suite and announce completion while the feature is still wrong, incomplete or unsafe to release. This is not mysterious. The agent has reached the stopping condition implied by the task, and that condition is often much narrower than the team’s meaning of delivered.

The main question is why do AI coding agents say done too early? They optimise for visible completion signals. If the prompt says “add the endpoint” and the repository has a unit test, the agent may stop when the endpoint exists and that test passes. It cannot infer every product expectation, production boundary or organisational approval that was never made explicit.

“Done” is usually hidden inside the request

Every task contains an implicit proof standard. “Fix the bug” may mean the error no longer appears locally, the original failure has a regression test, affected workflows still work and the release can be observed safely. Unless those outcomes are stated, the agent may choose the first plausible one.

Write the proof method beside each acceptance statement:

Comparison

Acceptance statementProof methodWeak substitute
An authorised user can export a reportIntegration test plus demonstrated fileMethod returns a success flag
An unauthorised user is rejectedNegative permission testUI hides the button
Existing saved filters still workFocused regression examplesNew path passes alone
Failure is visible to operationsAlert or log demonstrated in test environmentException exists in code

The proof method forces the team to decide what it will accept before the agent writes code. It also gives the agent a concrete stopping condition.

A green check can describe the wrong job

Agents often use the available test suite as an oracle. Existing tests may be incomplete, and newly generated tests may encode the same misunderstanding as the implementation. Both can be green while the requirement is still unmet.

GitHub’s guide to writing tests with Copilot warns that generated tests may not cover all scenarios and should be reviewed and extended. That limitation is especially important when the agent writes both sides of the proof.

Challenge one critical test by breaking the behaviour deliberately. If removing the permission check or reversing the boundary condition does not make the expected test fail, the suite is not protecting that claim. Then derive at least one acceptance example from a source outside the implementation: a ticket, observed failure, contract or product decision.

A definition-of-done diagram connecting acceptance, evidence, final commit, review and release.
An agent should stop at demonstrated delivery evidence, not at the first successful edit or test run.

Tool success is not product success

Coding agents receive strong signals from tools: a command exited zero, a linter reported no problem or a file was created. These are useful facts. They answer narrow questions about an environment the agent can access.

Product success may depend on data shape, permissions, user comprehension, connected systems or a deployment sequence outside that environment. The task must name which of those boundaries matter and how the team will check them.

Use a layered completion record:

  • Change made: the intended files and configuration changed.
  • Behaviour shown: acceptance examples pass and a meaningful result is inspectable.
  • Regression bounded: relevant existing behaviour was checked.
  • Release prepared: migration, monitoring and recovery work is complete where needed.
  • Human accepted: a named reviewer understands the result and remaining risk.

An agent may complete the first three layers on a low-risk task. It should report the later layers as pending when they require access or judgment it does not have.

Ask the agent to report status, not confidence

A confident completion paragraph is easy to produce and hard to audit. Replace it with a status report that distinguishes completed, failed, skipped and unavailable checks.

Require exact commands, the final commit, a short result and a link or artifact for any visual or behavioural proof. Ask the agent to list assumptions and unverified boundaries. If a check could not run because a service or credential was unavailable, that is an explicit pending item, not a reason to soften the language.

  1. Restate the accepted behaviour in concrete terms.
  2. List the changes that implement it.
  3. Record each proof method and its result.
  4. Mark unavailable or skipped checks plainly.
  5. Name decisions and risks that still need a human.

This makes “done” reviewable. A human can see whether the task reached its agreed boundary without trusting the agent’s tone.

Give the agent a refusal condition

Some work should stop before code is produced. If an acceptance rule conflicts with another requirement, the repository state is unsafe, a migration has no recovery route or the task needs a product decision, the agent should ask rather than guess.

A refusal condition is useful because generated code can make an unresolved decision look settled. State conditions such as: do not invent permission rules; do not change a public contract without approval; do not run destructive migration steps; stop when tests contradict the ticket. The six moments in the delivery process show where decisions, evidence and refusals belong around implementation.

Ada, Bas and Inès compare an agent completion claim with acceptance evidence in a software delivery room.
The useful completion report exposes missing proof and unresolved judgment instead of hiding them behind “done.”

Reopen work when the evidence changes

Completion is tied to a version. A new commit, dependency resolution or conflict fix may invalidate earlier evidence. Required checks should run on the final commit, and manual demonstrations should identify the version they show.

The same applies after review. If the reviewer requests a substantive change, the task is no longer done until affected checks run again. This prevents a common failure where an agent fixes one comment and the team merges on evidence from the previous state.

A durable delivery record keeps the acceptance, checks and verdict connected. It also gives future maintainers a better answer than an expired agent transcript.

Teams do not need a longer universal checklist. They need an explicit finish line for each task and a workflow that refuses to cross it without proof. Once that line is visible, agents can be fast without redefining delivery around whatever they happened to complete.

If early completion claims are creating review and release risk, Fix this for your team. The Programme applies an evidence-based workflow to real backlog work and measures it against your starting point; it does not promise that every task becomes faster.

Teams should also separate task completion from release completion in their status system. A change can be implementation-complete while waiting for a production-like check, domain review or deployment window. One undifferentiated “done” column encourages people and agents to collapse these states. Use plain states that name the missing decision, such as awaiting evidence, awaiting review or ready to release.

This improves planning as well as safety. Leaders can see whether work is blocked by coding, environments or human review, instead of assuming every open item needs more generation. The status becomes an operational fact rather than a confidence statement.

Frequently Asked Questions

Why do AI coding agents say done too early?

They stop at the completion signals they can see: changed files, passing commands and instructions in the task. Product intent, production conditions and human approval remain invisible unless the workflow states them and supplies a proof method.

How should a team define done for an AI coding task?

Define observable acceptance behaviour, the checks that prove it, relevant regression boundaries, required release preparation and the human decision. Tie all evidence to the final commit and mark unavailable checks as pending rather than complete.

Should an agent be allowed to mark its own work complete?

It can report that assigned steps and checks finished. A human should decide whether the evidence satisfies the delivery outcome and whether remaining risk is acceptable. Separating status from approval keeps the report useful without giving the tool false authority.

What if the agent cannot run a required check?

Record the check as unavailable, explain the missing dependency or access and leave the task incomplete at that boundary. A person with the right environment can run it, or the team can explicitly revise the acceptance requirement.

Why do generated tests sometimes create false confidence?

The tests and implementation may share the same wrong assumption. A passing assertion proves consistency between them, not agreement with the product need. Derive important examples from an independent requirement and make a deliberate fault to see whether the test detects it.

When should a completed AI task be reopened?

Reopen it when code changes after evidence was recorded, a conflict resolution alters behaviour, a required check was skipped, or review reveals an untested risk. Completion belongs to an exact state, so material changes require fresh verification.

Written by

Haider Lasani

Has built and maintained real systems since 2008 and writes for engineering leaders whose teams ship with AI. Author of The Decisions AI Can’t Make for You and The Backlog That Thinks.

About the author

Recognise this in your own team?

Eliyce helps in three ways: your engineers deliver with AI inside one enforced process in the AI Delivery Programme, your business agents are built and managed like real software, and Spine shows what shipped and how it was checked.