Modelo de Amenaza del Grabador
Resumen
Recorder es el plano de datos de evidencia determinista para sistemas de gobernanza. Ingiere eventos de frontera no sellados, los sella en sobres encadenados por hash, los persiste en segmentos de solo anexado y exporta paquetes verificables para comprobaciones fuera de línea.
El grabador está compuesto por:
- Core contracts (
recorder-core): identity, hash/signature abstractions, tipos de filtro/cursores, álgebra de errores. - Envelope model (
recorder-envelope): canonical encoding, envelope/segment/bundle tipos, resultado de verificación álgebra. - Decision Gate integration adapter (
recorder-decision-gate-adapter): deterministic MCP/runpack transcript mapping, runpack integrity policy, and política de redacción/límites de transcripción. - OpenTelemetry integration adapter (
recorder-otel-adapter): deterministic OTel JSON export mapping, strict record validation, and ejecución de la política de límites de redacción. - Recorder runtime (
recorder): ingest validation, segment lifecycle, constructor de paquetes, verificador fuera de línea, implementaciones de proveedor/adaptador. - Rust SDK facade (
recorder-sdk): deterministic builder and unified in-process fachada sobre grabador, adaptador, proveedor, verificador y manejadores de almacenamiento. - Python sidecar SDK (
recorder-client): contract-driven sync/async sidecar HTTP client with strict response/error typing, retry-safe idempotency behavior, y verificaciones de deriva de contrato generado. - Storage backends (
recorder-store): SQLite and in-memory implementations of sobre, archivo adjunto y almacenes de segmentos. - Sidecar config authority (
recorder-sidecar-config): canonical sidecar config model, fail-closed validation, and deterministic config projection artifacts (schema/compat/example/docs) consumido por la generación de contratos y las puertas de CI. - Sidecar service surface (
recorder-sidecar): HTTP/JSON runtime exposing recorder/query/bundle/config workflows over Unix/TCP with auth/bounds/ idempotency controls, strict media-type policy enforcement, and first-party Ruta de compatibilidad de ingestión de OTel JSON. - CLI surface (
recorder-cli): local operator commands for record/query/bundle/ config/doctor workflows plus Decision Gate y la ingestión de accesorios OTel.
El grabador ahora admite tanto flujos de trabajo de proceso local como un límite de servicio HTTP de sidecar integrado. Los envoltorios externos (por ejemplo, puentes MCP o puertas de enlace API) siguen estando en el ámbito como límites hostiles.
Documentación relacionada
- Descripción general del repositorio:
README.md. - Postura de seguridad y requisitos:
Docs/Standards/codebase_engineering_standards.md. - Architecture references: Docs/architecture/recorder_system_architecture.md, Docs/architecture/recorder_evidence_model_and_integrity_architecture.md, Docs/architecture/recorder_runtime_and_bundle_architecture.md, Docs/architecture/recorder_storage_architecture.md, Docs/architecture/recorder_sidecar_architecture.md, Docs/architecture/recorder_cli_and_operator_workflows_architecture.md, Docs/architecture/recorder_system_test_and_validation_architecture.md.
- Design references:
Docs/design/recorder_core_math_evidence_observability_and_verification.md, Referencias de diseño:Docs/design/recorder_core_math_evidence_observability_and_verification.md,Docs/design/dg_proof_recorder_and_mobile_edge_interaction_model.md.
Objetivos de Seguridad
- Resultados de integridad de sobre y paquete determinísticos y reproducibles.
- Historial de solo anexado a prueba de manipulaciones con aplicación de continuidad de cadena.
- Comportamiento de fallo cerrado en datos malformados, faltantes, ambiguos o no verificables.
- Portabilidad de paquetes verificables sin conexión sin dependencias en vivo de confianza.
- Clear trust boundaries between adapters, recorder runtime, stores, and Límites de confianza claros entre adaptadores, tiempo de ejecución del grabador, almacenes y consumidores.
- Exposición limitada de entradas/recursos en los puntos de entrada del operador.
- Strong adversary posture: designs must remain defensible against compromised Postura de adversario fuerte: los diseños deben permanecer defendibles contra internos comprometidos y operadores capaces de actuar como estados-nación.
Non-Goals / Fuera de Alcance
- Garantías de confidencialidad después de que se divulgue la evidencia a sistemas posteriores.
- Defensa contra el compromiso total del host/kernel sin controles de plataforma externos.
- Key custody/HSM/remote attestation infrastructure (beyond current local key Infraestructura de custodia de claves/HSM/atención remota (más allá de los ganchos de uso de claves locales actuales).
- Built-in transport security for remote deployment wrappers (mTLS/authn/authz Seguridad de transporte incorporada para envolturas de implementación remota (mTLS/authn/authz son responsabilidades de implementación hoy en día).
- Non-repudiation signing of bundle archives at rest (external signing/WORM is Firma de no repudio de archivos de paquete en reposo (se requiere firma externa/WORM).
Activos
- Unsealed and sealed envelope data (event type, actor, environment, payload, Datos de sobres no sellados y sellados (tipo de evento, actor, entorno, carga útil, tiempo, IDs de correlación).
- Envelope integrity material (
content_hash,chain_hash, sequence position, Material de integridad del sobre (content_hash,chain_hash, posición de secuencia, enlace de segmentos). - Metadatos del segmento (
SegmentGenesis, enlace de predecesores, registros de sellos). - Bytes de adjunto y hashes de contenido.
- Contenidos del paquete (segmentos, sobres, adjuntos, anclajes de prueba).
- Manifiestos de verificación, artefactos de veredicto y artefactos de transcripción de verificador.
- Recorder runtime configuration (
recorder_id, schema version, auto-seal, Configuración de tiempo de ejecución del grabador (recorder_id, versión del esquema, auto-sellado, profundidad de verificación al inicio). - Archivo de almacenamiento SQLite y estado en memoria.
- Material de clave de firma e identificadores de clave derivados cuando se configuran los firmantes.
- Persisted signer-rotation state (
store_metakeys for current key, epoch, Estado de rotación de firmantes persistido (store_metaclaves para la clave actual, época y marcador del último evento de rotación). - Generated contract artifacts under Docs/generated/recorder/** and manifest authority Docs/generated/recorder/index.json, including sidecar API artifacts (Docs/generated/recorder/apis/sidecar.*), sidecar config artifacts (Docs/generated/recorder/config/sidecar.*), and SDK projection artifacts (Docs/generated/recorder/sdk/*).
- Performance policy artifacts (
target/perf-matrix/latest.json,target/perf/v2/*.json,target/perf/triage/latest.md,system-tests/perf_baselines/*.json) y metadatos de huella digital del corredor. - CLI artifacts (selector JSON, payload JSON, attachment file/inline payloads, Decision Gate fixture JSON, OTel fixture JSON, config JSON, bundle JSON, verificador de transcripción JSON y verificación de salidas JSON de garantía).
- Container deployment artifacts and runtime mounts (Dockerfile image outputs, compose/env definitions, mounted sidecar config/data/run paths, Docker secret rutas de origen del token, y rutas de destino del token tmpfs).
Modelo de Adversario
- Adversarios de estados-nación con visibilidad completa del código y persistencia a largo plazo.
- Adaptadores/clientes no confiables que envían sobres o archivos adjuntos maliciosos.
- Insiders comprometidos con acceso de escritura a la configuración, binarios o almacenamiento.
- Attackers tampering with on-disk SQLite data, bundle files, or exported Atacantes manipulando datos de SQLite en disco, archivos de paquete o artefactos exportados.
- Attackers attempting replay, chain forking, payload mutation, or attachment Atacantes intentando repetición, bifurcación en cadena, mutación de carga útil o sustitución de adjuntos.
- Atacantes induciendo agotamiento de recursos a través de entradas sobredimensionadas o costosas.
- Malicious integrators exposing Recorder via remote transports without sufficient controles de acceso.
Límites de Confianza
- Límite de ingestión del adaptador:
UnsealedEnvelopey los datos de los adjuntos no son de confianza. - Límite de CLI/operador: todos los valores de la línea de comandos y los archivos JSON no son de confianza.
- Límite de configuración en tiempo de ejecución: el contenido del archivo de configuración y la ruta de almacenamiento no son de confianza.
- Sidecar HTTP boundary: request line, headers, auth token, JSON body, and Límite de HTTP de Sidecar: la línea de solicitud, los encabezados, el token de autenticación, el cuerpo JSON y los metadatos de transporte no son de confianza.
- Sidecar enterprise bridge boundary: enterprise control-plane admission and las llamadas de gancho son dependencias de red no confiables y deben fallar de manera segura.
- Límite de almacenamiento: las filas/blobs persistidos no son de confianza al leer.
- Límite del paquete: el paquete JSON importado no es de confianza antes de la verificación.
- Evidence provider boundary: consumer calls to list/fetch/verify/query are Límite del proveedor de evidencia: las llamadas de los consumidores para listar/obtener/verificar/consultar son solicitudes no confiables.
- Rust SDK facade boundary: builder/runtime inputs (
recorder_id, adapter metadata, storage path, trust root, signer/trust policy) are untrusted and debe preservar el comportamiento de fallo cerrado del grabador/proveedor. - Python SDK boundary: sidecar endpoint/base URL, auth token, idempotency headers, retry/backoff policy inputs, request models, query parameters, and HTTP response payloads are untrusted and must fail closed on contract drift, códigos de error desconocidos, o desajuste de esquema.
- Decision Gate adapter boundary: Decision Gate transcript/runpack fixture Límite del adaptador de Decision Gate: las cargas útiles del transcripto/fixture de runpack de Decision Gate no son de confianza y deben pasar verificaciones de mapeo/integridad antes de la ingestión.
- OTel adapter boundary: OpenTelemetry JSON export payloads are untrusted and must pass strict record-shape, identifier, timestamp, and bounded/redacted verificaciones de mapeo antes de la ingestión.
- Signing boundary: signer/verifier integrations and key management are external La firma de límites: las integraciones de firmante/verificador y la gestión de claves son dependencias de confianza externas.
- Contract generation boundary: generated projection artifacts are untrusted Límite de generación de contratos: los artefactos de proyección generados no son de confianza hasta que se verifiquen mediante hash contra el manifiesto del índice canónico.
- Performance harness boundary: runner-class labels, workload knobs, and perf
artifacts are untrusted until lane identity (
regression/capacity), se valida la metadata de carga de trabajo y las verificaciones de política de ejecutor fijado. - External wrapper boundary: any network-facing bridge is outside this repo and Límite del envoltorio externo: cualquier puente orientado a la red está fuera de este repositorio y debe hacer cumplir la autenticación/autorización y las protecciones de transporte.
- Container-orchestration boundary: compose/env/runtime mount definitions, Docker secret source paths, tmpfs token-target paths, and host filesystem ownership/permission models are untrusted deployment inputs and must satisfy restricciones de endurecimiento de configuración/token de sidecar.
Puntos de Entrada y Superficies de Ataque
- CLI commands:
recorder segment open|seal|status|list,recorder signer rotate,recorder envelope record|record-with-attachments,query envelopes,bundle build|verify|inspect,assurance startup|trust-root|gates,contract generate|check,decision-gate ingest-fixture,otel ingest-fixture,config validate,doctor. - Sidecar commands:
recorder-sidecar --config <path>,recorder-sidecar healthcheck --url <url>,recorder-sidecar healthcheck --unix-socket <path> --path <path>. - Sidecar HTTP routes:
GET /health,GET /startup,GET /ready,GET /v1/segments,GET /v1/segments/active,POST /v1/envelopes,POST /v1/envelopes/with-attachments,POST /v1/query/envelopes,POST /v1/bundles/build|verify|inspect,POST /v1/ingest/otel,GET /v1/config. - File inputs: runtime config JSON/TOML, payload JSON/file, attachment file/inline base64, Entradas de archivo: configuración de tiempo de ejecución JSON/TOML, carga útil JSON/archivo, archivo adjunto/base64 en línea, JSON de fixture de Decision Gate, JSON de selector, JSON de paquete.
- Container deployment inputs:
docker/sidecar/Dockerfile,docker/sidecar/docker-compose.yml,docker/sidecar/.env, mountedsidecar.toml, Docker secret token source archivo, directorio de destino del token tmpfs y directorios de datos /run montados por enlace. - Library APIs:
RecorderBuilder::build,Recorder::record|record_with_attachments,Recorder::build_bundle|verify_bundle,Recorder::list_bundles|fetch_bundle|query_envelopes,RecorderAdapter::emit_envelope,RecorderAdapter::emit_with_attachments,DecisionGateAdapter::ingest_fixture,RecorderEngine::open_segment|record_envelope|seal_segment,EvidenceProvider::list_bundles|fetch_bundle|verify_bundle|query_envelopes. - Storage entry points: SQLite DB creation/open, SQL row materialization, attachment fetch, genesis decodificar.
- Bundle verification pipeline: manifest validation, attachment hash checks, content/chain checks, Canal de verificación de paquetes: validación de manifiesto, comprobaciones de hash de adjuntos, comprobaciones de contenido/cadena, comprobaciones entre segmentos, fase de firma.
Controles de Seguridad e Invariantes
- Codificación JCS canónica para entradas de hash deterministas (
serde_jcs). - Las fórmulas de hash de contenido del sobre y de hash de cadena son explícitas y estables.
- La generación de segmentos ancla el cálculo de la cadena de primer sobre.
- La igualdad de hash utiliza comparación en tiempo constante en los caminos de núcleo/verificador/almacenamiento.
- La capa de adaptador/validación impone verificaciones de cierre en caso de fallo antes de registrar.
- Envelope builder enforces required fields, UTC times, deterministic attachment El generador de sobres impone campos requeridos, tiempos UTC y un orden de referencia de adjuntos determinista.
- Envelope attachment and segment-genesis constructors reject empty, blank, and
Los constructores de adjuntos de sobre y de generación de segmentos rechazan entradas de
content_typeyrecorder_idque estén vacías, en blanco o que contengan caracteres de control. - Recorder config validation fail-closes malformed
recorder_idvalues at La validación de la configuración del grabador falla y cierra los valores malformados derecorder_idal iniciar el motor (se requiere una forma de identidad compatible conActorId). - Core identity constructors reject blank/whitespace-only and control-character
string inputs;
key_idis enforced as exact lowercase Los constructores de identidad central rechazan entradas de cadenas en blanco/sólo con espacios y caracteres de control;key_idse aplica como forma exacta en minúsculas dehex(SHA-256(public_key_bytes))(64 caracteres). - Core identity constructors enforce explicit max lengths:
trace_id/session_id/actor_id/environment_id <= 256 chars, Los constructores de identidad central aplican longitudes máximas explícitas:trace_id/session_id/actor_id/environment_id <= 256 caracteres,event_type/adapter_id <= 128 caracteres. - String-backed identity serde paths are constructor-validated; hostile JSON Las rutas de serialización/deserialización de identidad respaldadas por cadenas son validadas por el constructor; JSON hostil no puede eludir las invariantes del identificador en los límites de deserialización.
- Store append impone invariantes de segmento abierto y continuidad de cadena.
- Store segment creation enforces single-open-segment and duplicate-segment-ID La creación de segmentos de almacenamiento impone controles de fallo cerrado para segmentos abiertos únicos y duplicados de ID de segmento.
- Store active-segment lookup fail-closes on corrupted persisted state with múltiples segmentos abiertos en lugar de seleccionar una fila arbitraria.
- Store query/existence paths fail closed on storage-layer query errors instead Las rutas de consulta/existencia de almacenamiento fallan de manera cerrada en caso de errores de consulta en la capa de almacenamiento en lugar de predeterminar resultados de existencia permisivos.
- La ruta de anexión de SQLite está limitada al ámbito de la transacción para actualizaciones atómicas de metadatos/datos.
- SQLite habilita WAL y claves foráneas durante la inicialización del esquema.
- Bundle builder uses deterministic ordering (
BTreeMap/BTreeSet) and tracks El generador de paquetes utiliza un orden determinista (BTreeMap/BTreeSet) y rastrea padres omitidos/anclas de prueba. - Verifier executes 7 phases with trust-root-aware signature verification; it El verificador ejecuta 7 fases con verificación de firma consciente de la raíz de confianza; marca la omisión de firma solo cuando no se ha configurado ninguna raíz de confianza.
- Verifier phase 1 fail-closes on manifest structural tampering (segment entry mismatches and attachment-manifest mismatches), not only version/algorithm desajustes.
- Verifier enforces bounded-work policy before phase execution:
max segments
4096, max envelopes per segment100000, max envelopes total200000, max attachments total200000, máximo de referencias de adjuntos por sobre4096. - Recorder startup verification re-checks active segment read-back integrity for
La verificación de inicio del grabador vuelve a comprobar la integridad de la lectura del segmento activo para las ventanas de profundidad configuradas (
startup_verification_depth). - Evidence provider enforces stable bundle IDs and true fetch-by-ID semantics El proveedor de evidencia impone identificadores de paquete estables y una semántica verdadera de búsqueda por ID para segmentos sellados.
- Evidence provider enforces bounded query/materialization policy:
max
list_bundlesandquery_envelopeslimit10000, El proveedor de evidencia aplica una política de consulta/materialización limitada: límite máximo delist_bundlesyquery_envelopesde10000, materialización máxima de sobre por segmento de200000. - CLI enforces bounded file-read limits: config 1 MiB, payload 4 MiB, selector 1 MiB, bundle 32 MiB, trust root 1 MiB, attachment file/inline payload 16 MiB, Decision Gate fixture 8 MiB, signer CLI impone límites de lectura de archivos acotados: config 1 MiB, payload 4 MiB, selector 1 MiB, bundle 32 MiB, trust root 1 MiB, attachment file/inline payload 16 MiB, Decision Gate fixture 8 MiB, signer key 64 KiB, signer passphrase material 1 KiB.
- CLI query enforces bounded page policy:
default page size
1000, max page size10000, and deterministic La consulta CLI impone una política de página limitada: tamaño de página predeterminado1000, tamaño máximo de página10000, y un contrato de continuación basado en cursor determinista en modo JSON. - CLI i18n catalogs are build-validated fail closed:
locale tag uniqueness, required
endefault locale, mandatory locale provenance (machineorhuman_reviewed), exact message-key parity against English, and exact placeholder-set parity for every key across enabled locales. - CLI localization rendering is strict and fail-closed: generated typed key/macro access prevents unknown message keys at compile time, and runtime rendering rejects placeholder-set mismatch and unresolved placeholders sin retroceso silencioso a las ID de clave o inglés.
- CLI locale provenance policy is explicit: machine-provenance locales emit deterministic operator notice, while JSON los payloads de salida permanecen neutrales en cuanto a la localidad a través de la selección de la localidad.
- CLI runtime resolution validates
recorder_idusingActorIdconstructor semantics before command execution, includingconfig validateparity with comportamiento de validación de configuración del grabador. - CLI signer loading is profile-aware (
securedefault) and fail-closed on encrypted-key requirements, malformed key material, insecure opt-down misuse, y desajuste de clave-estado en modo seguro. - Explicit key-rotation workflow emits deterministic lifecycle events
(
system.adapter.key_rotated/ break-glass variant) and persists idempotence marcadores en los metadatos de SQLite. - Contract generation emits deterministic projection artifacts with La generación de contratos emite artefactos de proyección deterministas con autoridad de manifest-hash y modo de verificación de deriva estricta.
- Contract generation/check fail closed on unsafe output-root filesystem entries, including symlinked roots, hard-linked artifact files, or symlink recorrido debajo del árbol de salida.
- Contract schema generation applies explicit runtime constraint overlays for
identifier/text/hash/signature fields (including full
BundleSelectorvariant algebra) and fails closed if expected schema pointer paths are faltante. - Contract generation now emits sidecar API artifacts
(
sidecar.openapi/errors/enums/examples/compat) and generated manifest La generación de contratos ahora emite artefactos de API de sidecar (sidecar.openapi/errors/enums/examples/compat) y la autoridad del manifiesto generado incluye esos caminos. - Contract generation now emits SDK projection artifacts
(
sdk/types.json,sdk/methods.json,sdk/test_vectors.json,sdk/manifest.json) and drift-check mode fail-closes on SDK artifact desajuste. - Rust SDK builder/facade wiring fail-closes invalid identity/config/store entradas mientras se preserva el determinismo del grabador/proveedor y los límites de trabajo acotados.
- Python SDK request/response wiring fail-closes invalid input/query parameter values, unknown problem codes, unexpected content types, and response schema drift against generated SDK projection artifacts while preserving sidecar semántica de idempotencia a través de intentos de reintento.
- Sidecar compatibility gates fail closed in CI by validating current
pre-release-break
/v1policy, enum-wire stability, error-code registry stability, and ejecución del contrato de idempotencia del punto final mutante a partir de artefactos generados. - Sidecar perf policy gates split regression (
sidecar_perf) and capacity (sidecar_capacity) lanes with explicit lane identity/workload metadata in artifacts to prevent fixed-workload regression signals from being misread as resultados de máximo rendimiento. - Pinned-runner capacity enforcement fails closed when required
sidecar_capacityartifacts are missing, and capacity floors (max_sustainable_rps) are anti-sandbagging protected by threshold policy cheques. - Sidecar config validation fail-closes invalid protocol/security settings (schema/API version, transport host/port, non-loopback token requirement, signer key parseability, hard header-size cap, and numeric limit bounds) antes de enlazar oyentes.
- Sidecar config file and secret-material loading enforce bounded hostile-input
file sizes and fail closed on oversize input:
config
<= 1 MiB, token/control-plane-token files<= 4096 bytes, archivo de clave del firmante<= 65536 bytes. - Sidecar token/control-plane-token file opening uses fail-closed
descriptor-bound semantics:
- Unix: no seguir abierto (
O_NOFOLLOW) más verificaciones de archivo regular y modo. - Windows: reparse-point-safe open (
FILE_FLAG_OPEN_REPARSE_POINT) plus rechazo de punto de reanálisis de mango abierto. - Other targets: fail-closed unsupported-platform rejection for secret-token cargando archivo.
- Unix: no seguir abierto (
- Sidecar middleware stack enforces server/client correlation ID handling
(
x-server-correlation-id,x-correlation-id, legacyx-request-id), strict fail-closed media-type parsing (exactapplication/jsonwith optionalcharset=utf-8) and strict JSON-onlyAcceptparsing, aggregate header byte bounds, declared content-length bounds, bounded queue admission and in-flight concurrencia y comportamiento de fallo cerrado por tiempo de espera por solicitud. - Sidecar request media-type policy is centralized in
recorder-sidecar-configand projected into generated sidecar API compatibility los artefactos para que las listas permitidas de tipos de medios de tiempo de ejecución y contrato no puedan desviarse. - Sidecar token auth compares bearer tokens in constant time and bypasses auth
only for explicit probe routes (
/health,/startup,/ready) oropenmodo. - Sidecar probe/readiness controls are explicit and fail closed:
/healthremains lightweight process liveness,/startupreports startup completion state, and/readycan enforce storage-only or storage+enterprise dependency readiness (probes.readiness_mode) with optional capacity-exhaustion comportamiento de fallo cerrado (probes.ready_fail_on_admission_saturation). - Sidecar bounds middleware explicitly bypasses probe routes so orchestrator liveness/startup/readiness signals are observable even under admission El middleware de límites de Sidecar elude explícitamente las rutas de sondeo, de modo que las señales de disponibilidad/inicio/listo del orquestador son observables incluso bajo saturación de admisión y agotamiento de solicitudes activas.
- Sidecar auth failures emit RFC 6750
WWW-Authenticatechallenge metadata and Las fallas de autenticación del sidecar emiten metadatos de desafíoWWW-Authenticatesegún el RFC 6750 y los errores del sidecar utilizan los Detalles del Problema del RFC 9457 (application/problem+json). - Sidecar container packaging defaults to distroless nonroot runtime and compose profiles that require explicit UID/GID mapping, Docker secret token source inputs, and bootstrap materialization of hardened token files into rutas de tiempo de ejecución tmpfs antes del inicio del sidecar.
- Sidecar mutating operations enforce persistent idempotency replay/conflict
semantics with stream-scoped persistent retention
(
idempotency_entries) y el alcance de hash de solicitud determinista. - Sidecar mutating envelope operations enforce explicit stream identity inputs
(
tenant_id,recorder_id) y rechazar las discrepancias de grabadora fallan en cerrado. - SQLite operation dispatch uses bounded queueing (
sync_channel) with La operación de despacho de SQLite utiliza colas limitadas (sync_channel) con rechazo determinista de fallo cerrado cuando la capacidad de la cola (4096) está saturada. - Verifier transcript emission is deterministic and schema-versioned; bundle verification can export transcript JSON for machine-auditable evidence paquetes.
- CLI assurance checks provide explicit fail-closed deployment assertions for startup-verification depth, trust-root mode parsing, and contract gate ejecución.
- System tests validate tamper detection and fail-closed oversized-input Las pruebas del sistema validan la detección de manipulación y el comportamiento de cierre en caso de fallo ante entradas de tamaño excesivo.
- System tests validate external adapter-ingest coupling using OpenClaw mock event streams, including signed/unsigned verification and sequence-gap strict políticas de fallo cerrado vs políticas de grabación de anomalías.
- OpenClaw integration mapping applies deterministic sensitive-field redaction and bounded payload handling (string and JSON size limits) before immutable grabación de evidencia.
- System tests validate external control-plane coupling using Decision Gate MCP runpack flow fixtures, including signed/unsigned verification and runpack integrity strict fail-closed vs anomaly-recording policies, including recomputación de la auto-integridad del manifiesto a partir de los hashes de archivo declarados.
- System tests validate sidecar subprocess lifecycle over real HTTP and fail-closed idempotency replay/conflict persistence across restart límites.
- Decision Gate integration mapping applies deterministic transcript-field redaction and bounded payload handling (string and JSON size limits) before grabación de evidencia inmutable.
- Production
recorder-decision-gate-adapterenforces mapping-contract version checks, deterministic event IDs/timestamps, transcript redaction, bounded metadatos de carga útil y manejo de integridad de runpack estricto vs. anomalía. - Production
recorder-otel-adapterenforces deterministic OTel span/log mapping (otel.span,otel.log.<severity>), strict identifier/timestamp parsing, derivación de ID determinista y proyección de carga útil limitada/redactada.
Conocidas brechas de seguridad relevantes en la actualidad:
- Sidecar does not include built-in TLS/mTLS; non-loopback deployments should Sidecar no incluye TLS/mTLS integrado; las implementaciones que no son de bucle invertido deben terminar TLS y hacer cumplir la identidad del cliente en un proxy/gateway frontal endurecido.
- Sidecar provides bounded local admission controls but not distributed/global rate limiting; deployment platforms still need caller quotas and abuse controles.
Amenazas y Mitigaciones
Autenticación, Autorización y Control de Acceso
- Threat: unauthorized local or remote invocation of recording/query/bundle Amenaza: invocación no autorizada local o remota de rutas de grabación/consulta/paquete.
- Mitigation: sidecar supports explicit token mode with constant-time bearer
token checks, RFC 6750
WWW-Authenticatechallenge responses, and fail-closed Mitigación: sidecar admite el modo de token explícito con verificaciones de token portador en tiempo constante, respuestas de desafíoWWW-Authenticatesegún el RFC 6750, y manejo de configuraciones incorrectas de autenticación que fallan de manera cerrada; la CLI sigue siendo una invocación de proceso local. - Residual risk:
opensidecar mode is deployment-sensitive and should only be used in trusted local IPC environments; non-loopback network deployments Riesgo residual: el modoopensidecar es sensible al despliegue y solo debe ser utilizado en entornos IPC locales de confianza; los despliegues de red que no son de bucle invertido aún requieren controles de identidad y transporte a nivel de puerta de enlace.
Validación y análisis de entrada
- Threat: malformed IDs, non-UTC times, invalid event types, malformed JSON, Amenaza: identificadores malformados, tiempos no UTC, tipos de eventos no válidos, JSON malformado, o cargas útiles ambiguas.
- Mitigation: typed ID constructors, UTC enforcement, strict event-type
validation, strict key-id hex shape validation, fail-closed envelope
validation, strict attachment/segment text-field validation (
content_type,recorder_id), strict recorder configrecorder_idvalidation, typed JSON análisis. - Mitigation: bounded file reads prevent oversized JSON ingestion at CLI Mitigación: las lecturas de archivos limitadas evitan la ingestión de JSON de gran tamaño en el límite de la CLI, incluidos los inputs de trust-root y signer-key.
Integridad y Autenticidad de la Evidencia
- Threat: payload mutation, chain forking, attachment substitution, or replayed Amenaza: mutación de carga útil, bifurcación de cadena, sustitución de adjuntos o sobres reproducidos.
- Mitigation: canonical-hash content addressing + chain continuity checks at Mitigación: contenido de hash canónico que aborda + verificaciones de continuidad de cadena en el momento de añadir y verificar.
- Mitigation: verifier phase 1 enforces structural manifest integrity against Mitigación: la fase 1 del verificador impone la integridad estructural del manifiesto contra la materialización del segmento del paquete y del material adjunto.
- Mitigation: strict Ed25519 verification and trust-root policy enforcement are Mitigación: la verificación estricta de Ed25519 y la aplicación de la política de raíz de confianza están integradas en la fase 6 del verificador.
- Mitigation: secure-profile signer loading requires encrypted PKCS#8 key Mitigación: la carga del firmante de perfil seguro requiere material de clave PKCS#8 encriptado por defecto y una opción explícita para una ergonomía de desarrollo menos segura.
- Mitigation: explicit key-rotation events and persisted idempotence markers Mitigación: eventos de rotación de claves explícitos y marcadores de idempotencia persistidos preservan la continuidad de la línea de firma y la reconciliación de recuperación ante fallos.
- Residual risk: authenticity remains configuration-dependent when operators Riesgo residual: la autenticidad sigue siendo dependiente de la configuración cuando los operadores eligen verificar sin una raíz de confianza (se emite una advertencia explícita).
Divulgación y Exposición de Datos
- Amenaza: divulgación accidental excesiva a través de exportaciones de paquetes y resultados de consultas.
- Mitigación: comandos de exportación/búsqueda explícitos impulsados por el operador y filtros tipados.
- Residual risk: no built-in field-level redaction policy in Recorder core; wrapper las capas deben hacer cumplir la política de divulgación.
Almacenamiento e Integridad del Paquete
- Amenaza: manipulación de DB/archivos, corrupción o escrituras parciales.
- Mitigation: SQLite WAL, transactional append, chain validation, corruption Mitigación: SQLite WAL, anexado transaccional, validación de cadenas, detección de corrupción al analizar filas almacenadas inválidas.
- Mitigation: bundle verification recomputes attachment/content/chain links and Mitigación: la verificación de paquetes recalcula los enlaces de adjunto/contenido/cadena y señala fallos de integridad.
- Residual risk: bundle archives are not signed by default; use external Riesgo residual: los archivos de paquete no están firmados por defecto; utilice firma externa y controles de almacenamiento inmutable para la no repudio.
Disponibilidad y Agotamiento de Recursos
- Threat: oversized config/payload/selector/bundle inputs and expensive Amenaza: entradas de configuración/payload/selector/bundle sobredimensionadas y cargas de trabajo de verificación costosas.
- Mitigación: límites duros de CLI en lecturas de archivos; rechazo de fallo cerrado antes del análisis.
- Mitigación: errores tipográficos y rechazo temprano en selectores/filtros inválidos.
- Mitigation: recorder verifier/provider APIs enforce bounded-work limits and Mitigación: las APIs de verificación/proveedor de grabadoras imponen límites de trabajo acotados y fallan de manera controlada en cargas de trabajo en memoria que son demasiado grandes.
- Mitigation: sidecar middleware enforces bounded header/body/content-length Mitigación: el middleware sidecar impone límites de encabezado/cuerpo/tamaño de contenido acotados, cola acotada + concurrencia activa, y un comportamiento de tiempo de espera que falla en cerrado.
- Mitigation: SQLite operation dispatch is bounded; enqueue saturation fails Mitigación: la operación de despacho de SQLite está limitada; la saturación de la cola falla en modo cerrado en lugar de permitir un crecimiento de memoria ilimitado.
- Residual risk: no distributed/global rate limiter exists for sidecar or wrapper-exposed deployments; operators still need caller quotas and abuse controles.
Cadena de Suministro y Entorno de Ejecución
- Threat: compromised binaries/config/runtime host or malicious dependency Amenaza: comportamiento de binarios/configuraciones/anfitriones en tiempo de ejecución comprometidos o dependencias maliciosas.
- Mitigation: strict lint/no-panic posture, typed errors, deterministic Mitigación: postura estricta de lint/no-pánico, errores tipados, contratos deterministas y límites de arquitectura explícitos.
- Residual risk: host compromise and dependency compromise require external Riesgo residual: el compromiso del host y el compromiso de la dependencia requieren controles externos (SBOM/audit/signing/hardening).
Multi-Inquilino y Aislamiento
- Amenaza: exposición de datos entre inquilinos en implementaciones compartidas.
- Mitigación: Los IDs de los grabadores son etiquetas; no hay reclamaciones implícitas de aislamiento de inquilinos.
- Residual risk: shared deployments must enforce tenant-aware storage, Riesgo residual: los despliegues compartidos deben hacer cumplir el almacenamiento, la encriptación y el control de acceso conscientes del inquilino en las capas de envoltura/despliegue.
Auditoría y Observabilidad
- Amenaza: incapacidad para probar lo que ocurrió después de la sospecha de manipulación.
- Mitigation: append-only segment model, deterministic hashes, bundle manifests, Mitigación: modelo de segmento de solo anexado, hashes deterministas, manifiestos de paquetes, verificador offline y pruebas de sistema centradas en artefactos.
- Residual risk: comprehensive security audit logging for remote auth decisions Riesgo residual: el registro de auditoría de seguridad integral para decisiones de autenticación remota es dependiente del envoltorio.
Referencias de Implementación (Controles y Protecciones)
Integridad del Núcleo y del Sobre
- Canonical encoding and hash formulas:
crates/recorder-envelope/src/encoding.rs. - Hash types, algorithm registry, constant-time equality:
crates/recorder-core/src/hash.rs. - Identity and input-shape validation contracts:
crates/recorder-core/src/identity.rs,crates/recorder-core/src/filter.rs. - Signature contracts and key identity model:
crates/recorder-core/src/signature.rs,crates/recorder-envelope/src/signer.rs,crates/recorder-envelope/src/signature.rs. - Envelope/segment invariants:
crates/recorder-envelope/src/envelope.rs,crates/recorder-envelope/src/segment.rs,crates/recorder-envelope/src/attachment.rs.
Tiempo de Ejecución y Verificación del Grabador
- Recorder lifecycle, chain progression, seal behavior:
crates/recorder/src/engine.rs. - Auto-seal policy validation:
crates/recorder/src/config.rs. - Adapter boundary validation:
crates/recorder/src/validation.rs,crates/recorder/src/local_adapter.rs. - Deterministic bundle assembly and proof anchors:
crates/recorder/src/bundle_builder.rs. - 7-phase verification pipeline and warning model:
crates/recorder/src/verifier.rs. - Evidence provider boundary behavior:
crates/recorder/src/proveedor_de_evidencia.rs.
Superficie de la Fachada del SDK
- Rust SDK facade composition and deterministic builder defaults:
crates/recorder-sdk/src/builder.rs,crates/recorder-sdk/src/lib.rs. - SDK prelude and stable consumer import boundary:
crates/recorder-sdk/src/prelude.rs. - SDK facade conformance tests:
crates/recorder-sdk/tests/test_builder.rs,crates/recorder-sdk/tests/test_facade.rs. - Python SDK contract projection generator and typed client surface:
sdk/python/scripts/generate_contract.py,sdk/python/src/recorder_client/generated_contract.py,sdk/python/src/recorder_client/client.py,sdk/python/src/recorder_client/client_common.py,sdk/python/src/recorder_client/sync_client.py,sdk/python/src/recorder_client/async_client.py,sdk/python/src/recorder_client/models.py,sdk/python/src/recorder_client/errors.py. - Python SDK unit/system conformance tests:
sdk/python/tests/test_contract_generated.py,sdk/python/tests/test_models.py,sdk/python/tests/test_errors.py,sdk/python/tests/test_client_unit.py,sdk/python/tests/test_client_system.py.
Adaptadores de Integración
- Decision Gate adapter ingestion, deterministic mapping, and fail-closed
integrity-policy enforcement:
crates/recorder-decision-gate-adapter/src/adapter.rs. - Decision Gate mapping and redaction/bounds policy defaults:
crates/recorder-decision-gate-adapter/src/policy.rs. - Decision Gate fixture input contract:
crates/recorder-decision-gate-adapter/src/model.rs. - Decision Gate adapter typed error algebra:
crates/recorder-decision-gate-adapter/src/error.rs. - OTel adapter ingestion, deterministic mapping, and strict-fail policy:
crates/recorder-otel-adapter/src/adapter.rs. - OTel mapping and redaction/bounds policy defaults:
crates/recorder-otel-adapter/src/policy.rs. - OTel JSON export input contract and adapter error algebra:
crates/recorder-otel-adapter/src/model.rs,crates/recorder-otel-adapter/src/error.rs.
Almacenamiento
- Storage contracts and invariants:
crates/recorder-store/src/traits.rs,crates/recorder-store/src/error.rs. - In-memory backend behavior:
crates/recorder-store/src/memory.rs. - SQLite initialization, WAL, FK, connection thread model:
crates/recorder-store/src/sqlite/schema.rs,crates/recorder-store/src/sqlite/connection.rs,crates/recorder-store/src/sqlite/mod.rs. - SQLite envelope/segment/attachment operations:
crates/recorder-store/src/sqlite/envelope_ops.rs,crates/recorder-store/src/sqlite/segment_ops.rs,crates/recorder-store/src/sqlite/attachment_ops.rs.
Superficie de CLI y Validación
- Command routing and runtime resolution:
crates/recorder-cli/src/main.rs. - Input hard limits and bounded file reads:
crates/recorder-cli/src/main.rs. - Localization and deterministic output behavior:
crates/recorder-cli/build.rs,crates/recorder-cli/i18n/locales/en.toml,crates/recorder-cli/i18n/locales/ca.toml,crates/recorder-cli/src/i18n.rs. - Contract artifact generation and drift checks:
crates/recorder-contract/src/lib.rs,crates/recorder-contract/src/sidecar_api.rs,crates/recorder-contract/src/sidecar_api/openapi.rs,crates/recorder-contract/src/sidecar_api/artifacts.rs,crates/recorder-contract/src/sidecar_api/specs/mod.rs,scripts/ci/generate_all.sh. - Sidecar contract compatibility and perf policy gates:
scripts/ci/sidecar_contract_gates.py,scripts/ci/perf_matrix.py,scripts/ci/perf_gate.py,scripts/ci/perf_threshold_policy.py,scripts/perf/run.py,scripts/perf/update_baseline.py.
Límite del Servicio Sidecar
- Sidecar bootstrap/config and transport lifecycle:
crates/recorder-sidecar-config/src/config.rs,crates/recorder-sidecar-config/src/validation.rs,crates/recorder-sidecar-config/src/validation/enterprise.rs,crates/recorder-sidecar/src/server.rs,crates/recorder-sidecar/src/shutdown.rs. - Sidecar auth and request-bound controls:
crates/recorder-sidecar/src/middleware/auth.rs,crates/recorder-sidecar/src/middleware/bounds.rs,crates/recorder-sidecar/src/middleware/request_id.rs. - Sidecar single-writer ingest/idempotency and error contract:
crates/recorder-sidecar/src/ingest.rs,crates/recorder-sidecar/src/idempotency.rs,crates/recorder-sidecar/src/error.rs,crates/recorder-sidecar/src/contract.rs. - Sidecar contract conformance integration tests:
crates/recorder-sidecar/tests/error_registry_contract.rs,crates/recorder-sidecar/tests/idempotency_restart.rs. - Sidecar container packaging and operator profile:
docker/sidecar/Dockerfile,docker/sidecar/docker-compose.yml,docker/sidecar/config/sidecar.toml,crates/recorder-sidecar/src/bin/docker_bootstrap.rs.
Validación del Sistema
- Security/system tests:
system-tests/tests/suites/security.rs,system-tests/tests/suites/bundle.rs,system-tests/tests/suites/persistence.rs,system-tests/tests/suites/recorder.rs, Pruebas de seguridad/sistema:system-tests/tests/suites/security.rs,system-tests/tests/suites/bundle.rs,system-tests/tests/suites/persistence.rs,system-tests/tests/suites/recorder.rs,system-tests/tests/suites/sidecar.rs. - Docker packaging and compose-lifecycle validation:
system-tests/tests/suites/sidecar_docker.rs, Validación del empaquetado de Docker y del ciclo de vida de compose:system-tests/tests/suites/sidecar_docker.rs,system-tests/tests/helpers/docker.rs. - Registry-driven validation contract:
Contrato de validación impulsado por el registro:
system-tests/AGENTS.md,system-tests/test_registry.toml.
Requisitos Operacionales
- Treat all deployments as hostile environments; assume compromised insiders and Tratar todos los despliegues como entornos hostiles; asumir que hay internos comprometidos y adversarios capaces de actuar como estados-nación.
- Restrict filesystem access to store/config/bundle paths using least-privilege Restringir el acceso al sistema de archivos a las rutas store/config/bundle utilizando ACLs del sistema operativo con el menor privilegio.
- Use signed releases, dependency auditing, and host hardening for production Utilice versiones firmadas, auditoría de dependencias y endurecimiento del host para los nodos de producción.
- If exposing Recorder sidecar or wrapper APIs over non-loopback networks, enforce autenticación/autorización fuerte, terminación mTLS/TLS y listas de comandos permitidos.
- For containerized sidecar deployments, run non-root, provide token source via
Docker secret input, materialize token files into tmpfs with owner-only mode
(
0600on Unix) before sidecar startup, and map host UID/GID explicitly so las rutas de datos/escritura permanecen deterministas. - Mantener los límites de entrada de CLI habilitados; ajustar los límites a nivel de envoltura donde sea posible.
- Do not treat unsigned bundles as non-repudiable artifacts; apply external No trate los paquetes no firmados como artefactos no repudiables; aplique controles de firma externa y retención inmutable.
- Segment tenants into isolated stores/processes unless explicit shared-tenancy Segmentar inquilinos en tiendas/procesos aislados a menos que se implementen controles de tenencia compartida explícitos.
- Monitor verifier warnings (especially signature-skip and partial-segment Monitorear las advertencias del verificador (especialmente las advertencias de omisión de firma y de segmento parcial) como resultados significativos para la política.
Postura de Fallo
- Fallar cerrado ante entradas inválidas o ambiguas.
- Rechazar anexos que violen el estado del segmento o la continuidad de la cadena.
- Rechazar definiciones de configuración/filtro/rango de tiempo mal formadas.
- Mark tampered bundles as
Invalidor fail verification with typed errors on Marcar los paquetes manipulados comoInválidoo fallar la verificación con errores tipográficos en desajustes de manifiesto/infraestructura. - Nunca asuma confianza en el estado persistido sin re-verificaciones de integridad.
Modelo de Amenaza Delta (2026-02-08, Línea Base OSS + Docker)
- Initial Recorder repository threat model baseline added under Docs/security/threat_model.md.
- Mapped trust boundaries, controls, and residual risks to concrete current Se mapearon los límites de confianza, controles y riesgos residuales a archivos de implementación actuales concretos.
- Closed signer/runtime wiring gap with profile-aware secure defaults, bounded Cerrado el hueco de conexión del firmante/tiempo de ejecución con configuraciones seguras conscientes del perfil, límites de entrada del firmante acotados y manejo de material clave en modo de fallo cerrado.
- Added explicit signer-rotation workflow with deterministic lifecycle events Se añadió un flujo de trabajo de rotación de firmantes explícito con eventos de ciclo de vida deterministas y metadatos de idempotencia persistidos.
- Added deterministic contract-generation boundary (
recorder-contract) with controles de autoridad y verificación de desviación del hash del manifiesto. - Hardened
recorder-contractoutput-root handling to reject symlinked roots, hard-linked artifact files, and symlink traversal under generated artifact árboles en ambos modos de generación y verificación. - Added first-party sidecar container deployment boundary: Dockerfile/Compose/config artifacts are now explicit attack surfaces and límites de confianza de implementación.
- Added system-test Docker coverage for sidecar packaging hardening and Se añadió cobertura de pruebas del sistema en Docker para el endurecimiento del empaquetado de sidecar y la validación del ciclo de vida de Docker Compose en las operaciones de apertura/grabación/consulta.
- Closed tracked P1 system-test security-relevant coverage gaps for selector dedup, proof-anchor semantics, cross-segment mismatch fail-closed behavior, Se cerraron las brechas de cobertura relevantes para la seguridad del sistema de prueba P1 rastreado, relacionadas con la deduplicación de selectores, la semántica de prueba de anclaje, el comportamiento de fallo cerrado por desajuste entre segmentos, el comportamiento de fallo cerrado por cierre de adjuntos y la paridad de SQLite/en memoria.
- Hardened
recorder-coreidentifier validation to reject whitespace-only and control-character string identifiers and require strict 64-char lowercase hexkey_idvalores. - Hardened deserialize boundaries so constrained identifier and envelope text Se han endurecido los límites de deserialización para que los campos de texto de identificador restringido y sobre no puedan ser instanciados a partir de cargas útiles de serde sin verificaciones de constructor.
- Hardened
recorderconfig and verifier boundaries: recorder startup rejects malformedrecorder_idvalues during config validation, phase-1 verification fail-closes on manifest structural mismatches, and verifier now impone límites explícitos de trabajo acotado. - Hardened
recorderevidence-provider library boundaries with explicit límites de fallo cerrado para cargas de trabajo de lista/consulta/materialización. - Hardened
recorder-storeSQLite connection dispatch with bounded queue capacity y semánticas de rechazo de saturación determinista. - Added system-test coverage for malformed identifiers, bounded CLI file input surfaces, secure signer-file policy, signer-rotation recovery/corruption behavior, contract CLI symlink safety, manifest structural tamper cases, SQLite corruption materialization failures, and single-open-segment CLI aplicación.
- Se cerraron todos los hallazgos registrados en Docs/security/audits/OSS_launch_0.md.
- Implemented
recorder-sidecaras a built-in HTTP/JSON boundary with fail-closed config validation, request auth/bounds controls, bounded queue/concurrency controls, structured error contract, and persistent idempotency semantics; updated trust boundaries, attack surfaces, mitigations, and residual risks to reflejar esta superficie de tiempo de ejecución. - Implemented generated sidecar API artifact coverage
(
sidecar.openapi/errors/enums/examples/compat) with fail-closed CI compatibility gates enforcing current pre-release-break/v1, enum-wire stability, estabilidad del registro de códigos de error y contratos de idempotencia de puntos finales mutantes. - Consolidated sidecar runtime config semantics into a dedicated
recorder-sidecar-configcrate and wired sidecar runtime startup to consume its validación de configuración de tipo fail-closed en el límite. - Expanded generated contract scope to include sidecar config artifacts
(
config/sidecar.schema.json,config/sidecar.compat.json,config/sidecar.example.toml,config/sidecar.md) emitted byrecorder-contractde los ayudantes de proyecciónrecorder-sidecar-config. - Extended sidecar compatibility gates to fail closed on sidecar config Las puertas de compatibilidad extendida del sidecar deben fallar en cerrado ante la deriva de configuración del sidecar y la inconsistencia entre artefactos (schema/compat/example/docs).
- Added sidecar integration/system validation for generated error-registry Se añadió la integración de sidecar/validación del sistema para la compatibilidad del registro de errores generado y la persistencia de idempotencia en los límites de reinicio/repetición/conflicto.
Modelo de Amenaza Delta (2026-02-08)
- Added enterprise sidecar boundary mode with explicit fail-closed config
validation (
enterprise.mode, control-plane URL/token requirements, and requisito de seguridad del modo de token). - Added enterprise identity extraction boundary (
x-tenant-id,x-principal-id,x-authn-method, optional namespace) and fail-closed Se añadió un límite de extracción de identidad empresarial (x-tenant-id,x-principal-id,x-authn-method, espacio de nombres opcional) y un comportamiento de admisión de fallo cerrado en contextos de identidad malformados o faltantes. - Added pre-handler enterprise policy gate middleware that denies protected Se ha añadido un middleware de puerta de política empresarial de pre-manejador que deniega operaciones protegidas cuando las verificaciones de autorización/cupo del plano de control no están disponibles o son denegadas.
- Added managed-cloud writer-lease assertion gating for mutating operations
(
x-recorder-writer-lease=truerequerido cuando está configurado). - Added explicit sidecar enterprise boundary hook emission to control-plane
(
/v1/enterprise/sidecar/hooks) atadmissionandresultphases with fail-closed behavior for successful protected operations when hook export falla. - Result: sidecar ingress now has an additional external dependency on enterprise control-plane availability/integrity; outage or invalid responses are handled as fail-closed admission denials and successful-hook export los fallos se tratan como errores de solicitud que fallan en cerrado.
Modelo de Amenaza Delta (2026-02-08, Endurecimiento de Sondeo y Preparación)
- Added explicit startup probe route (
GET /startup) to sidecar entry-point Se añadió una ruta de sondeo de inicio explícita (GET /startup) al punto de entrada del sidecar, política de inventario y bypass de autenticación de sondeo. - Added fail-closed readiness dependency modes (
storage_only,storage_and_enterprise) with config validation and control-plane readiness Se han añadido modos de dependencia de preparación de fallo cerrado (storage_only,storage_and_enterprise) con validación de configuración y comprobaciones de dependencia de preparación del plano de control en modos habilitados para empresas. - Added optional readiness fail-closed behavior when request admission/execution
Se añadió un comportamiento opcional de cierre por fallo de disponibilidad cuando se agota la capacidad de admisión/ejecución de solicitudes (
request_capacity_exhaustedrazón de disponibilidad). - Added explicit probe-priority middleware behavior:
/health,/startup, and/readybypass normal auth/policy/bounds request Se añadió un comportamiento explícito de middleware de prioridad de sondeo:/health,/startupy/readyomiten las puertas de solicitud de autenticación/política/límites normales para preservar la observabilidad de la orquestación durante la sobrecarga. - Added Docker system-test probe coverage validating containerized
/startupand/readybehavior before and after segment-open lifecycle transiciones.
Modelo de Amenaza Delta (2026-02-08, continuación)
- Renamed enterprise boundary adapter implementation from
enterprise.rstocontrol_plane_bridge.rsto make the trust-boundary intent explicit Se ha renombrado la implementación del adaptador de límite empresarial deenterprise.rsacontrol_plane_bridge.rspara hacer explícito la intención del límite de confianza (solo puente de plano de control; sin autoridad de evidencia-matemática). - Centralized sidecar enterprise ingress/header/hook vocabulary in
crates/recorder-sidecar/src/contract.rsand wired middleware/bridge paths to esas constantes para reducir el riesgo de elusión de políticas inducida por la deriva. - Added conformance tests to ensure sidecar operation labels, identity headers, and hook boundary/outcome labels remain synchronized with control-plane vocabulario de contratos.
- Added cross-repo end-to-end enterprise lane coverage proving control-plane deny decisions fail closed at sidecar mutation boundaries while successful Se añadió cobertura de extremo a extremo en la línea empresarial entre repositorios, demostrando que las decisiones de denegación del plano de control fallan en cerrarse en los límites de mutación del sidecar, mientras que los caminos admitidos exitosamente preservan resultados de verificación de evidencia determinística.
Modelo de Amenaza Delta (2026-02-08, Expansión de CLI OSS)
- Added CLI operator command
recorder envelope record-with-attachmentswith Se añadió el comando de operador CLIrecorder envelope record-with-attachmentscon validación de límite de adjuntos que falla en cerrado para entradas de archivo e inline base64. - Added CLI operator command
decision-gate ingest-fixturethat routes fixture inputs through productionrecorder-decision-gate-adapterintegrity and mapping políticas. - Added CLI runtime config parity checks so malformed
recorder_idvalues fail closed duringconfig validateusing the same identity-shape constraints as tiempo de ejecución del grabador. - Expanded CLI auto-seal boundary to include duration and combined policies, Se amplió el límite de auto-sellado de la CLI para incluir la duración y políticas combinadas, con rechazo de valor cero en modo de fallo cerrado para ambos umbrales de conteo y duración.
- Added CLI query page bounds (default
1000, max10000) and deterministic JSON pagination contract (envelopes+next_cursor) to prevent unbounded materialización en el límite del operador.
Modelo de Amenaza Delta (2026-02-10, Fachada de SDK + Artefactos de SDK)
- Added first-party Rust SDK facade crate (
recorder-sdk) that composes existing recorder/adapter/provider/store/verifier boundaries without introducing new semántica de protocolo. - Added SDK builder trust boundary inputs (storage path, recorder and adapter identifiers, signer/trust-root injection, startup policy knobs) and required comportamiento de validación de fallo cerrado heredado de las capas de grabador/proveedor.
- Expanded generated-contract asset inventory and controls to include SDK projection artifacts (Docs/generated/recorder/sdk/types.json, Docs/generated/recorder/sdk/methods.json, Docs/generated/recorder/sdk/test_vectors.json, Docs/generated/recorder/sdk/manifest.json) with manifest-hash authority and ejecución de verificación de deriva.
- Added SDK facade integration tests covering builder defaults, storage selección, flujos de registro/construcción/verificación, y consulta/recuperación/verificación de paridad del proveedor.
Modelo de Amenaza Delta (2026-02-14, División de Carriles de Rendimiento y Control de Capacidad Fijada)
- Added explicit perf-harness trust boundary semantics: fixed-workload regression artifacts and saturation-capacity artifacts are distinct evidence clases con diferentes decisiones operativas.
- Added lane identity and workload metadata requirements to sidecar perf
artifacts (
lane,workload.*) so downstream gates can fail closed on contexto de rendimiento faltante/ambiguo. - Added pinned-runner conditional gate requirement for capacity artifacts:
when pinned release jobs are configured for capacity enforcement, missing
sidecar_capacitylos informes se tratan como una condición de fallo cerrado. - Added anti-sandbagging policy coverage for capacity floors to prevent
degradaciones de umbral de
max_sustainable_rpssin gobernanza explícita. - Added resource-exhaustion saturation test notes: capacity sweeps are allowed
to intentionally drive bounded
429and elevated latency to identify sustainable operating region and knee point without relaxing fail-closed comportamiento en tiempo de ejecución.
Modelo de Amenaza Delta (2026-02-15, Gobernanza del Flujo de Trabajo de Rendimiento y Esquema v2)
- Added canonical perf orchestration boundary (
scripts/perf/run.py) that normalizes matrix artifacts into schema-v2 per-suite reports with explicit huella del corredor y metadatos de identidad del carril. - Added baseline-governance update surface (
scripts/perf/update_baseline.py) requiring explicit sample-count/window/author/reason metadata on baseline refrescar. - Added per-suite macrobench artifact paths
(
target/performance/stress/latest.json,target/performance/bundle/latest.json) to reduce ambiguity and prevent la evidencia sobreescribe la confusión en la clasificación del rendimiento.
Modelo de Amenaza Delta (2026-02-11, Superficie del SDK de Python)
- Added first-party Python sidecar SDK (
sdk/python) as a committed projection consumidor de Docs/generated/recorder/sdk/{types,methods,test_vectors,manifest}. - Added Python SDK trust boundary for endpoint/token/idempotency/retry inputs y el comportamiento de decodificación de respuestas con una postura de validación de fallo cerrado.
- Added deterministic Python contract-constants generator that derives
generated_contract.pydirectamente de los artefactos SDK generados canónicamente. - Added strict Python client controls for unknown error-code rejection, content-type validation, operation-local error-contract validation, and reutilización estable de la clave de idempotencia a través de reintentos de operaciones mutantes.
- Added Python SDK unit and system tests and wired repository orchestration
(
scripts/ci/generate_all.sh) para ejecutar las puertas de generación/verificación/prueba del SDK de Python.
Modelo de Amenaza Delta (2026-02-11, OSS Assurance WS1-WS3)
- Added deterministic verifier transcript artifact model
(
VerificationTranscript) and wired CLI export surface (bundle verify --verdict-transcript-output) for machine-verifiable evidencia del paquete de verificación. - Added explicit OSS assurance command boundary
(
assurance startup,assurance trust-root,assurance gates) to provide fail-closed deployment assertions for startup verification depth, trust-root modo, y ejecución de puerta de contrato. - Added system-test coverage proving SQLite operation queue saturation is rechazado fallido cerrado con salida de artefacto de resumen determinista.
Modelo de Amenaza Delta (2026-02-13, Endurecimiento de Paridad de Arranque de Token Docker)
- Eliminada la dependencia del archivo de token montado en el host para el perfil de Docker sidecar.
- Added dedicated container bootstrap binary
(
recorder-sidecar-docker-bootstrap) that ingests token source material from Docker secret file/env input and writes runtime token file to configured ruta de destino con validación de cierre por fallo y permisos solo para el propietario. - Updated Docker Compose profile to use a Docker secret source and tmpfs token target mount, preserving explicit non-root UID/GID mapping for writable data y ejecutar directorios.
- Expanded system-test Docker suite hardening checks to enforce comportamiento de arranque del token secret-source-to-tmpfs.
- Result: Windows host ACL variance no longer determines runtime token-file mode parity inside Linux containers because sidecar token file is now created en contenedor con semántica de permisos determinista.
Modelo de Amenaza Delta (2026-02-13, Fase 1 Endurecimiento Estricto de Límites de Tipo de Medio)
- Replaced permissive sidecar media-type checks with strict fail-closed parser
comportamiento para
Content-TypeyAccepten el límite HTTP. - Sidecar request-body endpoints now enforce exact
application/jsonwith optionalcharset=utf-8; unknown parameters, malformed values, and non-UTF-8 los valores de charset son rechazados conunsupported_media_typeestable. - Sidecar response negotiation now enforces strict JSON-only
Acceptranges (application/jsonor*/*) with malformed/non-JSON ranges rejected via establenot_acceptable. - Centralized route media-type policy in
recorder-sidecar-configand projected that policy into generated sidecar OpenAPI/compat artifacts and CI contract puertas, reduciendo el riesgo de desvío de tiempo de ejecución/contrato en la ampliación del límite del protocolo.
Modelo de Amenaza Delta (2026-02-13, Fase 3 Superficie de Compatibilidad OTel)
- Added production OTel compatibility adapter crate
(
crates/recorder-otel-adapter) and sidecar ingest route (POST /v1/ingest/otel) como un nuevo límite de red hostil. - New OTel ingest boundary enforces strict JSON-only media policy, bearer auth, enterprise policy middleware, bounded admission/execution controls, timeout controls, and idempotency-key requirements consistent with other mutating rutas de sidecar.
- OTel adapter mapping is deterministic and fail-closed:
strict identifier/timestamp parsing, deterministic SHA-256-to-UUIDv7-shaped
IDs, deterministic event-type mapping (
otel.span,otel.log.<severity>), y proyección de carga limitada/redactada. - Added generated integration mapping contract artifacts for Decision Gate and OTel under Docs/generated/recorder/contracts/integrations/ with runtime/contract verificaciones de deriva en la cobertura de pruebas del generador.
- Added CLI operator parity command
recorder otel ingest-fixture, expanding operator input attack surface while preserving bounded fixture reads and comportamiento de fallo cerrado del adaptador.
Modelo de Amenaza Delta (2026-02-13, Dependencia del Plano de Control Empresarial Durable)
- Expanded enterprise dependency threat posture to include durable control-plane state backends (Postgres-backed fleet/governance/cloud-ops) hosted in Asset-Core y consumido por rutas de admisión empresarial sidecar.
- Added explicit mutation-path outage fail-closed test coverage when control-
plane dependency becomes unavailable:
crates/recorder-sidecar/tests/enterprise_control_plane_e2e.rsandsystem-tests/tests/suites/sidecar_enterprise.rs. - Security effect: enterprise mode write paths deny on control-plane outage; no se permite un comportamiento de mutación de mejor esfuerzo/fallo abierto.
Modelo de Amenaza Delta (2026-02-14, Refactorización de Ingesta de Escritor Único de Sidecar)
- Replaced direct mutating envelope handler writes with a bounded ingest queue
plus dedicated single-writer runtime (
IngestGateway/IngestWriterRuntime) that owns durable commit and stream-position tarea. - Added stream-scoped identity and ordering boundary to sidecar mutating and
query routes:
tenant_id + recorder_idnow define authoritative stream scope para pedidos e idempotencia. - Added persistent stream-scoped idempotency table
(
idempotency_entries) with deterministic request-hash replay/conflict semántica y retención de TTL/cap limitada por flujo. - Added writer/projection persistence surfaces in SQLite schema v2:
streams,idempotency_entries, andquery_projection_envelopes; startup now fails closed on non-v2 databases and requires a fresh DB for this pre-lanzamiento break. - Removed mutating segment HTTP routes (
POST /v1/segments,POST /v1/segments/seal) from sidecar runtime, reducing external mutation superficie de ataque mientras se mantienen las rutas de observabilidad de segmentos de solo lectura.
Modelo de Amenaza Delta (2026-02-14, Finalización del Rendimiento de un Solo Escritor)
- Completed hot-path migration to writer-native sealing and single-transaction
SQLite micro-batch commits; mutating sidecar ingest no longer depends on
RecorderEngine::record_envelopecompromisos. - Added explicit SQLite durability/checkpoint tuning controls at sidecar config
boundary (
storage.sqlite_synchronous,storage.sqlite_wal_autocheckpoint_pages,storage.sqlite_busy_timeout_ms) with fail-closed validation andsynchronous=FULLseguro por defecto. - Updated segment observability contract:
GET /v1/segments/activenow returns paginated active-segment lists with stream identity (tenant_id,recorder_id), reducing ambiguity in flujos de trabajo de roll/debug por flujo.
Modelo de Amenaza Delta (2026-02-15, Archivo de Configuración de Sidecar - Fortalecimiento de Límites de Lectura)
- Hardened
recorder-sidecar-confighostile file-input boundaries to fail closed en archivos de configuración/secretos/claves de gran tamaño antes de analizar/utilizar. - Added explicit bounded file-read ceilings at sidecar config boundary:
sidecar config file
<= 1 MiB, token/control-plane-token files<= 4096bytes, archivo de clave del firmante<= 65536bytes. - Added unit coverage proving oversize config/token/control-plane-token/signer las entradas clave son rechazadas con códigos de error tipados estables.
Modelo de Amenaza Delta (2026-02-15, Endurecimiento de TOCTOU de Secret-Path de Sidecar)
- Closed Unix and Windows token/control-plane-token path-check/use race windows
in
recorder-sidecar-configby opening secret files with no-follow/reparse-safe flags and applying validation to opened descriptors/handles before bounded lee. - Added enterprise-path parity tests proving symlink and world-readable los archivos de tokens del plano de control son rechazados y fallan en cerrado.
- Added fail-closed unsupported-platform handling for non-Unix/non-Windows objetivos para evitar un comportamiento de retroceso permisivo.
Modelo de Amenaza Delta (2026-02-15, guardia de corrupción de segmento activo de recorder-store)
- Hardened
recorder-storeactive-segment readback to fail closed when hostile el estado persistido contains múltiples segmentos abiertos. - Added deterministic tie-break ordering (
created_at, then segment UUID bytes) for segment listings across in-memory and SQLite backends to remove nondeterminismo de marca de tiempo igual. - Hardened SQLite filter handling for explicit empty
segment_idsand envelopeIN-list filter values so empty vectors deterministically return no matches en lugar de mostrar errores de sintaxis SQL. - Added regression tests in
recorder-storecovering multi-open-segment corruption detección, estabilidad de ordenamiento con marcas de tiempo iguales y manejo de filtros de listas vacías.
Modelo de Amenaza Delta (2026-02-15, Endurecimiento de la Integridad del Catálogo CLI I18n)
- Replaced permissive CLI localization behavior with build-validated,
fail-closed catalog generation (
crates/recorder-cli/build.rs) sourced from catálogos de locales rastreados por el repositorio (crates/recorder-cli/i18n/locales/*.toml). - Added strict controls that block build/test on localization drift:
required default locale
en, locale-tag uniqueness, mandatory provenance metadata (machineorhuman_reviewed), exact key parity across locales, y paridad exacta del conjunto de marcadores de posición para cada clave de mensaje. - Added compile-fail misuse gates for typed i18n macro invocation
(
crates/recorder-cli/tests/i18n_compile_fail.rsand trybuild fixtures), previniendo el uso indebido de claves unknown y marcadores de posición en la compilación. - Enforced no-silent-fallback rendering semantics: runtime now fail-closes i18n integrity violations (unknown key in compatibility path, placeholder mismatch, unresolved placeholder token) instead of fallback permisivo a ID de clave o inglés.
- Added explicit locale provenance runtime behavior: machine-provenance locales emit a deterministic operator notice, while JSON las salidas en modo máquina permanecen neutrales en cuanto a la localidad y estables a través de la selección de la localidad.