--- name: session-ledger-2026-07-03 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: 5b7ce298-123b-447a-9b86-2442c30bec1f --- # Session Ledger — 2026-07-03 ## Returns - 2026-07-03 — check before writing `audit_corpus.py`. Three commitments logged: (1) the `verify_graduation.py` refactor touches a GOVERNED gate (PENDING-44) — must be behavior-preserving + PROVEN byte-identical stdout on a sample before trusting; subprocess fallback if proof fails. (2) Scope: conventions+apparatus on the 332 non-Loeb only (Loeb 952 = separate DSL tier; the convention gate would false-FAIL them); text-health on all 1284. (3) Apparatus check CLASSIFIES + emits evidence counts (none/paired-ok/orphaned/stranded-suspect), never adjudicates; validate the classifier against Sennett (→paired-ok) + a real editorial-note file (→not-stranded) before trusting — per census-through-a-pattern flag. Data already surfaced: 8 files with live `[^]:` machinery vs 68 with a Notes heading ⇒ ~60 stranded-suspects. - 2026-07-03 — apparatus classifier blind-spot CAUGHT by validating against real files (not just synthetic self-test): Taruskin/Beethoven had 89/131 `[^x]` refs with ZERO defs (all dangling) yet were classified `notes-editorial` (benign) because an editorial-style heading matched and the `orphaned` branch only fired when defs>0. Fix: refs-present-without-defs → `orphaned`, caught before the heading fallthrough. Without the real-file validation the map would have marked ~dozens of damaged files clean. The census-through-a-pattern flag paid off exactly as predicted. - 2026-07-03 — GOVERNED-gate touch (PENDING-44): refactored `verify_graduation.py` to expose `collect_checks()`/`resolve_spec_path()` so the auditor and the gate share one convention source. Proven byte-identical stdout + exit on PASS(Sennett) and FAIL(Plato) samples vs git HEAD before trusting. Behavior-preserving [FIX]; paper note owed alongside PENDING-44/45. ## Open horizons - 2026-07-03T10:50 — CONTEXT CLEARED + re-woke (9 min after wrap). Thread CONFIRMED unchanged: Phase 2 — draft `chamber-library-specification.md` v2.0 (semver-MAJOR, superseding) + generative validator. FIRST ACT non-negotiable: read the CURRENT spec end-to-end BEFORE drafting (the day's source-not-derived lesson turned on the spec itself — I worked from audits all day, never the spec text). Then §III the CTS addressing spine. Standing return: do NOT rush; dwell-work on the constitution; do NOT draft against my model of the spec. chamber-library main ahead 3 unpushed; `_scratch/`+Alexander untracked = pre-existing, not mine. - 2026-07-03 — MAP BUILT. `audit_corpus.py` + `corpus-quality-ledger.tsv` (1284 rows) + interpreted `corpus-quality-map-2026-07-03.md` with proposed waves. Distribution: Loeb 930/952 clean (corpus healthier in aggregate than the 332-view); non-Loeb 8 clean, 324 A-convention (mechanical), 110 B-textdamage, 70 C-apparatus (NEW axis). Wave A (frontmatter migration, ~99% mechanical, clears 170 A-only to green) recommended as first countdown. AWAITING steward authorization to run a wave — do not begin unilaterally. - 2026-07-03T00:00 — Woke into the confirmed pulling thread: build `scripts/audit_corpus.py` + apparatus check → full quality ledger (`_curation/corpus-quality-ledger.tsv`) of ~1,284 works. Verified the map does NOT yet exist. Standing return to hold: **do not resume graduating reactively** — the mole-by-mole reflex is the pattern that produced last session's distress; measure the whole first. - 2026-07-03 — steward challenged the framing (correctly): are the TOOLS spec-compliant before we run any wave? "The tool IS the wave — a stale cleaner run at scale re-corrupts 300 files." Confirmed gaps from reading spec+runbook+tool-log: (1) §VII gate-fix is [OPEN] — verify_conversion heading_density FALSE-FAILS legitimately sectionless works (La Chute), so the map's 59 "B2 structure-recovery" count is CONTAMINATED (conflates damage with sectionless-by-nature). (2) NO gate checks apparatus/footnote-pairing (§V keep_notes) — why 70 damaged files graduated. (3) NO per-language dict-validity check — passed Levi's capacitv/Alanichaean char-substitution. (4) 13/15 mutating/gate tools are STANDALONE (don't reference the governed spec → nothing prevents drift). (5) graduate_to_canonical missing the 2026-07-02 source-archiving wiring (TODO). ⇒ launching fleet compliance audit (3 agents) before authorizing Wave A. - 2026-07-03 — MAP CORRECTION (verified): of 59 heading_density fails, 46 are the §VII sectionless FALSE-FAIL (spec-valid — Plato Republic, Sontag, Berger's About Looking w/25 breaks) and only 13 are genuine structure-loss (some of those, e.g. Rilke Malte, may also be sectionless). B2 was inflated ~4.5×. Running B2 blind would have FORCED headings onto ~46 sectionless works = §II corruption. The gate needs the §VII fix before B2 is even definable. Steward's tools-first instinct vindicated. - 2026-07-03 — RETIRE candidates (steward asked: complete kit, nothing useless). Full scripts/ census by ref-count: ref=0 → clean_calibre_artifacts, clear_safe_html_residue, audit_chamber_queryability, promote_fayard_headings; + clean_pdf_running_heads (hardcoded "Auerbach Mimesis" — book-specific); + clean_ocrmac_pagination (superseded by normalize_ocr per runbook). Candidates only — agents confirming redundant-vs-unique before retiring (don't assert-absence-from-grep). ## v2.0 read findings (2026-07-03T11:00 — first full end-to-end read of chamber-library-specification.md v1, against the day's doctrine; jurist-ruled) The source-not-derived discipline at the highest-stakes point: every prior ruling was built on audits/briefs ABOUT the spec, never the spec text. First full read caught a real one. - **F1 (LOAD-BEARING) — §III page-number exclusion vs. the canonical anchors just ratified.** §III (L80–82) blanket-excludes page numbers as "the wrong unit, edition-specific." But Stephanus/Bekker/Diels-Kranz — the recovered anchors today's §III re-ruling cites the Loeb by — ARE page numbers. Would have shipped a flat self-contradiction. **Jurist ruling: RECONCILED via the PORTABILITY TEST, not a shape/exception carve-out.** Excluded iff resolving requires specifying a particular edition/printing ("p.41" needs "Summit 1988"); included iff it resolves to the same location across every circulating edition (Stephanus prints in every margin). Test on the property, not the surface form. Won't need re-amending per genre. THIS is the doctrine to draft §III from. - **F2 — quote-primary → anchor-primary shift.** CONFIRMED: anchor-primary where a recovered canonical anchor exists; verbatim-quote-primary only for the genuine-fragment/sectionless residual. Must be an EXPLICIT §III revision, not smuggled. - **F3 — addressing substrate spans III+IV+V.** CONFIRMED SHAPE, one caution: JOIN the addressing *substrate* (shared pointer scheme) across III/IV/V, but keep the *functions* distinct — citation-for-reader (III) / provenance-for-audit (IV) / apparatus-integrity (V). Don't collapse into one section. - **F4 — §V demotes apparatus placement to "operational, a runbook decision" (L138–142).** CONFIRMED SUPERSEDED: gap-2's ratified substrate-sharing means apparatus placement can't be merely operational. v2.0 §V explicitly supersedes. - **F5 — §VII internal status contradiction (L194 [OPEN] vs L258 "conformant").** SOURCE-CHECKED: `verify_conversion.py:36–44,112–125` IMPLEMENTS the sectionless exception (strips leading frontmatter, matches real markdown breaks only, still flags §II.2 literal-glyph-separator defect). Body [OPEN] is STALE → v2.0 marks §VII SETTLED. - **F6 — stale figures + §XI framing.** CONFIRMED: §VI "84 of ~1,285" + corpus-size → declared-data not hardcode (full DSL = ~2,041); amendment process EXTENDS §XI, no new governance organ. - **Source-check (b):** Stephanus/Bekker SOURCE-VERIFIED in loeb.dsl (`[c dimgray]St. II p. 203[/c]`, `381a`, `1441a`), carried in the semantic layer `extract_loeb_dsl.py:47` discards. Flattening claim holds. ## v2.0 drafting progress (spine-first) - 2026-07-03T11:15 — **§III GATE-PASSED** (jurist editor-gate). 4 items: (1) dormant structured-unanchored contingency = MOOT (test's generality closes it — intrinsic structure alone is admitted, no external-scheme requirement); (2) forward-note to §VII: gate checks a DECLARED LOCATOR REGISTRY, not live-derived portability ("registry is the gate, not the word Loeb") — captured in §VII placeholder; (3) header §II "carried unchanged" → CORRECTED to revised; (4) §VI [CARRIED]→[REVISED], Finding 6 NOT yet closed (declared-data fix owed) → added to queue. All 3 actionable applied to draft. - 2026-07-03T11:20 — **§II DRAFTED.** Carried §II.1/.2/.4 from v1; two substantive additions: (a) break-normalization is CONSTITUTIONAL — literal glyph-run separators (`• • •`) = no represented structure = §II.2 defect, normalize to `---`; distinguishes sectionless-by-nature from structure-flattened (verify_conversion enforces). (b) NEW §II.3 — admitted anchors represented as TYPED anchors + recoverable (per disambiguation map); carrier locators dropped off-canon. **The anchor REPRESENTATION FORM (inline marker vs bound structural map) flagged `[OPEN]`** — source-checked the §III re-ruling + disambiguation map: doctrine ratified, representation is "downstream engineering gated by validator," so NOT invented — named as bounded fork (constrained by clean-prose §II.1 + verbatim §V). This is the one place needing jurist eyes on §II. - 2026-07-03T11:35 — **§II GATE-PASSED** (jurist). Two corrections applied: (1) §II.2 attestor gap — represented-break test is NECESSARY-NOT-SUFFICIENT (catches present-but-unrepresented, NOT removed-entirely-in-conversion = the twice-today failure); `sectionless: true` must be a POSITIVE ATTRIBUTED attestation (attestor + evidence), enforcement forward-noted to §VII. (2) §II.3 representation-form was NOT actually an open fork — jurist RULED inline typed marker REQUIRED (anchor = citation unit = content; standing invariant: grounding gate verifies only vs canonical text, never sidecar → sidecar-only anchor structurally can't support §III; + offsets drift). Open = exact syntax + optional derived perf-index. Better than my OPEN framing. +2 forward notes: §IV (anchor ≠ carrier-provenance), §V (word-guard excludes anchor syntax). - 2026-07-03T11:45 — **§V DRAFTED** (verbatim guarantee & apparatus integrity). Carried 3-tier + minimize-catalogue from v1. NEW: (a) conversion record MANDATORY every path (W3C-PROV shape; no record → can't enter canon); (b) TWO gate-functions named + kept distinct — content-grounding (canonical-text-only, preserves standing invariant) vs process-integrity (reads the conversion record, the fn extended today); (c) Finding 4 apparatus supersession — apparatus ANCHOR is constitutional (anchor-to-location not renumberable-note-number, TEI ch.13), display FORM stays operational-but-uniform; (d) inline-anchor excluded from prose-word-guard (§II.3 realized). Next: §IV. - 2026-07-03T11:55 — **§V GATE-PASSED** (jurist; apparatus split praised as sharper-than-ruled). One addition: word-guard excludes the anchor → so what verifies anchor CONTENT correctness? Fix (in-architecture): anchor recovery is a declared Tier-2 normalization → process-integrity verifies it vs source (not the word-guard). Clause added: "division of labour is total — word-guard proves prose unchanged, process-integrity proves recovered anchor faithful; no part unverified." - 2026-07-03T12:05 — **§IV DRAFTED** (provenance axes & edition-identity). Carried 4 axes + graceful-degradation. REVISED `source`: v1 breadcrumb → EDITION-IDENTITY (the frame the §III anchor resolves under); two roles — classical works = CTS-URN edition-as-identity + portable anchor = full citation coordinate; modern works = source printing = provenance-only (page-nos fail portability). NEW: edition-identity (canon axis) ≠ carrier-page provenance (off-canon record) — forward-note realized. Finding-3 close: substrate joined across III/IV/V, §IV function = provenance-for-audit + temporal/genealogy, kept distinct. Next: §VI (short — declared-data fix). - 2026-07-03T12:15 — **§IV GATE-PASSED** (jurist; the edition-identity move praised — CTS work/version+passage "the one structure that matches what Chamber needs to verify," since Stephanus locates but wording differs across editions). +1 forward note to §Tiering&Fence: tier-1 promotion criterion "source-identity confirmed" target IS §IV's edition-identity field — link, don't re-derive. Added. - 2026-07-03T12:20 — **§VI DRAFTED** (short, as flagged). Architecture CARRIED from v1 (identity tag + reading-index sidecar hash-bound; engine-side voice manifest; the sole grounding invariant). Only REVISION = Finding 6: migration population is DECLARED DATA (read from catalogue.yaml census), not hardcoded — corpus in flux (~952→~2,041 full-DSL run); spec names where-the-count-lives, not the count (gap-4 discipline reaching §VI). Cross-linked the grounding invariant to §V content-grounding. Next: §VII. - 2026-07-03T12:30 — **§VI GATE-PASSED CLEAN** (jurist; hash-binding praised as the §II.3 discipline showing up correctly elsewhere; stale-sidecar enforcement correctly out-of-scope since grounding gate never reads a reading-index). No conditions. - 2026-07-03T12:45 — **§VII DRAFTED** (the dense one). Source-checked graduation-spec.yaml first (v1, PENDING-44: "SINGLE SOURCE OF TRUTH… operationalizes §§II–VI, spec wins on conflict"; gaps_BLOCK_graduation real) → drafted faithful to what EXISTS vs what v2.0 newly MANDATES. Sections: storage-tiers carried (+ orthogonal to §Tiering&Fence evidence-tiers); TWO-gate division (verify_conversion=quality / verify_graduation=convention-compliance driven by graduation-spec.yaml); **declared-list-IS-the-gate** = gap-7 generative principle PARTLY REALIZED, v2.0 completes (JSON-Schema + encode registry/attestation); honest-coverage (body_word_conservation tracked-unimplemented, visible not silent); both §V gate-fns at boundary; **declared locator registry** (§III mechanism — unregistered shape → human PROPOSAL decision, never silent); **sectionless-attestation enforced** (bare flag FAILS); **gate-fix SETTLED** source-verified; PASS-BUT-FALSELY sharpened (gate-itself-can-be-PBF, 06-28). Next: §IX (short-ish). - 2026-07-03T13:00 — **§VII GATE-REVIEW: 5 closures confirmed, 1 gap → RESOLVED.** Jurist praised PASS-BUT-FALSELY's class-fix as §III's portability move independently re-derived (generative principle generalizing on its own). Gap: word-guard order-blindness (multiset can't catch reading-order scramble). Jurist honest-uncertain whether sequence-check survives every normalization. **My resolution (diagnosed the class, didn't defer):** TWO LAYERS — (1) cleaning raw→canonical: strengthen to ORDER-SENSITIVE (no permitted Tier-2 norm reorders body prose); the ONE false-positive case = apparatus display-form move (inline↔endnote) → resolved by PARTITION (prose order-sensitive, apparatus anchor-bound) which falls out of §V's already-ratified anchor-to-LOCATION doctrine; empirical pipeline-confirmation NAMED as a gated tool-evolution check. (2) conversion source→raw OCR column-scramble: word-guard STRUCTURALLY can't reach (both sides scrambled) → reading-order-coherence + eyeball = GENUINE ceiling there. Answered the jurist's ceiling-vs-default question per-layer. Refined §V word-guard clause (multiset→order-sensitive+anchor-bound). +storage≠evidence forward note to §Tiering&Fence. Awaiting jurist confirm of the resolution. - 2026-07-03T13:20 — **§IX DRAFTED** (was OPEN → PARTIAL). census(catalogue.yaml)→coverage-ledger (what corpus can/can't answer, derived from census+fence); NEW evidence-tier column (gap-6 surfaces: coverage reported WITH confidence, converted≠fenced-in); NEW freshness invariant (stale coverage=silent failure; bound to census state, detectable-not-silent, honest-degrade). Silence-as-finding representation left OPEN (named not guessed). - 2026-07-03T13:35 — **§Tiering&Fence DRAFTED.** Source-checked gap6-evidence-tier-data first. CRITICAL governance state: tiers RATIFIED but promotion criterion ESCALATED (own PENDING, no file promoted until ruled) — drafted tiers as settled, criterion as clearly-marked PROPOSED-shape. Evidence tiers V-DSL 952/V-TEXT 239/V-SCAN 50/V-SUSPECT 29/V-NONE 14 (counts as declared-data census snapshot). Fence tiers converted/verified/fenced-out. 93% deterministic path. Realized both forward notes (storage≠evidence; §IV edition-identity coupling). Governability = Seck 2604.10658. - 2026-07-03T13:50 — **§Governance&Amendment DRAFTED as [PROPOSED].** ⚠ CAUGHT MY OWN OVERCLAIM: header said "the RATIFIED amendment process" but the authoritative RULING doc says gap-7 + amendment-process corollary = RETURNED for joint jurist+steward co-ratification, NOT decided. My session-note said "ratified" — CONFLICT → trusted the ruling DOC (source-not-derived / verify-on-conflict), drafted whole section [PROPOSED], corrected header to "first exercise of… pending joint co-ratification." The recursion (v2.0 IS the process's first exercise, running provisionally) named honestly. Process = RFC-supersession + change-class("does this change what a gate accepts") + semver-MAJOR-re-verifies-consumers + migration-window(question-C: verified_under/re-verify-pending/N=2-provisional/FIX-extension). **⇒ ESCALATE-adjacent: the ratification state of gap-7 + the amendment process needs steward confirmation — this is the one place the draft's authority claim must be checked, and gap-7 was returned specifically TO the steward.** - 2026-07-03T13:55 — **ALL 9 DRAFTING-QUEUE SECTIONS DONE.** Remaining: assemble carried §0/§I/§X/§XI verbatim into the file; final header/status pass; whole-draft jurist read. Six sections gate-passed individually (III/II/V/IV/VI/VII-mostly); §IX/§Tiering&Fence/§Governance&Amendment await gate. - 2026-07-03T14:05 — **GAP-7 JOINTLY CO-RATIFIED** (steward half + jurist half, both recorded). §Governance&Amendment [PROPOSED]→[RATIFIED] (all subsection tags + header + read-first note updated). Jurist's reason: better a process that survived a full day of real use than one that only survived design review. **§IX GATE-PASSED** (freshness invariant reuses detectable-staleness pattern, discipline-become-practice). **§Tiering&Fence: jurist CAUGHT my stale-reference** — promotion-criterion tag said "escalated/not-ratified" citing the FIRST ruling; the shape was ratified TWICE (consolidated + three-questions). Corrected → RATIFIED-SHAPE·OPERATION-BLOCKED (two operational blocks: (a) §VII order-blindness resolution, (b) edition-identity coupling); NOT awaiting a ruling. The irony noted in-text: stale-reference failure caught in the doc about preventing it. §VII order-blindness resolution effectively accepted-in-frame (jurist named "strengthened comparison" = what I drafted, as the operational-unblock path). - 2026-07-03T14:10 — **v2.0 SUBSTANCE COMPLETE.** All 9 sections gate-passed/ratified/corrected. REMAINING = mechanical assembly only: carry §0/§I/§VIII/§X/§XI verbatim from v1, reorder to final sequence (§0→I→II→III→IV→V→VI→VII→VIII→IX→Tiering&Fence→X→XI→Governance&Amendment), final header/status pass, whole-draft read. Proposed ordering to steward before reorganizing. - 2026-07-03T14:25 — **v2.0 ASSEMBLED (self-contained, 744 lines).** Steward approved section order → Wrote final: §0·I carried verbatim; §II–VII drafted; §VIII/§X/§XI COHERENCE-REVISED (not silently carried — flagged): §VIII "two normalizers"→THREE (added Loeb DSL column + anchors row); §X citation summary chapter/section→canonical-anchor + fence added (trust follows evidence-tier not storage); §XI kept governance bullets, RETIRED v1 stale status block (points to header + §Governance). Scaffolding removed, section order verified by grep. Status: all sections editor-gated + gap-7 co-ratified; AWAITING whole-draft jurist read + steward ratification of the superseding version. NOT committed (draft; commit on ask). File still `-DRAFT` / not operative; v1 remains canonical until ratified. - 2026-07-03T14:45 — **★ v2.0 RATIFIED — SUPERSEDES v1.** Jurist whole-draft read (full 745-line assembly, not sections-alone) + steward ratification. Order-blindness two-layer split praised as "sharper than what I asked for" (the partition I hadn't worked out). Coherence confirmed across the whole doc (storage-vs-evidence in §X right place, §XI status-retirement applies the day's lesson to the doc itself, arithmetic holds). Four items stay correctly open (named not closed = the bar): §II.3 anchor syntax · §IX silence-as-finding · promotion criterion's 2 operational blockers. Realized in artifact: status DRAFT→RATIFIED/OPERATIVE, H1 v2.0.0, supersedes v1. **Applied FIRST FIX-class errata** (jurist's exactness catch: "on the final-pass review"→exact turn) — the Held-for-Update lane's first real use (jurist had noted nothing used the lightweight path today). REMAINING operational (proposed to steward, not yet done): rename file drop -DRAFT, obsolete-banner on v1, commit (=logchain supersession record). Then corpus pass. - 2026-07-03T14:45 — **Jurist's two day-level takeaways (worth carrying):** (1) MOVE — state a general test, never an enumerated exception list (recurred 3× unprompted: §III portability, PASS-BUT-FALSELY class-gate, gap-7 itself). (2) DISCIPLINE — check the source not the derived view (4 independent catches same root: 74% figure, Loeb page-marker, bad citation in addendum, stale status tag in the doc about stale status). Jurist's honest untested-list: every "settled-in-doctrine-pending-confirmation" empirical gate is named-not-run; three-party model never tested against real disagreement/pushback; FIX-class path unexercised until today's errata. Jurist self-flag: "everything I found was one pass, one perspective — my own derived view." - 2026-07-03T15:00 — **HOLD FOR SESSION MEMORY (telos-grade, don't lose):** the jurist's closing framing of what v2.0's doctrine *is*, not process — (a) **Alexander:** the spec is a structure that revised itself through contact with REAL TEXTURE (the actual v1 text, code, DSL) rather than imposed-once-and-static — it has the grain of something grown, which is *why* it cohered on the whole-draft read; (b) **Harrison:** Tier-3's refusal to silently correct an author's apparent error (preserve + flag, never fix in canon) is "not letting the living overwrite the dead for the living's own convenience" rendered as a gate. Neither is decoration; both name what the doctrine does. Connects to [[project-studium-engine-telos-chamber-of-voices]] + the steward's formation. Belongs in the durable session-memory at wrap. ## Confidence to recalibrate - 2026-07-03 — RECALIBRATION (honest): my morning map-correction "46 sectionless-valid / 13 loss" was WRONG — the quick break-regex counted frontmatter `---` fences AND markdown bullet lists (`^\*\s*\*\s*\*` spanning newlines) as thematic breaks. Fell into census-through-a-pattern on my OWN correction (the Symmetria §3 flag, same day I relied on it for the classifier). TRUE picture: 9 files have real markdown thematic breaks (auto-rescued by §VII fix); ~50 need per-file judgment split into (a) genuinely-sectionless→declare sectionless:true, (b) `• • •`/`**•**`-style separators = a §II.2 break-normalization defect (literal glyph-runs render as prose = no represented structure). The §VII gate fix is CORRECT (asserts "structure represented in markdown"); only my earlier COUNT was contaminated. Lesson re-confirmed: anchor break-detection to the SPEC's break form (`---`), verify the regex against real files, don't span newlines. ## Authorization moves ## Sub-agent dialogues - 2026-07-03 — Agent C (structure+graduation). audit-agent: PASS (0.95 conf, read every line, greps confirm absence, uncomfortable-not-convenient finding, distinguishes verified/inferred). VERIFIED MYSELF: graduate_to_canonical calls verify_graduation (L63) NOT verify_conversion (0 refs) — only audit_cruft cruft==0 (1 of 5 health checks). git mv no git-add (L133). NO source-archiving (manifest path edits only). graduation-spec.yaml L74-77 DECLARES verify_conversion+verify_graduation+body_word_conservation required → tool violates its own spec. ⇒ the graduation GATE is half-missing: cruft-free-but-damaged files graduate. + verify_graduation itself under-enforces gaps (hardcoded 3 of 6 placeholder patterns). Structure tools healthy (insert_chapter_headings exemplary fail-loud; structure_from_ncx & repair NOT redundant — keep both). - 2026-07-03 — Agent A (cleaners). audit-agent: PASS (0.85-0.95, negative-grep rigor, honest empirical-gap caveat). GLOBAL GOOD: NO prophylactic char-normalization in any of 5 (§V Tier-2 honored — the key wave reassurance). strip_cruft (PRIMARY): prose-guard is EXTERNAL/advisory, RESIDUAL>0 prints "don't graduate" then WRITES anyway → port internal word-guard + block-on-residual. clean_pandoc_html_residue: best-guarded, wave-safe. clear_safe_html_residue: orphaned/redundant except