release: v0.3.0 — the dependency-major (alkcall 0.9.0)

- Cargo.toml: alkcall 0.8.1 -> 0.9.0 (crates.io, the stub-sweep
  release) and 0.2.1 -> 0.3.0 (breaking dep bump + public alkcall
  re-exports -> minor, matching the 0.7.1 -> 0.8.0 ride on 0.2.0)
- fuzz/shared/Cargo.toml: alkcall 0.9.0 (path-linked alktunnels must
  see one alkcall version)
- src/producer.rs + tests/producer_direct_op.rs: the only code contact
  with the 0.9.0 breaking surface — Establishment no longer derives
  Debug; two expect_err calls -> .err().expect, one untyped
  panic!("{other:?}") fall-through -> typed Err/Ok arms
- CHANGELOG: 0.3.0 section + compare links
- README: the 0.3.0 note
- docs/architecture/overview.md: dep tree alkcall 0.9.0

Verification: cargo test (136 default / 163 with local), fuzz/shared
corpus replay (0 pass, empty target set — no regressions), clippy
--all-targets -D warnings (native + wasm32-unknown-unknown), fmt
--check, wasm32 check, and cargo publish --dry-run --allow-dirty all
green
This commit is contained in:
glm-5.3-flash committed 2026-10-14 05:23:08 +00:00
1 parent 05b25465aa
commit 1365272146
9 files changed
+58 -14

No files matched your search

+35 -1
View File
@@ -6,6 +6,39 @@ this crate adheres to [Semantic Versioning](https://semver.org/).
## [Unreleased] ## [Unreleased]
## [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 +301,8 @@ 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.3.0...HEAD
[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
View File
@@ -27,9 +27,9 @@ dependencies = [
[[package]] [[package]]
name = "alkcall" name = "alkcall"
version = "0.8.1" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf6af1e4af1460480849adf959c972d65deeafc36f4101064ced1ce6d1adfd5b" checksum = "a3562f1f7b348cdeb3d9181eaf57b0a2fb3f988d4280e8e225dadfd7f763cb84"
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.3.0"
dependencies = [ dependencies = [
"alkcall", "alkcall",
"bytes", "bytes",
+2 -2
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "alktunnels" name = "alktunnels"
version = "0.2.1" version = "0.3.0"
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.9.0"
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"
+7
View File
@@ -309,6 +309,13 @@ 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.
## Features ## Features
| Feature | Contents | wasm | | Feature | Contents | wasm |
+1 -1
View File
@@ -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.9.0 (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)
+3 -3
View File
@@ -27,9 +27,9 @@ dependencies = [
[[package]] [[package]]
name = "alkcall" name = "alkcall"
version = "0.8.1" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf6af1e4af1460480849adf959c972d65deeafc36f4101064ced1ce6d1adfd5b" checksum = "a3562f1f7b348cdeb3d9181eaf57b0a2fb3f988d4280e8e225dadfd7f763cb84"
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.3.0"
dependencies = [ dependencies = [
"alkcall", "alkcall",
"bytes", "bytes",
+1 -1
View File
@@ -6,7 +6,7 @@ edition = "2021"
[dependencies] [dependencies]
alktunnels = { path = "../.." } alktunnels = { path = "../.." }
alkcall = "0.8.1" alkcall = "0.9.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
View File
@@ -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",
+2 -1
View File
@@ -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"),
} }
} }