- Empty/all-comments manifest.yaml is the empty archive, not a fatal
parse error (AUDIT §3.11)
- Backlinks normaliseUrl strips index.html like SimilarLinks, so links
to canonical directory URLs invert again; Stats normUrl updated in
lockstep (§3.12)
- PDF viewer file= query value percent-encoded (hand-rolled RFC 3986
encoder; network-uri is not a dependency) (§3.13)
- Photography feed thumbnails embed for flat singles and series
children, not just directory entries (§3.14)
- Marks trust is Maybe Int: missing confidence/evidence collapses the
figure to the bare frame as documented, instead of a literal
"0 TRUST"; result-shape glyph centers when no score (§3.15)
- Unknown catalog categories fold into one Other bucket; medians take
the mean of middle elements; protocol-relative URLs excluded from
backlinks; @string/@comment/@preamble skipped in BibTeX parsing;
watch-staleness of the once-per-process archive reads documented;
stale comments fixed (§3.16, §3.9)
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>