Skip to content

Commit b4ea359

Browse files
committed
docs(board): OQ-MBX-7..14 — #418 follow-up findings catalogue
Parallel-session FINDINGS/INPUT review of PR #418's `bindspace-singleton-to-mailbox-soa-v1` plan. Standalone catalogue at `.claude/board/oq-catalog-mbx.md`, mirroring `sprint-log-13/oq-catalog.md` shape; numbering continues the plan's §8 (OQ-1..4) into OQ-MBX-7..14. Each entry is framed as a question for the owning sessions (plan-author session and D-MBX-1..6 worker sessions), with three valid resolutions (covered-elsewhere / real-gap-queue-as-D-MBX-7+ / wrong-framing-because). Survey gate run before authorship: open-PR overlap clean (only #261 draft), prior-art grep per OQ cited inline. Highest-value finding is OQ-MBX-8 — `crates/cognitive-shader-driver/REFACTOR_NOTES.md:129` states the disk-write path is unbuilt and `driver.rs:458` records the in-RAM top-k row, so plan §2.5's "`persisted_row` is a pointer to the same SoA row" is forward-looking; row-identity semantics under Lance versioning/compaction need to be pinned before D-MBX-4 picks a type. Out of scope (deferred): Libet wall-clock budget — already explicitly rejected by `.claude/surreal/cognitive-substrate.md:49-51`; and cross-server baton replication. TD-RESONANCEDTO-DUP-1 severity re-rate closed before authorship (verified P3 is correct; separate modules, no crate-root collision). Docs only; no source touched, no plan-doc edited, no STATUS_BOARD modification. https://claude.ai/code/session_018FqA8TfgRBHy8zF92kx4TW
1 parent 5fd0034 commit b4ea359

1 file changed

Lines changed: 304 additions & 0 deletions

File tree

.claude/board/oq-catalog-mbx.md

Lines changed: 304 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,304 @@
1+
# OQ Catalogue — `bindspace-singleton-to-mailbox-soa-v1` follow-up (PR #418)
2+
3+
**Status:** FINDINGS / INPUT — parallel-session review of PR #418's plan
4+
(`.claude/plans/bindspace-singleton-to-mailbox-soa-v1.md`) and supporting board
5+
entries (`E-MAILBOX-IS-BINDSPACE`, `E-RUBICON-RACTOR`). Each entry is a
6+
**question** for the owning sessions (the plan-author session for plan-§ updates;
7+
the D-MBX-1..6 worker sessions for impl detail); answers route via this file or
8+
the relevant board entry. **No code is proposed and no plan-doc is edited by this
9+
PR.**
10+
11+
**Authored:** 2026-05-27, branch `claude/418-followup-findings`. Survey gate run
12+
before authorship: open-PR overlap (clean — only #261 draft blackboard);
13+
prior-art grep across `origin/main` for each candidate question (results
14+
cited inline below); **Libet wall-clock budget framing explicitly rejected from
15+
scope** because `.claude/surreal/cognitive-substrate.md:49-51` already rules
16+
*"The numbers are operational, not Libet's 550/200 ms… Keep the phase structure;
17+
reject the neuro-numerology."*
18+
19+
**Convention:** Mirrors `.claude/board/sprint-log-13/oq-catalog.md` shape.
20+
`OQ-MBX-N` numbering continues the plan's own §8 (`OQ-1..4` inline) so that
21+
plan-§8 and this file form one logical catalogue. Three valid resolutions per
22+
entry, each useful as calibration: **(a)** "covered in `$foo.md` / `$session_id`"
23+
→ close & cross-ref; **(b)** "real gap → queue as `D-MBX-7+` / plan §X update";
24+
**(c)** "wrong framing because `$reason`" → close with the reason.
25+
26+
**Out of scope (deferred to separate proposals):**
27+
- Libet wall-clock budget — contradicts `.claude/surreal/cognitive-substrate.md:49-51`.
28+
- Cross-server baton replication — additive design, separate conversation
29+
(the existing `.claude/plans/multi-server-cognition-expansion-v1.md` is the
30+
starting point).
31+
32+
---
33+
34+
## Index
35+
36+
| # | Topic | Severity | Owner / Blocks |
37+
|---|---|---|---|
38+
| `OQ-MBX-7` | `#[repr(C)]` byte-pin on `MailboxSoA<N>` itself? | P0 | plan §2 / D-MBX-1 |
39+
| `OQ-MBX-8` | `persisted_row: u32` semantics under Lance versioning / compaction | P0 | plan §2.5 / D-MBX-4 |
40+
| `OQ-MBX-9` | `ThinkingStyleI4_32D` placement in `MailboxSoA` | P1 | plan §3 / D-MBX-1 |
41+
| `OQ-MBX-10` | Sea-star concurrency model post-S3 (`Send`, container, access) | P1 | plan §6 / D-MBX-3 |
42+
| `OQ-MBX-11` | Mailbox-level eviction at the 64k–256k thought ceiling | P1 | plan §2.7 / D-MBX-3 |
43+
| `OQ-MBX-12` | S1 dual-path discipline + field-isolation-matrix tests | P1 | plan §6 / D-MBX-1..2 |
44+
| `OQ-MBX-13` | BE-endianness policy for the LE contract | P2 | plan §2.5 |
45+
| `OQ-MBX-14` | Baton `u16` ↔ HHTL cascade-address encoding relationship? | P3 | PP-15 audit input |
46+
47+
---
48+
49+
## OQ-MBX-7 — `#[repr(C)]` byte-pin on `MailboxSoA<N>` itself?
50+
51+
**Question.** Plan §2.5 asserts THE little-endian contract is "one SoA layout
52+
end-to-end, same bytes hot→disk, no re-encode at any boundary." How is the byte
53+
layout of `MailboxSoA<N>` *enforced* — via `#[repr(C)]` on the container plus
54+
per-column type pins, via inheritance from `SoaContainerHeader<N>`-style
55+
descriptors, or via some other mechanism the plan doesn't surface?
56+
57+
**Why it matters.** The "same bytes hot→disk" claim is a hard invariant: any
58+
field reordering, padding shift, or alignment surprise breaks `persisted_row`
59+
(OQ-MBX-8) and the GoBD tombstone-witness audit trail. Today the pattern is
60+
established for the *primitives*`SoaContainerHeader<N>` ships as LE
61+
`#[repr(C)]` in ndarray (commit `547824bc`, per `.claude/board/AGENT_LOG.md:186`),
62+
`RungState` is a 16-B `#[repr(C)]` Pod
63+
(`.claude/board/INTEGRATION_PLANS.md:148`), `OntologyDelta` is 32-B `#[repr(C)]`
64+
(`.claude/plans/bindspace-columns-v1.md:262`), and `EPIPHANIES.md:257` already
65+
treats `SoaContainerHeader` + `SoaColumns` as the LE-contract realisation of
66+
`CANONICAL_DIMENSION_ALLOCATION.md`. But plan §2 defines `MailboxSoA<N>` as a
67+
*container* of `[CausalEdge64; N]` / `[QualiaI4_16D; N]` / `[MetaWord; N]` /
68+
`[u16; N]` arrays plus accumulator scalars, and the migration map in §3 does not
69+
pin the container's `repr` or assert its `size_of`.
70+
71+
**Cross-ref / prior art.** `.claude/board/EPIPHANIES.md:257`
72+
(dimension-allocation-IS-LE-contract);
73+
`.claude/plans/cognitive-substrate-convergence-v3.md:578`
74+
(`I-FEATURE-GATE-FIELD-ISOLATION` candidate iron rule — every v2-style layout
75+
change requires field-isolation-matrix tests at the bit boundary; promotes
76+
naturally to enforcement of the pin on every layout-bearing struct);
77+
`.claude/specs/pr-ce64-mb-3-bindspace-efgh.md:102` (`#[repr(C)]` already specced
78+
for bindspace columns).
79+
80+
**Blocks.** Plan §2.5 grounding; D-MBX-1 column-addition shape.
81+
82+
---
83+
84+
## OQ-MBX-8 — `persisted_row: u32` semantics under Lance versioning / compaction
85+
86+
**Question.** Plan §2.5 says *"`ShaderCrystal.persisted_row` is a pointer to the
87+
same SoA row laid down in Lance, not a serialized copy in a different shape."*
88+
What does the `u32` actually denote under Lance's versioned/compacting storage
89+
model — a Lance `_rowid`, a (fragment-id, fragment-offset) pair, a stable
90+
RecordBatch row key, or something else? What happens to the value when a Lance
91+
compaction rewrites the fragment, when the dataset rolls a new version, or when
92+
the row is rewritten by an MVCC update?
93+
94+
**Why it matters.** This is the load-bearing finding of the survey, because the
95+
write path **isn't built yet**:
96+
`crates/cognitive-shader-driver/REFACTOR_NOTES.md:129` says verbatim
97+
*"BindSpace is in-memory only. `EmitMode::Persist` sets `persisted_row` in the
98+
crystal but doesn't write to disk."* — and indeed
99+
`crates/cognitive-shader-driver/src/driver.rs:458` does
100+
`EmitMode::Persist => Some(resonance_dto.top_k[0].row)`, i.e. records the
101+
in-RAM top-k row index rather than a Lance row identity. The §2.5 "pointer to
102+
the same SoA row" claim is therefore forward-looking; D-MBX-4 (death → SPO-G
103+
quad + Lance tombstone-witness) is the deliverable that has to make it true,
104+
and the version/compaction semantics need to be pinned **before** that
105+
deliverable picks a row-identity type, or the tombstone-witness back-pointer
106+
will silently break across the first compaction.
107+
108+
**Cross-ref / prior art.** Lance versioning is extensively discussed at the
109+
*session* level (`.claude/SESSION_LANCE_ECOSYSTEM_INVENTORY.md:50-56`,
110+
`.claude/adr/0001-archetype-transcode-stack.md:62-113`,
111+
`.claude/FINAL_STACK.md:41-86`, `.claude/VISION_ORCHESTRATED_THINKING.md:35-179`),
112+
all treating Lance's MVCC + time-travel as the persistence model — but **none**
113+
pin what the `u32` row identity means under that model. The plan's hot/cold
114+
view (§2.7) and tombstone-witness invariant (`E-LADDER-SERVES-MAILBOX` §6)
115+
both depend on the answer.
116+
117+
**Blocks.** Plan §2.5 / §2.7 grounding; D-MBX-4 row-identity type; D-MBX-6
118+
hot/cold transparent-view contract.
119+
120+
---
121+
122+
## OQ-MBX-9 — `ThinkingStyleI4_32D` placement in `MailboxSoA`
123+
124+
**Question.** `ThinkingStyleI4_32D` (i4 × 33 = 3 Pearl + 9 Rung + 5 Σ + 8 Ops + 4
125+
Presence + 4 Meta, riding the shipped ndarray i4-32 unpack) is a fully designed
126+
basis (`EPIPHANIES.md:234..287`, resolved out of `E-I4-META-1` /
127+
`.claude/knowledge/atom-basis-inventory.md`). Plan §3's column migration map
128+
does not mention it. Is it (a) an owned per-row SoA column
129+
(`[ThinkingStyleI4_32D; N]` at ~16 B/row), (b) a dispatch-time projection of
130+
`MetaWord` (already in §3), or (c) only a p64-bridge parameter (so it never
131+
materialises as a mailbox column)?
132+
133+
**Why it matters.** Parallel to OQ-2 (temporal/expert fold) but for a type the
134+
plan didn't flag. If (a), the hot footprint goes from ~6 KB/thought (§2.7) to
135+
~6 KB + 16 B/thought — negligible for the 64k–256k ceiling but still a budget
136+
line. If (b), the projection algorithm needs to be specified (which `MetaWord`
137+
bits encode the 33 lanes? Or is it a separate read off `meta` + `edges`?). If
138+
(c), `MailboxSoA` never holds it and the call sites that need a style read it
139+
fresh from p64-bridge each cycle.
140+
141+
**Cross-ref / prior art.** `.claude/board/EPIPHANIES.md:234, 253, 271, 287, 293,
142+
392` (`ThinkingStyleI4_32D` basis decision);
143+
`.claude/knowledge/atom-basis-inventory.md:3-54` (lanes-as-atoms, i4×33 = the
144+
contract); `.claude/plans/rung-ladder-grounding-v1.md:94` (RungLevel = R1-R9
145+
dim-group of `ThinkingStyleI4_32D`); `crates/p64-bridge/src/lib.rs`
146+
(`ThinkingStyle → layer_mask + combine + contra` — already shipped, no
147+
re-encode).
148+
149+
**Blocks.** Plan §3 migration map; D-MBX-1 column-addition shape.
150+
151+
---
152+
153+
## OQ-MBX-10 — Sea-star concurrency model post-S3
154+
155+
**Question.** Plan §6 step S3 says *"`ShaderDriver` holds a sea-star of
156+
mailboxes (kill the 4096 singleton in `serve.rs`)."* What is the *shape* of the
157+
container — `Vec<MailboxSoA>`, `HashMap<MailboxId, MailboxSoA>`, a pool with
158+
slot reuse, a sharded set keyed by `w_slot`? Is `MailboxSoA<N>` `Send`/`Sync`
159+
today (and if not, what's the access discipline — a per-mailbox actor in the
160+
ractor outer-swarm, or driver-thread-pinned)? What's the supervisor's failure
161+
model when one mailbox in the sea-star panics?
162+
163+
**Why it matters.** S3 is the deliverable where the singleton actually dies;
164+
the container shape and the access discipline determine the whole sea-star
165+
runtime contract (ractor child set, supervision tree depth, par-tile mapping).
166+
`E-CE64-MB-4`'s ownership guarantee is per-mailbox; the cross-mailbox layer
167+
needs its own specification.
168+
169+
**Cross-ref / prior art.** `.claude/specs/pr-ce64-mb-1-par-tile-crate.md`
170+
(par-tile `Mailbox<T>` apex — InMemory / Tokio / SupabaseSubMailbox backings;
171+
gate D-CE64-MB-1-impl); `D-PERSONA-5` (ractor outer-swarm runtime); plan §5
172+
lifecycle ("spawn → think → emit → die → tombstone") implies the actor model
173+
but does not commit on the container/scheduler.
174+
175+
**Blocks.** D-MBX-3 (driver-singleton kill); D-MBX-4 (death → tombstone path
176+
needs a "from where" answer).
177+
178+
---
179+
180+
## OQ-MBX-11 — Mailbox-level eviction at the 64k–256k thought ceiling
181+
182+
**Question.** Plan §2.7 pins a hot-tier ceiling of **~64k–256k thoughts**
183+
(~6 KB/thought ≈ 300–600 MB at 64k). What signal reclaims a mailbox when the
184+
ceiling is approached — global LRU on mailbox last-touch, supervisor
185+
back-pressure from a working-set sensor, ractor mailbox idle-timeout, an
186+
energy-decay threshold (`MailboxSoA.energy` integrated below floor for K
187+
cycles)? Slot-level LRU on `AttentionMask` slots
188+
(`pr-ce64-mb-5-mailbox-soa-attentionmask.md §2.2`) handles *within-mailbox*
189+
slot reuse, not *between-mailbox* reclaim — those are different layers.
190+
191+
**Why it matters.** Without a named eviction signal, the sea-star can't be
192+
sized — it either over-allocates (OOM at the ceiling) or starves
193+
(over-eager reclaim that thrashes warm mailboxes). The §2.7 ceiling is a
194+
capacity *claim*; this OQ asks for the *policy* that enforces it.
195+
196+
**Cross-ref / prior art.** `pr-ce64-mb-5-mailbox-soa-attentionmask.md §2.2`
197+
(slot-level LRU — wrong layer); `E-LADDER-SERVES-MAILBOX` §5 (ghost-tier
198+
preemptible to zero — the *capability*, but not the *trigger*); D-CSV-7
199+
(MailboxSoA accumulator, shipped — has `energy` and `last_emission_cycle` that
200+
could feed a decay signal).
201+
202+
**Blocks.** D-MBX-3 supervisor wiring; D-MBX-6 hot/cold spill discipline.
203+
204+
---
205+
206+
## OQ-MBX-12 — S1 dual-path discipline + field-isolation-matrix tests
207+
208+
**Question.** Plan §6 says S1–S4 run with both paths live behind the
209+
`mailbox-thoughtspace` feature, with the v1 `Arc<BindSpace>` accessors
210+
*"feature-gated to a documented no-op with a migration pointer — never silently
211+
change semantics."* During S1, when does a non-feature-gated caller (e.g. the
212+
`engine_bridge` per-row read/write surface on the legacy path) get a
213+
no-op-vs-route-through-mailbox answer? What test artefact gates each of S1, S2,
214+
S3 — specifically, where is the **field-isolation-matrix test** required by
215+
`I-FEATURE-GATE-FIELD-ISOLATION` (candidate iron rule, CSV-v3:578) queued?
216+
217+
**Why it matters.** `.claude/board/sprint-log-11/meta-review-opus.md:133` records
218+
that codex catches the v1-API-under-v2 anti-pattern repeatedly (4 instances in
219+
PR #383 alone) — *"backward-compat shims for layout-breaking feature flags
220+
require systematic test coverage of the bit boundary."* This migration is
221+
load-bearingly that pattern (S1 adds columns under a feature; S2 routes through
222+
them; S5 deletes the old carrier). Without the field-isolation matrix on the
223+
critical bit boundaries (`MetaWord`, `CausalEdge64` v2 reclaimed bits per
224+
`I-LEGACY-API-FEATURE-GATED`), the migration will hit the same codex catches.
225+
226+
**Cross-ref / prior art.** `.claude/plans/cognitive-substrate-convergence-v3.md:406,578`
227+
(I-FEATURE-GATE-FIELD-ISOLATION candidate);
228+
`.claude/board/sprint-log-11/meta-review-opus.md:133` (the 4-instance evidence
229+
trail); plan §7 invariant #5 (I-SUBSTRATE-MARKOV preserved); plan §6 S1–S4
230+
gating ladder.
231+
232+
**Blocks.** D-MBX-1 acceptance criteria; D-MBX-2 acceptance criteria.
233+
234+
---
235+
236+
## OQ-MBX-13 — BE-endianness policy for the LE contract
237+
238+
**Question.** The LE-contract framing (plan §2.5; `E-CONTRACT-NO-SERIALIZE`)
239+
assumes a little-endian host throughout the vertical (shader-driver →
240+
`lance-graph-contract` → Lance storage). What is the policy on big-endian
241+
targets — panic at startup, transparent byteswap at the I/O membrane,
242+
feature-gate the LE contract behind `cfg(target_endian = "little")`, or declare
243+
BE explicitly unsupported?
244+
245+
**Why it matters.** Lance's on-disk format is LE; cross-architecture is mostly
246+
theoretical for the current deploy targets, but a stated policy is cheaper now
247+
than a surprise CI failure on a future aarch64-BE / s390x experiment. Also
248+
relevant if the multi-server cognition plan
249+
(`.claude/plans/multi-server-cognition-expansion-v1.md` §4 "deterministic
250+
apply") ever crosses arch boundaries in the Raft log.
251+
252+
**Cross-ref / prior art.** `.claude/plans/multi-server-cognition-expansion-v1.md`
253+
§4 (deterministic apply across machines = precondition for replication);
254+
`E-CONTRACT-NO-SERIALIZE` (compile-time handshake, no membrane serialize —
255+
implicitly LE).
256+
257+
**Blocks.** Plan §2.5 wording precision; LE-contract crate-level docs.
258+
259+
---
260+
261+
## OQ-MBX-14 — Baton `u16` ↔ HHTL cascade-address encoding relationship?
262+
263+
**Question.** The LE baton is `(u16 target, CausalEdge64)` (per `E-BATON-1`,
264+
plan §7 invariant #2). HHTL is discussed as a 4-nibble cascade-level encoding
265+
in transcripts (`SESSION_*`, `IDEA_JOURNAL_*`). Is the baton's `u16` target
266+
meant to encode (or be derivable from) the HHTL cascade-address scheme — so
267+
that "where the baton lands" carries cascade-level information — or is the
268+
`u16` strictly a target *row index* into the receiving mailbox with no HHTL
269+
structure?
270+
271+
**Why it matters.** PP-15 (`baton-handoff-auditor`,
272+
`EPIPHANIES.md:466,498`) is the meta-review savant whose remit covers exactly
273+
this seam; getting the question in writing before PP-15's first scheduled pass
274+
on #418 means PP-15 has the question, not the rediscovery, on input. Either
275+
answer is fine — *"no, baton `u16` is a flat row index, cascade addressing
276+
lives elsewhere"* is a valid closure.
277+
278+
**Cross-ref / prior art.** `crates/lance-graph-contract/src/collapse_gate.rs`
279+
(`CollapseGateEmission` / `push_baton` / `wire_cost_bytes`);
280+
`.claude/board/EPIPHANIES.md:466,498` (PP-15 baton-handoff-auditor scope);
281+
HHTL discussion across `.claude/SESSION_LANCE_ECOSYSTEM_INVENTORY.md`,
282+
`.claude/IDEA_JOURNAL_2026_04_29_FUTURE_PILLARS.md`, etc.
283+
284+
**Blocks.** Nothing in the immediate D-MBX-1..6 critical path; PP-15 audit
285+
input.
286+
287+
---
288+
289+
## Resolved / not-filed (survey closed these before authorship)
290+
291+
- **TD-RESONANCEDTO-DUP-1 severity re-rate** — verified P3 is correct.
292+
`crates/thinking-engine/src/dto.rs:59` and
293+
`crates/thinking-engine/src/awareness_dto.rs:21` define `ResonanceDto` in
294+
**separate modules** (`pub mod dto;` + `pub mod awareness_dto;` in
295+
`lib.rs:17,32`), so there is no crate-root name collision and the crate
296+
compiles fine. All 6 consumers (`bf16_engine.rs`, `composite_engine.rs`,
297+
`dual_engine.rs`, `engine.rs`, `f32_engine.rs`, `signed_engine.rs`) import
298+
only `crate::dto::ResonanceDto`; nobody currently imports the
299+
`awareness_dto::` variant by name, so even cross-import confusion is latent
300+
rather than active. P3 (cosmetic type-dup) stands; folding into D-MBX-2 per
301+
the existing TD entry remains the right disposition.
302+
303+
- **Libet wall-clock budget** — closed before authorship per
304+
`.claude/surreal/cognitive-substrate.md:49-51`; see preamble.

0 commit comments

Comments
 (0)