paperclipai/paperclip · error

Another execution for this routine is already in progress

Error message

Another execution for this routine is already in progress

What it means

409 from issue checkout/run start. Fires when the target routine already has an execution in progress — the checkout path detects an existing active run for the same routine and refuses to start a concurrent one, enforcing one-active-execution-per-routine.

Solutions

  1. Wait for the conflicting state to clear (running job, hold, pause, or stale fingerprint), refresh the current state, then retry the operation.
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at server/src/routes/issues.ts:10687 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/59d11cc6abd52bf6. Report an issue: GitHub.

Appendix: source

Thrown at server/src/routes/issues.ts:11471

        actor,
        source: "issue.comment",
      });
      if (issue.status === "in_review" && expiredInteractions.length > 0) {
        const reviewAttention = await svc
          .listReviewAttention(issue.companyId, [issue])
          .then((map) => map.get(issue.id));
        if (reviewAttention?.state === "stalled") {
          const expiredInteractionIds = expiredInteractions.map((interaction) => interaction.id).sort();
          lostReviewPathRef = expiredInteractionIds.length === 1
            ? expiredInteractionIds[0]!
            : `interactions:${expiredInteractionIds.join(",")}`;
        }
      }

    } else if (updateReferenceSummaryAfter) {
      issueResponse = {
        ...issueResponse,
        relatedWork: updateReferenceSummaryAfter,
        referencedIssueIdentifiers: updateReferenceSummaryAfter.outbound.map(
          (item) => item.issue.identifier ?? item.issue.id,
        ),
      };
    }

    const commentIsFromAssigneeRun = comment
      ? await commentWasCreatedByAssigneeRun(comment, issue.assigneeAgentId)
      : false;

    const assigneeChanged =
      issue.assigneeAgentId !== existing.assigneeAgentId || issue.assigneeUserId !== existing.assigneeUserId;
    const statusChangedFromBacklog =
      existing.status === "backlog" &&
      issue.status !== "backlog" &&
      req.body.status !== undefined;
    const statusChangedFromClosedToTodo =
      isClosedIssueStatus(existing.status) &&

View on GitHub (pinned to 01ad858492)