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

  1. 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)