- 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
13 KiB
REVIEWED drafts — paste-ready for filing (2026-07-12)
Executor-drafted for the steward to file into ~/dotfiles/REVIEWED.md (Constraint #1: Claude Code cannot write REVIEWED.md). Both correspond to already-ruled items. Confirm against the source rulings before filing.
REVIEWED-55 — EPUB footnote pre-processor: end-to-end verify + recognizer arc
Date: 2026-07-12
Decision: AUTHORIZED (as ruled by the jurist; steward-confirmed)
Corresponds to: PENDING-55 · Jurist ruling chamber-library/docs/end-to-end-verify-and-nested-block-JURIST-RULING-2026-07-12.md
Notes: Ratifies the jurist's ruling on the footnote arc:
- Q1a — end-to-end verify RATIFIED, FIX-class on the refined test: a §V-chain component is FIX when it (i) only ADDS refusals, (ii) never alters text, (iii) falls back to an already-trusted path.
verify_end_to_endsatisfies all three — turns the guarantee from verbatim-safe by construction to by verification. - Q1b — MANDATORY at graduation (
--no-verifyforbidden at graduation whilebody_word_conservationis unenforced), PERSISTS after that gate lands (defense-in-depth), + RETROACTIVE re-verification required. [Retroactive sweep DONE (6c9ca43): 87 covered books · 42 clean / 45 dirty; corpus SAFE — 0 dirty graduated; recognizer's reliable coverage ≈42/87.] - Q1c — marker-exclusion made POSITIONAL (DONE,
e8eeea7). - Q2 — nested-block FIX RETRACTED, honest-refuse CONFIRMED (the widen pairs but converts dirty; the end-to-end verify caught it; reverted). A fresh PROPOSAL required if ever revisited. Jurist generalization: structural safety = provisional FIX; end-to-end verbatim proof on real books = final.
- Broader flag (jurist):
body_word_conservationdeclared-but-unenforced is the same gap-shape PENDING-52 closed, recurring → now addressed by PENDING-56 (the general verbatim gate = the converter-agnostic trust layer).
If AUTHORIZED: Proceed; tag commits REVIEWED-55. Open follow-ons: wire mandatory-at-graduation (flow must not pass --no-verify); the recognizer-maturity decision (improve over-pairing vs accept 42-clean + fallback) is now subsumed by PENDING-56 — the recognizer repositions as the sidecar note-extraction layer.
REVIEWED-56 — Canonical format: adopt Docling + complete MD-canonical + TEI-mirroring structural sidecar
Date: 2026-07-12
Decision: AUTHORIZED
Corresponds to: PENDING-56 · Jurist RATIFICATION 2026-07-12 · Brief chamber-library/docs/canonical-format-decision-FOR-JURIST-2026-07-12.md
Notes: Steward-decided on the four-tier Docling trial evidence (AskUserQuestion, 2026-07-12); jurist RATIFIED on independently-verified reasoning (not deference):
- Option A — canonical = clean Markdown (Docling-converted, verify gates on top) + a
.meta.jsonstructural sidecar whose vocabulary MIRRORS TEI (front/body/back;note @place=foot|end;milestone/anchor; reservedappslot;pb/page-provenance). - D1 — adopt Docling as the EPUB/PDF/scan conversion front-end (MIT, local, per-element provenance); production OCR on CapableHands (M4). Docling crosses the A3 OCR frontier
ocrmaccould not. - Change-class: PROPOSAL (changes what graduation produces; touches engine consumer contract §X; whole corpus).
- Flip-condition tested by the jurist, NOT triggered for v1: the engine needs neither structured critical-apparatus (A5) as data nor DTS-interoperability in v1 (voice-manifest = interpretive-persona per PENDING-53, not manuscript-variant; the Loeb tier's Stephanus/Bekker need is anchors [B2, which A provides via the sidecar anchor-map], not apparatus). TEI = documented, revisitable future-migration path with those two named triggers.
- Two schema-gating questions CLOSED before schema lock (brief §8), from substrate evidence:
- Q1 — recognizer arc REPOSITIONED, not retired: Docling emits flat reference-links (0 native
[^N], 48[*](#…);epub_backendnever readsepub:type) → this week's 8-family detection + cross-file anchor resolution + end-to-end verify becomes the sidecar's note-extraction layer; the verify stays as the converter-agnostic verbatim gate. - Q2 — CARDINAL EXTRACTOR PRINCIPLE: the Loeb DSL is typed (
[c dimgray]2.15M ·[c darkmagenta]471K ·[sup]) and the current extractor flattens it → the extractor MUST preserve every source-declared typed distinction into a typed sidecar field, never flatten to prose — makes TEI-migration mechanical-by-construction.
- Q1 — recognizer arc REPOSITIONED, not retired: Docling emits flat reference-links (0 native
If AUTHORIZED: Proceed on the architecture; tag commits REVIEWED-56.
- Adopt Docling as the conversion front-end; production OCR on CapableHands.
- Author the
.meta.jsonsidecar schema on the two cardinal principles. - Build the sidecar extractor (EPUB metadata + Docling PDF labels + note-linkage), honest-flag undeclared roles; prove on montaigne (EPUB2) + jacobs (EPUB3).
- Keep the trust gates (
verify_body_conservation,normalize_ocrverbatim-guard) on Docling output. - Loeb B2: rewrite
extract_loeb_dsl→ MD + sidecar, preserving the DSL color/[sup]typing. - 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. [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 asloeb-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 thanepub: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_tools105→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+roleresolves 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.