From 38c2ed6aa67c049cbf7c131ff329f0236f0d7ed0 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Sat, 10 Oct 2026 10:15:49 -0700 Subject: [PATCH] quest: retire second release-backport batch after implementation lands Co-Authored-By: GPT-6 --- quest/m1/README.md | 1 - quest/m1/release-backports/README.md | 32 -------------------- quest/m1/release-backports/catalog-floor.md | 14 --------- quest/m1/release-backports/fetch-fin.md | 18 ----------- quest/m1/release-backports/js-fin.md | 14 --------- quest/m1/release-backports/namespace-fill.md | 14 --------- quest/m1/release-backports/request-params.md | 16 ---------- quest/m1/release-backports/setup-repeat.md | 12 -------- 8 files changed, 121 deletions(-) delete mode 100644 quest/m1/release-backports/README.md delete mode 100644 quest/m1/release-backports/catalog-floor.md delete mode 100644 quest/m1/release-backports/fetch-fin.md delete mode 100644 quest/m1/release-backports/js-fin.md delete mode 100644 quest/m1/release-backports/namespace-fill.md delete mode 100644 quest/m1/release-backports/request-params.md delete mode 100644 quest/m1/release-backports/setup-repeat.md diff --git a/quest/m1/README.md b/quest/m1/README.md index 25c59174d5..d88113f1f4 100644 --- a/quest/m1/README.md +++ b/quest/m1/README.md @@ -61,7 +61,6 @@ ladders. - [Dogfood hosted worklets](/quest/m1/dogfood-assets.md) - the moq.pro dashboard hosts the worklets and calls `assets()` after the release - [More tests under load](/quest/m1/test-flakes-2/README.md) - the second round of load-only failures, one quest per flake, fixed at the cause - [Test TypeScript check](/quest/m1/test-ts-check.md) - `just check` type-checks the TypeScript harnesses under test/ -- [Release backports, second batch](/quest/m1/release-backports/README.md) - the 0.17.x line picks up the smaller release-only fixes left from the 2026-10-09 triage - [IETF request headers](/quest/m1/ietf-dispatch-headers.md) - each bidi request reads its header in its own task, so a slow one never blocks the next - [END_OF_TRACK placement](/quest/m1/ietf-end-of-track-placement.md) - END_OF_TRACK rides the upstream's Location, and Rust's header stops claiming END_OF_GROUP - [moq-uring tests under load](/quest/m1/uring-tests-under-load.md) - uring tests pass while parallel checks share locked memory diff --git a/quest/m1/release-backports/README.md b/quest/m1/release-backports/README.md deleted file mode 100644 index 1bc2a2b4b1..0000000000 --- a/quest/m1/release-backports/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# Release backports, second batch - -## Goal - -The 0.17.x line picks up the remaining fixes from the 2026-10-09 backport -triage that were left out of the first batch, each as its own PR onto -`release` (CONTRIBUTING), or the quest is deleted once a fix proves unneeded. - -## Plan - -The first batch (#5120 through #5135, plus #5164, some still landing) covers -every crash, leak, and interop break the triage found. These children are -smaller release-only patches; most can't cherry-pick because `main` built them -on work `release` lacks (#4741, #4268, main's `decode_params!` syntax). -`release` does have `rs/moq-net/src/ietf/request_stream.rs` since #5133, with -`fin_cancels` and `poll_cancel`; extend it rather than writing around it. -Write the release patch against release's own code, carry the original -regression test, and confirm it fails on `release` first. Interop at Seattle -(2026-10-12) may raise or drop each one's priority. - -The `release` interop matrix only negotiates moq-lite, so IETF changes also -need unit tests or `just test bare-fin`-style coverage. Still run `just test -interop --all`, as AGENTS.md requires for wire changes. - -## Required - -- [FETCH survives a request FIN](/quest/m1/release-backports/fetch-fin.md) - a d19+ FETCH keeps serving after the requester FINs, as SUBSCRIBE does since #5133 -- [Repeated unknown SETUP options](/quest/m1/release-backports/setup-repeat.md) - a peer repeating an unknown or GREASE SETUP option no longer closes the session -- [Unknown request parameters](/quest/m1/release-backports/request-params.md) - draft 14-17 peers sending FORWARD or an unlisted parameter no longer close the session -- [NAMESPACE fill on d16+](/quest/m1/release-backports/namespace-fill.md) - a d16+ SUBSCRIBE_NAMESPACE without SOLICIT still gets NAMESPACE entries -- [JS keeps requests alive after FIN](/quest/m1/release-backports/js-fin.md) - the release-line `@moq/net` publisher stops cancelling on a d19+ request FIN -- [Quiet catalog after a cleared floor](/quest/m1/release-backports/catalog-floor.md) - a relay serves a quiet catalog after a resume floor clears, if the stall reproduces on `release` diff --git a/quest/m1/release-backports/catalog-floor.md b/quest/m1/release-backports/catalog-floor.md deleted file mode 100644 index 2795ce0e72..0000000000 --- a/quest/m1/release-backports/catalog-floor.md +++ /dev/null @@ -1,14 +0,0 @@ -# [S] Quiet catalog after a cleared resume floor on release - -## Goal - -On `release`, a relay that resumes a broadcast after a reconnect serves its -catalog even when the catalog track is quiet and the resume floor has been -cleared, or this quest is deleted because the stall does not reproduce there. - -## Plan - -#4940 (`35fa44f6b`) fixed the stall on `main`. Triage suspected `release` -has it too (spliced `start_at` only raises) but did not prove it. Reproduce -first with a release-side test; port only if it fails. The publisher half of -#4940 applied cleanly; the resume and track halves need adapting. diff --git a/quest/m1/release-backports/fetch-fin.md b/quest/m1/release-backports/fetch-fin.md deleted file mode 100644 index bb253b5eb8..0000000000 --- a/quest/m1/release-backports/fetch-fin.md +++ /dev/null @@ -1,18 +0,0 @@ -# [S] A d19+ FETCH survives a request FIN on release - -## Goal - -On `release`, a FETCH or joining FETCH on draft 19+ keeps serving after the -requester FINs its side of the request stream; a reset or STOP_SENDING still -cancels it, and drafts 14-18 keep cancelling on FIN. - -## Plan - -#5133 gated SUBSCRIBE and SUBSCRIBE_NAMESPACE with `fin_cancels` in -`rs/moq-net/src/ietf/request_stream.rs` and left FETCH alone: release's -`run_fetch_stream` paths still watch `stream.reader.poll_closed` directly. -`main` already routes its FETCH paths through `request_stream::poll_cancel`, -so this is release-only. Do the same on `release`, with a version-swept test -like `requester_fin_is_version_gated_for_subscriptions`. - -Raise its priority if a Seattle peer FINs after FETCH. diff --git a/quest/m1/release-backports/js-fin.md b/quest/m1/release-backports/js-fin.md deleted file mode 100644 index 5f1b7ee892..0000000000 --- a/quest/m1/release-backports/js-fin.md +++ /dev/null @@ -1,14 +0,0 @@ -# [S] Release-line JS keeps requests alive after FIN - -## Goal - -The release-line `@moq/net` publisher keeps serving a draft 19+ subscription -after the requester FINs its request stream, matching the Rust publisher -since #5133; drafts 14-18 still cancel on FIN. - -## Plan - -#4658 changed both languages on `main`; #5133 ported only Rust. Port the JS -publisher half to `js/net/src/ietf/` on `release`, with a version-swept test, -and bump `@moq/net` on `release` after it lands (`/bump`). Matters when a -browser publishes through a draft 19+ peer that FINs after SUBSCRIBE. diff --git a/quest/m1/release-backports/namespace-fill.md b/quest/m1/release-backports/namespace-fill.md deleted file mode 100644 index e8a98a638b..0000000000 --- a/quest/m1/release-backports/namespace-fill.md +++ /dev/null @@ -1,14 +0,0 @@ -# [S] NAMESPACE fill on d16+ on release - -## Goal - -On `release`, a draft 16+ SUBSCRIBE_NAMESPACE from a peer that does not send -SOLICIT still receives NAMESPACE entries for matching broadcasts, instead of -an empty stream. - -## Plan - -#5032 (`d5208239f`) fixed this on `main` on top of #4268's active counts. -For `release`, apply the solicitation filter only on drafts 14 and 15. Worth -doing if a Seattle peer discovers broadcasts through NAMESPACE rather than -unsolicited PUBLISH_NAMESPACE; otherwise this can be deleted. diff --git a/quest/m1/release-backports/request-params.md b/quest/m1/release-backports/request-params.md deleted file mode 100644 index af4f913e7d..0000000000 --- a/quest/m1/release-backports/request-params.md +++ /dev/null @@ -1,16 +0,0 @@ -# [S] Unknown request parameters on release - -## Goal - -On `release`, a draft 14-17 peer that sends FORWARD on SUBSCRIBE_NAMESPACE, or -any unlisted request parameter on drafts 14 and 15, keeps its session instead -of closing it with InvalidValue. - -## Plan - -#5028 (`4bf8b59cd`) fixed this on `main` by reworking `decode_params!`, which -depends on main-only macro syntax. Release's `request_stream.rs` (from #5133) -differs from main's, so adapt that part rather than cherry-picking it. Write -the minimal release patch: accept FORWARD where drafts 15-17 allow it, and skip unknown -keys where drafts 14 and 15 say to ignore them. moqx on draft 16 is the known -peer that hits this; it redials in a loop today. diff --git a/quest/m1/release-backports/setup-repeat.md b/quest/m1/release-backports/setup-repeat.md deleted file mode 100644 index c541cfb976..0000000000 --- a/quest/m1/release-backports/setup-repeat.md +++ /dev/null @@ -1,12 +0,0 @@ -# [XS] Repeated unknown SETUP options on release - -## Goal - -On `release`, a moq-transport peer that repeats an unknown or GREASE SETUP -option completes the handshake instead of failing with `Duplicate`. - -## Plan - -Backport only the SETUP half of #4927 (`4b53bd27d`): unknown option kinds may -repeat, known ones still refuse duplicates. Skip #4927's stricter GROUP_ORDER -validation, which tightens behavior rather than fixing a break.