Research

AI Agent Runtime Governance Capability Test Suite

Vendor claims about runtime governance are cheap to write and expensive to check. This page publishes the test suite KLA uses against its own control plane: nine capability tests a bank can run against any candidate platform during an evaluation, the behavior KLA’s shipped code exhibits on each, the automated tests that pin that behavior, and the limitations that remain. Every observed result cites the test or source file that proves it.

v1.0 · Published 2026-08-24 · Results verified against the KLA codebase at publication

Quick reference

Test cases
Nine capability tests: enforcement path, outage behavior, approval binding, approval expiry, replay, retries, credential custody, record alteration, offline verification.
Decision outcomes
Four policy outcomes with worst-wins precedence: allow, warn, require_approval, block. An entitlement deny outranks every rule outcome.
Offline checks
Five independent verification checks run by the open evidence verifier against an exported bundle, with no network access.
Honesty rule
Each result carries a status: pinned by automated tests, holding with named qualifications, or declared as a target. Limitations are published on this page.

01

Scope and method

What the suite tests, what it deliberately excludes, and how to reproduce each result during a procurement evaluation.

The suite tests one property: when an AI agent proposes a consequential action, the governing layer decides the outcome before the business system changes state, and the record of that decision survives scrutiny. The nine tests probe that property from the attacker’s side, the operator’s side, and the auditor’s side.

Method: each test is written as a black-box procedure a bank can run against a deployed candidate during an evaluation, using its own workflow and its own reviewers. For KLA, the observed behavior column reports what the shipped implementation does on the governed gateway path, citing the automated test or source module that pins it. The citations name real files in the KLA codebase; a procurement team can verify them in a supervised source review.

Exclusions: the suite does not test model quality, prompt robustness, or agent task performance. It does not test legal classification. It tests the control path and the evidence.

  • Reproducible: every procedure is executable against a live deployment; every KLA result cites its pinning test.
  • Negative-path first: seven of the nine tests are about what happens when something fails, changes, or is replayed.
  • Coverage-honest: results are stated for the governed action path. Coverage of a specific estate is a deployment property and must be tested per integration.

02

Threat model

The failure vectors a runtime governance layer must survive before a bank can rely on it for consequential actions.

VectorQuestionCovered by
Path bypassCan the action reach the business system without a policy decision?RT-01
Dependency outageWhat happens when the policy engine is unreachable or errors?RT-02
Time-of-check to time-of-useCan parameters change between approval and execution?RT-03
Stale authorityCan an old approval authorize a new action?RT-04
ReplayCan one approval or decision be reused across runs, tools, or tenants?RT-05
Duplicate deliveryDoes a retry execute the side effect twice?RT-06
Credential exposureCan the agent, the model, or a tool observe stored credentials?RT-07
Record alterationIs a modified decision, approval, or evidence record detected?RT-08
Untrusted exporterCan a third party verify the record without trusting the platform that produced it?RT-09

03

The nine capability tests

Each test states the buyer question, a black-box procedure, the expected behavior for any governed platform, and KLA’s observed behavior with its supporting evidence.

RT-01

Enforcement path and bypass

Holds with named qualifications

Does a denied decision stop the action on every intended route?

Procedure

  1. 01Invoke the consequential tool call through the intended governed route with a policy that blocks it; confirm the business system did not change state.
  2. 02Attempt the same action through every alternate route the architecture admits: direct API calls, secondary integrations, operator consoles.
  3. 03Ask the vendor to name the exact component that enforces each route and the team that owns its configuration.

Expected of any governed platform

A block or require_approval outcome prevents the side effect on the governed route, and the vendor can enumerate which routes are governed and which are unprotected.

Observed KLA behavior

On the gateway path, the governance gateway seals a decision receipt to the evidence ledger before the tool executes; block and require_approval terminate the call and the tool executor is never invoked. Tool policy is additionally checked in the tool hub on every MCP invocation. Run admission at the execution API is authenticated and role-checked without a policy decision; per-action policy enforcement happens at the tool boundary inside the run.

Evidence

  • 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

Qualifications

  • The gateway is enabled by deployment configuration; the shipped production and dev overlays enable it, and a self-hosted operator must do the same.
  • The internal connector-execution endpoint trusts that the tool gate ran upstream; it authorizes the caller against the bound connection and performs no second policy evaluation.
RT-02

Policy-engine outage

Pinned by automated tests

What outcome does the platform produce when policy evaluation is unavailable?

Procedure

  1. 01Take the policy decision service offline, or inject a transport failure, while the agent proposes a consequential action.
  2. 02Repeat with an internal policy-engine failure: no policy resolved, a policy pack that fails signature verification, an unavailable guardrails dependency.
  3. 03Record the outcome, the reason code, and whether any configuration can turn a failure into an allow.

Expected of any governed platform

Every failure mode produces block or require_approval with a machine-readable reason. No configuration value can convert an evaluation failure into an allow.

Observed KLA behavior

Fail-closed at every layer found in review: transport failure at the enforcement point, no policy resolved, pack signature failure, unavailable guardrails runtime, entitlement-provider failure, AI-judge outage, and evidence-store failure all deny. The environment override accepts block or require_approval and rejects allow. Production defaults to block; other environments default to require_approval. Publishing a policy pack whose default decision is allow or warn fails compilation.

Evidence

  • 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

Qualifications

  • Environments outside production fail closed to require_approval, so an outage there floods the approval queue while actions stay paused.
  • The fail-closed default derives from the runtime environment variable; a production service started with a wrong NODE_ENV degrades to require_approval.
RT-03

Changed parameters after approval

Pinned by automated tests

If arguments change between approval and execution, does the action still run?

Procedure

  1. 01Trigger a require_approval outcome, approve it, then mutate a material parameter (amount, beneficiary, target record) before the run resumes.
  2. 02Resubmit the resume payload carrying the original approval and the changed arguments.
  3. 03Confirm which side recomputes the binding: the caller’s payload or the server’s sealed record.

Expected of any governed platform

The approval is bound to a canonical digest of the exact arguments, the binding is re-verified server-side at resume from a record the caller cannot supply, and a mismatch blocks the action.

Observed KLA behavior

At approval time the gateway seals a canonical SHA-256 hash of the tool arguments into the durable ledger. At resume it recomputes the hash from the submitted arguments and compares it to the ledger copy; the hash carried on the resume payload is deliberately ignored. A mismatch, and equally an absent sealed hash, blocks with reason tool_args_mismatch.

Evidence

  • 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”

Qualifications

  • The cryptographic re-check runs on the gateway path. Governed connector tools resume through the agent-runtime state object, which pins the arguments structurally without a second hash comparison.
RT-04

Stale approval

Holds with named qualifications

Can a reviewer decide an approval after its validity window has passed?

Procedure

  1. 01Create an approval with a due time, let it lapse, then attempt to approve it through every decision surface the platform exposes.
  2. 02Confirm what authority an expired approval retains and which surfaces enforce the expiry.

Expected of any governed platform

An overdue approval refuses approve and reject on every decision surface, leaving escalation as the only path.

Observed KLA behavior

Approvals carry a due time (default one hour). Both decision surfaces refuse an overdue decision: the control-plane surface, used by the Decision Desk, computes overdue state and allows only escalation, and the execution API’s decision update requires the due time to still be in the future, returning a conflict after the deadline. Maker–checker separation is enforced server-side on both paths.

Evidence

  • 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

Qualifications

  • Tool-gate approvals wait indefinitely by design; the configurable timeout applies to explicit human-approval workflow nodes.
RT-05

Replay across boundaries

Pinned by automated tests

Can one approval or decision authorize a second action elsewhere?

Procedure

  1. 01Capture an approved decision, then replay it against a different run, a different tool call, a different tenant, and the same call with different output.
  2. 02Confirm the scoping key of the stored decision.

Expected of any governed platform

Decisions and approvals are scoped to tenant, run, and tool call; no replay crosses any of those boundaries.

Observed KLA behavior

The idempotency key is tenant:execution:gate, where the input gate embeds the tool-call id and the output gate additionally embeds the output hash. A replayed committed call returns the stored disposition; a key never authorizes work under another tenant or execution. Fail-closed approvals derive a deterministic approval id from the run and gate, so retries reference one approval.

Evidence

  • 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

Retry and duplicate delivery

Pinned by automated tests

Does a crash, retry, or duplicate delivery execute the side effect twice?

Procedure

  1. 01Deliver the same governed tool call twice concurrently; deliver it again after a completed run; kill the worker between decision and completion and let the orchestrator retry.
  2. 02Count the side effects and inspect the relationship between decisions, executions, and evidence records.

Expected of any governed platform

One side effect per approved action under concurrent and sequential retries, with the crash-window behavior stated precisely.

Observed KLA behavior

A durable write-ahead ledger records intent before execution and commits the result after; a replayed committed call returns the cached result without re-executing, and the losing writer of a concurrent duplicate returns the winner’s result. Every terminal branch, including block and cancel, commits the key so a retry returns the disposition. After a crash between intent and commit, the gateway re-drives once and forwards the idempotency key to the downstream connector.

Evidence

  • 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

Qualifications

  • In the crash window, exactly-once depends on the downstream system honouring the forwarded idempotency key; a downstream that ignores it degrades to at-least-once. This is stated in the source.
  • The durable ledger table relies on tenant-prefixed keys for isolation; it has no row-level-security policy yet.
RT-07

Credential custody

Holds with named qualifications

Can the agent, the model, or a fetched tool observe stored credentials?

Procedure

  1. 01Trace where connector credentials are resolved and which process memory they enter during a governed tool call.
  2. 02Attempt server-side request forgery through a connector URL that resolves to internal or metadata addresses.
  3. 03Submit write statements through a read-only database connector.

Expected of any governed platform

Credentials resolve inside the control plane only; egress is pinned to validated addresses; read-only connectors refuse writes at more than one layer.

Observed KLA behavior

Connector credentials resolve in the control plane and are materialized only into outbound request headers or a database client; the execution worker sends the tool input and receives the result. Connector egress validates every resolved address at connect time, pins the connection to the validated IP, keeps TLS names on the original host, and refuses redirects. Database reads pass a keyword guard with literal masking, then run inside a database-enforced read-only transaction under the connection’s least-privilege role. Secret-shaped values are rejected from durable installation records at the API boundary.

Evidence

  • 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

Qualifications

  • Locally spawned MCP tool servers inherit the worker process environment; a hostile MCP server binary could read variables present on that pod.
  • Credential custody is architectural; there is no automated negative test asserting that a model prompt can never contain a credential.
  • A connector can be configured to skip TLS verification; that switch is part of the connection record a reviewer should check.
RT-08

Record alteration

Pinned by automated tests

If someone alters a stored decision, approval, or evidence record, what detects it?

Procedure

  1. 01Alter one byte of a stored decision record, an approval audit record, and an evidence receipt, through whatever privileged access the platform’s storage admits.
  2. 02Read each altered record through the product and export it; record where detection fires.

Expected of any governed platform

Alteration of any governance record is detected on read or on export, through integrity mechanisms independent of the mutated store.

Observed KLA behavior

Governance records append to an immutable ledger through verified writes that bind key and value to the transaction proof. Audit-trail and policy-gate reads go through verified reads that recompute the record’s content hash and its inclusion proof; a mismatch refuses to serve the record. Decision receipts are signed with Ed25519 over a canonical serialization and chained: each receipt embeds the hash of its predecessor inside the signed body, so edits, deletions, and reordering break the chain at a named index. The relational transition log is append-only under a database trigger and carries the same chain hash.

Evidence

  • 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

Qualifications

  • Some policy-decision reads check a content hash stored alongside the record without recomputing a server inclusion proof, and display read models such as the control-decision table are mutable rows; alteration on those paths is established by comparison with the sealed ledger and at export.
  • Detection fires when a record is read or exported; there is no continuous background re-verification job.
  • End-truncation of a receipt chain is detected only when the verifier is given an independently stored terminal hash.
RT-09

Offline evidence verification

Pinned by automated tests

Can an auditor verify an exported bundle with no network access and no KLA account?

Procedure

  1. 01Export a Sealed Evidence Bundle for a governed run, move it to a machine with no network access, and run the published verifier.
  2. 02Flip one byte in each artifact class and re-run; every flip must turn the run red with a named check.

Expected of any governed platform

A self-contained verifier proves signatures, hash chains, and inclusion proofs from the bundle alone, states clearly what it cannot prove offline, and fails closed on tampering.

Observed KLA behavior

The evidence verifier runs five checks with no network access, using the key set carried in the bundle: manifest signature under service and tenant keys, receipt signature chains using the runtime verifier, ledger hash-chain recomputation, Merkle inclusion against the retained transaction proof, and timestamp-anchor consistency. One-byte tampering in any artifact class turns the corresponding check red in the automated suite, including signature malleability and wrong-algorithm cases. The exit code is the verdict.

Evidence

  • 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

Qualifications

  • The verifier’s key set travels inside the bundle, so a passing run proves internal consistency of the bundle as exported; detecting a re-signed bundle from an untrusted exporter requires comparing the bundle’s keys against independently received key material, and built-in key pinning is a roadmap item.
  • Merkle inclusion is checked against the transaction proof retained in the bundle; verification against the ledger’s independently signed state is a roadmap item, and confirming the timestamp anchor on the public chain requires a networked step.
  • A bundle that declares only unsigned receipts passes the receipt check with zero verified chains; the verifier reports the unsigned count and an auditor must read it.

04

Offline evidence verification

What an auditor can verify about an exported evidence bundle on a machine with no network access, and what still requires a networked or server-side check.

Runtime enforcement and audit evidence are different claims. The table lists what the offline verifier proves from the bundle alone. The distinction matters in procurement: a platform can enforce well and still produce evidence an auditor must take on trust.

CheckWhat it proves offline
manifest-signatureThe bundle manifest is signed by both a service key and a tenant key present in the bundle’s key set; malformed and wrong-algorithm signatures fail.
receipt-signaturesEvery signed decision receipt verifies under Ed25519, and each run’s receipts form an unbroken hash chain from genesis; a revoked key fails the chain.
ledger-hash-chainEvery ledger record’s content hash recomputes, and the records form one connected lineage with a single root.
merkle-inclusionThe bundle’s own Merkle root recomputes, and each retained ledger entry’s inclusion proof verifies against its transaction root.
ots-anchorThe timestamp proof parses strictly, binds the recomputed manifest digest, and carries at least one supported attestation.

The verifier is a self-contained command-line tool: exit code 0 means every check passed, 1 means a check failed, 2 means the invocation was invalid. Sample bundles are available in the Evidence Room sample.

05

Published limitations

Known boundaries of the current implementation. A bank should weigh these against the equivalent unpublished list of any other candidate.

These are the current boundaries KLA publishes with the suite. Each is stated in the source or documentation it comes from.

  1. 01Coverage is a deployment property. Results hold for the governed gateway path; an estate’s untracked routes are ungoverned until they are placed on a governed path and tested.
  2. 02Governed connector tools use the in-adapter enforcement path: fail-closed evaluation applies, and the argument-hash re-check and exactly-once ledger apply on the gateway path.
  3. 03The offline verifier’s key set travels inside the bundle; a passing run proves internal consistency of the bundle as exported, and detecting a re-signed bundle from an untrusted exporter requires independently received key material.
  4. 04The warn outcome is recorded in the receipt and surfaced to operators; at the tool boundary it executes identically to allow.
  5. 05Offline verification does not yet check inclusion against the ledger’s independently signed state, and timestamp anchors are confirmed on-chain only with a networked step.
  6. 06The durable idempotency ledger has no row-level-security policy; isolation rests on tenant-prefixed keys.
  7. 07No measured latency figures are published, because no benchmark run is committed to the repository.

06

Latency and load posture

Declared service-level targets and the measurement posture behind them.

Latency targets are declared as enforced thresholds in the committed load-test suite: policy checks target a 95th percentile under 50 ms and a 99th under 100 ms; trace ingestion targets a 95th percentile under 100 ms; the baseline scenario ramps to 100 concurrent users and fails the run when thresholds are breached.

KLA publishes no measured production latency figures on this page. A repository-committed benchmark run with hardware, dataset, and configuration attached is the standard this suite holds itself to; until one exists, the honest statement is the target and the enforcement mechanism.

07

Procurement checklist

Questions to put to every runtime governance candidate, with the artifact that answers each one.

Put these to every candidate, including KLA. Each question names the artifact that settles it; a slide does not.

  1. 01Which component decides each governed route, and what does a denied decision physically prevent? Artifact: architecture walk-through plus RT-01 run on your workflow.
  2. 02What is the documented outcome for every dependency failure, and can any configuration produce allow on failure? Artifact: RT-02 transcript and the configuration schema.
  3. 03Where is the approval-to-arguments binding stored, and which side re-verifies it at resume? Artifact: RT-03 with a mutated parameter.
  4. 04What are the scoping and expiry rules for approvals, on every decision surface? Artifact: RT-04 and RT-05 transcripts.
  5. 05What is the exactly-once story under crash and retry, stated with its crash-window qualification? Artifact: RT-06 with a worker kill.
  6. 06Which process memory ever holds business credentials, and what pins egress? Artifact: RT-07 with a forgery attempt.
  7. 07What detects alteration of each record class, and when does detection fire? Artifact: RT-08 with a one-byte flip.
  8. 08Can a third party verify the exported record with no vendor account and no network? Artifact: RT-09 on a machine with no network access.
  9. 09Which of the vendor’s published limitations would matter in your first governed workflow? Artifact: the vendor’s limitations list. Absence of one is the finding.

08

Related work

Schemas, guides, and samples that pair with this suite during an evaluation.

AI agent policy decision schema

The decision record format the receipts in this suite seal, with examples per outcome.

AI agent approval event schema

The approval record the binding tests exercise, including maker–checker fields.

Evidence Room sample

A downloadable Sealed Evidence Bundle to run the offline verifier against.

Governance platform selection guide

The bank selection guide that uses this suite as its proof-of-capability stage.

AI governance in banking: the 2026 guide

Regulation-to-control mapping and the risk-committee approval package.

AI agent audit log schema

The audit-record format the alteration tests probe.

Run the suite

Test it on one of your workflows

A bounded evaluation runs the nine tests on one consequential workflow with your reviewers and your policies, and ends with the exported bundle verified on your machine.

AI Agent Runtime Governance Capability Test Suite