paperclipai/paperclip · error
A different import is already running for this account. Wait
Error message
A different import is already running for this account. Wait for it to finish before starting another.
What it means
Import concurrency guard (conflict case): a running import exists for this board actor but with a different request signature (another tab or another target), so there is no job to adopt; the 409 without a job tells the client to wait rather than switch to the wrong result.
Source
Thrown at server/src/routes/companies.ts:640
const importBody = companyPortabilityImportSchema.parse(rawImportBody);
assertImportTargetAccess(req, importBody.target);
const activity = importedCompanyActivityContext(actor, importBody.include ?? null);
const result = await portability.importBundle(importBody, boardUserId, {
pauseAutomations: importBody.pauseAutomations === true,
});
// The import is committed. Settlement (hooks) runs before the
// best-effort audit entry so a logging failure cannot make a
// committed import read as failed — or, on the transfer path, release
// the apply claim and invite a duplicate re-import.
await hooks?.onSuccess?.(result);
try {
await logImportedCompanyActivity(db, activity, result);
} catch (activityError) {
logger.warn(
{ err: activityError, companyId: result.company.id },
"failed to write the company.imported activity entry for a committed import",
);
}
return result;
} catch (error) {
await hooks?.onFailure?.(errorMessage(error));
throw error;
}
};
if (wantsAsyncImport(req)) {
// Async job path. Two kinds of callers opt in:
// - trusted Cloud tenants (original behavior, kept byte-identical),
// keyed by their tenant identity headers;
// - any other board session, keyed by its user id, so long imports
// survive proxies cutting the connection while the server finishes.
// Jobs are held in memory only and are lost on restart — existing
// semantics; the status route above 404s unknown ids, so a client
// that can no longer see its job treats it as gone and resubmits.
cleanupTerminalImportJobs(importJobs, importJobTerminalRetentionMs);
const isCloudTenant = req.actor.source === "cloud_tenant";
const actorKey = importJobActorKey(req);View on GitHub (pinned to 01ad858492)
Solutions
- Wait for the conflicting state to clear (running job, hold, pause, or stale fingerprint), refresh the current state, then retry the operation.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at server/src/routes/companies.ts:607 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/a65205c05af1e138.
Report an issue: GitHub.