e3a5c6f07d
When the device finishes streaming waveform data, it sends a single partial byte (raw_bytes=1) rather than a complete A5 frame, then goes silent for the full 120s timeout. Observed: 35 chunks succeed, chunk 36 times out with raw_bytes=1 — identical for both events in the test run. Fix: on TimeoutError, if bytes_fed > 0 and we already have collected frames, treat it as natural end-of-stream and break to the termination step rather than propagating the exception. True transport failures (raw_bytes=0, no prior frames) still raise. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>