Skip to content

Commit 5a9d845

Browse files
committed
Remove textord_facet from agnostic lance-graph (operator ruling)
Domain substrate does not live in the agnostic spine: the textord facets belong to the ruff->OGAR producer path (ruff_spo_address::Facet + ogar-from-ruff mint/emit, concepts minted in ogar-vocab) or to the tesseract-rs consumer -- all four repos compile into one binary, so there is no linking excuse. The removed facets also misused the classid low u16 as a shape ordinal where the canon-high flip defines it as the app render prefix (0x0806_0001 reads as "blob rendered by app 0x0001", a collision). Board: E-OCR-FACET-HOME-CORRECTION-1 (ruling appended; E-OCR-TEXTORD-FACET-1 Status -> SUPERSEDED). Co-Authored-By: Claude <[email protected]> Claude-Session: https://claude.ai/code/session_016b33swuXE23hKtqxsHu9p1
1 parent 2c4e971 commit 5a9d845

4 files changed

Lines changed: 12 additions & 973 deletions

File tree

.claude/board/EPIPHANIES.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
## 2026-07-07 — E-OCR-FACET-HOME-CORRECTION-1 — operator ruling: domain substrate does NOT live in agnostic lance-graph — textord facets removed; the facet producer is ruff→OGAR
2+
**Status:** RULING (operator-corrected same day; code removed in this commit)
3+
4+
`textord_facet.rs` (E-OCR-TEXTORD-FACET-1, Batch 3D) violated TWO canons and is removed from `lance-graph-contract`:
5+
6+
1. **Wrong home.** lance-graph is the AGNOSTIC spine; Tesseract-domain substrate belongs in OGAR (the codebook/ClassView/facet producer — `ogar-vocab`, `ogar-class-view`, `ogar-from-ruff`) or in tesseract-rs (the consumer). All four repos (lance-graph + tesseract-rs + OGAR + ndarray) compile into the same binary, so there is no linking excuse for parking domain code in the agnostic layer. Likewise domain HARVESTS stay in the consumer repo (tesseract-rs `.claude/harvest/`), never dumped into lance-graph.
7+
2. **Canon-low misuse.** The facets used the classid low u16 as a shape ordinal (`0x0806_0001` = "BLOBNBOX"). Per the canon-high flip (OGAR `APP-CLASS-CODEBOOK-LAYOUT`, `ogar-from-ruff::mint`), the low u16 is the APP render prefix (`PortSpec::APP_PREFIX`) — `0x0806_0001` canonically means "concept blob, rendered by app 0x0001", a real collision. Distinct shapes are distinct CONCEPTS (hi u16, minted in `ogar-vocab`) or ClassView readings of the payload — never low-half ordinals.
8+
3. **Hand-rolled what ruff already provides.** `ruff_spo_address::{Facet, Mint, mint_with_classid}` + `ogar-from-ruff` mint/emit are the existing producer path ("never hand roll — use ruff; if anything is missing, expand ruff"). The redo goes through that machinery, in OGAR, driven by the banked tesseract-rs textord manifest.
9+
10+
The dict wire-format leaves (`dawg.rs`) stay for now — they follow the already-merged unicharset/recoder/network precedent — but the same ruling marks that precedent for review: Tesseract-domain content shapes may migrate from lance-graph-contract to tesseract-core/OGAR in a dedicated follow-up. Cross-ref: E-OCR-NETWORK-SINK-1 (compose_classid(0x0804, ntype) has the same low-half pattern — audit alongside).
11+
112
## 2026-07-07 — E-OCR-SEARCHABLE-PDF-1 — D4.5 searchable-PDF renderer round-trip green; Batch-3E makerow harvest banked — P4+P5 output surfaces COMPLETE, the textord marathon is cut
213
**Status:** FINDING (round-trip proven with our own extractor; `tesseract-ocr-pdf`, tested)
314

@@ -8,7 +19,7 @@
819
Pipeline state: **PDF (digital or scanned) → text/TSV/hOCR/searchable-PDF, pure Rust end-to-end.** Remaining for parity depth: 3E makerow port (replaces seg-approx), P6 golden corpus. Plan `tesseract-rs/.claude/plans/pdf-to-text-ocr-v1.md`. Branch `claude/happy-hamilton-0azlw4`.
920

1021
## 2026-07-07 — E-OCR-TEXTORD-FACET-1 + E-OCR-SCANNED-PDF-1 — Batch 3D ccstruct facets on V3 SoA; D5.2 embedded-image extraction — **scanned PDF → OCR text is CLOSED, pure Rust**
11-
**Status:** FINDING (3D: 849 contract tests green, field mappings header-cited; D5.2: 12/12 tests, E2E proven; lance-graph `4af7e8d5`, tesseract-rs `52fcf73`)
22+
**Status:** SUPERSEDED (operator, 2026-07-07 — see E-OCR-FACET-HOME-CORRECTION-1: canon-low misuse + wrong home; code removed from lance-graph-contract)
1223

1324
**3D (`lance-graph-contract/src/textord_facet.rs`):** the 7 textord data shapes (TBOX, BLOBNBOX, ROW, TO_ROW, BLOCK, TO_BLOCK, POLY_BLOCK) sunk onto `facet::FacetCascade` per the network-sink precedent — classid = minted 0x0805 (textline) / 0x0806 (blob) / 0x0807 (page_layout) canons × shape-ordinal custom-low; NO new mints. Field→rail tables per shape with header citations (i16 box coords lossless on rails; floats rounded/fixed-point with documented loss, TO_ROW baseline slope ×10000); intrusive ELIST links + pointers routed to EdgeBlock per doctrine, list content stays content-store. The banked 239-class manifest confirmed these are containers, not a vtable hierarchy — the sink is field inventory. 10 new tests.
1425

crates/lance-graph-contract/examples/textord_facet_dump.rs

Lines changed: 0 additions & 82 deletions
This file was deleted.

crates/lance-graph-contract/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,6 @@ pub mod splat;
136136
pub mod tax;
137137
/// Per-tenant SoA update counters — debug instrumentation (feature `tenant-counters`).
138138
pub mod tenant_counter;
139-
pub mod textord_facet;
140139
pub mod thinking;
141140
pub mod unichar;
142141
pub mod unicharcompress;

0 commit comments

Comments
 (0)