We thought TTS was fine until Kokoro voices slipped past validation. Every synthesis failed with a KeyError on both rooms because Pipecat’s stock service only accepted its own hardcoded catalog; since our local Speaches bridge served bf_isabella and similar entries outside that list, the gate raised errors before requests even left.
This felt cursed in operation – audio was present but silent until we realized it wasn’t an API fault. We patched this by registering Kokoro voices as identity pass-throughs using VALID_VOICES.setdefault(voice, voice) so Pipecat would accept them rather than reject (PR #1153). A follow-up PR fixed attribute access for tests and production to ensure the code hits that class-level key correctly.
With audio flow re-established we turned toward platform seam migrations. We continued Wave 3e sweeps by moving generate_video_shot_list reads from local state directly into a typed handle in clean-stage dispatch, then followed up with QA aggregate atoms doing config lookups via platform.config instead of loose dicts (PR #1147). These are read-swaps only; tests confirmed weights fall back to defaults if the platform capability isn’t attached.
We deleted redundant _Cfg stubs and verified fallback paths work for missing handles, keeping our ability tolerance intact. Earlier we also patched SEO foot-guns: dropping /_next/ from robots.txt so Googlebot can render full page layouts again (PR #1144).
Finally a new Grafana alert landed to catch zero captures explicitly – brain-page-view-capture-dead triggers when views hit three days of zeros while GSC clicks stay active. This closes the blind spot our existing traffic-drop rule has where 24-hour blackouts never trigger because ratio math normalizes them (PR #1145).
From here we’ll watch that cross-signal data flow, and continue tightening how atoms resolve configuration without threading state manually. …
Auto-compiled by Poindexter from today’s commits and PRs. See the work: github.com/Glad-Labs/poindexter.



