63f0ec96ec
Tests cover the actual code paths changed in voice fixes: _on_packet DAVE passthrough (8 tests): - Known SSRC + DAVE decrypt success → buffered - Unknown SSRC + DAVE → skip DAVE, passthrough to Opus - DAVE "Unencrypted" error → passthrough, not dropped - DAVE other error → packet dropped - No DAVE session → direct decode - Bot's own SSRC → ignored (echo prevention) - Multiple SSRCs → separate buffers SSRC auto-mapping (6 tests): - Single allowed user → auto-mapped - Multiple allowed users → no auto-map - No allowlist → sole non-bot member inferred - Unallowed user → rejected - Only bot in channel → no map - Auto-map persists across checks Buffer lifecycle (4 tests): - Known SSRC completed utterance - Short buffer ignored - Recent audio waits - Stale unknown buffer discarded TTS playback (10 tests): - play_tts calls play_in_voice_channel in VC - play_tts falls through when not in VC - play_tts wrong channel no match - Voice input dedup (runner skips) - Text + voice_mode combinations - Error/empty response skipped - Agent TTS tool dedup UDP keepalive (2 tests): - Interval within bounds - Silence frame actually sent via send_packet