[planning] Expected-device check on call join: warn when your usual mic/headphones are missing #121

Open
opened 2026-09-17 15:43:34 -04:00 by jared · 0 comments
Owner

Jared: "I always join with a set mic or headphones and one of them is missing upon join — instead of changing devices automatically, notify that devices changed and ask if it is intentional."

Behaviour to design (needs a planning pass with Jared before building)

  • Remember the intended input and output devices (the ones the user picked, by deviceId + label — labels survive re-plugs better than ids on Windows).
  • On join (lobby or direct join): if the intended device is not in enumerateDevices(), do NOT silently fall back. Show a blocking-but-quick sheet: "Your usual headset Arctis 7 isn't connected. Join with Realtek Speakers / Laptop Mic instead, or cancel to plug it in?" with Join anyway / Cancel. Remember "join anyway" per device pair for the session only.
  • Mid-call unplug: toast "Headset disconnected — now using X" (no dialog mid-call).
  • Where the truth lives: the fork owns device selection (MediaDevices in EC); cinny owns the pre-join UI. Decide which side stores "intended" and how it is passed (URL param vs io.lotus.* action).
  • Questions for Jared: (1) block the join or just warn? (2) apply to output (headphones) as well as mic — yes per the quote; (3) is "intended" = last used, or explicitly pinned in Settings → Calls?
Jared: "I always join with a set mic or headphones and one of them is missing upon join — instead of changing devices automatically, notify that devices changed and ask if it is intentional." ### Behaviour to design (needs a planning pass with Jared before building) - Remember the *intended* input and output devices (the ones the user picked, by `deviceId` + label — labels survive re-plugs better than ids on Windows). - On join (lobby or direct join): if the intended device is not in `enumerateDevices()`, do NOT silently fall back. Show a blocking-but-quick sheet: "Your usual headset **Arctis 7** isn't connected. Join with **Realtek Speakers / Laptop Mic** instead, or cancel to plug it in?" with *Join anyway* / *Cancel*. Remember "join anyway" per device pair for the session only. - Mid-call unplug: toast "Headset disconnected — now using X" (no dialog mid-call). - Where the truth lives: the fork owns device selection (`MediaDevices` in EC); cinny owns the pre-join UI. Decide which side stores "intended" and how it is passed (URL param vs `io.lotus.*` action). - Questions for Jared: (1) block the join or just warn? (2) apply to output (headphones) as well as mic — yes per the quote; (3) is "intended" = last used, or explicitly pinned in Settings → Calls?
jared added this to the Features 2026-Q4 milestone 2026-09-17 15:43:34 -04:00
jared added the enhancementpriority: mediumarea: callsneeds-human-reviewplanning labels 2026-09-17 15:43:34 -04:00
jared self-assigned this 2026-09-17 15:43:34 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#121