Open general

Known limitations + field reports (playback reliability)

John Lauer · 3mo ago

Living tracker for adom-tts playback issues. Post field reports here (not in private threads) so every user sees known issues and their status.

KNOWN LIMITATIONS (current as of v1.9.20):

  1. History clips recorded before v1.9.19 replay WITHOUT their karaoke transcript (words were not persisted back then; unfixable for old clips — everything since carries words).
  2. Long single-request synthesis on the service side remains duration-sensitive; the CLI mitigates by chunking at 360 chars. A server-side streaming/job-poll fix belongs to service-tts, not this client.
  3. Surface reliability on a flapping cellular hotspot is mitigated (download-then-play, buffering, 3x auto-retry incl. early-partials, offline grace) but a device that stays offline past the 10-min buffer window will still drop clips — by design, with clip_gave_up logged.

RESOLVED THIS WEEK (see dev skill for detail): double-play/flipping (single-owner lock + version supersede), env-poisoned drainers (env self-heal), confirm-vs-retry race, early-partial auto-retry, all-time log counters misreading as current failures (24h window + rotation).

HOW TO REPORT: include adom-tts logs tail + the clip's check output + your adom-tts --version. The dev skill's debugging playbook maps most symptoms to causes.

2 Replies

John Lauer · 1mo ago

Tracker update, current as of 1.9.45 (this issue stays open by design; it is the living list).

RESOLVED since the v1.9.20 note above, each with a regression test in tools/ralph-test.sh (11/11 green):

  • Second clip cut off on arrival (1.9.43): stale telemetry from the previous clip was attributed to the new one during blob download, so the new clip was marked done ~3s in and falsely reported ok. Page now vouches telemetry with loaded=1; drainer ignores unvouched reports. T10.
  • Restart destroyed a paused clip (1.9.39): restart refuses while a clip plays or is paused (--force overrides); a killed drainer's clip lands in History as interrupted, never silently deleted. T3, T8.
  • History replay dead while idle (1.9.39): the idle loop now processes replay taps and does not idle-close while a page is watching. T4.
  • Ancient audio spoken (1.9.36): a stale-audio guard refuses audio older than the freshness window; age rides in the queue entry (audio_ms) because the snapshot's mtime always looks fresh. T6.
  • Garbage filenames in the header (1.9.39): bare replays recover name/thread/desc by content hash. T7.
  • Port wedge / pup never plays (1.9.32, 1.9.39): port reuse across restarts (T9); the true pup root cause was Chrome suspending media in an occluded window, so the pup player opens visible.
  • Tab flashing forever (1.9.40): alert cleared the moment audio finishes, 10-minute hard cap regardless.
  • AI told playback was human-only (1.9.45, issue #3): status, check, and --confirm all name adom-tts control play when the player is paused.
  • Naming cutover (1.9.41, 1.9.42): adom-bridge CLI, pup_* verbs, ADOM_BRIDGE_TARGET (legacy var still read).

Also new: adom-tts settings (default surface), and the adom-tts-test dev skill documenting the whole matrix with the incident behind each test.

KNOWN LIMITATIONS, updated:

  1. and 2. above unchanged.
  2. Offline past the 10-minute buffer still drops clips by design (clip_gave_up).
  3. check with no argument does not yet default to the caller's last clip (asked in #3, not built).
  4. A live two-machine pup run has not been re-verified on real hardware since the fixes; both machines are on the relay again, so the next field report there is welcome.
John Lauer · 1mo ago

Tracker update, current as of 1.9.48. Three items from the narrated-Altium-tour thread's report (#4, now closed), all with regression tests (tools/ralph-test.sh 24/24):

  • Silent show behind a paused player (1.9.46): say --play and play now warn at SEND time when the player is paused and name adom-tts control play; the check/--confirm/status failure paths stopped claiming playback is human-only (#3). No more 16 successful sends into silence.
  • Demo narration in lockstep with the screen (1.9.47): adom-tts load pre-synthesizes and prefetches a whole script onto the player; cue <script> <n> --confirm plays exactly one marker instantly (no synthesis, no download, nothing auto-advances); cue-status gives per-marker state. Field-verified on two eight-marker live shows. T11.
  • Retracting stale clips (1.9.48): queue clear --mine <thread>|--all (waiting clips only, unscoped is refused), queue drop <clip|req-id>, control skip (ends the playing clip, verdict skipped, no retry). Dropped and skipped clips go to History, never silently destroyed. The ACCEPTED line now reports how many seconds of audio are queued ahead. T12.

Naming since the 2026-08 cutover: the desktop relay is Bridge (ab, CLI adom-bridge), the pin variable is ADOM_BRIDGE_TARGET, and the pup verbs are pup_*.

Log in to reply.