Repository navigation
Conversation
Quest-Claim: e7d40cab5bebcd6c
…rgest group Each trace carries the publisher's largest group as the subscription began (version 4), and the replay answers it from the subscriber's largest() as a wire subscriber does, so the consumer reports the join's skipped backlog. relay-mic-rtt40's target p95 falls from 320 to 120 ms and its row is re-budgeted. The recorder and the capture observer record the field; the checked-in traces derive it. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
kixelated
marked this pull request as ready for review
November 15, 2026 14:42
Contributor
|
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 20 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. |
Contributor
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
I reviewed the full diff: the replay's tune-in largest, the trace schema bump, the recorder and capture plumbing, the re-derived traces and the re-budgeted relay-mic-rtt40 row.
answeringproxy (js/watch/src/audio/replay.ts) — The firstlargest()call returns the trace's value. Later calls return only groups newer than it. Everything else passes through to the local subscriber, with methods bound to the target so private fields still resolve. This matches howjs/hang'sContainer.Consumerreadslargest(): once, afterinfo()or the first group andstart().joined()(capture.ts) — Mirrors the consumer's join read and is shared byrecorder.ts(written into the trace, andrecord.tsrefuses a trace without it) and the--captureobserver (Capture.largest()→environment.largest).- Trace schema v4 — Adds a required
largest, andreplay.tsnow accepts only version 4. I re-ran the stated derivation on every checked-in trace: the newest group whose earliest frame timestamp plus the trace's minimumat - timestamplands at or before the first arrival. It reproduces each value:bursty-aac37665,local-aac42,relay-bbb10065,relay-mic-rtt408994,relay-micandrelay-mic-stall32142. - Budgets — Only
relay-mic-rtt40moves, and the note records the before and after values. Replay rows are graded exactly, so CI's replay lane checks these numbers.
claude-opus-5-5 | 𝕏
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Finishes quest/m2/audio-playout/replay-largest.md (file deleted here).
Summary
The audio-quality replay now measures a join's backlog the way a live player does. Since moq-dev/moq#8761 both consumers report a group they skip unread as join backlog when it is at or below the publisher's largest group at subscribe time, but the replay's local track only learned its largest from the first group to land (
relay-mic-rtt40's stale tune-in frame, 7499), so nothing was reported.Tracegains a requiredlargestand goes to version 4. Every checked-in trace carries one, derived: the newest group whose first frame's media timestamp plus the trace's lowest lag falls at or before the first arrival (relay-mic-rtt40: 8994;bursty-aac37665,local-aac42,relay-bbb10065,relay-micandrelay-mic-stall32142). Eachsourcenames the derivation; no arrival row changed.capture.tsjoined()reads the subscription'slargest()the wayjs/hang's consumer does (after the info or first group shows it established andstart()resolved).recorder.tsandrecord.tswrite it into the trace; the--captureobserver exposes it asCapture.largest()and the probe reports it asenvironment.largest, so the diagnosing-live-rows recipe has it.js/watch/src/audio/replay.ts:Options.largestwraps the local subscriber solargest()answers the trace's value first, then each newer group as it lands, and delegates everything else.test/audio-quality/clients/js/replay.tspasses the trace's.budgets.json: onlyrelay-mic-rtt40moved, and is re-budgeted; the note drops the sentence about the stale tune-in frame.test/audio-quality/README.mddocuments the field, the capture and the derivation.relay-mic-rtt40The other five replay rows are unchanged to the digit.
Public API
No public API or wire change.
@moq/netand the container consumer are untouched. Internal test support only:Options.largestandansweringinjs/watch/src/audio/replay.ts(@internal), the trace schema, and the harness's recorder.Decisions
Choices a review can undo, taken on the maintainer's behalf (AFK):
replay()'sOptions.largestis optional (omitted keeps the track's own largest), whileTrace.largestis required. Synthetic unit-test traces have no tune-in to model; the checked-in traces always pass it. Alternative: require it inOptionstoo and give every synthetic test a value.answeringis exported and unit-tested directly rather than through an end-to-end join scenario: the join's effect needs the cursor to skip ahead of late backlog (the shape ofrelay-mic-rtt40's first seconds), and the harness row already grades that and fails on a regression.Proxywraps the local subscriber (aSubscriberhas private fields, so prototype delegation breaks); methods are bound to the target.Environment.largestthroughprobe.ts, so a--capturerow carries the join for the conversion recipe;Capturekeeps the first subscription's value across a rerun.record.tsthrows if the subscription never reports a largest, rather than writing a trace without one;replay.tsaccepts only version 4.relay-mic-rtt40row (target p95 120).Validation
just test audio-quality --replays --enforce: within budget; the six rows' table matches the quest's local measurement.bun test js/watch/src/audio/replay.test.ts(newansweringtest) andtest/audio-quality/clients/js/src/capture.test.ts(new join test: a later live group does not moveCapture.largest());just checkandjust fixpass.relay-mic-rtt40withlargest9047 instead of 8994 replays to the same 120 ms target.just test audio-quality-record(needs the public relay and a person at the microphone), sorecorder.ts'sjoined()is covered by the capture test only.Follow-ups
None.
Models
Size: S
Implementer: Claude Code, claude-sonnet-5-5, unknown effort (arm B)
🤖 Generated with Claude Code
Review
Rewritten by
quest reviewafter each round.Head: fd9641d
Base: origin/main at ca88fc1
Risk: medium,
the base has no RISK.md to name what is always high or customer-facing, so every change is mediumClassified: medium by default
Reviewer: Codex, gpt-6.1-sol, medium effort
Session:
01a1dfa8-52ed-7973-a26e-5d856c4df8d1, round 1Score: 9/10,
No actionable defects were found in the replay and recording changes, but validation was source-only with no builds or tests run.Rounds: 1; first round 0; findings 0: fixed 0, refuted 0, open 0
Findings: none