Call failures in plain words: map every EC / voice-guard failure code to one sentence #160

Closed
opened 2026-09-17 23:06:34 -04:00 by jared · 1 comment
Owner

Users have seen raw MISSING_MATRIX_RTC_TRANSPORT. Inventory every failure surface: EC widget error codes (transport missing, MatrixRTC join failure, LiveKit connect/token errors), the voice-guard refusals (room full — already "Channel Full (N/N)", audio-only policy, screenshare disallowed), clock skew (#158), permission denied (mic/camera), and the "call not supported" path. One sentence each, with the fix when there is one ("Allow microphone access in your browser's site settings"), in the existing call-status area / join button state. Raw codes stay in a tooltip and Crypto Diagnostics. Unit-test the mapping.

Users have seen raw `MISSING_MATRIX_RTC_TRANSPORT`. Inventory every failure surface: EC widget error codes (transport missing, MatrixRTC join failure, LiveKit connect/token errors), the voice-guard refusals (room full — already "Channel Full (N/N)", audio-only policy, screenshare disallowed), clock skew (#158), permission denied (mic/camera), and the "call not supported" path. One sentence each, with the fix when there is one ("Allow microphone access in your browser's site settings"), in the existing call-status area / join button state. Raw codes stay in a tooltip and Crypto Diagnostics. Unit-test the mapping.
jared added this to the Features 2026-Q4 milestone 2026-09-17 23:06:34 -04:00
jared added the enhancementpriority: mediumuxarea: calls labels 2026-09-17 23:06:34 -04:00
jared self-assigned this 2026-09-17 23:06:34 -04:00
Author
Owner

Inventory of every call-failure surface as of today (host = cinny, EC = the fork):

Surface What the user sees Raw code visible?
No LiveKit transport advertised (MISSING_MATRIX_RTC_TRANSPORT) host prescreen: "Your homeserver does not support calling." (livekitSupport check, before EC even loads) — so the raw code only ever reaches users of other clients; EC's own page for it says "Call is not supported / The server is not configured to work with Lotus Call. Please contact your server admin (Domain…, Error Code…)" code in parentheses (EC upstream style)
No WebRTC host: "WebRTC is not supported in this browser." no
Mic permission denied host prescreen: "Microphone access is blocked. Enable it in your browser settings to join." no
Voice channel full (host-side) host: "Channel full (N/N)" + Join hidden; sidebar second-click → toast no
No power to join host: NoPermissionMessage no
Already in another call host: "Already in another call — End the current call to join!" no
EC failed to load / timed out (25 s watchdog) host: "The call failed to load. Check your connection and try again." + Back no
Admin turned off screenshare/camera mid-call host toast (#223) no
Clock skew host banner + call bar line (#158) no
LiveKit connect failure / timeout / capacity (503) / room creation restricted / connection lost / E2EE unsupported / membership manager EC's own error page — every one already has a plain title + sentence (error.* in the fork's locale), with the code in small print code in parentheses
Voice-limit guard refused the token (403 "This voice channel is full." / permission text) — the race where a second Lotus user joins as it fills, and every other client was EC's generic page "Something went wrong (OPEN_ID_ERROR)" — the guard's sentence was dropped fixed: fork 0.25.0-lotus.5 (d9ac9a0f) throws SFUTokenRefusedError → "Can't join this call" + the guard's sentence verbatim; unit-tested

So after lotus.5 there is no failure a user can hit that ends in a bare code; the codes that remain are the parenthesised support hints on EC's own pages, which is the existing upstream design (and where "Crypto Diagnostics" would otherwise have to be). Closing — reopen with a screenshot if anyone meets a raw code.

Inventory of every call-failure surface as of today (host = cinny, EC = the fork): | Surface | What the user sees | Raw code visible? | |---|---|---| | No LiveKit transport advertised (`MISSING_MATRIX_RTC_TRANSPORT`) | host prescreen: "Your homeserver does not support calling." (`livekitSupport` check, before EC even loads) — so the raw code only ever reaches users of *other* clients; EC's own page for it says "Call is not supported / The server is not configured to work with Lotus Call. Please contact your server admin (Domain…, Error Code…)" | code in parentheses (EC upstream style) | | No WebRTC | host: "WebRTC is not supported in this browser." | no | | Mic permission denied | host prescreen: "Microphone access is blocked. Enable it in your browser settings to join." | no | | Voice channel full (host-side) | host: "Channel full (N/N)" + Join hidden; sidebar second-click → toast | no | | No power to join | host: NoPermissionMessage | no | | Already in another call | host: "Already in another call — End the current call to join!" | no | | EC failed to load / timed out (25 s watchdog) | host: "The call failed to load. Check your connection and try again." + Back | no | | Admin turned off screenshare/camera mid-call | host toast (#223) | no | | Clock skew | host banner + call bar line (#158) | no | | LiveKit connect failure / timeout / capacity (503) / room creation restricted / connection lost / E2EE unsupported / membership manager | EC's own error page — every one already has a plain title + sentence (`error.*` in the fork's locale), with the code in small print | code in parentheses | | **Voice-limit guard refused the token (403 "This voice channel is full." / permission text)** — the race where a second Lotus user joins as it fills, and every other client | **was** EC's generic page "Something went wrong (OPEN_ID_ERROR)" — the guard's sentence was dropped | **fixed**: fork `0.25.0-lotus.5` (`d9ac9a0f`) throws `SFUTokenRefusedError` → "Can't join this call" + the guard's sentence verbatim; unit-tested | So after `lotus.5` there is no failure a user can hit that ends in a bare code; the codes that remain are the parenthesised support hints on EC's own pages, which is the existing upstream design (and where "Crypto Diagnostics" would otherwise have to be). Closing — reopen with a screenshot if anyone meets a raw code.
jared closed this issue 2026-09-19 13:43:04 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#160