Skip to content

chore(stack): adopt current #252 into #255 - #294

Merged
seonghobae merged 27 commits into
feat/webdriver-bidi-teardown-transport-bindingfrom
feat/webdriver-bidi-session-end-response
Sep 7, 2026
Merged

chore(stack): adopt current #252 into #255#294
seonghobae merged 27 commits into
feat/webdriver-bidi-teardown-transport-bindingfrom
feat/webdriver-bidi-session-end-response

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Bounded parent-adoption PR for the existing #255 sole-writer lease. Merge current #252 exact 363a78e36e7690e9ed5bf49829567e00e2ec5d59 into #255 branch feat/webdriver-bidi-teardown-transport-binding without rewriting history. Preserve #255's stronger connection-bound teardown/closure provenance and all valid #253/#254 successor deltas. This PR exists only to let GitHub perform the ordinary three-way integration; it does not authorize protected-main merge, gate weakening, force updates, self-approval, or release mutation. After integration, #255 must remain Draft and receive fresh exact-head full verification before any acceptance claim.


Devin Review

seonghobae and others added 27 commits September 7, 2026 00:05
Reuse the existing sealed-reader integration checks and preserve pending commands after event or missing-provenance rejection. Apply canonical formatting observed in exact-head CI.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
Signed-off-by: Seongho Bae <me@seonghobae.me>
Preserve the failed compile attempt and use the existing evidence accessor without widening production authority.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
Signed-off-by: Seongho Bae <me@seonghobae.me>
Replace the superseded unit fixture with the existing loopback response path and verify original correlation remains usable.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
Signed-off-by: Seongho Bae <me@seonghobae.me>
Co-Authored-By: OpenAI Codex <noreply@openai.com>
Signed-off-by: Seongho Bae <me@seonghobae.me>
Keep generic and connection-bound completion separate while reusing exact event and null-id rejection. Projection and provenance remain prerequisites to consumption.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
Signed-off-by: Seongho Bae <me@seonghobae.me>
Require pending-state preservation and acceptance of the original connection reply after rejection.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
Signed-off-by: Seongho Bae <me@seonghobae.me>
Adopt bbdc6ac with both histories and retain all child sender and failure-test blobs.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
Signed-off-by: Seongho Bae <me@seonghobae.me>
Require exact replacement-connection rejection without claiming stream liveness or end-response provenance.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
Signed-off-by: Seongho Bae <me@seonghobae.me>
Co-Authored-By: OpenAI Codex <noreply@openai.com>
Signed-off-by: Seongho Bae <me@seonghobae.me>
Co-Authored-By: OpenAI Codex <noreply@openai.com>
Signed-off-by: Seongho Bae <me@seonghobae.me>
Co-Authored-By: OpenAI Codex <noreply@openai.com>
Signed-off-by: Seongho Bae <me@seonghobae.me>
@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.

@coderabbitai

coderabbitai Bot commented Sep 7, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: a4fc5ce7-2ca2-47ae-af2f-9666c4a2e29e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

@devin-ai-integration devin-ai-integration 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.

Devin Review found 3 potential issues.

Devin Review

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔍 Legacy assembly path remains public

Raw frame reads and WebDriverBiDiWebSocketMessageAssembler still permit transport-detached assembly. Review whether retaining this public path leaves the provenance migration incomplete.

(Refers to this code)

Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment on lines +113 to +121
WebDriverBiDiWebSocketMessageAssembly::Control(message) => {
WebDriverBiDiConnectionMessageRead::Control {
reader: Self {
established,
assembler,
connection_generation,
},
message,
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 Ping replies become impossible

When read_next returns a Ping, it keeps the established connection private inside the returned reader. The only Pong writer requires that connection, so callers cannot acknowledge the Ping. Standards-compliant peers can close the WebSocket and strand pending commands.

Prompt for agents
WebDriverBiDiWebSocketMessageReader surfaces Ping control messages while retaining the established transport privately, but WebDriverBiDiWebSocketEstablished::write_pong_frame consumes that transport. External callers therefore have no API path to send the required Pong and continue with the same fragmentation state. Add a connection-bound Pong operation or a control outcome that safely supports writing the Pong while preserving the assembler and connection generation. Cover both standalone and interleaved Ping frames, including continued completion of a fragmented text message.
Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment on lines +242 to +243
let (command_id, outcome) = response_route(envelope)?;
self.complete(command_id, expected_kind, outcome)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟥 Connection-bound replies remain bypassable

A caller can pass a replacement connection's matching envelope to correlate_response_for. The generic path consumes connection-bound commands without checking their stored generation. The replacement reply can therefore complete the protected request.

Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

@seonghobae
seonghobae merged commit be85f04 into feat/webdriver-bidi-teardown-transport-binding Sep 7, 2026
4 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