paperclipai/paperclip · error

assigneeAgentId must be a UUID or 'null'

Error message

assigneeAgentId must be a UUID or 'null'

What it means

422 from the issue list route: the assigneeAgentId filter was supplied but is neither a UUID-like string nor the literal 'null' (or an empty string to clear), so it cannot be interpreted.

Source

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

  //   null          - this function sent an error response, so the caller stops.
  // The reopen is scoped to the issue company and project inside the service, and
  // it runs only after the route already authorized the request on the issue.
  async function reopenClosedIssueExecutionWorkspaceOrRespond(
    req: Request,
    res: Response,
    issue: { id: string; companyId: string; projectId?: string | null },
    workspace: Pick<ExecutionWorkspace, "id">,
  ): Promise<{ outcome: "reopened" | "already-open"; generation: number } | null> {
    const actor = getActorInfo(req);
    const result = await executionWorkspacesSvc.reopenClosedIsolatedExecutionWorkspaceForIssue({
      workspaceId: workspace.id,
      issue: { id: issue.id, companyId: issue.companyId, projectId: issue.projectId ?? null },
      actor: { agentId: actor.agentId, actorType: actor.actorType },
    });
    if (result.ok) {
      return { outcome: result.reopened ? "reopened" : "already-open", generation: result.generation };
    }
    if (result.code === "not_reopenable") {
      res.status(409).json({ error: "This issue is linked to a closed workspace that cannot be reopened." });
    } else {
      res.status(503).json({ error: "Could not reopen the workspace for this issue. Please try again." });
    }
    return null;
  }

  // The keepalive re-stamps the reopen-pending flag on this interval while a
  // consuming request is in flight. The interval is one fifth of the stale grace
  // period, so several re-stamps land before the reaper could treat the flag as
  // stranded. This keeps a live but slow request's fence against the reaper.
  const REOPEN_PENDING_REFRESH_INTERVAL_MS = Math.floor(
    STALE_REOPEN_PENDING_CONSUMPTION_GRACE_MS / 5,
  );

  // Guard a reopen against a caller that never consumes it.
  // `reopenClosedIssueExecutionWorkspaceOrRespond` publishes the rebuilt worktree
  // as active and sets the reopen-pending flag while the source issue is still

View on GitHub (pinned to 01ad858492)

Solutions

  1. Fix the offending parameter to satisfy the constraint stated in the error message (type, range, or allowed values), then retry.
  2. Refer to the route's request validation in the named file and the shared validators for the accepted format.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at server/src/routes/issues.ts:5873 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/790618464f1fb141. Report an issue: GitHub.