How the verifiers work
Four rules every one of them follows
- No CAIN code. One file, Python standard library plus
cryptographyfor Ed25519. You can read it in an afternoon. We checked the import lines of all three on 2026-11-02. - No network. They read files you give them and nothing else.
- You pin the keys. Each takes a trust file (or anchors file) of public keys. The verdict is only as good as the channel you got those keys from, so get them from more than one place.
- Re-derive, never copy. The verifier recomputes the verdict from signed records. The execution-truth verifier,
for example, ignores the enforcer's own stated verdict (
enforcer_stated) and derives its own from the approver-signed and sensor-signed records.
Verdicts and exit codes
| Verdict | Meaning | Exit |
|---|---|---|
| VERIFIED | Every check holds against the pinned keys | 0 |
| FAILED | Evidence contradicts the claim, is not intact, or claims more than it shows | non-zero |
| INCOMPLETE | Nothing contradicts the claim, but required evidence is missing | non-zero |
| UNSUPPORTED | The evidence needs a method this verifier does not have, or an unknown schema | non-zero |
| UNAVAILABLE | Nothing to judge (for example the action was refused before it ran) | non-zero |
Only VERIFIED exits 0. Anything unknown, missing or malformed ends non-zero: UNKNOWN never becomes a pass.
Each verifier says what it did not check
The mission-journal verifier prints checks_performed, checks_not_performed,
checks_waived and does_not_establish. The Launchpad verifier labels the producer's paging window
"not verified" in its own output. A verifier that hides its blind spots is a dashboard with extra steps.
FIRME AI CORPORATION · CAIN-42 is a Byzantine trust fabric. Numbers marked "our own check" were run by us, not by an independent party. Nothing on these pages is a certification.