AudioCapture and AudioPlayback no longer expose the old read_frame()
and write_frame() methods — they were replaced with ring() returning
&Arc<AudioRing> when the lock-free SPSC ring was introduced. The CLI
live-mode loop still referenced the removed methods, which broke every
workspace build that touched wzp-client bin (including the remote
Linux x86_64 docker build).
- Send loop: allocate a 960-sample scratch buffer, fill it in a loop
via capture.ring().read() until a full 20 ms frame is available,
sleep 2 ms between empty reads to avoid hot-spinning.
- Recv loop: write decoded PCM into playback.ring() instead of
calling write_frame(). Short writes on full ring drop the tail,
which is the correct real-time behavior for CLI live mode.
No behavioral change on the wire or in the call pipeline — this is
purely a compile fix for cli.rs bitrot that accumulated since the
ring API landed.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>