@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
package/dist/helpers.js CHANGED
@@ -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/graphTypes.ts
9
13
  function getNodeLayer(nodeType) {
@@ -42,6 +46,14 @@ function getNodeLayer(nodeType) {
42
46
  }
43
47
 
44
48
  // src/edgeValidation.ts
49
+ var VALID_LAYER_CONNECTIONS = {
50
+ ontological: /* @__PURE__ */ new Set(["ontological", "L1", "L2", "L3"]),
51
+ L1: /* @__PURE__ */ new Set(["L1", "L2"]),
52
+ L2: /* @__PURE__ */ new Set(["L1", "L2", "L3", "ontological"]),
53
+ L3: /* @__PURE__ */ new Set(["L2", "L3", "L4", "ontological", "organizational"]),
54
+ L4: /* @__PURE__ */ new Set(["L3", "L4"]),
55
+ organizational: /* @__PURE__ */ new Set(["organizational", "L3"])
56
+ };
45
57
  function getLayerDepth(layer) {
46
58
  switch (layer) {
47
59
  case "L4":
@@ -59,37 +71,13 @@ function getLayerDepth(layer) {
59
71
  }
60
72
  }
61
73
  function isValidLayerConnection(fromLayer, toLayer) {
62
- if (fromLayer === toLayer) {
63
- return true;
64
- }
65
- if (fromLayer === "ontological" && toLayer === "ontological") {
66
- return true;
67
- }
68
- if (fromLayer === "ontological" && (toLayer === "L3" || toLayer === "L2" || toLayer === "L1")) {
69
- return true;
70
- }
71
- if ((fromLayer === "L3" || fromLayer === "L2" || fromLayer === "L1") && toLayer === "ontological") {
72
- return true;
73
- }
74
- if (fromLayer === "L2" && toLayer === "L1") {
75
- return true;
76
- }
77
- if (fromLayer === "L2" && toLayer === "L3") {
78
- return true;
79
- }
80
- if (fromLayer === "L3" && toLayer === "L2") {
81
- return true;
82
- }
83
- if (fromLayer === "L3" && toLayer === "L4") {
84
- return true;
85
- }
86
- if (fromLayer === "L4" && toLayer === "L3") {
87
- return true;
74
+ if (!VALID_LAYER_CONNECTIONS[fromLayer].has(toLayer)) {
75
+ return false;
88
76
  }
89
- if (fromLayer === "L3" && toLayer === "organizational") {
77
+ if (fromLayer === "ontological" || toLayer === "ontological") {
90
78
  return true;
91
79
  }
92
- if (fromLayer === "organizational" && toLayer === "L3") {
80
+ if (fromLayer === "organizational" || toLayer === "organizational") {
93
81
  return true;
94
82
  }
95
83
  const fromDepth = getLayerDepth(fromLayer);
@@ -228,61 +216,281 @@ var EDGE_LAYER_RULES = {
228
216
  to: ["L1", "L2", "L3"],
229
217
  description: "Legacy storage migration alias for derived_from; public writes use derived_from"
230
218
  },
231
- qualifies: { from: ["L2", "L3"], to: ["L3"], description: "Evidence/Belief qualifies a Belief" },
232
- contradicts: { from: ["L2", "L3"], to: ["L3"], description: "Evidence/Belief contradicts a Belief" },
233
- reinforces: { from: ["L2", "L3"], to: ["L3"], description: "Evidence/Belief reinforces a Belief" },
234
- corroborates: { from: ["L2", "L3"], to: ["L3"], description: "Independent evidence/belief corroborates a Belief" },
235
- strengthened_by: { from: ["L3"], to: ["L2", "L3"], description: "Belief is strengthened by Evidence/Belief" },
236
- weakened_by: { from: ["L3"], to: ["L2", "L3"], description: "Belief is weakened by Evidence/Belief" },
237
- validated_by: { from: ["L3"], to: ["L2", "L3"], description: "Belief is validated by Evidence/Belief" },
238
- falsified_by: { from: ["L3"], to: ["L2", "L3"], description: "Belief is falsified by Evidence/Belief" },
239
- amplifies: { from: ["L3"], to: ["L3"], description: "Belief amplifies another Belief" },
240
- precondition_for: { from: ["L3"], to: ["L3"], description: "Belief is a precondition for another Belief" },
241
- prerequisite_for: { from: ["L3"], to: ["L3"], description: "Belief is a prerequisite for another Belief" },
242
- required_for: { from: ["L3"], to: ["L3"], description: "Belief is required for another Belief" },
243
- in_tension_with: { from: ["L3"], to: ["L3"], description: "Belief is in tension with another Belief" },
244
- mutually_exclusive: { from: ["L3"], to: ["L3"], description: "Beliefs cannot both hold" },
245
- exclusive_with: { from: ["L3"], to: ["L3"], description: "Belief is exclusive with another Belief" },
246
- alternative_to: { from: ["L3"], to: ["L3"], description: "Belief is an alternative to another Belief" },
247
- subsumes: { from: ["L3"], to: ["L3"], description: "Belief subsumes a narrower Belief" },
248
- extends: { from: ["L3"], to: ["L3"], description: "Belief extends another Belief" },
249
- refines: { from: ["L3"], to: ["L3"], description: "Belief refines another Belief" },
250
- implements: { from: ["L3"], to: ["L3"], description: "Belief implements an abstract Belief" },
251
- violates: { from: ["L3"], to: ["L3"], description: "Belief violates a constraint Belief" },
252
- assumes: { from: ["L3"], to: ["L3"], description: "Belief assumes another Belief" },
253
- would_predict: { from: ["L3"], to: ["L3"], description: "Belief would predict another Belief" },
254
- analogous_to: { from: ["L3"], to: ["L3"], description: "Belief is analogous to another Belief" },
255
- independent_of: { from: ["L3"], to: ["L3"], description: "Belief is independent of another Belief" },
256
- correlates_with: { from: ["L3"], to: ["L3"], description: "Belief correlates with another Belief" },
257
- co_changes_with: { from: ["L3"], to: ["L3"], description: "Belief co-changes with another Belief" },
258
- counterfactual_of: { from: ["L3"], to: ["L3"], description: "Belief is a counterfactual of another Belief" },
259
- parallel_to: { from: ["L3"], to: ["L3"], description: "Belief runs parallel to another Belief" },
260
- cascade_from: { from: ["L3"], to: ["L3"], description: "Cascade from an upstream Belief" },
261
- cascade_to: { from: ["L3"], to: ["L3"], description: "Cascade to a downstream Belief" },
262
- collapses_if: { from: ["L3"], to: ["L3"], description: "Belief collapses if another fails" },
263
- branches_from: { from: ["L3"], to: ["L3"], description: "Belief branches from an ancestor Belief" },
264
- same_as: { from: ["L2", "L3", "ontological"], to: ["L2", "L3", "ontological"], description: "Two nodes are the same entity" },
265
- answers: { from: ["L2", "L3"], to: ["L3"], description: "Answer/Belief answers a Question" },
266
- partially_answers: { from: ["L2", "L3"], to: ["L3"], description: "Answer/Belief partially answers a Question" },
267
- explores: { from: ["L3"], to: ["L3"], description: "Question explores a Belief/Theme" },
268
- informed_by_theme: { from: ["L3"], to: ["L3"], description: "Belief is informed by a Theme" },
269
- same_theme_as: { from: ["L3"], to: ["L3"], description: "Two Beliefs share a Theme" },
270
- based_on: { from: ["L4"], to: ["L3"], description: "Decision is based on a Belief/Question" },
271
- based_on_belief: { from: ["L4"], to: ["L3"], description: "Decision is based on a Belief" },
272
- based_on_question: { from: ["L4"], to: ["L3"], description: "Decision is based on a Question" },
273
- blocked_by_contradiction: { from: ["L4"], to: ["L3"], description: "Decision is blocked by a Contradiction" },
274
- parent_of: { from: ["L3", "L4", "ontological", "organizational"], to: ["L2", "L3", "ontological", "organizational"], description: "A is the parent of B" },
275
- child_of: { from: ["L2", "L3", "ontological", "organizational"], to: ["L3", "L4", "ontological", "organizational"], description: "A is the child of B" },
276
- scoped_by: { from: ["L2", "L3"], to: ["L3", "organizational"], description: "Object is scoped by a Topic/Theme" },
277
- cites: { from: ["L2", "L3"], to: ["L1", "L2"], description: "Evidence/Belief cites a Source/Excerpt" },
278
- summarizes: { from: ["L2", "L3"], to: ["L1", "L2"], description: "Synthesis/Evidence summarizes a Source/Evidence" },
279
- same_source_as: { from: ["L1", "L2"], to: ["L1", "L2"], description: "Two nodes derive from the same Source" },
280
- migrating_from: { from: ["L2", "L3", "L4"], to: ["L1", "L2", "L3"], description: "Migration lineage: from an ancestor" },
281
- migrating_to: { from: ["L1", "L2", "L3"], to: ["L2", "L3", "L4"], description: "Migration lineage: to a successor" },
282
- about_entity: { from: ["L2", "L3"], to: ["ontological"], description: "Belief/Evidence is about an Entity" },
283
- entity_referenced_in: { from: ["ontological"], to: ["L1", "L2"], description: "Entity is referenced in a Source/Evidence" },
284
- related_to: { from: ["L2", "L3", "ontological", "organizational"], to: ["L2", "L3", "ontological", "organizational"], description: "Lateral adjacency; no confidence pressure" },
285
- blocks: { from: ["L3", "L4"], to: ["L3", "L4"], description: "A blocks B (structural gate)" }
219
+ qualifies: {
220
+ from: ["L2", "L3"],
221
+ to: ["L3"],
222
+ description: "Evidence/Belief qualifies a Belief"
223
+ },
224
+ contradicts: {
225
+ from: ["L2", "L3"],
226
+ to: ["L3"],
227
+ description: "Evidence/Belief contradicts a Belief"
228
+ },
229
+ reinforces: {
230
+ from: ["L2", "L3"],
231
+ to: ["L3"],
232
+ description: "Evidence/Belief reinforces a Belief"
233
+ },
234
+ corroborates: {
235
+ from: ["L2", "L3"],
236
+ to: ["L3"],
237
+ description: "Independent evidence/belief corroborates a Belief"
238
+ },
239
+ strengthened_by: {
240
+ from: ["L3"],
241
+ to: ["L2", "L3"],
242
+ description: "Belief is strengthened by Evidence/Belief"
243
+ },
244
+ weakened_by: {
245
+ from: ["L3"],
246
+ to: ["L2", "L3"],
247
+ description: "Belief is weakened by Evidence/Belief"
248
+ },
249
+ validated_by: {
250
+ from: ["L3"],
251
+ to: ["L2", "L3"],
252
+ description: "Belief is validated by Evidence/Belief"
253
+ },
254
+ falsified_by: {
255
+ from: ["L3"],
256
+ to: ["L2", "L3"],
257
+ description: "Belief is falsified by Evidence/Belief"
258
+ },
259
+ amplifies: {
260
+ from: ["L3"],
261
+ to: ["L3"],
262
+ description: "Belief amplifies another Belief"
263
+ },
264
+ precondition_for: {
265
+ from: ["L3"],
266
+ to: ["L3"],
267
+ description: "Belief is a precondition for another Belief"
268
+ },
269
+ prerequisite_for: {
270
+ from: ["L3"],
271
+ to: ["L3"],
272
+ description: "Belief is a prerequisite for another Belief"
273
+ },
274
+ required_for: {
275
+ from: ["L3"],
276
+ to: ["L3"],
277
+ description: "Belief is required for another Belief"
278
+ },
279
+ in_tension_with: {
280
+ from: ["L3"],
281
+ to: ["L3"],
282
+ description: "Belief is in tension with another Belief"
283
+ },
284
+ mutually_exclusive: {
285
+ from: ["L3"],
286
+ to: ["L3"],
287
+ description: "Beliefs cannot both hold"
288
+ },
289
+ exclusive_with: {
290
+ from: ["L3"],
291
+ to: ["L3"],
292
+ description: "Belief is exclusive with another Belief"
293
+ },
294
+ alternative_to: {
295
+ from: ["L3"],
296
+ to: ["L3"],
297
+ description: "Belief is an alternative to another Belief"
298
+ },
299
+ subsumes: {
300
+ from: ["L3"],
301
+ to: ["L3"],
302
+ description: "Belief subsumes a narrower Belief"
303
+ },
304
+ extends: {
305
+ from: ["L3"],
306
+ to: ["L3"],
307
+ description: "Belief extends another Belief"
308
+ },
309
+ refines: {
310
+ from: ["L3"],
311
+ to: ["L3"],
312
+ description: "Belief refines another Belief"
313
+ },
314
+ implements: {
315
+ from: ["L3"],
316
+ to: ["L3"],
317
+ description: "Belief implements an abstract Belief"
318
+ },
319
+ violates: {
320
+ from: ["L3"],
321
+ to: ["L3"],
322
+ description: "Belief violates a constraint Belief"
323
+ },
324
+ assumes: {
325
+ from: ["L3"],
326
+ to: ["L3"],
327
+ description: "Belief assumes another Belief"
328
+ },
329
+ would_predict: {
330
+ from: ["L3"],
331
+ to: ["L3"],
332
+ description: "Belief would predict another Belief"
333
+ },
334
+ analogous_to: {
335
+ from: ["L3"],
336
+ to: ["L3"],
337
+ description: "Belief is analogous to another Belief"
338
+ },
339
+ independent_of: {
340
+ from: ["L3"],
341
+ to: ["L3"],
342
+ description: "Belief is independent of another Belief"
343
+ },
344
+ correlates_with: {
345
+ from: ["L3"],
346
+ to: ["L3"],
347
+ description: "Belief correlates with another Belief"
348
+ },
349
+ co_changes_with: {
350
+ from: ["L3"],
351
+ to: ["L3"],
352
+ description: "Belief co-changes with another Belief"
353
+ },
354
+ counterfactual_of: {
355
+ from: ["L3"],
356
+ to: ["L3"],
357
+ description: "Belief is a counterfactual of another Belief"
358
+ },
359
+ parallel_to: {
360
+ from: ["L3"],
361
+ to: ["L3"],
362
+ description: "Belief runs parallel to another Belief"
363
+ },
364
+ cascade_from: {
365
+ from: ["L3"],
366
+ to: ["L3"],
367
+ description: "Cascade from an upstream Belief"
368
+ },
369
+ cascade_to: {
370
+ from: ["L3"],
371
+ to: ["L3"],
372
+ description: "Cascade to a downstream Belief"
373
+ },
374
+ collapses_if: {
375
+ from: ["L3"],
376
+ to: ["L3"],
377
+ description: "Belief collapses if another fails"
378
+ },
379
+ branches_from: {
380
+ from: ["L3"],
381
+ to: ["L3"],
382
+ description: "Belief branches from an ancestor Belief"
383
+ },
384
+ same_as: {
385
+ from: ["L2", "L3", "ontological"],
386
+ to: ["L2", "L3", "ontological"],
387
+ description: "Two nodes are the same entity"
388
+ },
389
+ answers: {
390
+ from: ["L2", "L3"],
391
+ to: ["L3"],
392
+ description: "Answer/Belief answers a Question"
393
+ },
394
+ partially_answers: {
395
+ from: ["L2", "L3"],
396
+ to: ["L3"],
397
+ description: "Answer/Belief partially answers a Question"
398
+ },
399
+ explores: {
400
+ from: ["L3"],
401
+ to: ["L3"],
402
+ description: "Question explores a Belief/Theme"
403
+ },
404
+ informed_by_theme: {
405
+ from: ["L3"],
406
+ to: ["L3"],
407
+ description: "Belief is informed by a Theme"
408
+ },
409
+ same_theme_as: {
410
+ from: ["L3"],
411
+ to: ["L3"],
412
+ description: "Two Beliefs share a Theme"
413
+ },
414
+ based_on: {
415
+ from: ["L4"],
416
+ to: ["L3"],
417
+ description: "Decision is based on a Belief/Question"
418
+ },
419
+ based_on_belief: {
420
+ from: ["L4"],
421
+ to: ["L3"],
422
+ description: "Decision is based on a Belief"
423
+ },
424
+ based_on_question: {
425
+ from: ["L4"],
426
+ to: ["L3"],
427
+ description: "Decision is based on a Question"
428
+ },
429
+ blocked_by_contradiction: {
430
+ from: ["L4"],
431
+ to: ["L3"],
432
+ description: "Decision is blocked by a Contradiction"
433
+ },
434
+ parent_of: {
435
+ from: ["L3", "L4", "ontological", "organizational"],
436
+ to: ["L2", "L3", "ontological", "organizational"],
437
+ description: "A is the parent of B"
438
+ },
439
+ child_of: {
440
+ from: ["L2", "L3", "ontological", "organizational"],
441
+ to: ["L3", "L4", "ontological", "organizational"],
442
+ description: "A is the child of B"
443
+ },
444
+ scoped_by: {
445
+ from: ["L2", "L3"],
446
+ to: ["L3", "organizational"],
447
+ description: "Object is scoped by a Topic/Theme"
448
+ },
449
+ cites: {
450
+ from: ["L2", "L3"],
451
+ to: ["L1", "L2"],
452
+ description: "Evidence/Belief cites a Source/Excerpt"
453
+ },
454
+ summarizes: {
455
+ from: ["L2", "L3"],
456
+ to: ["L1", "L2"],
457
+ description: "Synthesis/Evidence summarizes a Source/Evidence"
458
+ },
459
+ same_source_as: {
460
+ from: ["L1", "L2"],
461
+ to: ["L1", "L2"],
462
+ description: "Two nodes derive from the same Source"
463
+ },
464
+ migrating_from: {
465
+ from: ["L2", "L3", "L4"],
466
+ to: ["L1", "L2", "L3"],
467
+ description: "Migration lineage: from an ancestor"
468
+ },
469
+ migrating_to: {
470
+ from: ["L1", "L2", "L3"],
471
+ to: ["L2", "L3", "L4"],
472
+ description: "Migration lineage: to a successor"
473
+ },
474
+ about_entity: {
475
+ from: ["L2", "L3"],
476
+ to: ["ontological"],
477
+ description: "Belief/Evidence is about an Entity"
478
+ },
479
+ entity_referenced_in: {
480
+ from: ["ontological"],
481
+ to: ["L1", "L2"],
482
+ description: "Entity is referenced in a Source/Evidence"
483
+ },
484
+ related_to: {
485
+ from: ["L2", "L3", "ontological", "organizational"],
486
+ to: ["L2", "L3", "ontological", "organizational"],
487
+ description: "Lateral adjacency; no confidence pressure"
488
+ },
489
+ blocks: {
490
+ from: ["L3", "L4"],
491
+ to: ["L3", "L4"],
492
+ description: "A blocks B (structural gate)"
493
+ }
286
494
  };
287
495
  function validateEdgeLayers(edgeType, fromLayer, toLayer) {
288
496
  const rules = EDGE_LAYER_RULES[edgeType];
@@ -323,15 +531,27 @@ function validateEdgeLayers(edgeType, fromLayer, toLayer) {
323
531
  }
324
532
 
325
533
  // src/helpers.ts
534
+ function readOptionalString(value) {
535
+ return typeof value === "string" && value.trim().length > 0 ? value : void 0;
536
+ }
326
537
  async function createEpistemicEdge(ctx, params) {
327
538
  const globalId = generateGlobalId();
328
539
  const fromNode = await ctx.db.get(params.fromNodeId);
329
540
  const toNode = await ctx.db.get(params.toNodeId);
330
- if (!fromNode || !toNode) {
541
+ if (!(fromNode && toNode)) {
331
542
  throw new Error("One or both nodes not found");
332
543
  }
333
- const fromLayer = fromNode.epistemicLayer || getNodeLayer(fromNode.nodeType);
334
- const toLayer = toNode.epistemicLayer || getNodeLayer(toNode.nodeType);
544
+ const fromNodeType = readOptionalString(fromNode.nodeType);
545
+ const toNodeType = readOptionalString(toNode.nodeType);
546
+ const fromGlobalId = readOptionalString(fromNode.globalId);
547
+ const toGlobalId = readOptionalString(toNode.globalId);
548
+ if (!(fromNodeType && toNodeType && fromGlobalId && toGlobalId)) {
549
+ throw new Error(
550
+ "Cannot create epistemic edge without canonical nodeType and globalId on both endpoints"
551
+ );
552
+ }
553
+ const fromLayer = readOptionalString(fromNode.epistemicLayer) ?? getNodeLayer(fromNodeType);
554
+ const toLayer = readOptionalString(toNode.epistemicLayer) ?? getNodeLayer(toNodeType);
335
555
  if (!params.skipLayerValidation) {
336
556
  const validation = validateEdgeLayers(
337
557
  params.edgeType,
@@ -340,22 +560,22 @@ async function createEpistemicEdge(ctx, params) {
340
560
  );
341
561
  if (!validation.valid) {
342
562
  throw new Error(
343
- `[EdgeValidation] Invalid edge: ${validation.reason}. Attempted: ${params.edgeType} from ${fromNode.nodeType}(${fromLayer}) \u2192 ${toNode.nodeType}(${toLayer})`
563
+ `[EdgeValidation] Invalid edge: ${validation.reason}. Attempted: ${params.edgeType} from ${fromNodeType}(${fromLayer}) \u2192 ${toNodeType}(${toLayer})`
344
564
  );
345
565
  }
346
566
  }
347
567
  await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {
348
568
  globalId,
349
- fromGlobalId: fromNode.globalId,
350
- toGlobalId: toNode.globalId,
569
+ fromGlobalId,
570
+ toGlobalId,
351
571
  edgeType: params.edgeType,
352
572
  weight: params.weight,
353
573
  confidence: params.confidence,
354
574
  context: params.context,
355
575
  createdBy: params.createdBy,
356
576
  topicId: params.projectId ? String(params.projectId) : void 0,
357
- fromNodeType: fromNode.nodeType,
358
- toNodeType: toNode.nodeType,
577
+ fromNodeType,
578
+ toNodeType,
359
579
  fromLayer,
360
580
  toLayer
361
581
  });