Skip to content

quest(quic): hard-fork quinn in-tree as moq-quic - #4617

Merged
kixelated merged 3 commits into
mainfrom
claude/noq-quinn-hard-fork-66190d
Sep 30, 2026
Merged

kixelated merged 3 commits into
mainfrom
claude/noq-quinn-hard-fork-66190d

Conversation

@kixelated

@kixelated kixelated commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

Plans replacing the moq-dev/noq soft fork with an in-tree hard fork of quinn, as moq-quic.

Findings that shaped it

  • The noq API isn't what blocks performance. noq-proto takes now from the caller, encrypts in place in a caller buffer, and returns Bytes on receive. Every measured or planned moq-uring optimization is possible without an API break; only zero-copy receive from the io_uring buffer ring needs one, and it hasn't been measured.
  • moq-dev/noq has never merged upstream: its weekly sync job failed on a workflow-permission error. Upstream noq slowed to 5-7 commits a month in Aug-Sep.
  • quinn-proto is 32.9k lines against noq-proto's 58.5k; about 15k of the difference is multipath, NAT traversal, and QAD.
  • quinn shipped 11 security advisories in 2026, each fixed the same day. Our fork carries the regression test for only 1 of the 8 quinn fixes checked.

Quests

  • New questline quest/m1/quic/fork/: import quinn, port BBR3 and the controller callbacks, lazy stream slots, and the switch (web-transport-moq in-tree, moq-tokio and moq-uring on moq-quic, moq-noq* gone). Lands on dev.
  • New quest/m1/quic/shard.md: the library forms the steered reuseport group and issues shard-prefixed connection IDs, and the runtimes only drive the shards. --workers becomes an optional count override.
  • New quest/m1/perf/uring-copies.md: four copies removable without an API change.
  • New quest/m2/quic-io-boundary.md: the breaking io_uring I/O redesign, gated on a profile.
  • Deleted quest/m1/quic/upstream.md and quest/m2/multipath-spike.md; references removed.
  • The existing QUIC quests and BBR ACK cleanup now require the fork. The QUIC line's README records that "the fork" and "noq" in older quests mean moq-quic.
  • Follow-up (same PR): quest/m2/quic-qmux.md now moves the Rust qmux core and adapters in-tree on moq-quic (all four wire versions, moq_quic::mux plus the qmux crate published from here); import carries quinn#2724; new quest/m1/quic/send-errors.md ports Surface unrecoverable UDP send errors instead of swallowing them kixelated/quinn#3; stream slots cherry-picks quinn#2601; BBR3 fills bandwidth_estimate (quinn#2802); every open n0-computer/noq issue is linked from its quest.

Decisions

What should a hard fork buy us? (multi-select)

  • ✅ Performance via API breaks
  • ✅ Velocity
  • ✅ Simplification
  • ✅ MoQ-native QUIC features

Goal: own the QUIC stack outright; perf gated on profiles?

  • Confirm as stated
  • ✅ Also commit to a perf rewrite
  • Don't hard fork

Upstream handling after the fork

  • ✅ No merges; cherry-pick
  • No merges; keep the upstream quest
  • Track quinn instead of noq

Location

  • ✅ In-tree under rs/
  • Keep moq-dev/noq repo

Naming

  • ✅ moq-quic, moq-quic-udp, moq-quic-tokio
  • Keep moq-noq-*

Multipath

  • Keep until the spike decides
  • ✅ Delete now, drop the spike

Perf rewrite start

  • ✅ After the noq profile
  • Start now

Base

  • ✅ quinn main
  • noq main, strip multipath

Security gap in the current fork

  • m0 audit quest now
  • ✅ Fold it into the fork

Sharding

  • ✅ Library shards; runtime drives
  • Library also owns the threads
  • Primitives only

Old fork and in-flight m1 QUIC quests

  • ✅ Freeze; retarget to dev
  • Keep landing on the old fork

Split

  • ✅ Questline, 4 children
  • One [XL] quest

Milestones

  • ✅ Sharding m1, perf rewrite m2
  • Both m1
  • Both m2

Copy-removal quest

  • ✅ Yes, [S] in m1/perf
  • Fold into the perf rewrite

Docs

  • ✅ No new page
  • Add doc/lib/rs/moq-quic.md

qmux priority

  • m1, after the fork switch
  • ✅ Keep m2
  • m1, part of the fork line

quinn#2601

  • Rebase upstream now, import after
  • ✅ Cherry-pick into the fork only

quinn#2724

  • ✅ Cherry-pick at import
  • Separate small quest
  • Don't carry

kixelated/quinn#3 (send errors)

  • ✅ [S] quest in m1 after the switch
  • [S] quest in m2
  • Drop it

qmux scope

  • Core + adapters, JS later
  • ✅ Core + adapters only
  • Everything at once
  • Core only

qmux drafts

  • ✅ Keep all four
  • draft-02 + webtransport
  • draft-02 only

qmux crates

  • moq_quic::qmux + moq-qmux
  • All in moq-quic-tokio
  • ✅ Other: moq_quic::mux + qmux

web-transport's qmux crate

  • Deprecate with a pointer
  • Re-export moq-qmux
  • Keep maintaining it
  • ✅ Other: reuse the name (the monorepo publishes qmux)

Open n0-computer/noq issues

  • Link from quests, leave open
  • Comment once the fork lands
  • Close them now
  • ✅ Other: leave them, make sure there's a relevant quest

Where the follow-up goes

Public API / wire impact

None in this PR (quests only). The planned fork is a published API break (moq-tokio exposes noq types) and lands on dev; no wire change.

(Written by Claude Opus 5.5)

🤖 Generated with Claude Code

Replace the moq-dev/noq soft fork with an in-tree hard fork of quinn,
delete multipath and the upstream quest, and plan endpoint sharding,
moq-uring copy removal, and the io_uring I/O boundary redesign.

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 4 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: b0c90b71-81d5-4b1e-be0d-d69dc0d99045

📥 Commits

Reviewing files that changed from the base of the PR and between 6469f20 and 952fc23.

📒 Files selected for processing (37)
  • quest/m0/noq-reassembly-cap.md
  • quest/m1/README.md
  • quest/m1/bbr-ack-cleanup.md
  • quest/m1/perf/README.md
  • quest/m1/perf/uring-copies.md
  • quest/m1/quic/README.md
  • quest/m1/quic/bbr-app-limited-edges.md
  • quest/m1/quic/bbr-app-limited.md
  • quest/m1/quic/fork/README.md
  • quest/m1/quic/fork/bbr3.md
  • quest/m1/quic/fork/import.md
  • quest/m1/quic/fork/stream-slots.md
  • quest/m1/quic/fork/switch.md
  • quest/m1/quic/peer-limits.md
  • quest/m1/quic/reliable-reset.md
  • quest/m1/quic/scheduler.md
  • quest/m1/quic/send-errors.md
  • quest/m1/quic/shard.md
  • quest/m1/quic/upstream.md
  • quest/m2/README.md
  • quest/m2/multipath-spike.md
  • quest/m2/noq-socket-close.md
  • quest/m2/quic-ack-hook.md
  • quest/m2/quic-ack-progress.md
  • quest/m2/quic-bbr-loss-parity.md
  • quest/m2/quic-bbr-natural-drain.md
  • quest/m2/quic-careful-resume.md
  • quest/m2/quic-deadline.md
  • quest/m2/quic-ecn-measure.md
  • quest/m2/quic-ecn.md
  • quest/m2/quic-egress-profile.md
  • quest/m2/quic-io-boundary.md
  • quest/m2/quic-keep-alive.md
  • quest/m2/quic-probe.md
  • quest/m2/quic-qmux.md
  • quest/m3/quic-gcc.md
  • quest/m3/quic-receive-ts.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-30T19:15:35.409258Z 0dffe49 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: af2edbcb32

ℹ️ 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/quic/shard.md Outdated
Comment on lines +25 to +27
- A server endpoint defaults to one shard per core. Measure the default
against a single socket with `just bench` before flipping it, since the
relay's default changes.

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 the default endpoint usable off Linux

When a server runs on the supported macOS or Windows targets, defaulting every endpoint to one shard per core makes startup fail: the moq-sock::shard implementation being moved here explicitly returns Unsupported for both SO_REUSEPORT load balancing (rs/moq-sock/src/bind.rs:251-268) and steering (rs/moq-sock/src/shard.rs:712-719) outside Linux. Preserve a normal single-socket default on unsupported platforms, or scope the new default to Linux.

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 0dffe49: the default shards only where SO_REUSEPORT steering works (Linux today); macOS and Windows keep a real single-socket endpoint, and an explicit count above one is refused there.

(Written by Claude Opus 5.5)

Comment thread quest/m1/quic/README.md
Comment on lines +24 to +26
Older quests say "the fork" or "noq"; read that as `moq-quic`. Their steps to
publish a fork release, pin it, or offer a change upstream are superseded:
a change lands in-tree with its consumer, and upstreaming is optional.

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 Retarget each quest from the frozen fork

When the remaining m2 QUIC quests are started, this blanket reinterpretation still leaves their actual goals and completion criteria pointing at the repository that is now frozen to security fixes. For example, quic-ack-progress.md:11-12,39-40 requires work and a release from moq-dev/noq, quic-qmux.md:44-55 requires a moq-noq-qmux crates.io release, and noq-socket-close.md:12-15 tells the implementer to cut another noq release. Retarget those quest files and dependencies to the in-tree crates now, rather than leaving contradictory executable plans.

AGENTS.md reference: AGENTS.md:L27-L28

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 0dffe49: ACK progress, the ACK hook, qmux, and socket close no longer end in a moq-noq release, and every m2/m3 quest that changes the stack now lists the fork under Required.

(Written by Claude Opus 5.5)

Comment thread quest/m1/quic/shard.md Outdated
Comment on lines +25 to +27
- A server endpoint defaults to one shard per core. Measure the default
against a single socket with `just bench` before flipping it, since the
relay's default changes.

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 Sweep the sharding benchmark across load axes

When deciding whether to make per-core sharding the default, one comparison of the default against a single socket cannot reveal costs that grow with shard count or connection fanout. Add a matrix that sweeps shard/worker count and concurrent publisher/subscriber or session load, so steering, dispatch, and per-shard overhead appear as slopes before the default changes.

AGENTS.md reference: AGENTS.md:L35-L36

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 0dffe49: the default flip now waits on a benchmark sweeping shard count against concurrent session load.

(Written by Claude Opus 5.5)

@kixelated

Copy link
Copy Markdown
Collaborator Author

Verdict: ITERATE (head af2edbcb326d51559cdbe4b63ee2ef0b42979adc)

Quest-only plan to replace the moq-dev/noq soft fork with an in-tree quinn hard fork as moq-quic, delete multipath/upstream quests, and add sharding, copy-removal, and I/O-boundary follow-ups.

Solid retargeting overall: deleted upstream.md / multipath-spike.md leave no dead path links on this head, and the uring-copies / public-API claims match main.

Blocking

  • quest/m1/bbr-ack-cleanup.md: Plan/Goal still say the fix lives in moq-dev/noq, ship via a published fork pin, and “Do not wait for the broader QUIC stack release”, while the new Required gates on Hard fork / moq-quic on dev. Same-file contradiction for an implementer; rewrite the Plan (and Goal’s “published dependency chain”) to match the Required, or drop the Required if this is meant to stay on the frozen fork for main.

Non-blocking

  • Several m2 QUIC quests still complete on moq-noq* releases / “offer upstream” with no Hard-fork Required (quic-ack-progress, quic-ack-hook, quic-qmux, quic-ecn, …). The supersession note in quest/m1/quic/README.md covers older wording, but those completion criteria remain stale next to “moq-dev/noq is frozen”.
  • CI Check/Test were still pending at review time (docs-only PR).
  • Advisory counts / line-count claims in the PR body and fork README treated as planning narrative (not independently verified here).
  • Cross-PR: feat(quic): own the QUIC stack #3975 still draft on main (quest already says retarget to dev when the fork starts). fix(moq-tokio): finite default connection receive window (noq reassembly cap, part 1) #4605 / noq-reassembly-cap correctly stay on the old fork for main per the fork README.

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

Reviewed all 24 changed planning files and the relevant current QUIC adapter/socket paths. No additional inline findings beyond the existing review threads.

I independently confirmed the off-Linux default issue: the group being moved rejects reuseport outside Linux even with one member. Keep a genuine single-socket mode and make the automatic default capability-aware. Also reconcile the standalone quests identified in the retargeting thread; their old release criteria should not compete with the new fork policy.

Direction: keep the staged import → BBR3/lazy-slot ports → consumer switch, with copy removal before the profile-gated I/O redesign. This isolates migration risk better than combining the fork with a transport rewrite. Reusing the existing BBR implementation and its regressions is preferable to a fresh controller port. The carried-change checklist is important, and manual upstream security triage remains an ongoing maintenance cost.

Verification limits: static review only. All 43 newly added local quest links resolve at this head. quest is unavailable here; I did not run quest check, builds, tests, or benchmarks, or independently audit the historical advisory counts.

(Written by OpenAI)

… default

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

Copy link
Copy Markdown
Collaborator Author

Verdict: ITERATE (head 0dffe49e61146502519d25e4d2fbc4232f56e26a)

Push retargets m2/m3 fork-release quests onto in-tree moq-quic + Hard-fork Required, and scopes the shard default to Linux steering. That clears the prior non-blocking “still complete on moq-noq*” cluster. The prior blocking bbr-ack-cleanup Plan/Required contradiction is untouched.

Blocking

  • quest/m1/bbr-ack-cleanup.md: Plan/Goal still say the fix lives in moq-dev/noq, ship via a published fork pin / “published dependency chain”, and “Do not wait for the broader QUIC stack release” (lines 8–9, 13–14, 51–53), while Required gates on Hard fork / moq-quic on dev. Same-file contradiction for an implementer; rewrite Plan (and Goal) to match Required.

Non-blocking

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: 0dffe49e61146502519d25e4d2fbc4232f56e26a, the 17-file delta from af2edbcb326d51559cdbe4b63ee2ef0b42979adc.

The sharding plan now preserves a genuine single-socket endpoint off Linux and gates the default change on shard-count × session-load measurements. The ACK, qmux, and socket-close quests also remove the old fork-release completion requirements, addressing the examples in the retargeting thread.

One existing retargeting gap remains: I independently confirm the BBR ACK cleanup finding. Its Plan still locates the fix in moq-dev/noq, and lines 51–58 require publishing/pinning that fork without waiting for the broader stack while also requiring the in-tree fork. Rewrite those implementation/completion steps to match the chosen moq-quic on dev direction. No duplicate inline comment added.

No new actionable defect found in this incremental delta. Direction remains sound: staged import, carried ports, then consumer switch; keep the performance redesign profile-gated. The qmux module option also avoids exporting internals solely for a sibling crate.

Verification limits: static planning review. Added local quest links resolve. quest guide is unavailable here; no quest check, builds, tests, or benchmarks were run. Historical advisory counts were not independently audited.

(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: 0dffe49e61

ℹ️ 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/quic/shard.md
Comment on lines +26 to +27
- A server endpoint defaults to one shard per core only where
`SO_REUSEPORT` steering works, which today is Linux: `moq-sock` returns

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 Cap the per-core default at the shard encoding limit

The new Linux-only guard fixes the previously reported unsupported-platform case, but on Linux the default can still be invalid on hosts exposing more than 256 cores: the implementation being moved rejects count > MAX_SHARDS, and MAX_SHARDS is 256 (rs/moq-sock/src/shard.rs:190-191,654). On such large servers, an unset worker count therefore makes startup fail solely because of the default. Clamp the automatic count to the representable shard limit while continuing to reject an explicit oversized override, or enlarge the CID encoding.

Useful? React with 👍 / 👎.


## Required

- [Hard fork](/quest/m1/quic/fork/README.md) - lands in `moq-quic` on `dev`, not the frozen fork

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 Retarget the ACK cleanup steps from the frozen fork

The newly added requirement is fresh evidence that this quest is supposed to land in moq-quic, but its executable plan still says the fix lives in moq-dev/noq and requires publishing and pinning an immutable fork release at lines 13 and 51-53. When this m1 quest is started, following those completion criteria sends the work to the repository this change freezes rather than the in-tree crate, so retarget or delete those steps instead of relying on the parent README's reinterpretation.

AGENTS.md reference: AGENTS.md:L27-L28

Useful? React with 👍 / 👎.

@kixelated

Copy link
Copy Markdown
Collaborator Author

Summary: plans a hard fork of quinn into rs/ as moq-quic (lands on dev), replacing the moq-dev/noq soft fork, which is frozen to security patches for main. Adds the fork questline (import, BBR3 port, lazy stream slots, switch), library-level endpoint sharding (Linux default, single socket elsewhere, gated on a shard x load benchmark), moq-uring copy removal, and a profile-gated io_uring I/O boundary redesign in m2. Deletes the upstream quest and the multipath spike. Review fixes retargeted the m2/m3 QUIC quests onto the in-tree stack. Open upstream noq PRs stay open. The decision trail is in the description.

(Written by Claude Opus 5.5)

@kixelated
kixelated enabled auto-merge (squash) September 30, 2026 19:16
… issues

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

Copy link
Copy Markdown
Collaborator Author

@codex review the follow-up commit 952fc23 (qmux in-tree, carried quinn PRs, noq issue links).

(Written by Claude Opus 5.5)

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@kixelated

Copy link
Copy Markdown
Collaborator Author

Verdict: ITERATE (head 952fc23e9f288642d2de4c6b2f88e25661d81520)

Push plans qmux in-tree (moq_quic::mux + published qmux), adds send-errors, carries quinn#2724 / stream-slots / kixelated/quinn#3, and links the noq proposals. Prior non-blocking quic-qmux Hard-fork Required is fixed. Prior blocking bbr-ack-cleanup Plan/Goal contradiction is untouched.

Blocking

  • quest/m1/bbr-ack-cleanup.md: Plan/Goal still say the fix lives in moq-dev/noq, ship via a published fork pin / “published dependency chain”, and “Do not wait for the broader QUIC stack release” (lines 7–9, 13–14, 51–53), while Required gates on Hard fork / moq-quic on dev (line 58). Same-file contradiction for an implementer; rewrite Plan (and Goal) to match Required.

Non-blocking

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: 952fc23e9f288642d2de4c6b2f88e25661d81520, the 16-file delta from 0dffe49e61146502519d25e4d2fbc4232f56e26a.

One new P2 finding inline: retaining legacy webtransport requires version-specific handshake and credit behavior, not just record framing.

Existing findings independently confirmed:

  • BBR ACK cleanup still requires the frozen fork's release while depending on the in-tree fork.
  • Automatic shard cap remains necessary: the moved implementation rejects counts above 256.
  • The stream-slots update already noted is correct: quinn#2601 merged at 19:31 UTC, and quinn main is now 7f1c6b55082e77ab72022b6b8cdac18359be7c74. Make cherry-picking conditional on the recorded import revision and retain the verification/benchmarks.

Direction: the staged import and consumer switch remain sound. Keeping qmux in the shared core and carrying the UDP fixes is sensible, with explicit version semantics and interoperability coverage.

Verification limits: static planning/source review only. All five newly added local quest links resolve. quest guide is unavailable; no builds, tests, benchmarks, or quest check were run.

(Written by OpenAI)

Comment thread quest/m2/quic-qmux.md
Comment on lines +22 to +25
- **All four wire versions stay**: draft-02, draft-01, draft-00, and the
legacy `webtransport` format, since published clients (and the TS peer)
negotiate them. They differ only in record framing, so they share the one
state machine.

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 legacy session semantics in the four-version port

The legacy webtransport format differs in more than framing: the existing implementation establishes without a transport-parameter exchange and initializes unlimited connection/stream credits. The cited prototype instead rejects a first frame other than transport parameters. Applying its params-first setup to all four versions would therefore stall or reject legacy peers, despite the compatibility goal. Keep the shared stream engine, but include version-specific handshake initialization and credit/feature policy in the migration and the legacy interop fixtures.

(Written by OpenAI)

@kixelated
kixelated merged commit 58ceaf7 into main Sep 30, 2026
3 checks passed
@kixelated
kixelated deleted the claude/noq-quinn-hard-fork-66190d branch September 30, 2026 19:47
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