chore(upstream): report to commetchat/commet — encrypted-call io.element.call.encryption_keys omits member.id (and other interop notes vs matrix-js-sdk) #136
Labels
No labels
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
nether/nether-voicebridge#136
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Tracking issue for reporting a Commet interop gap upstream to commetchat/commet. Same convention as #128: the operator files this by hand — agent PRs/issues to upstream are out.
Context: #135 (our side is fixed by tolerating the missing field; this is about Commet matching the de-facto wire format so other strict consumers don't hit the same silent drop).
What to report
Title suggestion: MatrixRTC encrypted calls:
io.element.call.encryption_keysto-device content omitsmember.id(present in matrix-js-sdk'sEncryptionKeysToDeviceEventContent)Where (as of
1111f25, 2026-09-24):commet/lib/client/matrix/components/voip_room/matrix_livekit_encryption_key_provider.dart,sendKeyToParticipants:Reference shape — matrix-js-sdk
src/matrixrtc/types.ts:member.idis the sender's call-membership id (js-sdk uses its membership UUID; the_m.callstate-key form"{device_id}_m.call"is what we send). Suggest Commet include it — e.g. the same value it already puts in its ownorg.matrix.msc3401.call.memberstate key after the_{userId}_prefix.Impact observed: a consumer that models the content strictly (our Rust bridge did) rejects Commet's key and the Commet caller is heard by nobody on that consumer, with no visible error on either side. Element Call is lenient, so Commet↔EC works and the gap goes unnoticed.
Other notes worth mentioning in the same report (from reading the file; not blocking us):
sendKeyToParticipantsonly targets devices already present inroom.client.userDeviceKeys— a member whose device keys haven't been fetched yet gets no key until the next membership-triggeredrotateKeys().onSyncrotates on every membership change 16 ms later, andcreateNewKey(waitBeforeUsingKey: true)starts encrypting with the new index after a fixed 5 s regardless of delivery.senderId:claimed_device_idwithout checkingroom_id/session— fine for us, but worth knowing when comparing behaviours.Done when
member.id— our log should then showmember_id=<value>instead ofmember_id=-.io.element.call.encryption_keyslacksmember.id, the typed to-device handler drops it without a log #135