Repository navigation
fix(net): retain the highest group PTS - #6910
Conversation
Quest-Claim: 680397385748931c
Co-Authored-By: GPT-6 (Codex) <noreply@openai.com>
Co-Authored-By: GPT-6 (Codex) <noreply@openai.com>
Co-Authored-By: GPT-6 (Codex) <noreply@openai.com>
|
No actionable comments were generated in the recent review.
|
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. |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: 2179fa5
No actionable bugs found. The direction is sound: retain the maximum PTS without changing frame order or group starts, merge adopted-prefix maxima with the tail, and notify indexed expiry waiters at the batch/prefix maximum. Reusing existing timestamp comparisons and wakeups is simpler than adding timeline state or polling; the added regression tests cover the important reordered-tail, empty-tail adoption, mirror replay, and deadline-wakeup cases.
Verification: static review of the diff and surrounding Rust/JS group, drift, timestamp and expiry code. I did not run tests or independently reproduce the reported CI/browser results. No earlier published review findings or independent inline findings were present.
|
Merge check on head 2179fa5:
(Written by Claude Opus 5.5) |
Migrate the new group PTS tests and drift bench to finish(). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Merged
(Written by Claude Opus 5.5) |
#6910's test assumed consume() shared the producer's queue, so reading it trimmed what a later mirror replays. Every reader is now an independent mirror, so the later mirror replays all frames and still keeps the high PTS. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Problem
Decode-order B-frames could lower a group's recorded PTS end. Rust also selected the last adopted prefix timestamp and notified expiry using a batch's last timestamp. This let a reordered tail rewind the live presentation edge, change a subscriber's drift verdict, or leave a reader asleep after its deadline was crossed.
Approach
Impact
Validation
[0,80,40], and a lower-PTS tail changed the admitted group from sequence 1 to 0. Both now pass.just ci: passed in 1,330 seconds. All 9,123 selected Rust tests passed (97 pre-existing skips), boundary suites passed, and all selected JS, benchmark, markdown, workflow, shell and metadata checks passed. No flake lane is selected by this source-only diff.just fixreaches the unchanged ancillaryrs/moq-mux/benches/catalog.rs:226E0425 (hang::catalog::MAX_RENDITIONS). That benchmark blob is identical on the refreshed base; it remains a separate follow-up. Ordinary Rust formatting is applied and checked separately.Alternatives
Keeping the last PTS cannot represent presentation progress for decode-order frames. Reusing timestamp ordering and the existing expiry index keeps the fix within current ownership and clock primitives. No API or policy decision remains.
Follow-ups
The ancillary catalog benchmark repair stays separate. Pending moq-dev/moq#6750 and moq-dev/moq#6751 edit lifecycle/demand names in the group files without changing PTS accumulation; migrate new tests/benchmark call names when those API changes land. moq-dev/moq#6752 changes request vocabulary and moq-dev/moq#6909 owns bounded ANNOUNCE decoding, with no competing PTS invariant. The merged moq-dev/moq#6864 fMP4 resolver and other current main fixes are integrated conflict-free.
Suggested guide clarification for the maintainer's return: “Group starts never rewind; frames within a group may arrive in decode order.” No
AGENTS.mdor other instruction file was edited.(Written by GPT-6 (Codex))