diff --git a/AGENTS.md b/AGENTS.md index 81eeb16..6a1dce0 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -181,7 +181,7 @@ implementation agents. `alkcall::core`. Do not vendor copies into this crate. alkcall is v0.10.x — breaking changes are expected at this major-zero stage; this is an early consumer, so we find and fix issues upstream - rather than working around them. Pin `alkcall = "0.10.0"` and bump + rather than working around them. Pin `alkcall = "0.10.1"` and bump deliberately. The establishment surface (alkcall ADR-049 + amendments) is load-bearing for this crate: SOCKS5 session opens use `register_openable_with_establisher` so a refused/auth-failed diff --git a/CHANGELOG.md b/CHANGELOG.md index 77bd93f..5d8a404 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,43 @@ this crate adheres to [Semantic Versioning](https://semver.org/). ## [Unreleased] +## [0.3.1] - 2026-10-22 + +The dependency-patch release: the alkcall substrate bumped 0.10.0 → +0.10.1 (the adoption-window ordering fix) and the alktunnels sibling +bumped 0.4.0 → 0.4.1 (its dependency-patch ride). No alksocks API +change, no wire change; the fix surface is private upstream, so there +is no change on this crate's paths. Patch rather than minor: both +dependency bumps are semver-compatible (0.10.x → 0.10.1, 0.4.x → +0.4.1), matching the alktunnels 0.4.0 → 0.4.1 ride. + +### Changed + +- **alkcall 0.10.0 → 0.10.1** (crates.io). The adoption-window + ordering fix (review 013, routed from alkgit's wave-2 gate): a + chunk routed by the channels demux inside the `adopt_channel` + install→drain window was delivered ahead of earlier-parked early + arrivals, inverting the channel's byte-stream order (observed + downstream as pkt-line desync in alkgit under multi-process load), + and a related loss variant (a chunk parked after the drain had + removed the queue, parked forever) is closed. The install and its + park-drain are one atomic section; no await runs inside it. 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 — + the fix surface is private (`ChannelState`), the behavior only + strengthens. No API, wire-format, or documented-cap behavior change + upstream. +- **alktunnels 0.4.0 → 0.4.1** (the dependency-patch ride on alkcall + 0.10.1). No alktunnels API/wire change; the composed providers see + none of it. +- **fuzz/shared harness pin** (the only file-level contacts are the + `Cargo.toml`s/`Cargo.lock` — plus the doc pins): the harness declares + its own `alkcall` pin (it constructs `ChannelOpenError` values for + the invariant functions), so the two pins must stay in lockstep — + bumped 0.10.0 → 0.10.1 with the substrate (a drifting pin produces a + duplicate-type compile failure, not silent drift). + ## [0.3.0] - 2026-10-19 The dependency-major release: the alkcall substrate bumped 0.9.0 → @@ -181,6 +218,8 @@ campaigns clean, no crate bugs. [`AssociateSession`]: https://docs.rs/alksocks/latest/alksocks/consumer/struct.AssociateSession.html [`BindSession`]: https://docs.rs/alksocks/latest/alksocks/consumer/struct.BindSession.html -[Unreleased]: https://git.alk.dev/alkdev/alksocks/compare/v0.2.0...HEAD +[Unreleased]: https://git.alk.dev/alkdev/alksocks/compare/v0.3.0...HEAD +[0.3.1]: https://git.alk.dev/alkdev/alksocks/compare/v0.3.0...v0.3.1 +[0.3.0]: https://git.alk.dev/alkdev/alksocks/compare/v0.2.0...v0.3.0 [0.2.0]: https://git.alk.dev/alkdev/alksocks/compare/v0.1.0...v0.2.0 [0.1.0]: https://git.alk.dev/alkdev/alksocks/releases/tag/v0.1.0 \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index 728aa85..16d00bd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "alksocks" -version = "0.3.0" +version = "0.3.1" edition = "2021" rust-version = "1.88" license = "MIT OR Apache-2.0" @@ -28,12 +28,12 @@ composed = ["dep:alktunnels"] [dependencies] # The substrate (convention 11): pinned, bump deliberately, never -# transitively. 0.10.0: the gateway ownership-seam release (review 012, -# `GatewayDispatch::with_ownership_provider` + the loud unwired-spine -# default) — none of it on this crate's paths; the gateway module isn't -# a feature this crate enables and registry dispatch on the native wire -# is untouched. -alkcall = "0.10.0" +# transitively. 0.10.1: the adoption-window ordering fix (review 013, +# routed from alkgit's wave-2 gate) — install+park-drain is one atomic +# section in the channels demux; the fix surface is private upstream, so +# no change on this crate's paths (relevant in principle to the +# bind-first adopt flow; the behavior only strengthens). +alkcall = "0.10.1" tokio = { version = "1", default-features = false, features = ["rt", "sync", "io-util", "macros", "time"] } # The fork's declared logging seam (rfc1928.md: upstream `log` calls # were dropped or re-pointed here); no source file references it yet — @@ -48,9 +48,9 @@ futures = { version = "0.3", default-features = false, features = ["std"] } # The sibling crate (the composed egress's direct-op vehicle — ADR-008/ # ADR-009): rides `composed` alone. Pinned; bump deliberately # (convention 11's deliberate-bump rule applies to siblings too). -# 0.4.0: the dependency-major (the alkcall 0.10.0 bump), bug-fix ride, -# no alktunnels API/wire change. -alktunnels = { version = "0.4.0", optional = true } +# 0.4.1: the dependency-patch ride on alkcall 0.10.1, no alktunnels +# API/wire change. +alktunnels = { version = "0.4.1", optional = true } [dev-dependencies] tokio = { version = "1", features = ["full", "test-util", "macros"] } @@ -58,4 +58,4 @@ tracing-subscriber = { version = "0.3", features = ["env-filter"] } # The composed suite's topology (the alktunnels direct-op producer) — # dev-only: the test binary gates itself on the `composed` feature # (`#![cfg(feature = "composed")]`), the dev-dep keeps it compiling. -alktunnels = "0.4.0" +alktunnels = "0.4.1" diff --git a/README.md b/README.md index 8486275..4199ed0 100644 --- a/README.md +++ b/README.md @@ -246,6 +246,15 @@ fuzz/shared harness's own alkcall pin — a mechanical lockstep bump); minor rather than patch for the same semver-visible-dependency reason as 0.2.0. +0.3.1 rides the alkcall bump 0.10.0 → 0.10.1 (the +adoption-window ordering fix — a chunk routed inside the demux's +install→drain window could be delivered ahead of earlier-parked +early arrivals, inverting byte-stream order; relevant in principle +to the bind-first adopt flow) and the alktunnels bump 0.4.0 → 0.4.1 +(its dependency-patch ride). The fix surface is private upstream, so +there is no change on this crate's paths; patch rather than minor +because both dependency bumps are semver-compatible. + ## Verification ```bash diff --git a/docs/architecture/overview.md b/docs/architecture/overview.md index ee9dce3..bf05fec 100644 --- a/docs/architecture/overview.md +++ b/docs/architecture/overview.md @@ -120,7 +120,7 @@ protocol layer; crate-level vocabulary is producer/consumer. ``` alksocks (default — wasm-clean) -├── alkcall 0.10.0 (core types: Connection, ProtocolHandler, BiStream, +├── alkcall 0.10.1 (core types: Connection, ProtocolHandler, BiStream, │ AuthContext, Identity, AccessControl, OwnershipProvider; │ channels: ChannelCore/ChannelClient, │ register_openable_with_establisher, pump_bidi, @@ -135,7 +135,7 @@ alksocks (local feature) — non-wasm by design the first-party local backends + front doors alksocks (composed feature) -└── adds: alktunnels 0.4.0 (the direct op egress; the bind-first +└── adds: alktunnels 0.4.1 (the direct op egress; the bind-first listen accept; ADR-008's composed providers) — its default crate is wasm-clean; the composed providers use only the ungated channels surface (verify with the wasm check) @@ -156,7 +156,7 @@ differential-testing behavioral reference. |---------|----------|------| | *(default)* | the RFC 1928 core (`src/rfc1928/`, ADR-013 — codecs, typestate), wire codec, open-op spec, the three seams' traits/types, producer + consumer session types — protocol only; zero kernel-net code, wasm-clean by construction | yes | | `local` | the crate's first-party local backends: TCP dial, UDP egress socket, BIND `TcpListener` accept, the front doors (consumer + producer local shapes); brings `tokio/net` + `socket2` into the graph | no (build error on wasm, the alktty posture) | -| `composed` | the composed providers over alktunnels 0.4.0: direct-op egress (lazy destination→tunnel table), bind-first listen accept — adds the alktunnels dep | yes (alktunnels' default crate is wasm-clean; the composed providers use only its ungated channels surface — verify with the wasm check at implementation) | +| `composed` | the composed providers over alktunnels 0.4.1: direct-op egress (lazy destination→tunnel table), bind-first listen accept — adds the alktunnels dep | yes (alktunnels' default crate is wasm-clean; the composed providers use only its ungated channels surface — verify with the wasm check at implementation) | ## Module Map diff --git a/fuzz/shared/Cargo.toml b/fuzz/shared/Cargo.toml index eb6d4a0..2dc8a24 100644 --- a/fuzz/shared/Cargo.toml +++ b/fuzz/shared/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [dependencies] alksocks = { path = "../.." } -alkcall = "0.10.0" +alkcall = "0.10.1" serde_json = "1" bytes = "1" tokio = { version = "1", features = ["rt", "io-util", "macros"], default-features = false }