Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
123 commits
Select commit Hold shift + click to select a range
154e226
test(network): require bounded BiDi locateNodes wire exchange
seonghobae Aug 20, 2026
a178efc
feat(network): bind locateNodes command to exact WebSocket response
seonghobae Aug 20, 2026
c757d5f
feat(network): expose bounded locateNodes wire exchange
seonghobae Aug 20, 2026
285d4a5
test(network): send canonical locateNodes response JSON
seonghobae Aug 20, 2026
5ad697b
style(network): apply canonical rustfmt to locateNodes exchange
seonghobae Aug 20, 2026
b09f93c
test(network): cover locateNodes exchange failures
seonghobae Aug 20, 2026
f73f6cb
test(network): satisfy websocket exchange clippy contract
seonghobae Aug 20, 2026
f3c63d7
test(network): enforce one BiDi exchange deadline
seonghobae Aug 21, 2026
ef4393d
test(network): format exchange-deadline RED regression
seonghobae Aug 21, 2026
746128c
fix(network): consume one BiDi exchange deadline
seonghobae Aug 21, 2026
7daabb5
fix(network): format exchange deadline repair
seonghobae Aug 21, 2026
c5746a6
test(network): cover locateNodes exchange deadline
seonghobae Aug 21, 2026
7c04744
chore(network): realign locateNodes exchange stack
seonghobae Aug 21, 2026
9541b6d
test(network): require Pong during locateNodes exchange
seonghobae Aug 21, 2026
1bd7d02
fix(network): service BiDi control frames during locateNodes
seonghobae Aug 21, 2026
1064905
fix(network): repair Pong exchange build contract
seonghobae Aug 21, 2026
4c5e51d
test(network): require non-generic locateNodes entropy callback
seonghobae Aug 21, 2026
3801e90
fix(network): erase locateNodes entropy callback type
seonghobae Aug 21, 2026
3a9aa8b
test(network): borrow locateNodes entropy callbacks
seonghobae Aug 21, 2026
06018f2
test(network): borrow Ping entropy callback
seonghobae Aug 21, 2026
53c3d92
chore(stack): integrate current WebSocket transport parent
seonghobae Aug 21, 2026
946971e
test(network): cover Ping failure exits
seonghobae Aug 21, 2026
66eb019
test(network): keep transport helpers outside production coverage
seonghobae Aug 21, 2026
a507fed
test(network): exercise Ping failure boundaries externally
seonghobae Aug 21, 2026
faffcab
test(network): format BiDi ping deadline regression
seonghobae Aug 21, 2026
60385f4
test(network): factor BiDi ping fixture type
seonghobae Aug 21, 2026
0bad232
test(network): close exact BiDi exchange coverage gaps
seonghobae Aug 21, 2026
7d7c7d8
test(network): cover locateNodes Pong write failure
seonghobae Aug 21, 2026
ad6659b
test(network): wire Pong write failure regression
seonghobae Aug 21, 2026
f48f4dd
test(network): make client frame parser exhaustive
seonghobae Aug 21, 2026
c6daa6d
test(network): cover public locateNodes error sources
seonghobae Aug 21, 2026
623f1cb
test(network): cover locateNodes Pong write failure downstream
seonghobae Aug 21, 2026
b84bebb
test(network): bound locateNodes control-frame interleave
seonghobae Aug 21, 2026
d572b59
test(network): align control-frame RED formatting
seonghobae Aug 21, 2026
6cc3fb5
fix(network): bound locateNodes control-frame interleave
seonghobae Aug 21, 2026
e5ff620
style(network): align control-frame bound formatting
seonghobae Aug 21, 2026
504e921
fix(network): export locateNodes control-frame budget
seonghobae Aug 21, 2026
90f65d7
Merge PR #204 current head into locateNodes exchange
seonghobae Aug 22, 2026
dd4935c
docs: record bounded locateNodes WebSocket exchange
seonghobae Aug 22, 2026
ded60bc
test(network): reproduce long locateNodes exchange budget
seonghobae Aug 22, 2026
2cb8e06
test(network): format long exchange budget regression
seonghobae Aug 22, 2026
6cd64de
fix(network): cap locateNodes frame operations within exchange deadline
seonghobae Aug 22, 2026
587a838
fix(network): preserve zero-budget frame refusal semantics
seonghobae Aug 22, 2026
63bd87a
test(network): satisfy strict lints for long exchange budget regression
seonghobae Aug 22, 2026
17b8834
style(network): apply canonical rustfmt to long-budget regression
seonghobae Aug 22, 2026
dc303b8
Merge PR #204 current head into locateNodes exchange
seonghobae Aug 22, 2026
da4e64f
Merge PR #204 current head into locateNodes exchange
seonghobae Aug 22, 2026
1d873b1
fix(network): adapt locateNodes exchange to validated WebSocket exports
seonghobae Aug 22, 2026
b5fb68a
test(network): preserve deterministic Pong write fault injection
seonghobae Aug 22, 2026
e53a35e
merge(network): restack locateNodes exchange on current frame transport
seonghobae Aug 22, 2026
3ba836a
test(network): require live locateNodes authority binding
seonghobae Aug 25, 2026
b22a371
test(network): format live authority regression
seonghobae Aug 25, 2026
082a8e2
feat(network): bind live BiDi nodes to current authority
seonghobae Aug 25, 2026
217e070
refactor(network): bundle current BiDi authority input
seonghobae Aug 25, 2026
8ead5b9
test(network): pass bundled live BiDi authority
seonghobae Aug 25, 2026
6a82023
test(network): cover live bind exchange failures
seonghobae Aug 25, 2026
79fd480
style(network): apply canonical exchange regression formatting
seonghobae Aug 25, 2026
437237b
test(network): simplify BiDi failure fixture type
seonghobae Aug 26, 2026
f31e129
test(network): apply canonical rustfmt to BiDi failure fixture
seonghobae Aug 26, 2026
400e7a4
test(network): reject reused BiDi frame masks
seonghobae Aug 26, 2026
bdb3efe
test(network): canonicalize mask freshness regressions
seonghobae Aug 26, 2026
4f03c5f
fix(network): reject reused BiDi frame masks
seonghobae Aug 26, 2026
b6f17ec
style(network): apply canonical BiDi mask formatting
seonghobae Aug 26, 2026
d6d75c6
test(network): classify zero BiDi exchange budget
seonghobae Aug 26, 2026
c26030c
style(network): apply canonical zero-budget regression formatting
seonghobae Aug 26, 2026
0007fc5
fix(network): enforce initial BiDi exchange deadline
seonghobae Aug 26, 2026
225964d
test(network): align zero-budget exchange classification
seonghobae Aug 26, 2026
151b9fd
test(network): cover initial BiDi command write failure
seonghobae Aug 26, 2026
dfff508
chore(network): retain current frame transport in locateNodes stack
seonghobae Aug 26, 2026
6d8d892
test(network): retain WebSocket mask reuse regression in locateNodes …
seonghobae Aug 26, 2026
c6c5480
chore(network): reconstruct locateNodes stack on current frame transport
seonghobae Aug 26, 2026
ac0209d
chore(network): refresh locateNodes stack on current frame transport
seonghobae Aug 26, 2026
9f0b9fb
test(network): pin locateNodes coverage shape
seonghobae Aug 26, 2026
8ee1712
fix(network): stabilize locateNodes binding coverage
seonghobae Aug 26, 2026
cd3734e
test(network): require in-wrapper binding conversion
seonghobae Aug 26, 2026
6400d2e
fix(network): keep binding conversion in exercised wrapper
seonghobae Aug 26, 2026
3ade84e
test(network): exercise binding wrapper in unit coverage crate
seonghobae Aug 26, 2026
853808e
test(network): cover successful binding wrapper in unit crate
seonghobae Aug 26, 2026
b692162
test(network): register binding wrapper unit coverage
seonghobae Aug 26, 2026
18f2dff
test(network): apply canonical unit coverage rustfmt
seonghobae Aug 26, 2026
5e0eab2
test(network): exercise locateNodes initial write rejection in integr…
seonghobae Aug 26, 2026
d115037
test(network): apply canonical locateNodes integration rustfmt
seonghobae Aug 26, 2026
46380dd
merge(network): reconstruct locateNodes exchange on current frame tra…
seonghobae Aug 26, 2026
370594c
test(network): require fragmented BiDi response reassembly
seonghobae Aug 26, 2026
87a9171
fix(network): reassemble bounded fragmented BiDi responses
seonghobae Aug 26, 2026
3e53784
fix(network): preserve consuming BiDi command admission
seonghobae Aug 26, 2026
1a3d80a
test(network): keep fragmented BiDi response semantics current
seonghobae Aug 26, 2026
0e79777
test(network): exercise Ping between BiDi response fragments
seonghobae Aug 26, 2026
8e061d6
style(network): apply canonical fragmentation test formatting
seonghobae Aug 26, 2026
95d09f2
test(network): cover fragmented locateNodes boundaries
seonghobae Aug 26, 2026
1591495
test(network): fail closed on impossible frame marker
seonghobae Aug 26, 2026
4c1558d
test(network): remove vacuous matches coverage branch
seonghobae Aug 26, 2026
f653c8e
test(network): cover fragmented locateNodes unit branches
seonghobae Aug 26, 2026
3e71e63
style(network): apply canonical rustfmt to BiDi coverage tests
seonghobae Aug 26, 2026
f537a4d
test(network): reject second text message during BiDi fragmentation
seonghobae Aug 26, 2026
2f1ff59
style(network): apply canonical rustfmt to fragmentation regression
seonghobae Aug 26, 2026
25b7734
test(network): bound locateNodes response fragmentation
seonghobae Aug 26, 2026
ce027d5
style(network): apply canonical rustfmt to fragmentation budget regre…
seonghobae Aug 26, 2026
9fa4e46
fix(network): bound locateNodes response fragment count
seonghobae Aug 26, 2026
3e50431
feat(network): export locateNodes response fragment budget
seonghobae Aug 26, 2026
078648b
fix(network): remove unreachable first-fragment error edges
seonghobae Aug 26, 2026
400ce7b
fix(network): preserve redacted WebSocket mask-key boundary
seonghobae Aug 26, 2026
f10670c
fix(network): preserve redacted mask-key export in locateNodes stack
seonghobae Aug 26, 2026
40335f1
fix(network): preserve redacted mask-key transport in locateNodes stack
seonghobae Aug 26, 2026
f94b2ec
test(network): preserve mask-key redaction regression in locateNodes …
seonghobae Aug 26, 2026
c95c1b7
merge(network): reconstruct locateNodes stack on current frame transport
seonghobae Aug 26, 2026
bfca50e
merge(network): join current frame-transport parent
seonghobae Aug 26, 2026
b68e0f6
fix(network): preserve current frame-transport parent
seonghobae Aug 26, 2026
9c165cc
fix(network): bound Pong entropy before deadline
seonghobae Aug 26, 2026
73eb00f
test(network): admit non-adjacent mask collision
seonghobae Aug 26, 2026
160620c
fix(network): permit non-adjacent mask collisions
seonghobae Aug 26, 2026
cdfdc89
test(network): specify adjacent mask reuse diagnostic
seonghobae Aug 26, 2026
dec5092
fix(network): clarify adjacent mask reuse diagnostic
seonghobae Aug 26, 2026
df321a8
test(network): align mask reuse regression with adjacent-key contract
seonghobae Aug 26, 2026
863f9ab
test(network): restore locateNodes coverage
seonghobae Aug 26, 2026
6f2c3f1
test(network): remove uncovered deadline guard
seonghobae Aug 26, 2026
ff92b8a
test(network): remove timing-sensitive deadline case
seonghobae Aug 26, 2026
65fb36a
test(network): avoid socket-race coverage dependency
seonghobae Aug 26, 2026
f801395
fix(network): bound accumulated BiDi response size
seonghobae Aug 26, 2026
e068efd
test(network): deterministically cover read deadline
seonghobae Aug 26, 2026
fc556f3
fix(network): preserve current bind contract
seonghobae Aug 26, 2026
a5ddb50
style(network): format deadline coverage
seonghobae Aug 26, 2026
f427aa6
test(network): execute deadline guard reader
seonghobae Aug 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ All notable changes to OriginWeave are documented in this file. The format follo
### Added

- Bounded RFC 6455 frame transport on the established WebDriver BiDi stream: client text frames require a caller-supplied fresh mask key and are masked on the wire, server frames are required to be unmasked, reserved bits/opcodes and nonminimal lengths fail closed, and each frame is limited by payload and monotonic-I/O ceilings; this remains frame transport only and does not assemble BiDi messages or grant browser/Agent authority.
- Bounded WebDriver BiDi `browsingContext.locateNodes` exchange over the established peer-verified WebSocket stream: the exact consumed command is written as one masked text frame, one end-to-end deadline and a 64-frame Ping/Pong budget bound the exchange, each Pong requires a fresh caller-supplied masking key, and only one final bounded text response may pass raw-document admission, exact command correlation, and node-result admission; fragmentation, binary/continuation/close shapes, exhausted entropy, and over-budget control traffic fail closed without granting browser, origin, policy, typed-input, or Agent authority.
- Bounded RFC 6455 WebDriver BiDi opening-response validation on the exact peer-verified stream: it admits only HTTP/1.1 `101`, case-insensitive `Upgrade`/`Connection` tokens, and the client-key-correlated `Sec-WebSocket-Accept` value within monotonic time and header-size ceilings; it restores blocking mode and still does not implement WebSocket frames or grant browser/Agent authority.
- Bounded WebDriver BiDi loopback TCP transport that consumes one exact no-DNS connect target, retries only explicitly recoverable local transport failures within repository timeout and attempt ceilings, exposes the stream only after operating-system peer inspection and exact peer verification, supports a consuming handoff of the original stream with typed credential-free peer/session/TLS and bounded-attempt evidence, preserves typed causal errors, and performs no DNS, proxy/PAC, process authentication, TLS, WebSocket, BiDi message, browser-action, or Agent-authority step.
- Exact WebDriver BiDi socket-peer verification that consumes an approved no-DNS connect target, requires the observed IP address and port to match exactly, preserves the TLS requirement and exact correlated session id, and remains inert metadata that does not authenticate an OS process, does not negotiate TLS, perform a WebSocket handshake, or grant Agent authority.
Expand Down Expand Up @@ -55,6 +56,19 @@ All notable changes to OriginWeave are documented in this file. The format follo

### Changed

- Made WebDriver BiDi response-fragment admission reject an already oversized
buffer without subtraction underflow or a production panic.

- Restored exact locateNodes-stack coverage without introducing an uncovered
test-only pattern-guard branch by exercising the deadline callback
without weakening its no-late-entropy assertion and removing an unreachable
private legacy handshake `Debug` implementation superseded by the redacting
wrapper.
- Removed a redundant 20-microsecond loopback deadline assertion whose error
variant depended on host scheduling; deterministic unit-clock tests retain
the shrinking end-to-end budget contract.
- Kept the no-late-entropy deadline gate as one result chain so exact coverage
does not require recreating an expired-clock race through a real socket.
- Separated logical origin authority from resolved network destination authority; an origin grant no longer implies permission to connect to every resolver result.
- Separated resolved-address authorization from direct transport evidence; an approved IP now becomes a usable stream only after the operating system reports the exact requested IP and port.
- Separated exact TCP peer proof from authenticated TLS service identity; an observed peer becomes an authenticated HTTPS stream only after explicit-root, fixed-time, SAN-bound WebPKI verification over that same stream.
Expand Down
14 changes: 12 additions & 2 deletions crates/originweave-network/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,21 @@
//! It also bridges a session-correlated WebDriver BiDi loopback target from
//! `originweave-core` into one bounded exact TCP connection, binds an RFC 6455
//! opening request to that verified plain stream, and can write that exact request
//! under one bounded deadline and validate its bounded RFC 6455 opening response
//! and one bounded frame at a time without granting browser, WebSocket, TLS,
//! under one bounded deadline, validate its bounded RFC 6455 opening response,
//! carry one bounded frame at a time, and bind one exact `locateNodes` command to
//! its bounded correlated response without granting browser, WebSocket, TLS,
//! policy, or Agent authority.

#![forbid(unsafe_code)]
#![deny(missing_docs)]

mod connection;
mod webdriver_bidi_connection;
mod webdriver_bidi_locate_nodes_exchange;
#[cfg(test)]
mod webdriver_bidi_locate_nodes_exchange_transport_failure_tests;
#[cfg(test)]
mod webdriver_bidi_locate_nodes_exchange_unit_coverage_tests;
mod webdriver_bidi_websocket_control;
#[cfg(test)]
#[allow(clippy::expect_used)]
Expand All @@ -36,6 +42,10 @@ pub use webdriver_bidi_connection::{
WebDriverBiDiTcpConnection, WebDriverBiDiTcpConnectionError,
WebDriverBiDiTcpConnectionEvidence, WebDriverBiDiTcpConnectionPlan,
};
pub use webdriver_bidi_locate_nodes_exchange::{
MAX_WEBDRIVER_BIDI_CONTROL_FRAMES_PER_EXCHANGE,
MAX_WEBDRIVER_BIDI_RESPONSE_FRAGMENTS_PER_EXCHANGE, WebDriverBiDiLocateNodesExchangeError,
};
pub use webdriver_bidi_websocket_handshake::{
WebDriverBiDiWebSocketEstablished, WebDriverBiDiWebSocketHandshakePlan,
WebDriverBiDiWebSocketOpeningRequestSent,
Expand Down
Loading
Loading