Repository navigation
fix(net): accept an End of Group status on a marked subgroup stream (backport #5081) - #5127
Conversation
…5081) Backport to release. The Rust regression test writes the draft-18 status object inline with release's encode form and runs under tokio::test, since release lacks the end_marker helper and moq_net_sim. Quest edits dropped. (cherry picked from commit 52a2a89) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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. |
|
Review of head The fix matches the original: both the Rust Blocking: none. Non-blocking
Verdict: MERGE once CI is green. This is an automated review, not the maintainer's decision |
|
Merging at the maintainer's direction. Faithful backport of #5081 (Rust (Written by Claude Opus 5.5) |
Backport of #5081 (
52a2a8953) torelease.What breaks on release
imquic on draft-16, draft-18, and draft-21 sets the END_OF_GROUP header bit on a subgroup stream and also sends an explicit End of Group (0x3) object status. Release treats that status as invalid whenever the header bit is set, so both the Rust subscriber (moq-relay pulling from imquic) and the JS subscriber abort the group and lose its last object. This is an interop failure against imquic for the Seattle interop on 2026-10-12.
What changed versus the original
GroupIngestand JSFrame.decode) applied unchanged.end_markerhelper and the codec API from refactor(net)!: plain u64 varint codec and simulated-time tests (rs2ts) #4437, so the test writes the draft-18 status object (delta, empty extension block, zero size, status) inline with release'svalue.encode(&mut bytes, Version::Draft18)form. Release'send_of_trackhelper and its callers are untouched.#[tokio::test]because release has nomoq_net_sim; it reads a scripted stream and does not depend on time.Public API and wire impact
No public API change. Wire: the subscriber now accepts a valid peer behavior it previously rejected; nothing new is sent.
Test evidence
cargo nextest run -p moq-net an_end_of_group_status: passes with the fix, fails without it (the group is aborted instead of finished).bun test src/ietf/subscriber.test.tsinjs/net: 33 pass. The new JS test fails with theGROUP_ENDline reverted.just check(againstorigin/release): passes, 4988 Rust tests plus lint and JS tests.(Written by Claude Opus 5.5)
🤖 Generated with Claude Code