paperclipai/paperclip · error · Error

The server no longer reports this import job — it may have r

Error message

The server no longer reports this import job — it may have restarted while the import ran.

What it means

Watch-loop termination in watchImportJob: polling companiesApi.getImportJob returned 404 for a job that was still running when the watch started. Because the server's retention sweep never removes a running job, a 404 means the in-memory job record was lost (server restart), so the watcher clears the stored job id and fails loudly rather than masking a possibly incomplete import as success.

Source

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

async function watchImportJob(
  jobId: string,
  storageKey: string,
): Promise<CompanyImportWatchOutcome> {
  for (;;) {
    let job: Awaited<ReturnType<typeof companiesApi.getImportJob>>["job"] | null = null;
    try {
      job = (await companiesApi.getImportJob(jobId)).job;
    } catch (err) {
      if (err instanceof ApiError && err.status === 404) {
        // The server has no record of this job. The retention sweep only drops
        // jobs that have already *settled* (a running job is never removed), so
        // a 404 while we are still watching means the in-memory record was lost
        // to a restart mid-import — the import never reached a confirmed
        // `succeeded` state and may not have finished. Report that honestly
        // rather than masking a possibly-incomplete import as a success; the
        // refreshed company list lets the user confirm what actually landed.
        clearStoredImportJob(storageKey);
        throw new Error(
          "The server no longer reports this import job — it may have restarted while the import ran.",
        );
      }
      if (
        err instanceof ApiError
        && err.status >= 400
        && err.status < 500
        && err.status !== 429
      ) {
        // A permanent client error (an expired board session, lost board
        // access, or a bad request) will never recover by polling again, so
        // stop instead of leaving the import locked in its running state.
        // 429 (rate limited) and 5xx stay transient and fall through below.
        clearStoredImportJob(storageKey);
        throw new Error(
          "The import status can no longer be read — your session may have expired. Reload and sign in to check on it.",
        );
      }

View on GitHub (pinned to a7e689b3c3)

Solutions

  1. Check whether the import completed by listing companies; re-run the import if it did not.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at ui/src/pages/CompanyImport.tsx:797 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/6547784c16c7bbae. Report an issue: GitHub.