Padding/probe packets use a sequence number but carry no audio. They were
treated as lost, so each one played an invented 20 ms frame (a glitch) and
pushed the buffer a frame deeper for drift correction to remove again.
Signature in the first live test: lost ~= drift-drops (74 vs 72 per minute).
They are now skipped and counted as 'padding'.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The cohost sounded jittery on the 2026-11-03 show. v1 skipped ahead on an
underrun and kept playing from an empty buffer, so after the first hiccup
every later wobble was another glitch. It also never corrected a slow guest
clock: ~12 glitches/min in simulation at 30 ppm slow.
- Underrun: hold the sequence position and refill to a larger target
- Drift correction both ways (drop/insert a frame in quiet moments),
quiet judged relative to the guest's own noise floor
- 80 ms start, 300 ms max, relaxes after 2 calm minutes
- Log 'rx 1m:' stats, the selected route, and call totals
- Ping the guest websocket every 25 s (the proxy closed it every 90 s)
- Simulation kept in test/jb_sim_test.go.txt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>