One envelope for every claim
Operation, verification, privacy, credit and release results were each becoming their own incompatible JSON. v1.0 stopped adding certificate kinds and unified the container first.
Why unify before extending
A certificate has to be machine-verifiable, carry its provenance, be digestible, chain to its predecessor, hold claims from different domains, survive migration from older data, and be quotable by the release gate. Fifteen certificate types now share one envelope, and the type is not decoration: each one carries a minimum set of required claims. A commit certificate must carry authorized and committed; a privacy certificate must carry epsilon, delta and budget_valid.
Chaining
- action
- verification
- boundary
- commit
Each certificate references its predecessor's digest, so a legal commit path is a chain. Alter any claim and that certificate's own digest no longer matches, and every subsequent previous_digest stops resolving. Tampering is detected at the first altered link, not at the end.
Canonical form and digest
Certificates serialize with fixed key ordering and compact separators, so the digest is a function of content rather than of formatting. The signature and the external digest field are excluded from the payload being hashed — otherwise the digest would have to contain itself.
What a chain cannot prove
This is the part most often skipped. A digest chain proves internal consistency — that these records were not altered relative to each other. It says nothing about who issued them. Establishing issuer identity needs a signature, a trusted key registry, a nonce, an expiry, and ultimately an external certificate authority, a hardware root, or institutional trust.
v1.0's release attestation uses an ephemeral local Ed25519 key. It proves consistency within one packaging run. It is not, and is not presented as, external endorsement.
The fifteen types
- action
- boundary
- verification
- commit
- rollback
- replay
- privacy
- credit
- drift
- tool-effect
- attestation
- budget
- migration
- compatibility
- release
Evidence by reference
A certificate does not embed large evidence. It binds it: an evidence reference carries an id, a kind, a digest, a URI and a media type. The 13,600 migrated v0.9 rows keep their original ledger by digest rather than by copy — the source ledger stays the traceable original.