recap/bin/tts.mjs: skip /api/say if narration hash matches cached recap.mp3
ElevenLabs (via the /api/say proxy) is the only real-money step in the
recap pipeline besides photo gen. Hashing the narration text + voice
config + checking out/recap.mp3.hash lets reruns skip the API hit when
nothing changed. --force overrides.
This unblocks $0 reruns of an episode (audio + photos already cached).
First step toward the broader ac-24 CLI cache layer (see memory note
feedback_recap_ac24_cli.md).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>