Skip to content

chore(webrtc): record consolidation blockers - #7804

Closed
kixelated wants to merge 2 commits into
mainfrom
quest/m1/webrtc-rename
Closed

kixelated wants to merge 2 commits into
mainfrom
quest/m1/webrtc-rename

Conversation

@kixelated

@kixelated kixelated commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

WebRTC consolidation is still needed and was unclaimed. Implementation discovery found the private API boundary the Plan explicitly reserves for the maintainer, plus an unconditional upstream SCTP dependency that prevents the promised gateway-only build.

Approach

This is a blocked diagnostic checkpoint, not an implementation of the rename. Record both decisions in the quest's Waiting section and correct its registry assumptions. No production code, callers, features, versions, or wire behavior has changed. The full consolidation and migration remain on this PR after those decisions.

Impact

  • Public API: none in this checkpoint. The remaining implementation renames moq-rtc to moq-webrtc, folds ICE into it, removes moq-tokio's webrtc feature, and migrates every consumer, doc, and quest together.
  • Wire: none.
  • Publication: crates.io returned 404 for both moq-ice and moq-webrtc on 2026-11-03; moq-rtc exists, with latest version 0.3.22. There is no published moq-ice to retire. First publication of moq-webrtc remains a release-cut action after implementation, with the maintainer's version choice. This attempt publishes no registry package or release tag and bumps no version.

Evidence

At discovery base acef90cf0425d9f0e4e699759cede07adfb2ecfb:

  • Client::connect_webrtc reads the private moq, versions, and timeout fields and private connect/runtime helpers.
  • Listener::accept_webrtc enters private listener activity, applies the handshake deadline, and constructs server::Request with private fields, including qmux limits and the deadline carried through admission. There is no public external-transport constructor. A mechanical move across crates cannot preserve that behavior.
  • The moved module also calls the private fallback-runtime helpers, so replacing them with plain tokio::spawn would change behavior for callers outside a Tokio runtime.
  • The locked str0m 0.24.1 manifest has unconditional [dependencies.sctp-proto] and no SCTP feature; its Rtc owns RtcSctp unconditionally. The current stable str0m 0.25.0 also lists sctp-proto as non-optional and exposes no SCTP feature, so upgrading alone cannot fix it. cargo tree --locked -p moq-rtc --no-default-features -e normal,build -i sctp-proto confirms the gateway still pulls sctp-proto v0.10.5 through str0m. Gating only moq-webrtc's direct data-channel code cannot remove SCTP from a gateway build.
  • Current capped WHIP answers carry TIAS and repeat REMB at nine tenths of the live cap. That code and its tests remain untouched and must move intact.

Overlap

Checked refreshed open PR titles, bodies, and branches, plus changed files for newer PRs and supplied matches before claiming. moq-dev/moq#7678 changes listing/follow callers; moq-dev/moq#7771 replaces native transport adapters; moq-dev/moq#7729 changes retention defaults. None consolidates the crates. Independent JS FETCH and relay ACME work is untouched. Transport-on-rind should account for the completed consolidation when resumed.

Alternatives

The choices below are proposals, not maintainer decisions. No public shim, raw private-field export, duplicated admission path, or partial crate migration was introduced.

Follow-ups

No separate follow-up proposed. All consolidation, coherent name migration, REMB/TIAS preservation, feature build checks, interop, and implementation review remain in this quest.

Checks

On checkpoint f22f07b4dfcc918419ab4e49844b7b5c970ccfc0, with the repository Nix dev shell:

  • quest gate just ci origin/main: pass (quest, Biome, shell, Markdown, text, TOML, Nix, justfile, large-file, and GitHub-tool checks/tests).
  • quest check --base origin/main: pass, 571 documents.
  • git diff --check: pass.
  • Gateway dependency tree with --no-default-features: confirms SCTP is still mandatory.
  • Production, feature-matrix, and cross-language interop tests have not run because no implementation changed.

Review

Source/API and dependency audit completed locally by GPT-6.1 Sol on checkpoint f22f07b4dfcc918419ab4e49844b7b5c970ccfc0. Implementation review has not run: implementation is blocked on the maintainer decisions below. The PR remains a draft.

Waiting

  • Maintainer: choose the external session boundary. Recommended: a public transport handoff on moq-tokio's client/listener accepting external establishment and link metadata while retaining admission, deadlines, qmux limits, request construction, and runtime ownership internally. Alternative: use moq-net's public client/server directly from moq-webrtc, with explicit runtime/timeout/admission policy and a moq-net handshake return. The alternative changes the Plan's session boundary and caller API. The Plan expressly reserves this choice for the maintainer.
  • Maintainer: choose the SCTP split scope. Recommended: bring the minimum planned str0m vendoring and SCTP feature gate into this rename, leaving other trimming in the existing vendoring quest. Alternative: explicitly defer removal of transitive SCTP to that quest and revise this quest's acceptance accordingly. Current upstream str0m cannot satisfy it through Cargo feature wiring alone, and making rename depend on its dependent vendoring quest would create a cycle.

(Written by GPT-6.1 Sol)

Quest-Claim: 87090d0b26897f54
@kixelated kixelated changed the title Rename moq-rtc to moq-webrtc chore(webrtc): record consolidation blockers Nov 4, 2026
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
@kixelated

Copy link
Copy Markdown
Collaborator Author

Maintainer decisions (2026-11-04, /quest-unblock), superseding this PR's ## Waiting text:

  1. Session boundary: ✅ the thin moq-tokio handoff. Session policy moves into moq-net first (Session policy lives in moq-net; connect landed as moq_net::Reconnect in feat(net): connect policy lives in moq-net as a poll machine #7904), then moq-webrtc calls moq-tokio's accept_with/connect_with, which run moq-net's policy. Not chosen: moq-webrtc driving moq-net's poll machines itself. This PR waits on moq-tokio becomes a thin shell, as quest/m1/webrtc-rename.md already records.
  2. SCTP: ✅ removal stays with Vendor and trim the WebRTC stack, as recorded earlier on 2026-11-04. The rename adds only the feature gate Cargo can wire. Not chosen: minimal str0m vendoring inside the rename.

(Written by Claude Opus 5.5)

@kixelated

Copy link
Copy Markdown
Collaborator Author

Closing: both questions this draft records are already settled on main in quest/m1/webrtc-rename.md (decided 2026-11-04). Session policy moves into moq-net first, then moq-webrtc uses moq-tokio's thin connect_with/accept_with handoffs. Removing SCTP stays with the WebRTC vendoring quest. The quest now requires quest/m1/session-policy/tokio-handoff.md, so it can't proceed yet. The quest itself stays.

(Written by Claude Opus 5.5)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant