Skip to content

quest: audit the whole tree (2026-10-08) - #5058

Merged
kixelated merged 12 commits into
mainfrom
quest-audit-2026-10-08
Oct 8, 2026
Merged

kixelated merged 12 commits into
mainfrom
quest-audit-2026-10-08

Conversation

@kixelated

@kixelated kixelated commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator

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-plan round with the maintainer. Every recommendation below was accepted and is applied here.

  • Deleted, done or superseded (6): ietf-first-object-zero (fix(net): accept a clear FIRST_OBJECT that starts at object 0 #5027), ietf-deviations-doc (docs(concept): list the relay's moq-transport deviations #5022), qos/lag-splice (fix(net): keep spliced lag honest when a route is replaced #5009 on the line), catalog-early-demand (feat(hang)!: one enabled flag replaces stalled #4915, feat(net)!: carry publisher epochs on routes #4942), stats-delta (superseded by stats-split), text-schema (duplicates the archive timeline).
  • Deleted, not worth the cost (13): subscribe-live-time, ci-runner-stalls, capture-default (folded into capture-alsa-link), nvenc-keyframe-flag, prefix-route-fronts, cache-shard, c-backend-copy, p2p/unordered, moq-relay-subcommand, af-xdp, cut-through's four build quests (bench and loss-delay stay), teleop-browser-package (zod schema folded into teleop-proof), ietf-cold-largest (INVALID_RANGE stays), ts-restart (any TS rewind stays fatal; A signalled backward TS discontinuity ends the import: republish the rest as a new broadcast in the same process #4582 closed as not planned).
  • Merged: js-probe-lifetime into track-stream-demand; flv/mkv-export-delay into export-delay; ietf-headless-subgroup into ietf-object-gaps; ffi-frame-duration-default into ffi-shape/codec; interop-graceful-close into interop-runner-approval; uring-open-contract into 3129; embedded-device into video-hardware-access; performance-profiles into perf/lock-profile; signed-priority into track-priority-scope.
  • Split: js-session-parity (caps) and js-pending-tail (waits on fix(net): keep a lite subscription's demand until its groups drain #4225); listener-deadlines (io_uring), listener-deadlines-http, iroh-keep-alive.
  • New: drop-loud (count dropped FLV script tags and emsg), videotoolbox-presets (out of obs-macos), qos/lag-histogram (quest(qos): Broadcast health and congestion #4133's histogram, requires stats-split).
  • Shrunk: restart (Restart only on lite-07), moqsrc (no linger timer), largest-regression, ietf-end-of-track-location (capped END_OF_GROUP only), multi-cdn (Rust and JS), js-publish-timestamp, publish-timestamp (null timescale means untimed), auth/request-token (decode-and-close; feat(net): a token on a request authorizes that request #4675 splits), origin-front-parks (benchmark first), lite-live (no TRACK_STATUS step), rs2ts (go/no-go after the translator), frame-slot-charge, papercuts-rs, bench-coverage, quic-keep-alive, one-port/udp-demux (STUN responder to P2P), closure-counters, quic-gcc (receive-timestamps spike), video-embedded (verify first), latency-ledger (viewer stages).
  • Moved: m0 to m1: claim-epochs, held-group-wakes, largest-regression, audio-jitter-target. m1 to m2: uring-ietf, uring-drop-close, 3199, pipeline-fetch-info, 2848, link-quality, kt-jvm-exit, and the capture chain (cpal-alsa-runtime, capture-alsa-link, cli-packaging). m2 to m3: 2147, 3202, 3129, uring-tcp, video-codec-coverage, teleop robot and arbitration, quic-ecn, quic-careful-resume, ietf-cluster-peers, color-catalog, cpp-vcpkg, msfts-convergence, pipewire-camera-planes. m4 folds into m3. browser-benchmarks stays in m1 because rs2ts requires it.
  • Mechanical: about 40 missing Required/Related links, every rank inversion (lite-live above lite07-finalize, qmux-credit-upstream, media-audio-tone, ietf-fetch-only, gpu-health), and about 60 stale-text fixes (merged PRs, renamed code, line numbers to symbols, noq to moq-quic).
  • Wire note: auth/wip-version renumbers UNAUTHORIZED to 0x3B; main already assigns 0x3A to NOT_FETCHABLE (feat(net)!: datagrams are unfetchable and bounded by the group range #4982). PR feat(net): in-band AUTH (questline) #4039 still needs that renumber.

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)

  • ✅ Delete all 18 (Recommended)
  • Done ones; review rest
  • Only done ones

Merges and shrinks

  • ✅ Accept all (Recommended)
  • Merges only
  • Review each

Milestone moves

  • ✅ Accept all (Recommended)
  • Only m0→m1
  • Review each

Mechanical fixes

  • ✅ Apply all (Recommended)
  • Links only

ietf-cold-largest after #5030 closed as a hack

  • ✅ Keep INVALID_RANGE, delete (Recommended)
  • Re-plan later

E2EE produce API

  • ✅ Self-minted only (Recommended)
  • Any epoch

ts-restart with --epoch

  • ✅ Fail hard (Recommended)
  • Keep the epoch
  • Mint anyway

ts-restart after review ("restarting a broadcast is just the wrong abstraction")

  • ✅ Reject, delete quest (Recommended)
  • Reject, clearer error
  • Keep the restart plan

cpal capture chain

  • ✅ Move chain to m2 (Recommended)
  • Post upstream
  • Fork fallback

stats-split vs #5046

QoS line

  • ✅ Split histogram out (Recommended)
  • Children target line

New quests (multi-select)

  • ✅ Fail loud on drops (Recommended)
  • ✅ VideoToolbox presets (Recommended)
  • ✅ Lite peer-link loss (Recommended)
  • v4l2 ARM release flag

m4

  • Define it (Recommended)
  • ✅ Fold into m3

Leftover branches

  • ✅ Delete all 16 (Recommended)
  • Leave them

Stale claims (apps, subscribe-drop)

  • ✅ Release both (Recommended)
  • Leave as-is

Group order

  • ✅ Ranges own order (Recommended)
  • No order knob

PR follow-up

  • ✅ After audit PR (Recommended)
  • Now, in parallel
  • No

#4675 vs the request-token shrink ("too big to review right now")

Follow-ups

(Written by Claude Opus 5.5)

🤖 Generated with Claude Code

kixelated and others added 9 commits October 8, 2026 08:09
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
@kixelated

Copy link
Copy Markdown
Collaborator Author

Automated review: f7427574

Quest-only change (273 files, no code). I checked the whole tree at this head mechanically, and it holds up. No dangling /quest/... links across all 408 files. No Required link points to a later milestone. No README lists a quest ahead of something it requires, and there are no Required cycles. Every code path cited in the changed lines exists on main. I also spot-checked several claims against main and they're accurate: NOT_FETCHABLE is 0x3a in rs/moq-net/src/error.rs and 0x3b is free; MoqAudioEncoderOutput::frame_duration_us defaults to 20000 and default_frame_duration_matches_moq_audio pins it; GroupFlags::default() sets has_end: true and js/net/src/ietf/publisher.ts hard-codes hasEnd: true; and the cited PRs are merged or closed as stated. The findings below are about tracked work getting lost and about collisions with PRs in flight.

Non-blocking (fix before merge)

  1. The End of Track Location fix is deferred to a quest that doesn't exist. quest/m0/ietf-end-of-track-location.md:17 says moving END_OF_TRACK onto the upstream's Location is "deferred to an m1 follow-up", and the m0 README entry says the same. No m1 (or any) quest covers it, and this PR deletes the only write-up of the root cause: the ingress Ended::Track ordering in ietf/subscriber.rs and the egress write_end_of_track always opening a new stream at end/0. Fastly's status-end-of-track cell will keep failing with nothing tracking it. Also, quest/m0/README.md:35 still says the fixes below LOCATION_FILTER "go ahead of Seattle", which no longer covers this one. Fix: add a small m1 quest that carries the deleted ingress and egress plan and the 5/5 versus 6/0 test, link it from here, and reword the README sentence. Optionally rename the slug too, since the file now describes END_OF_GROUP on capped streams.

  2. The work folded into track-stream-demand collides with fix(net): hold demand across a subscription's TRACK and SUBSCRIBE #5053, which deletes that quest. This PR deletes js-probe-lifetime and moves its scope into quest/m0/track-stream-demand.md:57-67: a cancel signal on resolveTrackInfo, TRACK and FETCH requesters releasing their hold on reset, and documenting or refusing removeTrack on a name cached only by consume(). fix(net): hold demand across a subscription's TRACK and SUBSCRIBE #5053 (Dryvnt) implements this quest and removes the file. It does add a hold signal to resolveTrackInfo and the lite publisher, but if it doesn't also cover the FETCH-requester release and the removeTrack contract, resolving the modify/delete conflict by keeping the deletion silently drops those items. Either check fix(net): hold demand across a subscription's TRACK and SUBSCRIBE #5053 against the new bullets and its tests, or keep the leftovers as their own small quest.

  3. largest-regression is re-planned out from under fix(net): a relay copy fails loud when upstream's largest group goes backwards #5057. quest/m1/largest-regression.md:31 and its new ## Required section (line 56) say to move it to m1 and build it only after Restart and Idle fronts. But fix(net): a relay copy fails loud when upstream's largest group goes backwards #5057 (Dryvnt, draft, stacked on fix(net): an unread front ends after its linger #5054) already implements quest/m0/largest-regression.md and deletes it. That PR also edits quest/m1/ietf-cold-largest.md (+18), which this PR deletes, and it proposes a follow-up m0 quest. The audit doesn't mention fix(net): a relay copy fails loud when upstream's largest group goes backwards #5057 or fix(net): an unread front ends after its linger #5054. Decide whether fix(net): a relay copy fails loud when upstream's largest group goes backwards #5057 goes ahead now, which contradicts the new ordering, or waits for Restart, and tell its author. Otherwise its rebase has to resolve a rename and a delete against a plan that now says "not yet".

  4. Expect mechanical modify/delete or rename conflicts in open PRs. These can all be resolved by keeping the move or delete; nothing substantive is lost:

CI (Check, Test) is still running at this head.

Verdict: ITERATE. These are small fixes. Mainly, give the deferred End of Track work a home and reconcile with #5053 and #5057 before merging.

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: 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)

Comment thread quest/m0/broadcast-epoch/ts-restart.md Outdated
Comment on lines +40 to +43
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.

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.

[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.

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, fixed in e4d7fc0.

(Written by Claude Opus 5.5)

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.

Superseded: the maintainer dropped the in-process restart altogether in 2e42af0. Any rewind stays fatal, the quest is deleted, and #4582 is closed as not planned, so the importer never reuses or mints an epoch on a rewind.

(Written by Claude Opus 5.5)

Comment thread quest/m0/broadcast-epoch/moqsrc.md Outdated
Comment on lines +50 to +55
- **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

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.

[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.

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, fixed in e4d7fc0.

(Written by Claude Opus 5.5)

Comment thread quest/m2/one-port/tcp-demux.md Outdated
Comment on lines +33 to +36
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.

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.

[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.

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, fixed in e4d7fc0.

(Written by Claude Opus 5.5)

Comment thread quest/m1/drop-loud.md Outdated
Comment on lines +12 to +15
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.

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.

[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.

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, fixed in e4d7fc0.

(Written by Claude Opus 5.5)

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

Copy link
Copy Markdown
Collaborator Author

Automated follow-up: e4d7fc04 (after f7427574)

One-commit push (quest: address review on the audit PR) updates four quest plans in response to the OpenAI review's P2s. I checked each change against main; the cited code matches.

What this push fixed (OpenAI P2s)

  1. quest/m0/broadcast-epoch/ts-restart.md — explicit---epoch rewind stays fatal, and the plan now requires the supervisor to restart both hosts under a new shared epoch (same-epoch restart would resume old group identities). Points at updating doc/bin/cli.md's redundant-pair example.
  2. quest/m0/broadcast-epoch/moqsrc.md — source loss (publisher session close / route gone) enters the held-pad state even before announce End; malformed catalog/track stays fatal. Adds a regression for both orderings. Matches today's catalog_consumer.next() / session-error path in rs/moq-gst/src/source/imp.rs (the plan says catalog.next(); the code name is catalog_consumer.next() — cosmetic).
  3. quest/m2/one-port/tcp-demux.md — no-ALPN TLS keeps the decrypted-byte sniff (0x03 → RTMP); moq/HTTP ALPNs dispatch directly. Matches moq-rtmp's empty ALPN list (rs/moq-rtmp/src/listen.rs, README).
  4. quest/m1/drop-loud.md — counts RTMP StreamMetadataChanged / StreamMetadataReceived discards in server.rs / dial.rs as well as the FLV/fMP4 importer arms. Those discard sites are real on main.

No new issues in this push.

Still open from the earlier Grok review on f7427574

  1. End of Track Location still has no quest. quest/m0/ietf-end-of-track-location.md still defers moving END_OF_TRACK onto the upstream Location to "an m1 follow-up" that does not exist; only this m0 capped-stream END_OF_GROUP quest remains. Fastly's status-end-of-track cell stays untracked.
  2. track-stream-demand still collides with fix(net): hold demand across a subscription's TRACK and SUBSCRIBE #5053. The FETCH-requester release and removeTrack bullets added here sit in a file fix(net): hold demand across a subscription's TRACK and SUBSCRIBE #5053 deletes. Still need a check that fix(net): hold demand across a subscription's TRACK and SUBSCRIBE #5053 covers them, or a leftover quest.
  3. largest-regression still conflicts with fix(net): a relay copy fails loud when upstream's largest group goes backwards #5057. Required-after-Restart/Idle ordering vs Dryvnt's draft that implements the old m0 path and deletes the file — still unresolved; fix(net): a relay copy fails loud when upstream's largest group goes backwards #5057 is still open (draft).
  4. Mechanical modify/delete conflicts with fix(net): an unread front ends after its linger #5054, fix(net): accept each draft's message parameters #5028, feat(ietf): serve draft-20 FETCH within one group #4971, feat(moq-net): IETF fetch-only demand uses TRACK_STATUS, and properties are asked once #4974, quest: plan the FFI publisher stall and demand lost wake #5055, feat(cpp): the moq C++ package over moq-ffi, and the OBS plugin on it #4079, feat(moq-mux): import ts --passthrough carries the multiplex whole #5003 — unchanged.

PR is still CONFLICTING with main.

Verdict: ITERATE. The OpenAI plan fixes look good; the three cross-PR / missing-quest items from the first review are still the merge blockers.

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: e4d7fc0

All four findings from the previous review are addressed in the plans:

  • quest/m0/broadcast-epoch/ts-restart.md:40–46 requires a coordinated new shared epoch after an explicit-epoch rewind.
  • quest/m0/broadcast-epoch/moqsrc.md:30–38,54–63 exempts recoverable source loss and covers both source-loss/End orderings.
  • quest/m2/one-port/tcp-demux.md:33–38,45–47 retains no-ALPN RTMPS sniffing and adds explicit coverage.
  • quest/m1/drop-loud.md:15–19,33–35 includes 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>
@kixelated

Copy link
Copy Markdown
Collaborator Author

Merge summary for 2e42af0:

Enabling auto-merge on 2e42af0.

(Written by Claude Opus 5.5)

@kixelated
kixelated enabled auto-merge (squash) October 8, 2026 16:01
@kixelated

Copy link
Copy Markdown
Collaborator Author

Automated follow-up: 2e42af05 (after e4d7fc04)

One-commit push (quest: drop the in-process TS restart; a rewind stays fatal) deletes quest/m0/broadcast-epoch/ts-restart.md, unlinks it from the broadcast-epoch README, and rewrites quest/m1/ts-passthrough.md so any PCR rewind, flagged or not, is fatal. This matches #4582 being closed as not planned, and it matches main: doc/bin/cli.md (Import) already says a rewinding timeline ends the import and only a flagged forward jump continues. No other file in quest/ or doc/ at this head still links ts-restart.md or cites #4582. The earlier --epoch and shared-epoch finding on TS restart is now moot.

Non-blocking

  1. quest/m1/ts-passthrough.md ~L103-104: the test plan still describes the dropped restart. "A flagged backward PCR discontinuity publishes two broadcasts, and the same rewind unflagged errors" contradicts the new rule at L45 ("Any PCR rewind, flagged or not, is fatal"). Suggested text: "A backward PCR, flagged or unflagged, ends the import with an error; a flagged forward jump starts a group."

Still open from earlier reviews (this push didn't touch them)

Cross-PR

Verdict: ITERATE. The one-line test-plan fix is trivial; the earlier open items and the merge conflict are what remain.

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

…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 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: 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)

@kixelated

Copy link
Copy Markdown
Collaborator Author

Automated follow-up: 3a35f908 (after e4d7fc04)

Two commits since the last Grok review: 2e42af05 (quest: drop the in-process TS restart; a rewind stays fatal) and an origin/main merge. The merge's own effect is accurate: references to #5028 and #4929 now say they merged, and links to their deleted quests were dropped. Every quest link added in the PR diff resolves at this head, and nothing at head still links to ts-restart.md.

2e42af05 deletes quest/m0/broadcast-epoch/ts-restart.md, unlinks it from the broadcast-epoch index, and makes quest/m1/ts-passthrough.md treat any PCR rewind, flagged or not, as fatal. That matches today's behavior described in doc/bin/cli.md (Import: a rewind "ends the import with an error"). It also supersedes the --epoch fix from the last push.

New in this push

  1. quest/m1/ts-passthrough.md (~line 103) still describes the old test. The Tests paragraph says "A flagged backward PCR discontinuity publishes two broadcasts, and the same rewind unflagged errors." That contradicts the new Decided bullet (~line 45) and the "refusing any PCR rewind" line for feat(moq-mux): import ts --passthrough carries the multiplex whole #5003. Someone implementing feat(moq-mux): import ts --passthrough carries the multiplex whole #5003 from this quest would write a test for the dropped behavior. Suggested fix: "A PCR rewind errors whether or not it is flagged; a flagged forward jump starts a group."
  2. Minor: A signalled backward TS discontinuity ends the import: republish the rest as a new broadcast in the same process #4582 (already closed) was the issue this quest closed. Its title still asks to republish in the same process, so a short comment there linking this decision would keep the record straight.

Still open from earlier Grok reviews

  1. End of Track Location still has no quest. quest/m0/ietf-end-of-track-location.md still defers to "an m1 follow-up" that doesn't exist.
  2. track-stream-demand still collides with fix(net): hold demand across a subscription's TRACK and SUBSCRIBE #5053 (open, CONFLICTING). This PR keeps editing quest/m0/track-stream-demand.md, and fix(net): hold demand across a subscription's TRACK and SUBSCRIBE #5053 deletes that file.
  3. largest-regression still conflicts with fix(net): a relay copy fails loud when upstream's largest group goes backwards #5057 (draft). The only change this push made there is dropping a Related link.
  4. Mechanical conflicts: fix(net): accept each draft's message parameters #5028 has merged, so that one is resolved. I didn't recheck the others (fix(net): an unread front ends after its linger #5054, feat(ietf): serve draft-20 FETCH within one group #4971, feat(moq-net): IETF fetch-only demand uses TRACK_STATUS, and properties are asked once #4974, quest: plan the FFI publisher stall and demand lost wake #5055, feat(cpp): the moq C++ package over moq-ffi, and the OBS plugin on it #4079, feat(moq-mux): import ts --passthrough carries the multiplex whole #5003).

The PR is now MERGEABLE with main. CI has 2 checks pending and 1 skipped.

Verdict: ITERATE. Dropping the in-process restart is consistent with the code and docs. Fix the stale test line, and the three cross-PR and missing-quest items are still the blockers.

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

@kixelated
kixelated merged commit 17a48c1 into main Oct 8, 2026
4 checks passed
@kixelated
kixelated deleted the quest-audit-2026-10-08 branch October 8, 2026 16:09
kixelated added a commit that referenced this pull request Oct 8, 2026
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>
kixelated added a commit that referenced this pull request Oct 8, 2026
Takes main's quest tree (#5058 squashed, #5046, #5047, #5060, and the rest)
and reapplies only this PR's delta. gpu-surface was deleted on main after
#4975 finished it, so its Kind::Auto decision drops.

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

1 participant