RT-01
Ruta de aplicación y bypass
Válido con condiciones identificadas¿Una decisión de bloqueo detiene la acción en todas las rutas previstas?
Procedimiento
- 01Invoque la llamada consecuente por la ruta gobernada con una política que la bloquee y confirme que el sistema empresarial no cambió.
- 02Intente la misma acción por cada ruta alternativa admitida por la arquitectura: API directa, integraciones secundarias y consolas de operador.
- 03Pida al proveedor el componente exacto que aplica cada ruta y el equipo que posee su configuración.
Esperado de cualquier plataforma gobernada
Un resultado block o require_approval impide el efecto en la ruta gobernada y el proveedor puede enumerar las rutas gobernadas y desprotegidas.
Comportamiento observado de KLA
En la ruta de pasarela, esta sella el recibo de decisión en el ledger de evidencia antes de ejecutar la herramienta; block y require_approval terminan la llamada. La política de herramienta también se comprueba en el hub en cada invocación MCP.
Evidencia
- services/governance-pep/src/gateway.ts: decision sealed before the side effect; block and require_approval short-circuit
- governance-gateway.test.ts: 15 cases on the gateway decision path
- cmb-aml-governance-gateway.test.ts: 16 end-to-end cases on a banking workflow
- scripts/check-production-governance-gateway.mjs: deployment guard that the gateway is enabled in production
Condiciones
- La pasarela depende de la configuración de despliegue y el operador self-hosted debe habilitarla.
- El endpoint interno de ejecución de conectores confía en que la compuerta de herramientas se ejecutó antes.
RT-02
Caída del motor de políticas
Fijado por pruebas automatizadas¿Qué resultado produce la plataforma cuando la evaluación de políticas no está disponible?
Procedimiento
- 01Desconecte el servicio de decisión de políticas o inyecte un fallo de transporte mientras el agente propone una acción.
- 02Repita con un fallo interno del motor de políticas y registre cada resultado.
- 03Registre el resultado, el código de motivo y si alguna configuración puede convertir el fallo en autorización.
Esperado de cualquier plataforma gobernada
Cada fallo produce block o require_approval con un motivo legible por máquina. Ningún valor de configuración convierte un fallo de evaluación en allow.
Comportamiento observado de KLA
La revisión muestra cierre por defecto en todas las capas: los fallos de transporte, de política, de firma, de dependencias, del juez de IA y del almacén de evidencia deniegan.
Evidencia
- services/governance-pep/src/decisions.ts + environment.ts: fail-closed decision builder; override cannot be allow
- policy-evaluation-service.test.ts: 12+ fail-closed cases including pack-verification failure and “must not fail open” regression
- services/policy-engine/src/policy-pack/lint.ts: allow/warn default decision is a publish-time error
- transition-gate-decision.test.ts: errored policy outcome blocks and is excluded from human-recoverable reasons
Condiciones
- Los entornos distintos de producción cierran con require_approval y una caída llena la cola.
- El valor por defecto depende de la variable de entorno de ejecución.
RT-03
Vinculación de aprobación a parámetros
Fijado por pruebas automatizadas¿Puede una aprobación autorizar parámetros distintos de los revisados?
Procedimiento
- 01Solicite aprobación para una llamada con parámetros concretos.
- 02Cambie un parámetro material después de la aprobación y reanude.
- 03Compruebe que el parámetro original se conserva y que el cambio se rechaza o exige una nueva decisión.
Esperado de cualquier plataforma gobernada
La aprobación se vincula a los parámetros exactos y cualquier cambio material requiere una nueva decisión.
Comportamiento observado de KLA
La reanudación recalcula el hash de argumentos y rechaza una mutación, mientras que el binding de salida incluye el hash del resultado.
Evidencia
- services/governance-pep/src/gateway.ts: TOCTOU re-verification against the ledger-sealed hash only
- governance-gateway.test.ts: “TOCTOU: Phase-2 resume with mutated arguments fails closed and never executes”
- cmb-aml-governance-gateway.test.ts: “fails closed when the decision input changes after approval”
Condiciones
- La reverificación criptográfica se ejecuta en la ruta del gateway. Las herramientas de conector gobernadas reanudan a través del objeto de estado del runtime del agente, que fija los argumentos estructuralmente sin una segunda comparación de hash.
RT-04
Aprobaciones vencidas
Válido con condiciones identificadas¿Puede una aprobación vencida autorizar una acción?
Procedimiento
- 01Cree una aprobación con una hora límite, deje que venza e intente aprobarla a través de cada superficie de decisión que exponga la plataforma.
- 02Confirme qué autoridad conserva una aprobación vencida y qué superficies aplican el vencimiento.
Esperado de cualquier plataforma gobernada
Una aprobación vencida no autoriza la acción y una decisión propia no puede comprobarla.
Comportamiento observado de KLA
Las aprobaciones tienen una hora límite, una hora por defecto. Ambas superficies de decisión rechazan una decisión vencida: la superficie del plano de control, utilizada por el Decision Desk, calcula el estado de vencimiento y solo permite escalar, y la actualización de decisiones de la API de ejecución exige que la hora límite siga en el futuro, por lo que devuelve un conflicto después del plazo. La separación maker-checker se aplica en el servidor en ambas rutas.
Evidencia
- services/api/src/routers/approvals.ts: overdue approvals accept escalate only; maker cannot check
- services/execution-api/src/routes/approvals.ts: decision update requires due_at in the future
- approval-decision-self-approval.test.ts: post-deadline decision returns 409 without signaling the workflow
- approvals.maker-checker.test.ts: 10 cases
Condiciones
- Las aprobaciones de compuerta de herramientas esperan indefinidamente por diseño; el tiempo de espera configurable se aplica a los nodos explícitos de flujo de aprobación humana.
RT-05
Replay entre límites
Fijado por pruebas automatizadas¿Puede una aprobación autorizar una segunda acción en otro lugar?
Procedimiento
- 01Capture una decisión aprobada y reprodúzcala contra otra ejecución, herramienta, tenant y salida.
- 02Confirme la clave de alcance de la decisión almacenada.
Esperado de cualquier plataforma gobernada
Las decisiones se limitan a tenant, ejecución y llamada de herramienta; ningún replay cruza esos límites.
Comportamiento observado de KLA
La clave de idempotencia es tenant:execution:gate y una llamada reproducida devuelve el resultado almacenado sin autorizar otro tenant o ejecución.
Evidencia
- services/governance-pep/src/idempotency.ts: key structure
- cmb-aml-governance-gateway.test.ts: “does not replay an approval across execution or tenant ledger keys”
RT-06
Reintento y entrega duplicada
Fijado por pruebas automatizadas¿Un fallo, reintento o entrega duplicada ejecuta dos veces el efecto?
Procedimiento
- 01Entregue dos veces la misma llamada gobernada y repítala después de completar la ejecución.
- 02Cuente los efectos e inspeccione la relación entre decisiones, ejecuciones y evidencia.
Esperado de cualquier plataforma gobernada
Un efecto por acción aprobada en reintentos concurrentes y secuenciales, con el comportamiento de la ventana de fallo declarado.
Comportamiento observado de KLA
El ledger duradero registra la intención antes de ejecutar y el resultado después; una llamada confirmada reproducida devuelve el resultado almacenado sin volver a ejecutar.
Evidencia
- services/governance-pep/src/gateway.ts: write-ahead intent, committed short-circuit, one-shot output release
- governance-gateway.test.ts: “exactly-once: a replayed committed call returns the cached result without re-executing”; concurrent-loser case
- cmb-aml-governance-gateway.test.ts: re-drive across an orchestrator retry without a second side effect
Condiciones
- En la ventana de fallo, exactly-once depende de que el sistema descendente respete la clave de idempotencia.
- La tabla del ledger no tiene todavía una política de seguridad a nivel de fila.
RT-07
Custodia de credenciales
Válido con condiciones identificadas¿Puede el agente, el modelo o una herramienta observar credenciales almacenadas?
Procedimiento
- 01Rastree dónde se resuelven las credenciales y en qué memoria entran.
- 02Pruebe falsificación de solicitudes del lado del servidor mediante una URL de conector.
- 03Envíe escrituras a través de un conector de base de datos de solo lectura.
Esperado de cualquier plataforma gobernada
Las credenciales solo se resuelven en el plano de control, la salida se fija a direcciones validadas y los conectores de solo lectura rechazan escrituras.
Comportamiento observado de KLA
Las credenciales se resuelven en el plano de control; la salida valida y fija la IP, rechaza redirecciones y las transacciones de base de datos son de solo lectura.
Evidencia
- services/api/src/services/connector-execution.ts: control-plane custody; DNS-pinned egress; BEGIN READ ONLY
- connector-network-safety.ts: metadata, link-local, multicast, and documentation ranges blocked; private ranges gated by explicit configuration
- mcp-installation-secret-safety.ts: secret-pattern rejection at the API boundary
Condiciones
- Los servidores MCP iniciados localmente heredan el entorno del proceso worker.
- No hay una prueba negativa automatizada que garantice que un prompt nunca contiene credenciales.
- Un conector puede omitir la verificación TLS; el revisor debe comprobar ese registro.
RT-08
Alteración de registros
Fijado por pruebas automatizadasSi alguien altera un registro almacenado, ¿qué lo detecta?
Procedimiento
- 01Altere un byte de un registro de decisión, auditoría de aprobación y recibo de evidencia.
- 02Lea cada registro alterado y expórtelo; registre dónde aparece la detección.
Esperado de cualquier plataforma gobernada
La alteración se detecta al leer o exportar mediante mecanismos independientes del almacén modificado.
Comportamiento observado de KLA
Las lecturas del registro de auditoría y de las compuertas de políticas pasan por lecturas verificadas que recomputan el hash de contenido del registro y su prueba de inclusión; una discrepancia impide servir el registro. Los recibos firmados forman una cadena y las alteraciones, eliminaciones y reordenaciones rompen la cadena.
Evidencia
- services/api/src/services/immudb-multi-tenant.ts: hash recomputation and trusted-read verification on audit and policy-gate reads
- services/governance-pep/src/receipt-chain.ts + signing.ts: signed hash chain; 28 test cases including tamper, reorder, truncation
- export-api.receipt-ledger-bundle.test.ts: tampered receipt and tampered ledger record turn the export red
Condiciones
- Algunas lecturas de decisiones de políticas comprueban un hash de contenido almacenado junto al registro sin recomputar una prueba de inclusión del servidor, y los modelos de lectura visibles, como la tabla de decisiones de control, son filas mutables; la alteración en esas rutas se establece mediante comparación con el ledger sellado y durante la exportación.
- La detección ocurre al leer o exportar; no existe una reverificación continua.
- La truncación final requiere un hash terminal almacenado de forma independiente.
RT-09
Verificación offline de evidencia
Fijado por pruebas automatizadas¿Puede un auditor verificar un paquete exportado sin acceso a la red y sin una cuenta de KLA?
Procedimiento
- 01Exporte un Sealed Evidence Bundle, llévelo a una máquina aislada y ejecute el verificador.
- 02Cambie un byte de cada clase de artefacto y repita; cada cambio debe marcar una comprobación concreta.
Esperado de cualquier plataforma gobernada
Un verificador autónomo prueba firmas, cadenas hash y pruebas de inclusión a partir del paquete, explica lo que no puede demostrar offline y falla ante la manipulación.
Comportamiento observado de KLA
El verificador ejecuta cinco comprobaciones sin acceso a la red, usando el conjunto de claves incluido en el paquete: firma del manifiesto, cadenas de firmas de recibos, recomputación de la cadena hash del ledger, inclusión Merkle y consistencia del ancla temporal.
Evidencia
- packages/evidence-verifier: five checks, command-line verifier, ~55 automated cases
- verifier.test.ts: one-byte tamper per artifact class; revoked key; path escape; malformed key set
Condiciones
- El conjunto de claves del verificador viaja dentro del paquete, por lo que una ejecución correcta demuestra la coherencia interna del paquete tal como se exportó; detectar un paquete vuelto a firmar por un exportador no confiable requiere comparar sus claves con material de claves recibido de forma independiente, y la fijación de claves integrada está en la hoja de ruta.
- La inclusión Merkle se comprueba contra la prueba de transacción conservada en el paquete; verificarla contra el estado firmado de forma independiente por el ledger está en la hoja de ruta, y confirmar el ancla temporal en la cadena pública requiere un paso conectado.
- Un paquete con recibos no firmados puede pasar con cero cadenas verificadas; el auditor debe leer el recuento.