The 2026-06-06 normalization sweep (3f9a89b, 283 files) prepended a stray permalink-only frontmatter block to 39 memory files, 20 of them session wrap records. Any real frontmatter parser reads the FIRST block, gets `permalink` alone, and never sees name/description/type. The sharp case: `strip_frontmatter` exists specifically to stop thread extraction from matching inside `description:` — its docstring says so. On those 20 wrap records it strips the stray block and hands the real frontmatter back AS BODY, producing exactly the condition it was written to prevent. Repair merges permalink into the real block and drops the duplicate. Nothing retyped: frontmatter and body are carried as slices, body md5 asserted unchanged. TWO DEFECTS OF MY OWN, both found only after claiming success: 1. THREE FILES DAMAGED BY THIS SESSION'S OWN STAMPING COMMIT (ef6fa94). That script located frontmatter with a non-greedy `^---\n.*?\n---\n`, which on a stray-block file matches the STRAY block — so it appended superseded_by to the wrong block and orphaned the real frontmatter into the body. That is the same non-greedy-first-block blindness diagnosed in strip_frontmatter one hour earlier, reproduced in the tool written to clean up after it. And the post-stamp check reported "malformed: none" because it asked "does the file start with frontmatter then a banner" — true for all three — while the claim was "the stamp preserved the record's metadata". The control's subject was adjacent to the claim's, for the sixth time today and the first time in my own verification. Repaired, verified against the pre-stamp file from git: no key lost, prose preserved. 2. REPAIRING 20 APRIL-MAY WRAP RECORDS MOVED THEIR MTIMES TO TODAY, and `sec_pause` picked "newest wrap" by mtime — so the digest promoted an April session to `Last wrap` and lost both the pulling thread and the open question. Caught by the DEGRADED section, which is the honest-degradation mechanism doing its job. `sec_pause` now selects by git add-time, like `wrap_events`. Residual stated in the comment: add-time lags the wrap by hours, so `Last wrap` is an upper bound — wrong by hours where mtime was wrong by months. Verified after: 0 two-block patterns, 0 orphaned frontmatter, 16 stamps intact with name: present, 381 pointers resolve, 0 dead, selftest PASS, drift clean, digest reports 0 degraded sections and the correct last wrap. Not defects: context-discipline.md and relational-gap-analysis.md use the `title:`/`type: note` convention and have no `name:` — flagged by my check, correct as they stand. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013Y6t6qx7cpaCu5xGdD36u4
160 lines
12 KiB
Markdown
160 lines
12 KiB
Markdown
---
|
|
name: ARC PDF + Print posture rendering session plan — XeLaTeX templates + AldineXXI sample images
|
|
description: Dedicated session to build both Postures (PDF + Print) as LaTeX templates, render the Readings typology spec as PDF, and produce sample-image pairs for the AldineXXI page rewrite's Postures section. Two-birds: deliver the deferred Print/PDF posture spec sections AND the AldineXXI assets in one focused session.
|
|
type: project
|
|
originSessionId: a5411fd1-4a96-43e7-aa1a-1a50d8951a8f
|
|
permalink: claude-memory/project-arc-pdf-print-postures-session-plan
|
|
---
|
|
## Context
|
|
|
|
The Print/PDF posture is named in `AldineXXI-specification.md` (Prologue *Postures* line 64; §II.d line 1237) but the actual stylesheet/template work is deferred. Per the spec:
|
|
|
|
- **Print posture**: browser/PDF rendering for a reader who prints from the site. Asymmetric Van de Graaf canon (paper has its own tradition; spread is a fold). **Always asymmetric**, regardless of marginalia density.
|
|
- **PDF posture**: downloadable finely-set form, **mirrors the screen's per-piece composition** (§II.d). Asymmetric when the piece carries marginalia; symmetric when it does not.
|
|
|
|
This session does both postures in one focused day, using the Readings typology-spec amendment (commit `5792286`, 2026-05-14) as test substrate. The Readings entry is dense enough to stress page-flow, multi-language typography (French + Latin + Greek), block quotation, marginalia, italic discipline, and small caps — most of what posture work must handle. Tier-1 typography choice: **XeLaTeX + pandoc** (per steward 2026-05-14: do this properly once; revisit Typst when it overtakes LaTeX for this domain).
|
|
|
|
## Two-birds rationale
|
|
|
|
The AldineXXI page rewrite (memory: `session-2026-05-10-aldine-xxi-chavruta-and-capsule-design.md`) will want sample images illustrating each posture in §I (Postures section). Building both posture templates in the same session produces those images as a natural byproduct.
|
|
|
|
## Pre-session verification (already confirmed 2026-05-14)
|
|
|
|
- [x] **pandoc** — 3.9.0.2 installed at `/opt/homebrew/bin/pandoc`
|
|
- [x] **MacTeX 2026** — installed at `/usr/local/texlive/2026`; `xelatex` / `lualatex` / `pdflatex` / `tlmgr` at `/Library/TeX/texbin/`
|
|
- [x] **IBM Plex Sans** — 12+ weights+styles as TTF in `~/Library/Fonts/`
|
|
- [x] **IBM Plex Mono** — 10 weights+styles as TTF in `~/Library/Fonts/`
|
|
- [x] **EB Garamond** — installed (including SC small-caps variant as OTF: `EBGaramondSC.otf`); also Garamond Premier Pro (Adobe) for richer fallback if needed
|
|
- [x] **pdftoppm** — installed at `/opt/homebrew/bin/pdftoppm` (for PDF → PNG image extraction)
|
|
|
|
Optional (nice-to-have, not required):
|
|
|
|
- [ ] **ImageMagick** (`brew install imagemagick`) — for advanced PNG manipulation; `pdftoppm` covers basic extraction needs
|
|
- [ ] **Verify** specific EB Garamond weights when session opens: Regular, Italic, Bold, Bold-Italic. If any are missing, install via Homebrew cask (`brew install --cask font-eb-garamond`) — but the steward has the Adobe Garamond Premier Pro as premium fallback regardless
|
|
|
|
## Session goals (~6 hours, structured)
|
|
|
|
### Hour 1 — Setup + minimal XeLaTeX template
|
|
|
|
- Working directory: `~/_Dev/animal-davidglidden-eu/tools/latex/` (new)
|
|
- `template-pdf-posture.tex` — minimal XeLaTeX template
|
|
- `template-print-posture.tex` — minimal XeLaTeX template (twoside)
|
|
- Font registration via `fontspec`:
|
|
- `\setmainfont{EB Garamond}` (reading layer per §I)
|
|
- `\setsansfont{IBM Plex Sans}` (navigation register)
|
|
- `\setmonofont{IBM Plex Mono}` (apparatus register)
|
|
- Basic `\usepackage{geometry}` with reasonable defaults
|
|
- Pompeian palette as `xcolor` definitions (light theme; dark theme deferred)
|
|
- First render of a single Readings entry paragraph; confirm fonts render correctly
|
|
|
|
### Hour 2 — PDF posture template (per §II.d, content-driven)
|
|
|
|
Build out PDF posture support for:
|
|
|
|
- **§I Typographic Core** — fontspec stack, font-scale factors per §I (Plex Sans/Mono scale to match Garamond optical size)
|
|
- **§II Spacing Scale** — silence taxonomy (the leading, paragraph spacing, between-section breathing)
|
|
- **§II.d Page composition** — content-driven: asymmetric when piece carries marginalia, symmetric when it does not. Implement as a posture flag in the document preamble; default behavior is content-driven
|
|
- **§III Color** — light-theme Pompeian palette; dark theme deferred
|
|
- **§I.b Lists** — both bullet and definition lists; navigation lists vs reading lists
|
|
- **§VII Apparatus** — dateline (Plex Mono mono-but-not-code register), Sources block (hanging indent), footnotes, captions
|
|
- **§XII Sidenotes / marginalia** — using `sidenotes` package or custom marginalia commands; markerless default, marker-anchored fallback
|
|
- **Code blocks** — `code.sourceCode` styling per §I.c (warm-tinted background)
|
|
|
|
Render the Readings entry; iterate until the page reads as a faithful translation of the screen version.
|
|
|
|
### Hour 3 — Critique + iterate on PDF posture
|
|
|
|
- Surface what breaks: page breaks at wrong places, hyphenation issues, multi-language quirks, small-caps inconsistencies, microtypography gaps
|
|
- Pull out `microtype` package (production microtypography: character protrusion, font expansion, additional kerning)
|
|
- Address discoveries; tune the template
|
|
- **This is where the §II.e+ Print/PDF posture spec sections get their rough draft material**: write down what posture rules emerged from rendering
|
|
|
|
### Hour 4 — Print posture template (twoside, Van de Graaf, asymmetric-always)
|
|
|
|
Switch posture flag to `print`:
|
|
|
|
- `\documentclass[twoside]{book}` or `memoir` class
|
|
- `geometry` with Van de Graaf canon proportions (margins 1:1:2:2 or finer Tschichold ratios)
|
|
- Mirrored margins (`oddsidemargin` / `evensidemargin`) so verso/recto compose as a spread
|
|
- Asymmetric vessel **always active** regardless of marginalia content (per spec line 1239)
|
|
- Header/footer matter: running heads per §VII.f; folios
|
|
- Render the same Readings entry — now as a spread
|
|
|
|
### Hour 5 — Sample-image preparation for AldineXXI page rewrite
|
|
|
|
Render both postures of representative pieces, capture as PNG via `pdftoppm`:
|
|
|
|
- **PDF posture sample**: a piece WITH marginalia (asymmetric — e.g., a Hearth-style piece, or the AldineXXI spec itself) at typical screen-mirror scale; single-page or stacked-pages view
|
|
- **PDF posture sample**: a piece WITHOUT marginalia (symmetric — e.g., a Glimpse caption-only piece or short Fragment); single-page
|
|
- **Print posture sample**: the same WITH-marginalia piece, now as a Van de Graaf spread (two facing pages); the asymmetry of the spread is the point
|
|
- **Print posture sample**: a piece without marginalia, **still** asymmetric (per the always-asymmetric rule); contrast with PDF symmetric version
|
|
|
|
Naming: `static/img/postures/posture-pdf-asymmetric.png`, `posture-pdf-symmetric.png`, `posture-print-spread-with-marginalia.png`, `posture-print-spread-without-marginalia.png`. Resolution: high enough for retina display in the AldineXXI page (likely 2x intended display, ~300dpi from `pdftoppm`).
|
|
|
|
### Hour 6 — Document the template + rough-draft posture spec sections
|
|
|
|
- Capture the rendering session's learnings as rough notes for the §II.e+ Print/PDF posture spec sections in AldineXXI
|
|
- Document the templates: `tools/latex/README.md` explaining build commands, posture flags, font requirements, what each template handles
|
|
- Surface unresolved questions for steward decision (e.g., specific Van de Graaf ratio, whether ARC adopts strict Tschichold or a refined variant, dark-theme PDF rendering)
|
|
- Pickup notes for the next iteration (font kerning if it bothers you, baseline grid if it matters)
|
|
|
|
## Test substrate
|
|
|
|
Primary: the **Readings entry** in `content-typology-specification.md` (lines after Gloss, before "### Draft definitions"). Dense, multi-language, marginalia-friendly, ~2500 words. Stresses everything posture work must handle.
|
|
|
|
Secondary (if Hour 5 has time): the **AldineXXI spec §I-§II.d itself** — a longer document that exercises multi-page layout, running heads, folios, cross-references.
|
|
|
|
## Output artifacts
|
|
|
|
After session, working directory should contain:
|
|
|
|
```
|
|
tools/latex/
|
|
├── README.md # build instructions, posture flags
|
|
├── template-pdf-posture.tex # PDF posture template
|
|
├── template-print-posture.tex # Print posture template
|
|
├── arc-typography.sty # shared font + color + spacing definitions
|
|
├── pandoc-pdf-posture.yaml # pandoc invocation config
|
|
├── pandoc-print-posture.yaml # pandoc invocation config
|
|
└── samples/
|
|
├── readings-entry-pdf-posture.pdf
|
|
├── readings-entry-print-posture.pdf
|
|
└── images/
|
|
├── posture-pdf-asymmetric.png
|
|
├── posture-pdf-symmetric.png
|
|
├── posture-print-spread-with-marginalia.png
|
|
└── posture-print-spread-without-marginalia.png
|
|
```
|
|
|
|
Plus:
|
|
|
|
- Rough draft of §II.e (or wherever they land) — Print posture spec section + PDF posture spec section — saved to `docs/AldineXXI-Codex/drafts/postures-rough-draft-YYYY-MM-DD.md`
|
|
- Sample images copied to `static/img/postures/` for AldineXXI page rewrite use
|
|
|
|
## Pickup notes for future-Claude or steward
|
|
|
|
- **Read this file first; it's self-contained.**
|
|
- DO NOT touch code before confirming the pre-session checklist; if anything is missing, install before starting
|
|
- Per CLAUDE.md governance, this session is **[HARDENING]** at minimum (addresses class of failure in deferred-posture-spec; brings two specs to first-render) — though arguably it's spec implementation against an already-agreed direction, which is fine to proceed as `[FIX]`-style execution. Steward to clarify if escalation needed.
|
|
- The Readings spec amendment `5792286` is the test substrate; the spec already references the typology entry by name in commit body
|
|
- The session should result in TWO commits: (1) `tools/latex/` template scaffolding; (2) AldineXXI §II.e+ posture spec rough draft + sample image attachment
|
|
- DO NOT deploy the site during this session — the work is template + assets + spec rough draft, not site-content
|
|
- The font stack is the steward's installed system fonts (TTF in `~/Library/Fonts/`), not the site's `_site/fonts/` woff2 files. fontspec uses system fonts directly. The woff2 files remain authoritative for the WEB delivery; LaTeX uses TTF/OTF for the PDF/Print delivery. Two delivery surfaces, two font formats, same typeface intent.
|
|
- **Microtypography is the quality lift.** `\usepackage{microtype}` with appropriate config (character protrusion, font expansion, additional kerning, tracking for all-caps) is the single most important quality move. Don't skip.
|
|
- **Hyphenation patterns**: French + Latin + Greek + English content needs polyglossia or babel with appropriate language packages. `\usepackage{polyglossia}` is current best.
|
|
- **The image-capture trick**: `pdftoppm -r 300 -png input.pdf output_prefix` produces high-resolution PNG; trim/frame in Preview or via `convert` (if ImageMagick installed).
|
|
|
|
## Connection to other open arcs
|
|
|
|
- **AldineXXI page rewrite** (memory: `session-2026-05-10-aldine-xxi-chavruta-and-capsule-design.md`) needs sample images for the §I Postures section. This session produces them.
|
|
- **Readings spec** (commit `5792286`, memory: `project-gloss-vs-commentary-distinction.md`) is the substrate. This session is its first rendered exercise.
|
|
- **Chamber cruft restoration** (memory: `project-chamber-cruft-restoration.md`) is independent of this session; runs on its own arc.
|
|
- **L1 recall fix** (memory: `project-L1-recall-fix-session-plan.md`) is independent; runs on its own arc.
|
|
|
|
## Open questions for the session itself
|
|
|
|
1. Which Van de Graaf ratio variant? The classic canon (1:1:2:2 margins) or a refined Tschichold ratio? The masters in chamber (Tschichold, Bringhurst) likely have the answer; check the chamber if uncertain.
|
|
2. Hyphenation: strict Knuth-style or relaxed for narrow measures? Print and PDF may want different settings (Print's spread allows wider measures; PDF's screen-mirror may need narrower).
|
|
3. Drop caps: §I governs in HTML; how does this translate to LaTeX? `lettrine` package is standard; check if it honors the right typeface and integrates with EB Garamond cleanly.
|
|
4. Small caps: `\textsc{}` vs proper SC font (`EB Garamond SC` is available as separate OTF). The SC OTF gives true small-caps; `\textsc{}` synthesizes from regular if no SC font is registered. For Aldine-grade work, true SC is the floor.
|
|
5. Dark-theme PDF rendering: deferred from this session, but worth noting whether the template can be extended later via a `--variable=theme=dark` pandoc flag. |