Files
alknet/docs/architecture/crates/core/endpoint.md
T
glm-5.2 bf6ce957c0 docs(arch): tighten tls/endpoint/client specs — remove connect/connect_quic, move CallCredentials to core, shed alknet-call TLS deps
Review of the three new crates (alknet-tls, alknet-endpoint, alknet-client)
+ revised core found compile-blocking inconsistencies, stale claims, and
dep-graph contradictions. All resolved:

Critical:
- C1: CallClient::connect / ChannelClient::connect_quic REMOVED (not
  delegated) — keeping them as thin wrappers over AlknetClient::dial_quic
  would make protocol crates depend on alknet-client, contradicting the
  dep graph. Callers compose dial + take-over (2 lines).
- C2: alknet-client feature gates now pull alknet-core/quinn +
  alknet-core/iroh (for Connection::from_quinn_with_alpn / from_iroh).
- C3: rustls-native-certs + webpki-roots added to alknet-tls deps
  (always-present, not feature-gated — CA-verify path is transport-agnostic).

Warning:
- W1: CallCredentials/RemoteIdentity moved to alknet-core (from
  alknet-call) — the dial must not depend on the call protocol; not a
  two-way-door, it determines the dep graph.
- W2: webpki-roots fallback implemented in spec (ADR-088 §5 added) —
  the code claimed a fallback that never existed; now the store is never
  empty, NoRootAnchors unreachable, containerized deployments work.
- W3: EndpointError removed entirely (BindFailed + HandlerNotFound both
  vestigial after ADR-083); shutdown() is now infallible.
- W4: FingerprintPinVerifier moved to alknet-tls (from alknet-call) —
  alknet-call sheds quinn/rustls/rustls-pemfile/rustls-native-certs
  entirely; CallClient becomes a pure protocol crate.

Plus: ClientError removed (only produced by removed connect); S1
(CallCredentials → ClientVerifierContext mapping + auth_token stripped
at TLS boundary documented); amendment notes on ADR-017, ADR-069,
ADR-080, ADR-082, ADR-087, ADR-090; overview crate graph + README index
updated.

29 files, consistency-reviewed.
2026-07-16 11:33:18 +00:00

1.9 KiB

status, last_updated
status last_updated
deprecated 2026-07-15

Endpoint (moved to alknet-endpoint)

This document is deprecated. The AlknetEndpoint and HandlerRegistry types have been extracted from alknet-core into a new crate alknet-endpoint (ADR-083 Amendment 2026-07-15). EndpointError is removed (both variants were vestigial). The canonical spec is now crates/endpoint/README.md.

The shared types the endpoint imports (ProtocolHandler, Connection, AuthContext, IdentityProvider, DynamicConfig) stay in alknet-core — see core-types.md, auth.md, config.md.

Historical summary

The endpoint was originally in alknet-core/endpoint.rs as the central runtime type — a multi-transport accept-loop runner that dispatches incoming connections by ALPN (ADR-010, ADR-083). ADR-082 extracted the TLS setup code to alknet-tls; ADR-083 restructured the endpoint to take pre-built transports via with_quinn / with_iroh / with_tcp_tls (no TLS config); ADR-083 Amendment 2026-07-15 extracted the endpoint itself into alknet-endpoint so that handler crates no longer transitively link quinn/iroh/rcgen via core.

The endpoint's semantics — ALPN dispatch, HandlerRegistry, accept loops, public dispatch for SSH/WT, graceful shutdown — are unchanged by the extraction. See crates/endpoint/README.md for the current spec and ADR-083 for the full decision.

What stayed in alknet-core

Connection::from_quinn / from_iroh stay in core's types.rs — they are shared-type constructors used by both the endpoint's accept loop (server) and alknet-client's dial (client, ADR-089), gated on core's quinn / iroh features. See ADR-083 §"The quinn feature split".