Canonical serialization
The canonical form is JCS (RFC 8785), tagged in every envelope so it stays versionable:grep beats compactness here.
Canonicalization erases the order a mapping was built in, which is what makes block_id a function of
the content and nothing else:
Values a payload refuses
JCS defines float serialization through ECMAScript rules that are hard to reproduce identically across languages, and integers outside the IEEE-754 safe range lose precision in any double-backed JSON parser. Either divergence would mean two conforming clients computing differentblock_id values for the same
knowledge — which is the one failure the protocol cannot tolerate.
If you need a number with a fraction, store it as a string or as a scaled integer and say which in the
payload.
Three levels of hashes are three types
None is astr, and none is interchangeable with another.
OciDigest says the bytes
differ, the MerkleRoot says the knowledge does not.
Hashing primitives
Timestamps
Actor identifiers
A provenance record names who performed an operation, and a provenance record is a block: the identifier enters the payload, the payload enters the envelope, and the envelope is whatblock_id is computed over.
So an identifier two parties spell differently is two names for one fact — the same silent divergence
canonical serialization exists to prevent, arriving through a field nobody had canonicalized.
Two forms, and no third:
The namespace carries whoever made or vouches for the name, so nothing repeats it as a separate field. No
scheme prefix is stored:
mailto: is ceremony around a value people already write correctly, and a URL
invites exactly the questions a canonical form must leave closed — a trailing slash, a default port, a
percent-encoded octet. An implementation exporting to a format that requires URIs derives one at that
boundary.
The check is asymmetric on purpose, and the second half is the easy one to lose:
Actor, so a validator on the type would make every
brain that predates this rule unreadable — punishing readers for a writer’s old habit. Enforcement
attaches where an identifier is being chosen: opening a brain, and the request models. What is already
published still reads.