session 2026-07-12: PENDING-56/57, REVIEWED filings, ledger

- PENDING-56 (canonical format + sidecar) + PENDING-57 (verbatim gate) filed and carried
  through the jurist rulings; REVIEWED-55/56/57 filed.
- REVIEWED-drafts-for-filing: the paste-ready records.
- Symmetria session-ledger: the full A1 -> schema-lock -> B2 -> verbatim-gate arc.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015jYS1tpR4P4NBxui4FSgfv
This commit is contained in:
David F Glidden
2026-07-12 21:06:40 +02:00
co-authored by Claude Opus 4.8
parent 0a424aa6b3
commit d9692f7418
4 changed files with 160 additions and 1 deletions
@@ -41,4 +41,36 @@ Executor-drafted for the steward to file into `~/dotfiles/REVIEWED.md` (Constrai
4. Keep the trust gates (`verify_body_conservation`, `normalize_ocr` verbatim-guard) on Docling output.
5. Loeb B2: rewrite `extract_loeb_dsl` → MD + sidecar, preserving the DSL color/`[sup]` typing.
6. Spec: v2.x amendment (Docling front-end + sidecar as graduated structural layer) — change-class PROPOSAL, runs the amendment process; retire `ocrmac_pdf` + EPUB cruft-strippers; reshape reprocess track B.
**Per-content check deferred to the B2 build (not a blocker):** whether `[c darkmagenta]` is apparatus-variants vs bilingual source-text — resolve by sampling volumes; the preserve principle covers both.
**Per-content check deferred to the B2 build (not a blocker):** whether `[c darkmagenta]` is apparatus-variants vs bilingual source-text — resolve by sampling volumes; the preserve principle covers both. **[RESOLVED 2026-07-12 by substrate probe: `[c darkmagenta]` = Loeb-reader-RENDERED headers (author/work/book), NOT apparatus; `[c dimgray]` = rendered line-anchors + page-markers + `[sup]` refs. The colors are the reader's rendering, usable as reliable role-CUES, attested honestly as `loeb-render:*`.]**
---
## REVIEWED-56 — LOCK ADDENDUM (whole-schema lock ruling, 2026-07-12)
**Date:** 2026-07-12
**Decision:** AUTHORIZED — whole-schema lock CONFIRMED (schema-side, unconditional)
**Corresponds to:** PENDING-56 (schema-lock) · Jurist RULING #2 `chamber-library/docs/...B2-evidence-and-whole-schema-lock-JURIST-RULING-2026-07-12.md` · Executor briefs `docs/sidecar-schema-FOR-JURIST-2026-07-12.md` + `docs/sidecar-schema-lock-addendum-B2-evidence-2026-07-12.md`
**Notes:** Second jurist ruling in the PENDING-56 arc — the schema LOCK (the first ruling ratified the format/architecture; this locks the `.meta.json` sidecar schema itself). Jurist confirmed on independently-checked B2 evidence, not deference:
- **Whole-schema lock CONFIRMED, unconditional on the schema side** → DRAFT (`docs/sidecar-schema-DRAFT-v0-2026-07-12.md`) flips to LOCKED. B2 (`scripts/build_loeb_sidecar.py`) demonstrated flag-and-hold *in code* on the corpus's densest apparatus volume (Ennius FRL Vol I: 44 concordance tables held as typed rows; Diophantus: 38 glyph char-images held with filename preserved) — read back from emitted JSON, not asserted. Every field held; **no missing field**.
- **§3 two minor items CONFIRMED, no schema impact:** (a) `source_declared: "loeb-render:*"` — a new *value* in the existing field's vocabulary, honestly naming a render-cue (weaker than `epub:type`); (b) `app[]` interior shapes `{kind:"table"}` + `{kind:"glyph"}` — principle-5 reserved slot resolved from real evidence.
- **§4 additive-only amendment discipline CONFIRMED + ONE ADDITION:** LOCKED = meaning/shape of every existing field (books trust them); FLEXIBLE (FIX-class, amendment lane) = new optional fields + new `app[]` kinds (backward-compatible; a pre-addition book simply lacks it); PROPOSAL = changing a locked field's meaning **— AND field REMOVAL** (jurist addition: a presence-checking consumer breaks identically from removal as from meaning-change; same silent-retroactive risk → same PROPOSAL treatment).
- **ONE condition MOVES (not closes), extractor-side, does NOT block the lock:** the jurist distinguishes apparatus *density* (what Ennius maximizes) from *diversity of kind*. "Densest volume fit the schema" ≠ "worst case seen" — a sparser volume among 952 could carry a third form (marginal sigla, interlinear glosses; already present in the corpus as `<ul>/<li>` lists + `<h2/h3/h4>` headings, which the v0 prototype does NOT yet hold). **Before B2 runs across the full ~952-book Loeb tier** (not before the lock): confirm/demonstrate a *generic* "unrecognized apparatus shape → flag-and-hold" fallback (mirroring the line-range join's flag-on-unresolvable), so safety is seen-or-unseen-independent. Extractor-completeness, behind the amendment.
**If AUTHORIZED:** file REVIEWED-56 (this addendum); flip the schema doc DRAFT → LOCKED; tag commits REVIEWED-56. Then, as separate additive amendments: the graduation-spec wiring (sidecar as graduated structural layer) + the B2 extractor completeness (generic fallback + `<section>`-div sections + footnote ref↔body pairing). Books may write against the locked schema meanwhile.
---
## REVIEWED-57 — Enforce `body_word_conservation` at graduation (the converter-agnostic verbatim trust gate)
**Date:** 2026-07-12
**Decision:** AUTHORIZED — FULLY RATIFIED (jurist, after a two-round demonstration loop)
**Corresponds to:** PENDING-57 · Jurist rulings (3): architecture → V-DSL-demo condition → full ratification · Brief `chamber-library/docs/verbatim-gate-enforcement-FOR-JURIST-2026-07-12.md`
**Notes:** The PENDING-52 gap closing at the foundational layer — the declared-but-unenforced `body_word_conservation` gate (listed in `graduation-spec.yaml` line 136, not enforced by `verify_graduation.py`) becomes the gate that is actually checked. Ratified by the jurist across three rulings, each demonstration-gated, not deference:
- **Architecture RATIFIED:** three-tier verdict FLAG→blocks · REVIEW→holds-for-curator · PASS→proceeds. REVIEW is real work (endnotes-keep vs index-drop can't be told by alignment position alone), not a soft pass. V-SCAN abstains by construction (no ground truth). Change-class **PROPOSAL** confirmed — distinct from REVIEWED-55's refusal-only-FIX exception because a FLAG / unresolved-REVIEW has NO already-trusted fallback route to canon.
- **Per-tier dispatch:** V-DSL (Loeb, re-extract) · V-TEXT (born-digital, re-convert + prose-word guard — BUILT, caught jacobs 888 / manguel 2856 / montaigne fn-id residue that audit_cruft missed) · V-SCAN (abstain). Provenance verified: spec v2.0.0 §Tiering & Fence is ratified (RATIFIED-SHAPE · OPERATION-BLOCKED) — this un-blocks a ratified shape.
- **V-DSL DEMONSTRATED, both halves (the jurist's demonstration condition):** the naive reuse of the V-TEXT k-gram check FALSE-FLAGGED a clean book (his caution vindicated) → corrected to a **reflow-tolerant word-multiset** on source-content body. FABRICATION: clean Apollonius (verse) + Plato Gorgias (prose) → 0 PASS; inject → FLAG naming tokens. LOSS (2nd condition): independent teeth via a boilerplate-vocab classifier — clean `lost_content 0 PASS`; drop a content word (`banquet`) → FLAG naming it. Both halves now on direct injection proof, not trust. Fleet fixtures both sides (`test_tools` 105→111).
- **Auto-PASS RATIFIED for V-DSL's loss side** — the demonstrated teeth suffices for the general case; the honestly-named residual (a dropped occurrence of a ~15-word boilerplate-vocab token, masked by its header count — can only lose a stopword or the author's name) does NOT warrant blanket REVIEW-routing. **Documented in the gate itself** (`verify_body_conservation.classify_dsl`, tagged REVIEWED-57) with a **revisit-trigger**: if the retroactive sweep ever surfaces a real instance of this masked-vocab failure, weigh tighter checking then.
- **§6 RETROACTIVE sweep RATIFIED as folded:** on landing, the gate runs BACKWARD across graduated canon (V-DSL 952 · V-TEXT 239) — diagnostic-map-first → remediation queue (FLAG=re-verify→reconvert; REVIEW=curator; PASS=re-attest), NOT silent de-graduation. Well-precedented by REVIEWED-55's own retroactive sweep (87 books, 0 had actually graduated dirty). Expect a non-trivial fraction (the 3/3 morning sample: jacobs/manguel/montaigne all graduated-clean, all failed). Companion efficiency (noted, not required): the LOCKED sidecar's `placement:back`+`role` resolves the REVIEW-tier endnotes-keep/index-drop ambiguity declaratively for any book carrying a sidecar.
- **43-book census CONFIRMED:** V-DSL 952 · V-TEXT 239 · V-SCAN 50 · V-SUSPECT 29 · V-NONE 14 = 1,284; the 43 = V-SUSPECT+V-NONE = the fenced-out tier (no confirmed source) → correctly outside the sweep (a provenance problem, not a coverage gap). Jurist noted (not a condition): these 43 are the same gap-shape PENDING-52 closes going forward — worth attention once the queue moves.
**If AUTHORIZED:** land by supersession into `graduation-spec.yaml` (make the listed `body_word_conservation` gate enforced + declare the per-tier dispatch) + `verify_graduation.py` (add the per-tier body-conservation gate with source access + tier dispatch) — tag commits REVIEWED-57. Follow-ons: the retroactive sweep run (diagnostic-first) once landed; the sidecar-declaration REVIEW shortcut when convenient; the 43 fenced-out books to source-location. The V-DSL loss residual + revisit-trigger are already in the gate's docstring.
@@ -43,3 +43,39 @@ metadata:
## Sub-agent dialogues
## Bypasses
## Wake re-entry (2026-07-12 ~13:41, after clean clear — same day)
- **Thread CONFIRMED, gate still stands.** Verified from files: REVIEWED.md tops out at **54** → REVIEWED-55/56 NOT filed; schema DRAFT (`sidecar-schema-DRAFT-v0-2026-07-12.md`, 11:51) exists but is **not locked**. PENDING-56 shows jurist ratified (recorded in PENDING) but "REVIEWED-56 *can be* placed" = not yet placed. ⇒ wired extractor remains BLOCKED; Q-A (lock schema) + Q-B (confirm Docling-per-spine-file) are the gate, and both are curator acts (steward+jurist), not mine.
- **Honest flag 1 (link-not-pure):** the wrap's named resumption anchor `in-flight-report-2026-07-12.md` is **absent on disk** (find across chamber-library + studium-engine returned nothing). Substance survives in the schema DRAFT + `chamber-program-open-work.md` + the session memory file's Q-A..Q-E; only the narrative report is missing. Surface at wrap; don't re-fabricate.
- **Honest flag 2 (governance-state latency):** `~/dotfiles` is **1 commit ahead of its remote** — previous wrap's §6.5 push didn't land. Resolve at wrap (not at wake).
- **Drift to hold (both 07-12):** *solving-at-the-wrong-level* (hold the substrate-native per-spine-file architecture when the extractor build begins — don't reach for another heuristic join) + *lost-the-forest* (keep the open-work register open as altitude check).
## Authorization moves (cont.)
- 2026-07-12 ~14:05 — **JURIST RULED the schema lock:** Q1(keep meta@1)/Q2(front/body/back)/Q4(notes linkage-only = PENDING-47 hash-locality reapplying)/Q5(schema-extractor separable — sharper reason: optional-additive absorbs even worst-case as a cheap additive field, not a relock) all CONFIRMED. Q3 schema-half ready; **ONE CONDITION**, gated to "before Loeb runs in earnest," NOT blocking the lock: the extractor must honest-flag source-apparatus structure it can't yet home rather than fold to `notes[]`.
- 2026-07-12 ~14:10 — **Return (verified, not assured):** jurist asked "confirm the extractor does this or add the refusal." Read BOTH extractors instead of assuring. Finding (honest, not convenient): `build_sidecar.py` = no Loeb-apparatus pathway (never sees DSL; section-level `role:apparatus` attested) → jurist's worry doesn't arise there. `extract_loeb_dsl.py` = **CURRENTLY FLATTENS** (`strip_tags` unwraps `[c darkmagenta]`/`[c dimgray]`, `[sup]`→`^N`, strips embedded HTML; MD-only, no sidecar/app[]/flag). So the condition is **real + unmet today**, but **not yet binding**: the B2 Loeb→sidecar extractor is UNBUILT and Loeb Region-4 reconversion isn't running in earnest. ⇒ condition = a **build-gate on B2** (flag-and-hold apparatus, mirror §3 null+flagged). Did NOT report "already satisfied" (the convenient answer); reported the flattening plainly.
- 2026-07-12 ~14:25 — **Looked at B2 NOW (steward challenge: run on one volume; DSL formatting ~consistent corpus-wide). Substrate probe of `loeb.dsl` (6.38M lines, ONE file, 537 vols).** Findings (verified, not inferred):
- **Color vocabulary = exactly TWO, uniform head→tail** (Apollonius/Dionysius/Aeschylus, Greek + Latin): `[c dimgray]` 2.16M · `[c darkmagenta]` 471K. Steward's uniformity instinct CONFIRMED **at the tag/color-grammar level** — one volume IS representative of the grammar.
- **Steward correction (load-bearing):** the colors are **Loeb-reader RENDERING aspects, not semantic source markup.** ⇒ they're presentation, but they correlate *perfectly + uniformly* with role → usable as extraction CUES, then discarded. Honest `source_declared` must name the cue as a render-signal (`loeb-render:darkmagenta`), NOT overclaim semantic declaration (attest-don't-default).
- **darkmagenta = rendered HEADERS** (author / work / book-section: "APOLLONIUS OF RHODES, Argonautica", "Book II. 40"). **NOT apparatus.** ⇒ the Jurist's "darkmagenta might be apparatus being flattened" worry is definitively answered: NO.
- **dimgray = the ANCHOR/PROVENANCE layer:** ~356,656 pure-number spans = canonical LINE anchors (→ `anchors[]`); ~246,622 "Page number N" = page PROVENANCE (→ `provenance.pages`); plus the `[sup]` footnote-ref wrappers (→ `notes[]`). **THIS is the real preserve-never-flatten target** — the current `extract_loeb_dsl.py` unwraps dimgray → line-numbers/pages dissolve into inline prose text. Uniform, quantifiable loss (~600K anchors+pages corpus-wide).
- **Embedded HTML is the ONE non-uniform thing:** `<section class="div1 front">` (TEI-ish structural divs!), `<table>` (643, genuine tabular content e.g. line-range maps), `<img>` 506, lists — present in only SOME entries (drama, complex works). ⇒ "one volume is representative" HOLDS for colors, FAILS for embedded structure: a simple prose volume won't exercise it. The real `app[]`/structured content lives here, not in the colors.
- **Reframe of the Jurist's condition:** apparatus criticus (variant readings) is NOT color-coded — it's footnotes + embedded HTML. So `app[]`'s eventual content is narrower than feared and the colors don't feed it; the colors feed `anchors[]`/`provenance`/`sections`/`notes`. The flatten-loss that IS happening now is the dimgray anchor/page layer.
- 2026-07-12 ~14:45 — **Scanned corpus for the B2 model volume (feature-density per work, grep-prefilter→awk).** Two embedded-structure classes, both genuine apparatus: (1) **concordance tables + TEI `<section class="div1">` divs** — richest in fragmentary works (ENNIUS Fragmentary Republican Latin Vol I: sec=50 tab=44 in ~1650 lines; Cicero/Basil Letters: sec-heavy, one `<section>` per letter); tables map fragment-numbering systems, `[sup]` nested in `<td>` — flattening destroys them. (2) **inline `<img class="glyph">` character-images** — math works (DIOPHANTUS img=37, ARCHIMEDES img=25): non-Unicode math/epigraphic symbols as PNGs (`alt="[special character]"`) = the **[[feedback-character-as-image-hazard]]** exactly; dropping mutilates. **PICK: ENNIUS Fragmentary Vol I** (~line 3717867) as primary model — densest genuine apparatus, tiny/hand-inspectable, modern-TEI, bilingual; its one gap (glyph-images) → optional tiny secondary DIOPHANTUS Algebra (~line 4479566). Model-after-the-hardest-case so the design generalizes down.
- 2026-07-12 ~15:10 — **Built + verified the B2 prototype (`scripts/build_loeb_sidecar.py`, read-only) — jurist's schema-lock condition DEMONSTRATED IN CODE.** Model = ENNIUS (11 works = the real FRL Vol I book) + DIOPHANTUS (glyph path). Architecture: keep MD verbatim (reuse governed `strip_tags` → `body_word_conservation` holds), ADD typed structure in sidecar; line-anchors EXACT-by-construction (B2 analog of Docling-per-spine-file). **Verified against emitted JSON, not asserted:** 44 concordance tables HELD as structured rows (vs current number-soup); Annals 238sec/288anch/252pg/344notes from the render-cues the flatten dissolves; Diophantus glyph branch fired = 38 glyphs held with PNG filename PRESERVED (vs `⟨†⟩`) → closes [[feedback-character-as-image-hazard]] for Loeb. **KEY FINDING FOR THE LOCK:** the DRAFT schema already has EVERY field B2 needs (`anchors`/`provenance.pages`/`notes`/`sections`/reserved `app`) — looking at B2 revealed NO missing field; flag-and-hold + glyph-rule are EXTRACTOR behavior, not schema shape. Honest round-two (logged, not hidden): TEI-`<section>`-div sections uncaptured (FRL Vol I sec=0); footnote ref↔body pairing deferred; discipline: ran Diophantus specifically because the glyph branch was untested code I wouldn't claim worked. Tool-review logged (`_curation/tool-evolution-log.md`). All dev-only/uncommitted; nothing wired to graduation, no push.
- 2026-07-12 ~18:40 — **JURIST RULED PENDING-57: architecture RATIFIED (FLAG/REVIEW/PASS · V-TEXT · V-SCAN · change-class PROPOSAL); full proposal NOT-yet-final pending a V-DSL DEMONSTRATION** (his lesson: simpler-sounding ≠ needs-less-proof). Two non-blocking follow-ons he raised: (a) **retroactive verification** — the morning's 3/3 already-graduated-clean books all FAILED the new check → run the gate BACKWARD across graduated canon, not just forward (REVIEWED-55-shaped, own answer owed); (b) **sidecar-declaration shortcut** for REVIEW tier — the LOCKED schema's `placement:back`+`role` already resolves endnotes-keep vs index-drop declaratively, so books with a sidecar skip the curator queue.
- **Provenance honesty-check (jurist flagged my 'already RATIFIES' claim):** VERIFIED against substrate → spec v2.0.0 §Tiering & Fence IS ratified (RATIFIED-SHAPE·OPERATION-BLOCKED) → claim HELD; ruling confirms, doesn't originate.
- **V-DSL DEMONSTRATED — and the demo vindicated the jurist:** naive reuse of the V-TEXT k-gram check FALSE-FLAGGED a clean Apollonius (1070 "fabrications", only 6 truly-new = the MD subtitle; rest = coverage misses from the DSL→MD REFLOW). Corrected → **reflow-tolerant word-multiset** on source-content body: Apollonius fab=0 PASS · Plato Gorgias fab=0 PASS · teeth catch injection. Honest residual: fabrication half gate-ready; content-vs-boilerplate DROP side delegates to the extractor's integrity report. Brief §3.5 written; fixture added (test_tools 105→109). **Back to the jurist for the final ruling.**
- 2026-07-12 ~20:40 — **Doc-currency pass (steward-directed: "future-us shouldn't guess/reinvent/ignore a solution we already had").** Audited chamber CLAUDE.md + runbook vs today's work; fixed the anti-reinvent gaps: **CLAUDE.md** — added `build_loeb_sidecar` (B2, preserve-aware) + `verify_body_conservation` (verbatim gate, REVIEWED-57) to the fleet; rewrote the Loeb-DSL terminology (colors=render-cues; `extract_loeb_dsl` FLATTENS vs `build_loeb_sidecar` PRESERVES — use the latter for reconversion); schema DRAFT→LOCKED + additive-only; added the **check-for-existing-tool/register-before-building** load-bearing discipline (the day's meta-lesson). **Runbook** — pipeline_direction names both extractors + the gate + REVIEWED-56/57 status. **Deprecated-scripts answer: NONE archivable now** — `extract_loeb_dsl` is a live dependency (imported by build_loeb_sidecar + verify_body_conservation) + producer of the current 952 canon; the ocrmac_pdf/EPUB-cruft-strippers are SLATED for retirement by the 2b amendment (unlanded → stay authoritative → don't archive early). **INSTITUTIONALIZED (steward-directed):** added a standing **"Doc-currency on wrap"** protocol to BOTH chamber-library/CLAUDE.md and studium-engine/CLAUDE.md (6-point checklist: fleet/build-state · status markers · substrate-terminology · disciplines · deprecated-verify-before-archive · tool-review) — the mirror of each repo's read-first protocol, so wrapping work THERE keeps THOSE docs current, not memory.
- 2026-07-12 ~19:45 — **PENDING-57 FULLY RATIFIED (jurist, 3rd ruling).** Both conditions met; auto-PASS ratified for V-DSL loss (residual too narrow for blanket REVIEW — can only lose a stopword/name). Two jurist follow-ups DONE: (a) stale "wiring not yet written" brief note fixed; (b) the loss-teeth residual + **revisit-trigger** documented IN THE GATE ITSELF (`verify_body_conservation.classify_dsl`, tagged REVIEWED-57). **REVIEWED-57 drafted** for steward filing. 43-book gap confirmed (V-SUSPECT+V-NONE fenced-out). LANDING (wire into verify_graduation + graduation-spec, tag REVIEWED-57) awaits the steward's REVIEWED-57 filing — a real integration (source access + tier dispatch), best fresh.
- 2026-07-12 ~20:10 — **PUSH-FURTHER: bounded retroactive V-DSL diagnostic probe (ratified §6, read-only) on 9 graduated Loeb canonicals.** Matched each to its DSL work by its own H1 (= the work string), one stream. **7/9 PASS clean.** 2 FLAG (Aristotle Metaphysics, Euripides Medea) — **VERIFIED false-positives, not content loss**: lost tokens all high-freq stopwords (καὶ 4514 vs 4517, τὸ 3021 vs 3023); I hypothesized accent-drift, CHECKED, REFUTED it (καί=0 both; accent-normalization changed nothing) → it's **scattered small cross-extractor tokenization drift** (old extractor dropped a few function-word occurrences vs the reference). **Finding:** forward gate unaffected (same tokenizer, threshold-0 correct, ratified); the RETROACTIVE sweep needs a cross-extractor **drift-tolerance / distinctiveness filter** (ignore high-freq function-word drift, flag distinctive content drops) BEFORE the 952-book run, else mass false-flags. De-risks the ratified sweep, found on 9 books — diagnostic-first working as designed. Probe script in scratchpad (read-only, no de-graduation).
- 2026-07-12 ~19:15 — **JURIST FINAL-RULED PENDING-57: RATIFIED on 2 conditions; BOTH addressed same turn.** (1) V-DSL loss half lacked the fabrication half's independent injection proof (delegated to extract_loeb_dsl self-report) → **built independent loss teeth** (boilerplate-vocab classifier): clean `lost_content=0 PASS`, drop content word `banquet` → `FLAG` naming it; fleet 105→111; honest bound = blind to masked boilerplate-vocab-word occurrences (the edge his REVIEW-routing guards; his call on auto-PASS vs REVIEW kept). (2) 43-book census gap = V-SUSPECT 29 + V-NONE 14 = the **fenced-out** tier (no source) → correctly excluded from the sweep; not a gap. Brief updated (§3.5 loss teeth + §6 census); PENDING-57 updated. Awaiting jurist confirmation conditions closed → REVIEWED-57. **Full gate now: fabrication + loss both independently teethed, both tiers demonstrated.**
- **Folded (steward-directed) the RETROACTIVE clause into PENDING-57 (§6) to rule together:** on ratification the gate runs BACKWARD across graduated canon (952+239) → diagnostic-first remediation queue (not silent de-graduation), motivated by the jurist's 3/3. Sidecar-declaration REVIEW-shortcut recorded as a noted efficiency (not a condition). Brief + PENDING-57 updated; brief delivered to steward for relay.
- 2026-07-12 ~18:00 — **Proceeded on the two parallel tasks the steward authorized (sequence step 1 + 2a):**
- **#1 KEYSTONE PROPOSAL drafted + FILED:** enforce `body_word_conservation` at graduation (converter-agnostic verbatim trust gate; listed in graduation-spec but unenforced). FOR-JURIST brief `docs/verbatim-gate-enforcement-FOR-JURIST-2026-07-12.md` + **PENDING-57 filed** to dotfiles. Per-tier method (V-DSL re-extract / V-TEXT built / V-SCAN abstain) already ratified by §Tiering&Fence; three-tier verdict gates (FLAG blocks / REVIEW holds / PASS). Into the jurist loop.
- **#2a FOOTNOTE PAIRING built (honest v1, in fleet 105/105).** Ref vs body classification; document-order pairing; honest-flag unpaired. **4-iteration PASS-BUT-FALSELY lesson:** Plato prose 96% LOOKED done → *reading the Apollonius orphans* (not trusting the apparatus hypothesis) exposed `in_fn` LEAKING into main verse + a 28-line note-range over-extension (fixed → start-line only). Genre-heterogeneous: settled conservative both-signals → **prose 96% / drama 94% / verse 66% / fragments 48%**, all unpaired honest-flagged, 0 false-pairs. Full per-genre pairing = further sub-project; stopped rather than over-fit one genre. Tool-review logged.
- All chamber work dev-only/uncommitted; PENDING-57 is on dotfiles (steward reviews/pushes). No graduation wiring.
- 2026-07-12 ~16:45 — **REVIEWED-55 & 56 FILED by steward → schema officially LOCKED.** Schema doc status → LOCKED. B2 built against the locked schema (safe: additive-only).
- 2026-07-12 ~17:00 — **B2 → FLEET-v1 (`build_loeb_sidecar.py` in test_tools, 104/104).** Added the jurist's generic fallback + `<section>`-div/heading capture + multi-author/`--targets` + fixture. **Diverse-by-KIND verification (Aeschylus/Plautus/Plato/Herodotus/Diophantus/Ennius, ~90 vols, Greek+Latin) VINDICATED the jurist's density≠diversity catch on the FIRST look:** naive fallback false-fired on `<que>`/`<per>` = the **critical-edition angle-bracket convention** (editor-supplied readings), NOT HTML → fixed by HTML-vocab-vs-`<word>` classification → surfaced a genuine **THIRD apparatus kind** (`editorial-insertion`, 2315) a density-model would miss, AND a real content-loss (governed `strip_tags` DELETES them; sidecar preserves). Across all 6 kinds the net caught only lists + **0 truly-novel** → structural space BOUNDED {table,section,heading,glyph,list,editorial-insertion}; net still fires on novel (fixture: `<figure>`). Fixed running-header section dup (48→1). **Honest deferred (additive, non-blocking, doesn't touch LOCKED schema):** footnote ref↔body pairing (the ~2238 `list` holds are mostly note-bodies rendered as `<li>`); a PLATO "Mathematical Works" data-quirk; graduation-wiring = the separate PROPOSAL. Tool-review logged. All dev-only/uncommitted; no push.
- 2026-07-12 ~16:00 — **JURIST RULING #2: WHOLE-SCHEMA LOCK CONFIRMED (unconditional, schema-side).** DRAFT → LOCKED on steward's REVIEWED-56 filing. Additive-only discipline CONFIRMED + **field-removal added to the PROPOSAL triggers** (a presence-checking consumer breaks identically from removal as from meaning-change). §3 two minor items confirmed. **Sharp jurist catch I OWN: I conflated apparatus DENSITY (Ennius) with DIVERSITY-of-kind — "densest fit the schema" ≠ "worst case seen."** One condition MOVES (not closes), extractor-side, does NOT block the lock: before B2 runs across the full ~952-book tier, confirm/demonstrate a *generic* "unrecognized shape → flag-and-hold" fallback (mirroring the line-range flag-on-unresolvable). His catch is REAL not hypothetical — corpus already has `<ul>/<li>` (30K) + `<h2/h3/h4>` the v0 holds NEITHER (only table+glyph). **Prepared for the steward:** REVIEWED-56 lock-addendum draft (in `REVIEWED-drafts-for-filing-2026-07-12.md`); schema doc updated → lock-confirmed status + additive-only §4 (incl. field-removal) + §5 moved-condition + folded the 2 minor items. Did NOT flip to LOCKED unilaterally (steward's filing = the ratifying act); did NOT build the fallback this turn (non-blocking, gated to the full-run, deserves its own considered pass — avoid barrel-forward). REVIEWED-55 also still steward-owed.
- 2026-07-12 ~15:30 — **Wrote the schema-lock ADDENDUM for the jurist** (`docs/sidecar-schema-lock-addendum-B2-evidence-2026-07-12.md`): B2 condition satisfied in code (before/after table); the load-bearing finding = **no missing field** (hardest volume fit the schema as drawn); 2 minor new items (loeb-render:* attestation vocab + demonstrated `app[]` kinds table/glyph); §5 honest round-two (extractor, not schema). **Load-bearing governance contribution — the additive-only lock:** named that "lock the whole schema WITH flexibility" is a *soft lock* (untrustworthy) UNLESS the flexibility is drawn as additive-only — LOCKED = meaning/shape of existing fields (books trust them); FLEXIBLE = new optional fields + new app[] kinds via the amendment lane (backward-compatible); NOT flexible = mutating a locked field's meaning (=PROPOSAL). This is the jurist's OWN Q5 property turned into the amendment discipline. Surfaced for jurist confirmation; did NOT presume it. REVIEWED-56 draft deliberately deferred until the jurist confirms the addendum (not presuming the loop's outcome). REVIEWED-55 also still steward-owed.
- 2026-07-12 ~13:50 — **Wrote jurist relay for the schema-LOCK (Q-A):** `chamber-library/docs/sidecar-schema-FOR-JURIST-2026-07-12.md`. Carries the ratified principles + the current schema + evidence read-back-from-drafts (jacobs 34/37, montaigne 2/17 line-range join — worst-case stated, not averaged) + 5 questions FOR the jurist to rule on (schema-id/compat · placement-as-drop-vs-keep · app reserved-undesigned · notes linkage-only · does-lock-depend-on-Q-B-join-quality). Executor lean marked on each; lock left as steward's, informed by jurist. Did NOT lock, did NOT pre-decide — surfaced. Fittingness ✓ (steward asked), craft ✓ (grounded in substrate not memory), ethics ✓ (full picture for jurist), character ✓ (honest at worst-case).