Skip to content

Commit f560c92

Browse files
committed
board: classid split-order is a single flippable definition (operator directive)
When the substrate impl starts, route all classid field extraction through ONE split-order abstraction ((before)::Domain:appid::(after)) so the deferred human-readable reorder (0x1000_0701 <-> 0x07:01::1000) is a one-place flag flip with a single round-trip probe, not an N-site migration that can desync (I-LEGACY-API-FEATURE-GATED trap). Flag defaults to the current stored order. Board: EPIPHANIES E-CLASSID-SPLIT-ORDER-IS-A-FLIP. Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 875b561 commit f560c92

1 file changed

Lines changed: 37 additions & 0 deletions

File tree

.claude/board/EPIPHANIES.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,40 @@
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+
138
## 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
239

340
**Status:** LOCK / DEFERRED-BY-DESIGN (operator, 2026-07-01). Both facts below

0 commit comments

Comments
 (0)