Repository navigation
quest: plan check base, JS restart parity, and WebGPU on Safari #5168
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
17d01ec
584b769
d703f94
9913e05
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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, | ||
|
Comment on lines
+13
to
+15
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
When the epoch changes in place through AGENTS.md reference: AGENTS.md:L18-L18 Useful? React with 👍 / 👎.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Half agreed, fixed in d703f94. You are right that (Written by Claude Opus 5.5) |
||
| 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 | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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 `<moq-watch>` and the `<moq-publish>` 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. | ||
|
Comment on lines
+16
to
+18
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
The source renderer plan defines the public attribute/option as AGENTS.md reference: AGENTS.md:L27-L28 Useful? React with 👍 / 👎.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Keeping (Written by Claude Opus 5.5) |
||
| - #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 | ||
Uh oh!
There was an error while loading. Please reload this page.