|
| 1 | +## 2026-07-01 — E-CLASSID-SPLIT-ORDER-IS-A-FLIP — implement the classid field split as a single flippable "split order" (`(before)::Domain:appid::(after)`), so the deferred human-readable reorder is a one-place flag, not a rewrite |
| 2 | + |
| 3 | +**Status:** DIRECTIVE (operator, 2026-07-01: "when you start implementing the |
| 4 | +substrate you make the `(before)::Domain:appid::(after)` a question of split |
| 5 | +order that later you can flip"). Refines `E-CLASSID-HUMANREADABLE-REORDER-DEFERRED` |
| 6 | +— names *how* to build the reorder so it stays a flip, not a migration. |
| 7 | + |
| 8 | +**The directive.** When the classid field extraction is implemented, route ALL |
| 9 | +of it through **one split-order abstraction** — a single source of truth that |
| 10 | +says which byte range is `before`, which is `Domain:appid`, which is `after`. |
| 11 | +Layout template: **`(before) :: Domain:appid :: (after)`**. Every accessor |
| 12 | +(`domain()`, `app_id()`, the V3-prefix check, the ClassView lookup, the codebook |
| 13 | +row mapping) reads through that one definition. Then flipping the stored↔human- |
| 14 | +readable order (`0x1000_0701` ⇄ `0x07:01::1000`) is a **one-place flag flip**, |
| 15 | +not a rewrite scattered across the codebase. |
| 16 | + |
| 17 | +**Why it matters (the trap it avoids).** If field positions are hardcoded at |
| 18 | +each call site, the deferred reorder becomes a risky N-site migration that can |
| 19 | +silently desync (exactly the `I-LEGACY-API-FEATURE-GATED` failure mode — same |
| 20 | +accessor, different bytes under a flag). One split-order definition = the flip is |
| 21 | +atomic, testable with a single round-trip probe (`stored ⇄ human-readable` is |
| 22 | +identity), and the little-endian contract is provably preserved end-to-end. |
| 23 | + |
| 24 | +**Consequences.** |
| 25 | +- Do NOT hardcode classid byte offsets at call sites when the substrate impl |
| 26 | + starts — thread them through the single split-order definition. |
| 27 | +- The flip flag defaults to the CURRENT stored order (`(V3 0x1000)(domain 0x07)(app 01)`); |
| 28 | + the human-readable `0x07:01::1000` is the flipped view, authored later. |
| 29 | +- The reorder arc's acceptance test IS the round-trip: `flip(flip(x)) == x` and |
| 30 | + `decode_stored(x).fields == decode_humanreadable(flip(x)).fields`. |
| 31 | + |
| 32 | +**Cross-ref:** `E-CLASSID-HUMANREADABLE-REORDER-DEFERRED` (the deferral this |
| 33 | +implements); `I-LEGACY-API-FEATURE-GATED` (the same-name-different-bytes trap the |
| 34 | +single-definition avoids); lance-graph `CLAUDE.md` CANON (LE 16-byte key). |
| 35 | + |
| 36 | +--- |
| 37 | + |
1 | 38 | ## 2026-07-01 — E-CLASSID-HUMANREADABLE-REORDER-DEFERRED — the classid field reorder to human-readable `0x07:01::1000` is a DELIBERATE post-V3 step; the little-endian stored form is the contract P1–P5 are built on — HANDS OFF until deliberately triggered |
2 | 39 |
|
3 | 40 | **Status:** LOCK / DEFERRED-BY-DESIGN (operator, 2026-07-01). Both facts below |
|
0 commit comments