paperclipai/paperclip · error · Error

This exact package was already imported by a completed trans

Error message

This exact package was already imported by a completed transfer. Re-export the package to import it again.

What it means

Idempotency guard in the import transfer flow: the server reports that a completed transfer with this exact content hash already exists, so the client refuses to re-upload/re-import the identical package. Re-exporting the package produces a new hash and is required to import again.

Source

Thrown at ui/src/pages/CompanyImport.tsx:943

    // The whole file is read once here for hashing; parts are later uploaded
    // as Blob slices of the File, so this buffer is not retained past hashing.
    const manifest = await buildImportTransferManifest(await file.arrayBuffer());
    transferManifestRef.current = { file, manifest };
    return manifest;
  }

  /**
   * Declare (or resume) the transfer for this file and upload every part the
   * server reports missing, sequentially with per-part retries. Resolves with
   * the transfer id once the server holds every part.
   */
  async function uploadImportTransfer(file: File): Promise<string> {
    const manifest = await ensureTransferManifest(file);
    const created = await companiesApi.importTransferCreate(manifest);
    if (created.alreadyCompleted) {
      // The server keys transfers by content, and this exact zip already
      // finished an apply — its parts are gone, so it cannot be re-run.
      throw new Error(
        "This exact package was already imported by a completed transfer. Re-export the package to import it again.",
      );
    }
    const missing = new Set(created.missingParts);
    let uploadedParts = manifest.parts.length - missing.size;
    let uploadedBytes = manifest.parts.reduce(
      (sum, part) => (missing.has(part.index) ? sum : sum + part.byteSize),
      0,
    );
    try {
      setTransferProgress({
        uploadedParts,
        totalParts: manifest.parts.length,
        uploadedBytes,
        totalBytes: manifest.totalBytes,
      });
      for (const part of manifest.parts) {
        if (!missing.has(part.index)) continue;

View on GitHub (pinned to a7e689b3c3)

Solutions

  1. Re-export the company package from the source to get a new package identity, then import it.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at ui/src/pages/CompanyImport.tsx:943 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/8f3060a017edcd5c. Report an issue: GitHub.