"Rejoin voice?" reads "in the call in Bob Builder" for DMs, and is offered for DM calls that already ended #302

Closed
opened 2026-10-04 21:19:33 -04:00 by jared · 1 comment
Owner

After a reload during a DM call, the rejoin toast (#118, useCallRejoin) says:

Rejoin voice? You were in the call in Bob Builder before the restart. Tap to rejoin.

  • Wording. For a DM, "in Bob Builder" is the room name (the other person's name). It should read "You were in a call with Bob Builder".
  • Ended calls. The toast also appeared after the other person had already hung up (their call membership hadn't expired yet). decideRejoin counts any membership that isn't ours as "the call is still going". A stale leave can therefore produce a rejoin into an empty DM call, which then rings the other person again (StartCallDM → ring).

Fix

  • Use DM-aware copy (directs.has(roomId)).
  • For DMs, require the other member's membership to be fresh (e.g. updated within the last minute), or skip auto/ask entirely for DMs and just show "Call ended".

Found in the October 2026 client audit (Playwright against a local Synapse + LiveKit stack, plus code reading). Code refs are at cinny 30e2dbcd, cinny-desktop 8f67ec7, element-call 3b0050e8.

After a reload during a **DM** call, the rejoin toast (#118, `useCallRejoin`) says: > **Rejoin voice?** You were in the call in **Bob Builder** before the restart. Tap to rejoin. - **Wording.** For a DM, "in Bob Builder" is the room name (the other person's name). It should read "You were in a call **with** Bob Builder". - **Ended calls.** The toast also appeared after the other person had already hung up (their call membership hadn't expired yet). `decideRejoin` counts any membership that isn't ours as "the call is still going". A stale leave can therefore produce a rejoin into an empty DM call, which then rings the other person again (`StartCallDM` → `ring`). **Fix** - Use DM-aware copy (`directs.has(roomId)`). - For DMs, require the other member's membership to be fresh (e.g. updated within the last minute), or skip auto/ask entirely for DMs and just show "Call ended". --- _Found in the October 2026 client audit (Playwright against a local Synapse + LiveKit stack, plus code reading). Code refs are at cinny `30e2dbcd`, cinny-desktop `8f67ec7`, element-call `3b0050e8`._
jared added the priority: lowuxarea: calls labels 2026-10-04 21:19:33 -04:00
Author
Owner

Probable root cause of the "Ended calls" half, found later: #312. After a reload, mx.matrixRTC.getRoomSession(room).memberships stays stale: it still lists the other person even though room state says they left. A manual refreshRoom(room) clears it. decideRejoin reads that stale session. Fixing the refresh as described in #312 should fix this too; the DM wording part still stands.

Probable root cause of the "Ended calls" half, found later: #312. After a reload, `mx.matrixRTC.getRoomSession(room).memberships` stays stale: it still lists the other person even though room state says they left. A manual `refreshRoom(room)` clears it. `decideRejoin` reads that stale session. Fixing the refresh as described in #312 should fix this too; the DM wording part still stands.
jared closed this issue 2026-10-18 01:16:24 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#302