From a29a810fd7428ce9ea7f7ccfc9d8f8845ddc098a Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Thu, 5 Nov 2026 23:24:43 -0800 Subject: [PATCH 1/2] quest: point the readback and clap pins at their moq quests; layout waits on scenes - pin-readback points at moq's new m1 readback quest. - sync-clap requires a new pin-audio-tap, for moq's m3 bus source tap. - compose/layout requires the composable-scenes epic. - moq quest links follow moq's 2026-11-05 milestone re-cut, so a pin's "quest file is gone" check no longer reads a moved file as landed. Co-Authored-By: Claude Opus 5.5 --- quest/m0/README.md | 7 ++++--- quest/m0/app-macos.md | 2 +- quest/m0/app-windows.md | 4 ++-- quest/m0/audio-filters.md | 2 +- quest/m0/packaging.md | 4 ++-- quest/m0/pin-aac-encode.md | 4 ++-- quest/m0/pin-audio-filters.md | 2 +- quest/m0/pin-audio-tap.md | 10 ++++++++++ quest/m0/pin-browser-audio.md | 2 +- quest/m0/pin-browser-video.md | 2 +- quest/m0/pin-portal-token.md | 2 +- quest/m0/pin-readback.md | 17 +++++++---------- quest/m0/sync-clap.md | 11 ++++++++--- quest/m0/wayland-sources.md | 2 +- quest/m1/compose/README.md | 2 +- quest/m1/compose/browser.md | 4 ++-- quest/m1/compose/layout.md | 9 +++++++++ 17 files changed, 54 insertions(+), 32 deletions(-) create mode 100644 quest/m0/pin-audio-tap.md diff --git a/quest/m0/README.md b/quest/m0/README.md index e13ffb5d..0bfc85d6 100644 --- a/quest/m0/README.md +++ b/quest/m0/README.md @@ -109,9 +109,10 @@ repository. - [moq-video's browser backends are pinned](/quest/m0/pin-browser-video.md) - the web studio's video slice and browser composition - [moq-audio's browser backends are pinned](/quest/m0/pin-browser-audio.md) - the web studio's audio slice - [moq-video's program readback is pinned](/quest/m0/pin-readback.md) - the readback the Linux virtual camera uses +- [moq-audio's source tap is pinned](/quest/m0/pin-audio-tap.md) - the samples clap-to-measure sync times a clap from ## Related -- [OBS native codecs](https://github.com/moq-dev/moq/blob/main/quest/m2/obs-moq-video/README.md) - the OBS plugin stays the path for creators who stay on OBS -- [Linux capture](https://github.com/moq-dev/moq/blob/main/quest/m2/capture-linux.md) - Wayland window, system audio, and app capture the studio's sources inherit -- [Windows capture](https://github.com/moq-dev/moq/blob/main/quest/m2/capture-windows.md) - app capture and system audio the studio's sources inherit +- [OBS native codecs](https://github.com/moq-dev/moq/blob/main/quest/m3/obs-moq-video/README.md) - the OBS plugin stays the path for creators who stay on OBS +- [Linux capture](https://github.com/moq-dev/moq/blob/main/quest/m3/capture-linux.md) - Wayland window, system audio, and app capture the studio's sources inherit +- [Windows capture](https://github.com/moq-dev/moq/blob/main/quest/m3/capture-windows.md) - app capture and system audio the studio's sources inherit diff --git a/quest/m0/app-macos.md b/quest/m0/app-macos.md index d1854614..bc6da84e 100644 --- a/quest/m0/app-macos.md +++ b/quest/m0/app-macos.md @@ -19,4 +19,4 @@ prompts need a person to answer them, so an unattended agent cannot do this. ## Related -- [Hardware validation](https://github.com/moq-dev/moq/blob/main/quest/m3/video-hardware.md) - capture paths not yet run on real machines +- [Hardware validation](https://github.com/moq-dev/moq/blob/main/quest/m5/video-hardware.md) - capture paths not yet run on real machines diff --git a/quest/m0/app-windows.md b/quest/m0/app-windows.md index b454d21d..10651019 100644 --- a/quest/m0/app-windows.md +++ b/quest/m0/app-windows.md @@ -10,11 +10,11 @@ the studio landed. ## Plan - System audio is `Unsupported` there until - [Windows capture parity](https://github.com/moq-dev/moq/blob/main/quest/m2/capture-windows.md) + [Windows capture parity](https://github.com/moq-dev/moq/blob/main/quest/m3/capture-windows.md) adds WASAPI loopback, so that quest runs it. - Build with `--features capture`, since a default build has image, color, and broadcast sources only. ## Related -- [Hardware validation](https://github.com/moq-dev/moq/blob/main/quest/m3/video-hardware.md) - capture paths not yet run on real machines +- [Hardware validation](https://github.com/moq-dev/moq/blob/main/quest/m5/video-hardware.md) - capture paths not yet run on real machines diff --git a/quest/m0/audio-filters.md b/quest/m0/audio-filters.md index e1e84028..a5569833 100644 --- a/quest/m0/audio-filters.md +++ b/quest/m0/audio-filters.md @@ -12,7 +12,7 @@ missing its deadline shows as failed on its source. Changed 2026-11-02 (maintainer), when the studio moved out of moq: the chain itself, its filters, and the out-of-process plugin host are moq-audio work in -[moq-audio filter chain](https://github.com/moq-dev/moq/blob/main/quest/m3/audio-filters.md). +[moq-audio filter chain](https://github.com/moq-dev/moq/blob/main/quest/m5/audio-filters.md). This quest is the studio's side: the panel, the scene-file shape, and wiring each source's chain into the program bus. diff --git a/quest/m0/packaging.md b/quest/m0/packaging.md index dd4f23f0..8a95f7de 100644 --- a/quest/m0/packaging.md +++ b/quest/m0/packaging.md @@ -9,7 +9,7 @@ is verified to launch and list devices on its platform. ## Plan Decided 2026-10-26 (maintainer): as for the `moq` binary in -[Ship capture and playback](https://github.com/moq-dev/moq/blob/main/quest/m2/cli-packaging.md), moq-studio's defaults +[Ship capture and playback](https://github.com/moq-dev/moq/blob/main/quest/m3/cli-packaging.md), moq-studio's defaults skip any feature that is expensive to build or relies on a system library, and a `release` feature turns on every backend its platform can load without one (`capture`, `openh264`, `vaapi`, `nvidia`, and the platform frameworks). @@ -27,4 +27,4 @@ compositor imports without a copy. ## Related -- [Ship capture and playback](https://github.com/moq-dev/moq/blob/main/quest/m2/cli-packaging.md) - the same distribution checks for the `moq` binary +- [Ship capture and playback](https://github.com/moq-dev/moq/blob/main/quest/m3/cli-packaging.md) - the same distribution checks for the `moq` binary diff --git a/quest/m0/pin-aac-encode.md b/quest/m0/pin-aac-encode.md index 5d99fd95..62a61c23 100644 --- a/quest/m0/pin-aac-encode.md +++ b/quest/m0/pin-aac-encode.md @@ -3,8 +3,8 @@ ## Goal The `moq` submodule includes moq-audio's platform AAC encoders, from -[AudioToolbox AAC encode](https://github.com/moq-dev/moq/blob/main/quest/m2/audio-encode-audiotoolbox.md) on macOS and -[Media Foundation AAC encode](https://github.com/moq-dev/moq/blob/main/quest/m2/audio-encode-mediafoundation.md) on +[AudioToolbox AAC encode](https://github.com/moq-dev/moq/blob/main/quest/m5/audio-encode-audiotoolbox.md) on macOS and +[Media Foundation AAC encode](https://github.com/moq-dev/moq/blob/main/quest/m5/audio-encode-mediafoundation.md) on Windows, which destinations whose ingest requires AAC use. Check: both quest files are gone from moq's `main`. Advance it with diff --git a/quest/m0/pin-audio-filters.md b/quest/m0/pin-audio-filters.md index 0611215e..5f81f61e 100644 --- a/quest/m0/pin-audio-filters.md +++ b/quest/m0/pin-audio-filters.md @@ -3,7 +3,7 @@ ## Goal The `moq` submodule includes moq-audio's per-source filter chain and plugin -host, from [moq-audio filter chain](https://github.com/moq-dev/moq/blob/main/quest/m3/audio-filters.md). +host, from [moq-audio filter chain](https://github.com/moq-dev/moq/blob/main/quest/m5/audio-filters.md). Check: that quest file is gone from moq's `main`. Advance it with `just upgrade-moq` in its own PR, fixing whatever the new API breaks here. diff --git a/quest/m0/pin-audio-tap.md b/quest/m0/pin-audio-tap.md new file mode 100644 index 00000000..8b09e151 --- /dev/null +++ b/quest/m0/pin-audio-tap.md @@ -0,0 +1,10 @@ +# [XS] moq-audio's source tap is pinned + +## Goal + +The `moq` submodule includes moq-audio's tap of a bus source's own samples, +before its delay and stamped with their bus-clock positions, from +[Read a bus source's own samples](https://github.com/moq-dev/moq/blob/main/quest/m3/audio-strip-tap.md). + +Check: that quest file is gone from moq's `main`. Advance it with +`just upgrade-moq` in its own PR, fixing whatever the new API breaks here. diff --git a/quest/m0/pin-browser-audio.md b/quest/m0/pin-browser-audio.md index 4d5999ac..ad41d893 100644 --- a/quest/m0/pin-browser-audio.md +++ b/quest/m0/pin-browser-audio.md @@ -4,7 +4,7 @@ The `moq` submodule includes moq-audio's browser backends (AudioWorklet capture and playback, WebCodecs Opus and AAC), from -[moq-audio in the browser](https://github.com/moq-dev/moq/blob/main/quest/m3/audio-web.md). +[moq-audio in the browser](https://github.com/moq-dev/moq/blob/main/quest/m5/audio-web.md). Check: that quest file is gone from moq's `main`. Advance it with `just upgrade-moq` in its own PR, fixing whatever the new API breaks here. diff --git a/quest/m0/pin-browser-video.md b/quest/m0/pin-browser-video.md index 83e1c87d..3d91d14c 100644 --- a/quest/m0/pin-browser-video.md +++ b/quest/m0/pin-browser-video.md @@ -5,7 +5,7 @@ The `moq` submodule includes moq-video's browser backends (getUserMedia and getDisplayMedia capture, WebCodecs, and VideoFrame import into wgpu) and the wasm32 builds of hang and moq-mux, from -[moq-video in the browser](https://github.com/moq-dev/moq/blob/main/quest/m3/video-web.md). +[moq-video in the browser](https://github.com/moq-dev/moq/blob/main/quest/m5/video-web.md). Check: that quest file is gone from moq's `main`. Advance it with `just upgrade-moq` in its own PR, fixing whatever the new API breaks here. diff --git a/quest/m0/pin-portal-token.md b/quest/m0/pin-portal-token.md index af9c5664..2f269144 100644 --- a/quest/m0/pin-portal-token.md +++ b/quest/m0/pin-portal-token.md @@ -3,7 +3,7 @@ ## Goal The `moq` submodule includes moq-video's persistable xdg-desktop-portal -restore token, from [Linux capture parity](https://github.com/moq-dev/moq/blob/main/quest/m2/capture-linux.md). +restore token, from [Linux capture parity](https://github.com/moq-dev/moq/blob/main/quest/m3/capture-linux.md). Check: that quest's restore-token bullet has landed on moq's `main` (the quest file is gone, or no longer lists it). Advance it with diff --git a/quest/m0/pin-readback.md b/quest/m0/pin-readback.md index d3fddb0b..155b394d 100644 --- a/quest/m0/pin-readback.md +++ b/quest/m0/pin-readback.md @@ -2,18 +2,15 @@ ## Goal -moq-video exposes its GPU readback (the `render::export` readback route: -staging buffers, row unpadding, the mapping lifecycle) without an encoder, -merged on moq's `main` with a moq-side test, and the `moq` gitlink here -includes it. -Check with `just upgrade-moq` and a search of `moq/rs/moq-video` for a public -readback-only constructor. +The `moq` submodule includes moq-video's public readback, which copies a +wgpu texture into packed RGBA with no encoder, from +[Read a texture back without an encoder](https://github.com/moq-dev/moq/blob/main/quest/m1/video-readback.md). + +Check: that quest file is gone from moq's `main`. Advance it with +`just upgrade-moq` in its own PR, fixing whatever the new API breaks here. ## Plan Decided 2026-11-02 (maintainer, on [#9](https://github.com/moq-dev/studio/pull/9)): the Linux virtual camera's -readback lives in moq-video, not in a copy here. The readback is private today -and reachable only through an encoder probe. Land the public API in -moq-dev/moq first; no moq quest tracks it yet. Bump the pin in its own PR, -fixing whatever the bump breaks. +readback lives in moq-video, not in a copy here. diff --git a/quest/m0/sync-clap.md b/quest/m0/sync-clap.md index cdb20d9f..1bc6ccd4 100644 --- a/quest/m0/sync-clap.md +++ b/quest/m0/sync-clap.md @@ -19,6 +19,11 @@ found, or found in only one of the two, fails with the reason rather than setting a guess. The studio sees a source's audio only through its strip's level meter, read -once a frame, which is too coarse to time a clap. Timing it needs the -source's samples, or an onset, with their position on the bus clock, which is -moq-audio work: land it there first and pin it. +once a frame, which is too coarse to time a clap. Decided 2026-11-05 +(maintainer, /quest-plan): moq-audio exposes a tap of the source's samples +before its delay, with their bus-clock positions, and the studio detects the +clap's onset in them itself. Rejected: an onset detector in moq-audio. + +## Required + +- [moq-audio's source tap is pinned](/quest/m0/pin-audio-tap.md) - the microphone's samples on the bus clock the clap is timed from diff --git a/quest/m0/wayland-sources.md b/quest/m0/wayland-sources.md index 8cc404cd..7c68d11a 100644 --- a/quest/m0/wayland-sources.md +++ b/quest/m0/wayland-sources.md @@ -12,7 +12,7 @@ sources capture only X11 and XWayland. Decided 2026-10-26 (maintainer): - **Token:** the portal restore token is persisted, which - [Linux capture parity](https://github.com/moq-dev/moq/blob/main/quest/m2/capture-linux.md) makes possible in + [Linux capture parity](https://github.com/moq-dev/moq/blob/main/quest/m3/capture-linux.md) makes possible in moq-video. This quest consumes it. - **Storage:** the token lives in per-machine state (the XDG state directory, keyed by scene collection and source), never in the scene file, so the scene diff --git a/quest/m1/compose/README.md b/quest/m1/compose/README.md index bfe3fee3..a6870005 100644 --- a/quest/m1/compose/README.md +++ b/quest/m1/compose/README.md @@ -34,7 +34,7 @@ Decided 2026-10-26 (maintainer), the studio's flagship and first in its epic: - **Layout:** the live scene state (items, transforms, transitions, and each element's priority and toggleable flag) as a hang JSON track on the media clock, so any host composites the same frame the studio shows. -- **Browser build:** whichever line [JS-only @moq/net from Rust](https://github.com/moq-dev/moq/blob/main/quest/m2/rs2ts-js.md) +- **Browser build:** whichever line [JS-only @moq/net from Rust](https://github.com/moq-dev/moq/blob/main/quest/m5/rs2ts-js.md) lands. moq's WASM support was removed on 2026-10-31. - **Cost:** every source and the program encode whatever the subscriber demand (decided 2026-10-28, from diff --git a/quest/m1/compose/browser.md b/quest/m1/compose/browser.md index 712a9861..acedf6f6 100644 --- a/quest/m1/compose/browser.md +++ b/quest/m1/compose/browser.md @@ -10,13 +10,13 @@ matching the studio's picture. A broadcast without one plays its program as ## Plan The browser build comes from whichever line -[JS-only @moq/net from Rust](https://github.com/moq-dev/moq/blob/main/quest/m2/rs2ts-js.md) lands (decided 2026-10-26; moq's WASM +[JS-only @moq/net from Rust](https://github.com/moq-dev/moq/blob/main/quest/m5/rs2ts-js.md) lands (decided 2026-10-26; moq's WASM support was removed on 2026-10-31), so this quest does not fix the mechanism. A thin package published from this repository (e.g. `@moq/scene`) wraps it and layers on `@moq/watch`; `@moq/watch` never depends on it, so moq never depends on this repository (decided 2026-11-02, when the studio left moq). Frames reach it as WebCodecs `VideoFrame`s through the browser import -path [moq-video in the browser](https://github.com/moq-dev/moq/blob/main/quest/m3/video-web.md) adds. +path [moq-video in the browser](https://github.com/moq-dev/moq/blob/main/quest/m5/video-web.md) adds. Prove parity with a fixture: the same broadcast composited here and by the studio, compared within a stated tolerance. diff --git a/quest/m1/compose/layout.md b/quest/m1/compose/layout.md index df5f59ce..f293428f 100644 --- a/quest/m1/compose/layout.md +++ b/quest/m1/compose/layout.md @@ -51,3 +51,12 @@ clock, and a viewer that joins late lands at the same point of them. Only sources the creator publishes independently ([Published independently](/quest/m2/publish-independently.md)) have tracks a viewer can fetch; the rest reach viewers only in the program. + +Decided 2026-11-05 (maintainer, /quest-plan): the layout waits for +[Composable scenes](/quest/m0/scenes/README.md), which removes canvases and +mixes and adds scene sources, published scenes, and audio scenes, so it +serializes that model once instead of chasing it. + +## Required + +- [Composable scenes](/quest/m0/scenes/README.md) - the scene model the layout serializes From 69318e019d794401513ac45f73e3aaf9cd3db3d2 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Fri, 6 Nov 2026 07:24:57 -0800 Subject: [PATCH 2/2] quest: pins need the upstream work on moq's main, not just a missing file Co-Authored-By: Claude Opus 5.5 --- quest/m0/pin-aac-encode.md | 6 ++++-- quest/m0/pin-audio-filters.md | 6 ++++-- quest/m0/pin-audio-tap.md | 7 +++++-- quest/m0/pin-browser-audio.md | 6 ++++-- quest/m0/pin-browser-video.md | 6 ++++-- quest/m0/pin-portal-token.md | 4 ++-- quest/m0/pin-readback.md | 7 +++++-- 7 files changed, 28 insertions(+), 14 deletions(-) diff --git a/quest/m0/pin-aac-encode.md b/quest/m0/pin-aac-encode.md index 62a61c23..69535e95 100644 --- a/quest/m0/pin-aac-encode.md +++ b/quest/m0/pin-aac-encode.md @@ -7,5 +7,7 @@ The `moq` submodule includes moq-audio's platform AAC encoders, from [Media Foundation AAC encode](https://github.com/moq-dev/moq/blob/main/quest/m5/audio-encode-mediafoundation.md) on Windows, which destinations whose ingest requires AAC use. -Check: both quest files are gone from moq's `main`. Advance it with -`just upgrade-moq` in its own PR, fixing whatever the new API breaks here. +Check: both quests' PRs have merged on moq's `main`, deleting their files, and +moq-audio's AAC encoders are there. A quest file that moved, or went away +without its work landing, does not count. Advance it with `just upgrade-moq` +in its own PR, fixing whatever the new API breaks here. diff --git a/quest/m0/pin-audio-filters.md b/quest/m0/pin-audio-filters.md index 5f81f61e..a806ba71 100644 --- a/quest/m0/pin-audio-filters.md +++ b/quest/m0/pin-audio-filters.md @@ -5,5 +5,7 @@ The `moq` submodule includes moq-audio's per-source filter chain and plugin host, from [moq-audio filter chain](https://github.com/moq-dev/moq/blob/main/quest/m5/audio-filters.md). -Check: that quest file is gone from moq's `main`. Advance it with -`just upgrade-moq` in its own PR, fixing whatever the new API breaks here. +Check: that quest's PR has merged on moq's `main`, deleting its file, and +moq-audio's filter chain is there. A quest file that moved, or went away +without its work landing, does not count. Advance it with `just upgrade-moq` +in its own PR, fixing whatever the new API breaks here. diff --git a/quest/m0/pin-audio-tap.md b/quest/m0/pin-audio-tap.md index 8b09e151..d7f249d4 100644 --- a/quest/m0/pin-audio-tap.md +++ b/quest/m0/pin-audio-tap.md @@ -6,5 +6,8 @@ The `moq` submodule includes moq-audio's tap of a bus source's own samples, before its delay and stamped with their bus-clock positions, from [Read a bus source's own samples](https://github.com/moq-dev/moq/blob/main/quest/m3/audio-strip-tap.md). -Check: that quest file is gone from moq's `main`. Advance it with -`just upgrade-moq` in its own PR, fixing whatever the new API breaks here. +Check: that quest's PR has merged on moq's `main`, deleting its file, and +`moq_audio::bus` there offers a tap of a source's samples with bus positions. +A quest file that moved, or went away without its work landing, does not +count. Advance it with `just upgrade-moq` in its own PR, fixing whatever the +new API breaks here. diff --git a/quest/m0/pin-browser-audio.md b/quest/m0/pin-browser-audio.md index ad41d893..dbc3b5a0 100644 --- a/quest/m0/pin-browser-audio.md +++ b/quest/m0/pin-browser-audio.md @@ -6,5 +6,7 @@ The `moq` submodule includes moq-audio's browser backends (AudioWorklet capture and playback, WebCodecs Opus and AAC), from [moq-audio in the browser](https://github.com/moq-dev/moq/blob/main/quest/m5/audio-web.md). -Check: that quest file is gone from moq's `main`. Advance it with -`just upgrade-moq` in its own PR, fixing whatever the new API breaks here. +Check: that quest's PR has merged on moq's `main`, deleting its file, and +moq-audio's browser backends are there. A quest file that moved, or went away +without its work landing, does not count. Advance it with `just upgrade-moq` +in its own PR, fixing whatever the new API breaks here. diff --git a/quest/m0/pin-browser-video.md b/quest/m0/pin-browser-video.md index 3d91d14c..da0ed08c 100644 --- a/quest/m0/pin-browser-video.md +++ b/quest/m0/pin-browser-video.md @@ -7,5 +7,7 @@ getDisplayMedia capture, WebCodecs, and VideoFrame import into wgpu) and the wasm32 builds of hang and moq-mux, from [moq-video in the browser](https://github.com/moq-dev/moq/blob/main/quest/m5/video-web.md). -Check: that quest file is gone from moq's `main`. Advance it with -`just upgrade-moq` in its own PR, fixing whatever the new API breaks here. +Check: that quest's PR has merged on moq's `main`, deleting its file, and +moq-video's browser backends are there. A quest file that moved, or went away +without its work landing, does not count. Advance it with `just upgrade-moq` +in its own PR, fixing whatever the new API breaks here. diff --git a/quest/m0/pin-portal-token.md b/quest/m0/pin-portal-token.md index 2f269144..042e3ae5 100644 --- a/quest/m0/pin-portal-token.md +++ b/quest/m0/pin-portal-token.md @@ -5,6 +5,6 @@ The `moq` submodule includes moq-video's persistable xdg-desktop-portal restore token, from [Linux capture parity](https://github.com/moq-dev/moq/blob/main/quest/m3/capture-linux.md). -Check: that quest's restore-token bullet has landed on moq's `main` (the -quest file is gone, or no longer lists it). Advance it with +Check: moq-video on moq's `main` exposes the persistable restore token (the +quest no longer lists it because it landed, not because it moved). Advance it with `just upgrade-moq` in its own PR, fixing whatever the new API breaks here. diff --git a/quest/m0/pin-readback.md b/quest/m0/pin-readback.md index 155b394d..e53ede0f 100644 --- a/quest/m0/pin-readback.md +++ b/quest/m0/pin-readback.md @@ -6,8 +6,11 @@ The `moq` submodule includes moq-video's public readback, which copies a wgpu texture into packed RGBA with no encoder, from [Read a texture back without an encoder](https://github.com/moq-dev/moq/blob/main/quest/m1/video-readback.md). -Check: that quest file is gone from moq's `main`. Advance it with -`just upgrade-moq` in its own PR, fixing whatever the new API breaks here. +Check: that quest's PR has merged on moq's `main`, deleting its file, and +`moq/rs/moq-video` there has a public readback with no encoder probe. A quest +file that moved, or went away without its work landing, does not count. +Advance it with `just upgrade-moq` in its own PR, fixing whatever the new API +breaks here. ## Plan