Repository navigation
Conversation
… idle The overlay stays mounted for the app's lifetime. Its one-second clock ran even with no call, and the device list was re-enumerated on every call store update because the store adapter rebuilds its object each time. Run the clock only while a direct call shows a duration, and enumerate devices only when the local stream appears or is replaced; the existing devicechange listener still covers hardware changes.
…k is down Each room peer link sends its own clone of the room's camera and microphone. Turning the camera off or switching microphone only reached peers in the active phase, and stopping the room's track does not stop its clones. A reconnecting peer kept a live camera clone (the camera light stayed on) and, once the link returned, resent it and announced the camera as on. A switched microphone left the reconnecting peer on the old input. A peer runtime now turns its camera off and switches microphone while its link is down, signalling only when the link is ready. The room drops the camera clone of any link that is down and reapplies its microphone and camera controls on every activation, not just the first, and after a video quality refresh that may have skipped a change. Microphone mute already reached every link; it is now covered by tests.
… old microphone A peer link skips media changes while it is busy, so turning the camera off while a reconnecting peer was still turning it on left that peer's camera clone recording. A microphone switch skipped the same way, or made before an outgoing peer confirmed the call, left that peer sending the old input. Room peer sync now re-checks after each awaited change and replaces clones of inputs the room no longer uses, and runs again after room camera and microphone changes. A microphone can be switched before the peer confirms.
Room video quality is now refreshed when screen sharing starts or stops and when the camera changes, and a refresh requested while a link is busy runs later from that link's own timer. A camera turned off while such a refresh restarted a link's camera was skipped, so that peer kept receiving the camera clone. Each peer link now reports a completed refresh and the room realigns that link's camera and microphone. A failed refresh still leaves its camera disabled.
Danidfra
force-pushed
the
feat/call-reliability
branch
from
October 23, 2026 13:17
ca3e839 to
7b70b4e
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Testing
Automated
main, and the new quality-refresh test fails without its fix.main(a4db9c6), keeping its room video-quality and camera-recovery changes.main.Manual (Chrome and Brave, separate accounts)
Known limitation
Video frames queued before camera-off may arrive late after a brief network interruption. No frames captured after camera-off are sent.