diff --git a/persistent-memory.d/2026-09-15-talk-v10-deploy.md b/persistent-memory.d/2026-09-15-talk-v10-deploy.md index 10c2a6d..0642933 100644 --- a/persistent-memory.d/2026-09-15-talk-v10-deploy.md +++ b/persistent-memory.d/2026-09-15-talk-v10-deploy.md @@ -72,6 +72,33 @@ configured intent, not the running reality. Both check the INPUT to a transforma and get reported as if they checked its OUTPUT. See `2026-09-15-parakeet-stt-fv-ml1.md` for the ASR instance of the same shape. +## ⚠ My fifth gate had a GAP — tts-dev found it and fixed it + +Adopted into tts-stack as **`tools/gate_served_page.py`** (`uv run tools/gate_served_page.py `; +needs only curl-equivalent and node). But **my version would have passed a broken page**: + +**A worklet lives inside a template literal**, so a syntax error in it is invisible to a +parse of the *enclosing* script — it is just a string until `addModule` compiles it at +runtime, where it fails as a **rejected promise**. The page then quietly falls back to +buffered playback, or records nothing at all on the capture side. **Silent degradation, +which is harder to notice than a dead page, not easier.** Their version parses the +worklet separately. + +They **positive-controlled it** rather than assuming it worked — a gate that has only +ever passed cannot tell you it is not blind. Two deliberately broken pages, both exit 1: + + the exact escape bug -> block 0 SYNTAX ERROR + broken worklet, valid script -> block 0 OK, worklet SYNTAX ERROR <- mine passes this + +⚠ **Empty block list exits 2, not 0.** A page that suddenly has no inline script is a +different page or a broken build; passing there would make the gate a no-op exactly +when it matters most. + +⭐ Lesson on my own work: I built a gate for the failure I had just been shown and +stopped at its boundary. The failure class is "code that is a string at parse time and +code at run time" — an inline `