@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
@@ -36,7 +36,7 @@ function normalizeToolResultEnvelope(value) {
36
36
  };
37
37
  }
38
38
 
39
- // src/evaluators/sentryCheckerEvaluator.ts
39
+ // src/evaluators/sentry-checker-evaluator.ts
40
40
  function parseConfig(condition) {
41
41
  const record = asRecord(condition.evaluatorConfig);
42
42
  if (!record) {
@@ -122,5 +122,5 @@ var sentryCheckerEvaluator = {
122
122
  };
123
123
 
124
124
  export { sentryCheckerEvaluator };
125
- //# sourceMappingURL=sentryCheckerEvaluator.js.map
126
- //# sourceMappingURL=sentryCheckerEvaluator.js.map
125
+ //# sourceMappingURL=sentry-checker-evaluator.js.map
126
+ //# sourceMappingURL=sentry-checker-evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/evaluators/shared.ts","../../src/evaluators/sentry-checker-evaluator.ts"],"names":[],"mappings":"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","file":"sentry-checker-evaluator.js","sourcesContent":["/** Shared evaluator helpers and result-normalization utilities. */\n\nimport { debugGraphPrimitiveFallback } from \"../debug\";\nimport type {\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n} from \"../epistemicContractHelpers\";\n\nexport interface ToolResultEnvelope {\n command?: string;\n data?: unknown;\n exitCode?: number | null;\n output?: string;\n report?: unknown;\n stderr?: string;\n stdout?: string;\n}\n\ntype AnyRecord = Record<string, unknown>;\n\nconst WINDOWS_PATH_SEPARATORS = /\\\\/g;\nconst LEADING_DOT_SLASH = /^\\.\\//;\n\nexport function asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nexport function asNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nexport function asRecord(value: unknown): AnyRecord | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as AnyRecord)\n : null;\n}\n\nexport function asString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : null;\n}\n\nexport function deriveDirectionalResult(\n direction: EpistemicContractDirection,\n conditionSatisfied: boolean\n): EpistemicContractEvaluationResult {\n if (direction === \"falsifies\") {\n return conditionSatisfied ? \"disconfirmed\" : \"confirmed\";\n }\n return conditionSatisfied ? \"confirmed\" : \"disconfirmed\";\n}\n\nexport function extractTextCandidates(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n const candidate = asString(value);\n return candidate ? [candidate] : [];\n }\n\n const candidates = [\n record.stdout,\n record.stderr,\n record.output,\n record.text,\n record.message,\n record.raw,\n ]\n .map(asString)\n .filter((candidate): candidate is string => Boolean(candidate));\n\n for (const nestedKey of [\"report\", \"result\", \"data\", \"payload\"]) {\n const nested = record[nestedKey];\n if (nested !== value) {\n candidates.push(...extractTextCandidates(nested));\n }\n }\n\n return Array.from(new Set(candidates));\n}\n\nexport function normalizeFilePath(value: string): string {\n return value\n .replace(WINDOWS_PATH_SEPARATORS, \"/\")\n .replace(LEADING_DOT_SLASH, \"\");\n}\n\nexport function normalizeToolResultEnvelope(\n value: unknown\n): ToolResultEnvelope {\n const record = asRecord(value);\n if (!record) {\n return {\n output: asString(value) ?? undefined,\n };\n }\n\n const exitCode =\n asNumber(record.exitCode) ??\n asNumber(record.code) ??\n asNumber(record.status) ??\n null;\n\n return {\n command: asString(record.command) ?? undefined,\n data: record.data ?? record.payload,\n exitCode,\n output: asString(record.output) ?? undefined,\n report:\n record.report ??\n record.json ??\n record.result ??\n record.payload ??\n undefined,\n stderr: asString(record.stderr) ?? undefined,\n stdout: asString(record.stdout) ?? undefined,\n };\n}\n\nexport function parseJsonCandidate<T = unknown>(value: unknown): T | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value !== \"string\") {\n return value as T;\n }\n\n try {\n return JSON.parse(value) as T;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[evaluators/shared] Failed to parse JSON candidate\",\n {\n error,\n valueType: typeof value,\n }\n );\n return null;\n }\n}\n\nexport function patternMatchesPath(filePath: string, pattern: string): boolean {\n const normalizedPath = normalizeFilePath(filePath);\n const normalizedPattern = normalizeFilePath(pattern);\n const escaped = normalizedPattern.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regexPattern = escaped\n .replace(/\\\\\\*\\\\\\*/g, \".*\")\n .replace(/\\\\\\*/g, \"[^/]*\")\n .replace(/\\\\\\?/g, \"[^/]\");\n return new RegExp(`^${regexPattern}$`).test(normalizedPath);\n}\n\nexport function somePatternMatches(\n filePath: string | null | undefined,\n patterns: string[]\n): boolean {\n if (!filePath) {\n return false;\n }\n return patterns.some((pattern) => patternMatchesPath(filePath, pattern));\n}\n","/** Sentry-backed engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n normalizeToolResultEnvelope,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./test-runner-evaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ninterface SentryCheckerConfig {\n module: string;\n windowDays: number;\n}\n\nfunction parseConfig(\n condition: EpistemicContractCondition\n): SentryCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"sentry_checker requires evaluatorConfig with { module, windowDays }.\"\n );\n }\n\n const moduleName = asString(record.module);\n const windowDays = asNumber(record.windowDays);\n if (!moduleName || windowDays === null) {\n throw new Error(\n \"sentry_checker requires a module name and numeric windowDays.\"\n );\n }\n\n return {\n module: moduleName,\n windowDays,\n };\n}\n\nfunction parseIncidentCount(resultData: unknown): {\n incidentCount: number | null;\n moduleName: string | null;\n windowDays: number | null;\n} {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ??\n asRecord(envelope.data) ??\n asRecord(resultData);\n if (!record) {\n return {\n incidentCount: null,\n moduleName: null,\n windowDays: null,\n };\n }\n\n const incidents = asArray(record.incidents);\n const incidentCount =\n asNumber(record.incidentCount) ??\n (incidents.length > 0 ? incidents.length : null);\n\n return {\n incidentCount,\n moduleName: asString(record.module),\n windowDays: asNumber(record.windowDays),\n };\n}\n\nfunction matchesModule(contract: AnyContract, resultData: unknown): boolean {\n const config = parseConfig(contract.condition);\n const payload = parseIncidentCount(resultData);\n return !payload.moduleName || payload.moduleName === config.module;\n}\n\nexport const sentryCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"sentry_checker\",\n matches({ contract, resultData }) {\n return matchesModule(contract, resultData);\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"sentry_checker requires incident count resultData.\",\n };\n }\n\n const payload = parseIncidentCount(args.resultData);\n if (payload.incidentCount === null) {\n return {\n result: \"error\",\n rationale: \"sentry_checker could not determine an incident count.\",\n };\n }\n if (!matchesModule(args.contract, args.resultData)) {\n return {\n result: \"inconclusive\",\n rationale: `Sentry result targeted ${payload.moduleName}, not ${config.module}.`,\n };\n }\n\n const conditionSatisfied = payload.incidentCount === 0;\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Sentry reported zero incidents for ${config.module} over ${config.windowDays} day(s).`\n : `Sentry reported ${payload.incidentCount} incident(s) for ${config.module} over ${config.windowDays} day(s).`,\n data: {\n incidentCount: payload.incidentCount,\n module: config.module,\n windowDays: config.windowDays,\n },\n };\n },\n};\n"]}
@@ -2,7 +2,7 @@ import { EpistemicContractDirection, EpistemicContractEvaluationResult } from '@
2
2
 
3
3
  /** Shared evaluator helpers and result-normalization utilities. */
4
4
 
5
- type ToolResultEnvelope = {
5
+ interface ToolResultEnvelope {
6
6
  command?: string;
7
7
  data?: unknown;
8
8
  exitCode?: number | null;
@@ -10,7 +10,7 @@ type ToolResultEnvelope = {
10
10
  report?: unknown;
11
11
  stderr?: string;
12
12
  stdout?: string;
13
- };
13
+ }
14
14
  type AnyRecord = Record<string, unknown>;
15
15
  declare function asArray(value: unknown): unknown[];
16
16
  declare function asNumber(value: unknown): number | null;
@@ -11,6 +11,8 @@ function debugGraphPrimitiveFallback(message, context) {
11
11
  }
12
12
 
13
13
  // src/evaluators/shared.ts
14
+ var WINDOWS_PATH_SEPARATORS = /\\/g;
15
+ var LEADING_DOT_SLASH = /^\.\//;
14
16
  function asArray(value) {
15
17
  return Array.isArray(value) ? value : [];
16
18
  }
@@ -52,7 +54,7 @@ function extractTextCandidates(value) {
52
54
  return Array.from(new Set(candidates));
53
55
  }
54
56
  function normalizeFilePath(value) {
55
- return value.replace(/\\/g, "/").replace(/^\.\//, "");
57
+ return value.replace(WINDOWS_PATH_SEPARATORS, "/").replace(LEADING_DOT_SLASH, "");
56
58
  }
57
59
  function normalizeToolResultEnvelope(value) {
58
60
  const record = asRecord(value);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/debug.ts","../../src/evaluators/shared.ts"],"names":[],"mappings":"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","file":"shared.js","sourcesContent":["type GraphPrimitiveDebugEnvironment = {\n process?: {\n env?: Record<string, string | undefined>;\n };\n};\n\nfunction isGraphPrimitiveDebugEnabled(): boolean {\n const env = (globalThis as GraphPrimitiveDebugEnvironment).process?.env;\n return (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG === \"1\" ||\n env?.LUCERN_GRAPH_DEBUG === \"1\"\n );\n}\n\nexport function formatGraphPrimitiveError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error === null) {\n return \"null\";\n }\n if (error === undefined) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(error);\n } catch {\n return Object.prototype.toString.call(error);\n }\n}\n\nexport function debugGraphPrimitiveFallback(\n message: string,\n context?: Record<string, unknown>\n): void {\n if (!isGraphPrimitiveDebugEnabled()) {\n return;\n }\n console.debug(message, context ?? {});\n}\n","/** Shared evaluator helpers and result-normalization utilities. */\n\nimport type {\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n} from \"../epistemicContractHelpers\";\nimport { debugGraphPrimitiveFallback } from \"../debug\";\n\nexport type ToolResultEnvelope = {\n command?: string;\n data?: unknown;\n exitCode?: number | null;\n output?: string;\n report?: unknown;\n stderr?: string;\n stdout?: string;\n};\n\ntype AnyRecord = Record<string, unknown>;\n\nexport function asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nexport function asNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nexport function asRecord(value: unknown): AnyRecord | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as AnyRecord)\n : null;\n}\n\nexport function asString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : null;\n}\n\nexport function deriveDirectionalResult(\n direction: EpistemicContractDirection,\n conditionSatisfied: boolean,\n): EpistemicContractEvaluationResult {\n if (direction === \"falsifies\") {\n return conditionSatisfied ? \"disconfirmed\" : \"confirmed\";\n }\n return conditionSatisfied ? \"confirmed\" : \"disconfirmed\";\n}\n\nexport function extractTextCandidates(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n const candidate = asString(value);\n return candidate ? [candidate] : [];\n }\n\n const candidates = [\n record.stdout,\n record.stderr,\n record.output,\n record.text,\n record.message,\n record.raw,\n ]\n .map(asString)\n .filter((candidate): candidate is string => Boolean(candidate));\n\n for (const nestedKey of [\"report\", \"result\", \"data\", \"payload\"]) {\n const nested = record[nestedKey];\n if (nested !== value) {\n candidates.push(...extractTextCandidates(nested));\n }\n }\n\n return Array.from(new Set(candidates));\n}\n\nexport function normalizeFilePath(value: string): string {\n return value.replace(/\\\\/g, \"/\").replace(/^\\.\\//, \"\");\n}\n\nexport function normalizeToolResultEnvelope(\n value: unknown,\n): ToolResultEnvelope {\n const record = asRecord(value);\n if (!record) {\n return {\n output: asString(value) ?? undefined,\n };\n }\n\n const exitCode =\n asNumber(record.exitCode) ??\n asNumber(record.code) ??\n asNumber(record.status) ??\n null;\n\n return {\n command: asString(record.command) ?? undefined,\n data: record.data ?? record.payload,\n exitCode,\n output: asString(record.output) ?? undefined,\n report:\n record.report ??\n record.json ??\n record.result ??\n record.payload ??\n undefined,\n stderr: asString(record.stderr) ?? undefined,\n stdout: asString(record.stdout) ?? undefined,\n };\n}\n\nexport function parseJsonCandidate<T = unknown>(value: unknown): T | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value !== \"string\") {\n return value as T;\n }\n\n try {\n return JSON.parse(value) as T;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[evaluators/shared] Failed to parse JSON candidate\",\n {\n error,\n valueType: typeof value,\n },\n );\n return null;\n }\n}\n\nexport function patternMatchesPath(filePath: string, pattern: string): boolean {\n const normalizedPath = normalizeFilePath(filePath);\n const normalizedPattern = normalizeFilePath(pattern);\n const escaped = normalizedPattern.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regexPattern = escaped\n .replace(/\\\\\\*\\\\\\*/g, \".*\")\n .replace(/\\\\\\*/g, \"[^/]*\")\n .replace(/\\\\\\?/g, \"[^/]\");\n return new RegExp(`^${regexPattern}$`).test(normalizedPath);\n}\n\nexport function somePatternMatches(\n filePath: string | null | undefined,\n patterns: string[],\n): boolean {\n if (!filePath) {\n return false;\n }\n return patterns.some((pattern) => patternMatchesPath(filePath, pattern));\n}\n"]}
1
+ {"version":3,"sources":["../../src/debug.ts","../../src/evaluators/shared.ts"],"names":[],"mappings":";AAMA,SAAS,4BAAA,GAAwC;AAC/C,EAAA,MAAM,GAAA,GAAO,WAA8C,OAAA,EAAS,GAAA;AACpE,EAAA,OACE,GAAA,EAAK,4BAAA,KAAiC,GAAA,IAAO,GAAA,EAAK,kBAAA,KAAuB,GAAA;AAE7E;AAsBO,SAAS,2BAAA,CACd,SACA,OAAA,EACM;AACN,EAAA,IAAI,CAAC,8BAA6B,EAAG;AACnC,IAAA;AAAA,EACF;AACA,EAAA,OAAA,CAAQ,KAAA,CAAM,OAAA,EAAS,OAAA,IAAW,EAAE,CAAA;AACtC;;;ACrBA,IAAM,uBAAA,GAA0B,KAAA;AAChC,IAAM,iBAAA,GAAoB,OAAA;AAEnB,SAAS,QAAQ,KAAA,EAA2B;AACjD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,QAAQ,EAAC;AACzC;AAEO,SAAS,SAAS,KAAA,EAA+B;AACtD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,QAAA,CAAS,KAAK,IAAI,KAAA,GAAQ,IAAA;AACvE;AAEO,SAAS,SAAS,KAAA,EAAkC;AACzD,EAAA,OAAO,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAC5D,KAAA,GACD,IAAA;AACN;AAEO,SAAS,SAAS,KAAA,EAA+B;AACtD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,IAAA,GAAO,MAAA,GAAS,CAAA,GACtD,KAAA,CAAM,IAAA,EAAK,GACX,IAAA;AACN;AAEO,SAAS,uBAAA,CACd,WACA,kBAAA,EACmC;AACnC,EAAA,IAAI,cAAc,WAAA,EAAa;AAC7B,IAAA,OAAO,qBAAqB,cAAA,GAAiB,WAAA;AAAA,EAC/C;AACA,EAAA,OAAO,qBAAqB,WAAA,GAAc,cAAA;AAC5C;AAEO,SAAS,sBAAsB,KAAA,EAA0B;AAC9D,EAAA,MAAM,MAAA,GAAS,SAAS,KAAK,CAAA;AAC7B,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,SAAA,GAAY,SAAS,KAAK,CAAA;AAChC,IAAA,OAAO,SAAA,GAAY,CAAC,SAAS,CAAA,GAAI,EAAC;AAAA,EACpC;AAEA,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,MAAA,CAAO,MAAA;AAAA,IACP,MAAA,CAAO,MAAA;AAAA,IACP,MAAA,CAAO,MAAA;AAAA,IACP,MAAA,CAAO,IAAA;AAAA,IACP,MAAA,CAAO,OAAA;AAAA,IACP,MAAA,CAAO;AAAA,GACT,CACG,IAAI,QAAQ,CAAA,CACZ,OAAO,CAAC,SAAA,KAAmC,OAAA,CAAQ,SAAS,CAAC,CAAA;AAEhE,EAAA,KAAA,MAAW,aAAa,CAAC,QAAA,EAAU,QAAA,EAAU,MAAA,EAAQ,SAAS,CAAA,EAAG;AAC/D,IAAA,MAAM,MAAA,GAAS,OAAO,SAAS,CAAA;AAC/B,IAAA,IAAI,WAAW,KAAA,EAAO;AACpB,MAAA,UAAA,CAAW,IAAA,CAAK,GAAG,qBAAA,CAAsB,MAAM,CAAC,CAAA;AAAA,IAClD;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,UAAU,CAAC,CAAA;AACvC;AAEO,SAAS,kBAAkB,KAAA,EAAuB;AACvD,EAAA,OAAO,MACJ,OAAA,CAAQ,uBAAA,EAAyB,GAAG,CAAA,CACpC,OAAA,CAAQ,mBAAmB,EAAE,CAAA;AAClC;AAEO,SAAS,4BACd,KAAA,EACoB;AACpB,EAAA,MAAM,MAAA,GAAS,SAAS,KAAK,CAAA;AAC7B,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,QAAA,CAAS,KAAK,CAAA,IAAK;AAAA,KAC7B;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GACJ,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAA,IACxB,QAAA,CAAS,MAAA,CAAO,IAAI,CAAA,IACpB,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA,IACtB,IAAA;AAEF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,QAAA,CAAS,MAAA,CAAO,OAAO,CAAA,IAAK,MAAA;AAAA,IACrC,IAAA,EAAM,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,OAAA;AAAA,IAC5B,QAAA;AAAA,IACA,MAAA,EAAQ,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA,IAAK,MAAA;AAAA,IACnC,MAAA,EACE,OAAO,MAAA,IACP,MAAA,CAAO,QACP,MAAA,CAAO,MAAA,IACP,OAAO,OAAA,IACP,MAAA;AAAA,IACF,MAAA,EAAQ,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA,IAAK,MAAA;AAAA,IACnC,MAAA,EAAQ,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA,IAAK;AAAA,GACrC;AACF;AAEO,SAAS,mBAAgC,KAAA,EAA0B;AACxE,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EACzB,SAAS,KAAA,EAAO;AACd,IAAA,2BAAA;AAAA,MACE,oDAAA;AAAA,MACA;AAAA,QACE,KAAA;AAAA,QACA,WAAW,OAAO;AAAA;AACpB,KACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEO,SAAS,kBAAA,CAAmB,UAAkB,OAAA,EAA0B;AAC7E,EAAA,MAAM,cAAA,GAAiB,kBAAkB,QAAQ,CAAA;AACjD,EAAA,MAAM,iBAAA,GAAoB,kBAAkB,OAAO,CAAA;AACnD,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,OAAA,CAAQ,mBAAA,EAAqB,MAAM,CAAA;AACrE,EAAA,MAAM,YAAA,GAAe,OAAA,CAClB,OAAA,CAAQ,WAAA,EAAa,IAAI,CAAA,CACzB,OAAA,CAAQ,OAAA,EAAS,OAAO,CAAA,CACxB,OAAA,CAAQ,OAAA,EAAS,MAAM,CAAA;AAC1B,EAAA,OAAO,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA,CAAG,CAAA,CAAE,KAAK,cAAc,CAAA;AAC5D;AAEO,SAAS,kBAAA,CACd,UACA,QAAA,EACS;AACT,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,SAAS,IAAA,CAAK,CAAC,YAAY,kBAAA,CAAmB,QAAA,EAAU,OAAO,CAAC,CAAA;AACzE","file":"shared.js","sourcesContent":["interface GraphPrimitiveDebugEnvironment {\n process?: {\n env?: Record<string, string | undefined>;\n };\n}\n\nfunction isGraphPrimitiveDebugEnabled(): boolean {\n const env = (globalThis as GraphPrimitiveDebugEnvironment).process?.env;\n return (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG === \"1\" || env?.LUCERN_GRAPH_DEBUG === \"1\"\n );\n}\n\nexport function formatGraphPrimitiveError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error === null) {\n return \"null\";\n }\n if (error === undefined) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(error);\n } catch {\n return Object.prototype.toString.call(error);\n }\n}\n\nexport function debugGraphPrimitiveFallback(\n message: string,\n context?: Record<string, unknown>\n): void {\n if (!isGraphPrimitiveDebugEnabled()) {\n return;\n }\n console.debug(message, context ?? {});\n}\n","/** Shared evaluator helpers and result-normalization utilities. */\n\nimport { debugGraphPrimitiveFallback } from \"../debug\";\nimport type {\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n} from \"../epistemicContractHelpers\";\n\nexport interface ToolResultEnvelope {\n command?: string;\n data?: unknown;\n exitCode?: number | null;\n output?: string;\n report?: unknown;\n stderr?: string;\n stdout?: string;\n}\n\ntype AnyRecord = Record<string, unknown>;\n\nconst WINDOWS_PATH_SEPARATORS = /\\\\/g;\nconst LEADING_DOT_SLASH = /^\\.\\//;\n\nexport function asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nexport function asNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nexport function asRecord(value: unknown): AnyRecord | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as AnyRecord)\n : null;\n}\n\nexport function asString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : null;\n}\n\nexport function deriveDirectionalResult(\n direction: EpistemicContractDirection,\n conditionSatisfied: boolean\n): EpistemicContractEvaluationResult {\n if (direction === \"falsifies\") {\n return conditionSatisfied ? \"disconfirmed\" : \"confirmed\";\n }\n return conditionSatisfied ? \"confirmed\" : \"disconfirmed\";\n}\n\nexport function extractTextCandidates(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n const candidate = asString(value);\n return candidate ? [candidate] : [];\n }\n\n const candidates = [\n record.stdout,\n record.stderr,\n record.output,\n record.text,\n record.message,\n record.raw,\n ]\n .map(asString)\n .filter((candidate): candidate is string => Boolean(candidate));\n\n for (const nestedKey of [\"report\", \"result\", \"data\", \"payload\"]) {\n const nested = record[nestedKey];\n if (nested !== value) {\n candidates.push(...extractTextCandidates(nested));\n }\n }\n\n return Array.from(new Set(candidates));\n}\n\nexport function normalizeFilePath(value: string): string {\n return value\n .replace(WINDOWS_PATH_SEPARATORS, \"/\")\n .replace(LEADING_DOT_SLASH, \"\");\n}\n\nexport function normalizeToolResultEnvelope(\n value: unknown\n): ToolResultEnvelope {\n const record = asRecord(value);\n if (!record) {\n return {\n output: asString(value) ?? undefined,\n };\n }\n\n const exitCode =\n asNumber(record.exitCode) ??\n asNumber(record.code) ??\n asNumber(record.status) ??\n null;\n\n return {\n command: asString(record.command) ?? undefined,\n data: record.data ?? record.payload,\n exitCode,\n output: asString(record.output) ?? undefined,\n report:\n record.report ??\n record.json ??\n record.result ??\n record.payload ??\n undefined,\n stderr: asString(record.stderr) ?? undefined,\n stdout: asString(record.stdout) ?? undefined,\n };\n}\n\nexport function parseJsonCandidate<T = unknown>(value: unknown): T | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value !== \"string\") {\n return value as T;\n }\n\n try {\n return JSON.parse(value) as T;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[evaluators/shared] Failed to parse JSON candidate\",\n {\n error,\n valueType: typeof value,\n }\n );\n return null;\n }\n}\n\nexport function patternMatchesPath(filePath: string, pattern: string): boolean {\n const normalizedPath = normalizeFilePath(filePath);\n const normalizedPattern = normalizeFilePath(pattern);\n const escaped = normalizedPattern.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regexPattern = escaped\n .replace(/\\\\\\*\\\\\\*/g, \".*\")\n .replace(/\\\\\\*/g, \"[^/]*\")\n .replace(/\\\\\\?/g, \"[^/]\");\n return new RegExp(`^${regexPattern}$`).test(normalizedPath);\n}\n\nexport function somePatternMatches(\n filePath: string | null | undefined,\n patterns: string[]\n): boolean {\n if (!filePath) {\n return false;\n }\n return patterns.some((pattern) => patternMatchesPath(filePath, pattern));\n}\n"]}
@@ -1,7 +1,12 @@
1
1
  import { EpistemicContractRecord } from '@lucern/confidence';
2
- import { EpistemicEvaluator } from '../epistemicContracts.types.js';
2
+ import { EpistemicEvaluator } from '../epistemicContracts.js';
3
+ import '../epistemicContracts.evaluators.js';
3
4
  import '../convex.js';
5
+ import '@lucern/access-control/convex';
6
+ import '@lucern/contracts/convex/unsafeAnyApi';
4
7
  import 'convex/values';
8
+ import '../epistemicContracts.types.js';
9
+ import '../epistemicContracts.handlers.js';
5
10
 
6
11
  /** Test-runner engineering evaluator for epistemic contracts. */
7
12
 
@@ -11,6 +11,8 @@ function debugGraphPrimitiveFallback(message, context) {
11
11
  }
12
12
 
13
13
  // src/evaluators/shared.ts
14
+ var WINDOWS_PATH_SEPARATORS = /\\/g;
15
+ var LEADING_DOT_SLASH = /^\.\//;
14
16
  function asArray(value) {
15
17
  return Array.isArray(value) ? value : [];
16
18
  }
@@ -52,7 +54,7 @@ function extractTextCandidates(value) {
52
54
  return Array.from(new Set(candidates));
53
55
  }
54
56
  function normalizeFilePath(value) {
55
- return value.replace(/\\/g, "/").replace(/^\.\//, "");
57
+ return value.replace(WINDOWS_PATH_SEPARATORS, "/").replace(LEADING_DOT_SLASH, "");
56
58
  }
57
59
  function normalizeToolResultEnvelope(value) {
58
60
  const record = asRecord(value);
@@ -100,7 +102,7 @@ function patternMatchesPath(filePath, pattern) {
100
102
  return new RegExp(`^${regexPattern}$`).test(normalizedPath);
101
103
  }
102
104
 
103
- // src/evaluators/testRunnerEvaluator.ts
105
+ // src/evaluators/test-runner-evaluator.ts
104
106
  function parseConfig(condition) {
105
107
  const record = asRecord(condition.evaluatorConfig);
106
108
  if (!record) {
@@ -247,5 +249,5 @@ var testRunnerEvaluator = {
247
249
  };
248
250
 
249
251
  export { testRunnerEvaluator };
250
- //# sourceMappingURL=testRunnerEvaluator.js.map
251
- //# sourceMappingURL=testRunnerEvaluator.js.map
252
+ //# sourceMappingURL=test-runner-evaluator.js.map
253
+ //# sourceMappingURL=test-runner-evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/debug.ts","../../src/evaluators/shared.ts","../../src/evaluators/test-runner-evaluator.ts"],"names":[],"mappings":"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","file":"test-runner-evaluator.js","sourcesContent":["interface GraphPrimitiveDebugEnvironment {\n process?: {\n env?: Record<string, string | undefined>;\n };\n}\n\nfunction isGraphPrimitiveDebugEnabled(): boolean {\n const env = (globalThis as GraphPrimitiveDebugEnvironment).process?.env;\n return (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG === \"1\" || env?.LUCERN_GRAPH_DEBUG === \"1\"\n );\n}\n\nexport function formatGraphPrimitiveError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error === null) {\n return \"null\";\n }\n if (error === undefined) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(error);\n } catch {\n return Object.prototype.toString.call(error);\n }\n}\n\nexport function debugGraphPrimitiveFallback(\n message: string,\n context?: Record<string, unknown>\n): void {\n if (!isGraphPrimitiveDebugEnabled()) {\n return;\n }\n console.debug(message, context ?? {});\n}\n","/** Shared evaluator helpers and result-normalization utilities. */\n\nimport { debugGraphPrimitiveFallback } from \"../debug\";\nimport type {\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n} from \"../epistemicContractHelpers\";\n\nexport interface ToolResultEnvelope {\n command?: string;\n data?: unknown;\n exitCode?: number | null;\n output?: string;\n report?: unknown;\n stderr?: string;\n stdout?: string;\n}\n\ntype AnyRecord = Record<string, unknown>;\n\nconst WINDOWS_PATH_SEPARATORS = /\\\\/g;\nconst LEADING_DOT_SLASH = /^\\.\\//;\n\nexport function asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nexport function asNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nexport function asRecord(value: unknown): AnyRecord | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as AnyRecord)\n : null;\n}\n\nexport function asString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : null;\n}\n\nexport function deriveDirectionalResult(\n direction: EpistemicContractDirection,\n conditionSatisfied: boolean\n): EpistemicContractEvaluationResult {\n if (direction === \"falsifies\") {\n return conditionSatisfied ? \"disconfirmed\" : \"confirmed\";\n }\n return conditionSatisfied ? \"confirmed\" : \"disconfirmed\";\n}\n\nexport function extractTextCandidates(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n const candidate = asString(value);\n return candidate ? [candidate] : [];\n }\n\n const candidates = [\n record.stdout,\n record.stderr,\n record.output,\n record.text,\n record.message,\n record.raw,\n ]\n .map(asString)\n .filter((candidate): candidate is string => Boolean(candidate));\n\n for (const nestedKey of [\"report\", \"result\", \"data\", \"payload\"]) {\n const nested = record[nestedKey];\n if (nested !== value) {\n candidates.push(...extractTextCandidates(nested));\n }\n }\n\n return Array.from(new Set(candidates));\n}\n\nexport function normalizeFilePath(value: string): string {\n return value\n .replace(WINDOWS_PATH_SEPARATORS, \"/\")\n .replace(LEADING_DOT_SLASH, \"\");\n}\n\nexport function normalizeToolResultEnvelope(\n value: unknown\n): ToolResultEnvelope {\n const record = asRecord(value);\n if (!record) {\n return {\n output: asString(value) ?? undefined,\n };\n }\n\n const exitCode =\n asNumber(record.exitCode) ??\n asNumber(record.code) ??\n asNumber(record.status) ??\n null;\n\n return {\n command: asString(record.command) ?? undefined,\n data: record.data ?? record.payload,\n exitCode,\n output: asString(record.output) ?? undefined,\n report:\n record.report ??\n record.json ??\n record.result ??\n record.payload ??\n undefined,\n stderr: asString(record.stderr) ?? undefined,\n stdout: asString(record.stdout) ?? undefined,\n };\n}\n\nexport function parseJsonCandidate<T = unknown>(value: unknown): T | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value !== \"string\") {\n return value as T;\n }\n\n try {\n return JSON.parse(value) as T;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[evaluators/shared] Failed to parse JSON candidate\",\n {\n error,\n valueType: typeof value,\n }\n );\n return null;\n }\n}\n\nexport function patternMatchesPath(filePath: string, pattern: string): boolean {\n const normalizedPath = normalizeFilePath(filePath);\n const normalizedPattern = normalizeFilePath(pattern);\n const escaped = normalizedPattern.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regexPattern = escaped\n .replace(/\\\\\\*\\\\\\*/g, \".*\")\n .replace(/\\\\\\*/g, \"[^/]*\")\n .replace(/\\\\\\?/g, \"[^/]\");\n return new RegExp(`^${regexPattern}$`).test(normalizedPath);\n}\n\nexport function somePatternMatches(\n filePath: string | null | undefined,\n patterns: string[]\n): boolean {\n if (!filePath) {\n return false;\n }\n return patterns.some((pattern) => patternMatchesPath(filePath, pattern));\n}\n","/** Test-runner engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluator,\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asRecord,\n asString,\n deriveDirectionalResult,\n extractTextCandidates,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n parseJsonCandidate,\n patternMatchesPath,\n} from \"./shared\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ninterface ParsedSuite {\n failedTests: string[];\n filePath: string;\n passedTests: string[];\n}\n\ninterface TestRunnerConfig {\n runner: \"vitest\";\n testPattern: string;\n}\n\nfunction parseConfig(condition: EpistemicContractCondition): TestRunnerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n 'test_runner requires evaluatorConfig with { testPattern, runner: \"vitest\" }.'\n );\n }\n\n const testPattern = asString(record.testPattern);\n if (!testPattern) {\n throw new Error(\"test_runner requires a non-empty testPattern.\");\n }\n\n const runner = asString(record.runner);\n if (runner !== \"vitest\") {\n throw new Error(`Unsupported test runner: ${String(record.runner)}`);\n }\n\n return {\n runner,\n testPattern,\n };\n}\n\nfunction collectFailedTests(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n return [];\n }\n\n const fullName = asString(record.fullName);\n const title = asString(record.title);\n const label = fullName ?? title ?? \"unnamed test\";\n const status = asString(record.status);\n const state = asString(asRecord(record.result)?.state);\n const isFailed =\n status === \"failed\" ||\n status === \"fail\" ||\n state === \"failed\" ||\n state === \"fail\";\n\n const failures = isFailed ? [label] : [];\n for (const nestedKey of [\"assertionResults\", \"tests\", \"tasks\"]) {\n for (const nested of asArray(record[nestedKey])) {\n failures.push(...collectFailedTests(nested));\n }\n }\n\n return failures;\n}\n\nfunction collectPassedTests(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n return [];\n }\n\n const fullName = asString(record.fullName);\n const title = asString(record.title);\n const label = fullName ?? title ?? \"unnamed test\";\n const status = asString(record.status);\n const state = asString(asRecord(record.result)?.state);\n const isPassed = status === \"passed\" || state === \"passed\";\n\n const passed = isPassed ? [label] : [];\n for (const nestedKey of [\"assertionResults\", \"tests\", \"tasks\"]) {\n for (const nested of asArray(record[nestedKey])) {\n passed.push(...collectPassedTests(nested));\n }\n }\n\n return passed;\n}\n\nfunction parseSuite(value: unknown): ParsedSuite | null {\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n\n const filePath =\n asString(record.name) ??\n asString(record.file) ??\n asString(record.filePath) ??\n asString(record.filepath);\n if (!filePath) {\n return null;\n }\n\n return {\n failedTests: Array.from(new Set(collectFailedTests(record))),\n filePath: normalizeFilePath(filePath),\n passedTests: Array.from(new Set(collectPassedTests(record))),\n };\n}\n\nfunction parseVitestSuites(resultData: unknown): ParsedSuite[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const candidates = [\n envelope.report,\n envelope.data,\n envelope.stdout,\n envelope.output,\n ...extractTextCandidates(resultData),\n ];\n\n for (const candidate of candidates) {\n const parsed = parseJsonCandidate(candidate);\n const report = asRecord(parsed);\n if (!report) {\n continue;\n }\n\n const suites = asArray(report.testResults)\n .map(parseSuite)\n .filter((suite): suite is ParsedSuite => Boolean(suite));\n if (suites.length > 0) {\n return suites;\n }\n\n const fileSuites = asArray(report.files)\n .map(parseSuite)\n .filter((suite): suite is ParsedSuite => Boolean(suite));\n if (fileSuites.length > 0) {\n return fileSuites;\n }\n }\n\n return [];\n}\n\nfunction getMatchedSuites(\n contract: AnyContract,\n resultData: unknown\n): ParsedSuite[] {\n const config = parseConfig(contract.condition);\n return parseVitestSuites(resultData).filter((suite) =>\n patternMatchesPath(suite.filePath, config.testPattern)\n );\n}\n\nexport type EngineeringEpistemicEvaluator = EpistemicEvaluator & {\n matches(args: { contract: AnyContract; resultData: unknown }): boolean;\n};\n\nexport const testRunnerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"test_runner\",\n matches({ contract, resultData }) {\n return getMatchedSuites(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n const matchedSuites = getMatchedSuites(args.contract, args.resultData);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"test_runner requires Vitest JSON resultData.\",\n };\n }\n if (matchedSuites.length === 0) {\n return {\n result: \"inconclusive\",\n rationale: `No Vitest suites matched ${config.testPattern}.`,\n };\n }\n\n const failedTests = matchedSuites.flatMap((suite) => suite.failedTests);\n const passedTests = matchedSuites.flatMap((suite) => suite.passedTests);\n const conditionSatisfied = failedTests.length === 0;\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Vitest matched ${matchedSuites.length} suite(s) for ${config.testPattern}; all ${passedTests.length} test assertions passed.`\n : `Vitest matched ${matchedSuites.length} suite(s) for ${config.testPattern}; failing tests: ${failedTests.join(\", \")}.`,\n data: {\n runner: config.runner,\n testPattern: config.testPattern,\n matchedFiles: matchedSuites.map((suite) => suite.filePath),\n failedTests,\n passedTestCount: passedTests.length,\n },\n };\n },\n};\n"]}
@@ -0,0 +1,16 @@
1
+ import { EngineeringEpistemicEvaluator } from './test-runner-evaluator.js';
2
+ import '@lucern/confidence';
3
+ import '../epistemicContracts.js';
4
+ import '../epistemicContracts.evaluators.js';
5
+ import '../convex.js';
6
+ import '@lucern/access-control/convex';
7
+ import '@lucern/contracts/convex/unsafeAnyApi';
8
+ import 'convex/values';
9
+ import '../epistemicContracts.types.js';
10
+ import '../epistemicContracts.handlers.js';
11
+
12
+ /** Typecheck-based engineering evaluator for epistemic contracts. */
13
+
14
+ declare const tscCheckerEvaluator: EngineeringEpistemicEvaluator;
15
+
16
+ export { tscCheckerEvaluator };
@@ -1,4 +1,6 @@
1
1
  // src/evaluators/shared.ts
2
+ var WINDOWS_PATH_SEPARATORS = /\\/g;
3
+ var LEADING_DOT_SLASH = /^\.\//;
2
4
  function asArray(value) {
3
5
  return Array.isArray(value) ? value : [];
4
6
  }
@@ -40,7 +42,7 @@ function extractTextCandidates(value) {
40
42
  return Array.from(new Set(candidates));
41
43
  }
42
44
  function normalizeFilePath(value) {
43
- return value.replace(/\\/g, "/").replace(/^\.\//, "");
45
+ return value.replace(WINDOWS_PATH_SEPARATORS, "/").replace(LEADING_DOT_SLASH, "");
44
46
  }
45
47
  function normalizeToolResultEnvelope(value) {
46
48
  const record = asRecord(value);
@@ -74,7 +76,7 @@ function somePatternMatches(filePath, patterns) {
74
76
  return patterns.some((pattern) => patternMatchesPath(filePath, pattern));
75
77
  }
76
78
 
77
- // src/evaluators/tscCheckerEvaluator.ts
79
+ // src/evaluators/tsc-checker-evaluator.ts
78
80
  function parseConfig(condition) {
79
81
  const record = asRecord(condition.evaluatorConfig);
80
82
  if (!record) {
@@ -159,7 +161,10 @@ var tscCheckerEvaluator = {
159
161
  }
160
162
  const envelope = normalizeToolResultEnvelope(args.resultData);
161
163
  const exitCode = asNumber(envelope.exitCode);
162
- const matchedDiagnostics = getMatchedDiagnostics(args.contract, args.resultData);
164
+ const matchedDiagnostics = getMatchedDiagnostics(
165
+ args.contract,
166
+ args.resultData
167
+ );
163
168
  if (matchedDiagnostics.length === 0 && exitCode !== 0 && exitCode !== null) {
164
169
  return {
165
170
  result: "inconclusive",
@@ -185,5 +190,5 @@ var tscCheckerEvaluator = {
185
190
  };
186
191
 
187
192
  export { tscCheckerEvaluator };
188
- //# sourceMappingURL=tscCheckerEvaluator.js.map
189
- //# sourceMappingURL=tscCheckerEvaluator.js.map
193
+ //# sourceMappingURL=tsc-checker-evaluator.js.map
194
+ //# sourceMappingURL=tsc-checker-evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/evaluators/shared.ts","../../src/evaluators/tsc-checker-evaluator.ts"],"names":[],"mappings":"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","file":"tsc-checker-evaluator.js","sourcesContent":["/** Shared evaluator helpers and result-normalization utilities. */\n\nimport { debugGraphPrimitiveFallback } from \"../debug\";\nimport type {\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n} from \"../epistemicContractHelpers\";\n\nexport interface ToolResultEnvelope {\n command?: string;\n data?: unknown;\n exitCode?: number | null;\n output?: string;\n report?: unknown;\n stderr?: string;\n stdout?: string;\n}\n\ntype AnyRecord = Record<string, unknown>;\n\nconst WINDOWS_PATH_SEPARATORS = /\\\\/g;\nconst LEADING_DOT_SLASH = /^\\.\\//;\n\nexport function asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nexport function asNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nexport function asRecord(value: unknown): AnyRecord | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as AnyRecord)\n : null;\n}\n\nexport function asString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : null;\n}\n\nexport function deriveDirectionalResult(\n direction: EpistemicContractDirection,\n conditionSatisfied: boolean\n): EpistemicContractEvaluationResult {\n if (direction === \"falsifies\") {\n return conditionSatisfied ? \"disconfirmed\" : \"confirmed\";\n }\n return conditionSatisfied ? \"confirmed\" : \"disconfirmed\";\n}\n\nexport function extractTextCandidates(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n const candidate = asString(value);\n return candidate ? [candidate] : [];\n }\n\n const candidates = [\n record.stdout,\n record.stderr,\n record.output,\n record.text,\n record.message,\n record.raw,\n ]\n .map(asString)\n .filter((candidate): candidate is string => Boolean(candidate));\n\n for (const nestedKey of [\"report\", \"result\", \"data\", \"payload\"]) {\n const nested = record[nestedKey];\n if (nested !== value) {\n candidates.push(...extractTextCandidates(nested));\n }\n }\n\n return Array.from(new Set(candidates));\n}\n\nexport function normalizeFilePath(value: string): string {\n return value\n .replace(WINDOWS_PATH_SEPARATORS, \"/\")\n .replace(LEADING_DOT_SLASH, \"\");\n}\n\nexport function normalizeToolResultEnvelope(\n value: unknown\n): ToolResultEnvelope {\n const record = asRecord(value);\n if (!record) {\n return {\n output: asString(value) ?? undefined,\n };\n }\n\n const exitCode =\n asNumber(record.exitCode) ??\n asNumber(record.code) ??\n asNumber(record.status) ??\n null;\n\n return {\n command: asString(record.command) ?? undefined,\n data: record.data ?? record.payload,\n exitCode,\n output: asString(record.output) ?? undefined,\n report:\n record.report ??\n record.json ??\n record.result ??\n record.payload ??\n undefined,\n stderr: asString(record.stderr) ?? undefined,\n stdout: asString(record.stdout) ?? undefined,\n };\n}\n\nexport function parseJsonCandidate<T = unknown>(value: unknown): T | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value !== \"string\") {\n return value as T;\n }\n\n try {\n return JSON.parse(value) as T;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[evaluators/shared] Failed to parse JSON candidate\",\n {\n error,\n valueType: typeof value,\n }\n );\n return null;\n }\n}\n\nexport function patternMatchesPath(filePath: string, pattern: string): boolean {\n const normalizedPath = normalizeFilePath(filePath);\n const normalizedPattern = normalizeFilePath(pattern);\n const escaped = normalizedPattern.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regexPattern = escaped\n .replace(/\\\\\\*\\\\\\*/g, \".*\")\n .replace(/\\\\\\*/g, \"[^/]*\")\n .replace(/\\\\\\?/g, \"[^/]\");\n return new RegExp(`^${regexPattern}$`).test(normalizedPath);\n}\n\nexport function somePatternMatches(\n filePath: string | null | undefined,\n patterns: string[]\n): boolean {\n if (!filePath) {\n return false;\n }\n return patterns.some((pattern) => patternMatchesPath(filePath, pattern));\n}\n","/** Typecheck-based engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n extractTextCandidates,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n somePatternMatches,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./test-runner-evaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ninterface ParsedDiagnostic {\n code?: string;\n filePath: string | null;\n message: string;\n}\n\ninterface TscCheckerConfig {\n filePatterns: string[];\n}\n\nfunction parseConfig(condition: EpistemicContractCondition): TscCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"tsc_checker requires evaluatorConfig with { filePatterns: string[] }.\"\n );\n }\n\n const filePatterns = asArray(record.filePatterns)\n .map(asString)\n .filter((pattern): pattern is string => Boolean(pattern));\n if (filePatterns.length === 0) {\n throw new Error(\"tsc_checker requires at least one file pattern.\");\n }\n\n return { filePatterns };\n}\n\nfunction parseStructuredDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ??\n asRecord(envelope.data) ??\n asRecord(resultData);\n if (!record) {\n return [];\n }\n\n return asArray(record.diagnostics).flatMap((entry): ParsedDiagnostic[] => {\n const diagnostic = asRecord(entry);\n if (!diagnostic) {\n return [];\n }\n const filePath =\n asString(diagnostic.filePath) ??\n asString(diagnostic.file) ??\n asString(asRecord(diagnostic.location)?.filePath) ??\n asString(asRecord(asRecord(diagnostic.location)?.path)?.file);\n const message = asString(diagnostic.message) ?? \"TypeScript error\";\n return [\n {\n code: asString(diagnostic.code) ?? undefined,\n filePath: filePath ? normalizeFilePath(filePath) : null,\n message,\n },\n ];\n });\n}\n\nfunction parseTextDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const diagnostics: ParsedDiagnostic[] = [];\n const patterns = [\n /^(.+?)\\((\\d+),(\\d+)\\): error TS(\\d+): (.+)$/gm,\n /^(.+?):(\\d+):(\\d+) - error TS(\\d+): (.+)$/gm,\n ];\n\n for (const text of extractTextCandidates(resultData)) {\n for (const pattern of patterns) {\n for (const match of text.matchAll(pattern)) {\n diagnostics.push({\n code: match[4],\n filePath: normalizeFilePath(match[1] ?? \"\"),\n message: match[5] ?? \"TypeScript error\",\n });\n }\n }\n }\n\n return diagnostics;\n}\n\nfunction parseDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const structured = parseStructuredDiagnostics(resultData);\n return structured.length > 0 ? structured : parseTextDiagnostics(resultData);\n}\n\nfunction getMatchedDiagnostics(\n contract: AnyContract,\n resultData: unknown\n): ParsedDiagnostic[] {\n const config = parseConfig(contract.condition);\n return parseDiagnostics(resultData).filter((diagnostic) =>\n somePatternMatches(diagnostic.filePath, config.filePatterns)\n );\n}\n\nexport const tscCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"tsc_checker\",\n matches({ contract, resultData }) {\n const envelope = normalizeToolResultEnvelope(resultData);\n const exitCode = asNumber(envelope.exitCode);\n if (exitCode === 0) {\n return true;\n }\n return getMatchedDiagnostics(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"tsc_checker requires TypeScript diagnostic resultData.\",\n };\n }\n\n const envelope = normalizeToolResultEnvelope(args.resultData);\n const exitCode = asNumber(envelope.exitCode);\n const matchedDiagnostics = getMatchedDiagnostics(\n args.contract,\n args.resultData\n );\n\n if (\n matchedDiagnostics.length === 0 &&\n exitCode !== 0 &&\n exitCode !== null\n ) {\n return {\n result: \"inconclusive\",\n rationale:\n \"TypeScript reported errors, but none matched the configured file patterns.\",\n };\n }\n\n const conditionSatisfied =\n exitCode === 0 || (exitCode !== null && matchedDiagnostics.length === 0);\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `TypeScript reported no matching diagnostics for ${config.filePatterns.join(\", \")}.`\n : `TypeScript found ${matchedDiagnostics.length} matching diagnostic(s): ${matchedDiagnostics\n .map((diagnostic) =>\n diagnostic.filePath\n ? `${diagnostic.filePath}${diagnostic.code ? ` (TS${diagnostic.code})` : \"\"}`\n : diagnostic.message\n )\n .join(\", \")}.`,\n data: {\n exitCode,\n filePatterns: config.filePatterns,\n matchedDiagnostics,\n },\n };\n },\n};\n"]}
@@ -110,8 +110,12 @@ var CANONICAL_EPISTEMIC_TYPES = /* @__PURE__ */ new Set([
110
110
  "tests"
111
111
  ]);
112
112
  function isDeprecatedEdgeType(edgeType) {
113
- if (CANONICAL_EPISTEMIC_TYPES.has(edgeType)) return false;
114
- if (edgeType in EDGE_TYPE_TO_REL) return false;
113
+ if (CANONICAL_EPISTEMIC_TYPES.has(edgeType)) {
114
+ return false;
115
+ }
116
+ if (edgeType in EDGE_TYPE_TO_REL) {
117
+ return false;
118
+ }
115
119
  return true;
116
120
  }
117
121
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphTypes.ts"],"names":[],"mappings":"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","file":"graphTypes.js","sourcesContent":["/**\n * Graph Type Registry for Convex\n *\n * This file mirrors the canonical type registry at lib/ontology/types.ts\n * but is compatible with Convex's bundling requirements.\n *\n * IMPORTANT: Keep this file in sync with lib/ontology/types.ts\n * The frontend uses lib/ontology/types.ts, Convex uses this file.\n *\n * @see /docs/architecture/UNIFIED_GRAPH_ARCHITECTURE.md\n */\n\n// =============================================================================\n// EPISTEMIC LAYERS\n// =============================================================================\n\nexport type EpistemicLayer =\n | \"L4\"\n | \"L3\"\n | \"L2\"\n | \"L1\"\n | \"ontological\"\n | \"organizational\";\n\n// =============================================================================\n// NODE TYPE TO LABEL MAPPING\n// =============================================================================\n\nexport const NODE_TYPE_TO_LABEL: Record<string, string> = {\n // L4: Audit Targets\n decision: \"Decision\",\n\n // L3: Traversal Anchors\n belief: \"Belief\",\n question: \"Question\",\n theme: \"Theme\",\n deal: \"Deal\",\n topic: \"Topic\",\n\n // L2: Compression Boundary\n claim: \"Claim\",\n evidence: \"Evidence\",\n synthesis: \"Synthesis\",\n answer: \"Answer\",\n\n // L1: Terminal Leaves\n atomic_fact: \"AtomicFact\",\n excerpt: \"Excerpt\",\n source: \"Source\",\n\n // Ontological (Neo4j is SOT)\n company: \"Company\",\n person: \"Person\",\n investor: \"Investor\",\n function: \"Function\",\n value_chain: \"ValueChain\",\n};\n\n// =============================================================================\n// EDGE TYPE TO NEO4J RELATIONSHIP MAPPING\n// =============================================================================\n\n/**\n * Epistemic Kernel v2: 6 canonical edge types + ontological edges.\n *\n * Weight and metadata carry nuance that previously required 67 separate type strings.\n * See: docs/architecture/epistemic-kernel-v2.md\n */\nexport const EDGE_TYPE_TO_REL: Record<string, string> = {\n // === THE SIX CANONICAL EPISTEMIC EDGE TYPES ===\n supports: \"SUPPORTS\", // L3↔L3: belief bears on belief (weight -1 to +1)\n informs: \"INFORMS\", // L2→L3: evidence bears on belief\n depends_on: \"DEPENDS_ON\", // L3→L3, Q→Q: structural gate\n derived_from: \"DERIVED_FROM\", // Any→Any: provenance chain (fork, synthesis, extraction, answer)\n contains: \"CONTAINS\", // Any→Any: hierarchy, scoping, membership\n tests: \"TESTS\", // Q→L3: question interrogates belief\n\n // === L4 DECISION EDGES (derived_from with derivationType=decision) ===\n // Kept as separate Neo4j relationship types for backward compat with L4 queries.\n // New code should use derived_from + metadata.\n based_on_belief: \"BASED_ON_BELIEF\",\n based_on_question: \"BASED_ON_QUESTION\",\n blocked_by_contradiction: \"BLOCKED_BY_CONTRADICTION\",\n informed_by_theme: \"INFORMED_BY_THEME\",\n\n // === ONTOLOGICAL EDGES (tenant-extensible, managed by ontology system) ===\n works_at: \"WORKS_AT\",\n invested_in: \"INVESTED_IN\",\n competes_with: \"COMPETES_WITH\",\n participates_in: \"PARTICIPATES_IN\",\n founded_by: \"FOUNDED_BY\",\n evaluates: \"EVALUATES\",\n performs: \"PERFORMS\",\n function_in: \"FUNCTION_IN\",\n impacts: \"IMPACTS\",\n raised_from: \"RAISED_FROM\",\n mentioned_in: \"MENTIONED_IN\",\n perspective_on: \"PERSPECTIVE_ON\",\n about_entity: \"ABOUT_ENTITY\",\n entity_referenced_in: \"ENTITY_REFERENCED_IN\",\n};\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Get the epistemic layer for a node type\n */\nexport function getNodeLayer(nodeType: string): EpistemicLayer {\n const L4_TYPES = [\"decision\"];\n const L3_TYPES = [\"belief\", \"question\", \"theme\", \"deal\"];\n const L2_TYPES = [\"claim\", \"evidence\", \"synthesis\", \"answer\"];\n const L1_TYPES = [\"atomic_fact\", \"excerpt\", \"source\"];\n const ONTOLOGICAL_TYPES = [\n \"company\",\n \"person\",\n \"investor\",\n \"function\",\n \"value_chain\",\n ];\n const ORGANIZATIONAL_TYPES = [\"topic\"];\n\n if (L4_TYPES.includes(nodeType)) {\n return \"L4\";\n }\n if (L3_TYPES.includes(nodeType)) {\n return \"L3\";\n }\n if (L2_TYPES.includes(nodeType)) {\n return \"L2\";\n }\n if (L1_TYPES.includes(nodeType)) {\n return \"L1\";\n }\n if (ONTOLOGICAL_TYPES.includes(nodeType)) {\n return \"ontological\";\n }\n if (ORGANIZATIONAL_TYPES.includes(nodeType)) {\n return \"organizational\";\n }\n\n // Unknown types default to L2\n console.warn(`[GraphTypes] Unknown nodeType \"${nodeType}\", defaulting to L2`);\n return \"L2\";\n}\n\n/**\n * Get the Neo4j label for a node type\n */\nexport function getNeo4jLabel(nodeType: string): string {\n return (\n NODE_TYPE_TO_LABEL[nodeType] ||\n nodeType.charAt(0).toUpperCase() + nodeType.slice(1)\n );\n}\n\n/**\n * Get the Neo4j relationship type for an edge type\n */\nexport function getNeo4jRelType(edgeType: string): string {\n return EDGE_TYPE_TO_REL[edgeType] || edgeType.toUpperCase();\n}\n\n/**\n * The 6 canonical epistemic edge types (Kernel v2).\n * Anything not in this set or the ontological/L4 sets is deprecated.\n */\nconst CANONICAL_EPISTEMIC_TYPES = new Set([\n \"supports\",\n \"informs\",\n \"depends_on\",\n \"derived_from\",\n \"contains\",\n \"tests\",\n]);\n\n/**\n * Check if an edge type is deprecated.\n *\n * Kernel v2: only the 6 canonical epistemic types, L4 decision types,\n * and ontological types are active. All legacy types (67 old types) are deprecated.\n */\nexport function isDeprecatedEdgeType(edgeType: string): boolean {\n // Canonical epistemic types are NOT deprecated\n if (CANONICAL_EPISTEMIC_TYPES.has(edgeType)) return false;\n // Types in the EDGE_TYPE_TO_REL map (ontological + L4) are NOT deprecated\n if (edgeType in EDGE_TYPE_TO_REL) return false;\n // Everything else is a legacy type\n return true;\n}\n"]}
1
+ {"version":3,"sources":["../src/graphTypes.ts"],"names":[],"mappings":"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","file":"graphTypes.js","sourcesContent":["// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Graph Type Registry for Convex\n *\n * This file mirrors the canonical type registry at lib/ontology/types.ts\n * but is compatible with Convex's bundling requirements.\n *\n * IMPORTANT: Keep this file in sync with lib/ontology/types.ts\n * The frontend uses lib/ontology/types.ts, Convex uses this file.\n *\n * @see /docs/architecture/UNIFIED_GRAPH_ARCHITECTURE.md\n */\n\n// =============================================================================\n// EPISTEMIC LAYERS\n// =============================================================================\n\nexport type EpistemicLayer =\n | \"L4\"\n | \"L3\"\n | \"L2\"\n | \"L1\"\n | \"ontological\"\n | \"organizational\";\n\n// =============================================================================\n// NODE TYPE TO LABEL MAPPING\n// =============================================================================\n\nexport const NODE_TYPE_TO_LABEL: Record<string, string> = {\n // L4: Audit Targets\n decision: \"Decision\",\n\n // L3: Traversal Anchors\n belief: \"Belief\",\n question: \"Question\",\n theme: \"Theme\",\n deal: \"Deal\",\n topic: \"Topic\",\n\n // L2: Compression Boundary\n claim: \"Claim\",\n evidence: \"Evidence\",\n synthesis: \"Synthesis\",\n answer: \"Answer\",\n\n // L1: Terminal Leaves\n atomic_fact: \"AtomicFact\",\n excerpt: \"Excerpt\",\n source: \"Source\",\n\n // Ontological (Neo4j is SOT)\n company: \"Company\",\n person: \"Person\",\n investor: \"Investor\",\n function: \"Function\",\n value_chain: \"ValueChain\",\n};\n\n// =============================================================================\n// EDGE TYPE TO NEO4J RELATIONSHIP MAPPING\n// =============================================================================\n\n/**\n * Epistemic Kernel v2: 6 canonical edge types + ontological edges.\n *\n * Weight and metadata carry nuance that previously required 67 separate type strings.\n * See: docs/architecture/epistemic-kernel-v2.md\n */\nexport const EDGE_TYPE_TO_REL: Record<string, string> = {\n // === THE SIX CANONICAL EPISTEMIC EDGE TYPES ===\n supports: \"SUPPORTS\", // L3↔L3: belief bears on belief (weight -1 to +1)\n informs: \"INFORMS\", // L2→L3: evidence bears on belief\n depends_on: \"DEPENDS_ON\", // L3→L3, Q→Q: structural gate\n derived_from: \"DERIVED_FROM\", // Any→Any: provenance chain (fork, synthesis, extraction, answer)\n contains: \"CONTAINS\", // Any→Any: hierarchy, scoping, membership\n tests: \"TESTS\", // Q→L3: question interrogates belief\n\n // === L4 DECISION EDGES (derived_from with derivationType=decision) ===\n // Kept as separate Neo4j relationship types for backward compat with L4 queries.\n // New code should use derived_from + metadata.\n based_on_belief: \"BASED_ON_BELIEF\",\n based_on_question: \"BASED_ON_QUESTION\",\n blocked_by_contradiction: \"BLOCKED_BY_CONTRADICTION\",\n informed_by_theme: \"INFORMED_BY_THEME\",\n\n // === ONTOLOGICAL EDGES (tenant-extensible, managed by ontology system) ===\n works_at: \"WORKS_AT\",\n invested_in: \"INVESTED_IN\",\n competes_with: \"COMPETES_WITH\",\n participates_in: \"PARTICIPATES_IN\",\n founded_by: \"FOUNDED_BY\",\n evaluates: \"EVALUATES\",\n performs: \"PERFORMS\",\n function_in: \"FUNCTION_IN\",\n impacts: \"IMPACTS\",\n raised_from: \"RAISED_FROM\",\n mentioned_in: \"MENTIONED_IN\",\n perspective_on: \"PERSPECTIVE_ON\",\n about_entity: \"ABOUT_ENTITY\",\n entity_referenced_in: \"ENTITY_REFERENCED_IN\",\n};\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Get the epistemic layer for a node type\n */\nexport function getNodeLayer(nodeType: string): EpistemicLayer {\n const L4_TYPES = [\"decision\"];\n const L3_TYPES = [\"belief\", \"question\", \"theme\", \"deal\"];\n const L2_TYPES = [\"claim\", \"evidence\", \"synthesis\", \"answer\"];\n const L1_TYPES = [\"atomic_fact\", \"excerpt\", \"source\"];\n const ONTOLOGICAL_TYPES = [\n \"company\",\n \"person\",\n \"investor\",\n \"function\",\n \"value_chain\",\n ];\n const ORGANIZATIONAL_TYPES = [\"topic\"];\n\n if (L4_TYPES.includes(nodeType)) {\n return \"L4\";\n }\n if (L3_TYPES.includes(nodeType)) {\n return \"L3\";\n }\n if (L2_TYPES.includes(nodeType)) {\n return \"L2\";\n }\n if (L1_TYPES.includes(nodeType)) {\n return \"L1\";\n }\n if (ONTOLOGICAL_TYPES.includes(nodeType)) {\n return \"ontological\";\n }\n if (ORGANIZATIONAL_TYPES.includes(nodeType)) {\n return \"organizational\";\n }\n\n // Unknown types default to L2\n console.warn(`[GraphTypes] Unknown nodeType \"${nodeType}\", defaulting to L2`);\n return \"L2\";\n}\n\n/**\n * Get the Neo4j label for a node type\n */\nexport function getNeo4jLabel(nodeType: string): string {\n return (\n NODE_TYPE_TO_LABEL[nodeType] ||\n nodeType.charAt(0).toUpperCase() + nodeType.slice(1)\n );\n}\n\n/**\n * Get the Neo4j relationship type for an edge type\n */\nexport function getNeo4jRelType(edgeType: string): string {\n return EDGE_TYPE_TO_REL[edgeType] || edgeType.toUpperCase();\n}\n\n/**\n * The 6 canonical epistemic edge types (Kernel v2).\n * Anything not in this set or the ontological/L4 sets is deprecated.\n */\nconst CANONICAL_EPISTEMIC_TYPES = new Set([\n \"supports\",\n \"informs\",\n \"depends_on\",\n \"derived_from\",\n \"contains\",\n \"tests\",\n]);\n\n/**\n * Check if an edge type is deprecated.\n *\n * Kernel v2: only the 6 canonical epistemic types, L4 decision types,\n * and ontological types are active. All legacy types (67 old types) are deprecated.\n */\nexport function isDeprecatedEdgeType(edgeType: string): boolean {\n // Canonical epistemic types are NOT deprecated\n if (CANONICAL_EPISTEMIC_TYPES.has(edgeType)) {\n return false;\n }\n // Types in the EDGE_TYPE_TO_REL map (ontological + L4) are NOT deprecated\n if (edgeType in EDGE_TYPE_TO_REL) {\n return false;\n }\n // Everything else is a legacy type\n return true;\n}\n"]}
package/dist/helpers.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  import './convex.js';
2
2
  export { b as getNodeLayer } from './graphTypes-B8VaIjnl.js';
3
3
  export { c as createEpistemicEdge } from './helpers-DNYfg6mo.js';
4
+ import '@lucern/access-control/convex';
5
+ import '@lucern/contracts/convex/unsafeAnyApi';
4
6
  import 'convex/values';