- All findings re-validated (fresh executable probes for U-1 over real sockets — all four behaviors reproduced; fixed-in-review items confirmed in-tree; battery green 63/70). - U-1 amendment: the review's fix sketch was direction-inverted (frame-on-write describes the TARGET face; UdpHalf's caller is the pump, so poll_write DE-frames channel bytes and poll_read FRAMES target datagrams). Gate 4 and U-3 corrected: the truncation test's assertion surface may change; the 65535 recv scratch is correctness-load-bearing (tokio try_recv truncates silently). - Task fix-udp-framed-adapter updated to the corrected mechanics. - New task decide-take-framed-halves (N-3): the datagram take_halves API posture, to decide before the first external consumer. Verification: cargo test 63/70 both configs, clippy -D warnings (all-targets + wasm32), fmt, cargo doc --no-deps (0 warnings), publish dry-run, taskgraph validate (15 tasks, acyclic).
alktunnels
Arbitrary bidirectional tunnels over alkcall
channels: TCP, UDP, unix sockets, and other stream or datagram
substrates — in the ssh -L / ssh -D / ssh -R sense, without SSH.
A producer/consumer protocol crate riding alkcall channels the same
way alktty does (alk/tty is the
sibling precedent): the producer half registers the alk/tunnel open
op and pumps bytes between the channel and the substrate; the consumer
half is the typed session (TunnelSession) that opens tunnel channels
and owns teardown.
A tunnel is a resource, not an address
Open-op params identify a produced resource + substrate:
{ "resource": "postgres-primary", "substrate": "tcp" }
The producer owns the backing — the consumer never learns an address.
Rich addressing (SOCKS5 ATYP, per-datagram remotes) enters only
through the -D/dynamic composition path, inside the tunnel payload,
never in the wire (ADR-001).
- Wire format:
docs/architecture/wire.md(+ the BAST document atdocs/architecture/bast.md) - Open-op params: ADR-001; codec: ADR-003; ALPN: ADR-002
- Producer shapes: ADR-004; consumer session: ADR-005; ACL: ADR-006
- The full spec set:
docs/architecture/(overview, wire, producer, consumer, six ADRs, OQ tracker)
Status
v0.1.0 — the v1 protocol implementation, Phase-2 complete (spec:
docs/architecture/; reviews: docs/reviews/). The wire surface
(params, ALPN, codec) is one-way-door stable from this point; the
API surface becomes ABI-stable at the first external consumer.
Features
| Feature | Contents | wasm |
|---|---|---|
| (default) | params, wire codec, open-op spec, establisher shapes, TunnelSession — protocol only |
yes |
local |
TCP/UDP/unix dial + listen helpers (real sockets) | no |
Verification
cargo test # default crate (wasm-clean)
cargo test --features local # + real-socket suites
cargo clippy --all-targets -- -D warnings
cargo fmt --check
cargo check --target wasm32-unknown-unknown # the wasm-clean guard
License
MIT OR Apache-2.0