Skip to content

chore(quest): finish swapped-js-opus, fixed by #6820 - #6989

Merged
kixelated merged 3 commits into
mainfrom
quest/m0/test-flakes-2/swapped-js-opus
Oct 29, 2026
Merged

kixelated merged 3 commits into
mainfrom
quest/m0/test-flakes-2/swapped-js-opus

Conversation

@kixelated

@kixelated kixelated commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Finishes quest/m0/test-flakes-2/swapped-js-opus.md. The cause was already fixed by moq-dev/moq#6820, so this PR only deletes the quest, removes its link, and records the fix in the epic README.

Root cause

All four retained browser audio failures in /tmp/moq-test-* (three rust-swapped -> js, one rust -> js, 2026-10-24 to 2026-10-26) show the same sequence:

  1. The page subscribes to catalog.json on a moq-lite-06 session. While the Rust CLI republishes its catalog in the first seconds, it receives the catalog several times.
  2. The relay supersedes a catalog group the browser is still reading and sends SUBSCRIBE_DROP for it.
  3. Before fix(net): a lite-05/06 SUBSCRIBE_DROP ends its readers with Old #6820, a lite-05/06 drop ended the reader with StreamError(NotFound, "dropped"). @moq/json's snapshot Consumer resyncs only on gap codes (Old, Evicted, TooFarBehind, GroupTooLarge), so it rethrew. The page logged catalog subscription ended ... Stream: dropped.
  4. js/watch cleared the catalog, set status to offline, and closed its media subscriptions, even though the broadcast was still announced (broadcastActive:true). With no audio config, the decoder's idle path suspended its AudioContext.
  5. The driver saw audioContext:"suspended" and no codec. That is a plain audio failure, not the wrong tone the swapped control needs, so the cell ran out its timeout.

The suspended AudioContext reported in moq-dev/moq#6745 is therefore a symptom, not the cause. #6820 (merged 2026-10-26 19:59 UTC) reads a lite-05/06 drop as Old, which the consumer skips past. Every retained failure predates that merge, and the "dropped" message can no longer be produced. lite-07 was never affected: its drop carries the group's own code, which is Old for a superseded group.

Existing tests already cover the whole chain, so this PR adds none: js/net/src/lite/tail.test.ts and the Rust a_subscribe_drop_ends_an_arriving_group_with_its_code check that a lite-06 drop reads as Old and the track continues, and js/json/src/snapshot/snapshot.test.ts checks that Old resyncs to the next snapshot.

Verification (current main, fbeac8a9fd)

  • just test interop --publishers rust --subscribers js --timeout 30: 5 runs, all pass, at load averages of 30 to 150 on 24 cores.
  • just test interop --all: 2 runs, all checks pass both times (rust-swapped -> js took 13 s and 12 s).
  • Retained runs after fix(net): a lite-05/06 SUBSCRIBE_DROP ends its readers with Old #6820 merged show only the expected outcomes: wrong tone on both renditions, and timeouts in the denied cells.
  • just check, quest check, and quest check --base origin/main pass.

Choices made without asking

  • Finished the quest instead of adding a test or a guard: the fix and its tests are already on main.
  • Left the player's behavior alone: when a catalog request fails, it stays offline until the announcement changes. The repository rule says a request error is never the restart trigger.

Impact

Public API: none. Wire: none.

Suggested follow-ups

None. The test-flakes-2 epic README still owns the final step: run just check --all several times on a loaded machine.

🤖 Generated with Claude Code

(Written by Claude Opus 5.5)

kixelated and others added 2 commits October 27, 2026 18:49
The rust-swapped -> js and rust -> js browser audio timeouts were a lite-06
SUBSCRIBE_DROP of a catalog group mid-read ending the reader with
NotFound("dropped"), which the JSON snapshot consumer rethrew, so the player
went offline while the broadcast stayed announced. #6820 reads that drop as
OLD, which the consumer resyncs past.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated kixelated changed the title Swapped Rust publisher to JS Opus in interop chore(quest): finish swapped-js-opus, fixed by #6820 Oct 28, 2026
@kixelated
kixelated marked this pull request as ready for review October 28, 2026 02:50
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-29T05:47:24.594367Z 1f4df79 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

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 11 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: ab04ac97-dd83-457e-8d94-85fb01db629e
Commits

Reviewing files that changed from the base of the PR and between 059c41b and 1f4df79.

Files selected for processing: 2
  • quest/m0/test-flakes-2/README.md
  • quest/m0/test-flakes-2/swapped-js-opus.md

No actionable comments were generated in the recent review.

Recent review info
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: c4b0a4c2-fa10-458c-9475-3de8736ede8c
Commits

Reviewing files that changed from the base of the PR and between fbeac8a and 059c41b.

Files selected for processing: 2
  • quest/m0/test-flakes-2/README.md
  • quest/m0/test-flakes-2/swapped-js-opus.md
Files with no reviewable changes: 1
  • quest/m0/test-flakes-2/swapped-js-opus.md

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 0 remain after this review.

Walkthrough

The README attributes the Rust-to-JS browser audio timeouts to a lite-06 catalog group being dropped mid-read and links PR #6820. It removes the swapped Rust-to-JS Opus test from the Required list. The investigation note for that test is deleted.

Priority: Low

Merge Risk: Minimal · previous review 059c4

No actionable merge-blocking risk is identified in this documentation-only change.

Pre-merge checks: Passed 5
Check name Status Explanation
Title check Passed The title clearly identifies the completed quest and the fix that resolved it.
Description check Passed The description directly explains the quest removal, root cause, related fix, verification, and impact.
Docstring Coverage Passed No eligible functions found in the changed files. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentat…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

No eligible functions found in the changed files. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 0 functions across 0 files. (1 skipped: 1 unsupported.)

Finishing Touches
✨ Simplify code
  • Commit to this branch
  • Create a new PR
  • 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

Comment @coderabbitai help to get the list of available commands.

@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: 059c41b

No actionable bugs found. Retiring this child quest and recording #6820 in the epic is a sensible, minimal change: the linked fix is merged, and this head retains the lite-05/06 Old mapping plus tests for continued group delivery and snapshot resynchronization. The epic still owns the broader loaded-machine validation; no additional player retry or timeout change is needed for this retirement.

Verification: GitHub-only inspection of the complete diff, epic, linked fix, and relevant current code/tests. I did not run tests or independently reproduce the reported browser/load runs or inspect their local logs.

@kixelated

Copy link
Copy Markdown
Collaborator Author

Merge summary:

  • Merged main into the branch (1f4df79) to clear the conflict. Git auto-merged quest/m0/test-flakes-2/README.md with no hand resolution, so the PR diff is unchanged: it deletes swapped-js-opus.md, removes its Required link, and records the fix by moq-dev/moq#6820 in the epic README.
  • Reviews: the automated review of 059c41b found nothing actionable, and Codex gave a thumbs-up on the merged head. CI passes, and quest check --base origin/main passes.
  • No decisions were open, and no follow-ups were added.

(Written by Claude Opus 5.5)

@kixelated
kixelated added this pull request to the merge queue Oct 29, 2026
Merged via the queue into main with commit acac389 Oct 29, 2026
11 checks passed
@kixelated
kixelated deleted the quest/m0/test-flakes-2/swapped-js-opus branch October 29, 2026 10:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant