{"version":3,"file":"failure-events.d.ts","sourceRoot":"","sources":["../../../src/core/reliability/failure-events.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,+BAA+B,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEjG,oFAAoF;AACpF,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,+BAA+B,GAAG,eAAe,CAapG;AAED,wBAAgB,kBAAkB,CACjC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5E,YAAY,CAQd;AAED,mEAAmE;AACnE,wBAAgB,2BAA2B,CAAC,mBAAmB,EAAE,MAAM,EAAE,GAAG,MAAM,CAOjF","sourcesContent":["/**\n * Normalized failure taxonomy.\n *\n * Failures become structured runtime events instead of arbitrary strings so the\n * future Recovery Engine (2.2.1) can attach cleanly. No autonomous recovery\n * policy is implemented here — only classification and observability.\n */\n\nimport type { ActionValidationFailureCategory, FailureCategory, FailureEvent } from \"./types.js\";\n\n/** Map a validation failure category to the normalized runtime failure category. */\nexport function classifyValidationFailure(category: ActionValidationFailureCategory): FailureCategory {\n\tswitch (category) {\n\t\tcase \"BOUNDARY_VIOLATION\":\n\t\t\treturn \"BOUNDARY_VIOLATION\";\n\t\tcase \"PERMISSION_VIOLATION\":\n\t\tcase \"FORBIDDEN_ACTION\":\n\t\tcase \"MISSION_CONSTRAINT_VIOLATION\":\n\t\t\treturn \"PERMISSION_FAILURE\";\n\t\tcase \"UNKNOWN_ACTION_TYPE\":\n\t\t\treturn \"ACTION_DECODE_FAILURE\";\n\t\tdefault:\n\t\t\treturn \"ACTION_VALIDATION_FAILURE\";\n\t}\n}\n\nexport function createFailureEvent(\n\tcategory: FailureCategory,\n\tmessage: string,\n\toptions: { recoverable?: boolean; details?: unknown; timestamp?: string } = {},\n): FailureEvent {\n\treturn {\n\t\tcategory,\n\t\tmessage,\n\t\trecoverable: options.recoverable ?? true,\n\t\ttimestamp: options.timestamp ?? new Date().toISOString(),\n\t\tdetails: options.details,\n\t};\n}\n\n/** Human-readable, stable message for a finalization rejection. */\nexport function finalizationRejectedMessage(missingCriterionIds: string[]): string {\n\tif (missingCriterionIds.length === 0) {\n\t\treturn \"FINALIZATION_REJECTED: no active blockers\";\n\t}\n\treturn `FINALIZATION_REJECTED\\n\\nUnverified acceptance criteria:\\n${missingCriterionIds\n\t\t.map((id) => `- ${id}`)\n\t\t.join(\"\\n\")}`;\n}\n"]}