Repository navigation
quest: plan follow-ups from the 2026-10-25 merge wave and Nightly #6817
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
10 commits
Select commit
Hold shift + click to select a range
ea9d725
quest: plan follow-ups from the 2026-10-25 merge wave
kixelated e8a6f15
quest: plan the unowned 2026-10-25 Nightly failures
kixelated dd0c11f
Merge remote-tracking branch 'origin/main' into quest-plan/followups-…
kixelated 3e98919
quest: address review on the 2026-10-25 follow-ups
kixelated 647922a
Merge remote-tracking branch 'origin/main' into HEAD
kixelated 690fd71
quest: OBS audio-candidate quest starts from a reproduction
kixelated 65452e7
Merge remote-tracking branch 'origin/main' into HEAD
kixelated ecbfb19
quest: fold the duplicate OBS audio-candidate quest into m0/nightly
kixelated c8063ec
quest: poll_closed quest also checks feature shapes per crate
kixelated 09edbec
Merge remote-tracking branch 'origin/main' into HEAD
kixelated File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| # [XS] Feature shapes are checked per crate | ||
|
|
||
| ## Goal | ||
|
|
||
| `cargo check -p moq-hls --no-default-features --all-targets` passes with | ||
| warnings denied, and the PR gate checks each selected crate's feature shapes | ||
| in isolation, so dead code behind a feature fails the PR that adds it. | ||
|
|
||
| ## Plan | ||
|
|
||
| moq-hls `Broadcaster::poll_closed` (`rs/moq-hls/src/export/mod.rs:164`) is | ||
| dead under `--no-default-features`: its only caller is the `server` feature's | ||
| eviction loop. Gate it with `#[cfg(feature = "server")]`. | ||
|
|
||
| Neither the gate from | ||
| [moq-dev/moq#6703](https://github.com/moq-dev/moq/pull/6703) nor Nightly | ||
| catches it: workspace feature unification turns `server` on, because moq-cli | ||
| depends on moq-hls with it. Only an isolated moq-hls build shows the warning. | ||
| Make the gate build each selected crate's feature shapes on its own (`-p` per | ||
| crate, not one unified build), and measure the added cost in the PR. | ||
|
|
||
| Found 2026-10-25 for the feature-shapes quest, which #6703 finished first. | ||
|
|
||
| Public API: none. Wire: none. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,27 @@ | ||
| # [S] OBS audio-candidate test passes under TSan and load | ||
|
|
||
| ## Goal | ||
|
|
||
| `cpp/obs/test/moq-source-test.cpp`'s "failed audio candidate preserves | ||
| playback" passes under OBS TSan every night and under load. On 2026-10-25 its check | ||
| `ctx->connection->audio && !ctx->connection->pending_audio` failed with no | ||
| TSan report. [moq-dev/moq#6711](https://github.com/moq-dev/moq/pull/6711) also | ||
| saw it fail intermittently under load, on its base commit too. | ||
|
|
||
| ## Plan | ||
|
|
||
| The cause is not known yet. It is not the counter racing the clear: the | ||
| "Audio track error" log that bumps `g_candidate_failures` and the | ||
| `pending_audio` clear both run under `ctx->mutex`, which the check then takes. | ||
| But the counter is global, also bumped by any "Failed to resolve" or "Failed | ||
| to subscribe", and the check also needs the active `audio` to survive. | ||
| Reproduce first, under TSan or under CPU pressure or `SIGSTOP`/`SIGCONT` | ||
| pauses as [moq-dev/moq#6737](https://github.com/moq-dev/moq/pull/6737) did. | ||
| Find which conjunct fails and which track and error bumped the counter, then | ||
| fix that cause. If the wait is too broad, make it wait on the replacement's | ||
| own failure. Do not add a retry or a sleep. | ||
|
|
||
| Planned 2026-10-25 (maintainer) from the triage of Nightly run | ||
| [40192013303](https://github.com/moq-dev/moq/actions/runs/40192013303). | ||
|
|
||
| Public API: none. Wire: none. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,23 @@ | ||
| # [XS] Windows builds moq-relay's tests | ||
|
|
||
| ## Goal | ||
|
|
||
| Nightly's Windows job builds and runs the test suite again. Since 2026-10-25, | ||
| `cargo test --no-run` fails there with "this lint expectation is unfulfilled" | ||
| at `rs/moq-relay/src/relay.rs:871`. | ||
|
|
||
| ## Plan | ||
|
|
||
| The module-level `#[expect(clippy::disallowed_methods)]` on moq-relay's | ||
| `mod tests` only hits on Unix, because the host-clock tests are `cfg(unix)`. | ||
| `build.warnings=deny` makes the unfulfilled expectation an error. Scope the | ||
| `expect` to the Unix-only tests, or use `cfg_attr(unix, expect(...))`. | ||
|
|
||
| In the same PR, gate or remove the two moq-video items that are dead on | ||
| Windows (`pump.rs` `Read::Idle` and `from_bgra`). They warn today and will | ||
| fail the build the same way. | ||
|
|
||
| Planned 2026-10-25 (maintainer) from the triage of Nightly run | ||
| [40192013303](https://github.com/moq-dev/moq/actions/runs/40192013303). | ||
|
|
||
| Public API: none. Wire: none. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,19 @@ | ||
| # [M] Encoded consumers read gaps and ends | ||
|
|
||
| ## Goal | ||
|
|
||
| The encoded media consumers in moq-ffi (`MoqMediaTrackConsumer`), moq-c's | ||
| `moq_consume_*` reads, and their wrappers surface `Gap` and `End` with the same | ||
| tagged-record read shape the decoded consumers got in | ||
| [moq-dev/moq#6745](https://github.com/moq-dev/moq/pull/6745), instead of | ||
| discarding them. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-10-25 (maintainer, on #6745): the decoded consumers keep the | ||
| tagged-record shape as landed, and the encoded consumers follow in their own | ||
| quest. Mirror #6745 exactly: the same record names, the same end semantics, | ||
| and the same wrapper idioms in py, swift, kt, go, dart, cpp, and cpp/obs. | ||
| Update `doc/lib/*` and run `just test interop --all`. | ||
|
|
||
| Public API: breaking in moq-ffi, moq-c, and every wrapper. Wire: none. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,19 @@ | ||
| # [XS] HLS import logs redact URLs | ||
|
|
||
| ## Goal | ||
|
|
||
| No HLS import log line carries an unredacted playlist or segment URL, so a | ||
| signed query string never reaches the logs. | ||
|
|
||
| ## Plan | ||
|
|
||
| The "selected master playlist renditions" info line | ||
| (`rs/moq-hls/src/import.rs`) prints the audio playlist URL as given. | ||
| [moq-dev/moq#6767](https://github.com/moq-dev/moq/pull/6767) redacted the | ||
| error paths only. | ||
|
|
||
| Route every URL the import logs through the redaction #6767 added, and sweep | ||
| moq-hls for other `tracing` calls that format a URL. A test captures the log | ||
| line and asserts the query string is gone. | ||
|
|
||
| Public API: none. Wire: none. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,26 @@ | ||
| # [XS] Moxygen pins without the TRACK_STATUS patch | ||
|
|
||
| ## Goal | ||
|
|
||
| Waiting on upstream Moxygen. Once | ||
| [facebookexperimental/moxygen#264](https://github.com/facebookexperimental/moxygen/pull/264) | ||
| merges, `nix/moxygen.nix` pins a Moxygen that includes it, | ||
| `nix/moxygen-track-status.patch` is deleted, and the Moxygen interop and | ||
| conformance lanes still pass. | ||
|
|
||
| Check moxygen#264's state. Delete this quest once the patch is gone, or if | ||
| moxygen#264 lands before the patch reaches `main`. | ||
|
|
||
| ## Plan | ||
|
|
||
| The patch is not on `main` yet: | ||
| [moq-dev/moq#6729](https://github.com/moq-dev/moq/pull/6729), still open, adds | ||
| it to `nix/moxygen.nix`'s `patches` and carries it until upstream lands it. Upstream's client has moved to draft-20 Location | ||
| Filters, so the profile patch the pin also applies needs rebasing in the same | ||
| bump. Run `just test interop --all` and the Moxygen smoke lane. | ||
|
|
||
| Public API: none. Wire: none. | ||
|
|
||
| ## Related | ||
|
|
||
| - [Moxygen minimal interop](/quest/m1/smoke-moxygen.md) - the other upstream Moxygen fix the smoke lane waits on |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,23 @@ | ||
| # [S] TS export sends SI after its PMT and PCR | ||
|
|
||
| ## Goal | ||
|
|
||
| A TS export holds its first SI tables until the PMT and one PCR interval are | ||
| out, so an export-to-import hop keeps each table's first emission instead of | ||
| dropping it until the table repeats. | ||
|
|
||
| ## Plan | ||
|
|
||
| Since [moq-dev/moq#6757](https://github.com/moq-dev/moq/pull/6757), TS import | ||
| admits SI only once a valid program-clock interval exists. The export writes | ||
| its first SI ahead of its PMT and PCRs, so the importer drops it. Order the | ||
| export's first output as PAT, PMT, a PCR interval, then SI. A PCR interval | ||
| here is what `si.rs` needs to place a section: one forward PCR step of at most | ||
| `MAX_INTERVAL`, not the importer's two-second catalog window. Test it with an | ||
| export-to-import round trip that sees every SI table's first emission. | ||
|
|
||
| Not planned (2026-10-25, maintainer): bounding SI aging against a source that | ||
| claims a huge mux rate through valid PCR steps. That needs a program-clock | ||
| floor per input byte, a new contract. | ||
|
|
||
| Public API: none. Wire: none. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| # [M] moq-hls export runs on kio | ||
|
|
||
| ## Goal | ||
|
|
||
| moq-hls export's background work (the catalog, timeline, and spans watchers in | ||
| `rs/moq-hls/src/export/{mod,rendition}.rs`, and the init build) runs as | ||
| poll-driven `kio` tasks the export owns, not on `tokio::spawn`, as | ||
| `rs/AGENTS.md` prefers. | ||
|
|
||
| ## Plan | ||
|
|
||
| Do it crate-wide in one PR. Tasks end with their owner instead of being | ||
| detached, which also removes the abort handles kept for them today. Keep the | ||
| timeline watcher's two lifetime rules: a new reference timeline replaces the | ||
| old watcher, and a recording cursor that outlives the `Broadcaster` keeps the | ||
| watcher running until the timeline ends (see `Broadcaster`'s `Drop`). Test | ||
| both. Tests | ||
| keep their own spawns where they drive a runtime. Measure export throughput | ||
| before and after with the existing moq-hls benchmarks. | ||
|
|
||
| Public API: none expected. Wire: none. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| # [S] fMP4 and MKV re-init retire old timelines | ||
|
|
||
| ## Goal | ||
|
|
||
| When an fMP4 or MKV import re-initializes (a new init segment or EBML header | ||
| mid-stream), the old timeline is retired the way | ||
| [moq-dev/moq#6757](https://github.com/moq-dev/moq/pull/6757) retires an ended | ||
| TS route, so import state stays bounded across repeated re-inits. | ||
|
|
||
| ## Plan | ||
|
|
||
| Reuse the retirement #6757 added to `rs/moq-mux/src/timeline.rs`. | ||
| `Timelines::retire` refuses a timeline whose recorder is still live, so each | ||
| re-init finishes and drops the old recorder before retiring, as the TS route | ||
| end does. Test a stream that re-inits many times and assert the import's state | ||
| does not grow. | ||
|
|
||
| Public API: none. Wire: none. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.