You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
**Main thread (Opus 4.8 1M) + 3 Opus brutal hardeners** (PP-13 brutally-honest-tester / PP-15 baton-handoff-auditor / PP-16 preflight-drift-auditor), all pinned to the plan by `file:line`. Verdicts: **HOLD / CATCH-LATENT / READY-TO-DISPATCH** — all fixes spec-text, no architectural rewrite; all three confirmed the grounding + dependency-wall claims + measure-first ratio.
4
+
5
+
**Folded into the plan:** new **§9 hardening ledger** (5 LOCKED decisions + latent boundary fixes + P2s + sub-line drift) and new **§0 ANTI-INVENTION GUARDRAIL** (operator msg: *"prevent any agents telling us to invent additional skewed properties in the SoA when we already have a lot of good and well tested ideas"*) — read-first, enforced by dto-soa/iron-rule savants + the 3 hardeners. Inline fixes: emit channels are SEPARATE-not-derived (was the I-LEGACY trap); §4 "closes seam #2" → closure-injected (planner can't reach async `at_version`). **Biggest catches:** (1) `cycle()` must stay INHERENT not a trait method (object-safety, would break n8n-rs/crewai-rust `Box<dyn>`); (2) DUAL `RungLevel` — contract bare enum vs thinking_engine `cognitive_stack::RungLevel` which already has `from_u8`+`should_elevate`, MIRROR don't duplicate (PP-16 top catch = the §0 guardrail in action); (3) THREE `PlanResult` (incl arigraph/language.rs:34); (4) `MailboxId` has no safe sentinel; (5) "#495 rides #496" mis-attributed — ValueSchema is branch-only post-#495.
6
+
7
+
**Next:** scope the tesseract-rs transcode POC (first consumer against the now-Full slab) → open #496 carrying plan + ValueSchema + FULL-default + guardrail + hardening.
**Main thread (Opus 4.8 1M).** Operator: *"(a) flip the blanket default to Full (all unconfigured classes → Full) / any consumer that needs to save memory can create [its] smaller settings / any consumer that needs more data and more efficiency can afford a separate class"* + *"prevent any agents telling us to invent additional skewed properties in the SoA when we already have a lot of good and well tested ideas"* + consumers *woa-rs / medcare-rs / q2 / tesseract-rs (favourite) — transcode that creates a testable POC*.
**No agent invents new skewed SoA properties. We already have good, well-tested ideas; transcodes map ONTO them, never extend them.** For any work targeting this plan:
41
+
- The value slab is the **9 `ValueTenant`s** (`canonical_node.rs`); the node is **`key|edges|value`** (512 B, locked CANON); the **four BindSpace columns** (FingerprintColumns / QualiaColumn / MetaColumn / EdgeColumn) are **closed**. New capability lands as a **new column / new class**, never a new layer / struct / skewed field (AGI-as-SoA PR #223; RESERVE-don't-reclaim CANON).
42
+
- Before reaching for any new carrier, apply I-VSA-IDENTITIES **Test-0 (register laziness):** if the thing has a name / enum / id, use the register (HashMap / enum / class) — NOT a fancy property.
43
+
- The **§8 7-item additive ledger is the MAX scope.** Anything beyond it — a new tenant, a new column, a new struct, a "skewed" field — requires explicit operator sign-off. An agent that wants one **STOPS and surfaces it**, it does not implement it.
44
+
- Specialisation is **opt-IN** (`TD-VALUESCHEMA-FULL-POC-DEFAULT`: the POC FULL default): a consumer mints a class to go smaller/denser; it never adds a property to the shared slab.
45
+
- Enforced by `dto-soa-savant` + `iron-rule-savant` (epiphany council) and the 3 pre-merge hardeners (§9). PP-16's top catch — "don't duplicate `should_elevate`, it already ships in thinking-engine" — is this guardrail in action.
1. **Planner emits `KanbanMove`** — gap: `emitted_edges` always empty; planner imports none of `kanban`/`soa_view`. Tracking: **D-MBX-A6-P3**. FOLD (S2): the inputs ALREADY exist — `StyleStrategy::reliability_of` (style_strategy.rs:168) already computes the settled `ThoughtCtx` but discards all but `confidence` (:178); refactor to `settle() → ThoughtCtx` keeping `dissonance` (recipe_kernels.rs:31) + `rung` (:37). Adapter `thoughtctx_to_kanban_move` (planner-side, pure): `exec` per §2.1; `to` from `tc.gate_state()` (recipe_kernels.rs:58, expose it) vs `KanbanColumn::can_transition_to`; `libet_offset_us=-550_000` iff `to==CognitiveWork`; `witness_chain_position=0` (no arc yet). **Cutover = 5 sites, NOT 4: lib.rs:123/216/254/312 + api.rs:190 + the CONTRACT TWIN plan.rs:44** (skipping it diverges the `PlannerContract` trait). Add `emitted_moves: Vec<KanbanMove>` beside `emitted_edges` (legacy derived from it) per I-LEGACY-API-FEATURE-GATED → resolves OQ-11.7. **Missing input: `KanbanMove.mailbox` (kanban.rs:114) — the planner has NO mailbox; add `mailbox: Option<MailboxId>` to `PlanContext` (traits.rs:69), caller-supplied, sentinel default.**
125
+
1. **Planner emits `KanbanMove`** — gap: `emitted_edges` always empty; planner imports none of `kanban`/`soa_view`. Tracking: **D-MBX-A6-P3**. FOLD (S2): the inputs ALREADY exist — `StyleStrategy::reliability_of` (style_strategy.rs:168) already computes the settled `ThoughtCtx` but discards all but `confidence` (:178); refactor to `settle() → ThoughtCtx` keeping `dissonance` (recipe_kernels.rs:31) + `rung` (:37). Adapter `thoughtctx_to_kanban_move` (planner-side, pure): `exec` per §2.1; `to` from `tc.gate_state()` (recipe_kernels.rs:58, expose it) vs `KanbanColumn::can_transition_to`; `libet_offset_us=-550_000` iff `to==CognitiveWork`; `witness_chain_position=0` (no arc yet). **Cutover = 5 sites, NOT 4: lib.rs:123/216/254/312 + api.rs:190 + the CONTRACT TWIN plan.rs:44** (skipping it diverges the `PlannerContract` trait). Add `emitted_moves: Vec<KanbanMove>` beside `emitted_edges` as a **SEPARATE channel, NOT derived** (PP-13/PP-15 §9: `emitted_edges` keeps carrying CausalEdge64/EpisodicEdges64 words from the collapse-gate path; there is NO `KanbanMove→u64` cast — inventing one is the I-LEGACY trap) → resolves OQ-11.7. **Missing input: `KanbanMove.mailbox` (kanban.rs:114) — the planner has NO mailbox; add `mailbox: Option<MailboxId>` to `PlanContext` (traits.rs:69), caller-supplied, sentinel default.**
108
126
2.**temporal.rs unconsumed + dep-wall** — gap: `deinterlace`/`QueryReference` 0 callers; planner ⊥ lance-core. FOLD (S4 — two layers, BOTH required, ordered, NOT either/or): **(A)** relocate the *policy*`temporal.rs` → zero-dep `contract::temporal` (`classify`/`deinterlace`/`EpistemicMode` name no lance/arrow/async; `DeinterlaceRow` is the airgap, mirroring scheduler.rs:31's `MailboxSoaView`) so BOTH planner+core `use contract::temporal::*`; **(B)** add `lance-graph/src/graph/temporal_read.rs` — the ONLY site joining `VersionedGraph::at_version(T)` (versioned.rs:419) → `deinterlace` (temporal.rs:301), in core where both are nameable. A-alone never feeds real rows to `deinterlace`; B-alone can't share `classify` with planner. Add ONE field `as_of: QueryReference` to `PlanContext` (traits.rs:69) — NOT two loose `ref_version`/`rung` (rung lives inside `QueryReference`, temporal.rs:121, drives `mode` via `for_rung`).
109
127
3.**Loop only on jolly** — gap: `MailboxSoaOwner for MailboxSoA` is +149 LOC on `463d71bd`, unmerged. FOLD: cherry-pick `mailbox_soa.rs:349-460` + test `:648` (purely additive, traits already on main).
110
128
4. **Rung inert** — gap: `RungLevel::Surface` hardcoded (orchestration_impl.rs:151, api.rs:178, pipeline.rs:593(test fixture — leave), thinking/mod.rs:86); `rung_delta` imported never called; Staunen/Wisdom orphaned. **Root cause (S3): `RungLevel` has NO constructor** — no `from_ordinal`/`shift`/`from_entropy` (cognitive_shader.rs:157 is a bare enum), so every site CAN'T do anything but default `Surface`. FOLD (S3): (1) add `RungLevel::{from_ordinal, shift(i8), from_entropy(f32)}` after cognitive_shader.rs:169 + a `PlannerContract::rung_for(&self,&SituationInput)->RungLevel` trait method (default Surface, mirrors `gate_check`, so the contract itself KNOWS the rung). (2) bridge the 3-level `EntropyRung` (ndarray entropy_ladder.rs:64) ↔ 10-level `RungLevel` via `from_entropy(h)=from_ordinal(round((1−h)·9))` — bare `f32`, NO ndarray type crosses the wall (scalar `h` is the wire, like seam #2's `QueryReference`). (3) drive the 2 PRODUCTION sites (thinking/mod.rs:86 has `mul` in scope; orchestration_impl.rs:151): `rung = from_entropy(nars_entropy(f,c)).shift(rung_delta(emergence,coherence))`; rises on sustained `mul::GateDecision::Block`; floored by a live `WisdomMarker` (fresh Epiphany→low rung, decayed→high). (4) bind `ShaderDispatch.rung = think_ctx.rung` (was Surface default, cognitive_shader.rs:219). NB the two `GateDecision` types: planner-contract driver = `mul::GateDecision::Block` (mul.rs:150); `collapse_gate::BLOCK` (collapse_gate.rs:79) is the shader-side echo.
Spiral: abduction → `KanbanColumn::Plan` → re-deliberate → next fanout (Peirce abductive-inductive-deductive loop, gated by EpiphanyDetector synthesis + MUL anti-Mount-Stupid). **Add = a `CognitiveCycle` sequencer** (method on the integrated Planner) that drives the 8 steps through the kanban phases, setting `ThinkingContext.inference_type` per step. Everything it calls EXISTS; the sequencer is the only new code — and it is the consumer that closes seams #1 (emit per phase), #2 (as-of read per step), #4 (rung drive), #5 (think delegation). **The spiral re-entry is a GROUNDED legal Rubicon edge (S1):**`KanbanColumn::Plan.next_phases() == &[Planning]` (kanban.rs:95) and `Plan.is_absorbing() == false` (kanban.rs:71) — `Plan → Planning` already compiles; P-CYCLE-SPIRAL is its only falsifier.
191
+
Spiral: abduction → `KanbanColumn::Plan` → re-deliberate → next fanout (Peirce abductive-inductive-deductive loop, gated by EpiphanyDetector synthesis + MUL anti-Mount-Stupid). **Add = a `CognitiveCycle` sequencer** (method on the integrated Planner) that drives the 8 steps through the kanban phases, setting `ThinkingContext.inference_type` per step. Everything it calls EXISTS; the sequencer is the only new code — and it is the consumer that closes seams #1 (emit per phase), #2 (as-of read per step — but the read is CLOSURE-INJECTED, see §9: the planner can't reach the async `at_version` in core), #4 (rung drive), #5 (think delegation). **The spiral re-entry is a GROUNDED legal Rubicon edge (S1):**`KanbanColumn::Plan.next_phases() == &[Planning]` (kanban.rs:95) and `Plan.is_absorbing() == false` (kanban.rs:71) — `Plan → Planning` already compiles; P-CYCLE-SPIRAL is its only falsifier.
174
192
175
193
**Fields vs methods (the load-bearing call, S1):** the sequencer adds exactly THREE state fields to `PlannerAwareness` (lib.rs:99) — `phase: KanbanColumn` (default Planning), `checklist: Checklist` (built by the existing `mul::escalation::boot_checklist()`, mul/escalation.rs:36), `epiphany: EpiphanyDetector` (escalation.rs:213). `mul`/`thinking`/`elevation`/`cache` stay STATELESS module calls (lib.rs:177/183 construct-and-drop) — they do NOT become fields. The 8 steps are `&mut self` methods; the public entry is one new `cycle(&mut self, query, situation) -> Result<CycleOutcome, PlanError>` ALONGSIDE `plan_full` (lib.rs:171) / `plan_auto` (lib.rs:264), both UNCHANGED.
`PlanResult.emitted_edges` (S1: same field/type/doc in both `PlanResult` twins, awaiting the cycle); `dn_hash` dedup (S5: Pinpoint's lesson already shipped at spo_bridge.rs:127); `QueryReference`'s `Copy` as-of half (S4: snapshot-isolation free). The recurring shape: the substrate was built anticipating these seams; the work is WIRING existing carriers, not building new ones. This is the doc's thesis (~90% exists) confirmed three independent ways.
260
278
261
279
**The additive new-code ledger (everything else is wiring):** (1) the `CognitiveCycle` sequencer (T1/T2); (2) `RungLevel::{from_ordinal,shift,from_entropy}` + `PlannerContract::rung_for` (C2); (3) the `temporal.rs` A→contract relocation + B core `temporal_read` join (seam #2); (4) `ScopedReference` + its `admits`/`retrieve_arc` methods (§3); (5) `MarkingRow: DeinterlaceRow` for Bardioc (§3); (6) the tier-structured `NiblePath::from_guid_prefix` bijection (§3, the width-overflow fix); (7) optional `const fn ExecTarget::can_drive` (seam #6 hardening, OQ-11.8). Each is small, additive, and has a falsifying probe in §5.
PP-13 brutally-honest-tester → **HOLD** (3 P1, all spec-text fixes). PP-15 baton-handoff-auditor → **CATCH-LATENT** (4 latent boundary drops). PP-16 preflight-drift-auditor → **READY-TO-DISPATCH** (2 spawn-caution addenda). All three confirmed the load-bearing `file:line` grounding is real, the dependency-wall claims hold, and the measure-first ratio (9 probes / 7 ledger items) is honest. The fixes are spec-text, NOT architectural rewrites.
286
+
287
+
**LOCKED decisions (fold into the §8 ledger before any worker dispatch):**
288
+
1.**Emit channels are SEPARATE, neither derived (PP-13 P1-1 + PP-15 B2).**`emitted_edges: Vec<u64>` (CausalEdge64/EpisodicEdges64 words, collapse-gate path) and `emitted_moves: Vec<KanbanMove>` (16-B lifecycle records) are independent — NO `KanbanMove→u64` cast exists; inventing one is the I-LEGACY trap. Also note `ShaderBus.emitted_edges` is `[u64;8]` not `Vec` (the seam-#5 lowering crosses array→Vec).
289
+
2.**`cycle()` is an INHERENT method on `PlannerAwareness`, NEVER a trait method (PP-13 P1-3).** The `impl Fn` closure-injection arg is not object-safe → must stay OFF `PlannerContract`/`OrchestrationBridge` (the `Box<dyn>` consumers: n8n-rs, crewai-rust). Only `rung_for` goes on the trait. The `run_convergence` precedent (convergence.rs:223) is a free function — its object-safety doesn't transfer to a trait method.
290
+
3.**Seam #2's as-of read is CLOSURE-INJECTED too (PP-15 B8).** The planner cannot reach `at_version` (async, in lance-graph core, behind the anti-circular wall) — so the sequencer does NOT close seam #2 by itself; the temporal read is closure-injected exactly like the think-step (T1), OR core pre-deinterlaces and hands rows over.
291
+
4.**DUAL `RungLevel` — do NOT duplicate (PP-16 CoC-1, SPAWN-CAUTION — paste into the rung-seam worker prompt):** the contract `cognitive_shader::RungLevel` (cognitive_shader.rs:157) is the bare-enum target for the new constructors; `thinking_engine::cognitive_stack::RungLevel` (cognitive_stack.rs:264) ALREADY has `from_u8` + `should_elevate(consecutive_blocks, free_energy, cascade_depth)` (:278-314) — MIRROR its shape, never re-derive. (The plan disambiguates the dual `GateDecision` + dual `ThinkingContext` but was silent on the dual `RungLevel` — and seam #4 sits exactly on it.)
292
+
5.**P-RUNG-ROUNDTRIP is ill-posed as stated (PP-13 P1-2).**`entropy_class` quantizes at QUARTERS, `EntropyRung` bands at THIRDS — boundaries don't nest (counterexample: `class(0.3)==class(0.4)==1` straddle two bands). Restate as a one-band-tolerance probe OR require a thirds-banded 2-bit quantizer. Also `ThoughtCtx.rung` is `1..=9` while `RungLevel` is `0..9` → `from_ordinal` must clamp the off-by-one.
293
+
294
+
**Latent boundary fixes (PP-15, pin before D-MBX-A6-P3 impl):**
295
+
-**THREE `PlanResult`** (B2): inherent lib.rs:107, contract plan.rs:30 (NO live producer today — only nominally twinned), AND `arigraph/language.rs:34`. Name the 3-way collision; specify the inherent→contract adapter.
296
+
-**`MailboxId` sentinel (B4):** the type is `collapse_gate.rs:121` (NOT kanban.rs:114 — that's the field; citation fix). `0` is a real mailbox, `u32::MAX` is already overloaded (#386) → do NOT collapse `Option<MailboxId>` to a magic value; emit NO move without a real mailbox (matches StyleStrategy's no-theatre stance).
297
+
-**Newtype the address u64s (B7):**`dn_hash` + `local_key` are both bare `u64` → wrap `DnHash(u64)`/`LocalKey(u64)` at the `MarkingRow`/addressing boundary; cite the pre-existing `StructuralSignature`~50% collision (`TECH_DEBT.md:134`) in §3 (it's not a clean third hash).
298
+
299
+
**P2 / nits:**`ExecTarget::can_drive` must enumerate all 24 (exec×column) cells (default-allow + SurrealQl deny-list); `MarkingRow` predicate should be an interned id, not `String` (the `&str` carrier forces a heap alloc per row); split P-ARC-PROMOTE-IS-REVISION into the in-tree half (eviction identity) + the DemotionSink-gated half.
300
+
301
+
**Sub-line drift to fix (PP-16, low-impact):**`ThinkingContext.rung` is plan.rs:**23** (not :22, cited ~5×); `try_advance_phase` soa_view.rs:**128**; `NextPhaseScheduler::on_version` scheduler.rs:**76**; `QueryReference::at` temporal.rs:**135**; `convergence.rs` has **9 tests, mod at :246, span :249-437** (not "8, :363-436"). And **"#495 rides #496" is mis-attributed (DRIFT-6, SPAWN-CAUTION):**`ValueSchema`/`ValueTenant`/`EdgeCodecFlavor` are POST-#495 BRANCH commits (`4e3496ab` + `920671d2`), present on this branch but NOT on origin/main, and NOT part of the already-merged #495 — **target the branch tree; do not verify these against origin/main** (a worker who does gets a false negative and thrashes).
0 commit comments