Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9cca6ed3c4 | ||
|
|
200d7d3835 | ||
|
|
3c6fc29271 | ||
|
|
1365272146 |
No files matched your search
@@ -165,9 +165,9 @@ just spawned implementation agents.
|
|||||||
`Identity`, `IdentityProvider`, `AccessControl`,
|
`Identity`, `IdentityProvider`, `AccessControl`,
|
||||||
`OwnershipProvider`, `HandlerError`, `StreamError` come from
|
`OwnershipProvider`, `HandlerError`, `StreamError` come from
|
||||||
`alkcall::core`. Do not vendor copies into this crate. alkcall is
|
`alkcall::core`. Do not vendor copies into this crate. alkcall is
|
||||||
v0.7.x — breaking changes are expected at this major-zero stage;
|
v0.10.x — breaking changes are expected at this major-zero stage;
|
||||||
this is an early consumer, so we find and fix issues upstream
|
this is an early consumer, so we find and fix issues upstream
|
||||||
rather than working around them. Pin `alkcall = "0.7.0"` and bump
|
rather than working around them. Pin `alkcall = "0.10.0"` and bump
|
||||||
deliberately. The 0.6.0 establishment surface (ADR-049 + amendment
|
deliberately. The 0.6.0 establishment surface (ADR-049 + amendment
|
||||||
2) is load-bearing for this crate: tunnel opens use
|
2) is load-bearing for this crate: tunnel opens use
|
||||||
`register_openable_with_establisher` so a refused target dial is
|
`register_openable_with_establisher` so a refused target dial is
|
||||||
@@ -264,7 +264,7 @@ non-backend module changes.
|
|||||||
(§POC Target 3: tunnel handler). Validates the demux→Connection→
|
(§POC Target 3: tunnel handler). Validates the demux→Connection→
|
||||||
handler→mux path and the two-pump tunnel shape over a stand-in
|
handler→mux path and the two-pump tunnel shape over a stand-in
|
||||||
transport. POC code at `/workspace/alknet-channels-poc/`.
|
transport. POC code at `/workspace/alknet-channels-poc/`.
|
||||||
- **alkcall** — `/workspace/@alkdev/alkcall` (v0.7.x, crates.io).
|
- **alkcall** — `/workspace/@alkdev/alkcall` (v0.10.x, crates.io).
|
||||||
The substrate: call protocol + channels multiplexing. The tunnel
|
The substrate: call protocol + channels multiplexing. The tunnel
|
||||||
crate consumes `alkcall::core` types and the channels
|
crate consumes `alkcall::core` types and the channels
|
||||||
`ChannelCore`/`ChannelClient`/`register_openable` surface.
|
`ChannelCore`/`ChannelClient`/`register_openable` surface.
|
||||||
|
|||||||
+94
-1
@@ -6,6 +6,96 @@ this crate adheres to [Semantic Versioning](https://semver.org/).
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [0.4.1] - 2026-10-22
|
||||||
|
|
||||||
|
The dependency-patch release: the alkcall substrate bumped 0.10.0 →
|
||||||
|
0.10.1 (the adoption-window ordering fix). No alktunnels API change,
|
||||||
|
no wire change — the only file-level contacts with the bump are
|
||||||
|
`Cargo.toml`/`Cargo.lock`.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- **alkcall 0.10.0 → 0.10.1** (crates.io). The bug-fix release
|
||||||
|
(review 013, routed from alkgit's wave-2 gate): the
|
||||||
|
`adopt_channel` install→drain window is now one atomic section, so
|
||||||
|
a chunk routed by the demux inside the window can no longer be
|
||||||
|
delivered ahead of earlier-parked early arrivals (the observed
|
||||||
|
downstream shape was pkt-line desync in alkgit's open-op
|
||||||
|
integration test under multi-process load), and a related loss
|
||||||
|
variant (a chunk parked after the drain removed the queue, parked
|
||||||
|
forever) is closed. Relevant in principle to this crate's
|
||||||
|
reverse-path adopt flow (the bind-first establisher surfaces
|
||||||
|
channels through the same adopt path), though no change in this
|
||||||
|
crate's own surfaces was needed. No API, wire-format
|
||||||
|
(`EventEnvelope`, the 8-byte chunk header), or documented-cap
|
||||||
|
behavior change upstream — the fix surface is private; the behavior
|
||||||
|
only strengthens. 136 tests pass; wasm-clean verified (check +
|
||||||
|
clippy on `wasm32-unknown-unknown`).
|
||||||
|
|
||||||
|
## [0.4.0] - 2026-10-19
|
||||||
|
|
||||||
|
The dependency-major release: the alkcall substrate bumped 0.9.0 →
|
||||||
|
0.10.0 (the gateway ownership-seam release). No alktunnels API
|
||||||
|
change, no wire change; zero source changes — the only file-level
|
||||||
|
contacts with the bump are `Cargo.toml`/`Cargo.lock`. Minor rather
|
||||||
|
than patch for the 0.3.0 reason: the semver-incompatible dependency
|
||||||
|
bump plus this crate's public re-exports of alkcall types
|
||||||
|
(`ChannelOpenError`; `Establishment`/`EstablishmentError` shapes in
|
||||||
|
the producer API) make it semver-visible to downstream consumers.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- **alkcall 0.9.0 → 0.10.0** (crates.io). The gateway
|
||||||
|
ownership-seam release (review 012): `GatewayDispatch` gains
|
||||||
|
`with_ownership_provider` / `with_static_ownership_fallback`, and
|
||||||
|
the previously-silent static fallback becomes loud — an unwired
|
||||||
|
spine refuses (an error envelope, `FORBIDDEN`, pre-dispatch) an op
|
||||||
|
whose spec carries `access_control.resource_type`. None of it is on
|
||||||
|
this crate's paths: alktunnels does not use the `gateway` feature
|
||||||
|
or `GatewayDispatch` — tunnel opens serve via
|
||||||
|
`ChannelCore::register_openable`/`register_openable_with_establisher`
|
||||||
|
registry dispatch on the native wire, which 0.10.0 leaves
|
||||||
|
untouched. All of this crate's alkcall contact points
|
||||||
|
(`register_openable`/`register_openable_with_establisher`,
|
||||||
|
`Establishment::new`, `OpenHandler`,
|
||||||
|
`ChannelClient::open_channel_with_reply`,
|
||||||
|
`ManagerError::ChannelExists`, `ChannelOpenError`) are unchanged
|
||||||
|
between 0.9.0 and 0.10.0. 136 tests pass; wasm-clean verified
|
||||||
|
(check + clippy on `wasm32-unknown-unknown`).
|
||||||
|
|
||||||
|
## [0.3.0] - 2026-10-14
|
||||||
|
|
||||||
|
The dependency-major release: the alkcall substrate bumped 0.8.1 →
|
||||||
|
0.9.0 (the stub-sweep release). No alktunnels API change, no wire
|
||||||
|
change; the only code contact with the 0.9.0 breaking surface was
|
||||||
|
test-side (`Establishment` no longer derives `Debug` — three
|
||||||
|
`expect_err`/`panic!` sites restructured), which is why this is a
|
||||||
|
minor bump rather than a patch: the semver-incompatible dependency
|
||||||
|
bump plus this crate's public re-exports of alkcall types make it
|
||||||
|
semver-visible to downstream consumers (matching the 0.7.1 → 0.8.0
|
||||||
|
ride on 0.2.0).
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- **alkcall 0.8.1 → 0.9.0** (crates.io). The stub-sweep release: the
|
||||||
|
marked-pub open contract (S-01), `channel/control` (S-02),
|
||||||
|
`channel/resources/subscribe` (S-03), and `op/register`
|
||||||
|
forward-through (S-04) replace the four always-failing stubs.
|
||||||
|
None of the four stubs were on this crate's paths (no marked-pub
|
||||||
|
registration, no control-handle subscription, no resource
|
||||||
|
enumerator use, no generic `op/register` announcements), so no
|
||||||
|
behavior change here. Of the 0.9.0 breaking list,
|
||||||
|
`Establishment` dropping its `Debug` derive was the only surface
|
||||||
|
this crate touched — two `bindfirst_establisher` unit tests'
|
||||||
|
`expect_err` calls and one integration test's untyped
|
||||||
|
`panic!("{other:?}")` fall-through restructured (the error type
|
||||||
|
itself remains `Debug`; the `Ok` arm now formats via `panic!("got
|
||||||
|
Ok")`). `ManagerError::InvalidAdopt` (additive),
|
||||||
|
`RelayError::PubTypedOpen` removal, and the
|
||||||
|
`register_imported`/`register_imported_all` return change are
|
||||||
|
untouched by this crate's API use. 136 tests pass; wasm-clean
|
||||||
|
verified.
|
||||||
|
|
||||||
## [0.2.1] - 2026-09-28
|
## [0.2.1] - 2026-09-28
|
||||||
|
|
||||||
The hardening release: fuzzing adopted from the alkcall pattern
|
The hardening release: fuzzing adopted from the alkcall pattern
|
||||||
@@ -268,7 +358,10 @@ complete (Phase 2, review 001 findings remediated).
|
|||||||
matrix). Wasm-clean default crate verified (`wasm32-unknown-unknown`
|
matrix). Wasm-clean default crate verified (`wasm32-unknown-unknown`
|
||||||
check + clippy).
|
check + clippy).
|
||||||
|
|
||||||
[Unreleased]: https://git.alk.dev/alkdev/alktunnels/compare/v0.2.1...HEAD
|
[Unreleased]: https://git.alk.dev/alkdev/alktunnels/compare/v0.4.1...HEAD
|
||||||
|
[0.4.1]: https://git.alk.dev/alkdev/alktunnels/compare/v0.4.0...v0.4.1
|
||||||
|
[0.4.0]: https://git.alk.dev/alkdev/alktunnels/compare/v0.3.0...v0.4.0
|
||||||
|
[0.3.0]: https://git.alk.dev/alkdev/alktunnels/compare/v0.2.1...v0.3.0
|
||||||
[0.2.1]: https://git.alk.dev/alkdev/alktunnels/compare/v0.2.0...v0.2.1
|
[0.2.1]: https://git.alk.dev/alkdev/alktunnels/compare/v0.2.0...v0.2.1
|
||||||
[0.2.0]: https://git.alk.dev/alkdev/alktunnels/compare/v0.1.0...v0.2.0
|
[0.2.0]: https://git.alk.dev/alkdev/alktunnels/compare/v0.1.0...v0.2.0
|
||||||
[0.1.0]: https://git.alk.dev/alkdev/alktunnels/releases/tag/v0.1.0
|
[0.1.0]: https://git.alk.dev/alkdev/alktunnels/releases/tag/v0.1.0
|
||||||
Generated
+3
-3
@@ -27,9 +27,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "alkcall"
|
name = "alkcall"
|
||||||
version = "0.8.1"
|
version = "0.10.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bf6af1e4af1460480849adf959c972d65deeafc36f4101064ced1ce6d1adfd5b"
|
checksum = "690d747f42baf385dc22cd120f79d43cf1ea239bc426675e0e1e225b57fc031a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"bytes",
|
"bytes",
|
||||||
@@ -48,7 +48,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "alktunnels"
|
name = "alktunnels"
|
||||||
version = "0.2.1"
|
version = "0.4.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"alkcall",
|
"alkcall",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "alktunnels"
|
name = "alktunnels"
|
||||||
version = "0.2.1"
|
version = "0.4.1"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
rust-version = "1.88"
|
rust-version = "1.88"
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
@@ -23,7 +23,7 @@ default = []
|
|||||||
local = ["tokio/net"]
|
local = ["tokio/net"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
alkcall = "0.8.1"
|
alkcall = "0.10.1"
|
||||||
tokio = { version = "1", default-features = false, features = ["rt", "sync", "io-util", "macros", "time"] }
|
tokio = { version = "1", default-features = false, features = ["rt", "sync", "io-util", "macros", "time"] }
|
||||||
bytes = "1"
|
bytes = "1"
|
||||||
futures = "0.3"
|
futures = "0.3"
|
||||||
|
|||||||
@@ -309,6 +309,26 @@ to the reverse-path adopt flow). Two additive diagnostics:
|
|||||||
`TunnelSession::datagram_backlog()` and
|
`TunnelSession::datagram_backlog()` and
|
||||||
`DatagramReader::retained_bytes()`. No API break, no wire change.
|
`DatagramReader::retained_bytes()`. No API break, no wire change.
|
||||||
|
|
||||||
|
0.3.0 rides the alkcall bump 0.8.1 → 0.9.0 (the stub-sweep release —
|
||||||
|
the four registered-but-always-failing stubs became real
|
||||||
|
implementations; none were on this crate's paths). No alktunnels API
|
||||||
|
change, no wire change; minor rather than patch because the
|
||||||
|
semver-incompatible dependency bump + this crate's alkcall type
|
||||||
|
re-exports make it semver-visible downstream.
|
||||||
|
|
||||||
|
0.4.0 rides the alkcall bump 0.9.0 → 0.10.0 (the gateway
|
||||||
|
ownership-seam release — the loud ownership-wiring default on the
|
||||||
|
`GatewayDispatch` spine, behind the opt-in `gateway` feature; none of
|
||||||
|
it is on this crate's paths, which serve via
|
||||||
|
`ChannelCore::register_openable*` dispatch). No alktunnels API
|
||||||
|
change, no wire change; same minor-not-patch reasoning as 0.3.0.
|
||||||
|
|
||||||
|
0.4.1 rides the alkcall bump 0.10.0 → 0.10.1 (the adoption-window
|
||||||
|
ordering fix — a chunk routed inside the `adopt_channel` install→drain
|
||||||
|
window can no longer overtake earlier-parked early arrivals). No
|
||||||
|
alktunnels API change, no wire change; patch because the dependency
|
||||||
|
bump is backwards-compatible.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
| Feature | Contents | wasm |
|
| Feature | Contents | wasm |
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ establisher + the forwarded op (ADR-008).
|
|||||||
|
|
||||||
```
|
```
|
||||||
alktunnels (default — wasm-clean)
|
alktunnels (default — wasm-clean)
|
||||||
├── alkcall 0.8.1 (core types, channels: ChannelCore/ChannelClient/manager,
|
├── alkcall 0.10.1 (core types, channels: ChannelCore/ChannelClient/manager,
|
||||||
│ pump_bidi, ServingConfig identity seam — CF-005/006,
|
│ pump_bidi, ServingConfig identity seam — CF-005/006,
|
||||||
│ establisher reply projection + flavor-form discovery
|
│ establisher reply projection + flavor-form discovery
|
||||||
│ derivation + ChannelRelay/HubLegTemplate — review 008/ADR-051)
|
│ derivation + ChannelRelay/HubLegTemplate — review 008/ADR-051)
|
||||||
|
|||||||
Generated
+3
-3
@@ -27,9 +27,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "alkcall"
|
name = "alkcall"
|
||||||
version = "0.8.1"
|
version = "0.10.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bf6af1e4af1460480849adf959c972d65deeafc36f4101064ced1ce6d1adfd5b"
|
checksum = "6b8ef0591beff0e3fe64b7277a67d8e7caeccf71c27538b4b7aced028d22ca44"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"bytes",
|
"bytes",
|
||||||
@@ -48,7 +48,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "alktunnels"
|
name = "alktunnels"
|
||||||
version = "0.2.1"
|
version = "0.4.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"alkcall",
|
"alkcall",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ edition = "2021"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
alktunnels = { path = "../.." }
|
alktunnels = { path = "../.." }
|
||||||
alkcall = "0.8.1"
|
alkcall = "0.10.0"
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
bytes = "1"
|
bytes = "1"
|
||||||
tokio = { version = "1", features = ["rt", "sync", "io-util", "macros", "time"], default-features = false }
|
tokio = { version = "1", features = ["rt", "sync", "io-util", "macros", "time"], default-features = false }
|
||||||
|
|||||||
+4
-2
@@ -1264,7 +1264,8 @@ mod tests {
|
|||||||
let input = serde_json::json!({"resource": "ghost", "substrate": "tcp"});
|
let input = serde_json::json!({"resource": "ghost", "substrate": "tcp"});
|
||||||
let err = establisher(input, AuthContext::anonymous(b"alk/tunnel"))
|
let err = establisher(input, AuthContext::anonymous(b"alk/tunnel"))
|
||||||
.await
|
.await
|
||||||
.expect_err("registry miss");
|
.err()
|
||||||
|
.expect("registry miss");
|
||||||
assert!(matches!(err, EstablishmentError::UnknownResource { .. }));
|
assert!(matches!(err, EstablishmentError::UnknownResource { .. }));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1290,7 +1291,8 @@ mod tests {
|
|||||||
let input = serde_json::json!({"resource": "listener", "substrate": "tcp"});
|
let input = serde_json::json!({"resource": "listener", "substrate": "tcp"});
|
||||||
let got = establisher(input, AuthContext::anonymous(b"alk/tunnel"))
|
let got = establisher(input, AuthContext::anonymous(b"alk/tunnel"))
|
||||||
.await
|
.await
|
||||||
.expect_err("bind failure");
|
.err()
|
||||||
|
.expect("bind failure");
|
||||||
let reason = match &got {
|
let reason = match &got {
|
||||||
EstablishmentError::DialFailed { .. } => "dial_failed",
|
EstablishmentError::DialFailed { .. } => "dial_failed",
|
||||||
EstablishmentError::ResourceShortage { .. } => "resource_shortage",
|
EstablishmentError::ResourceShortage { .. } => "resource_shortage",
|
||||||
|
|||||||
@@ -351,7 +351,8 @@ async fn establisher_parse_backstop_maps_handler_error() {
|
|||||||
Err(alkcall::channels::operations::EstablishmentError::HandlerError { message }) => {
|
Err(alkcall::channels::operations::EstablishmentError::HandlerError { message }) => {
|
||||||
assert!(message.contains("invalid direct params"), "{message}");
|
assert!(message.contains("invalid direct params"), "{message}");
|
||||||
}
|
}
|
||||||
other => panic!("expected HandlerError backstop, got {other:?}"),
|
Err(other) => panic!("expected HandlerError backstop, got {other:?}"),
|
||||||
|
Ok(_) => panic!("expected HandlerError backstop, got Ok"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user