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.
1.4 KiB
1.4 KiB
OQ-15: Call Protocol Client and Adapter Contract
- Origin: call-protocol.md, operation-registry.md, ADR-013
- Status: resolved
- Door type: One-way
- Priority: high
- Resolution:
CallClienttakes over transport connections (spawn_dispatchtransport-agnostic primary;connectremoved per ADR-089 §5 — dial extracted toAlknetClient) and shares the dispatch loop withCallAdapter— both sides can send and receivecall.requestedonce connected. Connection direction (who opened the connection) is independent of call direction (who calls whom).from_calladapter discovers remote operations viaservices/list+services/schemaand registers them with forwarding handlers — same pattern asfrom_openapiandfrom_mcp.to_openapiandto_mcpproject local operations to external protocols. Adapter contract trait (OperationAdapter) producesHandlerRegistrationbundles. Cross-node call tree: abort cascade (ADR-016) propagates across node boundaries throughfrom_callhandlers. Credentials for connections come from capabilities (ADR-014). Adapter-registered operations areInternalby default (ADR-015). See ADR-017. - Cross-references: ADR-005, ADR-013, ADR-014, ADR-015, ADR-016, ADR-017, call-protocol.md, operation-registry.md