Two-layer architecture
A mutable, signed pointer layer resolving names to CIDs, atop an immutable, content-addressed object layer.
- CL-1
- CL-2
- CL-6
Every diagram below is a frozen, verifiable assertion about how chum behaves. Each maps to one or more numbered claims (CL-*) defined at the foot of this page.
The two layers, and the atproto nouns they are built from.
A mutable, signed pointer layer resolving names to CIDs, atop an immutable, content-addressed object layer.
The nouns and their cardinalities: DID, Repo, Collection/Lexicon, PointerRecord, CIDObject.
Who signs what, and where authority comes from.
On a write: a new pointer record is signed by did:key, links the previous CID, is dedup-checked, and committed.
Authority to mutate a name is cryptographic: did:key → public key → signature verification → authorized mutation.
An append-only, hash-linked ledger with a legal lifecycle.
An append-only, hash-linked sequence where each record references the previous record's CID.
The legal lifecycle of a pointer record: draft → signed → committed → superseded / tombstoned.
Verifying reads, and why identical bytes converge on one CID.
Resolve name → pointer → verify signature → verify prev-CID link → fetch bytes by CID → integrity check, with failure branches.
Distinct names/pointers carrying identical bytes converge on a single CID-addressed object.
Proving what a name resolved to, and when.
An auditor walks previous-CID links backward, verifies each signature, and asserts history intact.
One name's resolved-CID history as dated entries, in order.
Where a chum instance sits inside ATProto.
A chum instance inside the wider ATProto ecosystem: PDS, relay, DID resolution, peer repos.