Skip to content

quest: apply the 2026-10-08 quest-tree audit - #5043

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

kixelated merged 6 commits into
mainfrom
quest/audit-2026-10-08

Conversation

@kixelated

@kixelated kixelated commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

A quest-tree audit at ac72dcd found about 90 places where quests disagree with each other, with merged code, or with recent decisions: the Restart plan vs. its consumers, epoch identity in routing and failover, stale names (max_age vs max_delay, web-transport-trait, libmoq, stall), quests over-blocked on whole lines, and stale wait-quest facts.

Approach

Each finding was checked against origin/main (b0f4a99 after the merge). Findings already fixed were skipped. Findings on quest files that an open PR changes were left for that PR (listed below), except where a new quest had to join a milestone README or the maintainer asked for an edit. The maintainer was away, so every other decision takes the audit's recommendation.

New quests:

Deleted: quest/m2/announce-shapes.md (maintainer).

Impact

None: quests only. No public API or wire change.

Decisions (paper trail)

Maintainer decisions (2026-10-08, relayed while away):

  • E2EE vs shared epochs: ✅ maintainer: encrypting publishers refuse a shared or explicit epoch; per-instance salt rejected. Recorded in e2ee/README.md (both cores, plus the draft rule) and e2ee/cli.md (--epoch with a credential refused).
  • Epochless routes never splice: ✅ maintainer: a Restart (or END+START) tells downstream subscribers, relays included, to drop the old copy and resubscribe fresh; a copy resumes or splices only across identical epochs. Recorded in broadcast-epoch/restart.md (goal, No pinned joins, a mocked lite-06 relay-chain test) and the epoch README. A downstream relay retires its old copy for new requests and forwards the Restart; subscriptions already on it follow as their applications decide.
  • announce-shapes: ✅ maintainer: delete (no consumer needs suffix claims; the exact-scope leak is not worth an XL wire change).
  • front-rescan: ✅ maintainer: folded into front-deadline-index inside quest: plan follow-ups from the 2026-10-07 PR sweep #5041, so this PR does not touch either.
  • feat(hang)!: one enabled flag replaces stalled #4915 stays merged with no retro review.

Every decision below is ✅ recommended (taken while the maintainer was away, 2026-10-08).

m0 and net lines

m1 a-l

m1 m-z

  • rust-untimed-default: lands before publish-timestamp, which narrows to tracks declared untimed; Related FFI shape (refactor(ffi)!: the bindings mirror Rust's layers #4519), second rebases.
  • [S] Rust non-continuous signal: new; audio-warmup and consumer-warmup Require it (the audit said Related for consumer-warmup; review showed it keys on the signal too).
  • subscribe-live-time: answered() / LiveEdge, since quest: plan the lite-07 Live flag that unblocks #5000 #5029 takes live.
  • untimed-decisions: run_group cite now recv_group / recv_fill.
  • media-audio-tone and publish-audio-channel-count: linked both ways.

m1 subdirectories

  • archive/replay-catalog: the audit recommended replaying under the recorded .info epoch. Reversed after the OpenAI review: the archive's own timeline groups and the rewritten catalog groups would put different bytes under the same name, epoch, and group number. Replay keeps a fresh epoch, moq import archive refuses --epoch, any moq-archive host never defaults to .info's epoch, the handover is a Restart, and dvr's handover test pins that. Maintainer: please confirm.
  • stats/rust and stats/js: refuse --stats/--echo on encrypted broadcasts; Related E2EE.
  • c/package Requires the C++ package line (pin already kixelated.4).
  • perf/announce-replay Related cluster-routing/routes; test-flakes-2/impaired-handshake Related quic/fork/switch.
  • Text fixes: perf/group-cost (latency_max gone), perf/3122 (removed runtime::Timer, symbols instead of line numbers), rs2ts/sans-io/lite (starting point is transport::poll), obs-moq-video/vpx-obs and quic/shard (no libmoq), stats/schema (fixtures in rs/hang/fixtures), stats/README (this line does not change moq-stats), c/retire (final moq-c 0.7.x; Related libmoq-retire).

m2 and m3

  • cut-through/{README,transport,loss-delay}: re-planned onto moq-net's transport::poll (refactor(net)!: own the poll transport interface #4709), as quic-ack-hook was; no web-transport-trait release.
  • catalog-tracks: defining fields are immutable; enabled, jitter/delay, and warmup are live state.
  • gpu-release Requires gpu-health.
  • rtsp-import refuses --epoch, with a test.
  • teleop/robot and teleop-mavlink declare Timescale::MILLI; Related rust-untimed-default.
  • native-enabled Related audio-ranked; quic-bbr-loss-parity Related bbr-ack-cleanup (after it) and narrowed to Switch like its siblings; tls-listener-mtls and quic-qmux linked both ways.
  • video-vaapi (moq-vaapi 0.1.0) and quic-ecn (moq-noq-proto 2.0.1) versions refreshed.
  • ladder: stall reads as disable; consumer-warmup says max delay; line-number cites dropped.

Skipped:

Left for in-flight PRs

Expect conflicts with in-flight PRs: quest/m0/README.md (#5010, #5020), broadcast-epoch/{README,restart}.md (#4960, #4904, #5010, #5038), quest/m2/README.md (#4996, the deleted announce-shapes line), and quest/m2/announce-shapes.md (#4039 edits a file this deletes).

Stale claim branches

No open PR. Left for the maintainer to delete:

(Written by Claude Opus 5.5)

🤖 Generated with Claude Code

kixelated and others added 2 commits October 7, 2026 19:16
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 8, 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 11 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
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 4563be72-1a2b-4f9e-b4b3-fa173915962c
📥 Commits

Reviewing files that changed from the base of the PR and between b0f4a99 and ccfd007.

📒 Files selected for processing (74)
  • quest/m0/README.md
  • quest/m0/broadcast-epoch/README.md
  • quest/m0/broadcast-epoch/apps.md
  • quest/m0/broadcast-epoch/bindings.md
  • quest/m0/broadcast-epoch/restart.md
  • quest/m0/broadcast-epoch/ts-restart.md
  • quest/m0/qmux-credit-upstream.md
  • quest/m0/qmux-credit.md
  • quest/m1/README.md
  • quest/m1/archive/dvr.md
  • quest/m1/archive/replay-catalog.md
  • quest/m1/assets-release.md
  • quest/m1/audio-encode-audiotoolbox.md
  • quest/m1/audio-warmup.md
  • quest/m1/bbr-ack-cleanup.md
  • quest/m1/c/package.md
  • quest/m1/c/retire.md
  • quest/m1/cache-max-age.md
  • quest/m1/cluster-routing/README.md
  • quest/m1/cluster-routing/multi-cdn.md
  • quest/m1/cluster-routing/routes.md
  • quest/m1/cmaf-frame-timestamp.md
  • quest/m1/cmaf-sample-defaults.md
  • quest/m1/e2ee/README.md
  • quest/m1/e2ee/cli.md
  • quest/m1/gpu-runner.md
  • quest/m1/hop-aligned-import.md
  • quest/m1/ietf-object-gaps.md
  • quest/m1/iroh-capsule-bump.md
  • quest/m1/js-fetch.md
  • quest/m1/js-group-handover.md
  • quest/m1/js-publish-timestamp.md
  • quest/m1/lite-untimed.md
  • quest/m1/media-audio-tone.md
  • quest/m1/obs-moq-video/vpx-obs.md
  • quest/m1/perf/3122-moq-uring-2-5-of-relay-cpu-is-vdso-clock-reads-the-drive.md
  • quest/m1/perf/announce-replay.md
  • quest/m1/perf/group-cost.md
  • quest/m1/publish-audio-channel-count.md
  • quest/m1/quic/bbr-app-limited-edges.md
  • quest/m1/quic/bbr-app-limited.md
  • quest/m1/quic/shard.md
  • quest/m1/rs2ts/sans-io/lite.md
  • quest/m1/rust-continuous.md
  • quest/m1/rust-untimed-default.md
  • quest/m1/stats/README.md
  • quest/m1/stats/js.md
  • quest/m1/stats/rust.md
  • quest/m1/stats/schema.md
  • quest/m1/subscribe-live-time.md
  • quest/m1/subscribe-ranges/ietf.md
  • quest/m1/subscribe-ranges/model.md
  • quest/m1/test-flakes-2/impaired-handshake.md
  • quest/m1/untimed-decisions.md
  • quest/m2/README.md
  • quest/m2/announce-shapes.md
  • quest/m2/catalog-tracks.md
  • quest/m2/gpu-release.md
  • quest/m2/intra-refresh/consumer-warmup.md
  • quest/m2/native-enabled.md
  • quest/m2/quic-bbr-loss-parity.md
  • quest/m2/quic-ecn.md
  • quest/m2/quic-qmux.md
  • quest/m2/rtsp-import.md
  • quest/m2/teleop/robot.md
  • quest/m2/tls-listener-mtls.md
  • quest/m2/video-vaapi.md
  • quest/m3/cut-through/README.md
  • quest/m3/cut-through/loss-delay.md
  • quest/m3/cut-through/transport.md
  • quest/m3/ladder/README.md
  • quest/m3/ladder/controller.md
  • quest/m3/ladder/fetch.md
  • quest/m3/teleop-mavlink.md
  • Autopilot · 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.

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

Copy link
Copy Markdown
Collaborator Author

Automated review of 9a501d41 (quest-only, 75 files)

I checked the factual claims against main (b0f4a996) and the referenced PRs. Nearly all of them hold: Subscription::max_delay (#4917), transport::poll in rs/moq-net/src/transport.rs with no web-transport-trait dependency in moq-net (#4709), recv_group/recv_fill/run_group_fetch in ietf/subscriber.rs, NotFetchable = 0x3a on lite-07 and nothing equivalent in js/ yet (#4982), the #5019 headless drop in handleGroup, ObjectIdGap, the group.ts writers stamping Timestamp.now(), .info already recording the source epoch (moq-archive/src/info.rs), rs/hang/fixtures/catalog-clock.json, the pins (moq-vaapi 0.1.0, moq-noq-proto 2.0.1, web-transport-iroh 0.8.1), web-transport#419 merging after iroh 0.8.2 shipped, #412/#413 still open with qmux at 0.6.2/0.5.2, and npm at 0.6.2/0.5.2. Every in-tree link resolves on the head, and nothing outside quest/m2/README.md (fixed here) links the deleted announce-shapes.md. The latest push (511ad48f→9a501d41, a three-line clarification in restart.md) agrees with the new "never splice" paragraph.

Non-blocking

  1. quest/m1/hop-aligned-import.md:18-21: the importer list doesn't match what --epoch accepts. ImportSource::takes_epoch (rs/moq-cli/src/args.rs:782) returns true for everything except ts --program all, RTMP, SRT, and RTC with --listen. So:

    • mkv isn't an importer at all. ImportSource has Avc3, Fmp4, Ts, Flv, Hls, Rtmp, Srt, Rtc, Archive, and Capture, and mkv exists only on the export side.
    • avc3 and the HLS pull do accept --epoch but are now outside the contract. HLS was in scope before this edit, and it reuses the fmp4/ts importers, so an HLS pair sharing --epoch is allowed by the CLI but not covered by the quest.
    • Only the RTC listener (WHIP) is refused. The WHEP client (--connect) takes --epoch.

    Suggest "(avc3, fmp4, ts, flv, and the HLS pull)". Then decide whether the WHEP client belongs in scope or gets refused like RTMP/SRT. The same applies to rtsp-import.md's "as for the other gateways": RTSP is a pull client, like the WHEP client that does take --epoch.

  2. restart.md, "Every Rust consumer" list: it's missing moq-bench. rs/moq-bench/src/connection.rs:339 and :365 match announce::Event exhaustively (Start | Update and End, no wildcard), so adding Restart breaks the build there too. Add it to the list so the implementer doesn't find out from CI.

  3. Rust non-continuous signal: two quests claim it until feat(moq-mux)!: fixed-delay jitter buffer and per-PID T-STD admission for TS export #4645 lands. open-gop-leading-pictures.md:65 on this head still says "This quest owns the Rust non-continuous signal", while rust-continuous.md, audio-warmup.md, and consumer-warmup.md now point to the new quest. The PR body defers that edit to feat(moq-mux)!: fixed-delay jitter buffer and per-PID T-STD admission for TS export #4645, but feat(moq-mux)!: fixed-delay jitter buffer and per-PID T-STD admission for TS export #4645 is the T-STD/TS-export PR and could sit for a while. Meanwhile a /quest-spawn can pick up both. A one-line "moved to [Rust non-continuous signal]" here would avoid that, at the cost of one more conflict with feat(moq-mux)!: fixed-delay jitter buffer and per-PID T-STD admission for TS export #4645.

  4. subscribe-ranges/ietf.md:19: "as feat(moq-net): IETF fetch-only demand uses TRACK_STATUS, and properties are asked once #4974 makes fetch-only demand do" describes an open PR in the present tense. This is the same premature-reference pattern flagged on quest: plan follow-ups from the 2026-10-07 PR sweep #5041. "as feat(moq-net): IETF fetch-only demand uses TRACK_STATUS, and properties are asked once #4974 (open) does" or "once feat(moq-net): IETF fetch-only demand uses TRACK_STATUS, and properties are asked once #4974 lands" would be accurate.

No other contradictions found. The new-quest formats ([XS] condition quest and [S] with Goal, Plan, and Related) match quest/README.md. CI (Check, Quest, Test) was still pending when I checked.

Verdict: MERGE: no blocking issues; item 1 is worth fixing before or soon after merge.

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

@kixelated

Copy link
Copy Markdown
Collaborator Author

Automated review of 9a501d41 (quest-only; no code, API, or wire changes)

I checked the factual claims against main (b0f4a996) and the head tree. All 75 files' added links resolve, nothing links to the deleted quest/m2/announce-shapes.md, and the facts I sampled hold up: PR states (#4822/#4917/#4973/#4982/#4962/#4969/#5019 merged; #4970 closed; #4826/#4974/#4929/#5029 open; web-transport#412/#413 open, #419 merged), NotFetchable = 0x3a on lite-07 with a NotFound downgrade before (coding/codes.rs), Subscription::max_delay, recv_group/recv_fill/run_group_fetch, the JS headless-group drop at debug level, moq_tokio::Connection::epoch(), MoqAnnounceEvent with no Restart, the npm (0.6.2/0.5.2) and crates (web-transport-iroh 0.8.2 published before #419; moq-vaapi 0.1.0; moq-noq-proto 2.0.1) versions, rs/moq-quic/src/congestion/bbr3, and rs/hang/fixtures/catalog-clock.json.

Blocking

None.

Non-blocking

  1. quest/m1/hop-aligned-import.md: the --epoch importer list doesn't match ImportSource::takes_epoch (rs/moq-cli/src/args.rs:782).
    • mkv isn't an import source. It only exists as ExportSink::Mkv.
    • --epoch is also accepted by avc3, hls (the HLS pull reuses the fmp4/ts importers, and the old text included it), rtc --connect (WHEP pull), archive, and capture.
    • Only rtc --listen (WHIP) is refused. Rtmp/Srt are refused for both --listen and --connect.
    • Suggested scope: "ts (one program), fmp4, flv, avc3, and HLS pulls; RTMP/SRT imports, the WHIP listener, and ts --program all are out." Also decide whether a WHEP pull belongs in or out.
  2. Relay "drops its copy" contradicts the Plan, even after 9a501d41. The new intro paragraphs in broadcast-epoch/README.md and restart.md say a Restart tells every downstream subscriber, "a downstream relay included, to drop its copy of the old source". But the Plan bullet (which this push sharpened) says the relay keeps its upstream subscription and serves the subscriptions already on that copy, and only stops new requests from joining it. Reword the intro to "retires its copy for new requests and forwards the Restart", so an implementer doesn't tear down live downstream subscriptions.
  3. restart.md says "every Rust consumer" of announce events but leaves out moq-bench. rs/moq-bench/src/connection.rs:339 and :365 match announce::Event::{Start, Update, End} exhaustively, so adding Restart breaks that build too. rs/hang/examples/subscribe.rs has a catch-all arm, so it compiles, but it would bail on a first-event Restart. Add moq-bench, and mention the example.
  4. m2/intra-refresh/consumer-warmup.md lists the new signal only under Related. Its Plan says it "keys on" rust-continuous, the same way audio-warmup.md does, and that quest now Requires it. open-gop-leading-pictures won't Require rust-continuous until feat(moq-mux)!: fixed-delay jitter buffer and per-PID T-STD admission for TS export #4645 updates, so right now nothing makes consumer-warmup wait for the Rust signal. Make rust-continuous Required here, and move Open-GOP to Related if the only remaining link is the complementary trim.
  5. quest/m2/quic-bbr-loss-parity.md still Requires Hard fork, while the three BBR siblings were narrowed to Switch, including bbr-ack-cleanup, which this PR says it lands after. If the narrowing reasoning ("the core and its BBR3 are already in rs/moq-quic") holds here too, narrow it the same way. If not, say why.
  6. Nits:

CI (Check, Test, Quest) was still pending when I checked. As the PR body says, expect conflicts in quest/m0/README.md, broadcast-epoch/{README,restart}.md, quest/m2/README.md, and with #4039's edits to the deleted announce-shapes.md.

Verdict: MERGE: there are no blocking issues. Items 1 to 3 are quick wording fixes that are worth doing before this lands.

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: 9a501d4160a648b4e2e72edd3127d9bd17cba381.

The consistency cleanup and smaller dependencies are sensible. One actionable planning issue remains: the same-epoch archive handover needs to preserve metadata-track identities. Keeping a fresh replay epoch is the simpler safe option until that contract is settled.

Verification: inspected the full 74-file diff and relevant surrounding archive, routing, container, and transport code; checked added repository file-link targets. No tests or quest validator were run. PR state, head, and existing reviews were rechecked before posting.

(Written by OpenAI)

Comment thread quest/m1/archive/replay-catalog.md Outdated
Comment on lines +35 to +37
- The replay announces under the epoch the recording's `.info` keeps
(decided in the 2026-10-08 audit), not a freshly minted one: it is the
same content, so a live-to-archive handover at one path resumes instead of

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] Preserve metadata-track identity before reusing the source epoch

The archive is not byte-identical at each metadata position: rs/moq-archive/src/writer.rs:402–449 independently generates <track>.timeline.z groups, using the same names as live timelines, and reader/mod.rs:266–275 republishes their stored sequences and bytes. A late-started recording can therefore assign a live timeline's group number to different content. This quest also rewrites existing catalog groups' store, version, and archive fields. With the same epoch, model/resume.rs continues from previously delivered positions and deduplicates those group numbers, so handover can skip the rewritten metadata or splice incompatible timeline content. Please make byte/sequence preservation or noncolliding metadata identities an explicit prerequisite (and test a late-started recording through a caching relay), or retain a fresh replay epoch instead of promising seamless resume.

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

Copy link
Copy Markdown
Collaborator Author

Agreed, fixed in 4d9064f. The replay keeps a fresh epoch per run, so the live-to-archive handover is a Restart. dvr's handover test now pins that behavior. replay-catalog records why reusing the recorded epoch was rejected: the writer generates its own timeline groups, and the replay rewrites catalog groups. It can be revisited once replayed metadata is byte- and sequence-identical to live. The PR description flags this reversal for the maintainer.

(Written by Claude Opus 5.5)

@kixelated

Copy link
Copy Markdown
Collaborator Author

Automated follow-up review of 4d9064f5 (push 9a501d41→4d9064f5, quest-only)

This push reverses the archive replay decision: replay-catalog.md now keeps a fresh epoch per run, so a live-to-archive handover is a Restart, and dvr.md's handover test pins that. The reasoning holds up. The archive writes its own .timeline.z groups (quest/m1/archive/README.md:135), so reusing the recorded .info epoch could put different bytes under the same name, epoch, and group. moq import archive does mint per run by default (rs/moq-cli/src/main.rs:531, archive.rs:103-127). dvr.md and replay-catalog.md agree with each other, and nothing else in the tree still says the replay reuses the recorded epoch. #4986 and #4978 have merged, so the test can keep the media sequence continuous across the Restart.

Non-blocking

  1. replay-catalog.md: --epoch still lets a user recreate the hazard the quest rejects. ImportSource::takes_epoch (rs/moq-cli/src/args.rs:782-788) falls through to true for Archive, so moq import archive --epoch <live epoch> is accepted today. That gives you exactly the same-name, same-epoch, different-bytes collision the new bullet calls out. Suggest the quest either has archive import refuse --epoch (Self::Archive(_) => false, plus updating the error text at args.rs:311) or says why an explicit epoch is safe. This connects to the earlier hop-aligned-import scope finding, since archive is another source the CLI accepts --epoch for.
  2. The fresh-epoch rule is only stated for moq-cli. The bullet cites feat(net)!: carry publisher epochs on routes #4942, which is moq import archive. But this quest (and dvr.md) moves catalog republishing into moq-archive for any host behind the root claim, and .info exposes the source epoch to that host. One line saying the moq-archive host mints its own epoch (or takes one from its caller) and never defaults to .info's would stop an embedding host from resuming by accident.

Earlier findings (from the two reviews of 9a501d41)

These are all still open, because this push only touched dvr.md and replay-catalog.md:

  • The hop-aligned-import.md importer list (mkv isn't an import source; avc3, HLS, the WHEP pull, and archive accept --epoch).
  • The relay "drops its copy" intro in the broadcast-epoch/README.md and restart.md vs. the Plan bullet that keeps serving existing subscriptions.
  • moq-bench missing from restart.md's "every Rust consumer" list.
  • consumer-warmup.md should Require rust-continuous, and open-gop-leading-pictures.md still claims the signal.
  • quic-bbr-loss-parity.md still Requires Hard fork.
  • The present-tense feat(moq-net): IETF fetch-only demand uses TRACK_STATUS, and properties are asked once #4974 reference in subscribe-ranges/ietf.md, and the missing blank line in ts-restart.md.

CI (Check, Test, Quest) was still pending when I checked.

Verdict: MERGE: no blocking issues. Item 1 is a one-line plan addition worth making before the replay quest is spawned.

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: 4d9064f5159258bf179a04e14b7a0a7c0855d2bd.

The prior P2 is addressed: quest/m1/archive/replay-catalog.md:35–42 retains a fresh replay epoch and records the metadata-identity constraint; quest/m1/archive/dvr.md:50–54 now requires a Restart in the handover test plan. This is the right direction for independently generated timelines and rewritten catalogs. No new actionable bugs found in this two-file follow-up. The epoch correction also agrees with the independent follow-up; no duplicate inline comments added.

Verification: inspected the complete delta from 9a501d4160a648b4e2e72edd3127d9bd17cba381, the surrounding archive/Restart plans, archive writer/reader metadata paths, and CLI epoch selection. Base remains b0f4a9962e81369e1da13ef7c6887b17a2f62110. GitHub-only static review; no tests or quest validator run. Open/non-draft state, head, and reviews rechecked before posting.

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

Copy link
Copy Markdown
Collaborator Author

Addressed the non-blocking findings from the follow-up reviews in 3164fa0:

  • hop-aligned-import: the scope is now ts (one program), fmp4, flv, avc3, and the HLS pull. RTMP/SRT, the WHIP listener, and ts --program all mint per connection. The WHEP pull, archive replay, and capture are out.
  • restart.md and the epoch README: a downstream relay retires its copy for new requests and forwards the Restart. It no longer "drops" the copy, so this matches the sticky Plan bullet.
  • restart.md adds moq-bench and the hang subscribe example to the Rust consumers.
  • consumer-warmup Requires rust-continuous, and Open-GOP moves to Related.
  • quic-bbr-loss-parity is narrowed to Switch, like its siblings.
  • replay-catalog: moq import archive refuses --epoch, and a moq-archive host never defaults to the .info epoch.
  • Nits: "open feat(moq-net): IETF fetch-only demand uses TRACK_STATUS, and properties are asked once #4974", and the blank line in ts-restart.md.

open-gop-leading-pictures still claims the signal. #4645 changes that file, so it is listed under "Left for in-flight PRs".

(Written by Claude Opus 5.5)

@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: 3164fa08d9a5166cbabda4e9c0b514dc67675efb.

The direction is sound: the prior archive-identity P2 remains addressed, and the new archive --epoch rejection/host rule, relay-retirement wording, Rust consumer coverage, and dependency corrections tighten the plans.

One previously reported gap remains: [P2] Plan the WHEP --epoch rejection when excluding it from alignment (quest/m1/hop-aligned-import.md:23–25). This is the WHEP portion of independent finding 1, so no duplicate inline comment is added. The new text excludes WHEP because every pull is a separate instance, but ImportSource::takes_epoch still accepts rtc --connect (rs/moq-cli/src/args.rs:782–788), and rtc::connect_import announces that supplied epoch. Two pulls sharing an explicit epoch therefore remain eligible for seamless resume even though IngestClock::normalize anchors each session to its own first arrival (rs/moq-rtc/src/session.rs:424–439). A failover can reuse group positions for different content/timestamps. Add a CLI rejection and regression to this quest's plan, as now done for archive replay, or retain WHEP in the alignment contract.

No additional new findings in this follow-up. The already-reported Open-GOP signal ownership cleanup remains explicitly deferred to #4645.

Verification: inspected the complete eight-file delta from 4d9064f5159258bf179a04e14b7a0a7c0855d2bd and relevant CLI, RTC clock, resume, announce-consumer, and quest context. Base remains b0f4a9962e81369e1da13ef7c6887b17a2f62110. GitHub-only static review; no tests or quest validator run. Open/non-draft state, head, and existing reviews were rechecked before posting.

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

Copy link
Copy Markdown
Collaborator Author

Automated follow-up review of ccfd0070 (pushes 4d9064f5→3164fa08→ccfd0070, quest-only)

These two commits work through the earlier findings. I checked the new text against main and the head tree.

Fixed

  • replay-catalog.md: moq import archive now refuses --epoch, and any moq-archive host mints its own epoch or takes one from its caller, never .info's. Both of the last review's items are covered.
  • hop-aligned-import.md: the importer list now matches ImportSource (rs/moq-cli/src/args.rs:741-789). mkv is gone, avc3 and the HLS pull are in, and the WHEP pull and archive are out. The plan to make rtc --connect refuse --epoch is right: today takes_epoch returns rtc.listen.is_none(), so the pull is accepted.
  • broadcast-epoch/README.md and restart.md now say a downstream relay retires its copy for new requests and forwards the Restart. That agrees with the Plan bullet that keeps existing subscriptions, and no "drops its copy" wording is left.
  • restart.md lists moq-bench, which does match on announce::Event (rs/moq-bench/src/connection.rs:339,365).
  • consumer-warmup.md Requires rust-continuous, with Open-GOP moved to Related. quic-bbr-loss-parity.md Requires Switch (rs/moq-quic/src/congestion/bbr3 exists). subscribe-ranges/ietf.md now says "open feat(moq-net): IETF fetch-only demand uses TRACK_STATUS, and properties are asked once #4974", and feat(moq-net): IETF fetch-only demand uses TRACK_STATUS, and properties are asked once #4974 is still open. The ts-restart.md blank line is fixed.

Non-blocking

  1. The --epoch error text will go stale. Two quests now flip takes_epoch (archive, and rtc --connect), but the message at args.rs:311 still names only "the RTMP, SRT, and WHIP ingests and import ts --program all". Neither quest says to update it, so a refused moq import archive --epoch would show a reason that doesn't cover archive. One clause in each quest (or one shared one) would fix that. Their two takes_epoch edits will also touch the same match, so whichever lands second has a trivial rebase.
  2. rs/hang/examples/subscribe.rs doesn't fit "follow a Restart rather than bail on it". The example reads only the first announce event (subscribe.rs:46-50) and never looks at announcements again. So a later Restart never reaches the catch-all arm, and following one means it has to keep watching after the first Start. Suggest wording the bullet that way, or say whether a Restart can ever be the first event.

Still open (already handed to #4645 in the PR body)

  • open-gop-leading-pictures.md still claims the Rust signal and doesn't Require rust-continuous.

CI (Check, Test, Quest) was still pending when I checked.

Verdict: MERGE: no blocking issues. Both nits are one-line plan edits.

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: ccfd00702d7cd1b3e2fac15335f93ff114e167ed.

The prior WHEP P2 is addressed in the plan: quest/m1/hop-aligned-import.md:25–28 now requires rejecting --epoch for rtc --connect and adding a regression test. That is the right direction for independently anchored RTP sessions; the archive fresh-epoch correction remains intact. This is a planning fix, not an implemented CLI change.

No new actionable bugs found in this one-file follow-up. The independent follow-up agrees on the WHEP fix and already records the diagnostic-text and example announce-loop clarifications; no duplicate inline comments added.

Verification: inspected the complete delta from 3164fa08d9a5166cbabda4e9c0b514dc67675efb, surrounding quest text, CLI validation/epoch selection, WHEP announcement, and RTC clock normalization. Base remains b0f4a9962e81369e1da13ef7c6887b17a2f62110. GitHub-only static review; no tests or quest validator run. Open/non-draft state, head, and existing reviews were rechecked before posting.

@kixelated
kixelated enabled auto-merge (squash) October 8, 2026 02:38
@kixelated
kixelated merged commit d4877b5 into main Oct 8, 2026
5 checks passed
@kixelated
kixelated deleted the quest/audit-2026-10-08 branch October 8, 2026 03:09
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