|
| 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