4 Commits
Author SHA1 Message Date
glm-5.3-flash db051dd068 release: v0.3.1 — the dependency-patch (alkcall 0.10.1 / alktunnels 0.4.1)
- alkcall 0.10.0 -> 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, no change on this crate's paths (relevant in principle to
  the bind-first adopt flow)
- alktunnels 0.4.0 -> 0.4.1: the dependency-patch ride, no
  API/wire change
- fuzz/shared harness alkcall pin bumped in lockstep
- doc pins: AGENTS.md convention 11, README (rides paragraph),
  overview.md dependency tree + feature table; CHANGELOG 0.3.1 entry

Verification: cargo test (145 passed), cargo test --all-features
(638 passed), fuzz corpus replay green, clippy (all-targets +
wasm32-unknown-unknown) -D warnings clean, cargo fmt --check clean,
wasm check green, cargo doc clean, publish dry-run clean
2026-10-22 06:33:12 +00:00
glm-5.3-flash b548a47449 docs: AGENTS.md — the release steps pinned (annotated tags, the v0.3.0 flow) 2026-10-19 03:58:29 +00:00
glm-5.3-flash f56b44589c release: v0.3.0 — the dependency-major (alkcall 0.10.0 / alktunnels 0.4.0)
- alkcall 0.9.0 -> 0.10.0 (the gateway ownership-seam release): the
  GatewayDispatch ownership-provider threading + the loud unwired-spine
  default are not on this crate's paths (no gateway module use; registry
  dispatch on the native wire untouched). Zero API/wire change here.
- alktunnels 0.3.0 -> 0.4.0 (its dependency-major ride): no alktunnels
  API/wire change; the composed providers see none of it.
- fuzz/shared: the harness's own alkcall pin bumped in lockstep (its
  ChannelOpenError construction makes a drifting pin a duplicate-type
  compile failure, not silent drift) — the only bump contact.
- Docs: CHANGELOG 0.3.0 entry, README version blurb (alktunnels style),
  AGENTS.md pin update, deps tree in overview.md.
- Minor-not-patch for the established reason: semver-incompatible
  dependency bumps + this crate's public ChannelOpenError re-exports
  (SocksOpenError::Open/open_ref) are semver-visible downstream.

Verification: cargo test (default 145 unit + suites green), --features
local, --all-features (171 unit + all suites), clippy --all-targets
--all-features -D warnings, fmt --check, wasm32-unknown-unknown check +
clippy, fuzz corpus replay 3/3, publish --dry-run clean.
2026-10-19 03:53:47 +00:00
glm-5.3-flash 9ed3e8c83d release: v0.2.0 — the dependency-major (alkcall 0.9.0 / alktunnels 0.3.0)
- Cargo.toml: alkcall 0.8.1 -> 0.9.0 (crates.io, the stub-sweep
  release) and alktunnels 0.2.1 -> 0.3.0 (its dependency-major ride);
  0.1.0 -> 0.2.0 (semver-incompatible dep bumps + public alkcall
  re-exports -> minor, matching the alktunnels 0.2.1 -> 0.3.0 ride)
- fuzz/shared/Cargo.toml: alkcall 0.9.0 (one alkcall version across
  the path graph)
- No code change: zero contact with the 0.9.0 breaking surface (no
  marked-pub registration, no control-handle subscription, no
  resource enumerator use, no generic op/register announcements;
  Establishment::default() is the only Establishment contact, in the
  session gate)
- CHANGELOG: 0.2.0 section + compare links
- README: the 0.2.0 note
- docs/architecture/overview.md: dep tree + feature table alkcall
  0.9.0 / alktunnels 0.3.0
- AGENTS.md: alkcall refs — v0.8.x/0.8.0 pin -> v0.9.x/0.9.0

Verification: cargo test (145 default / 171 all-features), fuzz/shared
corpus replay (3/3), clippy --all-targets -D warnings (native +
wasm32-unknown-unknown), fmt --check, wasm32 check, cargo doc, and
cargo publish --dry-run --allow-dirty all green
2026-10-14 05:33:44 +00:00
6 changed files with 168 additions and 17 deletions

No files matched your search

+13 -3
View File
@@ -179,9 +179,9 @@ implementation agents.
`Identity`, `IdentityProvider`, `AccessControl`,
`OwnershipProvider`, `HandlerError`, `StreamError` come from
`alkcall::core`. Do not vendor copies into this crate. alkcall is
v0.8.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
rather than working around them. Pin `alkcall = "0.8.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
@@ -279,6 +279,16 @@ cargo clippy --target wasm32-unknown-unknown -- -D warnings
cargo publish --dry-run --allow-dirty # before a release
```
### Release steps (after the version bump + verification)
1. Commit the release (bump + CHANGELOG/README/AGENTS pins).
2. Tag it: `git tag -a vX.Y.Z -m "release: vX.Y.Z — <the tag>"`
— **annotated**, always (v0.1.0/v0.2.0 are lightweight; annotated
since the v0.3.0 release, 2026-10-19).
3. `git push origin main && git push origin vX.Y.Z`.
4. `cargo publish` (no `--allow-dirty` once the tree is clean).
5. Confirm with `cargo search` / `cargo info`.
The corpus replay is the fuzz gate (the alkcall §7.9 posture): it
replays every committed seed through the same invariant functions the
fuzz targets run, on stable, without nightly. Campaigns (nightly,
@@ -312,7 +322,7 @@ dependency-graph failure is expected.
producer/consumer protocol crate on alkcall channels; the backend
inversion point, wasm-clean default crate, and feature-gated local
backend precedents.
- **alkcall** — `/workspace/@alkdev/alkcall` (v0.8.0, crates.io). The
- **alkcall** — `/workspace/@alkdev/alkcall` (v0.9.x, crates.io). The
substrate: call protocol + channels multiplexing. This crate
consumes `alkcall::core` types and the channels
`ChannelCore`/`ChannelClient`/`register_openable_with_establisher`
+111 -1
View File
@@ -6,6 +6,113 @@ 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 →
0.10.0 (the gateway ownership-seam release) and the alktunnels sibling
bumped 0.3.0 → 0.4.0 (its dependency-major ride on alkcall 0.10.0). No
alksocks API change, no wire change; zero code contact with the
0.10.0 breaking surface (compile + suite green unchanged), which is
why this is a minor bump rather than a patch: the semver-incompatible
dependency bumps plus this crate's public re-exports of alkcall types
(`SocksOpenError::Open`/`open_ref` carry `ChannelOpenError`) make it
semver-visible to downstream consumers (matching the alktunnels
0.3.0 → 0.4.0 ride).
### 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: alksocks does not use the gateway module —
SOCKS5 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 (`ChannelClient::open_channel*`,
`ChannelOpenError`, `Establishment::default()`,
`register_openable*`, `pump_bidi`, the `core` types) are unchanged
between 0.9.0 and 0.10.0. 145 default / 171 all-features tests pass;
wasm-clean verified.
- **alktunnels 0.3.0 → 0.4.0** (the dependency-major ride on alkcall
0.10.0). No alktunnels API/wire change; the composed providers see
none of it.
- **fuzz/shared harness pin** (the only bump contact): 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.9.0 → 0.10.0 with the substrate (a drifting pin
produces a duplicate-type compile failure, not silent drift).
## [0.2.0] - 2026-10-14
The dependency-major release: the alkcall substrate bumped 0.8.1 →
0.9.0 (the stub-sweep release) and the alktunnels sibling bumped
0.2.1 → 0.3.0. No alksocks API change, no wire change; no code
contact with the 0.9.0 breaking surface at all (compile + suite green
unchanged), which is why this is a minor bump rather than a patch:
the semver-incompatible dependency bumps plus this crate's public
re-exports of alkcall types make it semver-visible to downstream
consumers (matching the alktunnels 0.2.1 → 0.3.0 ride).
### 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). The 0.9.0
breaking list (`ManagerError::InvalidAdopt` additive,
`RelayError::PubTypedOpen` removal, the
`register_imported`/`register_imported_all` return change,
`Establishment` dropping its `Debug` derive) is untouched by this
crate's API use — `Establishment::default()` is the only
`Establishment` contact, in the session gate. 145 default / 171
all-features tests pass; wasm-clean verified.
- **alktunnels 0.2.1 → 0.3.0** (the dependency-major ride on alkcall
0.9.0). No alktunnels API/wire change; the composed providers see
none of it.
## [0.1.0] - 2026-09-27
The initial release: SOCKS5 (RFC 1928) as a produced resource on
@@ -111,5 +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.1.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
+11 -9
View File
@@ -1,6 +1,6 @@
[package]
name = "alksocks"
version = "0.1.0"
version = "0.3.1"
edition = "2021"
rust-version = "1.88"
license = "MIT OR Apache-2.0"
@@ -28,10 +28,12 @@ composed = ["dep:alktunnels"]
[dependencies]
# The substrate (convention 11): pinned, bump deliberately, never
# transitively. 0.8.1: the duplicate-adopt/open fix (the alkcall 0.8.1
# fuzz finding — the consumer sessions' open/adopt paths are exposed to
# the replayed-open-op scenario its changelog names).
alkcall = "0.8.1"
# 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 —
@@ -46,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.2.1: the fuzzing graduation (its wave-1/wave-2 targets + the
# alkcall 0.8.1 bump), bug-fix release, no API/wire change.
alktunnels = { version = "0.2.1", 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"] }
@@ -56,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.2.1"
alktunnels = "0.4.1"
+29
View File
@@ -226,6 +226,35 @@ and the RFC 1928 handshake state machine. Wire-stable surface: the
`alk/socks5` ALPN, the `channels/socks5/sub` open op with `{}` params,
and the two scope constants — all pinned by ADRs 001–014.
0.2.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) and the alktunnels
bump 0.2.1 → 0.3.0. No alksocks API change, no wire change, zero code
contact with the 0.9.0 breaking surface; minor rather than patch
contact with the 0.9.0 breaking surface; minor rather than patch
because the semver-incompatible dependency bumps + this crate's
alkcall type re-exports make it semver-visible downstream.
0.3.0 rides the alkcall bump 0.9.0 → 0.10.0 (the gateway
ownership-seam release — `GatewayDispatch` ownership-provider
threading and the loud unwired-spine default; the gateway module
isn't on this crate's paths, registry dispatch on the native wire is
untouched) and the alktunnels bump 0.3.0 → 0.4.0 (the dependency-major
ride on alkcall 0.10.0). No alksocks API change, no wire change, zero
code contact with the 0.10.0 breaking surface (the only contact is the
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
+3 -3
View File
@@ -120,7 +120,7 @@ protocol layer; crate-level vocabulary is producer/consumer.
```
alksocks (default — wasm-clean)
├── alkcall 0.8.1 (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.2.1 (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.2.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) |
| `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
+1 -1
View File
@@ -6,7 +6,7 @@ edition = "2021"
[dependencies]
alksocks = { path = "../.." }
alkcall = "0.8.1"
alkcall = "0.10.1"
serde_json = "1"
bytes = "1"
tokio = { version = "1", features = ["rt", "io-util", "macros"], default-features = false }