paperclipai/paperclip · error

The requested file has no accessible delivery evidence. Use…

Error message

The requested file has no accessible delivery evidence. Use register_deliverable and cite deliverable:<attachmentId>, or cite an accessible work product registered by this run for this task. Empty evidence, prior-run output, and a verification result cannot substitute for the requested file. Continue publishing or report a concrete blocker; no human completion approval was created.

What it means

Final fallback in validateNativeDeliverableEvidence: a file was explicitly requested but no valid registered attachment was cited, and no registered work product for this issue/run carries an accessible http(s) URL cited in the refs. Empty evidence, prior-run output, and verification results do not substitute for the requested file, so the completion is rejected.

Solutions

  1. Call register_deliverable and cite deliverable:<attachmentId> from the receipt
  2. Or publish the file (e.g. via paperclip-page/S3) and cite the resulting https URL or work_product:<id> for a work product registered by this run for this task
  3. If delivery is impossible, report the concrete blocker in the completion report rather than claiming completion

Example fix

// before
"The file is ready (verified via tests)."
// after
register_deliverable(out.csv) -> "Deliverable: deliverable:<attachmentId>" or cite "https://.../out.csv" work product
Defensive patterns

Strategy: fallback

Validate before calling

if (fileRequested && !citedAttachmentReceipt && !(await hasAccessibleWorkProductUrl(issueId, runId))) {
  throw new Error("Publish the requested file (register_deliverable or accessible URL) before reporting completion.");
}

Type guard

const accessibleProductCited = (product, refs) => typeof product.url === "string" && /^https?:\/\//i.test(product.url) && [product.url, `work_product:${product.id}`, `work-product:${product.id}`, `artifact:${product.id}`].some(r => refs.has(r));

Try / catch

try { await feedback(payload); } catch (e) { if (e.message.includes("no accessible delivery evidence")) { /* publish file or report concrete blocker instead of completing */ } else throw e; }

Prevention

When it happens

Trigger: nativeCompletionFeedback with fileRequested=true where the loop above registered no attachment (registeredAttachment stays false) and either no issueWorkProducts exist or none has an http(s) product.url matching refs (url, work_product:<id>, work-product:<id>, or artifact:<id>).

Common situations: Agent finished the file but never published it anywhere accessible; agent cites a verification command result as proof of delivery; work product was created without a public URL or with a non-http scheme; refs cite a work product from a different run.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of paperclipai/paperclip@3f1d897a7c (2026-09-18). Data as JSON: /api/errors/285fcf2855c67e42. Report an issue: GitHub.

Appendix: source

Thrown at server/src/services/native-runtime/native-deliverable-feedback.ts:151

    if (localFile && (fileRequested || artifactRefs.has(value))) {
      throw new Error("Completion cites a workspace-only file that the user cannot download. Before finishing, use register_deliverable for requested file outputs and cite deliverable:<attachmentId> from the receipt, with /api/attachments/<attachmentId>/content as the download link. For repository changes, cite an accessible PR or registered work product instead. No human completion approval was created.");
    }
  }
  if (fileRequested && !registeredAttachment) {
    const products = refs.size ? await db.select().from(issueWorkProducts).where(and(
      eq(issueWorkProducts.companyId, binding.companyId), eq(issueWorkProducts.issueId, binding.issueId),
    )) : [];
    const accessibleProduct = products.some(product => {
      if (product.createdByRunId !== binding.runId) return false;
      if (["failed", "cancelled", "archived"].includes(product.status)) return false;
      // A workspace_file resource is only a locator: registration neither checks
      // its current bytes nor keeps them alive after workspace cleanup. Requested
      // files need a published URL or the verified attachment receipt above.
      const accessible = typeof product.url === "string" && /^https?:\/\//iu.test(product.url);
      return accessible && [product.url, `work_product:${product.id}`, `work-product:${product.id}`, `artifact:${product.id}`]
        .some(ref => typeof ref === "string" && refs.has(ref));
    });
    if (!accessibleProduct) throw new Error("The requested file has no accessible delivery evidence. Use register_deliverable and cite deliverable:<attachmentId>, or cite an accessible work product registered by this run for this task. Empty evidence, prior-run output, and a verification result cannot substitute for the requested file. Continue publishing or report a concrete blocker; no human completion approval was created.");
  }
}

View on GitHub (pinned to 3f1d897a7c)