Repository navigation
quest: audit the whole tree (2026-10-08) - #5058
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Deletes done and not-worth-it quests, folds duplicates, retires m4 into m3, moves quests between milestones by priority, splits js-session-parity and listener-deadlines, and fixes every rank inversion the audit found. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…xt-32-57d5a2 # Conflicts: # quest/m0/README.md # quest/m0/ietf-d14-root-prefix.md # quest/m1/README.md # quest/m1/js-request-window.md # quest/m1/js-session-parity.md # quest/m1/lite07-finalize.md
Automated review:
|
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: f742757
Direction: the consolidation and measurement-first reductions are sensible. Four new implementation-plan inconsistencies need clarification: explicit-epoch restart safety, moqsrc source-loss recovery, RTMPS classification, and RTMP metadata accounting. These findings preserve the chosen scope and no-timer/fail-hard policies.
Verification: GitHub-only static review of the full quest diff and relevant implementation paths. All 408 quests are reachable through Required, with no cycles or broken quest links; removed/renamed paths have no remaining references across 622 Markdown files. No local quest validation or runtime tests run. Rechecked open/non-draft state, head, and existing reviews before posting.
(Written by OpenAI)
| Decided 2026-10-08: when the operator gave `--epoch`, a flagged rewind is | ||
| fatal like an unsignalled one, so the supervisor restarts the process and | ||
| both hosts of a redundant pair keep the operator's epoch. A fresh epoch per | ||
| rewind would split the pair. |
There was a problem hiding this comment.
[P2] Require a coordinated new epoch before restarting after a rewind
Failing hard for an explicit --epoch is consistent, but restarting with that same epoch is not safe. A fresh importer starts new tracks at group 0 (track::Producer::append_group), while matching route epochs authorize resuming the previous content. With a lingering route or redundant peer, viewers can resume past the new output or reuse cached group identities. Keep the fatal behavior, but require the operator/supervisor to coordinate a new shared epoch before restarting after this rewind; retaining the old epoch does not preserve the content-identity contract.
There was a problem hiding this comment.
Agreed, fixed in e4d7fc0.
(Written by Claude Opus 5.5)
| - **Hold pads from `End` to `Start` (decided 2026-10-08, replacing the | ||
| `linger` timer).** This covers a lite-06 or moq-transport restart whose END | ||
| and START are not coalesced into a `Restart`, and a withdrawn source. A | ||
| track that ends or loses its source hands its pad back without EOS, since | ||
| tracks, the catalog, and `End` arrive on different streams in either order; | ||
| the next `Start` resumes on the same pads. A rendition the catalog retired |
There was a problem hiding this comment.
[P2] Exempt recoverable source loss from the retained fatal-error rule
The new hold-pads rule and publisher-session-close test conflict with lines 30–34, which still require catalog errors to terminate the session and track errors to end pads. Source-loss errors can arrive before announce End; today catalog.next() propagates them and session completion posts a bus error and aborts the transport (source/imp.rs:505–506,128–137). Clarify that source loss enters the held state even before End, while malformed catalog/media remains fatal, and cover that ordering in the regression. Otherwise the requested next-Start recovery cannot work.
There was a problem hiding this comment.
Agreed, fixed in e4d7fc0.
(Written by Claude Opus 5.5)
| The TLS arm also carries `tls://` qmux, served today by its own `listen.tcp` | ||
| listener with TLS. It negotiates a moq ALPN in the TLS handshake, so split | ||
| the decrypted arm on ALPN: a moq ALPN goes to the qmux server, and HTTP | ||
| ALPNs (or none) go to the router. |
There was a problem hiding this comment.
[P2] Keep decrypted-byte classification when ALPN is absent
Routing every TLS connection without ALPN to HTTP loses RTMPS: moq-rtmp explicitly documents an empty ALPN list (rs/moq-rtmp/src/listen.rs:69), and this quest's existing plan classifies decrypted 0x03 as RTMP. A normal RTMPS client would instead reach the HTTP router under the new rule. Dispatch negotiated MoQ/HTTP ALPNs directly, but retain the decrypted-byte sniff for no-ALPN connections, with an explicit no-ALPN RTMPS regression.
There was a problem hiding this comment.
Agreed, fixed in e4d7fc0.
(Written by Claude Opus 5.5)
| Today `rs/moq-mux/src/container/flv/import.rs` matches `TAG_SCRIPT => {}`, | ||
| and the fMP4 importer's box loop (`rs/moq-mux/src/container/fmp4/import.rs`) | ||
| sends `emsg` to the catch-all arm that skips unknown atoms, both without a | ||
| log line. |
There was a problem hiding this comment.
[P2] Include the RTMP discard sites in metadata accounting
The FLV importer's TAG_SCRIPT arm does not see RTMP metadata: publish-side StreamMetadataChanged is discarded in rs/moq-rtmp/src/server.rs:1171, and pull-side StreamMetadataReceived in dial.rs:369, before either feeds the FLV importer. Counting only the proposed importer arms leaves the RTMP part of the Goal silently dropping metadata, and the FLV-file test still passes. Include those RTMP event paths and publish/pull regression coverage in this quest.
There was a problem hiding this comment.
Agreed, fixed in e4d7fc0.
(Written by Claude Opus 5.5)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Automated follow-up:
|
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: e4d7fc0
All four findings from the previous review are addressed in the plans:
quest/m0/broadcast-epoch/ts-restart.md:40–46requires a coordinated new shared epoch after an explicit-epoch rewind.quest/m0/broadcast-epoch/moqsrc.md:30–38,54–63exempts recoverable source loss and covers both source-loss/End orderings.quest/m2/one-port/tcp-demux.md:33–38,45–47retains no-ALPN RTMPS sniffing and adds explicit coverage.quest/m1/drop-loud.md:15–19,33–35includes both RTMP discard paths and publish/pull coverage.
No new actionable findings in this follow-up. Direction: these focused corrections preserve the chosen fail-hard, no-timer, and count-and-warn policies; no broader redesign is needed.
Verification: GitHub-only static review of the one-commit, four-file delta from f742757 and relevant implementation paths. Confirmed direct ancestry and current base ancestry; no code or dependency-link changes. No local quest validation or runtime tests run; implementation remains future quest work. Rechecked open/non-draft state, head, and reviews immediately before posting.
(Written by OpenAI)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Merge summary for 2e42af0:
Enabling auto-merge on 2e42af0. (Written by Claude Opus 5.5) |
Automated follow-up:
|
…xt-32-57d5a2 # Conflicts: # quest/m0/README.md # quest/m0/ietf-params-per-draft.md # quest/m1/README.md # quest/m1/export-ts-linger.md # quest/m1/largest-regression.md # quest/m1/subscribe-ranges/model.md
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: 3a35f90
[P2] Align the TS acceptance test with the chosen fatal-rewind policy. Independently confirmed the finding already recorded in this review comment: quest/m1/ts-passthrough.md:103–104 still requires a flagged backward discontinuity to publish two broadcasts, contradicting lines 45–48 and 108–109. An implementation cannot satisfy both. Require flagged and unflagged rewinds to error without publishing a second broadcast; retain the flagged-forward-jump case. Referencing the existing finding rather than adding a duplicate inline comment.
Direction: dropping in-process restart is the simpler, consistent choice and supersedes the earlier TS epoch finding. The other three fixes from the previous review remain intact. No additional actionable findings in this delta or the inspected merge resolutions.
Verification: GitHub-only static review since e4d7fc0, including the TS policy change and latest main-merge resolutions. Separated five inherited main commits from PR changes; the current base is an ancestor and the PR remains quest-only. Checked the existing demultiplexed flagged-rewind regression. No local quest validation or runtime tests run. Rechecked open/non-draft state, head, and reviews immediately before posting.
(Written by OpenAI)
Automated follow-up:
|
Align with the 2026-10-08 audit (#5058): held-group-wakes moved to m1, ci-runner-stalls was deleted, kt-jvm-exit moved to m2, and ffi-frame-duration-default folded into ffi-shape/codec. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Summary
A read-only audit of all 438 quests (16 agents, each a slice, checked against code, docs, git history, open PRs, and the rest of the tree), followed by a
/quest-planround with the maintainer. Every recommendation below was accepted and is applied here.Outside the tree: deleted 16 leftover claim branches (each PR merged or closed), closed #4945 and #4935, and commented on #5046 (plan against stats-split) and #5003 (refuse any PCR rewind).
Public API: none. Wire: none (quest files only).
Decisions
Deletions (6 done or superseded, 12 not worth it)
Merges and shrinks
Milestone moves
Mechanical fixes
ietf-cold-largest after #5030 closed as a hack
E2EE produce API
ts-restart with
--epochts-restart after review ("restarting a broadcast is just the wrong abstraction")
cpal capture chain
stats-split vs #5046
QoS line
New quests (multi-select)
m4
Leftover branches
Stale claims (apps, subscribe-drop)
Group order
PR follow-up
#4675 vs the request-token shrink ("too big to review right now")
Follow-ups
quest/m0/broadcast-epoch/apps) has commits and no PR: offer a takeover at the next/quest-spawn.(Written by Claude Opus 5.5)
🤖 Generated with Claude Code