_pcm_tail_loop caught bare Exception, so any bug in the tail thread died silently while the bot stayed mute. Only the expected closed-pipe errors (OSError incl. BrokenPipeError, ValueError on a closed stdin) are quiet now; anything else surfaces through the thread's excepthook.