Housekeeping per Codex:
- Mirror the live @newsHidden rule into deploy/caddy/Caddyfile.snapshot so the
/news noindex protection is reproducibly recorded.
- Extract the feed's routing helpers (feedBase/parseView/viewUrl) into pure
$lib/feednav.js and unit-test them (the base-aware URL generation wasn't
exercised by the prior suite). NewsFeed imports them; behavior unchanged.
(Note: the step-1 commit also swept in data/wotd_audio/renewal.mp3 — a legit
cached pronunciation, not extraction-related; left as-is per Codex.)
32 frontend tests green; build clean.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>