@lucern/graph-primitives 1.0.29 → 1.0.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/dist/{beliefDecay-DZ6tkLYq.d.ts → beliefDecay-BmkEk5OJ.d.ts} +3 -3
  2. package/dist/beliefDecay.d.ts +1 -1
  3. package/dist/beliefDecay.js +448 -314
  4. package/dist/beliefDecay.js.map +1 -1
  5. package/dist/{beliefEvidenceLinks-CWOXxxJg.d.ts → beliefEvidenceLinks-BzfjON_6.d.ts} +13 -13
  6. package/dist/beliefEvidenceLinks.d.ts +1 -1
  7. package/dist/beliefEvidenceLinks.js +843 -624
  8. package/dist/beliefEvidenceLinks.js.map +1 -1
  9. package/dist/beliefEvidenceLinks.operational.d.ts +7 -5
  10. package/dist/beliefEvidenceLinks.operational.js +91 -18
  11. package/dist/beliefEvidenceLinks.operational.js.map +1 -1
  12. package/dist/beliefLifecycle.js.map +1 -1
  13. package/dist/confidencePropagationDispatch.d.ts +28 -27
  14. package/dist/confidencePropagationDispatch.js +157 -99
  15. package/dist/confidencePropagationDispatch.js.map +1 -1
  16. package/dist/{contradictions-51VLsESq.d.ts → contradictions-BATPuZTL.d.ts} +10 -10
  17. package/dist/contradictions.d.ts +1 -1
  18. package/dist/contradictions.js +395 -225
  19. package/dist/contradictions.js.map +1 -1
  20. package/dist/convex.d.ts +65 -30
  21. package/dist/convex.js +7 -3
  22. package/dist/convex.js.map +1 -1
  23. package/dist/debug.js.map +1 -1
  24. package/dist/edgeValidation.js +293 -85
  25. package/dist/edgeValidation.js.map +1 -1
  26. package/dist/edges/contains.d.ts +1 -1
  27. package/dist/edges/contains.js.map +1 -1
  28. package/dist/edges/contradicts.d.ts +1 -1
  29. package/dist/edges/contradicts.js.map +1 -1
  30. package/dist/edges/{dependsOn.d.ts → depends-on.d.ts} +1 -1
  31. package/dist/edges/{dependsOn.js → depends-on.js} +4 -4
  32. package/dist/edges/depends-on.js.map +1 -0
  33. package/dist/edges/{derivedFrom.d.ts → derived-from.d.ts} +1 -1
  34. package/dist/edges/{derivedFrom.js → derived-from.js} +3 -3
  35. package/dist/edges/derived-from.js.map +1 -0
  36. package/dist/edges/elaborates.d.ts +1 -1
  37. package/dist/edges/elaborates.js.map +1 -1
  38. package/dist/edges/index.d.ts +7 -3
  39. package/dist/edges/index.js +7 -4
  40. package/dist/edges/index.js.map +1 -1
  41. package/dist/edges/informs.d.ts +1 -1
  42. package/dist/edges/informs.js.map +1 -1
  43. package/dist/edges/{propagationTypes.d.ts → propagation-types.d.ts} +14 -14
  44. package/dist/edges/{propagationTypes.js → propagation-types.js} +3 -3
  45. package/dist/edges/propagation-types.js.map +1 -0
  46. package/dist/edges/refutes.d.ts +1 -1
  47. package/dist/edges/refutes.js.map +1 -1
  48. package/dist/edges/supports.d.ts +1 -1
  49. package/dist/edges/supports.js.map +1 -1
  50. package/dist/edges/tests.d.ts +1 -1
  51. package/dist/edges/tests.js.map +1 -1
  52. package/dist/edges/utils.d.ts +1 -1
  53. package/dist/edges/utils.js.map +1 -1
  54. package/dist/embeddingTrigger.d.ts +14 -6
  55. package/dist/embeddingTrigger.js +11 -14
  56. package/dist/embeddingTrigger.js.map +1 -1
  57. package/dist/{entityBridge-DMaKooYn.d.ts → entityBridge-BhVDM3pc.d.ts} +5 -5
  58. package/dist/entityBridge.d.ts +1 -1
  59. package/dist/entityBridge.js +602 -225
  60. package/dist/entityBridge.js.map +1 -1
  61. package/dist/entityCanonicalMatch.d.ts +14 -12
  62. package/dist/entityCanonicalMatch.js.map +1 -1
  63. package/dist/{entityLifecycle-CvgSK5FV.d.ts → entityLifecycle-BsfCz9pS.d.ts} +5 -9
  64. package/dist/entityLifecycle.d.ts +1 -1
  65. package/dist/entityLifecycle.js +854 -480
  66. package/dist/entityLifecycle.js.map +1 -1
  67. package/dist/{entityValidation-KLZ_Xl2D.d.ts → entityValidation-B1yNEHJx.d.ts} +7 -6
  68. package/dist/entityValidation.d.ts +3 -1
  69. package/dist/entityValidation.js +60 -8
  70. package/dist/entityValidation.js.map +1 -1
  71. package/dist/{epistemicAnswers-C5ib4z6_.d.ts → epistemicAnswers-f47YMu9U.d.ts} +6 -6
  72. package/dist/epistemicAnswers.d.ts +1 -1
  73. package/dist/epistemicAnswers.js +587 -545
  74. package/dist/epistemicAnswers.js.map +1 -1
  75. package/dist/epistemicBeliefs.admin.d.ts +8 -8
  76. package/dist/epistemicBeliefs.admin.js +365 -166
  77. package/dist/epistemicBeliefs.admin.js.map +1 -1
  78. package/dist/epistemicBeliefs.backfills.d.ts +8 -8
  79. package/dist/epistemicBeliefs.backfills.js +655 -289
  80. package/dist/epistemicBeliefs.backfills.js.map +1 -1
  81. package/dist/epistemicBeliefs.confidence.d.ts +19 -15
  82. package/dist/epistemicBeliefs.confidence.js +633 -386
  83. package/dist/epistemicBeliefs.confidence.js.map +1 -1
  84. package/dist/epistemicBeliefs.core.d.ts +6 -6
  85. package/dist/epistemicBeliefs.core.js +717 -371
  86. package/dist/epistemicBeliefs.core.js.map +1 -1
  87. package/dist/epistemicBeliefs.d.ts +11 -9
  88. package/dist/epistemicBeliefs.forkEvidence.d.ts +2 -0
  89. package/dist/epistemicBeliefs.forkEvidence.js +8 -8
  90. package/dist/epistemicBeliefs.forkEvidence.js.map +1 -1
  91. package/dist/epistemicBeliefs.helpers.d.ts +68 -49
  92. package/dist/epistemicBeliefs.helpers.js +358 -211
  93. package/dist/epistemicBeliefs.helpers.js.map +1 -1
  94. package/dist/epistemicBeliefs.internal.d.ts +5 -5
  95. package/dist/epistemicBeliefs.internal.js +1248 -1026
  96. package/dist/epistemicBeliefs.internal.js.map +1 -1
  97. package/dist/epistemicBeliefs.js +4942 -3590
  98. package/dist/epistemicBeliefs.js.map +1 -1
  99. package/dist/epistemicBeliefs.lifecycle.d.ts +5 -5
  100. package/dist/epistemicBeliefs.lifecycle.js +1138 -781
  101. package/dist/epistemicBeliefs.lifecycle.js.map +1 -1
  102. package/dist/epistemicBeliefs.links.d.ts +7 -7
  103. package/dist/epistemicBeliefs.links.js +404 -267
  104. package/dist/epistemicBeliefs.links.js.map +1 -1
  105. package/dist/epistemicBeliefs.queries.d.ts +4 -4
  106. package/dist/epistemicBeliefs.queries.js +175 -20
  107. package/dist/epistemicBeliefs.queries.js.map +1 -1
  108. package/dist/epistemicBeliefs.topicAnchor.d.ts +6 -4
  109. package/dist/epistemicBeliefs.topicAnchor.js +12 -5
  110. package/dist/epistemicBeliefs.topicAnchor.js.map +1 -1
  111. package/dist/epistemicContracts.d.ts +28 -3
  112. package/dist/epistemicContracts.evaluators.d.ts +2 -0
  113. package/dist/epistemicContracts.evaluators.js +1062 -576
  114. package/dist/epistemicContracts.evaluators.js.map +1 -1
  115. package/dist/epistemicContracts.handlers.d.ts +15 -32
  116. package/dist/epistemicContracts.handlers.js +1829 -1351
  117. package/dist/epistemicContracts.handlers.js.map +1 -1
  118. package/dist/epistemicContracts.js +1131 -636
  119. package/dist/epistemicContracts.js.map +1 -1
  120. package/dist/epistemicContracts.metrics.d.ts +2 -0
  121. package/dist/epistemicContracts.metrics.js +375 -158
  122. package/dist/epistemicContracts.metrics.js.map +1 -1
  123. package/dist/epistemicContracts.types.d.ts +87 -81
  124. package/dist/epistemicEdgeCreation.d.ts +2 -0
  125. package/dist/epistemicEdgeCreation.js +87 -16
  126. package/dist/epistemicEdgeCreation.js.map +1 -1
  127. package/dist/{epistemicEdges-BF-cn4i3.d.ts → epistemicEdges-BGBh0QSP.d.ts} +4 -7
  128. package/dist/epistemicEdges.d.ts +6 -5
  129. package/dist/epistemicEdges.handlers.d.ts +3 -3
  130. package/dist/epistemicEdges.handlers.js +129 -24
  131. package/dist/epistemicEdges.handlers.js.map +1 -1
  132. package/dist/epistemicEdges.helpers.d.ts +6 -4
  133. package/dist/epistemicEdges.helpers.js +37 -2
  134. package/dist/epistemicEdges.helpers.js.map +1 -1
  135. package/dist/epistemicEdges.js +1966 -1202
  136. package/dist/epistemicEdges.js.map +1 -1
  137. package/dist/epistemicEdges.mutations.d.ts +7 -7
  138. package/dist/epistemicEdges.mutations.js +956 -579
  139. package/dist/epistemicEdges.mutations.js.map +1 -1
  140. package/dist/epistemicEdges.queries.d.ts +16 -16
  141. package/dist/epistemicEdges.queries.js +639 -367
  142. package/dist/epistemicEdges.queries.js.map +1 -1
  143. package/dist/epistemicEdges.types.d.ts +10 -8
  144. package/dist/epistemicEvidence.d.ts +4 -1
  145. package/dist/epistemicEvidence.js +933 -532
  146. package/dist/epistemicEvidence.js.map +1 -1
  147. package/dist/epistemicEvidenceHelpers.d.ts +26 -10
  148. package/dist/epistemicEvidenceHelpers.js +239 -200
  149. package/dist/epistemicEvidenceHelpers.js.map +1 -1
  150. package/dist/epistemicEvidenceMutations.d.ts +8 -8
  151. package/dist/epistemicEvidenceMutations.js +840 -692
  152. package/dist/epistemicEvidenceMutations.js.map +1 -1
  153. package/dist/epistemicEvidenceQueries.d.ts +8 -8
  154. package/dist/epistemicEvidenceQueries.js +514 -238
  155. package/dist/epistemicEvidenceQueries.js.map +1 -1
  156. package/dist/epistemicHelpers.d.ts +4 -2
  157. package/dist/epistemicHelpers.js +308 -134
  158. package/dist/epistemicHelpers.js.map +1 -1
  159. package/dist/epistemicInsert.d.ts +16 -4
  160. package/dist/epistemicInsert.js +6 -3
  161. package/dist/epistemicInsert.js.map +1 -1
  162. package/dist/epistemicLayerRules.d.ts +10 -8
  163. package/dist/epistemicLayerRules.js +1 -5
  164. package/dist/epistemicLayerRules.js.map +1 -1
  165. package/dist/{epistemicLinking-CfE00tHJ.d.ts → epistemicLinking-CsCDv2cN.d.ts} +3 -3
  166. package/dist/epistemicLinking.d.ts +1 -1
  167. package/dist/epistemicLinking.js +177 -100
  168. package/dist/epistemicLinking.js.map +1 -1
  169. package/dist/epistemicNodeCreation.d.ts +2 -0
  170. package/dist/epistemicNodeCreation.js +203 -40
  171. package/dist/epistemicNodeCreation.js.map +1 -1
  172. package/dist/{epistemicNodes-BCQxpYx_.d.ts → epistemicNodes-CokAgBHg.d.ts} +3 -3
  173. package/dist/epistemicNodes.d.ts +3 -3
  174. package/dist/epistemicNodes.helpers.d.ts +24 -15
  175. package/dist/epistemicNodes.helpers.js.map +1 -1
  176. package/dist/epistemicNodes.internal.d.ts +6 -6
  177. package/dist/epistemicNodes.internal.js +389 -319
  178. package/dist/epistemicNodes.internal.js.map +1 -1
  179. package/dist/epistemicNodes.js +700 -504
  180. package/dist/epistemicNodes.js.map +1 -1
  181. package/dist/epistemicNodes.mutations.d.ts +6 -6
  182. package/dist/epistemicNodes.mutations.js +560 -463
  183. package/dist/epistemicNodes.mutations.js.map +1 -1
  184. package/dist/epistemicNodes.queries.d.ts +8 -8
  185. package/dist/epistemicNodes.queries.js +311 -314
  186. package/dist/epistemicNodes.queries.js.map +1 -1
  187. package/dist/epistemicNodes.validators.d.ts +2 -2
  188. package/dist/epistemicNodes.validators.js.map +1 -1
  189. package/dist/epistemicQuestions.conviction.d.ts +8 -8
  190. package/dist/epistemicQuestions.conviction.js +665 -484
  191. package/dist/epistemicQuestions.conviction.js.map +1 -1
  192. package/dist/epistemicQuestions.create.d.ts +4 -4
  193. package/dist/epistemicQuestions.create.js +640 -612
  194. package/dist/epistemicQuestions.create.js.map +1 -1
  195. package/dist/epistemicQuestions.d.ts +8 -5
  196. package/dist/epistemicQuestions.evidence.d.ts +2 -2
  197. package/dist/epistemicQuestions.evidence.js +475 -383
  198. package/dist/epistemicQuestions.evidence.js.map +1 -1
  199. package/dist/epistemicQuestions.helpers.d.ts +125 -24
  200. package/dist/epistemicQuestions.helpers.js +240 -209
  201. package/dist/epistemicQuestions.helpers.js.map +1 -1
  202. package/dist/epistemicQuestions.js +3474 -2823
  203. package/dist/epistemicQuestions.js.map +1 -1
  204. package/dist/epistemicQuestions.lifecycle.d.ts +2 -2
  205. package/dist/epistemicQuestions.lifecycle.js +607 -546
  206. package/dist/epistemicQuestions.lifecycle.js.map +1 -1
  207. package/dist/epistemicQuestions.queries.d.ts +12 -7
  208. package/dist/epistemicQuestions.queries.js +305 -244
  209. package/dist/epistemicQuestions.queries.js.map +1 -1
  210. package/dist/epistemicQuestions.sprint.d.ts +2 -2
  211. package/dist/epistemicQuestions.sprint.js +600 -394
  212. package/dist/epistemicQuestions.sprint.js.map +1 -1
  213. package/dist/epistemicQuestions.tail.d.ts +6 -6
  214. package/dist/epistemicQuestions.tail.js +572 -433
  215. package/dist/epistemicQuestions.tail.js.map +1 -1
  216. package/dist/{epistemicSources-dlKj58Jp.d.ts → epistemicSources-DQtaEkWs.d.ts} +4 -4
  217. package/dist/epistemicSources.d.ts +1 -1
  218. package/dist/epistemicSources.js +351 -311
  219. package/dist/epistemicSources.js.map +1 -1
  220. package/dist/evaluators/index.d.ts +8 -6
  221. package/dist/evaluators/index.js +399 -167
  222. package/dist/evaluators/index.js.map +1 -1
  223. package/dist/evaluators/lint-checker-evaluator.d.ts +16 -0
  224. package/dist/evaluators/{lintCheckerEvaluator.js → lint-checker-evaluator.js} +10 -5
  225. package/dist/evaluators/lint-checker-evaluator.js.map +1 -0
  226. package/dist/evaluators/{sentryCheckerEvaluator.d.ts → sentry-checker-evaluator.d.ts} +7 -2
  227. package/dist/evaluators/{sentryCheckerEvaluator.js → sentry-checker-evaluator.js} +3 -3
  228. package/dist/evaluators/sentry-checker-evaluator.js.map +1 -0
  229. package/dist/evaluators/shared.d.ts +2 -2
  230. package/dist/evaluators/shared.js +3 -1
  231. package/dist/evaluators/shared.js.map +1 -1
  232. package/dist/evaluators/{testRunnerEvaluator.d.ts → test-runner-evaluator.d.ts} +6 -1
  233. package/dist/evaluators/{testRunnerEvaluator.js → test-runner-evaluator.js} +6 -4
  234. package/dist/evaluators/test-runner-evaluator.js.map +1 -0
  235. package/dist/evaluators/tsc-checker-evaluator.d.ts +16 -0
  236. package/dist/evaluators/{tscCheckerEvaluator.js → tsc-checker-evaluator.js} +10 -5
  237. package/dist/evaluators/tsc-checker-evaluator.js.map +1 -0
  238. package/dist/graphTypes.js +6 -2
  239. package/dist/graphTypes.js.map +1 -1
  240. package/dist/helpers.d.ts +2 -0
  241. package/dist/helpers.js +313 -93
  242. package/dist/helpers.js.map +1 -1
  243. package/dist/{index-C-Kyd7hD.d.ts → index-DZxyC9Pb.d.ts} +7 -6
  244. package/dist/index.d.ts +86 -83
  245. package/dist/index.js +16914 -11760
  246. package/dist/index.js.map +1 -1
  247. package/dist/invariantEnforcement.d.ts +3 -3
  248. package/dist/invariantEnforcement.js.map +1 -1
  249. package/dist/logicalRoleInference.d.ts +2 -0
  250. package/dist/logicalRoleInference.js +1 -1
  251. package/dist/logicalRoleInference.js.map +1 -1
  252. package/dist/matcherFeedbackUtils.d.ts +2 -2
  253. package/dist/matcherFeedbackUtils.js.map +1 -1
  254. package/dist/{ontology-matching-C6rrz2VP.d.ts → ontology-matching-C-mYFrir.d.ts} +16 -16
  255. package/dist/ontology-matching.d.ts +1 -1
  256. package/dist/{ontologyApproval-CFYmqKmk.d.ts → ontologyApproval-BVt0feJi.d.ts} +10 -10
  257. package/dist/ontologyApproval.d.ts +1 -1
  258. package/dist/ontologyApproval.js +7 -1
  259. package/dist/ontologyApproval.js.map +1 -1
  260. package/dist/ontologyDefinitions.d.ts +14 -24
  261. package/dist/ontologyDefinitions.js +269 -34
  262. package/dist/ontologyDefinitions.js.map +1 -1
  263. package/dist/ontologyHelpers.d.ts +13 -13
  264. package/dist/ontologyHelpers.js.map +1 -1
  265. package/dist/{ontologyRegistry-B67rPJ16.d.ts → ontologyRegistry-CljS-ENv.d.ts} +2 -2
  266. package/dist/ontologyRegistry.d.ts +1 -1
  267. package/dist/ontologyRegistry.js +34 -6
  268. package/dist/ontologyRegistry.js.map +1 -1
  269. package/dist/{projectionReconciliation-jww2fBI0.d.ts → projectionReconciliation-DnrSgHSQ.d.ts} +4 -4
  270. package/dist/projectionReconciliation.d.ts +1 -1
  271. package/dist/projectionReconciliation.js +57 -10
  272. package/dist/projectionReconciliation.js.map +1 -1
  273. package/dist/{projectionStaleness-CmdbpjVK.d.ts → projectionStaleness-C8ImQ2zP.d.ts} +17 -17
  274. package/dist/projectionStaleness.d.ts +1 -1
  275. package/dist/projectionStaleness.js +8 -2
  276. package/dist/projectionStaleness.js.map +1 -1
  277. package/dist/proof-attestation.json +1 -1
  278. package/dist/{questionEvidenceLinks-DFlyPpAj.d.ts → questionEvidenceLinks-_nPRa-LY.d.ts} +10 -10
  279. package/dist/questionEvidenceLinks.d.ts +1 -1
  280. package/dist/questionEvidenceLinks.js +564 -347
  281. package/dist/questionEvidenceLinks.js.map +1 -1
  282. package/dist/{resolverTypes-CC8Ea2E2.d.ts → resolverTypes-BOXPxLET.d.ts} +8 -7
  283. package/dist/resolverTypes.d.ts +4 -2
  284. package/dist/{resolvers-Br1a6eLV.d.ts → resolvers-B1TIBmRO.d.ts} +3 -1
  285. package/dist/resolvers.d.ts +5 -3
  286. package/dist/resolvers.js +121 -77
  287. package/dist/resolvers.js.map +1 -1
  288. package/dist/scopeResolverCompat.d.ts +10 -7
  289. package/dist/scopeResolverCompat.js +106 -123
  290. package/dist/scopeResolverCompat.js.map +1 -1
  291. package/dist/{text-matching-DNg4M5Wd.d.ts → text-matching-DzFooju6.d.ts} +7 -7
  292. package/dist/text-matching.d.ts +1 -1
  293. package/dist/topicOntologyResolver.d.ts +22 -21
  294. package/dist/topicOntologyResolver.js +54 -32
  295. package/dist/topicOntologyResolver.js.map +1 -1
  296. package/dist/topicProjectOverlay.d.ts +30 -20
  297. package/dist/topicProjectOverlay.js +120 -76
  298. package/dist/topicProjectOverlay.js.map +1 -1
  299. package/dist/{topicScope-7zhyeGl7.d.ts → topicScope-DJVa0mLa.d.ts} +22 -7
  300. package/dist/topicScope.d.ts +3 -1
  301. package/dist/topicScope.js +104 -119
  302. package/dist/topicScope.js.map +1 -1
  303. package/dist/workflowBridge.d.ts +26 -15
  304. package/dist/workflowBridge.js +140 -144
  305. package/dist/workflowBridge.js.map +1 -1
  306. package/dist/workspaceIsolation.d.ts +14 -12
  307. package/dist/workspaceIsolation.js +108 -122
  308. package/dist/workspaceIsolation.js.map +1 -1
  309. package/package.json +4 -4
  310. package/dist/edges/dependsOn.js.map +0 -1
  311. package/dist/edges/derivedFrom.js.map +0 -1
  312. package/dist/edges/propagationTypes.js.map +0 -1
  313. package/dist/evaluators/lintCheckerEvaluator.d.ts +0 -11
  314. package/dist/evaluators/lintCheckerEvaluator.js.map +0 -1
  315. package/dist/evaluators/sentryCheckerEvaluator.js.map +0 -1
  316. package/dist/evaluators/testRunnerEvaluator.js.map +0 -1
  317. package/dist/evaluators/tscCheckerEvaluator.d.ts +0 -11
  318. package/dist/evaluators/tscCheckerEvaluator.js.map +0 -1
  319. package/dist/{epistemicQuestions-bwHd2FWE.d.ts → epistemicQuestions-Do1fhYm5.d.ts} +4 -4
@@ -1,10 +1,11 @@
1
- import { v } from 'convex/values';
1
+ import { normalizeAudienceKey, classFromAudienceKey } from '@lucern/access-control/audience';
2
+ import { getCurrentUserId } from '@lucern/access-control/auth';
2
3
  import { throwStructuredMutationError } from '@lucern/access-control/structuredMutationError';
3
4
  export { throwStructuredMutationError } from '@lucern/access-control/structuredMutationError';
4
5
  import { normalizeTupleContradictionPolicy, confidenceFromSL, readOpinionFromRecord, mkOpinion } from '@lucern/confidence';
5
- import { normalizeAudienceKey, classFromAudienceKey } from '@lucern/access-control/audience';
6
- import { getCurrentUserId } from '@lucern/access-control/auth';
7
- import { componentsGeneric, anyApi } from 'convex/server';
6
+ import { v } from 'convex/values';
7
+ import { unsafeConvexAnyApi } from '@lucern/contracts/convex/unsafeAnyApi';
8
+ import { componentsGeneric } from 'convex/server';
8
9
  import '@lucern/contracts/schema-helpers/spine/tables/epistemicNodes';
9
10
 
10
11
  // src/epistemicBeliefs.helpers.ts
@@ -119,9 +120,12 @@ function resolveBeliefLifecycleStatus(opts) {
119
120
  function isPreValidationBeliefStatus(status) {
120
121
  return status === "assumption" || status === "hypothesis";
121
122
  }
122
- var api = anyApi;
123
+ var unsafeApi = unsafeConvexAnyApi(
124
+ "graph-primitives top-level module bundle lacks a committed Convex _generated/api surface"
125
+ );
126
+ var api = unsafeApi;
123
127
  componentsGeneric();
124
- var internal = anyApi;
128
+ var internal = unsafeApi;
125
129
 
126
130
  // src/debug.ts
127
131
  function isGraphPrimitiveDebugEnabled() {
@@ -153,6 +157,10 @@ function readStringArray(value) {
153
157
  function readMetadata(topic) {
154
158
  return topic.metadata && typeof topic.metadata === "object" ? topic.metadata : {};
155
159
  }
160
+ function omitMetadataKey(metadata, key) {
161
+ const { [key]: _omitted, ...rest } = metadata;
162
+ return rest;
163
+ }
156
164
  function readLegacyProjectId(value) {
157
165
  if (!value) {
158
166
  return;
@@ -233,9 +241,12 @@ async function resolveTopicDoc(ctx, scopeId) {
233
241
  );
234
242
  }
235
243
  try {
236
- const topic = await ctx.runQuery(api.topics.getByLegacyScopeId, {
237
- projectId: String(scopeId)
238
- });
244
+ const topic = await ctx.runQuery(
245
+ api.topics.getByLegacyScopeId,
246
+ {
247
+ projectId: String(scopeId)
248
+ }
249
+ );
239
250
  if (topic?.name !== void 0 && topic?.type !== void 0) {
240
251
  return topic;
241
252
  }
@@ -255,8 +266,18 @@ function materializeTopicProjectOverlay(topic, idMode = "legacy") {
255
266
  const outwardId = idMode === "topic" ? topicId : storageProjectId;
256
267
  const visibility = coerceVisibility(topic.visibility) || coerceVisibility(metadata.visibility) || "private";
257
268
  const status = coerceStatus(topic.status) || coerceStatus(metadata.status) || "active";
258
- const createdAt = typeof topic.createdAt === "number" ? topic.createdAt : typeof topic._creationTime === "number" ? topic._creationTime : 0;
259
- const updatedAt = typeof topic.updatedAt === "number" ? topic.updatedAt : typeof metadata.updatedAt === "number" ? metadata.updatedAt : createdAt;
269
+ let createdAt = 0;
270
+ if (typeof topic.createdAt === "number") {
271
+ createdAt = topic.createdAt;
272
+ } else if (typeof topic._creationTime === "number") {
273
+ createdAt = topic._creationTime;
274
+ }
275
+ let updatedAt = createdAt;
276
+ if (typeof topic.updatedAt === "number") {
277
+ updatedAt = topic.updatedAt;
278
+ } else if (typeof metadata.updatedAt === "number") {
279
+ updatedAt = metadata.updatedAt;
280
+ }
260
281
  return {
261
282
  ...metadata,
262
283
  _id: outwardId,
@@ -325,90 +346,113 @@ async function patchTopicProjectOverlay(ctx, scopeId, value) {
325
346
  if (!topic) {
326
347
  return null;
327
348
  }
328
- const nextMetadata = { ...readMetadata(topic) };
329
- const patch = {};
330
- const topicUpdateArgs = {
331
- id: String(topic._id)
349
+ const plan = buildTopicProjectOverlayPatchPlan(topic, value);
350
+ await applyTopicProjectOverlayPatch(ctx, topic, plan);
351
+ return materializeTopicProjectOverlay({
352
+ ...topic,
353
+ ...plan.patch,
354
+ metadata: plan.nextMetadata
355
+ });
356
+ }
357
+ function buildTopicProjectOverlayPatchPlan(topic, value) {
358
+ const plan = {
359
+ nextMetadata: { ...readMetadata(topic) },
360
+ patch: {},
361
+ topicUpdateArgs: {
362
+ id: String(topic._id)
363
+ }
332
364
  };
333
365
  for (const [key, rawValue] of Object.entries(value)) {
334
- switch (key) {
335
- case "_id":
336
- case "projectId":
337
- case "topicId":
338
- case "legacyProjectId":
339
- case "storageProjectId":
340
- break;
341
- case "name":
342
- case "description":
343
- patch[key] = rawValue;
344
- topicUpdateArgs[key] = rawValue;
345
- break;
346
- case "tenantId":
347
- case "workspaceId":
348
- case "ownerId":
349
- throw new Error(
350
- `patchTopicProjectOverlay cannot mutate ${key} via component-owned topics`
351
- );
352
- case "status": {
353
- const status = coerceStatus(rawValue);
354
- if (status) {
355
- patch.status = status;
356
- topicUpdateArgs.status = status;
357
- }
358
- break;
359
- }
360
- case "visibility": {
361
- const visibility = coerceVisibility(rawValue);
362
- if (visibility) {
363
- patch.visibility = visibility;
364
- topicUpdateArgs.visibility = visibility;
365
- }
366
- break;
367
- }
368
- case "type": {
369
- const projectType = readNonEmptyString(rawValue);
370
- if (projectType) {
371
- nextMetadata.projectType = projectType;
372
- } else {
373
- delete nextMetadata.projectType;
374
- }
375
- break;
376
- }
377
- case "updatedAt":
378
- case "createdAt":
379
- break;
380
- default:
381
- if (rawValue === void 0) {
382
- delete nextMetadata[key];
383
- } else {
384
- nextMetadata[key] = rawValue;
385
- }
386
- }
366
+ applyTopicProjectOverlayPatchEntry(plan, key, rawValue);
367
+ }
368
+ plan.patch.updatedAt = Date.now();
369
+ plan.patch.metadata = plan.nextMetadata;
370
+ plan.topicUpdateArgs.metadata = plan.nextMetadata;
371
+ return plan;
372
+ }
373
+ function applyTopicProjectOverlayPatchEntry(plan, key, rawValue) {
374
+ switch (key) {
375
+ case "_id":
376
+ case "projectId":
377
+ case "topicId":
378
+ case "legacyProjectId":
379
+ case "storageProjectId":
380
+ case "updatedAt":
381
+ case "createdAt":
382
+ return;
383
+ case "name":
384
+ case "description":
385
+ plan.patch[key] = rawValue;
386
+ plan.topicUpdateArgs[key] = rawValue;
387
+ return;
388
+ case "tenantId":
389
+ case "workspaceId":
390
+ case "ownerId":
391
+ throw new Error(
392
+ `patchTopicProjectOverlay cannot mutate ${key} via component-owned topics`
393
+ );
394
+ case "status":
395
+ applyTopicStatusPatch(plan, rawValue);
396
+ return;
397
+ case "visibility":
398
+ applyTopicVisibilityPatch(plan, rawValue);
399
+ return;
400
+ case "type":
401
+ applyTopicProjectTypePatch(plan, rawValue);
402
+ return;
403
+ default:
404
+ applyTopicMetadataPatch(plan, key, rawValue);
405
+ }
406
+ }
407
+ function applyTopicStatusPatch(plan, rawValue) {
408
+ const status = coerceStatus(rawValue);
409
+ if (status) {
410
+ plan.patch.status = status;
411
+ plan.topicUpdateArgs.status = status;
412
+ }
413
+ }
414
+ function applyTopicVisibilityPatch(plan, rawValue) {
415
+ const visibility = coerceVisibility(rawValue);
416
+ if (visibility) {
417
+ plan.patch.visibility = visibility;
418
+ plan.topicUpdateArgs.visibility = visibility;
419
+ }
420
+ }
421
+ function applyTopicProjectTypePatch(plan, rawValue) {
422
+ const projectType = readNonEmptyString(rawValue);
423
+ if (projectType) {
424
+ plan.nextMetadata.projectType = projectType;
425
+ return;
426
+ }
427
+ plan.nextMetadata = omitMetadataKey(plan.nextMetadata, "projectType");
428
+ }
429
+ function applyTopicMetadataPatch(plan, key, rawValue) {
430
+ if (rawValue === void 0) {
431
+ plan.nextMetadata = omitMetadataKey(plan.nextMetadata, key);
432
+ return;
387
433
  }
388
- patch.updatedAt = Date.now();
389
- patch.metadata = nextMetadata;
390
- topicUpdateArgs.metadata = nextMetadata;
434
+ plan.nextMetadata[key] = rawValue;
435
+ }
436
+ async function applyTopicProjectOverlayPatch(ctx, topic, plan) {
391
437
  if (typeof ctx.runMutation === "function") {
392
438
  try {
393
- await ctx.runMutation(api.topics.update, topicUpdateArgs);
439
+ await ctx.runMutation(api.topics.update, plan.topicUpdateArgs);
394
440
  } catch (error) {
395
- if (!isMissingLucernChildComponentError(error) || !ctx?.db || typeof ctx.db.patch !== "function") {
441
+ if (!canPatchTopicViaLocalDb(ctx, error)) {
396
442
  throw error;
397
443
  }
398
- await ctx.db.patch(String(topic._id), patch);
444
+ await ctx.db.patch(topic._id, plan.patch);
399
445
  }
400
446
  } else if (ctx?.db && typeof ctx.db.patch === "function") {
401
- await ctx.db.patch(String(topic._id), patch);
447
+ await ctx.db.patch(topic._id, plan.patch);
402
448
  } else {
403
449
  throw new Error(
404
450
  "Cannot patch topic without component adapter (ctx.runMutation unavailable)"
405
451
  );
406
452
  }
407
- return materializeTopicProjectOverlay({
408
- ...topic,
409
- ...patch,
410
- metadata: nextMetadata
411
- });
453
+ }
454
+ function canPatchTopicViaLocalDb(ctx, error) {
455
+ return isMissingLucernChildComponentError(error) && Boolean(ctx?.db) && typeof ctx.db?.patch === "function";
412
456
  }
413
457
 
414
458
  // src/resolvers.ts
@@ -436,7 +480,7 @@ async function patchProjectWithTolerance(ctx, projectId, value) {
436
480
  try {
437
481
  await patchTopicProjectOverlay(ctx, projectId, value);
438
482
  } catch (error) {
439
- if (!isAdvisoryTopicPatch(value) || !isMissingLucernChildComponentError2(error)) {
483
+ if (!(isAdvisoryTopicPatch(value) && isMissingLucernChildComponentError2(error))) {
440
484
  throw error;
441
485
  }
442
486
  console.warn(
@@ -503,13 +547,15 @@ function asMappedProjectId(topic) {
503
547
  if (!topic) {
504
548
  return;
505
549
  }
506
- const directLegacyProjectId = normalizeScopeValue(topic[LEGACY_SCOPE_FIELD2]);
550
+ const directLegacyProjectId = normalizeScopeValue(
551
+ topic[LEGACY_SCOPE_FIELD2]
552
+ );
507
553
  if (directLegacyProjectId) {
508
554
  return directLegacyProjectId;
509
555
  }
510
556
  const metadata = topic.metadata || {};
511
557
  const candidate = metadata[LEGACY_SCOPE_FIELD2] || metadata.legacyProjectId || metadata.projectId || metadata.scopeProjectId;
512
- return candidate ? candidate : void 0;
558
+ return typeof candidate === "string" ? normalizeScopeValue(candidate) : void 0;
513
559
  }
514
560
  function normalizeScopeValue(value) {
515
561
  if (typeof value !== "string") {
@@ -534,8 +580,9 @@ function pickPrimaryTopic(candidates) {
534
580
  })[0];
535
581
  }
536
582
  async function findTopicsByScopeAlias(ctx, scopeId) {
583
+ const query = ctx.db.query("topics");
537
584
  try {
538
- return await ctx.db.query("topics").withIndex(
585
+ return await query.withIndex(
539
586
  "by_graph_scope_project",
540
587
  (q) => q.eq(LEGACY_SCOPE_FIELD2, scopeId)
541
588
  ).collect();
@@ -547,7 +594,7 @@ async function findTopicsByScopeAlias(ctx, scopeId) {
547
594
  scopeId
548
595
  }
549
596
  );
550
- const topics = await ctx.db.query("topics").collect();
597
+ const topics = await query.collect();
551
598
  return topics.filter((topic) => {
552
599
  const normalizedGlobalId = normalizeScopeValue(topic.globalId);
553
600
  const mappedProjectId = asMappedProjectId(topic);
@@ -603,137 +650,115 @@ async function resolveInheritedWorkspaceScope(ctx, topic) {
603
650
  let current = topic;
604
651
  for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {
605
652
  current = await ctx.db.get(current.parentTopicId);
606
- if (!current) break;
653
+ if (!current) {
654
+ break;
655
+ }
607
656
  if (!tenantId) {
608
657
  tenantId = normalizeScopeValue(current.tenantId);
609
658
  }
610
659
  if (!workspaceId) {
611
660
  workspaceId = normalizeScopeValue(current.workspaceId);
612
661
  }
613
- if (tenantId && workspaceId) break;
662
+ if (tenantId && workspaceId) {
663
+ break;
664
+ }
614
665
  }
615
666
  return { tenantId, workspaceId };
616
667
  }
617
668
  async function resolveTopicProjectScope(ctx, args) {
618
669
  if (args.topicId) {
619
- let topic = null;
620
- try {
621
- topic = await ctx.db.get(
622
- args.topicId
623
- );
624
- } catch (error) {
625
- debugGraphPrimitiveFallback(
626
- "[topicScope] Failed to load topic by direct id",
627
- {
628
- error,
629
- topicId: args.topicId
630
- }
631
- );
632
- }
633
- if (!topic) {
634
- topic = await tryResolveHostTopicById(ctx, String(args.topicId));
635
- }
636
- if (!topic) {
637
- topic = pickPrimaryTopic(
638
- await findTopicsByScopeAlias(ctx, String(args.topicId))
639
- ) ?? null;
640
- }
641
- if (!topic) {
642
- const nodeScope = await resolveTopicNodeScopeOrNull(
643
- ctx,
644
- String(args.topicId)
645
- );
646
- if (nodeScope) {
647
- return nodeScope;
648
- }
649
- throw new Error(`Topic not found: ${String(args.topicId)}`);
650
- }
651
- const inherited = await resolveInheritedWorkspaceScope(ctx, topic);
652
- const mapped = asMappedProjectId(topic);
653
- if (mapped) {
654
- return {
655
- topicId: topic._id,
656
- projectId: mapped,
657
- tenantId: inherited.tenantId,
658
- workspaceId: inherited.workspaceId,
659
- source: "topic"
660
- };
661
- }
662
- return {
663
- topicId: topic._id,
664
- tenantId: inherited.tenantId,
665
- workspaceId: inherited.workspaceId,
666
- source: "topic"
667
- };
670
+ return await resolveScopeFromTopicId(ctx, args.topicId);
668
671
  }
669
672
  if (args.projectId) {
670
- let directTopic = null;
671
- try {
672
- directTopic = await ctx.db.get(
673
- args.projectId
674
- );
675
- } catch (error) {
676
- debugGraphPrimitiveFallback(
677
- "[topicScope] Failed to load direct project topic",
678
- {
679
- error,
680
- projectId: args.projectId
681
- }
682
- );
683
- }
684
- if (directTopic) {
685
- const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);
686
- const mapped = asMappedProjectId(directTopic);
687
- return {
688
- topicId: directTopic._id,
689
- projectId: mapped ?? args.projectId,
690
- tenantId: inherited.tenantId,
691
- workspaceId: inherited.workspaceId,
692
- source: "topic_inferred"
693
- };
694
- }
695
- directTopic = await tryResolveHostTopicByLegacyScope(ctx, args.projectId);
696
- if (directTopic) {
697
- const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);
698
- const mapped = asMappedProjectId(directTopic);
699
- return {
700
- topicId: directTopic._id,
701
- projectId: mapped ?? args.projectId,
702
- tenantId: inherited.tenantId,
703
- workspaceId: inherited.workspaceId,
704
- source: "topic_inferred"
705
- };
706
- }
707
- const topics = await findTopicsByScopeAlias(ctx, args.projectId);
708
- const primary = pickPrimaryTopic(topics);
709
- if (primary) {
710
- const inherited = await resolveInheritedWorkspaceScope(ctx, primary);
711
- return {
712
- topicId: primary._id,
713
- projectId: args.projectId,
714
- tenantId: inherited.tenantId,
715
- workspaceId: inherited.workspaceId,
716
- source: "project_mapped_topic"
717
- };
718
- }
719
- const nodeScope = await resolveTopicNodeScopeOrNull(
720
- ctx,
721
- String(args.projectId)
722
- );
723
- if (nodeScope) {
724
- return {
725
- ...nodeScope,
726
- projectId: nodeScope.projectId ?? String(args.projectId)
727
- };
728
- }
729
- throw new Error(
730
- `Legacy project scope ${String(args.projectId)} has no mapped topic.`
731
- );
673
+ return await resolveScopeFromLegacyProjectId(ctx, args.projectId);
732
674
  }
733
675
  throw new Error(
734
676
  "Missing scope: provide topicId (preferred) or legacy projectId alias."
735
677
  );
736
678
  }
679
+ async function resolveScopeFromTopicId(ctx, topicId) {
680
+ const topic = await resolveTopicDocFromTopicId(ctx, topicId);
681
+ if (topic) {
682
+ return await buildTopicScope(ctx, topic, "topic");
683
+ }
684
+ const nodeScope = await resolveTopicNodeScopeOrNull(ctx, String(topicId));
685
+ if (nodeScope) {
686
+ return nodeScope;
687
+ }
688
+ throw new Error(`Topic not found: ${String(topicId)}`);
689
+ }
690
+ async function resolveTopicDocFromTopicId(ctx, topicId) {
691
+ const direct = await tryReadTopicDoc(ctx, topicId, {
692
+ failureLog: "[topicScope] Failed to load topic by direct id",
693
+ idLogKey: "topicId"
694
+ });
695
+ if (direct) {
696
+ return direct;
697
+ }
698
+ const hostTopic = await tryResolveHostTopicById(ctx, String(topicId));
699
+ if (hostTopic) {
700
+ return hostTopic;
701
+ }
702
+ return pickPrimaryTopic(await findTopicsByScopeAlias(ctx, String(topicId))) ?? null;
703
+ }
704
+ async function resolveScopeFromLegacyProjectId(ctx, legacyProjectId) {
705
+ const directTopic = await resolveDirectLegacyProjectTopic(
706
+ ctx,
707
+ legacyProjectId
708
+ );
709
+ if (directTopic) {
710
+ return await buildTopicScope(ctx, directTopic, "topic_inferred", {
711
+ fallbackProjectId: legacyProjectId
712
+ });
713
+ }
714
+ const primary = pickPrimaryTopic(
715
+ await findTopicsByScopeAlias(ctx, legacyProjectId)
716
+ );
717
+ if (primary) {
718
+ return await buildTopicScope(ctx, primary, "project_mapped_topic", {
719
+ fallbackProjectId: legacyProjectId
720
+ });
721
+ }
722
+ const nodeScope = await resolveTopicNodeScopeOrNull(ctx, legacyProjectId);
723
+ if (nodeScope) {
724
+ return {
725
+ ...nodeScope,
726
+ projectId: nodeScope.projectId ?? legacyProjectId
727
+ };
728
+ }
729
+ throw new Error(
730
+ `Legacy project scope ${legacyProjectId} has no mapped topic.`
731
+ );
732
+ }
733
+ async function resolveDirectLegacyProjectTopic(ctx, legacyProjectId) {
734
+ const directTopic = await tryReadTopicDoc(ctx, legacyProjectId, {
735
+ failureLog: "[topicScope] Failed to load direct project topic",
736
+ idLogKey: "projectId"
737
+ });
738
+ return directTopic ?? tryResolveHostTopicByLegacyScope(ctx, legacyProjectId);
739
+ }
740
+ async function tryReadTopicDoc(ctx, id, log) {
741
+ try {
742
+ return await ctx.db.get(id);
743
+ } catch (error) {
744
+ debugGraphPrimitiveFallback(log.failureLog, {
745
+ error,
746
+ [log.idLogKey]: id
747
+ });
748
+ return null;
749
+ }
750
+ }
751
+ async function buildTopicScope(ctx, topic, source, options = {}) {
752
+ const inherited = await resolveInheritedWorkspaceScope(ctx, topic);
753
+ const mapped = asMappedProjectId(topic);
754
+ return {
755
+ topicId: topic._id,
756
+ ...mapped || options.fallbackProjectId ? { projectId: mapped ?? options.fallbackProjectId } : {},
757
+ tenantId: inherited.tenantId,
758
+ workspaceId: inherited.workspaceId,
759
+ source
760
+ };
761
+ }
737
762
  var optionalScopeArgs = {
738
763
  projectId: v.optional(v.string()),
739
764
  topicId: v.optional(v.string())
@@ -768,8 +793,6 @@ function nodeMatchesWorkspaceReasoningScope(node, scope) {
768
793
  }
769
794
  return scopeWorkspaceId === nodeWorkspaceId;
770
795
  }
771
-
772
- // src/epistemicBeliefs.helpers.ts
773
796
  var insightIdUnion = v.id("epistemicNodes");
774
797
  var DEFAULT_PROJECT_BELIEF_LIMIT = 250;
775
798
  var MAX_PROJECT_BELIEF_LIMIT = 1e3;
@@ -781,6 +804,117 @@ var DEFAULT_CONFIDENCE_POLICY = {
781
804
  function readFiniteNumber(value) {
782
805
  return typeof value === "number" && Number.isFinite(value) ? value : void 0;
783
806
  }
807
+ function isRecord(value) {
808
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
809
+ }
810
+ function readOptionalString(value) {
811
+ return typeof value === "string" && value.trim().length > 0 ? value : void 0;
812
+ }
813
+ function readStringArray2(value) {
814
+ if (!Array.isArray(value)) {
815
+ return;
816
+ }
817
+ const strings = value.filter(
818
+ (item) => typeof item === "string" && item.length > 0
819
+ );
820
+ return strings.length === value.length ? strings : void 0;
821
+ }
822
+ function readRecord(value) {
823
+ return isRecord(value) ? value : void 0;
824
+ }
825
+ function readBeliefNodeView(value) {
826
+ if (!isRecord(value)) {
827
+ return null;
828
+ }
829
+ const id = readOptionalString(value._id);
830
+ const nodeType = readOptionalString(value.nodeType);
831
+ if (!(id && nodeType === "belief")) {
832
+ return null;
833
+ }
834
+ const node = {
835
+ _id: id,
836
+ nodeType
837
+ };
838
+ const creationTime = readFiniteNumber(value._creationTime);
839
+ if (creationTime !== void 0) {
840
+ node._creationTime = creationTime;
841
+ }
842
+ const metadata = readRecord(value.metadata);
843
+ if (metadata !== void 0) {
844
+ node.metadata = metadata;
845
+ }
846
+ const opinionA = readFiniteNumber(value.opinion_a);
847
+ if (opinionA !== void 0) {
848
+ node.opinion_a = opinionA;
849
+ }
850
+ const opinionB = readFiniteNumber(value.opinion_b);
851
+ if (opinionB !== void 0) {
852
+ node.opinion_b = opinionB;
853
+ }
854
+ const opinionD = readFiniteNumber(value.opinion_d);
855
+ if (opinionD !== void 0) {
856
+ node.opinion_d = opinionD;
857
+ }
858
+ const opinionU = readFiniteNumber(value.opinion_u);
859
+ if (opinionU !== void 0) {
860
+ node.opinion_u = opinionU;
861
+ }
862
+ const tupleContradicted = typeof value.tupleContradicted === "boolean" ? value.tupleContradicted : void 0;
863
+ if (tupleContradicted !== void 0) {
864
+ node.tupleContradicted = tupleContradicted;
865
+ }
866
+ const stringFields = {
867
+ anonymizationClass: value.anonymizationClass,
868
+ audienceLabel: value.audienceLabel,
869
+ canonicalText: value.canonicalText,
870
+ createdBy: value.createdBy,
871
+ epistemicLayer: value.epistemicLayer,
872
+ exportClass: value.exportClass,
873
+ globalId: value.globalId,
874
+ projectId: value.projectId,
875
+ publicationStatus: value.publicationStatus,
876
+ sensitivityTier: value.sensitivityTier,
877
+ status: value.status,
878
+ tenantId: value.tenantId,
879
+ topicId: value.topicId,
880
+ userId: value.userId,
881
+ workspaceId: value.workspaceId
882
+ };
883
+ for (const [field, fieldValue] of Object.entries(stringFields)) {
884
+ const normalized = readOptionalString(fieldValue);
885
+ if (normalized !== void 0) {
886
+ node[field] = normalized;
887
+ }
888
+ }
889
+ const createdAt = readFiniteNumber(value.createdAt);
890
+ if (createdAt !== void 0) {
891
+ node.createdAt = createdAt;
892
+ }
893
+ const updatedAt = readFiniteNumber(value.updatedAt);
894
+ if (updatedAt !== void 0) {
895
+ node.updatedAt = updatedAt;
896
+ }
897
+ if (value.beliefStatus !== void 0) {
898
+ node.beliefStatus = value.beliefStatus;
899
+ }
900
+ if (value.confidence !== void 0) {
901
+ node.confidence = value.confidence;
902
+ }
903
+ if (value.predictionMeta !== void 0) {
904
+ node.predictionMeta = value.predictionMeta;
905
+ }
906
+ const policyTags = readStringArray2(value.policyTags);
907
+ if (policyTags !== void 0) {
908
+ node.policyTags = policyTags;
909
+ }
910
+ return node;
911
+ }
912
+ function readBeliefNodeViews(values) {
913
+ return values.flatMap((value) => {
914
+ const node = readBeliefNodeView(value);
915
+ return node ? [node] : [];
916
+ });
917
+ }
784
918
  function clamp01(value) {
785
919
  return Math.max(0, Math.min(1, value));
786
920
  }
@@ -942,7 +1076,7 @@ function normalizePillar(pillar) {
942
1076
  async function markBeliefGraphDirty(ctx, scope) {
943
1077
  const projectId = typeof scope.projectId === "string" && scope.projectId.trim().length > 0 ? scope.projectId : void 0;
944
1078
  const topicId = typeof scope.topicId === "string" && scope.topicId.trim().length > 0 ? scope.topicId : void 0;
945
- if (!projectId && !topicId) {
1079
+ if (!(projectId || topicId)) {
946
1080
  return;
947
1081
  }
948
1082
  if (projectId) {
@@ -959,16 +1093,22 @@ async function markBeliefGraphDirty(ctx, scope) {
959
1093
  { topicId }
960
1094
  );
961
1095
  }
1096
+ const activityScopeId = topicId ?? projectId;
1097
+ if (!activityScopeId) {
1098
+ throw new Error(
1099
+ "Expected belief graph dirty scope to include a topic or project id."
1100
+ );
1101
+ }
962
1102
  await resolveGraphPrimitivesAppResolvers().patchProject(
963
1103
  ctx,
964
- topicId ?? projectId,
1104
+ activityScopeId,
965
1105
  {
966
1106
  lastActivityAt: Date.now()
967
1107
  }
968
1108
  );
969
1109
  }
970
1110
  async function resolveBeliefScopeOrNull(ctx, args) {
971
- if (!args.projectId && !args.topicId) {
1111
+ if (!(args.projectId || args.topicId)) {
972
1112
  return null;
973
1113
  }
974
1114
  try {
@@ -993,14 +1133,17 @@ async function getBeliefNodesForScope(ctx, scope, args) {
993
1133
  "by_topic_type",
994
1134
  (q) => q.eq("topicId", scope.topicId).eq("nodeType", "belief")
995
1135
  );
996
- const nodes = typeof args?.scanLimit === "number" ? await baseQuery.order("desc").take(args.scanLimit) : await baseQuery.collect();
1136
+ const rows = typeof args?.scanLimit === "number" ? await baseQuery.order("desc").take(args.scanLimit) : await baseQuery.collect();
1137
+ const nodes = readBeliefNodeViews(rows);
997
1138
  const scopedNodes = nodes.filter(
998
1139
  (node) => nodeMatchesWorkspaceReasoningScope(node, scope)
999
1140
  );
1000
1141
  if (!args?.status) {
1001
1142
  return scopedNodes;
1002
1143
  }
1003
- return scopedNodes.filter((node) => node.status === args.status);
1144
+ return scopedNodes.filter(
1145
+ (node) => node.status === args.status
1146
+ );
1004
1147
  }
1005
1148
  function createBeliefAudienceResolver(registryRows) {
1006
1149
  const audienceClassByKey = new Map(
@@ -1020,9 +1163,7 @@ function createBeliefAudienceResolver(registryRows) {
1020
1163
  function flattenBeliefNode(node) {
1021
1164
  const meta = node.metadata || {};
1022
1165
  const worktreeId = resolveBeliefWorktreeId(meta);
1023
- const tupleContradicted = readTupleContradictedFlag(
1024
- node.tupleContradicted
1025
- ) ?? readTupleContradictedFlag(meta.tupleContradicted) ?? false;
1166
+ const tupleContradicted = readTupleContradictedFlag(node.tupleContradicted) ?? readTupleContradictedFlag(meta.tupleContradicted) ?? false;
1026
1167
  return {
1027
1168
  _id: node._id,
1028
1169
  _epistemicNodeId: node._id,
@@ -1068,7 +1209,10 @@ function resolveBeliefStatus(node, metadata) {
1068
1209
  });
1069
1210
  }
1070
1211
  async function hasCompletedWorktreeForBelief(ctx, beliefNodeId) {
1071
- const clusterMembership = await ctx.db.query("worktreeBeliefCluster").withIndex("by_belief", (q) => q.eq("beliefId", beliefNodeId)).collect();
1212
+ const clusterMembership = await ctx.db.query("worktreeBeliefCluster").withIndex(
1213
+ "by_belief",
1214
+ (q) => q.eq("beliefId", beliefNodeId)
1215
+ ).collect();
1072
1216
  for (const membership of clusterMembership) {
1073
1217
  const worktree = await ctx.db.get(membership.worktreeId);
1074
1218
  if (worktree?.status === "completed" || worktree?.status === "merged") {
@@ -1079,7 +1223,10 @@ async function hasCompletedWorktreeForBelief(ctx, beliefNodeId) {
1079
1223
  }
1080
1224
  async function getActiveConfidencePolicy(ctx) {
1081
1225
  try {
1082
- const activeConfig = await ctx.db.query("logicSprintScoring").withIndex("by_active", (q) => q.eq("isActive", true)).first();
1226
+ const activeConfig = await ctx.db.query("logicSprintScoring").withIndex(
1227
+ "by_active",
1228
+ (q) => q.eq("isActive", true)
1229
+ ).first();
1083
1230
  return {
1084
1231
  scoringMode: activeConfig?.confidencePolicy === "always" ? "always" : DEFAULT_CONFIDENCE_POLICY.scoringMode,
1085
1232
  tupleContradiction: normalizeTupleContradictionPolicy(
@@ -1112,6 +1259,6 @@ async function requireAuthenticatedUserId(ctx) {
1112
1259
  return userId;
1113
1260
  }
1114
1261
 
1115
- export { MAX_PROJECT_BELIEF_LIMIT, assertBaseRateInRange, buildBeliefConfidenceRow, buildBeliefEvidenceNotFoundResult, buildBeliefStatusSuccessResult, clampBeliefLimit, createBeliefAudienceResolver, deriveSyntheticBackfillOpinion, deriveTupleContradictionSeverity, flattenBeliefNode, formatTupleContradictionDescription, generateContentHash, getActiveConfidencePolicy, getBeliefNodesForScope, hasCompletedWorktreeForBelief, insightIdUnion, markBeliefGraphDirty, normalizePillar, optionalBeliefScopeArgs, readBeliefOpinionSnapshot, readFiniteNumber, readTupleContradictedFlag, requireAuthenticatedUserId, resolveBeliefScopeOrNull, resolveBeliefStatus, resolveBeliefWorktreeId };
1262
+ export { MAX_PROJECT_BELIEF_LIMIT, assertBaseRateInRange, buildBeliefConfidenceRow, buildBeliefEvidenceNotFoundResult, buildBeliefStatusSuccessResult, clampBeliefLimit, createBeliefAudienceResolver, deriveSyntheticBackfillOpinion, deriveTupleContradictionSeverity, flattenBeliefNode, formatTupleContradictionDescription, generateContentHash, getActiveConfidencePolicy, getBeliefNodesForScope, hasCompletedWorktreeForBelief, insightIdUnion, markBeliefGraphDirty, normalizePillar, optionalBeliefScopeArgs, readBeliefNodeView, readBeliefOpinionSnapshot, readFiniteNumber, readTupleContradictedFlag, requireAuthenticatedUserId, resolveBeliefScopeOrNull, resolveBeliefStatus, resolveBeliefWorktreeId };
1116
1263
  //# sourceMappingURL=epistemicBeliefs.helpers.js.map
1117
1264
  //# sourceMappingURL=epistemicBeliefs.helpers.js.map