From e5173d75edbad8c59458d9b5d7af92dfdd0cd188 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Fri, 6 Nov 2026 09:16:22 -0800 Subject: [PATCH 1/3] quest: clear resolved waits and record 2026-11-06 unblock decisions - agent-disk-budget, ashpd-maintained: waits cleared (dotfiles#41 installed; ashpd 0.14.0 on zbus 6). - hakari: second macOS after-run recorded; quest finished. - queue-concurrency: trial dropped by the maintainer. - watch: Safari +40 ms row dropped. - padding: parked in m3; setTarget stays on Handle. - hakari-followups, nix-cache-verify, macos, ffi-datagram-roundtrip: record partial evidence and narrow the remaining waits. Co-Authored-By: Claude Opus 5.5 --- quest/m0/agent-disk-budget.md | 10 +-- quest/m0/ci/README.md | 8 +-- quest/m0/ci/five-minutes.md | 9 +-- quest/m0/ci/hakari-followups.md | 23 +++---- quest/m0/ci/hakari.md | 64 ------------------- quest/m0/ci/mbx-r2-verify.md | 4 +- quest/m0/ci/nix-cache-verify.md | 23 +++++-- quest/m0/ci/queue-concurrency.md | 53 --------------- quest/m0/nightly/macos.md | 11 ++-- .../test-flakes-2/ffi-datagram-roundtrip.md | 14 ++-- quest/m1/audio-jitter-target/watch.md | 20 +++--- quest/m2/lite07-finalize.md | 2 +- quest/m2/probe/README.md | 5 +- quest/m2/probe/browser-send-estimate.md | 2 +- quest/m2/probe/rung-disable-js.md | 4 +- quest/m2/recut-held.md | 7 +- quest/m3/README.md | 1 + quest/m3/audit-compile-time.md | 2 +- .../probe/padding.md => m3/probe-padding.md} | 12 ++++ quest/m4/ashpd-maintained.md | 11 +--- 20 files changed, 90 insertions(+), 195 deletions(-) delete mode 100644 quest/m0/ci/hakari.md delete mode 100644 quest/m0/ci/queue-concurrency.md rename quest/{m2/probe/padding.md => m3/probe-padding.md} (86%) diff --git a/quest/m0/agent-disk-budget.md b/quest/m0/agent-disk-budget.md index cdadd17eb33..162151812f1 100644 --- a/quest/m0/agent-disk-budget.md +++ b/quest/m0/agent-disk-budget.md @@ -17,10 +17,10 @@ unknown, or held open by a process. Its design and the read-only classification of 2026-11-05 (873 finished checkouts holding about 76.6 GiB of managed targets) are in [moq-dev/moq#7960](https://github.com/moq-dev/moq/pull/7960). -Once it is installed, sample `df /` across a busy day, confirm +Installed 2026-11-06: [kixelated/dotfiles#41](https://github.com/kixelated/dotfiles/pull/41) +merged at 16:35:00Z, and `worktree-clean.timer` last ran at 16:35:06Z +(checked 2026-11-06, /quest-unblock). + +Now sample `df /` across a busy day, confirm `worktree-clean.service`'s journal shows reclaimed targets and no live checkout touched, and delete this quest in a PR recording both. - -## Waiting - -- Maintainer: merge and install [kixelated/dotfiles#41](https://github.com/kixelated/dotfiles/pull/41) on the desktop, since an agent session must not install over the live dotfiles or mass-delete targets; check that `systemctl --user list-timers` lists `worktree-clean.timer` with a last run that postdates the install. diff --git a/quest/m0/ci/README.md b/quest/m0/ci/README.md index bbd4d9447c8..45097413c45 100644 --- a/quest/m0/ci/README.md +++ b/quest/m0/ci/README.md @@ -86,8 +86,10 @@ re-enqueues them. Batching and pre-checks are dropped, and the host gate is frozen. The landing quest closed 2026-11-04 with busy hours merging a median 11.0 PRs against the queue baseline's 6.0 (its [last version](https://github.com/moq-dev/moq/blob/17a81d6c64/quest/m0/ci/land.md) -holds the cutover record); a second concurrent entry is a -[measured trial](/quest/m0/ci/queue-concurrency.md). +holds the cutover record). Decided 2026-11-06 (maintainer, /quest-unblock): +✅ drop the trial of a second concurrent entry, which ran out of shared runner +disk on 2026-11-05; the queue stays at one entry. Not chosen: retrying it after +[kixelated/nixos#26](https://github.com/kixelated/nixos/pull/26)'s inode fix. Decided 2026-10-23 (maintainer), to speed up the serial queue: structural changes first (concurrent entries, parallel modules, one test build), then a @@ -178,8 +180,6 @@ The historical samples locate candidates; they are not controlled benchmarks. - [Gate each diff in under five minutes](/quest/m0/ci/five-minutes.md) - `just check`, test phases included, finishes within a worker's 5-minute prompt cache, admission wait included - [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 - [Verify the Nix runtime cache](/quest/m0/ci/nix-cache-verify.md) - hosted Cache uploads `main`'s relay and CLI, and Smoke's nix channel substitutes them -- [Record hosted cargo-hakari evidence](/quest/m0/ci/hakari.md) - compare scheduled macOS and Windows cache hits and estimated compiler work saved before and after the workspace-hack - [Drop main from the publish Environment](/quest/m0/ci/publish-release-only.md) - the maintainer narrows `publish` to `release` and release tags once no job naming it runs as `main` - [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 -- [Build two queue entries at once if it helps](/quest/m0/ci/queue-concurrency.md) - a measured trial of `maximumEntriesToBuild: 2` against the serial lane's burst latency diff --git a/quest/m0/ci/five-minutes.md b/quest/m0/ci/five-minutes.md index ff4b3b9ca70..5b14e6f50d6 100644 --- a/quest/m0/ci/five-minutes.md +++ b/quest/m0/ci/five-minutes.md @@ -148,14 +148,11 @@ What remains: ([moq-dev/moq#7632](https://github.com/moq-dev/moq/pull/7632)) merged 2026-11-04. - Keep the dependency-build and cache work with - [hakari](/quest/m0/ci/hakari.md). Decided 2026-10-30 (user): defer parallel - Rust lint until that quest lands, then measure it. The slow-tests reduction + [hakari follow-ups](/quest/m0/ci/hakari-followups.md). Decided 2026-10-30 + (user): defer parallel Rust lint until the cargo-hakari quest lands, then + measure it. That quest finished 2026-11-06, so it can be measured now. The slow-tests reduction landed in [moq-dev/moq#6987](https://github.com/moq-dev/moq/pull/6987); the BTree thin-generics lever measured about 30 ms of CPU per build and was dropped. - Prefer the epic's levers and tighter diff selection over moving coverage. Moving a check to the queue or nightly still needs evidence and an explicit coverage tradeoff. Split a large independent lever into its own quest. - -## Related - -- [Unify dependency features](/quest/m0/ci/hakari.md) - cache hits across feature shapes diff --git a/quest/m0/ci/hakari-followups.md b/quest/m0/ci/hakari-followups.md index 2cfaf7e58c7..e28b8895483 100644 --- a/quest/m0/ci/hakari-followups.md +++ b/quest/m0/ci/hakari-followups.md @@ -64,21 +64,22 @@ its mbx summaries. The first post-merge run, [42050683248](https://github.com/moq-dev/moq/actions/runs/42050683248/job/127325640293), cancelled that job at the 60-minute timeout, so it is incomplete evidence. +Checked 2026-11-06 (/quest-unblock): the baseline's 10 summaries total 333 hits and 359 misses +(48.12%), 401 not looked up, 12 bypassed, 2 remote failures, about 12m28s of +compiler time avoided. The first complete post-merge run, +[42236107954](https://github.com/moq-dev/moq/actions/runs/42236107954/job/127954016736) +(2026-11-06), totals 427 hits and 615 misses (40.98%), 20 not looked up, 4 +bypassed, 5 remote failures, about 12m0s avoided; several builds hit the 5 GiB +download budget. It failed only on the `moq-uring` socket-queue benchmark's 60 s +test timeout, as the baseline did. + Public API: none. Wire: none. ## Waiting -- moq-dev/moq: collect the baseline run 41852517544's and the first two - complete post-merge Nightlies' mbx hit rates and available compiler-time - fields for `Nightly (Rust benchmark tests)`. No complete post-merge evidence - exists yet: the 2026-11-05 run cancelled the job at 60 minutes. If the cache +- moq-dev/moq: collect a second complete post-merge Nightly's mbx hit rate and + compiler-time fields for `Nightly (Rust benchmark tests)`, beside the + baseline and 2026-11-06 numbers in the Plan. If the cache cost is material, present the measured tradeoff to the maintainer; recommend keeping the narrow final exclusions unless the measurements justify another design. - -## Related - -- [Unify dependency features with cargo-hakari](/quest/m0/ci/hakari.md) - owns - the separate macOS/Windows evidence and FFI invocation alignment in - [moq-dev/moq#7666](https://github.com/moq-dev/moq/pull/7666); do not duplicate - those measurements diff --git a/quest/m0/ci/hakari.md b/quest/m0/ci/hakari.md deleted file mode 100644 index 8b9841a4873..00000000000 --- a/quest/m0/ci/hakari.md +++ /dev/null @@ -1,64 +0,0 @@ -# [S] Record hosted cargo-hakari cache evidence - -## Goal - -Nightly's hosted macOS and Windows jobs record their mbx cache-hit evidence and -estimated compiler work saved before and after the workspace-hack. - -## Plan - -Decided 2026-11-04 (maintainer, /quest-unblock): ✅ accept the mbx cache-hit -evidence and estimated compiler savings as sufficient. Not chosen: add per-job -CPU instrumentation and measure CPU totals. The estimates are not measured CPU -savings. - -Decided with the maintainer on 2026-10-25: use cargo-hakari rather than only -trimming CI's feature permutations. -[moq-dev/moq#6985](https://github.com/moq-dev/moq/pull/6985) added the path-only -dev-dependency layout, unifying test, lint, and bench builds. Keep that layout; -library-only builds do not need the hack. - -The remaining FFI invocation alignment landed in -[moq-dev/moq#7666](https://github.com/moq-dev/moq/pull/7666) (merged -2026-11-05): default builds use -`cargo build-ffi` with `openh264`, native builds omit `--target`, and only cross -builds name a target. Python and Dart host tests retain `testing` for the manual -clock and leak allocator, with separate target directories so they cannot -replace the default cdylib. Their third-party feature identities match the -default host build; the intentional `kio/manual` split affects workspace crates. - -Compare the mbx summaries of the last scheduled Nightly before the -[2026-11-02 merge](https://github.com/moq-dev/moq/commit/8e53bf32185fec578e460ff6ccbe41a80a039a6a) -with the first two after. Query only scheduled runs on `main`: -`gh run list --workflow nightly.yml --branch main --event schedule`. -The baseline is [2026-11-01](https://github.com/moq-dev/moq/actions/runs/41313466339). -The [2026-11-02 run](https://github.com/moq-dev/moq/actions/runs/41483654426) -has partial macOS summaries before a websocket-test timeout and no Windows -compilation (NASM installation returned HTTP 503). -[2026-11-03](https://github.com/moq-dev/moq/actions/runs/41656613559) completed -both platform jobs. [2026-11-04](https://github.com/moq-dev/moq/actions/runs/41852517544) -completed Windows, but cancelled macOS before any step ran. Windows therefore -has two complete after-runs; macOS has only one. Logs expose object-cache counts -and estimated compiler work saved, but no measured user/system CPU totals. -Do not call elapsed time CPU time, or attribute these earlier runs to the FFI -alignment, which landed only on 2026-11-05. - -The 2026-11-04 maintainer decision accepts hosted CI as the strict Nix gate; -a local namespace-probe skip is expected. The pkg-config and Gradle repairs -have landed, so neither remains an external prerequisite. - -Public API and wire: none. - -## Waiting - -- moq-dev/moq: inspect the next scheduled Nightly for a second complete macOS - after-run. The macOS job cannot give one until - [Nightly's macOS platform job passes](/quest/m0/nightly/macos.md) fixes - `moq-audio`'s macOS test build: the - [2026-11-05 macOS job](https://github.com/moq-dev/moq/actions/runs/42050683248/job/127326015410) - failed compiling it (E0277, `rs/moq-audio/src/capture.rs:859`), and the - [Nov 4](https://github.com/moq-dev/moq/actions/runs/41852517544/job/126656206251) - one was cancelled with no steps. Run - `gh run list --repo moq-dev/moq --workflow nightly.yml --event schedule`, - inspect the next macOS job and record its mbx summaries alongside Nov 3. - This measurement wait outlives the implementation PR; never dispatch Nightly. diff --git a/quest/m0/ci/mbx-r2-verify.md b/quest/m0/ci/mbx-r2-verify.md index 457d80806ca..9e1ec3bc00f 100644 --- a/quest/m0/ci/mbx-r2-verify.md +++ b/quest/m0/ci/mbx-r2-verify.md @@ -36,8 +36,8 @@ self-hosted `moq-queue` runner with mbx's local store, so it neither reads nor writes R2. Decided 2026-10-27 (maintainer): the cross-job miss report moved to -[unifying dependency features](/quest/m0/ci/hakari.md), which measures its own -before and after baseline and no longer waits on this quest. +the cargo-hakari quest, which recorded its own before and after baseline and +finished 2026-11-06. The first scheduled Nightly on mbx 1.28.0, [40506938673](https://github.com/moq-dev/moq/actions/runs/40506938673) diff --git a/quest/m0/ci/nix-cache-verify.md b/quest/m0/ci/nix-cache-verify.md index 3f67ea55449..775cbac9775 100644 --- a/quest/m0/ci/nix-cache-verify.md +++ b/quest/m0/ci/nix-cache-verify.md @@ -40,15 +40,24 @@ backports `release-nix.yml` to `release` now instead of waiting for the cut. Use the scheduled and push runs; never dispatch Nightly for this evidence. +Checked 2026-11-06 (/quest-unblock): the upload half is done. The first successful Cache run after +#7662, [42119995773](https://github.com/moq-dev/moq/actions/runs/42119995773) +on 6b008527d3, pushed both closures (`moq-relay-0.17.2` and `moq-cli-0.14.2`, +the package behind the `moq` attribute) at 22:39:40Z. The next scheduled Smoke, +[42245927828](https://github.com/moq-dev/moq/actions/runs/42245927828) +(2026-11-06, started 15:45Z), fetched the deps from `nix.moq.dev` but still +compiled both binaries. Smoke builds `github:moq-dev/moq#...` unpinned, so it +built main as of 16:28Z (2916531c19), whose Cache run was cancelled, rather +than its own head. Any Smoke that starts while main is ahead of its last +completed Runtime upload misses the same way. + ## Waiting -- moq-dev/moq: Once - [moq-dev/moq#7662](https://github.com/moq-dev/moq/pull/7662) merges, record the first successful Cache run's - `Runtime (ubuntu-24.04)` job uploading both closures - (`gh run list --workflow cache.yml --branch main`), then the next Smoke run - on that head or later (the 08:00 UTC schedule) whose - `ubuntu-latest / nix` job copies `moq-relay` and `moq` from - `https://nix.moq.dev` instead of compiling them. +- moq-dev/moq: a scheduled Smoke run (08:00 UTC) whose `ubuntu-latest / nix` + job copies `moq-relay` and `moq` from `https://nix.moq.dev` instead of + compiling them. Check that the main commit it built had a completed Cache + `Runtime (ubuntu-24.04)` upload; a miss on a commit without one says nothing + about the cache. ## Related diff --git a/quest/m0/ci/queue-concurrency.md b/quest/m0/ci/queue-concurrency.md deleted file mode 100644 index 9155f355ac8..00000000000 --- a/quest/m0/ci/queue-concurrency.md +++ /dev/null @@ -1,53 +0,0 @@ -# [S] The merge queue builds two entries at once if it measurably helps - -## Goal - -A measured trial decides whether moq's merge queue builds two entries at once -(`maximumEntriesToBuild: 2`) or stays at one. Done when the PR records both -settings' burst p90 enqueue-to-merge latency and median merges per -never-empty hour over comparable windows, and the maintainer keeps the winner -in the ruleset. - -## Plan - -Planned 2026-11-04 with the maintainer. The landing quest -([last version](https://github.com/moq-dev/moq/blob/17a81d6c64/quest/m0/ci/land.md)) -ran the queue at build concurrency 1 and said to try 2 only with measured -data. Its performance goal closed on that data (decided 2026-11-04 ✅): over -2026-11-03 06:47Z to 2026-11-04 06:47Z, the eight hours the queue was never -empty merged a median of 11.0 PRs against the queue baseline's 6.0. - -Why try 2: with a median queue build of 4.4 min, one lane tops out near 13 -merges an hour, and busy hours already run close to that. Bursts of 22-26 -entries on 2026-11-03 pushed p90 enqueue-to-merge to about 58 min (median -20.6 min), and waiting behind other entries was most of it. - -Method: occupancy comes from the PRs' `AddedToMergeQueue`, -`RemovedFromMergeQueue` and `Merged` timeline events (reconstruct removed and -unmerged entries too). Compare at least one busy day at each setting, and -count queue failures per build, since building two means a failure in the -first entry rebuilds the second. The ruleset change and revert are the -maintainer's actions (ruleset 2420853); the quest names the setting and -reports the numbers. The host runner must handle two builds at once without -the shared mbx cache or `quest gate` admission erasing the gain, so record -host load during the trial. - -The trial started early (decided 2026-11-05, maintainer, /quest-plan): the -second queue runner `nixos-moq-ci2` landed in -[kixelated/nixos#24](https://github.com/kixelated/nixos/pull/24), and ruleset -2420853 went to `max_entries_to_build: 2` at 2026-11-05T15:49:30Z. - -It ran out of disk the same day, so the maintainer ended it early -(decided 2026-11-05, maintainer, /quest-complete; ruleset back to 1 at -2026-11-05T18:02:15Z, scheduled revert cancelled). At 17:12Z -`nixos-moq-ci2` failed a merge-group build with `No space left on device` -under `/var/cache/github-runner-work/moq/moq` -([job](https://github.com/moq-dev/moq/actions/runs/42072368255/job/127403437474)), -dropping [moq-dev/moq#7716](https://github.com/moq-dev/moq/pull/7716). Every -CI runner on `nixos` shares one XFS project quota (project 42000, 667 GiB -hard; 578 GiB used afterwards), and each moq queue runner keeps its own -Cargo targets and mbx caches inside it (`modules/ci-runners.nix`: MBX target -25 GiB, GC 50-80 GiB). Before a retry, size the per-runner caches or the -quota in kixelated/nixos for two concurrent moq builds, and show the quota's -headroom with both runners warm. The 15:49Z-18:02Z window is too short and -too disturbed to compare. diff --git a/quest/m0/nightly/macos.md b/quest/m0/nightly/macos.md index d9fe7628bb5..5623f1561a4 100644 --- a/quest/m0/nightly/macos.md +++ b/quest/m0/nightly/macos.md @@ -50,8 +50,11 @@ Public API: none. Wire: none. ## Waiting -- moq-dev/moq: after the capture fix lands, verify a green scheduled macOS job - on main and inspect the websocket test's results across a week of scheduled - runs. Recommendation: land the reviewed capture fix, then retain this quest - until the scheduled evidence is available. A branch dispatch can check the +- moq-dev/moq: inspect the websocket test's results across a week of + scheduled macOS runs on main. The capture fix, + [moq-dev/moq#7976](https://github.com/moq-dev/moq/pull/7976), merged + 2026-11-06; the first scheduled run after it, + [42236107954](https://github.com/moq-dev/moq/actions/runs/42236107954/job/127954206481), + is green, with `broadcast_websocket_uses_newest_version` passing in 0.031 s + (1 of 7 runs). A branch dispatch can check the fix but cannot establish the required scheduled-main history. diff --git a/quest/m0/test-flakes-2/ffi-datagram-roundtrip.md b/quest/m0/test-flakes-2/ffi-datagram-roundtrip.md index 525d707ba2b..4f561a76c44 100644 --- a/quest/m0/test-flakes-2/ffi-datagram-roundtrip.md +++ b/quest/m0/test-flakes-2/ffi-datagram-roundtrip.md @@ -51,14 +51,12 @@ Investigation 2026-11-05 on `main` at `419b799c75`: ## Waiting -- moq-dev/moq: wait for - [moq-dev/moq#7951](https://github.com/moq-dev/moq/pull/7951) to merge, then - capture a failing run under CI load with send/route diagnostics. Check the - PR's merged state with `gh pr view 7951 --json state,mergedAt`; once merged, - run the ignored case locally under CI-like concurrent build/test load, - with diagnostics at `DatagramSend::send` and `Subscriber::route_datagram`, - retaining a failing trace. Explicitly include the quarantine with - `quest gate just rs test -p moq-ffi --lib +- moq-dev/moq: capture a failing run under CI load with send/route + diagnostics ([moq-dev/moq#7951](https://github.com/moq-dev/moq/pull/7951) + merged 2026-11-06). Run the ignored case locally under CI-like concurrent + build/test load, with diagnostics at `DatagramSend::send` and + `Subscriber::route_datagram`, retaining a failing trace. Explicitly include + the quarantine with `quest gate just rs test -p moq-ffi --lib -E 'test(datagrams_cross_a_default_connection)' --run-ignored all --no-capture`; normal Check and queue runs intentionally skip it. Use it to distinguish ordinary transport loss, a route miss, or another lifecycle bug and choose the corresponding fix before re-enabling. diff --git a/quest/m1/audio-jitter-target/watch.md b/quest/m1/audio-jitter-target/watch.md index cbf9b8a41bb..e7ad3ff6d62 100644 --- a/quest/m1/audio-jitter-target/watch.md +++ b/quest/m1/audio-jitter-target/watch.md @@ -12,8 +12,8 @@ sizes. The measured rows are the `relay-mic-rtt40` replay row, whose `player_underruns_per_min` must reach 0, and a live re-run of the 2026-11-03 -rows below on Chrome and Safari with a real microphone and 40 ms or more of -added RTT, read from the stats panel's audio Underruns. +Chrome rows below with a real microphone and 40 ms or more of added RTT, read +from the stats panel's audio Underruns. Boundaries: no packet loss concealment, so a frame that never arrives is still missing audio; only received audio is stretched. The estimator stays as @@ -138,8 +138,8 @@ the replay numbers that justify it. budget is tightened to the new measurement. No other replay row regresses, and the nightly browser rows are re-measured by the budgets note's rule. A listening check confirms that a 2 ms/s drift and the measured expansions are - inaudible or close to it. The 2026-11-03 Chrome and Safari +40 ms rows are - re-run on real hardware. + inaudible or close to it. The 2026-11-03 Chrome +40 ms rows are re-run on + real hardware. ### Publisher, measured in the same run @@ -165,14 +165,10 @@ audio-driven clock for this. Recommendation: measure the gap against the sample reaching the output, through `AudioContext.getOutputTimestamp()`, so output latency, Bluetooth included, is part of the lip sync. -## Waiting - -- Maintainer: Safari with 40 ms or more of added RTT, the baseline row the - 2026-11-03 run could not shape. On the MacBook Air (`kixtop`), install - Network Link Conditioner (Additional Tools for Xcode) or allow - `sudo dnctl`/`pfctl`, then play `cdn.moq.dev/anon` in Safari with the stats - panel open for two minutes, and record its audio Underruns after 30 s and the - latency tab's auto delay. +Decided 2026-11-06 (maintainer, /quest-unblock): ✅ drop the Safari row with +40 ms or more of added RTT, which needed the maintainer to shape the link on +their laptop. The Safari direct rows stay. Not chosen: running it by hand, or +allowing `sudo dnctl`/`pfctl` there. ## Related diff --git a/quest/m2/lite07-finalize.md b/quest/m2/lite07-finalize.md index c8099055a51..ead69e3533b 100644 --- a/quest/m2/lite07-finalize.md +++ b/quest/m2/lite07-finalize.md @@ -73,7 +73,7 @@ parameter, has landed, and the rest is API work that does not block the rename. The archive line's TRACKS request (a per-broadcast track listing that replaced SUBSCRIBE_ALL) landed in [#6158](https://github.com/moq-dev/moq/pull/6158) and [#6167](https://github.com/moq-dev/moq/pull/6167), and the padding stream -type for the m2 browser [padding probes](/quest/m2/probe/padding.md) landed in +type for the browser [padding probes](/quest/m3/probe-padding.md) landed in [#6233](https://github.com/moq-dev/moq/pull/6233). Decided 2026-10-30 (maintainer, on [moq-dev/moq#7390](https://github.com/moq-dev/moq/pull/7390)): those probes diff --git a/quest/m2/probe/README.md b/quest/m2/probe/README.md index 88931d6bae5..3771c17b140 100644 --- a/quest/m2/probe/README.md +++ b/quest/m2/probe/README.md @@ -45,7 +45,7 @@ publisher-local padding handle: resends in-flight data during BBR3's Startup and one ProbeBW_UP per probe wait ([moq-dev/moq#6635](https://github.com/moq-dev/moq/pull/6635)). A browser over WebTransport can't reach its controller, so a lowest-priority padding stream on an ALR probe - schedule does ([padding](/quest/m2/probe/padding.md)). + schedule does ([padding](/quest/m3/probe-padding.md)). Decided with the maintainer on 2026-10-20: @@ -66,7 +66,7 @@ Decided with the maintainer on 2026-10-20: native rung recovery needs, and viewer handles, viewer grants, the peer's PROBE target, and `Increase` came back here as viewer targets, beside their consumers, and landed in [moq-dev/moq#7090](https://github.com/moq-dev/moq/pull/7090). - The `js/net` send target moved to [padding](/quest/m2/probe/padding.md), its + The `js/net` send target moved to [padding](/quest/m3/probe-padding.md), its only sender. Decided with the maintainer on 2026-11-03, in review of @@ -98,7 +98,6 @@ This README's own work, once the children land: - [Browser send estimate](/quest/m2/probe/browser-send-estimate.md) - shipping Chrome and Safari publishers adapt to the relay's PROBE estimate, since they have no `getStats()` - [One page-wide getStats sampling ticker](/quest/m2/probe/stats-ticker.md) - a page's connections share one sampling ticker -- [Padding probes](/quest/m2/probe/padding.md) - a browser probes with a lowest-priority padding stream on an ALR schedule - [JS rung disable](/quest/m2/probe/rung-disable-js.md) - `@moq/publish` applies the native rung rule, recovering through padding - [Players set viewer targets](/quest/m2/probe/players.md) - players hold a viewer handle per watched broadcast at its highest enabled rendition's bitrate - [Viewer up-switch](/quest/m2/probe/viewer-upswitch.md) - a viewer capped by its small rendition finds headroom through PROBE and moves up diff --git a/quest/m2/probe/browser-send-estimate.md b/quest/m2/probe/browser-send-estimate.md index 38fa0cb6687..b1c1f81da0e 100644 --- a/quest/m2/probe/browser-send-estimate.md +++ b/quest/m2/probe/browser-send-estimate.md @@ -11,7 +11,7 @@ Found by [moq-dev/moq#7524](https://github.com/moq-dev/moq/pull/7524), which gat Decided 2026-11-01 (maintainer, follow-up planning after the 2026-11-01 /quest-afk run): m2, in the probe epic, feeding the peer's PROBE estimate to the send allocator. The relay already reports what it receives from us: `Probe.estimatedRecvRate` in `js/net/src/connection/stats.ts`, exposed as `Reload.probe` (`js/net/src/connection/reload.ts`). - Source order: a transport `getStats()` estimate where the browser has one, else the peer's PROBE `estimatedRecvRate`, else `undefined` (hold the rate, as today). Settle in the PR whether a present-but-empty `getStats` counts as absent. -- A receive-rate report lags the send side by about an RTT plus the peer's report cadence, and reads what arrived rather than what the path could carry. Check how the allocator should treat it while app-limited (it can only fall or hold, not rise past what was sent), and leave raising it to [padding](/quest/m2/probe/padding.md). +- A receive-rate report lags the send side by about an RTT plus the peer's report cadence, and reads what arrived rather than what the path could carry. Check how the allocator should treat it while app-limited (it can only fall or hold, not rise past what was sent), and leave raising it to [padding](/quest/m3/probe-padding.md). - Observing `Reload.probe` requests reports from the peer; request them only while a reservation reads the estimate, matching #7524's gate. - Test on `@moq/clock`'s `Manual` with a mock session whose transport has no `getStats`: a PROBE report reaches `Reservation.rate`, a falling report lowers it, and a reconnect clears it. Verify in shipping Chromium (no flag) through a shaped link that a publisher's bitrate follows a capacity drop. diff --git a/quest/m2/probe/rung-disable-js.md b/quest/m2/probe/rung-disable-js.md index 0bcc6d6d215..5bc5b87793d 100644 --- a/quest/m2/probe/rung-disable-js.md +++ b/quest/m2/probe/rung-disable-js.md @@ -12,7 +12,7 @@ lower renditions keep their share instead of every rung degrading together. Split from the native rung disable by the maintainer on 2026-10-20: the native publishers moved to m1 on native probing, while a browser can only probe with -[padding](/quest/m2/probe/padding.md), which stays in m2. +[padding](/quest/m3/probe-padding.md), parked in m3 on 2026-11-06. - Mirror the native quest's rule and constants from `moq_mux::rate`, rather than tuning a JS-only one. Its decisions hold here too: catalog state @@ -34,7 +34,7 @@ Public API: whatever knob `@moq/publish` exposes for the rule. Wire: none. ## Required -- [Padding probes](/quest/m2/probe/padding.md) - the browser's sender, which raises the estimate so a disabled rung can resume +- [Padding probes](/quest/m3/probe-padding.md) - the browser's sender, which raises the estimate so a disabled rung can resume ## Related diff --git a/quest/m2/recut-held.md b/quest/m2/recut-held.md index 84ecd4ed448..2468f216ac7 100644 --- a/quest/m2/recut-held.md +++ b/quest/m2/recut-held.md @@ -25,11 +25,12 @@ Drop-set is a single quest, not an epic, so it has no `Required` entry here: when this runs, move it if it still exists and nothing claims it. Prose that names a held epic's milestone becomes stale when it moves; update -it in the same PR: datagram tracks in [net-wrap](/quest/m5/net-wrap/README.md), and the browser -padding probes in [lite07-finalize](/quest/m2/lite07-finalize.md). +it in the same PR: datagram tracks in [net-wrap](/quest/m5/net-wrap/README.md). The browser +padding probes already moved to m3 on 2026-11-06. ## Required - [rind CPU error](/quest/m1/rind/cpu-error.md) - claim held rind - [Release on leave](/quest/m1/stream-credit/release-on-leave.md) - claim held stream-credit -- [Probe padding](/quest/m2/probe/padding.md) - claim held probe +- [Browser send estimate](/quest/m2/probe/browser-send-estimate.md) - claim held probe +- [One page-wide getStats sampling ticker](/quest/m2/probe/stats-ticker.md) - claim held probe diff --git a/quest/m3/README.md b/quest/m3/README.md index fad01c30cf5..ac197a4518f 100644 --- a/quest/m3/README.md +++ b/quest/m3/README.md @@ -185,3 +185,4 @@ federation) land. - [Bus writes land at a bus position](/quest/m3/bus-positioned-write.md) - callers sync audio to video without copying the bus's private latency - [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 diff --git a/quest/m3/audit-compile-time.md b/quest/m3/audit-compile-time.md index b637863a823..6aab5fa379c 100644 --- a/quest/m3/audit-compile-time.md +++ b/quest/m3/audit-compile-time.md @@ -52,7 +52,7 @@ What to check first: dev-dependencies (tests, lint, benches), such as the mux test-profile IR count. Treat a shift in those rows across it as the hack's, not the code's. Keep feature-unification and cross-job cache work with the - [hakari quest](/quest/m0/ci/hakari.md), and test work with the + [hakari follow-ups](/quest/m0/ci/hakari-followups.md), and test work with the [test cost audit](/quest/m3/audit-test-cost.md). Dependency and manifest removal belongs to the [dependency audit](/quest/m3/audit-deps.md). - Transport-session duplication is fixed by diff --git a/quest/m2/probe/padding.md b/quest/m3/probe-padding.md similarity index 86% rename from quest/m2/probe/padding.md rename to quest/m3/probe-padding.md index 64cfcd616b9..41d44099ce5 100644 --- a/quest/m2/probe/padding.md +++ b/quest/m3/probe-padding.md @@ -14,6 +14,13 @@ probe to the larger of their send target and the peer's PROBE target. ## Plan +Parked 2026-11-06 (maintainer, /quest-unblock): ✅ moved from the m2 probe +epic to m3, because the maintainer doesn't think padding is the right +approach. Rethink how a browser raises its estimate before building this; the +padding overhead budget's denominator was left open for that rethink. Its draft, +[moq-dev/moq#7390](https://github.com/moq-dev/moq/pull/7390), was closed; its +send target and ALR schedule remain at `refs/pull/7390/head` (ca3813d7e1). + Decided with the maintainer on 2026-10-17 (see the [epic](/quest/m2/probe/README.md)): @@ -54,6 +61,11 @@ Decided with the maintainer on 2026-10-17 (see the what it says, and run `just drafts check`. - A browser sender can't see whether it is app-limited; settle how to judge it from what it sends against the estimate. +- Decided 2026-11-06 (maintainer, /quest-unblock): ✅ keep `setTarget` on + `Handle`, so an app on a pooled `Connection.allocator` can set or clear the + target; the last sharer to set it wins, as in Rust. It adds a required member + to an exported interface, so the PR is breaking. Not chosen: setting it on + the allocator only. - Settle how the schedule stays within its overhead budget: how padding's share of sent bytes is counted over time, and what a cluster does once it would exceed the budget. diff --git a/quest/m4/ashpd-maintained.md b/quest/m4/ashpd-maintained.md index 91a6d9b33f2..f594c9e7c07 100644 --- a/quest/m4/ashpd-maintained.md +++ b/quest/m4/ashpd-maintained.md @@ -7,16 +7,11 @@ pulls the retired zbus_names, zvariant, or zvariant_derive crates. Upgrade ashpd and remove RUSTSEC-2026-0370, RUSTSEC-2026-0371, and RUSTSEC-2026-0372 from `deny.toml`; `just rs audit` passes without those exceptions. -## Waiting - -- bilelmoussaoui/ashpd: a stable release carries the - [zbus 6 port](https://github.com/bilelmoussaoui/ashpd/pull/491) (merged - 2026-10-25; 0.13.13 was still the latest stable). Check crates.io. - ## Plan -Until a stable port is published, wait without disabling portal capture or -adding a local fork. +ashpd 0.14.0 (2026-11-05) depends on zbus `^6` (checked 2026-11-06, +/quest-unblock), so the upgrade can start. Don't disable portal capture or add a +local fork. ## Related From 5865ec4ba71da33a214e6c8e8f9c0b042ee34714 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Fri, 6 Nov 2026 10:13:06 -0800 Subject: [PATCH 2/3] quest: plan JSR retirement in m0; claim npm names only Co-Authored-By: Claude Opus 5.5 --- quest/m0/ci/README.md | 1 + quest/m0/ci/jsr-retire.md | 40 +++++++++++++++++++++++++++ quest/m3/release/README.md | 2 +- quest/m3/release/npm-first-publish.md | 16 +++++------ quest/m4/p2p/watch.md | 2 +- 5 files changed, 51 insertions(+), 10 deletions(-) create mode 100644 quest/m0/ci/jsr-retire.md diff --git a/quest/m0/ci/README.md b/quest/m0/ci/README.md index 45097413c45..e4661d8cfdb 100644 --- a/quest/m0/ci/README.md +++ b/quest/m0/ci/README.md @@ -177,6 +177,7 @@ 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 +- [Stop publishing to JSR](/quest/m0/ci/jsr-retire.md) - `@moq/*` publishes only to npm and the JSR packages are archived, so no JSR token or OIDC link remains - [Gate each diff in under five minutes](/quest/m0/ci/five-minutes.md) - `just check`, test phases included, finishes within a worker's 5-minute prompt cache, admission wait included - [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 - [Verify the Nix runtime cache](/quest/m0/ci/nix-cache-verify.md) - hosted Cache uploads `main`'s relay and CLI, and Smoke's nix channel substitutes them diff --git a/quest/m0/ci/jsr-retire.md b/quest/m0/ci/jsr-retire.md new file mode 100644 index 00000000000..1b48915a2a6 --- /dev/null +++ b/quest/m0/ci/jsr-retire.md @@ -0,0 +1,40 @@ +# [S] Stop publishing to JSR + +## Goal + +`@moq/*` packages publish only to npm. The JS release path no longer +generates `jsr.json` or runs `deno publish`, no workflow or Environment needs +a `JSR_TOKEN`, and the `@moq` packages on jsr.io are archived with a pointer +to npm, so nothing can publish to them again. Deno users import the npm +packages through `npm:` specifiers. + +## Plan + +Decided 2026-11-06 (maintainer, /quest-unblock): ✅ drop JSR. Over the +preceding 30 days `@moq/net` had about 42 JSR downloads against about 341k +on npm, and `@moq/hang` about 38 against about 306k. `@moq/watch` and +`@moq/publish` never published there (they set `"jsr": false`), and most JSR +packages last published in June. Not chosen: keeping JSR behind a `JSR_TOKEN` +in the `npm` Environment, which was +[read-only pull-request CI](/quest/m0/ci/read-only-secrets.md)'s step for +JSR, whose repository OIDC trust cannot require an Environment. + +- Remove JSR from `js/common/release.ts`, `js/common/package.ts` (the + `jsr.json` generation and the `"jsr": false` opt-out), their tests, the + `jsr` field in each `package.json`, and the `JSR_TOKEN` plumbing in + `release-js.yml`. Packages publish from `release`, so backport the change + there in the same PR, the way other release-workflow changes land. +- Rewrite doc comments and docs that link `jsr.io` (such as the + `@moq/signals` re-export in `js/net/src/index.ts`) to npm. +- Archiving on jsr.io needs the maintainer's JSR login. Once the backport + lands, they archive each `@moq` package with a description pointing to + npm; check that `https://api.jsr.io/scopes/moq/packages` lists every + package as archived. Archiving also ends the repository's OIDC link, so no + separate unlinking is needed. + +Public API: none in code; JSR stops receiving new versions. Wire: none. + +## Related + +- [Read-only pull-request CI](/quest/m0/ci/read-only-secrets.md) - its JSR token step is replaced by this quest +- [Claim the new @moq npm names](/quest/m3/release/npm-first-publish.md) - claims only npm names once JSR is gone diff --git a/quest/m3/release/README.md b/quest/m3/release/README.md index e5184edc1c0..86412afe050 100644 --- a/quest/m3/release/README.md +++ b/quest/m3/release/README.md @@ -31,7 +31,7 @@ production stability proven merely because upstream artifacts published. - [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 and JSR with trusted publishing, before the cut publishes them +- [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 - [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 diff --git a/quest/m3/release/npm-first-publish.md b/quest/m3/release/npm-first-publish.md index 701d87d44c2..d82dc4de7bd 100644 --- a/quest/m3/release/npm-first-publish.md +++ b/quest/m3/release/npm-first-publish.md @@ -1,18 +1,14 @@ -# [XS] Claim the new @moq npm and JSR names +# [XS] Claim the new @moq npm names ## Goal -`@moq/clock`, `@moq/libav`, and `@moq/video` exist on npm, and -the two with JSR packages exist on JSR, each with trusted publishing -attached to `moq-dev/moq`. The cut's release workflow can then publish +`@moq/clock`, `@moq/libav`, and `@moq/video` exist on npm, each with trusted +publishing attached to `moq-dev/moq` and the `npm` Environment. The cut's release workflow can then publish their real versions. A maintainer does this by hand. Delete this quest once the checks pass: - `npm view @moq/` resolves for all three, and the package settings show - the `moq-dev/moq` trusted publisher. -- `https://api.jsr.io/scopes/moq/packages/` returns 200 for `clock` - and `video`, each linked to the repository. `@moq/libav` sets - `"jsr": false`. + the `moq-dev/moq` trusted publisher with Environment `npm`. ## Plan @@ -43,6 +39,10 @@ it clears with the same publication. does not publish it. [Watch opts in](/quest/m4/p2p/watch.md) owns its first publication, including claiming its names. +Decided 2026-11-06 (maintainer, /quest-unblock): JSR is dropped +([Stop publishing to JSR](/quest/m0/ci/jsr-retire.md)), so no JSR names are +claimed. + Public API: none. Wire: none. ## Related diff --git a/quest/m4/p2p/watch.md b/quest/m4/p2p/watch.md index 467e16a4fc1..e40efaed2f6 100644 --- a/quest/m4/p2p/watch.md +++ b/quest/m4/p2p/watch.md @@ -12,7 +12,7 @@ the peer goes away, with no visible interruption. Publish `@moq/p2p` with its first application consumer in this quest. It is currently private and has no release script; the `test/p2p` harness uses its workspace source. Before its first workflow publish, a maintainer claims -`@moq/p2p` on npm and JSR with a placeholder and attaches the `moq-dev/moq` +`@moq/p2p` on npm with a placeholder and attaches the `moq-dev/moq` trusted publisher, as [Claim new npm names](/quest/m3/release/npm-first-publish.md) does for the cut's packages. From d8a1bafc05c58434398ec4c0a1fa8f0be5e4fd56 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Fri, 6 Nov 2026 10:59:38 -0800 Subject: [PATCH 3/3] quest: park the JS rung disable with padding; fix stale padding and ashpd prose Co-Authored-By: Claude Opus 5.5 --- quest/m2/README.md | 12 +++++++----- quest/m2/probe/README.md | 6 ++++-- quest/m2/recut-held.md | 1 + quest/m3/README.md | 1 + quest/m3/audit-deps.md | 6 +++--- .../probe-rung-disable-js.md} | 4 +++- 6 files changed, 19 insertions(+), 11 deletions(-) rename quest/{m2/probe/rung-disable-js.md => m3/probe-rung-disable-js.md} (90%) diff --git a/quest/m2/README.md b/quest/m2/README.md index a04de05388e..0a1a4f7124e 100644 --- a/quest/m2/README.md +++ b/quest/m2/README.md @@ -27,8 +27,9 @@ fixes, the pre-cut audit re-run, and moq-c parity) live under the recurring Held by open claims: the m1 epics and quests marked below stay where they are until their claims merge, and the [probe epic](/quest/m2/probe/README.md) -stays here while its padding claim is open, so the cut waits on it until the -[re-cut follow-up](/quest/m2/recut-held.md) moves it to m3. +stays here while its open claims last, so the cut waits on it until the +[re-cut follow-up](/quest/m2/recut-held.md) moves it to m3. Its padding and JS +rung disable quests already moved to m3 on 2026-11-06. Carried from m1's Plan before the re-cut, where "m1" means the whole pre-cut milestone, now m1 and m2: @@ -85,8 +86,9 @@ and the API-diff tooling. Public routes now wait on cluster routing. Added 2026-10-20 (maintainer): the probe target, native probing, and the native rung disable moved up from the [m2 probe epic](/quest/m2/probe/README.md), so Rust, FFI, and OBS publishers recover a stopped rendition in this release; -padding and the browser's rung disable stay in m2, with only padding's -lite-07 stream type here. +padding and the browser's rung disable stayed in m2, with only padding's +lite-07 stream type here. Both moved to m3 on 2026-11-06 (maintainer, +/quest-unblock), parked for a rethink of padding. Added 2026-10-22 (maintainer, clustering audit): three interim fixes for announce churn on today's hop-list mesh, shipping with the next cut from @@ -186,5 +188,5 @@ quests that require them. - [MoQ on rind](/quest/m1/rind/README.md) - every MoQ crate takes its crypto from rind, a pure-Rust graviola fork, so no build compiles C crypto (held in m1 by an open claim) - [Rename buffer to lookahead](/quest/m2/watch-lookahead.md) - ``'s `buffer` becomes `lookahead`, so it is no longer mistaken for a jitter buffer on live streams - [Cut readiness](/quest/m2/cut-gate/README.md) - the checks the cut needs that break nothing: main no slower than release, vendored fixes ported, the pre-cut audit re-run, and moq-c at parity -- [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; the browser pads where native sessions retransmit (held in m2 by an open claim; moves to m3) +- [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 diff --git a/quest/m2/probe/README.md b/quest/m2/probe/README.md index 46b045f237b..3084b1cdd49 100644 --- a/quest/m2/probe/README.md +++ b/quest/m2/probe/README.md @@ -45,7 +45,10 @@ publisher-local padding handle: resends in-flight data during BBR3's Startup and one ProbeBW_UP per probe wait ([moq-dev/moq#6635](https://github.com/moq-dev/moq/pull/6635)). A browser over WebTransport can't reach its controller, so a lowest-priority padding stream on an ALR probe - schedule does ([padding](/quest/m3/probe-padding.md)). + schedule does ([padding](/quest/m3/probe-padding.md)). Parked 2026-11-06 + (maintainer, /quest-unblock): the maintainer doubts padding is the right + approach, so padding and the [JS rung disable](/quest/m3/probe-rung-disable-js.md), + which recovers through it, moved to m3 for a rethink. Decided with the maintainer on 2026-10-20: @@ -98,7 +101,6 @@ This README's own work, once the children land: - [Browser send estimate](/quest/m2/probe/browser-send-estimate.md) - shipping Chrome and Safari publishers adapt to the relay's PROBE estimate, since they have no `getStats()` - [One page-wide getStats sampling ticker](/quest/m2/probe/stats-ticker.md) - a page's connections share one sampling ticker -- [JS rung disable](/quest/m2/probe/rung-disable-js.md) - `@moq/publish` applies the native rung rule, recovering through padding - [Players set viewer targets](/quest/m2/probe/players.md) - players hold a viewer handle per watched broadcast at its highest enabled rendition's bitrate - [Viewer up-switch](/quest/m2/probe/viewer-upswitch.md) - a viewer capped by its small rendition finds headroom through PROBE and moves up diff --git a/quest/m2/recut-held.md b/quest/m2/recut-held.md index 2468f216ac7..fb6d8d5cbb0 100644 --- a/quest/m2/recut-held.md +++ b/quest/m2/recut-held.md @@ -34,3 +34,4 @@ padding probes already moved to m3 on 2026-11-06. - [Release on leave](/quest/m1/stream-credit/release-on-leave.md) - claim held stream-credit - [Browser send estimate](/quest/m2/probe/browser-send-estimate.md) - claim held probe - [One page-wide getStats sampling ticker](/quest/m2/probe/stats-ticker.md) - claim held probe +- [Players set viewer targets](/quest/m2/probe/players.md) - claim held probe diff --git a/quest/m3/README.md b/quest/m3/README.md index 7f9159c3cd4..867805246b1 100644 --- a/quest/m3/README.md +++ b/quest/m3/README.md @@ -187,3 +187,4 @@ federation) land. - [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 diff --git a/quest/m3/audit-deps.md b/quest/m3/audit-deps.md index 6f1f919fa90..01b5e8c20d1 100644 --- a/quest/m3/audit-deps.md +++ b/quest/m3/audit-deps.md @@ -82,9 +82,9 @@ Open after the 2026-11-01 removal run: Advisories waiting on upstream: - ashpd 0.13 pulls zbus 5 and the unmaintained zvariant, zvariant_derive, and - zbus_names (RUSTSEC-2026-0370, 0371, 0372). Upstream's - [zbus 6 port](https://github.com/bilelmoussaoui/ashpd/pull/491) merged on - 2026-10-25; wait for a stable ashpd release that carries it. + zbus_names (RUSTSEC-2026-0370, 0371, 0372). ashpd 0.14.0 (2026-11-05) carries + the zbus 6 port; [ashpd uses maintained D-Bus crates](/quest/m4/ashpd-maintained.md) + upgrades to it. - basic-toml (RUSTSEC-2026-0374) comes through askama_derive's default `config` feature in uniffi_bindgen 0.32, which reads its `askama.toml`. It only reaches the generator-only uniffi fork and never ships. diff --git a/quest/m2/probe/rung-disable-js.md b/quest/m3/probe-rung-disable-js.md similarity index 90% rename from quest/m2/probe/rung-disable-js.md rename to quest/m3/probe-rung-disable-js.md index 5bc5b87793d..f4aff56c956 100644 --- a/quest/m2/probe/rung-disable-js.md +++ b/quest/m3/probe-rung-disable-js.md @@ -12,7 +12,9 @@ lower renditions keep their share instead of every rung degrading together. Split from the native rung disable by the maintainer on 2026-10-20: the native publishers moved to m1 on native probing, while a browser can only probe with -[padding](/quest/m3/probe-padding.md), parked in m3 on 2026-11-06. +[padding](/quest/m3/probe-padding.md). Moved to m3 with padding on 2026-11-06 +(maintainer, /quest-unblock), since it recovers only through padding, which +the maintainer parked for a rethink. - Mirror the native quest's rule and constants from `moq_mux::rate`, rather than tuning a JS-only one. Its decisions hold here too: catalog state