Files
alknet/docs/architecture/open-questions.md
T
glm-5.2 2aa6363e57 docs(arch): sync specs to transport generalization sweep (ADR-064, ADR-065)
Three code commits landed a clean sweep discovered when building an
external app against the crates. This syncs the architecture specs to
match the codebase and amends the affected decisions.

ADR-064 (supersedes ADR-005): irpc was never integrated — no .rs file in
the workspace ever imported it. The wire protocol (wire.rs) is hand-rolled
length-prefixed JSON; the EventEnvelope shape was derived from the
@alkdev/pubsub TypeScript prior art (ADR-013), not from irpc. ADR-005's
premise ('irpc as the call protocol foundation') was never implemented as
stated. Superseded with a clear header; the body is kept as historical
record.

ADR-065: Connection::from_stream / from_bidi — Connection now accepts any
AsyncRead + AsyncWrite pair via ConnectionKind::Stream (yield-once
accept_bi contract: QUIC yields many streams, everything else yields one
then ConnectionClosed). Unblocks TCP+TLS, SSH channel dispatch,
WebTransport streams, and wasm streams through the same HandlerRegistry
as QUIC connections, with zero handler code changes. MockConnection /
ConnectionKind::Mock removed (tests use from_stream with sink/empty).
Stream-level Mock variants renamed to Stream (they were already generic).

Amended ADRs: ADR-003 (irpc removed from dep table), ADR-007 (from_stream
opens the server-side door; MockConnection removed), ADR-010 (TCP+TLS can
now dispatch through the registry via from_bidi; iroh 1.0 migration noted).

Updated specs: core-types.md (Connection/SendStream/RecvStream sections),
endpoint.md (TCP section, iroh note), call-protocol.md, operation-registry
(irpc Integration section replaced), overview.md, http-server.md,
webtransport.md, call README. OQ-09 (WASM) resolution amended: the
Connection door is now open via from_stream; the accept-loop runtime door
remains closed (tokio doesn't run on WASM).

See docs/research/transport-generalization/findings.md for the full trace.
2026-07-09 07:40:51 +00:00

14 KiB

status, last_updated
status last_updated
draft 2026-07-09

Open Questions

Each open question lives in its own file under questions/, named NNN-slug.md (mirroring the ADR convention). This file is the index: theme-grouped tables for scannability, plus a cross-theme Deferred / Blocked section that surfaces the safe-exit deferrals with their blocking conditions inline — so "what's currently parked and why" is answerable at a glance.

Status values:

  • open — Needs to be resolved now. Has a clear path to resolution.
  • resolved — Decided. The resolution is stated cleanly, without caveats about how it could be changed later.
  • deferred(scope) — Cannot be resolved yet. The information doesn't exist. Has a concrete blocking condition (e.g., "blocked on: alknet-agent crate spec"). Not a failure — scope management.
  • partially resolved — Some aspects decided, others deferred or open.
  • dissolved — The question was reframed out of existence (e.g., superseded by an ADR that retires the premise). Kept for reference.

Door type classifications follow ADR-009 — they describe reversal cost (how expensive it is to undo), not urgency:

  • One-way door: Reversal requires rewriting significant code or permanently closes a capability. Getting it wrong is expensive — requires ADR before implementation.
  • Two-way door: Reversal is cheap or additive. Getting it wrong is recoverable — decide, implement, revert if needed.

Door type is separate from whether a decision is made. A two-way door is a decision you make now and can revert later, not a decision to defer. See ADR-009 §"What this framework is NOT."

By Theme

Core Types

OQ Title Status Door Pri
OQ-01 BiStream Type Definition resolved one high
OQ-02 AuthContext Resolution Timing resolved one high

ALPN and Routing

OQ Title Status Door Pri
OQ-03 ALPN String Naming Convention resolved one med
OQ-04 Dynamic Handler Registration at Runtime vs Static at Startup resolved two low

Transport and Endpoint

OQ Title Status Door Pri
OQ-05 Multi-Connectivity Endpoint resolved one high
OQ-06 Server-Side ALPN vs Client-Side ALPN resolved one low

Call Protocol

OQ Title Status Door Pri
OQ-07 Call Protocol Scope Within a Connection resolved two med

Security

OQ Title Status Door Pri
OQ-08 Vault Integration Point resolved one med

Deferred Questions

OQ Title Status Door Pri
OQ-09 WASM Target Boundaries deferred one low
OQ-10 Git Adapter Scope — Smart Protocol Only or Full Server? deferred two low

alknet-core

OQ Title Status Door Pri
OQ-11 Handler-Level Auth Resolution Observability resolved two med
OQ-12 TLS Identity Provisioning in AlknetEndpoint resolved one high
OQ-13 Operation Path Format and Routing Scope resolved two med
OQ-14 Batch Operation Semantics resolved two low

alknet-call

OQ Title Status Door Pri
OQ-15 Call Protocol Client and Adapter Contract resolved one high
OQ-16 Safe Vault Operations for Call Protocol Exposure resolved one high
OQ-17 Abort Cascade Semantics for Nested Calls resolved one/two high
OQ-18 Privilege Model and Authority Context resolved one/two high
OQ-19 Session-Scoped Operation Registries and Agent-Written Operations resolved one/two med

alknet-vault

OQ Title Status Door Pri
OQ-20 Salt/KDF and Encryption Key Derivation Method resolved one/two high
OQ-21 Remote Vault Administration resolved one med
OQ-22 Key Rotation Mechanism resolved one/two med
OQ-23 Handler Identity Registration Path and Composition Authority resolved one/two high
OQ-24 Operation Error Schemas resolved one/two high

Call Client and Adapters

OQ Title Status Door Pri
OQ-25 Remote-Safe Marking Shape for CallClient Peer-Scoped Filtering (Dissolved by ADR-029) dissolved one/two med
OQ-26 OperationAdapter Error Type (AdapterError Variants) resolved two med
OQ-27 from_call Re-Import Trigger resolved two low
OQ-28 from_call Namespace Collision Behavior resolved two low
OQ-29 CallClient TLS Client-Auth and Remote-Identity Verification resolved one/two high
OQ-30 PeerRef::Any Routing Policy resolved two low
OQ-31 services/list-peers Re-Export Semantics resolved two low
OQ-32 Multi-Hop Federation deferred(scope) one/two low
OQ-33 PeerId — Cryptographic Identity vs Stable Logical Identifier resolved one/two high
OQ-34 Persistent Peer Registry (Cross-Node State Storage) resolved one/two med

Storage and Adapters

OQ Title Status Door Pri
OQ-35 API Key Identity vs Peer Identity (Dissolved) dissolved one med
OQ-36 Concrete Persistence Adapter Shapes resolved two med

TLS Identity

OQ Title Status Door Pri
OQ-37 X.509 Outgoing-Only Case (Three Peer Roles) resolved one med

alknet-http

OQ Title Status Door Pri
OQ-38 WebTransport Standalone Relay Service Scope open one/two low
OQ-39 to_openapi Published-Spec Versioning resolved one/two med
OQ-40 reqwest Client Config and Connection Pooling resolved two low
OQ-41 Stream Operators Library deferred(scope) two low

Runtime-Spawned Resources and Ownership

OQ Title Status Door Pri
OQ-42 Dynamic Resource Ownership for Runtime-Spawned Resources resolved one high

alknet-tty

OQ Title Status Door Pri
OQ-43 TtyControl as a Clone trait object resolved one med
OQ-44 Terminal Modes (TTY modes) deferred(scope) two low
OQ-45 Flow Control for High-Throughput stdout resolved two low
OQ-46 Runner API Surface deferred(scope) two low
OQ-47 Stdin Closure Canonical Signal resolved two low

alknet-docker

OQ Title Status Door Pri
OQ-48 Network and Volume Operation Surface deferred(scope) two low
OQ-49 Image Build (buildkit) Scope deferred(scope) two low
OQ-50 Docker System Events Subscription deferred(scope) two low
OQ-51 Container Create Options Surface deferred(scope) two med

Deferred / Blocked

The safe-exit visibility surface. These questions are parked because the information needed to resolve them does not exist yet — each has a concrete blocking condition. They are not failures; they are scope management. See ADR-009 §"Safe Exit: Deferred Decisions." This section exists so "what's currently blocking the architect" is answerable at a glance, not by filtering the tables above.

OQ-09: WASM Target Boundaries

  • Blocked on: A concrete server-side WASM use case, or a deliberate confirmation that WASM stays a client-side design constraint. Tracked as architecture/oq-09-wasm-server-use-case in tasks/architecture/.
  • Priority: low
  • Amendment (2026-07-09): The Connection door is now open via Connection::from_stream (ADR-065) — a Connection can be constructed from any wasm-compatible stream. What remains closed is the accept-loop runtime (tokio::spawn does not run on WASM; PendingRequestMap/CallAdapter use tokio channels). The blocking condition (a concrete server-side WASM use case) is unchanged.
  • Full file: OQ-09

OQ-10: Git Adapter Scope — Smart Protocol Only or Full Server?

  • Blocked on: Speccing the alknet-git crate — resolve this when that crate is specified, not deferred past it. Tracked as architecture/oq-10-git-adapter-spec in tasks/architecture/.
  • Priority: low
  • Full file: OQ-10

OQ-32: Multi-Hop Federation

  • Blocked on: A concrete use case for multi-hop federation. The one-hop model covers all current use cases (head→worker, runner→hub).
  • Priority: low
  • Full file: OQ-32

OQ-41: Stream Operators Library

  • Blocked on: A handler that needs stream operators and finds the existing combinators (Box::pin(stream::iter(...)), async_stream::stream!, futures::stream) insufficient. The operators library is a convenience, not a prerequisite for any handler.
  • Priority: low
  • Full file: OQ-41

OQ-44: Terminal Modes (TTY modes)

  • Blocked on: a concrete mode-control use case (a deployment that needs to set echo/raw/canonical/etc. modes on a PTY, beyond the backend's defaults).
  • Priority: low
  • Full file: OQ-44

OQ-46: Runner API Surface

  • Blocked on: a concrete runner-policy use case that forces the API surface (job management, log persistence, task graph integration).
  • Priority: low
  • Full file: OQ-46

OQ-48: Network and Volume Operation Surface

  • Blocked on: a concrete use case for network or volume management over the call protocol. Dev containers use the default bridge network; hosted services declare networks/volumes in docker compose.
  • Priority: low
  • Full file: OQ-48

OQ-49: Image Build (buildkit) Scope

  • Blocked on: a concrete use case for building images over the call protocol. The current use cases pull pre-built images, not build them.
  • Priority: low
  • Full file: OQ-49

OQ-50: Docker System Events Subscription

  • Blocked on: a concrete use case for prompt stale-ownership cleanup. The base model (ADR-060 §4) tolerates inert stale entries; the events subscription is a refinement.
  • Priority: low
  • Full file: OQ-50

OQ-51: Container Create Options Surface

  • Blocked on: v1 implementation — the create input JSON Schema is finalized when register_docker_ops is written and tested against bollard's Config struct. An architectural decision (ADR-060 §5), not a deferral past implementation.
  • Priority: medium
  • Full file: OQ-51