paperclipai/paperclip · error · ToolGatewayHttpError
action_already_resolved
action_already_resolved
Error message
Tool action request has already been resolved
What it means
Optimistic lock in the approve path: the status update ...where status=pending matched zero rows, so the action request was already resolved (approved/declined/expired) by someone else. The 409 tells the caller the request has already been resolved; re-read it to see the outcome.
Source
Thrown at server/src/services/tool-gateway.ts:5488
await tx.update(toolActionRequests).set({
status: "failed",
resolvedAt: now,
updatedAt: now,
}).where(and(
eq(toolActionRequests.id, input.actionRequestId),
eq(toolActionRequests.status, "executing"),
eq(toolActionRequests.updatedAt, input.claimUpdatedAt),
));
return true;
});
if (!settled) return { reasonCode, message, settled: false };
await reflectToolActionInteractionLifecycle({
actionRequestId: input.actionRequestId,
status: "failed",
errorCode: reasonCode,
errorMessage: message,
});
return { reasonCode, message, settled: true };
}
async function expireApprovedActionForManagedArgumentDrift(input: {
actionRequestId: string;
invocationId: string;
toolName: string;
ownsExecutingClaim?: boolean;
}) {
const error = new ToolGatewayHttpError(
409,
"Approved tool action managed arguments changed after review; request a new approval",
"approved_tool_managed_arguments_changed",
{ actionRequestId: input.actionRequestId, invocationId: input.invocationId, tool: input.toolName },
);
const now = new Date();
await options.beforeManagedArgumentDriftExpiry?.();
const [expired] = await db
.update(toolActionRequests)View on GitHub (pinned to 01ad858492)
Solutions
- The request was already resolved. Do not resolve it twice; check its current status.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at server/src/services/tool-gateway.ts:5320 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-08-18).
Data as JSON: /api/errors/89b694939b3bbfe5.
Report an issue: GitHub.