feat(rtc): log LiveKit ConnectionQuality per participant (#116) #122

Merged
robocub merged 1 commit from feat/116-connection-quality into master 2026-07-14 20:49:40 +00:00
Collaborator

Adds per-participant LiveKit ConnectionQualityChanged logging in the subscriber session + ghost event loops (WARN on Poor/Lost, INFO otherwise; change-driven so unthrottled). Closes the packet-loss blind spot that made the 2026-07-13 choppy-audio report triage-by-elimination. API validated against livekit 0.7.45. Additive logging only.

Verified: 124 unit tests + clippy -D warnings; live audio_d2m_unenc ×2 PASS on a clean-tree build of master+this (the B2 bisect binary — see the frankenbuild post-mortem issue); audio_m2d_unenc, fed pair, and real-timing pair green tonight on the same code.

Note: during verification this change was briefly suspected of a d2m silent-audio regression; a clean-tree bisect fully exonerated it — the failure was a stale-fingerprint build artifact in the staging tree, not code.

🤖 Generated with Claude Code

Adds per-participant LiveKit `ConnectionQualityChanged` logging in the subscriber session + ghost event loops (WARN on Poor/Lost, INFO otherwise; change-driven so unthrottled). Closes the packet-loss blind spot that made the 2026-07-13 choppy-audio report triage-by-elimination. API validated against livekit 0.7.45. Additive logging only. **Verified:** 124 unit tests + clippy `-D warnings`; live `audio_d2m_unenc` ×2 PASS on a clean-tree build of master+this (the B2 bisect binary — see the frankenbuild post-mortem issue); `audio_m2d_unenc`, fed pair, and real-timing pair green tonight on the same code. Note: during verification this change was briefly suspected of a d2m silent-audio regression; a clean-tree bisect fully exonerated it — the failure was a stale-fingerprint build artifact in the staging tree, not code. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(rtc): log LiveKit ConnectionQuality per participant (#116)
All checks were successful
CI / test (push) Successful in 9m34s
CI / test (pull_request) Successful in 10m36s
fb1e02f713
The bridge was blind to loss/jitter on the LiveKit leg: the Discord side has
PLC/jitter counters, but nothing observed the SFU's view of participant link
quality — so a choppy-audio report could only be triaged by elimination
(2026-07-13 beta case: bridge metrics clean, cause inferred as the user's
client↔SFU leg with no data to show for it).

Handle RoomEvent::ConnectionQualityChanged in the subscriber session and the
ghost event loops: WARN on Poor/Lost (the actionable packet-loss signal),
INFO otherwise. The SDK emits on CHANGES only, so logging is unthrottled by
design. API validated against livekit 0.7.45 (ConnectionQuality =
Excellent/Good/Poor/Lost).

Additive logging only — no behavioral change.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
robocub merged commit daadb96075 into master 2026-07-14 20:49:40 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
dark/nether-voicebridge!122
No description provided.