{"record":{"id":"db381a3c5dbe6510","repo":"JuliusBrussee/caveman","slug":"local-scan-sync-failed-response-status","errorCode":null,"errorMessage":"local scan sync failed (${response.status})","messagePattern":"local scan sync failed \\((.+?)\\)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/cli/src/index.ts","lineNumber":9862,"sourceCode":"    body: JSON.stringify(state.payload),\n  });\n  const result = (await response.json().catch(() => ({}))) as {\n    id?: string;\n    project_id?: string;\n    status?: string;\n    source?: string;\n    basis?: string;\n    error?: { message?: string };\n  };\n  if (\n    !response.ok\n    || result.status !== \"completed\"\n    || result.source !== \"local_scan\"\n    || result.basis !== \"inferred\"\n    || typeof result.id !== \"string\"\n    || !result.id\n  ) {\n    throw new Error(result.error?.message ?? `local scan sync failed (${response.status})`);\n  }\n  const delivered: LocalScanState = {\n    ...state,\n    delivered: {\n      import_id: result.id,\n      project_id: typeof result.project_id === \"string\" ? result.project_id : cfg.projectId ?? \"\",\n      organization_id: cfg.organizationId ?? \"\",\n      base_url: cfg.baseURL,\n      delivered_at: new Date().toISOString(),\n    },\n  };\n  mkdirSync(dirname(localScanStatePath()), { recursive: true });\n  writeFileSync(localScanStatePath(), JSON.stringify(delivered, null, 2) + \"\\n\", { mode: 0o600 });\n  return { kind: \"synced\", importId: result.id, dashboard: deriveLocalScanDashboardUrl(cfg.baseURL) };\n}\n\nfunction localScanSyncLine(out: Extract<LocalScanSyncOutcome, { kind: \"synced\" }>): string {\n  const destination = out.dashboard ? ` → ${out.dashboard}` : \"\";","sourceCodeStart":9844,"sourceCodeEnd":9880,"githubUrl":"https://github.com/JuliusBrussee/caveman/blob/5184b3d11ac6a1acb7d44b9bfaa31698157cff97/packages/cli/src/index.ts#L9844-L9880","documentation":"The local scan sync POST returned a response that failed one of the completion invariants (non-OK status, or status/source/basis/id fields not matching a completed local_scan result); the sync pass aborts without advancing the watermark.","triggerScenarios":"Thrown at packages/cli/src/index.ts:9017 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry `caveman sync` — the watermark is unchanged so the pass is idempotent","Check the server error message when present; verify auth token validity"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"5184b3d11ac6a1acb7d44b9bfaa31698157cff97","analyzedAt":"2026-08-18T03:14:35.516Z","contentChangedAt":"2026-08-18T03:14:35.516Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}