#10922·zeroclaw

[Bug]: WhatsApp Web ignores suppress_voice when queueing automatic TTS

Author: Audacity88Created Sep 17, 2026Updated Sep 17, 2026
Labelsbugchannelchannel:whatsapppriority:p2follow-uprisk:medium

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.