{"record":{"id":"c251c803187ec804","repo":"paperclipai/paperclip","slug":"the-import-status-can-no-longer-be-read-your-ses","errorCode":null,"errorMessage":"The import status can no longer be read — your session may have expired. Reload and sign in to check on it.","messagePattern":"The import status can no longer be read — your session may have expired\\. Reload and sign in to check on it\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"ui/src/pages/CompanyImport.tsx","lineNumber":812,"sourceCode":"        // rather than masking a possibly-incomplete import as a success; the\n        // refreshed company list lets the user confirm what actually landed.\n        clearStoredImportJob(storageKey);\n        throw new Error(\n          \"The server no longer reports this import job — it may have restarted while the import ran.\",\n        );\n      }\n      if (\n        err instanceof ApiError\n        && err.status >= 400\n        && err.status < 500\n        && err.status !== 429\n      ) {\n        // A permanent client error (an expired board session, lost board\n        // access, or a bad request) will never recover by polling again, so\n        // stop instead of leaving the import locked in its running state.\n        // 429 (rate limited) and 5xx stay transient and fall through below.\n        clearStoredImportJob(storageKey);\n        throw new Error(\n          \"The import status can no longer be read — your session may have expired. Reload and sign in to check on it.\",\n        );\n      }\n      // Any other poll failure is treated as transient (network blip,\n      // dropped connection, rate limit, or a 5xx): the job keeps running\n      // server-side, so keep watching rather than reporting a failure that\n      // may not exist.\n    }\n    if (job?.status === \"succeeded\") {\n      clearStoredImportJob(storageKey);\n      if (!job.importResult) {\n        // The server confirmed success but retained only the compact summary\n        // (a cloud tenant job, or a board job whose full result aged out of\n        // memory). Still a success — navigate by the summary's company id.\n        return {\n          status: \"completed-expired\",\n          companyId: job.result?.companyId ?? null,\n        };","sourceCodeStart":794,"sourceCodeEnd":830,"githubUrl":"https://github.com/paperclipai/paperclip/blob/a7e689b3c35347b529cb9f54c9b9a8575a3dcab6/ui/src/pages/CompanyImport.tsx#L794-L830","documentation":"Auth-failure branch in watchImportJob: job polling returned a 4xx (excluding 429) — typically an expired board session, lost board access, or a malformed request. These errors will repeat on every poll, so the watcher stops and tells the user to reload and sign in instead of retrying forever.","triggerScenarios":"Thrown at ui/src/pages/CompanyImport.tsx:812 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Reload the page and sign in again, then check the import status."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"a7e689b3c35347b529cb9f54c9b9a8575a3dcab6","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}