mirror of
https://github.com/smittix/intercept.git
synced 2026-04-24 06:40:00 -07:00
The stream thread used a blocking readline() with no timeout, so once DSD finished outputting its startup banner there were no more events until actual signal activity. The frontend decayed to zero and appeared dead. If DSD crashed, the synthesizer state never transitioned to 'stopped' so there was no visual or textual indication of failure. - Use select() with 1s timeout on DSD stderr to avoid indefinite block - Send heartbeat events every 3s while decoder is alive but idle - Detect DSD crashes: capture exit code and remaining stderr, send as 'crashed' status with details and show notification to user - Frontend properly transitions synthesizer to 'stopped' on process death (was only happening on user-initiated stop) - Increase idle breathing amplitude so LISTENING state is clearly visible (0.12 +/- 0.06 vs old 0.05 +/- 0.035) - Release device reservation on crash, not just user stop Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>