diff --git a/quest/m0/README.md b/quest/m0/README.md index 6ce09ef4ea..09f37dba68 100644 --- a/quest/m0/README.md +++ b/quest/m0/README.md @@ -63,6 +63,7 @@ remain and no release waits on them. - [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 +- [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 - [JS track takeover](/quest/m0/js-track-takeover.md) - JS `createTrack` answers a queued request and continues its sequences, as Rust does, so a re-announced `@moq/publish` catalog never restarts its groups diff --git a/quest/m0/check-base.md b/quest/m0/check-base.md new file mode 100644 index 0000000000..834f6a2d5b --- /dev/null +++ b/quest/m0/check-base.md @@ -0,0 +1,30 @@ +# [XS] just check diffs against the PR base + +## Goal + +`just check` and `just fix` diff against the branch's real base (the PR's +base, `origin/main` by default), whatever the local branch is called and +whatever it tracks, so a scoped check never turns into a workspace-wide run. + +## Plan + +Found in #5141 (2026-10-10): an agent iterating a PR on a local branch named +differently from the PR branch ran `just check`, which diffed against +`origin/quest/m1/held-group-wakes` and started a workspace-wide test on the +shared machine. `sh/changed.sh` takes `@{upstream}` as the base and only falls +back to `origin/main` when the upstream has the local branch's own name, so a +branch tracking any other branch (for example a PR head under another local +name) is diffed against that branch. + +Decided 2026-10-10, in m0 because every agent's check on this shared machine +pays for it: pick the base from what the branch merges into, not from what it +tracks. For example, prefer the open PR's base when `gh` finds one, then an +upstream named `main` or `release`, then `origin/main`. `GITHUB_BASE_REF` in CI +and an explicit `BASE` argument keep winning. Print the chosen base, as today. +A stacked PR diffs against its base PR's branch. A missing, offline, or +unauthenticated `gh` falls through quickly and silently, so a local check +never hangs or fails on the lookup. +If the change contradicts AGENTS.md's "set the upstream to the base branch", +fix that line in the same PR. + +Public API: none. Wire: none. diff --git a/quest/m1/README.md b/quest/m1/README.md index 79dbd028b3..670edc6190 100644 --- a/quest/m1/README.md +++ b/quest/m1/README.md @@ -201,3 +201,5 @@ ladders. - [Request ID order](/quest/m1/request-id-order.md) - drafts 14 to 16 refuse a reused or lower Request ID in both languages - [Watch follows a covering prefix](/quest/m1/watch-follow-prefix.md) - `@moq/watch` moves to a covering prefix when the exact route ends, as `moq play` does - [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 diff --git a/quest/m1/js-restart-keeps-request.md b/quest/m1/js-restart-keeps-request.md new file mode 100644 index 0000000000..2587b3a409 --- /dev/null +++ b/quest/m1/js-restart-keeps-request.md @@ -0,0 +1,32 @@ +# [S] A resolved JS request survives a Restart, as in Rust + +## Goal + +When a dynamic claim's epoch changes (a `Restart` downstream), an +already-resolved `@moq/net` request keeps its resolved broadcast, as Rust's +does, instead of ending as unroutable. Subscriptions on the old broadcast stay +until the application drops them, per the broadcast-epoch line; new requests +resolve under the new epoch. + +## Plan + +Found in #5141 (2026-10-10): on an epoch change JS ends a resolved request +handle (it reports unroutable), while Rust keeps the resolved broadcast. Open +track subscriptions survive in both. Decided 2026-10-10: align JS to Rust, +since the broadcast-epoch README keeps subscriptions on the old broadcast +until the application drops them. Rejected: ending resolved requests in both, +and documenting the difference. + +Find where `js/net/src/origin.ts` ends the resolved handle on a server reset +and keep it, without letting it serve anything new under the old epoch +(never-stitch still holds). Reproduce with `Dynamic.update` changing the +epoch in place, the case #5141's `Dynamic::update` doc and `dynamic_epoch_*` +relay tests pin down; a second publish at the path is a different case that +both languages already cover (`a_newer_epoch_leaves_the_broadcast_in_flight`). +Add the test to `js/net/src/origin.test.ts`, failing before the fix. + +Public API: behavior only. Wire: none. + +## Required + +- [Dynamic epoch](/quest/m0/broadcast-epoch/dynamic-epoch.md) - #5141, which corrects the Rust `Dynamic::update` doc this quest aligns JS to diff --git a/quest/m1/webgpu-safari.md b/quest/m1/webgpu-safari.md new file mode 100644 index 0000000000..a37c812c4c --- /dev/null +++ b/quest/m1/webgpu-safari.md @@ -0,0 +1,36 @@ +# [S] The WebGPU renderer is verified on Safari 26 + +## Goal + +`@moq/video`'s WebGPU path is verified on Safari 26, on macOS and iOS: H.264 +and biplanar frames import through `importExternalTexture`, orientation is +right, and a frame that fails to import is handled as decided below, with +evidence. + +## Plan + +Planned 2026-10-10 as a follow-up of #5138, which ships the renderer +untested on Safari. Known Safari 26 issues with `importExternalTexture`: H.264 +frames, biplanar formats, and iOS orientation. + +- Run `` and the `` preview with `backend` set to + `auto` and `webgpu` on real Apple hardware or a hosted Safari session, over + H.264 and the other catalog codecs, in each orientation. +- #5138 decided an unimportable frame stays loud (it throws and that frame is + skipped). Revisit with what Safari actually does: keep it, or add a + `RendererError` value for it. +- Fix what breaks at its source. If the probe passes but frames fail, consider + extending the probe rather than a runtime fallback, which #5138 rejected. + +Needs a human-run or hosted Safari session; a background agent reports +instead of guessing. + +Public API: possibly a new `RendererError` value. Wire: none. + +## Required + +- [WebGPU renderer](/quest/m1/webgpu-renderer.md) - the renderer and `@moq/video` package (#5138) this verifies + +## Related + +- [WebGPU HDR](/quest/m1/webgpu-hdr.md) - builds on the same renderer