omk-adaptorch-wpl 0.98.3 → 0.98.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [Unreleased]
4
+
5
+ ## [0.98.4] - 2026-09-10
6
+
7
+ ### Added
8
+
9
+ - Added side-effect-free service-link helpers for explicit onboarding surfaces.
10
+
11
+ ### Fixed
12
+
13
+ - Submission now requires apply eligibility, a non-preview run, run IDs and confirmed adjudication. Deep-wall evidence requires nonempty digest/command and exit code zero; deep checks cannot clear a pre-existing human-review requirement.
14
+
3
15
  ## [0.98.3] - 2026-09-06
4
16
 
5
17
  ### Added
package/README.md CHANGED
@@ -46,6 +46,24 @@ The default coding-agent source has no production importer that turns this packa
46
46
  - Loop-level budgets (`max_dispatch_attempts`, `max_loop_duration`, dispatch-call budget) are
47
47
  immutable for a loop instance's lifetime; raising them requires a new instance under the same review.
48
48
 
49
+ ## Optional service links
50
+
51
+ For a user-requested product/help screen, use the public offline helper:
52
+
53
+ ```typescript
54
+ import { getAdaptOrchLinks } from "omk-adaptorch-wpl";
55
+
56
+ const links = getAdaptOrchLinks();
57
+ console.log(links.plans, links.signup, links.contact, links.claimBoundary);
58
+ ```
59
+
60
+ These fixed `https://adaptorch.com` URLs distinguish WPL and CLI arrivals using
61
+ bounded UTM tags. No project, session, prompt, run ID, or credential enters a link.
62
+ The helper performs no I/O and does not alter verdicts, receipts, or execution gates.
63
+ In OMK, `omk doctor adaptorch --links` prints the same destinations with CLI
64
+ attribution, without an API key or network call. The user chooses whether to visit.
65
+ See [onboarding and CRM boundaries](https://github.com/dmae97/omk/blob/main/packages/coding-agent/docs/adaptorch-onboarding.md).
66
+
49
67
  ## AdaptOrch, the service
50
68
 
51
69
  This package is open source and MIT-licensed, like the rest of OMK. AdaptOrch
@@ -1 +1 @@
1
- {"version":3,"file":"b2c-mapper.d.ts","sourceRoot":"","sources":["../src/b2c-mapper.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAIN,KAAK,WAAW,EAGhB,KAAK,mBAAmB,EACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAkFhE,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC9B,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,mBAAmB,CAAC;CAC7B;AAED,eAAO,MAAM,uBAAuB,2BAAqC,CAAC;AA8B1E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CA0F7D","sourcesContent":["/**\n * Maps OA adjudication + policy flags to B2C {@link VerdictCard} and apply/submit gates.\n */\n\nimport type { AdjudicationResult } from \"./adjudicator.ts\";\nimport type { AdjudicationReasonCode, VerdictState } from \"./adjudicator-registry.ts\";\nimport {\n\tB2C_VERDICT_SCHEMA_VERSION,\n\ttype UserRiskLevel,\n\ttype UserVerdict,\n\ttype VerdictCard,\n\ttype VerdictLimits,\n\ttype VerdictNextAction,\n\ttype VerificationReceipt,\n} from \"./b2c-verdict.ts\";\nimport { POLICY_FLAG, type PolicyFlag } from \"./policy-wall.ts\";\n\nconst USER_VERDICT_SEVERITY: UserVerdict[] = [\"BLOCKED\", \"INCONCLUSIVE\", \"ADVISORY\", \"PASS\"];\n\nfunction worstUserVerdict(current: UserVerdict, next: UserVerdict): UserVerdict {\n\tconst cur = USER_VERDICT_SEVERITY.indexOf(current);\n\tconst nxt = USER_VERDICT_SEVERITY.indexOf(next);\n\treturn cur <= nxt ? current : next;\n}\n\nfunction verdictFromOa(verdict: VerdictState): UserVerdict {\n\tswitch (verdict) {\n\t\tcase \"CONFIRMED\":\n\t\t\treturn \"PASS\";\n\t\tcase \"CORROBORATED-FAILURE\":\n\t\t\treturn \"ADVISORY\";\n\t\tcase \"CONTRADICTED\":\n\t\t\treturn \"BLOCKED\";\n\t\tcase \"INDETERMINATE\":\n\t\t\treturn \"INCONCLUSIVE\";\n\t\tcase \"VERIFIER-ERROR\":\n\t\t\treturn \"INCONCLUSIVE\";\n\t}\n}\n\nfunction riskFromUserVerdict(verdict: UserVerdict, flags: PolicyFlag[]): UserRiskLevel {\n\tif (verdict === \"BLOCKED\" || flags.includes(POLICY_FLAG.NON_NEGOTIABLE_BLOCKING)) {\n\t\treturn \"critical\";\n\t}\n\tif (verdict === \"INCONCLUSIVE\") return \"high\";\n\tif (verdict === \"ADVISORY\") return \"medium\";\n\treturn \"low\";\n}\n\nconst REASON_CODE_USER: Record<AdjudicationReasonCode, { passed?: string; blocked?: string }> = {\n\tSCOPE_VIOLATION: { blocked: \"Write scope violation detected by outcome adjudication.\" },\n\tSCHEMA_DRIFT: { blocked: \"Output schema does not match the expected contract.\" },\n\tCONTENT_CHECK_FAILED: { blocked: \"Content verification failed for one or more artifacts.\" },\n\tNO_EVIDENCE_ON_SUCCESS: { blocked: \"Run reported success but left no usable evidence.\" },\n\tEMPTY_ARTIFACT_CONTENT: { blocked: \"An artifact was present but contained no substantive content.\" },\n\tTRACE_CHECK_FAILED: { blocked: \"Trace verification failed for this run.\" },\n\tTRACE_ERROR_SPAN: { blocked: \"Error-level spans were found under a reported success.\" },\n\tMIN_ACTIONS_UNMET: { blocked: \"Fewer actions were recorded than required for this kind.\" },\n\tRUN_STATUS_UNPARSEABLE: { blocked: \"Run status could not be interpreted.\" },\n\tRUN_FETCH_FAILED: { blocked: \"Evidence could not be fetched for this run.\" },\n\tMALFORMED_REQUEST: { blocked: \"Adjudication request was malformed.\" },\n\tRUN_NOT_TERMINAL: { blocked: \"Run has not reached a terminal status yet.\" },\n\tEVIDENCE_EMPTY: { blocked: \"Evidence was too thin to reach a confident verdict.\" },\n\tFAILURE_REPORTED: { blocked: \"The run reported failure and evidence agrees.\" },\n\tALL_CHECKS_PASSED: { passed: \"All outcome adjudication checks passed.\" },\n};\n\nfunction userStringsForReasonCode(code: AdjudicationReasonCode): { passed: string[]; blocked: string[] } {\n\tconst entry = REASON_CODE_USER[code];\n\tconst passed: string[] = [];\n\tconst blocked: string[] = [];\n\tif (entry.passed) passed.push(entry.passed);\n\tif (entry.blocked) blocked.push(entry.blocked);\n\treturn { passed, blocked };\n}\n\nfunction userVerdictFromPolicyFlags(flags: PolicyFlag[], previewOnly: boolean): UserVerdict | null {\n\tlet v: UserVerdict = \"PASS\";\n\tif (\n\t\tflags.includes(POLICY_FLAG.NON_NEGOTIABLE_BLOCKING) ||\n\t\tflags.includes(POLICY_FLAG.CANDIDATE_LEAK_SUSPECT) ||\n\t\tflags.includes(POLICY_FLAG.SECRET_SUSPECT)\n\t) {\n\t\tv = worstUserVerdict(v, \"BLOCKED\");\n\t}\n\tif (flags.includes(POLICY_FLAG.EVIDENCE_DAG_INCOMPLETE)) {\n\t\tv = worstUserVerdict(v, \"INCONCLUSIVE\");\n\t}\n\tif (\n\t\tpreviewOnly &&\n\t\t(flags.includes(POLICY_FLAG.REPRO_OVERFIT_SUSPECT) || flags.includes(POLICY_FLAG.LOW_DISCRIMINATION))\n\t) {\n\t\tv = worstUserVerdict(v, \"ADVISORY\");\n\t}\n\treturn v === \"PASS\" && flags.length === 0 ? null : v;\n}\n\nexport interface MapToB2CInput {\n\tkind: string;\n\tpacketId?: string;\n\tdispatchRecordId?: string;\n\trunIds: string[];\n\tpreviewOnly: boolean;\n\tpolicyFlags: PolicyFlag[];\n\tdiffPaths: string[];\n\tadjudication?: AdjudicationResult;\n\tevaluatedAt?: string;\n\trepairHints?: string[];\n}\n\nexport interface MapToB2COutput {\n\tverdictCard: VerdictCard;\n\treceipt: VerificationReceipt;\n}\n\nexport const BATCH1_NO_DOCKER_RUNNER = \"BATCH1_NO_DOCKER_RUNNER\" as const;\n\nfunction buildNextActions(verdict: UserVerdict, previewOnly: boolean, canApply: boolean): VerdictNextAction[] {\n\tif (verdict === \"BLOCKED\") {\n\t\treturn [\"Regenerate\"];\n\t}\n\tif (verdict === \"INCONCLUSIVE\") {\n\t\treturn previewOnly ? [\"Deep Check\", \"Regenerate\"] : [\"Deep Check\"];\n\t}\n\tif (verdict === \"ADVISORY\") {\n\t\treturn previewOnly ? [\"Deep Check\", \"Apply\"] : [\"Apply\"];\n\t}\n\tif (canApply) {\n\t\treturn [\"Apply\"];\n\t}\n\treturn [\"Deep Check\"];\n}\n\nfunction buildLimitsCode(previewOnly: boolean): string | undefined {\n\treturn previewOnly ? BATCH1_NO_DOCKER_RUNNER : undefined;\n}\n\nfunction buildDisclaimer(previewOnly: boolean, limitsCode: string | undefined): string | undefined {\n\tif (!previewOnly) {\n\t\treturn undefined;\n\t}\n\tconst code = limitsCode ?? BATCH1_NO_DOCKER_RUNNER;\n\treturn `Preview-only evaluation (${code}): no docker runner; apply and submit gates are conservative.`;\n}\n\nexport function mapToB2C(input: MapToB2CInput): MapToB2COutput {\n\tconst evaluatedAt = input.evaluatedAt ?? new Date().toISOString();\n\tlet userVerdict: UserVerdict = \"INCONCLUSIVE\";\n\tconst passed_checks: string[] = [];\n\tconst blocked_reasons: string[] = [];\n\n\tif (input.diffPaths.length === 0 && input.adjudication === undefined) {\n\t\tuserVerdict = \"INCONCLUSIVE\";\n\t\tblocked_reasons.push(\"No changed paths were found in the diff; cannot assess write scope.\");\n\t} else {\n\t\tuserVerdict = \"PASS\";\n\t}\n\n\tconst policyVerdict = userVerdictFromPolicyFlags(input.policyFlags, input.previewOnly);\n\tif (policyVerdict !== null) {\n\t\tuserVerdict = worstUserVerdict(userVerdict, policyVerdict);\n\t}\n\n\tif (input.policyFlags.includes(POLICY_FLAG.SECRET_SUSPECT)) {\n\t\tblocked_reasons.push(\"Diff lines may contain secrets or credentials; remove before proceeding.\");\n\t}\n\tif (input.policyFlags.includes(POLICY_FLAG.CANDIDATE_LEAK_SUSPECT)) {\n\t\tblocked_reasons.push(\"One or more changed paths fall outside the approved write scope.\");\n\t}\n\tif (input.policyFlags.includes(POLICY_FLAG.EVIDENCE_DAG_INCOMPLETE)) {\n\t\tblocked_reasons.push(\"Run evidence is required but was not evaluated in this receipt.\");\n\t}\n\tif (input.previewOnly && input.policyFlags.includes(POLICY_FLAG.LOW_DISCRIMINATION)) {\n\t\tblocked_reasons.push(\"Preview-only mode: discrimination against production evidence is limited.\");\n\t}\n\n\tif (input.adjudication !== undefined) {\n\t\tconst fromOa = verdictFromOa(input.adjudication.verdict);\n\t\tuserVerdict = worstUserVerdict(userVerdict, fromOa);\n\t\tconst strings = userStringsForReasonCode(input.adjudication.reason_code);\n\t\tpassed_checks.push(...strings.passed);\n\t\tblocked_reasons.push(...strings.blocked);\n\t} else if (userVerdict === \"PASS\" && input.diffPaths.length > 0) {\n\t\tpassed_checks.push(\"Changed paths are within approved write scope (fast wall).\");\n\t}\n\n\tconst limitsCode = buildLimitsCode(input.previewOnly);\n\tconst limits: VerdictLimits = {\n\t\trequiresHumanReview: userVerdict === \"BLOCKED\" || userVerdict === \"INCONCLUSIVE\",\n\t\tpreviewOnly: input.previewOnly,\n\t\tcode: limitsCode,\n\t};\n\n\tconst canApply =\n\t\tuserVerdict === \"PASS\" &&\n\t\t!input.policyFlags.includes(POLICY_FLAG.NON_NEGOTIABLE_BLOCKING) &&\n\t\t!input.policyFlags.includes(POLICY_FLAG.CANDIDATE_LEAK_SUSPECT) &&\n\t\t!input.policyFlags.includes(POLICY_FLAG.SECRET_SUSPECT) &&\n\t\t(input.adjudication === undefined || input.adjudication.verdict === \"CONFIRMED\");\n\n\tconst shouldSubmit = userVerdict !== \"BLOCKED\" && !input.policyFlags.includes(POLICY_FLAG.NON_NEGOTIABLE_BLOCKING);\n\n\tconst disclaimer = buildDisclaimer(input.previewOnly, limitsCode);\n\n\tconst verdictCard: VerdictCard = {\n\t\tschemaVersion: B2C_VERDICT_SCHEMA_VERSION,\n\t\tverdict: userVerdict,\n\t\trisk: riskFromUserVerdict(userVerdict, input.policyFlags),\n\t\tlimits,\n\t\tpassed_checks,\n\t\tblocked_reasons: [...new Set(blocked_reasons)],\n\t\tnext_actions: buildNextActions(userVerdict, input.previewOnly, canApply),\n\t\trepairHints: input.repairHints !== undefined && input.repairHints.length > 0 ? input.repairHints : undefined,\n\t\tpacketId: input.packetId,\n\t\tkind: input.kind,\n\t};\n\n\tconst receipt: VerificationReceipt = {\n\t\tschemaVersion: B2C_VERDICT_SCHEMA_VERSION,\n\t\tevaluatedAt,\n\t\tkind: input.kind,\n\t\tpacketId: input.packetId,\n\t\tdispatchRecordId: input.dispatchRecordId,\n\t\trunIds: input.runIds,\n\t\tpreviewOnly: input.previewOnly,\n\t\tcanApply,\n\t\tshouldSubmit,\n\t\tpolicyFlags: [...input.policyFlags],\n\t\tadjudicationVerdict: input.adjudication?.verdict,\n\t\tadjudicationReasonCode: input.adjudication?.reason_code,\n\t\tdiffPaths: input.diffPaths,\n\t\tdisclaimer,\n\t};\n\n\treturn { verdictCard, receipt };\n}\n"]}
1
+ {"version":3,"file":"b2c-mapper.d.ts","sourceRoot":"","sources":["../src/b2c-mapper.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAIN,KAAK,WAAW,EAGhB,KAAK,mBAAmB,EACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAkFhE,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC9B,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,mBAAmB,CAAC;CAC7B;AAED,eAAO,MAAM,uBAAuB,2BAAqC,CAAC;AA8B1E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CA2F7D","sourcesContent":["/**\n * Maps OA adjudication + policy flags to B2C {@link VerdictCard} and apply/submit gates.\n */\n\nimport type { AdjudicationResult } from \"./adjudicator.ts\";\nimport type { AdjudicationReasonCode, VerdictState } from \"./adjudicator-registry.ts\";\nimport {\n\tB2C_VERDICT_SCHEMA_VERSION,\n\ttype UserRiskLevel,\n\ttype UserVerdict,\n\ttype VerdictCard,\n\ttype VerdictLimits,\n\ttype VerdictNextAction,\n\ttype VerificationReceipt,\n} from \"./b2c-verdict.ts\";\nimport { POLICY_FLAG, type PolicyFlag } from \"./policy-wall.ts\";\n\nconst USER_VERDICT_SEVERITY: UserVerdict[] = [\"BLOCKED\", \"INCONCLUSIVE\", \"ADVISORY\", \"PASS\"];\n\nfunction worstUserVerdict(current: UserVerdict, next: UserVerdict): UserVerdict {\n\tconst cur = USER_VERDICT_SEVERITY.indexOf(current);\n\tconst nxt = USER_VERDICT_SEVERITY.indexOf(next);\n\treturn cur <= nxt ? current : next;\n}\n\nfunction verdictFromOa(verdict: VerdictState): UserVerdict {\n\tswitch (verdict) {\n\t\tcase \"CONFIRMED\":\n\t\t\treturn \"PASS\";\n\t\tcase \"CORROBORATED-FAILURE\":\n\t\t\treturn \"ADVISORY\";\n\t\tcase \"CONTRADICTED\":\n\t\t\treturn \"BLOCKED\";\n\t\tcase \"INDETERMINATE\":\n\t\t\treturn \"INCONCLUSIVE\";\n\t\tcase \"VERIFIER-ERROR\":\n\t\t\treturn \"INCONCLUSIVE\";\n\t}\n}\n\nfunction riskFromUserVerdict(verdict: UserVerdict, flags: PolicyFlag[]): UserRiskLevel {\n\tif (verdict === \"BLOCKED\" || flags.includes(POLICY_FLAG.NON_NEGOTIABLE_BLOCKING)) {\n\t\treturn \"critical\";\n\t}\n\tif (verdict === \"INCONCLUSIVE\") return \"high\";\n\tif (verdict === \"ADVISORY\") return \"medium\";\n\treturn \"low\";\n}\n\nconst REASON_CODE_USER: Record<AdjudicationReasonCode, { passed?: string; blocked?: string }> = {\n\tSCOPE_VIOLATION: { blocked: \"Write scope violation detected by outcome adjudication.\" },\n\tSCHEMA_DRIFT: { blocked: \"Output schema does not match the expected contract.\" },\n\tCONTENT_CHECK_FAILED: { blocked: \"Content verification failed for one or more artifacts.\" },\n\tNO_EVIDENCE_ON_SUCCESS: { blocked: \"Run reported success but left no usable evidence.\" },\n\tEMPTY_ARTIFACT_CONTENT: { blocked: \"An artifact was present but contained no substantive content.\" },\n\tTRACE_CHECK_FAILED: { blocked: \"Trace verification failed for this run.\" },\n\tTRACE_ERROR_SPAN: { blocked: \"Error-level spans were found under a reported success.\" },\n\tMIN_ACTIONS_UNMET: { blocked: \"Fewer actions were recorded than required for this kind.\" },\n\tRUN_STATUS_UNPARSEABLE: { blocked: \"Run status could not be interpreted.\" },\n\tRUN_FETCH_FAILED: { blocked: \"Evidence could not be fetched for this run.\" },\n\tMALFORMED_REQUEST: { blocked: \"Adjudication request was malformed.\" },\n\tRUN_NOT_TERMINAL: { blocked: \"Run has not reached a terminal status yet.\" },\n\tEVIDENCE_EMPTY: { blocked: \"Evidence was too thin to reach a confident verdict.\" },\n\tFAILURE_REPORTED: { blocked: \"The run reported failure and evidence agrees.\" },\n\tALL_CHECKS_PASSED: { passed: \"All outcome adjudication checks passed.\" },\n};\n\nfunction userStringsForReasonCode(code: AdjudicationReasonCode): { passed: string[]; blocked: string[] } {\n\tconst entry = REASON_CODE_USER[code];\n\tconst passed: string[] = [];\n\tconst blocked: string[] = [];\n\tif (entry.passed) passed.push(entry.passed);\n\tif (entry.blocked) blocked.push(entry.blocked);\n\treturn { passed, blocked };\n}\n\nfunction userVerdictFromPolicyFlags(flags: PolicyFlag[], previewOnly: boolean): UserVerdict | null {\n\tlet v: UserVerdict = \"PASS\";\n\tif (\n\t\tflags.includes(POLICY_FLAG.NON_NEGOTIABLE_BLOCKING) ||\n\t\tflags.includes(POLICY_FLAG.CANDIDATE_LEAK_SUSPECT) ||\n\t\tflags.includes(POLICY_FLAG.SECRET_SUSPECT)\n\t) {\n\t\tv = worstUserVerdict(v, \"BLOCKED\");\n\t}\n\tif (flags.includes(POLICY_FLAG.EVIDENCE_DAG_INCOMPLETE)) {\n\t\tv = worstUserVerdict(v, \"INCONCLUSIVE\");\n\t}\n\tif (\n\t\tpreviewOnly &&\n\t\t(flags.includes(POLICY_FLAG.REPRO_OVERFIT_SUSPECT) || flags.includes(POLICY_FLAG.LOW_DISCRIMINATION))\n\t) {\n\t\tv = worstUserVerdict(v, \"ADVISORY\");\n\t}\n\treturn v === \"PASS\" && flags.length === 0 ? null : v;\n}\n\nexport interface MapToB2CInput {\n\tkind: string;\n\tpacketId?: string;\n\tdispatchRecordId?: string;\n\trunIds: string[];\n\tpreviewOnly: boolean;\n\tpolicyFlags: PolicyFlag[];\n\tdiffPaths: string[];\n\tadjudication?: AdjudicationResult;\n\tevaluatedAt?: string;\n\trepairHints?: string[];\n}\n\nexport interface MapToB2COutput {\n\tverdictCard: VerdictCard;\n\treceipt: VerificationReceipt;\n}\n\nexport const BATCH1_NO_DOCKER_RUNNER = \"BATCH1_NO_DOCKER_RUNNER\" as const;\n\nfunction buildNextActions(verdict: UserVerdict, previewOnly: boolean, canApply: boolean): VerdictNextAction[] {\n\tif (verdict === \"BLOCKED\") {\n\t\treturn [\"Regenerate\"];\n\t}\n\tif (verdict === \"INCONCLUSIVE\") {\n\t\treturn previewOnly ? [\"Deep Check\", \"Regenerate\"] : [\"Deep Check\"];\n\t}\n\tif (verdict === \"ADVISORY\") {\n\t\treturn previewOnly ? [\"Deep Check\", \"Apply\"] : [\"Apply\"];\n\t}\n\tif (canApply) {\n\t\treturn [\"Apply\"];\n\t}\n\treturn [\"Deep Check\"];\n}\n\nfunction buildLimitsCode(previewOnly: boolean): string | undefined {\n\treturn previewOnly ? BATCH1_NO_DOCKER_RUNNER : undefined;\n}\n\nfunction buildDisclaimer(previewOnly: boolean, limitsCode: string | undefined): string | undefined {\n\tif (!previewOnly) {\n\t\treturn undefined;\n\t}\n\tconst code = limitsCode ?? BATCH1_NO_DOCKER_RUNNER;\n\treturn `Preview-only evaluation (${code}): no docker runner; apply and submit gates are conservative.`;\n}\n\nexport function mapToB2C(input: MapToB2CInput): MapToB2COutput {\n\tconst evaluatedAt = input.evaluatedAt ?? new Date().toISOString();\n\tlet userVerdict: UserVerdict = \"INCONCLUSIVE\";\n\tconst passed_checks: string[] = [];\n\tconst blocked_reasons: string[] = [];\n\n\tif (input.diffPaths.length === 0 && input.adjudication === undefined) {\n\t\tuserVerdict = \"INCONCLUSIVE\";\n\t\tblocked_reasons.push(\"No changed paths were found in the diff; cannot assess write scope.\");\n\t} else {\n\t\tuserVerdict = \"PASS\";\n\t}\n\n\tconst policyVerdict = userVerdictFromPolicyFlags(input.policyFlags, input.previewOnly);\n\tif (policyVerdict !== null) {\n\t\tuserVerdict = worstUserVerdict(userVerdict, policyVerdict);\n\t}\n\n\tif (input.policyFlags.includes(POLICY_FLAG.SECRET_SUSPECT)) {\n\t\tblocked_reasons.push(\"Diff lines may contain secrets or credentials; remove before proceeding.\");\n\t}\n\tif (input.policyFlags.includes(POLICY_FLAG.CANDIDATE_LEAK_SUSPECT)) {\n\t\tblocked_reasons.push(\"One or more changed paths fall outside the approved write scope.\");\n\t}\n\tif (input.policyFlags.includes(POLICY_FLAG.EVIDENCE_DAG_INCOMPLETE)) {\n\t\tblocked_reasons.push(\"Run evidence is required but was not evaluated in this receipt.\");\n\t}\n\tif (input.previewOnly && input.policyFlags.includes(POLICY_FLAG.LOW_DISCRIMINATION)) {\n\t\tblocked_reasons.push(\"Preview-only mode: discrimination against production evidence is limited.\");\n\t}\n\n\tif (input.adjudication !== undefined) {\n\t\tconst fromOa = verdictFromOa(input.adjudication.verdict);\n\t\tuserVerdict = worstUserVerdict(userVerdict, fromOa);\n\t\tconst strings = userStringsForReasonCode(input.adjudication.reason_code);\n\t\tpassed_checks.push(...strings.passed);\n\t\tblocked_reasons.push(...strings.blocked);\n\t} else if (userVerdict === \"PASS\" && input.diffPaths.length > 0) {\n\t\tpassed_checks.push(\"Changed paths are within approved write scope (fast wall).\");\n\t}\n\n\tconst limitsCode = buildLimitsCode(input.previewOnly);\n\tconst limits: VerdictLimits = {\n\t\trequiresHumanReview: userVerdict === \"BLOCKED\" || userVerdict === \"INCONCLUSIVE\",\n\t\tpreviewOnly: input.previewOnly,\n\t\tcode: limitsCode,\n\t};\n\n\tconst canApply =\n\t\tuserVerdict === \"PASS\" &&\n\t\t!input.policyFlags.includes(POLICY_FLAG.NON_NEGOTIABLE_BLOCKING) &&\n\t\t!input.policyFlags.includes(POLICY_FLAG.CANDIDATE_LEAK_SUSPECT) &&\n\t\t!input.policyFlags.includes(POLICY_FLAG.SECRET_SUSPECT) &&\n\t\t(input.adjudication === undefined || input.adjudication.verdict === \"CONFIRMED\");\n\n\tconst shouldSubmit =\n\t\tcanApply && !input.previewOnly && input.runIds.length > 0 && input.adjudication?.verdict === \"CONFIRMED\";\n\n\tconst disclaimer = buildDisclaimer(input.previewOnly, limitsCode);\n\n\tconst verdictCard: VerdictCard = {\n\t\tschemaVersion: B2C_VERDICT_SCHEMA_VERSION,\n\t\tverdict: userVerdict,\n\t\trisk: riskFromUserVerdict(userVerdict, input.policyFlags),\n\t\tlimits,\n\t\tpassed_checks,\n\t\tblocked_reasons: [...new Set(blocked_reasons)],\n\t\tnext_actions: buildNextActions(userVerdict, input.previewOnly, canApply),\n\t\trepairHints: input.repairHints !== undefined && input.repairHints.length > 0 ? input.repairHints : undefined,\n\t\tpacketId: input.packetId,\n\t\tkind: input.kind,\n\t};\n\n\tconst receipt: VerificationReceipt = {\n\t\tschemaVersion: B2C_VERDICT_SCHEMA_VERSION,\n\t\tevaluatedAt,\n\t\tkind: input.kind,\n\t\tpacketId: input.packetId,\n\t\tdispatchRecordId: input.dispatchRecordId,\n\t\trunIds: input.runIds,\n\t\tpreviewOnly: input.previewOnly,\n\t\tcanApply,\n\t\tshouldSubmit,\n\t\tpolicyFlags: [...input.policyFlags],\n\t\tadjudicationVerdict: input.adjudication?.verdict,\n\t\tadjudicationReasonCode: input.adjudication?.reason_code,\n\t\tdiffPaths: input.diffPaths,\n\t\tdisclaimer,\n\t};\n\n\treturn { verdictCard, receipt };\n}\n"]}
@@ -151,7 +151,7 @@ export function mapToB2C(input) {
151
151
  !input.policyFlags.includes(POLICY_FLAG.CANDIDATE_LEAK_SUSPECT) &&
152
152
  !input.policyFlags.includes(POLICY_FLAG.SECRET_SUSPECT) &&
153
153
  (input.adjudication === undefined || input.adjudication.verdict === "CONFIRMED");
154
- const shouldSubmit = userVerdict !== "BLOCKED" && !input.policyFlags.includes(POLICY_FLAG.NON_NEGOTIABLE_BLOCKING);
154
+ const shouldSubmit = canApply && !input.previewOnly && input.runIds.length > 0 && input.adjudication?.verdict === "CONFIRMED";
155
155
  const disclaimer = buildDisclaimer(input.previewOnly, limitsCode);
156
156
  const verdictCard = {
157
157
  schemaVersion: B2C_VERDICT_SCHEMA_VERSION,
@@ -1 +1 @@
1
- {"version":3,"file":"b2c-mapper.js","sourceRoot":"","sources":["../src/b2c-mapper.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Maps OA adjudication + policy flags to B2C {@link VerdictCard} and apply/submit gates.\n */\n\nimport type { AdjudicationResult } from \"./adjudicator.ts\";\nimport type { AdjudicationReasonCode, VerdictState } from \"./adjudicator-registry.ts\";\nimport {\n\tB2C_VERDICT_SCHEMA_VERSION,\n\ttype UserRiskLevel,\n\ttype UserVerdict,\n\ttype VerdictCard,\n\ttype VerdictLimits,\n\ttype VerdictNextAction,\n\ttype VerificationReceipt,\n} from \"./b2c-verdict.ts\";\nimport { POLICY_FLAG, type PolicyFlag } from \"./policy-wall.ts\";\n\nconst USER_VERDICT_SEVERITY: UserVerdict[] = [\"BLOCKED\", \"INCONCLUSIVE\", \"ADVISORY\", \"PASS\"];\n\nfunction worstUserVerdict(current: UserVerdict, next: UserVerdict): UserVerdict {\n\tconst cur = USER_VERDICT_SEVERITY.indexOf(current);\n\tconst nxt = USER_VERDICT_SEVERITY.indexOf(next);\n\treturn cur <= nxt ? current : next;\n}\n\nfunction verdictFromOa(verdict: VerdictState): UserVerdict {\n\tswitch (verdict) {\n\t\tcase \"CONFIRMED\":\n\t\t\treturn \"PASS\";\n\t\tcase \"CORROBORATED-FAILURE\":\n\t\t\treturn \"ADVISORY\";\n\t\tcase \"CONTRADICTED\":\n\t\t\treturn \"BLOCKED\";\n\t\tcase \"INDETERMINATE\":\n\t\t\treturn \"INCONCLUSIVE\";\n\t\tcase \"VERIFIER-ERROR\":\n\t\t\treturn \"INCONCLUSIVE\";\n\t}\n}\n\nfunction riskFromUserVerdict(verdict: UserVerdict, flags: PolicyFlag[]): UserRiskLevel {\n\tif (verdict === \"BLOCKED\" || flags.includes(POLICY_FLAG.NON_NEGOTIABLE_BLOCKING)) {\n\t\treturn \"critical\";\n\t}\n\tif (verdict === \"INCONCLUSIVE\") return \"high\";\n\tif (verdict === \"ADVISORY\") return \"medium\";\n\treturn \"low\";\n}\n\nconst REASON_CODE_USER: Record<AdjudicationReasonCode, { passed?: string; blocked?: string }> = {\n\tSCOPE_VIOLATION: { blocked: \"Write scope violation detected by outcome adjudication.\" },\n\tSCHEMA_DRIFT: { blocked: \"Output schema does not match the expected contract.\" },\n\tCONTENT_CHECK_FAILED: { blocked: \"Content verification failed for one or more artifacts.\" },\n\tNO_EVIDENCE_ON_SUCCESS: { blocked: \"Run reported success but left no usable evidence.\" },\n\tEMPTY_ARTIFACT_CONTENT: { blocked: \"An artifact was present but contained no substantive content.\" },\n\tTRACE_CHECK_FAILED: { blocked: \"Trace verification failed for this run.\" },\n\tTRACE_ERROR_SPAN: { blocked: \"Error-level spans were found under a reported success.\" },\n\tMIN_ACTIONS_UNMET: { blocked: \"Fewer actions were recorded than required for this kind.\" },\n\tRUN_STATUS_UNPARSEABLE: { blocked: \"Run status could not be interpreted.\" },\n\tRUN_FETCH_FAILED: { blocked: \"Evidence could not be fetched for this run.\" },\n\tMALFORMED_REQUEST: { blocked: \"Adjudication request was malformed.\" },\n\tRUN_NOT_TERMINAL: { blocked: \"Run has not reached a terminal status yet.\" },\n\tEVIDENCE_EMPTY: { blocked: \"Evidence was too thin to reach a confident verdict.\" },\n\tFAILURE_REPORTED: { blocked: \"The run reported failure and evidence agrees.\" },\n\tALL_CHECKS_PASSED: { passed: \"All outcome adjudication checks passed.\" },\n};\n\nfunction userStringsForReasonCode(code: AdjudicationReasonCode): { passed: string[]; blocked: string[] } {\n\tconst entry = REASON_CODE_USER[code];\n\tconst passed: string[] = [];\n\tconst blocked: string[] = [];\n\tif (entry.passed) passed.push(entry.passed);\n\tif (entry.blocked) blocked.push(entry.blocked);\n\treturn { passed, blocked };\n}\n\nfunction userVerdictFromPolicyFlags(flags: PolicyFlag[], previewOnly: boolean): UserVerdict | null {\n\tlet v: UserVerdict = \"PASS\";\n\tif (\n\t\tflags.includes(POLICY_FLAG.NON_NEGOTIABLE_BLOCKING) ||\n\t\tflags.includes(POLICY_FLAG.CANDIDATE_LEAK_SUSPECT) ||\n\t\tflags.includes(POLICY_FLAG.SECRET_SUSPECT)\n\t) {\n\t\tv = worstUserVerdict(v, \"BLOCKED\");\n\t}\n\tif (flags.includes(POLICY_FLAG.EVIDENCE_DAG_INCOMPLETE)) {\n\t\tv = worstUserVerdict(v, \"INCONCLUSIVE\");\n\t}\n\tif (\n\t\tpreviewOnly &&\n\t\t(flags.includes(POLICY_FLAG.REPRO_OVERFIT_SUSPECT) || flags.includes(POLICY_FLAG.LOW_DISCRIMINATION))\n\t) {\n\t\tv = worstUserVerdict(v, \"ADVISORY\");\n\t}\n\treturn v === \"PASS\" && flags.length === 0 ? null : v;\n}\n\nexport interface MapToB2CInput {\n\tkind: string;\n\tpacketId?: string;\n\tdispatchRecordId?: string;\n\trunIds: string[];\n\tpreviewOnly: boolean;\n\tpolicyFlags: PolicyFlag[];\n\tdiffPaths: string[];\n\tadjudication?: AdjudicationResult;\n\tevaluatedAt?: string;\n\trepairHints?: string[];\n}\n\nexport interface MapToB2COutput {\n\tverdictCard: VerdictCard;\n\treceipt: VerificationReceipt;\n}\n\nexport const BATCH1_NO_DOCKER_RUNNER = \"BATCH1_NO_DOCKER_RUNNER\" as const;\n\nfunction buildNextActions(verdict: UserVerdict, previewOnly: boolean, canApply: boolean): VerdictNextAction[] {\n\tif (verdict === \"BLOCKED\") {\n\t\treturn [\"Regenerate\"];\n\t}\n\tif (verdict === \"INCONCLUSIVE\") {\n\t\treturn previewOnly ? [\"Deep Check\", \"Regenerate\"] : [\"Deep Check\"];\n\t}\n\tif (verdict === \"ADVISORY\") {\n\t\treturn previewOnly ? [\"Deep Check\", \"Apply\"] : [\"Apply\"];\n\t}\n\tif (canApply) {\n\t\treturn [\"Apply\"];\n\t}\n\treturn [\"Deep Check\"];\n}\n\nfunction buildLimitsCode(previewOnly: boolean): string | undefined {\n\treturn previewOnly ? BATCH1_NO_DOCKER_RUNNER : undefined;\n}\n\nfunction buildDisclaimer(previewOnly: boolean, limitsCode: string | undefined): string | undefined {\n\tif (!previewOnly) {\n\t\treturn undefined;\n\t}\n\tconst code = limitsCode ?? BATCH1_NO_DOCKER_RUNNER;\n\treturn `Preview-only evaluation (${code}): no docker runner; apply and submit gates are conservative.`;\n}\n\nexport function mapToB2C(input: MapToB2CInput): MapToB2COutput {\n\tconst evaluatedAt = input.evaluatedAt ?? new Date().toISOString();\n\tlet userVerdict: UserVerdict = \"INCONCLUSIVE\";\n\tconst passed_checks: string[] = [];\n\tconst blocked_reasons: string[] = [];\n\n\tif (input.diffPaths.length === 0 && input.adjudication === undefined) {\n\t\tuserVerdict = \"INCONCLUSIVE\";\n\t\tblocked_reasons.push(\"No changed paths were found in the diff; cannot assess write scope.\");\n\t} else {\n\t\tuserVerdict = \"PASS\";\n\t}\n\n\tconst policyVerdict = userVerdictFromPolicyFlags(input.policyFlags, input.previewOnly);\n\tif (policyVerdict !== null) {\n\t\tuserVerdict = worstUserVerdict(userVerdict, policyVerdict);\n\t}\n\n\tif (input.policyFlags.includes(POLICY_FLAG.SECRET_SUSPECT)) {\n\t\tblocked_reasons.push(\"Diff lines may contain secrets or credentials; remove before proceeding.\");\n\t}\n\tif (input.policyFlags.includes(POLICY_FLAG.CANDIDATE_LEAK_SUSPECT)) {\n\t\tblocked_reasons.push(\"One or more changed paths fall outside the approved write scope.\");\n\t}\n\tif (input.policyFlags.includes(POLICY_FLAG.EVIDENCE_DAG_INCOMPLETE)) {\n\t\tblocked_reasons.push(\"Run evidence is required but was not evaluated in this receipt.\");\n\t}\n\tif (input.previewOnly && input.policyFlags.includes(POLICY_FLAG.LOW_DISCRIMINATION)) {\n\t\tblocked_reasons.push(\"Preview-only mode: discrimination against production evidence is limited.\");\n\t}\n\n\tif (input.adjudication !== undefined) {\n\t\tconst fromOa = verdictFromOa(input.adjudication.verdict);\n\t\tuserVerdict = worstUserVerdict(userVerdict, fromOa);\n\t\tconst strings = userStringsForReasonCode(input.adjudication.reason_code);\n\t\tpassed_checks.push(...strings.passed);\n\t\tblocked_reasons.push(...strings.blocked);\n\t} else if (userVerdict === \"PASS\" && input.diffPaths.length > 0) {\n\t\tpassed_checks.push(\"Changed paths are within approved write scope (fast wall).\");\n\t}\n\n\tconst limitsCode = buildLimitsCode(input.previewOnly);\n\tconst limits: VerdictLimits = {\n\t\trequiresHumanReview: userVerdict === \"BLOCKED\" || userVerdict === \"INCONCLUSIVE\",\n\t\tpreviewOnly: input.previewOnly,\n\t\tcode: limitsCode,\n\t};\n\n\tconst canApply =\n\t\tuserVerdict === \"PASS\" &&\n\t\t!input.policyFlags.includes(POLICY_FLAG.NON_NEGOTIABLE_BLOCKING) &&\n\t\t!input.policyFlags.includes(POLICY_FLAG.CANDIDATE_LEAK_SUSPECT) &&\n\t\t!input.policyFlags.includes(POLICY_FLAG.SECRET_SUSPECT) &&\n\t\t(input.adjudication === undefined || input.adjudication.verdict === \"CONFIRMED\");\n\n\tconst shouldSubmit = userVerdict !== \"BLOCKED\" && !input.policyFlags.includes(POLICY_FLAG.NON_NEGOTIABLE_BLOCKING);\n\n\tconst disclaimer = buildDisclaimer(input.previewOnly, limitsCode);\n\n\tconst verdictCard: VerdictCard = {\n\t\tschemaVersion: B2C_VERDICT_SCHEMA_VERSION,\n\t\tverdict: userVerdict,\n\t\trisk: riskFromUserVerdict(userVerdict, input.policyFlags),\n\t\tlimits,\n\t\tpassed_checks,\n\t\tblocked_reasons: [...new Set(blocked_reasons)],\n\t\tnext_actions: buildNextActions(userVerdict, input.previewOnly, canApply),\n\t\trepairHints: input.repairHints !== undefined && input.repairHints.length > 0 ? input.repairHints : undefined,\n\t\tpacketId: input.packetId,\n\t\tkind: input.kind,\n\t};\n\n\tconst receipt: VerificationReceipt = {\n\t\tschemaVersion: B2C_VERDICT_SCHEMA_VERSION,\n\t\tevaluatedAt,\n\t\tkind: input.kind,\n\t\tpacketId: input.packetId,\n\t\tdispatchRecordId: input.dispatchRecordId,\n\t\trunIds: input.runIds,\n\t\tpreviewOnly: input.previewOnly,\n\t\tcanApply,\n\t\tshouldSubmit,\n\t\tpolicyFlags: [...input.policyFlags],\n\t\tadjudicationVerdict: input.adjudication?.verdict,\n\t\tadjudicationReasonCode: input.adjudication?.reason_code,\n\t\tdiffPaths: input.diffPaths,\n\t\tdisclaimer,\n\t};\n\n\treturn { verdictCard, receipt };\n}\n"]}
1
+ {"version":3,"file":"b2c-mapper.js","sourceRoot":"","sources":["../src/b2c-mapper.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Maps OA adjudication + policy flags to B2C {@link VerdictCard} and apply/submit gates.\n */\n\nimport type { AdjudicationResult } from \"./adjudicator.ts\";\nimport type { AdjudicationReasonCode, VerdictState } from \"./adjudicator-registry.ts\";\nimport {\n\tB2C_VERDICT_SCHEMA_VERSION,\n\ttype UserRiskLevel,\n\ttype UserVerdict,\n\ttype VerdictCard,\n\ttype VerdictLimits,\n\ttype VerdictNextAction,\n\ttype VerificationReceipt,\n} from \"./b2c-verdict.ts\";\nimport { POLICY_FLAG, type PolicyFlag } from \"./policy-wall.ts\";\n\nconst USER_VERDICT_SEVERITY: UserVerdict[] = [\"BLOCKED\", \"INCONCLUSIVE\", \"ADVISORY\", \"PASS\"];\n\nfunction worstUserVerdict(current: UserVerdict, next: UserVerdict): UserVerdict {\n\tconst cur = USER_VERDICT_SEVERITY.indexOf(current);\n\tconst nxt = USER_VERDICT_SEVERITY.indexOf(next);\n\treturn cur <= nxt ? current : next;\n}\n\nfunction verdictFromOa(verdict: VerdictState): UserVerdict {\n\tswitch (verdict) {\n\t\tcase \"CONFIRMED\":\n\t\t\treturn \"PASS\";\n\t\tcase \"CORROBORATED-FAILURE\":\n\t\t\treturn \"ADVISORY\";\n\t\tcase \"CONTRADICTED\":\n\t\t\treturn \"BLOCKED\";\n\t\tcase \"INDETERMINATE\":\n\t\t\treturn \"INCONCLUSIVE\";\n\t\tcase \"VERIFIER-ERROR\":\n\t\t\treturn \"INCONCLUSIVE\";\n\t}\n}\n\nfunction riskFromUserVerdict(verdict: UserVerdict, flags: PolicyFlag[]): UserRiskLevel {\n\tif (verdict === \"BLOCKED\" || flags.includes(POLICY_FLAG.NON_NEGOTIABLE_BLOCKING)) {\n\t\treturn \"critical\";\n\t}\n\tif (verdict === \"INCONCLUSIVE\") return \"high\";\n\tif (verdict === \"ADVISORY\") return \"medium\";\n\treturn \"low\";\n}\n\nconst REASON_CODE_USER: Record<AdjudicationReasonCode, { passed?: string; blocked?: string }> = {\n\tSCOPE_VIOLATION: { blocked: \"Write scope violation detected by outcome adjudication.\" },\n\tSCHEMA_DRIFT: { blocked: \"Output schema does not match the expected contract.\" },\n\tCONTENT_CHECK_FAILED: { blocked: \"Content verification failed for one or more artifacts.\" },\n\tNO_EVIDENCE_ON_SUCCESS: { blocked: \"Run reported success but left no usable evidence.\" },\n\tEMPTY_ARTIFACT_CONTENT: { blocked: \"An artifact was present but contained no substantive content.\" },\n\tTRACE_CHECK_FAILED: { blocked: \"Trace verification failed for this run.\" },\n\tTRACE_ERROR_SPAN: { blocked: \"Error-level spans were found under a reported success.\" },\n\tMIN_ACTIONS_UNMET: { blocked: \"Fewer actions were recorded than required for this kind.\" },\n\tRUN_STATUS_UNPARSEABLE: { blocked: \"Run status could not be interpreted.\" },\n\tRUN_FETCH_FAILED: { blocked: \"Evidence could not be fetched for this run.\" },\n\tMALFORMED_REQUEST: { blocked: \"Adjudication request was malformed.\" },\n\tRUN_NOT_TERMINAL: { blocked: \"Run has not reached a terminal status yet.\" },\n\tEVIDENCE_EMPTY: { blocked: \"Evidence was too thin to reach a confident verdict.\" },\n\tFAILURE_REPORTED: { blocked: \"The run reported failure and evidence agrees.\" },\n\tALL_CHECKS_PASSED: { passed: \"All outcome adjudication checks passed.\" },\n};\n\nfunction userStringsForReasonCode(code: AdjudicationReasonCode): { passed: string[]; blocked: string[] } {\n\tconst entry = REASON_CODE_USER[code];\n\tconst passed: string[] = [];\n\tconst blocked: string[] = [];\n\tif (entry.passed) passed.push(entry.passed);\n\tif (entry.blocked) blocked.push(entry.blocked);\n\treturn { passed, blocked };\n}\n\nfunction userVerdictFromPolicyFlags(flags: PolicyFlag[], previewOnly: boolean): UserVerdict | null {\n\tlet v: UserVerdict = \"PASS\";\n\tif (\n\t\tflags.includes(POLICY_FLAG.NON_NEGOTIABLE_BLOCKING) ||\n\t\tflags.includes(POLICY_FLAG.CANDIDATE_LEAK_SUSPECT) ||\n\t\tflags.includes(POLICY_FLAG.SECRET_SUSPECT)\n\t) {\n\t\tv = worstUserVerdict(v, \"BLOCKED\");\n\t}\n\tif (flags.includes(POLICY_FLAG.EVIDENCE_DAG_INCOMPLETE)) {\n\t\tv = worstUserVerdict(v, \"INCONCLUSIVE\");\n\t}\n\tif (\n\t\tpreviewOnly &&\n\t\t(flags.includes(POLICY_FLAG.REPRO_OVERFIT_SUSPECT) || flags.includes(POLICY_FLAG.LOW_DISCRIMINATION))\n\t) {\n\t\tv = worstUserVerdict(v, \"ADVISORY\");\n\t}\n\treturn v === \"PASS\" && flags.length === 0 ? null : v;\n}\n\nexport interface MapToB2CInput {\n\tkind: string;\n\tpacketId?: string;\n\tdispatchRecordId?: string;\n\trunIds: string[];\n\tpreviewOnly: boolean;\n\tpolicyFlags: PolicyFlag[];\n\tdiffPaths: string[];\n\tadjudication?: AdjudicationResult;\n\tevaluatedAt?: string;\n\trepairHints?: string[];\n}\n\nexport interface MapToB2COutput {\n\tverdictCard: VerdictCard;\n\treceipt: VerificationReceipt;\n}\n\nexport const BATCH1_NO_DOCKER_RUNNER = \"BATCH1_NO_DOCKER_RUNNER\" as const;\n\nfunction buildNextActions(verdict: UserVerdict, previewOnly: boolean, canApply: boolean): VerdictNextAction[] {\n\tif (verdict === \"BLOCKED\") {\n\t\treturn [\"Regenerate\"];\n\t}\n\tif (verdict === \"INCONCLUSIVE\") {\n\t\treturn previewOnly ? [\"Deep Check\", \"Regenerate\"] : [\"Deep Check\"];\n\t}\n\tif (verdict === \"ADVISORY\") {\n\t\treturn previewOnly ? [\"Deep Check\", \"Apply\"] : [\"Apply\"];\n\t}\n\tif (canApply) {\n\t\treturn [\"Apply\"];\n\t}\n\treturn [\"Deep Check\"];\n}\n\nfunction buildLimitsCode(previewOnly: boolean): string | undefined {\n\treturn previewOnly ? BATCH1_NO_DOCKER_RUNNER : undefined;\n}\n\nfunction buildDisclaimer(previewOnly: boolean, limitsCode: string | undefined): string | undefined {\n\tif (!previewOnly) {\n\t\treturn undefined;\n\t}\n\tconst code = limitsCode ?? BATCH1_NO_DOCKER_RUNNER;\n\treturn `Preview-only evaluation (${code}): no docker runner; apply and submit gates are conservative.`;\n}\n\nexport function mapToB2C(input: MapToB2CInput): MapToB2COutput {\n\tconst evaluatedAt = input.evaluatedAt ?? new Date().toISOString();\n\tlet userVerdict: UserVerdict = \"INCONCLUSIVE\";\n\tconst passed_checks: string[] = [];\n\tconst blocked_reasons: string[] = [];\n\n\tif (input.diffPaths.length === 0 && input.adjudication === undefined) {\n\t\tuserVerdict = \"INCONCLUSIVE\";\n\t\tblocked_reasons.push(\"No changed paths were found in the diff; cannot assess write scope.\");\n\t} else {\n\t\tuserVerdict = \"PASS\";\n\t}\n\n\tconst policyVerdict = userVerdictFromPolicyFlags(input.policyFlags, input.previewOnly);\n\tif (policyVerdict !== null) {\n\t\tuserVerdict = worstUserVerdict(userVerdict, policyVerdict);\n\t}\n\n\tif (input.policyFlags.includes(POLICY_FLAG.SECRET_SUSPECT)) {\n\t\tblocked_reasons.push(\"Diff lines may contain secrets or credentials; remove before proceeding.\");\n\t}\n\tif (input.policyFlags.includes(POLICY_FLAG.CANDIDATE_LEAK_SUSPECT)) {\n\t\tblocked_reasons.push(\"One or more changed paths fall outside the approved write scope.\");\n\t}\n\tif (input.policyFlags.includes(POLICY_FLAG.EVIDENCE_DAG_INCOMPLETE)) {\n\t\tblocked_reasons.push(\"Run evidence is required but was not evaluated in this receipt.\");\n\t}\n\tif (input.previewOnly && input.policyFlags.includes(POLICY_FLAG.LOW_DISCRIMINATION)) {\n\t\tblocked_reasons.push(\"Preview-only mode: discrimination against production evidence is limited.\");\n\t}\n\n\tif (input.adjudication !== undefined) {\n\t\tconst fromOa = verdictFromOa(input.adjudication.verdict);\n\t\tuserVerdict = worstUserVerdict(userVerdict, fromOa);\n\t\tconst strings = userStringsForReasonCode(input.adjudication.reason_code);\n\t\tpassed_checks.push(...strings.passed);\n\t\tblocked_reasons.push(...strings.blocked);\n\t} else if (userVerdict === \"PASS\" && input.diffPaths.length > 0) {\n\t\tpassed_checks.push(\"Changed paths are within approved write scope (fast wall).\");\n\t}\n\n\tconst limitsCode = buildLimitsCode(input.previewOnly);\n\tconst limits: VerdictLimits = {\n\t\trequiresHumanReview: userVerdict === \"BLOCKED\" || userVerdict === \"INCONCLUSIVE\",\n\t\tpreviewOnly: input.previewOnly,\n\t\tcode: limitsCode,\n\t};\n\n\tconst canApply =\n\t\tuserVerdict === \"PASS\" &&\n\t\t!input.policyFlags.includes(POLICY_FLAG.NON_NEGOTIABLE_BLOCKING) &&\n\t\t!input.policyFlags.includes(POLICY_FLAG.CANDIDATE_LEAK_SUSPECT) &&\n\t\t!input.policyFlags.includes(POLICY_FLAG.SECRET_SUSPECT) &&\n\t\t(input.adjudication === undefined || input.adjudication.verdict === \"CONFIRMED\");\n\n\tconst shouldSubmit =\n\t\tcanApply && !input.previewOnly && input.runIds.length > 0 && input.adjudication?.verdict === \"CONFIRMED\";\n\n\tconst disclaimer = buildDisclaimer(input.previewOnly, limitsCode);\n\n\tconst verdictCard: VerdictCard = {\n\t\tschemaVersion: B2C_VERDICT_SCHEMA_VERSION,\n\t\tverdict: userVerdict,\n\t\trisk: riskFromUserVerdict(userVerdict, input.policyFlags),\n\t\tlimits,\n\t\tpassed_checks,\n\t\tblocked_reasons: [...new Set(blocked_reasons)],\n\t\tnext_actions: buildNextActions(userVerdict, input.previewOnly, canApply),\n\t\trepairHints: input.repairHints !== undefined && input.repairHints.length > 0 ? input.repairHints : undefined,\n\t\tpacketId: input.packetId,\n\t\tkind: input.kind,\n\t};\n\n\tconst receipt: VerificationReceipt = {\n\t\tschemaVersion: B2C_VERDICT_SCHEMA_VERSION,\n\t\tevaluatedAt,\n\t\tkind: input.kind,\n\t\tpacketId: input.packetId,\n\t\tdispatchRecordId: input.dispatchRecordId,\n\t\trunIds: input.runIds,\n\t\tpreviewOnly: input.previewOnly,\n\t\tcanApply,\n\t\tshouldSubmit,\n\t\tpolicyFlags: [...input.policyFlags],\n\t\tadjudicationVerdict: input.adjudication?.verdict,\n\t\tadjudicationReasonCode: input.adjudication?.reason_code,\n\t\tdiffPaths: input.diffPaths,\n\t\tdisclaimer,\n\t};\n\n\treturn { verdictCard, receipt };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"deep-wall.d.ts","sourceRoot":"","sources":["../src/deep-wall.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,aAAa,GAAG,WAAW,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE9C,eAAO,MAAM,qBAAqB,yBAAmC,CAAC;AAEtE,8FAA8F;AAC9F,eAAO,MAAM,qBAAqB,yBAAmC,CAAC;AAEtE,oGAAoG;AACpG,eAAO,MAAM,4BAA4B,gCAA0C,CAAC;AAEpF,kFAAkF;AAClF,eAAO,MAAM,iBAAiB,qBAA+B,CAAC;AAE9D,wEAAwE;AACxE,MAAM,WAAW,sBAAsB;IACtC,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,WAAW,GAAG,aAAa,CAAC;IACpC,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,qBAAqB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEhG,MAAM,WAAW,qBAAqB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,iGAAiG;IACjG,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,sFAAsF;IACtF,eAAe,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,OAAO,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IAC/C,MAAM,EAAE,SAAS,CAAC,OAAO,uBAAuB,CAAC,CAAC;IAClD,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,iGAAiG;IACjG,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAqBD,8EAA8E;AAC9E,wBAAgB,2BAA2B,IAAI,aAAa,CAI3D;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,IAAI,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,kBAAkB,CAQjF;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CA6BxF","sourcesContent":["/**\n * Deep Correctness Wall — stub default, plus evidence-gated runner injection (Wave 4-C3b).\n *\n * `completed` is NEVER emitted unless a caller injects a `runner`, sets\n * `allowCompletion`, AND the runner returns structured evidence. Without all\n * three, the result is downgraded to `unavailable`. This is a candidate-patch-leak\n * guard: deep completion must be evidence-backed, never asserted.\n */\n\nimport { BATCH1_NO_DOCKER_RUNNER } from \"./b2c-mapper.ts\";\n\nexport type DeepWallStatus = \"not_requested\" | \"unavailable\" | \"completed\";\n\nexport type DeepWallPhase = \"stub\" | \"docker\";\n\nexport const DEEP_WALL_UNAVAILABLE = \"DEEP_WALL_UNAVAILABLE\" as const;\n\n/** Policy flag when deep wall would report completed without a wired runner (Wave 4 gate). */\nexport const DEEP_RUNNER_NOT_WIRED = \"DEEP_RUNNER_NOT_WIRED\" as const;\n\n/** Policy flag when an injected runner returned `completed` without valid evidence (downgraded). */\nexport const DEEP_RUNNER_EVIDENCE_MISSING = \"DEEP_RUNNER_EVIDENCE_MISSING\" as const;\n\n/** Policy flag when an injected runner threw (caught, treated as unavailable). */\nexport const DEEP_RUNNER_ERROR = \"DEEP_RUNNER_ERROR\" as const;\n\n/** Structured evidence a runner MUST attach to a `completed` result. */\nexport interface DeepWallRunnerEvidence {\n\t/** Content digest of what was checked (e.g. sha256 of replayed patch + base). */\n\tdigest: string;\n\t/** The exact command/provenance the runner executed. */\n\tcommand: string;\n\t/** Runner exit code; `completed` requires `0` by runner contract. */\n\texitCode: number;\n}\n\nexport interface DeepWallRunnerResult {\n\tstatus: \"completed\" | \"unavailable\";\n\tevidence?: DeepWallRunnerEvidence;\n\tmessage: string;\n}\n\nexport type DeepWallRunnerFn = (params: RunDeepWallStubParams) => Promise<DeepWallRunnerResult>;\n\nexport interface RunDeepWallStubParams {\n\tkind: string;\n\trunIds?: string[];\n\tpacketId?: string;\n\t/** Wave 3: `docker` records intent; runner still unavailable until hermetic exec ships. */\n\tphase?: DeepWallPhase;\n\t/** Wave 4-C3b: injected hermetic runner. Completion is gated by `allowCompletion` + evidence. */\n\trunner?: DeepWallRunnerFn;\n\t/** Must be `true` for a runner to report `completed`; default `false` (stub path). */\n\tallowCompletion?: boolean;\n}\n\nexport interface DeepWallStubResult {\n\tstatus: Extract<DeepWallStatus, \"unavailable\">;\n\tlimits: readonly [typeof BATCH1_NO_DOCKER_RUNNER];\n\tmessage: string;\n}\n\nexport interface DeepWallResult {\n\tstatus: DeepWallStatus;\n\tmessage: string;\n\tevidence?: DeepWallRunnerEvidence;\n\tlimits?: readonly string[];\n\t/** Additional policy flags surfaced by the runner path (e.g. evidence-missing, runner-error). */\n\trunnerFlags?: readonly string[];\n}\n\nconst DEFAULT_DEEP_WALL_MESSAGE =\n\t\"Deep correctness check is not available in this environment (no docker runner). Use preview fast wall or run checks locally.\";\n\nconst DOCKER_PHASE_MESSAGE =\n\t\"Deep wall docker phase requested but hermetic runner is not wired yet; fast wall and local CI remain authoritative.\";\n\nfunction hasValidEvidence(e: unknown): e is DeepWallRunnerEvidence {\n\tif (typeof e !== \"object\" || e === null) return false;\n\tconst v = e as DeepWallRunnerEvidence;\n\treturn (\n\t\ttypeof v.digest === \"string\" &&\n\t\tv.digest.length > 0 &&\n\t\ttypeof v.command === \"string\" &&\n\t\tv.command.length > 0 &&\n\t\ttypeof v.exitCode === \"number\" &&\n\t\tNumber.isFinite(v.exitCode)\n\t);\n}\n\n/** Resolve deep-wall phase from env `OMK_WALL_DEEP_PHASE` (stub | docker). */\nexport function resolveDeepWallPhaseFromEnv(): DeepWallPhase {\n\tconst raw = process.env.OMK_WALL_DEEP_PHASE?.trim().toLowerCase();\n\tif (raw === \"docker\") return \"docker\";\n\treturn \"stub\";\n}\n\n/**\n * Hermetic deep runner is not shipped by default; `completed` is only reachable\n * via an injected runner through {@link runDeepWall}, and even then requires evidence.\n */\nexport function isDeepRunnerCompletionAllowed(): boolean {\n\treturn false;\n}\n\n/**\n * Stub deep wall: always reports unavailable with batch-1 limit code (no docker exec).\n */\nexport function runDeepWallStub(params: RunDeepWallStubParams): DeepWallStubResult {\n\tconst phase = params.phase ?? resolveDeepWallPhaseFromEnv();\n\tconst message = phase === \"docker\" ? DOCKER_PHASE_MESSAGE : DEFAULT_DEEP_WALL_MESSAGE;\n\treturn {\n\t\tstatus: \"unavailable\",\n\t\tlimits: [BATCH1_NO_DOCKER_RUNNER],\n\t\tmessage,\n\t};\n}\n\n/**\n * Evidence-gated deep wall entry point.\n *\n * - No runner, or `allowCompletion !== true` → stub unavailable path.\n * - Runner present + `allowCompletion` → runner is called in a try/catch.\n * - `completed` + valid evidence → `completed` (evidence attached).\n * - `completed` without valid evidence → downgraded to `unavailable`\n * with `DEEP_RUNNER_EVIDENCE_MISSING` (candidate-patch-leak guard).\n * - runner throws → `unavailable` with `DEEP_RUNNER_ERROR`.\n */\nexport async function runDeepWall(params: RunDeepWallStubParams): Promise<DeepWallResult> {\n\tif (params.runner !== undefined && params.allowCompletion === true) {\n\t\ttry {\n\t\t\tconst result = await params.runner(params);\n\t\t\tif (result.status === \"completed\") {\n\t\t\t\tif (hasValidEvidence(result.evidence)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\t\tevidence: result.evidence,\n\t\t\t\t\t\tmessage: result.message,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tstatus: \"unavailable\",\n\t\t\t\t\tmessage: \"Deep runner reported completed without valid evidence; downgraded to unavailable.\",\n\t\t\t\t\trunnerFlags: [DEEP_RUNNER_EVIDENCE_MISSING],\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn { status: \"unavailable\", message: result.message };\n\t\t} catch (err) {\n\t\t\treturn {\n\t\t\t\tstatus: \"unavailable\",\n\t\t\t\tmessage: `Deep runner threw: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\trunnerFlags: [DEEP_RUNNER_ERROR],\n\t\t\t};\n\t\t}\n\t}\n\tconst stub = runDeepWallStub(params);\n\treturn { status: stub.status, message: stub.message, limits: stub.limits };\n}\n"]}
1
+ {"version":3,"file":"deep-wall.d.ts","sourceRoot":"","sources":["../src/deep-wall.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,aAAa,GAAG,WAAW,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE9C,eAAO,MAAM,qBAAqB,yBAAmC,CAAC;AAEtE,8FAA8F;AAC9F,eAAO,MAAM,qBAAqB,yBAAmC,CAAC;AAEtE,oGAAoG;AACpG,eAAO,MAAM,4BAA4B,gCAA0C,CAAC;AAEpF,kFAAkF;AAClF,eAAO,MAAM,iBAAiB,qBAA+B,CAAC;AAE9D,wEAAwE;AACxE,MAAM,WAAW,sBAAsB;IACtC,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,WAAW,GAAG,aAAa,CAAC;IACpC,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,qBAAqB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEhG,MAAM,WAAW,qBAAqB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,iGAAiG;IACjG,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,sFAAsF;IACtF,eAAe,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,OAAO,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IAC/C,MAAM,EAAE,SAAS,CAAC,OAAO,uBAAuB,CAAC,CAAC;IAClD,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,iGAAiG;IACjG,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAsBD,8EAA8E;AAC9E,wBAAgB,2BAA2B,IAAI,aAAa,CAI3D;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,IAAI,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,kBAAkB,CAQjF;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CA6BxF","sourcesContent":["/**\n * Deep Correctness Wall — stub default, plus evidence-gated runner injection (Wave 4-C3b).\n *\n * `completed` is NEVER emitted unless a caller injects a `runner`, sets\n * `allowCompletion`, AND the runner returns structured evidence. Without all\n * three, the result is downgraded to `unavailable`. This is a candidate-patch-leak\n * guard: deep completion must be evidence-backed, never asserted.\n */\n\nimport { BATCH1_NO_DOCKER_RUNNER } from \"./b2c-mapper.ts\";\n\nexport type DeepWallStatus = \"not_requested\" | \"unavailable\" | \"completed\";\n\nexport type DeepWallPhase = \"stub\" | \"docker\";\n\nexport const DEEP_WALL_UNAVAILABLE = \"DEEP_WALL_UNAVAILABLE\" as const;\n\n/** Policy flag when deep wall would report completed without a wired runner (Wave 4 gate). */\nexport const DEEP_RUNNER_NOT_WIRED = \"DEEP_RUNNER_NOT_WIRED\" as const;\n\n/** Policy flag when an injected runner returned `completed` without valid evidence (downgraded). */\nexport const DEEP_RUNNER_EVIDENCE_MISSING = \"DEEP_RUNNER_EVIDENCE_MISSING\" as const;\n\n/** Policy flag when an injected runner threw (caught, treated as unavailable). */\nexport const DEEP_RUNNER_ERROR = \"DEEP_RUNNER_ERROR\" as const;\n\n/** Structured evidence a runner MUST attach to a `completed` result. */\nexport interface DeepWallRunnerEvidence {\n\t/** Content digest of what was checked (e.g. sha256 of replayed patch + base). */\n\tdigest: string;\n\t/** The exact command/provenance the runner executed. */\n\tcommand: string;\n\t/** Runner exit code; `completed` requires `0` by runner contract. */\n\texitCode: number;\n}\n\nexport interface DeepWallRunnerResult {\n\tstatus: \"completed\" | \"unavailable\";\n\tevidence?: DeepWallRunnerEvidence;\n\tmessage: string;\n}\n\nexport type DeepWallRunnerFn = (params: RunDeepWallStubParams) => Promise<DeepWallRunnerResult>;\n\nexport interface RunDeepWallStubParams {\n\tkind: string;\n\trunIds?: string[];\n\tpacketId?: string;\n\t/** Wave 3: `docker` records intent; runner still unavailable until hermetic exec ships. */\n\tphase?: DeepWallPhase;\n\t/** Wave 4-C3b: injected hermetic runner. Completion is gated by `allowCompletion` + evidence. */\n\trunner?: DeepWallRunnerFn;\n\t/** Must be `true` for a runner to report `completed`; default `false` (stub path). */\n\tallowCompletion?: boolean;\n}\n\nexport interface DeepWallStubResult {\n\tstatus: Extract<DeepWallStatus, \"unavailable\">;\n\tlimits: readonly [typeof BATCH1_NO_DOCKER_RUNNER];\n\tmessage: string;\n}\n\nexport interface DeepWallResult {\n\tstatus: DeepWallStatus;\n\tmessage: string;\n\tevidence?: DeepWallRunnerEvidence;\n\tlimits?: readonly string[];\n\t/** Additional policy flags surfaced by the runner path (e.g. evidence-missing, runner-error). */\n\trunnerFlags?: readonly string[];\n}\n\nconst DEFAULT_DEEP_WALL_MESSAGE =\n\t\"Deep correctness check is not available in this environment (no docker runner). Use preview fast wall or run checks locally.\";\n\nconst DOCKER_PHASE_MESSAGE =\n\t\"Deep wall docker phase requested but hermetic runner is not wired yet; fast wall and local CI remain authoritative.\";\n\nfunction hasValidEvidence(e: unknown): e is DeepWallRunnerEvidence {\n\tif (typeof e !== \"object\" || e === null) return false;\n\treturn (\n\t\t\"digest\" in e &&\n\t\ttypeof e.digest === \"string\" &&\n\t\te.digest.trim().length > 0 &&\n\t\t\"command\" in e &&\n\t\ttypeof e.command === \"string\" &&\n\t\te.command.trim().length > 0 &&\n\t\t\"exitCode\" in e &&\n\t\te.exitCode === 0\n\t);\n}\n\n/** Resolve deep-wall phase from env `OMK_WALL_DEEP_PHASE` (stub | docker). */\nexport function resolveDeepWallPhaseFromEnv(): DeepWallPhase {\n\tconst raw = process.env.OMK_WALL_DEEP_PHASE?.trim().toLowerCase();\n\tif (raw === \"docker\") return \"docker\";\n\treturn \"stub\";\n}\n\n/**\n * Hermetic deep runner is not shipped by default; `completed` is only reachable\n * via an injected runner through {@link runDeepWall}, and even then requires evidence.\n */\nexport function isDeepRunnerCompletionAllowed(): boolean {\n\treturn false;\n}\n\n/**\n * Stub deep wall: always reports unavailable with batch-1 limit code (no docker exec).\n */\nexport function runDeepWallStub(params: RunDeepWallStubParams): DeepWallStubResult {\n\tconst phase = params.phase ?? resolveDeepWallPhaseFromEnv();\n\tconst message = phase === \"docker\" ? DOCKER_PHASE_MESSAGE : DEFAULT_DEEP_WALL_MESSAGE;\n\treturn {\n\t\tstatus: \"unavailable\",\n\t\tlimits: [BATCH1_NO_DOCKER_RUNNER],\n\t\tmessage,\n\t};\n}\n\n/**\n * Evidence-gated deep wall entry point.\n *\n * - No runner, or `allowCompletion !== true` → stub unavailable path.\n * - Runner present + `allowCompletion` → runner is called in a try/catch.\n * - `completed` + valid evidence → `completed` (evidence attached).\n * - `completed` without valid evidence → downgraded to `unavailable`\n * with `DEEP_RUNNER_EVIDENCE_MISSING` (candidate-patch-leak guard).\n * - runner throws → `unavailable` with `DEEP_RUNNER_ERROR`.\n */\nexport async function runDeepWall(params: RunDeepWallStubParams): Promise<DeepWallResult> {\n\tif (params.runner !== undefined && params.allowCompletion === true) {\n\t\ttry {\n\t\t\tconst result = await params.runner(params);\n\t\t\tif (result.status === \"completed\") {\n\t\t\t\tif (hasValidEvidence(result.evidence)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\t\tevidence: result.evidence,\n\t\t\t\t\t\tmessage: result.message,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tstatus: \"unavailable\",\n\t\t\t\t\tmessage: \"Deep runner reported completed without valid evidence; downgraded to unavailable.\",\n\t\t\t\t\trunnerFlags: [DEEP_RUNNER_EVIDENCE_MISSING],\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn { status: \"unavailable\", message: result.message };\n\t\t} catch (err) {\n\t\t\treturn {\n\t\t\t\tstatus: \"unavailable\",\n\t\t\t\tmessage: `Deep runner threw: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\trunnerFlags: [DEEP_RUNNER_ERROR],\n\t\t\t};\n\t\t}\n\t}\n\tconst stub = runDeepWallStub(params);\n\treturn { status: stub.status, message: stub.message, limits: stub.limits };\n}\n"]}
package/dist/deep-wall.js CHANGED
@@ -19,13 +19,14 @@ const DOCKER_PHASE_MESSAGE = "Deep wall docker phase requested but hermetic runn
19
19
  function hasValidEvidence(e) {
20
20
  if (typeof e !== "object" || e === null)
21
21
  return false;
22
- const v = e;
23
- return (typeof v.digest === "string" &&
24
- v.digest.length > 0 &&
25
- typeof v.command === "string" &&
26
- v.command.length > 0 &&
27
- typeof v.exitCode === "number" &&
28
- Number.isFinite(v.exitCode));
22
+ return ("digest" in e &&
23
+ typeof e.digest === "string" &&
24
+ e.digest.trim().length > 0 &&
25
+ "command" in e &&
26
+ typeof e.command === "string" &&
27
+ e.command.trim().length > 0 &&
28
+ "exitCode" in e &&
29
+ e.exitCode === 0);
29
30
  }
30
31
  /** Resolve deep-wall phase from env `OMK_WALL_DEEP_PHASE` (stub | docker). */
31
32
  export function resolveDeepWallPhaseFromEnv() {
@@ -1 +1 @@
1
- {"version":3,"file":"deep-wall.js","sourceRoot":"","sources":["../src/deep-wall.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Deep Correctness Wall — stub default, plus evidence-gated runner injection (Wave 4-C3b).\n *\n * `completed` is NEVER emitted unless a caller injects a `runner`, sets\n * `allowCompletion`, AND the runner returns structured evidence. Without all\n * three, the result is downgraded to `unavailable`. This is a candidate-patch-leak\n * guard: deep completion must be evidence-backed, never asserted.\n */\n\nimport { BATCH1_NO_DOCKER_RUNNER } from \"./b2c-mapper.ts\";\n\nexport type DeepWallStatus = \"not_requested\" | \"unavailable\" | \"completed\";\n\nexport type DeepWallPhase = \"stub\" | \"docker\";\n\nexport const DEEP_WALL_UNAVAILABLE = \"DEEP_WALL_UNAVAILABLE\" as const;\n\n/** Policy flag when deep wall would report completed without a wired runner (Wave 4 gate). */\nexport const DEEP_RUNNER_NOT_WIRED = \"DEEP_RUNNER_NOT_WIRED\" as const;\n\n/** Policy flag when an injected runner returned `completed` without valid evidence (downgraded). */\nexport const DEEP_RUNNER_EVIDENCE_MISSING = \"DEEP_RUNNER_EVIDENCE_MISSING\" as const;\n\n/** Policy flag when an injected runner threw (caught, treated as unavailable). */\nexport const DEEP_RUNNER_ERROR = \"DEEP_RUNNER_ERROR\" as const;\n\n/** Structured evidence a runner MUST attach to a `completed` result. */\nexport interface DeepWallRunnerEvidence {\n\t/** Content digest of what was checked (e.g. sha256 of replayed patch + base). */\n\tdigest: string;\n\t/** The exact command/provenance the runner executed. */\n\tcommand: string;\n\t/** Runner exit code; `completed` requires `0` by runner contract. */\n\texitCode: number;\n}\n\nexport interface DeepWallRunnerResult {\n\tstatus: \"completed\" | \"unavailable\";\n\tevidence?: DeepWallRunnerEvidence;\n\tmessage: string;\n}\n\nexport type DeepWallRunnerFn = (params: RunDeepWallStubParams) => Promise<DeepWallRunnerResult>;\n\nexport interface RunDeepWallStubParams {\n\tkind: string;\n\trunIds?: string[];\n\tpacketId?: string;\n\t/** Wave 3: `docker` records intent; runner still unavailable until hermetic exec ships. */\n\tphase?: DeepWallPhase;\n\t/** Wave 4-C3b: injected hermetic runner. Completion is gated by `allowCompletion` + evidence. */\n\trunner?: DeepWallRunnerFn;\n\t/** Must be `true` for a runner to report `completed`; default `false` (stub path). */\n\tallowCompletion?: boolean;\n}\n\nexport interface DeepWallStubResult {\n\tstatus: Extract<DeepWallStatus, \"unavailable\">;\n\tlimits: readonly [typeof BATCH1_NO_DOCKER_RUNNER];\n\tmessage: string;\n}\n\nexport interface DeepWallResult {\n\tstatus: DeepWallStatus;\n\tmessage: string;\n\tevidence?: DeepWallRunnerEvidence;\n\tlimits?: readonly string[];\n\t/** Additional policy flags surfaced by the runner path (e.g. evidence-missing, runner-error). */\n\trunnerFlags?: readonly string[];\n}\n\nconst DEFAULT_DEEP_WALL_MESSAGE =\n\t\"Deep correctness check is not available in this environment (no docker runner). Use preview fast wall or run checks locally.\";\n\nconst DOCKER_PHASE_MESSAGE =\n\t\"Deep wall docker phase requested but hermetic runner is not wired yet; fast wall and local CI remain authoritative.\";\n\nfunction hasValidEvidence(e: unknown): e is DeepWallRunnerEvidence {\n\tif (typeof e !== \"object\" || e === null) return false;\n\tconst v = e as DeepWallRunnerEvidence;\n\treturn (\n\t\ttypeof v.digest === \"string\" &&\n\t\tv.digest.length > 0 &&\n\t\ttypeof v.command === \"string\" &&\n\t\tv.command.length > 0 &&\n\t\ttypeof v.exitCode === \"number\" &&\n\t\tNumber.isFinite(v.exitCode)\n\t);\n}\n\n/** Resolve deep-wall phase from env `OMK_WALL_DEEP_PHASE` (stub | docker). */\nexport function resolveDeepWallPhaseFromEnv(): DeepWallPhase {\n\tconst raw = process.env.OMK_WALL_DEEP_PHASE?.trim().toLowerCase();\n\tif (raw === \"docker\") return \"docker\";\n\treturn \"stub\";\n}\n\n/**\n * Hermetic deep runner is not shipped by default; `completed` is only reachable\n * via an injected runner through {@link runDeepWall}, and even then requires evidence.\n */\nexport function isDeepRunnerCompletionAllowed(): boolean {\n\treturn false;\n}\n\n/**\n * Stub deep wall: always reports unavailable with batch-1 limit code (no docker exec).\n */\nexport function runDeepWallStub(params: RunDeepWallStubParams): DeepWallStubResult {\n\tconst phase = params.phase ?? resolveDeepWallPhaseFromEnv();\n\tconst message = phase === \"docker\" ? DOCKER_PHASE_MESSAGE : DEFAULT_DEEP_WALL_MESSAGE;\n\treturn {\n\t\tstatus: \"unavailable\",\n\t\tlimits: [BATCH1_NO_DOCKER_RUNNER],\n\t\tmessage,\n\t};\n}\n\n/**\n * Evidence-gated deep wall entry point.\n *\n * - No runner, or `allowCompletion !== true` → stub unavailable path.\n * - Runner present + `allowCompletion` → runner is called in a try/catch.\n * - `completed` + valid evidence → `completed` (evidence attached).\n * - `completed` without valid evidence → downgraded to `unavailable`\n * with `DEEP_RUNNER_EVIDENCE_MISSING` (candidate-patch-leak guard).\n * - runner throws → `unavailable` with `DEEP_RUNNER_ERROR`.\n */\nexport async function runDeepWall(params: RunDeepWallStubParams): Promise<DeepWallResult> {\n\tif (params.runner !== undefined && params.allowCompletion === true) {\n\t\ttry {\n\t\t\tconst result = await params.runner(params);\n\t\t\tif (result.status === \"completed\") {\n\t\t\t\tif (hasValidEvidence(result.evidence)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\t\tevidence: result.evidence,\n\t\t\t\t\t\tmessage: result.message,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tstatus: \"unavailable\",\n\t\t\t\t\tmessage: \"Deep runner reported completed without valid evidence; downgraded to unavailable.\",\n\t\t\t\t\trunnerFlags: [DEEP_RUNNER_EVIDENCE_MISSING],\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn { status: \"unavailable\", message: result.message };\n\t\t} catch (err) {\n\t\t\treturn {\n\t\t\t\tstatus: \"unavailable\",\n\t\t\t\tmessage: `Deep runner threw: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\trunnerFlags: [DEEP_RUNNER_ERROR],\n\t\t\t};\n\t\t}\n\t}\n\tconst stub = runDeepWallStub(params);\n\treturn { status: stub.status, message: stub.message, limits: stub.limits };\n}\n"]}
1
+ {"version":3,"file":"deep-wall.js","sourceRoot":"","sources":["../src/deep-wall.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Deep Correctness Wall — stub default, plus evidence-gated runner injection (Wave 4-C3b).\n *\n * `completed` is NEVER emitted unless a caller injects a `runner`, sets\n * `allowCompletion`, AND the runner returns structured evidence. Without all\n * three, the result is downgraded to `unavailable`. This is a candidate-patch-leak\n * guard: deep completion must be evidence-backed, never asserted.\n */\n\nimport { BATCH1_NO_DOCKER_RUNNER } from \"./b2c-mapper.ts\";\n\nexport type DeepWallStatus = \"not_requested\" | \"unavailable\" | \"completed\";\n\nexport type DeepWallPhase = \"stub\" | \"docker\";\n\nexport const DEEP_WALL_UNAVAILABLE = \"DEEP_WALL_UNAVAILABLE\" as const;\n\n/** Policy flag when deep wall would report completed without a wired runner (Wave 4 gate). */\nexport const DEEP_RUNNER_NOT_WIRED = \"DEEP_RUNNER_NOT_WIRED\" as const;\n\n/** Policy flag when an injected runner returned `completed` without valid evidence (downgraded). */\nexport const DEEP_RUNNER_EVIDENCE_MISSING = \"DEEP_RUNNER_EVIDENCE_MISSING\" as const;\n\n/** Policy flag when an injected runner threw (caught, treated as unavailable). */\nexport const DEEP_RUNNER_ERROR = \"DEEP_RUNNER_ERROR\" as const;\n\n/** Structured evidence a runner MUST attach to a `completed` result. */\nexport interface DeepWallRunnerEvidence {\n\t/** Content digest of what was checked (e.g. sha256 of replayed patch + base). */\n\tdigest: string;\n\t/** The exact command/provenance the runner executed. */\n\tcommand: string;\n\t/** Runner exit code; `completed` requires `0` by runner contract. */\n\texitCode: number;\n}\n\nexport interface DeepWallRunnerResult {\n\tstatus: \"completed\" | \"unavailable\";\n\tevidence?: DeepWallRunnerEvidence;\n\tmessage: string;\n}\n\nexport type DeepWallRunnerFn = (params: RunDeepWallStubParams) => Promise<DeepWallRunnerResult>;\n\nexport interface RunDeepWallStubParams {\n\tkind: string;\n\trunIds?: string[];\n\tpacketId?: string;\n\t/** Wave 3: `docker` records intent; runner still unavailable until hermetic exec ships. */\n\tphase?: DeepWallPhase;\n\t/** Wave 4-C3b: injected hermetic runner. Completion is gated by `allowCompletion` + evidence. */\n\trunner?: DeepWallRunnerFn;\n\t/** Must be `true` for a runner to report `completed`; default `false` (stub path). */\n\tallowCompletion?: boolean;\n}\n\nexport interface DeepWallStubResult {\n\tstatus: Extract<DeepWallStatus, \"unavailable\">;\n\tlimits: readonly [typeof BATCH1_NO_DOCKER_RUNNER];\n\tmessage: string;\n}\n\nexport interface DeepWallResult {\n\tstatus: DeepWallStatus;\n\tmessage: string;\n\tevidence?: DeepWallRunnerEvidence;\n\tlimits?: readonly string[];\n\t/** Additional policy flags surfaced by the runner path (e.g. evidence-missing, runner-error). */\n\trunnerFlags?: readonly string[];\n}\n\nconst DEFAULT_DEEP_WALL_MESSAGE =\n\t\"Deep correctness check is not available in this environment (no docker runner). Use preview fast wall or run checks locally.\";\n\nconst DOCKER_PHASE_MESSAGE =\n\t\"Deep wall docker phase requested but hermetic runner is not wired yet; fast wall and local CI remain authoritative.\";\n\nfunction hasValidEvidence(e: unknown): e is DeepWallRunnerEvidence {\n\tif (typeof e !== \"object\" || e === null) return false;\n\treturn (\n\t\t\"digest\" in e &&\n\t\ttypeof e.digest === \"string\" &&\n\t\te.digest.trim().length > 0 &&\n\t\t\"command\" in e &&\n\t\ttypeof e.command === \"string\" &&\n\t\te.command.trim().length > 0 &&\n\t\t\"exitCode\" in e &&\n\t\te.exitCode === 0\n\t);\n}\n\n/** Resolve deep-wall phase from env `OMK_WALL_DEEP_PHASE` (stub | docker). */\nexport function resolveDeepWallPhaseFromEnv(): DeepWallPhase {\n\tconst raw = process.env.OMK_WALL_DEEP_PHASE?.trim().toLowerCase();\n\tif (raw === \"docker\") return \"docker\";\n\treturn \"stub\";\n}\n\n/**\n * Hermetic deep runner is not shipped by default; `completed` is only reachable\n * via an injected runner through {@link runDeepWall}, and even then requires evidence.\n */\nexport function isDeepRunnerCompletionAllowed(): boolean {\n\treturn false;\n}\n\n/**\n * Stub deep wall: always reports unavailable with batch-1 limit code (no docker exec).\n */\nexport function runDeepWallStub(params: RunDeepWallStubParams): DeepWallStubResult {\n\tconst phase = params.phase ?? resolveDeepWallPhaseFromEnv();\n\tconst message = phase === \"docker\" ? DOCKER_PHASE_MESSAGE : DEFAULT_DEEP_WALL_MESSAGE;\n\treturn {\n\t\tstatus: \"unavailable\",\n\t\tlimits: [BATCH1_NO_DOCKER_RUNNER],\n\t\tmessage,\n\t};\n}\n\n/**\n * Evidence-gated deep wall entry point.\n *\n * - No runner, or `allowCompletion !== true` → stub unavailable path.\n * - Runner present + `allowCompletion` → runner is called in a try/catch.\n * - `completed` + valid evidence → `completed` (evidence attached).\n * - `completed` without valid evidence → downgraded to `unavailable`\n * with `DEEP_RUNNER_EVIDENCE_MISSING` (candidate-patch-leak guard).\n * - runner throws → `unavailable` with `DEEP_RUNNER_ERROR`.\n */\nexport async function runDeepWall(params: RunDeepWallStubParams): Promise<DeepWallResult> {\n\tif (params.runner !== undefined && params.allowCompletion === true) {\n\t\ttry {\n\t\t\tconst result = await params.runner(params);\n\t\t\tif (result.status === \"completed\") {\n\t\t\t\tif (hasValidEvidence(result.evidence)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\t\tevidence: result.evidence,\n\t\t\t\t\t\tmessage: result.message,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tstatus: \"unavailable\",\n\t\t\t\t\tmessage: \"Deep runner reported completed without valid evidence; downgraded to unavailable.\",\n\t\t\t\t\trunnerFlags: [DEEP_RUNNER_EVIDENCE_MISSING],\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn { status: \"unavailable\", message: result.message };\n\t\t} catch (err) {\n\t\t\treturn {\n\t\t\t\tstatus: \"unavailable\",\n\t\t\t\tmessage: `Deep runner threw: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\trunnerFlags: [DEEP_RUNNER_ERROR],\n\t\t\t};\n\t\t}\n\t}\n\tconst stub = runDeepWallStub(params);\n\treturn { status: stub.status, message: stub.message, limits: stub.limits };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate-correctness-wall.d.ts","sourceRoot":"","sources":["../src/evaluate-correctness-wall.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAA0B,KAAK,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAE/F,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAGN,KAAK,gBAAgB,EAIrB,MAAM,gBAAgB,CAAC;AAOxB,MAAM,WAAW,6BAA6B;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wFAAwF;IACxF,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,QAAQ,CAAC,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAAA;KAAE,CAAC;IACxD,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sGAAsG;IACtG,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,qDAAqD;IACrD,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,2EAA2E;IAC3E,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,6BAA6B;IAC7C,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,mBAAmB,CAAC;CAC7B;AAED,wBAAsB,uBAAuB,CAC5C,MAAM,EAAE,6BAA6B,GACnC,OAAO,CAAC,6BAA6B,CAAC,CA4HxC","sourcesContent":["/**\n * B2C Correctness Wall orchestration — fast wall + optional OA adjudication.\n */\n\nimport type { AdaptOrchClient } from \"./adaptorch-client.ts\";\nimport { type AdjudicationRequest, adjudicate } from \"./adjudicator.ts\";\nimport { createVerifierRegistry, type VerifierRegistryEntry } from \"./adjudicator-registry.ts\";\nimport { mapToB2C } from \"./b2c-mapper.ts\";\nimport type { VerdictCard, VerificationReceipt } from \"./b2c-verdict.ts\";\nimport {\n\tDEEP_RUNNER_NOT_WIRED,\n\tDEEP_WALL_UNAVAILABLE,\n\ttype DeepWallRunnerFn,\n\tisDeepRunnerCompletionAllowed,\n\tresolveDeepWallPhaseFromEnv,\n\trunDeepWall,\n} from \"./deep-wall.ts\";\nimport { runFastWall } from \"./policy-wall.ts\";\nimport { signWallReceipt } from \"./receipt-signature.ts\";\nimport { deriveRepairHints } from \"./repair-loop.ts\";\nimport { buildVerificationDigest } from \"./signed-receipt.ts\";\nimport { CORRECTNESS_WALL_VERSION } from \"./wall-meta.ts\";\n\nexport interface EvaluateCorrectnessWallParams {\n\tkind: string;\n\trunIds?: string[];\n\tdispatchRecordId?: string;\n\tapprovedWriteScope?: string[];\n\tpreviewOnly?: boolean;\n\tdiffText?: string;\n\tpacketId?: string;\n\t/** When set with non-empty runIds and previewOnly false, OA adjudication is invoked. */\n\tclient?: AdaptOrchClient;\n\tregistry?: { get(kind: string): VerifierRegistryEntry };\n\t/** When true, merge deep-wall result into limits / policy flags. */\n\tdeepWall?: boolean;\n\t/** Wave 4-C3b: injected hermetic runner. Completion gated by `deepWallAllowCompletion` + evidence. */\n\tdeepWallRunner?: DeepWallRunnerFn;\n\t/** Must be true for a runner to emit `completed`. */\n\tdeepWallAllowCompletion?: boolean;\n\t/** When set, attach HMAC signed receipt attestation (never log secret). */\n\treceiptSigningSecret?: string;\n}\n\nexport interface EvaluateCorrectnessWallResult {\n\tverdictCard: VerdictCard;\n\treceipt: VerificationReceipt;\n}\n\nexport async function evaluateCorrectnessWall(\n\tparams: EvaluateCorrectnessWallParams,\n): Promise<EvaluateCorrectnessWallResult> {\n\tconst runIds = params.runIds ?? [];\n\tconst previewOnly = params.previewOnly === true;\n\tconst registry = params.registry ?? createVerifierRegistry([]);\n\n\tconst wall = runFastWall({\n\t\tdiffText: params.diffText,\n\t\tapprovedWriteScope: params.approvedWriteScope,\n\t\trunIds,\n\t\tpreviewOnly,\n\t});\n\n\tlet adjudication: Awaited<ReturnType<typeof adjudicate>> | undefined;\n\tconst useOa = runIds.length > 0 && !previewOnly && params.client !== undefined;\n\tif (useOa && params.client !== undefined) {\n\t\tconst request: AdjudicationRequest = {\n\t\t\tdispatch_record_id: params.dispatchRecordId ?? \"b2c-wall\",\n\t\t\tkind: params.kind,\n\t\t\trun_ids: runIds,\n\t\t};\n\t\tadjudication = await adjudicate(request, params.client, registry);\n\t}\n\n\tlet policyFlags = wall.flags;\n\tif (adjudication !== undefined) {\n\t\tpolicyFlags = wall.flags.filter((f) => f !== \"EVIDENCE_DAG_INCOMPLETE\");\n\t}\n\n\tconst provisional = mapToB2C({\n\t\tkind: params.kind,\n\t\tpacketId: params.packetId,\n\t\tdispatchRecordId: params.dispatchRecordId,\n\t\trunIds,\n\t\tpreviewOnly,\n\t\tpolicyFlags,\n\t\tdiffPaths: wall.diffPaths,\n\t\tadjudication,\n\t});\n\n\tconst repairHints = deriveRepairHints({\n\t\tuserVerdict: provisional.verdictCard.verdict,\n\t\tpolicyFlags,\n\t\tadjudicationReasonCode: adjudication?.reason_code,\n\t\tpreviewOnly,\n\t\tdiffPaths: wall.diffPaths,\n\t});\n\n\tconst mapped = mapToB2C({\n\t\tkind: params.kind,\n\t\tpacketId: params.packetId,\n\t\tdispatchRecordId: params.dispatchRecordId,\n\t\trunIds,\n\t\tpreviewOnly,\n\t\tpolicyFlags,\n\t\tdiffPaths: wall.diffPaths,\n\t\tadjudication,\n\t\trepairHints,\n\t});\n\n\tconst verificationDigest = buildVerificationDigest({\n\t\tpatchText: params.diffText,\n\t\tevidenceChunks: runIds.length > 0 ? runIds : undefined,\n\t\twallVersion: CORRECTNESS_WALL_VERSION,\n\t});\n\n\tlet verdictCard = mapped.verdictCard;\n\tlet receipt: VerificationReceipt = {\n\t\t...mapped.receipt,\n\t\tverificationDigest,\n\t\twallVersion: CORRECTNESS_WALL_VERSION,\n\t};\n\n\tconst signingSecret = params.receiptSigningSecret?.trim();\n\tif (signingSecret !== undefined && signingSecret.length > 0 && verificationDigest !== undefined) {\n\t\treceipt = {\n\t\t\t...receipt,\n\t\t\tsignedReceipt: signWallReceipt({\n\t\t\t\tdigest: verificationDigest,\n\t\t\t\twallVersion: CORRECTNESS_WALL_VERSION,\n\t\t\t\tsecret: signingSecret,\n\t\t\t}),\n\t\t};\n\t}\n\n\tif (params.deepWall === true) {\n\t\tconst deep = await runDeepWall({\n\t\t\tkind: params.kind,\n\t\t\trunIds,\n\t\t\tpacketId: params.packetId,\n\t\t\tphase: resolveDeepWallPhaseFromEnv(),\n\t\t\trunner: params.deepWallRunner,\n\t\t\tallowCompletion: params.deepWallAllowCompletion,\n\t\t});\n\t\tconst policyFlags = [...receipt.policyFlags];\n\t\tif (deep.status !== \"completed\") {\n\t\t\tif (!policyFlags.includes(DEEP_WALL_UNAVAILABLE)) {\n\t\t\t\tpolicyFlags.push(DEEP_WALL_UNAVAILABLE);\n\t\t\t}\n\t\t\tif (!isDeepRunnerCompletionAllowed() && !policyFlags.includes(DEEP_RUNNER_NOT_WIRED)) {\n\t\t\t\tpolicyFlags.push(DEEP_RUNNER_NOT_WIRED);\n\t\t\t}\n\t\t}\n\t\tfor (const f of deep.runnerFlags ?? []) {\n\t\t\tif (!policyFlags.includes(f as never)) policyFlags.push(f as never);\n\t\t}\n\t\tconst limitsCode = deep.limits?.[0] ?? verdictCard.limits.code;\n\t\tverdictCard = {\n\t\t\t...verdictCard,\n\t\t\tlimits: {\n\t\t\t\t...verdictCard.limits,\n\t\t\t\trequiresHumanReview: deep.status !== \"completed\",\n\t\t\t\tcode: limitsCode ?? verdictCard.limits.code,\n\t\t\t},\n\t\t\tblocked_reasons: [...new Set([...verdictCard.blocked_reasons, deep.message])],\n\t\t};\n\t\treceipt = {\n\t\t\t...receipt,\n\t\t\tpolicyFlags,\n\t\t\tdeepWallStatus: deep.status,\n\t\t\tdeepWallEvidence: deep.evidence,\n\t\t};\n\t}\n\n\treturn { verdictCard, receipt };\n}\n"]}
1
+ {"version":3,"file":"evaluate-correctness-wall.d.ts","sourceRoot":"","sources":["../src/evaluate-correctness-wall.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAA0B,KAAK,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAE/F,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAGN,KAAK,gBAAgB,EAIrB,MAAM,gBAAgB,CAAC;AAOxB,MAAM,WAAW,6BAA6B;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wFAAwF;IACxF,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,QAAQ,CAAC,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAAA;KAAE,CAAC;IACxD,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sGAAsG;IACtG,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,qDAAqD;IACrD,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,2EAA2E;IAC3E,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,6BAA6B;IAC7C,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,mBAAmB,CAAC;CAC7B;AAED,wBAAsB,uBAAuB,CAC5C,MAAM,EAAE,6BAA6B,GACnC,OAAO,CAAC,6BAA6B,CAAC,CA6HxC","sourcesContent":["/**\n * B2C Correctness Wall orchestration — fast wall + optional OA adjudication.\n */\n\nimport type { AdaptOrchClient } from \"./adaptorch-client.ts\";\nimport { type AdjudicationRequest, adjudicate } from \"./adjudicator.ts\";\nimport { createVerifierRegistry, type VerifierRegistryEntry } from \"./adjudicator-registry.ts\";\nimport { mapToB2C } from \"./b2c-mapper.ts\";\nimport type { VerdictCard, VerificationReceipt } from \"./b2c-verdict.ts\";\nimport {\n\tDEEP_RUNNER_NOT_WIRED,\n\tDEEP_WALL_UNAVAILABLE,\n\ttype DeepWallRunnerFn,\n\tisDeepRunnerCompletionAllowed,\n\tresolveDeepWallPhaseFromEnv,\n\trunDeepWall,\n} from \"./deep-wall.ts\";\nimport { runFastWall } from \"./policy-wall.ts\";\nimport { signWallReceipt } from \"./receipt-signature.ts\";\nimport { deriveRepairHints } from \"./repair-loop.ts\";\nimport { buildVerificationDigest } from \"./signed-receipt.ts\";\nimport { CORRECTNESS_WALL_VERSION } from \"./wall-meta.ts\";\n\nexport interface EvaluateCorrectnessWallParams {\n\tkind: string;\n\trunIds?: string[];\n\tdispatchRecordId?: string;\n\tapprovedWriteScope?: string[];\n\tpreviewOnly?: boolean;\n\tdiffText?: string;\n\tpacketId?: string;\n\t/** When set with non-empty runIds and previewOnly false, OA adjudication is invoked. */\n\tclient?: AdaptOrchClient;\n\tregistry?: { get(kind: string): VerifierRegistryEntry };\n\t/** When true, merge deep-wall result into limits / policy flags. */\n\tdeepWall?: boolean;\n\t/** Wave 4-C3b: injected hermetic runner. Completion gated by `deepWallAllowCompletion` + evidence. */\n\tdeepWallRunner?: DeepWallRunnerFn;\n\t/** Must be true for a runner to emit `completed`. */\n\tdeepWallAllowCompletion?: boolean;\n\t/** When set, attach HMAC signed receipt attestation (never log secret). */\n\treceiptSigningSecret?: string;\n}\n\nexport interface EvaluateCorrectnessWallResult {\n\tverdictCard: VerdictCard;\n\treceipt: VerificationReceipt;\n}\n\nexport async function evaluateCorrectnessWall(\n\tparams: EvaluateCorrectnessWallParams,\n): Promise<EvaluateCorrectnessWallResult> {\n\tconst runIds = params.runIds ?? [];\n\tconst previewOnly = params.previewOnly === true;\n\tconst registry = params.registry ?? createVerifierRegistry([]);\n\n\tconst wall = runFastWall({\n\t\tdiffText: params.diffText,\n\t\tapprovedWriteScope: params.approvedWriteScope,\n\t\trunIds,\n\t\tpreviewOnly,\n\t});\n\n\tlet adjudication: Awaited<ReturnType<typeof adjudicate>> | undefined;\n\tconst useOa = runIds.length > 0 && !previewOnly && params.client !== undefined;\n\tif (useOa && params.client !== undefined) {\n\t\tconst request: AdjudicationRequest = {\n\t\t\tdispatch_record_id: params.dispatchRecordId ?? \"b2c-wall\",\n\t\t\tkind: params.kind,\n\t\t\trun_ids: runIds,\n\t\t};\n\t\tadjudication = await adjudicate(request, params.client, registry);\n\t}\n\n\tlet policyFlags = wall.flags;\n\tif (adjudication !== undefined) {\n\t\tpolicyFlags = wall.flags.filter((f) => f !== \"EVIDENCE_DAG_INCOMPLETE\");\n\t}\n\n\tconst provisional = mapToB2C({\n\t\tkind: params.kind,\n\t\tpacketId: params.packetId,\n\t\tdispatchRecordId: params.dispatchRecordId,\n\t\trunIds,\n\t\tpreviewOnly,\n\t\tpolicyFlags,\n\t\tdiffPaths: wall.diffPaths,\n\t\tadjudication,\n\t});\n\n\tconst repairHints = deriveRepairHints({\n\t\tuserVerdict: provisional.verdictCard.verdict,\n\t\tpolicyFlags,\n\t\tadjudicationReasonCode: adjudication?.reason_code,\n\t\tpreviewOnly,\n\t\tdiffPaths: wall.diffPaths,\n\t});\n\n\tconst mapped = mapToB2C({\n\t\tkind: params.kind,\n\t\tpacketId: params.packetId,\n\t\tdispatchRecordId: params.dispatchRecordId,\n\t\trunIds,\n\t\tpreviewOnly,\n\t\tpolicyFlags,\n\t\tdiffPaths: wall.diffPaths,\n\t\tadjudication,\n\t\trepairHints,\n\t});\n\n\tconst verificationDigest = buildVerificationDigest({\n\t\tpatchText: params.diffText,\n\t\tevidenceChunks: runIds.length > 0 ? runIds : undefined,\n\t\twallVersion: CORRECTNESS_WALL_VERSION,\n\t});\n\n\tlet verdictCard = mapped.verdictCard;\n\tlet receipt: VerificationReceipt = {\n\t\t...mapped.receipt,\n\t\tverificationDigest,\n\t\twallVersion: CORRECTNESS_WALL_VERSION,\n\t};\n\n\tconst signingSecret = params.receiptSigningSecret?.trim();\n\tif (signingSecret !== undefined && signingSecret.length > 0 && verificationDigest !== undefined) {\n\t\treceipt = {\n\t\t\t...receipt,\n\t\t\tsignedReceipt: signWallReceipt({\n\t\t\t\tdigest: verificationDigest,\n\t\t\t\twallVersion: CORRECTNESS_WALL_VERSION,\n\t\t\t\tsecret: signingSecret,\n\t\t\t}),\n\t\t};\n\t}\n\n\tif (params.deepWall === true) {\n\t\tconst deep = await runDeepWall({\n\t\t\tkind: params.kind,\n\t\t\trunIds,\n\t\t\tpacketId: params.packetId,\n\t\t\tphase: resolveDeepWallPhaseFromEnv(),\n\t\t\trunner: params.deepWallRunner,\n\t\t\tallowCompletion: params.deepWallAllowCompletion,\n\t\t});\n\t\tconst policyFlags = [...receipt.policyFlags];\n\t\tif (deep.status !== \"completed\") {\n\t\t\tif (!policyFlags.includes(DEEP_WALL_UNAVAILABLE)) {\n\t\t\t\tpolicyFlags.push(DEEP_WALL_UNAVAILABLE);\n\t\t\t}\n\t\t\tif (!isDeepRunnerCompletionAllowed() && !policyFlags.includes(DEEP_RUNNER_NOT_WIRED)) {\n\t\t\t\tpolicyFlags.push(DEEP_RUNNER_NOT_WIRED);\n\t\t\t}\n\t\t}\n\t\tfor (const f of deep.runnerFlags ?? []) {\n\t\t\tif (!policyFlags.includes(f as never)) policyFlags.push(f as never);\n\t\t}\n\t\tconst limitsCode = deep.limits?.[0] ?? verdictCard.limits.code;\n\t\tverdictCard = {\n\t\t\t...verdictCard,\n\t\t\tlimits: {\n\t\t\t\t...verdictCard.limits,\n\t\t\t\trequiresHumanReview: verdictCard.limits.requiresHumanReview || deep.status !== \"completed\",\n\t\t\t\tcode: limitsCode ?? verdictCard.limits.code,\n\t\t\t},\n\t\t\tblocked_reasons: [...new Set([...verdictCard.blocked_reasons, deep.message])],\n\t\t};\n\t\treceipt = {\n\t\t\t...receipt,\n\t\t\tpolicyFlags,\n\t\t\tshouldSubmit: receipt.shouldSubmit && deep.status === \"completed\",\n\t\t\tdeepWallStatus: deep.status,\n\t\t\tdeepWallEvidence: deep.evidence,\n\t\t};\n\t}\n\n\treturn { verdictCard, receipt };\n}\n"]}
@@ -111,7 +111,7 @@ export async function evaluateCorrectnessWall(params) {
111
111
  ...verdictCard,
112
112
  limits: {
113
113
  ...verdictCard.limits,
114
- requiresHumanReview: deep.status !== "completed",
114
+ requiresHumanReview: verdictCard.limits.requiresHumanReview || deep.status !== "completed",
115
115
  code: limitsCode ?? verdictCard.limits.code,
116
116
  },
117
117
  blocked_reasons: [...new Set([...verdictCard.blocked_reasons, deep.message])],
@@ -119,6 +119,7 @@ export async function evaluateCorrectnessWall(params) {
119
119
  receipt = {
120
120
  ...receipt,
121
121
  policyFlags,
122
+ shouldSubmit: receipt.shouldSubmit && deep.status === "completed",
122
123
  deepWallStatus: deep.status,
123
124
  deepWallEvidence: deep.evidence,
124
125
  };
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate-correctness-wall.js","sourceRoot":"","sources":["../src/evaluate-correctness-wall.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * B2C Correctness Wall orchestration — fast wall + optional OA adjudication.\n */\n\nimport type { AdaptOrchClient } from \"./adaptorch-client.ts\";\nimport { type AdjudicationRequest, adjudicate } from \"./adjudicator.ts\";\nimport { createVerifierRegistry, type VerifierRegistryEntry } from \"./adjudicator-registry.ts\";\nimport { mapToB2C } from \"./b2c-mapper.ts\";\nimport type { VerdictCard, VerificationReceipt } from \"./b2c-verdict.ts\";\nimport {\n\tDEEP_RUNNER_NOT_WIRED,\n\tDEEP_WALL_UNAVAILABLE,\n\ttype DeepWallRunnerFn,\n\tisDeepRunnerCompletionAllowed,\n\tresolveDeepWallPhaseFromEnv,\n\trunDeepWall,\n} from \"./deep-wall.ts\";\nimport { runFastWall } from \"./policy-wall.ts\";\nimport { signWallReceipt } from \"./receipt-signature.ts\";\nimport { deriveRepairHints } from \"./repair-loop.ts\";\nimport { buildVerificationDigest } from \"./signed-receipt.ts\";\nimport { CORRECTNESS_WALL_VERSION } from \"./wall-meta.ts\";\n\nexport interface EvaluateCorrectnessWallParams {\n\tkind: string;\n\trunIds?: string[];\n\tdispatchRecordId?: string;\n\tapprovedWriteScope?: string[];\n\tpreviewOnly?: boolean;\n\tdiffText?: string;\n\tpacketId?: string;\n\t/** When set with non-empty runIds and previewOnly false, OA adjudication is invoked. */\n\tclient?: AdaptOrchClient;\n\tregistry?: { get(kind: string): VerifierRegistryEntry };\n\t/** When true, merge deep-wall result into limits / policy flags. */\n\tdeepWall?: boolean;\n\t/** Wave 4-C3b: injected hermetic runner. Completion gated by `deepWallAllowCompletion` + evidence. */\n\tdeepWallRunner?: DeepWallRunnerFn;\n\t/** Must be true for a runner to emit `completed`. */\n\tdeepWallAllowCompletion?: boolean;\n\t/** When set, attach HMAC signed receipt attestation (never log secret). */\n\treceiptSigningSecret?: string;\n}\n\nexport interface EvaluateCorrectnessWallResult {\n\tverdictCard: VerdictCard;\n\treceipt: VerificationReceipt;\n}\n\nexport async function evaluateCorrectnessWall(\n\tparams: EvaluateCorrectnessWallParams,\n): Promise<EvaluateCorrectnessWallResult> {\n\tconst runIds = params.runIds ?? [];\n\tconst previewOnly = params.previewOnly === true;\n\tconst registry = params.registry ?? createVerifierRegistry([]);\n\n\tconst wall = runFastWall({\n\t\tdiffText: params.diffText,\n\t\tapprovedWriteScope: params.approvedWriteScope,\n\t\trunIds,\n\t\tpreviewOnly,\n\t});\n\n\tlet adjudication: Awaited<ReturnType<typeof adjudicate>> | undefined;\n\tconst useOa = runIds.length > 0 && !previewOnly && params.client !== undefined;\n\tif (useOa && params.client !== undefined) {\n\t\tconst request: AdjudicationRequest = {\n\t\t\tdispatch_record_id: params.dispatchRecordId ?? \"b2c-wall\",\n\t\t\tkind: params.kind,\n\t\t\trun_ids: runIds,\n\t\t};\n\t\tadjudication = await adjudicate(request, params.client, registry);\n\t}\n\n\tlet policyFlags = wall.flags;\n\tif (adjudication !== undefined) {\n\t\tpolicyFlags = wall.flags.filter((f) => f !== \"EVIDENCE_DAG_INCOMPLETE\");\n\t}\n\n\tconst provisional = mapToB2C({\n\t\tkind: params.kind,\n\t\tpacketId: params.packetId,\n\t\tdispatchRecordId: params.dispatchRecordId,\n\t\trunIds,\n\t\tpreviewOnly,\n\t\tpolicyFlags,\n\t\tdiffPaths: wall.diffPaths,\n\t\tadjudication,\n\t});\n\n\tconst repairHints = deriveRepairHints({\n\t\tuserVerdict: provisional.verdictCard.verdict,\n\t\tpolicyFlags,\n\t\tadjudicationReasonCode: adjudication?.reason_code,\n\t\tpreviewOnly,\n\t\tdiffPaths: wall.diffPaths,\n\t});\n\n\tconst mapped = mapToB2C({\n\t\tkind: params.kind,\n\t\tpacketId: params.packetId,\n\t\tdispatchRecordId: params.dispatchRecordId,\n\t\trunIds,\n\t\tpreviewOnly,\n\t\tpolicyFlags,\n\t\tdiffPaths: wall.diffPaths,\n\t\tadjudication,\n\t\trepairHints,\n\t});\n\n\tconst verificationDigest = buildVerificationDigest({\n\t\tpatchText: params.diffText,\n\t\tevidenceChunks: runIds.length > 0 ? runIds : undefined,\n\t\twallVersion: CORRECTNESS_WALL_VERSION,\n\t});\n\n\tlet verdictCard = mapped.verdictCard;\n\tlet receipt: VerificationReceipt = {\n\t\t...mapped.receipt,\n\t\tverificationDigest,\n\t\twallVersion: CORRECTNESS_WALL_VERSION,\n\t};\n\n\tconst signingSecret = params.receiptSigningSecret?.trim();\n\tif (signingSecret !== undefined && signingSecret.length > 0 && verificationDigest !== undefined) {\n\t\treceipt = {\n\t\t\t...receipt,\n\t\t\tsignedReceipt: signWallReceipt({\n\t\t\t\tdigest: verificationDigest,\n\t\t\t\twallVersion: CORRECTNESS_WALL_VERSION,\n\t\t\t\tsecret: signingSecret,\n\t\t\t}),\n\t\t};\n\t}\n\n\tif (params.deepWall === true) {\n\t\tconst deep = await runDeepWall({\n\t\t\tkind: params.kind,\n\t\t\trunIds,\n\t\t\tpacketId: params.packetId,\n\t\t\tphase: resolveDeepWallPhaseFromEnv(),\n\t\t\trunner: params.deepWallRunner,\n\t\t\tallowCompletion: params.deepWallAllowCompletion,\n\t\t});\n\t\tconst policyFlags = [...receipt.policyFlags];\n\t\tif (deep.status !== \"completed\") {\n\t\t\tif (!policyFlags.includes(DEEP_WALL_UNAVAILABLE)) {\n\t\t\t\tpolicyFlags.push(DEEP_WALL_UNAVAILABLE);\n\t\t\t}\n\t\t\tif (!isDeepRunnerCompletionAllowed() && !policyFlags.includes(DEEP_RUNNER_NOT_WIRED)) {\n\t\t\t\tpolicyFlags.push(DEEP_RUNNER_NOT_WIRED);\n\t\t\t}\n\t\t}\n\t\tfor (const f of deep.runnerFlags ?? []) {\n\t\t\tif (!policyFlags.includes(f as never)) policyFlags.push(f as never);\n\t\t}\n\t\tconst limitsCode = deep.limits?.[0] ?? verdictCard.limits.code;\n\t\tverdictCard = {\n\t\t\t...verdictCard,\n\t\t\tlimits: {\n\t\t\t\t...verdictCard.limits,\n\t\t\t\trequiresHumanReview: deep.status !== \"completed\",\n\t\t\t\tcode: limitsCode ?? verdictCard.limits.code,\n\t\t\t},\n\t\t\tblocked_reasons: [...new Set([...verdictCard.blocked_reasons, deep.message])],\n\t\t};\n\t\treceipt = {\n\t\t\t...receipt,\n\t\t\tpolicyFlags,\n\t\t\tdeepWallStatus: deep.status,\n\t\t\tdeepWallEvidence: deep.evidence,\n\t\t};\n\t}\n\n\treturn { verdictCard, receipt };\n}\n"]}
1
+ {"version":3,"file":"evaluate-correctness-wall.js","sourceRoot":"","sources":["../src/evaluate-correctness-wall.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * B2C Correctness Wall orchestration — fast wall + optional OA adjudication.\n */\n\nimport type { AdaptOrchClient } from \"./adaptorch-client.ts\";\nimport { type AdjudicationRequest, adjudicate } from \"./adjudicator.ts\";\nimport { createVerifierRegistry, type VerifierRegistryEntry } from \"./adjudicator-registry.ts\";\nimport { mapToB2C } from \"./b2c-mapper.ts\";\nimport type { VerdictCard, VerificationReceipt } from \"./b2c-verdict.ts\";\nimport {\n\tDEEP_RUNNER_NOT_WIRED,\n\tDEEP_WALL_UNAVAILABLE,\n\ttype DeepWallRunnerFn,\n\tisDeepRunnerCompletionAllowed,\n\tresolveDeepWallPhaseFromEnv,\n\trunDeepWall,\n} from \"./deep-wall.ts\";\nimport { runFastWall } from \"./policy-wall.ts\";\nimport { signWallReceipt } from \"./receipt-signature.ts\";\nimport { deriveRepairHints } from \"./repair-loop.ts\";\nimport { buildVerificationDigest } from \"./signed-receipt.ts\";\nimport { CORRECTNESS_WALL_VERSION } from \"./wall-meta.ts\";\n\nexport interface EvaluateCorrectnessWallParams {\n\tkind: string;\n\trunIds?: string[];\n\tdispatchRecordId?: string;\n\tapprovedWriteScope?: string[];\n\tpreviewOnly?: boolean;\n\tdiffText?: string;\n\tpacketId?: string;\n\t/** When set with non-empty runIds and previewOnly false, OA adjudication is invoked. */\n\tclient?: AdaptOrchClient;\n\tregistry?: { get(kind: string): VerifierRegistryEntry };\n\t/** When true, merge deep-wall result into limits / policy flags. */\n\tdeepWall?: boolean;\n\t/** Wave 4-C3b: injected hermetic runner. Completion gated by `deepWallAllowCompletion` + evidence. */\n\tdeepWallRunner?: DeepWallRunnerFn;\n\t/** Must be true for a runner to emit `completed`. */\n\tdeepWallAllowCompletion?: boolean;\n\t/** When set, attach HMAC signed receipt attestation (never log secret). */\n\treceiptSigningSecret?: string;\n}\n\nexport interface EvaluateCorrectnessWallResult {\n\tverdictCard: VerdictCard;\n\treceipt: VerificationReceipt;\n}\n\nexport async function evaluateCorrectnessWall(\n\tparams: EvaluateCorrectnessWallParams,\n): Promise<EvaluateCorrectnessWallResult> {\n\tconst runIds = params.runIds ?? [];\n\tconst previewOnly = params.previewOnly === true;\n\tconst registry = params.registry ?? createVerifierRegistry([]);\n\n\tconst wall = runFastWall({\n\t\tdiffText: params.diffText,\n\t\tapprovedWriteScope: params.approvedWriteScope,\n\t\trunIds,\n\t\tpreviewOnly,\n\t});\n\n\tlet adjudication: Awaited<ReturnType<typeof adjudicate>> | undefined;\n\tconst useOa = runIds.length > 0 && !previewOnly && params.client !== undefined;\n\tif (useOa && params.client !== undefined) {\n\t\tconst request: AdjudicationRequest = {\n\t\t\tdispatch_record_id: params.dispatchRecordId ?? \"b2c-wall\",\n\t\t\tkind: params.kind,\n\t\t\trun_ids: runIds,\n\t\t};\n\t\tadjudication = await adjudicate(request, params.client, registry);\n\t}\n\n\tlet policyFlags = wall.flags;\n\tif (adjudication !== undefined) {\n\t\tpolicyFlags = wall.flags.filter((f) => f !== \"EVIDENCE_DAG_INCOMPLETE\");\n\t}\n\n\tconst provisional = mapToB2C({\n\t\tkind: params.kind,\n\t\tpacketId: params.packetId,\n\t\tdispatchRecordId: params.dispatchRecordId,\n\t\trunIds,\n\t\tpreviewOnly,\n\t\tpolicyFlags,\n\t\tdiffPaths: wall.diffPaths,\n\t\tadjudication,\n\t});\n\n\tconst repairHints = deriveRepairHints({\n\t\tuserVerdict: provisional.verdictCard.verdict,\n\t\tpolicyFlags,\n\t\tadjudicationReasonCode: adjudication?.reason_code,\n\t\tpreviewOnly,\n\t\tdiffPaths: wall.diffPaths,\n\t});\n\n\tconst mapped = mapToB2C({\n\t\tkind: params.kind,\n\t\tpacketId: params.packetId,\n\t\tdispatchRecordId: params.dispatchRecordId,\n\t\trunIds,\n\t\tpreviewOnly,\n\t\tpolicyFlags,\n\t\tdiffPaths: wall.diffPaths,\n\t\tadjudication,\n\t\trepairHints,\n\t});\n\n\tconst verificationDigest = buildVerificationDigest({\n\t\tpatchText: params.diffText,\n\t\tevidenceChunks: runIds.length > 0 ? runIds : undefined,\n\t\twallVersion: CORRECTNESS_WALL_VERSION,\n\t});\n\n\tlet verdictCard = mapped.verdictCard;\n\tlet receipt: VerificationReceipt = {\n\t\t...mapped.receipt,\n\t\tverificationDigest,\n\t\twallVersion: CORRECTNESS_WALL_VERSION,\n\t};\n\n\tconst signingSecret = params.receiptSigningSecret?.trim();\n\tif (signingSecret !== undefined && signingSecret.length > 0 && verificationDigest !== undefined) {\n\t\treceipt = {\n\t\t\t...receipt,\n\t\t\tsignedReceipt: signWallReceipt({\n\t\t\t\tdigest: verificationDigest,\n\t\t\t\twallVersion: CORRECTNESS_WALL_VERSION,\n\t\t\t\tsecret: signingSecret,\n\t\t\t}),\n\t\t};\n\t}\n\n\tif (params.deepWall === true) {\n\t\tconst deep = await runDeepWall({\n\t\t\tkind: params.kind,\n\t\t\trunIds,\n\t\t\tpacketId: params.packetId,\n\t\t\tphase: resolveDeepWallPhaseFromEnv(),\n\t\t\trunner: params.deepWallRunner,\n\t\t\tallowCompletion: params.deepWallAllowCompletion,\n\t\t});\n\t\tconst policyFlags = [...receipt.policyFlags];\n\t\tif (deep.status !== \"completed\") {\n\t\t\tif (!policyFlags.includes(DEEP_WALL_UNAVAILABLE)) {\n\t\t\t\tpolicyFlags.push(DEEP_WALL_UNAVAILABLE);\n\t\t\t}\n\t\t\tif (!isDeepRunnerCompletionAllowed() && !policyFlags.includes(DEEP_RUNNER_NOT_WIRED)) {\n\t\t\t\tpolicyFlags.push(DEEP_RUNNER_NOT_WIRED);\n\t\t\t}\n\t\t}\n\t\tfor (const f of deep.runnerFlags ?? []) {\n\t\t\tif (!policyFlags.includes(f as never)) policyFlags.push(f as never);\n\t\t}\n\t\tconst limitsCode = deep.limits?.[0] ?? verdictCard.limits.code;\n\t\tverdictCard = {\n\t\t\t...verdictCard,\n\t\t\tlimits: {\n\t\t\t\t...verdictCard.limits,\n\t\t\t\trequiresHumanReview: verdictCard.limits.requiresHumanReview || deep.status !== \"completed\",\n\t\t\t\tcode: limitsCode ?? verdictCard.limits.code,\n\t\t\t},\n\t\t\tblocked_reasons: [...new Set([...verdictCard.blocked_reasons, deep.message])],\n\t\t};\n\t\treceipt = {\n\t\t\t...receipt,\n\t\t\tpolicyFlags,\n\t\t\tshouldSubmit: receipt.shouldSubmit && deep.status === \"completed\",\n\t\t\tdeepWallStatus: deep.status,\n\t\t\tdeepWallEvidence: deep.evidence,\n\t\t};\n\t}\n\n\treturn { verdictCard, receipt };\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -41,6 +41,8 @@ export type { RepairBudgetState } from "./repair-budget.ts";
41
41
  export { capRepairHints, parseRepairBudget, shouldOfferRepair } from "./repair-budget.ts";
42
42
  export type { RepairHintInput } from "./repair-loop.ts";
43
43
  export { deriveRepairHints } from "./repair-loop.ts";
44
+ export type { AdaptOrchLinkSurface, AdaptOrchLinks } from "./service-links.ts";
45
+ export { getAdaptOrchLinks } from "./service-links.ts";
44
46
  export type { VerificationDigest, VerificationDigestInput, WallReceiptMeta, } from "./signed-receipt.ts";
45
47
  export { buildVerificationDigest } from "./signed-receipt.ts";
46
48
  export { applyTransition, canTransition, isTerminalState, requiresHumanApproval } from "./state-machine.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EACX,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,QAAQ,EACR,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,cAAc,EACd,aAAa,EACb,SAAS,EACT,GAAG,EACH,eAAe,EACf,SAAS,EACT,aAAa,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,+BAA+B,EAC/B,kBAAkB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EACN,yBAAyB,EACzB,sBAAsB,EACtB,eAAe,EACf,eAAe,GACf,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EACX,sBAAsB,EACtB,WAAW,EACX,YAAY,EACZ,qBAAqB,GACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACN,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,GACjB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACpE,YAAY,EACX,aAAa,EACb,WAAW,EACX,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,mBAAmB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,YAAY,EACX,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACN,iBAAiB,EACjB,4BAA4B,EAC5B,qBAAqB,EACrB,qBAAqB,EACrB,6BAA6B,EAC7B,2BAA2B,EAC3B,WAAW,EACX,eAAe,GACf,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACX,6BAA6B,EAC7B,6BAA6B,GAC7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAC1F,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACvG,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EACN,oBAAoB,EACpB,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,GAC1B,MAAM,WAAW,CAAC;AACnB,YAAY,EACX,sCAAsC,EACtC,oBAAoB,GACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAChF,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EACN,WAAW,EACX,cAAc,EACd,wBAAwB,EACxB,WAAW,EACX,uBAAuB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACX,mBAAmB,EACnB,eAAe,EACf,yBAAyB,EACzB,oBAAoB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACN,gBAAgB,EAChB,6BAA6B,EAC7B,mBAAmB,EACnB,6BAA6B,GAC7B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAC9G,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,YAAY,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1F,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,YAAY,EACX,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC5G,YAAY,EACX,eAAe,EACf,cAAc,EACd,UAAU,EACV,wBAAwB,EACxB,sBAAsB,EACtB,kBAAkB,EAClB,UAAU,EACV,eAAe,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC9G,YAAY,EACX,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,2BAA2B,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,6BAA6B,EAC7B,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,+BAA+B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC","sourcesContent":["/**\n * Public entry point for `omk-adaptorch-wpl` (stable since 0.91.0).\n *\n * See README.md and `.omk/runs/adaptorch-native-loop-algorithm-20260701/final-part{1,2,3}-*.md`\n * for the design this package implements. Ships as a runtime dependency of the\n * `open-multi-agent-kit` CLI.\n */\n\nexport type {\n\tAdaptOrchApiConfig,\n\tAdaptOrchFetch,\n\tAdaptOrchHttpResponse,\n\tAdaptOrchRequestInit,\n\tArtifact,\n\tArtifactListResponse,\n\tCapabilitySet,\n\tEvidenceCheck,\n\tEvidenceReport,\n\tListRunsQuery,\n\tPrincipal,\n\tRun,\n\tRunListResponse,\n\tRunStatus,\n\tRunSubmission,\n} from \"./adaptorch-api.ts\";\nexport {\n\tADAPTORCH_DEFAULT_API_URL,\n\tAdaptOrchApiClient,\n\tAdaptOrchApiError,\n\tassertSafeApiUrl,\n\tcreateAdaptOrchApiClientFromEnv,\n\tresolveAuthHeaders,\n} from \"./adaptorch-api.ts\";\nexport type { AdaptOrchTransport } from \"./adaptorch-client.ts\";\nexport {\n\tADAPTORCH_FULL_ONLY_TOOLS,\n\tADAPTORCH_REMOTE_TOOLS,\n\tADAPTORCH_TOOLS,\n\tAdaptOrchClient,\n} from \"./adaptorch-client.ts\";\nexport type { AdjudicationRequest, AdjudicationResult, PerRunVerdict } from \"./adjudicator.ts\";\nexport { adjudicate } from \"./adjudicator.ts\";\nexport type {\n\tAdjudicationReasonCode,\n\tCheckResult,\n\tVerdictState,\n\tVerifierRegistryEntry,\n} from \"./adjudicator-registry.ts\";\nexport {\n\tADJUDICATION_REASON_CODES,\n\tcreateVerifierRegistry,\n\tDEFAULT_VERIFIER,\n\treduceReasonCodes,\n} from \"./adjudicator-registry.ts\";\nexport type { MapToB2CInput, MapToB2COutput } from \"./b2c-mapper.ts\";\nexport { BATCH1_NO_DOCKER_RUNNER, mapToB2C } from \"./b2c-mapper.ts\";\nexport type {\n\tUserRiskLevel,\n\tUserVerdict,\n\tVerdictCard,\n\tVerdictLimits,\n\tVerdictNextAction,\n\tVerificationReceipt,\n} from \"./b2c-verdict.ts\";\nexport { B2C_VERDICT_SCHEMA_VERSION } from \"./b2c-verdict.ts\";\nexport type {\n\tDeepWallPhase,\n\tDeepWallResult,\n\tDeepWallRunnerEvidence,\n\tDeepWallRunnerFn,\n\tDeepWallRunnerResult,\n\tDeepWallStatus,\n\tDeepWallStubResult,\n\tRunDeepWallStubParams,\n} from \"./deep-wall.ts\";\nexport {\n\tDEEP_RUNNER_ERROR,\n\tDEEP_RUNNER_EVIDENCE_MISSING,\n\tDEEP_RUNNER_NOT_WIRED,\n\tDEEP_WALL_UNAVAILABLE,\n\tisDeepRunnerCompletionAllowed,\n\tresolveDeepWallPhaseFromEnv,\n\trunDeepWall,\n\trunDeepWallStub,\n} from \"./deep-wall.ts\";\nexport type {\n\tEvaluateCorrectnessWallParams,\n\tEvaluateCorrectnessWallResult,\n} from \"./evaluate-correctness-wall.ts\";\nexport { evaluateCorrectnessWall } from \"./evaluate-correctness-wall.ts\";\nexport type { InMemoryAdaptOrchFixture } from \"./in-memory-adaptorch.ts\";\nexport { createInMemoryAdaptOrchClient } from \"./in-memory-adaptorch.ts\";\nexport type { AdaptOrchCallToolFn, OaTransportMode } from \"./live-adaptorch-transport.ts\";\nexport { createLiveAdaptOrchClient, parseOaTransportModeFromEnv } from \"./live-adaptorch-transport.ts\";\nexport type { NextActionKind, VerdictDisposition } from \"./loop.ts\";\nexport {\n\tdecideNextTransition,\n\thandleAdjudicationFailure,\n\tprojectVerdictToDisposition,\n\trunAdjudicationWithTimeout,\n} from \"./loop.ts\";\nexport type {\n\tCreateMcpIntrospectionTransportOptions,\n\tMcpIntrospectionMode,\n} from \"./mcp-introspection-transport.ts\";\nexport { createMcpIntrospectionClient } from \"./mcp-introspection-transport.ts\";\nexport type { PolicyFlag } from \"./policy-wall.ts\";\nexport {\n\tPOLICY_FLAG,\n\tparseDiffPaths,\n\tpathMatchesApprovedScope,\n\trunFastWall,\n\tscanDiffLinesForSecrets,\n} from \"./policy-wall.ts\";\nexport type {\n\tProofClosureSummary,\n\tProofProjection,\n\tProofProjectionReasonCode,\n\tVeraOutcomeAdmission,\n} from \"./proof-projection.ts\";\nexport {\n\tadmitVeraOutcome,\n\tPROOF_PROJECTION_REASON_CODES,\n\tprojectProofClosure,\n\tprojectProofEvaluationFailure,\n} from \"./proof-projection.ts\";\nexport type { SignedWallReceipt, SignWallReceiptInput, VerifyWallReceiptInput } from \"./receipt-signature.ts\";\nexport { signWallReceipt, verifyWallReceipt } from \"./receipt-signature.ts\";\nexport type { BuildRegeneratePacketInput, RegeneratePacket } from \"./regenerate-packet.ts\";\nexport { buildRegeneratePacket } from \"./regenerate-packet.ts\";\nexport type { RepairBudgetState } from \"./repair-budget.ts\";\nexport { capRepairHints, parseRepairBudget, shouldOfferRepair } from \"./repair-budget.ts\";\nexport type { RepairHintInput } from \"./repair-loop.ts\";\nexport { deriveRepairHints } from \"./repair-loop.ts\";\nexport type {\n\tVerificationDigest,\n\tVerificationDigestInput,\n\tWallReceiptMeta,\n} from \"./signed-receipt.ts\";\nexport { buildVerificationDigest } from \"./signed-receipt.ts\";\nexport { applyTransition, canTransition, isTerminalState, requiresHumanApproval } from \"./state-machine.ts\";\nexport type {\n\tCardinalityMode,\n\tDispatchRecord,\n\tLoopConfig,\n\tLoopTerminationCondition,\n\tTopologyClassification,\n\tTransitionLogEntry,\n\tWorkPacket,\n\tWorkPacketState,\n} from \"./types.ts\";\nexport { ADJUDICATIONS_DIR, LOOP_STATE_FILE, PACKET_INDEX_FILE, PACKETS_DIR, RUN_MAP_FILE } from \"./types.ts\";\nexport type {\n\tVeraDriftStatus,\n\tVeraEvidenceCausality,\n\tVeraEvidenceSeverity,\n\tVeraVerificationDecision,\n\tVeraVerificationOutcomeKind,\n} from \"./vera-vocabulary.ts\";\nexport {\n\tisVeraDriftStatus,\n\tisVeraEvidenceCausality,\n\tisVeraEvidenceSeverity,\n\tisVeraVerificationDecision,\n\tisVeraVerificationOutcomeKind,\n\tVERA_DRIFT_STATUSES,\n\tVERA_EVIDENCE_CAUSALITIES,\n\tVERA_EVIDENCE_SEVERITIES,\n\tVERA_VERIFICATION_DECISIONS,\n\tVERA_VERIFICATION_OUTCOME_KINDS,\n} from \"./vera-vocabulary.ts\";\nexport { CORRECTNESS_WALL_VERSION } from \"./wall-meta.ts\";\n"]}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Public entry point for `omk-adaptorch-wpl` (stable since 0.91.0).\n *\n * See README.md and `.omk/runs/adaptorch-native-loop-algorithm-20260701/final-part{1,2,3}-*.md`\n * for the design this package implements. Ships as a runtime dependency of the\n * `open-multi-agent-kit` CLI.\n */\n\nexport type {\n\tAdaptOrchApiConfig,\n\tAdaptOrchFetch,\n\tAdaptOrchHttpResponse,\n\tAdaptOrchRequestInit,\n\tArtifact,\n\tArtifactListResponse,\n\tCapabilitySet,\n\tEvidenceCheck,\n\tEvidenceReport,\n\tListRunsQuery,\n\tPrincipal,\n\tRun,\n\tRunListResponse,\n\tRunStatus,\n\tRunSubmission,\n} from \"./adaptorch-api.ts\";\nexport {\n\tADAPTORCH_DEFAULT_API_URL,\n\tAdaptOrchApiClient,\n\tAdaptOrchApiError,\n\tassertSafeApiUrl,\n\tcreateAdaptOrchApiClientFromEnv,\n\tresolveAuthHeaders,\n} from \"./adaptorch-api.ts\";\nexport type { AdaptOrchTransport } from \"./adaptorch-client.ts\";\nexport {\n\tADAPTORCH_FULL_ONLY_TOOLS,\n\tADAPTORCH_REMOTE_TOOLS,\n\tADAPTORCH_TOOLS,\n\tAdaptOrchClient,\n} from \"./adaptorch-client.ts\";\nexport type { AdjudicationRequest, AdjudicationResult, PerRunVerdict } from \"./adjudicator.ts\";\nexport { adjudicate } from \"./adjudicator.ts\";\nexport type {\n\tAdjudicationReasonCode,\n\tCheckResult,\n\tVerdictState,\n\tVerifierRegistryEntry,\n} from \"./adjudicator-registry.ts\";\nexport {\n\tADJUDICATION_REASON_CODES,\n\tcreateVerifierRegistry,\n\tDEFAULT_VERIFIER,\n\treduceReasonCodes,\n} from \"./adjudicator-registry.ts\";\nexport type { MapToB2CInput, MapToB2COutput } from \"./b2c-mapper.ts\";\nexport { BATCH1_NO_DOCKER_RUNNER, mapToB2C } from \"./b2c-mapper.ts\";\nexport type {\n\tUserRiskLevel,\n\tUserVerdict,\n\tVerdictCard,\n\tVerdictLimits,\n\tVerdictNextAction,\n\tVerificationReceipt,\n} from \"./b2c-verdict.ts\";\nexport { B2C_VERDICT_SCHEMA_VERSION } from \"./b2c-verdict.ts\";\nexport type {\n\tDeepWallPhase,\n\tDeepWallResult,\n\tDeepWallRunnerEvidence,\n\tDeepWallRunnerFn,\n\tDeepWallRunnerResult,\n\tDeepWallStatus,\n\tDeepWallStubResult,\n\tRunDeepWallStubParams,\n} from \"./deep-wall.ts\";\nexport {\n\tDEEP_RUNNER_ERROR,\n\tDEEP_RUNNER_EVIDENCE_MISSING,\n\tDEEP_RUNNER_NOT_WIRED,\n\tDEEP_WALL_UNAVAILABLE,\n\tisDeepRunnerCompletionAllowed,\n\tresolveDeepWallPhaseFromEnv,\n\trunDeepWall,\n\trunDeepWallStub,\n} from \"./deep-wall.ts\";\nexport type {\n\tEvaluateCorrectnessWallParams,\n\tEvaluateCorrectnessWallResult,\n} from \"./evaluate-correctness-wall.ts\";\nexport { evaluateCorrectnessWall } from \"./evaluate-correctness-wall.ts\";\nexport type { InMemoryAdaptOrchFixture } from \"./in-memory-adaptorch.ts\";\nexport { createInMemoryAdaptOrchClient } from \"./in-memory-adaptorch.ts\";\nexport type { AdaptOrchCallToolFn, OaTransportMode } from \"./live-adaptorch-transport.ts\";\nexport { createLiveAdaptOrchClient, parseOaTransportModeFromEnv } from \"./live-adaptorch-transport.ts\";\nexport type { NextActionKind, VerdictDisposition } from \"./loop.ts\";\nexport {\n\tdecideNextTransition,\n\thandleAdjudicationFailure,\n\tprojectVerdictToDisposition,\n\trunAdjudicationWithTimeout,\n} from \"./loop.ts\";\nexport type {\n\tCreateMcpIntrospectionTransportOptions,\n\tMcpIntrospectionMode,\n} from \"./mcp-introspection-transport.ts\";\nexport { createMcpIntrospectionClient } from \"./mcp-introspection-transport.ts\";\nexport type { PolicyFlag } from \"./policy-wall.ts\";\nexport {\n\tPOLICY_FLAG,\n\tparseDiffPaths,\n\tpathMatchesApprovedScope,\n\trunFastWall,\n\tscanDiffLinesForSecrets,\n} from \"./policy-wall.ts\";\nexport type {\n\tProofClosureSummary,\n\tProofProjection,\n\tProofProjectionReasonCode,\n\tVeraOutcomeAdmission,\n} from \"./proof-projection.ts\";\nexport {\n\tadmitVeraOutcome,\n\tPROOF_PROJECTION_REASON_CODES,\n\tprojectProofClosure,\n\tprojectProofEvaluationFailure,\n} from \"./proof-projection.ts\";\nexport type { SignedWallReceipt, SignWallReceiptInput, VerifyWallReceiptInput } from \"./receipt-signature.ts\";\nexport { signWallReceipt, verifyWallReceipt } from \"./receipt-signature.ts\";\nexport type { BuildRegeneratePacketInput, RegeneratePacket } from \"./regenerate-packet.ts\";\nexport { buildRegeneratePacket } from \"./regenerate-packet.ts\";\nexport type { RepairBudgetState } from \"./repair-budget.ts\";\nexport { capRepairHints, parseRepairBudget, shouldOfferRepair } from \"./repair-budget.ts\";\nexport type { RepairHintInput } from \"./repair-loop.ts\";\nexport { deriveRepairHints } from \"./repair-loop.ts\";\nexport type { AdaptOrchLinkSurface, AdaptOrchLinks } from \"./service-links.ts\";\nexport { getAdaptOrchLinks } from \"./service-links.ts\";\nexport type {\n\tVerificationDigest,\n\tVerificationDigestInput,\n\tWallReceiptMeta,\n} from \"./signed-receipt.ts\";\nexport { buildVerificationDigest } from \"./signed-receipt.ts\";\nexport { applyTransition, canTransition, isTerminalState, requiresHumanApproval } from \"./state-machine.ts\";\nexport type {\n\tCardinalityMode,\n\tDispatchRecord,\n\tLoopConfig,\n\tLoopTerminationCondition,\n\tTopologyClassification,\n\tTransitionLogEntry,\n\tWorkPacket,\n\tWorkPacketState,\n} from \"./types.ts\";\nexport { ADJUDICATIONS_DIR, LOOP_STATE_FILE, PACKET_INDEX_FILE, PACKETS_DIR, RUN_MAP_FILE } from \"./types.ts\";\nexport type {\n\tVeraDriftStatus,\n\tVeraEvidenceCausality,\n\tVeraEvidenceSeverity,\n\tVeraVerificationDecision,\n\tVeraVerificationOutcomeKind,\n} from \"./vera-vocabulary.ts\";\nexport {\n\tisVeraDriftStatus,\n\tisVeraEvidenceCausality,\n\tisVeraEvidenceSeverity,\n\tisVeraVerificationDecision,\n\tisVeraVerificationOutcomeKind,\n\tVERA_DRIFT_STATUSES,\n\tVERA_EVIDENCE_CAUSALITIES,\n\tVERA_EVIDENCE_SEVERITIES,\n\tVERA_VERIFICATION_DECISIONS,\n\tVERA_VERIFICATION_OUTCOME_KINDS,\n} from \"./vera-vocabulary.ts\";\nexport { CORRECTNESS_WALL_VERSION } from \"./wall-meta.ts\";\n"]}
package/dist/index.js CHANGED
@@ -23,6 +23,7 @@ export { signWallReceipt, verifyWallReceipt } from "./receipt-signature.js";
23
23
  export { buildRegeneratePacket } from "./regenerate-packet.js";
24
24
  export { capRepairHints, parseRepairBudget, shouldOfferRepair } from "./repair-budget.js";
25
25
  export { deriveRepairHints } from "./repair-loop.js";
26
+ export { getAdaptOrchLinks } from "./service-links.js";
26
27
  export { buildVerificationDigest } from "./signed-receipt.js";
27
28
  export { applyTransition, canTransition, isTerminalState, requiresHumanApproval } from "./state-machine.js";
28
29
  export { ADJUDICATIONS_DIR, LOOP_STATE_FILE, PACKET_INDEX_FILE, PACKETS_DIR, RUN_MAP_FILE } from "./types.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmBH,OAAO,EACN,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,+BAA+B,EAC/B,kBAAkB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,yBAAyB,EACzB,sBAAsB,EACtB,eAAe,EACf,eAAe,GACf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAO9C,OAAO,EACN,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,GACjB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AASpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAW9D,OAAO,EACN,iBAAiB,EACjB,4BAA4B,EAC5B,qBAAqB,EACrB,qBAAqB,EACrB,6BAA6B,EAC7B,2BAA2B,EAC3B,WAAW,EACX,eAAe,GACf,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAEvG,OAAO,EACN,oBAAoB,EACpB,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,GAC1B,MAAM,WAAW,CAAC;AAKnB,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAEhF,OAAO,EACN,WAAW,EACX,cAAc,EACd,wBAAwB,EACxB,WAAW,EACX,uBAAuB,GACvB,MAAM,kBAAkB,CAAC;AAO1B,OAAO,EACN,gBAAgB,EAChB,6BAA6B,EAC7B,mBAAmB,EACnB,6BAA6B,GAC7B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAMrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAW5G,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAQ9G,OAAO,EACN,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,6BAA6B,EAC7B,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,+BAA+B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC","sourcesContent":["/**\n * Public entry point for `omk-adaptorch-wpl` (stable since 0.91.0).\n *\n * See README.md and `.omk/runs/adaptorch-native-loop-algorithm-20260701/final-part{1,2,3}-*.md`\n * for the design this package implements. Ships as a runtime dependency of the\n * `open-multi-agent-kit` CLI.\n */\n\nexport type {\n\tAdaptOrchApiConfig,\n\tAdaptOrchFetch,\n\tAdaptOrchHttpResponse,\n\tAdaptOrchRequestInit,\n\tArtifact,\n\tArtifactListResponse,\n\tCapabilitySet,\n\tEvidenceCheck,\n\tEvidenceReport,\n\tListRunsQuery,\n\tPrincipal,\n\tRun,\n\tRunListResponse,\n\tRunStatus,\n\tRunSubmission,\n} from \"./adaptorch-api.ts\";\nexport {\n\tADAPTORCH_DEFAULT_API_URL,\n\tAdaptOrchApiClient,\n\tAdaptOrchApiError,\n\tassertSafeApiUrl,\n\tcreateAdaptOrchApiClientFromEnv,\n\tresolveAuthHeaders,\n} from \"./adaptorch-api.ts\";\nexport type { AdaptOrchTransport } from \"./adaptorch-client.ts\";\nexport {\n\tADAPTORCH_FULL_ONLY_TOOLS,\n\tADAPTORCH_REMOTE_TOOLS,\n\tADAPTORCH_TOOLS,\n\tAdaptOrchClient,\n} from \"./adaptorch-client.ts\";\nexport type { AdjudicationRequest, AdjudicationResult, PerRunVerdict } from \"./adjudicator.ts\";\nexport { adjudicate } from \"./adjudicator.ts\";\nexport type {\n\tAdjudicationReasonCode,\n\tCheckResult,\n\tVerdictState,\n\tVerifierRegistryEntry,\n} from \"./adjudicator-registry.ts\";\nexport {\n\tADJUDICATION_REASON_CODES,\n\tcreateVerifierRegistry,\n\tDEFAULT_VERIFIER,\n\treduceReasonCodes,\n} from \"./adjudicator-registry.ts\";\nexport type { MapToB2CInput, MapToB2COutput } from \"./b2c-mapper.ts\";\nexport { BATCH1_NO_DOCKER_RUNNER, mapToB2C } from \"./b2c-mapper.ts\";\nexport type {\n\tUserRiskLevel,\n\tUserVerdict,\n\tVerdictCard,\n\tVerdictLimits,\n\tVerdictNextAction,\n\tVerificationReceipt,\n} from \"./b2c-verdict.ts\";\nexport { B2C_VERDICT_SCHEMA_VERSION } from \"./b2c-verdict.ts\";\nexport type {\n\tDeepWallPhase,\n\tDeepWallResult,\n\tDeepWallRunnerEvidence,\n\tDeepWallRunnerFn,\n\tDeepWallRunnerResult,\n\tDeepWallStatus,\n\tDeepWallStubResult,\n\tRunDeepWallStubParams,\n} from \"./deep-wall.ts\";\nexport {\n\tDEEP_RUNNER_ERROR,\n\tDEEP_RUNNER_EVIDENCE_MISSING,\n\tDEEP_RUNNER_NOT_WIRED,\n\tDEEP_WALL_UNAVAILABLE,\n\tisDeepRunnerCompletionAllowed,\n\tresolveDeepWallPhaseFromEnv,\n\trunDeepWall,\n\trunDeepWallStub,\n} from \"./deep-wall.ts\";\nexport type {\n\tEvaluateCorrectnessWallParams,\n\tEvaluateCorrectnessWallResult,\n} from \"./evaluate-correctness-wall.ts\";\nexport { evaluateCorrectnessWall } from \"./evaluate-correctness-wall.ts\";\nexport type { InMemoryAdaptOrchFixture } from \"./in-memory-adaptorch.ts\";\nexport { createInMemoryAdaptOrchClient } from \"./in-memory-adaptorch.ts\";\nexport type { AdaptOrchCallToolFn, OaTransportMode } from \"./live-adaptorch-transport.ts\";\nexport { createLiveAdaptOrchClient, parseOaTransportModeFromEnv } from \"./live-adaptorch-transport.ts\";\nexport type { NextActionKind, VerdictDisposition } from \"./loop.ts\";\nexport {\n\tdecideNextTransition,\n\thandleAdjudicationFailure,\n\tprojectVerdictToDisposition,\n\trunAdjudicationWithTimeout,\n} from \"./loop.ts\";\nexport type {\n\tCreateMcpIntrospectionTransportOptions,\n\tMcpIntrospectionMode,\n} from \"./mcp-introspection-transport.ts\";\nexport { createMcpIntrospectionClient } from \"./mcp-introspection-transport.ts\";\nexport type { PolicyFlag } from \"./policy-wall.ts\";\nexport {\n\tPOLICY_FLAG,\n\tparseDiffPaths,\n\tpathMatchesApprovedScope,\n\trunFastWall,\n\tscanDiffLinesForSecrets,\n} from \"./policy-wall.ts\";\nexport type {\n\tProofClosureSummary,\n\tProofProjection,\n\tProofProjectionReasonCode,\n\tVeraOutcomeAdmission,\n} from \"./proof-projection.ts\";\nexport {\n\tadmitVeraOutcome,\n\tPROOF_PROJECTION_REASON_CODES,\n\tprojectProofClosure,\n\tprojectProofEvaluationFailure,\n} from \"./proof-projection.ts\";\nexport type { SignedWallReceipt, SignWallReceiptInput, VerifyWallReceiptInput } from \"./receipt-signature.ts\";\nexport { signWallReceipt, verifyWallReceipt } from \"./receipt-signature.ts\";\nexport type { BuildRegeneratePacketInput, RegeneratePacket } from \"./regenerate-packet.ts\";\nexport { buildRegeneratePacket } from \"./regenerate-packet.ts\";\nexport type { RepairBudgetState } from \"./repair-budget.ts\";\nexport { capRepairHints, parseRepairBudget, shouldOfferRepair } from \"./repair-budget.ts\";\nexport type { RepairHintInput } from \"./repair-loop.ts\";\nexport { deriveRepairHints } from \"./repair-loop.ts\";\nexport type {\n\tVerificationDigest,\n\tVerificationDigestInput,\n\tWallReceiptMeta,\n} from \"./signed-receipt.ts\";\nexport { buildVerificationDigest } from \"./signed-receipt.ts\";\nexport { applyTransition, canTransition, isTerminalState, requiresHumanApproval } from \"./state-machine.ts\";\nexport type {\n\tCardinalityMode,\n\tDispatchRecord,\n\tLoopConfig,\n\tLoopTerminationCondition,\n\tTopologyClassification,\n\tTransitionLogEntry,\n\tWorkPacket,\n\tWorkPacketState,\n} from \"./types.ts\";\nexport { ADJUDICATIONS_DIR, LOOP_STATE_FILE, PACKET_INDEX_FILE, PACKETS_DIR, RUN_MAP_FILE } from \"./types.ts\";\nexport type {\n\tVeraDriftStatus,\n\tVeraEvidenceCausality,\n\tVeraEvidenceSeverity,\n\tVeraVerificationDecision,\n\tVeraVerificationOutcomeKind,\n} from \"./vera-vocabulary.ts\";\nexport {\n\tisVeraDriftStatus,\n\tisVeraEvidenceCausality,\n\tisVeraEvidenceSeverity,\n\tisVeraVerificationDecision,\n\tisVeraVerificationOutcomeKind,\n\tVERA_DRIFT_STATUSES,\n\tVERA_EVIDENCE_CAUSALITIES,\n\tVERA_EVIDENCE_SEVERITIES,\n\tVERA_VERIFICATION_DECISIONS,\n\tVERA_VERIFICATION_OUTCOME_KINDS,\n} from \"./vera-vocabulary.ts\";\nexport { CORRECTNESS_WALL_VERSION } from \"./wall-meta.ts\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmBH,OAAO,EACN,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,+BAA+B,EAC/B,kBAAkB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,yBAAyB,EACzB,sBAAsB,EACtB,eAAe,EACf,eAAe,GACf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAO9C,OAAO,EACN,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,GACjB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AASpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAW9D,OAAO,EACN,iBAAiB,EACjB,4BAA4B,EAC5B,qBAAqB,EACrB,qBAAqB,EACrB,6BAA6B,EAC7B,2BAA2B,EAC3B,WAAW,EACX,eAAe,GACf,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAEvG,OAAO,EACN,oBAAoB,EACpB,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,GAC1B,MAAM,WAAW,CAAC;AAKnB,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAEhF,OAAO,EACN,WAAW,EACX,cAAc,EACd,wBAAwB,EACxB,WAAW,EACX,uBAAuB,GACvB,MAAM,kBAAkB,CAAC;AAO1B,OAAO,EACN,gBAAgB,EAChB,6BAA6B,EAC7B,mBAAmB,EACnB,6BAA6B,GAC7B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAMvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAW5G,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAQ9G,OAAO,EACN,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,6BAA6B,EAC7B,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,+BAA+B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC","sourcesContent":["/**\n * Public entry point for `omk-adaptorch-wpl` (stable since 0.91.0).\n *\n * See README.md and `.omk/runs/adaptorch-native-loop-algorithm-20260701/final-part{1,2,3}-*.md`\n * for the design this package implements. Ships as a runtime dependency of the\n * `open-multi-agent-kit` CLI.\n */\n\nexport type {\n\tAdaptOrchApiConfig,\n\tAdaptOrchFetch,\n\tAdaptOrchHttpResponse,\n\tAdaptOrchRequestInit,\n\tArtifact,\n\tArtifactListResponse,\n\tCapabilitySet,\n\tEvidenceCheck,\n\tEvidenceReport,\n\tListRunsQuery,\n\tPrincipal,\n\tRun,\n\tRunListResponse,\n\tRunStatus,\n\tRunSubmission,\n} from \"./adaptorch-api.ts\";\nexport {\n\tADAPTORCH_DEFAULT_API_URL,\n\tAdaptOrchApiClient,\n\tAdaptOrchApiError,\n\tassertSafeApiUrl,\n\tcreateAdaptOrchApiClientFromEnv,\n\tresolveAuthHeaders,\n} from \"./adaptorch-api.ts\";\nexport type { AdaptOrchTransport } from \"./adaptorch-client.ts\";\nexport {\n\tADAPTORCH_FULL_ONLY_TOOLS,\n\tADAPTORCH_REMOTE_TOOLS,\n\tADAPTORCH_TOOLS,\n\tAdaptOrchClient,\n} from \"./adaptorch-client.ts\";\nexport type { AdjudicationRequest, AdjudicationResult, PerRunVerdict } from \"./adjudicator.ts\";\nexport { adjudicate } from \"./adjudicator.ts\";\nexport type {\n\tAdjudicationReasonCode,\n\tCheckResult,\n\tVerdictState,\n\tVerifierRegistryEntry,\n} from \"./adjudicator-registry.ts\";\nexport {\n\tADJUDICATION_REASON_CODES,\n\tcreateVerifierRegistry,\n\tDEFAULT_VERIFIER,\n\treduceReasonCodes,\n} from \"./adjudicator-registry.ts\";\nexport type { MapToB2CInput, MapToB2COutput } from \"./b2c-mapper.ts\";\nexport { BATCH1_NO_DOCKER_RUNNER, mapToB2C } from \"./b2c-mapper.ts\";\nexport type {\n\tUserRiskLevel,\n\tUserVerdict,\n\tVerdictCard,\n\tVerdictLimits,\n\tVerdictNextAction,\n\tVerificationReceipt,\n} from \"./b2c-verdict.ts\";\nexport { B2C_VERDICT_SCHEMA_VERSION } from \"./b2c-verdict.ts\";\nexport type {\n\tDeepWallPhase,\n\tDeepWallResult,\n\tDeepWallRunnerEvidence,\n\tDeepWallRunnerFn,\n\tDeepWallRunnerResult,\n\tDeepWallStatus,\n\tDeepWallStubResult,\n\tRunDeepWallStubParams,\n} from \"./deep-wall.ts\";\nexport {\n\tDEEP_RUNNER_ERROR,\n\tDEEP_RUNNER_EVIDENCE_MISSING,\n\tDEEP_RUNNER_NOT_WIRED,\n\tDEEP_WALL_UNAVAILABLE,\n\tisDeepRunnerCompletionAllowed,\n\tresolveDeepWallPhaseFromEnv,\n\trunDeepWall,\n\trunDeepWallStub,\n} from \"./deep-wall.ts\";\nexport type {\n\tEvaluateCorrectnessWallParams,\n\tEvaluateCorrectnessWallResult,\n} from \"./evaluate-correctness-wall.ts\";\nexport { evaluateCorrectnessWall } from \"./evaluate-correctness-wall.ts\";\nexport type { InMemoryAdaptOrchFixture } from \"./in-memory-adaptorch.ts\";\nexport { createInMemoryAdaptOrchClient } from \"./in-memory-adaptorch.ts\";\nexport type { AdaptOrchCallToolFn, OaTransportMode } from \"./live-adaptorch-transport.ts\";\nexport { createLiveAdaptOrchClient, parseOaTransportModeFromEnv } from \"./live-adaptorch-transport.ts\";\nexport type { NextActionKind, VerdictDisposition } from \"./loop.ts\";\nexport {\n\tdecideNextTransition,\n\thandleAdjudicationFailure,\n\tprojectVerdictToDisposition,\n\trunAdjudicationWithTimeout,\n} from \"./loop.ts\";\nexport type {\n\tCreateMcpIntrospectionTransportOptions,\n\tMcpIntrospectionMode,\n} from \"./mcp-introspection-transport.ts\";\nexport { createMcpIntrospectionClient } from \"./mcp-introspection-transport.ts\";\nexport type { PolicyFlag } from \"./policy-wall.ts\";\nexport {\n\tPOLICY_FLAG,\n\tparseDiffPaths,\n\tpathMatchesApprovedScope,\n\trunFastWall,\n\tscanDiffLinesForSecrets,\n} from \"./policy-wall.ts\";\nexport type {\n\tProofClosureSummary,\n\tProofProjection,\n\tProofProjectionReasonCode,\n\tVeraOutcomeAdmission,\n} from \"./proof-projection.ts\";\nexport {\n\tadmitVeraOutcome,\n\tPROOF_PROJECTION_REASON_CODES,\n\tprojectProofClosure,\n\tprojectProofEvaluationFailure,\n} from \"./proof-projection.ts\";\nexport type { SignedWallReceipt, SignWallReceiptInput, VerifyWallReceiptInput } from \"./receipt-signature.ts\";\nexport { signWallReceipt, verifyWallReceipt } from \"./receipt-signature.ts\";\nexport type { BuildRegeneratePacketInput, RegeneratePacket } from \"./regenerate-packet.ts\";\nexport { buildRegeneratePacket } from \"./regenerate-packet.ts\";\nexport type { RepairBudgetState } from \"./repair-budget.ts\";\nexport { capRepairHints, parseRepairBudget, shouldOfferRepair } from \"./repair-budget.ts\";\nexport type { RepairHintInput } from \"./repair-loop.ts\";\nexport { deriveRepairHints } from \"./repair-loop.ts\";\nexport type { AdaptOrchLinkSurface, AdaptOrchLinks } from \"./service-links.ts\";\nexport { getAdaptOrchLinks } from \"./service-links.ts\";\nexport type {\n\tVerificationDigest,\n\tVerificationDigestInput,\n\tWallReceiptMeta,\n} from \"./signed-receipt.ts\";\nexport { buildVerificationDigest } from \"./signed-receipt.ts\";\nexport { applyTransition, canTransition, isTerminalState, requiresHumanApproval } from \"./state-machine.ts\";\nexport type {\n\tCardinalityMode,\n\tDispatchRecord,\n\tLoopConfig,\n\tLoopTerminationCondition,\n\tTopologyClassification,\n\tTransitionLogEntry,\n\tWorkPacket,\n\tWorkPacketState,\n} from \"./types.ts\";\nexport { ADJUDICATIONS_DIR, LOOP_STATE_FILE, PACKET_INDEX_FILE, PACKETS_DIR, RUN_MAP_FILE } from \"./types.ts\";\nexport type {\n\tVeraDriftStatus,\n\tVeraEvidenceCausality,\n\tVeraEvidenceSeverity,\n\tVeraVerificationDecision,\n\tVeraVerificationOutcomeKind,\n} from \"./vera-vocabulary.ts\";\nexport {\n\tisVeraDriftStatus,\n\tisVeraEvidenceCausality,\n\tisVeraEvidenceSeverity,\n\tisVeraVerificationDecision,\n\tisVeraVerificationOutcomeKind,\n\tVERA_DRIFT_STATUSES,\n\tVERA_EVIDENCE_CAUSALITIES,\n\tVERA_EVIDENCE_SEVERITIES,\n\tVERA_VERIFICATION_DECISIONS,\n\tVERA_VERIFICATION_OUTCOME_KINDS,\n} from \"./vera-vocabulary.ts\";\nexport { CORRECTNESS_WALL_VERSION } from \"./wall-meta.ts\";\n"]}
@@ -0,0 +1,11 @@
1
+ /** Optional product navigation, separate from verdicts, receipts, and execution authority. */
2
+ export type AdaptOrchLinkSurface = "doctor" | "wpl";
3
+ export interface AdaptOrchLinks {
4
+ readonly plans: string;
5
+ readonly signup: string;
6
+ readonly contact: string;
7
+ readonly claimBoundary: string;
8
+ }
9
+ /** Pure offline handoff. Accepts no project, prompt, session, credential, or arbitrary URL. */
10
+ export declare function getAdaptOrchLinks(surface?: AdaptOrchLinkSurface): AdaptOrchLinks;
11
+ //# sourceMappingURL=service-links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-links.d.ts","sourceRoot":"","sources":["../src/service-links.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAC/B;AAED,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,oBAA4B,GAAG,cAAc,CAwBvF","sourcesContent":["/** Optional product navigation, separate from verdicts, receipts, and execution authority. */\nexport type AdaptOrchLinkSurface = \"doctor\" | \"wpl\";\n\nexport interface AdaptOrchLinks {\n\treadonly plans: string;\n\treadonly signup: string;\n\treadonly contact: string;\n\treadonly claimBoundary: string;\n}\n\n/** Pure offline handoff. Accepts no project, prompt, session, credential, or arbitrary URL. */\nexport function getAdaptOrchLinks(surface: AdaptOrchLinkSurface = \"wpl\"): AdaptOrchLinks {\n\tswitch (surface) {\n\t\tcase \"doctor\":\n\t\tcase \"wpl\":\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new TypeError(\"Unknown AdaptOrch link surface\");\n\t}\n\n\tfunction link(path: string, action: string): string {\n\t\tconst url = new URL(path, \"https://adaptorch.com\");\n\t\turl.searchParams.set(\"utm_source\", \"omk\");\n\t\turl.searchParams.set(\"utm_medium\", surface === \"doctor\" ? \"cli\" : \"library\");\n\t\turl.searchParams.set(\"utm_campaign\", \"omk-adaptorch-wpl\");\n\t\turl.searchParams.set(\"utm_content\", `${surface}-${action}`);\n\t\treturn url.href;\n\t}\n\n\treturn {\n\t\tplans: link(\"/#pricing\", \"plans\"),\n\t\tsignup: link(\"/app/signup\", \"signup\"),\n\t\tcontact: link(\"/#bookDemo\", \"contact\"),\n\t\tclaimBoundary: link(\"/claim-boundary\", \"claim-boundary\"),\n\t};\n}\n"]}
@@ -0,0 +1,25 @@
1
+ /** Pure offline handoff. Accepts no project, prompt, session, credential, or arbitrary URL. */
2
+ export function getAdaptOrchLinks(surface = "wpl") {
3
+ switch (surface) {
4
+ case "doctor":
5
+ case "wpl":
6
+ break;
7
+ default:
8
+ throw new TypeError("Unknown AdaptOrch link surface");
9
+ }
10
+ function link(path, action) {
11
+ const url = new URL(path, "https://adaptorch.com");
12
+ url.searchParams.set("utm_source", "omk");
13
+ url.searchParams.set("utm_medium", surface === "doctor" ? "cli" : "library");
14
+ url.searchParams.set("utm_campaign", "omk-adaptorch-wpl");
15
+ url.searchParams.set("utm_content", `${surface}-${action}`);
16
+ return url.href;
17
+ }
18
+ return {
19
+ plans: link("/#pricing", "plans"),
20
+ signup: link("/app/signup", "signup"),
21
+ contact: link("/#bookDemo", "contact"),
22
+ claimBoundary: link("/claim-boundary", "claim-boundary"),
23
+ };
24
+ }
25
+ //# sourceMappingURL=service-links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-links.js","sourceRoot":"","sources":["../src/service-links.ts"],"names":[],"mappings":"AAUA,+FAA+F;AAC/F,MAAM,UAAU,iBAAiB,CAAC,OAAO,GAAyB,KAAK,EAAkB;IACxF,QAAQ,OAAO,EAAE,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,KAAK;YACT,MAAM;QACP;YACC,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;IACxD,CAAC;IAED,SAAS,IAAI,CAAC,IAAY,EAAE,MAAc,EAAU;QACnD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;QACnD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC1C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC7E,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QAC1D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,OAAO,IAAI,MAAM,EAAE,CAAC,CAAC;QAC5D,OAAO,GAAG,CAAC,IAAI,CAAC;IAAA,CAChB;IAED,OAAO;QACN,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;QACjC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;QACrC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC;QACtC,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;KACxD,CAAC;AAAA,CACF","sourcesContent":["/** Optional product navigation, separate from verdicts, receipts, and execution authority. */\nexport type AdaptOrchLinkSurface = \"doctor\" | \"wpl\";\n\nexport interface AdaptOrchLinks {\n\treadonly plans: string;\n\treadonly signup: string;\n\treadonly contact: string;\n\treadonly claimBoundary: string;\n}\n\n/** Pure offline handoff. Accepts no project, prompt, session, credential, or arbitrary URL. */\nexport function getAdaptOrchLinks(surface: AdaptOrchLinkSurface = \"wpl\"): AdaptOrchLinks {\n\tswitch (surface) {\n\t\tcase \"doctor\":\n\t\tcase \"wpl\":\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new TypeError(\"Unknown AdaptOrch link surface\");\n\t}\n\n\tfunction link(path: string, action: string): string {\n\t\tconst url = new URL(path, \"https://adaptorch.com\");\n\t\turl.searchParams.set(\"utm_source\", \"omk\");\n\t\turl.searchParams.set(\"utm_medium\", surface === \"doctor\" ? \"cli\" : \"library\");\n\t\turl.searchParams.set(\"utm_campaign\", \"omk-adaptorch-wpl\");\n\t\turl.searchParams.set(\"utm_content\", `${surface}-${action}`);\n\t\treturn url.href;\n\t}\n\n\treturn {\n\t\tplans: link(\"/#pricing\", \"plans\"),\n\t\tsignup: link(\"/app/signup\", \"signup\"),\n\t\tcontact: link(\"/#bookDemo\", \"contact\"),\n\t\tclaimBoundary: link(\"/claim-boundary\", \"claim-boundary\"),\n\t};\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omk-adaptorch-wpl",
3
- "version": "0.98.3",
3
+ "version": "0.98.4",
4
4
  "description": "AdaptOrch-native Work Packet Loop (WPL) — state machine, verification layer, and integration bridge for OMK orchestration.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -27,7 +27,7 @@
27
27
  "orchestration",
28
28
  "experimental"
29
29
  ],
30
- "author": "dmae",
30
+ "author": "ClassicMate",
31
31
  "license": "MIT",
32
32
  "repository": {
33
33
  "type": "git",