2026-09-09 6 minPRACTICAL_GUIDE

PASS, NEEDS_WORK, ERROR: Reading an AI Coding Agent Result

A bounded coding Loop can end several ways, and only one of them is a verified pass. Learn what PASS, NEEDS_WORK, ERROR, PAUSED, and STOPPED_BY_USER each claim about your repository.

> Why a result is a value, not a sentence

When a coding agent finishes with a paragraph of prose, you have to read carefully to learn whether anything was actually verified. A confident summary and an unverified change look the same.

Wukong Code ends a Loop with a small, fixed set of results. Each one is a different claim about the repository, and each one has a different sensible next step.

> PASS is the only verified outcome

PASS means the frozen Gate Plan ran and the evidence supporting it was complete and fresh. Incomplete, stale, conflicting, interrupted, or corrupt evidence cannot become a PASS — the run reports the problem instead of rounding up to green.

A PASS produced in a workspace with an acknowledged no-executable-checks decision is a narrower claim than one backed by a passing suite. The record keeps that distinction so you can weigh it.

> NEEDS_WORK is a result, not a failure to answer

NEEDS_WORK means the Loop reached a conclusion and the conclusion is that the repository is not ready. It carries the blocking evidence: which check failed, which reviewer finding was decisive, what the agent changed, and what to do next.

A reviewer that cannot reach a firm judgement returns an inconclusive verdict, and an inconclusive verdict is treated as NEEDS_WORK rather than as a pass. Hitting the iteration ceiling ends the run as NEEDS_WORK too — the budget stopped it, so nothing may claim it was verified.

  • [+]A blocker with evidence, not a vague "could not finish".
  • [+]An inconclusive review never becomes a pass.
  • [+]Reaching --max-iterations ends the run without a verified claim.

> ERROR means the process broke, not the code

ERROR is about the run itself: a provider that stopped responding, a check that could not execute, a state that could not be written. It says nothing about whether your change is correct, because the Loop never got far enough to find out.

The useful response is usually to fix the environment — provider configuration, a broken check command, disk or permission problems — and continue, rather than to re-read the diff.

> PAUSED and STOPPED_BY_USER keep your work

PAUSED is a run waiting to continue. STOPPED_BY_USER is a run you ended on purpose. Neither is a verdict on the code, and neither discards what the Loop already did: the goal, the frozen contract, the evidence gathered so far, and the changes on disk are all still there.

Continuing from either creates an idempotent continuation rather than starting a fresh run that forgets the acceptance contract you already confirmed.

See where a run stopped and continue it
wukong
/loop status
/loop resume

> What to do after each result

Treat the result as routing, not as a grade. PASS means review the diff and the cited evidence, then decide to keep it. NEEDS_WORK means read the blocker first — it is usually more specific than anything you would get by re-reading the change yourself.

ERROR means fix the environment and continue. PAUSED and STOPPED_BY_USER mean decide whether the goal is still the goal, revise it if not, and resume.

Try the workflow in your repository

Wukong Code is free and BYOK for macOS, Linux, and Windows.

[DOWNLOAD_WUKONG]