Skip to content

docs(obs): publish OBS's simulcast layers as MoQ renditions - #7333

Merged
moq-bot[bot] merged 3 commits into
mainfrom
quest/m2/obs-multitrack
Oct 31, 2026
Merged

moq-bot[bot] merged 3 commits into
mainfrom
quest/m2/obs-multitrack

Conversation

@kixelated

@kixelated kixelated commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

Finishes quest/m2/obs-multitrack.md.

Problem

The quest asked whether moq_output publishes OBS's native multitrack video encoders as simulcast renditions and how a user configures them. It also asked to update the "OBS publishes one rendition" section of doc/bin/obs.md.

Checking the gap first showed no plumbing is missing. moq_output declares OBS_OUTPUT_MULTI_TRACK_VIDEO and creates one catalog rendition per video encoder (video_tracks, VideoInit in cpp/obs/src/moq-output.cpp). Each rendition carries its encoder's coded size (obs_encoder_get_width returns the scaled size, and the SPS overrides it), its codec, and its configured bitrate under CBR. Each name comes from unique_name(".<format>"), the same scheme the FLV importer uses for enhanced-RTMP multitrack (unique_track(".flv-v")). The importer advertises no bitrate. What was missing was how to make OBS attach more than one encoder to a MoQ output.

I read OBS 32.2.2's frontend, the version cpp/obs/buildspec.json pins:

  • Enhanced Broadcasting (EnableMultitrackVideo) cannot drive MoQ. MultitrackVideoOutput::create_output hardcodes obs_output_create("rtmp_output", ...) with an rtmp_custom service. BasicOutputHandler enables it only for services that have a multitrack_video_configuration_url, or for rtmp_custom.
  • WHIP simulcast works for any output. BasicOutputHandler builds WHIPSimulcastEncoders whenever Stream1/WHIPSimulcastTotalLayers > 1, whatever the service. AdvancedOutput and SimpleOutput then attach the scaled encoders to the stream output with obs_output_set_video_encoder2. Layer i gets i/N of the output size and bitrate. OBS reads the count only on ResetOutputs: at startup, on a profile switch, or when Output settings are saved.
  • OBS's Settings > Stream shows the layer count only for WHIP. It saves only rtmp_common, rtmp_custom, or whip_custom, so it cannot select moq_service. obs-websocket can do both: SetStreamServiceSettings creates any registered service type, and SetProfileParameter writes the profile config.

Approach

Docs only, since the output already does the work:

  • New Simulcast renditions section in doc/bin/obs.md. It covers what each rendition carries, the WHIPSimulcastTotalLayers knob and its ladder math, the obs-websocket recipe, and why Enhanced Broadcasting and the dock don't apply.
  • Fixed the Publish bullet. It said Settings > Stream can choose "MoQ", but stock OBS 32.2.2 can't (see above). It now points to the dock's Go Live, or to obs-websocket for OBS's own Start Streaming.
  • Deleted the quest and its links.

Choices made without asking:

  • Reused OBS's WHIP simulcast setting instead of adding a MoQ-only ladder UI, as the quest Plan says.
  • Kept the bitrate hint CBR-only. That rule is existing and tested (publishes, and only CBR hints its bitrate). Under VBR, the encoders' max_bitrate defaults to the same value on every layer (NVENC 10000 kbps), so advertising it would make every rung look alike.
  • Added no new unit test. moq-dev/moq#7029 rewrites the same stubs to add a multi-encoder ladder test. A second two-encoder test here would only conflict with it.

Impact

  • No API or wire change. Docs and quest files only.

Not verified

These need a real OBS, which I couldn't run here:

  • The manual run the quest asked for: 2+ video tracks from a live OBS 32.2.2, watched in <moq-watch>.
  • That the obs-websocket recipe (SetStreamServiceSettings → SetProfileParameter → restart → StartStream) attaches the extra layers to moq_output end to end. This comes from reading the OBS and obs-websocket sources.

Alternatives

  • Have moq_output create its own scaled encoders from a MoQ service property. Rejected: that is the MoQ-only ladder UI the Plan rules out, and obs-websocket couldn't reach it through OBS's own settings.
  • Enhanced Broadcasting's config override JSON. Not possible: the frontend always streams it through rtmp_output.

Follow-ups

  • The dock's Go Live creates its own single encoder and ignores WHIPSimulcastTotalLayers. Honoring the profile count there would give a GUI path to simulcast.
  • Stock OBS's Settings > Stream can't select or keep moq_service, so saving that page replaces it. The upstream route is MoQ in obs-studio; the plugin can't fix it.
  • Once moq-dev/moq#7029 lands, its ladder test could also assert that each rendition advertises its own bitrate.

Review

  • Reviewer: Codex (quest review), gpt-6.1-sol, medium effort
  • Head: dfcf73d439bb765fd7b2201ce0a400d690bf5fa2, base origin/main at 9f8e96f
  • Round 1: no findings

Local checks on that head: just obs compile, just obs test (TSan, 0 failures), just check, just ci, and quest check --base origin/main all passed.

(Written by Claude Opus 5.5)

🤖 Generated with Claude Code

kixelated and others added 2 commits October 30, 2026 03:30
Quest-Claim: 280958874fc6f06d
The output already publishes every video encoder OBS attaches as its own
catalog rendition. Document the OBS setting that attaches them for any
service (WHIPSimulcastTotalLayers), how to drive it and the MoQ service over
obs-websocket, and why Enhanced Broadcasting cannot. Finishes the
obs-multitrack quest.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated kixelated changed the title OBS multitrack video as simulcast renditions docs(obs): publish OBS's simulcast layers as MoQ renditions Oct 30, 2026
@kixelated
kixelated marked this pull request as ready for review October 30, 2026 10:51
@coderabbitai

coderabbitai Bot commented Oct 30, 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: 97fb7d08-f4f2-4f8d-b19e-742cae004bbc
Commits

Reviewing files that changed from the base of the PR and between 9a0e152 and dfcf73d.

Files selected for processing: 5
  • doc/bin/obs.md
  • quest/m1/simulcast-rung-disable.md
  • quest/m2/README.md
  • quest/m2/obs-multitrack.md
  • quest/m2/obs-studio/README.md
  • 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.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 30, 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-30T10:52:18.880176Z dfcf73d Draft marked ready
ℹ️ 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.

@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: dfcf73d.

No actionable inconsistency found in the repository-scoped review. Documenting existing multitrack plumbing rather than adding a second ladder configuration is a reasonable direction. The plugin confirms moq_service with server/key settings, multitrack output capability, per-encoder rendition ownership, encoded dimensions and CBR-only catalog bitrate hints. The docs distinguish the dock's single-rendition path from the native streaming path.

Verification limits: static inspection of the documentation and current plugin implementation, with an independent check. I did not independently inspect upstream OBS/obs-websocket behavior or run OBS; the layer-count scaling, settings/reset behavior and full websocket-to-multiple-renditions recipe remain unverified here. The documented manual run with 2+ tracks viewed in is still needed before treating that end-to-end configuration as demonstrated. Author-reported local checks were not reproduced.

(Written by OpenAI)

@kixelated

Copy link
Copy Markdown
Collaborator Author

Merge summary: docs-only PR documenting how OBS's WHIP simulcast layers (WHIPSimulcastTotalLayers) attach to moq_output as MoQ renditions, fixing the Publish bullet, and deleting quest/m2/obs-multitrack.md. Checks green (12/12); Codex local review on head dfcf73d439bb765fd7b2201ce0a400d690bf5fa2 reported no findings, and the online review found nothing actionable. quest check --base origin/main passes. The end-to-end run in a live OBS 32.2.2 remains unverified, as the PR body states; queuing for quest land.

(Written by Claude Opus 5.5)

@kixelated
kixelated enabled auto-merge (squash) October 31, 2026 04:59
@moq-bot
moq-bot Bot disabled auto-merge October 31, 2026 09:23
@moq-bot moq-bot Bot removed the quest:merge label Oct 31, 2026
@moq-bot

moq-bot Bot commented Oct 31, 2026

Copy link
Copy Markdown
Contributor

quest land removed this pull request from the queue: the batch check failed (exit 14).

Try `dart pub outdated` for more information.
Resolving dependencies...
Downloading packages...
  _fe_analyzer_shared 105.0.0 (111.0.0 available)
  analyzer 14.1.0 (14.7.0 available)
  code_assets 2.0.0 (2.1.0 available)
  coverage 1.15.1 (1.16.0 available)
  crypto 3.0.7 (3.0.8 available)
  frontend_server_client 4.0.0 (4.2.0 available)
  http_multi_server 3.2.2 (3.2.3 available)
! moq_ffi 0.0.0-dev from path ../moq_ffi (overridden)
  shelf 1.4.2 (1.4.3 available)
  shelf_static 1.1.3 (1.2.0 available)
  test 1.32.0 (1.33.0 available)
  test_api 0.7.14 (0.7.15 available)
  test_core 0.6.20 (0.6.21 available)
  vm_service 15.3.0 (15.4.0 available)
  web 1.1.1 (1.1.2 available)
Got dependencies!
14 packages have newer versions incompatible with dependency constraints.
Try `dart pub outdated` for more information.
Publishing moq 0.1.0 to https://pub.dev:
├── CHANGELOG.md (<1 KB)
├── LICENSE (1 KB)
├── MIGRATE.md (16 KB)
├── README.md (1 KB)
├── analysis_options.yaml (<1 KB)
├── bench
│   └── ffi.dart (5 KB)
├── lib
│   ├── audio.dart (2 KB)
│   ├── json.dart (2 KB)
│   ├── media.dart (4 KB)
│   ├── moq.dart (<1 KB)
│   ├── src
│   │   ├── aliases.dart (7 KB)
│   │   ├── client.dart (10 KB)
│   │   ├── durations.dart (<1 KB)
│   │   ├── epoch.dart (<1 KB)
│   │   ├── server.dart (5 KB)
│   │   ├── stream.dart (2 KB)
│   │   └── version.dart (<1 KB)
│   └── video.dart (3 KB)
├── pubspec.yaml (<1 KB)
└── test
    ├── cancellation_test.dart (7 KB)
    ├── docs
    │   ├── prelude.dart (<1 KB)
    │   └── samples.dart (4 KB)
    └── moq_test.dart (24 KB)

Total compressed archive size: 30 KB.
Validating package...
Package validation found the following hint:
* Non-dev dependencies are overridden in pubspec.yaml.
  
  This indicates you are not testing your package against the same versions of its
  dependencies that users will have when they use it.
  
  This might be necessary for packages with cyclic dependencies.
  
  Please be extra careful when publishing.
The server may enforce additional checks.

Package has 0 warnings and 1 hint.
ci: check gh failed
ci: seconds per module
   283  check py
    30  test py
   861  check rs
   390  test rs
  1203  check rs_shapes
   412  check c
   247  check cpp
   101  check obs_compile
   421  check js
    97  test js
    64  check drafts
    56  check markdown
     7  check gh (failed)
   475  check kt
   180  check flake
   101  check bench
    16  check carla
    21  check swift
   136  check go
     1  check drill
    17  check workers
     7  check moq_sh
     3  check quest
     3  check obs
     1  check ts_paths
    21  check shell
     1  check large_files
     1  check toml
     0  check nix
     0  check justfile
   264  check dart
  2718  wall time
error: recipe `ci` failed on line 104 with exit code 14

.

@kixelated

Copy link
Copy Markdown
Collaborator Author

Re-landing the head unchanged (dfcf73d439bb765fd7b2201ce0a400d690bf5fa2).

The 09:23Z ejection was check gh failing for the batch, which this PR can't cause: it touches only doc/bin/obs.md and quest/ files. On this head merged with current main (a1169021b6f250309b4428e8f28b03dcdc4236af), just gh check passes (actionlint, alert coverage, check-runs.ts, relay test), and quest check --base origin/main passes. The failure looks like the zizmor/pullfrog.yml breakage that moq-dev/moq#7317 is fixing.

The Codex review on this head (round 1, no findings) still covers it.

(Written by Claude Opus 5.5)

@kixelated
kixelated enabled auto-merge (squash) October 31, 2026 09:35
@moq-bot

moq-bot Bot commented Oct 31, 2026

Copy link
Copy Markdown
Contributor

Codex land fixer: PR was picked again while fixing; keeping the newer pick. Recommendation: run /quest-iterate before picking it again.

…cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-loc#0.2.19 not found in Cargo.lock
�[2m2026-10-31T08:38:28.676896Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-msf#0.5.1 not found in Cargo.lock
�[2m2026-10-31T08:38:28.764281Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/hang#0.21.11 not found in Cargo.lock
�[2m2026-10-31T08:38:28.764364Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/kio#0.6.2 not found in Cargo.lock
�[2m2026-10-31T08:38:28.764384Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/kio/macros#kio-macros@0.1.0 not found in Cargo.lock
�[2m2026-10-31T08:38:28.764424Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-clock#0.11.0 not found in Cargo.lock
�[2m2026-10-31T08:38:28.764442Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-clock/macros#moq-clock-macros@0.1.0 not found in Cargo.lock
�[2m2026-10-31T08:38:28.764460Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-json#0.5.8 not found in Cargo.lock
�[2m2026-10-31T08:38:28.764479Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-loc#0.2.19 not found in Cargo.lock
�[2m2026-10-31T08:38:28.764503Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-msf#0.5.1 not found in Cargo.lock
�[2m2026-10-31T08:38:28.764520Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-mux#0.10.11 not found in Cargo.lock
�[2m2026-10-31T08:38:28.764550Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-net#0.3.10 not found in Cargo.lock
�[2m2026-10-31T08:38:28.764569Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-nvenc#0.1.2 not found in Cargo.lock
�[2m2026-10-31T08:38:28.764586Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-pattern#0.1.2 not found in Cargo.lock
�[2m2026-10-31T08:38:28.770220Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-video#0.1.10 not found in Cargo.lock
�[2m2026-10-31T08:38:28.833357Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-nvenc#0.1.2 not found in Cargo.lock
�[2m2026-10-31T08:38:28.887745Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-v4l#0.1.0 not found in Cargo.lock
�[2m2026-10-31T08:38:28.940976Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/libmoq#0.6.12 not found in Cargo.lock
�[2m2026-10-31T08:38:29.012960Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/kio#0.6.2 not found in Cargo.lock
�[2m2026-10-31T08:38:29.013040Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/kio/macros#kio-macros@0.1.0 not found in Cargo.lock
�[2m2026-10-31T08:38:29.013079Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-clock#0.11.0 not found in Cargo.lock
�[2m2026-10-31T08:38:29.013100Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-clock/macros#moq-clock-macros@0.1.0 not found in Cargo.lock
�[2m2026-10-31T08:38:29.013118Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-net#0.3.10 not found in Cargo.lock
�[2m2026-10-31T08:38:29.013153Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-pattern#0.1.2 not found in Cargo.lock
�[2m2026-10-31T08:38:29.018328Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-archive#0.0.11 not found in Cargo.lock
�[2m2026-10-31T08:38:29.095954Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/hang#0.21.11 not found in Cargo.lock
�[2m2026-10-31T08:38:29.096047Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/kio#0.6.2 not found in Cargo.lock
�[2m2026-10-31T08:38:29.096073Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/kio/macros#kio-macros@0.1.0 not found in Cargo.lock
�[2m2026-10-31T08:38:29.096093Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-clock#0.11.0 not found in Cargo.lock
�[2m2026-10-31T08:38:29.096114Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-clock/macros#moq-clock-macros@0.1.0 not found in Cargo.lock
�[2m2026-10-31T08:38:29.096149Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-json#0.5.8 not found in Cargo.lock
�[2m2026-10-31T08:38:29.096170Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-loc#0.2.19 not found in Cargo.lock
�[2m2026-10-31T08:38:29.096190Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-msf#0.5.1 not found in Cargo.lock
�[2m2026-10-31T08:38:29.096208Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-mux#0.10.11 not found in Cargo.lock
�[2m2026-10-31T08:38:29.096247Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-net#0.3.10 not found in Cargo.lock
�[2m2026-10-31T08:38:29.096281Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-pattern#0.1.2 not found in Cargo.lock
�[2m2026-10-31T08:38:29.100553Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-audio#0.1.10 not found in Cargo.lock
�[2m2026-10-31T08:38:29.172456Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/kio#0.6.2 not found in Cargo.lock
�[2m2026-10-31T08:38:29.172537Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/kio/macros#kio-macros@0.1.0 not found in Cargo.lock
�[2m2026-10-31T08:38:29.172558Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/moq-clock#0.11.0 not found in Cargo.lock
�[2m2026-10-31T08:38:29.172581Z�[0m �[34mDEBUG�[0m �[1mdevelop_cmd�[0m:�[1mbuild_wheels�[0m:�[1mbuild_wheels_inner�[0m:�[1mgenerate�[0m: �[2mcargo_cyclonedx::generator�[0m�[2m:�[0m Hash for package ID path+file:///work/rs/mstack backtrace:
   0: __rustc::rust_begin_unwind
   1: core::panicking::panic_fmt
   2: std::io::stdio::_eprint
   3: <codex_exec::event_processor_with_human_output::EventProcessorWithHumanOutput as codex_exec::event_processor::EventProcessor>::process_server_notification
   4: codex_exec::run_exec_session::{closure#0}
   5: <tracing::instrument::Instrumented<codex_exec::run_exec_session::{closure#0}> as core::future::future::Future>::poll
   6: codex_exec::run_main::{closure#0}
   7: codex::cli_main::{closure#0}
   8: <tokio::runtime::park::CachedParkThread>::block_on::<codex_arg0::run_main_with_arg0_guard<codex::main::{closure#0}, codex::main::{closure#0}::{closure#0}>::{closure#0}>
   9: tokio::runtime::context::runtime::enter_runtime::<<tokio::runtime::scheduler::multi_thread::MultiThread>::block_on<codex_arg0::run_main_with_arg0_guard<codex::main::{closure#0}, codex::main::{closure#0}::{closure#0}>::{closure#0}>::{closure#0}, core::result::Result<(), anyhow::Error>>
  10: <tokio::runtime::runtime::Runtime>::block_on::<codex_arg0::run_main_with_arg0_guard<codex::main::{closure#0}, codex::main::{closure#0}::{closure#0}>::{closure#0}>
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
quest: fixer agent exited 101

(written by Codex)

@moq-bot
moq-bot Bot merged commit 9bdf227 into main Oct 31, 2026
@moq-bot
moq-bot Bot deleted the quest/m2/obs-multitrack branch October 31, 2026 18:26
kixelated added a commit that referenced this pull request Oct 31, 2026
Drop Required entries and links to quests that merged PRs finished since
this branch was cut (cli-modes #7261, mesh/sign #7092, ordered-owed-wait
#7403, obs-multitrack #7333, mpeg2-open-gop-export #7365,
workflow-security #7317), linking the PR where the prose needs it.

Complete the README index bullets that were cut mid-sentence, and fold
the CodeRabbit plan findings into their quests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kixelated added a commit that referenced this pull request Nov 1, 2026
…ragraph

Main's simulcast section (#7333) already says every encoder is a rendition.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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