Part of #280 / breakdown of #637. The current remote-mute forces the target client to set MediaStreamTrack.enabled=false via isRemotelyMuted, with no documented 'unmute' payload and no distinction between admin-forced mute and a user's own self-mute.
Decide and specify:
- A distinct 'admin muted' state layered over (not overwriting) the user's own self-mute, so that admin-unmute does NOT force-unmute a participant who chose to mute themselves (broadcast privacy norm — RTS/Clear-Com behavior).
- The exact data-channel payload(s) for unmute (mirror of
muteParticipant: 'mute').
- The resulting effective-mute logic on the target client (muted if adminMuted OR selfMuted).
Acceptance:
- Documented state model + payload contract.
- Admin-unmute of a self-muted user leaves them muted; admin-unmute of an admin-only-muted user restores their prior self-mute state.
Broken down from #637 by daily-backlog-pr triage (intercom-expert verdict).
Part of #280 / breakdown of #637. The current remote-mute forces the target client to set
MediaStreamTrack.enabled=falseviaisRemotelyMuted, with no documented 'unmute' payload and no distinction between admin-forced mute and a user's own self-mute.Decide and specify:
muteParticipant: 'mute').Acceptance:
Broken down from #637 by daily-backlog-pr triage (intercom-expert verdict).