paperclipai/paperclip · error

Agent run id required

Error message

Agent run id required

What it means

400 from requireAgentRunId: the request demands an agent run context but the actor provided no run id, so the run-scoped operation cannot proceed.

Source

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

        for (const row of rows) if (row.name) nameById.set(row.id, row.name);
      } catch (err) {
        logger.warn({ err }, "failed to resolve agent names for issue write denial copy");
      }
    }
    return {
      actorLabel: actorAgentId ? nameById.get(actorAgentId) ?? null : null,
      assigneeLabel: issue.assigneeAgentId ? nameById.get(issue.assigneeAgentId) ?? null : null,
      issueIdentifier: issue.identifier ?? null,
      responsibleUserName: null,
    };
  }

  /** Respond to a denied issue write with copy that names boundary, who, and path. */
  async function denyIssueWrite(
    req: Request,
    res: Response,
    issue: { identifier?: string | null; assigneeAgentId: string | null },
    code: IssueWriteDenialCode,
    extraDetails: Record<string, unknown> = {},
  ) {
    const labels = await issueWriteDenialLabels(req, issue);
    const { status, body } = issueWriteDenialResponse(code, labels);
    res.status(status).json({
      error: body.error,
      details: { ...body.details, ...extraDetails },
    });
    return false as const;
  }

  async function assertIssueReadAllowed(req: Request, res: Response, issue: Parameters<typeof decideIssueAccess>[1]) {
    const key = `${issue.id}:${issue.companyId}:${issue.projectId ?? ""}:${issue.parentId ?? ""}:${issue.assigneeAgentId ?? ""}:${issue.assigneeUserId ?? ""}:${issue.status}`;
    const value = memoizeIssueReadDecision(req, key, () => decideIssueAccess(req, issue, "issue:read"));
    const decision = await value;
    if (decision.allowed) return true;
    res.status(403).json({ error: "Issue is outside this actor's authorization boundary" });
    return false;

View on GitHub (pinned to 01ad858492)

Solutions

  1. Include the required field(s) in the request path, query, or body as named by the error message, then retry.
  2. Check the API contract in packages/shared validators for the exact required shape of this endpoint.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at server/src/routes/issues.ts:4000 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/4cc894000a684d2a. Report an issue: GitHub.