diff --git a/quest/README.md b/quest/README.md index aeeecaa..8d7f964 100644 --- a/quest/README.md +++ b/quest/README.md @@ -21,3 +21,4 @@ there first. A quest here that needs it waits on a pin quest, which - [m0: the studio](/quest/m0/README.md) - the native and wasm studio for creators who rely on OBS today - [m1: after the studio ships](/quest/m1/README.md) - viewers and a server compose a broadcast from its sources and a layout track, plus studio features held past m0 - [m2: later](/quest/m2/README.md) - work with no consumer yet +- [m3: someday](/quest/m3/README.md) - work no customer asks for, kept so its plans are not lost diff --git a/quest/m0/README.md b/quest/m0/README.md index 3d34c96..a92b9b9 100644 --- a/quest/m0/README.md +++ b/quest/m0/README.md @@ -60,7 +60,7 @@ cameras, packaging, signing) that one monorepo no longer pays off. - **Pin:** moq is a `moq` git submodule whose crates are path dependencies, as in moq.pro, so the studio compiles against one moq checkout. - **moq-scene** moved here with the app, its only consumer. The - [viewer-side composition](/quest/m2/compose/README.md) epic (now m2) moved whole: + [viewer-side composition](/quest/m3/compose/README.md) epic (now m3) moved whole: browser composition ships as a package from this repository layered on `@moq/watch`, and the server composite is a headless binary here rather than a moq-cli subcommand, so moq never depends on the studio. @@ -77,7 +77,7 @@ broadcast reaches viewers, not the fallback. Sources are not published to the relay by default (decided 2026-11-03 on [moq-dev/studio#21](https://github.com/moq-dev/studio/pull/21)), because each encoding costs an encoder session and consumer GPUs have few, so the -[viewer-side composition](/quest/m2/compose/README.md) epic moved to m1. +[viewer-side composition](/quest/m3/compose/README.md) epic moved to m1. Overlays and animation render into the program here, and travel to viewers in the layout track only once that epic lands. diff --git a/quest/m2/README.md b/quest/m2/README.md index 069465b..73939c8 100644 --- a/quest/m2/README.md +++ b/quest/m2/README.md @@ -7,16 +7,11 @@ it. ## Plan -Opened 2026-11-05 (maintainer, /quest-plan) for publishing a source -independently, which no service uses yet. A quest moves up to m0 or m1 when a -consumer appears. - -Viewer-side composition moved here from m1 on 2026-11-07 (maintainer, on -[moq-dev/studio#97](https://github.com/moq-dev/studio/pull/97)): it composes -from sources published independently, so it follows that quest. +Opened 2026-11-05 (maintainer, /quest-plan). A quest moves up to m0 or m1 +when a consumer appears. Publishing a source independently and viewer-side +composition moved on to [m3](/quest/m3/README.md) on 2026-11-07 (maintainer): +no customer asks for them. ## Required -- [Published independently](/quest/m2/publish-independently.md) - a source opts out of the program and publishes its own track for services that place it themselves -- [Viewer-side composition](/quest/m2/compose/README.md) - independently published sources plus a layout track, composed by viewers and by a server - [Overlays drop their Blitz panic guard](/quest/m2/overlay-blitz-release.md) - the next Blitz release lets overlay checks parse without `catch_unwind` diff --git a/quest/m3/README.md b/quest/m3/README.md new file mode 100644 index 0000000..f47bc5e --- /dev/null +++ b/quest/m3/README.md @@ -0,0 +1,17 @@ +# m3: someday + +## Goal + +Work no customer is asking for, kept so its plans are not lost. Nothing here +is offered for work until a customer need moves it up. + +## Plan + +Opened 2026-11-07 (maintainer, /quest-spawn): publishing a source +independently drives no customer demand, so it and the viewer-side +composition epic that requires it moved here from m2. + +## Required + +- [Published independently](/quest/m3/publish-independently.md) - a source opts out of the program and publishes its own track for services that place it themselves +- [Viewer-side composition](/quest/m3/compose/README.md) - independently published sources plus a layout track, composed by viewers and by a server diff --git a/quest/m2/compose/README.md b/quest/m3/compose/README.md similarity index 90% rename from quest/m2/compose/README.md rename to quest/m3/compose/README.md index f36a81a..4e6a7f7 100644 --- a/quest/m2/compose/README.md +++ b/quest/m3/compose/README.md @@ -49,7 +49,7 @@ more encoder sessions than a consumer GPU has (decided 2026-11-03 on are not published to the relay by default: a source's own track encodes only while something in the studio uses it, such as an isolated recording or a replay, and reaches viewers only when the creator ticks -[Published independently](/quest/m2/publish-independently.md). The Delivery +[Published independently](/quest/m3/publish-independently.md). The Delivery and Cost bullets above, and this epic's parity goal, are deferred with it: a source published independently is left out of the program, so no picture a viewer composes from fetchable tracks matches the program today. When this @@ -59,12 +59,12 @@ independent sources layered over it) and replan those bullets. Moved to m2 on 2026-11-07 (maintainer, on [moq-dev/studio#97](https://github.com/moq-dev/studio/pull/97)): nothing in m1 can fetch a source's track, so nothing can read a layout. The layout waits on -[Published independently](/quest/m2/publish-independently.md), and the +[Published independently](/quest/m3/publish-independently.md), and the browser, server, and controls quests wait on it through the layout. ## Required -- [Layout track](/quest/m2/compose/layout.md) - the live scene state as a hang JSON track on the media clock, specified in the hang draft -- [Browser composition](/quest/m2/compose/browser.md) - `@moq/watch` composes a broadcast with a layout track through moq-scene's browser build -- [Server composition](/quest/m2/compose/server.md) - a headless compositor renders the program from sources and layout, headless -- [Viewer controls](/quest/m2/compose/controls.md) - viewers toggle elements and the layout's priorities steer what they fetch +- [Layout track](/quest/m3/compose/layout.md) - the live scene state as a hang JSON track on the media clock, specified in the hang draft +- [Browser composition](/quest/m3/compose/browser.md) - `@moq/watch` composes a broadcast with a layout track through moq-scene's browser build +- [Server composition](/quest/m3/compose/server.md) - a headless compositor renders the program from sources and layout, headless +- [Viewer controls](/quest/m3/compose/controls.md) - viewers toggle elements and the layout's priorities steer what they fetch diff --git a/quest/m2/compose/browser.md b/quest/m3/compose/browser.md similarity index 94% rename from quest/m2/compose/browser.md rename to quest/m3/compose/browser.md index f14a32a..eac1e21 100644 --- a/quest/m2/compose/browser.md +++ b/quest/m3/compose/browser.md @@ -23,5 +23,5 @@ studio, compared within a stated tolerance. ## Required -- [Layout track](/quest/m2/compose/layout.md) - what the browser composes +- [Layout track](/quest/m3/compose/layout.md) - what the browser composes - [moq-video's browser backends are pinned](/quest/m0/pin-browser-video.md) - browser frames into wgpu diff --git a/quest/m2/compose/controls.md b/quest/m3/compose/controls.md similarity index 93% rename from quest/m2/compose/controls.md rename to quest/m3/compose/controls.md index a4f664a..6e9406d 100644 --- a/quest/m2/compose/controls.md +++ b/quest/m3/compose/controls.md @@ -20,4 +20,4 @@ of them is on, at the highest priority among them. ## Required -- [Browser composition](/quest/m2/compose/browser.md) - the viewer that exposes the toggles +- [Browser composition](/quest/m3/compose/browser.md) - the viewer that exposes the toggles diff --git a/quest/m2/compose/layout.md b/quest/m3/compose/layout.md similarity index 95% rename from quest/m2/compose/layout.md rename to quest/m3/compose/layout.md index 269204c..032c2c3 100644 --- a/quest/m2/compose/layout.md +++ b/quest/m3/compose/layout.md @@ -49,7 +49,7 @@ their scene went on program, so the layout says when that was on the media 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 +([Published independently](/quest/m3/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 serializes the @@ -58,7 +58,7 @@ canvases and mixes they replaced. Decided 2026-11-07 (maintainer, on [moq-dev/studio#97](https://github.com/moq-dev/studio/pull/97)): this quest -waits on [Published independently](/quest/m2/publish-independently.md), since +waits on [Published independently](/quest/m3/publish-independently.md), since until then no viewer can fetch a track the layout names, and the epic moved to m2 with it. Once that lands, replan this quest around the epic's reference picture, which decides what the layout carries. Rejected: replanning now @@ -68,4 +68,4 @@ it. ## Required -- [Published independently](/quest/m2/publish-independently.md) - the source tracks a viewer can fetch, which the layout names +- [Published independently](/quest/m3/publish-independently.md) - the source tracks a viewer can fetch, which the layout names diff --git a/quest/m2/compose/server.md b/quest/m3/compose/server.md similarity index 93% rename from quest/m2/compose/server.md rename to quest/m3/compose/server.md index 296ae95..c0ab5e0 100644 --- a/quest/m2/compose/server.md +++ b/quest/m3/compose/server.md @@ -22,4 +22,4 @@ and document it in `README.md`. ## Required -- [Layout track](/quest/m2/compose/layout.md) - what the server composes +- [Layout track](/quest/m3/compose/layout.md) - what the server composes diff --git a/quest/m2/publish-independently.md b/quest/m3/publish-independently.md similarity index 90% rename from quest/m2/publish-independently.md rename to quest/m3/publish-independently.md index b8c13e2..d528633 100644 --- a/quest/m2/publish-independently.md +++ b/quest/m3/publish-independently.md @@ -23,7 +23,8 @@ source among those on program (`Publish::set_on_program` in `rs/moq-scene/src/publish.rs`) keeps it encoding. Moved to m2 on 2026-11-05 (maintainer, /quest-plan): no service places -sources itself yet, so it waits behind m0 and m1. +sources itself yet, so it waits behind m0 and m1. Moved on to m3 on +2026-11-07 (maintainer, /quest-spawn): it drives no customer demand. A source with its background removed (`background = "remove"`) keeps the background in its track, since H.264 carries no transparency. Publishing one @@ -37,4 +38,4 @@ user does, so `README.md` documents them. ## Related -- [Viewer-side composition](/quest/m2/compose/README.md) - the epic that composes from independently published sources +- [Viewer-side composition](/quest/m3/compose/README.md) - the epic that composes from independently published sources