fix(calls): "Channel Full" counts people, not devices (#342) #351

Merged
jared merged 1 commits from fix/voice-full-distinct-users into lotus 2026-10-11 22:57:38 -04:00
Owner

Fixes #342.

useVoiceChannelFull compared MatrixRTC memberships (one per device) with io.lotus.voice_limit. One person on two devices, or a crashed tab whose membership hadn't expired, therefore filled two slots and showed "Channel Full" to everyone else, while the server-side guard (which counts distinct users) would have let them in.

The new utils/voiceChannelFull.ts (4 unit tests) counts distinct senders. Someone already in the call can still add a device, and the header and sidebar counters now show people.

Verified on the local stack: limit 2, @aud_main in the call on two devices. @aud_bob's prescreen now shows 1/2 with Join enabled (it was "Channel Full (2/2)"), matching the guard's HTTP 200.

tsc clean · new tests pass · ESLint/Prettier clean.

🤖 Generated with Claude Code

https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5

Fixes #342. `useVoiceChannelFull` compared MatrixRTC memberships (one per device) with `io.lotus.voice_limit`. One person on two devices, or a crashed tab whose membership hadn't expired, therefore filled two slots and showed "Channel Full" to everyone else, while the server-side guard (which counts distinct users) would have let them in. The new `utils/voiceChannelFull.ts` (4 unit tests) counts distinct senders. Someone already in the call can still add a device, and the header and sidebar counters now show people. **Verified** on the local stack: limit 2, `@aud_main` in the call on two devices. `@aud_bob`'s prescreen now shows **1/2** with Join enabled (it was "Channel Full (2/2)"), matching the guard's HTTP 200. `tsc` clean · new tests pass · ESLint/Prettier clean. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
jared added 1 commit 2026-10-11 22:07:36 -04:00
fix(calls): "Channel Full" counts people, not devices (#342)
CI / Build & Quality Checks (pull_request) Successful in 3m9s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Secret scan (gitleaks) (pull_request) Successful in 8s
CI / Playwright smoke (e2e) (pull_request) Successful in 11m44s
861293243c
useVoiceChannelFull compared the number of MatrixRTC memberships (one per
device) with io.lotus.voice_limit, so one person on desktop + phone, or a
crashed tab whose membership hadn't expired, filled two slots and locked
others out, while the server-side guard (which counts distinct users)
would have admitted them. utils/voiceChannelFull.ts (unit-tested) counts
distinct senders; the header/sidebar counter shows people too.

Verified on the local stack: limit 2, @aud_main in the call on two
devices; @aud_bob's prescreen now shows 1/2 with Join enabled (was
"Channel Full (2/2)"), matching the guard's 200.

Fixes #342

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
jared merged commit 06294f5269 into lotus 2026-10-11 22:57:38 -04:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#351