Skip to content

fix: m1 interop audit - #6538

Draft
kixelated wants to merge 5 commits into
mainfrom
quest/m1/audit-interop
Draft

kixelated wants to merge 5 commits into
mainfrom
quest/m1/audit-interop

Conversation

@kixelated

@kixelated kixelated commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

Runs the m1 interop audit over the runner's 2026-10-23 nightly and the relays page, fixes the one new bug that was ours, and schedules the m2 run.

Fix

  • Omitted publisher priority (moq-net, js/net): drafts 16 on define an omitted DEFAULT_PUBLISHER_PRIORITY as 128. Since moq-dev/moq#6142 both stacks read it as the unset 0, so moq-relay forwarded every such track at 127. Cloudflare's draft-18 moq-test client fails data-subgroup-basic through moq-relay on main with carried priority 127, expected 128. An absent subscriber priority still reads as 0.

Classification

Runner 2026-10-23 nightly: 77 of 139 moq.dev cells red (clients moq-tokio 0.19.28 and @moq/net 0.4.4, docker relay moq-relay 0.17.7). Relays page 2026-10-23T09:06Z: 40 of 103 red. A cell can carry more than one cause.

Class Cells Evidence
Ours, fixed on main: JS moqt:// dial (m0) runner 10 empty-message failures on every moqt:// target
Ours, fixed on main: rendezvous TIMEOUT (#5616) runner 10 passes against a main relay
Ours, fixed on main: JS draft-17+ withdrawal by reset (#5483, backport #6518) runner 9 runner JS client on main passes 3/3 vs Cloudflare d18, 0.4.4 fails 3/3
Ours, fixed on main: released Rust never surfaces the NAMESPACE runner 3 main client passes vs quic-zig and moxygen, 0.19.28 fails
Ours, fixed on main: Timestamp stamping (#5083) runner 3 Cloudflare d18 client vs main relay
Ours, fixed here: omitted publisher priority runner 3 above
Ours, fixed on main: xquic raw-QUIC connection errors runner 1 5 of 6 cases pass vs main relay
Ours, fixed on main: Rust WT offer moq-00 (m0) relays 2 moxygen WT rust→rust passes from main
Ours, fixed on main: JS one-write control messages (m0), recheck red5 runner 1, relays 5 red5 WT connect timeouts
Ours, owned elsewhere: JS FETCH (quest), JS data headers (#6504) runner 5, relays 9 js-web publisher cells, imquic/MOQtail data
Ours, owned: IETF lazy discovery (quest) relays 1 moxygen draft-14 over QUIC, still red from main
Ours, open: WebTransport draft 15 (moq-go) runner 1 needs SETTINGS_WT_ENABLED and :protocol webtransport-h3; see follow-ups
Ours?, not traced: JS data never ends via libquicr runner 1 moq-dev-rs passes the same case
Theirs, reported runner 8, relays 10 moxygen#225 (6), moqtail#450, aiomoqt#123, moxygen#252, moq-rs#281/#282
Theirs, fixed upstream: imquic#42, image rebuild pending runner 2
Theirs, drafted (awaiting approval) runner 7 Cloudflare d16 END_OF_TRACK as Normal, MOQtail d18 no NAMESPACE, moq-go port and IPv6
Theirs, not reported runner 6 red5 prefix subscribe, moqlivemock routing, libquicr subscribe-error, xquic WT
Unsupported runner 19, relays 7 PUBLISH / SUBSCRIBE_TRACKS, no namespace discovery (Cloudflare d14, xquic-d18), raw-QUIC-only clients
Down runner 7, relays 6 quiche-moq, xquic docker relay on loopback

The per-cell detail and what to check first are in the successor, quest/m2/audit-interop.md.

Quests

  • Moves the audit to the end of m2 Required, behind the release cut, with this run's baselines.
  • Runner client bump learns the cut's API port and that its dynamic data-subgroup-basic answer hits the accepted cold-start reset until announce takeover lands.

Public API and wire impact

  • Public API: none. DEFAULT_PUBLISHER_WIRE is crate-private in Rust and module-internal in JS.
  • Wire: a moq-transport track whose publisher omits DEFAULT_PUBLISHER_PRIORITY (and every draft-14/15 track) now has model priority -1 instead of 0, so a relay forwards it at IETF 128 instead of 127 and ranks it one step below an unset local track.
  • Docs: doc/concept/standard.md states the new reading.

Decisions needed

  1. Read an omitted publisher priority as 128 (the fix(net) commit). feat!: signed track priorities with a publisher tiebreak #6142 documented "an absent IETF priority is 0" for both priorities; the drafts define an omitted publisher priority as 128, and reading it as 0 rewrites a forwarded track's priority.
    • (a) keep the commit (recommended): publisher priority follows the drafts, subscriber priority keeps feat!: signed track priorities with a publisher tiebreak #6142's mapping.
    • (b) also read an absent subscriber priority as 128, which the drafts define the same way.
    • (c) drop the commit and treat the 127 as by design.
  2. Rust half of #6518. #6503 keeps the backport JS-only because released Rust passes against Cloudflare d18 and aiomoqt. Released Rust still fails subscribe-namespace-lifecycle against quic-zig and moxygen (it times out on the NAMESPACE, not NAMESPACE_DONE), and a client built on main passes. Recommendation: no Rust backport for this; the runner client bump after the cut fixes it.

Upstream (not posted)

This run had no approval to post outside moq-dev and kixelated. Drafted for the maintainer: a runner PR bumping the moq-dev clients to moq-tokio 0.19.29 and @moq/net 0.4.5 (plus an imquic image rebuild request), and issues for cloudflare/moq-rs (draft-16 relay turns END_OF_TRACK into a Normal object), moqtail (draft-18 forwards no NAMESPACE), floatdrop/moq-go (no default port, IPv6-only dial), and openmoq/moqxr (publish an interop image).

Checks

  • just check on f7c08f3fe (after merging main): passes (rs 8347 + 518 + 226 tests, js, quest).
  • bun test src/ietf in js/net: 807 pass.
  • Live: third-party runner images (moq-go, Cloudflare d14/d18, xquic, moxygen) against a main moq-relay; the runner's Rust and JS clients ported to main against quic-zig, xquic-d18, Cloudflare d16/d18, moxygen, and MOQtail; just relays rust→rust from main against six relays.
  • just test interop --all on f7c08f3fe: all 172 checks pass.

Follow-ups

  • WebTransport draft 15 in web-transport-proto (moq-dev/web-transport): accept :protocol webtransport-h3 and send SETTINGS_WT_ENABLED, then bump here, so webtransport-go clients (moq-go) connect.
  • Trace moq-dev-js data-subgroup-basic against libquicr.

🤖 Generated with Claude Code

https://claude.ai/code/session_01EeyiEy5FWz3z44DYZVo7vU

(Written by Claude Opus 5.5)

kixelated and others added 5 commits October 23, 2026 02:46
Quest-Claim: f0154ca91fd3341a
Drafts 16 on define an omitted DEFAULT_PUBLISHER_PRIORITY as 128. Since
#6142 the IETF subscriber read it as the unset 0, so a relay forwarded every
such track at 127: Cloudflare's draft-18 moq-test client fails its
data-subgroup-basic case through moq-relay on main with "carried priority
127, expected 128". Rust and JS now read the omission as 128; an absent
subscriber priority still reads as 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EeyiEy5FWz3z44DYZVo7vU
The successor records what the m1 run classified: most red cells are fixed
on main and wait for the cut, the rest are reported upstream, unsupported,
or down. The runner client bump learns the cut's API port and the
cold-start reset its data case will hit through moq-relay.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EeyiEy5FWz3z44DYZVo7vU
Released Rust times out on the NAMESPACE itself, not on NAMESPACE_DONE, and
xquic-draft-18 offers no namespace discovery at all.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EeyiEy5FWz3z44DYZVo7vU
@kixelated kixelated changed the title Interop audit fix: m1 interop audit Oct 23, 2026
@kixelated

Copy link
Copy Markdown
Collaborator Author

Outcome of the m1 audit run: one new bug was ours and is fixed here (omitted DEFAULT_PUBLISHER_PRIORITY forwarded as 127). Most other red cells are already fixed on main and wait for the cut. The remainder are reported upstream, drafted for approval, unsupported, or down. The m2 successor quest records the baselines. This stays a draft for the two decisions in the body. just check and just test interop --all (172 checks) pass.

(Written by Claude Opus 5.5)

This branch has not been deployed

No deployments
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