@@ -1237,3 +1237,46 @@ All findings in `.claude/knowledge/session_autocomplete_cache.md`.
12371237
12381238### Benchmark
12391239611M SPO lookups/sec. 17K tokens/sec. 388 KB RAM. 100% information preservation.
1240+
1241+
1242+ ## CANON — Minimal SoA node + zero-fallback ladder (locked 2026-06-13)
1243+
1244+ > Operator-locked this session. Append-only. Wrapper ` NodeGuid ` (#480 ) is audited
1245+ > against THIS, never the reverse. No RFC-9562 ceremony in the hot key.
1246+
1247+ ** Node = 4096 bit = 512 byte:** ` key(16) | edges(16) | value(480) ` .
1248+
1249+ ** Key (16 byte, little-endian):**
1250+ ```
1251+ 0..4 classid (u32) 8 hex — prefix-routable; default 0x0000_0000
1252+ 4..6 HEEL (u16) ┐
1253+ 6..8 HIP (u16) ├ 3 cascade tiers (HHTL path)
1254+ 8..10 TWIG (u16) ┘
1255+ 10..13 family (u24) ┐ trailing 6 bytes = basin-local key
1256+ 13..16 identity (u24) ┘ (masked load after the trie binds the prefix)
1257+ ```
1258+ ` local_key() ` = bytes 10..16 (family ++ identity), the only discriminator once
1259+ the prefix is resolved.
1260+
1261+ ** Edge block (16 byte):** 12 in-family + 4 out-of-family, one byte per slot.
1262+ Canonical, NOT mandatory — always reserved (zeroed when unused), never shrunk; a
1263+ class opting out of edges is resolved via ` classid → ClassView ` , never by a stride
1264+ change.
1265+
1266+ ** Zero-fallback ladder (monotonic — zero = fall through to the broader default):**
1267+ - ` classid == 0x0000_0000 ` → default class, no prefix routing (dormant)
1268+ - ` family == 0x00_0000 ` → default basin, no neighborhood grouping (dormant)
1269+ - ⇒ while both are zero, ` identity ` (24 bit) ALONE discriminates — the bootstrap
1270+ address. 16.7M identities per default basin; mint a non-zero family to expand.
1271+
1272+ ** RESERVE, DON'T RECLAIM:** a zero tier means * not consulted* , never * compacted
1273+ away* . classid(4B) and family(3B) keep fixed offsets so a non-zero mint later
1274+ wakes routing/basin binding with ZERO ` ENVELOPE_LAYOUT_VERSION ` change. Mint path
1275+ must ` debug_assert ` identity uniqueness while in the default basin.
1276+
1277+ ** No UUID ceremony:** no version nibble, no variant bits, no namespace/kind. The
1278+ dash-groups are the only semantics; the tail is plain ` family|identity ` .
1279+
1280+ Reference impl: ` canonical_node.rs ` (` NodeGuid ` / ` EdgeBlock ` / ` NodeRow ` , with
1281+ ` const _ ` size asserts at 16/16/512 and ` is_default_class ` / ` is_unbasined ` /
1282+ ` is_bootstrap_address ` guards).
0 commit comments