@lucern/graph-primitives 1.0.0 → 1.0.1

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 (202) hide show
  1. package/README.md +13 -12
  2. package/dist/beliefDecay.js +24 -17
  3. package/dist/beliefDecay.js.map +1 -1
  4. package/dist/beliefEvidenceLinks.js +32 -8
  5. package/dist/beliefEvidenceLinks.js.map +1 -1
  6. package/dist/confidencePropagationDispatch.js.map +1 -1
  7. package/dist/contradictions.js +32 -9
  8. package/dist/contradictions.js.map +1 -1
  9. package/dist/convex.d.ts +55 -12
  10. package/dist/convex.js.map +1 -1
  11. package/dist/edgeValidation.d.ts +25 -2
  12. package/dist/edges/index.d.ts +9 -2
  13. package/dist/edges/index.js.map +1 -1
  14. package/dist/edges/propagationTypes.d.ts +2 -3
  15. package/dist/edges/propagationTypes.js.map +1 -1
  16. package/dist/entityBridge.js +10 -3
  17. package/dist/entityBridge.js.map +1 -1
  18. package/dist/entityLifecycle.js +15 -3
  19. package/dist/entityLifecycle.js.map +1 -1
  20. package/dist/epistemicAnswers.js.map +1 -1
  21. package/dist/epistemicBeliefs.admin.d.ts +36 -0
  22. package/dist/epistemicBeliefs.admin.js +745 -0
  23. package/dist/epistemicBeliefs.admin.js.map +1 -0
  24. package/dist/epistemicBeliefs.backfills.d.ts +62 -0
  25. package/dist/epistemicBeliefs.backfills.js +1004 -0
  26. package/dist/epistemicBeliefs.backfills.js.map +1 -0
  27. package/dist/epistemicBeliefs.confidence.d.ts +45 -0
  28. package/dist/epistemicBeliefs.confidence.js +1285 -0
  29. package/dist/epistemicBeliefs.confidence.js.map +1 -0
  30. package/dist/epistemicBeliefs.core.d.ts +35 -0
  31. package/dist/epistemicBeliefs.core.js +1508 -0
  32. package/dist/epistemicBeliefs.core.js.map +1 -0
  33. package/dist/epistemicBeliefs.d.ts +12 -3
  34. package/dist/epistemicBeliefs.helpers.d.ts +168 -0
  35. package/dist/epistemicBeliefs.helpers.js +1060 -0
  36. package/dist/epistemicBeliefs.helpers.js.map +1 -0
  37. package/dist/epistemicBeliefs.internal.d.ts +30 -0
  38. package/dist/epistemicBeliefs.internal.js +1329 -0
  39. package/dist/epistemicBeliefs.internal.js.map +1 -0
  40. package/dist/epistemicBeliefs.js +1196 -1184
  41. package/dist/epistemicBeliefs.js.map +1 -1
  42. package/dist/epistemicBeliefs.lifecycle.d.ts +19 -0
  43. package/dist/epistemicBeliefs.lifecycle.js +1608 -0
  44. package/dist/epistemicBeliefs.lifecycle.js.map +1 -0
  45. package/dist/epistemicBeliefs.links.d.ts +30 -0
  46. package/dist/epistemicBeliefs.links.js +761 -0
  47. package/dist/epistemicBeliefs.links.js.map +1 -0
  48. package/dist/epistemicBeliefs.queries.d.ts +16 -0
  49. package/dist/epistemicBeliefs.queries.js +90 -0
  50. package/dist/epistemicBeliefs.queries.js.map +1 -0
  51. package/dist/epistemicContractHelpers.d.ts +1 -1
  52. package/dist/epistemicContractHelpers.js +1 -1
  53. package/dist/epistemicContracts.d.ts +5 -76
  54. package/dist/epistemicContracts.evaluators.d.ts +36 -0
  55. package/dist/epistemicContracts.evaluators.js +2506 -0
  56. package/dist/epistemicContracts.evaluators.js.map +1 -0
  57. package/dist/epistemicContracts.handlers.d.ts +40 -0
  58. package/dist/epistemicContracts.handlers.js +3029 -0
  59. package/dist/epistemicContracts.handlers.js.map +1 -0
  60. package/dist/epistemicContracts.js +2006 -5281
  61. package/dist/epistemicContracts.js.map +1 -1
  62. package/dist/epistemicContracts.metrics.d.ts +26 -0
  63. package/dist/epistemicContracts.metrics.js +427 -0
  64. package/dist/epistemicContracts.metrics.js.map +1 -0
  65. package/dist/epistemicContracts.types.d.ts +159 -0
  66. package/dist/epistemicContracts.types.js +3 -0
  67. package/dist/epistemicContracts.types.js.map +1 -0
  68. package/dist/epistemicEdgeCreation.d.ts +73 -0
  69. package/dist/epistemicEdgeCreation.js +450 -0
  70. package/dist/epistemicEdgeCreation.js.map +1 -0
  71. package/dist/epistemicEdges-BF-cn4i3.d.ts +43 -0
  72. package/dist/epistemicEdges.d.ts +8 -1
  73. package/dist/epistemicEdges.handlers.d.ts +20 -0
  74. package/dist/epistemicEdges.handlers.js +289 -0
  75. package/dist/epistemicEdges.handlers.js.map +1 -0
  76. package/dist/epistemicEdges.helpers.d.ts +27 -0
  77. package/dist/epistemicEdges.helpers.js +162 -0
  78. package/dist/epistemicEdges.helpers.js.map +1 -0
  79. package/dist/epistemicEdges.js +797 -875
  80. package/dist/epistemicEdges.js.map +1 -1
  81. package/dist/epistemicEdges.mutations.d.ts +39 -0
  82. package/dist/epistemicEdges.mutations.js +1365 -0
  83. package/dist/epistemicEdges.mutations.js.map +1 -0
  84. package/dist/epistemicEdges.queries.d.ts +95 -0
  85. package/dist/epistemicEdges.queries.js +851 -0
  86. package/dist/epistemicEdges.queries.js.map +1 -0
  87. package/dist/epistemicEdges.types.d.ts +32 -0
  88. package/dist/epistemicEdges.types.js +3 -0
  89. package/dist/epistemicEdges.types.js.map +1 -0
  90. package/dist/epistemicEvidence-DvfchNt7.d.ts +46 -0
  91. package/dist/epistemicEvidence.d.ts +5 -2
  92. package/dist/epistemicEvidence.js +801 -807
  93. package/dist/epistemicEvidence.js.map +1 -1
  94. package/dist/epistemicEvidenceHelpers.d.ts +71 -0
  95. package/dist/epistemicEvidenceHelpers.js +769 -0
  96. package/dist/epistemicEvidenceHelpers.js.map +1 -0
  97. package/dist/epistemicEvidenceMutations.d.ts +10 -0
  98. package/dist/epistemicEvidenceMutations.js +1421 -0
  99. package/dist/epistemicEvidenceMutations.js.map +1 -0
  100. package/dist/epistemicEvidenceQueries.d.ts +10 -0
  101. package/dist/epistemicEvidenceQueries.js +1049 -0
  102. package/dist/epistemicEvidenceQueries.js.map +1 -0
  103. package/dist/epistemicHelpers.d.ts +4 -2
  104. package/dist/epistemicHelpers.js +132 -127
  105. package/dist/epistemicHelpers.js.map +1 -1
  106. package/dist/epistemicLayerRules.d.ts +138 -0
  107. package/dist/epistemicLayerRules.js +481 -0
  108. package/dist/epistemicLayerRules.js.map +1 -0
  109. package/dist/epistemicLinking.js +1 -1
  110. package/dist/epistemicLinking.js.map +1 -1
  111. package/dist/epistemicNodeCreation.d.ts +101 -0
  112. package/dist/epistemicNodeCreation.js +709 -0
  113. package/dist/epistemicNodeCreation.js.map +1 -0
  114. package/dist/epistemicNodes-BCQxpYx_.d.ts +54 -0
  115. package/dist/epistemicNodes.d.ts +5 -1
  116. package/dist/epistemicNodes.helpers.d.ts +51 -0
  117. package/dist/epistemicNodes.helpers.js +73 -0
  118. package/dist/epistemicNodes.helpers.js.map +1 -0
  119. package/dist/epistemicNodes.internal.d.ts +34 -0
  120. package/dist/epistemicNodes.internal.js +658 -0
  121. package/dist/epistemicNodes.internal.js.map +1 -0
  122. package/dist/epistemicNodes.js +698 -693
  123. package/dist/epistemicNodes.js.map +1 -1
  124. package/dist/epistemicNodes.mutations.d.ts +34 -0
  125. package/dist/epistemicNodes.mutations.js +1153 -0
  126. package/dist/epistemicNodes.mutations.js.map +1 -0
  127. package/dist/epistemicNodes.queries.d.ts +36 -0
  128. package/dist/epistemicNodes.queries.js +619 -0
  129. package/dist/epistemicNodes.queries.js.map +1 -0
  130. package/dist/epistemicNodes.validators.d.ts +23 -0
  131. package/dist/epistemicNodes.validators.js +105 -0
  132. package/dist/epistemicNodes.validators.js.map +1 -0
  133. package/dist/epistemicQuestions-bwHd2FWE.d.ts +68 -0
  134. package/dist/epistemicQuestions.conviction.d.ts +52 -0
  135. package/dist/epistemicQuestions.conviction.js +1389 -0
  136. package/dist/epistemicQuestions.conviction.js.map +1 -0
  137. package/dist/epistemicQuestions.create.d.ts +29 -0
  138. package/dist/epistemicQuestions.create.js +1300 -0
  139. package/dist/epistemicQuestions.create.js.map +1 -0
  140. package/dist/epistemicQuestions.d.ts +10 -2
  141. package/dist/epistemicQuestions.evidence.d.ts +22 -0
  142. package/dist/epistemicQuestions.evidence.js +929 -0
  143. package/dist/epistemicQuestions.evidence.js.map +1 -0
  144. package/dist/epistemicQuestions.helpers.d.ts +69 -0
  145. package/dist/epistemicQuestions.helpers.js +824 -0
  146. package/dist/epistemicQuestions.helpers.js.map +1 -0
  147. package/dist/epistemicQuestions.js +2435 -2430
  148. package/dist/epistemicQuestions.js.map +1 -1
  149. package/dist/epistemicQuestions.lifecycle.d.ts +24 -0
  150. package/dist/epistemicQuestions.lifecycle.js +838 -0
  151. package/dist/epistemicQuestions.lifecycle.js.map +1 -0
  152. package/dist/epistemicQuestions.queries.d.ts +41 -0
  153. package/dist/epistemicQuestions.queries.js +1013 -0
  154. package/dist/epistemicQuestions.queries.js.map +1 -0
  155. package/dist/epistemicQuestions.sprint.d.ts +22 -0
  156. package/dist/epistemicQuestions.sprint.js +757 -0
  157. package/dist/epistemicQuestions.sprint.js.map +1 -0
  158. package/dist/epistemicQuestions.tail.d.ts +42 -0
  159. package/dist/epistemicQuestions.tail.js +1345 -0
  160. package/dist/epistemicQuestions.tail.js.map +1 -0
  161. package/dist/epistemicSources.js +6 -2
  162. package/dist/epistemicSources.js.map +1 -1
  163. package/dist/evaluators/index.d.ts +2 -2
  164. package/dist/evaluators/index.js +45 -5320
  165. package/dist/evaluators/index.js.map +1 -1
  166. package/dist/evaluators/lintCheckerEvaluator.d.ts +1 -1
  167. package/dist/evaluators/sentryCheckerEvaluator.d.ts +1 -1
  168. package/dist/evaluators/testRunnerEvaluator.d.ts +1 -1
  169. package/dist/evaluators/tscCheckerEvaluator.d.ts +1 -1
  170. package/dist/{graphTypes-CpgIuCdo.d.ts → graphTypes-B8VaIjnl.d.ts} +1 -1
  171. package/dist/graphTypes.d.ts +1 -1
  172. package/dist/{helpers-BYHIk5vU.d.ts → helpers-DNYfg6mo.d.ts} +2 -3
  173. package/dist/helpers.d.ts +2 -2
  174. package/dist/helpers.js.map +1 -1
  175. package/dist/{index-Dq-7R-gi.d.ts → index-C-Kyd7hD.d.ts} +1 -1
  176. package/dist/index.d.ts +160 -14
  177. package/dist/index.js +12291 -13001
  178. package/dist/index.js.map +1 -1
  179. package/dist/logicalRoleInference.js.map +1 -1
  180. package/dist/ontologyApproval.js +1 -1
  181. package/dist/ontologyApproval.js.map +1 -1
  182. package/dist/ontologyDefinitions.js +25 -7
  183. package/dist/ontologyDefinitions.js.map +1 -1
  184. package/dist/ontologyRegistry.js.map +1 -1
  185. package/dist/projectionReconciliation.js.map +1 -1
  186. package/dist/questionEvidenceLinks.js +28 -7
  187. package/dist/questionEvidenceLinks.js.map +1 -1
  188. package/dist/resolvers.js.map +1 -1
  189. package/dist/scopeResolverCompat.js.map +1 -1
  190. package/dist/topicProjectOverlay.js.map +1 -1
  191. package/dist/topicScope.js.map +1 -1
  192. package/dist/workflowBridge.js.map +1 -1
  193. package/dist/workspaceIsolation.js.map +1 -1
  194. package/package.json +4 -5
  195. package/dist/edgeValidation-CeI0wc0r.d.ts +0 -35
  196. package/dist/epistemicBeliefs-DzKjZAeC.d.ts +0 -377
  197. package/dist/epistemicEdges-CvlKnEyy.d.ts +0 -191
  198. package/dist/epistemicEvidence-xw6UUrwh.d.ts +0 -128
  199. package/dist/epistemicHelpers-DevrYgPN.d.ts +0 -329
  200. package/dist/epistemicNodes-DjSUfvyD.d.ts +0 -167
  201. package/dist/epistemicQuestions-B_nUclrH.d.ts +0 -214
  202. package/dist/index-Dct1T70K.d.ts +0 -25
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/convex.ts","../src/debug.ts","../src/embeddingTrigger.ts","../src/globalId.ts","../src/topicScope.ts","../src/workspaceIsolation.ts","../src/topicProjectOverlay.ts","../src/resolvers.ts","../src/epistemicBeliefs.helpers.ts","../src/epistemicBeliefs.core.ts"],"names":["normalizeScopeValue","LEGACY_SCOPE_FIELD","isMissingLucernChildComponentError","getErrorMessage","v","checkScopeAccess","query"],"mappings":"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","file":"epistemicBeliefs.core.js","sourcesContent":["import {\n actionGeneric,\n anyApi,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\nexport const api = anyApi as any;\nexport const components = componentsGeneric() as any;\nexport const internal = anyApi as any;\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> = any;\nexport type DataModel = any;\ntype IndexRangeBuilder = {\n field(fieldName: string): string;\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n gt(fieldName: string, value: unknown): IndexRangeBuilder;\n gte(fieldName: string, value: unknown): IndexRangeBuilder;\n lt(fieldName: string, value: unknown): IndexRangeBuilder;\n lte(fieldName: string, value: unknown): IndexRangeBuilder;\n};\ntype FilterBuilder = {\n eq(left: unknown, right: unknown): unknown;\n neq(left: unknown, right: unknown): unknown;\n gt(left: unknown, right: unknown): unknown;\n gte(left: unknown, right: unknown): unknown;\n lt(left: unknown, right: unknown): unknown;\n lte(left: unknown, right: unknown): unknown;\n and(...clauses: unknown[]): unknown;\n or(...clauses: unknown[]): unknown;\n field(fieldName: string): unknown;\n};\ntype QueryInitializer<TableName extends TableNames> = {\n withIndex(\n indexName: string,\n range?: (q: any) => unknown\n ): QueryInitializer<TableName>;\n filter(predicate: (q: any) => unknown): QueryInitializer<TableName>;\n order(direction: \"asc\" | \"desc\"): QueryInitializer<TableName>;\n collect(): Promise<Doc<TableName>[]>;\n take(limit: number): Promise<Doc<TableName>[]>;\n first(): Promise<Doc<TableName> | null>;\n unique(): Promise<Doc<TableName> | null>;\n};\nexport type DatabaseReader = {\n get<TableName extends TableNames>(\n id: Id<TableName>\n ): Promise<Doc<TableName> | null>;\n query<TableName extends TableNames>(\n tableName: TableName\n ): QueryInitializer<TableName>;\n normalizeId?<TableName extends TableNames>(\n tableName: TableName,\n id: string\n ): Id<TableName> | null;\n};\nexport type DatabaseWriter = DatabaseReader & {\n insert<TableName extends TableNames>(\n tableName: TableName,\n value: Record<string, unknown>\n ): Promise<Id<TableName>>;\n patch<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n replace<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n delete<TableName extends TableNames>(id: Id<TableName>): Promise<void>;\n};\ntype Scheduler = {\n runAfter(delayMs: number, functionReference: unknown, args?: unknown): Promise<void>;\n};\ntype AuthReader = {\n getUserIdentity(): Promise<unknown>;\n};\ntype RuntimeInvoker = {\n runQuery(functionReference: unknown, args?: unknown): Promise<any>;\n runMutation(functionReference: unknown, args?: unknown): Promise<any>;\n runAction(functionReference: unknown, args?: unknown): Promise<any>;\n};\nexport type QueryCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseReader;\n scheduler: Scheduler;\n};\nexport type MutationCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseWriter;\n scheduler: Scheduler;\n};\nexport type ActionCtx = RuntimeInvoker & {\n auth: AuthReader;\n scheduler: Scheduler;\n};\n\ntype ConvexFunctionBuilder<Ctx> = <\n Definition extends { handler?: (ctx: Ctx, args: any) => any },\n>(\n definition: Definition\n) => any;\n\nexport const action = actionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const httpAction =\n httpActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalAction =\n internalActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalMutation =\n internalMutationGeneric as unknown as ConvexFunctionBuilder<MutationCtx>;\nexport const internalQuery =\n internalQueryGeneric as unknown as ConvexFunctionBuilder<QueryCtx>;\nexport const mutation =\n mutationGeneric as unknown as ConvexFunctionBuilder<MutationCtx>;\nexport const query = queryGeneric as unknown as ConvexFunctionBuilder<QueryCtx>;\n","type GraphPrimitiveDebugEnvironment = {\n process?: {\n env?: Record<string, string | undefined>;\n };\n};\n\nfunction isGraphPrimitiveDebugEnabled(): boolean {\n const env = (globalThis as GraphPrimitiveDebugEnvironment).process?.env;\n return (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG === \"1\" ||\n env?.LUCERN_GRAPH_DEBUG === \"1\"\n );\n}\n\nexport function formatGraphPrimitiveError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error === null) {\n return \"null\";\n }\n if (error === undefined) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(error);\n } catch {\n return Object.prototype.toString.call(error);\n }\n}\n\nexport function debugGraphPrimitiveFallback(\n message: string,\n context?: Record<string, unknown>\n): void {\n if (!isGraphPrimitiveDebugEnabled()) {\n return;\n }\n console.debug(message, context ?? {});\n}\n","/**\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 EmbeddingTriggerArgs {\n ctx: any;\n nodeId: Id<\"epistemicNodes\">;\n projectId?: string | null;\n topicId?: string | null;\n createdBy: string;\n nodeType:\n | \"belief\"\n | \"question\"\n | \"evidence\"\n | \"answer\"\n | \"synthesis\"\n | \"theme\"\n | \"source\";\n text: string;\n hasAnswer?: boolean;\n confidence?: number;\n}\n\nexport async function scheduleEmbeddingGeneration(\n args: EmbeddingTriggerArgs,\n): Promise<void> {\n try {\n await args.ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\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 );\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","/**\n * Shared UUID v4 generator for global IDs.\n *\n * Uses crypto.getRandomValues() for collision-safe generation.\n * Replaces the Math.random()-based UUID pattern that was duplicated\n * across 7+ files.\n *\n * @module convex/lib/globalId\n */\n\n/**\n * Generate a UUID v4 global ID using crypto-safe random bytes.\n */\nexport function generateGlobalId(): string {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n // Set version (4) and variant (RFC 4122)\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, \"0\")).join(\n \"\"\n );\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n","/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport { api as appApi } from \"./convex\";\nimport type { Id } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectScope = {\n topicId: Id<\"topics\">;\n projectId?: string;\n tenantId?: string;\n workspaceId?: string;\n source: \"topic\" | \"project_mapped_topic\" | \"topic_inferred\";\n};\n\ntype MaterializedTopicNodeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n};\n\nfunction asMappedProjectId(\n topic: TopicDoc | null | undefined,\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(topic[LEGACY_SCOPE_FIELD]);\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = (topic.metadata || {}) as Record<string, unknown>;\n const candidate =\n (metadata[LEGACY_SCOPE_FIELD] as string | undefined) ||\n (metadata.legacyProjectId as string | undefined) ||\n (metadata.projectId as string | undefined) ||\n (metadata.scopeProjectId as string | undefined);\n return candidate ? (candidate as string) : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(\n ctx: any,\n scopeId: string,\n): Promise<TopicDoc[]> {\n try {\n return (await ctx.db\n .query(\"topics\")\n .withIndex(\"by_graph_scope_project\", (q: any) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId),\n )\n .collect()) as TopicDoc[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve scope alias via index\",\n {\n error,\n scopeId,\n },\n );\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await ctx.db.query(\"topics\").collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: any,\n topicId: string,\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get as any, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by host query\",\n {\n error,\n topicId,\n },\n );\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: any,\n legacyScopeId: string,\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId as any, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by legacy scope\",\n {\n error,\n legacyScopeId,\n },\n );\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined,\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: any,\n topic: TopicDoc,\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) break;\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) break;\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: any,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string },\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n // Try direct lookup, fall back to the legacy mapped-project bridge\n let topic: TopicDoc | null = null;\n try {\n topic = (await ctx.db.get(\n args.topicId as Id<\"topics\">,\n )) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to load topic by direct id\",\n {\n error,\n topicId: args.topicId,\n },\n );\n // Not a valid topics table ID\n }\n if (!topic) {\n topic = await tryResolveHostTopicById(ctx, String(args.topicId));\n }\n if (!topic) {\n // Try as legacy projectId / globalId via the mapped-project bridge.\n topic =\n pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, String(args.topicId)),\n ) ?? null;\n }\n if (!topic) {\n throw new Error(`Topic not found: ${String(args.topicId)}`);\n }\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n if (mapped) {\n return {\n topicId: topic._id,\n projectId: mapped,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n return {\n topicId: topic._id,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n\n if (args.projectId) {\n let directTopic: TopicDoc | null = null;\n try {\n directTopic = (await ctx.db.get(\n args.projectId as Id<\"topics\">,\n )) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to load direct project topic\",\n {\n error,\n projectId: args.projectId,\n },\n );\n // Not a valid topics table ID, continue to legacy graph-scope lookup.\n }\n\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n directTopic = await tryResolveHostTopicByLegacyScope(ctx, args.projectId);\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n const topics = await findTopicsByScopeAlias(ctx, args.projectId);\n const primary = pickPrimaryTopic(topics);\n if (primary) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, primary);\n return {\n topicId: primary._id,\n projectId: args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"project_mapped_topic\",\n };\n }\n throw new Error(\n `Legacy project scope ${String(args.projectId)} has no mapped topic.`,\n );\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\",\n );\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","import {\n getLayerForNodeType,\n isNodeType,\n} from \"@lucern/contracts/schema-helpers/spine/tables/epistemicNodes\";\nimport {\n resolveTopicProjectScope,\n type TopicProjectScope,\n} from \"./topicScope\";\n\ntype StructuredInvariantError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype ScopeLike = {\n tenantId?: unknown;\n workspaceId?: unknown;\n epistemicLayer?: unknown;\n nodeType?: unknown;\n topicId?: unknown;\n projectId?: unknown;\n publicationStatus?: unknown;\n};\n\nexport type RuntimePackMutationContext = {\n toolName?: string;\n packKey?: string;\n packInstallScope?: \"tenant\" | \"workspace\";\n};\n\nexport function normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction throwWorkspaceIsolationError(args: {\n message: string;\n invariantCode: string;\n suggestion: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredInvariantError;\n error.status = 409;\n error.code = \"INVARIANT_VIOLATION\";\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nexport function assertWorkspaceScopedEpistemicNodeScope(args: {\n scope: TopicProjectScope;\n nodeType: string;\n mutationName: string;\n}): void {\n const layer = isNodeType(args.nodeType)\n ? getLayerForNodeType(args.nodeType)\n : undefined;\n if (layer === \"ontological\") {\n return;\n }\n\n const workspaceId = normalizeScopeValue(args.scope.workspaceId);\n if (workspaceId) {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n \"Workspace-scoped reasoning isolation requires workspaceId on non-ontological node creation.\",\n invariantCode: \"workspace.scope_required_for_epistemic_nodes\",\n suggestion:\n \"Resolve the topic/project scope through a workspace-bound topic before creating epistemic nodes.\",\n details: {\n mutationName: args.mutationName,\n nodeType: args.nodeType,\n topicId: args.scope.topicId,\n projectId: args.scope.projectId,\n },\n });\n}\n\nexport function nodeMatchesWorkspaceReasoningScope(\n node: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!node) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const nodeTenantId = normalizeScopeValue(node.tenantId);\n const nodeWorkspaceId = normalizeScopeValue(node.workspaceId);\n const epistemicLayer =\n typeof node.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n\n if (\n scopeTenantId &&\n nodeTenantId &&\n scopeTenantId !== nodeTenantId\n ) {\n return false;\n }\n\n // Ontological entities are tenant-global (no workspace required)\n if (epistemicLayer === \"ontological\" && nodeWorkspaceId === undefined) {\n return true;\n }\n\n // Published nodes are visible at tenant scope — the microservice API surface.\n // The node stays in its workspace, but tenant-scope queries can see it.\n if (!scopeWorkspaceId && node.publicationStatus === \"published\") {\n return true;\n }\n\n if (!scopeWorkspaceId) {\n return nodeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === nodeWorkspaceId;\n}\n\nexport function edgeMatchesWorkspaceReasoningScope(\n edge: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!edge) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const edgeTenantId = normalizeScopeValue(edge.tenantId);\n const edgeWorkspaceId = normalizeScopeValue(edge.workspaceId);\n\n if (\n scopeTenantId &&\n edgeTenantId &&\n scopeTenantId !== edgeTenantId\n ) {\n return false;\n }\n\n if (!scopeWorkspaceId) {\n return edgeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === edgeWorkspaceId;\n}\n\nexport async function resolveNodeScopeForWorkspaceIsolation(\n ctx: any,\n node: ScopeLike | null | undefined\n): Promise<{\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n nodeType?: string;\n}> {\n const epistemicLayer =\n typeof node?.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n const resolved = {\n tenantId: normalizeScopeValue(node?.tenantId),\n workspaceId: normalizeScopeValue(node?.workspaceId),\n epistemicLayer,\n nodeType: typeof node?.nodeType === \"string\" ? node.nodeType : undefined,\n };\n\n if (!node) {\n return resolved;\n }\n\n if (resolved.epistemicLayer === \"ontological\") {\n return resolved;\n }\n\n if (resolved.tenantId || resolved.workspaceId) {\n return resolved;\n }\n\n if (node.topicId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n topicId: node.topicId as any,\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n if (node.projectId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n projectId: String(node.projectId),\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n return resolved;\n}\n\nexport function resolveRuntimePackMutationContext(args: {\n runtimeToolName?: string;\n runtimePackKey?: string;\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n}): RuntimePackMutationContext | undefined {\n if (\n !args.runtimeToolName &&\n !args.runtimePackKey &&\n !args.runtimePackInstallScope\n ) {\n return;\n }\n\n return {\n toolName: args.runtimeToolName,\n packKey: args.runtimePackKey,\n packInstallScope: args.runtimePackInstallScope,\n };\n}\n\nexport function assertTenantPackWorkspaceMutationAllowed(args: {\n runtime?: RuntimePackMutationContext;\n target: ScopeLike;\n mutationName: string;\n}): void {\n if (\n !args.runtime?.packKey ||\n args.runtime.packInstallScope !== \"tenant\"\n ) {\n return;\n }\n\n const targetWorkspaceId = normalizeScopeValue(args.target.workspaceId);\n const targetLayer =\n typeof args.target.epistemicLayer === \"string\"\n ? args.target.epistemicLayer\n : undefined;\n\n if (!targetWorkspaceId || targetLayer === \"ontological\") {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n `Tenant-scoped pack \"${args.runtime.packKey}\" cannot mutate workspace-scoped reasoning state.`,\n invariantCode: \"workspace.tenant_pack_reasoning_write_forbidden\",\n suggestion:\n \"Use a workspace-scoped pack for workspace-local graph mutations, or route the change through tenant-global canonical entity flows.\",\n details: {\n mutationName: args.mutationName,\n toolName: args.runtime.toolName,\n packKey: args.runtime.packKey,\n targetWorkspaceId,\n targetNodeType: args.target.nodeType,\n targetLayer,\n },\n });\n}\n","import { api } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\ntype OverlayIdMode = \"legacy\" | \"topic\";\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype LegacyProjectThesis = {\n statement: string;\n confidence: number;\n lastUpdated: number;\n};\n\ntype LegacyPillarImportance = \"critical\" | \"major\" | \"minor\" | \"not_applicable\";\n\ntype LegacyThesisPillarConfig = {\n pillarImportance?: Record<string, LegacyPillarImportance | undefined>;\n configuredAt?: number;\n configuredBy?: string;\n aiSuggestion?: {\n suggestedAt: number;\n reasoning: string;\n };\n};\n\ntype LegacyBeliefArchitecture = {\n overallMaturity: number;\n pillarScores: Array<Record<string, unknown>>;\n lastCalculated: number;\n};\n\ntype LegacyOntologyClassification = {\n valueChains: Array<Record<string, unknown>>;\n functions: Array<Record<string, unknown>>;\n overallConfidence: number;\n classifiedAt: number;\n};\n\ntype TopicDocLike = Record<string, unknown> & {\n _id: string;\n _creationTime?: number;\n globalId?: string;\n name?: string;\n description?: string;\n type?: string;\n tenantId?: string;\n workspaceId?: string;\n status?: string;\n visibility?: string;\n createdBy?: string;\n 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 sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n tags: string[];\n chatCount: number;\n artifactCount: number;\n lastActivityAt: number;\n thesis?: LegacyProjectThesis;\n wedgeHypothesis?: string;\n founderArchetype?: string;\n investmentCriteria?: string[];\n sprintPhase?:\n | \"pre_sprint\"\n | \"readiness_check\"\n | \"thesis_crystallization\"\n | \"sprint_planning\"\n | \"active_sprint\"\n | \"theme_assembly\"\n | \"evolution\";\n currentSprintIndex?: number;\n thesisPillarConfig?: LegacyThesisPillarConfig;\n beliefArchitecture?: LegacyBeliefArchitecture;\n ontologyClassification?: LegacyOntologyClassification;\n _creationTime: number;\n createdAt: number;\n updatedAt: number;\n};\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readNonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction readMetadata(topic: TopicDocLike): Record<string, unknown> {\n return topic.metadata && typeof topic.metadata === \"object\"\n ? topic.metadata\n : {};\n}\n\nfunction readLegacyProjectId(\n value: Record<string, unknown> | null | undefined,\n): string | undefined {\n if (!value) {\n return;\n }\n return readNonEmptyString(value[LEGACY_SCOPE_FIELD]);\n}\n\nfunction coerceVisibility(\n value: unknown,\n): TopicProjectOverlay[\"visibility\"] | undefined {\n return value === \"private\" ||\n value === \"team\" ||\n value === \"firm\" ||\n value === \"external\" ||\n value === \"public\"\n ? value\n : undefined;\n}\n\nfunction coerceStatus(\n value: unknown,\n): TopicProjectOverlay[\"status\"] | undefined {\n return value === \"active\" || value === \"archived\" || value === \"watching\"\n ? value\n : undefined;\n}\n\nfunction mapProjectType(\n topic: TopicDocLike,\n metadata: Record<string, unknown>,\n): string {\n const explicit = readNonEmptyString(metadata.projectType);\n if (explicit) {\n return explicit;\n }\n if (topic.type === \"theme\") {\n return \"thematic\";\n }\n return readNonEmptyString(topic.type) || \"general\";\n}\n\nfunction isProjectLikeTopic(topic: TopicDocLike): boolean {\n const metadata = readMetadata(topic);\n return (\n topic.type === \"theme\" ||\n topic.type === \"thematic\" ||\n topic.type === \"deal\" ||\n topic.type === \"monitoring\" ||\n readLegacyProjectId(topic) !== undefined ||\n readNonEmptyString(metadata.projectType) !== undefined\n );\n}\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = getErrorMessage(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found',\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n return (error as { message: string }).message;\n }\n return \"unknown error\";\n}\n\nasync function resolveTopicDoc(\n ctx: any,\n scopeId: string,\n): Promise<TopicDocLike | null> {\n if (ctx?.db && typeof ctx.db.get === \"function\") {\n try {\n const directTopic = (await ctx.db.get(\n scopeId as any,\n )) as TopicDocLike | null;\n if (directTopic) {\n return directTopic;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by direct ID\",\n {\n error,\n scopeId,\n },\n );\n // Not a direct topics-table id.\n }\n }\n\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.get as any, {\n id: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by ID query\",\n {\n error,\n scopeId,\n },\n );\n // Fall through to legacy-scope lookup.\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.getByLegacyScopeId as any, {\n projectId: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by legacy scope ID\",\n { error, scopeId },\n );\n // Best-effort compat lookup only.\n }\n\n return null;\n}\n\nexport function materializeTopicProjectOverlay(\n topic: TopicDocLike,\n idMode: OverlayIdMode = \"legacy\",\n): TopicProjectOverlay {\n const metadata = readMetadata(topic);\n const topicId = String(topic._id);\n const legacyProjectId =\n readLegacyProjectId(topic) ||\n readLegacyProjectId(metadata) ||\n readNonEmptyString(metadata.legacyProjectId);\n const storageProjectId = legacyProjectId || topicId;\n const outwardId = idMode === \"topic\" ? topicId : storageProjectId;\n const visibility =\n coerceVisibility(topic.visibility) ||\n coerceVisibility(metadata.visibility) ||\n \"private\";\n const status =\n coerceStatus(topic.status) || coerceStatus(metadata.status) || \"active\";\n const createdAt =\n typeof topic.createdAt === \"number\"\n ? topic.createdAt\n : typeof topic._creationTime === \"number\"\n ? topic._creationTime\n : 0;\n const updatedAt =\n typeof topic.updatedAt === \"number\"\n ? topic.updatedAt\n : typeof metadata.updatedAt === \"number\"\n ? (metadata.updatedAt as number)\n : createdAt;\n\n return {\n ...metadata,\n _id: outwardId,\n projectId: outwardId,\n topicId,\n storageProjectId,\n legacyProjectId,\n name: readNonEmptyString(topic.name) || \"Untitled Theme\",\n type: mapProjectType(topic, metadata),\n description: readNonEmptyString(topic.description),\n ownerId:\n readNonEmptyString(metadata.ownerId) ||\n readNonEmptyString(topic.createdBy) ||\n \"system\",\n sharedWith: readStringArray(metadata.sharedWith),\n visibility,\n tenantId:\n readNonEmptyString(topic.tenantId) ||\n readNonEmptyString(metadata.tenantId),\n workspaceId:\n readNonEmptyString(topic.workspaceId) ||\n readNonEmptyString(metadata.workspaceId),\n status,\n tags: readStringArray(metadata.tags),\n chatCount:\n typeof metadata.chatCount === \"number\"\n ? (metadata.chatCount as number)\n : 0,\n artifactCount:\n typeof metadata.artifactCount === \"number\"\n ? (metadata.artifactCount as number)\n : 0,\n lastActivityAt:\n typeof metadata.lastActivityAt === \"number\"\n ? (metadata.lastActivityAt as number)\n : updatedAt,\n _creationTime:\n typeof topic._creationTime === \"number\" ? topic._creationTime : createdAt,\n createdAt,\n updatedAt,\n };\n}\n\nexport async function resolveTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {},\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n if (options.projectLikeOnly !== false && !isProjectLikeTopic(topic)) {\n return null;\n }\n return materializeTopicProjectOverlay(topic, options.idMode);\n}\n\nexport async function listTopicProjectOverlays(\n ctx: any,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {},\n): Promise<TopicProjectOverlay[]> {\n let allTopics: TopicDocLike[] = [];\n\n if (ctx?.db?.query && typeof ctx.db.query === \"function\") {\n try {\n allTopics = (await ctx.db.query(\"topics\").collect()) as TopicDocLike[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to read topics table; falling back to API\",\n { error },\n );\n allTopics = [];\n }\n }\n\n if (allTopics.length === 0 && typeof ctx.runQuery === \"function\") {\n allTopics =\n (((await ctx.runQuery(api.topics.list as any, {})) ??\n []) as TopicDocLike[]) || [];\n }\n\n return allTopics\n .filter(\n (topic) => options.projectLikeOnly === false || isProjectLikeTopic(topic),\n )\n .map((topic) => materializeTopicProjectOverlay(topic, options.idMode));\n}\n\nexport async function patchTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n value: Record<string, unknown>,\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n\n const nextMetadata = { ...readMetadata(topic) };\n const patch: Record<string, unknown> = {};\n const topicUpdateArgs: Record<string, unknown> = {\n id: String(topic._id),\n };\n\n for (const [key, rawValue] of Object.entries(value)) {\n switch (key) {\n case \"_id\":\n case \"projectId\":\n case \"topicId\":\n case \"legacyProjectId\":\n case \"storageProjectId\":\n break;\n case \"name\":\n case \"description\":\n patch[key] = rawValue;\n topicUpdateArgs[key] = rawValue;\n break;\n case \"tenantId\":\n case \"workspaceId\":\n case \"ownerId\":\n throw new Error(\n `patchTopicProjectOverlay cannot mutate ${key} via component-owned topics`,\n );\n case \"status\": {\n const status = coerceStatus(rawValue);\n if (status) {\n patch.status = status;\n topicUpdateArgs.status = status;\n }\n break;\n }\n case \"visibility\": {\n const visibility = coerceVisibility(rawValue);\n if (visibility) {\n patch.visibility = visibility;\n topicUpdateArgs.visibility = visibility;\n }\n break;\n }\n case \"type\": {\n const projectType = readNonEmptyString(rawValue);\n if (projectType) {\n nextMetadata.projectType = projectType;\n } else {\n delete nextMetadata.projectType;\n }\n break;\n }\n case \"updatedAt\":\n case \"createdAt\":\n break;\n default:\n if (rawValue === undefined) {\n delete nextMetadata[key];\n } else {\n nextMetadata[key] = rawValue;\n }\n }\n }\n\n patch.updatedAt = Date.now();\n patch.metadata = nextMetadata;\n topicUpdateArgs.metadata = nextMetadata;\n\n if (typeof ctx.runMutation === \"function\") {\n try {\n await ctx.runMutation(api.topics.update as any, topicUpdateArgs);\n } catch (error) {\n if (\n !isMissingLucernChildComponentError(error) ||\n !ctx?.db ||\n typeof ctx.db.patch !== \"function\"\n ) {\n throw error;\n }\n await ctx.db.patch(String(topic._id) as any, patch);\n }\n } else if (ctx?.db && typeof ctx.db.patch === \"function\") {\n await ctx.db.patch(String(topic._id) as any, patch);\n } else {\n throw new Error(\n \"Cannot patch topic without component adapter (ctx.runMutation unavailable)\",\n );\n }\n\n return materializeTopicProjectOverlay({\n ...topic,\n ...patch,\n metadata: nextMetadata,\n } as TopicDocLike);\n}\n\nexport function matchesTopicProjectOverlayAccess(\n accessibleProjectIds: Set<string>,\n project: {\n topicId: string;\n legacyProjectId?: string;\n storageProjectId?: string;\n },\n): boolean {\n return (\n accessibleProjectIds.has(project.storageProjectId || project.topicId) ||\n accessibleProjectIds.has(project.topicId) ||\n (typeof project.legacyProjectId === \"string\" &&\n accessibleProjectIds.has(project.legacyProjectId))\n );\n}\n","/** Data-source resolver wiring for the graph-primitives module. */\nimport {\n listTopicProjectOverlays,\n patchTopicProjectOverlay,\n resolveTopicProjectOverlay,\n} from \"./topicProjectOverlay\";\nimport type {\n GraphPrimitivesAppResolverContext,\n GraphPrimitivesAppResolvers,\n} from \"./resolverTypes\";\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = getErrorMessage(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found',\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n return (error as { message: string }).message;\n }\n return \"unknown error\";\n}\n\nfunction isAdvisoryTopicPatch(value: Record<string, unknown>): boolean {\n const advisoryKeys = new Set([\"lastActivityAt\", \"updatedAt\"]);\n const keys = Object.keys(value);\n return keys.length > 0 && keys.every((key) => advisoryKeys.has(key));\n}\n\nasync function patchProjectWithTolerance(\n ctx: GraphPrimitivesAppResolverContext,\n projectId: string,\n value: Record<string, unknown>,\n): Promise<void> {\n try {\n await patchTopicProjectOverlay(ctx, projectId, value);\n } catch (error) {\n if (\n !isAdvisoryTopicPatch(value) ||\n !isMissingLucernChildComponentError(error)\n ) {\n throw error;\n }\n\n console.warn(\n \"[lucern graph-primitives] Non-fatal advisory topic patch failure\",\n {\n projectId,\n keys: Object.keys(value),\n error: getErrorMessage(error),\n },\n );\n }\n}\n\nfunction defaultResolvers(): GraphPrimitivesAppResolvers {\n return {\n getProject: (ctx, projectId) =>\n resolveTopicProjectOverlay(ctx, projectId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n }),\n patchProject: (ctx, projectId, value) =>\n patchProjectWithTolerance(ctx, projectId, value),\n listTopics: (ctx) =>\n listTopicProjectOverlays(ctx, {\n idMode: \"legacy\",\n }),\n getFinalArtifact: (ctx, artifactId) => ctx.db.get(artifactId),\n };\n}\n\nlet resolverOverrides: Partial<GraphPrimitivesAppResolvers> = {};\n\nexport function configureGraphPrimitivesAppResolvers(\n overrides: Partial<GraphPrimitivesAppResolvers>,\n): void {\n resolverOverrides = {\n ...resolverOverrides,\n ...overrides,\n };\n}\n\nexport function resetGraphPrimitivesAppResolvers(): void {\n resolverOverrides = {};\n}\n\nexport function resolveGraphPrimitivesAppResolvers(\n _ctx: GraphPrimitivesAppResolverContext,\n): GraphPrimitivesAppResolvers {\n return {\n ...defaultResolvers(),\n ...resolverOverrides,\n };\n}\n","/**\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 { v } from \"convex/values\";\nimport {\n detectTupleContradiction,\n evaluateTupleContradictionTransition,\n confidenceFromSL,\n mkOpinion,\n normalizeTupleContradictionPolicy,\n readOpinionFromRecord,\n type ConfidencePolicyConfig,\n type Opinion,\n type SLOpinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport {\n checkProjectAccess,\n checkScopeAccess,\n} 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 { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { assertSchemaEnumValue } from \"@lucern/contracts/schema-helpers/enumValidation\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport {\n type BeliefLifecycleStatus,\n isPreValidationBeliefStatus,\n promoteBeliefStatusAfterScoring,\n resolveBeliefLifecycleStatus,\n} from \"./beliefLifecycle\";\nimport type { Doc, Id, MutationCtx, QueryCtx } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport { collectConfidencePropagationDispatches } from \"./confidencePropagationDispatch\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport {\n createInheritedContractRecord,\n type VerificationConfidenceTrigger,\n} from \"./epistemicContractHelpers\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { generateGlobalId } from \"./globalId\";\nimport { computeLogicalRole } from \"./logicalRoleInference\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n nodeMatchesWorkspaceReasoningScope,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} 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\ntype StructuredMutationError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype BeliefScopeArgs = {\n projectId?: string | null;\n topicId?: string | null;\n};\n\ntype EpistemicNodeOpinionDoc = Doc<\"epistemicNodes\"> & {\n opinion_a?: number;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n tupleContradicted?: boolean;\n userId?: string;\n metadata?: Record<string, unknown> | null;\n};\n\ntype EpistemicIndexQuery = {\n eq(field: string, value: unknown): EpistemicIndexQuery;\n gt(field: string, value: unknown): EpistemicIndexQuery;\n lt(field: string, value: unknown): EpistemicIndexQuery;\n field(field: string): string;\n};\n\ntype EpistemicQueryChain<T> = {\n withIndex(\n _name: string,\n callback: (q: EpistemicIndexQuery) => EpistemicIndexQuery,\n ): EpistemicQueryChain<T>;\n order(direction: \"asc\" | \"desc\"): EpistemicQueryChain<T>;\n filter(\n callback: (q: EpistemicIndexQuery) => EpistemicIndexQuery,\n ): EpistemicQueryChain<T>;\n first(): Promise<T | null>;\n collect(): Promise<T[]>;\n take(limit: number): Promise<T[]>;\n};\n\ntype EpistemicBeliefCtx = QueryCtx & {\n db: {\n query<T = unknown>(_table: string): EpistemicQueryChain<T>;\n get<T = unknown>(id: Id<string>): Promise<T | null>;\n };\n scheduler: {\n runAfter(\n _delayMs: number,\n _handler: unknown,\n _args: unknown,\n ): Promise<unknown>;\n };\n};\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 | \"manual\"\n | \"decay\"\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 throwStructuredMutationError(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 StructuredMutationError;\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\nexport function readFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nexport function assertBaseRateInRange(baseRate: number, field = \"baseRate\"): 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 ?? (\"manual_assessment\" 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: Doc<\"epistemicNodes\">,\n metadata: Record<string, unknown>,\n): SLOpinion {\n try {\n return readOpinionFromRecord({\n ...metadata,\n opinion_b: (node as any).opinion_b,\n opinion_d: (node as any).opinion_d,\n opinion_u: (node as any).opinion_u,\n opinion_a: (node as any).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(\n node: Doc<\"epistemicNodes\">,\n): \"critical\" | \"significant\" | \"minor\" {\n const metadata = (node.metadata || {}) as Record<string, unknown>;\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 hash = (hash << 5) + hash + content.charCodeAt(i);\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\nexport function 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 await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n topicId ?? projectId!,\n {\n lastActivityAt: Date.now(),\n },\n );\n}\n\nexport async function resolveBeliefScopeOrNull(\n ctx: QueryCtx,\n args: BeliefScopeArgs,\n) {\n if (!args.projectId && !args.topicId) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n projectId: args.projectId ?? undefined,\n topicId: args.topicId ?? undefined,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[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: any) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\"),\n );\n const nodes: EpistemicNodeOpinionDoc[] =\n typeof args?.scanLimit === \"number\"\n ? (await baseQuery.order(\"desc\").take(args.scanLimit)) as EpistemicNodeOpinionDoc[]\n : (await baseQuery.collect()) as EpistemicNodeOpinionDoc[];\n const scopedNodes = nodes.filter((node: Doc<\"epistemicNodes\">) =>\n nodeMatchesWorkspaceReasoningScope(node, scope),\n );\n\n if (!args?.status) {\n return scopedNodes;\n }\n\n return scopedNodes.filter((node: EpistemicNodeOpinionDoc) => node.status === args.status);\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: Doc<\"epistemicNodes\">) {\n const meta = (node.metadata || {}) as Record<string, unknown>;\n const worktreeId = resolveBeliefWorktreeId(meta);\n const tupleContradicted =\n readTupleContradictedFlag(\n (node as EpistemicNodeOpinionDoc).tupleContradicted,\n ) ??\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 as EpistemicNodeOpinionDoc).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: any) => q.eq(\"beliefId\", beliefNodeId))\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: any) => q.eq(\"isActive\", true))\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\nexport async function requireProjectWriteAccess(\n ctx: { db: unknown },\n projectId: string,\n userId: string,\n): Promise<void> {\n const hasAccess = await checkProjectAccess(\n ctx as Parameters<typeof checkProjectAccess>[0],\n projectId,\n userId,\n );\n if (!hasAccess) {\n throwStructuredMutationError({\n message: \"Project access required.\",\n status: 403,\n code: \"FORBIDDEN\",\n invariantCode: \"policy.scope_required\",\n suggestion: \"Request write access for the project and retry.\",\n details: { projectId, userId },\n });\n }\n}\n","/** Split belief creation and lifecycle entrypoints out of epistemicBeliefs.ts. */\n\nimport { v } from \"convex/values\";\nimport {\n detectTupleContradiction,\n evaluateTupleContradictionTransition,\n confidenceFromSL,\n mkOpinion,\n normalizeTupleContradictionPolicy,\n readOpinionFromRecord,\n type ConfidencePolicyConfig,\n type Opinion,\n type SLOpinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport {\n checkProjectAccess,\n checkScopeAccess,\n} 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 { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { assertSchemaEnumValue } from \"@lucern/contracts/schema-helpers/enumValidation\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport {\n type BeliefLifecycleStatus,\n isPreValidationBeliefStatus,\n promoteBeliefStatusAfterScoring,\n resolveBeliefLifecycleStatus,\n} from \"./beliefLifecycle\";\nimport type { Doc, Id, MutationCtx } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport { collectConfidencePropagationDispatches } from \"./confidencePropagationDispatch\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport {\n createInheritedContractRecord,\n type VerificationConfidenceTrigger,\n} from \"./epistemicContractHelpers\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { generateGlobalId } from \"./globalId\";\nimport { computeLogicalRole } from \"./logicalRoleInference\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n nodeMatchesWorkspaceReasoningScope,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\nimport {\n assertBaseRateInRange,\n buildBeliefConfidenceRow,\n clampBeliefLimit,\n generateContentHash,\n getActiveConfidencePolicy,\n markBeliefGraphDirty,\n MAX_PROJECT_BELIEF_LIMIT,\n normalizePillar,\n optionalBeliefScopeArgs,\n requireAuthenticatedUserId,\n requireProjectWriteAccess,\n throwStructuredMutationError,\n} from \"./epistemicBeliefs.helpers\";\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 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, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"belief\",\n mutationName: \"epistemicBeliefs.create\",\n });\n const topic = await ctx.db.get(scope.topicId);\n const normalizedBeliefType = await assertSchemaEnumValue(ctx, {\n category: \"belief_type\",\n value: args.beliefType,\n tenantId: topic?.tenantId,\n context: \"epistemicBeliefs.create\",\n });\n if (scope.projectId) {\n await requireProjectWriteAccess(\n ctx,\n scope.projectId,\n authenticatedUserId,\n );\n }\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 // Merge additional metadata with standard metadata\n const additionalMeta = (args.metadata as Record<string, unknown>) || {};\n\n // Create the epistemic node\n const beliefGlobalId = generateGlobalId();\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\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 worktree completion via modulateConfidence()\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 as any,\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 as any,\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: \"manual_assessment\",\n }) as any,\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.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\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 // GRAPH TOPOLOGY - SPRINT IS THE EPISTEMIC BOUNDARY\n // ==========================================================================\n //\n // The SPRINT connects beliefs to the theme, not belief creation.\n //\n // Flow:\n // 1. ASSUMPTION beliefs: Raw inputs, float disconnected from theme\n // 2. HYPOTHESIS (in sprint): Being tested, still no theme edge\n // 3. SCORED (sprint complete): NOW gets belongs_to edge to theme\n // - Edge weight = conviction level (high conviction = shorter edge)\n //\n // The belongs_to edge is created ONLY when:\n // - Sprint completes → belief becomes \"scored\" → create theme edge\n // - See: sprints.ts completeSprint mutation\n //\n // Other nodes NEVER connect directly to theme:\n // - Questions → test → Beliefs (not theme)\n // - Evidence → answer/inform → Questions/Beliefs (not theme)\n //\n // NO THEME EDGE CREATED HERE - HAPPENS IN SPRINT COMPLETION\n // ==========================================================================\n\n // ==========================================================================\n // ONTOLOGY: Schedule belief classification for entity extraction\n // ==========================================================================\n if (scope.projectId || 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.projectId || scope.topicId)) {\n await ctx.scheduler.runAfter(\n 2500,\n \"beliefCategorization:autoCategorizeBelief\" as any,\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.projectId || 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\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, args) => {\n const id = (args.nodeId ?? args.beliefId) as\n | Id<\"epistemicNodes\">\n | undefined;\n if (!id) {\n return null;\n }\n const node = await ctx.db.get(id);\n if (!node || node.nodeType !== \"belief\") {\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, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node) {\n throwStructuredMutationError({\n message: \"Belief not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion:\n \"Verify nodeId points to an existing belief before refining.\",\n details: { nodeId: args.nodeId },\n });\n }\n if (node.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `refineBelief only applies to belief nodes. Received nodeType \"${node.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: args.nodeId, nodeType: node.nodeType },\n });\n }\n if (!node.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: args.nodeId },\n });\n }\n\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n if (\n typeof node.confidence === \"number\" &&\n Number.isFinite(node.confidence)\n ) {\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: args.nodeId, confidence: node.confidence },\n });\n }\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\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, args) => {\n if (!args.projectId && !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) : scope.projectId;\n if (!scopeId) {\n return [];\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n }\n\n const 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 = await query.order(\"desc\").take(scanLimit);\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, args) => {\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 = await query.order(\"desc\").take(scanLimit);\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 v.literal(\"manual\"),\n ),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n const _confidencePolicy = await getActiveConfidencePolicy(ctx);\n\n // Get the parent belief\n const parent = await ctx.db.get(args.parentNodeId);\n if (!parent) {\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 if (parent.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `forkBelief only applies to belief nodes. Received nodeType \"${parent.nodeType}\". 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.\",\n details: { parentNodeId: args.parentNodeId, nodeType: parent.nodeType },\n });\n }\n if (!parent.projectId) {\n throwStructuredMutationError({\n message: \"Parent 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 fork.\",\n details: { parentNodeId: args.parentNodeId },\n });\n }\n await requireProjectWriteAccess(ctx, parent.projectId, authenticatedUserId);\n\n const metadata = parent.metadata as Record<string, unknown> | undefined;\n const forkBeliefStatus: BeliefLifecycleStatus = \"hypothesis\";\n\n // Create the new forked belief\n const newBeliefGlobalId = generateGlobalId();\n const newNodeId = await ctx.db.insert(\"epistemicNodes\", {\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 forkTimestamp: now,\n forkedBy: authenticatedUserId,\n status: \"active\",\n beliefStatus: forkBeliefStatus,\n tupleContradicted: false,\n },\n beliefStatus: forkBeliefStatus as any,\n sourceType: parent.sourceType,\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 const inheritedContracts = (await (ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q: any) =>\n q.eq(\"beliefNodeId\", args.parentNodeId),\n )\n .collect()) as Array<Record<string, unknown> & { status?: string }>;\n\n for (const contract of inheritedContracts) {\n if (contract.status === \"archived\") {\n continue;\n }\n await (ctx.db as any).insert(\n \"epistemicContracts\",\n createInheritedContractRecord(contract as any, {\n beliefNodeId: newNodeId,\n topicId: parent.topicId,\n createdBy: authenticatedUserId,\n now,\n }) as any,\n );\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: parent.globalId,\n edgeType: \"supersedes\",\n context: `Fork reason: ${args.forkReason}`,\n createdBy: authenticatedUserId,\n topicId: parent.projectId ? String(parent.projectId) : undefined,\n fromNodeType: \"belief\",\n toNodeType: \"belief\",\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 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.projectId || 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\" as any,\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 { newNodeId, parentNodeId: args.parentNodeId };\n },\n});\n"]}
@@ -1,5 +1,14 @@
1
+ export { BeliefConfidenceTrigger, flattenBeliefNode, resolveBeliefWorktreeId } from './epistemicBeliefs.helpers.js';
2
+ export { applyBeliefConfidenceChange, propagateConfidenceChange } from './epistemicBeliefs.confidence.js';
3
+ export { create, forkBelief, getById, getByProject, getByTopic, refineBelief } from './epistemicBeliefs.core.js';
4
+ export { archive, modulateConfidence, updateRationale, updateStatus, updateStatusInternal } from './epistemicBeliefs.lifecycle.js';
5
+ export { getByIds, getByWorktree, getConfidenceHistory, getLineage } from './epistemicBeliefs.queries.js';
6
+ export { getCountByStatus, getRelationships, getWithEvidence, linkBeliefs, linkEvidence, unlinkEvidence, updatePillar } from './epistemicBeliefs.links.js';
7
+ export { batchUpdateCriticality, deleteRelationship, getByCriticality, getByPillar, getByProjectSystem, getUnanalyzed, getWorktreeCluster, updateCriticality } from './epistemicBeliefs.admin.js';
8
+ export { internalCreate, internalGetActive, internalGetById, internalGetByProject, internalGetByTopic } from './epistemicBeliefs.internal.js';
9
+ export { backfillBeliefSprintIds, backfillMandatoryPriors, backfillScoredBeliefEdges, backfillSyntheticOpinionHistory, backfillTwoAxisConfidence, getBeliefClusterPositions, getRecentConfidenceChanges, reassignBeliefsTopic } from './epistemicBeliefs.backfills.js';
10
+ import './topicScope-By_zp4tt.js';
11
+ import 'convex/values';
12
+ import './convex.js';
1
13
  import '@lucern/confidence';
2
14
  import './beliefLifecycle-y8WLXqQj.js';
3
- import './convex.js';
4
- export { B as BeliefConfidenceTrigger, a as applyBeliefConfidenceChange, b as archive, c as backfillBeliefSprintIds, d as backfillMandatoryPriors, f as backfillScoredBeliefEdges, g as backfillSyntheticOpinionHistory, h as backfillTwoAxisConfidence, i as batchUpdateCriticality, j as create, k as deleteRelationship, l as flattenBeliefNode, m as forkBelief, n as getBeliefClusterPositions, o as getByCriticality, p as getById, q as getByIds, r as getByPillar, s as getByProject, t as getByProjectSystem, u as getByTopic, v as getByWorktree, w as getConfidenceHistory, x as getCountByStatus, y as getLineage, z as getRecentConfidenceChanges, A as getRelationships, C as getUnanalyzed, D as getWithEvidence, E as getWorktreeCluster, F as internalCreate, G as internalGetActive, H as internalGetById, I as internalGetByProject, J as internalGetByTopic, K as linkBeliefs, L as linkEvidence, M as modulateConfidence, N as propagateConfidenceChange, O as reassignBeliefsTopic, P as refineBelief, Q as resolveBeliefWorktreeId, R as unlinkEvidence, S as updateCriticality, T as updatePillar, U as updateRationale, V as updateStatus, W as updateStatusInternal } from './epistemicBeliefs-DzKjZAeC.js';
5
- import 'convex/values';
@@ -0,0 +1,168 @@
1
+ import { r as resolveTopicProjectScope, T as TopicProjectScope } from './topicScope-By_zp4tt.js';
2
+ import * as convex_values from 'convex/values';
3
+ import { VerificationConfidenceTrigger, SLOperator, SLOpinion, Opinion, ConfidencePolicyConfig } from '@lucern/confidence';
4
+ import { B as BeliefLifecycleStatus } from './beliefLifecycle-y8WLXqQj.js';
5
+ import { Id, Doc, QueryCtx } from './convex.js';
6
+
7
+ declare const insightIdUnion: convex_values.VId<convex_values.GenericId<"epistemicNodes">, "required">;
8
+ declare const MAX_PROJECT_BELIEF_LIMIT = 1000;
9
+ declare const optionalBeliefScopeArgs: {
10
+ readonly projectId: convex_values.VString<string | undefined, "optional">;
11
+ readonly topicId: convex_values.VString<string | undefined, "optional">;
12
+ };
13
+ type BeliefScopeArgs = {
14
+ projectId?: string | null;
15
+ topicId?: string | null;
16
+ };
17
+ type EpistemicIndexQuery = {
18
+ eq(field: string, value: unknown): EpistemicIndexQuery;
19
+ gt(field: string, value: unknown): EpistemicIndexQuery;
20
+ lt(field: string, value: unknown): EpistemicIndexQuery;
21
+ field(field: string): string;
22
+ };
23
+ type EpistemicQueryChain<T> = {
24
+ withIndex(_name: string, callback: (q: EpistemicIndexQuery) => EpistemicIndexQuery): EpistemicQueryChain<T>;
25
+ order(direction: "asc" | "desc"): EpistemicQueryChain<T>;
26
+ filter(callback: (q: EpistemicIndexQuery) => EpistemicIndexQuery): EpistemicQueryChain<T>;
27
+ first(): Promise<T | null>;
28
+ collect(): Promise<T[]>;
29
+ take(limit: number): Promise<T[]>;
30
+ };
31
+ type EpistemicBeliefCtx = QueryCtx & {
32
+ db: {
33
+ query<T = unknown>(_table: string): EpistemicQueryChain<T>;
34
+ get<T = unknown>(id: Id<string>): Promise<T | null>;
35
+ };
36
+ scheduler: {
37
+ runAfter(_delayMs: number, _handler: unknown, _args: unknown): Promise<unknown>;
38
+ };
39
+ };
40
+ type AudienceClass = "internal" | "restricted_external" | "public";
41
+ type BeliefConfidenceTrigger = "initial" | "evidence_added" | "evidence_removed" | "contradiction_detected" | "contradiction_resolved" | "manual" | "decay" | "agent_assessment" | "worktree_outcome" | "worktree_completed" | "fusion" | "discount" | "deduction" | "backfill_synthetic" | VerificationConfidenceTrigger;
42
+ declare function throwStructuredMutationError(args: {
43
+ message: string;
44
+ status: number;
45
+ code: string;
46
+ invariantCode?: string;
47
+ suggestion?: string;
48
+ details?: unknown;
49
+ }): never;
50
+ declare function readFiniteNumber(value: unknown): number | undefined;
51
+ declare function assertBaseRateInRange(baseRate: number, field?: string): number;
52
+ declare function buildBeliefConfidenceRow(args: {
53
+ beliefId: Id<"epistemicNodes">;
54
+ belief: number;
55
+ disbelief: number;
56
+ uncertainty: number;
57
+ baseRate: number;
58
+ trigger: BeliefConfidenceTrigger;
59
+ rationale?: string;
60
+ assessedBy: string;
61
+ assessedAt: number;
62
+ slOperator?: SLOperator;
63
+ triggeringEvidenceId?: Id<"epistemicNodes">;
64
+ triggeringContradictionId?: Id<"contradictions">;
65
+ triggeringWorktreeId?: string;
66
+ }): {
67
+ triggeringWorktreeId?: string | undefined;
68
+ triggeringContradictionId?: Id<"contradictions"> | undefined;
69
+ triggeringEvidenceId?: Id<"epistemicNodes"> | undefined;
70
+ triggeringEvidenceIds?: string[] | undefined;
71
+ assessedBy: string;
72
+ assessedAt: number;
73
+ rationale?: string | undefined;
74
+ beliefId: Id<"epistemicNodes">;
75
+ confidence: number;
76
+ belief: number;
77
+ disbelief: number;
78
+ uncertainty: number;
79
+ baseRate: number;
80
+ slOperator: SLOperator;
81
+ trigger: BeliefConfidenceTrigger;
82
+ };
83
+ type BeliefStatusResult = {
84
+ success: true;
85
+ } | {
86
+ success: false;
87
+ message: "Evidence node not found";
88
+ };
89
+ declare function buildBeliefStatusSuccessResult(): BeliefStatusResult;
90
+ declare function buildBeliefEvidenceNotFoundResult(): BeliefStatusResult;
91
+ declare function deriveSyntheticBackfillOpinion(source: Record<string, unknown>): SLOpinion;
92
+ declare function clampBeliefLimit(limit: number | undefined, fallback?: number): number;
93
+ declare function readTupleContradictedFlag(value: unknown): boolean | undefined;
94
+ declare function readBeliefOpinionSnapshot(node: Doc<"epistemicNodes">, metadata: Record<string, unknown>): SLOpinion;
95
+ declare function deriveTupleContradictionSeverity(node: Doc<"epistemicNodes">): "critical" | "significant" | "minor";
96
+ declare function formatTupleContradictionDescription(args: {
97
+ opinion: Opinion;
98
+ policy: ConfidencePolicyConfig["tupleContradiction"];
99
+ }): string;
100
+ declare function generateContentHash(text: string): string;
101
+ declare function resolveBeliefWorktreeId(metadata: Record<string, unknown> | undefined): string | undefined;
102
+ type ValidPillar = "market" | "competition" | "product" | "team" | "financials" | "regulatory" | "timing" | "customer" | "technology" | "distribution" | "deal" | "risks" | "other";
103
+ declare function normalizePillar(pillar?: string): ValidPillar;
104
+ declare function markBeliefGraphDirty(ctx: EpistemicBeliefCtx, scope: {
105
+ projectId?: string | null;
106
+ topicId?: string | null;
107
+ }): Promise<void>;
108
+ declare function resolveBeliefScopeOrNull(ctx: QueryCtx, args: BeliefScopeArgs): Promise<TopicProjectScope | null>;
109
+ declare function getBeliefNodesForScope(ctx: EpistemicBeliefCtx, scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>, args?: {
110
+ scanLimit?: number;
111
+ status?: string;
112
+ }): Promise<any[]>;
113
+ declare function createBeliefAudienceResolver(registryRows: Array<{
114
+ audienceKey?: string | null;
115
+ audienceClass: AudienceClass;
116
+ }>): (audienceKey: string | undefined | null, fallback: AudienceClass) => AudienceClass;
117
+ declare function flattenBeliefNode(node: Doc<"epistemicNodes">): {
118
+ _id: any;
119
+ _epistemicNodeId: any;
120
+ _creationTime: any;
121
+ belief: any;
122
+ formulation: any;
123
+ projectId: any;
124
+ topicId: any;
125
+ userId: any;
126
+ confidence: "high" | "medium" | "low";
127
+ status: any;
128
+ beliefStatus: BeliefLifecycleStatus;
129
+ topic: string;
130
+ pillar: string;
131
+ category: string;
132
+ subcategory: string;
133
+ categoryIcon: string;
134
+ supportingEvidence: string[];
135
+ contradictingEvidence: string[];
136
+ testingQuestions: string[];
137
+ linkedInsights: string[];
138
+ createdAt: any;
139
+ updatedAt: any;
140
+ tupleContradicted: boolean;
141
+ sprintId: string | undefined;
142
+ worktreeId: string | undefined;
143
+ sourceBeliefIds: string[];
144
+ criticality: "critical" | "blocking" | "supporting" | "nice_to_have" | "unanalyzed" | "important";
145
+ rationale: string;
146
+ audienceLabel: any;
147
+ policyTags: any;
148
+ sensitivityTier: any;
149
+ exportClass: any;
150
+ anonymizationClass: any;
151
+ };
152
+ declare function resolveBeliefStatus(node: {
153
+ beliefStatus?: unknown;
154
+ confidence?: unknown;
155
+ predictionMeta?: unknown;
156
+ }, metadata: Record<string, unknown>): BeliefLifecycleStatus;
157
+ declare function hasCompletedWorktreeForBelief(ctx: EpistemicBeliefCtx, beliefNodeId: Id<"epistemicNodes">): Promise<boolean>;
158
+ declare function getActiveConfidencePolicy(ctx: EpistemicBeliefCtx): Promise<ConfidencePolicyConfig>;
159
+ declare function requireAuthenticatedUserId(ctx: {
160
+ auth: {
161
+ getUserIdentity: () => Promise<unknown>;
162
+ };
163
+ }): Promise<string>;
164
+ declare function requireProjectWriteAccess(ctx: {
165
+ db: unknown;
166
+ }, projectId: string, userId: string): Promise<void>;
167
+
168
+ export { type BeliefConfidenceTrigger, MAX_PROJECT_BELIEF_LIMIT, assertBaseRateInRange, buildBeliefConfidenceRow, buildBeliefEvidenceNotFoundResult, buildBeliefStatusSuccessResult, clampBeliefLimit, createBeliefAudienceResolver, deriveSyntheticBackfillOpinion, deriveTupleContradictionSeverity, flattenBeliefNode, formatTupleContradictionDescription, generateContentHash, getActiveConfidencePolicy, getBeliefNodesForScope, hasCompletedWorktreeForBelief, insightIdUnion, markBeliefGraphDirty, normalizePillar, optionalBeliefScopeArgs, readBeliefOpinionSnapshot, readFiniteNumber, readTupleContradictedFlag, requireAuthenticatedUserId, requireProjectWriteAccess, resolveBeliefScopeOrNull, resolveBeliefStatus, resolveBeliefWorktreeId, throwStructuredMutationError };