Repository navigation
test(audio-quality): report push-to-talk latency on the browser defaults - #8364
Conversation
Quest-Claim: 6d36a39ba87e671f
Drop the fixed 300 ms delay and 60 ms / 128 kbit/s Opus from the page, so just test push-to-talk measures what a listener gets: 20 ms Opus and delay "auto". Report latency.onset, the press to the render onset, which the press-to-audible budget will gate once it is measured on kixtop. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Set from a kixtop run on the browser defaults (106 ms max x 1.25, rounded up), and move the analyzer's fixture to 20 ms Opus and a 60 ms delay. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…gating Per the 2026-11-09 maintainer decisions: drop the 140 ms onset budget and the browser and native underrun/stall failures; keep completeness checks. This finishes the push-to-talk latency quest. 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 3 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: 5fec26f
Base: d9800c1
No actionable findings. Removing the overrides selects the actual 20 ms Opus and "auto" browser defaults. The new onset metric excludes projected device output and leaves ambiguous zero-gap presses out of its summary. The report-only latency/underrun/stall behavior matches the recorded direction, while the existing head, delivery, capture/subscription lifecycle, native resume, and comfort-noise completeness checks remain failures.
Verification: GitHub-only static review of the patch, analyzer and fixtures, measurement/driver paths, current defaults, and documentation. No builds, tests, browser/native playback, or hardware measurements executed. The fixtures exercise the changed report-only counters but do not directly assert the new onset summary. Check is still in progress.
There was a problem hiding this comment.
ℹ️ No blocking issues. One stale comment in the driver's setup, and the new
onsetfield is not asserted in the fixture test.
The default-settings change, the report-only onset/underrun/stall behavior, and the quest deletion all match the decisions recorded in the PR. bun test test/audio-quality/clients/js/ptt-analyze.test.ts passes 14/14 here, and the quest deletion leaves no dangling references.
The comment in test/audio-quality/clients/js/ptt.ts still describes the native listener as joining "at the same fixed delay" as the page's listener. The page's watch now uses delay: "auto", so the native listener is the only one with a fixed 300 ms delay. The comment is now wrong in the file this PR edits.
Separately, the new latency.onset and press.onset fields are never asserted in the fixture test. The "complete run" test checks latency.playout and press.path, but not the new onset, so the field's arithmetic could regress without a test failure. A one-line assertion on press.onset (and its latency.onset summary) would lock the new field.
Note: 2 inline comment(s) dropped because they did not anchor to lines inside the PR diff:
test/audio-quality/clients/js/ptt.ts:86(RIGHT) — file not in PR difftest/audio-quality/clients/js/ptt-analyze.test.ts:106(RIGHT) — line 106 (RIGHT) is not inside a diff hunk
deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏

Quest: quest/m1/push-to-talk-latency.md (this PR finishes and deletes it)
Summary
just test push-to-talknow runs the browser defaults: 20 ms Opus and<moq-watch>delay: "auto". The fixed 300 ms delay and 60 ms / 128 kbit/s Opus row is dropped, per the 2026-11-04 and 2026-11-06 decisions, now that Watch's stretch (moq-dev/moq#8058) has landed. The native listener is unchanged (--delay 300ms), since native playback is out of scope.summary.jsonand the printed report addlatency.onset: the press to the render onset, which is the press-to-audible latency excluding device output. Thepathbreakdown already splits it.ptt-analyze.tsreports onset, underruns, and stalls (browser and native) and no longer fails on any of them. It still fails on every completeness check: missing heads, unencoded, unsent, or unreceived audio, reopened capture or subscription, a new encoder, a dropped rendition, a native utterance not resuming on its head, a mute without comfort noise, and no native playback at all.quest/m1/README.md. grading now records that push-to-talk's underruns are reported and judged there.Measurement on
kixtop, 2026-11-09macOS 26 MacBook Air, headless Chromium 156, local relay. Only the browser half ran: the harness's native listener plays into a PulseAudio null sink (
test/lib/pulse.py), and macOS has no PulseAudio. Load average was 10 to 12 from other agents' builds. Every browser completeness check passed: all 44 heads arrived, with nothing unencoded, unsent, or unreceived."auto"target: 40 / 60 / 80 ms (min / median / max over the presses). Spread: 14 / 60 ms.kixtopbefore the stretch (2026-11-05) it was 10 / 9.devicewas Bluetooth headphones, kixtop's default output that day. On 2026-11-05 it was the built-in speakers at 54 ms.Local checks:
just checkpassed, andbun test ptt-analyze.test.tshad 14 pass.Public API and wire impact
None. These are test harness changes only.
Decisions
ptt-analyze.tsreports onset median and max and never fails on them.Models
Size: M
Implementer: Claude Code, claude-opus-5-5, medium effort (iterate, M)
Implementer: Claude Code, claude-opus-5-5, medium effort (iterate, M)
Suggested follow-up
kixtop's 17 against 10 before the stretch points to host load.(Written by Claude Opus 5.5 with medium effort)
Review
Rewritten by
quest reviewafter each round.01a1c343-7324-78a3-b34d-343970510f4c, round 1No actionable defects were found; the default-settings measurement and report-only latency, underrun, and stall behavior match the recorded decisions, though builds and tests were not run as instructed.