Arquitectura del Sidecar del Grabador
Audience: Engineers implementing or operating
recorder-sidecaras the límite del servicio de grabación de evidencia accesible a través de la red.
Tabla de Contenidos
- Resumen Ejecutivo
- Composición en Tiempo de Ejecución
- HTTP Superficie y Enrutamiento
- Controles de Seguridad y Recursos
- Idempotencia y Seguridad de Reintentos
- Transporte y Ciclo de Vida
- Empaque de Contenedores y Operaciones de Docker
- Validación y Cobertura de Pruebas
- Referencia Cruzada Archivo por Archivo
Resumen Ejecutivo
recorder-sidecar es el servicio de tiempo de ejecución HTTP/JSON del Recorder que expone flujos de trabajo de grabación, consulta y paquete a través de sockets Unix y/o oyentes TCP.
El sidecar compone RecorderEngine, BundleBuilder, Verifier, y una única instancia de SqliteStore bajo puertas de middleware explícitas para identidad de correlación, autenticación, identidad/política empresarial, aplicación de límites y control de tiempo de espera. La ingestión de sobres mutantes ahora fluye a través de una cola limitada y un tiempo de ejecución de escritor autoritativo único.
F:crates/recorder-sidecar/src/server.rs L42-L133 F:crates/recorder-sidecar/src/state.rs L29-L56 F:crates/recorder-sidecar-config/src/config.rs
Composición en Tiempo de Ejecución
Flujo de inicio:
- Load and validate TOML config (
config_version,api.major_version, Cargar y validar la configuración TOML (config_version,api.major_version, recorder, transport, security, signer y limits). - Inicializar el seguimiento y abrir
SqliteStore. - Construir componentes de tiempo de ejecución del grabador.
- Inicializar el gateway de ingestión limitado + tarea de tiempo de ejecución de escritor dedicado.
- Construir el enrutador
axumcon la pila de middleware. - Vincular los oyentes de transporte configurados y servir hasta la cancelación.
F:crates/recorder-sidecar-config/src/config.rs F:crates/recorder-sidecar-config/src/validation.rs F:crates/recorder-sidecar/src/server.rs L43-L247 F:crates/recorder-sidecar/src/ingest.rs
HTTP Superficie y Enrutamiento
El enrutador actualmente expone:
- Sondeos:
GET /health,GET /startup,GET /ready - Observabilidad de segmentos:
GET /v1/segments,GET /v1/segments/active - Envelope ingest:
POST /v1/envelopes, Ingesta de sobres:POST /v1/envelopes,POST /v1/envelopes/with-attachments - Consulta:
POST /v1/query/envelopes - Bundle workflows:
POST /v1/bundles/build,POST /v1/bundles/verify, Agrupar flujos de trabajo:POST /v1/bundles/build,POST /v1/bundles/verify,POST /v1/bundles/inspect - Ingesta de compatibilidad:
POST /v1/ingest/otel(exportación OTel JSON v1) - Inspección en tiempo de ejecución:
GET /v1/config
F:crates/recorder-sidecar/src/server.rs L135-L160 F:crates/recorder-sidecar/src/handlers/otel.rs
Notas del contrato de observabilidad de segmentos:
GET /v1/segments/activenow returns the same paginated list shape asGET /v1/segments(no es un recurso singleton), filtrado astatus=open.- Segment response objects now include stream identity
(
stream_key.tenant_id,stream_key.recorder_id) to make per-stream roll estado explícito en el límite de la API.
F:crates/recorder-sidecar/src/handlers/segment.rs
Destacados del contrato de solicitud de mutación:
Idempotency-Keyes requerido para los endpoints de mutación.- Las rutas de sobre requieren
tenant_idyrecorder_iden los cuerpos de las solicitudes. recorder_iddebe coincidir con la identidad del grabador de sidecar configurado.- In enterprise-enabled modes, mutating envelope routes require
x-tenant-idenlace de encabezado/cuerpo.
Comportamiento de salud:
GET /healthes una verificación de disponibilidad ligera que devuelve metadatos del proceso.GET /startupis a startup-completion probe returning startup metadata,GET /startupes una sonda de finalización de inicio que devuelve metadatos de inicio, incluyendo lastartup_verification_depthconfigurada.GET /readyreturns readiness state with dependency-aware fail-closed semantics:- 503 con razón=storage_unavailable cuando falla el acceso a la tienda.
- Optional
503withreason=request_capacity_exhaustedwhenprobes.ready_fail_on_admission_saturation=trueand admission/execution los semáforos están agotados. - Optional
503withreason=enterprise_control_unavailablewhenprobes.readiness_mode=storage_and_enterprise, enterprise mode is enabled, Opcional503conreason=enterprise_control_unavailablecuandoprobes.readiness_mode=storage_and_enterprise, el modo empresarial está habilitado y las comprobaciones de disponibilidad del plano de control fallan. - 200 con ready=true en estado estable.
F:crates/recorder-sidecar/src/handlers/health.rs L42-L94
Controles de Seguridad y Recursos
Config Gate
La validación de la configuración es de cierre seguro y aplica:
- esquema estricto y versionado de API,
- validez del ID del grabador y del auto-sello,
- restricciones de host/puerto de transporte,
- non-loopback transport requires
security.mode=tokenand keeps el transporte no de bucle requieresecurity.mode=tokeny mantienerequire_token_for_non_loopback=true(cerrado por defecto), - token file hardening (
security.token_filecannot be a symlink, must be a endurecimiento del archivo de token (security.token_fileno puede ser un enlace simbólico, debe ser un archivo regular y en Unix no debe otorgar permisos de grupo/otros), - Secret token paths are opened with descriptor-bound hardening
(
O_NOFOLLOWon Unix,FILE_FLAG_OPEN_REPARSE_POINTon Windows) and validado en manejadores abiertos para cerrar carreras de verificación/uso, - bounded hostile file reads (sidecar config <= 1 MiB, token/control-plane archivos de token <= 4096 bytes, archivo de clave del firmante <= 65536 bytes),
- analizabilidad de la clave del firmante,
- límites numéricos de idempotencia en la solicitud/cabecera y verificaciones de límite máximo,
- probe config fail-closed semantics:
probes.enterprise_health_pathmust be absolute/safe andprobes.readiness_mode=storage_and_enterpriserequires enterprise mode not deshabilitado.
F:crates/recorder-sidecar-config/src/config.rs F:crates/recorder-sidecar-config/src/validation.rs
Middleware Stack
Orden y controles del middleware:
- Capa de límite del cuerpo de la solicitud (
max_request_body_bytes). - Capa de trazado.
- Correlation middleware (server correlation IDs, sanitized client
Middleware de correlación (IDs de correlación del servidor,
x-correlation-idsanitizado, compatibilidad conx-request-idheredado). - Auth middleware (
Bearertoken mode with constant-time compare and RFC 6750 Middleware de autenticación (Bearertoken en modo con comparación en tiempo constante y metadatos de desafío RFC 6750 en respuestas401). - Enterprise identity middleware (
x-tenant-id,x-principal-id,x-authn-method, optionalx-namespace-id, optional writer lease assertion) para modos habilitados para empresas. - Enterprise policy middleware (control-plane ingress checks for protected
routes plus sidecar boundary hook emission at
admissionandresultfases). - Bounds middleware (header bytes, content negotiation, content-length checks, Middleware de límites (bytes de encabezado, negociación de contenido, verificaciones de longitud de contenido, cola de admisión limitada, concurrencia activa limitada, tiempo de espera de solicitud).
Comportamiento de prioridad de sondeo:
/health,/startup, and/readyare exempted from auth, enterprise policy, and bounds gating so liveness/startup/readiness state remains observable under sobrecarga o fallos de política.
F:crates/recorder-sidecar/src/server.rs L155-L160 F:crates/recorder-sidecar/src/middleware/request_id.rs L15-L30 F:crates/recorder-sidecar/src/middleware/auth.rs L21-L84 F:crates/recorder-sidecar/src/control_plane_bridge.rs F:crates/recorder-sidecar/src/middleware/enterprise.rs F:crates/recorder-sidecar/src/middleware/bounds.rs L21-L172 F:crates/recorder-sidecar-config/src/media_types.rs
Política estricta de tipo de medio fuente:
- request-body routes use a centralized allowlist from
recorder-sidecar-config::políticas_de_tipo_de_medio_de_solicitud_de_sidecar, Content-Typeparsing is strict fail-closed (application/jsonwith opcionalcharset=utf-8solamente),Acceptel análisis es estricto y falla cerrado (application/jsono*/*solamente),- generated sidecar OpenAPI/compat artifacts and CI gates consume the same política de tipo de medio fuente para prevenir la desviación de tiempo de ejecución/contrato.
Controles de Límite Empresarial
Cuando enterprise.mode está habilitado, el sidecar añade un control explícito de la aplicación de límites del plano de control mientras preserva la semántica del grabador/evidencia:
-
crates/recorder-sidecar/src/control_plane_bridge.rsis a boundary adapter only. It translates sidecar ingress identities/operations into control-plane admisión y llamadas de gancho; no implementa ni altera la matemática de evidencia del Grabador. -
Enterprise config is fail-closed: enabled mode requires token security mode, La configuración empresarial es de cierre en caso de fallo: el modo habilitado requiere el modo de seguridad de token, la configuración de URL/token del plano de control y verificaciones de archivos de token endurecidos.
-
Enterprise policy gate calls Llamadas de puerta de política empresarial
POST /v1/enterprise/ingress/checkantes de las operaciones de sidecar protegidas. -
Sidecar ingress operation vocabulary exported to enterprise control-plane is restricted to active v1 routes:
recorder.record_envelope,recorder.record_envelope_with_attachments,recorder.ingest_otel,recorder.query_envelopes,recorder.build_bundle,recorder.verify_bundle, andrecorder.inspect_bundle. Las rutas de segmentos mutantes eliminadas no están incluidas en este vocabulario. -
Managed-cloud mode enforces writer-lease assertion for mutating operations El modo de nube gestionada impone la afirmación de arrendamiento de escritor para operaciones mutantes cuando
require_writer_lease_header=true. -
Sidecar emits deterministic enterprise boundary hooks to
POST /v1/enterprise/sidecar/hooksat:- admisión (permitir/negar/error antes de la ejecución del controlador),
- resultado (permitir/negar/error después del estado de respuesta del controlador).
-
Hook emission is fail-closed for successful protected operations: if enterprise hook export fails, the sidecar returns an error instead of silently accepting un camino de éxito no auditado.
-
Enterprise readiness dependency checks use
probes.enterprise_health_path(default/health) against the configured enterprise control-plane base URL when Las comprobaciones de dependencia de preparación empresarial utilizanprobes.enterprise_health_path(por defecto/health) contra la URL base del plano de control empresarial configurada cuandoprobes.readiness_mode=storage_and_enterprise.
F:crates/recorder-sidecar-config/src/validation.rs F:crates/recorder-sidecar/src/control_plane_bridge.rs F:crates/recorder-sidecar/src/middleware/enterprise.rs
Error de Contrato
Los errores se devuelven como Detalles del Problema RFC 9457 (application/problem+json) con códigos de error estables, metadatos de reintento y campos de correlación entre servidor y cliente.
Detalles de la postura de seguridad:
- malformed JSON rejections are normalized to typed
bad_requestproblem details los rechazos de JSON malformado se normalizan a un problema de tipobad_requestdetalles en lugar de filtrar fallos del extractor de marco/texto plano, - server-side (
5xx) responses suppress internaldetailfields to avoid leaking storage/runtime internals while preserving diagnostics in service registros, 401 unauthorizedlas respuestas incluyen desafíosWWW-Authenticatede la RFC 6750.
F:crates/recorder-sidecar/src/error.rs L13-L229 F:crates/recorder-sidecar/src/extract.rs
Idempotencia y Seguridad de Reintentos
POST /v1/envelopes y POST /v1/envelopes/with-attachments ahora envían comandos normalizados a una cola en memoria limitada (IngestGateway) y son procesados por un entorno de ejecución de escritor único dedicado (IngestWriterRuntime).
La idempotencia de propiedad del escritor se persiste en idempotency_entries, delimitada por: (stream_tenant_id, stream_recorder_id, endpoint, idempotency_key) más el hash de solicitud canónica.
Comportamiento del escritor de ruta caliente:
- los controladores mutantes encolan solo comandos normalizados,
- writer-native sealing computes deterministic attachment refs, content hash, cadena hash, secuencia de flujo y recibos,
- one SQLite transaction per micro-batch persists envelopes, projection rows, entradas de idempotencia, estado de flujo y transiciones de segmento de manera atómica.
- stream state load/create is performed once per stream per transaction so segment roll paths cannot open orphan zero-envelope segments before stream persistencia del puntero; esto preserva la invariante de reinicio de segmento único abierto.
Comportamiento:
- misma clave + mismo hash: repetir recibo durable previo (
idempotency_outcome=replayed), - misma clave + hash diferente:
409 idempotency_conflict, - saturación de la cola: fail-fast
429 too_many_requests, - fallo de almacenamiento: fail-closed
idempotency_unavailable/storage_unavailable.
La retención está limitada por ingest.idempotency_ttl_seconds y ingest.idempotency_max_entries_per_stream. La limpieza de retención del escritor se aplica en dos fases dentro de la misma transacción:
- limpieza de caducidad por
expires_at_unix, - overflow cleanup by ordered offset delete over
created_at_unix DESC. This path relies onSQLitestream-scope ordering indexidx_idempotency_stream_created(stream_tenant_id, stream_recorder_id, created_at_unix DESC)para evitar picos de latencia de recorte inducidos por la profundidad de la historia.
F:crates/recorder-sidecar/src/ingest.rs F:crates/recorder-sidecar/src/handlers/envelope.rs
Ruta de compatibilidad de ingestión de OTel:
POST /v1/ingest/otelingests OTel JSON export payloads throughrecorder-otel-adapterwith deterministic mapping and strict-fail record validación.- Route behavior is additive under
/v1, requiresIdempotency-Key, and reutiliza controles de autenticación/empresa/límites/tiempo de espera/correlación de sidecar. - La respuesta en tiempo de ejecución incluye la versión de mapeo y los conteos de ingestión deterministas.
F:crates/recorder-otel-adapter/src/adapter.rs
Transporte y Ciclo de Vida
Modos de transporte:
- Socket de dominio Unix,
- Escuchador TCP,
- ambos simultáneamente.
Ciclo de vida en tiempo de ejecución:
- limpieza de sockets Unix obsoletos antes de la vinculación (fallo cerrado validado por tipo de socket),
- token de cancelación impulsado por señales,
- cierre elegante por oyente con un tiempo de espera
shutdown_drain_secondsimpuesto, - Eliminación del socket de Unix en la ruta de apagado.
F:crates/recorder-sidecar/src/server.rs L163-L262 F:crates/recorder-sidecar/src/shutdown.rs L8-L34
Superficie de comando operativo en binario:
- inicio de servicio normal con
--config/RECORDER_SIDECAR_CONFIG, healthcheckcomando que soporta modos de sondeo TCP URL y Unix-socket.
F:crates/recorder-sidecar/src/main.rs L18-L175
Empaque de Contenedores y Operaciones de Docker
El repositorio ahora incluye un perfil de contenedor sidecar de primera parte en docker/sidecar/:
Dockerfile: construcción de Rust de múltiples etapas para una imagen de tiempo de ejecución sin raíz y sin distribución.docker-compose.yml: local operator profile with explicit UID/GID mapping, bind-mounted config/data/run paths, tmpfs-backed token target path, Docker ruta de fuente secreta, verificación de salud y mapeo de puerto limitado.config/sidecar.toml: container-oriented baseline config with token-modeconfig/sidecar.toml: configuración base orientada a contenedores con autenticación en modo token requerida para transporte no de bucle invertido..env.example: canonical environment variable contract for image/tag/paths y mapeo de fuente de UID/GID + token-secreto.
Contrato de operador:
- supply token material through a Docker secret source file
(
RECORDER_SIDECAR_TOKEN_SECRET_FILE), - bootstrap writes token material to
/work/secrets/tokenin tmpfs with permisos solo para el propietario (0600en Unix) antes del inicio del sidecar, - run non-root with host UID/GID mapping so strict token checks remain readable ejecutar sin privilegios de root con mapeo de UID/GID del host para que las verificaciones de token estrictas sigan siendo legibles mientras se evita la ejecución como root,
- treat
docker/sidecar/secrets/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
Validación y Cobertura de Pruebas
La pila de validación de sidecar actual incluye:
- config fail-closed validation assertions (port, header hard cap, validar las afirmaciones de cierre de configuración (puerto, límite duro de encabezado, límites de auto-sellado),
- comportamiento del middleware de límites de longitud de contenido,
- comportamiento de sanitización del correlation-id,
- comprobaciones de determinismo del hash de solicitud idempotente canónica.
- generated error-registry compatibility assertions (Docs/generated/recorder/apis/sidecar.errors.json vs línea base de tiempo de ejecución).
- restart-boundary idempotency replay/conflict integration checks over real reinicio de la idempotencia de límites, verificación de integración de reproducción/conflicto sobre el subprocess de sidecar real + persistencia en SQLite.
- parallel rolled-load restart correctness test coverage asserting exactly one segmento abierto persistente y reinicio exitoso después de la carga.
- contract hardening checks for RFC 9457 payload shape, RFC 6750 auth challenge verificaciones de endurecimiento de contrato para la forma de carga útil del RFC 9457, encabezados de desafío de autenticación del RFC 6750 y propagación de encabezados de correlación.
- strict media-type matrix checks for content-type/accept fail-closed behavior
con códigos de error
unsupported_media_typeynot_acceptableestables. - probe hardening checks for unauthenticated probe routes and startup probe comprobaciones de endurecimiento de sondas para rutas de sondas no autenticadas y contrato de respuesta de la sonda de inicio.
- readiness hardening checks for admission saturation fail-closed behavior and verificaciones de endurecimiento de preparación para el comportamiento de fallo cerrado por saturación de admisión y transiciones de modo de dependencia del plano de control empresarial.
- enterprise outage mutation checks proving write paths fail closed with servicio-no-disponible cuando la dependencia de ingreso del plano de control está caída.
- generated sidecar contract compatibility gates (
openapi/errors/enums/examples/compat) puertas de compatibilidad del contrato de sidecar generadas (openapi/errors/enums/examples/compat) aplicadas en la orquestación degenerate/check. - profile-matrix perf orchestration (
RECORDER_PERF_MATRIX=1) that executes debug/test and release regression lanes, emitstarget/perf-matrix/latest.json, and applies release-gated threshold + regression policy using committed baseline contracts (system-tests/perf_baselines/*.json); capacity lane execution is optional (--include-capacity) y destinado a trabajos nocturnos/pre-lanzamientos fijados. - sidecar perf architecture split:
- regression lane artifact:
target/sidecar-perf/latest.json(lane=regression, señal de anti-regresión de carga de trabajo fija), - capacity lane artifact:
target/sidecar-capacity/latest.json(lane=capacity, saturation sweep withmax_sustainable_rpsand knee métricas).
- regression lane artifact:
- system-test sidecar suites for end-to-end HTTP record/query/build/verify and reinicio de la persistencia de idempotencia.
- system-test Docker suite validating Dockerfile/Compose/config hardening plus Docker Compose build/up/down with containerized startup/readiness probes plus registro/consulta de flujo de trabajo.
- system-test sidecar perf suite for write/read latency, throughput, memory
growth, and overload-429 report fields used by the perf gate; throughput and
latency lanes now use a persistent keep-alive HTTP client pool for
production-representative write-path measurements. As of 2026-02-16, memory
reporting distinguishes hot-path/high-water RSS growth from quiesced retained
RSS growth and emits reclaim ratio context. As of the same date, durability
characterization records live
wal_size_bytes, post-stopwal_size_post_stop_bytes, and coupledwal_checkpoint_noopstate per case, and emits an explicit comparability signal (durability_wal_ratio_vs_1000_comparable) antes de interpretar los ratios de WAL. - ignored informational retained-memory attribution lane
(
sidecar_perf_rss_retained_memory_attribution_characterization) emittingtarget/sidecar-perf/rss_attribution_latest.jsonwith fixed-volume sequential/parallel quiesce-window checkpoints andsmaps_rollupclass deltas (Rss,Anónimo,Privado_Sucio,Compartido_Limpio,Compartido_Sucio). - ignored informational ingest-tuning characterization lane
(
sidecar_perf_rss_ingest_tuning_characterization) emittingtarget/sidecar-perf/rss_ingest_tuning_latest.jsonwith ingest queue/batch matrix sweeps (queue_capacity,batch_max_commands,batch_max_bytes) across sequential and parallel workers, including data-derived decision fields para la clasificación de mecanismos y recomendación de mitigación. - ingest batching byte-estimation path now avoids per-command
Vec<u8>allocation churn inwriter_command_estimated_bytesby counting serialized Bytes JSON a través deserde_json::to_writercontra un sumidero de conteo. - system-test sidecar capacity suite for release-only concurrency sweep points
(
32..512), deterministic correctness sampling, and pinned-runnermax_sustainable_rps/métrica de emisión de rodilla.
F:crates/recorder-sidecar-config/src/config/tests.rs F:crates/recorder-sidecar/tests/unit/middleware/bounds/tests.rs F:crates/recorder-sidecar/src/idempotency.rs F:crates/recorder-sidecar/tests/error_registry_contract.rs F:crates/recorder-sidecar/tests/idempotency_restart.rs F:crates/recorder-sidecar/tests/http_contract_hardening.rs F:crates/recorder-sidecar/tests/enterprise_control_plane_e2e.rs F:scripts/ci/sidecar_contract_gates.py F:scripts/ci/perf_matrix.py F:scripts/ci/perf_gate.py F:scripts/ci/perf_threshold_policy.py F:scripts/ci/generate_all.sh F:system-tests/tests/suites/sidecar.rs F:system-tests/tests/suites/sidecar_enterprise.rs F:system-tests/tests/suites/sidecar_docker.rs F:system-tests/tests/suites/sidecar_perf.rs F:system-tests/tests/suites/sidecar_capacity.rs F:system-tests/tests/helpers/perf_sidecar.rs
Referencia Cruzada Archivo por Archivo
| Área | Archivo | Notas |
|---|---|---|
| Límite de crate | crates/recorder-sidecar/src/lib.rs | Puntos de entrada públicos del crate y composición de módulos. |
| Tiempo de ejecución binario | crates/recorder-sidecar/src/main.rs | CLI, inicio del servicio y comportamiento de verificación de salud. |
| Binario de arranque de contenedor | crates/recorder-sidecar/src/bin/docker_bootstrap.rs | Ingesta de fuente de token cerrada por fallo y materialización de archivo de token endurecido en contenedor antes del inicio del sidecar. |
| Configuración + validación | crates/recorder-sidecar-config/src/config.rs, crates/recorder-sidecar-config/src/validation.rs, crates/recorder-sidecar-config/src/schema.rs, crates/recorder-sidecar-config/src/compat.rs | Modelo de configuración canónica del sidecar, validación de inicio cerrada por fallo y artefactos de proyección de configuración determinista. |
| Política de tipo de medio | crates/recorder-sidecar-config/src/media_types.rs | Política estricta de tipo de medio compartida para el comportamiento del analizador en tiempo de ejecución y artefactos de contrato del sidecar generados. |
| Arranque del servidor | crates/recorder-sidecar/src/server.rs | Almacenamiento/conexión en tiempo de ejecución, construcción de enrutador, ciclo de vida del transporte. |
| Estado compartido | crates/recorder-sidecar/src/state.rs | Manejadores en tiempo de ejecución y puertas de concurrencia. |
| Superficie de error | crates/recorder-sidecar/src/error.rs | Modelo de error estructurado de la API. |
| Extractores JSON | crates/recorder-sidecar/src/extract.rs | Normalización estricta de límites JSON para fallos de análisis tipados. |
| Línea base del contrato de tiempo de ejecución | crates/recorder-sidecar/src/contract.rs | Versión de API exportada y constantes del registro de errores utilizadas por las pruebas de contrato. |
| Ingesta de escritor único | crates/recorder-sidecar/src/ingest.rs | Admisión de cola limitada, generación de recibos duraderos, secuenciación con alcance de flujo y estado de idempotencia persistente. |
| Puerta de política empresarial | crates/recorder-sidecar/src/control_plane_bridge.rs | Adaptador de límite empresarial únicamente: comprobaciones de ingreso del plano de control y emisión de ganchos del sidecar. |
| Middleware de autenticación | crates/recorder-sidecar/src/middleware/auth.rs | Comprobaciones de token portador con comparación en tiempo constante. |
| Middleware empresarial | crates/recorder-sidecar/src/middleware/enterprise.rs | Extracción de identidad empresarial y aplicación de límites/secuenciación de ganchos. |
| Middleware de límites | crates/recorder-sidecar/src/middleware/bounds.rs | Controles de encabezado/contenido/cola/concurrencia/tiempo de espera. |
| Manejador de ingestión OTel | crates/recorder-sidecar/src/handlers/otel.rs | Ruta de ingestión JSON OTel, acoplamiento de idempotencia y invocación de adaptador. |
| Adaptador OTel | crates/recorder-otel-adapter/src/adapter.rs | Implementación determinista de mapeo/redacción/límites OTel utilizada por el sidecar y flujos de trabajo de ingestión de CLI. |
| Empaquetado de Docker | docker/sidecar/Dockerfile, docker/sidecar/docker-compose.yml, docker/sidecar/config/sidecar.toml, docker/sidecar/.env.example, docker/sidecar/README.md | Perfil de construcción/tiempo de ejecución de contenedor de primera parte y guía de uso del operador, incluyendo flujo de arranque de token de fuente secreta + tmpfs. |
| Módulos de prueba unitaria del sidecar | crates/recorder-sidecar-config/src/config/tests.rs, crates/recorder-sidecar/src/idempotency.rs, crates/recorder-sidecar/tests/unit/middleware/bounds/tests.rs | Las pruebas unitarias se externalizan de los archivos fuente de producción para una organización de archivos más limpia. |
| Pruebas del sistema Docker del sidecar | system-tests/tests/suites/sidecar_docker.rs | Endurecimiento de Dockerfile/Compose y validación del flujo de trabajo del sidecar en contenedor. |
| Manejadores de sondeo | crates/recorder-sidecar/src/handlers/health.rs | Comportamiento de vivacidad/inicio/listo, incluyendo modos de saturación y preparación de dependencia empresarial. |
| Pruebas de conformidad de contrato | crates/recorder-sidecar/tests/error_registry_contract.rs, crates/recorder-sidecar/tests/idempotency_restart.rs, crates/recorder-sidecar/tests/http_contract_hardening.rs | Comprobaciones de registro, idempotencia de reinicio y endurecimiento de límites HTTP. |
| Pruebas de integración empresarial | crates/recorder-sidecar/tests/enterprise_control_plane_e2e.rs | Comprobaciones E2E de límites de admisión/resultados empresariales incluyendo comportamiento de mutación cerrada por fallo en la interrupción del plano de control. |
| Puertas CI de contrato | scripts/ci/sidecar_contract_gates.py, scripts/ci/perf_matrix.py, scripts/ci/perf_gate.py, scripts/ci/perf_threshold_policy.py, scripts/ci/generate_all.sh | Puertas de contrato v1 que rompen antes del lanzamiento más la orquestación de rendimiento de matriz de perfil y gobernanza de umbral anti-sandbagging. |
| Pruebas del sistema del sidecar | system-tests/tests/suites/sidecar.rs, system-tests/tests/suites/sidecar_enterprise.rs, system-tests/tests/suites/sidecar_perf.rs, system-tests/tests/suites/sidecar_capacity.rs | Cobertura de ciclo de vida HTTP de extremo a extremo, carriles de dependencia del plano de control cerrados por fallo empresarial y generación de informes de rendimiento de regresión/capacidad divididos para SLO y control de saturación. |
| Alineación de seguridad | Docs/security/threat_model.md | Mapeo de amenazas autoritativo y riesgos residuales. |