Offline evidence verification¶
rigor verify is the stable free verification boundary for signed
RigorFoundry evidence. It reads only caller-supplied local files. It contains
no network client, service discovery, telemetry, fleet authority, or paid
service dependency.
rigor verify \
--bundle evidence-bundle.json \
--trust-policy trust-policy.json \
--at 2026-07-20T12:00:00Z \
--output verification-result.json
--at is mandatory and must be UTC. An explicit evaluation time makes expiry
and revocation results replayable instead of depending on an ambient clock.
Without --output, the result is written to stdout. Output creation is
exclusive and never overwrites an existing path.
The command returns:
0only when every bundle entry isverified;1for a parseable result containinginvalid,stale, orunavailableevidence;2for malformed, unsafe, oversized, or unsupported input.
Caller-selected trust¶
The trust policy is a separate input, not part of the untrusted evidence
bundle. Replacing the bundle therefore cannot silently replace its trusted
keys. Policy schema 1.0 binds each unique Ed25519 key and public-key digest to
valid_from, valid_until, and an optional revoked_at instant. Duplicate key
IDs and public-key aliases are rejected.
Verification distinguishes:
unknown,not-yet-valid, andrevokedkeys as invalid;- an expired key as stale evidence;
- a key that was not active at the evidence signing time as invalid.
Report, review, and model-alias signatures bind a signing time. The existing StandardPack signature has no signing-time field, so pack verification proves the native signature under a key active at the explicit evaluation time; it does not reconstruct historical key status.
Bundle records¶
Bundle schema 1.0 contains a sorted, unique set of evidence entries. Every available entry embeds its strict production protocol document and exact digest. Every unavailable entry preserves the expected digest and a non-empty reason without inventing document bytes.
Supported kinds are:
| Kind | Verification contract |
|---|---|
audit-report |
Reparse the complete report and every nested digest, then verify a time-bounded signature in rigor-foundry.audit-report.v1. |
review |
Reparse the review and reviewer attestation, bind the review digest and decision, and verify the existing reviewer-attestation domain and expiry. |
standard-pack |
Reparse the pack, controls, native PackSignature, payload digest, and the existing standard-pack domain. |
model-aliases |
Reparse provider, exact-model, family, operator, and run identities; recompute transitive alias collapse; then verify rigor-foundry.model-aliases.v1. |
The review decision mapping is fixed: valid to pass, invalid to fail,
accepted-boundary to accepted-risk, and needs-evidence to
needs-evidence. Contradictory signed decisions are invalid.
Report and model-alias envelopes sign a canonical payload digest containing the schema, evidence kind, Ed25519 algorithm, protocol domain, key ID, exact artifact digest, signing time, and expiry. A signature from another domain cannot be relabelled or replayed.
The aggregate report is itself content-addressed. It binds the evaluation
time, selected trust-policy digest, input bundle digest, ordered per-evidence
results, bounded details, aggregate status, and report digest. Status
precedence is invalid, stale, unavailable, then verified; partial
evidence can never be upgraded.
Input boundary¶
Bundle and trust-policy inputs must be single-link regular files opened with no-follow semantics. Symbolic links, hard links, concurrent identity changes, invalid UTF-8 or JSON, and documents above 16 MiB fail closed. This is a local file-verification boundary, not a repository mutation command.
Assurance boundary¶
A verified result proves only that the supplied bytes satisfy the declared schemas, digests, signatures, key lifecycle, expiry, review binding, and alias relations under the caller-selected trust policy. It does not prove:
- that a report is current for a live repository or that its candidates are defect verdicts;
- that the selected trust policy is authoritative for another organisation;
- model independence beyond the explicit correlation declarations;
- remediation success, fleet admission, regulatory conformity, or universal software safety.
Assurance campaigns, enforcement, fleet views, and remediation authority stay outside this free verification path.