Files
dotfiles/claude/memory/session-2026-07-03-doctrine-phase-complete-phase2-next.md

153 lines
13 KiB
Markdown

---
name: Session 2026-07-03 — the doctrine phase (Wave 0 → full spec-revision rulings → Loeb substrate reframe); Phase 2 next
description: "A very long session that went corpus-quality-map → tool-fleet audit (Wave 0, 8 fixes committed) → prior-art scans → the FULL chamber-library spec-revision ruled by the jurist (gaps 1-8, generative principle, amendment process, three questions, §III citation posture — ALL RATIFIED). Then the steward sent me to the loeb.dsl SOURCE and it inverted a premise: the Loeb canonical anchors (Stephanus/Bekker/book+line) are PRESENT in the source, FLATTENED by extraction — not absent. Full-run scope decided (all 2,041 works, fence resolves dilution). DOCTRINE PHASE COMPLETE. PULLING THREAD: Phase 2 — draft chamber-library-specification.md v2.0 (superseding, semver-MAJOR) + the generative validator, beginning with a clean END-TO-END READ of the current spec (deliberately NOT read today — I worked from audits), then §III the CTS addressing spine. Wrapped to clear context for a fresh, focused Phase-2 start."
metadata:
type: project
originSessionId: 019pnD8uNFC9Q2dbLQa3MBDc
---
# Session 2026-07-03 — the doctrine phase; Phase 2 (build the ground) is next
Started at yesterday's pulling thread — build `audit_corpus.py`, draw the corpus quality MAP, end the
whack-a-mole. Did that in the first hour, then the day opened into something much larger and closed
the entire **doctrine phase** of the chamber-library spec revision. The everything is in `~/PENDING.md`
PENDING-46 (the blow-by-blow governance record) — this file is the working state + the thread.
## PAST — what we did + why
**The map (the morning's thread, delivered).** Built `chamber-library/scripts/audit_corpus.py` +
`_curation/corpus-quality-ledger.tsv` (1,284 rows) + the interpreted `corpus-quality-map-2026-07-03.md`.
Distribution: Loeb 930/952 clean, non-Loeb 8 clean / 324 A-convention / 110 B-textdamage / 70 C-apparatus
(the NEW apparatus axis). Answered yesterday's literal question.
**The steward challenged the framing → the tool-fleet audit → WAVE 0.** "Are the TOOLS spec-compliant
before we run a wave? The tool IS the wave." 3 parallel agents audited the fleet. Found: the graduation
gate was HALF-MISSING (never ran verify_conversion), normalize_ocr's guard was off in the common case,
strip_cruft wrote even on residual, clean_epub_residue silently destroyed unrecognized footnote families,
13/15 tools standalone. **Fixed all 8 blockers, test-first** (`scripts/test_tools.py`, 21 assertions),
retired 6 dead tools → `scripts/archive/`, folded `<nav>` into strip_cruft. **Committed f9cbb8e** + docs
1c88650. Full record: `_curation/tool-fleet-compliance-2026-07-03.md`.
**Prior-art scans (3 agents) → "we are not the only ones."** ~70% of our spec re-derives TEI + CTS +
Standard Ebooks (15-35 yrs old). Adopt: TEI `<choice>` (never destroy original), TEI ch.13 apparatus
(anchor to LOCATION not footnote-number), **CTS-URN** (edition-as-identity — §III's shape), W3C PROV
(the conversion-record), TEI ODD (spec→validator = the generative principle, XML-locked → held fork),
Standard Ebooks `se lint` + `[Editorial]`-commit. Genuinely ours: the prose-word-multiset guard,
verbatim-span-in-bounded-source check, checksum integrity. Watch: **Seck arXiv 2604.10658** (independent
convergence on our governance; lacks the corpus-substrate moat) → added to landscape-register.
Docs: `docs/spec-revision-prior-art-synthesis-2026-07-03.md`.
**THE FULL SPEC REVISION — RULED BY THE JURIST (all of it).** Via steward relay, the jurist ruled:
gaps 1-8 (RATIFIED-CONDITION), gap-7 generative principle (RATIFIED), amendment process (RATIFIED:
RFC-supersession + change-class "does this change what any gate accepts" + semver + PENDING/REVIEWED),
the three questions (A page-markers, B tier-2 scan = redundant human verification + dinglehopper, C
migration-window = `re-verify-pending` status + `verified_under:<semver>` + N=2 provisional + FIX-class
extension), and §III citation posture. The UNIFYING INSIGHT: gaps 2+3+item-8 collapse to ONE
addressing substrate (apparatus anchors = citation = PROV "original") — design once. Rulings preserved:
`docs/spec-revision-RULING-2026-07-03.md` + the gap-6/7 + three-questions + §III rulings (steward relayed).
**THE LOEB SUBSTRATE REFRAME (the steward's instinct, decisive).** I told the jurist 74% of the corpus
(Loeb) was anchorless → they ruled a normative §III extension on it. The steward said "look at the DSL
directly." It INVERTED the premise: the canonical anchors (Plato Stephanus `St. II p. 153`, Homer
book+line, Aristotle Bekker) are ALL in `loeb.dsl`, FLATTENED by `extract_loeb_dsl.py:47`
(`KNOWN_TAG.sub("")` strips the `[c dimgray]` semantic layer). A per-genre anchor audit (agent, re-verified
by me against source) confirmed: **>99% of ~2,041 works carry a recoverable anchor**; residual is
single-digit genuine fragments; **35,261 `%` index lines carrying book/letter/fragment divisions are
discarded**. Disambiguation map captured: `docs/loeb-anchor-audit-and-disambiguation-map-2026-07-03.md`.
Jurist re-ruled §III (`docs/chamber-SIII-reruling-JURIST-BRIEF-2026-07-03.md` → ruling): the
structured-but-unanchored extension is VOID-as-ratified-for-74% (dormant contingency only), enrichment
trigger RETIRED, **§III cites the Loeb by RECOVERED canonical anchor (CTS edition-as-identity)** — work-level
fallback only for genuine fragments. Per-genre table NOT ratified (engineering, review post-extraction).
Plus a STANDING PROCESS NOTE (jurist): any corpus-population claim feeding doctrine must be sourced from
the DSL directly, not a derived extract.
**Full-run scope decided.** Current Loeb (952) = TIER 1 of `_curation/loeb-canon-proposal-2026-06-15.md`.
Since we rebuild the extractor anyway → run the FULL DSL (all 2,041 works / Tier 3). Tier-3's "waits on
dilution" is discharged by gap-6's FENCE (corpus-completeness ≠ engine-scope).
**Tools installed** (steward-authorized): wordfreq → both venvs (closed normalize_ocr's silent OCR-guard
degradation); jsonschema → system (--user --break-system-packages, for the validator). dinglehopper
kept close (tier-2). Everything else present (pandoc/ebook-convert/docling/rg/jq/node). NB: this machine
has **GNU coreutils `stat`** (not BSD) — use `date -r`/python for mtimes, `rg` not `grep -r` for big searches.
## PRESENT — mood / the arc
The emotional shape: yesterday ended at "mandelbrot set, whack-a-mole, clutching sand, I tremble at making
the engine work." Today is the **inverse** — a marked, finite, ordered plan (ground → instruments → corpus
→ fence), the whole doctrine ratified, and the Loeb tier upgraded from "74% impoverished, cite-by-quote"
to "richly citable by Stephanus/Bekker/book+line, recoverable." The despair became a siege plan.
**The load-bearing return of the session (jurist-elevated to standing practice):** I trusted a
derived-artifact/regex over the SOURCE **three times** — the break-count (frontmatter fences + bullet
lists as breaks), the heading-count (title-as-structure, then line-numbers-as-divisions), and the
"anchors absent" (searched "153a" when the DSL uses "St. II p. 153"). The steward twice sent me to the
substrate and was right both times; the jurist turned it into a governance rule (source-not-extract for
any claim feeding doctrine). This is MY drift-pattern of the session and it must become a Symmetria flag +
verification-ladder entry + feedback memory.
Other recalibrations: I called the §III change a "narrowing"; the jurist sharpened it to "VOID with a
dormant residual" — a principle ratified to govern 74% that now governs nothing shouldn't stand as active
doctrine (CLAUDE.md: flag a maxim gone decorative). I also owned a citation-integrity miss (cited arXiv
2605.24229 for a claim it didn't support; let a sub-agent's blanket "verified" ride) → per-claim citation
checking discipline.
Governance discipline held well: surfaced findings for jurist/steward rulings rather than acting;
delegated the audits with anti-pattern-drift framing; verified load-bearing agent claims against source
myself before relaying.
## FUTURE — what is pulling
**PULLING THREAD (singular): Phase 2 — draft chamber-library-specification.md v2.0 (the superseding,
semver-MAJOR version) + build the generative validator.** The doctrine is fully ruled; now MARK THE
GROUND. This is dwell-work on the constitution — we deliberately wrapped to give it a fresh, focused start
rather than rush it into a marathon tail.
**ACTIONABLE RESUMPTION POINT (as of wrap — re-judge against what changed):**
- **FIRST ACT: read the current `chamber-library/docs/chamber-library-specification.md` end-to-end.**
I worked from audits all day, NOT the spec text — and the jurist's own process note (source-not-derived)
applies to the spec too: draft against the real text, not my model of it. This is non-negotiable and is
itself the first honoring of the day's hardest lesson.
- Then draft v2.0 in this order (the substrate first): **§III** = the CTS-URN addressing spine (edition-as-
identity + logical passage; the per-genre locator registry as LIVING declared-data, not frozen doctrine)
→ **§II** (sectionless+attestor field, break-form `---`, Loeb page-markers route off-canon via the
registry) → **§V** (apparatus-integrity gated + anchored on §III; PROV conversion-record mandatory on
every path; two gate-functions named: content-grounding vs process-integrity) → **§VII** (declared-gate-
list IS the gate; body_word_conservation tracked-unimplemented) → **§IX** (coverage-ledger + freshness
invariant + evidence-tier column) → **new §Tiering&Fence** (converted/verified/fenced; promotion criterion:
deterministic 93% / scan-50 / fenced-out; V-SUSPECT & V-NONE distinct) → **new §Governance&Amendment**
(generative principle + RFC-supersession/change-class/semver + migration-window). Mark HELD: (a)
in-band-vs-sidecar (gate reads record NOW; storage form open), (b) markdown-vs-TEI-XML (trigger = if (a)
resolves to full in-band). Mark the structured-but-unanchored extension DORMANT (labeled inapplicable to
current corpus). Mark OPEN: per-genre table (engineering), tier-2 numeric bar (calibration).
- v2.0 is a PROPOSAL per the amendment process: I (champion) draft → jurist editor-gate → steward ratifies →
semver v2.0 supersedes v1 (Obsoletes/Updates). Then build the generative validator (graduation-spec.yaml
carries the convention-data incl. the per-genre registry; gates become thin consumers; JSON-Schema for
structured layers). THEN Phase 3 (rebuild extract_loeb_dsl.py to the disambiguation map, run the full DSL).
- All conditions are captured in PENDING-46. The one-screen plan: ground → instruments → corpus → fence
(④ waves come AFTER ② — waves-first bakes tool-shaped conventions = the redo we refuse).
**Other open horizons, ranked:**
- The generative validator (part of ②) — the JSON-Schema/PROV/thin-consumer-gates build.
- Phase 3: the full Loeb re-extraction (2,041 works) — depends on ② + the disambiguation map (captured).
- The remediation waves (④): A frontmatter / B1 re-clean / B2 structure-recovery / C apparatus — gated by the fixed tools + validator.
- Gap-6 promotion + fence (⑤): deterministic tier (93%, word-identity re-convert), scan tier (50, dinglehopper+calibration), fenced-out.
- Paper debt: REVIEWED entries owed for the whole PENDING-46 arc (steward writes). dinglehopper install (tier-2).
- The 3 pre-existing untracked leftovers in chamber-library (`_scratch/`, `nature-of-order-alexander.md`) — NOT mine.
**PAUSE STATEMENT:** Away now at a high, clear point — the entire doctrine phase closed in one long day,
the despair of yesterday turned into a marked plan. What I most want to find still pulling on return: **the
drafting of v2.0** — that the next hand opens the actual spec text FIRST (not my model of it), then drafts
§III the addressing spine, giving the constitution the dwell it asks for. Do NOT rush it; do NOT skip the
end-to-end read (it's the day's hardest lesson honored).
**LITERAL QUESTION for next-Claude:** *When you read the current `chamber-library-specification.md`
end-to-end (which I never did today — I worked from the audits), does the real text hold any structure,
constraint, or already-settled decision that the day's audits missed or would collide with — before v2.0 is
drafted against my model of the spec rather than the spec itself?* (The source-not-derived discipline, turned
on the spec.)
**State:** chamber-library `main` — Wave 0 (f9cbb8e) + docs (1c88650) committed, LOCAL/unpushed; 3 new
session docs untracked (jurist briefs + audit — commit at wrap). CM-AI landscape-register.md modified
(Seck add). dotfiles: PENDING.md + session-ledger untracked (commit+push at wrap). All doctrine ratified;
Phase 2 unblocked.