Skip to content

quest: unblock m0/m1 chains from the 2026-10-27 audit - #6938

Merged
kixelated merged 3 commits into
mainfrom
quest-audit/blocked-m0-m1
Oct 27, 2026
Merged

kixelated merged 3 commits into
mainfrom
quest-audit/blocked-m0-m1

Conversation

@kixelated

@kixelated kixelated commented Oct 27, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

An audit of the blocked m0/m1 chains found quests waiting on whole epics, on proposals nobody had decided, or on work they do not need. The maintainer settled each case on 2026-10-27; this PR applies those decisions and the factual corrections the audit found. Every decision is recorded in the affected quest's Plan as "Decided 2026-10-27 (maintainer)" with its reason.

Approach

Why each chain was blocked, and what unblocks it:

  • R2 cache and hakari. hakari waited on mbx-r2-verify's cross-job miss report, which waits on weeks of Nightly runs. hakari now measures its own before/after baseline.
  • Profiling host. log-lock-profile waited on a human-action quest for a perf host. The 24-core desktop workstation is that host, noted in bench/README.md, and perf-host.md is deleted.
  • QUIC API. drop-web-transport-trait waited on native WebTransport, though its iroh, wasm and ffi impls need only net-poll's trait shape. It now requires net-poll. poll and native-web also listed streams, which they already reach through waits.
  • Subscribe ranges and time addressing. time-addressing/model, read-backfill and lite07-finalize each required the whole subscribe-ranges epic, whose README held its own work. They now require only the children they need, and the README's start-bookkeeping work is its own child quest. JS ranges waited on Rust's lite-07 ranges only for the FETCH removal, which is now its own quest.
  • JavaScript FETCH. js-fetch waited on JS ranges, though the cached and joining half needs nothing from it. It is split: the cached half is ready, and the on-demand half waits on JS ranges. ietf-fill-timeout is split the same way: the Rust half is ready, and the JS half waits on the cached js-fetch.
  • Routing. announce-takeover and identity-guide waited on routes, the largest open routing quest. Two ready quests split out of routes (grant subject, route epochs). announce-takeover now needs only route epochs, and identity-guide documents what exists, so it needs nothing.
  • Unbounded groups. JS unbounded groups waited on byte holes, which targeted an unpublished version after lite-07. Byte holes now target lite-07-wip, the JS caps need only front eviction, and the chunked read moves to a new quest after byte holes.
  • Audio. av-clock waited on the whole jitter-target epic, including a manual Apple-hardware run. It now waits only on capped budgets, whose nightly count restarts at 2026-10-25.
  • Buffered playback. A runtime mode-switch bug sat inside buffered-ascending, which waits on lite-07. It is now its own ready quest.

Ready now and unclaimed

From quest unblocked on this branch, with no claim branch or open PR on any of them:

  • Newly ready: quest/m0/ci/hakari.md, quest/m1/unbounded-groups/log-lock-profile.md, quest/m1/cluster-routing/route-epochs.md (new), quest/m1/cluster-routing/grant-subject.md (new), quest/m1/subscribe-ranges/js.md, quest/m1/js-fetch.md, quest/m1/ietf-fill-timeout.md, quest/m1/identity-guide.md, quest/m1/watch-buffer-switch.md (new)
  • Already ready, edited here: quest/m0/ci/land-bump.md (its condition now holds), quest/m0/ci/mbx-r2-verify.md, quest/m1/subscribe-ranges/lite.md, quest/m1/subscribe-ranges/fill-linear.md, quest/m1/drop-set.md, quest/m1/quic-api/streams.md, quest/m1/audio-jitter-target/capped-budgets.md, quest/m1/archive/hls-target.md, quest/m1/api-audit/wanted.md

Decisions (maintainer, 2026-10-27)

CI, QUIC and perf:

  • ✅ hakari drops Required: mbx-r2-verify and takes the cross-job miss report into its own baseline; mbx-r2-verify stays a waiting quest.
  • ✅ drop-web-transport-trait requires net-poll instead of native-web. Whichever of the two lands second deletes the generic adapters. Notes that qmux uses web-transport-trait only as a dev-dependency.
  • ✅ streams drops the bullet that has the drivers match StreamEvent::Acked, since waits deletes StreamEvent right after.
  • ✅ The 24-core desktop workstation, run while quiet, is the profiling host (noted in bench/README.md). perf-host.md is deleted with quest rm, and log-lock-profile notes that moq-dev/moq#6680's base revision covers its "before" side.
  • ✅ nightly-levers accepts kixelated/rust2's Cranelift verdict (moq keeps LLVM: 42 of 5418 tests fail, and the CPU saving is only 4% warm and 12% cold). It is narrowed to the parallel frontend, resized [M] to [S], and its dead rust2 link fixed.

Subscribe ranges, time addressing and lite-07:

  • ✅ range-cost folds into fill-linear (same walk) and is removed with quest rm. fill-linear re-baselines track_range_filling after moq-dev/moq#6921.
  • ✅ time-addressing/model requires fetch-range, lite, the new start-bookkeeping, lite-timestamps-through, and drop-set instead of the whole subscribe-ranges epic. drop-set notes that it runs after fill-linear, since both edit given_up. time-addressing/js requires subscribe-ranges/js.
  • ✅ The lite-07 FETCH removal splits out of subscribe-ranges/js into a new quest requiring lite and js. js drops Required: lite.
  • ✅ js-fetch splits: the cached and joining half (with the draft-18 Largest fix) is ready now, and the on-demand half requires subscribe-ranges/js. late-join needs only the cached half. ietf-fill-timeout splits: the Rust half is ready now, and the JS half requires the cached js-fetch.
  • ✅ read-backfill requires subscribe-ranges/lite and subscribe-ranges/js instead of the epic.
  • ✅ lite07-finalize requires subscribe-ranges/lite, subscribe-ranges/js and the FETCH-removal quest instead of the epic.
  • ✅ The buffered-ascending runtime mode-switch bug becomes its own ready m1 quest. buffered-ascending keeps lite07-finalize.
  • ✅ subscribe-ranges/lite drops the Relative(n).. to Filter::Relative(n+1) mapping: a moq-transport bridge resolves Relative(n) to an absolute Group ID first, since Group ID arithmetic breaks once time addressing makes legacy Group IDs sparse. Its Goal now says SUBSCRIBE_OK carries the resolved start.

Routing, unbounded groups and audio:

  • ✅ New ready quest cluster-routing/grant-subject: an issuer-qualified subject on auth::Grant and moq-auth in Rust and JS, with the XS routing-model fix. routes and federation require it.
  • ✅ New ready quest cluster-routing/route-epochs: mint an epoch for every route, now decided rather than proposed in routes. routes and announce-takeover require it.
  • ✅ announce-takeover requires route-epochs instead of routes. Whichever of the two lands second rebases the ANNOUNCE_START layout.
  • ✅ identity-guide drops Required: announce-takeover and documents what exists; the takeover PR adds its own section.
  • ✅ Byte holes target lite-07-wip and wait only on front eviction.
  • ✅ unbounded-groups/js requires front-eviction instead of byte-holes. The chunked frame read and the byte-offset wire mirror move to a new quest requiring byte-holes.
  • ✅ capped-budgets restarts its 7-nightly count at 2026-10-25 (3 of 7, the seventh due about 2026-10-31), and says to download the artifacts before their 7-day expiry.
  • ✅ av-clock requires capped-budgets instead of the audio-jitter-target epic.
  • ✅ audio-jitter-target/watch notes that its 2026-10-22 replay numbers predate moq-dev/moq#6484, moq-dev/moq#6609 and moq-dev/moq#6595.

Factual corrections, checked against main

  • mbx-r2-verify: added 2ed9df47... (17218002 bytes, refused 2026-10-25 in run 40192013303 and 2026-10-26) and 0d4f4e3f... (17290876 bytes, refused 2026-10-26 in run 40332938121) to the known oversized digests. Both runs used mbx 1.25.0, not 1.26 as the audit said, since moq-dev/moq#6515 held the cache at 1.25.
  • land-bump: quest land shipped in kixelated/quest#229 (merge commit 195bcee560), so its condition holds. The dead plan link now points at the PR. The bump itself is not done here.
  • land: the engine ejects a fork PR that blocks maintainer edits as no_maintainer_edits (in feat(land): batched merge gate, quest land quest#229's src/cli/land.ts).
  • streams: read_chunks already went in moq-dev/moq#6809.
  • poll and native-web: dropped Required: streams, which they reach through waits.
  • fetch-range: since moq-dev/moq#6724 a run of misses is one FETCH on moq-transport, so per-group FETCH is lite-only. The lite-07 FIN half landed in moq-dev/moq#6807.
  • drop-set: DropCursor is now at about track.rs:5802-5870.
  • time-addressing/e2ee: the JS side has landed (js/e2ee/src/derive.ts nonce(group, frame)). It now requires time-addressing/js for the JS half.
  • Line numbers: Neighbors::admit is at about track.rs:502 (in model), and the requested == start gate at about lite/subscriber.rs:4898 (in start-bookkeeping).
  • lite07-finalize: the site list for the wip ALPN is replaced by a grep instruction, since 150 files outside quest/ spell moq-lite-07-wip.
  • binding-timestamps and time-addressing/bindings: "untimed as absent" is needed only on the read side until the cut, and bindings-by-start drops that Option for reads. ✅ Decided 2026-10-27 (maintainer): producer arguments keep an optional timestamp until the cut, so producers may still write untimed frames; only reads drop the Option, at the cut.
  • front-eviction and the unbounded-groups README: kio::log storage landed in moq-dev/moq#6782, including Writer::evict advancing the base; the storage bullets now say so.
  • cluster-routing: linked moq-dev/moq#5375, moq-dev/moq#5391, moq-dev/moq#5382 and moq-dev/moq#5393 in the README. moq-dev/moq#4644 is cited in routes, not the README, so it is linked there.
  • archive/hls-target: the derivation lives in snapshot_from_window. The "default 1s minimum" comment is gone, so that item is dropped.
  • api-audit/wanted: the stale Go advice is Used/Unused at go/wrapper/README.md:~143. Its lifecycle blocker had already been unlinked by moq-dev/moq#6920.

Skipped

  • front-eviction and the unbounded-groups README: the audit said Slot.head no longer exists and the head copy is Handoff/Salvage holding a Head. It is wrong. Slot.head: Option<Box<group::Handle>> is still in rs/moq-net/src/model/track.rs (about line 539, set at about line 2655): the fetched copy served in a live group's place. Handoff/Salvage in model/group.rs is a separate thing, the failed copy's head kept for route-failover resume. The "fold Slot.head" bullets stay as written.

Choices made while applying

  • New quests sit next to the quests they split from: subscribe-ranges/{lite07-fetch,start-bookkeeping}.md, cluster-routing/{grant-subject,route-epochs}.md, unbounded-groups/js-byte-holes.md, and at the m1 root js-fetch-on-demand.md, ietf-fill-timeout-js.md and watch-buffer-switch.md. The ready halves keep the original paths (js-fetch, ietf-fill-timeout), so existing links to them stay valid.
  • js-fetch-on-demand requires the cached js-fetch as well as JS ranges, since it extends that dispatch.
  • drop-set's "runs after fill-linear" is a Plan note, not a Required entry, as decided. That leaves drop-set ready.
  • Sizes: ietf-fill-timeout went from [L] to [M] (Rust half) plus a new [M] (JS half), and nightly-levers from [M] to [S]. js-fetch and JS ranges stay [L], and fill-linear stays [M] after absorbing range-cost.

Impact

  • Quest files only, plus a profiling-host note in bench/README.md.
  • Public API: none. Wire: none.

Alternatives

None. Each decision above was the maintainer's choice in the 2026-10-27 session.

Follow-ups

  • Bump the quest flake input (quest/m0/ci/land-bump.md), whose condition now holds.

🤖 Generated with Claude Code
(Written by Claude Opus 5.5)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 5 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

Learn how review limits work.

Review configuration:

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 23f52a51-c806-49d7-92d5-a4826b686510
Commits

Reviewing files that changed from the base of the PR and between f5921d9 and 6162e76.

Files selected for processing: 54
  • bench/README.md
  • quest/m0/ci/README.md
  • quest/m0/ci/hakari.md
  • quest/m0/ci/land-bump.md
  • quest/m0/ci/land.md
  • quest/m0/ci/mbx-r2-verify.md
  • quest/m0/ci/nightly-levers.md
  • quest/m1/README.md
  • quest/m1/announce-takeover.md
  • quest/m1/api-audit/wanted.md
  • quest/m1/archive/hls-target.md
  • quest/m1/audio-jitter-target/capped-budgets.md
  • quest/m1/audio-jitter-target/watch.md
  • quest/m1/av-clock.md
  • quest/m1/binding-timestamps.md
  • quest/m1/buffered-ascending.md
  • quest/m1/cluster-routing/README.md
  • quest/m1/cluster-routing/federation.md
  • quest/m1/cluster-routing/grant-subject.md
  • quest/m1/cluster-routing/route-epochs.md
  • quest/m1/cluster-routing/routes.md
  • quest/m1/drop-set.md
  • quest/m1/drop-web-transport-trait.md
  • quest/m1/identity-guide.md
  • quest/m1/ietf-fill-timeout-js.md
  • quest/m1/ietf-fill-timeout.md
  • quest/m1/interop-coverage/late-join.md
  • quest/m1/js-fetch-on-demand.md
  • quest/m1/js-fetch.md
  • quest/m1/lite07-finalize.md
  • quest/m1/perf-host.md
  • quest/m1/quic-api/native-web.md
  • quest/m1/quic-api/poll.md
  • quest/m1/quic-api/streams.md
  • quest/m1/read-backfill.md
  • quest/m1/subscribe-ranges/README.md
  • quest/m1/subscribe-ranges/fetch-range.md
  • quest/m1/subscribe-ranges/fill-linear.md
  • quest/m1/subscribe-ranges/js.md
  • quest/m1/subscribe-ranges/lite.md
  • quest/m1/subscribe-ranges/lite07-fetch.md
  • quest/m1/subscribe-ranges/range-cost.md
  • quest/m1/subscribe-ranges/start-bookkeeping.md
  • quest/m1/time-addressing/bindings.md
  • quest/m1/time-addressing/e2ee.md
  • quest/m1/time-addressing/js.md
  • quest/m1/time-addressing/model.md
  • quest/m1/unbounded-groups/README.md
  • quest/m1/unbounded-groups/byte-holes.md
  • quest/m1/unbounded-groups/front-eviction.md
  • quest/m1/unbounded-groups/js-byte-holes.md
  • quest/m1/unbounded-groups/js.md
  • quest/m1/unbounded-groups/log-lock-profile.md
  • quest/m1/watch-buffer-switch.md
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-27T21:48:27.326932Z 0f8af69 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@kixelated kixelated left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review by review (OpenAI)

Reviewed commit: 6b2ad6360dd66b7c1a60730f235c5bd9e36632b6.

No actionable bugs found in this planning update. Splitting cached FETCH from on-demand dispatch, keeping coordinated Rust/JS lite-07 FETCH removal behind both range implementations, and replacing epic-wide prerequisites with the actual contracts are a sound direction. The runtime buffer-switch fix is appropriately independent of the lite-07 cut. The retained datagram-settle exception and epochless-route Restart requirement are important safeguards, not incidental complexity.

These are plans, not implemented fixes: existing FETCH refusal, fill-timeout limitations, and buffer-mode capture remain in the source. Verification was static inspection of the changed plans, relevant dependency quests, and selected auth/FETCH/audio code. I did not run quest graph validation, tests, benchmarks, or verify the historical CI measurements or profiling-host configuration.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@kixelated kixelated left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review by review (OpenAI)

Reviewed commit: 6162e764174d987f83b4472c914f7de8b6ff1d0e (delta from 6b2ad6360dd66b7c1a60730f235c5bd9e36632b6; base unchanged).

No actionable bugs found in the timestamp-contract update. Keeping producer timestamps optional while removing optionality only from post-cut reads is consistent with time-addressing/model.md: omitted producer timestamps are stamped, rather than producing untimed output. This resolves the earlier plan's ambiguous “read side only” wording without prematurely breaking untimed producer calls. There were no findings outstanding from my previous review.

Verification: static comparison of the two changed binding plans against the model plan. No implementation changed; binding tests and interop were not run.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6162e76417

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread quest/m1/unbounded-groups/byte-holes.md Resolved
The lite-07 cut does not wait on byte holes. Per lite07-finalize's freeze
policy, it lands on whichever lite wip is current (lite-07-wip today); if
lite-07 is cut first, lite-07 peers refill only at frame boundaries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@kixelated kixelated left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review by review (OpenAI)

Reviewed commit: 0f8af69e3d3ac5bce5c2e0232882956e6367b524 (delta from 6162e764174d987f83b4472c914f7de8b6ff1d0e; base unchanged).

No new actionable bugs found. The explicit current-wip target and frame-boundary fallback address the release-order ambiguity raised in the independent review, via the recorded decision not to gate lite-07 on byte holes. This is consistent with the existing freeze policy and avoids requiring changes to published lite-07 framing if it ships first. Keeping JS on the same wire version as Rust is the right direction.

Verification: static inspection of the three changed plans and lite-07 finalization policy. No implementation changed; tests, draft checks, and interop were not run.

@kixelated

Copy link
Copy Markdown
Collaborator Author

Landing 0f8af69.

  • Settled the Codex finding on byte-holes.md (decided 2026-10-27, maintainer): byte holes targets the current lite wip version (lite-07-wip today) and the lite-07 cut does not wait on it, per lite07-finalize's freeze policy. If lite-07 is cut first, lite-07 peers refill only at frame boundaries. byte-holes.md, js-byte-holes.md and the epic README now say so; lite07-finalize's Required is unchanged.
  • Codex and the automated review are clean on this head; required checks pass; quest check --base origin/main passes.

(Written by Claude Opus 5.5)

@kixelated
kixelated added this pull request to the merge queue Oct 27, 2026
@kixelated
kixelated removed this pull request from the merge queue due to a manual request Oct 27, 2026
@kixelated
kixelated added this pull request to the merge queue Oct 27, 2026
Merged via the queue into main with commit 082648b Oct 27, 2026
9 of 10 checks passed
@kixelated
kixelated deleted the quest-audit/blocked-m0-m1 branch October 27, 2026 21:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant