diff --git a/quest/m0/README.md b/quest/m0/README.md index 8f7672474e..d1328ef31c 100644 --- a/quest/m0/README.md +++ b/quest/m0/README.md @@ -61,6 +61,7 @@ remain and no release waits on them. - [CI host](/quest/m0/ci-host.md) - the maintainer brings up the spare desktop as the `moq-ci` and `moq-gpu` runner host - [Draft-22 media on 0.17](/quest/m0/release-22/README.md) - a 0.17.x with the LOCATION_FILTER and FIRST_OBJECT fixes and moq-noq 1.3.5, before Seattle - [TS duration fidelity](/quest/m0/ts-duration-fidelity.md) - Interop's TS compliance captures the whole round-tripped stream again, fixing a regression that turns Interop red on main +- [Interop latecomer control](/quest/m0/interop-latecomer-control.md) - the lagging-latecomer control fails as designed, and a red Interop step no longer skips the TS steps - [Paused spinner](/quest/m0/watch-paused-spinner.md) - the watch buffering spinner never covers the paused play button, so Interop's resume step can click it - [Check base](/quest/m0/check-base.md) - `just check` diffs against the PR's base whatever the local branch tracks, so scoped checks stay scoped - [web-transport releases the qmux fixes](/quest/m0/qmux-credit-upstream.md) - waiting on moq-dev/web-transport#412 and #413 to merge and ship, which qmux credit bumps to diff --git a/quest/m0/interop-latecomer-control.md b/quest/m0/interop-latecomer-control.md new file mode 100644 index 0000000000..544411f9cc --- /dev/null +++ b/quest/m0/interop-latecomer-control.md @@ -0,0 +1,31 @@ +# [S] Interop's lagging latecomer control fails as designed + +## Goal + +Interop's "control: lagging latecomer" negative control reliably fails +"late join reaches live", so a passing positive case means something. A +failing Interop step no longer hides the steps after it: the TS steps run +and report on their own whatever the browser media step did. + +## Plan + +Found on #5207 (2026-10-10). The control (`test/interop/interop.sh`, added in +#5173) runs `test/interop/clients/js/media.ts --lag --cases late-join +--expect-fail "late join reaches live"`. In 3 of 4 runs on #5207, and on +unrelated PRs, the lagged latecomer still reached live, so the control +failed. Because the media step fails first, CI skips every TS Interop step, +so TS regressions can land with no CI signal (the `--headroom` arm added in +#5207 has not run in CI yet). + +- Find why `--lag` doesn't keep the player behind `LIVE_LAG_FRAMES` (the + player may catch up, the delay may not apply, or live detection may be too + loose), and fix that at its cause. Never widen thresholds, add retries, or + lengthen timeouts. +- Decided (2026-10-10): in this quest, make the Interop steps independent, so + one red step never skips another. The job still fails if any step fails. + +Public API: none. Wire: none. + +## Related + +- [TS duration fidelity](/quest/m0/ts-duration-fidelity.md) - the other failure that keeps Interop red on main diff --git a/quest/m1/tstd/README.md b/quest/m1/tstd/README.md index a748afd30c..10a4d62c11 100644 --- a/quest/m1/tstd/README.md +++ b/quest/m1/tstd/README.md @@ -37,6 +37,7 @@ nightly. - [Send-ahead within the delay](/quest/m1/tstd/send-ahead.md) - total lag is `--delay`, send-ahead included, with a 1 s default - [Mux-rate hold](/quest/m1/tstd/mux-rate-hold.md) - import publishes its catalog once the mux rate is measured, so export is constant-rate from the start +- [PSI runs](/quest/m1/tstd/psi-runs.md) - aligned keyframes never lay identical PAT/PMT runs back to back, so the system buffer holds ## Related diff --git a/quest/m1/tstd/psi-runs.md b/quest/m1/tstd/psi-runs.md new file mode 100644 index 0000000000..cba4f19d17 --- /dev/null +++ b/quest/m1/tstd/psi-runs.md @@ -0,0 +1,26 @@ +# [S] A TS slot never repeats a PSI run back to back + +## Goal + +When keyframes on several video PIDs align in one slot, the export does not +lay identical PAT and PMT runs back to back, so the system buffer (512 bytes, +ISO 13818-1 2.4.2.3) never overflows at 25 Mb/s and up. Each send-ahead unit +still leads with its own tables as a tune-in point, and changed tables (a new +PMT version) always go out, in order. + +## Plan + +Found by Codex on #5207 (`schedule.rs`, repeated PSI groups). It exists on +`main` before #5207 too. Keeping each table once per slot was tried and broke +`aac_program_config_follows_each_table`, because send-ahead units need their +own tables. + +- Start from the author's narrower diff on #5207 + (https://github.com/moq-dev/moq/pull/5207#discussion_r4239051134): drop a run + only when the same flush would lay it right after an identical run, and pad + the dropped packets back with nulls in a padded slot. +- Test against system-buffer fill with the T-STD model, not a packet count: + three or more aligned video keyframes at 25 Mb/s overflow today, and pass + after the fix. The AAC tune-in test still passes. + +Public API: none. Wire: none.