@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/epistemicContracts.metrics.ts"],"names":[],"mappings":"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","file":"epistemicContracts.metrics.js","sourcesContent":["/** 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"]}
1
+ {"version":3,"sources":["../src/epistemicContracts.metrics.ts"],"names":[],"mappings":"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","file":"epistemicContracts.metrics.js","sourcesContent":["// 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"]}
@@ -1,159 +1,165 @@
1
1
  import { Id, MutationCtx, QueryCtx } from './convex.js';
2
2
  import { EpistemicContractEvaluationResult, EpistemicContractRecord } from '@lucern/confidence';
3
+ import '@lucern/access-control/convex';
4
+ import '@lucern/contracts/convex/unsafeAnyApi';
3
5
  import 'convex/values';
4
6
 
5
7
  /** Shared types for epistemic contract lifecycle and evaluator internals. */
6
8
 
7
- type EpistemicEvaluatorResult = {
8
- result: EpistemicContractEvaluationResult;
9
+ interface EpistemicEvaluatorResult {
9
10
  confidence?: number;
10
11
  data?: unknown;
11
12
  rationale: string;
12
- };
13
- type EpistemicEvaluatorContext = {
13
+ result: EpistemicContractEvaluationResult;
14
+ }
15
+ interface EpistemicEvaluatorContext {
14
16
  belief: BeliefNodeDoc;
15
17
  contract: ContractDoc;
16
18
  ctx: MutationCtx;
19
+ inputData?: unknown;
17
20
  now: number;
18
21
  resultData?: unknown;
19
22
  trigger: string;
20
- inputData?: unknown;
21
- };
22
- type EpistemicEvaluator = {
23
- name: string;
23
+ }
24
+ interface EpistemicEvaluator {
24
25
  evaluate(args: EpistemicEvaluatorContext): Promise<EpistemicEvaluatorResult> | EpistemicEvaluatorResult;
25
- };
26
- type BeliefNodeDoc = {
26
+ name: string;
27
+ }
28
+ interface BeliefNodeDoc {
27
29
  _id: Id<"epistemicNodes">;
28
- nodeType: "belief";
29
30
  canonicalText: string;
30
- projectId?: string;
31
- topicId?: Id<"topics"> | string;
32
31
  confidence?: number;
32
+ nodeType: "belief";
33
+ projectId?: string;
33
34
  status?: string;
35
+ topicId?: Id<"topics"> | string;
34
36
  [key: string]: unknown;
35
- };
37
+ }
36
38
  type ContractDoc = EpistemicContractRecord<Id<"epistemicNodes">, Id<"topics"> | string | undefined> & {
37
39
  _id: string;
38
40
  _creationTime: number;
39
41
  };
40
- type ContractEvaluationDoc = {
41
- contractId: string;
42
+ interface ContractEvaluationDoc {
43
+ _creationTime: number;
44
+ _id: string;
45
+ beliefConfidenceId?: Id<"beliefConfidence">;
42
46
  beliefNodeId: Id<"epistemicNodes">;
43
- result: EpistemicContractEvaluationResult;
47
+ confidenceAfter?: number;
48
+ confidenceBefore?: number;
49
+ confidenceDelta?: number;
50
+ contractId: string;
44
51
  evaluatedAt: number;
45
52
  evaluator: string;
46
- trigger: string;
47
- resultData?: unknown;
48
53
  modulationApplied: boolean;
49
- confidenceDelta?: number;
50
- confidenceBefore?: number;
51
- confidenceAfter?: number;
52
- beliefConfidenceId?: Id<"beliefConfidence">;
53
54
  modulationRationale?: string;
55
+ result: EpistemicContractEvaluationResult;
56
+ resultData?: unknown;
54
57
  topicId?: Id<"topics"> | string;
55
- _id: string;
56
- _creationTime: number;
57
- };
58
- type EvidenceEdgeDoc = {
59
- fromNodeId: Id<"epistemicNodes">;
60
- weight?: number;
61
- updatedAt?: number;
62
- createdAt?: number;
58
+ trigger: string;
59
+ }
60
+ interface EvidenceEdgeDoc {
63
61
  _creationTime?: number;
64
- };
65
- type EvidenceNodeDoc = {
62
+ createdAt?: number;
63
+ fromGlobalId?: string;
64
+ fromNodeId: string;
65
+ fromUuid?: string;
66
+ sourceGlobalId?: string;
67
+ updatedAt?: number;
68
+ weight?: number;
69
+ }
70
+ interface EvidenceNodeDoc {
66
71
  _id: Id<"epistemicNodes">;
72
+ globalId?: string;
73
+ metadata?: unknown;
67
74
  nodeType: string;
68
75
  status?: string;
69
- metadata?: unknown;
70
- };
71
- type ContradictionStatusCounts = {
76
+ }
77
+ interface ContradictionStatusCounts {
72
78
  activeCount: number;
73
79
  resolvedCount: number;
74
- };
75
- type EvidenceFreshness = {
80
+ }
81
+ interface EvidenceFreshness {
82
+ edgeCount: number;
76
83
  newestAgeMs: number | null;
77
- oldestAgeMs: number | null;
78
84
  newestEdgeAt: number | null;
85
+ oldestAgeMs: number | null;
79
86
  oldestEdgeAt: number | null;
80
- edgeCount: number;
81
- };
87
+ }
82
88
  type EvidentialMetric = "evidence_count" | "contradiction_status" | "edge_freshness" | "dependent_count";
83
89
  type EvidentialAction = "append_sl_scoring" | "flag_review" | "archive";
84
- type EvidentialEvaluatorConfig = {
85
- metric: EvidentialMetric;
86
- operator: "gte" | "lte" | "eq" | "gt" | "lt";
87
- threshold: number;
90
+ interface EvidentialEvaluatorConfig {
88
91
  action?: EvidentialAction;
89
92
  actionParams?: {
90
93
  targetConfidence?: number;
91
94
  rationale?: string;
92
95
  };
93
- };
94
- type EvidentialMetricSnapshot = {
95
96
  metric: EvidentialMetric;
96
- value: number | null;
97
- data: Record<string, unknown>;
98
- };
99
- type MetricCheckerEvaluatorConfig = {
100
- metric?: string;
101
97
  operator: "gte" | "lte" | "eq" | "gt" | "lt";
102
98
  threshold: number;
103
- observedValue?: number;
99
+ }
100
+ interface EvidentialMetricSnapshot {
101
+ data: Record<string, unknown>;
102
+ metric: EvidentialMetric;
103
+ value: number | null;
104
+ }
105
+ interface MetricCheckerEvaluatorConfig {
104
106
  currentValue?: number;
107
+ metric?: string;
105
108
  metricValue?: number;
106
- unit?: string;
107
- };
108
- type ReferenceCheckCounterConfig = {
109
- tag: string;
109
+ observedValue?: number;
110
110
  operator: "gte" | "lte" | "eq" | "gt" | "lt";
111
111
  threshold: number;
112
+ unit?: string;
113
+ }
114
+ interface ReferenceCheckCounterConfig {
112
115
  caseSensitive?: boolean;
113
- };
114
- type TemporalDeadlineEvaluatorConfig = {
115
- label?: string;
116
+ operator: "gte" | "lte" | "eq" | "gt" | "lt";
117
+ tag: string;
118
+ threshold: number;
119
+ }
120
+ interface TemporalDeadlineEvaluatorConfig {
121
+ achievedAt?: number;
116
122
  completed?: boolean;
117
123
  completedAt?: number;
124
+ label?: string;
118
125
  observedAt?: number;
119
126
  satisfiedAt?: number;
120
- achievedAt?: number;
121
- };
122
- type MarketIndexComparatorConfig = {
123
- subject?: string;
124
- subjectValue?: number;
125
- primaryValue?: number;
127
+ }
128
+ interface MarketIndexComparatorConfig {
126
129
  benchmark?: string;
127
130
  benchmarkValue?: number;
128
131
  comparisonValue?: number;
129
132
  operator: "gte" | "lte" | "eq" | "gt" | "lt";
133
+ primaryValue?: number;
134
+ subject?: string;
135
+ subjectValue?: number;
130
136
  threshold: number;
131
- };
132
- type ContractEvaluationExecution = {
137
+ }
138
+ interface ContractEvaluationExecution {
139
+ confidenceAfter: number;
140
+ confidenceBefore: number;
141
+ currentConfidence: number;
142
+ data?: unknown;
133
143
  evaluationId: string;
144
+ rationale: string;
134
145
  result: EpistemicContractEvaluationResult;
135
146
  status: ContractDoc["status"];
136
- confidenceBefore: number;
137
- confidenceAfter: number;
138
- rationale: string;
139
- data?: unknown;
140
- currentConfidence: number;
141
- };
142
- type TriggerBatchResult = {
143
- totalContracts: number;
144
- processedCount: number;
145
- overflowCount: number;
146
- scheduledOverflow: boolean;
147
+ }
148
+ interface TriggerBatchResult {
147
149
  batchSize: number;
148
150
  executionTimeMs: number;
149
- trigger: string;
151
+ overflowCount: number;
152
+ processedCount: number;
150
153
  results: Array<{
151
154
  contractId: string;
152
155
  result: EpistemicContractEvaluationResult;
153
156
  status: ContractDoc["status"];
154
157
  confidenceAfter: number;
155
158
  }>;
156
- };
159
+ scheduledOverflow: boolean;
160
+ totalContracts: number;
161
+ trigger: string;
162
+ }
157
163
  type ContractReadCtx = MutationCtx | QueryCtx;
158
164
 
159
165
  export type { BeliefNodeDoc, ContractDoc, ContractEvaluationDoc, ContractEvaluationExecution, ContractReadCtx, ContradictionStatusCounts, EpistemicEvaluator, EpistemicEvaluatorContext, EpistemicEvaluatorResult, EvidenceEdgeDoc, EvidenceFreshness, EvidenceNodeDoc, EvidentialAction, EvidentialEvaluatorConfig, EvidentialMetric, EvidentialMetricSnapshot, MarketIndexComparatorConfig, MetricCheckerEvaluatorConfig, ReferenceCheckCounterConfig, TemporalDeadlineEvaluatorConfig, TriggerBatchResult };
@@ -1,4 +1,6 @@
1
1
  import { MutationCtx, Id } from './convex.js';
2
+ import '@lucern/access-control/convex';
3
+ import '@lucern/contracts/convex/unsafeAnyApi';
2
4
  import 'convex/values';
3
5
 
4
6
  /**
@@ -1,9 +1,13 @@
1
- import { componentsGeneric, anyApi } from 'convex/server';
1
+ import { unsafeConvexAnyApi } from '@lucern/contracts/convex/unsafeAnyApi';
2
+ import { componentsGeneric } from 'convex/server';
2
3
  import { generateGlobalId } from '@lucern/contracts/ids';
3
4
 
4
5
  // src/convex.ts
6
+ var unsafeApi = unsafeConvexAnyApi(
7
+ "graph-primitives top-level module bundle lacks a committed Convex _generated/api surface"
8
+ );
5
9
  componentsGeneric();
6
- var internal = anyApi;
10
+ var internal = unsafeApi;
7
11
 
8
12
  // src/epistemicLayerRules.ts
9
13
  function getNodeLayer(nodeType) {
@@ -335,6 +339,61 @@ function validateEdgeLayers(edgeType, fromLayer, toLayer) {
335
339
  }
336
340
 
337
341
  // src/epistemicEdgeCreation.ts
342
+ var EPISTEMIC_LAYERS = /* @__PURE__ */ new Set([
343
+ "L4",
344
+ "L3",
345
+ "L2",
346
+ "L1",
347
+ "ontological",
348
+ "organizational"
349
+ ]);
350
+ function readOptionalString(value) {
351
+ return typeof value === "string" && value.trim().length > 0 ? value : void 0;
352
+ }
353
+ function readConvexId(value) {
354
+ const normalized = readOptionalString(value);
355
+ return normalized;
356
+ }
357
+ function readEpistemicLayer(value) {
358
+ const layer = readOptionalString(value);
359
+ return layer && EPISTEMIC_LAYERS.has(layer) ? layer : void 0;
360
+ }
361
+ function readRecord(value) {
362
+ return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
363
+ }
364
+ function readEdgeNodeRow(value) {
365
+ const record = readRecord(value);
366
+ if (!record) {
367
+ return null;
368
+ }
369
+ const id = readConvexId(record._id);
370
+ const globalId = readOptionalString(record.globalId);
371
+ const nodeType = readOptionalString(record.nodeType);
372
+ if (!(id && globalId && nodeType)) {
373
+ return null;
374
+ }
375
+ const node = { _id: id, globalId, nodeType };
376
+ const epistemicLayer = readEpistemicLayer(record.epistemicLayer);
377
+ if (epistemicLayer !== void 0) {
378
+ node.epistemicLayer = epistemicLayer;
379
+ }
380
+ const metadata = readRecord(record.metadata);
381
+ if (metadata !== void 0) {
382
+ node.metadata = metadata;
383
+ }
384
+ const projectId = readOptionalString(record.projectId);
385
+ if (projectId !== void 0) {
386
+ node.projectId = projectId;
387
+ }
388
+ return node;
389
+ }
390
+ function requireEdgeNodeRow(value, context) {
391
+ const node = readEdgeNodeRow(value);
392
+ if (!node) {
393
+ throw new Error(`${context} requires a canonical epistemic node row.`);
394
+ }
395
+ return node;
396
+ }
338
397
  function normalizeConfidence(confidence) {
339
398
  if (typeof confidence === "number") {
340
399
  return confidence > 1 ? confidence / 100 : confidence;
@@ -355,13 +414,16 @@ function normalizeConfidence(confidence) {
355
414
  }
356
415
  async function createEpistemicEdge(ctx, params) {
357
416
  const globalId = generateGlobalId();
358
- const fromNode = await ctx.db.get(params.fromNodeId);
359
- const toNode = await ctx.db.get(params.toNodeId);
360
- if (!fromNode || !toNode) {
361
- throw new Error("One or both nodes not found");
362
- }
363
- const fromLayer = fromNode.epistemicLayer || getNodeLayer(fromNode.nodeType);
364
- const toLayer = toNode.epistemicLayer || getNodeLayer(toNode.nodeType);
417
+ const fromNode = requireEdgeNodeRow(
418
+ await ctx.db.get(params.fromNodeId),
419
+ "Create epistemic edge source"
420
+ );
421
+ const toNode = requireEdgeNodeRow(
422
+ await ctx.db.get(params.toNodeId),
423
+ "Create epistemic edge target"
424
+ );
425
+ const fromLayer = fromNode.epistemicLayer ?? getNodeLayer(fromNode.nodeType);
426
+ const toLayer = toNode.epistemicLayer ?? getNodeLayer(toNode.nodeType);
365
427
  if (!params.skipLayerValidation) {
366
428
  const validation = validateEdgeLayers(params.edgeType, fromLayer, toLayer);
367
429
  if (!validation.valid) {
@@ -398,11 +460,11 @@ async function createEdgeForInsightQuestionLink(ctx, questionId, insightId, crea
398
460
  questionNode: questionNode ? String(questionNode) : null,
399
461
  insightNode: insightNode ? String(insightNode) : null
400
462
  });
401
- if (!questionNode || !insightNode) {
463
+ if (!(questionNode && insightNode)) {
402
464
  console.log("[EpistemicSpine] Missing nodes, skipping edge creation");
403
465
  return null;
404
466
  }
405
- const question = await ctx.db.get(questionId);
467
+ const question = readEdgeNodeRow(await ctx.db.get(questionId));
406
468
  const projectId = question?.projectId;
407
469
  return await createEpistemicEdge(ctx, {
408
470
  fromNodeId: insightNode,
@@ -414,16 +476,16 @@ async function createEdgeForInsightQuestionLink(ctx, questionId, insightId, crea
414
476
  });
415
477
  }
416
478
  async function findNodeByLegacyId(ctx, legacyType, legacyId) {
417
- const nodeType = legacyType === "insight" ? "evidence" : legacyType === "artifact" ? "source" : legacyType;
479
+ const nodeType = normalizeLegacyNodeType(legacyType);
418
480
  const nodes = await ctx.db.query("epistemicNodes").withIndex(
419
481
  "by_nodeType",
420
482
  (q) => q.eq("nodeType", nodeType)
421
483
  ).collect();
422
484
  const legacyKey = `legacy${legacyType.charAt(0).toUpperCase() + legacyType.slice(1)}Id`;
423
485
  const legacyIdStr = String(legacyId);
424
- const found = nodes.find((n) => {
425
- const metadata = n.metadata;
426
- const storedId = metadata?.[legacyKey];
486
+ const found = nodes.find((candidate) => {
487
+ const node = readEdgeNodeRow(candidate);
488
+ const storedId = node?.metadata?.[legacyKey];
427
489
  return storedId && String(storedId) === legacyIdStr;
428
490
  });
429
491
  if (!found) {
@@ -431,7 +493,16 @@ async function findNodeByLegacyId(ctx, legacyType, legacyId) {
431
493
  `[EpistemicSpine] Node not found for ${legacyType}:${legacyIdStr}, searched ${nodes.length} ${nodeType} nodes`
432
494
  );
433
495
  }
434
- return found?._id ?? null;
496
+ return readEdgeNodeRow(found)?._id ?? null;
497
+ }
498
+ function normalizeLegacyNodeType(legacyType) {
499
+ if (legacyType === "insight") {
500
+ return "evidence";
501
+ }
502
+ if (legacyType === "artifact") {
503
+ return "source";
504
+ }
505
+ return legacyType;
435
506
  }
436
507
 
437
508
  export { createEdgeForInsightQuestionLink, createEpistemicEdge, normalizeConfidence };