paperclipai/paperclip · error

Interaction "${params.interactionId}" not found for this iss

Error message

Interaction "${params.interactionId}" not found for this issue

What it means

respondInteraction could not find the referenced interaction on the specified issue (wrong id, already resolved and removed, or belonging to a different issue). The lookup guard runs after the issue's company boundary check.

Source

Thrown at server/src/services/plugin-host-services.ts:2511

        if (!inCompany(await issues.getById(params.issueId), companyId)) return [];
        return (await interactions.listForIssue(params.issueId)) as any;
      },
      async respondInteraction(params) {
        const companyId = ensureCompanyId(params.companyId);
        await ensurePluginAvailableForCompany(companyId);
        const issue = requireInCompany("Issue", await issues.getById(params.issueId), companyId);
        // Resolving an interaction is a board-user action (the web app's
        // interaction-resolve routes are board-only). The host re-verifies the
        // paired user is an active human member at apply time and never trusts
        // the plugin-supplied identity — matching the createComment bar.
        if (!params.actorUserId) {
          throw new Error("actorUserId is required to respond to an interaction on behalf of a board user");
        }
        await requireActiveHumanMember(companyId, params.actorUserId);

        const current = await interactions.getById(params.interactionId);
        if (!current || current.issueId !== issue.id || current.companyId !== companyId) {
          throw new Error(`Interaction "${params.interactionId}" not found for this issue`);
        }
        // Idempotent replay: an already-resolved interaction converges without
        // re-applying, so a duplicate button tap from chat is a safe no-op.
        if (current.status !== "pending") {
          return { interaction: current as any, applied: false };
        }

        const actor = { userId: params.actorUserId };
        let resolved: typeof current;
        let continuationTarget = {
          id: issue.id,
          assigneeAgentId: issue.assigneeAgentId,
          status: issue.status,
        };
        if (params.action === "accept") {
          const result = await interactions.acceptInteraction(
            {
              id: issue.id,

View on GitHub (pinned to a7e689b3c3)

Solutions

  1. Verify the interactionId belongs to the issue being acted on; list the issue's interactions first and use an ID from that list.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at server/src/services/plugin-host-services.ts:2502 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@a7e689b3c3 (2026-08-18). Data as JSON: /api/errors/5b593407d9815c60. Report an issue: GitHub.