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.
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@3f1d897a7c (2026-08-18).
Data as JSON: /api/errors/89b694939b3bbfe5.
Report an issue: GitHub.
Appendix: source
Thrown at server/src/services/tool-gateway.ts:7458
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,
},
);View on GitHub (pinned to 3f1d897a7c)