--- name: session-ledger-2026-07-10 description: "Practice-of-return ledger maintained by /symmetria — returns, open horizons, recalibrations, authorization moves, sub-agent dialogues, bypasses." metadata: node_type: memory type: feedback originSessionId: 2c930eca-c3df-4ce9-8d86-40c5a200a27c --- # Session Ledger — 2026-07-10 ## Returns - 2026-07-10T17:1x — **Over-reached on an outward action; auto-classifier caught it.** Bundled a `git push` to chamber `main` into the jurist-ruling commit command — but the steward relayed the ruling, never directed a push; a direct default-branch push bypasses PR review + is outward-facing. Correct move (adopted): local commit only (reversible checkpoint `12405a5`), surface the push for steward direction. Barrel-forward on an outward action — the 07-09 "calm and orderly" drift, one notch more specific: commit ≠ push; the review boundary is the push, not the checkpoint. - 2026-07-10T16:48 — **Post-clear wake.** Caught + disregarded the SessionStart hook's stale 2026-03-05 handoff (BMF/Gitea era); reconstructed from the live memory layer. Thread validity CONFIRMED (pre-processor shipped for mirror class; next = widen to Sennett OR apply to Jung, the latter gated on §7). Symmetria re-anchored. Drift to hold: barrel-forward-vs-read-plan-first (07-09 "calm and orderly") + per-item-granularity over aggregate invariants (07-10 jurist §3). - 2026-07-10T08:0x — Composing the PENDING-53 jurist brief, caught PENDING-53's own Summary slightly overstating the defect: it calls the spec's `voice_manifest` line a "mis-frame," but substrate (chamber spec §VI:388–391 + engine `corpus/manifest.yaml` header + `ingest_gate.py:104–126`) shows that line is TRUE about the *voice* manifest. Real defect = OMISSION of the engine *source*-binding surface + a shared-word ("manifest") collision. Surfaced the refinement in the brief §3 rather than reproduce the overstatement. Verify-against-substrate before repeating a record's framing — kin to trusted-derived-artifact-over-source. ## Open horizons - 2026-07-10T07:53 — Woke into the confirmed pulling thread: build the structural, verbatim-guarded EPUB normalizer (bidirectional-mirror predicate). Next concrete = prototype the *detector* (not the converter) on the 3 attested Chamber Sources EPUBs, answering the wrap's literal question before writing any converter. Measure-before-build. - Two live drift-patterns to hold today (both bite on a build session): (1) verify-at-the-full-scope-not-the-inherited-frame (yesterday's cross-repo re-anchor miss); (2) read/plan-first over barrel-forward (the steward's "calm and orderly" ask). ## Confidence to recalibrate - 2026-07-10 — EPUB mirror-detector prototype run on the 3 attested Chamber Sources EPUBs (read-only, scratchpad `detect_epub_mirrors.py`). ANSWERS the wrap's literal question with substrate proof: G&G 27 mirror pairs = all 54 anchors across all 5 id-families (int/ft/ch/ntch/pst), 0 residue; Mauss 628 pairs, **627 CROSS-FILE** (endnotes in separate files, href-resolution follows them), exhaustive partition (1256 paired + 30 one-way TOC = 1286); **zero one-way anchors carry an id in any book** → predicate misses no note family. TOC excluded two ways (Mauss: id=None fragmented; G&G: 41 frag-less Contents links). **L'Enracinement = genuine DIFFERENT class, not a sparse mirror:** 0 internal anchors, its single note is an unlinked `[1]` text marker (already handled in P1); + a TRAP — 87 `` are French century ordinals (XVIIIᵉ), NOT notes. Detector-tool review (per feedback-tool-review-after-each-use): worked; belongs in the engine tool-evolution-log when it graduates into the normalizer build. - HONEST BOUNDARY held for next step: the detector proves the predicate IDENTIFIES the right anchors; it does NOT yet prove verbatim-safe note-text EXTRACTION + re-anchoring (never touch a prose byte). That is the next measurement, before the converter. ## Returns (cont.) - 2026-07-10 — Steward challenged the framing: "are three files sufficient?" CORRECT challenge — accepted, not defended. Ran the read-only detector as a population CENSUS across all 253 Chamber Sources EPUBs (`census_epub_shapes.py`). Result DECISIVELY answers no: distribution = MIRROR-CLEAN 49 (19%) · NO-NOTES 119 (47%) · DANGER/MIXED 61 (24%) · EPUB3-SEMANTIC 12 (5%) · UNLINKED-MARK 12 (5%). n=3 captured ~1–2 of ≥5 footnote strategies. **Honesty catch on my OWN instrument:** the classifier's `oneway_with_id` + `resid_fn_ids` signals are NOISY (catch index/xref anchors + a too-broad regex), so "61 DANGER" is an UPPER BOUND mixing genuinely-unhandled structures, already-handled container-mirrors co-flagged, and non-note apparatus. Verified ONE danger book against XHTML (Sennett: refs `` carry no own id → one-directional → mirror misses it → genuine unhandled class, not noise). New strategies n=3 never showed: EPUB3 epub:type (ALIVE in 12, we'd called it "dead"); one-directional/stem-suffix; container-mirror at scale (Donne 2291); heavy index/xref apparatus to be DISTINGUISHED from notes; edition-matters (Bachelard Poetics FR=mirror / EN=endnote-number — same work, different structure). Measure-before-build did exactly its job. ## Authorization moves - **2026-07-10T16:5x (post-clear) — §7 (PENDING-54 mega-EPUB provenance, Jung) AUTHORIZED by steward.** Per-volume separation, **each volume referencing the parent collection** (source/source_verified → the single megavolume sha256; frontmatter states extraction, never a standalone Bollingen edition). Steward exercised final authority on the point the jurist held OPEN with a per-volume lean → aligns, NO new jurist round. Unblocks re-converting legacy Jung `.md` (+Donne) via `convert_mega_epub.py` at the per-volume representation; open design sub-task = per-volume boundary detection (~18 CW vols). §7 resolution text PRESENTED to steward for placement in REVIEWED-54 — NOT written to REVIEWED.md (Constitutional Constraint #1: executor cannot modify REVIEWED.md; the executor-drafts-marked-entries practice of 52/53/54 sits in tension with it — flagged for steward). Held execution (calm-and-orderly) pending steward go. - **CORRECTION (substrate-verified):** PENDING-47 (the whole stress-test/source-match/exclusion arc) is CLOSED + ruled (REVIEWED-47, 2026-07-05). My post-clear wake briefing MISLABELED the open jurist item as "PENDING-47" — inherited loosely from this ledger's shorthand + carried forward without verifying (inherited-marker-read-as-current-state). The TWO genuinely-open jurist items (both REVIEWED-53): (a) the **generalized hash-locality principle** — `graduation-spec.yaml` L29–39, marked `[awaiting jurist ratification of the generalized principle]`; the 07-10 relay was TRUNCATED so the jurist declined to ratify unread; fix = relay the full untruncated text; (b) the **lane-rule accept/narrow** (REVIEWED-53 L474). Corrected against the substrate before propagating further. - **GOVERNANCE STATE (post-clear, Fri 2026-07-10):** 1. Steward working remotely from Ravello. **REVIEWED placements OWED BY STEWARD → deferred to Sunday 2026-07-12** (steward's own commitment): confirm/place REVIEWED-52/53/54 + ADD the §7 block below to REVIEWED-54. **Do NOT re-surface as dropped before 07-12** — it is intentionally held, not lost. 2. **Two jurist items RULED 2026-07-10** (jurist reply relayed by steward; verbatim archived → `chamber-library/docs/hash-locality-ratification-and-lane-narrowing-JURIST-RULING-2026-07-10.md`): **(a)** generalized hash-locality principle **RATIFIED in full** (all three instances checked, not assumed) → executor CLOSED the `graduation-spec.yaml` marker, dated + trued 2→3 instances; committed `12405a5`, **PUSHED to github + origin/Gitea 2026-07-10 on steward direction** (both remotes clean; Gitea cooperated). **(b)** lane doctrine **NARROWED — executor's correction ACCEPTED:** machine-data files keep change-class-tracks-lane (they have a code/git/test_tools fallback); the `.md` constitution runs on **doctrinal-traceability** (its prose is the sole record); axis = doctrinal content, not file extension (a no-doctrine typo/deadlink `.md` fix still doesn't need the heavy lane). **Steward-owed Sun 2026-07-12:** record (b) against REVIEWED-53 §2 (paste-ready below). 3. §7 AUTHORIZED → legacy Jung per-volume re-convert is UNBLOCKED (no further governance needed). Execution HELD pending steward go. - **§7 paste-ready block for REVIEWED-54 (steward to place Sunday 2026-07-12):** > **§7 RESOLVED 2026-07-10 (steward, final authority on the point the jurist held open with an aligned per-volume lean):** AUTHORIZED — **per-volume separation, each volume referencing the parent collection.** Jung CW extracted into per-volume files; each carries `source` / `source_verified` → the **single megavolume sha256**; frontmatter states extraction from the collection, **never poses as a standalone Bollingen edition** (the jurist's airtight-safeguard condition, adopted). Matches the jurist's agreed direction → no new jurist round. Unblocks re-converting the legacy Jung `.md` (+Donne) via `convert_mega_epub.py` at the per-volume representation. Open design sub-task: per-volume boundary detection across the ~18 CW volumes (`convert_mega_epub.py` currently splits by 80-doc chunks, not by volume). - **Lane-doctrine paste-ready for REVIEWED-53 §2 (steward to record Sun 2026-07-12):** > **Lane-rule refinement — jurist ACCEPTED + narrowed (ruling 2026-07-10).** "Lane tracks change-class" stands for `graduation-spec.yaml` / machine-data files only — they carry an independent fallback (code, git history, `test_tools` fixtures) that already pins "what was true when," so change-class is a sufficient proxy. The `.md` constitutional spec has no such fallback — its prose IS the sole authoritative record — so its lane tracks **doctrinal-traceability**: whether the change adds doctrine a successor must trace to a dated marker, regardless of change-class. NOT "every `.md` edit takes the heavy lane" — a no-doctrine typo/deadlink fix doesn't. The axis is doctrinal content, not file extension. This narrows the PENDING-53 ruling (§2) for anything beyond `graduation-spec.yaml` itself; that document's proposed rule is read with this correction attached. - **REVIEWED-54a paste-ready (steward to place Sun 2026-07-12; executor cannot write REVIEWED.md — Constraint #1):** > **## REVIEWED-54a — Split-anchor footnote recognizer widen (Sennett) + GOV-2 dup-scope** > **Date:** 2026-07-10 · **Decision:** AUTHORIZED (jurist FIX-ruled 2026-07-10) · **extends:** REVIEWED-54 > **Notes:** Recognizer widen to the split-anchor footnote family (first REVIEWED-54 deferred family). Jurist FIX-class via the reusable test — a widen stays FIX iff its safety case is carried entirely by the SAME unchanged verification (a new recognition predicate, not a change to how recognition is verified); crosses to PROPOSAL the moment it modifies the guard, adds a new verification mechanism, or hands prose conversion to anything other than stock pandoc. GOV-2 = option (c): the per-pair guard's within-file dup-check is scoped to conversion-touched ids (note-body / mirror-ref / split back-target — incl. the jurist's back-target precision); an unrelated pre-existing dup is a non-blocking WARNING routed to anchor-hygiene. > **If AUTHORIZED:** LANDED + PUSHED (`a6828ac`, github+Gitea 2026-07-10) — split-anchor pass + GOV-2-scoped `verify_pairs` in `scripts/inject_epub_footnotes.py`; `test_tools` fixture (fleet 77→80); `--validate` 15; runbook policy + tool-evolution-log + chamber CLAUDE.md. Verbatim-clean on Sennett (294/294 → native, 0 prose added/lost). Jurist ruling + brief in `docs/`. Separate travel-items: the `cra0001002` anchor-hygiene dup-id audit; the census-misclassification flag. Tag follow-ons REVIEWED-54a. - Awaiting steward/jurist: PENDING-52 (enforce source-archiving in graduation). REVIEWED-52 placement still owed by steward. - **PENDING-53 RULED + LANDED 2026-07-10** (jurist ruling relayed by steward; REVIEWED-53). Ratified draft §5 option (b) with the required wording correction (re-anchors→**REQUIRES re-anchoring**, prescriptive). Change-class [PROPOSAL]→**FIX**. Landed `graduation-spec.yaml` `layers:` (voice_manifest annotated + single `engine_source_binding` key + shared-word comment; dual warning kept). YAML re-parses; bounded 6-ins/1-del; uncommitted (steward's call). **Lane-rule response surfaced for jurist:** accept "lane tracks change-class" for graduation-spec.yaml; NARROW the .md generalization — A2/A4 (FIX-class doctrinal .md additions) correctly took the heavier freeze+semver lane per REVIEWED-50's *doctrinal-traceability* axis, so for the .md the axis is successor-traced-doctrine, not change-class. **PENDING-47** ratification declined (truncated relay) → still `[awaiting]`; relay full text to close. - **PENDING-54 FILED 2026-07-10** [PROPOSAL] — the EPUB footnote pre-processor + mega-EPUB split-convert (brief: `chamber-library/docs/epub-footnote-preprocessor-FOR-JURIST-2026-07-10.md`). - **PENDING-54 RULED IN PRINCIPLE 2026-07-10** (jurist, relayed by steward). Architecture sound; markers CONFIRMED apparatus under §V (closes an implicit assumption clean_epub_residue always ran on); PROPOSAL change-class confirmed (sharpened test: PROPOSAL if it alters a gate's criteria OR the trusted mechanism a critical gate's meaning depends on — this inserts a new component into §V's production chain). **Ship now for the mirror class, CONDITIONED on the existing regex tools staying as fallback (addition, not replacement).** Governance placement yes (fleet tool + graduation-spec converted_with note). - **REQUIRED before canon (§3) — DONE:** per-pair verbatim guard. Was whole-doc aggregate (would miss a cross-note swap); now **id-matched per-pair keyed by (dest-file, id)**. Re-proven G&G 27 / Mauss 628 / Polastron 140 / **Jung 1086**, 0 mismatch, 0 within-file dup; **teeth demonstrated** (deliberate id-swap CAUGHT). Bonus: surfaced Jung cross-volume id reuse (81 collisions under bare-id key → the (file,id) key fixes it + reinforces the split). - §5 wording fixed (cross-file mechanism IS covered/proven; Orwell-Quixote exact shape not separately proven — "mechanism covers it, not isolated yet"). Fallback-condition recorded in brief. - **§7 Jung provenance fact-check DONE (for steward+jurist):** corpus does BOTH — per-volume precedent EXISTS (Alexander *Nature of Order* 4 files, Lacroux *Orthotypographie* 2, Habermas vol-1, Burney vol-1, Camus *Œuvres I*) AND single-megafile (Xenophon/Muir/Zhuangzi/Rumi/Levi/Blake/Shakespeare complete). Distinction ≈ per-volume citation identity; Jung CW (cited by vol) fits the per-volume side → supports jurist's per-volume lean. Held open, steward+jurist decide. Governs re-converting legacy Jung .md (+Donne). - PENDING-47 unchanged ([awaiting], truncated relay). - **BUILD-IN AUTHORIZED + DONE under fleet discipline 2026-07-10** (steward "Authorize the build-in"). Promoted scratchpad → chamber fleet, matching conventions (read test_tools/tool-log idiom first): **(A)** `scripts/inject_epub_footnotes.py` — added `--validate` (7 invariants incl. teeth) + **refuse-on-mismatch** (won't write a canonical the per-pair guard flags); **(B)** `scripts/convert_mega_epub.py` — refactored to inject-INTERNALLY (fixed module-level sys.argv bug), argparse, verbatim-guarded, proven on Mauss --batch 5 (4 chunks, 628 native, clean); **(C)** `test_tools.py` fixture `test_inject_epub_footnotes` (recognize+relocate · per-pair clean · one-way untouched · TEETH) → fleet **73→77/77**; **(D)** `graduation-spec.yaml` `converted_with` note (declares the stage; parses OK); **(E)** `conversion-runbook.yaml` `policy.footnote_preprocessor` (preferred for mirror class; regex tools STAY as fallback — jurist §5 addition-not-replacement; mega via convert_mega_epub); **(F)** `tool-evolution-log.md` entry (Why/Built/Result/Tested/Follow-ons/Lesson). All 6 files UNCOMMITTED (steward's Gitea call). **DEFERRED (flagged, not landed):** ratified-spec §V cross-ref (runs the .md amendment lane, not unilateral); recognizer coverage of remaining families (Sennett one-directional, container-mirror); per-volume boundary detection (PENDING-54 §7); re-convert legacy Jung .md (+Donne). ## Decisive findings — the pandoc pre-processor path - 2026-07-10 — INJECTION EXPERIMENT (steward-requested), run on real minimal EPUBs via `-f epub` (the HTML reader gives different/incomplete behaviour — must use the epub reader). PROVEN: (1) pandoc converts `epub:type=noteref` + same-file `