Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015jYS1tpR4P4NBxui4FSgfv
8.0 KiB
8.0 KiB
name, description, metadata
| name | description | metadata | ||||||
|---|---|---|---|---|---|---|---|---|
| session-ledger-2026-07-12 | Practice-of-return ledger maintained by /symmetria — returns, open horizons, recalibrations, authorization moves, sub-agent dialogues, bypasses. |
|
Session Ledger — 2026-07-12
Returns
- 2026-07-12T09:10 — Return (caught before asserting): was about to derive the A1 acceptance criterion from scratch. Read the spec first (chamber discipline: check governed doctrine before building) → the §Tiering&Fence evidence-tier table already RATIFIES the per-tier method: V-DSL = "re-extract + diff (deterministic)", V-TEXT = "re-convert + prose-word-guard (deterministic; source IS ground truth)", V-SCAN = "OCR-vs-scan, no ground-truth text". The steward's reference-conversion question is answered YES-it's-doctrine; the promotion criterion is
RATIFIED-SHAPE · OPERATION-BLOCKED= exactly A1. Reframe: A1 is operationalize a ratified criterion, not invent one. Avoided re-deriving existing doctrine (the exact drift the library exists to prevent).
Open horizons
- 2026-07-12T09:40 — A1 feasibility PROVEN (read-only prototype
scripts/verify_body_conservation.py). Ratified per-tier method works: re-convert(source) + coverage-align vs candidate. difflib→shingle-coverage pivot (steward challenge, well-caught): difflib O(n²) timed out on jacobs @2min; swapped to O(n) hashed-k-gram coverage (in-house patterns: Instrument B fingerprint + verbatim-guard walk; NO new dep) → jacobs 6.8s, manguel 4.3s. Seed ground-truth PASSES (legit boundary trim→REVIEW, interior 120-word deletion→FLAG). All 3 real books FLAG on REAL grep-confirmed cruft (jacobs 888 calibre_link · manguel 2856 []{#…epub…htm} anchor-spans · montaigne footnote-id residue) — each a different signature, all missed by audit_cruft. KEY IMPLICATION: gate is MORE sensitive than audit_cruft → large fraction of existing canon will FLAG (= the tool-log's "160 hidden-residue" finding) → big blast radius → confirms PROPOSAL-class + ties A1 to reprocess track B. - Residual (jurist-class, unchanged): (1) boundary drop-vs-keep identification — endnotes/bibliography (keep) sit at the same TAIL position as index (drop); the tool SURFACES trailing runs as REVIEW, does not auto-pass. (2) interior-run threshold calibration (k=8, thr=50 tolerates heading-reformatting deltas of 6-7 words; caught on jacobs ToC). (3) added-direction needs symmetric link/anchor canonicalization so a clean-but-differently-converted candidate isn't confounded (minor tokenizer hardening).
- (superseded) earlier 08:55 A1 horizon — now concrete above. (general
body_word_conservationverbatim gate), the open-work register's keystone. Criterion-first, not code-first. Weigh the reference-conversion framing (candidate vs plain-pandoc-of-source) before building. - Closeable-today small items: wire mandatory-at-graduation for the footnote verify (jurist Q1b — flow must not pass
--no-verify); register hygiene (stale "jurist nod owed" line — Q1a gave it). - Steward-owed (parallel, not mine): place REVIEWED-55 (verified absent — REVIEWED.md stops at 54); decide the recognizer-maturity question (register A2
[?]).
Confidence to recalibrate
- Carry from last session: drift-pattern lost-the-forest-for-the-trees in long execution arcs. Antidote = hold the open-work register (
chamber-library/docs/chamber-program-open-work.md) as the standing forest view; stay keystone-first. Do not descend into A1 mechanism before the criterion is settled. - Carry: don't rank a sequence that ignores a dependency the census already flagged (07-12 recommended frontmatter-before-reconversion; corrected).
Tooling-scan reframe (2026-07-12, steward-driven — the pivot of the session)
- Steward challenged the whole approach TWICE ("is difflib best now scope is wider?" → "no extant epub/TEI tools?"). Load-bearing finding: the substrate answer was ALREADY in our register (
studium-engine-scan-register.md, 2026-05-27 pass: Docling+Surya, OCR4all, TEI/IIIF/DTS, §10.3 MD-vs-TEI pending) — and in ~6 weeks since we hand-built ~20 bespoke conversion/verify tools instead. The two-week "every breakthrough → new obstacle" feeling = signature of reimplementing a solved domain. Kin to feedback-resurface-banked-notes-before-rederiving at pipeline scale. - The clean split: substrate (conversion Docling/GROBID · format TEI · citation DTS) = SOLVED/adoptable; composition (integrity-bound voice-attributed verbatim consultation = the engine) = does not exist, stays ours. Adopt substrate, spend effort on differentiator.
- Verified from source: Docling (MIT, local/air-gapped, EPUB+PDF+images, per-element provenance, label taxonomy incl. footnote/page_header/section_header/caption — the semantic layer MD lacks; exports MD/JSON not TEI). GROBID (PDF→TEI, 68 labels incl. footnotes/bibliography = A5). DTS (citable canonical-passage API, engine is natural consumer). Loeb is a
.dslfile (already structured) → NOT a docling case (steward correction). - Register updated with the 2026-07-12 verified-from-source pass + the reframe.
Two decisions surfaced (I decide neither)
- (A) Docling bounded trial — IN PROGRESS (steward said Proceed). Local isolated venv (py3.13; CapableHands is py3.9.6, too old); harness
scratchpad/docling_trial.py; sample montaigne.epub + jacobs.epub + infinity-of-lists-eco.pdf (text) + mal-darchive.pdf (scanned = A3/OCR test). Tests: does docling emit clean, semantically-labelled, provenanced output where our pipeline leaves cruft (jacobs 888 calibre_link · manguel 2856 []{#…})? Incumbent-bias: our pipeline IS the incumbent → steward judges. - (B) ESCALATE — §10.3 canonical-format decision (MD+sidecar vs TEI), pending since seed brief. Docling structured-JSON = middle path; A informs B; B is steward+jurist (touches engine consumer contract §X + whole corpus).
Authorization moves
- 2026-07-12 — CANONICAL FORMAT DECIDED (steward, on the trial evidence, via AskUserQuestion): Option A — MD-canonical + TEI-mirroring
.meta.jsonstructural sidecar; + Adopt Docling as the EPUB/PDF/scan conversion front-end (production OCR on CapableHands M4). Brief written (chamber-library/docs/canonical-format-decision-FOR-JURIST-2026-07-12.md), stamped with the decision, delivered to steward + relayed to jurist for ratification. PENDING-56 filed (dotfiles). REVIEWED-56 to follow after jurist ratification. Flip-condition the jurist tests: does v1 need structured apparatus (A5)-as-data or DTS-interop? (read: no.) - Docling installed + trialed on M4 (py3.12 venv) + M1 (fallback). Both remotes clean.
- JURIST RATIFIED PENDING-56 (2026-07-12) — Option A + D1, independently-verified (flip-condition tested, not triggered). Two schema-gating Qs CLOSED with substrate evidence (brief §8): Q1 recognizer-arc REPOSITIONED not retired (Docling emits flat
[*](#…)not native[^N]; epub_backend ignores epub:type) → it becomes the sidecar note-extraction layer, verify stays. Q2 Loeb DSL is TYPED ([c dimgray]/[c darkmagenta]/[sup], 2.15M+ spans) & current extractor FLATTENS → CARDINAL PRINCIPLE: extractor PRESERVES source typing into typed sidecar fields, never flatten (→ TEI-migration mechanical-by-construction). Schema now unblocked. REVIEWED-56 can be placed. - Owed / next (execution, mostly post-ratification): build the
.meta.jsonsidecar extractor (TEI-mirroring vocab; EPUB metadata + Docling PDF labels; READ-ONLY, safe to prototype pre-ratification); wire Docling into the graduation pipeline (spec amendment — waits for ratification); retire ocrmac_pdf + EPUB cruft-strippers; reshape reprocess track B (Docling→sidecar→verify→graduate); Loeb B2 DSL→MD+sidecar. Parallel: steward still owes REVIEWED-55 placement. - A1 build will land as a PROPOSAL (changes graduation acceptance for ALL conversions — governed). Mechanism is refusal-only (Q1a FIX-test), but the criterion is what the jurist rules on. Surface, don't cross unilaterally.