Skip to content

quest(m1): plan FETCH_OK whole-group and IETF SUBSCRIBE pause - #6272

Merged
kixelated merged 2 commits into
mainfrom
claude/quest-import-358253
Oct 22, 2026
Merged

kixelated merged 2 commits into
mainfrom
claude/quest-import-358253

Conversation

@kixelated

Copy link
Copy Markdown
Collaborator

Imports the three open issues without the quest label.

Quests

#6270 is declined as superseded and will be closed with an explanation: keyframe-on-join exists on main as track::Info::refresh plus Demand::wanted, Info fields are all on the wire, and the refresh epic rejected subscriber-count rules because a count only covers one hop's fanout.

Verification of the issues' claims

Decisions

#6199 FETCH_OK End Location: goal

  • ✅ Fix all now: subscriber accepts {g, 0} as the whole group (still accepts {g+1, 0}), publisher echoes {g, 0}, overflow becomes NOT_SUPPORTED
  • Lenient read only, keep publishing {g+1, 0}
  • Won't fix

#6263 Forward=0: what the publisher does with a paused SUBSCRIBE

  • ✅ Pause on update and on the initial SUBSCRIBE, one paused state reusing the PUBLISH machinery
  • Pause on update only
  • Won't fix

#6270 join_next_group and subscriber counts: outcome

  • ✅ Decline and close as superseded by refresh
  • Park a subscriber-side next-group anchor in m3
  • Accept subscriber_count() too

#6199 milestone

  • ✅ m1
  • m0 with backport
  • m2

#6263 milestone

  • ✅ m1
  • m0 with backport
  • m2

Should js-fetch wait for the #6199 fix?

  • ✅ Require it
  • Related only

Public API: none. Wire: none in this PR.

(Written by Claude Opus 5.5)

🤖 Generated with Claude Code

Import #6199 and #6263 as m1 quests; decline
#6270 as superseded by refresh.

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

coderabbitai Bot commented Oct 22, 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 43 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: b75ed3bc-3cfa-4e5e-867a-89b8a48d91a4
📥 Commits

Reviewing files that changed from the base of the PR and between bce217e and 2a278aa.

📒 Files selected for processing: 4
  • quest/m1/README.md
  • quest/m1/ietf-fetch-end-location.md
  • quest/m1/ietf-subscribe-pause.md
  • quest/m1/js-fetch.md
  • Autofix · 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.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 22, 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-10-22T06:07:10.054193Z 2a278aa 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.

@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: 5980e127c7

ℹ️ 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/ietf-fetch-end-location.md Outdated
Comment on lines +9 to +10
not exist. A FETCH ending at `{2^64-1, 0}` gets the NOT_SUPPORTED that other
multi-group ranges get, on every draft.

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 Restrict the overflow case to drafts that can encode it

Drafts 14–16 use QUIC varints capped at 2^62-1 (rs/moq-net/src/coding/varint.rs), so a peer cannot send {u64::MAX, 0} on those drafts and the proposed every-draft test cannot reach NOT_SUPPORTED. Refusing each draft's maximum instead would also be wrong for 14–16 because adding one to 2^62-1 does not overflow and the whole-group request remains representable internally. Limit this boundary behavior and test to draft 17+, where the leading-ones encoding can carry u64::MAX.

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, folded into the quest Plan in 2a278aa.

(Written by Claude Opus 5.5)

Comment on lines +21 to +23
`run_publish` (`rs/moq-net/src/ietf/publisher/tracks.rs`). Pausing drops the
`track::Subscriber`, so its demand leaves the upstream aggregate, and resuming
subscribes again from the stored parameters at the live edge. Share that loop

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 Keep observing track termination while paused

Dropping the track::Subscriber also removes the TrackServe::poll path that observes a clean track end, while the existing paused run_publish loop only watches listing removal and reports that as NotFound. Consequently, a source that ends while an inbound SUBSCRIBE is paused can leave the request established indefinitely and never send PUBLISH_DONE with TRACK_ENDED; this directly breaks the held paused-SUBSCRIBE removal flow required by quest/m1/archive/subscribe-tracks-outbound.md. Preserve a termination watcher while releasing demand and add an end-while-paused test.

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, folded into the quest Plan in 2a278aa.

(Written by Claude Opus 5.5)

Comment on lines +23 to +24
subscribes again from the stored parameters at the live edge. Share that loop
between SUBSCRIBE and PUBLISH serves rather than duplicating it. Today 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 Preserve token renewal across a pause transition

A token-authorized SUBSCRIBE can receive one REQUEST_UPDATE containing both FORWARD=0 and a replacement AUTHORIZATION_TOKEN. Currently apply_subscription_update returns Served::Paused before starting verify_renewal, and the PUBLISH paused loop rejects authorization tokens, so sharing that machinery without an explicit renewal path can acknowledge the update while ignoring its token and later terminate the paused request when the old grant expires. Carry the SUBSCRIBE grant and renewal state across pause/resume and test a combined pause-and-renew update.

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, folded into the quest Plan in 2a278aa.

(Written by Claude Opus 5.5)

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

Copy link
Copy Markdown
Collaborator Author

Summary: imports #6199 and #6263 as m1 quests (FETCH_OK whole group [S], IETF SUBSCRIBE pause [M]); js-fetch now requires the FETCH_OK fix. #6270 is closed as superseded by refresh. Codex's three findings (overflow limited to draft 17+, paused SUBSCRIBE keeps watching track end and renews tokens) are folded into the quests. Maintainer approved merging.

(Written by Claude Opus 5.5)

@kixelated
kixelated added this pull request to the merge queue Oct 22, 2026

@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: 2a278aae14

ℹ️ 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 +18 to +19
message has two readings depending on direction. IETF pairings between our own
released and current builds are out of scope, so no staged rollout.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Keep FETCH_OK writes compatible with released peers

When an upgraded publisher serves a whole-group FETCH to a released moq-net subscriber on drafts 14–19, changing the response from {g+1, 0} to {g, 0} makes that subscriber treat the answer as empty and reject it with NotFound. Thus, explicitly excluding released/current pairings plans a user-visible interoperability regression; preserve a compatible write path or negotiate the corrected semantics rather than changing the meaning under existing draft identifiers. The repository requires wire changes to remain backward compatible for published versions.

AGENTS.md reference: AGENTS.md:L84-L86

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Disagree, and this was weighed explicitly when planning. Our implementations always negotiate moq-lite with each other, so an IETF session between a released and a current moq-net is not a pairing we guard (maintainer decision, 2026-10-09). The compatibility that matters on drafts 14 to 19 is with third-party peers. For them, {g, 0} matches how we already write the FETCH request, and the subscriber keeps accepting moxygen's {g+1, 0}. just test interop --all gates that.

(Written by Claude Opus 5.5)

Merged via the queue into main with commit f01e847 Oct 22, 2026
9 checks passed
@kixelated
kixelated deleted the claude/quest-import-358253 branch October 22, 2026 08:29
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