From df9be6854ec13323f83f1f22c66ef5665785adca Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Sun, 25 Oct 2026 18:57:53 -0700 Subject: [PATCH] quest: plan the uncovered Nightly failures from 10-25 Adds quests for the three failures from Nightly 40192013303 that nothing else covers: qmux dead code on iOS, moq-relay integration tests without default features, and the macOS stuck-window eviction flake. Deletes the windows-relay-expect quest, which #6821 already fixed. Co-Authored-By: Claude Opus 5.5 --- quest/m0/nightly/README.md | 3 +- quest/m0/nightly/qmux-ios-dead-code.md | 29 +++++++++++++++++++ quest/m0/nightly/relay-tests-features.md | 22 ++++++++++++++ quest/m0/nightly/windows-relay-expect.md | 23 --------------- quest/m1/test-flakes-2/README.md | 1 + quest/m1/test-flakes-2/stuck-window-evicts.md | 25 ++++++++++++++++ 6 files changed, 79 insertions(+), 24 deletions(-) create mode 100644 quest/m0/nightly/qmux-ios-dead-code.md create mode 100644 quest/m0/nightly/relay-tests-features.md delete mode 100644 quest/m0/nightly/windows-relay-expect.md create mode 100644 quest/m1/test-flakes-2/stuck-window-evicts.md diff --git a/quest/m0/nightly/README.md b/quest/m0/nightly/README.md index 42a09a3cad7..4b10b703c09 100644 --- a/quest/m0/nightly/README.md +++ b/quest/m0/nightly/README.md @@ -33,6 +33,7 @@ Public API: none. Wire: none. ## Required -- [Windows builds moq-relay tests](/quest/m0/nightly/windows-relay-expect.md) - an unfulfilled lint expectation stops failing the Windows build - [OBS audio-candidate test](/quest/m0/nightly/obs-audio-candidate.md) - the failed audio candidate check passes under TSan and load, fixed at its reproduced cause - [Feature shapes per crate](/quest/m0/nightly/hls-poll-closed-gate.md) - moq-hls `Broadcaster::poll_closed` is gated on `server`, and the gate checks each crate's feature shapes in isolation +- [moq-relay tests build without default features](/quest/m0/nightly/relay-tests-features.md) - the integration tests gate their websocket and unix-socket fields on the features that define them +- [qmux builds clean for iOS](/quest/m0/nightly/qmux-ios-dead-code.md) - `TcpStats` is gated to the platforms that implement it, so the iOS simulator build has no dead code diff --git a/quest/m0/nightly/qmux-ios-dead-code.md b/quest/m0/nightly/qmux-ios-dead-code.md new file mode 100644 index 00000000000..290719fe67d --- /dev/null +++ b/quest/m0/nightly/qmux-ios-dead-code.md @@ -0,0 +1,29 @@ +# [XS] qmux builds clean for iOS + +## Goal + +`rs/qmux` compiles for the iOS targets `just swift simulator` builds with no +warnings: `socket.rs`'s `AsRawFd` import, `TcpStats::fd`, and +`TcpStats::borrow` stop showing as dead code there. + +## Plan + +They sit in `mod unix` under `#[cfg(unix)]`, but only the Linux and macOS +`sys` modules read them, so on iOS (unix, neither OS) they are unused. Gate +`TcpStats` and what only it uses on `any(target_os = "linux", target_os = +"macos")`, matching the platforms that implement it, rather than adding an +allow. Its `cfg(unix)` callers follow the same gate and report no socket +stats elsewhere, as they already do off unix: `qmux::tcp::adopt` +(`rs/qmux/src/tcp.rs`), the `lib.rs` re-export, and moq-relay's +`socket_stats` (`rs/moq-relay/src/web.rs`). + +Decided 2026-10-26 (maintainer): fix qmux only. Making the Platform +`cargo check` steps and `just swift simulator` deny warnings is out of scope. + +Found in Nightly +[40192013303](https://github.com/moq-dev/moq/actions/runs/40192013303)'s +macOS platform job, which passes only because those steps do not deny +warnings. + +Public API: `qmux::TcpStats` stops existing on iOS, where it never worked. +Wire: none. diff --git a/quest/m0/nightly/relay-tests-features.md b/quest/m0/nightly/relay-tests-features.md new file mode 100644 index 00000000000..158fa902af5 --- /dev/null +++ b/quest/m0/nightly/relay-tests-features.md @@ -0,0 +1,22 @@ +# [XS] moq-relay tests build without default features + +## Goal + +`cargo clippy -p moq-relay --tests --no-default-features` passes with +warnings denied. Its integration tests use `listen::Config.unix` and +`connect::Config.websocket` only under the features that define them. + +## Plan + +Seven `E0609`s, in `rs/moq-relay/tests/integration/{smoke,auth_lifetime,cluster_unknown,public_rules,session_revalidate}.rs`. +Gate each use (or the tests that need the transport) on its feature instead +of turning the features on for every test build. + +No CI lane builds this shape today. Workspace unification enables moq-relay's +defaults through moq-cli, and Nightly runs +`cargo check -p moq-relay --no-default-features` without `--tests`. Decided +2026-10-26 (maintainer): fix it here on its own; the per-crate lane in +[Feature shapes per crate](/quest/m0/nightly/hls-poll-closed-gate.md) keeps it +fixed once that lands. + +Public API: none. Wire: none. diff --git a/quest/m0/nightly/windows-relay-expect.md b/quest/m0/nightly/windows-relay-expect.md deleted file mode 100644 index 43d2ed3611d..00000000000 --- a/quest/m0/nightly/windows-relay-expect.md +++ /dev/null @@ -1,23 +0,0 @@ -# [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. diff --git a/quest/m1/test-flakes-2/README.md b/quest/m1/test-flakes-2/README.md index 56635bcb105..f113aa519c2 100644 --- a/quest/m1/test-flakes-2/README.md +++ b/quest/m1/test-flakes-2/README.md @@ -43,3 +43,4 @@ Public API: none. Wire: none. - [Media resource instrumentation](/quest/m1/test-flakes-2/resource-instrumentation.md) - the media test stops seeing a playing player report nothing to release - [IETF22 fallback](/quest/m1/test-flakes-2/ietf22-fallback.md) - an IETF22 browser viewer follows a fallback within the media lane's bound, keeping its session and its audio - [Echo report test on mocked time](/quest/m1/test-flakes-2/export-echo-time.md) - the moq-cli echo report test stops taking 35 s of wall time +- [Stuck-window eviction test on macOS](/quest/m1/test-flakes-2/stuck-window-evicts.md) - the evicted writer reliably sees its stop on macOS, fixed at the race diff --git a/quest/m1/test-flakes-2/stuck-window-evicts.md b/quest/m1/test-flakes-2/stuck-window-evicts.md new file mode 100644 index 00000000000..0f8878cc3cb --- /dev/null +++ b/quest/m1/test-flakes-2/stuck-window-evicts.md @@ -0,0 +1,25 @@ +# [S] Stuck-window eviction test on macOS + +## Goal + +`quic::driver::tests::stuck_window_evicts_the_lower_priority` +(`rs/moq-tokio/src/quic/driver/tests.rs`) passes reliably on macOS, fixed at +its cause. + +## Plan + +It failed in Platform run +[40232491446](https://github.com/moq-dev/moq/actions/runs/40232491446) (job +121287165236): the evicted low-priority writer's `stopped()` returned `None` +instead of `Some(0)`, then passed in the next two runs. The likely cause is a +real-socket race: the low stream's write and FIN complete before +STOP_SENDING arrives. Reproduce it first, then make the ordering +deterministic per this epic's rules (hold the low stream open until the +eviction is observed, or drive it without real-socket timing), never by +loosening the assertion. + +The deleted macOS `receive_credit` quest mentioned this test, but +[moq-dev/moq#6732](https://github.com/moq-dev/moq/pull/6732) fixed only +`receive_credit`. + +Public API: none. Wire: none.