Repository navigation
feat(net)!: drop moq-transport drafts 14 through 17 - #6753
Conversation
Quest-Claim: 1835d705d02d19b4
Tests, the relay, JS, CI, and docs still to follow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…terop, docs, and quests @moq/net removes DRAFT_07 and DRAFT_14..17, their ALPNs, and the control-stream adapter; the moql SETUP negotiates only lite-01/02, and both sides refuse an IETF version offered there. Interop clients, the token cross-language vector, IETF drafts, docs, MIGRATE guides, and quests move to draft 18 and later. The draft-16 unregistered filter type test moves to draft 18 for the Moxygen smoke lane. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…mance run 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. |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: 86d747d
No actionable bugs found in static review. Removing the legacy adapter, request window and obsolete codec branches meaningfully simplifies the retained draft-18+ paths. Lite-01/02 negotiation retains its existing u16 framing, and skipped-request-ID history remains bounded after removal of the configurable request limit.
The documented anonymous-dial coverage gap and file-by-file-only JavaScript test result remain verification follow-ups, not newly discovered defects. Cloudflare/Moxygen smoke changes still need external interoperability validation.
Verification: inspected Rust/JS negotiation, request/session lifecycle, retained codecs, error mapping, limits and relevant regression changes. No builds, tests or external-peer interoperability run; author-reported results were not independently verified.
Draft 16 was the only moq-transport version where neither side declares a hop. moq-lite-01 carries none either, so the anonymous dial keeps its coverage, and draft 18 keeps a named-hop case. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: 2036e94
No new actionable bugs found. The previous anonymous-dial coverage gap is addressed: the shared split-horizon scenario now runs both named draft-18 peers and anonymous lite-01 peers, checking namespace echo suppression and subscription routing in each case. Reusing one scenario keeps assertions consistent without duplicating the test implementation.
Verification: static comparison against 86d747d and inspection of the updated test and relevant handshake behavior. Tests were not run. Earlier full-suite and external-interoperability verification limits are unchanged.
Main dropped drafts 19 through 21 (#6754), so the remaining IETF set is drafts 18 and 22. Version lists collapse to [18, 22], draft-19/20 stand-ins become draft-22, the draft-20/21 filter field encoding goes, and the draft-22 fuzz regressions take 6753's inputs re-indexed for the shorter version table. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claimed group and joining fetches now wait for stream credit (#6702); with no request window left, they take their ID synchronously once the stream opens. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Audit note: moq-dev/moq#6798 rewrites three quests this PR's sweep missed (the regex misses plural "drafts"):
Still on you here:
(Written by Claude Opus 5.5) |
# Conflicts: # doc/lib/dart/index.md # doc/lib/kt/index.md # doc/lib/swift/index.md
The adapter's lost-AUTH change (#6734) goes with the adapter; its session tests move to draft 18. The JS overlapping SUBSCRIBE_NAMESPACE wait (#6714) keeps only its stream-cancel path, and the moql SETUP tests from Client::with_url (#6749) drop their draft-14 case. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Carry #6751's renames into the draft 14-17 removal: stats::Message, Session::allocator(), track info(), and keep both MIGRATE entries. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keep #6905's accept timeout and signal; legacyPeerImplementation stays removed with the draft 14-16 bidi SETUP. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Re-landing after moq-dev/moq#6751 and moq-dev/moq#6905 merged. Merged
(Written by Claude Opus 5.5) |
Carry #6752's requests() rename; drop the draft 14-16 subscriber tests it renamed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Merged main (641c41e) after moq-dev/moq#6752 landed:
Local: (Written by Claude Opus 5.5) |
Port drafts 14 through 17 removal onto lifetime-free Path and Relative (#6843). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Re-landing after the merge queue dropped this on a conflict with moq-dev/moq#6843.
(Written by Claude Opus 5.5) |
Draft 14 is gone, so the trailing-slash namespace seed now runs as draft 18. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main's tip is the squash of #6753, whose tree matches the head merged before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ect-drop Keep #6753's draft-22-only selection while retaining this branch's typed-ID, plain-reader and late-object-0 datagram assertions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claims and completes quest/m1/ietf-drop/d14-17.md, including the request-ID history decision moq-dev/moq#6707 added to it.
moq-netand@moq/netno longer speak moq-transport drafts 14 through 17. A peer offering only those versions, by ALPN or in the moql SETUP, fails the handshake. The legacy control-stream adapter (ietf/adapter.rs,js/net/src/ietf/adapter.ts), legacy SETUP negotiation, the request window and its limit, and the draft-17 varint family are gone.Decisions
Publisher::joins, so a reused ID only confuses the reusing peer's own joining FETCHes. AUTH state is per stream, so a reuse cannot reach another grant. Our GOAWAY now names one past the highest peer ID as its cutoff, so a lower ID still in flight on a reordered stream is processed as promised (goaway_freezes_request_admission_at_current_progressexpects 6 where it expected 2).@moq/netnever sends GOAWAY, so it keeps only the parity check (checkPeerRequestId). Therequest-idsbenchmarks in both languages measured the removed history, so they go.Impact
moq-net):ietf::Version::Draft14throughDraft17are removed. Migrate by speaking draft 18 or later, or moq-lite.session::Limits::requestsis removed; drop the field, stream credit bounds every request.@moq/net): the"moq-transport-14"through"moq-transport-17"version names throw aTypeError. Migrate by naming draft 18 or later. The removedietf/codecs were not exported.[limits.client]and[limits.peer]requestsis refused at startup; delete it.moq-00,moqt-15,moqt-16, andmoqt-17ALPNs are no longer offered or accepted. The moql SETUP (no ALPN, ormoql) negotiates only moq-lite, lite-01 through lite-07 since main's moq-dev/moq#6828, and keeps lite-01/02's draft-14 u16 size framing with QUIC varints whichever version it selects; both sides refuse an IETF version there. No published wire layout changes.moq-transport-18;MIGRATE.mdin both packages gains an entry.Choices made
stalled_setup_reply_is_closed_at_the_deadlinenow offers only lite-02, since a newer lite version is answered during accept rather than inok().cloudflare/moq-rs'sdraft-18-devbranch, since its default branch speaks only draft 16.controlclient keeps only its status mode; the credit mode tested the removed request window.dial_split_horizon's anonymous dial, where neither side declares a hop, moves from draft 16 to moq-lite-01, which carries no hop either; draft 18 keeps a named-hop case. A draft-18 peer declaring hop 0 is not reachable through our own origin, which refuses hop 0 locally. Making the dialer skip its per-dial hop fails the test.subscribe-ranges/ietf.mdis gone, since main's moq-dev/moq#6815 finished it.@moq/net's pause and resume path carries only that ID. Their range tests, theietf_range_updates_interoplane, and the JS range-update test run on drafts 18 and 22.Checks
origin/mainat b691105, 83d97be, 8862064, e76fc8c, bb8db18, 858a93a, 3c41865, 25cd95e, 5388028, c70f52d, 73f0082, 2adc1c0, 62d1907, 6d8f4f8, and c764ace (no rebase). Merge 1 had dropped the cooperative budget in main'sskip_fetch_payload; 0d22fda restores it. Conflicts since the last review: moq-dev/moq#6815's range updates (resolved onto the 18+ code: no draft-14 Start Location, no draft-15/16 answer IDs,sends_timescalegone), moq-dev/moq#6899's announce slots and peer-violation closes (kept without the draft-14/15 duplicate refusal), moq-dev/moq#6904's element tests (main's), and moq-dev/moq#6834's per-connection tokens (itscredentialhandle threads through the lite-only legacy paths; its draft-14 session test is dropped; binding docs say draft-18+), moq-dev/moq#6750's lifecycle rename (applied to the PR's draft-18 tests; its draft-14 status-object tests are dropped), and moq-dev/moq#6909's six lite fuzz roundtrips (kept at kinds 22-27; the lite SETUP pair this PR moved out ofietf_wirenow sits at 28 and 29). moq-dev/moq#6751's renames are carried into this PR's code (stats::Messagein the IETF control classifier and SETUP codecs,Session::allocator(),track::Consumer::info()), its edits to the deletedietf/adapter.rsandadapter.tsare dropped, both MIGRATE entries are kept, and its binding docs say draft-18+. moq-dev/moq#6905's accept timeout and signal are kept, without the removedlegacyPeerImplementation, and its malformed-SETUP test expects the moql SETUP's own type error. Comments still saying draft-17+ now say draft-18+. moq-dev/moq#6843's lifetime-freePathandRelativeare carried into this PR's code (Path::from_staticfor literals,Path::new(..).unwrap()in tests, noPathOwned); its edits to the deletedietf/adapter.rs, the draft 14-17 messages and tests, and theHidden::beyondtop-up rule this PR removed are dropped, and its new too-long-namespace publisher test expects REQUEST_ERROR on every remaining version. Both MIGRATE entries are kept. Main's new tests and docs naming drafts 14-17 now name 18 and 22; feat(auth)!: per-connection tokens with an answer, and a grant consumer #6834'sauth_refuses_a_token_nothing_carriesruns on moq-lite-06, the only binding-reachable session without AUTH.@moq/netintegration cases labelled draft-17 that already ran draft 18, andauth.tsnow says draft-18+.just checkran every selected lane and passed, toml included (flake and swift skip locally as below); regeneratedindex.api.mdandmoq.dartmatch (the Dart generator's blank-line-only output is discarded, since the lints package does not resolve locally).cargo clippy -p moq-net --all-targets --all-features -- -D warnings,cargo test -p moq-net --all-features(fuzzseeds_reach_every_armandregressionsincluded), andjust test interop --allpass.just checkran every selected lane and passed, toml included (flake and swift skip locally as below); generatedindex.api.mdandmoq.dartmatch main.cargo test -p moq-net --all-featurespasses (fuzzseeds_reach_every_armandregressionsincluded), andjust test interop --allpasses. Earlier, on head 0b71d54:just checkran every selected lane (rs, js, py, c, cpp, kt, go, dart, drafts, markdown, gh, quest, shell, toml, nix, justfile) and passed; flake skips itself (no user namespaces) and swift has no local toolchain. An earlier run on this merge sawietf blind handle picks up a publisher that arrives latefail once under full load; it passed on every rerun (see Follow-ups).cargo test -p moq-net --lib fuzz::passes (seeds reach every arm, regressions replay).just test interop --allpasses, includingietf_range_updates_interop.quest checkpasses.test/interop/relay-log.test.sh, the smoke and conformance lanes (they need docker or external peers).Follow-ups
integration: ietf blind handle picks up a publisher that arrives latecan seeactivego undefined after the DOES_NOT_EXIST refusal when the machine is loaded; worth a flake quest.🤖 Generated with Claude Code
(Written by Claude Opus 5.5)