AI Agent Verification: Prove the Outcome, Not the Tool Call

TL;DR

AI agent verification must establish what happened in the target environment, not simply whether a tool returned successfully. Separate request acceptance, configuration changes, runtime convergence, and service outcomes. Bind evidence to the approved resource, release, workload, and measurement window. Use explicit PASS, FAIL, PENDING, and UNKNOWN verdicts, enforced outside the planner. Start with a versioned verification contract for one bounded workflow, then test whether stale measurements, incomplete telemetry, or misleading health signals can produce a false success report.

On this page

Introduction

An AI deployment agent updates a staging application. The platform accepts the request, the execution trace contains no obvious error, and the service dashboard looks healthy. The agent closes the task and reports success.

The replacement instances have not become available. The dashboard is still describing traffic served by the previous release.

In this illustrative scenario, the API acknowledgment and dashboard may both be accurate. The architectural failure is that the agent combines evidence answering different questions and uses it to support a conclusion neither establishes.

This article develops the observation side of AI feedback into an implementation pattern: a contract that determines what the system must establish before declaring an action successful. The companion foundation, AI Feedback Loops: Cybernetics and Control Theory for Agents, is scheduled for September 16, 2026.

We will use a hypothetical rollout of catalog-api in staging. Assume an approved release, a declared deployment owner, controlled test traffic, and read-only verification access. The contract, measurements, and verdicts below are illustrative design examples, not results from a production deployment.

The question is not whether the agent sounds certain. It is whether the runtime has sufficient evidence for the claim it is making.

Define What the Agent Is Allowed to Claim

A single success: true field can hide several stages of an operation.

RFC 9110 makes one boundary explicit: HTTP 202 Accepted means processing has been accepted but has not completed. Other successful responses must be interpreted according to their operation. Successfully updating a desired configuration does not establish that the resulting application works.

For this workflow, separate four claims:

ClaimSupporting evidenceWhat remains unproven
Request acceptedTarget acknowledgment and operation identifierWhether processing completed
Configuration updatedAuthoritative readback of the approved changeWhether the runtime reached that configuration
Runtime convergedCompletion evidence for the intended releaseWhether the application meets its requirements
Outcome verifiedRequired service checks over an eligible observation windowPermanent correctness or freedom from every possible side effect

These are assurance layers, not universal API states. An integration may expose several through one interface, but the workflow should not collapse their meanings.

Define the terminal claim before execution. For catalog-api, it might be: the approved release is serving the designated staging workload, its latency and error checks pass, representative requests return correct results, and the required guardrails remain satisfied.

That definition belongs to the service owner and approved workflow. The planner must not weaken it after discovering that the rollout is difficult to complete.

Authorization remains separate. An action can achieve its technical objective while exceeding its approved scope. A verification pass must not retroactively legitimize an unauthorized change.

Make Verification a Separate Runtime Responsibility

The model may propose an action, interpret observations, and explain a result. It should not be the sole authority accepting its own success claim.

In this design, a verifier reads authoritative state, measurements, and approved probe results. It evaluates a versioned contract. A workflow transition gate then enforces whether the task can complete, continue observing, or enter an escalation path.

Notice that the action record and environmental evidence meet at the verifier, not inside the planner’s narrative.

The planner receives the verdict and reasons. It cannot change the required window, substitute another resource, or remove a failing check to complete the task.

This does not require a separate platform for every function. Deterministic application logic may be sufficient for a narrow workflow. Higher-impact actions may justify stronger deployment and identity separation. The important boundary is that executing an action does not grant authority to redefine its acceptance criteria.

A model-assisted evaluator can help with semantic checks, such as whether generated content satisfies a rubric. However, rereading the planner’s explanation produces no new evidence about the environment. The evaluator must inspect the relevant artifact or observation, and ambiguous judgments need an explicit disposition.

Likewise, two verifiers reading the same stale backend do not provide independent confirmation. Assess independence by shared failure modes, not by the number of agents or dashboards involved.

Bind Evidence to the Resource and Revision

A service name is not enough to identify the subject of a verification decision.

For the proposed rollout, bind the operation to its environment, resource identity, approved release, and verification-contract version before execution. Use an immutable resource identifier where available. A newly created resource with the same display name should not accidentally satisfy an older operation’s checks.

Preserve the distinction between the intended artifact and the active runtime revision. A release label copied into a request shows intent. Verification must establish that the relevant runtime is actually using the approved artifact and that the measurements describe its traffic.

Kubernetes provides a concrete example. Its Deployment documentation defines completion using updated replicas, availability, and the absence of running old replicas. The same documentation demonstrates that Available=True can coexist with Progressing=False and ProgressDeadlineExceeded.

A workload can therefore retain minimum availability while failing to complete its intended rollout. For this article’s design, checking only the availability condition is insufficient.

The verifier should also detect superseding changes. If another deployment replaces release A with release B during measurement, do not attach A’s evidence to B. Invalidate the affected completion decision and reconcile the new state.

A Passing Verdict Has a Validity Boundary

Record the claim as “release A satisfied contract V during window W,” not “the service is healthy.”

Before a later workflow relies on that verdict, check that its target and required conditions still apply. A resource replacement, configuration change, or expired freshness limit can invalidate reuse without making the original historical record false.

This is the difference between preserving evidence of a completed check and treating that check as permanent permission to proceed.

Fresh Evidence Can Still Describe the Wrong Time

A query executed now can return an aggregate containing pre-change behavior. Collection time does not establish when the underlying events occurred.

OpenTelemetry’s Logs Data Model distinguishes Timestamp, the source event time, from ObservedTimestamp, when the collection system observed the event. The architectural lesson extends to this verifier: retain measurement times and window boundaries rather than treating the arrival of a result as evidence of its applicability.

For the staging example, suppose the rollout is verified as converged at 10:02:15 UTC. The contract requires five minutes of subsequent test traffic. The diagram assumes clock uncertainty has already been accounted for.

A healthy five-minute aggregate queried at 10:03 does not satisfy that contract. Most of its observation period precedes convergence.

In the implementation, begin after the latest plausible convergence time allowed by the approved clock-error bounds. Require a full measurement window, an acceptable delay between its end and the verdict, and usable coverage throughout it.

Coverage needs its own evidence. For controlled staging traffic, reconcile the test client’s dispatched attempts with their recorded outcomes and check collection health. A full-looking dashboard is not a completeness check.

If the selected window cannot be evaluated reliably, do not silently choose a later, healthier one. A new attempt may be appropriate, but it needs an explicit rule and must retain the earlier result. Otherwise, repeated measurement becomes a way to search for a pass.

Measure the Workload, Not Just a Healthy Endpoint

Google’s Monitoring Distributed Systems distinguishes internal instrumentation from checks of externally visible behavior. It also separates latency, traffic, errors, and saturation. Applied here, platform readback and client-path checks answer different questions.

For catalog-api, the approved test client sends a defined catalog-read workload through the intended staging ingress. The probe suite checks expected response content, not merely an HTTP success code. Infrastructure measurements support diagnosis and guardrail checks; they do not replace the application result.

Make the Denominator Explicit

Define an eligible attempt before collecting results. In this example, each dispatched test request receives an identifier and an outcome: successful response, defined failure, or unresolved observation.

Count timeouts and the other contract-defined failures in the error numerator. Use all eligible attempts as the denominator. Do not calculate reliability only from requests that reached an application log, because the test is meant to assess the client-visible path.

When an attempt’s outcome is missing, preserve that uncertainty. Missing records are not successful requests, and excluding them can make the result look better than the evidence supports.

Measure successful-request latency separately from failures, while retaining failure information for diagnosis. The latency threshold and error threshold must both pass; one does not compensate for the other.

Do Not Average Percentiles

Here, p95 means the 95th percentile of duration across the defined successful-request population.

Prometheus documents why averaging precomputed instance quantiles does not produce a valid service-wide percentile. Its histogram approach supports aggregation before estimating the percentile, with accuracy dependent on the representation used.

Approve the aggregation method alongside the threshold. A minimum request count makes a window eligible for this contract; it does not independently establish statistical confidence. A staging test also demonstrates behavior under its defined workload, not every production traffic pattern.

Give the Runtime Four Verdicts, Not One Boolean

A verifier must distinguish an observed failure from an inability to determine the result. It must also distinguish normal waiting from a broken observation path.

Use the following proposed state model:

VerdictMeaningPermitted workflow behavior
PASSEvery required check passes on valid, applicable evidenceComplete the scoped task
FAILTrusted evidence establishes a required-condition failure or critical breachBlock dependent writes and enter approved recovery or incident review
PENDINGExecution or measurement is legitimately incomplete within its deadlineContinue bounded, read-only observation
UNKNOWNRequired evidence is missing, stale, conflicting, unbound, or inconclusive at the deadlinePreserve uncertainty, block dependent writes, and escalate

PENDING is not a holding place for every problem. A healthy collector waiting for an observation window to finish is different from a failed collector that cannot provide the required evidence.

Define precedence per check. A verified critical breach remains a failure even when another source is unavailable. Preserve both facts. Conflicting observations about the same condition need reconciliation, not a majority vote between dashboards.

Monitor critical abort conditions during execution. Do not wait for the final window to finish when a separately defined stop condition has already been established. However, do not fail a percentile test early merely because an incomplete window looks unfavorable unless the contract explicitly defines that early-abort rule.

Amazon’s Making retries safe with idempotent APIs explains another important uncertainty: after a timeout, an operation may have happened despite the missing response. An ambiguous execution result therefore requires reconciliation rather than an assumed failure.

UNKNOWN does not mean “nothing happened,” and it does not authorize another mutation.

Blocking dependent writes means preventing this workflow from building further changes on an unverified assumption. It does not mean shutting down the service or disabling its established controllers. Recovery actions still require their own authority.

An Implementation Contract for AI Agent Verification

The YAML below describes a proposed contract for the staging rollout. It is not a Kubernetes manifest, an OpenTelemetry configuration, or an executable vendor policy.

Its purpose is to make acceptance criteria inspectable before implementation. Replace the illustrative thresholds, traffic profile, probe suite, and deadlines with approved local definitions. Resolve the resource and release bindings before execution.

contract_id: catalog-rollout-verification-v1

scope:
  environment: staging
  service: catalog-api
  resource_uid: bind_before_execution
  expected_release: bind_from_approved_change

evidence:
  readers: [cluster-reader, telemetry-reader, test-client]
  require_authenticated_sources: true
  require_valid_clock_bounds: true
  max_current_evidence_age_seconds: 30
  planner_summary_is_evidence: false

convergence:
  require_expected_release_readback: true
  require_platform_rollout_complete: true

service_window:
  start: after_verified_convergence_and_clock_margin
  duration_seconds: 300
  selection: first_full_window
  traffic_cohort: catalog-read-test-v1
  measurement_boundary: approved_test_client
  min_successful_requests: 1000
  max_successful_request_p95_ms: 500
  max_error_ratio: 0.01
  required_probe_suite: catalog-read-v3
  require_all_client_attempts_accounted_for: true
  require_complete_source_coverage: true
  on_superseding_change: invalidate_completion_decision

constraints:
  require_authorized_execution_receipt: true
  required_guardrail_profile: catalog-staging-guardrails-v1

verification:
  deadline_seconds_from_dispatch: 1200
  known_critical_breach_takes_precedence: true
  on_pass: complete_with_scoped_verdict
  on_pending: bounded_read_only_polling
  on_unknown: block_dependent_writes_and_escalate
  on_fail: block_dependent_writes_and_request_recovery_review

The implementation must define what each reader returns and how its identity and scope are checked. The probe suite and guardrail profile must resolve to versioned tests, not remain unexplained names. Missing mandatory results prevent PASS.

Reject unresolved bindings, unsupported keys, invalid units, and malformed observations. Never convert a missing numeric value to zero. A parser accepting the YAML says nothing about whether the runtime enforces its rules.

The freshness bound applies to current-state evidence and the end of the completed measurement window, not to historical execution receipts. Persist the dispatch time and operation record so a restart does not reset the 20-minute deadline. Rate-limit polling separately.

At the deadline, emit FAIL when valid evidence establishes failure. If the result is still inconclusive, emit UNKNOWN rather than extending the deadline automatically. A human-authorized exception should be recorded as an exception, not relabeled as a technical PASS.

Walk Through a Verdict That Looks Successful

Consider an illustrative evaluation using that contract. The approved release is active, rollout completion is verified, and the first eligible five-minute window is fully collected. No superseding change occurs, all required probes pass, and the required guardrails are satisfied.

The test client records 1,200 eligible attempts: 1,180 successful responses and 20 failures. Successful-request p95 latency is 420 milliseconds.

The latency result is below the 500-millisecond limit, and the successful-request count exceeds the 1,000-request minimum. Nevertheless, the error ratio is 20 divided by 1,200, approximately 1.67 percent. The contract permits at most 1 percent.

The correct verdict is FAIL. An illustrative machine-readable result could be:

operation_id: staging-rollout-042
contract_id: catalog-rollout-verification-v1
verdict: FAIL
reason_codes:
  - ERROR_RATIO_EXCEEDED
checks:
  expected_release: PASS
  rollout_complete: PASS
  evidence_coverage: PASS
  successful_request_latency: PASS
  request_error_ratio: FAIL
  required_probes: PASS
  guardrails: PASS
next_step: recovery_review_required

That output gives the planner useful diagnostic information without granting permission to repeat the deployment or weaken the threshold.

Now change the scenario. The client confirms 1,200 dispatched attempts, but only 1,180 outcomes are available and the remaining 20 cannot be reconciled. There is no trustworthy evidence that they all succeeded or all failed.

Assuming no other check establishes failure, the result is UNKNOWN, not a zero-percent error rate and not an inferred 1.67-percent failure rate. The collection problem must be resolved before the runtime can establish the outcome.

Finally, suppose every check passes. The supported claim is that this release met this contract under this workload and window. It does not prove that the deployment caused an improvement, nor that future production traffic will behave identically. Preserve that distinction before the incident record becomes a reusable operating lesson.

Keep Correlation Separate From Durable Evidence

OpenTelemetry context propagation can correlate activity across service boundaries. Its sampling documentation also makes clear that traces or spans may not be processed or exported when they are not sampled.

For this architecture, use tracing to investigate the workflow, but retain a durable action and verdict record independently of optional trace retention.

Connect the operation identifier to its approved target, execution receipt, contract version, evidence window, source references, verdict, and reason codes. Preserve the evaluated measurements or a suitably protected snapshot. A saved query alone may return different results later because the underlying data or evaluation time changed.

The executor should not be able to erase failed attempts or overwrite the verifier’s record. At the same time, auditability does not require unrestricted retention of every prompt, customer payload, or secret. Keep the necessary metadata and apply access and retention controls to referenced artifacts.

A trace identifier is useful correlation data. In this design, it is not an authorization credential or proof that a result came from a trusted source.

Test False Success Before Expanding Autonomy

The most valuable verifier tests are the cases in which a plausible success report would be wrong.

Injected conditionExpected behavior under this contract
Request accepted, rollout still legitimately progressingPENDING within the deadline, without resubmitting the mutation
Healthy measurements belong to the previous releaseReject them as completion evidence; collect correctly scoped evidence
Window includes pre-convergence trafficReject it for the required post-change evaluation
Required collector loses observationsUNKNOWN unless other valid evidence already establishes failure
Latency passes but error ratio exceeds its limitFAIL with the specific failed check preserved
Known critical breach occurs while another source is unavailableFAIL, with the separate evidence gap retained
Another deployment supersedes the targetInvalidate completion for the original operation and reconcile

These are proposed acceptance tests, not executed results. Include a valid passing case as well; a verifier that rejects everything is not a useful operating control.

Test the real readers, identities, persistence, and transition gate. A model conversation that promises to respect UNKNOWN does not prove that a downstream write is blocked.

A practical rollout starts with read-only comparison against existing human-reviewed changes. Investigate disagreements between the verifier and the operator, then enforce the gate for one bounded staging workflow. Expand only after its failure handling has been demonstrated.

Assign the service owner responsibility for acceptance criteria, the platform team responsibility for evidence and execution integration, and the governance owner responsibility for authority and exceptions. Give the verifier an operational owner: its outage is a loss of automated decision capability, even when the application remains healthy.

Track inconclusive verdicts, time to verification, rejected evidence, and later-discovered false passes. Repeated UNKNOWN results should trigger instrumentation or contract review, not quiet removal of checks.

Verification adds latency and operational cost. Apply it proportionately to consequence and reversibility, but do not promise autonomous completion where the outcome cannot be adequately observed. Post-action checks also cannot prevent an irreversible side effect that has already occurred; pre-action controls remain necessary.

Conclusion

Reliable AI agent verification makes success a bounded, testable claim. The runtime must establish which resource changed, which release is active, what evidence applies, and how the service behaved during the required observation window.

Start with one action class and one versioned contract. Define the request population, failure denominator, freshness rules, and verdict semantics before execution. Then test whether stale, missing, or misleading observations can produce a false PASS.

Keep verification separate from authorization, and keep both outside the planner’s ability to redefine on demand. The operational benefit is not a more confident agent. It is a workflow that can distinguish completion, failure, legitimate waiting, and uncertainty without concealing the differences.

The next installment, AI Agent Stability: When Retries Become the Incident, examines the correction side of the loop. Knowing that an outcome failed is useful only when the next action remains bounded.

Before an agent declares success, require evidence for the outcome it is claiming, not just a receipt for the action it attempted.

External References

Keep exploring

Choose your next step

Continue with the path that best matches the architecture or operating challenge in front of you.

1 thought on “AI Agent Verification: Prove the Outcome, Not the Tool Call”

Leave a Reply

Discover more from Digital Thought Disruption

Subscribe now to keep reading and get access to the full archive.

Continue reading