Goal
Middleware adapters + WS transport.
Sub-PRs
- 4A:
ARCPWebSocketClient — URLSessionWebSocketTask-backed client transport. Linux fallback if Phase 3 verify-before-commit fails (websocket-kit as escape hatch)
- 4B:
ARCPVapor — Vapor 4.x WS upgrade attach point; Host-header allowlist; onClose → session-close wiring
- 4C:
ARCPHummingbird — Hummingbird 2.x via hummingbird-websocket. Router-group attachment
- 4D:
ARCPNIO — Raw SwiftNIO. NIOAsyncChannel-based. Framework-free seam
- 4E:
ARCPOTel — swift-distributed-tracing + slashmo/swift-otel. Span per envelope; v1.1 span attributes (arcp.lease.expires_at, arcp.budget.remaining). traceparent extracted from envelope extensions["x-vendor.opentelemetry.tracecontext"]
- 4F:
ARCPStoreSQLite — Opt-in SQLite-backed event log + resume buffer
Goal
Middleware adapters + WS transport.
Sub-PRs
ARCPWebSocketClient—URLSessionWebSocketTask-backed client transport. Linux fallback if Phase 3 verify-before-commit fails (websocket-kitas escape hatch)ARCPVapor— Vapor 4.x WS upgrade attach point; Host-header allowlist;onClose→ session-close wiringARCPHummingbird— Hummingbird 2.x viahummingbird-websocket. Router-group attachmentARCPNIO— Raw SwiftNIO.NIOAsyncChannel-based. Framework-free seamARCPOTel—swift-distributed-tracing+slashmo/swift-otel. Span per envelope; v1.1 span attributes (arcp.lease.expires_at,arcp.budget.remaining).traceparentextracted from envelopeextensions["x-vendor.opentelemetry.tracecontext"]ARCPStoreSQLite— Opt-in SQLite-backed event log + resume buffer