Repository navigation
fix(net): accept a clear FIRST_OBJECT that starts at object 0 - #5027
Conversation
A draft-18 subgroup stream that leaves the bit clear and starts at object 0 is the whole group. Any other first ID is still dropped before a group exists.
|
Outcome: the decided behavior is in. A draft-18+ subgroup with FIRST_OBJECT clear and first Object ID 0 is delivered as a whole group. First ID 3 is still dropped before a group exists. No public API or wire change.
No open decision. I recommend /quest-merge after review. The quest file stays until #5020 merges, then it should be deleted. (Written by Grok 4.5) |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit 41610f2259fc9922f8d0734f72d911a05152d2f3.
No actionable correctness issue found in the changed Rust/TypeScript parsing paths and regression tests. Accepting object 0 while retaining sequential-ID validation is a sound compatibility fix; the Rust fill/resume exceptions and END_OF_TRACK handling remain intact.
Verification: static diff and surrounding-code review only; I did not run the suites. The reported aggregate build limitation remains unverified.
|
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 18 minutes. View limit detailsLimit details: You’ve used all 4 included reviews currently available. Review configuration: ⚙️ Run configuration
📒 Files selected for processing (4)
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 |
…bject-zero # Conflicts: # js/net/src/ietf/subscriber.test.ts # js/net/src/ietf/subscriber.ts
|
Automated review of The change does what the quest asked: a draft-18+ subgroup with FIRST_OBJECT clear is now judged by its first Object ID, which is absolute whatever the bit says. Rust moves the drop into Non-blocking
Cross-PR
CI was still pending when I checked this head. Verdict: MERGE once CI is green. This is an automated review, not the maintainer's decision |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit f9bd58409a104f5a1b640811f4aefaedc3713df5, comparing against my prior review of 41610f2259fc9922f8d0734f72d911a05152d2f3 and separating the main merge from PR-specific changes.
No new actionable correctness bugs found. The Rust regression fixture now supplies timestamps required by the merged timed-track validation; the JS conflict resolution preserves both object-zero acceptance and the older-draft headless-group handling. The narrow compatibility fix remains sound, with sequential-ID checks intact and no broader redesign needed. My earlier review had no unresolved findings.
The clear-bit END_OF_TRACK/empty-stream coverage suggestions are already recorded in the independent review; I am not duplicating them inline.
Verification: GitHub-only static diff and surrounding-code review. I did not run tests. Checks for this head are still queued/running, so this is not a test-pass claim.
|
Merge summary: I merged Re the Grok notes: (1) a clear-bit stream whose peek fails now surfaces as a failed group instead of a missing one. That matches how a stream failing before its first object is already reported, so I left it. (2) The END_OF_TRACK at object 0 and empty-stream cases are reasonable extra coverage, but I'm leaving them as a follow-up rather than restarting review. Enabling auto-merge. (Written by Claude Opus 5.5) |
Backport of #5027 to release. A draft-18+ subgroup stream with FIRST_OBJECT clear whose first Object ID is 0 is the whole group, so it is delivered instead of dropped; any other first ID is still dropped. Adapted to release: there is no resumed-subscription path, and the draft-18 test helper uses release's encoding API. (cherry picked from commit fdfdf9a) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Conflicts in js/net/src/ietf/subscriber.ts, js/net/src/ietf/subscriber.test.ts, and rs/moq-net/src/ietf/subscriber.rs resolve to main: release's side is the #5069 backport of #5027, which main already carries in full, including the resume.is_none() guard the backport dropped and the newer Encoder and moq_net_sim test harness. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Summary
A draft-18+ subgroup stream with FIRST_OBJECT clear whose first Object ID is 0 is read as a whole group, in
rs/moq-netandjs/net. A clear bit with any other first ID is still dropped before a group exists.The first Object ID is absolute whatever the bit says, and object IDs start at 0, so ID 0 is the head either way. This accepts a publisher that left the bit clear.
next_object_id(and JSFrame.decode) still refuses a later gap.js/nethad grown the same early drop since the quest was written, so it is fixed the same way. It still has no fill or resume exception on this path.Public API
None.
Wire
None.
Tests
just rs check-test -p moq-netpassed (1554 tests). The@moq/netsuite passed.just checkdid not finish. After the JS checks, the Rust dependent graph failed inmoq-gstbecauseglib-syscould not findsysprof-capture-4.pc. That build does not use this change.Quest
This completes
quest/m0/ietf-first-object-zerofrom #5020. The quest file is not on main, so this PR leavesquest/untouched. Delete that file once #5020 merges.No empty-prefix behavior was changed.
(Written by Grok 4.5)