Skip to content

chore(quest): complete the media release review - #3878

Merged
kixelated merged 2 commits into
mainfrom
quest/main/media-release-review
Sep 22, 2026
Merged

kixelated merged 2 commits into
mainfrom
quest/main/media-release-review

Conversation

@kixelated

@kixelated kixelated commented Sep 22, 2026

Copy link
Copy Markdown
Collaborator

Completes quest/main/media-release-review.md.

Problem

The twelve media API quests landed on main today. Before anyone requests the separate 0.1 version bump for moq-audio, moq-video, moq-transcode, and moq-nvenc, the quest asks for a record that the agreed contracts are in, that the deferred backlog can extend them without another replacement, and that the release candidate passes the independent feature, refusal, ownership, docs, and dependency-tree gates.

Approach

Verdict: landed, no blockers. Release candidate reviewed: origin/main at f1894110b7028fefc7420c1a3b088d00e0bcaf16 (#3875). This PR deletes the quest, fixes the stale backlog and docs it turned up, and adds one missing attribute.

Landed contracts

Crate Contract PR
moq-nvenc fallible Encoder::load / LoadError, no public ENCODE_API #3838
moq-nvenc owned buffers and registrations, Submission held through completion, unsafe raw entry points #3835
moq-nvenc transactional register/map rollback, EncodeError::cleanup #3834
moq-video optional openh264 (default on), render off by default, nvidia only; just rs media-features in CI #3839
moq-mux shared rate::{Policy, Control} (from moq_video::encode::rate) #3840
moq-video sync Encoder/Decoder are !Send; async Sink/Consumer own execution #3837
moq-video Frame/Encoded non-exhaustive with constructors, typed I420, one configured conversion each #3846
moq-video rational Rate, capture frames timestamped before queue replacement #3849
moq-video Output { Native, Cpu }, decode::Config { kind, output, scale_hint }, decode::Options, resize::Config::output, --frames #3875
moq-video encode::Gop enum, fallible cut(), CutUnsupported at open #3876
moq-video frame::vulkan importer, frame::cuda::Converter, bounded pool, NVENC in place #3836, #3869
moq-audio Layout; encode::{Input, Settings, Options}; decode::{Config, Output, Options} #3843
moq-audio Producer::demand() replaces track(), private Resampler, PublicationOptions, non-exhaustive frames #3842
moq-audio fec flag removed #3841
moq-audio aec::Control, exclusive microphone attachment, Error::Busy #3844
moq-audio playback::Sink::write -> Write { accepted, dropped } #3845
moq-transcode consumes Rate, Gop, resize::Config, feature defaults; no second media model #3839, #3849, #3875, #3876

Extension points checked against the deferred lines: intra-refresh extends the non-exhaustive Gop; audio-codecs and surround extend Layout and decode::Kind; color-model extends Color on encode::Config; the decode seam extends Kind; ladder, #2848, and encoder-feedback consume moq_mux::rate and encode::Options; NVENC reuse/recovery build on the owned Submission. Every deferred quest is phrased as an extension; none needs a replacement of these types.

Verification on f1894110b (macOS host, Nix shell)

Gate Command Result
independent feature builds and dependency assertions just rs media-features ok (84 minimal moq-video tests pass; every graph assertion holds)
backend-free refusal covered by media-features (--no-default-features test suite: Kind::Software and named openh264 refuse) ok
Apple capture and codec paths, --all-features just rs macos ok
off-by-default capture feature just rs capture ok (the #3849 breakage is already fixed by #3877)
rustdoc, default and --all-features RUSTDOCFLAGS="-D warnings" cargo doc --locked --no-deps -p moq-audio -p moq-video -p moq-transcode -p moq-nvenc -p moq-mux ok
ownership and cancellation tests, migrated callers just check and just test on each merged PR (CI Check, Android, Swift, OBS, WASM green on every PR head) ok
feature unification cargo tree -e features --workspace --target x86_64-unknown-linux-gnu cpal and wgpu absent from the workspace default graph; openh264 and moq-nvenc enter only through the intended default openh264/nvidia features; render, capture, v4l2 stay opt-in
quest tree cargo run --locked -p quest -- check ok (401 documents on the candidate, 362 after rebasing onto #3868)

Hardware cases not exercised here, recorded separately from compilation: NVENC/NVDEC/CUDA/Vulkan (Linux/NVIDIA; just rs vulkan-cuda stays under quest/main/video-gpu-encode.md), VAAPI and V4L2 (Linux, vaapi/v4l2 are nightly --all-features only), Media Foundation (nightly just rs windows), AVFoundation/ScreenCaptureKit at runtime (compiled by just rs macos, not run). The last nightly (2026-09-21, a93fdb8e8) failed its macOS, Windows, uring, and drill lanes; that SHA predates every media PR, and #3877 fixed the macOS capture break they hit.

Backlog and docs cleaned

  • Stale decode::Config (now decode::Options) in audio-jitter-target/{README,native}.md; Config::bitrate and the dev-merge condition in 2848-*.md; the completed host-flag paragraph in capture-alsa-link.md; the private resampler in sip-stack.md; Layout in play-audio-rendition-gap.md; "replacement option" wording in audio-loss-recovery.md.
  • gpu_frames in video-vaapi.md; the pre-cut() state of keyframe-trigger.md; the backend keyframe flag in intra-refresh/encode-config.md and the self-disabling V4L2 fallback in intra-refresh/v4l2-refresh.md; completed rollback and destructor items in nvenc-recovery.md; the dev-merge condition in ladder/README.md; encode::Config and rate.rs in qos/stats/encoder-feedback.md; Rendition::update in jitter-flush-clock.md. (The stale mobile/ffi-video-consumer.md was already deleted by chore(quest): groom next after the dev merge #3868, which agrees the FFI consumer landed.)
  • Docs: moq-video README capture loop returns Frame; moq-transcode README example uses the current create_broadcast + announce; transcode crate doc and doc/bin/cli.md mention --frames; DESIGN-native-codecs.md names the nvidia/vaapi features; doc/lib/rs/moq-video.md says openh264 is a default feature.
  • Unreleased changelog entries for the landed breaking changes that had none (moq-video, moq-audio, moq-transcode, moq-nvenc, moq-mux rate), so the 0.1 notes carry the migration detail.

Impact

  • Public API: moq_video::RateError gains #[non_exhaustive] (0.0.x moq-video; rs/CLAUDE.md requires it on public error enums, and adding it after 0.1 would be a breaking change). Nothing else changes; the review is otherwise docs and quests.
  • Wire: none.
  • Published FFI/C layouts in these PRs: unchanged, as each PR declared and as git diff of rs/libmoq and rs/moq-ffi public signatures across the range confirms. The only C layout change on main in the same window is feat(ffi)!: scope announcement streams with patterns #3856 (moq_announce_update gains captures), outside this line and already declared breaking there.

Alternatives

Keeping the quest open for the hardware runs would conflate compilation evidence with hardware evidence; quest/main/video-gpu-encode.md already owns the NVIDIA validation and the other hardware lanes are nightly.

Follow-ups

  • rs/moq-cli/Cargo.toml still carries the silent nvenc/nvdec feature aliases that Make media backends optional #3839 removed from moq-video; a maintainer decision on the binary's feature names, not part of the four crates.
  • The 0.1 version bump is a separate request, as the quest states.

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Sep 22, 2026

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: fbb68ace-ec8f-4ef3-9492-7e6e923aa1f5

📥 Commits

Reviewing files that changed from the base of the PR and between a4a70e5 and 822512a.

📒 Files selected for processing (28)
  • doc/bin/cli.md
  • doc/lib/rs/moq-video.md
  • quest/future/audio-loss-recovery.md
  • quest/future/intra-refresh/encode-config.md
  • quest/future/intra-refresh/v4l2-refresh.md
  • quest/future/sip-stack.md
  • quest/future/video-vaapi.md
  • quest/main/README.md
  • quest/main/media-release-review.md
  • quest/next/2848-follow-the-bandwidth-grant-in-moq-audio-instead-of.md
  • quest/next/audio-jitter-target/README.md
  • quest/next/audio-jitter-target/native.md
  • quest/next/capture-alsa-link.md
  • quest/next/jitter-flush-clock.md
  • quest/next/keyframe-trigger.md
  • quest/next/nvenc-recovery.md
  • quest/next/play-audio-rendition-gap.md
  • quest/next/qos/stats/encoder-feedback.md
  • rs/moq-audio/CHANGELOG.md
  • rs/moq-mux/CHANGELOG.md
  • rs/moq-nvenc/CHANGELOG.md
  • rs/moq-transcode/CHANGELOG.md
  • rs/moq-transcode/README.md
  • rs/moq-transcode/src/lib.rs
  • rs/moq-video/CHANGELOG.md
  • rs/moq-video/DESIGN-native-codecs.md
  • rs/moq-video/README.md
  • rs/moq-video/src/rate.rs
💤 Files with no reviewable changes (1)
  • quest/main/media-release-review.md

Included review availability: Your plan provides up to 4 included reviews per hour; 1 remains after this review.


Walkthrough

The changes align media documentation, changelogs, and quest plans with current APIs and behavior. They document audio, video, transcode, and NVENC breaking changes; update GPU, CPU, capture, and feature-gating descriptions; mark RateError as non-exhaustive; and revise planned API names and backend behavior. The media release-review quest was removed after the four media crates were marked ready for the requested 0.1 release.

Priority: ⬇️ Low

Merge Risk: ⚪ Minimal · up to 82251

The PR aligns media documentation, changelogs, and quest plans, with the intentional public compatibility change making RateError non-exhaustive. It is merge-ready with normal checks.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 2…
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.
Description check ✅ Passed The description directly explains completion of the media release review, deletion of the quest, documentation and backlog updates, changelog additions, and the RateError change.
Title check ✅ Passed The title clearly identifies the primary change: completing the media release review quest.
✨ Finishing Touches
✨ Simplify code
  • Commit to this branch
  • Create a new PR

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

Copy link
Copy Markdown
Collaborator Author

MERGE

Positive improvement? Yes. This closes the media release review quest the way it was written: record that the audio/video/transcode/NVENC contracts landed on main with no release blockers, refresh the living backlog so deferred work speaks the current types, and fill the Unreleased changelog gaps so a later 0.1 bump has migration notes. The only Rust change is #[non_exhaustive] on RateError, which matches the public-error-enum rule and is the right window before 0.1. The duplicate set positional-arguments drop in test/justfile is a real unblock (just 1.58 refuses the file otherwise).

Worth the complexity? Yes. Almost all of the diff is quest/docs/changelog hygiene; there is no second media model and no wire or published FFI layout change. Bundling the justfile fix with the review is a little opportunistic, but the PR already says it can land alone, and the cost of keeping it here is low.

Different approach? Splitting the justfile fix into its own PR would make the unblock land faster if this review stalled, but it does not change the verdict. Holding the quest open until NVIDIA/VAAPI/V4L2/MF hardware runs finish would conflate compile evidence with hardware evidence; those lanes already live under video-gpu-encode and nightly. The noted moq-cli nvenc/nvdec alias cleanup is correctly left as a separate maintainer call.

Recommendation: MERGE. Good to land as the review record and backlog/docs cleanup; the separate 0.1 bump stays a follow-up.

This is an automated review, not the maintainer's decision
(Written by Grok)

@kixelated
kixelated enabled auto-merge (squash) September 22, 2026 01:26
@moq-bot

moq-bot Bot commented Sep 22, 2026

Copy link
Copy Markdown
Contributor

No issues found.
Verdict: approve
(Written by Muse Spark)

New%20session%20-%202026-09-22T01%3A25%3A38.012Z
opencode session  |  github run

kixelated and others added 2 commits September 21, 2026 18:51
Records that the audio, video, transcode, and NVENC contracts landed on
main at f189411 with no release blockers, fixes the stale backlog and
docs the review turned up, adds the missing Unreleased changelog entries,
and marks RateError non-exhaustive like every other public error enum.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@kixelated
kixelated force-pushed the quest/main/media-release-review branch from 89403c6 to 822512a Compare September 22, 2026 01:52
@moq-bot

moq-bot Bot commented Sep 22, 2026

Copy link
Copy Markdown
Contributor

No issues found.
Verdict: approve
(Written by Muse Spark)

New%20session%20-%202026-09-22T01%3A53%3A12.108Z
opencode session  |  github run

@kixelated
kixelated merged commit 5224ca2 into main Sep 22, 2026
6 checks passed
@kixelated
kixelated deleted the quest/main/media-release-review branch September 22, 2026 02:04
@moq-bot moq-bot Bot mentioned this pull request Sep 23, 2026
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