Cadora · compare & evaluate
A run finishing green tells you one path worked. It doesn't tell you what the same spec costs on a different engine, whether it drifted since yesterday, or whether it holds the invariants you actually care about. Two post-run tools answer that: cadora compare diffs two runs, cadora eval scores one — and both are pure functions over the archived manifests. Reproducible, cheap, no LLM, no network.
You ran one topology twice: once through Claude, once through Codex. Both landed in the archive. Before trusting either, put them next to each other. Every node cleared on both runs (4/4) — the run-level ok=False is the build-test gate, identical on both — so what actually differs here is the price.
Codex and GLM figures are priced from the rate table (est.); Claude figures are backend-reported. The comparison lines them up on one ruler either way.
One command turns the two manifests into a per-node diff: outcome and cost, A against B, plus the run totals and the cost delta. No model runs — it's a pure function over two manifests. The story lands in the last four lines: the same spec, the same outcome on every node, and Codex about $9 cheaper for it.
Every node reads ✓ on both, yet each run's ok=False — that's the build-test gate, not a failed node. Compare shows both the node outcome and the price, so you can see the outcome held identical while the cost did not. Add --json for the same diff structured for a script.
Point compare at the same backend on two different days and it becomes a regression detector. Here last night's run was clean; tonight's construction node flipped to ✗ and cost more doing it. The diff flags the outcome change and the +$0.45 drift in one place — no dashboards to scrub, no eyeballing two logs.
A node present in only one run reads · <node>: A only (or B only); when the topologies don't match at all, the diff opens with ⚠ different topologies so you never compare apples to oranges by accident.
Where compare needs two runs, eval scores one against the AI-DLC / quality invariants — completion, per-node success, gate verdicts, integrity findings, cost attribution, artifact presence — again with no LLM call. Four of the checks are CRITICAL and gate the verdict; two are non-critical and only warn. Below, artifacts are missing and three costs are price-table estimates — both surface amber — but the run is PASS because every critical check holds.
The two amber rows are the non-critical layer: cost_attributed and aidlc_artifacts carry (warn) and never turn the verdict red. Only the four CRITICAL checks — run_ok, all_nodes_ok, gates_passed, integrity_clean — decide PASS or FAIL. If any one of those had failed, the bottom line would read → FAIL and the command would exit non-zero.
The same score as structured data: a checks array of name / passed / detail, then passed, total, score, and the verdict. The four green names below are the CRITICAL set — the only ones that gate verdict — while cost_attributed and aidlc_artifacts ride along as passed:false-tolerant warnings. In CI you gate on the process exit code: 0 when verdict is pass, 1 otherwise.
Rendered here with the objects on one line each for reading; the real --json is standard indent=2. There is no critical field — the CRITICAL set (run_ok, all_nodes_ok, gates_passed, integrity_clean) is defined by name in the tool and is what verdict gates on.
Neither tool asks a model anything. Both read the archived manifests and compute — a diff, a checklist — and nothing else. So a comparison or a score is reproducible (run it a hundred times, get the same bytes), offline (no network), and free (no tokens). That's what makes the number admissible: whoever doubts it can recompute it themselves and land on the same answer.
The terminal frames above reproduce real cadora compare / eval output — the cross-backend diff and the eval checklist are captured verbatim; the over-time regression uses the same output shape on illustrative run ids. Lift them into Figma or iterate directly. This is the post-run half of Cadora's audit story: once the run is archived, weighing two of them or scoring one against the invariants costs nothing and comes out the same for everyone.