{"version":3,"file":"mission-contract-factory.d.ts","sourceRoot":"","sources":["../../../src/core/reliability/mission-contract-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAqB,iBAAiB,EAAsB,MAAM,0BAA0B,CAAC;AACzG,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnF,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE,MAAM,WAAW,qBAAqB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,YAAY,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,kBAAkB,CAAC;CAC7B;AAED,MAAM,WAAW,2BAA2B;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,qBAAqB,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACvC,gBAAgB,CAAC,EAAE,2BAA2B,EAAE,CAAC;IACjD,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,sBAAsB,GAAG,iBAAiB,CAqErF","sourcesContent":["/**\n * Mission Contract Factory — derives a durable MissionContractV1 from a user\n * goal plus explicit/derived acceptance criteria.\n *\n * The factory distinguishes user-required criteria from system-derived\n * verification criteria without rewriting the user's requirements:\n *   - `user`    → EXPLICIT requirement\n *   - `system`  → INFERRED requirement (Jensen runtime policy)\n *   - `derived` → INFERRED requirement (derived from the goal)\n *\n * Every criterion becomes one requirement (same id) with one acceptance\n * criterion whose `requiredEvidence` is derived from its deterministic\n * verification spec.\n */\n\nimport type { MissionConstraint, MissionContractV1, MissionRequirement } from \"../long-horizon/index.js\";\nimport type { ConstraintKind, ConstraintSeverity } from \"../long-horizon/types.js\";\nimport { evidenceRequirementForKind } from \"./evidence-mapping.js\";\nimport type { CriterionSource, VerificationSpec } from \"./types.js\";\n\nexport interface MissionCriterionInput {\n\tid: string;\n\tdescription: string;\n\tsource: CriterionSource;\n\tverification: VerificationSpec;\n}\n\nexport interface MissionConstraintInput {\n\tid: string;\n\tstatement: string;\n\tkind: ConstraintKind;\n\tseverity: ConstraintSeverity;\n}\n\nexport interface MissionForbiddenActionInput {\n\tid: string;\n\tstatement: string;\n\tmatchHint?: string;\n}\n\nexport interface MissionDefinitionInput {\n\tmissionId: string;\n\tgoal: string;\n\tcriteria: MissionCriterionInput[];\n\tconstraints?: MissionConstraintInput[];\n\tforbiddenActions?: MissionForbiddenActionInput[];\n\t/** Bump to force a new contract revision (digest changes). */\n\trevision?: number;\n}\n\nexport const MISSION_WORKSTREAM_ID = \"mission\";\n\nexport function buildMissionContract(input: MissionDefinitionInput): MissionContractV1 {\n\tif (input.criteria.length === 0) {\n\t\tthrow new Error(\"A mission requires at least one acceptance criterion\");\n\t}\n\n\tconst requirements: MissionRequirement[] = input.criteria.map((criterion) => {\n\t\tconst kind = criterion.source === \"user\" ? \"EXPLICIT\" : \"INFERRED\";\n\t\treturn {\n\t\t\tid: criterion.id,\n\t\t\tworkstreamId: MISSION_WORKSTREAM_ID,\n\t\t\tkind,\n\t\t\tstatement: criterion.description,\n\t\t\trationale:\n\t\t\t\tkind === \"INFERRED\"\n\t\t\t\t\t? criterion.source === \"system\"\n\t\t\t\t\t\t? \"Jensen runtime verification requirement\"\n\t\t\t\t\t\t: \"Derived from the mission goal\"\n\t\t\t\t\t: undefined,\n\t\t\tsourceRefs: [],\n\t\t\tdependencies: [],\n\t\t\tacceptanceCriteria: [\n\t\t\t\t{\n\t\t\t\t\tid: criterion.id,\n\t\t\t\t\tstatement: criterion.description,\n\t\t\t\t\trequiredEvidence: evidenceRequirementForKind(criterion.verification.kind),\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t});\n\n\tconst constraints: MissionConstraint[] = (input.constraints ?? []).map((c) => ({\n\t\tid: c.id,\n\t\tkind: c.kind,\n\t\tstatement: c.statement,\n\t\tsourceRefs: [],\n\t\tseverity: c.severity,\n\t}));\n\n\tconst forbiddenActions = (input.forbiddenActions ?? []).map((a) => ({\n\t\tid: a.id,\n\t\tstatement: a.statement,\n\t\tsourceRefs: [],\n\t\tseverity: \"error\" as const,\n\t\tmatchHint: a.matchHint,\n\t}));\n\n\treturn {\n\t\tcontractVersion: 1,\n\t\tmissionId: input.missionId,\n\t\trevision: input.revision ?? 0,\n\t\ttitle: input.goal.slice(0, 120),\n\t\tobjective: input.goal,\n\t\tworkstreams: [{ id: MISSION_WORKSTREAM_ID, title: \"Mission\", order: 0 }],\n\t\trequirements,\n\t\tconstraints,\n\t\tforbiddenActions,\n\t\tevidencePolicy: {\n\t\t\tauthoritativeSources: [\n\t\t\t\t\"command-result\",\n\t\t\t\t\"test-result\",\n\t\t\t\t\"repository-observation\",\n\t\t\t\t\"runtime-observation\",\n\t\t\t\t\"operator-confirmation\",\n\t\t\t\t\"trusted-collector\",\n\t\t\t],\n\t\t\trules: [],\n\t\t},\n\t\tmetadata: { criteria: input.criteria.map((c) => ({ id: c.id, source: c.source })) },\n\t};\n}\n"]}