Repository navigation
refactor(publish): keep each network broadcast's renditions and encoder state in one publication - #7371
Conversation
Quest-Claim: f1a7f6d0ae12e3f7
…blication Broadcast's five name-keyed maps (#kinds, #names, #replacements, #served, #listed) become one internal Publication per network broadcast, mapping catalog ID to kind, track name, track, and owner. A new network broadcast starts a new publication, so names, kinds, and tracks reset structurally. Identity now follows hang's same_identity per kind, so an interlacing change takes a fresh video track name too. The quest is rewritten to the remaining encoder-side state. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lication Each publication entry now owns a Slot: the coded-size ceiling, the raised bitrate and frame-rate maxima, the last enabled config, and the producer's terminal failure. Encoders read and write the current slot through their Rendition instead of per-Broadcast WeakMaps, and their public error derives from it, so a new network broadcast starts clean. The broadcast aborts a failed slot's track (idle ones too), records a producer's own abort as the slot's failure, and serves a fresh track name once the failure clears. This replaces the `errors` WeakMap and each encoder's per-registration Once. Deletes the finished quest. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
No actionable comments were generated in the recent review.
|
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: 9d073535a5e68fbc0b0cd80ce8f0b8672ba69e31.
No actionable bugs found in the changed areas. Centralizing names, track ownership, advertised maxima and terminal failures in a per-network-broadcast publication is a coherent simplification. Committing identity-driven renames only after the catalog fold succeeds preserves the catalog/track relationship; the added failure-recovery and restart tests cover the key lifetime changes.
Verification: static review of the diff and surrounding broadcast/audio/video encoder code, including slot reset, reprobe and recovery paths. I did not run tests or browser/device checks; the checks reported in the PR were not independently reproduced.
|
Landing head 9d07353 via
(Written by Claude Opus 5.5) |
|
quest land removed this pull request from the queue: the batch check failed (exit 1). Checking calloop-wayland-source v0.4.1
Checking der v0.7.10
Checking egui v0.36.2
Checking moq-congestion v0.1.0 (/work/rs/moq-congestion)
Checking tungstenite v0.30.0
Checking ecdsa v0.17.0
Compiling moq-vaapi v0.1.0
Checking zbus_names v4.3.4
Checking scuffle-h265 v0.2.2
Checking moq-json v0.5.8 (/work/rs/moq-json)
Checking wgpu v30.0.1
Checking moq-loc v0.2.19 (/work/rs/moq-loc)
Checking primeorder v0.14.0
Checking smithay-client-toolkit v0.19.2
Checking hang v0.21.11 (/work/rs/hang)
Checking webm-iterable v0.7.1
Checking wayland-protocols-misc v0.3.12
Checking wayland-protocols-experimental v20250721.0.1
Checking wayland-protocols-plasma v0.3.12
Checking pipewire v0.10.1
Checking scuffle-av1 v0.1.4
Checking http-serde v2.1.1
Checking sha2 v0.11.1
Checking moq-msf v0.5.1 (/work/rs/moq-msf)
Checking moka v0.12.16
Checking moq-quic v0.1.0 (/work/rs/moq-quic)
Checking humantime-serde v1.1.1
Checking toml v1.1.6+spec-1.1.0
Checking zbus v5.19.0
Checking postcard v1.1.3
Checking winit v0.30.13
Checking http-cache-semantics v3.0.0
Checking smithay-client-toolkit v0.20.0
Checking tokio-tungstenite v0.30.0
Checking spki v0.7.3
Checking moq-mux v0.10.11 (/work/rs/moq-mux)
Checking sfv v0.15.0
Compiling moq-video v0.1.10 (/work/rs/moq-video)
Checking serde_urlencoded v0.7.1
Checking smithay-clipboard v0.7.3
Checking axum-core v0.5.6
Checking web-transport-proto v0.6.3
Checking cpal v0.18.2
Checking jsonwebtoken v11.1.0
Checking x11rb v0.14.0
Checking qmux v0.7.0 (/work/rs/qmux)
Checking ashpd v0.13.13
Checking rcgen v0.14.10
Checking pkcs1 v0.7.5
Checking http-cache v1.0.0-alpha.8
Compiling proc-macro2-diagnostics v0.10.1
Checking moq-sock v0.2.0 (/work/rs/moq-sock)
Checking fs-err v3.3.1
Checking p256 v0.14.0
Checking p384 v0.14.0
Checking arboard v3.7.0
Checking reqwest-middleware v0.5.2
Checking web-transport-trait v0.5.2
Checking axum v0.8.9
Checking axum-server v0.8.0
Checking moq-tokio v0.19.23 (/work/rs/moq-tokio)
Checking egui-winit v0.36.2
Checking http-cache-reqwest v1.0.0-alpha.9
Checking egui-wgpu v0.36.2
Compiling duplicate v2.0.1
Checking moq-stats v0.2.12 (/work/rs/moq-stats)
Checking eframe v0.36.2
Checking moq-auth v0.2.1 (/work/rs/moq-auth)
Checking egui_dock v0.21.1
Checking moq-audio v0.1.10 (/work/rs/moq-audio)
Checking moq-scene v0.1.0 (/work/rs/moq-scene)
Checking moq-relay v0.17.2 (/work/rs/moq-relay)
Checking moq-studio v0.1.0 (/work/rs/moq-studio)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 51.38s
mbx[cache]: object cache: 167 hits, 1100 misses, 71 not looked up, 3 bypassed; 0 B downloaded, 0 B uploaded, 2.7 GiB stored locally
mbx[cache]: 13m 37s session; 2m 14s estimated compiler time avoided (summed across compilations)
mbx[cache]: 71 compilations had no usable prior inputs or matching prediction for a lookup
mbx[cache]: bypass reasons: 3 build-script-declarations-pending
mbx[cache]: Cargo artifact reuse and CI cache archive transfers are not included above
mbx[savings]: rustc believes it compiled everything. it is down 8d 20h across 11990 builds. let it believe.
ci: check quest failed
ci: test rs failed
ci: seconds per module
798 check rs
237 test rs (failed)
1317 check rs_shapes
210 check js
17 test js
22 check markdown
3 check gh
67 test gh
0 check drill
3 check quest (failed)
32 check shell
0 check large_files
1 check toml
0 check nix
0 check justfile
2352 wall time
error: recipe `ci` failed on line 104 with exit code 1
. |
|
Codex land fixer: moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed setup/redundancy.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/py.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed setup/repository.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed bin/rtmp.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/rs.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed draft/qmux-websocket.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed concept/standard.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed bin/srt.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed concept/stats.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/swift.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed bin/studio.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed concept/transport.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed setup/troubleshooting.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed setup/upgrade.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed bin/rtc.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed concept/use-case.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/boy/element.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/publish/support/element.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Generated �[36mllms-full.txt�[39m (~�[1m268.3K�[22m tokens, �[1m1.01 MB�[22m) with �[1m89�[22m markdown files
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/watch/support/element.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/hang/util.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/net/zod.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/signals/dom.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/auth.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/hang.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/auth.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/boy.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/clock.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/json.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/json.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/clock.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/hang/cmaf.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/hang.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/libav.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/loc.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/msf.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/hang/container.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/hang/catalog.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/pattern.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/publish.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/net.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/publish/element.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/publish/ui.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/publish.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/publish/support.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/room.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/qmux.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/net.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/room.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/signals.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/signals.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/signals/react.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/signals/solid.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/ui.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/video.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/watch.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/video.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/watch/element.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/watch/support.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/watch/ui.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed bin/relay/auth.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed lib/js/api/watch.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed bin/relay/cluster.md
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m�[32m✓�[39m Processed bin/relay/config.md
moq-doc:build | �[33m
moq-doc:build | (!) Some chunks are larger than 500 kB after minification. Consider:
moq-doc:build | - Using dynamic import() to code-split the application
moq-doc:build | - Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks
moq-doc:build | - Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.�[39m
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m �[1mvitepress-plugin-llms�[22m initialized �[2m(SSR build)�[22m with workDir: �[36m/work/doc�[39m
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m Build started, file collection cleared
moq-doc:build | �[34mllmstxt�[39m�[2m » �[22m Skipping LLMs docs generation in SSR build
moq-doc:build | �[32m✓�[0m building client + server bundles...
moq-doc:build | - rendering pages...
moq-doc:build | �[32m✓�[0m rendering pages...
moq-doc:build | build complete in 69.81s.
moq-doc:build | Done in 70.41s
js: check finished in 209.08s
==> test js
python3 ../sh/js/workspace.py test '/tmp/tmp.Aw0VHnRblW'
js: selecting @moq/audio-quality @moq/bench-browser @moq/boy @moq/demo @moq/demo-boy @moq/demo-carla @moq/interop-browser @moq/publish @moq/room @moq/ui @moq/video-test @moq/watch moq-doc moq-doc-api
[0.04ms] ".env"
bun install v1.4.2 (744846f84
thread 'codex-main' (74) panicked at /rustc/48a229ceaefd4985c50990b14116b6d856af0985/library/std/src/io/stdio.rs:1166:9:
failed printing to stderr: Resource temporarily unavailable (os error 11)
stack 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) |
|
quest land removed this pull request from the queue: the batch check failed (exit 1). 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.
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 quest failed
ci: test rs failed
ci: seconds per module
253 check py
55 test py
848 check rs
226 test rs (failed)
1708 check rs_shapes
296 check c
210 check cpp
58 check obs_compile
247 check js
45 test js
15 check markdown
3 check gh
69 test gh
260 check kt
0 check swift
134 check go
0 check drill
3 check quest (failed)
16 check shell
1 check large_files
1 check toml
0 check nix
0 check justfile
170 check dart
2953 wall time
error: recipe `ci` failed on line 106 with exit code 1
. |
|
quest land removed this pull request from the queue: the batch check failed (exit 1). Compiling smol_str v0.2.2
Compiling cast v0.3.0
Compiling criterion-plot v0.8.2
Compiling moxcms v0.8.1
Compiling moka v0.12.16
Compiling png v0.18.1
Compiling postcard v1.1.3
Compiling http-cache-semantics v3.0.0
Compiling ecolor v0.36.2
Compiling harfrust v0.12.0
Compiling skrifa v0.44.0
Compiling chrono v0.4.45
Compiling rayon v1.12.0
Compiling vello_cpu v0.1.0
Compiling plotters v0.3.7
Compiling ciborium v0.2.2
Compiling unicode-general-category v1.1.0
Compiling tinytemplate v1.2.1
Compiling simple_asn1 v0.6.4
Compiling pem v3.0.6
Compiling gstreamer-audio-sys v0.25.4
Compiling glib v0.22.10
Compiling kstring v2.0.5
Compiling option-operations v0.6.1
Compiling mp4ra-rust v0.3.0
Compiling socket2 v0.5.10
Compiling page_size v0.6.0
Compiling nix v0.31.3
Compiling byteorder-lite v0.1.0
Compiling anes v0.1.6
Compiling self_cell v1.3.0
Compiling epaint_default_fonts v0.36.2
Compiling muldiv v1.0.1
Compiling test-env v0.0.1 (/work/rs/test-env)
Compiling nohash-hasher v0.2.0
Compiling convert_case v0.4.0
Compiling oorandom v11.1.5
Compiling mpeg4-audio-const v0.2.0
Compiling rfc6381-codec v0.2.0
Compiling criterion v0.8.2
Compiling derive_more v0.99.20
Compiling epaint v0.36.2
Compiling image v0.25.10
Compiling jsonwebtoken v11.1.0
Compiling uniffi_internal_macros v0.32.2
Compiling gst-plugin-version-helper v0.8.4
Compiling http-cache v1.0.0-alpha.8
Compiling p384 v0.14.0
Compiling p256 v0.14.0
Compiling gstreamer v0.25.4
Compiling str0m-aws-lc-rs v0.6.0
Compiling is v0.11.1
Compiling reqwest-middleware v0.5.2
Compiling sctp-proto v0.10.5
Compiling calloop v0.14.5
Compiling pkcs1 v0.7.5
Compiling combine v4.6.8
Compiling pin-project-internal v1.1.13
Compiling sha-1 v0.10.1
Compiling sha1 v0.10.7
Compiling pbkdf2 v0.12.2
Compiling arc-swap v1.9.2
Compiling accesskit v0.24.1
Compiling keyed_priority_queue v0.4.2
Compiling streaming-stats v0.2.3
Compiling bstr v1.13.1
Compiling jiff-core v0.1.1
Compiling bitstream-io v2.6.0
Compiling spin v0.10.1
Compiling array-init v2.1.0
Compiling arraydeque v0.5.1
Compiling fallible-iterator v0.3.0
Compiling take-until v0.2.0
Compiling atomic_refcell v0.1.14
Compiling srt-protocol v0.4.4
Compiling sdp-types v0.1.8
Compiling egui v0.36.2
Compiling crc-fast v1.10.0
Compiling h264-reader v0.8.0
Compiling jiff v0.2.37
Compiling axum-server v0.8.0
Compiling pin-project v1.1.13
Compiling stun-types v2.0.3
error: recipe `test-changed` failed on line 82 with exit code 143
ci: check js failed
ci: seconds per module
99 check rs
68 test rs (cancelled)
167 check js (failed)
72 check flake
0 check drill
3 check quest
1 check ts_paths
16 check shell
0 check large_files
0 check toml
1 check nix
0 check justfile
167 wall time
error: recipe `ci` failed on line 107 with exit code 1
. |
|
codex / Codex land fixer: (written by codex / Codex) |
|
quest land removed this pull request from the queue: the batch check failed (exit 101). @moq/demo:build | computing gzip size...
@moq/demo:build | src/dist/assets/capture-worker.js 0.64 kB
@moq/demo:build | src/dist/assets/capture-worklet.js 1.37 kB
@moq/demo:build | src/dist/meet.html 3.78 kB │ gzip: 1.28 kB
@moq/demo:build | src/dist/assets/render-worklet.js 4.70 kB
@moq/demo:build | src/dist/assets/favicon-CGEMJmM0.svg 4.89 kB │ gzip: 2.35 kB
@moq/demo:build | src/dist/stats.html 8.22 kB │ gzip: 2.09 kB
@moq/demo:build | src/dist/watch.html 8.42 kB │ gzip: 2.66 kB
@moq/demo:build | src/dist/publish.html 14.89 kB │ gzip: 3.64 kB
@moq/demo:build | src/dist/assets/highlight-B-oHczHB.css 0.85 kB │ gzip: 0.40 kB
@moq/demo:build | src/dist/assets/pool-DVF8Jgvh.css 38.30 kB │ gzip: 6.69 kB
@moq/demo:build | src/dist/assets/srt-parser-Ck3R_nRW.js 0.46 kB │ gzip: 0.31 kB
@moq/demo:build | src/dist/assets/capture-worker-CVcZR5CB.js 0.73 kB │ gzip: 0.44 kB
@moq/demo:build | src/dist/assets/rolldown-runtime-pP25SEvz.js 0.98 kB │ gzip: 0.56 kB
@moq/demo:build | src/dist/assets/errors-DjRtVeid.js 1.13 kB │ gzip: 0.35 kB
@moq/demo:build | src/dist/assets/capture-worklet-T-CDLjoL.js 1.46 kB │ gzip: 0.65 kB
@moq/demo:build | src/dist/assets/consumer-B0nhu6nH.js 2.06 kB │ gzip: 0.97 kB
@moq/demo:build | src/dist/assets/ssa-parser-CQw7eY7Y.js 4.66 kB │ gzip: 2.04 kB
@moq/demo:build | src/dist/assets/render-worklet-nlcL_B5J.js 4.79 kB │ gzip: 1.77 kB
@moq/demo:build | src/dist/assets/cmaf-wEt44ZDF.js 5.53 kB │ gzip: 2.31 kB
@moq/demo:build | src/dist/assets/stats-B9InyboM.js 11.19 kB │ gzip: 4.13 kB
@moq/demo:build | src/dist/assets/viz-BiV62JJw.js 11.28 kB │ gzip: 3.60 kB
@moq/demo:build | src/dist/assets/meet-BupHZSYW.js 12.31 kB │ gzip: 4.29 kB
@moq/demo:build | src/dist/assets/captions-BTu0StMP.js 17.78 kB │ gzip: 6.91 kB
@moq/demo:build | src/dist/assets/support-37RxXITs.js 23.70 kB │ gzip: 9.44 kB
@moq/demo:build | src/dist/assets/libav-opus-aac-af-B6f0W5UF.js 26.20 kB │ gzip: 7.38 kB
@moq/demo:build | src/dist/assets/publish-Dozx61IV.js 45.84 kB │ gzip: 13.57 kB
@moq/demo:build | src/dist/assets/main-0rcamW3Q.js 49.79 kB │ gzip: 11.51 kB
@moq/demo:build | src/dist/assets/highlight-CAMdJ_SX.js 51.11 kB │ gzip: 16.93 kB
@moq/demo:build | src/dist/assets/element-D8KM4yWs.js 56.54 kB │ gzip: 17.98 kB
@moq/demo:build | src/dist/assets/watch-BUCGEsJY.js 58.39 kB │ gzip: 16.22 kB
@moq/demo:build | src/dist/assets/element-CWjm0XCX.js 73.86 kB │ gzip: 22.49 kB
@moq/demo:build | src/dist/assets/connection-PAEX2X18.js 107.73 kB │ gzip: 32.12 kB
@moq/demo:build | src/dist/assets/src-BdGSSZKQ.js 380.95 kB │ gzip: 97.82 kB
@moq/demo:build | src/dist/assets/pool-CTUTBvHa.js 458.25 kB │ gzip: 136.09 kB
@moq/demo:build |
@moq/demo:build | �[32m✓ built in 6.75s�[39m
@moq/demo:build | Done in 8.45s
@moq/publish:build | �[36mvite v8.3.4 �[32mbuilding client environment for production...�[36m�[39m
@moq/publish:build | transforming...
@moq/publish:build | ✓ 137 modules transformed.
@moq/publish:build | rendering chunks...
@moq/publish:build | computing gzip size...
@moq/publish:build | dist/assets/capture-worker.js 0.64 kB
@moq/publish:build | dist/assets/capture-worklet.js 1.37 kB
@moq/publish:build | dist/capture-worker-BJ0xkcGF.js 0.81 kB │ gzip: 0.50 kB │ map: 1.00 kB
@moq/publish:build | dist/index.js 1.06 kB │ gzip: 0.54 kB │ map: 1.57 kB
@moq/publish:build | dist/support/index.js 1.16 kB │ gzip: 0.65 kB │ map: 4.26 kB
@moq/publish:build | dist/support/element.js 1.36 kB │ gzip: 0.54 kB │ map: 3.20 kB
@moq/publish:build | dist/capture-worklet-CRiEEPvQ.js 1.54 kB │ gzip: 0.70 kB │ map: 1.74 kB
@moq/publish:build | dist/video-CKv257p3.js 4.83 kB │ gzip: 1.94 kB │ map: 19.44 kB
@moq/publish:build | dist/microphone-BIV2nutQ.js 8.09 kB │ gzip: 2.43 kB │ map: 35.77 kB
@moq/publish:build | dist/element.js 10.88 kB │ gzip: 3.19 kB │ map: 40.35 kB
@moq/publish:build | dist/ui/element.js 31.00 kB │ gzip: 7.87 kB │ map: 47.32 kB
@moq/publish:build | dist/encoder-Dw1zOOJC.js 61.74 kB │ gzip: 18.12 kB │ map: 291.20 kB
@moq/publish:build | dist/src-BhV_c1Db.js 483.22 kB │ gzip: 111.10 kB │ map: 1,872.47 kB
@moq/publish:build |
@moq/publish:build | �[32m✓ built in 4.02s�[39m
@moq/publish:build | ✍️ Rewriting package.json...
@moq/publish:build | 🔗 Converted @moq/clock: workspace:^ → ^0.1.0
@moq/publish:build | 🔗 Converted @moq/hang: workspace:^ → ^0.5.2
@moq/publish:build | 🔗 Converted @moq/json: workspace:^ → ^0.4.2
@moq/publish:build | 🔗 Converted @moq/net: workspace:^ → ^0.4.2
@moq/publish:build | 🔗 Converted @moq/signals: workspace:^ → ^0.2.5
@moq/publish:build | 🔗 Converted @moq/ui: workspace:^ → ^0.1.0
@moq/publish:build | 🔗 Converted @moq/video: workspace:^ → ^0.1.0
@moq/publish:build | 📄 Copying README.md...
@moq/publish:build | 🔍 Running publint...
@moq/publish:build | 📦 Package built successfully in dist/
@moq/publish:build | Done in 7.16s
@moq/room:build | ✍️ Rewriting package.json...
@moq/room:build | 🔗 Converted @moq/clock: workspace:^ → ^0.1.0
@moq/room:build | 🔗 Converted @moq/hang: workspace:^ → ^0.5.2
@moq/room:build | 🔗 Converted @moq/json: workspace:^ → ^0.4.2
@moq/room:build | 🔗 Converted @moq/net: workspace:^ → ^0.4.2
@moq/room:build | 🔗 Converted @moq/publish: workspace:^ → ^0.5.2
@moq/room:build | 🔗 Converted @moq/signals: workspace:^ → ^0.2.5
@moq/room:build | 🔗 Converted @moq/watch: workspace:^ → ^0.6.2
@moq/room:build | 📄 Copying README.md...
@moq/room:build | 🔍 Running publint...
@moq/room:build | 📦 Package built successfully in dist/
@moq/room:build | ✍️ Generating jsr.json...
@moq/room:build | 📦 jsr.json written
@moq/room:build | Done in 1.09s
error: recipe `check-changed` failed on line 31 with exit code 143
ci: check rs failed
ci: seconds per module
246 check rs (failed)
246 check js (cancelled)
78 check flake
0 check drill
7 check quest
6 check ts_paths
53 check shell
0 check large_files
2 check toml
1 check nix
1 check justfile
247 wall time
error: recipe `ci` failed on line 107 with exit code 101
. |
|
quest land removed this pull request from the queue: the batch check failed (exit 1). Checking moq-pattern...
Checking moq-quic...
Checking moq-relay...
Checking moq-room...
Checking moq-rtc...
Checking moq-rtmp...
Checking moq-rtsp...
Checking moq-scene...
Checking moq-shaper...
Checking moq-sign...
Checking moq-sock...
Checking moq-srt...
Checking moq-stats...
Checking moq-studio...
Checking moq-tokio...
Checking moq-transcode...
Checking moq-uring...
Checking moq-v4l...
Checking moq-video...
Checking qmux...
Checking test-env...
Checking uniffi-bindgen...
Checking macros...
Checking fuzz...
Checking fuzz...
==> test rs
sh/rs/select.sh test "$LIST"
rs: selecting the workspace
rs: selecting the workspace
CARGO_BUILD_WARNINGS=deny RUSTC_WORKSPACE_WRAPPER='/nix/store/4klbl675argl2irhl89zrh2n14wilzx9-rust-minimal-1.98.1/bin/clippy-driver' bash sh/rs/nextest.sh cargo nextest run --locked --tests "$@"
Compiling kio-macros v0.1.0 (/work/rs/kio/macros)
Compiling moq-pattern v0.1.2 (/work/rs/moq-pattern)
Compiling moq-sock v0.2.0 (/work/rs/moq-sock)
Compiling kio v0.6.2 (/work/rs/kio)
Compiling moq-msf v0.5.1 (/work/rs/moq-msf)
Compiling bench-harness v0.0.1 (/work/rs/bench-harness)
Compiling test-env v0.0.1 (/work/rs/test-env)
Compiling moq-video v0.1.10 (/work/rs/moq-video)
Compiling moq-nvenc v0.1.2 (/work/rs/moq-nvenc)
Compiling moq-v4l v0.1.0 (/work/rs/moq-v4l)
Compiling getrandom v0.4.3
Compiling moq-gst v0.4.12 (/work/rs/moq-gst)
Compiling libmoq v0.6.12 (/work/rs/libmoq)
Compiling tempfile v3.27.0
Compiling rand v0.10.3
Compiling moq-native v0.20.0 (/work/rs/moq-native)
Compiling uniffi_pipeline v0.32.2
Compiling cbindgen v0.29.4
Compiling uniffi_meta v0.32.2
Compiling moq-net v0.3.10 (/work/rs/moq-net)
Compiling moq-congestion v0.1.0 (/work/rs/moq-congestion)
Compiling moq-ice v0.1.0 (/work/rs/moq-ice)
Compiling moq-auth v0.2.1 (/work/rs/moq-auth)
Compiling moq-quic v0.1.0 (/work/rs/moq-quic)
Compiling moq-shaper v0.0.1 (/work/rs/moq-shaper)
Compiling uniffi_macros v0.32.2
Compiling moq-auth v0.2.1
Compiling moq-c v0.7.0 (/work/rs/moq-c)
Compiling uniffi v0.32.2
Compiling moq-json v0.5.8 (/work/rs/moq-json)
Compiling moq-loc v0.2.19 (/work/rs/moq-loc)
Compiling qmux v0.7.0 (/work/rs/qmux)
Compiling moq-uring v0.0.12 (/work/rs/moq-uring)
Compiling moq-archive v0.0.11 (/work/rs/moq-archive)
Compiling moq-e2ee v0.0.11 (/work/rs/moq-e2ee)
Compiling hang v0.21.11 (/work/rs/hang)
Compiling moq-tokio v0.19.23 (/work/rs/moq-tokio)
Compiling moq-stats v0.2.12 (/work/rs/moq-stats)
Compiling moq-mux v0.10.11 (/work/rs/moq-mux)
Compiling moq-net-tests v0.0.0 (/work/rs/moq-net-tests)
Compiling moq-relay v0.17.2 (/work/rs/moq-relay)
Compiling moq-audio v0.1.10 (/work/rs/moq-audio)
Compiling moq-hls v0.5.11 (/work/rs/moq-hls)
Compiling moq-rtmp v0.3.11 (/work/rs/moq-rtmp)
Compiling moq-rtc v0.3.12 (/work/rs/moq-rtc)
Compiling moq-srt v0.3.11 (/work/rs/moq-srt)
Compiling moq-rtsp v0.1.0 (/work/rs/moq-rtsp)
Compiling moq-bench v0.0.1 (/work/rs/moq-bench)
Compiling moq-room v0.2.11 (/work/rs/moq-room)
Compiling moq-scene v0.1.0 (/work/rs/moq-scene)
Compiling moq-carla-bridge v0.1.0 (/work/demo/carla/bridge)
Compiling moq-transcode v0.1.10 (/work/rs/moq-transcode)
Compiling moq-cli v0.14.2 (/work/rs/moq-cli)
error: recipe `test-changed` failed on line 82 with exit code 143
ci: check js failed
ci: seconds per module
158 check rs
145 test rs (cancelled)
292 check js (failed)
118 check flake
1 check drill
4 check quest
2 check ts_paths
34 check shell
0 check large_files
1 check toml
0 check nix
0 check justfile
304 wall time
error: recipe `ci` failed on line 107 with exit code 1
. |
|
codex / Codex land fixer: (written by codex / Codex) |
stripInternal drops the @internal Slot from publication.d.ts, but the non-internal makeRendition still named it, so rendition-internal.d.ts imported a missing member and the API report check failed. makeRendition is broadcast-only plumbing that the package never re-exports, so mark it @internal too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Finishes
quest/m2/publish-publication.mdand deletes it, along with its link in the m1 cut audit.Summary
Broadcasthalf: one publication per network broadcast.Broadcastused five name-keyed maps (#kinds,#names,#replacements,#served,#listed) plus a localtracksmap in#run. An internalPublication(js/publish/src/publication.ts) replaces them. It maps each catalog ID to{ id, kind, name, track, owner, slot }and records every track name it has handed out. Each network broadcast creates a new publication, so a rename or amaxAgechange starts names, kinds, replacements, tracks and slots over.hang::catalog::VideoConfig::same_identityandAudioConfig::same_identity. As a result, changing a video'sinterlacedflag moves it to a fresh track name.catalog.mutatesucceeds, so a fold that throws never ends a track the catalog still lists.Encoder half: per-broadcast encoder state moves into the publication.
Slot. It holds the coded-size ceiling, the bitrate and frame-rate maxima, the last enabled config, and the producer's terminal failure (error, a signal).Renditionexposes the current slot as an internal getter.Broadcast#advertisedWeakMap or a per-registration#failureOnce. They read and write the current slot, and fall back to a local slot while no network broadcast serves them (for example, a local preview).out.erroris now derived from the slot's error.errorsWeakMap ininternal.tsis gone. The broadcast's track loop handles failure from the slot instead:Public API: none (
Rendition.slotis@internal). Wire: none.Decisions
Broadcasthalf now, or grow this PR to do the encoder half too?Broadcasthalf only, and leave the encoder half in the quest.#advertisedstate and theerrorsfailure plumbing (internal.ts) into the Publication, so a new network broadcast starts clean. Advertised bitrate and frame-rate peaks resetting on a network-broadcast restart is accepted. (Maintainer, 2026-10-30.)Choices made without asking
encoder.test.ts, "a disabled rendition moved to another broadcast advertises nothing there"). The consequence: a rendition that is disabled (muted) through a network-broadcast restart is left out of the new broadcast's catalog until it is re-enabled, rather than advertised asenabled: false.Broadcastobject was swapped; it now also happens on a rename or amaxAgechange.track.abortis recorded as the slot's failure, so an unrelated rerun of the track loop never revives a failed track.interlacedto video identity, as the Plan's "mirroring Rust's identity rules" calls for.Checks
Land ejection (2026-11-01, failed_checks): reproduced on the merge with main 59e12a5.
bun js/common/api.ts checkfailed withrendition-internal.d.ts:3: Module '"./publication"' has no exported member 'Slot':stripInternaldrops the@internalSlot, but the non-internalmakeRenditionstill named it. Fixed in 37e72d0 by markingmakeRendition@internal(the package never re-exports it). After the fix,python3 sh/js/workspace.py checkon the changed files passes, andtestpasses for every package except one@moq/nettest (see below).@moq/net"a version without a boundary syncs once the request is out" (js/net/src/lite/subscriber.test.ts:2895) failed once in the full sequential run under load and passed 5 of 5 runs of its file alone. This PR doesn't touchjs/net, so it's a flake.python3 sh/js/workspace.py checkandteston the changed files (biome, tsc, builds, and@moq/publishplus dependents): pass, 0 failures. New tests:just test media(Playwright Chromium 156, publisher and player, including republish and late join): all checks passed.Browser tests
publish-ui,encoded-preview,source-selectionandcapture-channel-count(Chromium): 10 pass, 2 fail. Both failures are the watch-element version-list tests ("version lists keep their defaults…" and "version lists refuse unsupported…"), which expect the removedmoq-transport-14. That test file and the code it covers are identical tomain, so they fail onmaintoo; this PR doesn't touch them.quest check --base origin/main: ok.Not verified: Firefox. The media fixture's publisher is Chromium-only (
--media-engineschanges only the player), and this change is publisher-side. Real-device failure paths, such as a GPU encoder dying mid-stream followed by a rename, were not run in a browser; the unit tests cover them with fake encoders.Follow-ups
js/net/src/lite/subscriber.test.ts"a version without a boundary syncs once the request is out", which can fail under load.publish-ui.browser.ts's version-list tests for the drafts 14–17 removal; they fail onmain.Review
quest reviewskipped under the simple-review rule. Since the last review, the only changes are a conflict-free merge of main and a one-line@internaldoc tag onmakeRendition. That tag changes declaration emit only, touches no public API (the symbol isn't re-exported), and changes no runtime behavior. Online reviewers cover this head. The Pullfrog check failure is a billing outage, not a finding.mechanical fix by codex / Codex:
Merged base cleanly; passed bun install --frozen-lockfile --ignore-scripts, bun run --cwd js/publish build, bun run --cwd js/publish test (304 tests), and CARGO_TARGET_DIR=/tmp/land-7323/target RUSTDOCFLAGS="-D warnings" cargo doc --locked --no-deps -p moq-net in /tmp/land-7371.(head 9acd0ef)mechanical fix by codex / Codex:
Merged base, preserving on-demand audio and publication state while following the internal Rendition move; tests blocked by missing workspace dependencies.(head 2b9e51e)quest review --base origin/main), after merging main into the branch.quest/m1/cut-audit/README.md(main had marked moqsrc pad actors landed; this PR marks publish rendition identity landed; both now read "since landed"). Main's test: finish controlled-time test coverage and lint clock reads workspace-wide #7329 denies theperformanceglobal in tests, so the new test "a new network broadcast clears a video encoder failure and its maxima" drops itsperformance.nowspy; the installedManualclock already pins time, as test: finish controlled-time test coverage and lint clock reads workspace-wide #7329 did for the sibling tests (d4d2ad8).rs/moq-net(model/resume.rsreserved group,ietf/subscriber.rsDYNAMIC_GROUPS), refuted: main had moved past the head's merged base, and they are the fixes main landed in 68fb455 (moq-dev/moq#7032) and 08e71cd (moq-dev/moq#7383). The PR touches no Rust; merging main again cleared them.just check origin/maininnix developon 456fc7e: pass (@moq/publish297 pass, 0 fail).Broadcasthalf, a finding to commit renames only after the catalog fold succeeds (publication.ts) was fixed in b965273.(Written by Claude Opus 5.5)
🤖 Generated with Claude Code