From 510c408533006d72c6980d17e9d6c1efa9679b80 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Mon, 2 Nov 2026 22:04:46 -0800 Subject: [PATCH 1/5] chore(quest): claim quest/m0/interop-green/README.md Quest-Claim: 0d512307d21556c7 From 30365b3c77376854f0772a5084dc00e5a4bbf6d1 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Mon, 2 Nov 2026 22:13:16 -0800 Subject: [PATCH 2/5] fix(test): stub the video config the buffering indicator reads; give Interop 90 minutes Co-Authored-By: Claude Opus 5.5 --- .github/workflows/interop.yml | 3 ++- quest/m0/interop-green/README.md | 29 ++++++++++++++++++++--- test/interop/clients/js/buffering/main.ts | 2 +- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/.github/workflows/interop.yml b/.github/workflows/interop.yml index bab87aa8c5b..7d73231344b 100644 --- a/.github/workflows/interop.yml +++ b/.github/workflows/interop.yml @@ -31,7 +31,8 @@ jobs: environment: ${{ github.ref == 'refs/heads/main' && 'cache-write' || '' }} # The matrix runs in real time (ffmpeg -re pacing + per-subscriber timeouts); # this is a safety net against a hung relay/client plus a cold first build. - timeout-minutes: 60 + # A full run takes 40 to 60 minutes, so 60 cancelled a run that never hung. + timeout-minutes: 90 outputs: report: ${{ steps.report.outcome }} diff --git a/quest/m0/interop-green/README.md b/quest/m0/interop-green/README.md index fdedf1c7ae7..5f0886fd298 100644 --- a/quest/m0/interop-green/README.md +++ b/quest/m0/interop-green/README.md @@ -6,6 +6,13 @@ The scheduled Interop and Video workflows pass on `main`, so a red run means a new break. Interop has failed every scheduled run since 2026-10-22, and Video fails on a stale expectation. +## Waiting + +- moq-dev/moq: a scheduled Interop run on `main` passes, once the stalling + fixture fix and 90-minute job budget have landed. Check with + `gh run list --repo moq-dev/moq --workflow interop.yml --event schedule`. + Triage any red run, then delete this quest once one passes. + ## Plan Decided 2026-10-27 (maintainer), from an external release-to-main audit @@ -22,9 +29,25 @@ port-reservation lines are negative self-tests in Already owned: the intermittent media-matrix timestamp-gap cells (`cpp -> js-native-node`, `go -> c`, browser `rust -> js` timeouts) belong to [test flakes](/quest/m0/test-flakes-2/README.md), with -[moq-dev/moq#6990](https://github.com/moq-dev/moq/pull/6990) open. +[moq-dev/moq#6990](https://github.com/moq-dev/moq/pull/6990) open. So does +the fallback audio stall, which +[run 41495461904](https://github.com/moq-dev/moq/actions/runs/41495461904) +hit on `moq-lite-07-wip`; see +[the IETF22 fallback quest](/quest/m0/test-flakes-2/ietf22-fallback.md). + +Every child has landed. Video passed its scheduled +[run 41497602703](https://github.com/moq-dev/moq/actions/runs/41497602703). +Interop runs +[41317901057](https://github.com/moq-dev/moq/actions/runs/41317901057) and +[41495461904](https://github.com/moq-dev/moq/actions/runs/41495461904) +showed two more causes, fixed in this quest's own PR: -Every child has landed. What remains: confirm a scheduled Interop -and Video run each pass. +- The paused-stall browser tests time out because the stubbed watch in + `test/interop/clients/js/buffering/main.ts` lacks + `video.source.out.config`, which the buffering indicator reads since + [moq-dev/moq#7155](https://github.com/moq-dev/moq/pull/7155). Its effect + throws, so the spinner never hides. +- The Interop job took 39 to 60 minutes on recent runs, and the 60-minute + `timeout-minutes` cancelled 41495461904 during its last test step. Public API: none. Wire: none. diff --git a/test/interop/clients/js/buffering/main.ts b/test/interop/clients/js/buffering/main.ts index e7fdc4c8aed..9f544633bdc 100644 --- a/test/interop/clients/js/buffering/main.ts +++ b/test/interop/clients/js/buffering/main.ts @@ -21,7 +21,7 @@ const watch = { out: { stalled: new Signal(!video) }, }, video: { - source: { out: { error: new Signal(undefined) } }, + source: { out: { config: new Signal(undefined), error: new Signal(undefined) } }, out: { stalled: new Signal(video) }, }, broadcast: { out: { status: new Signal("live"), error: new Signal(undefined) } }, From af083e4b63e590fc770b5bbe020edd79e42224c3 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Tue, 3 Nov 2026 13:27:15 -0800 Subject: [PATCH 3/5] fix(test): stub the open-GOP fixture's broadcast name The video decoder reads broadcast.in.name for its stats key since #7222. The open-GOP fixture's stubbed broadcast lacked it, so the decoder effect threw and the recovery test timed out at 60 seconds. Record this and the stale wire-compat planned break in the quest. Co-Authored-By: Claude Opus 5.5 --- quest/m0/interop-green/README.md | 28 ++++++++++++++++++------ test/interop/clients/js/open-gop/main.ts | 1 + 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/quest/m0/interop-green/README.md b/quest/m0/interop-green/README.md index 5f0886fd298..74aa8f3defd 100644 --- a/quest/m0/interop-green/README.md +++ b/quest/m0/interop-green/README.md @@ -8,8 +8,9 @@ means a new break. Interop has failed every scheduled run since ## Waiting -- moq-dev/moq: a scheduled Interop run on `main` passes, once the stalling - fixture fix and 90-minute job budget have landed. Check with +- moq-dev/moq: a scheduled Interop run on `main` passes, once this quest's + fixture fixes, wire-compat remeasure, and 90-minute job budget have + landed. Check with `gh run list --repo moq-dev/moq --workflow interop.yml --event schedule`. Triage any red run, then delete this quest once one passes. @@ -30,17 +31,19 @@ Already owned: the intermittent media-matrix timestamp-gap cells (`cpp -> js-native-node`, `go -> c`, browser `rust -> js` timeouts) belong to [test flakes](/quest/m0/test-flakes-2/README.md), with [moq-dev/moq#6990](https://github.com/moq-dev/moq/pull/6990) open. So does -the fallback audio stall, which -[run 41495461904](https://github.com/moq-dev/moq/actions/runs/41495461904) +the fallback audio stall, which runs +[41495461904](https://github.com/moq-dev/moq/actions/runs/41495461904) and +[41668668824](https://github.com/moq-dev/moq/actions/runs/41668668824) hit on `moq-lite-07-wip`; see [the IETF22 fallback quest](/quest/m0/test-flakes-2/ietf22-fallback.md). Every child has landed. Video passed its scheduled [run 41497602703](https://github.com/moq-dev/moq/actions/runs/41497602703). Interop runs -[41317901057](https://github.com/moq-dev/moq/actions/runs/41317901057) and -[41495461904](https://github.com/moq-dev/moq/actions/runs/41495461904) -showed two more causes, fixed in this quest's own PR: +[41317901057](https://github.com/moq-dev/moq/actions/runs/41317901057), +[41495461904](https://github.com/moq-dev/moq/actions/runs/41495461904), and +[41668668824](https://github.com/moq-dev/moq/actions/runs/41668668824) +showed more causes, fixed in this quest's own PR: - The paused-stall browser tests time out because the stubbed watch in `test/interop/clients/js/buffering/main.ts` lacks @@ -49,5 +52,16 @@ showed two more causes, fixed in this quest's own PR: throws, so the spinner never hides. - The Interop job took 39 to 60 minutes on recent runs, and the 60-minute `timeout-minutes` cancelled 41495461904 during its last test step. +- The open-GOP recovery browser test times out because the stubbed + broadcast in `test/interop/clients/js/open-gop/main.ts` lacks `in.name`, + which the video decoder reads for its stats key since + [moq-dev/moq#7222](https://github.com/moq-dev/moq/pull/7222). +- Wire-compat fails on a stale planned break: the `moq-lite-07-wip` entry + in `test/interop/compat/planned-breaks.json` pins moq-cli 0.14.10, and + 0.14.11 has been released. Remeasured with + `just test wire-compat --remeasure`. + +The P2P data-channel test timed out once, in 41668668824, and passes +locally; triage it if it recurs. Public API: none. Wire: none. diff --git a/test/interop/clients/js/open-gop/main.ts b/test/interop/clients/js/open-gop/main.ts index 76e0c805618..de9f7d28240 100644 --- a/test/interop/clients/js/open-gop/main.ts +++ b/test/interop/clients/js/open-gop/main.ts @@ -86,6 +86,7 @@ window.runRecovery = async (packets) => { }); const catalog = new Signal({ video: { renditions: { video: config } } }); const broadcast = new Signal({ + in: { name: new Signal(Moq.Path.from("open-gop")) }, out: { catalog, active: new Signal(media) }, relativeBroadcast: () => media, } as unknown as Broadcast); From 921d7c9b1b49302c7804d909b7c2b77fe2c6f912 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Tue, 3 Nov 2026 13:31:15 -0800 Subject: [PATCH 4/5] test(compat): remeasure the lite-07-wip planned break moq-cli 0.14.11 and later releases made the planned break stale, failing scheduled wire-compat. `just test wire-compat --remeasure` against moq-cli 0.14.12 and moq-relay 0.17.12 gives the same result: all 16 cross-version lite-07-wip cells fail, its FETCH capability check and lite-01 through lite-06 pass. Co-Authored-By: Claude Opus 5.5 --- quest/m0/interop-green/README.md | 4 ++-- test/interop/compat/planned-breaks.json | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/quest/m0/interop-green/README.md b/quest/m0/interop-green/README.md index 74aa8f3defd..f8e4e27ee34 100644 --- a/quest/m0/interop-green/README.md +++ b/quest/m0/interop-green/README.md @@ -58,8 +58,8 @@ showed more causes, fixed in this quest's own PR: [moq-dev/moq#7222](https://github.com/moq-dev/moq/pull/7222). - Wire-compat fails on a stale planned break: the `moq-lite-07-wip` entry in `test/interop/compat/planned-breaks.json` pins moq-cli 0.14.10, and - 0.14.11 has been released. Remeasured with - `just test wire-compat --remeasure`. + 0.14.11 has been released. Remeasured against moq-cli 0.14.12 and + moq-relay 0.17.12 with `just test wire-compat --remeasure`. The P2P data-channel test timed out once, in 41668668824, and passes locally; triage it if it recurs. diff --git a/test/interop/compat/planned-breaks.json b/test/interop/compat/planned-breaks.json index afc48fc303f..41ee4ae524f 100644 --- a/test/interop/compat/planned-breaks.json +++ b/test/interop/compat/planned-breaks.json @@ -1,9 +1,9 @@ { "moq-lite-07-wip": { - "reason": "Re-accepted by the maintainer (2026-10-13): this draft is unpublished and its wire is still changing. Remeasured 2026-10-30 against these releases, with the media lanes checking the audio tone: all 16 cross-version lite-07-wip media, publication, and FETCH cells fail, while its FETCH capability check and the stable lite-01 through lite-06 cells pass, including the Opus phase check now that moq-cli 0.14.10 keeps the Opus edit list. Current and released lite-07-wip framing differs (long buffer, invalid value, protocol violation). Reassess when any affected release changes.", + "reason": "Re-accepted by the maintainer (2026-10-13): this draft is unpublished and its wire is still changing. Remeasured 2026-11-03 against these releases, with the media lanes checking the audio tone: all 16 cross-version lite-07-wip media, publication, and FETCH cells fail, while its FETCH capability check and the stable lite-01 through lite-06 cells pass, including the Opus phase check (moq-cli keeps the Opus edit list since 0.14.10). Current and released lite-07-wip framing differs (long buffer, invalid value, protocol violation). Reassess when any affected release changes.", "releases": { - "moq-cli": "0.14.10", - "moq-relay": "0.17.10", + "moq-cli": "0.14.12", + "moq-relay": "0.17.12", "@moq/net": "0.4.7" } } From b0845f3102bca6f6eb79cd602e4901a99ce4ef6c Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Tue, 3 Nov 2026 13:51:44 -0800 Subject: [PATCH 5/5] quest(interop-green): fix the fallback-stall sentence Co-Authored-By: Claude Opus 5.5 --- quest/m0/interop-green/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/quest/m0/interop-green/README.md b/quest/m0/interop-green/README.md index f8e4e27ee34..e444fe54a90 100644 --- a/quest/m0/interop-green/README.md +++ b/quest/m0/interop-green/README.md @@ -31,10 +31,10 @@ Already owned: the intermittent media-matrix timestamp-gap cells (`cpp -> js-native-node`, `go -> c`, browser `rust -> js` timeouts) belong to [test flakes](/quest/m0/test-flakes-2/README.md), with [moq-dev/moq#6990](https://github.com/moq-dev/moq/pull/6990) open. So does -the fallback audio stall, which runs +the fallback audio stall, which hit on +`moq-lite-07-wip` in [41495461904](https://github.com/moq-dev/moq/actions/runs/41495461904) and -[41668668824](https://github.com/moq-dev/moq/actions/runs/41668668824) -hit on `moq-lite-07-wip`; see +[41668668824](https://github.com/moq-dev/moq/actions/runs/41668668824); see [the IETF22 fallback quest](/quest/m0/test-flakes-2/ietf22-fallback.md). Every child has landed. Video passed its scheduled