Glossary
July 16, 2026 · View on GitHub
For a developer without a cryptography background. No math, just what each word means here and why it matters.
The 30-second picture
proofbundle takes an eval result (a number your model scored) and wraps it in a receipt — a
single file that anyone can check offline. Checking the receipt answers one question: were these
exact bytes signed by this key, and unchanged since? If yes, verify prints => OK. If anything
was altered, it prints => FAILED. That's it. It does not tell you the number is true — only
that a specific party stands behind it and nobody tampered with it afterward.
Five things, in order
- You run an eval (with inspect_ai, lm-eval, promptfoo, or pytest) → you get a score.
- An adapter turns that score into a claim — a small, tidy JSON statement: "suite X, metric Y, threshold met, over N samples."
- Emit signs the claim with a private key and anchors it in a Merkle tree → a receipt.
- You share the receipt (one file). It can hide the model/dataset behind commitments and still prove the threshold.
- Anyone verifies it offline →
OKorFAILED.
Terms
- Receipt / bundle — the one portable JSON file. The thing you share and verify.
- Sign / signature (Ed25519) — a private key produces a signature over the bytes; the matching
public key proves who signed and that the bytes are unchanged. proofbundle never invents its own
crypto — it uses the
cryptographylibrary. - Verify — check the signature (and the other pieces) with no network. Output:
OK/FAILED. - Merkle tree / inclusion proof (RFC 6962) — a way to prove one item belongs to a set using a short chain of hashes. The same math transparency logs (Sigstore, Certificate Transparency) use. Here it anchors the payload, and (per-sample mode) commits to every individual sample.
- Commitment (salted) — a hash of a secret value (the model or dataset id) plus random salt. It proves the threshold was met without revealing which model. You can open it later to a specific auditor.
- Assurance level — a signed label the issuer declares:
self_attested(I ran it),third_party,reproduced,enclave_attested. It records who claims what level — it is not an accredited stamp.show-evalwarns on the weakest case. - SD-JWT / selective disclosure — a credential format that lets you reveal some fields and hide others. Here: prove "passed ≥ threshold" while withholding the exact score.
- Key Binding (KB-JWT) — proof that the party presenting a credential controls the key it was bound to — stops someone replaying a credential they merely copied.
- Witness / checkpoint / cosignature (C2SP) — independent parties co-sign the Merkle root, so a log operator can't show different views to different people. Optional; can be post-quantum (ML-DSA-44).
- Status list — an offline revocation snapshot: a signed list saying which receipts are still valid. (v1.9.1 flags when the list is signed by the same key as the receipt — weak assurance.)
- Per-sample audit — the receipt commits to every sample; an auditor picks random samples (with a fresh nonce or a public beacon so the producer can't cheat) and the producer must open them — reveal them and prove they're in the committed set. Catches doctored samples.
- Pre-registration (
prereg) — hashing your eval plan before you run, so you can't later claim the plan matched a lucky result. The hash goes in the signed receipt. - Trust anchor — a key or value you must supply/pin for a check to mean anything (e.g. "I know this is really the lab's key"). See TRUST_ANCHORS.md.
- Lineage / relationship (
relation/v0.1, EXPERIMENTAL) — a receipt never changes; when a result is corrected, re-run, retracted, or renewed, the NEW receipt carries a typed, signed relationship edge pointing at the predecessor's content root (supersedes,revises,corrects,retracts,renews,derivedFrom,amends).verifyreports it as alineagestate (VERIFIED / DECLARED_UNRESOLVED / FAIL / NOT_EVALUATED) — replacement becomes visible instead of silent. It proves the issuer declared the derivation over exact bytes; never that the successor is better or true, and it never changes the crypto verdict. Attach predecessors offline with--with-related. relation_signer/require_relation_target(relying-party policy, 3.4.0) — two optional pins in a trust policy'srelationssection.relation_signersays WHICH issuer keys may declare a replacement (asame-keyrule or a pinned set);require_relation_targetsays WHICH parent an edge must resolve to (rejecting a valid-but-wrong "decoy" parent). Both are your policy: a passing check proves set membership / the named parent under your pins — not that anyone is "really" authorized. Enforced identically on the decision and outcome verify paths.
What => OK means (and doesn't)
OK = the signature is valid, the payload is anchored, and any optional pieces (SD-JWT, witnesses,
status, sample openings) checked out — given the keys you supplied. It does not mean the
eval was honest, well-designed, or the only run performed. Those need pre-registration, independent
reproduction, or a trusted execution environment. proofbundle makes a claim attributable and
tamper-evident; it never claims to make it true.