{"record":{"id":"fef319c19a79b3f3","repo":"JuliusBrussee/caveman","slug":"cave-harness-unknown-transform","errorCode":"cave_harness_unknown_transform","errorMessage":"cave_harness_unknown_transform","messagePattern":"cave_harness_unknown_transform","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/agent/src/adapters.ts","lineNumber":680,"sourceCode":"  evidence: Pick<HarnessRequest, \"evaluatedTransformIDs\" | \"appliedTransformIDs\" | \"recoveryResolved\">,\n  plan: CavePlan,\n): void {\n  if (!Array.isArray(evidence.evaluatedTransformIDs) ||\n      !Array.isArray(evidence.appliedTransformIDs) ||\n      evidence.evaluatedTransformIDs.some((value) => typeof value !== \"string\" || value.length === 0) ||\n      evidence.appliedTransformIDs.some((value) => typeof value !== \"string\" || value.length === 0) ||\n      evidence.recoveryResolved !== true) {\n    throw new Error(\"cave_harness_incomplete_evidence\");\n  }\n  const selected = [...new Set(plan.segment_routes.map((route) => route.transform_id))].sort();\n  const evaluated = [...new Set(evidence.evaluatedTransformIDs)].sort();\n  const applied = [...new Set(evidence.appliedTransformIDs)].sort();\n  if (selected.some((transformID) => !evaluated.includes(transformID))) {\n    throw new Error(\"cave_harness_transform_not_evaluated\");\n  }\n  if (evaluated.some((transformID) => !selected.includes(transformID)) ||\n      applied.some((transformID) => !selected.includes(transformID))) {\n    throw new Error(\"cave_harness_unknown_transform\");\n  }\n}\n\nfunction validateExecution(execution: HarnessExecution, plan: CavePlan): void {\n  const [provider, ...modelParts] = plan.model.split(\"/\");\n  const model = modelParts.join(\"/\");\n  try {\n    validateProviderUsage(execution, {\n      expected: { provider: provider ?? \"\", model },\n      reportedCostUsd: execution.costUsd,\n      requirePriced: true,\n    });\n  } catch {\n    throw new Error(\"cave_harness_incomplete_evidence\");\n  }\n  if (execution.terminal !== true || typeof execution.text !== \"string\" ||\n      execution.text.length === 0 ||\n      execution.usageBasis !== \"provider_reported\" ||","sourceCodeStart":662,"sourceCodeEnd":698,"githubUrl":"https://github.com/JuliusBrussee/caveman/blob/27d5a3981a347890211bb1bf2439e5c821a63bc9/packages/agent/src/adapters.ts#L662-L698","documentation":"`validateTransformEvidence` also rejects evidence that names transforms OUTSIDE the plan: every entry in `evaluatedTransformIDs` and `appliedTransformIDs` must be one of the plan's selected transform IDs. Unknown IDs mean the execution touched transforms the plan never authorized, so the adapter throws `cave_harness_unknown_transform` — the reverse direction of error 32, guarding against plan/execution divergence in the other direction.","triggerScenarios":"An execution reporting `evaluatedTransformIDs: [\"history-text\", \"toon\"]` when the plan selected only `history-text`; stale evidence from a previous plan replayed against a new one; a harness that always evaluates its full transform set regardless of plan selection.","commonSituations":"Mixing artifacts across builds — execution evidence recorded under plan A validated against plan B; a default transform set in a custom harness that includes IDs the compiled plan doesn't route; concurrency bug interleaving two runs' evidence.","solutions":["Ensure the execution evidence and the plan come from the same compiled build (same lock).","Configure the custom harness to evaluate/apply exactly the plan's selected transform IDs — no extras.","If you recompile the plan, discard and regenerate any cached execution evidence."],"exampleFix":"// before\n// plan selects [\"history-text\"], harness evaluated:\nexecution.evaluatedTransformIDs = [\"history-text\", \"toon\"]; // -> throws\n\n// after\nexecution.evaluatedTransformIDs = [\"history-text\"]; // matches plan exactly","handlingStrategy":"validation","validationCode":"function evidenceOnlyNamesPlanTransforms(plan: CavePlan, evidence: { evaluatedTransformIDs: string[]; appliedTransformIDs: string[] }): boolean {\n  const selected = new Set(plan.segment_routes.map((r) => r.transform_id));\n  return [...evidence.evaluatedTransformIDs, ...evidence.appliedTransformIDs]\n    .every((id) => selected.has(id));\n}\nif (!evidenceOnlyNamesPlanTransforms(plan, execution)) throw new Error(\"stale evidence for this plan\");","typeGuard":null,"tryCatchPattern":"try {\n  validateTransformEvidence(execution, plan);\n} catch (err) {\n  if (err instanceof Error && err.message === \"cave_harness_unknown_transform\") {\n    // evidence came from a different plan build: discard and regenerate it\n  }\n}","preventionTips":["Bind execution evidence to the same compiled plan/lock it will be validated against.","Clear cached evidence whenever the plan is recompiled.","Configure custom harnesses to evaluate exactly the plan's selected transforms."],"tags":["adapter","evidence","transforms","plan-parity"],"backgroundTag":null,"analyzedSha":"27d5a3981a347890211bb1bf2439e5c821a63bc9","analyzedAt":"2026-08-15T09:26:11.751Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}