Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/interop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}

Expand Down
43 changes: 40 additions & 3 deletions quest/m0/interop-green/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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.
2 changes: 1 addition & 1 deletion test/interop/clients/js/buffering/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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) } },
Expand Down
1 change: 1 addition & 0 deletions test/interop/clients/js/open-gop/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ window.runRecovery = async (packets) => {
});
const catalog = new Signal<Catalog.Root>({ video: { renditions: { video: config } } });
const broadcast = new Signal<Broadcast | undefined>({
in: { name: new Signal(Moq.Path.from("open-gop")) },
out: { catalog, active: new Signal(media) },
relativeBroadcast: () => media,
} as unknown as Broadcast);
Expand Down
6 changes: 3 additions & 3 deletions test/interop/compat/planned-breaks.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
Expand Down