Cadora's resume and remediation, step by step: a run stops at a red gate with its artifacts preserved in the workspace; cadora run --resume-from build skips the upstream nodes as trusted and re-runs from the break; provenance verification refuses to resume onto a workspace that drifted since the run being resumed unless --allow-drift is passed and the drift is recorded; --remediate runs a bounded, verified auto-repair loop where green means the same gate re-passing, never the agent's claim; a cost ceiling stops remediation honest-blocked before overspending; and the dashboard badges skipped nodes trusted and re-run nodes fresh.

Cadora · resume & remediation

A broken run doesn't cost you the whole run

A timeout, a walk-away, a red gate four stages in — none of it should mean starting over. Cadora lets you resume from the break, trusting the upstream artifacts already on disk (and verifying that trust against the run's own provenance, so you never resume onto a drifted workspace unnoticed), or hand a failed gate to a bounded, verified auto-repair loop. In both, "green" is the real gate re-passing — never the agent's say-so.

Surface · CLI + dashboardRole · operatorCaptured · fixture run, app.topology.yaml
01

The run stops at a red gate

plan and design cleared their gates; four minutes into build, the tests gate comes back red. Cadora stops the run right there — it never lets a failed gate flow downstream. What matters for recovery: the workspace and the partial archive are left intact under runs/<id>. The two green stages are done; only build and below are unfinished.

zsh — cadora run
$ cadora run app.topology.yaml --cwd ./workspace cadora · executor=claude · run=run-20260717-140205 ▶ plan · claude-opus-4-8 · running… (generating documents; this can take a few minutes) ✓ plan $0.4200 est. gate:docs ok ▶ design · claude-opus-4-8 · running… ✓ design $0.6100 est. gate:docs ok ▶ build · claude-sonnet-5 · running… ✗ build $1.9800 est. gate:tests FAILED ✗ stopped at node 'build': gate 'tests' blocked -> runs/run-20260717-140205

Nothing is lost. The workspace still holds everything plan and design wrote, and the run's fingerprint is recorded. You resume from build — not from zero.

02

Resume from the break — --resume-from

Point Cadora at the node you want to restart at. --resume-from build skips every node upstream of build — trusting their artifacts already in --cwd — then re-runs build itself and everything downstream. First, though, it verifies that trust: the current workspace is checked against the fingerprint of the run being resumed, and only a clean match proceeds.

zsh — cadora run --resume-from build
$ cadora run app.topology.yaml --resume-from build --cwd ./workspace ↩ resume: skipping plan, design · running from 'build' ↳ workspace verified against run-20260717-140205 — no drift (37 files) cadora · executor=claude · run=run-20260717-163150 ↩ skip 'plan' — artifacts trusted in the workspace ↩ skip 'design' — artifacts trusted in the workspace ▶ build · claude-sonnet-5 · running… ✓ build $2.0700 est. gate:tests ok ▶ test · claude-sonnet-5 · running… ✓ test $0.4400 est. gate:tests ok ✓ run complete -> runs/run-20260717-163150

Need finer control than a resume point? --skip plan,design names the trusted nodes directly — the same "trust their existing workspace artifacts" contract, one node at a time.

03

Trust, but verify — provenance refuses drift

Resuming trusts the skipped nodes' artifacts. So Cadora makes that trust checked, not silent: if the workspace drifted since the run you're resuming — a file edited, something added or cleaned — it refuses, rather than certify gates over source that never passed the earlier stages. The refusal names exactly what moved.

zsh — resume refused
$ cadora run app.topology.yaml --resume-from build --cwd ./workspace ↩ resume: skipping plan, design · running from 'build' ✗ resume refused: workspace drifted since run-20260717-140205 (2 modified, 0 removed, 1 added). modified: aidlc-docs/inception/application-design/application-design.md modified: src/orders/service.py added: src/orders/scratch.py The skipped nodes' artifacts no longer match the run you are resuming, so the gates would certify source that never passed the earlier stages. Re-run from scratch, or pass --allow-drift to resume anyway (the drift is recorded in the evidence pack).

You can override — deliberately. --allow-drift proceeds, and the drift is recorded in the evidence pack either way, so the resume stays honest about the ground it stood on.

zsh — resume --allow-drift
$ cadora run app.topology.yaml --resume-from build --cwd ./workspace --allow-drift ↩ resume: skipping plan, design · running from 'build' ⚠ workspace DRIFTED since run-20260717-140205 (2 modified, 0 removed, 1 added) — proceeding under --allow-drift modified: aidlc-docs/inception/application-design/application-design.md modified: src/orders/service.py added: src/orders/scratch.py this run's evidence will record that it resumed against a drifted workspace cadora · executor=claude · run=run-20260717-164410 ↩ skip 'plan' — artifacts trusted in the workspace ↩ skip 'design' — artifacts trusted in the workspace ▶ build · claude-sonnet-5 · running…

Default is refuse. The drifted-workspace path is opt-in and self-documenting — the evidence pack shows the resume ran against a workspace that no longer matched its baseline.

04

Let a bounded loop clear the gate — --remediate

Instead of stopping at the red gate, --remediate 2 feeds the failing gate's own output into a fresh, constrained session and re-runs — up to two attempts. Attempt 1's fix doesn't hold; attempt 2 clears it. Crucially, "cleared" is decided by re-running the same gate:tests check — not by the agent reporting success. The node completes green, tagged with its attempt count.

zsh — cadora run --remediate 2
$ cadora run app.topology.yaml --cwd ./workspace --remediate 2 ▶ build · claude-sonnet-5 · running… ✓ build $3.4100 est. gate:tests ok remediate:completed-green x2
attempt trail — archived under build/remediation/
attempt 1fresh session · re-ran gate:testsFAILED
attempt 2fresh session · re-ran gate:testsPASSED
Green = the same ShellGate.check re-passing. A false claim of success from the agent never substitutes for the gate — the verdict comes from re-running the deterministic check, and integrity is re-scanned too when enforced.

Each attempt runs in its own fresh, constrained session told not to weaken, skip, or bypass the gate. A gate that passes having run zero tests is a vacuous pass, not a fix — and it doesn't count as green.

05

The bounds hold honest

Remediation is bounded, and a bound hit never becomes a fabricated pass. Exhaust the attempts and the run stops honest-blocked — the full attempt trail preserved, the gate still red. Add --remediate-max-cost 5.00 and it stops before the next attempt would cross the ceiling, rather than over-spending toward a fix that may not come.

zsh — attempts exhausted
$ cadora run app.topology.yaml --cwd ./workspace --remediate 2 ▶ build · claude-sonnet-5 · running… ✗ build $5.8700 est. gate:tests FAILED remediate:honest-blocked x2 ✗ stopped at node 'build': gate 'tests' blocked — remediation exhausted after 2 attempt(s) (max_attempts) -> runs/run-20260717-171904
zsh — cost ceiling reached
$ cadora run app.topology.yaml --cwd ./workspace --remediate 3 --remediate-max-cost 5.00 ▶ build · claude-sonnet-5 · running… ✗ build $7.1000 est. gate:tests FAILED remediate:honest-blocked x2 ✗ stopped at node 'build': gate 'tests' blocked — remediation exhausted after 2 attempt(s) (cost_ceiling) -> runs/run-20260717-172530
A third attempt was allowed by --remediate 3, but the attempts so far already summed past $5.00 — so Cadora stopped honest-blocked rather than spend more chasing a green that isn't guaranteed.

Missing tooling is never handed to the loop: a blocked_prerequisite gate is not agent-repairable, so remediation doesn't engage — it stays truthfully blocked.

06

The resumed run, on the dashboard

The run-detail view makes the two kinds of node unmistakable. Skipped nodes are badged trusted — dashed, muted, not re-run this run. The resume point and everything below are fresh — re-executed, gated green. A banner marks where the run picked up and what it verified against.

localhost:8768/runs/run-20260717-163150
run-20260717-163150app.topology.yaml · resumed from 'build' · verified vs run-20260717-140205 · no drift
resumed
plan
trustednot re-run
design
trustednot re-run
build
gate passedre-run
test
gate passedre-run
trusted nodes contributed no new agent cost — their artifacts came from the earlier run and were provenance-checked before the resume ran. Only build and test re-executed and re-gated.

The terminal frames above reproduce real cadora run --resume-from / --skip / --allow-drift / --remediate output, rendered as editable HTML rather than raster captures — lift them into Figma or iterate directly. This is the recovery half of an audit-grade conductor: an interrupted run resumes on verified trust, and a red gate gets a bounded repair whose only definition of green is the real gate passing again — with the honest-blocked trail kept when it doesn't.