@lucern/graph-primitives 1.0.28 → 1.0.30

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.
Files changed (319) hide show
  1. package/dist/{beliefDecay-DZ6tkLYq.d.ts → beliefDecay-BmkEk5OJ.d.ts} +3 -3
  2. package/dist/beliefDecay.d.ts +1 -1
  3. package/dist/beliefDecay.js +448 -314
  4. package/dist/beliefDecay.js.map +1 -1
  5. package/dist/{beliefEvidenceLinks-CWOXxxJg.d.ts → beliefEvidenceLinks-BzfjON_6.d.ts} +13 -13
  6. package/dist/beliefEvidenceLinks.d.ts +1 -1
  7. package/dist/beliefEvidenceLinks.js +843 -624
  8. package/dist/beliefEvidenceLinks.js.map +1 -1
  9. package/dist/beliefEvidenceLinks.operational.d.ts +7 -5
  10. package/dist/beliefEvidenceLinks.operational.js +91 -18
  11. package/dist/beliefEvidenceLinks.operational.js.map +1 -1
  12. package/dist/beliefLifecycle.js.map +1 -1
  13. package/dist/confidencePropagationDispatch.d.ts +28 -27
  14. package/dist/confidencePropagationDispatch.js +157 -99
  15. package/dist/confidencePropagationDispatch.js.map +1 -1
  16. package/dist/{contradictions-51VLsESq.d.ts → contradictions-BATPuZTL.d.ts} +10 -10
  17. package/dist/contradictions.d.ts +1 -1
  18. package/dist/contradictions.js +398 -228
  19. package/dist/contradictions.js.map +1 -1
  20. package/dist/convex.d.ts +65 -30
  21. package/dist/convex.js +7 -3
  22. package/dist/convex.js.map +1 -1
  23. package/dist/debug.js.map +1 -1
  24. package/dist/edgeValidation.js +293 -85
  25. package/dist/edgeValidation.js.map +1 -1
  26. package/dist/edges/contains.d.ts +1 -1
  27. package/dist/edges/contains.js.map +1 -1
  28. package/dist/edges/contradicts.d.ts +1 -1
  29. package/dist/edges/contradicts.js.map +1 -1
  30. package/dist/edges/{dependsOn.d.ts → depends-on.d.ts} +1 -1
  31. package/dist/edges/{dependsOn.js → depends-on.js} +4 -4
  32. package/dist/edges/depends-on.js.map +1 -0
  33. package/dist/edges/{derivedFrom.d.ts → derived-from.d.ts} +1 -1
  34. package/dist/edges/{derivedFrom.js → derived-from.js} +3 -3
  35. package/dist/edges/derived-from.js.map +1 -0
  36. package/dist/edges/elaborates.d.ts +1 -1
  37. package/dist/edges/elaborates.js.map +1 -1
  38. package/dist/edges/index.d.ts +7 -3
  39. package/dist/edges/index.js +7 -4
  40. package/dist/edges/index.js.map +1 -1
  41. package/dist/edges/informs.d.ts +1 -1
  42. package/dist/edges/informs.js.map +1 -1
  43. package/dist/edges/{propagationTypes.d.ts → propagation-types.d.ts} +14 -14
  44. package/dist/edges/{propagationTypes.js → propagation-types.js} +3 -3
  45. package/dist/edges/propagation-types.js.map +1 -0
  46. package/dist/edges/refutes.d.ts +1 -1
  47. package/dist/edges/refutes.js.map +1 -1
  48. package/dist/edges/supports.d.ts +1 -1
  49. package/dist/edges/supports.js.map +1 -1
  50. package/dist/edges/tests.d.ts +1 -1
  51. package/dist/edges/tests.js.map +1 -1
  52. package/dist/edges/utils.d.ts +1 -1
  53. package/dist/edges/utils.js.map +1 -1
  54. package/dist/embeddingTrigger.d.ts +14 -6
  55. package/dist/embeddingTrigger.js +11 -14
  56. package/dist/embeddingTrigger.js.map +1 -1
  57. package/dist/{entityBridge-DMaKooYn.d.ts → entityBridge-BhVDM3pc.d.ts} +5 -5
  58. package/dist/entityBridge.d.ts +1 -1
  59. package/dist/entityBridge.js +602 -225
  60. package/dist/entityBridge.js.map +1 -1
  61. package/dist/entityCanonicalMatch.d.ts +14 -12
  62. package/dist/entityCanonicalMatch.js.map +1 -1
  63. package/dist/{entityLifecycle-CvgSK5FV.d.ts → entityLifecycle-BsfCz9pS.d.ts} +5 -9
  64. package/dist/entityLifecycle.d.ts +1 -1
  65. package/dist/entityLifecycle.js +857 -515
  66. package/dist/entityLifecycle.js.map +1 -1
  67. package/dist/{entityValidation-KLZ_Xl2D.d.ts → entityValidation-B1yNEHJx.d.ts} +7 -6
  68. package/dist/entityValidation.d.ts +3 -1
  69. package/dist/entityValidation.js +60 -8
  70. package/dist/entityValidation.js.map +1 -1
  71. package/dist/{epistemicAnswers-C5ib4z6_.d.ts → epistemicAnswers-f47YMu9U.d.ts} +6 -6
  72. package/dist/epistemicAnswers.d.ts +1 -1
  73. package/dist/epistemicAnswers.js +587 -545
  74. package/dist/epistemicAnswers.js.map +1 -1
  75. package/dist/epistemicBeliefs.admin.d.ts +8 -8
  76. package/dist/epistemicBeliefs.admin.js +366 -203
  77. package/dist/epistemicBeliefs.admin.js.map +1 -1
  78. package/dist/epistemicBeliefs.backfills.d.ts +8 -8
  79. package/dist/epistemicBeliefs.backfills.js +655 -308
  80. package/dist/epistemicBeliefs.backfills.js.map +1 -1
  81. package/dist/epistemicBeliefs.confidence.d.ts +19 -14
  82. package/dist/epistemicBeliefs.confidence.js +634 -423
  83. package/dist/epistemicBeliefs.confidence.js.map +1 -1
  84. package/dist/epistemicBeliefs.core.d.ts +6 -6
  85. package/dist/epistemicBeliefs.core.js +719 -411
  86. package/dist/epistemicBeliefs.core.js.map +1 -1
  87. package/dist/epistemicBeliefs.d.ts +11 -8
  88. package/dist/epistemicBeliefs.forkEvidence.d.ts +2 -0
  89. package/dist/epistemicBeliefs.forkEvidence.js +8 -28
  90. package/dist/epistemicBeliefs.forkEvidence.js.map +1 -1
  91. package/dist/epistemicBeliefs.helpers.d.ts +69 -74
  92. package/dist/epistemicBeliefs.helpers.js +359 -248
  93. package/dist/epistemicBeliefs.helpers.js.map +1 -1
  94. package/dist/epistemicBeliefs.internal.d.ts +5 -5
  95. package/dist/epistemicBeliefs.internal.js +1246 -1044
  96. package/dist/epistemicBeliefs.internal.js.map +1 -1
  97. package/dist/epistemicBeliefs.js +4922 -3608
  98. package/dist/epistemicBeliefs.js.map +1 -1
  99. package/dist/epistemicBeliefs.lifecycle.d.ts +5 -5
  100. package/dist/epistemicBeliefs.lifecycle.js +1137 -818
  101. package/dist/epistemicBeliefs.lifecycle.js.map +1 -1
  102. package/dist/epistemicBeliefs.links.d.ts +7 -7
  103. package/dist/epistemicBeliefs.links.js +408 -307
  104. package/dist/epistemicBeliefs.links.js.map +1 -1
  105. package/dist/epistemicBeliefs.queries.d.ts +4 -4
  106. package/dist/epistemicBeliefs.queries.js +175 -20
  107. package/dist/epistemicBeliefs.queries.js.map +1 -1
  108. package/dist/epistemicBeliefs.topicAnchor.d.ts +6 -4
  109. package/dist/epistemicBeliefs.topicAnchor.js +12 -5
  110. package/dist/epistemicBeliefs.topicAnchor.js.map +1 -1
  111. package/dist/epistemicContracts.d.ts +28 -3
  112. package/dist/epistemicContracts.evaluators.d.ts +2 -0
  113. package/dist/epistemicContracts.evaluators.js +1063 -613
  114. package/dist/epistemicContracts.evaluators.js.map +1 -1
  115. package/dist/epistemicContracts.handlers.d.ts +15 -32
  116. package/dist/epistemicContracts.handlers.js +2086 -1644
  117. package/dist/epistemicContracts.handlers.js.map +1 -1
  118. package/dist/epistemicContracts.js +1131 -672
  119. package/dist/epistemicContracts.js.map +1 -1
  120. package/dist/epistemicContracts.metrics.d.ts +2 -0
  121. package/dist/epistemicContracts.metrics.js +375 -158
  122. package/dist/epistemicContracts.metrics.js.map +1 -1
  123. package/dist/epistemicContracts.types.d.ts +87 -81
  124. package/dist/epistemicEdgeCreation.d.ts +2 -0
  125. package/dist/epistemicEdgeCreation.js +87 -16
  126. package/dist/epistemicEdgeCreation.js.map +1 -1
  127. package/dist/{epistemicEdges-BF-cn4i3.d.ts → epistemicEdges-BGBh0QSP.d.ts} +4 -7
  128. package/dist/epistemicEdges.d.ts +6 -5
  129. package/dist/epistemicEdges.handlers.d.ts +3 -3
  130. package/dist/epistemicEdges.handlers.js +129 -24
  131. package/dist/epistemicEdges.handlers.js.map +1 -1
  132. package/dist/epistemicEdges.helpers.d.ts +6 -4
  133. package/dist/epistemicEdges.helpers.js +37 -2
  134. package/dist/epistemicEdges.helpers.js.map +1 -1
  135. package/dist/epistemicEdges.js +1969 -1205
  136. package/dist/epistemicEdges.js.map +1 -1
  137. package/dist/epistemicEdges.mutations.d.ts +7 -7
  138. package/dist/epistemicEdges.mutations.js +960 -583
  139. package/dist/epistemicEdges.mutations.js.map +1 -1
  140. package/dist/epistemicEdges.queries.d.ts +16 -16
  141. package/dist/epistemicEdges.queries.js +639 -367
  142. package/dist/epistemicEdges.queries.js.map +1 -1
  143. package/dist/epistemicEdges.types.d.ts +10 -8
  144. package/dist/epistemicEvidence.d.ts +4 -1
  145. package/dist/epistemicEvidence.js +937 -536
  146. package/dist/epistemicEvidence.js.map +1 -1
  147. package/dist/epistemicEvidenceHelpers.d.ts +26 -10
  148. package/dist/epistemicEvidenceHelpers.js +239 -200
  149. package/dist/epistemicEvidenceHelpers.js.map +1 -1
  150. package/dist/epistemicEvidenceMutations.d.ts +8 -8
  151. package/dist/epistemicEvidenceMutations.js +844 -696
  152. package/dist/epistemicEvidenceMutations.js.map +1 -1
  153. package/dist/epistemicEvidenceQueries.d.ts +8 -8
  154. package/dist/epistemicEvidenceQueries.js +514 -238
  155. package/dist/epistemicEvidenceQueries.js.map +1 -1
  156. package/dist/epistemicHelpers.d.ts +4 -2
  157. package/dist/epistemicHelpers.js +308 -134
  158. package/dist/epistemicHelpers.js.map +1 -1
  159. package/dist/epistemicInsert.d.ts +16 -4
  160. package/dist/epistemicInsert.js +6 -3
  161. package/dist/epistemicInsert.js.map +1 -1
  162. package/dist/epistemicLayerRules.d.ts +10 -8
  163. package/dist/epistemicLayerRules.js +1 -5
  164. package/dist/epistemicLayerRules.js.map +1 -1
  165. package/dist/{epistemicLinking-CfE00tHJ.d.ts → epistemicLinking-CsCDv2cN.d.ts} +3 -3
  166. package/dist/epistemicLinking.d.ts +1 -1
  167. package/dist/epistemicLinking.js +177 -100
  168. package/dist/epistemicLinking.js.map +1 -1
  169. package/dist/epistemicNodeCreation.d.ts +2 -0
  170. package/dist/epistemicNodeCreation.js +203 -40
  171. package/dist/epistemicNodeCreation.js.map +1 -1
  172. package/dist/{epistemicNodes-BCQxpYx_.d.ts → epistemicNodes-CokAgBHg.d.ts} +3 -3
  173. package/dist/epistemicNodes.d.ts +3 -3
  174. package/dist/epistemicNodes.helpers.d.ts +24 -15
  175. package/dist/epistemicNodes.helpers.js.map +1 -1
  176. package/dist/epistemicNodes.internal.d.ts +6 -6
  177. package/dist/epistemicNodes.internal.js +389 -319
  178. package/dist/epistemicNodes.internal.js.map +1 -1
  179. package/dist/epistemicNodes.js +704 -508
  180. package/dist/epistemicNodes.js.map +1 -1
  181. package/dist/epistemicNodes.mutations.d.ts +6 -6
  182. package/dist/epistemicNodes.mutations.js +564 -467
  183. package/dist/epistemicNodes.mutations.js.map +1 -1
  184. package/dist/epistemicNodes.queries.d.ts +8 -8
  185. package/dist/epistemicNodes.queries.js +311 -314
  186. package/dist/epistemicNodes.queries.js.map +1 -1
  187. package/dist/epistemicNodes.validators.d.ts +2 -2
  188. package/dist/epistemicNodes.validators.js.map +1 -1
  189. package/dist/epistemicQuestions.conviction.d.ts +8 -8
  190. package/dist/epistemicQuestions.conviction.js +665 -484
  191. package/dist/epistemicQuestions.conviction.js.map +1 -1
  192. package/dist/epistemicQuestions.create.d.ts +4 -4
  193. package/dist/epistemicQuestions.create.js +640 -612
  194. package/dist/epistemicQuestions.create.js.map +1 -1
  195. package/dist/epistemicQuestions.d.ts +8 -5
  196. package/dist/epistemicQuestions.evidence.d.ts +2 -2
  197. package/dist/epistemicQuestions.evidence.js +475 -383
  198. package/dist/epistemicQuestions.evidence.js.map +1 -1
  199. package/dist/epistemicQuestions.helpers.d.ts +125 -24
  200. package/dist/epistemicQuestions.helpers.js +240 -209
  201. package/dist/epistemicQuestions.helpers.js.map +1 -1
  202. package/dist/epistemicQuestions.js +3474 -2823
  203. package/dist/epistemicQuestions.js.map +1 -1
  204. package/dist/epistemicQuestions.lifecycle.d.ts +2 -2
  205. package/dist/epistemicQuestions.lifecycle.js +607 -546
  206. package/dist/epistemicQuestions.lifecycle.js.map +1 -1
  207. package/dist/epistemicQuestions.queries.d.ts +12 -7
  208. package/dist/epistemicQuestions.queries.js +305 -244
  209. package/dist/epistemicQuestions.queries.js.map +1 -1
  210. package/dist/epistemicQuestions.sprint.d.ts +2 -2
  211. package/dist/epistemicQuestions.sprint.js +600 -394
  212. package/dist/epistemicQuestions.sprint.js.map +1 -1
  213. package/dist/epistemicQuestions.tail.d.ts +6 -6
  214. package/dist/epistemicQuestions.tail.js +572 -433
  215. package/dist/epistemicQuestions.tail.js.map +1 -1
  216. package/dist/{epistemicSources-dlKj58Jp.d.ts → epistemicSources-DQtaEkWs.d.ts} +4 -4
  217. package/dist/epistemicSources.d.ts +1 -1
  218. package/dist/epistemicSources.js +352 -312
  219. package/dist/epistemicSources.js.map +1 -1
  220. package/dist/evaluators/index.d.ts +8 -6
  221. package/dist/evaluators/index.js +399 -167
  222. package/dist/evaluators/index.js.map +1 -1
  223. package/dist/evaluators/lint-checker-evaluator.d.ts +16 -0
  224. package/dist/evaluators/{lintCheckerEvaluator.js → lint-checker-evaluator.js} +10 -5
  225. package/dist/evaluators/lint-checker-evaluator.js.map +1 -0
  226. package/dist/evaluators/{sentryCheckerEvaluator.d.ts → sentry-checker-evaluator.d.ts} +7 -2
  227. package/dist/evaluators/{sentryCheckerEvaluator.js → sentry-checker-evaluator.js} +3 -3
  228. package/dist/evaluators/sentry-checker-evaluator.js.map +1 -0
  229. package/dist/evaluators/shared.d.ts +2 -2
  230. package/dist/evaluators/shared.js +3 -1
  231. package/dist/evaluators/shared.js.map +1 -1
  232. package/dist/evaluators/{testRunnerEvaluator.d.ts → test-runner-evaluator.d.ts} +6 -1
  233. package/dist/evaluators/{testRunnerEvaluator.js → test-runner-evaluator.js} +6 -4
  234. package/dist/evaluators/test-runner-evaluator.js.map +1 -0
  235. package/dist/evaluators/tsc-checker-evaluator.d.ts +16 -0
  236. package/dist/evaluators/{tscCheckerEvaluator.js → tsc-checker-evaluator.js} +10 -5
  237. package/dist/evaluators/tsc-checker-evaluator.js.map +1 -0
  238. package/dist/graphTypes.js +6 -2
  239. package/dist/graphTypes.js.map +1 -1
  240. package/dist/helpers.d.ts +2 -0
  241. package/dist/helpers.js +313 -93
  242. package/dist/helpers.js.map +1 -1
  243. package/dist/{index-C-Kyd7hD.d.ts → index-DZxyC9Pb.d.ts} +7 -6
  244. package/dist/index.d.ts +87 -83
  245. package/dist/index.js +15677 -10594
  246. package/dist/index.js.map +1 -1
  247. package/dist/invariantEnforcement.d.ts +3 -3
  248. package/dist/invariantEnforcement.js.map +1 -1
  249. package/dist/logicalRoleInference.d.ts +2 -0
  250. package/dist/logicalRoleInference.js +1 -1
  251. package/dist/logicalRoleInference.js.map +1 -1
  252. package/dist/matcherFeedbackUtils.d.ts +2 -2
  253. package/dist/matcherFeedbackUtils.js.map +1 -1
  254. package/dist/{ontology-matching-C6rrz2VP.d.ts → ontology-matching-C-mYFrir.d.ts} +16 -16
  255. package/dist/ontology-matching.d.ts +1 -1
  256. package/dist/{ontologyApproval-CFYmqKmk.d.ts → ontologyApproval-BVt0feJi.d.ts} +10 -10
  257. package/dist/ontologyApproval.d.ts +1 -1
  258. package/dist/ontologyApproval.js +7 -1
  259. package/dist/ontologyApproval.js.map +1 -1
  260. package/dist/ontologyDefinitions.d.ts +14 -24
  261. package/dist/ontologyDefinitions.js +269 -34
  262. package/dist/ontologyDefinitions.js.map +1 -1
  263. package/dist/ontologyHelpers.d.ts +13 -13
  264. package/dist/ontologyHelpers.js.map +1 -1
  265. package/dist/{ontologyRegistry-B67rPJ16.d.ts → ontologyRegistry-CljS-ENv.d.ts} +2 -2
  266. package/dist/ontologyRegistry.d.ts +1 -1
  267. package/dist/ontologyRegistry.js +34 -6
  268. package/dist/ontologyRegistry.js.map +1 -1
  269. package/dist/{projectionReconciliation-jww2fBI0.d.ts → projectionReconciliation-DnrSgHSQ.d.ts} +4 -4
  270. package/dist/projectionReconciliation.d.ts +1 -1
  271. package/dist/projectionReconciliation.js +57 -10
  272. package/dist/projectionReconciliation.js.map +1 -1
  273. package/dist/{projectionStaleness-CmdbpjVK.d.ts → projectionStaleness-C8ImQ2zP.d.ts} +17 -17
  274. package/dist/projectionStaleness.d.ts +1 -1
  275. package/dist/projectionStaleness.js +8 -2
  276. package/dist/projectionStaleness.js.map +1 -1
  277. package/dist/proof-attestation.json +1 -1
  278. package/dist/{questionEvidenceLinks-DFlyPpAj.d.ts → questionEvidenceLinks-_nPRa-LY.d.ts} +10 -10
  279. package/dist/questionEvidenceLinks.d.ts +1 -1
  280. package/dist/questionEvidenceLinks.js +564 -347
  281. package/dist/questionEvidenceLinks.js.map +1 -1
  282. package/dist/{resolverTypes-CC8Ea2E2.d.ts → resolverTypes-BOXPxLET.d.ts} +8 -7
  283. package/dist/resolverTypes.d.ts +4 -2
  284. package/dist/{resolvers-Br1a6eLV.d.ts → resolvers-B1TIBmRO.d.ts} +3 -1
  285. package/dist/resolvers.d.ts +5 -3
  286. package/dist/resolvers.js +121 -77
  287. package/dist/resolvers.js.map +1 -1
  288. package/dist/scopeResolverCompat.d.ts +10 -7
  289. package/dist/scopeResolverCompat.js +106 -123
  290. package/dist/scopeResolverCompat.js.map +1 -1
  291. package/dist/{text-matching-DNg4M5Wd.d.ts → text-matching-DzFooju6.d.ts} +7 -7
  292. package/dist/text-matching.d.ts +1 -1
  293. package/dist/topicOntologyResolver.d.ts +22 -21
  294. package/dist/topicOntologyResolver.js +54 -32
  295. package/dist/topicOntologyResolver.js.map +1 -1
  296. package/dist/topicProjectOverlay.d.ts +30 -20
  297. package/dist/topicProjectOverlay.js +120 -76
  298. package/dist/topicProjectOverlay.js.map +1 -1
  299. package/dist/{topicScope-7zhyeGl7.d.ts → topicScope-DJVa0mLa.d.ts} +22 -7
  300. package/dist/topicScope.d.ts +3 -1
  301. package/dist/topicScope.js +104 -119
  302. package/dist/topicScope.js.map +1 -1
  303. package/dist/workflowBridge.d.ts +26 -15
  304. package/dist/workflowBridge.js +140 -144
  305. package/dist/workflowBridge.js.map +1 -1
  306. package/dist/workspaceIsolation.d.ts +14 -12
  307. package/dist/workspaceIsolation.js +108 -122
  308. package/dist/workspaceIsolation.js.map +1 -1
  309. package/package.json +4 -4
  310. package/dist/edges/dependsOn.js.map +0 -1
  311. package/dist/edges/derivedFrom.js.map +0 -1
  312. package/dist/edges/propagationTypes.js.map +0 -1
  313. package/dist/evaluators/lintCheckerEvaluator.d.ts +0 -11
  314. package/dist/evaluators/lintCheckerEvaluator.js.map +0 -1
  315. package/dist/evaluators/sentryCheckerEvaluator.js.map +0 -1
  316. package/dist/evaluators/testRunnerEvaluator.js.map +0 -1
  317. package/dist/evaluators/tscCheckerEvaluator.d.ts +0 -11
  318. package/dist/evaluators/tscCheckerEvaluator.js.map +0 -1
  319. package/dist/{epistemicQuestions-bwHd2FWE.d.ts → epistemicQuestions-Do1fhYm5.d.ts} +4 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/debug.ts","../../src/epistemicContracts.metrics.ts","../../src/epistemicContracts.evaluators.ts","../../src/evaluators/shared.ts","../../src/evaluators/lintCheckerEvaluator.ts","../../src/evaluators/sentryCheckerEvaluator.ts","../../src/evaluators/testRunnerEvaluator.ts","../../src/evaluators/tscCheckerEvaluator.ts","../../src/evaluators/index.ts"],"names":["BUILT_IN_EVIDENTIAL_ALIASES","BUILT_IN_METRIC_CHECKER","BUILT_IN_REFERENCE_CHECK_COUNTER","BUILT_IN_TEMPORAL_DEADLINE","BUILT_IN_MARKET_INDEX_COMPARATOR","parseConfig","parseDiagnostics","getMatchedDiagnostics"],"mappings":"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","file":"index.js","sourcesContent":["type GraphPrimitiveDebugEnvironment = {\n process?: {\n env?: Record<string, string | undefined>;\n };\n};\n\nfunction isGraphPrimitiveDebugEnabled(): boolean {\n const env = (globalThis as GraphPrimitiveDebugEnvironment).process?.env;\n return (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG === \"1\" ||\n env?.LUCERN_GRAPH_DEBUG === \"1\"\n );\n}\n\nexport function formatGraphPrimitiveError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error === null) {\n return \"null\";\n }\n if (error === undefined) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(error);\n } catch {\n return Object.prototype.toString.call(error);\n }\n}\n\nexport function debugGraphPrimitiveFallback(\n message: string,\n context?: Record<string, unknown>\n): void {\n if (!isGraphPrimitiveDebugEnabled()) {\n return;\n }\n console.debug(message, context ?? {});\n}\n","/** Metric helpers and evidential snapshots used by contract evaluators. */\n\nimport type { Id } from \"./convex\";\nimport {\n buildEvidentialRationale,\n buildComparisonRationale,\n compareMetricValue,\n parseMetricCheckerConfig,\n parseReferenceCheckCounterConfig,\n parseTemporalDeadlineConfig,\n parseMarketIndexComparatorConfig,\n parseEvidentialEvaluatorConfig,\n pickFiniteNumber,\n resolveComparisonResult,\n getEvaluatorInputRecord,\n} from \"./epistemicContractHelpers\";\nimport {\n type ContractDoc,\n type ContractReadCtx,\n type ContradictionStatusCounts,\n type EvidenceEdgeDoc,\n type EvidenceFreshness,\n type EvidenceNodeDoc,\n type EvidentialAction,\n type EvidentialEvaluatorConfig,\n type EvidentialMetric,\n type EvidentialMetricSnapshot,\n type EpistemicEvaluator,\n type EpistemicEvaluatorContext,\n type EpistemicEvaluatorResult,\n type MarketIndexComparatorConfig,\n type MetricCheckerEvaluatorConfig,\n type ReferenceCheckCounterConfig,\n type TemporalDeadlineEvaluatorConfig,\n} from \"./epistemicContracts.types\";\n\nconst ACTIVE_CONTRADICTION_STATUSES = new Set([\n \"unresolved\",\n \"investigating\",\n \"accepted_as_permanent\",\n]);\n\nconst DEPENDENT_EDGE_TYPES = new Set([\n \"depends_on\",\n]);\n\nfunction classifyContradictionStatus(status: unknown): \"active\" | \"resolved\" {\n if (typeof status !== \"string\") {\n return \"active\";\n }\n\n if (ACTIVE_CONTRADICTION_STATUSES.has(status)) {\n return \"active\";\n }\n\n if (\n status === \"resolved_support\" ||\n status === \"resolved_contra\" ||\n status === \"belief_forked\"\n ) {\n return \"resolved\";\n }\n\n return \"resolved\";\n}\n\nfunction getEdgeTimestamp(edge: {\n updatedAt?: unknown;\n createdAt?: unknown;\n _creationTime?: unknown;\n}): number | null {\n if (typeof edge.updatedAt === \"number\") {\n return edge.updatedAt;\n }\n if (typeof edge.createdAt === \"number\") {\n return edge.createdAt;\n }\n if (typeof edge._creationTime === \"number\") {\n return edge._creationTime;\n }\n return null;\n}\n\nasync function getEvidenceLinks(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<Array<{ edge: EvidenceEdgeDoc; node: EvidenceNodeDoc }>> {\n const edges = await (ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", beliefNodeId).eq(\"edgeType\", \"informs\")\n )\n .collect() as Promise<EvidenceEdgeDoc[]>);\n\n if (edges.length === 0) {\n return [];\n }\n\n const nodes = await Promise.all(edges.map((edge) => ctx.db.get(edge.fromNodeId)));\n return edges.flatMap((edge, index) => {\n const node = nodes[index] as EvidenceNodeDoc | null;\n if (!node || node.nodeType !== \"evidence\" || node.status === \"archived\") {\n return [];\n }\n return [{ edge, node }];\n });\n}\n\nfunction getEvidenceTags(node: EvidenceNodeDoc): string[] {\n const metadata =\n node.metadata && typeof node.metadata === \"object\"\n ? (node.metadata as Record<string, unknown>)\n : null;\n const tags = metadata?.tags;\n if (!Array.isArray(tags)) {\n return [];\n }\n return tags.filter((tag): tag is string => typeof tag === \"string\");\n}\n\nexport async function computeEvidenceCountMetric(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<number> {\n return (await getEvidenceLinks(ctx, beliefNodeId)).length;\n}\n\nasync function computeTaggedEvidenceCount(args: {\n ctx: ContractReadCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n tag: string;\n caseSensitive?: boolean;\n}): Promise<{ count: number; matchedEvidenceIds: string[] }> {\n const expectedTag = args.caseSensitive ? args.tag : args.tag.toLowerCase();\n const matchedEvidenceIds = (await getEvidenceLinks(args.ctx, args.beliefNodeId))\n .filter(({ node }) =>\n getEvidenceTags(node).some((tag) =>\n (args.caseSensitive ? tag : tag.toLowerCase()) === expectedTag\n )\n )\n .map(({ node }) => String(node._id));\n\n return {\n count: matchedEvidenceIds.length,\n matchedEvidenceIds,\n };\n}\n\nexport async function computeContradictionCounts(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<ContradictionStatusCounts> {\n const contradictions = await ((ctx.db as any)\n .query(\"contradictions\")\n .withIndex(\"by_beliefId\", (q: any) => q.eq(\"beliefId\", beliefNodeId))\n .collect() as Promise<\n Array<{ resolutionStatus?: string; status?: string }>\n >);\n\n return contradictions.reduce<ContradictionStatusCounts>(\n (counts, contradiction) => {\n const status =\n contradiction.resolutionStatus ?? contradiction.status ?? \"unresolved\";\n if (classifyContradictionStatus(status) === \"active\") {\n counts.activeCount += 1;\n } else {\n counts.resolvedCount += 1;\n }\n return counts;\n },\n { activeCount: 0, resolvedCount: 0 }\n );\n}\n\nexport async function computeEvidenceFreshness(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">,\n now = Date.now()\n): Promise<EvidenceFreshness> {\n const timestamps = (await getEvidenceLinks(ctx, beliefNodeId))\n .map(({ edge }) => getEdgeTimestamp(edge))\n .filter((value): value is number => value !== null);\n\n if (timestamps.length === 0) {\n return {\n newestAgeMs: null,\n oldestAgeMs: null,\n newestEdgeAt: null,\n oldestEdgeAt: null,\n edgeCount: 0,\n };\n }\n\n const newestEdgeAt = Math.max(...timestamps);\n const oldestEdgeAt = Math.min(...timestamps);\n\n return {\n newestAgeMs: Math.max(0, now - newestEdgeAt),\n oldestAgeMs: Math.max(0, now - oldestEdgeAt),\n newestEdgeAt,\n oldestEdgeAt,\n edgeCount: timestamps.length,\n };\n}\n\nexport async function computeDependentBeliefCount(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<number> {\n const incomingEdges = await (ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q) => q.eq(\"toNodeId\", beliefNodeId))\n .collect() as Promise<\n Array<{ fromNodeId: Id<\"epistemicNodes\">; edgeType: string }>\n >);\n\n const dependencyEdges = incomingEdges.filter((edge) =>\n DEPENDENT_EDGE_TYPES.has(edge.edgeType)\n );\n if (dependencyEdges.length === 0) {\n return 0;\n }\n\n const dependentBeliefs = await Promise.all(\n dependencyEdges.map((edge) => ctx.db.get(edge.fromNodeId))\n );\n const uniqueBeliefIds = new Set<string>();\n\n for (const node of dependentBeliefs) {\n if (\n node &&\n node.nodeType === \"belief\" &&\n node.status !== \"archived\" &&\n node.status !== \"deleted\"\n ) {\n uniqueBeliefIds.add(String(node._id));\n }\n }\n\n return uniqueBeliefIds.size;\n}\n\nasync function snapshotEvidentialMetric(args: {\n ctx: ContractReadCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n metric: EvidentialMetric;\n now: number;\n}): Promise<EvidentialMetricSnapshot> {\n switch (args.metric) {\n case \"evidence_count\": {\n const count = await computeEvidenceCountMetric(args.ctx, args.beliefNodeId);\n return {\n metric: args.metric,\n value: count,\n data: { evidenceCount: count },\n };\n }\n case \"contradiction_status\": {\n const counts = await computeContradictionCounts(args.ctx, args.beliefNodeId);\n return {\n metric: args.metric,\n value: counts.activeCount,\n data: counts,\n };\n }\n case \"edge_freshness\": {\n const freshness = await computeEvidenceFreshness(\n args.ctx,\n args.beliefNodeId,\n args.now\n );\n return {\n metric: args.metric,\n value: freshness.newestAgeMs,\n data: freshness,\n };\n }\n case \"dependent_count\": {\n const count = await computeDependentBeliefCount(args.ctx, args.beliefNodeId);\n return {\n metric: args.metric,\n value: count,\n data: { dependentCount: count },\n };\n }\n default:\n return {\n metric: args.metric,\n value: null,\n data: {},\n };\n }\n}\n\nexport async function evaluateBuiltInEvidentialContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseEvidentialEvaluatorConfig(args.contract.condition.evaluatorConfig);\n const snapshot = await snapshotEvidentialMetric({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n metric: config.metric,\n now: args.now,\n });\n\n const comparisonSatisfied =\n snapshot.value !== null &&\n compareMetricValue(config.operator, snapshot.value, config.threshold);\n const result =\n args.contract.direction === \"falsifies\"\n ? comparisonSatisfied\n ? \"disconfirmed\"\n : \"confirmed\"\n : comparisonSatisfied\n ? \"confirmed\"\n : \"disconfirmed\";\n\n return {\n result,\n rationale: buildEvidentialRationale({\n config,\n snapshot,\n comparisonSatisfied,\n result,\n }),\n data: {\n ...snapshot.data,\n metric: config.metric,\n observedValue: snapshot.value,\n operator: config.operator,\n threshold: config.threshold,\n action: config.action ?? \"append_sl_scoring\",\n actionParams: config.actionParams,\n },\n };\n}\n\nexport async function evaluateMetricCheckerContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseMetricCheckerConfig(args.contract.condition.evaluatorConfig);\n const input = getEvaluatorInputRecord(args.inputData, \"metricData\");\n const metric =\n typeof input.metric === \"string\" && input.metric.length > 0\n ? input.metric\n : config.metric;\n const observedValue =\n pickFiniteNumber(input, [\n \"observedValue\",\n \"currentValue\",\n \"metricValue\",\n \"value\",\n ]) ??\n config.observedValue ??\n config.currentValue ??\n config.metricValue ??\n null;\n if (observedValue === null) {\n return {\n result: \"inconclusive\",\n rationale: `metric_checker is awaiting data for ${metric ?? args.contract.condition.expression}.`,\n data: {\n metric,\n observedValue: null,\n operator: config.operator,\n threshold: config.threshold,\n unit: config.unit,\n },\n };\n }\n\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n observedValue,\n config.threshold\n );\n const result = resolveComparisonResult(args.contract.direction, comparisonSatisfied);\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: metric ?? \"metric\",\n observedValue,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n unit: config.unit,\n }),\n data: {\n metric,\n observedValue,\n operator: config.operator,\n threshold: config.threshold,\n unit: config.unit,\n },\n };\n}\n\nexport async function evaluateReferenceCheckCounterContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseReferenceCheckCounterConfig(args.contract.condition.evaluatorConfig);\n const input = getEvaluatorInputRecord(args.inputData, \"referenceCheckData\");\n const tag =\n typeof input.tag === \"string\" && input.tag.trim().length > 0\n ? input.tag.trim()\n : config.tag;\n const snapshot = await computeTaggedEvidenceCount({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n tag,\n caseSensitive: config.caseSensitive,\n });\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n snapshot.count,\n config.threshold\n );\n const result = resolveComparisonResult(args.contract.direction, comparisonSatisfied);\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: `reference checks tagged \"${tag}\"`,\n observedValue: snapshot.count,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n }),\n data: {\n tag,\n observedValue: snapshot.count,\n referenceCheckCount: snapshot.count,\n matchedEvidenceIds: snapshot.matchedEvidenceIds,\n operator: config.operator,\n threshold: config.threshold,\n caseSensitive: config.caseSensitive ?? false,\n },\n };\n}\n\nexport async function evaluateTemporalDeadlineContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n if (\n typeof args.contract.deadline !== \"number\" ||\n !Number.isFinite(args.contract.deadline)\n ) {\n throw new Error(\n \"temporal_deadline requires contract.deadline to be set to a finite timestamp.\"\n );\n }\n\n const config = parseTemporalDeadlineConfig(args.contract.condition.evaluatorConfig);\n const input = getEvaluatorInputRecord(args.inputData, \"temporalData\");\n const label =\n (typeof input.label === \"string\" && input.label.length > 0\n ? input.label\n : config.label) ??\n args.contract.title ??\n args.contract.condition.expression;\n const completedAt =\n pickFiniteNumber(input, [\n \"completedAt\",\n \"observedAt\",\n \"satisfiedAt\",\n \"achievedAt\",\n ]) ??\n config.completedAt ??\n config.observedAt ??\n config.satisfiedAt ??\n config.achievedAt;\n const completed =\n input.completed === true || config.completed === true || completedAt !== undefined;\n\n if (completed) {\n if (completedAt !== undefined && completedAt > args.contract.deadline) {\n return {\n result: \"expired\",\n rationale: `${label} completed at ${completedAt}, after deadline ${args.contract.deadline}.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: true,\n completedAt,\n missedDeadline: true,\n overdueByMs: completedAt - args.contract.deadline,\n },\n };\n }\n\n const result =\n args.contract.direction === \"falsifies\" ? \"disconfirmed\" : \"confirmed\";\n return {\n result,\n rationale: `${label} completed before deadline ${args.contract.deadline}.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: true,\n completedAt: completedAt ?? null,\n missedDeadline: false,\n },\n };\n }\n\n if (args.now > args.contract.deadline) {\n return {\n result: \"expired\",\n rationale: `${label} missed deadline ${args.contract.deadline}; temporal contract expired.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: false,\n overdueByMs: args.now - args.contract.deadline,\n },\n };\n }\n\n return {\n result: \"inconclusive\",\n rationale: `${label} is still before deadline ${args.contract.deadline}; awaiting outcome.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: false,\n timeRemainingMs: args.contract.deadline - args.now,\n },\n };\n}\n\nexport async function evaluateMarketIndexComparatorContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseMarketIndexComparatorConfig(args.contract.condition.evaluatorConfig);\n const input = getEvaluatorInputRecord(args.inputData, \"marketIndexData\");\n const subject =\n typeof input.subject === \"string\" && input.subject.length > 0\n ? input.subject\n : config.subject;\n const benchmark =\n typeof input.benchmark === \"string\" && input.benchmark.length > 0\n ? input.benchmark\n : config.benchmark;\n const subjectValue =\n pickFiniteNumber(input, [\"subjectValue\", \"primaryValue\", \"leftValue\"]) ??\n config.subjectValue ??\n config.primaryValue ??\n null;\n const benchmarkValue =\n pickFiniteNumber(input, [\"benchmarkValue\", \"comparisonValue\", \"rightValue\"]) ??\n config.benchmarkValue ??\n config.comparisonValue ??\n null;\n\n if (subjectValue === null || benchmarkValue === null) {\n return {\n result: \"inconclusive\",\n rationale: \"market_index_comparator is awaiting both subject and benchmark values.\",\n data: {\n subject,\n subjectValue,\n benchmark,\n benchmarkValue,\n operator: config.operator,\n threshold: config.threshold,\n },\n };\n }\n\n if (benchmarkValue === 0) {\n throw new Error(\n \"market_index_comparator cannot compare against a zero benchmark value.\"\n );\n }\n\n const differentialPercent =\n ((subjectValue - benchmarkValue) / Math.abs(benchmarkValue)) * 100;\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n differentialPercent,\n config.threshold\n );\n const result = resolveComparisonResult(args.contract.direction, comparisonSatisfied);\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: `${subject ?? \"subject\"} vs ${benchmark ?? \"benchmark\"} differential`,\n observedValue: differentialPercent,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n unit: \"%\",\n }),\n data: {\n subject,\n subjectValue,\n benchmark,\n benchmarkValue,\n differentialPercent,\n operator: config.operator,\n threshold: config.threshold,\n },\n };\n}\n\nexport const METRIC_COMPARATOR_EVALUATOR_NAMES = {\n evidential: \"evidential\",\n evidentialAliases: new Set([\"evidential\", \"built_in_evidential\", \"builtin_evidential\"]),\n metricChecker: \"metric_checker\",\n referenceCheckCounter: \"reference_check_counter\",\n temporalDeadline: \"temporal_deadline\",\n marketIndexComparator: \"market_index_comparator\",\n};\n","/** Evaluator registry and contract execution logic for epistemic contracts. */\n\nimport type { Id, MutationCtx } from \"./convex\";\nimport { applyBeliefConfidenceChange } from \"./epistemicBeliefs\";\nimport {\n deriveContractModulationPlan,\n deriveContractStatus,\n} from \"./epistemicContractHelpers\";\nimport {\n evaluateBuiltInEvidentialContract,\n evaluateMarketIndexComparatorContract,\n evaluateMetricCheckerContract,\n evaluateReferenceCheckCounterContract,\n evaluateTemporalDeadlineContract,\n METRIC_COMPARATOR_EVALUATOR_NAMES,\n} from \"./epistemicContracts.metrics\";\nimport {\n type BeliefNodeDoc,\n type ContractDoc,\n type ContractEvaluationExecution,\n type EpistemicEvaluator,\n type EpistemicEvaluatorResult,\n type TriggerBatchResult,\n} from \"./epistemicContracts.types\";\nimport {\n ENGINEERING_EPISTEMIC_EVALUATORS,\n} from \"./evaluators\";\n\nconst evaluatorRegistry = new Map<string, EpistemicEvaluator>();\nconst BUILT_IN_EVIDENTIAL_ALIASES = METRIC_COMPARATOR_EVALUATOR_NAMES.evidentialAliases;\nconst BUILT_IN_METRIC_CHECKER = METRIC_COMPARATOR_EVALUATOR_NAMES.metricChecker;\nconst BUILT_IN_REFERENCE_CHECK_COUNTER =\n METRIC_COMPARATOR_EVALUATOR_NAMES.referenceCheckCounter;\nconst BUILT_IN_TEMPORAL_DEADLINE = METRIC_COMPARATOR_EVALUATOR_NAMES.temporalDeadline;\nconst BUILT_IN_MARKET_INDEX_COMPARATOR =\n METRIC_COMPARATOR_EVALUATOR_NAMES.marketIndexComparator;\nconst MAX_CONTRACT_EVALUATION_BATCH_SIZE = 50;\n\nexport function clearEpistemicEvaluators(): void {\n evaluatorRegistry.clear();\n ensureBuiltInEvaluators();\n}\n\nexport function registerEpistemicEvaluator(\n evaluator: EpistemicEvaluator\n): void {\n ensureBuiltInEvaluators();\n evaluatorRegistry.set(evaluator.name, evaluator);\n}\n\nexport function getRegisteredEpistemicEvaluators(): string[] {\n ensureBuiltInEvaluators();\n return Array.from(evaluatorRegistry.keys()).sort();\n}\n\nfunction ensureBuiltInEvaluators(): void {\n for (const name of BUILT_IN_EVIDENTIAL_ALIASES) {\n if (evaluatorRegistry.has(name)) {\n continue;\n }\n evaluatorRegistry.set(name, {\n name,\n evaluate: evaluateBuiltInEvidentialContract,\n });\n }\n\n for (const evaluator of ENGINEERING_EPISTEMIC_EVALUATORS) {\n if (evaluatorRegistry.has(evaluator.name)) {\n continue;\n }\n evaluatorRegistry.set(evaluator.name, evaluator);\n }\n\n const researchEvaluators: Array<[string, EpistemicEvaluator[\"evaluate\"]]> = [\n [BUILT_IN_METRIC_CHECKER, evaluateMetricCheckerContract],\n [BUILT_IN_REFERENCE_CHECK_COUNTER, evaluateReferenceCheckCounterContract],\n [BUILT_IN_TEMPORAL_DEADLINE, evaluateTemporalDeadlineContract],\n [BUILT_IN_MARKET_INDEX_COMPARATOR, evaluateMarketIndexComparatorContract],\n ];\n\n for (const [name, evaluate] of researchEvaluators) {\n if (evaluatorRegistry.has(name)) {\n continue;\n }\n evaluatorRegistry.set(name, { name, evaluate });\n }\n}\n\nfunction normalizeTrigger(trigger?: string): string {\n if (trigger === \"evidence_added\") {\n return \"evidence_added\";\n }\n if (trigger === \"periodic\") {\n return \"periodic\";\n }\n if (trigger === \"manual\") {\n return \"manual\";\n }\n return \"event_driven\";\n}\n\nfunction resolveSchedulesForTrigger(trigger: string): Set<string> {\n if (trigger === \"evidence_added\") {\n return new Set([\"on_evidence\", \"event_driven\"]);\n }\n if (trigger === \"periodic\") {\n return new Set([\"periodic\"]);\n }\n if (trigger === \"manual\") {\n return new Set([\"on_demand\", \"event_driven\"]);\n }\n return new Set([\"event_driven\"]);\n}\n\nexport async function executeContractEvaluation(args: {\n ctx: MutationCtx;\n belief: BeliefNodeDoc;\n contract: ContractDoc;\n now: number;\n trigger: string;\n inputData?: unknown;\n authenticatedUserId: string;\n currentConfidence?: number;\n resultData?: unknown;\n}): Promise<ContractEvaluationExecution> {\n ensureBuiltInEvaluators();\n\n const evaluator = evaluatorRegistry.get(args.contract.condition.evaluator);\n let evaluation: EpistemicEvaluatorResult;\n if (evaluator) {\n try {\n evaluation = await evaluator.evaluate({\n belief: args.belief,\n contract: args.contract,\n ctx: args.ctx,\n now: args.now,\n resultData: args.resultData,\n trigger: args.trigger,\n inputData: args.inputData,\n });\n } catch (error) {\n evaluation = {\n result: \"error\",\n rationale:\n error instanceof Error ? error.message : \"Unknown evaluator error.\",\n };\n }\n } else {\n evaluation = {\n result: \"error\",\n rationale: `No epistemic evaluator registered for \"${args.contract.condition.evaluator}\".`,\n };\n }\n\n const confidenceBefore =\n typeof args.currentConfidence === \"number\"\n ? args.currentConfidence\n : typeof args.belief.confidence === \"number\"\n ? args.belief.confidence\n : 0.5;\n const modulationPlan = deriveContractModulationPlan({\n currentConfidence: confidenceBefore,\n modulation: args.contract.modulation,\n result: evaluation.result,\n resultConfidence: evaluation.confidence,\n });\n\n let beliefConfidenceId: Id<\"beliefConfidence\"> | undefined;\n let confidenceAfter = confidenceBefore;\n if (modulationPlan) {\n // EK-7: Convert contract modulation to SL opinion.\n // Contract modulations are dogmatic (certainty=1) → u=0.\n const contractB = Math.max(0, Math.min(1, modulationPlan.confidenceAfter));\n const modulationResult = await applyBeliefConfidenceChange(args.ctx, {\n nodeId: args.contract.beliefNodeId,\n belief: contractB,\n disbelief: 1 - contractB,\n uncertainty: 0,\n baseRate: 0.5,\n trigger: modulationPlan.trigger,\n rationale: `Epistemic contract \"${args.contract.title}\" ${evaluation.result}: ${evaluation.rationale}`,\n authenticatedUserId: args.authenticatedUserId,\n });\n beliefConfidenceId = modulationResult.beliefConfidenceId;\n confidenceAfter =\n typeof modulationResult.newConfidence === \"number\"\n ? modulationResult.newConfidence\n : modulationPlan.confidenceAfter;\n }\n\n const evaluationId = await (args.ctx.db as any).insert(\"contractEvaluations\", {\n contractId: args.contract.contractId,\n beliefNodeId: args.contract.beliefNodeId,\n result: evaluation.result,\n evaluatedAt: args.now,\n evaluator: args.contract.condition.evaluator,\n trigger: args.trigger,\n resultData: evaluation.data,\n modulationApplied: Boolean(modulationPlan),\n confidenceDelta: modulationPlan?.confidenceDelta,\n confidenceBefore: modulationPlan?.confidenceBefore,\n confidenceAfter: modulationPlan ? confidenceAfter : undefined,\n beliefConfidenceId,\n modulationRationale: evaluation.rationale,\n topicId: args.contract.topicId,\n } as any);\n\n const nextStatus = deriveContractStatus(evaluation.result, args.contract.status);\n await args.ctx.db.patch(\n args.contract._id as any,\n {\n status: nextStatus,\n lastEvaluatedAt: args.now,\n evaluationCount: (args.contract.evaluationCount ?? 0) + 1,\n updatedAt: args.now,\n } as any\n );\n\n return {\n evaluationId,\n result: evaluation.result,\n status: nextStatus,\n confidenceBefore,\n confidenceAfter,\n rationale: evaluation.rationale,\n data: evaluation.data,\n currentConfidence: confidenceAfter,\n };\n}\n\nexport async function evaluateContractsForTriggerBatch(args: {\n ctx: MutationCtx;\n belief: BeliefNodeDoc;\n trigger: string;\n inputData?: unknown;\n authenticatedUserId: string;\n contractIds?: string[];\n maxBatchSize?: number;\n}): Promise<TriggerBatchResult> {\n const startedAt = Date.now();\n const contracts = await loadContractsForTrigger({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n trigger: normalizeTrigger(args.trigger),\n contractIds: args.contractIds,\n });\n const batchLimit = Math.max(\n 1,\n Math.min(\n args.maxBatchSize ?? MAX_CONTRACT_EVALUATION_BATCH_SIZE,\n MAX_CONTRACT_EVALUATION_BATCH_SIZE\n )\n );\n const currentBatch = contracts.slice(0, batchLimit);\n const overflowContracts = contracts.slice(batchLimit);\n\n let runningConfidence =\n typeof args.belief.confidence === \"number\" ? args.belief.confidence : 0.5;\n const results: TriggerBatchResult[\"results\"] = [];\n\n for (const contract of currentBatch) {\n const evaluation = await executeContractEvaluation({\n ctx: args.ctx,\n belief: args.belief,\n contract,\n now: Date.now(),\n trigger: normalizeTrigger(args.trigger),\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n currentConfidence: runningConfidence,\n });\n runningConfidence = evaluation.currentConfidence;\n args.belief.confidence = runningConfidence;\n results.push({\n contractId: contract.contractId,\n result: evaluation.result,\n status: evaluation.status,\n confidenceAfter: evaluation.confidenceAfter,\n });\n }\n\n if (overflowContracts.length > 0) {\n await args.ctx.scheduler.runAfter(\n 0,\n \"epistemicContracts.processContractEvaluationOverflow\" as any,\n {\n beliefNodeId: args.belief._id,\n trigger: normalizeTrigger(args.trigger),\n contractIds: overflowContracts.map((contract) => contract.contractId),\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n maxBatchSize: batchLimit,\n }\n );\n }\n\n const executionTimeMs = Date.now() - startedAt;\n console.info(\"[epistemicContracts] processed contract evaluation batch\", {\n beliefNodeId: String(args.belief._id),\n trigger: normalizeTrigger(args.trigger),\n batchSize: currentBatch.length,\n overflowCount: overflowContracts.length,\n executionTimeMs,\n });\n\n return {\n totalContracts: contracts.length,\n processedCount: currentBatch.length,\n overflowCount: overflowContracts.length,\n scheduledOverflow: overflowContracts.length > 0,\n batchSize: currentBatch.length,\n executionTimeMs,\n trigger: normalizeTrigger(args.trigger),\n results,\n };\n}\n\nexport async function loadContractsForBelief(args: {\n ctx: MutationCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n}): Promise<ContractDoc[]> {\n return await ((args.ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q: any) => q.eq(\"beliefNodeId\", args.beliefNodeId))\n .collect() as Promise<ContractDoc[]>);\n}\n\nasync function loadContractsForTrigger(args: {\n ctx: MutationCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n trigger: string;\n contractIds?: string[];\n}): Promise<ContractDoc[]> {\n const contracts = await loadContractsForBelief(args);\n\n ensureBuiltInEvaluators();\n const allowedSchedules = resolveSchedulesForTrigger(args.trigger);\n const contractIdFilter =\n args.contractIds && args.contractIds.length > 0\n ? new Set(args.contractIds)\n : null;\n\n return contracts.filter((contract) => {\n if (contract.status === \"archived\") {\n return false;\n }\n if (contract.conditionType === \"composite\") {\n return false;\n }\n if (!evaluatorRegistry.has(contract.condition.evaluator)) {\n return false;\n }\n if (contractIdFilter) {\n return contractIdFilter.has(contract.contractId);\n }\n return allowedSchedules.has(contract.evaluationSchedule);\n });\n}\n","/** Shared evaluator helpers and result-normalization utilities. */\n\nimport type {\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n} from \"../epistemicContractHelpers\";\nimport { debugGraphPrimitiveFallback } from \"../debug\";\n\nexport type ToolResultEnvelope = {\n command?: string;\n data?: unknown;\n exitCode?: number | null;\n output?: string;\n report?: unknown;\n stderr?: string;\n stdout?: string;\n};\n\ntype AnyRecord = Record<string, unknown>;\n\nexport function asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nexport function asNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nexport function asRecord(value: unknown): AnyRecord | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as AnyRecord)\n : null;\n}\n\nexport function asString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : null;\n}\n\nexport function deriveDirectionalResult(\n direction: EpistemicContractDirection,\n conditionSatisfied: boolean,\n): EpistemicContractEvaluationResult {\n if (direction === \"falsifies\") {\n return conditionSatisfied ? \"disconfirmed\" : \"confirmed\";\n }\n return conditionSatisfied ? \"confirmed\" : \"disconfirmed\";\n}\n\nexport function extractTextCandidates(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n const candidate = asString(value);\n return candidate ? [candidate] : [];\n }\n\n const candidates = [\n record.stdout,\n record.stderr,\n record.output,\n record.text,\n record.message,\n record.raw,\n ]\n .map(asString)\n .filter((candidate): candidate is string => Boolean(candidate));\n\n for (const nestedKey of [\"report\", \"result\", \"data\", \"payload\"]) {\n const nested = record[nestedKey];\n if (nested !== value) {\n candidates.push(...extractTextCandidates(nested));\n }\n }\n\n return Array.from(new Set(candidates));\n}\n\nexport function normalizeFilePath(value: string): string {\n return value.replace(/\\\\/g, \"/\").replace(/^\\.\\//, \"\");\n}\n\nexport function normalizeToolResultEnvelope(\n value: unknown,\n): ToolResultEnvelope {\n const record = asRecord(value);\n if (!record) {\n return {\n output: asString(value) ?? undefined,\n };\n }\n\n const exitCode =\n asNumber(record.exitCode) ??\n asNumber(record.code) ??\n asNumber(record.status) ??\n null;\n\n return {\n command: asString(record.command) ?? undefined,\n data: record.data ?? record.payload,\n exitCode,\n output: asString(record.output) ?? undefined,\n report:\n record.report ??\n record.json ??\n record.result ??\n record.payload ??\n undefined,\n stderr: asString(record.stderr) ?? undefined,\n stdout: asString(record.stdout) ?? undefined,\n };\n}\n\nexport function parseJsonCandidate<T = unknown>(value: unknown): T | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value !== \"string\") {\n return value as T;\n }\n\n try {\n return JSON.parse(value) as T;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[evaluators/shared] Failed to parse JSON candidate\",\n {\n error,\n valueType: typeof value,\n },\n );\n return null;\n }\n}\n\nexport function patternMatchesPath(filePath: string, pattern: string): boolean {\n const normalizedPath = normalizeFilePath(filePath);\n const normalizedPattern = normalizeFilePath(pattern);\n const escaped = normalizedPattern.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regexPattern = escaped\n .replace(/\\\\\\*\\\\\\*/g, \".*\")\n .replace(/\\\\\\*/g, \"[^/]*\")\n .replace(/\\\\\\?/g, \"[^/]\");\n return new RegExp(`^${regexPattern}$`).test(normalizedPath);\n}\n\nexport function somePatternMatches(\n filePath: string | null | undefined,\n patterns: string[],\n): boolean {\n if (!filePath) {\n return false;\n }\n return patterns.some((pattern) => patternMatchesPath(filePath, pattern));\n}\n","/** Lint-based engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n somePatternMatches,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype ParsedLintDiagnostic = {\n filePath: string | null;\n message: string;\n severity: string;\n};\n\ntype LintCheckerConfig = {\n filePatterns: string[];\n linter: \"biome\";\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): LintCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"lint_checker requires evaluatorConfig with { filePatterns: string[], linter: \\\"biome\\\" }.\"\n );\n }\n\n const filePatterns = asArray(record.filePatterns)\n .map(asString)\n .filter((pattern): pattern is string => Boolean(pattern));\n if (filePatterns.length === 0) {\n throw new Error(\"lint_checker requires at least one file pattern.\");\n }\n\n const linter = asString(record.linter);\n if (linter !== \"biome\") {\n throw new Error(`Unsupported linter: ${String(record.linter)}`);\n }\n\n return {\n filePatterns,\n linter,\n };\n}\n\nfunction parseDiagnostics(resultData: unknown): ParsedLintDiagnostic[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ?? asRecord(envelope.data) ?? asRecord(resultData);\n if (!record) {\n return [];\n }\n\n return asArray(record.diagnostics)\n .map((entry) => {\n const diagnostic = asRecord(entry);\n if (!diagnostic) {\n return null;\n }\n const location = asRecord(diagnostic.location);\n const pathRecord = asRecord(location?.path);\n const filePath =\n asString(diagnostic.filePath) ??\n asString(diagnostic.file) ??\n asString(location?.filePath) ??\n asString(pathRecord?.file);\n const severity = asString(diagnostic.severity) ?? \"error\";\n const message =\n asString(diagnostic.message) ??\n asString(diagnostic.description) ??\n \"Lint issue\";\n return {\n filePath: filePath ? normalizeFilePath(filePath) : null,\n message,\n severity,\n };\n })\n .filter(\n (diagnostic): diagnostic is ParsedLintDiagnostic => Boolean(diagnostic)\n );\n}\n\nfunction getMatchedDiagnostics(\n contract: AnyContract,\n resultData: unknown\n): ParsedLintDiagnostic[] {\n const config = parseConfig(contract.condition);\n return parseDiagnostics(resultData).filter((diagnostic) =>\n somePatternMatches(diagnostic.filePath, config.filePatterns)\n );\n}\n\nexport const lintCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"lint_checker\",\n matches({ contract, resultData }) {\n const envelope = normalizeToolResultEnvelope(resultData);\n const exitCode = asNumber(envelope.exitCode);\n if (exitCode === 0) {\n return true;\n }\n return getMatchedDiagnostics(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"lint_checker requires Biome lint resultData.\",\n };\n }\n\n const envelope = normalizeToolResultEnvelope(args.resultData);\n const exitCode = asNumber(envelope.exitCode);\n const matchedDiagnostics = getMatchedDiagnostics(args.contract, args.resultData);\n\n if (matchedDiagnostics.length === 0 && exitCode !== 0 && exitCode !== null) {\n return {\n result: \"inconclusive\",\n rationale:\n \"Biome reported issues, but none matched the configured file patterns.\",\n };\n }\n\n const conditionSatisfied =\n exitCode === 0 || (exitCode !== null && matchedDiagnostics.length === 0);\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Biome reported no matching lint diagnostics for ${config.filePatterns.join(\", \")}.`\n : `Biome reported ${matchedDiagnostics.length} matching issue(s): ${matchedDiagnostics\n .map((diagnostic) =>\n diagnostic.filePath\n ? `${diagnostic.filePath} (${diagnostic.severity})`\n : diagnostic.message\n )\n .join(\", \")}.`,\n data: {\n exitCode,\n filePatterns: config.filePatterns,\n linter: config.linter,\n matchedDiagnostics,\n },\n };\n },\n};\n","/** Sentry-backed engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n normalizeToolResultEnvelope,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype SentryCheckerConfig = {\n module: string;\n windowDays: number;\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): SentryCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"sentry_checker requires evaluatorConfig with { module, windowDays }.\"\n );\n }\n\n const moduleName = asString(record.module);\n const windowDays = asNumber(record.windowDays);\n if (!moduleName || windowDays === null) {\n throw new Error(\n \"sentry_checker requires a module name and numeric windowDays.\"\n );\n }\n\n return {\n module: moduleName,\n windowDays,\n };\n}\n\nfunction parseIncidentCount(resultData: unknown): {\n incidentCount: number | null;\n moduleName: string | null;\n windowDays: number | null;\n} {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record = asRecord(envelope.report) ?? asRecord(envelope.data) ?? asRecord(resultData);\n if (!record) {\n return {\n incidentCount: null,\n moduleName: null,\n windowDays: null,\n };\n }\n\n const incidents = asArray(record.incidents);\n const incidentCount =\n asNumber(record.incidentCount) ??\n (incidents.length > 0 ? incidents.length : null);\n\n return {\n incidentCount,\n moduleName: asString(record.module),\n windowDays: asNumber(record.windowDays),\n };\n}\n\nfunction matchesModule(contract: AnyContract, resultData: unknown): boolean {\n const config = parseConfig(contract.condition);\n const payload = parseIncidentCount(resultData);\n return !payload.moduleName || payload.moduleName === config.module;\n}\n\nexport const sentryCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"sentry_checker\",\n matches({ contract, resultData }) {\n return matchesModule(contract, resultData);\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"sentry_checker requires incident count resultData.\",\n };\n }\n\n const payload = parseIncidentCount(args.resultData);\n if (payload.incidentCount === null) {\n return {\n result: \"error\",\n rationale: \"sentry_checker could not determine an incident count.\",\n };\n }\n if (!matchesModule(args.contract, args.resultData)) {\n return {\n result: \"inconclusive\",\n rationale: `Sentry result targeted ${payload.moduleName}, not ${config.module}.`,\n };\n }\n\n const conditionSatisfied = payload.incidentCount === 0;\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Sentry reported zero incidents for ${config.module} over ${config.windowDays} day(s).`\n : `Sentry reported ${payload.incidentCount} incident(s) for ${config.module} over ${config.windowDays} day(s).`,\n data: {\n incidentCount: payload.incidentCount,\n module: config.module,\n windowDays: config.windowDays,\n },\n };\n },\n};\n","/** Test-runner engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluator,\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asRecord,\n asString,\n deriveDirectionalResult,\n extractTextCandidates,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n parseJsonCandidate,\n patternMatchesPath,\n} from \"./shared\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype ParsedSuite = {\n failedTests: string[];\n filePath: string;\n passedTests: string[];\n};\n\ntype TestRunnerConfig = {\n runner: \"vitest\";\n testPattern: string;\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): TestRunnerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"test_runner requires evaluatorConfig with { testPattern, runner: \\\"vitest\\\" }.\"\n );\n }\n\n const testPattern = asString(record.testPattern);\n if (!testPattern) {\n throw new Error(\"test_runner requires a non-empty testPattern.\");\n }\n\n const runner = asString(record.runner);\n if (runner !== \"vitest\") {\n throw new Error(`Unsupported test runner: ${String(record.runner)}`);\n }\n\n return {\n runner,\n testPattern,\n };\n}\n\nfunction collectFailedTests(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n return [];\n }\n\n const fullName = asString(record.fullName);\n const title = asString(record.title);\n const label = fullName ?? title ?? \"unnamed test\";\n const status = asString(record.status);\n const state = asString(asRecord(record.result)?.state);\n const isFailed =\n status === \"failed\" ||\n status === \"fail\" ||\n state === \"failed\" ||\n state === \"fail\";\n\n const failures = isFailed ? [label] : [];\n for (const nestedKey of [\"assertionResults\", \"tests\", \"tasks\"]) {\n for (const nested of asArray(record[nestedKey])) {\n failures.push(...collectFailedTests(nested));\n }\n }\n\n return failures;\n}\n\nfunction collectPassedTests(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n return [];\n }\n\n const fullName = asString(record.fullName);\n const title = asString(record.title);\n const label = fullName ?? title ?? \"unnamed test\";\n const status = asString(record.status);\n const state = asString(asRecord(record.result)?.state);\n const isPassed = status === \"passed\" || state === \"passed\";\n\n const passed = isPassed ? [label] : [];\n for (const nestedKey of [\"assertionResults\", \"tests\", \"tasks\"]) {\n for (const nested of asArray(record[nestedKey])) {\n passed.push(...collectPassedTests(nested));\n }\n }\n\n return passed;\n}\n\nfunction parseSuite(value: unknown): ParsedSuite | null {\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n\n const filePath =\n asString(record.name) ??\n asString(record.file) ??\n asString(record.filePath) ??\n asString(record.filepath);\n if (!filePath) {\n return null;\n }\n\n return {\n failedTests: Array.from(new Set(collectFailedTests(record))),\n filePath: normalizeFilePath(filePath),\n passedTests: Array.from(new Set(collectPassedTests(record))),\n };\n}\n\nfunction parseVitestSuites(resultData: unknown): ParsedSuite[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const candidates = [\n envelope.report,\n envelope.data,\n envelope.stdout,\n envelope.output,\n ...extractTextCandidates(resultData),\n ];\n\n for (const candidate of candidates) {\n const parsed = parseJsonCandidate(candidate);\n const report = asRecord(parsed);\n if (!report) {\n continue;\n }\n\n const suites = asArray(report.testResults)\n .map(parseSuite)\n .filter((suite): suite is ParsedSuite => Boolean(suite));\n if (suites.length > 0) {\n return suites;\n }\n\n const fileSuites = asArray(report.files)\n .map(parseSuite)\n .filter((suite): suite is ParsedSuite => Boolean(suite));\n if (fileSuites.length > 0) {\n return fileSuites;\n }\n }\n\n return [];\n}\n\nfunction getMatchedSuites(\n contract: AnyContract,\n resultData: unknown\n): ParsedSuite[] {\n const config = parseConfig(contract.condition);\n return parseVitestSuites(resultData).filter((suite) =>\n patternMatchesPath(suite.filePath, config.testPattern)\n );\n}\n\nexport type EngineeringEpistemicEvaluator = EpistemicEvaluator & {\n matches(args: { contract: AnyContract; resultData: unknown }): boolean;\n};\n\nexport const testRunnerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"test_runner\",\n matches({ contract, resultData }) {\n return getMatchedSuites(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n const matchedSuites = getMatchedSuites(args.contract, args.resultData);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"test_runner requires Vitest JSON resultData.\",\n };\n }\n if (matchedSuites.length === 0) {\n return {\n result: \"inconclusive\",\n rationale: `No Vitest suites matched ${config.testPattern}.`,\n };\n }\n\n const failedTests = matchedSuites.flatMap((suite) => suite.failedTests);\n const passedTests = matchedSuites.flatMap((suite) => suite.passedTests);\n const conditionSatisfied = failedTests.length === 0;\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Vitest matched ${matchedSuites.length} suite(s) for ${config.testPattern}; all ${passedTests.length} test assertions passed.`\n : `Vitest matched ${matchedSuites.length} suite(s) for ${config.testPattern}; failing tests: ${failedTests.join(\", \")}.`,\n data: {\n runner: config.runner,\n testPattern: config.testPattern,\n matchedFiles: matchedSuites.map((suite) => suite.filePath),\n failedTests,\n passedTestCount: passedTests.length,\n },\n };\n },\n};\n","/** Typecheck-based engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n extractTextCandidates,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n somePatternMatches,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype ParsedDiagnostic = {\n code?: string;\n filePath: string | null;\n message: string;\n};\n\ntype TscCheckerConfig = {\n filePatterns: string[];\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): TscCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"tsc_checker requires evaluatorConfig with { filePatterns: string[] }.\"\n );\n }\n\n const filePatterns = asArray(record.filePatterns)\n .map(asString)\n .filter((pattern): pattern is string => Boolean(pattern));\n if (filePatterns.length === 0) {\n throw new Error(\"tsc_checker requires at least one file pattern.\");\n }\n\n return { filePatterns };\n}\n\nfunction parseStructuredDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ?? asRecord(envelope.data) ?? asRecord(resultData);\n if (!record) {\n return [];\n }\n\n return asArray(record.diagnostics).flatMap((entry): ParsedDiagnostic[] => {\n const diagnostic = asRecord(entry);\n if (!diagnostic) {\n return [];\n }\n const filePath =\n asString(diagnostic.filePath) ??\n asString(diagnostic.file) ??\n asString(asRecord(diagnostic.location)?.filePath) ??\n asString(asRecord(asRecord(diagnostic.location)?.path)?.file);\n const message = asString(diagnostic.message) ?? \"TypeScript error\";\n return [\n {\n code: asString(diagnostic.code) ?? undefined,\n filePath: filePath ? normalizeFilePath(filePath) : null,\n message,\n },\n ];\n });\n}\n\nfunction parseTextDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const diagnostics: ParsedDiagnostic[] = [];\n const patterns = [\n /^(.+?)\\((\\d+),(\\d+)\\): error TS(\\d+): (.+)$/gm,\n /^(.+?):(\\d+):(\\d+) - error TS(\\d+): (.+)$/gm,\n ];\n\n for (const text of extractTextCandidates(resultData)) {\n for (const pattern of patterns) {\n for (const match of text.matchAll(pattern)) {\n diagnostics.push({\n code: match[4],\n filePath: normalizeFilePath(match[1] ?? \"\"),\n message: match[5] ?? \"TypeScript error\",\n });\n }\n }\n }\n\n return diagnostics;\n}\n\nfunction parseDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const structured = parseStructuredDiagnostics(resultData);\n return structured.length > 0 ? structured : parseTextDiagnostics(resultData);\n}\n\nfunction getMatchedDiagnostics(\n contract: AnyContract,\n resultData: unknown\n): ParsedDiagnostic[] {\n const config = parseConfig(contract.condition);\n return parseDiagnostics(resultData).filter((diagnostic) =>\n somePatternMatches(diagnostic.filePath, config.filePatterns)\n );\n}\n\nexport const tscCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"tsc_checker\",\n matches({ contract, resultData }) {\n const envelope = normalizeToolResultEnvelope(resultData);\n const exitCode = asNumber(envelope.exitCode);\n if (exitCode === 0) {\n return true;\n }\n return getMatchedDiagnostics(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"tsc_checker requires TypeScript diagnostic resultData.\",\n };\n }\n\n const envelope = normalizeToolResultEnvelope(args.resultData);\n const exitCode = asNumber(envelope.exitCode);\n const matchedDiagnostics = getMatchedDiagnostics(args.contract, args.resultData);\n\n if (matchedDiagnostics.length === 0 && exitCode !== 0 && exitCode !== null) {\n return {\n result: \"inconclusive\",\n rationale:\n \"TypeScript reported errors, but none matched the configured file patterns.\",\n };\n }\n\n const conditionSatisfied =\n exitCode === 0 || (exitCode !== null && matchedDiagnostics.length === 0);\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `TypeScript reported no matching diagnostics for ${config.filePatterns.join(\", \")}.`\n : `TypeScript found ${matchedDiagnostics.length} matching diagnostic(s): ${matchedDiagnostics\n .map((diagnostic) =>\n diagnostic.filePath\n ? `${diagnostic.filePath}${diagnostic.code ? ` (TS${diagnostic.code})` : \"\"}`\n : diagnostic.message\n )\n .join(\", \")}.`,\n data: {\n exitCode,\n filePatterns: config.filePatterns,\n matchedDiagnostics,\n },\n };\n },\n};\n","import type { EpistemicEvaluator } from \"../epistemicContracts\";\nimport { getRegisteredEpistemicEvaluators } from \"../epistemicContracts\";\nimport { lintCheckerEvaluator } from \"./lintCheckerEvaluator\";\nimport { sentryCheckerEvaluator } from \"./sentryCheckerEvaluator\";\nimport { testRunnerEvaluator } from \"./testRunnerEvaluator\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\nimport { tscCheckerEvaluator } from \"./tscCheckerEvaluator\";\n\nexport const ENGINEERING_EPISTEMIC_EVALUATORS: EngineeringEpistemicEvaluator[] =\n [\n testRunnerEvaluator,\n tscCheckerEvaluator,\n lintCheckerEvaluator,\n sentryCheckerEvaluator,\n ];\n\nexport const ENGINEERING_EVALUATOR_NAMES = new Set(\n ENGINEERING_EPISTEMIC_EVALUATORS.map((evaluator) => evaluator.name)\n);\n\nexport function getEngineeringEpistemicEvaluator(\n name: string\n): EngineeringEpistemicEvaluator | undefined {\n return ENGINEERING_EPISTEMIC_EVALUATORS.find(\n (evaluator) => evaluator.name === name\n );\n}\n\nexport function registerAllEngineeringEvaluators(\n registerEvaluator: (evaluator: EpistemicEvaluator) => void\n): void {\n for (const evaluator of ENGINEERING_EPISTEMIC_EVALUATORS) {\n registerEvaluator(evaluator);\n }\n}\n\nexport { lintCheckerEvaluator } from \"./lintCheckerEvaluator\";\nexport { sentryCheckerEvaluator } from \"./sentryCheckerEvaluator\";\nexport { testRunnerEvaluator } from \"./testRunnerEvaluator\";\nexport { tscCheckerEvaluator } from \"./tscCheckerEvaluator\";\n\nexport const RESEARCH_EVALUATOR_NAMES = [\n \"market_index_comparator\",\n \"metric_checker\",\n \"reference_check_counter\",\n \"temporal_deadline\",\n] as const;\n\nexport type ResearchEvaluatorName = (typeof RESEARCH_EVALUATOR_NAMES)[number];\n\nexport function registerAllResearchEvaluators(): ResearchEvaluatorName[] {\n const registered = new Set(getRegisteredEpistemicEvaluators());\n return RESEARCH_EVALUATOR_NAMES.filter((name) => registered.has(name));\n}\n"]}
1
+ {"version":3,"sources":["../../src/debug.ts","../../src/epistemicContracts.metrics.ts","../../src/epistemicContracts.evaluators.ts","../../src/epistemicContracts.ts","../../src/evaluators/shared.ts","../../src/evaluators/lint-checker-evaluator.ts","../../src/evaluators/sentry-checker-evaluator.ts","../../src/evaluators/test-runner-evaluator.ts","../../src/evaluators/tsc-checker-evaluator.ts","../../src/evaluators/index.ts"],"names":["BUILT_IN_EVIDENTIAL_ALIASES","BUILT_IN_METRIC_CHECKER","BUILT_IN_REFERENCE_CHECK_COUNTER","BUILT_IN_TEMPORAL_DEADLINE","BUILT_IN_MARKET_INDEX_COMPARATOR","getRegisteredEpistemicEvaluators","parseConfig","parseDiagnostics","getMatchedDiagnostics","lintCheckerEvaluator","sentryCheckerEvaluator","testRunnerEvaluator","tscCheckerEvaluator"],"mappings":"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","file":"index.js","sourcesContent":["interface GraphPrimitiveDebugEnvironment {\n process?: {\n env?: Record<string, string | undefined>;\n };\n}\n\nfunction isGraphPrimitiveDebugEnabled(): boolean {\n const env = (globalThis as GraphPrimitiveDebugEnvironment).process?.env;\n return (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG === \"1\" || env?.LUCERN_GRAPH_DEBUG === \"1\"\n );\n}\n\nexport function formatGraphPrimitiveError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error === null) {\n return \"null\";\n }\n if (error === undefined) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(error);\n } catch {\n return Object.prototype.toString.call(error);\n }\n}\n\nexport function debugGraphPrimitiveFallback(\n message: string,\n context?: Record<string, unknown>\n): void {\n if (!isGraphPrimitiveDebugEnabled()) {\n return;\n }\n console.debug(message, context ?? {});\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Metric helpers and evidential snapshots used by contract evaluators. */\n\nimport type { Id } from \"./convex\";\nimport {\n buildComparisonRationale,\n buildEvidentialRationale,\n compareMetricValue,\n getEvaluatorInputRecord,\n parseEvidentialEvaluatorConfig,\n parseMarketIndexComparatorConfig,\n parseMetricCheckerConfig,\n parseReferenceCheckCounterConfig,\n parseTemporalDeadlineConfig,\n pickFiniteNumber,\n resolveComparisonResult,\n} from \"./epistemicContractHelpers\";\nimport type {\n ContractReadCtx,\n ContradictionStatusCounts,\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n EvidenceEdgeDoc,\n EvidenceFreshness,\n EvidenceNodeDoc,\n EvidentialMetric,\n EvidentialMetricSnapshot,\n} from \"./epistemicContracts.types\";\n\nconst ACTIVE_CONTRADICTION_STATUSES = new Set([\n \"unresolved\",\n \"investigating\",\n \"accepted_as_permanent\",\n]);\n\nconst DEPENDENT_EDGE_TYPES = new Set([\"depends_on\"]);\n\ninterface ContradictionIndexQuery {\n eq(field: \"beliefId\", value: Id<\"epistemicNodes\">): ContradictionIndexQuery;\n}\n\ninterface ContradictionQuery {\n withIndex(\n index: \"by_beliefId\",\n builder: (q: ContradictionIndexQuery) => ContradictionIndexQuery\n ): {\n collect(): Promise<ContradictionStatusRow[]>;\n };\n}\n\ninterface ContradictionReadDb {\n query(table: \"contradictions\"): ContradictionQuery;\n}\n\ninterface ContradictionStatusRow {\n resolutionStatus?: string;\n status?: string;\n}\n\ninterface MetricNodeDoc extends EvidenceNodeDoc {\n nodeType: string;\n}\n\ninterface IncomingEdgeRow extends EvidenceEdgeDoc {\n _id?: Id<\"epistemicEdges\">;\n edgeType?: string;\n targetGlobalId?: string;\n toGlobalId?: string;\n toNodeId?: string;\n toUuid?: string;\n}\n\nfunction classifyContradictionStatus(status: unknown): \"active\" | \"resolved\" {\n if (typeof status !== \"string\") {\n return \"active\";\n }\n\n if (ACTIVE_CONTRADICTION_STATUSES.has(status)) {\n return \"active\";\n }\n\n if (\n status === \"resolved_support\" ||\n status === \"resolved_contra\" ||\n status === \"belief_forked\"\n ) {\n return \"resolved\";\n }\n\n return \"resolved\";\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readOptionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | undefined {\n const normalized = readOptionalString(value);\n return normalized as Id<TableName> | undefined;\n}\n\nfunction readMetricNodeDoc(value: unknown): MetricNodeDoc | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(value._id);\n const nodeType = readOptionalString(value.nodeType);\n if (!(id && nodeType)) {\n return null;\n }\n\n const node: MetricNodeDoc = { _id: id, nodeType };\n const globalId = readOptionalString(value.globalId);\n if (globalId !== undefined) {\n node.globalId = globalId;\n }\n if (\"metadata\" in value) {\n node.metadata = value.metadata;\n }\n const status = readOptionalString(value.status);\n if (status !== undefined) {\n node.status = status;\n }\n return node;\n}\n\nfunction readIncomingEdgeRow(value: unknown): IncomingEdgeRow | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const fromNodeId = readOptionalString(value.fromNodeId);\n if (!fromNodeId) {\n return null;\n }\n\n const edge: IncomingEdgeRow = { fromNodeId };\n const id = readConvexId<\"epistemicEdges\">(value._id);\n if (id !== undefined) {\n edge._id = id;\n }\n const edgeType = readOptionalString(value.edgeType);\n if (edgeType !== undefined) {\n edge.edgeType = edgeType;\n }\n const fromGlobalId = readOptionalString(value.fromGlobalId);\n if (fromGlobalId !== undefined) {\n edge.fromGlobalId = fromGlobalId;\n }\n const fromUuid = readOptionalString(value.fromUuid);\n if (fromUuid !== undefined) {\n edge.fromUuid = fromUuid;\n }\n const sourceGlobalId = readOptionalString(value.sourceGlobalId);\n if (sourceGlobalId !== undefined) {\n edge.sourceGlobalId = sourceGlobalId;\n }\n const targetGlobalId = readOptionalString(value.targetGlobalId);\n if (targetGlobalId !== undefined) {\n edge.targetGlobalId = targetGlobalId;\n }\n const toGlobalId = readOptionalString(value.toGlobalId);\n if (toGlobalId !== undefined) {\n edge.toGlobalId = toGlobalId;\n }\n const toNodeId = readOptionalString(value.toNodeId);\n if (toNodeId !== undefined) {\n edge.toNodeId = toNodeId;\n }\n const toUuid = readOptionalString(value.toUuid);\n if (toUuid !== undefined) {\n edge.toUuid = toUuid;\n }\n const weight = readOptionalNumber(value.weight);\n if (weight !== undefined) {\n edge.weight = weight;\n }\n\n for (const timestampField of [\"_creationTime\", \"createdAt\", \"updatedAt\"]) {\n const timestamp = readOptionalNumber(value[timestampField]);\n if (timestamp !== undefined) {\n edge[timestampField as \"_creationTime\" | \"createdAt\" | \"updatedAt\"] =\n timestamp;\n }\n }\n\n return edge;\n}\n\nfunction getEdgeTimestamp(edge: {\n updatedAt?: unknown;\n createdAt?: unknown;\n _creationTime?: unknown;\n}): number | null {\n if (typeof edge.updatedAt === \"number\") {\n return edge.updatedAt;\n }\n if (typeof edge.createdAt === \"number\") {\n return edge.createdAt;\n }\n if (typeof edge._creationTime === \"number\") {\n return edge._creationTime;\n }\n return null;\n}\n\nasync function collectNodeEndpointRefs(\n ctx: ContractReadCtx,\n nodeId: Id<\"epistemicNodes\">\n): Promise<string[]> {\n const refs = new Set<string>([String(nodeId)]);\n const node = readMetricNodeDoc(await ctx.db.get(nodeId));\n if (node?.globalId) {\n refs.add(node.globalId);\n }\n return [...refs];\n}\n\nasync function collectIncomingEdgeRows(\n ctx: ContractReadCtx,\n nodeId: Id<\"epistemicNodes\">,\n edgeType?: string\n): Promise<IncomingEdgeRow[]> {\n const refs = await collectNodeEndpointRefs(ctx, nodeId);\n const seen = new Set<string>();\n const edges: IncomingEdgeRow[] = [];\n\n for (const ref of refs) {\n const rows =\n edgeType === undefined\n ? await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q) => q.eq(\"toNodeId\", ref))\n .collect()\n : await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", ref).eq(\"edgeType\", edgeType)\n )\n .collect();\n\n for (const row of rows) {\n const edge = readIncomingEdgeRow(row);\n if (!edge) {\n continue;\n }\n if (edgeType !== undefined && edge.edgeType !== edgeType) {\n continue;\n }\n const key =\n edge._id === undefined\n ? `${edge.fromNodeId}->${edge.toNodeId ?? ref}:${edge.edgeType ?? \"\"}`\n : String(edge._id);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n edges.push(edge);\n }\n }\n\n return edges;\n}\n\nfunction sourceEndpointRefs(edge: IncomingEdgeRow): string[] {\n return [\n edge.fromNodeId,\n edge.sourceGlobalId,\n edge.fromGlobalId,\n edge.fromUuid,\n ].filter((value): value is string => value !== undefined);\n}\n\nasync function resolveEndpointNode(\n ctx: ContractReadCtx,\n refs: readonly string[]\n): Promise<MetricNodeDoc | null> {\n const candidates = refs\n .map((value) => value.trim())\n .filter(\n (value, index, values) =>\n value.length > 0 && values.indexOf(value) === index\n );\n\n for (const candidate of candidates) {\n try {\n const direct = readMetricNodeDoc(\n await ctx.db.get(candidate as Id<\"epistemicNodes\">)\n );\n if (direct) {\n return direct;\n }\n } catch {\n // Canonical global endpoints are expected to miss direct document lookup.\n }\n\n const byGlobalId = readMetricNodeDoc(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", candidate))\n .first()\n );\n if (byGlobalId) {\n return byGlobalId;\n }\n }\n\n return null;\n}\n\nasync function getEvidenceLinks(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<Array<{ edge: EvidenceEdgeDoc; node: EvidenceNodeDoc }>> {\n const edges = await collectIncomingEdgeRows(ctx, beliefNodeId, \"informs\");\n\n if (edges.length === 0) {\n return [];\n }\n\n const links: Array<{ edge: EvidenceEdgeDoc; node: EvidenceNodeDoc }> = [];\n for (const edge of edges) {\n const node = await resolveEndpointNode(ctx, sourceEndpointRefs(edge));\n if (node?.nodeType !== \"evidence\" || node.status === \"archived\") {\n continue;\n }\n links.push({ edge, node });\n }\n\n return links;\n}\n\nfunction getEvidenceTags(node: EvidenceNodeDoc): string[] {\n const metadata =\n node.metadata && typeof node.metadata === \"object\"\n ? (node.metadata as Record<string, unknown>)\n : null;\n const tags = metadata?.tags;\n if (!Array.isArray(tags)) {\n return [];\n }\n return tags.filter((tag): tag is string => typeof tag === \"string\");\n}\n\nexport async function computeEvidenceCountMetric(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<number> {\n return (await getEvidenceLinks(ctx, beliefNodeId)).length;\n}\n\nasync function computeTaggedEvidenceCount(args: {\n ctx: ContractReadCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n tag: string;\n caseSensitive?: boolean;\n}): Promise<{ count: number; matchedEvidenceIds: string[] }> {\n const expectedTag = args.caseSensitive ? args.tag : args.tag.toLowerCase();\n const matchedEvidenceIds = (\n await getEvidenceLinks(args.ctx, args.beliefNodeId)\n )\n .filter(({ node }) =>\n getEvidenceTags(node).some(\n (tag) => (args.caseSensitive ? tag : tag.toLowerCase()) === expectedTag\n )\n )\n .map(({ node }) => String(node._id));\n\n return {\n count: matchedEvidenceIds.length,\n matchedEvidenceIds,\n };\n}\n\nexport async function computeContradictionCounts(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<ContradictionStatusCounts> {\n const contradictionDb = ctx.db as unknown as ContradictionReadDb;\n const contradictions = await contradictionDb\n .query(\"contradictions\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", beliefNodeId))\n .collect();\n\n return contradictions.reduce<ContradictionStatusCounts>(\n (counts, contradiction) => {\n const status =\n contradiction.resolutionStatus ?? contradiction.status ?? \"unresolved\";\n if (classifyContradictionStatus(status) === \"active\") {\n counts.activeCount += 1;\n } else {\n counts.resolvedCount += 1;\n }\n return counts;\n },\n { activeCount: 0, resolvedCount: 0 }\n );\n}\n\nexport async function computeEvidenceFreshness(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">,\n now = Date.now()\n): Promise<EvidenceFreshness> {\n const timestamps = (await getEvidenceLinks(ctx, beliefNodeId))\n .map(({ edge }) => getEdgeTimestamp(edge))\n .filter((value): value is number => value !== null);\n\n if (timestamps.length === 0) {\n return {\n newestAgeMs: null,\n oldestAgeMs: null,\n newestEdgeAt: null,\n oldestEdgeAt: null,\n edgeCount: 0,\n };\n }\n\n const newestEdgeAt = Math.max(...timestamps);\n const oldestEdgeAt = Math.min(...timestamps);\n\n return {\n newestAgeMs: Math.max(0, now - newestEdgeAt),\n oldestAgeMs: Math.max(0, now - oldestEdgeAt),\n newestEdgeAt,\n oldestEdgeAt,\n edgeCount: timestamps.length,\n };\n}\n\nexport async function computeDependentBeliefCount(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<number> {\n const incomingEdges = await collectIncomingEdgeRows(ctx, beliefNodeId);\n\n const dependencyEdges = incomingEdges.filter((edge) =>\n edge.edgeType ? DEPENDENT_EDGE_TYPES.has(edge.edgeType) : false\n );\n if (dependencyEdges.length === 0) {\n return 0;\n }\n\n const uniqueBeliefIds = new Set<string>();\n\n for (const edge of dependencyEdges) {\n const node = await resolveEndpointNode(ctx, sourceEndpointRefs(edge));\n if (\n node &&\n node.nodeType === \"belief\" &&\n node.status !== \"archived\" &&\n node.status !== \"deleted\"\n ) {\n uniqueBeliefIds.add(String(node._id));\n }\n }\n\n return uniqueBeliefIds.size;\n}\n\nasync function snapshotEvidentialMetric(args: {\n ctx: ContractReadCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n metric: EvidentialMetric;\n now: number;\n}): Promise<EvidentialMetricSnapshot> {\n switch (args.metric) {\n case \"evidence_count\": {\n const count = await computeEvidenceCountMetric(\n args.ctx,\n args.beliefNodeId\n );\n return {\n metric: args.metric,\n value: count,\n data: { evidenceCount: count },\n };\n }\n case \"contradiction_status\": {\n const counts = await computeContradictionCounts(\n args.ctx,\n args.beliefNodeId\n );\n return {\n metric: args.metric,\n value: counts.activeCount,\n data: counts as unknown as Record<string, unknown>,\n };\n }\n case \"edge_freshness\": {\n const freshness = await computeEvidenceFreshness(\n args.ctx,\n args.beliefNodeId,\n args.now\n );\n return {\n metric: args.metric,\n value: freshness.newestAgeMs,\n data: freshness as unknown as Record<string, unknown>,\n };\n }\n case \"dependent_count\": {\n const count = await computeDependentBeliefCount(\n args.ctx,\n args.beliefNodeId\n );\n return {\n metric: args.metric,\n value: count,\n data: { dependentCount: count },\n };\n }\n default:\n return {\n metric: args.metric,\n value: null,\n data: {},\n };\n }\n}\n\nexport async function evaluateBuiltInEvidentialContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseEvidentialEvaluatorConfig(\n args.contract.condition.evaluatorConfig\n );\n const snapshot = await snapshotEvidentialMetric({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n metric: config.metric,\n now: args.now,\n });\n\n const comparisonSatisfied =\n snapshot.value !== null &&\n compareMetricValue(config.operator, snapshot.value, config.threshold);\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildEvidentialRationale({\n config,\n snapshot,\n comparisonSatisfied,\n result,\n }),\n data: {\n ...snapshot.data,\n metric: config.metric,\n observedValue: snapshot.value,\n operator: config.operator,\n threshold: config.threshold,\n action: config.action ?? \"append_sl_scoring\",\n actionParams: config.actionParams,\n },\n };\n}\n\nexport function evaluateMetricCheckerContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n return Promise.resolve().then(() => {\n const config = parseMetricCheckerConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"metricData\");\n const metric =\n typeof input.metric === \"string\" && input.metric.length > 0\n ? input.metric\n : config.metric;\n const observedValue =\n pickFiniteNumber(input, [\n \"observedValue\",\n \"currentValue\",\n \"metricValue\",\n \"value\",\n ]) ??\n config.observedValue ??\n config.currentValue ??\n config.metricValue ??\n null;\n if (observedValue === null) {\n return {\n result: \"inconclusive\",\n rationale: `metric_checker is awaiting data for ${metric ?? args.contract.condition.expression}.`,\n data: {\n metric,\n observedValue: null,\n operator: config.operator,\n threshold: config.threshold,\n unit: config.unit,\n },\n };\n }\n\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n observedValue,\n config.threshold\n );\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: metric ?? \"metric\",\n observedValue,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n unit: config.unit,\n }),\n data: {\n metric,\n observedValue,\n operator: config.operator,\n threshold: config.threshold,\n unit: config.unit,\n },\n };\n });\n}\n\nexport async function evaluateReferenceCheckCounterContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseReferenceCheckCounterConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"referenceCheckData\");\n const tag =\n typeof input.tag === \"string\" && input.tag.trim().length > 0\n ? input.tag.trim()\n : config.tag;\n const snapshot = await computeTaggedEvidenceCount({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n tag,\n caseSensitive: config.caseSensitive,\n });\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n snapshot.count,\n config.threshold\n );\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: `reference checks tagged \"${tag}\"`,\n observedValue: snapshot.count,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n }),\n data: {\n tag,\n observedValue: snapshot.count,\n referenceCheckCount: snapshot.count,\n matchedEvidenceIds: snapshot.matchedEvidenceIds,\n operator: config.operator,\n threshold: config.threshold,\n caseSensitive: config.caseSensitive ?? false,\n },\n };\n}\n\nfunction resolveCompletedTemporalDeadlineResult(args: {\n completedAt: number | undefined;\n context: EpistemicEvaluatorContext;\n deadline: number;\n label: string;\n}): EpistemicEvaluatorResult {\n const { completedAt, context, deadline, label } = args;\n if (completedAt !== undefined && completedAt > deadline) {\n return {\n result: \"expired\",\n rationale: `${label} completed at ${completedAt}, after deadline ${deadline}.`,\n data: {\n label,\n deadline,\n completed: true,\n completedAt,\n missedDeadline: true,\n overdueByMs: completedAt - deadline,\n },\n };\n }\n\n const result =\n context.contract.direction === \"falsifies\" ? \"disconfirmed\" : \"confirmed\";\n return {\n result,\n rationale: `${label} completed before deadline ${deadline}.`,\n data: {\n label,\n deadline,\n completed: true,\n completedAt: completedAt ?? null,\n missedDeadline: false,\n },\n };\n}\n\nfunction resolveOpenTemporalDeadlineResult(args: {\n context: EpistemicEvaluatorContext;\n deadline: number;\n label: string;\n}): EpistemicEvaluatorResult {\n const { context, deadline, label } = args;\n if (context.now > deadline) {\n return {\n result: \"expired\",\n rationale: `${label} missed deadline ${deadline}; temporal contract expired.`,\n data: {\n label,\n deadline,\n completed: false,\n overdueByMs: context.now - deadline,\n },\n };\n }\n\n return {\n result: \"inconclusive\",\n rationale: `${label} is still before deadline ${deadline}; awaiting outcome.`,\n data: {\n label,\n deadline,\n completed: false,\n timeRemainingMs: deadline - context.now,\n },\n };\n}\n\nexport function evaluateTemporalDeadlineContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n return Promise.resolve().then(() => {\n if (\n typeof args.contract.deadline !== \"number\" ||\n !Number.isFinite(args.contract.deadline)\n ) {\n throw new Error(\n \"temporal_deadline requires contract.deadline to be set to a finite timestamp.\"\n );\n }\n const deadline = args.contract.deadline;\n\n const config = parseTemporalDeadlineConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"temporalData\");\n const label =\n (typeof input.label === \"string\" && input.label.length > 0\n ? input.label\n : config.label) ??\n args.contract.title ??\n args.contract.condition.expression;\n const completedAt =\n pickFiniteNumber(input, [\n \"completedAt\",\n \"observedAt\",\n \"satisfiedAt\",\n \"achievedAt\",\n ]) ??\n config.completedAt ??\n config.observedAt ??\n config.satisfiedAt ??\n config.achievedAt;\n const completed =\n input.completed === true ||\n config.completed === true ||\n completedAt !== undefined;\n\n if (completed) {\n return resolveCompletedTemporalDeadlineResult({\n completedAt,\n context: args,\n deadline,\n label,\n });\n }\n\n return resolveOpenTemporalDeadlineResult({\n context: args,\n deadline,\n label,\n });\n });\n}\n\nexport function evaluateMarketIndexComparatorContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n return Promise.resolve().then(() => {\n const config = parseMarketIndexComparatorConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"marketIndexData\");\n const subject =\n typeof input.subject === \"string\" && input.subject.length > 0\n ? input.subject\n : config.subject;\n const benchmark =\n typeof input.benchmark === \"string\" && input.benchmark.length > 0\n ? input.benchmark\n : config.benchmark;\n const subjectValue =\n pickFiniteNumber(input, [\"subjectValue\", \"primaryValue\", \"leftValue\"]) ??\n config.subjectValue ??\n config.primaryValue ??\n null;\n const benchmarkValue =\n pickFiniteNumber(input, [\n \"benchmarkValue\",\n \"comparisonValue\",\n \"rightValue\",\n ]) ??\n config.benchmarkValue ??\n config.comparisonValue ??\n null;\n\n if (subjectValue === null || benchmarkValue === null) {\n return {\n result: \"inconclusive\",\n rationale:\n \"market_index_comparator is awaiting both subject and benchmark values.\",\n data: {\n subject,\n subjectValue,\n benchmark,\n benchmarkValue,\n operator: config.operator,\n threshold: config.threshold,\n },\n };\n }\n\n if (benchmarkValue === 0) {\n throw new Error(\n \"market_index_comparator cannot compare against a zero benchmark value.\"\n );\n }\n\n const differentialPercent =\n ((subjectValue - benchmarkValue) / Math.abs(benchmarkValue)) * 100;\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n differentialPercent,\n config.threshold\n );\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: `${subject ?? \"subject\"} vs ${benchmark ?? \"benchmark\"} differential`,\n observedValue: differentialPercent,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n unit: \"%\",\n }),\n data: {\n subject,\n subjectValue,\n benchmark,\n benchmarkValue,\n differentialPercent,\n operator: config.operator,\n threshold: config.threshold,\n },\n };\n });\n}\n\nexport const METRIC_COMPARATOR_EVALUATOR_NAMES = {\n evidential: \"evidential\",\n evidentialAliases: new Set([\n \"evidential\",\n \"built_in_evidential\",\n \"builtin_evidential\",\n ]),\n metricChecker: \"metric_checker\",\n referenceCheckCounter: \"reference_check_counter\",\n temporalDeadline: \"temporal_deadline\",\n marketIndexComparator: \"market_index_comparator\",\n};\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Evaluator registry and contract execution logic for epistemic contracts. */\n\nimport type { Id, MutationCtx } from \"./convex\";\nimport { applyBeliefConfidenceChange } from \"./epistemicBeliefs\";\nimport {\n deriveContractModulationPlan,\n deriveContractStatus,\n} from \"./epistemicContractHelpers\";\nimport {\n evaluateBuiltInEvidentialContract,\n evaluateMarketIndexComparatorContract,\n evaluateMetricCheckerContract,\n evaluateReferenceCheckCounterContract,\n evaluateTemporalDeadlineContract,\n METRIC_COMPARATOR_EVALUATOR_NAMES,\n} from \"./epistemicContracts.metrics\";\nimport type {\n BeliefNodeDoc,\n ContractDoc,\n ContractEvaluationExecution,\n EpistemicEvaluator,\n EpistemicEvaluatorResult,\n TriggerBatchResult,\n} from \"./epistemicContracts.types\";\nimport { ENGINEERING_EPISTEMIC_EVALUATORS } from \"./evaluators\";\n\nconst evaluatorRegistry = new Map<string, EpistemicEvaluator>();\nconst BUILT_IN_EVIDENTIAL_ALIASES =\n METRIC_COMPARATOR_EVALUATOR_NAMES.evidentialAliases;\nconst BUILT_IN_METRIC_CHECKER = METRIC_COMPARATOR_EVALUATOR_NAMES.metricChecker;\nconst BUILT_IN_REFERENCE_CHECK_COUNTER =\n METRIC_COMPARATOR_EVALUATOR_NAMES.referenceCheckCounter;\nconst BUILT_IN_TEMPORAL_DEADLINE =\n METRIC_COMPARATOR_EVALUATOR_NAMES.temporalDeadline;\nconst BUILT_IN_MARKET_INDEX_COMPARATOR =\n METRIC_COMPARATOR_EVALUATOR_NAMES.marketIndexComparator;\nconst MAX_CONTRACT_EVALUATION_BATCH_SIZE = 50;\n\nfunction confidenceSeed(args: {\n beliefConfidence?: number;\n currentConfidence?: number;\n}): number {\n if (typeof args.currentConfidence === \"number\") {\n return args.currentConfidence;\n }\n if (typeof args.beliefConfidence === \"number\") {\n return args.beliefConfidence;\n }\n return 0.5;\n}\n\nfunction contractDocId(contract: ContractDoc): Id<\"epistemicContracts\"> {\n return contract._id as Id<\"epistemicContracts\">;\n}\n\nexport function clearEpistemicEvaluators(): void {\n evaluatorRegistry.clear();\n ensureBuiltInEvaluators();\n}\n\nexport function registerEpistemicEvaluator(\n evaluator: EpistemicEvaluator\n): void {\n ensureBuiltInEvaluators();\n evaluatorRegistry.set(evaluator.name, evaluator);\n}\n\nexport function getRegisteredEpistemicEvaluators(): string[] {\n ensureBuiltInEvaluators();\n return Array.from(evaluatorRegistry.keys()).sort();\n}\n\nfunction ensureBuiltInEvaluators(): void {\n for (const name of BUILT_IN_EVIDENTIAL_ALIASES) {\n if (evaluatorRegistry.has(name)) {\n continue;\n }\n evaluatorRegistry.set(name, {\n name,\n evaluate: evaluateBuiltInEvidentialContract,\n });\n }\n\n for (const evaluator of ENGINEERING_EPISTEMIC_EVALUATORS) {\n if (evaluatorRegistry.has(evaluator.name)) {\n continue;\n }\n evaluatorRegistry.set(evaluator.name, evaluator);\n }\n\n const researchEvaluators: [string, EpistemicEvaluator[\"evaluate\"]][] = [\n [BUILT_IN_METRIC_CHECKER, evaluateMetricCheckerContract],\n [BUILT_IN_REFERENCE_CHECK_COUNTER, evaluateReferenceCheckCounterContract],\n [BUILT_IN_TEMPORAL_DEADLINE, evaluateTemporalDeadlineContract],\n [BUILT_IN_MARKET_INDEX_COMPARATOR, evaluateMarketIndexComparatorContract],\n ];\n\n for (const [name, evaluate] of researchEvaluators) {\n if (evaluatorRegistry.has(name)) {\n continue;\n }\n evaluatorRegistry.set(name, { name, evaluate });\n }\n}\n\nfunction normalizeTrigger(trigger?: string): string {\n if (trigger === \"evidence_added\") {\n return \"evidence_added\";\n }\n if (trigger === \"periodic\") {\n return \"periodic\";\n }\n if (trigger === \"manual\") {\n return \"manual\";\n }\n return \"event_driven\";\n}\n\nfunction resolveSchedulesForTrigger(trigger: string): Set<string> {\n if (trigger === \"evidence_added\") {\n return new Set([\"on_evidence\", \"event_driven\"]);\n }\n if (trigger === \"periodic\") {\n return new Set([\"periodic\"]);\n }\n if (trigger === \"manual\") {\n return new Set([\"on_demand\", \"event_driven\"]);\n }\n return new Set([\"event_driven\"]);\n}\n\nexport async function executeContractEvaluation(args: {\n ctx: MutationCtx;\n belief: BeliefNodeDoc;\n contract: ContractDoc;\n now: number;\n trigger: string;\n inputData?: unknown;\n authenticatedUserId: string;\n currentConfidence?: number;\n resultData?: unknown;\n}): Promise<ContractEvaluationExecution> {\n ensureBuiltInEvaluators();\n\n const evaluator = evaluatorRegistry.get(args.contract.condition.evaluator);\n let evaluation: EpistemicEvaluatorResult;\n if (evaluator) {\n try {\n evaluation = await evaluator.evaluate({\n belief: args.belief,\n contract: args.contract,\n ctx: args.ctx,\n now: args.now,\n resultData: args.resultData,\n trigger: args.trigger,\n inputData: args.inputData,\n });\n } catch (error) {\n evaluation = {\n result: \"error\",\n rationale:\n error instanceof Error ? error.message : \"Unknown evaluator error.\",\n };\n }\n } else {\n evaluation = {\n result: \"error\",\n rationale: `No epistemic evaluator registered for \"${args.contract.condition.evaluator}\".`,\n };\n }\n\n const confidenceBefore = confidenceSeed({\n beliefConfidence: args.belief.confidence,\n currentConfidence: args.currentConfidence,\n });\n const modulationPlan = deriveContractModulationPlan({\n currentConfidence: confidenceBefore,\n modulation: args.contract.modulation,\n result: evaluation.result,\n resultConfidence: evaluation.confidence,\n });\n\n let beliefConfidenceId: Id<\"beliefConfidence\"> | undefined;\n let confidenceAfter = confidenceBefore;\n if (modulationPlan) {\n // EK-7: Convert contract modulation to SL opinion.\n // Contract modulations are dogmatic (certainty=1) → u=0.\n const contractB = Math.max(0, Math.min(1, modulationPlan.confidenceAfter));\n const modulationResult = await applyBeliefConfidenceChange(args.ctx, {\n nodeId: args.contract.beliefNodeId,\n belief: contractB,\n disbelief: 1 - contractB,\n uncertainty: 0,\n baseRate: 0.5,\n trigger: modulationPlan.trigger,\n rationale: `Epistemic contract \"${args.contract.title}\" ${evaluation.result}: ${evaluation.rationale}`,\n authenticatedUserId: args.authenticatedUserId,\n });\n beliefConfidenceId = modulationResult.beliefConfidenceId;\n confidenceAfter =\n typeof modulationResult.newConfidence === \"number\"\n ? modulationResult.newConfidence\n : modulationPlan.confidenceAfter;\n }\n\n const evaluationId = await args.ctx.db.insert(\"contractEvaluations\", {\n contractId: args.contract.contractId,\n beliefNodeId: args.contract.beliefNodeId,\n result: evaluation.result,\n evaluatedAt: args.now,\n evaluator: args.contract.condition.evaluator,\n trigger: args.trigger,\n resultData: evaluation.data,\n modulationApplied: Boolean(modulationPlan),\n confidenceDelta: modulationPlan?.confidenceDelta,\n confidenceBefore: modulationPlan?.confidenceBefore,\n confidenceAfter: modulationPlan ? confidenceAfter : undefined,\n beliefConfidenceId,\n modulationRationale: evaluation.rationale,\n topicId: args.contract.topicId,\n });\n\n const nextStatus = deriveContractStatus(\n evaluation.result,\n args.contract.status\n );\n await args.ctx.db.patch(contractDocId(args.contract), {\n status: nextStatus,\n lastEvaluatedAt: args.now,\n evaluationCount: (args.contract.evaluationCount ?? 0) + 1,\n updatedAt: args.now,\n });\n\n return {\n evaluationId,\n result: evaluation.result,\n status: nextStatus,\n confidenceBefore,\n confidenceAfter,\n rationale: evaluation.rationale,\n data: evaluation.data,\n currentConfidence: confidenceAfter,\n };\n}\n\nexport async function evaluateContractsForTriggerBatch(args: {\n ctx: MutationCtx;\n belief: BeliefNodeDoc;\n trigger: string;\n inputData?: unknown;\n authenticatedUserId: string;\n contractIds?: string[];\n maxBatchSize?: number;\n}): Promise<TriggerBatchResult> {\n const startedAt = Date.now();\n const contracts = await loadContractsForTrigger({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n trigger: normalizeTrigger(args.trigger),\n contractIds: args.contractIds,\n });\n const batchLimit = Math.max(\n 1,\n Math.min(\n args.maxBatchSize ?? MAX_CONTRACT_EVALUATION_BATCH_SIZE,\n MAX_CONTRACT_EVALUATION_BATCH_SIZE\n )\n );\n const currentBatch = contracts.slice(0, batchLimit);\n const overflowContracts = contracts.slice(batchLimit);\n\n let runningConfidence =\n typeof args.belief.confidence === \"number\" ? args.belief.confidence : 0.5;\n const results: TriggerBatchResult[\"results\"] = [];\n\n for (const contract of currentBatch) {\n const evaluation = await executeContractEvaluation({\n ctx: args.ctx,\n belief: args.belief,\n contract,\n now: Date.now(),\n trigger: normalizeTrigger(args.trigger),\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n currentConfidence: runningConfidence,\n });\n runningConfidence = evaluation.currentConfidence;\n args.belief.confidence = runningConfidence;\n results.push({\n contractId: contract.contractId,\n result: evaluation.result,\n status: evaluation.status,\n confidenceAfter: evaluation.confidenceAfter,\n });\n }\n\n if (overflowContracts.length > 0) {\n await args.ctx.scheduler.runAfter(\n 0,\n \"epistemicContracts.processContractEvaluationOverflow\",\n {\n beliefNodeId: args.belief._id,\n trigger: normalizeTrigger(args.trigger),\n contractIds: overflowContracts.map((contract) => contract.contractId),\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n maxBatchSize: batchLimit,\n }\n );\n }\n\n const executionTimeMs = Date.now() - startedAt;\n console.info(\"[epistemicContracts] processed contract evaluation batch\", {\n beliefNodeId: String(args.belief._id),\n trigger: normalizeTrigger(args.trigger),\n batchSize: currentBatch.length,\n overflowCount: overflowContracts.length,\n executionTimeMs,\n });\n\n return {\n totalContracts: contracts.length,\n processedCount: currentBatch.length,\n overflowCount: overflowContracts.length,\n scheduledOverflow: overflowContracts.length > 0,\n batchSize: currentBatch.length,\n executionTimeMs,\n trigger: normalizeTrigger(args.trigger),\n results,\n };\n}\n\nexport async function loadContractsForBelief(args: {\n ctx: MutationCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n}): Promise<ContractDoc[]> {\n const rows = await args.ctx.db\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q) => q.eq(\"beliefNodeId\", args.beliefNodeId))\n .collect();\n return rows as unknown as ContractDoc[];\n}\n\nasync function loadContractsForTrigger(args: {\n ctx: MutationCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n trigger: string;\n contractIds?: string[];\n}): Promise<ContractDoc[]> {\n const contracts = await loadContractsForBelief(args);\n\n ensureBuiltInEvaluators();\n const allowedSchedules = resolveSchedulesForTrigger(args.trigger);\n const contractIdFilter =\n args.contractIds && args.contractIds.length > 0\n ? new Set(args.contractIds)\n : null;\n\n return contracts.filter((contract) => {\n if (contract.status === \"archived\") {\n return false;\n }\n if (contract.conditionType === \"composite\") {\n return false;\n }\n if (!evaluatorRegistry.has(contract.condition.evaluator)) {\n return false;\n }\n if (contractIdFilter) {\n return contractIdFilter.has(contract.contractId);\n }\n return allowedSchedules.has(contract.evaluationSchedule);\n });\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Facade for split epistemic contract primitives and public contract operations. */\n\nimport {\n clearEpistemicEvaluators as clearEpistemicEvaluatorsImpl,\n getRegisteredEpistemicEvaluators as getRegisteredEpistemicEvaluatorsImpl,\n registerEpistemicEvaluator as registerEpistemicEvaluatorImpl,\n} from \"./epistemicContracts.evaluators\";\nimport {\n createEpistemicContract as createEpistemicContractImpl,\n evaluateContract as evaluateContractImpl,\n evaluateContractsForTrigger as evaluateContractsForTriggerImpl,\n evaluateContradictionStatus as evaluateContradictionStatusImpl,\n evaluateDependentBeliefCount as evaluateDependentBeliefCountImpl,\n evaluateEdgeFreshness as evaluateEdgeFreshnessImpl,\n evaluateEngineeringContracts as evaluateEngineeringContractsImpl,\n evaluateEvidenceCount as evaluateEvidenceCountImpl,\n getContractCoverage as getContractCoverageImpl,\n getContractStatus as getContractStatusImpl,\n inheritContractsForFork as inheritContractsForForkImpl,\n processContractEvaluationOverflow as processContractEvaluationOverflowImpl,\n} from \"./epistemicContracts.handlers\";\nimport type {\n EpistemicEvaluatorContext as EpistemicEvaluatorContextType,\n EpistemicEvaluatorResult as EpistemicEvaluatorResultType,\n EpistemicEvaluator as EpistemicEvaluatorType,\n} from \"./epistemicContracts.types\";\n\nexport type EpistemicEvaluator = EpistemicEvaluatorType;\nexport type EpistemicEvaluatorContext = EpistemicEvaluatorContextType;\nexport type EpistemicEvaluatorResult = EpistemicEvaluatorResultType;\n\nexport const clearEpistemicEvaluators = clearEpistemicEvaluatorsImpl;\nexport const getRegisteredEpistemicEvaluators =\n getRegisteredEpistemicEvaluatorsImpl;\nexport const registerEpistemicEvaluator = registerEpistemicEvaluatorImpl;\nexport const createEpistemicContract = createEpistemicContractImpl;\nexport const evaluateContract = evaluateContractImpl;\nexport const evaluateContractsForTrigger = evaluateContractsForTriggerImpl;\nexport const evaluateContradictionStatus = evaluateContradictionStatusImpl;\nexport const evaluateDependentBeliefCount = evaluateDependentBeliefCountImpl;\nexport const evaluateEdgeFreshness = evaluateEdgeFreshnessImpl;\nexport const evaluateEngineeringContracts = evaluateEngineeringContractsImpl;\nexport const evaluateEvidenceCount = evaluateEvidenceCountImpl;\nexport const getContractCoverage = getContractCoverageImpl;\nexport const getContractStatus = getContractStatusImpl;\nexport const inheritContractsForFork = inheritContractsForForkImpl;\nexport const processContractEvaluationOverflow =\n processContractEvaluationOverflowImpl;\n","/** Shared evaluator helpers and result-normalization utilities. */\n\nimport { debugGraphPrimitiveFallback } from \"../debug\";\nimport type {\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n} from \"../epistemicContractHelpers\";\n\nexport interface ToolResultEnvelope {\n command?: string;\n data?: unknown;\n exitCode?: number | null;\n output?: string;\n report?: unknown;\n stderr?: string;\n stdout?: string;\n}\n\ntype AnyRecord = Record<string, unknown>;\n\nconst WINDOWS_PATH_SEPARATORS = /\\\\/g;\nconst LEADING_DOT_SLASH = /^\\.\\//;\n\nexport function asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nexport function asNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nexport function asRecord(value: unknown): AnyRecord | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as AnyRecord)\n : null;\n}\n\nexport function asString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : null;\n}\n\nexport function deriveDirectionalResult(\n direction: EpistemicContractDirection,\n conditionSatisfied: boolean\n): EpistemicContractEvaluationResult {\n if (direction === \"falsifies\") {\n return conditionSatisfied ? \"disconfirmed\" : \"confirmed\";\n }\n return conditionSatisfied ? \"confirmed\" : \"disconfirmed\";\n}\n\nexport function extractTextCandidates(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n const candidate = asString(value);\n return candidate ? [candidate] : [];\n }\n\n const candidates = [\n record.stdout,\n record.stderr,\n record.output,\n record.text,\n record.message,\n record.raw,\n ]\n .map(asString)\n .filter((candidate): candidate is string => Boolean(candidate));\n\n for (const nestedKey of [\"report\", \"result\", \"data\", \"payload\"]) {\n const nested = record[nestedKey];\n if (nested !== value) {\n candidates.push(...extractTextCandidates(nested));\n }\n }\n\n return Array.from(new Set(candidates));\n}\n\nexport function normalizeFilePath(value: string): string {\n return value\n .replace(WINDOWS_PATH_SEPARATORS, \"/\")\n .replace(LEADING_DOT_SLASH, \"\");\n}\n\nexport function normalizeToolResultEnvelope(\n value: unknown\n): ToolResultEnvelope {\n const record = asRecord(value);\n if (!record) {\n return {\n output: asString(value) ?? undefined,\n };\n }\n\n const exitCode =\n asNumber(record.exitCode) ??\n asNumber(record.code) ??\n asNumber(record.status) ??\n null;\n\n return {\n command: asString(record.command) ?? undefined,\n data: record.data ?? record.payload,\n exitCode,\n output: asString(record.output) ?? undefined,\n report:\n record.report ??\n record.json ??\n record.result ??\n record.payload ??\n undefined,\n stderr: asString(record.stderr) ?? undefined,\n stdout: asString(record.stdout) ?? undefined,\n };\n}\n\nexport function parseJsonCandidate<T = unknown>(value: unknown): T | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value !== \"string\") {\n return value as T;\n }\n\n try {\n return JSON.parse(value) as T;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[evaluators/shared] Failed to parse JSON candidate\",\n {\n error,\n valueType: typeof value,\n }\n );\n return null;\n }\n}\n\nexport function patternMatchesPath(filePath: string, pattern: string): boolean {\n const normalizedPath = normalizeFilePath(filePath);\n const normalizedPattern = normalizeFilePath(pattern);\n const escaped = normalizedPattern.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regexPattern = escaped\n .replace(/\\\\\\*\\\\\\*/g, \".*\")\n .replace(/\\\\\\*/g, \"[^/]*\")\n .replace(/\\\\\\?/g, \"[^/]\");\n return new RegExp(`^${regexPattern}$`).test(normalizedPath);\n}\n\nexport function somePatternMatches(\n filePath: string | null | undefined,\n patterns: string[]\n): boolean {\n if (!filePath) {\n return false;\n }\n return patterns.some((pattern) => patternMatchesPath(filePath, pattern));\n}\n","/** Lint-based engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n somePatternMatches,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./test-runner-evaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ninterface ParsedLintDiagnostic {\n filePath: string | null;\n message: string;\n severity: string;\n}\n\ninterface LintCheckerConfig {\n filePatterns: string[];\n linter: \"biome\";\n}\n\nfunction parseConfig(condition: EpistemicContractCondition): LintCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n 'lint_checker requires evaluatorConfig with { filePatterns: string[], linter: \"biome\" }.'\n );\n }\n\n const filePatterns = asArray(record.filePatterns)\n .map(asString)\n .filter((pattern): pattern is string => Boolean(pattern));\n if (filePatterns.length === 0) {\n throw new Error(\"lint_checker requires at least one file pattern.\");\n }\n\n const linter = asString(record.linter);\n if (linter !== \"biome\") {\n throw new Error(`Unsupported linter: ${String(record.linter)}`);\n }\n\n return {\n filePatterns,\n linter,\n };\n}\n\nfunction parseDiagnostics(resultData: unknown): ParsedLintDiagnostic[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ??\n asRecord(envelope.data) ??\n asRecord(resultData);\n if (!record) {\n return [];\n }\n\n return asArray(record.diagnostics)\n .map((entry) => {\n const diagnostic = asRecord(entry);\n if (!diagnostic) {\n return null;\n }\n const location = asRecord(diagnostic.location);\n const pathRecord = asRecord(location?.path);\n const filePath =\n asString(diagnostic.filePath) ??\n asString(diagnostic.file) ??\n asString(location?.filePath) ??\n asString(pathRecord?.file);\n const severity = asString(diagnostic.severity) ?? \"error\";\n const message =\n asString(diagnostic.message) ??\n asString(diagnostic.description) ??\n \"Lint issue\";\n return {\n filePath: filePath ? normalizeFilePath(filePath) : null,\n message,\n severity,\n };\n })\n .filter((diagnostic): diagnostic is ParsedLintDiagnostic =>\n Boolean(diagnostic)\n );\n}\n\nfunction getMatchedDiagnostics(\n contract: AnyContract,\n resultData: unknown\n): ParsedLintDiagnostic[] {\n const config = parseConfig(contract.condition);\n return parseDiagnostics(resultData).filter((diagnostic) =>\n somePatternMatches(diagnostic.filePath, config.filePatterns)\n );\n}\n\nexport const lintCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"lint_checker\",\n matches({ contract, resultData }) {\n const envelope = normalizeToolResultEnvelope(resultData);\n const exitCode = asNumber(envelope.exitCode);\n if (exitCode === 0) {\n return true;\n }\n return getMatchedDiagnostics(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"lint_checker requires Biome lint resultData.\",\n };\n }\n\n const envelope = normalizeToolResultEnvelope(args.resultData);\n const exitCode = asNumber(envelope.exitCode);\n const matchedDiagnostics = getMatchedDiagnostics(\n args.contract,\n args.resultData\n );\n\n if (\n matchedDiagnostics.length === 0 &&\n exitCode !== 0 &&\n exitCode !== null\n ) {\n return {\n result: \"inconclusive\",\n rationale:\n \"Biome reported issues, but none matched the configured file patterns.\",\n };\n }\n\n const conditionSatisfied =\n exitCode === 0 || (exitCode !== null && matchedDiagnostics.length === 0);\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Biome reported no matching lint diagnostics for ${config.filePatterns.join(\", \")}.`\n : `Biome reported ${matchedDiagnostics.length} matching issue(s): ${matchedDiagnostics\n .map((diagnostic) =>\n diagnostic.filePath\n ? `${diagnostic.filePath} (${diagnostic.severity})`\n : diagnostic.message\n )\n .join(\", \")}.`,\n data: {\n exitCode,\n filePatterns: config.filePatterns,\n linter: config.linter,\n matchedDiagnostics,\n },\n };\n },\n};\n","/** Sentry-backed engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n normalizeToolResultEnvelope,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./test-runner-evaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ninterface SentryCheckerConfig {\n module: string;\n windowDays: number;\n}\n\nfunction parseConfig(\n condition: EpistemicContractCondition\n): SentryCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"sentry_checker requires evaluatorConfig with { module, windowDays }.\"\n );\n }\n\n const moduleName = asString(record.module);\n const windowDays = asNumber(record.windowDays);\n if (!moduleName || windowDays === null) {\n throw new Error(\n \"sentry_checker requires a module name and numeric windowDays.\"\n );\n }\n\n return {\n module: moduleName,\n windowDays,\n };\n}\n\nfunction parseIncidentCount(resultData: unknown): {\n incidentCount: number | null;\n moduleName: string | null;\n windowDays: number | null;\n} {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ??\n asRecord(envelope.data) ??\n asRecord(resultData);\n if (!record) {\n return {\n incidentCount: null,\n moduleName: null,\n windowDays: null,\n };\n }\n\n const incidents = asArray(record.incidents);\n const incidentCount =\n asNumber(record.incidentCount) ??\n (incidents.length > 0 ? incidents.length : null);\n\n return {\n incidentCount,\n moduleName: asString(record.module),\n windowDays: asNumber(record.windowDays),\n };\n}\n\nfunction matchesModule(contract: AnyContract, resultData: unknown): boolean {\n const config = parseConfig(contract.condition);\n const payload = parseIncidentCount(resultData);\n return !payload.moduleName || payload.moduleName === config.module;\n}\n\nexport const sentryCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"sentry_checker\",\n matches({ contract, resultData }) {\n return matchesModule(contract, resultData);\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"sentry_checker requires incident count resultData.\",\n };\n }\n\n const payload = parseIncidentCount(args.resultData);\n if (payload.incidentCount === null) {\n return {\n result: \"error\",\n rationale: \"sentry_checker could not determine an incident count.\",\n };\n }\n if (!matchesModule(args.contract, args.resultData)) {\n return {\n result: \"inconclusive\",\n rationale: `Sentry result targeted ${payload.moduleName}, not ${config.module}.`,\n };\n }\n\n const conditionSatisfied = payload.incidentCount === 0;\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Sentry reported zero incidents for ${config.module} over ${config.windowDays} day(s).`\n : `Sentry reported ${payload.incidentCount} incident(s) for ${config.module} over ${config.windowDays} day(s).`,\n data: {\n incidentCount: payload.incidentCount,\n module: config.module,\n windowDays: config.windowDays,\n },\n };\n },\n};\n","/** Test-runner engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluator,\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asRecord,\n asString,\n deriveDirectionalResult,\n extractTextCandidates,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n parseJsonCandidate,\n patternMatchesPath,\n} from \"./shared\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ninterface ParsedSuite {\n failedTests: string[];\n filePath: string;\n passedTests: string[];\n}\n\ninterface TestRunnerConfig {\n runner: \"vitest\";\n testPattern: string;\n}\n\nfunction parseConfig(condition: EpistemicContractCondition): TestRunnerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n 'test_runner requires evaluatorConfig with { testPattern, runner: \"vitest\" }.'\n );\n }\n\n const testPattern = asString(record.testPattern);\n if (!testPattern) {\n throw new Error(\"test_runner requires a non-empty testPattern.\");\n }\n\n const runner = asString(record.runner);\n if (runner !== \"vitest\") {\n throw new Error(`Unsupported test runner: ${String(record.runner)}`);\n }\n\n return {\n runner,\n testPattern,\n };\n}\n\nfunction collectFailedTests(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n return [];\n }\n\n const fullName = asString(record.fullName);\n const title = asString(record.title);\n const label = fullName ?? title ?? \"unnamed test\";\n const status = asString(record.status);\n const state = asString(asRecord(record.result)?.state);\n const isFailed =\n status === \"failed\" ||\n status === \"fail\" ||\n state === \"failed\" ||\n state === \"fail\";\n\n const failures = isFailed ? [label] : [];\n for (const nestedKey of [\"assertionResults\", \"tests\", \"tasks\"]) {\n for (const nested of asArray(record[nestedKey])) {\n failures.push(...collectFailedTests(nested));\n }\n }\n\n return failures;\n}\n\nfunction collectPassedTests(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n return [];\n }\n\n const fullName = asString(record.fullName);\n const title = asString(record.title);\n const label = fullName ?? title ?? \"unnamed test\";\n const status = asString(record.status);\n const state = asString(asRecord(record.result)?.state);\n const isPassed = status === \"passed\" || state === \"passed\";\n\n const passed = isPassed ? [label] : [];\n for (const nestedKey of [\"assertionResults\", \"tests\", \"tasks\"]) {\n for (const nested of asArray(record[nestedKey])) {\n passed.push(...collectPassedTests(nested));\n }\n }\n\n return passed;\n}\n\nfunction parseSuite(value: unknown): ParsedSuite | null {\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n\n const filePath =\n asString(record.name) ??\n asString(record.file) ??\n asString(record.filePath) ??\n asString(record.filepath);\n if (!filePath) {\n return null;\n }\n\n return {\n failedTests: Array.from(new Set(collectFailedTests(record))),\n filePath: normalizeFilePath(filePath),\n passedTests: Array.from(new Set(collectPassedTests(record))),\n };\n}\n\nfunction parseVitestSuites(resultData: unknown): ParsedSuite[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const candidates = [\n envelope.report,\n envelope.data,\n envelope.stdout,\n envelope.output,\n ...extractTextCandidates(resultData),\n ];\n\n for (const candidate of candidates) {\n const parsed = parseJsonCandidate(candidate);\n const report = asRecord(parsed);\n if (!report) {\n continue;\n }\n\n const suites = asArray(report.testResults)\n .map(parseSuite)\n .filter((suite): suite is ParsedSuite => Boolean(suite));\n if (suites.length > 0) {\n return suites;\n }\n\n const fileSuites = asArray(report.files)\n .map(parseSuite)\n .filter((suite): suite is ParsedSuite => Boolean(suite));\n if (fileSuites.length > 0) {\n return fileSuites;\n }\n }\n\n return [];\n}\n\nfunction getMatchedSuites(\n contract: AnyContract,\n resultData: unknown\n): ParsedSuite[] {\n const config = parseConfig(contract.condition);\n return parseVitestSuites(resultData).filter((suite) =>\n patternMatchesPath(suite.filePath, config.testPattern)\n );\n}\n\nexport type EngineeringEpistemicEvaluator = EpistemicEvaluator & {\n matches(args: { contract: AnyContract; resultData: unknown }): boolean;\n};\n\nexport const testRunnerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"test_runner\",\n matches({ contract, resultData }) {\n return getMatchedSuites(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n const matchedSuites = getMatchedSuites(args.contract, args.resultData);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"test_runner requires Vitest JSON resultData.\",\n };\n }\n if (matchedSuites.length === 0) {\n return {\n result: \"inconclusive\",\n rationale: `No Vitest suites matched ${config.testPattern}.`,\n };\n }\n\n const failedTests = matchedSuites.flatMap((suite) => suite.failedTests);\n const passedTests = matchedSuites.flatMap((suite) => suite.passedTests);\n const conditionSatisfied = failedTests.length === 0;\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Vitest matched ${matchedSuites.length} suite(s) for ${config.testPattern}; all ${passedTests.length} test assertions passed.`\n : `Vitest matched ${matchedSuites.length} suite(s) for ${config.testPattern}; failing tests: ${failedTests.join(\", \")}.`,\n data: {\n runner: config.runner,\n testPattern: config.testPattern,\n matchedFiles: matchedSuites.map((suite) => suite.filePath),\n failedTests,\n passedTestCount: passedTests.length,\n },\n };\n },\n};\n","/** Typecheck-based engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n extractTextCandidates,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n somePatternMatches,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./test-runner-evaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ninterface ParsedDiagnostic {\n code?: string;\n filePath: string | null;\n message: string;\n}\n\ninterface TscCheckerConfig {\n filePatterns: string[];\n}\n\nfunction parseConfig(condition: EpistemicContractCondition): TscCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"tsc_checker requires evaluatorConfig with { filePatterns: string[] }.\"\n );\n }\n\n const filePatterns = asArray(record.filePatterns)\n .map(asString)\n .filter((pattern): pattern is string => Boolean(pattern));\n if (filePatterns.length === 0) {\n throw new Error(\"tsc_checker requires at least one file pattern.\");\n }\n\n return { filePatterns };\n}\n\nfunction parseStructuredDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ??\n asRecord(envelope.data) ??\n asRecord(resultData);\n if (!record) {\n return [];\n }\n\n return asArray(record.diagnostics).flatMap((entry): ParsedDiagnostic[] => {\n const diagnostic = asRecord(entry);\n if (!diagnostic) {\n return [];\n }\n const filePath =\n asString(diagnostic.filePath) ??\n asString(diagnostic.file) ??\n asString(asRecord(diagnostic.location)?.filePath) ??\n asString(asRecord(asRecord(diagnostic.location)?.path)?.file);\n const message = asString(diagnostic.message) ?? \"TypeScript error\";\n return [\n {\n code: asString(diagnostic.code) ?? undefined,\n filePath: filePath ? normalizeFilePath(filePath) : null,\n message,\n },\n ];\n });\n}\n\nfunction parseTextDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const diagnostics: ParsedDiagnostic[] = [];\n const patterns = [\n /^(.+?)\\((\\d+),(\\d+)\\): error TS(\\d+): (.+)$/gm,\n /^(.+?):(\\d+):(\\d+) - error TS(\\d+): (.+)$/gm,\n ];\n\n for (const text of extractTextCandidates(resultData)) {\n for (const pattern of patterns) {\n for (const match of text.matchAll(pattern)) {\n diagnostics.push({\n code: match[4],\n filePath: normalizeFilePath(match[1] ?? \"\"),\n message: match[5] ?? \"TypeScript error\",\n });\n }\n }\n }\n\n return diagnostics;\n}\n\nfunction parseDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const structured = parseStructuredDiagnostics(resultData);\n return structured.length > 0 ? structured : parseTextDiagnostics(resultData);\n}\n\nfunction getMatchedDiagnostics(\n contract: AnyContract,\n resultData: unknown\n): ParsedDiagnostic[] {\n const config = parseConfig(contract.condition);\n return parseDiagnostics(resultData).filter((diagnostic) =>\n somePatternMatches(diagnostic.filePath, config.filePatterns)\n );\n}\n\nexport const tscCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"tsc_checker\",\n matches({ contract, resultData }) {\n const envelope = normalizeToolResultEnvelope(resultData);\n const exitCode = asNumber(envelope.exitCode);\n if (exitCode === 0) {\n return true;\n }\n return getMatchedDiagnostics(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"tsc_checker requires TypeScript diagnostic resultData.\",\n };\n }\n\n const envelope = normalizeToolResultEnvelope(args.resultData);\n const exitCode = asNumber(envelope.exitCode);\n const matchedDiagnostics = getMatchedDiagnostics(\n args.contract,\n args.resultData\n );\n\n if (\n matchedDiagnostics.length === 0 &&\n exitCode !== 0 &&\n exitCode !== null\n ) {\n return {\n result: \"inconclusive\",\n rationale:\n \"TypeScript reported errors, but none matched the configured file patterns.\",\n };\n }\n\n const conditionSatisfied =\n exitCode === 0 || (exitCode !== null && matchedDiagnostics.length === 0);\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `TypeScript reported no matching diagnostics for ${config.filePatterns.join(\", \")}.`\n : `TypeScript found ${matchedDiagnostics.length} matching diagnostic(s): ${matchedDiagnostics\n .map((diagnostic) =>\n diagnostic.filePath\n ? `${diagnostic.filePath}${diagnostic.code ? ` (TS${diagnostic.code})` : \"\"}`\n : diagnostic.message\n )\n .join(\", \")}.`,\n data: {\n exitCode,\n filePatterns: config.filePatterns,\n matchedDiagnostics,\n },\n };\n },\n};\n","import type { EpistemicEvaluator } from \"../epistemicContracts\";\nimport { getRegisteredEpistemicEvaluators } from \"../epistemicContracts\";\nimport { lintCheckerEvaluator as lintCheckerEvaluatorModule } from \"./lint-checker-evaluator\";\nimport { sentryCheckerEvaluator as sentryCheckerEvaluatorModule } from \"./sentry-checker-evaluator\";\nimport type { EngineeringEpistemicEvaluator } from \"./test-runner-evaluator\";\nimport { testRunnerEvaluator as testRunnerEvaluatorModule } from \"./test-runner-evaluator\";\nimport { tscCheckerEvaluator as tscCheckerEvaluatorModule } from \"./tsc-checker-evaluator\";\n\nexport const ENGINEERING_EPISTEMIC_EVALUATORS: EngineeringEpistemicEvaluator[] =\n [\n testRunnerEvaluatorModule,\n tscCheckerEvaluatorModule,\n lintCheckerEvaluatorModule,\n sentryCheckerEvaluatorModule,\n ];\n\nconst lintCheckerEvaluator = lintCheckerEvaluatorModule;\nconst sentryCheckerEvaluator = sentryCheckerEvaluatorModule;\nconst testRunnerEvaluator = testRunnerEvaluatorModule;\nconst tscCheckerEvaluator = tscCheckerEvaluatorModule;\n\nexport const ENGINEERING_EVALUATOR_NAMES = new Set(\n ENGINEERING_EPISTEMIC_EVALUATORS.map((evaluator) => evaluator.name)\n);\n\nexport function getEngineeringEpistemicEvaluator(\n name: string\n): EngineeringEpistemicEvaluator | undefined {\n return ENGINEERING_EPISTEMIC_EVALUATORS.find(\n (evaluator) => evaluator.name === name\n );\n}\n\nexport function registerAllEngineeringEvaluators(\n registerEvaluator: (evaluator: EpistemicEvaluator) => void\n): void {\n for (const evaluator of ENGINEERING_EPISTEMIC_EVALUATORS) {\n registerEvaluator(evaluator);\n }\n}\nexport {\n lintCheckerEvaluator,\n sentryCheckerEvaluator,\n testRunnerEvaluator,\n tscCheckerEvaluator,\n};\n\nexport const RESEARCH_EVALUATOR_NAMES = [\n \"market_index_comparator\",\n \"metric_checker\",\n \"reference_check_counter\",\n \"temporal_deadline\",\n] as const;\n\nexport type ResearchEvaluatorName = (typeof RESEARCH_EVALUATOR_NAMES)[number];\n\nexport function registerAllResearchEvaluators(): ResearchEvaluatorName[] {\n const registered = new Set(getRegisteredEpistemicEvaluators());\n return RESEARCH_EVALUATOR_NAMES.filter((name) => registered.has(name));\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import { EngineeringEpistemicEvaluator } from './test-runner-evaluator.js';
2
+ import '@lucern/confidence';
3
+ import '../epistemicContracts.js';
4
+ import '../epistemicContracts.evaluators.js';
5
+ import '../convex.js';
6
+ import '@lucern/access-control/convex';
7
+ import '@lucern/contracts/convex/unsafeAnyApi';
8
+ import 'convex/values';
9
+ import '../epistemicContracts.types.js';
10
+ import '../epistemicContracts.handlers.js';
11
+
12
+ /** Lint-based engineering evaluator for epistemic contracts. */
13
+
14
+ declare const lintCheckerEvaluator: EngineeringEpistemicEvaluator;
15
+
16
+ export { lintCheckerEvaluator };
@@ -1,4 +1,6 @@
1
1
  // src/evaluators/shared.ts
2
+ var WINDOWS_PATH_SEPARATORS = /\\/g;
3
+ var LEADING_DOT_SLASH = /^\.\//;
2
4
  function asArray(value) {
3
5
  return Array.isArray(value) ? value : [];
4
6
  }
@@ -18,7 +20,7 @@ function deriveDirectionalResult(direction, conditionSatisfied) {
18
20
  return conditionSatisfied ? "confirmed" : "disconfirmed";
19
21
  }
20
22
  function normalizeFilePath(value) {
21
- return value.replace(/\\/g, "/").replace(/^\.\//, "");
23
+ return value.replace(WINDOWS_PATH_SEPARATORS, "/").replace(LEADING_DOT_SLASH, "");
22
24
  }
23
25
  function normalizeToolResultEnvelope(value) {
24
26
  const record = asRecord(value);
@@ -52,7 +54,7 @@ function somePatternMatches(filePath, patterns) {
52
54
  return patterns.some((pattern) => patternMatchesPath(filePath, pattern));
53
55
  }
54
56
 
55
- // src/evaluators/lintCheckerEvaluator.ts
57
+ // src/evaluators/lint-checker-evaluator.ts
56
58
  function parseConfig(condition) {
57
59
  const record = asRecord(condition.evaluatorConfig);
58
60
  if (!record) {
@@ -124,7 +126,10 @@ var lintCheckerEvaluator = {
124
126
  }
125
127
  const envelope = normalizeToolResultEnvelope(args.resultData);
126
128
  const exitCode = asNumber(envelope.exitCode);
127
- const matchedDiagnostics = getMatchedDiagnostics(args.contract, args.resultData);
129
+ const matchedDiagnostics = getMatchedDiagnostics(
130
+ args.contract,
131
+ args.resultData
132
+ );
128
133
  if (matchedDiagnostics.length === 0 && exitCode !== 0 && exitCode !== null) {
129
134
  return {
130
135
  result: "inconclusive",
@@ -151,5 +156,5 @@ var lintCheckerEvaluator = {
151
156
  };
152
157
 
153
158
  export { lintCheckerEvaluator };
154
- //# sourceMappingURL=lintCheckerEvaluator.js.map
155
- //# sourceMappingURL=lintCheckerEvaluator.js.map
159
+ //# sourceMappingURL=lint-checker-evaluator.js.map
160
+ //# sourceMappingURL=lint-checker-evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/evaluators/shared.ts","../../src/evaluators/lint-checker-evaluator.ts"],"names":[],"mappings":"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","file":"lint-checker-evaluator.js","sourcesContent":["/** Shared evaluator helpers and result-normalization utilities. */\n\nimport { debugGraphPrimitiveFallback } from \"../debug\";\nimport type {\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n} from \"../epistemicContractHelpers\";\n\nexport interface ToolResultEnvelope {\n command?: string;\n data?: unknown;\n exitCode?: number | null;\n output?: string;\n report?: unknown;\n stderr?: string;\n stdout?: string;\n}\n\ntype AnyRecord = Record<string, unknown>;\n\nconst WINDOWS_PATH_SEPARATORS = /\\\\/g;\nconst LEADING_DOT_SLASH = /^\\.\\//;\n\nexport function asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nexport function asNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nexport function asRecord(value: unknown): AnyRecord | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as AnyRecord)\n : null;\n}\n\nexport function asString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : null;\n}\n\nexport function deriveDirectionalResult(\n direction: EpistemicContractDirection,\n conditionSatisfied: boolean\n): EpistemicContractEvaluationResult {\n if (direction === \"falsifies\") {\n return conditionSatisfied ? \"disconfirmed\" : \"confirmed\";\n }\n return conditionSatisfied ? \"confirmed\" : \"disconfirmed\";\n}\n\nexport function extractTextCandidates(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n const candidate = asString(value);\n return candidate ? [candidate] : [];\n }\n\n const candidates = [\n record.stdout,\n record.stderr,\n record.output,\n record.text,\n record.message,\n record.raw,\n ]\n .map(asString)\n .filter((candidate): candidate is string => Boolean(candidate));\n\n for (const nestedKey of [\"report\", \"result\", \"data\", \"payload\"]) {\n const nested = record[nestedKey];\n if (nested !== value) {\n candidates.push(...extractTextCandidates(nested));\n }\n }\n\n return Array.from(new Set(candidates));\n}\n\nexport function normalizeFilePath(value: string): string {\n return value\n .replace(WINDOWS_PATH_SEPARATORS, \"/\")\n .replace(LEADING_DOT_SLASH, \"\");\n}\n\nexport function normalizeToolResultEnvelope(\n value: unknown\n): ToolResultEnvelope {\n const record = asRecord(value);\n if (!record) {\n return {\n output: asString(value) ?? undefined,\n };\n }\n\n const exitCode =\n asNumber(record.exitCode) ??\n asNumber(record.code) ??\n asNumber(record.status) ??\n null;\n\n return {\n command: asString(record.command) ?? undefined,\n data: record.data ?? record.payload,\n exitCode,\n output: asString(record.output) ?? undefined,\n report:\n record.report ??\n record.json ??\n record.result ??\n record.payload ??\n undefined,\n stderr: asString(record.stderr) ?? undefined,\n stdout: asString(record.stdout) ?? undefined,\n };\n}\n\nexport function parseJsonCandidate<T = unknown>(value: unknown): T | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value !== \"string\") {\n return value as T;\n }\n\n try {\n return JSON.parse(value) as T;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[evaluators/shared] Failed to parse JSON candidate\",\n {\n error,\n valueType: typeof value,\n }\n );\n return null;\n }\n}\n\nexport function patternMatchesPath(filePath: string, pattern: string): boolean {\n const normalizedPath = normalizeFilePath(filePath);\n const normalizedPattern = normalizeFilePath(pattern);\n const escaped = normalizedPattern.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regexPattern = escaped\n .replace(/\\\\\\*\\\\\\*/g, \".*\")\n .replace(/\\\\\\*/g, \"[^/]*\")\n .replace(/\\\\\\?/g, \"[^/]\");\n return new RegExp(`^${regexPattern}$`).test(normalizedPath);\n}\n\nexport function somePatternMatches(\n filePath: string | null | undefined,\n patterns: string[]\n): boolean {\n if (!filePath) {\n return false;\n }\n return patterns.some((pattern) => patternMatchesPath(filePath, pattern));\n}\n","/** Lint-based engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n somePatternMatches,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./test-runner-evaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ninterface ParsedLintDiagnostic {\n filePath: string | null;\n message: string;\n severity: string;\n}\n\ninterface LintCheckerConfig {\n filePatterns: string[];\n linter: \"biome\";\n}\n\nfunction parseConfig(condition: EpistemicContractCondition): LintCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n 'lint_checker requires evaluatorConfig with { filePatterns: string[], linter: \"biome\" }.'\n );\n }\n\n const filePatterns = asArray(record.filePatterns)\n .map(asString)\n .filter((pattern): pattern is string => Boolean(pattern));\n if (filePatterns.length === 0) {\n throw new Error(\"lint_checker requires at least one file pattern.\");\n }\n\n const linter = asString(record.linter);\n if (linter !== \"biome\") {\n throw new Error(`Unsupported linter: ${String(record.linter)}`);\n }\n\n return {\n filePatterns,\n linter,\n };\n}\n\nfunction parseDiagnostics(resultData: unknown): ParsedLintDiagnostic[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ??\n asRecord(envelope.data) ??\n asRecord(resultData);\n if (!record) {\n return [];\n }\n\n return asArray(record.diagnostics)\n .map((entry) => {\n const diagnostic = asRecord(entry);\n if (!diagnostic) {\n return null;\n }\n const location = asRecord(diagnostic.location);\n const pathRecord = asRecord(location?.path);\n const filePath =\n asString(diagnostic.filePath) ??\n asString(diagnostic.file) ??\n asString(location?.filePath) ??\n asString(pathRecord?.file);\n const severity = asString(diagnostic.severity) ?? \"error\";\n const message =\n asString(diagnostic.message) ??\n asString(diagnostic.description) ??\n \"Lint issue\";\n return {\n filePath: filePath ? normalizeFilePath(filePath) : null,\n message,\n severity,\n };\n })\n .filter((diagnostic): diagnostic is ParsedLintDiagnostic =>\n Boolean(diagnostic)\n );\n}\n\nfunction getMatchedDiagnostics(\n contract: AnyContract,\n resultData: unknown\n): ParsedLintDiagnostic[] {\n const config = parseConfig(contract.condition);\n return parseDiagnostics(resultData).filter((diagnostic) =>\n somePatternMatches(diagnostic.filePath, config.filePatterns)\n );\n}\n\nexport const lintCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"lint_checker\",\n matches({ contract, resultData }) {\n const envelope = normalizeToolResultEnvelope(resultData);\n const exitCode = asNumber(envelope.exitCode);\n if (exitCode === 0) {\n return true;\n }\n return getMatchedDiagnostics(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"lint_checker requires Biome lint resultData.\",\n };\n }\n\n const envelope = normalizeToolResultEnvelope(args.resultData);\n const exitCode = asNumber(envelope.exitCode);\n const matchedDiagnostics = getMatchedDiagnostics(\n args.contract,\n args.resultData\n );\n\n if (\n matchedDiagnostics.length === 0 &&\n exitCode !== 0 &&\n exitCode !== null\n ) {\n return {\n result: \"inconclusive\",\n rationale:\n \"Biome reported issues, but none matched the configured file patterns.\",\n };\n }\n\n const conditionSatisfied =\n exitCode === 0 || (exitCode !== null && matchedDiagnostics.length === 0);\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Biome reported no matching lint diagnostics for ${config.filePatterns.join(\", \")}.`\n : `Biome reported ${matchedDiagnostics.length} matching issue(s): ${matchedDiagnostics\n .map((diagnostic) =>\n diagnostic.filePath\n ? `${diagnostic.filePath} (${diagnostic.severity})`\n : diagnostic.message\n )\n .join(\", \")}.`,\n data: {\n exitCode,\n filePatterns: config.filePatterns,\n linter: config.linter,\n matchedDiagnostics,\n },\n };\n },\n};\n"]}
@@ -1,8 +1,13 @@
1
- import { EngineeringEpistemicEvaluator } from './testRunnerEvaluator.js';
1
+ import { EngineeringEpistemicEvaluator } from './test-runner-evaluator.js';
2
2
  import '@lucern/confidence';
3
- import '../epistemicContracts.types.js';
3
+ import '../epistemicContracts.js';
4
+ import '../epistemicContracts.evaluators.js';
4
5
  import '../convex.js';
6
+ import '@lucern/access-control/convex';
7
+ import '@lucern/contracts/convex/unsafeAnyApi';
5
8
  import 'convex/values';
9
+ import '../epistemicContracts.types.js';
10
+ import '../epistemicContracts.handlers.js';
6
11
 
7
12
  /** Sentry-backed engineering evaluator for epistemic contracts. */
8
13