Repository navigation
fix(net): request compressed prefixes for mid-group application ranges - #6242
Conversation
Co-Authored-By: GPT-6 <noreply@openai.com>
Keep application frame filters intact while lite-07 requests widen to frame zero only when the requesting copy lacks the complete committed prefix. Co-Authored-By: GPT-6 <noreply@openai.com>
Observe the propagated end while a retained route still holds the earlier floor, then verify only the application-requested frames are read. Co-Authored-By: GPT-6 <noreply@openai.com>
|
Implemented the settled current-main Rust lite-07 scope. Missing/partial/released prefixes widen outgoing requests to frame 0; a complete retained prefix keeps N. Local application filtering and server/recovery FETCH semantics stay intact. No new public API, wire fields, dependencies or retained history. All 2,870 net tests, the full cross-language interop matrix and the 18-cell request benchmark passed. The final (Written by GPT-6) |
|
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 13 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: a7b124da5d
ℹ️ 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".
A request kept at frame N relies on the cached prefix, so record it as a read and normal eviction takes it last. A prefix still lost before the tail lands fails that group with Lagged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9a2a750476
ℹ️ 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".
…-range-widen # Conflicts: # quest/m1/compress/README.md # quest/m1/compress/app-range-widen.md # rs/moq-net/src/fuzz.rs # rs/moq-net/tests/integration/compress.rs
Lite-07 widening lands in this PR. The IETF requester needs a cold SUBSCRIBE to learn compression first and its readers to apply the frame window, so that half stays as its own quest; js/net subscriptions carry group ranges only and need no mirror. Record the Duplicate rejection of a tail after a copy stopped at a request's end bound, found while answering the review. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review (Written by Claude Opus 5.5) |
Problem
A Rust application joining a compressed lite-07 track at frame N asks for N even when its local copy lacks frames 0..N-1. Its plain reader cannot inflate that tail.
Approach
Normalize outgoing subscription bounds in the requesting model before lite-07 sends them. Keep N only when a cached copy holds the complete committed prefix, and record that as a read of the copy so normal eviction takes it last; otherwise request frame 0. Original application preferences still filter reads, and publishers still serve exactly the requested bounds.
The check uses one cache lookup and at most two copy checks, with no payload copying, pin, or added retained state. Regression coverage exercises absent, partial, complete, tail-only and aborted prefixes, a held prefix outliving pressure eviction, plus a two-hop application range and live update.
Scope
The quest also asked for moq-transport draft-17+ and
js/net. Neither lands here:js/net: nothing to mirror. Its subscriptions carry group ranges only (
Subscription.groups), so a JS SUBSCRIBE always starts at frame 0, and a compressed group that does not is already refused withTooFarBehind.moq-transport: kept open as quest/m1/compress/ietf-range-widen.md. I ran the two-hop app-range test across lite-07 and moq-transport-17/18/22 on either hop. The failures come from three gaps in the IETF requester, and plain tracks hit them too:
group.relayed()). An application on an IETF hop already reads frames below its start on plain tracks.Widening the IETF start before those are fixed would add code that no test can check end to end. Our own IETF publisher already served whole groups in the matrix.
The epic now lists the moq-transport quest in place of the deleted one.
Impact
track::Subscriptionranges on compressed lite-07 tracks.widen_compressedispub(crate); its benchmark bridgemoq_net::fuzz::widen_compressedis under the existing hidden fuzz surface.Alternatives
Always requesting frame 0 wastes a complete cached prefix. Widening at the server would change the content it was asked to serve. Pinning the held prefix against cache policy would close the eviction window entirely, but it exempts groups from eviction and its accounting. Declined below.
Decisions
Codex's first P1: if a held prefix is evicted before its tail lands, the tail starts at N and a plain reader cannot inflate it.
Decided by the maintainer: keep asking from N when the prefix is cached and do not pin it. Refresh its access time first, as a FETCH hit does. If it still disappears before the tail lands, that group fails with
Lagged. Only a consumer slower than the cache's turnover can trigger that.widen_compresseddocuments it.Codex's second P1: a warm tail is rejected as
Duplicate. This is a receive-path gap that predates this PR and also affects plain tracks: a stream that stopped at the request's end bound isfinish()ed. It is recorded as quest/m1/subscribe-ranges/bounded-tail.md.Made without the maintainer (sub-agent, recommended option):
Validation
just checkfor the Rust and quest stages,quest check --base origin/main, and the full cross-languagejust test interop --all.just check's flake stage stops at the Nix runner-image build (unshare: write failed /proc/self/uid_map), which is a host restriction. CI runs that stage.Follow-ups
(Written by GPT-6, updated by Claude Opus 5.5)