paperclipai/paperclip · error

Attachment is empty

Error message

Attachment is empty

What it means

422 from issue attachment upload. Fires when the uploaded file's buffer is zero-length (empty body/file); empty attachments are rejected rather than stored as placeholder objects.

Source

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

        issue,
        surface: "issue.comment.create",
        requestedValue: readNonEmptyString(req.body.onBehalfOfUserId),
      });
      await denyIssueWrite(req, res, issue, "issue_write_attribution_spoof_rejected");
      return;
    }
    const commentAccessDecision = await assertAgentIssueCommentAllowed(req, res, issue);
    if (!commentAccessDecision) return;
    const commentAuthorizationReason = issueWriteAuthorizationReason(req, commentAccessDecision);
    if (!assertStructuredCommentFieldsAllowed(req, res, {
      presentation: req.body.presentation,
      metadata: req.body.metadata,
    })) return;
    const closedExecutionWorkspace = await getClosedIssueExecutionWorkspace(issue);

    const actor = getActorInfo(req);
    const commentPresentation = req.body.presentation ??
      await deriveRecoveryCommentPresentation(req, issue.companyId, req.body.body);
    const reopenRequested = req.body.reopen === true;
    const resumeRequested = req.body.resume === true;
    const interruptRequested = req.body.interrupt === true;
    const isClosed = isClosedIssueStatus(issue.status);
    const isBlocked = issue.status === "blocked";
    const crossIssueCommentOnlyGrant =
      isClosed &&
      (isDirectParentReportDecision(commentAccessDecision) ||
        (req.actor.type === "agent" &&
          issue.assigneeAgentId !== null &&
          issue.assigneeAgentId !== req.actor.agentId &&
          !reopenRequested &&
          !resumeRequested &&
          (isIssueMentionGrantDecision(commentAccessDecision) ||
            isDefaultOpenIssueWriteDecision(commentAccessDecision))));
    const effectiveReopenRequested = crossIssueCommentOnlyGrant ? false : reopenRequested;
    const effectiveResumeRequested = crossIssueCommentOnlyGrant ? false : resumeRequested;
    if (

View on GitHub (pinned to 01ad858492)

Solutions

  1. Provide a non-empty value/file for the named field and retry the upload or request.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at server/src/routes/issues.ts:12666 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/8ce37750ab7b7bec. Report an issue: GitHub.