Skip to content

moq-lite: add Path Setup Parameter for URI-less transports#28

Merged
kixelated merged 1 commit into
mainfrom
claude/thirsty-spence-98309b
Jun 9, 2026
Merged

moq-lite: add Path Setup Parameter for URI-less transports#28
kixelated merged 1 commit into
mainfrom
claude/thirsty-spence-98309b

Conversation

@kixelated

Copy link
Copy Markdown
Collaborator

What

Adds a Path Setup Parameter (0x2) to moq-lite, letting a client convey the request path it wants to reach (origin / relay / virtual host) at connection setup. Modeled on the PATH parameter from draft-ietf-moq-transport-18.

Why

Two of moq-lite's four transport bindings — bare QUIC (binding 1) and Qmux-over-TCP/TLS (binding 3) — negotiate only an ALPN token and have no request URI. Without this parameter, a client on those transports has no way to indicate which path it wants, so a server cannot route the session before broadcasts are exchanged. The URI-bearing bindings (WebTransport's CONNECT path, WebSocket's request URI) already carry it in their handshake.

Details

  • New parameter in the Setup Parameter registry: 0x2 | Path | Path (s).
  • Value is a non-empty UTF-8 URI path beginning with / ([RFC3986], added as a normative reference).
  • Client-only. SETUP is bidirectional in moq-lite, so the asymmetry is stated explicitly: a server MUST NOT send it; a client that receives one closes with PROTOCOL_VIOLATION.
  • Required on bindings 1 and 3; forbidden on bindings 2 and 4 (which carry the path in their handshake URI) — a server receiving it there closes with PROTOCOL_VIOLATION.
  • Empty/malformed path → PROTOCOL_VIOLATION; unrecognized/unsupported path → session close. Uses moq-lite's existing generic error handling rather than introducing dedicated INVALID_PATH/MALFORMED_PATH codes.
  • Relays MUST NOT forward it (per-hop, like other negotiated capabilities).
  • Pointer added in the Session section.

Reviewer notes

  • The original request was "native QUIC only," but the underlying reason PATH exists ("no handshake URI") applies equally to Qmux-over-TCP/TLS. Scope was deliberately extended to both URI-less bindings (1 and 3) so TCP/TLS sessions aren't left unable to specify a path.
  • Spec/doc change only — not built locally (requires the i-d-template toolchain).

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Jun 9, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@kixelated, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 55 minutes and 40 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, 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 include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 85072db1-3daa-4696-93fb-3cedbeb2543b

📥 Commits

Reviewing files that changed from the base of the PR and between 9bb3b3c and aac5801.

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

Walkthrough

This PR updates the MOQ Lite protocol specification to support request path negotiation on ALPN-only bindings. It adds RFC3986 as a normative reference, clarifies that ALPN bindings lack a request URI and must receive the path via a new SETUP parameter, defines the Path parameter (0x2) in the SETUP table, and provides comprehensive specification of the parameter's format (non-empty UTF-8 URI path starting with /), usage requirements (exactly once on ALPN bindings, forbidden on others), and relay restrictions.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title directly and accurately summarizes the main change: introducing a Path Setup Parameter for transports (QUIC and Qmux-over-TCP/TLS) that lack a request URI in their handshake.
Description check ✅ Passed The description thoroughly explains what is being added (Path parameter 0x2), why it is needed (URI-less transports cannot convey path), how it works, and relevant implementation details that align with the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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

✨ Finishing Touches
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch claude/thirsty-spence-98309b

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.

@coderabbitai coderabbitai 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.

🧹 Nitpick comments (1)
draft-lcurley-moq-lite.md (1)

618-631: ⚡ Quick win

Clarify capability wording to avoid normative ambiguity.

This section says the Path Parameter is “not a capability” (Line 618) but then describes relay behavior “like every other negotiated capability” (Line 630). Please align wording so it’s consistently treated as per-hop setup metadata, not a negotiated capability.

✏️ Suggested wording tweak
-The Path Parameter carries the request path the client wishes to reach, equivalent to the path component of a moq-lite URI.
+The Path Parameter carries the request path the client wishes to reach, equivalent to the path component of a moq-lite URI.
@@
-Unlike the other Setup Parameters it is not a capability — it is connection metadata that rides along in SETUP because that is the first client-to-server message of the session.
+Unlike capability-style Setup Parameters, Path is connection metadata carried in SETUP because that is the first client-to-server message of the session.
@@
-A relay MUST NOT forward the Path Parameter; like every other negotiated capability it applies only to this hop (see [Session](`#session`)).
+A relay MUST NOT forward the Path Parameter; it is strictly hop-scoped setup metadata (see [Session](`#session`)).
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@draft-lcurley-moq-lite.md` around lines 618 - 631, Edit the Path Parameter
wording to consistently treat it as per-hop setup metadata rather than a
negotiated capability: change the sentence that currently says “Unlike the other
Setup Parameters it is not a capability” to clearly state it is per-hop setup
metadata carried in SETUP, and replace “like every other negotiated capability”
with wording such as “like other per-hop setup parameters” or “like other setup
metadata that applies only to this hop” so the Path Parameter, SETUP handling
rules, and the reference to the Session section all consistently describe it as
per-hop setup metadata (keep references to the Path Parameter, SETUP, and
Session intact).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@draft-lcurley-moq-lite.md`:
- Around line 618-631: Edit the Path Parameter wording to consistently treat it
as per-hop setup metadata rather than a negotiated capability: change the
sentence that currently says “Unlike the other Setup Parameters it is not a
capability” to clearly state it is per-hop setup metadata carried in SETUP, and
replace “like every other negotiated capability” with wording such as “like
other per-hop setup parameters” or “like other setup metadata that applies only
to this hop” so the Path Parameter, SETUP handling rules, and the reference to
the Session section all consistently describe it as per-hop setup metadata (keep
references to the Path Parameter, SETUP, and Session intact).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a3d18981-7158-42b8-900e-2121c57ea201

📥 Commits

Reviewing files that changed from the base of the PR and between d1174e6 and 9bb3b3c.

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

@kixelated

Copy link
Copy Markdown
Collaborator Author

Addressed the CodeRabbit nitpick in 353423f: reworded the Path Parameter section to consistently describe it as per-hop setup metadata (removed the "not a capability" framing and changed "like every other negotiated capability" to "like other per-hop setup metadata").

Resolve internal inconsistency flagged in review: the section called the
Path Parameter "not a capability" but then described relay handling
"like every other negotiated capability". Reword both to consistently
treat it as per-hop setup metadata.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@kixelated kixelated force-pushed the claude/thirsty-spence-98309b branch from 353423f to aac5801 Compare June 9, 2026 16:40
@kixelated kixelated merged commit bacaaa2 into main Jun 9, 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