Skip to content

Pipeline lifecycle & state

Every run has a status you can see in the dashboard, and you can steer it at any time with the lifecycle controls.

A single run moves through these states. Running is the hub: from there it can pause, stop, fail, or finish — and resume brings a paused, interrupted, or failed run back to running.

pauseerrorstopcancelresumeresumeresume Pending Running Paused Failed Interrupted Cancelled Completed

Hover or focus any state to see what it means. Blue is a forward transition; amber is resume — the recovery path.

A run’s status is always one of seven values:

StateMeaning
PendingCreated but not yet started.non-terminal
RunningActively executing stages.non-terminal
PausedCleanly checkpointed by you; resume continues exactly where it left off.non-terminal
CompletedAll stages finished and a pull request exists.terminal
FailedUnrecoverable error, loop exhaustion, circuit breaker, or crash.terminal (resumable)
InterruptedYou stopped it (control file, signal, or webhook abort).terminal (resumable)
CancelledForce-cancelled from the UI.terminal

Failed and Interrupted are terminal but resumableresume re-enters the run where it left off. Completed and Cancelled are final.

The difference between failed and interrupted is who stopped the run: interrupted means a human stopped it intentionally; failed means something went wrong (an exception, an exhausted loop, the circuit breaker, or a crash).

From the run’s header in the dashboard:

  • Pause — stop at the next safe checkpoint without losing progress (Running → Paused).
  • Resume — pick a paused, interrupted, or failed run back up (→ Running).
  • Stop — end the run now (Running → Interrupted).
  • Cancel — force-quit a run you no longer care about (→ Cancelled, not resumable).

Because each run lives in its own git worktree, stopping or failing never leaves your main working tree in a half-finished state.

worca classifies errors and counts failures. When failures cross the configured threshold, a single run ends as failed (with a circuit-breaker reason) instead of retrying indefinitely — a backstop against a run that’s stuck spending tokens with no progress. The threshold is configurable in the Settings UI.