{"record":{"id":"92d72c5f31ea4a56","repo":"musistudio/claude-code-router","slug":"export-failed-to-include-file-formaterror-92d72c","errorCode":null,"errorMessage":"[export] Failed to include ${file}: ${formatError(error)}","messagePattern":"\\[export\\] Failed to include (.+?): (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"packages/electron/src/main/ipc.ts","lineNumber":980,"sourceCode":"function readDataExportFiles(): Array<{ base64: string; name: string; path: string; sizeBytes: number }> {\n  const files: Array<{ base64: string; name: string; path: string; sizeBytes: number }> = [];\n  for (const file of dataExportCandidateFiles()) {\n    try {\n      if (!existsSync(file)) {\n        continue;\n      }\n      const stat = statSync(file);\n      if (!stat.isFile()) {\n        continue;\n      }\n      files.push({\n        base64: readFileSync(file).toString(\"base64\"),\n        name: path.basename(file),\n        path: file,\n        sizeBytes: stat.size\n      });\n    } catch (error) {\n      console.warn(`[export] Failed to include ${file}: ${formatError(error)}`);\n    }\n  }\n  return files;\n}\n\nfunction dataExportCandidateFiles(): string[] {\n  return uniqueStrings([\n    ...sqliteDataFiles(APP_CONFIG_DB_FILE),\n    ...LEGACY_APP_CONFIG_DB_FILES.flatMap(sqliteDataFiles),\n    ...LEGACY_API_KEYS_DB_FILES.flatMap(sqliteDataFiles),\n    ...sqliteDataFiles(REQUEST_LOGS_DB_FILE),\n    ...sqliteDataFiles(USAGE_DB_FILE)\n  ]);\n}\n\nfunction sqliteDataFiles(file: string): string[] {\n  return [file, `${file}-wal`, `${file}-shm`];\n}","sourceCodeStart":962,"sourceCodeEnd":998,"githubUrl":"https://github.com/musistudio/claude-code-router/blob/99f24806c6a2c660b16e53e95211c517448a6c90/packages/electron/src/main/ipc.ts#L962-L998","documentation":"While collecting data-export attachments, reading or stat'ing one candidate file failed and it is skipped with a warning; the export continues without it.","triggerScenarios":"dataExportCandidateFiles lists files (logs, databases) and one disappears between listing and readFileSync, has no read permission, or is a directory.","commonSituations":"Log rotation deleting files mid-export, permission-restricted files on macOS/Linux, or a symlink pointing to a missing target.","solutions":["Check the file still exists and is readable right before adding it to candidates","Run export with sufficient permissions","Exclude rotating/volatile directories from candidates","Retry the export; transient deletion self-resolves"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"const st = statSync(file); if (!st.isFile() || (st.mode & 0o400) === 0) continue; // then read","typeGuard":"const isReadableFile = (st: Stats): boolean => st.isFile();","tryCatchPattern":"catch (error) { console.warn(`[export] Failed to include ${file}`); }","preventionTips":["Snapshot candidate file list and re-stat before read","Skip volatile/rotating dirs"],"tags":["export","fs","permissions"],"backgroundTag":"file-read-failed","analyzedSha":"99f24806c6a2c660b16e53e95211c517448a6c90","analyzedAt":"2026-08-27T04:11:01.184Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}