agent stalled waiting for human approval on pre-approved save plays: approval queue deadlocked overnight
Fixes an agent that stalled waiting for human approval on pre-approved save plays because its approval queue deadlocked overnight, by repairing approval routing and timeouts. Use when pre-approved work waits for approval it should not need. Not for plays that genuinely require human judgement under policy.
TL;DR
Pre-approved means the approval already happened, so a stall means the machinery forgot the decision. The agent queued the plays for a human step that policy says is unnecessary, or the queue itself deadlocked, approvers never notified, requests expiring silently, or the agent holding a lock while it waits for a person who is waiting for the agent. Separate the approval classes cleanly, make every queued request expire loudly instead of silently, drain the overnight backlog by hand this once, and the save plays that were trusted in advance will finally move at the speed they were approved for.
agent stalled waiting for human approval on pre-approved save plays: approval queue deadlocked overnightUse this when
- Save plays the policy marks pre-approved sat in an approval queue overnight or longer without executing
- Approvers report never seeing requests, or seeing them only after they expired
- Other agent actions that need no approval executed normally in the same window
Not for this skill when
- The plays actually fall outside the pre-approval criteria, such as value thresholds, and policy is being misread by the team
- A human approver was unavailable and policy does require their step, making it a coverage and rota problem
Steps
- Reconstruct the stuck requests end to end. List every play that stalled, its approval class under the written policy, when it entered the queue, what notifications were sent and to whom, and its state now. The pattern across the list, wrong class, missing notification, expired request, or a technical lock, decides whether you are fixing policy configuration, a notification path, or the queue mechanics themselves. Verify: the stalled plays are listed with their class, queue history, and current state
- Read the pre-approval policy as the agent implements it, not as the document states it. Compare the criteria in code or configuration, account size, discount limits, play types, risk bands, against the policy document line by line, because a threshold typed once, a currency mismatch, or an inverted comparison can route an entire class of approved plays into the human queue while looking like caution. Verify: the implemented criteria and every divergence from the written policy are documented
- Inspect the queue mechanics for deadlock shapes. Check whether the agent waits synchronously while holding resources the approver step needs, whether approver actions write back through the same blocked process, whether requests expire without notifying anyone, and whether a single stuck request blocks the queue head for everything behind it, because overnight total stalls usually need a mechanics failure on top of any routing error. Verify: the deadlock mechanism is identified with the evidence that proves it
- Fix routing and mechanics together. Correct the criteria to match policy, make approval waits asynchronous so the agent holds no lock while waiting, let the queue process independent requests in parallel rather than head of line order, and give every request a timeout that escalates to a named owner with the play context instead of expiring into silence. Verify: a test batch of pre-approved plays executes without entering the human queue and a test approval request escalates on its timeout
- Drain the backlog deliberately. Review the stalled plays with fresh eyes, some accounts situations will have changed overnight, execute the still valid pre-approved ones immediately, send the ones needing human judgement to approvers with the delay explained, and notify the CSMs whose accounts waited, because a save play delivered a day late against a cancellation deadline can be a save play wasted. Verify: the backlog is cleared with each play executed, routed, or closed with a reason
- Add queue observability. Publish a simple live view of queue depth, oldest request age, and class breakdown that the agent owner checks daily, alert when any pre-approved class spends time in the queue at all, and review approval metrics monthly with the policy owner so the boundary between pre-approved and human approved evolves on evidence rather than drifting on configuration accidents. Verify: the queue view and alerts are live and the monthly review is scheduled
Why it happens
Approval is a policy decision encoded as routing, and routing rots. Criteria are configured once from a policy document, the document evolves, thresholds get typed with errors, and notification paths break when people change roles. A queue adds its own failure physics on top, synchronous waits, head of line blocking, and silent expiry can freeze even correctly routed work. The agent then waits faithfully forever for approvals that were granted in advance or that no human knows are being requested, and every individual component can show green while the system is stopped.
Compatibility: Agent approval workflows and queues, save play policies, and notification routing, in current agent framework and workflow tooling versions.
Variants and edge cases
agent stalled approval queue pre-approved plays
['The direct phrasing. Compare implemented criteria against the written policy line by line, configuration drift from policy is silent and total.']
approval deadlock agent waiting overnight save plays
['The mechanics variant. Asynchronous waits, parallel processing, and loud expiries are the three properties a healthy approval queue must prove in testing.']
pre-approved actions stuck waiting human approval
['The policy variant. When the boundary is wrong in the other direction, actions execute that needed a human, so audit both directions of the routing during the same review.']
Edge cases to work through before you close the incident:
- Test the approver experience, not only the agent side. If requests arrive in a tool approvers never open, routing is correct and delivery is still zero.
- Keep an emergency manual execution path for time critical plays with its own audit log. Deadlocks choose the worst nights, and a governed manual path beats an improvised one.
- Approval timeouts should escalate, never auto approve. A play that needed a human and timed out needs a louder human, not a quieter standard.
Provenance
Resolved from the public thread: https://vectle.com/posts/pst_dmH6VV5NMjeBjUq2it28SA