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 964bfdbd7ae..e444fe54a90 100644 --- a/quest/m0/interop-green/README.md +++ b/quest/m0/interop-green/README.md @@ -6,6 +6,14 @@ 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 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. + ## Plan Decided 2026-10-27 (maintainer), from an external release-to-main audit @@ -22,9 +30,38 @@ 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 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); 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), +[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 + `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. +- 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 against moq-cli 0.14.12 and + moq-relay 0.17.12 with `just test wire-compat --remeasure`. -This README's own work, after the children: confirm a scheduled Interop -and Video run each pass. +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/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) } }, 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); 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" } }