{"record":{"id":"73d91bbfdc7647a8","repo":"JuliusBrussee/caveman","slug":"cave-invalid-lock-integrity-join","errorCode":null,"errorMessage":"cave_invalid_lock:${integrity.join(\",\")}","messagePattern":"cave_invalid_lock:(.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/agent/src/build.ts","lineNumber":526,"sourceCode":"  }\n  const lock = value as unknown as CaveBuildLock;\n  if (lock.schema_version !== 2 || lock.context_ir_schema !== \"1\" ||\n      !isRecord(lock.harness) || !exactKeys(lock.harness, [\"id\", \"adapter_version\", \"upstream_version\"]) ||\n      ![\"pi\", \"claude\", \"vercel-ai-sdk\", \"eve\", \"mastra\"].includes(lock.harness.id) ||\n      !isRecord(lock.runtime) || !exactKeys(lock.runtime, [\"caveman_version\", \"transform_registry_sha256\", \"external_provenance_sha256\"]) ||\n      !isRecord(lock.evidence) || !exactKeys(lock.evidence, [\n        \"status\", \"basis\", \"quality_retention_lcb95\", \"error_rate\", \"p95_latency_ms\",\n        \"catalog_cost_usd_per_task\", \"completed_runs\",\n      ]) ||\n      lock.evidence.status !== \"locked\" || lock.evidence.basis !== \"inferred\" ||\n      !isRecord(lock.selected_plan) || !exactKeys(lock.selected_plan, [\n        \"schema_version\", \"plan_id\", \"model\", \"reasoning\", \"segment_routes\",\n        \"budgets\", \"recovery\", \"fallbacks\",\n      ]) || !validPlanShape(lock.selected_plan)) {\n    throw new Error(\"cave_invalid_lock:shape\");\n  }\n  const integrity = lockIntegrityErrors(lock);\n  if (integrity.length > 0) throw new Error(`cave_invalid_lock:${integrity.join(\",\")}`);\n  return lock;\n}\n\nfunction validPlanShape(plan: Record<string, unknown>): boolean {\n  if (plan.schema_version !== 1 || typeof plan.plan_id !== \"string\" || typeof plan.model !== \"string\" ||\n      ![\"none\", \"minimal\", \"low\", \"medium\", \"high\"].includes(String(plan.reasoning)) ||\n      !isRecord(plan.budgets) || !exactKeys(plan.budgets, [\n        \"instructions\", \"tools\", \"memory\", \"history\", \"results_artifacts\",\n        \"reasoning\", \"output\", \"retry_cascade_reserve\",\n      ]) ||\n      Object.values(plan.budgets).some((value) => !Number.isSafeInteger(value) || Number(value) < 0) ||\n      !isRecord(plan.recovery) || !exactKeys(plan.recovery, [\"namespace\", \"tools\"]) ||\n      !isRecord(plan.fallbacks) || !exactKeys(plan.fallbacks, [\"unknown\", \"transform_error\", \"not_smaller\"]) ||\n      !Array.isArray(plan.segment_routes)) {\n    return false;\n  }\n  return plan.segment_routes.every((route) =>\n    isRecord(route) &&","sourceCodeStart":508,"sourceCodeEnd":544,"githubUrl":"https://github.com/JuliusBrussee/caveman/blob/27d5a3981a347890211bb1bf2439e5c821a63bc9/packages/agent/src/build.ts#L508-L544","documentation":"Error \"cave_invalid_lock:${integrity.join(\",\")}\" thrown in JuliusBrussee/caveman.","triggerScenarios":"Thrown at packages/agent/src/build.ts:526 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Lock integrity entries are invalid; re-run npm run build to relock with correct integrity digests."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"27d5a3981a347890211bb1bf2439e5c821a63bc9","analyzedAt":"2026-08-15T09:26:11.751Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}