Files
dotfiles/claude/memory/session-2026-05-17-evening-chamber-reconvert-pipeline.md
T

201 lines
26 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: session-2026-05-17-evening-chamber-library-reconvert-pipeline-validated-end-to-end-7-commits-on-main-pulling-thread-is-adorno-aesthetics-reconvert-lfs-migration-decision
description: "Long evening session executing the chamber-library Tier 3 conversion infrastructure end-to-end. ARC branch docs/spec-extraction-2026-05 pushed to both Skemantix + GitHub-backup (10 commits). Ruder + Tschichold reconverted (ocrmac with Apple Vision LiveText; --columns 3 for trilingual Ruder, --columns 1 for Tschichold; both replace prior chamber files that were synthetic placeholder + Adobe Acrobat 8.12 damage respectively). EPUB pipeline test: Adorno Minima Moralia (clean Class A) + Calvino Six Memos (impoverished NCX → hand-craft chapter promotion) filed; Adorno Aesthetics deferred (structural heading surgery needed). 7 chamber-library commits landing on main (3e18734 → e9e9437); branch now 14 ahead of origin (was 7). LFS architectural discussion: §10.3 settlement makes MD canonical, LFS not needed at chamber's scale, but migration deferred per steward — push to Gitea no-LFS once Seb fixes server. Calibre 9.8.0 installed via brew cask (all 21 CLI tools on PATH). Tier 3 silent-loss finding: Hochuli + scripts + toolset-study were untracked. Pulling thread: Adorno Aesthetics reconvert (structural heading surgery: 'Notes' x8 + 'Guide'/'Pages' pseudo-chapters); behind it the 154-file reconvert backlog and the LFS-decide → GitHub-mirror setup. Literal question: does Calibre EPUB→EPUB normalization improve Aesthetics's heading structure, or is manual surgery the only path?"
metadata:
node_type: memory
type: project
originSessionId: 63d0fba0-946e-437b-a76f-21a99d64e040
---
# Session 2026-05-17 (evening) — chamber-library reconvert pipeline + 7 commits
## The pulling thread (singular)
**Adorno *Aesthetics* reconvert** — the third planned EPUB in tonight's trio, deferred for fresh attention. Pandoc produces 24 `##` headings with the wrong shape: "Guide" + "Pages" + "Notes" repeated 8 times (each chapter's notes section incorrectly promoted to chapter level). Needs structural heading surgery, plus the standard soft-hyphen + EPUB-artifact cleanup pass. Before manual surgery, worth testing whether Calibre's `ebook-convert` EPUB→EPUB normalization produces a different (cleaner) chapter structure.
Behind it: the larger arc of the 154-file reconvert backlog. Tonight banked 4 conversions total (Ruder + Tschichold earlier; Adorno Minima Moralia + Calvino Six Memos now). ~150 to go. The conversion-skill plan §12 has 8 preconditions; tonight discharged 4 of them.
## Literal question for next-Claude
*Does Calibre's `ebook-convert` EPUB→EPUB normalization on Adorno *Aesthetics* (~5 MB EPUB) produce a cleaner pandoc heading structure — fewer or no "Notes" promotions; no "Guide" / "Pages" pseudo-chapters — or do we need targeted manual heading surgery as the only path? Quick empirical test (5 min: `ebook-convert in.epub out.epub` → `pandoc -f epub -t gfm-raw_html out.epub` → compare heading count) that determines whether Aesthetics is a Class A-with-normalization win or a heading-surgery exercise.*
## Pause statement
I am about to be away from this. Today closed substantial chamber-library infrastructure work — the conversion pipeline now exists as a working system with two registries, two scripts, two plans, and four real reconvert validations. The Tier 3 framing from the v3 plan is operative end-to-end. What I want to find still pulling when I return: **the Aesthetics reconvert** — both as the immediate next conversion test AND as the question of whether the pandoc-plus-cleanup approach scales to the harder structural-surgery cases, or whether the custom EbookLib pipeline (v3 §6 Class A/B research-grade) needs to be the next infrastructure investment.
---
## What happened tonight
### Phase 1 — ARC branch push + iCloud typography audit + conversion-skill-plan migration (~early evening)
- **ARC branch pushed**: `docs/spec-extraction-2026-05` (10 commits from today's morning Stage-D matrix work) pushed to both `origin` (Skemantix Gitea) and `github-backup` (GitHub mirror at `davidglidden/arc-backup`). Both pushes clean.
- **iCloud typography audit**: surveyed `~/Library/Mobile Documents/com~apple~CloudDocs/Documents/___The Library [ePub_AWZ3]/__PDF/Typography/` against chamber-library's typography collection. Discovered:
- `emil_ruder_structure.md` in chamber was a **synthetic AI-generated summary placeholder** — frontmatter declared `extraction_note: "Full extraction not feasible - conceptual summary provided"`. Real Ruder had never been ingested.
- `neue_typography_tschichold.md` had `l→t` OCR damage in headings (`Catifornia`, `Tschichofd`, `Educationat`); source PDF metadata identified **Adobe Acrobat 8.12 Paper Capture Plug-in** (circa-2007) as the OCR engine — the iCloud 107 MB PDF source has the same damage signature in its text-layer (`Waiter Dexel`, `finesl`, `TH E ELECTRO-LI BRARY`, etc.).
- The 12 MB "Principles of the New Typography" PDF is a chapter excerpt of the full Tschichold book chamber already has (verified by `grep` finding the chapter title at line 539); confirmed redundant.
- **Plan migration**: moved `conversion-skill-plan-2026-05-{16,17}.md` from `studium-engine/docs/` to `chamber-library/docs/` (rationale: the skill operationally belongs with its operands and registries, which live in chamber-library; the Studium Engine Tier 3 framing is conceptual rooting, not operational placement); left a pointer at `studium-engine/docs/conversion-skill-pointer.md`.
### Phase 2 — Ruder reconvert (the harder case) + registry authoring (~mid-evening)
- **Docling+rapidocr Tier 3 discovery on Ruder**: docling-venv had rapidocr installed but missing `onnxruntime`. Engine wouldn't initialize on image-only PDF. Installed `onnxruntime 1.26.0 + flatbuffers + protobuf`. Re-ran docling — completed in 18.6 min (MPS) but **output failed Stage 5 verification**: word boundaries selectively destroyed at character transitions (`After21yearsof`, `theauthor`, `inspiteofcertain`). docling+rapidocr is `partially_validated` for image-only PDFs with dense Swiss typography — the v3 plan's binary `validated|broken` categories needed extending.
- **Marker discovered installed** (steward caught my shallow "not installed" check — Marker venv at `~/.local/marker-venv/` with full binary suite; was off PATH).
- **Authored `scripts/ocrmac_pdf.py`**: pdf2image rasterisation + ocrmac (Apple Vision LiveText, line mode) + reading-order reassembly. Initial single-column smoke test on trilingual Ruder showed interleaved languages; added `--columns N` flag for column-major reading order (bbox x-centroid bucketing into N equal-width columns, sort column-major). Validated on pages 5-7; ran full Ruder.
- **Ruder filing**: 71,548 words across trilingual de/en/fr; 575.9 sec (~9.6 min) at 0.7 pg/sec; Stage 5 PASSES; filed at `converted_texts/collections/typography/typography_ruder.md` with rich frontmatter; original 121 MB PDF moved to archive.
- **Registries authored**:
- `_curation/installation-status.yaml` (~150 lines): 18 tools tracked with subsystem-state for tools that can fail independently (docling subsystems: `layout_reconstruction` validated, `ocr_rapidocr` partially_validated)
- `_curation/per-author-quirks.md` (~120 lines): entry shape established with Bringhurst (qualified per 2026-05-17 finding), Heidegger, Bachelard, Vico, Tschichold (pre-flagged), Ruder
- **AldineXXI spec audit for Ruder citations**: grep across `docs/AldineXXI-Codex/` returned **zero** Ruder citations. The silent-reliance concern (steward: "we thought we was there, but wasn't") was averted by the spec NEVER having cited Ruder. Only one decorative mention in `scss/AldineXXI/_frontispiece.scss` (`// Conversational scale for reflection - Ruder/Carter approved`) — rhetorical garnish, not load-bearing.
- **Ruder-eye reading of spec**: discussed; steward chose option C (defer to dedicated session) — the masters' reading discipline is slow/dialogic, shouldn't be squeezed into a tool-heavy session.
### Phase 3 — Tschichold reconvert (three pipelines attempted) + scratch cleanup (~mid-evening)
- **Attempt 1 — docling layout-reconstruction**: 14 min; 60,339 words; **FAILED** Stage 5. docling inherited the source's Adobe Acrobat 8.12 damage signatures rather than running fresh OCR (5× `Waiter Dexel`, `finesl`, `wor'ds`, `hear'd`, `TH E ELECTRO-LI BRARY`); plus line-break-hyphenation noise (`be­tween`, `cit­izen`); plus heading mis-promotion (149 `##` headings, many from display text). Lesson: docling layout-reconstruction works for character-level damage (Bringhurst e→&) but does NOT work for text-flow-level damage (hyphenation, word-internal noise).
- **Attempt 2 — Marker `--force_ocr --strip_existing_ocr`**: 77 min elapsed, only 48 of 3237 text-recognition steps done. Surya's `TableRecEncoderDecoderModel` not MPS-compatible → entire OCR pipeline runs on CPU when `--force_ocr` is set. Per-step latency 1.4-500 sec; tool-reported ETA 17-88 hours. **Aborted** — Marker `--force_ocr` is structurally infeasible for >50-page books on Apple Silicon CPU.
- **Attempt 3 — ocrmac `--columns 1`**: 4.6 min; 127,261 words (~2x the prior chamber file's 63,931); 0 of 15 probed Adobe damage signatures present; Stage 5 PASSES. Filed at `converted_texts/collections/typography/neue_typography_tschichold.md`; original 107 MB PDF moved to archive.
- **Archive folder setup**: `_2026 chamber source cleanup/{1. PDF, 2. EPUB}/<tradition>/` (mirrors `chamber-library/converted_texts/` structure; README written explaining the tradition-mirroring convention).
- **Scratch cleanup**: Ruder + Tschichold scratch dirs cleaned after conversion notes captured all evidence.
### Phase 4 — 6 chamber-library commits + LFS architectural discussion + Calibre install (~late evening)
Six commits landed on `main`:
- `3e18734` typography reconverts (Ruder + Tschichold) + conversion infrastructure
- `9ece60b` track load-bearing chamber additions and skill substrate (Tier 3 hygiene — 338 files including Hochuli + scripts + toolset-study that had been sitting in working tree)
- `b5a71a1` chore: .gitignore extension (mempalace.yaml + entities.json + _backups/ + scratch/)
- `a7f213f` remove cruft and reorganization-duplicates surfaced by failed mining (752 deletions: 614 mining-stage images + 88 Loeb duplicates + 15 Harvard Classics + 13 observer-problem-sources + derrida orphan)
- `d53d76d` remove stale tradition READMEs (8)
- `91b52b9` in-place cruft cleanup of 37 retained chamber files (LFS pointer updates)
**LFS architectural discussion**:
- Gitea push blocked: Seb's Gitea install has LFS server issues; steward wants to push without LFS once Seb fixes
- Discussion of GitHub backup mirror — steward wants a private repo at `davidglidden/chamber-library-backup`
- LFS-need analysis: chamber is text-only at chamber's actual scale (largest file 15 MB; nothing approaches GitHub's 50 MB warning); §10.3 settlement makes MD + sidecar canonical; LFS doesn't earn its keep architecturally
- Refined recommendation: migrate off LFS now (free Gitea push, drop GitHub LFS quota anxiety); scope LFS narrowly to TEI-native subset *if* it ever lands (per §10.3 settlement's deferred TEI-native trigger)
- **Steward chose to defer LFS migration**: push to Gitea no-LFS once Seb fixes; investigate further later. Migration deferred-with-reason, not rejected.
- **Calibre 9.8.0 installed via brew cask** (replaced manual install with 8.4.0 that only had `ebook-convert` symlinked; brew cask symlinked all 21 CLI tools including `ebook-polish`, `ebook-meta`, `calibredb`)
### Phase 5 — EPUB pipeline test (Adorno + Calvino filed; Aesthetics deferred) (~very late)
- **Adorno *Minima Moralia*** (350 KB EPUB, Class A well-formed): pandoc 1.17 sec + custom cleanup pass (stripped 43,584 U+00AD soft hyphens + EPUB cover/SVG/internal-anchor TOC artifacts). 91,523 words; 4 `#` (Dedication + 3 Parts) + 100+ `###` (aphorisms 1-153). Stage 5 PASSES — **structure is CORRECT** for the aphoristic form. Filed; source EPUB archived.
- **Calvino *Six Memos*** (152 KB EPUB, Class A with **impoverished NCX** — only 1 entry "Start"): pandoc → cleanup → **hand-craft chapter promotion** via regex (digit+blank+ALLCAPS → `## N. TITLE`). 5 chapters detected from in-body pattern (LIGHTNESS / QUICKNESS / EXACTITUDE / VISIBILITY / MULTIPLICITY), zero false positives. `repair_epub_headings.py` couldn't help (NCX had no chapter content to promote); Calibre `ebook-convert` normalization didn't enrich the NCX either. 38,397 words. Filed; source EPUB archived.
- **Adorno *Aesthetics*** (5.1 MB EPUB): pandoc raw produces 24 `##` headings with wrong shape ("Guide" + "Pages" + "Notes" repeated 8 times — each chapter's notes section gets promoted to chapter level). **Deferred** for fresh attention.
- **Seventh commit `e9e9437`**: EPUB reconverts — Adorno Minima Moralia + Calvino Six Memos; updated per-author-quirks.md with Adorno and Calvino entries.
---
## Decisions locked tonight (and rationale)
| Decision | Rationale | Where recorded |
|---|---|---|
| **Conversion-skill-plan v2+v3 lives in chamber-library, not studium-engine** | Operational artifact belongs with operands; registries (per-author-quirks, installation-status) cited by plan REQUIRE living in chamber-library/_curation/ per §8/§9; splitting plan from registries across repos creates long cross-repo dependency | `chamber-library/docs/conversion-skill-plan-2026-05-{16,17}.md` + `studium-engine/docs/conversion-skill-pointer.md` |
| **docling.subsystems.ocr_rapidocr: partially_validated** (richer status than v3 plan's binary categories anticipated) | Engine works on MPS; output quality fails Stage 5 on image-only PDFs with dense Swiss-typography spacing (token-boundary destruction); acceptable as last-resort fallback only | `_curation/installation-status.yaml` |
| **docling.subsystems.layout_reconstruction: validated_with_limits** | Works for character-level damage (Bringhurst e→&); does NOT work for text-flow-level damage (Tschichold hyphenation, word-internal noise) — those pass through verbatim | `_curation/installation-status.yaml` |
| **Marker constrained: cpu-only pipeline structurally infeasible for >50-page books on Apple Silicon** | Tschichold evidence (77 min, 48/3237 steps, ETA 17-88 hours); Surya's TableRecEncoderDecoderModel not MPS-compatible | `_curation/installation-status.yaml` |
| **ocrmac validated against two real sources** | Ruder (trilingual image-only) + Tschichold (single-column English with damaged text-layer) — both pass Stage 5 | `_curation/installation-status.yaml` + `_curation/per-author-quirks.md` |
| **Source PDF/EPUB archival convention: tradition-mirroring subfolders** | Mirrors `chamber-library/converted_texts/` structure; 1:1 mapping makes archive a progress indicator; scales to the 154-file backlog | `~/Documents/___The Library [ePub_AWZ3]/_2026 chamber source cleanup/README.md` |
| **Calibre install via brew cask** | All 21 CLI tools on PATH; future upgrades via `brew upgrade --cask calibre`; replaces hand-installed 8.4.0 that had only `ebook-convert` symlinked | brew-managed; reflected in `_curation/installation-status.yaml` |
| **§12 precondition #9 added: heuristic body-column filter for ocrmac_pdf.py** | Tschichold reconvert ~10-20% of pages had body prose interleaved with sidebar text; per-page bbox x-centroid histogram + body-column band detection would address this class; reusable for any single-column-with-marginalia source. Steward's "keep this close, it seems like A may be very useful for us" anchored as load-bearing. | `docs/conversion-skill-plan-2026-05-17.md` §12 + TODO marker in `scripts/ocrmac_pdf.py` |
## Decisions explicitly NOT made — and why
- **Did NOT migrate off LFS** — steward chose to defer; can push to Gitea no-LFS once Seb fixes server; migration evaluated and ready when steward picks it up
- **Did NOT set up GitHub backup mirror** — held until LFS handling decision lands
- **Did NOT reconvert Adorno *Aesthetics*** — structural heading surgery on 24 ## headings warrants fresh session; rushing the heading-mode decisions on a canonical text was the wrong tempo
- **Did NOT push the 14 chamber-library commits** — Gitea blocked by Seb's LFS server issue; GitHub mirror not yet set up; both wait on LFS decision
- **Did NOT do the Ruder-eye spec reading** — steward chose C (defer to dedicated session); masters' reading discipline is slow/dialogic
- **Did NOT build the custom EbookLib pipeline** (v3 §6 Class A/B research-grade) — out of scope; precondition for several deferred items
- **Did NOT touch the 8 stale tradition READMEs as part of the cruft commit** — separated into its own commit (`d53d76d`) because the shape was different from mining-scratch cleanup
- **Did NOT promote `scripts/strip_epub_artifacts.py`** as a reusable script — used inline Python for the cleanup pass; promotion is queued (the pattern recurred on both Adorno EPUBs, so it's earned its place; just not authored tonight)
## Mood / present-tense returns
Pattern that held tonight: ***quote/read/verify before composing*** — applied at every articulation-gate (Stage 2) before each conversion attempt. The discipline produced honest classifications:
- Ruder PDF classified as image-only (verified via pdftotext returning empty at front/mid/end) → routed to ocrmac
- Tschichold PDF classified as text-layer-present-but-damaged (verified via pdftotext sample + Producer metadata) → routed first to docling, then ocrmac after failure
- Adorno EPUB classified as Class A well-formed (verified container+OPF+NCX present + pandoc dry-run clean) → routed to pandoc direct
- Calvino EPUB classified as Class A with impoverished NCX (verified NCX has only 1 entry "Start") → routed through hand-craft promotion workaround
Drift patterns named and corrected this session:
- **"Marker not installed" (was wrong)** — initial check shallow (`which` + `pipx list` only); steward caught it; venv-internal binary at `~/.local/marker-venv/bin/marker_single`. Same drift family as past *acting-on-inferred-not-read*.
- **"These typography files are at reasonable depth" (was wrong)** — anchored on word count without examining content; steward pushed back on dismissing Tschichold 107 MB PDF; the l→t damage discovery was the consequence of actually-looking-at-the-file. New entry in the drift catalogue: *anchoring on word count without examining content*.
- **"Tschichold reconvert is the Bringhurst-shaped case" (partially wrong)** — docling layout-reconstruction worked for Bringhurst's character-level damage but doesn't work for Tschichold's text-flow-level damage. The shape match was superficial; the actual damage classification matters.
Patterns to hold forward:
- ***The Tier 3 framing is operative end-to-end*** — installation-status registry with subsystem-state for tools that can fail independently is the kind of substrate the v3 plan §1 calls for; honest "partially_validated" status is more useful than binary categories.
- ***Honest restraint vs contamination-shaped self-effacement*** (from earlier today's Studium handoff): held during LFS discussion. When steward chose to defer migration, didn't push back — the deferral was reason-based (waiting for Seb), not avoidance.
- ***Decisions made in dialogue land cleaner than decisions made unilaterally*** — every reconvert and registry choice tonight came through articulation-then-confirm; the steward's redirects (LFS deferred, Aesthetics deferred, READMEs separate commit) all improved the work.
Recalibrations:
- *Estimating runtime against past-trauma* — was wildly off again. Estimated docling at 2-4h based on Bringhurst's CPU runtime; actual was 18.6 min on MPS. Ocrmac estimated similarly; actual ~5-10 min. Hardware-accelerated tools deserve their own estimation baseline.
- *Treating LFS as "obviously remove"* — needed steward's "but I might have had compelling reasons to accept it" challenge to actually trace the legitimate adoption rationale. Trajectory-question framing landed better than recommendation-first.
## Open horizons after this session
### Tier 0 — Immediate, atomic (next session start)
- **Adorno *Aesthetics* reconvert** — the singular pulling thread; Calibre normalization test first, then heading surgery decision, then file
- **Push the 14 chamber commits** — once LFS decision lands and/or Seb fixes Gitea
- **Set up GitHub backup mirror** (`davidglidden/chamber-library-backup`) — blocks on LFS decision
### Tier 1 — Held for steward decisions
- **LFS migration** (migrate off entirely, keep, or scope-narrow when TEI lands) — affects backup-mirror setup + future repo-size trajectory
- **Custom EbookLib pipeline build** (v3 §6 Class A/B research-grade) — the disciplined path for impoverished-NCX sources like Calvino; ~1-2 hours setup; ~5 min per book thereafter
### Tier 2 — The larger arc
- **154-file reconvert backlog**: tonight banked 4 (Ruder + Tschichold + Adorno Minima + Calvino); ~150 to go. Top items: Lévi-Strauss Mythologiques 1-4, Heidegger Being and Time, Bachelard 3 works, Moby Dick, Adorno Aesthetics (pulling thread), Taruskin Oxford History (massive), Davies Europe: A History (massive)
- **v3 plan §12 preconditions** — 4 of 8 discharged tonight (#2 quirks log ✓, #3 install registry ✓, #4 docling rapidocr fix ✓, #5 ocrmac integration ✓). Remaining: #1 toolset-study revision, #6 GROBID test, #7 Marker multilingual verification, #8 pdfplumber integration, #9 (added today) body-column heuristic
- **Toolset study revision** (`docs/conversion-toolset-study-2026-05-13.md`) — substantial pending update: Calibre `markdown_output` rejected, ocrmac added, docling-first preference with subsystem qualifier, TEI input class, GROBID promotion
### Held externally
- **Seb fixing Gitea LFS server** — blocks Gitea push (chamber + ARC backups); not my workstream
- **Jurist response to executor-as-user handoff** — `~/_Dev/studium-engine/docs/executor-as-user-considerations-2026-05-17.md`; when Jurist analyses, may reshape Studium Engine work
## State references
- **Branch**: chamber-library `main`, **14 commits ahead of origin** (no push possible until LFS handling resolves)
- **Tonight's commits** (chamber-library): `3e18734` (typography reconverts), `9ece60b` (Tier 3 hygiene), `b5a71a1` (gitignore), `a7f213f` (cruft removal), `d53d76d` (README removal), `91b52b9` (LFS pointer updates), `e9e9437` (EPUB reconverts)
- **ARC pushed**: `docs/spec-extraction-2026-05` to both `origin` (Skemantix Gitea) and `github-backup` (GitHub mirror at `davidglidden/arc-backup`)
- **Source EPUBs archived**: `~/Documents/___The Library [ePub_AWZ3]/_2026 chamber source cleanup/2. EPUB/{frankfurt_school,literature/contemporary}/`
- **Source PDFs archived**: same archive folder, `1. PDF/typography/`
- **New scripts**: `chamber-library/scripts/ocrmac_pdf.py`
- **New registries**: `chamber-library/_curation/installation-status.yaml`, `_curation/per-author-quirks.md`
- **New conversion notes**: `_curation/conversions/{typography_ruder,neue_typography_tschichold,minima-moralia,six-memos}.notes.md`
- **Plan migration**: `chamber-library/docs/conversion-skill-plan-2026-05-{16,17}.md`; pointer at `studium-engine/docs/conversion-skill-pointer.md`
- **New ocrmac-venv**: `~/.local/ocrmac-venv/` (ocrmac 1.0.1 + pdf2image 1.17.0 + pyobjc-framework-Vision/Quartz/CoreML/Cocoa)
- **Calibre upgraded**: brew cask `calibre` 9.8.0; replaces manual 8.4.0; all 21 CLI tools on PATH
- **Studium Engine**: 4 untracked items (jurist settlements + executor-as-user handoff + conversion-skill-pointer + plan v2 — which was moved to chamber but still untracked at studium origin); these are all expected-untracked
## Working-state notes for next-Claude
- **Hooks active** (Stop + PreCompact mining to palace-memory).
- **14 commits local on chamber-library `main`, none pushed**. Don't attempt push without re-checking LFS decision state.
- **Aesthetics scratch was NOT preserved** — scratch was cleaned. Re-conversion in next session takes ~1 sec (pandoc on the source EPUB still at iCloud working location — has NOT been archived yet because the conversion wasn't completed).
- **Source EPUB for Aesthetics**: `~/Documents/___The Library [ePub_AWZ3]/The Library [ePub_AWZ3]/Theodor W. Adorno/Aesthetics (1260)/Aesthetics - Theodor W. Adorno.epub` (5.1 MB).
- **The two-EPUB test validated**: pandoc EPUB→MD is fast (1-2 sec/book); the hard work is structural surgery on impoverished-NCX or wrong-promotion cases.
- **Backup of prior Aesthetics chamber file**: `_backups/2026-05-17/aesthetics.md.preconversion-backup` (we made this preemptively expecting the conversion; it's there ready).
- **The `Calvino → custom EbookLib pipeline` lesson**: hand-craft regex worked for THIS source because the pattern was regular (digit+blank+ALLCAPS). Won't work for sources with irregular chapter visibility. The custom EbookLib pipeline remains the disciplined path; tonight's hand-craft is documented as a workaround.
## Pickup orientation for the pulling thread
1. **Read** `MEMORY.md` — Active Session points at this file.
2. **Read this session memory** in full.
3. **Read** `_curation/conversions/six-memos.notes.md` — the impoverished-NCX case study; informs the Aesthetics approach if same pattern recurs.
4. **Check the Aesthetics source EPUB** at `~/Documents/___The Library [ePub_AWZ3]/The Library [ePub_AWZ3]/Theodor W. Adorno/Aesthetics (1260)/Aesthetics - Theodor W. Adorno.epub` is still present (steward archives sources AFTER successful conversion).
5. **Answer the literal question first**: try Calibre `ebook-convert` EPUB→EPUB on Aesthetics; pandoc the normalised version; compare heading count + shape. 5-min test.
6. **If Calibre helped**: proceed with Class B pipeline + cleanup + file. **If not**: propose heading-surgery approach to steward (demote `## Notes` → `### Notes`; strip `## Guide`/`## Pages`); execute on approval.
7. **File** typography Aesthetics with same pattern as the other 3 (frontmatter + conversion notes + quirks entry + source archive); commit (likely 8th session commit).
**Do not touch** (per current scope and steward direction):
- LFS migration (steward deferred)
- GitHub backup mirror setup (blocks on LFS decision)
- Push to Gitea (waits on Seb)
- Toolset study revision (deferred to dedicated session)
- Custom EbookLib pipeline build (deferred to dedicated session)
---
*End of session memory. Authored 2026-05-17 past midnight at session wrap-up. The pulling thread is Adorno *Aesthetics* reconvert; the literal question is whether Calibre normalization solves the heading-promotion problem before manual surgery is needed. Branch is durable on disk at 14 commits ahead of origin; the conversion pipeline is operative end-to-end; the four real reconvert validations (Ruder + Tschichold + Adorno Minima + Calvino Six Memos) establish the Tier 3 substrate is real.*