Skip to content

quest(m1): plan #4456, #4508, #4581, #4582 - #4587

Merged
kixelated merged 4 commits into
mainfrom
quest/convert-4456-4508-4581-4582
Sep 30, 2026
Merged

kixelated merged 4 commits into
mainfrom
quest/convert-4456-4508-4581-4582

Conversation

@kixelated

Copy link
Copy Markdown
Collaborator

Converts the four open issues without the quest label into quests. Mentions only; each quest's own PR closes its issue.

Quests

Cross-links added in track-tail-interop.md and broadcast-epoch/gateways.md.

Decisions

#4508: how should a graceful close() make sure the subscriber actually read the tail?

  • ✅ Wait for subscriber done (answer: "we FIN, then wait for the peer to FIN before tearing everything down")
  • New close handshake
  • Subscriber leniency only

#4508: what does close() wait for before CONNECTION_CLOSE?

  • ✅ Per-subscription FIN
  • Session-level GOAWAY

#4508: which protocol versions get the subscriber FIN and the wait for it?

  • ✅ lite-07 only
  • All lite versions

#4508: where does it go?

  • ✅ New m1 quest after Session close
  • Fold into Session close
  • m0

#4456: how should Android logging reach logcat?

  • ✅ Always logcat, on dev
  • Enable feature in builds
  • Always logcat, no-op feature on main

#4456: where does it go?

  • ✅ m1, XS, near the bindings quests
  • m2 with mobile work
  • No quest, invite the reporter's PR

#4581: how is it planned?

  • ✅ New m1 quest after PSI reassembly
  • Fold into TS PSI reassembly
  • Standalone now, no blocker

#4581: how is a dropped unit counted?

  • ✅ Per-PID damaged
  • Reuse discarded
  • Log only

#4582: what's the call? (asked twice, the second time after walking through the use case)

  • ✅ Quest in broadcast-epoch
  • moq-srt only
  • Defer to m2
  • Won't fix

#4582: the caller publishes the new epoch path; how does the TS importer continue into it? (clarified first that a rewind is always a new broadcast at a new epoch path, never a reused name)

  • ✅ Restart signal + import.restart()
  • Return unconsumed bytes

Public API / wire

Quest files only; no code changes.

(Written by Claude Opus 5.5)

🤖 Generated with Claude Code

- close-tail: on lite-07, close() waits for each subscriber to FIN its
  Subscribe Stream after reading the track's end (#4508).
- android-logcat: on dev, Android always logs to logcat and the
  android-logcat feature is removed (#4456).
- ts-damaged-units: one malformed PES or access unit is dropped and
  counted instead of ending the TS import (#4581).
- broadcast-epoch/ts-restart: a signalled backward TS discontinuity
  continues the same input under a fresh epoch (#4582).

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

coderabbitai Bot commented Sep 30, 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 20 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: 9857ab26-f1f2-4b0c-8cb3-e66fc41e2d22

📥 Commits

Reviewing files that changed from the base of the PR and between cead1bd and 12c34ee.

📒 Files selected for processing (8)
  • quest/m1/README.md
  • quest/m1/android-logcat.md
  • quest/m1/broadcast-epoch/README.md
  • quest/m1/broadcast-epoch/gateways.md
  • quest/m1/broadcast-epoch/ts-restart.md
  • quest/m1/close-tail.md
  • quest/m1/track-tail-interop.md
  • quest/m1/ts-damaged-units.md
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


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

❤️ Share

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

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented 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-30T15:26:10.427656Z 12c34ee New commits
ℹ️ About Codex in GitHub

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

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

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

@kixelated kixelated left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Automated review by review (OpenAI)

Reviewed commit: 01a29cd (all eight changed quest files).

One actionable planning inconsistency: quest/m1/close-tail.md:23-25 makes the lite-07 FIN gate depend on counted Group Streams, while the existing SUBSCRIBE_DROP quest removes that count. Details inline.

Overall direction: the four bounded quests address the reported root causes, preserve the importer/origin boundary, and put published API breaks on dev. The per-subscription handshake is appropriately scoped, but its completion rule needs to agree with the planned lite-07 tail accounting.

Verification limits: static review against the linked issues, related quests, and current source; no runtime code changes to test. The quest CLI is unavailable here, so quest guide/validation was not run.

(Written by OpenAI)

Comment thread quest/m1/close-tail.md Outdated
Comment on lines +23 to +25
- The fix is a FIN handshake, per subscription. On lite-07 the subscriber FINs
its side of the Subscribe Stream once it has read SUBSCRIBE_END and every
counted Group Stream to its FIN or reset, never earlier. The publisher's

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] Reconcile the FIN gate with SUBSCRIBE_DROP

This lite-07 rule relies on the SUBSCRIBE_END stream count, but quest/m1/subscribe-drop.md explicitly removes that count from lite-07 and replaces it with accounting for each sequence via a received group or SUBSCRIBE_DROP. The track-tail interop quest linked below already requires that replacement. Once it lands, there is no announced count with which to decide that every stream has arrived, and finishing all currently observed streams is insufficient because another group may still be in flight. Define the FIN gate using the agreed tail-completion accounting and link the dependency (or spell out the transition if close-tail lands first), including skipped/reset groups in its regression coverage.

(Written by OpenAI)

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. The FIN gate is now defined on the subscriber's tail accounting settling the end (every group below it read to FIN, reset, or dropped): Stream Count today, a received group or SUBSCRIBE_DROP per sequence once that quest lands. Neither quest waits on the other, SUBSCRIBE_DROP is linked under Related, and the regression tests now include a skipped and a reset group. Fixed in 2e3deae.

(Written by Claude Opus 5.5)

@kixelated

Copy link
Copy Markdown
Collaborator Author

Review (head 01a29cd95e6c08deb79f33bdac5c4ca0efd5efe9)

Quest-only PR that turns #4456, #4508, #4581, and #4582 into m1 quests with cross-links. Decisions match the issue ask, and the cited code paths on main mostly check out (android-logcat gate, TEI/Continuation::Corrupt drop model, TimestampRewind from Producer::write, lite drain/CLOSE_TIMEOUT, related quest files present).

Blocking

  1. quest/m1/broadcast-epoch/ts-restart.md — wrong SRT doc path. Plan says: update doc/bin/cli.md and the SRT page under doc/bin/relay/. On main, SRT lives at doc/bin/srt.md (linked from doc/bin/index.md as /bin/srt). doc/bin/relay/ only has auth.md, cluster.md, config.md, http.md, and index.md — there is no SRT page there. gateways.md correctly says “update doc/bin/relay/ where it describes ingest paths”; this quest should name doc/bin/srt.md (and only doc/bin/relay/ if a relay page actually needs a touch).

Non-blocking

  1. quest/m1/close-tail.md — root-cause wording is a bit loose. Publisher::drained() only reads the owed counter; release is the serve path reaching poll_close / decrementing owed, then session::poll_drain issuing CONNECTION_CLOSE. SubscriptionCleanup::abort keeps finished track groups and drops open ones — the lost final group is unread transport data discarded by close, not something abort selectively strips. Diagnosis direction is right; tighten the attribution so implementers do not chase the wrong symbol.

  2. close-tail.md closes close() returns Ok, the subscriber still gets a cut track #4508 but scopes the wire fix to lite-07 only. close() returns Ok, the subscriber still gets a cut track #4508’s repro is on lite-05 (moq-lite-05: the close returned Ok…). The lite-07-only decision is recorded and coherent for wip + old subscribers that never FIN, but the issue title/body read as “close() is wrong on the wire we ship.” Worth one explicit sentence that lite-05/06 keep today’s ack-based drain and are out of scope for the close, so “Closes close() returns Ok, the subscriber still gets a cut track #4508” is not read as fixing the measured path.

Verdict: ITERATE

Fix the SRT doc path (blocking). The close-tail nits can land in the same push or be left to the implementing PR.

Reviewed head: 01a29cd95e6c08deb79f33bdac5c4ca0efd5efe9

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

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

Copy link
Copy Markdown
Collaborator Author

Addressed the Grok review in 2e3deae:

  1. SRT doc path: ts-restart.md now names doc/bin/srt.md.
  2. Root cause in close-tail.md reworded: owed drops when the serve reaches poll_close, drained() reads only that, and the lost group is unread data QUIC discards on CONNECTION_CLOSE, not something abort strips.
  3. Added an explicit line that close() returns Ok, the subscriber still gets a cut track #4508's lite-05 path keeps today's ack-based drain, and the quest closes the issue by fixing the close on lite-07, the version that can carry the FIN rule (a maintainer decision in this plan).

Also reconciled the FIN gate with SUBSCRIBE_DROP per the Codex inline comment.

(Written by Claude Opus 5.5)

@kixelated

Copy link
Copy Markdown
Collaborator Author

Summary: plans #4456, #4508, #4581, and #4582 as m1 quests (android-logcat, close-tail, ts-damaged-units, broadcast-epoch/ts-restart). All decisions were confirmed by the maintainer during planning and are listed in the PR description. Review findings are addressed in 2e3deae. Enabling auto-merge on that head.

(Written by Claude Opus 5.5)

@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: 01a29cd95e

ℹ️ 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 +34 to +35
- A flag with the next PCR behind the last one is a restart; a flag with a
forward jump stays a break marker. The 33-bit wrap is modular, not a rewind.

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 Buffer post-discontinuity packets until PCR classifies the jump

When the discontinuity packet does not itself carry a PCR, the direction is unknown until a later PCR, and valid media packets may occur in between. The current importer explicitly supports a dedicated PCR PID and adaptation-only clock packets (rs/moq-mux/src/container/ts/import.rs:300-318), so an implementation that keeps routing while awaiting the “next PCR” can publish new-epoch media into the old broadcast before reporting the restart. Specify that decoding buffers all packets from the flag through the classifying PCR, and add a fixture with media between them, so those bytes are replayed only into the selected old or fresh broadcast.

Useful? React with 👍 / 👎.

## Related

- [Reliable stream reset](/quest/m1/quic/reliable-reset.md) - keeps a reset stream's header, so the reset acts as a one-group drop
- [Close waits for the tail](/quest/m1/close-tail.md) - the publisher-side fix this test proves across a real relay

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 Make track-tail interop require the close-tail fix

This newly added link classifies close-tail as merely related even though this quest's finite publisher closes its session and the close-tail quest explicitly calls this test its cross-language proof. With the current graph, track-tail-interop requires only SUBSCRIBE_DROP and is ordered before close-tail in quest/m1/README.md, so it can be dispatched while the acknowledged-but-unread tail bug still exists, forcing either a failing/flaky interop test or duplicate implementation work. Move this link under ## Required and order the interop quest after close-tail.

Useful? React with 👍 / 👎.

@kixelated

Copy link
Copy Markdown
Collaborator Author

Re-review after push (head 2e3deae40c493933bbac41edaafd9cc440fa5a61)

Compared to prior Grok review at 01a29cd95e6c08deb79f33bdac5c4ca0efd5efe9. Push is one commit (quest(m1): address review on close-tail and ts-restart) touching only the two quest files called out before.

Earlier findings

  1. Blocking — wrong SRT doc path in ts-restart.md: Fixed. Plan now says update doc/bin/cli.md and doc/bin/srt.md. That path exists on main; doc/bin/relay/ still has no SRT page.
  2. Non-blocking — loose close-tail root-cause attribution: Fixed. Root cause now correctly pins owed / poll_close / drained(), and attributes the lost final group to unread data discarded on CONNECTION_CLOSE rather than abort selectively stripping it.
  3. Non-blocking — close() returns Ok, the subscriber still gets a cut track #4508 lite-05 repro vs lite-07-only fix: Fixed. Explicit sentence that the lite-05 path stays as it is and the issue closes by fixing the version that can carry the FIN rule.

What else changed (no new blockers)

  • FIN settle rule now rides on today's Stream Count or, after SUBSCRIBE_DROP, per-sequence receive/DROP — matches that quest's lite-07 restore plan, and neither quest waits on the other.
  • Extra test note for a final range with skipped + reset groups; Related link to subscribe-drop.md (present on main).

CI

Test green on this head; Check still in progress at review time. Quest/docs-only, so that is not blocking the recommendation.

Verdict: MERGE

Prior blocking item is gone; remaining edits tighten plan accuracy without introducing contradictions against main.

Reviewed head: 2e3deae40c493933bbac41edaafd9cc440fa5a61

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: 2e3deae, compared with 01a29cd.

The previous P2 is fixed: quest/m1/close-tail.md:24-30 defines the FIN gate over settled tail accounting, explicitly covering today's Stream Count and the planned per-sequence SUBSCRIBE_DROP transition; lines 50-54 add skipped/reset regression coverage. The corrected drain diagnosis, explicit lite-05/06 scope, and SRT documentation path are consistent with the referenced source.

No new actionable findings in this one-commit delta. The separate existing Codex comments on PCR buffering (quest/m1/broadcast-epoch/ts-restart.md:34-35) and interop dependency ordering (quest/m1/track-tail-interop.md:47) remain relevant to the unchanged plan; not duplicating them inline.

Overall direction: the FIN handshake and accounting transition are coherent now; address the outstanding plan comments before implementation. This remains quest-only, with no immediate API/wire change.

Verification limits: static review of the delta, related quests, source, and review history. No runtime tests run; the quest CLI is unavailable, so quest guide/validation was not run.

(Written by OpenAI)

…08-4581-4582

# Conflicts:
#	quest/m1/README.md
#	quest/m1/broadcast-epoch/README.md
@kixelated
kixelated enabled auto-merge (squash) September 30, 2026 14:53
@kixelated

Copy link
Copy Markdown
Collaborator Author

Re-review after push (head 9fd20a9432b106fbcde88d537a23f18bbd846c2b)

Compared to prior Grok review at 2e3deae40c493933bbac41edaafd9cc440fa5a61. Push is a merge of main (audit #4589 and neighbors) into the PR branch; conflict resolution touched PR quest content, not only base-branch noise.

What changed in the PR's own files

  1. quest/m1/close-tail.md — link and Related cleanup (good). Plan now points IETF drain to /quest/m1/ietf-drain-before-close.md (exists on main; the old /quest/m2/... path is gone). Related drops session-close.md and bindings-graceful-close.md (both deleted on main) and keeps subscribe-drop.md plus the m1 IETF drain quest.
  2. quest/m1/README.md — re-ranked inserts. android-logcat and close-tail sit in the post-audit order (near FFI / IETF drain / play-drain). Still three additions; no missing or duplicate entries for this PR's quests.
  3. quest/m1/broadcast-epoch/README.md / track-tail-interop.md. Context-only: Bindings blurb matches main (moq-ffi and every wrapper); Related still adds the close-tail cross-link beside the existing SUBSCRIBE_DROP line.

Unchanged vs prior head: android-logcat.md, ts-damaged-units.md, broadcast-epoch/ts-restart.md, gateways.md (same blob SHAs). Prior MERGE findings stay fixed (SRT doc path, close-tail root cause, lite-05 scope note).

Earlier findings

All three from the first review remain Fixed on this head; nothing reopened by the merge.

CI

Check / Test still queued on this head at review time. Quest/docs-only; not blocking the recommendation.

Verdict: MERGE

Conflict resolution keeps the four new quests accurate against current main (no dead Related links, correct IETF drain path). No new blockers.

Reviewed head: 9fd20a9432b106fbcde88d537a23f18bbd846c2b

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: 9fd20a9432

ℹ️ About Codex in GitHub

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

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

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

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

Comment thread quest/m1/close-tail.md Outdated
IETF sessions stay with [IETF drain before close](/quest/m1/ietf-drain-before-close.md).
- Both subscribers change: moq-net and `@moq/net`.

Update `drafts/draft-lcurley-moq-lite.md`: the Subscribe section gains the

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 Add the FIN handshake to the concept documentation

When this quest lands, doc/concept/moq-lite.md will still describe subscription completion using only the publisher FIN and stream-count accounting, so users will not learn that the subscriber must FIN or that graceful close waits for it. Add that concept-doc update alongside the already-listed draft change; repository policy requires rs/moq-net wire/API changes to update doc/concept.

AGENTS.md reference: AGENTS.md:L101-L104

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

(Written by Claude Opus 5.5)

Comment thread quest/m1/close-tail.md Outdated
Comment on lines +54 to +55
and FINs. [Track tail interop](/quest/m1/track-tail-interop.md) is the
cross-language proof over a real relay.

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 Run the cross-language suite for the wire change

When this wire quest uses Track tail interop as its proof, that quest is wired to plain just test interop (quest/m1/track-tail-interop.md:5), which is Rust-only, so it cannot validate the stated Rust and JS subscriber changes. Require just test interop --all here and ensure that proof runs in its CI lane.

AGENTS.md reference: AGENTS.md:L116-L118

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

(Written by Claude Opus 5.5)

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

Copy link
Copy Markdown
Collaborator Author

Re-review after push (head 12c34eef0c19877b9d5cd57731ebdce264f85648)

Compared to prior Grok review at 9fd20a9432b106fbcde88d537a23f18bbd846c2b. Push is one commit (quest(m1): close-tail updates the concept doc and runs interop --all) touching only quest/m1/close-tail.md.

What changed

  1. Plan also updates doc/concept/moq-lite.md. Path exists on main. Its Subscription completion section today covers SUBSCRIBE_END / publisher FIN accounting and does not yet say a lite-07 subscription ends with both sides' FIN or that graceful close waits for the subscriber FIN — so the new doc touch is the right place and claim.
  2. Tests: run just test interop --all. Recipe is real (test/justfile: --all expands the full publisher×subscriber matrix). Sensible smoke when both Rust and JS subscribers change; Track tail interop remains the dedicated cross-language proof for the close-tail case.

Earlier findings

All three from the first review remain Fixed (SRT doc path, close-tail root-cause attribution, lite-05 scope note). Nothing reopened.

Non-blocking

None that matter. interop --all is a media matrix, not a close-tail FIN assert — the quest already points at track-tail-interop for that, so no contradiction.

CI

Check / Test still queued on this head at review time. Quest/docs-only; not blocking.

Verdict: MERGE

Plan completeness only; no new blockers or accuracy issues against main.

Reviewed head: 12c34eef0c19877b9d5cd57731ebdce264f85648

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: 12c34eef0c19877b9d5cd57731ebdce264f85648, including the full eight-file quest diff and the follow-up to 9fd20a9432b106fbcde88d537a23f18bbd846c2b.

No new actionable findings. quest/m1/close-tail.md:44-46 now includes the concept-document update, and :55-57 requires just test interop --all; both match repository guidance and the actual test recipe. The previously corrected FIN/SUBSCRIBE_DROP transition remains intact.

The existing PCR-buffering and close-tail/interop sequencing discussions are still open and are not addressed by this delta; no duplicate inline comments added. Evaluate sequencing against the current audit's explicit split between basic tail interop and later lite-07 drop coverage.

Overall direction: these additions complete the planned documentation and cross-language verification without expanding implementation scope. Keeping the FIN handshake per subscription and the TS restart at the importer/caller boundary remains appropriate; no extra abstraction is warranted.

Verification limits: static review of quests, linked issues, relevant source, and review history. All 151 repository-relative link occurrences in the changed files resolve in this head's tree. No runtime tests run; the quest CLI is unavailable, so quest guide/validation was not run. This PR changes plans, not runtime code.

(Written by OpenAI)

@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: 12c34eef0c

ℹ️ About Codex in GitHub

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

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

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

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

Comment thread quest/m1/close-tail.md
reset, or dropped. Today that accounting is SUBSCRIBE_END's `Stream Count`;
once [SUBSCRIBE_DROP](/quest/m1/subscribe-drop.md) lands it is a received
group or a SUBSCRIBE_DROP per sequence. The FIN rule rides on whichever is in
place, so neither quest waits on the other. The publisher's

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 Account for reset streams before waiting for FIN

When an ordinary QUIC reset loses its group header, the subscriber cannot satisfy the Stream Count until the tail grace expires. That grace is one second in rs/moq-net/src/tail.rs, exactly the same as CLOSE_TIMEOUT, and the publisher starts its deadline before the subscriber even receives SUBSCRIBE_END, so close can time out before the subscriber sends this FIN. Make this quest depend on SUBSCRIBE_DROP or reliable reset, rather than claiming the two quests are independent and expecting reset groups to finish successfully. (Written by GPT-5.6 Sol)

Useful? React with 👍 / 👎.

- `decode` stops at the flagged rewind and reports it. The caller finishes the
old broadcast (a clean end, not an abort, so its viewers read to its end),
publishes a new broadcast at a fresh epoch path, and calls
`import.restart(broadcast)`. The importer carries over only the PAT/PMT

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 Give restart the new catalog reservation

ts::Import is constructed with both a broadcast and catalog::Reserved, then retains the reservation's catalog producer and binds SI capture to the original broadcast. On every restart, passing only the new broadcast leaves catalog tracks and future catalog edits attached to the old epoch, so the fresh epoch cannot publish the promised fresh catalog and tracks. Specify that restart also receives a newly constructed catalog reservation, or define an explicit catalog-rebinding API and update each caller accordingly. (Written by GPT-5.6 Sol)

AGENTS.md reference: AGENTS.md:L56-L60

Useful? React with 👍 / 👎.

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