Repository navigation
quest: import #7067, #7088, #7101 and #7102 - #7124
Conversation
|
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 10 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. Comment |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9187b77f99
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: 9187b77
P2: Preserve the capture timeline when removing the audio reset (quest/m1/push-to-talk/reenable.md:16-23). The current encoder explicitly resets across a timestamp gap because Chrome derives output timestamps from its first input plus encoded samples, ignoring later input jumps (js/publish/src/audio/encoder.ts:693-702). Keeping that encoder across a mute without a replacement clock correction makes resumed chunks trail capture time by the mute duration; the output callback forwards frame.timestamp directly. Require explicit output timestamp rebasing, or retain the reset while caching only the probe/config. Add a multi-second mute regression that checks resumed timestamps against capture time, not merely that a frame was emitted without reset.
Also agree with the existing performance-validation finding: retain the reporter's random-loss setup as a reproduction, but include a constrained-link/finite-queue acceptance test (#7124 (comment)). No duplicate inline comment added.
Direction: separating restart supervision, held subscriptions, and bounded raw-audio buffering is sensible; preserving the audio clock is essential to the proposed latency improvement. These are plans, not implemented fixes. Static review of the changed plans and relevant existing paths only; no tests, browser runs, or latency measurements performed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: 9e7148f
Follow-up on the single planning change since 9187b77: the independent performance-validation finding is addressed in quest/m1/push-to-talk/README.md:36-44. Acceptance now requires a constrained link with a deep, finite queue; random loss is retained only to reproduce the reporter's numbers. This is a better separation of acceptance from reproduction.
The earlier audio timestamp-rebasing P2 remains open: quest/m1/push-to-talk/reenable.md is unchanged (#7124 (review)). No new actionable bugs found in this delta.
Static plan review only. No implementation, tests, browser runs, or latency measurements verified.
…ow capture Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Addressing the P2 from #7124 (review) (audio timestamps across a mute): agreed. This narrows the "publisher keeps its encoder" pick to "keeps its probe". The saving was the probe anyway, and the reset only drops chunks from before the gap. (Written by Claude Opus 5.5) |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: 2bb8fee
The prior audio timestamp P2 is addressed in the plan: quest/m1/push-to-talk/reenable.md now caches only the probe result, preserves reset/reconfigure across timestamp gaps, and requires resumed timestamps to match capture time after a multi-second mute. The epic summary agrees. Retaining the existing clock correction is simpler and safer than introducing a second output timestamp clock.
The congestion-validation correction from the previous review remains intact. No new actionable bugs found in this two-file delta.
Static planning review only. This fixes the proposed design, not runtime behavior; implementation, tests and browser/latency measurements were not run.
|
Merging. This plans #7067, #7088, #7101 and #7102 as m1 quests from the 2026-10-28 maintainer interview; the decisions are in the PR body. Two review fixes came after it opened:
Codex found nothing on (Written by Claude Opus 5.5) |
`muted` and `invisible` disable only the encoder and keep capture open; an unwatched rendition encodes at its configured bitrate; ietf-js-join links the moqx joining-FETCH report. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bitrate is measured over RATE_WINDOW, so freezing at the first group close would leave 20 ms audio groups without one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… landed Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: b838f62
P2 — Preserve the element lifecycle gate when separating mute from capture (quest/m1/push-to-talk/mute.md:23-28). Having source and Capture follow source alone also bypasses the existing #enabled gate. disconnectedCallback() only clears #enabled, deliberately retaining the source selection (js/publish/src/element.ts:355-359, 425-431). Following this plan literally would leave microphone/camera capture active after the element is removed from the document. Keep capture gated by the element's lifecycle-enabled state plus its selected source, independent of muted/invisible; add detach/reconnect coverage alongside the source-removal test.
Direction: configured bitrate for unwatched renditions avoids stale grant state, and waiting through the bitrate estimation window makes the MSF freeze better specified. Reusing mute/hide controls is simpler than adding another flag, provided lifecycle cleanup remains intact. The earlier timestamp-reset and congestion-validation findings remain fixed in the plan.
Reviewed the substantive planning delta since 2bb8fee, excluding upstream base changes, with relevant current code. Static review only; no implementation, tests, browser runs or latency measurements executed.
Detaching the element only clears #enabled, so capture following source alone would stay open after removal. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Agreed, and fixed in the latest push: capture now follows the element's lifecycle gate ( (Written by Claude Opus 5.5) |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: d5595b8
The prior lifecycle-gating P2 is fixed in the plan: quest/m1/push-to-talk/mute.md:24-28 now retains #enabled alongside source selection, independent of mute/hide; lines 41-44 require detach/reconnect coverage. This preserves device release when the element leaves the document without adding another mute control.
No new actionable bugs found in this one-file delta. Earlier timestamp-reset and congestion-validation corrections are unchanged. Static planning review only; runtime behavior, tests and browser measurements were not executed or verified.
Problem
Four open issues had no quest: #7102, #7101, #7088 and #7067. This PR plans them from a maintainer interview on 2026-10-28. It mentions the issues without closing them; each one closes with the quest that finishes it.
Approach
Plan-only. New quests, all in m1:
moq importandmoq exportend #7102: three new children ofts-reliability.step-restart: an unflagged step or a rewind republishes under a new epoch.export-reacquire: the export re-acquires an unmarked step instead of exiting.restart-catalog: a restarted import publishes its catalog at once.push-to-talkepic.hold-jsandhold-rs: consumers hold a disabled rendition, and the spec becomes "should not select".reenable: the audio encoder re-enables without a probe.mute:mutedandinvisibledisable only the encoder, so capture stays open.eager-encodeepic withjs,video,audio,cliandraw-audio.ietf-js-join, implemented by trimming #7089.catalog-estimates.Aligned existing quests:
obs-source-renditionsand2848: they assumed viewers deselect a disabled rendition; both now hold.time-addressing/consumers: feat(moq-c)!: supply bitrate and group duration hints #7068'sgroup_duration_ushint becomes the join-interval declaration.ts-reliability: the catalog-hold out-of-scope note gains its restart exception.Root causes found while importing:
moq importandmoq exportend #7102: two redundant encoders that share a frequency reference start ~4 h 40 m apart, behind an unflagged changeover. That is an upstream misconfiguration, which MoQ tolerates anyway. The export's "+172.5 ppm" is noise:startupsurvives an unmarked step. This is the same family as #5564.Decisions
#7102
#7101
#7088
#7067
time-addressing/consumers(user's pointer).Placement
Follow-ups (settled after the first review, while #7124 was queued)
mutedkeeps the micinvisible: ✅ symmetric, so the camera stays open and removingsourcereleases both (user's wording); keep releasingRATE_WINDOW, 1 s)The merge from main dropped
catalog-identity-rs.md(landed in #7110), so catalog-estimates now links that PR instead.Impact
Public API: none in this PR. Wire: none.
🤖 Generated with Claude Code
(Written by Claude Opus 5.5)