@lucern/graph-primitives 1.0.25 → 1.0.27

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 (52) hide show
  1. package/dist/beliefDecay.js +5 -0
  2. package/dist/beliefDecay.js.map +1 -1
  3. package/dist/beliefEvidenceLinks.js +5 -0
  4. package/dist/beliefEvidenceLinks.js.map +1 -1
  5. package/dist/entityLifecycle.js +5 -0
  6. package/dist/entityLifecycle.js.map +1 -1
  7. package/dist/epistemicBeliefs.core.js +5 -0
  8. package/dist/epistemicBeliefs.core.js.map +1 -1
  9. package/dist/epistemicBeliefs.helpers.js +5 -0
  10. package/dist/epistemicBeliefs.helpers.js.map +1 -1
  11. package/dist/epistemicBeliefs.internal.js +5 -0
  12. package/dist/epistemicBeliefs.internal.js.map +1 -1
  13. package/dist/epistemicBeliefs.js +5 -0
  14. package/dist/epistemicBeliefs.js.map +1 -1
  15. package/dist/epistemicEdges.js +5 -0
  16. package/dist/epistemicEdges.js.map +1 -1
  17. package/dist/epistemicEdges.mutations.js +5 -0
  18. package/dist/epistemicEdges.mutations.js.map +1 -1
  19. package/dist/epistemicEvidence.js +5 -0
  20. package/dist/epistemicEvidence.js.map +1 -1
  21. package/dist/epistemicEvidenceHelpers.js +5 -0
  22. package/dist/epistemicEvidenceHelpers.js.map +1 -1
  23. package/dist/epistemicEvidenceMutations.js +5 -0
  24. package/dist/epistemicEvidenceMutations.js.map +1 -1
  25. package/dist/epistemicEvidenceQueries.js +5 -0
  26. package/dist/epistemicEvidenceQueries.js.map +1 -1
  27. package/dist/epistemicQuestions.conviction.js +5 -0
  28. package/dist/epistemicQuestions.conviction.js.map +1 -1
  29. package/dist/epistemicQuestions.create.js +5 -0
  30. package/dist/epistemicQuestions.create.js.map +1 -1
  31. package/dist/epistemicQuestions.evidence.js +5 -0
  32. package/dist/epistemicQuestions.evidence.js.map +1 -1
  33. package/dist/epistemicQuestions.helpers.js +5 -0
  34. package/dist/epistemicQuestions.helpers.js.map +1 -1
  35. package/dist/epistemicQuestions.js +5 -0
  36. package/dist/epistemicQuestions.js.map +1 -1
  37. package/dist/epistemicQuestions.lifecycle.js +5 -0
  38. package/dist/epistemicQuestions.lifecycle.js.map +1 -1
  39. package/dist/epistemicQuestions.queries.js +5 -0
  40. package/dist/epistemicQuestions.queries.js.map +1 -1
  41. package/dist/epistemicQuestions.tail.js +5 -0
  42. package/dist/epistemicQuestions.tail.js.map +1 -1
  43. package/dist/index.js +5 -0
  44. package/dist/index.js.map +1 -1
  45. package/dist/proof-attestation.json +1 -1
  46. package/dist/questionEvidenceLinks.js +5 -0
  47. package/dist/questionEvidenceLinks.js.map +1 -1
  48. package/dist/resolvers.js +5 -0
  49. package/dist/resolvers.js.map +1 -1
  50. package/dist/topicProjectOverlay.js +5 -0
  51. package/dist/topicProjectOverlay.js.map +1 -1
  52. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/matcherFeedbackUtils.ts","../src/convex.ts","../src/debug.ts","../src/topicScope.ts","../src/scopeResolverCompat.ts","../src/topicProjectOverlay.ts","../src/resolvers.ts","../src/epistemicInsert.ts","../src/beliefEvidenceLinks.operational.ts","../src/beliefEvidenceLinks.ts"],"names":["normalizeScopeValue","topicId","LEGACY_SCOPE_FIELD","isMissingLucernChildComponentError","getErrorMessage","v"],"mappings":"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","file":"beliefEvidenceLinks.js","sourcesContent":["/** Matcher feedback helper types shared by graph-primitive review flows. */\nexport type LinkSuggestionStatus = \"suggested\" | \"approved\" | \"dismissed\";\n\nexport type MatcherReviewStatus =\n | \"pending\"\n | \"accepted\"\n | \"rejected\"\n | \"auto_accepted\"\n | \"superseded\";\n\ntype MatcherFeedbackSummaryRow = {\n matcherKey?: string | null;\n reviewStatus: MatcherReviewStatus;\n rewardScore?: number | null;\n surface?: string | null;\n};\n\nexport function isOperationalLinkStatus(\n status?: LinkSuggestionStatus | null\n): boolean {\n return status !== \"suggested\" && status !== \"dismissed\";\n}\n\nexport function mergeLinkSuggestionStatus(\n existing?: LinkSuggestionStatus | null,\n requested?: LinkSuggestionStatus | null\n): LinkSuggestionStatus | undefined {\n if (requested === undefined || requested === null) {\n return existing ?? undefined;\n }\n\n if (\n existing &&\n isOperationalLinkStatus(existing) &&\n !isOperationalLinkStatus(requested)\n ) {\n return existing;\n }\n\n return requested;\n}\n\nexport function resolveReviewedLinkStatus(\n requested: \"approved\" | \"dismissed\"\n): LinkSuggestionStatus {\n return requested;\n}\n\nexport function deriveMatcherReviewStatus(input: {\n explicitReviewStatus?: MatcherReviewStatus | null;\n linkStatus?: LinkSuggestionStatus | null;\n autoAccepted?: boolean;\n}): MatcherReviewStatus {\n if (input.explicitReviewStatus) {\n return input.explicitReviewStatus;\n }\n\n if (input.autoAccepted) {\n return \"auto_accepted\";\n }\n\n if (input.linkStatus === \"suggested\") {\n return \"pending\";\n }\n\n if (input.linkStatus === \"dismissed\") {\n return \"rejected\";\n }\n\n return \"accepted\";\n}\n\nexport function deriveMatcherRewardScore(\n reviewStatus: MatcherReviewStatus\n): number {\n switch (reviewStatus) {\n case \"accepted\":\n case \"auto_accepted\":\n return 1;\n case \"rejected\":\n return -1;\n default:\n return 0;\n }\n}\n\nexport function summarizeMatcherFeedback(rows: MatcherFeedbackSummaryRow[]) {\n const totals = {\n total: rows.length,\n pending: 0,\n accepted: 0,\n autoAccepted: 0,\n rejected: 0,\n superseded: 0,\n };\n\n const surfaces = new Set<string>();\n const matcherKeys = new Set<string>();\n let rewardSum = 0;\n\n for (const row of rows) {\n if (row.surface) {\n surfaces.add(row.surface);\n }\n if (row.matcherKey) {\n matcherKeys.add(row.matcherKey);\n }\n\n switch (row.reviewStatus) {\n case \"pending\":\n totals.pending += 1;\n break;\n case \"accepted\":\n totals.accepted += 1;\n break;\n case \"auto_accepted\":\n totals.autoAccepted += 1;\n break;\n case \"rejected\":\n totals.rejected += 1;\n break;\n case \"superseded\":\n totals.superseded += 1;\n break;\n default:\n break;\n }\n\n rewardSum += row.rewardScore ?? deriveMatcherRewardScore(row.reviewStatus);\n }\n\n const decided = totals.accepted + totals.autoAccepted + totals.rejected;\n const positive = totals.accepted + totals.autoAccepted;\n\n return {\n ...totals,\n decided,\n acceptanceRate: decided > 0 ? positive / decided : 0,\n averageReward: rows.length > 0 ? rewardSum / rows.length : 0,\n uniqueSurfaces: surfaces.size,\n uniqueMatchers: matcherKeys.size,\n };\n}\n","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","/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport { api as appApi } from \"./convex\";\nimport type { Id } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectScope = {\n topicId: Id<\"topics\">;\n projectId?: string;\n tenantId?: string;\n workspaceId?: string;\n source:\n | \"topic\"\n | \"project_mapped_topic\"\n | \"topic_inferred\"\n | \"topic_node\";\n};\n\n/**\n * RR.5 (legacy topics-table retirement) — graph-primitives mirror of the\n * kernel's epistemicNodes-first topic-scope fallback. Kept in lockstep with\n * `packages/reasoning-kernel/src/adapters/lib/topicScope.ts`\n * (`tests/unit/convex/topic-scope-fallbacks.test.ts` asserts parity).\n *\n * Resolves a topic that exists only as `epistemicNodes(nodeType=\"topic\")` —\n * the write-of-record — when no legacy `topics` row backs the ref, returning the\n * node's `topicId` self-key so scoped beliefs/evidence/questions stay reachable.\n * See the kernel module for the full silent-empty-result rationale.\n */\ntype TopicNodeScopeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n globalId?: string;\n nodeType?: string;\n topicId?: string;\n metadata?: Record<string, unknown>;\n};\n\nasync function resolveTopicNodeScopeOrNull(\n ctx: any,\n ref: string,\n): Promise<TopicProjectScope | null> {\n if (!ctx?.db || typeof ctx.db.query !== \"function\") {\n return null;\n }\n\n let node: TopicNodeScopeDoc | null = null;\n\n // 1. The ref IS the topic node's UUIDv7 globalId.\n try {\n const byGlobalId = (await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q: any) => q.eq(\"globalId\", ref))\n .first()) as TopicNodeScopeDoc | null;\n if (byGlobalId && byGlobalId.nodeType === \"topic\") {\n node = byGlobalId;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] topic-node scope lookup by globalId failed\",\n { error, ref },\n );\n }\n\n if (!node) {\n return null;\n }\n\n const scopeKey =\n normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);\n if (!scopeKey) {\n return null;\n }\n\n return {\n topicId: scopeKey as Id<\"topics\">,\n projectId: asMappedProjectId(node as unknown as TopicDoc),\n source: \"topic_node\",\n };\n}\n\ntype MaterializedTopicNodeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n};\n\nfunction asMappedProjectId(\n topic: TopicDoc | null | undefined,\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(topic[LEGACY_SCOPE_FIELD]);\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = (topic.metadata || {}) as Record<string, unknown>;\n const candidate =\n (metadata[LEGACY_SCOPE_FIELD] as string | undefined) ||\n (metadata.legacyProjectId as string | undefined) ||\n (metadata.projectId as string | undefined) ||\n (metadata.scopeProjectId as string | undefined);\n return candidate ? (candidate as string) : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(\n ctx: any,\n scopeId: string,\n): Promise<TopicDoc[]> {\n try {\n return (await ctx.db\n .query(\"topics\")\n .withIndex(\"by_graph_scope_project\", (q: any) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId),\n )\n .collect()) as TopicDoc[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve scope alias via index\",\n {\n error,\n scopeId,\n },\n );\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await ctx.db.query(\"topics\").collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: any,\n topicId: string,\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get as any, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by host query\",\n {\n error,\n topicId,\n },\n );\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: any,\n legacyScopeId: string,\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId as any, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by legacy scope\",\n {\n error,\n legacyScopeId,\n },\n );\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined,\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: any,\n topic: TopicDoc,\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) break;\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) break;\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: any,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string },\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n // Try direct lookup, fall back to the legacy mapped-project bridge\n let topic: TopicDoc | null = null;\n try {\n topic = (await ctx.db.get(\n args.topicId as Id<\"topics\">,\n )) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to load topic by direct id\",\n {\n error,\n topicId: args.topicId,\n },\n );\n // Not a valid topics table ID\n }\n if (!topic) {\n topic = await tryResolveHostTopicById(ctx, String(args.topicId));\n }\n if (!topic) {\n // Try as legacy projectId / globalId via the mapped-project bridge.\n topic =\n pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, String(args.topicId)),\n ) ?? null;\n }\n if (!topic) {\n // RR.5: no legacy topics row — resolve the canonical topic node store\n // before throwing (silent-empty-result fix).\n const nodeScope = await resolveTopicNodeScopeOrNull(\n ctx,\n String(args.topicId),\n );\n if (nodeScope) {\n return nodeScope;\n }\n throw new Error(`Topic not found: ${String(args.topicId)}`);\n }\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n if (mapped) {\n return {\n topicId: topic._id,\n projectId: mapped,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n return {\n topicId: topic._id,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n\n if (args.projectId) {\n let directTopic: TopicDoc | null = null;\n try {\n directTopic = (await ctx.db.get(\n args.projectId as Id<\"topics\">,\n )) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to load direct project topic\",\n {\n error,\n projectId: args.projectId,\n },\n );\n // Not a valid topics table ID, continue to legacy graph-scope lookup.\n }\n\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n directTopic = await tryResolveHostTopicByLegacyScope(ctx, args.projectId);\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n const topics = await findTopicsByScopeAlias(ctx, args.projectId);\n const primary = pickPrimaryTopic(topics);\n if (primary) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, primary);\n return {\n topicId: primary._id,\n projectId: args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"project_mapped_topic\",\n };\n }\n // RR.5: try the canonical topic node store before failing.\n const nodeScope = await resolveTopicNodeScopeOrNull(\n ctx,\n String(args.projectId),\n );\n if (nodeScope) {\n return {\n ...nodeScope,\n projectId: nodeScope.projectId ?? String(args.projectId),\n };\n }\n\n throw new Error(\n `Legacy project scope ${String(args.projectId)} has no mapped topic.`,\n );\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\",\n );\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","import { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\nexport const scopeArgs = optionalScopeArgs;\n\nexport type ResolvedScope = Awaited<\n ReturnType<typeof resolveTopicProjectScope>\n>;\nexport type SoftResolvedScope = {\n topicId?: string;\n projectId?: string;\n tenantId?: string;\n workspaceId?: string;\n source?: ResolvedScope[\"source\"];\n};\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nexport async function resolveScope(\n ctx: any,\n args: { topicId?: string | null; projectId?: string | null },\n): Promise<ResolvedScope | null> {\n const topicId = normalizeScopeValue(args.topicId);\n const projectId = normalizeScopeValue(args.projectId);\n if (!topicId && !projectId) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n topicId,\n projectId,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[scopeResolverCompat] Failed to resolve scope\",\n {\n error,\n topicId,\n projectId,\n },\n );\n return null;\n }\n}\n\nexport async function resolveScopeSoft(\n ctx: any,\n args: { topicId?: string | null; projectId?: string | null },\n): Promise<SoftResolvedScope> {\n const resolved = await resolveScope(ctx, args);\n if (resolved) {\n const topicId = normalizeScopeValue(resolved.topicId);\n return {\n ...(topicId ? { topicId } : {}),\n ...(resolved.projectId ? { projectId: resolved.projectId } : {}),\n ...(resolved.tenantId ? { tenantId: resolved.tenantId } : {}),\n ...(resolved.workspaceId ? { workspaceId: resolved.workspaceId } : {}),\n ...(resolved.source ? { source: resolved.source } : {}),\n };\n }\n\n const topicId = normalizeScopeValue(args.topicId);\n const projectId = normalizeScopeValue(args.projectId);\n return {\n ...(topicId ? { topicId } : {}),\n ...(projectId ? { projectId } : {}),\n };\n}\n","import { api } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\ntype OverlayIdMode = \"legacy\" | \"topic\";\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype LegacyProjectThesis = {\n statement: string;\n confidence: number;\n lastUpdated: number;\n};\n\ntype LegacyPillarImportance = \"critical\" | \"major\" | \"minor\" | \"not_applicable\";\n\ntype LegacyThesisPillarConfig = {\n pillarImportance?: Record<string, LegacyPillarImportance | undefined>;\n configuredAt?: number;\n configuredBy?: string;\n aiSuggestion?: {\n suggestedAt: number;\n reasoning: string;\n };\n};\n\ntype LegacyBeliefArchitecture = {\n overallMaturity: number;\n pillarScores: Array<Record<string, unknown>>;\n lastCalculated: number;\n};\n\ntype LegacyOntologyClassification = {\n valueChains: Array<Record<string, unknown>>;\n functions: Array<Record<string, unknown>>;\n overallConfidence: number;\n classifiedAt: number;\n};\n\ntype TopicDocLike = Record<string, unknown> & {\n _id: string;\n _creationTime?: number;\n globalId?: string;\n name?: string;\n description?: string;\n type?: string;\n tenantId?: string;\n workspaceId?: string;\n status?: string;\n visibility?: string;\n createdBy?: string;\n /** FR.7 creator-grant: the exact acting principal recorded as owner-principal. */\n ownerPrincipalId?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectOverlay = Record<string, unknown> & {\n _id: string;\n projectId: string;\n topicId: string;\n storageProjectId: string;\n legacyProjectId?: string;\n name: string;\n type: string;\n description?: string;\n ownerId: string;\n /** FR.7 creator-grant: principal-shaped owner; distinct from clerkId-shaped ownerId. */\n ownerPrincipalId?: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n tags: string[];\n chatCount: number;\n artifactCount: number;\n lastActivityAt: number;\n thesis?: LegacyProjectThesis;\n wedgeHypothesis?: string;\n founderArchetype?: string;\n investmentCriteria?: string[];\n sprintPhase?:\n | \"pre_sprint\"\n | \"readiness_check\"\n | \"thesis_crystallization\"\n | \"sprint_planning\"\n | \"active_sprint\"\n | \"theme_assembly\"\n | \"evolution\";\n currentSprintIndex?: number;\n thesisPillarConfig?: LegacyThesisPillarConfig;\n beliefArchitecture?: LegacyBeliefArchitecture;\n ontologyClassification?: LegacyOntologyClassification;\n _creationTime: number;\n createdAt: number;\n updatedAt: number;\n};\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readNonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction readMetadata(topic: TopicDocLike): Record<string, unknown> {\n return topic.metadata && typeof topic.metadata === \"object\"\n ? topic.metadata\n : {};\n}\n\nfunction readLegacyProjectId(\n value: Record<string, unknown> | null | undefined,\n): string | undefined {\n if (!value) {\n return;\n }\n return readNonEmptyString(value[LEGACY_SCOPE_FIELD]);\n}\n\nfunction coerceVisibility(\n value: unknown,\n): TopicProjectOverlay[\"visibility\"] | undefined {\n return value === \"private\" ||\n value === \"team\" ||\n value === \"firm\" ||\n value === \"external\" ||\n value === \"public\"\n ? value\n : undefined;\n}\n\nfunction coerceStatus(\n value: unknown,\n): TopicProjectOverlay[\"status\"] | undefined {\n return value === \"active\" || value === \"archived\" || value === \"watching\"\n ? value\n : undefined;\n}\n\nfunction mapProjectType(\n topic: TopicDocLike,\n metadata: Record<string, unknown>,\n): string {\n const explicit = readNonEmptyString(metadata.projectType);\n if (explicit) {\n return explicit;\n }\n if (topic.type === \"theme\") {\n return \"thematic\";\n }\n return readNonEmptyString(topic.type) || \"general\";\n}\n\nfunction isProjectLikeTopic(topic: TopicDocLike): boolean {\n const metadata = readMetadata(topic);\n return (\n topic.type === \"theme\" ||\n topic.type === \"thematic\" ||\n topic.type === \"deal\" ||\n topic.type === \"monitoring\" ||\n readLegacyProjectId(topic) !== undefined ||\n readNonEmptyString(metadata.projectType) !== undefined\n );\n}\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = getErrorMessage(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found',\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n return (error as { message: string }).message;\n }\n return \"unknown error\";\n}\n\nasync function resolveTopicDoc(\n ctx: any,\n scopeId: string,\n): Promise<TopicDocLike | null> {\n if (ctx?.db && typeof ctx.db.get === \"function\") {\n try {\n const directTopic = (await ctx.db.get(\n scopeId as any,\n )) as TopicDocLike | null;\n if (directTopic) {\n return directTopic;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by direct ID\",\n {\n error,\n scopeId,\n },\n );\n // Not a direct topics-table id.\n }\n }\n\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.get as any, {\n id: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by ID query\",\n {\n error,\n scopeId,\n },\n );\n // Fall through to legacy-scope lookup.\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.getByLegacyScopeId as any, {\n projectId: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by legacy scope ID\",\n { error, scopeId },\n );\n // Best-effort compat lookup only.\n }\n\n return null;\n}\n\nexport function materializeTopicProjectOverlay(\n topic: TopicDocLike,\n idMode: OverlayIdMode = \"legacy\",\n): TopicProjectOverlay {\n const metadata = readMetadata(topic);\n const topicId = String(topic._id);\n const legacyProjectId =\n readLegacyProjectId(topic) ||\n readLegacyProjectId(metadata) ||\n readNonEmptyString(metadata.legacyProjectId);\n const storageProjectId = legacyProjectId || topicId;\n const outwardId = idMode === \"topic\" ? topicId : storageProjectId;\n const visibility =\n coerceVisibility(topic.visibility) ||\n coerceVisibility(metadata.visibility) ||\n \"private\";\n const status =\n coerceStatus(topic.status) || coerceStatus(metadata.status) || \"active\";\n const createdAt =\n typeof topic.createdAt === \"number\"\n ? topic.createdAt\n : typeof topic._creationTime === \"number\"\n ? topic._creationTime\n : 0;\n const updatedAt =\n typeof topic.updatedAt === \"number\"\n ? topic.updatedAt\n : typeof metadata.updatedAt === \"number\"\n ? (metadata.updatedAt as number)\n : createdAt;\n\n return {\n ...metadata,\n _id: outwardId,\n projectId: outwardId,\n topicId,\n storageProjectId,\n legacyProjectId,\n name: readNonEmptyString(topic.name) || \"Untitled Theme\",\n type: mapProjectType(topic, metadata),\n description: readNonEmptyString(topic.description),\n ownerId:\n readNonEmptyString(metadata.ownerId) ||\n readNonEmptyString(topic.createdBy) ||\n \"system\",\n // FR.7 creator-grant: surface the principal-shaped owner field (column-first,\n // metadata fallback for legacy rows that recorded it in metadata).\n ownerPrincipalId:\n readNonEmptyString(topic.ownerPrincipalId) ||\n readNonEmptyString(metadata.ownerPrincipalId),\n 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","import type { WithoutSystemFields } from \"convex/server\";\nimport {\n assertUuidV7Identity,\n assertStorageEdgeVocabulary,\n assertUuidShapedEdgeEndpoint,\n} from \"@lucern/contracts/ids\";\nimport {\n assertEdgePolicyAllowed,\n edgePolicyManifest,\n type EpistemicNodeType,\n} from \"@lucern/contracts\";\nimport type { Doc, Id, MutationCtx } from \"./convex\";\n\nexport async function insertEpistemicNode(\n ctx: MutationCtx,\n doc: WithoutSystemFields<Doc<\"epistemicNodes\">>,\n): Promise<Id<\"epistemicNodes\">> {\n assertUuidV7Identity(\"epistemicNodes\", doc.globalId);\n return ctx.db.insert(\"epistemicNodes\", doc);\n}\n\n/**\n * C2-RR.4b — REFERENTIAL edge-endpoint canonicality (amends RR.4's FORMAT guard).\n *\n * Proves an endpoint is the `globalId` of an EXISTING `epistemicNodes` row, not\n * that it has a v7 shape. Refuses doc-ids and fabricated/unknown endpoints while\n * keeping legacy v4-`globalId` nodes (the established prod corpus) linkable.\n * SHAPE pre-filter accepts both v4 and v7; the indexed `by_globalId` lookup is\n * the referential authority (no full scan). v7-format stays enforced only at new\n * identity minting (`assertUuidV7Identity`). See c2-rr4b-endpoint-referential.\n */\nasync function assertExistingNodeEndpoint(\n ctx: MutationCtx,\n endpointRole: \"fromNodeId\" | \"toNodeId\",\n endpoint: string,\n): Promise<void> {\n assertUuidShapedEdgeEndpoint(endpointRole, endpoint);\n const node = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q: any) => q.eq(\"globalId\", endpoint))\n .first();\n if (!node) {\n throw new Error(\n `edge_endpoint_not_canonical: epistemicEdges insert requires ${endpointRole} to be the globalId of an existing epistemicNodes row, received ${endpoint} (no node with that globalId)`,\n );\n }\n}\n\nexport async function insertEpistemicEdge(\n ctx: MutationCtx,\n doc: WithoutSystemFields<Doc<\"epistemicEdges\">>,\n): Promise<Id<\"epistemicEdges\">> {\n assertUuidV7Identity(\"epistemicEdges\", doc.globalId);\n\n // R1.1a — STORAGE-VOCABULARY MEMBERSHIP\n assertStorageEdgeVocabulary(doc.edgeType);\n\n // R1.1b — ENDPOINT PRESENCE\n if (!doc.fromNodeId || typeof doc.fromNodeId !== \"string\") {\n throw new Error(\n \"edge_endpoint_missing: epistemicEdges insert requires a non-empty fromNodeId\"\n );\n }\n if (!doc.toNodeId || typeof doc.toNodeId !== \"string\") {\n throw new Error(\n \"edge_endpoint_missing: epistemicEdges insert requires a non-empty toNodeId\"\n );\n }\n\n // C2-RR.4b Defect E (REFERENTIAL) — ENDPOINT CANONICAL IDENTITY. Edge\n // endpoints must each be the globalId of an EXISTING epistemicNodes row,\n // never a Convex doc id, a legacy topic id, or a fabricated/unknown uuid.\n // This refuses the mixed _id/globalId endpoint writes at the floor while\n // keeping legacy v4-globalId nodes linkable (RR.4b prod-incident cure).\n await assertExistingNodeEndpoint(ctx, \"fromNodeId\", doc.fromNodeId);\n await assertExistingNodeEndpoint(ctx, \"toNodeId\", doc.toNodeId);\n\n // R1.1c — FULL POLICY ASSERT (when nodeTypes are present and edgeType is in public manifest)\n if (doc.fromNodeType && doc.toNodeType && doc.edgeType !== \"extracted_from\") {\n assertEdgePolicyAllowed(\n edgePolicyManifest,\n doc.edgeType,\n {\n kind: \"epistemic_node\",\n nodeId: doc.fromNodeId,\n nodeType: doc.fromNodeType as EpistemicNodeType,\n },\n {\n kind: \"epistemic_node\",\n nodeId: doc.toNodeId,\n nodeType: doc.toNodeType as EpistemicNodeType,\n }\n );\n }\n\n return ctx.db.insert(\"epistemicEdges\", doc);\n}\n","import type { Id, MutationCtx } from \"./convex\";\nimport { internal } from \"./convex\";\nimport { generateGlobalId } from \"./globalId\";\nimport { insertEpistemicEdge } from \"./epistemicInsert.js\";\n\ntype BeliefEvidenceRelation = \"supports\" | \"contradicts\";\ntype IndexRangeBuilder = {\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n};\ntype EpistemicNode = {\n _id: Id<\"epistemicNodes\">;\n nodeType?: string;\n globalId?: string;\n projectId?: string;\n topicId?: string | Id<\"topics\">;\n supportingInsightIds?: Id<\"epistemicNodes\">[];\n contradictingInsightIds?: Id<\"epistemicNodes\">[];\n};\n\nfunction assertEvidenceImpact(args: {\n relation: BeliefEvidenceRelation;\n weight: number;\n}) {\n if (\n !Number.isFinite(args.weight) ||\n args.weight === 0 ||\n args.weight < -1 ||\n args.weight > 1\n ) {\n throw new Error(\"Belief evidence links require explicit nonzero weight in [-1, 1]\");\n }\n if (args.relation === \"supports\" && args.weight < 0) {\n throw new Error(\"Supporting evidence links require positive weight\");\n }\n if (args.relation === \"contradicts\" && args.weight > 0) {\n throw new Error(\"Contradicting evidence links require negative weight\");\n }\n}\n\nexport async function applyOperationalLinkEffects(\n ctx: MutationCtx,\n args: {\n beliefNode: EpistemicNode;\n beliefId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n relation: BeliefEvidenceRelation;\n weight: number;\n rationale?: string;\n createdBy: string;\n },\n): Promise<void> {\n assertEvidenceImpact({ relation: args.relation, weight: args.weight });\n const confidence = Math.abs(args.weight);\n const currentSupporting = args.beliefNode.supportingInsightIds ?? [];\n const currentContradicting = args.beliefNode.contradictingInsightIds ?? [];\n\n if (args.relation === \"supports\" && !currentSupporting.includes(args.insightId)) {\n await ctx.db.patch(args.beliefId, {\n supportingInsightIds: [...currentSupporting, args.insightId],\n contradictingInsightIds: currentContradicting.filter(\n (id: Id<\"epistemicNodes\">) => id !== args.insightId,\n ),\n });\n } else if (\n args.relation === \"contradicts\" &&\n !currentContradicting.includes(args.insightId)\n ) {\n await ctx.db.patch(args.beliefId, {\n contradictingInsightIds: [...currentContradicting, args.insightId],\n supportingInsightIds: currentSupporting.filter(\n (id: Id<\"epistemicNodes\">) => id !== args.insightId,\n ),\n });\n }\n\n try {\n const beliefSpineNode = await ctx.db.get(args.beliefId);\n const evidenceSpineNode = await ctx.db.get(args.insightId);\n\n if (\n beliefSpineNode?.nodeType === \"belief\" &&\n evidenceSpineNode?.nodeType === \"evidence\"\n ) {\n const existingEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q: IndexRangeBuilder) =>\n q\n .eq(\"fromNodeId\", evidenceSpineNode.globalId)\n .eq(\"toNodeId\", beliefSpineNode.globalId),\n )\n .collect();\n\n for (const edge of existingEdges) {\n if (edge.edgeType === \"informs\") {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n }\n }\n\n const globalId = generateGlobalId();\n const context = args.rationale || `Linked as ${args.relation}`;\n await insertEpistemicEdge(ctx, {\n globalId,\n // C2-RR.4 Defect E — canonical UUIDv7 endpoints, not Convex doc ids.\n fromNodeId: evidenceSpineNode.globalId,\n toNodeId: beliefSpineNode.globalId,\n sourceGlobalId: evidenceSpineNode.globalId,\n targetGlobalId: beliefSpineNode.globalId,\n edgeType: \"informs\",\n weight: args.weight,\n confidence,\n context,\n reasoningMethod: \"testimonial\",\n derivationType: \"evidence_sl_scoring\",\n metadata: {\n relation: args.relation,\n confidence,\n impactScore: args.weight,\n invariant: \"evidence.belief_impact_required\",\n },\n createdBy: args.createdBy,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n projectId: args.beliefNode.projectId,\n topicId: args.beliefNode.topicId ? String(args.beliefNode.topicId) : undefined,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId,\n fromGlobalId: evidenceSpineNode.globalId,\n toGlobalId: beliefSpineNode.globalId,\n edgeType: \"informs\",\n weight: args.weight,\n confidence,\n context,\n projectId: args.beliefNode.projectId ? String(args.beliefNode.projectId) : undefined,\n createdBy: args.createdBy,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n }\n } catch (e) {\n console.error(\"[EpistemicSpine] Failed to create informs edge:\", e);\n }\n\n if (args.beliefNode.projectId) {\n await ctx.scheduler.runAfter(0, \"verificationActions:deepVerifyEvidence\", {\n insightId: args.insightId,\n targetType: \"belief\",\n targetId: args.beliefId,\n projectId: args.beliefNode.projectId,\n userId: args.createdBy,\n });\n }\n}\n\nexport async function removeOperationalLinkEffects(\n ctx: MutationCtx,\n args: {\n beliefId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n relation: BeliefEvidenceRelation;\n },\n): Promise<void> {\n const belief = await ctx.db.get(args.beliefId);\n if (belief) {\n const currentSupporting = belief.supportingInsightIds ?? [];\n const currentContradicting = belief.contradictingInsightIds ?? [];\n\n if (args.relation === \"supports\") {\n await ctx.db.patch(args.beliefId, {\n supportingInsightIds: currentSupporting.filter(\n (id: Id<\"epistemicNodes\">) => id !== args.insightId,\n ),\n });\n } else {\n await ctx.db.patch(args.beliefId, {\n contradictingInsightIds: currentContradicting.filter(\n (id: Id<\"epistemicNodes\">) => id !== args.insightId,\n ),\n });\n }\n }\n\n try {\n const beliefSpineNode = await ctx.db.get(args.beliefId);\n const evidenceSpineNode = await ctx.db.get(args.insightId);\n\n if (\n beliefSpineNode?.nodeType === \"belief\" &&\n evidenceSpineNode?.nodeType === \"evidence\"\n ) {\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q: IndexRangeBuilder) =>\n q.eq(\"fromNodeId\", evidenceSpineNode._id).eq(\"toNodeId\", beliefSpineNode._id),\n )\n .collect();\n\n for (const edge of edges) {\n if (edge.edgeType === \"informs\") {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n }\n }\n }\n } catch (e) {\n console.error(\"[EpistemicSpine] Failed to remove informs edge:\", e);\n }\n}\n","import { v } from \"convex/values\";\nimport {\n deriveMatcherReviewStatus,\n isOperationalLinkStatus,\n type LinkSuggestionStatus,\n mergeLinkSuggestionStatus,\n resolveReviewedLinkStatus,\n} from \"./matcherFeedbackUtils\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal, mutation, query } from \"./convex\";\nimport { checkProjectAccess } from \"@lucern/access-control/access\";\nimport { resolveScopeSoft, scopeArgs } from \"./scopeResolverCompat\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport {\n applyOperationalLinkEffects,\n removeOperationalLinkEffects,\n} from \"./beliefEvidenceLinks.operational\";\n\n// IDs are now always epistemicNodes IDs (backfill complete)\nconst beliefIdUnion = v.id(\"epistemicNodes\");\nconst insightIdUnion = v.id(\"epistemicNodes\");\nconst suggestionStatusValidator = v.union(\n v.literal(\"suggested\"),\n v.literal(\"approved\"),\n v.literal(\"dismissed\")\n);\nconst matcherMetadataValidator = v.object({\n surface: v.string(),\n matcherFamily: v.optional(v.string()),\n matcherKey: v.optional(v.string()),\n matcherVersion: v.optional(v.string()),\n reviewStatus: v.optional(\n v.union(\n v.literal(\"pending\"),\n v.literal(\"accepted\"),\n v.literal(\"rejected\"),\n v.literal(\"auto_accepted\"),\n v.literal(\"superseded\")\n )\n ),\n configSnapshot: v.optional(v.any()),\n signalSnapshot: v.optional(v.any()),\n outcomeMetadata: v.optional(v.any()),\n});\n\ntype MatcherMetadata = {\n surface: string;\n matcherFamily?: string;\n matcherKey?: string;\n matcherVersion?: string;\n reviewStatus?:\n | \"pending\"\n | \"accepted\"\n | \"rejected\"\n | \"auto_accepted\"\n | \"superseded\";\n configSnapshot?: Record<string, unknown>;\n signalSnapshot?: Record<string, unknown>;\n outcomeMetadata?: Record<string, unknown>;\n};\n\ntype BeliefEvidenceRelation = \"supports\" | \"contradicts\";\ntype IndexRangeBuilder = {\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n};\ntype EpistemicNode = {\n _id: Id<\"epistemicNodes\">;\n nodeType?: string;\n globalId?: string;\n projectId?: string;\n topicId?: string | Id<\"topics\">;\n belief?: string;\n canonicalText?: string;\n status?: string;\n confidence?: string | number;\n supportingInsightIds?: Id<\"epistemicNodes\">[];\n contradictingInsightIds?: Id<\"epistemicNodes\">[];\n};\ntype BeliefEvidenceLink = {\n _id: Id<\"beliefEvidenceLinks\">;\n beliefId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n relation: BeliefEvidenceRelation;\n confidence?: number;\n rationale?: string;\n status?: LinkSuggestionStatus;\n createdBy: string;\n createdAt?: number;\n};\ntype ProjectBeliefSummary = {\n _id: Id<\"epistemicNodes\">;\n belief: string;\n status: string;\n confidence: string;\n};\ntype BeliefIdArgs = { beliefId: Id<\"epistemicNodes\"> };\ntype InsightIdArgs = { insightId: Id<\"epistemicNodes\"> };\ntype CreateLinkArgs = {\n beliefId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n relation: BeliefEvidenceRelation;\n weight: number;\n confidence?: number;\n rationale?: string;\n status?: LinkSuggestionStatus;\n matcherMetadata?: MatcherMetadata;\n createdBy: string;\n};\ntype RemoveLinkArgs = { linkId: Id<\"beliefEvidenceLinks\">; userId: string };\ntype UpdateLinkArgs = RemoveLinkArgs & {\n confidence?: number;\n rationale?: string;\n};\ntype ReviewSuggestionArgs = RemoveLinkArgs & {\n status: \"approved\" | \"dismissed\";\n reason?: string;\n};\ntype EvidenceDetailsArgs = BeliefIdArgs & { userId: string };\ntype ProjectLinksArgs = {\n topicId?: string;\n projectId?: string;\n userId: string;\n limit?: number;\n};\n\nasync function markProjectGraphDirty(\n ctx: MutationCtx,\n projectId: string | undefined | null\n): Promise<void> {\n if (!projectId) {\n return;\n }\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n {\n projectId,\n }\n );\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(ctx, projectId, {\n lastActivityAt: Date.now(),\n });\n}\n\nasync function recordMatcherDecision(\n ctx: MutationCtx,\n args: {\n beliefNode: EpistemicNode;\n beliefId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n linkId: string;\n linkStatus?: LinkSuggestionStatus;\n matcherMetadata?: MatcherMetadata;\n reviewedBy?: string;\n decisionReason?: string;\n }\n): Promise<void> {\n if (!args.matcherMetadata) {\n return;\n }\n\n await ctx.runMutation(\"matcherFeedback:recordDecision\", {\n projectId: args.beliefNode.projectId,\n topicId: args.beliefNode.topicId,\n surface: args.matcherMetadata.surface,\n matcherFamily: args.matcherMetadata.matcherFamily,\n matcherKey: args.matcherMetadata.matcherKey,\n matcherVersion: args.matcherMetadata.matcherVersion,\n sourceEntityId: String(args.insightId),\n targetEntityId: String(args.beliefId),\n suggestionTable: \"beliefEvidenceLinks\",\n suggestionId: args.linkId,\n reviewStatus: deriveMatcherReviewStatus({\n explicitReviewStatus: args.matcherMetadata.reviewStatus,\n linkStatus: args.linkStatus,\n }),\n reviewedBy: args.reviewedBy,\n decisionReason: args.decisionReason,\n configSnapshot: args.matcherMetadata.configSnapshot,\n signalSnapshot: args.matcherMetadata.signalSnapshot,\n outcomeMetadata: args.matcherMetadata.outcomeMetadata,\n });\n}\n\n/**\n * Belief Evidence Links Management (LucernCoreZero)\n *\n * Normalized edge table connecting beliefs to evidence (insights).\n * This is the core of Lucern's reasoning structure.\n *\n * Relations:\n * - \"supports\": Evidence increases confidence in belief\n * - \"contradicts\": Evidence decreases confidence in belief\n */\n\n// ===== MUTATIONS =====\n\n/**\n * Create a link between a belief and evidence\n */\nexport const create = mutation({\n args: {\n beliefId: beliefIdUnion,\n insightId: insightIdUnion,\n relation: v.union(v.literal(\"supports\"), v.literal(\"contradicts\")),\n weight: v.number(),\n confidence: v.optional(v.number()),\n rationale: v.optional(v.string()),\n status: v.optional(suggestionStatusValidator),\n matcherMetadata: v.optional(matcherMetadataValidator),\n createdBy: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: CreateLinkArgs) => {\n // IDs are already epistemicNodes IDs (backfill complete)\n const resolvedBeliefId = args.beliefId as Id<\"epistemicNodes\">;\n const resolvedInsightId = args.insightId as Id<\"epistemicNodes\">;\n\n // Get the belief node to check project access\n const beliefNode = (await ctx.db.get(resolvedBeliefId)) as\n | EpistemicNode\n | null;\n if (!beliefNode) {\n throw new Error(\"Belief node not found\");\n }\n\n // Get the insight node\n const insightNode = await ctx.db.get(resolvedInsightId);\n if (!insightNode) {\n throw new Error(\"Evidence node not found\");\n }\n if (\n !Number.isFinite(args.weight) ||\n args.weight === 0 ||\n args.weight < -1 ||\n args.weight > 1\n ) {\n throw new Error(\"Belief evidence links require explicit nonzero weight in [-1, 1]\");\n }\n if (args.relation === \"supports\" && args.weight < 0) {\n throw new Error(\"Supporting evidence links require positive weight\");\n }\n if (args.relation === \"contradicts\" && args.weight > 0) {\n throw new Error(\"Contradicting evidence links require negative weight\");\n }\n const relationConfidence = Math.abs(args.weight);\n\n // Verify project access (only if belief is project-scoped)\n if (beliefNode.projectId) {\n const hasAccess = await checkProjectAccess(\n ctx,\n beliefNode.projectId,\n args.createdBy\n );\n if (!hasAccess) {\n throw new Error(\"No permission to link evidence to this belief\");\n }\n }\n // System-wide beliefs (no projectId) are accessible by all users\n\n // Check for existing link (avoid duplicates)\n const existingLinks = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId)\n )\n .collect()) as BeliefEvidenceLink[];\n\n const duplicate = existingLinks.find(\n (link) => link.insightId === args.insightId\n );\n\n if (duplicate) {\n const nextStatus = mergeLinkSuggestionStatus(\n duplicate.status as LinkSuggestionStatus | undefined,\n args.status\n );\n await ctx.db.patch(duplicate._id, {\n relation: args.relation,\n confidence: relationConfidence,\n rationale: args.rationale,\n status: nextStatus,\n });\n if (\n isOperationalLinkStatus(nextStatus) &&\n !isOperationalLinkStatus(\n duplicate.status as LinkSuggestionStatus | undefined\n )\n ) {\n await applyOperationalLinkEffects(ctx, {\n beliefNode,\n beliefId: resolvedBeliefId,\n insightId: resolvedInsightId,\n relation: args.relation,\n weight: args.weight,\n rationale: args.rationale,\n createdBy: args.createdBy,\n });\n }\n await recordMatcherDecision(ctx, {\n beliefNode,\n beliefId: resolvedBeliefId,\n insightId: resolvedInsightId,\n linkId: duplicate._id,\n linkStatus: nextStatus,\n matcherMetadata: args.matcherMetadata,\n });\n await markProjectGraphDirty(ctx, beliefNode.projectId);\n return duplicate._id;\n }\n\n const now = Date.now();\n const linkId = await ctx.db.insert(\"beliefEvidenceLinks\", {\n beliefId: args.beliefId,\n insightId: args.insightId,\n relation: args.relation,\n confidence: relationConfidence,\n rationale: args.rationale,\n status: args.status,\n createdBy: args.createdBy,\n createdAt: now,\n });\n\n await recordMatcherDecision(ctx, {\n beliefNode,\n beliefId: resolvedBeliefId,\n insightId: resolvedInsightId,\n linkId,\n linkStatus: args.status,\n matcherMetadata: args.matcherMetadata,\n });\n\n if (isOperationalLinkStatus(args.status)) {\n await applyOperationalLinkEffects(ctx, {\n beliefNode,\n beliefId: resolvedBeliefId,\n insightId: resolvedInsightId,\n relation: args.relation,\n weight: args.weight,\n rationale: args.rationale,\n createdBy: args.createdBy,\n });\n }\n\n await markProjectGraphDirty(ctx, beliefNode.projectId);\n\n return linkId;\n },\n});\n\n/**\n * Remove a belief-evidence link\n */\nexport const remove = mutation({\n args: {\n linkId: v.id(\"beliefEvidenceLinks\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: RemoveLinkArgs) => {\n const link = (await ctx.db.get(args.linkId)) as BeliefEvidenceLink | null;\n if (!link) {\n throw new Error(\"Link not found\");\n }\n\n // Only creator can remove\n if (link.createdBy !== args.userId) {\n throw new Error(\"Only the creator can remove this link\");\n }\n\n const belief = (await ctx.db.get(link.beliefId)) as EpistemicNode | null;\n if (\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n ) {\n await removeOperationalLinkEffects(ctx, {\n beliefId: link.beliefId,\n insightId: link.insightId,\n relation: link.relation,\n });\n }\n\n await ctx.db.delete(args.linkId);\n await markProjectGraphDirty(ctx, belief?.projectId);\n },\n});\n\n/**\n * Update link confidence or rationale\n */\nexport const update = mutation({\n args: {\n linkId: v.id(\"beliefEvidenceLinks\"),\n confidence: v.optional(v.number()),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateLinkArgs) => {\n const link = (await ctx.db.get(args.linkId)) as BeliefEvidenceLink | null;\n if (!link) {\n throw new Error(\"Link not found\");\n }\n\n // Verify access (link creator or project access)\n const belief = (await ctx.db.get(link.beliefId)) as EpistemicNode | null;\n if (!belief) {\n throw new Error(\"Belief not found\");\n }\n\n // Verify access (link creator always has access, or project access for project-scoped beliefs)\n let hasAccess = link.createdBy === args.userId;\n\n if (!hasAccess && belief.projectId) {\n hasAccess = await checkProjectAccess(ctx, belief.projectId, args.userId);\n }\n\n // System-wide beliefs (no projectId) - only link creator can modify\n if (!hasAccess) {\n throw new Error(\"No permission to update this link\");\n }\n\n // Validate confidence if provided\n if (\n args.confidence !== undefined &&\n (args.confidence < 0 || args.confidence > 1)\n ) {\n throw new Error(\"Confidence must be between 0 and 1\");\n }\n\n const updates: Record<string, unknown> = {};\n if (args.confidence !== undefined) {\n updates.confidence = args.confidence;\n }\n if (args.rationale !== undefined) {\n updates.rationale = args.rationale;\n }\n\n if (Object.keys(updates).length > 0) {\n await ctx.db.patch(args.linkId, updates);\n await markProjectGraphDirty(ctx, belief.projectId);\n }\n },\n});\n\nexport const reviewSuggestion = mutation({\n args: {\n linkId: v.id(\"beliefEvidenceLinks\"),\n status: v.union(v.literal(\"approved\"), v.literal(\"dismissed\")),\n userId: v.string(),\n reason: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: ReviewSuggestionArgs) => {\n const link = (await ctx.db.get(args.linkId)) as BeliefEvidenceLink | null;\n if (!link) {\n throw new Error(\"Link not found\");\n }\n\n const belief = (await ctx.db.get(link.beliefId)) as EpistemicNode | null;\n if (!belief) {\n throw new Error(\"Belief not found\");\n }\n\n let hasAccess = link.createdBy === args.userId;\n if (!hasAccess && belief.projectId) {\n hasAccess = await checkProjectAccess(ctx, belief.projectId, args.userId);\n }\n if (!hasAccess) {\n throw new Error(\"No permission to review this link\");\n }\n\n const previousStatus = link.status as LinkSuggestionStatus | undefined;\n const nextStatus = resolveReviewedLinkStatus(args.status);\n await ctx.db.patch(args.linkId, { status: nextStatus });\n\n if (nextStatus === \"approved\" && !isOperationalLinkStatus(previousStatus)) {\n await applyOperationalLinkEffects(ctx, {\n beliefNode: belief,\n beliefId: link.beliefId,\n insightId: link.insightId,\n relation: link.relation,\n weight:\n link.relation === \"supports\"\n ? Math.abs(link.confidence ?? 0)\n : -Math.abs(link.confidence ?? 0),\n rationale: link.rationale,\n createdBy: args.userId,\n });\n }\n if (nextStatus === \"dismissed\" && isOperationalLinkStatus(previousStatus)) {\n await removeOperationalLinkEffects(ctx, {\n beliefId: link.beliefId,\n insightId: link.insightId,\n relation: link.relation,\n });\n }\n\n await ctx.runMutation(\"matcherFeedback:recordDecision\", {\n projectId: belief.projectId,\n topicId: belief.topicId,\n sourceEntityId: String(link.insightId),\n targetEntityId: String(link.beliefId),\n suggestionTable: \"beliefEvidenceLinks\",\n suggestionId: args.linkId,\n reviewStatus: deriveMatcherReviewStatus({ linkStatus: nextStatus }),\n reviewedBy: args.userId,\n decisionReason: args.reason,\n outcomeMetadata: args.reason ? { reason: args.reason } : undefined,\n });\n\n await markProjectGraphDirty(ctx, belief.projectId);\n return { success: true, status: nextStatus };\n },\n});\n\n// ===== QUERIES =====\n\n/**\n * Get all links for a belief\n */\nexport const getByBelief = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: BeliefIdArgs) => {\n const links = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId)\n )\n .collect()) as BeliefEvidenceLink[];\n\n return links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n },\n});\n\nexport const getPendingSuggestions = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: BeliefIdArgs) => {\n const links = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId)\n )\n .collect()) as BeliefEvidenceLink[];\n\n return links.filter((link) => link.status === \"suggested\");\n },\n});\n\n/**\n * Get supporting evidence links for a belief\n */\nexport const getSupportingLinks = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: BeliefIdArgs) => {\n const links = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_relation\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId).eq(\"relation\", \"supports\")\n )\n .collect()) as BeliefEvidenceLink[];\n\n return links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n },\n});\n\n/**\n * Get contradicting evidence links for a belief\n */\nexport const getContradictingLinks = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: BeliefIdArgs) => {\n const links = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_relation\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId).eq(\"relation\", \"contradicts\")\n )\n .collect()) as BeliefEvidenceLink[];\n\n return links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n },\n});\n\n/**\n * Get all beliefs linked to a specific insight\n */\nexport const getByInsight = query({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: InsightIdArgs) => {\n const links = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_insightId\", (q: IndexRangeBuilder) =>\n q.eq(\"insightId\", args.insightId)\n )\n .collect()) as BeliefEvidenceLink[];\n\n return links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n },\n});\n\n/**\n * Get evidence counts for a belief (for badges)\n */\nexport const getCounts = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: BeliefIdArgs) => {\n const links = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId)\n )\n .collect()) as BeliefEvidenceLink[];\n\n const activeLinks = links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n const supporting = activeLinks.filter(\n (l) => l.relation === \"supports\"\n ).length;\n const contradicting = activeLinks.filter(\n (l) => l.relation === \"contradicts\"\n ).length;\n\n return {\n supporting,\n contradicting,\n total: activeLinks.length,\n netSupport: supporting - contradicting,\n };\n },\n});\n\n/**\n * Get full evidence details for a belief (with insight data)\n */\nexport const getEvidenceWithDetails = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: EvidenceDetailsArgs) => {\n // Verify belief exists\n const belief = (await ctx.db.get(args.beliefId)) as EpistemicNode | null;\n if (!belief) {\n return null;\n }\n\n // Verify project access (only for project-scoped beliefs)\n if (belief.projectId) {\n const hasAccess = await checkProjectAccess(\n ctx,\n belief.projectId,\n args.userId\n );\n if (!hasAccess) {\n return null;\n }\n }\n // System-wide beliefs are accessible to all users\n\n // Get all links\n const links = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId)\n )\n .collect()) as BeliefEvidenceLink[];\n\n // Fetch insight details for each link\n const linksWithDetails = await Promise.all(\n links\n .filter((link) =>\n isOperationalLinkStatus(\n link.status as LinkSuggestionStatus | undefined\n )\n )\n .map(async (link) => {\n const insight = (await ctx.db.get(link.insightId)) as\n | EpistemicNode\n | null;\n return {\n ...link,\n insight,\n };\n })\n );\n\n // Separate supporting and contradicting\n const supporting = linksWithDetails.filter(\n (l) => l.relation === \"supports\"\n );\n const contradicting = linksWithDetails.filter(\n (l) => l.relation === \"contradicts\"\n );\n\n return {\n supporting,\n contradicting,\n counts: {\n supporting: supporting.length,\n contradicting: contradicting.length,\n netSupport: supporting.length - contradicting.length,\n },\n };\n },\n});\n\n/**\n * Get all belief-evidence links for a project (batch fetch)\n * Returns links grouped by insightId for efficient UI rendering\n */\nexport const getByProject = query({\n args: {\n ...scopeArgs,\n userId: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: ProjectLinksArgs) => {\n const scope = await resolveScopeSoft(ctx, args);\n const projectId = scope.projectId;\n if (!projectId) {\n return [];\n }\n\n // Verify project access\n const hasAccess = await checkProjectAccess(ctx, projectId, args.userId);\n if (!hasAccess) {\n return { links: [], beliefDetails: {} };\n }\n const pageSize = Math.max(1, Math.min(Math.floor(args.limit ?? 300), 1000));\n\n // Get all beliefs from epistemic spine\n const beliefs = (await ctx.runQuery(\n internal.epistemicBeliefs.internalGetByProject,\n {\n projectId,\n limit: pageSize,\n }\n )) as ProjectBeliefSummary[];\n\n const beliefIds = beliefs.map((b) => b._id);\n\n // Get all links for these beliefs\n const allLinks = await Promise.all(\n beliefIds.map(async (beliefId: Id<\"epistemicNodes\">) => {\n const links = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", beliefId)\n )\n .take(200)) as BeliefEvidenceLink[];\n return links;\n })\n );\n\n const flattenedLinks = allLinks.flat().slice(0, pageSize * 5);\n\n // Create a map of belief details for easy lookup\n const beliefDetails: Record<\n string,\n { _id: string; belief: string; status: string; confidence: string }\n > = {};\n for (const belief of beliefs) {\n beliefDetails[belief._id] = {\n _id: belief._id,\n belief: belief.belief,\n status: belief.status,\n confidence: belief.confidence,\n };\n }\n\n return {\n links: flattenedLinks,\n beliefDetails,\n };\n },\n});\n\n/**\n * Get belief links with full belief details for a specific insight\n * Used in insight detail view\n */\nexport const getLinkedBeliefsForInsight = query({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: InsightIdArgs) => {\n const links = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_insightId\", (q: IndexRangeBuilder) =>\n q.eq(\"insightId\", args.insightId)\n )\n .collect()) as BeliefEvidenceLink[];\n\n // Fetch belief details for each link\n const linkedBeliefs = await Promise.all(\n links.map(async (link) => {\n const belief = (await ctx.db.get(link.beliefId)) as\n | EpistemicNode\n | null;\n return {\n linkId: link._id,\n beliefId: link.beliefId,\n relation: link.relation,\n rationale: link.rationale,\n belief: belief\n ? {\n _id: belief._id,\n belief: belief.belief ?? belief.canonicalText,\n status: belief.status,\n confidence: belief.confidence,\n }\n : null,\n };\n })\n );\n\n return linkedBeliefs.filter((l) => l.belief !== null);\n },\n});\n"]}
1
+ {"version":3,"sources":["../src/matcherFeedbackUtils.ts","../src/convex.ts","../src/debug.ts","../src/topicScope.ts","../src/scopeResolverCompat.ts","../src/topicProjectOverlay.ts","../src/resolvers.ts","../src/epistemicInsert.ts","../src/beliefEvidenceLinks.operational.ts","../src/beliefEvidenceLinks.ts"],"names":["normalizeScopeValue","topicId","LEGACY_SCOPE_FIELD","isMissingLucernChildComponentError","getErrorMessage","v"],"mappings":"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","file":"beliefEvidenceLinks.js","sourcesContent":["/** Matcher feedback helper types shared by graph-primitive review flows. */\nexport type LinkSuggestionStatus = \"suggested\" | \"approved\" | \"dismissed\";\n\nexport type MatcherReviewStatus =\n | \"pending\"\n | \"accepted\"\n | \"rejected\"\n | \"auto_accepted\"\n | \"superseded\";\n\ntype MatcherFeedbackSummaryRow = {\n matcherKey?: string | null;\n reviewStatus: MatcherReviewStatus;\n rewardScore?: number | null;\n surface?: string | null;\n};\n\nexport function isOperationalLinkStatus(\n status?: LinkSuggestionStatus | null\n): boolean {\n return status !== \"suggested\" && status !== \"dismissed\";\n}\n\nexport function mergeLinkSuggestionStatus(\n existing?: LinkSuggestionStatus | null,\n requested?: LinkSuggestionStatus | null\n): LinkSuggestionStatus | undefined {\n if (requested === undefined || requested === null) {\n return existing ?? undefined;\n }\n\n if (\n existing &&\n isOperationalLinkStatus(existing) &&\n !isOperationalLinkStatus(requested)\n ) {\n return existing;\n }\n\n return requested;\n}\n\nexport function resolveReviewedLinkStatus(\n requested: \"approved\" | \"dismissed\"\n): LinkSuggestionStatus {\n return requested;\n}\n\nexport function deriveMatcherReviewStatus(input: {\n explicitReviewStatus?: MatcherReviewStatus | null;\n linkStatus?: LinkSuggestionStatus | null;\n autoAccepted?: boolean;\n}): MatcherReviewStatus {\n if (input.explicitReviewStatus) {\n return input.explicitReviewStatus;\n }\n\n if (input.autoAccepted) {\n return \"auto_accepted\";\n }\n\n if (input.linkStatus === \"suggested\") {\n return \"pending\";\n }\n\n if (input.linkStatus === \"dismissed\") {\n return \"rejected\";\n }\n\n return \"accepted\";\n}\n\nexport function deriveMatcherRewardScore(\n reviewStatus: MatcherReviewStatus\n): number {\n switch (reviewStatus) {\n case \"accepted\":\n case \"auto_accepted\":\n return 1;\n case \"rejected\":\n return -1;\n default:\n return 0;\n }\n}\n\nexport function summarizeMatcherFeedback(rows: MatcherFeedbackSummaryRow[]) {\n const totals = {\n total: rows.length,\n pending: 0,\n accepted: 0,\n autoAccepted: 0,\n rejected: 0,\n superseded: 0,\n };\n\n const surfaces = new Set<string>();\n const matcherKeys = new Set<string>();\n let rewardSum = 0;\n\n for (const row of rows) {\n if (row.surface) {\n surfaces.add(row.surface);\n }\n if (row.matcherKey) {\n matcherKeys.add(row.matcherKey);\n }\n\n switch (row.reviewStatus) {\n case \"pending\":\n totals.pending += 1;\n break;\n case \"accepted\":\n totals.accepted += 1;\n break;\n case \"auto_accepted\":\n totals.autoAccepted += 1;\n break;\n case \"rejected\":\n totals.rejected += 1;\n break;\n case \"superseded\":\n totals.superseded += 1;\n break;\n default:\n break;\n }\n\n rewardSum += row.rewardScore ?? deriveMatcherRewardScore(row.reviewStatus);\n }\n\n const decided = totals.accepted + totals.autoAccepted + totals.rejected;\n const positive = totals.accepted + totals.autoAccepted;\n\n return {\n ...totals,\n decided,\n acceptanceRate: decided > 0 ? positive / decided : 0,\n averageReward: rows.length > 0 ? rewardSum / rows.length : 0,\n uniqueSurfaces: surfaces.size,\n uniqueMatchers: matcherKeys.size,\n };\n}\n","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","/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport { api as appApi } from \"./convex\";\nimport type { Id } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectScope = {\n topicId: Id<\"topics\">;\n projectId?: string;\n tenantId?: string;\n workspaceId?: string;\n source:\n | \"topic\"\n | \"project_mapped_topic\"\n | \"topic_inferred\"\n | \"topic_node\";\n};\n\n/**\n * RR.5 (legacy topics-table retirement) — graph-primitives mirror of the\n * kernel's epistemicNodes-first topic-scope fallback. Kept in lockstep with\n * `packages/reasoning-kernel/src/adapters/lib/topicScope.ts`\n * (`tests/unit/convex/topic-scope-fallbacks.test.ts` asserts parity).\n *\n * Resolves a topic that exists only as `epistemicNodes(nodeType=\"topic\")` —\n * the write-of-record — when no legacy `topics` row backs the ref, returning the\n * node's `topicId` self-key so scoped beliefs/evidence/questions stay reachable.\n * See the kernel module for the full silent-empty-result rationale.\n */\ntype TopicNodeScopeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n globalId?: string;\n nodeType?: string;\n topicId?: string;\n metadata?: Record<string, unknown>;\n};\n\nasync function resolveTopicNodeScopeOrNull(\n ctx: any,\n ref: string,\n): Promise<TopicProjectScope | null> {\n if (!ctx?.db || typeof ctx.db.query !== \"function\") {\n return null;\n }\n\n let node: TopicNodeScopeDoc | null = null;\n\n // 1. The ref IS the topic node's UUIDv7 globalId.\n try {\n const byGlobalId = (await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q: any) => q.eq(\"globalId\", ref))\n .first()) as TopicNodeScopeDoc | null;\n if (byGlobalId && byGlobalId.nodeType === \"topic\") {\n node = byGlobalId;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] topic-node scope lookup by globalId failed\",\n { error, ref },\n );\n }\n\n if (!node) {\n return null;\n }\n\n const scopeKey =\n normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);\n if (!scopeKey) {\n return null;\n }\n\n return {\n topicId: scopeKey as Id<\"topics\">,\n projectId: asMappedProjectId(node as unknown as TopicDoc),\n source: \"topic_node\",\n };\n}\n\ntype MaterializedTopicNodeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n};\n\nfunction asMappedProjectId(\n topic: TopicDoc | null | undefined,\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(topic[LEGACY_SCOPE_FIELD]);\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = (topic.metadata || {}) as Record<string, unknown>;\n const candidate =\n (metadata[LEGACY_SCOPE_FIELD] as string | undefined) ||\n (metadata.legacyProjectId as string | undefined) ||\n (metadata.projectId as string | undefined) ||\n (metadata.scopeProjectId as string | undefined);\n return candidate ? (candidate as string) : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(\n ctx: any,\n scopeId: string,\n): Promise<TopicDoc[]> {\n try {\n return (await ctx.db\n .query(\"topics\")\n .withIndex(\"by_graph_scope_project\", (q: any) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId),\n )\n .collect()) as TopicDoc[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve scope alias via index\",\n {\n error,\n scopeId,\n },\n );\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await ctx.db.query(\"topics\").collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: any,\n topicId: string,\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get as any, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by host query\",\n {\n error,\n topicId,\n },\n );\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: any,\n legacyScopeId: string,\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId as any, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by legacy scope\",\n {\n error,\n legacyScopeId,\n },\n );\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined,\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: any,\n topic: TopicDoc,\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) break;\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) break;\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: any,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string },\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n // Try direct lookup, fall back to the legacy mapped-project bridge\n let topic: TopicDoc | null = null;\n try {\n topic = (await ctx.db.get(\n args.topicId as Id<\"topics\">,\n )) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to load topic by direct id\",\n {\n error,\n topicId: args.topicId,\n },\n );\n // Not a valid topics table ID\n }\n if (!topic) {\n topic = await tryResolveHostTopicById(ctx, String(args.topicId));\n }\n if (!topic) {\n // Try as legacy projectId / globalId via the mapped-project bridge.\n topic =\n pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, String(args.topicId)),\n ) ?? null;\n }\n if (!topic) {\n // RR.5: no legacy topics row — resolve the canonical topic node store\n // before throwing (silent-empty-result fix).\n const nodeScope = await resolveTopicNodeScopeOrNull(\n ctx,\n String(args.topicId),\n );\n if (nodeScope) {\n return nodeScope;\n }\n throw new Error(`Topic not found: ${String(args.topicId)}`);\n }\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n if (mapped) {\n return {\n topicId: topic._id,\n projectId: mapped,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n return {\n topicId: topic._id,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n\n if (args.projectId) {\n let directTopic: TopicDoc | null = null;\n try {\n directTopic = (await ctx.db.get(\n args.projectId as Id<\"topics\">,\n )) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to load direct project topic\",\n {\n error,\n projectId: args.projectId,\n },\n );\n // Not a valid topics table ID, continue to legacy graph-scope lookup.\n }\n\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n directTopic = await tryResolveHostTopicByLegacyScope(ctx, args.projectId);\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n const topics = await findTopicsByScopeAlias(ctx, args.projectId);\n const primary = pickPrimaryTopic(topics);\n if (primary) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, primary);\n return {\n topicId: primary._id,\n projectId: args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"project_mapped_topic\",\n };\n }\n // RR.5: try the canonical topic node store before failing.\n const nodeScope = await resolveTopicNodeScopeOrNull(\n ctx,\n String(args.projectId),\n );\n if (nodeScope) {\n return {\n ...nodeScope,\n projectId: nodeScope.projectId ?? String(args.projectId),\n };\n }\n\n throw new Error(\n `Legacy project scope ${String(args.projectId)} has no mapped topic.`,\n );\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\",\n );\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","import { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\nexport const scopeArgs = optionalScopeArgs;\n\nexport type ResolvedScope = Awaited<\n ReturnType<typeof resolveTopicProjectScope>\n>;\nexport type SoftResolvedScope = {\n topicId?: string;\n projectId?: string;\n tenantId?: string;\n workspaceId?: string;\n source?: ResolvedScope[\"source\"];\n};\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nexport async function resolveScope(\n ctx: any,\n args: { topicId?: string | null; projectId?: string | null },\n): Promise<ResolvedScope | null> {\n const topicId = normalizeScopeValue(args.topicId);\n const projectId = normalizeScopeValue(args.projectId);\n if (!topicId && !projectId) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n topicId,\n projectId,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[scopeResolverCompat] Failed to resolve scope\",\n {\n error,\n topicId,\n projectId,\n },\n );\n return null;\n }\n}\n\nexport async function resolveScopeSoft(\n ctx: any,\n args: { topicId?: string | null; projectId?: string | null },\n): Promise<SoftResolvedScope> {\n const resolved = await resolveScope(ctx, args);\n if (resolved) {\n const topicId = normalizeScopeValue(resolved.topicId);\n return {\n ...(topicId ? { topicId } : {}),\n ...(resolved.projectId ? { projectId: resolved.projectId } : {}),\n ...(resolved.tenantId ? { tenantId: resolved.tenantId } : {}),\n ...(resolved.workspaceId ? { workspaceId: resolved.workspaceId } : {}),\n ...(resolved.source ? { source: resolved.source } : {}),\n };\n }\n\n const topicId = normalizeScopeValue(args.topicId);\n const projectId = normalizeScopeValue(args.projectId);\n return {\n ...(topicId ? { topicId } : {}),\n ...(projectId ? { projectId } : {}),\n };\n}\n","import { api } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\ntype OverlayIdMode = \"legacy\" | \"topic\";\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype LegacyProjectThesis = {\n statement: string;\n confidence: number;\n lastUpdated: number;\n};\n\ntype LegacyPillarImportance = \"critical\" | \"major\" | \"minor\" | \"not_applicable\";\n\ntype LegacyThesisPillarConfig = {\n pillarImportance?: Record<string, LegacyPillarImportance | undefined>;\n configuredAt?: number;\n configuredBy?: string;\n aiSuggestion?: {\n suggestedAt: number;\n reasoning: string;\n };\n};\n\ntype LegacyBeliefArchitecture = {\n overallMaturity: number;\n pillarScores: Array<Record<string, unknown>>;\n lastCalculated: number;\n};\n\ntype LegacyOntologyClassification = {\n valueChains: Array<Record<string, unknown>>;\n functions: Array<Record<string, unknown>>;\n overallConfidence: number;\n classifiedAt: number;\n};\n\ntype TopicDocLike = Record<string, unknown> & {\n _id: string;\n _creationTime?: number;\n globalId?: string;\n name?: string;\n description?: string;\n type?: string;\n tenantId?: string;\n workspaceId?: string;\n status?: string;\n visibility?: string;\n createdBy?: string;\n /** FR.7 creator-grant: the exact acting principal recorded as owner-principal. */\n ownerPrincipalId?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectOverlay = Record<string, unknown> & {\n _id: string;\n projectId: string;\n topicId: string;\n storageProjectId: string;\n legacyProjectId?: string;\n name: string;\n type: string;\n description?: string;\n ownerId: string;\n /** FR.7 creator-grant: principal-shaped owner; distinct from clerkId-shaped ownerId. */\n ownerPrincipalId?: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n tags: string[];\n chatCount: number;\n artifactCount: number;\n lastActivityAt: number;\n thesis?: LegacyProjectThesis;\n wedgeHypothesis?: string;\n founderArchetype?: string;\n investmentCriteria?: string[];\n sprintPhase?:\n | \"pre_sprint\"\n | \"readiness_check\"\n | \"thesis_crystallization\"\n | \"sprint_planning\"\n | \"active_sprint\"\n | \"theme_assembly\"\n | \"evolution\";\n currentSprintIndex?: number;\n thesisPillarConfig?: LegacyThesisPillarConfig;\n beliefArchitecture?: LegacyBeliefArchitecture;\n ontologyClassification?: LegacyOntologyClassification;\n _creationTime: number;\n createdAt: number;\n updatedAt: number;\n};\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readNonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction readMetadata(topic: TopicDocLike): Record<string, unknown> {\n return topic.metadata && typeof topic.metadata === \"object\"\n ? topic.metadata\n : {};\n}\n\nfunction readLegacyProjectId(\n value: Record<string, unknown> | null | undefined,\n): string | undefined {\n if (!value) {\n return;\n }\n return readNonEmptyString(value[LEGACY_SCOPE_FIELD]);\n}\n\nfunction coerceVisibility(\n value: unknown,\n): TopicProjectOverlay[\"visibility\"] | undefined {\n return value === \"private\" ||\n value === \"team\" ||\n value === \"firm\" ||\n value === \"external\" ||\n value === \"public\"\n ? value\n : undefined;\n}\n\nfunction coerceStatus(\n value: unknown,\n): TopicProjectOverlay[\"status\"] | undefined {\n return value === \"active\" || value === \"archived\" || value === \"watching\"\n ? value\n : undefined;\n}\n\nfunction mapProjectType(\n topic: TopicDocLike,\n metadata: Record<string, unknown>,\n): string {\n const explicit = readNonEmptyString(metadata.projectType);\n if (explicit) {\n return explicit;\n }\n if (topic.type === \"theme\") {\n return \"thematic\";\n }\n return readNonEmptyString(topic.type) || \"general\";\n}\n\nfunction isProjectLikeTopic(topic: TopicDocLike): boolean {\n const metadata = readMetadata(topic);\n return (\n topic.type === \"theme\" ||\n topic.type === \"thematic\" ||\n topic.type === \"deal\" ||\n topic.type === \"monitoring\" ||\n readLegacyProjectId(topic) !== undefined ||\n readNonEmptyString(metadata.projectType) !== undefined\n );\n}\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = getErrorMessage(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found',\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n return (error as { message: string }).message;\n }\n return \"unknown error\";\n}\n\nasync function resolveTopicDoc(\n ctx: any,\n scopeId: string,\n): Promise<TopicDocLike | null> {\n if (ctx?.db && typeof ctx.db.get === \"function\") {\n try {\n const directTopic = (await ctx.db.get(\n scopeId as any,\n )) as TopicDocLike | null;\n if (directTopic) {\n return directTopic;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by direct ID\",\n {\n error,\n scopeId,\n },\n );\n // Not a direct topics-table id.\n }\n }\n\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.get as any, {\n id: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by ID query\",\n {\n error,\n scopeId,\n },\n );\n // Fall through to legacy-scope lookup.\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.getByLegacyScopeId as any, {\n projectId: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by legacy scope ID\",\n { error, scopeId },\n );\n // Best-effort compat lookup only.\n }\n\n return null;\n}\n\nexport function materializeTopicProjectOverlay(\n topic: TopicDocLike,\n idMode: OverlayIdMode = \"legacy\",\n): TopicProjectOverlay {\n const metadata = readMetadata(topic);\n const topicId = String(topic._id);\n const legacyProjectId =\n readLegacyProjectId(topic) ||\n readLegacyProjectId(metadata) ||\n readNonEmptyString(metadata.legacyProjectId);\n const storageProjectId = legacyProjectId || topicId;\n const outwardId = idMode === \"topic\" ? topicId : storageProjectId;\n const visibility =\n coerceVisibility(topic.visibility) ||\n coerceVisibility(metadata.visibility) ||\n \"private\";\n const status =\n coerceStatus(topic.status) || coerceStatus(metadata.status) || \"active\";\n const createdAt =\n typeof topic.createdAt === \"number\"\n ? topic.createdAt\n : typeof topic._creationTime === \"number\"\n ? topic._creationTime\n : 0;\n const updatedAt =\n typeof topic.updatedAt === \"number\"\n ? topic.updatedAt\n : typeof metadata.updatedAt === \"number\"\n ? (metadata.updatedAt as number)\n : createdAt;\n\n return {\n ...metadata,\n _id: outwardId,\n projectId: outwardId,\n topicId,\n storageProjectId,\n legacyProjectId,\n name: readNonEmptyString(topic.name) || \"Untitled Theme\",\n type: mapProjectType(topic, metadata),\n description: readNonEmptyString(topic.description),\n ownerId:\n readNonEmptyString(metadata.ownerId) ||\n readNonEmptyString(topic.createdBy) ||\n \"system\",\n // FR.7 creator-grant: surface the principal-shaped owner field (column-first,\n // metadata fallback for legacy rows that recorded it in metadata).\n ownerPrincipalId:\n readNonEmptyString(topic.ownerPrincipalId) ||\n readNonEmptyString(metadata.ownerPrincipalId),\n // RR.1 carrier: preserve the nested metadata carrier so the kernel's\n // `checkProjectAccessDetailed` metadata-PRIMARY read\n // (`project.metadata?.ownerPrincipalId`) resolves the grant. The `...metadata`\n // spread above only flattens keys; it does not leave a nested `metadata`.\n metadata,\n sharedWith: readStringArray(metadata.sharedWith),\n visibility,\n tenantId:\n readNonEmptyString(topic.tenantId) ||\n readNonEmptyString(metadata.tenantId),\n workspaceId:\n readNonEmptyString(topic.workspaceId) ||\n readNonEmptyString(metadata.workspaceId),\n status,\n tags: readStringArray(metadata.tags),\n chatCount:\n typeof metadata.chatCount === \"number\"\n ? (metadata.chatCount as number)\n : 0,\n artifactCount:\n typeof metadata.artifactCount === \"number\"\n ? (metadata.artifactCount as number)\n : 0,\n lastActivityAt:\n typeof metadata.lastActivityAt === \"number\"\n ? (metadata.lastActivityAt as number)\n : updatedAt,\n _creationTime:\n typeof topic._creationTime === \"number\" ? topic._creationTime : createdAt,\n createdAt,\n updatedAt,\n };\n}\n\nexport async function resolveTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {},\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n if (options.projectLikeOnly !== false && !isProjectLikeTopic(topic)) {\n return null;\n }\n return materializeTopicProjectOverlay(topic, options.idMode);\n}\n\nexport async function listTopicProjectOverlays(\n ctx: any,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {},\n): Promise<TopicProjectOverlay[]> {\n let allTopics: TopicDocLike[] = [];\n\n if (ctx?.db?.query && typeof ctx.db.query === \"function\") {\n try {\n allTopics = (await ctx.db.query(\"topics\").collect()) as TopicDocLike[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to read topics table; falling back to API\",\n { error },\n );\n allTopics = [];\n }\n }\n\n if (allTopics.length === 0 && typeof ctx.runQuery === \"function\") {\n allTopics =\n (((await ctx.runQuery(api.topics.list as any, {})) ??\n []) as TopicDocLike[]) || [];\n }\n\n return allTopics\n .filter(\n (topic) => options.projectLikeOnly === false || isProjectLikeTopic(topic),\n )\n .map((topic) => materializeTopicProjectOverlay(topic, options.idMode));\n}\n\nexport async function patchTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n value: Record<string, unknown>,\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n\n const nextMetadata = { ...readMetadata(topic) };\n const patch: Record<string, unknown> = {};\n const topicUpdateArgs: Record<string, unknown> = {\n id: String(topic._id),\n };\n\n for (const [key, rawValue] of Object.entries(value)) {\n switch (key) {\n case \"_id\":\n case \"projectId\":\n case \"topicId\":\n case \"legacyProjectId\":\n case \"storageProjectId\":\n break;\n case \"name\":\n case \"description\":\n patch[key] = rawValue;\n topicUpdateArgs[key] = rawValue;\n break;\n case \"tenantId\":\n case \"workspaceId\":\n case \"ownerId\":\n throw new Error(\n `patchTopicProjectOverlay cannot mutate ${key} via component-owned topics`,\n );\n case \"status\": {\n const status = coerceStatus(rawValue);\n if (status) {\n patch.status = status;\n topicUpdateArgs.status = status;\n }\n break;\n }\n case \"visibility\": {\n const visibility = coerceVisibility(rawValue);\n if (visibility) {\n patch.visibility = visibility;\n topicUpdateArgs.visibility = visibility;\n }\n break;\n }\n case \"type\": {\n const projectType = readNonEmptyString(rawValue);\n if (projectType) {\n nextMetadata.projectType = projectType;\n } else {\n delete nextMetadata.projectType;\n }\n break;\n }\n case \"updatedAt\":\n case \"createdAt\":\n break;\n default:\n if (rawValue === undefined) {\n delete nextMetadata[key];\n } else {\n nextMetadata[key] = rawValue;\n }\n }\n }\n\n patch.updatedAt = Date.now();\n patch.metadata = nextMetadata;\n topicUpdateArgs.metadata = nextMetadata;\n\n if (typeof ctx.runMutation === \"function\") {\n try {\n await ctx.runMutation(api.topics.update as any, topicUpdateArgs);\n } catch (error) {\n if (\n !isMissingLucernChildComponentError(error) ||\n !ctx?.db ||\n typeof ctx.db.patch !== \"function\"\n ) {\n throw error;\n }\n await ctx.db.patch(String(topic._id) as any, patch);\n }\n } else if (ctx?.db && typeof ctx.db.patch === \"function\") {\n await ctx.db.patch(String(topic._id) as any, patch);\n } else {\n throw new Error(\n \"Cannot patch topic without component adapter (ctx.runMutation unavailable)\",\n );\n }\n\n return materializeTopicProjectOverlay({\n ...topic,\n ...patch,\n metadata: nextMetadata,\n } as TopicDocLike);\n}\n\nexport function matchesTopicProjectOverlayAccess(\n accessibleProjectIds: Set<string>,\n project: {\n topicId: string;\n legacyProjectId?: string;\n storageProjectId?: string;\n },\n): boolean {\n return (\n accessibleProjectIds.has(project.storageProjectId || project.topicId) ||\n accessibleProjectIds.has(project.topicId) ||\n (typeof project.legacyProjectId === \"string\" &&\n accessibleProjectIds.has(project.legacyProjectId))\n );\n}\n","/** Data-source resolver wiring for the graph-primitives module. */\nimport {\n listTopicProjectOverlays,\n patchTopicProjectOverlay,\n resolveTopicProjectOverlay,\n} from \"./topicProjectOverlay\";\nimport type {\n GraphPrimitivesAppResolverContext,\n GraphPrimitivesAppResolvers,\n} from \"./resolverTypes\";\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = getErrorMessage(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found',\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n return (error as { message: string }).message;\n }\n return \"unknown error\";\n}\n\nfunction isAdvisoryTopicPatch(value: Record<string, unknown>): boolean {\n const advisoryKeys = new Set([\"lastActivityAt\", \"updatedAt\"]);\n const keys = Object.keys(value);\n return keys.length > 0 && keys.every((key) => advisoryKeys.has(key));\n}\n\nasync function patchProjectWithTolerance(\n ctx: GraphPrimitivesAppResolverContext,\n projectId: string,\n value: Record<string, unknown>,\n): Promise<void> {\n try {\n await patchTopicProjectOverlay(ctx, projectId, value);\n } catch (error) {\n if (\n !isAdvisoryTopicPatch(value) ||\n !isMissingLucernChildComponentError(error)\n ) {\n throw error;\n }\n\n console.warn(\n \"[lucern graph-primitives] Non-fatal advisory topic patch failure\",\n {\n projectId,\n keys: Object.keys(value),\n error: getErrorMessage(error),\n },\n );\n }\n}\n\nfunction defaultResolvers(): GraphPrimitivesAppResolvers {\n return {\n getProject: (ctx, projectId) =>\n resolveTopicProjectOverlay(ctx, projectId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n }),\n patchProject: (ctx, projectId, value) =>\n patchProjectWithTolerance(ctx, projectId, value),\n listTopics: (ctx) =>\n listTopicProjectOverlays(ctx, {\n idMode: \"legacy\",\n }),\n getFinalArtifact: (ctx, artifactId) => ctx.db.get(artifactId),\n };\n}\n\nlet resolverOverrides: Partial<GraphPrimitivesAppResolvers> = {};\n\nexport function configureGraphPrimitivesAppResolvers(\n overrides: Partial<GraphPrimitivesAppResolvers>,\n): void {\n resolverOverrides = {\n ...resolverOverrides,\n ...overrides,\n };\n}\n\nexport function resetGraphPrimitivesAppResolvers(): void {\n resolverOverrides = {};\n}\n\nexport function resolveGraphPrimitivesAppResolvers(\n _ctx: GraphPrimitivesAppResolverContext,\n): GraphPrimitivesAppResolvers {\n return {\n ...defaultResolvers(),\n ...resolverOverrides,\n };\n}\n","import type { WithoutSystemFields } from \"convex/server\";\nimport {\n assertUuidV7Identity,\n assertStorageEdgeVocabulary,\n assertUuidShapedEdgeEndpoint,\n} from \"@lucern/contracts/ids\";\nimport {\n assertEdgePolicyAllowed,\n edgePolicyManifest,\n type EpistemicNodeType,\n} from \"@lucern/contracts\";\nimport type { Doc, Id, MutationCtx } from \"./convex\";\n\nexport async function insertEpistemicNode(\n ctx: MutationCtx,\n doc: WithoutSystemFields<Doc<\"epistemicNodes\">>,\n): Promise<Id<\"epistemicNodes\">> {\n assertUuidV7Identity(\"epistemicNodes\", doc.globalId);\n return ctx.db.insert(\"epistemicNodes\", doc);\n}\n\n/**\n * C2-RR.4b — REFERENTIAL edge-endpoint canonicality (amends RR.4's FORMAT guard).\n *\n * Proves an endpoint is the `globalId` of an EXISTING `epistemicNodes` row, not\n * that it has a v7 shape. Refuses doc-ids and fabricated/unknown endpoints while\n * keeping legacy v4-`globalId` nodes (the established prod corpus) linkable.\n * SHAPE pre-filter accepts both v4 and v7; the indexed `by_globalId` lookup is\n * the referential authority (no full scan). v7-format stays enforced only at new\n * identity minting (`assertUuidV7Identity`). See c2-rr4b-endpoint-referential.\n */\nasync function assertExistingNodeEndpoint(\n ctx: MutationCtx,\n endpointRole: \"fromNodeId\" | \"toNodeId\",\n endpoint: string,\n): Promise<void> {\n assertUuidShapedEdgeEndpoint(endpointRole, endpoint);\n const node = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q: any) => q.eq(\"globalId\", endpoint))\n .first();\n if (!node) {\n throw new Error(\n `edge_endpoint_not_canonical: epistemicEdges insert requires ${endpointRole} to be the globalId of an existing epistemicNodes row, received ${endpoint} (no node with that globalId)`,\n );\n }\n}\n\nexport async function insertEpistemicEdge(\n ctx: MutationCtx,\n doc: WithoutSystemFields<Doc<\"epistemicEdges\">>,\n): Promise<Id<\"epistemicEdges\">> {\n assertUuidV7Identity(\"epistemicEdges\", doc.globalId);\n\n // R1.1a — STORAGE-VOCABULARY MEMBERSHIP\n assertStorageEdgeVocabulary(doc.edgeType);\n\n // R1.1b — ENDPOINT PRESENCE\n if (!doc.fromNodeId || typeof doc.fromNodeId !== \"string\") {\n throw new Error(\n \"edge_endpoint_missing: epistemicEdges insert requires a non-empty fromNodeId\"\n );\n }\n if (!doc.toNodeId || typeof doc.toNodeId !== \"string\") {\n throw new Error(\n \"edge_endpoint_missing: epistemicEdges insert requires a non-empty toNodeId\"\n );\n }\n\n // C2-RR.4b Defect E (REFERENTIAL) — ENDPOINT CANONICAL IDENTITY. Edge\n // endpoints must each be the globalId of an EXISTING epistemicNodes row,\n // never a Convex doc id, a legacy topic id, or a fabricated/unknown uuid.\n // This refuses the mixed _id/globalId endpoint writes at the floor while\n // keeping legacy v4-globalId nodes linkable (RR.4b prod-incident cure).\n await assertExistingNodeEndpoint(ctx, \"fromNodeId\", doc.fromNodeId);\n await assertExistingNodeEndpoint(ctx, \"toNodeId\", doc.toNodeId);\n\n // R1.1c — FULL POLICY ASSERT (when nodeTypes are present and edgeType is in public manifest)\n if (doc.fromNodeType && doc.toNodeType && doc.edgeType !== \"extracted_from\") {\n assertEdgePolicyAllowed(\n edgePolicyManifest,\n doc.edgeType,\n {\n kind: \"epistemic_node\",\n nodeId: doc.fromNodeId,\n nodeType: doc.fromNodeType as EpistemicNodeType,\n },\n {\n kind: \"epistemic_node\",\n nodeId: doc.toNodeId,\n nodeType: doc.toNodeType as EpistemicNodeType,\n }\n );\n }\n\n return ctx.db.insert(\"epistemicEdges\", doc);\n}\n","import type { Id, MutationCtx } from \"./convex\";\nimport { internal } from \"./convex\";\nimport { generateGlobalId } from \"./globalId\";\nimport { insertEpistemicEdge } from \"./epistemicInsert.js\";\n\ntype BeliefEvidenceRelation = \"supports\" | \"contradicts\";\ntype IndexRangeBuilder = {\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n};\ntype EpistemicNode = {\n _id: Id<\"epistemicNodes\">;\n nodeType?: string;\n globalId?: string;\n projectId?: string;\n topicId?: string | Id<\"topics\">;\n supportingInsightIds?: Id<\"epistemicNodes\">[];\n contradictingInsightIds?: Id<\"epistemicNodes\">[];\n};\n\nfunction assertEvidenceImpact(args: {\n relation: BeliefEvidenceRelation;\n weight: number;\n}) {\n if (\n !Number.isFinite(args.weight) ||\n args.weight === 0 ||\n args.weight < -1 ||\n args.weight > 1\n ) {\n throw new Error(\"Belief evidence links require explicit nonzero weight in [-1, 1]\");\n }\n if (args.relation === \"supports\" && args.weight < 0) {\n throw new Error(\"Supporting evidence links require positive weight\");\n }\n if (args.relation === \"contradicts\" && args.weight > 0) {\n throw new Error(\"Contradicting evidence links require negative weight\");\n }\n}\n\nexport async function applyOperationalLinkEffects(\n ctx: MutationCtx,\n args: {\n beliefNode: EpistemicNode;\n beliefId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n relation: BeliefEvidenceRelation;\n weight: number;\n rationale?: string;\n createdBy: string;\n },\n): Promise<void> {\n assertEvidenceImpact({ relation: args.relation, weight: args.weight });\n const confidence = Math.abs(args.weight);\n const currentSupporting = args.beliefNode.supportingInsightIds ?? [];\n const currentContradicting = args.beliefNode.contradictingInsightIds ?? [];\n\n if (args.relation === \"supports\" && !currentSupporting.includes(args.insightId)) {\n await ctx.db.patch(args.beliefId, {\n supportingInsightIds: [...currentSupporting, args.insightId],\n contradictingInsightIds: currentContradicting.filter(\n (id: Id<\"epistemicNodes\">) => id !== args.insightId,\n ),\n });\n } else if (\n args.relation === \"contradicts\" &&\n !currentContradicting.includes(args.insightId)\n ) {\n await ctx.db.patch(args.beliefId, {\n contradictingInsightIds: [...currentContradicting, args.insightId],\n supportingInsightIds: currentSupporting.filter(\n (id: Id<\"epistemicNodes\">) => id !== args.insightId,\n ),\n });\n }\n\n try {\n const beliefSpineNode = await ctx.db.get(args.beliefId);\n const evidenceSpineNode = await ctx.db.get(args.insightId);\n\n if (\n beliefSpineNode?.nodeType === \"belief\" &&\n evidenceSpineNode?.nodeType === \"evidence\"\n ) {\n const existingEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q: IndexRangeBuilder) =>\n q\n .eq(\"fromNodeId\", evidenceSpineNode.globalId)\n .eq(\"toNodeId\", beliefSpineNode.globalId),\n )\n .collect();\n\n for (const edge of existingEdges) {\n if (edge.edgeType === \"informs\") {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n }\n }\n\n const globalId = generateGlobalId();\n const context = args.rationale || `Linked as ${args.relation}`;\n await insertEpistemicEdge(ctx, {\n globalId,\n // C2-RR.4 Defect E — canonical UUIDv7 endpoints, not Convex doc ids.\n fromNodeId: evidenceSpineNode.globalId,\n toNodeId: beliefSpineNode.globalId,\n sourceGlobalId: evidenceSpineNode.globalId,\n targetGlobalId: beliefSpineNode.globalId,\n edgeType: \"informs\",\n weight: args.weight,\n confidence,\n context,\n reasoningMethod: \"testimonial\",\n derivationType: \"evidence_sl_scoring\",\n metadata: {\n relation: args.relation,\n confidence,\n impactScore: args.weight,\n invariant: \"evidence.belief_impact_required\",\n },\n createdBy: args.createdBy,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n projectId: args.beliefNode.projectId,\n topicId: args.beliefNode.topicId ? String(args.beliefNode.topicId) : undefined,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId,\n fromGlobalId: evidenceSpineNode.globalId,\n toGlobalId: beliefSpineNode.globalId,\n edgeType: \"informs\",\n weight: args.weight,\n confidence,\n context,\n projectId: args.beliefNode.projectId ? String(args.beliefNode.projectId) : undefined,\n createdBy: args.createdBy,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n }\n } catch (e) {\n console.error(\"[EpistemicSpine] Failed to create informs edge:\", e);\n }\n\n if (args.beliefNode.projectId) {\n await ctx.scheduler.runAfter(0, \"verificationActions:deepVerifyEvidence\", {\n insightId: args.insightId,\n targetType: \"belief\",\n targetId: args.beliefId,\n projectId: args.beliefNode.projectId,\n userId: args.createdBy,\n });\n }\n}\n\nexport async function removeOperationalLinkEffects(\n ctx: MutationCtx,\n args: {\n beliefId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n relation: BeliefEvidenceRelation;\n },\n): Promise<void> {\n const belief = await ctx.db.get(args.beliefId);\n if (belief) {\n const currentSupporting = belief.supportingInsightIds ?? [];\n const currentContradicting = belief.contradictingInsightIds ?? [];\n\n if (args.relation === \"supports\") {\n await ctx.db.patch(args.beliefId, {\n supportingInsightIds: currentSupporting.filter(\n (id: Id<\"epistemicNodes\">) => id !== args.insightId,\n ),\n });\n } else {\n await ctx.db.patch(args.beliefId, {\n contradictingInsightIds: currentContradicting.filter(\n (id: Id<\"epistemicNodes\">) => id !== args.insightId,\n ),\n });\n }\n }\n\n try {\n const beliefSpineNode = await ctx.db.get(args.beliefId);\n const evidenceSpineNode = await ctx.db.get(args.insightId);\n\n if (\n beliefSpineNode?.nodeType === \"belief\" &&\n evidenceSpineNode?.nodeType === \"evidence\"\n ) {\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q: IndexRangeBuilder) =>\n q.eq(\"fromNodeId\", evidenceSpineNode._id).eq(\"toNodeId\", beliefSpineNode._id),\n )\n .collect();\n\n for (const edge of edges) {\n if (edge.edgeType === \"informs\") {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n }\n }\n }\n } catch (e) {\n console.error(\"[EpistemicSpine] Failed to remove informs edge:\", e);\n }\n}\n","import { v } from \"convex/values\";\nimport {\n deriveMatcherReviewStatus,\n isOperationalLinkStatus,\n type LinkSuggestionStatus,\n mergeLinkSuggestionStatus,\n resolveReviewedLinkStatus,\n} from \"./matcherFeedbackUtils\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal, mutation, query } from \"./convex\";\nimport { checkProjectAccess } from \"@lucern/access-control/access\";\nimport { resolveScopeSoft, scopeArgs } from \"./scopeResolverCompat\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport {\n applyOperationalLinkEffects,\n removeOperationalLinkEffects,\n} from \"./beliefEvidenceLinks.operational\";\n\n// IDs are now always epistemicNodes IDs (backfill complete)\nconst beliefIdUnion = v.id(\"epistemicNodes\");\nconst insightIdUnion = v.id(\"epistemicNodes\");\nconst suggestionStatusValidator = v.union(\n v.literal(\"suggested\"),\n v.literal(\"approved\"),\n v.literal(\"dismissed\")\n);\nconst matcherMetadataValidator = v.object({\n surface: v.string(),\n matcherFamily: v.optional(v.string()),\n matcherKey: v.optional(v.string()),\n matcherVersion: v.optional(v.string()),\n reviewStatus: v.optional(\n v.union(\n v.literal(\"pending\"),\n v.literal(\"accepted\"),\n v.literal(\"rejected\"),\n v.literal(\"auto_accepted\"),\n v.literal(\"superseded\")\n )\n ),\n configSnapshot: v.optional(v.any()),\n signalSnapshot: v.optional(v.any()),\n outcomeMetadata: v.optional(v.any()),\n});\n\ntype MatcherMetadata = {\n surface: string;\n matcherFamily?: string;\n matcherKey?: string;\n matcherVersion?: string;\n reviewStatus?:\n | \"pending\"\n | \"accepted\"\n | \"rejected\"\n | \"auto_accepted\"\n | \"superseded\";\n configSnapshot?: Record<string, unknown>;\n signalSnapshot?: Record<string, unknown>;\n outcomeMetadata?: Record<string, unknown>;\n};\n\ntype BeliefEvidenceRelation = \"supports\" | \"contradicts\";\ntype IndexRangeBuilder = {\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n};\ntype EpistemicNode = {\n _id: Id<\"epistemicNodes\">;\n nodeType?: string;\n globalId?: string;\n projectId?: string;\n topicId?: string | Id<\"topics\">;\n belief?: string;\n canonicalText?: string;\n status?: string;\n confidence?: string | number;\n supportingInsightIds?: Id<\"epistemicNodes\">[];\n contradictingInsightIds?: Id<\"epistemicNodes\">[];\n};\ntype BeliefEvidenceLink = {\n _id: Id<\"beliefEvidenceLinks\">;\n beliefId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n relation: BeliefEvidenceRelation;\n confidence?: number;\n rationale?: string;\n status?: LinkSuggestionStatus;\n createdBy: string;\n createdAt?: number;\n};\ntype ProjectBeliefSummary = {\n _id: Id<\"epistemicNodes\">;\n belief: string;\n status: string;\n confidence: string;\n};\ntype BeliefIdArgs = { beliefId: Id<\"epistemicNodes\"> };\ntype InsightIdArgs = { insightId: Id<\"epistemicNodes\"> };\ntype CreateLinkArgs = {\n beliefId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n relation: BeliefEvidenceRelation;\n weight: number;\n confidence?: number;\n rationale?: string;\n status?: LinkSuggestionStatus;\n matcherMetadata?: MatcherMetadata;\n createdBy: string;\n};\ntype RemoveLinkArgs = { linkId: Id<\"beliefEvidenceLinks\">; userId: string };\ntype UpdateLinkArgs = RemoveLinkArgs & {\n confidence?: number;\n rationale?: string;\n};\ntype ReviewSuggestionArgs = RemoveLinkArgs & {\n status: \"approved\" | \"dismissed\";\n reason?: string;\n};\ntype EvidenceDetailsArgs = BeliefIdArgs & { userId: string };\ntype ProjectLinksArgs = {\n topicId?: string;\n projectId?: string;\n userId: string;\n limit?: number;\n};\n\nasync function markProjectGraphDirty(\n ctx: MutationCtx,\n projectId: string | undefined | null\n): Promise<void> {\n if (!projectId) {\n return;\n }\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n {\n projectId,\n }\n );\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(ctx, projectId, {\n lastActivityAt: Date.now(),\n });\n}\n\nasync function recordMatcherDecision(\n ctx: MutationCtx,\n args: {\n beliefNode: EpistemicNode;\n beliefId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n linkId: string;\n linkStatus?: LinkSuggestionStatus;\n matcherMetadata?: MatcherMetadata;\n reviewedBy?: string;\n decisionReason?: string;\n }\n): Promise<void> {\n if (!args.matcherMetadata) {\n return;\n }\n\n await ctx.runMutation(\"matcherFeedback:recordDecision\", {\n projectId: args.beliefNode.projectId,\n topicId: args.beliefNode.topicId,\n surface: args.matcherMetadata.surface,\n matcherFamily: args.matcherMetadata.matcherFamily,\n matcherKey: args.matcherMetadata.matcherKey,\n matcherVersion: args.matcherMetadata.matcherVersion,\n sourceEntityId: String(args.insightId),\n targetEntityId: String(args.beliefId),\n suggestionTable: \"beliefEvidenceLinks\",\n suggestionId: args.linkId,\n reviewStatus: deriveMatcherReviewStatus({\n explicitReviewStatus: args.matcherMetadata.reviewStatus,\n linkStatus: args.linkStatus,\n }),\n reviewedBy: args.reviewedBy,\n decisionReason: args.decisionReason,\n configSnapshot: args.matcherMetadata.configSnapshot,\n signalSnapshot: args.matcherMetadata.signalSnapshot,\n outcomeMetadata: args.matcherMetadata.outcomeMetadata,\n });\n}\n\n/**\n * Belief Evidence Links Management (LucernCoreZero)\n *\n * Normalized edge table connecting beliefs to evidence (insights).\n * This is the core of Lucern's reasoning structure.\n *\n * Relations:\n * - \"supports\": Evidence increases confidence in belief\n * - \"contradicts\": Evidence decreases confidence in belief\n */\n\n// ===== MUTATIONS =====\n\n/**\n * Create a link between a belief and evidence\n */\nexport const create = mutation({\n args: {\n beliefId: beliefIdUnion,\n insightId: insightIdUnion,\n relation: v.union(v.literal(\"supports\"), v.literal(\"contradicts\")),\n weight: v.number(),\n confidence: v.optional(v.number()),\n rationale: v.optional(v.string()),\n status: v.optional(suggestionStatusValidator),\n matcherMetadata: v.optional(matcherMetadataValidator),\n createdBy: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: CreateLinkArgs) => {\n // IDs are already epistemicNodes IDs (backfill complete)\n const resolvedBeliefId = args.beliefId as Id<\"epistemicNodes\">;\n const resolvedInsightId = args.insightId as Id<\"epistemicNodes\">;\n\n // Get the belief node to check project access\n const beliefNode = (await ctx.db.get(resolvedBeliefId)) as\n | EpistemicNode\n | null;\n if (!beliefNode) {\n throw new Error(\"Belief node not found\");\n }\n\n // Get the insight node\n const insightNode = await ctx.db.get(resolvedInsightId);\n if (!insightNode) {\n throw new Error(\"Evidence node not found\");\n }\n if (\n !Number.isFinite(args.weight) ||\n args.weight === 0 ||\n args.weight < -1 ||\n args.weight > 1\n ) {\n throw new Error(\"Belief evidence links require explicit nonzero weight in [-1, 1]\");\n }\n if (args.relation === \"supports\" && args.weight < 0) {\n throw new Error(\"Supporting evidence links require positive weight\");\n }\n if (args.relation === \"contradicts\" && args.weight > 0) {\n throw new Error(\"Contradicting evidence links require negative weight\");\n }\n const relationConfidence = Math.abs(args.weight);\n\n // Verify project access (only if belief is project-scoped)\n if (beliefNode.projectId) {\n const hasAccess = await checkProjectAccess(\n ctx,\n beliefNode.projectId,\n args.createdBy\n );\n if (!hasAccess) {\n throw new Error(\"No permission to link evidence to this belief\");\n }\n }\n // System-wide beliefs (no projectId) are accessible by all users\n\n // Check for existing link (avoid duplicates)\n const existingLinks = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId)\n )\n .collect()) as BeliefEvidenceLink[];\n\n const duplicate = existingLinks.find(\n (link) => link.insightId === args.insightId\n );\n\n if (duplicate) {\n const nextStatus = mergeLinkSuggestionStatus(\n duplicate.status as LinkSuggestionStatus | undefined,\n args.status\n );\n await ctx.db.patch(duplicate._id, {\n relation: args.relation,\n confidence: relationConfidence,\n rationale: args.rationale,\n status: nextStatus,\n });\n if (\n isOperationalLinkStatus(nextStatus) &&\n !isOperationalLinkStatus(\n duplicate.status as LinkSuggestionStatus | undefined\n )\n ) {\n await applyOperationalLinkEffects(ctx, {\n beliefNode,\n beliefId: resolvedBeliefId,\n insightId: resolvedInsightId,\n relation: args.relation,\n weight: args.weight,\n rationale: args.rationale,\n createdBy: args.createdBy,\n });\n }\n await recordMatcherDecision(ctx, {\n beliefNode,\n beliefId: resolvedBeliefId,\n insightId: resolvedInsightId,\n linkId: duplicate._id,\n linkStatus: nextStatus,\n matcherMetadata: args.matcherMetadata,\n });\n await markProjectGraphDirty(ctx, beliefNode.projectId);\n return duplicate._id;\n }\n\n const now = Date.now();\n const linkId = await ctx.db.insert(\"beliefEvidenceLinks\", {\n beliefId: args.beliefId,\n insightId: args.insightId,\n relation: args.relation,\n confidence: relationConfidence,\n rationale: args.rationale,\n status: args.status,\n createdBy: args.createdBy,\n createdAt: now,\n });\n\n await recordMatcherDecision(ctx, {\n beliefNode,\n beliefId: resolvedBeliefId,\n insightId: resolvedInsightId,\n linkId,\n linkStatus: args.status,\n matcherMetadata: args.matcherMetadata,\n });\n\n if (isOperationalLinkStatus(args.status)) {\n await applyOperationalLinkEffects(ctx, {\n beliefNode,\n beliefId: resolvedBeliefId,\n insightId: resolvedInsightId,\n relation: args.relation,\n weight: args.weight,\n rationale: args.rationale,\n createdBy: args.createdBy,\n });\n }\n\n await markProjectGraphDirty(ctx, beliefNode.projectId);\n\n return linkId;\n },\n});\n\n/**\n * Remove a belief-evidence link\n */\nexport const remove = mutation({\n args: {\n linkId: v.id(\"beliefEvidenceLinks\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: RemoveLinkArgs) => {\n const link = (await ctx.db.get(args.linkId)) as BeliefEvidenceLink | null;\n if (!link) {\n throw new Error(\"Link not found\");\n }\n\n // Only creator can remove\n if (link.createdBy !== args.userId) {\n throw new Error(\"Only the creator can remove this link\");\n }\n\n const belief = (await ctx.db.get(link.beliefId)) as EpistemicNode | null;\n if (\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n ) {\n await removeOperationalLinkEffects(ctx, {\n beliefId: link.beliefId,\n insightId: link.insightId,\n relation: link.relation,\n });\n }\n\n await ctx.db.delete(args.linkId);\n await markProjectGraphDirty(ctx, belief?.projectId);\n },\n});\n\n/**\n * Update link confidence or rationale\n */\nexport const update = mutation({\n args: {\n linkId: v.id(\"beliefEvidenceLinks\"),\n confidence: v.optional(v.number()),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateLinkArgs) => {\n const link = (await ctx.db.get(args.linkId)) as BeliefEvidenceLink | null;\n if (!link) {\n throw new Error(\"Link not found\");\n }\n\n // Verify access (link creator or project access)\n const belief = (await ctx.db.get(link.beliefId)) as EpistemicNode | null;\n if (!belief) {\n throw new Error(\"Belief not found\");\n }\n\n // Verify access (link creator always has access, or project access for project-scoped beliefs)\n let hasAccess = link.createdBy === args.userId;\n\n if (!hasAccess && belief.projectId) {\n hasAccess = await checkProjectAccess(ctx, belief.projectId, args.userId);\n }\n\n // System-wide beliefs (no projectId) - only link creator can modify\n if (!hasAccess) {\n throw new Error(\"No permission to update this link\");\n }\n\n // Validate confidence if provided\n if (\n args.confidence !== undefined &&\n (args.confidence < 0 || args.confidence > 1)\n ) {\n throw new Error(\"Confidence must be between 0 and 1\");\n }\n\n const updates: Record<string, unknown> = {};\n if (args.confidence !== undefined) {\n updates.confidence = args.confidence;\n }\n if (args.rationale !== undefined) {\n updates.rationale = args.rationale;\n }\n\n if (Object.keys(updates).length > 0) {\n await ctx.db.patch(args.linkId, updates);\n await markProjectGraphDirty(ctx, belief.projectId);\n }\n },\n});\n\nexport const reviewSuggestion = mutation({\n args: {\n linkId: v.id(\"beliefEvidenceLinks\"),\n status: v.union(v.literal(\"approved\"), v.literal(\"dismissed\")),\n userId: v.string(),\n reason: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: ReviewSuggestionArgs) => {\n const link = (await ctx.db.get(args.linkId)) as BeliefEvidenceLink | null;\n if (!link) {\n throw new Error(\"Link not found\");\n }\n\n const belief = (await ctx.db.get(link.beliefId)) as EpistemicNode | null;\n if (!belief) {\n throw new Error(\"Belief not found\");\n }\n\n let hasAccess = link.createdBy === args.userId;\n if (!hasAccess && belief.projectId) {\n hasAccess = await checkProjectAccess(ctx, belief.projectId, args.userId);\n }\n if (!hasAccess) {\n throw new Error(\"No permission to review this link\");\n }\n\n const previousStatus = link.status as LinkSuggestionStatus | undefined;\n const nextStatus = resolveReviewedLinkStatus(args.status);\n await ctx.db.patch(args.linkId, { status: nextStatus });\n\n if (nextStatus === \"approved\" && !isOperationalLinkStatus(previousStatus)) {\n await applyOperationalLinkEffects(ctx, {\n beliefNode: belief,\n beliefId: link.beliefId,\n insightId: link.insightId,\n relation: link.relation,\n weight:\n link.relation === \"supports\"\n ? Math.abs(link.confidence ?? 0)\n : -Math.abs(link.confidence ?? 0),\n rationale: link.rationale,\n createdBy: args.userId,\n });\n }\n if (nextStatus === \"dismissed\" && isOperationalLinkStatus(previousStatus)) {\n await removeOperationalLinkEffects(ctx, {\n beliefId: link.beliefId,\n insightId: link.insightId,\n relation: link.relation,\n });\n }\n\n await ctx.runMutation(\"matcherFeedback:recordDecision\", {\n projectId: belief.projectId,\n topicId: belief.topicId,\n sourceEntityId: String(link.insightId),\n targetEntityId: String(link.beliefId),\n suggestionTable: \"beliefEvidenceLinks\",\n suggestionId: args.linkId,\n reviewStatus: deriveMatcherReviewStatus({ linkStatus: nextStatus }),\n reviewedBy: args.userId,\n decisionReason: args.reason,\n outcomeMetadata: args.reason ? { reason: args.reason } : undefined,\n });\n\n await markProjectGraphDirty(ctx, belief.projectId);\n return { success: true, status: nextStatus };\n },\n});\n\n// ===== QUERIES =====\n\n/**\n * Get all links for a belief\n */\nexport const getByBelief = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: BeliefIdArgs) => {\n const links = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId)\n )\n .collect()) as BeliefEvidenceLink[];\n\n return links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n },\n});\n\nexport const getPendingSuggestions = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: BeliefIdArgs) => {\n const links = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId)\n )\n .collect()) as BeliefEvidenceLink[];\n\n return links.filter((link) => link.status === \"suggested\");\n },\n});\n\n/**\n * Get supporting evidence links for a belief\n */\nexport const getSupportingLinks = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: BeliefIdArgs) => {\n const links = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_relation\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId).eq(\"relation\", \"supports\")\n )\n .collect()) as BeliefEvidenceLink[];\n\n return links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n },\n});\n\n/**\n * Get contradicting evidence links for a belief\n */\nexport const getContradictingLinks = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: BeliefIdArgs) => {\n const links = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_relation\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId).eq(\"relation\", \"contradicts\")\n )\n .collect()) as BeliefEvidenceLink[];\n\n return links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n },\n});\n\n/**\n * Get all beliefs linked to a specific insight\n */\nexport const getByInsight = query({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: InsightIdArgs) => {\n const links = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_insightId\", (q: IndexRangeBuilder) =>\n q.eq(\"insightId\", args.insightId)\n )\n .collect()) as BeliefEvidenceLink[];\n\n return links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n },\n});\n\n/**\n * Get evidence counts for a belief (for badges)\n */\nexport const getCounts = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: BeliefIdArgs) => {\n const links = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId)\n )\n .collect()) as BeliefEvidenceLink[];\n\n const activeLinks = links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n const supporting = activeLinks.filter(\n (l) => l.relation === \"supports\"\n ).length;\n const contradicting = activeLinks.filter(\n (l) => l.relation === \"contradicts\"\n ).length;\n\n return {\n supporting,\n contradicting,\n total: activeLinks.length,\n netSupport: supporting - contradicting,\n };\n },\n});\n\n/**\n * Get full evidence details for a belief (with insight data)\n */\nexport const getEvidenceWithDetails = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: EvidenceDetailsArgs) => {\n // Verify belief exists\n const belief = (await ctx.db.get(args.beliefId)) as EpistemicNode | null;\n if (!belief) {\n return null;\n }\n\n // Verify project access (only for project-scoped beliefs)\n if (belief.projectId) {\n const hasAccess = await checkProjectAccess(\n ctx,\n belief.projectId,\n args.userId\n );\n if (!hasAccess) {\n return null;\n }\n }\n // System-wide beliefs are accessible to all users\n\n // Get all links\n const links = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", args.beliefId)\n )\n .collect()) as BeliefEvidenceLink[];\n\n // Fetch insight details for each link\n const linksWithDetails = await Promise.all(\n links\n .filter((link) =>\n isOperationalLinkStatus(\n link.status as LinkSuggestionStatus | undefined\n )\n )\n .map(async (link) => {\n const insight = (await ctx.db.get(link.insightId)) as\n | EpistemicNode\n | null;\n return {\n ...link,\n insight,\n };\n })\n );\n\n // Separate supporting and contradicting\n const supporting = linksWithDetails.filter(\n (l) => l.relation === \"supports\"\n );\n const contradicting = linksWithDetails.filter(\n (l) => l.relation === \"contradicts\"\n );\n\n return {\n supporting,\n contradicting,\n counts: {\n supporting: supporting.length,\n contradicting: contradicting.length,\n netSupport: supporting.length - contradicting.length,\n },\n };\n },\n});\n\n/**\n * Get all belief-evidence links for a project (batch fetch)\n * Returns links grouped by insightId for efficient UI rendering\n */\nexport const getByProject = query({\n args: {\n ...scopeArgs,\n userId: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: ProjectLinksArgs) => {\n const scope = await resolveScopeSoft(ctx, args);\n const projectId = scope.projectId;\n if (!projectId) {\n return [];\n }\n\n // Verify project access\n const hasAccess = await checkProjectAccess(ctx, projectId, args.userId);\n if (!hasAccess) {\n return { links: [], beliefDetails: {} };\n }\n const pageSize = Math.max(1, Math.min(Math.floor(args.limit ?? 300), 1000));\n\n // Get all beliefs from epistemic spine\n const beliefs = (await ctx.runQuery(\n internal.epistemicBeliefs.internalGetByProject,\n {\n projectId,\n limit: pageSize,\n }\n )) as ProjectBeliefSummary[];\n\n const beliefIds = beliefs.map((b) => b._id);\n\n // Get all links for these beliefs\n const allLinks = await Promise.all(\n beliefIds.map(async (beliefId: Id<\"epistemicNodes\">) => {\n const links = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q: IndexRangeBuilder) =>\n q.eq(\"beliefId\", beliefId)\n )\n .take(200)) as BeliefEvidenceLink[];\n return links;\n })\n );\n\n const flattenedLinks = allLinks.flat().slice(0, pageSize * 5);\n\n // Create a map of belief details for easy lookup\n const beliefDetails: Record<\n string,\n { _id: string; belief: string; status: string; confidence: string }\n > = {};\n for (const belief of beliefs) {\n beliefDetails[belief._id] = {\n _id: belief._id,\n belief: belief.belief,\n status: belief.status,\n confidence: belief.confidence,\n };\n }\n\n return {\n links: flattenedLinks,\n beliefDetails,\n };\n },\n});\n\n/**\n * Get belief links with full belief details for a specific insight\n * Used in insight detail view\n */\nexport const getLinkedBeliefsForInsight = query({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: InsightIdArgs) => {\n const links = (await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_insightId\", (q: IndexRangeBuilder) =>\n q.eq(\"insightId\", args.insightId)\n )\n .collect()) as BeliefEvidenceLink[];\n\n // Fetch belief details for each link\n const linkedBeliefs = await Promise.all(\n links.map(async (link) => {\n const belief = (await ctx.db.get(link.beliefId)) as\n | EpistemicNode\n | null;\n return {\n linkId: link._id,\n beliefId: link.beliefId,\n relation: link.relation,\n rationale: link.rationale,\n belief: belief\n ? {\n _id: belief._id,\n belief: belief.belief ?? belief.canonicalText,\n status: belief.status,\n confidence: belief.confidence,\n }\n : null,\n };\n })\n );\n\n return linkedBeliefs.filter((l) => l.belief !== null);\n },\n});\n"]}