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:
2026-09-07 17:59:53 +00:00
parent 603f398f6d
commit dc2eab3b21
5 changed files with 114 additions and 70 deletions
+22 -12
View File
@@ -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.