@lucern/graph-primitives 1.0.29 → 1.0.31

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 +395 -225
  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 +854 -480
  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 +365 -166
  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 -289
  80. package/dist/epistemicBeliefs.backfills.js.map +1 -1
  81. package/dist/epistemicBeliefs.confidence.d.ts +19 -15
  82. package/dist/epistemicBeliefs.confidence.js +633 -386
  83. package/dist/epistemicBeliefs.confidence.js.map +1 -1
  84. package/dist/epistemicBeliefs.core.d.ts +6 -6
  85. package/dist/epistemicBeliefs.core.js +717 -371
  86. package/dist/epistemicBeliefs.core.js.map +1 -1
  87. package/dist/epistemicBeliefs.d.ts +11 -9
  88. package/dist/epistemicBeliefs.forkEvidence.d.ts +2 -0
  89. package/dist/epistemicBeliefs.forkEvidence.js +8 -8
  90. package/dist/epistemicBeliefs.forkEvidence.js.map +1 -1
  91. package/dist/epistemicBeliefs.helpers.d.ts +68 -49
  92. package/dist/epistemicBeliefs.helpers.js +358 -211
  93. package/dist/epistemicBeliefs.helpers.js.map +1 -1
  94. package/dist/epistemicBeliefs.internal.d.ts +5 -5
  95. package/dist/epistemicBeliefs.internal.js +1248 -1026
  96. package/dist/epistemicBeliefs.internal.js.map +1 -1
  97. package/dist/epistemicBeliefs.js +4942 -3590
  98. package/dist/epistemicBeliefs.js.map +1 -1
  99. package/dist/epistemicBeliefs.lifecycle.d.ts +5 -5
  100. package/dist/epistemicBeliefs.lifecycle.js +1138 -781
  101. package/dist/epistemicBeliefs.lifecycle.js.map +1 -1
  102. package/dist/epistemicBeliefs.links.d.ts +7 -7
  103. package/dist/epistemicBeliefs.links.js +404 -267
  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 +1062 -576
  114. package/dist/epistemicContracts.evaluators.js.map +1 -1
  115. package/dist/epistemicContracts.handlers.d.ts +15 -32
  116. package/dist/epistemicContracts.handlers.js +1829 -1351
  117. package/dist/epistemicContracts.handlers.js.map +1 -1
  118. package/dist/epistemicContracts.js +1131 -636
  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 +1966 -1202
  136. package/dist/epistemicEdges.js.map +1 -1
  137. package/dist/epistemicEdges.mutations.d.ts +7 -7
  138. package/dist/epistemicEdges.mutations.js +956 -579
  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 +933 -532
  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 +840 -692
  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 +700 -504
  180. package/dist/epistemicNodes.js.map +1 -1
  181. package/dist/epistemicNodes.mutations.d.ts +6 -6
  182. package/dist/epistemicNodes.mutations.js +560 -463
  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 +351 -311
  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 +86 -83
  245. package/dist/index.js +16914 -11760
  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,5 +1,7 @@
1
1
  import { Id } from './convex.js';
2
2
  import { ContractReadCtx, ContradictionStatusCounts, EvidenceFreshness, EpistemicEvaluatorContext, EpistemicEvaluatorResult } from './epistemicContracts.types.js';
3
+ import '@lucern/access-control/convex';
4
+ import '@lucern/contracts/convex/unsafeAnyApi';
3
5
  import 'convex/values';
4
6
  import '@lucern/confidence';
5
7
 
@@ -1,4 +1,4 @@
1
- import { parseEvidentialEvaluatorConfig, compareMetricValue, buildEvidentialRationale, parseMetricCheckerConfig, getEvaluatorInputRecord, pickFiniteNumber, resolveComparisonResult, buildComparisonRationale, parseReferenceCheckCounterConfig, parseTemporalDeadlineConfig, parseMarketIndexComparatorConfig } from '@lucern/confidence';
1
+ import { parseEvidentialEvaluatorConfig, compareMetricValue, resolveComparisonResult, buildEvidentialRationale, parseMetricCheckerConfig, getEvaluatorInputRecord, pickFiniteNumber, buildComparisonRationale, parseReferenceCheckCounterConfig, parseTemporalDeadlineConfig, parseMarketIndexComparatorConfig } from '@lucern/confidence';
2
2
 
3
3
  // src/epistemicContractHelpers.ts
4
4
 
@@ -8,9 +8,7 @@ var ACTIVE_CONTRADICTION_STATUSES = /* @__PURE__ */ new Set([
8
8
  "investigating",
9
9
  "accepted_as_permanent"
10
10
  ]);
11
- var DEPENDENT_EDGE_TYPES = /* @__PURE__ */ new Set([
12
- "depends_on"
13
- ]);
11
+ var DEPENDENT_EDGE_TYPES = /* @__PURE__ */ new Set(["depends_on"]);
14
12
  function classifyContradictionStatus(status) {
15
13
  if (typeof status !== "string") {
16
14
  return "active";
@@ -23,6 +21,99 @@ function classifyContradictionStatus(status) {
23
21
  }
24
22
  return "resolved";
25
23
  }
24
+ function isRecord(value) {
25
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
26
+ }
27
+ function readOptionalNumber(value) {
28
+ return typeof value === "number" && Number.isFinite(value) ? value : void 0;
29
+ }
30
+ function readOptionalString(value) {
31
+ return typeof value === "string" && value.trim().length > 0 ? value : void 0;
32
+ }
33
+ function readConvexId(value) {
34
+ const normalized = readOptionalString(value);
35
+ return normalized;
36
+ }
37
+ function readMetricNodeDoc(value) {
38
+ if (!isRecord(value)) {
39
+ return null;
40
+ }
41
+ const id = readConvexId(value._id);
42
+ const nodeType = readOptionalString(value.nodeType);
43
+ if (!(id && nodeType)) {
44
+ return null;
45
+ }
46
+ const node = { _id: id, nodeType };
47
+ const globalId = readOptionalString(value.globalId);
48
+ if (globalId !== void 0) {
49
+ node.globalId = globalId;
50
+ }
51
+ if ("metadata" in value) {
52
+ node.metadata = value.metadata;
53
+ }
54
+ const status = readOptionalString(value.status);
55
+ if (status !== void 0) {
56
+ node.status = status;
57
+ }
58
+ return node;
59
+ }
60
+ function readIncomingEdgeRow(value) {
61
+ if (!isRecord(value)) {
62
+ return null;
63
+ }
64
+ const fromNodeId = readOptionalString(value.fromNodeId);
65
+ if (!fromNodeId) {
66
+ return null;
67
+ }
68
+ const edge = { fromNodeId };
69
+ const id = readConvexId(value._id);
70
+ if (id !== void 0) {
71
+ edge._id = id;
72
+ }
73
+ const edgeType = readOptionalString(value.edgeType);
74
+ if (edgeType !== void 0) {
75
+ edge.edgeType = edgeType;
76
+ }
77
+ const fromGlobalId = readOptionalString(value.fromGlobalId);
78
+ if (fromGlobalId !== void 0) {
79
+ edge.fromGlobalId = fromGlobalId;
80
+ }
81
+ const fromUuid = readOptionalString(value.fromUuid);
82
+ if (fromUuid !== void 0) {
83
+ edge.fromUuid = fromUuid;
84
+ }
85
+ const sourceGlobalId = readOptionalString(value.sourceGlobalId);
86
+ if (sourceGlobalId !== void 0) {
87
+ edge.sourceGlobalId = sourceGlobalId;
88
+ }
89
+ const targetGlobalId = readOptionalString(value.targetGlobalId);
90
+ if (targetGlobalId !== void 0) {
91
+ edge.targetGlobalId = targetGlobalId;
92
+ }
93
+ const toGlobalId = readOptionalString(value.toGlobalId);
94
+ if (toGlobalId !== void 0) {
95
+ edge.toGlobalId = toGlobalId;
96
+ }
97
+ const toNodeId = readOptionalString(value.toNodeId);
98
+ if (toNodeId !== void 0) {
99
+ edge.toNodeId = toNodeId;
100
+ }
101
+ const toUuid = readOptionalString(value.toUuid);
102
+ if (toUuid !== void 0) {
103
+ edge.toUuid = toUuid;
104
+ }
105
+ const weight = readOptionalNumber(value.weight);
106
+ if (weight !== void 0) {
107
+ edge.weight = weight;
108
+ }
109
+ for (const timestampField of ["_creationTime", "createdAt", "updatedAt"]) {
110
+ const timestamp = readOptionalNumber(value[timestampField]);
111
+ if (timestamp !== void 0) {
112
+ edge[timestampField] = timestamp;
113
+ }
114
+ }
115
+ return edge;
116
+ }
26
117
  function getEdgeTimestamp(edge) {
27
118
  if (typeof edge.updatedAt === "number") {
28
119
  return edge.updatedAt;
@@ -35,22 +126,86 @@ function getEdgeTimestamp(edge) {
35
126
  }
36
127
  return null;
37
128
  }
129
+ async function collectNodeEndpointRefs(ctx, nodeId) {
130
+ const refs = /* @__PURE__ */ new Set([String(nodeId)]);
131
+ const node = readMetricNodeDoc(await ctx.db.get(nodeId));
132
+ if (node?.globalId) {
133
+ refs.add(node.globalId);
134
+ }
135
+ return [...refs];
136
+ }
137
+ async function collectIncomingEdgeRows(ctx, nodeId, edgeType) {
138
+ const refs = await collectNodeEndpointRefs(ctx, nodeId);
139
+ const seen = /* @__PURE__ */ new Set();
140
+ const edges = [];
141
+ for (const ref of refs) {
142
+ const rows = edgeType === void 0 ? await ctx.db.query("epistemicEdges").withIndex("by_to", (q) => q.eq("toNodeId", ref)).collect() : await ctx.db.query("epistemicEdges").withIndex(
143
+ "by_to_type",
144
+ (q) => q.eq("toNodeId", ref).eq("edgeType", edgeType)
145
+ ).collect();
146
+ for (const row of rows) {
147
+ const edge = readIncomingEdgeRow(row);
148
+ if (!edge) {
149
+ continue;
150
+ }
151
+ if (edgeType !== void 0 && edge.edgeType !== edgeType) {
152
+ continue;
153
+ }
154
+ const key = edge._id === void 0 ? `${edge.fromNodeId}->${edge.toNodeId ?? ref}:${edge.edgeType ?? ""}` : String(edge._id);
155
+ if (seen.has(key)) {
156
+ continue;
157
+ }
158
+ seen.add(key);
159
+ edges.push(edge);
160
+ }
161
+ }
162
+ return edges;
163
+ }
164
+ function sourceEndpointRefs(edge) {
165
+ return [
166
+ edge.fromNodeId,
167
+ edge.sourceGlobalId,
168
+ edge.fromGlobalId,
169
+ edge.fromUuid
170
+ ].filter((value) => value !== void 0);
171
+ }
172
+ async function resolveEndpointNode(ctx, refs) {
173
+ const candidates = refs.map((value) => value.trim()).filter(
174
+ (value, index, values) => value.length > 0 && values.indexOf(value) === index
175
+ );
176
+ for (const candidate of candidates) {
177
+ try {
178
+ const direct = readMetricNodeDoc(
179
+ await ctx.db.get(candidate)
180
+ );
181
+ if (direct) {
182
+ return direct;
183
+ }
184
+ } catch {
185
+ }
186
+ const byGlobalId = readMetricNodeDoc(
187
+ await ctx.db.query("epistemicNodes").withIndex("by_globalId", (q) => q.eq("globalId", candidate)).first()
188
+ );
189
+ if (byGlobalId) {
190
+ return byGlobalId;
191
+ }
192
+ }
193
+ return null;
194
+ }
38
195
  async function getEvidenceLinks(ctx, beliefNodeId) {
39
- const edges = await ctx.db.query("epistemicEdges").withIndex(
40
- "by_to_type",
41
- (q) => q.eq("toNodeId", beliefNodeId).eq("edgeType", "informs")
42
- ).collect();
196
+ const edges = await collectIncomingEdgeRows(ctx, beliefNodeId, "informs");
43
197
  if (edges.length === 0) {
44
198
  return [];
45
199
  }
46
- const nodes = await Promise.all(edges.map((edge) => ctx.db.get(edge.fromNodeId)));
47
- return edges.flatMap((edge, index) => {
48
- const node = nodes[index];
49
- if (!node || node.nodeType !== "evidence" || node.status === "archived") {
50
- return [];
200
+ const links = [];
201
+ for (const edge of edges) {
202
+ const node = await resolveEndpointNode(ctx, sourceEndpointRefs(edge));
203
+ if (node?.nodeType !== "evidence" || node.status === "archived") {
204
+ continue;
51
205
  }
52
- return [{ edge, node }];
53
- });
206
+ links.push({ edge, node });
207
+ }
208
+ return links;
54
209
  }
55
210
  function getEvidenceTags(node) {
56
211
  const metadata = node.metadata && typeof node.metadata === "object" ? node.metadata : null;
@@ -76,7 +231,8 @@ async function computeTaggedEvidenceCount(args) {
76
231
  };
77
232
  }
78
233
  async function computeContradictionCounts(ctx, beliefNodeId) {
79
- const contradictions = await ctx.db.query("contradictions").withIndex("by_beliefId", (q) => q.eq("beliefId", beliefNodeId)).collect();
234
+ const contradictionDb = ctx.db;
235
+ const contradictions = await contradictionDb.query("contradictions").withIndex("by_beliefId", (q) => q.eq("beliefId", beliefNodeId)).collect();
80
236
  return contradictions.reduce(
81
237
  (counts, contradiction) => {
82
238
  const status = contradiction.resolutionStatus ?? contradiction.status ?? "unresolved";
@@ -112,18 +268,16 @@ async function computeEvidenceFreshness(ctx, beliefNodeId, now = Date.now()) {
112
268
  };
113
269
  }
114
270
  async function computeDependentBeliefCount(ctx, beliefNodeId) {
115
- const incomingEdges = await ctx.db.query("epistemicEdges").withIndex("by_to", (q) => q.eq("toNodeId", beliefNodeId)).collect();
271
+ const incomingEdges = await collectIncomingEdgeRows(ctx, beliefNodeId);
116
272
  const dependencyEdges = incomingEdges.filter(
117
- (edge) => DEPENDENT_EDGE_TYPES.has(edge.edgeType)
273
+ (edge) => edge.edgeType ? DEPENDENT_EDGE_TYPES.has(edge.edgeType) : false
118
274
  );
119
275
  if (dependencyEdges.length === 0) {
120
276
  return 0;
121
277
  }
122
- const dependentBeliefs = await Promise.all(
123
- dependencyEdges.map((edge) => ctx.db.get(edge.fromNodeId))
124
- );
125
278
  const uniqueBeliefIds = /* @__PURE__ */ new Set();
126
- for (const node of dependentBeliefs) {
279
+ for (const edge of dependencyEdges) {
280
+ const node = await resolveEndpointNode(ctx, sourceEndpointRefs(edge));
127
281
  if (node && node.nodeType === "belief" && node.status !== "archived" && node.status !== "deleted") {
128
282
  uniqueBeliefIds.add(String(node._id));
129
283
  }
@@ -133,7 +287,10 @@ async function computeDependentBeliefCount(ctx, beliefNodeId) {
133
287
  async function snapshotEvidentialMetric(args) {
134
288
  switch (args.metric) {
135
289
  case "evidence_count": {
136
- const count = await computeEvidenceCountMetric(args.ctx, args.beliefNodeId);
290
+ const count = await computeEvidenceCountMetric(
291
+ args.ctx,
292
+ args.beliefNodeId
293
+ );
137
294
  return {
138
295
  metric: args.metric,
139
296
  value: count,
@@ -141,7 +298,10 @@ async function snapshotEvidentialMetric(args) {
141
298
  };
142
299
  }
143
300
  case "contradiction_status": {
144
- const counts = await computeContradictionCounts(args.ctx, args.beliefNodeId);
301
+ const counts = await computeContradictionCounts(
302
+ args.ctx,
303
+ args.beliefNodeId
304
+ );
145
305
  return {
146
306
  metric: args.metric,
147
307
  value: counts.activeCount,
@@ -161,7 +321,10 @@ async function snapshotEvidentialMetric(args) {
161
321
  };
162
322
  }
163
323
  case "dependent_count": {
164
- const count = await computeDependentBeliefCount(args.ctx, args.beliefNodeId);
324
+ const count = await computeDependentBeliefCount(
325
+ args.ctx,
326
+ args.beliefNodeId
327
+ );
165
328
  return {
166
329
  metric: args.metric,
167
330
  value: count,
@@ -177,7 +340,9 @@ async function snapshotEvidentialMetric(args) {
177
340
  }
178
341
  }
179
342
  async function evaluateBuiltInEvidentialContract(args) {
180
- const config = parseEvidentialEvaluatorConfig(args.contract.condition.evaluatorConfig);
343
+ const config = parseEvidentialEvaluatorConfig(
344
+ args.contract.condition.evaluatorConfig
345
+ );
181
346
  const snapshot = await snapshotEvidentialMetric({
182
347
  ctx: args.ctx,
183
348
  beliefNodeId: args.belief._id,
@@ -185,7 +350,10 @@ async function evaluateBuiltInEvidentialContract(args) {
185
350
  now: args.now
186
351
  });
187
352
  const comparisonSatisfied = snapshot.value !== null && compareMetricValue(config.operator, snapshot.value, config.threshold);
188
- const result = args.contract.direction === "falsifies" ? comparisonSatisfied ? "disconfirmed" : "confirmed" : comparisonSatisfied ? "confirmed" : "disconfirmed";
353
+ const result = resolveComparisonResult(
354
+ args.contract.direction,
355
+ comparisonSatisfied
356
+ );
189
357
  return {
190
358
  result,
191
359
  rationale: buildEvidentialRationale({
@@ -205,57 +373,66 @@ async function evaluateBuiltInEvidentialContract(args) {
205
373
  }
206
374
  };
207
375
  }
208
- async function evaluateMetricCheckerContract(args) {
209
- const config = parseMetricCheckerConfig(args.contract.condition.evaluatorConfig);
210
- const input = getEvaluatorInputRecord(args.inputData, "metricData");
211
- const metric = typeof input.metric === "string" && input.metric.length > 0 ? input.metric : config.metric;
212
- const observedValue = pickFiniteNumber(input, [
213
- "observedValue",
214
- "currentValue",
215
- "metricValue",
216
- "value"
217
- ]) ?? config.observedValue ?? config.currentValue ?? config.metricValue ?? null;
218
- if (observedValue === null) {
376
+ function evaluateMetricCheckerContract(args) {
377
+ return Promise.resolve().then(() => {
378
+ const config = parseMetricCheckerConfig(
379
+ args.contract.condition.evaluatorConfig
380
+ );
381
+ const input = getEvaluatorInputRecord(args.inputData, "metricData");
382
+ const metric = typeof input.metric === "string" && input.metric.length > 0 ? input.metric : config.metric;
383
+ const observedValue = pickFiniteNumber(input, [
384
+ "observedValue",
385
+ "currentValue",
386
+ "metricValue",
387
+ "value"
388
+ ]) ?? config.observedValue ?? config.currentValue ?? config.metricValue ?? null;
389
+ if (observedValue === null) {
390
+ return {
391
+ result: "inconclusive",
392
+ rationale: `metric_checker is awaiting data for ${metric ?? args.contract.condition.expression}.`,
393
+ data: {
394
+ metric,
395
+ observedValue: null,
396
+ operator: config.operator,
397
+ threshold: config.threshold,
398
+ unit: config.unit
399
+ }
400
+ };
401
+ }
402
+ const comparisonSatisfied = compareMetricValue(
403
+ config.operator,
404
+ observedValue,
405
+ config.threshold
406
+ );
407
+ const result = resolveComparisonResult(
408
+ args.contract.direction,
409
+ comparisonSatisfied
410
+ );
219
411
  return {
220
- result: "inconclusive",
221
- rationale: `metric_checker is awaiting data for ${metric ?? args.contract.condition.expression}.`,
412
+ result,
413
+ rationale: buildComparisonRationale({
414
+ label: metric ?? "metric",
415
+ observedValue,
416
+ operator: config.operator,
417
+ threshold: config.threshold,
418
+ comparisonSatisfied,
419
+ result,
420
+ unit: config.unit
421
+ }),
222
422
  data: {
223
423
  metric,
224
- observedValue: null,
424
+ observedValue,
225
425
  operator: config.operator,
226
426
  threshold: config.threshold,
227
427
  unit: config.unit
228
428
  }
229
429
  };
230
- }
231
- const comparisonSatisfied = compareMetricValue(
232
- config.operator,
233
- observedValue,
234
- config.threshold
235
- );
236
- const result = resolveComparisonResult(args.contract.direction, comparisonSatisfied);
237
- return {
238
- result,
239
- rationale: buildComparisonRationale({
240
- label: metric ?? "metric",
241
- observedValue,
242
- operator: config.operator,
243
- threshold: config.threshold,
244
- comparisonSatisfied,
245
- result,
246
- unit: config.unit
247
- }),
248
- data: {
249
- metric,
250
- observedValue,
251
- operator: config.operator,
252
- threshold: config.threshold,
253
- unit: config.unit
254
- }
255
- };
430
+ });
256
431
  }
257
432
  async function evaluateReferenceCheckCounterContract(args) {
258
- const config = parseReferenceCheckCounterConfig(args.contract.condition.evaluatorConfig);
433
+ const config = parseReferenceCheckCounterConfig(
434
+ args.contract.condition.evaluatorConfig
435
+ );
259
436
  const input = getEvaluatorInputRecord(args.inputData, "referenceCheckData");
260
437
  const tag = typeof input.tag === "string" && input.tag.trim().length > 0 ? input.tag.trim() : config.tag;
261
438
  const snapshot = await computeTaggedEvidenceCount({
@@ -269,7 +446,10 @@ async function evaluateReferenceCheckCounterContract(args) {
269
446
  snapshot.count,
270
447
  config.threshold
271
448
  );
272
- const result = resolveComparisonResult(args.contract.direction, comparisonSatisfied);
449
+ const result = resolveComparisonResult(
450
+ args.contract.direction,
451
+ comparisonSatisfied
452
+ );
273
453
  return {
274
454
  result,
275
455
  rationale: buildComparisonRationale({
@@ -291,131 +471,168 @@ async function evaluateReferenceCheckCounterContract(args) {
291
471
  }
292
472
  };
293
473
  }
294
- async function evaluateTemporalDeadlineContract(args) {
295
- if (typeof args.contract.deadline !== "number" || !Number.isFinite(args.contract.deadline)) {
296
- throw new Error(
297
- "temporal_deadline requires contract.deadline to be set to a finite timestamp."
298
- );
299
- }
300
- const config = parseTemporalDeadlineConfig(args.contract.condition.evaluatorConfig);
301
- const input = getEvaluatorInputRecord(args.inputData, "temporalData");
302
- const label = (typeof input.label === "string" && input.label.length > 0 ? input.label : config.label) ?? args.contract.title ?? args.contract.condition.expression;
303
- const completedAt = pickFiniteNumber(input, [
304
- "completedAt",
305
- "observedAt",
306
- "satisfiedAt",
307
- "achievedAt"
308
- ]) ?? config.completedAt ?? config.observedAt ?? config.satisfiedAt ?? config.achievedAt;
309
- const completed = input.completed === true || config.completed === true || completedAt !== void 0;
310
- if (completed) {
311
- if (completedAt !== void 0 && completedAt > args.contract.deadline) {
312
- return {
313
- result: "expired",
314
- rationale: `${label} completed at ${completedAt}, after deadline ${args.contract.deadline}.`,
315
- data: {
316
- label,
317
- deadline: args.contract.deadline,
318
- completed: true,
319
- completedAt,
320
- missedDeadline: true,
321
- overdueByMs: completedAt - args.contract.deadline
322
- }
323
- };
324
- }
325
- const result = args.contract.direction === "falsifies" ? "disconfirmed" : "confirmed";
474
+ function resolveCompletedTemporalDeadlineResult(args) {
475
+ const { completedAt, context, deadline, label } = args;
476
+ if (completedAt !== void 0 && completedAt > deadline) {
326
477
  return {
327
- result,
328
- rationale: `${label} completed before deadline ${args.contract.deadline}.`,
478
+ result: "expired",
479
+ rationale: `${label} completed at ${completedAt}, after deadline ${deadline}.`,
329
480
  data: {
330
481
  label,
331
- deadline: args.contract.deadline,
482
+ deadline,
332
483
  completed: true,
333
- completedAt: completedAt ?? null,
334
- missedDeadline: false
484
+ completedAt,
485
+ missedDeadline: true,
486
+ overdueByMs: completedAt - deadline
335
487
  }
336
488
  };
337
489
  }
338
- if (args.now > args.contract.deadline) {
490
+ const result = context.contract.direction === "falsifies" ? "disconfirmed" : "confirmed";
491
+ return {
492
+ result,
493
+ rationale: `${label} completed before deadline ${deadline}.`,
494
+ data: {
495
+ label,
496
+ deadline,
497
+ completed: true,
498
+ completedAt: completedAt ?? null,
499
+ missedDeadline: false
500
+ }
501
+ };
502
+ }
503
+ function resolveOpenTemporalDeadlineResult(args) {
504
+ const { context, deadline, label } = args;
505
+ if (context.now > deadline) {
339
506
  return {
340
507
  result: "expired",
341
- rationale: `${label} missed deadline ${args.contract.deadline}; temporal contract expired.`,
508
+ rationale: `${label} missed deadline ${deadline}; temporal contract expired.`,
342
509
  data: {
343
510
  label,
344
- deadline: args.contract.deadline,
511
+ deadline,
345
512
  completed: false,
346
- overdueByMs: args.now - args.contract.deadline
513
+ overdueByMs: context.now - deadline
347
514
  }
348
515
  };
349
516
  }
350
517
  return {
351
518
  result: "inconclusive",
352
- rationale: `${label} is still before deadline ${args.contract.deadline}; awaiting outcome.`,
519
+ rationale: `${label} is still before deadline ${deadline}; awaiting outcome.`,
353
520
  data: {
354
521
  label,
355
- deadline: args.contract.deadline,
522
+ deadline,
356
523
  completed: false,
357
- timeRemainingMs: args.contract.deadline - args.now
524
+ timeRemainingMs: deadline - context.now
358
525
  }
359
526
  };
360
527
  }
361
- async function evaluateMarketIndexComparatorContract(args) {
362
- const config = parseMarketIndexComparatorConfig(args.contract.condition.evaluatorConfig);
363
- const input = getEvaluatorInputRecord(args.inputData, "marketIndexData");
364
- const subject = typeof input.subject === "string" && input.subject.length > 0 ? input.subject : config.subject;
365
- const benchmark = typeof input.benchmark === "string" && input.benchmark.length > 0 ? input.benchmark : config.benchmark;
366
- const subjectValue = pickFiniteNumber(input, ["subjectValue", "primaryValue", "leftValue"]) ?? config.subjectValue ?? config.primaryValue ?? null;
367
- const benchmarkValue = pickFiniteNumber(input, ["benchmarkValue", "comparisonValue", "rightValue"]) ?? config.benchmarkValue ?? config.comparisonValue ?? null;
368
- if (subjectValue === null || benchmarkValue === null) {
528
+ function evaluateTemporalDeadlineContract(args) {
529
+ return Promise.resolve().then(() => {
530
+ if (typeof args.contract.deadline !== "number" || !Number.isFinite(args.contract.deadline)) {
531
+ throw new Error(
532
+ "temporal_deadline requires contract.deadline to be set to a finite timestamp."
533
+ );
534
+ }
535
+ const deadline = args.contract.deadline;
536
+ const config = parseTemporalDeadlineConfig(
537
+ args.contract.condition.evaluatorConfig
538
+ );
539
+ const input = getEvaluatorInputRecord(args.inputData, "temporalData");
540
+ const label = (typeof input.label === "string" && input.label.length > 0 ? input.label : config.label) ?? args.contract.title ?? args.contract.condition.expression;
541
+ const completedAt = pickFiniteNumber(input, [
542
+ "completedAt",
543
+ "observedAt",
544
+ "satisfiedAt",
545
+ "achievedAt"
546
+ ]) ?? config.completedAt ?? config.observedAt ?? config.satisfiedAt ?? config.achievedAt;
547
+ const completed = input.completed === true || config.completed === true || completedAt !== void 0;
548
+ if (completed) {
549
+ return resolveCompletedTemporalDeadlineResult({
550
+ completedAt,
551
+ context: args,
552
+ deadline,
553
+ label
554
+ });
555
+ }
556
+ return resolveOpenTemporalDeadlineResult({
557
+ context: args,
558
+ deadline,
559
+ label
560
+ });
561
+ });
562
+ }
563
+ function evaluateMarketIndexComparatorContract(args) {
564
+ return Promise.resolve().then(() => {
565
+ const config = parseMarketIndexComparatorConfig(
566
+ args.contract.condition.evaluatorConfig
567
+ );
568
+ const input = getEvaluatorInputRecord(args.inputData, "marketIndexData");
569
+ const subject = typeof input.subject === "string" && input.subject.length > 0 ? input.subject : config.subject;
570
+ const benchmark = typeof input.benchmark === "string" && input.benchmark.length > 0 ? input.benchmark : config.benchmark;
571
+ const subjectValue = pickFiniteNumber(input, ["subjectValue", "primaryValue", "leftValue"]) ?? config.subjectValue ?? config.primaryValue ?? null;
572
+ const benchmarkValue = pickFiniteNumber(input, [
573
+ "benchmarkValue",
574
+ "comparisonValue",
575
+ "rightValue"
576
+ ]) ?? config.benchmarkValue ?? config.comparisonValue ?? null;
577
+ if (subjectValue === null || benchmarkValue === null) {
578
+ return {
579
+ result: "inconclusive",
580
+ rationale: "market_index_comparator is awaiting both subject and benchmark values.",
581
+ data: {
582
+ subject,
583
+ subjectValue,
584
+ benchmark,
585
+ benchmarkValue,
586
+ operator: config.operator,
587
+ threshold: config.threshold
588
+ }
589
+ };
590
+ }
591
+ if (benchmarkValue === 0) {
592
+ throw new Error(
593
+ "market_index_comparator cannot compare against a zero benchmark value."
594
+ );
595
+ }
596
+ const differentialPercent = (subjectValue - benchmarkValue) / Math.abs(benchmarkValue) * 100;
597
+ const comparisonSatisfied = compareMetricValue(
598
+ config.operator,
599
+ differentialPercent,
600
+ config.threshold
601
+ );
602
+ const result = resolveComparisonResult(
603
+ args.contract.direction,
604
+ comparisonSatisfied
605
+ );
369
606
  return {
370
- result: "inconclusive",
371
- rationale: "market_index_comparator is awaiting both subject and benchmark values.",
607
+ result,
608
+ rationale: buildComparisonRationale({
609
+ label: `${subject ?? "subject"} vs ${benchmark ?? "benchmark"} differential`,
610
+ observedValue: differentialPercent,
611
+ operator: config.operator,
612
+ threshold: config.threshold,
613
+ comparisonSatisfied,
614
+ result,
615
+ unit: "%"
616
+ }),
372
617
  data: {
373
618
  subject,
374
619
  subjectValue,
375
620
  benchmark,
376
621
  benchmarkValue,
622
+ differentialPercent,
377
623
  operator: config.operator,
378
624
  threshold: config.threshold
379
625
  }
380
626
  };
381
- }
382
- if (benchmarkValue === 0) {
383
- throw new Error(
384
- "market_index_comparator cannot compare against a zero benchmark value."
385
- );
386
- }
387
- const differentialPercent = (subjectValue - benchmarkValue) / Math.abs(benchmarkValue) * 100;
388
- const comparisonSatisfied = compareMetricValue(
389
- config.operator,
390
- differentialPercent,
391
- config.threshold
392
- );
393
- const result = resolveComparisonResult(args.contract.direction, comparisonSatisfied);
394
- return {
395
- result,
396
- rationale: buildComparisonRationale({
397
- label: `${subject ?? "subject"} vs ${benchmark ?? "benchmark"} differential`,
398
- observedValue: differentialPercent,
399
- operator: config.operator,
400
- threshold: config.threshold,
401
- comparisonSatisfied,
402
- result,
403
- unit: "%"
404
- }),
405
- data: {
406
- subject,
407
- subjectValue,
408
- benchmark,
409
- benchmarkValue,
410
- differentialPercent,
411
- operator: config.operator,
412
- threshold: config.threshold
413
- }
414
- };
627
+ });
415
628
  }
416
629
  var METRIC_COMPARATOR_EVALUATOR_NAMES = {
417
630
  evidential: "evidential",
418
- evidentialAliases: /* @__PURE__ */ new Set(["evidential", "built_in_evidential", "builtin_evidential"]),
631
+ evidentialAliases: /* @__PURE__ */ new Set([
632
+ "evidential",
633
+ "built_in_evidential",
634
+ "builtin_evidential"
635
+ ]),
419
636
  metricChecker: "metric_checker",
420
637
  referenceCheckCounter: "reference_check_counter",
421
638
  temporalDeadline: "temporal_deadline",