-
Notifications
You must be signed in to change notification settings - Fork 473
fix(mixed): raise CSRC_INACTIVE_MS 400 → 800 ms, measured on live Teams #1374
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -112,7 +112,7 @@ export interface CsrcPollOptions { | |
| receivers?: () => CsrcReceiverLike[]; | ||
| /** Poll cadence in ms. Default 100 — the granularity the transport itself updates at. */ | ||
| pollMs?: number; | ||
| /** How long a source stays active after its last observed contribution. Default 400 ms. */ | ||
| /** How long a source stays active after its last observed contribution. Default 800 ms. */ | ||
| inactiveMs?: number; | ||
| /** Epoch-ms clock (injectable for tests). */ | ||
| now?: () => number; | ||
|
|
@@ -133,8 +133,13 @@ export interface CsrcPoll { | |
|
|
||
| /** The transport updates roughly per packet; 100 ms is one packet-train, not an arbitrary tick. */ | ||
| export const CSRC_POLL_MS = 100; | ||
| /** Chosen to span a packet gap (jitter, DTX, a brief pause) without holding a finished turn open. */ | ||
| export const CSRC_INACTIVE_MS = 400; | ||
| /** Chosen to span a packet gap (jitter, DTX, a brief pause) without holding a finished turn open. | ||
| * Measured on a live Microsoft Teams meeting (2026-08-20): replaying this transition logic over a | ||
| * 599-sample tape of a 6 s speech / 7 s silence cycle yields 10 deactivations at 400 ms — | ||
| * fragmenting one speech phase into segments as short as 0.1 s — against 7 at 800 ms, where the | ||
| * reconstructed segments match the fixture's real structure. Teams' mixer pauses inside a turn | ||
| * for longer than one packet-train, so 400 ms closes turns that are still open. */ | ||
| export const CSRC_INACTIVE_MS = 800; | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Keep the combined delay unchanged for the non-Teams consumers of this shared default. AGENTS.md reference: AGENTS.md:L156-L161 Useful? React with 👍 / 👎. |
||
| /** Beyond this, a timestamp is not the clock we think it is. Mirrors the bridge's hint guard. */ | ||
| const MAX_CLOCK_SKEW_MS = 10 * 60 * 1000; | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The date, sample count, 400→800 comparison, and “real structure” assertion are a capture's historical evidence rather than the enduring contract for this exported constant. Leaving them here will make the source stale and unverifiable on the next tuning change; record/replay evidence belongs in an evaluation fixture or delivery artifact, and this comment should retain only the present behavioral rationale.
AGENTS.md reference: AGENTS.md:L165-L166
Useful? React with 👍 / 👎.