- Backlinks: handle Plain blocks (tight list items) and DefinitionList
in link extraction — links in ordinary bullet lists were invisible to
the backlinks system (AUDIT §3.3)
- Sidenotes: render note bodies with a KaTeX writer so footnote math
reaches the client-side KaTeX pass instead of degrading to italics
(§2.4)
- Archive: join manifest to provenance on normalised URLs like every
other comparison in the system — an equivalent-form URL edit silently
unpublished the page while links kept pointing at it (§3.6)
- Photography: flat singles get their basename as slug and root-level
asset paths in map.json (§3.7); geo-precision now fails closed — an
unrecognised value (typo'd "hidden") suppresses the pin instead of
publishing rounded coordinates (§3.8)
- Stability: age is measured first-commit -> today, not the commit
span, so quiet time stabilises a piece as documented (§3.4);
history: entries are sorted newest-first by date regardless of
authored order (§3.5); pinned pages format last-reviewed like the
git branch (§3.10)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Stats.hs: median uses (!!) directly after the empty-case equation,
dropping the unreachable empty-fallback arm.
- Stats.hs + BibExtras.hs: switch lazy readFile to strict readFile'
(System.IO). Lazy IO leaves handles open until the value is forced;
errors surface at unpredictable points and the em-dash fallback in
Stats can hide real I/O failures. Strict reads fail at the read.
- Stability.hs: stabilityFromDates uses 'last dates' directly, since
the (newest:_) pattern guarantees non-empty input.
versionHistoryRangeField and versionHistoryRangeEndField bind the
matched list as 'es' and call 'last es', dropping the
reconstruction of (newest : more) just to call last on it.
- Tags.hs: parentOf is a 3-arm case (\[\], \[_\], segs) instead of a
length-based guard around 'init segs'.
- Catalog.hs: renderGroup re-orders so the structurally-guaranteed
(e:_) arm is matched first; the empty arm stays as a coverage stub
with a comment noting it's unreachable per groupBy's contract.
- Utils.hs: trim uses dropWhileEnd instead of double-reverse.
All sites were runtime-safe before; the changes make the safety
structural and shorter to read.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>