Skip to content

fix(test): repair interop fixtures and wire-compat pin; give Interop 90 minutes - #7672

Merged
kixelated merged 6 commits into
mainfrom
quest/m0/interop-green/README
Nov 3, 2026
Merged

kixelated merged 6 commits into
mainfrom
quest/m0/interop-green/README

Conversation

@kixelated

@kixelated kixelated commented Nov 3, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

/quest/m0/interop-green/README.md had one step left: confirm that a scheduled Interop run and a scheduled Video run each pass. Video passed (run 41497602703). Interop still failed:

  • Run 41317901057 (2026-11-01): the browser version-list tests failed. moq-dev/moq#7060 already fixed them on main. The two the paused play button stays clickable during audio/video stalling tests also failed.
  • Run 41495461904 (2026-11-02): the same two stalling tests failed again. The moq-lite-07-wip fallback audio stall failed too. Then the job hit timeout-minutes: 60 and was cancelled during its last test step.
  • Run 41668668824 (2026-11-03): the stalling tests again, plus three new failures: the open-GOP recovery browser test, wire-compat, and the P2P data-channel test. The lite-07 fallback stall recurred in the media lane.

Causes:

  • Stalling tests. The hand-stubbed watch in test/interop/clients/js/buffering/main.ts has no video.source.out.config. moq-dev/moq#7155 made bufferingIndicator read that field. The indicator's effect throws (effect error TypeError: Cannot read properties of undefined (reading 'peek')) before it sets display, so the spinner never hides after pause.
  • Open-GOP test. Same class of bug: the stubbed broadcast in test/interop/clients/js/open-gop/main.ts has no in.name. Since moq-dev/moq#7222, the video decoder reads it for its stats key. The decoder effect throws (reading 'name'), so the test times out at 60 seconds.
  • Wire-compat. The moq-lite-07-wip planned break in test/interop/compat/planned-breaks.json pins moq-cli 0.14.10 and moq-relay 0.17.10. The 0.14.11 release made it stale: error: stale planned break: moq-lite-07-wip, moq-cli changed from 0.14.10 to 0.14.11; run just test wire-compat --remeasure.

Changes

  • Add config: new Signal(undefined) to the buffering fixture's stubbed video.source.out.
  • Add in: { name: new Signal(Moq.Path.from("open-gop")) } to the open-GOP fixture's stubbed broadcast.
  • Remeasure the lite-07-wip planned break with just test wire-compat --remeasure. That run re-pinned it to moq-cli 0.14.12 and moq-relay 0.17.12; @moq/net is unchanged. The result matches the 2026-10-30 measurement: all 16 cross-version lite-07-wip cells fail, while its FETCH capability check and every lite-01 through lite-06 cell pass. I updated the reason's date to match.
  • Raise the Interop job's timeout-minutes from 60 to 90. Recent scheduled jobs took 41, 39, 41, 45, 56, 56, 48, and 60 minutes. The limit is meant to catch hangs, but here it cancelled a run that wasn't hung.
  • Rewrite the quest to what remains: a ## Waiting item for one passing scheduled Interop run after this lands, plus a record of the causes this PR fixes.

Choices made without asking

  • 90-minute timeout. It changes no API or scope, and 90 still catches a hung relay or client. Splitting the job into parallel jobs is a separate follow-up that is already recorded.
  • Open-GOP and wire-compat fixed here. Both block this quest's goal (a scheduled Interop pass). The open-GOP fix is one line of the same kind as the buffering fix. The remeasure is the mechanical update that compat.sh prints and performs itself, and its result matches the maintainer-accepted planned break. (Draft moq-dev/moq#7716 listed the open-GOP stub as a follow-up and carries the same buffering line as this PR, so the two merge cleanly in either order.)
  • P2P left alone. two peer connections complete MoQ SETUP and transfer a frame without a relay timed out in only one scheduled run (41668668824). It passed locally (just test p2p: 1 pass in 2.5 s). The quest says to triage it if it recurs.
  • Lite-07 fallback audio stall left alone. The quest already assigns intermittent media flakes to test flakes. This failure (live incumbent fallback plays, audioStalled: true) matches the symptom recorded in quest/m0/test-flakes-2/ietf22-fallback.md, so the quest links both runs there as evidence.
  • Quest kept. Its Goal (a scheduled Interop pass) can only be checked after merge, so the quest stays, waiting on that run.
  • No overlap with moq-dev/moq#7715. That PR changes interop.sh, compat.sh, harness.sh, and test/README.md. This PR changes none of them, and planned-breaks.json still pins the same keys that compat.sh reads.

Validation

Run under nix develop on head 921d7c9b1b, after merging origin/main:

  • just test harness: before the open-GOP fix, 41 pass and 1 fail (open-GOP, reading 'name'). The buffering stalling tests pass. After the fix, bun test ./open-gop.browser.ts ./harness.browser.ts gives 7 pass, 0 fail.
  • just test wire-compat --remeasure: the run passes; its results are described under Changes. bun test test/interop/compat/claims.test.ts test/interop/compat/resolve.test.ts: 14 pass.
  • just gh check (actionlint, zizmor, alert coverage, check-runs, test inventory): passes.
  • biome check on the touched fixtures and JSON, and tsc --noEmit for the JS interop client: pass.
  • quest check --base origin/main passes.

Public API: none. Wire: none.

Review

  • Reviewer: Codex (quest review --base origin/main), gpt-6.1-sol, medium effort, round 1 of a new session on this head
  • Head: 921d7c9
  • Findings: none
  • Earlier online reviews on 30365b3 (Pullfrog, OpenAI review) reported no issues. CodeRabbit was rate-limited and posted no review.

Follow-ups

  • Split or parallelize the Interop job so that it no longer approaches a single job's time budget (already recorded).

🤖 Generated with Claude Code

(Written by Claude Opus 5.5)

kixelated and others added 2 commits November 2, 2026 22:04
…Interop 90 minutes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated kixelated changed the title Interop and Video pass on main fix(test): stub the buffering indicator's video config; give Interop 90 minutes Nov 3, 2026
@kixelated
kixelated marked this pull request as ready for review November 3, 2026 06:19
@coderabbitai

coderabbitai Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 6 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

Learn how review limits work.

Review configuration:

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 70607ddc-ea69-49a7-9ebb-04b08d4bd380
Commits

Reviewing files that changed from the base of the PR and between 0eff070 and b0845f3.

Files selected for processing: 5
  • .github/workflows/interop.yml
  • quest/m0/interop-green/README.md
  • test/interop/clients/js/buffering/main.ts
  • test/interop/clients/js/open-gop/main.ts
  • test/interop/compat/planned-breaks.json
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

CodeRabbit Verify

  • Run CodeRabbit Verify to test the changes in this pull request.

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ No new issues found.

Reviewed changes

  • Buffering fixture stub — test/interop/clients/js/buffering/main.ts adds config: new Signal(undefined) to video.source.out, matching the effect.get(watch.video.source.out.config) read that buffering-indicator.ts:23 has done since #7155. undefined resolves to video-enabled, so the stall/hide logic is unchanged and the effect no longer throws.
  • Interop job timeout — timeout-minutes 60 → 90 in .github/workflows/interop.yml for the job-level hang net; no caller cap in release-gate.yml, so the new value applies.
  • Quest rewrite — quest/m0/interop-green/README.md gains a ## Waiting item for the post-merge scheduled pass and records the two causes fixed here.

The stub is the only place a fake watch is fed to bufferingIndicator; center-play.test.ts and unsupported-indicator.test.ts stub only their own component and are unaffected. Verified by tracing bufferingIndicator against the fixture for both the audio and video stall cases.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏

@kixelated kixelated left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review by review (OpenAI)

Reviewed commit: 30365b3

No actionable bugs found. Supplying the missing signal fixes the fixture at its actual dependency; retaining a bounded timeout and a post-merge scheduled-run check is a reasonable direction.

Static GitHub review only; I did not run browser tests or the Interop workflow.

kixelated and others added 3 commits November 3, 2026 13:00
# Conflicts:
#	quest/m0/interop-green/README.md
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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
@kixelated kixelated changed the title fix(test): stub the buffering indicator's video config; give Interop 90 minutes fix(test): repair interop fixtures and wire-compat pin; give Interop 90 minutes Nov 3, 2026

@kixelated kixelated left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review by review (OpenAI)

Reviewed head 921d7c9 against base 0eff070.

I found no new actionable issue in the update. Adding the missing broadcast-name signal addresses the open-GOP fixture's new dependency, and the planned-break pin and reason are updated together. The quest retains the scheduled Interop pass as a post-merge condition rather than treating local checks as proof.

Static GitHub-only review; I did not run the browser fixtures, wire-compat remeasurement, or scheduled Interop workflow.

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ No critical issues — one wording fix inline.

Reviewed changes

Reviewed the delta since the prior Pullfrog review at 30365b3c7; both fixture repairs and the wire-compat refresh check out.

  • open-GOP fixture — added in.name so video/decoder.ts:303 can build its stats key instead of throwing reading 'name'; the stub now matches watchBroadcast in decoder.test.ts:39, and in.name is the only broadcast field the decoder reads that was missing.
  • Wire-compat remeasure — re-pinned moq-lite-07-wip to moq-cli 0.14.12 / moq-relay 0.17.12 and refreshed the reason's date. The registries confirm those are the current newest stable releases and @moq/net is still 0.4.7, so stale() will pass.
  • Quest rewrite — records the new causes, the ## Waiting post-merge check, and links both fallback-stall runs.

Pullfrog  | Fix all ➔ | Fix 👍s ➔ | View workflow run | Using deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏

Comment thread quest/m0/interop-green/README.md Resolved
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated
kixelated added this pull request to the merge queue Nov 3, 2026

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ No new issues found.

Reviewed changes

Reviewed the delta since the prior Pullfrog review at 921d7c9b1; the only change is documentation.

  • Quest README wording — quest/m0/interop-green/README.md now reads "the fallback audio stall, which hit on moq-lite-07-wip in [run] and [run]", applying the prior review's suggestion verbatim. The sentence is grammatical and the two linked runs are unchanged.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏

Merged via the queue into main with commit cfd2848 Nov 3, 2026
7 checks passed
@kixelated
kixelated deleted the quest/m0/interop-green/README branch November 3, 2026 22:36
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