Files
dotfiles/claude/memory/project-eb-garamond-update-2026-05-14.md
T
David F GliddenandClaude Opus 4.8 3f9a89b00c chore(memory): Basic Memory trial begins — sync normalization baseline (283 files)
Basic Memory v0.21.6 first sync over the live memory dir (steward-authorized
live-dir trial, Option A 2026-06-06): adds permalink: to frontmatter, refolds
long YAML description lines, strips final newlines. Bodies untouched —
verified via full diff classification. From this commit forward, any diff in
claude/memory shows only what Basic Memory or the session writes.

Trial design: MemPalace untouched as incumbent; git status check on this dir
at every wrap; end-of-day evaluation (recall quality, sync robustness,
rebuild-from-files, malformed-file behavior).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 09:52:17 +02:00

124 lines
9.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
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: EB Garamond + EBGaramondSC font update — Phase 1 / 2 / 3 + LaTeX + SC corrective
+ feature expansion all DONE 2026-05-15
description: Five commits across two days. Phase 1 (2026-05-14, d9efb88) — core TTFs
+ Regular/Italic/Bold WOFF2 from Pardo v1.131. Phase 2+3 (2026-05-15, 6763b54) —
Medium/SemiBold WOFF2 subsets + EBGaramondSC{08,12}-Regular built from Duffner source.
LaTeX integration (2026-05-15, e3478e0) — arc-typography.sty \scfont references
EBGaramondSC12-Regular.ttf. SC subset corrective (2026-05-15, 4512b9a) — retained
403 .sc glyphs + smcp/c2sc in Medium/SemiBold (versalita verdadera). Feature expansion
(2026-05-15, 9d2cccb) — added case + ss06 (Garamond long-tail Q) + ordn (proper
ordinals per Hart's §3.3) + swsh + frontispiece-epigraph italic swash CSS pattern
(chancery flourishes on every capital of threshold quotations; title stays sober
roman per Aldine practice given roman swsh has only 3 Q.long subs). One pre-existing
issue still parked — \textsc TeX-capacity crash from yesterday's Phase 1 — flagged
at bottom of this memory.
type: project
originSessionId: 6cef24d0-242b-474e-b8d4-fd568edf5dc2
permalink: claude-memory/project-eb-garamond-update-2026-05-14
---
## State as of 2026-05-14
Steward's installed EB Garamond v1.000 (2017 release; installed to `~/Library/Fonts/` 2019-03-14) is ~6 years out of date. Upstream `octaviopardo/EBGaramond12` is alive with active development through 2026-03-27 (master `106a4a6`). Upgrade gains: language coverage refinements, kerning improvements, bug fixes accumulated since v1.000.
Plus: `EBGaramondSC` (the separate small-caps face from Georg Duffner's original `georgd/EB-Garamond`) is also stuck at the 2019 OTF. Duffner's repo last pushed 2024-03-16; ships source files (SFD/UFO/featurefiles) only — no pre-built TTF/OTF/WOFF2 available. Building requires fontforge/UFO tooling.
## Phase 1 — DONE 2026-05-14
Core face TTF (10 files) + 3 live web WOFF2 (Regular, Italic, Bold) replaced with upstream `octaviopardo/EBGaramond12` master (sha `106a4a6`, 2026-03-27). Old files backed up to dated `_backup_2026-05-14/` directories.
**Files updated:**
- `~/Library/Fonts/EBGaramond-{Regular,Italic,Bold,BoldItalic,Medium,MediumItalic,SemiBold,SemiBoldItalic,ExtraBold,ExtraBoldItalic}.ttf`
- `~/_Dev/animal-davidglidden-eu/static/fonts/eb-garamond/EBGaramond-{Regular,Italic,Bold}.woff2`
**Verification:**
- LaTeX hour1-fontcheck.tex re-rendered: substrate clean, no regressions
- Readings-entry PDF posture re-rendered: text rendering matches v1.000 character; advance widths landed slightly differently but rhythm holds
## Phase 2 — DEFERRED (re-subset Medium / SemiBold web subsets)
Four WOFF2 subset files are used live in the screen render:
- `EBGaramond-Medium-Latin.woff2` (23 KB; basic Latin block)
- `EBGaramond-Medium-LatinExt.woff2` (65 KB; Latin Extended)
- `EBGaramond-SemiBold-Latin.woff2`
- `EBGaramond-SemiBold-LatinExt.woff2`
These were produced via subsetting (probably `pyftsubset`) from full Medium / SemiBold WOFF2 with unicode-range CSS to split. After Phase 1, the SOURCE Medium/SemiBold has changed but the SUBSET files haven't been regenerated — so the weights 500/600 on screen still serve the May 2026 subsets which were derived from a slightly older upstream.
**To complete Phase 2:**
1. `pipx install fonttools[woff]` (or `brew install fonttools` — verify pipx vs brew for the right binary; the pipx route is the steward's preferred installation path per the toolchain feedback memory)
2. From the new `EBGaramond-Medium.ttf` and `EBGaramond-SemiBold.ttf` (in `~/Library/Fonts/`), produce:
- Latin subset (U+0020–U+007F + common Latin-1)
- LatinExtended subset (U+0080–U+024F + commonly-needed extended Latin)
3. Save as WOFF2 with optimal compression
4. Replace the four files in `static/fonts/eb-garamond/`
5. Visual-diff a screen render to confirm the new subsets are consistent
Approximate effort: ~30 min hands-on + the install of fonttools.
## Phase 3 — DEFERRED (EBGaramondSC update)
`EBGaramondSC.otf` (local) and `EBGaramondSC-{Display,Regular}.woff2` (web) are stuck at the 2019 Duffner version. The Pardo continuation (`octaviopardo/EBGaramond12`) does NOT include SC — the modern approach bakes small caps into the main face via OpenType `+smcp` feature.
**Two paths for Phase 3:**
A. **Build from Duffner source** — clone `georgd/EB-Garamond`, install fontforge tooling, build EBGaramondSC.otf from the SFD/UFO sources. Last upstream push 2024-03-16, so a fresh build may capture some updates since 2019 — though Duffner's repo has been quiet enough that gains are uncertain.
B. **Migrate to +smcp on the main face** — if Pardo's `EBGaramond-Regular.ttf` includes the `+smcp` feature, the separate SC face can be retired entirely. The LaTeX `\scfont` declaration becomes `\rmfamily\addfontfeatures{Letters=SmallCaps}`. CSS-side, `font-variant-caps: small-caps` works against the regular WOFF2.
The cleanest move is **B if Pardo has +smcp**. Verify by:
```
otfinfo -f ~/Library/Fonts/EBGaramond-Regular.ttf | grep -i smcp
```
or `fc-list -v 'EB Garamond' | grep -i small`.
If +smcp is present, retiring the separate SC face simplifies the stack across both LaTeX and web. If absent, Path A is the fallback.
Approximate effort:
- Path B (if +smcp present): ~20 min (verify, edit arc-typography.sty + SCSS, test)
- Path A (build from source): half-day session — fontforge + ufo2ft pipeline learning curve
## Sequencing recommendation
When the steward returns to this:
1. **First**: verify Pardo's +smcp presence (5 min check). Settles whether Phase 3 is the simpler Path B or the heavier Path A.
2. **Then**: install fonttools via pipx and complete Phase 2 (~30 min). Closes the subset-regression gap from Phase 1.
3. **Finally**: execute Phase 3 — Path B if +smcp confirmed; Path A if not.
## Filing discipline
- Local backups at `~/Library/Fonts/_backup_2026-05-14/`. Restore via `cp _backup_2026-05-14/*.ttf .` if a regression surfaces.
- Web font backups at `static/fonts/eb-garamond/_backup_2026-05-14/`. Restore via the same pattern.
- Per `feedback-tool-installation-pipx-default.md`: install fonttools via `pipx install fonttools[woff]` (general-purpose CLI tool, isolated deps, on PATH).
## Related memory
- `feedback-tool-installation-pipx-default.md` — pipx-default rule applies to the fonttools install.
- `project-arc-pdf-print-postures-session-plan.md` — LaTeX templates that consume the updated TTFs.
- `project-chamber-cruft-restoration.md` — independent thread; no font dependency.
---
## Pre-existing issue surfaced during 2026-05-15 verification — needs separate investigation
While verifying the LaTeX integration (commit `e3478e0`), `xelatex` on `tools/latex/samples/hour1-fontcheck.tex` crashed with **"TeX capacity exceeded, sorry [input stack size=10000]"** at line 49 — the `\textsc{small-caps via the synthesized command}` invocation. Confirmed by isolation test: failure persists with `\scfont` block entirely commented out, so it is NOT caused by today's SC font work.
**Likely root cause:** microtype tracking config (`mt-EBGaramond.cfg`) interaction with Pardo v1.131 OpenType feature table introduced in Phase 1 commit `d9efb88` (yesterday). The failure happens in expl3 csname construction (`exp_args:Nc`) shortly after `mt-EBGaramond.cfg` loads. The expansion never produces output; the PDF is not written.
**Verified scope:**
- `\textsc` (synthesized small caps on main EB Garamond Regular face) — BROKEN
- `\scfont` (true SC face via EBGaramondSC12-Regular) — WORKS (verified by minimal isolation test producing a clean 14 KB PDF)
- `\emph`, `\textbf`, `\textit{\textbf{...}}`, colour — not directly tested but no errors before line 49
**Last known working state:** `tools/latex/samples/hour1-fontcheck.pdf` dated `14 May 13:47` (just after Phase 1 commit at ~13:05). Whether that PDF actually reflects a successful post-Phase-1 render or was stale from an earlier successful render is not certain.
**Diagnostic path when picked up:**
1. Render `hour1-fontcheck.tex` with `microtype` disabled (`\usepackage[disable]{microtype}` or comment out the `microtype` `\RequirePackage` in arc-typography.sty). If render succeeds, microtype is implicated.
2. If microtype is the cause, inspect `mt-EBGaramond.cfg` for tracking rules that depend on font metadata that may have changed between EB Garamond v1.000 (2017) and Pardo v1.131 (2026-03-27).
3. Workaround if needed: drop `tracking = true` from the microtype options in `arc-typography.sty:28-32` and accept slightly less polished all-caps / small-caps spacing.
4. Real fix if microtype config is at fault: file a small fix to microtype's mt-EBGaramond.cfg, or override the relevant tracking config locally in arc-typography.sty.
**Where to find the working LaTeX setup once fixed:** the existing test `tools/latex/samples/hour1-fontcheck.tex` exercises every component arc-typography.sty registers — it's the right substrate for verifying any fix.
**Not blocking:** the SC font work (commits `6763b54` + `e3478e0`) is complete and independently verified. This issue is older than today's work and warrants its own session.