@lucern/graph-primitives 1.0.29 → 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 +395 -225
  19. package/dist/contradictions.js.map +1 -1
  20. package/dist/convex.d.ts +65 -30
  21. package/dist/convex.js +7 -3
  22. package/dist/convex.js.map +1 -1
  23. package/dist/debug.js.map +1 -1
  24. package/dist/edgeValidation.js +293 -85
  25. package/dist/edgeValidation.js.map +1 -1
  26. package/dist/edges/contains.d.ts +1 -1
  27. package/dist/edges/contains.js.map +1 -1
  28. package/dist/edges/contradicts.d.ts +1 -1
  29. package/dist/edges/contradicts.js.map +1 -1
  30. package/dist/edges/{dependsOn.d.ts → depends-on.d.ts} +1 -1
  31. package/dist/edges/{dependsOn.js → depends-on.js} +4 -4
  32. package/dist/edges/depends-on.js.map +1 -0
  33. package/dist/edges/{derivedFrom.d.ts → derived-from.d.ts} +1 -1
  34. package/dist/edges/{derivedFrom.js → derived-from.js} +3 -3
  35. package/dist/edges/derived-from.js.map +1 -0
  36. package/dist/edges/elaborates.d.ts +1 -1
  37. package/dist/edges/elaborates.js.map +1 -1
  38. package/dist/edges/index.d.ts +7 -3
  39. package/dist/edges/index.js +7 -4
  40. package/dist/edges/index.js.map +1 -1
  41. package/dist/edges/informs.d.ts +1 -1
  42. package/dist/edges/informs.js.map +1 -1
  43. package/dist/edges/{propagationTypes.d.ts → propagation-types.d.ts} +14 -14
  44. package/dist/edges/{propagationTypes.js → propagation-types.js} +3 -3
  45. package/dist/edges/propagation-types.js.map +1 -0
  46. package/dist/edges/refutes.d.ts +1 -1
  47. package/dist/edges/refutes.js.map +1 -1
  48. package/dist/edges/supports.d.ts +1 -1
  49. package/dist/edges/supports.js.map +1 -1
  50. package/dist/edges/tests.d.ts +1 -1
  51. package/dist/edges/tests.js.map +1 -1
  52. package/dist/edges/utils.d.ts +1 -1
  53. package/dist/edges/utils.js.map +1 -1
  54. package/dist/embeddingTrigger.d.ts +14 -6
  55. package/dist/embeddingTrigger.js +11 -14
  56. package/dist/embeddingTrigger.js.map +1 -1
  57. package/dist/{entityBridge-DMaKooYn.d.ts → entityBridge-BhVDM3pc.d.ts} +5 -5
  58. package/dist/entityBridge.d.ts +1 -1
  59. package/dist/entityBridge.js +602 -225
  60. package/dist/entityBridge.js.map +1 -1
  61. package/dist/entityCanonicalMatch.d.ts +14 -12
  62. package/dist/entityCanonicalMatch.js.map +1 -1
  63. package/dist/{entityLifecycle-CvgSK5FV.d.ts → entityLifecycle-BsfCz9pS.d.ts} +5 -9
  64. package/dist/entityLifecycle.d.ts +1 -1
  65. package/dist/entityLifecycle.js +854 -480
  66. package/dist/entityLifecycle.js.map +1 -1
  67. package/dist/{entityValidation-KLZ_Xl2D.d.ts → entityValidation-B1yNEHJx.d.ts} +7 -6
  68. package/dist/entityValidation.d.ts +3 -1
  69. package/dist/entityValidation.js +60 -8
  70. package/dist/entityValidation.js.map +1 -1
  71. package/dist/{epistemicAnswers-C5ib4z6_.d.ts → epistemicAnswers-f47YMu9U.d.ts} +6 -6
  72. package/dist/epistemicAnswers.d.ts +1 -1
  73. package/dist/epistemicAnswers.js +587 -545
  74. package/dist/epistemicAnswers.js.map +1 -1
  75. package/dist/epistemicBeliefs.admin.d.ts +8 -8
  76. package/dist/epistemicBeliefs.admin.js +365 -166
  77. package/dist/epistemicBeliefs.admin.js.map +1 -1
  78. package/dist/epistemicBeliefs.backfills.d.ts +8 -8
  79. package/dist/epistemicBeliefs.backfills.js +655 -289
  80. package/dist/epistemicBeliefs.backfills.js.map +1 -1
  81. package/dist/epistemicBeliefs.confidence.d.ts +19 -15
  82. package/dist/epistemicBeliefs.confidence.js +633 -386
  83. package/dist/epistemicBeliefs.confidence.js.map +1 -1
  84. package/dist/epistemicBeliefs.core.d.ts +6 -6
  85. package/dist/epistemicBeliefs.core.js +717 -371
  86. package/dist/epistemicBeliefs.core.js.map +1 -1
  87. package/dist/epistemicBeliefs.d.ts +11 -9
  88. package/dist/epistemicBeliefs.forkEvidence.d.ts +2 -0
  89. package/dist/epistemicBeliefs.forkEvidence.js +8 -8
  90. package/dist/epistemicBeliefs.forkEvidence.js.map +1 -1
  91. package/dist/epistemicBeliefs.helpers.d.ts +68 -49
  92. package/dist/epistemicBeliefs.helpers.js +358 -211
  93. package/dist/epistemicBeliefs.helpers.js.map +1 -1
  94. package/dist/epistemicBeliefs.internal.d.ts +5 -5
  95. package/dist/epistemicBeliefs.internal.js +1248 -1026
  96. package/dist/epistemicBeliefs.internal.js.map +1 -1
  97. package/dist/epistemicBeliefs.js +4942 -3590
  98. package/dist/epistemicBeliefs.js.map +1 -1
  99. package/dist/epistemicBeliefs.lifecycle.d.ts +5 -5
  100. package/dist/epistemicBeliefs.lifecycle.js +1138 -781
  101. package/dist/epistemicBeliefs.lifecycle.js.map +1 -1
  102. package/dist/epistemicBeliefs.links.d.ts +7 -7
  103. package/dist/epistemicBeliefs.links.js +404 -267
  104. package/dist/epistemicBeliefs.links.js.map +1 -1
  105. package/dist/epistemicBeliefs.queries.d.ts +4 -4
  106. package/dist/epistemicBeliefs.queries.js +175 -20
  107. package/dist/epistemicBeliefs.queries.js.map +1 -1
  108. package/dist/epistemicBeliefs.topicAnchor.d.ts +6 -4
  109. package/dist/epistemicBeliefs.topicAnchor.js +12 -5
  110. package/dist/epistemicBeliefs.topicAnchor.js.map +1 -1
  111. package/dist/epistemicContracts.d.ts +28 -3
  112. package/dist/epistemicContracts.evaluators.d.ts +2 -0
  113. package/dist/epistemicContracts.evaluators.js +1062 -576
  114. package/dist/epistemicContracts.evaluators.js.map +1 -1
  115. package/dist/epistemicContracts.handlers.d.ts +15 -32
  116. package/dist/epistemicContracts.handlers.js +1829 -1351
  117. package/dist/epistemicContracts.handlers.js.map +1 -1
  118. package/dist/epistemicContracts.js +1131 -636
  119. package/dist/epistemicContracts.js.map +1 -1
  120. package/dist/epistemicContracts.metrics.d.ts +2 -0
  121. package/dist/epistemicContracts.metrics.js +375 -158
  122. package/dist/epistemicContracts.metrics.js.map +1 -1
  123. package/dist/epistemicContracts.types.d.ts +87 -81
  124. package/dist/epistemicEdgeCreation.d.ts +2 -0
  125. package/dist/epistemicEdgeCreation.js +87 -16
  126. package/dist/epistemicEdgeCreation.js.map +1 -1
  127. package/dist/{epistemicEdges-BF-cn4i3.d.ts → epistemicEdges-BGBh0QSP.d.ts} +4 -7
  128. package/dist/epistemicEdges.d.ts +6 -5
  129. package/dist/epistemicEdges.handlers.d.ts +3 -3
  130. package/dist/epistemicEdges.handlers.js +129 -24
  131. package/dist/epistemicEdges.handlers.js.map +1 -1
  132. package/dist/epistemicEdges.helpers.d.ts +6 -4
  133. package/dist/epistemicEdges.helpers.js +37 -2
  134. package/dist/epistemicEdges.helpers.js.map +1 -1
  135. package/dist/epistemicEdges.js +1966 -1202
  136. package/dist/epistemicEdges.js.map +1 -1
  137. package/dist/epistemicEdges.mutations.d.ts +7 -7
  138. package/dist/epistemicEdges.mutations.js +956 -579
  139. package/dist/epistemicEdges.mutations.js.map +1 -1
  140. package/dist/epistemicEdges.queries.d.ts +16 -16
  141. package/dist/epistemicEdges.queries.js +639 -367
  142. package/dist/epistemicEdges.queries.js.map +1 -1
  143. package/dist/epistemicEdges.types.d.ts +10 -8
  144. package/dist/epistemicEvidence.d.ts +4 -1
  145. package/dist/epistemicEvidence.js +933 -532
  146. package/dist/epistemicEvidence.js.map +1 -1
  147. package/dist/epistemicEvidenceHelpers.d.ts +26 -10
  148. package/dist/epistemicEvidenceHelpers.js +239 -200
  149. package/dist/epistemicEvidenceHelpers.js.map +1 -1
  150. package/dist/epistemicEvidenceMutations.d.ts +8 -8
  151. package/dist/epistemicEvidenceMutations.js +840 -692
  152. package/dist/epistemicEvidenceMutations.js.map +1 -1
  153. package/dist/epistemicEvidenceQueries.d.ts +8 -8
  154. package/dist/epistemicEvidenceQueries.js +514 -238
  155. package/dist/epistemicEvidenceQueries.js.map +1 -1
  156. package/dist/epistemicHelpers.d.ts +4 -2
  157. package/dist/epistemicHelpers.js +308 -134
  158. package/dist/epistemicHelpers.js.map +1 -1
  159. package/dist/epistemicInsert.d.ts +16 -4
  160. package/dist/epistemicInsert.js +6 -3
  161. package/dist/epistemicInsert.js.map +1 -1
  162. package/dist/epistemicLayerRules.d.ts +10 -8
  163. package/dist/epistemicLayerRules.js +1 -5
  164. package/dist/epistemicLayerRules.js.map +1 -1
  165. package/dist/{epistemicLinking-CfE00tHJ.d.ts → epistemicLinking-CsCDv2cN.d.ts} +3 -3
  166. package/dist/epistemicLinking.d.ts +1 -1
  167. package/dist/epistemicLinking.js +177 -100
  168. package/dist/epistemicLinking.js.map +1 -1
  169. package/dist/epistemicNodeCreation.d.ts +2 -0
  170. package/dist/epistemicNodeCreation.js +203 -40
  171. package/dist/epistemicNodeCreation.js.map +1 -1
  172. package/dist/{epistemicNodes-BCQxpYx_.d.ts → epistemicNodes-CokAgBHg.d.ts} +3 -3
  173. package/dist/epistemicNodes.d.ts +3 -3
  174. package/dist/epistemicNodes.helpers.d.ts +24 -15
  175. package/dist/epistemicNodes.helpers.js.map +1 -1
  176. package/dist/epistemicNodes.internal.d.ts +6 -6
  177. package/dist/epistemicNodes.internal.js +389 -319
  178. package/dist/epistemicNodes.internal.js.map +1 -1
  179. package/dist/epistemicNodes.js +700 -504
  180. package/dist/epistemicNodes.js.map +1 -1
  181. package/dist/epistemicNodes.mutations.d.ts +6 -6
  182. package/dist/epistemicNodes.mutations.js +560 -463
  183. package/dist/epistemicNodes.mutations.js.map +1 -1
  184. package/dist/epistemicNodes.queries.d.ts +8 -8
  185. package/dist/epistemicNodes.queries.js +311 -314
  186. package/dist/epistemicNodes.queries.js.map +1 -1
  187. package/dist/epistemicNodes.validators.d.ts +2 -2
  188. package/dist/epistemicNodes.validators.js.map +1 -1
  189. package/dist/epistemicQuestions.conviction.d.ts +8 -8
  190. package/dist/epistemicQuestions.conviction.js +665 -484
  191. package/dist/epistemicQuestions.conviction.js.map +1 -1
  192. package/dist/epistemicQuestions.create.d.ts +4 -4
  193. package/dist/epistemicQuestions.create.js +640 -612
  194. package/dist/epistemicQuestions.create.js.map +1 -1
  195. package/dist/epistemicQuestions.d.ts +8 -5
  196. package/dist/epistemicQuestions.evidence.d.ts +2 -2
  197. package/dist/epistemicQuestions.evidence.js +475 -383
  198. package/dist/epistemicQuestions.evidence.js.map +1 -1
  199. package/dist/epistemicQuestions.helpers.d.ts +125 -24
  200. package/dist/epistemicQuestions.helpers.js +240 -209
  201. package/dist/epistemicQuestions.helpers.js.map +1 -1
  202. package/dist/epistemicQuestions.js +3474 -2823
  203. package/dist/epistemicQuestions.js.map +1 -1
  204. package/dist/epistemicQuestions.lifecycle.d.ts +2 -2
  205. package/dist/epistemicQuestions.lifecycle.js +607 -546
  206. package/dist/epistemicQuestions.lifecycle.js.map +1 -1
  207. package/dist/epistemicQuestions.queries.d.ts +12 -7
  208. package/dist/epistemicQuestions.queries.js +305 -244
  209. package/dist/epistemicQuestions.queries.js.map +1 -1
  210. package/dist/epistemicQuestions.sprint.d.ts +2 -2
  211. package/dist/epistemicQuestions.sprint.js +600 -394
  212. package/dist/epistemicQuestions.sprint.js.map +1 -1
  213. package/dist/epistemicQuestions.tail.d.ts +6 -6
  214. package/dist/epistemicQuestions.tail.js +572 -433
  215. package/dist/epistemicQuestions.tail.js.map +1 -1
  216. package/dist/{epistemicSources-dlKj58Jp.d.ts → epistemicSources-DQtaEkWs.d.ts} +4 -4
  217. package/dist/epistemicSources.d.ts +1 -1
  218. package/dist/epistemicSources.js +351 -311
  219. package/dist/epistemicSources.js.map +1 -1
  220. package/dist/evaluators/index.d.ts +8 -6
  221. package/dist/evaluators/index.js +399 -167
  222. package/dist/evaluators/index.js.map +1 -1
  223. package/dist/evaluators/lint-checker-evaluator.d.ts +16 -0
  224. package/dist/evaluators/{lintCheckerEvaluator.js → lint-checker-evaluator.js} +10 -5
  225. package/dist/evaluators/lint-checker-evaluator.js.map +1 -0
  226. package/dist/evaluators/{sentryCheckerEvaluator.d.ts → sentry-checker-evaluator.d.ts} +7 -2
  227. package/dist/evaluators/{sentryCheckerEvaluator.js → sentry-checker-evaluator.js} +3 -3
  228. package/dist/evaluators/sentry-checker-evaluator.js.map +1 -0
  229. package/dist/evaluators/shared.d.ts +2 -2
  230. package/dist/evaluators/shared.js +3 -1
  231. package/dist/evaluators/shared.js.map +1 -1
  232. package/dist/evaluators/{testRunnerEvaluator.d.ts → test-runner-evaluator.d.ts} +6 -1
  233. package/dist/evaluators/{testRunnerEvaluator.js → test-runner-evaluator.js} +6 -4
  234. package/dist/evaluators/test-runner-evaluator.js.map +1 -0
  235. package/dist/evaluators/tsc-checker-evaluator.d.ts +16 -0
  236. package/dist/evaluators/{tscCheckerEvaluator.js → tsc-checker-evaluator.js} +10 -5
  237. package/dist/evaluators/tsc-checker-evaluator.js.map +1 -0
  238. package/dist/graphTypes.js +6 -2
  239. package/dist/graphTypes.js.map +1 -1
  240. package/dist/helpers.d.ts +2 -0
  241. package/dist/helpers.js +313 -93
  242. package/dist/helpers.js.map +1 -1
  243. package/dist/{index-C-Kyd7hD.d.ts → index-DZxyC9Pb.d.ts} +7 -6
  244. package/dist/index.d.ts +86 -83
  245. package/dist/index.js +16914 -11760
  246. package/dist/index.js.map +1 -1
  247. package/dist/invariantEnforcement.d.ts +3 -3
  248. package/dist/invariantEnforcement.js.map +1 -1
  249. package/dist/logicalRoleInference.d.ts +2 -0
  250. package/dist/logicalRoleInference.js +1 -1
  251. package/dist/logicalRoleInference.js.map +1 -1
  252. package/dist/matcherFeedbackUtils.d.ts +2 -2
  253. package/dist/matcherFeedbackUtils.js.map +1 -1
  254. package/dist/{ontology-matching-C6rrz2VP.d.ts → ontology-matching-C-mYFrir.d.ts} +16 -16
  255. package/dist/ontology-matching.d.ts +1 -1
  256. package/dist/{ontologyApproval-CFYmqKmk.d.ts → ontologyApproval-BVt0feJi.d.ts} +10 -10
  257. package/dist/ontologyApproval.d.ts +1 -1
  258. package/dist/ontologyApproval.js +7 -1
  259. package/dist/ontologyApproval.js.map +1 -1
  260. package/dist/ontologyDefinitions.d.ts +14 -24
  261. package/dist/ontologyDefinitions.js +269 -34
  262. package/dist/ontologyDefinitions.js.map +1 -1
  263. package/dist/ontologyHelpers.d.ts +13 -13
  264. package/dist/ontologyHelpers.js.map +1 -1
  265. package/dist/{ontologyRegistry-B67rPJ16.d.ts → ontologyRegistry-CljS-ENv.d.ts} +2 -2
  266. package/dist/ontologyRegistry.d.ts +1 -1
  267. package/dist/ontologyRegistry.js +34 -6
  268. package/dist/ontologyRegistry.js.map +1 -1
  269. package/dist/{projectionReconciliation-jww2fBI0.d.ts → projectionReconciliation-DnrSgHSQ.d.ts} +4 -4
  270. package/dist/projectionReconciliation.d.ts +1 -1
  271. package/dist/projectionReconciliation.js +57 -10
  272. package/dist/projectionReconciliation.js.map +1 -1
  273. package/dist/{projectionStaleness-CmdbpjVK.d.ts → projectionStaleness-C8ImQ2zP.d.ts} +17 -17
  274. package/dist/projectionStaleness.d.ts +1 -1
  275. package/dist/projectionStaleness.js +8 -2
  276. package/dist/projectionStaleness.js.map +1 -1
  277. package/dist/proof-attestation.json +1 -1
  278. package/dist/{questionEvidenceLinks-DFlyPpAj.d.ts → questionEvidenceLinks-_nPRa-LY.d.ts} +10 -10
  279. package/dist/questionEvidenceLinks.d.ts +1 -1
  280. package/dist/questionEvidenceLinks.js +564 -347
  281. package/dist/questionEvidenceLinks.js.map +1 -1
  282. package/dist/{resolverTypes-CC8Ea2E2.d.ts → resolverTypes-BOXPxLET.d.ts} +8 -7
  283. package/dist/resolverTypes.d.ts +4 -2
  284. package/dist/{resolvers-Br1a6eLV.d.ts → resolvers-B1TIBmRO.d.ts} +3 -1
  285. package/dist/resolvers.d.ts +5 -3
  286. package/dist/resolvers.js +121 -77
  287. package/dist/resolvers.js.map +1 -1
  288. package/dist/scopeResolverCompat.d.ts +10 -7
  289. package/dist/scopeResolverCompat.js +106 -123
  290. package/dist/scopeResolverCompat.js.map +1 -1
  291. package/dist/{text-matching-DNg4M5Wd.d.ts → text-matching-DzFooju6.d.ts} +7 -7
  292. package/dist/text-matching.d.ts +1 -1
  293. package/dist/topicOntologyResolver.d.ts +22 -21
  294. package/dist/topicOntologyResolver.js +54 -32
  295. package/dist/topicOntologyResolver.js.map +1 -1
  296. package/dist/topicProjectOverlay.d.ts +30 -20
  297. package/dist/topicProjectOverlay.js +120 -76
  298. package/dist/topicProjectOverlay.js.map +1 -1
  299. package/dist/{topicScope-7zhyeGl7.d.ts → topicScope-DJVa0mLa.d.ts} +22 -7
  300. package/dist/topicScope.d.ts +3 -1
  301. package/dist/topicScope.js +104 -119
  302. package/dist/topicScope.js.map +1 -1
  303. package/dist/workflowBridge.d.ts +26 -15
  304. package/dist/workflowBridge.js +140 -144
  305. package/dist/workflowBridge.js.map +1 -1
  306. package/dist/workspaceIsolation.d.ts +14 -12
  307. package/dist/workspaceIsolation.js +108 -122
  308. package/dist/workspaceIsolation.js.map +1 -1
  309. package/package.json +4 -4
  310. package/dist/edges/dependsOn.js.map +0 -1
  311. package/dist/edges/derivedFrom.js.map +0 -1
  312. package/dist/edges/propagationTypes.js.map +0 -1
  313. package/dist/evaluators/lintCheckerEvaluator.d.ts +0 -11
  314. package/dist/evaluators/lintCheckerEvaluator.js.map +0 -1
  315. package/dist/evaluators/sentryCheckerEvaluator.js.map +0 -1
  316. package/dist/evaluators/testRunnerEvaluator.js.map +0 -1
  317. package/dist/evaluators/tscCheckerEvaluator.d.ts +0 -11
  318. package/dist/evaluators/tscCheckerEvaluator.js.map +0 -1
  319. package/dist/{epistemicQuestions-bwHd2FWE.d.ts → epistemicQuestions-Do1fhYm5.d.ts} +4 -4
@@ -1,17 +1,21 @@
1
- import { v } from 'convex/values';
2
1
  import { requireScopeWriteAccess } from '@lucern/access-control/access';
3
2
  import { permissiveReturn } from '@lucern/contracts/schema-helpers/validators';
4
- import { componentsGeneric, anyApi, mutationGeneric, queryGeneric } from 'convex/server';
5
- import { throwStructuredMutationError } from '@lucern/access-control/structuredMutationError';
6
- import { normalizeTupleContradictionPolicy } from '@lucern/confidence';
3
+ import { v } from 'convex/values';
4
+ import { unsafeConvexAnyApi } from '@lucern/contracts/convex/unsafeAnyApi';
5
+ import { componentsGeneric, mutationGeneric, queryGeneric } from 'convex/server';
7
6
  import '@lucern/access-control/audience';
8
7
  import { getCurrentUserId } from '@lucern/access-control/auth';
8
+ import { throwStructuredMutationError } from '@lucern/access-control/structuredMutationError';
9
+ import { normalizeTupleContradictionPolicy } from '@lucern/confidence';
9
10
  import '@lucern/contracts/schema-helpers/spine/tables/epistemicNodes';
10
11
 
11
12
  // src/epistemicBeliefs.admin.ts
12
- var api = anyApi;
13
+ var unsafeApi = unsafeConvexAnyApi(
14
+ "graph-primitives top-level module bundle lacks a committed Convex _generated/api surface"
15
+ );
16
+ var api = unsafeApi;
13
17
  componentsGeneric();
14
- var internal = anyApi;
18
+ var internal = unsafeApi;
15
19
  var mutation = mutationGeneric;
16
20
  var query = queryGeneric;
17
21
 
@@ -60,13 +64,15 @@ function asMappedProjectId(topic) {
60
64
  if (!topic) {
61
65
  return;
62
66
  }
63
- const directLegacyProjectId = normalizeScopeValue(topic[LEGACY_SCOPE_FIELD]);
67
+ const directLegacyProjectId = normalizeScopeValue(
68
+ topic[LEGACY_SCOPE_FIELD]
69
+ );
64
70
  if (directLegacyProjectId) {
65
71
  return directLegacyProjectId;
66
72
  }
67
73
  const metadata = topic.metadata || {};
68
74
  const candidate = metadata[LEGACY_SCOPE_FIELD] || metadata.legacyProjectId || metadata.projectId || metadata.scopeProjectId;
69
- return candidate ? candidate : void 0;
75
+ return typeof candidate === "string" ? normalizeScopeValue(candidate) : void 0;
70
76
  }
71
77
  function normalizeScopeValue(value) {
72
78
  if (typeof value !== "string") {
@@ -91,8 +97,9 @@ function pickPrimaryTopic(candidates) {
91
97
  })[0];
92
98
  }
93
99
  async function findTopicsByScopeAlias(ctx, scopeId) {
100
+ const query2 = ctx.db.query("topics");
94
101
  try {
95
- return await ctx.db.query("topics").withIndex(
102
+ return await query2.withIndex(
96
103
  "by_graph_scope_project",
97
104
  (q) => q.eq(LEGACY_SCOPE_FIELD, scopeId)
98
105
  ).collect();
@@ -104,7 +111,7 @@ async function findTopicsByScopeAlias(ctx, scopeId) {
104
111
  scopeId
105
112
  }
106
113
  );
107
- const topics = await ctx.db.query("topics").collect();
114
+ const topics = await query2.collect();
108
115
  return topics.filter((topic) => {
109
116
  const normalizedGlobalId = normalizeScopeValue(topic.globalId);
110
117
  const mappedProjectId = asMappedProjectId(topic);
@@ -160,137 +167,115 @@ async function resolveInheritedWorkspaceScope(ctx, topic) {
160
167
  let current = topic;
161
168
  for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {
162
169
  current = await ctx.db.get(current.parentTopicId);
163
- if (!current) break;
170
+ if (!current) {
171
+ break;
172
+ }
164
173
  if (!tenantId) {
165
174
  tenantId = normalizeScopeValue(current.tenantId);
166
175
  }
167
176
  if (!workspaceId) {
168
177
  workspaceId = normalizeScopeValue(current.workspaceId);
169
178
  }
170
- if (tenantId && workspaceId) break;
179
+ if (tenantId && workspaceId) {
180
+ break;
181
+ }
171
182
  }
172
183
  return { tenantId, workspaceId };
173
184
  }
174
185
  async function resolveTopicProjectScope(ctx, args) {
175
186
  if (args.topicId) {
176
- let topic = null;
177
- try {
178
- topic = await ctx.db.get(
179
- args.topicId
180
- );
181
- } catch (error) {
182
- debugGraphPrimitiveFallback(
183
- "[topicScope] Failed to load topic by direct id",
184
- {
185
- error,
186
- topicId: args.topicId
187
- }
188
- );
189
- }
190
- if (!topic) {
191
- topic = await tryResolveHostTopicById(ctx, String(args.topicId));
192
- }
193
- if (!topic) {
194
- topic = pickPrimaryTopic(
195
- await findTopicsByScopeAlias(ctx, String(args.topicId))
196
- ) ?? null;
197
- }
198
- if (!topic) {
199
- const nodeScope = await resolveTopicNodeScopeOrNull(
200
- ctx,
201
- String(args.topicId)
202
- );
203
- if (nodeScope) {
204
- return nodeScope;
205
- }
206
- throw new Error(`Topic not found: ${String(args.topicId)}`);
207
- }
208
- const inherited = await resolveInheritedWorkspaceScope(ctx, topic);
209
- const mapped = asMappedProjectId(topic);
210
- if (mapped) {
211
- return {
212
- topicId: topic._id,
213
- projectId: mapped,
214
- tenantId: inherited.tenantId,
215
- workspaceId: inherited.workspaceId,
216
- source: "topic"
217
- };
218
- }
219
- return {
220
- topicId: topic._id,
221
- tenantId: inherited.tenantId,
222
- workspaceId: inherited.workspaceId,
223
- source: "topic"
224
- };
187
+ return await resolveScopeFromTopicId(ctx, args.topicId);
225
188
  }
226
189
  if (args.projectId) {
227
- let directTopic = null;
228
- try {
229
- directTopic = await ctx.db.get(
230
- args.projectId
231
- );
232
- } catch (error) {
233
- debugGraphPrimitiveFallback(
234
- "[topicScope] Failed to load direct project topic",
235
- {
236
- error,
237
- projectId: args.projectId
238
- }
239
- );
240
- }
241
- if (directTopic) {
242
- const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);
243
- const mapped = asMappedProjectId(directTopic);
244
- return {
245
- topicId: directTopic._id,
246
- projectId: mapped ?? args.projectId,
247
- tenantId: inherited.tenantId,
248
- workspaceId: inherited.workspaceId,
249
- source: "topic_inferred"
250
- };
251
- }
252
- directTopic = await tryResolveHostTopicByLegacyScope(ctx, args.projectId);
253
- if (directTopic) {
254
- const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);
255
- const mapped = asMappedProjectId(directTopic);
256
- return {
257
- topicId: directTopic._id,
258
- projectId: mapped ?? args.projectId,
259
- tenantId: inherited.tenantId,
260
- workspaceId: inherited.workspaceId,
261
- source: "topic_inferred"
262
- };
263
- }
264
- const topics = await findTopicsByScopeAlias(ctx, args.projectId);
265
- const primary = pickPrimaryTopic(topics);
266
- if (primary) {
267
- const inherited = await resolveInheritedWorkspaceScope(ctx, primary);
268
- return {
269
- topicId: primary._id,
270
- projectId: args.projectId,
271
- tenantId: inherited.tenantId,
272
- workspaceId: inherited.workspaceId,
273
- source: "project_mapped_topic"
274
- };
275
- }
276
- const nodeScope = await resolveTopicNodeScopeOrNull(
277
- ctx,
278
- String(args.projectId)
279
- );
280
- if (nodeScope) {
281
- return {
282
- ...nodeScope,
283
- projectId: nodeScope.projectId ?? String(args.projectId)
284
- };
285
- }
286
- throw new Error(
287
- `Legacy project scope ${String(args.projectId)} has no mapped topic.`
288
- );
190
+ return await resolveScopeFromLegacyProjectId(ctx, args.projectId);
289
191
  }
290
192
  throw new Error(
291
193
  "Missing scope: provide topicId (preferred) or legacy projectId alias."
292
194
  );
293
195
  }
196
+ async function resolveScopeFromTopicId(ctx, topicId) {
197
+ const topic = await resolveTopicDocFromTopicId(ctx, topicId);
198
+ if (topic) {
199
+ return await buildTopicScope(ctx, topic, "topic");
200
+ }
201
+ const nodeScope = await resolveTopicNodeScopeOrNull(ctx, String(topicId));
202
+ if (nodeScope) {
203
+ return nodeScope;
204
+ }
205
+ throw new Error(`Topic not found: ${String(topicId)}`);
206
+ }
207
+ async function resolveTopicDocFromTopicId(ctx, topicId) {
208
+ const direct = await tryReadTopicDoc(ctx, topicId, {
209
+ failureLog: "[topicScope] Failed to load topic by direct id",
210
+ idLogKey: "topicId"
211
+ });
212
+ if (direct) {
213
+ return direct;
214
+ }
215
+ const hostTopic = await tryResolveHostTopicById(ctx, String(topicId));
216
+ if (hostTopic) {
217
+ return hostTopic;
218
+ }
219
+ return pickPrimaryTopic(await findTopicsByScopeAlias(ctx, String(topicId))) ?? null;
220
+ }
221
+ async function resolveScopeFromLegacyProjectId(ctx, legacyProjectId) {
222
+ const directTopic = await resolveDirectLegacyProjectTopic(
223
+ ctx,
224
+ legacyProjectId
225
+ );
226
+ if (directTopic) {
227
+ return await buildTopicScope(ctx, directTopic, "topic_inferred", {
228
+ fallbackProjectId: legacyProjectId
229
+ });
230
+ }
231
+ const primary = pickPrimaryTopic(
232
+ await findTopicsByScopeAlias(ctx, legacyProjectId)
233
+ );
234
+ if (primary) {
235
+ return await buildTopicScope(ctx, primary, "project_mapped_topic", {
236
+ fallbackProjectId: legacyProjectId
237
+ });
238
+ }
239
+ const nodeScope = await resolveTopicNodeScopeOrNull(ctx, legacyProjectId);
240
+ if (nodeScope) {
241
+ return {
242
+ ...nodeScope,
243
+ projectId: nodeScope.projectId ?? legacyProjectId
244
+ };
245
+ }
246
+ throw new Error(
247
+ `Legacy project scope ${legacyProjectId} has no mapped topic.`
248
+ );
249
+ }
250
+ async function resolveDirectLegacyProjectTopic(ctx, legacyProjectId) {
251
+ const directTopic = await tryReadTopicDoc(ctx, legacyProjectId, {
252
+ failureLog: "[topicScope] Failed to load direct project topic",
253
+ idLogKey: "projectId"
254
+ });
255
+ return directTopic ?? tryResolveHostTopicByLegacyScope(ctx, legacyProjectId);
256
+ }
257
+ async function tryReadTopicDoc(ctx, id, log) {
258
+ try {
259
+ return await ctx.db.get(id);
260
+ } catch (error) {
261
+ debugGraphPrimitiveFallback(log.failureLog, {
262
+ error,
263
+ [log.idLogKey]: id
264
+ });
265
+ return null;
266
+ }
267
+ }
268
+ async function buildTopicScope(ctx, topic, source, options = {}) {
269
+ const inherited = await resolveInheritedWorkspaceScope(ctx, topic);
270
+ const mapped = asMappedProjectId(topic);
271
+ return {
272
+ topicId: topic._id,
273
+ ...mapped || options.fallbackProjectId ? { projectId: mapped ?? options.fallbackProjectId } : {},
274
+ tenantId: inherited.tenantId,
275
+ workspaceId: inherited.workspaceId,
276
+ source
277
+ };
278
+ }
294
279
  var optionalScopeArgs = {
295
280
  projectId: v.optional(v.string()),
296
281
  topicId: v.optional(v.string())
@@ -325,8 +310,6 @@ function nodeMatchesWorkspaceReasoningScope(node, scope) {
325
310
  }
326
311
  return scopeWorkspaceId === nodeWorkspaceId;
327
312
  }
328
-
329
- // src/epistemicBeliefs.helpers.ts
330
313
  v.id("epistemicNodes");
331
314
  var DEFAULT_PROJECT_BELIEF_LIMIT = 250;
332
315
  var MAX_PROJECT_BELIEF_LIMIT = 1e3;
@@ -334,6 +317,120 @@ var optionalBeliefScopeArgs = optionalScopeArgs;
334
317
  ({
335
318
  tupleContradiction: normalizeTupleContradictionPolicy()
336
319
  });
320
+ function readFiniteNumber(value) {
321
+ return typeof value === "number" && Number.isFinite(value) ? value : void 0;
322
+ }
323
+ function isRecord(value) {
324
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
325
+ }
326
+ function readOptionalString(value) {
327
+ return typeof value === "string" && value.trim().length > 0 ? value : void 0;
328
+ }
329
+ function readStringArray(value) {
330
+ if (!Array.isArray(value)) {
331
+ return;
332
+ }
333
+ const strings = value.filter(
334
+ (item) => typeof item === "string" && item.length > 0
335
+ );
336
+ return strings.length === value.length ? strings : void 0;
337
+ }
338
+ function readRecord(value) {
339
+ return isRecord(value) ? value : void 0;
340
+ }
341
+ function readBeliefNodeView(value) {
342
+ if (!isRecord(value)) {
343
+ return null;
344
+ }
345
+ const id = readOptionalString(value._id);
346
+ const nodeType = readOptionalString(value.nodeType);
347
+ if (!(id && nodeType === "belief")) {
348
+ return null;
349
+ }
350
+ const node = {
351
+ _id: id,
352
+ nodeType
353
+ };
354
+ const creationTime = readFiniteNumber(value._creationTime);
355
+ if (creationTime !== void 0) {
356
+ node._creationTime = creationTime;
357
+ }
358
+ const metadata = readRecord(value.metadata);
359
+ if (metadata !== void 0) {
360
+ node.metadata = metadata;
361
+ }
362
+ const opinionA = readFiniteNumber(value.opinion_a);
363
+ if (opinionA !== void 0) {
364
+ node.opinion_a = opinionA;
365
+ }
366
+ const opinionB = readFiniteNumber(value.opinion_b);
367
+ if (opinionB !== void 0) {
368
+ node.opinion_b = opinionB;
369
+ }
370
+ const opinionD = readFiniteNumber(value.opinion_d);
371
+ if (opinionD !== void 0) {
372
+ node.opinion_d = opinionD;
373
+ }
374
+ const opinionU = readFiniteNumber(value.opinion_u);
375
+ if (opinionU !== void 0) {
376
+ node.opinion_u = opinionU;
377
+ }
378
+ const tupleContradicted = typeof value.tupleContradicted === "boolean" ? value.tupleContradicted : void 0;
379
+ if (tupleContradicted !== void 0) {
380
+ node.tupleContradicted = tupleContradicted;
381
+ }
382
+ const stringFields = {
383
+ anonymizationClass: value.anonymizationClass,
384
+ audienceLabel: value.audienceLabel,
385
+ canonicalText: value.canonicalText,
386
+ createdBy: value.createdBy,
387
+ epistemicLayer: value.epistemicLayer,
388
+ exportClass: value.exportClass,
389
+ globalId: value.globalId,
390
+ projectId: value.projectId,
391
+ publicationStatus: value.publicationStatus,
392
+ sensitivityTier: value.sensitivityTier,
393
+ status: value.status,
394
+ tenantId: value.tenantId,
395
+ topicId: value.topicId,
396
+ userId: value.userId,
397
+ workspaceId: value.workspaceId
398
+ };
399
+ for (const [field, fieldValue] of Object.entries(stringFields)) {
400
+ const normalized = readOptionalString(fieldValue);
401
+ if (normalized !== void 0) {
402
+ node[field] = normalized;
403
+ }
404
+ }
405
+ const createdAt = readFiniteNumber(value.createdAt);
406
+ if (createdAt !== void 0) {
407
+ node.createdAt = createdAt;
408
+ }
409
+ const updatedAt = readFiniteNumber(value.updatedAt);
410
+ if (updatedAt !== void 0) {
411
+ node.updatedAt = updatedAt;
412
+ }
413
+ if (value.beliefStatus !== void 0) {
414
+ node.beliefStatus = value.beliefStatus;
415
+ }
416
+ if (value.confidence !== void 0) {
417
+ node.confidence = value.confidence;
418
+ }
419
+ if (value.predictionMeta !== void 0) {
420
+ node.predictionMeta = value.predictionMeta;
421
+ }
422
+ const policyTags = readStringArray(value.policyTags);
423
+ if (policyTags !== void 0) {
424
+ node.policyTags = policyTags;
425
+ }
426
+ return node;
427
+ }
428
+ function readBeliefNodeViews(values) {
429
+ return values.flatMap((value) => {
430
+ const node = readBeliefNodeView(value);
431
+ return node ? [node] : [];
432
+ });
433
+ }
337
434
  function buildBeliefStatusSuccessResult() {
338
435
  return { success: true };
339
436
  }
@@ -347,7 +444,7 @@ function clampBeliefLimit(limit, fallback = DEFAULT_PROJECT_BELIEF_LIMIT) {
347
444
  );
348
445
  }
349
446
  async function resolveBeliefScopeOrNull(ctx, args) {
350
- if (!args.projectId && !args.topicId) {
447
+ if (!(args.projectId || args.topicId)) {
351
448
  return null;
352
449
  }
353
450
  try {
@@ -372,14 +469,17 @@ async function getBeliefNodesForScope(ctx, scope, args) {
372
469
  "by_topic_type",
373
470
  (q) => q.eq("topicId", scope.topicId).eq("nodeType", "belief")
374
471
  );
375
- const nodes = typeof args?.scanLimit === "number" ? await baseQuery.order("desc").take(args.scanLimit) : await baseQuery.collect();
472
+ const rows = typeof args?.scanLimit === "number" ? await baseQuery.order("desc").take(args.scanLimit) : await baseQuery.collect();
473
+ const nodes = readBeliefNodeViews(rows);
376
474
  const scopedNodes = nodes.filter(
377
475
  (node) => nodeMatchesWorkspaceReasoningScope(node, scope)
378
476
  );
379
477
  if (!args?.status) {
380
478
  return scopedNodes;
381
479
  }
382
- return scopedNodes.filter((node) => node.status === args.status);
480
+ return scopedNodes.filter(
481
+ (node) => node.status === args.status
482
+ );
383
483
  }
384
484
  async function requireAuthenticatedUserId(ctx) {
385
485
  const userId = await getCurrentUserId(
@@ -398,6 +498,103 @@ async function requireAuthenticatedUserId(ctx) {
398
498
  }
399
499
 
400
500
  // src/epistemicBeliefs.admin.ts
501
+ function worktreeId(value) {
502
+ return value;
503
+ }
504
+ function isRecord2(value) {
505
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
506
+ }
507
+ function readConvexId(value) {
508
+ return typeof value === "string" && value.trim().length > 0 ? value : void 0;
509
+ }
510
+ function readOptionalNumber(value) {
511
+ return typeof value === "number" && Number.isFinite(value) ? value : void 0;
512
+ }
513
+ function readOptionalString2(value) {
514
+ return typeof value === "string" && value.trim().length > 0 ? value : void 0;
515
+ }
516
+ function readRecord2(value) {
517
+ return isRecord2(value) ? value : void 0;
518
+ }
519
+ function readBeliefAdminNode(value) {
520
+ if (!isRecord2(value)) {
521
+ return null;
522
+ }
523
+ const id = readConvexId(value._id);
524
+ if (!id) {
525
+ return null;
526
+ }
527
+ const node = { _id: id };
528
+ const metadata = readRecord2(value.metadata);
529
+ const nodeType = readOptionalString2(value.nodeType);
530
+ const projectId = readOptionalString2(value.projectId);
531
+ const status = readOptionalString2(value.status);
532
+ if (metadata !== void 0) {
533
+ node.metadata = metadata;
534
+ }
535
+ if (nodeType !== void 0) {
536
+ node.nodeType = nodeType;
537
+ }
538
+ if (projectId !== void 0) {
539
+ node.projectId = projectId;
540
+ }
541
+ if (status !== void 0) {
542
+ node.status = status;
543
+ }
544
+ return node;
545
+ }
546
+ function readBeliefAdminEdge(value) {
547
+ if (!isRecord2(value)) {
548
+ return null;
549
+ }
550
+ const id = readConvexId(value._id);
551
+ if (!id) {
552
+ return null;
553
+ }
554
+ const edge = { _id: id };
555
+ const context = readOptionalString2(value.context);
556
+ const edgeType = readOptionalString2(value.edgeType);
557
+ const fromNodeId = readConvexId(value.fromNodeId);
558
+ const globalId = readOptionalString2(value.globalId);
559
+ const projectId = readOptionalString2(value.projectId);
560
+ const toNodeId = readConvexId(value.toNodeId);
561
+ const weight = readOptionalNumber(value.weight);
562
+ if (context !== void 0) {
563
+ edge.context = context;
564
+ }
565
+ if (edgeType !== void 0) {
566
+ edge.edgeType = edgeType;
567
+ }
568
+ if (fromNodeId !== void 0) {
569
+ edge.fromNodeId = fromNodeId;
570
+ }
571
+ if (globalId !== void 0) {
572
+ edge.globalId = globalId;
573
+ }
574
+ if (projectId !== void 0) {
575
+ edge.projectId = projectId;
576
+ }
577
+ if (toNodeId !== void 0) {
578
+ edge.toNodeId = toNodeId;
579
+ }
580
+ if (weight !== void 0) {
581
+ edge.weight = weight;
582
+ }
583
+ return edge;
584
+ }
585
+ function readWorktreeBeliefClusterLink(value) {
586
+ if (!isRecord2(value)) {
587
+ return null;
588
+ }
589
+ const beliefId = readConvexId(value.beliefId);
590
+ return beliefId ? { beliefId } : null;
591
+ }
592
+ function readRowList(values, reader) {
593
+ return values.flatMap((value) => {
594
+ const row = reader(value);
595
+ return row ? [row] : [];
596
+ });
597
+ }
401
598
  var deleteRelationship = mutation({
402
599
  args: {
403
600
  edgeId: v.id("epistemicEdges"),
@@ -407,7 +604,7 @@ var deleteRelationship = mutation({
407
604
  handler: async (ctx, args) => {
408
605
  const authenticatedUserId = await requireAuthenticatedUserId(ctx);
409
606
  const now = Date.now();
410
- const edge = await ctx.db.get(args.edgeId);
607
+ const edge = readBeliefAdminEdge(await ctx.db.get(args.edgeId));
411
608
  if (!edge) {
412
609
  throw new Error("Edge not found");
413
610
  }
@@ -421,12 +618,12 @@ var deleteRelationship = mutation({
421
618
  edgeType: edge.edgeType
422
619
  };
423
620
  await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {
424
- globalId: edge.globalId
621
+ globalId: edge.globalId ?? String(args.edgeId)
425
622
  });
426
623
  await ctx.db.delete(args.edgeId);
427
624
  await ctx.db.insert("epistemicAudit", {
428
625
  entityType: "edge",
429
- entityId: edge.globalId,
626
+ entityId: edge.globalId ?? String(args.edgeId),
430
627
  changeType: "edge_removed",
431
628
  previousState,
432
629
  newState: null,
@@ -454,15 +651,15 @@ var updateCriticality = mutation({
454
651
  handler: async (ctx, args) => {
455
652
  const authenticatedUserId = await requireAuthenticatedUserId(ctx);
456
653
  const now = Date.now();
457
- const node = await ctx.db.get(args.nodeId);
458
- if (!node || node.nodeType !== "belief") {
654
+ const node = readBeliefAdminNode(await ctx.db.get(args.nodeId));
655
+ if (node?.nodeType !== "belief") {
459
656
  throw new Error("Belief not found");
460
657
  }
461
658
  if (!node.projectId) {
462
659
  throw new Error("Belief has no project scope");
463
660
  }
464
661
  await requireScopeWriteAccess(ctx, node.projectId, authenticatedUserId);
465
- const metadata = node.metadata || {};
662
+ const metadata = node.metadata ?? {};
466
663
  const previousCriticality = metadata.criticality;
467
664
  await ctx.db.patch(args.nodeId, {
468
665
  metadata: {
@@ -521,8 +718,8 @@ var batchUpdateCriticality = mutation({
521
718
  const results = [];
522
719
  for (const update of args.updates) {
523
720
  try {
524
- const node = await ctx.db.get(update.beliefId);
525
- if (!node || node.nodeType !== "belief") {
721
+ const node = readBeliefAdminNode(await ctx.db.get(update.beliefId));
722
+ if (node?.nodeType !== "belief") {
526
723
  results.push({ beliefId: update.beliefId, success: false });
527
724
  continue;
528
725
  }
@@ -530,12 +727,8 @@ var batchUpdateCriticality = mutation({
530
727
  results.push({ beliefId: update.beliefId, success: false });
531
728
  continue;
532
729
  }
533
- await requireScopeWriteAccess(
534
- ctx,
535
- node.projectId,
536
- authenticatedUserId
537
- );
538
- const metadata = node.metadata || {};
730
+ await requireScopeWriteAccess(ctx, node.projectId, authenticatedUserId);
731
+ const metadata = node.metadata ?? {};
539
732
  const previousCriticality = metadata.criticality;
540
733
  await ctx.db.patch(node._id, {
541
734
  metadata: {
@@ -564,11 +757,11 @@ var batchUpdateCriticality = mutation({
564
757
  changedAt: now,
565
758
  projectId: node.projectId
566
759
  });
567
- const result = {};
568
- result.beliefId = update.beliefId;
569
- result.nodeId = node._id;
570
- result.success = true;
571
- results.push(result);
760
+ results.push({
761
+ beliefId: update.beliefId,
762
+ nodeId: node._id,
763
+ success: true
764
+ });
572
765
  } catch (error) {
573
766
  debugGraphPrimitiveFallback(
574
767
  "[epistemicBeliefs] Failed to update belief criticality",
@@ -577,10 +770,7 @@ var batchUpdateCriticality = mutation({
577
770
  beliefId: update.beliefId
578
771
  }
579
772
  );
580
- const result = {};
581
- result.beliefId = update.beliefId;
582
- result.success = false;
583
- results.push(result);
773
+ results.push({ beliefId: update.beliefId, success: false });
584
774
  }
585
775
  }
586
776
  return { results, updatedCount: results.filter((r) => r.success).length };
@@ -605,7 +795,7 @@ var getByCriticality = query({
605
795
  }
606
796
  const nodes = await getBeliefNodesForScope(ctx, scope);
607
797
  return nodes.filter((n) => {
608
- const metadata = n.metadata;
798
+ const metadata = readRecord2(n.metadata);
609
799
  return metadata?.criticality === args.criticality && n.status === "active";
610
800
  });
611
801
  }
@@ -624,7 +814,7 @@ var getUnanalyzed = query({
624
814
  }
625
815
  const nodes = await getBeliefNodesForScope(ctx, scope);
626
816
  const unanalyzed = nodes.filter((n) => {
627
- const metadata = n.metadata;
817
+ const metadata = readRecord2(n.metadata);
628
818
  return !metadata?.criticality && n.status === "active";
629
819
  });
630
820
  return unanalyzed.slice(0, limit);
@@ -686,7 +876,7 @@ var getByPillar = query({
686
876
  },
687
877
  returns: permissiveReturn,
688
878
  handler: async (ctx, args) => {
689
- if (!args.projectId && !args.topicId) {
879
+ if (!(args.projectId || args.topicId)) {
690
880
  return [];
691
881
  }
692
882
  let scope;
@@ -706,10 +896,13 @@ var getByPillar = query({
706
896
  );
707
897
  return [];
708
898
  }
709
- const nodes = await ctx.db.query("epistemicNodes").withIndex(
710
- "by_topic_type",
711
- (q) => q.eq("topicId", scope.topicId).eq("nodeType", "belief")
712
- ).collect();
899
+ const nodes = readRowList(
900
+ await ctx.db.query("epistemicNodes").withIndex(
901
+ "by_topic_type",
902
+ (q) => q.eq("topicId", scope.topicId).eq("nodeType", "belief")
903
+ ).collect(),
904
+ readBeliefAdminNode
905
+ );
713
906
  return nodes.filter((n) => {
714
907
  const metadata = n.metadata;
715
908
  const matchesPillar = metadata?.pillar === args.pillar;
@@ -725,24 +918,30 @@ var getWorktreeCluster = query({
725
918
  },
726
919
  returns: permissiveReturn,
727
920
  handler: async (ctx, args) => {
728
- const worktree = await ctx.db.get(args.worktreeId);
921
+ const worktree = await ctx.db.get(worktreeId(args.worktreeId));
729
922
  if (!worktree) {
730
923
  return { beliefs: [], edges: [], beliefCount: 0 };
731
924
  }
732
- const clusterLinks = await ctx.db.query("worktreeBeliefCluster").withIndex("by_worktree", (q) => q.eq("worktreeId", args.worktreeId)).collect();
925
+ const clusterLinks = readRowList(
926
+ await ctx.db.query("worktreeBeliefCluster").withIndex("by_worktree", (q) => q.eq("worktreeId", args.worktreeId)).collect(),
927
+ readWorktreeBeliefClusterLink
928
+ );
733
929
  const beliefIds = new Set(clusterLinks.map((l) => String(l.beliefId)));
734
930
  const beliefs = [];
735
931
  for (const link of clusterLinks) {
736
- const node = await ctx.db.get(link.beliefId);
737
- if (node) beliefs.push(node);
932
+ const node = readBeliefAdminNode(await ctx.db.get(link.beliefId));
933
+ if (node) {
934
+ beliefs.push(node);
935
+ }
738
936
  }
739
937
  const clusterEdges = [];
740
938
  for (const beliefId of beliefIds) {
741
- const outEdges = await ctx.db.query("epistemicEdges").filter(
742
- (q) => q.eq(q.field("fromNodeId"), beliefId)
743
- ).collect();
939
+ const outEdges = readRowList(
940
+ await ctx.db.query("epistemicEdges").filter((q) => q.eq(q.field("fromNodeId"), beliefId)).collect(),
941
+ readBeliefAdminEdge
942
+ );
744
943
  for (const edge of outEdges) {
745
- if (beliefIds.has(String(edge.toNodeId))) {
944
+ if (edge.fromNodeId && edge.toNodeId && edge.edgeType && beliefIds.has(String(edge.toNodeId))) {
746
945
  clusterEdges.push({
747
946
  fromNodeId: String(edge.fromNodeId),
748
947
  toNodeId: String(edge.toNodeId),