From 2b135c3bf344d36bdd8ca4b29bfe333882345b52 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Sat, 3 Oct 2026 09:28:38 -0700 Subject: [PATCH] quest(m1): abandon moq-transport cluster-off Letting moq-transport peers negotiate the optional cluster extension is harmless enough that a 15-file change isn't justified. Co-Authored-By: Claude Opus 5.5 --- quest/m1/README.md | 1 - quest/m1/cluster-routing/README.md | 3 +-- quest/m1/cluster-routing/transit.md | 4 --- quest/m1/ietf-cluster-off.md | 40 ----------------------------- quest/m2/ietf-cluster-peers.md | 10 +++----- 5 files changed, 5 insertions(+), 53 deletions(-) delete mode 100644 quest/m1/ietf-cluster-off.md diff --git a/quest/m1/README.md b/quest/m1/README.md index fc4f552346..73c79998e2 100644 --- a/quest/m1/README.md +++ b/quest/m1/README.md @@ -22,7 +22,6 @@ QUIC studies there on that rule. ## Required -- [moq-transport peers are plain clients](/quest/m1/ietf-cluster-off.md) - no moq-transport session negotiates the cluster extension, so none can splice a pool's members on a Hop ID label - [Epoch primitive](/quest/m1/epoch.md) - one `Epoch` type in moq-net and @moq/net, carried as a trailing `@` path segment, shared by e2ee and broadcast epochs - [Broadcast epochs](/quest/m1/broadcast-epoch/README.md) - each publish of a name gets a fresh `@` epoch, viewers follow the newest live one at once, and bare names still resolve on every version - [Bounded stats aggregate](/quest/m1/stats-aggregate-bound.md) - the stats aggregator folds departed nodes into a retired total after a grace window, so its memory stops growing with node churn diff --git a/quest/m1/cluster-routing/README.md b/quest/m1/cluster-routing/README.md index 84dbc08cdd..2d5c0ca5a9 100644 --- a/quest/m1/cluster-routing/README.md +++ b/quest/m1/cluster-routing/README.md @@ -83,8 +83,7 @@ vector the 2026-09-30 cache-tiers audit kept: Kept from 2026-09-30: core links are configured and may skip PoPs; Warm and Cold collapse to one cost ([One route cost](/quest/m1/route-cost.md)); epoch-qualified paths are a source's identity -([Selection](/quest/m1/cluster-routing/selection.md)); cluster links are -moq-lite only ([moq-transport peers are plain clients](/quest/m1/ietf-cluster-off.md)); +([Selection](/quest/m1/cluster-routing/selection.md)); `--hop` removal and One route cost land on their own. Anything specific to moq.pro's deployment is planned in moq.pro. diff --git a/quest/m1/cluster-routing/transit.md b/quest/m1/cluster-routing/transit.md index 5bfb336887..46bc11f2f6 100644 --- a/quest/m1/cluster-routing/transit.md +++ b/quest/m1/cluster-routing/transit.md @@ -62,7 +62,3 @@ node. Public API: an `upstream` peer attribute and a TLS qmux URL scheme. `cluster.tier` is unrelated: it stays the billing and stats label. Wire: none. - -## Related - -- [moq-transport peers are plain clients](/quest/m1/ietf-cluster-off.md) - cluster links are lite-only diff --git a/quest/m1/ietf-cluster-off.md b/quest/m1/ietf-cluster-off.md deleted file mode 100644 index 3aeda66a88..0000000000 --- a/quest/m1/ietf-cluster-off.md +++ /dev/null @@ -1,40 +0,0 @@ -# [S] moq-transport peers are plain clients - -## Goal - -No moq-transport session negotiates the MoQ Cluster extension -(`draft-lcurley-moq-cluster`). A moq-transport peer is always served as a -plain client: it never receives Hop IDs or relay costs and never acts as a -cluster link. Cluster links are moq-lite only. moq-transport end users stay -fully supported. - -## Plan - -Why now: the Wildcard line spreads a pool's paths behind one route, and names -the serving member only in lite-07's reply Origin. The cluster extension has -no such field, so a moq-transport downstream relay pins failover to the -advertisement's first Hop ID, which labels the pool rather than the member, -and can splice one member's objects onto another's. A peer that never learns -Hop IDs cannot make that mistake. Decided in the 2026-09-30 wildcard audit, -matching the topology decision that cluster links are lite-only. - -- Stop offering and accepting the cluster Setup Options in Rust - (`rs/moq-net/src/ietf/cluster.rs`, `parameters.rs`, `publish_namespace.rs`) - and JS (`js/net/src/ietf/cluster.ts` and its callers). A peer that offers - them is served as if it had not. -- Delete what becomes dead, in both languages. The draft stays: - [moq-transport cluster peers](/quest/m2/ietf-cluster-peers.md) extends it - and brings the code back. -- Update `doc/bin/relay/cluster.md` and `doc/concept` wherever they say - moq-transport relays can join a cluster. -- Test: a moq-transport 17+ peer that offers the extension gets a session - with no cluster parameters, and an announcement reaches it with no Hop IDs. - -Lands on `main`: extension negotiation is optional, so a peer that offered it -still gets a working session. Public API: none expected. Wire: we stop -negotiating an optional extension. - -## Related - -- [Upstream links](/quest/m1/cluster-routing/transit.md) - cluster links are lite-only -- [Wildcard](/quest/m0/wildcard/README.md) - the pool spread that makes a Hop ID label unsafe to splice on diff --git a/quest/m2/ietf-cluster-peers.md b/quest/m2/ietf-cluster-peers.md index a0803b2505..c6e183f425 100644 --- a/quest/m2/ietf-cluster-peers.md +++ b/quest/m2/ietf-cluster-peers.md @@ -2,15 +2,13 @@ ## Goal -A moq-transport relay can join a cluster as a peer again, through an -extended `draft-lcurley-moq-cluster`, and never splices one pool member's -content onto another's. +A moq-transport relay joins a cluster as a peer through an extended +`draft-lcurley-moq-cluster`, and never splices one pool member's content onto +another's. ## Plan -Replaces the wildcard line's "Cluster origin reply" quest. Until this lands, -moq-transport peers are plain clients -([moq-transport peers are plain clients](/quest/m1/ietf-cluster-off.md)). +Replaces the wildcard line's "Cluster origin reply" quest. The extension must carry what a lite cluster link carries by then: