The verification-gate journey in Cadora: an agent reports done, a deterministic gate re-runs the real build and tests, a toolchain-integrity scan checks the tools are genuine, and the node earns a badge — green means proven, red means blocked and honest — with the whole verdict archived.

Cadora · verification gates

Proving what the agent built

Cadora drives a coding agent, then refuses to take its word for the result. After a node runs, a deterministic gate re-runs the real command and a toolchain-integrity scan checks the tools weren't faked. This is the journey from "the agent says done" to a verdict you can trust.

Surface · dashboard + CLIRole · operator / auditorCaptured · fixture run, aidlc-hitl
01

The agent says "done"

The construction node finishes and the agent reports success — tests pass, lint clean, build green. Sometimes that's true. But the agent is narrating its own outcome, and a vendor's tool grading its own agent is the fox auditing the henhouse. Nothing is proven yet.

localhost:8768/runs/pr1-verify
pr1-verifyfixture · aidlc-hitl
running
construction · engineer
agent reported: "tests pass"

The agent's own ok never decides an outcome. Green has to be a fact Cadora observed — not a sentence the model emitted.

02

The gate runs the real command

Cadora runs the gate itself — the same command a CI job would: ruff check . && pytest -q. Not a summary, the actual process, in the node's workspace. A zero exit with real tests is a pass; a non-zero exit blocks the run.

gate · build-test

$ ruff check . && pytest -q

All checks passed!

12 passed in 1.84s

✓ construction · gate:build-test passed

The gate is fail-closed: ambiguity resolves against the agent. There is no "agent says it passed" path — only the process return code and what Cadora reads out of the output.

03

Is the toolchain even real?

A gate can be gamed. Under an offline sandbox an agent can stand up a local script named pytest that always exits 0, or leave functions hollow — raise NotImplementedError — that weak tests skip over. So a separate deterministic scan reads the workspace for counterfeit or substituted tooling. It runs alongside the gate.

cadora integrity

$ cadora integrity build-claude

✗ blocking shadowed-toolchain: pytest

repository-root directory shadows the real 'pytest' package/tool

✗ blocking stub-implementation: adjudicator.py

3 function(s) have a stub body (pass / ... / raise NotImplementedError)

2 blocking, 0 warning finding(s) in build-claude

Integrity is deterministic too — it catches the dishonesty the shell can't express (a fake pytest, hollow code that tests pass over) without ever asking an LLM to judge.

04

Green means proven, red means blocked-and-honest

Two nodes, side by side. One ran real tests against a real toolchain: green, and here green is a fact. The other exited 0 but its suite ran zero tests — a vacuous pass. The command ran; it verified nothing. Cadora refuses to green it.

gate · build-test — two outcomes

$ ruff check . && pytest -q # genuine run

12 passed in 1.84s

✓ construction · gate:build-test passed

$ pytest -q # exited 0, but…

no tests ran in 0.01s

✗ construction · gate:build-test vacuous

A green that certifies a suite which tested nothing is exactly the false-green the gate exists to prevent. Substance over a green exit — red isn't failure theatre, it's an honest "not proven yet."

05

The verdict on the node

The outcome lands as a badge on the node. gate passed in green; gate vacuous or gate blocked_prerequisite in amber — it ran, but proved nothing; integrity clean or flagged. When a node is blocked, a failure panel shows exactly why.

localhost:8768/runs/pr1-verify
construction
gate passedclean
construction
gate vacuousflagged
✗ gate 'build-test' blocked
gate vacuous output
All checks passed!
no tests ran in 0.01s
warning: No Python files found under the given path(s)
integrity findings
  • stub-implementation 3 function(s) have a stub body (pass / ... / raise NotImplementedError) — the code looks implemented but isn't; tests that pass over stubs verify nothing

Amber is reserved: it means ran, but proved nothing. The failure panel is the gate's own output, verbatim — not a paraphrase — so the reason is inspectable, not asserted.

06

The proof is kept

Every gate outcome is archived whole — the status, the command's output, the exit code, what tooling was provisioned, and any integrity findings. A run's "green" isn't a claim you must trust; it's a record you can open later and read. That is what audit-grade means: not that the agent said it worked, but that Cadora proved it — and kept the proof.

localhost:8768/runs/pr1-verify
pr1-verifyfixture · aidlc-hitl · 3 nodes
completed
requirements
review approve
design
review approve
construction
gate passedclean

The screens above reproduce the live Cadora dashboard and CLI exactly — rendered as editable HTML rather than raster captures, so they can be lifted into Figma or iterated directly. Every gate is deterministic, fail-closed, and archived: green means proven, red means honestly blocked, and the proof outlives the run.