The contract in CANONICAL form — key-sorted, so two consoles that declare the same contract
serialise to the same bytes.
Two readers need exactly this. The breaking-change ratchet diffs one version against another
and a re-ordered key would read as a whole-file change with nothing in it; and the contract
FINGERPRINT (2026-09-15-no-stored-derivations.md §4) is a hash of these bytes, so a hash that
moved because a row registered in a different order would be a version that changed when
nothing did.
JSON object key order is insertion order, which is the registry's registration order — a fact
about the console's boot, not about its contract. Sorting is what removes it.
The contract in CANONICAL form — key-sorted, so two consoles that declare the same contract serialise to the same bytes.
Two readers need exactly this. The breaking-change ratchet diffs one version against another and a re-ordered key would read as a whole-file change with nothing in it; and the contract FINGERPRINT (
2026-09-15-no-stored-derivations.md§4) is a hash of these bytes, so a hash that moved because a row registered in a different order would be a version that changed when nothing did.JSON object key order is insertion order, which is the registry's registration order — a fact about the console's boot, not about its contract. Sorting is what removes it.