From 57d8cf92b791de5a3c9df34d02b20e290f5bb7f8 Mon Sep 17 00:00:00 2001 From: Luke Curley <432854+kixelated@users.noreply.github.com> Date: Tue, 10 Nov 2026 12:28:19 -0800 Subject: [PATCH] chore: bump quest to 2572be9c Adds the quest-run skill stub, and drops the child lists epics no longer carry (quest check now rejects them). Co-Authored-By: Claude Opus 5.5 --- .claude/skills/quest-afk/SKILL.md | 2 +- .claude/skills/quest-review/SKILL.md | 2 +- .claude/skills/quest-run/SKILL.md | 7 + flake.lock | 14 +- flake.nix | 2 +- quest/README.md | 9 -- quest/m0/README.md | 12 -- quest/m0/ci/README.md | 8 -- quest/m0/nightly/README.md | 4 - quest/m0/test-flakes-2/README.md | 4 - quest/m1/README.md | 21 --- quest/m1/audio-jitter-target/README.md | 10 -- quest/m1/explicit-state/README.md | 4 - quest/m1/stream-credit/README.md | 4 - quest/m2/README.md | 14 -- quest/m2/cluster-routing/README.md | 5 - quest/m2/cluster-routing/routes/README.md | 8 -- quest/m2/probe/README.md | 4 - quest/m2/subscribe-ranges/README.md | 6 - quest/m2/time-addressing/README.md | 11 -- quest/m2/unbounded-groups/README.md | 6 - quest/m3/README.md | 166 ---------------------- quest/m3/c/README.md | 2 - quest/m3/cache-routing/README.md | 1 - quest/m3/intra-refresh/README.md | 9 -- quest/m3/layers/README.md | 6 - quest/m3/mesh/README.md | 9 -- quest/m3/obs-moq-video/README.md | 7 - quest/m3/obs-studio/README.md | 4 - quest/m3/one-port/README.md | 5 - quest/m3/qos/README.md | 6 - quest/m3/quic-realtime/README.md | 4 - quest/m3/release/README.md | 24 ---- quest/m3/stats/README.md | 9 -- quest/m3/stream/README.md | 6 - quest/m3/vendor-sync/README.md | 11 -- quest/m3/video-quality/README.md | 8 -- quest/m3/webrtc/README.md | 11 -- quest/m3/wire-stats/README.md | 7 - quest/m4/README.md | 92 ------------ quest/m4/kio-channel-contention/README.md | 5 - quest/m4/p2p/README.md | 9 -- quest/m4/perf/README.md | 12 -- quest/m4/stream-transports/README.md | 7 - quest/m5/README.md | 56 -------- quest/m5/e2ee/README.md | 19 --- quest/m5/net-wrap/README.md | 9 -- 47 files changed, 17 insertions(+), 644 deletions(-) create mode 100644 .claude/skills/quest-run/SKILL.md diff --git a/.claude/skills/quest-afk/SKILL.md b/.claude/skills/quest-afk/SKILL.md index 9f1c2c90d56..2d986ae7d13 100644 --- a/.claude/skills/quest-afk/SKILL.md +++ b/.claude/skills/quest-afk/SKILL.md @@ -1,6 +1,6 @@ --- name: quest-afk -description: Keep quest work moving while the user is away, leaving every decision for their return. +description: Keep this session's work going while the user is away, taking your recommendations and deferring merge picks until they return. --- Run `quest skill afk` and follow its output. diff --git a/.claude/skills/quest-review/SKILL.md b/.claude/skills/quest-review/SKILL.md index 84906a4c5c7..39c62d32e58 100644 --- a/.claude/skills/quest-review/SKILL.md +++ b/.claude/skills/quest-review/SKILL.md @@ -1,6 +1,6 @@ --- name: quest-review -description: Review a PR's branch locally with a model that wrote none of it, then mark it ready for review. +description: Review a PR's branch locally with a model other than its latest writer, then mark it ready for review. --- Run `quest skill review` and follow its output. diff --git a/.claude/skills/quest-run/SKILL.md b/.claude/skills/quest-run/SKILL.md new file mode 100644 index 00000000000..3396859e5c5 --- /dev/null +++ b/.claude/skills/quest-run/SKILL.md @@ -0,0 +1,7 @@ +--- +name: quest-run +description: Run a project's quest work from one session, starting ready quests and taking open PRs to merge in a loop until only the user's decisions remain. +--- + +Run `quest skill run` and follow its output. +If `quest` is not installed, follow https://github.com/moq-dev/quest/blob/main/SETUP.md first. diff --git a/flake.lock b/flake.lock index 70fc3d68838..2bf1c8adcb0 100644 --- a/flake.lock +++ b/flake.lock @@ -77,28 +77,28 @@ "quest-pinned": "quest-pinned" }, "locked": { - "lastModified": 1794089039, - "narHash": "sha256-HZVGUPSw4xRsHgI1xxuZhUbRTdnPlz6OHx/hdUew668=", + "lastModified": 1794341269, + "narHash": "sha256-Ny8Xhd+0un/2hh4rPr4aUnonVLnhqGysoI5XHcnDVv8=", "owner": "moq-dev", "repo": "quest", - "rev": "6a18b8a815c2d15d37d7433a619f961ec5a07165", + "rev": "2572be9c459fc8831a400148c44626527ac32865", "type": "github" }, "original": { "owner": "moq-dev", "repo": "quest", - "rev": "6a18b8a815c2d15d37d7433a619f961ec5a07165", + "rev": "2572be9c459fc8831a400148c44626527ac32865", "type": "github" } }, "quest-pinned": { "flake": false, "locked": { - "lastModified": 1794013809, - "narHash": "sha256-0oc+GpBYSBVXsUBTdJ26HgsIGyak4uZ85/V3fJPCdeI=", + "lastModified": 1794155982, + "narHash": "sha256-KuQQ8ykYgTd0kJ76PA8Jao/UQcoxn7X9uZCj3lV8alE=", "owner": "moq-dev", "repo": "quest", - "rev": "4b07dd37466d6fe6af5c9de3d6f1efd7f693aba7", + "rev": "7fe979312b792108a8911a0b38dfc3fd2bb38774", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 476b8bfea12..31bac7db299 100644 --- a/flake.nix +++ b/flake.nix @@ -32,7 +32,7 @@ # The quest CLI, which also serves the quest guide and skills the stubs in # .claude/skills call. Bump the rev to upgrade them. quest = { - url = "github:moq-dev/quest/6a18b8a815c2d15d37d7433a619f961ec5a07165"; + url = "github:moq-dev/quest/2572be9c459fc8831a400148c44626527ac32865"; inputs.nixpkgs.follows = "nixpkgs"; inputs.flake-utils.follows = "flake-utils"; }; diff --git a/quest/README.md b/quest/README.md index 44d4a25ff1e..19f5ad3323b 100644 --- a/quest/README.md +++ b/quest/README.md @@ -51,12 +51,3 @@ that fails intermittently in CI, Nightly, or the merge queue becomes a child of m0's [test flakes](/quest/m0/test-flakes-2/README.md) epic. Skills that plan follow-ups plan a reported flake there without asking whether or where; the planning PR's review is the check. - -## Required - -- [m0: immediate priorities](/quest/m0/README.md) - urgent work of any kind, and maintenance of the current release -- [m1: additive work](/quest/m1/README.md) - this cycle's improvements and fixes that need no breaking release; each ships with the next cut or as a backported patch -- [m2: the next breaking release](/quest/m2/README.md) - every change that would need a breaking release if it landed after the cut, plus the cut gate; the cut waits on m2 alone -- [m3: later work, higher priority](/quest/m3/README.md) - byte streams and mesh libraries first, release execution, what a named consumer needs, and bug fixes in shipped code -- [m4: later work, lower priority](/quest/m4/README.md) - tests, tooling, benchmarks, optimizations, and features nobody waits on yet -- [m5: deferred](/quest/m5/README.md) - gated on the outside world (hardware, a partner, a consumer, a provider's offer, or an upstream release), or speculative with no named consumer diff --git a/quest/m0/README.md b/quest/m0/README.md index f5fb86dfd60..abcc4ad29c9 100644 --- a/quest/m0/README.md +++ b/quest/m0/README.md @@ -23,15 +23,3 @@ Routing: Wildcard landed in #4403, so a service claims the prefix it could serve instead of enumerating broadcasts. Serving the relay's ingested-only view (`origin::Consumer::local()`) to localhost workers belongs to moq.pro's edge, which embeds moq-relay; it moved there on 2026-09-28. - -## Required - -- [The C bindings accept MoqInstance again](/quest/m0/check-c-moqinstance.md) - `check c` passes on main once the C generator stops refusing `MoqInstance`'s exported `Debug` -- [Nightly passes on main](/quest/m0/nightly/README.md) - the scheduled Nightly passes end to end, so red means a new break -- [Interop and Video pass on main](/quest/m0/interop-green/README.md) - the scheduled Interop and Video workflows pass, so red means a new break -- [Publish the release line's drain() wrappers](/quest/m0/ffi-shutdown-backport.md) - Dart `moq` 0.1.1 reaches pub.dev from `release` -- [CI cost and latency](/quest/m0/ci/README.md) - cloud CI runs only in GitHub's merge queue, one tested entry at a time, expensive checks run nightly and gate `release`, caches move to R2, and runners are chosen last -- [More tests under load](/quest/m0/test-flakes-2/README.md) - load-only and queue failures, one quest per flake, fixed at the cause, since each one drops a queued PR -- [just check passes on macOS](/quest/m0/macos-check.md) - the version test, the doc re-export link test, and the carla bridge docs pass on a macOS host -- [Agent build output can't fill the desktop's disk](/quest/m0/agent-disk-budget.md) - finished agent checkouts reclaim their mbx targets automatically, so parallel agent builds stop filling the root disk -- [MoQ builds against rind 0.4 and its corrected adapters](/quest/m0/rind-adapters.md) - the calls rind 0.4 and its adapter patch releases change, adapted the day they publish diff --git a/quest/m0/ci/README.md b/quest/m0/ci/README.md index ced41a58993..bab2beb5828 100644 --- a/quest/m0/ci/README.md +++ b/quest/m0/ci/README.md @@ -173,11 +173,3 @@ feature was considered and not planned: the churn outweighs the build saving. Measure each change against a current baseline and record the result in its PR. The historical samples locate candidates; they are not controlled benchmarks. - -## Required - -- [Read-only pull-request CI](/quest/m0/ci/read-only-secrets.md) - write secrets and publisher identities reach only protected branches and tags, never a pushed branch -- [Verify the R2 Rust cache](/quest/m0/ci/mbx-r2-verify.md) - confirm the hosted Nightly jobs reuse the previous Nightly, then measure restore time and expiry -- [Release tags push to nix.moq.dev, and Cachix stops taking writes](/quest/m0/ci/cachix-retire.md) - backport `release-nix.yml` and its Just module to `release`, drop `cachix.yml`, prove a tag substitutes from nix.moq.dev, then revoke the Cachix token (the cache stays for old tags) -- [Measure the Linux cache effect of native media exclusions](/quest/m0/ci/hakari-followups.md) - scheduled Linux jobs measure cache reuse after unrelated tests stop compiling PipeWire and libclang -- [Only the release cut edits MIGRATE.md](/quest/m0/ci/migrate-guard.md) - `just check` fails any other PR that edits one, so breaking PRs stop conflicting on it in the queue diff --git a/quest/m0/nightly/README.md b/quest/m0/nightly/README.md index a7b30bfa623..6da7bd3e02a 100644 --- a/quest/m0/nightly/README.md +++ b/quest/m0/nightly/README.md @@ -47,7 +47,3 @@ more children for the causes nothing owned. Dropped: one-night bench moves near the paired threshold (re-check if one repeats), a one-off `remote error: 52` in the browser bench smoke, and failures main or [moq-dev/moq#8290](https://github.com/moq-dev/moq/pull/8290) already fixes. - -## Required - -- [Nightly's macOS platform job passes](/quest/m0/nightly/macos.md) - `moq-audio`'s tests compile on macOS again and the websocket version test's timeout is fixed if it recurs diff --git a/quest/m0/test-flakes-2/README.md b/quest/m0/test-flakes-2/README.md index 03c19dc5026..ba440e0fce6 100644 --- a/quest/m0/test-flakes-2/README.md +++ b/quest/m0/test-flakes-2/README.md @@ -267,7 +267,3 @@ queue before counting queues, fixed by [moq-dev/moq#8396](https://github.com/moq-dev/moq/pull/8396). Public API: none. Wire: none. - -## Required - -- [Interop's finish cases hold up under load](/quest/m0/test-flakes-2/interop-finish.md) - every publisher's finish cells pass under load, and the scenario's quarantine is removed diff --git a/quest/m1/README.md b/quest/m1/README.md index da936fcad50..15bdd7466a0 100644 --- a/quest/m1/README.md +++ b/quest/m1/README.md @@ -29,27 +29,6 @@ breaking epics and quests stay in m1 for now and are listed in m2's stream-credit. The [re-cut follow-up](/quest/m2/recut-held.md) moves what remains of them once their claims merge. -## Required - -- [Drop set](/quest/m1/drop-set.md) - each cursor's disposition record is billed to the cache pool, as the track's drop runs are, so fragmenting drops costs what the pool holds; eviction folds final runs or ends the cursor with `TooFarBehind` -- [Routing guide](/quest/m1/routing-guide.md) - concepts and practical outbound federation setup -- [A reader on a failed copy continues on the held re-offer](/quest/m1/copy-recover.md) - a live reader keeps a group whose copy fails by continuing on the same track's re-offer at the same frame -- [Group errors are cached by kind](/quest/m1/group-error-cache.md) - permanent group errors bind every reader, retryable ones are kept only for a bounded time, and a live SUBSCRIBE_DROP or FETCH answered `Old` no longer caches it for good -- [The overcommitted receive-window cells run again](/quest/m1/receive-windows-evicted.md) - `benchmark_receive_windows` measures its 256-stream and 4 MiB-frame cells again, reporting delivered frames and evictions instead of stalling -- [Stream credit by priority](/quest/m1/stream-credit/README.md) - every stream opens through one priority entry point, and a higher-priority group takes over or resets a lower one when credit runs out -- [Audio jitter target](/quest/m1/audio-jitter-target/README.md) - the playout target is default in both languages; audio that slows down and catches up around it in every player, graded in that direction, and a native trace replay remain -- [Buffered playback subscribes in ascending order](/quest/m1/buffered-ascending.md) - a buffered `` asks for the oldest group first, so a voice reply's opening arrives first, and audio's head hold shrinks to the floor -- [Lifecycles are explicit state](/quest/m1/explicit-state/README.md) - every lifecycle the 2026-11-07 audit found implicit is one enum or union, fixing the bugs in the 11 lifecycles it redesigns, with review and agent rules against new ones -- [Track drop runs are forgotten below the floor](/quest/m1/drop-runs-prune.md) - a track's dropped-group record stays proportional to its window in Rust and JS -- [A padded TS export sheds when its sink falls behind](/quest/m1/ts-padded-shed.md) - a `--mux-rate` export skips stale slots with a flagged PCR jump instead of back-filling them or blaming the source -- [A resumed QUIC client gives up on its own idle timer](/quest/m1/quic-resume-idle.md) - a client stopped past its idle timeout closes within about one timeout of resuming, without waiting on a stateless reset -- [A reused moq-transport alias delivers a group that beats its SUBSCRIBE_OK](/quest/m1/ietf-alias-reuse.md) - a new SUBSCRIBE clears its track's alias tombstone, so moqxr's alias-0 catalog refetch no longer hangs -- [A reused moq-transport alias refuses its track at once](/quest/m1/ietf-alias-refuse.md) - a SUBSCRIBE_OK on an alias already bound fails its readers and removes its entry without waiting on the peer's FIN acknowledgement -- [Unused crates, scripts, and files are deleted](/quest/m1/unused-code.md) - moq-room, the moq-native tombstone, demo/throttle, sh/dart/publish.sh, demo/web's Solid deps, and unpublished packages' release notes go -- [The recurring audits are fewer and carry plans, not results](/quest/m1/audit-merge.md) - m3's 13 audits become about five, each a Goal plus a short check-first list -- [The CARLA bridge builds outside the root workspace](/quest/m1/carla-workspace.md) - workspace builds stop compiling the demo bridge -- [Draft publishing keeps the upload and drops changelog rewriting](/quest/m1/drafts-publish-trim.md) - `sh/drafts/publish.sh` and its test shrink to the datatracker upload - ## Related - [A busy js/net serve yields](https://github.com/moq-dev/moq/pull/5289) - js/net's serve loop leaves the browser its event loop under a fast publisher, if it does not already diff --git a/quest/m1/audio-jitter-target/README.md b/quest/m1/audio-jitter-target/README.md index e29e7129189..8544b31d542 100644 --- a/quest/m1/audio-jitter-target/README.md +++ b/quest/m1/audio-jitter-target/README.md @@ -87,16 +87,6 @@ the native decode path too, asserting the same target series the browser's `playout.test.ts` does. The audio quality harness's `pulse` rows already grade native playback against its budgets. -## Required - -- [Grading](/quest/m1/audio-jitter-target/grading.md) - the audio harness grades steady-state lag, dropped audio, and recovery from a stall, with no gate fixed at zero underruns or zero lag -- [Stretch model](/quest/m1/audio-jitter-target/stretch.md) - every player slows down when its buffer runs low and speeds up once it refills, by one rule and one set of vectors, buffered mode included -- [The `stretch` setting](/quest/m1/audio-jitter-target/stretch-setting.md) - a player sets how far audio may trail before it skips, and zero turns the stretch off -- [Calibrate](/quest/m1/audio-jitter-target/calibrate.md) - every browser and native ceiling re-measured from seven Nightlies with the model -- [Capped budgets](/quest/m1/audio-jitter-target/capped-budgets.md) - the AAC browser budgets are re-measured from nightlies after the TS importer groups each PES -- [Chromium Opus stalled share](/quest/m1/audio-jitter-target/opus-stalled-share.md) - the Chromium Opus browser rows' stalled-share ceiling is measured with the stretch, and passes -- [Native backpressure](/quest/m1/audio-jitter-target/native-backpressure.md) - native playback decodes audio only when the ring has room, holding the rest of the target encoded as the browser does - ## Closes - [#2812](https://github.com/moq-dev/moq/issues/2812) - the iOS stutter report the same estimator fixes diff --git a/quest/m1/explicit-state/README.md b/quest/m1/explicit-state/README.md index c6882297806..c92250086c4 100644 --- a/quest/m1/explicit-state/README.md +++ b/quest/m1/explicit-state/README.md @@ -67,10 +67,6 @@ everything" branch). It belongs to [Delete the old start bookkeeping](/quest/m2/subscribe-ranges/start-bookkeeping.md), which collapses that state and waits on [Drop set](/quest/m1/drop-set.md). -## Required - -- [moq-net phase data](/quest/m1/explicit-state/net-phases.md) - moq-net's session and subscription state machines keep each phase's data in its variant - ## Related - [Delete the old start bookkeeping](/quest/m2/subscribe-ranges/start-bookkeeping.md) - owns the lite `TrackRun` start state and its forgotten-drops bug diff --git a/quest/m1/stream-credit/README.md b/quest/m1/stream-credit/README.md index 3f4b7c29445..f0fbc1d3bb3 100644 --- a/quest/m1/stream-credit/README.md +++ b/quest/m1/stream-credit/README.md @@ -46,7 +46,3 @@ which JS cannot raise; Chrome stalled at 103, Firefox at 100): This epic owns the end-to-end test: a browser reader and a Rust relay over WebTransport, 300 live tracks of mixed priority, the highest-priority ones receiving every group, and nothing hanging. - -## Required - -- [Takeover](/quest/m1/stream-credit/takeover.md) - on lite-07 a higher-priority group takes over an acknowledged stream, and a group that lost its stream resumes diff --git a/quest/m2/README.md b/quest/m2/README.md index 0e0998fab62..3fc00bd770f 100644 --- a/quest/m2/README.md +++ b/quest/m2/README.md @@ -192,18 +192,4 @@ quests that require them. ## Required - [Drop set](/quest/m1/drop-set.md) - each cursor's disposition record is billed to the cache pool, as the track's drop runs are, so fragmenting drops costs what the pool holds; eviction folds final runs or ends the cursor with `TooFarBehind` (held in m1 by an open claim) -- [Subscribe ranges](/quest/m2/subscribe-ranges/README.md) - a lite-07 SUBSCRIBE asks for past and live ranges with absolute or relative ends, in either order, and replaces FETCH for multi-group reads (single-group FETCH stays); merged ranges never starve a subscriber; relays fill misses by range, including over moq-transport -- [Address groups by timestamp](/quest/m2/time-addressing/README.md) - group start timestamps replace sequence numbers in the moq-net API and lite-07 wire, while old subscribers, old publishers, and published JS clients keep working -- [Cluster routing](/quest/m2/cluster-routing/README.md) - prove shared routing contracts, implement per-origin routes, and connect outbound local clusters -- [Promote the routes epic out of cluster routing](/quest/m2/promote-cluster-routes.md) - no epic holds another, once the open PRs under it land -- [A group a subscriber gives up on is always reported](/quest/m2/group-drops.md) - the wire names every abandoned group and the drop signal is public, so readers count losses instead of stalling - [Stream credit by priority](/quest/m1/stream-credit/README.md) - every stream opens through one priority entry point, and a higher-priority group takes over or resets a lower one when credit runs out (held in m1 by an open claim) -- [Prove cache-aware routing](/quest/m2/cache-routing-proof.md) - warm routes and the eligibility rule hold in route-layer sweeps, and the warm message's wire placement is chosen before the lite-07 cut -- [Route latency](/quest/m2/route-latency.md) - the maintainer decides whether a lite-07 ROUTE carries an informational latency sum, and it lands before the cut if so -- [Finalize moq-lite-07](/quest/m2/lite07-finalize.md) - when the maintainer cuts it, lite-07 negotiates as `moq-lite-07` and the next release ships it -- [Unbounded groups](/quest/m2/unbounded-groups/README.md) - groups and frames lose their size caps; a group keeps a 32 MB tail, and readers behind it replay through paced flights or refresh -- [Small API fixes before the cut](/quest/m2/api-shape/README.md) - one path and one spelling per item, names by role, and no dead or wrong-role public surface across net, transport, media, native, apps, JS, and bindings -- [Finishing a media producer returns a Finished handle](/quest/m2/finished-handle.md) - `finish(self)` consumes the media crates' producers, as it does moq-net's, so appending after finish doesn't compile -- [Probe](/quest/m2/probe/README.md) - a session probes up to the bitrate it wants to send or receive, so a stopped simulcast rendition resumes and a viewer up-switches; browser padding is parked in m3 (held in m2 by open claims; moves to m3) -- [Finish the milestone re-cut](/quest/m2/recut-held.md) - claim-held epics move to the milestone their kind and priority give them once their claims merge -- [moq-transport is a compatibility layer again](/quest/m2/ietf-scope/README.md) - our extensions, JS FETCH serving, and track listing leave moq-transport; live media and joining FETCH stay diff --git a/quest/m2/cluster-routing/README.md b/quest/m2/cluster-routing/README.md index bcccbbd027f..d6e3fb3bd68 100644 --- a/quest/m2/cluster-routing/README.md +++ b/quest/m2/cluster-routing/README.md @@ -129,11 +129,6 @@ Each implementation updates the docs it makes stale. The separate [routing guide](/quest/m1/routing-guide.md) explains the combined design and setup after the capabilities land. -## Required - -- [Outbound federation](/quest/m2/cluster-routing/federation.md) - an outbound-only local relay exchanges authorized broadcasts with the CDN and survives partition/healing -- [Routes and announces](/quest/m2/cluster-routing/routes/README.md) - implement the proven route layer with Rust/JS parity and tiered-cluster acceptance - ## Related - [P2P](/quest/m4/p2p/README.md) - application-selected peer sessions feed the shared routing model diff --git a/quest/m2/cluster-routing/routes/README.md b/quest/m2/cluster-routing/routes/README.md index 2b9262cd8a6..100d1197c9a 100644 --- a/quest/m2/cluster-routing/routes/README.md +++ b/quest/m2/cluster-routing/routes/README.md @@ -537,14 +537,6 @@ benchmarks. subscriptions through the radio mesh and the split refuses, and after a partition each island reaches the other through its uplink. -## Required - -- [js/net route layer](/quest/m2/cluster-routing/routes/js.md) - `js/net` encodes, decodes, and resolves the route layer -- [Route layer acceptance](/quest/m2/cluster-routing/routes/acceptance.md) - forwarding fixtures ported and the model deleted, incident fixtures, end-to-end checks, and benchmarks -- [Firefox tabs prove their route key](/quest/m2/cluster-routing/routes/browser-proof.md) - a current Firefox tab opens a lite-07 session with a route-key proof the relay verifies, once neqo's exporter follows the draft -- [Playwright bundles Chromium's spec exporter](/quest/m2/cluster-routing/routes/playwright-pin.md) - the toolchain's Playwright bundles Chromium 158+, so the route key lane proves the Chromium tab -- [The route node behaves the same whoever creates it](/quest/m2/cluster-routing/routes/node-creation-order.md) - creating an origin's lite-07 route node from SETUP instead of the route layer changes nothing observable - ## Related - [Route wakes](/quest/m4/route-wakes.md) - index work follows the settled source-selection model diff --git a/quest/m2/probe/README.md b/quest/m2/probe/README.md index 535612b10f0..e4d84843236 100644 --- a/quest/m2/probe/README.md +++ b/quest/m2/probe/README.md @@ -97,10 +97,6 @@ This README's own work, once the children land: `doc/lib` pages rather than adding a page, unless the material outgrows them. Children keep their own API docs and drafts current inline. -## Required - -- [Browser send estimate](/quest/m2/probe/browser-send-estimate.md) - browser publishers adapt to `getStats()`'s send estimate once Chrome and Safari report one - ## Related - [Realtime uplink congestion control](/quest/m3/quic-realtime/README.md) - a delay-based alternative to BBR3 on native uplinks; it must implement native probing to ship (decided 2026-10-25) diff --git a/quest/m2/subscribe-ranges/README.md b/quest/m2/subscribe-ranges/README.md index 337688b3b8c..63e756422e2 100644 --- a/quest/m2/subscribe-ranges/README.md +++ b/quest/m2/subscribe-ranges/README.md @@ -100,12 +100,6 @@ This line owns the end-to-end test: a relay with a sparse cache answers a wide past range plus live in both orders, over lite-07 and moq-transport, with every sequence delivered or dropped. -## Required - -- [JS head fills and time lookups](/quest/m2/subscribe-ranges/js-fills.md) - JS readers fill a cached group's missing head before handing it out, and look a time start up through `Fill.time` -- [Lite-07 FETCH is single-group only](/quest/m2/subscribe-ranges/lite07-fetch.md) - lite-07 FETCH reads one group or a slice of one, and SUBSCRIBE ranges of whole groups, in Rust, JS, and the draft, with JS multi-group fills moving onto the subscription -- [Delete the old start bookkeeping](/quest/m2/subscribe-ranges/start-bookkeeping.md) - what each lite cursor is owed and dropped lives in the model, and `TrackRun` only translates it per version - ## Related - [Rust groups by start](/quest/m2/time-addressing/model.md) - the cut reworks `Absolute(group)` ends and sequence-range drops onto times diff --git a/quest/m2/time-addressing/README.md b/quest/m2/time-addressing/README.md index a3bc0b72e75..266177c7e0e 100644 --- a/quest/m2/time-addressing/README.md +++ b/quest/m2/time-addressing/README.md @@ -8,14 +8,3 @@ or starts from a time, nothing maps between group numbers and time, and no producer has to remember group numbers. Old subscribers, old publishers, and published JS clients keep working. VOD, FETCH, and archives need no backwards compatibility. - -## Required - -- [Rust groups by start](/quest/m2/time-addressing/model.md) - the moq-net model and API address groups by start, and legacy wires carry the start ticks as the group ID -- [Lite-07 by start](/quest/m2/time-addressing/lite07.md) - lite-07 carries starts, previous-start links, GROUP_END, and time bounds instead of sequence numbers -- [moq-transport IDs verbatim](/quest/m2/time-addressing/ietf.md) - group IDs pass through as keys, Prior Group ID Gap signals drops best-effort, END_OF_GROUP marks a whole group, and our Timestamp property goes -- [@moq/net by start](/quest/m2/time-addressing/js.md) - JS matches Rust's model, wire, and legacy mapping -- [Consumers by start](/quest/m2/time-addressing/consumers.md) - hang drops duration and discontinuity markers, and every consumer that numbered groups uses starts -- [Bindings by start](/quest/m2/time-addressing/bindings.md) - moq-ffi, moq-c, and every binding expose starts, with migration docs -- [E2EE nonce](/quest/m2/time-addressing/e2ee.md) - the nonce binds the start instead of the sequence -- [Guide](/quest/m2/time-addressing/guide.md) - a page explaining seek by time, group ends, restarts, strictly increasing starts, and how legacy peers see group IDs diff --git a/quest/m2/unbounded-groups/README.md b/quest/m2/unbounded-groups/README.md index db7516ba140..19ad9e2c424 100644 --- a/quest/m2/unbounded-groups/README.md +++ b/quest/m2/unbounded-groups/README.md @@ -177,9 +177,3 @@ owns the rest: a long compressed group through a small cache pool with a plain reader on a legacy wire, which [moq-dev/moq#6993](https://github.com/moq-dev/moq/pull/6993) covered only at the model layer (maintainer, 2026-10-30). - -## Required - -- [Byte holes](/quest/m2/unbounded-groups/byte-holes.md) - segments inside a frame shed like front frames and flights start at `(frame, byte)` on the current lite wip; the frame cap goes -- [JS byte holes](/quest/m2/unbounded-groups/js-byte-holes.md) - `@moq/net` mirrors the byte-offset wire and continues a frame cut off mid-way -- [Compressed frames have no size cap and inflate as a bounded stream](/quest/m2/unbounded-groups/compressed-stream.md) - A compressed frame of any size publishes and is received in Rust and `@moq/net`, like a plain one diff --git a/quest/m3/README.md b/quest/m3/README.md index 0583ac78952..d20f011e1a4 100644 --- a/quest/m3/README.md +++ b/quest/m3/README.md @@ -33,169 +33,3 @@ them from `main` through a git submodule, so it needs them merged, not released. They stay out of m1 and m2 so the cut does not wait on them; each starts as soon as its prerequisites (sockets, fastest-reader pacing, outbound federation) land. - -## Required - -- [Byte streams](/quest/m3/stream/README.md) - TCP connections ride MoQ losslessly through relays, proxied per hop rather than as IP packets -- [Mesh libraries](/quest/m3/mesh/README.md) - an `Endpoint` reaches any enrolled node by endpoint ID over relays or a sparse direct overlay, with address hints and a `.status` track; the mesh binary and UI live in Kixel -- [`@moq/net` broadcasts expose their requests](/quest/m3/net-broadcast-requests.md) - a JS broadcast serves tracks it never created, on demand, like Rust -- [`@moq/crypto` loads a stored signing key](/quest/m3/crypto-key-load.md) - one device key proves mesh identity and signs broadcasts -- [JS announced coalescing](/quest/m3/js-announced-coalesce.md) - `@moq/net`'s `Announced` keeps one pending event per path, like Rust -- [An audio track's final flush joins its open group](/quest/m3/audio-flush-group.md) - a zero-`delay.max` subscriber gets the tail, not `Old` -- [Release execution](/quest/m3/release/README.md) - publication, installed-artifact proof, cleanup, and downstream adoption after m2 -- [Vendored code has every upstream fix it needs](/quest/m3/vendor-sync/README.md) - the next cycle's vendor sync, which the cut moves under the m2 cut gate -- [Release pull requests read the R2 Rust cache](/quest/m3/mbx-r2-release-cache.md) - after the cut brings the platform Rust cache to `release` -- [Binary release publishers run on their tag](/quest/m3/release-tag-publishers.md) - after the cut brings the workflows to `release` -- [Relays split horizon per session](/quest/m3/route-split-horizon.md) - a relay never advertises a route back over the session it came from -- [Cache-aware routing](/quest/m3/cache-routing/README.md) - a relay stays on a broadcast's path only for a local reader, two downstream sessions, or its one consumer's cheapest cold route, and joins a neighbor's copy instead of pulling another -- [crates.io trusts the workflow](/quest/m3/crates-trusted-publisher.md) - maintainer action: the crates the cut first-publishes by token get a trusted publisher for `release-rs.yml` -- [Rust releases publish through OIDC](/quest/m3/release-rs-oidc.md) - release-plz publishes with trusted publishing and `CARGO_REGISTRY_TOKEN` is revoked -- [One policy for oversized container metadata](/quest/m3/import-metadata-policy.md) - fMP4 and MKV refuse or stream huge metadata by one documented rule -- [Video quality](/quest/m3/video-quality/README.md) - a nightly VMAF harness grades every encoder backend and on-demand GoP pops against floors, and moq-boy's encode is fixed under it -- [rust2's exporter is ready for moq](/quest/m3/rust2-exporter.md) - waiting on moq-dev/rust2's exporter to generate every language moq ships -- [Switch to rust2's exporter](/quest/m3/ffi-exporter.md) - moq's bindings come from rust2-ffi, moq-ffi shrinks to its remainder, and moq's UniFFI generator code is deleted -- [Generated C bindings](/quest/m3/c/README.md) - C generated from moq-ffi ships as `moq-c` 0.8.0 and replaces the hand-written crate -- [A runtime-free QUIC driver](/quest/m3/quic-sansio-driver.md) - a caller's own loop moves UDP datagrams and polls moq sessions over moq-quic, for rust2's bindings -- [QoS](/quest/m3/qos/README.md) - the relay's egress `lag` histogram and `dropped` counters on the stats totals and prefix tracks -- [The DASH manifest keeps segments across a reconfigure](/quest/m3/dash-reconfigure.md) - a same-codec reconfigure keeps the old instance's segments listed in DASH, as HLS does -- [Plan: watch worker](/quest/m3/plan-watch-worker.md) - prototype an invisible page worker against app-spawned workers, and land the jank harness that decides -- [Watch worker](/quest/m3/watch-worker.md) - watch playback runs in a worker onto an OffscreenCanvas, so main-thread jank never stalls video or audio -- [Vulkan Video encode on AMD](/quest/m3/vulkan-encode.md) - H.264 and H.265 from an external Vulkan image on RADV, hand-rolled on ash, proven on an RX 9070 -- [H.265 encodes respect the encoder's minimum size](/quest/m3/h265-min-width.md) - an H.265 encode below AMD's 384-wide minimum is skipped by `Kind::Auto`, and the error names it -- [VA-API encodes an external Vulkan image](/quest/m3/vaapi-vulkan-import.md) - an explicit-sync DMA-BUF reaches Intel's encoder, proven on Arrow Lake -- [C++ FFI reuse](/quest/m3/cpp-ffi-reuse.md) - C++ packages link the shared default-feature FFI build once it is proven compatible -- [OBS native codecs](/quest/m3/obs-moq-video/README.md) - replace FFmpeg video and audio decoding with moq-video and moq-audio, deliver GPU frames, and use native audio/video encoders -- [MoQ in obs-studio](/quest/m3/obs-studio/README.md) - a native MoQ output and service merged into obs-studio, once its maintainers agree; the plugin carries it until then -- [AudioToolbox decode](/quest/m3/audio-decode-audiotoolbox.md) - macOS and iOS decode HE-AAC, multichannel AAC, and what else the framework offers -- [AudioToolbox encode](/quest/m3/audio-encode-audiotoolbox.md) - macOS and iOS encode AAC-LC, for moq-dev/studio's RTMP destinations -- [Media Foundation decode](/quest/m3/audio-decode-mediafoundation.md) - Windows decodes HE-AAC, multichannel AAC, and what else the MFTs offer -- [Media Foundation encode](/quest/m3/audio-encode-mediafoundation.md) - Windows encodes AAC-LC, for moq-dev/studio's RTMP destinations -- [GPU CI](/quest/m3/gpu-ci.md) - NVIDIA tests gate the merge queue on a self-hosted GPU runner VM, and `just rs nvidia` runs them locally instead of skipping -- [Media stats](/quest/m3/stats/README.md) - publishers announce a stats track in the catalog, viewers answer a soliciting catalog through a per-catalog `.echo` broadcast, and one model turns both into a health verdict and a preflight report -- [Wire stats](/quest/m3/wire-stats/README.md) - `Presence` counts each root's transport bytes on the wire, `wire_tx` and `wire_rx`, from QUIC, WebSocket, and embedder gateway sources -- [Session outcome records](/quest/m3/session-outcome-records.md) - relay stats publish each refusal and abnormal session end as a record per label, bounded under a flood, beside the counters -- [Audio renditions carry a language](/quest/m3/audio-lang.md) - audio renditions have an optional BCP-47 `lang`, and watch auto-picks within one language -- [fMP4 and TS imports publish BCP-47 languages](/quest/m3/import-lang-iso639.md) - ISO 639-2 codes become `en`-style tags on audio and text -- [HLS carries every audio language](/quest/m3/hls-audio-languages.md) - every `EXT-X-MEDIA` audio entry imports with its `LANGUAGE`, and exports write it back -- [A refused follower asks a replacement handler](/quest/m3/follow-refused-retry.md) - a same-instance handler swap with identical route details re-asks a refused `Following`, while listeners still see no change -- [iOS capture](/quest/m3/mobile-capture-ios.md) - Rust captures the camera and screen on iOS, setting the catalog rotation -- [Android capture](/quest/m3/mobile-capture-android.md) - Rust captures through NDK/JNI on Android, reusing the existing codecs and setting the catalog rotation -- [Latest readers use Range::live()](/quest/m3/readers-range-live.md) - after #6278, readers start at the live edge without waiting on `largest()` -- [PulseAudio capture periods](/quest/m3/pulseaudio-capture-period.md) - capture on cpal's PulseAudio host arrives in short periods, not the server's 2 s default fragment, proven on the null sink's monitor -- [A JSON snapshot consumer resyncs after a bad frame](/quest/m3/json-snapshot-resync.md) - a decode failure drops the group and the consumer resumes at the next snapshot by itself, so `@moq/room` and moq-boy keep reading -- [Go module proxy](/quest/m3/go-module-proxy.md) - `moq.dev/moq-ffi` ships from a static GOPROXY we host, so its staticlibs stop growing git history by ~61 MiB per release -- [Go per-platform lib modules](/quest/m3/go-ffi-platform-modules.md) - a Go build downloads only the host's staticlib, and `go mod vendor` works -- [Dart on iOS](/quest/m3/dart-ios.md) - prove the shipped iOS native asset actually loads on a device, which no CI can -- [Mobile completion](/quest/m3/mobile-completion.md) - verify the Swift and Kotlin bindings over Rust-owned capture -- [Migrated sessions close once their replacement synced](/quest/m3/goaway-migration-followups.md) - moq-tokio holds the early close for the replacement's announce sync, and the JS `Connection` closes early too -- [moq-transport requests end through one lease](/quest/m3/ietf-request-lease.md) - every IETF request ends through one polled lease, and the two 18k-line files split by mechanism -- [A moq-transport group head fills its hole in place](/quest/m3/ietf-fill-refill.md) - fills and joining FETCHes write into the tail's group, deleting the `Fill` handoff -- [One port](/quest/m3/one-port/README.md) - one UDP port carries QUIC, SRT, and WebRTC media through an embedder hook, and one TCP port carries HTTP, RTMP, and RTMPS -- [WebSocket caps](/quest/m3/rate-websocket.md) - paced reads and writes over bounded socket buffers hold WebSocket to the same caps -- [moq-webrtc pacing](/quest/m3/rtc-pacing.md) - a capped WHEP viewer never receives more than its cap plus burst, NACK resends included -- [SRT rate handle](/quest/m3/srt-rate-handle.md) - a per-connection cap paces SRT pulls, retransmits included, and closes SRT publishers past it -- [One port on the io_uring workers](/quest/m3/uring-demux.md) - `moq-uring`'s workers host the UDP demux, so a ring relay keeps WebRTC media and SRT on its QUIC port -- [Synced data playback](/quest/m3/watch-data-sync.md) - js/watch releases JSON and binary payloads on the media playhead, and a slow data track holds media back -- [WebCodecs audio priming](/quest/m3/webcodecs-priming.md) - `@moq/publish` measures each browser's `AudioEncoder` priming and corrects AAC timestamps and Opus pre-skip, so audio decodes at its capture timestamp -- [poll_acked on moq-net's send stream](/quest/m3/quic-ack-hook.md) - the - backend-neutral hook on moq-net's own transport trait that awaits an - acknowledged stream offset, implemented by the moq-tokio and moq-uring adapters -- [Relay io_uring packages](/quest/m3/relay-io-uring-package.md) - Linux relay packages ship io_uring once the ring is on par with tokio -- [Direct3D11 render import](/quest/m3/render-d3d11.md) - Windows presents without downloading every frame to system memory -- [Media Foundation encodes on the texture's adapter](/quest/m3/mf-encode-adapter.md) - Windows machines with two GPUs keep an exported texture on the GPU route into a hardware encoder -- [Intra-refresh GOPs](/quest/m3/intra-refresh/README.md) - video with periodic intra refresh imports and plays back cleanly with one group per sweep and a catalog `warmup` -- [#3115](/quest/m3/3115-moqsink-the-publication-has-no-generation-so-a-flush.md) - moqsink: a flushing restart after EOS opens a new publication generation -- [Realtime uplink congestion control](/quest/m3/quic-realtime/README.md) - native publishers pick `Realtime`, a receive-ts delay-based controller that keeps the uplink queue near empty for teleoperation -- [Windows capture parity](/quest/m3/capture-windows.md) - system and per-app audio and a settled app-capture policy -- [Linux capture parity](/quest/m3/capture-linux.md) - Wayland window/system-audio capture, per-app audio, and explicit display-selection and app-capture limits -- [Per-app audio on macOS](/quest/m3/capture-app-audio-macos.md) - one application's audio through ScreenCaptureKit -- [cpal loads libasound at runtime](/quest/m3/cpal-alsa-runtime.md) - condition: a cpal release whose Linux build carries no load-time libasound requirement -- [Audio capture without ALSA link](/quest/m3/capture-alsa-link.md) - moq-audio capture and playback build on Linux without linking libasound, and capture becomes a default feature -- [Ship capture and playback](/quest/m3/cli-packaging.md) - a released moq binary can capture and play, which no distribution currently enables -- [moq-relay in nixpkgs](/quest/m3/nixpkgs-relay.md) - `nix-shell -p moq-relay` installs the released relay from upstream nixpkgs, auto-updated from our tags -- [moq-cli in nixpkgs](/quest/m3/nixpkgs-cli.md) - the released `moq` CLI with its full release feature set joins nixpkgs as `moq-cli` -- [GPU capacity and health](/quest/m3/gpu-health.md) - moq-video reports each device's sessions, memory, utilization, and health on NVIDIA, AMD, and Intel alike -- [A release carries multi-vendor GPU input](/quest/m3/gpu-release.md) - `release` carries the GPU surface validated on AMD and Intel; health follows separately -- [The remaining library spawns](/quest/m3/spawn-audit.md) - every async spawn left in a library crate becomes a polled `kio::Tasks` child or is listed with why it stays -- [DVR rewind](/quest/m3/archive-dvr.md) - follow-on capability after the release contract is stable -- [Publisher timeliness at relay ingest](/quest/m3/qos-publisher-timeliness.md) - follow-on capability after the release contract is stable -- [The relay refuses a cluster peer it cannot dial](/quest/m3/relay-undialable-peers.md) - moq-tokio reports the schemes it can dial and names the missing feature when one can't, and the relay refuses an undialable peer at startup instead of retrying forever -- [moq-transport finish interop](/quest/m3/ietf-finish.md) - the interop `finish` case runs on every even moq-transport draft instead of being skipped -- [JS joining FETCH](/quest/m3/ietf-js-joining-fetch.md) - the JS publisher answers a joining FETCH that arrives after a quick finish, mirroring the Rust bound -- [An Absolute join never races an older-history FETCH](/quest/m3/ietf-absolute-join-race.md) - reproduce #7680's suspected collision on main, then fix it or keep the test and delete -- [A passing interop run stops publishers cleanly](/quest/m3/interop-shutdown-warnings.md) - no lingering publisher or unfinished-producer warning in a green interop run -- [Dependency and alternatives audit](/quest/m3/audit-deps.md) - every dependency earns its weight, preferring fewer, and the rest are current, deduplicated, and the best maintained option -- [Dead code and API surface audit](/quest/m3/audit-dead-code.md) - repeat the removal audit before the next major release -- [Typecheck with bun check](/quest/m3/bun-check.md) - workspace packages typecheck through bun once nixpkgs ships bun 1.4.4 -- [Test coverage audit](/quest/m3/audit-test-coverage.md) - repeat the coverage audit against the m1 baselines after the next release ships -- [Documentation audit](/quest/m3/audit-docs.md) - repeat the docs audit after the release ships, against the m1 baselines -- [Test cost audit](/quest/m3/audit-test-cost.md) - the slowest, flakiest, and least valuable tests are deleted by default, or else fixed or planned, once the release ships -- [Quest tree audit](/quest/m3/audit-quests.md) - repeat the whole-tree audit after the release ships, against the m1 baseline -- [CI workflow audit](/quest/m3/audit-ci.md) - repeat the per-workflow and per-job review after the release ships, against the m1 baselines -- [Performance audit](/quest/m3/audit-perf.md) - benchmarks that regressed since the m1 run are explained, fixed, or planned, and unbenched hot paths get coverage -- [Simplification audit](/quest/m3/audit-simplify.md) - repeat the simplification audit, starting with the m1 leftovers, after the release ships -- [Artifact size audit](/quest/m3/audit-size.md) - repeat the shipping, native, and browser attribution after the release ships -- [Compile time audit](/quest/m3/audit-compile-time.md) - build-time hotspots are measured against the m1 baselines, starting with the transport share now that moq-net compiles once, and the worst are removed, made cheaper, or planned -- [Lint override and deprecation audit](/quest/m3/audit-lints.md) - repeat the suppression and deprecation audit after the release ships, starting with clippy on the macOS and Windows targets -- [Clean ALSA playback onset](/quest/m3/audio-alsa-onset.md) - no onset restarts or clicks over PulseAudio -- [Read a bus source's own samples](/quest/m3/audio-strip-tap.md) - a tap reads one source's samples before its delay with their bus-clock positions, for the studio's clap sync -- [moq-audio filter chain](/quest/m3/audio-filters.md) - per-source suppression, gate, compressor, limiter, ducking, and plugins, which moq-dev/studio configures -- [Interop audit](/quest/m3/audit-interop.md) - our interop runner entries match what we ship, and every red interop cell with a moq.dev side is fixed, reported, or noted as down or unsupported -- [moq-hls exposes each rendition's bound source](/quest/m3/hls-rendition-source.md) - playlists and segments report the source path and instance they read, so a cache can key on the source -- [The memory bench finishes at 1 MiB frames](/quest/m3/memory-bench-hang.md) - the allocation mode's park at `size=1048576` is root-caused and fixed -- [Audio's Latest start reaches back](/quest/m3/audio-latest-reach-back.md) - moq_audio's start covers min plus warmup like other consumers -- [moq-lite tails count drops](/quest/m3/lite-tail-drop-count.md) - SUBSCRIBE_SKIP and SUBSCRIBE_DROP accounting replaces the session-tail grace from lite-05 -- [Audio track changes are gapless](/quest/m3/gapless-audio-switch.md) - no silence beyond a frame on audio format or rendition changes, enforced by media QA -- [We own our WebRTC stack](/quest/m3/webrtc/README.md) - one moq-webrtc crate holds the gateway, its ICE module, the data-channel transport, and a vendored, trimmed str0m/dimpl/is/sctp-proto -- [PUBLISH_DONE says why](/quest/m3/publish-done-codes.md) - GOING_AWAY, TOO_FAR_BEHIND, and EXPIRED round-trip as stream codes -- [A revoked announce resets instead of FINning](/quest/m3/announce-revoke-reset.md) - a PUBLISH_NAMESPACE revoked after its OK resets with INTERNAL_ERROR, per draft-22 §6.4.2.3 -- [moq repair refuses a live recording](/quest/m3/mp4-repair-lock.md) - the recorder's advisory lock keeps `moq repair mp4` off a file still being written -- [The error-queue reader decodes truncated control data](/quest/m3/errqueue-truncation.md) - `MSG_ERRQUEUE` keeps what fit on `MSG_CTRUNC`, like the receive paths -- [The QUIC driver tells an MTU probe from an oversized send](/quest/m3/quic-emsgsize-classify.md) - a non-probe `EMSGSIZE` is logged and counted instead of dropped silently -- [fMP4 decode times from the declared reorder depth](/quest/m3/fmp4-declared-clock.md) - `DeclaredClock` replaces the sub-GOP cadence cap, as in TS, FLV, and MKV -- [An ended HLS playlist has no trailing gap](/quest/m3/hls-trailing-gap.md) - no zero-duration `EXT-X-GAP` before `EXT-X-ENDLIST` -- [/fetch answers from the announce sync](/quest/m3/fetch-synced.md) - a missing broadcast gets a 404 once announcements are synced, not after 30 s -- [An advertisement stuck on a zero-credit peer gives up](/quest/m3/advertise-credit-timeout.md) - A Rust moq-transport publisher whose PUBLISH_NAMESPACE or namespace update cannot leave because the peer grants no send credit gives up on it within a bounded time, as it already does on a silent answer: it resets the request and frees its state -- [moq-sock's control buffer is sized for the send options too](/quest/m3/cmsg-len-send.md) - `cmsg::LEN` in moq-sock is derived from, or checked at compile time against, both the receive options and the send options -- [A panic inside moq-tokio's connection internals fails callers instead of panicking them](/quest/m3/connection-panic-isolation.md) - after a moq-tokio QUIC connection driver panics, every client-side caller gets the connection's terminal error instead of panicking in its own task, and the certificate reload watcher and qmux driver tasks are supervised -- [No large future in the FFI layers can overflow a runtime or foreign thread's stack](/quest/m3/ffi-future-size.md) - every future moq-c and moq-ffi spawn or block on is below a size bound that a lint enforces, so unoptimized builds stay inside the runtime thread stack -- [An empty tail stream for a headless moq-transport group creates no group](/quest/m3/headless-empty-tail.md) - when a moq-transport subscription's fill for the Largest Group fails, an empty subgroup stream for that headless group is dropped instead of creating an empty group that reads as complete -- [A recording stalled on an open group reports what it waits for](/quest/m3/hls-stalled-segment.md) - when a moq-hls recording waits on a listed segment whose group a still connected publisher never closes, the wait is visible -- [A kept draft-18 join pins its head group](/quest/m3/ietf-join-pin-head.md) - on draft 18, a joining FETCH that our publisher keeps open after a quick finish is answered even if the publisher drops its `track::Producer` right after `finish()` -- [The JS player keeps a track's start when decoding from its first packet](/quest/m3/js-warmup-trim.md) - `@moq/watch` trims an audio track's catalog `warmup` only on a mid-stream join, as moq-audio does -- [A library recorder gets the takeover cut](/quest/m3/mux-source-cut.md) - A recorder built directly with `moq_hls::export::Broadcaster::new` ends a replaced instance's recording at what it listed when another publisher takes the broadcast over, exactly as one built through `Server::broadcaster` does -- [The OBS source joins audio at the live edge](/quest/m3/obs-decode-latest.md) - the OBS MoQ source's audio decoder starts at the newest cached group instead of replaying the track's backlog, so a reconnect or rendition change plays live audio at once -- [OBS simulcast layers reach moq-watch from a live OBS, including the dock's Go Live](/quest/m3/obs-multitrack-check.md) - A live OBS 32.2.2 run, recorded in the PR, shows the `WHIPSimulcastTotalLayers` profile setting attaching two or more scaled video encoders to `moq_output`, each published as its own rendition and watched in ``, both through the obs-websocket recipe in `doc/bin/obs.md` and through the MoQ dock's Go Live, which honors the profile's layer count instead of creating a single encoder -- [Opus export never writes a channel mapping it can't stand behind](/quest/m3/opus-surround-export.md) - exporting a catalog Opus rendition with 3 to 8 channels and no description writes a `dOps` with the Vorbis family 1 mapping table, as the TS importer assumes, instead of an invalid family 0 `dOps` -- [Open-GOP MPEG-2 export trims leading B-pictures in zero-stuffed CBR streams](/quest/m3/pes-hold-open-gop.md) - A TS export starting or resuming inside an open GOP of MPEG-2 video drops the orphaned leading B-pictures even when their PES ends on zero stuffing, as CBR encoders emit, without ever trimming part of a reference picture whose start code straddles two PES packets -- [A multi-program TS import survives a source switch](/quest/m3/ts-multi-program-restart.md) - `--program all` restarts each affected program on an unannounced source switch, as a single-program import does after moq-dev/moq#7780, instead of ending the whole import -- [The lite publisher tells transport faults from cancels](/quest/m3/publish-cancel-classify.md) - `rs/moq-net`'s lite publisher no longer counts every `Error::Transport` as a clean cancel -- [tls:// sessions report their negotiated ALPN](/quest/m3/tls-link-alpn.md) - A session accepted on a `tls://` listener reports the negotiated moq ALPN in `Link::alpn`, as raw QUIC, WebTransport, and WebSocket sessions already do, so admission and logs see the protocol on every transport -- [PUBLISH token renewal is consistent across pause and forward, and the multi-token cost is profiled](/quest/m3/token-auth-followups.md) - on a moq-transport session, a REQUEST_UPDATE carrying an AUTHORIZATION TOKEN on a PUBLISH gets the same answer whether the PUBLISH is paused or forwarding -- [An audio-only broadcast that can't play hides its play button](/quest/m3/audio-only-play.md) - center-play follows the audio-only rule, proven by a browser test -- [moq-quic's long header type is one variant](/quest/m3/quic-long-type.md) - collapse LongType after the 0-RTT removal -- [One predicate for the lite close wait](/quest/m3/subscriber-fin-fold.md) - fold waits_for_subscriber_fin into has_track_stream -- [MKV imports ffmpeg's multichannel FLAC](/quest/m3/mkv-flac-channel-mask.md) - a channel-mask-only Vorbis comment is accepted, so default ffmpeg multichannel FLAC needs no remux -- [The publish support panel lists only codecs publishing accepts](/quest/m3/publish-support-probe.md) - the settings panel runs the publisher's Annex B encoder probe -- [TLS reload follows symlinked certificate files](/quest/m3/watch-symlink-targets.md) - in-place rewrites of symlink targets in other directories reload roots, served chains, and client certificates -- [A published capture exposes its bandwidth grant](/quest/m3/video-publish-grant.md) - a moq-video publish shows each track's granted bitrate, not only its target -- [The test relay can enable stats](/quest/m3/relay-test-stats.md) - `moq_relay::test_relay` starts with stats on when asked -- [macOS capture listing futures are Send](/quest/m3/capture-shareable-send.md) - ScreenCaptureKit listing and start no longer hold a non-Send block across an await -- [A capture listing a picker can draw](/quest/m3/capture-list.md) - windows grouped by app with icons and placed on their displays, camera kinds, low-rate pictures, and a wait for changes on macOS, Windows, and X11, for moq-dev/studio's Add page -- [Denied macOS system audio names its settings pane](/quest/m3/audio-system-denied-hint.md) - a permission error pointing at Screen & System Audio Recording -- [One encoder follows several connections' estimates](/quest/m3/bandwidth-multi-connection.md) - a track published to two relays tracks both estimates -- [Bandwidth reservations ignore in-process readers](/quest/m3/reservation-local-readers.md) - a local recorder no longer counts as uplink demand -- [Container export starts apart from its skip budget](/quest/m3/export-live-start.md) - fMP4 and MP4 export start at the live edge and report sample counts -- [MP4 export trims exactly at both ends](/quest/m3/mp4-export-window.md) - a presentation window with no lead-in and no presented tail -- [Container export ends cleanly when its broadcast closes](/quest/m3/export-close.md) - every container export returns `None` when its instance closes, whichever signal arrives first -- [Audio capture opens a format the mix accepts](/quest/m3/audio-capture-negotiate.md) - multichannel and odd-rate devices capture, with discrete input selection -- [moq-mux imports a regular MP4](/quest/m3/mp4-import.md) - non-fragmented MP4, `moov` first or last -- [An audio encoder flushes without ending its track](/quest/m3/audio-encode-flush.md) - a clip's last partial frame is heard while the source stays live -- [Padding probes from the browser](/quest/m3/probe-padding.md) - parked: the maintainer doubts padding is the right way for a browser to probe -- [JS rung disable](/quest/m3/probe-rung-disable-js.md) - `@moq/publish` applies the native rung rule, recovering through padding; parked with it -- [Layered broadcasts](/quest/m3/layers/README.md) - hang specifies a layer layout track, and `moq play` and `@moq/watch` composite layers over the main picture -- [moq-rtmp dials rtmps:// and always advertises a tcUrl](/quest/m3/rtmp-rtmps-tcurl.md) - the RTMP client dials an `rtmp://` or `rtmps://` URL and sends its `tcUrl` on both, for moq-dev/studio's destinations -- [moq-webrtc and moq-rtmp dial through a caller's policy](/quest/m3/webrtc-dial-policy.md) - a host that dials untrusted URLs refuses private, loopback, and link-local addresses on every WHIP, WHEP, and RTMP dial -- [A room keeps a participant while one of its aliases is announced](/quest/m3/room-alias-withdraw.md) - withdrawing `camera` while `camera.hang` stays announced keeps the participant -- [@moq/auth key derivation and key sets validate like single keys](/quest/m3/auth-key-validation.md) - `Key.public` shares no scope and never yields an invalid key, and key sets and Rust refuse mismatched keys at parse -- [Binding server helpers observe session errors and describe close truthfully](/quest/m3/serve-session-errors.md) - Python retrieves session task errors, and the Kotlin, Go, and Dart docs say close ends every connection diff --git a/quest/m3/c/README.md b/quest/m3/c/README.md index d9e9e8e0ea1..407a8d81512 100644 --- a/quest/m3/c/README.md +++ b/quest/m3/c/README.md @@ -56,5 +56,3 @@ publication; [old-crate retirement](/quest/m3/release/c-retire.md) follows. ## Required - [Switch to rust2's exporter](/quest/m3/ffi-exporter.md) - the C ABI comes from rust2's exporter instead of a UniFFI generator -- [C consumers](/quest/m3/c/consumers.md) - the C interop client and `doc/lib/c` samples move onto the generated API -- [Async failure contract](/quest/m3/c/async-failure-contract.md) - every generated async call returns a task and calls back exactly once, cancelled when its task was freed first diff --git a/quest/m3/cache-routing/README.md b/quest/m3/cache-routing/README.md index 00f80c27ec1..66f04a670f2 100644 --- a/quest/m3/cache-routing/README.md +++ b/quest/m3/cache-routing/README.md @@ -99,7 +99,6 @@ This README's own work, once its children land: ## Required - [Prove cache-aware routing](/quest/m2/cache-routing-proof.md) - warm routes and the eligibility rule hold in route-layer sweeps, and the wire placement is chosen -- [Warm routes and per-broadcast parent selection](/quest/m3/cache-routing/select.md) - relays advertise warm routes and pull each broadcast through the cheapest eligible neighbor ## Related diff --git a/quest/m3/intra-refresh/README.md b/quest/m3/intra-refresh/README.md index c84d21e13ac..ca268987a97 100644 --- a/quest/m3/intra-refresh/README.md +++ b/quest/m3/intra-refresh/README.md @@ -46,12 +46,3 @@ make these presentation guarantees true even when sweep lengths change. a true IDR needs none. - H.264 and H.265 only. AV1 and VP9 have no standard gradual refresh signal. WebCodecs has no intra-refresh option, so js/publish is consumer-only. - -## Required - -- [Dual decoder](/quest/m3/intra-refresh/dual-decoder.md) - js/watch's two decoders open on an H.264 recovery point in Firefox and Safari, as they now do in Chromium -- [Plan: recovery boundaries](/quest/m3/intra-refresh/recovery-boundary.md) - settle how a catalog `warmup` duration stays safe for a later, longer sweep -- [Consumer warmup](/quest/m3/intra-refresh/consumer-warmup.md) - the transcoder decodes the groups covering `warmup` as history before each group, except at a true IDR -- [H.264 import](/quest/m3/intra-refresh/h264-import.md) - the splitter keeps `recovery_frame_cnt` and import publishes `warmup` from it -- [H.265 import](/quest/m3/intra-refresh/h265-import.md) - the splitter reads the recovery-point SEI so an HEVC intra-refresh stream forms groups and publishes `warmup` -- [Export sync flags](/quest/m3/intra-refresh/export-sync-flags.md) - fmp4, MKV, and HLS stop advertising a refresh group start as a sync sample diff --git a/quest/m3/layers/README.md b/quest/m3/layers/README.md index 48371c383e5..30ca6309dc4 100644 --- a/quest/m3/layers/README.md +++ b/quest/m3/layers/README.md @@ -35,9 +35,3 @@ Decided 2026-11-08 (maintainer, moq-dev/studio /quest-plan): maps priority onto moq-lite's subscription priorities and unsubscribes a toggled-off layer. - m3: moq-dev/studio is the named consumer, and its side sits in its m2. - -## Required - -- [hang specifies a layer layout track](/quest/m3/layers/spec.md) - a versioned layout track in the hang draft, `rs/hang`, and `js/hang` that both players composite -- [moq play composites layers](/quest/m3/layers/play.md) - `moq play` composites visible layers, mixes their audio, and toggles them -- [The watch player composites layers](/quest/m3/layers/watch.md) - `@moq/watch` composites visible layers, mixes their audio, and toggles them diff --git a/quest/m3/mesh/README.md b/quest/m3/mesh/README.md index 581c4a612fa..3203a95e21a 100644 --- a/quest/m3/mesh/README.md +++ b/quest/m3/mesh/README.md @@ -105,15 +105,6 @@ the third, and survives a relay restart. - [Outbound federation](/quest/m2/cluster-routing/federation.md) - a local relay dials its relays and prefers LAN peers - [Byte streams](/quest/m3/stream/README.md) - lossless TCP-level streams over MoQ -- [Endpoint API](/quest/m3/mesh/endpoint.md) - an iroh-shaped `Endpoint` that connects to an endpoint ID and service and accepts byte streams -- [Mesh relay node](/quest/m3/mesh/node.md) - a relay node enrolls into a mesh, dials its relays, and admits only enrolled LAN peers -- [Mesh enrollment is bounded and revocation takes effect](/quest/m3/mesh/device-bounds.md) - a reusable key enrolls at most its own use budget and a revoked device loses access within a bounded time -- [Certificate credentials](/quest/m3/mesh/cert-credentials.md) - a certificate chain and a proof signature stand in for a JWT, checked against a trust store the application swaps live -- [Address hints](/quest/m3/mesh/addr.md) - nodes publish their addresses on mesh tracks and dial each other directly where mDNS cannot find them -- [Sparse overlay](/quest/m3/mesh/overlay.md) - each node keeps about log N deterministic direct links, forwards for the rest, and falls back to relays across a partition -- [JS mesh enrollment client](/quest/m3/mesh/js-enroll.md) - `@moq/auth` enrolls and refreshes from JS like `moq_auth::mesh::Client` -- [Status track](/quest/m3/mesh/status.md) - a signed `.status` track per node with its links and per-link RTTs -- [Mesh library guide](/quest/m3/mesh/guide.md) - the doc.moq.dev page for the libraries, the contract, and porting from iroh ## Related diff --git a/quest/m3/obs-moq-video/README.md b/quest/m3/obs-moq-video/README.md index d9ebfec9b2e..f3e64f00b06 100644 --- a/quest/m3/obs-moq-video/README.md +++ b/quest/m3/obs-moq-video/README.md @@ -18,13 +18,6 @@ The quests separate portable decoding, audio, and publishing so each can land an Decided in the 2026-09-30 audit: the Windows and Linux GPU decode paths and the macOS and Windows GPU encoder inputs moved to m2 (listed under Related), because each needs physical-hardware proof, and Linux GPU input is already m2/m3. -## Required - -- [Video source replacement](/quest/m3/obs-moq-video/source.md) - remove the FFmpeg video decode and attempt macOS GPU delivery immediately, with a working CPU fallback on other platforms -- [Linux bundle](/quest/m3/obs-moq-video/linux-bundle.md) - attach a portable Linux x86_64 tarball to every obs-moq release once FFmpeg is gone -- [Video publishing](/quest/m3/obs-moq-video/adapter.md) - back an internal OBS video encoder with moq-video and expose the combined opt-in mode -- [VP8/VP9 in OBS](/quest/m3/obs-moq-video/vpx-obs.md) - play VP8 and VP9 through moq-video's libvpx backend on every OBS platform - ## Related - [Video hardware validation](/quest/m5/video-hardware.md) - physical hardware evidence is required for each claimed GPU path diff --git a/quest/m3/obs-studio/README.md b/quest/m3/obs-studio/README.md index ed00b59b446..2d503ee65f6 100644 --- a/quest/m3/obs-studio/README.md +++ b/quest/m3/obs-studio/README.md @@ -26,10 +26,6 @@ Open, for when the port starts: - What stays in the plugin: the MoQ Source and the dock may remain a plugin even once the output is native. -## Required - -- [obs-studio maintainers agree](/quest/m3/obs-studio/maintainers.md) - condition: agreement in principle to a native MoQ output and service - ## Related - [First C++ package release](/quest/m3/release/cpp-release.md) - the published C++ package the port would build on diff --git a/quest/m3/one-port/README.md b/quest/m3/one-port/README.md index 2dcd558d210..e229b202850 100644 --- a/quest/m3/one-port/README.md +++ b/quest/m3/one-port/README.md @@ -93,11 +93,6 @@ dropped and counted. Decided 2026-10-13: the responder binds its own port ([relay STUN](/doc/bin/relay/config.md#stun)), so the shared port never answers public Binding requests. -## Required - -- [WebRTC on the shared socket](/quest/m3/one-port/rtc-feed.md) - `moq-webrtc` serves WHIP and WHEP media from the WebRTC hook and pins ICE tuples -- [SRT on the shared socket](/quest/m3/one-port/srt-demux.md) - moq-srt drives `srt-protocol` on demuxed packets and the flow table pins its 4-tuples - ## Related - [One port on the io_uring workers](/quest/m3/uring-demux.md) - the io_uring workers host the UDP demux diff --git a/quest/m3/qos/README.md b/quest/m3/qos/README.md index 950e89feae1..87688438394 100644 --- a/quest/m3/qos/README.md +++ b/quest/m3/qos/README.md @@ -55,12 +55,6 @@ crate. Client stats left the line (2026-09-29) when media stats moved out of moq-stats onto hang tracks, which are additive on `main`. -## Required - -- [Viewer lag histogram](/quest/m3/qos/lag-histogram.md) - the egress `lag` - histogram and `dropped` counters land on the stats totals and prefix - tracks - ## Related - [Media stats](/quest/m3/stats/README.md) - publishers and viewers report diff --git a/quest/m3/quic-realtime/README.md b/quest/m3/quic-realtime/README.md index 4ff3836d349..cfbc3a12669 100644 --- a/quest/m3/quic-realtime/README.md +++ b/quest/m3/quic-realtime/README.md @@ -176,10 +176,6 @@ the upstream encoder, so a GStreamer pipeline at a fixed bitrate still queues when capacity drops; [its own quest](/quest/m3/quic-realtime/moqsink-feedback.md) owns that feedback. -## Required - -- [moqsink encoder feedback](/quest/m3/quic-realtime/moqsink-feedback.md) - GStreamer publishers retune their encoder to the target rate - ## Related - [QUIC on the sim](/quest/m4/quic-sim.md) - deterministic successor to the moq-shaper harness once it lands diff --git a/quest/m3/release/README.md b/quest/m3/release/README.md index 0bc42fcdbec..a3066dd3e3e 100644 --- a/quest/m3/release/README.md +++ b/quest/m3/release/README.md @@ -24,27 +24,3 @@ wire, archive-format, and legacy limits. Downstream staging, mixed-version upgrade/rollback, canaries, and broad rollout follow publication and require their own operator authorization. Do not mark production stability proven merely because upstream artifacts published. - -## Required - -- [Migration audit](/quest/m3/release/migrate-audit.md) - the cut writes a MIGRATE.md entry for every break, stating the net published-to-final change -- [API shape review](/quest/m3/release/api-review.md) - every new or changed public API reviewed for a better shape before the cut -- [Feature review](/quest/m3/release/feature-review.md) - every major work line since the last release judged end to end before the cut -- [Cargo feature review](/quest/m3/release/feature-flags.md) - defaults stay lean and every remaining feature is scoped to the crate that owns it, before the cut -- [Claim new npm names](/quest/m3/release/npm-first-publish.md) - a maintainer claims `@moq/clock`, `libav`, and `video` on npm with trusted publishing, before the cut publishes them -- [Cycle phases](/quest/m3/release/cycle-phases.md) - later cycles run additive, API, then wire, and cut on demand -- [Cut and publish](/quest/m3/release/cut.md) - independently executable after m2; release-triggered publication -- [Published assets](/quest/m3/release/assets-release.md) - npm carries hostable worklets -- [C++ publication](/quest/m3/release/cpp-release.md) - archives and matching OBS plugin publish and install -- [Generated C publication](/quest/m3/release/c-publish.md) - released archives run the C samples and interop client -- [Dart publication](/quest/m3/release/dart-publish.md) - the wrapper and native artifacts install from the registry -- [Final libmoq stub](/quest/m3/release/libmoq-final-release.md) - publish the migration notice before removing its source -- [Retire libmoq](/quest/m3/release/libmoq-retire.md) - cleanup only after that publication -- [Retire hand-written C](/quest/m3/release/c-retire.md) - delete the hand-written crate once generated C publishes -- [Retire the web-transport JS qmux](/quest/m3/release/qmux-js-retire.md) - once `@moq/qmux` publishes from `js/qmux`, deprecate `@moq/web-socket-stream` and stop the second publisher -- [Retire the web-transport Rust qmux](/quest/m3/release/qmux-rs-retire.md) - once `qmux` publishes from `rs/qmux`, moq-dev/web-transport stops publishing the crate -- [moq.sh deployment](/quest/m3/release/moq-sh-deploy.md) - verify its release-triggered publication -- [Runner client bump](/quest/m3/release/runner-client-bump.md) - the upstream interop runner's Rust client moves to the published moq-tokio, so it stops stamping every object -- [Smoke clients use request and follow](/quest/m3/release/smoke-bindings-rename.md) - condition: a binding release ships the renames; then the native smoke clients move to them -- [Relay loader adoption](/quest/m3/release/relay-loader-adoption.md) - once their pins carry it, embedding consumers load relay config through `Config::merge` and refuse obsolete spellings -- [moq.dev's hosted demos run on sockets](/quest/m3/release/demo-sockets-deploy.md) - after the cut, a maintainer deploys lite-07 and the socket grants so the hosted boy and CARLA demos connect diff --git a/quest/m3/stats/README.md b/quest/m3/stats/README.md index fc5d2f14893..74b24e0491b 100644 --- a/quest/m3/stats/README.md +++ b/quest/m3/stats/README.md @@ -118,15 +118,6 @@ generic, so they join this line as [client health](/doc/concept/stats.md#health) and [preflight](/quest/m3/stats/preflight.md). moq.pro keeps the per-project connection view and the dashboard flow. -## Required - -- [Rust reporters](/quest/m3/stats/rust.md) - the player and gateways - publish stats and feedback, as the CLI remuxes and capture do -- [Preflight](/quest/m3/stats/preflight.md) - a bounded test run over a - broadcast reports which media layer is broken and why -- [Client health in use](/quest/m3/stats/health-consumers.md) - a per-connection media counter, consumers of the grade, and re-measured limits -- [The media test checks browser feedback](/quest/m3/stats/feedback-media-test.md) - a browser publishes feedback and Rust reads it back with `moq export echo` - ## Related - [QoS](/quest/m3/qos/README.md) - the relay's delivery counters; the diff --git a/quest/m3/stream/README.md b/quest/m3/stream/README.md index 9ad4c08ef53..82ee813ba3d 100644 --- a/quest/m3/stream/README.md +++ b/quest/m3/stream/README.md @@ -56,9 +56,3 @@ This epic owns the end-to-end proof: an unmodified TCP client and server (SSH and an HTTP bulk transfer) talk through a two-relay chain with loss injected on one hop, with no corruption, FIN and reset propagated, and memory bounded by the window. - -## Required - -- [Rust byte streams](/quest/m3/stream/rust.md) - a duplex `AsyncRead`/`AsyncWrite` stream, a listener and a dialer, and `moq` CLI forwarding -- [JS byte streams](/quest/m3/stream/js.md) - the same surface in `@moq/net` -- [Stream benchmark](/quest/m3/stream/bench.md) - throughput and latency against raw TCP through a relay chain, with and without loss diff --git a/quest/m3/vendor-sync/README.md b/quest/m3/vendor-sync/README.md index 2c958955bb1..0a3a0f187b4 100644 --- a/quest/m3/vendor-sync/README.md +++ b/quest/m3/vendor-sync/README.md @@ -68,17 +68,6 @@ which builds pinned upstream libav.js, ffmpeg, and opus releases unmodified. Public API: none expected; a ported fix that changes one says so. Wire: QUIC behavior follows quinn's fixes. -## Required - -- [moq-quic has every quinn fix it needs](/quest/m3/vendor-sync/quinn.md) - moq-quic, moq-sock's `udp`, moq-tokio's driver, and moq-congestion's Cubic and BBR3 carry quinn's fixes -- [The WebRTC ports have every upstream fix they need](/quest/m3/vendor-sync/webrtc.md) - moq-congestion's GoogCC and moq-audio's NetEq time stretch follow WebRTC's fixes -- [moq-congestion's SCReAMv2 follows its draft and reference](/quest/m3/vendor-sync/scream.md) - draft revisions and Ericsson's reference fixes are ported or ruled out -- [moq-rtmp's rml has every upstream fix it needs](/quest/m3/vendor-sync/rml.md) - rust-media-libs fixes to rml_rtmp and rml_amf0 are ported or ruled out -- [moq-v4l has every libv4l-rs fix it needs](/quest/m3/vendor-sync/v4l.md) - libv4l-rs fixes are ported or ruled out -- [moq-nvenc has every upstream fix it needs](/quest/m3/vendor-sync/nvenc.md) - nvidia-video-codec-sdk fixes and NVIDIA SDK releases are ported or ruled out -- [moq-vaapi has every ChromeOS fix it needs](/quest/m3/vendor-sync/vaapi.md) - cros-libva and cros-codecs fixes are ported or ruled out -- [UniFFI generator forks are current](/quest/m3/vendor-sync/uniffi.md) - the four `kixelated/uniffi-*` forks carry the upstream fixes moq's bindings need - ## Related - [Dependency audit](/quest/m3/audit-deps.md) - covers crates cargo-deny can see diff --git a/quest/m3/video-quality/README.md b/quest/m3/video-quality/README.md index ff4f00bad74..e1f1b819bc9 100644 --- a/quest/m3/video-quality/README.md +++ b/quest/m3/video-quality/README.md @@ -67,11 +67,3 @@ Decided in planning (2026-10-28): - The moq-boy clip is generated, not stored. The emulator is deterministic, so the harness renders it from a public homebrew ROM on `rom.moq.dev` plus scripted input (✅ "Generate it" over "Store captures"). - -## Required - -- [Harness](/quest/m3/video-quality/harness.md) - `just test video-quality` scores OpenH264 rows with per-frame VMAF and boundary pops against floors, nightly -- [On-demand pops](/quest/m3/video-quality/on-demand.md) - cold starts, resubscribes, and fetch-encoded groups spliced with live ones stay under the pop ceiling -- [moq-boy quality](/quest/m3/video-quality/moq-boy.md) - moq-boy's encode is measured on generated clips and fixed -- [GPU runners](/quest/m3/video-quality/gpu-runners.md) - `nixos2` and the desktop host self-hosted runners for the nightly job -- [Hardware rows](/quest/m3/video-quality/hardware.md) - NVENC and VA-API rows from three GPU hosts gate the nightly and compare side by side diff --git a/quest/m3/webrtc/README.md b/quest/m3/webrtc/README.md index 19a1d9dfb3c..d1e87be2c15 100644 --- a/quest/m3/webrtc/README.md +++ b/quest/m3/webrtc/README.md @@ -18,17 +18,6 @@ Decided 2026-10-30 with the maintainer (planning interview), after the str0m wor - **Upstream fixes:** after vendoring, nobody merges upstream automatically. Record the vendored upstream versions in the crate docs; the release-cut audit checks the upstream changelogs for security fixes (malformed SRTP/RTCP input, for example) and ports them. - Docs a change makes stale (crate names, `doc/lib/rs`, `doc/setup/upgrade.md`, other quests naming a crate or module) change in the PR that makes them stale. -## Required - -- [A typed DTLS handshake timeout error](/quest/m3/webrtc/dtls-timeout.md) - callers match a DTLS handshake timeout by variant, and session end treats it like an ICE timeout -- [Several bandwidth lines per media section](/quest/m3/webrtc/sdp-bandwidth.md) - answers carry both `b=TIAS` and `b=AS` without splicing -- [DTLS waits for ICE](/quest/m3/webrtc/dtls-after-ice.md) - DTLS flights start once ICE nominates a pair, so a late ICE path can't exhaust them -- [The stack takes kio clock time](/quest/m3/webrtc/clock.md) - the vendored code takes `kio::clock::Instant`, so sim tests drive it directly -- [WHIP/WHEP builds carry no SCTP](/quest/m3/webrtc/sctp-feature.md) - SCTP compiles only with the `p2p` feature -- [The vendored stack keeps only what browsers negotiate](/quest/m3/webrtc/browser-only.md) - PSK suites, `ccm`, and anything else no browser uses are gone -- [The vendored stack exposes only what moq-webrtc calls](/quest/m3/webrtc/dead-api.md) - dead upstream API is deleted once clock settles the time seams -- [A failed client socket ends a WebRTC session with an error](/quest/m3/webrtc/socket-error.md) - a client or `p2p` session whose socket fails ends with its I/O error, not `Ok` or `Closed` - ## Related - [moq-webrtc paces WHEP viewers](/quest/m3/rtc-pacing.md) - adds the NACK hook and the shared pacer on the vendored stack diff --git a/quest/m3/wire-stats/README.md b/quest/m3/wire-stats/README.md index 038b0c4c03f..8f4b9ba0ab4 100644 --- a/quest/m3/wire-stats/README.md +++ b/quest/m3/wire-stats/README.md @@ -70,10 +70,3 @@ receive-side limitations. - **One source registry for sessions and embedders.** An embedder registers a gateway connection's wire source on a `stats::Session` from its stats handle's `session(label)`, the same path the relay's own sessions use. - -## Required - -- [qmux byte counters](/quest/m3/wire-stats/qmux.md) - a WebSocket session - reports its TCP bytes -- [moq-srt wire source](/quest/m3/wire-stats/srt.md) - an SRT connection - reports its wire bytes diff --git a/quest/m4/README.md b/quest/m4/README.md index 162d30f2e58..5671e191e2a 100644 --- a/quest/m4/README.md +++ b/quest/m4/README.md @@ -14,95 +14,3 @@ m2 ("later work"), as [m3](/quest/m3/README.md) describes. After each cut m4's quests move to m3 and m4 starts empty. A quest here that gains a consumer moves to m3; one that loses its last reason moves to m5 or is deleted. - -## Required - -- [Wire fuzz coverage](/quest/m4/wire-fuzz-coverage.md) - the cmsg walks in moq-sock and moq-uring have invariant fuzz targets, and the unsafe peer input reaches runs under Miri -- [VA-API renderer tests](/quest/m4/vaapi-render-tests.md) - the VA-API renderer, decode, and transcode tests run in `just rs gpu` on AMD and Intel and fail instead of skipping, and hosted CI reports them ignored -- [One Ruff pin and Swift formatting on aarch64-linux](/quest/m4/format-gate-followups.md) - only the dev shell pins Ruff, and aarch64-linux checks Swift formatting once nixpkgs builds `swiftc` there -- [P2P](/quest/m4/p2p/README.md) - application-selected peer sessions use shared priorities, routing, and same-epoch handover -- [Challenge proof for certificate credentials](/quest/m4/cert-challenge.md) - a relay can require a signed nonce, so a certificate credential replayed within its time window admits nothing -- [Benchmark sources](/quest/m4/bench-sources.md) - every measuring nightly benchmark feeds the regression table, and none is a smoke run -- [The fan-out benchmark's session scenario builds again](/quest/m4/bench-fanout-session.md) - `just bench-fanout` measures sessions, not only the model -- [A browser round-trips media through moq-webrtc](/quest/m4/whip-whep-browser.md) - Chromium and Firefox publish over WHIP and play over WHEP nightly -- [Shared corpora live in each crate's fixtures/](/quest/m4/corpus-fixtures.md) - moq-auth's corpus moves beside moq-net's -- [An MV-HEVC stream with access unit delimiters stays one frame per access unit](/quest/m4/h265-layered-aud.md) - x265's `--aud` layered output imports, or is refused by name -- [HLS and DASH browser playback](/quest/m4/hls-player-test.md) - hls.js and dash.js play, reload, switch, and survive reconfiguration nightly -- [Cache fair share](/quest/m4/cache-fairness.md) - one tenant cannot crowd another out of the relay's shared group cache -- [Peer grant bound](/quest/m4/peer-grant-bound.md) - a peer's AUTH_OK costs near-linear time in its bytes on every input shape, in Rust and in a browser -- [A regrant re-checks only the routes it can change](/quest/m4/regrant-route-recheck.md) - an `AUTH_OK` no longer costs routes times grant members on every lite announce stream -- [Upstream reports](/quest/m4/upstream-reports.md) - report the faad, retina, and mr-boxington bugs found before the cut -- [moq-net's library tests pass under cargo test](/quest/m4/net-test-subscriber.md) - two moq-net tests stop each installing a global tracing subscriber, so plain `cargo test -p moq-net --lib` passes -- [Perf](/quest/m4/perf/README.md) - eliminate measured hot-path costs across moq-uring, kio, and the moq-net model -- [kio channel contention](/quest/m4/kio-channel-contention/README.md) - workers spend less time blocked on kio channel-state mutexes, promoted out of Perf -- [Stream transports](/quest/m4/stream-transports/README.md) - qmux drives its own WebSocket and TCP sockets in one task, then serves them from the io_uring workers, promoted out of Perf -- [Transport x version benches](/quest/m4/bench-transport-sweep.md) - the session benches sweep transports as well as versions -- [Shared group serving and ingest](/quest/m4/shared-serve.md) - Rust's moq-lite and moq-transport sessions serve and ingest groups through one poll machine each, with only wire encoding per protocol -- [Shared group serving and ingest in JS](/quest/m4/shared-serve-js.md) - the same split in js/net, following the Rust seam -- [Paired bench BASE](/quest/m4/bench-base-paired.md) - `just bench ` uses the nightly's paired comparison and the old one is deleted -- [Route wakes](/quest/m4/route-wakes.md) - a route change wakes only the fronts it can move, so pool churn stops scaling with served paths -- [Audio outlives video](/quest/m4/audio-bufferbloat-av.md) - under bufferbloat audio stays within budget while video may skip, rendered frames stay in sync, and native audio rows are enforced -- [ViSQOL grading](/quest/m4/audio-visqol.md) - the nightly scores played audio against a reference clip and fails below measured floors -- [Browser publishing paths under test](/quest/m4/publish-firefox.md) - the media harness publishes from Firefox in Nightly and passes, covering the `