@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 +1 @@
1
- {"version":3,"sources":["../src/convex.ts","../src/debug.ts","../src/topicProjectOverlay.ts","../src/resolvers.ts","../src/topicScope.ts","../src/epistemicEvidenceHelpers.ts","../src/workspaceIsolation.ts","../src/epistemicEvidenceQueries.ts"],"names":["isMissingLucernChildComponentError","getErrorMessage","LEGACY_SCOPE_FIELD","normalizeScopeValue","v"],"mappings":"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","file":"epistemicEvidenceQueries.js","sourcesContent":["import {\n actionGeneric,\n anyApi,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\n// TODO(FR.11-structural): `api`/`internal`/`components` are `anyApi as any`\n// because this module source tree is bundled into the kernel host at deploy time\n// and has NO top-level Convex `_generated/` directory to import a typed surface\n// from. Every `api.*` / `internal.*` / string-literal cross-component ref in this\n// module (topicScope.ts, topicProjectOverlay.ts, questionEvidenceLinks.ts,\n// beliefEvidenceLinks*.ts, epistemicQuestions.helpers.ts) inherits `any` from\n// here. The fix is structural — generate a per-module typed surface or a shared\n// typed function-reference manifest (template: the typed `components.controlPlane`\n// in modules/control-plane/src/component/convex.ts and the\n// `KERNEL_API_REF_MANIFEST` pattern in packages/server-core/src/kernelApi.ts) —\n// owned by the FR.11 closing/synthesis pass, not a mechanical swap.\nexport const api = anyApi as any;\nexport const components = componentsGeneric() as any;\nexport const internal = anyApi as any;\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> = any;\nexport type DataModel = any;\ntype IndexRangeBuilder = {\n field(fieldName: string): string;\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n gt(fieldName: string, value: unknown): IndexRangeBuilder;\n gte(fieldName: string, value: unknown): IndexRangeBuilder;\n lt(fieldName: string, value: unknown): IndexRangeBuilder;\n lte(fieldName: string, value: unknown): IndexRangeBuilder;\n};\ntype FilterBuilder = {\n eq(left: unknown, right: unknown): unknown;\n neq(left: unknown, right: unknown): unknown;\n gt(left: unknown, right: unknown): unknown;\n gte(left: unknown, right: unknown): unknown;\n lt(left: unknown, right: unknown): unknown;\n lte(left: unknown, right: unknown): unknown;\n and(...clauses: unknown[]): unknown;\n or(...clauses: unknown[]): unknown;\n field(fieldName: string): unknown;\n};\ntype QueryInitializer<TableName extends TableNames> = {\n withIndex(\n indexName: string,\n range?: (q: any) => unknown\n ): QueryInitializer<TableName>;\n filter(predicate: (q: any) => unknown): QueryInitializer<TableName>;\n order(direction: \"asc\" | \"desc\"): QueryInitializer<TableName>;\n collect(): Promise<Doc<TableName>[]>;\n take(limit: number): Promise<Doc<TableName>[]>;\n first(): Promise<Doc<TableName> | null>;\n unique(): Promise<Doc<TableName> | null>;\n};\nexport type DatabaseReader = {\n get<TableName extends TableNames>(\n id: Id<TableName>\n ): Promise<Doc<TableName> | null>;\n query<TableName extends TableNames>(\n tableName: TableName\n ): QueryInitializer<TableName>;\n normalizeId?<TableName extends TableNames>(\n tableName: TableName,\n id: string\n ): Id<TableName> | null;\n};\nexport type DatabaseWriter = DatabaseReader & {\n insert<TableName extends TableNames>(\n tableName: TableName,\n value: Record<string, unknown>\n ): Promise<Id<TableName>>;\n patch<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n replace<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n delete<TableName extends TableNames>(id: Id<TableName>): Promise<void>;\n};\ntype Scheduler = {\n runAfter(delayMs: number, functionReference: unknown, args?: unknown): Promise<void>;\n};\ntype AuthReader = {\n getUserIdentity(): Promise<unknown>;\n};\ntype RuntimeInvoker = {\n runQuery(functionReference: unknown, args?: unknown): Promise<any>;\n runMutation(functionReference: unknown, args?: unknown): Promise<any>;\n runAction(functionReference: unknown, args?: unknown): Promise<any>;\n};\nexport type QueryCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseReader;\n scheduler: Scheduler;\n};\nexport type MutationCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseWriter;\n scheduler: Scheduler;\n};\nexport type ActionCtx = RuntimeInvoker & {\n auth: AuthReader;\n scheduler: Scheduler;\n};\n\ntype ConvexFunctionBuilder<Ctx> = <\n Definition extends { handler?: (ctx: Ctx, args: any) => any },\n>(\n definition: Definition\n) => any;\n\nexport const action = actionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const httpAction =\n httpActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalAction =\n internalActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalMutation =\n internalMutationGeneric as unknown as ConvexFunctionBuilder<MutationCtx>;\nexport const internalQuery =\n internalQueryGeneric as unknown as ConvexFunctionBuilder<QueryCtx>;\nexport const mutation =\n mutationGeneric as unknown as ConvexFunctionBuilder<MutationCtx>;\nexport const query = queryGeneric as unknown as ConvexFunctionBuilder<QueryCtx>;\n","type GraphPrimitiveDebugEnvironment = {\n process?: {\n env?: Record<string, string | undefined>;\n };\n};\n\nfunction isGraphPrimitiveDebugEnabled(): boolean {\n const env = (globalThis as GraphPrimitiveDebugEnvironment).process?.env;\n return (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG === \"1\" ||\n env?.LUCERN_GRAPH_DEBUG === \"1\"\n );\n}\n\nexport function formatGraphPrimitiveError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error === null) {\n return \"null\";\n }\n if (error === undefined) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(error);\n } catch {\n return Object.prototype.toString.call(error);\n }\n}\n\nexport function debugGraphPrimitiveFallback(\n message: string,\n context?: Record<string, unknown>\n): void {\n if (!isGraphPrimitiveDebugEnabled()) {\n return;\n }\n console.debug(message, context ?? {});\n}\n","import { api } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\ntype OverlayIdMode = \"legacy\" | \"topic\";\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype LegacyProjectThesis = {\n statement: string;\n confidence: number;\n lastUpdated: number;\n};\n\ntype LegacyPillarImportance = \"critical\" | \"major\" | \"minor\" | \"not_applicable\";\n\ntype LegacyThesisPillarConfig = {\n pillarImportance?: Record<string, LegacyPillarImportance | undefined>;\n configuredAt?: number;\n configuredBy?: string;\n aiSuggestion?: {\n suggestedAt: number;\n reasoning: string;\n };\n};\n\ntype LegacyBeliefArchitecture = {\n overallMaturity: number;\n pillarScores: Array<Record<string, unknown>>;\n lastCalculated: number;\n};\n\ntype LegacyOntologyClassification = {\n valueChains: Array<Record<string, unknown>>;\n functions: Array<Record<string, unknown>>;\n overallConfidence: number;\n classifiedAt: number;\n};\n\ntype TopicDocLike = Record<string, unknown> & {\n _id: string;\n _creationTime?: number;\n globalId?: string;\n name?: string;\n description?: string;\n type?: string;\n tenantId?: string;\n workspaceId?: string;\n status?: string;\n visibility?: string;\n createdBy?: string;\n /** FR.7 creator-grant: the exact acting principal recorded as owner-principal. */\n ownerPrincipalId?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectOverlay = Record<string, unknown> & {\n _id: string;\n projectId: string;\n topicId: string;\n storageProjectId: string;\n legacyProjectId?: string;\n name: string;\n type: string;\n description?: string;\n ownerId: string;\n /** FR.7 creator-grant: principal-shaped owner; distinct from clerkId-shaped ownerId. */\n ownerPrincipalId?: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n tags: string[];\n chatCount: number;\n artifactCount: number;\n lastActivityAt: number;\n thesis?: LegacyProjectThesis;\n wedgeHypothesis?: string;\n founderArchetype?: string;\n investmentCriteria?: string[];\n sprintPhase?:\n | \"pre_sprint\"\n | \"readiness_check\"\n | \"thesis_crystallization\"\n | \"sprint_planning\"\n | \"active_sprint\"\n | \"theme_assembly\"\n | \"evolution\";\n currentSprintIndex?: number;\n thesisPillarConfig?: LegacyThesisPillarConfig;\n beliefArchitecture?: LegacyBeliefArchitecture;\n ontologyClassification?: LegacyOntologyClassification;\n _creationTime: number;\n createdAt: number;\n updatedAt: number;\n};\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readNonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction readMetadata(topic: TopicDocLike): Record<string, unknown> {\n return topic.metadata && typeof topic.metadata === \"object\"\n ? topic.metadata\n : {};\n}\n\nfunction readLegacyProjectId(\n value: Record<string, unknown> | null | undefined,\n): string | undefined {\n if (!value) {\n return;\n }\n return readNonEmptyString(value[LEGACY_SCOPE_FIELD]);\n}\n\nfunction coerceVisibility(\n value: unknown,\n): TopicProjectOverlay[\"visibility\"] | undefined {\n return value === \"private\" ||\n value === \"team\" ||\n value === \"firm\" ||\n value === \"external\" ||\n value === \"public\"\n ? value\n : undefined;\n}\n\nfunction coerceStatus(\n value: unknown,\n): TopicProjectOverlay[\"status\"] | undefined {\n return value === \"active\" || value === \"archived\" || value === \"watching\"\n ? value\n : undefined;\n}\n\nfunction mapProjectType(\n topic: TopicDocLike,\n metadata: Record<string, unknown>,\n): string {\n const explicit = readNonEmptyString(metadata.projectType);\n if (explicit) {\n return explicit;\n }\n if (topic.type === \"theme\") {\n return \"thematic\";\n }\n return readNonEmptyString(topic.type) || \"general\";\n}\n\nfunction isProjectLikeTopic(topic: TopicDocLike): boolean {\n const metadata = readMetadata(topic);\n return (\n topic.type === \"theme\" ||\n topic.type === \"thematic\" ||\n topic.type === \"deal\" ||\n topic.type === \"monitoring\" ||\n readLegacyProjectId(topic) !== undefined ||\n readNonEmptyString(metadata.projectType) !== undefined\n );\n}\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = getErrorMessage(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found',\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n return (error as { message: string }).message;\n }\n return \"unknown error\";\n}\n\nasync function resolveTopicDoc(\n ctx: any,\n scopeId: string,\n): Promise<TopicDocLike | null> {\n if (ctx?.db && typeof ctx.db.get === \"function\") {\n try {\n const directTopic = (await ctx.db.get(\n scopeId as any,\n )) as TopicDocLike | null;\n if (directTopic) {\n return directTopic;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by direct ID\",\n {\n error,\n scopeId,\n },\n );\n // Not a direct topics-table id.\n }\n }\n\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.get as any, {\n id: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by ID query\",\n {\n error,\n scopeId,\n },\n );\n // Fall through to legacy-scope lookup.\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.getByLegacyScopeId as any, {\n projectId: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by legacy scope ID\",\n { error, scopeId },\n );\n // Best-effort compat lookup only.\n }\n\n return null;\n}\n\nexport function materializeTopicProjectOverlay(\n topic: TopicDocLike,\n idMode: OverlayIdMode = \"legacy\",\n): TopicProjectOverlay {\n const metadata = readMetadata(topic);\n const topicId = String(topic._id);\n const legacyProjectId =\n readLegacyProjectId(topic) ||\n readLegacyProjectId(metadata) ||\n readNonEmptyString(metadata.legacyProjectId);\n const storageProjectId = legacyProjectId || topicId;\n const outwardId = idMode === \"topic\" ? topicId : storageProjectId;\n const visibility =\n coerceVisibility(topic.visibility) ||\n coerceVisibility(metadata.visibility) ||\n \"private\";\n const status =\n coerceStatus(topic.status) || coerceStatus(metadata.status) || \"active\";\n const createdAt =\n typeof topic.createdAt === \"number\"\n ? topic.createdAt\n : typeof topic._creationTime === \"number\"\n ? topic._creationTime\n : 0;\n const updatedAt =\n typeof topic.updatedAt === \"number\"\n ? topic.updatedAt\n : typeof metadata.updatedAt === \"number\"\n ? (metadata.updatedAt as number)\n : createdAt;\n\n return {\n ...metadata,\n _id: outwardId,\n projectId: outwardId,\n topicId,\n storageProjectId,\n legacyProjectId,\n name: readNonEmptyString(topic.name) || \"Untitled Theme\",\n type: mapProjectType(topic, metadata),\n description: readNonEmptyString(topic.description),\n ownerId:\n readNonEmptyString(metadata.ownerId) ||\n readNonEmptyString(topic.createdBy) ||\n \"system\",\n // FR.7 creator-grant: surface the principal-shaped owner field (column-first,\n // metadata fallback for legacy rows that recorded it in metadata).\n ownerPrincipalId:\n readNonEmptyString(topic.ownerPrincipalId) ||\n readNonEmptyString(metadata.ownerPrincipalId),\n // RR.1 carrier: preserve the nested metadata carrier so the kernel's\n // `checkProjectAccessDetailed` metadata-PRIMARY read\n // (`project.metadata?.ownerPrincipalId`) resolves the grant. The `...metadata`\n // spread above only flattens keys; it does not leave a nested `metadata`.\n metadata,\n sharedWith: readStringArray(metadata.sharedWith),\n visibility,\n tenantId:\n readNonEmptyString(topic.tenantId) ||\n readNonEmptyString(metadata.tenantId),\n workspaceId:\n readNonEmptyString(topic.workspaceId) ||\n readNonEmptyString(metadata.workspaceId),\n status,\n tags: readStringArray(metadata.tags),\n chatCount:\n typeof metadata.chatCount === \"number\"\n ? (metadata.chatCount as number)\n : 0,\n artifactCount:\n typeof metadata.artifactCount === \"number\"\n ? (metadata.artifactCount as number)\n : 0,\n lastActivityAt:\n typeof metadata.lastActivityAt === \"number\"\n ? (metadata.lastActivityAt as number)\n : updatedAt,\n _creationTime:\n typeof topic._creationTime === \"number\" ? topic._creationTime : createdAt,\n createdAt,\n updatedAt,\n };\n}\n\nexport async function resolveTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {},\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n if (options.projectLikeOnly !== false && !isProjectLikeTopic(topic)) {\n return null;\n }\n return materializeTopicProjectOverlay(topic, options.idMode);\n}\n\nexport async function listTopicProjectOverlays(\n ctx: any,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {},\n): Promise<TopicProjectOverlay[]> {\n let allTopics: TopicDocLike[] = [];\n\n if (ctx?.db?.query && typeof ctx.db.query === \"function\") {\n try {\n allTopics = (await ctx.db.query(\"topics\").collect()) as TopicDocLike[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to read topics table; falling back to API\",\n { error },\n );\n allTopics = [];\n }\n }\n\n if (allTopics.length === 0 && typeof ctx.runQuery === \"function\") {\n allTopics =\n (((await ctx.runQuery(api.topics.list as any, {})) ??\n []) as TopicDocLike[]) || [];\n }\n\n return allTopics\n .filter(\n (topic) => options.projectLikeOnly === false || isProjectLikeTopic(topic),\n )\n .map((topic) => materializeTopicProjectOverlay(topic, options.idMode));\n}\n\nexport async function patchTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n value: Record<string, unknown>,\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n\n const nextMetadata = { ...readMetadata(topic) };\n const patch: Record<string, unknown> = {};\n const topicUpdateArgs: Record<string, unknown> = {\n id: String(topic._id),\n };\n\n for (const [key, rawValue] of Object.entries(value)) {\n switch (key) {\n case \"_id\":\n case \"projectId\":\n case \"topicId\":\n case \"legacyProjectId\":\n case \"storageProjectId\":\n break;\n case \"name\":\n case \"description\":\n patch[key] = rawValue;\n topicUpdateArgs[key] = rawValue;\n break;\n case \"tenantId\":\n case \"workspaceId\":\n case \"ownerId\":\n throw new Error(\n `patchTopicProjectOverlay cannot mutate ${key} via component-owned topics`,\n );\n case \"status\": {\n const status = coerceStatus(rawValue);\n if (status) {\n patch.status = status;\n topicUpdateArgs.status = status;\n }\n break;\n }\n case \"visibility\": {\n const visibility = coerceVisibility(rawValue);\n if (visibility) {\n patch.visibility = visibility;\n topicUpdateArgs.visibility = visibility;\n }\n break;\n }\n case \"type\": {\n const projectType = readNonEmptyString(rawValue);\n if (projectType) {\n nextMetadata.projectType = projectType;\n } else {\n delete nextMetadata.projectType;\n }\n break;\n }\n case \"updatedAt\":\n case \"createdAt\":\n break;\n default:\n if (rawValue === undefined) {\n delete nextMetadata[key];\n } else {\n nextMetadata[key] = rawValue;\n }\n }\n }\n\n patch.updatedAt = Date.now();\n patch.metadata = nextMetadata;\n topicUpdateArgs.metadata = nextMetadata;\n\n if (typeof ctx.runMutation === \"function\") {\n try {\n await ctx.runMutation(api.topics.update as any, topicUpdateArgs);\n } catch (error) {\n if (\n !isMissingLucernChildComponentError(error) ||\n !ctx?.db ||\n typeof ctx.db.patch !== \"function\"\n ) {\n throw error;\n }\n await ctx.db.patch(String(topic._id) as any, patch);\n }\n } else if (ctx?.db && typeof ctx.db.patch === \"function\") {\n await ctx.db.patch(String(topic._id) as any, patch);\n } else {\n throw new Error(\n \"Cannot patch topic without component adapter (ctx.runMutation unavailable)\",\n );\n }\n\n return materializeTopicProjectOverlay({\n ...topic,\n ...patch,\n metadata: nextMetadata,\n } as TopicDocLike);\n}\n\nexport function matchesTopicProjectOverlayAccess(\n accessibleProjectIds: Set<string>,\n project: {\n topicId: string;\n legacyProjectId?: string;\n storageProjectId?: string;\n },\n): boolean {\n return (\n accessibleProjectIds.has(project.storageProjectId || project.topicId) ||\n accessibleProjectIds.has(project.topicId) ||\n (typeof project.legacyProjectId === \"string\" &&\n accessibleProjectIds.has(project.legacyProjectId))\n );\n}\n","/** Data-source resolver wiring for the graph-primitives module. */\nimport {\n listTopicProjectOverlays,\n patchTopicProjectOverlay,\n resolveTopicProjectOverlay,\n} from \"./topicProjectOverlay\";\nimport type {\n GraphPrimitivesAppResolverContext,\n GraphPrimitivesAppResolvers,\n} from \"./resolverTypes\";\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = getErrorMessage(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found',\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n return (error as { message: string }).message;\n }\n return \"unknown error\";\n}\n\nfunction isAdvisoryTopicPatch(value: Record<string, unknown>): boolean {\n const advisoryKeys = new Set([\"lastActivityAt\", \"updatedAt\"]);\n const keys = Object.keys(value);\n return keys.length > 0 && keys.every((key) => advisoryKeys.has(key));\n}\n\nasync function patchProjectWithTolerance(\n ctx: GraphPrimitivesAppResolverContext,\n projectId: string,\n value: Record<string, unknown>,\n): Promise<void> {\n try {\n await patchTopicProjectOverlay(ctx, projectId, value);\n } catch (error) {\n if (\n !isAdvisoryTopicPatch(value) ||\n !isMissingLucernChildComponentError(error)\n ) {\n throw error;\n }\n\n console.warn(\n \"[lucern graph-primitives] Non-fatal advisory topic patch failure\",\n {\n projectId,\n keys: Object.keys(value),\n error: getErrorMessage(error),\n },\n );\n }\n}\n\nfunction defaultResolvers(): GraphPrimitivesAppResolvers {\n return {\n getProject: (ctx, projectId) =>\n resolveTopicProjectOverlay(ctx, projectId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n }),\n patchProject: (ctx, projectId, value) =>\n patchProjectWithTolerance(ctx, projectId, value),\n listTopics: (ctx) =>\n listTopicProjectOverlays(ctx, {\n idMode: \"legacy\",\n }),\n getFinalArtifact: (ctx, artifactId) => ctx.db.get(artifactId),\n };\n}\n\nlet resolverOverrides: Partial<GraphPrimitivesAppResolvers> = {};\n\nexport function configureGraphPrimitivesAppResolvers(\n overrides: Partial<GraphPrimitivesAppResolvers>,\n): void {\n resolverOverrides = {\n ...resolverOverrides,\n ...overrides,\n };\n}\n\nexport function resetGraphPrimitivesAppResolvers(): void {\n resolverOverrides = {};\n}\n\nexport function resolveGraphPrimitivesAppResolvers(\n _ctx: GraphPrimitivesAppResolverContext,\n): GraphPrimitivesAppResolvers {\n return {\n ...defaultResolvers(),\n ...resolverOverrides,\n };\n}\n","/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport { api as appApi } from \"./convex\";\nimport type { Id } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectScope = {\n topicId: Id<\"topics\">;\n projectId?: string;\n tenantId?: string;\n workspaceId?: string;\n source:\n | \"topic\"\n | \"project_mapped_topic\"\n | \"topic_inferred\"\n | \"topic_node\";\n};\n\n/**\n * RR.5 (legacy topics-table retirement) — graph-primitives mirror of the\n * kernel's epistemicNodes-first topic-scope fallback. Kept in lockstep with\n * `packages/reasoning-kernel/src/adapters/lib/topicScope.ts`\n * (`tests/unit/convex/topic-scope-fallbacks.test.ts` asserts parity).\n *\n * Resolves a topic that exists only as `epistemicNodes(nodeType=\"topic\")` —\n * the write-of-record — when no legacy `topics` row backs the ref, returning the\n * node's `topicId` self-key so scoped beliefs/evidence/questions stay reachable.\n * See the kernel module for the full silent-empty-result rationale.\n */\ntype TopicNodeScopeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n globalId?: string;\n nodeType?: string;\n topicId?: string;\n metadata?: Record<string, unknown>;\n};\n\nasync function resolveTopicNodeScopeOrNull(\n ctx: any,\n ref: string,\n): Promise<TopicProjectScope | null> {\n if (!ctx?.db || typeof ctx.db.query !== \"function\") {\n return null;\n }\n\n let node: TopicNodeScopeDoc | null = null;\n\n // 1. The ref IS the topic node's UUIDv7 globalId.\n try {\n const byGlobalId = (await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q: any) => q.eq(\"globalId\", ref))\n .first()) as TopicNodeScopeDoc | null;\n if (byGlobalId && byGlobalId.nodeType === \"topic\") {\n node = byGlobalId;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] topic-node scope lookup by globalId failed\",\n { error, ref },\n );\n }\n\n if (!node) {\n return null;\n }\n\n const scopeKey =\n normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);\n if (!scopeKey) {\n return null;\n }\n\n return {\n topicId: scopeKey as Id<\"topics\">,\n projectId: asMappedProjectId(node as unknown as TopicDoc),\n source: \"topic_node\",\n };\n}\n\ntype MaterializedTopicNodeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n};\n\nfunction asMappedProjectId(\n topic: TopicDoc | null | undefined,\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(topic[LEGACY_SCOPE_FIELD]);\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = (topic.metadata || {}) as Record<string, unknown>;\n const candidate =\n (metadata[LEGACY_SCOPE_FIELD] as string | undefined) ||\n (metadata.legacyProjectId as string | undefined) ||\n (metadata.projectId as string | undefined) ||\n (metadata.scopeProjectId as string | undefined);\n return candidate ? (candidate as string) : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(\n ctx: any,\n scopeId: string,\n): Promise<TopicDoc[]> {\n try {\n return (await ctx.db\n .query(\"topics\")\n .withIndex(\"by_graph_scope_project\", (q: any) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId),\n )\n .collect()) as TopicDoc[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve scope alias via index\",\n {\n error,\n scopeId,\n },\n );\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await ctx.db.query(\"topics\").collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: any,\n topicId: string,\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get as any, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by host query\",\n {\n error,\n topicId,\n },\n );\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: any,\n legacyScopeId: string,\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId as any, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by legacy scope\",\n {\n error,\n legacyScopeId,\n },\n );\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined,\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: any,\n topic: TopicDoc,\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) break;\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) break;\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: any,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string },\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n // Try direct lookup, fall back to the legacy mapped-project bridge\n let topic: TopicDoc | null = null;\n try {\n topic = (await ctx.db.get(\n args.topicId as Id<\"topics\">,\n )) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to load topic by direct id\",\n {\n error,\n topicId: args.topicId,\n },\n );\n // Not a valid topics table ID\n }\n if (!topic) {\n topic = await tryResolveHostTopicById(ctx, String(args.topicId));\n }\n if (!topic) {\n // Try as legacy projectId / globalId via the mapped-project bridge.\n topic =\n pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, String(args.topicId)),\n ) ?? null;\n }\n if (!topic) {\n // RR.5: no legacy topics row — resolve the canonical topic node store\n // before throwing (silent-empty-result fix).\n const nodeScope = await resolveTopicNodeScopeOrNull(\n ctx,\n String(args.topicId),\n );\n if (nodeScope) {\n return nodeScope;\n }\n throw new Error(`Topic not found: ${String(args.topicId)}`);\n }\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n if (mapped) {\n return {\n topicId: topic._id,\n projectId: mapped,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n return {\n topicId: topic._id,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n\n if (args.projectId) {\n let directTopic: TopicDoc | null = null;\n try {\n directTopic = (await ctx.db.get(\n args.projectId as Id<\"topics\">,\n )) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to load direct project topic\",\n {\n error,\n projectId: args.projectId,\n },\n );\n // Not a valid topics table ID, continue to legacy graph-scope lookup.\n }\n\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n directTopic = await tryResolveHostTopicByLegacyScope(ctx, args.projectId);\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n const topics = await findTopicsByScopeAlias(ctx, args.projectId);\n const primary = pickPrimaryTopic(topics);\n if (primary) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, primary);\n return {\n topicId: primary._id,\n projectId: args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"project_mapped_topic\",\n };\n }\n // RR.5: try the canonical topic node store before failing.\n const nodeScope = await resolveTopicNodeScopeOrNull(\n ctx,\n String(args.projectId),\n );\n if (nodeScope) {\n return {\n ...nodeScope,\n projectId: nodeScope.projectId ?? String(args.projectId),\n };\n }\n\n throw new Error(\n `Legacy project scope ${String(args.projectId)} has no mapped topic.`,\n );\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\",\n );\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","import { classFromAudienceKey, normalizeAudienceKey } from \"@lucern/access-control/audience\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport type { Doc, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal } from \"./convex\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\n\nexport type EvidenceKind =\n | \"fact\"\n | \"observation\"\n | \"claim\"\n | \"quote\"\n | \"statistic\"\n | \"signal\";\n\nexport type AudienceClass = \"internal\" | \"restricted_external\" | \"public\";\n\nexport type EvidenceScopeArgs = {\n projectId?: string | null;\n topicId?: string | null;\n};\n\nexport type EvidenceNodeDoc = Doc<\"epistemicNodes\">;\ntype TopicIndexQuery = {\n eq(field: string, value: unknown): TopicIndexQuery;\n};\n\nexport const optionalEvidenceScopeArgs = optionalScopeArgs;\n\nconst DEFAULT_EVIDENCE_PAGE_SIZE = 250;\nconst MAX_EVIDENCE_PAGE_SIZE = 1000;\nconst LEGACY_SPRINT_LINK_KEY = \"linked\" + \"SprintId\";\n\nexport function generateContentHash(text: string): string {\n const content = `evidence:${text.trim().toLowerCase().replace(/\\s+/g, \" \").slice(0, 500)}`;\n let hash = 5381;\n for (let i = 0; i < content.length; i++) {\n hash = (hash << 5) + hash + content.charCodeAt(i);\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\nexport function normalizeKind(kind?: string): EvidenceKind {\n if (!kind) {\n return \"observation\";\n }\n const validKinds: EvidenceKind[] = [\n \"fact\",\n \"observation\",\n \"claim\",\n \"quote\",\n \"statistic\",\n \"signal\",\n ];\n return (validKinds.find((k) => kind.toLowerCase() === k) ||\n \"observation\") as EvidenceKind;\n}\n\nexport function normalizeSourceType(sourceType?: string): \"proprietary\" | \"verified\" | \"ai_generated\" {\n if (sourceType === \"proprietary\" || sourceType === \"verified\") {\n return sourceType;\n }\n return \"ai_generated\";\n}\n\nexport async function markProjectGraphDirty(\n ctx: QueryCtx | MutationCtx,\n projectId: string | undefined | null,\n topicId?: string | undefined | null,\n): Promise<void> {\n const normalizedProjectId =\n typeof projectId === \"string\" && projectId.trim().length > 0\n ? projectId\n : undefined;\n const normalizedTopicId =\n typeof topicId === \"string\" && topicId.trim().length > 0\n ? topicId\n : undefined;\n\n if (!normalizedProjectId && !normalizedTopicId) {\n return;\n }\n\n if (normalizedProjectId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n {\n projectId: normalizedProjectId,\n },\n );\n }\n if (normalizedTopicId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleByTopic,\n {\n topicId: normalizedTopicId,\n },\n );\n }\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n normalizedTopicId ?? normalizedProjectId!,\n {\n lastActivityAt: Date.now(),\n },\n );\n}\n\nfunction requireScopeId(...ids: (string | undefined)[]): string {\n for (const id of ids) {\n if (typeof id === \"string\" && id.trim().length > 0) return id;\n }\n throw new Error(\n \"No scope identifier provided (topicId or projectId required)\",\n );\n}\n\nexport function clampEvidenceLimit(\n limit: number | undefined,\n fallback = DEFAULT_EVIDENCE_PAGE_SIZE,\n): number {\n if (!Number.isFinite(limit)) {\n return fallback;\n }\n return Math.max(\n 1,\n Math.min(Math.floor(limit as number), MAX_EVIDENCE_PAGE_SIZE),\n );\n}\n\nexport function dedupeEvidenceNodes(nodes: EvidenceNodeDoc[]): EvidenceNodeDoc[] {\n const seen = new Set<string>();\n const deduped: EvidenceNodeDoc[] = [];\n for (const node of nodes) {\n const id = String(node._id);\n if (seen.has(id)) {\n continue;\n }\n seen.add(id);\n deduped.push(node);\n }\n return deduped;\n}\n\nexport function evidenceMatchesScope(\n node: Pick<EvidenceNodeDoc, \"topicId\" | \"projectId\">,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n): boolean {\n return (\n (scope.topicId !== undefined && node.topicId === scope.topicId) ||\n (scope.projectId !== undefined && node.projectId === scope.projectId)\n );\n}\n\nexport function resolveEvidenceLinkedWorktreeId(\n metadata: Record<string, unknown> | undefined,\n): string | undefined {\n const worktreeId = metadata?.linkedWorktreeId;\n if (typeof worktreeId === \"string\" && worktreeId.trim().length > 0) {\n return worktreeId;\n }\n const sprintId = metadata?.[LEGACY_SPRINT_LINK_KEY];\n return typeof sprintId === \"string\" && sprintId.trim().length > 0\n ? sprintId\n : undefined;\n}\n\nexport async function resolveEvidenceScopeOrNull(\n ctx: QueryCtx | MutationCtx,\n args: EvidenceScopeArgs,\n) {\n if (!args.projectId && !args.topicId) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n projectId: args.projectId ?? undefined,\n topicId: args.topicId ?? undefined,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicEvidence] Failed to resolve evidence scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n },\n );\n return null;\n }\n}\n\nexport async function getEvidenceNodesForScope(\n ctx: QueryCtx,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n args?: { scanLimit?: number },\n): Promise<EvidenceNodeDoc[]> {\n const scanLimit =\n typeof args?.scanLimit === \"number\" ? args.scanLimit : undefined;\n const topicNodes = await (scanLimit\n ? ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: TopicIndexQuery) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"evidence\"),\n )\n .order(\"desc\")\n .take(scanLimit)\n : ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: TopicIndexQuery) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"evidence\"),\n )\n .order(\"desc\")\n .collect());\n\n return dedupeEvidenceNodes(topicNodes).filter((node) =>\n evidenceMatchesScope(node, scope),\n );\n}\n\ntype AudienceRow = {\n audienceKey?: string | null;\n audienceClass: AudienceClass;\n};\n\nexport function createEvidenceAudienceResolver(registryRows: AudienceRow[]) {\n const audienceClassByKey = new Map<string, AudienceClass>(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ]),\n );\n\n return (\n audienceKey: string | undefined | null,\n fallback: AudienceClass,\n ): AudienceClass => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return (\n audienceClassByKey.get(key) ??\n (classFromAudienceKey(key, fallback) as AudienceClass)\n );\n };\n}\n\nexport function flattenEvidenceNode(n: EvidenceNodeDoc) {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n const linkedWorktreeId = resolveEvidenceLinkedWorktreeId(meta);\n return {\n ...n,\n text: n.canonicalText || \"\",\n title: n.title || \"\",\n kind: (meta.kind as string) || \"observation\",\n tags: (meta.tags as string[]) || [],\n sourceQuestionId: (meta.sourceQuestionId as string) || undefined,\n linkedBeliefId:\n (meta.linkedBeliefNodeId as string) ||\n (meta.linkedBeliefId as string) ||\n undefined,\n linkedWorktreeId,\n [LEGACY_SPRINT_LINK_KEY]:\n (meta[LEGACY_SPRINT_LINK_KEY] as string) || undefined,\n sprintIndex: (meta.sprintIndex as number) || undefined,\n externalSourceUrl: (meta.sourceUrl as string) || undefined,\n externalSourceType: (meta.externalSourceType as string) || undefined,\n };\n}\n\nexport function formatEvidenceNode(n: {\n _id: string;\n projectId: string;\n topicId?: string;\n canonicalText: string;\n sourceType: string;\n status: string;\n metadata?: unknown;\n createdBy: string;\n createdAt: number;\n updatedAt: number;\n}) {\n const metadata = (n.metadata || {}) as Record<string, unknown>;\n const linkedWorktreeId = resolveEvidenceLinkedWorktreeId(metadata);\n return {\n _id: n._id,\n _epistemicNodeId: n._id,\n _creationTime: n.createdAt,\n projectId: n.projectId,\n topicId: n.topicId,\n text: n.canonicalText,\n kind: metadata.kind || \"observation\",\n tags: (metadata.tags as string[]) || [],\n sourceType: n.sourceType,\n externalSourceType: metadata.externalSourceType,\n externalSourceUrl: metadata.sourceUrl,\n sourceArtifactId: metadata.sourceArtifactId,\n sourceQuestionId: metadata.sourceQuestionId,\n linkedWorktreeId,\n [LEGACY_SPRINT_LINK_KEY]:\n (metadata[LEGACY_SPRINT_LINK_KEY] as string) || undefined,\n sourceAnchor: metadata.sourceAnchor,\n aiProvider: metadata.aiProvider,\n verificationStatus: metadata.verificationStatus,\n status: n.status,\n createdBy: n.createdBy,\n createdAt: n.createdAt,\n updatedAt: n.updatedAt,\n };\n}\n","import {\n getLayerForNodeType,\n isNodeType,\n} from \"@lucern/contracts/schema-helpers/spine/tables/epistemicNodes\";\nimport {\n resolveTopicProjectScope,\n type TopicProjectScope,\n} from \"./topicScope\";\n\ntype StructuredInvariantError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype ScopeLike = {\n tenantId?: unknown;\n workspaceId?: unknown;\n epistemicLayer?: unknown;\n nodeType?: unknown;\n topicId?: unknown;\n projectId?: unknown;\n publicationStatus?: unknown;\n};\n\nexport type RuntimePackMutationContext = {\n toolName?: string;\n packKey?: string;\n packInstallScope?: \"tenant\" | \"workspace\";\n};\n\nexport function normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction throwWorkspaceIsolationError(args: {\n message: string;\n invariantCode: string;\n suggestion: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredInvariantError;\n error.status = 409;\n error.code = \"INVARIANT_VIOLATION\";\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nexport function assertWorkspaceScopedEpistemicNodeScope(args: {\n scope: TopicProjectScope;\n nodeType: string;\n mutationName: string;\n}): void {\n const layer = isNodeType(args.nodeType)\n ? getLayerForNodeType(args.nodeType)\n : undefined;\n if (layer === \"ontological\") {\n return;\n }\n\n const workspaceId = normalizeScopeValue(args.scope.workspaceId);\n if (workspaceId) {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n \"Workspace-scoped reasoning isolation requires workspaceId on non-ontological node creation.\",\n invariantCode: \"workspace.scope_required_for_epistemic_nodes\",\n suggestion:\n \"Resolve the topic/project scope through a workspace-bound topic before creating epistemic nodes.\",\n details: {\n mutationName: args.mutationName,\n nodeType: args.nodeType,\n topicId: args.scope.topicId,\n projectId: args.scope.projectId,\n },\n });\n}\n\nexport function nodeMatchesWorkspaceReasoningScope(\n node: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!node) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const nodeTenantId = normalizeScopeValue(node.tenantId);\n const nodeWorkspaceId = normalizeScopeValue(node.workspaceId);\n const epistemicLayer =\n typeof node.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n\n if (\n scopeTenantId &&\n nodeTenantId &&\n scopeTenantId !== nodeTenantId\n ) {\n return false;\n }\n\n // Ontological entities are tenant-global (no workspace required)\n if (epistemicLayer === \"ontological\" && nodeWorkspaceId === undefined) {\n return true;\n }\n\n // Published nodes are visible at tenant scope — the microservice API surface.\n // The node stays in its workspace, but tenant-scope queries can see it.\n if (!scopeWorkspaceId && node.publicationStatus === \"published\") {\n return true;\n }\n\n if (!scopeWorkspaceId) {\n return nodeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === nodeWorkspaceId;\n}\n\nexport function edgeMatchesWorkspaceReasoningScope(\n edge: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!edge) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const edgeTenantId = normalizeScopeValue(edge.tenantId);\n const edgeWorkspaceId = normalizeScopeValue(edge.workspaceId);\n\n if (\n scopeTenantId &&\n edgeTenantId &&\n scopeTenantId !== edgeTenantId\n ) {\n return false;\n }\n\n if (!scopeWorkspaceId) {\n return edgeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === edgeWorkspaceId;\n}\n\nexport async function resolveNodeScopeForWorkspaceIsolation(\n ctx: any,\n node: ScopeLike | null | undefined\n): Promise<{\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n nodeType?: string;\n}> {\n const epistemicLayer =\n typeof node?.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n const resolved = {\n tenantId: normalizeScopeValue(node?.tenantId),\n workspaceId: normalizeScopeValue(node?.workspaceId),\n epistemicLayer,\n nodeType: typeof node?.nodeType === \"string\" ? node.nodeType : undefined,\n };\n\n if (!node) {\n return resolved;\n }\n\n if (resolved.epistemicLayer === \"ontological\") {\n return resolved;\n }\n\n if (resolved.tenantId || resolved.workspaceId) {\n return resolved;\n }\n\n if (node.topicId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n topicId: node.topicId as any,\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n if (node.projectId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n projectId: String(node.projectId),\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n return resolved;\n}\n\nexport function resolveRuntimePackMutationContext(args: {\n runtimeToolName?: string;\n runtimePackKey?: string;\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n}): RuntimePackMutationContext | undefined {\n if (\n !args.runtimeToolName &&\n !args.runtimePackKey &&\n !args.runtimePackInstallScope\n ) {\n return;\n }\n\n return {\n toolName: args.runtimeToolName,\n packKey: args.runtimePackKey,\n packInstallScope: args.runtimePackInstallScope,\n };\n}\n\nexport function assertTenantPackWorkspaceMutationAllowed(args: {\n runtime?: RuntimePackMutationContext;\n target: ScopeLike;\n mutationName: string;\n}): void {\n if (\n !args.runtime?.packKey ||\n args.runtime.packInstallScope !== \"tenant\"\n ) {\n return;\n }\n\n const targetWorkspaceId = normalizeScopeValue(args.target.workspaceId);\n const targetLayer =\n typeof args.target.epistemicLayer === \"string\"\n ? args.target.epistemicLayer\n : undefined;\n\n if (!targetWorkspaceId || targetLayer === \"ontological\") {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n `Tenant-scoped pack \"${args.runtime.packKey}\" cannot mutate workspace-scoped reasoning state.`,\n invariantCode: \"workspace.tenant_pack_reasoning_write_forbidden\",\n suggestion:\n \"Use a workspace-scoped pack for workspace-local graph mutations, or route the change through tenant-global canonical entity flows.\",\n details: {\n mutationName: args.mutationName,\n toolName: args.runtime.toolName,\n packKey: args.runtime.packKey,\n targetWorkspaceId,\n targetNodeType: args.target.nodeType,\n targetLayer,\n },\n });\n}\n","import { v } from \"convex/values\";\nimport { canAudienceClassAccess } from \"@lucern/access-control/audience\";\nimport { checkScopeAccess } from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport type { Id } from \"./convex\";\nimport { query, internalQuery } from \"./convex\";\nimport { optionalEvidenceScopeArgs } from \"./epistemicEvidenceHelpers\";\nimport {\n clampEvidenceLimit,\n createEvidenceAudienceResolver,\n dedupeEvidenceNodes,\n evidenceMatchesScope,\n flattenEvidenceNode,\n formatEvidenceNode,\n getEvidenceNodesForScope,\n resolveEvidenceScopeOrNull,\n} from \"./epistemicEvidenceHelpers\";\nimport { listAudienceRegistryRows } from \"@lucern/access-control/audienceRegistry\";\nimport { nodeMatchesWorkspaceReasoningScope } from \"./workspaceIsolation\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport { resolveTopicProjectScope } from \"./topicScope\";\n\ntype IndexQuery = {\n eq(field: string, value: unknown): IndexQuery;\n};\n\nexport const getById = query({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n insightId: v.optional(v.string()),\n evidenceId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const id = args.nodeId ?? args.insightId ?? args.evidenceId;\n if (!id) {\n return null;\n }\n const node = await ctx.db.get(id as Id<\"epistemicNodes\">);\n if (!node || node.nodeType !== \"evidence\") {\n return null;\n }\n return node;\n },\n});\n\nexport const getByProject = query({\n args: {\n ...optionalEvidenceScopeArgs,\n status: v.optional(v.string()),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId && !args.topicId) {\n return [];\n }\n\n const pageSize = clampEvidenceLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, 1000);\n let scope:\n | Awaited<ReturnType<typeof resolveTopicProjectScope>>\n | {\n tenantId: undefined;\n workspaceId: undefined;\n topicId?: undefined;\n projectId?: undefined;\n };\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicEvidence] Failed to resolve getByProject scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n },\n );\n return [];\n }\n\n if (args.userId) {\n const scopeId = scope.topicId ? String(scope.topicId) : scope.projectId;\n if (!scopeId) {\n return [];\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n }\n\n const topicNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: IndexQuery) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"evidence\"),\n )\n .order(\"desc\")\n .take(scanLimit);\n\n const scopedNodes = dedupeEvidenceNodes(topicNodes).filter((node) =>\n evidenceMatchesScope(node, scope),\n );\n\n const filteredNodes = args.status\n ? scopedNodes.filter((node) => node.status === args.status)\n : scopedNodes;\n\n return filteredNodes.map(flattenEvidenceNode).slice(0, pageSize);\n },\n});\n\nexport const getByTopic = query({\n args: {\n topicId: v.string(),\n status: v.optional(v.string()),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampEvidenceLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, 1000);\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n });\n const topicNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: IndexQuery) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"evidence\"),\n )\n .order(\"desc\")\n .take(scanLimit);\n\n const scopedNodes = dedupeEvidenceNodes(topicNodes).filter((node) =>\n evidenceMatchesScope(node, scope),\n );\n\n const filteredNodes = args.status\n ? scopedNodes.filter((node) => node.status === args.status)\n : scopedNodes;\n\n return filteredNodes.map(flattenEvidenceNode).slice(0, pageSize);\n },\n});\n\nexport const getForBelief = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q: IndexQuery) =>\n q.eq(\"toNodeId\", args.beliefNodeId).eq(\"edgeType\", \"informs\"),\n )\n .collect();\n\n const evidenceNodeIds = edges.map((e) => e.fromNodeId);\n const evidenceNodes = await Promise.all(\n evidenceNodeIds.map((id) => ctx.db.get(id)),\n );\n\n return evidenceNodes\n .filter((e) => e !== null && e.nodeType === \"evidence\")\n .map((e, i) => ({\n ...e,\n relation: (edges[i]?.weight ?? 0) >= 0 ? \"supports\" : \"contradicts\",\n confidence: Math.abs(edges[i]?.weight ?? 0),\n edgeId: edges[i]?._id,\n }));\n },\n});\n\nexport const internalGetByProject = internalQuery({\n args: {\n ...optionalEvidenceScopeArgs,\n status: v.optional(v.string()),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampEvidenceLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, 1000);\n const scope = await resolveEvidenceScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const audienceMode = args.audienceMode ?? \"internal\";\n const project = await resolveGraphPrimitivesAppResolvers(ctx).getProject(\n ctx,\n scope.topicId ? String(scope.topicId) : scope.projectId!,\n );\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: project?.tenantId,\n workspaceId: project?.workspaceId,\n });\n const resolveAudienceClass = createEvidenceAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n const nodes = await getEvidenceNodesForScope(ctx, scope, { scanLimit });\n const workspaceScopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: project?.tenantId,\n workspaceId: project?.workspaceId,\n }),\n );\n\n return workspaceScopedNodes\n .filter(\n (n) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(n.audienceLabel, \"internal\"),\n ) &&\n (!args.status || n.status === args.status),\n )\n .slice(0, pageSize)\n .map((n) => {\n const metadata = (n.metadata || {}) as Record<string, unknown>;\n return {\n _id: n._id,\n _creationTime: n.createdAt,\n projectId: n.projectId,\n topicId: n.topicId,\n text: n.canonicalText,\n kind: metadata.kind || \"observation\",\n tags: metadata.tags || [],\n sourceType: n.sourceType,\n externalSourceType: metadata.externalSourceType,\n sourceUrl: metadata.sourceUrl,\n status: n.status,\n createdBy: n.createdBy,\n createdAt: n.createdAt,\n updatedAt: n.updatedAt,\n audienceLabel: n.audienceLabel,\n policyTags: n.policyTags,\n sensitivityTier: n.sensitivityTier,\n exportClass: n.exportClass,\n anonymizationClass: n.anonymizationClass,\n };\n });\n },\n});\n\nexport const internalGetByTopic = internalQuery({\n args: {\n topicId: v.string(),\n status: v.optional(v.string()),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampEvidenceLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, 1000);\n const audienceMode = args.audienceMode ?? \"internal\";\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n });\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n });\n const resolveAudienceClass = createEvidenceAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const nodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: IndexQuery) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"evidence\"),\n )\n .order(\"desc\")\n .take(scanLimit);\n const workspaceScopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n }),\n );\n\n return workspaceScopedNodes\n .filter(\n (n) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(n.audienceLabel, \"internal\"),\n ) &&\n (!args.status || n.status === args.status),\n )\n .slice(0, pageSize)\n .map((n) => {\n const metadata = (n.metadata || {}) as Record<string, unknown>;\n return {\n _id: n._id,\n _creationTime: n.createdAt,\n projectId: n.projectId,\n topicId: n.topicId,\n text: n.canonicalText,\n kind: metadata.kind || \"observation\",\n tags: metadata.tags || [],\n sourceType: n.sourceType,\n externalSourceType: metadata.externalSourceType,\n sourceUrl: metadata.sourceUrl,\n status: n.status,\n createdBy: n.createdBy,\n createdAt: n.createdAt,\n updatedAt: n.updatedAt,\n audienceLabel: n.audienceLabel,\n policyTags: n.policyTags,\n sensitivityTier: n.sensitivityTier,\n exportClass: n.exportClass,\n anonymizationClass: n.anonymizationClass,\n };\n });\n },\n});\n\nexport const getByProjectSystem = query({\n args: {\n ...optionalEvidenceScopeArgs,\n kind: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampEvidenceLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, 1000);\n const scope = await resolveEvidenceScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getEvidenceNodesForScope(ctx, scope, { scanLimit });\n\n const filtered = args.kind\n ? nodes.filter((n) => {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n return meta.kind === args.kind;\n })\n : nodes;\n\n filtered.sort((a, b) => b.createdAt - a.createdAt);\n return filtered.slice(0, pageSize).map((n) => formatEvidenceNode(n));\n },\n});\n\nexport const getEvidenceBalance = query({\n args: {\n ...optionalEvidenceScopeArgs,\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n const hasAccess = await checkScopeAccess(\n ctx,\n scope.topicId ? String(scope.topicId) : scope.projectId!,\n args.userId,\n );\n if (!hasAccess) {\n return { supporting: 0, challenging: 0, total: 0 };\n }\n\n const resolvedTopicId = scope.topicId || scope.projectId;\n const edges = resolvedTopicId\n ? await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_topic\", (q: IndexQuery) => q.eq(\"topicId\", resolvedTopicId))\n .collect()\n : [];\n\n const evidenceEdges = edges.filter(\n (e) =>\n e.edgeType === \"informs\" && e.fromLayer === \"L2\" && e.toLayer === \"L3\",\n );\n\n let supporting = 0;\n let challenging = 0;\n\n for (const edge of evidenceEdges) {\n const weight = edge.weight ?? 0;\n if (weight > 0) {\n supporting++;\n } else if (weight < 0) {\n challenging++;\n }\n }\n\n return { supporting, challenging, total: evidenceEdges.length };\n },\n});\n"]}
1
+ {"version":3,"sources":["../src/convex.ts","../src/debug.ts","../src/topicProjectOverlay.ts","../src/resolvers.ts","../src/topicScope.ts","../src/epistemicEvidenceHelpers.ts","../src/workspaceIsolation.ts","../src/epistemicEvidenceQueries.ts"],"names":["isMissingLucernChildComponentError","getErrorMessage","LEGACY_SCOPE_FIELD","query","normalizeScopeValue","v"],"mappings":"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","file":"epistemicEvidenceQueries.js","sourcesContent":["import type { Doc as AccessControlDoc } from \"@lucern/access-control/convex\";\nimport {\n type UnsafeConvexAnyApi,\n unsafeConvexAnyApi,\n} from \"@lucern/contracts/convex/unsafeAnyApi\";\nimport {\n actionGeneric,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\n// TODO(FR.11-structural): `api`/`internal`/`components` are `anyApi as any`\n// because this module source tree is bundled into the kernel host at deploy time\n// and has NO top-level Convex `_generated/` directory to import a typed surface\n// from. Every `api.*` / `internal.*` / string-literal cross-component ref in this\n// module (topicScope.ts, topicProjectOverlay.ts, questionEvidenceLinks.ts,\n// beliefEvidenceLinks*.ts, epistemicQuestions.helpers.ts) inherits `any` from\n// here. The fix is structural — generate a per-module typed surface or a shared\n// typed function-reference manifest (template: the typed `components.controlPlane`\n// in modules/control-plane/src/component/convex.ts and the\n// `KERNEL_API_REF_MANIFEST` pattern in packages/server-core/src/kernelApi.ts) —\n// owned by the FR.11 closing/synthesis pass, not a mechanical swap.\nconst unsafeApi = unsafeConvexAnyApi(\n \"graph-primitives top-level module bundle lacks a committed Convex _generated/api surface\"\n);\nexport const api = unsafeApi;\nexport const components =\n componentsGeneric() as unknown as UntypedFunctionReferenceSurface;\nexport const internal = unsafeApi;\n\ntype UntypedFunctionReferenceSurface = UnsafeConvexAnyApi;\ntype BoundaryValue = UntypedFunctionReferenceSurface[string];\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> =\n AccessControlDoc<TableName>;\nexport type DataModel = Record<TableNames, unknown>;\ninterface IndexRangeBuilder {\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n field(fieldName: string): string;\n gt(fieldName: string, value: unknown): IndexRangeBuilder;\n gte(fieldName: string, value: unknown): IndexRangeBuilder;\n lt(fieldName: string, value: unknown): IndexRangeBuilder;\n lte(fieldName: string, value: unknown): IndexRangeBuilder;\n}\ninterface FilterBuilder {\n and(...clauses: unknown[]): FilterBuilder;\n eq(left: unknown, right: unknown): FilterBuilder;\n field(fieldName: string): string;\n gt(left: unknown, right: unknown): FilterBuilder;\n gte(left: unknown, right: unknown): FilterBuilder;\n lt(left: unknown, right: unknown): FilterBuilder;\n lte(left: unknown, right: unknown): FilterBuilder;\n neq(left: unknown, right: unknown): FilterBuilder;\n or(...clauses: unknown[]): FilterBuilder;\n [operator: string]: unknown;\n}\ninterface QueryInitializer<TableName extends TableNames> {\n collect(): Promise<Doc<TableName>[]>;\n filter(predicate: (q: FilterBuilder) => unknown): QueryInitializer<TableName>;\n first(): Promise<Doc<TableName> | null>;\n order(direction: \"asc\" | \"desc\"): QueryInitializer<TableName>;\n take(limit: number): Promise<Doc<TableName>[]>;\n unique(): Promise<Doc<TableName> | null>;\n withIndex(\n indexName: string,\n range?: (q: IndexRangeBuilder) => unknown\n ): QueryInitializer<TableName>;\n withSearchIndex(\n indexName: string,\n search?: (q: IndexRangeBuilder) => unknown\n ): QueryInitializer<TableName>;\n}\nexport interface DatabaseReader {\n get<TableName extends TableNames>(\n id: unknown\n ): Promise<Doc<TableName> | null>;\n normalizeId?<TableName extends TableNames>(\n tableName: TableName,\n id: string\n ): Id<TableName> | null;\n query<TableName extends TableNames>(\n tableName: TableName\n ): QueryInitializer<TableName>;\n}\nexport type DatabaseWriter = DatabaseReader & {\n insert<TableName extends TableNames>(\n tableName: TableName,\n value: Record<string, unknown>\n ): Promise<Id<TableName>>;\n patch<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n replace<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n delete<TableName extends TableNames>(id: Id<TableName>): Promise<void>;\n};\ninterface Scheduler {\n runAfter(\n delayMs: number,\n functionReference: unknown,\n args?: unknown\n ): Promise<void>;\n}\ninterface AuthReader {\n getUserIdentity(): Promise<{\n readonly subject: string;\n readonly [claimName: string]: unknown;\n } | null>;\n}\ninterface RuntimeInvoker {\n runAction<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n runMutation<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n runQuery<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n}\nexport type QueryCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseReader;\n scheduler: Scheduler;\n};\nexport type MutationCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseWriter;\n scheduler: Scheduler;\n};\nexport type ActionCtx = RuntimeInvoker & {\n auth: AuthReader;\n scheduler: Scheduler;\n};\n\ntype ConvexFunctionBuilder<Ctx> = <\n Args = BoundaryValue,\n Result = BoundaryValue,\n>(definition: {\n args?: unknown;\n handler: (ctx: Ctx, args: Args) => Result;\n returns?: unknown;\n}) => unknown;\n\ntype OptionalHandlerConvexFunctionBuilder<Ctx> = <\n Args = BoundaryValue,\n Result = BoundaryValue,\n>(definition: {\n args?: unknown;\n handler?: (ctx: Ctx, args: Args) => Result;\n returns?: unknown;\n}) => unknown;\n\nexport const action =\n actionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const httpAction =\n httpActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalAction =\n internalActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalMutation =\n internalMutationGeneric as unknown as OptionalHandlerConvexFunctionBuilder<MutationCtx>;\nexport const internalQuery =\n internalQueryGeneric as unknown as OptionalHandlerConvexFunctionBuilder<QueryCtx>;\nexport const mutation =\n mutationGeneric as unknown as ConvexFunctionBuilder<MutationCtx>;\nexport const query = queryGeneric as unknown as ConvexFunctionBuilder<QueryCtx>;\n","interface GraphPrimitiveDebugEnvironment {\n process?: {\n env?: Record<string, string | undefined>;\n };\n}\n\nfunction isGraphPrimitiveDebugEnabled(): boolean {\n const env = (globalThis as GraphPrimitiveDebugEnvironment).process?.env;\n return (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG === \"1\" || env?.LUCERN_GRAPH_DEBUG === \"1\"\n );\n}\n\nexport function formatGraphPrimitiveError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error === null) {\n return \"null\";\n }\n if (error === undefined) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(error);\n } catch {\n return Object.prototype.toString.call(error);\n }\n}\n\nexport function debugGraphPrimitiveFallback(\n message: string,\n context?: Record<string, unknown>\n): void {\n if (!isGraphPrimitiveDebugEnabled()) {\n return;\n }\n console.debug(message, context ?? {});\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport type {\n DatabaseReader,\n DatabaseWriter,\n Id,\n MutationCtx,\n QueryCtx,\n} from \"./convex\";\nimport { api } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\ntype OverlayIdMode = \"legacy\" | \"topic\";\nconst LEGACY_SCOPE_FIELD = \"graphScopeProjectId\";\n\ninterface LegacyProjectThesis {\n confidence: number;\n lastUpdated: number;\n statement: string;\n}\n\ntype LegacyPillarImportance = \"critical\" | \"major\" | \"minor\" | \"not_applicable\";\n\ninterface LegacyThesisPillarConfig {\n aiSuggestion?: {\n suggestedAt: number;\n reasoning: string;\n };\n configuredAt?: number;\n configuredBy?: string;\n pillarImportance?: Record<string, LegacyPillarImportance | undefined>;\n}\n\ninterface LegacyBeliefArchitecture {\n lastCalculated: number;\n overallMaturity: number;\n pillarScores: Record<string, unknown>[];\n}\n\ninterface LegacyOntologyClassification {\n classifiedAt: number;\n functions: Record<string, unknown>[];\n overallConfidence: number;\n valueChains: Record<string, unknown>[];\n}\n\ntype TopicDocLike = Record<string, unknown> & {\n _id: string;\n _creationTime?: number;\n globalId?: string;\n name?: string;\n description?: string;\n type?: string;\n tenantId?: string;\n workspaceId?: string;\n status?: string;\n visibility?: string;\n createdBy?: string;\n /** FR.7 creator-grant: the exact acting principal recorded as owner-principal. */\n ownerPrincipalId?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectOverlay = Record<string, unknown> & {\n _id: string;\n projectId: string;\n topicId: string;\n storageProjectId: string;\n legacyProjectId?: string;\n name: string;\n type: string;\n description?: string;\n ownerId: string;\n /** FR.7 creator-grant: principal-shaped owner; distinct from clerkId-shaped ownerId. */\n ownerPrincipalId?: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n tags: string[];\n chatCount: number;\n artifactCount: number;\n lastActivityAt: number;\n thesis?: LegacyProjectThesis;\n wedgeHypothesis?: string;\n founderArchetype?: string;\n investmentCriteria?: string[];\n sprintPhase?:\n | \"pre_sprint\"\n | \"readiness_check\"\n | \"thesis_crystallization\"\n | \"sprint_planning\"\n | \"active_sprint\"\n | \"theme_assembly\"\n | \"evolution\";\n currentSprintIndex?: number;\n thesisPillarConfig?: LegacyThesisPillarConfig;\n beliefArchitecture?: LegacyBeliefArchitecture;\n ontologyClassification?: LegacyOntologyClassification;\n _creationTime: number;\n createdAt: number;\n updatedAt: number;\n};\n\ninterface OverlayContext {\n db?: Pick<DatabaseReader, \"get\" | \"query\"> &\n Partial<Pick<DatabaseWriter, \"patch\">>;\n runMutation?: MutationCtx[\"runMutation\"];\n runQuery?: QueryCtx[\"runQuery\"];\n}\n\ninterface TopicPatchPlan {\n nextMetadata: Record<string, unknown>;\n patch: Record<string, unknown>;\n topicUpdateArgs: Record<string, unknown> & { id: string };\n}\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readNonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction readMetadata(topic: TopicDocLike): Record<string, unknown> {\n return topic.metadata && typeof topic.metadata === \"object\"\n ? topic.metadata\n : {};\n}\n\nfunction omitMetadataKey(\n metadata: Record<string, unknown>,\n key: string\n): Record<string, unknown> {\n const { [key]: _omitted, ...rest } = metadata;\n return rest;\n}\n\nfunction readLegacyProjectId(\n value: Record<string, unknown> | null | undefined\n): string | undefined {\n if (!value) {\n return;\n }\n return readNonEmptyString(value[LEGACY_SCOPE_FIELD]);\n}\n\nfunction coerceVisibility(\n value: unknown\n): TopicProjectOverlay[\"visibility\"] | undefined {\n return value === \"private\" ||\n value === \"team\" ||\n value === \"firm\" ||\n value === \"external\" ||\n value === \"public\"\n ? value\n : undefined;\n}\n\nfunction coerceStatus(\n value: unknown\n): TopicProjectOverlay[\"status\"] | undefined {\n return value === \"active\" || value === \"archived\" || value === \"watching\"\n ? value\n : undefined;\n}\n\nfunction mapProjectType(\n topic: TopicDocLike,\n metadata: Record<string, unknown>\n): string {\n const explicit = readNonEmptyString(metadata.projectType);\n if (explicit) {\n return explicit;\n }\n if (topic.type === \"theme\") {\n return \"thematic\";\n }\n return readNonEmptyString(topic.type) || \"general\";\n}\n\nfunction isProjectLikeTopic(topic: TopicDocLike): boolean {\n const metadata = readMetadata(topic);\n return (\n topic.type === \"theme\" ||\n topic.type === \"thematic\" ||\n topic.type === \"deal\" ||\n topic.type === \"monitoring\" ||\n readLegacyProjectId(topic) !== undefined ||\n readNonEmptyString(metadata.projectType) !== undefined\n );\n}\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = getErrorMessage(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found'\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n return (error as { message: string }).message;\n }\n return \"unknown error\";\n}\n\nasync function resolveTopicDoc(\n ctx: OverlayContext,\n scopeId: string\n): Promise<TopicDocLike | null> {\n if (ctx?.db && typeof ctx.db.get === \"function\") {\n try {\n const directTopic = (await ctx.db.get(\n scopeId as Id<\"topics\">\n )) as TopicDocLike | null;\n if (directTopic) {\n return directTopic;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by direct ID\",\n {\n error,\n scopeId,\n }\n );\n // Not a direct topics-table id.\n }\n }\n\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n\n try {\n const topic = await ctx.runQuery<TopicDocLike | null>(api.topics.get, {\n id: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by ID query\",\n {\n error,\n scopeId,\n }\n );\n // Fall through to legacy-scope lookup.\n }\n\n try {\n const topic = await ctx.runQuery<TopicDocLike | null>(\n api.topics.getByLegacyScopeId,\n {\n projectId: String(scopeId),\n }\n );\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by legacy scope ID\",\n { error, scopeId }\n );\n // Best-effort compat lookup only.\n }\n\n return null;\n}\n\nexport function materializeTopicProjectOverlay(\n topic: TopicDocLike,\n idMode: OverlayIdMode = \"legacy\"\n): TopicProjectOverlay {\n const metadata = readMetadata(topic);\n const topicId = String(topic._id);\n const legacyProjectId =\n readLegacyProjectId(topic) ||\n readLegacyProjectId(metadata) ||\n readNonEmptyString(metadata.legacyProjectId);\n const storageProjectId = legacyProjectId || topicId;\n const outwardId = idMode === \"topic\" ? topicId : storageProjectId;\n const visibility =\n coerceVisibility(topic.visibility) ||\n coerceVisibility(metadata.visibility) ||\n \"private\";\n const status =\n coerceStatus(topic.status) || coerceStatus(metadata.status) || \"active\";\n let createdAt = 0;\n if (typeof topic.createdAt === \"number\") {\n createdAt = topic.createdAt;\n } else if (typeof topic._creationTime === \"number\") {\n createdAt = topic._creationTime;\n }\n let updatedAt = createdAt;\n if (typeof topic.updatedAt === \"number\") {\n updatedAt = topic.updatedAt;\n } else if (typeof metadata.updatedAt === \"number\") {\n updatedAt = metadata.updatedAt;\n }\n\n return {\n ...metadata,\n _id: outwardId,\n projectId: outwardId,\n topicId,\n storageProjectId,\n legacyProjectId,\n name: readNonEmptyString(topic.name) || \"Untitled Theme\",\n type: mapProjectType(topic, metadata),\n description: readNonEmptyString(topic.description),\n ownerId:\n readNonEmptyString(metadata.ownerId) ||\n readNonEmptyString(topic.createdBy) ||\n \"system\",\n // FR.7 creator-grant: surface the principal-shaped owner field (column-first,\n // metadata fallback for legacy rows that recorded it in metadata).\n ownerPrincipalId:\n readNonEmptyString(topic.ownerPrincipalId) ||\n readNonEmptyString(metadata.ownerPrincipalId),\n // RR.1 carrier: preserve the nested metadata carrier so the kernel's\n // `checkProjectAccessDetailed` metadata-PRIMARY read\n // (`project.metadata?.ownerPrincipalId`) resolves the grant. The `...metadata`\n // spread above only flattens keys; it does not leave a nested `metadata`.\n metadata,\n sharedWith: readStringArray(metadata.sharedWith),\n visibility,\n tenantId:\n readNonEmptyString(topic.tenantId) ||\n readNonEmptyString(metadata.tenantId),\n workspaceId:\n readNonEmptyString(topic.workspaceId) ||\n readNonEmptyString(metadata.workspaceId),\n status,\n tags: readStringArray(metadata.tags),\n chatCount:\n typeof metadata.chatCount === \"number\"\n ? (metadata.chatCount as number)\n : 0,\n artifactCount:\n typeof metadata.artifactCount === \"number\"\n ? (metadata.artifactCount as number)\n : 0,\n lastActivityAt:\n typeof metadata.lastActivityAt === \"number\"\n ? (metadata.lastActivityAt as number)\n : updatedAt,\n _creationTime:\n typeof topic._creationTime === \"number\" ? topic._creationTime : createdAt,\n createdAt,\n updatedAt,\n };\n}\n\nexport async function resolveTopicProjectOverlay(\n ctx: OverlayContext,\n scopeId: string,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n if (options.projectLikeOnly !== false && !isProjectLikeTopic(topic)) {\n return null;\n }\n return materializeTopicProjectOverlay(topic, options.idMode);\n}\n\nexport async function listTopicProjectOverlays(\n ctx: OverlayContext,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay[]> {\n let allTopics: TopicDocLike[] = [];\n\n if (ctx?.db?.query && typeof ctx.db.query === \"function\") {\n try {\n allTopics = (await ctx.db.query(\"topics\").collect()) as TopicDocLike[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to read topics table; falling back to API\",\n { error }\n );\n allTopics = [];\n }\n }\n\n if (allTopics.length === 0 && typeof ctx.runQuery === \"function\") {\n allTopics =\n (((await ctx.runQuery(api.topics.list, {})) ?? []) as TopicDocLike[]) ||\n [];\n }\n\n return allTopics\n .filter(\n (topic) => options.projectLikeOnly === false || isProjectLikeTopic(topic)\n )\n .map((topic) => materializeTopicProjectOverlay(topic, options.idMode));\n}\n\nexport async function patchTopicProjectOverlay(\n ctx: OverlayContext,\n scopeId: string,\n value: Record<string, unknown>\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n\n const plan = buildTopicProjectOverlayPatchPlan(topic, value);\n await applyTopicProjectOverlayPatch(ctx, topic, plan);\n\n return materializeTopicProjectOverlay({\n ...topic,\n ...plan.patch,\n metadata: plan.nextMetadata,\n } as TopicDocLike);\n}\n\nfunction buildTopicProjectOverlayPatchPlan(\n topic: TopicDocLike,\n value: Record<string, unknown>\n): TopicPatchPlan {\n const plan: TopicPatchPlan = {\n nextMetadata: { ...readMetadata(topic) },\n patch: {},\n topicUpdateArgs: {\n id: String(topic._id),\n },\n };\n for (const [key, rawValue] of Object.entries(value)) {\n applyTopicProjectOverlayPatchEntry(plan, key, rawValue);\n }\n\n plan.patch.updatedAt = Date.now();\n plan.patch.metadata = plan.nextMetadata;\n plan.topicUpdateArgs.metadata = plan.nextMetadata;\n\n return plan;\n}\n\nfunction applyTopicProjectOverlayPatchEntry(\n plan: TopicPatchPlan,\n key: string,\n rawValue: unknown\n) {\n switch (key) {\n case \"_id\":\n case \"projectId\":\n case \"topicId\":\n case \"legacyProjectId\":\n case \"storageProjectId\":\n case \"updatedAt\":\n case \"createdAt\":\n return;\n case \"name\":\n case \"description\":\n plan.patch[key] = rawValue;\n plan.topicUpdateArgs[key] = rawValue;\n return;\n case \"tenantId\":\n case \"workspaceId\":\n case \"ownerId\":\n throw new Error(\n `patchTopicProjectOverlay cannot mutate ${key} via component-owned topics`\n );\n case \"status\":\n applyTopicStatusPatch(plan, rawValue);\n return;\n case \"visibility\":\n applyTopicVisibilityPatch(plan, rawValue);\n return;\n case \"type\":\n applyTopicProjectTypePatch(plan, rawValue);\n return;\n default:\n applyTopicMetadataPatch(plan, key, rawValue);\n }\n}\n\nfunction applyTopicStatusPatch(plan: TopicPatchPlan, rawValue: unknown) {\n const status = coerceStatus(rawValue);\n if (status) {\n plan.patch.status = status;\n plan.topicUpdateArgs.status = status;\n }\n}\n\nfunction applyTopicVisibilityPatch(plan: TopicPatchPlan, rawValue: unknown) {\n const visibility = coerceVisibility(rawValue);\n if (visibility) {\n plan.patch.visibility = visibility;\n plan.topicUpdateArgs.visibility = visibility;\n }\n}\n\nfunction applyTopicProjectTypePatch(plan: TopicPatchPlan, rawValue: unknown) {\n const projectType = readNonEmptyString(rawValue);\n if (projectType) {\n plan.nextMetadata.projectType = projectType;\n return;\n }\n plan.nextMetadata = omitMetadataKey(plan.nextMetadata, \"projectType\");\n}\n\nfunction applyTopicMetadataPatch(\n plan: TopicPatchPlan,\n key: string,\n rawValue: unknown\n) {\n if (rawValue === undefined) {\n plan.nextMetadata = omitMetadataKey(plan.nextMetadata, key);\n return;\n }\n plan.nextMetadata[key] = rawValue;\n}\n\nasync function applyTopicProjectOverlayPatch(\n ctx: OverlayContext,\n topic: TopicDocLike,\n plan: TopicPatchPlan\n): Promise<void> {\n if (typeof ctx.runMutation === \"function\") {\n try {\n await ctx.runMutation(api.topics.update, plan.topicUpdateArgs);\n } catch (error) {\n if (!canPatchTopicViaLocalDb(ctx, error)) {\n throw error;\n }\n await ctx.db.patch(topic._id as Id<\"topics\">, plan.patch);\n }\n } else if (ctx?.db && typeof ctx.db.patch === \"function\") {\n await ctx.db.patch(topic._id as Id<\"topics\">, plan.patch);\n } else {\n throw new Error(\n \"Cannot patch topic without component adapter (ctx.runMutation unavailable)\"\n );\n }\n}\n\nfunction canPatchTopicViaLocalDb(\n ctx: OverlayContext,\n error: unknown\n): ctx is {\n db: Pick<DatabaseReader, \"get\" | \"query\"> & Pick<DatabaseWriter, \"patch\">;\n} {\n return (\n isMissingLucernChildComponentError(error) &&\n Boolean(ctx?.db) &&\n typeof ctx.db?.patch === \"function\"\n );\n}\n\nexport function matchesTopicProjectOverlayAccess(\n accessibleProjectIds: Set<string>,\n project: {\n topicId: string;\n legacyProjectId?: string;\n storageProjectId?: string;\n }\n): boolean {\n return (\n accessibleProjectIds.has(project.storageProjectId || project.topicId) ||\n accessibleProjectIds.has(project.topicId) ||\n (typeof project.legacyProjectId === \"string\" &&\n accessibleProjectIds.has(project.legacyProjectId))\n );\n}\n","/** Data-source resolver wiring for the graph-primitives module. */\n\nimport type {\n GraphPrimitivesAppResolverContext,\n GraphPrimitivesAppResolvers,\n} from \"./resolverTypes\";\nimport {\n listTopicProjectOverlays,\n patchTopicProjectOverlay,\n resolveTopicProjectOverlay,\n} from \"./topicProjectOverlay\";\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = getErrorMessage(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found'\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n return (error as { message: string }).message;\n }\n return \"unknown error\";\n}\n\nfunction isAdvisoryTopicPatch(value: Record<string, unknown>): boolean {\n const advisoryKeys = new Set([\"lastActivityAt\", \"updatedAt\"]);\n const keys = Object.keys(value);\n return keys.length > 0 && keys.every((key) => advisoryKeys.has(key));\n}\n\nasync function patchProjectWithTolerance(\n ctx: GraphPrimitivesAppResolverContext,\n projectId: string,\n value: Record<string, unknown>\n): Promise<void> {\n try {\n await patchTopicProjectOverlay(ctx, projectId, value);\n } catch (error) {\n if (\n !(\n isAdvisoryTopicPatch(value) && isMissingLucernChildComponentError(error)\n )\n ) {\n throw error;\n }\n\n console.warn(\n \"[lucern graph-primitives] Non-fatal advisory topic patch failure\",\n {\n projectId,\n keys: Object.keys(value),\n error: getErrorMessage(error),\n }\n );\n }\n}\n\nfunction defaultResolvers(): GraphPrimitivesAppResolvers {\n return {\n getProject: (ctx, projectId) =>\n resolveTopicProjectOverlay(ctx, projectId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n }),\n patchProject: (ctx, projectId, value) =>\n patchProjectWithTolerance(ctx, projectId, value),\n listTopics: (ctx) =>\n listTopicProjectOverlays(ctx, {\n idMode: \"legacy\",\n }),\n getFinalArtifact: (ctx, artifactId) => ctx.db.get(artifactId),\n };\n}\n\nlet resolverOverrides: Partial<GraphPrimitivesAppResolvers> = {};\n\nexport function configureGraphPrimitivesAppResolvers(\n overrides: Partial<GraphPrimitivesAppResolvers>\n): void {\n resolverOverrides = {\n ...resolverOverrides,\n ...overrides,\n };\n}\n\nexport function resetGraphPrimitivesAppResolvers(): void {\n resolverOverrides = {};\n}\n\nexport function resolveGraphPrimitivesAppResolvers(\n _ctx: GraphPrimitivesAppResolverContext\n): GraphPrimitivesAppResolvers {\n return {\n ...defaultResolvers(),\n ...resolverOverrides,\n };\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport type { Id } from \"./convex\";\nimport { api as appApi } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScopeProjectId\";\n\ntype UnknownRecord = Record<string, unknown>;\n\ninterface TopicScopeContext {\n db: {\n get(id: string): Promise<unknown>;\n query(tableName: string): TopicScopeQuery;\n };\n runQuery?: <TResult>(fnRef: unknown, args: unknown) => Promise<TResult>;\n}\n\ninterface TopicScopeQuery {\n collect(): Promise<unknown[]>;\n first(): Promise<unknown | null>;\n withIndex(\n indexName: string,\n range?: (q: TopicScopeIndexRangeBuilder) => unknown\n ): TopicScopeQuery;\n}\n\ninterface TopicScopeIndexRangeBuilder {\n eq(field: string, value: unknown): TopicScopeIndexRangeBuilder;\n}\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport interface TopicProjectScope {\n projectId?: string;\n source: \"topic\" | \"project_mapped_topic\" | \"topic_inferred\" | \"topic_node\";\n tenantId?: string;\n topicId: Id<\"topics\">;\n workspaceId?: string;\n}\n\n/**\n * RR.5 (legacy topics-table retirement) — graph-primitives mirror of the\n * kernel's epistemicNodes-first topic-scope fallback. Kept in lockstep with\n * `packages/reasoning-kernel/src/adapters/lib/topicScope.ts`\n * (`tests/unit/convex/topic-scope-fallbacks.test.ts` asserts parity).\n *\n * Resolves a topic that exists only as `epistemicNodes(nodeType=\"topic\")` —\n * the write-of-record — when no legacy `topics` row backs the ref, returning the\n * node's `topicId` self-key so scoped beliefs/evidence/questions stay reachable.\n * See the kernel module for the full silent-empty-result rationale.\n */\ninterface TopicNodeScopeDoc {\n _id: string | Id<\"epistemicNodes\">;\n globalId?: string;\n metadata?: UnknownRecord;\n nodeType?: string;\n topicId?: string;\n}\n\nasync function resolveTopicNodeScopeOrNull(\n ctx: TopicScopeContext,\n ref: string\n): Promise<TopicProjectScope | null> {\n if (!ctx?.db || typeof ctx.db.query !== \"function\") {\n return null;\n }\n\n let node: TopicNodeScopeDoc | null = null;\n\n // 1. The ref IS the topic node's UUIDv7 globalId.\n try {\n const byGlobalId = (await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", ref))\n .first()) as TopicNodeScopeDoc | null;\n if (byGlobalId && byGlobalId.nodeType === \"topic\") {\n node = byGlobalId;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] topic-node scope lookup by globalId failed\",\n { error, ref }\n );\n }\n\n if (!node) {\n return null;\n }\n\n const scopeKey =\n normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);\n if (!scopeKey) {\n return null;\n }\n\n return {\n topicId: scopeKey as Id<\"topics\">,\n projectId: asMappedProjectId(node),\n source: \"topic_node\",\n };\n}\n\ninterface MaterializedTopicNodeDoc {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n}\n\nfunction asMappedProjectId(\n topic: Pick<TopicDoc, \"metadata\"> | TopicNodeScopeDoc | null | undefined\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(\n (topic as UnknownRecord)[LEGACY_SCOPE_FIELD]\n );\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = topic.metadata || {};\n const candidate =\n (metadata as UnknownRecord)[LEGACY_SCOPE_FIELD] ||\n (metadata as UnknownRecord).legacyProjectId ||\n (metadata as UnknownRecord).projectId ||\n (metadata as UnknownRecord).scopeProjectId;\n return typeof candidate === \"string\"\n ? normalizeScopeValue(candidate)\n : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(\n ctx: TopicScopeContext,\n scopeId: string\n): Promise<TopicDoc[]> {\n const query = ctx.db.query(\"topics\") as TopicScopeQuery;\n try {\n return (await query\n .withIndex(\"by_graph_scope_project\", (q) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId)\n )\n .collect()) as TopicDoc[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve scope alias via index\",\n {\n error,\n scopeId,\n }\n );\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await query.collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: TopicScopeContext,\n topicId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by host query\",\n {\n error,\n topicId,\n }\n );\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: TopicScopeContext,\n legacyScopeId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by legacy scope\",\n {\n error,\n legacyScopeId,\n }\n );\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: TopicScopeContext,\n topic: TopicDoc\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) {\n break;\n }\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) {\n break;\n }\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: TopicScopeContext,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string }\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n return await resolveScopeFromTopicId(ctx, args.topicId);\n }\n\n if (args.projectId) {\n return await resolveScopeFromLegacyProjectId(ctx, args.projectId);\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\"\n );\n}\n\nasync function resolveScopeFromTopicId(\n ctx: TopicScopeContext,\n topicId: Id<\"topics\"> | string\n): Promise<TopicProjectScope> {\n const topic = await resolveTopicDocFromTopicId(ctx, topicId);\n if (topic) {\n return await buildTopicScope(ctx, topic, \"topic\");\n }\n\n const nodeScope = await resolveTopicNodeScopeOrNull(ctx, String(topicId));\n if (nodeScope) {\n return nodeScope;\n }\n throw new Error(`Topic not found: ${String(topicId)}`);\n}\n\nasync function resolveTopicDocFromTopicId(\n ctx: TopicScopeContext,\n topicId: Id<\"topics\"> | string\n): Promise<TopicDoc | null> {\n const direct = await tryReadTopicDoc(ctx, topicId, {\n failureLog: \"[topicScope] Failed to load topic by direct id\",\n idLogKey: \"topicId\",\n });\n if (direct) {\n return direct;\n }\n\n const hostTopic = await tryResolveHostTopicById(ctx, String(topicId));\n if (hostTopic) {\n return hostTopic;\n }\n\n return (\n pickPrimaryTopic(await findTopicsByScopeAlias(ctx, String(topicId))) ?? null\n );\n}\n\nasync function resolveScopeFromLegacyProjectId(\n ctx: TopicScopeContext,\n legacyProjectId: string\n): Promise<TopicProjectScope> {\n const directTopic = await resolveDirectLegacyProjectTopic(\n ctx,\n legacyProjectId\n );\n if (directTopic) {\n return await buildTopicScope(ctx, directTopic, \"topic_inferred\", {\n fallbackProjectId: legacyProjectId,\n });\n }\n\n const primary = pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, legacyProjectId)\n );\n if (primary) {\n return await buildTopicScope(ctx, primary, \"project_mapped_topic\", {\n fallbackProjectId: legacyProjectId,\n });\n }\n\n const nodeScope = await resolveTopicNodeScopeOrNull(ctx, legacyProjectId);\n if (nodeScope) {\n return {\n ...nodeScope,\n projectId: nodeScope.projectId ?? legacyProjectId,\n };\n }\n\n throw new Error(\n `Legacy project scope ${legacyProjectId} has no mapped topic.`\n );\n}\n\nasync function resolveDirectLegacyProjectTopic(\n ctx: TopicScopeContext,\n legacyProjectId: string\n): Promise<TopicDoc | null> {\n const directTopic = await tryReadTopicDoc(ctx, legacyProjectId, {\n failureLog: \"[topicScope] Failed to load direct project topic\",\n idLogKey: \"projectId\",\n });\n return directTopic ?? tryResolveHostTopicByLegacyScope(ctx, legacyProjectId);\n}\n\nasync function tryReadTopicDoc(\n ctx: TopicScopeContext,\n id: Id<\"topics\"> | string,\n log: { failureLog: string; idLogKey: \"projectId\" | \"topicId\" }\n): Promise<TopicDoc | null> {\n try {\n return (await ctx.db.get(id)) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(log.failureLog, {\n error,\n [log.idLogKey]: id,\n });\n return null;\n }\n}\n\nasync function buildTopicScope(\n ctx: TopicScopeContext,\n topic: TopicDoc,\n source: TopicProjectScope[\"source\"],\n options: { fallbackProjectId?: string } = {}\n): Promise<TopicProjectScope> {\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n return {\n topicId: topic._id,\n ...(mapped || options.fallbackProjectId\n ? { projectId: mapped ?? options.fallbackProjectId }\n : {}),\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source,\n };\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport {\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport type { Doc, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\n\nexport type EvidenceKind =\n | \"fact\"\n | \"observation\"\n | \"claim\"\n | \"quote\"\n | \"statistic\"\n | \"signal\";\n\nexport type AudienceClass = \"internal\" | \"restricted_external\" | \"public\";\n\nexport interface EvidenceScopeArgs {\n projectId?: string | null;\n topicId?: string | null;\n}\n\nexport type EvidenceNodeDoc = Doc<\"epistemicNodes\">;\ninterface TopicIndexQuery {\n eq(field: string, value: unknown): TopicIndexQuery;\n}\n\nexport const optionalEvidenceScopeArgs = optionalScopeArgs;\n\nconst DEFAULT_EVIDENCE_PAGE_SIZE = 250;\nconst MAX_EVIDENCE_PAGE_SIZE = 1000;\nconst LEGACY_SPRINT_LINK_KEY = \"linkedSprintId\";\n\nexport function generateContentHash(text: string): string {\n const content = `evidence:${text.trim().toLowerCase().replace(/\\s+/g, \" \").slice(0, 500)}`;\n let hash = 5381;\n for (let i = 0; i < content.length; i++) {\n // biome-ignore lint/suspicious/noBitwiseOperators: Preserve deterministic djb2 hash semantics for persisted evidence metadata compatibility.\n hash = (hash << 5) + hash + content.charCodeAt(i);\n // biome-ignore lint/suspicious/noBitwiseOperators: Preserve deterministic djb2 hash semantics for persisted evidence metadata compatibility.\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\nexport function normalizeKind(kind?: string): EvidenceKind {\n if (!kind) {\n return \"observation\";\n }\n const validKinds: EvidenceKind[] = [\n \"fact\",\n \"observation\",\n \"claim\",\n \"quote\",\n \"statistic\",\n \"signal\",\n ];\n return (validKinds.find((k) => kind.toLowerCase() === k) ||\n \"observation\") as EvidenceKind;\n}\n\nexport function normalizeSourceType(\n sourceType?: string\n): \"proprietary\" | \"verified\" | \"ai_generated\" {\n if (sourceType === \"proprietary\" || sourceType === \"verified\") {\n return sourceType;\n }\n return \"ai_generated\";\n}\n\nexport async function markProjectGraphDirty(\n ctx: QueryCtx | MutationCtx,\n projectId: string | undefined | null,\n topicId?: string | undefined | null\n): Promise<void> {\n const normalizedProjectId =\n typeof projectId === \"string\" && projectId.trim().length > 0\n ? projectId\n : undefined;\n const normalizedTopicId =\n typeof topicId === \"string\" && topicId.trim().length > 0\n ? topicId\n : undefined;\n\n if (!(normalizedProjectId || normalizedTopicId)) {\n return;\n }\n\n if (normalizedProjectId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n {\n projectId: normalizedProjectId,\n }\n );\n }\n if (normalizedTopicId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleByTopic,\n {\n topicId: normalizedTopicId,\n }\n );\n }\n const activityScopeId = normalizedTopicId ?? normalizedProjectId;\n if (!activityScopeId) {\n throw new Error(\n \"Expected evidence graph dirty scope to include a topic or project id.\"\n );\n }\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n activityScopeId,\n {\n lastActivityAt: Date.now(),\n }\n );\n}\n\nexport function clampEvidenceLimit(\n limit: number | undefined,\n fallback = DEFAULT_EVIDENCE_PAGE_SIZE\n): number {\n if (!Number.isFinite(limit)) {\n return fallback;\n }\n return Math.max(\n 1,\n Math.min(Math.floor(limit as number), MAX_EVIDENCE_PAGE_SIZE)\n );\n}\n\nexport function dedupeEvidenceNodes(\n nodes: EvidenceNodeDoc[]\n): EvidenceNodeDoc[] {\n const seen = new Set<string>();\n const deduped: EvidenceNodeDoc[] = [];\n for (const node of nodes) {\n const id = String(node._id);\n if (seen.has(id)) {\n continue;\n }\n seen.add(id);\n deduped.push(node);\n }\n return deduped;\n}\n\nexport function evidenceMatchesScope(\n node: unknown,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>\n): boolean {\n const record =\n node && typeof node === \"object\" && !Array.isArray(node)\n ? (node as Record<string, unknown>)\n : null;\n if (!record) {\n return false;\n }\n const nodeTopicId =\n typeof record.topicId === \"string\" ? record.topicId : undefined;\n const nodeProjectId =\n typeof record.projectId === \"string\" ? record.projectId : undefined;\n const scopeTopicId =\n scope.topicId === undefined ? undefined : String(scope.topicId);\n const scopeProjectId =\n scope.projectId === undefined ? undefined : String(scope.projectId);\n return (\n (scopeTopicId !== undefined && nodeTopicId === scopeTopicId) ||\n (scopeProjectId !== undefined && nodeProjectId === scopeProjectId)\n );\n}\n\nexport function resolveEvidenceLinkedWorktreeId(\n metadata: Record<string, unknown> | undefined\n): string | undefined {\n const worktreeId = metadata?.linkedWorktreeId;\n if (typeof worktreeId === \"string\" && worktreeId.trim().length > 0) {\n return worktreeId;\n }\n const sprintId = metadata?.[LEGACY_SPRINT_LINK_KEY];\n return typeof sprintId === \"string\" && sprintId.trim().length > 0\n ? sprintId\n : undefined;\n}\n\nexport async function resolveEvidenceScopeOrNull(\n ctx: QueryCtx | MutationCtx,\n args: EvidenceScopeArgs\n) {\n if (!(args.projectId || args.topicId)) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n projectId: args.projectId ?? undefined,\n topicId: args.topicId ?? undefined,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicEvidence] Failed to resolve evidence scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n }\n );\n return null;\n }\n}\n\nexport async function getEvidenceNodesForScope(\n ctx: QueryCtx,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n args?: { scanLimit?: number }\n): Promise<EvidenceNodeDoc[]> {\n const scanLimit =\n typeof args?.scanLimit === \"number\" ? args.scanLimit : undefined;\n const topicNodes = await (scanLimit\n ? ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: TopicIndexQuery) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"evidence\")\n )\n .order(\"desc\")\n .take(scanLimit)\n : ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: TopicIndexQuery) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"evidence\")\n )\n .order(\"desc\")\n .collect());\n\n return dedupeEvidenceNodes(topicNodes).filter((node) =>\n evidenceMatchesScope(node, scope)\n );\n}\n\ninterface AudienceRow {\n audienceClass: AudienceClass;\n audienceKey?: string | null;\n}\n\nexport function createEvidenceAudienceResolver(registryRows: AudienceRow[]) {\n const audienceClassByKey = new Map<string, AudienceClass>(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ])\n );\n\n return (\n audienceKey: string | undefined | null,\n fallback: AudienceClass\n ): AudienceClass => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return (\n audienceClassByKey.get(key) ??\n (classFromAudienceKey(key, fallback) as AudienceClass)\n );\n };\n}\n\nexport function flattenEvidenceNode(n: EvidenceNodeDoc) {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n const linkedWorktreeId = resolveEvidenceLinkedWorktreeId(meta);\n return {\n ...n,\n text: n.canonicalText || \"\",\n title: n.title || \"\",\n kind: (meta.kind as string) || \"observation\",\n tags: (meta.tags as string[]) || [],\n sourceQuestionId: (meta.sourceQuestionId as string) || undefined,\n linkedBeliefId:\n (meta.linkedBeliefNodeId as string) ||\n (meta.linkedBeliefId as string) ||\n undefined,\n linkedWorktreeId,\n [LEGACY_SPRINT_LINK_KEY]:\n (meta[LEGACY_SPRINT_LINK_KEY] as string) || undefined,\n sprintIndex: (meta.sprintIndex as number) || undefined,\n externalSourceUrl: (meta.sourceUrl as string) || undefined,\n externalSourceType: (meta.externalSourceType as string) || undefined,\n };\n}\n\nexport function formatEvidenceNode(n: {\n _id: string;\n projectId: string;\n topicId?: string;\n canonicalText: string;\n sourceType: string;\n status: string;\n metadata?: unknown;\n createdBy: string;\n createdAt: number;\n updatedAt: number;\n}) {\n const metadata = (n.metadata || {}) as Record<string, unknown>;\n const linkedWorktreeId = resolveEvidenceLinkedWorktreeId(metadata);\n return {\n _id: n._id,\n _epistemicNodeId: n._id,\n _creationTime: n.createdAt,\n projectId: n.projectId,\n topicId: n.topicId,\n text: n.canonicalText,\n kind: metadata.kind || \"observation\",\n tags: (metadata.tags as string[]) || [],\n sourceType: n.sourceType,\n externalSourceType: metadata.externalSourceType,\n externalSourceUrl: metadata.sourceUrl,\n sourceArtifactId: metadata.sourceArtifactId,\n sourceQuestionId: metadata.sourceQuestionId,\n linkedWorktreeId,\n [LEGACY_SPRINT_LINK_KEY]:\n (metadata[LEGACY_SPRINT_LINK_KEY] as string) || undefined,\n sourceAnchor: metadata.sourceAnchor,\n aiProvider: metadata.aiProvider,\n verificationStatus: metadata.verificationStatus,\n status: n.status,\n createdBy: n.createdBy,\n createdAt: n.createdAt,\n updatedAt: n.updatedAt,\n };\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport {\n getLayerForNodeType,\n isNodeType,\n} from \"@lucern/contracts/schema-helpers/spine/tables/epistemicNodes\";\nimport type { MutationCtx, QueryCtx } from \"./convex\";\nimport { resolveTopicProjectScope, type TopicProjectScope } from \"./topicScope\";\n\ntype StructuredInvariantError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ninterface ScopeLike {\n epistemicLayer?: unknown;\n nodeType?: unknown;\n projectId?: unknown;\n publicationStatus?: unknown;\n tenantId?: unknown;\n topicId?: unknown;\n workspaceId?: unknown;\n}\n\nexport interface RuntimePackMutationContext {\n packInstallScope?: \"tenant\" | \"workspace\";\n packKey?: string;\n toolName?: string;\n}\n\nexport function normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction throwWorkspaceIsolationError(args: {\n message: string;\n invariantCode: string;\n suggestion: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredInvariantError;\n error.status = 409;\n error.code = \"INVARIANT_VIOLATION\";\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nexport function assertWorkspaceScopedEpistemicNodeScope(args: {\n scope: TopicProjectScope;\n nodeType: string;\n mutationName: string;\n}): void {\n const layer = isNodeType(args.nodeType)\n ? getLayerForNodeType(args.nodeType)\n : undefined;\n if (layer === \"ontological\") {\n return;\n }\n\n const workspaceId = normalizeScopeValue(args.scope.workspaceId);\n if (workspaceId) {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n \"Workspace-scoped reasoning isolation requires workspaceId on non-ontological node creation.\",\n invariantCode: \"workspace.scope_required_for_epistemic_nodes\",\n suggestion:\n \"Resolve the topic/project scope through a workspace-bound topic before creating epistemic nodes.\",\n details: {\n mutationName: args.mutationName,\n nodeType: args.nodeType,\n topicId: args.scope.topicId,\n projectId: args.scope.projectId,\n },\n });\n}\n\nexport function nodeMatchesWorkspaceReasoningScope(\n node: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!node) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const nodeTenantId = normalizeScopeValue(node.tenantId);\n const nodeWorkspaceId = normalizeScopeValue(node.workspaceId);\n const epistemicLayer =\n typeof node.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n\n if (scopeTenantId && nodeTenantId && scopeTenantId !== nodeTenantId) {\n return false;\n }\n\n // Ontological entities are tenant-global (no workspace required)\n if (epistemicLayer === \"ontological\" && nodeWorkspaceId === undefined) {\n return true;\n }\n\n // Published nodes are visible at tenant scope — the microservice API surface.\n // The node stays in its workspace, but tenant-scope queries can see it.\n if (!scopeWorkspaceId && node.publicationStatus === \"published\") {\n return true;\n }\n\n if (!scopeWorkspaceId) {\n return nodeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === nodeWorkspaceId;\n}\n\nexport function edgeMatchesWorkspaceReasoningScope(\n edge: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!edge) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const edgeTenantId = normalizeScopeValue(edge.tenantId);\n const edgeWorkspaceId = normalizeScopeValue(edge.workspaceId);\n\n if (scopeTenantId && edgeTenantId && scopeTenantId !== edgeTenantId) {\n return false;\n }\n\n if (!scopeWorkspaceId) {\n return edgeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === edgeWorkspaceId;\n}\n\nexport async function resolveNodeScopeForWorkspaceIsolation(\n ctx: QueryCtx | MutationCtx,\n node: ScopeLike | null | undefined\n): Promise<{\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n nodeType?: string;\n}> {\n const epistemicLayer =\n typeof node?.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n const resolved = {\n tenantId: normalizeScopeValue(node?.tenantId),\n workspaceId: normalizeScopeValue(node?.workspaceId),\n epistemicLayer,\n nodeType: typeof node?.nodeType === \"string\" ? node.nodeType : undefined,\n };\n\n if (!node) {\n return resolved;\n }\n\n if (resolved.epistemicLayer === \"ontological\") {\n return resolved;\n }\n\n if (resolved.tenantId || resolved.workspaceId) {\n return resolved;\n }\n\n const topicId = normalizeScopeValue(node.topicId);\n if (topicId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n topicId,\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n if (node.projectId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n projectId: String(node.projectId),\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n return resolved;\n}\n\nexport function resolveRuntimePackMutationContext(args: {\n runtimeToolName?: string;\n runtimePackKey?: string;\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n}): RuntimePackMutationContext | undefined {\n if (\n !(\n args.runtimeToolName ||\n args.runtimePackKey ||\n args.runtimePackInstallScope\n )\n ) {\n return;\n }\n\n return {\n toolName: args.runtimeToolName,\n packKey: args.runtimePackKey,\n packInstallScope: args.runtimePackInstallScope,\n };\n}\n\nexport function assertTenantPackWorkspaceMutationAllowed(args: {\n runtime?: RuntimePackMutationContext;\n target: ScopeLike;\n mutationName: string;\n}): void {\n if (!args.runtime?.packKey || args.runtime.packInstallScope !== \"tenant\") {\n return;\n }\n\n const targetWorkspaceId = normalizeScopeValue(args.target.workspaceId);\n const targetLayer =\n typeof args.target.epistemicLayer === \"string\"\n ? args.target.epistemicLayer\n : undefined;\n\n if (!targetWorkspaceId || targetLayer === \"ontological\") {\n return;\n }\n\n throwWorkspaceIsolationError({\n message: `Tenant-scoped pack \"${args.runtime.packKey}\" cannot mutate workspace-scoped reasoning state.`,\n invariantCode: \"workspace.tenant_pack_reasoning_write_forbidden\",\n suggestion:\n \"Use a workspace-scoped pack for workspace-local graph mutations, or route the change through tenant-global canonical entity flows.\",\n details: {\n mutationName: args.mutationName,\n toolName: args.runtime.toolName,\n packKey: args.runtime.packKey,\n targetWorkspaceId,\n targetNodeType: args.target.nodeType,\n targetLayer,\n },\n });\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport { checkScopeAccess } from \"@lucern/access-control/access\";\nimport { canAudienceClassAccess } from \"@lucern/access-control/audience\";\nimport { listAudienceRegistryRows } from \"@lucern/access-control/audienceRegistry\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, QueryCtx } from \"./convex\";\nimport { internalQuery, query } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport {\n clampEvidenceLimit,\n createEvidenceAudienceResolver,\n type EvidenceNodeDoc,\n evidenceMatchesScope,\n flattenEvidenceNode,\n formatEvidenceNode,\n getEvidenceNodesForScope,\n optionalEvidenceScopeArgs,\n resolveEvidenceScopeOrNull,\n} from \"./epistemicEvidenceHelpers\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { resolveTopicProjectScope } from \"./topicScope\";\nimport { nodeMatchesWorkspaceReasoningScope } from \"./workspaceIsolation\";\n\ninterface IndexQuery {\n eq(field: string, value: unknown): IndexQuery;\n}\n\ninterface EvidenceScopeQueryArgs {\n projectId?: string;\n status?: string;\n tenantId?: string;\n topicId?: string;\n workspaceId?: string;\n}\n\ninterface GetByIdArgs {\n evidenceId?: string;\n insightId?: string;\n nodeId?: Id<\"epistemicNodes\">;\n}\n\ninterface GetByProjectArgs extends EvidenceScopeQueryArgs {\n limit?: number;\n userId?: string;\n}\n\ninterface GetByTopicArgs {\n limit?: number;\n status?: string;\n topicId: string;\n userId?: string;\n}\n\ninterface GetForBeliefArgs {\n beliefNodeId: Id<\"epistemicNodes\">;\n}\n\ninterface InternalGetByProjectArgs extends EvidenceScopeQueryArgs {\n audienceMode?: string;\n limit?: number;\n}\n\ninterface InternalGetByTopicArgs {\n audienceMode?: string;\n limit?: number;\n status?: string;\n topicId: string;\n}\n\ninterface GetByProjectSystemArgs extends EvidenceScopeQueryArgs {\n kind?: string;\n limit?: number;\n}\n\ninterface GetEvidenceBalanceArgs extends EvidenceScopeQueryArgs {\n userId: string;\n}\n\ninterface EvidenceNodeRow extends EvidenceNodeDoc {\n _id: Id<\"epistemicNodes\">;\n audienceLabel?: string;\n canonicalText: string;\n createdAt: number;\n createdBy: string;\n epistemicLayer?: string;\n exportClass?: string;\n globalId?: string;\n metadata?: Record<string, unknown>;\n nodeType: \"evidence\";\n policyTags?: string[];\n projectId?: string;\n sensitivityTier?: string;\n sourceType: string;\n status: string;\n tenantId?: string;\n title?: string;\n topicId?: Id<\"topics\"> | string;\n updatedAt: number;\n workspaceId?: string;\n}\n\ninterface EvidenceEdgeRow {\n _id: Id<\"epistemicEdges\">;\n edgeType: string;\n fromGlobalId?: string;\n fromLayer?: string;\n fromNodeId?: string;\n sourceGlobalId?: string;\n targetGlobalId?: string;\n toGlobalId?: string;\n toLayer?: string;\n toNodeId?: string;\n topicId?: string;\n weight?: number;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readOptionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | undefined {\n const normalized = readOptionalString(value);\n return normalized as Id<TableName> | undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction readOptionalStringArray(value: unknown): string[] | undefined {\n return Array.isArray(value) && value.every((item) => typeof item === \"string\")\n ? value\n : undefined;\n}\n\nfunction readEvidenceNodeRow(\n value: unknown,\n fallbackProjectId?: string\n): EvidenceNodeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(record._id);\n const canonicalText = readOptionalString(record.canonicalText);\n const createdAt = readOptionalNumber(record.createdAt);\n const createdBy = readOptionalString(record.createdBy);\n const nodeType = readOptionalString(record.nodeType);\n const sourceType = readOptionalString(record.sourceType);\n const status = readOptionalString(record.status);\n const updatedAt = readOptionalNumber(record.updatedAt);\n if (\n !(\n id &&\n canonicalText &&\n createdAt !== undefined &&\n createdBy &&\n nodeType === \"evidence\" &&\n sourceType &&\n status &&\n updatedAt !== undefined\n )\n ) {\n return null;\n }\n\n const metadata = readRecord(record.metadata) ?? undefined;\n const node: EvidenceNodeRow = {\n ...record,\n _id: id,\n canonicalText,\n createdAt,\n createdBy,\n nodeType: \"evidence\",\n sourceType,\n status,\n updatedAt,\n };\n\n const projectId =\n readOptionalString(record.projectId) ??\n readOptionalString(fallbackProjectId);\n if (projectId !== undefined) {\n node.projectId = projectId;\n }\n const topicId = readOptionalString(record.topicId);\n if (topicId !== undefined) {\n node.topicId = topicId;\n }\n const tenantId = readOptionalString(record.tenantId);\n if (tenantId !== undefined) {\n node.tenantId = tenantId;\n }\n const workspaceId = readOptionalString(record.workspaceId);\n if (workspaceId !== undefined) {\n node.workspaceId = workspaceId;\n }\n const globalId = readOptionalString(record.globalId);\n if (globalId !== undefined) {\n node.globalId = globalId;\n }\n const title = readOptionalString(record.title);\n if (title !== undefined) {\n node.title = title;\n }\n const audienceLabel = readOptionalString(record.audienceLabel);\n if (audienceLabel !== undefined) {\n node.audienceLabel = audienceLabel;\n }\n const epistemicLayer = readOptionalString(record.epistemicLayer);\n if (epistemicLayer !== undefined) {\n node.epistemicLayer = epistemicLayer;\n }\n const sensitivityTier = readOptionalString(record.sensitivityTier);\n if (sensitivityTier !== undefined) {\n node.sensitivityTier = sensitivityTier;\n }\n const exportClass = readOptionalString(record.exportClass);\n if (exportClass !== undefined) {\n node.exportClass = exportClass;\n }\n const policyTags = readOptionalStringArray(record.policyTags);\n if (policyTags !== undefined) {\n node.policyTags = policyTags;\n }\n if (metadata !== undefined) {\n node.metadata = metadata;\n }\n return node;\n}\n\nfunction readEvidenceNodeRows(\n values: readonly unknown[],\n fallbackProjectId?: string\n): EvidenceNodeRow[] {\n return values.flatMap((value) => {\n const node = readEvidenceNodeRow(value, fallbackProjectId);\n return node ? [node] : [];\n });\n}\n\nfunction dedupeEvidenceNodeRows(nodes: readonly EvidenceNodeRow[]) {\n const seen = new Set<string>();\n const deduped: EvidenceNodeRow[] = [];\n for (const node of nodes) {\n const id = String(node._id);\n if (seen.has(id)) {\n continue;\n }\n seen.add(id);\n deduped.push(node);\n }\n return deduped;\n}\n\nfunction readEvidenceEdgeRow(value: unknown): EvidenceEdgeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicEdges\">(record._id);\n const edgeType = readOptionalString(record.edgeType);\n if (!(id && edgeType)) {\n return null;\n }\n\n const edge: EvidenceEdgeRow = { _id: id, edgeType };\n const weight = readOptionalNumber(record.weight);\n if (weight !== undefined) {\n edge.weight = weight;\n }\n for (const field of [\n \"fromNodeId\",\n \"toNodeId\",\n \"sourceGlobalId\",\n \"targetGlobalId\",\n \"fromGlobalId\",\n \"toGlobalId\",\n \"fromLayer\",\n \"toLayer\",\n \"topicId\",\n ] as const) {\n const valueForField = readOptionalString(record[field]);\n if (valueForField !== undefined) {\n edge[field] = valueForField;\n }\n }\n return edge;\n}\n\nfunction readEvidenceEdgeRows(values: readonly unknown[]): EvidenceEdgeRow[] {\n return values.flatMap((value) => {\n const edge = readEvidenceEdgeRow(value);\n return edge ? [edge] : [];\n });\n}\n\nfunction dedupeEvidenceEdges(edges: readonly EvidenceEdgeRow[]) {\n const seen = new Set<string>();\n const deduped: EvidenceEdgeRow[] = [];\n for (const edge of edges) {\n const id = String(edge._id);\n if (seen.has(id)) {\n continue;\n }\n seen.add(id);\n deduped.push(edge);\n }\n return deduped;\n}\n\nfunction evidenceSourceRef(edge: EvidenceEdgeRow): string | undefined {\n return edge.sourceGlobalId ?? edge.fromGlobalId ?? edge.fromNodeId;\n}\n\nasync function resolveEvidenceNodeSoft(\n ctx: QueryCtx,\n nodeRef: string\n): Promise<EvidenceNodeRow | null> {\n const normalizedId =\n ctx.db.normalizeId?.(\"epistemicNodes\", nodeRef) ??\n readConvexId<\"epistemicNodes\">(nodeRef);\n\n if (normalizedId) {\n try {\n const direct = readEvidenceNodeRow(await ctx.db.get(normalizedId));\n if (direct) {\n return direct;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicEvidence] Direct evidence lookup failed\",\n { error, nodeRef }\n );\n }\n }\n\n return readEvidenceNodeRow(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q: IndexQuery) => q.eq(\"globalId\", nodeRef))\n .first()\n );\n}\n\nasync function collectNodeReferenceIds(\n ctx: QueryCtx,\n nodeId: Id<\"epistemicNodes\">\n): Promise<string[]> {\n const refs = new Set<string>([String(nodeId)]);\n const node = await ctx.db.get(nodeId);\n const globalId = readOptionalString(readRecord(node)?.globalId);\n if (globalId) {\n refs.add(globalId);\n }\n return [...refs];\n}\n\nasync function collectInformsEdgesToNode(\n ctx: QueryCtx,\n nodeId: Id<\"epistemicNodes\">\n): Promise<EvidenceEdgeRow[]> {\n const refs = await collectNodeReferenceIds(ctx, nodeId);\n const reads: Promise<unknown[]>[] = [];\n for (const ref of refs) {\n reads.push(\n ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q: IndexQuery) =>\n q.eq(\"toNodeId\", ref).eq(\"edgeType\", \"informs\")\n )\n .collect(),\n ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_target_global_id\", (q: IndexQuery) =>\n q.eq(\"targetGlobalId\", ref)\n )\n .collect()\n );\n }\n\n const edges = readEvidenceEdgeRows((await Promise.all(reads)).flat()).filter(\n (edge) => edge.edgeType === \"informs\"\n );\n return dedupeEvidenceEdges(edges);\n}\n\nfunction hasProjectId(\n node: EvidenceNodeRow\n): node is EvidenceNodeRow & { projectId: string } {\n return typeof node.projectId === \"string\" && node.projectId.length > 0;\n}\n\nexport const getById = query({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n insightId: v.optional(v.string()),\n evidenceId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: GetByIdArgs) => {\n const id = args.nodeId ?? args.insightId ?? args.evidenceId;\n if (!id) {\n return null;\n }\n return await resolveEvidenceNodeSoft(ctx, String(id));\n },\n});\n\nexport const getByProject = query({\n args: {\n ...optionalEvidenceScopeArgs,\n status: v.optional(v.string()),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: GetByProjectArgs) => {\n if (!(args.projectId || args.topicId)) {\n return [];\n }\n\n const pageSize = clampEvidenceLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, 1000);\n let scope:\n | Awaited<ReturnType<typeof resolveTopicProjectScope>>\n | {\n tenantId: undefined;\n workspaceId: undefined;\n topicId?: undefined;\n projectId?: undefined;\n };\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicEvidence] Failed to resolve getByProject scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n }\n );\n return [];\n }\n\n if (args.userId) {\n const scopeId = scope.topicId ? String(scope.topicId) : scope.projectId;\n if (!scopeId) {\n return [];\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n }\n\n const topicNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: IndexQuery) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"evidence\")\n )\n .order(\"desc\")\n .take(scanLimit);\n\n const scopedNodes = dedupeEvidenceNodeRows(\n readEvidenceNodeRows(topicNodes, scope.projectId)\n ).filter((node) => evidenceMatchesScope(node, scope));\n\n const filteredNodes = args.status\n ? scopedNodes.filter((node) => node.status === args.status)\n : scopedNodes;\n\n return filteredNodes.map(flattenEvidenceNode).slice(0, pageSize);\n },\n});\n\nexport const getByTopic = query({\n args: {\n topicId: v.string(),\n status: v.optional(v.string()),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: GetByTopicArgs) => {\n const pageSize = clampEvidenceLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, 1000);\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n });\n const topicNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: IndexQuery) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"evidence\")\n )\n .order(\"desc\")\n .take(scanLimit);\n\n const scopedNodes = dedupeEvidenceNodeRows(\n readEvidenceNodeRows(topicNodes, scope.projectId)\n ).filter((node) => evidenceMatchesScope(node, scope));\n\n const filteredNodes = args.status\n ? scopedNodes.filter((node) => node.status === args.status)\n : scopedNodes;\n\n return filteredNodes.map(flattenEvidenceNode).slice(0, pageSize);\n },\n});\n\nexport const getForBelief = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: GetForBeliefArgs) => {\n const edges = await collectInformsEdgesToNode(ctx, args.beliefNodeId);\n const evidenceNodeIds = edges.flatMap((edge) => {\n const sourceRef = evidenceSourceRef(edge);\n return sourceRef ? [sourceRef] : [];\n });\n const evidenceNodes = await Promise.all(\n evidenceNodeIds.map((id) => resolveEvidenceNodeSoft(ctx, id))\n );\n\n return evidenceNodes.flatMap((e, i) => {\n const edge = edges[i];\n if (!(e && edge)) {\n return [];\n }\n const weight = edge.weight ?? 0;\n return [\n {\n ...e,\n relation: weight >= 0 ? \"supports\" : \"contradicts\",\n confidence: Math.abs(weight),\n edgeId: edge._id,\n },\n ];\n });\n },\n});\n\nexport const internalGetByProject = internalQuery({\n args: {\n ...optionalEvidenceScopeArgs,\n status: v.optional(v.string()),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: InternalGetByProjectArgs) => {\n const pageSize = clampEvidenceLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, 1000);\n const scope = await resolveEvidenceScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const audienceMode = args.audienceMode ?? \"internal\";\n const projectScopeId = scope.topicId\n ? String(scope.topicId)\n : scope.projectId;\n if (!projectScopeId) {\n return [];\n }\n const project = await resolveGraphPrimitivesAppResolvers(ctx).getProject(\n ctx,\n projectScopeId\n );\n const tenantId = project?.tenantId;\n const workspaceId = project?.workspaceId;\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId,\n workspaceId,\n });\n const resolveAudienceClass = createEvidenceAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n const nodes = readEvidenceNodeRows(\n await getEvidenceNodesForScope(ctx, scope, { scanLimit }),\n scope.projectId\n );\n const workspaceScopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId,\n workspaceId,\n })\n );\n\n return workspaceScopedNodes\n .filter(\n (n) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(n.audienceLabel, \"internal\")\n ) &&\n (!args.status || n.status === args.status)\n )\n .slice(0, pageSize)\n .map((n) => {\n const metadata = n.metadata || {};\n return {\n _id: n._id,\n _creationTime: n.createdAt,\n projectId: n.projectId,\n topicId: n.topicId,\n text: n.canonicalText,\n kind: metadata.kind || \"observation\",\n tags: metadata.tags || [],\n sourceType: n.sourceType,\n externalSourceType: metadata.externalSourceType,\n sourceUrl: metadata.sourceUrl,\n status: n.status,\n createdBy: n.createdBy,\n createdAt: n.createdAt,\n updatedAt: n.updatedAt,\n audienceLabel: n.audienceLabel,\n policyTags: n.policyTags,\n sensitivityTier: n.sensitivityTier,\n exportClass: n.exportClass,\n anonymizationClass: n.anonymizationClass,\n };\n });\n },\n});\n\nexport const internalGetByTopic = internalQuery({\n args: {\n topicId: v.string(),\n status: v.optional(v.string()),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: InternalGetByTopicArgs) => {\n const pageSize = clampEvidenceLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, 1000);\n const audienceMode = args.audienceMode ?? \"internal\";\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n });\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n });\n const resolveAudienceClass = createEvidenceAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const nodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: IndexQuery) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"evidence\")\n )\n .order(\"desc\")\n .take(scanLimit);\n const workspaceScopedNodes = readEvidenceNodeRows(\n nodes,\n scope.projectId\n ).filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n })\n );\n\n return workspaceScopedNodes\n .filter(\n (n) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(n.audienceLabel, \"internal\")\n ) &&\n (!args.status || n.status === args.status)\n )\n .slice(0, pageSize)\n .map((n) => {\n const metadata = n.metadata || {};\n return {\n _id: n._id,\n _creationTime: n.createdAt,\n projectId: n.projectId,\n topicId: n.topicId,\n text: n.canonicalText,\n kind: metadata.kind || \"observation\",\n tags: metadata.tags || [],\n sourceType: n.sourceType,\n externalSourceType: metadata.externalSourceType,\n sourceUrl: metadata.sourceUrl,\n status: n.status,\n createdBy: n.createdBy,\n createdAt: n.createdAt,\n updatedAt: n.updatedAt,\n audienceLabel: n.audienceLabel,\n policyTags: n.policyTags,\n sensitivityTier: n.sensitivityTier,\n exportClass: n.exportClass,\n anonymizationClass: n.anonymizationClass,\n };\n });\n },\n});\n\nexport const getByProjectSystem = query({\n args: {\n ...optionalEvidenceScopeArgs,\n kind: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: GetByProjectSystemArgs) => {\n const pageSize = clampEvidenceLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, 1000);\n const scope = await resolveEvidenceScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = readEvidenceNodeRows(\n await getEvidenceNodesForScope(ctx, scope, { scanLimit }),\n scope.projectId\n );\n\n const filtered = args.kind\n ? nodes.filter((n) => {\n const meta = n.metadata || {};\n return meta.kind === args.kind;\n })\n : nodes;\n\n filtered.sort((a, b) => b.createdAt - a.createdAt);\n return filtered\n .filter(hasProjectId)\n .slice(0, pageSize)\n .map((n) => formatEvidenceNode(n));\n },\n});\n\nexport const getEvidenceBalance = query({\n args: {\n ...optionalEvidenceScopeArgs,\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: GetEvidenceBalanceArgs) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n const scopeId = scope.topicId ? String(scope.topicId) : scope.projectId;\n if (!scopeId) {\n return { supporting: 0, challenging: 0, total: 0 };\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return { supporting: 0, challenging: 0, total: 0 };\n }\n\n const resolvedTopicId = scope.topicId || scope.projectId;\n const edges = resolvedTopicId\n ? readEvidenceEdgeRows(\n await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_topic\", (q: IndexQuery) =>\n q.eq(\"topicId\", resolvedTopicId)\n )\n .collect()\n )\n : [];\n\n const evidenceEdges = edges.filter(\n (e) =>\n e.edgeType === \"informs\" && e.fromLayer === \"L2\" && e.toLayer === \"L3\"\n );\n\n let supporting = 0;\n let challenging = 0;\n\n for (const edge of evidenceEdges) {\n const weight = edge.weight ?? 0;\n if (weight > 0) {\n supporting++;\n } else if (weight < 0) {\n challenging++;\n }\n }\n\n return { supporting, challenging, total: evidenceEdges.length };\n },\n});\n"]}
@@ -1,6 +1,8 @@
1
- export { g as getNeo4jLabel, a as getNeo4jRelType, i as isDeprecatedEdgeType } from './graphTypes-B8VaIjnl.js';
1
+ export { createEdgeForInsightQuestionLink, createEpistemicEdge, normalizeConfidence } from './epistemicEdgeCreation.js';
2
2
  export { EDGE_LAYER_RULES, EpistemicLayer, LAYER_TRAVERSAL_RULES, TraversalMode, TraversalOptions, canTraverseToLayer, getDefaultEdgeTypesForMode, getDefaultMinLayer, getLayerDepth, getNodeLayer, isValidLayerConnection, shouldContinueTraversal, validateEdgeLayers } from './epistemicLayerRules.js';
3
3
  export { createEpistemicNodeForArtifact, createEpistemicNodeForBelief, createEpistemicNodeForInsight, createEpistemicNodeForQuestion } from './epistemicNodeCreation.js';
4
- export { createEdgeForInsightQuestionLink, createEpistemicEdge, normalizeConfidence } from './epistemicEdgeCreation.js';
4
+ export { g as getNeo4jLabel, a as getNeo4jRelType, i as isDeprecatedEdgeType } from './graphTypes-B8VaIjnl.js';
5
5
  import './convex.js';
6
+ import '@lucern/access-control/convex';
7
+ import '@lucern/contracts/convex/unsafeAnyApi';
6
8
  import 'convex/values';