Skip to content

Commit 2bd9c90

Browse files
committed
knowledge: brick-3 RAN — record falsification + truncation-disallowed doctrine; add DO-arm 3-bucket triage
ast-as-partof-isa-address.md corrections (design record catches up to measurement): - Status: CONJECTURE -> PARTIALLY MEASURED. The rank-minter brick-3 has RUN against a real corpus (ruff_csharp_spo harvest -> ruff_spo_address -> medcare_probe); only the design consequence is recorded here — the proprietary measured numbers live exclusively in the private MedCare-rs .claude/archive/ruff-spo-address-medcare-probe/ (cross-referenced, never embedded; this tree is not the place for them). - Headline section: the naive fixed-width 6-tier (part_of:is_a) mint was FALSIFIED at scale (mass truncation + god-class collisions); mint_factored (base-255 positional path + is_a-from-inherits-only) drives truncation AND collisions to 0 by construction. - Truncation is DISALLOWED by policy (operator): bucket overflow (256-cap or 6-tier depth) is a separation-of-concerns REROUTE trigger — split the god-class or escalate to the next cascade level; never truncate, never field-widen (OGAR 256-cap-is-a-lint, #130/#140). mint_factored = addressing precision; overflow->SoC-reroute = structure. - 'The missing brick' -> 'The brick that ran'; Next-bricks checkmarked with remaining open bricks (ruff b459ec3+ re-fetch pass, overflow-reroute automation, classid Canon:Custom half-order, LSP serve end). New: do-arm-triage-3-bucket.md (operator-directed): - Bucket 1 fuzzy/order-varying -> canonicalize first, re-triage. - Bucket 2 anticipated standard DO -> ontologically-shaped landing zone, done ONCE as DTO adapter + codebook swiss-knife (open/filter/reorder/apply_mask). - Bucket 3 truly random -> hand-port, inventing new standard interfaces so recurrences graduate to bucket 2. Refines OGAR's 85/15 split. - Records the harvest gap: ruff_python_dto_check (DO extractor) is Python-only; no C#/C++ DO harvester exists yet — open brick. Board: EPIPHANIES.md prepend E-BRICK3-RAN-TRUNCATION-DISALLOWED (same-commit hygiene per the Mandatory Board-Hygiene Rule).
1 parent 5aaee33 commit 2bd9c90

3 files changed

Lines changed: 293 additions & 29 deletions

File tree

.claude/board/EPIPHANIES.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,46 @@ OGAR `docs/OSINT-SUBSTRATE-REUSE-MAP.md` (ClassView + askama-ERB transfer stack)
109109
`ISS-OSINT-SYSTEM-ROOT-SLOT-VIOLATION` (the frozen-side id fix).
110110

111111
---
112+
## 2026-07-01 — E-BRICK3-RAN-TRUNCATION-DISALLOWED — the (part_of:is_a) rank-minter brick-3 RAN; naive 6-tier mint falsified at scale; truncation is DISALLOWED (overflow = SoC-reroute trigger); DO-arm residue triaged into 3 buckets
113+
114+
**Status:** FINDING (brick-3 measured) + DOCTRINE (operator: "truncations were
115+
disallowed / we introduced bucket overflow with separation of concerns as a
116+
trigger for rerouting"; the 3-bucket DO triage).
117+
118+
**What ran.** The `ast-as-partof-isa-address.md` "missing brick" (deterministic
119+
part_of/is_a rank-minter) is no longer missing — public `ruff_spo_address::{mint,
120+
mint_factored}` shipped and the brick-3 probe RAN against a real C# corpus via
121+
`ruff_csharp_spo` + `medcare_probe`. Result: the **naive fixed-width 6-tier
122+
`(part_of:is_a)` packing was falsified at scale** (mass truncation + god-class
123+
collisions); **`mint_factored`** (base-255 positional path +
124+
`is_a`-from-`inherits`-only) drives truncation AND collisions to 0. The
125+
proprietary measured numbers live ONLY in the private MedCare-rs
126+
`.claude/archive/ruff-spo-address-medcare-probe/` (MedCare-rs is private;
127+
lance-graph + ruff are not) — this board records the design consequence, never
128+
the numbers.
129+
130+
**The doctrine (operator).** Truncation is **disallowed by policy** — not
131+
"reduced by a bigger packer." A bucket that exceeds capacity (256-cap or 6-tier
132+
depth) neither truncates nor field-widens: **the overflow itself is the
133+
separation-of-concerns REROUTE trigger** — split the god-class into sub-concerns,
134+
or escalate to the next cascade level. This is the OGAR `256-cap-is-a-lint` law
135+
made operational (`scale = the next cascade level, never field-widening`, OGAR
136+
#130/#140). Division of labour: `mint_factored` = addressing precision;
137+
overflow→SoC-reroute = structure.
138+
139+
**DO-arm triage (operator, new doc).** The behavioural residue after the THINK
140+
arm partitions into 3 buckets: (1) **fuzzy/order-varying** → canonicalize first,
141+
re-triage; (2) **anticipated standard DO** → ontologically-shaped landing zone,
142+
do ONCE as DTO adapter + codebook swiss-knife (`open`/`filter`/`reorder`/
143+
`apply_mask`); (3) **truly random** → hand-port, partially inventing new standard
144+
interfaces so recurrences graduate to bucket 2. Refines OGAR's 85/15 split. Gap:
145+
the DO extractor (`ruff_python_dto_check`) is **Python-only** — no C#/C++ DO
146+
harvester yet. Full doc: `.claude/knowledge/do-arm-triage-3-bucket.md`.
147+
148+
**Docs updated in this arc:** `ast-as-partof-isa-address.md` (Status →
149+
PARTIALLY MEASURED; headline section rewritten with measured design consequence;
150+
"missing brick" → "brick that ran"; Next-bricks checkmarked + re-fetch/reroute-
151+
automation/LSP open bricks), new `do-arm-triage-3-bucket.md`.
112152

113153
## 2026-07-01 — E-OGAR-LANCEGRAPH-MOVE-IN-PARALLEL — OGAR + lance-graph are one coupled pair moved together every session; the `COUNT_FUSE` is the intentional dependency contract that enforces it (NOT a break to engineer away)
114154

.claude/knowledge/ast-as-partof-isa-address.md

Lines changed: 92 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,13 @@
22

33
> **READ BY:** integration-lead, truth-architect, core-first-architect,
44
> family-codec-smith, baton-handoff-auditor
5-
> **Status:** CONJECTURE (design; the **carrier is now SHIPPED** — see V3
6-
> alignment below — only the rank-minter is unbuilt/unmeasured).
5+
> **Status:** PARTIALLY MEASURED (design; the **carrier is SHIPPED** — see V3
6+
> alignment below — and the **rank-minter brick-3 has now RUN** against a real
7+
> corpus. The naive 6-tier `(part_of:is_a)` mint was **falsified at scale**;
8+
> `mint_factored` is the corrected minter. The measured numbers are proprietary
9+
> and live **only** in the private `MedCare-rs`
10+
> `.claude/archive/ruff-spo-address-medcare-probe/` — this doc records the
11+
> *design* consequence, not the numbers.).
712
> **Cross-ref:** `crates/lance-graph-contract/src/facet.rs` (the **SHIPPED**
813
> `FacetCascade` substrate, #613/#614), `canonical_node.rs`
914
> (`TailVariant::V3` / `mint_for` / `CLASSID_OSINT_V3`, #615),
@@ -155,19 +160,60 @@ across every consumer** — MedCare / WoA / SMB / Odoo / OpenProject-nexgen all
155160
the *same* OGIT patterns (the regulatory `NTO/{Audit, Compliance, Legal}` set
156161
imported once; cf. boundary #1). That magnitude — "much cheaper than 500K LOC" —
157162
is precisely the CONJECTURE's payoff, and the brick-3 probe (MedCare harvest →
158-
mint → SoA → LSP query, MedCareV2 oracle) is what turns it from a claim into a
159-
measurement.
160-
161-
**Headline target (CONJECTURE — the probe measures it):** OpenProject + Odoo
162-
together as **~2 MB of GUID-encoded `(part_of:is_a)`** instead of ~20 MB / ~250K
163-
LOC — a ~10× collapse. Dimensionally credible: at 16 B/`FacetCascade`,
164-
2 MB ≈ **131K class/member/field nodes**, enough to hold both ERPs' structural
165-
skeleton. The honest caveat: that 2 MB is the **THINK-arm structure + classaction
166-
pointers**; the DO-arm `ActionDef` *bodies* don't vanish — they are minted **once**
167-
in OGAR and shared (amortized across every consumer), so the figure is the
168-
*per-consumer marginal* footprint over a shared primitive library, not the whole
169-
system reduced to 2 MB. The 10× ratio is the hypothesis the MedCare probe gives
170-
the first real datapoint for.
163+
mint → SoA → LSP query, MedCareV2 oracle) is what turned it from a claim into a
164+
first measurement.
165+
166+
**Headline target:** OpenProject + Odoo together as **~2 MB of GUID-encoded
167+
`(part_of:is_a)`** instead of ~20 MB / ~250K LOC — a ~10× collapse. Dimensionally
168+
credible: at 16 B/`FacetCascade`, 2 MB ≈ **131K class/member/field nodes**, enough
169+
to hold both ERPs' structural skeleton. The honest caveat: that 2 MB is the
170+
**THINK-arm structure + classaction pointers**; the DO-arm `ActionDef` *bodies*
171+
don't vanish — they are minted **once** in OGAR and shared (amortized across every
172+
consumer), so the figure is the *per-consumer marginal* footprint over a shared
173+
primitive library, not the whole system reduced to 2 MB.
174+
175+
**What brick-3 actually measured (design consequence, numbers are private).**
176+
The rank-minter probe RAN — `ruff_csharp_spo` harvest of a real corpus →
177+
`ruff_spo_address::{mint, mint_factored}``medcare_probe`. Two findings that
178+
change this doc's design (the proprietary counts stay in the private MedCare-rs
179+
archive, cross-referenced below, never embedded here):
180+
181+
1. **The naive 6-tier `(part_of:is_a)` mint was falsified at scale.** A packing
182+
that maps each concept into a fixed 6-tier `(hi:lo)` cascade *truncates* a
183+
large fraction of a real corpus and *collides* on god-classes (a WinForms
184+
god-class with hundreds of members does not fit six 8-bit tiers). "2 MB" is
185+
not reachable by naively bit-packing whatever the harvest emits.
186+
2. **`mint_factored` (base-255 positional path + `is_a`-from-`inherits`-only) is
187+
the corrected minter** — it drives collisions **and** truncation to 0 by
188+
construction, because the path is positional (not a fixed-width bitfield) and
189+
`is_a` is derived only from real inheritance edges (killing the god-class
190+
`is_a` redundancy).
191+
192+
**Truncation is DISALLOWED; bucket overflow is a separation-of-concerns REROUTE
193+
trigger.** The falsification above is *not* "reduce truncation with a bigger
194+
packer." Per the OGAR `256-cap-is-a-lint` law (`scale = the next cascade level,
195+
never field-widening`; OGAR #130/#140), a tier/family that exceeds its capacity
196+
(the 256-cap, or the 6-tier depth) does **not** truncate and does **not**
197+
field-widen — the **overflow itself is the signal to reroute**: split the
198+
overflowing god-class into sub-concerns (SoC), or escalate to the next cascade
199+
level (a new family/basin). So the god-classes brick-3 surfaced are **flagged for
200+
SoC split**, not silently mangled — the overflow is a real transcode signal (a
201+
hundreds-of-members god-class *should* decompose), not a minter limitation. Division of
202+
labour: `mint_factored` handles **addressing precision**; overflow→SoC-reroute
203+
handles **structure**. Together: zero truncation, zero collision, god-classes
204+
flagged for split. The 10× headline is therefore a *design target reachable with
205+
`mint_factored` + overflow-reroute*, and the private archive holds the pre-policy
206+
falsification numbers that motivated the disallow-truncation rule.
207+
208+
**Where the measured numbers live (privacy).** `MedCare-rs` is private; `ruff` is
209+
public. The proprietary corpus counts (triples/nodes/classes, truncation and
210+
collision figures) are recorded **only** in `MedCare-rs`
211+
`.claude/archive/ruff-spo-address-medcare-probe/` (`RESTORE-STATUS.md` +
212+
`medcare_probe.rs`). This doc, being in the (fork-)public lance-graph tree, states
213+
the *design* outcome and deliberately embeds **no** proprietary numbers. A
214+
re-fetch pass against the moved-forward public `ruff` (`origin/main` `b459ec3`+,
215+
carrying scrubbed `ruff_spo_address` + `ruff_csharp_spo`) will re-confirm the
216+
numbers on the current minter; treat the archive's figures as *last measured*.
171217

172218
**What the primitives actually are: laws and regulations, not CRUD shapes —
173219
content stays with the consumer.** An ERP's hard value is *compliance* (tax law,
@@ -294,16 +340,24 @@ the FacetCascade carries the full address. The rank-minter therefore targets the
294340
allocation is left to ratify, and the only open ordering is the classid half-order
295341
above (Canon:Custom), which is orthogonal to per-tier packing.
296342

297-
## The missing brick — a deterministic part_of/is_a rank-minter
343+
## The brick that ran — a deterministic part_of/is_a rank-minter (`mint_factored`)
298344

299345
Between the SPO harvest and the GUID is the **one** genuinely-new component — the
300-
carrier (`FacetCascade`) is **already shipped**, so this is the only brick to
346+
carrier (`FacetCascade`) is **already shipped**, so this was the only brick to
301347
build: a pure-Rust, dependency-free rank-minter. Given the corpus's part_of edges
302348
+ is_a edges, assign each node its `(po_rank, ia_rank)` at each tier and write
303349
them into the 6 `FacetCascade` tiers (`tier.hi = po_rank`, `tier.lo = ia_rank`);
304350
`FacetCascade::to_bytes()` is then the 16-byte facet and `hi_chain()`/`lo_chain()`
305351
the two prefix-routable hierarchies — no new layout, no new type.
306352

353+
**This brick has now RUN** (brick-3, public `ruff_spo_address::mint_factored`,
354+
measured against a private corpus — see the "What brick-3 actually measured"
355+
section above). The naive fixed-width 6-tier packing (`mint`) was falsified;
356+
`mint_factored` (base-255 positional path + `is_a`-from-`inherits`-only) is the
357+
corrected form, and **truncation is disallowed** — bucket overflow triggers an
358+
SoC reroute, never a truncation or a field-widen. The description below is the
359+
`mint_factored` design as it now stands.
360+
307361
- **part_of tree** (namespace → class → member): deterministic sibling/
308362
topological rank.
309363
- **is_a lattice** (class → base, member → kind): deterministic type rank.
@@ -342,21 +396,30 @@ linter surface — it is a **language-agnostic semantic-navigation surface** ove
342396
whatever frontend filled the graph (Python / C++ / **C#-MedCare** / Ruby),
343397
because at that layer it is all the same `Model`/ClassView keyed by GUIDs.
344398

345-
## Next bricks (ordered; each gated on the prior)
399+
## Next bricks (ordered; ✔ = done)
346400

347-
1. **Slot allocation — LOCKED (shipped).** The 6-pair / 12-slot layout is the
401+
1. **Slot allocation — LOCKED (shipped).** The 6-pair / 12-slot layout is the
348402
shipped `FacetCascade` (#613/#614); no ratification needed. The ONLY remaining
349403
ordering decision is the classid `(part_of:is_a)` half-order (the operator's
350-
Canon:Custom correction) — orthogonal to per-tier ranking, so it does **not**
351-
block brick 2.
404+
Canon:Custom correction) — orthogonal to per-tier ranking.
352405
2. **Build the deterministic rank-minter** (`ruff_spo_address`, pure std): SPO
353-
graph → `(po_rank, ia_rank)` per level → packed slots. Verifiable in
354-
isolation.
406+
graph → `(po_rank, ia_rank)` per level → packed slots. ✔ **DONE** — shipped as
407+
`mint` (naive, falsified) + `mint_factored` (corrected: positional path,
408+
`is_a`-from-`inherits`-only, truncation-disallowed).
355409
3. **Probe on MedCare**: `ruff_csharp_spo` harvest → mint → lance SoA →
356410
`typeHierarchy`/`definition` query → diff the class graph against the C#
357-
original, with `MedCareV2` as the parity oracle.
358-
359-
The per-tier layout is **locked** (the shipped `FacetCascade`), so brick 2 (the
360-
rank-minter) can proceed now — it writes into existing tiers, inventing no type.
361-
Only the classid half-order (Canon:Custom) remains a decision, and it is
362-
orthogonal to per-tier packing, so it does not gate the minter.
411+
original, with `MedCareV2` as the parity oracle. ✔ **RAN** (brick-3) — the naive
412+
mint falsified at scale, `mint_factored` corrects it, overflow→SoC-reroute
413+
handles god-classes. Proprietary numbers in the private MedCare-rs archive.
414+
415+
**Remaining open bricks (post-brick-3):**
416+
417+
- **Re-fetch pass** against the moved-forward public `ruff` (`origin/main`
418+
`b459ec3`+): diff current `ruff_spo_address` vs the archived snapshot, re-run
419+
`medcare_probe` to confirm the numbers on the *current* minter.
420+
- **Overflow→SoC-reroute automation**: the probe *flags* god-classes; wiring the
421+
reroute (split-or-escalate) into the mint pipeline is not yet built.
422+
- **classid half-order (Canon:Custom)**: still the one open ordering decision;
423+
orthogonal to per-tier packing, so it did not gate the minter.
424+
- **LSP serve end** (`ruff-lsp` → lance store): the read surface is still a clean
425+
slate (vanilla fork, no SPO/lance wiring).

0 commit comments

Comments
 (0)