Skip to content

Commit 83fdf5f

Browse files
committed
docs(plan): graphrag + doc-retrieval on the V3 SoA — integration plan v1
Evaluation + wave plan for feeding a new query-side crates/graphrag and OGAR's ogar-doc from the existing SoA + CausalEdge64 + (queued) EpisodicWitness64 substrate, aligned to #708 / D-TRI-6 (the rung-ascent loop) and the v3 waves. Key rulings the plan encodes: - Direction reframe (assembler-vs-storage boundary): OGAR owns doc ingestion + the document 0x080B mint (ogar-from-docv1 -> ogar-doc-ir -> ogar-doc, built); lance-graph provides contract types OGAR consumes + query. graphrag is query-side ONLY, reads the calcified substrate, never ingests. A lance-graph doc-transcode crate is REJECTED (duplicates ogar-from-docv1, inverts the dep). - REUSE the substrate, BUILD only 3 gaps: hierarchical Leiden, HippoRAG-PPR reset-distribution, BM25. Extraction/SPO/fact-store/vector-CAM-PQ already exist; causal_edge::CausalEdge64 is the SPO edge (not the thinking-engine variant); EpisodicWitness64 is a queued column (today WitnessTable + EpisodicEdges64). graphrag-rs = REUSE-AS-REFERENCE (E-V3-GRAPHRAG-INV-1). - Retrieval = rung ascent (#708): dispatches through RungElevator + canonical RungLevel; BLOCK ascends and widens the CAUSES..BECOMES predicate-plane mask, FLOW relaxes to base. The graph is load-bearing because surprise ascends the elevator. Maps onto the triangle-tenants Maslow pyramid (D-TRI). - Probe-first: G0 P-GRAPH-LOADBEARING (graph vs vector-only) gates all Leiden/PPR code. Composes atop oxigraph-arigraph-cognitive-shader-soa-merge-v1. No bytes land; D-GR-5 (OGAR seam) mint-gated + baton-audited. Board hygiene: INTEGRATION_PLANS prepend in the same commit. Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 8d3209c commit 83fdf5f

2 files changed

Lines changed: 287 additions & 0 deletions

File tree

‎.claude/board/INTEGRATION_PLANS.md‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,26 @@
1+
## 2026-07-17 — graphrag-doc-retrieval-soa-integration v1 — DESIGN (probe-gated)
2+
3+
**Plan:** `.claude/plans/graphrag-doc-retrieval-soa-integration-v1.md`
4+
**Scope:** evaluation + wave plan for a query-side `crates/graphrag` (retrieval
5+
orchestrator) + a `DocGraphQuery` contract surface, both reading the *calcified*
6+
document-graph substrate. Reframes the task's "lance-graph feeds ogar-doc": OGAR
7+
owns doc ingestion + the `document 0x080B` mint (`ogar-from-docv1` →
8+
`ogar-doc-ir` → `ogar-doc`, all built); lance-graph provides the contract types
9+
OGAR consumes + query capability. graphrag is query-side ONLY — never ingests
10+
(door-knocking-compiler test; assembler-vs-storage boundary). REUSE:
11+
`causal_edge::CausalEdge64` (SPO edge), native NARS `(freq,conf)`,
12+
`WitnessTable`/`EpisodicEdges64` (provenance; `EpisodicWitness64` = a *queued*
13+
column), AriGraph `TripletGraph`+`spo_bridge` (fact store), `MailboxSoaView`,
14+
CAM-PQ, `lance-graph-arm-discovery` (extraction proposer). BUILD only the 3
15+
gaps: hierarchical Leiden, HippoRAG-PPR reset-distribution, BM25. **Retrieval =
16+
rung ascent** (#708 / D-TRI-6 `RungElevator` + canonical `RungLevel` +
17+
predicate-plane widen; BLOCK ascends, FLOW at base) up the §3a Maslow pyramid.
18+
Probe-first: **G0 P-GRAPH-LOADBEARING** (graph beats vector-only?) gates all
19+
Leiden/PPR code. graphrag-rs (automataIA) = REUSE-AS-REFERENCE
20+
(`E-V3-GRAPHRAG-INV-1`). Composes atop
21+
`oxigraph-arigraph-cognitive-shader-soa-merge-v1`. D-GR-1..5; D-GR-5 (OGAR seam)
22+
mint-gated + baton-audited. No bytes land.
23+
124
## 2026-07-17 — triangle-tenants-gestalt-separation v1 — DESIGN (mint-gated)
225

326
**Plan:** `.claude/plans/triangle-tenants-gestalt-separation-v1.md`
Lines changed: 264 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,264 @@
1+
# graphrag + doc-retrieval on the V3 SoA — integration plan v1
2+
3+
> **Status:** DESIGN — evaluation + wave plan (no bytes land here). Aligned to
4+
> **#708 / D-TRI-6 — now MERGED (`8d3209c`; `E-RUNG-ASCENT-WIRED-1` SHIPPED)** +
5+
> `E-MASLOW-PYRAMID-OF-COGNITION-1` and the `triangle-tenants-gestalt-separation-v1`
6+
> Maslow pyramid. The rung-ascent loop is landed code (D-GR-2's dependency is
7+
> satisfied). Any OGAR classid touch is **mint-gated** (batched, baton-audited).
8+
> Probe-first: the **graph-load-bearing baseline** is the FIRST deliverable,
9+
> before any Leiden/PPR code.
10+
> **Grounding:** three Opus reader-agents (v3 waves+census · CausalEdge64/witness
11+
> substrate · OGAR↔lance-graph boundary) + `.claude/knowledge/graphrag-rs-inventory.md`
12+
> (`E-V3-GRAPHRAG-INV-1`, the pre-existing automataIA/graphrag-rs audit) + the
13+
> automataIA repo survey (graphrag-rs ★519, graph-librarian-rs, wasm-typst-studio-rs,
14+
> lodviz-rs). Citations are as-of `efd21d2` (#707) — verify before coding.
15+
16+
## §0. The reframe — direction correction (READ FIRST)
17+
18+
The task said "create crates **inside lance-graph feeding into** ogar-doc." Run
19+
through `assembler-vs-storage-substrate.md` + `compilation-vs-runtime-substrate.md`,
20+
that **inverts the dependency** and is WRONG-SHELF. The corrected direction:
21+
22+
- **OGAR = assembler.** It OWNS document ingestion, the `document 0x080B` mint,
23+
and persistence — already built as `ogar-from-docv1` → `ogar-doc-ir` →
24+
`ogar-doc` (doc-W4), all in `/home/user/OGAR/crates/`. A lance-graph
25+
doc-transcode crate would **duplicate `ogar-from-docv1`** and invert the dep.
26+
- **lance-graph = spine.** It provides **contract types** (`ClassView`, facet /
27+
envelope, masks) that `ogar-doc` builds against — OGAR consumes
28+
`lance-graph-contract`, **never the reverse** — **plus query capability** over
29+
the *calcified* substrate.
30+
- **Lance = calcification.** "There is no ingest API." The SoA/Lance write is
31+
calcification by the batch writer on-behalf of a mailbox owner.
32+
- **The door-knocking test forbids** any build step or typed-value constructor
33+
asking the running substrate for permission. `doc.v1 → ogar_doc_ir` is a plain
34+
Rust fn, unit-testable with nothing running.
35+
36+
**Therefore the honest shape of "feeds both ogar-doc and graphrag":** a single
37+
**query/view surface** over the calcified document-graph, consumed by two
38+
readers — `crates/graphrag` (retrieval) and OGAR `ogar-doc`'s
39+
`reconstruct_document` ("re-issue with updated knowledge" / "documents in this
40+
community"). `ogar-doc` calls it **via a `lance-graph-contract` trait**
41+
(`DocGraphQuery`), so OGAR still depends only on the contract. graphrag provides
42+
the impl. **Neither ingests; both read.**
43+
44+
## §1. Evaluation — what to build, what to reject
45+
46+
| Candidate crate | Verdict | Why |
47+
|---|---|---|
48+
| lance-graph doc-transcode / perceptual-IR / `document`-mint crate | **REJECT** | Duplicates OGAR `ogar-from-docv1`/`ogar-doc-ir`/`ogar-doc`; inverts the dep; WRONG-SHELF. Doc ingestion is assembler-side. |
49+
| Monolithic `graphrag` (extraction→graph→retrieval from scratch, à la graphrag-rs) | **REJECT** | Extraction, SPO edges, fact store, vector/CAM-PQ retrieval already EXIST (§2). Violates *wire-don't-invent*. graphrag-rs = REUSE-AS-REFERENCE only (`graphrag-rs-inventory.md`); its `LanceDBStore` is a stub, its `InferenceEngine` is the no-singleton anti-exhibit. |
50+
| **`crates/graphrag`** — thin retrieval **orchestrator**, query-side only | **BUILD** | Binds existing legs onto the #708 rung-ascent loop; BUILDS only the 3 genuine gaps (§2). Reads calcified substrate; never ingests. |
51+
| **`DocGraphQuery` trait** in `lance-graph-contract` + a `DocGraphView` read projection | **BUILD (thin)** | The shared surface both graphrag and `ogar-doc` consume. Keeps OGAR on the contract, not the impl. |
52+
| New lance-graph OGAR-seam crate | **REJECT** | `lance-graph-ogar` already IS the seam (re-exports ogar-vocab Class/codebook + `ClassView` impl). Extend it if needed. |
53+
54+
**Net: two BUILD targets** — `crates/graphrag` (the orchestrator + the 3 gaps) and
55+
a thin `DocGraphQuery` contract surface. Everything else is wiring.
56+
57+
## §2. Substrate reuse — the census (build only the gaps)
58+
59+
REUSE (do **not** rebuild — the substrate provides these):
60+
61+
- **SPO edge = `causal_edge::CausalEdge64`** (8 B, `#[repr(transparent)]`). v2
62+
layout (default `causal-edge-v2-layout`): S/P/O palette idx (bits 0-23), NARS
63+
**frequency**/**confidence** u8 (24-39), Pearl-2³ causal mask (40-42),
64+
direction triad (43-45), inference mantissa i4 (46-49), plasticity (50-52),
65+
**W-slot witness handle** (53-58), truth-band lens (59-60), spare (61-63).
66+
**Disambiguation hazard:** two `CausalEdge64` exist — use `causal_edge` (SPO
67+
palette), NOT `thinking_engine::layered` (8×u8 strength vector).
68+
- **NARS truth = native `(freq u8, conf u8)`** in the edge (bits 24-39);
69+
`expectation()`, `evidence_weight()` on `CausalEdge64`. Don't add a
70+
confidence/weight field.
71+
- **Provenance/witness.** `EpisodicWitness64` is **not a symbol** — it names a
72+
*queued* SoA column (`soa_view.rs` `episodic_witness()` deferred). Today use
73+
`EpisodicEdges64` (4×16-bit MRU episodic edges) + `WitnessTable<64>` /
74+
`WitnessEntry{mailbox_ref, spo_fact_ref}` resolving the CE64 v2 W-slot. Don't
75+
add a provenance field; **materializing the column is a candidate probe**, not
76+
an assumption.
77+
- **Fact store = AriGraph `TripletGraph` + SPO-G quad.** `Triplet` + G-slot
78+
(`ContextTag::{Observation, Intervention}`) = the quad; `CounterfactualSpoG`
79+
from `TripletGraph::intervene_on` (Pearl rung-2). Promote a CE64 to a graph
80+
edge via `spo_bridge::promote_to_spo` past the truth gate. Cold, in
81+
lance-graph core — **not** a SoA column.
82+
- **Read surface = `MailboxSoaView`** (zero-copy; `edges:[CausalEdge64;N]` is the
83+
EdgeColumn). Don't re-encode to Arrow. Node adjacency = the 16-byte `EdgeBlock`
84+
(coarse, key-side); identity/class = `NodeGuid` / `class_id` u16 (resolves via
85+
`lance-graph-ontology`). Three edge encodings — EdgeBlock (adjacency) / CE64
86+
(causal weight) / EpisodicEdges64+WitnessTable (provenance) — **never conflate**.
87+
- **Extraction (upstream proposer) = `lance-graph-arm-discovery`** (Aerial+
88+
transcode, integer codebook-distance oracle → `{s,p,o,f,c}` ndjson NARS-truth
89+
SPO candidates) + `nsm/parser.rs` PoS-FSM→SPO. No-LLM, workspace-native.
90+
- **Vector retrieval = CAM-PQ** (`cam_pq/{ivf,storage,udf}`; codec ICC 0.9999,
91+
`cam-pq-production-wiring-v1`). *(The exact vector-search entry symbol moved
92+
since the agent read — verify the current entry point.)*
93+
94+
BUILD (the genuine gaps — each gated on §6 P0):
95+
96+
1. **Hierarchical Leiden community detection** — in-tree is example-only
97+
(`jc/examples/splat_louvain_modularity.rs`, `splat_lpa_label_propagation.rs`);
98+
graphrag-rs `leiden.rs` is single-level, REUSE-AS-REFERENCE. Build hierarchical
99+
over the CE64/SPO-G graph.
100+
2. **HippoRAG-PPR** (personalized PageRank with reset distribution) — plain
101+
`hdr_pagerank` (`blasgraph/ops.rs`) + `ScentCsr::spmv` exist; the reset/seed
102+
distribution + dual-signal (passage-weight) is the gap. Reference
103+
graphrag-rs `hipporag_ppr.rs`.
104+
3. **BM25 keyword arm** — ABSENT; small pure function. Reference graphrag-rs
105+
`KeywordExtractor`.
106+
107+
## §3. The #708 alignment — retrieval IS rung ascent
108+
109+
**Do not build a bespoke retrieval-escalation ladder.** graphrag retrieval
110+
dispatches through the **`RungElevator`** wired by **#708 (merged `8d3209c`,
111+
D-TRI-6; `E-RUNG-ASCENT-WIRED-1`)** — now landed code, not a landing dependency.
112+
The elevator + ladder type are contract types:
113+
`lance_graph_contract::cognitive_shader::{RungElevator, RungLevel}`
114+
(`cognitive_shader.rs:272` / `:157`), and the widen is
115+
`cognitive-shader-driver::driver::rung_widened_layer_mask`
116+
(`driver.rs:701` — `fn(base, level, req_mask: u8) -> u8`). Per #708: `on_gate()`
117+
advances one rung per dispatch; the current rung selects the cycle's cascade
118+
breadth via `rung_widened_layer_mask` — a UNION over the **8-bit predicate-plane
119+
mask (CAUSES..BECOMES)**, **identity at base (zero regression), superset-monotone
120+
above**. `RungLevel` is now canonical in `lance-graph-contract` (post-#708 dedup;
121+
thinking-engine re-exports; `as_u8()` added). The follow-up review fix `17368ea`
122+
locks the ordering — **advance the elevator BEFORE the sinks** — which graphrag's
123+
`retrieve.rs` must mirror (gate the walk on the *post-advance* rung). **BLOCK
124+
ascends, FLOW relaxes to base.**
125+
126+
Map retrieval onto the Maslow pyramid (`triangle-tenants-gestalt-separation-v1`
127+
§3a; the rung-content ladder in `persona-vs-rung-ladder.md`):
128+
129+
| Rung | Pyramid level | Retrieval action | Predicate-plane mask |
130+
|---|---|---|---|
131+
| 0–1 (base, FLOW) | observation / gestalt | CAM-PQ vector + BM25 surface lookup | identity |
132+
| 2 | SPO 2³ | SPO-G edge hop over `CausalEdge64` | widen (Pearl rung-1 planes) |
133+
| 3 | CE64 NARS candidates | HippoRAG-PPR + community-scoped expansion, NARS-truth-weighted | wider CAUSES..BECOMES union |
134+
| 3–4 | NARS candidate design / revision | community summaries (Rig oracle → compiled template, W3) | full |
135+
| 4 (apex) | counterfactual | Pearl rung-2 intervention (`ContextTag` G-slot) | — |
136+
137+
**The graph is load-bearing precisely because BLOCK ascends the elevator**
138+
(retrieval surprise / low NARS confidence / contradiction widens the traversal).
139+
graphrag never re-decides the level — it reads the driver's `RungLevel` and
140+
supplies the wider graph walk. This is the anti-decorative-graph guarantee (vs
141+
the graph-librarian-rs anti-pattern where the graph is built but never traversed).
142+
143+
## §4. Crate topology (recommended)
144+
145+
```
146+
crates/graphrag/ (NEW, lance-graph, W5 query consumer)
147+
src/
148+
lib.rs
149+
retrieve.rs # rung-ascent orchestrator; consumes contract RungElevator/RungLevel (#708); the load-bearing walk
150+
community.rs # BUILD: hierarchical Leiden over CE64/SPO-G
151+
ppr.rs # BUILD: HippoRAG reset-distribution PPR (atop hdr_pagerank/spmv)
152+
keyword.rs # BUILD: BM25
153+
summarize.rs # community summaries via Rig oracle → compiled template (W3 dep)
154+
deps: lance-graph-contract (RungElevator/RungLevel/cognitive_shader — #708),
155+
causal-edge, cognitive-shader-driver (the rung_widened_layer_mask widen),
156+
lance-graph (arigraph query surface), bgz-tensor/cam_pq (vector), ndarray.
157+
NO ingest; NO OGAR dep; reads calcified substrate.
158+
159+
lance-graph-contract/ (EXTEND)
160+
src/doc_graph.rs # DocGraphQuery trait + DocGraphView read projection (the shared surface)
161+
162+
lance-graph-ogar/ (EXISTING seam — extend only if the trait needs OGAR ClassView glue)
163+
```
164+
165+
`ogar-doc` (OGAR) consumes `DocGraphQuery` **via the contract** — that is the
166+
correct "feeds ogar-doc": ogar-doc is a **caller** of graphrag's query surface,
167+
never fed data by a lance-graph crate.
168+
169+
## §5. Wave sequencing (aligned to v3 W0–W6 + D-TRI)
170+
171+
Neither crate is a new W-wave. Sequenced **after the W1 keystone**
172+
(`mailbox_owner()` shipped #631; batch-writer W1b in-PR):
173+
174+
- **G0 — baseline probe (FIRST, no code): P-GRAPH-LOADBEARING** (§6). Gate on
175+
truth-architect / measurement-before-synthesis.
176+
- **D-GR-1** — `DocGraphQuery` trait + `DocGraphView` read projection in the
177+
contract (both consumers build against it). Zero SoA writes.
178+
- **D-GR-2** — `crates/graphrag` scaffold + `retrieve.rs` binding **existing**
179+
CAM-PQ + SPO-G hops onto the canonical `RungLevel` / `RungElevator` (**#708
180+
merged `8d3209c` — dependency satisfied**; advance-before-sinks ordering per
181+
`17368ea`). Mirrors the #708 settlement probe (BLOCK ascends → wider walk;
182+
FLOW at base).
183+
- **D-GR-3** — BUILD the 3 gaps (`community.rs` Leiden, `ppr.rs` HippoRAG,
184+
`keyword.rs` BM25), **each individually gated** on G0 showing it beats
185+
vector-only.
186+
- **D-GR-4** — `summarize.rs` community summaries via the Rig oracle → compiled
187+
template (depends on W3 `template-runtime`).
188+
- **D-GR-5** — wire `ogar-doc` `reconstruct_document` + "similar/related
189+
documents" to `DocGraphQuery` (cross-repo; baton-audited classid handshake).
190+
191+
Depends-on: W1b (any persisted result is born-stamped), W2 (retrieval cycles =
192+
kanban lanes if a cycle persists), W3 (summaries = compiled templates). Composes
193+
**atop** `oxigraph-arigraph-cognitive-shader-soa-merge-v1` (that plan builds the
194+
unified SoA context; graphrag is the retrieval layer over it — §8).
195+
196+
## §6. Falsifiers / probes (probe-first)
197+
198+
- **P-GRAPH-LOADBEARING (G0, the gate).** On a document corpus, measure retrieval
199+
quality **with vs without** graph traversal (vector-only vs vector+SPO-G+PPR).
200+
KILL condition: if the graph does not beat vector-only on multi-hop/global
201+
questions, do **not** build Leiden/PPR — the graph would be decorative
202+
(graph-librarian-rs anti-pattern). Mirrors the 1BRC addressing-tax probe.
203+
- **P-RUNG-RETRIEVAL.** Hard/contradictory query → BLOCK → elevator ascends →
204+
wider CAUSES..BECOMES mask → higher recall; easy query → FLOW → stays at base
205+
(identity mask, cheap). Mirrors #708's D-TRI-6 settlement probe.
206+
- **P-PPR-MULTIHOP.** HippoRAG-PPR beats vector-only on 2+-hop questions.
207+
- **P-COMMUNITY-GLOBAL.** Leiden community summaries beat flat chunk-concat on
208+
global/thematic questions (the LightRAG dual-level claim).
209+
- **jc battery** (ICC / Spearman / Cronbach) before any new lane-reading backs a
210+
claim (v3 standing gate).
211+
212+
## §7. Alignment hazards (and how this plan avoids each)
213+
214+
1. **write-on-behalf / born-stamped (W1 keystone).** graphrag is read-mostly; the
215+
only writes (persisted community membership / summaries) route the batch-writer
216+
`cast(on_behalf = envelope.mailbox_owner(), …)` — never write-as-self (the smb
217+
`LanceConnector::upsert` ORPHAN-WRITE is the cautionary tale). v3-mailbox-warden
218+
gate.
219+
2. **No-singleton.** No global `Arc<RwLock<KnowledgeGraph>>`. Community/PPR operate
220+
over `MailboxSoA` rows + AriGraph; results are ephemeral or calcified
221+
per-mailbox. graphrag-rs `InferenceEngine` (graph-as-config-struct) is the
222+
explicit anti-exhibit.
223+
3. **16-byte facet never-widen + classid canon-high.** Reuse existing task
224+
classids (`0x080B`/`0x0807`/`0x0808`/`0x080A`, hi-u16 = concept, canon-high). A
225+
persisted community-membership lane = a **new `ValueTenant` discriminant in the
226+
328 B headroom** (additive-at-end, `ENVELOPE_LAYOUT_VERSION` unchanged),
227+
field-isolation-matrix gated by v3-envelope-auditor. `u8:u8` never widened to
228+
u16/u24.
229+
4. **Probe-first / wire-don't-invent.** COMPONENT-MAP + `graphrag-rs-inventory.md`
230+
ARE the precomputed "does it exist" search; §2 leans on them. G0 gates code.
231+
5. **CausalEdge64 duplication + cross-repo baton.** Always qualify
232+
`causal_edge::CausalEdge64`. Any OGAR classid for the D-GR-5 seam is a
233+
**batched** mint + sync-fuse, baton-handoff-auditor gated.
234+
235+
## §8. Relationship to existing plans
236+
237+
- **`graphrag-rs-inventory.md`** (`E-V3-GRAPHRAG-INV-1`) — the component-by-component
238+
automataIA/graphrag-rs audit. **Mandatory pre-read**; this plan does not re-fork.
239+
- **`oxigraph-arigraph-cognitive-shader-soa-merge-v1`** — builds the unified
240+
SoA context (Oxigraph RDF + AriGraph episodes + SPO). graphrag is the
241+
**retrieval layer atop it**; they compose, not compete.
242+
- **`entropy-ladder-spo-rung-v1`** (R1 shipped) — SPO/NARS rung decomposition;
243+
the rung mapping in §3 must reconcile with its entropy-level = fact-position.
244+
- **`temporal-markov-and-style-classes-v1`** (ACTIVE) — governs the retrieval
245+
substrate (episodic axis = Lance versions); graphrag rides `temporal.rs`.
246+
- **`triangle-tenants-gestalt-separation-v1`** (D-TRI-1..6) + **#708** — the
247+
Maslow pyramid graphrag retrieval ascends (§3).
248+
- **`normalized-entity-holy-grail-v1`**, **`episodic-risc-spine-v1`**,
249+
**`cam-pq-production-wiring-v1`**, **`wikidata-lazy-spine-hydration-v1`** —
250+
adjacent; entity-resolution + episodic-addressing + codec + KG-hydration inputs.
251+
252+
## §9. Board hygiene · D-ids · gate
253+
254+
- D-ids: **D-GR-1..5** (this plan) — STATUS_BOARD rows on land.
255+
- New plan → INTEGRATION_PLANS.md prepend (this commit); EPIPHANIES entry only
256+
when a finding lands (probe result), not for the plan itself.
257+
- **Gate:** G0 (P-GRAPH-LOADBEARING) is the first deliverable — **no Leiden/PPR
258+
code before it is green.** D-GR-5 (OGAR seam) is mint-gated + baton-audited.
259+
- **Open questions:** (O1) does `ogar-doc` `reconstruct_document` genuinely need a
260+
runtime graph query, or is the "updated knowledge" re-issue a batch re-persist?
261+
(settles whether D-GR-5 is a live query seam or a re-run). (O2) materialize the
262+
`EpisodicWitness64` column now (helps PPR recency) or stay on
263+
`EpisodicEdges64`+`WitnessTable`? (probe). (O3) reconcile the §3 rung mapping
264+
with `entropy-ladder-spo-rung-v1`'s entropy levels — same ladder or two?

0 commit comments

Comments
 (0)