[Bug]: WhatsApp Web ignores suppress_voice when queueing automatic TTS
Affected component
channel
Severity
S2 - degraded behavior
Current behavior
WhatsApp Web's automatic voice-reply path in crates/zeroclaw-channels/src/whatsapp_web.rs checks whether the recipient is in voice_chats, whether TTS is configured, and whether the text passes voice_reply_skip_reason. It does not check SendMessage.suppress_voice before inserting the text into pending_voice and scheduling synthesis.
Consequently, an explicitly text-only message that passes the content heuristic can enter automatic TTS. This includes system notices whose producers set the suppression flag. This source-established finding was retained as a nonblocking follow-up from #10827. No live WhatsApp delivery or TTS call was performed for this report.
Expected behavior
Honor suppress_voice before queueing automatic TTS, while preserving ordinary text delivery. A suppressed notice should not replace or reschedule an already queued conversational voice reply. Unsuppressed conversational replies should keep their current behavior.
Steps to reproduce
Proposed controlled regression, not yet executed:
1. Configure a test WhatsApp Web sender with TTS available and a recipient in voice_chats.
2. Use natural-language content that passes voice_reply_skip_reason.
3. Send it with SendMessage.suppress_voice set to true.
4. Assert normal text delivery but no new pending_voice entry or synthesis task.
5. Repeat with an existing queued conversational reply and assert it is unchanged.
6. Use an unsuppressed message as the positive control for automatic voice queueing.Impact
Messages explicitly intended to remain text-only can be synthesized and delivered as voice notes. The effect depends on active voice-chat state, configured TTS, and the content heuristic. Live frequency has not been measured. This is separate from #10626's Markdown/emoji speech formatting issue.
Logs / stack traces
No response
ZeroClaw version
3df68fb2236c6f089c25005d0ebb780c9c7fd642
Rust version
Not measured; source-based report.
Operating system
Not platform-specific in the inspected code; no live platform reproduction performed.
Regression?
Unknown
Pre-flight checks
- I reproduced this on the latest master branch or latest release.
- I redacted secrets, tokens, and personal data from all submitted content.
Source: zeroclaw-labs/zeroclaw