Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions quest/m0/ci/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ The historical samples locate candidates; they are not controlled benchmarks.

## Required

- [Cargo.lock pins wasm-bindgen](/quest/m0/ci/wasm-bindgen-pin.md) - the dev shell's wasm-bindgen CLI follows `Cargo.lock`, so a nixpkgs bump cannot break WASM on `main`
- [Pin Quest's gate](/quest/m0/ci/quest-gate-pin.md) - make shared command admission available
- [Share local check capacity](/quest/m0/ci/local-gate.md) - gate expensive phases and bound internal fanout
- [Require platform gates](/quest/m0/ci/platform-queue.md) - activate the consolidated platform checks in the main and release rulesets after the workflow lands
Expand Down
30 changes: 30 additions & 0 deletions quest/m0/ci/wasm-bindgen-pin.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# [XS] Cargo.lock pins wasm-bindgen

## Goal

`Cargo.lock` is the only pin for wasm-bindgen: the Nix dev shell's
`wasm-bindgen-cli` follows the locked `wasm-bindgen` crate version, so a
nixpkgs bump can no longer move the CLI away from the crate. A locked version
nixpkgs does not package fails loudly at Nix eval.

## Plan

Why: [#5896](https://github.com/moq-dev/moq/pull/5896) changed only
`flake.lock`, which moved the CLI to 0.2.129 while the crates were still
`=0.2.127`. Dependabot auto-merged it on the required Check and Test while
WASM was red, and [#5911](https://github.com/moq-dev/moq/pull/5911) re-pinned.
Any nixpkgs bump can repeat it.

- `flake.nix` reads the `wasm-bindgen` version from `Cargo.lock`
(`builtins.fromTOML`) and selects nixpkgs' versioned
`wasm-bindgen-cli_0_2_<n>`. The pinned nixpkgs (8edc0c72) carries
`wasm-bindgen-cli_0_2_93` through `_0_2_129`.
- Update the comments beside `wasm-bindgen-cli` in `flake.nix` and beside the
`wasm-bindgen` pin in `rs/moq-wasm/Cargo.toml`, which today say to bump
both together.

Decided 2026-10-19 (maintainer): `Cargo.lock` selects the CLI. Rejected: a CI
step comparing the two versions, which detects drift instead of removing it,
and making Dependabot's auto-merge wait for WASM.

Public API: none. Wire: none.
11 changes: 10 additions & 1 deletion quest/m1/test-flakes-2/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# [S] More tests hold up under load
# More tests hold up under load

## Goal

Expand Down Expand Up @@ -31,8 +31,17 @@ times on a loaded machine, as the first round did. moq-tokio's
`a_subscription_cut_by_the_publisher_disconnecting_does_not_end_clean` is a
known exception, tracked by [SUBSCRIBE_DROP](/quest/m1/subscribe-drop.md).

Added 2026-10-19 (maintainer): three more, the redial pair first since CI
hit it.

Public API: none. Wire: none.

## Required

- [moq-tokio redial tests](/quest/m1/test-flakes-2/tokio-redial.md) - the two redial tests stop assuming a dropped port stays free and stop racing 10 s deadlines
- [moq-ffi cancel during connect](/quest/m1/test-flakes-2/ffi-cancel-connect.md) - `client_cancel_aborts_a_pending_connect` orders its cancel deterministically, fixing the code if the race is real
- [Flapping-peer reorder seed](/quest/m1/test-flakes-2/flapping-peer-reorder.md) - replay one drill seed on current main, and fix it or delete the quest

## Related

- [Controlled time](/quest/m1/time/README.md) - the systemic fix these rules ask for: every crate on a controlled clock
Expand Down
20 changes: 20 additions & 0 deletions quest/m1/test-flakes-2/ffi-cancel-connect.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# [XS] moq-ffi cancel reliably aborts a pending connect

## Goal

The moq-ffi test `client_cancel_aborts_a_pending_connect`
(`rs/moq-ffi/src/test.rs`) passes reliably under load. It fails with
`assertion failed: matches!(connect_err, Err(MoqError::Cancelled))`, locally
2 of 960 runs under load; no CI hit was found.

## Plan

Hypothesis, unconfirmed: `spawn_parked` only guarantees one poll, not that the
connect reached `established()`, so the dial can resolve before `cancel()`.

- Confirm the race first.
- Order the cancel deterministically: in the test, or in the code if a cancel
can lose to a completing connect in production.
- On failure, print the value the connect actually returned.

Public API: none, unless the race is a product bug. Wire: none.
19 changes: 19 additions & 0 deletions quest/m1/test-flakes-2/flapping-peer-reorder.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# [XS] Replay the flapping-peer reorder seed

## Goal

The drill `bursts_cross_a_flapping_peer::impaired` (`rs/moq-relay/tests/drills.rs`)
passes for seed `783778834340462316`, which failed with "the profile never
applied reorder" in run
[39292063137](https://github.com/moq-dev/moq/actions/runs/39292063137) before
[#5943](https://github.com/moq-dev/moq/pull/5943) merged.

## Plan

- Replay the seed on current main with `MOQ_SHAPER_SEED=783778834340462316`.
- If it no longer fails, record the replay in the PR and delete this quest.
- Otherwise fix it at the cause: either the profile should have applied
reorder on that seed, or the shaper's impairment check is wrong for this
drill.

Public API: none. Wire: none.
27 changes: 27 additions & 0 deletions quest/m1/test-flakes-2/tokio-redial.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# [S] moq-tokio redial tests hold up under load

## Goal

The moq-tokio tests `a_failing_redial_reports_why_until_it_connects` and
`a_fleet_drain_redials_through_a_fresh_resolve` (`rs/moq-tokio/src/connection.rs`)
pass reliably under a loaded `just check` and in CI.

## Plan

Seen in [CI](https://github.com/moq-dev/moq/actions/runs/39097647984/job/117587545922).
Locally they failed 5 of 240 runs under load, with several different messages.

Suspected cause: the first test binds a port, drops it, and assumes nothing
listens there afterwards. Under parallel load another process takes the port,
the same pattern [#5873](https://github.com/moq-dev/moq/pull/5873) fixed in
the GStreamer tests. The 10 s deadlines add to it.

- Remove the port-reuse assumption, for example with a listener that refuses
connections or a socket the test keeps holding.
- Assert on events instead of 10 s deadlines.
- Per the epic's rules, a paused tokio clock fights real sockets, so mocking
time alone is not the fix.
- Confirm the second test's cause on its own; it may share the fixture or
fail for a reason of its own.

Public API: none. Wire: none.
1 change: 1 addition & 0 deletions quest/m2/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ ranked just below deterministic TS legs, which it requires.
- [moqsrc A/V sync](/quest/m2/moqsrc-av-sync.md) - a nightly test measures A/V skew from `moqsrc` through clock-synced sinks
- [MP4 export](/quest/m2/mp4-export.md) - `moq export mp4 --output` records crash-safe fragments, then finishes a regular MP4 with moov at the end
- [fMP4 edit lists](/quest/m2/fmp4-edit-lists.md) - the fMP4 importer applies edit lists to frame timestamps
- [MKV import refuses out-of-range values](/quest/m2/mkv-dimension-overflow.md) - the Matroska importer errors on a dimension, channel count, or sample rate that would truncate
- [Linux decoded frames](/quest/m2/obs-decode-linux.md) - present supported native decoded surfaces with visible CPU fallback
- [Windows decoded frames](/quest/m2/obs-decode-windows.md) - present decoded D3D11 surfaces in OBS without CPU readback
- [macOS GPU input](/quest/m2/obs-macos.md) - feed the encoder from the OBS compositor without CPU readback
Expand Down
20 changes: 20 additions & 0 deletions quest/m2/mkv-dimension-overflow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# [XS] MKV import refuses out-of-range values

## Goal

The Matroska importer (`rs/moq-mux/src/container/mkv/import.rs`) refuses a
pixel width or height, channel count, or sampling frequency that does not fit
its catalog field with an import error, instead of truncating it with
`as u32`. Regression tests cover each field.

## Plan

From the [#5893](https://github.com/moq-dev/moq/pull/5893) follow-ups.
Today `coded_width` and `coded_height` come from the track's pixel width and
height through `as u32`, and `Channels` and `SamplingFrequency` the same way.

Decided 2026-10-19 (maintainer): truncation only. Dropped: matching the SPS
aspect ratio 1:1, since FFmpeg prefers the container SAR and we follow
FFmpeg; and a catalog crop field, since nothing needs one.

Public API: none beyond a new import error case. Wire: none.