Skip to content

Add draft-lcurley-moq-largest-group extension#19

Merged
kixelated merged 3 commits intomainfrom
latest-group
Mar 22, 2026
Merged

Add draft-lcurley-moq-largest-group extension#19
kixelated merged 3 commits intomainfrom
latest-group

Conversation

@kixelated
Copy link
Collaborator

Summary

  • Adds a new MoQ Transport extension defining a Largest Group (0x20) subscription filter type
  • Starts delivery from the first object of the publisher's most recent group, avoiding the complexity and drawbacks of the FETCH + SUBSCRIBE workaround
  • Includes SETUP option negotiation, IANA registrations for both the setup option and filter type

Test plan

  • make builds successfully with the new draft
  • Review rendered HTML output for correctness

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@coderabbitai
Copy link

coderabbitai bot commented Mar 22, 2026

Warning

Rate limit exceeded

@kixelated has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 11 minutes and 16 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a1a58e55-fd3e-4a6d-bc26-a12534829105

📥 Commits

Reviewing files that changed from the base of the PR and between 1fca142 and 76ecc1a.

📒 Files selected for processing (1)
  • draft-lcurley-moq-largest-group.md

Walkthrough

A new Internet‑Draft adds a MoQ Transport subscription filter "Largest Group" (Filter Type 0x20) and a SETUP Option LARGEST_GROUP (Option Key TBD1, Option Value Length 0). If a SUBSCRIBE with this filter is received without prior negotiation, the peer must close the session with PROTOCOL_VIOLATION. On a negotiated SUBSCRIBE, the publisher computes the start location as {Largest.Group, 0} (largest group known at processing time) and delivers from object 0 onward using normal open‑ended SUBSCRIBE semantics. Cache/eviction behavior is left to the publisher; Security and IANA registration sections are included.

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: adding a new MoQ Transport extension draft document for the Largest Group feature.
Description check ✅ Passed The description is well-related to the changeset, providing context about the Largest Group filter type, its purpose, and what was added including SETUP option negotiation and IANA registrations.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch latest-group
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch latest-group

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 and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@draft-lcurley-moq-largest-group.md`:
- Around line 94-101: Clarify that when handling a SUBSCRIBE with the Largest
Group filter and the publisher has no groups yet (i.e., Largest.Group is
undefined), the publisher must deterministically wait for the first group
instead of using an undefined value or returning ambiguous behavior: treat
Largest.Group as "first available group" and begin delivery from {Largest.Group,
0} once that group is created (and document that the SUBSCRIBE remains pending
until then); update the paragraph that defines the start location for the
Largest Group filter (the line referencing {Largest.Group, 0} and the term
Largest.Group) to include this waiting semantics and the explicit note that
implementations SHOULD keep the SUBSCRIBE pending until the first group exists.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 557c3bd6-9bbe-4a98-861c-fdd8126dbf1c

📥 Commits

Reviewing files that changed from the base of the PR and between dfeff06 and f21ae2b.

📒 Files selected for processing (1)
  • draft-lcurley-moq-largest-group.md

Comment on lines +94 to +101
When the publisher receives a SUBSCRIBE with the Largest Group filter, it computes the start location as:

~~~
{Largest.Group, 0}
~~~

Where `Largest.Group` is the group sequence number of the largest object known to the publisher at the time the SUBSCRIBE is processed.
Delivery begins from the first object (object 0) of that group.
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Define behavior when no group exists yet.

Line 100 defines Largest.Group from the largest known object, but this is undefined if the publisher has not published any object for that track yet. Please specify deterministic behavior for that case (e.g., wait for first group, or reject with a specific error), otherwise implementations may diverge.

Proposed spec text refinement
 When the publisher receives a SUBSCRIBE with the Largest Group filter, it computes the start location as:
@@
 Where `Largest.Group` is the group sequence number of the largest object known to the publisher at the time the SUBSCRIBE is processed.
 Delivery begins from the first object (object 0) of that group.
+If no object is known for the requested track at processing time, the publisher MUST
+define a deterministic fallback behavior (for example, defer delivery until the first
+group becomes available, consistent across implementations).
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
When the publisher receives a SUBSCRIBE with the Largest Group filter, it computes the start location as:
~~~
{Largest.Group, 0}
~~~
Where `Largest.Group` is the group sequence number of the largest object known to the publisher at the time the SUBSCRIBE is processed.
Delivery begins from the first object (object 0) of that group.
When the publisher receives a SUBSCRIBE with the Largest Group filter, it computes the start location as:
~~~
{Largest.Group, 0}
~~~
Where `Largest.Group` is the group sequence number of the largest object known to the publisher at the time the SUBSCRIBE is processed.
Delivery begins from the first object (object 0) of that group.
If no object is known for the requested track at processing time, the publisher MUST
define a deterministic fallback behavior (for example, defer delivery until the first
group becomes available, consistent across implementations).
🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 96-96: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


[warning] 96-96: Code block style
Expected: indented; Actual: fenced

(MD046, code-block-style)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@draft-lcurley-moq-largest-group.md` around lines 94 - 101, Clarify that when
handling a SUBSCRIBE with the Largest Group filter and the publisher has no
groups yet (i.e., Largest.Group is undefined), the publisher must
deterministically wait for the first group instead of using an undefined value
or returning ambiguous behavior: treat Largest.Group as "first available group"
and begin delivery from {Largest.Group, 0} once that group is created (and
document that the SUBSCRIBE remains pending until then); update the paragraph
that defines the start location for the Largest Group filter (the line
referencing {Largest.Group, 0} and the term Largest.Group) to include this
waiting semantics and the explicit note that implementations SHOULD keep the
SUBSCRIBE pending until the first group exists.

kixelated and others added 2 commits March 22, 2026 15:50
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

♻️ Duplicate comments (1)
draft-lcurley-moq-largest-group.md (1)

94-101: ⚠️ Potential issue | 🟠 Major

Define behavior when no group exists yet.

Line 100 defines Largest.Group from the largest known object, but this is undefined if the publisher has not published any object for that track yet. The specification should define deterministic behavior for this case (e.g., wait for the first group, or reject with a specific error code), otherwise implementations may diverge.

📝 Proposed specification text refinement
 Where `Largest.Group` is the group sequence number of the largest object known to the publisher at the time the SUBSCRIBE is processed.
 Delivery begins from the first object (object 0) of that group.
+If no object is known for the requested track at processing time, the publisher MUST
+wait until the first group becomes available and then begin delivery from {0, 0}.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@draft-lcurley-moq-largest-group.md` around lines 94 - 101, The spec must
define deterministic behavior when a SUBSCRIBE with the Largest Group filter is
received but the publisher has no groups yet (i.e., Largest.Group is undefined);
update the text around the start location "{Largest.Group, 0}" and the
Largest.Group definition to state a single chosen behavior (for example: treat
Largest.Group as the sequence number of the next group to be created and delay
delivery until that first group exists, or reject the SUBSCRIBE with a specified
error code such as "NoGroups" and explain retry semantics). Reference the
symbols SUBSCRIBE, Largest.Group, and the start location "{Largest.Group, 0}" in
the new text so implementers know whether to block until the first group or to
return the explicit error and how to handle subsequent subscriptions.
🧹 Nitpick comments (1)
draft-lcurley-moq-largest-group.md (1)

100-100: Clarify scope of "largest object known to the publisher".

For precision, consider specifying "largest object known to the publisher for the requested track" to avoid any ambiguity about whether this refers to the specific track being subscribed to versus the publisher's global state.

📝 Proposed clarification
-Where `Largest.Group` is the group sequence number of the largest object known to the publisher at the time the SUBSCRIBE is processed.
+Where `Largest.Group` is the group sequence number of the largest object known to the publisher for the requested track at the time the SUBSCRIBE is processed.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@draft-lcurley-moq-largest-group.md` at line 100, Clarify that "Largest.Group"
refers to the largest object known to the publisher for the specific track being
subscribed to: update the sentence containing "Where `Largest.Group` is the
group sequence number of the largest object known to the publisher at the time
the SUBSCRIBE is processed." to explicitly read something like "Where
`Largest.Group` is the group sequence number of the largest object known to the
publisher for the requested track at the time the SUBSCRIBE is processed," and
ensure any surrounding text or examples (references to SUBSCRIBE and publisher)
consistently use "requested track" or equivalent phrasing to avoid ambiguity.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@draft-lcurley-moq-largest-group.md`:
- Around line 94-101: The spec must define deterministic behavior when a
SUBSCRIBE with the Largest Group filter is received but the publisher has no
groups yet (i.e., Largest.Group is undefined); update the text around the start
location "{Largest.Group, 0}" and the Largest.Group definition to state a single
chosen behavior (for example: treat Largest.Group as the sequence number of the
next group to be created and delay delivery until that first group exists, or
reject the SUBSCRIBE with a specified error code such as "NoGroups" and explain
retry semantics). Reference the symbols SUBSCRIBE, Largest.Group, and the start
location "{Largest.Group, 0}" in the new text so implementers know whether to
block until the first group or to return the explicit error and how to handle
subsequent subscriptions.

---

Nitpick comments:
In `@draft-lcurley-moq-largest-group.md`:
- Line 100: Clarify that "Largest.Group" refers to the largest object known to
the publisher for the specific track being subscribed to: update the sentence
containing "Where `Largest.Group` is the group sequence number of the largest
object known to the publisher at the time the SUBSCRIBE is processed." to
explicitly read something like "Where `Largest.Group` is the group sequence
number of the largest object known to the publisher for the requested track at
the time the SUBSCRIBE is processed," and ensure any surrounding text or
examples (references to SUBSCRIBE and publisher) consistently use "requested
track" or equivalent phrasing to avoid ambiguity.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: b762fee6-2d91-4288-ac5c-c995d3cbfbaf

📥 Commits

Reviewing files that changed from the base of the PR and between f21ae2b and 1fca142.

📒 Files selected for processing (1)
  • draft-lcurley-moq-largest-group.md

@kixelated kixelated merged commit 9aa095e into main Mar 22, 2026
2 checks passed
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