Repository navigation
quest: plan push-to-talk DTX, capture smoothing, and the DTX route spike - #7816
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…timestamp bug Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ady capture Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 57 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed head 6b1df20. No actionable issue found in the push-to-talk plan. The route comparison precedes DTX implementation, and DTX plus capture smoothing precede the measured latency budget; the documented encoder and timing behavior matches the inspected source.
Verification: GitHub-only static inspection of the quests and relevant audio paths. I did not run browser repros, latency measurements or tests; the reported measurements remain author-provided.
(Written by review (OpenAI))
There was a problem hiding this comment.
ℹ️ No critical issues; minor suggestions inline.
Reviewed changes
Reviewed the full seven-file quest-only diff at 6b1df20; no code, wire, or API changes.
- Latency quest requalified -
quest/m1/push-to-talk-latency.mdis retitled[M]and now budgets press-to-audible on the browser defaults (delay: "auto", 20 ms Opus) from a kixtop measurement, dropping the fixed 300 ms / 60 ms row. - Epic decision reversed -
quest/m1/push-to-talk/README.mdrecords the 2026-11-04 reversal of "Hold, not DTX" because the catalog toggle costs a round trip, and adds the three child quests. - DTX route spike -
quest/m1/push-to-talk/dtx-route.mdplans a measured comparison of gate-before-encoder, WASM libopus, and native WebCodecs DTX across Chromium, Firefox, and Safari. - DTX implementation -
quest/m1/push-to-talk/dtx.mdreplaces hold with silence suppression, comfort noise across gaps, and retires hold when it lands. - Capture smoothing -
quest/m1/push-to-talk/capture-smoothing.mdtargets the 25-109 ms capture bursts that inflate"auto"jitter. - Chromium tracking -
quest/m2/chromium-opus-timestamps.mdand itsquest/m2/README.mdentry track the Chromium Opus timestamp bug that blocks nativeusedtx.
ℹ️ m1's index still lists the old latency quest
quest/m1/README.md:165 still carries the old title and the 469 ms / 300 ms rationale this PR retires, so the m1 index points at a goal that no longer exists. The quest file was retitled and retargeted here; the index needs the same line.
Technical details
# Stale m1 index entry
## Affected sites
- `quest/m1/README.md:165`: still lists "Push-to-talk's press-to-audible latency is chosen, not inherited" and "each part of an ideal-path press's 469 ms, chiefly the 300 ms delay and 115 ms device output, is reduced through its knob or kept with a reason".
## Required outcome
- The index entry matches the new `[M]` title and goal in `quest/m1/push-to-talk-latency.md`.
## Suggested approach
```markdown
- [Push-to-talk's press-to-audible latency fits a budget on the defaults](/quest/m1/push-to-talk-latency.md) - press to audible stays under a kixtop-measured budget on the browser defaults, enforced by `just test push-to-talk`
```deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏
Address review: dtx-route.md no longer marks the gate-and-restamp route with the pick's ✅, dates Safari's first measurement, and the m1 index describes the reworked push-to-talk epic and latency quest. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
Reviewed the delta since the prior pullfrog review at 6b1df20; quest-only, no code, wire, or API changes.
- m1 index refreshed —
quest/m1/README.mdnow carries the new DTX epic wording and the[M]latency-budget title/goal, so no stale 469 ms / 300 ms entry remains. - Route 1 un-picked —
dtx-route.mdno longer marks gate-before-encoder with✅; it reads as a confirmed workaround, measured like the others and not yet chosen. - Safari note dated —
dtx-route.mdnow says Safari wasn't measured until the 2026-11-04 repro, matching the result below it. - Chromium wait recorded —
chromium-opus-timestamps.mdgains a## Waitingsection naming chromium#581458361, the repro check, and how to advance it.
All three prior findings are addressed. sh/markdown.sh check passes and the new ## Waiting section matches the repo's existing convention.
deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed head: 8ba6a58
The follow-up addresses the earlier review notes: the m1 index reflects the new latency goal, Safari's earlier unmeasured status is dated, and route 1 is identified as a confirmed workaround rather than the chosen route. No additional actionable finding in this quest-only delta.
Verification: GitHub-only static inspection of the plans and discussion. I did not reproduce browser behavior or measurements, run tests, or run quest context.
(Written by review (OpenAI))

Problem
moq-dev/moq#7760 broke push-to-talk latency down on an ideal path (469 ms median press to audible, of which ~300 ms is the fixed playout delay the test pins and ~115 ms is headless Chromium's declared output latency). The maintainer asked how to improve it. Planning found the catalog toggle itself forces a round trip of jitter buffer, so the plan replaces push-to-talk's hold design with DTX.
Approach
Three new m1 quests under the Push-to-talk epic:
dtx-route.md- measure silence suppression routes (gate before the encoder; WASM libopus; native WebCodecs DTX where the timeline holds) on Chromium, Firefox and Safari, then pick one with the maintainer.dtx.md- push-to-talk mutes by suppressing silence instead of flippingenabledin the catalog; listeners play comfort noise across the gap (no underrun, ignored by the jitter estimator); hold retires in the same change. Requires the route spike.capture-smoothing.md- the capture graph delivers frames on a steady cadence (today 25-109 ms bursts, read by"auto"as ~46 ms of jitter).The epic README records the reversal of its 2026-10-28 "Hold, not DTX" decision and lists the children.
Decisions
Planned with the maintainer on 2026-11-04:
just test push-to-talkwith the breakdown. ✅ Budget the default path / Measure auto, no budget / Just lower the fixed delayusedtx). Workaround exists? ✅ yes: gate silence before the encoder and stamp chunks from our own inputs, now route 1 indtx-route.md.quest/m2/chromium-opus-timestamps.md) / m1 / noneLatency quest
quest/m1/push-to-talk-latency.md(from #7760, now on main) becomes [M]: on an ideal path with the browser defaults ("auto", 20 ms Opus), press-to-audible excluding device output stays under a budget set from a kixtop measurement, enforced byjust test push-to-talkwith the breakdown. The fixed 300 ms / 60 ms row is dropped. It Requiresdtx.mdandcapture-smoothing.md.Impact
Review
Codex (
quest review --base origin/main, gpt-6.1-sol, medium), session01a1a6e8after merging main:dc10c56226: one low finding, the m2 Chromium quest recorded its upstream wait only under Plan. Fixed: it now has a## Waitingitem naming Chromium, the check, and how to advance it.8ba6a58719: no findings.Earlier sessions (
01a1a4ff,01a1a565) ona33ec406bf,82da4b628eand6b1df2021a: no findings.Online reviews on
6b1df2021a, all fixed indc10c56226: pullfrog's route-1 ✅ (it marked the confirmed workaround, not the pick; reworded so only the measured pick will carry ✅), Safari's "wasn't measured" (dated), and the stale m1 index entries for the push-to-talk epic and latency quest.Checks
quest check --base origin/main: 617 documents oksh/markdown.sh check🤖 Generated with Claude Code