@lucern/graph-primitives 0.3.0-alpha.1 → 0.3.0-alpha.11
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.
- package/dist/{beliefDecay-Q_26RTc-.d.ts → beliefDecay-DZ6tkLYq.d.ts} +1 -1
- package/dist/beliefDecay.d.ts +1 -1
- package/dist/beliefDecay.js +158 -47
- package/dist/beliefDecay.js.map +1 -1
- package/dist/{beliefEvidenceLinks-42FlR48t.d.ts → beliefEvidenceLinks-CWOXxxJg.d.ts} +1 -1
- package/dist/beliefEvidenceLinks.d.ts +1 -1
- package/dist/beliefEvidenceLinks.js +141 -45
- package/dist/beliefEvidenceLinks.js.map +1 -1
- package/dist/{beliefLifecycle-C-AehZgF.d.ts → beliefLifecycle-y8WLXqQj.d.ts} +1 -1
- package/dist/beliefLifecycle.d.ts +1 -1
- package/dist/confidencePropagationDispatch.d.ts +1 -1
- package/dist/confidencePropagationDispatch.js +1 -3
- package/dist/confidencePropagationDispatch.js.map +1 -1
- package/dist/{contradictions-Hdwl7zid.d.ts → contradictions-51VLsESq.d.ts} +1 -1
- package/dist/contradictions.d.ts +1 -1
- package/dist/contradictions.js +67 -8
- package/dist/contradictions.js.map +1 -1
- package/dist/debug.d.ts +4 -0
- package/dist/debug.js +34 -0
- package/dist/debug.js.map +1 -0
- package/dist/edges/contradicts.js.map +1 -1
- package/dist/edges/dependsOn.js.map +1 -1
- package/dist/edges/elaborates.js.map +1 -1
- package/dist/edges/index.js +1 -3
- package/dist/edges/index.js.map +1 -1
- package/dist/edges/informs.js +1 -3
- package/dist/edges/informs.js.map +1 -1
- package/dist/edges/refutes.js +1 -3
- package/dist/edges/refutes.js.map +1 -1
- package/dist/edges/supports.js.map +1 -1
- package/dist/edges/utils.d.ts +3 -3
- package/dist/edges/utils.js +2 -4
- package/dist/edges/utils.js.map +1 -1
- package/dist/embeddingTrigger.js +21 -1
- package/dist/embeddingTrigger.js.map +1 -1
- package/dist/entityBridge.js +1 -1
- package/dist/entityBridge.js.map +1 -1
- package/dist/{entityLifecycle-BkhRJ-XI.d.ts → entityLifecycle-CvgSK5FV.d.ts} +1 -1
- package/dist/entityLifecycle.d.ts +1 -1
- package/dist/entityLifecycle.js +134 -47
- package/dist/entityLifecycle.js.map +1 -1
- package/dist/{epistemicAnswers-DSP1slZ9.d.ts → epistemicAnswers-C5ib4z6_.d.ts} +1 -1
- package/dist/epistemicAnswers.d.ts +1 -1
- package/dist/epistemicAnswers.js +67 -8
- package/dist/epistemicAnswers.js.map +1 -1
- package/dist/{epistemicBeliefs-DtFVTp-k.d.ts → epistemicBeliefs-DzKjZAeC.d.ts} +3 -3
- package/dist/epistemicBeliefs.d.ts +2 -2
- package/dist/epistemicBeliefs.js +289 -114
- package/dist/epistemicBeliefs.js.map +1 -1
- package/dist/epistemicContracts.d.ts +1 -1
- package/dist/epistemicContracts.js +297 -115
- package/dist/epistemicContracts.js.map +1 -1
- package/dist/{epistemicEdges-DcA8ErUG.d.ts → epistemicEdges-CvlKnEyy.d.ts} +1 -1
- package/dist/epistemicEdges.d.ts +1 -1
- package/dist/epistemicEdges.js +192 -60
- package/dist/epistemicEdges.js.map +1 -1
- package/dist/{epistemicEvidence-Bo638XDP.d.ts → epistemicEvidence-xw6UUrwh.d.ts} +1 -1
- package/dist/epistemicEvidence.d.ts +1 -1
- package/dist/epistemicEvidence.js +163 -49
- package/dist/epistemicEvidence.js.map +1 -1
- package/dist/{epistemicHelpers-Bd9xbaib.d.ts → epistemicHelpers-DevrYgPN.d.ts} +1 -1
- package/dist/epistemicHelpers.d.ts +1 -1
- package/dist/{epistemicLinking-CyeLOIzN.d.ts → epistemicLinking-CfE00tHJ.d.ts} +1 -1
- package/dist/epistemicLinking.d.ts +1 -1
- package/dist/epistemicLinking.js +1 -1
- package/dist/{epistemicNodes-BpD6Koud.d.ts → epistemicNodes-DjSUfvyD.d.ts} +1 -1
- package/dist/epistemicNodes.d.ts +1 -1
- package/dist/epistemicNodes.js +163 -33
- package/dist/epistemicNodes.js.map +1 -1
- package/dist/{epistemicQuestions-CmEeY6zQ.d.ts → epistemicQuestions-B_nUclrH.d.ts} +1 -1
- package/dist/epistemicQuestions.d.ts +1 -1
- package/dist/epistemicQuestions.js +311 -62
- package/dist/epistemicQuestions.js.map +1 -1
- package/dist/{epistemicSources-ZazxHOK1.d.ts → epistemicSources-dlKj58Jp.d.ts} +1 -1
- package/dist/epistemicSources.d.ts +1 -1
- package/dist/epistemicSources.js +65 -8
- package/dist/epistemicSources.js.map +1 -1
- package/dist/evaluators/index.js +297 -115
- package/dist/evaluators/index.js.map +1 -1
- package/dist/evaluators/lintCheckerEvaluator.js.map +1 -1
- package/dist/evaluators/sentryCheckerEvaluator.js.map +1 -1
- package/dist/evaluators/shared.js +20 -1
- package/dist/evaluators/shared.js.map +1 -1
- package/dist/evaluators/testRunnerEvaluator.js +20 -1
- package/dist/evaluators/testRunnerEvaluator.js.map +1 -1
- package/dist/evaluators/tscCheckerEvaluator.js.map +1 -1
- package/dist/index.d.ts +20 -20
- package/dist/index.js +729 -206
- package/dist/index.js.map +1 -1
- package/dist/{ontology-matching-Buhu23ss.d.ts → ontology-matching-C6rrz2VP.d.ts} +1 -1
- package/dist/ontology-matching.d.ts +1 -1
- package/dist/{ontologyApproval-Ba0Jjk1k.d.ts → ontologyApproval-CFYmqKmk.d.ts} +1 -1
- package/dist/ontologyApproval.d.ts +1 -1
- package/dist/ontologyDefinitions.js +4 -3
- package/dist/ontologyDefinitions.js.map +1 -1
- package/dist/ontologyHelpers.d.ts +1 -1
- package/dist/ontologyHelpers.js +4 -3
- package/dist/ontologyHelpers.js.map +1 -1
- package/dist/{projectionReconciliation-CxrXYGaB.d.ts → projectionReconciliation-jww2fBI0.d.ts} +1 -1
- package/dist/projectionReconciliation.d.ts +1 -1
- package/dist/projectionReconciliation.js +14 -20
- package/dist/projectionReconciliation.js.map +1 -1
- package/dist/{projectionStaleness-CAdpIsaW.d.ts → projectionStaleness-CmdbpjVK.d.ts} +1 -1
- package/dist/projectionStaleness.d.ts +1 -1
- package/dist/{questionEvidenceLinks-BdQD0TkM.d.ts → questionEvidenceLinks-DFlyPpAj.d.ts} +1 -1
- package/dist/questionEvidenceLinks.d.ts +1 -1
- package/dist/questionEvidenceLinks.js +144 -45
- package/dist/questionEvidenceLinks.js.map +1 -1
- package/dist/resolvers.js +86 -37
- package/dist/resolvers.js.map +1 -1
- package/dist/scopeResolverCompat.js +64 -7
- package/dist/scopeResolverCompat.js.map +1 -1
- package/dist/{text-matching-CMn2WnVD.d.ts → text-matching-DNg4M5Wd.d.ts} +1 -1
- package/dist/text-matching.d.ts +1 -1
- package/dist/topicProjectOverlay.js +56 -13
- package/dist/topicProjectOverlay.js.map +1 -1
- package/dist/topicScope.js +55 -6
- package/dist/topicScope.js.map +1 -1
- package/dist/workflowBridge.js +55 -6
- package/dist/workflowBridge.js.map +1 -1
- package/dist/workspaceIsolation.js +55 -6
- package/dist/workspaceIsolation.js.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/convex.ts","../src/embeddingTrigger.ts","../src/globalId.ts","../src/topicProjectOverlay.ts","../src/resolvers.ts","../src/topicScope.ts","../src/workspaceIsolation.ts","../src/epistemicEvidence.ts"],"names":["isMissingLucernChildComponentError","LEGACY_SCOPE_FIELD","normalizeScopeValue","v"],"mappings":"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","file":"epistemicEvidence.js","sourcesContent":["import {\n actionGeneric,\n anyApi,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\nexport const api = anyApi as any;\nexport const components = componentsGeneric() as any;\nexport const internal = anyApi as any;\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> = any;\nexport type DataModel = any;\nexport type ActionCtx = any;\nexport type DatabaseReader = any;\nexport type DatabaseWriter = any;\nexport type MutationCtx = any;\nexport type QueryCtx = any;\n\nexport const action = actionGeneric as any;\nexport const httpAction = httpActionGeneric as any;\nexport const internalAction = internalActionGeneric as any;\nexport const internalMutation = internalMutationGeneric as any;\nexport const internalQuery = internalQueryGeneric as any;\nexport const mutation = mutationGeneric as any;\nexport const query = queryGeneric as any;\n","/**\n * Shared helper to schedule embedding generation after epistemic node creation.\n *\n * Best-effort — failures are silently caught. The embedding generation action\n * is a public action in convex/embeddingActions.ts that calls Pinecone.\n */\n\nimport type { Id } from \"./convex\";\n\ninterface EmbeddingTriggerArgs {\n ctx: any;\n nodeId: Id<\"epistemicNodes\">;\n projectId?: string | null;\n topicId?: string | null;\n createdBy: string;\n nodeType:\n | \"belief\"\n | \"question\"\n | \"evidence\"\n | \"answer\"\n | \"synthesis\"\n | \"theme\"\n | \"source\";\n text: string;\n hasAnswer?: boolean;\n confidence?: number;\n}\n\nexport async function scheduleEmbeddingGeneration(args: EmbeddingTriggerArgs): Promise<void> {\n try {\n await args.ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId: args.nodeId,\n projectId: args.projectId ? String(args.projectId) : undefined,\n topicId: args.topicId ? String(args.topicId) : undefined,\n createdBy: args.createdBy,\n nodeType: args.nodeType,\n text: args.text.slice(0, 20_000),\n hasAnswer: args.hasAnswer,\n confidence: args.confidence,\n }\n );\n } catch {\n // Embedding generation is best-effort — never block node creation\n }\n}\n","/**\n * Shared UUID v4 generator for global IDs.\n *\n * Uses crypto.getRandomValues() for collision-safe generation.\n * Replaces the Math.random()-based UUID pattern that was duplicated\n * across 7+ files.\n *\n * @module convex/lib/globalId\n */\n\n/**\n * Generate a UUID v4 global ID using crypto-safe random bytes.\n */\nexport function generateGlobalId(): string {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n // Set version (4) and variant (RFC 4122)\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, \"0\")).join(\n \"\"\n );\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n","import { api } from \"./convex\";\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 =\n | \"critical\"\n | \"major\"\n | \"minor\"\n | \"not_applicable\";\n\ntype LegacyThesisPillarConfig = {\n pillarImportance?: Record<string, LegacyPillarImportance | undefined>;\n configuredAt?: number;\n configuredBy?: string;\n aiSuggestion?: {\n suggestedAt: number;\n reasoning: string;\n };\n};\n\ntype LegacyBeliefArchitecture = {\n overallMaturity: number;\n pillarScores: Array<Record<string, unknown>>;\n lastCalculated: number;\n};\n\ntype LegacyOntologyClassification = {\n valueChains: Array<Record<string, unknown>>;\n functions: Array<Record<string, unknown>>;\n overallConfidence: number;\n classifiedAt: number;\n};\n\ntype TopicDocLike = Record<string, unknown> & {\n _id: string;\n _creationTime?: number;\n globalId?: string;\n name?: string;\n description?: string;\n type?: string;\n tenantId?: string;\n workspaceId?: string;\n status?: string;\n visibility?: string;\n createdBy?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectOverlay = Record<string, unknown> & {\n _id: string;\n projectId: string;\n topicId: string;\n storageProjectId: string;\n legacyProjectId?: string;\n name: string;\n type: string;\n description?: string;\n ownerId: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n tags: string[];\n chatCount: number;\n artifactCount: number;\n lastActivityAt: number;\n thesis?: LegacyProjectThesis;\n wedgeHypothesis?: string;\n founderArchetype?: string;\n investmentCriteria?: string[];\n sprintPhase?:\n | \"pre_sprint\"\n | \"readiness_check\"\n | \"thesis_crystallization\"\n | \"sprint_planning\"\n | \"active_sprint\"\n | \"theme_assembly\"\n | \"evolution\";\n currentSprintIndex?: number;\n thesisPillarConfig?: LegacyThesisPillarConfig;\n beliefArchitecture?: LegacyBeliefArchitecture;\n ontologyClassification?: LegacyOntologyClassification;\n _creationTime: number;\n createdAt: number;\n updatedAt: number;\n};\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readNonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction readMetadata(topic: TopicDocLike): Record<string, unknown> {\n return topic.metadata && typeof topic.metadata === \"object\"\n ? topic.metadata\n : {};\n}\n\nfunction readLegacyProjectId(\n value: Record<string, unknown> | null | undefined\n): string | undefined {\n if (!value) {\n return;\n }\n return readNonEmptyString(value[LEGACY_SCOPE_FIELD]);\n}\n\nfunction coerceVisibility(\n value: unknown\n): TopicProjectOverlay[\"visibility\"] | undefined {\n return value === \"private\" ||\n value === \"team\" ||\n value === \"firm\" ||\n value === \"external\" ||\n value === \"public\"\n ? value\n : undefined;\n}\n\nfunction coerceStatus(\n value: unknown\n): TopicProjectOverlay[\"status\"] | undefined {\n return value === \"active\" || value === \"archived\" || value === \"watching\"\n ? value\n : undefined;\n}\n\nfunction mapProjectType(\n topic: TopicDocLike,\n metadata: Record<string, unknown>\n): string {\n const explicit = readNonEmptyString(metadata.projectType);\n if (explicit) {\n return explicit;\n }\n if (topic.type === \"theme\") {\n return \"thematic\";\n }\n return readNonEmptyString(topic.type) || \"general\";\n}\n\nfunction isProjectLikeTopic(topic: TopicDocLike): boolean {\n const metadata = readMetadata(topic);\n return (\n topic.type === \"theme\" ||\n topic.type === \"thematic\" ||\n topic.type === \"deal\" ||\n topic.type === \"monitoring\" ||\n readLegacyProjectId(topic) !== undefined ||\n readNonEmptyString(metadata.projectType) !== undefined\n );\n}\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(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\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(scopeId as any)) as TopicDocLike | null;\n if (directTopic) {\n return directTopic;\n }\n } catch {\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 {\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 {\n // Best-effort compat lookup only.\n }\n\n return null;\n}\n\nexport function materializeTopicProjectOverlay(\n topic: TopicDocLike,\n idMode: OverlayIdMode = \"legacy\"\n): TopicProjectOverlay {\n const metadata = readMetadata(topic);\n const topicId = String(topic._id);\n const legacyProjectId =\n readLegacyProjectId(topic) ||\n readLegacyProjectId(metadata) ||\n readNonEmptyString(metadata.legacyProjectId);\n const storageProjectId = legacyProjectId || topicId;\n const outwardId = idMode === \"topic\" ? topicId : storageProjectId;\n const visibility =\n coerceVisibility(topic.visibility) ||\n coerceVisibility(metadata.visibility) ||\n \"private\";\n const status =\n coerceStatus(topic.status) || coerceStatus(metadata.status) || \"active\";\n const createdAt =\n typeof topic.createdAt === \"number\"\n ? topic.createdAt\n : typeof topic._creationTime === \"number\"\n ? topic._creationTime\n : 0;\n const updatedAt =\n typeof topic.updatedAt === \"number\"\n ? topic.updatedAt\n : typeof metadata.updatedAt === \"number\"\n ? (metadata.updatedAt as number)\n : createdAt;\n\n return {\n ...metadata,\n _id: outwardId,\n projectId: outwardId,\n topicId,\n storageProjectId,\n legacyProjectId,\n name: readNonEmptyString(topic.name) || \"Untitled Theme\",\n type: mapProjectType(topic, metadata),\n description: readNonEmptyString(topic.description),\n ownerId:\n readNonEmptyString(metadata.ownerId) ||\n readNonEmptyString(topic.createdBy) ||\n \"system\",\n sharedWith: readStringArray(metadata.sharedWith),\n visibility,\n tenantId:\n readNonEmptyString(topic.tenantId) ||\n readNonEmptyString(metadata.tenantId),\n workspaceId:\n readNonEmptyString(topic.workspaceId) ||\n readNonEmptyString(metadata.workspaceId),\n status,\n tags: readStringArray(metadata.tags),\n chatCount:\n typeof metadata.chatCount === \"number\" ? (metadata.chatCount as number) : 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 {\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, {})) ?? []) as TopicDocLike[]) ||\n [];\n }\n\n return allTopics\n .filter(\n (topic) => options.projectLikeOnly === false || isProjectLikeTopic(topic)\n )\n .map((topic) => materializeTopicProjectOverlay(topic, options.idMode));\n}\n\nexport async function patchTopicProjectOverlay(\n ctx: 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 {\n ...topic,\n ...patch,\n metadata: nextMetadata,\n } as TopicDocLike\n );\n}\n\nexport function matchesTopicProjectOverlayAccess(\n accessibleProjectIds: Set<string>,\n project: { topicId: string; legacyProjectId?: string; storageProjectId?: string }\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 = error instanceof Error ? error.message : String(error);\n return (\n message.includes('Child component ComponentName(Identifier(\"lucern\")) not found') ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\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(\"[lucern graph-primitives] Non-fatal advisory topic patch failure\", {\n projectId,\n keys: Object.keys(value),\n error: error instanceof Error ? error.message : error,\n });\n }\n}\n\nfunction defaultResolvers(): GraphPrimitivesAppResolvers {\n return {\n async getProject(ctx, projectId) {\n return await resolveTopicProjectOverlay(ctx, projectId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n });\n },\n async patchProject(ctx, projectId, value) {\n await patchProjectWithTolerance(ctx, projectId, value);\n },\n async listTopics(ctx) {\n return await listTopicProjectOverlays(ctx, {\n idMode: \"legacy\",\n });\n },\n async getFinalArtifact(ctx, artifactId) {\n return await ctx.db.get(artifactId);\n },\n };\n}\n\nlet resolverOverrides: Partial<GraphPrimitivesAppResolvers> = {};\n\nexport function configureGraphPrimitivesAppResolvers(\n overrides: Partial<GraphPrimitivesAppResolvers>\n): void {\n resolverOverrides = {\n ...resolverOverrides,\n ...overrides,\n };\n}\n\nexport function resetGraphPrimitivesAppResolvers(): void {\n resolverOverrides = {};\n}\n\nexport function resolveGraphPrimitivesAppResolvers(\n _ctx: GraphPrimitivesAppResolverContext\n): GraphPrimitivesAppResolvers {\n return {\n ...defaultResolvers(),\n ...resolverOverrides,\n };\n}\n","/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport { api as appApi } from \"./convex\";\nimport type { Id } from \"./convex\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectScope = {\n topicId: Id<\"topics\">;\n projectId?: string;\n tenantId?: string;\n workspaceId?: string;\n source: \"topic\" | \"project_mapped_topic\" | \"topic_inferred\";\n};\n\ntype MaterializedTopicNodeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n};\n\nfunction asMappedProjectId(\n topic: TopicDoc | null | undefined\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(topic[LEGACY_SCOPE_FIELD]);\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = (topic.metadata || {}) as Record<string, unknown>;\n const candidate =\n (metadata[LEGACY_SCOPE_FIELD] as string | undefined) ||\n (metadata.legacyProjectId as string | undefined) ||\n (metadata.projectId as string | undefined) ||\n (metadata.scopeProjectId as string | undefined);\n return candidate ? (candidate as string) : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(ctx: any, scopeId: string): 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 {\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 {\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 {\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(args.topicId as Id<\"topics\">)) as TopicDoc | null;\n } catch {\n // Not a valid topics table ID\n }\n if (!topic) {\n topic = await tryResolveHostTopicById(ctx, String(args.topicId));\n }\n if (!topic) {\n // Try as legacy projectId / globalId via the mapped-project bridge.\n topic =\n pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, String(args.topicId))\n ) ?? null;\n }\n if (!topic) {\n throw new Error(`Topic not found: ${String(args.topicId)}`);\n }\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n if (mapped) {\n return {\n topicId: topic._id,\n projectId: mapped,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n return {\n topicId: topic._id,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n\n if (args.projectId) {\n let directTopic: TopicDoc | null = null;\n try {\n directTopic = (await ctx.db.get(\n args.projectId as Id<\"topics\">\n )) as TopicDoc | null;\n } catch {\n // Not a valid topics table ID, continue to legacy graph-scope lookup.\n }\n\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n directTopic = await tryResolveHostTopicByLegacyScope(ctx, args.projectId);\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n const topics = await findTopicsByScopeAlias(ctx, args.projectId);\n const primary = pickPrimaryTopic(topics);\n if (primary) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, primary);\n return {\n topicId: primary._id,\n projectId: args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"project_mapped_topic\",\n };\n }\n throw new Error(\n `Legacy project scope ${String(args.projectId)} has no mapped topic.`\n );\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\"\n );\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","import {\n getLayerForNodeType,\n isNodeType,\n} from \"@lucern/contracts/schema-helpers/spine/tables/epistemicNodes\";\nimport {\n resolveTopicProjectScope,\n type TopicProjectScope,\n} from \"./topicScope\";\n\ntype StructuredInvariantError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype ScopeLike = {\n tenantId?: unknown;\n workspaceId?: unknown;\n epistemicLayer?: unknown;\n nodeType?: unknown;\n topicId?: unknown;\n projectId?: unknown;\n publicationStatus?: unknown;\n};\n\nexport type RuntimePackMutationContext = {\n toolName?: string;\n packKey?: string;\n packInstallScope?: \"tenant\" | \"workspace\";\n};\n\nexport function normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction throwWorkspaceIsolationError(args: {\n message: string;\n invariantCode: string;\n suggestion: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredInvariantError;\n error.status = 409;\n error.code = \"INVARIANT_VIOLATION\";\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nexport function assertWorkspaceScopedEpistemicNodeScope(args: {\n scope: TopicProjectScope;\n nodeType: string;\n mutationName: string;\n}): void {\n const layer = isNodeType(args.nodeType)\n ? getLayerForNodeType(args.nodeType)\n : undefined;\n if (layer === \"ontological\") {\n return;\n }\n\n const workspaceId = normalizeScopeValue(args.scope.workspaceId);\n if (workspaceId) {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n \"Workspace-scoped reasoning isolation requires workspaceId on non-ontological node creation.\",\n invariantCode: \"workspace.scope_required_for_epistemic_nodes\",\n suggestion:\n \"Resolve the topic/project scope through a workspace-bound topic before creating epistemic nodes.\",\n details: {\n mutationName: args.mutationName,\n nodeType: args.nodeType,\n topicId: args.scope.topicId,\n projectId: args.scope.projectId,\n },\n });\n}\n\nexport function nodeMatchesWorkspaceReasoningScope(\n node: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!node) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const nodeTenantId = normalizeScopeValue(node.tenantId);\n const nodeWorkspaceId = normalizeScopeValue(node.workspaceId);\n const epistemicLayer =\n typeof node.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n\n if (\n scopeTenantId &&\n nodeTenantId &&\n scopeTenantId !== nodeTenantId\n ) {\n return false;\n }\n\n // Ontological entities are tenant-global (no workspace required)\n if (epistemicLayer === \"ontological\" && nodeWorkspaceId === undefined) {\n return true;\n }\n\n // Published nodes are visible at tenant scope — the microservice API surface.\n // The node stays in its workspace, but tenant-scope queries can see it.\n if (!scopeWorkspaceId && node.publicationStatus === \"published\") {\n return true;\n }\n\n if (!scopeWorkspaceId) {\n return nodeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === nodeWorkspaceId;\n}\n\nexport function edgeMatchesWorkspaceReasoningScope(\n edge: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!edge) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const edgeTenantId = normalizeScopeValue(edge.tenantId);\n const edgeWorkspaceId = normalizeScopeValue(edge.workspaceId);\n\n if (\n scopeTenantId &&\n edgeTenantId &&\n scopeTenantId !== edgeTenantId\n ) {\n return false;\n }\n\n if (!scopeWorkspaceId) {\n return edgeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === edgeWorkspaceId;\n}\n\nexport async function resolveNodeScopeForWorkspaceIsolation(\n ctx: any,\n node: ScopeLike | null | undefined\n): Promise<{\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n nodeType?: string;\n}> {\n const epistemicLayer =\n typeof node?.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n const resolved = {\n tenantId: normalizeScopeValue(node?.tenantId),\n workspaceId: normalizeScopeValue(node?.workspaceId),\n epistemicLayer,\n nodeType: typeof node?.nodeType === \"string\" ? node.nodeType : undefined,\n };\n\n if (!node) {\n return resolved;\n }\n\n if (resolved.epistemicLayer === \"ontological\") {\n return resolved;\n }\n\n if (resolved.tenantId || resolved.workspaceId) {\n return resolved;\n }\n\n if (node.topicId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n topicId: node.topicId as any,\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n if (node.projectId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n projectId: String(node.projectId),\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n return resolved;\n}\n\nexport function resolveRuntimePackMutationContext(args: {\n runtimeToolName?: string;\n runtimePackKey?: string;\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n}): RuntimePackMutationContext | undefined {\n if (\n !args.runtimeToolName &&\n !args.runtimePackKey &&\n !args.runtimePackInstallScope\n ) {\n return;\n }\n\n return {\n toolName: args.runtimeToolName,\n packKey: args.runtimePackKey,\n packInstallScope: args.runtimePackInstallScope,\n };\n}\n\nexport function assertTenantPackWorkspaceMutationAllowed(args: {\n runtime?: RuntimePackMutationContext;\n target: ScopeLike;\n mutationName: string;\n}): void {\n if (\n !args.runtime?.packKey ||\n args.runtime.packInstallScope !== \"tenant\"\n ) {\n return;\n }\n\n const targetWorkspaceId = normalizeScopeValue(args.target.workspaceId);\n const targetLayer =\n typeof args.target.epistemicLayer === \"string\"\n ? args.target.epistemicLayer\n : undefined;\n\n if (!targetWorkspaceId || targetLayer === \"ontological\") {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n `Tenant-scoped pack \"${args.runtime.packKey}\" cannot mutate workspace-scoped reasoning state.`,\n invariantCode: \"workspace.tenant_pack_reasoning_write_forbidden\",\n suggestion:\n \"Use a workspace-scoped pack for workspace-local graph mutations, or route the change through tenant-global canonical entity flows.\",\n details: {\n mutationName: args.mutationName,\n toolName: args.runtime.toolName,\n packKey: args.runtime.packKey,\n targetWorkspaceId,\n targetNodeType: args.target.nodeType,\n targetLayer,\n },\n });\n}\n","/**\n * Epistemic Evidence API\n *\n * Clean API for managing evidence/insights in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces insights.ts for CREATE operations.\n *\n * Key differences from insights.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyInsightId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * Terminology:\n * - \"Evidence\" in the epistemic graph = \"Insight\" in the legacy schema\n * - Evidence is at L2 (Compression Boundary) in the Lucern architecture\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { v } from \"convex/values\";\nimport {\n checkScopeAccess,\n checkProjectAccess,\n requireProjectAccess,\n} from \"@lucern/access-control/access\";\nimport {\n canAudienceClassAccess,\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { listAudienceRegistryRows } from \"@lucern/access-control/audienceRegistry\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport type { Doc, Id } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { generateGlobalId } from \"./globalId\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n nodeMatchesWorkspaceReasoningScope,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction generateContentHash(text: string): string {\n const content = `evidence:${text.trim().toLowerCase().replace(/\\s+/g, \" \").slice(0, 500)}`;\n let hash = 5381;\n for (let i = 0; i < content.length; i++) {\n hash = (hash << 5) + hash + content.charCodeAt(i);\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\n// Valid evidence kinds\ntype EvidenceKind =\n | \"fact\"\n | \"observation\"\n | \"claim\"\n | \"quote\"\n | \"statistic\"\n | \"signal\";\n\ntype AudienceClass = \"internal\" | \"restricted_external\" | \"public\";\n\nfunction normalizeKind(kind?: string): EvidenceKind {\n if (!kind) {\n return \"observation\";\n }\n const validKinds: EvidenceKind[] = [\n \"fact\",\n \"observation\",\n \"claim\",\n \"quote\",\n \"statistic\",\n \"signal\",\n ];\n return (validKinds.find((k) => kind.toLowerCase() === k) ||\n \"observation\") as EvidenceKind;\n}\n\n// Valid source types\ntype SourceType = \"proprietary\" | \"verified\" | \"ai_generated\";\n\nfunction normalizeSourceType(sourceType?: string): SourceType {\n if (sourceType === \"proprietary\" || sourceType === \"verified\") {\n return sourceType;\n }\n return \"ai_generated\";\n}\n\nasync function markProjectGraphDirty(\n ctx: any,\n projectId: string | undefined | null,\n topicId?: string | undefined | null\n): Promise<void> {\n const normalizedProjectId =\n typeof projectId === \"string\" && projectId.trim().length > 0\n ? projectId\n : undefined;\n const normalizedTopicId =\n typeof topicId === \"string\" && topicId.trim().length > 0\n ? topicId\n : undefined;\n\n if (!normalizedProjectId && !normalizedTopicId) {\n return;\n }\n\n if (normalizedProjectId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n {\n projectId: normalizedProjectId,\n }\n );\n }\n if (normalizedTopicId) {\n await ctx.scheduler.runAfter(\n 0,\n (internal.graphAnalysisCache as any).markCacheStaleByTopic,\n {\n topicId: normalizedTopicId,\n }\n );\n }\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n normalizedTopicId ?? normalizedProjectId!,\n {\n lastActivityAt: Date.now(),\n }\n );\n}\n\nfunction requireScopeId(...ids: (string | undefined)[]): string {\n for (const id of ids) {\n if (typeof id === \"string\" && id.trim().length > 0) return id;\n }\n throw new Error(\"No scope identifier provided (topicId or projectId required)\");\n}\n\nconst DEFAULT_EVIDENCE_PAGE_SIZE = 250;\nconst MAX_EVIDENCE_PAGE_SIZE = 1000;\nconst LEGACY_SPRINT_LINK_KEY = \"linked\" + \"SprintId\";\nconst optionalEvidenceScopeArgs = optionalScopeArgs;\ntype EvidenceScopeArgs = {\n projectId?: string | null;\n topicId?: string | null;\n};\n\nfunction clampEvidenceLimit(\n limit: number | undefined,\n fallback = DEFAULT_EVIDENCE_PAGE_SIZE\n): number {\n if (!Number.isFinite(limit)) {\n return fallback;\n }\n return Math.max(\n 1,\n Math.min(Math.floor(limit as number), MAX_EVIDENCE_PAGE_SIZE)\n );\n}\n\ntype EvidenceNodeDoc = Doc<\"epistemicNodes\">;\n\nfunction dedupeEvidenceNodes(nodes: EvidenceNodeDoc[]): EvidenceNodeDoc[] {\n const seen = new Set<string>();\n const deduped: EvidenceNodeDoc[] = [];\n for (const node of nodes) {\n const id = String(node._id);\n if (seen.has(id)) {\n continue;\n }\n seen.add(id);\n deduped.push(node);\n }\n return deduped;\n}\n\nfunction evidenceMatchesScope(\n node: Pick<EvidenceNodeDoc, \"topicId\" | \"projectId\">,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>\n): boolean {\n return (\n (scope.topicId !== undefined && node.topicId === scope.topicId) ||\n (scope.projectId !== undefined && node.projectId === scope.projectId)\n );\n}\n\nexport function resolveEvidenceLinkedWorktreeId(\n metadata: Record<string, unknown> | undefined\n): string | undefined {\n const worktreeId = metadata?.linkedWorktreeId;\n if (typeof worktreeId === \"string\" && worktreeId.trim().length > 0) {\n return worktreeId;\n }\n const sprintId = metadata?.[LEGACY_SPRINT_LINK_KEY];\n return typeof sprintId === \"string\" && sprintId.trim().length > 0\n ? sprintId\n : undefined;\n}\n\nasync function resolveEvidenceScopeOrNull(ctx: any, args: EvidenceScopeArgs) {\n if (!args.projectId && !args.topicId) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n projectId: args.projectId ?? undefined,\n topicId: args.topicId ?? undefined,\n });\n } catch {\n return null;\n }\n}\n\nasync function getEvidenceNodesForScope(\n ctx: any,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n args?: { scanLimit?: number }\n) {\n const scanLimit =\n typeof args?.scanLimit === \"number\" ? args.scanLimit : undefined;\n const topicNodes = await (scanLimit\n ? ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: any) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"evidence\")\n )\n .order(\"desc\")\n .take(scanLimit)\n : ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: any) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"evidence\")\n )\n .collect());\n\n return dedupeEvidenceNodes(topicNodes).filter((node) =>\n evidenceMatchesScope(node, scope)\n );\n}\n\nfunction createEvidenceAudienceResolver(\n registryRows: Array<{\n audienceKey?: string | null;\n audienceClass: AudienceClass;\n }>\n) {\n const audienceClassByKey = new Map<string, AudienceClass>(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ])\n );\n\n return (\n audienceKey: string | undefined | null,\n fallback: AudienceClass\n ): AudienceClass => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return (\n audienceClassByKey.get(key) ??\n (classFromAudienceKey(key, fallback) as AudienceClass)\n );\n };\n}\n\nexport function flattenEvidenceNode(n: EvidenceNodeDoc) {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n const linkedWorktreeId = resolveEvidenceLinkedWorktreeId(meta);\n return {\n ...n,\n text: n.canonicalText || \"\",\n title: n.title || \"\",\n kind: (meta.kind as string) || \"observation\",\n tags: (meta.tags as string[]) || [],\n sourceQuestionId: (meta.sourceQuestionId as string) || undefined,\n linkedBeliefId:\n (meta.linkedBeliefNodeId as string) ||\n (meta.linkedBeliefId as string) ||\n undefined,\n linkedWorktreeId,\n [LEGACY_SPRINT_LINK_KEY]:\n (meta[LEGACY_SPRINT_LINK_KEY] as string) || undefined,\n sprintIndex: (meta.sprintIndex as number) || undefined,\n externalSourceUrl: (meta.sourceUrl as string) || undefined,\n externalSourceType: (meta.externalSourceType as string) || undefined,\n };\n}\n\n// =============================================================================\n// CREATE\n// =============================================================================\n\n/**\n * Create new evidence in the epistemic spine.\n * Returns the epistemicNodes ID directly (not an insights ID).\n */\nexport const create = mutation({\n args: {\n ...optionalEvidenceScopeArgs,\n text: v.string(),\n title: v.optional(v.string()),\n content: v.optional(v.string()),\n contentType: v.optional(v.string()),\n kind: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n sourceType: v.optional(v.string()),\n externalSourceType: v.optional(v.string()),\n sourceUrl: v.optional(v.string()),\n sourceQuestionId: v.optional(v.string()),\n userId: v.string(),\n rationale: v.string(),\n // Classification fields (from AI tools)\n methodology: v.optional(v.string()),\n informationAsymmetry: v.optional(v.string()),\n sourceDescription: v.optional(v.string()),\n metadata: v.optional(v.any()),\n // Optional linking to beliefs\n linkedBeliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n evidenceRelation: v.optional(\n v.union(v.literal(\"supports\"), v.literal(\"contradicts\"))\n ),\n confidence: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"evidence\",\n mutationName: \"epistemicEvidence.create\",\n });\n if (scope.projectId) {\n await requireProjectAccess(ctx, scope.projectId, args.userId);\n }\n\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.text);\n const kind = normalizeKind(args.kind);\n const sourceType = normalizeSourceType(args.sourceType);\n const additionalMetadata =\n args.metadata && typeof args.metadata === \"object\"\n ? (args.metadata as Record<string, unknown>)\n : {};\n\n // Create ONLY in epistemicNodes (no insights table!)\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"evidence\",\n canonicalText: args.text,\n contentHash,\n ...(typeof args.title === \"string\" && args.title.trim().length > 0\n ? { title: args.title.trim() }\n : {}),\n ...(typeof args.content === \"string\" && args.content.length > 0\n ? { content: args.content }\n : {}),\n ...(typeof args.contentType === \"string\" &&\n args.contentType.trim().length > 0\n ? { contentType: args.contentType.trim() }\n : {}),\n status: \"active\",\n epistemicLayer: \"L2\", // L2: Compression Boundary (Evidence/Claims)\n sourceType,\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n kind,\n tags: args.tags || [],\n externalSourceType: args.externalSourceType,\n sourceUrl: args.sourceUrl,\n sourceQuestionId: args.sourceQuestionId,\n rationale: args.rationale,\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n evidenceRelation: args.evidenceRelation,\n confidence: args.confidence,\n methodology: args.methodology,\n informationAsymmetry: args.informationAsymmetry,\n sourceDescription: args.sourceDescription,\n ...additionalMetadata,\n },\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Schedule embedding generation\n await scheduleEmbeddingGeneration({\n ctx, nodeId, projectId: scope.projectId, topicId: scope.topicId,\n createdBy: args.userId, nodeType: \"evidence\", text: args.text,\n });\n\n // If linked to a belief, create the edge in Neo4j with delay\n // to let node sync complete first (race condition prevention).\n if (args.linkedBeliefNodeId && args.evidenceRelation) {\n const beliefNode = await ctx.db.get(args.linkedBeliefNodeId);\n if (beliefNode) {\n const weight = args.evidenceRelation === \"supports\" ? 1.0 : -1.0;\n await ctx.scheduler.runAfter(5000, internal.neo4jEdgeAPI.createEdge, {\n globalId: crypto.randomUUID(),\n fromGlobalId: globalId,\n toGlobalId: beliefNode.globalId,\n edgeType: \"informs\",\n weight: weight * (args.confidence || 0.7),\n createdBy: args.userId,\n topicId: scope.projectId ? String(scope.projectId) : undefined,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n metadata: {\n relation: args.evidenceRelation,\n confidence: args.confidence,\n },\n });\n }\n }\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: scope.projectId,\n rationale: args.rationale,\n newState: {\n text: args.text.slice(0, 200),\n kind,\n sourceType,\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n evidenceRelation: args.evidenceRelation,\n },\n });\n\n // Schedule embedding generation for semantic search.\n // topicId alone is sufficient for Lucern deployments (no projects table).\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"evidence\" as const,\n text: args.text,\n }\n );\n }\n\n // ==========================================================================\n // ONTOLOGY: Schedule evidence classification for entity extraction\n // ==========================================================================\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 2000, // 2 second delay\n internal.nodeClassification.scheduleClassification,\n {\n nodeId,\n nodeType: \"evidence\",\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n await markProjectGraphDirty(ctx, scope.projectId, String(scope.topicId));\n\n return { nodeId };\n },\n});\n\n/**\n * Create evidence and link to a belief in one operation\n */\nexport const createAndLink = mutation({\n args: {\n ...optionalEvidenceScopeArgs,\n text: v.string(),\n kind: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n sourceType: v.optional(v.string()),\n userId: v.string(),\n beliefNodeId: v.id(\"epistemicNodes\"),\n relation: v.union(v.literal(\"supports\"), v.literal(\"contradicts\")),\n confidence: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n await requireProjectAccess(ctx, String(scope.topicId), args.userId);\n\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.text);\n const kind = normalizeKind(args.kind);\n const sourceType = normalizeSourceType(args.sourceType);\n const confidence = args.confidence ?? 0.7;\n\n // Create evidence node\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"evidence\",\n canonicalText: args.text,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L2\",\n sourceType,\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n kind,\n tags: args.tags || [],\n linkedBeliefNodeId: args.beliefNodeId,\n evidenceRelation: args.relation,\n confidence,\n },\n });\n\n // Schedule Neo4j node sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Create edge directly in Neo4j\n const beliefNode = await ctx.db.get(args.beliefNodeId);\n if (!beliefNode) {\n throw new Error(\"Belief node not found for edge creation\");\n }\n\n const weight = args.relation === \"supports\" ? confidence : -confidence;\n const edgeGlobalId = crypto.randomUUID();\n // Delay edge creation by 5s to let node sync complete first.\n await ctx.scheduler.runAfter(5000, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: globalId,\n toGlobalId: beliefNode.globalId,\n edgeType: \"informs\",\n weight,\n createdBy: args.userId,\n topicId: scope.projectId,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n metadata: {\n relation: args.relation,\n confidence,\n },\n });\n\n await markProjectGraphDirty(ctx, scope.projectId, String(scope.topicId));\n\n return { nodeId, edgeGlobalId };\n },\n});\n\n// =============================================================================\n// UPDATE\n// =============================================================================\n\n/**\n * Update evidence status\n */\nexport const updateStatus = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"archived\"),\n v.literal(\"acted_on\")\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"evidence\") {\n throw new Error(\"Evidence not found\");\n }\n\n const now = Date.now();\n\n await (ctx.db as any).patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n });\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: { status: node.status },\n newState: { status: args.status },\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { nodeId: args.nodeId };\n },\n});\n\n// =============================================================================\n// QUERIES\n// =============================================================================\n\n/**\n * Get evidence by ID\n */\nexport const getById = query({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n insightId: v.optional(v.string()),\n evidenceId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const id =\n args.nodeId ?? (args.insightId as any) ?? (args.evidenceId as any);\n if (!id) {\n return null;\n }\n const node = (await ctx.db.get(\n id as Id<\"epistemicNodes\">\n )) as Doc<\"epistemicNodes\"> | null;\n if (!node || node.nodeType !== \"evidence\") {\n return null;\n }\n return node;\n },\n});\n\n/**\n * Get all evidence for a project\n */\nexport const getByProject = query({\n args: {\n ...optionalEvidenceScopeArgs,\n status: v.optional(v.string()),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId && !args.topicId) {\n return [];\n }\n\n const pageSize = clampEvidenceLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_EVIDENCE_PAGE_SIZE);\n let scope:\n | Awaited<ReturnType<typeof resolveTopicProjectScope>>\n | {\n tenantId: undefined;\n workspaceId: undefined;\n topicId?: undefined;\n projectId?: undefined;\n };\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch {\n return [];\n }\n\n if (args.userId) {\n const scopeId = scope.topicId ? String(scope.topicId) : scope.projectId;\n if (!scopeId) {\n return [];\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n }\n\n const topicNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: any) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"evidence\")\n )\n .order(\"desc\")\n .take(scanLimit);\n\n const scopedNodes = dedupeEvidenceNodes(topicNodes).filter((node) =>\n evidenceMatchesScope(node, scope)\n );\n\n const filteredNodes = args.status\n ? scopedNodes.filter((node) => node.status === args.status)\n : scopedNodes;\n\n return filteredNodes.map(flattenEvidenceNode).slice(0, pageSize);\n },\n});\n\n/**\n * Get all evidence for a topic.\n */\nexport const getByTopic = query({\n args: {\n topicId: v.string(),\n status: v.optional(v.string()),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampEvidenceLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_EVIDENCE_PAGE_SIZE);\n const scope = await resolveTopicProjectScope(ctx, { topicId: args.topicId });\n const topicNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"evidence\")\n )\n .order(\"desc\")\n .take(scanLimit);\n\n const scopedNodes = dedupeEvidenceNodes(topicNodes).filter((node) =>\n evidenceMatchesScope(node, scope)\n );\n\n const filteredNodes = args.status\n ? scopedNodes.filter((node) => node.status === args.status)\n : scopedNodes;\n\n return filteredNodes.map(flattenEvidenceNode).slice(0, pageSize);\n },\n});\n\n/**\n * Get evidence linked to a specific belief\n */\nexport const getForBelief = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // Find edges to the belief from evidence\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", args.beliefNodeId).eq(\"edgeType\", \"informs\")\n )\n .collect();\n\n // Get the evidence nodes\n const evidenceNodeIds = edges.map((e) => e.fromNodeId);\n const evidenceNodes = await Promise.all(\n evidenceNodeIds.map((id) => ctx.db.get(id))\n );\n\n // Combine with edge data\n return evidenceNodes\n .filter((e) => e !== null && e.nodeType === \"evidence\")\n .map((e, i) => ({\n ...e,\n relation: (edges[i]?.weight ?? 0) >= 0 ? \"supports\" : \"contradicts\",\n confidence: Math.abs(edges[i]?.weight ?? 0),\n edgeId: edges[i]?._id,\n }));\n },\n});\n\n// =============================================================================\n// INTERNAL QUERIES (for other Convex modules)\n// =============================================================================\n\n/**\n * Internal query to get evidence for a project\n */\nexport const internalGetByProject = internalQuery({\n args: {\n ...optionalEvidenceScopeArgs,\n status: v.optional(v.string()),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampEvidenceLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_EVIDENCE_PAGE_SIZE);\n const scope = await resolveEvidenceScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const audienceMode = args.audienceMode ?? \"internal\";\n const project = await resolveGraphPrimitivesAppResolvers(ctx).getProject(\n ctx,\n scope.topicId ? String(scope.topicId) : scope.projectId!\n );\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: project?.tenantId,\n workspaceId: project?.workspaceId,\n });\n const resolveAudienceClass = createEvidenceAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n const nodes = await getEvidenceNodesForScope(ctx, scope, { scanLimit });\n const workspaceScopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: project?.tenantId,\n workspaceId: project?.workspaceId,\n })\n );\n\n // Map to flattened format for internal callers\n return workspaceScopedNodes\n .filter(\n (n) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(n.audienceLabel, \"internal\")\n ) &&\n (!args.status || n.status === args.status)\n )\n .slice(0, pageSize)\n .map((n) => {\n const metadata = (n.metadata || {}) as Record<string, unknown>;\n return {\n _id: n._id,\n _creationTime: n.createdAt,\n projectId: n.projectId,\n topicId: n.topicId,\n text: n.canonicalText,\n kind: metadata.kind || \"observation\",\n tags: metadata.tags || [],\n sourceType: n.sourceType,\n externalSourceType: metadata.externalSourceType,\n sourceUrl: metadata.sourceUrl,\n status: n.status,\n createdBy: n.createdBy,\n createdAt: n.createdAt,\n updatedAt: n.updatedAt,\n audienceLabel: n.audienceLabel,\n policyTags: n.policyTags,\n sensitivityTier: n.sensitivityTier,\n exportClass: n.exportClass,\n anonymizationClass: n.anonymizationClass,\n };\n });\n },\n});\n\n/**\n * Internal query to get evidence for a topic\n */\nexport const internalGetByTopic = internalQuery({\n args: {\n topicId: v.string(),\n status: v.optional(v.string()),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampEvidenceLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_EVIDENCE_PAGE_SIZE);\n const audienceMode = args.audienceMode ?? \"internal\";\n const scope = await resolveTopicProjectScope(ctx, { topicId: args.topicId });\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n });\n const resolveAudienceClass = createEvidenceAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const nodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"evidence\")\n )\n .order(\"desc\")\n .take(scanLimit);\n const workspaceScopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n })\n );\n\n return workspaceScopedNodes\n .filter(\n (n) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(n.audienceLabel, \"internal\")\n ) &&\n (!args.status || n.status === args.status)\n )\n .slice(0, pageSize)\n .map((n) => {\n const metadata = (n.metadata || {}) as Record<string, unknown>;\n return {\n _id: n._id,\n _creationTime: n.createdAt,\n projectId: n.projectId,\n topicId: n.topicId,\n text: n.canonicalText,\n kind: metadata.kind || \"observation\",\n tags: metadata.tags || [],\n sourceType: n.sourceType,\n externalSourceType: metadata.externalSourceType,\n sourceUrl: metadata.sourceUrl,\n status: n.status,\n createdBy: n.createdBy,\n createdAt: n.createdAt,\n updatedAt: n.updatedAt,\n audienceLabel: n.audienceLabel,\n policyTags: n.policyTags,\n sensitivityTier: n.sensitivityTier,\n exportClass: n.exportClass,\n anonymizationClass: n.anonymizationClass,\n };\n });\n },\n});\n\n/**\n * Internal mutation to create evidence (for other Convex modules)\n */\nexport const internalCreate = internalMutation({\n args: {\n ...optionalEvidenceScopeArgs,\n text: v.string(),\n title: v.optional(v.string()),\n content: v.optional(v.string()),\n contentType: v.optional(v.string()),\n kind: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n sourceType: v.optional(v.string()),\n externalSourceType: v.optional(v.string()),\n sourceUrl: v.optional(v.string()),\n sourceQuestionId: v.optional(v.string()),\n userId: v.string(),\n rationale: v.string(),\n linkedBeliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n evidenceRelation: v.optional(v.string()),\n confidence: v.optional(v.number()),\n /** Optional extra metadata fields merged into the node's metadata object.\n * Use for domain overlays like coding intelligence (codeAnchors, failedApproach, etc.) */\n metadata: v.optional(v.any()),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"evidence\",\n mutationName: \"epistemicEvidence.internalCreate\",\n });\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"evidence\",\n epistemicLayer: \"L2\",\n },\n mutationName: \"epistemicEvidence.internalCreate\",\n });\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.text);\n const kind = normalizeKind(args.kind);\n const sourceType = normalizeSourceType(args.sourceType);\n const additionalMetadata =\n args.metadata && typeof args.metadata === \"object\"\n ? (args.metadata as Record<string, unknown>)\n : {};\n\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"evidence\",\n canonicalText: args.text,\n contentHash,\n ...(typeof args.title === \"string\" && args.title.trim().length > 0\n ? { title: args.title.trim() }\n : {}),\n ...(typeof args.content === \"string\" && args.content.length > 0\n ? { content: args.content }\n : {}),\n ...(typeof args.contentType === \"string\" &&\n args.contentType.trim().length > 0\n ? { contentType: args.contentType.trim() }\n : {}),\n status: \"active\",\n epistemicLayer: \"L2\",\n sourceType,\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n kind,\n tags: args.tags || [],\n externalSourceType: args.externalSourceType,\n sourceUrl: args.sourceUrl,\n sourceQuestionId: args.sourceQuestionId,\n rationale: args.rationale,\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n evidenceRelation: args.evidenceRelation,\n confidence: args.confidence,\n ...additionalMetadata,\n },\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: String(nodeId),\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: scope.projectId,\n rationale: args.rationale,\n newState: {\n text: args.text.slice(0, 200),\n kind,\n sourceType,\n externalSourceType: args.externalSourceType,\n sourceUrl: args.sourceUrl,\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n evidenceRelation: args.evidenceRelation,\n confidence: args.confidence,\n },\n triggeringAction: \"epistemicEvidence.internalCreate\",\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Create edge if linked to belief (directly in Neo4j)\n if (args.linkedBeliefNodeId && args.evidenceRelation) {\n const beliefNode = await ctx.db.get(args.linkedBeliefNodeId);\n if (beliefNode) {\n const confidence = args.confidence ?? 0.7;\n const weight =\n args.evidenceRelation === \"supports\" ? confidence : -confidence;\n\n // Delay edge creation by 5s to let node sync to Neo4j complete first.\n // Without this delay, the Neo4j MATCH in createEdge may fail because\n // the evidence node hasn't been synced yet (race condition).\n await ctx.scheduler.runAfter(5000, internal.neo4jEdgeAPI.createEdge, {\n globalId: crypto.randomUUID(),\n fromGlobalId: globalId,\n toGlobalId: beliefNode.globalId,\n edgeType: \"informs\",\n weight,\n createdBy: args.userId,\n topicId: scope.projectId ? String(scope.projectId) : undefined,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n metadata: {\n relation: args.evidenceRelation,\n confidence,\n },\n });\n }\n }\n\n // Schedule embedding generation for semantic search.\n // topicId alone is sufficient for Lucern deployments (no projects table).\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"evidence\" as const,\n text: args.text,\n }\n );\n }\n\n await markProjectGraphDirty(ctx, scope.projectId, String(scope.topicId));\n\n return { nodeId };\n },\n});\n\n/**\n * Update verification status on an evidence node.\n * Used by verificationActions after deep verification completes.\n */\nexport const updateVerificationStatus = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n verificationHash: v.string(),\n verificationStatus: v.string(),\n lastVerificationId: v.optional(v.id(\"verificationResults\")),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"evidence\") {\n throw new Error(\"Evidence node not found\");\n }\n const metadata = (node.metadata || {}) as Record<string, unknown>;\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n verificationHash: args.verificationHash,\n verificationStatus: args.verificationStatus,\n lastVerificationId: args.lastVerificationId,\n },\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { success: true };\n },\n});\n\n/**\n * Helper to format evidence node as legacy insight\n */\nfunction formatEvidenceNode(n: {\n _id: Id<\"epistemicNodes\">;\n projectId: string;\n topicId?: string;\n canonicalText: string;\n sourceType: string;\n status: string;\n metadata?: unknown;\n createdBy: string;\n createdAt: number;\n updatedAt: number;\n}) {\n const metadata = (n.metadata || {}) as Record<string, unknown>;\n const linkedWorktreeId = resolveEvidenceLinkedWorktreeId(metadata);\n return {\n _id: n._id,\n _epistemicNodeId: n._id,\n _creationTime: n.createdAt,\n projectId: n.projectId,\n topicId: n.topicId,\n text: n.canonicalText,\n kind: metadata.kind || \"observation\",\n tags: (metadata.tags as string[]) || [],\n sourceType: n.sourceType,\n externalSourceType: metadata.externalSourceType,\n externalSourceUrl: metadata.sourceUrl,\n sourceArtifactId: metadata.sourceArtifactId,\n sourceQuestionId: metadata.sourceQuestionId,\n linkedWorktreeId,\n [LEGACY_SPRINT_LINK_KEY]:\n (metadata[LEGACY_SPRINT_LINK_KEY] as string) || undefined,\n sourceAnchor: metadata.sourceAnchor,\n aiProvider: metadata.aiProvider,\n verificationStatus: metadata.verificationStatus,\n status: n.status,\n createdBy: n.createdBy,\n createdAt: n.createdAt,\n updatedAt: n.updatedAt,\n };\n}\n\n/**\n * Get evidence for project - SYSTEM query (no access check)\n */\nexport const getByProjectSystem = query({\n args: {\n ...optionalEvidenceScopeArgs,\n kind: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampEvidenceLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_EVIDENCE_PAGE_SIZE);\n const scope = await resolveEvidenceScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getEvidenceNodesForScope(ctx, scope, { scanLimit });\n\n const filtered = args.kind\n ? nodes.filter((n) => {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n return meta.kind === args.kind;\n })\n : nodes;\n\n filtered.sort((a, b) => b.createdAt - a.createdAt);\n return filtered.slice(0, pageSize).map((n) => formatEvidenceNode(n as any));\n },\n});\n\n// =============================================================================\n// ANALYTICS QUERIES\n// =============================================================================\n\n/**\n * Get evidence balance for a project (supporting vs challenging evidence).\n * Used by the EvidenceBalance visualization component.\n *\n * Calculates by examining edges from evidence nodes to belief nodes,\n * where positive weight = supporting and negative weight = challenging.\n */\nexport const getEvidenceBalance = query({\n args: {\n ...optionalEvidenceScopeArgs,\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n const hasAccess = await checkScopeAccess(\n ctx,\n scope.topicId ? String(scope.topicId) : scope.projectId!,\n args.userId\n );\n if (!hasAccess) {\n return { supporting: 0, challenging: 0, total: 0 };\n }\n\n const resolvedTopicId = scope.topicId || scope.projectId;\n const edges = resolvedTopicId\n ? await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_topic\", (q) => q.eq(\"topicId\", resolvedTopicId))\n .collect()\n : [];\n\n // Filter to informs edges from evidence to beliefs\n const evidenceEdges = edges.filter(\n (e) =>\n e.edgeType === \"informs\" && e.fromLayer === \"L2\" && e.toLayer === \"L3\"\n );\n\n let supporting = 0;\n let challenging = 0;\n\n for (const edge of evidenceEdges) {\n const weight = edge.weight ?? 0;\n if (weight > 0) {\n supporting++;\n } else if (weight < 0) {\n challenging++;\n }\n }\n\n return { supporting, challenging, total: evidenceEdges.length };\n },\n});\n\n// =============================================================================\n// PORTED FROM DEPRECATED insights.ts — update, flagAsIncorrect, remove\n// These functions operate ONLY on epistemicNodes (no legacy insights table).\n// =============================================================================\n\n/**\n * Update an evidence node's text, kind, tags, or verification fields.\n * Accepts either a native epistemicNodes ID via `nodeId` or a string `insightId`\n * for backward compatibility (callers still pass Id<\"epistemicNodes\"> shaped strings).\n *\n * Ported from insights.ts → update mutation.\n */\nexport const update = mutation({\n args: {\n // Accept both native and legacy-shaped IDs\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n insightId: v.optional(v.string()),\n text: v.optional(v.string()),\n kind: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n userId: v.string(),\n externalSourceUrl: v.optional(v.string()),\n verificationStatus: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // Resolve the node ID — prefer nodeId, fall back to insightId cast\n const resolvedId =\n args.nodeId ?? (args.insightId as Id<\"epistemicNodes\"> | undefined);\n if (!resolvedId) {\n throw new Error(\"Either nodeId or insightId is required\");\n }\n\n const node = await ctx.db.get(resolvedId as Id<\"epistemicNodes\">);\n if (!node || node.nodeType !== \"evidence\") {\n throw new Error(\"Evidence node not found\");\n }\n\n // Verify project access\n if (!node.projectId) {\n throw new Error(\"Evidence has no project scope\");\n }\n await checkProjectAccess(ctx, node.projectId, args.userId);\n\n const now = Date.now();\n const existingMeta = (node.metadata || {}) as Record<string, unknown>;\n const metaUpdates: Record<string, unknown> = { ...existingMeta };\n\n if (args.kind !== undefined) {\n metaUpdates.kind = args.kind;\n }\n if (args.tags !== undefined) {\n metaUpdates.tags = args.tags;\n }\n if (args.externalSourceUrl !== undefined) {\n metaUpdates.externalSourceUrl = args.externalSourceUrl;\n }\n\n await ctx.db.patch(resolvedId as Id<\"epistemicNodes\">, {\n canonicalText: args.text ?? node.canonicalText,\n metadata: metaUpdates,\n updatedAt: now,\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: resolvedId as Id<\"epistemicNodes\">,\n operation: \"upsert\",\n });\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: resolvedId as Id<\"epistemicNodes\">,\n changeType: \"updated\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: { text: node.canonicalText?.slice(0, 200) },\n newState: { text: (args.text ?? node.canonicalText)?.slice(0, 200) },\n });\n\n // Regenerate embedding if text changed\n if (args.text !== undefined) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId: resolvedId as Id<\"epistemicNodes\">,\n topicId: node.projectId,\n createdBy: node.createdBy,\n nodeType: \"evidence\" as const,\n text: args.text,\n }\n );\n }\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { nodeId: resolvedId };\n },\n});\n\n/**\n * Flag an evidence node as incorrect (human contradiction).\n * Sets verificationStatus to \"contradicted\" and records the reason in metadata.\n *\n * Ported from insights.ts → flagAsIncorrect mutation.\n */\nexport const flagAsIncorrect = mutation({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n reason: v.string(),\n suggestedCorrection: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n\n const node = await ctx.db.get(args.insightId);\n if (!node || node.nodeType !== \"evidence\") {\n throw new Error(\"Evidence not found in epistemic spine\");\n }\n\n // Verify project access\n if (!node.projectId) {\n throw new Error(\"Evidence has no project scope\");\n }\n await checkProjectAccess(ctx, node.projectId, args.userId);\n\n // Update the node with contradiction metadata\n const existingMeta = (node.metadata || {}) as Record<string, unknown>;\n await ctx.db.patch(node._id, {\n verificationStatus: \"contradicted\" as any,\n metadata: {\n ...existingMeta,\n contradictionReason: args.reason,\n suggestedCorrection: args.suggestedCorrection,\n contradictedBy: args.userId,\n contradictedAt: now,\n },\n updatedAt: now,\n });\n\n // Create a verification result record for analytics\n await ctx.db.insert(\"verificationResults\", {\n targetType: \"insight\",\n targetId: node._id,\n claimText: node.canonicalText || \"Evidence text not available\",\n verdict: \"contradicted\",\n confidence: 1.0,\n sources: [],\n reasoning: args.reason,\n suggestedRevision: args.suggestedCorrection,\n caveats: [],\n mode: \"deep_verify\",\n verifiedAt: now,\n durationMs: 0,\n projectId: node.projectId,\n userId: args.userId,\n });\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: node._id,\n changeType: \"updated\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n newState: {\n reason: args.reason,\n suggestedCorrection: args.suggestedCorrection,\n },\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n console.log(\n `[EpistemicEvidence] Evidence flagged as incorrect by ${args.userId}: \"${args.insightId.slice(0, 20)}...\"`\n );\n\n return { success: true };\n },\n});\n\n/**\n * Archive (soft-delete) an evidence node.\n * Sets status to \"archived\" — never actually deletes from epistemicNodes.\n *\n * Ported from insights.ts → remove mutation.\n */\nexport const remove = mutation({\n args: {\n // Accept both native and legacy-shaped IDs\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n insightId: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const resolvedId =\n args.nodeId ?? (args.insightId as Id<\"epistemicNodes\"> | undefined);\n if (!resolvedId) {\n throw new Error(\"Either nodeId or insightId is required\");\n }\n\n const node = await ctx.db.get(resolvedId as Id<\"epistemicNodes\">);\n if (!node || node.nodeType !== \"evidence\") {\n throw new Error(\"Evidence node not found\");\n }\n\n // Only creator can archive\n if (node.createdBy !== args.userId) {\n throw new Error(\"Only the creator can archive this evidence\");\n }\n\n const now = Date.now();\n\n // Soft-delete: set status to archived (never actually delete)\n await ctx.db.patch(resolvedId as Id<\"epistemicNodes\">, {\n status: \"archived\",\n updatedAt: now,\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: resolvedId as Id<\"epistemicNodes\">,\n operation: \"upsert\",\n });\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: resolvedId as Id<\"epistemicNodes\">,\n changeType: \"archived\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: { status: node.status },\n newState: { status: \"archived\" },\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { nodeId: resolvedId };\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/convex.ts","../src/debug.ts","../src/embeddingTrigger.ts","../src/globalId.ts","../src/topicProjectOverlay.ts","../src/resolvers.ts","../src/topicScope.ts","../src/workspaceIsolation.ts","../src/epistemicEvidence.ts"],"names":["isMissingLucernChildComponentError","getErrorMessage","LEGACY_SCOPE_FIELD","normalizeScopeValue","v"],"mappings":"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","file":"epistemicEvidence.js","sourcesContent":["import {\n actionGeneric,\n anyApi,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\nexport const api = anyApi as any;\nexport const components = componentsGeneric() as any;\nexport const internal = anyApi as any;\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> = any;\nexport type DataModel = any;\nexport type ActionCtx = any;\nexport type DatabaseReader = any;\nexport type DatabaseWriter = any;\nexport type MutationCtx = any;\nexport type QueryCtx = any;\n\nexport const action = actionGeneric as any;\nexport const httpAction = httpActionGeneric as any;\nexport const internalAction = internalActionGeneric as any;\nexport const internalMutation = internalMutationGeneric as any;\nexport const internalQuery = internalQueryGeneric as any;\nexport const mutation = mutationGeneric as any;\nexport const query = queryGeneric as any;\n","type GraphPrimitiveDebugEnvironment = {\n process?: {\n env?: Record<string, string | undefined>;\n };\n};\n\nfunction isGraphPrimitiveDebugEnabled(): boolean {\n const env = (globalThis as GraphPrimitiveDebugEnvironment).process?.env;\n return (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG === \"1\" ||\n env?.LUCERN_GRAPH_DEBUG === \"1\"\n );\n}\n\nexport function formatGraphPrimitiveError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error === null) {\n return \"null\";\n }\n if (error === undefined) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(error);\n } catch {\n return Object.prototype.toString.call(error);\n }\n}\n\nexport function debugGraphPrimitiveFallback(\n message: string,\n context?: Record<string, unknown>\n): void {\n if (!isGraphPrimitiveDebugEnabled()) {\n return;\n }\n console.debug(message, context ?? {});\n}\n","/**\n * Shared helper to schedule embedding generation after epistemic node creation.\n *\n * Best-effort — failures are silently caught. The embedding generation action\n * is a public action in convex/embeddingActions.ts that calls Pinecone.\n */\n\nimport type { Id } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\ninterface EmbeddingTriggerArgs {\n ctx: any;\n nodeId: Id<\"epistemicNodes\">;\n projectId?: string | null;\n topicId?: string | null;\n createdBy: string;\n nodeType:\n | \"belief\"\n | \"question\"\n | \"evidence\"\n | \"answer\"\n | \"synthesis\"\n | \"theme\"\n | \"source\";\n text: string;\n hasAnswer?: boolean;\n confidence?: number;\n}\n\nexport async function scheduleEmbeddingGeneration(\n args: EmbeddingTriggerArgs,\n): Promise<void> {\n try {\n await args.ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId: args.nodeId,\n projectId: args.projectId ? String(args.projectId) : undefined,\n topicId: args.topicId ? String(args.topicId) : undefined,\n createdBy: args.createdBy,\n nodeType: args.nodeType,\n text: args.text.slice(0, 20_000),\n hasAnswer: args.hasAnswer,\n confidence: args.confidence,\n },\n );\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[embeddingTrigger] Failed to schedule embedding generation\",\n {\n error,\n nodeId: String(args.nodeId),\n nodeType: args.nodeType,\n },\n );\n // Embedding generation is best-effort — never block node creation\n }\n}\n","/**\n * Shared UUID v4 generator for global IDs.\n *\n * Uses crypto.getRandomValues() for collision-safe generation.\n * Replaces the Math.random()-based UUID pattern that was duplicated\n * across 7+ files.\n *\n * @module convex/lib/globalId\n */\n\n/**\n * Generate a UUID v4 global ID using crypto-safe random bytes.\n */\nexport function generateGlobalId(): string {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n // Set version (4) and variant (RFC 4122)\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, \"0\")).join(\n \"\"\n );\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n","import { api } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\ntype OverlayIdMode = \"legacy\" | \"topic\";\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype LegacyProjectThesis = {\n statement: string;\n confidence: number;\n lastUpdated: number;\n};\n\ntype LegacyPillarImportance = \"critical\" | \"major\" | \"minor\" | \"not_applicable\";\n\ntype LegacyThesisPillarConfig = {\n pillarImportance?: Record<string, LegacyPillarImportance | undefined>;\n configuredAt?: number;\n configuredBy?: string;\n aiSuggestion?: {\n suggestedAt: number;\n reasoning: string;\n };\n};\n\ntype LegacyBeliefArchitecture = {\n overallMaturity: number;\n pillarScores: Array<Record<string, unknown>>;\n lastCalculated: number;\n};\n\ntype LegacyOntologyClassification = {\n valueChains: Array<Record<string, unknown>>;\n functions: Array<Record<string, unknown>>;\n overallConfidence: number;\n classifiedAt: number;\n};\n\ntype TopicDocLike = Record<string, unknown> & {\n _id: string;\n _creationTime?: number;\n globalId?: string;\n name?: string;\n description?: string;\n type?: string;\n tenantId?: string;\n workspaceId?: string;\n status?: string;\n visibility?: string;\n createdBy?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectOverlay = Record<string, unknown> & {\n _id: string;\n projectId: string;\n topicId: string;\n storageProjectId: string;\n legacyProjectId?: string;\n name: string;\n type: string;\n description?: string;\n ownerId: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n tags: string[];\n chatCount: number;\n artifactCount: number;\n lastActivityAt: number;\n thesis?: LegacyProjectThesis;\n wedgeHypothesis?: string;\n founderArchetype?: string;\n investmentCriteria?: string[];\n sprintPhase?:\n | \"pre_sprint\"\n | \"readiness_check\"\n | \"thesis_crystallization\"\n | \"sprint_planning\"\n | \"active_sprint\"\n | \"theme_assembly\"\n | \"evolution\";\n currentSprintIndex?: number;\n thesisPillarConfig?: LegacyThesisPillarConfig;\n beliefArchitecture?: LegacyBeliefArchitecture;\n ontologyClassification?: LegacyOntologyClassification;\n _creationTime: number;\n createdAt: number;\n updatedAt: number;\n};\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readNonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction readMetadata(topic: TopicDocLike): Record<string, unknown> {\n return topic.metadata && typeof topic.metadata === \"object\"\n ? topic.metadata\n : {};\n}\n\nfunction readLegacyProjectId(\n value: Record<string, unknown> | null | undefined,\n): string | undefined {\n if (!value) {\n return;\n }\n return readNonEmptyString(value[LEGACY_SCOPE_FIELD]);\n}\n\nfunction coerceVisibility(\n value: unknown,\n): TopicProjectOverlay[\"visibility\"] | undefined {\n return value === \"private\" ||\n value === \"team\" ||\n value === \"firm\" ||\n value === \"external\" ||\n value === \"public\"\n ? value\n : undefined;\n}\n\nfunction coerceStatus(\n value: unknown,\n): TopicProjectOverlay[\"status\"] | undefined {\n return value === \"active\" || value === \"archived\" || value === \"watching\"\n ? value\n : undefined;\n}\n\nfunction mapProjectType(\n topic: TopicDocLike,\n metadata: Record<string, unknown>,\n): string {\n const explicit = readNonEmptyString(metadata.projectType);\n if (explicit) {\n return explicit;\n }\n if (topic.type === \"theme\") {\n return \"thematic\";\n }\n return readNonEmptyString(topic.type) || \"general\";\n}\n\nfunction isProjectLikeTopic(topic: TopicDocLike): boolean {\n const metadata = readMetadata(topic);\n return (\n topic.type === \"theme\" ||\n topic.type === \"thematic\" ||\n topic.type === \"deal\" ||\n topic.type === \"monitoring\" ||\n readLegacyProjectId(topic) !== undefined ||\n readNonEmptyString(metadata.projectType) !== undefined\n );\n}\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = getErrorMessage(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found',\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n return (error as { message: string }).message;\n }\n return \"unknown error\";\n}\n\nasync function resolveTopicDoc(\n ctx: any,\n scopeId: string,\n): Promise<TopicDocLike | null> {\n if (ctx?.db && typeof ctx.db.get === \"function\") {\n try {\n const directTopic = (await ctx.db.get(\n scopeId as any,\n )) as TopicDocLike | null;\n if (directTopic) {\n return directTopic;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by direct ID\",\n {\n error,\n scopeId,\n },\n );\n // Not a direct topics-table id.\n }\n }\n\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.get as any, {\n id: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by ID query\",\n {\n error,\n scopeId,\n },\n );\n // Fall through to legacy-scope lookup.\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.getByLegacyScopeId as any, {\n projectId: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by legacy scope ID\",\n { error, scopeId },\n );\n // Best-effort compat lookup only.\n }\n\n return null;\n}\n\nexport function materializeTopicProjectOverlay(\n topic: TopicDocLike,\n idMode: OverlayIdMode = \"legacy\",\n): TopicProjectOverlay {\n const metadata = readMetadata(topic);\n const topicId = String(topic._id);\n const legacyProjectId =\n readLegacyProjectId(topic) ||\n readLegacyProjectId(metadata) ||\n readNonEmptyString(metadata.legacyProjectId);\n const storageProjectId = legacyProjectId || topicId;\n const outwardId = idMode === \"topic\" ? topicId : storageProjectId;\n const visibility =\n coerceVisibility(topic.visibility) ||\n coerceVisibility(metadata.visibility) ||\n \"private\";\n const status =\n coerceStatus(topic.status) || coerceStatus(metadata.status) || \"active\";\n const createdAt =\n typeof topic.createdAt === \"number\"\n ? topic.createdAt\n : typeof topic._creationTime === \"number\"\n ? topic._creationTime\n : 0;\n const updatedAt =\n typeof topic.updatedAt === \"number\"\n ? topic.updatedAt\n : typeof metadata.updatedAt === \"number\"\n ? (metadata.updatedAt as number)\n : createdAt;\n\n return {\n ...metadata,\n _id: outwardId,\n projectId: outwardId,\n topicId,\n storageProjectId,\n legacyProjectId,\n name: readNonEmptyString(topic.name) || \"Untitled Theme\",\n type: mapProjectType(topic, metadata),\n description: readNonEmptyString(topic.description),\n ownerId:\n readNonEmptyString(metadata.ownerId) ||\n readNonEmptyString(topic.createdBy) ||\n \"system\",\n sharedWith: readStringArray(metadata.sharedWith),\n visibility,\n tenantId:\n readNonEmptyString(topic.tenantId) ||\n readNonEmptyString(metadata.tenantId),\n workspaceId:\n readNonEmptyString(topic.workspaceId) ||\n readNonEmptyString(metadata.workspaceId),\n status,\n tags: readStringArray(metadata.tags),\n chatCount:\n typeof metadata.chatCount === \"number\"\n ? (metadata.chatCount as number)\n : 0,\n artifactCount:\n typeof metadata.artifactCount === \"number\"\n ? (metadata.artifactCount as number)\n : 0,\n lastActivityAt:\n typeof metadata.lastActivityAt === \"number\"\n ? (metadata.lastActivityAt as number)\n : updatedAt,\n _creationTime:\n typeof topic._creationTime === \"number\" ? topic._creationTime : createdAt,\n createdAt,\n updatedAt,\n };\n}\n\nexport async function resolveTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {},\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n if (options.projectLikeOnly !== false && !isProjectLikeTopic(topic)) {\n return null;\n }\n return materializeTopicProjectOverlay(topic, options.idMode);\n}\n\nexport async function listTopicProjectOverlays(\n ctx: any,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {},\n): Promise<TopicProjectOverlay[]> {\n let allTopics: TopicDocLike[] = [];\n\n if (ctx?.db?.query && typeof ctx.db.query === \"function\") {\n try {\n allTopics = (await ctx.db.query(\"topics\").collect()) as TopicDocLike[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to read topics table; falling back to API\",\n { error },\n );\n allTopics = [];\n }\n }\n\n if (allTopics.length === 0 && typeof ctx.runQuery === \"function\") {\n allTopics =\n (((await ctx.runQuery(api.topics.list as any, {})) ??\n []) as TopicDocLike[]) || [];\n }\n\n return allTopics\n .filter(\n (topic) => options.projectLikeOnly === false || isProjectLikeTopic(topic),\n )\n .map((topic) => materializeTopicProjectOverlay(topic, options.idMode));\n}\n\nexport async function patchTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n value: Record<string, unknown>,\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n\n const nextMetadata = { ...readMetadata(topic) };\n const patch: Record<string, unknown> = {};\n const topicUpdateArgs: Record<string, unknown> = {\n id: String(topic._id),\n };\n\n for (const [key, rawValue] of Object.entries(value)) {\n switch (key) {\n case \"_id\":\n case \"projectId\":\n case \"topicId\":\n case \"legacyProjectId\":\n case \"storageProjectId\":\n break;\n case \"name\":\n case \"description\":\n patch[key] = rawValue;\n topicUpdateArgs[key] = rawValue;\n break;\n case \"tenantId\":\n case \"workspaceId\":\n case \"ownerId\":\n throw new Error(\n `patchTopicProjectOverlay cannot mutate ${key} via component-owned topics`,\n );\n case \"status\": {\n const status = coerceStatus(rawValue);\n if (status) {\n patch.status = status;\n topicUpdateArgs.status = status;\n }\n break;\n }\n case \"visibility\": {\n const visibility = coerceVisibility(rawValue);\n if (visibility) {\n patch.visibility = visibility;\n topicUpdateArgs.visibility = visibility;\n }\n break;\n }\n case \"type\": {\n const projectType = readNonEmptyString(rawValue);\n if (projectType) {\n nextMetadata.projectType = projectType;\n } else {\n delete nextMetadata.projectType;\n }\n break;\n }\n case \"updatedAt\":\n case \"createdAt\":\n break;\n default:\n if (rawValue === undefined) {\n delete nextMetadata[key];\n } else {\n nextMetadata[key] = rawValue;\n }\n }\n }\n\n patch.updatedAt = Date.now();\n patch.metadata = nextMetadata;\n topicUpdateArgs.metadata = nextMetadata;\n\n if (typeof ctx.runMutation === \"function\") {\n try {\n await ctx.runMutation(api.topics.update as any, topicUpdateArgs);\n } catch (error) {\n if (\n !isMissingLucernChildComponentError(error) ||\n !ctx?.db ||\n typeof ctx.db.patch !== \"function\"\n ) {\n throw error;\n }\n await ctx.db.patch(String(topic._id) as any, patch);\n }\n } else if (ctx?.db && typeof ctx.db.patch === \"function\") {\n await ctx.db.patch(String(topic._id) as any, patch);\n } else {\n throw new Error(\n \"Cannot patch topic without component adapter (ctx.runMutation unavailable)\",\n );\n }\n\n return materializeTopicProjectOverlay({\n ...topic,\n ...patch,\n metadata: nextMetadata,\n } as TopicDocLike);\n}\n\nexport function matchesTopicProjectOverlayAccess(\n accessibleProjectIds: Set<string>,\n project: {\n topicId: string;\n legacyProjectId?: string;\n storageProjectId?: string;\n },\n): boolean {\n return (\n accessibleProjectIds.has(project.storageProjectId || project.topicId) ||\n accessibleProjectIds.has(project.topicId) ||\n (typeof project.legacyProjectId === \"string\" &&\n accessibleProjectIds.has(project.legacyProjectId))\n );\n}\n","/** Data-source resolver wiring for the graph-primitives module. */\nimport {\n listTopicProjectOverlays,\n patchTopicProjectOverlay,\n resolveTopicProjectOverlay,\n} from \"./topicProjectOverlay\";\nimport type {\n GraphPrimitivesAppResolverContext,\n GraphPrimitivesAppResolvers,\n} from \"./resolverTypes\";\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = getErrorMessage(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found',\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n return (error as { message: string }).message;\n }\n return \"unknown error\";\n}\n\nfunction isAdvisoryTopicPatch(value: Record<string, unknown>): boolean {\n const advisoryKeys = new Set([\"lastActivityAt\", \"updatedAt\"]);\n const keys = Object.keys(value);\n return keys.length > 0 && keys.every((key) => advisoryKeys.has(key));\n}\n\nasync function patchProjectWithTolerance(\n ctx: GraphPrimitivesAppResolverContext,\n projectId: string,\n value: Record<string, unknown>,\n): Promise<void> {\n try {\n await patchTopicProjectOverlay(ctx, projectId, value);\n } catch (error) {\n if (\n !isAdvisoryTopicPatch(value) ||\n !isMissingLucernChildComponentError(error)\n ) {\n throw error;\n }\n\n console.warn(\n \"[lucern graph-primitives] Non-fatal advisory topic patch failure\",\n {\n projectId,\n keys: Object.keys(value),\n error: getErrorMessage(error),\n },\n );\n }\n}\n\nfunction defaultResolvers(): GraphPrimitivesAppResolvers {\n return {\n getProject: (ctx, projectId) =>\n resolveTopicProjectOverlay(ctx, projectId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n }),\n patchProject: (ctx, projectId, value) =>\n patchProjectWithTolerance(ctx, projectId, value),\n listTopics: (ctx) =>\n listTopicProjectOverlays(ctx, {\n idMode: \"legacy\",\n }),\n getFinalArtifact: (ctx, artifactId) => ctx.db.get(artifactId),\n };\n}\n\nlet resolverOverrides: Partial<GraphPrimitivesAppResolvers> = {};\n\nexport function configureGraphPrimitivesAppResolvers(\n overrides: Partial<GraphPrimitivesAppResolvers>,\n): void {\n resolverOverrides = {\n ...resolverOverrides,\n ...overrides,\n };\n}\n\nexport function resetGraphPrimitivesAppResolvers(): void {\n resolverOverrides = {};\n}\n\nexport function resolveGraphPrimitivesAppResolvers(\n _ctx: GraphPrimitivesAppResolverContext,\n): GraphPrimitivesAppResolvers {\n return {\n ...defaultResolvers(),\n ...resolverOverrides,\n };\n}\n","/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport { api as appApi } from \"./convex\";\nimport type { Id } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectScope = {\n topicId: Id<\"topics\">;\n projectId?: string;\n tenantId?: string;\n workspaceId?: string;\n source: \"topic\" | \"project_mapped_topic\" | \"topic_inferred\";\n};\n\ntype MaterializedTopicNodeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n};\n\nfunction asMappedProjectId(\n topic: TopicDoc | null | undefined,\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(topic[LEGACY_SCOPE_FIELD]);\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = (topic.metadata || {}) as Record<string, unknown>;\n const candidate =\n (metadata[LEGACY_SCOPE_FIELD] as string | undefined) ||\n (metadata.legacyProjectId as string | undefined) ||\n (metadata.projectId as string | undefined) ||\n (metadata.scopeProjectId as string | undefined);\n return candidate ? (candidate as string) : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(\n ctx: any,\n scopeId: string,\n): Promise<TopicDoc[]> {\n try {\n return (await ctx.db\n .query(\"topics\")\n .withIndex(\"by_graph_scope_project\", (q: any) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId),\n )\n .collect()) as TopicDoc[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve scope alias via index\",\n {\n error,\n scopeId,\n },\n );\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await ctx.db.query(\"topics\").collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: any,\n topicId: string,\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get as any, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by host query\",\n {\n error,\n topicId,\n },\n );\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: any,\n legacyScopeId: string,\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId as any, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by legacy scope\",\n {\n error,\n legacyScopeId,\n },\n );\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined,\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: any,\n topic: TopicDoc,\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) break;\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) break;\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: any,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string },\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n // Try direct lookup, fall back to the legacy mapped-project bridge\n let topic: TopicDoc | null = null;\n try {\n topic = (await ctx.db.get(\n args.topicId as Id<\"topics\">,\n )) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to load topic by direct id\",\n {\n error,\n topicId: args.topicId,\n },\n );\n // Not a valid topics table ID\n }\n if (!topic) {\n topic = await tryResolveHostTopicById(ctx, String(args.topicId));\n }\n if (!topic) {\n // Try as legacy projectId / globalId via the mapped-project bridge.\n topic =\n pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, String(args.topicId)),\n ) ?? null;\n }\n if (!topic) {\n throw new Error(`Topic not found: ${String(args.topicId)}`);\n }\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n if (mapped) {\n return {\n topicId: topic._id,\n projectId: mapped,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n return {\n topicId: topic._id,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n\n if (args.projectId) {\n let directTopic: TopicDoc | null = null;\n try {\n directTopic = (await ctx.db.get(\n args.projectId as Id<\"topics\">,\n )) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to load direct project topic\",\n {\n error,\n projectId: args.projectId,\n },\n );\n // Not a valid topics table ID, continue to legacy graph-scope lookup.\n }\n\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n directTopic = await tryResolveHostTopicByLegacyScope(ctx, args.projectId);\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n const topics = await findTopicsByScopeAlias(ctx, args.projectId);\n const primary = pickPrimaryTopic(topics);\n if (primary) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, primary);\n return {\n topicId: primary._id,\n projectId: args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"project_mapped_topic\",\n };\n }\n throw new Error(\n `Legacy project scope ${String(args.projectId)} has no mapped topic.`,\n );\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\",\n );\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","import {\n getLayerForNodeType,\n isNodeType,\n} from \"@lucern/contracts/schema-helpers/spine/tables/epistemicNodes\";\nimport {\n resolveTopicProjectScope,\n type TopicProjectScope,\n} from \"./topicScope\";\n\ntype StructuredInvariantError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype ScopeLike = {\n tenantId?: unknown;\n workspaceId?: unknown;\n epistemicLayer?: unknown;\n nodeType?: unknown;\n topicId?: unknown;\n projectId?: unknown;\n publicationStatus?: unknown;\n};\n\nexport type RuntimePackMutationContext = {\n toolName?: string;\n packKey?: string;\n packInstallScope?: \"tenant\" | \"workspace\";\n};\n\nexport function normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction throwWorkspaceIsolationError(args: {\n message: string;\n invariantCode: string;\n suggestion: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredInvariantError;\n error.status = 409;\n error.code = \"INVARIANT_VIOLATION\";\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nexport function assertWorkspaceScopedEpistemicNodeScope(args: {\n scope: TopicProjectScope;\n nodeType: string;\n mutationName: string;\n}): void {\n const layer = isNodeType(args.nodeType)\n ? getLayerForNodeType(args.nodeType)\n : undefined;\n if (layer === \"ontological\") {\n return;\n }\n\n const workspaceId = normalizeScopeValue(args.scope.workspaceId);\n if (workspaceId) {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n \"Workspace-scoped reasoning isolation requires workspaceId on non-ontological node creation.\",\n invariantCode: \"workspace.scope_required_for_epistemic_nodes\",\n suggestion:\n \"Resolve the topic/project scope through a workspace-bound topic before creating epistemic nodes.\",\n details: {\n mutationName: args.mutationName,\n nodeType: args.nodeType,\n topicId: args.scope.topicId,\n projectId: args.scope.projectId,\n },\n });\n}\n\nexport function nodeMatchesWorkspaceReasoningScope(\n node: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!node) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const nodeTenantId = normalizeScopeValue(node.tenantId);\n const nodeWorkspaceId = normalizeScopeValue(node.workspaceId);\n const epistemicLayer =\n typeof node.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n\n if (\n scopeTenantId &&\n nodeTenantId &&\n scopeTenantId !== nodeTenantId\n ) {\n return false;\n }\n\n // Ontological entities are tenant-global (no workspace required)\n if (epistemicLayer === \"ontological\" && nodeWorkspaceId === undefined) {\n return true;\n }\n\n // Published nodes are visible at tenant scope — the microservice API surface.\n // The node stays in its workspace, but tenant-scope queries can see it.\n if (!scopeWorkspaceId && node.publicationStatus === \"published\") {\n return true;\n }\n\n if (!scopeWorkspaceId) {\n return nodeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === nodeWorkspaceId;\n}\n\nexport function edgeMatchesWorkspaceReasoningScope(\n edge: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!edge) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const edgeTenantId = normalizeScopeValue(edge.tenantId);\n const edgeWorkspaceId = normalizeScopeValue(edge.workspaceId);\n\n if (\n scopeTenantId &&\n edgeTenantId &&\n scopeTenantId !== edgeTenantId\n ) {\n return false;\n }\n\n if (!scopeWorkspaceId) {\n return edgeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === edgeWorkspaceId;\n}\n\nexport async function resolveNodeScopeForWorkspaceIsolation(\n ctx: any,\n node: ScopeLike | null | undefined\n): Promise<{\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n nodeType?: string;\n}> {\n const epistemicLayer =\n typeof node?.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n const resolved = {\n tenantId: normalizeScopeValue(node?.tenantId),\n workspaceId: normalizeScopeValue(node?.workspaceId),\n epistemicLayer,\n nodeType: typeof node?.nodeType === \"string\" ? node.nodeType : undefined,\n };\n\n if (!node) {\n return resolved;\n }\n\n if (resolved.epistemicLayer === \"ontological\") {\n return resolved;\n }\n\n if (resolved.tenantId || resolved.workspaceId) {\n return resolved;\n }\n\n if (node.topicId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n topicId: node.topicId as any,\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n if (node.projectId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n projectId: String(node.projectId),\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n return resolved;\n}\n\nexport function resolveRuntimePackMutationContext(args: {\n runtimeToolName?: string;\n runtimePackKey?: string;\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n}): RuntimePackMutationContext | undefined {\n if (\n !args.runtimeToolName &&\n !args.runtimePackKey &&\n !args.runtimePackInstallScope\n ) {\n return;\n }\n\n return {\n toolName: args.runtimeToolName,\n packKey: args.runtimePackKey,\n packInstallScope: args.runtimePackInstallScope,\n };\n}\n\nexport function assertTenantPackWorkspaceMutationAllowed(args: {\n runtime?: RuntimePackMutationContext;\n target: ScopeLike;\n mutationName: string;\n}): void {\n if (\n !args.runtime?.packKey ||\n args.runtime.packInstallScope !== \"tenant\"\n ) {\n return;\n }\n\n const targetWorkspaceId = normalizeScopeValue(args.target.workspaceId);\n const targetLayer =\n typeof args.target.epistemicLayer === \"string\"\n ? args.target.epistemicLayer\n : undefined;\n\n if (!targetWorkspaceId || targetLayer === \"ontological\") {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n `Tenant-scoped pack \"${args.runtime.packKey}\" cannot mutate workspace-scoped reasoning state.`,\n invariantCode: \"workspace.tenant_pack_reasoning_write_forbidden\",\n suggestion:\n \"Use a workspace-scoped pack for workspace-local graph mutations, or route the change through tenant-global canonical entity flows.\",\n details: {\n mutationName: args.mutationName,\n toolName: args.runtime.toolName,\n packKey: args.runtime.packKey,\n targetWorkspaceId,\n targetNodeType: args.target.nodeType,\n targetLayer,\n },\n });\n}\n","/**\n * Epistemic Evidence API\n *\n * Clean API for managing evidence/insights in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces insights.ts for CREATE operations.\n *\n * Key differences from insights.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyInsightId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * Terminology:\n * - \"Evidence\" in the epistemic graph = \"Insight\" in the legacy schema\n * - Evidence is at L2 (Compression Boundary) in the Lucern architecture\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { v } from \"convex/values\";\nimport {\n checkScopeAccess,\n checkProjectAccess,\n requireProjectAccess,\n} from \"@lucern/access-control/access\";\nimport {\n canAudienceClassAccess,\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { listAudienceRegistryRows } from \"@lucern/access-control/audienceRegistry\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport type { Doc, Id } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { generateGlobalId } from \"./globalId\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n nodeMatchesWorkspaceReasoningScope,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction generateContentHash(text: string): string {\n const content = `evidence:${text.trim().toLowerCase().replace(/\\s+/g, \" \").slice(0, 500)}`;\n let hash = 5381;\n for (let i = 0; i < content.length; i++) {\n hash = (hash << 5) + hash + content.charCodeAt(i);\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\n// Valid evidence kinds\ntype EvidenceKind =\n | \"fact\"\n | \"observation\"\n | \"claim\"\n | \"quote\"\n | \"statistic\"\n | \"signal\";\n\ntype AudienceClass = \"internal\" | \"restricted_external\" | \"public\";\n\nfunction normalizeKind(kind?: string): EvidenceKind {\n if (!kind) {\n return \"observation\";\n }\n const validKinds: EvidenceKind[] = [\n \"fact\",\n \"observation\",\n \"claim\",\n \"quote\",\n \"statistic\",\n \"signal\",\n ];\n return (validKinds.find((k) => kind.toLowerCase() === k) ||\n \"observation\") as EvidenceKind;\n}\n\n// Valid source types\ntype SourceType = \"proprietary\" | \"verified\" | \"ai_generated\";\n\nfunction normalizeSourceType(sourceType?: string): SourceType {\n if (sourceType === \"proprietary\" || sourceType === \"verified\") {\n return sourceType;\n }\n return \"ai_generated\";\n}\n\nasync function markProjectGraphDirty(\n ctx: any,\n projectId: string | undefined | null,\n topicId?: string | undefined | null,\n): Promise<void> {\n const normalizedProjectId =\n typeof projectId === \"string\" && projectId.trim().length > 0\n ? projectId\n : undefined;\n const normalizedTopicId =\n typeof topicId === \"string\" && topicId.trim().length > 0\n ? topicId\n : undefined;\n\n if (!normalizedProjectId && !normalizedTopicId) {\n return;\n }\n\n if (normalizedProjectId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n {\n projectId: normalizedProjectId,\n },\n );\n }\n if (normalizedTopicId) {\n await ctx.scheduler.runAfter(\n 0,\n (internal.graphAnalysisCache as any).markCacheStaleByTopic,\n {\n topicId: normalizedTopicId,\n },\n );\n }\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n normalizedTopicId ?? normalizedProjectId!,\n {\n lastActivityAt: Date.now(),\n },\n );\n}\n\nfunction requireScopeId(...ids: (string | undefined)[]): string {\n for (const id of ids) {\n if (typeof id === \"string\" && id.trim().length > 0) return id;\n }\n throw new Error(\n \"No scope identifier provided (topicId or projectId required)\",\n );\n}\n\nconst DEFAULT_EVIDENCE_PAGE_SIZE = 250;\nconst MAX_EVIDENCE_PAGE_SIZE = 1000;\nconst LEGACY_SPRINT_LINK_KEY = \"linked\" + \"SprintId\";\nconst optionalEvidenceScopeArgs = optionalScopeArgs;\ntype EvidenceScopeArgs = {\n projectId?: string | null;\n topicId?: string | null;\n};\n\nfunction clampEvidenceLimit(\n limit: number | undefined,\n fallback = DEFAULT_EVIDENCE_PAGE_SIZE,\n): number {\n if (!Number.isFinite(limit)) {\n return fallback;\n }\n return Math.max(\n 1,\n Math.min(Math.floor(limit as number), MAX_EVIDENCE_PAGE_SIZE),\n );\n}\n\ntype EvidenceNodeDoc = Doc<\"epistemicNodes\">;\n\nfunction dedupeEvidenceNodes(nodes: EvidenceNodeDoc[]): EvidenceNodeDoc[] {\n const seen = new Set<string>();\n const deduped: EvidenceNodeDoc[] = [];\n for (const node of nodes) {\n const id = String(node._id);\n if (seen.has(id)) {\n continue;\n }\n seen.add(id);\n deduped.push(node);\n }\n return deduped;\n}\n\nfunction evidenceMatchesScope(\n node: Pick<EvidenceNodeDoc, \"topicId\" | \"projectId\">,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n): boolean {\n return (\n (scope.topicId !== undefined && node.topicId === scope.topicId) ||\n (scope.projectId !== undefined && node.projectId === scope.projectId)\n );\n}\n\nexport function resolveEvidenceLinkedWorktreeId(\n metadata: Record<string, unknown> | undefined,\n): string | undefined {\n const worktreeId = metadata?.linkedWorktreeId;\n if (typeof worktreeId === \"string\" && worktreeId.trim().length > 0) {\n return worktreeId;\n }\n const sprintId = metadata?.[LEGACY_SPRINT_LINK_KEY];\n return typeof sprintId === \"string\" && sprintId.trim().length > 0\n ? sprintId\n : undefined;\n}\n\nasync function resolveEvidenceScopeOrNull(ctx: any, args: EvidenceScopeArgs) {\n if (!args.projectId && !args.topicId) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n projectId: args.projectId ?? undefined,\n topicId: args.topicId ?? undefined,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicEvidence] Failed to resolve evidence scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n },\n );\n return null;\n }\n}\n\nasync function getEvidenceNodesForScope(\n ctx: any,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n args?: { scanLimit?: number },\n) {\n const scanLimit =\n typeof args?.scanLimit === \"number\" ? args.scanLimit : undefined;\n const topicNodes = await (scanLimit\n ? ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: any) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"evidence\"),\n )\n .order(\"desc\")\n .take(scanLimit)\n : ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: any) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"evidence\"),\n )\n .collect());\n\n return dedupeEvidenceNodes(topicNodes).filter((node) =>\n evidenceMatchesScope(node, scope),\n );\n}\n\nfunction createEvidenceAudienceResolver(\n registryRows: Array<{\n audienceKey?: string | null;\n audienceClass: AudienceClass;\n }>,\n) {\n const audienceClassByKey = new Map<string, AudienceClass>(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ]),\n );\n\n return (\n audienceKey: string | undefined | null,\n fallback: AudienceClass,\n ): AudienceClass => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return (\n audienceClassByKey.get(key) ??\n (classFromAudienceKey(key, fallback) as AudienceClass)\n );\n };\n}\n\nexport function flattenEvidenceNode(n: EvidenceNodeDoc) {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n const linkedWorktreeId = resolveEvidenceLinkedWorktreeId(meta);\n return {\n ...n,\n text: n.canonicalText || \"\",\n title: n.title || \"\",\n kind: (meta.kind as string) || \"observation\",\n tags: (meta.tags as string[]) || [],\n sourceQuestionId: (meta.sourceQuestionId as string) || undefined,\n linkedBeliefId:\n (meta.linkedBeliefNodeId as string) ||\n (meta.linkedBeliefId as string) ||\n undefined,\n linkedWorktreeId,\n [LEGACY_SPRINT_LINK_KEY]:\n (meta[LEGACY_SPRINT_LINK_KEY] as string) || undefined,\n sprintIndex: (meta.sprintIndex as number) || undefined,\n externalSourceUrl: (meta.sourceUrl as string) || undefined,\n externalSourceType: (meta.externalSourceType as string) || undefined,\n };\n}\n\n// =============================================================================\n// CREATE\n// =============================================================================\n\n/**\n * Create new evidence in the epistemic spine.\n * Returns the epistemicNodes ID directly (not an insights ID).\n */\nexport const create = mutation({\n args: {\n ...optionalEvidenceScopeArgs,\n text: v.string(),\n title: v.optional(v.string()),\n content: v.optional(v.string()),\n contentType: v.optional(v.string()),\n kind: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n sourceType: v.optional(v.string()),\n externalSourceType: v.optional(v.string()),\n sourceUrl: v.optional(v.string()),\n sourceQuestionId: v.optional(v.string()),\n userId: v.string(),\n rationale: v.string(),\n // Classification fields (from AI tools)\n methodology: v.optional(v.string()),\n informationAsymmetry: v.optional(v.string()),\n sourceDescription: v.optional(v.string()),\n metadata: v.optional(v.any()),\n // Optional linking to beliefs\n linkedBeliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n evidenceRelation: v.optional(\n v.union(v.literal(\"supports\"), v.literal(\"contradicts\")),\n ),\n confidence: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"evidence\",\n mutationName: \"epistemicEvidence.create\",\n });\n if (scope.projectId) {\n await requireProjectAccess(ctx, scope.projectId, args.userId);\n }\n\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.text);\n const kind = normalizeKind(args.kind);\n const sourceType = normalizeSourceType(args.sourceType);\n const additionalMetadata =\n args.metadata && typeof args.metadata === \"object\"\n ? (args.metadata as Record<string, unknown>)\n : {};\n\n // Create ONLY in epistemicNodes (no insights table!)\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"evidence\",\n canonicalText: args.text,\n contentHash,\n ...(typeof args.title === \"string\" && args.title.trim().length > 0\n ? { title: args.title.trim() }\n : {}),\n ...(typeof args.content === \"string\" && args.content.length > 0\n ? { content: args.content }\n : {}),\n ...(typeof args.contentType === \"string\" &&\n args.contentType.trim().length > 0\n ? { contentType: args.contentType.trim() }\n : {}),\n status: \"active\",\n epistemicLayer: \"L2\", // L2: Compression Boundary (Evidence/Claims)\n sourceType,\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n kind,\n tags: args.tags || [],\n externalSourceType: args.externalSourceType,\n sourceUrl: args.sourceUrl,\n sourceQuestionId: args.sourceQuestionId,\n rationale: args.rationale,\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n evidenceRelation: args.evidenceRelation,\n confidence: args.confidence,\n methodology: args.methodology,\n informationAsymmetry: args.informationAsymmetry,\n sourceDescription: args.sourceDescription,\n ...additionalMetadata,\n },\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Schedule embedding generation\n await scheduleEmbeddingGeneration({\n ctx,\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId,\n createdBy: args.userId,\n nodeType: \"evidence\",\n text: args.text,\n });\n\n // If linked to a belief, create the edge in Neo4j with delay\n // to let node sync complete first (race condition prevention).\n if (args.linkedBeliefNodeId && args.evidenceRelation) {\n const beliefNode = await ctx.db.get(args.linkedBeliefNodeId);\n if (beliefNode) {\n const weight = args.evidenceRelation === \"supports\" ? 1.0 : -1.0;\n await ctx.scheduler.runAfter(5000, internal.neo4jEdgeAPI.createEdge, {\n globalId: crypto.randomUUID(),\n fromGlobalId: globalId,\n toGlobalId: beliefNode.globalId,\n edgeType: \"informs\",\n weight: weight * (args.confidence || 0.7),\n createdBy: args.userId,\n topicId: scope.projectId ? String(scope.projectId) : undefined,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n metadata: {\n relation: args.evidenceRelation,\n confidence: args.confidence,\n },\n });\n }\n }\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: scope.projectId,\n rationale: args.rationale,\n newState: {\n text: args.text.slice(0, 200),\n kind,\n sourceType,\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n evidenceRelation: args.evidenceRelation,\n },\n });\n\n // Schedule embedding generation for semantic search.\n // topicId alone is sufficient for Lucern deployments (no projects table).\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"evidence\" as const,\n text: args.text,\n },\n );\n }\n\n // ==========================================================================\n // ONTOLOGY: Schedule evidence classification for entity extraction\n // ==========================================================================\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 2000, // 2 second delay\n internal.nodeClassification.scheduleClassification,\n {\n nodeId,\n nodeType: \"evidence\",\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n },\n );\n }\n\n await markProjectGraphDirty(ctx, scope.projectId, String(scope.topicId));\n\n return { nodeId };\n },\n});\n\n/**\n * Create evidence and link to a belief in one operation\n */\nexport const createAndLink = mutation({\n args: {\n ...optionalEvidenceScopeArgs,\n text: v.string(),\n kind: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n sourceType: v.optional(v.string()),\n userId: v.string(),\n beliefNodeId: v.id(\"epistemicNodes\"),\n relation: v.union(v.literal(\"supports\"), v.literal(\"contradicts\")),\n confidence: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n await requireProjectAccess(ctx, String(scope.topicId), args.userId);\n\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.text);\n const kind = normalizeKind(args.kind);\n const sourceType = normalizeSourceType(args.sourceType);\n const confidence = args.confidence ?? 0.7;\n\n // Create evidence node\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"evidence\",\n canonicalText: args.text,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L2\",\n sourceType,\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n kind,\n tags: args.tags || [],\n linkedBeliefNodeId: args.beliefNodeId,\n evidenceRelation: args.relation,\n confidence,\n },\n });\n\n // Schedule Neo4j node sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Create edge directly in Neo4j\n const beliefNode = await ctx.db.get(args.beliefNodeId);\n if (!beliefNode) {\n throw new Error(\"Belief node not found for edge creation\");\n }\n\n const weight = args.relation === \"supports\" ? confidence : -confidence;\n const edgeGlobalId = crypto.randomUUID();\n // Delay edge creation by 5s to let node sync complete first.\n await ctx.scheduler.runAfter(5000, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: globalId,\n toGlobalId: beliefNode.globalId,\n edgeType: \"informs\",\n weight,\n createdBy: args.userId,\n topicId: scope.projectId,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n metadata: {\n relation: args.relation,\n confidence,\n },\n });\n\n await markProjectGraphDirty(ctx, scope.projectId, String(scope.topicId));\n\n return { nodeId, edgeGlobalId };\n },\n});\n\n// =============================================================================\n// UPDATE\n// =============================================================================\n\n/**\n * Update evidence status\n */\nexport const updateStatus = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"archived\"),\n v.literal(\"acted_on\"),\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"evidence\") {\n throw new Error(\"Evidence not found\");\n }\n\n const now = Date.now();\n\n await (ctx.db as any).patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n });\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: { status: node.status },\n newState: { status: args.status },\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { nodeId: args.nodeId };\n },\n});\n\n// =============================================================================\n// QUERIES\n// =============================================================================\n\n/**\n * Get evidence by ID\n */\nexport const getById = query({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n insightId: v.optional(v.string()),\n evidenceId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const id =\n args.nodeId ?? (args.insightId as any) ?? (args.evidenceId as any);\n if (!id) {\n return null;\n }\n const node = (await ctx.db.get(\n id as Id<\"epistemicNodes\">,\n )) as Doc<\"epistemicNodes\"> | null;\n if (!node || node.nodeType !== \"evidence\") {\n return null;\n }\n return node;\n },\n});\n\n/**\n * Get all evidence for a project\n */\nexport const getByProject = query({\n args: {\n ...optionalEvidenceScopeArgs,\n status: v.optional(v.string()),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId && !args.topicId) {\n return [];\n }\n\n const pageSize = clampEvidenceLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_EVIDENCE_PAGE_SIZE);\n let scope:\n | Awaited<ReturnType<typeof resolveTopicProjectScope>>\n | {\n tenantId: undefined;\n workspaceId: undefined;\n topicId?: undefined;\n projectId?: undefined;\n };\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicEvidence] Failed to resolve getByProject scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n },\n );\n return [];\n }\n\n if (args.userId) {\n const scopeId = scope.topicId ? String(scope.topicId) : scope.projectId;\n if (!scopeId) {\n return [];\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n }\n\n const topicNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: any) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"evidence\"),\n )\n .order(\"desc\")\n .take(scanLimit);\n\n const scopedNodes = dedupeEvidenceNodes(topicNodes).filter((node) =>\n evidenceMatchesScope(node, scope),\n );\n\n const filteredNodes = args.status\n ? scopedNodes.filter((node) => node.status === args.status)\n : scopedNodes;\n\n return filteredNodes.map(flattenEvidenceNode).slice(0, pageSize);\n },\n});\n\n/**\n * Get all evidence for a topic.\n */\nexport const getByTopic = query({\n args: {\n topicId: v.string(),\n status: v.optional(v.string()),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampEvidenceLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_EVIDENCE_PAGE_SIZE);\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n });\n const topicNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"evidence\"),\n )\n .order(\"desc\")\n .take(scanLimit);\n\n const scopedNodes = dedupeEvidenceNodes(topicNodes).filter((node) =>\n evidenceMatchesScope(node, scope),\n );\n\n const filteredNodes = args.status\n ? scopedNodes.filter((node) => node.status === args.status)\n : scopedNodes;\n\n return filteredNodes.map(flattenEvidenceNode).slice(0, pageSize);\n },\n});\n\n/**\n * Get evidence linked to a specific belief\n */\nexport const getForBelief = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // Find edges to the belief from evidence\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", args.beliefNodeId).eq(\"edgeType\", \"informs\"),\n )\n .collect();\n\n // Get the evidence nodes\n const evidenceNodeIds = edges.map((e) => e.fromNodeId);\n const evidenceNodes = await Promise.all(\n evidenceNodeIds.map((id) => ctx.db.get(id)),\n );\n\n // Combine with edge data\n return evidenceNodes\n .filter((e) => e !== null && e.nodeType === \"evidence\")\n .map((e, i) => ({\n ...e,\n relation: (edges[i]?.weight ?? 0) >= 0 ? \"supports\" : \"contradicts\",\n confidence: Math.abs(edges[i]?.weight ?? 0),\n edgeId: edges[i]?._id,\n }));\n },\n});\n\n// =============================================================================\n// INTERNAL QUERIES (for other Convex modules)\n// =============================================================================\n\n/**\n * Internal query to get evidence for a project\n */\nexport const internalGetByProject = internalQuery({\n args: {\n ...optionalEvidenceScopeArgs,\n status: v.optional(v.string()),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampEvidenceLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_EVIDENCE_PAGE_SIZE);\n const scope = await resolveEvidenceScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const audienceMode = args.audienceMode ?? \"internal\";\n const project = await resolveGraphPrimitivesAppResolvers(ctx).getProject(\n ctx,\n scope.topicId ? String(scope.topicId) : scope.projectId!,\n );\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: project?.tenantId,\n workspaceId: project?.workspaceId,\n });\n const resolveAudienceClass = createEvidenceAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n const nodes = await getEvidenceNodesForScope(ctx, scope, { scanLimit });\n const workspaceScopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: project?.tenantId,\n workspaceId: project?.workspaceId,\n }),\n );\n\n // Map to flattened format for internal callers\n return workspaceScopedNodes\n .filter(\n (n) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(n.audienceLabel, \"internal\"),\n ) &&\n (!args.status || n.status === args.status),\n )\n .slice(0, pageSize)\n .map((n) => {\n const metadata = (n.metadata || {}) as Record<string, unknown>;\n return {\n _id: n._id,\n _creationTime: n.createdAt,\n projectId: n.projectId,\n topicId: n.topicId,\n text: n.canonicalText,\n kind: metadata.kind || \"observation\",\n tags: metadata.tags || [],\n sourceType: n.sourceType,\n externalSourceType: metadata.externalSourceType,\n sourceUrl: metadata.sourceUrl,\n status: n.status,\n createdBy: n.createdBy,\n createdAt: n.createdAt,\n updatedAt: n.updatedAt,\n audienceLabel: n.audienceLabel,\n policyTags: n.policyTags,\n sensitivityTier: n.sensitivityTier,\n exportClass: n.exportClass,\n anonymizationClass: n.anonymizationClass,\n };\n });\n },\n});\n\n/**\n * Internal query to get evidence for a topic\n */\nexport const internalGetByTopic = internalQuery({\n args: {\n topicId: v.string(),\n status: v.optional(v.string()),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampEvidenceLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_EVIDENCE_PAGE_SIZE);\n const audienceMode = args.audienceMode ?? \"internal\";\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n });\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n });\n const resolveAudienceClass = createEvidenceAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const nodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"evidence\"),\n )\n .order(\"desc\")\n .take(scanLimit);\n const workspaceScopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n }),\n );\n\n return workspaceScopedNodes\n .filter(\n (n) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(n.audienceLabel, \"internal\"),\n ) &&\n (!args.status || n.status === args.status),\n )\n .slice(0, pageSize)\n .map((n) => {\n const metadata = (n.metadata || {}) as Record<string, unknown>;\n return {\n _id: n._id,\n _creationTime: n.createdAt,\n projectId: n.projectId,\n topicId: n.topicId,\n text: n.canonicalText,\n kind: metadata.kind || \"observation\",\n tags: metadata.tags || [],\n sourceType: n.sourceType,\n externalSourceType: metadata.externalSourceType,\n sourceUrl: metadata.sourceUrl,\n status: n.status,\n createdBy: n.createdBy,\n createdAt: n.createdAt,\n updatedAt: n.updatedAt,\n audienceLabel: n.audienceLabel,\n policyTags: n.policyTags,\n sensitivityTier: n.sensitivityTier,\n exportClass: n.exportClass,\n anonymizationClass: n.anonymizationClass,\n };\n });\n },\n});\n\n/**\n * Internal mutation to create evidence (for other Convex modules)\n */\nexport const internalCreate = internalMutation({\n args: {\n ...optionalEvidenceScopeArgs,\n text: v.string(),\n title: v.optional(v.string()),\n content: v.optional(v.string()),\n contentType: v.optional(v.string()),\n kind: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n sourceType: v.optional(v.string()),\n externalSourceType: v.optional(v.string()),\n sourceUrl: v.optional(v.string()),\n sourceQuestionId: v.optional(v.string()),\n userId: v.string(),\n rationale: v.string(),\n linkedBeliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n evidenceRelation: v.optional(v.string()),\n confidence: v.optional(v.number()),\n /** Optional extra metadata fields merged into the node's metadata object.\n * Use for domain overlays like coding intelligence (codeAnchors, failedApproach, etc.) */\n metadata: v.optional(v.any()),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\")),\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"evidence\",\n mutationName: \"epistemicEvidence.internalCreate\",\n });\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"evidence\",\n epistemicLayer: \"L2\",\n },\n mutationName: \"epistemicEvidence.internalCreate\",\n });\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.text);\n const kind = normalizeKind(args.kind);\n const sourceType = normalizeSourceType(args.sourceType);\n const additionalMetadata =\n args.metadata && typeof args.metadata === \"object\"\n ? (args.metadata as Record<string, unknown>)\n : {};\n\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"evidence\",\n canonicalText: args.text,\n contentHash,\n ...(typeof args.title === \"string\" && args.title.trim().length > 0\n ? { title: args.title.trim() }\n : {}),\n ...(typeof args.content === \"string\" && args.content.length > 0\n ? { content: args.content }\n : {}),\n ...(typeof args.contentType === \"string\" &&\n args.contentType.trim().length > 0\n ? { contentType: args.contentType.trim() }\n : {}),\n status: \"active\",\n epistemicLayer: \"L2\",\n sourceType,\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n kind,\n tags: args.tags || [],\n externalSourceType: args.externalSourceType,\n sourceUrl: args.sourceUrl,\n sourceQuestionId: args.sourceQuestionId,\n rationale: args.rationale,\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n evidenceRelation: args.evidenceRelation,\n confidence: args.confidence,\n ...additionalMetadata,\n },\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: String(nodeId),\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: scope.projectId,\n rationale: args.rationale,\n newState: {\n text: args.text.slice(0, 200),\n kind,\n sourceType,\n externalSourceType: args.externalSourceType,\n sourceUrl: args.sourceUrl,\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n evidenceRelation: args.evidenceRelation,\n confidence: args.confidence,\n },\n triggeringAction: \"epistemicEvidence.internalCreate\",\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Create edge if linked to belief (directly in Neo4j)\n if (args.linkedBeliefNodeId && args.evidenceRelation) {\n const beliefNode = await ctx.db.get(args.linkedBeliefNodeId);\n if (beliefNode) {\n const confidence = args.confidence ?? 0.7;\n const weight =\n args.evidenceRelation === \"supports\" ? confidence : -confidence;\n\n // Delay edge creation by 5s to let node sync to Neo4j complete first.\n // Without this delay, the Neo4j MATCH in createEdge may fail because\n // the evidence node hasn't been synced yet (race condition).\n await ctx.scheduler.runAfter(5000, internal.neo4jEdgeAPI.createEdge, {\n globalId: crypto.randomUUID(),\n fromGlobalId: globalId,\n toGlobalId: beliefNode.globalId,\n edgeType: \"informs\",\n weight,\n createdBy: args.userId,\n topicId: scope.projectId ? String(scope.projectId) : undefined,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n metadata: {\n relation: args.evidenceRelation,\n confidence,\n },\n });\n }\n }\n\n // Schedule embedding generation for semantic search.\n // topicId alone is sufficient for Lucern deployments (no projects table).\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"evidence\" as const,\n text: args.text,\n },\n );\n }\n\n await markProjectGraphDirty(ctx, scope.projectId, String(scope.topicId));\n\n return { nodeId };\n },\n});\n\n/**\n * Update verification status on an evidence node.\n * Used by verificationActions after deep verification completes.\n */\nexport const updateVerificationStatus = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n verificationHash: v.string(),\n verificationStatus: v.string(),\n lastVerificationId: v.optional(v.id(\"verificationResults\")),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"evidence\") {\n throw new Error(\"Evidence node not found\");\n }\n const metadata = (node.metadata || {}) as Record<string, unknown>;\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n verificationHash: args.verificationHash,\n verificationStatus: args.verificationStatus,\n lastVerificationId: args.lastVerificationId,\n },\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { success: true };\n },\n});\n\n/**\n * Helper to format evidence node as legacy insight\n */\nfunction formatEvidenceNode(n: {\n _id: Id<\"epistemicNodes\">;\n projectId: string;\n topicId?: string;\n canonicalText: string;\n sourceType: string;\n status: string;\n metadata?: unknown;\n createdBy: string;\n createdAt: number;\n updatedAt: number;\n}) {\n const metadata = (n.metadata || {}) as Record<string, unknown>;\n const linkedWorktreeId = resolveEvidenceLinkedWorktreeId(metadata);\n return {\n _id: n._id,\n _epistemicNodeId: n._id,\n _creationTime: n.createdAt,\n projectId: n.projectId,\n topicId: n.topicId,\n text: n.canonicalText,\n kind: metadata.kind || \"observation\",\n tags: (metadata.tags as string[]) || [],\n sourceType: n.sourceType,\n externalSourceType: metadata.externalSourceType,\n externalSourceUrl: metadata.sourceUrl,\n sourceArtifactId: metadata.sourceArtifactId,\n sourceQuestionId: metadata.sourceQuestionId,\n linkedWorktreeId,\n [LEGACY_SPRINT_LINK_KEY]:\n (metadata[LEGACY_SPRINT_LINK_KEY] as string) || undefined,\n sourceAnchor: metadata.sourceAnchor,\n aiProvider: metadata.aiProvider,\n verificationStatus: metadata.verificationStatus,\n status: n.status,\n createdBy: n.createdBy,\n createdAt: n.createdAt,\n updatedAt: n.updatedAt,\n };\n}\n\n/**\n * Get evidence for project - SYSTEM query (no access check)\n */\nexport const getByProjectSystem = query({\n args: {\n ...optionalEvidenceScopeArgs,\n kind: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampEvidenceLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_EVIDENCE_PAGE_SIZE);\n const scope = await resolveEvidenceScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getEvidenceNodesForScope(ctx, scope, { scanLimit });\n\n const filtered = args.kind\n ? nodes.filter((n) => {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n return meta.kind === args.kind;\n })\n : nodes;\n\n filtered.sort((a, b) => b.createdAt - a.createdAt);\n return filtered.slice(0, pageSize).map((n) => formatEvidenceNode(n as any));\n },\n});\n\n// =============================================================================\n// ANALYTICS QUERIES\n// =============================================================================\n\n/**\n * Get evidence balance for a project (supporting vs challenging evidence).\n * Used by the EvidenceBalance visualization component.\n *\n * Calculates by examining edges from evidence nodes to belief nodes,\n * where positive weight = supporting and negative weight = challenging.\n */\nexport const getEvidenceBalance = query({\n args: {\n ...optionalEvidenceScopeArgs,\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n const hasAccess = await checkScopeAccess(\n ctx,\n scope.topicId ? String(scope.topicId) : scope.projectId!,\n args.userId,\n );\n if (!hasAccess) {\n return { supporting: 0, challenging: 0, total: 0 };\n }\n\n const resolvedTopicId = scope.topicId || scope.projectId;\n const edges = resolvedTopicId\n ? await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_topic\", (q) => q.eq(\"topicId\", resolvedTopicId))\n .collect()\n : [];\n\n // Filter to informs edges from evidence to beliefs\n const evidenceEdges = edges.filter(\n (e) =>\n e.edgeType === \"informs\" && e.fromLayer === \"L2\" && e.toLayer === \"L3\",\n );\n\n let supporting = 0;\n let challenging = 0;\n\n for (const edge of evidenceEdges) {\n const weight = edge.weight ?? 0;\n if (weight > 0) {\n supporting++;\n } else if (weight < 0) {\n challenging++;\n }\n }\n\n return { supporting, challenging, total: evidenceEdges.length };\n },\n});\n\n// =============================================================================\n// PORTED FROM DEPRECATED insights.ts — update, flagAsIncorrect, remove\n// These functions operate ONLY on epistemicNodes (no legacy insights table).\n// =============================================================================\n\n/**\n * Update an evidence node's text, kind, tags, or verification fields.\n * Accepts either a native epistemicNodes ID via `nodeId` or a string `insightId`\n * for backward compatibility (callers still pass Id<\"epistemicNodes\"> shaped strings).\n *\n * Ported from insights.ts → update mutation.\n */\nexport const update = mutation({\n args: {\n // Accept both native and legacy-shaped IDs\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n insightId: v.optional(v.string()),\n text: v.optional(v.string()),\n kind: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n userId: v.string(),\n externalSourceUrl: v.optional(v.string()),\n verificationStatus: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // Resolve the node ID — prefer nodeId, fall back to insightId cast\n const resolvedId =\n args.nodeId ?? (args.insightId as Id<\"epistemicNodes\"> | undefined);\n if (!resolvedId) {\n throw new Error(\"Either nodeId or insightId is required\");\n }\n\n const node = await ctx.db.get(resolvedId as Id<\"epistemicNodes\">);\n if (!node || node.nodeType !== \"evidence\") {\n throw new Error(\"Evidence node not found\");\n }\n\n // Verify project access\n if (!node.projectId) {\n throw new Error(\"Evidence has no project scope\");\n }\n await checkProjectAccess(ctx, node.projectId, args.userId);\n\n const now = Date.now();\n const existingMeta = (node.metadata || {}) as Record<string, unknown>;\n const metaUpdates: Record<string, unknown> = { ...existingMeta };\n\n if (args.kind !== undefined) {\n metaUpdates.kind = args.kind;\n }\n if (args.tags !== undefined) {\n metaUpdates.tags = args.tags;\n }\n if (args.externalSourceUrl !== undefined) {\n metaUpdates.externalSourceUrl = args.externalSourceUrl;\n }\n\n await ctx.db.patch(resolvedId as Id<\"epistemicNodes\">, {\n canonicalText: args.text ?? node.canonicalText,\n metadata: metaUpdates,\n updatedAt: now,\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: resolvedId as Id<\"epistemicNodes\">,\n operation: \"upsert\",\n });\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: resolvedId as Id<\"epistemicNodes\">,\n changeType: \"updated\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: { text: node.canonicalText?.slice(0, 200) },\n newState: { text: (args.text ?? node.canonicalText)?.slice(0, 200) },\n });\n\n // Regenerate embedding if text changed\n if (args.text !== undefined) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId: resolvedId as Id<\"epistemicNodes\">,\n topicId: node.projectId,\n createdBy: node.createdBy,\n nodeType: \"evidence\" as const,\n text: args.text,\n },\n );\n }\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { nodeId: resolvedId };\n },\n});\n\n/**\n * Flag an evidence node as incorrect (human contradiction).\n * Sets verificationStatus to \"contradicted\" and records the reason in metadata.\n *\n * Ported from insights.ts → flagAsIncorrect mutation.\n */\nexport const flagAsIncorrect = mutation({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n reason: v.string(),\n suggestedCorrection: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n\n const node = await ctx.db.get(args.insightId);\n if (!node || node.nodeType !== \"evidence\") {\n throw new Error(\"Evidence not found in epistemic spine\");\n }\n\n // Verify project access\n if (!node.projectId) {\n throw new Error(\"Evidence has no project scope\");\n }\n await checkProjectAccess(ctx, node.projectId, args.userId);\n\n // Update the node with contradiction metadata\n const existingMeta = (node.metadata || {}) as Record<string, unknown>;\n await ctx.db.patch(node._id, {\n verificationStatus: \"contradicted\" as any,\n metadata: {\n ...existingMeta,\n contradictionReason: args.reason,\n suggestedCorrection: args.suggestedCorrection,\n contradictedBy: args.userId,\n contradictedAt: now,\n },\n updatedAt: now,\n });\n\n // Create a verification result record for analytics\n await ctx.db.insert(\"verificationResults\", {\n targetType: \"insight\",\n targetId: node._id,\n claimText: node.canonicalText || \"Evidence text not available\",\n verdict: \"contradicted\",\n confidence: 1.0,\n sources: [],\n reasoning: args.reason,\n suggestedRevision: args.suggestedCorrection,\n caveats: [],\n mode: \"deep_verify\",\n verifiedAt: now,\n durationMs: 0,\n projectId: node.projectId,\n userId: args.userId,\n });\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: node._id,\n changeType: \"updated\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n newState: {\n reason: args.reason,\n suggestedCorrection: args.suggestedCorrection,\n },\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n console.log(\n `[EpistemicEvidence] Evidence flagged as incorrect by ${args.userId}: \"${args.insightId.slice(0, 20)}...\"`,\n );\n\n return { success: true };\n },\n});\n\n/**\n * Archive (soft-delete) an evidence node.\n * Sets status to \"archived\" — never actually deletes from epistemicNodes.\n *\n * Ported from insights.ts → remove mutation.\n */\nexport const remove = mutation({\n args: {\n // Accept both native and legacy-shaped IDs\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n insightId: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const resolvedId =\n args.nodeId ?? (args.insightId as Id<\"epistemicNodes\"> | undefined);\n if (!resolvedId) {\n throw new Error(\"Either nodeId or insightId is required\");\n }\n\n const node = await ctx.db.get(resolvedId as Id<\"epistemicNodes\">);\n if (!node || node.nodeType !== \"evidence\") {\n throw new Error(\"Evidence node not found\");\n }\n\n // Only creator can archive\n if (node.createdBy !== args.userId) {\n throw new Error(\"Only the creator can archive this evidence\");\n }\n\n const now = Date.now();\n\n // Soft-delete: set status to archived (never actually delete)\n await ctx.db.patch(resolvedId as Id<\"epistemicNodes\">, {\n status: \"archived\",\n updatedAt: now,\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: resolvedId as Id<\"epistemicNodes\">,\n operation: \"upsert\",\n });\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: resolvedId as Id<\"epistemicNodes\">,\n changeType: \"archived\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: { status: node.status },\n newState: { status: \"archived\" },\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { nodeId: resolvedId };\n },\n});\n"]}
|