Approval Scope Mismatch

Goal Approval Workflows Frequency Common Category Governance Published View source on GitHub ↗

Issue

An approver grants approval for a specific, narrowly-scoped action, but the agent executes something broader or materially different from what was approved, then cites the original approval as its authorization. The gap between what was approved and what was executed goes undetected because the system checks only “does an approval exist” rather than “does this specific action match the approved scope.”

Frequency: Common

Symptoms

  • Executed actions with parameters (amount, resource, recipient, time window) that differ from the approved request
  • Agents citing an approval ID for an action whose scope was expanded after approval was granted
  • Approvers reporting they approved “a subset” of what actually happened
  • Audit trails showing a single approval record reused across multiple, non-identical executions
  • Scope creep between the approval request text and the final action parameters passed to the execution layer

Root Cause

Many approval systems validate presence of an approval token or ID at execution time but don’t re-validate that the specific parameters of the executed action are a subset of (or identical to) what was actually described and approved. This is especially common when an agent generates the approval request from an early plan and then revises its plan afterward, or when approval scopes are expressed in loosely structured natural language that both the approver and the execution layer interpret independently.

Example

1. An agent requests approval to "send a follow-up email to the 12 customers
   in the Q2 churn-risk segment."
2. The approver reviews and approves that specific request.
3. Before executing, the agent re-runs its segmentation query, and due to a
   changed filter, the segment now contains 340 customers instead of 12.
4. The agent proceeds to send the email to all 340 recipients, citing the
   original approval ID as authorization, because the execution layer only
   checks "is there an active approval for a 'churn-risk follow-up' action
   type," not the recipient count or list.
5. The approver, who explicitly reviewed and signed off on a 12-person send,
   is unaware the actual blast reached nearly 30x that audience until a
   recipient outside the intended segment replies asking why they received
   the message.

Statistics

FindingContext
Scope drift between approval request and executed action is reported in a meaningful minority of agentic-execution incidents, often cited around 10-15% of approval-related incidentsTypical range in agent governance postmortems
Natural-language approval scopes (versus structured, parameterized scopes) are associated with substantially higher rates of scope mismatchConsistent with looser validation surface of free-text approvals
Most scope mismatches are discovered externally (by an affected party) rather than through internal validationCommon pattern where execution-time scope checks are absent

Mitigations

  1. Structured, parameterized approval scopes: Require approval requests to specify machine-checkable parameters (exact recipient list or count, exact amount, exact resource identifiers) rather than free-text descriptions, so scope can be validated programmatically at execution.
  2. Execution-time scope re-validation: Before executing, diff the actual action parameters against the approved scope and block execution (re-requiring approval) if they differ, rather than only checking that an approval ID exists.
  3. Approval binding to a snapshot, not a live query: If the action depends on a dynamic query (e.g., a customer segment), snapshot the exact result set at approval time and execute against that snapshot, not a re-run of the query at execution time.
  4. Scope-mismatch flagging with mandatory re-approval: Treat any detected drift between requested and executed scope as a hard stop requiring a fresh approval, never a soft warning that execution proceeds past.
  5. Post-execution scope audit sampling: Periodically sample completed actions and compare their actual parameters against the approval record they cite, to catch systemic drift even where real-time checks are incomplete.

Production Signals

Key Metrics

MetricDescriptionAlert Threshold
scope_drift_rateShare of executed actions whose parameters differ from their cited approval’s recorded scope> 1% of approved actions
dynamic_scope_reexecution_countNumber of executions where a dynamic query (segment, dataset) was re-run between approval and execution rather than using a snapshot> 0 (should be zero for approval-gated dynamic queries)
post_hoc_scope_audit_finding_rateRate of scope mismatches found in periodic post-execution audits> 0.5% of sampled executions

Alerts

AlertConditionSeverityResponse
Execution scope exceeds approved scopeAction parameters at execution time are broader than or differ from the approved requestCriticalBlock execution, require fresh approval against actual parameters
Dynamic scope re-run detectedA query underlying an approved action is re-executed after approval was grantedWarningForce re-approval against the new result set before allowing execution