← Commit history

v1.9.20 — field fixes: auto-retry early-partial clips, confirm waits through retries + inline evidence, 24h log window + rotation

John Lauer ·3db4f8f884 ·3mo ago ·parent 5b6e262
2 files changed +12−15
dev-skills/adom-tts-dev/SKILL.md+12−2
@@ -54,7 +54,9 @@ manually — deploy a new version and let supersede do the handoff. If you must - Clips **buffer** (up to 10 min) until the player page shows a *sustained*   live audience — 3 consecutive polls. One fresh poll is NOT alive (a   disconnected/backgrounded page still trickles heartbeats).-- `no-playback` clips are **retried 3×**, never silently consumed.+- `no-playback` AND **early-partial** clips (died under 10% of their duration,+  e.g. 0.7s into an 80s clip) are **retried 3×** (`clip_retry` with a reason,+  `replay: auto`), never silently consumed. - The page **downloads the whole mp3 to a local blob before playing** —   a cellular-hotspot drop mid-clip cannot stall audio (the listener is often   tethered while driving).@@ -69,7 +71,12 @@ Synthesis success ≠ playback. The page reports telemetry (beacons + piggybacke on `/poll` so a connection gap can't fake a failure); the drainer logs a `clip_end` verdict (`ok/partial/no-playback/error`) per clip to `~/.adom/tts/events.jsonl`. `--confirm` and `check` read that log — they never-touch the contended surface, which is why they're trustworthy. Any new playback+touch the contended surface, which is why they're trustworthy. CRITICAL: the+verdict must reflect the LATEST attempt — `--confirm` keeps waiting while a+retry is queued/playing instead of failing on the first attempt's verdict+(the confirm-vs-reality race from field feedback), and failure output includes+inline evidence (reached/duration + live surface state) so no forensics+session is needed. Any new playback feature MUST keep the verdict truthful; a false "ok" is the worst bug this system can have (a driving user silently misses answers). @@ -115,6 +122,9 @@ threads) and gets confused about WHO said WHAT. Two mechanisms, keep both:  - Start: `adom-tts logs` (verdict summary + anomaly hints) and `adom-tts status`   (lock pid/version, current clip, queue). Raw: `~/.adom/tts/events.jsonl`.+  The summary is a 24h WINDOW and the log rotates (newest 3000 events) —+  before that, cumulative counters made healed week-old incidents read as+  "failing hard today" and sent reporters chasing ghosts. - "Clip played twice / flipping" → two drainers or a reopen-after-start. Check   lock vs live `__drain` processes and `player_reopen` events. - "Synth ok, verdict no-playback" → page not connected. Check
page.json−13
@@ -12,7 +12,6 @@     "audio",     "demo",     "accessibility",-    "cli",     "open-source",     "mit"   ],@@ -65,17 +64,5 @@   ],   "install": {     "binary_name": "adom-tts"-  },-  "description": "Adom's shared text-to-speech CLI + Playground. Reads your AI answers back to you while driving, and renders perfectly-timed voiceover tracks for demo videos.",-  "dependencies": {},-  "scripts": {-    "install": "./install.sh",-    "uninstall": "./uninstall.sh"-  },-  "needs_sudo": false,-  "org": "adom",-  "author": {-    "name": "John Lauer",-    "email": "[email protected]"   } }\ No newline at end of file