Repository navigation
fix(net): lite-05/06 idle copies judge the gap by SUBSCRIBE_START - #7337
Conversation
Quest-Claim: f7656b52e138c0a4
An idle copy on lite-05/06 judged whether its feed skipped past the cache by the first group header. On a descending track that header is the newest group, so readers lost every cached group their max age allowed. Their START names the first group the feed serves, so the copy now goes live once it has both that START and a group header, whichever lands first. No wire or public API change. 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 6 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. Comment |
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: 75497ac.
No actionable defects found. Combining the legacy START's feed floor with the first group header is a focused fix without changing the wire or exposing stale cached content from START alone. Fresh subscription IDs reset both observations; legacy START always supplies a concrete group, and set_live cannot rewind an already-live copy. Pre-05 header behavior and the documented datagram-first exception remain unchanged.
The unit test covers both arrival orders, and the integration regression covers reversed backlog on lite-05/06/07. GitHub-only static review of all changed files and relevant version, decoding, publisher, subscription-lifecycle, and cache-liveness code. No tests or interoperability/latency measurements were run; reported passes were not independently verified.
(Written by OpenAI)
|
Merge summary: no review findings on head (Written by Claude Opus 5.5) |
|
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
. |
|
Re-landing unchanged head The batch failed only (Written by Claude Opus 5.5) |
|
Codex land fixer: …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) |
Finishes
quest/m2/lite-legacy-gap.md(removes it and its link inquest/m2/README.md).Problem
moq-dev/moq#6183 fixed lite-07: an idle relay copy that resubscribes judges whether its feed skipped past the cache from SUBSCRIBE_START's first group. Lite-05/06 still judged it by the first group header. A descending track resends the backlog newest first, so that first header is the newest group. The copy then read a gap after its cache, set a live floor past it, and readers lost every cached group their max age still allowed.
Design
Lite-05/06 SUBSCRIBE_START has no
largest, but it does carryGroup, the first group the feed serves. Our publisher resolves that from the source's start, not from the first group it happens to hold (lite/publisher.rsstart). It is the same value lite-07 now passes toset_live. A group header can still overtake it, since START is on the subscribe stream and groups are on their own uni streams.Options considered:
rejoin_skips_a_cache_kept_by_another_handle. Rejected.Changes
rs/moq-net/src/lite/subscriber.rs:TrackEntrygainsstartandfirst.TrackEntry::answeredmakes the copy live withset_live(first, start)once both are known. On 05/06 the group-header path and the SUBSCRIBE_START handler both feed it. Pre-05 versions have no START, so they keep going live from the header.track.rsis unchanged.rejoin::rejoin_keeps_the_cache_when_the_backlog_lands_newest_firstruns on lite-05, lite-06, and lite-07. A held handle keeps the relay's copy idle with group 0 cached, the publisher writes groups 1 to 3, and the rejoin's backlog is released newest first. Before the fix, 05 and 06 delivered[1, 2, 3]. Now all three versions deliver[0, 1, 2, 3].lite::subscriber::tests::an_idle_copy_judges_the_gap_by_the_startcovers both arrival orders, including a header that overtakes START.Choices made without asking
js/nethas no idle-copy reuse (see moq-dev/moq#6183).Overlap
rs/moq-net/src/lite/subscriber.rs, in other hunks. A text conflict is possible, but there is no semantic overlap.lite/publisher.rsandlite/version.rs, which this PR does not touch.Checks
just fix origin/mainpassed.just check origin/mainpassed (rs, rs_shapes, markdown, gh, quest, shell, and the others).Review
gpt-6.1-sol, medium effort, viaquest review --base origin/main.75497ac326e1bd4965e50b67fc4989b7eaf6db38.Follow-ups
(Written by Claude Opus 5.5)
🤖 Generated with Claude Code