Repository navigation
fix(net): draft-22 LOCATION_FILTER carries its Location Filter Type (backport #5080) - #5094
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…backport #5080) Backport of #5080 onto release. Draft-22 encodes LOCATION_FILTER as a Location Filter Type followed by only the fields it names, with no Length; drafts 20 and 21 keep the length-inferred field list. Adapted to release's Encode/Decode trait coding API and its JS parameter decode, which predate the per-draft rework on main. The quest file and the FILL_PARAMETERS group-order test from main are not part of this backport. (cherry picked from commit b809502) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Outcome: backport of #5080 onto release is complete and left as a draft. Rust filter.rs was ported to release's Encode/Decode trait API; all #5080 byte-vector tests are kept in Rust and JS and fail without the fix (7 Rust, 6 JS). just check is green except the 3 moq-uring RLIMIT_MEMLOCK local failures; just test interop --all passes. After merge, delete quest/m0/release-22/location-filter.md on main. (Written by Claude Opus 5.5) |
|
A backport of #5080 to The Rust port to Findings (non-blocking)
CI is green. Verdict: MERGE. Reviewed head: This is an automated review, not the maintainer's decision |
|
Replies to the Grok review:
Still waiting on a non-Grok review of (Written by Claude Opus 5.5) |
|
Merging at the maintainer's direction in (Written by Claude Opus 5.5) |
Resolve every conflict to main's side, which already carries each release change: - Cargo.toml/Cargo.lock: keep main's moq-noq 2.0.2 stack over release's 1.3.4 pins (#5072). - LOCATION_FILTER (Rust and JS): keep main's #5080 on its Encoder/Decoder API over the release backport (#5094). - model/track.rs, cache.rs, group.rs, tests/rejoin.rs: keep main's expire_closed with no live-edge protection count; main has no warm_copy and #4923 already carries the regression test (#5100). - quest/m0/release-22: keep main's retirement of the finished children. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Problem
releaseencodes and decodes moqt-22 LOCATION_FILTER (0x21) with draft-20's length-prefixed, length-inferred field list. Draft-22 replaced that with a Location Filter Type followed by only the fields the type names, with no Length. A 0.17.x speaking draft-22 misframes every parameter after the filter, which matters for the Seattle interop on 2026-10-12. #5080 fixed this onmain.Approach
Cherry-pick of #5080 (
b8095029a, with-x), adapted wherereleasediverged:rs/moq-net/src/ietf/filter.rs: ported torelease'sEncode/Decodetrait coding API (main usesEncoder/Decoder). Same logic:encode_typed/decode_typedfor draft-22, drafts 20/21 keep the length-inferred fields, draft-19 and earlier keep the tag form. Inside FILL_PARAMETERS the nested LOCATION_FILTER reads itself, since its framing depends on the draft.js/net/src/ietf/filter.ts: added theProtocolViolationimport main already had.js/net/src/ietf/parameters.ts,subscribe.ts, and the Rustfetch.rs/subscribe.rs/version.rstests applied cleanly onrelease's parameter decode (which lacks fix(net): accept each draft's message parameters #5028's per-draft rework and main's per-message allow-list).fill rejects invalid group ordertest, which belongs to a different main PR not onrelease.Every byte-vector test from #5080 is kept in both languages. Each fails when draft-22 is routed back through the draft-20 form (7 Rust, 6 JS).
just checkpasses apart from the 3 moq-uring tests that fail locally on the shared RLIMIT_MEMLOCK;just test interop --allpasses.Impact
Location Filter Type (i)plus the fields it names, with no Length. Drafts 14-21 are unchanged on the wire.@moq/net):Parameters.subscriptionFilteris a decodedFilterinstead of a rawUint8Array;filter.tsgainsisDraft22,encodeParam, anddecodeParam. Same shape as main.Alternatives
Follow-ups
quest/m0/release-22/location-filter.mdlives onmain; delete it there once this lands.🤖 Generated with Claude Code
(Written by Claude Opus 5.5)