/aqua/dings/ and /aqua/ear/ are replaced in place (staging dir renamed over the old one, so a failed or
repeated run leaves a whole page); `banners` marks every older per-hash page with a pointer and deletes
nothing. Six stdlib tests: idempotence, replacement, refusal of a non-page, failed publish keeps the old
page, banners added once without touching content, ear index.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>