Files
dotfiles/claude/memory/session-ledger-2026-07-12.md
T

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.
node_type type originSessionId
memory feedback ae9583d2-fd25-45e4-85fc-df082fe2e951

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_conservation verbatim 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 .dsl file (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.json structural 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.json sidecar 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.

Sub-agent dialogues

Bypasses