Repository navigation
Conversation
Co-authored-by: GPT-6.1 Sol <noreply@openai.com>
Co-authored-by: GPT-6.1 Sol <noreply@openai.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Add bounded client acceptance of server-initiated bidirectional streams after extension negotiation. Ordinary HTTP/3 still rejects unnegotiated streams with
H3_STREAM_CREATION_ERROR.This is layer 2 of the fork stack, based on
adopted/webtransportatea95c4b3eeed5e41b9ef39612a0091a69c0e37f2. Layer 1 is #1.Why
runewarp/runewarp#255 requires generic stream dispatch beneath the later extension implementation, following the fork layering decision. RFC 9114 section 6.1 permits server bidirectional streams only after an extension is negotiated.
This layer contains no WebTransport or Runewarp dispatch policy. Client WebTransport negotiation, stream framing and exact session validation, server session opening, session lifecycle fixes, and the top-branch patch inventory remain deferred to layer 3.
How
Connection::server_initiated_streams(capacity, rejection_code, negotiated)and a cancellation-safeIncomingStreamsreceiver. ExportSettingsso extension crates can name the negotiation predicate's arguments.Validation on macOS ARM64 with Rust 1.96.0:
cargo test --workspace --all-featuresandcargo test --workspaceeach pass 293 tests, including 24 existing network integration tests and nine new timed tests.cargo fmt --all -- --check,cargo clippy --workspace --lib --all-features -- -D warnings, andci/example_test.shpass. Native h3spec passes 43 cases using the five exclusions fromci/h3spec.sh. All-target Clippy reports exactly the 16 layer-1 diagnostics in unchanged upstream files, with none in changed code. Crate names, manifests, lockfile, andmasterare unchanged; no unsafe code was added.Claude Opus 5.5 reviewed
ad7d1cd38c55af550a18d977a73998058e9b8093and found no blocking defects. The review identified a generic compatibility change: spawning the client driver now requiresC::BidiStream: Send, because the driver owns the dispatch queue. This is accepted for the fork and will be recorded in the top-layerPATCHES.md; concrete Quinn streams already satisfy it. The reviewer independently ran the nine dispatch tests, then repeated them 25 times without failures. Extensions must arrange negotiation ordering before the Server opens streams: an incoming stream before peer SETTINGS retains the ordinary H3 connection error. The predicate sees configured local settings; callers suppressing SETTINGS withsend_settings(false)must not treat configuration as wire negotiation evidence.🤖 Written by @dtcristo's agent (GPT-6.1-Sol, Claude Opus 5.5)