diff --git a/quest/m0/README.md b/quest/m0/README.md index 033839c9be..161437d2df 100644 --- a/quest/m0/README.md +++ b/quest/m0/README.md @@ -65,6 +65,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.4, before Seattle - [FFI publisher stall](/quest/m0/ffi-publisher-stall.md) - every Go, Python, and C++ publisher cell passes reliably with the serve budgets, and a cell fails when a connection idles out +- [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 - [qmux credit](/quest/m0/qmux-credit.md) - qmux returns connection credit for dropped and stopped streams and delivers its close frame, on both lines diff --git a/quest/m0/watch-paused-spinner.md b/quest/m0/watch-paused-spinner.md new file mode 100644 index 0000000000..bd40394490 --- /dev/null +++ b/quest/m0/watch-paused-spinner.md @@ -0,0 +1,22 @@ +# [XS] The watch buffering spinner never covers the paused play button + +## Goal + +While `` is paused, its buffering indicator stays hidden, so the +centre play button is always clickable, and Interop's resume step never times +out on it. + +## Plan + +Found in #5174 (2026-10-10): in Interop run 38013145379 the `cpp -> js` cell +failed because, after pause, audio stalling raised the buffering spinner +(`js/watch/src/ui/components/buffering-indicator.ts`) over the play button, +and the harness's resume click timed out. Planned in m0, decided 2026-10-10, +because it reddens Interop on unrelated PRs. + +Buffering is not a meaningful state while paused: hide the indicator whenever +playback is paused, and show it again only once playback resumes and still +stalls. Add a browser test that pauses during an audio stall and clicks +resume. No harness workaround such as clicking elsewhere or waiting longer. + +Public API: none. Wire: none. diff --git a/quest/m1/README.md b/quest/m1/README.md index 3049a6b040..2e4d9e05d2 100644 --- a/quest/m1/README.md +++ b/quest/m1/README.md @@ -198,3 +198,4 @@ ladders. - [Import catalog drop](/quest/m1/import-catalog-drop.md) - moq-cli import never drops a catalog producer without finishing it - [JS restart keeps the request](/quest/m1/js-restart-keeps-request.md) - a resolved `@moq/net` request survives a Restart, as in Rust - [WebGPU on Safari](/quest/m1/webgpu-safari.md) - the WebGPU renderer is verified on Safari 26 for macOS and iOS +- [A/V sync across a break](/quest/m1/watch-break-av-sync.md) - `@moq/watch` never plays pre-break audio out of sync with pre-break video diff --git a/quest/m1/watch-break-av-sync.md b/quest/m1/watch-break-av-sync.md new file mode 100644 index 0000000000..7983500cdc --- /dev/null +++ b/quest/m1/watch-break-av-sync.md @@ -0,0 +1,23 @@ +# [S] A player stays in sync across a demand break + +## Goal + +After a demand break (the viewer leaves and returns), +`@moq/watch` never plays pre-break audio out of sync with pre-break video: it +either plays them together or jumps straight to live. + +## Plan + +Found in #5173 (2026-10-10): in one reattach sample of `just test media`, +after the break the player played the old pre-break audio about 1.6 s apart +from the old video before jumping to live. Decided 2026-10-10: plan it as a +player bug. + +Reproduce in the media fixture's reattach case, measuring the audio-video +offset of the first frames presented after the break. Find whether audio and +video take different groups from the relay after the break (the relay hands +the reachable pre-gap GOP by design, per #4914 and #5158) or the player's +sync re-anchors one track and not the other. Fix it at that cause, and assert +the offset in the media check. + +Public API: none expected. Wire: none.