Arxi Sidecar Architecture
Audience: Engineers implementing or operating
arxi-sidecaras the network-accessible evidence recording service boundary.
Table of Contents
- Executive Overview
- Runtime Composition
- HTTP Surface and Routing
- Security and Resource Controls
- Idempotency and Retry Safety
- Transport and Lifecycle
- Container Packaging and Docker Operations
- Validation and Test Coverage
- File-by-File Cross Reference
Executive Overview
arxi-sidecar is the Arxi HTTP/JSON service runtime that exposes recorder,
query, and bundle workflows over Unix socket and/or TCP listeners.
The sidecar composes RecorderEngine, BundleBuilder, Verifier, and a single
SqliteStore instance under explicit middleware gates for correlation identity,
authentication, enterprise identity/policy, bounds enforcement, idempotency,
and timeout control.
F:crates/arxi-sidecar/src/server.rs L42-L133 F:crates/arxi-sidecar/src/state.rs L29-L56 F:crates/arxi-sidecar-config/src/config.rs
Runtime Composition
Startup flow:
- Load and validate TOML config (
config_version,api.major_version, recorder, transport, security, signer, and limits). - Initialize tracing and open
SqliteStore. - Build recorder runtime components.
- Initialize persistent idempotency manager on
store_meta. - Build
axumrouter with middleware stack. - Bind configured transport listeners and serve until cancellation.
F:crates/arxi-sidecar-config/src/config.rs F:crates/arxi-sidecar-config/src/validation.rs F:crates/arxi-sidecar/src/server.rs L43-L247 F:crates/arxi-sidecar/src/idempotency.rs L61-L138
HTTP Surface and Routing
The router currently exposes:
- Probes:
GET /health,GET /startup,GET /ready - Segment lifecycle:
POST /v1/segments,POST /v1/segments/seal,GET /v1/segments,GET /v1/segments/active - Envelope ingest:
POST /v1/envelopes,POST /v1/envelopes/with-attachments - Query:
POST /v1/query/envelopes - Bundle workflows:
POST /v1/bundles/build,POST /v1/bundles/verify,POST /v1/bundles/inspect - Runtime inspection:
GET /v1/config
F:crates/arxi-sidecar/src/server.rs L135-L160
Health behavior:
GET /healthis a lightweight liveness probe returning process metadata.GET /startupis a startup-completion probe returning startup metadata, including configuredstartup_verification_depth.GET /readyreturns readiness state with dependency-aware fail-closed semantics:503withreason=storage_unavailablewhen store access fails.- Optional
503withreason=request_capacity_exhaustedwhenprobes.ready_fail_on_admission_saturation=trueand admission/execution semaphores are exhausted. - Optional
503withreason=enterprise_control_unavailablewhenprobes.readiness_mode=storage_and_enterprise, enterprise mode is enabled, and control-plane readiness checks fail. 200withready=truein steady state.
F:crates/arxi-sidecar/src/handlers/health.rs L42-L94
Security and Resource Controls
Config Gate
Config validation is fail-closed and enforces:
- strict schema and API versioning,
- recorder ID and auto-seal validity,
- transport host/port constraints,
- non-loopback transport requires
security.mode=tokenand keepsrequire_token_for_non_loopback=true(fail-closed), - token file hardening (
security.token_filecannot be a symlink, must be a regular file, and on Unix must not grant group/other permissions), - signer key parseability,
- request/header/idempotency numeric limits and hard cap checks,
- probe config fail-closed semantics:
probes.enterprise_health_pathmust be absolute/safe andprobes.readiness_mode=storage_and_enterpriserequires enterprise mode not disabled.
F:crates/arxi-sidecar-config/src/config.rs F:crates/arxi-sidecar-config/src/validation.rs
Middleware Stack
Middleware order and controls:
- Request body limit layer (
max_request_body_bytes). - Tracing layer.
- Correlation middleware (server correlation IDs, sanitized client
x-correlation-id, legacyx-request-idcompatibility). - Auth middleware (
Bearertoken mode with constant-time compare and RFC 6750 challenge metadata on401responses). - Enterprise identity middleware (
x-tenant-id,x-principal-id,x-authn-method, optionalx-namespace-id, optional writer lease assertion) for enterprise-enabled modes. - Enterprise policy middleware (control-plane ingress checks for protected
routes plus sidecar boundary hook emission at
admissionandresultphases). - Bounds middleware (header bytes, content negotiation, content-length checks, bounded admission queue, bounded active concurrency, request timeout).
Probe-priority behavior:
/health,/startup, and/readyare exempted from auth, enterprise policy, and bounds gating so liveness/startup/readiness state remains observable under overload or policy failures.
F:crates/arxi-sidecar/src/server.rs L155-L160 F:crates/arxi-sidecar/src/middleware/request_id.rs L15-L30 F:crates/arxi-sidecar/src/middleware/auth.rs L21-L84 F:crates/arxi-sidecar/src/control_plane_bridge.rs F:crates/arxi-sidecar/src/middleware/enterprise.rs F:crates/arxi-sidecar/src/middleware/bounds.rs L21-L172
Enterprise Boundary Controls
When enterprise.mode is enabled, the sidecar adds explicit control-plane
boundary enforcement while preserving recorder/evidence semantics:
-
crates/arxi-sidecar/src/control_plane_bridge.rsis a boundary adapter only. It translates sidecar ingress identities/operations into control-plane admission and hook calls; it does not implement or alter Arxi evidence math. -
Enterprise config is fail-closed: enabled mode requires token security mode, control-plane URL/token configuration, and hardened token file checks.
-
Enterprise policy gate calls
POST /v1/enterprise/ingress/checkbefore protected sidecar operations. -
Managed-cloud mode enforces writer-lease assertion for mutating operations when
require_writer_lease_header=true. -
Sidecar emits deterministic enterprise boundary hooks to
POST /v1/enterprise/sidecar/hooksat:admission(allow/deny/error before handler execution),result(allow/deny/error after handler response status).
-
Hook emission is fail-closed for successful protected operations: if enterprise hook export fails, the sidecar returns an error instead of silently accepting an unaudited success path.
-
Enterprise readiness dependency checks use
probes.enterprise_health_path(default/health) against the configured enterprise control-plane base URL whenprobes.readiness_mode=storage_and_enterprise.
F:crates/arxi-sidecar-config/src/validation.rs F:crates/arxi-sidecar/src/control_plane_bridge.rs F:crates/arxi-sidecar/src/middleware/enterprise.rs
Error Contract
Errors are returned as RFC 9457 Problem Details
(application/problem+json) with stable error codes, retryability metadata,
and server/client correlation fields.
Security posture details:
- malformed JSON rejections are normalized to typed
bad_requestproblem details instead of leaking framework/plaintext extractor failures, - server-side (
5xx) responses suppress internaldetailfields to avoid leaking storage/runtime internals while preserving diagnostics in service logs, 401 unauthorizedresponses include RFC 6750WWW-Authenticatechallenges.
F:crates/arxi-sidecar/src/error.rs L13-L229 F:crates/arxi-sidecar/src/extract.rs
Idempotency and Retry Safety
Mutating endpoints use persistent idempotency state via SqliteStore::store_meta
keys scoped by (recorder_id, method, path, idempotency_key) and canonical
JCS request hashes.
Behavior:
- same key + same hash: replay prior status/body,
- same key + different hash:
409 idempotency_conflict, - storage/index failure: fail-closed
idempotency_unavailable.
Retention is bounded by TTL and idempotency_max_entries with deterministic
eviction.
F:crates/arxi-sidecar/src/idempotency.rs L20-L316
Transport and Lifecycle
Transport modes:
- Unix domain socket,
- TCP listener,
- both simultaneously.
Runtime lifecycle:
- stale Unix socket cleanup before bind (socket-type-validated fail-closed),
- signal-driven cancellation token,
- graceful shutdown per listener with enforced
shutdown_drain_secondstimeout, - Unix socket removal on shutdown path.
F:crates/arxi-sidecar/src/server.rs L163-L262 F:crates/arxi-sidecar/src/shutdown.rs L8-L34
Operational command surface in binary:
- normal service startup with
--config/ARXI_SIDECAR_CONFIG, healthcheckcommand supporting TCP URL and Unix-socket probe modes.
F:crates/arxi-sidecar/src/main.rs L18-L175
Container Packaging and Docker Operations
The repository now ships a first-party sidecar container profile under
docker/sidecar/:
Dockerfile: multi-stage Rust build to distroless nonroot runtime image.docker-compose.yml: local operator profile with explicit UID/GID mapping, bind-mounted config/data/run paths, healthcheck, and bounded port mapping.config/sidecar.toml: container-oriented baseline config with token-mode auth required for non-loopback transport..env.example: canonical environment variable contract for image/tag/paths and UID/GID mapping.
Operator contract:
- mount
token_fileas a regular non-symlink file with owner-only permissions (0600on Unix), - run non-root with host UID/GID mapping so strict token checks remain readable while avoiding root execution,
- treat
docker/sidecar/config/tokenas secret material and keep it out of VCS.
F:docker/sidecar/Dockerfile F:docker/sidecar/docker-compose.yml F:docker/sidecar/config/sidecar.toml F:docker/sidecar/README.md
Validation and Test Coverage
Current sidecar validation stack includes:
- config fail-closed validation assertions (port, header hard cap, auto-seal bounds),
- content-length bounds middleware behavior,
- correlation-id sanitization behavior,
- canonical idempotency request-hash determinism checks.
- generated error-registry compatibility assertions (Docs/generated/arxi/apis/sidecar.errors.json vs runtime baseline).
- restart-boundary idempotency replay/conflict integration checks over real sidecar subprocess + SQLite persistence.
- contract hardening checks for RFC 9457 payload shape, RFC 6750 auth challenge headers, and correlation header propagation.
- probe hardening checks for unauthenticated probe routes and startup probe response contract.
- readiness hardening checks for admission saturation fail-closed behavior and enterprise control-plane dependency mode transitions.
- generated sidecar contract compatibility gates (
openapi/errors/enums/examples/compat) enforced ingenerate/checkorchestration. - optional release perf gate (
ARXI_SIDECAR_PERF_GATE=1) for SLO promotion enforcement, including generation oftarget/sidecar-perf/latest.jsonvia the sidecar perf system-test suite. - system-test sidecar suites for end-to-end HTTP record/seal/build/verify and restart idempotency persistence.
- system-test Docker suite validating Dockerfile/Compose/config hardening plus Docker Compose build/up/down with containerized startup/readiness probes plus open/record/query workflow.
- system-test sidecar perf suite for write/read latency, throughput, memory growth, and overload-429 report fields used by the perf gate.
F:crates/arxi-sidecar-config/src/config/tests.rs F:crates/arxi-sidecar/tests/unit/middleware/bounds/tests.rs F:crates/arxi-sidecar/tests/unit/idempotency/tests.rs F:crates/arxi-sidecar/tests/error_registry_contract.rs F:crates/arxi-sidecar/tests/idempotency_restart.rs F:crates/arxi-sidecar/tests/http_contract_hardening.rs F:scripts/ci/sidecar_contract_gates.py F:scripts/ci/sidecar_perf_gate.py F:scripts/ci/generate_all.sh F:system-tests/tests/suites/sidecar.rs F:system-tests/tests/suites/sidecar_docker.rs F:system-tests/tests/suites/sidecar_perf.rs
File-by-File Cross Reference
| Area | File | Notes |
|---|---|---|
| Crate boundary | crates/arxi-sidecar/src/lib.rs | Public crate entrypoints and module composition. |
| Binary runtime | crates/arxi-sidecar/src/main.rs | CLI, service start, and healthcheck behavior. |
| Config + validation | crates/arxi-sidecar-config/src/config.rs, crates/arxi-sidecar-config/src/validation.rs, crates/arxi-sidecar-config/src/schema.rs, crates/arxi-sidecar-config/src/compat.rs | Canonical sidecar config model, startup fail-closed validation, and deterministic config projection artifacts. |
| Server bootstrap | crates/arxi-sidecar/src/server.rs | Store/runtime wiring, router build, transport lifecycle. |
| Shared state | crates/arxi-sidecar/src/state.rs | Runtime handles and concurrency gates. |
| Error surface | crates/arxi-sidecar/src/error.rs | Structured API error model. |
| JSON extractors | crates/arxi-sidecar/src/extract.rs | Strict JSON boundary normalization for typed parse failures. |
| Runtime contract baseline | crates/arxi-sidecar/src/contract.rs | Exported API version and error-registry constants used by contract tests. |
| Idempotency | crates/arxi-sidecar/src/idempotency.rs | Persistent replay/conflict semantics and canonical request hash. |
| Enterprise policy gate | crates/arxi-sidecar/src/control_plane_bridge.rs | Enterprise boundary adapter only: control-plane ingress checks and sidecar hook emission client. |
| Auth middleware | crates/arxi-sidecar/src/middleware/auth.rs | Bearer token checks with constant-time compare. |
| Enterprise middleware | crates/arxi-sidecar/src/middleware/enterprise.rs | Enterprise identity extraction and boundary enforcement/hook sequencing. |
| Bounds middleware | crates/arxi-sidecar/src/middleware/bounds.rs | Header/content/queue/concurrency/timeout controls. |
| Docker packaging | docker/sidecar/Dockerfile, docker/sidecar/docker-compose.yml, docker/sidecar/config/sidecar.toml, docker/sidecar/README.md | First-party container build/runtime profile and operator usage guide. |
| Sidecar unit-test modules | crates/arxi-sidecar-config/src/config/tests.rs, crates/arxi-sidecar/tests/unit/idempotency/tests.rs, crates/arxi-sidecar/tests/unit/middleware/bounds/tests.rs | Unit tests are externalized from production source files for cleaner file organization. |
| Sidecar Docker system-tests | system-tests/tests/suites/sidecar_docker.rs | Dockerfile/Compose hardening and containerized sidecar workflow validation. |
| Probe handlers | crates/arxi-sidecar/src/handlers/health.rs | Liveness/startup/readiness behavior, including saturation and enterprise dependency readiness modes. |
| Contract conformance tests | crates/arxi-sidecar/tests/error_registry_contract.rs, crates/arxi-sidecar/tests/idempotency_restart.rs, crates/arxi-sidecar/tests/http_contract_hardening.rs | Registry, restart-idempotency, and HTTP boundary hardening checks. |
| Contract CI gates | scripts/ci/sidecar_contract_gates.py, scripts/ci/sidecar_perf_gate.py, scripts/ci/generate_all.sh | Additive-only compatibility plus optional release perf-gate orchestration. |
| Sidecar system tests | system-tests/tests/suites/sidecar.rs, system-tests/tests/suites/sidecar_perf.rs | End-to-end HTTP lifecycle coverage and perf report generation for SLO gating. |
| Security alignment | Docs/security/threat_model.md | Authoritative threat mapping and residual risks. |