Repository navigation
chore(moq): pin moq ffcb7cd for the presentation timeline - #35
Conversation
Quest-Claim: 091f690756bcfa20
Bump the moq gitlink to ffcb7cd, which carries moq-mux's shared presentation timeline, and port the studio to the API it breaks: with_hls_hint is with_interval, HLS records are gone, and the clock moved under the catalog's media section. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reachedYou'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 27 minutes. View limit details
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. |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed head: b2924c2
No actionable findings in the pin integration. The catalog-authored media tracks retain their 30-second default, replay copies explicitly retain history, and the source-listing media reset preserves empty-listing removal. The catalog clock wire change is disclosed in the PR.
Verification: GitHub-only static inspection of the changed integration and relevant upstream paths; not an exhaustive review of all 53 upstream commits. I did not run tests, GPU/browser checks, or quest context.
(Written by review (OpenAI))
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
Reviewed the moq pin bump from fd07f5b to ffcb7cd (identical to moq main) and the studio port across 53 upstream commits.
- moq pin — advances to the commit carrying
moq_mux::timeline;Cargo.lockonly drops dependencies moq no longer uses. - Catalog clock move — source listings now clear the whole
mediasection (clock plus join interval) instead of the old rootclock, preserving the mirrored wire shape and empty-listing removal. - HLS removal —
.with_hls_hint(...)becomes.with_interval(...)and the.with_hls(None)calls go, so the program catalog advertisesmedia.join.interval. - Zero max-age default — no production change needed: media tracks still get moq-mux's 30 s default, replay takes keep
with_max_age(None)(unlimited in Rust), and the catalog, token, and probe tracks take the zero default where only the newest group is ever read. - Quest bookkeeping — deletes the completed pin quest and updates
quest/m0/README.mdandbroadcast-sync.md.
I verified the upstream claims at the pinned SHA: timeline is exported, Config::default() sets max_age = MAX_AGE (30 s), Info::default() uses Some(Duration::ZERO) while with_max_age(None) is unlimited, the catalog track stays on the zero default with snapshot mode, and broadcast sources never publish the nested listing whose media is cleared. The Check workflow was still running when this review was submitted; the author reports just ci and the local GPU tests passing.
big-pickle (free) | 𝕏
Ports to moq ffcb7cd (#35): no catalog opts out of HLS, a nested catalog clears its media timing, and a reservation names its join interval. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Finishes quest/m0/pin-presentation-timeline.md.
Problem
Broadcast sync needs moq-mux's shared presentation timeline (
moq_mux::timeline). Its moq quest is gone from moqmain, now moq-dev/moq@ffcb7cd, so the pin can move.Approach
just upgrade-moqfromfd07f5btoffcb7cd(53 moq commits).bun.lockneeded no change;Cargo.lockdrops what moq no longer uses. The studio is ported to what broke, keeping current behavior and not adopting the timeline yet (broadcast sync does that):Reserved::with_hls_hintiswith_interval, thewith_hls(None)calls on source listings and replay takes go, and the catalog clock moved from the root tomedia.clock.dev.moq.studio.sourcesused to drop their rootclock. Now they drop the wholemediasection: the clock plus the join interval each source's own catalog would declare. The listing's wire shape stays as it was, and an emptied source catalog still counts as default, so it is still removed.Configstill useshang::container::MAX_AGE(30 s) (moq/rs/moq-mux/src/catalog/producer.rs:405). That is the windowreplay::MAX_LENGTHnames, so replay still finds its held groups.with_max_age(None)explicitly.js/join/src/renew.ts) and the probe reader only want the newest group, and the newest group never goes stale.quest/m0/broadcast-sync.mdandquest/m0/README.mdare removed, and broadcast-sync's plan now names the pinnedtimelinemodule.Impact
clocktomedia.clock, and the program catalog gainsmedia.join.interval(its longest GOP). This is moq's own catalog break: a reader on an older hang no longer finds the root clock. The join page builds from the submodule's JS, so it moves with this PR. Source listings are unchanged.moq-scene.Alternatives
media.join. That would add a per-source join interval to the wire that nothing reads, because HLS exports only the program, and it would keep a source catalog with no renditions from being removed.with_max_age(hang::container::MAX_AGE)explicitly on the program and source catalogs. That restates what moq-mux's defaultConfigalready guarantees.Choices made without asking
mediasection from mirrored source listings, as described above.Validation
just ci: passed. That coversjust check, including clippy withcapture,openh264,cef, plusbun testandcargo nextest: 163 passed.GPU tests on this Mac (Metal, openh264), all passed:
engine::tests::the_program_reaches_a_relayengine::tests::the_program_records_without_a_relaysetup::tests::times_every_canvascompositor::testsReplay's held-group tests (
moq-scenereplay::tests,moq-studioreplay::tests) and the recording tests run in the nextest suite above.GitHub Check failed on
b2924c2(run 41833507639), and the failure is not from this PR.bun install's postinstall buildsmoq-libavfrom source, because neithernix.moq.devnorcache.nixos.orgholds it. That build fetchesffmpeg-9.0.tar.xzfrom ffmpeg.org, which refused connections from the runner (curl: (28) Failed to connect to ffmpeg.org:443).wm8sffhm05...-moq-libav-0.1.0.drv) failed the same way on the old pinfd07f5b, in #33's run 41828792976.moq-libavand its sources tonix.moq.dev, is moq's CI never downloads libav's sources quest.Porting notes for open PRs
I trial-merged each open PR onto this head locally:
rs/moq-scene/src/publish.rsandrs/moq-studio/src/engine.rs. Port these:.with_hls(None)catalog.clock = Nonetocatalog.media = Default::default().with_hls_hint(...)to.with_interval(...)Configladder.rstests create tracks withNone/Info::default(), which now means a zero max agebroadcast-sync.mdedit auto-merges.Cargo.lockconflicts only. Take this side and re-resolve withcargo metadata, which adds Blitz's crates. Clippy and nextest then pass.Follow-ups
moq-libavfromnix.moq.devtoo. The studio flake'snixConfignames that cache, so a later moq bump should pick it up.Review
Codex (
quest review), gpt-6.1-sol, medium effort, round 1 on headb2924c28d0868fabb14a441c8fd9bf3c10f5c28dagainstorigin/maindba63e5. No findings.(Written by Claude Opus 5.5)