Skip to content

moq-audio's strip pan is pinned - #104

Open
kixelated wants to merge 5 commits into
mainfrom
quest/m0/pin-audio-pan
Open

kixelated wants to merge 5 commits into
mainfrom
quest/m0/pin-audio-pan

Conversation

@kixelated

@kixelated kixelated commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

Bumps the moq submodule to moq main 079a6460f, which includes moq-dev/moq#8180 (the bus strip pan). Fixes what the newer moq API breaks here. Deletes quest/m0/pin-audio-pan.md and its links with quest rm.

API changes

  • encode::Config::gop is gone; the interval a catalog declares is Config::effective_join() (moq-dev/moq#8121). Updated the reserve calls in rs/moq-scene (publish.rs, source.rs) and rs/moq-studio (engine.rs, replay.rs).
  • track::Producer::drop_groups is now test-only. rs/moq-scene/src/replay.rs calls skip_groups in the gap copy and in the test helper. Behavior differs: a skip is final and ends no reader, where a drop ended readers with its error. The replay tests pass.
  • hang::Catalog::media() is without_ext() (rs/moq-studio/src/record.rs).
  • js/join: Watch.Player's probe input is viewer: { viewers }. The player claims the connection's receive estimate and selects video from that grant, so the guest's half-size rendition now follows the claim, not the probe. The join page change is settled under Decisions.

Other pins

I checked the other studio pins against moq main. None is satisfied: each names an upstream quest file that still exists there (quest/m3/audio-strip-tap.md, quest/m3/capture-linux.md, quest/m5/audio-filters.md, quest/m5/audio-encode-audiotoolbox.md, quest/m5/audio-encode-mediafoundation.md, quest/m5/audio-web.md, quest/m5/video-web.md). So pin-aac-encode, pin-audio-filters, pin-audio-tap, pin-browser-audio, pin-browser-video, and pin-portal-token stay.

quest/m0/audio-pan.md is now unblocked: its Required link is gone. Its Plan linked the moq quest file that moq deleted; it now links moq-dev/moq#8180.

Checks

  • just check: passes (quest gate).
  • just test --no-fail-fast on this head: 275 of 276 pass. The one failure is the flaky test below, and it is the only failure in the run.

Flaky test, not from this bump

publish::tests::a_media_file_is_published_on_one_timeline fails intermittently. The stamps contain a duplicate (10550ms twice), and the strictly-increasing assertion at rs/moq-scene/src/publish.rs fails. It fails on the pre-bump commit cd9641b too: 4 of 8 isolated runs. On this branch it failed 3 of 6 isolated runs. I did not fix it here.

Decisions

Settled by the maintainer on 2026-11-07.

  • Flaky publish::tests::a_media_file_is_published_on_one_timeline: ✅ handled by quest/m0/media-replay-timestamps.md, planned in moq-dev/studio#106 (rejected: fix it in this PR). It fails the same way on main before the bump, so it is recorded as pre-existing in the validation above and is not fixed here. Rates: 4 of 8 isolated runs on pre-bump cd9641b; 3 of 6 isolated runs on this branch.
  • Join page probe → viewer: { viewers: connection.viewers }: ✅ no live join run needed (rejected: a throttled guest run first). moq's Watch.Player docs (moq/js/watch/src/player.ts) say video selects from the claim's grant, the one-to-one replacement for probe.

Choices made without asking

  • effective_join() rather than the raw join field: it rounds to whole frames, the value a catalog declares, which matches the old GOP-duration behavior.
  • skip_groups rather than drop_groups at both sites: the producer knows those sequences will never arrive, and nothing should end a reader for them.
  • The join page passes viewer: { viewers: connection.viewers } without max, so the rendition follows the catalog.

Models

Size: XS
Implementer: Claude Code, claude-haiku-5-5, high effort

🤖 Generated with Claude Code

(Written by Haiku 5.5)

Review

Rewritten by quest review after each round.

  • Reviewer: Codex, gpt-6.1-sol, low effort
  • Session: 01a1b99e-f87f-75f2-865f-196c0368b3a8, round 1
  • Head: 64cb706
  • Base: origin/main at f0c6a81
  • Score: 9/10, Source review found no actionable defects and the call-site changes match the updated upstream APIs, but builds and tests were not run because review instructions prohibited them.
  • Findings: none

Quest-Claim: 83cd7a82760cec0e
@pullfrog

pullfrog Bot commented Nov 8, 2026

Copy link
Copy Markdown

Pullfrog  | Review this ➔

kixelated and others added 3 commits November 7, 2026 21:01
Advance the moq submodule to moq main (`just upgrade-moq`), which
includes the strip pan (moq-dev/moq#8180) that this quest pinned.

The newer moq API renames or removes three things the studio used:

- `encode::Config::gop` is `join`, read through `effective_join()`,
  which is the interval the catalog declares.
- `track::Producer::drop_groups` is test-only; a publisher that will
  never produce a group calls `skip_groups`, which readers move past
  without ending.
- `hang::Catalog::media()` is `without_ext()`.

Closes the quest/m0/pin-audio-pan.md quest.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
moq's Watch.Player replaced its `probe` input with `viewer.viewers`:
the player claims the connection's receive estimate and selects video
from that grant, so the join page's half-size guest rendition follows
from the claim. Also rustfmt the renamed calls.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
The upstream quest file it linked was deleted when moq-dev/moq#8180
landed, so the link now 404s. The PR is where the pan was settled.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
@kixelated
kixelated marked this pull request as ready for review November 8, 2026 05:26
@coderabbitai

coderabbitai Bot commented Nov 8, 2026 •

Copy link
Copy Markdown

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 26 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review 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: 0c4f2026-f397-4614-a4a3-d20d76dc2094
Commits

Reviewing files that changed from the base of the PR and between f0c6a81 and 06f0e01.

Files ignored due to path filters: 1

  • Cargo.lock is excluded by !**/*.lock
Files selected for processing: 11

  • js/join/src/index.ts
  • moq
  • quest/m0/README.md
  • quest/m0/audio-pan.md
  • quest/m0/pin-audio-pan.md
  • rs/moq-scene/src/publish.rs
  • rs/moq-scene/src/replay.rs
  • rs/moq-scene/src/source.rs
  • rs/moq-studio/src/engine.rs
  • rs/moq-studio/src/record.rs
  • rs/moq-studio/src/replay.rs
  • 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

@kixelated
kixelated enabled auto-merge (squash) November 8, 2026 05:31

@kixelated kixelated left a comment

Copy link
Copy Markdown
Contributor 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: 64cb706

No actionable defects found in the studio changes.

Checked the changed Rust and join-page call sites against the pinned upstream implementations:

  • effective_join() declares the cadence of the same configuration used to create the encoder, including fractional-frame-rate rounding.
  • Replay skip_groups() marks only sequences omitted from the completed copy. Existing partial groups and their read errors are still copied separately.
  • without_ext() preserves the same media fields as the former media() method, so the recording selection retains its inputs.
  • The guest player receives the connection's live viewers getter, derives its ceiling from the catalog, and releases its claim on close.
  • The new moq pin is an ancestor of upstream main and contains Strip::set_pan; the completed pin quest and its dependency links are removed consistently.

Direction: no code revisions requested from this review. The reported media-replay timestamp flake remains tracked separately by #106.

Verification limits: GitHub-only static review. I did not run quest context, builds, tests, or a live/hardware join session. The broader upstream commit range was not exhaustively re-reviewed. GitHub Check was still in progress when inspected. The PR reports 275/276 tests passing with one pre-existing timestamp failure; I have not independently reproduced that failure or established a passing CI result.

This branch has not been deployed

No deployments
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