@lucern/graph-primitives 1.0.36 → 1.0.38

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 (216) hide show
  1. package/dist/beliefDecay.js +0 -2
  2. package/dist/beliefEvidenceLinks.js +2 -3
  3. package/dist/beliefEvidenceLinks.operational.js +2 -3
  4. package/dist/beliefLifecycle.js +0 -2
  5. package/dist/confidencePropagationDispatch.js +0 -2
  6. package/dist/contradictions.js +0 -2
  7. package/dist/convex.js +0 -2
  8. package/dist/debug.js +0 -2
  9. package/dist/edgeValidation.js +0 -2
  10. package/dist/edges/contains.js +0 -2
  11. package/dist/edges/contradicts.js +0 -2
  12. package/dist/edges/depends-on.js +0 -2
  13. package/dist/edges/derived-from.js +0 -2
  14. package/dist/edges/elaborates.js +0 -2
  15. package/dist/edges/index.js +0 -2
  16. package/dist/edges/informs.js +0 -2
  17. package/dist/edges/propagation-types.js +0 -2
  18. package/dist/edges/refutes.js +0 -2
  19. package/dist/edges/supports.js +0 -2
  20. package/dist/edges/tests.js +0 -2
  21. package/dist/edges/utils.js +0 -2
  22. package/dist/embeddingTrigger.js +0 -2
  23. package/dist/entityBridge.js +0 -2
  24. package/dist/entityCanonicalMatch.js +0 -2
  25. package/dist/entityLifecycle.js +2 -3
  26. package/dist/entityValidation.js +0 -2
  27. package/dist/epistemicAnswers.js +2 -3
  28. package/dist/epistemicBeliefs.admin.js +0 -2
  29. package/dist/epistemicBeliefs.backfills.js +0 -2
  30. package/dist/epistemicBeliefs.confidence.js +0 -2
  31. package/dist/epistemicBeliefs.core.js +2 -3
  32. package/dist/epistemicBeliefs.forkEvidence.js +0 -2
  33. package/dist/epistemicBeliefs.helpers.js +0 -2
  34. package/dist/epistemicBeliefs.internal.js +2 -3
  35. package/dist/epistemicBeliefs.js +2 -3
  36. package/dist/epistemicBeliefs.lifecycle.js +0 -2
  37. package/dist/epistemicBeliefs.links.js +2 -3
  38. package/dist/epistemicBeliefs.queries.js +0 -2
  39. package/dist/epistemicBeliefs.topicAnchor.js +2 -3
  40. package/dist/epistemicContractHelpers.js +0 -2
  41. package/dist/epistemicContracts.evaluators.js +0 -2
  42. package/dist/epistemicContracts.handlers.js +0 -2
  43. package/dist/epistemicContracts.js +0 -2
  44. package/dist/epistemicContracts.metrics.js +0 -2
  45. package/dist/epistemicContracts.types.js +0 -2
  46. package/dist/epistemicEdgeCreation.js +0 -2
  47. package/dist/epistemicEdges.handlers.js +3 -3
  48. package/dist/epistemicEdges.helpers.js +0 -2
  49. package/dist/epistemicEdges.js +3 -3
  50. package/dist/epistemicEdges.mutations.js +0 -2
  51. package/dist/epistemicEdges.queries.js +0 -2
  52. package/dist/epistemicEdges.types.js +0 -2
  53. package/dist/epistemicEvidence.js +3 -3
  54. package/dist/epistemicEvidenceHelpers.js +0 -2
  55. package/dist/epistemicEvidenceMutations.js +3 -3
  56. package/dist/epistemicEvidenceQueries.js +0 -2
  57. package/dist/epistemicHelpers.js +2 -3
  58. package/dist/epistemicInsert.js +2 -3
  59. package/dist/epistemicLayerRules.js +0 -2
  60. package/dist/epistemicLinking.js +0 -2
  61. package/dist/epistemicNodeCreation.js +2 -3
  62. package/dist/epistemicNodes.helpers.js +0 -2
  63. package/dist/epistemicNodes.internal.js +2 -3
  64. package/dist/epistemicNodes.js +2 -3
  65. package/dist/epistemicNodes.mutations.js +2 -3
  66. package/dist/epistemicNodes.queries.js +0 -2
  67. package/dist/epistemicNodes.validators.js +0 -2
  68. package/dist/epistemicQuestions.conviction.js +0 -2
  69. package/dist/epistemicQuestions.create.js +2 -3
  70. package/dist/epistemicQuestions.evidence.js +2 -3
  71. package/dist/epistemicQuestions.helpers.js +0 -2
  72. package/dist/epistemicQuestions.js +2 -3
  73. package/dist/epistemicQuestions.lifecycle.js +0 -2
  74. package/dist/epistemicQuestions.queries.js +0 -2
  75. package/dist/epistemicQuestions.sprint.js +0 -2
  76. package/dist/epistemicQuestions.tail.js +2 -3
  77. package/dist/epistemicSources.js +2 -3
  78. package/dist/evaluators/index.js +0 -2
  79. package/dist/evaluators/lint-checker-evaluator.js +0 -2
  80. package/dist/evaluators/sentry-checker-evaluator.js +0 -2
  81. package/dist/evaluators/shared.js +0 -2
  82. package/dist/evaluators/test-runner-evaluator.js +0 -2
  83. package/dist/evaluators/tsc-checker-evaluator.js +0 -2
  84. package/dist/globalId.js +0 -2
  85. package/dist/graphTypes.js +0 -2
  86. package/dist/helpers.js +0 -2
  87. package/dist/index.js +4 -3
  88. package/dist/invariantEnforcement.js +0 -2
  89. package/dist/logicalRoleInference.js +0 -2
  90. package/dist/matcherFeedbackUtils.js +0 -2
  91. package/dist/ontology-matching.js +0 -2
  92. package/dist/ontologyApproval.js +0 -2
  93. package/dist/ontologyDefinitions.js +0 -2
  94. package/dist/ontologyHelpers.js +0 -2
  95. package/dist/ontologyRegistry.js +0 -2
  96. package/dist/projectionReconciliation.js +0 -2
  97. package/dist/projectionStaleness.js +0 -2
  98. package/dist/proof-attestation.json +1 -1
  99. package/dist/questionEvidenceLinks.js +0 -2
  100. package/dist/resolverTypes.js +0 -2
  101. package/dist/resolvers.js +0 -2
  102. package/dist/scopeResolverCompat.js +0 -2
  103. package/dist/text-matching.js +0 -2
  104. package/dist/topicOntologyResolver.js +0 -2
  105. package/dist/topicProjectOverlay.js +0 -2
  106. package/dist/topicScope.js +0 -2
  107. package/dist/workflowBridge.js +0 -2
  108. package/dist/workspaceIsolation.js +0 -2
  109. package/package.json +4 -4
  110. package/dist/beliefDecay.js.map +0 -1
  111. package/dist/beliefEvidenceLinks.js.map +0 -1
  112. package/dist/beliefEvidenceLinks.operational.js.map +0 -1
  113. package/dist/beliefLifecycle.js.map +0 -1
  114. package/dist/confidencePropagationDispatch.js.map +0 -1
  115. package/dist/contradictions.js.map +0 -1
  116. package/dist/convex.js.map +0 -1
  117. package/dist/debug.js.map +0 -1
  118. package/dist/edgeValidation.js.map +0 -1
  119. package/dist/edges/contains.js.map +0 -1
  120. package/dist/edges/contradicts.js.map +0 -1
  121. package/dist/edges/depends-on.js.map +0 -1
  122. package/dist/edges/derived-from.js.map +0 -1
  123. package/dist/edges/elaborates.js.map +0 -1
  124. package/dist/edges/index.js.map +0 -1
  125. package/dist/edges/informs.js.map +0 -1
  126. package/dist/edges/propagation-types.js.map +0 -1
  127. package/dist/edges/refutes.js.map +0 -1
  128. package/dist/edges/supports.js.map +0 -1
  129. package/dist/edges/tests.js.map +0 -1
  130. package/dist/edges/utils.js.map +0 -1
  131. package/dist/embeddingTrigger.js.map +0 -1
  132. package/dist/entityBridge.js.map +0 -1
  133. package/dist/entityCanonicalMatch.js.map +0 -1
  134. package/dist/entityLifecycle.js.map +0 -1
  135. package/dist/entityValidation.js.map +0 -1
  136. package/dist/epistemicAnswers.js.map +0 -1
  137. package/dist/epistemicBeliefs.admin.js.map +0 -1
  138. package/dist/epistemicBeliefs.backfills.js.map +0 -1
  139. package/dist/epistemicBeliefs.confidence.js.map +0 -1
  140. package/dist/epistemicBeliefs.core.js.map +0 -1
  141. package/dist/epistemicBeliefs.forkEvidence.js.map +0 -1
  142. package/dist/epistemicBeliefs.helpers.js.map +0 -1
  143. package/dist/epistemicBeliefs.internal.js.map +0 -1
  144. package/dist/epistemicBeliefs.js.map +0 -1
  145. package/dist/epistemicBeliefs.lifecycle.js.map +0 -1
  146. package/dist/epistemicBeliefs.links.js.map +0 -1
  147. package/dist/epistemicBeliefs.queries.js.map +0 -1
  148. package/dist/epistemicBeliefs.topicAnchor.js.map +0 -1
  149. package/dist/epistemicContractHelpers.js.map +0 -1
  150. package/dist/epistemicContracts.evaluators.js.map +0 -1
  151. package/dist/epistemicContracts.handlers.js.map +0 -1
  152. package/dist/epistemicContracts.js.map +0 -1
  153. package/dist/epistemicContracts.metrics.js.map +0 -1
  154. package/dist/epistemicContracts.types.js.map +0 -1
  155. package/dist/epistemicEdgeCreation.js.map +0 -1
  156. package/dist/epistemicEdges.handlers.js.map +0 -1
  157. package/dist/epistemicEdges.helpers.js.map +0 -1
  158. package/dist/epistemicEdges.js.map +0 -1
  159. package/dist/epistemicEdges.mutations.js.map +0 -1
  160. package/dist/epistemicEdges.queries.js.map +0 -1
  161. package/dist/epistemicEdges.types.js.map +0 -1
  162. package/dist/epistemicEvidence.js.map +0 -1
  163. package/dist/epistemicEvidenceHelpers.js.map +0 -1
  164. package/dist/epistemicEvidenceMutations.js.map +0 -1
  165. package/dist/epistemicEvidenceQueries.js.map +0 -1
  166. package/dist/epistemicHelpers.js.map +0 -1
  167. package/dist/epistemicInsert.js.map +0 -1
  168. package/dist/epistemicLayerRules.js.map +0 -1
  169. package/dist/epistemicLinking.js.map +0 -1
  170. package/dist/epistemicNodeCreation.js.map +0 -1
  171. package/dist/epistemicNodes.helpers.js.map +0 -1
  172. package/dist/epistemicNodes.internal.js.map +0 -1
  173. package/dist/epistemicNodes.js.map +0 -1
  174. package/dist/epistemicNodes.mutations.js.map +0 -1
  175. package/dist/epistemicNodes.queries.js.map +0 -1
  176. package/dist/epistemicNodes.validators.js.map +0 -1
  177. package/dist/epistemicQuestions.conviction.js.map +0 -1
  178. package/dist/epistemicQuestions.create.js.map +0 -1
  179. package/dist/epistemicQuestions.evidence.js.map +0 -1
  180. package/dist/epistemicQuestions.helpers.js.map +0 -1
  181. package/dist/epistemicQuestions.js.map +0 -1
  182. package/dist/epistemicQuestions.lifecycle.js.map +0 -1
  183. package/dist/epistemicQuestions.queries.js.map +0 -1
  184. package/dist/epistemicQuestions.sprint.js.map +0 -1
  185. package/dist/epistemicQuestions.tail.js.map +0 -1
  186. package/dist/epistemicSources.js.map +0 -1
  187. package/dist/evaluators/index.js.map +0 -1
  188. package/dist/evaluators/lint-checker-evaluator.js.map +0 -1
  189. package/dist/evaluators/sentry-checker-evaluator.js.map +0 -1
  190. package/dist/evaluators/shared.js.map +0 -1
  191. package/dist/evaluators/test-runner-evaluator.js.map +0 -1
  192. package/dist/evaluators/tsc-checker-evaluator.js.map +0 -1
  193. package/dist/globalId.js.map +0 -1
  194. package/dist/graphTypes.js.map +0 -1
  195. package/dist/helpers.js.map +0 -1
  196. package/dist/index.js.map +0 -1
  197. package/dist/invariantEnforcement.js.map +0 -1
  198. package/dist/logicalRoleInference.js.map +0 -1
  199. package/dist/matcherFeedbackUtils.js.map +0 -1
  200. package/dist/ontology-matching.js.map +0 -1
  201. package/dist/ontologyApproval.js.map +0 -1
  202. package/dist/ontologyDefinitions.js.map +0 -1
  203. package/dist/ontologyHelpers.js.map +0 -1
  204. package/dist/ontologyRegistry.js.map +0 -1
  205. package/dist/projectionReconciliation.js.map +0 -1
  206. package/dist/projectionStaleness.js.map +0 -1
  207. package/dist/questionEvidenceLinks.js.map +0 -1
  208. package/dist/resolverTypes.js.map +0 -1
  209. package/dist/resolvers.js.map +0 -1
  210. package/dist/scopeResolverCompat.js.map +0 -1
  211. package/dist/text-matching.js.map +0 -1
  212. package/dist/topicOntologyResolver.js.map +0 -1
  213. package/dist/topicProjectOverlay.js.map +0 -1
  214. package/dist/topicScope.js.map +0 -1
  215. package/dist/workflowBridge.js.map +0 -1
  216. package/dist/workspaceIsolation.js.map +0 -1
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/edges/contains.ts","../src/edges/utils.ts","../src/edges/contradicts.ts","../src/edges/depends-on.ts","../src/edges/derived-from.ts","../src/edges/elaborates.ts","../src/edges/informs.ts","../src/edges/propagation-types.ts","../src/edges/refutes.ts","../src/edges/supports.ts","../src/edges/tests.ts","../src/edges/index.ts","../src/graphTypes.ts","../src/edgeValidation.ts","../src/convex.ts","../src/debug.ts","../src/beliefLifecycle.ts","../src/resolvers.ts","../src/topicProjectOverlay.ts","../src/topicScope.ts","../src/workspaceIsolation.ts","../src/epistemicBeliefs.helpers.ts","../src/epistemicBeliefs.admin.ts","../src/epistemicBeliefs.backfills.ts","../src/confidencePropagationDispatch.ts","../src/epistemicBeliefs.confidence.ts","../src/embeddingTrigger.ts","../src/epistemicBeliefs.forkEvidence.ts","../src/epistemicInsert.ts","../src/globalId.ts","../src/epistemicBeliefs.topicAnchor.ts","../src/epistemicBeliefs.core.ts","../src/epistemicBeliefs.internal.ts","../src/epistemicBeliefs.lifecycle.ts","../src/logicalRoleInference.ts","../src/epistemicBeliefs.links.ts","../src/epistemicBeliefs.queries.ts","../src/epistemicLayerRules.ts","../src/epistemicEdgeCreation.ts","../src/epistemicNodeCreation.ts","../src/beliefDecay.ts","../src/beliefEvidenceLinks.ts","../src/beliefEvidenceLinks.operational.ts","../src/matcherFeedbackUtils.ts","../src/scopeResolverCompat.ts","../src/contradictions.ts","../src/entityBridge.ts","../src/entityLifecycle.ts","../src/entityCanonicalMatch.ts","../src/entityValidation.ts","../src/topicOntologyResolver.ts","../src/epistemicAnswers.ts","../src/epistemicEdges.ts","../src/epistemicEdges.helpers.ts","../src/epistemicEdges.handlers.ts","../src/epistemicEdges.mutations.ts","../src/epistemicEdges.queries.ts","../src/epistemicEvidence.ts","../src/epistemicEvidenceHelpers.ts","../src/epistemicEvidenceMutations.ts","../src/epistemicEvidenceQueries.ts","../src/epistemicLinking.ts","../src/epistemicNodes.ts","../src/epistemicNodes.helpers.ts","../src/epistemicNodes.validators.ts","../src/epistemicNodes.queries.ts","../src/helpers.ts","../src/invariantEnforcement.ts","../src/epistemicNodes.internal.ts","../src/epistemicNodes.mutations.ts","../src/epistemicQuestions.ts","../src/epistemicQuestions.helpers.ts","../src/epistemicQuestions.conviction.ts","../src/epistemicQuestions.create.ts","../src/epistemicQuestions.evidence.ts","../src/epistemicQuestions.lifecycle.ts","../src/epistemicQuestions.queries.ts","../src/workflowBridge.ts","../src/epistemicQuestions.sprint.ts","../src/epistemicQuestions.tail.ts","../src/epistemicSources.ts","../src/evaluators/index.ts","../src/epistemicContracts.metrics.ts","../src/epistemicContracts.evaluators.ts","../src/epistemicContracts.ts","../src/evaluators/shared.ts","../src/evaluators/lint-checker-evaluator.ts","../src/evaluators/sentry-checker-evaluator.ts","../src/evaluators/test-runner-evaluator.ts","../src/evaluators/tsc-checker-evaluator.ts","../src/ontology-matching.ts","../src/ontologyApproval.ts","../src/ontologyRegistry.ts","../src/projectionReconciliation.ts","../src/projectionStaleness.ts","../src/questionEvidenceLinks.ts","../src/text-matching.ts","../src/index.ts"],"names":["project","canContinueTransitively","canTraverseHop","isPropagationTraversalDirection","topicId","isMissingLucernChildComponentError","getErrorMessage","LEGACY_SCOPE_FIELD","query","normalizeScopeValue","v","readStringArray","mkOpinion","worktreeId","isRecord","readOptionalString","readRecord","update","readConvexId","readOptionalNumber","readRowList","confidenceFromSL","permissiveReturn","readOpinionFromRecord","edges","throwStructuredMutationError","requireScopeWriteAccess","generateUuidV7","evidenceMetadata","readOptionalBoolean","checkScopeAccess","assertSchemaEnumValue","getNodeLayer","isValidLayerConnection","getLayerDepth","shouldContinueTraversal","getDefaultMinLayer","EDGE_LAYER_RULES","validateEdgeLayers","generateContentHash","contentHash","existing","getRescoringSchedule","create","getByProject","insightIdUnion","getById","updateStatus","readBeliefRecord","checkProjectAccess","getCurrentUserId","requireAuthenticatedUserId","getLineage","remove","edgeMatchesWorkspaceReasoningScope","EPISTEMIC_LAYERS","readEpistemicLayer","readEdgeNodeRow","requireEdgeNodeRow","readEdgeRow","readEdgeRows","nodeEndpointRefs","getByProjectSystem","getByTopic","internalCreate","internalGetByProject","internalGetByTopic","markProjectGraphDirty","normalizeAudienceKey","classFromAudienceKey","EMBEDDING_GENERATION_ACTION","assertSignedImpactScore","collectNodeReferenceIds","listAudienceRegistryRows","canAudienceClassAccess","archive","batchCreate","createInternal","epistemicLayerValidator","get","getByGlobalId","getByProjectAndType","listAll","nodeMatchesWorkspaceReasoningScope","search","createEpistemicEdge","ONTOLOGICAL_NODE_TYPES","isBeliefNode","optionalNodeScopeArgs","readEpistemicNodeRow","requireEpistemicNodeRow","getByPillar","getForBelief","readFiniteNumber","readBeliefNodeRow","readQuestionNodeRow","readQuestionEvidenceLinkRow","value","toRecord","readStringValue","isQuestionNodeDoc","lintCheckerEvaluator","sentryCheckerEvaluator","testRunnerEvaluator","tscCheckerEvaluator","BUILT_IN_EVIDENTIAL_ALIASES","BUILT_IN_METRIC_CHECKER","BUILT_IN_REFERENCE_CHECK_COUNTER","BUILT_IN_TEMPORAL_DEADLINE","BUILT_IN_MARKET_INDEX_COMPARATOR","getRegisteredEpistemicEvaluators","asRecord","parseConfig","parseDiagnostics","getMatchedDiagnostics","getByInsight","getByQuestion","getEvidenceWithDetails","getPendingSuggestions","reviewSuggestion","suggestionStatusValidator","matcherMetadataValidator","readLinkSuggestionStatus","readMetadata","readEpistemicNode","recordMatcherDecision","applyOperationalLinkEffects","removeOperationalLinkEffects"],"mappings":"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","file":"index.js","sourcesContent":["import type { EdgePropagationSpec } from \"./propagation-types\";\n\nexport const containsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"contains\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Structural containment only. Traversed for explicit semantics, but it never propagates opinions.\",\n};\n","import {\n applyNegativeEvidence,\n applyNegativeSupport,\n cumulativeFusion,\n type EdgeMetadata,\n type PropagationResult,\n project,\n type SLOpinion,\n trustDiscount,\n} from \"@lucern/confidence\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeRecord,\n} from \"./propagation-types\";\n\nexport function readEdgeMetadata<TNodeId extends string>(\n edge: PropagationEdgeRecord<TNodeId>\n): EdgeMetadata {\n return {\n constraint: edge.constraint ?? undefined,\n normalization: edge.normalization ?? undefined,\n propagation: edge.propagation ?? undefined,\n conditionalA: edge.conditionalA ?? undefined,\n conditionalNotA: edge.conditionalNotA ?? undefined,\n };\n}\n\nexport function applyPerHopDamping(\n sourceOpinion: SLOpinion,\n damping: number\n): SLOpinion {\n if (damping >= 1) {\n return sourceOpinion;\n }\n\n return trustDiscount(sourceOpinion, Math.max(0, damping));\n}\n\nexport function annotateRationale(\n result: PropagationResult,\n spec: EdgePropagationSpec,\n hop: number\n): PropagationResult {\n return {\n ...result,\n rationale: `hop=${hop} edge=${spec.edgeType} damping=${spec.damping.toFixed(\n 2\n )} :: ${result.rationale}`,\n };\n}\n\nexport function propagatePositiveSupport(\n sourceOpinion: SLOpinion,\n targetOpinion: SLOpinion,\n edgeWeight: number\n): PropagationResult {\n const discounted = trustDiscount(sourceOpinion, Math.abs(edgeWeight));\n return {\n opinion: cumulativeFusion(targetOpinion, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Supporting evidence (weight=${edgeWeight.toFixed(\n 2\n )}) from source at ${project(sourceOpinion).toFixed(2)}`,\n };\n}\n\nexport function propagatePositiveInform(\n sourceOpinion: SLOpinion,\n targetOpinion: SLOpinion,\n edgeWeight: number\n): PropagationResult {\n const discounted = trustDiscount(sourceOpinion, Math.abs(edgeWeight));\n return {\n opinion: cumulativeFusion(targetOpinion, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Supporting evidence (weight=${edgeWeight.toFixed(2)})`,\n };\n}\n\nexport function propagateNegativeSupportWithMetadata(\n sourceOpinion: SLOpinion,\n targetOpinion: SLOpinion,\n edgeWeight: number,\n edge: PropagationEdgeRecord\n): PropagationResult {\n return applyNegativeSupport(\n sourceOpinion,\n targetOpinion,\n edgeWeight,\n readEdgeMetadata(edge)\n );\n}\n\nexport const propagateNegativeInform = applyNegativeEvidence;\n","import type { EdgePropagationSpec } from \"./propagation-types\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeSupportWithMetadata,\n} from \"./utils\";\n\nexport const contradictsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"contradicts\",\n direction: \"bidirectional\",\n transitivity: \"none\",\n damping: 0.85,\n maxHops: 1,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const negativeWeight = -Math.abs(edge.weight ?? 1);\n const result = propagateNegativeSupportWithMetadata(\n dampedSource,\n targetOpinion,\n negativeWeight,\n edge\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Legacy contradiction edges move negative pressure in either direction, but never beyond one hop.\",\n};\n","import {\n conditionalDeduction,\n dampedDependencyCascade,\n mkOpinion,\n project,\n} from \"@lucern/confidence\";\nimport type { EdgePropagationSpec } from \"./propagation-types\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n readEdgeMetadata,\n} from \"./utils\";\n\nexport const dependsOnPropagationSpec: EdgePropagationSpec = {\n edgeType: \"depends_on\",\n direction: \"incoming\",\n transitivity: \"damped\",\n damping: 0.8,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const metadata = readEdgeMetadata(edge);\n\n if (metadata.conditionalA && metadata.conditionalNotA) {\n const deducedOpinion = conditionalDeduction(\n dampedSource,\n mkOpinion(\n metadata.conditionalA.b,\n metadata.conditionalA.d,\n metadata.conditionalA.u,\n metadata.conditionalA.a\n ),\n mkOpinion(\n metadata.conditionalNotA.b,\n metadata.conditionalNotA.d,\n metadata.conditionalNotA.u,\n metadata.conditionalNotA.a\n ),\n targetOpinion.a\n );\n\n return annotateRationale(\n {\n opinion: deducedOpinion,\n operator: \"conditional_deduction\",\n rationale: `Conditional deduction: prerequisite at ${project(\n dampedSource\n ).toFixed(2)}`,\n },\n context.spec,\n context.hop\n );\n }\n\n const result = dampedDependencyCascade(\n dampedSource,\n targetOpinion,\n metadata.propagation ?? \"continuous\"\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Structural gating. Textbook conditional deduction when edge conditionals exist, otherwise damped dependency cascade through downstream chains.\",\n};\n","import type { EdgePropagationSpec } from \"./propagation-types\";\n\nexport const derivedFromPropagationSpec: EdgePropagationSpec = {\n edgeType: \"derived_from\",\n direction: \"incoming\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Provenance only. The traversal surface stays explicit, but confidence does not move across derived_from edges.\",\n};\n","import type { EdgePropagationSpec } from \"./propagation-types\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagatePositiveInform,\n} from \"./utils\";\n\nexport const elaboratesPropagationSpec: EdgePropagationSpec = {\n edgeType: \"elaborates\",\n direction: \"outgoing\",\n transitivity: \"damped\",\n damping: 0.7,\n maxHops: 2,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const contextualWeight = Math.min(Math.abs(edge.weight ?? 0.35), 0.35);\n const result = propagatePositiveInform(\n dampedSource,\n targetOpinion,\n contextualWeight\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Context-rich supporting detail. Elaborates carries a small positive effect with short, damped chaining.\",\n};\n","import type { EdgePropagationSpec } from \"./propagation-types\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeInform,\n propagatePositiveInform,\n} from \"./utils\";\n\nexport const informsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"informs\",\n direction: \"outgoing\",\n transitivity: \"full\",\n damping: 0.92,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const weight = edge.weight ?? 1;\n const result =\n weight < 0\n ? propagateNegativeInform(dampedSource, targetOpinion, weight)\n : propagatePositiveInform(dampedSource, targetOpinion, weight);\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Evidence-bearing influence. Informs can chain through the graph with light per-hop damping.\",\n};\n","import type {\n EdgeMetadata,\n PropagationResult,\n SLOpinion,\n} from \"@lucern/confidence\";\n\nexport type PropagationTraversalDirection = \"outgoing\" | \"incoming\";\n\nexport type PropagationSpecDirection =\n | PropagationTraversalDirection\n | \"bidirectional\";\n\nexport type PropagationEdgeType =\n | \"supports\"\n | \"depends_on\"\n | \"informs\"\n | \"contains\"\n | \"tests\"\n | \"derived_from\"\n | \"contradicts\"\n | \"refutes\"\n | \"elaborates\";\n\nexport interface PropagationEdgeRecord<TNodeId extends string = string> {\n conditionalA?: EdgeMetadata[\"conditionalA\"] | null;\n conditionalNotA?: EdgeMetadata[\"conditionalNotA\"] | null;\n constraint?: EdgeMetadata[\"constraint\"] | null;\n edgeType: string;\n fromNodeId?: TNodeId | null;\n normalization?: EdgeMetadata[\"normalization\"] | null;\n propagation?: EdgeMetadata[\"propagation\"] | null;\n tenantId?: string;\n toNodeId?: TNodeId | null;\n weight?: number | null;\n workspaceId?: string;\n}\n\nexport interface EdgePropagationSpec<TNodeId extends string = string> {\n damping: number;\n description: string;\n direction: PropagationSpecDirection;\n edgeType: PropagationEdgeType;\n maxHops: number | \"unbounded\";\n operator: (\n sourceOpinion: SLOpinion,\n targetOpinion: SLOpinion,\n edge: PropagationEdgeRecord<TNodeId>,\n context: {\n hop: number;\n sourceNodeId: TNodeId;\n targetNodeId: TNodeId;\n traversedDirection: PropagationTraversalDirection;\n spec: EdgePropagationSpec<TNodeId>;\n }\n ) => PropagationResult | null;\n transitivity: \"none\" | \"damped\" | \"full\";\n}\n\nexport function isPropagationTraversalDirection(\n direction: string\n): direction is PropagationTraversalDirection {\n return direction === \"outgoing\" || direction === \"incoming\";\n}\n\nexport function canTraverseHop<TNodeId extends string>(\n spec: EdgePropagationSpec<TNodeId>,\n nextHop: number\n): boolean {\n return spec.maxHops === \"unbounded\" || nextHop <= spec.maxHops;\n}\n\nexport function canContinueTransitively<TNodeId extends string>(\n spec: EdgePropagationSpec<TNodeId>,\n currentHop: number\n): boolean {\n if (spec.transitivity === \"none\") {\n return false;\n }\n\n return spec.maxHops === \"unbounded\" || currentHop < spec.maxHops;\n}\n","import type { EdgePropagationSpec } from \"./propagation-types\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeInform,\n} from \"./utils\";\n\nexport const refutesPropagationSpec: EdgePropagationSpec = {\n edgeType: \"refutes\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 0.9,\n maxHops: 1,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const negativeWeight = -Math.abs(edge.weight ?? 1);\n const result = propagateNegativeInform(\n dampedSource,\n targetOpinion,\n negativeWeight\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Explicit negative evidence semantics. Refutes is treated as strong one-hop counter-evidence.\",\n};\n","import type { EdgePropagationSpec } from \"./propagation-types\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeSupportWithMetadata,\n propagatePositiveSupport,\n} from \"./utils\";\n\nexport const supportsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"supports\",\n direction: \"outgoing\",\n transitivity: \"full\",\n damping: 0.85,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const weight = edge.weight ?? 1;\n const result =\n weight < 0\n ? propagateNegativeSupportWithMetadata(\n dampedSource,\n targetOpinion,\n weight,\n edge\n )\n : propagatePositiveSupport(dampedSource, targetOpinion, weight);\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Belief-to-belief influence. Supports chains transitively with moderate per-hop damping.\",\n};\n","import type { EdgePropagationSpec } from \"./propagation-types\";\n\nexport const testsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"tests\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Interrogation linkage only. Tests edges do not directly move confidence.\",\n};\n","import { containsPropagationSpec } from \"./contains\";\nimport { contradictsPropagationSpec } from \"./contradicts\";\nimport { dependsOnPropagationSpec } from \"./depends-on\";\nimport { derivedFromPropagationSpec } from \"./derived-from\";\nimport { elaboratesPropagationSpec } from \"./elaborates\";\nimport { informsPropagationSpec } from \"./informs\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeType,\n PropagationSpecDirection,\n PropagationTraversalDirection,\n} from \"./propagation-types\";\nimport {\n canContinueTransitively as importedCanContinueTransitively,\n canTraverseHop as importedCanTraverseHop,\n isPropagationTraversalDirection as importedIsPropagationTraversalDirection,\n} from \"./propagation-types\";\nimport { refutesPropagationSpec } from \"./refutes\";\nimport { supportsPropagationSpec } from \"./supports\";\nimport { testsPropagationSpec } from \"./tests\";\n\nexport type {\n EdgePropagationSpec,\n PropagationEdgeRecord,\n PropagationEdgeType,\n PropagationSpecDirection,\n PropagationTraversalDirection,\n} from \"./propagation-types\";\n\nconst canContinueTransitively = importedCanContinueTransitively;\nconst canTraverseHop = importedCanTraverseHop;\nconst isPropagationTraversalDirection = importedIsPropagationTraversalDirection;\n\nexport {\n canContinueTransitively,\n canTraverseHop,\n isPropagationTraversalDirection,\n};\n\nexport const EDGE_PROPAGATION_SPECS: readonly EdgePropagationSpec[] = [\n supportsPropagationSpec,\n informsPropagationSpec,\n dependsOnPropagationSpec,\n derivedFromPropagationSpec,\n containsPropagationSpec,\n testsPropagationSpec,\n contradictsPropagationSpec,\n refutesPropagationSpec,\n elaboratesPropagationSpec,\n] as const;\n\nconst EDGE_PROPAGATION_SPEC_MAP = new Map<\n PropagationEdgeType,\n EdgePropagationSpec\n>(EDGE_PROPAGATION_SPECS.map((spec) => [spec.edgeType, spec]));\n\nexport function getEdgePropagationSpec(\n edgeType: string\n): EdgePropagationSpec | undefined {\n return EDGE_PROPAGATION_SPEC_MAP.get(edgeType as PropagationEdgeType);\n}\n\nexport function getEdgePropagationSpecs(): readonly EdgePropagationSpec[] {\n return EDGE_PROPAGATION_SPECS;\n}\n\nexport function getTraversalDirections(\n direction: PropagationSpecDirection\n): readonly PropagationTraversalDirection[] {\n if (isPropagationTraversalDirection(direction)) {\n return [direction];\n }\n\n return [\"outgoing\", \"incoming\"];\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Graph Type Registry for Convex\n *\n * This file mirrors the canonical type registry at lib/ontology/types.ts\n * but is compatible with Convex's bundling requirements.\n *\n * IMPORTANT: Keep this file in sync with lib/ontology/types.ts\n * The frontend uses lib/ontology/types.ts, Convex uses this file.\n *\n * @see /docs/architecture/UNIFIED_GRAPH_ARCHITECTURE.md\n */\n\n// =============================================================================\n// EPISTEMIC LAYERS\n// =============================================================================\n\nexport type EpistemicLayer =\n | \"L4\"\n | \"L3\"\n | \"L2\"\n | \"L1\"\n | \"ontological\"\n | \"organizational\";\n\n// =============================================================================\n// NODE TYPE TO LABEL MAPPING\n// =============================================================================\n\nexport const NODE_TYPE_TO_LABEL: Record<string, string> = {\n // L4: Audit Targets\n decision: \"Decision\",\n\n // L3: Traversal Anchors\n belief: \"Belief\",\n question: \"Question\",\n theme: \"Theme\",\n deal: \"Deal\",\n topic: \"Topic\",\n\n // L2: Compression Boundary\n claim: \"Claim\",\n evidence: \"Evidence\",\n synthesis: \"Synthesis\",\n answer: \"Answer\",\n\n // L1: Terminal Leaves\n atomic_fact: \"AtomicFact\",\n excerpt: \"Excerpt\",\n source: \"Source\",\n\n // Ontological (Neo4j is SOT)\n company: \"Company\",\n person: \"Person\",\n investor: \"Investor\",\n function: \"Function\",\n value_chain: \"ValueChain\",\n};\n\n// =============================================================================\n// EDGE TYPE TO NEO4J RELATIONSHIP MAPPING\n// =============================================================================\n\n/**\n * Epistemic Kernel v2: 6 canonical edge types + ontological edges.\n *\n * Weight and metadata carry nuance that previously required 67 separate type strings.\n * See: docs/architecture/epistemic-kernel-v2.md\n */\nexport const EDGE_TYPE_TO_REL: Record<string, string> = {\n // === THE SIX CANONICAL EPISTEMIC EDGE TYPES ===\n supports: \"SUPPORTS\", // L3↔L3: belief bears on belief (weight -1 to +1)\n informs: \"INFORMS\", // L2→L3: evidence bears on belief\n depends_on: \"DEPENDS_ON\", // L3→L3, Q→Q: structural gate\n derived_from: \"DERIVED_FROM\", // Any→Any: provenance chain (fork, synthesis, extraction, answer)\n contains: \"CONTAINS\", // Any→Any: hierarchy, scoping, membership\n tests: \"TESTS\", // Q→L3: question interrogates belief\n\n // === L4 DECISION EDGES (derived_from with derivationType=decision) ===\n // Kept as separate Neo4j relationship types for backward compat with L4 queries.\n // New code should use derived_from + metadata.\n based_on_belief: \"BASED_ON_BELIEF\",\n based_on_question: \"BASED_ON_QUESTION\",\n blocked_by_contradiction: \"BLOCKED_BY_CONTRADICTION\",\n informed_by_theme: \"INFORMED_BY_THEME\",\n\n // === ONTOLOGICAL EDGES (tenant-extensible, managed by ontology system) ===\n works_at: \"WORKS_AT\",\n invested_in: \"INVESTED_IN\",\n competes_with: \"COMPETES_WITH\",\n participates_in: \"PARTICIPATES_IN\",\n founded_by: \"FOUNDED_BY\",\n evaluates: \"EVALUATES\",\n performs: \"PERFORMS\",\n function_in: \"FUNCTION_IN\",\n impacts: \"IMPACTS\",\n raised_from: \"RAISED_FROM\",\n mentioned_in: \"MENTIONED_IN\",\n perspective_on: \"PERSPECTIVE_ON\",\n about_entity: \"ABOUT_ENTITY\",\n entity_referenced_in: \"ENTITY_REFERENCED_IN\",\n};\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Get the epistemic layer for a node type\n */\nexport function getNodeLayer(nodeType: string): EpistemicLayer {\n const L4_TYPES = [\"decision\"];\n const L3_TYPES = [\"belief\", \"question\", \"theme\", \"deal\"];\n const L2_TYPES = [\"claim\", \"evidence\", \"synthesis\", \"answer\"];\n const L1_TYPES = [\"atomic_fact\", \"excerpt\", \"source\"];\n const ONTOLOGICAL_TYPES = [\n \"company\",\n \"person\",\n \"investor\",\n \"function\",\n \"value_chain\",\n ];\n const ORGANIZATIONAL_TYPES = [\"topic\"];\n\n if (L4_TYPES.includes(nodeType)) {\n return \"L4\";\n }\n if (L3_TYPES.includes(nodeType)) {\n return \"L3\";\n }\n if (L2_TYPES.includes(nodeType)) {\n return \"L2\";\n }\n if (L1_TYPES.includes(nodeType)) {\n return \"L1\";\n }\n if (ONTOLOGICAL_TYPES.includes(nodeType)) {\n return \"ontological\";\n }\n if (ORGANIZATIONAL_TYPES.includes(nodeType)) {\n return \"organizational\";\n }\n\n // Unknown types default to L2\n console.warn(`[GraphTypes] Unknown nodeType \"${nodeType}\", defaulting to L2`);\n return \"L2\";\n}\n\n/**\n * Get the Neo4j label for a node type\n */\nexport function getNeo4jLabel(nodeType: string): string {\n return (\n NODE_TYPE_TO_LABEL[nodeType] ||\n nodeType.charAt(0).toUpperCase() + nodeType.slice(1)\n );\n}\n\n/**\n * Get the Neo4j relationship type for an edge type\n */\nexport function getNeo4jRelType(edgeType: string): string {\n return EDGE_TYPE_TO_REL[edgeType] || edgeType.toUpperCase();\n}\n\n/**\n * The 6 canonical epistemic edge types (Kernel v2).\n * Anything not in this set or the ontological/L4 sets is deprecated.\n */\nconst CANONICAL_EPISTEMIC_TYPES = new Set([\n \"supports\",\n \"informs\",\n \"depends_on\",\n \"derived_from\",\n \"contains\",\n \"tests\",\n]);\n\n/**\n * Check if an edge type is deprecated.\n *\n * Kernel v2: only the 6 canonical epistemic types, L4 decision types,\n * and ontological types are active. All legacy types (67 old types) are deprecated.\n */\nexport function isDeprecatedEdgeType(edgeType: string): boolean {\n // Canonical epistemic types are NOT deprecated\n if (CANONICAL_EPISTEMIC_TYPES.has(edgeType)) {\n return false;\n }\n // Types in the EDGE_TYPE_TO_REL map (ontological + L4) are NOT deprecated\n if (edgeType in EDGE_TYPE_TO_REL) {\n return false;\n }\n // Everything else is a legacy type\n return true;\n}\n","/**\n * edgeValidation module implementation.\n */\n\n// biome-ignore-all lint/style/useFilenamingConvention: Public package path is part of a stable ABI; renaming requires an export-map migration.\n\nimport type { EpistemicLayer } from \"./graphTypes\";\n\nexport type { EpistemicLayer } from \"./graphTypes\";\n// biome-ignore lint/performance/noBarrelFile: Public compatibility module.\nexport { isDeprecatedEdgeType } from \"./graphTypes\";\n\nconst VALID_LAYER_CONNECTIONS: Record<\n EpistemicLayer,\n ReadonlySet<EpistemicLayer>\n> = {\n ontological: new Set([\"ontological\", \"L1\", \"L2\", \"L3\"]),\n L1: new Set([\"L1\", \"L2\"]),\n L2: new Set([\"L1\", \"L2\", \"L3\", \"ontological\"]),\n L3: new Set([\"L2\", \"L3\", \"L4\", \"ontological\", \"organizational\"]),\n L4: new Set([\"L3\", \"L4\"]),\n organizational: new Set([\"organizational\", \"L3\"]),\n};\n\nfunction getLayerDepth(layer: EpistemicLayer): number {\n switch (layer) {\n case \"L4\":\n return 4;\n case \"L3\":\n return 3;\n case \"L2\":\n return 2;\n case \"L1\":\n return 1;\n case \"ontological\":\n return 0;\n default:\n return -1;\n }\n}\n\nfunction isValidLayerConnection(\n fromLayer: EpistemicLayer,\n toLayer: EpistemicLayer\n): boolean {\n if (!VALID_LAYER_CONNECTIONS[fromLayer].has(toLayer)) {\n return false;\n }\n\n if (fromLayer === \"ontological\" || toLayer === \"ontological\") {\n return true;\n }\n\n if (fromLayer === \"organizational\" || toLayer === \"organizational\") {\n return true;\n }\n\n const fromDepth = getLayerDepth(fromLayer);\n const toDepth = getLayerDepth(toLayer);\n if (Math.abs(fromDepth - toDepth) > 1) {\n return false;\n }\n return true;\n}\n\nexport type TraversalMode =\n | \"anchor_down\"\n | \"anchor_up\"\n | \"same_layer\"\n | \"decision_trace\";\n\nexport function shouldContinueTraversal(\n currentLayer: EpistemicLayer,\n targetLayer: EpistemicLayer,\n options: {\n mode: TraversalMode;\n minLayer?: number;\n maxLayer?: number;\n }\n): boolean {\n const currentDepth = getLayerDepth(currentLayer);\n const targetDepth = getLayerDepth(targetLayer);\n\n if (options.minLayer !== undefined && targetDepth < options.minLayer) {\n return false;\n }\n if (options.maxLayer !== undefined && targetDepth > options.maxLayer) {\n return false;\n }\n\n switch (options.mode) {\n case \"anchor_down\":\n return targetDepth <= currentDepth;\n case \"anchor_up\":\n return targetDepth >= currentDepth;\n case \"same_layer\":\n return targetDepth === currentDepth;\n case \"decision_trace\":\n return currentDepth === 4\n ? targetDepth === 3\n : targetDepth === currentDepth;\n default:\n return true;\n }\n}\n\nexport function getDefaultMinLayer(mode: TraversalMode): number {\n switch (mode) {\n case \"anchor_down\":\n return 1;\n case \"anchor_up\":\n return 2;\n case \"same_layer\":\n return 1;\n case \"decision_trace\":\n return 3;\n default:\n return 1;\n }\n}\n\nexport const EDGE_LAYER_RULES: Record<\n string,\n { from: EpistemicLayer[]; to: EpistemicLayer[]; description: string }\n> = {\n // === 6 Canonical Epistemic Types ===\n supports: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief bears on Belief (weight: +1 supports, -1 contradicts)\",\n },\n informs: {\n from: [\"L2\"],\n to: [\"L3\"],\n description: \"Evidence -> Belief (L2 -> L3)\",\n },\n depends_on: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief B requires Belief A (structural gate)\",\n },\n derived_from: {\n from: [\"L2\", \"L3\", \"L4\"],\n to: [\"L1\", \"L2\", \"L3\"],\n description: \"A was produced from B (provenance chain)\",\n },\n contains: {\n from: [\"L3\", \"L4\", \"ontological\"],\n to: [\"L2\", \"L3\", \"ontological\"],\n description: \"A scopes/aggregates B (hierarchy)\",\n },\n tests: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Question -> Belief (L3 -> L3)\",\n },\n\n // === Structural / Lifecycle ===\n supersedes: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"NewNode -> OldNode (fork lineage)\",\n },\n responds_to: {\n from: [\"L2\", \"L3\"],\n to: [\"L3\"],\n description: \"Answer -> Question (L2/L3 -> L3)\",\n },\n belongs_to: {\n from: [\"L2\", \"L3\", \"ontological\"],\n to: [\"L3\"],\n description: \"Membership (migrating to contains)\",\n },\n relates_to_thesis: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief -> Theme (L3 -> L3)\",\n },\n\n // === Ontological (entity-entity or entity-epistemic bridge) ===\n works_at: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Person -> Company\",\n },\n invested_in: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Investor -> Company\",\n },\n competes_with: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> Company\",\n },\n participates_in: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> ValueChain\",\n },\n founded_by: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> Person\",\n },\n evaluates: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Deal -> Company\",\n },\n performs: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> Function\",\n },\n function_in: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Function -> ValueChain\",\n },\n impacts: {\n from: [\"ontological\", \"L3\"],\n to: [\"ontological\"],\n description: \"Theme/Entity -> ValueChain\",\n },\n raised_from: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> Investor\",\n },\n mentioned_in: {\n from: [\"ontological\"],\n to: [\"L1\", \"L2\"],\n description: \"Entity -> Source/Evidence\",\n },\n perspective_on: {\n from: [\"ontological\"],\n to: [\"L3\"],\n description: \"Person -> Belief/Theme\",\n },\n plays_theme: {\n from: [\"ontological\"],\n to: [\"L3\"],\n description: \"Deal -> Theme\",\n },\n\n // C2-RR.4 — storage migration alias + the remaining 55 reachable edge types.\n // Mirrors the kernel rule table\n // (packages/reasoning-kernel/src/adapters/lib/edgeValidation.ts) so this\n // graph-primitives write path admits the same public edge vocabulary. See the\n // kernel file for the per-group rationale.\n extracted_from: {\n from: [\"L2\", \"L3\", \"L4\"],\n to: [\"L1\", \"L2\", \"L3\"],\n description:\n \"Legacy storage migration alias for derived_from; public writes use derived_from\",\n },\n qualifies: {\n from: [\"L2\", \"L3\"],\n to: [\"L3\"],\n description: \"Evidence/Belief qualifies a Belief\",\n },\n contradicts: {\n from: [\"L2\", \"L3\"],\n to: [\"L3\"],\n description: \"Evidence/Belief contradicts a Belief\",\n },\n reinforces: {\n from: [\"L2\", \"L3\"],\n to: [\"L3\"],\n description: \"Evidence/Belief reinforces a Belief\",\n },\n corroborates: {\n from: [\"L2\", \"L3\"],\n to: [\"L3\"],\n description: \"Independent evidence/belief corroborates a Belief\",\n },\n strengthened_by: {\n from: [\"L3\"],\n to: [\"L2\", \"L3\"],\n description: \"Belief is strengthened by Evidence/Belief\",\n },\n weakened_by: {\n from: [\"L3\"],\n to: [\"L2\", \"L3\"],\n description: \"Belief is weakened by Evidence/Belief\",\n },\n validated_by: {\n from: [\"L3\"],\n to: [\"L2\", \"L3\"],\n description: \"Belief is validated by Evidence/Belief\",\n },\n falsified_by: {\n from: [\"L3\"],\n to: [\"L2\", \"L3\"],\n description: \"Belief is falsified by Evidence/Belief\",\n },\n amplifies: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief amplifies another Belief\",\n },\n precondition_for: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief is a precondition for another Belief\",\n },\n prerequisite_for: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief is a prerequisite for another Belief\",\n },\n required_for: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief is required for another Belief\",\n },\n in_tension_with: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief is in tension with another Belief\",\n },\n mutually_exclusive: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Beliefs cannot both hold\",\n },\n exclusive_with: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief is exclusive with another Belief\",\n },\n alternative_to: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief is an alternative to another Belief\",\n },\n subsumes: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief subsumes a narrower Belief\",\n },\n extends: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief extends another Belief\",\n },\n refines: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief refines another Belief\",\n },\n implements: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief implements an abstract Belief\",\n },\n violates: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief violates a constraint Belief\",\n },\n assumes: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief assumes another Belief\",\n },\n would_predict: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief would predict another Belief\",\n },\n analogous_to: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief is analogous to another Belief\",\n },\n independent_of: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief is independent of another Belief\",\n },\n correlates_with: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief correlates with another Belief\",\n },\n co_changes_with: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief co-changes with another Belief\",\n },\n counterfactual_of: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief is a counterfactual of another Belief\",\n },\n parallel_to: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief runs parallel to another Belief\",\n },\n cascade_from: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Cascade from an upstream Belief\",\n },\n cascade_to: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Cascade to a downstream Belief\",\n },\n collapses_if: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief collapses if another fails\",\n },\n branches_from: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief branches from an ancestor Belief\",\n },\n same_as: {\n from: [\"L2\", \"L3\", \"ontological\"],\n to: [\"L2\", \"L3\", \"ontological\"],\n description: \"Two nodes are the same entity\",\n },\n answers: {\n from: [\"L2\", \"L3\"],\n to: [\"L3\"],\n description: \"Answer/Belief answers a Question\",\n },\n partially_answers: {\n from: [\"L2\", \"L3\"],\n to: [\"L3\"],\n description: \"Answer/Belief partially answers a Question\",\n },\n explores: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Question explores a Belief/Theme\",\n },\n informed_by_theme: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief is informed by a Theme\",\n },\n same_theme_as: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Two Beliefs share a Theme\",\n },\n based_on: {\n from: [\"L4\"],\n to: [\"L3\"],\n description: \"Decision is based on a Belief/Question\",\n },\n based_on_belief: {\n from: [\"L4\"],\n to: [\"L3\"],\n description: \"Decision is based on a Belief\",\n },\n based_on_question: {\n from: [\"L4\"],\n to: [\"L3\"],\n description: \"Decision is based on a Question\",\n },\n blocked_by_contradiction: {\n from: [\"L4\"],\n to: [\"L3\"],\n description: \"Decision is blocked by a Contradiction\",\n },\n parent_of: {\n from: [\"L3\", \"L4\", \"ontological\", \"organizational\"],\n to: [\"L2\", \"L3\", \"ontological\", \"organizational\"],\n description: \"A is the parent of B\",\n },\n child_of: {\n from: [\"L2\", \"L3\", \"ontological\", \"organizational\"],\n to: [\"L3\", \"L4\", \"ontological\", \"organizational\"],\n description: \"A is the child of B\",\n },\n scoped_by: {\n from: [\"L2\", \"L3\"],\n to: [\"L3\", \"organizational\"],\n description: \"Object is scoped by a Topic/Theme\",\n },\n cites: {\n from: [\"L2\", \"L3\"],\n to: [\"L1\", \"L2\"],\n description: \"Evidence/Belief cites a Source/Excerpt\",\n },\n summarizes: {\n from: [\"L2\", \"L3\"],\n to: [\"L1\", \"L2\"],\n description: \"Synthesis/Evidence summarizes a Source/Evidence\",\n },\n same_source_as: {\n from: [\"L1\", \"L2\"],\n to: [\"L1\", \"L2\"],\n description: \"Two nodes derive from the same Source\",\n },\n migrating_from: {\n from: [\"L2\", \"L3\", \"L4\"],\n to: [\"L1\", \"L2\", \"L3\"],\n description: \"Migration lineage: from an ancestor\",\n },\n migrating_to: {\n from: [\"L1\", \"L2\", \"L3\"],\n to: [\"L2\", \"L3\", \"L4\"],\n description: \"Migration lineage: to a successor\",\n },\n about_entity: {\n from: [\"L2\", \"L3\"],\n to: [\"ontological\"],\n description: \"Belief/Evidence is about an Entity\",\n },\n entity_referenced_in: {\n from: [\"ontological\"],\n to: [\"L1\", \"L2\"],\n description: \"Entity is referenced in a Source/Evidence\",\n },\n related_to: {\n from: [\"L2\", \"L3\", \"ontological\", \"organizational\"],\n to: [\"L2\", \"L3\", \"ontological\", \"organizational\"],\n description: \"Lateral adjacency; no confidence pressure\",\n },\n blocks: {\n from: [\"L3\", \"L4\"],\n to: [\"L3\", \"L4\"],\n description: \"A blocks B (structural gate)\",\n },\n};\n\nexport function validateEdgeLayers(\n edgeType: string,\n fromLayer: EpistemicLayer,\n toLayer: EpistemicLayer\n): { valid: boolean; reason?: string } {\n const rules = EDGE_LAYER_RULES[edgeType];\n\n if (!rules) {\n console.warn(\n `[EdgeValidation] Unknown edge type: ${edgeType}, allowing by default`\n );\n return { valid: true };\n }\n\n if (edgeType === \"supersedes\") {\n if (fromLayer !== toLayer) {\n return {\n valid: false,\n reason: `${edgeType} edges must be between nodes of the same layer. Got ${fromLayer} -> ${toLayer}`,\n };\n }\n return { valid: true };\n }\n\n if (!rules.from.includes(fromLayer)) {\n return {\n valid: false,\n reason: `Edge type '${edgeType}' does not allow source layer ${fromLayer}. Allowed: ${rules.from.join(\", \")}`,\n };\n }\n\n if (!rules.to.includes(toLayer)) {\n return {\n valid: false,\n reason: `Edge type '${edgeType}' does not allow target layer ${toLayer}. Allowed: ${rules.to.join(\", \")}`,\n };\n }\n\n if (!isValidLayerConnection(fromLayer, toLayer)) {\n return {\n valid: false,\n reason: `Layer transition ${fromLayer} -> ${toLayer} is not permitted`,\n };\n }\n\n return { valid: true };\n}\n","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.\n/**\n * Belief lifecycle helpers shared across Convex modules.\n *\n * Canonical lifecycle:\n * assumption -> hypothesis -> active -> resolved_true/resolved_false\n * \\-> superseded\n */\n\nexport type BeliefLifecycleStatus =\n | \"assumption\"\n | \"hypothesis\"\n | \"active\"\n | \"superseded\"\n | \"resolved_true\"\n | \"resolved_false\";\n\ntype PredictionOutcome =\n | \"pending\"\n | \"confirmed\"\n | \"disconfirmed\"\n | \"partial\"\n | \"expired\";\n\nconst BELIEF_STATUS_VALUES: readonly BeliefLifecycleStatus[] = [\n \"assumption\",\n \"hypothesis\",\n \"active\",\n \"superseded\",\n \"resolved_true\",\n \"resolved_false\",\n];\n\nconst RESOLVED_PREDICTION_OUTCOMES: readonly PredictionOutcome[] = [\n \"confirmed\",\n \"disconfirmed\",\n \"partial\",\n \"expired\",\n];\n\nexport function isBeliefLifecycleStatus(\n value: unknown\n): value is BeliefLifecycleStatus {\n return (\n typeof value === \"string\" &&\n BELIEF_STATUS_VALUES.includes(value as BeliefLifecycleStatus)\n );\n}\n\nfunction normalizeLegacyBeliefStatus(\n value: unknown\n): BeliefLifecycleStatus | null {\n if (isBeliefLifecycleStatus(value)) {\n return value;\n }\n if (value === \"belief\" || value === \"established\" || value === \"emerging\") {\n return \"active\";\n }\n if (value === \"fact\" || value === \"confirmed\") {\n return \"resolved_true\";\n }\n if (value === \"disconfirmed\" || value === \"expired\") {\n return \"resolved_false\";\n }\n if (value === \"deprecated\") {\n return \"superseded\";\n }\n return null;\n}\n\nfunction normalizeBeliefConfidence(confidence: unknown): number | null {\n if (typeof confidence !== \"number\" || !Number.isFinite(confidence)) {\n return null;\n }\n if (confidence >= 0 && confidence <= 1) {\n return confidence;\n }\n // Backward compatibility with historical percentage-scale confidence (0-100).\n if (confidence > 1 && confidence <= 100) {\n return confidence / 100;\n }\n return null;\n}\n\nexport function isResolvedByConfidence(confidence: unknown): boolean {\n const normalized = normalizeBeliefConfidence(confidence);\n if (normalized === null) {\n return false;\n }\n return normalized <= 0 || normalized >= 1;\n}\n\nexport function hasResolvedPredictionOutcome(predictionMeta: unknown): boolean {\n if (!predictionMeta || typeof predictionMeta !== \"object\") {\n return false;\n }\n const outcome = (predictionMeta as { outcome?: unknown }).outcome;\n return (\n typeof outcome === \"string\" &&\n RESOLVED_PREDICTION_OUTCOMES.includes(outcome as PredictionOutcome)\n );\n}\n\nfunction getPredictionMetaFromMetadata(\n metadata: Record<string, unknown> | undefined\n): unknown {\n return metadata?.predictionMeta;\n}\n\nexport function shouldTreatBeliefAsFact(opts: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): boolean {\n if (isResolvedByConfidence(opts.confidence)) {\n return true;\n }\n if (hasResolvedPredictionOutcome(opts.predictionMeta)) {\n return true;\n }\n if (\n hasResolvedPredictionOutcome(getPredictionMetaFromMetadata(opts.metadata))\n ) {\n return true;\n }\n return false;\n}\n\nfunction resolvedPredictionStatus(\n predictionMeta: unknown\n): BeliefLifecycleStatus | null {\n if (!predictionMeta || typeof predictionMeta !== \"object\") {\n return null;\n }\n const outcome = (predictionMeta as { outcome?: unknown }).outcome;\n if (outcome === \"confirmed\") {\n return \"resolved_true\";\n }\n if (outcome === \"disconfirmed\" || outcome === \"expired\") {\n return \"resolved_false\";\n }\n return null;\n}\n\nfunction shouldTreatBeliefAsResolved(opts: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): BeliefLifecycleStatus | null {\n if (isResolvedByConfidence(opts.confidence)) {\n const normalized = normalizeBeliefConfidence(opts.confidence);\n return normalized === 0 ? \"resolved_false\" : \"resolved_true\";\n }\n const directPredictionStatus = resolvedPredictionStatus(opts.predictionMeta);\n if (directPredictionStatus) {\n return directPredictionStatus;\n }\n const metadataPredictionStatus = resolvedPredictionStatus(\n getPredictionMetaFromMetadata(opts.metadata)\n );\n if (metadataPredictionStatus) {\n return metadataPredictionStatus;\n }\n return null;\n}\n\nexport function resolveBeliefLifecycleStatus(opts: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): BeliefLifecycleStatus {\n const resolvedStatus = shouldTreatBeliefAsResolved(opts);\n if (resolvedStatus) {\n return resolvedStatus;\n }\n\n const direct = opts.beliefStatus;\n const normalizedDirect = normalizeLegacyBeliefStatus(direct);\n if (normalizedDirect) {\n // If the belief has been scored (has numeric credence) but stored status\n // is still pre-validation, promote to active. Evidence, not user intent,\n // makes a hypothesis active.\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (normalized !== null && isPreValidationBeliefStatus(normalizedDirect)) {\n return \"active\";\n }\n return normalizedDirect;\n }\n\n const metaStatus = opts.metadata?.beliefStatus;\n const normalizedMetaStatus = normalizeLegacyBeliefStatus(metaStatus);\n if (normalizedMetaStatus) {\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (\n normalized !== null &&\n isPreValidationBeliefStatus(normalizedMetaStatus)\n ) {\n return \"active\";\n }\n return normalizedMetaStatus;\n }\n\n return \"assumption\";\n}\n\nexport function isPreValidationBeliefStatus(\n status: BeliefLifecycleStatus\n): boolean {\n return status === \"assumption\" || status === \"hypothesis\";\n}\n\nexport function isPropagationEligibleBeliefStatus(\n status: BeliefLifecycleStatus\n): boolean {\n return status === \"active\" || status === \"resolved_true\";\n}\n\nexport function promoteBeliefStatusAfterScoring(\n status: BeliefLifecycleStatus,\n opts?: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n }\n): BeliefLifecycleStatus {\n const resolvedStatus = shouldTreatBeliefAsResolved({ ...opts });\n if (resolvedStatus) {\n return resolvedStatus;\n }\n if (isPreValidationBeliefStatus(status)) {\n return \"active\";\n }\n return status;\n}\n\nexport function promoteBeliefStatusAfterEvidence(\n status: BeliefLifecycleStatus\n): BeliefLifecycleStatus {\n return isPreValidationBeliefStatus(status) ? \"active\" : status;\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.\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","// 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 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.\n/**\n * Epistemic Beliefs API\n *\n * Clean API for managing beliefs in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces beliefs.ts.\n *\n * Key differences from beliefs.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no runtime ID translation fallback)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport {\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { throwStructuredMutationError } from \"@lucern/access-control/structuredMutationError\";\nimport {\n type ConfidencePolicyConfig,\n confidenceFromSL,\n mkOpinion,\n normalizeTupleContradictionPolicy,\n type Opinion,\n readOpinionFromRecord,\n type SLOperator,\n type SLOpinion,\n} from \"@lucern/confidence\";\nimport { v } from \"convex/values\";\nimport {\n type BeliefLifecycleStatus,\n resolveBeliefLifecycleStatus,\n} from \"./beliefLifecycle\";\nimport type { Id, QueryCtx } from \"./convex\";\nimport { internal } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport type { VerificationConfidenceTrigger } from \"./epistemicContractHelpers\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport { nodeMatchesWorkspaceReasoningScope } from \"./workspaceIsolation\";\n\n// All IDs now use epistemicNodes exclusively\nexport const insightIdUnion = v.id(\"epistemicNodes\");\nconst DEFAULT_PROJECT_BELIEF_LIMIT = 250;\nexport const MAX_PROJECT_BELIEF_LIMIT = 1000;\nexport const optionalBeliefScopeArgs = optionalScopeArgs;\n\n// CQ.11: the structured-refusal primitive is the single shared copy in\n// `@lucern/access-control/structuredMutationError` (the same home the shared\n// access gate throws from). Re-exported here so the graph-primitives modules\n// that imported it from this helper keep their import path unchanged.\nexport type { StructuredMutationErrorData } from \"@lucern/access-control/structuredMutationError\";\n// biome-ignore lint/performance/noBarrelFile: Public helper compatibility re-export retained for existing graph-primitives consumers.\nexport { throwStructuredMutationError } from \"@lucern/access-control/structuredMutationError\";\n\ninterface BeliefScopeArgs {\n projectId?: string | null;\n topicId?: string | null;\n}\n\ninterface EpistemicNodeOpinionSource {\n _id?: unknown;\n metadata?: Record<string, unknown> | null;\n opinion_a?: number;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n tupleContradicted?: boolean;\n userId?: string;\n}\n\nexport interface EpistemicNodeOpinionDoc extends EpistemicNodeOpinionSource {\n _creationTime?: number;\n _id: Id<\"epistemicNodes\">;\n anonymizationClass?: string;\n audienceLabel?: string;\n beliefStatus?: unknown;\n canonicalText?: string;\n confidence?: unknown;\n createdAt?: number;\n createdBy?: string;\n epistemicLayer?: string;\n exportClass?: string;\n globalId?: string;\n metadata?: Record<string, unknown> | null;\n nodeType: \"belief\";\n policyTags?: string[];\n predictionMeta?: unknown;\n projectId?: string;\n publicationStatus?: string;\n sensitivityTier?: string;\n status?: string;\n tenantId?: string;\n topicId?: string;\n updatedAt?: number;\n workspaceId?: string;\n}\n\ninterface EpistemicIndexQuery {\n eq(field: string, value: unknown): EpistemicIndexQuery;\n field(field: string): string;\n gt(field: string, value: unknown): EpistemicIndexQuery;\n lt(field: string, value: unknown): EpistemicIndexQuery;\n}\n\ntype EpistemicBeliefCtx = QueryCtx;\n\ntype AudienceClass = \"internal\" | \"restricted_external\" | \"public\";\n\nconst DEFAULT_CONFIDENCE_POLICY: ConfidencePolicyConfig = {\n scoringMode: \"after_worktree\",\n tupleContradiction: normalizeTupleContradictionPolicy(),\n};\n\nexport type BeliefConfidenceTrigger =\n | \"initial\"\n | \"evidence_added\"\n | \"evidence_removed\"\n | \"contradiction_detected\"\n | \"contradiction_resolved\"\n | \"propagation\"\n | \"agent_assessment\"\n | \"worktree_outcome\"\n | \"worktree_completed\"\n // SL-specific triggers\n | \"fusion\"\n | \"discount\"\n | \"deduction\"\n | \"backfill_synthetic\"\n | VerificationConfidenceTrigger;\n\nexport function readFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return;\n }\n const strings = value.filter(\n (item): item is string => typeof item === \"string\" && item.length > 0\n );\n return strings.length === value.length ? strings : undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nexport function readBeliefNodeView(\n value: unknown\n): EpistemicNodeOpinionDoc | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readOptionalString(value._id) as Id<\"epistemicNodes\"> | undefined;\n const nodeType = readOptionalString(value.nodeType);\n if (!(id && nodeType === \"belief\")) {\n return null;\n }\n\n const node: EpistemicNodeOpinionDoc = {\n _id: id,\n nodeType,\n };\n const creationTime = readFiniteNumber(value._creationTime);\n if (creationTime !== undefined) {\n node._creationTime = creationTime;\n }\n const metadata = readRecord(value.metadata);\n if (metadata !== undefined) {\n node.metadata = metadata;\n }\n const opinionA = readFiniteNumber(value.opinion_a);\n if (opinionA !== undefined) {\n node.opinion_a = opinionA;\n }\n const opinionB = readFiniteNumber(value.opinion_b);\n if (opinionB !== undefined) {\n node.opinion_b = opinionB;\n }\n const opinionD = readFiniteNumber(value.opinion_d);\n if (opinionD !== undefined) {\n node.opinion_d = opinionD;\n }\n const opinionU = readFiniteNumber(value.opinion_u);\n if (opinionU !== undefined) {\n node.opinion_u = opinionU;\n }\n const tupleContradicted =\n typeof value.tupleContradicted === \"boolean\"\n ? value.tupleContradicted\n : undefined;\n if (tupleContradicted !== undefined) {\n node.tupleContradicted = tupleContradicted;\n }\n\n const stringFields = {\n anonymizationClass: value.anonymizationClass,\n audienceLabel: value.audienceLabel,\n canonicalText: value.canonicalText,\n createdBy: value.createdBy,\n epistemicLayer: value.epistemicLayer,\n exportClass: value.exportClass,\n globalId: value.globalId,\n projectId: value.projectId,\n publicationStatus: value.publicationStatus,\n sensitivityTier: value.sensitivityTier,\n status: value.status,\n tenantId: value.tenantId,\n topicId: value.topicId,\n userId: value.userId,\n workspaceId: value.workspaceId,\n };\n for (const [field, fieldValue] of Object.entries(stringFields)) {\n const normalized = readOptionalString(fieldValue);\n if (normalized !== undefined) {\n node[field as keyof typeof stringFields] = normalized;\n }\n }\n\n const createdAt = readFiniteNumber(value.createdAt);\n if (createdAt !== undefined) {\n node.createdAt = createdAt;\n }\n const updatedAt = readFiniteNumber(value.updatedAt);\n if (updatedAt !== undefined) {\n node.updatedAt = updatedAt;\n }\n if (value.beliefStatus !== undefined) {\n node.beliefStatus = value.beliefStatus;\n }\n if (value.confidence !== undefined) {\n node.confidence = value.confidence;\n }\n if (value.predictionMeta !== undefined) {\n node.predictionMeta = value.predictionMeta;\n }\n const policyTags = readStringArray(value.policyTags);\n if (policyTags !== undefined) {\n node.policyTags = policyTags;\n }\n\n return node;\n}\n\nfunction readBeliefNodeViews(\n values: readonly unknown[]\n): EpistemicNodeOpinionDoc[] {\n return values.flatMap((value) => {\n const node = readBeliefNodeView(value);\n return node ? [node] : [];\n });\n}\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nexport function assertBaseRateInRange(\n baseRate: number,\n field = \"baseRate\"\n): number {\n if (baseRate < 0 || baseRate > 1) {\n throwStructuredMutationError({\n message: `${field} must be within [0, 1].`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Clamp ${field} into the inclusive [0, 1] interval.`,\n details: { field, baseRate },\n });\n }\n return baseRate;\n}\n\nexport function buildBeliefConfidenceRow(args: {\n beliefId: Id<\"epistemicNodes\">;\n belief: number;\n disbelief: number;\n uncertainty: number;\n baseRate: number;\n trigger: BeliefConfidenceTrigger;\n rationale?: string;\n assessedBy: string;\n assessedAt: number;\n slOperator?: SLOperator;\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringContradictionId?: Id<\"contradictions\">;\n triggeringWorktreeId?: string;\n}) {\n return {\n beliefId: args.beliefId,\n confidence: confidenceFromSL(\n args.belief,\n args.disbelief,\n args.uncertainty,\n args.baseRate\n ),\n belief: args.belief,\n disbelief: args.disbelief,\n uncertainty: args.uncertainty,\n baseRate: args.baseRate,\n slOperator: args.slOperator ?? (\"prior_seed\" as const),\n trigger: args.trigger,\n ...(args.rationale ? { rationale: args.rationale } : {}),\n assessedBy: args.assessedBy,\n assessedAt: args.assessedAt,\n ...(args.triggeringEvidenceId\n ? {\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringEvidenceIds: [String(args.triggeringEvidenceId)],\n }\n : {}),\n ...(args.triggeringContradictionId\n ? {\n triggeringContradictionId: args.triggeringContradictionId,\n }\n : {}),\n ...(args.triggeringWorktreeId\n ? { triggeringWorktreeId: args.triggeringWorktreeId }\n : {}),\n };\n}\n\ntype BeliefStatusResult =\n | { success: true }\n | { success: false; message: \"Evidence node not found\" };\n\nexport function buildBeliefStatusSuccessResult(): BeliefStatusResult {\n return { success: true };\n}\n\nexport function buildBeliefEvidenceNotFoundResult(): BeliefStatusResult {\n const result = {} as Extract<BeliefStatusResult, { success: false }>;\n result.success = false;\n result.message = \"Evidence node not found\";\n return result;\n}\n\nexport function deriveSyntheticBackfillOpinion(\n source: Record<string, unknown>\n): SLOpinion {\n const belief =\n readFiniteNumber(source.opinion_b) ?? readFiniteNumber(source.belief);\n const disbelief =\n readFiniteNumber(source.opinion_d) ?? readFiniteNumber(source.disbelief);\n const uncertainty =\n readFiniteNumber(source.opinion_u) ?? readFiniteNumber(source.uncertainty);\n const baseRate =\n readFiniteNumber(source.opinion_a) ?? readFiniteNumber(source.baseRate);\n\n if (\n belief !== undefined ||\n disbelief !== undefined ||\n uncertainty !== undefined ||\n baseRate !== undefined\n ) {\n try {\n return readOpinionFromRecord(source);\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to decode legacy belief opinion\",\n {\n error,\n }\n );\n return mkOpinion(0, 0, 1, 0.5);\n }\n }\n\n const confidence = clamp01(readFiniteNumber(source.confidence) ?? 0);\n return mkOpinion(confidence, 1 - confidence, 0, 0.5);\n}\n\nexport function clampBeliefLimit(\n limit: number | undefined,\n fallback = DEFAULT_PROJECT_BELIEF_LIMIT\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_PROJECT_BELIEF_LIMIT)\n );\n}\n\nexport function readTupleContradictedFlag(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nexport function readBeliefOpinionSnapshot(\n node: EpistemicNodeOpinionSource,\n metadata: Record<string, unknown>\n): SLOpinion {\n try {\n return readOpinionFromRecord({\n ...metadata,\n opinion_b: node.opinion_b,\n opinion_d: node.opinion_d,\n opinion_u: node.opinion_u,\n opinion_a: node.opinion_a,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to read belief opinion snapshot\",\n {\n error,\n beliefId: node._id,\n }\n );\n return mkOpinion(0, 0, 1, 0.5);\n }\n}\n\nexport function deriveTupleContradictionSeverity(node: {\n metadata?: Record<string, unknown> | null;\n}): \"critical\" | \"significant\" | \"minor\" {\n const metadata = node.metadata || {};\n const criticality =\n typeof metadata.criticality === \"string\" ? metadata.criticality : undefined;\n\n if (criticality === \"blocking\") {\n return \"critical\";\n }\n if (criticality === \"supporting\") {\n return \"minor\";\n }\n return \"significant\";\n}\n\nexport function formatTupleContradictionDescription(args: {\n opinion: Opinion;\n policy: ConfidencePolicyConfig[\"tupleContradiction\"];\n}): string {\n return `Tuple-space contradiction detected: b=${args.opinion.b.toFixed(2)} > ${args.policy.beliefThreshold.toFixed(2)} and d=${args.opinion.d.toFixed(2)} > ${args.policy.disbeliefThreshold.toFixed(2)}.`;\n}\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nexport function generateContentHash(text: string): string {\n const content = `belief:${text.trim().toLowerCase().replace(/\\s+/g, \" \")}`;\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 belief metadata compatibility.\n hash = (hash << 5) + hash + content.charCodeAt(i);\n // biome-ignore lint/suspicious/noBitwiseOperators: Preserve deterministic djb2 hash semantics for persisted belief metadata compatibility.\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\nexport function resolveBeliefWorktreeId(\n metadata: Record<string, unknown> | undefined\n): string | undefined {\n const worktreeId = metadata?.worktreeId;\n if (typeof worktreeId === \"string\" && worktreeId.trim().length > 0) {\n return worktreeId;\n }\n\n const sprintId = metadata?.sprintId;\n return typeof sprintId === \"string\" && sprintId.trim().length > 0\n ? sprintId\n : undefined;\n}\n\n// Map pillar names to valid pillar literals\ntype ValidPillar =\n | \"market\"\n | \"competition\"\n | \"product\"\n | \"team\"\n | \"financials\"\n | \"regulatory\"\n | \"timing\"\n | \"customer\"\n | \"technology\"\n | \"distribution\"\n | \"deal\"\n | \"risks\"\n | \"other\";\n\nexport function normalizePillar(pillar?: string): ValidPillar {\n if (!pillar) {\n return \"other\";\n }\n const lower = pillar.toLowerCase();\n const validPillars: ValidPillar[] = [\n \"market\",\n \"competition\",\n \"product\",\n \"team\",\n \"financials\",\n \"regulatory\",\n \"timing\",\n \"customer\",\n \"technology\",\n \"distribution\",\n \"deal\",\n \"risks\",\n ];\n return (validPillars.find((p) => lower.includes(p)) ||\n \"other\") as ValidPillar;\n}\n\nexport async function markBeliefGraphDirty(\n ctx: EpistemicBeliefCtx,\n scope: { projectId?: string | null; topicId?: string | null }\n): Promise<void> {\n const projectId =\n typeof scope.projectId === \"string\" && scope.projectId.trim().length > 0\n ? scope.projectId\n : undefined;\n const topicId =\n typeof scope.topicId === \"string\" && scope.topicId.trim().length > 0\n ? scope.topicId\n : undefined;\n\n if (!(projectId || topicId)) {\n return;\n }\n\n if (projectId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n { projectId }\n );\n }\n if (topicId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleByTopic,\n { topicId }\n );\n }\n\n const activityScopeId = topicId ?? projectId;\n if (!activityScopeId) {\n throw new Error(\n \"Expected belief graph dirty scope to include a topic or project id.\"\n );\n }\n\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n activityScopeId,\n {\n lastActivityAt: Date.now(),\n }\n );\n}\n\nexport async function resolveBeliefScopeOrNull(\n ctx: QueryCtx,\n args: BeliefScopeArgs\n) {\n if (!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 \"[epistemicBeliefs] Failed to resolve belief scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n }\n );\n return null;\n }\n}\n\nexport async function getBeliefNodesForScope(\n ctx: EpistemicBeliefCtx,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n args?: { scanLimit?: number; status?: string }\n) {\n const baseQuery = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: EpistemicIndexQuery) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n );\n const rows =\n typeof args?.scanLimit === \"number\"\n ? await baseQuery.order(\"desc\").take(args.scanLimit)\n : await baseQuery.collect();\n const nodes = readBeliefNodeViews(rows);\n const scopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, scope)\n );\n\n if (!args?.status) {\n return scopedNodes;\n }\n\n return scopedNodes.filter(\n (node: EpistemicNodeOpinionDoc) => node.status === args.status\n );\n}\n\nexport function createBeliefAudienceResolver(\n registryRows: Array<{\n audienceKey?: string | null;\n audienceClass: AudienceClass;\n }>\n) {\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 flattenBeliefNode(node: EpistemicNodeOpinionDoc) {\n const meta = node.metadata || {};\n const worktreeId = resolveBeliefWorktreeId(meta);\n const tupleContradicted =\n readTupleContradictedFlag(node.tupleContradicted) ??\n readTupleContradictedFlag(meta.tupleContradicted) ??\n false;\n\n return {\n _id: node._id,\n _epistemicNodeId: node._id,\n _creationTime: node._creationTime,\n belief: node.canonicalText,\n formulation: node.canonicalText,\n projectId: node.projectId,\n topicId: node.topicId,\n userId: node.userId || node.createdBy || \"\",\n confidence: (meta.confidence as \"high\" | \"medium\" | \"low\") || \"untested\",\n status: node.status,\n beliefStatus: resolveBeliefStatus(node, meta),\n topic: (meta.topic as string) || (meta.pillar as string) || \"other\",\n pillar: (meta.pillar as string) || (meta.topic as string) || \"\",\n category: (meta.category as string) || \"\",\n subcategory: (meta.subcategory as string) || \"\",\n categoryIcon: (meta.categoryIcon as string) || \"\",\n supportingEvidence: (meta.supportingEvidenceIds as string[]) || [],\n contradictingEvidence: (meta.contradictingEvidenceIds as string[]) || [],\n testingQuestions: (meta.testingQuestionIds as string[]) || [],\n linkedInsights: (meta.linkedInsightIds as string[]) || [],\n createdAt: node.createdAt,\n updatedAt: node.updatedAt || node.createdAt,\n tupleContradicted,\n sprintId: (meta.sprintId as string) || undefined,\n worktreeId,\n sourceBeliefIds: (meta.sourceBeliefIds as string[]) || undefined,\n criticality:\n (meta.criticality as\n | \"critical\"\n | \"supporting\"\n | \"nice_to_have\"\n | \"unanalyzed\"\n | \"blocking\"\n | \"important\") || \"unanalyzed\",\n rationale: (meta.rationale as string) || \"\",\n audienceLabel: node.audienceLabel,\n policyTags: node.policyTags,\n sensitivityTier: node.sensitivityTier,\n exportClass: node.exportClass,\n anonymizationClass: node.anonymizationClass,\n };\n}\n\nexport function resolveBeliefStatus(\n node: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n },\n metadata: Record<string, unknown>\n): BeliefLifecycleStatus {\n return resolveBeliefLifecycleStatus({\n beliefStatus: node.beliefStatus,\n confidence: node.confidence,\n predictionMeta: node.predictionMeta,\n metadata,\n });\n}\n\nexport async function hasCompletedWorktreeForBelief(\n ctx: EpistemicBeliefCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<boolean> {\n // Check if the belief is linked to a completed worktree via worktreeBeliefCluster\n const clusterMembership = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_belief\", (q: EpistemicIndexQuery) =>\n q.eq(\"beliefId\", beliefNodeId)\n )\n .collect();\n for (const membership of clusterMembership) {\n const worktree = await ctx.db.get(membership.worktreeId);\n if (worktree?.status === \"completed\" || worktree?.status === \"merged\") {\n return true;\n }\n }\n return false;\n}\n\nexport async function getActiveConfidencePolicy(\n ctx: EpistemicBeliefCtx\n): Promise<ConfidencePolicyConfig> {\n try {\n const activeConfig = await ctx.db\n .query(\"logicSprintScoring\")\n .withIndex(\"by_active\", (q: EpistemicIndexQuery) =>\n q.eq(\"isActive\", true)\n )\n .first();\n\n return {\n scoringMode:\n activeConfig?.confidencePolicy === \"always\"\n ? \"always\"\n : DEFAULT_CONFIDENCE_POLICY.scoringMode,\n tupleContradiction: normalizeTupleContradictionPolicy(\n activeConfig?.tupleContradictionPolicy as\n | Partial<ConfidencePolicyConfig[\"tupleContradiction\"]>\n | undefined\n ),\n };\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to load active confidence policy\",\n {\n error,\n }\n );\n // K-tier/component environments do not carry logicSprintScoring.\n return DEFAULT_CONFIDENCE_POLICY;\n }\n}\n\nexport async function requireAuthenticatedUserId(ctx: {\n auth: { getUserIdentity: () => Promise<unknown> };\n}): Promise<string> {\n const userId = await getCurrentUserId(\n ctx as Parameters<typeof getCurrentUserId>[0]\n );\n if (!userId) {\n throwStructuredMutationError({\n message: \"Authentication required.\",\n status: 401,\n code: \"AUTHENTICATION_REQUIRED\",\n invariantCode: \"auth.required\",\n suggestion:\n \"Provide a valid bearer token before invoking belief mutations.\",\n });\n }\n return userId;\n}\n","/** Split belief administrative mutations out of epistemicBeliefs.ts. */\n\n// biome-ignore-all lint/style/useFilenamingConvention: Public ABI filename consumed by existing import paths.\n\nimport { requireScopeWriteAccess } from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal, mutation, query } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport {\n buildBeliefStatusSuccessResult,\n clampBeliefLimit,\n getBeliefNodesForScope,\n MAX_PROJECT_BELIEF_LIMIT,\n optionalBeliefScopeArgs,\n requireAuthenticatedUserId,\n resolveBeliefScopeOrNull,\n} from \"./epistemicBeliefs.helpers\";\nimport { resolveTopicProjectScope } from \"./topicScope\";\n\ntype Criticality =\n | \"blocking\"\n | \"essential\"\n | \"important\"\n | \"nice_to_have\"\n | \"supporting\";\n\ntype BeliefStatus = \"active\" | \"archived\" | \"superseded\";\n\ntype Pillar =\n | \"competition\"\n | \"customer\"\n | \"deal\"\n | \"distribution\"\n | \"financials\"\n | \"market\"\n | \"other\"\n | \"product\"\n | \"regulatory\"\n | \"risks\"\n | \"team\"\n | \"technology\"\n | \"timing\";\n\ninterface BeliefScopeArgs {\n projectId?: string;\n topicId?: string;\n}\n\ninterface DeleteRelationshipArgs {\n edgeId: Id<\"epistemicEdges\">;\n userId: string;\n}\n\ninterface UpdateCriticalityArgs {\n criticality: Criticality;\n nodeId: Id<\"epistemicNodes\">;\n userId: string;\n}\n\ninterface CriticalityUpdate {\n beliefId: Id<\"epistemicNodes\">;\n blockedByBeliefIds?: string[];\n criticality: Criticality;\n dependentBeliefIds?: string[];\n ifFalseImpact?: string;\n reasoning?: string;\n triagePriority?: number;\n}\n\ninterface BatchUpdateCriticalityArgs {\n updates: CriticalityUpdate[];\n userId: string;\n}\n\ninterface GetByCriticalityArgs extends BeliefScopeArgs {\n criticality: Criticality;\n}\n\ninterface GetUnanalyzedArgs extends BeliefScopeArgs {\n limit?: number;\n}\n\ninterface GetByProjectSystemArgs extends BeliefScopeArgs {\n audienceMode?: string;\n limit?: number;\n status?: BeliefStatus;\n}\n\ninterface GetByPillarArgs extends BeliefScopeArgs {\n pillar: Pillar;\n status?: BeliefStatus;\n}\n\ninterface GetWorktreeClusterArgs {\n userId?: string;\n worktreeId: string;\n}\n\ninterface BeliefAdminNode {\n _id: Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n nodeType?: string;\n projectId?: string;\n status?: string;\n}\n\ninterface BeliefAdminEdge {\n _id: Id<\"epistemicEdges\">;\n context?: string;\n edgeType?: string;\n fromNodeId?: Id<\"epistemicNodes\">;\n globalId?: string;\n projectId?: string;\n toNodeId?: Id<\"epistemicNodes\">;\n weight?: number;\n}\n\ninterface WorktreeBeliefClusterLink {\n beliefId: Id<\"epistemicNodes\">;\n}\n\nfunction worktreeId(value: string): Id<\"worktrees\"> {\n return value as Id<\"worktrees\">;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? (value as Id<TableName>)\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 readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nfunction readBeliefAdminNode(value: unknown): BeliefAdminNode | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(value._id);\n if (!id) {\n return null;\n }\n\n const node: BeliefAdminNode = { _id: id };\n const metadata = readRecord(value.metadata);\n const nodeType = readOptionalString(value.nodeType);\n const projectId = readOptionalString(value.projectId);\n const status = readOptionalString(value.status);\n\n if (metadata !== undefined) {\n node.metadata = metadata;\n }\n if (nodeType !== undefined) {\n node.nodeType = nodeType;\n }\n if (projectId !== undefined) {\n node.projectId = projectId;\n }\n if (status !== undefined) {\n node.status = status;\n }\n\n return node;\n}\n\nfunction readBeliefAdminEdge(value: unknown): BeliefAdminEdge | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readConvexId<\"epistemicEdges\">(value._id);\n if (!id) {\n return null;\n }\n\n const edge: BeliefAdminEdge = { _id: id };\n const context = readOptionalString(value.context);\n const edgeType = readOptionalString(value.edgeType);\n const fromNodeId = readConvexId<\"epistemicNodes\">(value.fromNodeId);\n const globalId = readOptionalString(value.globalId);\n const projectId = readOptionalString(value.projectId);\n const toNodeId = readConvexId<\"epistemicNodes\">(value.toNodeId);\n const weight = readOptionalNumber(value.weight);\n\n if (context !== undefined) {\n edge.context = context;\n }\n if (edgeType !== undefined) {\n edge.edgeType = edgeType;\n }\n if (fromNodeId !== undefined) {\n edge.fromNodeId = fromNodeId;\n }\n if (globalId !== undefined) {\n edge.globalId = globalId;\n }\n if (projectId !== undefined) {\n edge.projectId = projectId;\n }\n if (toNodeId !== undefined) {\n edge.toNodeId = toNodeId;\n }\n if (weight !== undefined) {\n edge.weight = weight;\n }\n\n return edge;\n}\n\nfunction readWorktreeBeliefClusterLink(\n value: unknown\n): WorktreeBeliefClusterLink | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const beliefId = readConvexId<\"epistemicNodes\">(value.beliefId);\n return beliefId ? { beliefId } : null;\n}\n\nfunction readRowList<T>(\n values: readonly unknown[],\n reader: (value: unknown) => T | null\n): T[] {\n return values.flatMap((value) => {\n const row = reader(value);\n return row ? [row] : [];\n });\n}\n\nexport const deleteRelationship = mutation({\n args: {\n edgeId: v.id(\"epistemicEdges\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: DeleteRelationshipArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const edge = readBeliefAdminEdge(await ctx.db.get(args.edgeId));\n if (!edge) {\n throw new Error(\"Edge not found\");\n }\n if (!edge.projectId) {\n throw new Error(\"Edge has no project scope\");\n }\n await requireScopeWriteAccess(ctx, edge.projectId, authenticatedUserId);\n\n // Store for audit\n const previousState = {\n fromNodeId: edge.fromNodeId,\n toNodeId: edge.toNodeId,\n edgeType: edge.edgeType,\n };\n\n // Delete via Neo4j authority path\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId ?? String(args.edgeId),\n });\n await ctx.db.delete(args.edgeId);\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edge.globalId ?? String(args.edgeId),\n changeType: \"edge_removed\",\n previousState,\n newState: null,\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: edge.projectId,\n });\n\n return buildBeliefStatusSuccessResult();\n },\n});\n\n// =============================================================================\n// UPDATE CRITICALITY\n// =============================================================================\n\n/**\n * Update a belief's criticality level.\n */\nexport const updateCriticality = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n criticality: v.union(\n v.literal(\"blocking\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"essential\"),\n v.literal(\"nice_to_have\")\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateCriticalityArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = readBeliefAdminNode(await ctx.db.get(args.nodeId));\n if (node?.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireScopeWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const metadata = node.metadata ?? {};\n const previousCriticality = metadata.criticality;\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n criticality: args.criticality,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"criticality_changed\",\n previousState: { criticality: previousCriticality as string | undefined },\n newState: { criticality: args.criticality },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return {\n nodeId: args.nodeId,\n previousCriticality,\n newCriticality: args.criticality,\n };\n },\n});\n\n// =============================================================================\n// BATCH UPDATE CRITICALITY\n// =============================================================================\n\n/**\n * Batch update criticality for multiple beliefs.\n * Uses canonical epistemicNodes IDs.\n */\nexport const batchUpdateCriticality = mutation({\n args: {\n updates: v.array(\n v.object({\n beliefId: v.id(\"epistemicNodes\"),\n criticality: v.union(\n v.literal(\"blocking\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"essential\"),\n v.literal(\"nice_to_have\")\n ),\n ifFalseImpact: v.optional(v.string()),\n triagePriority: v.optional(v.number()),\n reasoning: v.optional(v.string()),\n dependentBeliefIds: v.optional(v.array(v.string())),\n blockedByBeliefIds: v.optional(v.array(v.string())),\n })\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: BatchUpdateCriticalityArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n const results: Array<{\n beliefId: string;\n nodeId?: Id<\"epistemicNodes\">;\n success: boolean;\n }> = [];\n\n for (const update of args.updates) {\n try {\n const node = readBeliefAdminNode(await ctx.db.get(update.beliefId));\n\n if (node?.nodeType !== \"belief\") {\n results.push({ beliefId: update.beliefId, success: false });\n continue;\n }\n if (!node.projectId) {\n results.push({ beliefId: update.beliefId, success: false });\n continue;\n }\n await requireScopeWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const metadata = node.metadata ?? {};\n const previousCriticality = metadata.criticality as string | undefined;\n\n await ctx.db.patch(node._id, {\n metadata: {\n ...metadata,\n criticality: update.criticality,\n ifFalseImpact: update.ifFalseImpact,\n triagePriority: update.triagePriority,\n criticalityReasoning: update.reasoning,\n dependentBeliefIds: update.dependentBeliefIds,\n blockedByBeliefIds: update.blockedByBeliefIds,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: node._id,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: node._id,\n changeType: \"criticality_changed\",\n previousState: { criticality: previousCriticality },\n newState: { criticality: update.criticality },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n results.push({\n beliefId: update.beliefId,\n nodeId: node._id,\n success: true,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to update belief criticality\",\n {\n error,\n beliefId: update.beliefId,\n }\n );\n results.push({ beliefId: update.beliefId, success: false });\n }\n }\n\n return { results, updatedCount: results.filter((r) => r.success).length };\n },\n});\n\n// =============================================================================\n// GET BY CRITICALITY\n// =============================================================================\n\n/**\n * Get beliefs by criticality level.\n */\nexport const getByCriticality = query({\n args: {\n ...optionalBeliefScopeArgs,\n criticality: v.union(\n v.literal(\"blocking\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"essential\"),\n v.literal(\"nice_to_have\")\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetByCriticalityArgs) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope);\n\n return nodes.filter((n) => {\n const metadata = readRecord(n.metadata);\n return (\n metadata?.criticality === args.criticality && n.status === \"active\"\n );\n });\n },\n});\n\n// =============================================================================\n// GET UNANALYZED BELIEFS (for BI agents)\n// =============================================================================\n\n/**\n * Get beliefs that haven't been analyzed yet.\n * Used by BI agents for batch processing.\n */\nexport const getUnanalyzed = query({\n args: {\n ...optionalBeliefScopeArgs,\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetUnanalyzedArgs) => {\n const limit = args.limit || 50;\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope);\n\n // Filter for unanalyzed beliefs (no criticality set, active status)\n const unanalyzed = nodes.filter((n) => {\n const metadata = readRecord(n.metadata);\n return !metadata?.criticality && n.status === \"active\";\n });\n\n return unanalyzed.slice(0, limit);\n },\n});\n\n// =============================================================================\n// GET BY PROJECT (SYSTEM - no auth check)\n// =============================================================================\n\n/**\n * Get all beliefs for a project (system level - no auth check).\n * Used by BI agents and thesis audit agents.\n */\nexport const getByProjectSystem = query({\n args: {\n ...optionalBeliefScopeArgs,\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetByProjectSystemArgs) => {\n const pageSize = clampBeliefLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope, { scanLimit });\n\n // Filter by status if provided\n if (args.status) {\n return nodes.filter((n) => n.status === args.status).slice(0, pageSize);\n }\n\n // Default: return active beliefs\n return nodes.filter((n) => n.status === \"active\").slice(0, pageSize);\n },\n});\n\n// =============================================================================\n// GET BY PILLAR\n// =============================================================================\n\n/**\n * Get beliefs filtered by pillar/topic.\n */\nexport const getByPillar = query({\n args: {\n ...optionalBeliefScopeArgs,\n pillar: v.union(\n v.literal(\"market\"),\n v.literal(\"competition\"),\n v.literal(\"product\"),\n v.literal(\"team\"),\n v.literal(\"financials\"),\n v.literal(\"regulatory\"),\n v.literal(\"timing\"),\n v.literal(\"customer\"),\n v.literal(\"technology\"),\n v.literal(\"distribution\"),\n v.literal(\"deal\"),\n v.literal(\"risks\"),\n v.literal(\"other\")\n ),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetByPillarArgs) => {\n if (!args.topicId) {\n return [];\n }\n\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 \"[epistemicBeliefs] Failed to resolve criticality scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n }\n );\n return [];\n }\n\n const nodes = readRowList(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n )\n .collect(),\n readBeliefAdminNode\n );\n\n return nodes.filter((n) => {\n const metadata = n.metadata;\n const matchesPillar = metadata?.pillar === args.pillar;\n const matchesStatus = args.status\n ? n.status === args.status\n : n.status === \"active\";\n return matchesPillar && matchesStatus;\n });\n },\n});\n\n// =============================================================================\n// GET WORKTREE CLUSTER\n// =============================================================================\n\n/**\n * Get the belief cluster for a worktree.\n * Returns all beliefs linked to the worktree and their relationships.\n */\nexport const getWorktreeCluster = query({\n args: {\n worktreeId: v.string(),\n userId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetWorktreeClusterArgs) => {\n const worktree = await ctx.db.get(worktreeId(args.worktreeId));\n if (!worktree) {\n return { beliefs: [], edges: [], beliefCount: 0 };\n }\n\n // Get all beliefs linked to this worktree\n const clusterLinks = readRowList(\n await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_worktree\", (q) => q.eq(\"worktreeId\", args.worktreeId))\n .collect(),\n readWorktreeBeliefClusterLink\n );\n\n const beliefIds = new Set(clusterLinks.map((l) => String(l.beliefId)));\n const beliefs: BeliefAdminNode[] = [];\n for (const link of clusterLinks) {\n const node = readBeliefAdminNode(await ctx.db.get(link.beliefId));\n if (node) {\n beliefs.push(node);\n }\n }\n\n // Get edges between cluster beliefs\n const clusterEdges: Array<{\n fromNodeId: string;\n toNodeId: string;\n edgeType: string;\n weight?: number;\n context?: string;\n }> = [];\n\n for (const beliefId of beliefIds) {\n const outEdges = readRowList(\n await ctx.db\n .query(\"epistemicEdges\")\n .filter((q) => q.eq(q.field(\"fromNodeId\"), beliefId))\n .collect(),\n readBeliefAdminEdge\n );\n\n for (const edge of outEdges) {\n if (\n edge.fromNodeId &&\n edge.toNodeId &&\n edge.edgeType &&\n beliefIds.has(String(edge.toNodeId))\n ) {\n clusterEdges.push({\n fromNodeId: String(edge.fromNodeId),\n toNodeId: String(edge.toNodeId),\n edgeType: edge.edgeType,\n weight: edge.weight,\n context: edge.context,\n });\n }\n }\n }\n\n return {\n beliefs,\n edges: clusterEdges,\n beliefCount: beliefs.length,\n };\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Split belief maintenance and backfill routines out of epistemicBeliefs.ts. */\n\nimport { checkScopeAccess } from \"@lucern/access-control/access\";\nimport { confidenceFromSL } from \"@lucern/confidence\";\nimport { generateUuidV7 } from \"@lucern/contracts/ids\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal, internalMutation, mutation, query } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport {\n assertBaseRateInRange,\n buildBeliefConfidenceRow,\n deriveSyntheticBackfillOpinion,\n getBeliefNodesForScope,\n optionalBeliefScopeArgs,\n readFiniteNumber,\n resolveBeliefScopeOrNull,\n resolveBeliefStatus,\n} from \"./epistemicBeliefs.helpers\";\n\ntype LegacyOpinionSource = Record<string, unknown> & {\n confidence?: number;\n opinion_a?: number;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n};\n\ntype EpistemicNodeBackfillRow = LegacyOpinionSource & {\n _id: Id<\"epistemicNodes\">;\n canonicalText?: string;\n createdAt?: number;\n globalId?: string;\n metadata?: Record<string, unknown> | null;\n nodeType?: string;\n projectId?: string;\n status?: string;\n title?: string;\n topicId?: string;\n updatedAt?: number;\n};\n\ntype BeliefConfidenceBackfillRow = Record<string, unknown> & {\n _id: Id<\"beliefConfidence\">;\n assessedAt: number;\n assessedBy: string;\n baseRate?: number;\n belief?: number;\n beliefId: Id<\"epistemicNodes\"> | string;\n certainty?: number;\n confidence: number;\n disbelief?: number;\n trigger: string;\n uncertainty?: number;\n valence?: number;\n};\n\ntype EpistemicEdgeBackfillRow = Record<string, unknown> & {\n _id: Id<\"epistemicEdges\">;\n fromNodeId?: string;\n globalId?: string;\n toNodeId?: string;\n};\n\ninterface SubjectiveOpinionPatch {\n baseRate: number;\n belief: number;\n disbelief: number;\n uncertainty: number;\n}\n\ninterface MandatoryPriorNodeResult {\n auditEntries: number;\n insertedInitialRows: number;\n patchedHistoryRows: number;\n patchedNodes: number;\n touched: boolean;\n}\n\ntype BackfillWriteCtx = Pick<MutationCtx, \"db\">;\n\ninterface BeliefScopeArgs {\n projectId?: string;\n topicId?: string;\n}\n\ninterface RecentConfidenceChangesArgs extends BeliefScopeArgs {\n limit?: number;\n userId: string;\n}\n\ninterface BackfillLimitArgs {\n limit?: number;\n}\n\ninterface BackfillMandatoryPriorsArgs extends BackfillLimitArgs {\n defaultBaseRate?: number;\n}\n\ninterface BackfillDryRunArgs {\n dryRun?: boolean;\n}\n\ninterface BackfillScoredBeliefEdgesArgs extends BeliefScopeArgs {\n dryRun?: boolean;\n}\n\ninterface BeliefClusterPositionsArgs extends BeliefScopeArgs {\n userId?: string;\n}\n\ninterface ReassignBeliefsTopicArgs {\n beliefNodeIds: Id<\"epistemicNodes\">[];\n reason?: string;\n targetTopicId: string;\n}\n\nfunction epistemicNodeId(value: string): Id<\"epistemicNodes\"> {\n return value as Id<\"epistemicNodes\">;\n}\n\nfunction topicId(value: string): Id<\"topics\"> {\n return value as Id<\"topics\">;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? (value as Id<TableName>)\n : undefined;\n}\n\nfunction readOptionalNumber(value: unknown): number | undefined {\n return readFiniteNumber(value);\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readRecord(\n value: unknown\n): Record<string, unknown> | null | undefined {\n if (value === null) {\n return null;\n }\n return isRecord(value) ? value : undefined;\n}\n\nfunction readEpistemicNodeBackfillRow(\n value: unknown\n): EpistemicNodeBackfillRow | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(value._id);\n if (!id) {\n return null;\n }\n\n const row: EpistemicNodeBackfillRow = { ...value, _id: id };\n const canonicalText = readOptionalString(value.canonicalText);\n const createdAt = readOptionalNumber(value.createdAt);\n const confidence = readOptionalNumber(value.confidence);\n const globalId = readOptionalString(value.globalId);\n const metadata = readRecord(value.metadata);\n const nodeType = readOptionalString(value.nodeType);\n const projectId = readOptionalString(value.projectId);\n const status = readOptionalString(value.status);\n const title = readOptionalString(value.title);\n const topicIdValue = readOptionalString(value.topicId);\n const updatedAt = readOptionalNumber(value.updatedAt);\n\n if (canonicalText !== undefined) {\n row.canonicalText = canonicalText;\n }\n if (createdAt !== undefined) {\n row.createdAt = createdAt;\n }\n if (confidence !== undefined) {\n row.confidence = confidence;\n }\n if (globalId !== undefined) {\n row.globalId = globalId;\n }\n if (metadata !== undefined) {\n row.metadata = metadata;\n }\n if (nodeType !== undefined) {\n row.nodeType = nodeType;\n }\n if (projectId !== undefined) {\n row.projectId = projectId;\n }\n if (status !== undefined) {\n row.status = status;\n }\n if (title !== undefined) {\n row.title = title;\n }\n if (topicIdValue !== undefined) {\n row.topicId = topicIdValue;\n }\n if (updatedAt !== undefined) {\n row.updatedAt = updatedAt;\n }\n\n return row;\n}\n\nfunction readBeliefConfidenceBackfillRow(\n value: unknown\n): BeliefConfidenceBackfillRow | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readConvexId<\"beliefConfidence\">(value._id);\n const assessedAt = readOptionalNumber(value.assessedAt);\n const assessedBy = readOptionalString(value.assessedBy);\n const beliefId = readOptionalString(value.beliefId);\n const confidence = readOptionalNumber(value.confidence);\n const trigger = readOptionalString(value.trigger);\n if (!(id && assessedAt !== undefined && assessedBy && beliefId && trigger)) {\n return null;\n }\n\n const row: BeliefConfidenceBackfillRow = {\n ...value,\n _id: id,\n assessedAt,\n assessedBy,\n beliefId,\n confidence: confidence ?? 0.5,\n trigger,\n };\n const baseRate = readOptionalNumber(value.baseRate);\n const belief = readOptionalNumber(value.belief);\n const certainty = readOptionalNumber(value.certainty);\n const disbelief = readOptionalNumber(value.disbelief);\n const uncertainty = readOptionalNumber(value.uncertainty);\n const valence = readOptionalNumber(value.valence);\n\n if (baseRate !== undefined) {\n row.baseRate = baseRate;\n }\n if (belief !== undefined) {\n row.belief = belief;\n }\n if (certainty !== undefined) {\n row.certainty = certainty;\n }\n if (disbelief !== undefined) {\n row.disbelief = disbelief;\n }\n if (uncertainty !== undefined) {\n row.uncertainty = uncertainty;\n }\n if (valence !== undefined) {\n row.valence = valence;\n }\n\n return row;\n}\n\nfunction readEpistemicEdgeBackfillRow(\n value: unknown\n): EpistemicEdgeBackfillRow | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readConvexId<\"epistemicEdges\">(value._id);\n if (!id) {\n return null;\n }\n\n const row: EpistemicEdgeBackfillRow = { ...value, _id: id };\n const fromNodeId = readOptionalString(value.fromNodeId);\n const globalId = readOptionalString(value.globalId);\n const toNodeId = readOptionalString(value.toNodeId);\n\n if (fromNodeId !== undefined) {\n row.fromNodeId = fromNodeId;\n }\n if (globalId !== undefined) {\n row.globalId = globalId;\n }\n if (toNodeId !== undefined) {\n row.toNodeId = toNodeId;\n }\n\n return row;\n}\n\nfunction readRowList<T>(\n values: readonly unknown[],\n reader: (value: unknown) => T | null\n): T[] {\n return values.flatMap((value) => {\n const row = reader(value);\n return row ? [row] : [];\n });\n}\n\nfunction hasLegacyOpinionSnapshot(node: LegacyOpinionSource): boolean {\n return (\n readFiniteNumber(node.opinion_b) !== undefined ||\n readFiniteNumber(node.opinion_d) !== undefined ||\n readFiniteNumber(node.opinion_u) !== undefined ||\n readFiniteNumber(node.opinion_a) !== undefined ||\n readFiniteNumber(node.confidence) !== undefined\n );\n}\n\nfunction buildSubjectiveOpinionPatch(\n node: LegacyOpinionSource,\n defaultBaseRate: number\n): SubjectiveOpinionPatch {\n return {\n belief: readFiniteNumber(node.opinion_b) ?? 0,\n disbelief: readFiniteNumber(node.opinion_d) ?? 0,\n uncertainty: readFiniteNumber(node.opinion_u) ?? 1,\n baseRate: readFiniteNumber(node.opinion_a) ?? defaultBaseRate,\n };\n}\n\nfunction needsSubjectiveOpinionPatch(node: LegacyOpinionSource): boolean {\n return (\n readFiniteNumber(node.opinion_b) === undefined ||\n readFiniteNumber(node.opinion_d) === undefined ||\n readFiniteNumber(node.opinion_u) === undefined ||\n readFiniteNumber(node.opinion_a) === undefined\n );\n}\n\nfunction buildSubjectiveOpinionNodePatch(\n opinion: SubjectiveOpinionPatch\n): Record<string, unknown> {\n return {\n opinion_b: opinion.belief,\n opinion_d: opinion.disbelief,\n opinion_u: opinion.uncertainty,\n opinion_a: opinion.baseRate,\n updatedAt: Date.now(),\n };\n}\n\nfunction buildBaseRateHistoryPatch(\n row: BeliefConfidenceBackfillRow,\n defaultBaseRate: number\n): Record<string, unknown> {\n const belief = readFiniteNumber(row.belief) ?? 0;\n const disbelief = readFiniteNumber(row.disbelief) ?? 0;\n const uncertainty = readFiniteNumber(row.uncertainty) ?? 1;\n return {\n baseRate: defaultBaseRate,\n confidence: confidenceFromSL(\n belief,\n disbelief,\n uncertainty,\n defaultBaseRate\n ),\n };\n}\n\nfunction buildMandatoryPriorAuditRow(args: {\n beliefId: string;\n defaultBaseRate: number;\n insertedInitialRow: boolean;\n needsNodePatch: boolean;\n node: EpistemicNodeBackfillRow;\n rowsMissingBaseRate: number;\n}): Record<string, unknown> {\n return {\n entityType: \"belief\",\n entityId: args.beliefId,\n changeType: \"updated\",\n changedAt: Date.now(),\n changedBy: \"system:lkc-2-prior-backfill\",\n isAgent: false,\n previousState: null,\n newState: {\n baseRateBackfilled: true,\n baseRate: args.defaultBaseRate,\n patchedNodeOpinion: args.needsNodePatch,\n patchedHistoryRows: args.rowsMissingBaseRate,\n insertedInitialOpinion: args.insertedInitialRow,\n },\n projectId: args.node.projectId,\n topicId: args.node.topicId,\n };\n}\n\nasync function backfillMandatoryPriorNode(\n ctx: BackfillWriteCtx,\n args: {\n defaultBaseRate: number;\n history: BeliefConfidenceBackfillRow[];\n node: EpistemicNodeBackfillRow;\n }\n): Promise<MandatoryPriorNodeResult> {\n const beliefId = String(args.node._id);\n const patchedOpinion = buildSubjectiveOpinionPatch(\n args.node,\n args.defaultBaseRate\n );\n const needsNodePatch = needsSubjectiveOpinionPatch(args.node);\n const rowsMissingBaseRate = args.history.filter(\n (row) => readFiniteNumber(row.baseRate) === undefined\n );\n const needsInitialRow = args.history.length === 0;\n\n if (!needsNodePatch && rowsMissingBaseRate.length === 0 && !needsInitialRow) {\n return {\n auditEntries: 0,\n insertedInitialRows: 0,\n patchedHistoryRows: 0,\n patchedNodes: 0,\n touched: false,\n };\n }\n\n if (needsNodePatch) {\n await ctx.db.patch(\n args.node._id,\n buildSubjectiveOpinionNodePatch(patchedOpinion)\n );\n }\n\n for (const row of rowsMissingBaseRate) {\n await ctx.db.patch(\n row._id,\n buildBaseRateHistoryPatch(row, args.defaultBaseRate)\n );\n }\n\n if (needsInitialRow) {\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: args.node._id,\n belief: patchedOpinion.belief,\n disbelief: patchedOpinion.disbelief,\n uncertainty: patchedOpinion.uncertainty,\n baseRate: patchedOpinion.baseRate,\n trigger: \"initial\",\n rationale:\n \"LKC-2 backfill: inserted missing initial vacuous opinion with neutral prior.\",\n assessedAt:\n readFiniteNumber(args.node.createdAt) ??\n readFiniteNumber(args.node.updatedAt) ??\n Date.now(),\n assessedBy: \"system:lkc-2-prior-backfill\",\n slOperator: \"prior_seed\",\n })\n );\n }\n\n await ctx.db.insert(\n \"epistemicAudit\",\n buildMandatoryPriorAuditRow({\n beliefId,\n defaultBaseRate: args.defaultBaseRate,\n insertedInitialRow: needsInitialRow,\n needsNodePatch,\n node: args.node,\n rowsMissingBaseRate: rowsMissingBaseRate.length,\n })\n );\n\n return {\n auditEntries: 1,\n insertedInitialRows: needsInitialRow ? 1 : 0,\n patchedHistoryRows: rowsMissingBaseRate.length,\n patchedNodes: needsNodePatch ? 1 : 0,\n touched: true,\n };\n}\n\nasync function collectConnectedNodeIds(\n ctx: BackfillWriteCtx,\n beliefId: string\n): Promise<Set<string>> {\n const [rawOutbound, rawInbound] = await Promise.all([\n ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from\", (q) => q.eq(\"fromNodeId\", beliefId))\n .collect(),\n ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q) => q.eq(\"toNodeId\", beliefId))\n .collect(),\n ]);\n const outbound = readRowList(rawOutbound, readEpistemicEdgeBackfillRow);\n const inbound = readRowList(rawInbound, readEpistemicEdgeBackfillRow);\n\n const connectedNodeIds = new Set<string>();\n for (const edge of outbound) {\n if (edge.toNodeId) {\n connectedNodeIds.add(String(edge.toNodeId));\n }\n }\n for (const edge of inbound) {\n if (edge.fromNodeId) {\n connectedNodeIds.add(String(edge.fromNodeId));\n }\n }\n return connectedNodeIds;\n}\n\nasync function reassignConnectedBeliefNeighbors(\n ctx: BackfillWriteCtx,\n args: {\n alreadyReassigned: Set<string>;\n connectedNodeIds: Set<string>;\n movedBeliefIds: Set<string>;\n now: number;\n targetTopicId: string;\n }\n): Promise<number> {\n let connectedReassigned = 0;\n\n for (const connectedId of args.connectedNodeIds) {\n if (\n args.movedBeliefIds.has(connectedId) ||\n args.alreadyReassigned.has(connectedId)\n ) {\n continue;\n }\n\n try {\n const connectedNode = readEpistemicNodeBackfillRow(\n await ctx.db.get(epistemicNodeId(connectedId))\n );\n if (connectedNode?.status !== \"active\") {\n continue;\n }\n if (\n connectedNode.topicId &&\n String(connectedNode.topicId) !== String(args.targetTopicId)\n ) {\n await ctx.db.patch(epistemicNodeId(connectedId), {\n topicId: args.targetTopicId,\n updatedAt: args.now,\n });\n args.alreadyReassigned.add(connectedId);\n connectedReassigned++;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to reassign connected node\",\n {\n error,\n connectedId,\n }\n );\n }\n }\n\n return connectedReassigned;\n}\n\nexport const getRecentConfidenceChanges = query({\n args: {\n ...optionalBeliefScopeArgs,\n userId: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: RecentConfidenceChangesArgs) => {\n const limit = args.limit ?? 10;\n const sevenDaysAgo = Date.now() - 7 * 24 * 60 * 60 * 1000;\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const scopeId = scope.topicId ? String(scope.topicId) : undefined;\n\n if (!(scopeId && (await checkScopeAccess(ctx, scopeId, args.userId)))) {\n return [];\n }\n\n const projectBeliefs = readRowList(\n await getBeliefNodesForScope(ctx, scope),\n readEpistemicNodeBackfillRow\n );\n\n if (projectBeliefs.length === 0) {\n return [];\n }\n\n // Create a map of beliefId to belief info\n const beliefMap = new Map<\n string,\n { id: string; title: string; currentConfidence: number }\n >();\n for (const belief of projectBeliefs) {\n const info = {\n id: String(belief._id),\n title: belief.canonicalText || belief.title || \"Untitled belief\",\n currentConfidence: belief.confidence ?? 0.5,\n };\n beliefMap.set(String(belief._id), info);\n }\n\n // Get recent confidence entries\n const recentConfidence = readRowList(\n await ctx.db\n .query(\"beliefConfidence\")\n .order(\"desc\")\n .filter((q) => q.gt(q.field(\"assessedAt\"), sevenDaysAgo))\n .take(200),\n readBeliefConfidenceBackfillRow\n );\n\n // Filter to beliefs in this project and compute deltas\n const changes: Array<{\n beliefId: string;\n beliefTitle: string;\n delta: number;\n trigger: string;\n assessedBy: string;\n assessedAt: number;\n }> = [];\n\n const seenBeliefs = new Set<string>();\n\n for (const entry of recentConfidence) {\n const beliefInfo = beliefMap.get(String(entry.beliefId));\n if (!beliefInfo) {\n continue;\n }\n\n // Skip if we've already processed this belief\n if (seenBeliefs.has(beliefInfo.id)) {\n continue;\n }\n seenBeliefs.add(beliefInfo.id);\n\n // Get previous confidence entry to calculate delta\n const previousEntries = readRowList(\n await ctx.db\n .query(\"beliefConfidence\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", entry.beliefId))\n .order(\"desc\")\n .filter((q) => q.lt(q.field(\"assessedAt\"), entry.assessedAt))\n .take(1),\n readBeliefConfidenceBackfillRow\n );\n\n const previousConfidence = previousEntries[0]?.confidence ?? 0.5;\n const delta = entry.confidence - previousConfidence;\n\n // Only include if there's a meaningful change\n if (Math.abs(delta) < 0.05) {\n continue;\n }\n\n changes.push({\n beliefId: beliefInfo.id,\n beliefTitle: beliefInfo.title,\n delta,\n trigger: entry.trigger,\n assessedBy: entry.assessedBy,\n assessedAt: entry.assessedAt,\n });\n\n if (changes.length >= limit) {\n break;\n }\n }\n\n return changes;\n },\n});\n\n// =============================================================================\n// BACKFILL: Set valence + certainty on existing records\n// =============================================================================\n\n/**\n * Backfill synthetic t0 opinion-history rows for legacy beliefs that have\n * node-level opinion/confidence metadata but no beliefConfidence history.\n *\n * Run with:\n * npx convex run epistemicBeliefs:backfillSyntheticOpinionHistory '{\"limit\":100}'\n */\nexport const backfillSyntheticOpinionHistory = internalMutation({\n args: {\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: BackfillLimitArgs) => {\n const limit = Math.max(1, Math.min(args.limit ?? 100, 100));\n const beliefNodes = readRowList(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q) => q.eq(\"nodeType\", \"belief\"))\n .collect(),\n readEpistemicNodeBackfillRow\n );\n const existingHistory = readRowList(\n await ctx.db.query(\"beliefConfidence\").collect(),\n readBeliefConfidenceBackfillRow\n );\n\n const beliefsWithHistory = new Set(\n existingHistory.map((entry) => String(entry.beliefId))\n );\n\n let inserted = 0;\n let skippedNoOpinion = 0;\n let skippedHasHistory = 0;\n\n for (const node of beliefNodes) {\n if (inserted >= limit) {\n break;\n }\n\n if (!hasLegacyOpinionSnapshot(node)) {\n skippedNoOpinion++;\n continue;\n }\n\n if (beliefsWithHistory.has(String(node._id))) {\n skippedHasHistory++;\n continue;\n }\n\n const opinion = deriveSyntheticBackfillOpinion(node);\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: node._id,\n belief: opinion.b,\n disbelief: opinion.d,\n uncertainty: opinion.u,\n baseRate: opinion.a,\n trigger: \"backfill_synthetic\",\n rationale:\n \"LK-6 backfill: synthesized t0 from node-level opinion fields (no prior beliefConfidence row found).\",\n assessedAt:\n readFiniteNumber(node.createdAt) ??\n readFiniteNumber(node.updatedAt) ??\n Date.now(),\n assessedBy: \"system:lk-6-backfill\",\n slOperator: \"prior_seed\",\n })\n );\n beliefsWithHistory.add(String(node._id));\n inserted++;\n }\n\n const remainingCandidates = beliefNodes.filter(\n (node) =>\n hasLegacyOpinionSnapshot(node) &&\n !beliefsWithHistory.has(String(node._id))\n ).length;\n\n return {\n scanned: beliefNodes.length,\n inserted,\n skippedNoOpinion,\n skippedHasHistory,\n remainingCandidates,\n hasMore: remainingCandidates > 0,\n };\n },\n});\n\n/**\n * Backfill mandatory priors for legacy beliefs created before LKC-2.\n *\n * Run with:\n * npx convex run epistemicBeliefs:backfillMandatoryPriors '{\"limit\":100}'\n */\nexport const backfillMandatoryPriors = internalMutation({\n args: {\n limit: v.optional(v.number()),\n defaultBaseRate: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: BackfillMandatoryPriorsArgs) => {\n const limit = Math.max(1, Math.min(args.limit ?? 100, 1000));\n const defaultBaseRate = assertBaseRateInRange(\n args.defaultBaseRate ?? 0.5,\n \"defaultBaseRate\"\n );\n const beliefNodes = readRowList(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q) => q.eq(\"nodeType\", \"belief\"))\n .collect(),\n readEpistemicNodeBackfillRow\n );\n const historyRows = readRowList(\n await ctx.db.query(\"beliefConfidence\").collect(),\n readBeliefConfidenceBackfillRow\n );\n\n const historyByBeliefId = new Map<string, BeliefConfidenceBackfillRow[]>();\n for (const row of historyRows) {\n const beliefId = String(row.beliefId);\n const entries = historyByBeliefId.get(beliefId) ?? [];\n entries.push(row);\n historyByBeliefId.set(beliefId, entries);\n }\n\n let touched = 0;\n let patchedNodes = 0;\n let patchedHistoryRows = 0;\n let insertedInitialRows = 0;\n let auditEntries = 0;\n\n for (const node of beliefNodes) {\n if (touched >= limit) {\n break;\n }\n\n const beliefId = String(node._id);\n const history = historyByBeliefId.get(beliefId) ?? [];\n const result = await backfillMandatoryPriorNode(ctx, {\n defaultBaseRate,\n history,\n node,\n });\n\n if (!result.touched) {\n continue;\n }\n\n patchedNodes += result.patchedNodes;\n patchedHistoryRows += result.patchedHistoryRows;\n insertedInitialRows += result.insertedInitialRows;\n auditEntries += result.auditEntries;\n touched++;\n }\n\n return {\n scanned: beliefNodes.length,\n patchedNodes,\n patchedHistoryRows,\n insertedInitialRows,\n auditEntries,\n hasMore: touched >= limit,\n };\n },\n});\n\n/**\n * Backfill valence + certainty on beliefConfidence records and epistemicNodes metadata.\n * Converts existing single-number confidence to two-axis:\n * valence = confidence * 2 - 1 (maps 0→-1, 0.5→0, 1→+1)\n * certainty = |confidence - 0.5| * 2 (maps 0.5→0, 0/1→1)\n *\n * Run with: npx convex run epistemicBeliefs:backfillTwoAxisConfidence '{}'\n */\nexport const backfillTwoAxisConfidence = internalMutation({\n args: {\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: BackfillDryRunArgs) => {\n const dryRun = args.dryRun ?? false;\n\n // 1. Backfill beliefConfidence records missing valence/certainty\n const allConfRecords = readRowList(\n await ctx.db.query(\"beliefConfidence\").collect(),\n readBeliefConfidenceBackfillRow\n );\n let confUpdated = 0;\n let confSkipped = 0;\n\n for (const record of allConfRecords) {\n if (record.valence !== undefined && record.certainty !== undefined) {\n confSkipped++;\n continue;\n }\n const conf = record.confidence ?? 0.5;\n const valence = Math.round((conf * 2 - 1) * 100) / 100;\n const certainty = Math.round(Math.abs(conf - 0.5) * 2 * 100) / 100;\n\n if (!dryRun) {\n await ctx.db.patch(record._id, { valence, certainty });\n }\n confUpdated++;\n }\n\n // 2. Backfill epistemicNodes metadata missing valence/certainty\n const allBeliefNodes = readRowList(\n await ctx.db\n .query(\"epistemicNodes\")\n .filter((q) => q.eq(q.field(\"nodeType\"), \"belief\"))\n .collect(),\n readEpistemicNodeBackfillRow\n );\n let nodesUpdated = 0;\n let nodesSkipped = 0;\n\n for (const node of allBeliefNodes) {\n const meta = node.metadata ?? {};\n if (meta.valence !== undefined && meta.certainty !== undefined) {\n nodesSkipped++;\n continue;\n }\n const conf = node.confidence ?? 0.5;\n const valence = Math.round((conf * 2 - 1) * 100) / 100;\n const certainty = Math.round(Math.abs(conf - 0.5) * 2 * 100) / 100;\n\n if (!dryRun) {\n await ctx.db.patch(node._id, {\n metadata: { ...meta, valence, certainty },\n });\n }\n nodesUpdated++;\n }\n\n return {\n dryRun,\n beliefConfidence: {\n updated: confUpdated,\n skipped: confSkipped,\n total: allConfRecords.length,\n },\n epistemicNodes: {\n updated: nodesUpdated,\n skipped: nodesSkipped,\n total: allBeliefNodes.length,\n },\n };\n },\n});\n\n/**\n * Backfill: Create relates_to_thesis edges for confidence-bearing beliefs in a project.\n *\n * When appendSlScoring was missing the edge-creation step, beliefs got scored\n * but never linked to the project's theme node. This backfill fixes that.\n *\n * Run: npx convex run epistemicBeliefs:backfillScoredBeliefEdges '{\"projectId\":\"<id>\"}'\n * Dry run first: npx convex run epistemicBeliefs:backfillScoredBeliefEdges '{\"projectId\":\"<id>\",\"dryRun\":true}'\n */\nexport const backfillScoredBeliefEdges = internalMutation({\n args: {\n ...optionalBeliefScopeArgs,\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: BackfillScoredBeliefEdgesArgs) => {\n const dryRun = args.dryRun ?? false;\n const scopeTopicId = args.topicId;\n if (!scopeTopicId) {\n return {\n dryRun,\n scoredBeliefs: 0,\n themeNodes: 0,\n edgesCreated: 0,\n edgesSkipped: 0,\n };\n }\n\n // Get all confidence-bearing beliefs in the project\n const allBeliefs = readRowList(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic\", (q) => q.eq(\"topicId\", scopeTopicId))\n .filter((q) => q.eq(q.field(\"nodeType\"), \"belief\"))\n .collect(),\n readEpistemicNodeBackfillRow\n );\n\n const scoredBeliefs = allBeliefs.filter((belief) => {\n const metadata = belief.metadata ?? {};\n const lifecycle = resolveBeliefStatus(belief, metadata);\n return lifecycle === \"active\" || lifecycle === \"resolved_true\";\n });\n\n // Get theme nodes for the project\n const themeNodes = readRowList(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic\", (q) => q.eq(\"topicId\", scopeTopicId))\n .filter((q) => q.eq(q.field(\"nodeType\"), \"theme\"))\n .collect(),\n readEpistemicNodeBackfillRow\n );\n\n let created = 0;\n let skipped = 0;\n\n for (const belief of scoredBeliefs) {\n if (!belief.globalId) {\n skipped++;\n continue;\n }\n\n for (const theme of themeNodes) {\n if (!theme.globalId) {\n continue;\n }\n\n // Check if edge already exists in Convex mirror\n const existing = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", belief.globalId).eq(\"toNodeId\", theme.globalId)\n )\n .filter((q) => q.eq(q.field(\"edgeType\"), \"relates_to_thesis\"))\n .first();\n\n if (existing) {\n skipped++;\n continue;\n }\n\n if (!dryRun) {\n const edgeGlobalId = generateUuidV7();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: belief.globalId,\n toGlobalId: theme.globalId,\n edgeType: \"relates_to_thesis\",\n weight: belief.confidence ?? 0.5,\n createdBy: \"backfill:scored_belief_theme\",\n topicId: String(scopeTopicId),\n fromNodeType: \"belief\",\n toNodeType: \"theme\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n }\n created++;\n }\n }\n\n return {\n dryRun,\n scoredBeliefs: scoredBeliefs.length,\n themeNodes: themeNodes.length,\n edgesCreated: created,\n edgesSkipped: skipped,\n };\n },\n});\n\n/**\n * @deprecated Legacy sprint backfill — removed. Sprints are D-tier.\n * Kept as no-op stub to avoid breaking deployed function references.\n */\nexport const backfillBeliefSprintIds = internalMutation({\n args: {\n ...optionalBeliefScopeArgs,\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (_ctx: MutationCtx, _args: BackfillDryRunArgs) => ({\n dryRun: true,\n message:\n \"backfillBeliefSprintIds removed — sprints are D-tier legacy. Use worktrees.\",\n sprintsScanned: 0,\n beliefsWithSprints: 0,\n updated: 0,\n skipped: 0,\n }),\n});\n\n// =============================================================================\n// GET BELIEF CLUSTER POSITIONS (worktree-based)\n// =============================================================================\n\n/**\n * Get belief cluster positions for visualization.\n * Classifies each belief as \"clustered\" (in a worktree) or \"unprocessed\"\n * based on worktreeBeliefCluster membership.\n *\n * Used by PillarDetailPanel, PillarsPanel, BeliefListPanel.\n */\nexport const getBeliefClusterPositions = query({\n args: {\n ...optionalBeliefScopeArgs,\n userId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: BeliefClusterPositionsArgs) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope?.projectId) {\n return {\n positions: {},\n hasClusters: false,\n counts: {\n raw: 0,\n hypothesis: 0,\n conditional: 0,\n unprocessed: 0,\n total: 0,\n },\n };\n }\n\n const allBeliefNodes = await getBeliefNodesForScope(ctx, scope);\n const clusteredBeliefIds = new Set<string>();\n\n // Find all beliefs that belong to any worktree cluster\n for (const node of allBeliefNodes) {\n const links = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_belief\", (q) => q.eq(\"beliefId\", node._id))\n .first();\n if (links) {\n clusteredBeliefIds.add(String(node._id));\n }\n }\n\n const positions: Record<string, \"hypothesis\" | \"unprocessed\"> = {};\n for (const node of allBeliefNodes) {\n const id = String(node._id);\n // Beliefs in worktree clusters are treated as hypotheses (tested)\n positions[id] = clusteredBeliefIds.has(id) ? \"hypothesis\" : \"unprocessed\";\n }\n\n const unprocessedCount = allBeliefNodes.length - clusteredBeliefIds.size;\n\n return {\n positions,\n hasClusters: clusteredBeliefIds.size > 0,\n counts: {\n raw: 0,\n hypothesis: clusteredBeliefIds.size,\n conditional: 0,\n unprocessed: unprocessedCount,\n total: allBeliefNodes.length,\n },\n };\n },\n});\n\n// =============================================================================\n// REASSIGN BELIEFS TO A NEW TOPIC (for auto-branching)\n// =============================================================================\n\n/**\n * Reassign a batch of belief nodes to a different topic.\n *\n * Used by the density-based auto-branching system when beliefs are moved\n * from a parent topic into newly created subtopics. Patches `topicId`\n * and `updatedAt` on the target beliefs, and also reassigns any questions\n * and evidence nodes that are connected to the reassigned beliefs via edges.\n *\n * Skips nodes that don't exist or aren't active.\n */\nexport const reassignBeliefsTopic = mutation({\n args: {\n beliefNodeIds: v.array(v.id(\"epistemicNodes\")),\n targetTopicId: v.string(),\n reason: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: ReassignBeliefsTopicArgs) => {\n // Verify the target topic exists\n const targetTopic = await ctx.db.get(topicId(args.targetTopicId));\n if (!targetTopic) {\n throw new Error(`Target topic not found: ${args.targetTopicId}`);\n }\n\n let reassigned = 0;\n let skipped = 0;\n const now = Date.now();\n const movedBeliefIds = new Set<string>();\n\n // Phase 1: Reassign the beliefs themselves\n for (const beliefNodeId of args.beliefNodeIds) {\n const node = readEpistemicNodeBackfillRow(await ctx.db.get(beliefNodeId));\n\n // Skip if node doesn't exist or isn't a belief\n if (node?.nodeType !== \"belief\") {\n skipped++;\n continue;\n }\n\n await ctx.db.patch(beliefNodeId, {\n topicId: args.targetTopicId,\n updatedAt: now,\n });\n movedBeliefIds.add(String(beliefNodeId));\n reassigned++;\n }\n\n // Phase 2: Find and reassign connected non-belief nodes (questions, evidence, etc.)\n // For each moved belief, find edges where the belief is source or target,\n // and reassign the connected non-belief node if it's in the same old topic.\n let connectedReassigned = 0;\n const alreadyReassigned = new Set<string>();\n\n for (const beliefId of movedBeliefIds) {\n const connectedNodeIds = await collectConnectedNodeIds(ctx, beliefId);\n connectedReassigned += await reassignConnectedBeliefNeighbors(ctx, {\n alreadyReassigned,\n connectedNodeIds,\n movedBeliefIds,\n now,\n targetTopicId: args.targetTopicId,\n });\n }\n\n return { reassigned, skipped, connectedReassigned };\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; keep the existing camelCase filename.\nimport {\n hasProjectedOpinionChanged,\n mkOpinion,\n readOpinionFromRecord,\n type SLOperator,\n type SLOpinion,\n} from \"@lucern/confidence\";\nimport {\n canContinueTransitively,\n canTraverseHop,\n type EdgePropagationSpec,\n getEdgePropagationSpecs,\n getTraversalDirections,\n type PropagationEdgeRecord,\n type PropagationEdgeType,\n type PropagationTraversalDirection,\n} from \"./edges\";\nimport {\n edgeMatchesWorkspaceReasoningScope,\n nodeMatchesWorkspaceReasoningScope,\n} from \"./workspaceIsolation\";\n\nexport interface PropagationDispatchScope {\n tenantId?: string;\n workspaceId?: string;\n}\n\nexport interface PropagationDispatchNode<TNodeId extends string = string> {\n _id?: TNodeId;\n epistemicLayer?: string;\n metadata?: unknown;\n nodeType?: string;\n opinion_a?: number;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n publicationStatus?: string;\n tenantId?: string;\n workspaceId?: string;\n}\n\nexport type PropagationDispatchEdge<TNodeId extends string = string> =\n PropagationEdgeRecord<TNodeId>;\n\nexport interface ConfidencePropagationDispatch<\n TNodeId extends string = string,\n> {\n edgeType: PropagationEdgeType;\n hop: number;\n operator: SLOperator;\n opinion: SLOpinion;\n rationale: string;\n targetNodeId: TNodeId;\n traversedDirection: PropagationTraversalDirection;\n weight: number;\n}\n\ninterface DispatchState<TNodeId extends string = string> {\n hop: number;\n nodeId: TNodeId;\n opinion: SLOpinion;\n visitedNodeIds: Set<string>;\n}\n\ninterface CollectConfidencePropagationDispatchesArgs<\n TNodeId extends string = string,\n> {\n getNode: (\n nodeId: TNodeId\n ) => Promise<PropagationDispatchNode<TNodeId> | null | undefined>;\n queryEdges: (args: {\n direction: PropagationTraversalDirection;\n hop: number;\n nodeId: TNodeId;\n spec: EdgePropagationSpec<TNodeId>;\n }) => Promise<readonly PropagationDispatchEdge<TNodeId>[]>;\n sourceNodeId: TNodeId;\n sourceOpinion: SLOpinion;\n sourceScope?: PropagationDispatchScope;\n traversalSpecs?: readonly EdgePropagationSpec<TNodeId>[];\n}\n\ninterface TraversalScope<TNodeId extends string = string> {\n args: CollectConfidencePropagationDispatchesArgs<TNodeId>;\n dispatchesByTargetId: Map<string, ConfidencePropagationDispatch<TNodeId>>;\n nodeCache: Map<string, PropagationDispatchNode<TNodeId> | null | undefined>;\n opinionCache: Map<string, SLOpinion>;\n traversalSpecs: readonly EdgePropagationSpec<TNodeId>[];\n}\n\nfunction nodeIdToCacheKey<TNodeId extends string>(nodeId: TNodeId): string {\n return String(nodeId);\n}\n\nfunction readNodeOpinion<TNodeId extends string>(\n node: PropagationDispatchNode<TNodeId>\n): SLOpinion {\n const metadata = (node.metadata ?? {}) as Record<string, unknown>;\n\n try {\n return readOpinionFromRecord({\n ...metadata,\n opinion_b: node.opinion_b,\n opinion_d: node.opinion_d,\n opinion_u: node.opinion_u,\n opinion_a: node.opinion_a,\n });\n } catch {\n return mkOpinion(0, 0, 1, 0.5);\n }\n}\n\nfunction resolveTraversalTargetNodeId<TNodeId extends string>(\n edge: PropagationDispatchEdge<TNodeId>,\n direction: PropagationTraversalDirection\n): TNodeId | undefined {\n const targetNodeId =\n direction === \"outgoing\" ? edge.toNodeId : edge.fromNodeId;\n return targetNodeId ?? undefined;\n}\n\nfunction buildInitialState<TNodeId extends string>(\n sourceNodeId: TNodeId,\n sourceOpinion: SLOpinion\n): DispatchState<TNodeId> {\n return {\n nodeId: sourceNodeId,\n opinion: sourceOpinion,\n hop: 0,\n visitedNodeIds: new Set([nodeIdToCacheKey(sourceNodeId)]),\n };\n}\n\nfunction extendVisited<TNodeId extends string>(\n currentVisited: Set<string>,\n targetNodeId: TNodeId\n): Set<string> {\n return new Set([...currentVisited, nodeIdToCacheKey(targetNodeId)]);\n}\n\nfunction makeTransitiveState<TNodeId extends string>(\n current: DispatchState<TNodeId>,\n targetNodeId: TNodeId,\n projectedOpinion: SLOpinion,\n nextHop: number\n): DispatchState<TNodeId> {\n return {\n nodeId: targetNodeId,\n opinion: projectedOpinion,\n hop: nextHop,\n visitedNodeIds: extendVisited(current.visitedNodeIds, targetNodeId),\n };\n}\n\nfunction makeDispatchRecord<TNodeId extends string>(\n targetNodeId: TNodeId,\n spec: EdgePropagationSpec<TNodeId>,\n direction: PropagationTraversalDirection,\n edge: PropagationDispatchEdge<TNodeId>,\n projectedOpinion: SLOpinion,\n nextHop: number,\n result: NonNullable<ReturnType<EdgePropagationSpec<TNodeId>[\"operator\"]>>,\n existingDispatch?: ConfidencePropagationDispatch<TNodeId>\n): ConfidencePropagationDispatch<TNodeId> {\n return {\n targetNodeId,\n edgeType: spec.edgeType,\n traversedDirection: direction,\n weight: edge.weight ?? 1,\n opinion: projectedOpinion,\n operator: result.operator,\n rationale: existingDispatch\n ? `${existingDispatch.rationale}; ${result.rationale}`\n : result.rationale,\n hop: nextHop,\n };\n}\n\nasync function loadCachedNode<TNodeId extends string>(\n scope: TraversalScope<TNodeId>,\n nodeId: TNodeId\n): Promise<PropagationDispatchNode<TNodeId> | null | undefined> {\n const cacheKey = nodeIdToCacheKey(nodeId);\n if (!scope.nodeCache.has(cacheKey)) {\n scope.nodeCache.set(cacheKey, await scope.args.getNode(nodeId));\n }\n\n return scope.nodeCache.get(cacheKey) ?? null;\n}\n\nasync function collectTargetDispatch<TNodeId extends string>(\n state: DispatchState<TNodeId>,\n nextHop: number,\n spec: EdgePropagationSpec<TNodeId>,\n direction: PropagationTraversalDirection,\n edge: PropagationDispatchEdge<TNodeId>,\n queue: DispatchState<TNodeId>[],\n scope: TraversalScope<TNodeId>\n): Promise<void> {\n const sourceScope = scope.args.sourceScope;\n if (sourceScope && !edgeMatchesWorkspaceReasoningScope(edge, sourceScope)) {\n return;\n }\n\n const targetNodeId = resolveTraversalTargetNodeId(edge, direction);\n if (!targetNodeId) {\n return;\n }\n\n const targetNodeIdKey = nodeIdToCacheKey(targetNodeId);\n if (state.visitedNodeIds.has(targetNodeIdKey)) {\n return;\n }\n\n const targetNode = await loadCachedNode(scope, targetNodeId);\n if (targetNode?.nodeType !== \"belief\") {\n return;\n }\n\n if (\n sourceScope &&\n !nodeMatchesWorkspaceReasoningScope(targetNode, sourceScope)\n ) {\n return;\n }\n\n const targetOpinion =\n scope.opinionCache.get(targetNodeIdKey) ?? readNodeOpinion(targetNode);\n const result = spec.operator(state.opinion, targetOpinion, edge, {\n hop: nextHop,\n sourceNodeId: state.nodeId,\n targetNodeId,\n traversedDirection: direction,\n spec,\n });\n\n if (!(result && hasProjectedOpinionChanged(targetOpinion, result.opinion))) {\n return;\n }\n\n const projectedOpinion = mkOpinion(\n result.opinion.b,\n result.opinion.d,\n result.opinion.u,\n result.opinion.a\n );\n scope.opinionCache.set(targetNodeIdKey, projectedOpinion);\n\n const existingDispatch = scope.dispatchesByTargetId.get(targetNodeIdKey);\n scope.dispatchesByTargetId.set(\n targetNodeIdKey,\n makeDispatchRecord(\n targetNodeId,\n spec,\n direction,\n edge,\n projectedOpinion,\n nextHop,\n result,\n existingDispatch\n )\n );\n\n if (canContinueTransitively(spec, nextHop)) {\n queue.push(\n makeTransitiveState(state, targetNodeId, projectedOpinion, nextHop)\n );\n }\n}\n\nasync function processTraversalSpec<TNodeId extends string>(\n state: DispatchState<TNodeId>,\n nextHop: number,\n spec: EdgePropagationSpec<TNodeId>,\n queue: DispatchState<TNodeId>[],\n scope: TraversalScope<TNodeId>\n): Promise<void> {\n const sourceNodeId = state.nodeId;\n for (const direction of getTraversalDirections(spec.direction)) {\n const edges = await scope.args.queryEdges({\n nodeId: sourceNodeId,\n spec,\n direction,\n hop: nextHop,\n });\n\n for (const edge of edges) {\n await collectTargetDispatch(\n state,\n nextHop,\n spec,\n direction,\n edge,\n queue,\n scope\n );\n }\n }\n}\n\nasync function processQueuedState<TNodeId extends string>(\n state: DispatchState<TNodeId>,\n queue: DispatchState<TNodeId>[],\n scope: TraversalScope<TNodeId>\n): Promise<void> {\n const nextHop = state.hop + 1;\n for (const spec of scope.traversalSpecs) {\n if (!canTraverseHop(spec, nextHop)) {\n continue;\n }\n\n await processTraversalSpec(state, nextHop, spec, queue, scope);\n }\n}\n\nfunction sortDispatches<TNodeId extends string>(\n dispatches: Iterable<ConfidencePropagationDispatch<TNodeId>>\n): ConfidencePropagationDispatch<TNodeId>[] {\n return Array.from(dispatches).sort((left, right) => {\n if (left.hop !== right.hop) {\n return left.hop - right.hop;\n }\n return String(left.targetNodeId).localeCompare(String(right.targetNodeId));\n });\n}\n\nexport async function collectConfidencePropagationDispatches<\n TNodeId extends string = string,\n>(\n args: CollectConfidencePropagationDispatchesArgs<TNodeId>\n): Promise<ConfidencePropagationDispatch<TNodeId>[]> {\n const dispatchesByTargetId = new Map<\n string,\n ConfidencePropagationDispatch<TNodeId>\n >();\n const opinionCache = new Map<string, SLOpinion>();\n const nodeCache = new Map<\n string,\n PropagationDispatchNode<TNodeId> | null | undefined\n >();\n const traversalSpecs = (args.traversalSpecs ??\n getEdgePropagationSpecs()) as readonly EdgePropagationSpec<TNodeId>[];\n\n const scope: TraversalScope<TNodeId> = {\n args,\n dispatchesByTargetId,\n opinionCache,\n nodeCache,\n traversalSpecs,\n };\n\n const queue: DispatchState<TNodeId>[] = [\n buildInitialState(args.sourceNodeId, args.sourceOpinion),\n ];\n\n while (queue.length > 0) {\n const state = queue.shift();\n if (!state) {\n continue;\n }\n\n await processQueuedState(state, queue, scope);\n }\n\n return sortDispatches(dispatchesByTargetId.values());\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Split confidence operations out of epistemicBeliefs.ts. */\n\nimport { requireScopeWriteAccess } from \"@lucern/access-control/access\";\nimport {\n confidenceFromSL,\n detectTupleContradiction,\n evaluateTupleContradictionTransition,\n mkOpinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport { generateUuidV7 } from \"@lucern/contracts/ids\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport {\n isPreValidationBeliefStatus,\n promoteBeliefStatusAfterScoring,\n} from \"./beliefLifecycle\";\nimport {\n collectConfidencePropagationDispatches,\n type PropagationDispatchEdge,\n type PropagationDispatchNode,\n} from \"./confidencePropagationDispatch\";\nimport type { Id, MutationCtx } from \"./convex\";\nimport { internal, internalMutation } from \"./convex\";\nimport {\n type BeliefConfidenceTrigger,\n buildBeliefConfidenceRow,\n deriveTupleContradictionSeverity,\n formatTupleContradictionDescription,\n getActiveConfidencePolicy,\n hasCompletedWorktreeForBelief,\n readBeliefOpinionSnapshot,\n readTupleContradictedFlag,\n resolveBeliefStatus,\n throwStructuredMutationError,\n} from \"./epistemicBeliefs.helpers\";\nimport { resolveNodeScopeForWorkspaceIsolation } from \"./workspaceIsolation\";\n\ninterface EdgePropagationIndexScope {\n eq(field: string, value: unknown): EdgePropagationIndexScope;\n}\n\ninterface BeliefConfidenceChangeArgs {\n authenticatedUserId: string;\n baseRate?: number;\n belief: number;\n disbelief: number;\n nodeId: Id<\"epistemicNodes\">;\n rationale?: string;\n slOperator?: SLOperator;\n trigger: BeliefConfidenceTrigger;\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringWorktreeId?: string;\n uncertainty: number;\n}\n\ninterface BeliefConfidenceChangeResult {\n beliefConfidenceId: Id<\"beliefConfidence\">;\n newConfidence: number;\n nodeId: Id<\"epistemicNodes\">;\n opinion: { a: number; b: number; d: number; u: number };\n previousConfidence: number;\n}\n\ninterface ConfidenceBeliefNode\n extends PropagationDispatchNode<Id<\"epistemicNodes\">> {\n _id: Id<\"epistemicNodes\">;\n beliefStatus?: unknown;\n confidence?: number;\n globalId?: string;\n metadata?: Record<string, unknown>;\n nodeType: \"belief\";\n predictionMeta?: Record<string, unknown>;\n projectId: string;\n status?: string;\n topicId?: string;\n tupleContradicted?: boolean;\n}\n\ninterface PropagateConfidenceChangeArgs {\n nodeId: Id<\"epistemicNodes\">;\n opinion_a: number;\n opinion_b: number;\n opinion_d: number;\n opinion_u: number;\n userId: string;\n}\n\ntype ConfidencePolicy = Awaited<ReturnType<typeof getActiveConfidencePolicy>>;\ntype TupleTransition = ReturnType<typeof evaluateTupleContradictionTransition>;\n\ninterface ConfidenceChangeState {\n confidencePolicy: ConfidencePolicy;\n currentBeliefStatus: ReturnType<typeof resolveBeliefStatus>;\n derivedConfidence: number;\n existingMetadata: Record<string, unknown>;\n isFirstScoring: boolean;\n newBeliefStatus: ReturnType<typeof promoteBeliefStatusAfterScoring>;\n nextOpinion: { a: number; b: number; d: number; u: number };\n previousConfidence: number;\n previousTupleContradicted: boolean;\n storedRationale: string;\n tupleContradictionDescription: string;\n tupleTransition: TupleTransition;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? (value as Id<TableName>)\n : undefined;\n}\n\nfunction readOptionalBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction readOptionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nfunction readConfidenceBeliefNode(value: unknown): ConfidenceBeliefNode | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(value._id);\n const nodeType = readOptionalString(value.nodeType);\n const projectId = readOptionalString(value.projectId);\n if (!(id && nodeType === \"belief\" && projectId)) {\n return null;\n }\n\n const node: ConfidenceBeliefNode = {\n _id: id,\n nodeType,\n projectId,\n };\n const confidence = readOptionalNumber(value.confidence);\n const epistemicLayer = readOptionalString(value.epistemicLayer);\n const globalId = readOptionalString(value.globalId);\n const metadata = readRecord(value.metadata);\n const opinionA = readOptionalNumber(value.opinion_a);\n const opinionB = readOptionalNumber(value.opinion_b);\n const opinionD = readOptionalNumber(value.opinion_d);\n const opinionU = readOptionalNumber(value.opinion_u);\n const predictionMeta = readRecord(value.predictionMeta);\n const publicationStatus = readOptionalString(value.publicationStatus);\n const status = readOptionalString(value.status);\n const tenantId = readOptionalString(value.tenantId);\n const topicId = readOptionalString(value.topicId);\n const tupleContradicted = readOptionalBoolean(value.tupleContradicted);\n const workspaceId = readOptionalString(value.workspaceId);\n\n if (confidence !== undefined) {\n node.confidence = confidence;\n }\n if (epistemicLayer !== undefined) {\n node.epistemicLayer = epistemicLayer;\n }\n if (globalId !== undefined) {\n node.globalId = globalId;\n }\n if (metadata !== undefined) {\n node.metadata = metadata;\n }\n if (opinionA !== undefined) {\n node.opinion_a = opinionA;\n }\n if (opinionB !== undefined) {\n node.opinion_b = opinionB;\n }\n if (opinionD !== undefined) {\n node.opinion_d = opinionD;\n }\n if (opinionU !== undefined) {\n node.opinion_u = opinionU;\n }\n if (predictionMeta !== undefined) {\n node.predictionMeta = predictionMeta;\n }\n if (publicationStatus !== undefined) {\n node.publicationStatus = publicationStatus;\n }\n if (status !== undefined) {\n node.status = status;\n }\n if (tenantId !== undefined) {\n node.tenantId = tenantId;\n }\n if (topicId !== undefined) {\n node.topicId = topicId;\n }\n if (tupleContradicted !== undefined) {\n node.tupleContradicted = tupleContradicted;\n }\n if (workspaceId !== undefined) {\n node.workspaceId = workspaceId;\n }\n\n return node;\n}\n\nfunction readPropagationEdge(\n value: unknown\n): PropagationDispatchEdge<Id<\"epistemicNodes\">> | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const edgeType = readOptionalString(value.edgeType);\n if (!edgeType) {\n return null;\n }\n\n const edge: PropagationDispatchEdge<Id<\"epistemicNodes\">> = { edgeType };\n const fromNodeId = readConvexId<\"epistemicNodes\">(value.fromNodeId);\n const tenantId = readOptionalString(value.tenantId);\n const toNodeId = readConvexId<\"epistemicNodes\">(value.toNodeId);\n const weight = readOptionalNumber(value.weight);\n const workspaceId = readOptionalString(value.workspaceId);\n\n if (fromNodeId !== undefined) {\n edge.fromNodeId = fromNodeId;\n }\n if (tenantId !== undefined) {\n edge.tenantId = tenantId;\n }\n if (toNodeId !== undefined) {\n edge.toNodeId = toNodeId;\n }\n if (weight !== undefined) {\n edge.weight = weight;\n }\n if (workspaceId !== undefined) {\n edge.workspaceId = workspaceId;\n }\n\n return edge;\n}\n\nfunction readRowList<T>(\n values: readonly unknown[],\n reader: (value: unknown) => T | null\n): T[] {\n return values.flatMap((value) => {\n const row = reader(value);\n return row ? [row] : [];\n });\n}\n\nexport async function applyBeliefConfidenceChange(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs\n): Promise<BeliefConfidenceChangeResult> {\n const now = Date.now();\n const node = await requireConfidenceBeliefNode(ctx, args);\n const state = await buildConfidenceChangeState(ctx, node, args);\n await assertConfidenceScoringPolicySatisfied(ctx, args, state);\n const tupleContradictionId = await createTupleContradictionIfNeeded(\n ctx,\n args,\n node,\n state\n );\n await patchBeliefConfidenceState(ctx, args, state);\n await scheduleFirstScoringThemeEdges(ctx, args, node, state);\n const beliefConfidenceId = await insertBeliefConfidenceRecord(\n ctx,\n args,\n state,\n tupleContradictionId,\n now\n );\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n await insertConfidenceAudit(\n ctx,\n args,\n node,\n state,\n tupleContradictionId,\n now\n );\n await insertTupleTransitionAuditIfNeeded(\n ctx,\n args,\n node,\n state,\n tupleContradictionId,\n now\n );\n await scheduleConfidenceFollowups(ctx, args, node, state);\n\n return {\n nodeId: args.nodeId,\n previousConfidence: state.previousConfidence,\n newConfidence: state.derivedConfidence,\n opinion: state.nextOpinion,\n beliefConfidenceId,\n };\n}\n\nasync function requireConfidenceBeliefNode(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs\n): Promise<ConfidenceBeliefNode> {\n const node = readConfidenceBeliefNode(await ctx.db.get(args.nodeId));\n if (!node) {\n throwStructuredMutationError({\n message: \"Node not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion:\n \"Verify nodeId points to an existing node before appending SL scoring.\",\n details: { nodeId: args.nodeId },\n });\n }\n await requireScopeWriteAccess(ctx, node.projectId, args.authenticatedUserId);\n return node;\n}\n\nasync function buildConfidenceChangeState(\n ctx: MutationCtx,\n node: ConfidenceBeliefNode,\n args: BeliefConfidenceChangeArgs\n): Promise<ConfidenceChangeState> {\n const existingMetadata = readNodeMetadata(node);\n const currentBeliefStatus = resolveBeliefStatus(node, existingMetadata);\n const confidencePolicy = await getActiveConfidencePolicy(ctx);\n const previousConfidence = node.confidence || 0.5;\n const predictionMeta = node.predictionMeta || existingMetadata.predictionMeta;\n const previousOpinion = readBeliefOpinionSnapshot(node, existingMetadata);\n const nextOpinion = {\n b: args.belief,\n d: args.disbelief,\n u: args.uncertainty,\n a: args.baseRate ?? 0.5,\n };\n const derivedConfidence = confidenceFromSL(\n nextOpinion.b,\n nextOpinion.d,\n nextOpinion.u,\n nextOpinion.a\n );\n const isFirstScoring =\n typeof node.confidence !== \"number\" || !Number.isFinite(node.confidence);\n const previousTupleContradicted =\n readTupleContradictedFlag(node.tupleContradicted) ??\n readTupleContradictedFlag(existingMetadata.tupleContradicted) ??\n detectTupleContradiction(\n previousOpinion,\n confidencePolicy.tupleContradiction.beliefThreshold,\n confidencePolicy.tupleContradiction.disbeliefThreshold\n );\n const tupleTransition = evaluateTupleContradictionTransition({\n previousTupleContradicted,\n opinion: nextOpinion,\n policy: confidencePolicy.tupleContradiction,\n });\n const tupleContradictionDescription = formatTupleContradictionDescription({\n opinion: nextOpinion,\n policy: tupleTransition.policy,\n });\n\n const newBeliefStatus = promoteBeliefStatusAfterScoring(currentBeliefStatus, {\n confidence: derivedConfidence,\n predictionMeta,\n metadata: existingMetadata,\n });\n const storedRationale =\n args.rationale ??\n `Confidence changed from ${previousConfidence.toFixed(2)} (nodeId: ${args.nodeId})`;\n\n return {\n confidencePolicy,\n currentBeliefStatus,\n derivedConfidence,\n existingMetadata,\n isFirstScoring,\n newBeliefStatus,\n nextOpinion,\n previousConfidence,\n previousTupleContradicted,\n storedRationale,\n tupleContradictionDescription,\n tupleTransition,\n };\n}\n\nfunction readNodeMetadata(node: ConfidenceBeliefNode): Record<string, unknown> {\n return node.metadata ?? {};\n}\n\nasync function assertConfidenceScoringPolicySatisfied(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n state: ConfidenceChangeState\n): Promise<void> {\n if (\n state.confidencePolicy.scoringMode !== \"after_worktree\" ||\n !isPreValidationBeliefStatus(state.currentBeliefStatus)\n ) {\n return;\n }\n const hasCompletedWorktree = await hasCompletedWorktreeForBelief(\n ctx,\n args.nodeId\n );\n if (hasCompletedWorktree) {\n return;\n }\n throwStructuredMutationError({\n message:\n \"Cannot score belief before worktree completion. Complete a worktree that tests this belief first.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"belief.confidence_append_only\",\n suggestion:\n \"Complete a worktree linked to this belief before recording SL scoring.\",\n details: { nodeId: args.nodeId },\n });\n}\n\nasync function createTupleContradictionIfNeeded(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState\n): Promise<Id<\"contradictions\"> | undefined> {\n if (!state.tupleTransition.crossedIntoTupleContradiction) {\n return;\n }\n return (await ctx.runMutation(\"contradictions:create\", {\n projectId: node.projectId,\n topicId: node.topicId,\n beliefId: args.nodeId,\n beliefBId: args.nodeId,\n supportingInsightIds: [],\n contradictingInsightIds: [],\n severity: deriveTupleContradictionSeverity(node),\n source: \"tuple_space\",\n detectionMethod: \"agent\",\n description: state.tupleContradictionDescription,\n createdBy: args.authenticatedUserId,\n })) as Id<\"contradictions\">;\n}\n\nasync function patchBeliefConfidenceState(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n state: ConfidenceChangeState\n): Promise<void> {\n await ctx.db.patch(args.nodeId, {\n confidence: state.derivedConfidence,\n beliefStatus: state.newBeliefStatus,\n tupleContradicted: state.tupleTransition.tupleContradicted,\n updatedAt: Date.now(),\n opinion_b: state.nextOpinion.b,\n opinion_d: state.nextOpinion.d,\n opinion_u: state.nextOpinion.u,\n opinion_a: state.nextOpinion.a,\n metadata: {\n ...state.existingMetadata,\n beliefStatus: state.newBeliefStatus,\n slBelief: state.nextOpinion.b,\n slDisbelief: state.nextOpinion.d,\n slUncertainty: state.nextOpinion.u,\n slBaseRate: state.nextOpinion.a,\n tupleContradicted: state.tupleTransition.tupleContradicted,\n },\n });\n}\n\nasync function scheduleFirstScoringThemeEdges(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState\n): Promise<void> {\n if (!state.isFirstScoring) {\n return;\n }\n const themeNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic\", (q) => q.eq(\"topicId\", node.topicId))\n .filter((q) => q.eq(q.field(\"nodeType\"), \"theme\"))\n .collect();\n\n for (const theme of themeNodes) {\n if (!(theme.globalId && node.globalId)) {\n continue;\n }\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: generateUuidV7(),\n fromGlobalId: node.globalId,\n toGlobalId: theme.globalId,\n edgeType: \"relates_to_thesis\",\n weight: state.derivedConfidence,\n createdBy: args.authenticatedUserId,\n topicId: String(node.projectId),\n fromNodeType: \"belief\",\n toNodeType: \"theme\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n }\n}\n\nasync function insertBeliefConfidenceRecord(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n state: ConfidenceChangeState,\n tupleContradictionId: Id<\"contradictions\"> | undefined,\n now: number\n): Promise<Id<\"beliefConfidence\">> {\n return await ctx.db.insert(\"beliefConfidence\", {\n ...buildBeliefConfidenceRow({\n beliefId: args.nodeId as Id<\"epistemicNodes\">,\n belief: state.nextOpinion.b,\n disbelief: state.nextOpinion.d,\n uncertainty: state.nextOpinion.u,\n baseRate: state.nextOpinion.a,\n trigger: args.trigger,\n rationale: state.storedRationale,\n assessedBy: args.authenticatedUserId,\n assessedAt: now,\n slOperator: args.slOperator,\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringContradictionId: tupleContradictionId,\n triggeringWorktreeId: args.triggeringWorktreeId,\n }),\n });\n}\n\nasync function insertConfidenceAudit(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState,\n tupleContradictionId: Id<\"contradictions\"> | undefined,\n now: number\n): Promise<void> {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"confidence_changed\",\n previousState: {\n confidence: state.previousConfidence,\n tupleContradicted: state.previousTupleContradicted,\n },\n newState: {\n opinion: state.nextOpinion,\n confidence: state.derivedConfidence,\n trigger: args.trigger,\n rationale: state.storedRationale,\n tupleContradicted: state.tupleTransition.tupleContradicted,\n tupleContradictionPolicy: state.tupleTransition.policy,\n ...(tupleContradictionId\n ? { tupleContradictionId: String(tupleContradictionId) }\n : {}),\n },\n changedBy: args.authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n topicId: node.topicId,\n });\n}\n\nasync function insertTupleTransitionAuditIfNeeded(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState,\n tupleContradictionId: Id<\"contradictions\"> | undefined,\n now: number\n): Promise<void> {\n if (\n !(\n state.tupleTransition.crossedIntoTupleContradiction ||\n state.tupleTransition.crossedOutOfTupleContradiction\n )\n ) {\n return;\n }\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n previousState: { tupleContradicted: state.previousTupleContradicted },\n newState: {\n tupleContradicted: state.tupleTransition.tupleContradicted,\n action: state.tupleTransition.crossedIntoTupleContradiction\n ? \"tuple_contradiction_detected\"\n : \"tuple_contradiction_cleared\",\n opinion: state.nextOpinion,\n tupleContradictionPolicy: state.tupleTransition.policy,\n ...(tupleContradictionId\n ? { tupleContradictionId: String(tupleContradictionId) }\n : {}),\n },\n rationale: tupleAuditRationale(state),\n changedBy: args.authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n topicId: node.topicId,\n });\n}\n\nfunction tupleAuditRationale(state: ConfidenceChangeState): string {\n if (state.tupleTransition.crossedIntoTupleContradiction) {\n return state.tupleContradictionDescription;\n }\n return `Tuple-space contradiction cleared: b=${state.nextOpinion.b.toFixed(2)}, d=${state.nextOpinion.d.toFixed(2)} no longer exceed the configured policy thresholds.`;\n}\n\nasync function scheduleConfidenceFollowups(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState\n): Promise<void> {\n if (Math.abs(state.derivedConfidence - state.previousConfidence) >= 0.15) {\n await ctx.scheduler.runAfter(\n 5000,\n internal.bi.contradictionSemanticDetector.scanAffectedBeliefs,\n {\n beliefId: args.nodeId as string,\n projectId: node.projectId,\n }\n );\n }\n if (node.workspaceId && node.tenantId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.publication.evaluateNodePublication,\n { nodeId: args.nodeId }\n );\n }\n}\n\n/**\n * Returns the pressure direction label for use in the propagation rationale\n * string. The ledger trigger is always \"propagation\" (stage-1 containment,\n * AC.1 adjudication P1). The direction is carried in the rationale only.\n */\nfunction propagationPressureLabel(\n edgeType: string,\n weight: number\n): \"supportive\" | \"contradictory\" {\n if (edgeType === \"contradicts\" || edgeType === \"refutes\") {\n return \"contradictory\";\n }\n if ((edgeType === \"supports\" || edgeType === \"informs\") && weight < 0) {\n return \"contradictory\";\n }\n return \"supportive\";\n}\n\n// =============================================================================\n// SL PROPAGATION — EDGE-DEFINED OPINION PROPAGATION (EK-7, LKC-5)\n// =============================================================================\n\n/**\n * Propagate a confidence change through graph edges whose specs allow it.\n *\n * After a belief is scored, this function:\n * 1. Reads the graph-primitives edge propagation specs\n * 2. Traverses matching incoming/outgoing/bidirectional edges hop by hop\n * 3. Applies the edge operator with per-hop damping and hop limits\n * 4. Writes propagated opinions as new beliefConfidence entries\n */\nexport const propagateConfidenceChange = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n opinion_b: v.number(),\n opinion_d: v.number(),\n opinion_u: v.number(),\n opinion_a: v.number(),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: PropagateConfidenceChangeArgs) => {\n const sourceOpinion = mkOpinion(\n args.opinion_b,\n args.opinion_d,\n args.opinion_u,\n args.opinion_a\n );\n\n const sourceNode = readConfidenceBeliefNode(await ctx.db.get(args.nodeId));\n const sourceScope = await resolveNodeScopeForWorkspaceIsolation(\n ctx,\n sourceNode\n );\n const dispatches = await collectConfidencePropagationDispatches({\n sourceNodeId: args.nodeId,\n sourceOpinion,\n sourceScope,\n queryEdges: async ({ nodeId, spec, direction }) =>\n readRowList(\n await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\n direction === \"outgoing\" ? \"by_from_type\" : \"by_to_type\",\n (q: EdgePropagationIndexScope) =>\n direction === \"outgoing\"\n ? q.eq(\"fromNodeId\", nodeId).eq(\"edgeType\", spec.edgeType)\n : q.eq(\"toNodeId\", nodeId).eq(\"edgeType\", spec.edgeType)\n )\n .collect(),\n readPropagationEdge\n ),\n getNode: async (nodeId) =>\n readConfidenceBeliefNode(await ctx.db.get(nodeId)),\n });\n\n for (const dispatch of dispatches) {\n const pressureLabel = propagationPressureLabel(\n dispatch.edgeType,\n dispatch.weight\n );\n await applyBeliefConfidenceChange(ctx, {\n nodeId: dispatch.targetNodeId,\n belief: dispatch.opinion.b,\n disbelief: dispatch.opinion.d,\n uncertainty: dispatch.opinion.u,\n baseRate: dispatch.opinion.a,\n trigger: \"propagation\",\n rationale: `SL propagation via ${dispatch.edgeType} edge (pressure: ${pressureLabel}): ${dispatch.rationale}`,\n authenticatedUserId: args.userId,\n slOperator: dispatch.operator as SLOperator,\n });\n }\n\n return {\n propagated: dispatches.map((dispatch) => ({\n targetNodeId: String(dispatch.targetNodeId),\n edgeType: dispatch.edgeType,\n operator: dispatch.operator,\n })),\n count: dispatches.length,\n };\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public ABI surface; rename requires a cross-package migration update.\n/**\n * Shared helper to schedule embedding generation after epistemic node creation.\n *\n * Best-effort — failures are silently caught. The embedding generation action\n * is a public action in convex/embeddingActions.ts that calls Pinecone.\n */\n\nimport type { Id } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\ninterface EmbeddingScheduler {\n runAfter(\n delayMs: number,\n functionReference: unknown,\n args?: unknown\n ): Promise<void>;\n}\n\ninterface EmbeddingTriggerContext {\n scheduler: EmbeddingScheduler;\n}\n\ninterface EmbeddingTriggerArgs {\n confidence?: number;\n createdBy: string;\n ctx: EmbeddingTriggerContext;\n hasAnswer?: boolean;\n nodeId: Id<\"epistemicNodes\">;\n nodeType:\n | \"belief\"\n | \"question\"\n | \"evidence\"\n | \"answer\"\n | \"synthesis\"\n | \"theme\"\n | \"source\";\n projectId?: string | null;\n text: string;\n topicId?: string | null;\n}\n\nconst embeddingActionRef = \"embeddingActions:generateEpistemicNodeEmbedding\";\n\nexport async function scheduleEmbeddingGeneration(\n args: EmbeddingTriggerArgs\n): Promise<void> {\n try {\n await args.ctx.scheduler.runAfter(0, embeddingActionRef, {\n nodeId: args.nodeId,\n projectId: args.projectId ? String(args.projectId) : undefined,\n topicId: args.topicId ? String(args.topicId) : undefined,\n createdBy: args.createdBy,\n nodeType: args.nodeType,\n text: args.text.slice(0, 20_000),\n hasAnswer: args.hasAnswer,\n confidence: args.confidence,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[embeddingTrigger] Failed to schedule embedding generation\",\n {\n error,\n nodeId: String(args.nodeId),\n nodeType: args.nodeType,\n }\n );\n // Embedding generation is best-effort — never block node creation\n }\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Evidence-gated fork precondition helpers. */\n\nimport type { Doc, Id, MutationCtx } from \"./convex\";\nimport { throwStructuredMutationError } from \"./epistemicBeliefs.helpers\";\n\nexport type ForkMode = \"supersede\" | \"branch\";\nexport type ForkTriggerRelation = \"supports\" | \"contradicts\";\n\nfunction normalizeForkTriggerRelation(\n value: unknown\n): ForkTriggerRelation | null {\n if (value === \"supports\" || value === \"supporting\") {\n return \"supports\";\n }\n if (value === \"contradicts\" || value === \"contradicting\") {\n return \"contradicts\";\n }\n return null;\n}\n\nexport async function resolveForkTriggerEvidence(\n ctx: MutationCtx,\n args: {\n parentNodeId: Id<\"epistemicNodes\">;\n parent: Doc<\"epistemicNodes\">;\n triggeringEvidenceId: Id<\"epistemicNodes\">;\n forkMode: ForkMode;\n }\n): Promise<{\n evidenceNodeId: Id<\"epistemicNodes\">;\n relation: ForkTriggerRelation;\n}> {\n const evidence = await ctx.db.get(args.triggeringEvidenceId);\n if (evidence?.nodeType !== \"evidence\") {\n throwStructuredMutationError({\n message: \"Fork requires an existing evidence node.\",\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"belief.fork_requires_evidence\",\n suggestion:\n \"Create or link evidence first, then fork with triggeringEvidenceId.\",\n details: { triggeringEvidenceId: args.triggeringEvidenceId },\n });\n }\n if (evidence.topicId && evidence.topicId !== args.parent.topicId) {\n throwStructuredMutationError({\n message: \"Fork evidence belongs to a different topic scope.\",\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"belief.fork_evidence_scope\",\n suggestion:\n \"Use evidence from the same topic/workspace scope as the parent belief.\",\n details: {\n parentNodeId: args.parentNodeId,\n triggeringEvidenceId: args.triggeringEvidenceId,\n },\n });\n }\n\n const evidenceMetadata =\n evidence.metadata && typeof evidence.metadata === \"object\"\n ? (evidence.metadata as Record<string, unknown>)\n : {};\n const parentRefs = new Set(\n [\n String(args.parentNodeId),\n String(args.parent.globalId ?? \"\"),\n String(args.parent._id),\n ].filter(Boolean)\n );\n const evidenceRefs = new Set(\n [\n String(args.triggeringEvidenceId),\n String(evidence.globalId ?? \"\"),\n String(evidence._id),\n ].filter(Boolean)\n );\n\n let relation: ForkTriggerRelation | null = null;\n const linkedBeliefNodeId = String(evidenceMetadata.linkedBeliefNodeId ?? \"\");\n if (linkedBeliefNodeId && parentRefs.has(linkedBeliefNodeId)) {\n relation = normalizeForkTriggerRelation(evidenceMetadata.evidenceRelation);\n }\n\n if (!relation) {\n for (const parentRef of parentRefs) {\n const links = await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", parentRef))\n .collect();\n const matched = links.find((link) =>\n evidenceRefs.has(String(link.insightId))\n );\n if (matched) {\n relation = normalizeForkTriggerRelation(matched.relation);\n break;\n }\n }\n }\n\n if (!relation) {\n throwStructuredMutationError({\n message:\n \"Fork evidence must already be attached to the parent belief through an SL evidence relation.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"belief.fork_requires_attached_evidence\",\n suggestion:\n \"Attach the evidence to the parent belief as supports or contradicts before forking.\",\n details: {\n parentNodeId: args.parentNodeId,\n triggeringEvidenceId: args.triggeringEvidenceId,\n },\n });\n }\n if (args.forkMode === \"supersede\" && relation !== \"contradicts\") {\n throwStructuredMutationError({\n message:\n \"Superseding fork requires contradicting evidence against the parent belief.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"belief.supersede_requires_contradiction\",\n suggestion:\n \"Use forkMode='branch' for a non-replacing fork, or attach contradicting evidence before superseding.\",\n details: {\n parentNodeId: args.parentNodeId,\n triggeringEvidenceId: args.triggeringEvidenceId,\n relation,\n },\n });\n }\n\n return { evidenceNodeId: args.triggeringEvidenceId, relation };\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport {\n assertEdgePolicyAllowed,\n type EpistemicNodeType,\n edgePolicyManifest,\n} from \"@lucern/contracts\";\nimport {\n assertStorageEdgeVocabulary,\n assertUuidShapedEdgeEndpoint,\n assertUuidV7Identity,\n} from \"@lucern/contracts/ids\";\nimport type { Id, MutationCtx } from \"./convex\";\n\ninterface GlobalIdIndexQuery {\n eq(field: \"globalId\", value: string): GlobalIdIndexQuery;\n}\n\ninterface EpistemicNodeInsertDoc extends Record<string, unknown> {\n globalId: string;\n}\n\ninterface EpistemicEdgeInsertDoc extends Record<string, unknown> {\n edgeType: string;\n fromNodeId: string;\n fromNodeType?: string;\n globalId: string;\n toNodeId: string;\n toNodeType?: string;\n}\n\nexport function insertEpistemicNode(\n ctx: MutationCtx,\n doc: EpistemicNodeInsertDoc\n): Promise<Id<\"epistemicNodes\">> {\n assertUuidV7Identity(\"epistemicNodes\", doc.globalId);\n return ctx.db.insert(\"epistemicNodes\", doc);\n}\n\n/**\n * C2-RR.4b — REFERENTIAL edge-endpoint canonicality (amends RR.4's FORMAT guard).\n *\n * Proves an endpoint is the UUIDv7 `globalId` of an EXISTING\n * `epistemicNodes` row. Refuses doc ids, fabricated/unknown endpoints, and\n * legacy UUIDv4 `globalId`s; those must be reminted through the identity\n * backfill ledger before participating in new edge writes.\n */\nasync function assertExistingNodeEndpoint(\n ctx: MutationCtx,\n endpointRole: \"fromNodeId\" | \"toNodeId\",\n endpoint: string\n): Promise<void> {\n assertUuidShapedEdgeEndpoint(endpointRole, endpoint);\n const node = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q: GlobalIdIndexQuery) =>\n q.eq(\"globalId\", endpoint)\n )\n .first();\n if (!node) {\n throw new Error(\n `edge_endpoint_not_canonical: epistemicEdges insert requires ${endpointRole} to be the globalId of an existing epistemicNodes row, received ${endpoint} (no node with that globalId)`\n );\n }\n}\n\nexport async function insertEpistemicEdge(\n ctx: MutationCtx,\n doc: EpistemicEdgeInsertDoc\n): Promise<Id<\"epistemicEdges\">> {\n assertUuidV7Identity(\"epistemicEdges\", doc.globalId);\n\n // R1.1a — STORAGE-VOCABULARY MEMBERSHIP\n assertStorageEdgeVocabulary(doc.edgeType);\n\n // R1.1b — ENDPOINT PRESENCE\n if (!doc.fromNodeId || typeof doc.fromNodeId !== \"string\") {\n throw new Error(\n \"edge_endpoint_missing: epistemicEdges insert requires a non-empty fromNodeId\"\n );\n }\n if (!doc.toNodeId || typeof doc.toNodeId !== \"string\") {\n throw new Error(\n \"edge_endpoint_missing: epistemicEdges insert requires a non-empty toNodeId\"\n );\n }\n\n // C2-RR.4b Defect E (REFERENTIAL) — ENDPOINT CANONICAL IDENTITY. Edge\n // endpoints must each be the globalId of an EXISTING epistemicNodes row,\n // never a Convex doc id, a legacy topic id, or a fabricated/unknown uuid.\n // This refuses mixed _id/globalId endpoint writes at the floor and keeps\n // legacy UUIDv4 graph rows inside the explicit remint/backfill lane.\n await assertExistingNodeEndpoint(ctx, \"fromNodeId\", doc.fromNodeId);\n await assertExistingNodeEndpoint(ctx, \"toNodeId\", doc.toNodeId);\n\n // R1.1c — FULL POLICY ASSERT (when nodeTypes are present and edgeType is in public manifest)\n if (doc.fromNodeType && doc.toNodeType && doc.edgeType !== \"extracted_from\") {\n assertEdgePolicyAllowed(\n edgePolicyManifest,\n doc.edgeType,\n {\n kind: \"epistemic_node\",\n nodeId: doc.fromNodeId,\n nodeType: doc.fromNodeType as EpistemicNodeType,\n },\n {\n kind: \"epistemic_node\",\n nodeId: doc.toNodeId,\n nodeType: doc.toNodeType as EpistemicNodeType,\n }\n );\n }\n\n return ctx.db.insert(\"epistemicEdges\", doc);\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n// biome-ignore lint/performance/noBarrelFile: Public compatibility facade over @lucern/contracts/ids.\nexport {\n generateGlobalId,\n generateUuidV7,\n isUuidV7,\n} from \"@lucern/contracts/ids\";\n","// biome-ignore-all lint/style/useFilenamingConvention: Public ABI filename consumed by existing import paths.\n\nimport type { Doc, Id, MutationCtx } from \"./convex\";\nimport { internal } from \"./convex\";\nimport { insertEpistemicEdge } from \"./epistemicInsert.js\";\nimport { generateUuidV7, isUuidV7 } from \"./globalId\";\n\ninterface TopicAnchorInput {\n topicGlobalId?: string;\n topicId?: string;\n topicNodeId?: string;\n}\n\ntype TopicNodeDoc = Doc<\"epistemicNodes\"> & {\n globalId: string;\n nodeType: \"topic\";\n};\n\nfunction cleanString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : undefined;\n}\n\nfunction requireTopicGlobalId(topicRef: string): string {\n const normalized = topicRef.trim();\n if (!(normalized && isUuidV7(normalized))) {\n throw new Error(\n \"Belief creation topic anchors must be UUIDv7 epistemicNodes.globalId values.\"\n );\n }\n return normalized;\n}\n\nexport function readTopicNodeRef(args: TopicAnchorInput): string | undefined {\n return (\n cleanString(args.topicGlobalId) ??\n cleanString(args.topicNodeId) ??\n cleanString(args.topicId)\n );\n}\n\nexport async function resolveRequiredTopicAnchor(\n ctx: MutationCtx,\n topicRef: string\n): Promise<TopicNodeDoc> {\n const topicGlobalId = requireTopicGlobalId(topicRef);\n const byGlobalId = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", topicGlobalId))\n .first();\n if (byGlobalId?.nodeType === \"topic\" && cleanString(byGlobalId.globalId)) {\n return byGlobalId as TopicNodeDoc;\n }\n\n throw new Error(\n \"Belief creation requires a UUIDv7 topicGlobalId for a topic node in epistemicNodes. Legacy topics-table IDs are not valid belief anchors.\"\n );\n}\n\nexport function scopeFromTopicAnchor(topicNode: TopicNodeDoc) {\n return {\n topicId: topicNode.globalId,\n projectId: cleanString(topicNode.projectId),\n tenantId: cleanString(topicNode.tenantId),\n workspaceId: cleanString(topicNode.workspaceId),\n source: \"topic\" as const,\n };\n}\n\nexport async function createRequiredBeliefTopicEdge(\n ctx: MutationCtx,\n args: {\n beliefNodeId: Id<\"epistemicNodes\">;\n beliefGlobalId: string;\n topicNode: TopicNodeDoc;\n createdBy: string;\n }\n) {\n const topicGlobalId = args.topicNode.globalId;\n const now = Date.now();\n\n // C2-RR.4 Defect E — query (and write) by canonical UUIDv7 endpoints, not\n // Convex doc ids. The endpoints are belief/topic globalIds.\n const existingEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", args.beliefGlobalId).eq(\"toNodeId\", topicGlobalId)\n )\n .collect();\n const existing = existingEdges.find((edge) => edge.edgeType === \"belongs_to\");\n const edgeGlobalId = cleanString(existing?.globalId) ?? generateUuidV7();\n\n if (!existing) {\n await insertEpistemicEdge(ctx, {\n globalId: edgeGlobalId,\n fromNodeId: args.beliefGlobalId,\n toNodeId: topicGlobalId,\n sourceGlobalId: args.beliefGlobalId,\n targetGlobalId: topicGlobalId,\n edgeType: \"belongs_to\",\n weight: 1,\n confidence: 1,\n context: \"Belief creation topic anchor invariant.\",\n reasoningMethod: \"implicit\",\n derivationType: \"topic_scope_invariant\",\n metadata: {\n invariant: \"belief.topic_edge_required\",\n edgeUuid: edgeGlobalId,\n fromUuid: args.beliefGlobalId,\n toUuid: topicGlobalId,\n },\n createdBy: args.createdBy,\n createdAt: now,\n updatedAt: now,\n projectId: cleanString(args.topicNode.projectId),\n topicId: topicGlobalId,\n tenantId: cleanString(args.topicNode.tenantId),\n workspaceId: cleanString(args.topicNode.workspaceId),\n fromNodeType: \"belief\",\n toNodeType: \"topic\",\n fromLayer: \"L3\",\n toLayer: args.topicNode.epistemicLayer ?? \"ontological\",\n });\n }\n\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: args.beliefGlobalId,\n toGlobalId: topicGlobalId,\n edgeType: \"belongs_to\",\n weight: 1,\n confidence: 1,\n context: \"Belief creation topic anchor invariant.\",\n projectId: cleanString(args.topicNode.projectId),\n topicId: topicGlobalId,\n createdBy: args.createdBy,\n fromNodeType: \"belief\",\n toNodeType: \"topic\",\n fromLayer: \"L3\",\n toLayer: args.topicNode.epistemicLayer ?? \"ontological\",\n metadata: {\n invariant: \"belief.topic_edge_required\",\n edgeUuid: edgeGlobalId,\n fromUuid: args.beliefGlobalId,\n toUuid: topicGlobalId,\n },\n });\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Split belief creation and lifecycle entrypoints out of epistemicBeliefs.ts. */\n\nimport {\n checkScopeAccess,\n requireScopeWriteAccess,\n} from \"@lucern/access-control/access\";\nimport { assertSchemaEnumValue } from \"@lucern/contracts/schema-helpers/enumValidation\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport {\n type BeliefLifecycleStatus,\n resolveBeliefLifecycleStatus,\n} from \"./beliefLifecycle\";\nimport type { Doc, Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal, mutation, query } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport {\n type ForkMode,\n resolveForkTriggerEvidence,\n} from \"./epistemicBeliefs.forkEvidence\";\nimport {\n assertBaseRateInRange,\n buildBeliefConfidenceRow,\n clampBeliefLimit,\n generateContentHash,\n getActiveConfidencePolicy,\n MAX_PROJECT_BELIEF_LIMIT,\n markBeliefGraphDirty,\n normalizePillar,\n optionalBeliefScopeArgs,\n requireAuthenticatedUserId,\n throwStructuredMutationError,\n} from \"./epistemicBeliefs.helpers\";\nimport {\n createRequiredBeliefTopicEdge,\n readTopicNodeRef,\n resolveRequiredTopicAnchor,\n scopeFromTopicAnchor,\n} from \"./epistemicBeliefs.topicAnchor\";\nimport {\n createInheritedContractRecord,\n type EpistemicContractCondition,\n type EpistemicContractConditionType,\n type EpistemicContractDirection,\n type EpistemicContractLineageSource,\n type EpistemicContractModulation,\n type EpistemicContractRecord,\n type EpistemicContractSchedule,\n type EpistemicContractStatus,\n} from \"./epistemicContractHelpers\";\nimport { insertEpistemicNode } from \"./epistemicInsert.js\";\nimport { generateGlobalId } from \"./globalId\";\nimport { resolveTopicProjectScope, type TopicProjectScope } from \"./topicScope\";\nimport {\n assertWorkspaceScopedEpistemicNodeScope,\n nodeMatchesWorkspaceReasoningScope,\n} from \"./workspaceIsolation\";\n\ninterface CreateBeliefAdmissionArgs {\n beliefType?: string;\n topicGlobalId?: string;\n topicId?: string;\n topicNodeId?: string;\n}\n\ninterface CreateBeliefArgs extends CreateBeliefAdmissionArgs {\n baseRate?: number;\n confidence?: \"high\" | \"low\" | \"medium\" | \"untested\";\n formulation: string;\n metadata?: unknown;\n pillar?: string;\n predictionMeta?: {\n expectedBy?: number;\n isPrediction: boolean;\n registeredAt: number;\n };\n rationale?: string;\n reversibility?: \"hard_to_reverse\" | \"irreversible\" | \"reversible\" | \"trivial\";\n sourceType?: \"ai_extracted\" | \"ai_generated\" | \"human\";\n userId: string;\n worktreeId?: string;\n}\n\ninterface GetByIdArgs {\n beliefId?: string;\n nodeId?: Id<\"epistemicNodes\">;\n}\n\ninterface RefineBeliefArgs {\n canonicalText?: string;\n nodeId: Id<\"epistemicNodes\">;\n rationale?: string;\n title?: string;\n userId: string;\n}\n\ntype QueryBeliefStatus = \"active\" | \"archived\" | \"superseded\";\n\ninterface GetByProjectArgs {\n limit?: number;\n projectId?: string;\n status?: QueryBeliefStatus;\n topicId?: string;\n userId?: string;\n}\n\ninterface GetByTopicArgs {\n limit?: number;\n status?: QueryBeliefStatus;\n topicId: string;\n userId?: string;\n}\n\ninterface ForkBeliefArgs {\n forkMode?: ForkMode;\n forkReason:\n | \"confidence_collapse\"\n | \"contradiction_response\"\n | \"refinement\"\n | \"scope_change\";\n newFormulation: string;\n parentNodeId: Id<\"epistemicNodes\">;\n rationale?: string;\n triggeringEvidenceId: Id<\"epistemicNodes\">;\n userId: string;\n}\n\ninterface ForkParentAdmission {\n metadata?: Record<string, unknown>;\n parent: BeliefNodeDoc;\n parentGlobalId: string;\n parentRaw: Doc<\"epistemicNodes\">;\n}\n\ninterface BeliefNodeDoc {\n _id: Id<\"epistemicNodes\">;\n beliefStatus?: unknown;\n canonicalText?: string;\n confidence?: number;\n content?: string;\n epistemicLayer?: string;\n globalId?: string;\n metadata?: Record<string, unknown>;\n nodeType: \"belief\";\n predictionMeta?: Record<string, unknown>;\n projectId: string;\n sourceType?: string;\n status?: string;\n tenantId?: string;\n title?: string;\n topicId?: Id<\"topics\"> | string;\n tupleContradicted?: boolean;\n workspaceId?: string;\n}\n\ntype ContractRow = EpistemicContractRecord<\n Id<\"epistemicNodes\">,\n Id<\"topics\"> | string | undefined\n>;\n\nconst CONTRACT_CONDITION_TYPES: ReadonlySet<EpistemicContractConditionType> =\n new Set([\"assertion\", \"temporal\", \"evidential\", \"threshold\", \"composite\"]);\nconst CONTRACT_DIRECTIONS: ReadonlySet<EpistemicContractDirection> = new Set([\n \"confirms\",\n \"falsifies\",\n]);\nconst CONTRACT_LINEAGE_SOURCES: ReadonlySet<EpistemicContractLineageSource> =\n new Set([\"declared\", \"inherited\"]);\nconst CONTRACT_SCHEDULES: ReadonlySet<EpistemicContractSchedule> = new Set([\n \"on_demand\",\n \"on_evidence\",\n \"periodic\",\n \"event_driven\",\n]);\nconst CONTRACT_STATUSES: ReadonlySet<EpistemicContractStatus> = new Set([\n \"active\",\n \"satisfied\",\n \"violated\",\n \"expired\",\n \"suspended\",\n \"archived\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? (value as Id<TableName>)\n : undefined;\n}\n\nfunction readOptionalBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction readOptionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nfunction readStringList(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return;\n }\n const strings = value.filter(\n (item): item is string => typeof item === \"string\" && item.length > 0\n );\n return strings.length === value.length ? strings : undefined;\n}\n\nfunction readEnumValue<TValue extends string>(\n value: unknown,\n allowed: ReadonlySet<TValue>\n): TValue | undefined {\n return typeof value === \"string\" && allowed.has(value as TValue)\n ? (value as TValue)\n : undefined;\n}\n\nfunction readContractCondition(\n value: unknown\n): EpistemicContractCondition | undefined {\n const record = readRecord(value);\n const evaluator = readOptionalString(record?.evaluator);\n const expression = readOptionalString(record?.expression);\n if (!(record && evaluator && expression)) {\n return;\n }\n return {\n evaluator,\n expression,\n evaluatorConfig: record.evaluatorConfig,\n };\n}\n\nfunction readContractModulation(\n value: unknown\n): EpistemicContractModulation | undefined {\n const record = readRecord(value);\n const onConfirmed = readRecord(record?.onConfirmed);\n const onDisconfirmed = readRecord(record?.onDisconfirmed);\n const confirmedDelta = readOptionalNumber(onConfirmed?.delta);\n const disconfirmedDelta = readOptionalNumber(onDisconfirmed?.delta);\n if (!(record && onConfirmed && onDisconfirmed)) {\n return;\n }\n if (confirmedDelta === undefined || disconfirmedDelta === undefined) {\n return;\n }\n\n const modulation: EpistemicContractModulation = {\n onConfirmed: { delta: confirmedDelta },\n onDisconfirmed: { delta: disconfirmedDelta },\n };\n const confirmedCeiling = readOptionalNumber(onConfirmed.ceiling);\n if (confirmedCeiling !== undefined) {\n modulation.onConfirmed.ceiling = confirmedCeiling;\n }\n const disconfirmedFloor = readOptionalNumber(onDisconfirmed.floor);\n if (disconfirmedFloor !== undefined) {\n modulation.onDisconfirmed.floor = disconfirmedFloor;\n }\n\n const onExpired = readRecord(record.onExpired);\n const expiredDelta = readOptionalNumber(onExpired?.delta);\n if (expiredDelta !== undefined) {\n modulation.onExpired = { delta: expiredDelta };\n }\n\n const onPartial = readRecord(record.onPartial);\n const partialDelta = readOptionalNumber(onPartial?.delta);\n const partialThreshold = readOptionalNumber(onPartial?.threshold);\n if (partialDelta !== undefined && partialThreshold !== undefined) {\n modulation.onPartial = {\n delta: partialDelta,\n threshold: partialThreshold,\n };\n }\n\n return modulation;\n}\n\nfunction readBeliefNodeDoc(value: unknown): BeliefNodeDoc | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(value._id);\n const nodeType = readOptionalString(value.nodeType);\n const projectId = readOptionalString(value.projectId);\n if (!(id && nodeType === \"belief\" && projectId)) {\n return null;\n }\n\n const node: BeliefNodeDoc = { _id: id, nodeType, projectId };\n const canonicalText = readOptionalString(value.canonicalText);\n const confidence = readOptionalNumber(value.confidence);\n const content = readOptionalString(value.content);\n const epistemicLayer = readOptionalString(value.epistemicLayer);\n const globalId = readOptionalString(value.globalId);\n const metadata = readRecord(value.metadata);\n const predictionMeta = readRecord(value.predictionMeta);\n const sourceType = readOptionalString(value.sourceType);\n const status = readOptionalString(value.status);\n const tenantId = readOptionalString(value.tenantId);\n const title = readOptionalString(value.title);\n const topicId = readConvexId<\"topics\">(value.topicId);\n const tupleContradicted = readOptionalBoolean(value.tupleContradicted);\n const workspaceId = readOptionalString(value.workspaceId);\n\n if (canonicalText !== undefined) {\n node.canonicalText = canonicalText;\n }\n if (confidence !== undefined) {\n node.confidence = confidence;\n }\n if (content !== undefined) {\n node.content = content;\n }\n if (epistemicLayer !== undefined) {\n node.epistemicLayer = epistemicLayer;\n }\n if (globalId !== undefined) {\n node.globalId = globalId;\n }\n if (metadata !== undefined) {\n node.metadata = metadata;\n }\n if (predictionMeta !== undefined) {\n node.predictionMeta = predictionMeta;\n }\n if (sourceType !== undefined) {\n node.sourceType = sourceType;\n }\n if (status !== undefined) {\n node.status = status;\n }\n if (tenantId !== undefined) {\n node.tenantId = tenantId;\n }\n if (title !== undefined) {\n node.title = title;\n }\n if (topicId !== undefined) {\n node.topicId = topicId;\n }\n if (tupleContradicted !== undefined) {\n node.tupleContradicted = tupleContradicted;\n }\n if (workspaceId !== undefined) {\n node.workspaceId = workspaceId;\n }\n\n return node;\n}\n\nfunction readContractRow(value: unknown): ContractRow | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const beliefNodeId = readConvexId<\"epistemicNodes\">(value.beliefNodeId);\n const condition = readContractCondition(value.condition);\n const conditionType = readEnumValue(\n value.conditionType,\n CONTRACT_CONDITION_TYPES\n );\n const contractId = readOptionalString(value.contractId);\n const createdAt = readOptionalNumber(value.createdAt);\n const createdBy = readOptionalString(value.createdBy);\n const direction = readEnumValue(value.direction, CONTRACT_DIRECTIONS);\n const evaluationSchedule = readEnumValue(\n value.evaluationSchedule,\n CONTRACT_SCHEDULES\n );\n const lineageSource = readEnumValue(\n value.lineageSource,\n CONTRACT_LINEAGE_SOURCES\n );\n const modulation = readContractModulation(value.modulation);\n const status = readEnumValue(value.status, CONTRACT_STATUSES);\n const title = readOptionalString(value.title);\n const updatedAt = readOptionalNumber(value.updatedAt);\n\n if (\n !(\n beliefNodeId &&\n condition &&\n conditionType &&\n contractId &&\n createdAt !== undefined &&\n createdBy &&\n direction &&\n evaluationSchedule &&\n lineageSource &&\n modulation &&\n status &&\n title &&\n updatedAt !== undefined\n )\n ) {\n return null;\n }\n\n const row: ContractRow = {\n beliefNodeId,\n condition,\n conditionType,\n contractId,\n createdAt,\n createdBy,\n direction,\n evaluationSchedule,\n lineageSource,\n modulation,\n status,\n title,\n updatedAt,\n };\n\n const compositeOf = readStringList(value.compositeOf);\n if (compositeOf !== undefined) {\n row.compositeOf = compositeOf;\n }\n const compositeOperator = readOptionalString(value.compositeOperator);\n if (\n compositeOperator === \"all\" ||\n compositeOperator === \"any\" ||\n compositeOperator === \"majority\"\n ) {\n row.compositeOperator = compositeOperator;\n }\n const deadline = readOptionalNumber(value.deadline);\n if (deadline !== undefined) {\n row.deadline = deadline;\n }\n const description = readOptionalString(value.description);\n if (description !== undefined) {\n row.description = description;\n }\n const evaluationCount = readOptionalNumber(value.evaluationCount);\n if (evaluationCount !== undefined) {\n row.evaluationCount = evaluationCount;\n }\n const inheritedAt = readOptionalNumber(value.inheritedAt);\n if (inheritedAt !== undefined) {\n row.inheritedAt = inheritedAt;\n }\n const inheritedFromBeliefNodeId = readConvexId<\"epistemicNodes\">(\n value.inheritedFromBeliefNodeId\n );\n if (inheritedFromBeliefNodeId !== undefined) {\n row.inheritedFromBeliefNodeId = inheritedFromBeliefNodeId;\n }\n const inheritedFromContractId = readOptionalString(\n value.inheritedFromContractId\n );\n if (inheritedFromContractId !== undefined) {\n row.inheritedFromContractId = inheritedFromContractId;\n }\n const lastEvaluatedAt = readOptionalNumber(value.lastEvaluatedAt);\n if (lastEvaluatedAt !== undefined) {\n row.lastEvaluatedAt = lastEvaluatedAt;\n }\n const periodicIntervalMs = readOptionalNumber(value.periodicIntervalMs);\n if (periodicIntervalMs !== undefined) {\n row.periodicIntervalMs = periodicIntervalMs;\n }\n const topicId =\n readConvexId<\"topics\">(value.topicId) ?? readOptionalString(value.topicId);\n if (topicId !== undefined) {\n row.topicId = topicId;\n }\n\n return row;\n}\n\nfunction readRowList<T>(\n values: readonly unknown[],\n reader: (value: unknown) => T | null\n): T[] {\n return values.flatMap((value) => {\n const row = reader(value);\n return row ? [row] : [];\n });\n}\n\n// =============================================================================\n// CREATE\n// =============================================================================\n\n/**\n * Create a new belief in the epistemic spine.\n * Returns the epistemicNodes ID directly (not a beliefs ID).\n */\nexport const create = mutation({\n args: {\n ...optionalBeliefScopeArgs,\n topicNodeId: v.optional(v.string()),\n topicGlobalId: v.optional(v.string()),\n formulation: v.string(),\n beliefType: v.optional(v.string()),\n rationale: v.optional(v.string()),\n confidence: v.optional(\n v.union(\n v.literal(\"untested\"),\n v.literal(\"high\"),\n v.literal(\"medium\"),\n v.literal(\"low\")\n )\n ),\n pillar: v.optional(v.string()),\n worktreeId: v.optional(v.string()),\n sourceType: v.optional(\n v.union(\n v.literal(\"human\"),\n v.literal(\"ai_extracted\"),\n v.literal(\"ai_generated\")\n )\n ),\n userId: v.string(),\n // === CLASSIFICATION FIELDS ===\n reversibility: v.optional(\n v.union(\n v.literal(\"irreversible\"),\n v.literal(\"hard_to_reverse\"),\n v.literal(\"reversible\"),\n v.literal(\"trivial\")\n )\n ),\n predictionMeta: v.optional(\n v.object({\n isPrediction: v.boolean(),\n registeredAt: v.number(),\n expectedBy: v.optional(v.number()),\n })\n ),\n baseRate: v.optional(v.number()),\n metadata: v.optional(v.any()), // Additional metadata including isConditional\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: CreateBeliefArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const { normalizedBeliefType, scope, topicNode } =\n await resolveCreateBeliefAdmission(ctx, args, authenticatedUserId);\n const now = Date.now();\n const baseRate = assertBaseRateInRange(args.baseRate ?? 0.5);\n const initialBeliefStatus = args.worktreeId ? \"hypothesis\" : \"assumption\";\n const initialEpistemicStatus = args.worktreeId\n ? \"hypothesis\"\n : \"assumption\";\n const seedOpinion = {\n opinion_b: 0,\n opinion_d: 0,\n opinion_u: 1,\n opinion_a: baseRate,\n };\n const pillar = normalizePillar(args.pillar);\n\n const additionalMeta = readRecord(args.metadata) ?? {};\n\n // Create the epistemic node\n const beliefGlobalId = generateGlobalId();\n const nodeId = await insertEpistemicNode(ctx, {\n globalId: beliefGlobalId,\n nodeType: \"belief\",\n epistemicLayer: \"L3\",\n canonicalText: args.formulation,\n contentHash: generateContentHash(args.formulation),\n content: args.rationale,\n title:\n args.formulation.slice(0, 100) +\n (args.formulation.length > 100 ? \"...\" : \"\"),\n metadata: {\n pillar,\n // No confidenceLevel — only set after evidence-backed SL scoring.\n status: \"active\",\n worktreeId: args.worktreeId,\n beliefStatus: initialBeliefStatus,\n epistemicStatus: initialEpistemicStatus,\n tupleContradicted: false,\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n ...additionalMeta, // Includes isConditional if provided\n },\n beliefStatus: initialBeliefStatus,\n ...seedOpinion,\n tupleContradicted: false,\n // Classification fields\n reversibility: args.reversibility ?? \"reversible\",\n predictionMeta: args.predictionMeta,\n // Infer epistemicStatus based on context\n epistemicStatus: initialEpistemicStatus,\n sourceType: args.sourceType || \"human\",\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n confidence: undefined, // No scalar confidence until worktree completion\n verificationStatus: \"unverified\",\n status: \"active\",\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n createdBy: authenticatedUserId,\n createdAt: now,\n updatedAt: now,\n });\n\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: nodeId,\n belief: seedOpinion.opinion_b,\n disbelief: seedOpinion.opinion_d,\n uncertainty: seedOpinion.opinion_u,\n baseRate,\n trigger: \"initial\",\n rationale:\n \"LKC-2 mandatory prior: seeded vacuous opinion at belief creation.\",\n assessedBy: authenticatedUserId,\n assessedAt: now,\n slOperator: \"prior_seed\",\n })\n );\n\n await createRequiredBeliefTopicEdge(ctx, {\n beliefNodeId: nodeId,\n beliefGlobalId,\n topicNode,\n createdBy: authenticatedUserId,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Schedule embedding generation\n await scheduleEmbeddingGeneration({\n ctx,\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId,\n createdBy: authenticatedUserId,\n nodeType: \"belief\",\n text: args.formulation,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: null,\n newState: {\n formulation: args.formulation,\n status: \"active\",\n baseRate: seedOpinion.opinion_a,\n tupleContradicted: false,\n opinion: {\n b: seedOpinion.opinion_b,\n d: seedOpinion.opinion_d,\n u: seedOpinion.opinion_u,\n a: seedOpinion.opinion_a,\n },\n },\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n // Schedule embedding generation for semantic search\n if (scope.topicId) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\",\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n createdBy: authenticatedUserId,\n nodeType: \"belief\" as const,\n text: args.rationale\n ? `${args.formulation}\\n\\nRationale: ${args.rationale}`\n : args.formulation,\n // Don't pass confidence — \"untested\" is a string, but the\n // embedding action expects v.optional(v.number()). New beliefs\n // have no numeric confidence until scoring.\n }\n );\n }\n\n // ==========================================================================\n // ONTOLOGY: Schedule belief classification for entity extraction\n // ==========================================================================\n if (scope.topicId) {\n await ctx.scheduler.runAfter(\n 2000, // 2 second delay\n internal.nodeClassification.scheduleClassification,\n {\n nodeId,\n nodeType: \"belief\",\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n // ==========================================================================\n // PILLAR: Auto-categorize uncategorized beliefs into canonical pillars\n // ==========================================================================\n if (pillar === \"other\" && scope.topicId) {\n await ctx.scheduler.runAfter(\n 2500,\n \"beliefCategorization:autoCategorizeBelief\",\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n // ==========================================================================\n // TEMPORAL: Schedule LLM temporal classification (factual vs forecast)\n // Automatically determines if this is a prediction, extracts measure dates\n // and conditions. Users never need to tag beliefs manually.\n // ==========================================================================\n if (scope.topicId) {\n await ctx.scheduler.runAfter(\n 3000, // 3 second delay — after entity extraction\n internal.beliefTemporalClassifier.classifyBelief,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n // ==========================================================================\n // CACHE: Invalidate graph analysis cache\n // ==========================================================================\n await markBeliefGraphDirty(ctx, {\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n return { nodeId };\n },\n});\n\nasync function resolveCreateBeliefAdmission(\n ctx: MutationCtx,\n args: CreateBeliefAdmissionArgs,\n authenticatedUserId: string\n) {\n const topicRef = readTopicNodeRef(args);\n if (!topicRef) {\n throwStructuredMutationError({\n message: \"Belief creation requires an explicit topic epistemic node.\",\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"belief.topic_node_required\",\n suggestion:\n \"Pass topicGlobalId or topicNodeId for a topic in epistemicNodes before creating a belief.\",\n details: {\n topicId: args.topicId,\n topicNodeId: args.topicNodeId,\n topicGlobalId: args.topicGlobalId,\n },\n });\n }\n const topicNode = await resolveRequiredTopicAnchor(ctx, topicRef);\n const anchoredScope = scopeFromTopicAnchor(topicNode);\n const scope: TopicProjectScope = {\n ...anchoredScope,\n topicId: anchoredScope.topicId as Id<\"topics\">,\n };\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"belief\",\n mutationName: \"epistemicBeliefs.create\",\n });\n const normalizedBeliefType = await assertSchemaEnumValue(ctx, {\n category: \"belief_type\",\n value: args.beliefType,\n tenantId: scope.tenantId,\n context: \"epistemicBeliefs.create\",\n });\n if (scope.projectId) {\n await requireScopeWriteAccess(ctx, scope.projectId, authenticatedUserId);\n }\n return { normalizedBeliefType, scope, topicNode };\n}\n\n// =============================================================================\n// GET BY ID\n// =============================================================================\n\n/**\n * Get a belief by its epistemicNodes ID.\n */\nexport const getById = query({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n beliefId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetByIdArgs) => {\n const id = (args.nodeId ?? args.beliefId) as\n | Id<\"epistemicNodes\">\n | undefined;\n if (!id) {\n return null;\n }\n const node = readBeliefNodeDoc(await ctx.db.get(id));\n if (!node) {\n return null;\n }\n return node;\n },\n});\n\n// =============================================================================\n// REFINE BELIEF\n// =============================================================================\n\n/**\n * Refine an unscored belief in place.\n *\n * Lucern Invariant #1 + #2: Draft beliefs may be refined in place, but scored\n * beliefs are immutable and must be evolved through forkBelief().\n */\nexport const refineBelief = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n canonicalText: v.optional(v.string()),\n title: v.optional(v.string()),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: RefineBeliefArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n const node = await requireRefinableBelief(ctx, args.nodeId);\n await requireScopeWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const nextText =\n typeof args.canonicalText === \"string\" &&\n args.canonicalText.trim().length > 0\n ? args.canonicalText.trim()\n : undefined;\n const nextTitle =\n typeof args.title === \"string\" && args.title.trim().length > 0\n ? args.title.trim()\n : undefined;\n\n const patch: Record<string, unknown> = { updatedAt: now };\n if (nextText !== undefined) {\n patch.canonicalText = nextText;\n patch.title =\n nextTitle ??\n nextText.slice(0, 100) + (nextText.length > 100 ? \"...\" : \"\");\n patch.contentHash = generateContentHash(nextText);\n } else if (nextTitle !== undefined) {\n patch.title = nextTitle;\n }\n if (args.rationale !== undefined) {\n patch.content = args.rationale;\n }\n\n await ctx.db.patch(args.nodeId, patch);\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n if (nextText !== undefined) {\n await scheduleEmbeddingGeneration({\n ctx,\n nodeId: args.nodeId,\n projectId: node.projectId,\n topicId: node.topicId,\n createdBy: authenticatedUserId,\n nodeType: \"belief\",\n text: args.rationale\n ? `${nextText}\\n\\nRationale: ${args.rationale}`\n : nextText,\n });\n }\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n canonicalText: node.canonicalText,\n title: node.title,\n content: node.content,\n },\n newState: {\n canonicalText:\n (patch.canonicalText as string | undefined) ?? node.canonicalText,\n title: (patch.title as string | undefined) ?? node.title,\n content: (patch.content as string | undefined) ?? node.content,\n action: \"refined\",\n rationale: args.rationale,\n },\n projectId: node.projectId,\n topicId: node.topicId,\n });\n\n await markBeliefGraphDirty(ctx, {\n projectId: node.projectId,\n topicId: node.topicId,\n });\n\n return { nodeId: args.nodeId };\n },\n});\n\nasync function requireRefinableBelief(\n ctx: MutationCtx,\n nodeId: Id<\"epistemicNodes\">\n): Promise<BeliefNodeDoc> {\n const node = await ctx.db.get(nodeId);\n if (!node) {\n throwStructuredMutationError({\n message: \"Belief not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion: \"Verify nodeId points to an existing belief before refining.\",\n details: { nodeId },\n });\n }\n const nodeType = isRecord(node)\n ? readOptionalString(node.nodeType)\n : undefined;\n if (nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `refineBelief only applies to belief nodes. Received nodeType \"${nodeType}\".`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"entity.no_refine\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes for entity mutations.\",\n details: { nodeId, nodeType },\n });\n }\n const projectId = isRecord(node)\n ? readOptionalString(node.projectId)\n : undefined;\n if (!projectId) {\n throwStructuredMutationError({\n message: \"Belief has no project scope.\",\n status: 400,\n code: \"MISSING_SCOPE\",\n invariantCode: \"belief.project_required\",\n suggestion: \"Belief must have a projectId to refine.\",\n details: { nodeId },\n });\n }\n const confidence = isRecord(node)\n ? readOptionalNumber(node.confidence)\n : undefined;\n if (confidence !== undefined) {\n throwStructuredMutationError({\n message:\n \"Scored beliefs are immutable. Use forkBelief to evolve a scored belief.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"belief.versioning.scored_immutable\",\n suggestion:\n \"Use forkBelief() to create a new version instead of refining in place.\",\n details: { nodeId, confidence },\n });\n }\n const beliefNode = readBeliefNodeDoc(node);\n if (!beliefNode) {\n throwStructuredMutationError({\n message: \"Belief row is missing required typed fields.\",\n status: 400,\n code: \"MISSING_SCOPE\",\n invariantCode: \"belief.typed_row_required\",\n suggestion: \"Backfill belief project/topic/global scope before refining.\",\n details: { nodeId },\n });\n }\n return beliefNode;\n}\n\nasync function requireForkParentAdmission(\n ctx: MutationCtx,\n args: Pick<ForkBeliefArgs, \"parentNodeId\">,\n authenticatedUserId: string\n): Promise<ForkParentAdmission> {\n const parentRaw = await ctx.db.get<\"epistemicNodes\">(args.parentNodeId);\n if (!parentRaw) {\n throwStructuredMutationError({\n message: \"Parent node not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion:\n \"Verify parentNodeId points to an existing node before forking.\",\n details: { parentNodeId: args.parentNodeId },\n });\n }\n\n const parent = readBeliefNodeDoc(parentRaw);\n const parentNodeType = isRecord(parentRaw)\n ? readOptionalString(parentRaw.nodeType)\n : undefined;\n if (!parent) {\n throwStructuredMutationError({\n message: `forkBelief only applies to fully scoped belief nodes. Received nodeType \"${parentNodeType}\". Entity nodes (company, person, investor, etc.) are mutable — use entityLifecycle.updateEntityAttributes instead of forking.`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"entity.no_fork\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes for entity mutations. forkBelief is for belief nodes only, and parent beliefs must carry project scope.\",\n details: {\n parentNodeId: args.parentNodeId,\n nodeType: parentNodeType,\n },\n });\n }\n\n const parentGlobalId = parent.globalId;\n if (!parentGlobalId) {\n throwStructuredMutationError({\n message: \"Parent belief has no globalId for lineage edge creation.\",\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"belief.global_id_required\",\n suggestion:\n \"Backfill parent belief globalId before forking so Neo4j lineage edges can use canonical endpoints.\",\n details: { parentNodeId: args.parentNodeId },\n });\n }\n\n await requireScopeWriteAccess(ctx, parent.projectId, authenticatedUserId);\n\n return {\n metadata: parent.metadata,\n parent,\n parentGlobalId,\n parentRaw,\n };\n}\n\n// =============================================================================\n// GET BY PROJECT\n// =============================================================================\n\n/**\n * Get all beliefs for a project.\n */\nexport const getByProject = query({\n args: {\n ...optionalBeliefScopeArgs,\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetByProjectArgs) => {\n if (!args.topicId) {\n return [];\n }\n\n const pageSize = clampBeliefLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\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 \"[epistemicBeliefs] Failed to resolve project 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) : undefined;\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 query = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n );\n\n const nodes = readRowList(\n await query.order(\"desc\").take(scanLimit),\n readBeliefNodeDoc\n );\n const scopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, scope)\n );\n\n // Filter by status if provided\n if (args.status) {\n return scopedNodes\n .filter((n) => n.status === args.status)\n .slice(0, pageSize);\n }\n\n // Default: return active beliefs\n return scopedNodes.filter((n) => n.status === \"active\").slice(0, pageSize);\n },\n});\n\n/**\n * Get all beliefs for a topic.\n */\nexport const getByTopic = query({\n args: {\n topicId: v.string(),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetByTopicArgs) => {\n const pageSize = clampBeliefLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n });\n const query = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n );\n\n const nodes = readRowList(\n await query.order(\"desc\").take(scanLimit),\n readBeliefNodeDoc\n );\n const scopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n })\n );\n if (args.status) {\n return scopedNodes\n .filter((n) => n.status === args.status)\n .slice(0, pageSize);\n }\n return scopedNodes.filter((n) => n.status === \"active\").slice(0, pageSize);\n },\n});\n\n// =============================================================================\n// FORK BELIEF\n// =============================================================================\n\n/**\n * Fork a belief - create a new version while preserving the original.\n * This is the Lucern-compliant way to \"update\" a belief.\n *\n * Lucern Invariant #1: Beliefs are append-only. Never modify formulation.\n * Lucern Invariant #3: Lineage is permanent.\n */\nexport const forkBelief = mutation({\n args: {\n parentNodeId: v.id(\"epistemicNodes\"),\n newFormulation: v.string(),\n forkReason: v.union(\n v.literal(\"refinement\"),\n v.literal(\"contradiction_response\"),\n v.literal(\"scope_change\"),\n v.literal(\"confidence_collapse\")\n ),\n forkMode: v.optional(v.union(v.literal(\"supersede\"), v.literal(\"branch\"))),\n triggeringEvidenceId: v.id(\"epistemicNodes\"),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: ForkBeliefArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n const _confidencePolicy = await getActiveConfidencePolicy(ctx);\n const { metadata, parent, parentGlobalId, parentRaw } =\n await requireForkParentAdmission(ctx, args, authenticatedUserId);\n\n const forkBeliefStatus: BeliefLifecycleStatus = \"hypothesis\";\n const forkMode: ForkMode = args.forkMode ?? \"supersede\";\n const triggerEvidence = await resolveForkTriggerEvidence(ctx, {\n parentNodeId: args.parentNodeId,\n parent: parentRaw,\n triggeringEvidenceId: args.triggeringEvidenceId,\n forkMode,\n });\n const parentLifecycleStatus = resolveBeliefLifecycleStatus({\n beliefStatus: parent.beliefStatus,\n confidence: parent.confidence,\n predictionMeta: parent.predictionMeta,\n metadata,\n });\n if (forkMode === \"supersede\" && parentLifecycleStatus !== \"active\") {\n throwStructuredMutationError({\n message:\n \"Superseding fork requires an active parent belief. Attach evidence first so the lifecycle can promote deterministically.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"belief.supersede_requires_active_parent\",\n suggestion:\n \"Attach the contradicting evidence to the parent belief, let the evidence path promote it to active, then supersede.\",\n details: {\n parentNodeId: args.parentNodeId,\n parentLifecycleStatus,\n triggeringEvidenceId: args.triggeringEvidenceId,\n },\n });\n }\n\n // Create the new forked belief\n const newBeliefGlobalId = generateGlobalId();\n const newNodeId = await insertEpistemicNode(ctx, {\n globalId: newBeliefGlobalId,\n nodeType: \"belief\",\n epistemicLayer: \"L3\",\n canonicalText: args.newFormulation,\n contentHash: generateContentHash(args.newFormulation),\n content: args.rationale || parent.content,\n title:\n args.newFormulation.slice(0, 100) +\n (args.newFormulation.length > 100 ? \"...\" : \"\"),\n metadata: {\n ...metadata,\n forkedFrom: args.parentNodeId,\n forkReason: args.forkReason,\n forkMode,\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringEvidenceRelation: triggerEvidence.relation,\n forkTimestamp: now,\n forkedBy: authenticatedUserId,\n status: \"active\",\n beliefStatus: forkBeliefStatus,\n tupleContradicted: false,\n },\n beliefStatus: forkBeliefStatus,\n sourceType: parent.sourceType ?? \"human\",\n confidence: undefined,\n tupleContradicted: false,\n verificationStatus: \"unverified\",\n status: \"active\",\n projectId: parent.projectId,\n topicId: parent.topicId,\n createdBy: authenticatedUserId,\n createdAt: now,\n updatedAt: now,\n });\n\n if (forkMode === \"supersede\") {\n await ctx.db.patch(args.parentNodeId, {\n status: \"superseded\",\n beliefStatus: \"superseded\",\n epistemicStatus: \"superseded\",\n supersededBy: newNodeId,\n updatedAt: now,\n metadata: {\n ...metadata,\n status: \"superseded\",\n beliefStatus: \"superseded\",\n epistemicStatus: \"superseded\",\n supersededBy: String(newNodeId),\n supersededByEvidenceId: String(triggerEvidence.evidenceNodeId),\n },\n });\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.parentNodeId,\n operation: \"upsert\",\n });\n }\n\n const inheritedContracts = readRowList(\n await ctx.db\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q) => q.eq(\"beliefNodeId\", args.parentNodeId))\n .collect(),\n readContractRow\n );\n\n for (const contract of inheritedContracts) {\n if (contract.status === \"archived\") {\n continue;\n }\n const inheritedContract = createInheritedContractRecord(contract, {\n beliefNodeId: newNodeId,\n topicId: parent.topicId,\n createdBy: authenticatedUserId,\n now,\n });\n await ctx.db.insert(\"epistemicContracts\", { ...inheritedContract });\n }\n\n // Schedule Neo4j node sync FIRST — the new node must exist in Neo4j\n // before the supersedes edge can be created (MATCH clause requirement).\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: newNodeId,\n operation: \"upsert\",\n });\n\n // Create supersedes edge with delay to let node sync complete first.\n await ctx.scheduler.runAfter(5000, internal.neo4jEdgeAPI.createEdge, {\n globalId: generateGlobalId(),\n fromGlobalId: newBeliefGlobalId,\n toGlobalId: parentGlobalId,\n edgeType: forkMode === \"supersede\" ? \"supersedes\" : \"derived_from\",\n context: `Fork reason: ${args.forkReason}; triggering evidence: ${triggerEvidence.evidenceNodeId}`,\n createdBy: authenticatedUserId,\n topicId: parent.projectId ? String(parent.projectId) : undefined,\n fromNodeType: \"belief\",\n toNodeType: \"belief\",\n metadata: {\n forkMode,\n triggeringEvidenceId: String(triggerEvidence.evidenceNodeId),\n triggeringEvidenceRelation: triggerEvidence.relation,\n },\n });\n\n // Schedule embedding generation for forked belief\n await scheduleEmbeddingGeneration({\n ctx,\n nodeId: newNodeId,\n projectId: parent.projectId,\n topicId: parent.topicId,\n createdBy: authenticatedUserId,\n nodeType: \"belief\",\n text: args.newFormulation,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: newNodeId,\n changeType: \"forked\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n parentNodeId: args.parentNodeId,\n formulation: parent.canonicalText,\n },\n newState: {\n formulation: args.newFormulation,\n forkReason: args.forkReason,\n forkMode,\n triggeringEvidenceId: String(triggerEvidence.evidenceNodeId),\n triggeringEvidenceRelation: triggerEvidence.relation,\n tupleContradicted: false,\n },\n projectId: parent.projectId,\n topicId: parent.topicId,\n });\n\n // Temporal classification — forked beliefs get fresh classification\n // since the formulation may have changed temporal nature\n if (parent.topicId) {\n const inheritedPillar = normalizePillar(\n String(metadata?.pillar || metadata?.topic || \"\")\n );\n if (inheritedPillar === \"other\") {\n await ctx.scheduler.runAfter(\n 2500,\n \"beliefCategorization:autoCategorizeBelief\",\n {\n nodeId: newNodeId,\n projectId: parent.projectId,\n topicId: parent.topicId,\n }\n );\n }\n\n await ctx.scheduler.runAfter(\n 3000,\n internal.beliefTemporalClassifier.classifyBelief,\n {\n nodeId: newNodeId,\n projectId: parent.projectId,\n topicId: parent.topicId,\n }\n );\n }\n\n await markBeliefGraphDirty(ctx, {\n projectId: parent.projectId,\n topicId: parent.topicId,\n });\n\n return {\n newNodeId,\n parentNodeId: args.parentNodeId,\n forkMode,\n forkReason: args.forkReason,\n triggeringEvidenceId: triggerEvidence.evidenceNodeId,\n triggeringEvidenceRelation: triggerEvidence.relation,\n };\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Split internal belief queries and internal-create out of epistemicBeliefs.ts. */\n\nimport { canAudienceClassAccess } from \"@lucern/access-control/audience\";\nimport { listAudienceRegistryRows } from \"@lucern/access-control/audienceRegistry\";\nimport { assertSchemaEnumValue } from \"@lucern/contracts/schema-helpers/enumValidation\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal, internalMutation, internalQuery } from \"./convex\";\nimport {\n assertBaseRateInRange,\n buildBeliefConfidenceRow,\n clampBeliefLimit,\n createBeliefAudienceResolver,\n flattenBeliefNode,\n generateContentHash,\n getBeliefNodesForScope,\n MAX_PROJECT_BELIEF_LIMIT,\n markBeliefGraphDirty,\n normalizePillar,\n optionalBeliefScopeArgs,\n readBeliefNodeView,\n resolveBeliefScopeOrNull,\n} from \"./epistemicBeliefs.helpers\";\nimport {\n createRequiredBeliefTopicEdge,\n readTopicNodeRef,\n resolveRequiredTopicAnchor,\n scopeFromTopicAnchor,\n} from \"./epistemicBeliefs.topicAnchor\";\nimport { insertEpistemicNode } from \"./epistemicInsert.js\";\nimport { generateGlobalId } from \"./globalId\";\nimport { resolveTopicProjectScope, type TopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\nconst BELIEF_CATEGORIZATION_ACTION =\n \"beliefCategorization:autoCategorizeBelief\";\nconst EMBEDDING_GENERATION_ACTION =\n \"embeddingActions:generateEpistemicNodeEmbedding\";\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\ninterface InternalCreateBeliefArgs {\n baseRate?: number;\n beliefType?: string;\n category?: string;\n categoryIcon?: string;\n confidence?: \"high\" | \"medium\" | \"low\";\n criticality?:\n | \"blocking\"\n | \"critical\"\n | \"important\"\n | \"supporting\"\n | \"nice_to_have\"\n | \"unanalyzed\";\n extraMetadata?: unknown;\n formulation: string;\n pillar?: string;\n projectId?: string;\n rationale?: string;\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n runtimePackKey?: string;\n runtimeToolName?: string;\n sourceBeliefIds?: string[];\n sprintId?: string;\n subcategory?: string;\n topic?: string;\n topicGlobalId?: string;\n topicId?: string;\n topicNodeId?: string;\n userId: string;\n}\n\ninterface InternalGetByProjectArgs {\n audienceMode?: string;\n limit?: number;\n projectId?: string;\n status?: \"active\" | \"archived\" | \"invalidated\" | \"superseded\" | \"validated\";\n topicId?: string;\n}\n\ninterface InternalGetByTopicArgs {\n audienceMode?: string;\n limit?: number;\n status?: \"active\" | \"archived\" | \"invalidated\" | \"superseded\" | \"validated\";\n topicId: string;\n}\n\ninterface InternalGetActiveArgs {\n limit?: number;\n projectId?: string;\n topicId?: string;\n}\n\ninterface InternalGetByIdArgs {\n beliefId: string;\n}\n\ntype InternalBeliefScope = TopicProjectScope;\n\ninterface SeedOpinion {\n opinion_a: number;\n opinion_b: number;\n opinion_d: number;\n opinion_u: number;\n}\n\nexport const internalGetByProject = internalQuery({\n args: {\n ...optionalBeliefScopeArgs,\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"validated\"),\n v.literal(\"invalidated\"),\n v.literal(\"archived\"),\n v.literal(\"superseded\")\n )\n ),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: InternalGetByProjectArgs) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const pageSize = clampBeliefLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const audienceMode = args.audienceMode ?? \"internal\";\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n });\n const resolveAudienceClass = createBeliefAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const nodes = await getBeliefNodesForScope(ctx, scope, { scanLimit });\n\n // Filter by audience first, then status.\n let filtered = nodes.filter((node) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(readOptionalString(node.audienceLabel), \"internal\")\n )\n );\n if (args.status) {\n filtered = filtered.filter((n) => n.status === args.status);\n }\n\n // Apply limit if provided\n filtered = filtered.slice(0, pageSize);\n\n // Map to legacy format\n return filtered.map(flattenBeliefNode);\n },\n});\n\n/**\n * Internal query to get beliefs for a topic.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetByTopic = internalQuery({\n args: {\n topicId: v.string(),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"validated\"),\n v.literal(\"invalidated\"),\n v.literal(\"archived\"),\n v.literal(\"superseded\")\n )\n ),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: InternalGetByTopicArgs) => {\n const pageSize = clampBeliefLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\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 = createBeliefAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const query = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n );\n const nodes = (await query.order(\"desc\").take(scanLimit)).flatMap((row) => {\n const node = readBeliefNodeView(row);\n return node ? [node] : [];\n });\n\n let filtered = nodes.filter((node) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(readOptionalString(node.audienceLabel), \"internal\")\n )\n );\n if (args.status) {\n filtered = filtered.filter((n) => n.status === args.status);\n }\n filtered = filtered.slice(0, pageSize);\n\n return filtered.map(flattenBeliefNode);\n },\n});\n\n/**\n * Internal query to get active beliefs for a project.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetActive = internalQuery({\n args: {\n ...optionalBeliefScopeArgs,\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: InternalGetActiveArgs) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope, {\n status: \"active\",\n });\n\n // Apply limit if provided\n const limited = args.limit ? nodes.slice(0, args.limit) : nodes;\n\n return limited.map(flattenBeliefNode);\n },\n});\n\n/**\n * Internal query to get a single belief by ID.\n * Uses canonical epistemicNodes IDs.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetById = internalQuery({\n args: {\n beliefId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: InternalGetByIdArgs) => {\n const nodeId = ctx.db.normalizeId?.(\"epistemicNodes\", args.beliefId);\n if (!nodeId) {\n return null;\n }\n const node = await ctx.db.get(nodeId);\n\n const beliefNode = readBeliefNodeView(node);\n if (!beliefNode) {\n return null;\n }\n\n // Map to legacy format\n return flattenBeliefNode(beliefNode);\n },\n});\n\n/**\n * Internal mutation to create a belief.\n * Creates ONLY in epistemicNodes (no dual-write).\n *\n * @internal Use by other Convex functions only\n */\nexport const internalCreate = internalMutation({\n args: {\n ...optionalBeliefScopeArgs,\n topicNodeId: v.optional(v.string()),\n topicGlobalId: v.optional(v.string()),\n formulation: v.string(),\n baseRate: v.optional(v.number()),\n confidence: v.optional(\n v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\"))\n ),\n userId: v.string(),\n rationale: v.optional(v.string()),\n topic: v.optional(v.string()),\n pillar: v.optional(v.string()),\n category: v.optional(v.string()),\n subcategory: v.optional(v.string()),\n categoryIcon: v.optional(v.string()),\n sprintId: v.optional(v.string()),\n sourceBeliefIds: v.optional(v.array(v.string())),\n criticality: v.optional(\n v.union(\n v.literal(\"blocking\"),\n v.literal(\"critical\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"nice_to_have\"),\n v.literal(\"unanalyzed\")\n )\n ),\n beliefType: v.optional(v.string()),\n /** Optional extra metadata fields merged into the node's metadata object.\n * Use for domain overlays like coding intelligence (codeAnchors, failedApproach, etc.) */\n extraMetadata: v.optional(v.any()),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: InternalCreateBeliefArgs) =>\n await createInternalBelief(ctx, args),\n});\n\nasync function createInternalBelief(\n ctx: MutationCtx,\n args: InternalCreateBeliefArgs\n): Promise<{ nodeId: Id<\"epistemicNodes\"> }> {\n const now = Date.now();\n const baseRate = assertBaseRateInRange(args.baseRate ?? 0.5);\n const topicNode = await resolveInternalCreateTopicAnchor(ctx, args);\n const anchoredScope = scopeFromTopicAnchor(topicNode);\n const scope: InternalBeliefScope = {\n ...anchoredScope,\n topicId: anchoredScope.topicId as Id<\"topics\">,\n };\n assertInternalCreateScope(args, scope);\n const normalizedBeliefType = await assertSchemaEnumValue(ctx, {\n category: \"belief_type\",\n value: args.beliefType,\n tenantId: scope.tenantId,\n context: \"epistemicBeliefs.internalCreate\",\n });\n const seedOpinion = buildSeedOpinion(baseRate);\n const globalId = generateGlobalId();\n const nodeId = await insertEpistemicNode(\n ctx,\n buildInternalBeliefNode({\n args,\n globalId,\n normalizedBeliefType,\n now,\n scope,\n seedOpinion,\n })\n );\n\n await insertInternalBeliefConfidence(ctx, {\n args,\n baseRate,\n nodeId,\n now,\n seedOpinion,\n });\n await createRequiredBeliefTopicEdge(ctx, {\n beliefNodeId: nodeId,\n beliefGlobalId: globalId,\n topicNode,\n createdBy: args.userId,\n });\n await scheduleInternalBeliefSideEffects(ctx, {\n args,\n baseRate,\n nodeId,\n now,\n scope,\n seedOpinion,\n });\n\n return { nodeId };\n}\n\nasync function resolveInternalCreateTopicAnchor(\n ctx: MutationCtx,\n args: InternalCreateBeliefArgs\n) {\n const topicRef = readTopicNodeRef(args);\n if (!topicRef) {\n throw new Error(\n \"Belief creation requires topicGlobalId or topicNodeId for a topic node in epistemicNodes.\"\n );\n }\n return await resolveRequiredTopicAnchor(ctx, topicRef);\n}\n\nfunction assertInternalCreateScope(\n args: InternalCreateBeliefArgs,\n scope: InternalBeliefScope\n) {\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"belief\",\n mutationName: \"epistemicBeliefs.internalCreate\",\n });\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"belief\",\n epistemicLayer: \"L3\",\n },\n mutationName: \"epistemicBeliefs.internalCreate\",\n });\n}\n\nfunction buildSeedOpinion(baseRate: number): SeedOpinion {\n return {\n opinion_b: 0,\n opinion_d: 0,\n opinion_u: 1,\n opinion_a: baseRate,\n };\n}\n\nfunction buildInternalBeliefNode(args: {\n args: InternalCreateBeliefArgs;\n globalId: string;\n normalizedBeliefType?: string;\n now: number;\n scope: InternalBeliefScope;\n seedOpinion: SeedOpinion;\n}) {\n return {\n globalId: args.globalId,\n topicId: args.scope.topicId,\n projectId: args.scope.projectId,\n tenantId: args.scope.tenantId,\n workspaceId: args.scope.workspaceId,\n nodeType: \"belief\" as const,\n canonicalText: args.args.formulation,\n contentHash: generateContentHash(args.args.formulation),\n status: \"active\" as const,\n epistemicLayer: \"L3\",\n sourceType: args.args.userId.startsWith(\"agent:\")\n ? (\"ai_generated\" as const)\n : (\"human\" as const),\n ...(args.normalizedBeliefType\n ? { beliefType: args.normalizedBeliefType }\n : {}),\n createdAt: args.now,\n updatedAt: args.now,\n createdBy: args.args.userId,\n ...args.seedOpinion,\n tupleContradicted: false,\n metadata: buildInternalBeliefMetadata(args.args, args.normalizedBeliefType),\n };\n}\n\nfunction buildInternalBeliefMetadata(\n args: InternalCreateBeliefArgs,\n normalizedBeliefType?: string\n): Record<string, unknown> {\n return {\n ...(args.confidence ? { confidence: args.confidence } : {}),\n tupleContradicted: false,\n rationale: args.rationale || \"\",\n topic: args.topic || args.pillar || \"\",\n pillar: args.pillar || args.topic || \"\",\n category: args.category || \"\",\n subcategory: args.subcategory || \"\",\n categoryIcon: args.categoryIcon || \"\",\n sprintId: args.sprintId,\n sourceBeliefIds: args.sourceBeliefIds || [],\n criticality: args.criticality || \"unanalyzed\",\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n supportingEvidenceIds: [],\n contradictingEvidenceIds: [],\n testingQuestionIds: [],\n linkedInsightIds: [],\n ...(isRecord(args.extraMetadata) ? args.extraMetadata : {}),\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nasync function insertInternalBeliefConfidence(\n ctx: MutationCtx,\n args: {\n args: InternalCreateBeliefArgs;\n baseRate: number;\n nodeId: Id<\"epistemicNodes\">;\n now: number;\n seedOpinion: SeedOpinion;\n }\n): Promise<void> {\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: args.nodeId,\n belief: args.seedOpinion.opinion_b,\n disbelief: args.seedOpinion.opinion_d,\n uncertainty: args.seedOpinion.opinion_u,\n baseRate: args.baseRate,\n trigger: \"initial\",\n rationale:\n \"LKC-2 mandatory prior: seeded vacuous opinion at belief creation.\",\n assessedBy: args.args.userId,\n assessedAt: args.now,\n slOperator: \"prior_seed\",\n })\n );\n}\n\nasync function scheduleInternalBeliefSideEffects(\n ctx: MutationCtx,\n args: {\n args: InternalCreateBeliefArgs;\n baseRate: number;\n nodeId: Id<\"epistemicNodes\">;\n now: number;\n scope: InternalBeliefScope;\n seedOpinion: SeedOpinion;\n }\n): Promise<void> {\n await scheduleInternalNeo4jSync(ctx, args.nodeId);\n await insertInternalBeliefAudit(ctx, args);\n await scheduleInternalBeliefEmbedding(ctx, args);\n await scheduleInternalBeliefCategorization(ctx, args);\n await markBeliefGraphDirty(ctx, {\n projectId: args.scope.projectId,\n topicId: String(args.scope.topicId),\n });\n}\n\nasync function scheduleInternalNeo4jSync(\n ctx: MutationCtx,\n nodeId: Id<\"epistemicNodes\">\n): Promise<void> {\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n}\n\nasync function insertInternalBeliefAudit(\n ctx: MutationCtx,\n args: {\n args: InternalCreateBeliefArgs;\n baseRate: number;\n nodeId: Id<\"epistemicNodes\">;\n now: number;\n scope: InternalBeliefScope;\n seedOpinion: SeedOpinion;\n }\n): Promise<void> {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"created\",\n changedAt: args.now,\n changedBy: args.args.userId,\n isAgent: false,\n newState: {\n formulation: args.args.formulation,\n baseRate: args.baseRate,\n confidence: args.args.confidence,\n opinion: {\n b: args.seedOpinion.opinion_b,\n d: args.seedOpinion.opinion_d,\n u: args.seedOpinion.opinion_u,\n a: args.seedOpinion.opinion_a,\n },\n tupleContradicted: false,\n source: \"internal\",\n },\n projectId: args.scope.projectId,\n topicId: String(args.scope.topicId),\n });\n}\n\nasync function scheduleInternalBeliefEmbedding(\n ctx: MutationCtx,\n args: {\n args: InternalCreateBeliefArgs;\n nodeId: Id<\"epistemicNodes\">;\n scope: InternalBeliefScope;\n }\n): Promise<void> {\n if (!args.scope.topicId) {\n return;\n }\n await ctx.scheduler.runAfter(0, EMBEDDING_GENERATION_ACTION, {\n nodeId: args.nodeId,\n projectId: args.scope.projectId,\n topicId: args.scope.topicId ? String(args.scope.topicId) : undefined,\n createdBy: args.args.userId,\n nodeType: \"belief\" as const,\n text: buildBeliefEmbeddingText(args.args),\n ...(args.args.confidence\n ? { confidence: numericRequestedConfidence(args.args.confidence) }\n : {}),\n });\n}\n\nfunction buildBeliefEmbeddingText(args: InternalCreateBeliefArgs): string {\n return args.rationale\n ? `${args.formulation}\\n\\nRationale: ${args.rationale}`\n : args.formulation;\n}\n\nfunction numericRequestedConfidence(\n confidence: NonNullable<InternalCreateBeliefArgs[\"confidence\"]>\n): number {\n if (confidence === \"high\") {\n return 0.8;\n }\n if (confidence === \"low\") {\n return 0.3;\n }\n return 0.5;\n}\n\nasync function scheduleInternalBeliefCategorization(\n ctx: MutationCtx,\n args: {\n args: InternalCreateBeliefArgs;\n nodeId: Id<\"epistemicNodes\">;\n scope: InternalBeliefScope;\n }\n): Promise<void> {\n if (\n normalizePillar(args.args.pillar || args.args.topic) !== \"other\" ||\n !args.scope.topicId\n ) {\n return;\n }\n await ctx.scheduler.runAfter(2500, BELIEF_CATEGORIZATION_ACTION, {\n nodeId: args.nodeId,\n projectId: args.scope.projectId,\n topicId: String(args.scope.topicId),\n });\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Split belief confidence and lifecycle mutations out of epistemicBeliefs.ts. */\n\nimport { requireScopeWriteAccess } from \"@lucern/access-control/access\";\nimport type { SLOperator } from \"@lucern/confidence\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx } from \"./convex\";\nimport { internal, internalMutation, mutation } from \"./convex\";\nimport { applyBeliefConfidenceChange } from \"./epistemicBeliefs.confidence\";\nimport {\n type BeliefConfidenceTrigger,\n readBeliefNodeView,\n requireAuthenticatedUserId,\n} from \"./epistemicBeliefs.helpers\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\ninterface AppendSlScoringArgs {\n baseRate: number;\n belief: number;\n disbelief: number;\n nodeId: Id<\"epistemicNodes\">;\n rationale?: string;\n slOperator?: SLOperator;\n trigger: BeliefConfidenceTrigger;\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringWorktreeId?: string;\n uncertainty: number;\n userId: string;\n}\n\ntype MutableBeliefStatus = \"active\" | \"archived\" | \"superseded\";\n\ninterface UpdateStatusArgs {\n nodeId: Id<\"epistemicNodes\">;\n reason?: string;\n status: MutableBeliefStatus;\n userId: string;\n}\n\ninterface ArchiveArgs {\n nodeId: Id<\"epistemicNodes\">;\n reason?: string;\n userId: string;\n}\n\ninterface UpdateRationaleArgs {\n nodeId: Id<\"epistemicNodes\">;\n rationale?: string;\n userId: string;\n}\n\ninterface UpdateStatusInternalArgs extends UpdateStatusArgs {\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n runtimePackKey?: string;\n runtimeToolName?: string;\n}\n\nexport const appendSlScoring = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n // SL opinion — the ONLY confidence input (EK-7)\n belief: v.number(), // b: evidence FOR [0,1]\n disbelief: v.number(), // d: evidence AGAINST [0,1]\n uncertainty: v.number(), // u: lack of evidence [0,1]\n baseRate: v.number(), // a: prior probability [0,1]\n trigger: v.union(\n v.literal(\"evidence_added\"),\n v.literal(\"evidence_removed\"),\n v.literal(\"contradiction_detected\"),\n v.literal(\"contradiction_resolved\"),\n v.literal(\"agent_assessment\"),\n v.literal(\"worktree_outcome\"),\n v.literal(\"worktree_completed\"),\n // SL-specific triggers\n v.literal(\"fusion\"),\n v.literal(\"discount\"),\n v.literal(\"deduction\"),\n v.literal(\"backfill_synthetic\")\n ),\n rationale: v.optional(v.string()),\n userId: v.string(),\n // SL operator provenance (optional — defaults inside the SL scorer)\n slOperator: v.optional(\n v.union(\n v.literal(\"cumulative_fusion\"),\n v.literal(\"averaging_fusion\"),\n v.literal(\"trust_discount\"),\n v.literal(\"conditional_deduction\"),\n v.literal(\"dependency_cascade\"),\n v.literal(\"negation\"),\n v.literal(\"constraint_fusion\"),\n v.literal(\"no_op\"),\n v.literal(\"prior_seed\")\n )\n ),\n triggeringEvidenceId: v.optional(v.id(\"epistemicNodes\")),\n triggeringWorktreeId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: AppendSlScoringArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const result = await applyBeliefConfidenceChange(ctx, {\n nodeId: args.nodeId,\n belief: args.belief,\n disbelief: args.disbelief,\n uncertainty: args.uncertainty,\n baseRate: args.baseRate,\n trigger: args.trigger,\n rationale: args.rationale,\n authenticatedUserId,\n slOperator: args.slOperator,\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringWorktreeId: args.triggeringWorktreeId,\n });\n\n // Schedule edge-defined SL propagation through graph edges (EK-7, LKC-5)\n // Only propagate if confidence actually changed (avoid noise)\n if (Math.abs(result.newConfidence - result.previousConfidence) >= 0.01) {\n await ctx.scheduler.runAfter(\n 0,\n internal.epistemicBeliefs.propagateConfidenceChange,\n {\n nodeId: args.nodeId,\n opinion_b: args.belief,\n opinion_d: args.disbelief,\n opinion_u: args.uncertainty,\n opinion_a: args.baseRate ?? 0.5,\n userId: authenticatedUserId,\n }\n );\n }\n\n return {\n nodeId: result.nodeId,\n previousConfidence: result.previousConfidence,\n newConfidence: result.newConfidence,\n opinion: result.opinion,\n };\n },\n});\n\n// Two-axis model (valence/certainty) — REMOVED in EK-7.\n// All confidence movement is evidence-backed SL scoring, not user-authored state.\n\n// =============================================================================\n// UPDATE STATUS\n// =============================================================================\n\n/**\n * Update a belief's status.\n */\nexport const updateStatus = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n ),\n reason: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateStatusArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = readBeliefNodeView(await ctx.db.get(args.nodeId));\n if (!node) {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireScopeWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const previousStatus = node.status;\n\n // Update the node's status and metadata in a single atomic patch\n const metadata = node.metadata ?? {};\n await ctx.db.patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n metadata: {\n ...metadata,\n status: args.status,\n },\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n previousState: { status: previousStatus },\n newState: { status: args.status, reason: args.reason },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return { nodeId: args.nodeId, previousStatus, newStatus: args.status };\n },\n});\n\n// =============================================================================\n// ARCHIVE\n// =============================================================================\n\n/**\n * Archive a belief (soft delete).\n * Lucern invariant: Beliefs are never deleted, only archived.\n */\nexport const archive = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n reason: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: ArchiveArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const node = readBeliefNodeView(await ctx.db.get(args.nodeId));\n if (!node) {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireScopeWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n return await ctx.runMutation(\n // Use updateStatus internally\n internal.epistemicBeliefs.updateStatusInternal,\n {\n nodeId: args.nodeId,\n status: \"archived\",\n reason: args.reason,\n userId: authenticatedUserId,\n }\n );\n },\n});\n\n// =============================================================================\n// UPDATE RATIONALE\n// =============================================================================\n\n/**\n * Update a belief rationale without changing formulation.\n * Formulation mutability rules are unchanged (use fork/refine paths for wording).\n */\nexport const updateRationale = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateRationaleArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = readBeliefNodeView(await ctx.db.get(args.nodeId));\n if (!node) {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireScopeWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const metadata = node.metadata ?? {};\n const previousRationale =\n typeof metadata.rationale === \"string\" ? metadata.rationale : undefined;\n const nextRationale = args.rationale?.trim();\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n rationale:\n nextRationale && nextRationale.length > 0 ? nextRationale : undefined,\n },\n updatedAt: now,\n });\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n previousState: { rationale: previousRationale },\n newState: {\n rationale:\n nextRationale && nextRationale.length > 0 ? nextRationale : undefined,\n },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return {\n nodeId: args.nodeId,\n previousRationale,\n newRationale: nextRationale,\n };\n },\n});\n\n// Internal version for use by other mutations\nexport const updateStatusInternal = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n ),\n reason: v.optional(v.string()),\n userId: v.string(),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateStatusInternalArgs) => {\n const now = Date.now();\n\n const node = readBeliefNodeView(await ctx.db.get(args.nodeId));\n if (!node) {\n throw new Error(\"Belief not found\");\n }\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: await resolveNodeScopeForWorkspaceIsolation(ctx, node),\n mutationName: \"epistemicBeliefs.updateStatusInternal\",\n });\n\n const previousStatus = node.status;\n\n await ctx.db.patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n previousState: { status: previousStatus },\n newState: { status: args.status, reason: args.reason },\n changedBy: args.userId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return { nodeId: args.nodeId, previousStatus, newStatus: args.status };\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * logicalRoleInference module implementation.\n */\n\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\n\ntype LogicalRole =\n | \"necessary\"\n | \"sufficient\"\n | \"necessary_sufficient\"\n | \"contributory\"\n | \"corroborative\";\n\nconst PILLAR_IMPORTANCE: Record<string, number> = {\n market: 1,\n competition: 2,\n product: 3,\n team: 4,\n financials: 5,\n timing: 6,\n other: 10,\n};\n\ntype GraphCtx = QueryCtx | MutationCtx;\n\ninterface IndexQueryBuilder {\n eq(field: string, value: unknown): IndexQueryBuilder;\n}\n\ninterface EpistemicEdgeRecord {\n fromNodeId?: string;\n toNodeId?: string;\n}\n\nexport async function computeLogicalRole(\n ctx: GraphCtx,\n evidenceId: Id<\"epistemicNodes\">,\n beliefId: Id<\"epistemicNodes\">\n): Promise<LogicalRole> {\n const belief = await ctx.db.get(beliefId);\n if (belief?.nodeType !== \"belief\") {\n return \"contributory\";\n }\n\n const beliefMetadata = belief.metadata as Record<string, unknown> | undefined;\n const pillar = (beliefMetadata?.pillar as string) || \"other\";\n const pillarRank = PILLAR_IMPORTANCE[pillar] ?? 10;\n\n const isSynthesized = await checkIfSynthesizedHypothesis(ctx, beliefId);\n const testingQuestions = await getTestingQuestionsForBelief(ctx, beliefId);\n const answeredQuestions = await getQuestionsAnsweredByEvidence(\n ctx,\n evidenceId\n );\n const directlyTests = testingQuestions.filter((questionId) =>\n answeredQuestions.includes(questionId)\n );\n\n if (directlyTests.length === 0) {\n return \"contributory\";\n }\n\n if (isSynthesized && pillarRank <= 2) {\n return directlyTests.length > 1 ? \"necessary_sufficient\" : \"necessary\";\n }\n\n if (isSynthesized) {\n return \"necessary\";\n }\n\n return directlyTests.length > 1 ? \"necessary\" : \"contributory\";\n}\n\nasync function checkIfSynthesizedHypothesis(\n ctx: GraphCtx,\n beliefId: Id<\"epistemicNodes\">\n): Promise<boolean> {\n const belief = await ctx.db.get(beliefId);\n if (!belief) {\n return false;\n }\n\n const metadata = belief.metadata as Record<string, unknown> | undefined;\n return (\n metadata?.isSynthesized === true || metadata?.beliefStatus === \"hypothesis\"\n );\n}\n\nasync function getTestingQuestionsForBelief(\n ctx: GraphCtx,\n beliefId: Id<\"epistemicNodes\">\n): Promise<string[]> {\n const testEdges = (await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q: IndexQueryBuilder) =>\n q.eq(\"toNodeId\", beliefId).eq(\"edgeType\", \"tests\")\n )\n .collect()) as EpistemicEdgeRecord[];\n\n return testEdges\n .map((edge: EpistemicEdgeRecord) => edge.fromNodeId as string)\n .filter((id): id is string => id !== undefined);\n}\n\nasync function getQuestionsAnsweredByEvidence(\n ctx: GraphCtx,\n evidenceId: Id<\"epistemicNodes\">\n): Promise<string[]> {\n const answerEdges = (await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_type\", (q: IndexQueryBuilder) =>\n q.eq(\"fromNodeId\", evidenceId).eq(\"edgeType\", \"derived_from\")\n )\n .collect()) as EpistemicEdgeRecord[];\n\n return answerEdges\n .map((edge: EpistemicEdgeRecord) => edge.toNodeId as string)\n .filter((id): id is string => id !== undefined);\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Split belief linking and evidence wiring out of epistemicBeliefs.ts. */\n\nimport { requireScopeWriteAccess } from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal, mutation, query } from \"./convex\";\nimport {\n buildBeliefEvidenceNotFoundResult,\n buildBeliefStatusSuccessResult,\n insightIdUnion,\n optionalBeliefScopeArgs,\n requireAuthenticatedUserId,\n resolveBeliefScopeOrNull,\n} from \"./epistemicBeliefs.helpers\";\nimport { insertEpistemicEdge } from \"./epistemicInsert.js\";\nimport { generateGlobalId } from \"./globalId\";\nimport { computeLogicalRole } from \"./logicalRoleInference\";\n\ninterface TopicTypeIndexQuery {\n eq(field: \"topicId\" | \"nodeType\", value: unknown): TopicTypeIndexQuery;\n}\n\ninterface RelationshipFilterQuery {\n eq(left: unknown, right: unknown): unknown;\n field(name: string): unknown;\n or(...conditions: unknown[]): unknown;\n}\n\ntype Pillar =\n | \"competition\"\n | \"customer\"\n | \"deal\"\n | \"distribution\"\n | \"financials\"\n | \"market\"\n | \"other\"\n | \"product\"\n | \"regulatory\"\n | \"risks\"\n | \"team\"\n | \"technology\"\n | \"timing\";\n\ninterface UpdatePillarArgs {\n nodeId: Id<\"epistemicNodes\">;\n pillar: Pillar;\n userId: string;\n}\n\ninterface BeliefScopeQueryArgs {\n projectId?: string;\n topicId?: string;\n}\n\ntype LinkBeliefEdgeType =\n | \"contains\"\n | \"depends_on\"\n | \"derived_from\"\n | \"informs\"\n | \"supersedes\"\n | \"supports\"\n | \"tests\";\n\ninterface LinkBeliefsArgs {\n context?: string;\n edgeType: LinkBeliefEdgeType;\n fromNodeId: Id<\"epistemicNodes\">;\n toNodeId: Id<\"epistemicNodes\">;\n userId: string;\n weight?: number;\n}\n\ninterface LinkEvidenceArgs {\n beliefNodeId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n rationale?: string;\n type: \"contradicting\" | \"supporting\";\n userId: string;\n weight: number;\n}\n\ninterface UnlinkEvidenceArgs {\n beliefNodeId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n userId: string;\n}\n\ninterface GetWithEvidenceArgs {\n nodeId: Id<\"epistemicNodes\">;\n}\n\ninterface GetRelationshipsArgs {\n direction?: \"both\" | \"in\" | \"out\";\n nodeId: Id<\"epistemicNodes\">;\n}\n\ninterface EpistemicNodeRow {\n _id: Id<\"epistemicNodes\">;\n globalId?: string;\n metadata?: Record<string, unknown>;\n nodeType: string;\n projectId?: string;\n status?: string;\n topicId?: string;\n}\n\ninterface EpistemicEdgeRow {\n _id: Id<\"epistemicEdges\">;\n edgeType?: string;\n fromGlobalId?: string;\n fromNodeId?: string;\n fromNodeType?: string;\n fromUuid?: string;\n globalId: string;\n sourceGlobalId?: string;\n targetGlobalId?: string;\n toGlobalId?: string;\n toNodeId?: string;\n toUuid?: string;\n weight?: number;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readOptionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : 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 readEpistemicNodeRow(value: unknown): EpistemicNodeRow | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = readConvexId<\"epistemicNodes\">(value._id);\n const nodeType = readOptionalString(value.nodeType);\n if (!(id && nodeType)) {\n return null;\n }\n const row: EpistemicNodeRow = { _id: id, nodeType };\n const globalId = readOptionalString(value.globalId);\n if (globalId !== undefined) {\n row.globalId = globalId;\n }\n const metadata = readRecord(value.metadata);\n if (metadata !== undefined) {\n row.metadata = metadata;\n }\n const projectId = readOptionalString(value.projectId);\n if (projectId !== undefined) {\n row.projectId = projectId;\n }\n const status = readOptionalString(value.status);\n if (status !== undefined) {\n row.status = status;\n }\n const topicId = readOptionalString(value.topicId);\n if (topicId !== undefined) {\n row.topicId = topicId;\n }\n return row;\n}\n\nfunction requireEpistemicNodeRow(\n value: unknown,\n nodeType: \"belief\" | \"evidence\",\n message: string\n): EpistemicNodeRow {\n const node = readEpistemicNodeRow(value);\n if (!node || node.nodeType !== nodeType) {\n throw new Error(message);\n }\n return node;\n}\n\nfunction requireNodeGlobalId(node: EpistemicNodeRow, context: string): string {\n if (!node.globalId) {\n throw new Error(\n `${context} requires node.globalId for canonical edge endpoints`\n );\n }\n return node.globalId;\n}\n\nfunction readEpistemicEdgeRow(value: unknown): EpistemicEdgeRow | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = readConvexId<\"epistemicEdges\">(value._id);\n const globalId = readOptionalString(value.globalId);\n if (!(id && globalId)) {\n return null;\n }\n const row: EpistemicEdgeRow = { _id: id, globalId };\n const edgeType = readOptionalString(value.edgeType);\n if (edgeType !== undefined) {\n row.edgeType = edgeType;\n }\n const fromGlobalId = readOptionalString(value.fromGlobalId);\n if (fromGlobalId !== undefined) {\n row.fromGlobalId = fromGlobalId;\n }\n const fromNodeId = readOptionalString(value.fromNodeId);\n if (fromNodeId !== undefined) {\n row.fromNodeId = fromNodeId;\n }\n const fromNodeType = readOptionalString(value.fromNodeType);\n if (fromNodeType !== undefined) {\n row.fromNodeType = fromNodeType;\n }\n const fromUuid = readOptionalString(value.fromUuid);\n if (fromUuid !== undefined) {\n row.fromUuid = fromUuid;\n }\n const sourceGlobalId = readOptionalString(value.sourceGlobalId);\n if (sourceGlobalId !== undefined) {\n row.sourceGlobalId = sourceGlobalId;\n }\n const targetGlobalId = readOptionalString(value.targetGlobalId);\n if (targetGlobalId !== undefined) {\n row.targetGlobalId = targetGlobalId;\n }\n const toGlobalId = readOptionalString(value.toGlobalId);\n if (toGlobalId !== undefined) {\n row.toGlobalId = toGlobalId;\n }\n const toNodeId = readOptionalString(value.toNodeId);\n if (toNodeId !== undefined) {\n row.toNodeId = toNodeId;\n }\n const toUuid = readOptionalString(value.toUuid);\n if (toUuid !== undefined) {\n row.toUuid = toUuid;\n }\n const weight = readOptionalNumber(value.weight);\n if (weight !== undefined) {\n row.weight = weight;\n }\n return row;\n}\n\nfunction readEpistemicEdgeRows(values: readonly unknown[]): EpistemicEdgeRow[] {\n return values.flatMap((value) => {\n const row = readEpistemicEdgeRow(value);\n return row ? [row] : [];\n });\n}\n\nfunction assertSignedImpactScore(value: unknown, context: string): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value === 0 ||\n value < -1 ||\n value > 1\n ) {\n throw new Error(`${context} requires explicit nonzero weight in [-1, 1]`);\n }\n return value;\n}\n\nexport const updatePillar = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n pillar: v.union(\n v.literal(\"market\"),\n v.literal(\"competition\"),\n v.literal(\"product\"),\n v.literal(\"team\"),\n v.literal(\"financials\"),\n v.literal(\"regulatory\"),\n v.literal(\"timing\"),\n v.literal(\"customer\"),\n v.literal(\"technology\"),\n v.literal(\"distribution\"),\n v.literal(\"deal\"),\n v.literal(\"risks\"),\n v.literal(\"other\")\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdatePillarArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const existingNode = requireEpistemicNodeRow(\n await ctx.db.get(args.nodeId),\n \"belief\",\n \"Belief not found\"\n );\n if (!existingNode.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireScopeWriteAccess(\n ctx,\n existingNode.projectId,\n authenticatedUserId\n );\n\n // Update the epistemicNode (canonical source of truth)\n let previousPillar: unknown = null;\n const metadata = existingNode.metadata ?? {};\n previousPillar = metadata.pillar;\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n pillar: args.pillar,\n topic: args.pillar,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n // Audit log - Lucern Invariant #14: no silent state transitions\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: String(args.nodeId),\n changeType: \"pillar_changed\",\n projectId: existingNode.projectId,\n changedBy: authenticatedUserId,\n changedAt: now,\n isAgent: false,\n previousState: { pillar: previousPillar },\n newState: { pillar: args.pillar },\n });\n\n return {\n nodeId: args.nodeId,\n previousPillar,\n newPillar: args.pillar,\n };\n },\n});\n\n// =============================================================================\n// COUNT BY STATUS\n// =============================================================================\n\n/**\n * Get counts of beliefs by status for a project.\n */\nexport const getCountByStatus = query({\n args: {\n ...optionalBeliefScopeArgs,\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: BeliefScopeQueryArgs) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return { active: 0, superseded: 0, archived: 0, total: 0 };\n }\n\n const nodes = (\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: TopicTypeIndexQuery) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n )\n .collect()\n ).flatMap((row) => {\n const node = readEpistemicNodeRow(row);\n return node?.nodeType === \"belief\" ? [node] : [];\n });\n\n const counts = {\n active: 0,\n superseded: 0,\n archived: 0,\n total: nodes.length,\n };\n\n for (const node of nodes) {\n if (node.status === \"active\") {\n counts.active++;\n } else if (node.status === \"superseded\") {\n counts.superseded++;\n } else if (node.status === \"archived\") {\n counts.archived++;\n }\n }\n\n return counts;\n },\n});\n\n// =============================================================================\n// LINK BELIEFS (Direct epistemicNodes → epistemicNodes)\n// =============================================================================\n\n/**\n * Create an edge between two beliefs in the epistemic spine.\n * This works with epistemicNodes IDs directly (no legacy lookup needed).\n */\nexport const linkBeliefs = mutation({\n args: {\n fromNodeId: v.id(\"epistemicNodes\"),\n toNodeId: v.id(\"epistemicNodes\"),\n edgeType: v.union(\n // Basic belief relationships\n v.literal(\"supersedes\"),\n v.literal(\"depends_on\"),\n v.literal(\"supports\"),\n v.literal(\"contains\"),\n v.literal(\"informs\"),\n v.literal(\"derived_from\"),\n v.literal(\"tests\")\n ),\n weight: v.optional(v.number()), // -1 to 1\n context: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: LinkBeliefsArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const fromNode = requireEpistemicNodeRow(\n await ctx.db.get(args.fromNodeId),\n \"belief\",\n \"One or both belief nodes not found\"\n );\n const toNode = requireEpistemicNodeRow(\n await ctx.db.get(args.toNodeId),\n \"belief\",\n \"One or both belief nodes not found\"\n );\n if (fromNode.projectId !== toNode.projectId) {\n throw new Error(\"Cannot link beliefs across different projects\");\n }\n if (!fromNode.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireScopeWriteAccess(ctx, fromNode.projectId, authenticatedUserId);\n const fromGlobalId = requireNodeGlobalId(fromNode, \"Belief link\");\n const toGlobalId = requireNodeGlobalId(toNode, \"Belief link\");\n\n const now = Date.now();\n\n // Create edge directly in Neo4j (MERGE handles duplicates)\n const edgeGlobalId = generateGlobalId();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId,\n toGlobalId,\n edgeType: args.edgeType,\n weight: args.weight ?? 1.0,\n context: args.context,\n createdBy: authenticatedUserId,\n topicId: fromNode.projectId ? String(fromNode.projectId) : undefined,\n fromNodeType: \"belief\",\n toNodeType: \"belief\",\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edgeGlobalId as unknown as Id<\"epistemicNodes\">,\n changeType: \"created\",\n previousState: null,\n newState: {\n fromNodeId: args.fromNodeId,\n toNodeId: args.toNodeId,\n edgeType: args.edgeType,\n },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: fromNode.projectId,\n });\n\n return { edgeGlobalId, created: true };\n },\n});\n\n// =============================================================================\n// LINK EVIDENCE (Insight) to Belief\n// =============================================================================\n\n/**\n * Link an insight (evidence) to a belief.\n * Creates an edge from evidence → belief with appropriate type.\n */\nexport const linkEvidence = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n insightId: insightIdUnion,\n type: v.union(v.literal(\"supporting\"), v.literal(\"contradicting\")),\n weight: v.number(),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: LinkEvidenceArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const _now = Date.now();\n\n // Verify the belief exists\n const belief = requireEpistemicNodeRow(\n await ctx.db.get(args.beliefNodeId),\n \"belief\",\n \"Belief not found\"\n );\n if (!belief.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireScopeWriteAccess(ctx, belief.projectId, authenticatedUserId);\n\n // Verify the insight exists\n const insight = requireEpistemicNodeRow(\n await ctx.db.get(args.insightId),\n \"evidence\",\n \"Insight not found\"\n );\n if (insight.projectId && insight.projectId !== belief.projectId) {\n throw new Error(\"Insight belongs to a different project\");\n }\n\n const evidenceNodeId = insight._id;\n const evidenceGlobalId = requireNodeGlobalId(insight, \"Evidence link\");\n const beliefGlobalId = requireNodeGlobalId(belief, \"Evidence link\");\n\n const weight = assertSignedImpactScore(args.weight, \"Evidence link\");\n if (args.type === \"supporting\" && weight < 0) {\n throw new Error(\"Supporting evidence links require positive weight\");\n }\n if (args.type === \"contradicting\" && weight > 0) {\n throw new Error(\"Contradicting evidence links require negative weight\");\n }\n const confidence = Math.abs(weight);\n\n // Determine edge type based on supporting/contradicting\n const edgeType = \"informs\"; // Both use informs, weight determines support/contradict\n\n // Compute logicalRole from graph structure\n const logicalRole = evidenceNodeId\n ? await computeLogicalRole(ctx, evidenceNodeId, args.beliefNodeId)\n : \"contributory\";\n\n // Create the edge directly in Neo4j (MERGE handles duplicates)\n const edgeGlobalId = generateGlobalId();\n await insertEpistemicEdge(ctx, {\n globalId: edgeGlobalId,\n // C2-RR.4 Defect E — canonical UUIDv7 endpoints, not Convex doc ids.\n fromNodeId: evidenceGlobalId,\n toNodeId: beliefGlobalId,\n sourceGlobalId: evidenceGlobalId,\n targetGlobalId: beliefGlobalId,\n edgeType,\n weight,\n confidence,\n context: args.rationale || `${args.type} evidence`,\n reasoningMethod: \"testimonial\",\n logicalRole,\n temporalClass: \"structural\",\n derivationType: \"evidence_sl_scoring\",\n metadata: {\n relation: args.type,\n confidence,\n impactScore: weight,\n invariant: \"evidence.belief_impact_required\",\n },\n createdBy: authenticatedUserId,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n topicId: belief.topicId ? String(belief.topicId) : undefined,\n projectId: belief.projectId ? String(belief.projectId) : undefined,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: evidenceGlobalId,\n toGlobalId: beliefGlobalId,\n edgeType,\n weight,\n confidence,\n context: args.rationale || `${args.type} evidence`,\n createdBy: authenticatedUserId,\n topicId: belief.projectId ? String(belief.projectId) : undefined,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n // Classification fields\n logicalRole,\n temporalClass: \"structural\", // Default - most evidence is long-lived\n });\n\n return { edgeGlobalId, evidenceNodeId, created: true };\n },\n});\n\n// =============================================================================\n// UNLINK EVIDENCE from Belief\n// =============================================================================\n\n/**\n * Remove the link between an insight and a belief.\n */\nexport const unlinkEvidence = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n insightId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UnlinkEvidenceArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const evidenceNodeRaw = await ctx.db.get(args.insightId);\n const evidenceNode = readEpistemicNodeRow(evidenceNodeRaw);\n if (evidenceNode?.nodeType !== \"evidence\") {\n return buildBeliefEvidenceNotFoundResult();\n }\n if (!evidenceNode.projectId) {\n throw new Error(\"Evidence has no project scope\");\n }\n await requireScopeWriteAccess(\n ctx,\n evidenceNode.projectId,\n authenticatedUserId\n );\n const beliefNode = requireEpistemicNodeRow(\n await ctx.db.get(args.beliefNodeId),\n \"belief\",\n \"Belief not found\"\n );\n if (beliefNode.projectId !== evidenceNode.projectId) {\n throw new Error(\"Belief and evidence belong to different projects\");\n }\n\n const evidenceGlobalId = requireNodeGlobalId(\n evidenceNode,\n \"Evidence unlink\"\n );\n const beliefGlobalId = requireNodeGlobalId(beliefNode, \"Evidence unlink\");\n\n // Find and delete the edge\n const edge = readEpistemicEdgeRow(\n await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", evidenceGlobalId).eq(\"toNodeId\", beliefGlobalId)\n )\n .first()\n );\n\n if (edge) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edge.globalId,\n changeType: \"edge_removed\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n fromNodeId: evidenceNode._id,\n toNodeId: args.beliefNodeId,\n },\n newState: null,\n projectId: evidenceNode.projectId,\n });\n }\n\n return buildBeliefStatusSuccessResult();\n },\n});\n\n// =============================================================================\n// GET BELIEF WITH EVIDENCE\n// =============================================================================\n\n/**\n * Get a belief along with all its linked evidence.\n */\nexport const getWithEvidence = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetWithEvidenceArgs) => {\n const belief = readEpistemicNodeRow(await ctx.db.get(args.nodeId));\n if (belief?.nodeType !== \"belief\") {\n return null;\n }\n const beliefGlobalId = requireNodeGlobalId(belief, \"Belief evidence read\");\n\n // Get all edges pointing TO this belief from evidence nodes\n const incomingEdges = readEpistemicEdgeRows(\n await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", beliefGlobalId).eq(\"edgeType\", \"informs\")\n )\n .collect()\n );\n\n // Get the evidence nodes\n const supporting: EpistemicNodeRow[] = [];\n const contradicting: EpistemicNodeRow[] = [];\n\n for (const edge of incomingEdges.filter(\n (incomingEdge) => incomingEdge.fromNodeType === \"evidence\"\n )) {\n const node = readEpistemicNodeRow(\n await resolveRelationshipEndpoint(\n ctx,\n edge.fromNodeId,\n edge.sourceGlobalId ?? edge.fromGlobalId ?? edge.fromUuid\n )\n );\n if (node?.nodeType === \"evidence\") {\n if ((edge.weight ?? 0) >= 0) {\n supporting.push(node);\n } else {\n contradicting.push(node);\n }\n }\n }\n\n return {\n belief,\n evidence: {\n supporting,\n contradicting,\n total: supporting.length + contradicting.length,\n },\n };\n },\n});\n\n// =============================================================================\n// GET RELATIONSHIPS\n// =============================================================================\n\nasync function collectRelationshipNodeRefs(\n ctx: { db: Pick<MutationCtx[\"db\"], \"get\"> },\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 =\n typeof node?.globalId === \"string\" ? node.globalId.trim() : \"\";\n if (globalId.length > 0) {\n refs.add(globalId);\n }\n return [...refs];\n}\n\nfunction endpointMatches(\n q: RelationshipFilterQuery,\n fields: string[],\n refs: string[]\n) {\n return q.or(\n ...fields.flatMap((field) => refs.map((ref) => q.eq(q.field(field), ref)))\n );\n}\n\nasync function resolveRelationshipEndpoint(\n ctx: { db: Pick<MutationCtx[\"db\"], \"get\" | \"query\"> },\n endpointId: unknown,\n globalEndpointId: unknown\n) {\n const candidates = [endpointId, globalEndpointId]\n .map((value) => (typeof value === \"string\" ? value.trim() : \"\"))\n .filter(\n (value, index, values) =>\n value.length > 0 && values.indexOf(value) === index\n );\n\n for (const candidate of candidates) {\n try {\n const direct = await ctx.db.get(candidate as Id<\"epistemicNodes\">);\n if (direct) {\n return direct;\n }\n } catch {\n // Public UUID/global endpoints are expected to miss direct storage lookup.\n }\n\n const byGlobalId = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", candidate))\n .first();\n if (byGlobalId) {\n return byGlobalId;\n }\n }\n\n return null;\n}\n\n/**\n * Get all relationships (edges) for a belief.\n */\nexport const getRelationships = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n direction: v.optional(\n v.union(v.literal(\"in\"), v.literal(\"out\"), v.literal(\"both\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetRelationshipsArgs) => {\n const direction = args.direction || \"both\";\n const results: {\n incoming: Array<{ edge: unknown; node: unknown }>;\n outgoing: Array<{ edge: unknown; node: unknown }>;\n } = {\n incoming: [],\n outgoing: [],\n };\n const nodeRefs = await collectRelationshipNodeRefs(ctx, args.nodeId);\n\n if (direction === \"in\" || direction === \"both\") {\n // Get edges pointing TO this node\n const inEdges = readEpistemicEdgeRows(\n await ctx.db\n .query(\"epistemicEdges\")\n .filter((q) =>\n endpointMatches(\n q,\n [\"toNodeId\", \"targetGlobalId\", \"toGlobalId\", \"toUuid\"],\n nodeRefs\n )\n )\n .collect()\n );\n\n for (const edge of inEdges) {\n const sourceNode = await resolveRelationshipEndpoint(\n ctx,\n edge.fromNodeId,\n edge.sourceGlobalId ?? edge.fromGlobalId ?? edge.fromUuid\n );\n results.incoming.push({ edge, node: sourceNode });\n }\n }\n\n if (direction === \"out\" || direction === \"both\") {\n // Get edges pointing FROM this node\n const outEdges = readEpistemicEdgeRows(\n await ctx.db\n .query(\"epistemicEdges\")\n .filter((q) =>\n endpointMatches(\n q,\n [\"fromNodeId\", \"sourceGlobalId\", \"fromGlobalId\", \"fromUuid\"],\n nodeRefs\n )\n )\n .collect()\n );\n\n for (const edge of outEdges) {\n const targetNode = await resolveRelationshipEndpoint(\n ctx,\n edge.toNodeId,\n edge.targetGlobalId ?? edge.toGlobalId ?? edge.toUuid\n );\n results.outgoing.push({ edge, node: targetNode });\n }\n }\n\n return results;\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Split read-only belief queries out of epistemicBeliefs.ts. */\n\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Doc, Id, QueryCtx } from \"./convex\";\nimport { query } from \"./convex\";\nimport { readBeliefNodeView } from \"./epistemicBeliefs.helpers\";\n\ntype EpistemicNodeId = Id<\"epistemicNodes\">;\ninterface BeliefLineageEntry {\n createdAt: number;\n forkReason?: string;\n formulation: string;\n nodeId: EpistemicNodeId;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\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 isBeliefNode(\n node: Doc<\"epistemicNodes\"> | null\n): node is Doc<\"epistemicNodes\"> & { nodeType: \"belief\" } {\n return readBeliefNodeView(node) !== null;\n}\n\nasync function resolveEpistemicNodeId(\n ctx: QueryCtx,\n ref: unknown\n): Promise<EpistemicNodeId | null> {\n const normalized = readOptionalString(ref);\n if (!normalized) {\n return null;\n }\n const direct = ctx.db.normalizeId?.(\"epistemicNodes\", normalized);\n if (direct) {\n return direct;\n }\n const byGlobalId = readBeliefNodeView(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", normalized))\n .first()\n );\n return byGlobalId?._id ?? null;\n}\n\nfunction readLineageEdgeTarget(edge: unknown): string | undefined {\n if (!isRecord(edge)) {\n return;\n }\n return readOptionalString(edge.toNodeId);\n}\n\nexport const getConfidenceHistory = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: { nodeId: EpistemicNodeId }) => {\n const node = await ctx.db.get(args.nodeId);\n if (node?.nodeType !== \"belief\") {\n return [];\n }\n\n return await ctx.db\n .query(\"beliefConfidence\")\n .withIndex(\"by_beliefId_time\", (q) => q.eq(\"beliefId\", args.nodeId))\n .order(\"asc\")\n .collect();\n },\n});\n\n// =============================================================================\n// GET BELIEF LINEAGE\n// =============================================================================\n\n/**\n * Get the lineage of a belief (all forks and parents).\n */\nexport const getLineage = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: { nodeId: EpistemicNodeId }) => {\n const lineage: BeliefLineageEntry[] = [];\n\n let currentId: EpistemicNodeId | null = args.nodeId;\n\n while (currentId) {\n const beliefId: EpistemicNodeId = currentId;\n const node = readBeliefNodeView(await ctx.db.get(beliefId));\n if (!node) {\n break;\n }\n\n const metadata = node.metadata ?? {};\n\n lineage.push({\n nodeId: node._id,\n formulation: node.canonicalText ?? \"\",\n forkReason: readOptionalString(metadata.forkReason),\n createdAt: node.createdAt ?? 0,\n });\n\n // Find parent via supersedes edge\n const edges: Doc<\"epistemicEdges\">[] = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_type\", (q) =>\n q\n .eq(\"fromNodeId\", node.globalId ?? String(beliefId))\n .eq(\"edgeType\", \"supersedes\")\n )\n .collect();\n\n const edgeTarget = readLineageEdgeTarget(edges[0]);\n currentId =\n (await resolveEpistemicNodeId(ctx, edgeTarget)) ??\n readConvexId<\"epistemicNodes\">(metadata.forkedFrom) ??\n null;\n }\n\n return lineage;\n },\n});\n\n// =============================================================================\n// GET BELIEFS BY IDS\n// =============================================================================\n\n/**\n * Get multiple beliefs by their IDs.\n */\nexport const getByIds = query({\n args: {\n nodeIds: v.array(v.id(\"epistemicNodes\")),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: { nodeIds: EpistemicNodeId[] }) => {\n const beliefs = await Promise.all(args.nodeIds.map((id) => ctx.db.get(id)));\n return beliefs.filter(isBeliefNode);\n },\n});\n\n// =============================================================================\n// GET BY SPRINT\n// =============================================================================\n\n/**\n * Get all beliefs associated with a worktree via worktreeBeliefCluster.\n */\nexport const getByWorktree = query({\n args: {\n worktreeId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: { worktreeId: string }) => {\n const worktree = await ctx.db.get(args.worktreeId as Id<\"worktrees\">);\n if (!worktree) {\n return [];\n }\n\n const clusterLinks = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_worktree\", (q) => q.eq(\"worktreeId\", args.worktreeId))\n .collect();\n\n const beliefs: Doc<\"epistemicNodes\">[] = [];\n for (const link of clusterLinks) {\n const beliefId = isRecord(link)\n ? readConvexId<\"epistemicNodes\">(link.beliefId)\n : undefined;\n if (!beliefId) {\n continue;\n }\n const node = await ctx.db.get(beliefId);\n if (isBeliefNode(node)) {\n beliefs.push(node);\n }\n }\n return beliefs;\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Epistemic Spine helper module split from epistemicHelpers.ts.\n */\n\nimport type { Id } from \"./convex\";\n\n// =============================================================================\n// TYPE MAPPINGS\n// =============================================================================\n\n// =============================================================================\n// EPISTEMIC LAYER ARCHITECTURE (Lucern Invariant Compliance)\n// =============================================================================\n\n/**\n * Epistemic Layer - governs traversal rules\n * L4 → L3 → L2 → L1 (never skip layers)\n */\nexport type EpistemicLayer =\n | \"L4\"\n | \"L3\"\n | \"L2\"\n | \"L1\"\n | \"ontological\"\n | \"organizational\";\n\n/**\n * Map nodeType to its epistemic layer\n *\n * Layer semantics:\n * - L4: Audit targets (decisions, outcomes) - what we committed to\n * - L3: Traversal anchors (beliefs, questions, themes) - epistemic structure\n * - L2: Compression boundary (claims, evidence, synthesis) - minimum reasoning unit\n * - L1: Terminal leaves (atomic_fact, excerpt, source) - non-traversable grounding\n * - ontological: Entities in the world (companies, people) - not epistemic\n * - organizational: Structural containers (topics, lenses, worktrees) - not epistemic\n */\nexport function getNodeLayer(nodeType: string): EpistemicLayer {\n switch (nodeType) {\n // L4: Audit targets\n case \"decision\":\n return \"L4\";\n\n // L3: Traversal anchors\n case \"belief\":\n case \"question\":\n case \"theme\":\n case \"deal\":\n return \"L3\";\n\n // L2: Compression boundary\n case \"claim\":\n case \"evidence\":\n case \"synthesis\":\n case \"answer\":\n return \"L2\";\n\n // L1: Terminal leaves\n case \"atomic_fact\":\n case \"excerpt\":\n case \"source\":\n return \"L1\";\n\n // Ontological entities\n case \"company\":\n case \"person\":\n case \"investor\":\n case \"function\":\n case \"value_chain\":\n return \"ontological\";\n\n // Organizational containers\n case \"topic\":\n return \"organizational\";\n\n default:\n // Unknown types default to L2 (safest for traversal)\n console.warn(\n `[EpistemicLayer] Unknown nodeType: ${nodeType}, defaulting to L2`\n );\n return \"L2\";\n }\n}\n\n/**\n * Layer traversal rules\n * Key constraint: Cannot skip layers during traversal\n */\nexport const LAYER_TRAVERSAL_RULES = {\n L4: {\n canReach: [\"L3\", \"L4\"], // Decisions can reach beliefs/questions\n mustPassThrough: \"L3\", // Must go through L3 to reach L2\n },\n L3: {\n canReach: [\"L2\", \"L3\", \"L4\"], // Beliefs can reach evidence, other beliefs, or decisions\n mustPassThrough: \"L2\", // Must go through L2 to reach L1\n },\n L2: {\n canReach: [\"L1\", \"L2\", \"L3\"], // Evidence can reach sources, other evidence, or beliefs\n mustPassThrough: null, // L2 can reach L1 directly\n },\n L1: {\n canReach: [\"L1\"], // Sources can only reach other sources\n mustPassThrough: null, // Terminal - no traversal beyond\n },\n ontological: {\n canReach: [\"L3\", \"L2\", \"ontological\"], // Entities can link to epistemic structure\n mustPassThrough: null, // No layer constraints for entities\n },\n organizational: {\n canReach: [\"L3\", \"L2\", \"organizational\"], // Containers scope epistemic structure + nest\n mustPassThrough: null, // No layer constraints for containers\n },\n} as const;\n\n/**\n * Check if a direct edge between two layers is allowed\n */\nexport function isValidLayerConnection(\n fromLayer: EpistemicLayer,\n toLayer: EpistemicLayer\n): boolean {\n const rules = LAYER_TRAVERSAL_RULES[fromLayer];\n return (rules.canReach as readonly string[]).includes(toLayer);\n}\n\n/**\n * Get layer hierarchy number (for comparison)\n * Higher number = higher layer\n */\nexport function getLayerDepth(layer: EpistemicLayer): number {\n switch (layer) {\n case \"L4\":\n return 4;\n case \"L3\":\n return 3;\n case \"L2\":\n return 2;\n case \"L1\":\n return 1;\n case \"ontological\":\n return 0; // Ontological exists outside the epistemic hierarchy\n case \"organizational\":\n return 0; // Organizational exists outside the epistemic hierarchy\n default:\n return 2;\n }\n}\n\n/**\n * Check if we can traverse from one layer to another\n * (considering intermediate layers)\n */\nexport function canTraverseToLayer(\n fromLayer: EpistemicLayer,\n toLayer: EpistemicLayer\n): boolean {\n const fromDepth = getLayerDepth(fromLayer);\n const toDepth = getLayerDepth(toLayer);\n\n // Ontological/organizational layers are special - use explicit rules\n if (\n fromLayer === \"ontological\" ||\n toLayer === \"ontological\" ||\n fromLayer === \"organizational\" ||\n toLayer === \"organizational\"\n ) {\n return isValidLayerConnection(fromLayer, toLayer);\n }\n\n // Can always stay at same layer\n if (fromDepth === toDepth) {\n return true;\n }\n\n // Can go up (L1→L2→L3→L4) or down (L4→L3→L2→L1)\n // But must respect layer rules\n return isValidLayerConnection(fromLayer, toLayer);\n}\n\n// =============================================================================\n// PHASE 2D: LAYER-AWARE TRAVERSAL\n// =============================================================================\n\n/**\n * Traversal mode - determines how to traverse the graph\n *\n * anchor_down: Start at L3 belief, traverse to L2 evidence, stop at L1 sources\n * anchor_up: Start at L2 evidence, traverse to L3 beliefs it supports\n * same_layer: Traverse within a single layer (e.g., belief → belief)\n * decision_trace: Start at L4 decision, traverse to L3 beliefs it was based on\n */\nexport type TraversalMode =\n | \"anchor_down\"\n | \"anchor_up\"\n | \"same_layer\"\n | \"decision_trace\";\n\n/**\n * Traversal options for layer-aware queries\n */\nexport interface TraversalOptions {\n /** Edge types to follow (empty = all valid for mode) */\n allowedEdgeTypes?: string[];\n /** Maximum depth */\n maxDepth?: number;\n /** Maximum layer to reach */\n maxLayer?: number;\n /** Minimum layer to stop at (L1 = 1, L4 = 4) */\n minLayer?: number;\n /** Traversal mode */\n mode: TraversalMode;\n /** Starting node ID */\n startNodeId: Id<\"epistemicNodes\">;\n}\n\n/**\n * Check if traversal should continue based on layer constraints\n */\nexport function shouldContinueTraversal(\n currentLayer: EpistemicLayer,\n targetLayer: EpistemicLayer,\n options: {\n mode: TraversalMode;\n minLayer?: number;\n maxLayer?: number;\n }\n): boolean {\n const currentDepth = getLayerDepth(currentLayer);\n const targetDepth = getLayerDepth(targetLayer);\n\n // Check min/max layer constraints\n if (options.minLayer !== undefined && targetDepth < options.minLayer) {\n return false; // Would go below minimum layer\n }\n if (options.maxLayer !== undefined && targetDepth > options.maxLayer) {\n return false; // Would go above maximum layer\n }\n\n // Mode-specific rules\n switch (options.mode) {\n case \"anchor_down\":\n // Can only go down (L4→L3→L2→L1)\n return targetDepth <= currentDepth;\n\n case \"anchor_up\":\n // Can only go up (L1→L2→L3→L4)\n return targetDepth >= currentDepth;\n\n case \"same_layer\":\n // Must stay at same layer\n return targetDepth === currentDepth;\n\n case \"decision_trace\":\n // Decisions (L4) can trace to beliefs (L3), stop there\n return currentDepth === 4\n ? targetDepth === 3\n : targetDepth === currentDepth;\n\n default:\n return true;\n }\n}\n\n/**\n * Get default minLayer for a traversal mode\n */\nexport function getDefaultMinLayer(mode: TraversalMode): number {\n switch (mode) {\n case \"anchor_down\":\n return 1; // Can go all the way to L1 sources\n case \"anchor_up\":\n return 2; // Start at L2 evidence minimum\n case \"same_layer\":\n return 1; // No constraint\n case \"decision_trace\":\n return 3; // Stop at L3 beliefs (don't go to L2 evidence)\n default:\n return 1;\n }\n}\n\n/**\n * Get allowed edge types for a traversal mode\n */\nexport function getDefaultEdgeTypesForMode(mode: TraversalMode): string[] {\n switch (mode) {\n case \"anchor_down\":\n // From beliefs/questions down to evidence and sources\n return [\n \"informs\", // evidence → belief (traverse backwards)\n \"derived_from\", // evidence → source (provenance) + evidence → question\n ];\n case \"anchor_up\":\n // From evidence up to beliefs\n return [\"informs\", \"derived_from\"];\n case \"same_layer\":\n // Within-layer relationships\n return [\n // L3: Belief ↔ Belief\n \"depends_on\",\n \"supports\",\n \"contains\",\n // L3: Question ↔ Question\n \"prerequisite_for\",\n \"parallel_to\",\n // L2: Evidence ↔ Evidence\n \"corroborates\",\n \"extends\",\n \"same_source_as\",\n \"same_theme_as\",\n ];\n case \"decision_trace\":\n // From decisions to beliefs\n return [\"derived_from\", \"depends_on\", \"contains\"];\n default:\n return [];\n }\n}\n\n// =============================================================================\n// PHASE 2C: EDGE LAYER RULES\n// =============================================================================\n\n/**\n * Edge Layer Rules - defines valid layer combinations for each edge type\n *\n * Format: { from: [allowed source layers], to: [allowed target layers] }\n *\n * Key rules:\n * - L4 edges: Decision → L3 (beliefs, questions, themes)\n * - Cross-layer edges: L2 → L3 (evidence informs beliefs)\n * - Same-layer edges: L3 → L3, L2 → L2 (beliefs depend on beliefs)\n * - Downward edges: L2 → L1 (evidence extracted from source)\n * - Lifecycle edges: same layer only (supersedes)\n */\nexport const EDGE_LAYER_RULES: Record<\n string,\n { from: EpistemicLayer[]; to: EpistemicLayer[]; description: string }\n> = {\n // === L4 Decision Edges ===\n based_on_belief: {\n from: [\"L4\"],\n to: [\"L3\"],\n description: \"Decision → Belief (L4 → L3)\",\n },\n based_on_question: {\n from: [\"L4\"],\n to: [\"L3\"],\n description: \"Decision → Question (L4 → L3)\",\n },\n blocked_by_contradiction: {\n from: [\"L4\"],\n to: [\"L3\"],\n description: \"Decision → Contradiction (L4 → L3)\",\n },\n informed_by_theme: {\n from: [\"L4\"],\n to: [\"L3\"],\n description: \"Decision → Theme (L4 → L3)\",\n },\n\n // === Evidence Flow (L2 → L3, L2 → L1) ===\n derived_from: {\n from: [\"L2\", \"L3\", \"L4\"],\n to: [\"L1\", \"L2\", \"L3\"],\n description: \"A was produced from B (provenance chain)\",\n },\n answers: {\n from: [\"L2\"],\n to: [\"L3\"],\n description: \"Evidence → Question (L2 → L3)\",\n },\n responds_to: {\n from: [\"L2\"],\n to: [\"L3\"],\n description: \"Answer → Question (L2 → L3)\",\n },\n informs: {\n from: [\"L2\"],\n to: [\"L3\"],\n description: \"Evidence → Belief (L2 → L3)\",\n },\n qualifies: {\n from: [\"L2\"],\n to: [\"L3\"],\n description: \"Evidence → Belief (L2 → L3)\",\n },\n\n // === Question → Belief (L3 → L3) ===\n tests: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Question → Belief (L3 → L3)\",\n },\n explores: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Question → Belief assumption (L3 → L3)\",\n },\n\n // === Synthesis (L2 → L2, L2 → L1) ===\n based_on: {\n from: [\"L2\"],\n to: [\"L2\", \"L1\"],\n description: \"Synthesis → Evidence/Source (L2 → L2/L1)\",\n },\n\n // === Theme Relationships (L3 → L3) ===\n relates_to_thesis: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief → Theme (L3 → L3)\",\n },\n belongs_to: {\n from: [\"L3\", \"L2\"], // Can belong to theme from L3 or L2\n to: [\"L3\"],\n description: \"Any → Theme (L3/L2 → L3)\",\n },\n plays_theme: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Deal → Theme (L3 → L3)\",\n },\n\n // === Topic Hierarchy (L3 → organizational) ===\n scoped_by: {\n from: [\"L3\"],\n to: [\"organizational\"],\n description: \"Belief/Question → Topic (L3 → organizational)\",\n },\n\n // === Deal/Company ===\n evaluates: {\n from: [\"L3\"],\n to: [\"ontological\"],\n description: \"Deal → Company (L3 → ontological)\",\n },\n\n // === People (ontological → ontological, ontological → L3) ===\n perspective_on: {\n from: [\"ontological\"],\n to: [\"L3\"],\n description: \"Person → Belief/Theme (ontological → L3)\",\n },\n works_at: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Person → Company (ontological → ontological)\",\n },\n\n // === Value Chain (ontological) ===\n participates_in: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company → ValueChain (ontological → ontological)\",\n },\n performs: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company → Function (ontological → ontological)\",\n },\n function_in: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Function → ValueChain (ontological → ontological)\",\n },\n impacts: {\n from: [\"L3\"],\n to: [\"ontological\"],\n description: \"Theme → ValueChain (L3 → ontological)\",\n },\n\n // === Investment (ontological) ===\n invested_in: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Investor → Company (ontological → ontological)\",\n },\n raised_from: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company → Investor (ontological → ontological)\",\n },\n\n // === Entity↔Belief Bridge (OE-B) ===\n about_entity: {\n from: [\"L3\"],\n to: [\"ontological\"],\n description: \"Belief/Question/Theme → Entity (L3 → ontological)\",\n },\n entity_referenced_in: {\n from: [\"ontological\"],\n to: [\"L2\"],\n description: \"Entity → Evidence (ontological → L2)\",\n },\n mentioned_in: {\n from: [\"ontological\"],\n to: [\"L1\"],\n description: \"Entity → Source document (ontological → L1)\",\n },\n founded_by: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company → Person (ontological → ontological)\",\n },\n competes_with: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company → Company (ontological → ontological)\",\n },\n contains: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"ValueChain → Function (ontological → ontological)\",\n },\n\n // === Lifecycle (same layer only) ===\n supersedes: {\n from: [\"L4\", \"L3\", \"L2\", \"L1\", \"ontological\", \"organizational\"],\n to: [\"L4\", \"L3\", \"L2\", \"L1\", \"ontological\", \"organizational\"],\n description: \"NewNode → OldNode (same layer only - validated separately)\",\n },\n same_as: {\n from: [\"L4\", \"L3\", \"L2\", \"L1\", \"ontological\", \"organizational\"],\n to: [\"L4\", \"L3\", \"L2\", \"L1\", \"ontological\", \"organizational\"],\n description: \"Duplicate detection (same layer only - validated separately)\",\n },\n\n // === Same-Type: Belief ↔ Belief (L3 → L3) ===\n depends_on: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief B requires Belief A (L3 → L3)\",\n },\n reinforces: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Beliefs strengthen each other (L3 → L3)\",\n },\n parent_of: {\n from: [\"L3\", \"organizational\"],\n to: [\"L3\", \"organizational\"],\n description:\n \"A is higher-level than B (L3 → L3, organizational → organizational)\",\n },\n child_of: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief A is more specific (L3 → L3)\",\n },\n\n // === Same-Type: Question ↔ Question (L3 → L3) ===\n prerequisite_for: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Question A must be answered first (L3 → L3)\",\n },\n parallel_to: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Same topic, different angles (L3 → L3)\",\n },\n\n // === Same-Type: Evidence ↔ Evidence (L2 → L2) ===\n corroborates: {\n from: [\"L2\"],\n to: [\"L2\"],\n description: \"Independent support (L2 → L2)\",\n },\n extends: {\n from: [\"L2\"],\n to: [\"L2\"],\n description: \"Adds depth (L2 → L2)\",\n },\n same_source_as: {\n from: [\"L2\"],\n to: [\"L2\"],\n description: \"Same document/study (L2 → L2)\",\n },\n same_theme_as: {\n from: [\"L2\"],\n to: [\"L2\"],\n description: \"Same topic/entity (L2 → L2)\",\n },\n\n // === NEW: Deep Epistemic Analysis Edges (Phase: Schema Upgrade) ===\n assumes: {\n from: [\"L3\"],\n to: [\"L3\"],\n description:\n \"Hidden dependency - Belief B implicitly assumes Belief A (L3 → L3)\",\n },\n would_predict: {\n from: [\"L3\"],\n to: [\"L2\"],\n description:\n \"Pre-registered prediction - If Belief true, expect Evidence (L3 → L2)\",\n },\n analogous_to: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Explicit analogy - Belief A is like Belief B (L3 → L3)\",\n },\n independent_of: {\n from: [\"L2\"],\n to: [\"L2\"],\n description:\n \"True evidence independence - Evidence A independent of B (L2 → L2)\",\n },\n\n // NOTE: Deprecated edge types (supports, contradicts, derived_from, cites,\n // summarizes, related_to, partially_answers, blocks, refines, branches_from)\n // have been REMOVED from the system. Use compliant alternatives instead.\n};\n\n/**\n * Validate an edge against layer rules\n *\n * Returns { valid: true } or { valid: false, reason: string }\n */\nexport function validateEdgeLayers(\n edgeType: string,\n fromLayer: EpistemicLayer,\n toLayer: EpistemicLayer\n): { valid: boolean; reason?: string } {\n const rules = EDGE_LAYER_RULES[edgeType];\n\n // Unknown edge type - allow but warn\n if (!rules) {\n console.warn(\n `[EdgeValidation] Unknown edge type: ${edgeType}, allowing by default`\n );\n return { valid: true };\n }\n\n // Special handling for same-layer edges (supersedes)\n if (edgeType === \"supersedes\") {\n if (fromLayer !== toLayer) {\n return {\n valid: false,\n reason: `${edgeType} edges must be between nodes of the same layer. Got ${fromLayer} → ${toLayer}`,\n };\n }\n return { valid: true };\n }\n\n // Check from layer\n if (!rules.from.includes(fromLayer)) {\n return {\n valid: false,\n reason: `Edge type '${edgeType}' does not allow source layer ${fromLayer}. Allowed: ${rules.from.join(\", \")}`,\n };\n }\n\n // Check to layer\n if (!rules.to.includes(toLayer)) {\n return {\n valid: false,\n reason: `Edge type '${edgeType}' does not allow target layer ${toLayer}. Allowed: ${rules.to.join(\", \")}`,\n };\n }\n\n return { valid: true };\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Epistemic Spine helper module split from epistemicHelpers.ts.\n */\n\nimport type { Id, MutationCtx } from \"./convex\";\nimport { internal } from \"./convex\";\nimport {\n type EpistemicLayer,\n getNodeLayer,\n validateEdgeLayers,\n} from \"./epistemicLayerRules\";\nimport { generateGlobalId } from \"./globalId\";\n\ninterface NodeTypeIndexQuery {\n eq(field: string, value: unknown): NodeTypeIndexQuery;\n}\n\ntype LegacyNodeType = \"insight\" | \"belief\" | \"question\" | \"artifact\";\ninterface EdgeNodeRow {\n _id: Id<\"epistemicNodes\">;\n epistemicLayer?: EpistemicLayer;\n globalId: string;\n metadata?: Record<string, unknown>;\n nodeType: string;\n projectId?: string;\n}\n\nconst EPISTEMIC_LAYERS = new Set<EpistemicLayer>([\n \"L4\",\n \"L3\",\n \"L2\",\n \"L1\",\n \"ontological\",\n \"organizational\",\n]);\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\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 readEpistemicLayer(value: unknown): EpistemicLayer | undefined {\n const layer = readOptionalString(value);\n return layer && EPISTEMIC_LAYERS.has(layer as EpistemicLayer)\n ? (layer as EpistemicLayer)\n : undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction readEdgeNodeRow(value: unknown): EdgeNodeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(record._id);\n const globalId = readOptionalString(record.globalId);\n const nodeType = readOptionalString(record.nodeType);\n if (!(id && globalId && nodeType)) {\n return null;\n }\n\n const node: EdgeNodeRow = { _id: id, globalId, nodeType };\n const epistemicLayer = readEpistemicLayer(record.epistemicLayer);\n if (epistemicLayer !== undefined) {\n node.epistemicLayer = epistemicLayer;\n }\n const metadata = readRecord(record.metadata);\n if (metadata !== undefined) {\n node.metadata = metadata;\n }\n const projectId = readOptionalString(record.projectId);\n if (projectId !== undefined) {\n node.projectId = projectId;\n }\n return node;\n}\n\nfunction requireEdgeNodeRow(value: unknown, context: string): EdgeNodeRow {\n const node = readEdgeNodeRow(value);\n if (!node) {\n throw new Error(`${context} requires a canonical epistemic node row.`);\n }\n return node;\n}\n\n/**\n * Edge type union for createEpistemicEdge\n * Phase 2C: Updated to include L4 edges and modern edge types\n * Phase 3: Added full epistemic impact edges for confidence propagation\n */\ntype EpistemicEdgeType =\n // Canonical edge types (K-tier compliant)\n | \"derived_from\" // replaces: answers, extracted_from, based_on, same_as, based_on_belief, based_on_question\n | \"supports\" // replaces: reinforces, strengthened_by, validated_by, weakened_by, alternative_to, falsified_by, exclusive_with (with appropriate weight)\n | \"contains\" // replaces: parent_of, child_of, about_entity, entity_referenced_in, subsumes, informed_by_theme\n | \"depends_on\" // replaces: collapses_if, cascade_from, required_for, blocks, blocked_by_contradiction\n | \"informs\"\n | \"tests\" // replaces: explores\n | \"responds_to\"\n // Theme relationships\n | \"relates_to_thesis\"\n | \"belongs_to\"\n | \"plays_theme\"\n // Lifecycle\n | \"supersedes\"\n // Same-type: Belief - Cluster Mapping (Thesis Validation Sprints)\n | \"counterfactual_of\"\n | \"cascade_to\"\n | \"mutually_exclusive\"\n | \"correlates_with\"\n | \"amplifies\"\n | \"precondition_for\"\n | \"in_tension_with\"\n // Same-type: Belief - Deep Epistemic Analysis (Tier 2)\n | \"assumes\"\n | \"would_predict\"\n | \"analogous_to\"\n | \"independent_of\"\n // Same-type: Question\n | \"prerequisite_for\"\n | \"parallel_to\"\n // Same-type: Evidence\n | \"corroborates\"\n | \"extends\"\n | \"same_source_as\"\n | \"same_theme_as\"\n // Ontological\n | \"evaluates\"\n | \"perspective_on\"\n | \"works_at\"\n | \"participates_in\"\n | \"performs\"\n | \"function_in\"\n | \"impacts\"\n | \"invested_in\"\n | \"raised_from\"\n // People/Entity References\n | \"mentioned_in\"\n | \"founded_by\"\n | \"competes_with\";\n\n// NOTE: Deprecated edge types have been REMOVED from this type.\n// See schema.ts for the list of removed types and their compliant alternatives.\n\n// =============================================================================\n// CONFIDENCE NORMALIZATION\n// =============================================================================\n\n/**\n * Normalize confidence to a 0-1 number regardless of input format.\n *\n * Handles:\n * - number (0-1): returned as-is\n * - number (1-100): divided by 100\n * - string (\"high\"/\"medium\"/\"low\"): mapped to 0.8/0.5/0.3\n * - undefined/null/other: returns 0.5 default\n *\n * This is the canonical way to read confidence from any source.\n */\nexport function normalizeConfidence(confidence: unknown): number {\n if (typeof confidence === \"number\") {\n return confidence > 1 ? confidence / 100 : confidence;\n }\n if (typeof confidence === \"string\") {\n switch (confidence) {\n case \"high\":\n return 0.8;\n case \"medium\":\n return 0.5;\n case \"low\":\n return 0.3;\n default:\n return 0.5;\n }\n }\n return 0.5;\n}\n\n/**\n * Epistemic Edge Propagation Semantics\n *\n * Each edge type has specific propagation rules for confidence cascades:\n *\n * | Edge Type | Direction | Propagation Rule |\n * |-------------------|--------------|-----------------------------------------------------------|\n * | depends_on | B → A | A.conf = min(A.conf, B.conf + 0.2) |\n * | reinforces | A ↔ B | Both get boost when either validated |\n * | falsified_by | B → A | A.conf = 1 - B.conf (inverse) |\n * | exclusive_with | A ↔ B | A.conf + B.conf ≤ 1.0 (redistribute on evidence) |\n * | contradicts | A ↔ B | Creates tension - neither can be validated without fork |\n * | collapses_if | A → B | If A.conf < threshold, B.conf → 0 |\n * | cascade_from | A → B | B.conf_delta = A.conf_delta * damping_factor |\n * | strengthened_by | A → B | B.conf += A.conf_delta * correlation |\n * | weakened_by | A → B | B.conf -= A.conf_delta * correlation |\n * | alternative_to | A ↔ B | Evidence for A reduces B, and vice versa |\n * | subsumes | A → B | A.conf >= B.conf always |\n * | validated_by | A → B | If A validated, B gains confidence |\n * | required_for | A → B | B cannot be validated until A is validated |\n * | blocks | A → B | B resolution blocked until A resolved |\n */\n\n/**\n * Create an epistemic edge between two nodes\n *\n * Phase 1 (Graph Architecture): Writes to Neo4j directly - Neo4j is source of truth.\n * Returns globalId (string) instead of Convex edge ID.\n *\n * Phase 2C: Validates layer rules before creation\n */\nexport async function createEpistemicEdge(\n ctx: MutationCtx,\n params: {\n fromNodeId: Id<\"epistemicNodes\">;\n toNodeId: Id<\"epistemicNodes\">;\n edgeType: EpistemicEdgeType;\n weight?: number;\n confidence?: number;\n context?: string;\n // NOTE: 'relation' field has been removed. Use 'weight' instead.\n projectId?: string;\n createdBy: string;\n // Phase 2C: Allow skipping validation for migrations\n skipLayerValidation?: boolean;\n }\n): Promise<string> {\n const globalId = generateGlobalId();\n\n // Get node types for denormalization\n const fromNode = requireEdgeNodeRow(\n await ctx.db.get(params.fromNodeId),\n \"Create epistemic edge source\"\n );\n const toNode = requireEdgeNodeRow(\n await ctx.db.get(params.toNodeId),\n \"Create epistemic edge target\"\n );\n\n // Phase 2C: Get layers (use stored or derive from nodeType)\n const fromLayer = fromNode.epistemicLayer ?? getNodeLayer(fromNode.nodeType);\n const toLayer = toNode.epistemicLayer ?? getNodeLayer(toNode.nodeType);\n\n // Phase 2C: Validate layer rules\n if (!params.skipLayerValidation) {\n const validation = validateEdgeLayers(params.edgeType, fromLayer, toLayer);\n if (!validation.valid) {\n throw new Error(\n `[EdgeValidation] Invalid edge: ${validation.reason}. ` +\n `Attempted: ${params.edgeType} from ${fromNode.nodeType}(${fromLayer}) → ${toNode.nodeType}(${toLayer})`\n );\n }\n }\n\n // Phase 1 (Graph Architecture): Write to Neo4j directly - Neo4j is source of truth\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId,\n fromGlobalId: fromNode.globalId,\n toGlobalId: toNode.globalId,\n edgeType: params.edgeType,\n weight: params.weight,\n confidence: params.confidence,\n context: params.context,\n createdBy: params.createdBy,\n topicId: params.projectId ? String(params.projectId) : undefined,\n fromNodeType: fromNode.nodeType,\n toNodeType: toNode.nodeType,\n fromLayer,\n toLayer,\n });\n\n return globalId;\n}\n\n/**\n * Create an edge when linking an insight to a question\n * This creates a \"derived_from\" edge (evidence answers/informs question)\n */\nexport async function createEdgeForInsightQuestionLink(\n ctx: MutationCtx,\n questionId: Id<\"epistemicNodes\">,\n insightId: Id<\"epistemicNodes\">,\n createdBy: string\n): Promise<string | null> {\n console.log(\"[EpistemicSpine] Creating edge for insight-question link:\", {\n questionId: String(questionId),\n insightId: String(insightId),\n });\n\n // Find the epistemic nodes for both entities\n const questionNode = await findNodeByLegacyId(ctx, \"question\", questionId);\n const insightNode = await findNodeByLegacyId(ctx, \"insight\", insightId);\n\n console.log(\"[EpistemicSpine] Found nodes:\", {\n questionNode: questionNode ? String(questionNode) : null,\n insightNode: insightNode ? String(insightNode) : null,\n });\n\n if (!(questionNode && insightNode)) {\n // Nodes don't exist yet - this can happen for legacy data\n // They'll be created during backfill\n console.log(\"[EpistemicSpine] Missing nodes, skipping edge creation\");\n return null;\n }\n\n // Get the question for projectId\n const question = readEdgeNodeRow(await ctx.db.get(questionId));\n const projectId = question?.projectId;\n\n // Create the edge: Evidence -> Question\n // Use \"derived_from\" - canonical replacement for \"answers\" edge type\n return await createEpistemicEdge(ctx, {\n fromNodeId: insightNode,\n toNodeId: questionNode,\n edgeType: \"derived_from\",\n projectId,\n createdBy,\n context: \"Linked from questions workspace\",\n });\n}\n\n/**\n * Find an epistemic node by its legacy ID (stored in metadata)\n */\nasync function findNodeByLegacyId(\n ctx: MutationCtx,\n legacyType: LegacyNodeType,\n legacyId: Id<\"epistemicNodes\"> | Id<\"finalArtifacts\">\n): Promise<Id<\"epistemicNodes\"> | null> {\n // Query all nodes and find the one with matching legacy ID\n // This is not ideal for performance, but works for now\n // TODO: Add a dedicated index for legacy IDs\n const nodeType = normalizeLegacyNodeType(legacyType);\n\n const nodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q: NodeTypeIndexQuery) =>\n q.eq(\"nodeType\", nodeType)\n )\n .collect();\n\n const legacyKey = `legacy${legacyType.charAt(0).toUpperCase() + legacyType.slice(1)}Id`;\n\n // Convert legacyId to string for comparison (Convex Id objects need string comparison)\n const legacyIdStr = String(legacyId);\n\n const found = nodes.find((candidate) => {\n const node = readEdgeNodeRow(candidate);\n const storedId = node?.metadata?.[legacyKey];\n // Compare as strings to handle Convex Id serialization\n return storedId && String(storedId) === legacyIdStr;\n });\n\n if (!found) {\n console.log(\n `[EpistemicSpine] Node not found for ${legacyType}:${legacyIdStr}, searched ${nodes.length} ${nodeType} nodes`\n );\n }\n\n return readEdgeNodeRow(found)?._id ?? null;\n}\n\nfunction normalizeLegacyNodeType(\n legacyType: LegacyNodeType\n): \"evidence\" | \"source\" | \"belief\" | \"question\" {\n if (legacyType === \"insight\") {\n return \"evidence\";\n }\n if (legacyType === \"artifact\") {\n return \"source\";\n }\n return legacyType;\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public ABI filename consumed by existing import paths.\n/**\n * Epistemic Spine helper module split from epistemicHelpers.ts.\n */\n\nimport type { Id, MutationCtx } from \"./convex\";\nimport { createEpistemicEdge } from \"./epistemicEdgeCreation\";\nimport { insertEpistemicNode } from \"./epistemicInsert.js\";\nimport { generateGlobalId } from \"./globalId\";\n\n// =============================================================================\n// CONTENT HASHING (Convex-compatible sync version)\n// =============================================================================\n\n/**\n * Generate a simple content hash for deduplication\n * Uses a basic hash since crypto.subtle isn't available in Convex runtime\n */\nfunction generateContentHash(nodeType: string, text: string): string {\n const content = `${nodeType}:${normalizeText(text)}`;\n\n // Simple hash function (djb2)\n let hash = 5381;\n for (let i = 0; i < content.length; i++) {\n const nextHash = hash * 33 + content.charCodeAt(i);\n hash = nextHash - Math.floor(nextHash / 4_294_967_296) * 4_294_967_296;\n if (hash >= 2_147_483_648) {\n hash -= 4_294_967_296;\n }\n }\n\n // Convert to hex string and pad to consistent length\n const hashHex = Math.abs(hash).toString(16).padStart(8, \"0\");\n // Add length and checksum for better uniqueness\n const lengthHex = content.length.toString(16).padStart(4, \"0\");\n const checksum = content\n .split(\"\")\n .reduce((a, c) => a + c.charCodeAt(0), 0)\n .toString(16)\n .padStart(8, \"0\");\n\n return `${hashHex}${lengthHex}${checksum}`;\n}\n\n/**\n * Normalize text for consistent hashing\n */\nfunction normalizeText(text: string): string {\n return text.trim().toLowerCase().replace(/\\s+/g, \" \");\n}\n\ntype EpistemicNodeType =\n | \"claim\"\n | \"evidence\"\n | \"synthesis\"\n | \"answer\"\n | \"atomic_fact\"\n | \"excerpt\"\n | \"source\";\n\ntype EpistemicSourceType =\n | \"human\"\n | \"ai_extracted\"\n | \"ai_generated\"\n | \"imported\";\ntype EpistemicVerificationStatus =\n | \"unverified\"\n | \"human_verified\"\n | \"ai_verified\"\n | \"contradicted\"\n | \"outdated\";\n\ninterface ExistingEpistemicNodeRow {\n _id: Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n projectId?: string;\n status?: string;\n}\n\ninterface SourceArtifactRow {\n content?: string;\n metadata?: Record<string, unknown>;\n projectId?: string;\n stage?: string;\n topicId?: string;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readOptionalBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : 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 readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n const normalized = readOptionalString(value);\n return normalized ? (normalized as Id<TableName>) : null;\n}\n\nfunction readExistingEpistemicNodeRow(\n value: unknown\n): ExistingEpistemicNodeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(record._id);\n if (!id) {\n return null;\n }\n\n const node: ExistingEpistemicNodeRow = { _id: id };\n const metadata = readRecord(record.metadata);\n if (metadata) {\n node.metadata = metadata;\n }\n const projectId = readOptionalString(record.projectId);\n if (projectId !== undefined) {\n node.projectId = projectId;\n }\n const status = readOptionalString(record.status);\n if (status !== undefined) {\n node.status = status;\n }\n return node;\n}\n\nfunction readSourceArtifactRow(value: unknown): SourceArtifactRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const artifact: SourceArtifactRow = {};\n const content = readOptionalString(record.content);\n if (content !== undefined) {\n artifact.content = content;\n }\n const metadata = readRecord(record.metadata);\n if (metadata) {\n artifact.metadata = metadata;\n }\n const projectId = readOptionalString(record.projectId);\n if (projectId !== undefined) {\n artifact.projectId = projectId;\n }\n const stage = readOptionalString(record.stage);\n if (stage !== undefined) {\n artifact.stage = stage;\n }\n const topicId = readOptionalString(record.topicId);\n if (topicId !== undefined) {\n artifact.topicId = topicId;\n }\n return artifact;\n}\n\n/**\n * Map legacy insight sourceType to epistemic sourceType\n */\nfunction mapInsightSourceType(sourceType?: string): EpistemicSourceType {\n switch (sourceType) {\n case \"verified\":\n case \"proprietary\":\n return \"human\";\n case \"ai_generated\":\n return \"ai_generated\";\n default:\n return \"human\";\n }\n}\n\n/**\n * Map legacy verification status to epistemic verification status\n */\nfunction mapVerificationStatus(status?: string): EpistemicVerificationStatus {\n switch (status) {\n case \"manually_verified\":\n return \"human_verified\";\n case \"deep_verified\":\n case \"pre_screened\":\n return \"ai_verified\";\n default:\n return \"unverified\";\n }\n}\n\nfunction inferInsightConfidence(verificationStatus?: string): number {\n if (verificationStatus === \"manually_verified\") {\n return 0.9;\n }\n if (verificationStatus === \"deep_verified\") {\n return 0.7;\n }\n if (verificationStatus === \"pre_screened\") {\n return 0.5;\n }\n return 0.3;\n}\n\nfunction mapQuestionSourceType(source: string): EpistemicSourceType {\n if (source === \"manual\") {\n return \"human\";\n }\n if (source === \"ai_suggested\") {\n return \"ai_generated\";\n }\n return \"ai_extracted\";\n}\n\n// =============================================================================\n// DUAL-WRITE FUNCTIONS\n// =============================================================================\n\n/**\n * Create an epistemic node for an insight (evidence)\n * Called after inserting into the insights table\n */\nexport async function createEpistemicNodeForInsight(\n ctx: MutationCtx,\n _insightId: Id<\"epistemicNodes\">,\n insight: {\n projectId: string;\n text: string;\n kind: string;\n tags?: string[];\n sourceType?: string;\n aiProvider?: string;\n verificationStatus?: string;\n sourceArtifactId?: Id<\"finalArtifacts\">;\n sourceQuestionId?: Id<\"epistemicNodes\">; // If this evidence was created to answer a question\n sourceAnchor?: {\n artifactId: string;\n artifactType: string;\n artifactTitle?: string;\n sectionHeading?: string;\n selectedText?: string;\n startOffset?: number;\n endOffset?: number;\n pageNumber?: number;\n };\n createdBy: string;\n }\n): Promise<Id<\"epistemicNodes\">> {\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(\"evidence\", insight.text);\n\n // Check for duplicate\n const existing = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_contentHash\", (q) => q.eq(\"contentHash\", contentHash))\n .first();\n\n const existingInsightNode = readExistingEpistemicNodeRow(existing);\n if (existingInsightNode?.status === \"active\") {\n await ctx.db.patch(existingInsightNode._id, {\n updatedAt: now,\n });\n return existingInsightNode._id;\n }\n\n const nodeId = await insertEpistemicNode(ctx, {\n globalId,\n nodeType: \"evidence\",\n epistemicLayer: \"L2\", // Evidence is at L2 (compression boundary)\n canonicalText: insight.text,\n contentHash,\n title:\n insight.text.slice(0, 100) + (insight.text.length > 100 ? \"...\" : \"\"),\n tags: insight.tags,\n metadata: {\n kind: insight.kind,\n pillar: insight.tags?.find((t) =>\n [\n \"market\",\n \"competition\",\n \"product\",\n \"team\",\n \"financials\",\n \"regulatory\",\n \"timing\",\n \"customer\",\n \"technology\",\n \"distribution\",\n ].includes(t)\n ),\n // Include sourceArtifactId for source document panel\n sourceArtifactId: insight.sourceArtifactId,\n // Include sourceQuestionId if this evidence was created to answer a question\n sourceQuestionId: insight.sourceQuestionId,\n // Include sourceAnchor for linking evidence back to source documents\n sourceAnchor: insight.sourceAnchor,\n },\n sourceType: mapInsightSourceType(insight.sourceType),\n aiProvider: insight.aiProvider,\n confidence: inferInsightConfidence(insight.verificationStatus),\n verificationStatus: mapVerificationStatus(insight.verificationStatus),\n status: \"active\",\n topicId: insight.projectId,\n createdBy: insight.createdBy,\n createdAt: now,\n updatedAt: now,\n });\n\n // If there's a source artifact, create a derived_from edge\n if (insight.sourceArtifactId) {\n // Find or create the source node\n const sourceNode = await findOrCreateSourceNode(\n ctx,\n insight.sourceArtifactId,\n insight.createdBy,\n insight.projectId\n );\n if (sourceNode) {\n await createEpistemicEdge(ctx, {\n fromNodeId: nodeId,\n toNodeId: sourceNode,\n edgeType: \"derived_from\",\n projectId: insight.projectId,\n createdBy: insight.createdBy,\n });\n }\n }\n\n return nodeId;\n}\n\n/**\n * Create an epistemic node for a belief\n * Called after inserting into the beliefs table\n */\nexport async function createEpistemicNodeForBelief(\n ctx: MutationCtx,\n beliefId: Id<\"epistemicNodes\">,\n belief: {\n projectId: string;\n belief: string;\n rationale?: string;\n confidence: string;\n topic?: string;\n sourceAnchor?: {\n artifactId: string;\n artifactType: string;\n artifactTitle?: string;\n sectionHeading?: string;\n selectedText?: string;\n startOffset?: number;\n endOffset?: number;\n };\n createdBy: string;\n }\n): Promise<Id<\"epistemicNodes\">> {\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(\"belief\", belief.belief);\n\n // Check for duplicate\n const existing = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_contentHash\", (q) => q.eq(\"contentHash\", contentHash))\n .first();\n\n const existingBeliefNode = readExistingEpistemicNodeRow(existing);\n if (existingBeliefNode?.status === \"active\") {\n await ctx.db.patch(existingBeliefNode._id, {\n metadata: {\n ...existingBeliefNode.metadata,\n sourceBeliefId: beliefId,\n },\n updatedAt: now,\n });\n return existingBeliefNode._id;\n }\n\n const nodeId = await insertEpistemicNode(ctx, {\n globalId,\n nodeType: \"belief\",\n epistemicLayer: \"L3\", // Beliefs are at L3 (traversal anchors)\n canonicalText: belief.belief,\n contentHash,\n content: belief.rationale,\n title:\n belief.belief.slice(0, 100) + (belief.belief.length > 100 ? \"...\" : \"\"),\n metadata: {\n sourceBeliefId: beliefId,\n beliefStatus: \"assumption\",\n topic: belief.topic, // Use 'topic' for consistency with legacy schema\n pillar: belief.topic, // Keep 'pillar' for backward compat with existing data\n // No confidence/confidenceLevel — only set after sprint completion\n rationale: belief.rationale,\n status: \"active\",\n // Include sourceAnchor for linking beliefs back to source documents\n sourceAnchor: belief.sourceAnchor,\n },\n beliefStatus: \"assumption\",\n epistemicStatus: \"assumption\",\n sourceType: \"human\",\n confidence: undefined, // No confidence until sprint completion\n verificationStatus: \"unverified\",\n status: \"active\",\n topicId: belief.projectId,\n createdBy: belief.createdBy,\n createdAt: now,\n updatedAt: now,\n });\n\n return nodeId;\n}\n\n/**\n * Create an epistemic node for a question\n * Called after inserting into the questions table\n */\nexport async function createEpistemicNodeForQuestion(\n ctx: MutationCtx,\n _questionId: Id<\"epistemicNodes\">,\n question: {\n projectId: string;\n question: string;\n category?: string;\n priority: string;\n source: string;\n sourceAnchor?: {\n artifactId: string;\n artifactType: string;\n artifactTitle?: string;\n sectionHeading?: string;\n selectedText?: string;\n startOffset?: number;\n endOffset?: number;\n };\n createdBy: string;\n }\n): Promise<Id<\"epistemicNodes\">> {\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(\"question\", question.question);\n\n // Check for duplicate\n const existing = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_contentHash\", (q) => q.eq(\"contentHash\", contentHash))\n .first();\n\n const existingQuestionNode = readExistingEpistemicNodeRow(existing);\n if (existingQuestionNode?.status === \"active\") {\n await ctx.db.patch(existingQuestionNode._id, {\n updatedAt: now,\n });\n return existingQuestionNode._id;\n }\n\n const sourceType = mapQuestionSourceType(question.source);\n\n const nodeId = await insertEpistemicNode(ctx, {\n globalId,\n nodeType: \"question\",\n epistemicLayer: \"L3\", // Questions are at L3 (traversal anchors)\n canonicalText: question.question,\n contentHash,\n title:\n question.question.slice(0, 100) +\n (question.question.length > 100 ? \"...\" : \"\"),\n metadata: {\n pillar: question.category,\n priority: question.priority,\n source: question.source,\n // Include sourceAnchor for linking questions back to source documents\n sourceAnchor: question.sourceAnchor,\n },\n sourceType,\n verificationStatus: \"unverified\",\n status: \"active\",\n topicId: question.projectId,\n createdBy: question.createdBy,\n createdAt: now,\n updatedAt: now,\n });\n\n return nodeId;\n}\n\n/**\n * Create an epistemic node for a synthesis artifact (primer or deep research).\n *\n * ⚠️ IMPORTANT: This function should NOT be called for primers/deep research\n * unless the node is being connected to evidence as a source.\n * Standalone synthesis nodes create orphans in the graph.\n *\n * The correct pattern is:\n * 1. Store the artifact in finalArtifacts (for UI display)\n * 2. Only create epistemic node when extracting evidence FROM the artifact\n * 3. Create edge: evidence -> derived_from -> synthesis\n *\n * @deprecated Consider removing automatic node creation for primers.\n * Use the artifact ID reference in evidence metadata instead.\n */\nexport async function createEpistemicNodeForArtifact(\n ctx: MutationCtx,\n artifactId: Id<\"finalArtifacts\">,\n artifact: {\n projectId?: string;\n title: string;\n content: string;\n type: string;\n isDeepResearch?: boolean;\n aiProvider?: string;\n createdBy: string;\n }\n): Promise<Id<\"epistemicNodes\">> {\n const now = Date.now();\n const globalId = generateGlobalId();\n\n // Determine node type\n let nodeType: EpistemicNodeType = \"source\";\n const isSynthesis =\n artifact.isDeepResearch ||\n artifact.type.includes(\"deep\") ||\n artifact.type.includes(\"research\") ||\n artifact.type.includes(\"primer\");\n\n if (isSynthesis) {\n nodeType = \"synthesis\";\n\n // ⚠️ DO NOT create standalone synthesis nodes\n // Primers/deep research should be stored in finalArtifacts for UI display\n // Epistemic nodes should only be created when:\n // 1. Evidence is extracted FROM the artifact\n // 2. The node is connected via derived_from edge\n console.log(\n `[EpistemicHelpers] Skipping synthesis node creation for \"${artifact.type}\" - ` +\n \"will create when evidence is extracted\"\n );\n\n // Return a placeholder - callers should handle null\n // For backward compatibility, we check for existing node first\n const contentHash = generateContentHash(\n nodeType,\n artifact.title + artifact.content.slice(0, 500)\n );\n const existing = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_contentHash\", (q) => q.eq(\"contentHash\", contentHash))\n .first();\n\n const existingSynthesisNode = readExistingEpistemicNodeRow(existing);\n if (existingSynthesisNode?.status === \"active\") {\n return existingSynthesisNode._id; // Return existing node if found\n }\n\n // Don't create new synthesis nodes - they become orphans\n // Throw to signal to callers that no node was created\n throw new Error(\"SKIP_SYNTHESIS_NODE_CREATION\");\n }\n\n const contentHash = generateContentHash(\n nodeType,\n artifact.title + artifact.content.slice(0, 500)\n );\n\n // Check for duplicate\n const existing = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_contentHash\", (q) => q.eq(\"contentHash\", contentHash))\n .first();\n\n const existingArtifactNode = readExistingEpistemicNodeRow(existing);\n if (existingArtifactNode?.status === \"active\") {\n await ctx.db.patch(existingArtifactNode._id, {\n metadata: {\n ...existingArtifactNode.metadata,\n legacyArtifactId: artifactId,\n },\n updatedAt: now,\n });\n return existingArtifactNode._id;\n }\n\n // Source artifacts are L1 terminal leaves.\n const epistemicLayer = \"L1\";\n\n const nodeId = await insertEpistemicNode(ctx, {\n globalId,\n nodeType,\n epistemicLayer, // Synthesis is L2, Source is L1\n canonicalText: artifact.title,\n contentHash,\n content: artifact.content,\n contentType: \"markdown\",\n title: artifact.title,\n metadata: {\n legacyArtifactId: artifactId,\n artifactType: artifact.type,\n },\n sourceType: \"ai_generated\",\n aiProvider:\n artifact.aiProvider || (artifact.isDeepResearch ? \"gemini\" : \"anthropic\"),\n verificationStatus: \"unverified\",\n status: \"active\",\n topicId: artifact.projectId,\n createdBy: artifact.createdBy,\n createdAt: now,\n updatedAt: now,\n });\n\n return nodeId;\n}\n\n/**\n * Find or create an epistemic node for a source artifact\n */\nasync function findOrCreateSourceNode(\n ctx: MutationCtx,\n artifactId: Id<\"finalArtifacts\">,\n createdBy: string,\n scopeProjectId?: string\n): Promise<Id<\"epistemicNodes\"> | null> {\n // Check if we already have a node for this artifact.\n // Scope by topicId when available; projectId indexes have been removed.\n const artifact = readSourceArtifactRow(await ctx.db.get(artifactId));\n const effectiveProjectId = scopeProjectId || artifact?.projectId;\n const effectiveTopicId = artifact?.topicId;\n\n let existingNodes: ExistingEpistemicNodeRow[];\n if (effectiveTopicId) {\n const collectedNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic\", (q) => q.eq(\"topicId\", effectiveTopicId))\n .collect();\n existingNodes = collectedNodes.flatMap((node) => {\n const row = readExistingEpistemicNodeRow(node);\n return row ? [row] : [];\n });\n } else {\n // Last resort: scan by nodeType and filter below.\n const collectedNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q) => q.eq(\"nodeType\", \"source\"))\n .collect();\n existingNodes = collectedNodes.flatMap((node) => {\n const row = readExistingEpistemicNodeRow(node);\n return row ? [row] : [];\n });\n }\n\n const existing = existingNodes.find((n) => {\n if (\n effectiveProjectId &&\n n.projectId &&\n n.projectId !== effectiveProjectId\n ) {\n return false;\n }\n return n.metadata?.legacyArtifactId === artifactId;\n });\n\n if (existing) {\n return existing._id;\n }\n\n // artifact was already fetched above for scoping; recheck in case it was null\n if (!artifact) {\n return null;\n }\n\n const now = Date.now();\n const globalId = generateGlobalId();\n\n // Determine node type based on artifact metadata\n const artifactType = readOptionalString(artifact.metadata?.type) ?? \"\";\n const isDeepResearch =\n readOptionalBoolean(artifact.metadata?.isDeepResearch) ?? false;\n\n let nodeType: EpistemicNodeType = \"source\";\n if (\n isDeepResearch ||\n artifactType.includes(\"deep\") ||\n artifactType.includes(\"research\")\n ) {\n nodeType = \"synthesis\";\n } else if (artifactType.includes(\"primer\")) {\n nodeType = \"synthesis\";\n }\n\n const title =\n readOptionalString(artifact.metadata?.title) ||\n readOptionalString(artifact.metadata?.theme) ||\n \"Untitled\";\n\n const contentHash = generateContentHash(\n nodeType,\n title + (artifact.content?.slice(0, 500) ?? \"\")\n );\n\n // Determine layer based on nodeType\n const epistemicLayer = nodeType === \"synthesis\" ? \"L2\" : \"L1\";\n\n const nodeId = await insertEpistemicNode(ctx, {\n globalId,\n nodeType,\n epistemicLayer, // Synthesis is L2, Source is L1\n canonicalText: title,\n contentHash,\n content: artifact.content,\n contentType: \"markdown\",\n title,\n metadata: {\n legacyArtifactId: artifactId,\n artifactType,\n stage: artifact.stage,\n },\n sourceType: isDeepResearch ? \"ai_generated\" : \"ai_extracted\",\n aiProvider: isDeepResearch ? \"gemini\" : \"anthropic\",\n verificationStatus: \"unverified\",\n status: \"active\",\n topicId: artifact.projectId,\n createdBy,\n createdAt: now,\n updatedAt: now,\n });\n\n return nodeId;\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives/Convex module path; rename requires an API/export migration.\n/**\n * Belief Decay Algorithm\n *\n * A standalone, refinable module that governs confidence decay for ALL beliefs.\n *\n * Core principles:\n * 1. All beliefs decay over time — confidence is not permanent\n * 2. Forecast beliefs decay FASTER as their deadline approaches\n * 3. The algorithm doesn't auto-rescore — it identifies WHEN rescoring is needed\n * 4. Bayesian updates combine inherited confidence with new human assessments\n *\n * Used by:\n * - Cross-project discovery (adoption with decayed confidence)\n * - Morning briefs (surface beliefs needing rescore)\n * - Sprint planning (flag stale beliefs in scope)\n * - BI agents (automated rescore reminders)\n * - Confidence display (show effective vs raw confidence)\n *\n * @module beliefDecay\n */\n\nimport { getAccessibleProjectIds } from \"@lucern/access-control/access\";\nimport { getRescoringSchedule } from \"@lucern/confidence\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, QueryCtx } from \"./convex\";\nimport { query } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport type { TopicProjectOverlay } from \"./topicProjectOverlay\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\n\ntype BeliefPriority = \"critical\" | \"high\" | \"medium\" | \"low\";\ninterface IndexQueryBuilder {\n eq(field: string, value: unknown): IndexQueryBuilder;\n}\n\ntype RescoringTemporalNature = \"unknown\" | \"factual\" | \"forecast\";\n\ninterface BeliefMetadata {\n beliefStatus?: string;\n confidence?: number;\n}\n\ninterface PredictionMeta {\n expectedBy?: number;\n}\n\ninterface BeliefRecord {\n _creationTime?: number;\n _id: Id<\"epistemicNodes\">;\n beliefStatus?: string | null;\n canonicalText: string;\n confidence?: number;\n createdAt?: number;\n metadata?: BeliefMetadata | null;\n predictionMeta?: PredictionMeta | null;\n status?: string;\n temporalNature?: string | null;\n updatedAt?: number;\n}\n\ninterface IdentifyBeliefsArgs {\n maxResults?: number;\n minPriority?: BeliefPriority;\n projectId?: string;\n topicId?: string;\n}\n\ninterface GlobalBeliefHealthArgs {\n clerkId: string;\n maxResults?: number;\n minPriority?: BeliefPriority;\n}\n\ninterface SingleBeliefArgs {\n beliefId: Id<\"epistemicNodes\">;\n}\n\ninterface ConfidenceEntry {\n assessedAt: number;\n confidence?: number | null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n return typeof value === \"string\" && value.length > 0\n ? (value as Id<TableName>)\n : null;\n}\n\nfunction readOptionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction readBeliefMetadata(value: unknown): BeliefMetadata | null {\n if (!isRecord(value)) {\n return null;\n }\n return {\n beliefStatus: readOptionalString(value.beliefStatus),\n confidence: readOptionalNumber(value.confidence),\n };\n}\n\nfunction readPredictionMeta(value: unknown): PredictionMeta | null {\n if (!isRecord(value)) {\n return null;\n }\n return {\n expectedBy: readOptionalNumber(value.expectedBy),\n };\n}\n\nfunction readBeliefRecord(value: unknown): BeliefRecord | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = readConvexId<\"epistemicNodes\">(value._id);\n if (!id || typeof value.canonicalText !== \"string\") {\n return null;\n }\n return {\n _creationTime: readOptionalNumber(value._creationTime),\n _id: id,\n beliefStatus: readOptionalString(value.beliefStatus) ?? null,\n canonicalText: value.canonicalText,\n confidence: readOptionalNumber(value.confidence),\n createdAt: readOptionalNumber(value.createdAt),\n metadata: readBeliefMetadata(value.metadata),\n predictionMeta: readPredictionMeta(value.predictionMeta),\n status: readOptionalString(value.status),\n temporalNature: readOptionalString(value.temporalNature) ?? null,\n updatedAt: readOptionalNumber(value.updatedAt),\n };\n}\n\nfunction readConfidenceEntry(value: unknown): ConfidenceEntry | null {\n if (!isRecord(value)) {\n return null;\n }\n const assessedAt = readOptionalNumber(value.assessedAt);\n if (assessedAt === undefined) {\n return null;\n }\n return {\n assessedAt,\n confidence: readOptionalNumber(value.confidence) ?? null,\n };\n}\n\nfunction readRowList<T>(\n values: readonly unknown[],\n reader: (value: unknown) => T | null\n): T[] {\n return values.flatMap((value) => {\n const row = reader(value);\n return row ? [row] : [];\n });\n}\n\n// biome-ignore lint/performance/noBarrelFile: beliefDecay historically re-exports confidence operators from this public compatibility surface.\nexport {\n bayesianUpdate,\n computeBaseDecay,\n computeDeadlineUrgency,\n computeEffectiveDecay,\n DEADLINE_URGENCY,\n DECAY_TIERS,\n getRescoringSchedule,\n} from \"@lucern/confidence\";\n\nconst PRIORITY_RANK: Record<BeliefPriority, number> = {\n critical: 4,\n high: 3,\n medium: 2,\n low: 1,\n};\n\ninterface GlobalBeliefHealthResult {\n beliefId: Id<\"epistemicNodes\">;\n beliefText: string;\n confidence: number;\n daysSinceScoring: number;\n deadlineUrgency: string | null;\n expectedBy: number | null;\n priority: BeliefPriority;\n projectId: string;\n projectName: string;\n reason: string;\n temporalNature: string;\n}\n\ninterface GlobalBeliefHealthSummary {\n byProject: Array<{ count: number; projectName: string }>;\n critical: number;\n forecastsApproaching: number;\n high: number;\n medium: number;\n projectsAffected: number;\n total: number;\n}\n\n// =============================================================================\n// QUERIES — Used by morning briefs, sprint planning, BI agents\n// =============================================================================\n\n/**\n * Identify all beliefs in a project that need rescoring.\n *\n * Returns beliefs sorted by urgency (critical first), with their\n * rescoring schedule and decay details.\n *\n * Used by:\n * - Morning briefs: \"3 beliefs need your attention this week\"\n * - Sprint planning: \"these beliefs in scope are stale\"\n * - BI agents: automated rescore reminders\n * - Project dashboard: health indicators\n */\nexport const identifyBeliefsNeedingRescore = query({\n args: {\n ...optionalScopeArgs,\n maxResults: v.optional(v.number()),\n // Only return beliefs at or above this priority\n minPriority: v.optional(\n v.union(\n v.literal(\"critical\"),\n v.literal(\"high\"),\n v.literal(\"medium\"),\n v.literal(\"low\")\n )\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: IdentifyBeliefsArgs) => {\n const { maxResults = 20, minPriority = \"medium\" } = args;\n let scope: Awaited<ReturnType<typeof resolveTopicProjectScope>> | null;\n try {\n scope = await resolveTopicProjectScope(ctx, args);\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[beliefDecay] Failed to resolve scope for identify beliefs\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n }\n );\n scope = null;\n }\n if (!scope) {\n return [];\n }\n\n const minRank = PRIORITY_RANK[minPriority] ?? 2;\n\n // Get all active beliefs for this project\n const beliefs = readRowList(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: IndexQueryBuilder) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n )\n .collect(),\n readBeliefRecord\n );\n\n const activeBeliefs = beliefs.filter((b) => b.status === \"active\");\n\n // For each belief, get last scoring and compute schedule\n const results: Array<{\n beliefId: Id<\"epistemicNodes\">;\n beliefText: string;\n confidence: number;\n beliefStatus: string;\n temporalNature: string;\n expectedBy: number | null;\n lastScoredAt: number;\n daysSinceScoring: number;\n schedule: ReturnType<typeof getRescoringSchedule>;\n }> = [];\n\n for (const belief of activeBeliefs) {\n const metadata: BeliefMetadata = belief.metadata ?? {};\n const predictionMeta = belief.predictionMeta ?? undefined;\n const temporalNature: RescoringTemporalNature =\n belief.temporalNature === \"forecast\" ||\n belief.temporalNature === \"factual\"\n ? belief.temporalNature\n : \"unknown\";\n const beliefStatus = belief.beliefStatus ?? metadata.beliefStatus ?? null;\n\n // Get most recent confidence entry\n const confidenceHistory = readRowList(\n await ctx.db\n .query(\"beliefConfidence\")\n .withIndex(\"by_beliefId\", (q: IndexQueryBuilder) =>\n q.eq(\"beliefId\", belief._id)\n )\n .collect(),\n readConfidenceEntry\n );\n\n const sorted = confidenceHistory.sort(\n (a, b) => b.assessedAt - a.assessedAt\n );\n const lastEntry = sorted[0] ?? null;\n const lastScoredAt =\n lastEntry?.assessedAt ??\n belief.updatedAt ??\n belief.createdAt ??\n Date.now();\n const confidence = lastEntry?.confidence ?? metadata.confidence ?? 0.5;\n\n const schedule = getRescoringSchedule({\n lastScoredAt,\n temporalNature,\n expectedBy: predictionMeta?.expectedBy ?? null,\n predictionMeta: predictionMeta ?? null,\n confidence,\n beliefStatus,\n });\n\n // Filter by minimum priority\n if (PRIORITY_RANK[schedule.priority] >= minRank) {\n results.push({\n beliefId: belief._id,\n beliefText: belief.canonicalText,\n confidence,\n beliefStatus: beliefStatus ?? \"assumption\",\n temporalNature,\n expectedBy: predictionMeta?.expectedBy ?? null,\n lastScoredAt,\n daysSinceScoring: Math.round(schedule.decay.ageDays),\n schedule,\n });\n }\n }\n\n // Sort by priority (critical first), then by days overdue\n results.sort((a, b) => {\n const rankDiff =\n PRIORITY_RANK[b.schedule.priority] - PRIORITY_RANK[a.schedule.priority];\n if (rankDiff !== 0) {\n return rankDiff;\n }\n // Within same priority, most overdue first\n return a.schedule.daysUntilRescore - b.schedule.daysUntilRescore;\n });\n\n return {\n beliefs: results.slice(0, maxResults),\n summary: {\n total: results.length,\n critical: results.filter((r) => r.schedule.priority === \"critical\")\n .length,\n high: results.filter((r) => r.schedule.priority === \"high\").length,\n medium: results.filter((r) => r.schedule.priority === \"medium\").length,\n overdue: results.filter((r) => r.schedule.isOverdue).length,\n forecastsApproaching: results.filter(\n (r) =>\n r.temporalNature === \"forecast\" &&\n r.schedule.decay.urgency?.urgencyTier.label !== \"distant\"\n ).length,\n },\n };\n },\n});\n\n/**\n * Global belief health across ALL projects for a user.\n *\n * Returns beliefs needing attention from every accessible project,\n * sorted by urgency. This powers a permanent \"Belief Health\" section\n * in the workspace that surfaces stale beliefs regardless of which\n * project they belong to.\n *\n * Key design decision: push model, not pull. Users don't revisit\n * completed theme project pages, so stale beliefs from finished\n * themes only surface here, in morning briefs, and in chat.\n */\nexport const getGlobalBeliefHealth = query({\n args: {\n clerkId: v.string(),\n maxResults: v.optional(v.number()),\n minPriority: v.optional(\n v.union(\n v.literal(\"critical\"),\n v.literal(\"high\"),\n v.literal(\"medium\"),\n v.literal(\"low\")\n )\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GlobalBeliefHealthArgs) => {\n const { clerkId, maxResults = 30, minPriority = \"medium\" } = args;\n const minRank = PRIORITY_RANK[minPriority] ?? 2;\n const allProjects = await listGraphPrimitiveTopics(ctx);\n const accessibleProjectIds = await getAccessibleProjectIds(ctx, clerkId);\n const accessibleProjects = allProjects\n .filter((project) => accessibleProjectIds.has(project._id))\n .slice(0, 20);\n\n const allResults = sortGlobalHealthResults(\n await collectGlobalHealthResults(ctx, accessibleProjects, minRank)\n );\n const results = allResults.slice(0, maxResults);\n\n return {\n beliefs: results,\n summary: summarizeGlobalHealthResults(allResults),\n };\n },\n});\n\nasync function listGraphPrimitiveTopics(\n ctx: QueryCtx\n): Promise<TopicProjectOverlay[]> {\n return await resolveGraphPrimitivesAppResolvers(ctx).listTopics(ctx);\n}\n\nasync function collectGlobalHealthResults(\n ctx: QueryCtx,\n accessibleProjects: TopicProjectOverlay[],\n minRank: number\n): Promise<GlobalBeliefHealthResult[]> {\n const results: GlobalBeliefHealthResult[] = [];\n for (const project of accessibleProjects) {\n results.push(...(await collectProjectHealthResults(ctx, project, minRank)));\n }\n return results;\n}\n\nasync function collectProjectHealthResults(\n ctx: QueryCtx,\n project: TopicProjectOverlay,\n minRank: number\n): Promise<GlobalBeliefHealthResult[]> {\n const scope = await resolveHealthProjectScope(ctx, project);\n if (!scope) {\n return [];\n }\n\n const beliefs = await readActiveTopicBeliefs(ctx, scope.topicId);\n return beliefs.flatMap((belief) =>\n buildGlobalHealthResult(project, belief, minRank)\n );\n}\n\nasync function resolveHealthProjectScope(\n ctx: QueryCtx,\n project: TopicProjectOverlay\n): Promise<Awaited<ReturnType<typeof resolveTopicProjectScope>> | null> {\n try {\n return await resolveTopicProjectScope(ctx, {\n projectId: String(project._id),\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[beliefDecay] Failed to resolve project scope in health query\",\n {\n error,\n projectId: String(project._id),\n }\n );\n return null;\n }\n}\n\nasync function readActiveTopicBeliefs(\n ctx: QueryCtx,\n topicId: string\n): Promise<BeliefRecord[]> {\n const beliefs = readRowList(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: IndexQueryBuilder) =>\n q.eq(\"topicId\", topicId).eq(\"nodeType\", \"belief\")\n )\n .collect(),\n readBeliefRecord\n );\n\n return beliefs.filter((belief) => belief.status === \"active\");\n}\n\nfunction buildGlobalHealthResult(\n project: TopicProjectOverlay,\n belief: BeliefRecord,\n minRank: number\n): GlobalBeliefHealthResult[] {\n const metadata: BeliefMetadata = belief.metadata ?? {};\n const predictionMeta = belief.predictionMeta ?? undefined;\n const temporalNature = normalizeTemporalNature(belief.temporalNature);\n const confidence = belief.confidence ?? metadata.confidence ?? 0.5;\n const lastScoredAt =\n belief.updatedAt ?? belief.createdAt ?? belief._creationTime ?? Date.now();\n\n const schedule = getRescoringSchedule({\n lastScoredAt,\n temporalNature,\n expectedBy: predictionMeta?.expectedBy ?? null,\n predictionMeta: predictionMeta ?? null,\n confidence,\n beliefStatus: belief.beliefStatus ?? metadata.beliefStatus ?? null,\n });\n\n if (PRIORITY_RANK[schedule.priority] < minRank) {\n return [];\n }\n\n return [\n {\n projectId: project._id,\n projectName: project.name,\n beliefId: belief._id,\n beliefText: belief.canonicalText,\n confidence,\n temporalNature,\n expectedBy: predictionMeta?.expectedBy ?? null,\n daysSinceScoring: Math.round(schedule.decay.ageDays),\n priority: schedule.priority,\n reason: schedule.reason,\n deadlineUrgency: schedule.decay.urgency?.urgencyTier.label ?? null,\n },\n ];\n}\n\nfunction normalizeTemporalNature(\n value: string | null | undefined\n): RescoringTemporalNature {\n return value === \"forecast\" || value === \"factual\" ? value : \"unknown\";\n}\n\nfunction sortGlobalHealthResults(\n results: GlobalBeliefHealthResult[]\n): GlobalBeliefHealthResult[] {\n return [...results].sort((a, b) => {\n const rankDiff = PRIORITY_RANK[b.priority] - PRIORITY_RANK[a.priority];\n if (rankDiff !== 0) {\n return rankDiff;\n }\n return b.daysSinceScoring - a.daysSinceScoring;\n });\n}\n\nfunction summarizeGlobalHealthResults(\n allResults: GlobalBeliefHealthResult[]\n): GlobalBeliefHealthSummary {\n const projectGroups = new Map<string, number>();\n for (const result of allResults) {\n projectGroups.set(\n result.projectName,\n (projectGroups.get(result.projectName) || 0) + 1\n );\n }\n\n return {\n total: allResults.length,\n critical: allResults.filter((result) => result.priority === \"critical\")\n .length,\n high: allResults.filter((result) => result.priority === \"high\").length,\n medium: allResults.filter((result) => result.priority === \"medium\").length,\n projectsAffected: projectGroups.size,\n forecastsApproaching: allResults.filter(isApproachingForecast).length,\n byProject: Array.from(projectGroups.entries()).map(\n ([projectName, count]) => ({\n projectName,\n count,\n })\n ),\n };\n}\n\nfunction isApproachingForecast(result: GlobalBeliefHealthResult): boolean {\n return (\n result.temporalNature === \"forecast\" &&\n result.deadlineUrgency !== null &&\n result.deadlineUrgency !== \"distant\"\n );\n}\n\n/**\n * Get decay info for a single belief.\n *\n * Lightweight query for UI components that need to show\n * freshness indicators on individual beliefs.\n */\nexport const getBeliefDecayInfo = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: SingleBeliefArgs) => {\n const belief = await ctx.db.get(args.beliefId);\n if (!belief) {\n return null;\n }\n\n const beliefRecord = readBeliefRecord(belief);\n if (!beliefRecord) {\n return null;\n }\n const metadata: BeliefMetadata = beliefRecord.metadata ?? {};\n const predictionMeta = beliefRecord.predictionMeta ?? undefined;\n const temporalNature: RescoringTemporalNature =\n beliefRecord.temporalNature === \"forecast\" ||\n beliefRecord.temporalNature === \"factual\"\n ? beliefRecord.temporalNature\n : \"unknown\";\n\n // Get most recent confidence entry\n const confidenceHistory = readRowList(\n await ctx.db\n .query(\"beliefConfidence\")\n .withIndex(\"by_beliefId\", (q: IndexQueryBuilder) =>\n q.eq(\"beliefId\", args.beliefId)\n )\n .collect(),\n readConfidenceEntry\n );\n\n const sorted = confidenceHistory.sort(\n (a, b) => b.assessedAt - a.assessedAt\n );\n const lastEntry = sorted[0] ?? null;\n const lastScoredAt =\n lastEntry?.assessedAt ??\n beliefRecord.updatedAt ??\n beliefRecord.createdAt ??\n Date.now();\n const confidence = lastEntry?.confidence ?? metadata.confidence ?? 0.5;\n\n const schedule = getRescoringSchedule({\n lastScoredAt,\n temporalNature,\n expectedBy: predictionMeta?.expectedBy ?? null,\n predictionMeta: predictionMeta ?? null,\n confidence,\n beliefStatus: beliefRecord.beliefStatus ?? metadata.beliefStatus ?? null,\n });\n\n const decay = schedule.decay;\n\n return {\n confidence,\n decayedConfidence: confidence * decay.effectiveWeight,\n freshness: {\n label: decay.baseTier.label,\n ageDays: Math.round(decay.ageDays),\n weight: decay.effectiveWeight,\n action: decay.action,\n },\n deadline: decay.urgency\n ? {\n daysToDeadline: decay.urgency.daysToDeadline,\n urgency: decay.urgency.urgencyTier.label,\n isOverdue: decay.urgency.isOverdue,\n }\n : null,\n rescoringSchedule: {\n nextRescoreBy: schedule.nextRescoreBy,\n daysUntilRescore: schedule.daysUntilRescore,\n isOverdue: schedule.isOverdue,\n priority: schedule.priority,\n reason: schedule.reason,\n },\n };\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport { checkProjectAccess } from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport {\n applyOperationalLinkEffects,\n removeOperationalLinkEffects,\n} from \"./beliefEvidenceLinks.operational\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal, mutation, query } from \"./convex\";\nimport {\n deriveMatcherReviewStatus,\n isOperationalLinkStatus,\n type LinkSuggestionStatus,\n mergeLinkSuggestionStatus,\n resolveReviewedLinkStatus,\n} from \"./matcherFeedbackUtils\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { resolveScopeSoft, scopeArgs } from \"./scopeResolverCompat\";\n\n// IDs are now always epistemicNodes IDs (backfill complete)\nconst beliefIdUnion = v.id(\"epistemicNodes\");\nconst insightIdUnion = v.id(\"epistemicNodes\");\nconst suggestionStatusValidator = v.union(\n v.literal(\"suggested\"),\n v.literal(\"approved\"),\n v.literal(\"dismissed\")\n);\nconst matcherMetadataValidator = v.object({\n surface: v.string(),\n matcherFamily: v.optional(v.string()),\n matcherKey: v.optional(v.string()),\n matcherVersion: v.optional(v.string()),\n reviewStatus: v.optional(\n v.union(\n v.literal(\"pending\"),\n v.literal(\"accepted\"),\n v.literal(\"rejected\"),\n v.literal(\"auto_accepted\"),\n v.literal(\"superseded\")\n )\n ),\n configSnapshot: v.optional(v.any()),\n signalSnapshot: v.optional(v.any()),\n outcomeMetadata: v.optional(v.any()),\n});\n\ninterface MatcherMetadata {\n configSnapshot?: Record<string, unknown>;\n matcherFamily?: string;\n matcherKey?: string;\n matcherVersion?: string;\n outcomeMetadata?: Record<string, unknown>;\n reviewStatus?:\n | \"pending\"\n | \"accepted\"\n | \"rejected\"\n | \"auto_accepted\"\n | \"superseded\";\n signalSnapshot?: Record<string, unknown>;\n surface: string;\n}\n\ntype BeliefEvidenceRelation = \"supports\" | \"contradicts\";\ninterface IndexRangeBuilder {\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n}\ninterface EpistemicNode {\n _id: Id<\"epistemicNodes\">;\n belief?: string;\n canonicalText?: string;\n confidence?: string | number;\n contradictingInsightIds?: Id<\"epistemicNodes\">[];\n globalId?: string;\n nodeType?: string;\n projectId?: string;\n status?: string;\n supportingInsightIds?: Id<\"epistemicNodes\">[];\n topicId?: string | Id<\"topics\">;\n}\ninterface BeliefEvidenceLink {\n _id: Id<\"beliefEvidenceLinks\">;\n beliefId: Id<\"epistemicNodes\">;\n confidence?: number;\n createdAt?: number;\n createdBy: string;\n insightId: Id<\"epistemicNodes\">;\n rationale?: string;\n relation: BeliefEvidenceRelation;\n status?: LinkSuggestionStatus;\n}\ninterface ProjectBeliefSummary {\n _id: Id<\"epistemicNodes\">;\n belief: string;\n confidence: string;\n status: string;\n}\ninterface BeliefIdArgs {\n beliefId: Id<\"epistemicNodes\">;\n}\ninterface InsightIdArgs {\n insightId: Id<\"epistemicNodes\">;\n}\ninterface CreateLinkArgs {\n beliefId: Id<\"epistemicNodes\">;\n confidence?: number;\n createdBy: string;\n insightId: Id<\"epistemicNodes\">;\n matcherMetadata?: MatcherMetadata;\n rationale?: string;\n relation: BeliefEvidenceRelation;\n status?: LinkSuggestionStatus;\n weight: number;\n}\ninterface RemoveLinkArgs {\n linkId: Id<\"beliefEvidenceLinks\">;\n userId: string;\n}\ntype UpdateLinkArgs = RemoveLinkArgs & {\n confidence?: number;\n rationale?: string;\n};\ntype ReviewSuggestionArgs = RemoveLinkArgs & {\n status: \"approved\" | \"dismissed\";\n reason?: string;\n};\ntype EvidenceDetailsArgs = BeliefIdArgs & { userId: string };\ninterface ProjectLinksArgs {\n limit?: number;\n projectId?: string;\n topicId?: string;\n userId: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n return typeof value === \"string\" && value.length > 0\n ? (value as Id<TableName>)\n : null;\n}\n\nfunction readOptionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction readLinkSuggestionStatus(\n value: unknown\n): LinkSuggestionStatus | undefined {\n return value === \"suggested\" || value === \"approved\" || value === \"dismissed\"\n ? value\n : undefined;\n}\n\nfunction readRelation(value: unknown): BeliefEvidenceRelation | null {\n return value === \"supports\" || value === \"contradicts\" ? value : null;\n}\n\nfunction readNodeIdArray(value: unknown): Id<\"epistemicNodes\">[] | undefined {\n if (!Array.isArray(value)) {\n return;\n }\n return value.flatMap((entry) => {\n const id = readConvexId<\"epistemicNodes\">(entry);\n return id ? [id] : [];\n });\n}\n\nfunction readEpistemicNode(value: unknown): EpistemicNode | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = readConvexId<\"epistemicNodes\">(value._id);\n if (!id) {\n return null;\n }\n const confidence =\n readOptionalNumber(value.confidence) ??\n readOptionalString(value.confidence);\n return {\n _id: id,\n belief: readOptionalString(value.belief),\n canonicalText: readOptionalString(value.canonicalText),\n confidence,\n contradictingInsightIds: readNodeIdArray(value.contradictingInsightIds),\n globalId: readOptionalString(value.globalId),\n nodeType: readOptionalString(value.nodeType),\n projectId: readOptionalString(value.projectId),\n status: readOptionalString(value.status),\n supportingInsightIds: readNodeIdArray(value.supportingInsightIds),\n topicId: readOptionalString(value.topicId) as string | Id<\"topics\">,\n };\n}\n\nfunction readBeliefEvidenceLink(value: unknown): BeliefEvidenceLink | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = readConvexId<\"beliefEvidenceLinks\">(value._id);\n const beliefId = readConvexId<\"epistemicNodes\">(value.beliefId);\n const insightId = readConvexId<\"epistemicNodes\">(value.insightId);\n const relation = readRelation(value.relation);\n const createdBy = readOptionalString(value.createdBy);\n if (!(id && beliefId && insightId && relation && createdBy)) {\n return null;\n }\n return {\n _id: id,\n beliefId,\n confidence: readOptionalNumber(value.confidence),\n createdAt: readOptionalNumber(value.createdAt),\n createdBy,\n insightId,\n rationale: readOptionalString(value.rationale),\n relation,\n status: readLinkSuggestionStatus(value.status),\n };\n}\n\nfunction readProjectBeliefSummary(value: unknown): ProjectBeliefSummary | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = readConvexId<\"epistemicNodes\">(value._id);\n if (\n !id ||\n typeof value.belief !== \"string\" ||\n typeof value.confidence !== \"string\" ||\n typeof value.status !== \"string\"\n ) {\n return null;\n }\n return {\n _id: id,\n belief: value.belief,\n confidence: value.confidence,\n status: value.status,\n };\n}\n\nfunction readRowList<T>(\n values: readonly unknown[],\n reader: (value: unknown) => T | null\n): T[] {\n return values.flatMap((value) => {\n const row = reader(value);\n return row ? [row] : [];\n });\n}\n\nasync function markProjectGraphDirty(\n ctx: MutationCtx,\n projectId: string | undefined | null\n): Promise<void> {\n if (!projectId) {\n return;\n }\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n {\n projectId,\n }\n );\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(ctx, projectId, {\n lastActivityAt: Date.now(),\n });\n}\n\nasync function recordMatcherDecision(\n ctx: MutationCtx,\n args: {\n beliefNode: EpistemicNode;\n beliefId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n linkId: string;\n linkStatus?: LinkSuggestionStatus;\n matcherMetadata?: MatcherMetadata;\n reviewedBy?: string;\n decisionReason?: string;\n }\n): Promise<void> {\n if (!args.matcherMetadata) {\n return;\n }\n\n await ctx.runMutation(\"matcherFeedback:recordDecision\", {\n projectId: args.beliefNode.projectId,\n topicId: args.beliefNode.topicId,\n surface: args.matcherMetadata.surface,\n matcherFamily: args.matcherMetadata.matcherFamily,\n matcherKey: args.matcherMetadata.matcherKey,\n matcherVersion: args.matcherMetadata.matcherVersion,\n sourceEntityId: String(args.insightId),\n targetEntityId: String(args.beliefId),\n suggestionTable: \"beliefEvidenceLinks\",\n suggestionId: args.linkId,\n reviewStatus: deriveMatcherReviewStatus({\n explicitReviewStatus: args.matcherMetadata.reviewStatus,\n linkStatus: args.linkStatus,\n }),\n reviewedBy: args.reviewedBy,\n decisionReason: args.decisionReason,\n configSnapshot: args.matcherMetadata.configSnapshot,\n signalSnapshot: args.matcherMetadata.signalSnapshot,\n outcomeMetadata: args.matcherMetadata.outcomeMetadata,\n });\n}\n\n/**\n * Belief Evidence Links Management (LucernCoreZero)\n *\n * Normalized edge table connecting beliefs to evidence (insights).\n * This is the core of Lucern's reasoning structure.\n *\n * Relations:\n * - \"supports\": Evidence increases confidence in belief\n * - \"contradicts\": Evidence decreases confidence in belief\n */\n\n// ===== MUTATIONS =====\n\n/**\n * Create a link between a belief and evidence\n */\nexport const create = mutation({\n args: {\n beliefId: beliefIdUnion,\n insightId: insightIdUnion,\n relation: v.union(v.literal(\"supports\"), v.literal(\"contradicts\")),\n weight: v.number(),\n confidence: v.optional(v.number()),\n rationale: v.optional(v.string()),\n status: v.optional(suggestionStatusValidator),\n matcherMetadata: v.optional(matcherMetadataValidator),\n createdBy: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: CreateLinkArgs) => {\n // IDs are already epistemicNodes IDs (backfill complete)\n const resolvedBeliefId = args.beliefId as Id<\"epistemicNodes\">;\n const resolvedInsightId = args.insightId as Id<\"epistemicNodes\">;\n\n // Get the belief node to check project access\n const beliefNode = readEpistemicNode(await ctx.db.get(resolvedBeliefId));\n if (!beliefNode) {\n throw new Error(\"Belief node not found\");\n }\n\n // Get the insight node\n const insightNode = readEpistemicNode(await ctx.db.get(resolvedInsightId));\n if (!insightNode) {\n throw new Error(\"Evidence node not found\");\n }\n if (\n !Number.isFinite(args.weight) ||\n args.weight === 0 ||\n args.weight < -1 ||\n args.weight > 1\n ) {\n throw new Error(\n \"Belief evidence links require explicit nonzero weight in [-1, 1]\"\n );\n }\n if (args.relation === \"supports\" && args.weight < 0) {\n throw new Error(\"Supporting evidence links require positive weight\");\n }\n if (args.relation === \"contradicts\" && args.weight > 0) {\n throw new Error(\"Contradicting evidence links require negative weight\");\n }\n const relationConfidence = Math.abs(args.weight);\n\n // Verify project access (only if belief is project-scoped)\n if (beliefNode.projectId) {\n const hasAccess = await checkProjectAccess(\n ctx,\n beliefNode.projectId,\n args.createdBy\n );\n if (!hasAccess) {\n throw new Error(\"No permission to link evidence to this belief\");\n }\n }\n // System-wide beliefs (no projectId) are accessible by all users\n\n // Check for existing link (avoid duplicates)\n const existingLinks = readRowList(\n await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId)\n )\n .collect(),\n readBeliefEvidenceLink\n );\n\n const duplicate = existingLinks.find(\n (link) => link.insightId === args.insightId\n );\n\n if (duplicate) {\n const nextStatus = mergeLinkSuggestionStatus(\n duplicate.status as LinkSuggestionStatus | undefined,\n args.status\n );\n await ctx.db.patch(duplicate._id, {\n relation: args.relation,\n confidence: relationConfidence,\n rationale: args.rationale,\n status: nextStatus,\n });\n if (\n isOperationalLinkStatus(nextStatus) &&\n !isOperationalLinkStatus(\n duplicate.status as LinkSuggestionStatus | undefined\n )\n ) {\n await applyOperationalLinkEffects(ctx, {\n beliefNode,\n beliefId: resolvedBeliefId,\n insightId: resolvedInsightId,\n relation: args.relation,\n weight: args.weight,\n rationale: args.rationale,\n createdBy: args.createdBy,\n });\n }\n await recordMatcherDecision(ctx, {\n beliefNode,\n beliefId: resolvedBeliefId,\n insightId: resolvedInsightId,\n linkId: duplicate._id,\n linkStatus: nextStatus,\n matcherMetadata: args.matcherMetadata,\n });\n await markProjectGraphDirty(ctx, beliefNode.projectId);\n return duplicate._id;\n }\n\n const now = Date.now();\n const linkId = await ctx.db.insert(\"beliefEvidenceLinks\", {\n beliefId: args.beliefId,\n insightId: args.insightId,\n relation: args.relation,\n confidence: relationConfidence,\n rationale: args.rationale,\n status: args.status,\n createdBy: args.createdBy,\n createdAt: now,\n });\n\n await recordMatcherDecision(ctx, {\n beliefNode,\n beliefId: resolvedBeliefId,\n insightId: resolvedInsightId,\n linkId,\n linkStatus: args.status,\n matcherMetadata: args.matcherMetadata,\n });\n\n if (isOperationalLinkStatus(args.status)) {\n await applyOperationalLinkEffects(ctx, {\n beliefNode,\n beliefId: resolvedBeliefId,\n insightId: resolvedInsightId,\n relation: args.relation,\n weight: args.weight,\n rationale: args.rationale,\n createdBy: args.createdBy,\n });\n }\n\n await markProjectGraphDirty(ctx, beliefNode.projectId);\n\n return linkId;\n },\n});\n\n/**\n * Remove a belief-evidence link\n */\nexport const remove = mutation({\n args: {\n linkId: v.id(\"beliefEvidenceLinks\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: RemoveLinkArgs) => {\n const link = readBeliefEvidenceLink(await ctx.db.get(args.linkId));\n if (!link) {\n throw new Error(\"Link not found\");\n }\n\n // Only creator can remove\n if (link.createdBy !== args.userId) {\n throw new Error(\"Only the creator can remove this link\");\n }\n\n const belief = readEpistemicNode(await ctx.db.get(link.beliefId));\n if (\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n ) {\n await removeOperationalLinkEffects(ctx, {\n beliefId: link.beliefId,\n insightId: link.insightId,\n relation: link.relation,\n });\n }\n\n await ctx.db.delete(args.linkId);\n await markProjectGraphDirty(ctx, belief?.projectId);\n },\n});\n\n/**\n * Update link confidence or rationale\n */\nexport const update = mutation({\n args: {\n linkId: v.id(\"beliefEvidenceLinks\"),\n confidence: v.optional(v.number()),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateLinkArgs) => {\n const link = readBeliefEvidenceLink(await ctx.db.get(args.linkId));\n if (!link) {\n throw new Error(\"Link not found\");\n }\n\n // Verify access (link creator or project access)\n const belief = readEpistemicNode(await ctx.db.get(link.beliefId));\n if (!belief) {\n throw new Error(\"Belief not found\");\n }\n\n // Verify access (link creator always has access, or project access for project-scoped beliefs)\n let hasAccess = link.createdBy === args.userId;\n\n if (!hasAccess && belief.projectId) {\n hasAccess = await checkProjectAccess(ctx, belief.projectId, args.userId);\n }\n\n // System-wide beliefs (no projectId) - only link creator can modify\n if (!hasAccess) {\n throw new Error(\"No permission to update this link\");\n }\n\n // Validate confidence if provided\n if (\n args.confidence !== undefined &&\n (args.confidence < 0 || args.confidence > 1)\n ) {\n throw new Error(\"Confidence must be between 0 and 1\");\n }\n\n const updates: Record<string, unknown> = {};\n if (args.confidence !== undefined) {\n updates.confidence = args.confidence;\n }\n if (args.rationale !== undefined) {\n updates.rationale = args.rationale;\n }\n\n if (Object.keys(updates).length > 0) {\n await ctx.db.patch(args.linkId, updates);\n await markProjectGraphDirty(ctx, belief.projectId);\n }\n },\n});\n\nexport const reviewSuggestion = mutation({\n args: {\n linkId: v.id(\"beliefEvidenceLinks\"),\n status: v.union(v.literal(\"approved\"), v.literal(\"dismissed\")),\n userId: v.string(),\n reason: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: ReviewSuggestionArgs) => {\n const link = readBeliefEvidenceLink(await ctx.db.get(args.linkId));\n if (!link) {\n throw new Error(\"Link not found\");\n }\n\n const belief = readEpistemicNode(await ctx.db.get(link.beliefId));\n if (!belief) {\n throw new Error(\"Belief not found\");\n }\n\n let hasAccess = link.createdBy === args.userId;\n if (!hasAccess && belief.projectId) {\n hasAccess = await checkProjectAccess(ctx, belief.projectId, args.userId);\n }\n if (!hasAccess) {\n throw new Error(\"No permission to review this link\");\n }\n\n const previousStatus = link.status as LinkSuggestionStatus | undefined;\n const nextStatus = resolveReviewedLinkStatus(args.status);\n await ctx.db.patch(args.linkId, { status: nextStatus });\n\n if (nextStatus === \"approved\" && !isOperationalLinkStatus(previousStatus)) {\n await applyOperationalLinkEffects(ctx, {\n beliefNode: belief,\n beliefId: link.beliefId,\n insightId: link.insightId,\n relation: link.relation,\n weight:\n link.relation === \"supports\"\n ? Math.abs(link.confidence ?? 0)\n : -Math.abs(link.confidence ?? 0),\n rationale: link.rationale,\n createdBy: args.userId,\n });\n }\n if (nextStatus === \"dismissed\" && isOperationalLinkStatus(previousStatus)) {\n await removeOperationalLinkEffects(ctx, {\n beliefId: link.beliefId,\n insightId: link.insightId,\n relation: link.relation,\n });\n }\n\n await ctx.runMutation(\"matcherFeedback:recordDecision\", {\n projectId: belief.projectId,\n topicId: belief.topicId,\n sourceEntityId: String(link.insightId),\n targetEntityId: String(link.beliefId),\n suggestionTable: \"beliefEvidenceLinks\",\n suggestionId: args.linkId,\n reviewStatus: deriveMatcherReviewStatus({ linkStatus: nextStatus }),\n reviewedBy: args.userId,\n decisionReason: args.reason,\n outcomeMetadata: args.reason ? { reason: args.reason } : undefined,\n });\n\n await markProjectGraphDirty(ctx, belief.projectId);\n return { success: true, status: nextStatus };\n },\n});\n\n// ===== QUERIES =====\n\n/**\n * Get all links for a belief\n */\nexport const getByBelief = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: BeliefIdArgs) => {\n const links = readRowList(\n await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId)\n )\n .collect(),\n readBeliefEvidenceLink\n );\n\n return links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n },\n});\n\nexport const getPendingSuggestions = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: BeliefIdArgs) => {\n const links = readRowList(\n await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId)\n )\n .collect(),\n readBeliefEvidenceLink\n );\n\n return links.filter((link) => link.status === \"suggested\");\n },\n});\n\n/**\n * Get supporting evidence links for a belief\n */\nexport const getSupportingLinks = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: BeliefIdArgs) => {\n const links = readRowList(\n await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_relation\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId).eq(\"relation\", \"supports\")\n )\n .collect(),\n readBeliefEvidenceLink\n );\n\n return links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n },\n});\n\n/**\n * Get contradicting evidence links for a belief\n */\nexport const getContradictingLinks = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: BeliefIdArgs) => {\n const links = readRowList(\n await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_relation\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId).eq(\"relation\", \"contradicts\")\n )\n .collect(),\n readBeliefEvidenceLink\n );\n\n return links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n },\n});\n\n/**\n * Get all beliefs linked to a specific insight\n */\nexport const getByInsight = query({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: InsightIdArgs) => {\n const links = readRowList(\n await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_insightId\", (q: IndexRangeBuilder) =>\n q.eq(\"insightId\", args.insightId)\n )\n .collect(),\n readBeliefEvidenceLink\n );\n\n return links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n },\n});\n\n/**\n * Get evidence counts for a belief (for badges)\n */\nexport const getCounts = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: BeliefIdArgs) => {\n const links = readRowList(\n await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId)\n )\n .collect(),\n readBeliefEvidenceLink\n );\n\n const activeLinks = links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n const supporting = activeLinks.filter(\n (l) => l.relation === \"supports\"\n ).length;\n const contradicting = activeLinks.filter(\n (l) => l.relation === \"contradicts\"\n ).length;\n\n return {\n supporting,\n contradicting,\n total: activeLinks.length,\n netSupport: supporting - contradicting,\n };\n },\n});\n\n/**\n * Get full evidence details for a belief (with insight data)\n */\nexport const getEvidenceWithDetails = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: EvidenceDetailsArgs) => {\n // Verify belief exists\n const belief = readEpistemicNode(await ctx.db.get(args.beliefId));\n if (!belief) {\n return null;\n }\n\n // Verify project access (only for project-scoped beliefs)\n if (belief.projectId) {\n const hasAccess = await checkProjectAccess(\n ctx,\n belief.projectId,\n args.userId\n );\n if (!hasAccess) {\n return null;\n }\n }\n // System-wide beliefs are accessible to all users\n\n // Get all links\n const links = readRowList(\n await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId)\n )\n .collect(),\n readBeliefEvidenceLink\n );\n\n // Fetch insight details for each link\n const linksWithDetails = await Promise.all(\n links\n .filter((link) =>\n isOperationalLinkStatus(\n link.status as LinkSuggestionStatus | undefined\n )\n )\n .map(async (link) => {\n const insight = readEpistemicNode(await ctx.db.get(link.insightId));\n return {\n ...link,\n insight,\n };\n })\n );\n\n // Separate supporting and contradicting\n const supporting = linksWithDetails.filter(\n (l) => l.relation === \"supports\"\n );\n const contradicting = linksWithDetails.filter(\n (l) => l.relation === \"contradicts\"\n );\n\n return {\n supporting,\n contradicting,\n counts: {\n supporting: supporting.length,\n contradicting: contradicting.length,\n netSupport: supporting.length - contradicting.length,\n },\n };\n },\n});\n\n/**\n * Get all belief-evidence links for a project (batch fetch)\n * Returns links grouped by insightId for efficient UI rendering\n */\nexport const getByProject = query({\n args: {\n ...scopeArgs,\n userId: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: ProjectLinksArgs) => {\n const scope = await resolveScopeSoft(ctx, args);\n const projectId = scope.projectId;\n if (!projectId) {\n return [];\n }\n\n // Verify project access\n const hasAccess = await checkProjectAccess(ctx, projectId, args.userId);\n if (!hasAccess) {\n return { links: [], beliefDetails: {} };\n }\n const pageSize = Math.max(1, Math.min(Math.floor(args.limit ?? 300), 1000));\n\n // Get all beliefs from epistemic spine\n const beliefs = readRowList(\n await ctx.runQuery(internal.epistemicBeliefs.internalGetByProject, {\n projectId,\n limit: pageSize,\n }),\n readProjectBeliefSummary\n );\n\n const beliefIds = beliefs.map((b) => b._id);\n\n // Get all links for these beliefs\n const allLinks = await Promise.all(\n beliefIds.map(async (beliefId: Id<\"epistemicNodes\">) => {\n const links = readRowList(\n await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", beliefId)\n )\n .take(200),\n readBeliefEvidenceLink\n );\n return links;\n })\n );\n\n const flattenedLinks = allLinks.flat().slice(0, pageSize * 5);\n\n // Create a map of belief details for easy lookup\n const beliefDetails: Record<\n string,\n { _id: string; belief: string; status: string; confidence: string }\n > = {};\n for (const belief of beliefs) {\n beliefDetails[belief._id] = {\n _id: belief._id,\n belief: belief.belief,\n status: belief.status,\n confidence: belief.confidence,\n };\n }\n\n return {\n links: flattenedLinks,\n beliefDetails,\n };\n },\n});\n\n/**\n * Get belief links with full belief details for a specific insight\n * Used in insight detail view\n */\nexport const getLinkedBeliefsForInsight = query({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: InsightIdArgs) => {\n const links = readRowList(\n await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_insightId\", (q: IndexRangeBuilder) =>\n q.eq(\"insightId\", args.insightId)\n )\n .collect(),\n readBeliefEvidenceLink\n );\n\n // Fetch belief details for each link\n const linkedBeliefs = await Promise.all(\n links.map(async (link) => {\n const belief = readEpistemicNode(await ctx.db.get(link.beliefId));\n return {\n linkId: link._id,\n beliefId: link.beliefId,\n relation: link.relation,\n rationale: link.rationale,\n belief: belief\n ? {\n _id: belief._id,\n belief: belief.belief ?? belief.canonicalText,\n status: belief.status,\n confidence: belief.confidence,\n }\n : null,\n };\n })\n );\n\n return linkedBeliefs.filter((l) => l.belief !== null);\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport type { Id, MutationCtx } from \"./convex\";\nimport { internal } from \"./convex\";\nimport { insertEpistemicEdge } from \"./epistemicInsert.js\";\nimport { generateGlobalId } from \"./globalId\";\n\ntype BeliefEvidenceRelation = \"supports\" | \"contradicts\";\ninterface IndexRangeBuilder {\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n}\ninterface EpistemicNode {\n _id: Id<\"epistemicNodes\">;\n contradictingInsightIds?: Id<\"epistemicNodes\">[];\n globalId?: string;\n nodeType?: string;\n projectId?: string;\n supportingInsightIds?: Id<\"epistemicNodes\">[];\n topicId?: string | Id<\"topics\">;\n}\ninterface EpistemicEdgeDoc {\n _id: Id<\"epistemicEdges\">;\n edgeType: string;\n globalId: string;\n}\ninterface InsightIdCollections {\n contradictingInsightIds: Id<\"epistemicNodes\">[];\n supportingInsightIds: Id<\"epistemicNodes\">[];\n}\ninterface OperationalEpistemicEdgeInsert {\n confidence: number;\n context: string;\n createdAt: number;\n createdBy: string;\n derivationType: \"evidence_sl_scoring\";\n edgeType: \"informs\";\n fromLayer: \"L2\";\n fromNodeId: string;\n fromNodeType: \"evidence\";\n globalId: string;\n metadata: OperationalEpistemicEdgeMetadata;\n projectId?: string;\n reasoningMethod: \"testimonial\";\n sourceGlobalId: string;\n targetGlobalId: string;\n toLayer: \"L3\";\n toNodeId: string;\n toNodeType: \"belief\";\n topicId?: string;\n updatedAt: number;\n weight: number;\n}\ninterface OperationalEpistemicEdgeMetadata {\n confidence: number;\n impactScore: number;\n invariant: \"evidence.belief_impact_required\";\n relation: BeliefEvidenceRelation;\n}\ninterface SpineNodeDoc {\n _id: Id<\"epistemicNodes\">;\n globalId: string;\n nodeType: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n return typeof value === \"string\" && value.length > 0\n ? (value as Id<TableName>)\n : null;\n}\n\nfunction readEpistemicEdgeDoc(value: unknown): EpistemicEdgeDoc | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = readConvexId<\"epistemicEdges\">(value._id);\n if (\n !id ||\n typeof value.edgeType !== \"string\" ||\n typeof value.globalId !== \"string\"\n ) {\n return null;\n }\n return {\n _id: id,\n edgeType: value.edgeType,\n globalId: value.globalId,\n };\n}\n\nfunction readInsightIdArray(value: unknown): Id<\"epistemicNodes\">[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.flatMap((entry) => {\n const id = readConvexId<\"epistemicNodes\">(entry);\n return id ? [id] : [];\n });\n}\n\nfunction readInsightIdCollections(value: unknown): InsightIdCollections {\n if (!isRecord(value)) {\n return {\n contradictingInsightIds: [],\n supportingInsightIds: [],\n };\n }\n return {\n contradictingInsightIds: readInsightIdArray(value.contradictingInsightIds),\n supportingInsightIds: readInsightIdArray(value.supportingInsightIds),\n };\n}\n\nfunction readSpineNodeDoc(value: unknown): SpineNodeDoc | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = readConvexId<\"epistemicNodes\">(value._id);\n if (\n !id ||\n typeof value.globalId !== \"string\" ||\n typeof value.nodeType !== \"string\"\n ) {\n return null;\n }\n return {\n _id: id,\n globalId: value.globalId,\n nodeType: value.nodeType,\n };\n}\n\nasync function insertOperationalEpistemicEdge(\n ctx: MutationCtx,\n doc: OperationalEpistemicEdgeInsert\n): Promise<void> {\n await insertEpistemicEdge(\n ctx,\n doc as unknown as Parameters<typeof insertEpistemicEdge>[1]\n );\n}\n\nfunction assertEvidenceImpact(args: {\n relation: BeliefEvidenceRelation;\n weight: number;\n}) {\n if (\n !Number.isFinite(args.weight) ||\n args.weight === 0 ||\n args.weight < -1 ||\n args.weight > 1\n ) {\n throw new Error(\n \"Belief evidence links require explicit nonzero weight in [-1, 1]\"\n );\n }\n if (args.relation === \"supports\" && args.weight < 0) {\n throw new Error(\"Supporting evidence links require positive weight\");\n }\n if (args.relation === \"contradicts\" && args.weight > 0) {\n throw new Error(\"Contradicting evidence links require negative weight\");\n }\n}\n\nexport async function applyOperationalLinkEffects(\n ctx: MutationCtx,\n args: {\n beliefNode: EpistemicNode;\n beliefId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n relation: BeliefEvidenceRelation;\n weight: number;\n rationale?: string;\n createdBy: string;\n }\n): Promise<void> {\n assertEvidenceImpact({ relation: args.relation, weight: args.weight });\n const confidence = Math.abs(args.weight);\n const currentSupporting = args.beliefNode.supportingInsightIds ?? [];\n const currentContradicting = args.beliefNode.contradictingInsightIds ?? [];\n\n if (\n args.relation === \"supports\" &&\n !currentSupporting.includes(args.insightId)\n ) {\n await ctx.db.patch(args.beliefId, {\n supportingInsightIds: [...currentSupporting, args.insightId],\n contradictingInsightIds: currentContradicting.filter(\n (id: Id<\"epistemicNodes\">) => id !== args.insightId\n ),\n });\n } else if (\n args.relation === \"contradicts\" &&\n !currentContradicting.includes(args.insightId)\n ) {\n await ctx.db.patch(args.beliefId, {\n contradictingInsightIds: [...currentContradicting, args.insightId],\n supportingInsightIds: currentSupporting.filter(\n (id: Id<\"epistemicNodes\">) => id !== args.insightId\n ),\n });\n }\n\n try {\n const beliefSpineNode = readSpineNodeDoc(await ctx.db.get(args.beliefId));\n const evidenceSpineNode = readSpineNodeDoc(\n await ctx.db.get(args.insightId)\n );\n\n if (\n beliefSpineNode?.nodeType === \"belief\" &&\n evidenceSpineNode?.nodeType === \"evidence\"\n ) {\n const existingEdges = (\n await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q: IndexRangeBuilder) =>\n q\n .eq(\"fromNodeId\", evidenceSpineNode.globalId)\n .eq(\"toNodeId\", beliefSpineNode.globalId)\n )\n .collect()\n )\n .map(readEpistemicEdgeDoc)\n .filter((edge): edge is EpistemicEdgeDoc => edge !== null);\n\n for (const edge of existingEdges) {\n if (edge.edgeType === \"informs\") {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n }\n }\n\n const globalId = generateGlobalId();\n const context = args.rationale || `Linked as ${args.relation}`;\n await insertOperationalEpistemicEdge(ctx, {\n globalId,\n // C2-RR.4 Defect E — canonical UUIDv7 endpoints, not Convex doc ids.\n fromNodeId: evidenceSpineNode.globalId,\n toNodeId: beliefSpineNode.globalId,\n sourceGlobalId: evidenceSpineNode.globalId,\n targetGlobalId: beliefSpineNode.globalId,\n edgeType: \"informs\",\n weight: args.weight,\n confidence,\n context,\n reasoningMethod: \"testimonial\",\n derivationType: \"evidence_sl_scoring\",\n metadata: {\n relation: args.relation,\n confidence,\n impactScore: args.weight,\n invariant: \"evidence.belief_impact_required\",\n },\n createdBy: args.createdBy,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n projectId: args.beliefNode.projectId,\n topicId: args.beliefNode.topicId\n ? String(args.beliefNode.topicId)\n : undefined,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId,\n fromGlobalId: evidenceSpineNode.globalId,\n toGlobalId: beliefSpineNode.globalId,\n edgeType: \"informs\",\n weight: args.weight,\n confidence,\n context,\n projectId: args.beliefNode.projectId\n ? String(args.beliefNode.projectId)\n : undefined,\n createdBy: args.createdBy,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n }\n } catch (e) {\n console.error(\"[EpistemicSpine] Failed to create informs edge:\", e);\n }\n\n if (args.beliefNode.projectId) {\n await ctx.scheduler.runAfter(0, \"verificationActions:deepVerifyEvidence\", {\n insightId: args.insightId,\n targetType: \"belief\",\n targetId: args.beliefId,\n projectId: args.beliefNode.projectId,\n userId: args.createdBy,\n });\n }\n}\n\nexport async function removeOperationalLinkEffects(\n ctx: MutationCtx,\n args: {\n beliefId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n relation: BeliefEvidenceRelation;\n }\n): Promise<void> {\n const belief = await ctx.db.get(args.beliefId);\n if (belief) {\n const { contradictingInsightIds, supportingInsightIds } =\n readInsightIdCollections(belief);\n\n if (args.relation === \"supports\") {\n await ctx.db.patch(args.beliefId, {\n supportingInsightIds: supportingInsightIds.filter(\n (id: Id<\"epistemicNodes\">) => id !== args.insightId\n ),\n });\n } else {\n await ctx.db.patch(args.beliefId, {\n contradictingInsightIds: contradictingInsightIds.filter(\n (id: Id<\"epistemicNodes\">) => id !== args.insightId\n ),\n });\n }\n }\n\n try {\n const beliefSpineNode = readSpineNodeDoc(await ctx.db.get(args.beliefId));\n const evidenceSpineNode = readSpineNodeDoc(\n await ctx.db.get(args.insightId)\n );\n\n if (\n beliefSpineNode?.nodeType === \"belief\" &&\n evidenceSpineNode?.nodeType === \"evidence\"\n ) {\n const edges = (\n await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q: IndexRangeBuilder) =>\n q\n .eq(\"fromNodeId\", evidenceSpineNode._id)\n .eq(\"toNodeId\", beliefSpineNode._id)\n )\n .collect()\n )\n .map(readEpistemicEdgeDoc)\n .filter((edge): edge is EpistemicEdgeDoc => edge !== null);\n\n for (const edge of edges) {\n if (edge.edgeType === \"informs\") {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n }\n }\n }\n } catch (e) {\n console.error(\"[EpistemicSpine] Failed to remove informs edge:\", e);\n }\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Matcher feedback helper types shared by graph-primitive review flows. */\nexport type LinkSuggestionStatus = \"suggested\" | \"approved\" | \"dismissed\";\n\nexport type MatcherReviewStatus =\n | \"pending\"\n | \"accepted\"\n | \"rejected\"\n | \"auto_accepted\"\n | \"superseded\";\n\ninterface MatcherFeedbackSummaryRow {\n matcherKey?: string | null;\n reviewStatus: MatcherReviewStatus;\n rewardScore?: number | null;\n surface?: string | null;\n}\n\nexport function isOperationalLinkStatus(\n status?: LinkSuggestionStatus | null\n): boolean {\n return status !== \"suggested\" && status !== \"dismissed\";\n}\n\nexport function mergeLinkSuggestionStatus(\n existing?: LinkSuggestionStatus | null,\n requested?: LinkSuggestionStatus | null\n): LinkSuggestionStatus | undefined {\n if (requested === undefined || requested === null) {\n return existing ?? undefined;\n }\n\n if (\n existing &&\n isOperationalLinkStatus(existing) &&\n !isOperationalLinkStatus(requested)\n ) {\n return existing;\n }\n\n return requested;\n}\n\nexport function resolveReviewedLinkStatus(\n requested: \"approved\" | \"dismissed\"\n): LinkSuggestionStatus {\n return requested;\n}\n\nexport function deriveMatcherReviewStatus(input: {\n explicitReviewStatus?: MatcherReviewStatus | null;\n linkStatus?: LinkSuggestionStatus | null;\n autoAccepted?: boolean;\n}): MatcherReviewStatus {\n if (input.explicitReviewStatus) {\n return input.explicitReviewStatus;\n }\n\n if (input.autoAccepted) {\n return \"auto_accepted\";\n }\n\n if (input.linkStatus === \"suggested\") {\n return \"pending\";\n }\n\n if (input.linkStatus === \"dismissed\") {\n return \"rejected\";\n }\n\n return \"accepted\";\n}\n\nexport function deriveMatcherRewardScore(\n reviewStatus: MatcherReviewStatus\n): number {\n switch (reviewStatus) {\n case \"accepted\":\n case \"auto_accepted\":\n return 1;\n case \"rejected\":\n return -1;\n default:\n return 0;\n }\n}\n\nexport function summarizeMatcherFeedback(rows: MatcherFeedbackSummaryRow[]) {\n const totals = {\n total: rows.length,\n pending: 0,\n accepted: 0,\n autoAccepted: 0,\n rejected: 0,\n superseded: 0,\n };\n\n const surfaces = new Set<string>();\n const matcherKeys = new Set<string>();\n let rewardSum = 0;\n\n for (const row of rows) {\n if (row.surface) {\n surfaces.add(row.surface);\n }\n if (row.matcherKey) {\n matcherKeys.add(row.matcherKey);\n }\n\n switch (row.reviewStatus) {\n case \"pending\":\n totals.pending += 1;\n break;\n case \"accepted\":\n totals.accepted += 1;\n break;\n case \"auto_accepted\":\n totals.autoAccepted += 1;\n break;\n case \"rejected\":\n totals.rejected += 1;\n break;\n case \"superseded\":\n totals.superseded += 1;\n break;\n default:\n break;\n }\n\n rewardSum += row.rewardScore ?? deriveMatcherRewardScore(row.reviewStatus);\n }\n\n const decided = totals.accepted + totals.autoAccepted + totals.rejected;\n const positive = totals.accepted + totals.autoAccepted;\n\n return {\n ...totals,\n decided,\n acceptanceRate: decided > 0 ? positive / decided : 0,\n averageReward: rows.length > 0 ? rewardSum / rows.length : 0,\n uniqueSurfaces: surfaces.size,\n uniqueMatchers: matcherKeys.size,\n };\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public ABI surface; rename requires a cross-package migration update.\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\n\ntype TopicScopeResolverContext = Parameters<typeof resolveTopicProjectScope>[0];\n\nexport const scopeArgs = optionalScopeArgs;\n\nexport type ResolvedScope = Awaited<\n ReturnType<typeof resolveTopicProjectScope>\n>;\nexport interface SoftResolvedScope {\n projectId?: string;\n source?: ResolvedScope[\"source\"];\n tenantId?: string;\n topicId?: string;\n workspaceId?: string;\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\nexport async function resolveScope(\n ctx: TopicScopeResolverContext,\n args: { topicId?: string | null; projectId?: string | null }\n): Promise<ResolvedScope | null> {\n const topicId = normalizeScopeValue(args.topicId);\n const projectId = normalizeScopeValue(args.projectId);\n if (!(topicId || projectId)) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n topicId,\n projectId,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[scopeResolverCompat] Failed to resolve scope\",\n {\n error,\n topicId,\n projectId,\n }\n );\n return null;\n }\n}\n\nexport async function resolveScopeSoft(\n ctx: TopicScopeResolverContext,\n args: { topicId?: string | null; projectId?: string | null }\n): Promise<SoftResolvedScope> {\n const resolved = await resolveScope(ctx, args);\n if (resolved) {\n const topicId = normalizeScopeValue(resolved.topicId);\n return {\n ...(topicId ? { topicId } : {}),\n ...(resolved.projectId ? { projectId: resolved.projectId } : {}),\n ...(resolved.tenantId ? { tenantId: resolved.tenantId } : {}),\n ...(resolved.workspaceId ? { workspaceId: resolved.workspaceId } : {}),\n ...(resolved.source ? { source: resolved.source } : {}),\n };\n }\n\n const topicId = normalizeScopeValue(args.topicId);\n const projectId = normalizeScopeValue(args.projectId);\n return {\n ...(topicId ? { topicId } : {}),\n ...(projectId ? { projectId } : {}),\n };\n}\n","/**\n * Contradiction Detection & Surfacing (Phase 8.3)\n *\n * Contradictions are GOLD. When evidence conflicts for a belief,\n * that's a signal to dig deeper. This module detects, tracks, and\n * helps resolve contradictions in the belief system.\n */\n\nimport {\n checkProjectAccess,\n requireScopeWriteAccess,\n} from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal, mutation, query } from \"./convex\";\nimport { resolveScopeSoft, scopeArgs } from \"./scopeResolverCompat\";\n\ntype ContradictionSource = \"evidence_links\" | \"tuple_space\";\ntype ContradictionStatus =\n | \"unresolved\"\n | \"investigating\"\n | \"resolved_support\"\n | \"resolved_contra\"\n | \"belief_forked\";\ntype ContradictionSeverity = \"critical\" | \"significant\" | \"minor\";\ninterface IndexQueryBuilder {\n eq(field: string, value: unknown): IndexQueryBuilder;\n}\n\n// IDs are now always epistemicNodes IDs (backfill complete)\nconst _beliefIdUnion = v.id(\"epistemicNodes\");\nconst _insightIdUnion = v.id(\"epistemicNodes\");\nconst DEFAULT_CONTRADICTION_SOURCE: ContradictionSource = \"evidence_links\";\nconst TUPLE_SPACE_CONTRADICTION_SOURCE: ContradictionSource = \"tuple_space\";\n\ninterface BeliefRecord {\n _id: Id<\"epistemicNodes\">;\n canonicalText: string;\n criticality?: string | null;\n status: string;\n}\n\ninterface EvidenceLink {\n insightId: Id<\"epistemicNodes\">;\n relation: \"supports\" | \"contradicts\";\n}\n\ninterface ContradictionRow {\n _id: Id<\"contradictions\">;\n aiAnalysis?: {\n summary: string;\n likelyExplanation: string;\n suggestedResolution: string;\n confidenceInAnalysis: number;\n analyzedAt: number;\n } | null;\n beliefBId?: Id<\"epistemicNodes\"> | null;\n beliefId: Id<\"epistemicNodes\">;\n contradictingInsightIds: Id<\"epistemicNodes\">[];\n createdBy?: string;\n description?: string | null;\n detectedAt?: number;\n detectionMethod?: string | null;\n projectId?: string | null;\n resolution?: unknown;\n resolutionSprintId?: string | null;\n resolvedAt?: number | null;\n severity: ContradictionSeverity;\n source?: ContradictionSource | null;\n status: ContradictionStatus;\n supportingInsightIds: Id<\"epistemicNodes\">[];\n topicId: string;\n}\n\ninterface ContradictionEvidence {\n contradictingInsightIds: Id<\"epistemicNodes\">[];\n supportingInsightIds: Id<\"epistemicNodes\">[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n return typeof value === \"string\" && value.length > 0\n ? (value as Id<TableName>)\n : null;\n}\n\nfunction readOptionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction readIdArray<TableName extends string>(\n value: unknown\n): Id<TableName>[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.flatMap((entry) => {\n const id = readConvexId<TableName>(entry);\n return id ? [id] : [];\n });\n}\n\nfunction readContradictionSource(value: unknown): ContradictionSource | null {\n if (value === DEFAULT_CONTRADICTION_SOURCE) {\n return DEFAULT_CONTRADICTION_SOURCE;\n }\n if (value === TUPLE_SPACE_CONTRADICTION_SOURCE) {\n return TUPLE_SPACE_CONTRADICTION_SOURCE;\n }\n return null;\n}\n\nfunction readContradictionStatus(value: unknown): ContradictionStatus | null {\n return value === \"unresolved\" ||\n value === \"investigating\" ||\n value === \"resolved_support\" ||\n value === \"resolved_contra\" ||\n value === \"belief_forked\"\n ? value\n : null;\n}\n\nfunction readContradictionSeverity(\n value: unknown\n): ContradictionSeverity | null {\n return value === \"critical\" || value === \"significant\" || value === \"minor\"\n ? value\n : null;\n}\n\nfunction readAiAnalysis(value: unknown): ContradictionRow[\"aiAnalysis\"] {\n if (!isRecord(value)) {\n return null;\n }\n if (\n typeof value.summary !== \"string\" ||\n typeof value.likelyExplanation !== \"string\" ||\n typeof value.suggestedResolution !== \"string\" ||\n typeof value.confidenceInAnalysis !== \"number\" ||\n typeof value.analyzedAt !== \"number\"\n ) {\n return null;\n }\n return {\n analyzedAt: value.analyzedAt,\n confidenceInAnalysis: value.confidenceInAnalysis,\n likelyExplanation: value.likelyExplanation,\n suggestedResolution: value.suggestedResolution,\n summary: value.summary,\n };\n}\n\nfunction readBeliefRecord(value: unknown): BeliefRecord | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = readConvexId<\"epistemicNodes\">(value._id);\n const canonicalText =\n readOptionalString(value.canonicalText) ?? readOptionalString(value.belief);\n const status = readOptionalString(value.status);\n if (!(id && canonicalText && status)) {\n return null;\n }\n return {\n _id: id,\n canonicalText,\n criticality: readOptionalString(value.criticality) ?? null,\n status,\n };\n}\n\nfunction readEvidenceLink(value: unknown): EvidenceLink | null {\n if (!isRecord(value)) {\n return null;\n }\n const insightId = readConvexId<\"epistemicNodes\">(value.insightId);\n if (\n !insightId ||\n (value.relation !== \"supports\" && value.relation !== \"contradicts\")\n ) {\n return null;\n }\n return {\n insightId,\n relation: value.relation,\n };\n}\n\nfunction readContradictionRow(value: unknown): ContradictionRow | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = readConvexId<\"contradictions\">(value._id);\n const beliefId = readConvexId<\"epistemicNodes\">(value.beliefId);\n const severity = readContradictionSeverity(value.severity);\n const status = readContradictionStatus(value.status);\n if (!(id && beliefId && severity && status)) {\n return null;\n }\n return {\n _id: id,\n aiAnalysis: readAiAnalysis(value.aiAnalysis),\n beliefBId: readConvexId<\"epistemicNodes\">(value.beliefBId),\n beliefId,\n contradictingInsightIds: readIdArray<\"epistemicNodes\">(\n value.contradictingInsightIds\n ),\n createdBy: readOptionalString(value.createdBy),\n description: readOptionalString(value.description) ?? null,\n detectedAt: readOptionalNumber(value.detectedAt),\n detectionMethod: readOptionalString(value.detectionMethod) ?? null,\n projectId: readOptionalString(value.projectId) ?? null,\n resolution: value.resolution,\n resolutionSprintId: readOptionalString(value.resolutionSprintId) ?? null,\n resolvedAt: readOptionalNumber(value.resolvedAt) ?? null,\n severity,\n source: readContradictionSource(value.source),\n status,\n supportingInsightIds: readIdArray<\"epistemicNodes\">(\n value.supportingInsightIds\n ),\n topicId:\n readOptionalString(value.topicId) ??\n readOptionalString(value.projectId) ??\n \"\",\n };\n}\n\nfunction readRowList<T>(\n values: readonly unknown[],\n reader: (value: unknown) => T | null\n): T[] {\n return values.flatMap((value) => {\n const row = reader(value);\n return row ? [row] : [];\n });\n}\n\nfunction getContradictionSeverity(\n criticality: string | null | undefined\n): ContradictionSeverity {\n if (criticality === \"blocking\") {\n return \"critical\";\n }\n if (criticality === \"supporting\") {\n return \"minor\";\n }\n return \"significant\";\n}\n\nfunction extractContradictionEvidence(\n evidenceLinks: EvidenceLink[]\n): ContradictionEvidence {\n const supportingInsightIds: Id<\"epistemicNodes\">[] = [];\n const contradictingInsightIds: Id<\"epistemicNodes\">[] = [];\n\n for (const link of evidenceLinks) {\n if (link.relation === \"supports\") {\n supportingInsightIds.push(link.insightId);\n continue;\n }\n if (link.relation === \"contradicts\") {\n contradictingInsightIds.push(link.insightId);\n }\n }\n\n return { supportingInsightIds, contradictingInsightIds };\n}\n\nfunction getNewEvidenceIds(\n existingIds: Id<\"epistemicNodes\">[],\n latestIds: Id<\"epistemicNodes\">[]\n): Id<\"epistemicNodes\">[] {\n const existing = new Set(existingIds);\n return latestIds.filter((id) => !existing.has(id));\n}\n\nfunction contradictionSourceOf(\n contradiction: { source?: unknown } | null | undefined\n): ContradictionSource {\n return contradiction?.source === TUPLE_SPACE_CONTRADICTION_SOURCE\n ? TUPLE_SPACE_CONTRADICTION_SOURCE\n : DEFAULT_CONTRADICTION_SOURCE;\n}\n\n// =============================================================================\n// QUERIES\n// =============================================================================\n\n/**\n * Detect contradictions for a project\n * Finds beliefs that have both supporting AND contradicting evidence\n */\nexport const detectContradictions = query({\n args: {\n ...scopeArgs,\n includeResolved: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (\n ctx: QueryCtx,\n args: { includeResolved?: boolean; projectId?: string; topicId?: string }\n ) => {\n const scope = await resolveScopeSoft(ctx, args);\n const projectId = scope.projectId;\n if (!projectId) {\n return []; // graceful: scope resolver guarantees projectId\n }\n\n // Get all beliefs from epistemic spine\n const beliefs = readRowList(\n await ctx.runQuery<unknown[]>(\n internal.epistemicBeliefs.internalGetByProject,\n {\n projectId,\n }\n ),\n readBeliefRecord\n );\n\n // Get all belief-evidence links\n const contradictionCandidates: Array<{\n beliefId: Id<\"epistemicNodes\">;\n belief: BeliefRecord;\n supportingInsights: BeliefRecord[];\n contradictingInsights: BeliefRecord[];\n existingContradiction?: ContradictionRow;\n }> = [];\n\n for (const belief of beliefs) {\n // Get evidence links for this belief\n const evidenceLinks = readRowList(\n await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexQueryBuilder) =>\n q.eq(\"beliefId\", belief._id)\n )\n .collect(),\n readEvidenceLink\n );\n\n const supportingLinks = evidenceLinks.filter(\n (l) => l.relation === \"supports\"\n );\n const contradictingLinks = evidenceLinks.filter(\n (l) => l.relation === \"contradicts\"\n );\n\n // Only flag as contradiction if BOTH supporting AND contradicting evidence exists\n if (supportingLinks.length > 0 && contradictingLinks.length > 0) {\n // Fetch the actual insights\n const supportingInsights = await Promise.all(\n supportingLinks.map((l) => ctx.db.get(l.insightId))\n );\n const contradictingInsights = await Promise.all(\n contradictingLinks.map((l) => ctx.db.get(l.insightId))\n );\n\n // Check if there's already a tracked contradiction\n const existingContradictions = readRowList(\n await ctx.db\n .query(\"contradictions\")\n .withIndex(\"by_beliefId\", (q: IndexQueryBuilder) =>\n q.eq(\"beliefId\", belief._id)\n )\n .collect(),\n readContradictionRow\n );\n const existingContradiction = existingContradictions.find(\n (candidate) =>\n contradictionSourceOf(candidate) === DEFAULT_CONTRADICTION_SOURCE\n );\n\n // Skip resolved contradictions unless explicitly requested\n if (\n existingContradiction &&\n !args.includeResolved &&\n existingContradiction.status !== \"unresolved\" &&\n existingContradiction.status !== \"investigating\"\n ) {\n continue;\n }\n\n contradictionCandidates.push({\n beliefId: belief._id,\n belief,\n supportingInsights: readRowList(supportingInsights, readBeliefRecord),\n contradictingInsights: readRowList(\n contradictingInsights,\n readBeliefRecord\n ),\n existingContradiction: existingContradiction ?? undefined,\n });\n }\n }\n\n return contradictionCandidates;\n },\n});\n\n/**\n * Get all tracked contradictions for a project\n */\nexport const getByProject = query({\n args: {\n ...scopeArgs,\n userId: v.string(),\n status: v.optional(\n v.union(\n v.literal(\"unresolved\"),\n v.literal(\"investigating\"),\n v.literal(\"resolved_support\"),\n v.literal(\"resolved_contra\"),\n v.literal(\"belief_forked\")\n )\n ),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (\n ctx: QueryCtx,\n args: {\n projectId?: string;\n topicId?: string;\n userId: string;\n status?:\n | \"unresolved\"\n | \"investigating\"\n | \"resolved_support\"\n | \"resolved_contra\"\n | \"belief_forked\";\n limit?: number;\n }\n ) => {\n const scope = await resolveScopeSoft(ctx, args);\n const projectId = scope.projectId;\n if (!projectId) {\n return []; // graceful: scope resolver guarantees projectId\n }\n\n const hasAccess = await checkProjectAccess(ctx, projectId, args.userId);\n if (!hasAccess) {\n return [];\n }\n const pageSize = Math.max(1, Math.min(Math.floor(args.limit ?? 200), 1000));\n const scanLimit = Math.min(pageSize * 3, 1000);\n\n let contradictions: ContradictionRow[];\n\n if (args.status) {\n const status = args.status; // Capture in local variable for type narrowing\n contradictions = readRowList(\n await ctx.db\n .query(\"contradictions\")\n .withIndex(\"by_topic_status\", (q: IndexQueryBuilder) =>\n q.eq(\"topicId\", String(scope.topicId)).eq(\"status\", status)\n )\n .order(\"desc\")\n .take(scanLimit),\n readContradictionRow\n );\n } else {\n contradictions = readRowList(\n await ctx.db\n .query(\"contradictions\")\n .withIndex(\"by_topicId\", (q: IndexQueryBuilder) =>\n q.eq(\"topicId\", String(scope.topicId))\n )\n .order(\"desc\")\n .take(scanLimit),\n readContradictionRow\n );\n }\n\n // Enrich with belief and insight data\n const enriched = await Promise.all(\n contradictions.slice(0, pageSize).map(async (c: ContradictionRow) => {\n const belief = await ctx.db.get(c.beliefId);\n const supportingInsights = await Promise.all(\n c.supportingInsightIds.map((id) => ctx.db.get(id))\n );\n const contradictingInsights = await Promise.all(\n c.contradictingInsightIds.map((id) => ctx.db.get(id))\n );\n\n return {\n ...c,\n belief,\n supportingInsights: supportingInsights.filter(Boolean),\n contradictingInsights: contradictingInsights.filter(Boolean),\n };\n })\n );\n\n return enriched;\n },\n});\n\n/**\n * Get unresolved contradiction count for dashboard\n */\nexport const getUnresolvedCount = query({\n args: {\n ...scopeArgs,\n },\n returns: permissiveReturn,\n handler: async (\n ctx: QueryCtx,\n args: { projectId?: string; topicId?: string }\n ) => {\n const scope = await resolveScopeSoft(ctx, args);\n const projectId = scope.projectId;\n if (!projectId) {\n return {\n total: 0,\n critical: 0,\n significant: 0,\n minor: 0,\n };\n }\n\n const contradictions = readRowList(\n await ctx.db\n .query(\"contradictions\")\n .withIndex(\"by_topic_status\", (q: IndexQueryBuilder) =>\n q.eq(\"topicId\", String(scope.topicId)).eq(\"status\", \"unresolved\")\n )\n .collect(),\n readContradictionRow\n );\n\n const critical = contradictions.filter(\n (c) => c.severity === \"critical\"\n ).length;\n const significant = contradictions.filter(\n (c) => c.severity === \"significant\"\n ).length;\n const minor = contradictions.filter((c) => c.severity === \"minor\").length;\n\n return {\n total: contradictions.length,\n critical,\n significant,\n minor,\n };\n },\n});\n\n/**\n * Get a single contradiction with full context\n */\nexport const getById = query({\n args: { contradictionId: v.id(\"contradictions\") },\n returns: permissiveReturn,\n handler: async (\n ctx: QueryCtx,\n args: { contradictionId: Id<\"contradictions\"> }\n ) => {\n const contradiction = readContradictionRow(\n await ctx.db.get(args.contradictionId)\n );\n if (!contradiction) {\n return null;\n }\n\n const belief = await ctx.db.get(contradiction.beliefId);\n const supportingInsights = await Promise.all(\n contradiction.supportingInsightIds.map((id) => ctx.db.get(id))\n );\n const contradictingInsights = await Promise.all(\n contradiction.contradictingInsightIds.map((id) => ctx.db.get(id))\n );\n\n return {\n ...contradiction,\n belief,\n supportingInsights: supportingInsights.filter(Boolean),\n contradictingInsights: contradictingInsights.filter(Boolean),\n resolutionSprintId: contradiction.resolutionSprintId ?? null,\n };\n },\n});\n\n// =============================================================================\n// MUTATIONS\n// =============================================================================\n\n/**\n * Track a new contradiction\n */\nexport const create = mutation({\n args: {\n ...scopeArgs,\n beliefId: v.id(\"epistemicNodes\"),\n beliefBId: v.optional(v.id(\"epistemicNodes\")),\n supportingInsightIds: v.array(v.id(\"epistemicNodes\")),\n contradictingInsightIds: v.array(v.id(\"epistemicNodes\")),\n severity: v.union(\n v.literal(\"critical\"),\n v.literal(\"significant\"),\n v.literal(\"minor\")\n ),\n source: v.optional(\n v.union(v.literal(\"evidence_links\"), v.literal(\"tuple_space\"))\n ),\n description: v.optional(v.string()),\n detectionMethod: v.optional(\n v.union(\n v.literal(\"semantic\"),\n v.literal(\"keyword\"),\n v.literal(\"manual\"),\n v.literal(\"agent\")\n )\n ),\n aiAnalysis: v.optional(\n v.object({\n summary: v.string(),\n likelyExplanation: v.string(),\n suggestedResolution: v.string(),\n confidenceInAnalysis: v.number(),\n analyzedAt: v.number(),\n })\n ),\n createdBy: v.string(),\n },\n returns: permissiveReturn,\n handler: async (\n ctx: MutationCtx,\n args: {\n projectId?: string;\n topicId?: string;\n beliefId: Id<\"epistemicNodes\">;\n beliefBId?: Id<\"epistemicNodes\">;\n supportingInsightIds: Id<\"epistemicNodes\">[];\n contradictingInsightIds: Id<\"epistemicNodes\">[];\n severity: ContradictionSeverity;\n source?: ContradictionSource;\n description?: string;\n detectionMethod?: string;\n aiAnalysis?: {\n summary: string;\n likelyExplanation: string;\n suggestedResolution: string;\n confidenceInAnalysis: number;\n analyzedAt: number;\n } | null;\n createdBy: string;\n }\n ) => {\n const scope = await resolveScopeSoft(ctx, args);\n const projectId = scope.projectId;\n if (!projectId) {\n return {\n created: 0,\n updated: 0,\n };\n }\n\n const now = Date.now();\n const source = args.source ?? DEFAULT_CONTRADICTION_SOURCE;\n\n // Evidence-link contradictions preserve the current \"merge evidence into the\n // active record\" behavior. Tuple-space contradictions are append-only and\n // should create a fresh record on each threshold crossing.\n const existingRows = readRowList(\n await ctx.db\n .query(\"contradictions\")\n .withIndex(\"by_beliefId\", (q: IndexQueryBuilder) =>\n q.eq(\"beliefId\", args.beliefId)\n )\n .collect(),\n readContradictionRow\n );\n const existing = existingRows.find(\n (row) =>\n contradictionSourceOf(row) === source &&\n (args.beliefBId\n ? String(row.beliefBId ?? \"\") === String(args.beliefBId)\n : true)\n );\n\n if (existing && source !== TUPLE_SPACE_CONTRADICTION_SOURCE) {\n // Update existing contradiction with new evidence\n await ctx.db.patch(existing._id, {\n supportingInsightIds: [\n ...new Set([\n ...existing.supportingInsightIds,\n ...args.supportingInsightIds,\n ]),\n ],\n contradictingInsightIds: [\n ...new Set([\n ...existing.contradictingInsightIds,\n ...args.contradictingInsightIds,\n ]),\n ],\n severity: args.severity,\n description: args.description ?? existing.description,\n detectionMethod: args.detectionMethod ?? existing.detectionMethod,\n aiAnalysis: args.aiAnalysis,\n });\n return existing._id;\n }\n\n // Create new contradiction\n return await ctx.db.insert(\"contradictions\", {\n projectId,\n topicId: String(scope.topicId),\n beliefId: args.beliefId,\n ...(args.beliefBId ? { beliefBId: args.beliefBId } : {}),\n supportingInsightIds: args.supportingInsightIds,\n contradictingInsightIds: args.contradictingInsightIds,\n source,\n ...(args.description ? { description: args.description } : {}),\n ...(args.detectionMethod\n ? { detectionMethod: args.detectionMethod }\n : {}),\n resolutionStatus: \"unresolved\", // Lucern: required field\n status: \"unresolved\", // Legacy: kept for backward compat\n severity: args.severity,\n aiAnalysis: args.aiAnalysis,\n detectedAt: now,\n createdBy: args.createdBy,\n });\n },\n});\n\n/**\n * Update contradiction status\n *\n * INVARIANT #14 ENFORCEMENT: All state transitions logged to epistemicAudit\n */\nexport const updateStatus = mutation({\n args: {\n contradictionId: v.id(\"contradictions\"),\n status: v.union(\n v.literal(\"unresolved\"),\n v.literal(\"investigating\"),\n v.literal(\"resolved_support\"),\n v.literal(\"resolved_contra\"),\n v.literal(\"belief_forked\")\n ),\n resolutionSprintId: v.optional(v.string()),\n userId: v.optional(v.string()), // Added for audit trail\n },\n returns: permissiveReturn,\n handler: async (\n ctx: MutationCtx,\n args: {\n contradictionId: Id<\"contradictions\">;\n status: ContradictionStatus;\n resolutionSprintId?: string;\n userId?: string;\n }\n ) => {\n const existing = readContradictionRow(\n await ctx.db.get(args.contradictionId)\n );\n if (!existing) {\n throw new Error(\"Contradiction not found\");\n }\n\n // Access control\n if (existing.projectId && args.userId) {\n await requireScopeWriteAccess(ctx, existing.projectId, args.userId);\n }\n\n const now = Date.now();\n const update: Record<string, unknown> = { status: args.status };\n\n if (args.resolutionSprintId) {\n update.resolutionSprintId = args.resolutionSprintId;\n }\n\n if (\n args.status.startsWith(\"resolved_\") ||\n args.status === \"belief_forked\"\n ) {\n update.resolvedAt = now;\n }\n\n await ctx.db.patch(args.contradictionId, update);\n\n // ============================================================\n // INVARIANT #14: No silent state transitions\n // Log all status changes to epistemicAudit\n // ============================================================\n if (existing.status !== args.status) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"contradiction\",\n entityId: args.contradictionId as unknown as string,\n changeType: \"status_changed\",\n changedAt: now,\n changedBy: args.userId ?? \"system\",\n isAgent: !args.userId,\n previousState: { status: existing.status },\n newState: {\n status: args.status,\n resolutionSprintId: args.resolutionSprintId,\n },\n rationale: `Contradiction status changed from ${existing.status} to ${args.status}`,\n projectId: existing.projectId,\n });\n }\n\n return { success: true };\n },\n});\n\n/**\n * Resolve a contradiction with findings\n *\n * INVARIANT #14 ENFORCEMENT: All state transitions logged to epistemicAudit\n */\nexport const resolve = mutation({\n args: {\n contradictionId: v.id(\"contradictions\"),\n verdict: v.string(),\n reasoning: v.string(),\n beliefUpdate: v.string(),\n resolvedBy: v.string(),\n newStatus: v.union(\n v.literal(\"resolved_support\"),\n v.literal(\"resolved_contra\"),\n v.literal(\"belief_forked\")\n ),\n },\n returns: permissiveReturn,\n handler: async (\n ctx: MutationCtx,\n args: {\n contradictionId: Id<\"contradictions\">;\n verdict: string;\n reasoning: string;\n beliefUpdate: string;\n resolvedBy: string;\n newStatus: Exclude<ContradictionStatus, \"unresolved\" | \"investigating\">;\n }\n ) => {\n const existing = readContradictionRow(\n await ctx.db.get(args.contradictionId)\n );\n if (!existing) {\n throw new Error(\"Contradiction not found\");\n }\n\n // Access control\n if (existing.projectId) {\n await requireScopeWriteAccess(ctx, existing.projectId, args.resolvedBy);\n }\n\n const now = Date.now();\n\n await ctx.db.patch(args.contradictionId, {\n status: args.newStatus,\n resolution: {\n verdict: args.verdict,\n reasoning: args.reasoning,\n beliefUpdate: args.beliefUpdate,\n resolvedBy: args.resolvedBy,\n },\n resolvedAt: now,\n });\n\n // ============================================================\n // INVARIANT #14: No silent state transitions\n // Log resolution to epistemicAudit with full context\n // ============================================================\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"contradiction\",\n entityId: args.contradictionId as unknown as string,\n changeType: \"resolved\",\n changedAt: now,\n changedBy: args.resolvedBy,\n isAgent: false,\n previousState: { status: existing.status },\n newState: {\n status: args.newStatus,\n verdict: args.verdict,\n beliefUpdate: args.beliefUpdate,\n },\n rationale: `Contradiction resolved: ${args.verdict}. Reasoning: ${args.reasoning}`,\n projectId: existing.projectId,\n });\n\n // Flywheel: After resolution, re-scan the affected belief neighborhood\n // Resolution may shift confidence, revealing new contradictions\n await ctx.scheduler.runAfter(\n 5000, // 5s delay\n internal.bi.contradictionSemanticDetector.scanAffectedBeliefs,\n {\n beliefId: existing.beliefId as string,\n projectId: existing.projectId,\n }\n );\n\n return { success: true };\n },\n});\n\n/**\n * Update severity assessment\n *\n * INVARIANT #14 ENFORCEMENT: All state transitions logged to epistemicAudit\n */\nexport const updateSeverity = mutation({\n args: {\n contradictionId: v.id(\"contradictions\"),\n severity: v.union(\n v.literal(\"critical\"),\n v.literal(\"significant\"),\n v.literal(\"minor\")\n ),\n userId: v.optional(v.string()), // Added for audit trail\n },\n returns: permissiveReturn,\n handler: async (\n ctx: MutationCtx,\n args: {\n contradictionId: Id<\"contradictions\">;\n severity: ContradictionSeverity;\n userId?: string;\n }\n ) => {\n const existing = readContradictionRow(\n await ctx.db.get(args.contradictionId)\n );\n if (!existing) {\n throw new Error(\"Contradiction not found\");\n }\n\n const now = Date.now();\n await ctx.db.patch(args.contradictionId, { severity: args.severity });\n\n // ============================================================\n // INVARIANT #14: No silent state transitions\n // Log severity changes to epistemicAudit\n // ============================================================\n if (existing.severity !== args.severity) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"contradiction\",\n entityId: args.contradictionId as unknown as string,\n changeType: \"severity_changed\",\n changedAt: now,\n changedBy: args.userId ?? \"system\",\n isAgent: !args.userId,\n previousState: { severity: existing.severity },\n newState: { severity: args.severity },\n rationale: `Contradiction severity changed from ${existing.severity} to ${args.severity}`,\n projectId: existing.projectId,\n });\n }\n\n return { success: true };\n },\n});\n\n/**\n * Add AI analysis to a contradiction\n */\nexport const addAiAnalysis = mutation({\n args: {\n contradictionId: v.id(\"contradictions\"),\n summary: v.string(),\n likelyExplanation: v.string(),\n suggestedResolution: v.string(),\n confidenceInAnalysis: v.number(),\n },\n returns: permissiveReturn,\n handler: async (\n ctx: MutationCtx,\n args: {\n contradictionId: Id<\"contradictions\">;\n summary: string;\n likelyExplanation: string;\n suggestedResolution: string;\n confidenceInAnalysis: number;\n }\n ) => {\n await ctx.db.patch(args.contradictionId, {\n aiAnalysis: {\n summary: args.summary,\n likelyExplanation: args.likelyExplanation,\n suggestedResolution: args.suggestedResolution,\n confidenceInAnalysis: args.confidenceInAnalysis,\n analyzedAt: Date.now(),\n },\n });\n return { success: true };\n },\n});\n\n/**\n * Scan project and auto-create contradictions for any beliefs with conflicting evidence\n * Called by cron job or manually\n */\nexport const scanAndCreateContradictions = mutation({\n args: {\n ...scopeArgs,\n createdBy: v.string(),\n },\n returns: permissiveReturn,\n handler: async (\n ctx: MutationCtx,\n args: { projectId?: string; topicId?: string; createdBy: string }\n ) => {\n const scope = await resolveScopeSoft(ctx, args);\n const projectId = scope.projectId;\n if (!projectId) {\n return { created: 0, updated: 0 }; // graceful: scope resolver guarantees projectId\n }\n\n const now = Date.now();\n\n // Get all beliefs from epistemic spine\n const beliefs = readRowList(\n await ctx.runQuery<unknown[]>(\n internal.epistemicBeliefs.internalGetByProject,\n {\n projectId,\n }\n ),\n readBeliefRecord\n );\n\n let created = 0;\n let updated = 0;\n\n for (const belief of beliefs) {\n // Get evidence links for this belief\n const evidenceLinks = readRowList(\n await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexQueryBuilder) =>\n q.eq(\"beliefId\", belief._id)\n )\n .collect(),\n readEvidenceLink\n );\n\n const { supportingInsightIds, contradictingInsightIds } =\n extractContradictionEvidence(evidenceLinks);\n\n // Only create contradiction if BOTH sides have evidence\n if (\n supportingInsightIds.length === 0 ||\n contradictingInsightIds.length === 0\n ) {\n continue;\n }\n\n // Check if contradiction already exists\n const existingRows = readRowList(\n await ctx.db\n .query(\"contradictions\")\n .withIndex(\"by_beliefId\", (q: IndexQueryBuilder) =>\n q.eq(\"beliefId\", belief._id)\n )\n .collect(),\n readContradictionRow\n );\n const existing = existingRows.find(\n (candidate) =>\n contradictionSourceOf(candidate) === DEFAULT_CONTRADICTION_SOURCE\n );\n\n const severity = getContradictionSeverity(belief.criticality);\n\n if (!existing) {\n await ctx.db.insert(\"contradictions\", {\n projectId,\n topicId: String(scope.topicId),\n beliefId: belief._id,\n supportingInsightIds,\n contradictingInsightIds,\n source: DEFAULT_CONTRADICTION_SOURCE,\n resolutionStatus: \"unresolved\", // Lucern: required field\n status: \"unresolved\", // Legacy: kept for backward compat\n severity,\n detectedAt: now,\n createdBy: args.createdBy,\n });\n created++;\n continue;\n }\n\n const newSupporting = getNewEvidenceIds(\n existing.supportingInsightIds,\n supportingInsightIds\n );\n const newContradicting = getNewEvidenceIds(\n existing.contradictingInsightIds,\n contradictingInsightIds\n );\n\n if (newSupporting.length === 0 && newContradicting.length === 0) {\n continue;\n }\n\n await ctx.db.patch(existing._id, {\n supportingInsightIds: [\n ...existing.supportingInsightIds,\n ...newSupporting,\n ],\n contradictingInsightIds: [\n ...existing.contradictingInsightIds,\n ...newContradicting,\n ],\n severity,\n });\n updated++;\n }\n\n return { created, updated };\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public ABI surface; rename requires a cross-package migration update.\n/**\n * Entity↔Belief Bridge (OE-B)\n *\n * Query and mutation helpers for traversing entity↔belief connections\n * via the epistemic edge graph. Entities (ontological layer) connect to\n * beliefs/questions/themes (L3) and evidence (L2) through typed bridge edges.\n *\n * Bridge edge types:\n * - contains: Belief/Question/Theme → Entity (L3 → ontological), also Entity → Evidence (ontological → L2)\n * - evaluates: Deal → Company (L3 → ontological)\n * - perspective_on: Person → Belief/Theme (ontological → L3)\n * - impacts: Theme → ValueChain (L3 → ontological)\n * - mentioned_in: Entity → Source (ontological → L1)\n *\n * @module graph-primitives/entityBridge\n */\n\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { generateUuidV7 } from \"@lucern/contracts/ids\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal, mutation, query } from \"./convex\";\nimport { validateEdgeLayers } from \"./edgeValidation\";\nimport { getNodeLayer } from \"./graphTypes\";\nimport { readMaterializedTopicTableId } from \"./topicScope\";\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\n/** Edge types that bridge ontological ↔ epistemic layers */\nconst ENTITY_BRIDGE_EDGE_TYPES = [\n \"contains\",\n \"evaluates\",\n \"perspective_on\",\n \"impacts\",\n \"mentioned_in\",\n] as const;\n\n/** Edge types that connect ontological ↔ ontological */\nconst _ONTOLOGICAL_EDGE_TYPES = [\n \"works_at\",\n \"participates_in\",\n \"performs\",\n \"function_in\",\n \"invested_in\",\n \"raised_from\",\n \"founded_by\",\n \"competes_with\",\n \"contains\",\n \"derived_from\",\n] as const;\n\ninterface BridgeEdge {\n context?: string;\n edgeType: string;\n fromNodeId?: Id<\"epistemicNodes\">;\n toNodeId?: Id<\"epistemicNodes\">;\n weight?: number;\n}\n\ninterface IndexQuery {\n eq(field: string, value: unknown): IndexQuery;\n}\n\nconst ENTITY_BRIDGE_EDGE_TYPE_SET = new Set<string>(ENTITY_BRIDGE_EDGE_TYPES);\n\ninterface TopicScopeNode {\n _id: Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n projectId?: string;\n status?: string;\n topicId?: string;\n}\n\ninterface BridgeNode extends TopicScopeNode {\n canonicalText?: string;\n epistemicLayer?: string;\n globalId?: string;\n nodeType?: string;\n title?: string;\n [fieldName: string]: unknown;\n}\n\ninterface EntityBeliefEdgeDirection {\n edgeFromLayer: string;\n edgeToLayer: string;\n fromGlobalId: string;\n fromNodeId: Id<\"epistemicNodes\">;\n fromNodeType: string;\n toGlobalId: string;\n toNodeId: Id<\"epistemicNodes\">;\n toNodeType: string;\n}\n\ninterface GetBeliefsForEntityArgs {\n edgeTypes?: string[];\n entityNodeId: Id<\"epistemicNodes\">;\n}\n\ninterface GetEntitiesForBeliefArgs {\n beliefNodeId: Id<\"epistemicNodes\">;\n edgeTypes?: string[];\n}\n\ninterface GetEntityTopicScopeArgs {\n entityNodeId: Id<\"epistemicNodes\">;\n}\n\ninterface GetEvidenceForEntityArgs {\n entityNodeId: Id<\"epistemicNodes\">;\n limit?: number;\n}\n\ninterface LinkEntityToBeliefArgs {\n beliefNodeId: Id<\"epistemicNodes\">;\n context?: string;\n edgeType?: string;\n entityNodeId: Id<\"epistemicNodes\">;\n weight?: number;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? (value as Id<TableName>)\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 readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nfunction readBridgeEdge(value: unknown): BridgeEdge | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const edgeType = readOptionalString(value.edgeType);\n if (!edgeType) {\n return null;\n }\n\n const edge: BridgeEdge = { edgeType };\n const context = readOptionalString(value.context);\n const fromNodeId = readConvexId<\"epistemicNodes\">(value.fromNodeId);\n const toNodeId = readConvexId<\"epistemicNodes\">(value.toNodeId);\n const weight = readOptionalNumber(value.weight);\n\n if (context !== undefined) {\n edge.context = context;\n }\n if (fromNodeId !== undefined) {\n edge.fromNodeId = fromNodeId;\n }\n if (toNodeId !== undefined) {\n edge.toNodeId = toNodeId;\n }\n if (weight !== undefined) {\n edge.weight = weight;\n }\n\n return edge;\n}\n\nfunction readBridgeNode(value: unknown): BridgeNode | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(value._id);\n if (!id) {\n return null;\n }\n\n const node: BridgeNode = { ...value, _id: id };\n const canonicalText = readOptionalString(value.canonicalText);\n const epistemicLayer = readOptionalString(value.epistemicLayer);\n const globalId = readOptionalString(value.globalId);\n const metadata = readRecord(value.metadata);\n const nodeType = readOptionalString(value.nodeType);\n const projectId = readOptionalString(value.projectId);\n const status = readOptionalString(value.status);\n const title = readOptionalString(value.title);\n const topicId = readOptionalString(value.topicId);\n\n if (canonicalText !== undefined) {\n node.canonicalText = canonicalText;\n }\n if (epistemicLayer !== undefined) {\n node.epistemicLayer = epistemicLayer;\n }\n if (globalId !== undefined) {\n node.globalId = globalId;\n }\n if (metadata !== undefined) {\n node.metadata = metadata;\n }\n if (nodeType !== undefined) {\n node.nodeType = nodeType;\n }\n if (projectId !== undefined) {\n node.projectId = projectId;\n }\n if (status !== undefined) {\n node.status = status;\n }\n if (title !== undefined) {\n node.title = title;\n }\n if (topicId !== undefined) {\n node.topicId = topicId;\n }\n\n return node;\n}\n\nfunction readRowList<T>(\n values: readonly unknown[],\n reader: (value: unknown) => T | null\n): T[] {\n return values.flatMap((value) => {\n const row = reader(value);\n return row ? [row] : [];\n });\n}\n\nfunction readTopicScopeNode(value: unknown): TopicScopeNode | null {\n return readBridgeNode(value);\n}\n\nfunction isEntityScopeBridgeEdge(edgeType: string | undefined): boolean {\n if (!edgeType) {\n return false;\n }\n return ENTITY_BRIDGE_EDGE_TYPE_SET.has(edgeType);\n}\n\nasync function queryEdgesByTarget(\n ctx: QueryCtx,\n nodeId: Id<\"epistemicNodes\">\n): Promise<BridgeEdge[]> {\n return readRowList(\n await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q: IndexQuery) => q.eq(\"toNodeId\", nodeId))\n .collect(),\n readBridgeEdge\n );\n}\n\nasync function queryEdgesBySource(\n ctx: QueryCtx,\n nodeId: Id<\"epistemicNodes\">\n): Promise<BridgeEdge[]> {\n return readRowList(\n await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from\", (q: IndexQuery) => q.eq(\"fromNodeId\", nodeId))\n .collect(),\n readBridgeEdge\n );\n}\n\nasync function readNodeById(\n ctx: QueryCtx,\n nodeId: Id<\"epistemicNodes\">\n): Promise<BridgeNode | null> {\n return readBridgeNode(await ctx.db.get(nodeId));\n}\n\nasync function readNodeByIdForMutation(\n ctx: MutationCtx,\n nodeId: Id<\"epistemicNodes\">\n): Promise<BridgeNode | null> {\n return readBridgeNode(await ctx.db.get(nodeId));\n}\n\nfunction collectConnectedEntityNodeIds(\n connectedNodeIds: Set<string>,\n edges: BridgeEdge[],\n mapFromInbound: boolean\n) {\n for (const edge of edges) {\n if (!isEntityScopeBridgeEdge(edge.edgeType)) {\n continue;\n }\n const nextId = mapFromInbound ? edge.fromNodeId : edge.toNodeId;\n if (!nextId) {\n continue;\n }\n connectedNodeIds.add(String(nextId));\n }\n}\n\nasync function collectEntityTopicContextIds(\n ctx: QueryCtx,\n connectedNodeIds: Set<string>\n): Promise<{ projectIds: Set<string>; topicIds: Set<string> }> {\n const topicIds = new Set<string>();\n const projectIds = new Set<string>();\n\n for (const nodeId of connectedNodeIds) {\n const node = readTopicScopeNode(\n await ctx.db.get(nodeId as Id<\"epistemicNodes\">)\n );\n if (node?.status !== \"active\") {\n continue;\n }\n if (node.projectId) {\n projectIds.add(String(node.projectId));\n }\n if (node.topicId) {\n topicIds.add(String(node.topicId));\n }\n }\n\n return { topicIds, projectIds };\n}\n\nasync function collectScopedTopicIdsFromConnectedNodes(\n ctx: QueryCtx,\n connectedNodeIds: Set<string>\n): Promise<string[]> {\n const scopedTopicIds = await Promise.all(\n [...connectedNodeIds].map(async (nodeId) => {\n const scopeEdges = await queryEdgesBySource(\n ctx,\n nodeId as Id<\"epistemicNodes\">\n );\n const mappedTopicIds = scopeEdges.map(async (edge) => {\n if (edge.edgeType !== \"contains\" || !edge.toNodeId) {\n return;\n }\n const scopedTopicNode = readTopicScopeNode(\n await ctx.db.get(edge.toNodeId)\n );\n const canonicalTopicId = readMaterializedTopicTableId(scopedTopicNode);\n if (!canonicalTopicId) {\n return;\n }\n return String(canonicalTopicId);\n });\n return Promise.all(mappedTopicIds);\n })\n );\n\n return scopedTopicIds\n .flat()\n .filter((topicId): topicId is string => Boolean(topicId));\n}\n\nfunction buildEntityBeliefEdgeDirection(\n args: {\n edgeType?: string;\n entityNodeId: Id<\"epistemicNodes\">;\n beliefNodeId: Id<\"epistemicNodes\">;\n },\n entity: { nodeType: string; globalId: string; epistemicLayer: string },\n belief: { nodeType: string; globalId: string }\n): EntityBeliefEdgeDirection {\n const { edgeType, entityNodeId, beliefNodeId } = args;\n const effectiveEdgeType = edgeType || \"contains\";\n const entityLayer = getNodeLayer(entity.nodeType);\n const beliefLayer = getNodeLayer(belief.nodeType);\n\n if (\n effectiveEdgeType === \"contains\" &&\n entity.epistemicLayer === \"ontological\"\n ) {\n return {\n fromNodeId: beliefNodeId,\n toNodeId: entityNodeId,\n fromGlobalId: belief.globalId,\n toGlobalId: entity.globalId,\n fromNodeType: belief.nodeType,\n toNodeType: entity.nodeType,\n edgeFromLayer: beliefLayer,\n edgeToLayer: \"ontological\",\n };\n }\n\n if (\n effectiveEdgeType === \"mentioned_in\" ||\n effectiveEdgeType === \"perspective_on\"\n ) {\n return {\n fromNodeId: entityNodeId,\n toNodeId: beliefNodeId,\n fromGlobalId: entity.globalId,\n toGlobalId: belief.globalId,\n fromNodeType: entity.nodeType,\n toNodeType: belief.nodeType,\n edgeFromLayer: \"ontological\",\n edgeToLayer: beliefLayer,\n };\n }\n\n const directValidation = validateEdgeLayers(\n effectiveEdgeType,\n entityLayer,\n beliefLayer\n );\n if (directValidation.valid) {\n return {\n fromNodeId: entityNodeId,\n toNodeId: beliefNodeId,\n fromGlobalId: entity.globalId,\n toGlobalId: belief.globalId,\n fromNodeType: entity.nodeType,\n toNodeType: belief.nodeType,\n edgeFromLayer: entityLayer,\n edgeToLayer: beliefLayer,\n };\n }\n\n const reversedValidation = validateEdgeLayers(\n effectiveEdgeType,\n beliefLayer,\n entityLayer\n );\n if (!reversedValidation.valid) {\n throw new Error(\n `Edge type '${effectiveEdgeType}' is not valid between ${entity.nodeType} (${entityLayer}) and ${belief.nodeType} (${beliefLayer}): ${directValidation.reason}`\n );\n }\n\n return {\n fromNodeId: beliefNodeId,\n toNodeId: entityNodeId,\n fromGlobalId: belief.globalId,\n toGlobalId: entity.globalId,\n fromNodeType: belief.nodeType,\n toNodeType: entity.nodeType,\n edgeFromLayer: beliefLayer,\n edgeToLayer: entityLayer,\n };\n}\n\n// =============================================================================\n// QUERIES\n// =============================================================================\n\n/**\n * Get all beliefs/questions/themes connected to an entity.\n * Traverses both directions:\n * - about_entity edges (L3 → entity): returns the L3 source nodes\n * - perspective_on edges (entity → L3): returns the L3 target nodes\n * - evaluates edges (L3 → entity): returns the L3 source nodes\n */\nexport const getBeliefsForEntity = query({\n args: {\n entityNodeId: v.id(\"epistemicNodes\"),\n edgeTypes: v.optional(v.array(v.string())),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetBeliefsForEntityArgs) => {\n const entity = await readNodeById(ctx, args.entityNodeId);\n if (entity?.epistemicLayer !== \"ontological\") {\n return { beliefs: [], entity: null };\n }\n\n const filterTypes = args.edgeTypes || [\n \"contains\",\n \"evaluates\",\n \"perspective_on\",\n \"impacts\",\n ];\n\n // Edges TO this entity (contains, evaluates, impacts)\n const inboundEdges = await queryEdgesByTarget(ctx, args.entityNodeId);\n\n // Edges FROM this entity (perspective_on)\n const outboundEdges = await queryEdgesBySource(ctx, args.entityNodeId);\n\n const beliefNodeIds = new Set<string>();\n const edgeMap: Record<\n string,\n { edgeType: string; weight?: number; context?: string }\n > = {};\n\n for (const edge of inboundEdges) {\n if (!(filterTypes.includes(edge.edgeType) && edge.fromNodeId)) {\n continue;\n }\n const id = String(edge.fromNodeId);\n beliefNodeIds.add(id);\n edgeMap[id] = {\n edgeType: edge.edgeType,\n weight: edge.weight ?? undefined,\n context: edge.context ?? undefined,\n };\n }\n\n for (const edge of outboundEdges) {\n const et = edge.edgeType;\n if (\n !(filterTypes.includes(et) && edge.toNodeId) ||\n et === \"mentioned_in\"\n ) {\n continue;\n }\n const id = String(edge.toNodeId);\n beliefNodeIds.add(id);\n edgeMap[id] = {\n edgeType: edge.edgeType,\n weight: edge.weight ?? undefined,\n context: edge.context ?? undefined,\n };\n }\n\n // Hydrate belief nodes\n const beliefs = await Promise.all(\n [...beliefNodeIds].map(async (nodeId) => {\n const node = await readNodeById(ctx, nodeId as Id<\"epistemicNodes\">);\n if (node?.status !== \"active\") {\n return null;\n }\n return {\n ...node,\n _edge: edgeMap[nodeId],\n };\n })\n );\n\n return {\n beliefs: beliefs.filter(Boolean),\n entity: {\n _id: entity._id,\n globalId: entity.globalId,\n nodeType: entity.nodeType,\n title: entity.title,\n metadata: entity.metadata,\n },\n };\n },\n});\n\n/**\n * Get all entities connected to a belief/question/theme.\n * Traverses both directions:\n * - about_entity edges (belief → entity): returns the entity target nodes\n * - perspective_on edges (entity → belief): returns the entity source nodes\n * - evaluates edges (deal → entity): returns the entity target nodes\n */\nexport const getEntitiesForBelief = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n edgeTypes: v.optional(v.array(v.string())),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetEntitiesForBeliefArgs) => {\n const belief = await readNodeById(ctx, args.beliefNodeId);\n if (!belief) {\n return { entities: [], belief: null };\n }\n\n const filterTypes = args.edgeTypes || [\n \"contains\",\n \"evaluates\",\n \"perspective_on\",\n \"impacts\",\n ];\n\n // Edges FROM this belief (contains, evaluates, impacts)\n const outboundEdges = await queryEdgesBySource(ctx, args.beliefNodeId);\n\n // Edges TO this belief (perspective_on)\n const inboundEdges = await queryEdgesByTarget(ctx, args.beliefNodeId);\n\n const entityNodeIds = new Set<string>();\n const edgeMap: Record<\n string,\n { edgeType: string; weight?: number; context?: string }\n > = {};\n\n for (const edge of outboundEdges) {\n if (!(filterTypes.includes(edge.edgeType) && edge.toNodeId)) {\n continue;\n }\n const id = String(edge.toNodeId);\n entityNodeIds.add(id);\n edgeMap[id] = {\n edgeType: edge.edgeType,\n weight: edge.weight ?? undefined,\n context: edge.context ?? undefined,\n };\n }\n\n for (const edge of inboundEdges) {\n if (!(filterTypes.includes(edge.edgeType) && edge.fromNodeId)) {\n continue;\n }\n const id = String(edge.fromNodeId);\n entityNodeIds.add(id);\n edgeMap[id] = {\n edgeType: edge.edgeType,\n weight: edge.weight ?? undefined,\n context: edge.context ?? undefined,\n };\n }\n\n // Hydrate entity nodes (filter to ontological only)\n const entities = await Promise.all(\n [...entityNodeIds].map(async (nodeId) => {\n const node = await readNodeById(ctx, nodeId as Id<\"epistemicNodes\">);\n if (\n node?.status !== \"active\" ||\n node.epistemicLayer !== \"ontological\"\n ) {\n return null;\n }\n return {\n ...node,\n _edge: edgeMap[nodeId],\n };\n })\n );\n\n return {\n entities: entities.filter(Boolean),\n belief: {\n _id: belief._id,\n globalId: belief.globalId,\n nodeType: belief.nodeType,\n title: belief.title,\n canonicalText: belief.canonicalText,\n },\n };\n },\n});\n\n/**\n * Get the topic scope for an entity by traversing its belief connections.\n * Entities don't have direct topic scope — they inherit it through their\n * connected beliefs/themes. This enables topic-based entity discovery.\n */\nexport const getEntityTopicScope = query({\n args: {\n entityNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetEntityTopicScopeArgs) => {\n const entity = await readNodeById(ctx, args.entityNodeId);\n if (entity?.epistemicLayer !== \"ontological\") {\n return { topics: [], projectIds: [] };\n }\n\n const [inboundEdges, outboundEdges] = await Promise.all([\n queryEdgesByTarget(ctx, args.entityNodeId),\n queryEdgesBySource(ctx, args.entityNodeId),\n ]);\n\n const connectedNodeIds = new Set<string>();\n collectConnectedEntityNodeIds(connectedNodeIds, inboundEdges, true);\n collectConnectedEntityNodeIds(connectedNodeIds, outboundEdges, false);\n\n const { topicIds, projectIds } = await collectEntityTopicContextIds(\n ctx,\n connectedNodeIds\n );\n const inferredTopicIds = await collectScopedTopicIdsFromConnectedNodes(\n ctx,\n connectedNodeIds\n );\n for (const topicId of inferredTopicIds) {\n topicIds.add(topicId);\n }\n\n return {\n topics: [...topicIds],\n projectIds: [...projectIds],\n connectedNodeCount: connectedNodeIds.size,\n };\n },\n});\n\n/**\n * Get evidence nodes that reference an entity.\n * Uses entity_referenced_in edges (ontological → L2).\n */\nexport const getEvidenceForEntity = query({\n args: {\n entityNodeId: v.id(\"epistemicNodes\"),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetEvidenceForEntityArgs) => {\n const entity = await readNodeById(ctx, args.entityNodeId);\n if (entity?.epistemicLayer !== \"ontological\") {\n return [];\n }\n\n const effectiveLimit = args.limit ?? 50;\n\n // contains: Entity → Evidence (outbound from entity)\n const outboundEdges = await queryEdgesBySource(ctx, args.entityNodeId);\n\n const evidenceEdges = outboundEdges.filter((e) => {\n const et = e.edgeType;\n return et === \"contains\" || et === \"mentioned_in\";\n });\n\n const results = await Promise.all(\n evidenceEdges.slice(0, effectiveLimit).map(async (edge) => {\n if (!edge.toNodeId) {\n return null;\n }\n const node = await readNodeById(ctx, edge.toNodeId);\n if (node?.status !== \"active\") {\n return null;\n }\n return {\n ...node,\n _edge: {\n edgeType: edge.edgeType,\n weight: edge.weight,\n context: edge.context,\n },\n };\n })\n );\n\n return results.filter(Boolean);\n },\n});\n\n// =============================================================================\n// MUTATIONS\n// =============================================================================\n\n/**\n * Link an entity to a belief/question/theme via about_entity edge.\n * Creates the edge through the Neo4j dual-write path.\n */\nexport const linkEntityToBelief = mutation({\n args: {\n entityNodeId: v.id(\"epistemicNodes\"),\n beliefNodeId: v.id(\"epistemicNodes\"),\n edgeType: v.optional(v.string()),\n weight: v.optional(v.number()),\n context: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: LinkEntityToBeliefArgs) => {\n const userId = await getCurrentUserId(ctx);\n if (!userId) {\n throw new Error(\"Authentication required to create entity-belief links.\");\n }\n\n const entity = await readNodeByIdForMutation(ctx, args.entityNodeId);\n if (entity?.epistemicLayer !== \"ontological\") {\n throw new Error(\"Source node must be an ontological entity.\");\n }\n\n const belief = await readNodeByIdForMutation(ctx, args.beliefNodeId);\n if (!belief) {\n throw new Error(\"Target belief/question/theme node not found.\");\n }\n if (!entity.globalId) {\n throw new Error(\"Source entity is missing a globalId.\");\n }\n if (!belief.globalId) {\n throw new Error(\n \"Target belief/question/theme node is missing a globalId.\"\n );\n }\n if (!entity.nodeType) {\n throw new Error(\"Source entity is missing a nodeType.\");\n }\n if (!belief.nodeType) {\n throw new Error(\n \"Target belief/question/theme node is missing a nodeType.\"\n );\n }\n\n const edgeDirection = buildEntityBeliefEdgeDirection(\n args,\n {\n nodeType: entity.nodeType,\n globalId: entity.globalId,\n epistemicLayer: entity.epistemicLayer,\n },\n {\n nodeType: belief.nodeType,\n globalId: belief.globalId,\n }\n );\n\n const { fromNodeId, toNodeId, fromGlobalId, toGlobalId } = edgeDirection;\n const { fromNodeType, toNodeType, edgeFromLayer, edgeToLayer } =\n edgeDirection;\n\n const effectiveEdgeType = args.edgeType || \"contains\";\n\n // Check for duplicate edge\n const existing = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", fromNodeId).eq(\"toNodeId\", toNodeId)\n )\n .first();\n\n if (existing && existing.edgeType === effectiveEdgeType) {\n return { edgeId: existing._id, existed: true };\n }\n\n // Create via Neo4j dual-write path\n const globalId = generateUuidV7();\n\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId,\n fromGlobalId,\n toGlobalId,\n edgeType: effectiveEdgeType,\n weight: args.weight ?? 1.0,\n context: args.context || `Entity-belief bridge: ${effectiveEdgeType}`,\n topicId:\n belief.projectId || entity.projectId\n ? String(belief.projectId || entity.projectId)\n : undefined,\n createdBy: userId,\n fromNodeType,\n toNodeType,\n fromLayer: edgeFromLayer,\n toLayer: edgeToLayer,\n });\n\n return { globalId, edgeType: effectiveEdgeType, existed: false };\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Published wildcard export for @lucern/graph-primitives/entityLifecycle requires this public filename to remain stable.\n/**\n * Entity Lifecycle Mutations\n *\n * Entity-specific CRUD for ontological nodes (company, person, investor, etc.).\n * Entities are L0 reality infrastructure, NOT epistemic primitives.\n *\n * Key differences from belief mutations:\n * - No confidence field manipulation\n * - No beliefStatus/beliefType fields\n * - Metadata IS mutable (patch directly)\n * - No worktree/sprint gating\n * - Merge operation (beliefs don't merge)\n *\n * Invariant #14: No silent state transitions — all changes logged to epistemicAudit.\n *\n * @module graph-primitives/entityLifecycle\n */\n\nimport { requireScopeWriteAccess } from \"@lucern/access-control/access\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { throwStructuredMutationError } from \"@lucern/access-control/structuredMutationError\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal, mutation, query } from \"./convex\";\nimport {\n buildEntityTitle,\n type CanonicalEntityRecord,\n matchesCanonicalEntityRecord,\n normalizeCanonicalEntityText,\n} from \"./entityCanonicalMatch\";\nimport { validateEntityMetadata } from \"./entityValidation\";\nimport { insertEpistemicEdge, insertEpistemicNode } from \"./epistemicInsert.js\";\nimport { generateGlobalId } from \"./globalId\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { validateEntityTypeForTopic } from \"./topicOntologyResolver\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\n\n// =============================================================================\n// AUTH HELPERS (same pattern as epistemicBeliefs.ts)\n// =============================================================================\n//\n// CQ.11: `throwStructuredMutationError` is the single shared copy imported from\n// `@lucern/access-control/structuredMutationError` (the same home the shared\n// access gate throws from); the former local copy was deleted.\n\nasync function requireAuthenticatedUserId(ctx: MutationCtx): Promise<string> {\n const userId = await getCurrentUserId(ctx);\n if (!userId) {\n throwStructuredMutationError({\n message: \"Authentication required.\",\n status: 401,\n code: \"AUTHENTICATION_REQUIRED\",\n invariantCode: \"auth.required\",\n suggestion:\n \"Provide a valid bearer token before invoking entity mutations.\",\n });\n }\n return userId;\n}\n\n// =============================================================================\n// CONTENT HASHING\n// =============================================================================\n\nfunction generateContentHash(nodeType: string, text: string): string {\n const content = `${nodeType}:${text.trim().toLowerCase().replace(/\\s+/g, \" \")}`;\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 legacy entity IDs.\n hash = (hash << 5) + hash + content.charCodeAt(i);\n // biome-ignore lint/suspicious/noBitwiseOperators: Preserve deterministic djb2 hash semantics for legacy entity IDs.\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\n// Ontological node types that are entities\nexport const ONTOLOGICAL_NODE_TYPES = [\n \"company\",\n \"person\",\n \"investor\",\n \"function\",\n \"value_chain\",\n] as const;\nconst ONTOLOGICAL_NODE_TYPE_SET = new Set<string>(ONTOLOGICAL_NODE_TYPES);\n\nexport type OntologicalNodeType = (typeof ONTOLOGICAL_NODE_TYPES)[number];\n\nexport const isOntologicalNodeType = ONTOLOGICAL_NODE_TYPE_SET.has.bind(\n ONTOLOGICAL_NODE_TYPE_SET\n) as (nodeType: string) => nodeType is OntologicalNodeType;\n\ninterface ScopeTopicDoc {\n _id: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n}\ninterface ScopeProjectDoc {\n _id: Id<\"projects\"> | string;\n tenantId?: string;\n workspaceId?: string;\n}\ntype CanonicalEntityScope = Awaited<\n ReturnType<typeof resolveTopicProjectScope>\n> & {\n tenantId?: string;\n topic: ScopeTopicDoc | null;\n project: ScopeProjectDoc | null;\n};\ninterface IndexQuery {\n eq(field: string, value: unknown): IndexQuery;\n}\n\ntype EntityVerificationStatus =\n | \"ai_verified\"\n | \"contradicted\"\n | \"human_verified\"\n | \"outdated\"\n | \"unverified\";\n\ninterface ListCanonicalEntitiesArgs {\n includeArchived?: boolean;\n limit?: number;\n nodeType?: string;\n scopeProjectId?: string;\n searchTerm?: string;\n topicId?: string;\n}\n\ninterface CreateEntityArgs {\n canonicalText: string;\n metadata?: unknown;\n nodeType: string;\n projectId?: string;\n subtype?: string;\n topicId?: string;\n}\n\ninterface MergeEntitiesArgs {\n canonicalNodeId: Id<\"epistemicNodes\">;\n duplicateNodeId: Id<\"epistemicNodes\">;\n}\n\ninterface ArchiveEntityArgs {\n nodeId: Id<\"epistemicNodes\">;\n}\n\ninterface EntityEdgeRecord {\n _id: Id<\"epistemicEdges\">;\n fromNodeId?: Id<\"epistemicNodes\">;\n toNodeId?: Id<\"epistemicNodes\">;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? (value as Id<TableName>)\n : undefined;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n return Array.isArray(value)\n ? value.filter((entry): entry is string => typeof entry === \"string\")\n : undefined;\n}\n\nfunction readEntityUpdateMetadata(\n value: unknown\n): EntityUpdateMetadata | undefined {\n if (!isRecord(value)) {\n return;\n }\n\n const metadata: EntityUpdateMetadata = {};\n const crunchbase = readOptionalString(value.crunchbase);\n const linkedin = readOptionalString(value.linkedin);\n const pitchbook = readOptionalString(value.pitchbook);\n const twitter = readOptionalString(value.twitter);\n const website = readOptionalString(value.website);\n\n if (crunchbase !== undefined) {\n metadata.crunchbase = crunchbase;\n }\n if (linkedin !== undefined) {\n metadata.linkedin = linkedin;\n }\n if (pitchbook !== undefined) {\n metadata.pitchbook = pitchbook;\n }\n if (twitter !== undefined) {\n metadata.twitter = twitter;\n }\n if (website !== undefined) {\n metadata.website = website;\n }\n\n return metadata;\n}\n\nfunction readCanonicalEntityRecord(\n value: unknown\n): CanonicalEntityRecord | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(value._id);\n if (!id) {\n return null;\n }\n\n const record: CanonicalEntityRecord = { _id: id };\n const canonicalText = readOptionalString(value.canonicalText);\n const contentHash = readOptionalString(value.contentHash);\n const domain = readOptionalString(value.domain);\n const epistemicLayer = readOptionalString(value.epistemicLayer);\n const externalIds = readRecord(value.externalIds);\n const globalId = readOptionalString(value.globalId);\n const metadata = readRecord(value.metadata);\n const nodeType = readOptionalString(value.nodeType);\n const projectId = readOptionalString(value.projectId);\n const status = readOptionalString(value.status);\n const subtype = readOptionalString(value.subtype);\n const tags = readStringArray(value.tags);\n const tenantId = readOptionalString(value.tenantId);\n const title = readOptionalString(value.title);\n const verificationStatus = readOptionalString(value.verificationStatus);\n const workspaceId = readOptionalString(value.workspaceId);\n\n if (canonicalText !== undefined) {\n record.canonicalText = canonicalText;\n }\n if (contentHash !== undefined) {\n record.contentHash = contentHash;\n }\n if (domain !== undefined) {\n record.domain = domain;\n }\n if (epistemicLayer !== undefined) {\n record.epistemicLayer = epistemicLayer;\n }\n if (externalIds !== undefined) {\n record.externalIds = externalIds;\n }\n if (globalId !== undefined) {\n record.globalId = globalId;\n }\n if (metadata !== undefined) {\n record.metadata = metadata;\n }\n if (nodeType !== undefined) {\n record.nodeType = nodeType;\n }\n if (projectId !== undefined) {\n record.projectId = projectId;\n }\n if (status !== undefined) {\n record.status = status;\n }\n if (subtype !== undefined) {\n record.subtype = subtype;\n }\n if (tags !== undefined) {\n record.tags = tags;\n }\n if (tenantId !== undefined) {\n record.tenantId = tenantId;\n }\n if (title !== undefined) {\n record.title = title;\n }\n if (verificationStatus !== undefined) {\n record.verificationStatus = verificationStatus;\n }\n if (workspaceId !== undefined) {\n record.workspaceId = workspaceId;\n }\n\n return record;\n}\n\nfunction readEntityEdgeRecord(value: unknown): EntityEdgeRecord | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readConvexId<\"epistemicEdges\">(value._id);\n if (!id) {\n return null;\n }\n\n const edge: EntityEdgeRecord = { _id: id };\n const fromNodeId = readConvexId<\"epistemicNodes\">(value.fromNodeId);\n const toNodeId = readConvexId<\"epistemicNodes\">(value.toNodeId);\n\n if (fromNodeId !== undefined) {\n edge.fromNodeId = fromNodeId;\n }\n if (toNodeId !== undefined) {\n edge.toNodeId = toNodeId;\n }\n\n return edge;\n}\n\nfunction readRowList<T>(\n values: readonly unknown[],\n reader: (value: unknown) => T | null\n): T[] {\n return values.flatMap((value) => {\n const row = reader(value);\n return row ? [row] : [];\n });\n}\n\nfunction readScopeTopicDoc(value: unknown): ScopeTopicDoc | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readConvexId<\"topics\">(value._id);\n if (!id) {\n return null;\n }\n\n const topic: ScopeTopicDoc = { _id: id };\n const tenantId = readOptionalString(value.tenantId);\n const workspaceId = readOptionalString(value.workspaceId);\n if (tenantId !== undefined) {\n topic.tenantId = tenantId;\n }\n if (workspaceId !== undefined) {\n topic.workspaceId = workspaceId;\n }\n return topic;\n}\n\nfunction readScopeProjectDoc(value: unknown): ScopeProjectDoc | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readOptionalString(value._id);\n if (!id) {\n return null;\n }\n\n const project: ScopeProjectDoc = { _id: id };\n const tenantId = readOptionalString(value.tenantId);\n const workspaceId = readOptionalString(value.workspaceId);\n if (tenantId !== undefined) {\n project.tenantId = tenantId;\n }\n if (workspaceId !== undefined) {\n project.workspaceId = workspaceId;\n }\n return project;\n}\n\nfunction readEntityUpdateNode(value: unknown): EntityUpdateNodeShape | null {\n const node = readCanonicalEntityRecord(value);\n const nodeType = node?.nodeType;\n if (!(node?.canonicalText && nodeType && isOntologicalNodeType(nodeType))) {\n return null;\n }\n\n return {\n _id: node._id,\n canonicalText: node.canonicalText,\n domain: node.domain,\n externalIds: readEntityUpdateMetadata(node.externalIds),\n globalId: node.globalId,\n metadata: node.metadata,\n nodeType,\n projectId: node.projectId,\n status: node.status,\n subtype: node.subtype,\n tags: node.tags,\n tenantId: node.tenantId,\n title: node.title,\n verificationStatus: node.verificationStatus,\n };\n}\n\nasync function resolveCanonicalEntityScope(\n ctx: QueryCtx | MutationCtx,\n args: { topicId?: string; projectId?: string }\n): Promise<CanonicalEntityScope> {\n const scope = await resolveTopicProjectScope(ctx, args);\n const topic = scope.topicId\n ? readScopeTopicDoc(await ctx.db.get(scope.topicId))\n : null;\n const project =\n scope.projectId === undefined\n ? null\n : readScopeProjectDoc(\n await resolveGraphPrimitivesAppResolvers(ctx).getProject(\n ctx,\n scope.projectId\n )\n );\n\n let tenantId: string | undefined;\n if (typeof topic?.tenantId === \"string\") {\n const trimmedTopicTenantId = topic.tenantId.trim();\n tenantId =\n trimmedTopicTenantId.length > 0 ? trimmedTopicTenantId : undefined;\n }\n if (tenantId === undefined && typeof project?.tenantId === \"string\") {\n const trimmedProjectTenantId = project.tenantId.trim();\n tenantId =\n trimmedProjectTenantId.length > 0 ? trimmedProjectTenantId : undefined;\n }\n\n return {\n ...scope,\n tenantId,\n topic,\n project,\n };\n}\n\nasync function findExistingCanonicalEntity(\n ctx: QueryCtx | MutationCtx,\n args: {\n nodeType: OntologicalNodeType;\n canonicalText: string;\n tenantId?: string;\n }\n) {\n const contentHash = generateContentHash(args.nodeType, args.canonicalText);\n const candidates = readRowList(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_contentHash\", (q: IndexQuery) =>\n q.eq(\"contentHash\", contentHash)\n )\n .collect(),\n readCanonicalEntityRecord\n );\n\n return (\n candidates.find((node) =>\n matchesCanonicalEntityRecord(node, {\n nodeType: args.nodeType,\n tenantId: args.tenantId,\n contentHash,\n })\n ) ?? null\n );\n}\n\nasync function listCanonicalEntitiesForScope(\n ctx: QueryCtx | MutationCtx,\n args: {\n tenantId?: string;\n nodeType?: string;\n searchTerm?: string;\n includeArchived?: boolean;\n limit: number;\n }\n) {\n let baseRows = readRowList(\n await ctx.db.query(\"epistemicNodes\").collect(),\n readCanonicalEntityRecord\n );\n if (args.tenantId === undefined) {\n if (args.nodeType !== undefined) {\n baseRows = readRowList(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q: IndexQuery) =>\n q.eq(\"nodeType\", args.nodeType)\n )\n .collect(),\n readCanonicalEntityRecord\n );\n }\n } else {\n baseRows = readRowList(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_tenantId\", (q: IndexQuery) =>\n q.eq(\"tenantId\", args.tenantId)\n )\n .collect(),\n readCanonicalEntityRecord\n );\n }\n\n const normalizedSearch =\n typeof args.searchTerm === \"string\" && args.searchTerm.trim().length > 0\n ? normalizeCanonicalEntityText(args.searchTerm)\n : undefined;\n\n return baseRows\n .filter((node) =>\n matchesCanonicalEntityRecord(node, {\n nodeType: args.nodeType,\n tenantId: args.tenantId,\n includeArchived: args.includeArchived,\n })\n )\n .filter((node) => {\n if (!normalizedSearch) {\n return true;\n }\n const text =\n typeof node.canonicalText === \"string\" ? node.canonicalText : \"\";\n return normalizeCanonicalEntityText(text).includes(normalizedSearch);\n })\n .sort((a, b) =>\n String(a.title ?? a.canonicalText ?? \"\").localeCompare(\n String(b.title ?? b.canonicalText ?? \"\")\n )\n )\n .slice(0, args.limit);\n}\n\nconst entityVerificationStatusValidator = v.union(\n v.literal(\"unverified\"),\n v.literal(\"human_verified\"),\n v.literal(\"ai_verified\"),\n v.literal(\"contradicted\"),\n v.literal(\"outdated\")\n);\n\n// =============================================================================\n// CANONICAL ENTITY QUERIES\n// =============================================================================\n\n/**\n * List canonical tenant-global entities visible from a topic/project scope.\n * Canonical entities are tenant-scoped and intentionally workspace-global.\n */\nexport const listCanonicalEntities = query({\n args: {\n topicId: v.optional(v.string()),\n scopeProjectId: v.optional(v.string()),\n nodeType: v.optional(v.string()),\n searchTerm: v.optional(v.string()),\n includeArchived: v.optional(v.boolean()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: ListCanonicalEntitiesArgs) => {\n const scope = await resolveCanonicalEntityScope(ctx, {\n topicId: args.topicId,\n projectId: args.scopeProjectId,\n });\n\n const limit = Math.max(1, Math.min(Math.floor(args.limit ?? 100), 500));\n return listCanonicalEntitiesForScope(ctx, {\n tenantId: scope.tenantId,\n nodeType: args.nodeType,\n searchTerm: args.searchTerm,\n includeArchived: args.includeArchived,\n limit,\n });\n },\n});\n\n// =============================================================================\n// CREATE ENTITY\n// =============================================================================\n\n/**\n * Create a new ontological entity in epistemicNodes.\n *\n * Unlike beliefs, entities:\n * - Have epistemicLayer = 'ontological'\n * - Have no confidence or beliefStatus\n * - Are mutable (metadata can be patched)\n * - Require metadata validation against registered schema\n */\nexport const createEntity = mutation({\n args: {\n nodeType: v.string(), // \"company\", \"person\", \"investor\", \"function\", \"value_chain\"\n canonicalText: v.string(), // Display name (e.g., \"Anthropic\", \"Dario Amodei\")\n metadata: v.optional(v.any()), // Type-specific attributes validated against schema\n subtype: v.optional(v.string()), // e.g., \"company/private\", \"investor/vc\"\n ...optionalScopeArgs,\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: CreateEntityArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n const canonicalText = args.canonicalText.trim();\n\n if (!canonicalText) {\n throwStructuredMutationError({\n message: \"canonicalText is required.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"entity.type_check\",\n });\n }\n\n // Validate nodeType is ontological\n if (!isOntologicalNodeType(args.nodeType)) {\n throwStructuredMutationError({\n message: `\"${args.nodeType}\" is not an ontological entity type. Use epistemicBeliefs.create for epistemic nodes.`,\n status: 400,\n code: \"INVALID_NODE_TYPE\",\n invariantCode: \"entity.type_check\",\n suggestion: `Valid entity types: ${ONTOLOGICAL_NODE_TYPES.join(\", \")}`,\n });\n }\n\n // Resolve topic/project scope\n const scope = await resolveCanonicalEntityScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n if (scope.projectId) {\n await requireScopeWriteAccess(ctx, scope.projectId, authenticatedUserId);\n }\n\n // Validate nodeType against the resolved ontology for the topic scope.\n // If the topic (or its ancestor) binds to an ontology with a published version,\n // the entity's nodeType must be in that ontology's entity type vocabulary.\n if (scope.topicId) {\n const ontologyValidation = await validateEntityTypeForTopic(\n ctx,\n scope.topicId,\n args.nodeType\n );\n if (!ontologyValidation.valid) {\n throwStructuredMutationError({\n message: `Ontology validation failed: ${ontologyValidation.error}`,\n status: 400,\n code: \"ONTOLOGY_VALIDATION_ERROR\",\n invariantCode: \"entity.ontology_type_check\",\n suggestion:\n \"Use a nodeType that is defined in the ontology bound to this topic, or update the ontology to include this entity type.\",\n details: { nodeType: args.nodeType, topicId: scope.topicId },\n });\n }\n }\n\n // Validate metadata against registered schema\n const metadata = readRecord(args.metadata) ?? {};\n const validation = await validateEntityMetadata(\n ctx,\n args.nodeType,\n metadata,\n scope.tenantId\n );\n if (!validation.valid) {\n throwStructuredMutationError({\n message: `Entity metadata validation failed: ${validation.errors.join(\"; \")}`,\n status: 400,\n code: \"VALIDATION_ERROR\",\n invariantCode: \"entity.metadata_schema\",\n suggestion:\n \"Check the registered schema for this entity type in schemaEnumConfig.\",\n details: { errors: validation.errors },\n });\n }\n\n const existing = await findExistingCanonicalEntity(ctx, {\n nodeType: args.nodeType,\n canonicalText,\n tenantId: scope.tenantId,\n });\n if (existing) {\n return {\n nodeId: existing._id,\n globalId: existing.globalId,\n isDuplicate: true,\n };\n }\n\n // Create the entity node\n const entityGlobalId = generateGlobalId();\n const nodeId = await insertEpistemicNode(ctx, {\n globalId: entityGlobalId,\n nodeType: args.nodeType,\n epistemicLayer: \"ontological\",\n subtype: args.subtype,\n canonicalText,\n contentHash: generateContentHash(args.nodeType, canonicalText),\n title: buildEntityTitle(canonicalText),\n metadata: {\n ...metadata,\n ...(args.subtype ? { subtype: args.subtype } : {}),\n status: \"active\",\n },\n tenantId: scope.tenantId,\n sourceType: \"human\",\n verificationStatus: \"unverified\",\n status: \"active\",\n projectId: scope.projectId,\n createdBy: authenticatedUserId,\n createdAt: now,\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Log to epistemic audit (Invariant #14)\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"entity\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: null,\n newState: {\n canonicalText,\n nodeType: args.nodeType,\n tenantId: scope.tenantId,\n workspaceId: null,\n },\n projectId: scope.projectId,\n });\n\n return { nodeId, globalId: entityGlobalId, isDuplicate: false };\n },\n});\n\n// =============================================================================\n// UPDATE ENTITY ATTRIBUTES\n// =============================================================================\n\n/**\n * Patch entity metadata. Entities ARE mutable (unlike scored beliefs).\n * Logs before/after diff to epistemicAudit.\n */\n\ninterface EntityUpdateMetadata {\n crunchbase?: string;\n linkedin?: string;\n pitchbook?: string;\n twitter?: string;\n website?: string;\n}\n\ninterface EntityUpdateNodeShape {\n _id: Id<\"epistemicNodes\">;\n canonicalText: string;\n domain?: string | undefined;\n externalIds?: EntityUpdateMetadata | undefined;\n globalId?: string | undefined;\n metadata?: Record<string, unknown> | undefined;\n nodeType: OntologicalNodeType;\n projectId?: string | undefined;\n status?: string | undefined;\n subtype?: string | undefined;\n tags?: string[] | undefined;\n tenantId?: string | undefined;\n title?: string | undefined;\n verificationStatus?: string | undefined;\n}\n\ninterface EntityAttributeUpdatePlan {\n existingMetadata: Record<string, unknown>;\n mergedMetadata: Record<string, unknown>;\n nextCanonicalText: string;\n}\n\ninterface EntityAttributeUpdateArgs {\n canonicalText?: string;\n domain?: string;\n externalIds?: EntityUpdateMetadata;\n metadata?: Record<string, unknown>;\n subtype?: string;\n tags?: string[];\n title?: string;\n verificationStatus?: string;\n}\n\ninterface UpdateEntityAttributesArgs extends EntityAttributeUpdateArgs {\n nodeId: Id<\"epistemicNodes\">;\n verificationStatus?: EntityVerificationStatus;\n}\n\nfunction normalizeEntityMetadataPatch(\n metadata: Record<string, unknown> | null | undefined\n): Record<string, unknown> {\n return metadata === null || metadata === undefined ? {} : metadata;\n}\n\nfunction resolveScopeProjectId(\n node: EntityUpdateNodeShape\n): string | undefined {\n return typeof node.projectId === \"string\" && node.projectId.trim().length > 0\n ? node.projectId\n : undefined;\n}\n\nfunction prepareEntityAttributePlan(\n node: EntityUpdateNodeShape,\n args: EntityAttributeUpdateArgs\n): EntityAttributeUpdatePlan {\n const existingMetadata = node.metadata ?? {};\n const mergedMetadata = {\n ...existingMetadata,\n ...normalizeEntityMetadataPatch(args.metadata),\n };\n\n if (args.subtype !== undefined) {\n mergedMetadata.subtype = args.subtype;\n }\n\n const nextCanonicalText =\n args.canonicalText === undefined\n ? node.canonicalText\n : args.canonicalText.trim();\n\n if (nextCanonicalText.length === 0) {\n throwStructuredMutationError({\n message: \"canonicalText cannot be empty.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"entity.update_requires_entity_lifecycle\",\n });\n }\n\n return {\n nextCanonicalText,\n existingMetadata,\n mergedMetadata,\n };\n}\n\nasync function loadEntityForUpdate(\n ctx: MutationCtx,\n nodeId: Id<\"epistemicNodes\">\n): Promise<EntityUpdateNodeShape> {\n const node = readEntityUpdateNode(await ctx.db.get(nodeId));\n if (!node) {\n throwStructuredMutationError({\n message: \"Entity not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n details: { nodeId },\n });\n }\n\n return node;\n}\n\nasync function assertCanonicalEntityUnique(\n ctx: MutationCtx,\n node: EntityUpdateNodeShape,\n nodeId: Id<\"epistemicNodes\">,\n canonicalText: string\n): Promise<void> {\n const duplicate = await findExistingCanonicalEntity(ctx, {\n nodeType: node.nodeType,\n canonicalText,\n tenantId: typeof node.tenantId === \"string\" ? node.tenantId : undefined,\n });\n if (duplicate && String(duplicate._id) !== String(nodeId)) {\n throwStructuredMutationError({\n message:\n \"A canonical entity with this name already exists in the tenant scope.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"entity.canonical_text_unique_per_tenant\",\n suggestion:\n \"Merge the duplicate entity instead of renaming this node onto an existing canonical record.\",\n details: {\n nodeId,\n duplicateNodeId: duplicate._id,\n canonicalText,\n },\n });\n }\n}\n\nfunction buildEntityAttributeUpdates(\n node: EntityUpdateNodeShape,\n args: EntityAttributeUpdateArgs,\n plan: EntityAttributeUpdatePlan\n): Record<string, unknown> {\n const updates: Record<string, unknown> = {\n metadata: plan.mergedMetadata,\n };\n\n if (args.canonicalText !== undefined) {\n updates.canonicalText = plan.nextCanonicalText;\n updates.contentHash = generateContentHash(\n node.nodeType,\n plan.nextCanonicalText\n );\n updates.title =\n args.title === undefined\n ? buildEntityTitle(plan.nextCanonicalText)\n : args.title;\n } else if (args.title !== undefined) {\n updates.title = args.title;\n }\n\n if (args.subtype !== undefined) {\n updates.subtype = args.subtype;\n }\n if (args.domain !== undefined) {\n updates.domain = args.domain;\n }\n if (args.tags !== undefined) {\n updates.tags = args.tags;\n }\n if (args.verificationStatus !== undefined) {\n updates.verificationStatus = args.verificationStatus;\n }\n if (args.externalIds !== undefined) {\n updates.externalIds = args.externalIds;\n }\n\n return updates;\n}\n\nexport const updateEntityAttributes = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n canonicalText: v.optional(v.string()),\n title: v.optional(v.string()),\n metadata: v.optional(v.any()), // Partial metadata to merge\n subtype: v.optional(v.string()),\n domain: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n verificationStatus: v.optional(entityVerificationStatusValidator),\n externalIds: v.optional(\n v.object({\n crunchbase: v.optional(v.string()),\n linkedin: v.optional(v.string()),\n pitchbook: v.optional(v.string()),\n twitter: v.optional(v.string()),\n website: v.optional(v.string()),\n })\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateEntityAttributesArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n // Phase 1: load the ontological target and enforce scope write access.\n const node = await loadEntityForUpdate(ctx, args.nodeId);\n\n const scopeProjectId = resolveScopeProjectId(node);\n if (scopeProjectId !== undefined) {\n await requireScopeWriteAccess(ctx, scopeProjectId, authenticatedUserId);\n }\n\n // Phase 2: normalize request input and merge metadata safely.\n const plan = prepareEntityAttributePlan(node, {\n canonicalText: args.canonicalText,\n metadata: args.metadata,\n subtype: args.subtype,\n domain: args.domain,\n title: args.title,\n tags: args.tags,\n verificationStatus: args.verificationStatus,\n externalIds: args.externalIds,\n });\n\n // Phase 3: enforce canonical-name uniqueness when renaming.\n if (args.canonicalText !== undefined) {\n await assertCanonicalEntityUnique(\n ctx,\n node,\n args.nodeId,\n plan.nextCanonicalText\n );\n }\n\n // Validate merged metadata against schema\n const validation = await validateEntityMetadata(\n ctx,\n node.nodeType,\n plan.mergedMetadata,\n typeof node.tenantId === \"string\" ? node.tenantId : undefined\n );\n if (!validation.valid) {\n throwStructuredMutationError({\n message: `Entity metadata validation failed: ${validation.errors.join(\"; \")}`,\n status: 400,\n code: \"VALIDATION_ERROR\",\n invariantCode: \"entity.metadata_schema\",\n details: { errors: validation.errors },\n });\n }\n\n const updates = {\n ...buildEntityAttributeUpdates(\n node,\n {\n canonicalText: args.canonicalText,\n title: args.title,\n metadata: args.metadata,\n subtype: args.subtype,\n domain: args.domain,\n tags: args.tags,\n verificationStatus: args.verificationStatus,\n externalIds: args.externalIds,\n },\n plan\n ),\n updatedAt: now,\n };\n\n // Patch the node\n await ctx.db.patch(args.nodeId, updates);\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n // Log to epistemic audit with before/after diff (Invariant #14)\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"entity\",\n entityId: args.nodeId,\n changeType: \"entity_attributes_updated\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n canonicalText: node.canonicalText,\n title: node.title,\n subtype: node.subtype,\n domain: node.domain,\n tags: node.tags,\n verificationStatus: node.verificationStatus,\n externalIds: node.externalIds,\n metadata: plan.existingMetadata,\n },\n newState: updates,\n projectId: scopeProjectId,\n });\n\n return { nodeId: args.nodeId, updated: true };\n },\n});\n\n// =============================================================================\n// MERGE ENTITIES\n// =============================================================================\n\n/**\n * Merge a duplicate entity into a canonical one.\n * Non-destructive: duplicate is preserved with status='superseded' and lineage.\n *\n * Steps:\n * 1. Create same_as edge between them\n * 2. Re-point all edges from duplicate → canonical\n * 3. Set duplicate status to 'superseded', supersededBy = canonical\n */\nexport const mergeEntities = mutation({\n args: {\n canonicalNodeId: v.id(\"epistemicNodes\"),\n duplicateNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: MergeEntitiesArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const canonical = readEntityUpdateNode(\n await ctx.db.get(args.canonicalNodeId)\n );\n const duplicate = readEntityUpdateNode(\n await ctx.db.get(args.duplicateNodeId)\n );\n\n if (!(canonical && duplicate)) {\n throwStructuredMutationError({\n message: \"One or both entity nodes not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n details: {\n canonicalNodeId: args.canonicalNodeId,\n duplicateNodeId: args.duplicateNodeId,\n },\n });\n }\n\n if (args.canonicalNodeId === args.duplicateNodeId) {\n throwStructuredMutationError({\n message: \"Cannot merge an entity with itself.\",\n status: 400,\n code: \"SELF_MERGE\",\n invariantCode: \"entity.no_self_merge\",\n suggestion: \"Provide two different entity IDs to merge.\",\n details: { canonicalNodeId: args.canonicalNodeId },\n });\n }\n\n if (!(canonical.globalId && duplicate.globalId)) {\n throwStructuredMutationError({\n message: \"Both entity nodes must have globalId values to merge.\",\n status: 400,\n code: \"LIFECYCLE_VIOLATION\",\n invariantCode: \"entity.global_id_required\",\n details: {\n canonicalNodeId: args.canonicalNodeId,\n duplicateNodeId: args.duplicateNodeId,\n },\n });\n }\n\n if (canonical.nodeType !== duplicate.nodeType) {\n throwStructuredMutationError({\n message: `Cannot merge different entity types: ${canonical.nodeType} vs ${duplicate.nodeType}.`,\n status: 400,\n code: \"TYPE_MISMATCH\",\n });\n }\n\n if (canonical.projectId) {\n await requireScopeWriteAccess(\n ctx,\n canonical.projectId,\n authenticatedUserId\n );\n }\n\n // 1. Create derived_from edge (canonical replacement for same_as)\n const edgeGlobalId = generateGlobalId();\n await insertEpistemicEdge(ctx, {\n globalId: edgeGlobalId,\n // C2-RR.4 Defect E — canonical UUIDv7 endpoints, not Convex doc ids.\n fromNodeId: duplicate.globalId,\n toNodeId: canonical.globalId,\n sourceGlobalId: duplicate.globalId,\n targetGlobalId: canonical.globalId,\n edgeType: \"derived_from\",\n weight: 1.0,\n context: `Entity merge: ${duplicate.canonicalText} → ${canonical.canonicalText}`,\n createdBy: authenticatedUserId,\n createdAt: now,\n updatedAt: now,\n });\n\n // 2. Re-point all edges from duplicate → canonical\n // Edges where duplicate is the source\n const outgoingEdges = readRowList(\n await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from\", (q: IndexQuery) =>\n q.eq(\"fromNodeId\", args.duplicateNodeId)\n )\n .collect(),\n readEntityEdgeRecord\n );\n\n for (const edge of outgoingEdges) {\n if (edge.toNodeId === args.canonicalNodeId) {\n continue; // Skip derived_from merge edge\n }\n await ctx.db.patch(edge._id, {\n fromNodeId: args.canonicalNodeId,\n sourceGlobalId: canonical.globalId,\n updatedAt: now,\n });\n }\n\n // Edges where duplicate is the target\n const incomingEdges = readRowList(\n await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q: IndexQuery) =>\n q.eq(\"toNodeId\", args.duplicateNodeId)\n )\n .collect(),\n readEntityEdgeRecord\n );\n\n for (const edge of incomingEdges) {\n if (edge.fromNodeId === args.canonicalNodeId) {\n continue; // Skip derived_from merge edge\n }\n await ctx.db.patch(edge._id, {\n toNodeId: args.canonicalNodeId,\n targetGlobalId: canonical.globalId,\n updatedAt: now,\n });\n }\n\n // 3. Set duplicate status to 'superseded'\n const duplicateMetadata = duplicate.metadata ?? {};\n await ctx.db.patch(args.duplicateNodeId, {\n status: \"superseded\",\n metadata: {\n ...duplicateMetadata,\n status: \"superseded\",\n supersededBy: args.canonicalNodeId,\n mergedAt: now,\n mergedBy: authenticatedUserId,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync for both nodes\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.canonicalNodeId,\n operation: \"upsert\",\n });\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.duplicateNodeId,\n operation: \"upsert\",\n });\n\n // Log to epistemic audit (Invariant #14)\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"entity\",\n entityId: args.canonicalNodeId,\n changeType: \"entity_merged\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n rationale: `Entity merge: absorbed ${args.duplicateNodeId} (${duplicate.canonicalText}). ${outgoingEdges.length + incomingEdges.length} edges re-pointed.`,\n previousState: null,\n newState: {\n nodeType: canonical.nodeType,\n canonicalText: canonical.canonicalText,\n },\n projectId: canonical.projectId,\n });\n\n // Count only edges that were actually re-pointed (exclude skipped same_as)\n const outgoingRepointed = outgoingEdges.filter(\n (e) => e.toNodeId !== args.canonicalNodeId\n ).length;\n const incomingRepointed = incomingEdges.filter(\n (e) => e.fromNodeId !== args.canonicalNodeId\n ).length;\n\n // OE-E: Reactive hook — schedule belief review for the canonical entity.\n // After merge, beliefs previously connected to the duplicate now point to\n // the canonical entity. Review whether those beliefs still hold.\n await ctx.scheduler.runAfter(\n 0,\n internal.lucernMcp.triggerEntityChangeReview,\n {\n entityNodeId: args.canonicalNodeId,\n changeDescription: `Merged with duplicate \"${duplicate.canonicalText}\". ${outgoingRepointed + incomingRepointed} edges re-pointed.`,\n userId: authenticatedUserId,\n }\n );\n\n return {\n canonicalNodeId: args.canonicalNodeId,\n duplicateNodeId: args.duplicateNodeId,\n edgesRepointed: outgoingRepointed + incomingRepointed,\n };\n },\n});\n\n// =============================================================================\n// ARCHIVE ENTITY\n// =============================================================================\n\n/**\n * Archive an entity. Sets status to 'archived'.\n * Non-destructive: entity preserved with full lineage.\n */\nexport const archiveEntity = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: ArchiveEntityArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await loadEntityForUpdate(ctx, args.nodeId);\n\n if (node.projectId) {\n await requireScopeWriteAccess(ctx, node.projectId, authenticatedUserId);\n }\n\n await ctx.db.patch(args.nodeId, {\n status: \"archived\",\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n // Log to epistemic audit (Invariant #14)\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"entity\",\n entityId: args.nodeId,\n changeType: \"entity_archived\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: { status: node.status },\n newState: { status: \"archived\" },\n projectId: node.projectId,\n });\n\n // OE-E: Reactive hook — schedule belief review for archived entity.\n // Beliefs that referenced this entity may need reassessment.\n await ctx.scheduler.runAfter(\n 0,\n internal.lucernMcp.triggerEntityChangeReview,\n {\n entityNodeId: args.nodeId,\n changeDescription: `Entity \"${node.canonicalText}\" was archived.`,\n userId: authenticatedUserId,\n }\n );\n\n return { nodeId: args.nodeId, archived: true };\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Canonical-entity match helpers — pure text-normalization, title-derivation,\n * and record-matching predicates behind the canonical-entity dedup/lookup path\n * in entityLifecycle.ts. Extracted from entityLifecycle.ts (the mutations/queries\n * registration stays there) so the module stays under the long-file hard gate;\n * pure code motion, no logic delta.\n */\nimport type { Id } from \"./convex\";\n\nexport interface CanonicalEntityRecord {\n _id: Id<\"epistemicNodes\">;\n canonicalText?: string;\n contentHash?: string;\n domain?: string;\n epistemicLayer?: string;\n externalIds?: Record<string, unknown>;\n globalId?: string;\n metadata?: Record<string, unknown>;\n nodeType?: string;\n projectId?: string;\n status?: string;\n subtype?: string;\n tags?: string[];\n tenantId?: string;\n title?: string;\n verificationStatus?: string;\n workspaceId?: string;\n}\n\nexport function normalizeCanonicalEntityText(value: string): string {\n return value.trim().toLowerCase().replace(/\\s+/g, \" \");\n}\n\nexport function buildEntityTitle(canonicalText: string): string {\n return (\n canonicalText.slice(0, 100) + (canonicalText.length > 100 ? \"...\" : \"\")\n );\n}\n\nexport function matchesCanonicalEntityRecord(\n node: CanonicalEntityRecord,\n args: {\n nodeType?: string;\n tenantId?: string;\n contentHash?: string;\n includeArchived?: boolean;\n }\n): boolean {\n if (node.epistemicLayer !== \"ontological\") {\n return false;\n }\n if (node.workspaceId !== undefined) {\n return false;\n }\n if (args.nodeType && node.nodeType !== args.nodeType) {\n return false;\n }\n if (args.contentHash && node.contentHash !== args.contentHash) {\n return false;\n }\n const rowTenantId =\n typeof node.tenantId === \"string\" && node.tenantId.trim().length > 0\n ? node.tenantId.trim()\n : undefined;\n if (rowTenantId !== args.tenantId) {\n return false;\n }\n if (args.includeArchived) {\n return node.status !== \"deleted\";\n }\n return node.status === \"active\";\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public ABI surface; rename requires a cross-package migration update.\n/**\n * Entity Metadata Validation\n *\n * Validates entity metadata against registered schemas in schemaEnumConfig.\n * Strict on create (must pass), lenient on read (existing data tolerance).\n *\n * @module graph-primitives/entityValidation\n */\n\nimport type { MutationCtx, QueryCtx } from \"./convex\";\n\ninterface UnknownRecord {\n [key: string]: unknown;\n}\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\ntype EntitySchemaConfigFieldType = \"string\" | \"number\" | \"boolean\";\n\ninterface EntitySchemaConfigEntry {\n required: boolean;\n type: EntitySchemaConfigFieldType;\n}\n\ninterface FieldSchema {\n required: boolean;\n type: EntitySchemaConfigFieldType;\n}\n\ntype EntitySchema = Record<string, FieldSchema>;\n\ninterface SchemaEnumConfigRow {\n metadata?: UnknownRecord;\n status?: string;\n value?: string;\n}\n\nfunction isObjectLike(value: unknown): value is UnknownRecord {\n return value !== null && typeof value === \"object\";\n}\n\nfunction isEntitySchemaConfigField(\n value: unknown\n): value is EntitySchemaConfigEntry {\n if (!isObjectLike(value)) {\n return false;\n }\n const required = value.required;\n const type = value.type;\n return (\n typeof required === \"boolean\" &&\n (type === \"string\" || type === \"number\" || type === \"boolean\")\n );\n}\n\nfunction readEntitySchema(value: unknown): EntitySchema {\n if (!isObjectLike(value)) {\n return {};\n }\n const schema: EntitySchema = {};\n for (const [fieldName, fieldValue] of Object.entries(value)) {\n if (!isEntitySchemaConfigField(fieldValue)) {\n continue;\n }\n schema[fieldName] = fieldValue;\n }\n return schema;\n}\n\nfunction readSchemaEnumConfigRow(row: unknown): SchemaEnumConfigRow | null {\n if (!isObjectLike(row)) {\n return null;\n }\n\n const value = row.value;\n if (typeof value !== \"string\") {\n return null;\n }\n\n return {\n value,\n status: typeof row.status === \"string\" ? row.status : undefined,\n metadata: isObjectLike(row.metadata) ? row.metadata : undefined,\n };\n}\n\nfunction readEntitySchemaFromConfig(row: unknown): EntitySchema | null {\n const parsed = readSchemaEnumConfigRow(row);\n if (parsed?.status !== \"active\" || !parsed?.metadata) {\n return null;\n }\n\n const schema = parsed.metadata.schema;\n if (!schema) {\n return null;\n }\n\n return readEntitySchema(schema);\n}\n\ninterface ValidationResult {\n errors: string[];\n valid: boolean;\n}\n\n// =============================================================================\n// SCHEMA LOOKUP\n// =============================================================================\n\n/**\n * Fetch the registered metadata schema for an entity type.\n * Returns null if no schema is registered.\n */\nexport async function getEntityTypeSchema(\n ctx: QueryCtx | MutationCtx,\n nodeType: string,\n tenantId?: string\n): Promise<EntitySchema | null> {\n // Try tenant-specific first, then platform default\n if (tenantId) {\n const tenantEntries = await ctx.db\n .query(\"schemaEnumConfig\")\n .withIndex(\"by_tenant_category\", (q) =>\n q.eq(\"tenantId\", tenantId).eq(\"category\", \"entity_type\")\n )\n .collect();\n\n const tenantMatch = tenantEntries.find((entry) => {\n const parsed = readSchemaEnumConfigRow(entry);\n return (\n parsed !== null &&\n parsed.value === nodeType &&\n parsed.status === \"active\"\n );\n });\n const tenantSchema = readEntitySchemaFromConfig(tenantMatch);\n if (tenantSchema !== null) {\n return tenantSchema;\n }\n }\n\n // Fall back to platform default\n const platformEntry = await ctx.db\n .query(\"schemaEnumConfig\")\n .withIndex(\"by_category_value\", (q) =>\n q.eq(\"category\", \"entity_type\").eq(\"value\", nodeType)\n )\n .first();\n\n const platformSchema = readEntitySchemaFromConfig(platformEntry);\n if (platformSchema !== null) {\n return platformSchema;\n }\n\n return null;\n}\n\n// =============================================================================\n// VALIDATION\n// =============================================================================\n\n/**\n * Validate entity metadata against the registered schema.\n *\n * Policy: strict on create (unregistered types fail), lenient on read.\n *\n * @param ctx - Convex query/mutation context\n * @param nodeType - The entity nodeType (e.g., \"company\", \"person\")\n * @param metadata - The metadata object to validate\n * @param tenantId - Optional tenant ID for tenant-specific schemas\n * @returns ValidationResult with errors if invalid\n */\nexport async function validateEntityMetadata(\n ctx: QueryCtx | MutationCtx,\n nodeType: string,\n metadata: Record<string, unknown> | undefined | null,\n tenantId?: string\n): Promise<ValidationResult> {\n const errors: string[] = [];\n\n const schema = await getEntityTypeSchema(ctx, nodeType, tenantId);\n\n if (!schema) {\n return {\n valid: false,\n errors: [\n `No registered schema for entity type \"${nodeType}\". Register it in schemaEnumConfig (category=\"entity_type\") before creating entities of this type.`,\n ],\n };\n }\n\n const meta = metadata || {};\n\n // Check required fields\n for (const [fieldName, fieldDef] of Object.entries(schema)) {\n if (fieldDef.required) {\n const value = meta[fieldName];\n if (value === undefined || value === null || value === \"\") {\n errors.push(`Required field \"${fieldName}\" is missing or empty`);\n }\n }\n }\n\n // Check field types for provided fields\n for (const [fieldName, value] of Object.entries(meta)) {\n const fieldDef = schema[fieldName];\n if (!fieldDef) {\n // Extra fields are allowed (loose metadata tolerance)\n continue;\n }\n\n if (value === undefined || value === null) {\n // null/undefined are allowed for optional fields (already caught above for required)\n continue;\n }\n\n const actualType = typeof value;\n if (actualType !== fieldDef.type) {\n errors.push(\n `Field \"${fieldName}\" expected type \"${fieldDef.type}\" but got \"${actualType}\"`\n );\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\n/**\n * Check if a nodeType is a registered entity type (platform or tenant).\n */\nexport async function isRegisteredEntityType(\n ctx: QueryCtx | MutationCtx,\n nodeType: string,\n tenantId?: string\n): Promise<boolean> {\n const schema = await getEntityTypeSchema(ctx, nodeType, tenantId);\n return schema !== null;\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Topic Ontology Resolution — Hybrid Inheritance\n *\n * Resolves the effective ontology for a topic by walking the parent chain.\n *\n * Strategy:\n * - If the topic has an ontologyId, return its ontology definition.\n * - Otherwise, walk up the parent chain until an ancestor with an ontologyId is found.\n * - Returns null if no ancestor in the chain has an ontology binding.\n *\n * This is a helper function callable from within Convex mutation/query handlers.\n * For the public query API, see topics.resolveTopicOntology.\n *\n * @module graph-primitives/topicOntologyResolver\n */\n\nimport type { DatabaseReader, Id } from \"./convex\";\n\n// Minimal topic shape needed for resolution (avoids importing full generated types)\ninterface TopicDoc {\n _id: Id<\"topics\">;\n depth: number;\n name: string;\n ontologyId?: Id<\"ontologyDefinitions\">;\n parentTopicId?: Id<\"topics\">;\n}\n\ninterface OntologyDef {\n _id: Id<\"ontologyDefinitions\">;\n name: string;\n ontologyKey: string;\n status: \"draft\" | \"active\" | \"deprecated\" | \"archived\";\n tier: \"platform\" | \"pack\" | \"tenant\";\n}\n\ninterface OntologyVer {\n _id: Id<\"ontologyVersions\">;\n edgeTypes: Array<{ value: string; label: string; description?: string }>;\n entityTypes: Array<{ value: string; label: string; description?: string }>;\n ontologyId: Id<\"ontologyDefinitions\">;\n publishedAt?: number;\n status: \"draft\" | \"published\" | \"deprecated\";\n version: string;\n}\n\nexport interface ResolvedTopicOntology {\n ontologyId: Id<\"ontologyDefinitions\">;\n ontologyKey: string;\n ontologyName: string;\n /** The published version, if any */\n publishedVersion: OntologyVer | null;\n source: \"direct\" | \"inherited\";\n sourceTopicId: Id<\"topics\">;\n tier: string;\n /** Valid edge type values from the latest published version */\n validEdgeTypes: string[];\n /** Valid entity type values from the latest published version */\n validEntityTypes: string[];\n}\n\nconst MAX_RESOLUTION_DEPTH = 10;\n\ninterface TopicOntologyCtx {\n db: DatabaseReader;\n}\n\nasync function loadTopic(\n ctx: TopicOntologyCtx,\n topicId: Id<\"topics\">\n): Promise<TopicDoc | null> {\n return (await ctx.db.get(topicId)) as unknown as TopicDoc | null;\n}\n\nasync function loadOntologyDefinition(\n ctx: TopicOntologyCtx,\n ontologyId: Id<\"ontologyDefinitions\">\n): Promise<OntologyDef | null> {\n return (await ctx.db.get(ontologyId)) as unknown as OntologyDef | null;\n}\n\nasync function loadPublishedOntologyVersions(\n ctx: TopicOntologyCtx,\n ontologyId: Id<\"ontologyDefinitions\">\n): Promise<OntologyVer[]> {\n const versions = (await ctx.db\n .query(\"ontologyVersions\")\n .withIndex(\"by_ontologyId\", (q) => q.eq(\"ontologyId\", ontologyId))\n .collect()) as unknown as OntologyVer[];\n\n return versions\n .filter((version) => version.status === \"published\")\n .sort((a, b) => (b.publishedAt ?? 0) - (a.publishedAt ?? 0));\n}\n\nfunction resolvedTopicOntology(args: {\n latestPublished: OntologyVer | null;\n ontologyDef: OntologyDef;\n source: \"direct\" | \"inherited\";\n sourceTopicId: Id<\"topics\">;\n}): ResolvedTopicOntology {\n return {\n ontologyId: args.ontologyDef._id,\n ontologyKey: args.ontologyDef.ontologyKey,\n ontologyName: args.ontologyDef.name,\n publishedVersion: args.latestPublished,\n source: args.source,\n sourceTopicId: args.sourceTopicId,\n tier: args.ontologyDef.tier,\n validEdgeTypes:\n args.latestPublished?.edgeTypes.map((edgeType) => edgeType.value) ?? [],\n validEntityTypes:\n args.latestPublished?.entityTypes.map((entityType) => entityType.value) ??\n [],\n };\n}\n\nasync function resolveCurrentTopicOntology(args: {\n ctx: TopicOntologyCtx;\n current: TopicDoc;\n startTopicId: Id<\"topics\">;\n}): Promise<ResolvedTopicOntology | \"continue\" | null> {\n if (!args.current.ontologyId) {\n return \"continue\";\n }\n\n const ontologyDef = await loadOntologyDefinition(\n args.ctx,\n args.current.ontologyId\n );\n if (!ontologyDef || ontologyDef.status === \"archived\") {\n return args.current.parentTopicId ? \"continue\" : null;\n }\n\n const published = await loadPublishedOntologyVersions(\n args.ctx,\n args.current.ontologyId\n );\n\n return resolvedTopicOntology({\n latestPublished: published[0] ?? null,\n ontologyDef,\n source: args.current._id === args.startTopicId ? \"direct\" : \"inherited\",\n sourceTopicId: args.current._id,\n });\n}\n\n/**\n * Resolve the effective ontology for a topic.\n *\n * @param ctx - Convex mutation/query context with db access\n * @param topicId - The topic to resolve the ontology for\n * @returns The resolved ontology or null if none is bound in the ancestor chain\n */\nexport async function resolveTopicOntologyInternal(\n ctx: TopicOntologyCtx,\n topicId: Id<\"topics\">\n): Promise<ResolvedTopicOntology | null> {\n let current = await loadTopic(ctx, topicId);\n if (!current) {\n return null;\n }\n\n const startTopicId = topicId;\n\n for (let i = 0; i < MAX_RESOLUTION_DEPTH && current; i++) {\n const resolved = await resolveCurrentTopicOntology({\n ctx,\n current,\n startTopicId,\n });\n if (resolved !== \"continue\") {\n return resolved;\n }\n\n // No ontologyId on this topic — walk up\n if (!current.parentTopicId) {\n break;\n }\n current = await loadTopic(ctx, current.parentTopicId);\n }\n\n return null;\n}\n\n/**\n * Validate that a nodeType is allowed by the resolved ontology for a topic.\n *\n * Returns { valid: true } if:\n * - The topic has no bound ontology (no constraint)\n * - The nodeType is in the ontology's published entity types\n *\n * Returns { valid: false, error } if:\n * - The topic has a bound ontology and the nodeType is not in its entity types\n */\nexport async function validateEntityTypeForTopic(\n ctx: TopicOntologyCtx,\n topicId: Id<\"topics\">,\n nodeType: string\n): Promise<{ valid: true } | { valid: false; error: string }> {\n const resolved = await resolveTopicOntologyInternal(ctx, topicId);\n\n // No ontology bound — all entity types are allowed\n if (!resolved) {\n return { valid: true };\n }\n\n // No published version — ontology exists but has no content yet, allow all\n if (resolved.validEntityTypes.length === 0) {\n return { valid: true };\n }\n\n // Check if nodeType is in the ontology's entity types\n if (resolved.validEntityTypes.includes(nodeType)) {\n return { valid: true };\n }\n\n return {\n valid: false,\n error: `Entity type \"${nodeType}\" is not defined in the ontology \"${resolved.ontologyKey}\" (${resolved.ontologyName}). Valid entity types: ${resolved.validEntityTypes.join(\", \")}. Source: ${resolved.source} from topic ${resolved.sourceTopicId}.`,\n };\n}\n","/**\n * Epistemic Answers API\n *\n * Answers are first-class L2 nodes in the epistemic spine.\n * Every answer is an immutable snapshot — new answers create new nodes,\n * old ones get `superseded`. This gives full version history and lets\n * answers have their own edges in the knowledge graph.\n *\n * Edge: Answer —responds_to→ Question\n * Edge: Answer —based_on→ Evidence (for each supporting evidence)\n * Edge: NewAnswer —supersedes→ OldAnswer (for versioning)\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n\nimport { checkScopeAccess } from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { api, internal, internalMutation, mutation, query } from \"./convex\";\nimport { insertEpistemicNode } from \"./epistemicInsert.js\";\nimport { generateGlobalId } from \"./globalId\";\nimport { resolveScope, scopeArgs } from \"./scopeResolverCompat\";\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\ninterface AnswerNodeRow {\n _id: Id<\"epistemicNodes\">;\n canonicalText?: string;\n createdAt?: number;\n createdBy?: string;\n globalId: string;\n metadata?: Record<string, unknown>;\n nodeType?: string;\n projectId?: string;\n status?: string;\n supersededBy?: Id<\"epistemicNodes\">;\n topicId?: Id<\"topics\">;\n}\n\ninterface IndexQuery {\n eq(field: string, value: unknown): IndexQuery;\n}\n\ninterface FilterQuery {\n eq(left: unknown, right: unknown): unknown;\n field(name: string): unknown;\n or(...conditions: unknown[]): unknown;\n}\n\ninterface AnswerEdgeRow {\n fromNodeId: Id<\"epistemicNodes\">;\n}\n\ntype AnswerConfidence =\n | \"definitive\"\n | \"moderate\"\n | \"speculative\"\n | \"strong\"\n | \"weak\";\n\ninterface AnswerScopeArgs {\n projectId?: string;\n topicId?: string;\n}\n\ninterface CreateAnswerArgs extends AnswerScopeArgs {\n answerSource?: string;\n answerText: string;\n confidence?: AnswerConfidence;\n evidenceNodeIds?: Id<\"epistemicNodes\">[];\n questionNodeId: Id<\"epistemicNodes\">;\n sprintId?: string;\n userId: string;\n}\n\ninterface CreateInternalAnswerArgs extends AnswerScopeArgs {\n answerSource?: string;\n answerText: string;\n backfilledFromQuestionId?: string;\n confidence?: string;\n evidenceNodeIds?: Id<\"epistemicNodes\">[];\n questionNodeId: Id<\"epistemicNodes\">;\n sprintId?: string;\n userId: string;\n}\n\ninterface QuestionAnswerQueryArgs {\n includeSuperseded?: boolean;\n questionNodeId: Id<\"epistemicNodes\">;\n}\n\ninterface QuestionOnlyQueryArgs {\n questionNodeId: Id<\"epistemicNodes\">;\n}\n\ninterface BackfillAnswerNodesArgs extends AnswerScopeArgs {\n dryRun?: boolean;\n userId: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? (value as Id<TableName>)\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 readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nfunction readAnswerNodeRow(value: unknown): AnswerNodeRow | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(value._id);\n const globalId = readOptionalString(value.globalId);\n if (!(id && globalId)) {\n return null;\n }\n\n const row: AnswerNodeRow = { _id: id, globalId };\n const canonicalText = readOptionalString(value.canonicalText);\n const createdAt = readOptionalNumber(value.createdAt);\n const createdBy = readOptionalString(value.createdBy);\n const metadata = readRecord(value.metadata);\n const nodeType = readOptionalString(value.nodeType);\n const projectId = readOptionalString(value.projectId);\n const status = readOptionalString(value.status);\n const supersededBy = readConvexId<\"epistemicNodes\">(value.supersededBy);\n const topicId = readConvexId<\"topics\">(value.topicId);\n\n if (canonicalText !== undefined) {\n row.canonicalText = canonicalText;\n }\n if (createdAt !== undefined) {\n row.createdAt = createdAt;\n }\n if (createdBy !== undefined) {\n row.createdBy = createdBy;\n }\n if (metadata !== undefined) {\n row.metadata = metadata;\n }\n if (nodeType !== undefined) {\n row.nodeType = nodeType;\n }\n if (projectId !== undefined) {\n row.projectId = projectId;\n }\n if (status !== undefined) {\n row.status = status;\n }\n if (supersededBy !== undefined) {\n row.supersededBy = supersededBy;\n }\n if (topicId !== undefined) {\n row.topicId = topicId;\n }\n\n return row;\n}\n\nfunction readAnswerEdgeRow(value: unknown): AnswerEdgeRow | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const fromNodeId = readConvexId<\"epistemicNodes\">(value.fromNodeId);\n return fromNodeId ? { fromNodeId } : null;\n}\n\nfunction readRowList<T>(\n values: readonly unknown[],\n reader: (value: unknown) => T | null\n): T[] {\n return values.flatMap((value) => {\n const row = reader(value);\n return row ? [row] : [];\n });\n}\n\nfunction generateContentHash(text: string): string {\n const content = `answer:${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 legacy hash used for persisted answer metadata compatibility.\n hash = (hash << 5) + hash + content.charCodeAt(i);\n // biome-ignore lint/suspicious/noBitwiseOperators: Preserve deterministic legacy hash used for persisted answer metadata compatibility.\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\ninterface AnswerCreateMutationArgs {\n answerSource: string | undefined;\n answerText: string;\n backfilledFromQuestionId?: string;\n clearSupersededByBeforeInsert?: boolean;\n confidence: string | undefined;\n edgeTopicId: string;\n evidenceNodeIds: Id<\"epistemicNodes\">[] | undefined;\n questionNode: AnswerNodeRow;\n questionNodeId: Id<\"epistemicNodes\">;\n sprintId: string | undefined;\n topicId: string;\n userId: string;\n}\n\nasync function getActiveAnswersForQuestion(\n ctx: MutationCtx,\n questionNode: AnswerNodeRow,\n topicId: string,\n questionNodeId: Id<\"epistemicNodes\">\n): Promise<AnswerNodeRow[]> {\n const answers = readRowList(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: IndexQuery) =>\n q\n .eq(\"topicId\", questionNode.topicId ?? topicId)\n .eq(\"nodeType\", \"answer\")\n )\n .collect(),\n readAnswerNodeRow\n );\n\n return answers.filter((answerNode) => {\n const answerMeta = answerNode.metadata ?? {};\n return (\n answerMeta.questionNodeId === questionNodeId &&\n answerMeta.isLatest === true &&\n answerNode.status === \"active\"\n );\n });\n}\n\nfunction getNextAnswerVersion(activeAnswers: AnswerNodeRow[]): number {\n if (activeAnswers.length === 0) {\n return 1;\n }\n\n return (\n Math.max(\n ...activeAnswers.map((answerNode) => {\n const answerMeta = answerNode.metadata ?? {};\n return readOptionalNumber(answerMeta.versionNumber) ?? 0;\n })\n ) + 1\n );\n}\n\nasync function supersedeActiveAnswers(\n ctx: MutationCtx,\n activeAnswers: AnswerNodeRow[],\n now: number,\n clearSupersededByBeforeInsert: boolean\n): Promise<void> {\n for (const activeAnswer of activeAnswers) {\n const metadata = {\n ...activeAnswer.metadata,\n isLatest: false,\n };\n\n await ctx.db.patch(activeAnswer._id, {\n status: \"superseded\",\n updatedAt: now,\n metadata,\n ...(clearSupersededByBeforeInsert\n ? {\n supersededBy: undefined,\n }\n : {}),\n });\n }\n}\n\nasync function collectEvidenceGlobalIds(\n ctx: MutationCtx,\n evidenceNodeIds: Id<\"epistemicNodes\">[] | undefined\n): Promise<string[]> {\n const evidenceGlobalIds: string[] = [];\n if (!evidenceNodeIds) {\n return evidenceGlobalIds;\n }\n\n for (const evidenceNodeId of evidenceNodeIds) {\n const evidenceNode = readAnswerNodeRow(await ctx.db.get(evidenceNodeId));\n if (evidenceNode) {\n evidenceGlobalIds.push(evidenceNode.globalId);\n }\n }\n return evidenceGlobalIds;\n}\n\nfunction resolveAnswerSource(\n answerSource: string | undefined\n): \"human\" | \"ai_generated\" {\n return answerSource === \"human\" ? \"human\" : \"ai_generated\";\n}\n\nfunction insertAnswerNodeRecord(\n ctx: MutationCtx,\n args: {\n questionNode: AnswerNodeRow;\n topicId: string;\n answerText: string;\n contentHash: string;\n versionNumber: number;\n evidenceGlobalIds: string[];\n globalId: string;\n now: number;\n args: Pick<\n AnswerCreateMutationArgs,\n \"answerSource\" | \"sprintId\" | \"userId\" | \"backfilledFromQuestionId\"\n >;\n }\n): Promise<Id<\"epistemicNodes\">> {\n return insertEpistemicNode(ctx, {\n globalId: args.globalId,\n projectId: args.topicId,\n topicId: args.questionNode.topicId,\n nodeType: \"answer\",\n epistemicLayer: \"L2\",\n canonicalText: args.answerText,\n contentHash: args.contentHash,\n status: \"active\",\n sourceType: resolveAnswerSource(args.args.answerSource),\n createdBy: args.args.userId,\n createdAt: args.now,\n updatedAt: args.now,\n metadata: {\n questionGlobalId: args.questionNode.globalId,\n questionNodeId: String(args.questionNode._id),\n versionNumber: args.versionNumber,\n isLatest: true,\n evidenceGlobalIds: args.evidenceGlobalIds,\n evidenceCount: args.evidenceGlobalIds.length,\n answeredBy: args.args.userId,\n answerSource: args.args.answerSource || \"human\",\n sprintId: args.args.sprintId,\n ...(args.args.backfilledFromQuestionId\n ? {\n backfilledFromQuestionId: args.args.backfilledFromQuestionId,\n }\n : {}),\n },\n });\n}\n\nasync function setAnswerSupersession(\n ctx: MutationCtx,\n activeAnswers: AnswerNodeRow[],\n newNodeId: Id<\"epistemicNodes\">\n): Promise<void> {\n for (const activeAnswer of activeAnswers) {\n await ctx.db.patch(activeAnswer._id, {\n supersededBy: newNodeId,\n });\n }\n}\n\nasync function scheduleAnswerSyncJobs(\n ctx: MutationCtx,\n args: {\n nodeId: Id<\"epistemicNodes\">;\n topicId: string;\n answerText: string;\n questionNode: AnswerNodeRow;\n userId: string;\n }\n): Promise<void> {\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.scheduler.runAfter(\n 0,\n api.embeddingActions.generateEpistemicNodeEmbedding,\n {\n nodeId: args.nodeId,\n projectId: args.topicId,\n topicId: args.questionNode.topicId\n ? String(args.questionNode.topicId)\n : undefined,\n createdBy: args.userId,\n nodeType: \"answer\",\n text: args.answerText.slice(0, 20_000),\n }\n );\n\n await ctx.scheduler.runAfter(\n 0,\n internal.sprints.embedProjectThemeCollectiveInternal,\n {\n projectId: args.topicId,\n userId: args.userId,\n }\n );\n}\n\nasync function scheduleAnswerGraphEdges(\n ctx: MutationCtx,\n args: {\n questionNode: AnswerNodeRow;\n questionNodeId: Id<\"epistemicNodes\">;\n userId: string;\n evidenceNodeIds: Id<\"epistemicNodes\">[] | undefined;\n activeAnswers: AnswerNodeRow[];\n answerGlobalId: string;\n edgeTopicId: string;\n }\n): Promise<void> {\n // Responds-to edge.\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: generateGlobalId(),\n fromGlobalId: args.answerGlobalId,\n toGlobalId: args.questionNode.globalId,\n edgeType: \"responds_to\",\n weight: 1.0,\n createdBy: args.userId,\n topicId: args.edgeTopicId,\n fromNodeType: \"answer\",\n toNodeType: \"question\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n\n // Supersedes edges.\n for (const activeAnswer of args.activeAnswers) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: generateGlobalId(),\n fromGlobalId: args.answerGlobalId,\n toGlobalId: activeAnswer.globalId,\n edgeType: \"supersedes\",\n createdBy: args.userId,\n topicId: args.edgeTopicId,\n fromNodeType: \"answer\",\n toNodeType: \"answer\",\n fromLayer: \"L2\",\n toLayer: \"L2\",\n });\n }\n\n // Evidence edges.\n if (args.evidenceNodeIds) {\n for (const evidenceNodeId of args.evidenceNodeIds) {\n const evidenceNode = readAnswerNodeRow(await ctx.db.get(evidenceNodeId));\n if (evidenceNode) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: generateGlobalId(),\n fromGlobalId: args.answerGlobalId,\n toGlobalId: evidenceNode.globalId,\n edgeType: \"derived_from\",\n createdBy: args.userId,\n topicId: args.edgeTopicId,\n fromNodeType: \"answer\",\n toNodeType: \"evidence\",\n fromLayer: \"L2\",\n toLayer: \"L2\",\n });\n }\n }\n }\n\n // Re-edge from question evidence nodes.\n const evidenceEdges = readRowList(\n await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q: IndexQuery) =>\n q.eq(\"toNodeId\", args.questionNodeId).eq(\"edgeType\", \"derived_from\")\n )\n .collect(),\n readAnswerEdgeRow\n );\n\n for (const evidenceEdge of evidenceEdges) {\n const evidenceNode = readAnswerNodeRow(\n await ctx.db.get(evidenceEdge.fromNodeId)\n );\n if (!evidenceNode) {\n continue;\n }\n\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: generateGlobalId(),\n fromGlobalId: evidenceNode.globalId,\n toGlobalId: args.answerGlobalId,\n edgeType: \"derived_from\",\n createdBy: args.userId,\n topicId: args.edgeTopicId,\n fromNodeType: \"evidence\",\n toNodeType: \"answer\",\n fromLayer: \"L2\",\n toLayer: \"L2\",\n });\n }\n}\n\nasync function createAnswerMutationResult(\n ctx: MutationCtx,\n args: AnswerCreateMutationArgs\n): Promise<{\n nodeId: Id<\"epistemicNodes\">;\n globalId: string;\n versionNumber: number;\n}> {\n const now = Date.now();\n const answerText = args.answerText;\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(answerText);\n const activeAnswers = await getActiveAnswersForQuestion(\n ctx,\n args.questionNode,\n args.topicId,\n args.questionNodeId\n );\n const versionNumber = getNextAnswerVersion(activeAnswers);\n\n await supersedeActiveAnswers(\n ctx,\n activeAnswers,\n now,\n !!args.clearSupersededByBeforeInsert\n );\n\n const evidenceGlobalIds = await collectEvidenceGlobalIds(\n ctx,\n args.evidenceNodeIds\n );\n\n const nodeId = await insertAnswerNodeRecord(ctx, {\n questionNode: args.questionNode,\n topicId: args.topicId,\n answerText,\n contentHash,\n versionNumber,\n evidenceGlobalIds,\n globalId,\n now,\n args: {\n answerSource: args.answerSource,\n sprintId: args.sprintId,\n userId: args.userId,\n backfilledFromQuestionId: args.backfilledFromQuestionId,\n },\n });\n\n await setAnswerSupersession(ctx, activeAnswers, nodeId);\n\n await scheduleAnswerSyncJobs(ctx, {\n nodeId,\n topicId: args.topicId,\n questionNode: args.questionNode,\n userId: args.userId,\n answerText,\n });\n\n await scheduleAnswerGraphEdges(ctx, {\n questionNode: args.questionNode,\n questionNodeId: args.questionNodeId,\n userId: args.userId,\n evidenceNodeIds: args.evidenceNodeIds,\n activeAnswers,\n answerGlobalId: globalId,\n edgeTopicId: args.edgeTopicId,\n });\n\n const answerQuality = args.confidence || \"moderate\";\n await ctx.db.patch(args.questionNodeId, {\n answerQuality,\n updatedAt: now,\n });\n\n const auditState = args.backfilledFromQuestionId\n ? {\n answerText: answerText.slice(0, 200),\n versionNumber,\n questionNodeId: String(args.questionNodeId),\n backfilled: true,\n }\n : {\n answerText: answerText.slice(0, 200),\n versionNumber,\n questionNodeId: String(args.questionNodeId),\n confidence: answerQuality,\n };\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"answer\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: args.topicId,\n newState: auditState,\n });\n\n return { nodeId, globalId, versionNumber };\n}\n\n// =============================================================================\n// CREATE\n// =============================================================================\n\n/**\n * Create a new answer node for a question.\n *\n * 1. Validates the question exists\n * 2. Determines version number\n * 3. Supersedes previous active answer (if any)\n * 4. Creates the answer node\n * 5. Creates responds_to edge (Answer → Question)\n * 6. Creates supersedes edge (NewAnswer → OldAnswer) if versioning\n * 7. Creates based_on edges (Answer → Evidence) for each evidence node\n * 8. Updates question's answerQuality field\n * 9. Logs to epistemicAudit\n */\nexport const create = mutation({\n args: {\n ...scopeArgs,\n questionNodeId: v.id(\"epistemicNodes\"),\n answerText: v.string(),\n confidence: v.optional(\n v.union(\n v.literal(\"definitive\"),\n v.literal(\"strong\"),\n v.literal(\"moderate\"),\n v.literal(\"weak\"),\n v.literal(\"speculative\")\n )\n ),\n evidenceNodeIds: v.optional(v.array(v.id(\"epistemicNodes\"))),\n answerSource: v.optional(v.string()),\n sprintId: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: CreateAnswerArgs) => {\n const scope = await resolveScope(ctx, args);\n const topicId = scope?.topicId ? String(scope.topicId) : args.topicId || \"\";\n await checkScopeAccess(ctx, topicId, args.userId);\n\n // 1. Validate question exists\n const questionNode = readAnswerNodeRow(\n await ctx.db.get(args.questionNodeId)\n );\n if (questionNode?.nodeType !== \"question\") {\n throw new Error(\"Question node not found or not a question type\");\n }\n\n return createAnswerMutationResult(ctx, {\n questionNode,\n questionNodeId: args.questionNodeId,\n answerText: args.answerText,\n confidence: args.confidence,\n evidenceNodeIds: args.evidenceNodeIds,\n answerSource: args.answerSource,\n sprintId: args.sprintId,\n userId: args.userId,\n topicId,\n edgeTopicId: String(args.topicId ?? \"\"),\n clearSupersededByBeforeInsert: true,\n });\n },\n});\n\n// =============================================================================\n// CREATE INTERNAL (for scheduler / other modules)\n// =============================================================================\n\n/**\n * Internal mutation for creating answer nodes.\n * Called from epistemicQuestions.updateStatus when status === \"answered\".\n */\nexport const createInternal = internalMutation({\n args: {\n ...scopeArgs,\n questionNodeId: v.id(\"epistemicNodes\"),\n answerText: v.string(),\n confidence: v.optional(v.string()),\n evidenceNodeIds: v.optional(v.array(v.id(\"epistemicNodes\"))),\n answerSource: v.optional(v.string()),\n sprintId: v.optional(v.string()),\n userId: v.string(),\n backfilledFromQuestionId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: CreateInternalAnswerArgs) => {\n const scope = await resolveScope(ctx, args);\n const topicId = scope?.topicId ? String(scope.topicId) : args.topicId || \"\";\n\n // Validate question exists\n const questionNode = readAnswerNodeRow(\n await ctx.db.get(args.questionNodeId)\n );\n if (questionNode?.nodeType !== \"question\") {\n throw new Error(\"Question node not found or not a question type\");\n }\n return createAnswerMutationResult(ctx, {\n questionNode,\n questionNodeId: args.questionNodeId,\n answerText: args.answerText,\n confidence: args.confidence,\n evidenceNodeIds: args.evidenceNodeIds,\n answerSource: args.answerSource,\n sprintId: args.sprintId,\n userId: args.userId,\n topicId,\n edgeTopicId: String(args.topicId ?? \"\"),\n backfilledFromQuestionId: args.backfilledFromQuestionId,\n });\n },\n});\n\n// =============================================================================\n// QUERIES\n// =============================================================================\n\n/**\n * Get all answers for a question, optionally including superseded.\n */\nexport const getByQuestion = query({\n args: {\n questionNodeId: v.id(\"epistemicNodes\"),\n includeSuperseded: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: QuestionAnswerQueryArgs) => {\n const questionNode = readAnswerNodeRow(\n await ctx.db.get(args.questionNodeId)\n );\n if (questionNode?.nodeType !== \"question\") {\n return [];\n }\n\n const topicId = questionNode.topicId;\n if (!topicId) {\n return [];\n }\n const answers = readRowList(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: IndexQuery) =>\n q.eq(\"topicId\", topicId).eq(\"nodeType\", \"answer\")\n )\n .collect(),\n readAnswerNodeRow\n );\n\n // Filter to answers for this question\n const questionIdStr = String(args.questionNodeId);\n const filtered = answers.filter((a) => {\n const meta = a.metadata ?? {};\n return meta.questionNodeId === questionIdStr;\n });\n\n if (!args.includeSuperseded) {\n return filtered.filter((a) => a.status === \"active\");\n }\n\n // Sort by version number (newest first)\n filtered.sort((a, b) => {\n const metaA = a.metadata ?? {};\n const metaB = b.metadata ?? {};\n return (\n (readOptionalNumber(metaB.versionNumber) ?? 0) -\n (readOptionalNumber(metaA.versionNumber) ?? 0)\n );\n });\n\n return filtered;\n },\n});\n\n/**\n * Get the single active (latest) answer for a question.\n */\nexport const getLatestForQuestion = query({\n args: {\n questionNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: QuestionOnlyQueryArgs) => {\n const questionNode = readAnswerNodeRow(\n await ctx.db.get(args.questionNodeId)\n );\n if (questionNode?.nodeType !== \"question\") {\n return null;\n }\n\n // Filter status === \"active\" at DB level to reduce JS-side work.\n // metadata.questionNodeId filtering must stay in JS (no index on metadata fields).\n const topicId = questionNode.topicId;\n if (!topicId) {\n return null;\n }\n const answers = readRowList(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: IndexQuery) =>\n q.eq(\"topicId\", topicId).eq(\"nodeType\", \"answer\")\n )\n .filter((q: FilterQuery) => q.eq(q.field(\"status\"), \"active\"))\n .collect(),\n readAnswerNodeRow\n );\n\n const questionIdStr = String(args.questionNodeId);\n const latest = answers.find((a) => {\n const meta = a.metadata ?? {};\n return meta.questionNodeId === questionIdStr && meta.isLatest === true;\n });\n\n return latest || null;\n },\n});\n\n/**\n * Get full version history for answers to a question.\n * Returns answers ordered by version number (newest first).\n */\nexport const getVersionHistory = query({\n args: {\n questionNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: QuestionOnlyQueryArgs) => {\n const questionNode = readAnswerNodeRow(\n await ctx.db.get(args.questionNodeId)\n );\n if (questionNode?.nodeType !== \"question\") {\n return [];\n }\n\n // Filter status at DB level; metadata.questionNodeId must filter in JS (no index on metadata).\n const topicId = questionNode.topicId;\n if (!topicId) {\n return [];\n }\n const answers = readRowList(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: IndexQuery) =>\n q.eq(\"topicId\", topicId).eq(\"nodeType\", \"answer\")\n )\n .filter((q: FilterQuery) =>\n q.or(\n q.eq(q.field(\"status\"), \"active\"),\n q.eq(q.field(\"status\"), \"superseded\")\n )\n )\n .collect(),\n readAnswerNodeRow\n );\n\n const questionIdStr = String(args.questionNodeId);\n const history = answers\n .filter((a) => {\n const meta = a.metadata ?? {};\n return meta.questionNodeId === questionIdStr;\n })\n .map((a) => {\n const meta = a.metadata ?? {};\n return {\n _id: a._id,\n globalId: a.globalId,\n answerText: a.canonicalText,\n versionNumber: readOptionalNumber(meta.versionNumber) ?? 1,\n isLatest: meta.isLatest === true,\n status: a.status,\n answeredBy: readOptionalString(meta.answeredBy) ?? a.createdBy,\n answerSource: readOptionalString(meta.answerSource),\n evidenceCount: readOptionalNumber(meta.evidenceCount) ?? 0,\n createdAt: a.createdAt,\n supersededBy: a.supersededBy,\n };\n })\n .sort((a, b) => b.versionNumber - a.versionNumber);\n\n return history;\n },\n});\n\n// =============================================================================\n// BACKFILL: Create answer nodes for questions that have answer text but no node\n// =============================================================================\n\n/**\n * Backfill answer nodes for questions that have answer text in metadata\n * but never had an answer node created (due to the QuestionAnswerEditor bug\n * where saveAnswer passed wrong params to updateStatus).\n *\n * Run once via Convex dashboard:\n * internal.epistemicAnswers.backfillAnswerNodes({ projectId, userId })\n */\nexport const backfillAnswerNodes = internalMutation({\n args: {\n ...scopeArgs,\n userId: v.string(),\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: BackfillAnswerNodesArgs) => {\n const scope = await resolveScope(ctx, args);\n const topicId = scope?.topicId ? String(scope.topicId) : args.topicId;\n const dryRun = args.dryRun ?? false;\n if (!topicId) {\n return {\n questionsWithAnswers: 0,\n alreadyHaveNodes: 0,\n needsBackfill: 0,\n backfilled: 0,\n };\n }\n\n // 1. Find all question nodes with answer text in metadata (TC-C: prefer topic)\n const questions = readRowList(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: IndexQuery) =>\n q.eq(\"topicId\", topicId).eq(\"nodeType\", \"question\")\n )\n .collect(),\n readAnswerNodeRow\n );\n\n const questionsWithAnswers = questions.filter((q) => {\n const meta = q.metadata ?? {};\n const answer = readOptionalString(meta.answer);\n return answer && answer.trim().length > 0;\n });\n\n // 2. Find all existing answer nodes (TC-C: use topic index since projectId is now topicId)\n const existingAnswers = readRowList(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: IndexQuery) =>\n q.eq(\"topicId\", topicId).eq(\"nodeType\", \"answer\")\n )\n .collect(),\n readAnswerNodeRow\n );\n\n // Build set of question IDs that already have answer nodes\n const questionIdsWithAnswerNodes = new Set(\n existingAnswers.map((a) => {\n const meta = a.metadata ?? {};\n return readOptionalString(meta.questionNodeId);\n })\n );\n\n // 3. Filter to questions that need backfill\n const needsBackfill = questionsWithAnswers.filter(\n (q) => !questionIdsWithAnswerNodes.has(String(q._id))\n );\n\n console.log(\n `[backfillAnswerNodes] Found ${questionsWithAnswers.length} questions with answers, ` +\n `${questionIdsWithAnswerNodes.size} already have answer nodes, ` +\n `${needsBackfill.length} need backfill. dryRun=${dryRun}`\n );\n\n if (dryRun) {\n return {\n questionsWithAnswers: questionsWithAnswers.length,\n alreadyHaveNodes: questionIdsWithAnswerNodes.size,\n needsBackfill: needsBackfill.length,\n questions: needsBackfill.map((q) => ({\n id: q._id,\n globalId: q.globalId,\n text: q.canonicalText?.slice(0, 80),\n answer: readOptionalString(q.metadata?.answer)?.slice(0, 80),\n })),\n };\n }\n\n // 4. Create answer nodes for each\n let created = 0;\n for (const question of needsBackfill) {\n const meta = question.metadata ?? {};\n const answerText = readOptionalString(meta.answer);\n if (!answerText) {\n continue;\n }\n const answeredBy = readOptionalString(meta.answeredBy);\n\n await ctx.scheduler.runAfter(\n 0,\n internal.epistemicAnswers.createInternal,\n {\n topicId: String(topicId), // TC-C: migrated from projectId\n questionNodeId: question._id,\n answerText,\n answerSource: answeredBy ? \"human\" : \"ai_generated\",\n userId: answeredBy ?? args.userId,\n backfilledFromQuestionId: String(question._id),\n }\n );\n created++;\n }\n\n return {\n questionsWithAnswers: questionsWithAnswers.length,\n alreadyHaveNodes: questionIdsWithAnswerNodes.size,\n backfilled: created,\n };\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Facade for split epistemic edge primitives and public edge operations. */\n\n// biome-ignore lint/performance/noBarrelFile: Public compatibility facade for split epistemic edge Convex functions.\nexport {\n deleteEdgeFromConvex,\n mirrorEdgeToConvex,\n updateEdgeInConvex,\n} from \"./epistemicEdges.handlers\";\n\nexport {\n edgeTypeValidator,\n epistemicLayerValidator,\n} from \"./epistemicEdges.helpers\";\n\nexport {\n batchCreate,\n cleanupDeprecatedEdges,\n create,\n deleteEdges,\n remove,\n removeBetween,\n update,\n} from \"./epistemicEdges.mutations\";\nexport {\n findContradictions,\n findSupport,\n get,\n getBetween,\n getByGlobalId,\n getByNodes,\n getByProject,\n getByProject as getByTopic,\n getByProjectAndType,\n getBySourceNode,\n getByTargetNode,\n getClusterEdges,\n getEvidenceForBelief,\n getFromNode,\n getLineage,\n getToNode,\n listAll,\n} from \"./epistemicEdges.queries\";\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Shared validators and private helpers for epistemic edge operations.\n */\n\nimport { v } from \"convex/values\";\nimport type { Id, QueryCtx } from \"./convex\";\nimport type {\n EdgeStatusResult,\n SubjectiveOpinionDocument,\n WorkspaceEdgeScope,\n WorkspaceScopedEdge,\n} from \"./epistemicEdges.types\";\n\ninterface TopicIndexQuery {\n eq(field: string, value: unknown): TopicIndexQuery;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\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 readWorkspaceScopedEdge(value: unknown): WorkspaceScopedEdge | 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: WorkspaceScopedEdge = { _id: id, edgeType };\n const projectId = readOptionalString(record.projectId);\n if (projectId !== undefined) {\n edge.projectId = projectId;\n }\n const topicId = readOptionalString(record.topicId);\n if (topicId !== undefined) {\n edge.topicId = topicId;\n }\n return edge;\n}\n\nexport const epistemicLayerValidator = v.union(\n v.literal(\"L4\"),\n v.literal(\"L3\"),\n v.literal(\"L2\"),\n v.literal(\"L1\"),\n v.literal(\"ontological\"),\n v.literal(\"organizational\")\n);\n\nexport const subjectiveOpinionValidator = v.object({\n b: v.number(),\n d: v.number(),\n u: v.number(),\n a: v.number(),\n} satisfies Record<keyof SubjectiveOpinionDocument, unknown>);\n\nexport const edgeTypeValidator = v.union(\n // --- L4 Decision Edges (Phase 2A) ---\n v.literal(\"based_on_belief\"),\n v.literal(\"based_on_question\"),\n v.literal(\"blocked_by_contradiction\"),\n v.literal(\"informed_by_theme\"),\n\n // --- Evidence Flow (L2 → L3, L2 → L1) ---\n v.literal(\"derived_from\"),\n v.literal(\"responds_to\"),\n v.literal(\"informs\"),\n v.literal(\"tests\"),\n v.literal(\"explores\"),\n v.literal(\"qualifies\"),\n\n // --- Synthesis (L2 → L2, L2 → L1) ---\n // \"based_on\" removed — use \"derived_from\" instead\n\n // --- Theme Relationships (L3 → L3) ---\n v.literal(\"relates_to_thesis\"),\n v.literal(\"belongs_to\"),\n v.literal(\"plays_theme\"),\n v.literal(\"scoped_by\"),\n\n // --- Deal/Company ---\n v.literal(\"evaluates\"),\n\n // --- People (ontological → ontological, ontological → L3) ---\n v.literal(\"perspective_on\"),\n v.literal(\"works_at\"),\n v.literal(\"mentioned_in\"),\n v.literal(\"founded_by\"),\n\n // --- Value Chain (ontological → ontological) ---\n v.literal(\"participates_in\"),\n v.literal(\"performs\"),\n v.literal(\"function_in\"),\n v.literal(\"impacts\"),\n\n // --- Investment (ontological → ontological) ---\n v.literal(\"invested_in\"),\n v.literal(\"raised_from\"),\n\n // --- Lifecycle (same layer only) ---\n v.literal(\"supersedes\"),\n v.literal(\"same_as\"),\n\n // --- Same-Type Relationships: Belief ↔ Belief (L3 → L3) ---\n v.literal(\"depends_on\"),\n v.literal(\"supports\"),\n v.literal(\"contains\"),\n\n // --- Belief Cluster Mapping (L3 → L3) ---\n v.literal(\"counterfactual_of\"),\n v.literal(\"cascade_to\"),\n v.literal(\"cascade_from\"),\n v.literal(\"mutually_exclusive\"),\n v.literal(\"correlates_with\"),\n v.literal(\"amplifies\"),\n v.literal(\"precondition_for\"),\n v.literal(\"in_tension_with\"),\n\n // --- Belief ↔ Belief: Epistemic Impact (Confidence Propagation) ---\n v.literal(\"falsified_by\"),\n v.literal(\"exclusive_with\"),\n v.literal(\"contradicts\"),\n v.literal(\"collapses_if\"),\n v.literal(\"strengthened_by\"),\n v.literal(\"weakened_by\"),\n v.literal(\"alternative_to\"),\n v.literal(\"subsumes\"),\n v.literal(\"validated_by\"),\n v.literal(\"required_for\"),\n v.literal(\"blocks\"),\n\n // --- Same-Type Relationships: Question ↔ Question (L3 → L3) ---\n v.literal(\"prerequisite_for\"),\n v.literal(\"parallel_to\"),\n\n // --- Same-Type Relationships: Evidence ↔ Evidence (L2 → L2) ---\n v.literal(\"corroborates\"),\n v.literal(\"extends\"),\n v.literal(\"same_source_as\"),\n v.literal(\"same_theme_as\"),\n\n // --- NEW: Deep Epistemic Analysis Edges (Phase: Schema Upgrade) ---\n v.literal(\"assumes\"),\n v.literal(\"would_predict\"),\n v.literal(\"analogous_to\"),\n v.literal(\"independent_of\"),\n\n // --- Entity↔Belief Bridge (OE-B) ---\n v.literal(\"competes_with\")\n);\n\nexport function buildEdgeStatusSuccessResult(): EdgeStatusResult {\n return { success: true };\n}\n\nexport function buildEdgeNotFoundResult(): EdgeStatusResult {\n const result = {} as Extract<\n EdgeStatusResult,\n { success: false; error: \"Edge not found\" }\n >;\n result.success = false;\n result.error = \"Edge not found\";\n return result;\n}\n\nexport function buildEdgeMirrorSkippedResult(): EdgeStatusResult {\n return {\n success: false,\n reason: \"source_not_in_convex\",\n };\n}\n\nexport function buildEdgeMirrorMissingResult(): EdgeStatusResult {\n return {\n success: false,\n reason: \"not_found\",\n };\n}\n\nexport function buildEdgeMirrorWriteResult(\n edgeId: Id<\"epistemicEdges\">,\n existed: boolean\n): EdgeStatusResult {\n return {\n success: true,\n edgeId,\n existed,\n };\n}\n\nexport function edgeMatchesWorkspaceReasoningScope(\n edge: Pick<WorkspaceScopedEdge, \"topicId\" | \"projectId\">,\n scope: WorkspaceEdgeScope\n): boolean {\n return (\n (scope.topicId !== undefined && edge.topicId === String(scope.topicId)) ||\n (scope.projectId !== undefined &&\n (edge.projectId === scope.projectId || edge.topicId === scope.projectId))\n );\n}\n\nexport async function collectScopedEdges(\n ctx: QueryCtx,\n scope: WorkspaceEdgeScope,\n scanLimit: number\n): Promise<WorkspaceScopedEdge[]> {\n const queries: Promise<unknown[]>[] = [];\n\n if (scope.topicId) {\n queries.push(\n ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_topic\", (q: TopicIndexQuery) =>\n q.eq(\"topicId\", scope.topicId)\n )\n .order(\"desc\")\n .take(scanLimit)\n );\n }\n\n // Kernel v2: also check edges scoped to projectId (many edges still have\n // topicId=s97 scope while UI passes projectId=n97). Query both to catch all.\n if (scope.projectId) {\n queries.push(\n ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_topic\", (q: TopicIndexQuery) =>\n q.eq(\"topicId\", scope.projectId)\n )\n .order(\"desc\")\n .take(scanLimit)\n );\n }\n\n const seen = new Set<string>();\n const deduped: WorkspaceScopedEdge[] = [];\n\n const flattened = (await Promise.all(queries)).flat();\n for (const value of flattened) {\n const edge = readWorkspaceScopedEdge(value);\n if (!edge) {\n continue;\n }\n const key = String(edge._id);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n deduped.push(edge);\n }\n\n return deduped;\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Internal mutations for Neo4j/Convex dual-write edge mirroring.\n */\n\nimport { REASONING_METHODS, type ReasoningMethod } from \"@lucern/contracts\";\nimport type { EpistemicLayer } from \"@lucern/contracts/graph-types\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport { type Id, internalMutation } from \"./convex\";\nimport {\n buildEdgeMirrorMissingResult,\n buildEdgeMirrorSkippedResult,\n buildEdgeMirrorWriteResult,\n buildEdgeStatusSuccessResult,\n subjectiveOpinionValidator,\n} from \"./epistemicEdges.helpers\";\nimport type { SubjectiveOpinionDocument } from \"./epistemicEdges.types\";\nimport { insertEpistemicEdge } from \"./epistemicInsert.js\";\nimport { optionalScopeArgs } from \"./topicScope\";\n\ntype EdgeConstraint = \"alternative\" | \"counterfactual\" | \"xor\";\ntype EdgePropagationMode = \"continuous\" | \"threshold\";\ntype EdgeLogicalRole =\n | \"contributory\"\n | \"corroborative\"\n | \"necessary\"\n | \"necessary_sufficient\"\n | \"sufficient\";\ntype EdgeTemporalClass =\n | \"cyclical\"\n | \"point_in_time\"\n | \"structural\"\n | \"transient\";\n\ninterface MirrorEdgeToConvexArgs {\n blocking?: boolean;\n conditionalA?: SubjectiveOpinionDocument;\n conditionalNotA?: SubjectiveOpinionDocument;\n confidence?: number;\n constraint?: string;\n context?: string;\n createdBy: string;\n derivationType?: string;\n edgeType: string;\n fromGlobalId: string;\n fromLayer?: string;\n fromNodeType?: string;\n globalId: string;\n implicit?: boolean;\n logicalRole?: string;\n projectId?: string;\n propagation?: string;\n reasoningMethod?: string;\n temporalClass?: string;\n toGlobalId: string;\n toLayer?: string;\n toNodeType?: string;\n topicId?: string;\n validFrom?: number;\n validUntil?: number;\n weight?: number;\n workspaceId?: string;\n}\n\ninterface DeleteEdgeFromConvexArgs {\n globalId: string;\n}\n\ninterface UpdateEdgeInConvexArgs {\n blocking?: boolean;\n conditionalA?: SubjectiveOpinionDocument;\n conditionalNotA?: SubjectiveOpinionDocument;\n confidence?: number;\n constraint?: string;\n context?: string;\n derivationType?: string;\n globalId: string;\n implicit?: boolean;\n propagation?: string;\n weight?: number;\n}\n\ninterface EdgeMirrorNodeRow {\n globalId: string;\n}\n\nconst EDGE_CONSTRAINTS = new Set<EdgeConstraint>([\n \"alternative\",\n \"counterfactual\",\n \"xor\",\n]);\nconst EDGE_PROPAGATION_MODES = new Set<EdgePropagationMode>([\n \"continuous\",\n \"threshold\",\n]);\nconst EDGE_LOGICAL_ROLES = new Set<EdgeLogicalRole>([\n \"contributory\",\n \"corroborative\",\n \"necessary\",\n \"necessary_sufficient\",\n \"sufficient\",\n]);\nconst EDGE_TEMPORAL_CLASSES = new Set<EdgeTemporalClass>([\n \"cyclical\",\n \"point_in_time\",\n \"structural\",\n \"transient\",\n]);\nconst EPISTEMIC_LAYERS = new Set<EpistemicLayer>([\n \"L4\",\n \"L3\",\n \"L2\",\n \"L1\",\n \"ontological\",\n \"organizational\",\n]);\nconst REASONING_METHOD_SET = new Set<ReasoningMethod>(REASONING_METHODS);\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n const normalized = readOptionalString(value);\n return normalized ? (normalized as Id<TableName>) : null;\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 readEdgeMirrorNodeRow(value: unknown): EdgeMirrorNodeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const globalId = readOptionalString(record.globalId);\n return globalId ? { globalId } : null;\n}\n\nfunction requireEdgeId(value: unknown, context: string): Id<\"epistemicEdges\"> {\n const id = readConvexId<\"epistemicEdges\">(value);\n if (!id) {\n throw new Error(`${context} requires a stored epistemic edge id.`);\n }\n return id;\n}\n\nfunction readOptionalEnum<TValue extends string>(\n value: string | undefined,\n allowed: ReadonlySet<TValue>,\n fieldName: string\n): TValue | undefined {\n if (value === undefined) {\n return;\n }\n if (allowed.has(value as TValue)) {\n return value as TValue;\n }\n throw new Error(`${fieldName} received unsupported value \"${value}\".`);\n}\n\n/**\n * Internal mutation to mirror a Neo4j edge to Convex for reactive UI.\n * Called by createEdge action for edge types that need reactive UI updates.\n */\nexport const mirrorEdgeToConvex = internalMutation({\n args: {\n globalId: v.string(),\n fromGlobalId: v.string(),\n toGlobalId: v.string(),\n edgeType: v.string(),\n weight: v.optional(v.number()),\n confidence: v.optional(v.number()),\n context: v.optional(v.string()),\n derivationType: v.optional(v.string()),\n createdBy: v.string(),\n ...optionalScopeArgs,\n fromLayer: v.optional(v.string()),\n toLayer: v.optional(v.string()),\n fromNodeType: v.optional(v.string()),\n toNodeType: v.optional(v.string()),\n reasoningMethod: v.optional(v.string()),\n logicalRole: v.optional(v.string()),\n temporalClass: v.optional(v.string()),\n validFrom: v.optional(v.number()),\n validUntil: v.optional(v.number()),\n constraint: v.optional(v.string()),\n propagation: v.optional(v.string()),\n blocking: v.optional(v.boolean()),\n implicit: v.optional(v.boolean()),\n conditionalA: v.optional(subjectiveOpinionValidator),\n conditionalNotA: v.optional(subjectiveOpinionValidator),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: MirrorEdgeToConvexArgs) => {\n const fromNode = readEdgeMirrorNodeRow(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", args.fromGlobalId))\n .first()\n );\n\n if (!fromNode) {\n console.log(\n `[Dual-Write] Skipping mirror - source node not in Convex: ${args.fromGlobalId}`\n );\n return buildEdgeMirrorSkippedResult();\n }\n\n const toNode = readEdgeMirrorNodeRow(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", args.toGlobalId))\n .first()\n );\n\n const existing = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", args.globalId))\n .first();\n\n if (existing) {\n console.log(`[Dual-Write] Edge already exists: ${args.globalId}`);\n return buildEdgeMirrorWriteResult(\n requireEdgeId(existing._id, \"Edge mirror write result\"),\n true\n );\n }\n\n if (!toNode) {\n console.log(\n `[Dual-Write] Skipping mirror - to-node not in Convex: ${args.toGlobalId} (edge ${args.globalId} type ${args.edgeType})`\n );\n return buildEdgeMirrorSkippedResult();\n }\n\n const now = Date.now();\n const edgeId = await insertEpistemicEdge(ctx, {\n globalId: args.globalId,\n // C2-RR.4 Defect E — endpoints are canonical node globalIds, not Convex\n // doc ids. fromNode/toNode are resolved by_globalId above, so their\n // stored globalId equals args.from/toGlobalId; persisting the doc _id here\n // was the \"mixed _id/globalId\" defect.\n fromNodeId: fromNode.globalId,\n toNodeId: toNode.globalId,\n sourceGlobalId: args.fromGlobalId,\n targetGlobalId: args.toGlobalId,\n edgeType: args.edgeType,\n weight: args.weight,\n confidence: args.confidence,\n context: args.context,\n derivationType: args.derivationType,\n constraint: readOptionalEnum(\n args.constraint,\n EDGE_CONSTRAINTS,\n \"constraint\"\n ),\n propagation: readOptionalEnum(\n args.propagation,\n EDGE_PROPAGATION_MODES,\n \"propagation\"\n ),\n blocking: args.blocking,\n implicit: args.implicit,\n conditionalA: args.conditionalA,\n conditionalNotA: args.conditionalNotA,\n createdBy: args.createdBy,\n createdAt: now,\n updatedAt: now,\n topicId: args.projectId,\n fromLayer: readOptionalEnum(\n args.fromLayer,\n EPISTEMIC_LAYERS,\n \"fromLayer\"\n ),\n toLayer: readOptionalEnum(args.toLayer, EPISTEMIC_LAYERS, \"toLayer\"),\n fromNodeType: args.fromNodeType,\n toNodeType: args.toNodeType,\n reasoningMethod: readOptionalEnum(\n args.reasoningMethod,\n REASONING_METHOD_SET,\n \"reasoningMethod\"\n ),\n logicalRole: readOptionalEnum(\n args.logicalRole,\n EDGE_LOGICAL_ROLES,\n \"logicalRole\"\n ),\n temporalClass: readOptionalEnum(\n args.temporalClass,\n EDGE_TEMPORAL_CLASSES,\n \"temporalClass\"\n ),\n validFrom: args.validFrom,\n validUntil: args.validUntil,\n });\n\n console.log(\n `[Dual-Write] Mirrored edge to Convex: ${args.globalId} (${args.edgeType})`\n );\n return buildEdgeMirrorWriteResult(edgeId, false);\n },\n});\n\n/**\n * Internal mutation to delete a mirrored edge from Convex.\n * Called by deleteEdge action to maintain Convex mirror consistency.\n */\nexport const deleteEdgeFromConvex = internalMutation({\n args: {\n globalId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: DeleteEdgeFromConvexArgs) => {\n const existing = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", args.globalId))\n .first();\n\n if (!existing) {\n return buildEdgeMirrorMissingResult();\n }\n\n await ctx.db.delete(\n requireEdgeId(existing._id, \"Delete mirrored edge from Convex\")\n );\n console.log(`[Dual-Write] Deleted edge from Convex: ${args.globalId}`);\n return buildEdgeStatusSuccessResult();\n },\n});\n\n/**\n * Internal mutation to update a mirrored edge in Convex.\n * Called by updateEdge action to maintain Convex mirror consistency.\n */\nexport const updateEdgeInConvex = internalMutation({\n args: {\n globalId: v.string(),\n weight: v.optional(v.number()),\n confidence: v.optional(v.number()),\n context: v.optional(v.string()),\n derivationType: v.optional(v.string()),\n constraint: v.optional(v.string()),\n propagation: v.optional(v.string()),\n blocking: v.optional(v.boolean()),\n implicit: v.optional(v.boolean()),\n conditionalA: v.optional(subjectiveOpinionValidator),\n conditionalNotA: v.optional(subjectiveOpinionValidator),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: UpdateEdgeInConvexArgs) => {\n const existing = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", args.globalId))\n .first();\n\n if (!existing) {\n return buildEdgeMirrorMissingResult();\n }\n\n const updates: Record<string, unknown> = {\n updatedAt: Date.now(),\n };\n\n if (args.weight !== undefined) {\n updates.weight = args.weight;\n }\n if (args.confidence !== undefined) {\n updates.confidence = args.confidence;\n }\n if (args.context !== undefined) {\n updates.context = args.context;\n }\n if (args.derivationType !== undefined) {\n updates.derivationType = args.derivationType;\n }\n if (args.constraint !== undefined) {\n updates.constraint = args.constraint;\n }\n if (args.propagation !== undefined) {\n updates.propagation = args.propagation;\n }\n if (args.blocking !== undefined) {\n updates.blocking = args.blocking;\n }\n if (args.implicit !== undefined) {\n updates.implicit = args.implicit;\n }\n if (args.conditionalA !== undefined) {\n updates.conditionalA = args.conditionalA;\n }\n if (args.conditionalNotA !== undefined) {\n updates.conditionalNotA = args.conditionalNotA;\n }\n\n await ctx.db.patch(\n requireEdgeId(existing._id, \"Update mirrored edge in Convex\"),\n updates\n );\n console.log(`[Dual-Write] Updated edge in Convex: ${args.globalId}`);\n\n return buildEdgeStatusSuccessResult();\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Mutation operations for epistemic edges.\n */\n\nimport { requireScopeWriteAccess } from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport type { STORAGE_EDGE_TYPE_VALUES } from \"@lucern/contracts/schemas/enums\";\nimport { v } from \"convex/values\";\nimport { type Id, internal, type MutationCtx, mutation } from \"./convex\";\nimport { type EpistemicLayer, validateEdgeLayers } from \"./edgeValidation\";\nimport {\n buildEdgeNotFoundResult,\n buildEdgeStatusSuccessResult,\n edgeTypeValidator,\n subjectiveOpinionValidator,\n} from \"./epistemicEdges.helpers\";\nimport type { SubjectiveOpinionDocument } from \"./epistemicEdges.types\";\nimport { getNodeLayer, isDeprecatedEdgeType } from \"./graphTypes\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\n\ninterface TopicIndexQuery {\n eq(field: string, value: unknown): TopicIndexQuery;\n}\n\ntype EpistemicEdgeType = (typeof STORAGE_EDGE_TYPE_VALUES)[number];\n\ninterface ScopeArgs {\n projectId?: string;\n tenantId?: string;\n topicId?: string;\n workspaceId?: string;\n}\n\ninterface CreateEdgeArgs extends ScopeArgs {\n confidence?: number;\n context?: string;\n createdBy: string;\n derivationType?: string;\n edgeType: EpistemicEdgeType;\n fromNodeId: Id<\"epistemicNodes\">;\n globalId: string;\n skipLayerValidation?: boolean;\n toNodeId: Id<\"epistemicNodes\">;\n weight?: number;\n}\n\ninterface UpdateEdgeArgs {\n analogyBasis?: string;\n analogyStrength?: number;\n blocking?: boolean;\n causal?: boolean;\n conditionalA?: SubjectiveOpinionDocument;\n conditionalNotA?: SubjectiveOpinionDocument;\n confidence?: number;\n constraint?: string;\n containment?: string;\n context?: string;\n derivationType?: string;\n disanalogies?: string[];\n edgeId: Id<\"epistemicEdges\">;\n implicit?: boolean;\n interrogation?: string;\n predictionFulfilled?: boolean;\n predictionFulfilledAt?: number;\n predictionFulfilledBy?: string;\n propagation?: string;\n reasoningMethod?: string;\n userId?: string;\n weight?: number;\n}\n\ninterface RemoveEdgeArgs {\n edgeId: Id<\"epistemicEdges\">;\n userId?: string;\n}\n\ninterface RemoveBetweenArgs {\n edgeType?: EpistemicEdgeType;\n fromNodeId: Id<\"epistemicNodes\">;\n toNodeId: Id<\"epistemicNodes\">;\n}\n\ntype BatchCreateEdgeInput = Omit<CreateEdgeArgs, \"skipLayerValidation\">;\n\ninterface BatchCreateArgs {\n edges: BatchCreateEdgeInput[];\n skipLayerValidation?: boolean;\n}\n\ninterface CleanupDeprecatedEdgesArgs extends ScopeArgs {\n dryRun?: boolean;\n}\n\ninterface DeleteEdgesArgs {\n edgeIds: Id<\"epistemicEdges\">[];\n}\n\ninterface EdgeNodeRow {\n _id: Id<\"epistemicNodes\">;\n epistemicLayer?: EpistemicLayer;\n globalId: string;\n nodeType: string;\n projectId?: string;\n}\n\ninterface EdgeRow {\n _id: Id<\"epistemicEdges\">;\n confidence?: number;\n context?: unknown;\n createdBy?: string;\n description?: unknown;\n edgeType: string;\n fromNodeId?: string;\n globalId: string;\n projectId?: string;\n toNodeId?: string;\n weight?: number;\n}\n\nconst EPISTEMIC_LAYERS = new Set<EpistemicLayer>([\n \"L4\",\n \"L3\",\n \"L2\",\n \"L1\",\n \"ontological\",\n \"organizational\",\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 readEpistemicLayer(value: unknown): EpistemicLayer | undefined {\n const layer = readOptionalString(value);\n return layer && EPISTEMIC_LAYERS.has(layer as EpistemicLayer)\n ? (layer as EpistemicLayer)\n : undefined;\n}\n\nfunction readEdgeNodeRow(value: unknown): EdgeNodeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(record._id);\n const globalId = readOptionalString(record.globalId);\n const nodeType = readOptionalString(record.nodeType);\n if (!(id && globalId && nodeType)) {\n return null;\n }\n\n const node: EdgeNodeRow = { _id: id, globalId, nodeType };\n const epistemicLayer = readEpistemicLayer(record.epistemicLayer);\n if (epistemicLayer !== undefined) {\n node.epistemicLayer = epistemicLayer;\n }\n const projectId = readOptionalString(record.projectId);\n if (projectId !== undefined) {\n node.projectId = projectId;\n }\n return node;\n}\n\nfunction requireEdgeNodeRow(value: unknown, context: string): EdgeNodeRow {\n const node = readEdgeNodeRow(value);\n if (!node) {\n throw new Error(`${context} requires a canonical epistemic node row.`);\n }\n return node;\n}\n\nfunction readEdgeRow(value: unknown): EdgeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicEdges\">(record._id);\n const globalId = readOptionalString(record.globalId);\n const edgeType = readOptionalString(record.edgeType);\n if (!(id && globalId && edgeType)) {\n return null;\n }\n\n const edge: EdgeRow = { _id: id, globalId, edgeType };\n const createdBy = readOptionalString(record.createdBy);\n if (createdBy !== undefined) {\n edge.createdBy = createdBy;\n }\n const fromNodeId = readOptionalString(record.fromNodeId);\n if (fromNodeId !== undefined) {\n edge.fromNodeId = fromNodeId;\n }\n const projectId = readOptionalString(record.projectId);\n if (projectId !== undefined) {\n edge.projectId = projectId;\n }\n const toNodeId = readOptionalString(record.toNodeId);\n if (toNodeId !== undefined) {\n edge.toNodeId = toNodeId;\n }\n const confidence = readOptionalNumber(record.confidence);\n if (confidence !== undefined) {\n edge.confidence = confidence;\n }\n const weight = readOptionalNumber(record.weight);\n if (weight !== undefined) {\n edge.weight = weight;\n }\n if (\"context\" in record) {\n edge.context = record.context;\n }\n if (\"description\" in record) {\n edge.description = record.description;\n }\n return edge;\n}\n\nfunction readEdgeRows(values: readonly unknown[]): EdgeRow[] {\n return values.flatMap((value) => {\n const edge = readEdgeRow(value);\n return edge ? [edge] : [];\n });\n}\n\nfunction nodeEndpointRefs(\n nodeId: Id<\"epistemicNodes\">,\n node: EdgeNodeRow | null\n): string[] {\n const refs = new Set<string>([String(nodeId)]);\n if (node?.globalId) {\n refs.add(node.globalId);\n }\n return [...refs];\n}\n\nasync function collectEdgesBetween(\n ctx: Pick<MutationCtx, \"db\">,\n fromRefs: readonly string[],\n toRefs: readonly string[]\n): Promise<EdgeRow[]> {\n const seen = new Set<string>();\n const edges: EdgeRow[] = [];\n\n for (const fromRef of fromRefs) {\n for (const toRef of toRefs) {\n const rows = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", fromRef).eq(\"toNodeId\", toRef)\n )\n .collect();\n for (const edge of readEdgeRows(rows)) {\n const key = String(edge._id);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n edges.push(edge);\n }\n }\n }\n\n return edges;\n}\n\n/**\n * Create a new edge\n *\n * Phase 2C: Validates layer rules before creation and stores layer metadata\n */\nexport const create = mutation({\n args: {\n globalId: v.string(),\n fromNodeId: v.id(\"epistemicNodes\"),\n toNodeId: v.id(\"epistemicNodes\"),\n edgeType: edgeTypeValidator,\n weight: v.optional(v.number()),\n confidence: v.optional(v.number()),\n context: v.optional(v.string()),\n derivationType: v.optional(v.string()),\n createdBy: v.string(),\n ...optionalScopeArgs,\n skipLayerValidation: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: CreateEdgeArgs) => {\n // Verify both nodes exist\n const fromNode = requireEdgeNodeRow(\n await ctx.db.get(args.fromNodeId),\n \"Create edge source\"\n );\n const toNode = requireEdgeNodeRow(\n await ctx.db.get(args.toNodeId),\n \"Create edge target\"\n );\n\n const resolvedScope = args.topicId\n ? await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n })\n : undefined;\n const resolvedProjectId = resolvedScope?.projectId ?? args.projectId;\n\n if (resolvedProjectId) {\n await requireScopeWriteAccess(ctx, resolvedProjectId, args.createdBy);\n }\n\n const fromLayer =\n fromNode.epistemicLayer ?? getNodeLayer(fromNode.nodeType);\n const toLayer = toNode.epistemicLayer ?? getNodeLayer(toNode.nodeType);\n\n if (!args.skipLayerValidation) {\n const validation = validateEdgeLayers(args.edgeType, fromLayer, toLayer);\n if (!validation.valid) {\n throw new Error(\n `[EdgeValidation] Invalid edge: ${validation.reason}. ` +\n `Attempted: ${args.edgeType} from ${fromNode.nodeType}(${fromLayer}) → ${toNode.nodeType}(${toLayer})`\n );\n }\n }\n\n if (isDeprecatedEdgeType(args.edgeType)) {\n throw new Error(\n `FORBIDDEN: Edge type '${args.edgeType}' has been removed from StackOS schema.`\n );\n }\n\n const existing = await collectEdgesBetween(\n ctx,\n nodeEndpointRefs(args.fromNodeId, fromNode),\n nodeEndpointRefs(args.toNodeId, toNode)\n );\n\n const duplicateEdge = existing.find((e) => e.edgeType === args.edgeType);\n if (duplicateEdge) {\n return { edgeId: duplicateEdge._id, isDuplicate: true };\n }\n\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: args.globalId,\n fromGlobalId: fromNode.globalId,\n toGlobalId: toNode.globalId,\n edgeType: args.edgeType,\n weight: args.weight,\n confidence: args.confidence,\n context: args.context,\n derivationType: args.derivationType,\n createdBy: args.createdBy,\n topicId: resolvedProjectId ? String(resolvedProjectId) : undefined,\n fromNodeType: fromNode.nodeType,\n toNodeType: toNode.nodeType,\n fromLayer,\n toLayer,\n });\n\n const auditProjectId = resolvedProjectId || fromNode.projectId;\n if (auditProjectId) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: args.globalId,\n changeType: \"edge_added\",\n changedAt: Date.now(),\n changedBy: args.createdBy,\n isAgent: false,\n newState: {\n edgeType: args.edgeType,\n fromNodeId: String(args.fromNodeId),\n toNodeId: String(args.toNodeId),\n weight: args.weight,\n },\n projectId: auditProjectId,\n });\n\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n auditProjectId,\n {\n lastActivityAt: Date.now(),\n }\n );\n }\n\n return { edgeGlobalId: args.globalId, isDuplicate: false };\n },\n});\n\n/**\n * Update an edge's properties\n */\nexport const update = mutation({\n args: {\n edgeId: v.id(\"epistemicEdges\"),\n weight: v.optional(v.number()),\n confidence: v.optional(v.number()),\n context: v.optional(v.string()),\n derivationType: v.optional(v.string()),\n userId: v.optional(v.string()),\n constraint: v.optional(v.string()),\n propagation: v.optional(v.string()),\n blocking: v.optional(v.boolean()),\n implicit: v.optional(v.boolean()),\n conditionalA: v.optional(subjectiveOpinionValidator),\n conditionalNotA: v.optional(subjectiveOpinionValidator),\n containment: v.optional(v.string()),\n interrogation: v.optional(v.string()),\n reasoningMethod: v.optional(v.string()),\n analogyBasis: v.optional(v.string()),\n disanalogies: v.optional(v.array(v.string())),\n analogyStrength: v.optional(v.number()),\n causal: v.optional(v.boolean()),\n predictionFulfilled: v.optional(v.boolean()),\n predictionFulfilledAt: v.optional(v.number()),\n predictionFulfilledBy: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: UpdateEdgeArgs) => {\n const { edgeId, userId, ...updates } = args;\n\n const edge = readEdgeRow(await ctx.db.get(edgeId));\n if (!edge) {\n throw new Error(\"Edge not found\");\n }\n\n if (edge.projectId && userId) {\n await requireScopeWriteAccess(ctx, edge.projectId, userId);\n }\n\n const cleanUpdates: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(updates)) {\n if (value !== undefined) {\n cleanUpdates[key] = value;\n }\n }\n\n await ctx.db.patch(edgeId, cleanUpdates);\n\n if (edge.projectId) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edge.globalId,\n changeType: \"updated\",\n changedAt: Date.now(),\n changedBy: userId || edge.createdBy,\n isAgent: false,\n previousState: {\n weight: edge.weight,\n confidence: edge.confidence,\n context: edge.context,\n },\n newState: cleanUpdates,\n projectId: edge.projectId,\n });\n }\n\n return buildEdgeStatusSuccessResult();\n },\n});\n\n/**\n * Delete an edge\n */\nexport const remove = mutation({\n args: {\n edgeId: v.id(\"epistemicEdges\"),\n userId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: RemoveEdgeArgs) => {\n const edge = readEdgeRow(await ctx.db.get(args.edgeId));\n if (!edge) {\n return buildEdgeNotFoundResult();\n }\n\n if (edge.projectId && args.userId) {\n await requireScopeWriteAccess(ctx, edge.projectId, args.userId);\n }\n\n if (edge.projectId) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edge.globalId,\n changeType: \"edge_removed\",\n changedAt: Date.now(),\n changedBy: args.userId || edge.createdBy,\n isAgent: false,\n previousState: {\n edgeType: edge.edgeType,\n fromNodeId: String(edge.fromNodeId),\n toNodeId: edge.toNodeId ? String(edge.toNodeId) : undefined,\n weight: edge.weight,\n },\n projectId: edge.projectId,\n });\n\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n edge.projectId,\n {\n lastActivityAt: Date.now(),\n }\n );\n }\n\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(args.edgeId);\n return buildEdgeStatusSuccessResult();\n },\n});\n\n/**\n * Delete all edges between two nodes\n */\nexport const removeBetween = mutation({\n args: {\n fromNodeId: v.id(\"epistemicNodes\"),\n toNodeId: v.id(\"epistemicNodes\"),\n edgeType: v.optional(edgeTypeValidator),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: RemoveBetweenArgs) => {\n const fromNode = readEdgeNodeRow(await ctx.db.get(args.fromNodeId));\n const toNode = readEdgeNodeRow(await ctx.db.get(args.toNodeId));\n const edges = await collectEdgesBetween(\n ctx,\n nodeEndpointRefs(args.fromNodeId, fromNode),\n nodeEndpointRefs(args.toNodeId, toNode)\n );\n\n let deleted = 0;\n for (const edge of edges) {\n if (!args.edgeType || edge.edgeType === args.edgeType) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n deleted++;\n }\n }\n\n return { deleted };\n },\n});\n\n/**\n * Batch create edges (for migrations or bulk operations)\n *\n * Phase 2C: Validates layer rules and stores layer metadata\n */\nexport const batchCreate = mutation({\n args: {\n edges: v.array(\n v.object({\n globalId: v.string(),\n fromNodeId: v.id(\"epistemicNodes\"),\n toNodeId: v.id(\"epistemicNodes\"),\n edgeType: edgeTypeValidator,\n weight: v.optional(v.number()),\n confidence: v.optional(v.number()),\n context: v.optional(v.string()),\n derivationType: v.optional(v.string()),\n createdBy: v.string(),\n ...optionalScopeArgs,\n })\n ),\n skipLayerValidation: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: BatchCreateArgs) => {\n const results: Array<{ globalId: string; edgeGlobalId: string }> = [];\n const errors: Array<{ globalId: string; error: string }> = [];\n\n for (const edge of args.edges) {\n const fromNode = readEdgeNodeRow(await ctx.db.get(edge.fromNodeId));\n const toNode = readEdgeNodeRow(await ctx.db.get(edge.toNodeId));\n\n if (!(fromNode && toNode)) {\n errors.push({\n globalId: edge.globalId,\n error: \"One or both nodes not found\",\n });\n continue;\n }\n\n const fromLayer =\n fromNode.epistemicLayer ?? getNodeLayer(fromNode.nodeType);\n const toLayer = toNode.epistemicLayer ?? getNodeLayer(toNode.nodeType);\n\n if (!args.skipLayerValidation) {\n const validation = validateEdgeLayers(\n edge.edgeType,\n fromLayer,\n toLayer\n );\n if (!validation.valid) {\n errors.push({\n globalId: edge.globalId,\n error: validation.reason || \"Invalid layer combination\",\n });\n continue;\n }\n }\n\n if (isDeprecatedEdgeType(edge.edgeType)) {\n errors.push({\n globalId: edge.globalId,\n error: `FORBIDDEN: Edge type '${edge.edgeType}' has been removed from StackOS schema.`,\n });\n continue;\n }\n\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edge.globalId,\n fromGlobalId: fromNode.globalId,\n toGlobalId: toNode.globalId,\n edgeType: edge.edgeType,\n weight: edge.weight,\n confidence: edge.confidence,\n context: edge.context,\n derivationType: edge.derivationType,\n createdBy: edge.createdBy,\n topicId: edge.projectId ? String(edge.projectId) : undefined,\n fromNodeType: fromNode.nodeType,\n toNodeType: toNode.nodeType,\n fromLayer,\n toLayer,\n });\n\n results.push({ globalId: edge.globalId, edgeGlobalId: edge.globalId });\n }\n\n const projectIds = new Set<string>(\n args.edges.flatMap((edge) => (edge.projectId ? [edge.projectId] : []))\n );\n for (const pid of projectIds) {\n if (pid) {\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(ctx, pid, {\n lastActivityAt: Date.now(),\n });\n }\n }\n\n return { created: results.length, results, errors };\n },\n});\n\n/**\n * Cleanup deprecated edge types from the graph.\n *\n * Deprecated types: old generic edges superseded by canonical 9 types.\n */\nexport const cleanupDeprecatedEdges = mutation({\n args: {\n ...optionalScopeArgs,\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: CleanupDeprecatedEdgesArgs) => {\n const DEPRECATED_TYPES = [\"contradicts\"];\n const scopeId = args.topicId;\n const allEdges = scopeId\n ? await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_topic\", (q: TopicIndexQuery) =>\n q.eq(\"topicId\", scopeId)\n )\n .collect()\n : [];\n\n const deprecatedEdges = readEdgeRows(allEdges).filter((edge) =>\n DEPRECATED_TYPES.includes(edge.edgeType)\n );\n\n if (args.dryRun) {\n return {\n dryRun: true,\n found: deprecatedEdges.length,\n edges: deprecatedEdges.map((e) => ({\n id: e._id,\n type: e.edgeType,\n from: e.fromNodeId,\n to: e.toNodeId,\n description:\n typeof e.context === \"object\" &&\n e.context &&\n \"description\" in e.context\n ? (e.context as { description?: string }).description\n : (e.description as string | undefined),\n })),\n message: `Would delete ${deprecatedEdges.length} deprecated edges`,\n };\n }\n\n for (const edge of deprecatedEdges) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n }\n\n return {\n dryRun: false,\n deleted: deprecatedEdges.length,\n edges: deprecatedEdges.map((e) => ({\n id: e._id,\n type: e.edgeType,\n })),\n message: `Deleted ${deprecatedEdges.length} deprecated edges`,\n };\n },\n});\n\n/**\n * Delete specific edges by ID (for manual cleanup)\n */\nexport const deleteEdges = mutation({\n args: {\n edgeIds: v.array(v.id(\"epistemicEdges\")),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: DeleteEdgesArgs) => {\n const deleted: string[] = [];\n const notFound: string[] = [];\n\n for (const edgeId of args.edgeIds) {\n const edge = readEdgeRow(await ctx.db.get(edgeId));\n if (edge) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edgeId);\n deleted.push(String(edgeId));\n } else {\n notFound.push(String(edgeId));\n }\n }\n\n return {\n deleted: deleted.length,\n notFound: notFound.length,\n message: `Deleted ${deleted.length} edges, ${notFound.length} not found`,\n };\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Query operations for epistemic edges.\n */\n\nimport { checkScopeAccess } from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport type { STORAGE_EDGE_TYPE_VALUES } from \"@lucern/contracts/schemas/enums\";\nimport { v } from \"convex/values\";\nimport type { Id, QueryCtx } from \"./convex\";\nimport { query } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport {\n type EpistemicLayer,\n getDefaultMinLayer,\n shouldContinueTraversal,\n type TraversalMode,\n} from \"./edgeValidation\";\nimport {\n collectScopedEdges,\n edgeMatchesWorkspaceReasoningScope,\n edgeTypeValidator,\n} from \"./epistemicEdges.helpers\";\nimport { getNodeLayer } from \"./graphTypes\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\n\ntype EpistemicEdgeType = (typeof STORAGE_EDGE_TYPE_VALUES)[number];\n\ninterface EdgeIdArgs {\n edgeId: Id<\"epistemicEdges\">;\n}\n\ninterface GlobalIdArgs {\n globalId: string;\n}\n\ninterface GetFromNodeArgs {\n edgeType?: EpistemicEdgeType;\n fromNodeId: Id<\"epistemicNodes\">;\n}\n\ninterface GetToNodeArgs {\n edgeType?: EpistemicEdgeType;\n toNodeId: Id<\"epistemicNodes\">;\n}\n\ninterface GetBySourceNodeArgs {\n edgeType?: string;\n sourceNodeId: string;\n}\n\ninterface GetByTargetNodeArgs {\n edgeType?: string;\n targetNodeId: string;\n}\n\ninterface GetBetweenArgs {\n edgeType?: EpistemicEdgeType;\n fromNodeId: Id<\"epistemicNodes\">;\n toNodeId: Id<\"epistemicNodes\">;\n}\n\ninterface GetByNodesArgs {\n fromNodeId: Id<\"epistemicNodes\">;\n toNodeId: Id<\"epistemicNodes\">;\n}\n\ninterface ScopeArgs {\n projectId?: string;\n tenantId?: string;\n topicId?: string;\n workspaceId?: string;\n}\n\ninterface GetByProjectAndTypeArgs extends ScopeArgs {\n edgeType: EpistemicEdgeType;\n}\n\ninterface GetByProjectArgs extends ScopeArgs {\n limit?: number;\n userId?: string;\n}\n\ninterface ListAllArgs {\n limit?: number;\n}\n\ninterface NodeIdArgs {\n nodeId: Id<\"epistemicNodes\">;\n}\n\ninterface LineageQueryArgs {\n maxDepth?: number;\n maxLayer?: number;\n minLayer?: number;\n mode?: TraversalMode;\n nodeId: Id<\"epistemicNodes\">;\n}\n\ninterface LineageTraversalState {\n maxDepth: number;\n maxLayer: number;\n minLayer: number;\n mode: TraversalMode;\n}\n\ninterface LineageQueueItem {\n currentLayer: EpistemicLayer;\n depth: number;\n node: EdgeNodeRow;\n}\n\ninterface LineageResultItem {\n depth: number;\n edgeType: string;\n layer: EpistemicLayer;\n node: EdgeNodeRow;\n}\n\ninterface EvidenceForBeliefArgs {\n beliefNodeId: Id<\"epistemicNodes\">;\n}\n\ninterface ClusterEdgesArgs {\n beliefIds: string[];\n}\n\ninterface EdgeNodeRow {\n _id: Id<\"epistemicNodes\">;\n epistemicLayer?: EpistemicLayer;\n globalId?: string;\n nodeType: string;\n [field: string]: unknown;\n}\n\ninterface EdgeRow {\n _id: Id<\"epistemicEdges\">;\n edgeType: string;\n fromGlobalId?: string;\n fromNodeId?: string;\n globalId?: string;\n sourceGlobalId?: string;\n targetGlobalId?: string;\n toGlobalId?: string;\n toLayer?: EpistemicLayer;\n toNodeId?: string;\n weight?: number;\n [field: string]: unknown;\n}\n\nconst DERIVED_FROM_EDGE_TYPE = \"derived_from\";\nconst EPISTEMIC_LAYERS = new Set<EpistemicLayer>([\n \"L4\",\n \"L3\",\n \"L2\",\n \"L1\",\n \"ontological\",\n \"organizational\",\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 readEpistemicLayer(value: unknown): EpistemicLayer | undefined {\n const layer = readOptionalString(value);\n return layer && EPISTEMIC_LAYERS.has(layer as EpistemicLayer)\n ? (layer as EpistemicLayer)\n : undefined;\n}\n\nfunction readEdgeNodeRow(value: unknown): EdgeNodeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(record._id);\n const nodeType = readOptionalString(record.nodeType);\n if (!(id && nodeType)) {\n return null;\n }\n\n const node: EdgeNodeRow = { ...record, _id: id, nodeType };\n const globalId = readOptionalString(record.globalId);\n if (globalId !== undefined) {\n node.globalId = globalId;\n }\n const epistemicLayer = readEpistemicLayer(record.epistemicLayer);\n if (epistemicLayer !== undefined) {\n node.epistemicLayer = epistemicLayer;\n }\n return node;\n}\n\nfunction readEdgeRow(value: unknown): EdgeRow | 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: EdgeRow = { ...record, _id: id, edgeType };\n const globalId = readOptionalString(record.globalId);\n if (globalId !== undefined) {\n edge.globalId = globalId;\n }\n const fromNodeId = readOptionalString(record.fromNodeId);\n if (fromNodeId !== undefined) {\n edge.fromNodeId = fromNodeId;\n }\n const toNodeId = readOptionalString(record.toNodeId);\n if (toNodeId !== undefined) {\n edge.toNodeId = toNodeId;\n }\n const sourceGlobalId = readOptionalString(record.sourceGlobalId);\n if (sourceGlobalId !== undefined) {\n edge.sourceGlobalId = sourceGlobalId;\n }\n const targetGlobalId = readOptionalString(record.targetGlobalId);\n if (targetGlobalId !== undefined) {\n edge.targetGlobalId = targetGlobalId;\n }\n const fromGlobalId = readOptionalString(record.fromGlobalId);\n if (fromGlobalId !== undefined) {\n edge.fromGlobalId = fromGlobalId;\n }\n const toGlobalId = readOptionalString(record.toGlobalId);\n if (toGlobalId !== undefined) {\n edge.toGlobalId = toGlobalId;\n }\n const toLayer = readEpistemicLayer(record.toLayer);\n if (toLayer !== undefined) {\n edge.toLayer = toLayer;\n }\n const weight = readOptionalNumber(record.weight);\n if (weight !== undefined) {\n edge.weight = weight;\n }\n return edge;\n}\n\nfunction readEdgeRows(values: readonly unknown[]): EdgeRow[] {\n return values.flatMap((value) => {\n const edge = readEdgeRow(value);\n return edge ? [edge] : [];\n });\n}\n\nfunction dedupeEdges(edges: readonly EdgeRow[]): EdgeRow[] {\n const seen = new Set<string>();\n const deduped: EdgeRow[] = [];\n for (const edge of edges) {\n const key = String(edge._id);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n deduped.push(edge);\n }\n return deduped;\n}\n\nfunction filterEdgesByType(\n edges: readonly EdgeRow[],\n edgeType?: string\n): EdgeRow[] {\n return edgeType\n ? edges.filter((edge) => edge.edgeType === edgeType)\n : [...edges];\n}\n\nfunction nodeEndpointRefs(node: EdgeNodeRow): string[] {\n const refs = new Set<string>([String(node._id)]);\n if (node.globalId) {\n refs.add(node.globalId);\n }\n return [...refs];\n}\n\nfunction edgeSourceRefs(edge: EdgeRow): string[] {\n return [edge.fromNodeId, edge.sourceGlobalId, edge.fromGlobalId].flatMap(\n (value) => (value ? [value] : [])\n );\n}\n\nfunction edgeTargetRefs(edge: EdgeRow): string[] {\n return [edge.toNodeId, edge.targetGlobalId, edge.toGlobalId].flatMap(\n (value) => (value ? [value] : [])\n );\n}\n\nfunction primaryEdgeSourceRef(edge: EdgeRow): string | undefined {\n return edge.sourceGlobalId ?? edge.fromGlobalId ?? edge.fromNodeId;\n}\n\nfunction primaryEdgeTargetRef(edge: EdgeRow): string | undefined {\n return edge.targetGlobalId ?? edge.toGlobalId ?? edge.toNodeId;\n}\n\nfunction hasVisitedNode(\n node: EdgeNodeRow,\n visited: ReadonlySet<string>\n): boolean {\n return nodeEndpointRefs(node).some((ref) => visited.has(ref));\n}\n\nfunction markVisitedNode(node: EdgeNodeRow, visited: Set<string>) {\n for (const ref of nodeEndpointRefs(node)) {\n visited.add(ref);\n }\n}\n\nasync function resolveNodeRefSoft(\n ctx: QueryCtx,\n nodeRef: string\n): Promise<EdgeNodeRow | null> {\n const normalizedId =\n ctx.db.normalizeId?.(\"epistemicNodes\", nodeRef) ??\n readConvexId<\"epistemicNodes\">(nodeRef);\n\n if (normalizedId) {\n try {\n const direct = readEdgeNodeRow(await ctx.db.get(normalizedId));\n if (direct) {\n return direct;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicEdges] Direct node-ref lookup failed\",\n { error, nodeRef }\n );\n }\n }\n\n return readEdgeNodeRow(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", nodeRef))\n .first()\n );\n}\n\nasync function collectNodeReferenceIds(\n ctx: QueryCtx,\n nodeRef: string\n): Promise<string[]> {\n const refs = new Set<string>([nodeRef]);\n const node = await resolveNodeRefSoft(ctx, nodeRef);\n if (node) {\n for (const ref of nodeEndpointRefs(node)) {\n refs.add(ref);\n }\n }\n return [...refs];\n}\n\nasync function collectEdgesFromRefs(\n ctx: QueryCtx,\n refs: readonly string[],\n edgeType?: string\n): Promise<EdgeRow[]> {\n const reads: Promise<unknown[]>[] = [];\n for (const ref of refs) {\n reads.push(\n edgeType\n ? ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_type\", (q) =>\n q.eq(\"fromNodeId\", ref).eq(\"edgeType\", edgeType)\n )\n .collect()\n : ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from\", (q) => q.eq(\"fromNodeId\", ref))\n .collect(),\n ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_source_global_id\", (q) => q.eq(\"sourceGlobalId\", ref))\n .collect()\n );\n }\n\n const edges = readEdgeRows((await Promise.all(reads)).flat());\n return dedupeEdges(filterEdgesByType(edges, edgeType));\n}\n\nasync function collectEdgesToRefs(\n ctx: QueryCtx,\n refs: readonly string[],\n edgeType?: string\n): Promise<EdgeRow[]> {\n const reads: Promise<unknown[]>[] = [];\n for (const ref of refs) {\n reads.push(\n edgeType\n ? ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", ref).eq(\"edgeType\", edgeType)\n )\n .collect()\n : ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q) => q.eq(\"toNodeId\", ref))\n .collect(),\n ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_target_global_id\", (q) => q.eq(\"targetGlobalId\", ref))\n .collect()\n );\n }\n\n const edges = readEdgeRows((await Promise.all(reads)).flat());\n return dedupeEdges(filterEdgesByType(edges, edgeType));\n}\n\nasync function collectEdgesFromNodeRef(\n ctx: QueryCtx,\n nodeRef: string,\n edgeType?: string\n): Promise<EdgeRow[]> {\n return collectEdgesFromRefs(\n ctx,\n await collectNodeReferenceIds(ctx, nodeRef),\n edgeType\n );\n}\n\nasync function collectEdgesToNodeRef(\n ctx: QueryCtx,\n nodeRef: string,\n edgeType?: string\n): Promise<EdgeRow[]> {\n return collectEdgesToRefs(\n ctx,\n await collectNodeReferenceIds(ctx, nodeRef),\n edgeType\n );\n}\n\nasync function collectEdgesBetweenRefs(\n ctx: QueryCtx,\n fromRefs: readonly string[],\n toRefs: readonly string[]\n): Promise<EdgeRow[]> {\n const reads: Promise<unknown[]>[] = [];\n for (const fromRef of fromRefs) {\n for (const toRef of toRefs) {\n reads.push(\n ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", fromRef).eq(\"toNodeId\", toRef)\n )\n .collect()\n );\n }\n reads.push(\n ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_source_global_id\", (q) =>\n q.eq(\"sourceGlobalId\", fromRef)\n )\n .collect()\n );\n }\n for (const toRef of toRefs) {\n reads.push(\n ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_target_global_id\", (q) => q.eq(\"targetGlobalId\", toRef))\n .collect()\n );\n }\n\n const fromRefSet = new Set(fromRefs);\n const toRefSet = new Set(toRefs);\n const edges = readEdgeRows((await Promise.all(reads)).flat()).filter(\n (edge) =>\n edgeSourceRefs(edge).some((ref) => fromRefSet.has(ref)) &&\n edgeTargetRefs(edge).some((ref) => toRefSet.has(ref))\n );\n return dedupeEdges(edges);\n}\n\nasync function collectEdgesBetweenNodeRefs(\n ctx: QueryCtx,\n fromNodeRef: string,\n toNodeRef: string\n): Promise<EdgeRow[]> {\n const [fromRefs, toRefs] = await Promise.all([\n collectNodeReferenceIds(ctx, fromNodeRef),\n collectNodeReferenceIds(ctx, toNodeRef),\n ]);\n return collectEdgesBetweenRefs(ctx, fromRefs, toRefs);\n}\n\nfunction buildLineageTraversalConfig(\n args: LineageQueryArgs\n): LineageTraversalState {\n const mode: TraversalMode = args.mode ?? \"anchor_down\";\n return {\n maxDepth: args.maxDepth ?? 10,\n mode,\n minLayer: args.minLayer ?? getDefaultMinLayer(mode),\n maxLayer: args.maxLayer ?? 4,\n };\n}\n\nfunction buildLineageQueueSeed(node: EdgeNodeRow): LineageQueueItem {\n return {\n node,\n depth: 0,\n currentLayer: node.epistemicLayer ?? getNodeLayer(node.nodeType),\n };\n}\n\nfunction shouldSkipLineageNode(\n item: LineageQueueItem,\n state: LineageTraversalState,\n visited: Set<string>\n): boolean {\n if (item.depth >= state.maxDepth) {\n return true;\n }\n return hasVisitedNode(item.node, visited);\n}\n\nfunction resolveLineageTargetLayer(\n edge: EdgeRow,\n targetNode: EdgeNodeRow\n): EpistemicLayer {\n return (\n edge.toLayer ??\n targetNode.epistemicLayer ??\n getNodeLayer(targetNode.nodeType)\n );\n}\n\nfunction collectDerivedFromEdges(\n ctx: QueryCtx,\n node: EdgeNodeRow\n): Promise<EdgeRow[]> {\n return collectEdgesFromRefs(\n ctx,\n nodeEndpointRefs(node),\n DERIVED_FROM_EDGE_TYPE\n );\n}\n\nfunction shouldAdvanceLineage(\n currentLayer: EpistemicLayer,\n targetLayer: EpistemicLayer,\n state: LineageTraversalState\n): boolean {\n return shouldContinueTraversal(currentLayer, targetLayer, {\n mode: state.mode,\n minLayer: state.minLayer,\n maxLayer: state.maxLayer,\n });\n}\n\nasync function appendLineageEdges(\n ctx: QueryCtx,\n current: LineageQueueItem,\n state: LineageTraversalState,\n lineage: LineageResultItem[],\n queue: LineageQueueItem[],\n visited: Set<string>\n): Promise<void> {\n const lineageEdges = await collectDerivedFromEdges(ctx, current.node);\n\n for (const edge of lineageEdges) {\n const targetRef = primaryEdgeTargetRef(edge);\n if (!targetRef) {\n continue;\n }\n\n const targetNode = await resolveNodeRefSoft(ctx, targetRef);\n if (!targetNode || hasVisitedNode(targetNode, visited)) {\n continue;\n }\n\n const targetLayer = resolveLineageTargetLayer(edge, targetNode);\n if (!shouldAdvanceLineage(current.currentLayer, targetLayer, state)) {\n continue;\n }\n\n const nextDepth = current.depth + 1;\n lineage.push({\n node: targetNode,\n depth: nextDepth,\n edgeType: edge.edgeType,\n layer: targetLayer,\n });\n queue.push({\n node: targetNode,\n depth: nextDepth,\n currentLayer: targetLayer,\n });\n }\n}\n\n/**\n * Get a single edge by ID\n */\nexport const get = query({\n args: { edgeId: v.id(\"epistemicEdges\") },\n returns: permissiveReturn,\n handler: async (ctx, args: EdgeIdArgs) => await ctx.db.get(args.edgeId),\n});\n\n/**\n * Get an edge by its global UUID\n */\nexport const getByGlobalId = query({\n args: { globalId: v.string() },\n returns: permissiveReturn,\n handler: async (ctx, args: GlobalIdArgs) =>\n await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", args.globalId))\n .first(),\n});\n\n/**\n * Get all edges FROM a specific node\n */\nexport const getFromNode = query({\n args: {\n fromNodeId: v.id(\"epistemicNodes\"),\n edgeType: v.optional(edgeTypeValidator),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: GetFromNodeArgs) =>\n await collectEdgesFromNodeRef(ctx, String(args.fromNodeId), args.edgeType),\n});\n\n/**\n * Get all edges TO a specific node\n */\nexport const getToNode = query({\n args: {\n toNodeId: v.id(\"epistemicNodes\"),\n edgeType: v.optional(edgeTypeValidator),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: GetToNodeArgs) =>\n await collectEdgesToNodeRef(ctx, String(args.toNodeId), args.edgeType),\n});\n\n/**\n * Get edges pointing FROM a node (by any string ID - for backward compat)\n * This is a more flexible version of getFromNode that accepts any string ID\n *\n * Performance: Uses indexes where possible, falls back to globalId search only\n * when needed.\n */\nexport const getBySourceNode = query({\n args: {\n sourceNodeId: v.string(),\n edgeType: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: GetBySourceNodeArgs) =>\n await collectEdgesFromNodeRef(ctx, args.sourceNodeId, args.edgeType),\n});\n\n/**\n * Get edges pointing TO a node (by any string ID - for backward compat)\n * This is a more flexible version of getToNode that accepts any string ID\n *\n * Performance: Uses indexes where possible, falls back to globalId search only\n * when needed.\n */\nexport const getByTargetNode = query({\n args: {\n targetNodeId: v.string(),\n edgeType: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: GetByTargetNodeArgs) =>\n await collectEdgesToNodeRef(ctx, args.targetNodeId, args.edgeType),\n});\n\n/**\n * Get edge between two specific nodes (returns array)\n */\nexport const getBetween = query({\n args: {\n fromNodeId: v.id(\"epistemicNodes\"),\n toNodeId: v.id(\"epistemicNodes\"),\n edgeType: v.optional(edgeTypeValidator),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: GetBetweenArgs) =>\n filterEdgesByType(\n await collectEdgesBetweenNodeRefs(\n ctx,\n String(args.fromNodeId),\n String(args.toNodeId)\n ),\n args.edgeType\n ),\n});\n\n/**\n * Get first edge between two specific nodes (returns single edge or null)\n * Used by findEvidencePath for direct edge checking\n */\nexport const getByNodes = query({\n args: {\n fromNodeId: v.id(\"epistemicNodes\"),\n toNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: GetByNodesArgs) =>\n (\n await collectEdgesBetweenNodeRefs(\n ctx,\n String(args.fromNodeId),\n String(args.toNodeId)\n )\n )[0] ?? null,\n});\n\n/**\n * Get all edges of a specific type for a project\n */\nexport const getByProjectAndType = query({\n args: {\n ...optionalScopeArgs,\n edgeType: edgeTypeValidator,\n },\n returns: permissiveReturn,\n handler: async (ctx, args: GetByProjectAndTypeArgs) => {\n if (!args.topicId) {\n return [];\n }\n\n let scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>;\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicEdges] Failed to resolve getAll scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n }\n );\n return [];\n }\n\n const projectEdges = await collectScopedEdges(ctx, scope, 5000);\n\n return projectEdges\n .filter(\n (e) =>\n e.edgeType === args.edgeType &&\n edgeMatchesWorkspaceReasoningScope(e, scope)\n )\n .slice(0, 5000);\n },\n});\n\n/**\n * Get all edges for a project\n */\nexport const getByProject = query({\n args: {\n ...optionalScopeArgs,\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.topicId) {\n return [];\n }\n\n let scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>;\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicEdges] 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 hasAccess = await checkScopeAccess(\n ctx,\n String(scope.topicId),\n args.userId\n );\n if (!hasAccess) {\n return [];\n }\n }\n\n const pageSize = Math.max(1, Math.min(Math.floor(args.limit ?? 500), 2000));\n\n const edges = await collectScopedEdges(\n ctx,\n scope,\n Math.min(pageSize * 3, 6000)\n );\n return edges\n .filter((edge) => edgeMatchesWorkspaceReasoningScope(edge, scope))\n .slice(0, pageSize);\n },\n});\n\n/**\n * List all edges (unscoped — for internal dev tools).\n * No project filtering, no access control.\n */\nexport const listAll = query({\n args: {\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: ListAllArgs) => {\n const pageSize = Math.max(\n 1,\n Math.min(Math.floor(args.limit ?? 5000), 10_000)\n );\n return await ctx.db.query(\"epistemicEdges\").order(\"desc\").take(pageSize);\n },\n});\n\n/**\n * Find contradictions: evidence that contradicts a belief (informs with weight < 0)\n * Note: Legacy 'contradicts' edges have been migrated to 'informs' with negative\n * weight\n */\nexport const findContradictions = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: NodeIdArgs) => {\n const edges = await collectEdgesToNodeRef(\n ctx,\n String(args.nodeId),\n \"informs\"\n );\n return edges.filter((e) => (e.weight ?? 0) < 0);\n },\n});\n\n/**\n * Find supporting evidence for a node (informs with weight >= 0)\n * Note: Legacy 'supports' edges have been migrated to 'informs' with positive\n * weight\n */\nexport const findSupport = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: NodeIdArgs) => {\n const edges = await collectEdgesToNodeRef(\n ctx,\n String(args.nodeId),\n \"informs\"\n );\n return edges.filter((e) => (e.weight ?? 0) >= 0);\n },\n});\n\n/**\n * Get the full lineage chain for a node (what it was derived from)\n * Traverses extracted_from and derived_from edges backwards to find sources.\n *\n * Phase 2D: Now supports layer-aware traversal with minLayer/maxLayer constraints\n *\n * Edge semantics:\n * - `Evidence -extracted_from-> Source` means Evidence was extracted from Source\n * - To find lineage, we query edges where current node is fromNodeId (the derived node)\n * and follow toNodeId to find the source/parent nodes\n */\nexport const getLineage = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n maxDepth: v.optional(v.number()),\n // Phase 2D: Layer-aware traversal options\n minLayer: v.optional(v.number()), // 1=L1, 2=L2, 3=L3, 4=L4\n maxLayer: v.optional(v.number()),\n mode: v.optional(\n v.union(\n v.literal(\"anchor_down\"),\n v.literal(\"anchor_up\"),\n v.literal(\"same_layer\"),\n v.literal(\"decision_trace\")\n )\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: LineageQueryArgs) => {\n const traversalState = buildLineageTraversalConfig(args);\n const lineage: LineageResultItem[] = [];\n const queue: LineageQueueItem[] = [];\n const visited = new Set<string>();\n\n const startNode = readEdgeNodeRow(await ctx.db.get(args.nodeId));\n if (!startNode) {\n return lineage;\n }\n\n queue.push(buildLineageQueueSeed(startNode));\n\n while (queue.length > 0) {\n const current = queue.shift();\n if (!current || shouldSkipLineageNode(current, traversalState, visited)) {\n continue;\n }\n\n markVisitedNode(current.node, visited);\n await appendLineageEdges(\n ctx,\n current,\n traversalState,\n lineage,\n queue,\n visited\n );\n }\n\n return lineage;\n },\n});\n\n/**\n * Get all evidence supporting or contradicting a belief\n * Returns structured data for UI display\n * Note: Legacy 'supports'/'contradicts' edges have been migrated to 'informs'\n * with weight\n */\nexport const getEvidenceForBelief = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: EvidenceForBeliefArgs) => {\n const informsEdges = await collectEdgesToNodeRef(\n ctx,\n String(args.beliefNodeId),\n \"informs\"\n );\n\n const supportEdges = informsEdges.filter((e) => (e.weight ?? 0) >= 0);\n const contradictEdges = informsEdges.filter((e) => (e.weight ?? 0) < 0);\n\n const supportingEvidence = await Promise.all(\n supportEdges.map(async (edge) => {\n const sourceRef = primaryEdgeSourceRef(edge);\n return {\n edge,\n node: sourceRef ? await resolveNodeRefSoft(ctx, sourceRef) : null,\n };\n })\n );\n const contradictingEvidence = await Promise.all(\n contradictEdges.map(async (edge) => {\n const sourceRef = primaryEdgeSourceRef(edge);\n return {\n edge,\n node: sourceRef ? await resolveNodeRefSoft(ctx, sourceRef) : null,\n };\n })\n );\n\n const filteredSupporting = supportingEvidence.filter(\n (e) => e.node !== null\n );\n const filteredContradicting = contradictingEvidence.filter(\n (e) => e.node !== null\n );\n\n return {\n supporting: filteredSupporting,\n contradicting: filteredContradicting,\n supportCount: filteredSupporting.length,\n contradictCount: filteredContradicting.length,\n };\n },\n});\n\n/**\n * Get all edges between a set of belief IDs (for belief cluster visualization)\n * Returns edges where both source and target are in the provided belief IDs\n */\nexport const getClusterEdges = query({\n args: {\n beliefIds: v.array(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: ClusterEdgesArgs) => {\n if (args.beliefIds.length === 0) {\n return [];\n }\n\n const beliefIdSet = new Set<string>();\n for (const beliefId of args.beliefIds) {\n for (const ref of await collectNodeReferenceIds(ctx, beliefId)) {\n beliefIdSet.add(ref);\n }\n }\n const allEdges = readEdgeRows(\n await ctx.db.query(\"epistemicEdges\").collect()\n );\n\n return allEdges.filter((edge) => {\n const fromInCluster = edgeSourceRefs(edge).some((ref) =>\n beliefIdSet.has(ref)\n );\n const toInCluster = edgeTargetRefs(edge).some((ref) =>\n beliefIdSet.has(ref)\n );\n return fromInCluster && toInCluster;\n });\n },\n});\n","// biome-ignore-all lint/performance/noBarrelFile: Public graph-primitives compatibility facade; split after export-map migration.\n// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Epistemic Evidence API\n *\n * Clean API for managing evidence/insights in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces insights.ts for CREATE operations.\n *\n * Key differences from insights.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyInsightId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * Terminology:\n * - \"Evidence\" in the epistemic graph = \"Insight\" in the legacy schema\n * - Evidence is at L2 (Compression Boundary) in the Lucern architecture\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nexport {\n flattenEvidenceNode,\n resolveEvidenceLinkedWorktreeId,\n} from \"./epistemicEvidenceHelpers\";\n\nexport * from \"./epistemicEvidenceMutations\";\nexport * from \"./epistemicEvidenceQueries\";\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.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 { requireScopeWriteAccess } from \"@lucern/access-control/access\";\nimport {\n EVIDENCE_INFORMATION_ASYMMETRY_VALUES,\n EVIDENCE_METHODOLOGY_VALUES,\n EVIDENCE_SOURCE_QUALITY_VALUES,\n type EvidenceInformationAsymmetry,\n type EvidenceMethodology,\n type EvidenceSourceQuality,\n} from \"@lucern/contracts\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx } from \"./convex\";\nimport { internal, internalMutation, mutation } from \"./convex\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport {\n generateContentHash,\n markProjectGraphDirty,\n normalizeKind,\n normalizeSourceType,\n optionalEvidenceScopeArgs,\n resolveEvidenceScopeOrNull,\n} from \"./epistemicEvidenceHelpers\";\nimport { insertEpistemicEdge, insertEpistemicNode } from \"./epistemicInsert.js\";\nimport { generateGlobalId } from \"./globalId\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\ntype EvidenceRelation = \"supports\" | \"contradicts\";\ntype ResolvedEvidenceScope = NonNullable<\n Awaited<ReturnType<typeof resolveEvidenceScopeOrNull>>\n>;\n\nconst EMBEDDING_GENERATION_ACTION =\n \"embeddingActions:generateEpistemicNodeEmbedding\";\n\ninterface EvidenceEdgeRow {\n _id: Id<\"epistemicEdges\">;\n createdAt?: number;\n edgeType?: string;\n globalId?: string;\n}\n\ninterface BeliefNodeRow {\n globalId: string;\n nodeType: \"belief\";\n}\n\ninterface EvidenceNodeRow {\n _id: Id<\"epistemicNodes\">;\n canonicalText?: string;\n createdBy?: string;\n metadata?: unknown;\n nodeType: \"evidence\";\n projectId?: string;\n status?: string;\n topicId?: string;\n}\n\ninterface EvidenceScopeMutationArgs {\n projectId?: string;\n tenantId?: string;\n topicId?: string;\n workspaceId?: string;\n}\n\ninterface EvidenceWriteArgs {\n content?: string;\n contentType?: string;\n evidenceRelation?: unknown;\n externalSourceType?: string;\n informationAsymmetry?: unknown;\n kind?: string;\n linkedBeliefNodeId: Id<\"epistemicNodes\">;\n metadata?: unknown;\n methodology?: unknown;\n rationale?: string;\n signedImpact?: number;\n sourceDescription?: string;\n sourceQuality?: unknown;\n sourceQuestionId?: string;\n sourceRef?: string;\n sourceType?: string;\n sourceUrl?: string;\n tags?: string[];\n text: string;\n title?: string;\n userId: string;\n weight: number;\n}\n\ninterface CreateEvidenceArgs\n extends EvidenceScopeMutationArgs,\n EvidenceWriteArgs {\n confidence?: number;\n}\n\ninterface CreateAndLinkArgs extends EvidenceScopeMutationArgs {\n beliefNodeId: Id<\"epistemicNodes\">;\n confidence?: number;\n informationAsymmetry?: unknown;\n kind?: string;\n methodology?: unknown;\n relation: EvidenceRelation;\n signedImpact?: number;\n sourceDescription?: string;\n sourceQuality?: unknown;\n sourceRef?: string;\n sourceType?: string;\n tags?: string[];\n text: string;\n userId: string;\n weight: number;\n}\n\ninterface UpdateStatusArgs {\n nodeId: Id<\"epistemicNodes\">;\n status: \"active\" | \"archived\" | \"acted_on\";\n userId: string;\n}\n\ninterface InternalCreateEvidenceArgs extends CreateEvidenceArgs {\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n runtimePackKey?: string;\n runtimeToolName?: string;\n}\n\ninterface UpdateVerificationStatusArgs {\n lastVerificationId?: Id<\"verificationResults\">;\n nodeId: Id<\"epistemicNodes\">;\n verificationHash: string;\n verificationStatus: string;\n}\n\ninterface UpdateEvidenceArgs {\n externalSourceUrl?: string;\n insightId?: string;\n kind?: string;\n nodeId?: Id<\"epistemicNodes\">;\n tags?: string[];\n text?: string;\n userId: string;\n verificationStatus?: string;\n}\n\ninterface FlagAsIncorrectArgs {\n insightId: Id<\"epistemicNodes\">;\n reason: string;\n suggestedCorrection?: string;\n userId: string;\n}\n\ninterface RemoveEvidenceArgs {\n insightId?: string;\n nodeId?: Id<\"epistemicNodes\">;\n userId: string;\n}\n\ninterface EvidenceImpactPlan {\n confidence: number;\n evidenceRelation: EvidenceRelation;\n signedImpact: number;\n weight: number;\n}\n\ninterface EvidenceTaxonomyProjection {\n informationAsymmetry?: EvidenceInformationAsymmetry;\n methodology?: EvidenceMethodology;\n sourceDescription?: string;\n sourceQuality?: EvidenceSourceQuality;\n sourceRef?: string;\n}\n\ntype EvidenceMetadataProfile = \"create\" | \"createAndLink\" | \"internalCreate\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction metadataRecord(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : 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 assertBeliefNode(node: unknown, errorMessage: string): BeliefNodeRow {\n if (\n !isRecord(node) ||\n node.nodeType !== \"belief\" ||\n typeof node.globalId !== \"string\"\n ) {\n throw new Error(errorMessage);\n }\n return node as unknown as BeliefNodeRow;\n}\n\nfunction assertEvidenceNode(\n node: unknown,\n errorMessage: string\n): EvidenceNodeRow {\n if (!isRecord(node)) {\n throw new Error(errorMessage);\n }\n const id = readConvexId<\"epistemicNodes\">(node._id);\n if (!(id && node.nodeType === \"evidence\")) {\n throw new Error(errorMessage);\n }\n const evidence: EvidenceNodeRow = { _id: id, nodeType: \"evidence\" };\n const canonicalText = readOptionalString(node.canonicalText);\n if (canonicalText !== undefined) {\n evidence.canonicalText = canonicalText;\n }\n const createdBy = readOptionalString(node.createdBy);\n if (createdBy !== undefined) {\n evidence.createdBy = createdBy;\n }\n if (\"metadata\" in node) {\n evidence.metadata = node.metadata;\n }\n const projectId = readOptionalString(node.projectId);\n if (projectId !== undefined) {\n evidence.projectId = projectId;\n }\n const status = readOptionalString(node.status);\n if (status !== undefined) {\n evidence.status = status;\n }\n const topicId = readOptionalString(node.topicId);\n if (topicId !== undefined) {\n evidence.topicId = topicId;\n }\n return evidence;\n}\n\nfunction readEvidenceNodeOrNull(node: unknown): EvidenceNodeRow | null {\n if (!isRecord(node) || node.nodeType !== \"evidence\") {\n return null;\n }\n try {\n return assertEvidenceNode(node, \"Evidence node not found\");\n } catch {\n return null;\n }\n}\n\nfunction optionalTrimmedString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nasync function resolveEvidenceNodeId(\n ctx: MutationCtx,\n args: Pick<UpdateEvidenceArgs | RemoveEvidenceArgs, \"insightId\" | \"nodeId\">\n): Promise<Id<\"epistemicNodes\">> {\n if (args.nodeId) {\n return args.nodeId;\n }\n\n const insightId = readOptionalString(args.insightId);\n if (!insightId) {\n throw new Error(\"Either nodeId or insightId is required\");\n }\n\n const normalizedId =\n ctx.db.normalizeId?.(\"epistemicNodes\", insightId) ??\n readConvexId<\"epistemicNodes\">(insightId);\n if (normalizedId) {\n try {\n const direct = readEvidenceNodeOrNull(await ctx.db.get(normalizedId));\n if (direct) {\n return direct._id;\n }\n } catch {\n // Not a valid component-local Convex id; fall through to globalId lookup.\n }\n }\n\n const byGlobalId = readEvidenceNodeOrNull(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", insightId))\n .first()\n );\n if (!byGlobalId) {\n throw new Error(\"Evidence node not found\");\n }\n return byGlobalId._id;\n}\n\nfunction optionalLiteral<T extends readonly string[]>(\n values: T,\n value: unknown,\n fieldName: string\n): T[number] | undefined {\n if (typeof value !== \"string\" || value.length === 0) {\n return;\n }\n if (values.includes(value as T[number])) {\n return value as T[number];\n }\n throw new Error(`Evidence ${fieldName} must be one of: ${values.join(\", \")}`);\n}\n\nfunction assertSignedImpactScore(value: unknown, context: string): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value === 0 ||\n value < -1 ||\n value > 1\n ) {\n throw new Error(`${context} requires explicit nonzero weight in [-1, 1]`);\n }\n return value;\n}\n\nfunction normalizeEvidenceRelation(\n relation: unknown,\n weight: number,\n context: string\n): EvidenceRelation {\n if (relation === \"supports\" || relation === \"contradicts\") {\n if (relation === \"supports\" && weight < 0) {\n throw new Error(`${context} supports relation requires positive weight`);\n }\n if (relation === \"contradicts\" && weight > 0) {\n throw new Error(\n `${context} contradicts relation requires negative weight`\n );\n }\n return relation;\n }\n return weight < 0 ? \"contradicts\" : \"supports\";\n}\n\nfunction planEvidenceImpact(\n args: EvidenceWriteArgs,\n context: string\n): EvidenceImpactPlan {\n const weight = assertSignedImpactScore(args.weight, context);\n const signedImpact =\n args.signedImpact === undefined\n ? weight\n : assertSignedImpactScore(args.signedImpact, `${context} signedImpact`);\n return {\n confidence: Math.abs(weight),\n evidenceRelation: normalizeEvidenceRelation(\n args.evidenceRelation,\n weight,\n context\n ),\n signedImpact,\n weight,\n };\n}\n\nfunction evidenceTaxonomyProjection(\n args: EvidenceWriteArgs\n): EvidenceTaxonomyProjection {\n const sourceRef = optionalTrimmedString(args.sourceRef);\n const sourceQuality = optionalLiteral(\n EVIDENCE_SOURCE_QUALITY_VALUES,\n args.sourceQuality,\n \"sourceQuality\"\n );\n const methodology = optionalLiteral(\n EVIDENCE_METHODOLOGY_VALUES,\n args.methodology,\n \"methodology\"\n );\n const informationAsymmetry = optionalLiteral(\n EVIDENCE_INFORMATION_ASYMMETRY_VALUES,\n args.informationAsymmetry,\n \"informationAsymmetry\"\n );\n const sourceDescription = optionalTrimmedString(args.sourceDescription);\n\n return {\n ...(sourceRef ? { sourceRef } : {}),\n ...(sourceQuality ? { sourceQuality } : {}),\n ...(methodology ? { methodology } : {}),\n ...(informationAsymmetry ? { informationAsymmetry } : {}),\n ...(sourceDescription ? { sourceDescription } : {}),\n };\n}\n\nfunction evidenceTextProjection(args: EvidenceWriteArgs) {\n const title = optionalTrimmedString(args.title);\n const contentType = optionalTrimmedString(args.contentType);\n return {\n ...(title ? { title } : {}),\n ...(typeof args.content === \"string\" && args.content.length > 0\n ? { content: args.content }\n : {}),\n ...(contentType ? { contentType } : {}),\n };\n}\n\nfunction evidenceMetadata(\n args: EvidenceWriteArgs,\n impact: EvidenceImpactPlan,\n kind: string,\n profile: EvidenceMetadataProfile\n): Record<string, unknown> {\n const base = {\n kind,\n tags: args.tags || [],\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n evidenceRelation: impact.evidenceRelation,\n confidence: impact.confidence,\n weight: impact.weight,\n impactScore: impact.weight,\n };\n const sourceContext =\n profile === \"createAndLink\"\n ? {}\n : {\n externalSourceType: args.externalSourceType,\n sourceUrl: args.sourceUrl,\n sourceQuestionId: args.sourceQuestionId,\n rationale: args.rationale,\n };\n const publicCreateTaxonomy =\n profile === \"create\"\n ? {\n methodology: args.methodology,\n informationAsymmetry: args.informationAsymmetry,\n sourceDescription: args.sourceDescription,\n }\n : {};\n return {\n ...base,\n ...sourceContext,\n ...publicCreateTaxonomy,\n ...metadataRecord(args.metadata),\n };\n}\n\nfunction buildEvidenceNodeInsert(args: {\n globalId: string;\n impact: EvidenceImpactPlan;\n kind: string;\n linkedBeliefNodeId: Id<\"epistemicNodes\">;\n metadataProfile: EvidenceMetadataProfile;\n now: number;\n scope: ResolvedEvidenceScope;\n sourceType: \"proprietary\" | \"verified\" | \"ai_generated\";\n write: EvidenceWriteArgs;\n}) {\n return {\n globalId: args.globalId,\n topicId: args.scope.topicId,\n projectId: args.scope.projectId,\n tenantId: args.scope.tenantId,\n workspaceId: args.scope.workspaceId,\n nodeType: \"evidence\",\n canonicalText: args.write.text,\n contentHash: generateContentHash(args.write.text),\n ...evidenceTextProjection(args.write),\n status: \"active\",\n epistemicLayer: \"L2\",\n sourceType: args.sourceType,\n // RC.1 taxonomy fields — top-level projection\n evidenceRelation: args.impact.evidenceRelation,\n signedImpact: args.impact.signedImpact,\n targetBeliefId: String(args.linkedBeliefNodeId),\n ...evidenceTaxonomyProjection(args.write),\n createdAt: args.now,\n updatedAt: args.now,\n createdBy: args.write.userId,\n metadata: evidenceMetadata(\n args.write,\n args.impact,\n args.kind,\n args.metadataProfile\n ),\n };\n}\n\nasync function createEvidenceBeliefEdge(\n ctx: MutationCtx,\n args: {\n evidenceNodeId: Id<\"epistemicNodes\">;\n evidenceGlobalId: string;\n beliefNodeId: Id<\"epistemicNodes\">;\n beliefGlobalId: string;\n relation: EvidenceRelation;\n weight: number;\n userId: string;\n topicId?: string;\n projectId?: string;\n rationale?: string;\n }\n) {\n const edgeGlobalId = generateGlobalId();\n const confidence = Math.abs(args.weight);\n // C2-RR.4 Defect E — query (and write) by canonical UUIDv7 endpoints, not\n // Convex doc ids. The endpoints are evidence/belief globalIds.\n const existingEdges = (await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q\n .eq(\"fromNodeId\", args.evidenceGlobalId)\n .eq(\"toNodeId\", args.beliefGlobalId)\n )\n .collect()) as EvidenceEdgeRow[];\n const existing = existingEdges.find((edge) => edge.edgeType === \"informs\");\n\n const edgeDoc = {\n globalId: edgeGlobalId,\n fromNodeId: args.evidenceGlobalId,\n toNodeId: args.beliefGlobalId,\n sourceGlobalId: args.evidenceGlobalId,\n targetGlobalId: args.beliefGlobalId,\n edgeType: \"informs\" as const,\n weight: args.weight,\n confidence,\n context: args.rationale,\n reasoningMethod: \"testimonial\" as const,\n derivationType: \"evidence_sl_scoring\",\n metadata: {\n relation: args.relation,\n confidence,\n impactScore: args.weight,\n invariant: \"evidence.belief_impact_required\",\n },\n createdBy: args.userId,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n topicId: args.topicId,\n projectId: args.projectId,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\" as const,\n toLayer: \"L3\" as const,\n };\n\n if (existing) {\n await ctx.db.patch(existing._id, {\n ...edgeDoc,\n globalId: existing.globalId,\n createdAt: existing.createdAt ?? edgeDoc.createdAt,\n });\n } else {\n await insertEpistemicEdge(ctx, edgeDoc);\n }\n\n await ctx.scheduler.runAfter(5000, internal.neo4jEdgeAPI.createEdge, {\n globalId: existing?.globalId ?? edgeGlobalId,\n fromGlobalId: args.evidenceGlobalId,\n toGlobalId: args.beliefGlobalId,\n edgeType: \"informs\",\n weight: args.weight,\n confidence,\n createdBy: args.userId,\n topicId: args.topicId,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n metadata: {\n relation: args.relation,\n confidence,\n impactScore: args.weight,\n invariant: \"evidence.belief_impact_required\",\n },\n });\n\n return existing?.globalId ?? edgeGlobalId;\n}\n\nexport const create = mutation({\n args: {\n ...optionalEvidenceScopeArgs,\n text: v.string(),\n title: v.optional(v.string()),\n content: v.optional(v.string()),\n contentType: v.optional(v.string()),\n kind: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n sourceType: v.optional(v.string()),\n externalSourceType: v.optional(v.string()),\n sourceUrl: v.optional(v.string()),\n sourceQuestionId: v.optional(v.string()),\n userId: v.string(),\n rationale: v.string(),\n // RC.1 taxonomy fields — top-level projection (mirroring kernel evidenceCreate.ts)\n sourceRef: v.optional(v.string()),\n sourceQuality: v.optional(\n v.union(\n v.literal(\"primary\"),\n v.literal(\"analyzed\"),\n v.literal(\"secondary\"),\n v.literal(\"tertiary\"),\n v.literal(\"unknown\")\n )\n ),\n methodology: v.optional(v.string()),\n informationAsymmetry: v.optional(v.string()),\n sourceDescription: v.optional(v.string()),\n // signedImpact is derived from weight; accepted as an explicit override for\n // callers that already have the signed value (kernel parity).\n signedImpact: v.optional(v.number()),\n metadata: v.optional(v.any()),\n // Required belief impact link.\n linkedBeliefNodeId: v.id(\"epistemicNodes\"),\n evidenceRelation: v.optional(\n v.union(v.literal(\"supports\"), v.literal(\"contradicts\"))\n ),\n weight: v.number(),\n confidence: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: CreateEvidenceArgs) => {\n const scope = await resolveEvidenceScopeOrNull(ctx, args);\n if (!scope) {\n throw new Error(\"Invalid scope: projectId or topicId is required\");\n }\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"evidence\",\n mutationName: \"epistemicEvidence.create\",\n });\n if (scope.projectId) {\n await requireScopeWriteAccess(ctx, scope.projectId, args.userId);\n }\n\n const now = Date.now();\n const globalId = generateGlobalId();\n const kind = normalizeKind(args.kind);\n const sourceType = normalizeSourceType(args.sourceType);\n const impact = planEvidenceImpact(args, \"Evidence creation\");\n const linkedBeliefNode = assertBeliefNode(\n await ctx.db.get(args.linkedBeliefNodeId),\n \"Evidence creation requires a linked belief node\"\n );\n\n const nodeId = await insertEpistemicNode(\n ctx,\n buildEvidenceNodeInsert({\n globalId,\n impact,\n kind,\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n metadataProfile: \"create\",\n now,\n scope,\n sourceType,\n write: args,\n })\n );\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n await scheduleEmbeddingGeneration({\n ctx,\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId,\n createdBy: args.userId,\n nodeType: \"evidence\",\n text: args.text,\n });\n\n await createEvidenceBeliefEdge(ctx, {\n evidenceNodeId: nodeId,\n evidenceGlobalId: globalId,\n beliefNodeId: args.linkedBeliefNodeId,\n beliefGlobalId: linkedBeliefNode.globalId,\n relation: impact.evidenceRelation,\n weight: impact.weight,\n userId: args.userId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n projectId: scope.projectId ? String(scope.projectId) : undefined,\n rationale: args.rationale,\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: scope.projectId,\n rationale: args.rationale,\n newState: {\n text: args.text.slice(0, 200),\n kind,\n sourceType,\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n evidenceRelation: impact.evidenceRelation,\n weight: impact.weight,\n },\n });\n\n if (scope.topicId) {\n await ctx.scheduler.runAfter(0, EMBEDDING_GENERATION_ACTION, {\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"evidence\" as const,\n text: args.text,\n });\n }\n\n if (scope.topicId) {\n await ctx.scheduler.runAfter(\n 2000,\n internal.nodeClassification.scheduleClassification,\n {\n nodeId,\n nodeType: \"evidence\",\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n scope.topicId ? String(scope.topicId) : undefined\n );\n\n return { nodeId };\n },\n});\n\nexport const createAndLink = mutation({\n args: {\n ...optionalEvidenceScopeArgs,\n text: v.string(),\n kind: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n sourceType: v.optional(v.string()),\n userId: v.string(),\n beliefNodeId: v.id(\"epistemicNodes\"),\n relation: v.union(v.literal(\"supports\"), v.literal(\"contradicts\")),\n weight: v.number(),\n confidence: v.optional(v.number()),\n // RC.1 taxonomy fields — top-level projection (mirroring kernel evidenceCreate.ts)\n sourceRef: v.optional(v.string()),\n sourceQuality: v.optional(\n v.union(\n v.literal(\"primary\"),\n v.literal(\"analyzed\"),\n v.literal(\"secondary\"),\n v.literal(\"tertiary\"),\n v.literal(\"unknown\")\n )\n ),\n methodology: v.optional(v.string()),\n informationAsymmetry: v.optional(v.string()),\n sourceDescription: v.optional(v.string()),\n signedImpact: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: CreateAndLinkArgs) => {\n const scope = await resolveEvidenceScopeOrNull(ctx, args);\n if (!scope) {\n throw new Error(\"Invalid scope: projectId or topicId is required\");\n }\n const accessScopeId =\n scope.projectId ?? (scope.topicId ? String(scope.topicId) : undefined);\n if (!accessScopeId) {\n throw new Error(\"Resolved evidence scope has no access-control id\");\n }\n await requireScopeWriteAccess(ctx, accessScopeId, args.userId);\n\n const now = Date.now();\n const globalId = generateGlobalId();\n const kind = normalizeKind(args.kind);\n const sourceType = normalizeSourceType(args.sourceType);\n const write: EvidenceWriteArgs = {\n ...args,\n evidenceRelation: args.relation,\n linkedBeliefNodeId: args.beliefNodeId,\n };\n const impact = planEvidenceImpact(write, \"Evidence createAndLink\");\n const beliefNode = assertBeliefNode(\n await ctx.db.get(args.beliefNodeId),\n \"Belief node not found for edge creation\"\n );\n const nodeId = await insertEpistemicNode(\n ctx,\n buildEvidenceNodeInsert({\n globalId,\n impact,\n kind,\n linkedBeliefNodeId: args.beliefNodeId,\n metadataProfile: \"createAndLink\",\n now,\n scope,\n sourceType,\n write,\n })\n );\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n const edgeGlobalId = await createEvidenceBeliefEdge(ctx, {\n evidenceNodeId: nodeId,\n evidenceGlobalId: globalId,\n beliefNodeId: args.beliefNodeId,\n beliefGlobalId: beliefNode.globalId,\n relation: impact.evidenceRelation,\n weight: impact.weight,\n userId: args.userId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n projectId: scope.projectId ? String(scope.projectId) : undefined,\n });\n\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n scope.topicId ? String(scope.topicId) : undefined\n );\n\n return { nodeId, edgeGlobalId };\n },\n});\n\nexport const updateStatus = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"archived\"),\n v.literal(\"acted_on\")\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: UpdateStatusArgs) => {\n const node = assertEvidenceNode(\n await ctx.db.get(args.nodeId),\n \"Evidence not found\"\n );\n\n const now = Date.now();\n\n await ctx.db.patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: { status: node.status },\n newState: { status: args.status },\n });\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { nodeId: args.nodeId };\n },\n});\n\nexport const internalCreate = internalMutation({\n args: {\n ...optionalEvidenceScopeArgs,\n text: v.string(),\n title: v.optional(v.string()),\n content: v.optional(v.string()),\n contentType: v.optional(v.string()),\n kind: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n sourceType: v.optional(v.string()),\n externalSourceType: v.optional(v.string()),\n sourceUrl: v.optional(v.string()),\n sourceQuestionId: v.optional(v.string()),\n userId: v.string(),\n rationale: v.string(),\n linkedBeliefNodeId: v.id(\"epistemicNodes\"),\n evidenceRelation: v.optional(v.string()),\n weight: v.number(),\n confidence: v.optional(v.number()),\n // RC.1 taxonomy fields — top-level projection (mirroring kernel evidenceCreate.ts)\n sourceRef: v.optional(v.string()),\n sourceQuality: v.optional(\n v.union(\n v.literal(\"primary\"),\n v.literal(\"analyzed\"),\n v.literal(\"secondary\"),\n v.literal(\"tertiary\"),\n v.literal(\"unknown\")\n )\n ),\n methodology: v.optional(v.string()),\n informationAsymmetry: v.optional(v.string()),\n sourceDescription: v.optional(v.string()),\n signedImpact: v.optional(v.number()),\n metadata: v.optional(v.any()),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: InternalCreateEvidenceArgs) => {\n const now = Date.now();\n const scope = await resolveEvidenceScopeOrNull(ctx, args);\n if (!scope) {\n throw new Error(\"Invalid scope: projectId or topicId is required\");\n }\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"evidence\",\n mutationName: \"epistemicEvidence.internalCreate\",\n });\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"evidence\",\n epistemicLayer: \"L2\",\n },\n mutationName: \"epistemicEvidence.internalCreate\",\n });\n\n const globalId = generateGlobalId();\n const kind = normalizeKind(args.kind);\n const sourceType = normalizeSourceType(args.sourceType);\n const impact = planEvidenceImpact(args, \"Internal evidence creation\");\n const linkedBeliefNode = assertBeliefNode(\n await ctx.db.get(args.linkedBeliefNodeId),\n \"Internal evidence creation requires a linked belief node\"\n );\n\n const nodeId = await insertEpistemicNode(\n ctx,\n buildEvidenceNodeInsert({\n globalId,\n impact,\n kind,\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n metadataProfile: \"internalCreate\",\n now,\n scope,\n sourceType,\n write: args,\n })\n );\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: String(nodeId),\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: scope.projectId,\n rationale: args.rationale,\n newState: {\n text: args.text.slice(0, 200),\n kind,\n sourceType,\n externalSourceType: args.externalSourceType,\n sourceUrl: args.sourceUrl,\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n evidenceRelation: impact.evidenceRelation,\n confidence: impact.confidence,\n weight: impact.weight,\n },\n triggeringAction: \"epistemicEvidence.internalCreate\",\n });\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n await createEvidenceBeliefEdge(ctx, {\n evidenceNodeId: nodeId,\n evidenceGlobalId: globalId,\n beliefNodeId: args.linkedBeliefNodeId,\n beliefGlobalId: linkedBeliefNode.globalId,\n relation: impact.evidenceRelation,\n weight: impact.weight,\n userId: args.userId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n projectId: scope.projectId ? String(scope.projectId) : undefined,\n rationale: args.rationale,\n });\n\n if (scope.topicId) {\n await ctx.scheduler.runAfter(0, EMBEDDING_GENERATION_ACTION, {\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"evidence\" as const,\n text: args.text,\n });\n }\n\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n scope.topicId ? String(scope.topicId) : undefined\n );\n\n return { nodeId };\n },\n});\n\nexport const updateVerificationStatus = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n verificationHash: v.string(),\n verificationStatus: v.string(),\n lastVerificationId: v.optional(v.id(\"verificationResults\")),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: UpdateVerificationStatusArgs) => {\n const node = assertEvidenceNode(\n await ctx.db.get(args.nodeId),\n \"Evidence node not found\"\n );\n const metadata = metadataRecord(node.metadata);\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n verificationHash: args.verificationHash,\n verificationStatus: args.verificationStatus,\n lastVerificationId: args.lastVerificationId,\n },\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { success: true };\n },\n});\n\nexport const update = mutation({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n insightId: v.optional(v.string()),\n text: v.optional(v.string()),\n kind: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n userId: v.string(),\n externalSourceUrl: v.optional(v.string()),\n verificationStatus: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: UpdateEvidenceArgs) => {\n const resolvedId = await resolveEvidenceNodeId(ctx, args);\n\n const node = assertEvidenceNode(\n await ctx.db.get(resolvedId),\n \"Evidence node not found\"\n );\n\n if (!node.projectId) {\n throw new Error(\"Evidence has no project scope\");\n }\n // FR.12g: enforce through the single structured gate. Previously this\n // `await checkProjectAccess(...)` DISCARDED its boolean (the FR.12e\n // discarded-access-check bug class), silently allowing a non-creator to\n // mutate evidence on a topic it does not own.\n await requireScopeWriteAccess(ctx, node.projectId, args.userId);\n\n const now = Date.now();\n const existingMeta = metadataRecord(node.metadata);\n const metaUpdates: Record<string, unknown> = { ...existingMeta };\n\n if (args.kind !== undefined) {\n metaUpdates.kind = args.kind;\n }\n if (args.tags !== undefined) {\n metaUpdates.tags = args.tags;\n }\n if (args.externalSourceUrl !== undefined) {\n metaUpdates.externalSourceUrl = args.externalSourceUrl;\n }\n\n await ctx.db.patch(resolvedId, {\n canonicalText: args.text ?? node.canonicalText,\n metadata: metaUpdates,\n updatedAt: now,\n });\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: resolvedId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: resolvedId,\n changeType: \"updated\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: { text: node.canonicalText?.slice(0, 200) },\n newState: { text: (args.text ?? node.canonicalText)?.slice(0, 200) },\n });\n\n if (args.text !== undefined) {\n await ctx.scheduler.runAfter(0, EMBEDDING_GENERATION_ACTION, {\n nodeId: resolvedId,\n topicId: node.projectId,\n createdBy: node.createdBy ?? args.userId,\n nodeType: \"evidence\" as const,\n text: args.text,\n });\n }\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { nodeId: resolvedId };\n },\n});\n\nexport const flagAsIncorrect = mutation({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n reason: v.string(),\n suggestedCorrection: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: FlagAsIncorrectArgs) => {\n const now = Date.now();\n\n const node = assertEvidenceNode(\n await ctx.db.get(args.insightId),\n \"Evidence not found in epistemic spine\"\n );\n\n if (!node.projectId) {\n throw new Error(\"Evidence has no project scope\");\n }\n // FR.12g: enforce through the single structured gate (was a discarded\n // `checkProjectAccess` boolean — the FR.12e discarded-access-check bug).\n await requireScopeWriteAccess(ctx, node.projectId, args.userId);\n\n const existingMeta = metadataRecord(node.metadata);\n await ctx.db.patch(node._id, {\n verificationStatus: \"contradicted\",\n metadata: {\n ...existingMeta,\n contradictionReason: args.reason,\n suggestedCorrection: args.suggestedCorrection,\n contradictedBy: args.userId,\n contradictedAt: now,\n },\n updatedAt: now,\n });\n\n await ctx.db.insert(\"verificationResults\", {\n targetType: \"insight\",\n targetId: node._id,\n claimText: node.canonicalText || \"Evidence text not available\",\n verdict: \"contradicted\",\n confidence: 1.0,\n sources: [],\n reasoning: args.reason,\n suggestedRevision: args.suggestedCorrection,\n caveats: [],\n mode: \"deep_verify\",\n verifiedAt: now,\n durationMs: 0,\n projectId: node.projectId,\n userId: args.userId,\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: node._id,\n changeType: \"updated\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n newState: {\n reason: args.reason,\n suggestedCorrection: args.suggestedCorrection,\n },\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n console.log(\n `[EpistemicEvidence] Evidence flagged as incorrect by ${args.userId}: \"${args.insightId.slice(0, 20)}...\"`\n );\n\n return { success: true };\n },\n});\n\nexport const remove = mutation({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n insightId: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: RemoveEvidenceArgs) => {\n const resolvedId = await resolveEvidenceNodeId(ctx, args);\n\n const node = assertEvidenceNode(\n await ctx.db.get(resolvedId),\n \"Evidence node not found\"\n );\n\n if (node.createdBy !== args.userId) {\n throw new Error(\"Only the creator can archive this evidence\");\n }\n\n const now = Date.now();\n\n await ctx.db.patch(resolvedId, {\n status: \"archived\",\n updatedAt: now,\n });\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: resolvedId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: resolvedId,\n changeType: \"archived\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: { status: node.status },\n newState: { status: \"archived\" },\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { nodeId: resolvedId };\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.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) : undefined;\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 ? String(scope.topicId) : undefined;\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) : undefined;\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;\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","// biome-ignore lint/style/useFilenamingConvention: Public graph-primitives API path; keep filename until export-map migration.\n/**\n * Epistemic Linking Mutations\n *\n * Creates proper edges in the epistemic graph when linking entities.\n * These mutations are called by the SuggestedMatches component when\n * a user links items from AI-suggested matches.\n *\n * @see /docs/architecture/EPISTEMIC_SPINE.md\n */\n\nimport { checkProjectAccess } from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx } from \"./convex\";\nimport { internal, mutation } from \"./convex\";\nimport {\n type EpistemicLayer,\n getNodeLayer,\n isDeprecatedEdgeType,\n validateEdgeLayers,\n} from \"./epistemicHelpers\";\n\n// =============================================================================\n// EDGE TYPE MAPPINGS\n// =============================================================================\n\n/**\n * Map frontend relation types to Convex edge types\n */\nconst RELATION_TO_EDGE_TYPE: Record<string, string> = {\n // Cross-type: Evidence → Belief\n supports: \"informs\", // with weight > 0\n contradicts: \"informs\", // with weight < 0\n\n // Cross-type: Question → Belief\n tests: \"tests\",\n\n // Cross-type: Evidence → Question\n answers: \"derived_from\",\n partial: \"derived_from\", // with lower weight\n context: \"derived_from\", // with even lower weight\n\n // Same-type: Belief ↔ Belief\n depends_on: \"depends_on\",\n reinforces: \"supports\",\n parent: \"contains\",\n child: \"contains\",\n\n // Same-type: Question ↔ Question\n prerequisite: \"prerequisite_for\",\n parallel: \"parallel_to\",\n\n // Same-type: Evidence ↔ Evidence\n corroborates: \"corroborates\",\n extends: \"extends\",\n same_source: \"same_source_as\",\n same_theme: \"same_theme_as\",\n\n // Generic\n adjacent: \"related_to\",\n related: \"related_to\",\n informs: \"informs\",\n};\n\ninterface EpistemicNodeRecord {\n _id: Id<\"epistemicNodes\">;\n epistemicLayer?: EpistemicLayer;\n globalId: string;\n nodeType: string;\n projectId?: string;\n}\n\ninterface EvidenceNode extends EpistemicNodeRecord {\n nodeType: \"evidence\";\n}\n\ninterface LinkEvidenceArgs {\n fromInsightId: Id<\"epistemicNodes\">;\n rationale?: string;\n relation: string;\n toInsightId: Id<\"epistemicNodes\">;\n userId: string;\n}\n\ninterface LinkBeliefArgs {\n fromBeliefId: Id<\"epistemicNodes\">;\n rationale?: string;\n relation: string;\n toBeliefId: Id<\"epistemicNodes\">;\n userId: string;\n}\n\nconst EPISTEMIC_LAYERS = new Set<EpistemicLayer>([\n \"L4\",\n \"L3\",\n \"L2\",\n \"L1\",\n \"ontological\",\n \"organizational\",\n]);\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\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 readEpistemicLayer(value: unknown): EpistemicLayer | undefined {\n const layer = readOptionalString(value);\n return layer && EPISTEMIC_LAYERS.has(layer as EpistemicLayer)\n ? (layer as EpistemicLayer)\n : undefined;\n}\n\nfunction readEpistemicNodeRecord(value: unknown): EpistemicNodeRecord | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(record._id);\n const globalId = readOptionalString(record.globalId);\n const nodeType = readOptionalString(record.nodeType);\n if (!(id && globalId && nodeType)) {\n return null;\n }\n\n const node: EpistemicNodeRecord = { _id: id, globalId, nodeType };\n const projectId = readOptionalString(record.projectId);\n if (projectId !== undefined) {\n node.projectId = projectId;\n }\n const epistemicLayer = readEpistemicLayer(record.epistemicLayer);\n if (epistemicLayer !== undefined) {\n node.epistemicLayer = epistemicLayer;\n }\n return node;\n}\n\nfunction isEvidenceNode(\n node: EpistemicNodeRecord | null\n): node is EvidenceNode {\n return node?.nodeType === \"evidence\";\n}\n\nfunction getNodeEpistemicLayer(node: EpistemicNodeRecord): EpistemicLayer {\n return node.epistemicLayer ?? getNodeLayer(node.nodeType);\n}\n\nfunction buildEvidenceEdgePayload(\n ctx: MutationCtx,\n fromInsight: EvidenceNode,\n toInsight: EvidenceNode,\n relation: string,\n userId: string,\n rationale?: string\n) {\n const edgeType = RELATION_TO_EDGE_TYPE[relation] || \"related_to\";\n const fromLayer = getNodeEpistemicLayer(fromInsight);\n const toLayer = getNodeEpistemicLayer(toInsight);\n const validation = validateEdgeLayers(edgeType, fromLayer, toLayer);\n\n if (!validation.valid) {\n console.warn(\n `[EpistemicLinking] Invalid edge blocked: ${validation.reason}`\n );\n return;\n }\n\n if (isDeprecatedEdgeType(edgeType)) {\n console.error(\n `[EpistemicLinking] FORBIDDEN edge type '${edgeType}' blocked. Use compliant edge types.`\n );\n return;\n }\n\n const edgeGlobalId = buildDeterministicEdgeGlobalId(\n String(fromInsight.globalId),\n String(toInsight.globalId),\n edgeType\n );\n\n return ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: fromInsight.globalId,\n toGlobalId: toInsight.globalId,\n edgeType,\n weight: getEdgeWeight(relation),\n context: rationale || `Linked as ${relation}`,\n topicId: fromInsight.projectId ? String(fromInsight.projectId) : undefined,\n createdBy: userId,\n fromNodeType: \"evidence\",\n toNodeType: \"evidence\",\n fromLayer,\n toLayer,\n });\n}\n\n/**\n * Calculate edge weight based on relation type\n */\nfunction getEdgeWeight(relation: string): number {\n switch (relation) {\n case \"supports\":\n case \"corroborates\":\n return 0.7;\n case \"contradicts\":\n return -0.7;\n case \"qualifies\":\n case \"partial\":\n return 0.4;\n case \"context\":\n case \"adjacent\":\n return 0.2;\n case \"depends_on\":\n case \"parent\":\n case \"prerequisite\":\n return 0.8;\n case \"child\":\n return 0.6;\n case \"parallel\":\n case \"extends\":\n case \"same_theme\":\n case \"same_source\":\n return 0.5;\n default:\n return 0.5;\n }\n}\n\nfunction buildDeterministicEdgeGlobalId(\n fromGlobalId: string,\n toGlobalId: string,\n edgeType: string\n): string {\n return `edge_link_${edgeType}_${fromGlobalId}_${toGlobalId}`;\n}\n\n// =============================================================================\n// BELIEF-BELIEF LINKING\n// =============================================================================\n\n/**\n * Link two beliefs with a semantic relationship\n */\nexport const linkBeliefToBelief = mutation({\n args: {\n fromBeliefId: v.id(\"epistemicNodes\"),\n toBeliefId: v.id(\"epistemicNodes\"),\n relation: v.string(), // \"depends_on\" | \"supports\" | \"contains\" | \"contradicts\" | \"adjacent\"\n userId: v.string(),\n rationale: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: LinkBeliefArgs) => {\n const fromBelief = readEpistemicNodeRecord(\n await ctx.db.get(args.fromBeliefId)\n );\n const toBelief = readEpistemicNodeRecord(await ctx.db.get(args.toBeliefId));\n\n if (\n !(fromBelief && toBelief) ||\n fromBelief.nodeType !== \"belief\" ||\n toBelief.nodeType !== \"belief\"\n ) {\n throw new Error(\"One or both beliefs not found\");\n }\n\n // Verify project access\n if (fromBelief.projectId) {\n const hasAccess = await checkProjectAccess(\n ctx,\n fromBelief.projectId,\n args.userId\n );\n if (!hasAccess) {\n throw new Error(\"No permission to link these beliefs\");\n }\n }\n\n const fromNode = fromBelief;\n const toNode = toBelief;\n\n if (fromNode && toNode) {\n // Create epistemic edge\n const edgeType = RELATION_TO_EDGE_TYPE[args.relation] || \"related_to\";\n const weight = getEdgeWeight(args.relation);\n\n // Phase 2C: Get layers and validate\n const fromLayer = getNodeEpistemicLayer(fromNode);\n const toLayer = getNodeEpistemicLayer(toNode);\n\n const validation = validateEdgeLayers(edgeType, fromLayer, toLayer);\n if (!validation.valid) {\n console.warn(\n `[EpistemicLinking] Invalid edge blocked: ${validation.reason}`\n );\n // Don't throw - just skip creating invalid edge to avoid breaking UI\n } else if (isDeprecatedEdgeType(edgeType)) {\n // Block removed edge types\n console.error(\n `[EpistemicLinking] FORBIDDEN edge type '${edgeType}' blocked. Use compliant edge types.`\n );\n // Skip creating - don't break UI\n } else {\n // Deterministic IDs make Neo4j MERGE idempotent without relying on Convex mirrors.\n const edgeGlobalId = buildDeterministicEdgeGlobalId(\n fromNode.globalId,\n toNode.globalId,\n edgeType\n );\n\n // Phase 1 (Graph Architecture): Write to Neo4j directly\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: fromNode.globalId,\n toGlobalId: toNode.globalId,\n edgeType,\n weight,\n context: args.rationale || `Linked as ${args.relation}`,\n topicId: fromBelief.projectId\n ? String(fromBelief.projectId)\n : undefined,\n createdBy: args.userId,\n fromNodeType: \"belief\",\n toNodeType: \"belief\",\n fromLayer,\n toLayer,\n });\n }\n }\n\n return { success: true };\n },\n});\n\n// =============================================================================\n// QUESTION-QUESTION LINKING\n// =============================================================================\n\n/**\n * ⛔ DEPRECATED: Question-to-question linking is disabled.\n *\n * Raw questions are excluded from the graph visualization once key questions exist,\n * so question-to-question edges create unnecessary noise without providing value.\n *\n * This mutation now returns success without creating edges for backwards compatibility.\n */\nexport const linkQuestionToQuestion = mutation({\n args: {\n fromQuestionId: v.id(\"epistemicNodes\"),\n toQuestionId: v.id(\"epistemicNodes\"),\n relation: v.string(), // \"parent\" | \"child\" | \"prerequisite\" | \"parallel\" | \"contradicts\" | \"adjacent\"\n userId: v.string(),\n rationale: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: (_ctx, _args) => {\n // ⛔ Question-to-question edges are no longer created.\n // Raw questions are excluded from the graph once key questions exist.\n console.log(\n \"[EpistemicLinking] Question-to-question linking is deprecated and disabled.\"\n );\n return { success: true, deprecated: true };\n },\n});\n\n// =============================================================================\n// EVIDENCE-EVIDENCE LINKING\n// =============================================================================\n\n/**\n * Link two pieces of evidence with a semantic relationship\n */\nexport const linkEvidenceToEvidence = mutation({\n args: {\n fromInsightId: v.id(\"epistemicNodes\"),\n toInsightId: v.id(\"epistemicNodes\"),\n relation: v.string(), // \"corroborates\" | \"contradicts\" | \"extends\" | \"same_source\" | \"same_theme\" | \"adjacent\"\n userId: v.string(),\n rationale: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: LinkEvidenceArgs) => {\n const fromInsight = readEpistemicNodeRecord(\n await ctx.db.get(args.fromInsightId)\n );\n const toInsight = readEpistemicNodeRecord(\n await ctx.db.get(args.toInsightId)\n );\n\n if (!(fromInsight && toInsight)) {\n throw new Error(\"One or both insights not found\");\n }\n\n // Verify project access\n if (fromInsight.projectId) {\n const hasAccess = await checkProjectAccess(\n ctx,\n fromInsight.projectId,\n args.userId\n );\n if (!hasAccess) {\n throw new Error(\"No permission to link these evidence items\");\n }\n }\n\n const fromNode = isEvidenceNode(fromInsight) ? fromInsight : null;\n const toNode = isEvidenceNode(toInsight) ? toInsight : null;\n\n if (fromNode && toNode) {\n await buildEvidenceEdgePayload(\n ctx,\n fromNode,\n toNode,\n args.relation,\n args.userId,\n args.rationale\n );\n }\n\n return { success: true };\n },\n});\n","// biome-ignore-all lint/performance/noBarrelFile: Public graph-primitives compatibility facade; split after export-map migration.\n// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Epistemic Nodes - CRUD operations for the knowledge graph nodes\n *\n * Every belief, question, evidence, and source in StackOS is an epistemic node.\n * This is the canonical identity layer - these records are the source of truth.\n *\n * @see /docs/architecture/EPISTEMIC_SPINE.md\n */\n\n// Query exports\nexport {\n get,\n getByContentHash,\n getByGlobalId,\n getByProject,\n getByProjectAndType,\n getByProjectAndTypeLite,\n listAll,\n search,\n} from \"./epistemicNodes.queries\";\n// Types / validators\nexport {\n epistemicLayerValidator,\n epistemicNodeTypeValidator,\n l1NodeTypeValidator,\n l2NodeTypeValidator,\n l3NodeTypeValidator,\n l4NodeTypeValidator,\n nodeTypeValidator,\n ontologicalNodeTypeValidator,\n organizationalNodeTypeValidator,\n sourceTypeValidator,\n statusValidator,\n verificationStatusValidator,\n} from \"./epistemicNodes.validators\";\n\nimport { getByProject as getByProjectQuery } from \"./epistemicNodes.queries\";\n\nexport const getByTopic = getByProjectQuery;\n\n// Internal helpers/mutations\nexport {\n backfillTopicId,\n createInternal,\n getInternal,\n getNodesPendingEdgeSync,\n hardDelete,\n updateSyncStatus,\n} from \"./epistemicNodes.internal\";\n// Public mutations\nexport {\n archive,\n batchCreate,\n create,\n supersede,\n update,\n verify,\n} from \"./epistemicNodes.mutations\";\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport type { Id, QueryCtx } from \"./convex\";\nimport type { resolveTopicProjectScope } from \"./topicScope\";\n\nconst DEFAULT_NODE_PAGE_SIZE = 250;\nexport const MAX_NODE_PAGE_SIZE = 8000;\n\ntype WorkspaceNodeScope = Awaited<ReturnType<typeof resolveTopicProjectScope>>;\n\nexport type EpistemicNodeStatus =\n | \"active\"\n | \"superseded\"\n | \"archived\"\n | \"deleted\";\n\nexport interface NodeIndexQuery {\n eq(field: string, value: unknown): NodeIndexQuery;\n}\n\nexport interface NodeSearchIndexQuery {\n eq(field: string, value: unknown): NodeSearchIndexQuery;\n search(field: string, value: string): NodeSearchIndexQuery;\n}\n\nexport interface NodeQueryChain<T> {\n collect(): Promise<T[]>;\n first(): Promise<T | null>;\n order(direction: \"asc\" | \"desc\"): NodeQueryChain<T>;\n take(limit: number): Promise<T[]>;\n withIndex(\n _name: string,\n callback: (q: NodeIndexQuery) => NodeIndexQuery\n ): NodeQueryChain<T>;\n withSearchIndex(\n _name: string,\n callback: (q: NodeSearchIndexQuery) => NodeSearchIndexQuery\n ): NodeQueryChain<T>;\n}\n\ntype ScopedNodeCtx = Omit<QueryCtx, \"db\"> & {\n db: {\n query<T extends WorkspaceScopedNode = WorkspaceScopedNode>(\n _table: \"epistemicNodes\"\n ): NodeQueryChain<T>;\n };\n};\nexport interface WorkspaceScopedNode {\n _id: Id<\"epistemicNodes\">;\n nodeType: string;\n projectId?: string;\n status: EpistemicNodeStatus;\n topicId?: Id<\"topics\"> | string;\n}\n\nexport function clampNodeLimit(\n limit: number | undefined,\n fallback = DEFAULT_NODE_PAGE_SIZE\n): number {\n if (!Number.isFinite(limit)) {\n return fallback;\n }\n return Math.max(1, Math.min(Math.floor(limit as number), MAX_NODE_PAGE_SIZE));\n}\n\ntype NodeStatusResult =\n | { success: true }\n | { success: true; effectiveStatus: \"archived\" }\n | { success: false; error: \"Node not found\" }\n | { success: true; deletedEdgeCount: number };\n\nexport function buildNodeStatusSuccessResult(): NodeStatusResult {\n return { success: true };\n}\n\nexport function buildNodeArchivedResult(): NodeStatusResult {\n return {\n success: true,\n effectiveStatus: \"archived\",\n };\n}\n\nexport function buildNodeNotFoundResult(): NodeStatusResult {\n const result = {} as Extract<NodeStatusResult, { success: false }>;\n result.success = false;\n result.error = \"Node not found\";\n return result;\n}\n\nexport function buildNodeDeletedResult(\n deletedEdgeCount: number\n): NodeStatusResult {\n return {\n success: true,\n deletedEdgeCount,\n };\n}\n\nfunction dedupeWorkspaceNodes<T extends { _id: unknown }>(nodes: T[]): T[] {\n const seen = new Set<string>();\n const deduped: T[] = [];\n\n for (const node of nodes) {\n const key = String(node._id);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n deduped.push(node);\n }\n\n return deduped;\n}\n\nexport function nodeMatchesWorkspaceReasoningScope(\n node: Pick<WorkspaceScopedNode, \"topicId\" | \"projectId\">,\n scope: WorkspaceNodeScope\n): boolean {\n return (\n (scope.topicId !== undefined && node.topicId === scope.topicId) ||\n (scope.projectId !== undefined && node.projectId === scope.projectId)\n );\n}\n\nexport async function collectScopedNodes(\n ctx: ScopedNodeCtx,\n scope: WorkspaceNodeScope,\n args: {\n nodeType?: string;\n scanLimit: number;\n }\n): Promise<WorkspaceScopedNode[]> {\n const queries: Promise<WorkspaceScopedNode[]>[] = [];\n\n if (scope.topicId) {\n queries.push(\n args.nodeType\n ? ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", args.nodeType)\n )\n .order(\"desc\")\n .take(args.scanLimit)\n : ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic\", (q) => q.eq(\"topicId\", scope.topicId))\n .order(\"desc\")\n .take(args.scanLimit)\n );\n }\n\n if (scope.projectId && !scope.topicId) {\n queries.push(\n args.nodeType\n ? ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", scope.projectId).eq(\"nodeType\", args.nodeType)\n )\n .order(\"desc\")\n .take(args.scanLimit)\n : ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic\", (q) => q.eq(\"topicId\", scope.projectId))\n .order(\"desc\")\n .take(args.scanLimit)\n );\n }\n\n const combined = dedupeWorkspaceNodes((await Promise.all(queries)).flat());\n return combined.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, scope)\n );\n}\n\nexport type { WorkspaceNodeScope };\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport { v } from \"convex/values\";\n\n// =============================================================================\n// TYPES (Phase 2A: Layer Architecture Compliant)\n// =============================================================================\n\n/**\n * Epistemic Layer Validator\n * L4: Decisions, outcomes - audit targets\n * L3: Beliefs, questions, themes - traversal anchors\n * L2: Claims, evidence, synthesis - compression boundary\n * L1: Atomic facts, excerpts, sources - terminal leaves\n */\nexport const epistemicLayerValidator = v.union(\n v.literal(\"L4\"),\n v.literal(\"L3\"),\n v.literal(\"L2\"),\n v.literal(\"L1\"),\n v.literal(\"ontological\"),\n v.literal(\"organizational\")\n);\n\n// L4: Audit targets (decisions, outcomes)\nexport const l4NodeTypeValidator = v.union(v.literal(\"decision\"));\n\n// L3: Traversal anchors (epistemic structure)\nexport const l3NodeTypeValidator = v.union(\n v.literal(\"belief\"),\n v.literal(\"question\"),\n v.literal(\"theme\"),\n v.literal(\"deal\")\n);\n\n// L2: Compression boundary (minimum reasoning unit)\nexport const l2NodeTypeValidator = v.union(\n v.literal(\"claim\"),\n v.literal(\"evidence\"),\n v.literal(\"synthesis\")\n);\n\n// L1: Terminal leaves (non-traversable, grounding)\nexport const l1NodeTypeValidator = v.union(\n v.literal(\"atomic_fact\"),\n v.literal(\"excerpt\"),\n v.literal(\"source\")\n);\n\n// Epistemic node types (knowledge objects) - all layers\nexport const epistemicNodeTypeValidator = v.union(\n // L4: Audit targets\n v.literal(\"decision\"),\n // L3: Traversal anchors\n v.literal(\"belief\"),\n v.literal(\"question\"),\n v.literal(\"theme\"),\n v.literal(\"deal\"),\n // L2: Compression boundary\n v.literal(\"claim\"),\n v.literal(\"evidence\"),\n v.literal(\"synthesis\"),\n v.literal(\"answer\"),\n // L1: Terminal leaves\n v.literal(\"atomic_fact\"),\n v.literal(\"excerpt\"),\n v.literal(\"source\")\n);\n\n// Ontological node types (real-world entities)\nexport const ontologicalNodeTypeValidator = v.union(\n v.literal(\"company\"),\n v.literal(\"person\"),\n v.literal(\"investor\"),\n v.literal(\"function\"),\n v.literal(\"value_chain\")\n);\n\n// Organizational node types (structural containers)\nexport const organizationalNodeTypeValidator = v.union(v.literal(\"topic\"));\n\n// All node types\nexport const nodeTypeValidator = v.union(\n // L4: Audit targets\n v.literal(\"decision\"),\n // L3: Traversal anchors\n v.literal(\"belief\"),\n v.literal(\"question\"),\n v.literal(\"theme\"),\n v.literal(\"deal\"),\n // L2: Compression boundary\n v.literal(\"claim\"),\n v.literal(\"evidence\"),\n v.literal(\"synthesis\"),\n v.literal(\"answer\"),\n // L1: Terminal leaves\n v.literal(\"atomic_fact\"),\n v.literal(\"excerpt\"),\n v.literal(\"source\"),\n // Ontological\n v.literal(\"company\"),\n v.literal(\"person\"),\n v.literal(\"investor\"),\n v.literal(\"function\"),\n v.literal(\"value_chain\"),\n // Organizational\n v.literal(\"topic\")\n);\n\nexport const sourceTypeValidator = v.union(\n v.literal(\"human\"),\n v.literal(\"ai_extracted\"),\n v.literal(\"ai_generated\"),\n v.literal(\"imported\"),\n v.literal(\"system\") // System-generated (migrations, classifiers)\n);\n\nexport const statusValidator = v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\"),\n v.literal(\"deleted\")\n);\n\nexport const verificationStatusValidator = v.union(\n v.literal(\"unverified\"),\n v.literal(\"human_verified\"),\n v.literal(\"ai_verified\"),\n v.literal(\"contradicted\"),\n v.literal(\"outdated\")\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 { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, QueryCtx } from \"./convex\";\nimport { query } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport {\n clampNodeLimit,\n collectScopedNodes,\n type EpistemicNodeStatus,\n MAX_NODE_PAGE_SIZE,\n type NodeQueryChain,\n nodeMatchesWorkspaceReasoningScope,\n type WorkspaceNodeScope,\n type WorkspaceScopedNode,\n} from \"./epistemicNodes.helpers\";\nimport {\n nodeTypeValidator,\n statusValidator,\n} from \"./epistemicNodes.validators\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\n\nconst optionalNodeScopeArgs = optionalScopeArgs;\n\ntype EpistemicNodeType =\n | \"decision\"\n | \"belief\"\n | \"question\"\n | \"theme\"\n | \"deal\"\n | \"claim\"\n | \"evidence\"\n | \"synthesis\"\n | \"answer\"\n | \"atomic_fact\"\n | \"excerpt\"\n | \"source\"\n | \"company\"\n | \"person\"\n | \"investor\"\n | \"function\"\n | \"value_chain\"\n | \"topic\";\n\ninterface OptionalNodeScope {\n projectId?: string;\n topicId?: Id<\"topics\"> | string;\n}\n\ninterface EpistemicNodeRow extends WorkspaceScopedNode {\n createdBy: string;\n epistemicLayer?: string;\n globalId: string;\n}\n\ninterface LiteEpistemicNode\n extends Pick<\n EpistemicNodeRow,\n | \"_id\"\n | \"createdBy\"\n | \"epistemicLayer\"\n | \"globalId\"\n | \"nodeType\"\n | \"projectId\"\n | \"status\"\n | \"topicId\"\n > {}\n\ninterface EpistemicNodesQueryCtx extends Omit<QueryCtx, \"db\"> {\n db: {\n get(id: Id<\"epistemicNodes\">): Promise<EpistemicNodeRow | null>;\n query<T extends WorkspaceScopedNode = EpistemicNodeRow>(\n tableName: \"epistemicNodes\"\n ): NodeQueryChain<T>;\n };\n}\n\ninterface GetNodeArgs {\n nodeId: Id<\"epistemicNodes\">;\n}\n\ninterface GetByGlobalIdArgs {\n globalId: string;\n}\n\ninterface GetByContentHashArgs {\n contentHash: string;\n}\n\ninterface ScopedNodeTypeArgs extends OptionalNodeScope {\n limit?: number;\n nodeType: EpistemicNodeType;\n status?: EpistemicNodeStatus;\n}\n\ninterface ScopedProjectArgs extends OptionalNodeScope {\n includeArchived?: boolean;\n limit?: number;\n userId?: string;\n}\n\ninterface ListAllArgs {\n limit?: number;\n}\n\ninterface SearchArgs extends OptionalNodeScope {\n limit?: number;\n nodeType?: EpistemicNodeType;\n searchQuery: string;\n}\n\nfunction asEpistemicNodesQueryCtx(ctx: QueryCtx): EpistemicNodesQueryCtx {\n return ctx as unknown as EpistemicNodesQueryCtx;\n}\n\nfunction isInScope(\n node: WorkspaceScopedNode,\n scope: WorkspaceNodeScope\n): boolean {\n return nodeMatchesWorkspaceReasoningScope(node, scope);\n}\n\nfunction isStatus(status: EpistemicNodeStatus) {\n return (node: WorkspaceScopedNode): boolean => node.status === status;\n}\n\nfunction isStatusInScope(\n status: EpistemicNodeStatus,\n scope: WorkspaceNodeScope\n) {\n return (node: WorkspaceScopedNode): boolean =>\n isStatus(status)(node) && isInScope(node, scope);\n}\n\nfunction isNotDeletedInScope(scope: WorkspaceNodeScope) {\n return (node: WorkspaceScopedNode): boolean =>\n node.status !== \"deleted\" && isInScope(node, scope);\n}\n\nfunction toLiteNode(node: EpistemicNodeRow): LiteEpistemicNode {\n return {\n _id: node._id,\n globalId: node.globalId,\n nodeType: node.nodeType,\n createdBy: node.createdBy,\n topicId: node.topicId,\n projectId: node.projectId,\n status: node.status,\n epistemicLayer: node.epistemicLayer,\n };\n}\n\n/**\n * Get a single node by ID\n */\nexport const get = query({\n args: { nodeId: v.id(\"epistemicNodes\") },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetNodeArgs) =>\n await asEpistemicNodesQueryCtx(ctx).db.get(args.nodeId),\n});\n\n/**\n * Get a node by its global UUID\n */\nexport const getByGlobalId = query({\n args: { globalId: v.string() },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetByGlobalIdArgs) =>\n await asEpistemicNodesQueryCtx(ctx)\n .db.query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", args.globalId))\n .first(),\n});\n\n/**\n * Find nodes by content hash (for deduplication)\n */\nexport const getByContentHash = query({\n args: { contentHash: v.string() },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetByContentHashArgs) =>\n await asEpistemicNodesQueryCtx(ctx)\n .db.query(\"epistemicNodes\")\n .withIndex(\"by_contentHash\", (q) => q.eq(\"contentHash\", args.contentHash))\n .collect(),\n});\n\n/**\n * Get all nodes of a specific type for a project\n */\nexport const getByProjectAndType = query({\n args: {\n ...optionalNodeScopeArgs,\n nodeType: nodeTypeValidator,\n status: v.optional(statusValidator),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: ScopedNodeTypeArgs) => {\n if (!args.topicId) {\n return [];\n }\n const queryCtx = asEpistemicNodesQueryCtx(ctx);\n\n let scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>;\n try {\n scope = await resolveTopicProjectScope(queryCtx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicNodes] Failed to resolve getByProjectAndType scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n }\n );\n return [];\n }\n\n const pageSize = clampNodeLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_NODE_PAGE_SIZE);\n const nodes = await collectScopedNodes(queryCtx, scope, {\n nodeType: args.nodeType,\n scanLimit,\n });\n\n // Filter by status if provided\n if (args.status) {\n return nodes\n .filter(isStatusInScope(args.status, scope))\n .slice(0, pageSize);\n }\n\n // Default to active nodes only\n return nodes.filter(isStatusInScope(\"active\", scope)).slice(0, pageSize);\n },\n});\n\n/**\n * Lightweight variant of getByProjectAndType for operational scripts.\n * Returns compact node metadata and supports limits to avoid oversized payloads.\n */\nexport const getByProjectAndTypeLite = query({\n args: {\n ...optionalNodeScopeArgs,\n nodeType: nodeTypeValidator,\n status: v.optional(statusValidator),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: ScopedNodeTypeArgs) => {\n if (!args.topicId) {\n return [];\n }\n const queryCtx = asEpistemicNodesQueryCtx(ctx);\n\n let scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>;\n try {\n scope = await resolveTopicProjectScope(queryCtx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicNodes] Failed to resolve getByNodeType scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n }\n );\n return [];\n }\n\n const pageSize = clampNodeLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_NODE_PAGE_SIZE);\n const nodeQuery = queryCtx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", args.nodeType)\n );\n\n const nodes = await nodeQuery.order(\"desc\").take(scanLimit);\n const statusFiltered = args.status\n ? nodes.filter(isStatus(args.status))\n : nodes.filter(isStatus(\"active\"));\n const capped = statusFiltered.slice(0, pageSize);\n\n return capped.map(toLiteNode);\n },\n});\n\n/**\n * Get all nodes for a project\n */\nexport const getByProject = query({\n args: {\n ...optionalNodeScopeArgs,\n userId: v.optional(v.string()),\n includeArchived: v.optional(v.boolean()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: ScopedProjectArgs) => {\n if (!args.topicId) {\n return [];\n }\n const queryCtx = asEpistemicNodesQueryCtx(ctx);\n\n const pageSize = clampNodeLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_NODE_PAGE_SIZE);\n let scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>;\n try {\n scope = await resolveTopicProjectScope(queryCtx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicNodes] Failed to resolve list scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n }\n );\n return [];\n }\n\n // userId is optional — if not provided, skip access check (internal callers)\n if (args.userId) {\n const hasAccess = await checkScopeAccess(\n ctx,\n String(scope.topicId),\n args.userId\n );\n if (!hasAccess) {\n return [];\n }\n }\n\n const nodes = await collectScopedNodes(queryCtx, scope, { scanLimit });\n\n if (args.includeArchived) {\n return nodes.filter(isNotDeletedInScope(scope)).slice(0, pageSize);\n }\n\n return nodes.filter(isStatusInScope(\"active\", scope)).slice(0, pageSize);\n },\n});\n\n/**\n * List all active nodes (unscoped — for internal dev tools).\n * No project filtering, no access control.\n */\nexport const listAll = query({\n args: {\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: ListAllArgs) => {\n const queryCtx = asEpistemicNodesQueryCtx(ctx);\n const pageSize = clampNodeLimit(args.limit ?? 2000);\n const scanLimit = Math.min(pageSize * 2, MAX_NODE_PAGE_SIZE * 2);\n const nodes = await queryCtx.db\n .query(\"epistemicNodes\")\n .order(\"desc\")\n .take(scanLimit);\n return nodes.filter(isStatus(\"active\")).slice(0, pageSize);\n },\n});\n\n/**\n * Search nodes by text content\n */\nexport const search = query({\n args: {\n searchQuery: v.string(),\n ...optionalNodeScopeArgs,\n nodeType: v.optional(nodeTypeValidator),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: SearchArgs) => {\n const queryCtx = asEpistemicNodesQueryCtx(ctx);\n const pageSize = clampNodeLimit(args.limit, 100);\n let scope: Awaited<ReturnType<typeof resolveTopicProjectScope>> | undefined;\n\n if (args.topicId) {\n try {\n scope = await resolveTopicProjectScope(queryCtx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicNodes] Failed to resolve search scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n }\n );\n return [];\n }\n }\n\n const searchResults = queryCtx.db\n .query(\"epistemicNodes\")\n .withSearchIndex(\"search_canonicalText\", (q) => {\n let search = q.search(\"canonicalText\", args.searchQuery);\n if (scope?.topicId) {\n search = search.eq(\"topicId\", scope.topicId);\n } else if (scope?.projectId) {\n search = search.eq(\"projectId\", scope.projectId);\n }\n if (args.nodeType) {\n search = search.eq(\"nodeType\", args.nodeType);\n }\n return search.eq(\"status\", \"active\");\n });\n\n return await searchResults.take(pageSize);\n },\n});\n","/**\n * helpers module implementation.\n */\n\nimport { type Id, internal, type MutationCtx } from \"./convex\";\nimport { type EpistemicLayer, validateEdgeLayers } from \"./edgeValidation\";\nimport { generateGlobalId } from \"./globalId\";\nimport { getNodeLayer as resolveNodeLayer } from \"./graphTypes\";\n\n// biome-ignore lint/performance/noBarrelFile: Public helper compatibility export retained for existing graph-primitives consumers.\nexport { getNodeLayer } from \"./graphTypes\";\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nexport async function createEpistemicEdge(\n ctx: MutationCtx,\n params: {\n fromNodeId: Id<\"epistemicNodes\">;\n toNodeId: Id<\"epistemicNodes\">;\n edgeType: string;\n weight?: number;\n confidence?: number;\n context?: string;\n projectId?: string;\n createdBy: string;\n skipLayerValidation?: boolean;\n }\n): Promise<string> {\n const globalId = generateGlobalId();\n\n const fromNode = await ctx.db.get(params.fromNodeId);\n const toNode = await ctx.db.get(params.toNodeId);\n\n if (!(fromNode && toNode)) {\n throw new Error(\"One or both nodes not found\");\n }\n\n const fromNodeType = readOptionalString(fromNode.nodeType);\n const toNodeType = readOptionalString(toNode.nodeType);\n const fromGlobalId = readOptionalString(fromNode.globalId);\n const toGlobalId = readOptionalString(toNode.globalId);\n if (!(fromNodeType && toNodeType && fromGlobalId && toGlobalId)) {\n throw new Error(\n \"Cannot create epistemic edge without canonical nodeType and globalId on both endpoints\"\n );\n }\n\n const fromLayer =\n readOptionalString(fromNode.epistemicLayer) ??\n resolveNodeLayer(fromNodeType);\n const toLayer =\n readOptionalString(toNode.epistemicLayer) ?? resolveNodeLayer(toNodeType);\n\n if (!params.skipLayerValidation) {\n const validation = validateEdgeLayers(\n params.edgeType,\n fromLayer as EpistemicLayer,\n toLayer as EpistemicLayer\n );\n if (!validation.valid) {\n throw new Error(\n `[EdgeValidation] Invalid edge: ${validation.reason}. ` +\n `Attempted: ${params.edgeType} from ${fromNodeType}(${fromLayer}) → ${toNodeType}(${toLayer})`\n );\n }\n }\n\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId,\n fromGlobalId,\n toGlobalId,\n edgeType: params.edgeType,\n weight: params.weight,\n confidence: params.confidence,\n context: params.context,\n createdBy: params.createdBy,\n topicId: params.projectId ? String(params.projectId) : undefined,\n fromNodeType,\n toNodeType,\n fromLayer,\n toLayer,\n });\n\n return globalId;\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Invariant error helpers that protect belief lifecycle mutations. */\nimport { hasResolvedPredictionOutcome } from \"./beliefLifecycle\";\n\ntype StructuredInvariantError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ninterface BeliefNodeLike {\n _id?: string;\n confidence?: unknown;\n metadata?: unknown;\n nodeType?: unknown;\n predictionMeta?: unknown;\n}\n\ninterface InvariantArgs {\n code?: string;\n details?: unknown;\n invariantCode:\n | \"belief.formulation_immutable_after_scoring\"\n | \"belief.confidence_append_only\"\n | \"belief.status_transition_requires_belief_api\"\n | \"belief.lineage_requires_fork_belief\"\n | \"belief.hard_delete_forbidden\"\n | \"entity.create_requires_entity_lifecycle\"\n | \"entity.update_requires_entity_lifecycle\"\n | \"entity.archive_requires_entity_lifecycle\"\n | \"entity.supersede_requires_entity_lifecycle\";\n message: string;\n status?: number;\n suggestion: string;\n}\n\nconst FORBIDDEN_GENERIC_BELIEF_METADATA_KEYS = new Set([\n \"beliefStatus\",\n \"epistemicStatus\",\n \"forkedBy\",\n \"forkedFrom\",\n \"forkReason\",\n \"forkTimestamp\",\n \"status\",\n \"supersededBy\",\n \"supersedes\",\n]);\n\nconst ONTOLOGICAL_NODE_TYPES = new Set([\n \"company\",\n \"person\",\n \"investor\",\n \"function\",\n \"value_chain\",\n]);\n\nfunction throwInvariantError(args: InvariantArgs): never {\n const error = new Error(args.message) as StructuredInvariantError;\n error.status = args.status ?? 409;\n error.code = args.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 isBeliefNode(node: BeliefNodeLike | null | undefined): boolean {\n return node?.nodeType === \"belief\";\n}\n\nexport function isOntologicalNode(\n node: BeliefNodeLike | null | undefined\n): boolean {\n return (\n typeof node?.nodeType === \"string\" &&\n ONTOLOGICAL_NODE_TYPES.has(node.nodeType)\n );\n}\n\nexport function isScoredBeliefNode(node: BeliefNodeLike): boolean {\n if (!isBeliefNode(node)) {\n return false;\n }\n\n const metadata =\n node.metadata && typeof node.metadata === \"object\"\n ? (node.metadata as Record<string, unknown>)\n : undefined;\n\n const numericConfidence =\n typeof node.confidence === \"number\" && Number.isFinite(node.confidence);\n if (numericConfidence) {\n return true;\n }\n\n return (\n hasResolvedPredictionOutcome(node.predictionMeta) ||\n hasResolvedPredictionOutcome(metadata?.predictionMeta)\n );\n}\n\nfunction getForbiddenMetadataKeys(metadata: unknown): string[] {\n if (!metadata || typeof metadata !== \"object\" || Array.isArray(metadata)) {\n return [];\n }\n\n return Object.keys(metadata).filter((key) =>\n FORBIDDEN_GENERIC_BELIEF_METADATA_KEYS.has(key)\n );\n}\n\nexport function assertBeliefNodeGenericUpdateAllowed(args: {\n node: BeliefNodeLike;\n updates: Record<string, unknown>;\n mutationName: string;\n}): void {\n if (!isBeliefNode(args.node)) {\n return;\n }\n\n if (Object.hasOwn(args.updates, \"confidence\")) {\n throwInvariantError({\n message:\n \"Belief confidence is append-only. Generic node updates cannot set confidence directly.\",\n invariantCode: \"belief.confidence_append_only\",\n suggestion:\n \"Use epistemicBeliefs.appendSlScoring() so the beliefConfidence ledger and audit trail are updated together.\",\n details: { mutationName: args.mutationName, nodeId: args.node._id },\n });\n }\n\n if (Object.hasOwn(args.updates, \"status\")) {\n throwInvariantError({\n message:\n \"Belief status transitions must use the dedicated belief lifecycle APIs.\",\n invariantCode: \"belief.status_transition_requires_belief_api\",\n suggestion:\n \"Use epistemicBeliefs.updateStatus() or epistemicBeliefs.archive() so status transitions emit the correct audit event.\",\n details: { mutationName: args.mutationName, nodeId: args.node._id },\n });\n }\n\n const forbiddenMetadataKeys = getForbiddenMetadataKeys(args.updates.metadata);\n if (forbiddenMetadataKeys.length > 0) {\n throwInvariantError({\n message:\n \"Belief lineage and lifecycle metadata cannot be rewritten through generic node updates.\",\n invariantCode: \"belief.lineage_requires_fork_belief\",\n suggestion:\n \"Use epistemicBeliefs.forkBelief() for lineage changes and dedicated belief lifecycle mutations for status changes.\",\n details: {\n mutationName: args.mutationName,\n nodeId: args.node._id,\n forbiddenMetadataKeys,\n },\n });\n }\n\n if (\n isScoredBeliefNode(args.node) &&\n (Object.hasOwn(args.updates, \"canonicalText\") ||\n Object.hasOwn(args.updates, \"contentHash\"))\n ) {\n throwInvariantError({\n message:\n \"Cannot refine a scored belief in place. Scored formulations are immutable.\",\n invariantCode: \"belief.formulation_immutable_after_scoring\",\n suggestion:\n \"Use epistemicBeliefs.forkBelief() to evolve the formulation while preserving lineage.\",\n details: { mutationName: args.mutationName, nodeId: args.node._id },\n });\n }\n}\n\nexport function assertBeliefNodeArchiveAllowed(args: {\n node: BeliefNodeLike;\n mutationName: string;\n}): void {\n if (!isBeliefNode(args.node)) {\n return;\n }\n\n throwInvariantError({\n message:\n \"Belief archiving must go through the dedicated belief lifecycle API.\",\n invariantCode: \"belief.status_transition_requires_belief_api\",\n suggestion:\n \"Use epistemicBeliefs.archive() so the belief lifecycle audit trail stays consistent.\",\n details: { mutationName: args.mutationName, nodeId: args.node._id },\n });\n}\n\nexport function assertBeliefNodeVerifyAllowed(args: {\n node: BeliefNodeLike;\n confidence: number | undefined;\n mutationName: string;\n}): void {\n if (!isBeliefNode(args.node) || args.confidence === undefined) {\n return;\n }\n\n throwInvariantError({\n message:\n \"Belief verification cannot set confidence directly. Confidence changes must stay append-only.\",\n invariantCode: \"belief.confidence_append_only\",\n suggestion:\n \"Call epistemicBeliefs.appendSlScoring() after verification so the confidence history is preserved.\",\n details: { mutationName: args.mutationName, nodeId: args.node._id },\n });\n}\n\nexport function assertBeliefNodeSupersedeAllowed(args: {\n node: BeliefNodeLike;\n mutationName: string;\n}): void {\n if (!isBeliefNode(args.node)) {\n return;\n }\n\n throwInvariantError({\n message:\n \"Belief lineage changes must use forkBelief(), not the generic supersede path.\",\n invariantCode: \"belief.lineage_requires_fork_belief\",\n suggestion:\n \"Use epistemicBeliefs.forkBelief() so the child belief, supersedes edge, and audit trail are created together.\",\n details: { mutationName: args.mutationName, nodeId: args.node._id },\n });\n}\n\nexport function assertBeliefNodeHardDeleteAllowed(args: {\n node: BeliefNodeLike;\n allowBeliefHardDelete: boolean;\n reason: string;\n mutationName: string;\n}): void {\n if (!isBeliefNode(args.node)) {\n return;\n }\n\n if (!args.allowBeliefHardDelete) {\n throwInvariantError({\n message:\n \"Belief hard delete is forbidden by default. Beliefs must retain lineage and audit history.\",\n invariantCode: \"belief.hard_delete_forbidden\",\n suggestion:\n \"Use epistemicBeliefs.archive() or epistemicBeliefs.forkBelief() instead. Only migration repair flows may opt into hard delete explicitly.\",\n details: { mutationName: args.mutationName, nodeId: args.node._id },\n });\n }\n\n if (!args.reason.trim().toLowerCase().startsWith(\"migration:\")) {\n throwInvariantError({\n message:\n \"Belief hard delete bypasses require a migration-scoped rationale.\",\n invariantCode: \"belief.hard_delete_forbidden\",\n suggestion:\n 'Retry with allowBeliefHardDelete: true and a reason starting with \"migration:\" only for one-off data repair flows.',\n details: {\n mutationName: args.mutationName,\n nodeId: args.node._id,\n reason: args.reason,\n },\n });\n }\n}\n\nexport function assertOntologicalNodeGenericCreateAllowed(args: {\n nodeType: string;\n mutationName: string;\n}): void {\n if (!ONTOLOGICAL_NODE_TYPES.has(args.nodeType)) {\n return;\n }\n\n throwInvariantError({\n message:\n \"Ontological entities must be created through the dedicated entity lifecycle API.\",\n invariantCode: \"entity.create_requires_entity_lifecycle\",\n suggestion:\n \"Use entityLifecycle.createEntity() so tenant-global canonical scope and deduplication are enforced.\",\n details: {\n mutationName: args.mutationName,\n nodeType: args.nodeType,\n },\n });\n}\n\nexport function assertOntologicalNodeGenericUpdateAllowed(args: {\n node: BeliefNodeLike;\n mutationName: string;\n}): void {\n if (!isOntologicalNode(args.node)) {\n return;\n }\n\n throwInvariantError({\n message:\n \"Ontological entities must be updated through the dedicated entity lifecycle API.\",\n invariantCode: \"entity.update_requires_entity_lifecycle\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes() so canonical entity mutations stay type-safe and audited.\",\n details: {\n mutationName: args.mutationName,\n nodeId: args.node._id,\n nodeType: args.node.nodeType,\n },\n });\n}\n\nexport function assertOntologicalNodeArchiveAllowed(args: {\n node: BeliefNodeLike;\n mutationName: string;\n}): void {\n if (!isOntologicalNode(args.node)) {\n return;\n }\n\n throwInvariantError({\n message:\n \"Ontological entities must be archived through the dedicated entity lifecycle API.\",\n invariantCode: \"entity.archive_requires_entity_lifecycle\",\n suggestion:\n \"Use entityLifecycle.archiveEntity() so entity archival emits the correct audit trail and review hooks.\",\n details: {\n mutationName: args.mutationName,\n nodeId: args.node._id,\n nodeType: args.node.nodeType,\n },\n });\n}\n\nexport function assertOntologicalNodeSupersedeAllowed(args: {\n node: BeliefNodeLike;\n mutationName: string;\n}): void {\n if (!isOntologicalNode(args.node)) {\n return;\n }\n\n throwInvariantError({\n message: \"Ontological entities do not use the generic supersede path.\",\n invariantCode: \"entity.supersede_requires_entity_lifecycle\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes() to edit an entity in place or entityLifecycle.mergeEntities() to collapse duplicates.\",\n details: {\n mutationName: args.mutationName,\n nodeId: args.node._id,\n nodeType: args.node.nodeType,\n },\n });\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport type { EpistemicNodeType } from \"@lucern/contracts\";\nimport type { EpistemicLayer } from \"@lucern/contracts/graph-types\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport { type Id, internal, internalMutation, internalQuery } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport { insertEpistemicNode } from \"./epistemicInsert.js\";\nimport {\n buildNodeDeletedResult,\n buildNodeNotFoundResult,\n buildNodeStatusSuccessResult,\n} from \"./epistemicNodes.helpers\";\nimport {\n nodeTypeValidator,\n sourceTypeValidator,\n verificationStatusValidator,\n} from \"./epistemicNodes.validators\";\nimport { getNodeLayer } from \"./helpers\";\nimport { assertBeliefNodeHardDeleteAllowed } from \"./invariantEnforcement\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\n\nconst optionalNodeScopeArgs = optionalScopeArgs;\n\ntype NodeSourceType =\n | \"ai_extracted\"\n | \"ai_generated\"\n | \"human\"\n | \"imported\"\n | \"system\";\ntype NodeStatus = \"active\" | \"archived\" | \"deleted\" | \"superseded\";\ntype NodeSyncStatus = \"edge_creation_failed\" | \"pending_edges\" | \"synced\";\ntype NodeVerificationStatus =\n | \"ai_verified\"\n | \"contradicted\"\n | \"human_verified\"\n | \"outdated\"\n | \"unverified\";\n\ninterface NodeScopeArgs {\n projectId?: string;\n topicId?: string;\n}\n\ninterface ExternalIds {\n crunchbase?: string;\n linkedin?: string;\n pitchbook?: string;\n twitter?: string;\n website?: string;\n}\n\ninterface CreateInternalNodeArgs extends NodeScopeArgs {\n aiProvider?: string;\n canonicalText: string;\n confidence?: number;\n content?: string;\n contentHash?: string;\n contentType?: string;\n createdBy: string;\n domain?: string;\n epistemicLayer?: string;\n externalIds?: ExternalIds;\n extractedFromNodeId?: Id<\"epistemicNodes\">;\n globalId: string;\n metadata?: unknown;\n nodeType: EpistemicNodeType;\n sourceType?: NodeSourceType;\n status?: NodeStatus;\n subtype?: string;\n syncStatus?: NodeSyncStatus;\n tags?: string[];\n title?: string;\n verificationStatus?: NodeVerificationStatus;\n}\n\ninterface GetInternalNodeArgs {\n nodeId: Id<\"epistemicNodes\">;\n}\n\ninterface UpdateSyncStatusArgs {\n nodeId: Id<\"epistemicNodes\">;\n syncError?: string;\n syncStatus: NodeSyncStatus;\n}\n\ninterface BackfillTopicIdArgs {\n newTopicId: string;\n nodeIds: Id<\"epistemicNodes\">[];\n}\n\ninterface GetNodesPendingEdgeSyncArgs {\n limit?: number;\n}\n\ninterface HardDeleteArgs {\n allowBeliefHardDelete?: boolean;\n nodeId: Id<\"epistemicNodes\">;\n reason: string;\n}\n\ninterface InternalNodeRow {\n _id: Id<\"epistemicNodes\">;\n canonicalText?: string;\n globalId?: string;\n nodeType: string;\n projectId?: string;\n status?: string;\n title?: string;\n}\n\ninterface InternalEdgeRow {\n _id: Id<\"epistemicEdges\">;\n globalId?: string;\n}\n\nconst EPISTEMIC_LAYERS = new Set<EpistemicLayer>([\n \"L4\",\n \"L3\",\n \"L2\",\n \"L1\",\n \"ontological\",\n \"organizational\",\n]);\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n const normalized = readOptionalString(value);\n return normalized ? (normalized as Id<TableName>) : null;\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 readEpistemicLayer(value: unknown): EpistemicLayer | undefined {\n const layer = readOptionalString(value);\n return layer && EPISTEMIC_LAYERS.has(layer as EpistemicLayer)\n ? (layer as EpistemicLayer)\n : undefined;\n}\n\nfunction resolveEpistemicLayer(args: {\n nodeType: string;\n providedLayer?: string;\n}): EpistemicLayer {\n return readEpistemicLayer(args.providedLayer) ?? getNodeLayer(args.nodeType);\n}\n\nfunction readInternalNodeRow(value: unknown): InternalNodeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(record._id);\n const nodeType = readOptionalString(record.nodeType);\n if (!(id && nodeType)) {\n return null;\n }\n\n const node: InternalNodeRow = { _id: id, nodeType };\n const canonicalText = readOptionalString(record.canonicalText);\n if (canonicalText !== undefined) {\n node.canonicalText = canonicalText;\n }\n const globalId = readOptionalString(record.globalId);\n if (globalId !== undefined) {\n node.globalId = globalId;\n }\n const projectId = readOptionalString(record.projectId);\n if (projectId !== undefined) {\n node.projectId = projectId;\n }\n const status = readOptionalString(record.status);\n if (status !== undefined) {\n node.status = status;\n }\n const title = readOptionalString(record.title);\n if (title !== undefined) {\n node.title = title;\n }\n return node;\n}\n\nfunction readInternalEdgeRow(value: unknown): InternalEdgeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicEdges\">(record._id);\n if (!id) {\n return null;\n }\n\n const edge: InternalEdgeRow = { _id: id };\n const globalId = readOptionalString(record.globalId);\n if (globalId !== undefined) {\n edge.globalId = globalId;\n }\n return edge;\n}\n\n/**\n * Internal mutation to create a node with syncStatus tracking\n * Used by neo4jEdgeAPI.createNodeWithEdges for atomic node+edge creation\n */\nexport const createInternal = internalMutation({\n args: {\n ...optionalNodeScopeArgs,\n globalId: v.string(),\n nodeType: nodeTypeValidator,\n subtype: v.optional(v.string()),\n canonicalText: v.string(),\n contentHash: v.optional(v.string()), // Optional - will be generated if not provided\n content: v.optional(v.string()),\n contentType: v.optional(v.string()),\n title: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n domain: v.optional(v.string()),\n metadata: v.optional(v.any()),\n externalIds: v.optional(\n v.object({\n crunchbase: v.optional(v.string()),\n linkedin: v.optional(v.string()),\n pitchbook: v.optional(v.string()),\n twitter: v.optional(v.string()),\n website: v.optional(v.string()),\n })\n ),\n sourceType: v.optional(sourceTypeValidator),\n aiProvider: v.optional(v.string()),\n extractedFromNodeId: v.optional(v.id(\"epistemicNodes\")),\n confidence: v.optional(v.number()),\n verificationStatus: v.optional(verificationStatusValidator),\n createdBy: v.string(),\n // Neo4j sync status tracking\n syncStatus: v.optional(\n v.union(\n v.literal(\"synced\"),\n v.literal(\"pending_edges\"),\n v.literal(\"edge_creation_failed\")\n )\n ),\n epistemicLayer: v.optional(v.string()),\n status: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: CreateInternalNodeArgs) => {\n const now = Date.now();\n const resolvedScope = args.topicId\n ? await (async () => {\n try {\n return await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicNodes] Failed to resolve create scope\",\n {\n error,\n topicId: args.topicId,\n projectId: args.projectId,\n }\n );\n return;\n }\n })()\n : undefined;\n\n // Generate content hash if not provided\n const contentHash =\n args.contentHash || `${args.nodeType}:${args.canonicalText}`.slice(0, 64);\n\n // Phase 2B: Derive epistemic layer from nodeType (or use provided)\n const epistemicLayer = resolveEpistemicLayer({\n nodeType: args.nodeType,\n providedLayer: args.epistemicLayer,\n });\n\n const nodeId = await insertEpistemicNode(ctx, {\n globalId: args.globalId,\n nodeType: args.nodeType,\n epistemicLayer,\n subtype: args.subtype,\n canonicalText: args.canonicalText,\n contentHash,\n content: args.content,\n contentType: args.contentType,\n title: args.title,\n tags: args.tags,\n domain: args.domain,\n metadata: args.metadata,\n externalIds: args.externalIds,\n sourceType: args.sourceType ?? \"human\",\n aiProvider: args.aiProvider,\n extractedFromNodeId: args.extractedFromNodeId,\n confidence: args.confidence,\n verificationStatus: args.verificationStatus ?? \"unverified\",\n status: args.status ?? \"active\",\n topicId: resolvedScope?.topicId ?? args.topicId,\n projectId: resolvedScope?.projectId ?? args.projectId,\n createdBy: args.createdBy,\n createdAt: now,\n updatedAt: now,\n // Neo4j sync status\n syncStatus: args.syncStatus,\n });\n\n // Schedule Neo4j node sync (fire-and-forget)\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n return nodeId;\n },\n});\n\n/**\n * Internal query to get a node by ID\n * Used by neo4jEdgeAPI for reading node data\n */\nexport const getInternal = internalQuery({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: GetInternalNodeArgs) =>\n await ctx.db.get(args.nodeId),\n});\n\n/**\n * Update the sync status of a node (for Neo4j edge sync tracking)\n * Used by neo4jEdgeAPI to mark nodes as synced or failed\n */\nexport const updateSyncStatus = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n syncStatus: v.union(\n v.literal(\"synced\"),\n v.literal(\"pending_edges\"),\n v.literal(\"edge_creation_failed\")\n ),\n syncError: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: UpdateSyncStatusArgs) => {\n const updates: {\n syncStatus: NodeSyncStatus;\n syncError?: string;\n updatedAt: number;\n } = {\n syncStatus: args.syncStatus,\n updatedAt: Date.now(),\n };\n\n if (args.syncError !== undefined) {\n updates.syncError = args.syncError;\n }\n\n await ctx.db.patch(args.nodeId, updates);\n return buildNodeStatusSuccessResult();\n },\n});\n\n/**\n * Backfill: move nodes from one topicId to another.\n * Used for data migration when nodes are accidentally scoped to Root.\n */\nexport const backfillTopicId = internalMutation({\n args: {\n nodeIds: v.array(v.id(\"epistemicNodes\")),\n newTopicId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: BackfillTopicIdArgs) => {\n let patched = 0;\n for (const nodeId of args.nodeIds) {\n const node = await ctx.db.get(nodeId);\n if (!node) {\n continue;\n }\n await ctx.db.patch(nodeId, {\n topicId: args.newTopicId,\n updatedAt: Date.now(),\n });\n patched++;\n }\n return { patched, total: args.nodeIds.length };\n },\n});\n\n/**\n * Find nodes that need edge sync retry\n * Used by background reconciliation job\n */\nexport const getNodesPendingEdgeSync = internalQuery({\n args: {\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: GetNodesPendingEdgeSyncArgs) => {\n const limit = args.limit ?? 100;\n\n return await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_syncStatus\", (q) =>\n q.eq(\"syncStatus\", \"edge_creation_failed\")\n )\n .take(limit);\n },\n});\n\n/**\n * Permanently delete a node (hard delete)\n * INTERNAL ONLY - not exposed to clients\n * Use with extreme caution - prefer archive for most cases\n * Violates Lucern Invariant #1 (append-only) - only use for data cleanup/migration\n */\nexport const hardDelete = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n reason: v.string(), // Required: document why this is being hard-deleted\n allowBeliefHardDelete: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: HardDeleteArgs) => {\n const node = readInternalNodeRow(await ctx.db.get(args.nodeId));\n if (!node) {\n return buildNodeNotFoundResult();\n }\n\n assertBeliefNodeHardDeleteAllowed({\n node,\n allowBeliefHardDelete: args.allowBeliefHardDelete ?? false,\n reason: args.reason,\n mutationName: \"epistemicNodes.hardDelete\",\n });\n\n // Log the deletion to audit before deleting\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"node\",\n entityId: String(args.nodeId),\n changeType: \"deleted\",\n projectId: node.projectId,\n changedBy: \"system:hard_delete\",\n changedAt: Date.now(),\n isAgent: false,\n previousState: {\n nodeType: node.nodeType,\n title: node.title ?? node.canonicalText?.slice(0, 100),\n status: node.status,\n },\n rationale: args.reason,\n });\n\n // First, delete all edges referencing this node\n const endpointRefs = [String(args.nodeId), node.globalId].filter(\n (ref): ref is string => typeof ref === \"string\" && ref.length > 0\n );\n const uniqueEdges = new Map<string, InternalEdgeRow>();\n for (const endpointRef of endpointRefs) {\n const fromEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from\", (q) => q.eq(\"fromNodeId\", endpointRef))\n .collect();\n\n const toEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q) => q.eq(\"toNodeId\", endpointRef))\n .collect();\n\n for (const rawEdge of [...fromEdges, ...toEdges]) {\n const edge = readInternalEdgeRow(rawEdge);\n if (edge) {\n uniqueEdges.set(edge.globalId ?? String(edge._id), edge);\n }\n }\n }\n\n for (const edge of uniqueEdges.values()) {\n if (edge.globalId) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n }\n await ctx.db.delete(edge._id);\n }\n\n // Then delete the node\n await ctx.db.delete(args.nodeId);\n\n return buildNodeDeletedResult(uniqueEdges.size);\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport { requireScopeWriteAccess } from \"@lucern/access-control/access\";\nimport type { EpistemicNodeType } from \"@lucern/contracts\";\nimport type { EpistemicLayer } from \"@lucern/contracts/graph-types\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id } from \"./convex\";\nimport { internal, mutation } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport { insertEpistemicNode } from \"./epistemicInsert.js\";\nimport {\n buildNodeArchivedResult,\n buildNodeStatusSuccessResult,\n} from \"./epistemicNodes.helpers\";\nimport {\n nodeTypeValidator,\n sourceTypeValidator,\n statusValidator,\n verificationStatusValidator,\n} from \"./epistemicNodes.validators\";\nimport { getNodeLayer } from \"./helpers\";\nimport {\n assertBeliefNodeArchiveAllowed,\n assertBeliefNodeGenericUpdateAllowed,\n assertBeliefNodeSupersedeAllowed,\n assertBeliefNodeVerifyAllowed,\n assertOntologicalNodeArchiveAllowed,\n assertOntologicalNodeGenericCreateAllowed,\n assertOntologicalNodeGenericUpdateAllowed,\n assertOntologicalNodeSupersedeAllowed,\n} from \"./invariantEnforcement\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\nconst optionalNodeScopeArgs = optionalScopeArgs;\n\ntype NodeSourceType =\n | \"ai_extracted\"\n | \"ai_generated\"\n | \"human\"\n | \"imported\"\n | \"system\";\ntype NodeStatus = \"active\" | \"archived\" | \"deleted\" | \"superseded\";\ntype NodeVerificationStatus =\n | \"ai_verified\"\n | \"contradicted\"\n | \"human_verified\"\n | \"outdated\"\n | \"unverified\";\ntype RuntimePackInstallScope = \"tenant\" | \"workspace\";\n\ninterface NodeScopeArgs {\n projectId?: string;\n topicId?: string;\n}\n\ninterface ExternalIds {\n crunchbase?: string;\n linkedin?: string;\n pitchbook?: string;\n twitter?: string;\n website?: string;\n}\n\ninterface RuntimePackArgs {\n runtimePackInstallScope?: RuntimePackInstallScope;\n runtimePackKey?: string;\n runtimeToolName?: string;\n}\n\ninterface CreateNodeArgs extends NodeScopeArgs, RuntimePackArgs {\n aiProvider?: string;\n canonicalText: string;\n confidence?: number;\n content?: string;\n contentHash: string;\n contentType?: string;\n createdBy: string;\n domain?: string;\n externalIds?: ExternalIds;\n extractedFromNodeId?: Id<\"epistemicNodes\">;\n globalId: string;\n metadata?: unknown;\n nodeType: EpistemicNodeType;\n sourceType: NodeSourceType;\n subtype?: string;\n tags?: string[];\n title?: string;\n verificationStatus?: NodeVerificationStatus;\n}\n\ninterface UpdateNodeArgs {\n canonicalText?: string;\n confidence?: number;\n content?: string;\n contentHash?: string;\n contentType?: string;\n domain?: string;\n externalIds?: ExternalIds;\n metadata?: unknown;\n nodeId: Id<\"epistemicNodes\">;\n opinion_a?: number;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n status?: NodeStatus;\n subtype?: string;\n tags?: string[];\n title?: string;\n userId?: string;\n verificationStatus?: NodeVerificationStatus;\n}\n\ninterface SupersedeNodeArgs {\n createdBy: string;\n newCanonicalText: string;\n newContentHash: string;\n newGlobalId: string;\n oldNodeId: Id<\"epistemicNodes\">;\n reason?: string;\n}\n\ninterface ArchiveNodeArgs {\n nodeId: Id<\"epistemicNodes\">;\n userId?: string;\n}\n\ninterface VerifyNodeArgs {\n confidence?: number;\n nodeId: Id<\"epistemicNodes\">;\n userId?: string;\n verificationStatus: NodeVerificationStatus;\n}\n\ninterface BatchCreateNodeArgs extends NodeScopeArgs {\n aiProvider?: string;\n canonicalText: string;\n confidence?: number;\n content?: string;\n contentHash: string;\n contentType?: string;\n createdBy: string;\n domain?: string;\n externalIds?: ExternalIds;\n globalId: string;\n metadata?: unknown;\n nodeType: EpistemicNodeType;\n sourceType: NodeSourceType;\n subtype?: string;\n tags?: string[];\n title?: string;\n verificationStatus?: NodeVerificationStatus;\n}\n\ninterface BatchCreateArgs {\n nodes: BatchCreateNodeArgs[];\n}\n\ninterface EpistemicNodeRow {\n _id: Id<\"epistemicNodes\">;\n canonicalText?: string;\n confidence?: number;\n content?: string;\n contentType?: string;\n createdBy?: string;\n epistemicLayer?: EpistemicLayer;\n metadata?: Record<string, unknown>;\n nodeType: string;\n projectId?: string;\n status?: string;\n tags?: string[];\n tenantId?: string;\n title?: string;\n topicId?: string;\n verificationStatus?: string;\n workspaceId?: string;\n}\n\nconst EPISTEMIC_LAYERS = new Set<EpistemicLayer>([\n \"L4\",\n \"L3\",\n \"L2\",\n \"L1\",\n \"ontological\",\n \"organizational\",\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> | null {\n const normalized = readOptionalString(value);\n return normalized ? (normalized as Id<TableName>) : null;\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 readStringArray(value: unknown): string[] | undefined {\n return Array.isArray(value) && value.every((item) => typeof item === \"string\")\n ? value\n : undefined;\n}\n\nfunction readEpistemicLayer(value: unknown): EpistemicLayer | undefined {\n const layer = readOptionalString(value);\n return layer && EPISTEMIC_LAYERS.has(layer as EpistemicLayer)\n ? (layer as EpistemicLayer)\n : undefined;\n}\n\nfunction readEpistemicNodeRow(value: unknown): EpistemicNodeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(record._id);\n const nodeType = readOptionalString(record.nodeType);\n if (!(id && nodeType)) {\n return null;\n }\n\n const node: EpistemicNodeRow = { _id: id, nodeType };\n const canonicalText = readOptionalString(record.canonicalText);\n if (canonicalText !== undefined) {\n node.canonicalText = canonicalText;\n }\n const confidence = readOptionalNumber(record.confidence);\n if (confidence !== undefined) {\n node.confidence = confidence;\n }\n const content = readOptionalString(record.content);\n if (content !== undefined) {\n node.content = content;\n }\n const contentType = readOptionalString(record.contentType);\n if (contentType !== undefined) {\n node.contentType = contentType;\n }\n const createdBy = readOptionalString(record.createdBy);\n if (createdBy !== undefined) {\n node.createdBy = createdBy;\n }\n const epistemicLayer = readEpistemicLayer(record.epistemicLayer);\n if (epistemicLayer !== undefined) {\n node.epistemicLayer = epistemicLayer;\n }\n const metadata = readRecord(record.metadata);\n if (metadata) {\n node.metadata = metadata;\n }\n const projectId = readOptionalString(record.projectId);\n if (projectId !== undefined) {\n node.projectId = projectId;\n }\n const status = readOptionalString(record.status);\n if (status !== undefined) {\n node.status = status;\n }\n const tags = readStringArray(record.tags);\n if (tags !== undefined) {\n node.tags = tags;\n }\n const tenantId = readOptionalString(record.tenantId);\n if (tenantId !== undefined) {\n node.tenantId = tenantId;\n }\n const title = readOptionalString(record.title);\n if (title !== undefined) {\n node.title = title;\n }\n const topicId = readOptionalString(record.topicId);\n if (topicId !== undefined) {\n node.topicId = topicId;\n }\n const verificationStatus = readOptionalString(record.verificationStatus);\n if (verificationStatus !== undefined) {\n node.verificationStatus = verificationStatus;\n }\n const workspaceId = readOptionalString(record.workspaceId);\n if (workspaceId !== undefined) {\n node.workspaceId = workspaceId;\n }\n return node;\n}\n\nfunction requireEpistemicNodeRow(\n value: unknown,\n context: string\n): EpistemicNodeRow {\n const node = readEpistemicNodeRow(value);\n if (!node) {\n throw new Error(`${context} requires a stored epistemic node.`);\n }\n return node;\n}\n\n/**\n * Create a new epistemic node\n */\nexport const create = mutation({\n args: {\n globalId: v.string(),\n nodeType: nodeTypeValidator,\n subtype: v.optional(v.string()), // company: private|corporate|portfolio, investor: vc|lp|cvc|pe|etc\n canonicalText: v.string(),\n contentHash: v.string(),\n content: v.optional(v.string()),\n contentType: v.optional(v.string()),\n title: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n domain: v.optional(v.string()), // For companies: website domain\n metadata: v.optional(v.any()),\n externalIds: v.optional(\n v.object({\n crunchbase: v.optional(v.string()),\n linkedin: v.optional(v.string()),\n pitchbook: v.optional(v.string()),\n twitter: v.optional(v.string()),\n website: v.optional(v.string()),\n })\n ),\n sourceType: sourceTypeValidator,\n aiProvider: v.optional(v.string()),\n extractedFromNodeId: v.optional(v.id(\"epistemicNodes\")),\n confidence: v.optional(v.number()),\n verificationStatus: v.optional(verificationStatusValidator),\n ...optionalNodeScopeArgs,\n createdBy: v.string(),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: CreateNodeArgs) => {\n const now = Date.now();\n\n assertOntologicalNodeGenericCreateAllowed({\n nodeType: args.nodeType,\n mutationName: \"epistemicNodes.create\",\n });\n\n // Check for duplicate by content hash\n const existing = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_contentHash\", (q) => q.eq(\"contentHash\", args.contentHash))\n .first();\n\n const existingNode = readEpistemicNodeRow(existing);\n if (existingNode?.status === \"active\") {\n // Return existing node ID if duplicate found\n // Caller can decide whether to create edge to existing or error\n return { nodeId: existingNode._id, isDuplicate: true };\n }\n\n // Phase 2B: Derive epistemic layer from nodeType\n const epistemicLayer = getNodeLayer(args.nodeType);\n const resolvedScope = args.topicId\n ? await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n })\n : undefined;\n\n if (resolvedScope) {\n assertWorkspaceScopedEpistemicNodeScope({\n scope: resolvedScope,\n nodeType: args.nodeType,\n mutationName: \"epistemicNodes.create\",\n });\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: {\n tenantId: resolvedScope.tenantId,\n workspaceId: resolvedScope.workspaceId,\n nodeType: args.nodeType,\n epistemicLayer,\n },\n mutationName: \"epistemicNodes.create\",\n });\n } else if (epistemicLayer !== \"ontological\") {\n throw new Error(\n \"Workspace-scoped reasoning isolation requires topicId or projectId for non-ontological node creation.\"\n );\n }\n\n const nodeId = await insertEpistemicNode(ctx, {\n globalId: args.globalId,\n nodeType: args.nodeType,\n epistemicLayer, // Phase 2B: Auto-derived from nodeType\n subtype: args.subtype,\n canonicalText: args.canonicalText,\n contentHash: args.contentHash,\n content: args.content,\n contentType: args.contentType,\n title: args.title,\n tags: args.tags,\n domain: args.domain,\n metadata: args.metadata,\n externalIds: args.externalIds,\n sourceType: args.sourceType,\n aiProvider: args.aiProvider,\n extractedFromNodeId: args.extractedFromNodeId,\n confidence: args.confidence,\n verificationStatus: args.verificationStatus ?? \"unverified\",\n status: \"active\",\n topicId: resolvedScope?.topicId ?? args.topicId,\n projectId: resolvedScope?.projectId ?? args.projectId,\n tenantId: resolvedScope?.tenantId,\n workspaceId: resolvedScope?.workspaceId,\n createdBy: args.createdBy,\n createdAt: now,\n updatedAt: now,\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"node\",\n entityId: String(nodeId),\n changeType: \"created\",\n changedAt: now,\n changedBy: args.createdBy,\n isAgent: false,\n newState: {\n nodeType: args.nodeType,\n canonicalText: args.canonicalText.slice(0, 200),\n status: \"active\",\n verificationStatus: args.verificationStatus ?? \"unverified\",\n confidence: args.confidence,\n },\n projectId: resolvedScope?.projectId ?? args.projectId,\n triggeringAction: \"epistemicNodes.create\",\n });\n\n // Schedule Neo4j sync (fire-and-forget)\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n return { nodeId, isDuplicate: false };\n },\n});\n\n/**\n * Update an existing node\n */\nexport const update = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n subtype: v.optional(v.string()),\n canonicalText: v.optional(v.string()),\n contentHash: v.optional(v.string()),\n content: v.optional(v.string()),\n contentType: v.optional(v.string()),\n title: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n domain: v.optional(v.string()),\n metadata: v.optional(v.any()),\n externalIds: v.optional(\n v.object({\n crunchbase: v.optional(v.string()),\n linkedin: v.optional(v.string()),\n pitchbook: v.optional(v.string()),\n twitter: v.optional(v.string()),\n website: v.optional(v.string()),\n })\n ),\n confidence: v.optional(v.number()),\n verificationStatus: v.optional(verificationStatusValidator),\n status: v.optional(statusValidator),\n userId: v.optional(v.string()),\n // EK-4: SL opinion fields (Kernel v2)\n opinion_b: v.optional(v.number()),\n opinion_d: v.optional(v.number()),\n opinion_u: v.optional(v.number()),\n opinion_a: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: UpdateNodeArgs) => {\n const { nodeId, userId, ...updates } = args;\n\n const node = requireEpistemicNodeRow(\n await ctx.db.get(nodeId),\n \"Update node\"\n );\n\n // Access control\n if (node.projectId && userId) {\n await requireScopeWriteAccess(ctx, node.projectId, userId);\n }\n\n // Remove undefined values\n const cleanUpdates: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(updates)) {\n if (value !== undefined) {\n cleanUpdates[key] = value;\n }\n }\n\n if (node.nodeType === \"belief\") {\n assertBeliefNodeGenericUpdateAllowed({\n node,\n updates: cleanUpdates,\n mutationName: \"epistemicNodes.update\",\n });\n }\n assertOntologicalNodeGenericUpdateAllowed({\n node,\n mutationName: \"epistemicNodes.update\",\n });\n\n cleanUpdates.updatedAt = Date.now();\n\n await ctx.db.patch(nodeId, cleanUpdates);\n\n // Audit log\n if (node.projectId) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"node\",\n entityId: String(nodeId),\n changeType: \"updated\",\n changedAt: Date.now(),\n changedBy: userId ?? node.createdBy ?? \"system:update\",\n isAgent: false,\n previousState: {\n status: node.status,\n confidence: node.confidence,\n canonicalText: node.canonicalText?.slice(0, 200),\n },\n newState: cleanUpdates,\n projectId: node.projectId,\n });\n }\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n return buildNodeStatusSuccessResult();\n },\n});\n\n/**\n * Supersede a node with a new version\n * Creates a new node and marks the old one as superseded\n *\n * Phase 2B: Supersession only allowed within the same layer\n * (e.g., a belief can only supersede another belief)\n */\nexport const supersede = mutation({\n args: {\n oldNodeId: v.id(\"epistemicNodes\"),\n newGlobalId: v.string(),\n newCanonicalText: v.string(),\n newContentHash: v.string(),\n createdBy: v.string(),\n reason: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: SupersedeNodeArgs) => {\n const oldNode = requireEpistemicNodeRow(\n await ctx.db.get(args.oldNodeId),\n \"Supersede node\"\n );\n\n // Access control\n if (oldNode.projectId) {\n await requireScopeWriteAccess(ctx, oldNode.projectId, args.createdBy);\n }\n\n assertBeliefNodeSupersedeAllowed({\n node: oldNode,\n mutationName: \"epistemicNodes.supersede\",\n });\n assertOntologicalNodeSupersedeAllowed({\n node: oldNode,\n mutationName: \"epistemicNodes.supersede\",\n });\n\n const now = Date.now();\n\n // Phase 2B: Get the layer (use existing or derive from nodeType)\n const epistemicLayer =\n oldNode.epistemicLayer || getNodeLayer(oldNode.nodeType);\n\n // Create new node inheriting most properties from old (including layer)\n const newNodeId = await insertEpistemicNode(ctx, {\n globalId: args.newGlobalId,\n nodeType: oldNode.nodeType,\n epistemicLayer, // Phase 2B: Inherit layer (supersession is same-layer only)\n canonicalText: args.newCanonicalText,\n contentHash: args.newContentHash,\n content: oldNode.content,\n contentType: oldNode.contentType,\n title: oldNode.title,\n tags: oldNode.tags,\n metadata: oldNode.metadata,\n sourceType: \"human\", // Supersession is always human-initiated\n confidence: oldNode.confidence,\n verificationStatus: \"unverified\", // New version needs re-verification\n status: \"active\",\n topicId: oldNode.topicId,\n projectId: oldNode.projectId,\n tenantId: oldNode.tenantId,\n workspaceId: oldNode.workspaceId,\n createdBy: args.createdBy,\n createdAt: now,\n updatedAt: now,\n });\n\n // Mark old node as superseded\n await ctx.db.patch(args.oldNodeId, {\n status: \"superseded\",\n supersededBy: newNodeId,\n updatedAt: now,\n });\n\n // Audit log\n if (oldNode.projectId) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"node\",\n entityId: String(args.oldNodeId),\n changeType: \"superseded\",\n changedAt: now,\n changedBy: args.createdBy,\n isAgent: false,\n previousState: {\n status: oldNode.status,\n canonicalText: oldNode.canonicalText?.slice(0, 200),\n },\n newState: {\n status: \"superseded\",\n supersededBy: String(newNodeId),\n newCanonicalText: args.newCanonicalText.slice(0, 200),\n },\n rationale: args.reason,\n projectId: oldNode.projectId,\n });\n }\n\n return { newNodeId, oldNodeId: args.oldNodeId };\n },\n});\n\n/**\n * Archive a node (soft delete)\n *\n * INVARIANT: Belief nodes cannot be archived per Epistemic Invariant #1.\n * For belief nodes, this uses \"superseded\" status instead.\n */\nexport const archive = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n userId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: ArchiveNodeArgs) => {\n const node = requireEpistemicNodeRow(\n await ctx.db.get(args.nodeId),\n \"Archive node\"\n );\n\n // Access control\n if (node.projectId && args.userId) {\n await requireScopeWriteAccess(ctx, node.projectId, args.userId);\n }\n\n assertBeliefNodeArchiveAllowed({\n node,\n mutationName: \"epistemicNodes.archive\",\n });\n assertOntologicalNodeArchiveAllowed({\n node,\n mutationName: \"epistemicNodes.archive\",\n });\n\n await ctx.db.patch(args.nodeId, {\n status: \"archived\",\n updatedAt: Date.now(),\n });\n\n // Audit log\n if (node.projectId) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"node\",\n entityId: String(args.nodeId),\n changeType: \"archived\",\n changedAt: Date.now(),\n changedBy: args.userId ?? node.createdBy ?? \"system:archive\",\n isAgent: false,\n previousState: { status: node.status },\n newState: { status: \"archived\" },\n projectId: node.projectId,\n });\n }\n\n return buildNodeArchivedResult();\n },\n});\n\n/**\n * Update verification status\n */\nexport const verify = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n verificationStatus: verificationStatusValidator,\n confidence: v.optional(v.number()),\n userId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: VerifyNodeArgs) => {\n const node = requireEpistemicNodeRow(\n await ctx.db.get(args.nodeId),\n \"Verify node\"\n );\n\n assertBeliefNodeVerifyAllowed({\n node,\n confidence: args.confidence,\n mutationName: \"epistemicNodes.verify\",\n });\n\n const updates: Record<string, unknown> = {\n verificationStatus: args.verificationStatus,\n updatedAt: Date.now(),\n };\n\n if (args.confidence !== undefined) {\n updates.confidence = args.confidence;\n }\n\n await ctx.db.patch(args.nodeId, updates);\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"node\",\n entityId: String(args.nodeId),\n changeType: \"updated\",\n changedAt: Date.now(),\n changedBy: args.userId ?? node.createdBy ?? \"system:verification\",\n isAgent: false,\n previousState: {\n verificationStatus: node.verificationStatus,\n confidence: node.confidence,\n },\n newState: {\n verificationStatus: args.verificationStatus,\n confidence: args.confidence ?? node.confidence,\n },\n projectId: node.projectId,\n triggeringAction: \"epistemicNodes.verify\",\n });\n\n return buildNodeStatusSuccessResult();\n },\n});\n\n/**\n * Batch create nodes (for migrations or bulk imports)\n * Phase 2B: Auto-derives epistemicLayer from nodeType\n */\nexport const batchCreate = mutation({\n args: {\n nodes: v.array(\n v.object({\n ...optionalNodeScopeArgs,\n globalId: v.string(),\n nodeType: nodeTypeValidator,\n subtype: v.optional(v.string()),\n canonicalText: v.string(),\n contentHash: v.string(),\n content: v.optional(v.string()),\n contentType: v.optional(v.string()),\n title: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n domain: v.optional(v.string()),\n metadata: v.optional(v.any()),\n externalIds: v.optional(\n v.object({\n crunchbase: v.optional(v.string()),\n linkedin: v.optional(v.string()),\n pitchbook: v.optional(v.string()),\n twitter: v.optional(v.string()),\n website: v.optional(v.string()),\n })\n ),\n sourceType: sourceTypeValidator,\n aiProvider: v.optional(v.string()),\n confidence: v.optional(v.number()),\n verificationStatus: v.optional(verificationStatusValidator),\n createdBy: v.string(),\n })\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: BatchCreateArgs) => {\n const resolveNodeScope = async (node: BatchCreateNodeArgs) => {\n if (!node.topicId) {\n return;\n }\n try {\n return await resolveTopicProjectScope(ctx, {\n topicId: node.topicId,\n projectId: node.projectId,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicNodes] Failed to resolve scope for batch create node\",\n {\n error,\n topicId: node.topicId,\n projectId: node.projectId,\n }\n );\n return;\n }\n };\n\n const now = Date.now();\n const results: Array<{ globalId: string; nodeId: Id<\"epistemicNodes\"> }> =\n [];\n\n for (const node of args.nodes) {\n assertOntologicalNodeGenericCreateAllowed({\n nodeType: node.nodeType,\n mutationName: \"epistemicNodes.batchCreate\",\n });\n\n // Phase 2B: Derive epistemic layer from nodeType\n const epistemicLayer = getNodeLayer(node.nodeType);\n const resolvedScope = await resolveNodeScope(node);\n\n const nodeId = await insertEpistemicNode(ctx, {\n ...node,\n epistemicLayer, // Phase 2B: Auto-derived from nodeType\n verificationStatus: node.verificationStatus ?? \"unverified\",\n status: \"active\",\n topicId: resolvedScope?.topicId ?? node.topicId,\n projectId: resolvedScope?.projectId ?? node.projectId,\n createdAt: now,\n updatedAt: now,\n });\n\n results.push({ globalId: node.globalId, nodeId });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"node\",\n entityId: String(nodeId),\n changeType: \"created\",\n changedAt: now,\n changedBy: node.createdBy,\n isAgent: false,\n newState: {\n nodeType: node.nodeType,\n canonicalText: node.canonicalText.slice(0, 200),\n status: \"active\",\n verificationStatus: node.verificationStatus ?? \"unverified\",\n confidence: node.confidence,\n },\n projectId: resolvedScope?.projectId ?? node.projectId,\n triggeringAction: \"epistemicNodes.batchCreate\",\n });\n\n // Schedule Neo4j sync for each node\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n }\n\n return { created: results.length, results };\n },\n});\n","// biome-ignore-all lint/performance/noBarrelFile: Public graph-primitives compatibility facade; split after export-map migration.\n// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Facade for split epistemic question primitives and public question operations. */\n\nexport {\n advanceToConviction,\n finalizeConviction,\n getByBeliefWithAccess,\n linkToBelief,\n linkToInsight,\n unlinkInsight,\n updateConviction,\n updateQuestion,\n} from \"./epistemicQuestions.conviction\";\nexport {\n addQuestion,\n create,\n createBatch,\n internalCreate,\n} from \"./epistemicQuestions.create\";\nexport {\n backfillScoredQuestionEvidence,\n createEvidenceFromScoredQuestion,\n} from \"./epistemicQuestions.evidence\";\nexport {\n buildLinkedWorktreeMetadata,\n buildTestsEdgeGlobalId,\n clampQuestionLimit,\n dedupeQuestionNodes,\n flattenInternalQuestionNode,\n flattenQuestionNode,\n generateContentHash,\n getQuestionEdgesForScope,\n getQuestionNodesForScope,\n isActiveQuestionNode,\n logQuestionFallback,\n MAX_QUESTION_PAGE_SIZE,\n markProjectGraphDirty,\n matchesRequestedQuestionStatus,\n normalizeCategory,\n normalizeQuestionTopicId,\n questionMatchesScope,\n questionMatchesWorkflowLink,\n resolveLinkedWorktreeId,\n resolveQuestionScopeId,\n resolveQuestionScopeOrNull,\n} from \"./epistemicQuestions.helpers\";\nexport {\n updatePriority,\n updateStatus,\n} from \"./epistemicQuestions.lifecycle\";\nexport {\n getByCategory,\n getById,\n getByProject,\n getByTopic,\n getForBelief,\n internalGetByProject,\n internalGetByTopic,\n} from \"./epistemicQuestions.queries\";\nexport {\n getForSprintCluster,\n getInConviction,\n} from \"./epistemicQuestions.sprint\";\nexport {\n consolidate,\n deleteQuestion,\n getByPillar,\n getQuestionClusterPositions,\n list,\n markAnsweredWithArtifact,\n} from \"./epistemicQuestions.tail\";\n","// biome-ignore-all lint/style/useFilenamingConvention: Public ABI surface; rename requires a cross-package migration update.\n/**\n * Epistemic Questions API\n *\n * Clean API for managing questions in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces questions.ts for CREATE operations.\n *\n * Key differences from questions.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyQuestionId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport type { Doc, Id, MutationCtx, QueryCtx } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport {\n debugGraphPrimitiveFallback,\n formatGraphPrimitiveError,\n} from \"./debug\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { resolveTopicProjectScope } from \"./topicScope\";\n\nexport interface EpistemicIndexBuilder {\n eq(field: string, value: unknown): EpistemicIndexBuilder;\n}\n\nexport interface EpistemicTableQuery<T> {\n collect(): Promise<T[]>;\n first(): Promise<T | null>;\n order(direction: \"asc\" | \"desc\"): EpistemicTableQuery<T>;\n take(limit: number): Promise<T[]>;\n withIndex(\n indexName: string,\n builder: (q: EpistemicIndexBuilder) => EpistemicIndexBuilder\n ): EpistemicTableQuery<T>;\n}\n\nexport interface EpistemicMutationSpec<ArgsSpec> {\n args: ArgsSpec;\n handler: (ctx: MutationCtx, args: ArgsSpec) => unknown | Promise<unknown>;\n returns?: unknown;\n}\n\nexport interface EpistemicQuerySpec<ArgsSpec> {\n args: ArgsSpec;\n handler: (ctx: QueryCtx, args: ArgsSpec) => unknown | Promise<unknown>;\n returns?: unknown;\n}\n\nexport interface EpistemicDbReader {\n get<TableName extends string>(\n id: Id<TableName>\n ): Promise<Doc<TableName> | null>;\n query<TableName extends string>(\n table: TableName\n ): EpistemicTableQuery<Doc<TableName>>;\n}\n\nexport const defineEpistemicMutation = mutation as unknown as <Args>(\n spec: EpistemicMutationSpec<Args>\n) => ReturnType<typeof mutation>;\n\nexport const defineEpistemicQuery = query as unknown as <Args>(\n spec: EpistemicQuerySpec<Args>\n) => ReturnType<typeof query>;\n\nexport const defineEpistemicInternalMutation = internalMutation as unknown as <\n Args,\n>(\n spec: EpistemicMutationSpec<Args>\n) => ReturnType<typeof internalMutation>;\n\nexport const defineEpistemicInternalQuery = internalQuery as unknown as <Args>(\n spec: EpistemicQuerySpec<Args>\n) => ReturnType<typeof internalQuery>;\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nexport function generateContentHash(text: string): string {\n const content = `question:${text.trim().toLowerCase().replace(/\\s+/g, \" \")}`;\n let hash = 5381;\n const maxSigned32Bit = 2_147_483_647;\n const uint32Size = 4_294_967_296;\n for (let i = 0; i < content.length; i++) {\n hash = Math.imul(hash, 33) + content.charCodeAt(i);\n hash %= uint32Size;\n if (hash > maxSigned32Bit) {\n hash -= uint32Size;\n }\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\nexport function buildTestsEdgeGlobalId(\n fromGlobalId: string,\n toGlobalId: string\n): string {\n return `edge-${fromGlobalId}-tests-${toGlobalId}`;\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 markCacheStaleByTopic =\n internal.graphAnalysisCache.markCacheStaleByTopic;\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(0, markCacheStaleByTopic, {\n topicId: normalizedTopicId,\n });\n }\n const resolvedProjectId = normalizedTopicId ?? normalizedProjectId;\n if (!resolvedProjectId) {\n return;\n }\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n resolvedProjectId,\n {\n lastActivityAt: Date.now(),\n }\n );\n}\n\n// Valid question categories (pillars)\nexport type ValidCategory =\n | \"market\"\n | \"competition\"\n | \"product\"\n | \"team\"\n | \"financials\"\n | \"deal\"\n | \"risks\"\n | \"other\";\n\nexport function normalizeCategory(category?: string): ValidCategory {\n if (!category) {\n return \"other\";\n }\n const lower = category.toLowerCase();\n // Handle \"financial\" → \"financials\" mapping\n if (lower === \"financial\") {\n return \"financials\";\n }\n const validCategories: ValidCategory[] = [\n \"market\",\n \"competition\",\n \"product\",\n \"team\",\n \"financials\",\n \"deal\",\n \"risks\",\n ];\n return (validCategories.find((c) => lower.includes(c)) ||\n \"other\") as ValidCategory;\n}\n\nexport type QuestionNodeDoc = Doc<\"epistemicNodes\"> & {\n anonymizationClass?: string;\n audienceLabel?: string;\n canonicalText?: string;\n createdAt?: number;\n createdBy?: string;\n epistemicLayer?: string;\n exportClass?: string;\n metadata?: Record<string, unknown>;\n nodeType?: string;\n policyTags?: string[];\n projectId?: string;\n publicationStatus?: string;\n questionType?: string;\n sensitivityTier?: string;\n status?: string;\n tenantId?: string;\n topicId?: string;\n updatedAt?: number;\n workspaceId?: string;\n};\nconst DEFAULT_QUESTION_PAGE_SIZE = 250;\nexport const MAX_QUESTION_PAGE_SIZE = 1000;\nexport interface QuestionScopeArgs {\n projectId?: string | null;\n topicId?: string | null;\n}\nexport function clampQuestionLimit(\n limit: number | undefined,\n fallback = DEFAULT_QUESTION_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_QUESTION_PAGE_SIZE)\n );\n}\n\nexport function dedupeQuestionNodes(\n nodes: QuestionNodeDoc[]\n): QuestionNodeDoc[] {\n const seen = new Set<string>();\n const deduped: QuestionNodeDoc[] = [];\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 normalizeQuestionTopicId(\n topicId: string | undefined | null\n): string | undefined {\n return typeof topicId === \"string\" && topicId.trim().length > 0\n ? topicId\n : undefined;\n}\n\nexport function resolveQuestionScopeId(scope: {\n projectId?: string | undefined;\n topicId?: string | undefined;\n}): string | undefined {\n return normalizeQuestionTopicId(scope.topicId);\n}\n\nexport function logQuestionFallback(\n message: string,\n error: unknown,\n context?: Record<string, unknown>\n): void {\n debugGraphPrimitiveFallback(message, {\n error: formatGraphPrimitiveError(error),\n ...context,\n });\n}\n\nexport async function resolveQuestionScopeOrNull(\n ctx: QueryCtx | MutationCtx,\n args: QuestionScopeArgs\n) {\n if (!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 \"[epistemicQuestions] Failed to resolve question scope\",\n {\n error: formatGraphPrimitiveError(error),\n projectId: args.projectId,\n topicId: args.topicId,\n }\n );\n return null;\n }\n}\n\nexport async function getQuestionNodesForScope(\n ctx: QueryCtx | MutationCtx,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n args?: { scanLimit?: number }\n): Promise<QuestionNodeDoc[]> {\n const fetchNodes = (query: EpistemicTableQuery<QuestionNodeDoc>) =>\n typeof args?.scanLimit === \"number\"\n ? query.order(\"desc\").take(args.scanLimit)\n : query.collect();\n\n const topicNodes = await fetchNodes(\n ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: EpistemicIndexBuilder) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"question\")\n )\n );\n\n return dedupeQuestionNodes(topicNodes).filter((node) =>\n questionMatchesScope(node, scope)\n );\n}\n\nexport async function getQuestionEdgesForScope(\n ctx: QueryCtx | MutationCtx,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>\n) {\n if (!scope.topicId) {\n return [];\n }\n const query = ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_topic\", (q: EpistemicIndexBuilder) =>\n q.eq(\"topicId\", scope.topicId)\n );\n\n return await query.collect();\n}\n\nexport function questionMatchesScope(\n node: Pick<QuestionNodeDoc, \"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 resolveLinkedWorktreeId(\n meta: Record<string, unknown>\n): string | null {\n const linkedWorktreeId = meta.linkedWorktreeId;\n return typeof linkedWorktreeId === \"string\" && linkedWorktreeId.trim()\n ? linkedWorktreeId\n : null;\n}\n\nexport function buildLinkedWorktreeMetadata(\n linkedWorktreeId: string | null | undefined\n): Record<string, string> {\n return linkedWorktreeId\n ? {\n linkedWorktreeId,\n }\n : {};\n}\n\nexport function questionMatchesWorkflowLink(\n meta: Record<string, unknown>,\n workflow: {\n worktreeId?: string | null;\n sprintId?: string | null;\n }\n): boolean {\n const linkedWorktreeId = resolveLinkedWorktreeId(meta);\n return Boolean(\n linkedWorktreeId &&\n (linkedWorktreeId === workflow.worktreeId ||\n linkedWorktreeId === workflow.sprintId)\n );\n}\n\nexport function flattenQuestionNode(n: QuestionNodeDoc) {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n const linkedWorktreeId = resolveLinkedWorktreeId(meta);\n return {\n ...n,\n question: n.canonicalText || \"\",\n category: (meta.category as string) || \"other\",\n priority: (meta.priority as string) || \"medium\",\n status:\n (meta.questionStatus as string) || (meta.status as string) || \"open\",\n beliefId: meta.linkedBeliefNodeId || meta.beliefId || null,\n relatedBeliefIds: (meta.relatedBeliefIds as string[]) || [],\n relatedInsightIds: (meta.relatedInsightIds as string[]) || [],\n linkedWorktreeId,\n sprintIndex: (meta.sprintIndex as number) || undefined,\n linkedBeliefId: meta.linkedBeliefNodeId || null,\n testType: (meta.testType as string) || \"validates\",\n importance: (meta.importance as number) || 5,\n isKeyQuestion: Boolean(meta.isKeyQuestion),\n answer: (meta.answer as string) || null,\n convictionStage: (meta.convictionStage as string) || null,\n conviction: meta.conviction ?? null,\n source: (meta.source as string) || \"ai_suggested\",\n };\n}\n\nexport function flattenInternalQuestionNode(n: QuestionNodeDoc) {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n const flattened = flattenQuestionNode(n);\n return {\n ...flattened,\n _epistemicNodeId: n._id,\n questionType:\n n.questionType || (meta.questionType as string) || flattened.testType,\n linkedBeliefIds: flattened.relatedBeliefIds,\n audienceLabel: n.audienceLabel,\n policyTags: n.policyTags,\n sensitivityTier: n.sensitivityTier,\n exportClass: n.exportClass,\n anonymizationClass: n.anonymizationClass,\n };\n}\n\nconst INACTIVE_NODE_STATUSES = new Set([\"archived\", \"superseded\", \"deleted\"]);\n\nconst INACTIVE_METADATA_STATUSES = new Set([\n \"archived\",\n \"superseded\",\n \"deleted\",\n]);\n\nfunction getQuestionStatusCandidates(node: QuestionNodeDoc): string[] {\n const meta = (node.metadata || {}) as Record<string, unknown>;\n return [meta.questionStatus, meta.status, node.status].filter(\n (value): value is string => typeof value === \"string\"\n );\n}\n\nexport function isActiveQuestionNode(node: QuestionNodeDoc): boolean {\n if (\n typeof node.status === \"string\" &&\n INACTIVE_NODE_STATUSES.has(node.status)\n ) {\n return false;\n }\n return !getQuestionStatusCandidates(node).some((status) =>\n INACTIVE_METADATA_STATUSES.has(status.toLowerCase())\n );\n}\n\nexport function matchesRequestedQuestionStatus(\n node: QuestionNodeDoc,\n requestedStatus: string\n): boolean {\n const normalizedStatus = requestedStatus.toLowerCase();\n return getQuestionStatusCandidates(node).some(\n (status) => status.toLowerCase() === normalizedStatus\n );\n}\n\n// =============================================================================\n// CREATE\n// =============================================================================\n\n/**\n * Create a new question in the epistemic spine.\n * Returns the epistemicNodes ID directly (not a questions ID).\n */\n","// biome-ignore-all lint/style/useFilenamingConvention: Public ABI surface; rename requires a cross-package migration update.\n/**\n * Epistemic Questions API\n *\n * Clean API for managing questions in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces questions.ts for CREATE operations.\n *\n * Key differences from questions.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyQuestionId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { checkScopeAccess } from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal, mutation, query } from \"./convex\";\nimport {\n debugGraphPrimitiveFallback,\n formatGraphPrimitiveError,\n} from \"./debug\";\n\n// =============================================================================\n// HELPERS\nimport {\n buildLinkedWorktreeMetadata,\n buildTestsEdgeGlobalId,\n generateContentHash,\n getQuestionNodesForScope,\n logQuestionFallback,\n markProjectGraphDirty,\n normalizeQuestionTopicId,\n resolveQuestionScopeId,\n resolveQuestionScopeOrNull,\n} from \"./epistemicQuestions.helpers\";\n\ntype AnswerCompleteness =\n | \"unanswered\"\n | \"partial\"\n | \"sufficient\"\n | \"comprehensive\"\n | \"unanswerable\";\n\ntype UnknownRecord = Record<string, unknown>;\n\ninterface LinkToBeliefArgs {\n answerImpact?: {\n ifYes: string;\n ifNo: string;\n };\n beliefId: string;\n isPrimaryBelief?: boolean;\n testType?: \"validates\" | \"invalidates\" | \"clarifies\";\n userId: string;\n}\n\ninterface QuestionNodeRow {\n _id: Id<\"epistemicNodes\">;\n canonicalText?: string;\n globalId?: string;\n metadata: UnknownRecord;\n nodeType: string;\n projectId?: string;\n sourceType?: string;\n topicId?: string;\n}\n\ninterface QuestionEvidenceLinkRow {\n _id: Id<\"questionEvidenceLinks\">;\n insightId?: Id<\"epistemicNodes\"> | string;\n}\n\ninterface QuestionEdgeRow {\n _id: Id<\"epistemicEdges\">;\n edgeType?: string;\n globalId?: string;\n}\n\ninterface AdvanceToConvictionArgs {\n questionId: Id<\"epistemicNodes\">;\n sprintId?: string;\n userId: string;\n worktreeId?: string;\n}\n\ninterface UpdateConvictionArgs {\n answerCompleteness?: Exclude<AnswerCompleteness, \"unanswerable\">;\n conviction?: number;\n convictionRationale?: string;\n questionId: Id<\"epistemicNodes\">;\n userId: string;\n}\n\ninterface FinalizeConvictionArgs {\n answer: string;\n answerCompleteness?: AnswerCompleteness;\n conviction: number;\n convictionRationale?: string;\n questionId: Id<\"epistemicNodes\">;\n userId: string;\n whatWeNeed?: string;\n}\n\ninterface GetByBeliefWithAccessArgs {\n beliefId: string;\n userId: string;\n}\n\ntype QuestionCategory =\n | \"competition\"\n | \"customer\"\n | \"distribution\"\n | \"financial\"\n | \"financials\"\n | \"market\"\n | \"other\"\n | \"product\"\n | \"regulatory\"\n | \"strategic\"\n | \"team\"\n | \"technology\"\n | \"timing\";\ntype QuestionPriority = \"high\" | \"low\" | \"medium\";\n\ninterface UpdateQuestionArgs {\n category?: QuestionCategory;\n priority?: QuestionPriority;\n question?: string;\n questionId: Id<\"epistemicNodes\">;\n}\n\ninterface LinkToBeliefMutationArgs extends LinkToBeliefArgs {\n questionId: Id<\"epistemicNodes\">;\n}\n\ninterface LinkToInsightArgs {\n insightId: Id<\"epistemicNodes\">;\n questionId: Id<\"epistemicNodes\">;\n rationale?: string;\n relevance?: number;\n sprintId?: string;\n userId: string;\n worktreeId?: string;\n}\n\ninterface UnlinkInsightArgs {\n insightId: Id<\"epistemicNodes\">;\n questionId: Id<\"epistemicNodes\">;\n userId: string;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n const normalized = readOptionalString(value);\n return normalized ? (normalized as Id<TableName>) : null;\n}\n\nfunction readRecord(value: unknown): UnknownRecord | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as UnknownRecord)\n : null;\n}\n\nfunction readStringArray(value: unknown): string[] {\n return Array.isArray(value) && value.every((item) => typeof item === \"string\")\n ? value\n : [];\n}\n\nfunction readQuestionNodeRow(value: unknown): QuestionNodeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(record._id);\n const nodeType = readOptionalString(record.nodeType);\n if (!(id && nodeType)) {\n return null;\n }\n\n const metadata = readRecord(record.metadata) ?? {};\n const node: QuestionNodeRow = { _id: id, metadata, nodeType };\n const canonicalText = readOptionalString(record.canonicalText);\n if (canonicalText !== undefined) {\n node.canonicalText = canonicalText;\n }\n const globalId = readOptionalString(record.globalId);\n if (globalId !== undefined) {\n node.globalId = globalId;\n }\n const projectId = readOptionalString(record.projectId);\n if (projectId !== undefined) {\n node.projectId = projectId;\n }\n const sourceType = readOptionalString(record.sourceType);\n if (sourceType !== undefined) {\n node.sourceType = sourceType;\n }\n const topicId = readOptionalString(record.topicId);\n if (topicId !== undefined) {\n node.topicId = topicId;\n }\n return node;\n}\n\nfunction requireQuestionNode(value: unknown): QuestionNodeRow {\n const node = readQuestionNodeRow(value);\n if (node?.nodeType !== \"question\") {\n throw new Error(\"Question not found\");\n }\n return node;\n}\n\nfunction readBeliefNode(value: unknown): QuestionNodeRow | null {\n const node = readQuestionNodeRow(value);\n return node?.nodeType === \"belief\" ? node : null;\n}\n\nfunction readEvidenceNode(value: unknown): QuestionNodeRow | null {\n const node = readQuestionNodeRow(value);\n return node?.nodeType === \"evidence\" ? node : null;\n}\n\nfunction readQuestionEvidenceLinkRow(\n value: unknown\n): QuestionEvidenceLinkRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"questionEvidenceLinks\">(record._id);\n if (!id) {\n return null;\n }\n\n const link: QuestionEvidenceLinkRow = { _id: id };\n const insightId =\n readConvexId<\"epistemicNodes\">(record.insightId) ??\n readOptionalString(record.insightId);\n if (insightId !== undefined && insightId !== null) {\n link.insightId = insightId;\n }\n return link;\n}\n\nfunction readQuestionEdgeRow(value: unknown): QuestionEdgeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicEdges\">(record._id);\n if (!id) {\n return null;\n }\n\n const edge: QuestionEdgeRow = { _id: id };\n const edgeType = readOptionalString(record.edgeType);\n if (edgeType !== undefined) {\n edge.edgeType = edgeType;\n }\n const globalId = readOptionalString(record.globalId);\n if (globalId !== undefined) {\n edge.globalId = globalId;\n }\n return edge;\n}\n\nfunction resolveConvictionCompleteness(\n explicit: AnswerCompleteness | undefined,\n conviction: number\n): AnswerCompleteness {\n if (explicit !== undefined) {\n return explicit;\n }\n if (conviction >= 0.8) {\n return \"comprehensive\";\n }\n if (conviction >= 0.6) {\n return \"sufficient\";\n }\n if (conviction >= 0.3) {\n return \"partial\";\n }\n return \"unanswered\";\n}\n\nfunction buildFinalizedConvictionMetadata(\n args: {\n userId: string;\n answer: string;\n convictionRationale?: string;\n answerCompleteness: AnswerCompleteness;\n conviction: number;\n whatWeNeed?: string;\n },\n meta: UnknownRecord,\n now: number,\n clampedConviction: number\n): Record<string, unknown> {\n return {\n ...meta,\n convictionStage: \"scored\",\n conviction: clampedConviction,\n convictionRationale: args.convictionRationale,\n convictionUpdatedAt: now,\n convictionUpdatedBy: args.userId,\n answer: args.answer,\n answerStatus: \"final\",\n questionStatus:\n args.answerCompleteness === \"unanswerable\" ? \"blocked\" : \"answered\",\n answeredAt: now,\n answeredBy: args.userId,\n answerCompleteness: args.answerCompleteness,\n whatWeNeed: args.whatWeNeed,\n };\n}\n\nfunction resolveLinkedBeliefNodeIdFromMetadata(\n meta: UnknownRecord\n): string | undefined {\n return (\n readOptionalString(meta.linkedBeliefNodeId) ||\n readOptionalString(meta.linkedBeliefId) ||\n readOptionalString(meta.beliefId)\n );\n}\n\nasync function scheduleEvidenceCreationFromScoredQuestion(\n ctx: MutationCtx,\n options: {\n questionNodeId: Id<\"epistemicNodes\">;\n questionText: string;\n answerText: string;\n questionMetadata: UnknownRecord;\n conviction: number;\n rationale?: string;\n userId: string;\n projectId?: string;\n topicId?: string;\n relatedBeliefIds: string[];\n }\n): Promise<void> {\n if (!options.topicId) {\n return;\n }\n\n const linkedBeliefId = resolveLinkedBeliefNodeIdFromMetadata(\n options.questionMetadata\n );\n if (!linkedBeliefId) {\n return;\n }\n\n try {\n await ctx.scheduler.runAfter(\n 0,\n internal.epistemicQuestions.createEvidenceFromScoredQuestion,\n {\n questionNodeId: options.questionNodeId,\n questionText: options.questionText,\n answerText: options.answerText,\n beliefId: linkedBeliefId,\n relatedBeliefIds: options.relatedBeliefIds,\n conviction: options.conviction,\n rationale: options.rationale || \"\",\n projectId: options.projectId,\n topicId: options.topicId ? String(options.topicId) : undefined,\n userId: options.userId,\n }\n );\n } catch (error) {\n logQuestionFallback(\n \"[epistemicQuestions] Failed to schedule evidence creation from scored question\",\n error,\n {\n questionId: options.questionNodeId,\n beliefId: linkedBeliefId,\n projectId: options.projectId,\n }\n );\n console.error(\n \"[finalizeConviction] Failed to schedule evidence creation:\",\n error\n );\n }\n}\n\nasync function resolveBeliefNodeForBeliefLink(\n ctx: MutationCtx,\n beliefId: string\n): Promise<QuestionNodeRow | null> {\n try {\n return readBeliefNode(await ctx.db.get(beliefId as Id<\"epistemicNodes\">));\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to resolve belief node directly\",\n {\n error: formatGraphPrimitiveError(error),\n beliefId,\n }\n );\n\n try {\n return readBeliefNode(await ctx.db.get(beliefId as Id<\"epistemicNodes\">));\n } catch (legacyError) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to resolve legacy belief node\",\n {\n error: formatGraphPrimitiveError(legacyError),\n beliefId,\n }\n );\n return null;\n }\n }\n}\n\nfunction buildBeliefLinkMetadata(\n questionMetadata: UnknownRecord,\n args: LinkToBeliefArgs\n): Record<string, unknown> {\n const currentBeliefs = readStringArray(questionMetadata.relatedBeliefIds);\n const beliefId = String(args.beliefId);\n const relatedBeliefs = currentBeliefs.includes(beliefId)\n ? currentBeliefs\n : [...currentBeliefs, beliefId];\n\n const metaUpdates: UnknownRecord = {\n ...questionMetadata,\n relatedBeliefIds: relatedBeliefs,\n };\n\n if (args.isPrimaryBelief || args.testType) {\n metaUpdates.linkedBeliefNodeId = args.beliefId;\n metaUpdates.linkedBeliefId = args.beliefId;\n metaUpdates.questionType = \"belief_test\";\n if (args.testType) {\n metaUpdates.testType = args.testType;\n }\n if (args.answerImpact) {\n metaUpdates.answerImpact = args.answerImpact;\n }\n }\n\n return metaUpdates;\n}\n\nasync function syncBeliefTestEdge(\n ctx: MutationCtx,\n questionNode: QuestionNodeRow,\n beliefNode: QuestionNodeRow,\n args: LinkToBeliefArgs\n): Promise<void> {\n try {\n const beliefGlobalId = beliefNode.globalId;\n if (!(beliefGlobalId && questionNode.globalId)) {\n return;\n }\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: questionNode._id,\n operation: \"upsert\",\n });\n await ctx.scheduler.runAfter(100, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: beliefNode._id,\n operation: \"upsert\",\n });\n\n const edgeGlobalId = buildTestsEdgeGlobalId(\n questionNode.globalId,\n beliefGlobalId\n );\n await ctx.scheduler.runAfter(250, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: questionNode.globalId,\n toGlobalId: beliefGlobalId,\n edgeType: \"tests\",\n context: args.testType || \"tests\",\n topicId: normalizeQuestionTopicId(questionNode.topicId),\n createdBy: args.userId,\n fromNodeType: \"question\",\n toNodeType: \"belief\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n } catch (error) {\n logQuestionFallback(\n \"[epistemicQuestions] Failed to create tests edge\",\n error,\n {\n questionId: questionNode._id,\n beliefId: args.beliefId,\n }\n );\n console.error(\"[linkToBelief] Failed to create tests edge:\", error);\n }\n}\n\nasync function assertQuestionScopeAccess(\n ctx: QueryCtx | MutationCtx,\n questionNode: QuestionNodeRow,\n userId: string\n): Promise<void> {\n const questionScopeId = resolveQuestionScopeId({\n projectId: questionNode.projectId,\n topicId: normalizeQuestionTopicId(questionNode.topicId),\n });\n if (!questionScopeId) {\n return;\n }\n\n const hasAccess = await checkScopeAccess(ctx, questionScopeId, userId);\n if (!hasAccess) {\n throw new Error(\"Access denied\");\n }\n}\n\nasync function removeQuestionEvidenceLinks(\n ctx: MutationCtx,\n args: Pick<UnlinkInsightArgs, \"insightId\" | \"questionId\">\n): Promise<void> {\n try {\n const links = await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", args.questionId))\n .collect();\n\n for (const rawLink of links) {\n const link = readQuestionEvidenceLinkRow(rawLink);\n if (link && String(link.insightId) === String(args.insightId)) {\n await ctx.db.delete(link._id);\n }\n }\n } catch (error) {\n logQuestionFallback(\n \"[epistemicQuestions] Failed to remove questionEvidenceLink\",\n error,\n {\n questionId: args.questionId,\n insightId: args.insightId,\n }\n );\n console.error(\n \"[unlinkInsight] Failed to remove questionEvidenceLink:\",\n error\n );\n }\n}\n\nfunction buildEvidenceQuestionEndpointPairs(\n evidenceNode: QuestionNodeRow,\n questionNode: QuestionNodeRow\n): Array<{ fromNodeId: string; toNodeId: string }> {\n return [String(evidenceNode._id), evidenceNode.globalId]\n .filter(\n (endpoint): endpoint is string =>\n typeof endpoint === \"string\" && endpoint.length > 0\n )\n .flatMap((fromNodeId) => [\n { fromNodeId, toNodeId: String(questionNode._id) },\n ...(questionNode.globalId\n ? [{ fromNodeId, toNodeId: questionNode.globalId }]\n : []),\n ]);\n}\n\nasync function collectEdgesForEndpointPairs(\n ctx: MutationCtx,\n endpointPairs: Array<{ fromNodeId: string; toNodeId: string }>\n): Promise<unknown[]> {\n const edgeGroups = await Promise.all(\n endpointPairs.map((endpoint) =>\n ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q\n .eq(\"fromNodeId\", endpoint.fromNodeId)\n .eq(\"toNodeId\", endpoint.toNodeId)\n )\n .collect()\n )\n );\n return edgeGroups.flat();\n}\n\nasync function removeDerivedEvidenceEdges(\n ctx: MutationCtx,\n args: Pick<UnlinkInsightArgs, \"insightId\" | \"questionId\"> & {\n questionNode: QuestionNodeRow;\n }\n): Promise<void> {\n try {\n const evidenceNode = readEvidenceNode(await ctx.db.get(args.insightId));\n if (!evidenceNode) {\n return;\n }\n\n const endpointPairs = buildEvidenceQuestionEndpointPairs(\n evidenceNode,\n args.questionNode\n );\n const rawEdges = await collectEdgesForEndpointPairs(ctx, endpointPairs);\n\n for (const rawEdge of rawEdges) {\n const edge = readQuestionEdgeRow(rawEdge);\n if (!(edge && edge.edgeType === \"derived_from\")) {\n continue;\n }\n if (edge.globalId) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n }\n await ctx.db.delete(edge._id);\n }\n } catch (error) {\n logQuestionFallback(\n \"[epistemicQuestions] Failed to remove derived edge\",\n error,\n {\n questionId: args.questionId,\n insightId: args.insightId,\n }\n );\n console.error(\"[unlinkInsight] Failed to remove edge:\", error);\n }\n}\n\nexport const advanceToConviction = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n sprintId: v.optional(v.string()),\n worktreeId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: AdvanceToConvictionArgs) => {\n const node = requireQuestionNode(await ctx.db.get(args.questionId));\n const meta = node.metadata;\n\n // Only allow advancing questions that aren't already in conviction or scored\n if (\n meta.convictionStage === \"in_conviction\" ||\n meta.convictionStage === \"scored\"\n ) {\n throw new Error(\"Question is already in conviction stage\");\n }\n\n const now = Date.now();\n\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: {\n ...meta,\n convictionStage: \"in_conviction\",\n convictionAdvancedAt: now,\n convictionAdvancedBy: args.userId,\n ...buildLinkedWorktreeMetadata(args.worktreeId ?? args.sprintId),\n },\n });\n\n // Log to epistemic audit\n try {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: args.questionId,\n changeType: \"status_changed\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: {\n convictionStage: meta.convictionStage || \"researching\",\n },\n newState: { convictionStage: \"in_conviction\" },\n triggeringAction: \"question_advanced_to_conviction\",\n });\n } catch (e) {\n logQuestionFallback(\n \"[epistemicQuestions] Failed to log advanceToConviction audit\",\n e,\n {\n questionId: args.questionId,\n projectId: node.projectId,\n }\n );\n console.error(\"[EpistemicAudit] Failed to log advanceToConviction:\", e);\n }\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return {\n questionId: args.questionId,\n convictionStage: \"in_conviction\",\n advancedAt: now,\n };\n },\n});\n\n/**\n * 3. updateConviction - Update conviction score for a question\n * Ported from questions.ts line 775\n */\nexport const updateConviction = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n conviction: v.optional(v.number()),\n answerCompleteness: v.optional(\n v.union(\n v.literal(\"unanswered\"),\n v.literal(\"partial\"),\n v.literal(\"sufficient\"),\n v.literal(\"comprehensive\")\n )\n ),\n convictionRationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateConvictionArgs) => {\n const node = requireQuestionNode(await ctx.db.get(args.questionId));\n\n const now = Date.now();\n const meta = node.metadata;\n const updates: Record<string, unknown> = { ...meta };\n\n if (args.conviction !== undefined) {\n updates.conviction = Math.max(0, Math.min(1, args.conviction));\n }\n if (args.answerCompleteness !== undefined) {\n updates.answerCompleteness = args.answerCompleteness;\n }\n if (args.convictionRationale !== undefined) {\n updates.convictionRationale = args.convictionRationale;\n }\n\n updates.convictionUpdatedAt = now;\n updates.convictionUpdatedBy = args.userId;\n\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: updates,\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return {\n questionId: args.questionId,\n conviction: updates.conviction ?? meta.conviction,\n answerCompleteness: updates.answerCompleteness ?? meta.answerCompleteness,\n };\n },\n});\n\n/**\n * 4. finalizeConviction - Finalize conviction scoring for a question\n * Ported from questions.ts line 893\n */\nexport const finalizeConviction = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n conviction: v.number(),\n answer: v.string(),\n convictionRationale: v.optional(v.string()),\n userId: v.string(),\n answerCompleteness: v.optional(\n v.union(\n v.literal(\"unanswered\"),\n v.literal(\"partial\"),\n v.literal(\"sufficient\"),\n v.literal(\"comprehensive\"),\n v.literal(\"unanswerable\")\n )\n ),\n whatWeNeed: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: FinalizeConvictionArgs) => {\n const node = requireQuestionNode(await ctx.db.get(args.questionId));\n\n const now = Date.now();\n const clampedConviction = Math.max(0, Math.min(1, args.conviction));\n const completeness = resolveConvictionCompleteness(\n args.answerCompleteness,\n clampedConviction\n );\n const meta = node.metadata;\n\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: buildFinalizedConvictionMetadata(\n {\n userId: args.userId,\n answer: args.answer,\n convictionRationale: args.convictionRationale,\n answerCompleteness: completeness,\n conviction: clampedConviction,\n whatWeNeed: args.whatWeNeed,\n },\n meta,\n now,\n clampedConviction\n ),\n });\n\n // Log to epistemic audit\n try {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: args.questionId,\n changeType: \"status_changed\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: {\n convictionStage: meta.convictionStage || \"in_conviction\",\n },\n newState: {\n convictionStage: \"scored\",\n conviction: clampedConviction,\n },\n triggeringAction: \"question_conviction_finalized\",\n });\n } catch (e) {\n logQuestionFallback(\n \"[epistemicQuestions] Failed to log finalizeConviction audit\",\n e,\n {\n questionId: args.questionId,\n projectId: node.projectId,\n }\n );\n console.error(\"[EpistemicAudit] Failed to log finalizeConviction:\", e);\n }\n\n await scheduleEvidenceCreationFromScoredQuestion(ctx, {\n questionNodeId: args.questionId,\n questionText: node.canonicalText ?? \"\",\n answerText: args.answer,\n questionMetadata: meta,\n conviction: clampedConviction,\n rationale: args.convictionRationale || \"\",\n projectId: node.projectId,\n topicId: normalizeQuestionTopicId(node.topicId),\n userId: args.userId,\n relatedBeliefIds: readStringArray(meta.relatedBeliefIds),\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.questionId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return {\n questionId: args.questionId,\n convictionStage: \"scored\",\n conviction: clampedConviction,\n };\n },\n});\n\n/**\n * 5. getByBeliefWithAccess - Get questions linked to a belief with access check\n * Ported from questions.ts line 1806\n */\nexport const getByBeliefWithAccess = query({\n args: {\n beliefId: v.string(),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetByBeliefWithAccessArgs) => {\n // Try to get the belief node to find its project\n let beliefNode: QuestionNodeRow | null = null;\n try {\n beliefNode = readBeliefNode(\n await ctx.db.get(args.beliefId as Id<\"epistemicNodes\">)\n );\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to resolve belief node directly\",\n {\n error: formatGraphPrimitiveError(error),\n beliefId: args.beliefId,\n }\n );\n // Not a valid epistemicNodes ID - try legacy beliefs table\n try {\n beliefNode = readBeliefNode(\n await ctx.db.get(args.beliefId as Id<\"epistemicNodes\">)\n );\n } catch (legacyError) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to resolve legacy belief node\",\n {\n error: formatGraphPrimitiveError(legacyError),\n beliefId: args.beliefId,\n }\n );\n return [];\n }\n }\n\n if (!beliefNode) {\n return [];\n }\n\n const scope = await resolveQuestionScopeOrNull(ctx, {\n projectId: beliefNode.projectId,\n topicId: normalizeQuestionTopicId(beliefNode.topicId),\n });\n const scopeId = scope ? resolveQuestionScopeId(scope) : undefined;\n if (!(scope && scopeId)) {\n return [];\n }\n\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n\n const questionNodes = await getQuestionNodesForScope(ctx, scope);\n\n // Filter to those linked to this belief\n const beliefIdStr = String(args.beliefId);\n return questionNodes.filter((q) => {\n const meta = readRecord(q.metadata) ?? {};\n // Check primary belief link\n if (String(meta.linkedBeliefNodeId || \"\") === beliefIdStr) {\n return true;\n }\n if (String(meta.linkedBeliefId || \"\") === beliefIdStr) {\n return true;\n }\n if (String(meta.beliefId || \"\") === beliefIdStr) {\n return true;\n }\n // Check related belief IDs array\n const relatedIds = readStringArray(meta.relatedBeliefIds);\n if (relatedIds.some((id) => String(id) === beliefIdStr)) {\n return true;\n }\n return false;\n });\n },\n});\n\n/**\n * 6. updateQuestion - Update question text and properties\n * Ported from questions.ts line 655\n */\nexport const updateQuestion = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n question: v.optional(v.string()),\n category: v.optional(\n v.union(\n v.literal(\"market\"),\n v.literal(\"competition\"),\n v.literal(\"product\"),\n v.literal(\"team\"),\n v.literal(\"financials\"),\n v.literal(\"financial\"),\n v.literal(\"regulatory\"),\n v.literal(\"timing\"),\n v.literal(\"customer\"),\n v.literal(\"technology\"),\n v.literal(\"distribution\"),\n v.literal(\"strategic\"),\n v.literal(\"other\")\n )\n ),\n priority: v.optional(\n v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateQuestionArgs) => {\n const node = requireQuestionNode(await ctx.db.get(args.questionId));\n\n const now = Date.now();\n const meta = node.metadata;\n const metaUpdates: Record<string, unknown> = { ...meta };\n\n // Update category if provided\n if (args.category) {\n const category =\n args.category === \"financial\" ? \"financials\" : args.category;\n metaUpdates.category = category;\n }\n\n // Update priority if provided\n if (args.priority) {\n metaUpdates.priority = args.priority;\n }\n\n // SOURCE CERTIFICATION: Re-tag as proprietary if user edits text\n const patchData: Record<string, unknown> = {\n updatedAt: now,\n metadata: metaUpdates,\n };\n\n if (args.question !== undefined) {\n patchData.canonicalText = args.question;\n patchData.contentHash = generateContentHash(args.question);\n if (node.sourceType === \"ai_generated\") {\n patchData.sourceType = \"human\";\n }\n }\n\n await ctx.db.patch(args.questionId, patchData);\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.questionId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n },\n});\n\n/**\n * 7. linkToBelief - Link a question to a belief\n * Ported from questions.ts line 1298\n */\nexport const linkToBelief = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n beliefId: v.string(), // Accept string for backward compat\n userId: v.string(),\n testType: v.optional(\n v.union(\n v.literal(\"validates\"),\n v.literal(\"invalidates\"),\n v.literal(\"clarifies\")\n )\n ),\n answerImpact: v.optional(\n v.object({\n ifYes: v.string(),\n ifNo: v.string(),\n })\n ),\n isPrimaryBelief: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: LinkToBeliefMutationArgs) => {\n const questionNode = requireQuestionNode(await ctx.db.get(args.questionId));\n\n await assertQuestionScopeAccess(ctx, questionNode, args.userId);\n\n const beliefNode = await resolveBeliefNodeForBeliefLink(ctx, args.beliefId);\n if (!beliefNode) {\n throw new Error(\"Belief not found\");\n }\n\n const now = Date.now();\n const meta = questionNode.metadata;\n const linkArgs = {\n beliefId: args.beliefId,\n userId: args.userId,\n testType: args.testType,\n answerImpact: args.answerImpact,\n isPrimaryBelief: args.isPrimaryBelief,\n };\n const metaUpdates = buildBeliefLinkMetadata(meta, linkArgs);\n\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: metaUpdates,\n });\n\n // Create edge in Neo4j (Question → Belief via \"tests\")\n await syncBeliefTestEdge(ctx, questionNode, beliefNode, linkArgs);\n\n await markProjectGraphDirty(\n ctx,\n questionNode.projectId,\n questionNode.topicId\n );\n },\n});\n\n/**\n * 8. linkToInsight - Link a question to an insight/evidence\n * Ported from questions.ts line 1437\n */\nexport const linkToInsight = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n insightId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n sprintId: v.optional(v.string()),\n worktreeId: v.optional(v.string()),\n relevance: v.optional(v.number()),\n rationale: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: LinkToInsightArgs) => {\n const questionNode = requireQuestionNode(await ctx.db.get(args.questionId));\n\n // Verify insight exists\n const insight = readQuestionNodeRow(await ctx.db.get(args.insightId));\n if (!insight) {\n throw new Error(\"Insight not found\");\n }\n\n await assertQuestionScopeAccess(ctx, questionNode, args.userId);\n\n const now = Date.now();\n const meta = questionNode.metadata;\n\n // Add to related insights (avoid duplicates)\n const currentInsights = readStringArray(meta.relatedInsightIds);\n const insightIdStr = String(args.insightId);\n\n if (!currentInsights.includes(insightIdStr)) {\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: {\n ...meta,\n relatedInsightIds: [...currentInsights, insightIdStr],\n },\n });\n\n // Create questionEvidenceLinks record\n try {\n const existingLinks = await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) =>\n q.eq(\"questionId\", args.questionId)\n )\n .collect();\n\n const duplicate = existingLinks\n .map(readQuestionEvidenceLinkRow)\n .find(\n (link) => link && String(link.insightId) === String(args.insightId)\n );\n\n if (!duplicate) {\n await ctx.db.insert(\"questionEvidenceLinks\", {\n questionId: args.questionId,\n insightId: args.insightId,\n helpsAnswer: true,\n relevance: args.relevance ?? 0.7,\n rationale: args.rationale || \"Linked from research results\",\n createdBy: args.userId,\n createdAt: now,\n });\n }\n } catch (e) {\n console.error(\n \"[linkToInsight] Failed to create questionEvidenceLink:\",\n e\n );\n }\n\n // Evidence linking now goes through graph edges (epistemicEdges),\n // not denormalized sprint.linkedEvidenceIds. Sprint table removed from K-tier.\n }\n\n await markProjectGraphDirty(\n ctx,\n questionNode.projectId,\n questionNode.topicId\n );\n },\n});\n\n/**\n * 9. unlinkInsight - Unlink an insight from a question\n * Ported from questions.ts line 1647\n */\nexport const unlinkInsight = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n insightId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UnlinkInsightArgs) => {\n const questionNode = requireQuestionNode(await ctx.db.get(args.questionId));\n\n await assertQuestionScopeAccess(ctx, questionNode, args.userId);\n\n const now = Date.now();\n const meta = questionNode.metadata;\n\n // Remove from related insights\n const currentInsights = readStringArray(meta.relatedInsightIds);\n const newInsights = currentInsights.filter(\n (id) => String(id) !== String(args.insightId)\n );\n\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: {\n ...meta,\n relatedInsightIds: newInsights,\n },\n });\n\n await removeQuestionEvidenceLinks(ctx, args);\n await removeDerivedEvidenceEdges(ctx, { ...args, questionNode });\n\n await markProjectGraphDirty(\n ctx,\n questionNode.projectId,\n questionNode.topicId\n );\n },\n});\n\n/**\n * 10. list - List questions for a project (simple query for AI tools)\n * New function that maps to getByProject semantics for callers expecting `list`\n */\n","// biome-ignore-all lint/style/useFilenamingConvention: Public ABI surface; rename requires a cross-package migration update.\n/**\n * Epistemic Questions API\n *\n * Clean API for managing questions in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces questions.ts for CREATE operations.\n *\n * Key differences from questions.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyQuestionId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport {\n checkProjectAccess,\n checkScopeAccess,\n} from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx } from \"./convex\";\nimport { internal, internalMutation, mutation } from \"./convex\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { insertEpistemicNode } from \"./epistemicInsert.js\";\n// =============================================================================\n// HELPERS\nimport {\n buildLinkedWorktreeMetadata,\n buildTestsEdgeGlobalId,\n generateContentHash,\n markProjectGraphDirty,\n normalizeCategory,\n normalizeQuestionTopicId,\n resolveQuestionScopeId,\n} from \"./epistemicQuestions.helpers\";\nimport { generateGlobalId } from \"./globalId\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\nconst EMBEDDING_GENERATION_ACTION =\n \"embeddingActions:generateEpistemicNodeEmbedding\";\n\ntype QuestionPriority = \"high\" | \"low\" | \"medium\";\ntype ClassifiedQuestionPriority = \"critical\" | QuestionPriority;\ntype QuestionTestType = \"clarifies\" | \"invalidates\" | \"validates\";\ntype QuestionType =\n | \"assumption_probe\"\n | \"causal\"\n | \"clarification\"\n | \"comparison\"\n | \"counterfactual\"\n | \"discovery\"\n | \"falsification\"\n | \"general\"\n | \"mechanism\"\n | \"prediction_test\"\n | \"validation\";\ntype RuntimePackInstallScope = \"tenant\" | \"workspace\";\n\ninterface QuestionScopeArgs {\n projectId?: string;\n topicId?: string;\n}\n\ninterface CreateQuestionArgs extends QuestionScopeArgs {\n category?: string;\n epistemicUnlock?: string;\n importance?: number;\n linkedBeliefNodeId?: Id<\"epistemicNodes\">;\n linkedWorktreeId?: string;\n priority?: QuestionPriority;\n question: string;\n questionPriority?: ClassifiedQuestionPriority;\n questionType?: QuestionType;\n source?: string;\n sourceQuestionIds?: string[];\n testType?: QuestionTestType;\n userId: string;\n}\n\ninterface BatchQuestionItem {\n category?: string;\n linkedBeliefNodeId?: Id<\"epistemicNodes\">;\n priority?: QuestionPriority;\n question: string;\n testType?: QuestionTestType;\n}\n\ninterface CreateBatchArgs extends QuestionScopeArgs {\n questions: BatchQuestionItem[];\n source?: string;\n userId: string;\n}\n\ninterface InternalCreateArgs extends QuestionScopeArgs {\n category?: string;\n linkedBeliefNodeId?: Id<\"epistemicNodes\">;\n priority?: string;\n question: string;\n runtimePackInstallScope?: RuntimePackInstallScope;\n runtimePackKey?: string;\n runtimeToolName?: string;\n source?: string;\n testType?: string;\n userId: string;\n}\n\ninterface AddQuestionArgs extends QuestionScopeArgs {\n beliefId?: string;\n category?: string;\n chatId?: string;\n epistemicUnlock?: string;\n importance?: number;\n metadata?: unknown;\n priority?: string;\n question: string;\n questionType?: string;\n source?: string;\n userId: string;\n}\n\ninterface BeliefNodeRow {\n _id: Id<\"epistemicNodes\">;\n globalId: string;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n const normalized = readOptionalString(value);\n return normalized ? (normalized as Id<TableName>) : null;\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 readBeliefNodeRow(value: unknown): BeliefNodeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(record._id);\n const globalId = readOptionalString(record.globalId);\n return id && globalId ? { _id: id, globalId } : null;\n}\n\nasync function scheduleTestsEdgeToBelief(\n ctx: MutationCtx,\n args: {\n beliefNodeId: Id<\"epistemicNodes\">;\n createdBy: string;\n questionGlobalId: string;\n testType?: string;\n topicId?: string;\n }\n): Promise<void> {\n const beliefNode = readBeliefNodeRow(await ctx.db.get(args.beliefNodeId));\n if (!beliefNode) {\n return;\n }\n\n await ctx.scheduler.runAfter(100, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: beliefNode._id,\n operation: \"upsert\",\n });\n\n const edgeGlobalId = buildTestsEdgeGlobalId(\n args.questionGlobalId,\n beliefNode.globalId\n );\n await ctx.scheduler.runAfter(250, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: args.questionGlobalId,\n toGlobalId: beliefNode.globalId,\n edgeType: \"tests\",\n weight: 1.0,\n context: args.testType || \"tests\",\n createdBy: args.createdBy,\n topicId: args.topicId,\n fromNodeType: \"question\",\n toNodeType: \"belief\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n}\n\nexport const create = mutation({\n args: {\n ...optionalScopeArgs,\n question: v.string(),\n category: v.optional(v.string()),\n priority: v.optional(\n v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\"))\n ),\n source: v.optional(v.string()),\n userId: v.string(),\n // Optional linking\n linkedBeliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n testType: v.optional(\n v.union(\n v.literal(\"validates\"),\n v.literal(\"invalidates\"),\n v.literal(\"clarifies\")\n )\n ),\n // Optional metadata\n importance: v.optional(v.number()),\n epistemicUnlock: v.optional(v.string()),\n // === SOURCE QUESTIONS (for key question derivation) ===\n // When a key question is synthesized from raw questions, track the source\n sourceQuestionIds: v.optional(v.array(v.string())), // globalIds of source questions\n // === WORKTREE LINKAGE ===\n linkedWorktreeId: v.optional(v.string()),\n // === CLASSIFICATION FIELDS ===\n questionType: v.optional(\n v.union(\n v.literal(\"validation\"),\n v.literal(\"falsification\"),\n v.literal(\"assumption_probe\"),\n v.literal(\"prediction_test\"),\n v.literal(\"counterfactual\"),\n v.literal(\"discovery\"),\n v.literal(\"clarification\"),\n v.literal(\"comparison\"),\n v.literal(\"causal\"),\n v.literal(\"mechanism\"),\n v.literal(\"general\")\n )\n ),\n questionPriority: v.optional(\n v.union(\n v.literal(\"critical\"),\n v.literal(\"high\"),\n v.literal(\"medium\"),\n v.literal(\"low\")\n )\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: CreateQuestionArgs) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"question\",\n mutationName: \"epistemicQuestions.create\",\n });\n if (scope.projectId) {\n await checkProjectAccess(ctx, scope.projectId, args.userId);\n }\n\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.question);\n const category = normalizeCategory(args.category);\n\n // Create ONLY in epistemicNodes (no questions table!)\n const nodeId = await insertEpistemicNode(ctx, {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"question\",\n canonicalText: args.question,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L3\", // L3: Traversal Anchors (Questions)\n sourceType: args.source === \"user\" ? \"human\" : \"ai_generated\",\n // Classification fields\n questionType: args.questionType ?? \"general\",\n questionPriority: args.questionPriority ?? \"medium\",\n answerQuality: \"unanswered\", // New questions start unanswered\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n category,\n priority: args.priority || \"medium\",\n source: args.source || \"ai_suggested\",\n questionStatus: \"open\",\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n ...buildLinkedWorktreeMetadata(args.linkedWorktreeId),\n testType: args.testType,\n importance: args.importance,\n epistemicUnlock: args.epistemicUnlock,\n // Track source questions for key question derivation\n prerequisiteQuestions: args.sourceQuestionIds,\n },\n });\n\n // Schedule Neo4j sync for the new node.\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Schedule embedding generation\n await scheduleEmbeddingGeneration({\n ctx,\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId,\n createdBy: args.userId,\n nodeType: \"question\",\n text: args.question,\n });\n\n // NOTE: We no longer create prerequisite_for edges between questions.\n // Raw questions are excluded from the graph once key questions exist,\n // so the edges create unnecessary noise without providing value.\n // The sourceQuestionIds are still tracked in metadata for reference only.\n\n // If linked to a belief, create tests edge through Neo4j authority path.\n if (args.linkedBeliefNodeId) {\n await scheduleTestsEdgeToBelief(ctx, {\n beliefNodeId: args.linkedBeliefNodeId,\n createdBy: args.userId,\n questionGlobalId: globalId,\n testType: args.testType,\n topicId: normalizeQuestionTopicId(scope.topicId),\n });\n }\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: scope.projectId,\n newState: {\n question: args.question,\n category,\n priority: args.priority || \"medium\",\n },\n });\n\n // Schedule embedding generation for semantic search.\n // topicId alone is sufficient for Lucern deployments (no projects table).\n if (scope.topicId) {\n await ctx.scheduler.runAfter(0, EMBEDDING_GENERATION_ACTION, {\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"question\" as const,\n text: args.question,\n hasAnswer: false,\n });\n }\n\n // ==========================================================================\n // ONTOLOGY: Schedule question classification for entity extraction\n // ==========================================================================\n if (scope.topicId) {\n await ctx.scheduler.runAfter(\n 2000, // 2 second delay\n internal.nodeClassification.scheduleClassification,\n {\n nodeId,\n nodeType: \"question\",\n projectId: scope.projectId,\n topicId: normalizeQuestionTopicId(scope.topicId),\n }\n );\n }\n\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n normalizeQuestionTopicId(scope.topicId)\n );\n\n return { nodeId };\n },\n});\n\n/**\n * Create multiple questions in batch (for efficiency)\n */\nexport const createBatch = mutation({\n args: {\n ...optionalScopeArgs,\n questions: v.array(\n v.object({\n question: v.string(),\n category: v.optional(v.string()),\n priority: v.optional(\n v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\"))\n ),\n linkedBeliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n testType: v.optional(\n v.union(\n v.literal(\"validates\"),\n v.literal(\"invalidates\"),\n v.literal(\"clarifies\")\n )\n ),\n })\n ),\n source: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: CreateBatchArgs) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n const scopeId = resolveQuestionScopeId(scope);\n if (!scopeId) {\n throw new Error(\"No scope identifier provided\");\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n throw new Error(\"Access denied\");\n }\n\n const now = Date.now();\n const nodeIds: Id<\"epistemicNodes\">[] = [];\n\n for (const q of args.questions) {\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(q.question);\n const category = normalizeCategory(q.category);\n\n const nodeId = await insertEpistemicNode(ctx, {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"question\",\n canonicalText: q.question,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L3\",\n sourceType: args.source === \"user\" ? \"human\" : \"ai_generated\",\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n category,\n priority: q.priority || \"medium\",\n source: args.source || \"ai_suggested\",\n questionStatus: \"open\",\n linkedBeliefNodeId: q.linkedBeliefNodeId,\n testType: q.testType,\n },\n });\n\n nodeIds.push(nodeId);\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: String(nodeId),\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: scope.projectId,\n topicId: normalizeQuestionTopicId(scope.topicId),\n newState: {\n question: q.question,\n category,\n priority: q.priority || \"medium\",\n source: args.source || \"ai_suggested\",\n linkedBeliefNodeId: q.linkedBeliefNodeId,\n testType: q.testType,\n },\n triggeringAction: \"epistemicQuestions.createBatch\",\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Create edge if linked to belief (directly in Neo4j)\n if (q.linkedBeliefNodeId) {\n await scheduleTestsEdgeToBelief(ctx, {\n beliefNodeId: q.linkedBeliefNodeId,\n createdBy: args.userId,\n questionGlobalId: globalId,\n testType: q.testType,\n topicId: normalizeQuestionTopicId(scope.topicId),\n });\n }\n }\n\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n normalizeQuestionTopicId(scope.topicId)\n );\n\n return { nodeIds, count: nodeIds.length };\n },\n});\n\n// =============================================================================\n// UPDATE\n// =============================================================================\n\n/**\n * Update a question's status (open, researching, answered, etc.)\n */\n\nexport const internalCreate = internalMutation({\n args: {\n ...optionalScopeArgs,\n question: v.string(),\n category: v.optional(v.string()),\n priority: v.optional(v.string()),\n source: v.optional(v.string()),\n userId: v.string(),\n linkedBeliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n testType: v.optional(v.string()),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: InternalCreateArgs) => {\n const now = Date.now();\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"question\",\n mutationName: \"epistemicQuestions.internalCreate\",\n });\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"question\",\n epistemicLayer: \"L3\",\n },\n mutationName: \"epistemicQuestions.internalCreate\",\n });\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.question);\n const category = normalizeCategory(args.category);\n\n const nodeId = await insertEpistemicNode(ctx, {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"question\",\n canonicalText: args.question,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L3\",\n sourceType: args.source === \"user\" ? \"human\" : \"ai_generated\",\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n category,\n priority: args.priority || \"medium\",\n source: args.source || \"ai_suggested\",\n questionStatus: \"open\",\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n testType: args.testType,\n },\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Create edge if linked to belief (directly in Neo4j)\n if (args.linkedBeliefNodeId) {\n await scheduleTestsEdgeToBelief(ctx, {\n beliefNodeId: args.linkedBeliefNodeId,\n createdBy: args.userId,\n questionGlobalId: globalId,\n testType: args.testType,\n topicId: normalizeQuestionTopicId(scope.topicId),\n });\n }\n\n // Schedule embedding generation for semantic search.\n // topicId alone is sufficient for Lucern deployments (no projects table).\n if (scope.topicId) {\n await ctx.scheduler.runAfter(0, EMBEDDING_GENERATION_ACTION, {\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"question\" as const,\n text: args.question,\n hasAnswer: false,\n });\n }\n\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n normalizeQuestionTopicId(scope.topicId)\n );\n\n return { nodeId };\n },\n});\n\n// =============================================================================\n// MUTATIONS\n// =============================================================================\n\n/**\n * Add a question to the epistemic graph\n */\nexport const addQuestion = mutation({\n args: {\n ...optionalScopeArgs,\n question: v.string(),\n category: v.optional(v.string()),\n priority: v.optional(v.string()),\n source: v.optional(v.string()),\n userId: v.string(),\n beliefId: v.optional(v.string()),\n chatId: v.optional(v.string()),\n importance: v.optional(v.number()),\n epistemicUnlock: v.optional(v.string()),\n metadata: v.optional(v.any()),\n questionType: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: AddQuestionArgs) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n const scopeId = resolveQuestionScopeId(scope);\n if (!scopeId) {\n throw new Error(\"No scope identifier provided\");\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n throw new Error(\"Access denied\");\n }\n\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.question);\n const category = normalizeCategory(args.category);\n const additionalMetadata = readRecord(args.metadata) ?? {};\n\n // Create in epistemicNodes\n const nodeId = await insertEpistemicNode(ctx, {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"question\",\n canonicalText: args.question,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L3\",\n sourceType: args.source === \"user\" ? \"human\" : \"ai_generated\",\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n ...additionalMetadata,\n category,\n priority: args.priority || \"medium\",\n source: args.source || \"ai_suggested\",\n questionStatus: \"open\",\n beliefId: args.beliefId,\n linkedBeliefId: args.beliefId,\n chatId: args.chatId,\n importance: args.importance,\n epistemicUnlock: args.epistemicUnlock,\n },\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: String(nodeId),\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: scope.projectId,\n topicId: normalizeQuestionTopicId(scope.topicId),\n newState: {\n ...additionalMetadata,\n question: args.question,\n category,\n priority: args.priority || \"medium\",\n source: args.source || \"ai_suggested\",\n beliefId: args.beliefId,\n chatId: args.chatId,\n importance: args.importance,\n epistemicUnlock: args.epistemicUnlock,\n },\n triggeringAction: \"epistemicQuestions.addQuestion\",\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Generate embedding\n await ctx.scheduler.runAfter(0, EMBEDDING_GENERATION_ACTION, {\n nodeId,\n projectId: scope.projectId,\n topicId: normalizeQuestionTopicId(scope.topicId),\n createdBy: args.userId,\n nodeType: \"question\" as const,\n text: args.question,\n hasAnswer: false,\n });\n\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n normalizeQuestionTopicId(scope.topicId)\n );\n\n return nodeId;\n },\n});\n\n// =============================================================================\n// EVIDENCE CREATION FROM SCORED QUESTIONS\n// =============================================================================\n\n/**\n * Create an L2 evidence node from a scored question's answer and link it to\n * the tested belief(s) via INFORMS edges. This bridges the sprint question\n * workflow to the evidence graph so computeSprintConviction can score beliefs.\n *\n * Called as a side-effect when a question is finalized with conviction scoring.\n */\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Epistemic Questions API\n *\n * Clean API for managing questions in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces questions.ts for CREATE operations.\n *\n * Key differences from questions.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyQuestionId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx } from \"./convex\";\nimport { internal, internalMutation } from \"./convex\";\nimport {\n debugGraphPrimitiveFallback,\n formatGraphPrimitiveError,\n} from \"./debug\";\nimport { insertEpistemicNode } from \"./epistemicInsert.js\";\n// =============================================================================\n// HELPERS\nimport {\n getQuestionNodesForScope,\n markProjectGraphDirty,\n normalizeQuestionTopicId,\n resolveQuestionScopeOrNull,\n} from \"./epistemicQuestions.helpers\";\nimport { generateGlobalId } from \"./globalId\";\nimport { optionalScopeArgs } from \"./topicScope\";\n\ninterface QuestionScopeArgs {\n projectId?: string;\n topicId?: string;\n}\n\ninterface CreateEvidenceFromScoredQuestionArgs extends QuestionScopeArgs {\n answerText: string;\n beliefId: string;\n conviction: number;\n questionNodeId: Id<\"epistemicNodes\">;\n questionText: string;\n rationale: string;\n relatedBeliefIds: string[];\n userId: string;\n}\n\ninterface BackfillScoredQuestionEvidenceArgs extends QuestionScopeArgs {\n dryRun?: boolean;\n userId: string;\n}\n\ninterface QuestionEvidenceNodeRow {\n _id: Id<\"epistemicNodes\">;\n canonicalText?: string;\n globalId?: string;\n metadata: Record<string, unknown>;\n nodeType: string;\n}\n\ninterface BeliefNodeRow {\n _id: Id<\"epistemicNodes\">;\n globalId: string;\n nodeType: string;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n const normalized = readOptionalString(value);\n return normalized ? (normalized as Id<TableName>) : null;\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 readStringArray(value: unknown): string[] {\n return Array.isArray(value) && value.every((item) => typeof item === \"string\")\n ? value\n : [];\n}\n\nfunction readFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readQuestionEvidenceNodeRow(\n value: unknown\n): QuestionEvidenceNodeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(record._id);\n const nodeType = readOptionalString(record.nodeType);\n if (!(id && nodeType)) {\n return null;\n }\n\n const row: QuestionEvidenceNodeRow = {\n _id: id,\n metadata: readRecord(record.metadata) ?? {},\n nodeType,\n };\n const canonicalText = readOptionalString(record.canonicalText);\n if (canonicalText !== undefined) {\n row.canonicalText = canonicalText;\n }\n const globalId = readOptionalString(record.globalId);\n if (globalId !== undefined) {\n row.globalId = globalId;\n }\n return row;\n}\n\nfunction readBeliefNodeRow(value: unknown): BeliefNodeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(record._id);\n const globalId = readOptionalString(record.globalId);\n const nodeType = readOptionalString(record.nodeType);\n return id && globalId && nodeType ? { _id: id, globalId, nodeType } : null;\n}\n\nfunction resolveCanonicalEdgeTopicId(\n args: QuestionScopeArgs\n): string | undefined {\n return normalizeQuestionTopicId(args.topicId);\n}\n\nexport const createEvidenceFromScoredQuestion = internalMutation({\n args: {\n questionNodeId: v.id(\"epistemicNodes\"),\n questionText: v.string(),\n answerText: v.string(),\n beliefId: v.string(),\n relatedBeliefIds: v.array(v.string()),\n conviction: v.number(),\n rationale: v.string(),\n ...optionalScopeArgs,\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (\n ctx: MutationCtx,\n args: CreateEvidenceFromScoredQuestionArgs\n ) => {\n const now = Date.now();\n\n // Check if evidence was already created for this question (idempotent)\n const questionNode = readQuestionEvidenceNodeRow(\n await ctx.db.get(args.questionNodeId)\n );\n if (!questionNode) {\n return;\n }\n if (questionNode.nodeType !== \"question\") {\n return;\n }\n if (!questionNode.globalId) {\n throw new Error(\n \"Question node missing globalId; cannot create canonical evidence provenance edge\"\n );\n }\n const qMeta = questionNode.metadata;\n if (qMeta.evidenceNodeId) {\n return; // Already created\n }\n const edgeTopicId = resolveCanonicalEdgeTopicId(args);\n\n // Build evidence text from Q&A\n const evidenceText = `Q: ${args.questionText}\\n\\nA: ${args.answerText}`;\n const globalId = generateGlobalId();\n const contentHash = `evidence:${args.questionNodeId}:scored`;\n\n // Create L2 evidence node\n const evidenceNodeId = await insertEpistemicNode(ctx, {\n globalId,\n projectId: args.projectId,\n topicId: normalizeQuestionTopicId(args.topicId),\n nodeType: \"evidence\",\n canonicalText: evidenceText,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L2\",\n sourceType: \"verified\", // Human-scored sprint answer\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n kind: \"observation\",\n sourceQuestionId: args.questionNodeId,\n sprintConviction: args.conviction,\n rationale: args.rationale,\n origin: \"sprint_question_scoring\",\n },\n });\n\n // Mark the question with the evidence node ID (for idempotency)\n await ctx.db.patch(args.questionNodeId, {\n metadata: {\n ...qMeta,\n evidenceNodeId,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync for the evidence node\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: evidenceNodeId,\n operation: \"upsert\",\n });\n\n // Collect all belief IDs to link (primary + related)\n const allBeliefIds = new Set<string>();\n allBeliefIds.add(args.beliefId);\n for (const id of args.relatedBeliefIds) {\n allBeliefIds.add(id);\n }\n\n // Create INFORMS edges: Evidence → Belief(s)\n // Weight based on conviction: high conviction (>0.7) = supports, low (<0.3) = contradicts\n const weight =\n args.conviction >= 0.5 ? args.conviction : -(1 - args.conviction);\n\n // Helper: resolve belief ID to a canonical epistemic belief node.\n async function resolveBeliefNode(bId: string) {\n try {\n const beliefNodeId = readConvexId<\"epistemicNodes\">(bId);\n const node = beliefNodeId\n ? readBeliefNodeRow(await ctx.db.get(beliefNodeId))\n : null;\n if (node?.nodeType === \"belief\") {\n return node;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to resolve belief node\",\n {\n error: formatGraphPrimitiveError(error),\n beliefId: bId,\n }\n );\n return null;\n }\n return null;\n }\n\n for (const bId of allBeliefIds) {\n const beliefNode = await resolveBeliefNode(bId);\n if (!beliefNode) {\n continue;\n }\n\n const edgeGlobalId = generateGlobalId();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: globalId,\n toGlobalId: beliefNode.globalId,\n edgeType: \"informs\",\n weight,\n confidence: Math.abs(weight),\n context: `origin=sprint_question_scoring | relation=${weight >= 0 ? \"supports\" : \"contradicts\"} | sourceQuestionId=${String(args.questionNodeId)}`,\n createdBy: args.userId,\n topicId: edgeTopicId,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n }\n\n // Create DERIVED_FROM edge: Evidence → Question (answer is derived from question — provenance)\n const answersEdgeGlobalId = generateGlobalId();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: answersEdgeGlobalId,\n fromGlobalId: globalId,\n toGlobalId: questionNode.globalId,\n edgeType: \"derived_from\",\n weight: 1.0,\n confidence: 1.0,\n context: `origin=sprint_question_scoring | sourceQuestionId=${String(args.questionNodeId)}`,\n createdBy: args.userId,\n topicId: edgeTopicId,\n fromNodeType: \"evidence\",\n toNodeType: \"question\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n\n // Audit log\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: evidenceNodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: args.projectId,\n topicId: normalizeQuestionTopicId(args.topicId),\n newState: {\n text: evidenceText.slice(0, 200),\n kind: \"observation\",\n sourceType: \"verified\",\n origin: \"sprint_question_scoring\",\n linkedBeliefIds: [...allBeliefIds],\n },\n });\n\n await markProjectGraphDirty(\n ctx,\n args.projectId,\n normalizeQuestionTopicId(args.topicId)\n );\n\n return { evidenceNodeId };\n },\n});\n\n/**\n * Backfill: Create evidence nodes + INFORMS edges for all scored questions\n * that are missing them. Run once to fix existing sprint data.\n */\nexport const backfillScoredQuestionEvidence = internalMutation({\n args: {\n ...optionalScopeArgs,\n userId: v.string(),\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (\n ctx: MutationCtx,\n args: BackfillScoredQuestionEvidenceArgs\n ) => {\n const dryRun = args.dryRun ?? false;\n const scope = await resolveQuestionScopeOrNull(ctx, args);\n if (!scope) {\n return {\n dryRun,\n totalQuestions: 0,\n candidateCount: 0,\n scheduled: 0,\n skipped: 0,\n candidates: [],\n };\n }\n\n const allQuestions = (await getQuestionNodesForScope(ctx, scope))\n .map(readQuestionEvidenceNodeRow)\n .filter((node): node is QuestionEvidenceNodeRow => node !== null);\n\n // Filter to scored questions with answers that don't yet have evidence\n const candidates = allQuestions.filter((n) => {\n const meta = n.metadata;\n return (\n meta.convictionStage === \"scored\" &&\n readOptionalString(meta.answer) &&\n !meta.evidenceNodeId &&\n (readOptionalString(meta.linkedBeliefId) ||\n readOptionalString(meta.beliefId))\n );\n });\n\n if (dryRun) {\n return {\n dryRun: true,\n candidateCount: candidates.length,\n candidates: candidates.map((n) => {\n const meta = n.metadata;\n return {\n questionId: n._id,\n questionText: n.canonicalText?.slice(0, 80),\n beliefId:\n readOptionalString(meta.linkedBeliefId) ??\n readOptionalString(meta.beliefId),\n conviction: readFiniteNumber(meta.conviction),\n hasAnswer: readOptionalString(meta.answer) !== undefined,\n };\n }),\n };\n }\n\n let created = 0;\n let skipped = 0;\n\n for (const questionNode of candidates) {\n const meta = questionNode.metadata;\n const beliefId =\n readOptionalString(meta.linkedBeliefId) ??\n readOptionalString(meta.beliefId);\n const answerText = readOptionalString(meta.answer);\n const conviction = readFiniteNumber(meta.conviction) ?? 0.5;\n\n if (!(beliefId && answerText)) {\n skipped++;\n continue;\n }\n\n await ctx.scheduler.runAfter(\n created * 100, // Stagger to avoid overwhelming Neo4j\n internal.epistemicQuestions.createEvidenceFromScoredQuestion,\n {\n questionNodeId: questionNode._id,\n questionText: questionNode.canonicalText || \"\",\n answerText,\n beliefId,\n relatedBeliefIds: readStringArray(meta.relatedBeliefIds),\n conviction,\n rationale: readOptionalString(meta.convictionRationale) ?? \"\",\n projectId: scope.projectId,\n topicId: normalizeQuestionTopicId(scope.topicId),\n userId: args.userId,\n }\n );\n created++;\n }\n\n if (created > 0) {\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n normalizeQuestionTopicId(scope.topicId)\n );\n }\n\n return {\n dryRun: false,\n totalQuestions: allQuestions.length,\n candidateCount: candidates.length,\n scheduled: created,\n skipped,\n };\n },\n});\n\n// =============================================================================\n// SPRINT CLUSTER QUERIES\n// =============================================================================\n\n/**\n * Get ALL questions for a sprint cluster, with linked belief details.\n * This is the main query for the Questions phase UI.\n *\n * CLUSTER = Hypotheses + Conditionals ONLY (no raw beliefs!)\n */\n","// biome-ignore-all lint/style/useFilenamingConvention: Public ABI surface; rename requires a cross-package migration update.\n/**\n * Epistemic Questions API\n *\n * Clean API for managing questions in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces questions.ts for CREATE operations.\n *\n * Key differences from questions.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyQuestionId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx } from \"./convex\";\nimport { internal, mutation } from \"./convex\";\n// =============================================================================\n// HELPERS\nimport {\n markProjectGraphDirty,\n normalizeQuestionTopicId,\n} from \"./epistemicQuestions.helpers\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\ntype QuestionLifecycleStatus =\n | \"answered\"\n | \"closed\"\n | \"open\"\n | \"parked\"\n | \"researching\";\ntype QuestionAnswerStatus = \"ai_draft\" | \"final\" | \"user_draft\";\ntype QuestionPriority = \"high\" | \"low\" | \"medium\";\ntype RuntimePackInstallScope = \"tenant\" | \"workspace\";\n\ninterface UpdateStatusArgs {\n answer?: string;\n answerStatus?: QuestionAnswerStatus;\n nodeId?: Id<\"epistemicNodes\">;\n questionId?: Id<\"epistemicNodes\"> | string;\n runtimePackInstallScope?: RuntimePackInstallScope;\n runtimePackKey?: string;\n runtimeToolName?: string;\n status: QuestionLifecycleStatus;\n userId?: string;\n}\n\ninterface UpdatePriorityArgs {\n nodeId: Id<\"epistemicNodes\">;\n priority: QuestionPriority;\n userId: string;\n}\n\ninterface QuestionLifecycleNode {\n metadata: Record<string, unknown>;\n nodeType: string;\n projectId?: string;\n topicId?: string;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n const normalized = readOptionalString(value);\n return normalized ? (normalized as Id<TableName>) : null;\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 readQuestionLifecycleNode(\n value: unknown\n): QuestionLifecycleNode | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const nodeType = readOptionalString(record.nodeType);\n if (!nodeType) {\n return null;\n }\n\n const node: QuestionLifecycleNode = {\n metadata: readRecord(record.metadata) ?? {},\n nodeType,\n };\n const projectId = readOptionalString(record.projectId);\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 return node;\n}\n\nfunction requireQuestionLifecycleNode(value: unknown): QuestionLifecycleNode {\n const node = readQuestionLifecycleNode(value);\n if (node?.nodeType !== \"question\") {\n throw new Error(\"Question not found\");\n }\n return node;\n}\n\nfunction resolveLifecycleNodeId(args: UpdateStatusArgs): Id<\"epistemicNodes\"> {\n const nodeId =\n readConvexId<\"epistemicNodes\">(args.nodeId) ??\n readConvexId<\"epistemicNodes\">(args.questionId);\n if (!nodeId) {\n throw new Error(\"Missing nodeId/questionId\");\n }\n return nodeId;\n}\n\nexport const updateStatus = mutation({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n // Backward compatibility for older callers still sending questionId.\n questionId: v.optional(v.union(v.id(\"epistemicNodes\"), v.string())),\n status: v.union(\n v.literal(\"open\"),\n v.literal(\"researching\"),\n v.literal(\"answered\"),\n v.literal(\"parked\"),\n v.literal(\"closed\")\n ),\n userId: v.optional(v.string()),\n answer: v.optional(v.string()),\n answerStatus: v.optional(\n v.union(\n v.literal(\"ai_draft\"),\n v.literal(\"user_draft\"),\n v.literal(\"final\")\n )\n ),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateStatusArgs) => {\n const resolvedNodeId = resolveLifecycleNodeId(args);\n const resolvedUserId = args.userId || (await getCurrentUserId(ctx));\n if (!resolvedUserId) {\n throw new Error(\"Not authenticated\");\n }\n\n const node = requireQuestionLifecycleNode(await ctx.db.get(resolvedNodeId));\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: await resolveNodeScopeForWorkspaceIsolation(ctx, node),\n mutationName: \"epistemicQuestions.updateStatus\",\n });\n\n const now = Date.now();\n const metadata = node.metadata;\n const previousStatus = metadata.questionStatus || \"open\";\n\n await ctx.db.patch(resolvedNodeId, {\n updatedAt: now,\n metadata: {\n ...metadata,\n questionStatus: args.status,\n answer: args.answer || metadata.answer,\n answerStatus: args.answerStatus || metadata.answerStatus,\n answeredAt: args.status === \"answered\" ? now : metadata.answeredAt,\n answeredBy:\n args.status === \"answered\" ? resolvedUserId : metadata.answeredBy,\n },\n });\n\n // If answered with answer text, schedule answer node creation\n if (args.status === \"answered\" && args.answer) {\n await ctx.scheduler.runAfter(\n 0,\n internal.epistemicAnswers.createInternal,\n {\n projectId: node.projectId,\n topicId: normalizeQuestionTopicId(node.topicId),\n questionNodeId: resolvedNodeId,\n answerText: args.answer,\n answerSource: \"human\",\n userId: resolvedUserId,\n }\n );\n }\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: resolvedNodeId,\n changeType: \"status_changed\",\n changedAt: now,\n changedBy: resolvedUserId,\n isAgent: false,\n projectId: node.projectId,\n previousState: { status: previousStatus },\n newState: { status: args.status },\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: resolvedNodeId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { nodeId: resolvedNodeId, previousStatus, newStatus: args.status };\n },\n});\n\n/**\n * Update question priority\n *\n * Note: Convex mutations are serialized per-document, so concurrent updates\n * to the same question will be processed sequentially, not in parallel.\n */\nexport const updatePriority = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n priority: v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\")),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdatePriorityArgs) => {\n const node = requireQuestionLifecycleNode(await ctx.db.get(args.nodeId));\n\n const now = Date.now();\n const metadata = node.metadata;\n const previousPriority = metadata.priority || \"medium\";\n\n await ctx.db.patch(args.nodeId, {\n updatedAt: now,\n metadata: {\n ...metadata,\n priority: args.priority,\n },\n });\n\n // Log to audit (was missing)\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: args.nodeId,\n changeType: \"priority_changed\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: { priority: previousPriority },\n newState: { priority: args.priority },\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { nodeId: args.nodeId };\n },\n});\n\n// =============================================================================\n// QUERIES\n// =============================================================================\n\n/**\n * Get a question by ID\n */\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Epistemic Questions API\n *\n * Clean API for managing questions in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces questions.ts for CREATE operations.\n *\n * Key differences from questions.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyQuestionId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { checkScopeAccess } from \"@lucern/access-control/access\";\nimport {\n canAudienceClassAccess,\n classFromAudienceKey,\n normalizeAudienceKey,\n} 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\";\n// =============================================================================\n// HELPERS\nimport {\n clampQuestionLimit,\n flattenInternalQuestionNode,\n flattenQuestionNode,\n getQuestionNodesForScope,\n isActiveQuestionNode,\n MAX_QUESTION_PAGE_SIZE,\n matchesRequestedQuestionStatus,\n normalizeCategory,\n type QuestionNodeDoc,\n questionMatchesScope,\n resolveQuestionScopeId,\n resolveQuestionScopeOrNull,\n} from \"./epistemicQuestions.helpers\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport { nodeMatchesWorkspaceReasoningScope } from \"./workspaceIsolation\";\n\ninterface QuestionScopeArgs {\n projectId?: string;\n topicId?: string;\n}\n\ninterface GetByIdArgs {\n nodeId?: Id<\"epistemicNodes\">;\n questionId?: string;\n}\n\ninterface ScopedQuestionQueryArgs extends QuestionScopeArgs {\n limit?: number;\n status?: string;\n userId?: string;\n}\n\ninterface TopicQuestionQueryArgs {\n limit?: number;\n status?: string;\n topicId: string;\n userId?: string;\n}\n\ninterface CategoryQuestionQueryArgs extends QuestionScopeArgs {\n category: string;\n}\n\ninterface GetForBeliefArgs {\n beliefNodeId: Id<\"epistemicNodes\">;\n}\n\ninterface InternalScopedQuestionQueryArgs extends QuestionScopeArgs {\n audienceMode?: string;\n limit?: number;\n status?: string;\n}\n\ninterface InternalTopicQuestionQueryArgs {\n audienceMode?: string;\n limit?: number;\n status?: string;\n topicId: string;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n const normalized = readOptionalString(value);\n return normalized ? (normalized as Id<TableName>) : null;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readEdgeQuestionEndpoint(\n edge: unknown,\n endpoint: \"fromNodeId\" | \"toNodeId\"\n): Id<\"epistemicNodes\"> | null {\n return readConvexId<\"epistemicNodes\">(readRecord(edge)[endpoint]);\n}\n\nfunction isQuestionNodeDoc(value: unknown): value is QuestionNodeDoc {\n return readRecord(value).nodeType === \"question\";\n}\n\nexport const getById = query({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n questionId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetByIdArgs) => {\n const id = args.nodeId ?? readConvexId<\"epistemicNodes\">(args.questionId);\n if (!id) {\n return null;\n }\n const node = await ctx.db.get(id);\n if (!isQuestionNodeDoc(node)) {\n return null;\n }\n return flattenQuestionNode(node);\n },\n});\n\n/**\n * Get all questions for a project\n */\nexport const getByProject = query({\n args: {\n ...optionalScopeArgs,\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: QueryCtx, args: ScopedQuestionQueryArgs) => {\n const scope = await resolveQuestionScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n\n const pageSize = clampQuestionLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_QUESTION_PAGE_SIZE);\n\n if (args.userId) {\n const scopeId = resolveQuestionScopeId(scope);\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 workspaceScopedNodes = await getQuestionNodesForScope(ctx, scope, {\n scanLimit,\n });\n\n const requestedStatus = args.status;\n const scopedNodes = requestedStatus\n ? workspaceScopedNodes.filter((node) =>\n matchesRequestedQuestionStatus(node, requestedStatus)\n )\n : workspaceScopedNodes.filter(isActiveQuestionNode);\n\n return scopedNodes.map(flattenQuestionNode).slice(0, pageSize);\n },\n});\n\n/**\n * Get all questions for a topic.\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: QueryCtx, args: TopicQuestionQueryArgs) => {\n const pageSize = clampQuestionLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_QUESTION_PAGE_SIZE);\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n });\n const scopedNodes = await getQuestionNodesForScope(ctx, scope, {\n scanLimit,\n });\n\n const requestedStatus = args.status;\n const filteredNodes = requestedStatus\n ? scopedNodes.filter((node) =>\n matchesRequestedQuestionStatus(node, requestedStatus)\n )\n : scopedNodes.filter(isActiveQuestionNode);\n\n return filteredNodes.map(flattenQuestionNode).slice(0, pageSize);\n },\n});\n\n/**\n * Get questions by category/pillar\n */\nexport const getByCategory = query({\n args: {\n ...optionalScopeArgs,\n category: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: CategoryQuestionQueryArgs) => {\n const scope = await resolveQuestionScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n\n const nodes = await getQuestionNodesForScope(ctx, scope);\n\n return nodes.filter((n) => {\n const metadata = (n.metadata || {}) as Record<string, unknown>;\n return (\n questionMatchesScope(n, scope) &&\n isActiveQuestionNode(n) &&\n metadata.category === normalizeCategory(args.category)\n );\n });\n },\n});\n\n/**\n * Get questions linked to a specific belief\n */\nexport const getForBelief = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetForBeliefArgs) => {\n const [canonicalEdges, legacyEdges] = await Promise.all([\n ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", args.beliefNodeId).eq(\"edgeType\", \"tests\")\n )\n .collect(),\n ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_type\", (q) =>\n q.eq(\"fromNodeId\", args.beliefNodeId).eq(\"edgeType\", \"tests\")\n )\n .collect(),\n ]);\n\n const questionNodeIds = new Set<Id<\"epistemicNodes\">>();\n for (const edge of canonicalEdges) {\n const questionId = readEdgeQuestionEndpoint(edge, \"fromNodeId\");\n if (questionId) {\n questionNodeIds.add(questionId);\n }\n }\n for (const edge of legacyEdges) {\n const questionId = readEdgeQuestionEndpoint(edge, \"toNodeId\");\n if (questionId) {\n questionNodeIds.add(questionId);\n }\n }\n\n const questions = await Promise.all(\n [...questionNodeIds].map((id) => ctx.db.get(id))\n );\n\n return questions.filter(\n (q): q is QuestionNodeDoc =>\n isQuestionNodeDoc(q) && isActiveQuestionNode(q)\n );\n },\n});\n\n/**\n * Legacy note: question test edges are canonicalized as question -> belief.\n * The fallback above reads old belief -> question rows until historical mirrors\n * are backfilled or deleted.\n */\n\n// =============================================================================\n// INTERNAL QUERIES (for other Convex modules)\n// =============================================================================\n\n/**\n * Internal query to get questions for a project\n */\nexport const internalGetByProject = internalQuery({\n args: {\n ...optionalScopeArgs,\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: QueryCtx, args: InternalScopedQuestionQueryArgs) => {\n const pageSize = clampQuestionLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_QUESTION_PAGE_SIZE);\n const audienceMode = args.audienceMode ?? \"internal\";\n const scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n const projectScopeId = resolveQuestionScopeId(scope);\n if (!projectScopeId) {\n return [];\n }\n const project = await resolveGraphPrimitivesAppResolvers(ctx).getProject(\n ctx,\n projectScopeId\n );\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: project?.tenantId,\n workspaceId: project?.workspaceId,\n });\n const audienceClassByKey = new Map(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ])\n );\n const resolveAudienceClass = (\n audienceKey: string | undefined | null,\n fallback: \"public\" | \"internal\"\n ) => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return audienceClassByKey.get(key) ?? classFromAudienceKey(key, fallback);\n };\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const nodes = await getQuestionNodesForScope(ctx, scope, { scanLimit });\n const workspaceScopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: project?.tenantId,\n workspaceId: project?.workspaceId,\n })\n );\n\n const visibleNodes = workspaceScopedNodes.filter((node) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(node.audienceLabel, \"internal\")\n )\n );\n\n const requestedStatus = args.status;\n const scopedNodes = requestedStatus\n ? visibleNodes.filter((node) =>\n matchesRequestedQuestionStatus(node, requestedStatus)\n )\n : visibleNodes.filter(isActiveQuestionNode);\n\n // Map to flattened format for internal callers\n return scopedNodes.slice(0, pageSize).map(flattenInternalQuestionNode);\n },\n});\n\n/**\n * Internal query to get questions for a topic.\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: QueryCtx, args: InternalTopicQuestionQueryArgs) => {\n const pageSize = clampQuestionLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_QUESTION_PAGE_SIZE);\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 audienceClassByKey = new Map(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ])\n );\n const resolveAudienceClass = (\n audienceKey: string | undefined | null,\n fallback: \"public\" | \"internal\"\n ) => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return audienceClassByKey.get(key) ?? classFromAudienceKey(key, fallback);\n };\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const nodes = await getQuestionNodesForScope(ctx, scope, { scanLimit });\n const workspaceScopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n })\n );\n\n const visibleNodes = workspaceScopedNodes.filter((node) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(node.audienceLabel, \"internal\")\n )\n );\n\n const requestedStatus = args.status;\n const scopedNodes = requestedStatus\n ? visibleNodes.filter((node) =>\n matchesRequestedQuestionStatus(node, requestedStatus)\n )\n : visibleNodes.filter(isActiveQuestionNode);\n\n return scopedNodes.slice(0, pageSize).map(flattenInternalQuestionNode);\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport { resolveTopicProjectScope } from \"./topicScope\";\n\ntype UnknownRecord = Record<string, unknown>;\n\ninterface WorkflowBridgeQueryScope {\n eq(field: string, value: unknown): WorkflowBridgeQueryScope;\n}\n\ninterface WorkflowBridgeQuery<T> {\n collect(): Promise<T[]>;\n filter(\n predicate: (query: WorkflowBridgeQueryScope) => unknown\n ): WorkflowBridgeQuery<T>;\n first(): Promise<T | null>;\n order(direction: \"asc\" | \"desc\"): WorkflowBridgeQuery<T>;\n withIndex(\n indexName: string,\n range?: (q: WorkflowBridgeQueryScope) => unknown\n ): WorkflowBridgeQuery<T>;\n}\n\ninterface WorkflowBridgeContext {\n db: {\n get(id: string): Promise<unknown | null>;\n query(tableName: string): WorkflowBridgeQuery<unknown>;\n };\n}\n\nexport interface WorkflowLikeDoc {\n _id?: string;\n metadata?: Record<string, unknown>;\n projectId?: string;\n topicId?: string;\n [key: string]: unknown;\n}\n\nexport interface WorkflowBridgeResolution {\n inputId: string | null;\n projectId?: string;\n sprint: WorkflowLikeDoc | null;\n sprintId: string | null;\n topicId?: string;\n worktree: WorkflowLikeDoc | null;\n worktreeId: string | null;\n}\n\nexport function isLegacySprintDoc(doc: unknown): doc is WorkflowLikeDoc {\n if (!doc || typeof doc !== \"object\") {\n return false;\n }\n\n const metadata =\n typeof (doc as UnknownRecord).metadata === \"object\" &&\n (doc as UnknownRecord).metadata !== null\n ? ((doc as UnknownRecord).metadata as UnknownRecord)\n : undefined;\n\n if (metadata?.pairedSprintId) {\n return false;\n }\n\n return (\n \"sprintScope\" in doc ||\n \"targetPillar\" in doc ||\n \"pillarThesis\" in doc ||\n \"synthesisState\" in doc ||\n (\"projectId\" in doc && !(\"worktreeScope\" in doc))\n );\n}\n\nexport function isWorktreeDoc(doc: unknown): doc is WorkflowLikeDoc {\n if (!doc || typeof doc !== \"object\") {\n return false;\n }\n\n return (\n \"worktreeScope\" in doc ||\n \"targetBranch\" in doc ||\n \"campaign\" in doc ||\n \"executionBand\" in doc ||\n \"proofArtifacts\" in doc\n );\n}\n\nexport function getPairedSprintId(doc: WorkflowLikeDoc | null | undefined) {\n const pairedSprintId = doc?.metadata?.pairedSprintId;\n return typeof pairedSprintId === \"string\" && pairedSprintId.trim().length > 0\n ? pairedSprintId\n : null;\n}\n\nfunction getStringField(\n doc: WorkflowLikeDoc | null | undefined,\n field: \"topicId\" | \"projectId\"\n) {\n const value = doc?.[field];\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nasync function findPairedWorktreeForSprint(\n ctx: WorkflowBridgeContext,\n sprint: WorkflowLikeDoc\n): Promise<WorkflowLikeDoc | null> {\n const sprintId =\n typeof sprint._id === \"string\" && sprint._id.length > 0 ? sprint._id : null;\n if (!sprintId || typeof ctx.db.query !== \"function\") {\n return null;\n }\n\n let topicId = getStringField(sprint, \"topicId\");\n if (!topicId) {\n try {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: getStringField(sprint, \"topicId\"),\n projectId: getStringField(sprint, \"projectId\"),\n });\n topicId = scope.topicId;\n } catch {\n topicId = undefined;\n }\n }\n\n if (!topicId) {\n return null;\n }\n\n const worktrees = await ctx.db\n .query(\"worktrees\")\n .withIndex(\"by_topicId\", (q) => q.eq(\"topicId\", topicId))\n .collect();\n\n return (\n worktrees.find(\n (worktree): worktree is WorkflowLikeDoc =>\n isWorktreeDoc(worktree) &&\n String(worktree.metadata?.pairedSprintId || \"\") === sprintId\n ) ?? null\n );\n}\n\nexport async function resolveWorkflowBridgeDoc(\n ctx: WorkflowBridgeContext,\n workflowId: string | null | undefined\n): Promise<WorkflowBridgeResolution> {\n const empty: WorkflowBridgeResolution = {\n inputId: workflowId ?? null,\n sprint: null,\n worktree: null,\n sprintId: null,\n worktreeId: null,\n };\n\n if (!workflowId) {\n return empty;\n }\n\n let doc: unknown;\n try {\n doc = await ctx.db.get(workflowId);\n } catch {\n return empty;\n }\n\n if (!doc || typeof doc !== \"object\") {\n return empty;\n }\n\n if (isLegacySprintDoc(doc)) {\n return await resolveLegacySprintBridge(ctx, empty, doc, workflowId);\n }\n\n return await resolveWorktreeBridge(ctx, empty, doc, workflowId);\n}\n\nasync function resolveLegacySprintBridge(\n ctx: WorkflowBridgeContext,\n empty: WorkflowBridgeResolution,\n sprint: WorkflowLikeDoc,\n workflowId: string\n): Promise<WorkflowBridgeResolution> {\n const worktree = await findPairedWorktreeForSprint(ctx, sprint);\n return {\n ...empty,\n sprint,\n worktree,\n sprintId: getDocumentIdOrFallback(sprint, workflowId),\n worktreeId: getDocumentIdOrFallback(worktree, null),\n topicId:\n getStringField(worktree, \"topicId\") ?? getStringField(sprint, \"topicId\"),\n projectId:\n getStringField(sprint, \"projectId\") ??\n getStringField(worktree, \"projectId\"),\n };\n}\n\nasync function resolveWorktreeBridge(\n ctx: WorkflowBridgeContext,\n empty: WorkflowBridgeResolution,\n doc: object,\n workflowId: string\n): Promise<WorkflowBridgeResolution> {\n const worktree = doc as WorkflowLikeDoc;\n const pairedSprintId = getPairedSprintId(worktree);\n const sprint = await readPairedSprint(ctx, pairedSprintId);\n\n return {\n ...empty,\n worktree,\n sprint,\n worktreeId: getDocumentIdOrFallback(worktree, workflowId),\n sprintId: getDocumentIdOrFallback(sprint, pairedSprintId),\n topicId:\n getStringField(worktree, \"topicId\") ?? getStringField(sprint, \"topicId\"),\n projectId:\n getStringField(sprint, \"projectId\") ??\n getStringField(worktree, \"projectId\"),\n };\n}\n\nasync function readPairedSprint(\n ctx: WorkflowBridgeContext,\n pairedSprintId: string | null\n): Promise<WorkflowLikeDoc | null> {\n if (!pairedSprintId) {\n return null;\n }\n try {\n const paired = await ctx.db.get(pairedSprintId);\n return isLegacySprintDoc(paired) ? paired : null;\n } catch {\n return null;\n }\n}\n\nfunction getDocumentIdOrFallback(\n doc: WorkflowLikeDoc | null | undefined,\n fallback: string | null\n): string | null {\n return typeof doc?._id === \"string\" && doc._id.length > 0\n ? doc._id\n : fallback;\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public ABI surface; rename requires a cross-package migration update.\n/**\n * Epistemic Questions API\n *\n * Clean API for managing questions in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces questions.ts for CREATE operations.\n *\n * Key differences from questions.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyQuestionId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { checkScopeAccess } from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, QueryCtx } from \"./convex\";\nimport { query } from \"./convex\";\nimport {\n debugGraphPrimitiveFallback,\n formatGraphPrimitiveError,\n} from \"./debug\";\n// =============================================================================\n// HELPERS\nimport {\n getQuestionEdgesForScope,\n getQuestionNodesForScope,\n questionMatchesWorkflowLink,\n resolveLinkedWorktreeId,\n resolveQuestionScopeId,\n resolveQuestionScopeOrNull,\n} from \"./epistemicQuestions.helpers\";\nimport { resolveWorkflowBridgeDoc } from \"./workflowBridge\";\n\ntype UnknownRecord = Record<string, unknown>;\ninterface EdgeRef {\n fromNodeId?: string;\n toNodeId?: string;\n}\n\ninterface GetQuestionsForWorkflowArgs {\n sprintId?: string;\n userId: string;\n worktreeId?: string;\n}\n\ninterface QuestionNodeRow {\n _creationTime: number;\n _id: Id<\"epistemicNodes\">;\n canonicalText?: string;\n content?: string;\n createdAt?: number;\n createdBy?: string;\n metadata: UnknownRecord;\n nodeType?: string;\n projectId?: string;\n questionType?: string;\n sourceType?: string;\n status?: string;\n text?: string;\n title?: string;\n topicId?: string;\n updatedAt?: number;\n}\n\ninterface QuestionEvidenceLinkRow {\n _creationTime: number;\n _id: Id<\"questionEvidenceLinks\">;\n createdAt: number;\n createdBy: string;\n helpsAnswer: boolean;\n insightId: Id<\"epistemicNodes\">;\n questionId: Id<\"epistemicNodes\">;\n rationale: string;\n relevance: number;\n}\n\ninterface LinkedBeliefDetail {\n beliefId: string | Id<\"epistemicNodes\">;\n beliefText: string;\n isConditional: boolean;\n isHypothesis: boolean;\n isPrimaryTarget: boolean;\n isRaw: boolean;\n}\n\ninterface ClusterEnrichedQuestion {\n _creationTime: number;\n _id: Id<\"epistemicNodes\">;\n answer: string | null;\n beliefId: string | null;\n canonicalText?: string;\n category: string;\n conviction: number | null;\n convictionStage: string | null;\n isKeyQuestion: boolean;\n linkedBeliefs: (LinkedBeliefDetail | null)[];\n linkedWorktreeId: string | null;\n metadata: Record<string, unknown> | undefined;\n priority: string;\n projectId?: string;\n question?: string;\n questionType: string;\n relatedBeliefIds: string[];\n status: string;\n testLogic: string;\n testRationale: string | null;\n testType: string;\n topicId?: string | null;\n}\n\ninterface InConvictionQuestionEvidence {\n _id?: Id<\"questionEvidenceLinks\">;\n createdAt: number;\n createdBy: string;\n helpsAnswer: boolean;\n insightId: Id<\"epistemicNodes\">;\n insightSource: string;\n insightText: string;\n questionId: Id<\"epistemicNodes\">;\n rationale: string;\n relevance: number;\n}\n\ninterface InConvictionQuestion {\n _creationTime: number;\n _id: Id<\"epistemicNodes\">;\n answer: string | undefined;\n answerCompleteness: string | undefined;\n answerStatus: string | undefined;\n beliefId: string | null;\n canonicalText?: string;\n category: string;\n conviction: number | undefined;\n convictionAdvancedAt: number | undefined;\n convictionAdvancedBy: string | undefined;\n convictionRationale: string | undefined;\n convictionStage: string;\n convictionUpdatedAt: number | undefined;\n convictionUpdatedBy: string | undefined;\n createdAt?: number;\n createdBy?: string;\n evidence: InConvictionQuestionEvidence[];\n evidenceCount: number;\n importance: number | undefined;\n isKeyQuestion: boolean;\n linkedBeliefId: string | undefined;\n linkedWorktreeId: string | undefined;\n metadata?: Record<string, unknown> | null;\n priority: string;\n projectId?: string;\n question?: string;\n questionType: string;\n relatedBeliefIds: string[];\n status: string;\n testedBeliefs: (UnknownRecord | null)[];\n testType: string | undefined;\n updatedAt?: number;\n whatWeNeed: string | undefined;\n}\n\nfunction collectLinkedBeliefNodeIds(\n questionNodeId: Id<\"epistemicNodes\">,\n edges: EdgeRef[],\n currentMeta: UnknownRecord\n): string[] {\n const questionId = String(questionNodeId);\n const beliefNodeIds = new Set<string>();\n const primaryBeliefId = readOptionalString(currentMeta.linkedBeliefNodeId);\n if (primaryBeliefId) {\n beliefNodeIds.add(primaryBeliefId);\n }\n\n for (const edge of edges) {\n const fromNodeId = edge.fromNodeId ?? \"\";\n const toNodeId = edge.toNodeId ?? \"\";\n\n if (fromNodeId === questionId && toNodeId) {\n beliefNodeIds.add(toNodeId);\n }\n if (toNodeId === questionId && fromNodeId) {\n beliefNodeIds.add(fromNodeId);\n }\n }\n beliefNodeIds.delete(\"\");\n return Array.from(beliefNodeIds);\n}\n\nasync function collectClusterLinkedBeliefs(\n ctx: QueryCtx,\n linkedBeliefNodeIds: string[],\n clusterBeliefIds: Set<string>,\n hypothesisIds: Set<string>,\n rawBeliefIds: Set<string>\n): Promise<LinkedBeliefDetail[]> {\n const linkedBeliefs = await Promise.all(\n linkedBeliefNodeIds.map(async (beliefNodeId) => {\n const nodeId = readConvexId<\"epistemicNodes\">(beliefNodeId);\n const node = nodeId\n ? readQuestionNodeRow(await ctx.db.get(nodeId))\n : null;\n if (node?.nodeType !== \"belief\") {\n return null;\n }\n return {\n beliefId: node._id,\n beliefText: node.canonicalText ?? \"\",\n isHypothesis: hypothesisIds.has(beliefNodeId),\n isConditional:\n !(\n hypothesisIds.has(beliefNodeId) || rawBeliefIds.has(beliefNodeId)\n ) && clusterBeliefIds.has(beliefNodeId),\n isRaw: rawBeliefIds.has(beliefNodeId),\n isPrimaryTarget: hypothesisIds.has(beliefNodeId),\n };\n })\n );\n return linkedBeliefs.filter(\n (belief) => belief !== null\n ) as LinkedBeliefDetail[];\n}\n\nasync function enrichSprintClusterQuestion(\n ctx: QueryCtx,\n question: QuestionNodeRow,\n edges: EdgeRef[],\n hypothesisIds: Set<string>,\n rawBeliefIds: Set<string>,\n clusterBeliefIds: Set<string>\n): Promise<ClusterEnrichedQuestion> {\n const meta = question.metadata;\n const linkedBeliefNodeIds = collectLinkedBeliefNodeIds(\n question._id,\n edges,\n meta\n );\n const linkedBeliefs = await collectClusterLinkedBeliefs(\n ctx,\n linkedBeliefNodeIds,\n clusterBeliefIds,\n hypothesisIds,\n rawBeliefIds\n );\n\n const questionText = question.canonicalText;\n const payload: ClusterEnrichedQuestion = {\n _id: question._id,\n _creationTime: question._creationTime,\n questionType:\n question.questionType ??\n readOptionalString(meta.questionType) ??\n \"general\",\n category: readOptionalString(meta.category) ?? \"other\",\n priority: readOptionalString(meta.priority) ?? \"medium\",\n isKeyQuestion:\n typeof meta.isKeyQuestion === \"boolean\" ? meta.isKeyQuestion : false,\n testType: readOptionalString(meta.testType) ?? \"validates\",\n status: question.status ?? \"active\",\n testLogic: readOptionalString(meta.testType) ?? \"validates\",\n testRationale: readOptionalString(meta.rationale) ?? null,\n beliefId: readOptionalString(meta.linkedBeliefNodeId) ?? null,\n relatedBeliefIds: linkedBeliefNodeIds,\n // Conviction stage fields — needed by UI to show/hide action buttons\n convictionStage: readOptionalString(meta.convictionStage) ?? null,\n answer: readOptionalString(meta.answer) ?? null,\n conviction: readFiniteNumber(meta.conviction) ?? null,\n linkedWorktreeId: resolveLinkedWorktreeId(meta),\n linkedBeliefs,\n metadata: question.metadata,\n };\n if (question.projectId) {\n payload.projectId = question.projectId;\n }\n if (question.topicId) {\n payload.topicId = question.topicId;\n }\n if (questionText) {\n payload.canonicalText = questionText;\n payload.question = questionText; // legacy field name\n }\n return payload;\n}\n\nfunction collectSprintBeliefIds(\n sprintSynthesis: UnknownRecord,\n workflow: { worktree?: UnknownRecord | null; sprint?: UnknownRecord | null }\n): Set<string> {\n return new Set([\n ...toStringList(sprintSynthesis.synthesizedBeliefIds),\n ...(\n ((workflow.worktree?.targetBeliefIds as unknown[]) ||\n (workflow.sprint?.targetBeliefIds as unknown[]) ||\n []) as unknown[]\n ).map(String),\n ]);\n}\n\nfunction collectInConvictionQuestionBeliefIds(meta: UnknownRecord): string[] {\n const beliefIds = new Set<string>();\n const relatedIds = toStringList(meta.relatedBeliefIds);\n if (meta.linkedBeliefNodeId) {\n beliefIds.add(String(meta.linkedBeliefNodeId));\n }\n if (meta.linkedBeliefId) {\n beliefIds.add(String(meta.linkedBeliefId));\n }\n if (meta.beliefId) {\n beliefIds.add(String(meta.beliefId));\n }\n for (const beliefId of relatedIds) {\n beliefIds.add(String(beliefId));\n }\n return Array.from(beliefIds);\n}\n\nasync function collectQuestionEvidenceDetails(\n ctx: QueryCtx,\n q: QuestionNodeRow\n): Promise<InConvictionQuestionEvidence[]> {\n const evidenceLinks = await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (qb) => qb.eq(\"questionId\", q._id))\n .collect();\n\n const evidenceDetails: InConvictionQuestionEvidence[] = [];\n for (const rawLink of evidenceLinks) {\n const link = readQuestionEvidenceLinkRow(rawLink);\n if (!link) {\n continue;\n }\n const insight = readQuestionNodeRow(await ctx.db.get(link.insightId));\n evidenceDetails.push({\n ...link,\n insightText: getNodeText(insight),\n insightSource: getInsightSource(insight),\n });\n }\n return evidenceDetails;\n}\n\nasync function collectQuestionBeliefDetails(\n ctx: QueryCtx,\n beliefIds: string[]\n): Promise<UnknownRecord[]> {\n const beliefDetails = await Promise.all(\n beliefIds.map(async (beliefId) => {\n try {\n const nodeId = readConvexId<\"epistemicNodes\">(beliefId);\n const node = nodeId\n ? readQuestionNodeRow(await ctx.db.get(nodeId))\n : null;\n if (node && node.nodeType === \"belief\") {\n return {\n _id: node._id,\n belief: node.canonicalText ?? \"\",\n confidence: toRecord(node.metadata).confidence,\n pillar: readStringValue(toRecord(node.metadata), \"category\"),\n beliefType: node.status ?? \"active\",\n dependsOnCount: 0,\n cascadesToCount: 0,\n exclusiveWithCount: 0,\n };\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to hydrate linked belief\",\n {\n error: formatGraphPrimitiveError(error),\n beliefId,\n }\n );\n }\n return null;\n })\n );\n\n return beliefDetails.filter(Boolean) as UnknownRecord[];\n}\n\nfunction buildInConvictionQuestionPayload(\n question: QuestionNodeRow,\n meta: UnknownRecord,\n evidenceWithDetails: InConvictionQuestionEvidence[],\n testedBeliefs: UnknownRecord[]\n): InConvictionQuestion {\n const relatedBeliefIds = toStringList(meta.relatedBeliefIds);\n const convictionStage =\n readOptionalString(meta.convictionStage) ?? \"in_conviction\";\n const payload: InConvictionQuestion = {\n _id: question._id,\n _creationTime: question._creationTime,\n category: readOptionalString(meta.category) ?? \"other\",\n priority: readOptionalString(meta.priority) ?? \"medium\",\n status:\n readOptionalString(meta.questionStatus) ?? question.status ?? \"open\",\n questionType:\n question.questionType ??\n readOptionalString(meta.questionType) ??\n \"general\",\n testType: readOptionalString(meta.testType),\n importance: readFiniteNumber(meta.importance),\n isKeyQuestion:\n typeof meta.isKeyQuestion === \"boolean\" ? meta.isKeyQuestion : false,\n conviction: readFiniteNumber(meta.conviction),\n convictionStage,\n convictionRationale: readOptionalString(meta.convictionRationale),\n convictionAdvancedAt: readFiniteNumber(meta.convictionAdvancedAt),\n convictionAdvancedBy: readOptionalString(meta.convictionAdvancedBy),\n convictionUpdatedAt: readFiniteNumber(meta.convictionUpdatedAt),\n convictionUpdatedBy: readOptionalString(meta.convictionUpdatedBy),\n answer: readOptionalString(meta.answer),\n answerStatus: readOptionalString(meta.answerStatus),\n answerCompleteness: readOptionalString(meta.answerCompleteness),\n whatWeNeed: readOptionalString(meta.whatWeNeed),\n linkedWorktreeId: resolveLinkedWorktreeId(meta) || undefined,\n beliefId:\n readOptionalString(meta.linkedBeliefNodeId) ??\n readOptionalString(meta.beliefId) ??\n null,\n linkedBeliefId:\n readOptionalString(meta.linkedBeliefNodeId) ??\n readOptionalString(meta.linkedBeliefId),\n relatedBeliefIds,\n evidenceCount: evidenceWithDetails.length,\n evidence: evidenceWithDetails,\n testedBeliefs,\n metadata: question.metadata,\n };\n if (question.projectId) {\n payload.projectId = question.projectId;\n }\n if (question.canonicalText) {\n payload.question = question.canonicalText;\n payload.canonicalText = question.canonicalText;\n }\n if (question.createdAt !== undefined) {\n payload.createdAt = question.createdAt;\n }\n if (question.createdBy) {\n payload.createdBy = question.createdBy;\n }\n if (question.updatedAt !== undefined) {\n payload.updatedAt = question.updatedAt;\n }\n return payload;\n}\n\nfunction toRecord(value: unknown): UnknownRecord {\n if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n return value as UnknownRecord;\n }\n return {};\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n const normalized = readOptionalString(value);\n return normalized ? (normalized as Id<TableName>) : null;\n}\n\nfunction readFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readStringValue(\n source: UnknownRecord,\n key: string\n): string | undefined {\n const value = source[key];\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction toStringList(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readOptionalString(entry))\n .filter((entry): entry is string => entry !== undefined);\n}\n\nfunction readQuestionNodeRow(value: unknown): QuestionNodeRow | null {\n const record = toRecord(value);\n const id = readConvexId<\"epistemicNodes\">(record._id);\n const creationTime = readFiniteNumber(record._creationTime);\n if (!(id && creationTime !== undefined)) {\n return null;\n }\n\n const row: QuestionNodeRow = {\n _id: id,\n _creationTime: creationTime,\n metadata: toRecord(record.metadata),\n };\n const optionalStrings: Array<keyof QuestionNodeRow> = [\n \"canonicalText\",\n \"content\",\n \"createdBy\",\n \"nodeType\",\n \"projectId\",\n \"questionType\",\n \"sourceType\",\n \"status\",\n \"text\",\n \"title\",\n \"topicId\",\n ];\n for (const key of optionalStrings) {\n const value = readOptionalString(record[key]);\n if (value !== undefined) {\n row[key] = value as never;\n }\n }\n const createdAt = readFiniteNumber(record.createdAt);\n if (createdAt !== undefined) {\n row.createdAt = createdAt;\n }\n const updatedAt = readFiniteNumber(record.updatedAt);\n if (updatedAt !== undefined) {\n row.updatedAt = updatedAt;\n }\n return row;\n}\n\nfunction readQuestionEvidenceLinkRow(\n value: unknown\n): QuestionEvidenceLinkRow | null {\n const record = toRecord(value);\n const id = readConvexId<\"questionEvidenceLinks\">(record._id);\n const questionId = readConvexId<\"epistemicNodes\">(record.questionId);\n const insightId = readConvexId<\"epistemicNodes\">(record.insightId);\n const creationTime = readFiniteNumber(record._creationTime);\n if (!(id && questionId && insightId && creationTime !== undefined)) {\n return null;\n }\n\n return {\n _id: id,\n _creationTime: creationTime,\n createdAt: readFiniteNumber(record.createdAt) ?? creationTime,\n createdBy: readOptionalString(record.createdBy) ?? \"unknown\",\n helpsAnswer:\n typeof record.helpsAnswer === \"boolean\" ? record.helpsAnswer : true,\n insightId,\n questionId,\n rationale: readOptionalString(record.rationale) ?? \"\",\n relevance: readFiniteNumber(record.relevance) ?? 0,\n };\n}\n\nfunction readEdgeRef(value: unknown): EdgeRef | null {\n const record = toRecord(value);\n const fromNodeId = readOptionalString(record.fromNodeId);\n const toNodeId = readOptionalString(record.toNodeId);\n if (!(fromNodeId || toNodeId)) {\n return null;\n }\n return { fromNodeId, toNodeId };\n}\n\nfunction getNodeText(insight: QuestionNodeRow | null): string {\n if (!insight) {\n return \"\";\n }\n\n const metadata = toRecord(insight.metadata);\n const canonicalText = insight.canonicalText;\n const legacyText = insight.text;\n const contentText = insight.content;\n const titleText = insight.title;\n const snippetText = metadata.snippet;\n\n if (typeof canonicalText === \"string\" && canonicalText.trim()) {\n return canonicalText.trim();\n }\n if (typeof legacyText === \"string\" && legacyText.trim()) {\n return legacyText.trim();\n }\n if (typeof contentText === \"string\" && contentText.trim()) {\n return contentText.trim();\n }\n if (typeof titleText === \"string\" && titleText.trim()) {\n return titleText.trim();\n }\n return typeof snippetText === \"string\" ? snippetText.trim() : \"\";\n}\n\nfunction getInsightSource(insight: QuestionNodeRow | null): string {\n if (!insight) {\n return \"unknown\";\n }\n\n const sourceType = insight.sourceType;\n return typeof sourceType === \"string\" && sourceType.trim().length > 0\n ? sourceType\n : \"unknown\";\n}\n\nexport const getForSprintCluster = query({\n args: {\n sprintId: v.optional(v.string()),\n worktreeId: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetQuestionsForWorkflowArgs) => {\n const docId = args.sprintId || args.worktreeId;\n if (!docId) {\n return [];\n }\n const workflow = await resolveWorkflowBridgeDoc(ctx, docId);\n const scopeDoc = workflow.worktree ?? workflow.sprint;\n if (!scopeDoc) {\n return [];\n }\n const scope = await resolveQuestionScopeOrNull(ctx, {\n projectId: workflow.projectId,\n topicId: workflow.topicId,\n });\n const scopeId = scope ? resolveQuestionScopeId(scope) : undefined;\n if (!(scope && scopeId)) {\n return [];\n }\n\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n\n // Get hypothesis and raw belief IDs from sprint synthesis state\n const synthesisState = toRecord(scopeDoc.synthesisState);\n const hypothesisIds = new Set(\n toStringList(synthesisState.synthesizedBeliefIds)\n );\n const rawBeliefIds = new Set(\n toStringList(synthesisState.originalBeliefIds)\n );\n\n // Cluster = hypotheses + conditionals (exclude raw beliefs)\n const clusterBeliefIds = new Set<string>(hypothesisIds);\n\n // Find conditionals via edges connected to hypotheses\n const edges = (await getQuestionEdgesForScope(ctx, scope))\n .map(readEdgeRef)\n .filter((edge): edge is EdgeRef => edge !== null);\n\n for (const edge of edges) {\n const fromStr = String(edge.fromNodeId || \"\");\n const toStr = String(edge.toNodeId || \"\");\n\n if (hypothesisIds.has(fromStr) && !rawBeliefIds.has(toStr)) {\n clusterBeliefIds.add(toStr);\n }\n if (hypothesisIds.has(toStr) && !rawBeliefIds.has(fromStr)) {\n clusterBeliefIds.add(fromStr);\n }\n }\n\n // Get all question-type epistemicNodes in the project\n const questionNodes = (await getQuestionNodesForScope(ctx, scope))\n .map(readQuestionNodeRow)\n .filter(\n (question): question is QuestionNodeRow =>\n question?.nodeType === \"question\"\n );\n\n // Include questions explicitly linked to the sprint via targetQuestionIds\n const sprintQuestionIds = new Set([\n ...toStringList(workflow.worktree?.targetQuestionIds as unknown),\n ...toStringList(workflow.sprint?.targetQuestionIds as unknown),\n ]);\n\n // Filter to questions linked to cluster beliefs OR explicitly in sprint\n const clusterQuestions = questionNodes.filter((q) => {\n // Always include questions explicitly added to this sprint\n if (sprintQuestionIds.has(String(q._id))) {\n return true;\n }\n // Include questions linked to cluster beliefs via metadata\n const meta = q.metadata;\n const linkedId = readOptionalString(meta.linkedBeliefNodeId);\n if (linkedId && clusterBeliefIds.has(linkedId)) {\n return true;\n }\n // Also check edges connecting this question to cluster beliefs\n return edges.some(\n (e) =>\n (String(e.fromNodeId) === String(q._id) &&\n clusterBeliefIds.has(e.toNodeId ?? \"\")) ||\n (String(e.toNodeId) === String(q._id) &&\n clusterBeliefIds.has(e.fromNodeId ?? \"\"))\n );\n });\n\n // Enrich with linked belief details\n const enrichedQuestions = await Promise.all(\n clusterQuestions.map((q) =>\n enrichSprintClusterQuestion(\n ctx,\n q,\n edges,\n hypothesisIds,\n rawBeliefIds,\n clusterBeliefIds\n )\n )\n );\n\n // Dedupe by question ID\n const seen = new Set<string>();\n return enrichedQuestions.filter((q) => {\n if (seen.has(String(q._id))) {\n return false;\n }\n seen.add(String(q._id));\n return true;\n });\n },\n});\n\n// =============================================================================\n// PORTED FROM questions.ts — 15 functions migrated to epistemicNodes\n// =============================================================================\n\n/**\n * 1. getInConviction - Get questions in conviction stage for a sprint\n * Ported from questions.ts lines 1008-1157\n */\nexport const getInConviction = query({\n args: {\n sprintId: v.optional(v.string()),\n worktreeId: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetQuestionsForWorkflowArgs) => {\n const docId = args.sprintId || args.worktreeId;\n if (!docId) {\n return [];\n }\n const workflow = await resolveWorkflowBridgeDoc(ctx, docId);\n const scopeDoc = workflow.worktree ?? workflow.sprint;\n if (!scopeDoc) {\n return [];\n }\n const scope = await resolveQuestionScopeOrNull(ctx, {\n projectId: workflow.projectId,\n topicId: workflow.topicId,\n });\n const scopeId = scope ? resolveQuestionScopeId(scope) : undefined;\n if (!(scope && scopeId)) {\n return [];\n }\n\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n\n const allQuestions = (await getQuestionNodesForScope(ctx, scope))\n .map(readQuestionNodeRow)\n .filter(\n (question): question is QuestionNodeRow =>\n question?.nodeType === \"question\"\n );\n\n // Filter to questions in conviction stages\n const convictionQuestions = allQuestions.filter((q) => {\n const meta = q.metadata;\n return (\n meta.convictionStage === \"in_conviction\" ||\n meta.convictionStage === \"scored\"\n );\n });\n\n // Get synthesized belief IDs from sprint\n const sprintSynthesis = toRecord(scopeDoc.synthesisState);\n const sprintBeliefIds = collectSprintBeliefIds(sprintSynthesis, workflow);\n\n // Filter to questions relevant to this sprint\n const sprintQuestions = convictionQuestions.filter((q) => {\n const meta = q.metadata;\n\n // Direct sprint link\n if (questionMatchesWorkflowLink(meta, workflow)) {\n return true;\n }\n\n // Linked to sprint beliefs via linkedBeliefNodeId\n if (\n meta.linkedBeliefNodeId &&\n sprintBeliefIds.has(String(meta.linkedBeliefNodeId))\n ) {\n return true;\n }\n if (\n meta.linkedBeliefId &&\n sprintBeliefIds.has(String(meta.linkedBeliefId))\n ) {\n return true;\n }\n if (meta.beliefId && sprintBeliefIds.has(String(meta.beliefId))) {\n return true;\n }\n\n // Linked via relatedBeliefIds\n const relatedIds = toStringList(meta.relatedBeliefIds);\n if (relatedIds.some((id) => sprintBeliefIds.has(String(id)))) {\n return true;\n }\n\n return false;\n });\n\n // Enrich with evidence and belief details\n const questionsWithDetails = await Promise.all(\n sprintQuestions.map(async (q) => {\n const meta = q.metadata;\n const [evidenceWithDetails, beliefIds] = await Promise.all([\n collectQuestionEvidenceDetails(ctx, q),\n Promise.resolve(collectInConvictionQuestionBeliefIds(meta)),\n ]);\n\n const beliefsWithDetails = await collectQuestionBeliefDetails(\n ctx,\n beliefIds\n );\n return buildInConvictionQuestionPayload(\n q,\n meta,\n evidenceWithDetails,\n beliefsWithDetails\n );\n })\n );\n\n // Sort: in_conviction first, then scored, then by importance\n return questionsWithDetails.sort((a, b) => {\n if (\n a.convictionStage === \"in_conviction\" &&\n b.convictionStage === \"scored\"\n ) {\n return -1;\n }\n if (\n a.convictionStage === \"scored\" &&\n b.convictionStage === \"in_conviction\"\n ) {\n return 1;\n }\n return (a.importance || 5) - (b.importance || 5);\n });\n },\n});\n\n/**\n * 2. advanceToConviction - Move a question to the conviction stage\n * Ported from questions.ts line 830\n */\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Epistemic Questions API\n *\n * Clean API for managing questions in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces questions.ts for CREATE operations.\n *\n * Key differences from questions.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyQuestionId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { checkScopeAccess } from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal, mutation, query } from \"./convex\";\nimport {\n debugGraphPrimitiveFallback,\n formatGraphPrimitiveError,\n} from \"./debug\";\nimport { insertEpistemicNode } from \"./epistemicInsert.js\";\n// =============================================================================\n// HELPERS\nimport {\n flattenInternalQuestionNode,\n generateContentHash,\n getQuestionNodesForScope,\n isActiveQuestionNode,\n markProjectGraphDirty,\n matchesRequestedQuestionStatus,\n normalizeQuestionTopicId,\n type QuestionNodeDoc,\n resolveLinkedWorktreeId,\n resolveQuestionScopeId,\n resolveQuestionScopeOrNull,\n} from \"./epistemicQuestions.helpers\";\nimport { generateGlobalId } from \"./globalId\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\ntype UnknownRecord = Record<string, unknown>;\ntype QuestionPriority = \"high\" | \"medium\" | \"low\";\ntype RuntimePackInstallScope = \"tenant\" | \"workspace\";\ntype TopicProjectScope = Awaited<ReturnType<typeof resolveTopicProjectScope>>;\n\ninterface QuestionScopeArgs {\n projectId?: string;\n topicId?: string;\n}\n\ninterface ListQuestionsArgs extends QuestionScopeArgs {\n status?: string;\n userId: string;\n}\n\ninterface GetByPillarArgs extends QuestionScopeArgs {\n includeAnswered?: boolean;\n pillar: string;\n userId: string;\n}\n\ninterface ConsolidateQuestionsArgs extends QuestionScopeArgs {\n consolidatedBy: string;\n consolidatedQuestion: string;\n consolidationRationale?: string;\n linkedBeliefIds?: string[];\n priority?: QuestionPriority;\n questionIds: string[];\n sprintId?: string;\n}\n\ninterface DeleteQuestionArgs {\n questionId: Id<\"epistemicNodes\">;\n runtimePackInstallScope?: RuntimePackInstallScope;\n runtimePackKey?: string;\n runtimeToolName?: string;\n userId: string;\n}\n\ninterface MarkAnsweredWithArtifactArgs {\n answer?: string;\n artifactId: Id<\"finalArtifacts\">;\n questionId: Id<\"epistemicNodes\">;\n userId: string;\n}\n\ninterface ClusterPositionsArgs extends QuestionScopeArgs {\n userId: string;\n}\n\ninterface FinalArtifactRow {\n _id: Id<\"finalArtifacts\">;\n projectId?: string;\n topicId?: string;\n}\n\nconst QUESTION_PRIORITY_ORDER: Record<QuestionPriority, number> = {\n high: 0,\n low: 2,\n medium: 1,\n};\n\nfunction readQuestionType(\n question: QuestionNodeDoc,\n metadata: UnknownRecord\n): string | undefined {\n if (typeof question.questionType === \"string\") {\n return question.questionType;\n }\n if (typeof metadata.questionType === \"string\") {\n return metadata.questionType;\n }\n return;\n}\n\nfunction toRecord(value: unknown): UnknownRecord {\n if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n return value as UnknownRecord;\n }\n return {};\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readStringValue(\n source: UnknownRecord,\n key: string\n): string | undefined {\n return readOptionalString(source[key]);\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n const normalized = readOptionalString(value);\n return normalized ? (normalized as Id<TableName>) : null;\n}\n\nfunction readStringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === \"string\")\n : [];\n}\n\nfunction isEpistemicNodeDoc(value: unknown): value is QuestionNodeDoc {\n return readConvexId<\"epistemicNodes\">(toRecord(value)._id) !== null;\n}\n\nfunction isQuestionNodeDoc(value: unknown): value is QuestionNodeDoc {\n return (\n isEpistemicNodeDoc(value) &&\n readStringValue(toRecord(value), \"nodeType\") === \"question\"\n );\n}\n\nfunction isBeliefNodeDoc(value: unknown): value is QuestionNodeDoc {\n return (\n isEpistemicNodeDoc(value) &&\n readStringValue(toRecord(value), \"nodeType\") === \"belief\"\n );\n}\n\nfunction readFinalArtifactRow(value: unknown): FinalArtifactRow | null {\n const record = toRecord(value);\n const id = readConvexId<\"finalArtifacts\">(record._id);\n if (!id) {\n return null;\n }\n const row: FinalArtifactRow = { _id: id };\n const projectId = readOptionalString(record.projectId);\n if (projectId !== undefined) {\n row.projectId = projectId;\n }\n const topicId = readOptionalString(record.topicId);\n if (topicId !== undefined) {\n row.topicId = topicId;\n }\n return row;\n}\n\nfunction readQuestionPriority(metadata: UnknownRecord): QuestionPriority {\n const value = metadata.priority;\n return value === \"high\" || value === \"medium\" || value === \"low\"\n ? value\n : \"medium\";\n}\n\nfunction loadQuestionNodes(\n ctx: MutationCtx,\n questionIds: string[]\n): Promise<Array<QuestionNodeDoc | null>> {\n return Promise.all(\n questionIds.map(async (questionId) => {\n try {\n const nodeId = readConvexId<\"epistemicNodes\">(questionId);\n return nodeId ? await ctx.db.get(nodeId) : null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to load original question\",\n {\n error: formatGraphPrimitiveError(error),\n questionId,\n }\n );\n return null;\n }\n })\n );\n}\n\nfunction questionBelongsToScope(\n question: QuestionNodeDoc,\n scope: TopicProjectScope\n): boolean {\n if (scope.topicId) {\n return (\n String(question.topicId) === String(scope.topicId) ||\n (!question.topicId &&\n scope.projectId !== undefined &&\n String(question.projectId) === String(scope.projectId))\n );\n }\n return String(question.projectId) === String(scope.projectId);\n}\n\nfunction consolidatedQuestionNodes(\n questions: Array<QuestionNodeDoc | null>,\n scope: TopicProjectScope,\n expectedCount: number\n): QuestionNodeDoc[] {\n const validQuestions = questions.filter(\n (question): question is QuestionNodeDoc =>\n isQuestionNodeDoc(question) && questionBelongsToScope(question, scope)\n );\n if (validQuestions.length !== expectedCount) {\n throw new Error(\n \"Some questions not found or do not belong to this topic scope\"\n );\n }\n return validQuestions;\n}\n\nfunction chooseConsolidatedPriority(\n explicitPriority: QuestionPriority | undefined,\n questions: QuestionNodeDoc[]\n): QuestionPriority {\n if (explicitPriority) {\n return explicitPriority;\n }\n\n let bestPriority: QuestionPriority = \"medium\";\n let bestScore = QUESTION_PRIORITY_ORDER.low;\n for (const question of questions) {\n const priority = readQuestionPriority(toRecord(question.metadata));\n const score = QUESTION_PRIORITY_ORDER[priority];\n if (score < bestScore) {\n bestPriority = priority;\n bestScore = score;\n }\n }\n return bestPriority;\n}\n\nfunction collectLinkedBeliefIds(\n questions: QuestionNodeDoc[],\n explicitBeliefIds: string[] | undefined\n): Set<string> {\n const linkedBeliefSet = new Set<string>();\n if (explicitBeliefIds) {\n for (const beliefId of explicitBeliefIds) {\n linkedBeliefSet.add(String(beliefId));\n }\n return linkedBeliefSet;\n }\n\n for (const question of questions) {\n const metadata = toRecord(question.metadata);\n const linkedBeliefNodeId = metadata.linkedBeliefNodeId;\n const linkedBeliefId = metadata.linkedBeliefId;\n if (linkedBeliefNodeId) {\n linkedBeliefSet.add(String(linkedBeliefNodeId));\n }\n if (linkedBeliefId) {\n linkedBeliefSet.add(String(linkedBeliefId));\n }\n }\n return linkedBeliefSet;\n}\n\nasync function readConsolidatedQuestionCategory(\n ctx: MutationCtx,\n linkedBeliefSet: Set<string>\n): Promise<string> {\n const firstBeliefId = Array.from(linkedBeliefSet)[0];\n if (!firstBeliefId) {\n return \"other\";\n }\n\n try {\n const beliefId = readConvexId<\"epistemicNodes\">(firstBeliefId);\n const belief = beliefId ? await ctx.db.get(beliefId) : null;\n const metadata = toRecord(belief?.metadata);\n return (\n readStringValue(metadata, \"category\") ??\n readStringValue(metadata, \"pillar\") ??\n \"other\"\n );\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to read first linked belief metadata\",\n {\n beliefId: firstBeliefId,\n error: formatGraphPrimitiveError(error),\n }\n );\n return \"other\";\n }\n}\n\nasync function archiveConsolidatedQuestions(\n ctx: MutationCtx,\n questionIds: string[],\n newNodeId: Id<\"epistemicNodes\">,\n now: number\n) {\n for (const questionId of questionIds) {\n try {\n const nodeId = readConvexId<\"epistemicNodes\">(questionId);\n if (!nodeId) {\n continue;\n }\n const node = await ctx.db.get(nodeId);\n if (!node) {\n continue;\n }\n const metadata = toRecord(node.metadata);\n await ctx.db.patch(nodeId, {\n metadata: {\n ...metadata,\n archivedAt: now,\n archivedReason: `Consolidated into question ${newNodeId}`,\n consolidatedIntoId: newNodeId,\n questionStatus: \"archived\",\n },\n status: \"archived\",\n updatedAt: now,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to archive linked question\",\n {\n error: formatGraphPrimitiveError(error),\n questionId,\n }\n );\n }\n }\n}\n\nexport const list = query({\n args: {\n ...optionalScopeArgs,\n userId: v.string(),\n status: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: ListQuestionsArgs) => {\n const scope = await resolveQuestionScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n\n const scopeId = resolveQuestionScopeId(scope);\n if (!scopeId) {\n return [];\n }\n\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n\n const nodes = await getQuestionNodesForScope(ctx, scope);\n\n const requestedStatus = args.status;\n const filtered = requestedStatus\n ? nodes.filter((node) =>\n matchesRequestedQuestionStatus(node, requestedStatus)\n )\n : nodes.filter(isActiveQuestionNode);\n\n // Map to a flattened format that callers expect\n return filtered.map(flattenInternalQuestionNode);\n },\n});\n\n/**\n * 11. getByPillar - Get questions by pillar/category with linked beliefs\n * Ported from questions.ts line 2526\n */\nexport const getByPillar = query({\n args: {\n ...optionalScopeArgs,\n pillar: v.string(),\n includeAnswered: v.optional(v.boolean()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetByPillarArgs) => {\n const scope = await resolveQuestionScopeOrNull(ctx, args);\n if (!scope) {\n return { questions: [], beliefs: [] };\n }\n\n const scopeId = resolveQuestionScopeId(scope);\n if (!scopeId) {\n return { questions: [], beliefs: [] };\n }\n\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return { questions: [], beliefs: [] };\n }\n\n // Get all belief nodes in this pillar\n const allBeliefNodes = (await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n )\n .collect()) as unknown[];\n\n const beliefs = allBeliefNodes.filter((n): n is QuestionNodeDoc => {\n if (!isBeliefNodeDoc(n)) {\n return false;\n }\n const meta = toRecord(n.metadata);\n return (\n (meta.category === args.pillar ||\n meta.topic === args.pillar ||\n meta.pillar === args.pillar) &&\n n.status !== \"archived\"\n );\n });\n\n if (beliefs.length === 0) {\n return { questions: [], beliefs: [] };\n }\n\n const beliefIds = new Set(beliefs.map((b) => String(b._id)));\n const beliefMap = new Map(\n beliefs.map((b) => [String(b._id), b.canonicalText || \"\"])\n );\n\n // Get all question nodes in the project\n const questionNodes = await getQuestionNodesForScope(ctx, scope);\n\n // Filter to questions linked to these beliefs\n const pillarQuestions = questionNodes.filter((q) => {\n const meta = toRecord(q.metadata);\n const linkedId =\n readOptionalString(meta.linkedBeliefNodeId) ??\n readOptionalString(meta.linkedBeliefId) ??\n readOptionalString(meta.beliefId);\n if (linkedId && beliefIds.has(linkedId)) {\n return true;\n }\n return readStringArray(meta.relatedBeliefIds).some((id) =>\n beliefIds.has(id)\n );\n });\n\n // Optionally filter out answered questions\n const includeAnswered = args.includeAnswered ?? true;\n const filteredQuestions = includeAnswered\n ? pillarQuestions\n : pillarQuestions.filter((q) => {\n const meta = toRecord(q.metadata);\n return meta.questionStatus !== \"answered\";\n });\n\n // Enrich with belief text\n const enrichedQuestions = filteredQuestions.map((q) => {\n const meta = toRecord(q.metadata);\n const linkedId =\n readOptionalString(meta.linkedBeliefNodeId) ??\n readOptionalString(meta.linkedBeliefId) ??\n readOptionalString(meta.beliefId);\n return {\n _id: q._id,\n _creationTime: q._creationTime,\n projectId: q.projectId,\n question: q.canonicalText,\n canonicalText: q.canonicalText,\n category: readOptionalString(meta.category) ?? \"other\",\n priority: readQuestionPriority(meta),\n status: readOptionalString(meta.questionStatus) ?? q.status ?? \"open\",\n questionType:\n q.questionType ?? readOptionalString(meta.questionType) ?? \"general\",\n beliefId: linkedId,\n beliefText: linkedId ? beliefMap.get(linkedId) : undefined,\n createdAt: q.createdAt,\n createdBy: q.createdBy,\n updatedAt: q.updatedAt,\n };\n });\n\n // Sort by priority then creation date\n const priorityOrder: Record<string, number> = {\n high: 0,\n medium: 1,\n low: 2,\n };\n enrichedQuestions.sort((a, b) => {\n const aPriority = priorityOrder[a.priority || \"medium\"] ?? 1;\n const bPriority = priorityOrder[b.priority || \"medium\"] ?? 1;\n if (aPriority !== bPriority) {\n return aPriority - bPriority;\n }\n return (b.createdAt ?? 0) - (a.createdAt ?? 0);\n });\n\n return {\n questions: enrichedQuestions,\n beliefs: beliefs.map((b) => ({\n _id: b._id,\n belief: b.canonicalText,\n pillar:\n readStringValue(toRecord(b.metadata), \"category\") ||\n readStringValue(toRecord(b.metadata), \"pillar\"),\n confidence: toRecord(b.metadata).confidence,\n })),\n };\n },\n});\n\n/**\n * 12. consolidate - Consolidate multiple questions into one\n * Ported from questions.ts line 2619\n */\nexport const consolidate = mutation({\n args: {\n ...optionalScopeArgs,\n questionIds: v.array(v.string()), // Accept string[] for backward compat\n consolidatedQuestion: v.string(),\n consolidationRationale: v.optional(v.string()),\n linkedBeliefIds: v.optional(v.array(v.string())),\n priority: v.optional(\n v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\"))\n ),\n sprintId: v.optional(v.string()),\n consolidatedBy: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: ConsolidateQuestionsArgs) => {\n const scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n const scopeId = resolveQuestionScopeId(scope);\n if (!scopeId) {\n return []; // graceful: topicId migration\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.consolidatedBy);\n if (!hasAccess) {\n throw new Error(\"Access denied\");\n }\n\n if (args.questionIds.length < 2) {\n throw new Error(\"At least 2 questions required for consolidation\");\n }\n\n const validQuestions = consolidatedQuestionNodes(\n await loadQuestionNodes(ctx, args.questionIds),\n scope,\n args.questionIds.length\n );\n const bestPriority = chooseConsolidatedPriority(\n args.priority,\n validQuestions\n );\n const linkedBeliefSet = collectLinkedBeliefIds(\n validQuestions,\n args.linkedBeliefIds\n );\n const category = await readConsolidatedQuestionCategory(\n ctx,\n linkedBeliefSet\n );\n\n // Create the new consolidated question in epistemicNodes\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.consolidatedQuestion);\n\n const newNodeId = await insertEpistemicNode(ctx, {\n globalId,\n projectId: scope.projectId,\n topicId: scope.topicId,\n nodeType: \"question\",\n canonicalText: args.consolidatedQuestion,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L3\",\n sourceType: \"human\",\n createdAt: now,\n updatedAt: now,\n createdBy: args.consolidatedBy,\n metadata: {\n category,\n priority: bestPriority,\n source: \"consolidated\",\n questionStatus: \"open\",\n linkedBeliefNodeId:\n linkedBeliefSet.size > 0 ? Array.from(linkedBeliefSet)[0] : undefined,\n consolidationMetadata: {\n originalQuestionIds: args.questionIds,\n rationale: args.consolidationRationale,\n consolidatedAt: now,\n consolidatedBy: args.consolidatedBy,\n },\n },\n });\n\n await archiveConsolidatedQuestions(ctx, args.questionIds, newNodeId, now);\n\n // Sprint linking removed — K-tier uses worktrees exclusively.\n // Worktree question targets are managed via worktree.targetQuestionIds.\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: newNodeId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n normalizeQuestionTopicId(scope.topicId)\n );\n\n return {\n newQuestionId: newNodeId,\n archivedCount: args.questionIds.length,\n linkedBeliefs: Array.from(linkedBeliefSet),\n };\n },\n});\n\n/**\n * 13. deleteQuestion - Archive a question (soft delete)\n * Ported from questions.ts line 1257\n */\nexport const deleteQuestion = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: DeleteQuestionArgs) => {\n const node = await ctx.db.get(args.questionId);\n if (!isQuestionNodeDoc(node)) {\n throw new Error(\"Question not found\");\n }\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: await resolveNodeScopeForWorkspaceIsolation(ctx, node),\n mutationName: \"epistemicQuestions.deleteQuestion\",\n });\n\n const now = Date.now();\n const meta = toRecord(node.metadata);\n\n // Soft-delete: set status to archived (never hard-delete)\n await ctx.db.patch(args.questionId, {\n status: \"archived\",\n updatedAt: now,\n metadata: {\n ...meta,\n questionStatus: \"archived\",\n archivedAt: now,\n archivedBy: args.userId,\n },\n });\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: args.questionId,\n changeType: \"status_changed\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: {\n status: meta.questionStatus || node.status,\n },\n newState: { status: \"archived\" },\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.questionId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n },\n});\n\n/**\n * 14. markAnsweredWithArtifact - Mark question as answered with a specific artifact\n * Ported from questions.ts line 1728\n */\nexport const markAnsweredWithArtifact = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n artifactId: v.id(\"finalArtifacts\"),\n answer: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: MarkAnsweredWithArtifactArgs) => {\n const node = await ctx.db.get(args.questionId);\n if (!isQuestionNodeDoc(node)) {\n throw new Error(\"Question not found\");\n }\n\n // Verify artifact exists\n const artifact = readFinalArtifactRow(\n await resolveGraphPrimitivesAppResolvers(ctx).getFinalArtifact(\n ctx,\n args.artifactId\n )\n );\n if (!artifact) {\n throw new Error(\"Artifact not found\");\n }\n\n // Verify project access\n const nodeTopicId = normalizeQuestionTopicId(node.topicId);\n const scopeId = resolveQuestionScopeId({\n ...(node.projectId ? { projectId: node.projectId } : {}),\n ...(nodeTopicId ? { topicId: nodeTopicId } : {}),\n });\n if (scopeId) {\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n throw new Error(\"Access denied\");\n }\n }\n\n const now = Date.now();\n const meta = toRecord(node.metadata);\n\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: {\n ...meta,\n questionStatus: \"answered\",\n answeringArtifactId: args.artifactId,\n answer: args.answer,\n answeredAt: now,\n answeredBy: args.userId,\n },\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.questionId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n },\n});\n\n/**\n * 15. getQuestionClusterPositions - Get cluster positions for visualization\n * Ported from questions.ts line 2788\n */\nexport const getQuestionClusterPositions = query({\n args: {\n ...optionalScopeArgs,\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: ClusterPositionsArgs) => {\n let scope: Awaited<ReturnType<typeof resolveTopicProjectScope>> | null =\n null;\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to resolve question cluster scope\",\n {\n error: formatGraphPrimitiveError(error),\n projectId: args.projectId,\n topicId: args.topicId,\n }\n );\n return {\n positions: {},\n counts: {\n cluster: 0,\n sprintLinked: 0,\n baseline: 0,\n total: 0,\n },\n };\n }\n\n // Get all question nodes for this project\n const questionNodes = (\n (await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"question\")\n )\n .collect()) as unknown[]\n ).filter(isQuestionNodeDoc);\n const activeQuestionNodes = questionNodes.filter(isActiveQuestionNode);\n\n // Build result mapping\n const positions: Record<string, \"cluster\" | \"sprint_linked\" | \"baseline\"> =\n {};\n let clusterCount = 0;\n let sprintLinkedCount = 0;\n let baselineCount = 0;\n\n for (const question of activeQuestionNodes) {\n const id = question._id.toString();\n const meta = toRecord(question.metadata);\n const questionType = readQuestionType(question, meta);\n\n // Questions with questionType === \"belief_test\" or testType set are cluster questions\n if (questionType === \"belief_test\" || meta.testType) {\n positions[id] = \"cluster\";\n clusterCount++;\n }\n // Questions linked to a sprint but not belief_test are sprint_linked\n else if (resolveLinkedWorktreeId(meta)) {\n positions[id] = \"sprint_linked\";\n sprintLinkedCount++;\n }\n // Everything else is baseline/raw\n else {\n positions[id] = \"baseline\";\n baselineCount++;\n }\n }\n\n return {\n positions,\n counts: {\n cluster: clusterCount,\n sprintLinked: sprintLinkedCount,\n baseline: baselineCount,\n total: activeQuestionNodes.length,\n },\n };\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Epistemic Sources API\n *\n * Invariants:\n * - Invariant 7: evidence is context-bound. Sources carry topic, author, and capture time.\n * - Invariant 8: no retroactive reinterpretation. Source identity fields stay immutable.\n * - Invariant 14: no silent state transitions. Every create/update is audited.\n * - Invariant 15: retrieval respects boundaries. Sources live at L1 terminal leaves.\n */\n\nimport {\n checkScopeAccess,\n requireScopeWriteAccess,\n} from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Doc, Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal, mutation, query } from \"./convex\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { insertEpistemicNode } from \"./epistemicInsert.js\";\nimport type { EpistemicDbReader } from \"./epistemicQuestions.helpers\";\nimport { generateGlobalId } from \"./globalId\";\nimport { resolveTopicProjectScope } from \"./topicScope\";\nimport { assertWorkspaceScopedEpistemicNodeScope } from \"./workspaceIsolation\";\n\nconst TRAILING_SLASHES_PATTERN = /\\/+$/;\nconst HASH_MODULUS = 2 ** 32;\nconst HASH_SIGN_BOUNDARY = 2 ** 31;\n\ntype SourceMutationCtx = MutationCtx;\ntype SourceNodeDoc = Doc<\"epistemicNodes\"> & {\n _id: Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n nodeType?: string;\n title?: string;\n topicId?: string;\n};\ntype SourceAuditChangeType = \"source_created\" | \"source_metadata_updated\";\n\ninterface SourceAuditRecord {\n changedAt: number;\n changedBy: string;\n changeType: SourceAuditChangeType;\n entityId: string;\n entityType: \"source\";\n isAgent: false;\n newState?: Record<string, unknown> | null;\n previousState?: Record<string, unknown> | null;\n topicId?: string;\n}\n\ninterface UpsertSourceArgs {\n capturedAt?: number;\n kind: string;\n metadata?: unknown;\n sha?: string;\n title?: string;\n topicId?: string;\n url?: string;\n userId: string;\n}\n\ninterface GetSourceByIdArgs {\n nodeId?: Id<\"epistemicNodes\">;\n sourceId?: string;\n}\n\ninterface SourceUrlQueryArgs {\n url: string;\n}\n\ninterface SourceShaQueryArgs {\n sha: string;\n}\n\ntype StructuredSourceError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\nfunction throwStructuredSourceError(args: {\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredSourceError;\n error.status = args.status;\n error.code = args.code;\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nfunction normalizeString(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 readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n const normalized = normalizeString(value);\n return normalized ? (normalized as Id<TableName>) : null;\n}\n\nfunction normalizeNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction isSourceNodeDoc(value: unknown): value is SourceNodeDoc {\n const record = asRecord(value);\n return (\n readConvexId<\"epistemicNodes\">(record._id) !== null &&\n normalizeString(record.nodeType) === \"source\"\n );\n}\n\nfunction normalizeMetadata(metadata: unknown): Record<string, unknown> {\n const record = asRecord(metadata);\n const { url: _ignoredUrl, contentSha: _ignoredSha, ...rest } = record;\n return rest;\n}\n\nfunction toSignedInt32(value: number): number {\n const normalized = ((value % HASH_MODULUS) + HASH_MODULUS) % HASH_MODULUS;\n return normalized >= HASH_SIGN_BOUNDARY\n ? normalized - HASH_MODULUS\n : normalized;\n}\n\nfunction generateSourceContentHash(identity: string): string {\n const content = `source:${identity.trim().toLowerCase()}`;\n let hash = 5381;\n for (let index = 0; index < content.length; index += 1) {\n hash = toSignedInt32(hash * 33 + content.charCodeAt(index));\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\nexport function normalizeSourceUrl(url: string): string {\n const trimmed = normalizeString(url);\n if (!trimmed) {\n throwStructuredSourceError({\n message: \"Source URL is required.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"source.url.valid\",\n suggestion: \"Provide an absolute URL with a valid protocol and host.\",\n });\n }\n\n let parsed: URL;\n try {\n parsed = new URL(trimmed);\n } catch {\n throwStructuredSourceError({\n message: `Invalid URL: ${trimmed}`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"source.url.valid\",\n suggestion: \"Provide an absolute URL with a valid protocol and host.\",\n details: { url: trimmed },\n });\n }\n\n const protocol = parsed.protocol.toLowerCase();\n const hostname = parsed.hostname.toLowerCase();\n const port = parsed.port ? `:${parsed.port}` : \"\";\n const pathname =\n parsed.pathname === \"/\"\n ? \"\"\n : parsed.pathname.replace(TRAILING_SLASHES_PATTERN, \"\");\n\n const sortedEntries = [...parsed.searchParams.entries()].sort(\n ([aKey, aValue], [bKey, bValue]) =>\n aKey === bKey ? aValue.localeCompare(bValue) : aKey.localeCompare(bKey)\n );\n const params = new URLSearchParams();\n for (const [key, value] of sortedEntries) {\n params.append(key, value);\n }\n const search = params.toString();\n\n return `${protocol}//${hostname}${port}${pathname}${\n search.length > 0 ? `?${search}` : \"\"\n }`;\n}\n\nasync function findSourceByIdentity(\n ctx: { db: EpistemicDbReader },\n args: { normalizedUrl?: string; sha?: string }\n): Promise<SourceNodeDoc | null> {\n const sourceNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q) => q.eq(\"nodeType\", \"source\"))\n .collect();\n\n let urlMatch: SourceNodeDoc | null = null;\n let shaMatch: SourceNodeDoc | null = null;\n\n for (const node of sourceNodes) {\n if (!isSourceNodeDoc(node)) {\n continue;\n }\n const metadata = asRecord(node.metadata);\n if (\n args.normalizedUrl &&\n normalizeString(metadata.url) === args.normalizedUrl &&\n !urlMatch\n ) {\n urlMatch = node;\n }\n if (\n args.sha &&\n normalizeString(metadata.contentSha) === args.sha &&\n !shaMatch\n ) {\n shaMatch = node;\n }\n if (urlMatch && (!args.sha || shaMatch)) {\n break;\n }\n }\n\n if (urlMatch && shaMatch && String(urlMatch._id) !== String(shaMatch._id)) {\n throwStructuredSourceError({\n message:\n \"Source identity conflict: URL and SHA resolve to different source nodes.\",\n status: 409,\n code: \"CONTENT_SHA_MISMATCH\",\n invariantCode: \"source.content_hash_immutable\",\n suggestion:\n \"Same source identity resolves to different records. Create a new source with a distinct URL or use fork semantics.\",\n details: {\n urlSourceId: String(urlMatch._id),\n shaSourceId: String(shaMatch._id),\n },\n });\n }\n\n return urlMatch ?? shaMatch;\n}\n\nfunction buildSourceMetadata(args: {\n existingMetadata?: Record<string, unknown>;\n normalizedUrl?: string;\n sha?: string;\n kind: string;\n capturedAt?: number;\n metadata?: Record<string, unknown>;\n}) {\n const existingMetadata = args.existingMetadata ?? {};\n const nextMetadata: Record<string, unknown> = {\n ...existingMetadata,\n kind: args.kind,\n ...args.metadata,\n };\n\n if (args.capturedAt !== undefined) {\n nextMetadata.capturedAt = args.capturedAt;\n }\n if (!Object.hasOwn(existingMetadata, \"url\") && args.normalizedUrl) {\n nextMetadata.url = args.normalizedUrl;\n } else if (Object.hasOwn(existingMetadata, \"url\")) {\n nextMetadata.url = existingMetadata.url;\n }\n if (!Object.hasOwn(existingMetadata, \"contentSha\") && args.sha) {\n nextMetadata.contentSha = args.sha;\n } else if (Object.hasOwn(existingMetadata, \"contentSha\")) {\n nextMetadata.contentSha = existingMetadata.contentSha;\n }\n\n return nextMetadata;\n}\n\nfunction readSourceIdentity(args: UpsertSourceArgs): {\n normalizedUrl?: string;\n sha?: string;\n} {\n const sourceUrl = normalizeString(args.url);\n const normalizedUrl = sourceUrl ? normalizeSourceUrl(sourceUrl) : undefined;\n const sha = normalizeString(args.sha);\n\n if (!(normalizedUrl || sha)) {\n throwStructuredSourceError({\n message: \"Source identity requires a URL or content SHA.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"source.identity.required\",\n suggestion: \"Provide url or sha.\",\n });\n }\n\n return { normalizedUrl, sha };\n}\n\nasync function syncSourceNodeToNeo4j(args: {\n ctx: SourceMutationCtx;\n nodeId: Id<\"epistemicNodes\">;\n}): Promise<void> {\n await args.ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n}\n\nasync function insertSourceAudit(\n ctx: SourceMutationCtx,\n audit: SourceAuditRecord\n): Promise<void> {\n await ctx.db.insert(\"epistemicAudit\", { ...audit });\n}\n\nasync function updateExistingSource(args: {\n capturedAt?: number;\n ctx: SourceMutationCtx;\n existing: SourceNodeDoc;\n kind: string;\n metadataPatch: Record<string, unknown>;\n now: number;\n sha?: string;\n title?: string;\n userId: string;\n}): Promise<SourceNodeDoc> {\n if (\n args.existing.topicId &&\n !(await checkScopeAccess(\n args.ctx,\n String(args.existing.topicId),\n args.userId\n ))\n ) {\n throwStructuredSourceError({\n message: \"Access denied to existing source scope.\",\n status: 403,\n code: \"FORBIDDEN\",\n invariantCode: \"policy.scope_required\",\n suggestion: \"Request access to the source topic scope and retry.\",\n details: { topicId: args.existing.topicId },\n });\n }\n\n const existingMetadata = asRecord(args.existing.metadata);\n const existingSha = normalizeString(existingMetadata.contentSha);\n if (args.sha && existingSha && existingSha !== args.sha) {\n throwStructuredSourceError({\n message: \"Same URL cannot be reused with a different content hash.\",\n status: 409,\n code: \"CONTENT_SHA_MISMATCH\",\n invariantCode: \"source.content_hash_immutable\",\n suggestion:\n \"Same URL, different content. Create a new source with a distinct URL or use fork semantics.\",\n details: {\n sourceId: String(args.existing._id),\n url: existingMetadata.url,\n existingSha,\n receivedSha: args.sha,\n },\n });\n }\n\n const nextMetadata = buildSourceMetadata({\n existingMetadata,\n kind: args.kind,\n capturedAt: normalizeNumber(args.capturedAt),\n metadata: args.metadataPatch,\n });\n\n const patch: Record<string, unknown> = {\n metadata: nextMetadata,\n updatedAt: args.now,\n };\n const title = normalizeString(args.title);\n if (title) {\n patch.title = title;\n patch.canonicalText = title;\n }\n\n await args.ctx.db.patch(args.existing._id, patch);\n await syncSourceNodeToNeo4j({\n ctx: args.ctx,\n nodeId: args.existing._id,\n });\n\n await insertSourceAudit(args.ctx, {\n entityType: \"source\",\n entityId: String(args.existing._id),\n changeType: \"source_metadata_updated\",\n changedAt: args.now,\n changedBy: args.userId,\n isAgent: false,\n topicId: args.existing.topicId ? String(args.existing.topicId) : undefined,\n previousState: {\n title: args.existing.title,\n metadata: existingMetadata,\n },\n newState: {\n title: title ?? args.existing.title,\n metadata: nextMetadata,\n },\n });\n\n const updated = await args.ctx.db.get(args.existing._id);\n return isSourceNodeDoc(updated) ? updated : args.existing;\n}\n\nasync function createSource(args: {\n capturedAt?: number;\n ctx: SourceMutationCtx;\n kind: string;\n metadataPatch: Record<string, unknown>;\n normalizedUrl?: string;\n now: number;\n sha?: string;\n title?: string;\n topicId?: string;\n userId: string;\n}): Promise<SourceNodeDoc | null> {\n if (!normalizeString(args.topicId)) {\n throwStructuredSourceError({\n message: \"topicId is required when creating a new source.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"source.context_required\",\n suggestion: \"Provide topicId when creating a new source node.\",\n });\n }\n\n const scope = await resolveTopicProjectScope(args.ctx, {\n topicId: args.topicId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"source\",\n mutationName: \"epistemicSources.upsertSource\",\n });\n if (scope.projectId) {\n await requireScopeWriteAccess(args.ctx, scope.projectId, args.userId);\n }\n\n const globalId = generateGlobalId();\n const title = normalizeString(args.title);\n const nextMetadata = buildSourceMetadata({\n normalizedUrl: args.normalizedUrl,\n sha: args.sha,\n kind: args.kind,\n capturedAt: normalizeNumber(args.capturedAt),\n metadata: args.metadataPatch,\n });\n const nodeId = await insertEpistemicNode(args.ctx, {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"source\",\n epistemicLayer: \"L1\",\n canonicalText: title ?? args.normalizedUrl ?? \"source\",\n contentHash:\n args.sha ??\n generateSourceContentHash(args.normalizedUrl ?? title ?? \"source\"),\n ...(title ? { title } : {}),\n status: \"active\",\n createdAt: args.now,\n updatedAt: args.now,\n createdBy: args.userId,\n metadata: nextMetadata,\n });\n\n await syncSourceNodeToNeo4j({\n ctx: args.ctx,\n nodeId,\n });\n\n await scheduleEmbeddingGeneration({\n ctx: args.ctx,\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId,\n createdBy: args.userId,\n nodeType: \"source\",\n text: sourceEmbeddingText({\n title,\n url: args.normalizedUrl,\n kind: args.kind,\n metadata: nextMetadata,\n }),\n });\n\n await insertSourceAudit(args.ctx, {\n entityType: \"source\",\n entityId: String(nodeId),\n changeType: \"source_created\",\n changedAt: args.now,\n changedBy: args.userId,\n isAgent: false,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n previousState: null,\n newState: {\n title,\n url: args.normalizedUrl,\n contentSha: args.sha,\n kind: args.kind,\n },\n });\n\n const created = await args.ctx.db.get(nodeId);\n return isSourceNodeDoc(created) ? created : null;\n}\n\nfunction sourceEmbeddingText(args: {\n title?: string;\n url?: string;\n kind: string;\n metadata: Record<string, unknown>;\n}) {\n const lines = [\n normalizeString(args.title),\n normalizeString(args.url),\n args.kind,\n normalizeString(args.metadata.sourceDescription),\n ].filter((value): value is string => Boolean(value));\n return lines.join(\"\\n\");\n}\n\nexport const upsertSource = mutation({\n args: {\n url: v.optional(v.string()),\n sha: v.optional(v.string()),\n kind: v.string(),\n title: v.optional(v.string()),\n capturedAt: v.optional(v.number()),\n metadata: v.optional(v.any()),\n topicId: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpsertSourceArgs) => {\n const { normalizedUrl, sha } = readSourceIdentity(args);\n const now = Date.now();\n const metadataPatch = normalizeMetadata(args.metadata);\n const existing = await findSourceByIdentity(ctx, { normalizedUrl, sha });\n\n if (existing) {\n return await updateExistingSource({\n ctx,\n existing,\n kind: args.kind,\n capturedAt: args.capturedAt,\n metadataPatch,\n now,\n sha,\n title: args.title,\n userId: args.userId,\n });\n }\n\n return await createSource({\n ctx,\n normalizedUrl,\n sha,\n kind: args.kind,\n capturedAt: args.capturedAt,\n metadataPatch,\n now,\n title: args.title,\n topicId: args.topicId,\n userId: args.userId,\n });\n },\n});\n\nexport const getById = query({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n sourceId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetSourceByIdArgs) => {\n const id = args.nodeId ?? readConvexId<\"epistemicNodes\">(args.sourceId);\n if (!id) {\n return null;\n }\n const node = await ctx.db.get(id);\n if (!isSourceNodeDoc(node)) {\n return null;\n }\n return node;\n },\n});\n\nexport const findByUrl = query({\n args: {\n url: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: SourceUrlQueryArgs) => {\n const normalizedUrl = normalizeSourceUrl(args.url);\n const node = await findSourceByIdentity(ctx, { normalizedUrl });\n return node?.nodeType === \"source\" ? node : null;\n },\n});\n\nexport const findBySha = query({\n args: {\n sha: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: SourceShaQueryArgs) => {\n const sha = normalizeString(args.sha);\n if (!sha) {\n return null;\n }\n const node = await findSourceByIdentity(ctx, { sha });\n return node?.nodeType === \"source\" ? node : null;\n },\n});\n","import type { EpistemicEvaluator } from \"../epistemicContracts\";\nimport { getRegisteredEpistemicEvaluators } from \"../epistemicContracts\";\nimport { lintCheckerEvaluator as lintCheckerEvaluatorModule } from \"./lint-checker-evaluator\";\nimport { sentryCheckerEvaluator as sentryCheckerEvaluatorModule } from \"./sentry-checker-evaluator\";\nimport type { EngineeringEpistemicEvaluator } from \"./test-runner-evaluator\";\nimport { testRunnerEvaluator as testRunnerEvaluatorModule } from \"./test-runner-evaluator\";\nimport { tscCheckerEvaluator as tscCheckerEvaluatorModule } from \"./tsc-checker-evaluator\";\n\nexport const ENGINEERING_EPISTEMIC_EVALUATORS: EngineeringEpistemicEvaluator[] =\n [\n testRunnerEvaluatorModule,\n tscCheckerEvaluatorModule,\n lintCheckerEvaluatorModule,\n sentryCheckerEvaluatorModule,\n ];\n\nconst lintCheckerEvaluator = lintCheckerEvaluatorModule;\nconst sentryCheckerEvaluator = sentryCheckerEvaluatorModule;\nconst testRunnerEvaluator = testRunnerEvaluatorModule;\nconst tscCheckerEvaluator = tscCheckerEvaluatorModule;\n\nexport const ENGINEERING_EVALUATOR_NAMES = new Set(\n ENGINEERING_EPISTEMIC_EVALUATORS.map((evaluator) => evaluator.name)\n);\n\nexport function getEngineeringEpistemicEvaluator(\n name: string\n): EngineeringEpistemicEvaluator | undefined {\n return ENGINEERING_EPISTEMIC_EVALUATORS.find(\n (evaluator) => evaluator.name === name\n );\n}\n\nexport function registerAllEngineeringEvaluators(\n registerEvaluator: (evaluator: EpistemicEvaluator) => void\n): void {\n for (const evaluator of ENGINEERING_EPISTEMIC_EVALUATORS) {\n registerEvaluator(evaluator);\n }\n}\nexport {\n lintCheckerEvaluator,\n sentryCheckerEvaluator,\n testRunnerEvaluator,\n tscCheckerEvaluator,\n};\n\nexport const RESEARCH_EVALUATOR_NAMES = [\n \"market_index_comparator\",\n \"metric_checker\",\n \"reference_check_counter\",\n \"temporal_deadline\",\n] as const;\n\nexport type ResearchEvaluatorName = (typeof RESEARCH_EVALUATOR_NAMES)[number];\n\nexport function registerAllResearchEvaluators(): ResearchEvaluatorName[] {\n const registered = new Set(getRegisteredEpistemicEvaluators());\n return RESEARCH_EVALUATOR_NAMES.filter((name) => registered.has(name));\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Metric helpers and evidential snapshots used by contract evaluators. */\n\nimport type { Id } from \"./convex\";\nimport {\n buildComparisonRationale,\n buildEvidentialRationale,\n compareMetricValue,\n getEvaluatorInputRecord,\n parseEvidentialEvaluatorConfig,\n parseMarketIndexComparatorConfig,\n parseMetricCheckerConfig,\n parseReferenceCheckCounterConfig,\n parseTemporalDeadlineConfig,\n pickFiniteNumber,\n resolveComparisonResult,\n} from \"./epistemicContractHelpers\";\nimport type {\n ContractReadCtx,\n ContradictionStatusCounts,\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n EvidenceEdgeDoc,\n EvidenceFreshness,\n EvidenceNodeDoc,\n EvidentialMetric,\n EvidentialMetricSnapshot,\n} from \"./epistemicContracts.types\";\n\nconst ACTIVE_CONTRADICTION_STATUSES = new Set([\n \"unresolved\",\n \"investigating\",\n \"accepted_as_permanent\",\n]);\n\nconst DEPENDENT_EDGE_TYPES = new Set([\"depends_on\"]);\n\ninterface ContradictionIndexQuery {\n eq(field: \"beliefId\", value: Id<\"epistemicNodes\">): ContradictionIndexQuery;\n}\n\ninterface ContradictionQuery {\n withIndex(\n index: \"by_beliefId\",\n builder: (q: ContradictionIndexQuery) => ContradictionIndexQuery\n ): {\n collect(): Promise<ContradictionStatusRow[]>;\n };\n}\n\ninterface ContradictionReadDb {\n query(table: \"contradictions\"): ContradictionQuery;\n}\n\ninterface ContradictionStatusRow {\n resolutionStatus?: string;\n status?: string;\n}\n\ninterface MetricNodeDoc extends EvidenceNodeDoc {\n nodeType: string;\n}\n\ninterface IncomingEdgeRow extends EvidenceEdgeDoc {\n _id?: Id<\"epistemicEdges\">;\n edgeType?: string;\n targetGlobalId?: string;\n toGlobalId?: string;\n toNodeId?: string;\n toUuid?: string;\n}\n\nfunction classifyContradictionStatus(status: unknown): \"active\" | \"resolved\" {\n if (typeof status !== \"string\") {\n return \"active\";\n }\n\n if (ACTIVE_CONTRADICTION_STATUSES.has(status)) {\n return \"active\";\n }\n\n if (\n status === \"resolved_support\" ||\n status === \"resolved_contra\" ||\n status === \"belief_forked\"\n ) {\n return \"resolved\";\n }\n\n return \"resolved\";\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readOptionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\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 readMetricNodeDoc(value: unknown): MetricNodeDoc | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(value._id);\n const nodeType = readOptionalString(value.nodeType);\n if (!(id && nodeType)) {\n return null;\n }\n\n const node: MetricNodeDoc = { _id: id, nodeType };\n const globalId = readOptionalString(value.globalId);\n if (globalId !== undefined) {\n node.globalId = globalId;\n }\n if (\"metadata\" in value) {\n node.metadata = value.metadata;\n }\n const status = readOptionalString(value.status);\n if (status !== undefined) {\n node.status = status;\n }\n return node;\n}\n\nfunction readIncomingEdgeRow(value: unknown): IncomingEdgeRow | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const fromNodeId = readOptionalString(value.fromNodeId);\n if (!fromNodeId) {\n return null;\n }\n\n const edge: IncomingEdgeRow = { fromNodeId };\n const id = readConvexId<\"epistemicEdges\">(value._id);\n if (id !== undefined) {\n edge._id = id;\n }\n const edgeType = readOptionalString(value.edgeType);\n if (edgeType !== undefined) {\n edge.edgeType = edgeType;\n }\n const fromGlobalId = readOptionalString(value.fromGlobalId);\n if (fromGlobalId !== undefined) {\n edge.fromGlobalId = fromGlobalId;\n }\n const fromUuid = readOptionalString(value.fromUuid);\n if (fromUuid !== undefined) {\n edge.fromUuid = fromUuid;\n }\n const sourceGlobalId = readOptionalString(value.sourceGlobalId);\n if (sourceGlobalId !== undefined) {\n edge.sourceGlobalId = sourceGlobalId;\n }\n const targetGlobalId = readOptionalString(value.targetGlobalId);\n if (targetGlobalId !== undefined) {\n edge.targetGlobalId = targetGlobalId;\n }\n const toGlobalId = readOptionalString(value.toGlobalId);\n if (toGlobalId !== undefined) {\n edge.toGlobalId = toGlobalId;\n }\n const toNodeId = readOptionalString(value.toNodeId);\n if (toNodeId !== undefined) {\n edge.toNodeId = toNodeId;\n }\n const toUuid = readOptionalString(value.toUuid);\n if (toUuid !== undefined) {\n edge.toUuid = toUuid;\n }\n const weight = readOptionalNumber(value.weight);\n if (weight !== undefined) {\n edge.weight = weight;\n }\n\n for (const timestampField of [\"_creationTime\", \"createdAt\", \"updatedAt\"]) {\n const timestamp = readOptionalNumber(value[timestampField]);\n if (timestamp !== undefined) {\n edge[timestampField as \"_creationTime\" | \"createdAt\" | \"updatedAt\"] =\n timestamp;\n }\n }\n\n return edge;\n}\n\nfunction getEdgeTimestamp(edge: {\n updatedAt?: unknown;\n createdAt?: unknown;\n _creationTime?: unknown;\n}): number | null {\n if (typeof edge.updatedAt === \"number\") {\n return edge.updatedAt;\n }\n if (typeof edge.createdAt === \"number\") {\n return edge.createdAt;\n }\n if (typeof edge._creationTime === \"number\") {\n return edge._creationTime;\n }\n return null;\n}\n\nasync function collectNodeEndpointRefs(\n ctx: ContractReadCtx,\n nodeId: Id<\"epistemicNodes\">\n): Promise<string[]> {\n const refs = new Set<string>([String(nodeId)]);\n const node = readMetricNodeDoc(await ctx.db.get(nodeId));\n if (node?.globalId) {\n refs.add(node.globalId);\n }\n return [...refs];\n}\n\nasync function collectIncomingEdgeRows(\n ctx: ContractReadCtx,\n nodeId: Id<\"epistemicNodes\">,\n edgeType?: string\n): Promise<IncomingEdgeRow[]> {\n const refs = await collectNodeEndpointRefs(ctx, nodeId);\n const seen = new Set<string>();\n const edges: IncomingEdgeRow[] = [];\n\n for (const ref of refs) {\n const rows =\n edgeType === undefined\n ? await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q) => q.eq(\"toNodeId\", ref))\n .collect()\n : await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", ref).eq(\"edgeType\", edgeType)\n )\n .collect();\n\n for (const row of rows) {\n const edge = readIncomingEdgeRow(row);\n if (!edge) {\n continue;\n }\n if (edgeType !== undefined && edge.edgeType !== edgeType) {\n continue;\n }\n const key =\n edge._id === undefined\n ? `${edge.fromNodeId}->${edge.toNodeId ?? ref}:${edge.edgeType ?? \"\"}`\n : String(edge._id);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n edges.push(edge);\n }\n }\n\n return edges;\n}\n\nfunction sourceEndpointRefs(edge: IncomingEdgeRow): string[] {\n return [\n edge.fromNodeId,\n edge.sourceGlobalId,\n edge.fromGlobalId,\n edge.fromUuid,\n ].filter((value): value is string => value !== undefined);\n}\n\nasync function resolveEndpointNode(\n ctx: ContractReadCtx,\n refs: readonly string[]\n): Promise<MetricNodeDoc | null> {\n const candidates = refs\n .map((value) => value.trim())\n .filter(\n (value, index, values) =>\n value.length > 0 && values.indexOf(value) === index\n );\n\n for (const candidate of candidates) {\n try {\n const direct = readMetricNodeDoc(\n await ctx.db.get(candidate as Id<\"epistemicNodes\">)\n );\n if (direct) {\n return direct;\n }\n } catch {\n // Canonical global endpoints are expected to miss direct document lookup.\n }\n\n const byGlobalId = readMetricNodeDoc(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", candidate))\n .first()\n );\n if (byGlobalId) {\n return byGlobalId;\n }\n }\n\n return null;\n}\n\nasync function getEvidenceLinks(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<Array<{ edge: EvidenceEdgeDoc; node: EvidenceNodeDoc }>> {\n const edges = await collectIncomingEdgeRows(ctx, beliefNodeId, \"informs\");\n\n if (edges.length === 0) {\n return [];\n }\n\n const links: Array<{ edge: EvidenceEdgeDoc; node: EvidenceNodeDoc }> = [];\n for (const edge of edges) {\n const node = await resolveEndpointNode(ctx, sourceEndpointRefs(edge));\n if (node?.nodeType !== \"evidence\" || node.status === \"archived\") {\n continue;\n }\n links.push({ edge, node });\n }\n\n return links;\n}\n\nfunction getEvidenceTags(node: EvidenceNodeDoc): string[] {\n const metadata =\n node.metadata && typeof node.metadata === \"object\"\n ? (node.metadata as Record<string, unknown>)\n : null;\n const tags = metadata?.tags;\n if (!Array.isArray(tags)) {\n return [];\n }\n return tags.filter((tag): tag is string => typeof tag === \"string\");\n}\n\nexport async function computeEvidenceCountMetric(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<number> {\n return (await getEvidenceLinks(ctx, beliefNodeId)).length;\n}\n\nasync function computeTaggedEvidenceCount(args: {\n ctx: ContractReadCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n tag: string;\n caseSensitive?: boolean;\n}): Promise<{ count: number; matchedEvidenceIds: string[] }> {\n const expectedTag = args.caseSensitive ? args.tag : args.tag.toLowerCase();\n const matchedEvidenceIds = (\n await getEvidenceLinks(args.ctx, args.beliefNodeId)\n )\n .filter(({ node }) =>\n getEvidenceTags(node).some(\n (tag) => (args.caseSensitive ? tag : tag.toLowerCase()) === expectedTag\n )\n )\n .map(({ node }) => String(node._id));\n\n return {\n count: matchedEvidenceIds.length,\n matchedEvidenceIds,\n };\n}\n\nexport async function computeContradictionCounts(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<ContradictionStatusCounts> {\n const contradictionDb = ctx.db as unknown as ContradictionReadDb;\n const contradictions = await contradictionDb\n .query(\"contradictions\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", beliefNodeId))\n .collect();\n\n return contradictions.reduce<ContradictionStatusCounts>(\n (counts, contradiction) => {\n const status =\n contradiction.resolutionStatus ?? contradiction.status ?? \"unresolved\";\n if (classifyContradictionStatus(status) === \"active\") {\n counts.activeCount += 1;\n } else {\n counts.resolvedCount += 1;\n }\n return counts;\n },\n { activeCount: 0, resolvedCount: 0 }\n );\n}\n\nexport async function computeEvidenceFreshness(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">,\n now = Date.now()\n): Promise<EvidenceFreshness> {\n const timestamps = (await getEvidenceLinks(ctx, beliefNodeId))\n .map(({ edge }) => getEdgeTimestamp(edge))\n .filter((value): value is number => value !== null);\n\n if (timestamps.length === 0) {\n return {\n newestAgeMs: null,\n oldestAgeMs: null,\n newestEdgeAt: null,\n oldestEdgeAt: null,\n edgeCount: 0,\n };\n }\n\n const newestEdgeAt = Math.max(...timestamps);\n const oldestEdgeAt = Math.min(...timestamps);\n\n return {\n newestAgeMs: Math.max(0, now - newestEdgeAt),\n oldestAgeMs: Math.max(0, now - oldestEdgeAt),\n newestEdgeAt,\n oldestEdgeAt,\n edgeCount: timestamps.length,\n };\n}\n\nexport async function computeDependentBeliefCount(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<number> {\n const incomingEdges = await collectIncomingEdgeRows(ctx, beliefNodeId);\n\n const dependencyEdges = incomingEdges.filter((edge) =>\n edge.edgeType ? DEPENDENT_EDGE_TYPES.has(edge.edgeType) : false\n );\n if (dependencyEdges.length === 0) {\n return 0;\n }\n\n const uniqueBeliefIds = new Set<string>();\n\n for (const edge of dependencyEdges) {\n const node = await resolveEndpointNode(ctx, sourceEndpointRefs(edge));\n if (\n node &&\n node.nodeType === \"belief\" &&\n node.status !== \"archived\" &&\n node.status !== \"deleted\"\n ) {\n uniqueBeliefIds.add(String(node._id));\n }\n }\n\n return uniqueBeliefIds.size;\n}\n\nasync function snapshotEvidentialMetric(args: {\n ctx: ContractReadCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n metric: EvidentialMetric;\n now: number;\n}): Promise<EvidentialMetricSnapshot> {\n switch (args.metric) {\n case \"evidence_count\": {\n const count = await computeEvidenceCountMetric(\n args.ctx,\n args.beliefNodeId\n );\n return {\n metric: args.metric,\n value: count,\n data: { evidenceCount: count },\n };\n }\n case \"contradiction_status\": {\n const counts = await computeContradictionCounts(\n args.ctx,\n args.beliefNodeId\n );\n return {\n metric: args.metric,\n value: counts.activeCount,\n data: counts as unknown as Record<string, unknown>,\n };\n }\n case \"edge_freshness\": {\n const freshness = await computeEvidenceFreshness(\n args.ctx,\n args.beliefNodeId,\n args.now\n );\n return {\n metric: args.metric,\n value: freshness.newestAgeMs,\n data: freshness as unknown as Record<string, unknown>,\n };\n }\n case \"dependent_count\": {\n const count = await computeDependentBeliefCount(\n args.ctx,\n args.beliefNodeId\n );\n return {\n metric: args.metric,\n value: count,\n data: { dependentCount: count },\n };\n }\n default:\n return {\n metric: args.metric,\n value: null,\n data: {},\n };\n }\n}\n\nexport async function evaluateBuiltInEvidentialContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseEvidentialEvaluatorConfig(\n args.contract.condition.evaluatorConfig\n );\n const snapshot = await snapshotEvidentialMetric({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n metric: config.metric,\n now: args.now,\n });\n\n const comparisonSatisfied =\n snapshot.value !== null &&\n compareMetricValue(config.operator, snapshot.value, config.threshold);\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildEvidentialRationale({\n config,\n snapshot,\n comparisonSatisfied,\n result,\n }),\n data: {\n ...snapshot.data,\n metric: config.metric,\n observedValue: snapshot.value,\n operator: config.operator,\n threshold: config.threshold,\n action: config.action ?? \"append_sl_scoring\",\n actionParams: config.actionParams,\n },\n };\n}\n\nexport function evaluateMetricCheckerContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n return Promise.resolve().then(() => {\n const config = parseMetricCheckerConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"metricData\");\n const metric =\n typeof input.metric === \"string\" && input.metric.length > 0\n ? input.metric\n : config.metric;\n const observedValue =\n pickFiniteNumber(input, [\n \"observedValue\",\n \"currentValue\",\n \"metricValue\",\n \"value\",\n ]) ??\n config.observedValue ??\n config.currentValue ??\n config.metricValue ??\n null;\n if (observedValue === null) {\n return {\n result: \"inconclusive\",\n rationale: `metric_checker is awaiting data for ${metric ?? args.contract.condition.expression}.`,\n data: {\n metric,\n observedValue: null,\n operator: config.operator,\n threshold: config.threshold,\n unit: config.unit,\n },\n };\n }\n\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n observedValue,\n config.threshold\n );\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: metric ?? \"metric\",\n observedValue,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n unit: config.unit,\n }),\n data: {\n metric,\n observedValue,\n operator: config.operator,\n threshold: config.threshold,\n unit: config.unit,\n },\n };\n });\n}\n\nexport async function evaluateReferenceCheckCounterContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseReferenceCheckCounterConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"referenceCheckData\");\n const tag =\n typeof input.tag === \"string\" && input.tag.trim().length > 0\n ? input.tag.trim()\n : config.tag;\n const snapshot = await computeTaggedEvidenceCount({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n tag,\n caseSensitive: config.caseSensitive,\n });\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n snapshot.count,\n config.threshold\n );\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: `reference checks tagged \"${tag}\"`,\n observedValue: snapshot.count,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n }),\n data: {\n tag,\n observedValue: snapshot.count,\n referenceCheckCount: snapshot.count,\n matchedEvidenceIds: snapshot.matchedEvidenceIds,\n operator: config.operator,\n threshold: config.threshold,\n caseSensitive: config.caseSensitive ?? false,\n },\n };\n}\n\nfunction resolveCompletedTemporalDeadlineResult(args: {\n completedAt: number | undefined;\n context: EpistemicEvaluatorContext;\n deadline: number;\n label: string;\n}): EpistemicEvaluatorResult {\n const { completedAt, context, deadline, label } = args;\n if (completedAt !== undefined && completedAt > deadline) {\n return {\n result: \"expired\",\n rationale: `${label} completed at ${completedAt}, after deadline ${deadline}.`,\n data: {\n label,\n deadline,\n completed: true,\n completedAt,\n missedDeadline: true,\n overdueByMs: completedAt - deadline,\n },\n };\n }\n\n const result =\n context.contract.direction === \"falsifies\" ? \"disconfirmed\" : \"confirmed\";\n return {\n result,\n rationale: `${label} completed before deadline ${deadline}.`,\n data: {\n label,\n deadline,\n completed: true,\n completedAt: completedAt ?? null,\n missedDeadline: false,\n },\n };\n}\n\nfunction resolveOpenTemporalDeadlineResult(args: {\n context: EpistemicEvaluatorContext;\n deadline: number;\n label: string;\n}): EpistemicEvaluatorResult {\n const { context, deadline, label } = args;\n if (context.now > deadline) {\n return {\n result: \"expired\",\n rationale: `${label} missed deadline ${deadline}; temporal contract expired.`,\n data: {\n label,\n deadline,\n completed: false,\n overdueByMs: context.now - deadline,\n },\n };\n }\n\n return {\n result: \"inconclusive\",\n rationale: `${label} is still before deadline ${deadline}; awaiting outcome.`,\n data: {\n label,\n deadline,\n completed: false,\n timeRemainingMs: deadline - context.now,\n },\n };\n}\n\nexport function evaluateTemporalDeadlineContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n return Promise.resolve().then(() => {\n if (\n typeof args.contract.deadline !== \"number\" ||\n !Number.isFinite(args.contract.deadline)\n ) {\n throw new Error(\n \"temporal_deadline requires contract.deadline to be set to a finite timestamp.\"\n );\n }\n const deadline = args.contract.deadline;\n\n const config = parseTemporalDeadlineConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"temporalData\");\n const label =\n (typeof input.label === \"string\" && input.label.length > 0\n ? input.label\n : config.label) ??\n args.contract.title ??\n args.contract.condition.expression;\n const completedAt =\n pickFiniteNumber(input, [\n \"completedAt\",\n \"observedAt\",\n \"satisfiedAt\",\n \"achievedAt\",\n ]) ??\n config.completedAt ??\n config.observedAt ??\n config.satisfiedAt ??\n config.achievedAt;\n const completed =\n input.completed === true ||\n config.completed === true ||\n completedAt !== undefined;\n\n if (completed) {\n return resolveCompletedTemporalDeadlineResult({\n completedAt,\n context: args,\n deadline,\n label,\n });\n }\n\n return resolveOpenTemporalDeadlineResult({\n context: args,\n deadline,\n label,\n });\n });\n}\n\nexport function evaluateMarketIndexComparatorContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n return Promise.resolve().then(() => {\n const config = parseMarketIndexComparatorConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"marketIndexData\");\n const subject =\n typeof input.subject === \"string\" && input.subject.length > 0\n ? input.subject\n : config.subject;\n const benchmark =\n typeof input.benchmark === \"string\" && input.benchmark.length > 0\n ? input.benchmark\n : config.benchmark;\n const subjectValue =\n pickFiniteNumber(input, [\"subjectValue\", \"primaryValue\", \"leftValue\"]) ??\n config.subjectValue ??\n config.primaryValue ??\n null;\n const benchmarkValue =\n pickFiniteNumber(input, [\n \"benchmarkValue\",\n \"comparisonValue\",\n \"rightValue\",\n ]) ??\n config.benchmarkValue ??\n config.comparisonValue ??\n null;\n\n if (subjectValue === null || benchmarkValue === null) {\n return {\n result: \"inconclusive\",\n rationale:\n \"market_index_comparator is awaiting both subject and benchmark values.\",\n data: {\n subject,\n subjectValue,\n benchmark,\n benchmarkValue,\n operator: config.operator,\n threshold: config.threshold,\n },\n };\n }\n\n if (benchmarkValue === 0) {\n throw new Error(\n \"market_index_comparator cannot compare against a zero benchmark value.\"\n );\n }\n\n const differentialPercent =\n ((subjectValue - benchmarkValue) / Math.abs(benchmarkValue)) * 100;\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n differentialPercent,\n config.threshold\n );\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: `${subject ?? \"subject\"} vs ${benchmark ?? \"benchmark\"} differential`,\n observedValue: differentialPercent,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n unit: \"%\",\n }),\n data: {\n subject,\n subjectValue,\n benchmark,\n benchmarkValue,\n differentialPercent,\n operator: config.operator,\n threshold: config.threshold,\n },\n };\n });\n}\n\nexport const METRIC_COMPARATOR_EVALUATOR_NAMES = {\n evidential: \"evidential\",\n evidentialAliases: new Set([\n \"evidential\",\n \"built_in_evidential\",\n \"builtin_evidential\",\n ]),\n metricChecker: \"metric_checker\",\n referenceCheckCounter: \"reference_check_counter\",\n temporalDeadline: \"temporal_deadline\",\n marketIndexComparator: \"market_index_comparator\",\n};\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Evaluator registry and contract execution logic for epistemic contracts. */\n\nimport type { Id, MutationCtx } from \"./convex\";\nimport { applyBeliefConfidenceChange } from \"./epistemicBeliefs\";\nimport {\n deriveContractModulationPlan,\n deriveContractStatus,\n} from \"./epistemicContractHelpers\";\nimport {\n evaluateBuiltInEvidentialContract,\n evaluateMarketIndexComparatorContract,\n evaluateMetricCheckerContract,\n evaluateReferenceCheckCounterContract,\n evaluateTemporalDeadlineContract,\n METRIC_COMPARATOR_EVALUATOR_NAMES,\n} from \"./epistemicContracts.metrics\";\nimport type {\n BeliefNodeDoc,\n ContractDoc,\n ContractEvaluationExecution,\n EpistemicEvaluator,\n EpistemicEvaluatorResult,\n TriggerBatchResult,\n} from \"./epistemicContracts.types\";\nimport { ENGINEERING_EPISTEMIC_EVALUATORS } from \"./evaluators\";\n\nconst evaluatorRegistry = new Map<string, EpistemicEvaluator>();\nconst BUILT_IN_EVIDENTIAL_ALIASES =\n METRIC_COMPARATOR_EVALUATOR_NAMES.evidentialAliases;\nconst BUILT_IN_METRIC_CHECKER = METRIC_COMPARATOR_EVALUATOR_NAMES.metricChecker;\nconst BUILT_IN_REFERENCE_CHECK_COUNTER =\n METRIC_COMPARATOR_EVALUATOR_NAMES.referenceCheckCounter;\nconst BUILT_IN_TEMPORAL_DEADLINE =\n METRIC_COMPARATOR_EVALUATOR_NAMES.temporalDeadline;\nconst BUILT_IN_MARKET_INDEX_COMPARATOR =\n METRIC_COMPARATOR_EVALUATOR_NAMES.marketIndexComparator;\nconst MAX_CONTRACT_EVALUATION_BATCH_SIZE = 50;\n\nfunction confidenceSeed(args: {\n beliefConfidence?: number;\n currentConfidence?: number;\n}): number {\n if (typeof args.currentConfidence === \"number\") {\n return args.currentConfidence;\n }\n if (typeof args.beliefConfidence === \"number\") {\n return args.beliefConfidence;\n }\n return 0.5;\n}\n\nfunction contractDocId(contract: ContractDoc): Id<\"epistemicContracts\"> {\n return contract._id as Id<\"epistemicContracts\">;\n}\n\nexport function clearEpistemicEvaluators(): void {\n evaluatorRegistry.clear();\n ensureBuiltInEvaluators();\n}\n\nexport function registerEpistemicEvaluator(\n evaluator: EpistemicEvaluator\n): void {\n ensureBuiltInEvaluators();\n evaluatorRegistry.set(evaluator.name, evaluator);\n}\n\nexport function getRegisteredEpistemicEvaluators(): string[] {\n ensureBuiltInEvaluators();\n return Array.from(evaluatorRegistry.keys()).sort();\n}\n\nfunction ensureBuiltInEvaluators(): void {\n for (const name of BUILT_IN_EVIDENTIAL_ALIASES) {\n if (evaluatorRegistry.has(name)) {\n continue;\n }\n evaluatorRegistry.set(name, {\n name,\n evaluate: evaluateBuiltInEvidentialContract,\n });\n }\n\n for (const evaluator of ENGINEERING_EPISTEMIC_EVALUATORS) {\n if (evaluatorRegistry.has(evaluator.name)) {\n continue;\n }\n evaluatorRegistry.set(evaluator.name, evaluator);\n }\n\n const researchEvaluators: [string, EpistemicEvaluator[\"evaluate\"]][] = [\n [BUILT_IN_METRIC_CHECKER, evaluateMetricCheckerContract],\n [BUILT_IN_REFERENCE_CHECK_COUNTER, evaluateReferenceCheckCounterContract],\n [BUILT_IN_TEMPORAL_DEADLINE, evaluateTemporalDeadlineContract],\n [BUILT_IN_MARKET_INDEX_COMPARATOR, evaluateMarketIndexComparatorContract],\n ];\n\n for (const [name, evaluate] of researchEvaluators) {\n if (evaluatorRegistry.has(name)) {\n continue;\n }\n evaluatorRegistry.set(name, { name, evaluate });\n }\n}\n\nfunction normalizeTrigger(trigger?: string): string {\n if (trigger === \"evidence_added\") {\n return \"evidence_added\";\n }\n if (trigger === \"periodic\") {\n return \"periodic\";\n }\n if (trigger === \"manual\") {\n return \"manual\";\n }\n return \"event_driven\";\n}\n\nfunction resolveSchedulesForTrigger(trigger: string): Set<string> {\n if (trigger === \"evidence_added\") {\n return new Set([\"on_evidence\", \"event_driven\"]);\n }\n if (trigger === \"periodic\") {\n return new Set([\"periodic\"]);\n }\n if (trigger === \"manual\") {\n return new Set([\"on_demand\", \"event_driven\"]);\n }\n return new Set([\"event_driven\"]);\n}\n\nexport async function executeContractEvaluation(args: {\n ctx: MutationCtx;\n belief: BeliefNodeDoc;\n contract: ContractDoc;\n now: number;\n trigger: string;\n inputData?: unknown;\n authenticatedUserId: string;\n currentConfidence?: number;\n resultData?: unknown;\n}): Promise<ContractEvaluationExecution> {\n ensureBuiltInEvaluators();\n\n const evaluator = evaluatorRegistry.get(args.contract.condition.evaluator);\n let evaluation: EpistemicEvaluatorResult;\n if (evaluator) {\n try {\n evaluation = await evaluator.evaluate({\n belief: args.belief,\n contract: args.contract,\n ctx: args.ctx,\n now: args.now,\n resultData: args.resultData,\n trigger: args.trigger,\n inputData: args.inputData,\n });\n } catch (error) {\n evaluation = {\n result: \"error\",\n rationale:\n error instanceof Error ? error.message : \"Unknown evaluator error.\",\n };\n }\n } else {\n evaluation = {\n result: \"error\",\n rationale: `No epistemic evaluator registered for \"${args.contract.condition.evaluator}\".`,\n };\n }\n\n const confidenceBefore = confidenceSeed({\n beliefConfidence: args.belief.confidence,\n currentConfidence: args.currentConfidence,\n });\n const modulationPlan = deriveContractModulationPlan({\n currentConfidence: confidenceBefore,\n modulation: args.contract.modulation,\n result: evaluation.result,\n resultConfidence: evaluation.confidence,\n });\n\n let beliefConfidenceId: Id<\"beliefConfidence\"> | undefined;\n let confidenceAfter = confidenceBefore;\n if (modulationPlan) {\n // EK-7: Convert contract modulation to SL opinion.\n // Contract modulations are dogmatic (certainty=1) → u=0.\n const contractB = Math.max(0, Math.min(1, modulationPlan.confidenceAfter));\n const modulationResult = await applyBeliefConfidenceChange(args.ctx, {\n nodeId: args.contract.beliefNodeId,\n belief: contractB,\n disbelief: 1 - contractB,\n uncertainty: 0,\n baseRate: 0.5,\n trigger: modulationPlan.trigger,\n rationale: `Epistemic contract \"${args.contract.title}\" ${evaluation.result}: ${evaluation.rationale}`,\n authenticatedUserId: args.authenticatedUserId,\n });\n beliefConfidenceId = modulationResult.beliefConfidenceId;\n confidenceAfter =\n typeof modulationResult.newConfidence === \"number\"\n ? modulationResult.newConfidence\n : modulationPlan.confidenceAfter;\n }\n\n const evaluationId = await args.ctx.db.insert(\"contractEvaluations\", {\n contractId: args.contract.contractId,\n beliefNodeId: args.contract.beliefNodeId,\n result: evaluation.result,\n evaluatedAt: args.now,\n evaluator: args.contract.condition.evaluator,\n trigger: args.trigger,\n resultData: evaluation.data,\n modulationApplied: Boolean(modulationPlan),\n confidenceDelta: modulationPlan?.confidenceDelta,\n confidenceBefore: modulationPlan?.confidenceBefore,\n confidenceAfter: modulationPlan ? confidenceAfter : undefined,\n beliefConfidenceId,\n modulationRationale: evaluation.rationale,\n topicId: args.contract.topicId,\n });\n\n const nextStatus = deriveContractStatus(\n evaluation.result,\n args.contract.status\n );\n await args.ctx.db.patch(contractDocId(args.contract), {\n status: nextStatus,\n lastEvaluatedAt: args.now,\n evaluationCount: (args.contract.evaluationCount ?? 0) + 1,\n updatedAt: args.now,\n });\n\n return {\n evaluationId,\n result: evaluation.result,\n status: nextStatus,\n confidenceBefore,\n confidenceAfter,\n rationale: evaluation.rationale,\n data: evaluation.data,\n currentConfidence: confidenceAfter,\n };\n}\n\nexport async function evaluateContractsForTriggerBatch(args: {\n ctx: MutationCtx;\n belief: BeliefNodeDoc;\n trigger: string;\n inputData?: unknown;\n authenticatedUserId: string;\n contractIds?: string[];\n maxBatchSize?: number;\n}): Promise<TriggerBatchResult> {\n const startedAt = Date.now();\n const contracts = await loadContractsForTrigger({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n trigger: normalizeTrigger(args.trigger),\n contractIds: args.contractIds,\n });\n const batchLimit = Math.max(\n 1,\n Math.min(\n args.maxBatchSize ?? MAX_CONTRACT_EVALUATION_BATCH_SIZE,\n MAX_CONTRACT_EVALUATION_BATCH_SIZE\n )\n );\n const currentBatch = contracts.slice(0, batchLimit);\n const overflowContracts = contracts.slice(batchLimit);\n\n let runningConfidence =\n typeof args.belief.confidence === \"number\" ? args.belief.confidence : 0.5;\n const results: TriggerBatchResult[\"results\"] = [];\n\n for (const contract of currentBatch) {\n const evaluation = await executeContractEvaluation({\n ctx: args.ctx,\n belief: args.belief,\n contract,\n now: Date.now(),\n trigger: normalizeTrigger(args.trigger),\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n currentConfidence: runningConfidence,\n });\n runningConfidence = evaluation.currentConfidence;\n args.belief.confidence = runningConfidence;\n results.push({\n contractId: contract.contractId,\n result: evaluation.result,\n status: evaluation.status,\n confidenceAfter: evaluation.confidenceAfter,\n });\n }\n\n if (overflowContracts.length > 0) {\n await args.ctx.scheduler.runAfter(\n 0,\n \"epistemicContracts.processContractEvaluationOverflow\",\n {\n beliefNodeId: args.belief._id,\n trigger: normalizeTrigger(args.trigger),\n contractIds: overflowContracts.map((contract) => contract.contractId),\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n maxBatchSize: batchLimit,\n }\n );\n }\n\n const executionTimeMs = Date.now() - startedAt;\n console.info(\"[epistemicContracts] processed contract evaluation batch\", {\n beliefNodeId: String(args.belief._id),\n trigger: normalizeTrigger(args.trigger),\n batchSize: currentBatch.length,\n overflowCount: overflowContracts.length,\n executionTimeMs,\n });\n\n return {\n totalContracts: contracts.length,\n processedCount: currentBatch.length,\n overflowCount: overflowContracts.length,\n scheduledOverflow: overflowContracts.length > 0,\n batchSize: currentBatch.length,\n executionTimeMs,\n trigger: normalizeTrigger(args.trigger),\n results,\n };\n}\n\nexport async function loadContractsForBelief(args: {\n ctx: MutationCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n}): Promise<ContractDoc[]> {\n const rows = await args.ctx.db\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q) => q.eq(\"beliefNodeId\", args.beliefNodeId))\n .collect();\n return rows as unknown as ContractDoc[];\n}\n\nasync function loadContractsForTrigger(args: {\n ctx: MutationCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n trigger: string;\n contractIds?: string[];\n}): Promise<ContractDoc[]> {\n const contracts = await loadContractsForBelief(args);\n\n ensureBuiltInEvaluators();\n const allowedSchedules = resolveSchedulesForTrigger(args.trigger);\n const contractIdFilter =\n args.contractIds && args.contractIds.length > 0\n ? new Set(args.contractIds)\n : null;\n\n return contracts.filter((contract) => {\n if (contract.status === \"archived\") {\n return false;\n }\n if (contract.conditionType === \"composite\") {\n return false;\n }\n if (!evaluatorRegistry.has(contract.condition.evaluator)) {\n return false;\n }\n if (contractIdFilter) {\n return contractIdFilter.has(contract.contractId);\n }\n return allowedSchedules.has(contract.evaluationSchedule);\n });\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Facade for split epistemic contract primitives and public contract operations. */\n\nimport {\n clearEpistemicEvaluators as clearEpistemicEvaluatorsImpl,\n getRegisteredEpistemicEvaluators as getRegisteredEpistemicEvaluatorsImpl,\n registerEpistemicEvaluator as registerEpistemicEvaluatorImpl,\n} from \"./epistemicContracts.evaluators\";\nimport {\n createEpistemicContract as createEpistemicContractImpl,\n evaluateContract as evaluateContractImpl,\n evaluateContractsForTrigger as evaluateContractsForTriggerImpl,\n evaluateContradictionStatus as evaluateContradictionStatusImpl,\n evaluateDependentBeliefCount as evaluateDependentBeliefCountImpl,\n evaluateEdgeFreshness as evaluateEdgeFreshnessImpl,\n evaluateEngineeringContracts as evaluateEngineeringContractsImpl,\n evaluateEvidenceCount as evaluateEvidenceCountImpl,\n getContractCoverage as getContractCoverageImpl,\n getContractStatus as getContractStatusImpl,\n inheritContractsForFork as inheritContractsForForkImpl,\n processContractEvaluationOverflow as processContractEvaluationOverflowImpl,\n} from \"./epistemicContracts.handlers\";\nimport type {\n EpistemicEvaluatorContext as EpistemicEvaluatorContextType,\n EpistemicEvaluatorResult as EpistemicEvaluatorResultType,\n EpistemicEvaluator as EpistemicEvaluatorType,\n} from \"./epistemicContracts.types\";\n\nexport type EpistemicEvaluator = EpistemicEvaluatorType;\nexport type EpistemicEvaluatorContext = EpistemicEvaluatorContextType;\nexport type EpistemicEvaluatorResult = EpistemicEvaluatorResultType;\n\nexport const clearEpistemicEvaluators = clearEpistemicEvaluatorsImpl;\nexport const getRegisteredEpistemicEvaluators =\n getRegisteredEpistemicEvaluatorsImpl;\nexport const registerEpistemicEvaluator = registerEpistemicEvaluatorImpl;\nexport const createEpistemicContract = createEpistemicContractImpl;\nexport const evaluateContract = evaluateContractImpl;\nexport const evaluateContractsForTrigger = evaluateContractsForTriggerImpl;\nexport const evaluateContradictionStatus = evaluateContradictionStatusImpl;\nexport const evaluateDependentBeliefCount = evaluateDependentBeliefCountImpl;\nexport const evaluateEdgeFreshness = evaluateEdgeFreshnessImpl;\nexport const evaluateEngineeringContracts = evaluateEngineeringContractsImpl;\nexport const evaluateEvidenceCount = evaluateEvidenceCountImpl;\nexport const getContractCoverage = getContractCoverageImpl;\nexport const getContractStatus = getContractStatusImpl;\nexport const inheritContractsForFork = inheritContractsForForkImpl;\nexport const processContractEvaluationOverflow =\n processContractEvaluationOverflowImpl;\n","/** Shared evaluator helpers and result-normalization utilities. */\n\nimport { debugGraphPrimitiveFallback } from \"../debug\";\nimport type {\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n} from \"../epistemicContractHelpers\";\n\nexport interface ToolResultEnvelope {\n command?: string;\n data?: unknown;\n exitCode?: number | null;\n output?: string;\n report?: unknown;\n stderr?: string;\n stdout?: string;\n}\n\ntype AnyRecord = Record<string, unknown>;\n\nconst WINDOWS_PATH_SEPARATORS = /\\\\/g;\nconst LEADING_DOT_SLASH = /^\\.\\//;\n\nexport function asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nexport function asNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nexport function asRecord(value: unknown): AnyRecord | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as AnyRecord)\n : null;\n}\n\nexport function asString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : null;\n}\n\nexport function deriveDirectionalResult(\n direction: EpistemicContractDirection,\n conditionSatisfied: boolean\n): EpistemicContractEvaluationResult {\n if (direction === \"falsifies\") {\n return conditionSatisfied ? \"disconfirmed\" : \"confirmed\";\n }\n return conditionSatisfied ? \"confirmed\" : \"disconfirmed\";\n}\n\nexport function extractTextCandidates(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n const candidate = asString(value);\n return candidate ? [candidate] : [];\n }\n\n const candidates = [\n record.stdout,\n record.stderr,\n record.output,\n record.text,\n record.message,\n record.raw,\n ]\n .map(asString)\n .filter((candidate): candidate is string => Boolean(candidate));\n\n for (const nestedKey of [\"report\", \"result\", \"data\", \"payload\"]) {\n const nested = record[nestedKey];\n if (nested !== value) {\n candidates.push(...extractTextCandidates(nested));\n }\n }\n\n return Array.from(new Set(candidates));\n}\n\nexport function normalizeFilePath(value: string): string {\n return value\n .replace(WINDOWS_PATH_SEPARATORS, \"/\")\n .replace(LEADING_DOT_SLASH, \"\");\n}\n\nexport function normalizeToolResultEnvelope(\n value: unknown\n): ToolResultEnvelope {\n const record = asRecord(value);\n if (!record) {\n return {\n output: asString(value) ?? undefined,\n };\n }\n\n const exitCode =\n asNumber(record.exitCode) ??\n asNumber(record.code) ??\n asNumber(record.status) ??\n null;\n\n return {\n command: asString(record.command) ?? undefined,\n data: record.data ?? record.payload,\n exitCode,\n output: asString(record.output) ?? undefined,\n report:\n record.report ??\n record.json ??\n record.result ??\n record.payload ??\n undefined,\n stderr: asString(record.stderr) ?? undefined,\n stdout: asString(record.stdout) ?? undefined,\n };\n}\n\nexport function parseJsonCandidate<T = unknown>(value: unknown): T | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value !== \"string\") {\n return value as T;\n }\n\n try {\n return JSON.parse(value) as T;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[evaluators/shared] Failed to parse JSON candidate\",\n {\n error,\n valueType: typeof value,\n }\n );\n return null;\n }\n}\n\nexport function patternMatchesPath(filePath: string, pattern: string): boolean {\n const normalizedPath = normalizeFilePath(filePath);\n const normalizedPattern = normalizeFilePath(pattern);\n const escaped = normalizedPattern.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regexPattern = escaped\n .replace(/\\\\\\*\\\\\\*/g, \".*\")\n .replace(/\\\\\\*/g, \"[^/]*\")\n .replace(/\\\\\\?/g, \"[^/]\");\n return new RegExp(`^${regexPattern}$`).test(normalizedPath);\n}\n\nexport function somePatternMatches(\n filePath: string | null | undefined,\n patterns: string[]\n): boolean {\n if (!filePath) {\n return false;\n }\n return patterns.some((pattern) => patternMatchesPath(filePath, pattern));\n}\n","/** Lint-based engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n somePatternMatches,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./test-runner-evaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ninterface ParsedLintDiagnostic {\n filePath: string | null;\n message: string;\n severity: string;\n}\n\ninterface LintCheckerConfig {\n filePatterns: string[];\n linter: \"biome\";\n}\n\nfunction parseConfig(condition: EpistemicContractCondition): LintCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n 'lint_checker requires evaluatorConfig with { filePatterns: string[], linter: \"biome\" }.'\n );\n }\n\n const filePatterns = asArray(record.filePatterns)\n .map(asString)\n .filter((pattern): pattern is string => Boolean(pattern));\n if (filePatterns.length === 0) {\n throw new Error(\"lint_checker requires at least one file pattern.\");\n }\n\n const linter = asString(record.linter);\n if (linter !== \"biome\") {\n throw new Error(`Unsupported linter: ${String(record.linter)}`);\n }\n\n return {\n filePatterns,\n linter,\n };\n}\n\nfunction parseDiagnostics(resultData: unknown): ParsedLintDiagnostic[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ??\n asRecord(envelope.data) ??\n asRecord(resultData);\n if (!record) {\n return [];\n }\n\n return asArray(record.diagnostics)\n .map((entry) => {\n const diagnostic = asRecord(entry);\n if (!diagnostic) {\n return null;\n }\n const location = asRecord(diagnostic.location);\n const pathRecord = asRecord(location?.path);\n const filePath =\n asString(diagnostic.filePath) ??\n asString(diagnostic.file) ??\n asString(location?.filePath) ??\n asString(pathRecord?.file);\n const severity = asString(diagnostic.severity) ?? \"error\";\n const message =\n asString(diagnostic.message) ??\n asString(diagnostic.description) ??\n \"Lint issue\";\n return {\n filePath: filePath ? normalizeFilePath(filePath) : null,\n message,\n severity,\n };\n })\n .filter((diagnostic): diagnostic is ParsedLintDiagnostic =>\n Boolean(diagnostic)\n );\n}\n\nfunction getMatchedDiagnostics(\n contract: AnyContract,\n resultData: unknown\n): ParsedLintDiagnostic[] {\n const config = parseConfig(contract.condition);\n return parseDiagnostics(resultData).filter((diagnostic) =>\n somePatternMatches(diagnostic.filePath, config.filePatterns)\n );\n}\n\nexport const lintCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"lint_checker\",\n matches({ contract, resultData }) {\n const envelope = normalizeToolResultEnvelope(resultData);\n const exitCode = asNumber(envelope.exitCode);\n if (exitCode === 0) {\n return true;\n }\n return getMatchedDiagnostics(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"lint_checker requires Biome lint resultData.\",\n };\n }\n\n const envelope = normalizeToolResultEnvelope(args.resultData);\n const exitCode = asNumber(envelope.exitCode);\n const matchedDiagnostics = getMatchedDiagnostics(\n args.contract,\n args.resultData\n );\n\n if (\n matchedDiagnostics.length === 0 &&\n exitCode !== 0 &&\n exitCode !== null\n ) {\n return {\n result: \"inconclusive\",\n rationale:\n \"Biome reported issues, but none matched the configured file patterns.\",\n };\n }\n\n const conditionSatisfied =\n exitCode === 0 || (exitCode !== null && matchedDiagnostics.length === 0);\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Biome reported no matching lint diagnostics for ${config.filePatterns.join(\", \")}.`\n : `Biome reported ${matchedDiagnostics.length} matching issue(s): ${matchedDiagnostics\n .map((diagnostic) =>\n diagnostic.filePath\n ? `${diagnostic.filePath} (${diagnostic.severity})`\n : diagnostic.message\n )\n .join(\", \")}.`,\n data: {\n exitCode,\n filePatterns: config.filePatterns,\n linter: config.linter,\n matchedDiagnostics,\n },\n };\n },\n};\n","/** Sentry-backed engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n normalizeToolResultEnvelope,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./test-runner-evaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ninterface SentryCheckerConfig {\n module: string;\n windowDays: number;\n}\n\nfunction parseConfig(\n condition: EpistemicContractCondition\n): SentryCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"sentry_checker requires evaluatorConfig with { module, windowDays }.\"\n );\n }\n\n const moduleName = asString(record.module);\n const windowDays = asNumber(record.windowDays);\n if (!moduleName || windowDays === null) {\n throw new Error(\n \"sentry_checker requires a module name and numeric windowDays.\"\n );\n }\n\n return {\n module: moduleName,\n windowDays,\n };\n}\n\nfunction parseIncidentCount(resultData: unknown): {\n incidentCount: number | null;\n moduleName: string | null;\n windowDays: number | null;\n} {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ??\n asRecord(envelope.data) ??\n asRecord(resultData);\n if (!record) {\n return {\n incidentCount: null,\n moduleName: null,\n windowDays: null,\n };\n }\n\n const incidents = asArray(record.incidents);\n const incidentCount =\n asNumber(record.incidentCount) ??\n (incidents.length > 0 ? incidents.length : null);\n\n return {\n incidentCount,\n moduleName: asString(record.module),\n windowDays: asNumber(record.windowDays),\n };\n}\n\nfunction matchesModule(contract: AnyContract, resultData: unknown): boolean {\n const config = parseConfig(contract.condition);\n const payload = parseIncidentCount(resultData);\n return !payload.moduleName || payload.moduleName === config.module;\n}\n\nexport const sentryCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"sentry_checker\",\n matches({ contract, resultData }) {\n return matchesModule(contract, resultData);\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"sentry_checker requires incident count resultData.\",\n };\n }\n\n const payload = parseIncidentCount(args.resultData);\n if (payload.incidentCount === null) {\n return {\n result: \"error\",\n rationale: \"sentry_checker could not determine an incident count.\",\n };\n }\n if (!matchesModule(args.contract, args.resultData)) {\n return {\n result: \"inconclusive\",\n rationale: `Sentry result targeted ${payload.moduleName}, not ${config.module}.`,\n };\n }\n\n const conditionSatisfied = payload.incidentCount === 0;\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Sentry reported zero incidents for ${config.module} over ${config.windowDays} day(s).`\n : `Sentry reported ${payload.incidentCount} incident(s) for ${config.module} over ${config.windowDays} day(s).`,\n data: {\n incidentCount: payload.incidentCount,\n module: config.module,\n windowDays: config.windowDays,\n },\n };\n },\n};\n","/** Test-runner engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluator,\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asRecord,\n asString,\n deriveDirectionalResult,\n extractTextCandidates,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n parseJsonCandidate,\n patternMatchesPath,\n} from \"./shared\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ninterface ParsedSuite {\n failedTests: string[];\n filePath: string;\n passedTests: string[];\n}\n\ninterface TestRunnerConfig {\n runner: \"vitest\";\n testPattern: string;\n}\n\nfunction parseConfig(condition: EpistemicContractCondition): TestRunnerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n 'test_runner requires evaluatorConfig with { testPattern, runner: \"vitest\" }.'\n );\n }\n\n const testPattern = asString(record.testPattern);\n if (!testPattern) {\n throw new Error(\"test_runner requires a non-empty testPattern.\");\n }\n\n const runner = asString(record.runner);\n if (runner !== \"vitest\") {\n throw new Error(`Unsupported test runner: ${String(record.runner)}`);\n }\n\n return {\n runner,\n testPattern,\n };\n}\n\nfunction collectFailedTests(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n return [];\n }\n\n const fullName = asString(record.fullName);\n const title = asString(record.title);\n const label = fullName ?? title ?? \"unnamed test\";\n const status = asString(record.status);\n const state = asString(asRecord(record.result)?.state);\n const isFailed =\n status === \"failed\" ||\n status === \"fail\" ||\n state === \"failed\" ||\n state === \"fail\";\n\n const failures = isFailed ? [label] : [];\n for (const nestedKey of [\"assertionResults\", \"tests\", \"tasks\"]) {\n for (const nested of asArray(record[nestedKey])) {\n failures.push(...collectFailedTests(nested));\n }\n }\n\n return failures;\n}\n\nfunction collectPassedTests(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n return [];\n }\n\n const fullName = asString(record.fullName);\n const title = asString(record.title);\n const label = fullName ?? title ?? \"unnamed test\";\n const status = asString(record.status);\n const state = asString(asRecord(record.result)?.state);\n const isPassed = status === \"passed\" || state === \"passed\";\n\n const passed = isPassed ? [label] : [];\n for (const nestedKey of [\"assertionResults\", \"tests\", \"tasks\"]) {\n for (const nested of asArray(record[nestedKey])) {\n passed.push(...collectPassedTests(nested));\n }\n }\n\n return passed;\n}\n\nfunction parseSuite(value: unknown): ParsedSuite | null {\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n\n const filePath =\n asString(record.name) ??\n asString(record.file) ??\n asString(record.filePath) ??\n asString(record.filepath);\n if (!filePath) {\n return null;\n }\n\n return {\n failedTests: Array.from(new Set(collectFailedTests(record))),\n filePath: normalizeFilePath(filePath),\n passedTests: Array.from(new Set(collectPassedTests(record))),\n };\n}\n\nfunction parseVitestSuites(resultData: unknown): ParsedSuite[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const candidates = [\n envelope.report,\n envelope.data,\n envelope.stdout,\n envelope.output,\n ...extractTextCandidates(resultData),\n ];\n\n for (const candidate of candidates) {\n const parsed = parseJsonCandidate(candidate);\n const report = asRecord(parsed);\n if (!report) {\n continue;\n }\n\n const suites = asArray(report.testResults)\n .map(parseSuite)\n .filter((suite): suite is ParsedSuite => Boolean(suite));\n if (suites.length > 0) {\n return suites;\n }\n\n const fileSuites = asArray(report.files)\n .map(parseSuite)\n .filter((suite): suite is ParsedSuite => Boolean(suite));\n if (fileSuites.length > 0) {\n return fileSuites;\n }\n }\n\n return [];\n}\n\nfunction getMatchedSuites(\n contract: AnyContract,\n resultData: unknown\n): ParsedSuite[] {\n const config = parseConfig(contract.condition);\n return parseVitestSuites(resultData).filter((suite) =>\n patternMatchesPath(suite.filePath, config.testPattern)\n );\n}\n\nexport type EngineeringEpistemicEvaluator = EpistemicEvaluator & {\n matches(args: { contract: AnyContract; resultData: unknown }): boolean;\n};\n\nexport const testRunnerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"test_runner\",\n matches({ contract, resultData }) {\n return getMatchedSuites(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n const matchedSuites = getMatchedSuites(args.contract, args.resultData);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"test_runner requires Vitest JSON resultData.\",\n };\n }\n if (matchedSuites.length === 0) {\n return {\n result: \"inconclusive\",\n rationale: `No Vitest suites matched ${config.testPattern}.`,\n };\n }\n\n const failedTests = matchedSuites.flatMap((suite) => suite.failedTests);\n const passedTests = matchedSuites.flatMap((suite) => suite.passedTests);\n const conditionSatisfied = failedTests.length === 0;\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Vitest matched ${matchedSuites.length} suite(s) for ${config.testPattern}; all ${passedTests.length} test assertions passed.`\n : `Vitest matched ${matchedSuites.length} suite(s) for ${config.testPattern}; failing tests: ${failedTests.join(\", \")}.`,\n data: {\n runner: config.runner,\n testPattern: config.testPattern,\n matchedFiles: matchedSuites.map((suite) => suite.filePath),\n failedTests,\n passedTestCount: passedTests.length,\n },\n };\n },\n};\n","/** Typecheck-based engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n extractTextCandidates,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n somePatternMatches,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./test-runner-evaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ninterface ParsedDiagnostic {\n code?: string;\n filePath: string | null;\n message: string;\n}\n\ninterface TscCheckerConfig {\n filePatterns: string[];\n}\n\nfunction parseConfig(condition: EpistemicContractCondition): TscCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"tsc_checker requires evaluatorConfig with { filePatterns: string[] }.\"\n );\n }\n\n const filePatterns = asArray(record.filePatterns)\n .map(asString)\n .filter((pattern): pattern is string => Boolean(pattern));\n if (filePatterns.length === 0) {\n throw new Error(\"tsc_checker requires at least one file pattern.\");\n }\n\n return { filePatterns };\n}\n\nfunction parseStructuredDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ??\n asRecord(envelope.data) ??\n asRecord(resultData);\n if (!record) {\n return [];\n }\n\n return asArray(record.diagnostics).flatMap((entry): ParsedDiagnostic[] => {\n const diagnostic = asRecord(entry);\n if (!diagnostic) {\n return [];\n }\n const filePath =\n asString(diagnostic.filePath) ??\n asString(diagnostic.file) ??\n asString(asRecord(diagnostic.location)?.filePath) ??\n asString(asRecord(asRecord(diagnostic.location)?.path)?.file);\n const message = asString(diagnostic.message) ?? \"TypeScript error\";\n return [\n {\n code: asString(diagnostic.code) ?? undefined,\n filePath: filePath ? normalizeFilePath(filePath) : null,\n message,\n },\n ];\n });\n}\n\nfunction parseTextDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const diagnostics: ParsedDiagnostic[] = [];\n const patterns = [\n /^(.+?)\\((\\d+),(\\d+)\\): error TS(\\d+): (.+)$/gm,\n /^(.+?):(\\d+):(\\d+) - error TS(\\d+): (.+)$/gm,\n ];\n\n for (const text of extractTextCandidates(resultData)) {\n for (const pattern of patterns) {\n for (const match of text.matchAll(pattern)) {\n diagnostics.push({\n code: match[4],\n filePath: normalizeFilePath(match[1] ?? \"\"),\n message: match[5] ?? \"TypeScript error\",\n });\n }\n }\n }\n\n return diagnostics;\n}\n\nfunction parseDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const structured = parseStructuredDiagnostics(resultData);\n return structured.length > 0 ? structured : parseTextDiagnostics(resultData);\n}\n\nfunction getMatchedDiagnostics(\n contract: AnyContract,\n resultData: unknown\n): ParsedDiagnostic[] {\n const config = parseConfig(contract.condition);\n return parseDiagnostics(resultData).filter((diagnostic) =>\n somePatternMatches(diagnostic.filePath, config.filePatterns)\n );\n}\n\nexport const tscCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"tsc_checker\",\n matches({ contract, resultData }) {\n const envelope = normalizeToolResultEnvelope(resultData);\n const exitCode = asNumber(envelope.exitCode);\n if (exitCode === 0) {\n return true;\n }\n return getMatchedDiagnostics(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"tsc_checker requires TypeScript diagnostic resultData.\",\n };\n }\n\n const envelope = normalizeToolResultEnvelope(args.resultData);\n const exitCode = asNumber(envelope.exitCode);\n const matchedDiagnostics = getMatchedDiagnostics(\n args.contract,\n args.resultData\n );\n\n if (\n matchedDiagnostics.length === 0 &&\n exitCode !== 0 &&\n exitCode !== null\n ) {\n return {\n result: \"inconclusive\",\n rationale:\n \"TypeScript reported errors, but none matched the configured file patterns.\",\n };\n }\n\n const conditionSatisfied =\n exitCode === 0 || (exitCode !== null && matchedDiagnostics.length === 0);\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `TypeScript reported no matching diagnostics for ${config.filePatterns.join(\", \")}.`\n : `TypeScript found ${matchedDiagnostics.length} matching diagnostic(s): ${matchedDiagnostics\n .map((diagnostic) =>\n diagnostic.filePath\n ? `${diagnostic.filePath}${diagnostic.code ? ` (TS${diagnostic.code})` : \"\"}`\n : diagnostic.message\n )\n .join(\", \")}.`,\n data: {\n exitCode,\n filePatterns: config.filePatterns,\n matchedDiagnostics,\n },\n };\n },\n};\n","// biome-ignore lint/performance/noBarrelFile: Public compatibility facade over @lucern/contracts/v1/ontologies/v1.\nexport {\n rankEntityConnections,\n rankEntityTypeMatches,\n scoreEntityConnection,\n scoreEntityTypeMatch,\n} from \"@lucern/contracts/v1/ontologies/v1\";\n\nexport interface OntologyEntityType {\n description?: string;\n label: string;\n subtypes?: Array<{ value: string; label: string; description?: string }>;\n value: string;\n}\n\nexport interface EntityTypeMatch {\n entityType: string;\n label: string;\n reason: string;\n score: number;\n}\n\nexport interface EntityMatchCandidate {\n canonicalText: string;\n connectedBeliefCount: number;\n connectedEvidenceCount: number;\n entityType: string;\n nodeId: string;\n title: string;\n}\n\nexport interface EntityConnectionMatch {\n entityNodeId: string;\n entityType: string;\n reason: string;\n score: number;\n suggestedEdgeType: string;\n title: string;\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n// DORMANT: Ontology approval UI stubbed in EK-16.1c. Re-enable when approval workflow ships.\n\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { MutationCtx } from \"./convex\";\nimport { internalMutation, mutation, query } from \"./convex\";\n\nexport const getPendingForProject = query({\n args: v.any(),\n returns: permissiveReturn,\n handler: async () => ({ total: 0, bySource: [] }),\n});\n\nexport const getPendingForNode = query({\n args: v.any(),\n returns: permissiveReturn,\n handler: async () => [],\n});\n\nexport const getThemeOntologyMatches = query({\n args: v.any(),\n returns: permissiveReturn,\n handler: async () => [],\n});\n\nexport const createPendingLink = mutation({\n args: v.any(),\n returns: permissiveReturn,\n handler: async () => null,\n});\n\nexport const approve = mutation({\n args: v.any(),\n returns: permissiveReturn,\n handler: async () => ({ success: true }),\n});\n\nexport const reject = mutation({\n args: v.any(),\n returns: permissiveReturn,\n handler: async () => ({ success: true }),\n});\n\nexport const bulkApprove = mutation({\n args: v.any(),\n returns: permissiveReturn,\n handler: async (_ctx: MutationCtx, args: { linkIds?: unknown[] }) => ({\n approved: 0,\n total: Array.isArray(args.linkIds) ? args.linkIds.length : 0,\n }),\n});\n\nexport const bulkApproveHighConfidence = mutation({\n args: v.any(),\n returns: permissiveReturn,\n handler: async () => ({ approved: 0 }),\n});\n\nexport const createNeo4jEdge = internalMutation({\n args: v.any(),\n returns: permissiveReturn,\n handler: async () => ({ success: true }),\n});\n\nexport const batchCreatePendingLinks = internalMutation({\n args: v.any(),\n returns: permissiveReturn,\n handler: async () => ({ created: 0, autoApproved: 0 }),\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Ontology Registry\n *\n * Seeds schemaEnumConfig with platform-default entity types, subtypes,\n * and entity edge types. Provides tenant extension API.\n *\n * Categories:\n * - entity_type: Company, Person, Investor, Function, ValueChain\n * - entity_subtype: company/private, investor/vc, etc.\n * - entity_edge_type: works_at, invested_in, etc.\n *\n * @module graph-primitives/ontologyRegistry\n */\n\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx } from \"./convex\";\nimport { internalMutation, mutation } from \"./convex\";\n\n// =============================================================================\n// PLATFORM-DEFAULT ENTITY TYPES\n// =============================================================================\n\ninterface FieldSchema {\n required: boolean;\n type: \"string\" | \"number\" | \"boolean\";\n}\n\ninterface EntityTypeDefinition {\n description: string;\n label: string;\n schema: Record<string, FieldSchema>;\n value: string;\n}\n\nconst PLATFORM_ENTITY_TYPES: EntityTypeDefinition[] = [\n {\n value: \"company\",\n label: \"Company\",\n description: \"A business entity — startup, portfolio company, or corporate\",\n schema: {\n name: { type: \"string\", required: true },\n sector: { type: \"string\", required: false },\n founded_year: { type: \"number\", required: false },\n website: { type: \"string\", required: false },\n domain: { type: \"string\", required: false },\n },\n },\n {\n value: \"person\",\n label: \"Person\",\n description: \"An individual — founder, executive, or contact\",\n schema: {\n name: { type: \"string\", required: true },\n role: { type: \"string\", required: false },\n affiliation: { type: \"string\", required: false },\n linkedin: { type: \"string\", required: false },\n },\n },\n {\n value: \"investor\",\n label: \"Investor\",\n description: \"An investment entity — fund, GP, or angel\",\n schema: {\n name: { type: \"string\", required: true },\n fund_name: { type: \"string\", required: false },\n investment_focus: { type: \"string\", required: false },\n aum: { type: \"number\", required: false },\n },\n },\n {\n value: \"function\",\n label: \"Function\",\n description: \"A business function in a value chain\",\n schema: {\n name: { type: \"string\", required: true },\n description: { type: \"string\", required: false },\n },\n },\n {\n value: \"value_chain\",\n label: \"Value Chain\",\n description: \"A value chain or industry vertical\",\n schema: {\n name: { type: \"string\", required: true },\n description: { type: \"string\", required: false },\n },\n },\n];\n\n// =============================================================================\n// PLATFORM-DEFAULT ENTITY SUBTYPES\n// =============================================================================\n\ninterface SubtypeDefinition {\n label: string;\n parentType: string;\n value: string;\n}\n\nconst PLATFORM_ENTITY_SUBTYPES: SubtypeDefinition[] = [\n // Company subtypes\n { value: \"company/private\", label: \"Private Company\", parentType: \"company\" },\n { value: \"company/corporate\", label: \"Corporate\", parentType: \"company\" },\n {\n value: \"company/portfolio\",\n label: \"Portfolio Company\",\n parentType: \"company\",\n },\n // Investor subtypes\n { value: \"investor/vc\", label: \"Venture Capital\", parentType: \"investor\" },\n { value: \"investor/lp\", label: \"Limited Partner\", parentType: \"investor\" },\n { value: \"investor/cvc\", label: \"Corporate VC\", parentType: \"investor\" },\n { value: \"investor/pe\", label: \"Private Equity\", parentType: \"investor\" },\n {\n value: \"investor/family_office\",\n label: \"Family Office\",\n parentType: \"investor\",\n },\n { value: \"investor/angel\", label: \"Angel Investor\", parentType: \"investor\" },\n];\n\n// =============================================================================\n// PLATFORM-DEFAULT ENTITY EDGE TYPES\n// =============================================================================\n\ninterface EntityEdgeTypeDefinition {\n description: string;\n label: string;\n value: string;\n}\ninterface IndexRangeBuilder {\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n}\ninterface EnumConfigRow {\n _id: Id<\"schemaEnumConfig\">;\n value: string;\n}\ninterface RegisterEntityTypeArgs {\n description?: string;\n domainNamespace?: string;\n label: string;\n schema: unknown;\n tenantId: string;\n value: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readEnumConfigRow(value: unknown, context: string): EnumConfigRow {\n if (!isRecord(value)) {\n throw new Error(`${context} must be an object.`);\n }\n if (typeof value._id !== \"string\" || typeof value.value !== \"string\") {\n throw new Error(`${context} has invalid or missing _id/value.`);\n }\n return {\n _id: value._id as Id<\"schemaEnumConfig\">,\n value: value.value,\n };\n}\n\nfunction readEnumConfigRows(values: unknown[]): EnumConfigRow[] {\n return values.map((value, index) =>\n readEnumConfigRow(value, `schemaEnumConfig[${index}]`)\n );\n}\n\nconst PLATFORM_ENTITY_EDGE_TYPES: EntityEdgeTypeDefinition[] = [\n {\n value: \"works_at\",\n label: \"Works At\",\n description: \"Person → Company/Investor employment\",\n },\n {\n value: \"performs\",\n label: \"Performs\",\n description: \"Company → Function capability\",\n },\n {\n value: \"invested_in\",\n label: \"Invested In\",\n description: \"Investor → Company investment\",\n },\n {\n value: \"founded_by\",\n label: \"Founded By\",\n description: \"Company → Person founding\",\n },\n {\n value: \"participates_in\",\n label: \"Participates In\",\n description: \"Company → ValueChain participation\",\n },\n {\n value: \"function_in\",\n label: \"Function In\",\n description: \"Function → ValueChain membership\",\n },\n {\n value: \"impacts\",\n label: \"Impacts\",\n description: \"Theme → ValueChain impact\",\n },\n {\n value: \"mentioned_in\",\n label: \"Mentioned In\",\n description: \"Entity → Source reference\",\n },\n {\n value: \"competes_with\",\n label: \"Competes With\",\n description: \"Company → Company competition\",\n },\n {\n value: \"depends_on\",\n label: \"Depends On\",\n description: \"Entity → Entity dependency\",\n },\n {\n value: \"contains\",\n label: \"Contains\",\n description:\n \"Containment: ValueChain → Function, Belief/Question/Theme → Entity, Entity → Evidence\",\n },\n {\n value: \"raised_from\",\n label: \"Raised From\",\n description: \"Company → Investor fundraising\",\n },\n {\n value: \"derived_from\",\n label: \"Derived From\",\n description: \"Entity → Entity deduplication merge link (replaces same_as)\",\n },\n];\n\n// =============================================================================\n// SEED MUTATION (idempotent)\n// =============================================================================\n\nasync function upsertEnumEntry(\n ctx: MutationCtx,\n entry: {\n category: string;\n value: string;\n label: string;\n description?: string;\n tier: \"platform\" | \"tenant\";\n metadata?: Record<string, unknown>;\n sortOrder?: number;\n }\n): Promise<{ inserted: boolean }> {\n const existing = await ctx.db\n .query(\"schemaEnumConfig\")\n .withIndex(\"by_category_value\", (q: IndexRangeBuilder) =>\n q.eq(\"category\", entry.category).eq(\"value\", entry.value)\n )\n .first();\n\n if (existing) {\n return { inserted: false };\n }\n\n const now = Date.now();\n await ctx.db.insert(\"schemaEnumConfig\", {\n category: entry.category,\n value: entry.value,\n label: entry.label,\n description: entry.description,\n tier: entry.tier,\n metadata: entry.metadata,\n sortOrder: entry.sortOrder,\n status: \"active\" as const,\n createdAt: now,\n updatedAt: now,\n });\n\n return { inserted: true };\n}\n\n/**\n * Seed the ontology registry with platform-default entity types.\n * Idempotent — safe to call multiple times.\n */\nexport const seedOntologyRegistry = internalMutation({\n args: {},\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx) => {\n let inserted = 0;\n let skipped = 0;\n\n // Seed entity types\n for (let i = 0; i < PLATFORM_ENTITY_TYPES.length; i++) {\n const entityType = PLATFORM_ENTITY_TYPES[i];\n const result = await upsertEnumEntry(ctx, {\n category: \"entity_type\",\n value: entityType.value,\n label: entityType.label,\n description: entityType.description,\n tier: \"platform\",\n metadata: { schema: entityType.schema },\n sortOrder: i + 1,\n });\n if (result.inserted) {\n inserted++;\n } else {\n skipped++;\n }\n }\n\n // Seed entity subtypes\n for (let i = 0; i < PLATFORM_ENTITY_SUBTYPES.length; i++) {\n const subtype = PLATFORM_ENTITY_SUBTYPES[i];\n const result = await upsertEnumEntry(ctx, {\n category: \"entity_subtype\",\n value: subtype.value,\n label: subtype.label,\n tier: \"platform\",\n metadata: { parentType: subtype.parentType },\n sortOrder: i + 1,\n });\n if (result.inserted) {\n inserted++;\n } else {\n skipped++;\n }\n }\n\n // Seed entity edge types\n for (let i = 0; i < PLATFORM_ENTITY_EDGE_TYPES.length; i++) {\n const edgeType = PLATFORM_ENTITY_EDGE_TYPES[i];\n const result = await upsertEnumEntry(ctx, {\n category: \"entity_edge_type\",\n value: edgeType.value,\n label: edgeType.label,\n description: edgeType.description,\n tier: \"platform\",\n sortOrder: i + 1,\n });\n if (result.inserted) {\n inserted++;\n } else {\n skipped++;\n }\n }\n\n return { inserted, skipped, total: inserted + skipped };\n },\n});\n\n// =============================================================================\n// TENANT EXTENSION API\n// =============================================================================\n\n/**\n * Register a new entity type for a tenant.\n * Creates a schemaEnumConfig entry with tier='tenant'.\n */\nexport const registerEntityType = mutation({\n args: {\n tenantId: v.string(),\n value: v.string(),\n label: v.string(),\n description: v.optional(v.string()),\n schema: v.any(), // Record<string, { type, required }>\n domainNamespace: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: RegisterEntityTypeArgs) => {\n // Auth guard — tenant mutations require authenticated user\n const userId = await getCurrentUserId(ctx);\n if (!userId) {\n throw new Error(\"Authentication required to register entity types.\");\n }\n\n // Check for existing entry with same value\n const existing = readEnumConfigRows(\n await ctx.db\n .query(\"schemaEnumConfig\")\n .withIndex(\"by_tenant_category\", (q: IndexRangeBuilder) =>\n q.eq(\"tenantId\", args.tenantId).eq(\"category\", \"entity_type\")\n )\n .collect()\n );\n\n const duplicate = existing.find(\n (e: EnumConfigRow) => e.value === args.value\n );\n if (duplicate) {\n throw new Error(\n `Entity type \"${args.value}\" already registered for tenant ${args.tenantId}`\n );\n }\n\n const now = Date.now();\n const id = await ctx.db.insert(\"schemaEnumConfig\", {\n tenantId: args.tenantId,\n category: \"entity_type\",\n value: args.value,\n label: args.label,\n description: args.description,\n tier: \"tenant\" as const,\n domainNamespace: args.domainNamespace,\n metadata: { schema: args.schema },\n status: \"active\" as const,\n createdAt: now,\n updatedAt: now,\n });\n\n return { id, value: args.value };\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Projection Reconciliation Runtime\n *\n * Phase 2 (WT-C) runtime hooks for Convex-authoritative / Neo4j-projected\n * reconciliation health and endpoint-class staleness evaluation.\n */\n\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { ActionCtx, QueryCtx } from \"./convex\";\nimport { internal, internalAction, internalQuery, query } from \"./convex\";\nimport {\n evaluateProjectionStaleness,\n type ProjectionEndpointClass,\n} from \"./projectionStaleness\";\n\ntype QueueStatus = \"pending\" | \"in_progress\" | \"failed\" | \"succeeded\";\n\ninterface QueueRow {\n createdAt: number;\n status: QueueStatus;\n updatedAt: number;\n}\n\ninterface IndexQueryBuilder {\n eq(field: string, value: unknown): IndexQueryBuilder;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readQueueStatus(value: unknown, context: string): QueueStatus {\n if (\n value !== \"pending\" &&\n value !== \"in_progress\" &&\n value !== \"failed\" &&\n value !== \"succeeded\"\n ) {\n throw new Error(`${context} has invalid or missing status.`);\n }\n return value;\n}\n\nfunction readFiniteNumber(\n row: Record<string, unknown>,\n field: \"createdAt\" | \"updatedAt\",\n context: string\n): number {\n const value = row[field];\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw new Error(`${context} has invalid or missing ${field}.`);\n }\n return value;\n}\n\nfunction readQueueRow(value: unknown, context: string): QueueRow {\n if (!isRecord(value)) {\n throw new Error(`${context} must be an object.`);\n }\n return {\n createdAt: readFiniteNumber(value, \"createdAt\", context),\n status: readQueueStatus(value.status, context),\n updatedAt: readFiniteNumber(value, \"updatedAt\", context),\n };\n}\n\nfunction readQueueRows(values: unknown[], context: string): QueueRow[] {\n return values.map((value, index) =>\n readQueueRow(value, `${context}[${index}]`)\n );\n}\n\nasync function getQueueRowsByStatus(\n ctx: QueryCtx,\n status: QueueStatus\n): Promise<QueueRow[]> {\n return readQueueRows(\n await ctx.db\n .query(\"neo4jSyncQueue\")\n .withIndex(\"by_status\", (q: IndexQueryBuilder) => q.eq(\"status\", status))\n .collect(),\n `neo4jSyncQueue.${status}`\n );\n}\n\nfunction maxTimestamp(\n rows: QueueRow[],\n field: \"createdAt\" | \"updatedAt\"\n): number | undefined {\n let maxValue: number | undefined;\n for (const row of rows) {\n const value = row[field];\n if (!Number.isFinite(value)) {\n continue;\n }\n if (maxValue === undefined || value > maxValue) {\n maxValue = value;\n }\n }\n return maxValue;\n}\n\nfunction minTimestamp(\n rows: QueueRow[],\n field: \"createdAt\" | \"updatedAt\"\n): number | undefined {\n let minValue: number | undefined;\n for (const row of rows) {\n const value = row[field];\n if (!Number.isFinite(value)) {\n continue;\n }\n if (minValue === undefined || value < minValue) {\n minValue = value;\n }\n }\n return minValue;\n}\n\nasync function getQueueSnapshot(ctx: QueryCtx) {\n const [pendingRows, inProgressRows, failedRows, succeededRows] =\n await Promise.all([\n getQueueRowsByStatus(ctx, \"pending\"),\n getQueueRowsByStatus(ctx, \"in_progress\"),\n getQueueRowsByStatus(ctx, \"failed\"),\n getQueueRowsByStatus(ctx, \"succeeded\"),\n ]);\n\n const now = Date.now();\n const backlogOldestCreatedAt = minTimestamp(\n [...pendingRows, ...inProgressRows],\n \"createdAt\"\n );\n const queueBacklogAgeMs =\n backlogOldestCreatedAt === undefined\n ? 0\n : Math.max(0, now - backlogOldestCreatedAt);\n const lastSuccessfulSyncAt = maxTimestamp(succeededRows, \"updatedAt\");\n\n return {\n now,\n queuePendingCount: pendingRows.length,\n queueInProgressCount: inProgressRows.length,\n queueFailedCount: failedRows.length,\n queueSucceededCount: succeededRows.length,\n queueBacklogAgeMs,\n backlogOldestCreatedAt,\n lastSuccessfulSyncAt,\n };\n}\n\nfunction buildEndpointAssessments(\n snapshot: Awaited<ReturnType<typeof getQueueSnapshot>>\n) {\n const analytics = evaluateProjectionStaleness({\n endpointClass: \"analytics\",\n queueBacklogAgeMs: snapshot.queueBacklogAgeMs,\n queuePendingCount:\n snapshot.queuePendingCount + snapshot.queueInProgressCount,\n queueFailedCount: snapshot.queueFailedCount,\n nowMs: snapshot.now,\n lastSuccessfulSyncAt: snapshot.lastSuccessfulSyncAt,\n });\n const traversal = evaluateProjectionStaleness({\n endpointClass: \"traversal\",\n queueBacklogAgeMs: snapshot.queueBacklogAgeMs,\n queuePendingCount:\n snapshot.queuePendingCount + snapshot.queueInProgressCount,\n queueFailedCount: snapshot.queueFailedCount,\n nowMs: snapshot.now,\n lastSuccessfulSyncAt: snapshot.lastSuccessfulSyncAt,\n });\n const entityRead = evaluateProjectionStaleness({\n endpointClass: \"entity_read\",\n queueBacklogAgeMs: snapshot.queueBacklogAgeMs,\n queuePendingCount:\n snapshot.queuePendingCount + snapshot.queueInProgressCount,\n queueFailedCount: snapshot.queueFailedCount,\n nowMs: snapshot.now,\n lastSuccessfulSyncAt: snapshot.lastSuccessfulSyncAt,\n });\n const nonGraph = evaluateProjectionStaleness({\n endpointClass: \"non_graph\",\n queueBacklogAgeMs: snapshot.queueBacklogAgeMs,\n queuePendingCount:\n snapshot.queuePendingCount + snapshot.queueInProgressCount,\n queueFailedCount: snapshot.queueFailedCount,\n nowMs: snapshot.now,\n lastSuccessfulSyncAt: snapshot.lastSuccessfulSyncAt,\n });\n\n return {\n analytics,\n traversal,\n entityRead,\n nonGraph,\n };\n}\n\nfunction buildProjectionReconciliationStatus(\n snapshot: Awaited<ReturnType<typeof getQueueSnapshot>>\n) {\n return {\n ...snapshot,\n endpointAssessments: buildEndpointAssessments(snapshot),\n generatedAt: snapshot.now,\n };\n}\n\nfunction assertAuthenticated(clerkId: string | null): string {\n if (!clerkId) {\n throw new Error(\"Authentication required\");\n }\n return clerkId;\n}\n\nexport const getProjectionReconciliationStatusInternal = internalQuery({\n args: {},\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx) => {\n const snapshot = await getQueueSnapshot(ctx);\n return buildProjectionReconciliationStatus(snapshot);\n },\n});\n\nexport const getProjectionReconciliationStatus = query({\n args: {},\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx) => {\n assertAuthenticated(await getCurrentUserId(ctx));\n const snapshot = await getQueueSnapshot(ctx);\n return buildProjectionReconciliationStatus(snapshot);\n },\n});\n\nexport const assessProjectionStaleness = query({\n args: {\n endpointClass: v.union(\n v.literal(\"analytics\"),\n v.literal(\"traversal\"),\n v.literal(\"entity_read\"),\n v.literal(\"non_graph\")\n ),\n },\n returns: permissiveReturn,\n handler: async (\n ctx: QueryCtx,\n args: { endpointClass: ProjectionEndpointClass }\n ) => {\n assertAuthenticated(await getCurrentUserId(ctx));\n const snapshot = await getQueueSnapshot(ctx);\n const endpointClass = args.endpointClass as ProjectionEndpointClass;\n\n return {\n endpointClass,\n assessment: evaluateProjectionStaleness({\n endpointClass,\n queueBacklogAgeMs: snapshot.queueBacklogAgeMs,\n queuePendingCount:\n snapshot.queuePendingCount + snapshot.queueInProgressCount,\n queueFailedCount: snapshot.queueFailedCount,\n nowMs: snapshot.now,\n lastSuccessfulSyncAt: snapshot.lastSuccessfulSyncAt,\n }),\n snapshot,\n };\n },\n});\n\nexport const runProjectionRepairCycle = internalAction({\n args: {\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: ActionCtx, args: { limit?: number }) => {\n const processed = await ctx.runAction(\n internal.neo4jSync.processRetryQueue,\n {\n limit: args.limit ?? 25,\n }\n );\n const status = await ctx.runQuery(\n internal.projectionReconciliation\n .getProjectionReconciliationStatusInternal,\n {}\n );\n\n return {\n processed,\n status,\n runAt: Date.now(),\n };\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * projectionStaleness module implementation.\n */\n\nexport type ProjectionEndpointClass =\n | \"analytics\"\n | \"traversal\"\n | \"entity_read\"\n | \"non_graph\";\n\nexport type ProjectionFallbackMode =\n | \"fail_with_503\"\n | \"degrade_to_convex_depth_limited\"\n | \"fallback_to_convex_entity_read\"\n | \"none\";\n\nexport interface ProjectionStalenessPolicy {\n endpointClass: ProjectionEndpointClass;\n fallbackMode: ProjectionFallbackMode;\n nonOverridable: true;\n thresholdMs: number;\n}\n\nexport interface ProjectionStalenessInput {\n endpointClass: ProjectionEndpointClass;\n lastSuccessfulSyncAt?: number;\n nowMs?: number;\n queueBacklogAgeMs: number;\n queueFailedCount: number;\n queuePendingCount: number;\n}\n\nexport interface ProjectionStalenessEnvelope {\n endpointClass: ProjectionEndpointClass;\n evaluatedAt: number;\n fallbackMode: ProjectionFallbackMode;\n isStale: boolean;\n lastSuccessfulSyncAgeMs?: number;\n lastSuccessfulSyncAt?: number;\n queueFailedCount: number;\n queuePendingCount: number;\n reasonCode:\n | \"PROJECTION_HEALTHY\"\n | \"PROJECTION_STALE\"\n | \"PROJECTION_STALE_WITH_FAILED_RETRIES\";\n stalenessMs: number;\n thresholdMs: number;\n}\n\nexport const PROJECTION_STALENESS_POLICIES: Record<\n ProjectionEndpointClass,\n ProjectionStalenessPolicy\n> = {\n analytics: {\n endpointClass: \"analytics\",\n thresholdMs: 30_000,\n fallbackMode: \"fail_with_503\",\n nonOverridable: true,\n },\n traversal: {\n endpointClass: \"traversal\",\n thresholdMs: 60_000,\n fallbackMode: \"degrade_to_convex_depth_limited\",\n nonOverridable: true,\n },\n entity_read: {\n endpointClass: \"entity_read\",\n thresholdMs: 5 * 60_000,\n fallbackMode: \"fallback_to_convex_entity_read\",\n nonOverridable: true,\n },\n non_graph: {\n endpointClass: \"non_graph\",\n thresholdMs: Number.POSITIVE_INFINITY,\n fallbackMode: \"none\",\n nonOverridable: true,\n },\n};\n\nexport function getProjectionStalenessPolicy(\n endpointClass: ProjectionEndpointClass\n): ProjectionStalenessPolicy {\n return PROJECTION_STALENESS_POLICIES[endpointClass];\n}\n\nexport function evaluateProjectionStaleness(\n input: ProjectionStalenessInput\n): ProjectionStalenessEnvelope {\n const policy = getProjectionStalenessPolicy(input.endpointClass);\n const evaluatedAt = input.nowMs ?? Date.now();\n const stalenessMs = Math.max(0, input.queueBacklogAgeMs);\n const isStale = stalenessMs > policy.thresholdMs;\n const lastSuccessfulSyncAgeMs =\n input.lastSuccessfulSyncAt === undefined\n ? undefined\n : Math.max(0, evaluatedAt - input.lastSuccessfulSyncAt);\n\n return {\n endpointClass: input.endpointClass,\n stalenessMs,\n thresholdMs: policy.thresholdMs,\n isStale,\n fallbackMode: policy.fallbackMode,\n queuePendingCount: input.queuePendingCount,\n queueFailedCount: input.queueFailedCount,\n evaluatedAt,\n lastSuccessfulSyncAt: input.lastSuccessfulSyncAt,\n lastSuccessfulSyncAgeMs,\n reasonCode: projectionStalenessReasonCode(isStale, input.queueFailedCount),\n };\n}\n\nfunction projectionStalenessReasonCode(\n isStale: boolean,\n queueFailedCount: number\n): ProjectionStalenessEnvelope[\"reasonCode\"] {\n if (!isStale) {\n return \"PROJECTION_HEALTHY\";\n }\n return queueFailedCount > 0\n ? \"PROJECTION_STALE_WITH_FAILED_RETRIES\"\n : \"PROJECTION_STALE\";\n}\n\nexport function shouldFailClosedForProjection(\n envelope: ProjectionStalenessEnvelope\n): boolean {\n return envelope.isStale && envelope.fallbackMode === \"fail_with_503\";\n}\n","/**\n * questionEvidenceLinks module implementation.\n */\n// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n\nimport { checkProjectAccess } from \"@lucern/access-control/access\";\nimport { generateUuidV7 } from \"@lucern/contracts/ids\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal, mutation, query } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport {\n deriveMatcherReviewStatus,\n isOperationalLinkStatus,\n type LinkSuggestionStatus,\n mergeLinkSuggestionStatus,\n resolveReviewedLinkStatus,\n} from \"./matcherFeedbackUtils\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\n\nconst questionIdUnion = v.id(\"epistemicNodes\");\nconst insightIdUnion = v.id(\"epistemicNodes\");\nconst suggestionStatusValidator = v.union(\n v.literal(\"suggested\"),\n v.literal(\"approved\"),\n v.literal(\"dismissed\")\n);\nconst matcherMetadataValidator = v.object({\n surface: v.string(),\n matcherFamily: v.optional(v.string()),\n matcherKey: v.optional(v.string()),\n matcherVersion: v.optional(v.string()),\n reviewStatus: v.optional(\n v.union(\n v.literal(\"pending\"),\n v.literal(\"accepted\"),\n v.literal(\"rejected\"),\n v.literal(\"auto_accepted\"),\n v.literal(\"superseded\")\n )\n ),\n configSnapshot: v.optional(v.any()),\n signalSnapshot: v.optional(v.any()),\n outcomeMetadata: v.optional(v.any()),\n});\n\ninterface MatcherMetadata {\n configSnapshot?: unknown;\n matcherFamily?: string;\n matcherKey?: string;\n matcherVersion?: string;\n outcomeMetadata?: unknown;\n reviewStatus?:\n | \"pending\"\n | \"accepted\"\n | \"rejected\"\n | \"auto_accepted\"\n | \"superseded\";\n signalSnapshot?: unknown;\n surface: string;\n}\n\ntype EvidenceImpact = \"supports\" | \"contradicts\" | \"neutral\";\n\ninterface QuestionEvidenceLinkRow {\n _id: Id<\"questionEvidenceLinks\">;\n createdAt: number;\n createdBy: string;\n helpsAnswer: boolean;\n impact?: EvidenceImpact;\n impactScore?: number;\n insightId: Id<\"epistemicNodes\">;\n questionId: Id<\"epistemicNodes\">;\n rationale?: string;\n relevance?: number;\n status?: LinkSuggestionStatus;\n}\n\ninterface QuestionEvidenceLinkWithInsight extends QuestionEvidenceLinkRow {\n insight: EpistemicNodeRow | null;\n}\n\ninterface EpistemicNodeRow {\n _creationTime?: number;\n _id: Id<\"epistemicNodes\">;\n canonicalText?: string;\n createdAt?: number;\n globalId?: string;\n metadata?: Record<string, unknown>;\n nodeType?: string;\n projectId?: string;\n status?: string;\n title?: string;\n topicId?: string | Id<\"topics\">;\n verificationStatus?: string;\n}\n\ninterface EpistemicEdgeRow {\n _id: Id<\"epistemicEdges\">;\n context?: string;\n createdAt: number;\n createdBy?: string;\n fromGlobalId?: string;\n fromNodeId?: Id<\"epistemicNodes\">;\n globalId?: string;\n weight?: number;\n}\n\ninterface EvidenceEdgeDetail {\n _creationTime: number;\n _id: Id<\"epistemicEdges\">;\n createdAt: number;\n impact?: EvidenceImpact;\n impactScore: number;\n insight: {\n _id: Id<\"epistemicNodes\">;\n _creationTime: number | undefined;\n insight: string | null;\n text: string | null;\n title: string | null;\n canonicalText: string | null;\n source: string | null;\n sourceUrl: string | null;\n verificationStatus: string;\n };\n insightId: Id<\"epistemicNodes\">;\n questionId: Id<\"epistemicNodes\">;\n rationale: string | null;\n userId: string | undefined;\n}\n\ninterface CreateQuestionEvidenceLinkArgs {\n createdBy: string;\n helpsAnswer: boolean;\n impact?: EvidenceImpact;\n impactScore?: number;\n insightId: Id<\"epistemicNodes\">;\n matcherMetadata?: MatcherMetadata;\n questionId: Id<\"epistemicNodes\">;\n rationale?: string;\n relevance?: number;\n status?: LinkSuggestionStatus;\n}\n\ninterface UpdateImpactArgs {\n impact?: EvidenceImpact;\n impactScore?: number;\n linkId: Id<\"questionEvidenceLinks\">;\n userId: string;\n}\n\ninterface ReviewSuggestionArgs {\n linkId: Id<\"questionEvidenceLinks\">;\n reason?: string;\n status: \"approved\" | \"dismissed\";\n userId: string;\n}\n\ninterface RemoveQuestionEvidenceLinkArgs {\n linkId: Id<\"questionEvidenceLinks\">;\n userId: string;\n}\n\ninterface QuestionEvidenceByQuestionArgs {\n questionId: Id<\"epistemicNodes\">;\n}\n\ninterface QuestionEvidenceByInsightArgs {\n insightId: Id<\"epistemicNodes\">;\n}\n\ninterface ProjectQuestionEvidenceArgs {\n limit?: number;\n projectId?: string;\n topicId?: string;\n userId: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n return typeof value === \"string\" && value.length > 0\n ? (value as Id<TableName>)\n : null;\n}\n\nfunction readOptionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readRequiredNumber(value: unknown, fieldName: string): number {\n const numberValue = readOptionalNumber(value);\n if (numberValue === undefined) {\n throw new Error(`questionEvidenceLinks row has invalid ${fieldName}.`);\n }\n return numberValue;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === \"string\")\n : [];\n}\n\nfunction readLinkSuggestionStatus(\n value: unknown\n): LinkSuggestionStatus | undefined {\n if (value === undefined) {\n return;\n }\n if (value === \"suggested\" || value === \"approved\" || value === \"dismissed\") {\n return value;\n }\n throw new Error(\"questionEvidenceLinks row has invalid status.\");\n}\n\nfunction readEvidenceImpact(value: unknown): EvidenceImpact | undefined {\n if (value === undefined) {\n return;\n }\n if (value === \"supports\" || value === \"contradicts\" || value === \"neutral\") {\n return value;\n }\n throw new Error(\"questionEvidenceLinks row has invalid impact.\");\n}\n\nfunction readMatcherReviewStatus(\n value: unknown\n): MatcherMetadata[\"reviewStatus\"] {\n if (value === undefined) {\n return;\n }\n if (\n value === \"pending\" ||\n value === \"accepted\" ||\n value === \"rejected\" ||\n value === \"auto_accepted\" ||\n value === \"superseded\"\n ) {\n return value;\n }\n throw new Error(\"matcher metadata has invalid reviewStatus.\");\n}\n\nfunction readMatcherMetadata(value: unknown): MatcherMetadata | undefined {\n if (value === undefined) {\n return;\n }\n if (!isRecord(value) || typeof value.surface !== \"string\") {\n throw new Error(\"matcher metadata must include a string surface.\");\n }\n return {\n configSnapshot: value.configSnapshot,\n matcherFamily: readOptionalString(value.matcherFamily),\n matcherKey: readOptionalString(value.matcherKey),\n matcherVersion: readOptionalString(value.matcherVersion),\n outcomeMetadata: value.outcomeMetadata,\n reviewStatus: readMatcherReviewStatus(value.reviewStatus),\n signalSnapshot: value.signalSnapshot,\n surface: value.surface,\n };\n}\n\nfunction readMetadata(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nfunction readEpistemicNode(value: unknown): EpistemicNodeRow | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = readConvexId<\"epistemicNodes\">(value._id);\n if (!id) {\n return null;\n }\n return {\n _creationTime: readOptionalNumber(value._creationTime),\n _id: id,\n canonicalText: readOptionalString(value.canonicalText),\n createdAt: readOptionalNumber(value.createdAt),\n globalId: readOptionalString(value.globalId),\n metadata: readMetadata(value.metadata),\n nodeType: readOptionalString(value.nodeType),\n projectId: readOptionalString(value.projectId),\n status: readOptionalString(value.status),\n title: readOptionalString(value.title),\n topicId: readOptionalString(value.topicId) as string | Id<\"topics\">,\n verificationStatus: readOptionalString(value.verificationStatus),\n };\n}\n\nfunction requireEpistemicNode(\n value: unknown,\n message: string\n): EpistemicNodeRow {\n const node = readEpistemicNode(value);\n if (!node) {\n throw new Error(message);\n }\n return node;\n}\n\nfunction readQuestionEvidenceLink(\n value: unknown,\n context = \"questionEvidenceLinks row\"\n): QuestionEvidenceLinkRow {\n if (!isRecord(value)) {\n throw new Error(`${context} must be an object.`);\n }\n const id = readConvexId<\"questionEvidenceLinks\">(value._id);\n const questionId = readConvexId<\"epistemicNodes\">(value.questionId);\n const insightId = readConvexId<\"epistemicNodes\">(value.insightId);\n const createdBy = readOptionalString(value.createdBy);\n if (!(id && questionId && insightId && createdBy)) {\n throw new Error(`${context} has invalid required identifiers.`);\n }\n if (typeof value.helpsAnswer !== \"boolean\") {\n throw new Error(`${context} has invalid helpsAnswer.`);\n }\n return {\n _id: id,\n createdAt: readRequiredNumber(value.createdAt, \"createdAt\"),\n createdBy,\n helpsAnswer: value.helpsAnswer,\n impact: readEvidenceImpact(value.impact),\n impactScore: readOptionalNumber(value.impactScore),\n insightId,\n questionId,\n rationale: readOptionalString(value.rationale),\n relevance: readOptionalNumber(value.relevance),\n status: readLinkSuggestionStatus(value.status),\n };\n}\n\nfunction readQuestionEvidenceLinks(\n values: unknown[]\n): QuestionEvidenceLinkRow[] {\n return values.map((value, index) =>\n readQuestionEvidenceLink(value, `questionEvidenceLinks[${index}]`)\n );\n}\n\nfunction readEpistemicEdge(value: unknown): EpistemicEdgeRow | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = readConvexId<\"epistemicEdges\">(value._id);\n const createdAt = readOptionalNumber(value.createdAt);\n if (!(id && createdAt !== undefined)) {\n return null;\n }\n return {\n _id: id,\n context: readOptionalString(value.context),\n createdAt,\n createdBy: readOptionalString(value.createdBy),\n fromGlobalId: readOptionalString(value.fromGlobalId),\n fromNodeId: readConvexId<\"epistemicNodes\">(value.fromNodeId) ?? undefined,\n globalId: readOptionalString(value.globalId),\n weight: readOptionalNumber(value.weight),\n };\n}\n\nasync function fetchOperationalQuestionEvidenceLinks(\n ctx: QueryCtx,\n questionId: Id<\"epistemicNodes\">\n): Promise<QuestionEvidenceLinkWithInsight[]> {\n const links = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", questionId))\n .collect()\n );\n\n return await Promise.all(\n links\n .filter((link) => isOperationalLinkStatus(link.status))\n .map(async (link) => {\n const insight = readEpistemicNode(await ctx.db.get(link.insightId));\n return {\n ...link,\n insight,\n };\n })\n );\n}\n\nfunction calculateEdgeImpact(edgeWeight: number | undefined): number {\n return edgeWeight == null ? 0 : Math.round(edgeWeight * 10);\n}\n\nasync function buildEvidenceDetailFromEdge(\n ctx: QueryCtx,\n edge: EpistemicEdgeRow,\n questionId: Id<\"epistemicNodes\">,\n seenEvidenceIds: Set<string>\n): Promise<EvidenceEdgeDetail | null> {\n if (!edge.fromNodeId) {\n return null;\n }\n\n const fromNodeId = String(edge.fromNodeId);\n if (seenEvidenceIds.has(fromNodeId)) {\n return null;\n }\n seenEvidenceIds.add(fromNodeId);\n\n const evidenceNode = readEpistemicNode(await ctx.db.get(edge.fromNodeId));\n if (\n evidenceNode?.nodeType !== \"evidence\" ||\n evidenceNode.status !== \"active\"\n ) {\n return null;\n }\n\n const meta = evidenceNode.metadata || {};\n const impactScore = calculateEdgeImpact(edge.weight);\n\n return {\n _id: edge._id,\n _creationTime: edge.createdAt,\n questionId,\n insightId: edge.fromNodeId,\n impact: deriveImpact(impactScore, undefined),\n impactScore,\n rationale: edge.context ?? null,\n userId: edge.createdBy,\n createdAt: edge.createdAt,\n insight: {\n _id: evidenceNode._id,\n _creationTime: evidenceNode.createdAt,\n insight:\n evidenceNode.canonicalText ||\n evidenceNode.title ||\n readOptionalString(meta.snippet) ||\n null,\n text:\n evidenceNode.canonicalText ||\n evidenceNode.title ||\n readOptionalString(meta.snippet) ||\n null,\n title: evidenceNode.title ?? null,\n canonicalText: evidenceNode.canonicalText ?? null,\n source: readOptionalString(meta.sourceTitle) ?? null,\n sourceUrl: readOptionalString(meta.sourceUrl) ?? null,\n verificationStatus: evidenceNode.verificationStatus ?? \"unverified\",\n },\n };\n}\n\nasync function fetchDerivedFromEdgesWithDetails(\n ctx: QueryCtx,\n questionId: Id<\"epistemicNodes\">,\n seenEvidenceIds: Set<string>\n): Promise<EvidenceEdgeDetail[]> {\n const edges = (\n await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", questionId).eq(\"edgeType\", \"derived_from\")\n )\n .collect()\n ).flatMap((edge) => {\n const edgeRow = readEpistemicEdge(edge);\n return edgeRow ? [edgeRow] : [];\n });\n\n const rows: EvidenceEdgeDetail[] = [];\n for (const edge of edges) {\n const edgeRow = await buildEvidenceDetailFromEdge(\n ctx,\n edge,\n questionId,\n seenEvidenceIds\n );\n if (edgeRow) {\n rows.push(edgeRow);\n }\n }\n\n return rows;\n}\n\nfunction deriveImpact(\n impactScore: number | undefined,\n fallback: \"supports\" | \"contradicts\" | \"neutral\" | undefined\n): \"supports\" | \"contradicts\" | \"neutral\" | undefined {\n if (impactScore === undefined) {\n return fallback;\n }\n if (impactScore > 0) {\n return \"supports\";\n }\n if (impactScore < 0) {\n return \"contradicts\";\n }\n return \"neutral\";\n}\n\nfunction readEpistemicMetadata(\n node: Pick<EpistemicNodeRow, \"metadata\"> | null | undefined\n): Record<string, unknown> {\n return node?.metadata ?? {};\n}\n\nasync function markProjectGraphDirty(\n ctx: MutationCtx,\n projectId: string | undefined | null\n): Promise<void> {\n if (!projectId) {\n return;\n }\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n { projectId }\n );\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(ctx, projectId, {\n lastActivityAt: Date.now(),\n });\n}\n\nasync function recordMatcherDecision(\n ctx: MutationCtx,\n args: {\n questionNode: EpistemicNodeRow;\n questionId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n linkId: string;\n linkStatus?: LinkSuggestionStatus;\n matcherMetadata?: MatcherMetadata;\n reviewedBy?: string;\n decisionReason?: string;\n }\n): Promise<void> {\n if (!args.matcherMetadata) {\n return;\n }\n\n await ctx.runMutation(\"matcherFeedback:recordDecision\", {\n projectId: args.questionNode.projectId,\n topicId: args.questionNode.topicId,\n surface: args.matcherMetadata.surface,\n matcherFamily: args.matcherMetadata.matcherFamily,\n matcherKey: args.matcherMetadata.matcherKey,\n matcherVersion: args.matcherMetadata.matcherVersion,\n sourceEntityId: String(args.insightId),\n targetEntityId: String(args.questionId),\n suggestionTable: \"questionEvidenceLinks\",\n suggestionId: args.linkId,\n reviewStatus: deriveMatcherReviewStatus({\n explicitReviewStatus: args.matcherMetadata.reviewStatus,\n linkStatus: args.linkStatus,\n }),\n reviewedBy: args.reviewedBy,\n decisionReason: args.decisionReason,\n configSnapshot: args.matcherMetadata.configSnapshot,\n signalSnapshot: args.matcherMetadata.signalSnapshot,\n outcomeMetadata: args.matcherMetadata.outcomeMetadata,\n });\n}\n\nasync function applyOperationalLinkEffects(\n ctx: MutationCtx,\n args: {\n questionNode: EpistemicNodeRow;\n questionId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n relevance?: number;\n rationale?: string;\n createdBy: string;\n }\n): Promise<void> {\n const meta = readEpistemicMetadata(args.questionNode);\n const currentRelated = readStringArray(meta.relatedInsightIds);\n if (!currentRelated.includes(args.insightId)) {\n await ctx.db.patch(args.questionId, {\n updatedAt: Date.now(),\n metadata: {\n ...meta,\n relatedInsightIds: [...currentRelated, args.insightId],\n },\n });\n }\n\n try {\n const questionNode = readEpistemicNode(await ctx.db.get(args.questionId));\n const evidenceNode = readEpistemicNode(await ctx.db.get(args.insightId));\n\n if (\n questionNode &&\n questionNode.nodeType === \"question\" &&\n evidenceNode &&\n evidenceNode.nodeType === \"evidence\" &&\n questionNode.globalId &&\n evidenceNode.globalId\n ) {\n const existingEdge = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q\n .eq(\"fromNodeId\", evidenceNode.globalId)\n .eq(\"toNodeId\", questionNode.globalId)\n )\n .first();\n\n if (!existingEdge) {\n const globalId = generateUuidV7();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId,\n fromGlobalId: evidenceNode.globalId,\n toGlobalId: questionNode.globalId,\n edgeType: \"derived_from\",\n weight: args.relevance ?? 0.5,\n context: args.rationale ?? \"Linked from question evidence links\",\n projectId: args.questionNode.projectId\n ? String(args.questionNode.projectId)\n : undefined,\n createdBy: args.createdBy,\n fromNodeType: \"evidence\",\n toNodeType: \"question\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n }\n }\n } catch (e) {\n console.error(\"[EpistemicSpine] Failed to create derived_from edge:\", e);\n }\n\n if (args.questionNode.projectId) {\n await ctx.scheduler.runAfter(0, \"verificationActions:deepVerifyEvidence\", {\n insightId: args.insightId,\n targetType: \"question\",\n targetId: args.questionId,\n projectId: args.questionNode.projectId,\n userId: args.createdBy,\n });\n }\n}\n\nasync function removeOperationalLinkEffects(\n ctx: MutationCtx,\n args: {\n questionId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n }\n): Promise<void> {\n const question = readEpistemicNode(await ctx.db.get(args.questionId));\n if (question) {\n const meta = readEpistemicMetadata(question);\n const currentRelated = readStringArray(meta.relatedInsightIds);\n await ctx.db.patch(args.questionId, {\n updatedAt: Date.now(),\n metadata: {\n ...meta,\n relatedInsightIds: currentRelated.filter((id) => id !== args.insightId),\n },\n });\n }\n\n try {\n const questionNode = readEpistemicNode(await ctx.db.get(args.questionId));\n const evidenceNode = readEpistemicNode(await ctx.db.get(args.insightId));\n\n if (\n questionNode &&\n questionNode.nodeType === \"question\" &&\n evidenceNode &&\n evidenceNode.nodeType === \"evidence\"\n ) {\n const edge = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", evidenceNode._id).eq(\"toNodeId\", questionNode._id)\n )\n .first();\n\n const edgeRow = readEpistemicEdge(edge);\n if (edgeRow?.globalId) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edgeRow.globalId,\n });\n await ctx.db.delete(edgeRow._id);\n }\n }\n } catch (e) {\n console.error(\"[EpistemicSpine] Failed to remove edge:\", e);\n }\n}\n\n/**\n * Question Evidence Links Management\n *\n * Links evidence (insights) to questions to track what evidence helps answer which questions.\n */\n\nexport const create = mutation({\n args: {\n questionId: questionIdUnion,\n insightId: insightIdUnion,\n helpsAnswer: v.boolean(),\n relevance: v.optional(v.number()),\n rationale: v.optional(v.string()),\n impactScore: v.optional(v.number()),\n impact: v.optional(\n v.union(\n v.literal(\"supports\"),\n v.literal(\"contradicts\"),\n v.literal(\"neutral\")\n )\n ),\n status: v.optional(suggestionStatusValidator),\n matcherMetadata: v.optional(matcherMetadataValidator),\n createdBy: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: CreateQuestionEvidenceLinkArgs) => {\n const matcherMetadata = readMatcherMetadata(args.matcherMetadata);\n const question = requireEpistemicNode(\n await ctx.db.get(args.questionId),\n \"Question not found\"\n );\n if (question.nodeType !== \"question\") {\n throw new Error(\"Question not found\");\n }\n\n const insight = requireEpistemicNode(\n await ctx.db.get(args.insightId),\n \"Insight not found\"\n );\n if (insight.nodeType !== \"evidence\") {\n throw new Error(\"Insight not found\");\n }\n\n const existingLinks = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", args.questionId))\n .collect()\n );\n\n const duplicate = existingLinks.find(\n (link) => link.insightId === args.insightId\n );\n\n const impactScore = args.impactScore;\n const derivedImpact = deriveImpact(impactScore, args.impact);\n\n if (duplicate) {\n const nextStatus = mergeLinkSuggestionStatus(\n duplicate.status,\n args.status\n );\n\n await ctx.db.patch(duplicate._id, {\n helpsAnswer: args.helpsAnswer,\n relevance: args.relevance,\n rationale: args.rationale,\n impactScore: args.impactScore,\n impact: derivedImpact,\n status: nextStatus,\n });\n\n if (\n isOperationalLinkStatus(nextStatus) &&\n !isOperationalLinkStatus(duplicate.status)\n ) {\n await applyOperationalLinkEffects(ctx, {\n questionNode: question,\n questionId: args.questionId,\n insightId: args.insightId,\n relevance: args.relevance,\n rationale: args.rationale,\n createdBy: args.createdBy,\n });\n }\n\n await recordMatcherDecision(ctx, {\n questionNode: question,\n questionId: args.questionId,\n insightId: args.insightId,\n linkId: duplicate._id,\n linkStatus: nextStatus,\n matcherMetadata,\n });\n\n await markProjectGraphDirty(ctx, question.projectId);\n return duplicate._id;\n }\n\n const linkId = await ctx.db.insert(\"questionEvidenceLinks\", {\n questionId: args.questionId,\n insightId: args.insightId,\n helpsAnswer: args.helpsAnswer,\n relevance: args.relevance,\n rationale: args.rationale,\n impactScore: args.impactScore,\n impact: derivedImpact,\n status: args.status,\n createdBy: args.createdBy,\n createdAt: Date.now(),\n });\n\n await recordMatcherDecision(ctx, {\n questionNode: question,\n questionId: args.questionId,\n insightId: args.insightId,\n linkId,\n linkStatus: args.status,\n matcherMetadata,\n });\n\n if (isOperationalLinkStatus(args.status)) {\n await applyOperationalLinkEffects(ctx, {\n questionNode: question,\n questionId: args.questionId,\n insightId: args.insightId,\n relevance: args.relevance,\n rationale: args.rationale,\n createdBy: args.createdBy,\n });\n }\n\n await markProjectGraphDirty(ctx, question.projectId);\n return linkId;\n },\n});\n\nexport const updateImpact = mutation({\n args: {\n linkId: v.id(\"questionEvidenceLinks\"),\n impactScore: v.optional(v.number()),\n impact: v.optional(\n v.union(\n v.literal(\"supports\"),\n v.literal(\"contradicts\"),\n v.literal(\"neutral\")\n )\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateImpactArgs) => {\n const rawLink = await ctx.db.get(args.linkId);\n if (!rawLink) {\n throw new Error(\"Link not found\");\n }\n const link = readQuestionEvidenceLink(rawLink, \"updateImpact.link\");\n\n const newImpactScore = args.impactScore;\n const newImpact = deriveImpact(newImpactScore, args.impact);\n\n const updateData: {\n impact?: \"supports\" | \"contradicts\" | \"neutral\";\n impactScore?: number;\n } = {};\n if (newImpact) {\n updateData.impact = newImpact;\n }\n if (newImpactScore !== undefined) {\n updateData.impactScore = newImpactScore;\n }\n\n await ctx.db.patch(args.linkId, updateData);\n const question = readEpistemicNode(await ctx.db.get(link.questionId));\n await markProjectGraphDirty(ctx, question?.projectId);\n\n return { success: true, newImpact, newImpactScore };\n },\n});\n\nexport const reviewSuggestion = mutation({\n args: {\n linkId: v.id(\"questionEvidenceLinks\"),\n status: v.union(v.literal(\"approved\"), v.literal(\"dismissed\")),\n userId: v.string(),\n reason: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: ReviewSuggestionArgs) => {\n const rawLink = await ctx.db.get(args.linkId);\n if (!rawLink) {\n throw new Error(\"Link not found\");\n }\n const link = readQuestionEvidenceLink(rawLink, \"reviewSuggestion.link\");\n\n const question = readEpistemicNode(await ctx.db.get(link.questionId));\n if (!question) {\n throw new Error(\"Question not found\");\n }\n\n let hasAccess = link.createdBy === args.userId;\n if (!hasAccess && question.projectId) {\n hasAccess = await checkProjectAccess(\n ctx,\n question.projectId,\n args.userId\n );\n }\n if (!hasAccess) {\n throw new Error(\"No permission to review this link\");\n }\n\n const previousStatus = link.status;\n const nextStatus = resolveReviewedLinkStatus(args.status);\n await ctx.db.patch(args.linkId, { status: nextStatus });\n\n if (nextStatus === \"approved\" && !isOperationalLinkStatus(previousStatus)) {\n await applyOperationalLinkEffects(ctx, {\n questionNode: question,\n questionId: link.questionId,\n insightId: link.insightId,\n relevance: link.relevance,\n rationale: link.rationale,\n createdBy: args.userId,\n });\n }\n if (nextStatus === \"dismissed\" && isOperationalLinkStatus(previousStatus)) {\n await removeOperationalLinkEffects(ctx, {\n questionId: link.questionId,\n insightId: link.insightId,\n });\n }\n\n await ctx.runMutation(\"matcherFeedback:recordDecision\", {\n projectId: question.projectId,\n topicId: question.topicId,\n sourceEntityId: String(link.insightId),\n targetEntityId: String(link.questionId),\n suggestionTable: \"questionEvidenceLinks\",\n suggestionId: args.linkId,\n reviewStatus: deriveMatcherReviewStatus({ linkStatus: nextStatus }),\n reviewedBy: args.userId,\n decisionReason: args.reason,\n outcomeMetadata: args.reason ? { reason: args.reason } : undefined,\n });\n\n await markProjectGraphDirty(ctx, question.projectId);\n return { success: true, status: nextStatus };\n },\n});\n\nexport const remove = mutation({\n args: {\n linkId: v.id(\"questionEvidenceLinks\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: RemoveQuestionEvidenceLinkArgs) => {\n const rawLink = await ctx.db.get(args.linkId);\n if (!rawLink) {\n throw new Error(\"Link not found\");\n }\n const link = readQuestionEvidenceLink(rawLink, \"remove.link\");\n if (link.createdBy !== args.userId) {\n throw new Error(\"Only the creator can remove this link\");\n }\n\n const question = readEpistemicNode(await ctx.db.get(link.questionId));\n if (isOperationalLinkStatus(link.status)) {\n await removeOperationalLinkEffects(ctx, {\n questionId: link.questionId,\n insightId: link.insightId,\n });\n }\n\n await ctx.db.delete(args.linkId);\n await markProjectGraphDirty(ctx, question?.projectId);\n },\n});\n\nexport const getByQuestion = query({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: QuestionEvidenceByQuestionArgs) => {\n const links = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", args.questionId))\n .collect()\n );\n\n return links.filter((link) => isOperationalLinkStatus(link.status));\n },\n});\n\nexport const getPendingSuggestions = query({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: QuestionEvidenceByQuestionArgs) => {\n const links = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", args.questionId))\n .collect()\n );\n\n return links.filter((link) => link.status === \"suggested\");\n },\n});\n\nexport const getByInsight = query({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: QuestionEvidenceByInsightArgs) => {\n const links = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_insightId\", (q) => q.eq(\"insightId\", args.insightId))\n .collect()\n );\n\n return links.filter((link) => isOperationalLinkStatus(link.status));\n },\n});\n\nexport const getEvidenceWithDetails = query({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: QuestionEvidenceByQuestionArgs) => {\n const questionNode = readEpistemicNode(await ctx.db.get(args.questionId));\n if (questionNode?.nodeType !== \"question\") {\n return [];\n }\n\n const linksWithInsight = await fetchOperationalQuestionEvidenceLinks(\n ctx,\n args.questionId\n );\n const filteredLinks = linksWithInsight.filter(\n (link): link is QuestionEvidenceLinkWithInsight => link.insight !== null\n );\n const seenEvidenceIds = new Set(\n filteredLinks.map((link) => String(link.insightId))\n );\n const edgeRows = await fetchDerivedFromEdgesWithDetails(\n ctx,\n args.questionId,\n seenEvidenceIds\n );\n\n const evidenceRows: Array<\n QuestionEvidenceLinkWithInsight | EvidenceEdgeDetail\n > = [...filteredLinks, ...edgeRows];\n\n return evidenceRows;\n },\n});\n\nexport const getByProject = query({\n args: {\n ...optionalScopeArgs,\n userId: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: ProjectQuestionEvidenceArgs) => {\n if (!args.projectId) {\n return [];\n }\n const hasAccess = await checkProjectAccess(\n ctx,\n args.projectId,\n args.userId\n );\n if (!hasAccess) {\n return [];\n }\n let scope: Awaited<ReturnType<typeof resolveTopicProjectScope>> | null;\n try {\n scope = await resolveTopicProjectScope(ctx, args);\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[questionEvidenceLinks] Failed to resolve topic scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n }\n );\n scope = null;\n }\n if (!scope) {\n return [];\n }\n\n const pageSize = Math.max(1, Math.min(Math.floor(args.limit ?? 300), 1000));\n const questionScanLimit = Math.min(pageSize * 2, 1000);\n\n const questions = (\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"question\")\n )\n .order(\"desc\")\n .take(questionScanLimit)\n ).flatMap((question) => {\n const row = readEpistemicNode(question);\n return row?.nodeType === \"question\" ? [row] : [];\n });\n\n const questionIds = questions.slice(0, pageSize).map((q) => q._id);\n const allLinks = await Promise.all(\n questionIds.map(async (questionId) => {\n const links = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", questionId))\n .collect()\n );\n return links.filter((link) => isOperationalLinkStatus(link.status));\n })\n );\n\n const flattenedLinks = allLinks.flat().slice(0, pageSize * 5);\n const questionDetails: Record<\n string,\n { _id: string; question: string; status: string }\n > = {};\n\n for (const question of questions) {\n const meta = question.metadata || {};\n questionDetails[String(question._id)] = {\n _id: String(question._id),\n question: question.canonicalText ?? question.title ?? \"\",\n status: readOptionalString(meta.status) ?? question.status ?? \"active\",\n };\n }\n\n return {\n links: flattenedLinks,\n questionDetails,\n };\n },\n});\n\nexport const getLinkedQuestionsForInsight = query({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: QuestionEvidenceByInsightArgs) => {\n const links = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_insightId\", (q) => q.eq(\"insightId\", args.insightId))\n .collect()\n );\n\n const linkedQuestions = await Promise.all(\n links\n .filter((link) => isOperationalLinkStatus(link.status))\n .map(async (link) => {\n const question = readEpistemicNode(await ctx.db.get(link.questionId));\n return {\n linkId: link._id,\n questionId: link.questionId,\n helpsAnswer: link.helpsAnswer,\n relevance: link.relevance,\n rationale: link.rationale,\n createdBy: link.createdBy,\n createdAt: link.createdAt,\n question: question\n ? {\n _id: question._id,\n question: question.canonicalText || question.title || \"\",\n status: question.status,\n }\n : null,\n };\n })\n );\n\n return linkedQuestions.filter((row) => row.question !== null);\n },\n});\n","// biome-ignore lint/performance/noBarrelFile: Public compatibility facade over @lucern/contracts/text-matching.contract.\nexport {\n bigramTokenize,\n jaccardSimilarity,\n prepareLexicalQuery,\n rankWindowScore,\n rerankLexicalWindow,\n scoreLexicalSignal,\n scoreLexicalSignals,\n stemToken,\n tokenizeSearchText,\n tokenOverlapScore,\n wordOverlapScore,\n wordTokenize,\n} from \"@lucern/contracts/text-matching.contract\";\n\nexport type LexicalStrategy = \"tokenOverlap\" | \"bigramJaccard\" | \"wordOverlap\";\n\nexport interface PreparedLexicalQuery {\n bigrams: Set<string>;\n raw: string;\n tokens: string[];\n words: string[];\n}\n\nexport interface LexicalSignal {\n strategy?: LexicalStrategy;\n text: string | null | undefined;\n weight: number;\n}\n\nexport interface LexicalRerankOptions {\n lexicalWeight?: number;\n rankWeight?: number;\n}\n","// biome-ignore-all lint/performance/noBarrelFile: Public graph-primitives compatibility facade; split after export-map migration.\n/**\n * Lucern Graph Primitives Module Entrypoint\n *\n * Canonical Lucern boundary for epistemic node and edge primitives,\n * graph identifiers, and lifecycle contracts.\n */\n\nimport {\n canContinueTransitively,\n canTraverseHop,\n EDGE_PROPAGATION_SPECS,\n getEdgePropagationSpec,\n getEdgePropagationSpecs,\n getTraversalDirections,\n isPropagationTraversalDirection,\n} from \"./edges\";\nimport {\n EDGE_LAYER_RULES as edgeValidation_EDGE_LAYER_RULES,\n getDefaultMinLayer as edgeValidation_getDefaultMinLayer,\n isDeprecatedEdgeType as edgeValidation_isDeprecatedEdgeType,\n shouldContinueTraversal as edgeValidation_shouldContinueTraversal,\n validateEdgeLayers as edgeValidation_validateEdgeLayers,\n} from \"./edgeValidation\";\nimport {\n appendSlScoring,\n applyBeliefConfidenceChange,\n archive,\n backfillBeliefSprintIds,\n backfillMandatoryPriors,\n backfillScoredBeliefEdges,\n backfillSyntheticOpinionHistory,\n backfillTwoAxisConfidence,\n batchUpdateCriticality,\n create,\n deleteRelationship,\n flattenBeliefNode,\n forkBelief,\n getBeliefClusterPositions,\n getByCriticality,\n getById,\n getByIds,\n getByPillar,\n getByProject,\n getByProjectSystem,\n getByTopic,\n getByWorktree,\n getConfidenceHistory,\n getCountByStatus,\n getLineage,\n getRecentConfidenceChanges,\n getRelationships,\n getUnanalyzed,\n getWithEvidence,\n internalCreate,\n internalGetActive,\n internalGetById,\n internalGetByProject,\n internalGetByTopic,\n linkBeliefs,\n linkEvidence,\n propagateConfidenceChange,\n reassignBeliefsTopic,\n refineBelief,\n resolveBeliefWorktreeId,\n unlinkEvidence,\n updateCriticality,\n updatePillar,\n updateRationale,\n updateStatus,\n updateStatusInternal,\n} from \"./epistemicBeliefs\";\nimport {\n canTraverseToLayer,\n createEdgeForInsightQuestionLink,\n createEpistemicEdge,\n createEpistemicNodeForArtifact,\n createEpistemicNodeForBelief,\n createEpistemicNodeForInsight,\n createEpistemicNodeForQuestion,\n EDGE_LAYER_RULES as epistemicHelpers_EDGE_LAYER_RULES,\n getDefaultMinLayer as epistemicHelpers_getDefaultMinLayer,\n isDeprecatedEdgeType as epistemicHelpers_isDeprecatedEdgeType,\n shouldContinueTraversal as epistemicHelpers_shouldContinueTraversal,\n validateEdgeLayers as epistemicHelpers_validateEdgeLayers,\n getDefaultEdgeTypesForMode,\n getLayerDepth,\n getNeo4jLabel,\n getNeo4jRelType,\n getNodeLayer,\n isValidLayerConnection,\n LAYER_TRAVERSAL_RULES,\n normalizeConfidence,\n} from \"./epistemicHelpers\";\n\nexport * as beliefDecay from \"./beliefDecay\";\nexport * as beliefEvidenceLinks from \"./beliefEvidenceLinks\";\nexport * as beliefLifecycle from \"./beliefLifecycle\";\nexport * as contradictions from \"./contradictions\";\nexport * as entityBridge from \"./entityBridge\";\nexport * as entityLifecycle from \"./entityLifecycle\";\nexport * as entityValidation from \"./entityValidation\";\nexport * as epistemicAnswers from \"./epistemicAnswers\";\nexport * as epistemicEdges from \"./epistemicEdges\";\nexport * as epistemicEvidence from \"./epistemicEvidence\";\nexport * as epistemicLinking from \"./epistemicLinking\";\nexport * as epistemicNodes from \"./epistemicNodes\";\nexport * as epistemicQuestions from \"./epistemicQuestions\";\nexport * as epistemicSources from \"./epistemicSources\";\nexport * as evaluators from \"./evaluators\";\nexport * as globalId from \"./globalId\";\nexport * as graphTypes from \"./graphTypes\";\nexport * as helpers from \"./helpers\";\nexport * as logicalRoleInference from \"./logicalRoleInference\";\nexport * as ontologyMatching from \"./ontology-matching\";\nexport * as ontologyApproval from \"./ontologyApproval\";\nexport * as ontologyRegistry from \"./ontologyRegistry\";\nexport * as projectionReconciliation from \"./projectionReconciliation\";\nexport * as projectionStaleness from \"./projectionStaleness\";\nexport * as questionEvidenceLinks from \"./questionEvidenceLinks\";\nexport * as resolvers from \"./resolvers\";\nexport type * as resolverTypes from \"./resolverTypes\";\nexport * as textMatching from \"./text-matching\";\nexport * as topicScope from \"./topicScope\";\n\nexport const edges = {\n EDGE_PROPAGATION_SPECS,\n canContinueTransitively,\n canTraverseHop,\n getEdgePropagationSpec,\n getEdgePropagationSpecs,\n getTraversalDirections,\n isPropagationTraversalDirection,\n} as const;\n\nexport const edgeValidation = {\n EDGE_LAYER_RULES: edgeValidation_EDGE_LAYER_RULES,\n getDefaultMinLayer: edgeValidation_getDefaultMinLayer,\n isDeprecatedEdgeType: edgeValidation_isDeprecatedEdgeType,\n shouldContinueTraversal: edgeValidation_shouldContinueTraversal,\n validateEdgeLayers: edgeValidation_validateEdgeLayers,\n} as const;\n\nexport const epistemicBeliefs = {\n applyBeliefConfidenceChange,\n archive,\n backfillBeliefSprintIds,\n backfillMandatoryPriors,\n backfillScoredBeliefEdges,\n backfillSyntheticOpinionHistory,\n backfillTwoAxisConfidence,\n batchUpdateCriticality,\n create,\n deleteRelationship,\n flattenBeliefNode,\n forkBelief,\n getBeliefClusterPositions,\n getByCriticality,\n getById,\n getByIds,\n getByPillar,\n getByProject,\n getByProjectSystem,\n getByTopic,\n getByWorktree,\n getConfidenceHistory,\n getCountByStatus,\n getLineage,\n getRecentConfidenceChanges,\n getRelationships,\n getUnanalyzed,\n getWithEvidence,\n internalCreate,\n internalGetActive,\n internalGetById,\n internalGetByProject,\n internalGetByTopic,\n linkBeliefs,\n linkEvidence,\n appendSlScoring,\n propagateConfidenceChange,\n reassignBeliefsTopic,\n refineBelief,\n resolveBeliefWorktreeId,\n unlinkEvidence,\n updateCriticality,\n updatePillar,\n updateRationale,\n updateStatus,\n updateStatusInternal,\n} as const;\n\nexport const epistemicHelpers = {\n EDGE_LAYER_RULES: epistemicHelpers_EDGE_LAYER_RULES,\n LAYER_TRAVERSAL_RULES,\n canTraverseToLayer,\n createEdgeForInsightQuestionLink,\n createEpistemicEdge,\n createEpistemicNodeForArtifact,\n createEpistemicNodeForBelief,\n createEpistemicNodeForInsight,\n createEpistemicNodeForQuestion,\n getDefaultEdgeTypesForMode,\n getDefaultMinLayer: epistemicHelpers_getDefaultMinLayer,\n getLayerDepth,\n getNeo4jLabel,\n getNeo4jRelType,\n getNodeLayer,\n isDeprecatedEdgeType: epistemicHelpers_isDeprecatedEdgeType,\n isValidLayerConnection,\n normalizeConfidence,\n shouldContinueTraversal: epistemicHelpers_shouldContinueTraversal,\n validateEdgeLayers: epistemicHelpers_validateEdgeLayers,\n} as const;\n"]}