Skip to content

Commit 4ea6ac9

Browse files
committed
docs(canon): lock minimal SoA node — classid/family zero-fallback ladder, 12+4 edges
1 parent 0c9eab3 commit 4ea6ac9

1 file changed

Lines changed: 43 additions & 0 deletions

File tree

CLAUDE.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1237,3 +1237,46 @@ All findings in `.claude/knowledge/session_autocomplete_cache.md`.
12371237

12381238
### Benchmark
12391239
611M 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

Comments
 (0)