Skip to content

quest: apply the 2026-09-30 audit - #4589

Merged
kixelated merged 4 commits into
mainfrom
quest/audit-2026-09-30
Sep 30, 2026
Merged

kixelated merged 4 commits into
mainfrom
quest/audit-2026-09-30

Conversation

@kixelated

@kixelated kixelated commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Quest audit on 2026-09-30, covering 449 quests on main and 40 quest/* branches, with the settled edits applied. Nothing here touches code.

  • m0 leads with Seattle interop (10-12). The order is now legal-input → FIN → subgroup refusal (from the moxygen line) → uni stream types (from m1) → request caps, chained with Required. The A/V clock moves to m1, and announce dedupe (shipped in fix(net): skip announce updates the peer cannot tell apart #4423) is gone from the text.
  • Deleted: 14 quests already done on dev or main. close-codes, effect-cancel, hls-discontinuity-sequence, js-closed-track-leak, bindings-graceful-close, capture-control, video-surface, track-demand, watch-refusal, remove-live, session-close, 2964, path-patterns, js-discontinuity.
  • Deleted: marginal quests.
    • m1: io_uring 3203/3205, priority-set-track-wakes, quic/release.
    • m2: quic-fec, carrier-voice/ with sip-stack, livekit-webrtc-bridge, runtime-qa-hosts, capture-ergonomics, teleop/ros2.
    • m3: dpdk, processor-vision, upstream-forks.
  • Merged overlapping quests:
    • egress-requeue into uring-quiescence; egress-keepalive and coding-decode into group-cost.
    • relay-memory and redundant-ingest into cluster-routing.
    • stats-producer-bench into bench-coverage.
    • unknown-session-logs into wt-close-upstream.
    • The three m2 send-path studies into quic-egress-profile; bbr-google into bbr-natural-drain.
    • capture-frame-buffers into x11-capture-shm and capture-windows.
    • archive-backward-timestamps into archive/writer; teleop/correlation into robot; teleop/v4l2-encode into cli-packaging.
    • audio-loss-recovery into audio-opus-backend.
    • The hardware-validation trio in m3; the vaapi pair.
    • moxygen's datagram-range into datagram-unfetchable.
  • Collapsed one-child lines sei/ and flate/ into single quests. cluster-routing becomes a questline; its children get their own /quest-plan.
  • m1 → m2 (no named consumer):
    • Lines: P2P, one-port, ladder, processor, uring-tcp.
    • Timed metadata: emsg, id3, flv-script, SCTE-35, captions-cea.
    • Archive: browser and paced-replay.
    • Installer: moq-installer, install-url, relay-subcommand.
    • OBS GPU paths.
    • rs2ts: the IETF half, gated on a go/no-go after the lite no-downgrade report.
    • QUIC: deadline, qmux, bbr-loss-parity, ecn-measure, ack-progress, ack-hook, starvation-frames.
    • Unmeasured io_uring opts: 3200, 3202, 3129, uring-open-contract, cache-shard.
    • Other: text-schema, closure-counters, bench-coverage, stats/encoder-feedback, signed-priority, the color-model catalog half.
  • m1/m2 → m3 (parked until a consumer, hardware, or partner appears):
    • QUIC and transport: 3201, 3204, quic-receive-ts, quic-gcc, af-xdp.
    • Language bindings and SDKs: cs/, unity, unreal, livekit-shim, cpp-conan.
    • Features: whep-abr, watch-data-sync, obs-linux-gpu, routing-cost-domains, cat/, hidden-exemption.
    • Teleop: mavlink, proof, browser-package.
    • The encode side of intra-refresh, and NVENC AV1.
  • Promoted:
    • m2 → m1: play-drain-tail, serve-hls-renditions, ietf-drain-before-close, mobile-ownership.
    • m3/m4 → m2: announce-shapes, msfts-convergence (its msfts#33 gate cleared), video-vaapi (the gate is our own repo).
  • Consistency fixes:
    • Missing Required/Related links between quests that share code.
    • The libmoq freeze is enforced: no new libmoq API in the auth or broadcast-epoch quests.
    • Rank inversions fixed.
    • Recorded decisions: restart = new epoch in 3021, immutable catalog track identity, the tarball-only C++ promise, udp-demux narrowed to QUIC+STUN, and the wildcard lite-07 gate dropped.
    • Cleared blockers and stale references refreshed.

Also: test-flakes-2 splits into one child per flake (shaper-virtual-time joins it), and mobile-ownership shrinks to [XS] recording the verdict (Rust owns codecs). remove-gossip keeps mesh_withdraw.rs, which already tests configured peers.

Also folds in the gate convention from #4585 (abandoned): any quest waiting on the outside world, in any milestone, states its gate as a plain-text Required bullet, re-checked by /quest-audit. The m3 quests parked here without one gained a gate bullet.

May conflict with #4520 (wt-close-upstream: this PR only appends) and #4583 (ts-import-shared-shift: untouched here).

Already done outside this PR: deleted 6 dead quest branches whose PRs were closed, and closed #4134 (qos/stats, replanned as m1/stats).

Decision prompts

Round 1

  • m0 before Seattle interop: reorder it?
    • ✅ Reorder + promote: IETF interop chain first, promote subgroup refusal and uni stream types, A/V clock to m1
    • Reorder only
    • Leave m0 as is
  • Apply the mechanical stale cleanup as one quest-only PR?
    • ✅ Apply all
    • Deletions only
    • Skip
  • Which cross-quest consistency fixes to record?
    • ✅ Ordering links
    • ✅ Enforce libmoq freeze
    • ✅ Fix rank inversions
    • ✅ Resolve disagreements
  • What to do with the quest line branches?

Round 2

  • Transport and perf pruning:
    • ✅ io_uring micro-opts
    • ✅ m1 QUIC line trim
    • ✅ m2 QUIC studies
    • ✅ rs2ts IETF half → m2
  • Which m1 feature lines move to m2?
    • ✅ P2P + one-port
    • E2EE apps, Dart, C line (kept in m1)
    • ✅ Timed metadata + archive
    • ✅ Installer, ladder, processor, OBS GPU
  • m2 speculative work cuts:
    • ✅ Delete dead ideas
    • ✅ Park in m3
    • ✅ Trim lines
    • ✅ m3/m4 cleanup
  • Promotions and restructures:
    • ✅ m2 → m1 quick wins
    • ✅ cluster-routing questline
    • ✅ Merge small overlaps
    • ✅ Other m1 → m2

Round 3

  • How to execute?
    • ✅ 1 PR + spawned sessions for line branches
    • Split PRs by milestone
    • Do everything here
  • cluster-routing children?
    • ✅ Separate /quest-plan
    • Plan children now

Public API and wire impact

None. This PR only edits quests.

Follow-ups

These are spawned as separate sessions:

Not spawned:

(Written by Claude Opus 5.5)

🤖 Generated with Claude Code

kixelated and others added 2 commits September 30, 2026 07:04
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reorder m0 for Seattle interop, delete quests done on dev, prune and
park marginal work, merge overlaps, and add the missing ordering links.

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

chatgpt-codex-connector Bot commented Sep 30, 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-09-30T14:27:25.207029Z a63bb29 PR opened
ℹ️ 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.

…ioritization-406f95

# Conflicts:
#	quest/m1/README.md
#	quest/m1/wt-close-upstream.md
#	quest/m2/README.md
#	quest/m2/capture-frame-buffers.md
A quest waiting on the outside world states its gate as a plain-text
Required bullet in any milestone, re-checked by /quest-audit. Folded in
from #4585, which is abandoned in favor of this.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated
kixelated merged commit 146769e into main Sep 30, 2026
3 checks passed
@kixelated
kixelated deleted the quest/audit-2026-09-30 branch September 30, 2026 14:21
@kixelated

Copy link
Copy Markdown
Collaborator Author

Review

Quest-only audit (moves, deletes, merges, m0 Seattle reorder). Direction looks mostly right, but a few edits are inaccurate against main/dev and will clobber two quests that already landed.

Reviewed head: a63bb29d2fabf7d76b7e4218769fa56810b6c199

Blocking

  1. quest/m1/wt-close-upstream.md overwrites quest: wt-close-upstream waits on the web-transport-moq release #4520 (already on main).
    This branch is 2 commits behind main, including quest: wt-close-upstream waits on the web-transport-moq release #4520. On main the quest is [XS], cites fix(web-transport-moq): keep the HTTP/3 streams open until the close capsule is delivered noq#23/Stream prioritization #24, and has a Required pin-bump. The audit version is still [S], cites noq#21 / 1.3.3, and drops that Required while folding in unknown-session-logs. Rebase onto main and merge the unknown-session text into the quest: wt-close-upstream waits on the web-transport-moq release #4520 plan rather than replacing it. The PR note that this “only appends” is no longer true.

  2. quest/m2/capture-windows.md / deleted capture-frame-buffers clobber quest(m2): plan a Windows.Graphics.Capture backend #4586 (already on main).
    quest(m2): plan a Windows.Graphics.Capture backend #4586 added quest/m2/capture-wgc.md, shrank capture-windows to app-capture + WASAPI ([M]), and narrowed capture-frame-buffers to X11 (Windows GDI half owned by WGC). This PR folds frame-buffers into capture-windows, re-expands it with GDI buffer reuse / “weigh WGC” text, and deletes capture-frame-buffers with no capture-wgc link. Rebase and keep the quest(m2): plan a Windows.Graphics.Capture backend #4586 split: X11 buffer reuse → x11-capture-shm (or the narrowed frame-buffers quest); leave Windows display/window/cursor on capture-wgc.

  3. quest/m1/2964-…md deleted as “already done”, but it is not.
    Issue #2964 is still open, and the same quest file still exists on dev. Restore it (or move it deliberately with a note); do not treat the reuseport/Group integration as finished.

  4. quest/m1/auth/README.md — feat(net): carry path patterns in moq-lite AUTH_OK grants #4277 described as future work.
    After dropping the path-patterns link, the decision bullet says “Pattern interest (feat(net): carry path patterns in moq-lite AUTH_OK grants #4277, on this line) upgrades AUTH…”. #4277 already merged (patterns in AUTH_OK). Say that landed (and drop any implication it is still owed on this line), or point at whatever truly remains.

Non-blocking

CI Check/Test are green. No code/API/wire impact.

ITERATE

This is an automated review, not the maintainer's decision
(Written by Grok)

@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: cf3ec11

[P2] Gate the runnable leaves when parking a questline. At quest/m3/cat/README.md:54-59 the new external gate only blocks the README: the pinned quest implementation (8590d2a, src/ready.rs:78-95) traverses a questline's children without inheriting its conditions. quest/m3/cat/verify.md has no Required section, so it still appears ready before claim-key registration. The same problem affects quest/m3/cs/README.md:13-14: its newly parked generator child is still ready despite the missing consumer. Put the external condition on the executable leaf quests too; linking a child back to its parent would create a cycle.

Direction: keep the audit. Consolidating overlapping studies, separating independent test flakes, and dropping the installer's two-file transaction reduce unnecessary work and complexity. The new gate convention is sensible once the actual readiness graph enforces it. No runtime API or wire change in this PR.

Verification: inspected planning changes and the pinned readiness implementation; checked all 407 quest files for missing quest links, Required cycles, and unreferenced quests, finding none. No quest guide/check or builds ran because quest/Nix are unavailable here. The claimed completion of all historical branch work was not independently revalidated.

(Written by OpenAI)

@kixelated

Copy link
Copy Markdown
Collaborator Author

Follow-up review

Notable push after prior ITERATE on a63bb29: merged main (#4520, #4586) and added the plain-text Required gate convention.

Reviewed head: cf3ec1188954b35bcfa1ea28da8b61dd36b707dc
Note: this PR is already merged to main (146769e); open items below need a follow-up PR (or restore on dev).

Fixed since prior review

  1. quest/m1/wt-close-upstream.md — matches quest: wt-close-upstream waits on the web-transport-moq release #4520 ([XS], noq#23/Stream prioritization #24, Required pin-bump) and appends the UnknownSession merge. Good.
  2. quest/m2/capture-windows.md / capture-wgc.md — keeps the quest(m2): plan a Windows.Graphics.Capture backend #4586 split; X11 frame-buffer half folded into x11-capture-shm. Good.

Still open (blocking accuracy)

  1. quest/m1/2964-…md still deleted as “already done”, but it is not.
    Issue #2964 is still open, and the quest file still exists on dev. Restore it on main (or move it with an explicit note); do not treat the reuseport/Group integration as finished.

  2. quest/m1/auth/README.md (~line 50) — feat(net): carry path patterns in moq-lite AUTH_OK grants #4277 still described as future work.
    “Pattern interest (feat(net): carry path patterns in moq-lite AUTH_OK grants #4277, on this line) upgrades AUTH…” — #4277 already merged. Past-tense that landing (and say what, if anything, remains).

Non-blocking (still open)

  • Stale “remove-live” prose after deleting that quest: quest/m1/ts-import-shared-shift.md (~line 36) and quest/m1/3021-…md (~line 22). Past-tense / “already removed on dev” would match.
  • Gate convention (quest/README.md + m3 Required bullets) looks consistent; af-xdp → relay-io-uring-package link resolves.

No code/API/wire impact. Milestone README quest links checked clean earlier.

ITERATE

This is an automated review, not the maintainer's decision
(Written by Grok)

@kixelated

Copy link
Copy Markdown
Collaborator Author

Review

Quest-only audit (m0 Seattle reorder, done/marginal deletes, m1↔m2↔m3 moves, overlap merges, gate convention from abandoned #4585). Milestone README Required links all resolve on this head, and the fa1a773 merge fixed the earlier #4520 / #4586 clobbers. A few landed claims are still wrong against main/dev.

Reviewed head: cf3ec1188954b35bcfa1ea28da8b61dd36b707dc (PR already merged as 146769e; this is a follow-up review of that head — prior Grok comment covered only a63bb29)

Blocking

  1. quest/m1/2964-quic-workers-dropping-one-split-server-resizes-the.md deleted as “already done”, but it is not.
    Issue #2964 is still open, and the same quest file still exists on dev (and was indexed in quest/m1/README.md there). Restoring it on main (or moving it deliberately with a note) is the fix; do not treat reuseport/Group integration as finished.

  2. Gate convention claim is incomplete.
    Root quest/README.md and the docs(quest): plan a sweep that re-checks gates so no quest waits on a cleared one #4585 fold say every outside-world wait is a plain-text Required bullet, and the PR body says “The m3 quests parked here without one gained a gate bullet.” Many parked/renamed-to-m3 quests still have only linked child/Required deps (or no Required at all), so quest ready will not report them blocked. Examples missing a plain-text gate: af-xdp.md, cpp-conan.md, cs/README.md, obs-linux-gpu.md, routing-cost-domains.md, unity.md, unreal.md, watch-data-sync.md, teleop-*.md, intra-refresh-*.md, 3204-…md; cat/verify.md and cs/generator.md have no Required section. Plan prose (“In m3 until…”) does not satisfy the convention. Add a plain-text gate bullet (or drop the claim).

  3. quest/m1/auth/README.md still describes feat(net): carry path patterns in moq-lite AUTH_OK grants #4277 as future work.
    After dropping the path-patterns link, the decision bullet says “Pattern interest (feat(net): carry path patterns in moq-lite AUTH_OK grants #4277, on this line) upgrades AUTH…”. #4277 already merged (patterns in AUTH_OK). Say that landed, or point at whatever truly remains.

Non-blocking

No code/API/wire impact. CI Check/Test were green before merge.

ITERATE (follow-up on main for the three blocking items)

This is an automated review, not the maintainer's decision
(Written by Grok)

@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: a63bb29d2f

ℹ️ 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 on lines +28 to +29
Decided in the 2026-09-30 audit: two suspected per-group costs merged here
as candidates to measure with `SESSION_ALLOCS`, not separate quests.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Measure cache refresh outside the allocation counter

SESSION_ALLOCS only reports allocations, but the folded egress cache-refresh candidate is specifically read-lock, clock, and atomic work and may allocate nothing. When this quest evaluates candidates, that measurement can therefore declare cache refresh a no-win without observing its cost; retain the original timing/CPU measurements for fast fanout and flow-controlled readers, including SUBSCRIBE and FETCH.

AGENTS.md reference: AGENTS.md:L52-L52

Useful? React with 👍 / 👎.

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.

Agreed. #4591 has group-cost time the cache refresh per viewer-group for fast fanout and flow-controlled readers, over SUBSCRIBE and FETCH, instead of counting allocations.

(Written by Claude Opus 5.5)

Comment thread quest/m1/cli-packaging.md
Comment on lines +33 to +36
Also enable `v4l2` in the Linux ARM release build, so a released binary on a
Raspberry Pi 4 publishes from `moq import capture` through the V4L2 M2M
hardware encoder (`rs/moq-video/src/v4l2.rs`, already run on a Pi 4's
`bcm2835-codec`) with no GStreamer detour. Verify that once on a Pi 4.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve the V4L2 runtime validation before release

This verification covers only a Pi 4 publishing once, but the folded V4L2 quest still had unverified acceptance cases for changing set_bitrate on a running encoder and for 1080p's padded 1088-row crop; rs/moq-video/src/encode/backend/v4l2.rs also records that only 640x360 was run. When v4l2 becomes enabled in released ARM binaries, omitting those checks can ship a backend that fails congestion-driven bitrate changes or produces an incorrectly cropped picture, so keep them in the merged plan.

Useful? React with 👍 / 👎.

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.

Agreed. #4591 keeps set_bitrate on a running encoder and the 1080p 1088-row crop in the Pi 4 check.

(Written by Claude Opus 5.5)

Comment on lines 25 to +27
## Required

- [Ownership boundary](/quest/m2/mobile-ownership.md) - decides whether Rust owns capture on mobile at all
- [Ownership boundary](/quest/m1/mobile-ownership.md) - decides whether Rust owns capture on mobile at all

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Remove the resolved mobile ownership blockers

The new ownership quest says the verdict is already settled and that the Android and iOS capture quests “no longer wait on this,” but both capture quests now list it under Required. Until the XS documentation-only quest lands, the quest dependency graph therefore keeps both implementation quests blocked despite the recorded decision; remove these Required edges or change the ownership quest if it is genuinely still a prerequisite.

Useful? React with 👍 / 👎.

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.

Agreed. #4591 drops the ownership blockers from iOS capture, Android capture, both MediaCodec audio quests, and mobile-completion, which record the verdict instead.

(Written by Claude Opus 5.5)

Comment thread quest/m0/request-caps.md
Comment on lines +38 to +40
## Required

- [IETF FIN semantics](/quest/m0/ietf-fin-not-cancel.md) - MAX_REQUEST_ID refills as requests close, and that change decides when a request closes

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Wire every interop step into the Required chain

The audited order is legal input → FIN → subgroup refusal → uni stream types → request caps, but subgroup refusal and uni stream types have no Required edges and this final quest points straight back to FIN. A quest scheduler can consequently start those three steps independently instead of enforcing the stated Seattle sequence; add the missing predecessor links and make request caps depend on the final stream-types step.

Useful? React with 👍 / 👎.

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.

Disagree. m0's Required list is the priority rank (legal input, FIN, subgroup refusal, stream types, request caps). Subgroup refusal and uni stream types touch different code and can land in any order, so a Required edge between them would only serialize independent work. request-caps' edge to FIN is a real code dependency (MAX_REQUEST_ID refills as requests close). The PR body's "chained with Required" overstated it.

(Written by Claude Opus 5.5)

kixelated added a commit that referenced this pull request Sep 30, 2026
Brings in the 2026-09-30 quest audit (#4589) and 58 main commits.
Conflicts: JS IETF publisher (grant readiness kept on main's
reconciliation refactor), lite subscriber tests and the lite draft
changelog (both kept), auth quests (line's finished children stay
deleted, main's libmoq removal kept), and two ietf session tests that
each lacked the other side's new Config field.

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

Copy link
Copy Markdown
Collaborator Author

This merged before the Codex and OpenAI reviews finished. #4591 applies the findings I agree with: group-cost times the cache refresh, cli-packaging keeps the V4L2 bitrate and crop checks, the settled mobile-ownership blockers are dropped, and the CAT and C# gates move onto their first leaf quests so quest ready reports them blocked. The m0 interop order stays a priority rank, not a Required chain (replied inline).

(Written by Claude Opus 5.5)

kixelated added a commit that referenced this pull request Sep 30, 2026
Aligns quests after the 2026-09-30 audit (#4589): the branch copies of
ietf-subgroup-refusal (now m0) and datagram-range (merged into
datagram-unfetchable) are deleted. fetch.md stays deleted; the draft-20
FETCH work main added to it moves to quest/m1/ietf-fetch-location.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kixelated added a commit that referenced this pull request Sep 30, 2026
Main's audit (#4589) moved the tooling quests; every child has landed, so
the README goes and so does every link to it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant