chore: consume alkcall 0.7.0; W1/CF-005 resolved — identity seam validated
alkcall 0.7.0 resolved every open downstream-consumer finding, including this crate's reverse-flow POC W1 (filed as ledger CF-005, with the CF-006 corollary): - CF-005 (a): ServingConfig.identity — the explicit override - CF-005 (b): transport Connection::identity() propagates to channel 0 — set_identity before dialing is the mTLS/QUIC path - CF-006: the establisher/pump handler receive the per-call opener identity (dispatch-resolved), not the install-time context - CF-007: ADR-016 code list completed (doc-only) - F-1 (POC finding): the ChannelPlan type doc now carries the Send + Sync payload constraint alktunnels updates: - Cargo.toml: alkcall 0.6.0 -> 0.7.0 (lockfile resolves 0.7.0) - AGENTS.md convention 11: pin note updated; the 0.7.0 identity surface marked load-bearing (precedence order + per-call opener) - AGENTS.md architecture context: CF-005/CF-006 row added; the 'What the POC does NOT settle' list replaced with the accurate settled state (Phase 0 complete; Phase 1 = the spec) - reverse-poc-summary: W1 marked RESOLVED with the remediation validated from the POC's topology (16 tests over 0.7.0: transport identity alone authorizes, ServingConfig.identity overrides, identity-less fails closed, CF-006 witness); F-1 marked documented upstream; what-the-POC-does-not-validate and verification blocks updated - phase-0-findings OQ-TN-10: reverse POC entry notes the 0.7.0 re-validation and W1 resolution The reverse POC (/workspace/alktunnels-reverse-poc, 8b35818) re- validated: the default harness now authorizes on transport identity alone — the 0.6.0-era auth_token workaround is dead code. Verification: cargo test, clippy --all-targets -D warnings, fmt --check, wasm32 check, doc --no-deps — all clean
This commit is contained in:
@@ -167,14 +167,22 @@ just spawned implementation agents.
|
||||
`alkcall::core`. Do not vendor copies into this crate. alkcall is
|
||||
v0.5.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.6.0"` and bump
|
||||
rather than working around them. Pin `alkcall = "0.7.0"` and bump
|
||||
deliberately. The 0.6.0 establishment surface (ADR-049 + amendment
|
||||
2) is load-bearing for this crate: tunnel opens use
|
||||
`register_openable_with_establisher` so a refused target dial is
|
||||
a typed `channel:open_failed` call error, never a phantom channel,
|
||||
and the establisher returns the dialed handle via
|
||||
`Establishment::new(plan)` (typed-opaque `ChannelPlan`) — no
|
||||
side-channel handoff.
|
||||
`Establishment::new(plan)` (typed-opaque `ChannelPlan` — its
|
||||
`Send + Sync` bound constrains plan payloads; socket handles carry
|
||||
`+ Sync`) — no side-channel handoff. The 0.7.0 identity surface
|
||||
(ledger CF-005/CF-006) is load-bearing for the serving side: a
|
||||
connect-side serving op resolves the caller identity in
|
||||
precedence order — payload `auth_token` >
|
||||
`ServingConfig.identity` > transport identity (set via
|
||||
`Connection::set_identity` before dialing) — and the establisher/
|
||||
pump handler receive the per-call opener identity, not the
|
||||
install-time context.
|
||||
|
||||
12. **BAST document for the wire format** — when the tunnel wire format
|
||||
gains binary framing (if any beyond pass-through), it carries a
|
||||
@@ -286,18 +294,20 @@ non-backend module changes.
|
||||
channel 0; `params` carries the tunnel target)
|
||||
- alkcall ADR-042 — hub relay (byte-for-byte data-channel forwarding
|
||||
with ID rewrite — tunnels traverse relays transparently)
|
||||
- alkcall ledger CF-005/CF-006 (0.7.0) — the connect-side serving
|
||||
identity seam: caller identity precedence (token >
|
||||
`ServingConfig.identity` > transport), per-call opener identity
|
||||
on the open-op hooks (the reverse-flow POC's W1, resolved)
|
||||
- alknet ADR-085 — workspace scope: `alknet/tunnel` was flagged
|
||||
"POC-validated, minimal spec needed, not yet specced"; this crate
|
||||
is that spec
|
||||
- What the POC does NOT settle (open work for Phase 0/1):
|
||||
- UDP and Unix-socket substrates (the POC only exercised TCP) — the
|
||||
pump pattern is expected to generalize, but datagram boundary
|
||||
preservation and addressing bookkeeping are unspecced
|
||||
- The "no forced local binding" requirement (SSH `-R`/dynamic flows)
|
||||
is not covered by the POC at all
|
||||
- Target addressing format (what a tunnel `params` looks like) —
|
||||
alknet ADR-071 §ALPN table noted `alknet/tunnel` as `[0, 1]` data
|
||||
in/out only, but the addressing scheme was never decided
|
||||
- What the POCs settled (Phase 0 complete — 2026-09-07): both POCs
|
||||
ran clean (forward UDP POC + reverse-flow POC; see
|
||||
`docs/research/poc-summary.md` and `reverse-poc-summary.md`). The
|
||||
remaining Phase 1 work is the spec: OQ promotion, params JSON ADR,
|
||||
ALPN ADR, codec ADR (UDP framing mandatory per F-2), and the
|
||||
producer/consumer API surface (the consumer session type owns
|
||||
teardown — reverse POC W3).
|
||||
- If a TODO references a design direction that an ADR has since decided
|
||||
against, the TODO is stale — remove it and align with the ADR. Do not
|
||||
implement the rejected design.
|
||||
Reference in New Issue
Block a user