EC fork Phase 2 (P6-2): after publishing 0.20.1-lotus.2, bump the pin and delete the CallControl.ts .muted DOM fallback #209

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

Migrated from LOTUS_TODO.md on 2026-09-17 (the file is now reference-only).

[~] P6-2 · Element Call fork — retire remaining DOM hacks (Phase 2 needs publish)

Phase 1 shipped: io.lotus.set_deafen (LiveKit-source deafen/screenshare-audio-mute) replaces the brittle <audio>.muted iframe hack; cinny sends it join-gated alongside the transitional DOM fallback. Phase 2 (blocked on user npm publish): publish fork 0.20.1-lotus.2 → bump cinny pin lotus.1lotus.2 → delete the CallControl.ts .muted fallback + the EC1–EC6 fixes ship. Deferred pieces (P6-2b): the useCallSpeakers DOM-scrape is a dormant fallback behind io.lotus.call_state; .click()-by-data-testid UI toggles are low-value fork surface. Divergence to confirm: deafen doesn't silence soundboard/Unknown-source audio (setVolume type limit).

_Migrated from `LOTUS_TODO.md` on 2026-09-17 (the file is now reference-only)._ ### [~] P6-2 · Element Call fork — retire remaining DOM hacks (Phase 2 needs publish) Phase 1 shipped: `io.lotus.set_deafen` (LiveKit-source deafen/screenshare-audio-mute) replaces the brittle `<audio>.muted` iframe hack; cinny sends it join-gated alongside the transitional DOM fallback. **Phase 2 (blocked on user npm publish):** publish fork `0.20.1-lotus.2` → bump cinny pin `lotus.1`→`lotus.2` → delete the `CallControl.ts` `.muted` fallback + the EC1–EC6 fixes ship. **Deferred pieces (P6-2b):** the `useCallSpeakers` DOM-scrape is a dormant fallback behind `io.lotus.call_state`; `.click()`-by-`data-testid` UI toggles are low-value fork surface. Divergence to confirm: deafen doesn't silence soundboard/`Unknown`-source audio (setVolume type limit).
jared added this to the Features 2026-Q4 milestone 2026-09-17 23:25:33 -04:00
jared added the priority: mediumtech-debtarea: calls labels 2026-09-17 23:25:33 -04:00
Author
Owner

Done in bbcbdad5 (pin is now 0.25.0-lotus.4, which is well past the lotus.2 gate):

  • CallControl.setSound() / applyScreenshareAudioMuted() no longer touch <audio>.muted inside the EC frame — they only send io.lotus.set_deafen.
  • useCallMemberSoundSync (the per-membership re-apply that existed to catch new audio elements) is deleted; late joiners are the fork's job.

Verified headless on the fork's RemoteTrackPublication state:

  • deafen set before a second participant joins → their mic track arrives enabled=false; undeafen → true
  • screenshare-audio mute survives deafen + undeafen
  • divergence confirmed closed: deafen now also silences soundboard (Track.Source.Unknown) audio — unknown: enabled=false while deafened, back to true on undeafen (the fork's deafen rides muteAllAudio$, not setVolume, since lotus.2).

Deferred P6-2b pieces stay as they are: the useCallSpeakers DOM scrape is a dormant fallback behind io.lotus.call_state, and the .click()-by-data-testid toggles (screenshare / spotlight / reactions / settings) all still work against EC 0.25 (#173) — not worth fork surface today. Closing.

Done in `bbcbdad5` (pin is now `0.25.0-lotus.4`, which is well past the `lotus.2` gate): - `CallControl.setSound()` / `applyScreenshareAudioMuted()` no longer touch `<audio>.muted` inside the EC frame — they only send `io.lotus.set_deafen`. - `useCallMemberSoundSync` (the per-membership re-apply that existed to catch new audio elements) is deleted; late joiners are the fork's job. Verified headless on the fork's `RemoteTrackPublication` state: - deafen set *before* a second participant joins → their mic track arrives `enabled=false`; undeafen → `true` - screenshare-audio mute survives deafen + undeafen - **divergence confirmed closed:** deafen now also silences soundboard (`Track.Source.Unknown`) audio — `unknown: enabled=false` while deafened, back to `true` on undeafen (the fork's deafen rides `muteAllAudio$`, not `setVolume`, since `lotus.2`). Deferred P6-2b pieces stay as they are: the `useCallSpeakers` DOM scrape is a dormant fallback behind `io.lotus.call_state`, and the `.click()`-by-`data-testid` toggles (screenshare / spotlight / reactions / settings) all still work against EC 0.25 (#173) — not worth fork surface today. Closing.
jared closed this issue 2026-09-19 00:55:15 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#209