@lucern/graph-primitives 1.0.31 → 1.0.33
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/beliefEvidenceLinks.js.map +1 -1
- package/dist/beliefEvidenceLinks.operational.js.map +1 -1
- package/dist/contradictions.js +5 -5
- package/dist/contradictions.js.map +1 -1
- package/dist/entityBridge.js +2 -1
- package/dist/entityBridge.js.map +1 -1
- package/dist/entityLifecycle.js.map +1 -1
- package/dist/epistemicAnswers.js +1 -1
- package/dist/epistemicAnswers.js.map +1 -1
- package/dist/epistemicBeliefs.admin.js +2 -2
- package/dist/epistemicBeliefs.admin.js.map +1 -1
- package/dist/epistemicBeliefs.backfills.js +9 -5
- package/dist/epistemicBeliefs.backfills.js.map +1 -1
- package/dist/epistemicBeliefs.confidence.js +3 -5
- package/dist/epistemicBeliefs.confidence.js.map +1 -1
- package/dist/epistemicBeliefs.core.js +20 -30
- package/dist/epistemicBeliefs.core.js.map +1 -1
- package/dist/epistemicBeliefs.forkEvidence.js.map +1 -1
- package/dist/epistemicBeliefs.helpers.js +1 -1
- package/dist/epistemicBeliefs.helpers.js.map +1 -1
- package/dist/epistemicBeliefs.internal.js +15 -25
- package/dist/epistemicBeliefs.internal.js.map +1 -1
- package/dist/epistemicBeliefs.js +33 -43
- package/dist/epistemicBeliefs.js.map +1 -1
- package/dist/epistemicBeliefs.lifecycle.js +3 -5
- package/dist/epistemicBeliefs.lifecycle.js.map +1 -1
- package/dist/epistemicBeliefs.links.js +1 -1
- package/dist/epistemicBeliefs.links.js.map +1 -1
- package/dist/epistemicBeliefs.queries.js.map +1 -1
- package/dist/epistemicBeliefs.topicAnchor.js +12 -22
- package/dist/epistemicBeliefs.topicAnchor.js.map +1 -1
- package/dist/epistemicContracts.evaluators.js +3 -5
- package/dist/epistemicContracts.evaluators.js.map +1 -1
- package/dist/epistemicContracts.handlers.js +3 -6
- package/dist/epistemicContracts.handlers.js.map +1 -1
- package/dist/epistemicContracts.js +3 -6
- package/dist/epistemicContracts.js.map +1 -1
- package/dist/epistemicEdgeCreation.js.map +1 -1
- package/dist/epistemicEdges.handlers.js.map +1 -1
- package/dist/epistemicEdges.js +6 -7
- package/dist/epistemicEdges.js.map +1 -1
- package/dist/epistemicEdges.mutations.js +3 -4
- package/dist/epistemicEdges.mutations.js.map +1 -1
- package/dist/epistemicEdges.queries.js +3 -3
- package/dist/epistemicEdges.queries.js.map +1 -1
- package/dist/epistemicEvidence.js +10 -10
- package/dist/epistemicEvidence.js.map +1 -1
- package/dist/epistemicEvidenceHelpers.js +1 -1
- package/dist/epistemicEvidenceHelpers.js.map +1 -1
- package/dist/epistemicEvidenceMutations.js +5 -5
- package/dist/epistemicEvidenceMutations.js.map +1 -1
- package/dist/epistemicEvidenceQueries.js +6 -6
- package/dist/epistemicEvidenceQueries.js.map +1 -1
- package/dist/epistemicHelpers.js +4 -4
- package/dist/epistemicHelpers.js.map +1 -1
- package/dist/epistemicInsert.js.map +1 -1
- package/dist/epistemicLayerRules.js +2 -2
- package/dist/epistemicLayerRules.js.map +1 -1
- package/dist/epistemicLinking.js.map +1 -1
- package/dist/epistemicNodeCreation.js +2 -2
- package/dist/epistemicNodeCreation.js.map +1 -1
- package/dist/epistemicNodes.internal.js +2 -3
- package/dist/epistemicNodes.internal.js.map +1 -1
- package/dist/epistemicNodes.js +10 -12
- package/dist/epistemicNodes.js.map +1 -1
- package/dist/epistemicNodes.mutations.js +3 -4
- package/dist/epistemicNodes.mutations.js.map +1 -1
- package/dist/epistemicNodes.queries.js +5 -5
- package/dist/epistemicNodes.queries.js.map +1 -1
- package/dist/epistemicQuestions.conviction.js +5 -5
- package/dist/epistemicQuestions.conviction.js.map +1 -1
- package/dist/epistemicQuestions.create.js +7 -7
- package/dist/epistemicQuestions.create.js.map +1 -1
- package/dist/epistemicQuestions.evidence.js +2 -2
- package/dist/epistemicQuestions.evidence.js.map +1 -1
- package/dist/epistemicQuestions.helpers.js +7 -4
- package/dist/epistemicQuestions.helpers.js.map +1 -1
- package/dist/epistemicQuestions.js +16 -13
- package/dist/epistemicQuestions.js.map +1 -1
- package/dist/epistemicQuestions.lifecycle.js.map +1 -1
- package/dist/epistemicQuestions.queries.js +2 -2
- package/dist/epistemicQuestions.queries.js.map +1 -1
- package/dist/epistemicQuestions.sprint.js +6 -3
- package/dist/epistemicQuestions.sprint.js.map +1 -1
- package/dist/epistemicQuestions.tail.js +2 -2
- package/dist/epistemicQuestions.tail.js.map +1 -1
- package/dist/epistemicSources.js.map +1 -1
- package/dist/index.js +88 -98
- package/dist/index.js.map +1 -1
- package/dist/proof-attestation.json +1 -1
- package/dist/questionEvidenceLinks.js +3 -2
- package/dist/questionEvidenceLinks.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/convex.ts","../src/debug.ts","../src/matcherFeedbackUtils.ts","../src/topicProjectOverlay.ts","../src/resolvers.ts","../src/topicScope.ts","../src/questionEvidenceLinks.ts"],"names":["isMissingLucernChildComponentError","getErrorMessage","LEGACY_SCOPE_FIELD","query","v","readStringArray","readMetadata"],"mappings":"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","file":"questionEvidenceLinks.js","sourcesContent":["import type { Doc as AccessControlDoc } from \"@lucern/access-control/convex\";\nimport {\n type UnsafeConvexAnyApi,\n unsafeConvexAnyApi,\n} from \"@lucern/contracts/convex/unsafeAnyApi\";\nimport {\n actionGeneric,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\n// TODO(FR.11-structural): `api`/`internal`/`components` are `anyApi as any`\n// because this module source tree is bundled into the kernel host at deploy time\n// and has NO top-level Convex `_generated/` directory to import a typed surface\n// from. Every `api.*` / `internal.*` / string-literal cross-component ref in this\n// module (topicScope.ts, topicProjectOverlay.ts, questionEvidenceLinks.ts,\n// beliefEvidenceLinks*.ts, epistemicQuestions.helpers.ts) inherits `any` from\n// here. The fix is structural — generate a per-module typed surface or a shared\n// typed function-reference manifest (template: the typed `components.controlPlane`\n// in modules/control-plane/src/component/convex.ts and the\n// `KERNEL_API_REF_MANIFEST` pattern in packages/server-core/src/kernelApi.ts) —\n// owned by the FR.11 closing/synthesis pass, not a mechanical swap.\nconst unsafeApi = unsafeConvexAnyApi(\n \"graph-primitives top-level module bundle lacks a committed Convex _generated/api surface\"\n);\nexport const api = unsafeApi;\nexport const components =\n componentsGeneric() as unknown as UntypedFunctionReferenceSurface;\nexport const internal = unsafeApi;\n\ntype UntypedFunctionReferenceSurface = UnsafeConvexAnyApi;\ntype BoundaryValue = UntypedFunctionReferenceSurface[string];\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> =\n AccessControlDoc<TableName>;\nexport type DataModel = Record<TableNames, unknown>;\ninterface IndexRangeBuilder {\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n field(fieldName: string): string;\n gt(fieldName: string, value: unknown): IndexRangeBuilder;\n gte(fieldName: string, value: unknown): IndexRangeBuilder;\n lt(fieldName: string, value: unknown): IndexRangeBuilder;\n lte(fieldName: string, value: unknown): IndexRangeBuilder;\n}\ninterface FilterBuilder {\n and(...clauses: unknown[]): FilterBuilder;\n eq(left: unknown, right: unknown): FilterBuilder;\n field(fieldName: string): string;\n gt(left: unknown, right: unknown): FilterBuilder;\n gte(left: unknown, right: unknown): FilterBuilder;\n lt(left: unknown, right: unknown): FilterBuilder;\n lte(left: unknown, right: unknown): FilterBuilder;\n neq(left: unknown, right: unknown): FilterBuilder;\n or(...clauses: unknown[]): FilterBuilder;\n [operator: string]: unknown;\n}\ninterface QueryInitializer<TableName extends TableNames> {\n collect(): Promise<Doc<TableName>[]>;\n filter(predicate: (q: FilterBuilder) => unknown): QueryInitializer<TableName>;\n first(): Promise<Doc<TableName> | null>;\n order(direction: \"asc\" | \"desc\"): QueryInitializer<TableName>;\n take(limit: number): Promise<Doc<TableName>[]>;\n unique(): Promise<Doc<TableName> | null>;\n withIndex(\n indexName: string,\n range?: (q: IndexRangeBuilder) => unknown\n ): QueryInitializer<TableName>;\n withSearchIndex(\n indexName: string,\n search?: (q: IndexRangeBuilder) => unknown\n ): QueryInitializer<TableName>;\n}\nexport interface DatabaseReader {\n get<TableName extends TableNames>(\n id: unknown\n ): Promise<Doc<TableName> | null>;\n normalizeId?<TableName extends TableNames>(\n tableName: TableName,\n id: string\n ): Id<TableName> | null;\n query<TableName extends TableNames>(\n tableName: TableName\n ): QueryInitializer<TableName>;\n}\nexport type DatabaseWriter = DatabaseReader & {\n insert<TableName extends TableNames>(\n tableName: TableName,\n value: Record<string, unknown>\n ): Promise<Id<TableName>>;\n patch<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n replace<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n delete<TableName extends TableNames>(id: Id<TableName>): Promise<void>;\n};\ninterface Scheduler {\n runAfter(\n delayMs: number,\n functionReference: unknown,\n args?: unknown\n ): Promise<void>;\n}\ninterface AuthReader {\n getUserIdentity(): Promise<{\n readonly subject: string;\n readonly [claimName: string]: unknown;\n } | null>;\n}\ninterface RuntimeInvoker {\n runAction<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n runMutation<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n runQuery<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n}\nexport type QueryCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseReader;\n scheduler: Scheduler;\n};\nexport type MutationCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseWriter;\n scheduler: Scheduler;\n};\nexport type ActionCtx = RuntimeInvoker & {\n auth: AuthReader;\n scheduler: Scheduler;\n};\n\ntype ConvexFunctionBuilder<Ctx> = <\n Args = BoundaryValue,\n Result = BoundaryValue,\n>(definition: {\n args?: unknown;\n handler: (ctx: Ctx, args: Args) => Result;\n returns?: unknown;\n}) => unknown;\n\ntype OptionalHandlerConvexFunctionBuilder<Ctx> = <\n Args = BoundaryValue,\n Result = BoundaryValue,\n>(definition: {\n args?: unknown;\n handler?: (ctx: Ctx, args: Args) => Result;\n returns?: unknown;\n}) => unknown;\n\nexport const action =\n actionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const httpAction =\n httpActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalAction =\n internalActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalMutation =\n internalMutationGeneric as unknown as OptionalHandlerConvexFunctionBuilder<MutationCtx>;\nexport const internalQuery =\n internalQueryGeneric as unknown as OptionalHandlerConvexFunctionBuilder<QueryCtx>;\nexport const mutation =\n mutationGeneric as unknown as ConvexFunctionBuilder<MutationCtx>;\nexport const query = queryGeneric as unknown as ConvexFunctionBuilder<QueryCtx>;\n","interface GraphPrimitiveDebugEnvironment {\n process?: {\n env?: Record<string, string | undefined>;\n };\n}\n\nfunction isGraphPrimitiveDebugEnabled(): boolean {\n const env = (globalThis as GraphPrimitiveDebugEnvironment).process?.env;\n return (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG === \"1\" || env?.LUCERN_GRAPH_DEBUG === \"1\"\n );\n}\n\nexport function formatGraphPrimitiveError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error === null) {\n return \"null\";\n }\n if (error === undefined) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(error);\n } catch {\n return Object.prototype.toString.call(error);\n }\n}\n\nexport function debugGraphPrimitiveFallback(\n message: string,\n context?: Record<string, unknown>\n): void {\n if (!isGraphPrimitiveDebugEnabled()) {\n return;\n }\n console.debug(message, context ?? {});\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Matcher feedback helper types shared by graph-primitive review flows. */\nexport type LinkSuggestionStatus = \"suggested\" | \"approved\" | \"dismissed\";\n\nexport type MatcherReviewStatus =\n | \"pending\"\n | \"accepted\"\n | \"rejected\"\n | \"auto_accepted\"\n | \"superseded\";\n\ninterface MatcherFeedbackSummaryRow {\n matcherKey?: string | null;\n reviewStatus: MatcherReviewStatus;\n rewardScore?: number | null;\n surface?: string | null;\n}\n\nexport function isOperationalLinkStatus(\n status?: LinkSuggestionStatus | null\n): boolean {\n return status !== \"suggested\" && status !== \"dismissed\";\n}\n\nexport function mergeLinkSuggestionStatus(\n existing?: LinkSuggestionStatus | null,\n requested?: LinkSuggestionStatus | null\n): LinkSuggestionStatus | undefined {\n if (requested === undefined || requested === null) {\n return existing ?? undefined;\n }\n\n if (\n existing &&\n isOperationalLinkStatus(existing) &&\n !isOperationalLinkStatus(requested)\n ) {\n return existing;\n }\n\n return requested;\n}\n\nexport function resolveReviewedLinkStatus(\n requested: \"approved\" | \"dismissed\"\n): LinkSuggestionStatus {\n return requested;\n}\n\nexport function deriveMatcherReviewStatus(input: {\n explicitReviewStatus?: MatcherReviewStatus | null;\n linkStatus?: LinkSuggestionStatus | null;\n autoAccepted?: boolean;\n}): MatcherReviewStatus {\n if (input.explicitReviewStatus) {\n return input.explicitReviewStatus;\n }\n\n if (input.autoAccepted) {\n return \"auto_accepted\";\n }\n\n if (input.linkStatus === \"suggested\") {\n return \"pending\";\n }\n\n if (input.linkStatus === \"dismissed\") {\n return \"rejected\";\n }\n\n return \"accepted\";\n}\n\nexport function deriveMatcherRewardScore(\n reviewStatus: MatcherReviewStatus\n): number {\n switch (reviewStatus) {\n case \"accepted\":\n case \"auto_accepted\":\n return 1;\n case \"rejected\":\n return -1;\n default:\n return 0;\n }\n}\n\nexport function summarizeMatcherFeedback(rows: MatcherFeedbackSummaryRow[]) {\n const totals = {\n total: rows.length,\n pending: 0,\n accepted: 0,\n autoAccepted: 0,\n rejected: 0,\n superseded: 0,\n };\n\n const surfaces = new Set<string>();\n const matcherKeys = new Set<string>();\n let rewardSum = 0;\n\n for (const row of rows) {\n if (row.surface) {\n surfaces.add(row.surface);\n }\n if (row.matcherKey) {\n matcherKeys.add(row.matcherKey);\n }\n\n switch (row.reviewStatus) {\n case \"pending\":\n totals.pending += 1;\n break;\n case \"accepted\":\n totals.accepted += 1;\n break;\n case \"auto_accepted\":\n totals.autoAccepted += 1;\n break;\n case \"rejected\":\n totals.rejected += 1;\n break;\n case \"superseded\":\n totals.superseded += 1;\n break;\n default:\n break;\n }\n\n rewardSum += row.rewardScore ?? deriveMatcherRewardScore(row.reviewStatus);\n }\n\n const decided = totals.accepted + totals.autoAccepted + totals.rejected;\n const positive = totals.accepted + totals.autoAccepted;\n\n return {\n ...totals,\n decided,\n acceptanceRate: decided > 0 ? positive / decided : 0,\n averageReward: rows.length > 0 ? rewardSum / rows.length : 0,\n uniqueSurfaces: surfaces.size,\n uniqueMatchers: matcherKeys.size,\n };\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport type {\n DatabaseReader,\n DatabaseWriter,\n Id,\n MutationCtx,\n QueryCtx,\n} from \"./convex\";\nimport { api } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\ntype OverlayIdMode = \"legacy\" | \"topic\";\nconst LEGACY_SCOPE_FIELD = \"graphScopeProjectId\";\n\ninterface LegacyProjectThesis {\n confidence: number;\n lastUpdated: number;\n statement: string;\n}\n\ntype LegacyPillarImportance = \"critical\" | \"major\" | \"minor\" | \"not_applicable\";\n\ninterface LegacyThesisPillarConfig {\n aiSuggestion?: {\n suggestedAt: number;\n reasoning: string;\n };\n configuredAt?: number;\n configuredBy?: string;\n pillarImportance?: Record<string, LegacyPillarImportance | undefined>;\n}\n\ninterface LegacyBeliefArchitecture {\n lastCalculated: number;\n overallMaturity: number;\n pillarScores: Record<string, unknown>[];\n}\n\ninterface LegacyOntologyClassification {\n classifiedAt: number;\n functions: Record<string, unknown>[];\n overallConfidence: number;\n valueChains: Record<string, unknown>[];\n}\n\ntype TopicDocLike = Record<string, unknown> & {\n _id: string;\n _creationTime?: number;\n globalId?: string;\n name?: string;\n description?: string;\n type?: string;\n tenantId?: string;\n workspaceId?: string;\n status?: string;\n visibility?: string;\n createdBy?: string;\n /** FR.7 creator-grant: the exact acting principal recorded as owner-principal. */\n ownerPrincipalId?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectOverlay = Record<string, unknown> & {\n _id: string;\n projectId: string;\n topicId: string;\n storageProjectId: string;\n legacyProjectId?: string;\n name: string;\n type: string;\n description?: string;\n ownerId: string;\n /** FR.7 creator-grant: principal-shaped owner; distinct from clerkId-shaped ownerId. */\n ownerPrincipalId?: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n tags: string[];\n chatCount: number;\n artifactCount: number;\n lastActivityAt: number;\n thesis?: LegacyProjectThesis;\n wedgeHypothesis?: string;\n founderArchetype?: string;\n investmentCriteria?: string[];\n sprintPhase?:\n | \"pre_sprint\"\n | \"readiness_check\"\n | \"thesis_crystallization\"\n | \"sprint_planning\"\n | \"active_sprint\"\n | \"theme_assembly\"\n | \"evolution\";\n currentSprintIndex?: number;\n thesisPillarConfig?: LegacyThesisPillarConfig;\n beliefArchitecture?: LegacyBeliefArchitecture;\n ontologyClassification?: LegacyOntologyClassification;\n _creationTime: number;\n createdAt: number;\n updatedAt: number;\n};\n\ninterface OverlayContext {\n db?: Pick<DatabaseReader, \"get\" | \"query\"> &\n Partial<Pick<DatabaseWriter, \"patch\">>;\n runMutation?: MutationCtx[\"runMutation\"];\n runQuery?: QueryCtx[\"runQuery\"];\n}\n\ninterface TopicPatchPlan {\n nextMetadata: Record<string, unknown>;\n patch: Record<string, unknown>;\n topicUpdateArgs: Record<string, unknown> & { id: string };\n}\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readNonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction readMetadata(topic: TopicDocLike): Record<string, unknown> {\n return topic.metadata && typeof topic.metadata === \"object\"\n ? topic.metadata\n : {};\n}\n\nfunction omitMetadataKey(\n metadata: Record<string, unknown>,\n key: string\n): Record<string, unknown> {\n const { [key]: _omitted, ...rest } = metadata;\n return rest;\n}\n\nfunction readLegacyProjectId(\n value: Record<string, unknown> | null | undefined\n): string | undefined {\n if (!value) {\n return;\n }\n return readNonEmptyString(value[LEGACY_SCOPE_FIELD]);\n}\n\nfunction coerceVisibility(\n value: unknown\n): TopicProjectOverlay[\"visibility\"] | undefined {\n return value === \"private\" ||\n value === \"team\" ||\n value === \"firm\" ||\n value === \"external\" ||\n value === \"public\"\n ? value\n : undefined;\n}\n\nfunction coerceStatus(\n value: unknown\n): TopicProjectOverlay[\"status\"] | undefined {\n return value === \"active\" || value === \"archived\" || value === \"watching\"\n ? value\n : undefined;\n}\n\nfunction mapProjectType(\n topic: TopicDocLike,\n metadata: Record<string, unknown>\n): string {\n const explicit = readNonEmptyString(metadata.projectType);\n if (explicit) {\n return explicit;\n }\n if (topic.type === \"theme\") {\n return \"thematic\";\n }\n return readNonEmptyString(topic.type) || \"general\";\n}\n\nfunction isProjectLikeTopic(topic: TopicDocLike): boolean {\n const metadata = readMetadata(topic);\n return (\n topic.type === \"theme\" ||\n topic.type === \"thematic\" ||\n topic.type === \"deal\" ||\n topic.type === \"monitoring\" ||\n readLegacyProjectId(topic) !== undefined ||\n readNonEmptyString(metadata.projectType) !== undefined\n );\n}\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = getErrorMessage(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found'\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n return (error as { message: string }).message;\n }\n return \"unknown error\";\n}\n\nasync function resolveTopicDoc(\n ctx: OverlayContext,\n scopeId: string\n): Promise<TopicDocLike | null> {\n if (ctx?.db && typeof ctx.db.get === \"function\") {\n try {\n const directTopic = (await ctx.db.get(\n scopeId as Id<\"topics\">\n )) as TopicDocLike | null;\n if (directTopic) {\n return directTopic;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by direct ID\",\n {\n error,\n scopeId,\n }\n );\n // Not a direct topics-table id.\n }\n }\n\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n\n try {\n const topic = await ctx.runQuery<TopicDocLike | null>(api.topics.get, {\n id: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by ID query\",\n {\n error,\n scopeId,\n }\n );\n // Fall through to legacy-scope lookup.\n }\n\n try {\n const topic = await ctx.runQuery<TopicDocLike | null>(\n api.topics.getByLegacyScopeId,\n {\n projectId: String(scopeId),\n }\n );\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by legacy scope ID\",\n { error, scopeId }\n );\n // Best-effort compat lookup only.\n }\n\n return null;\n}\n\nexport function materializeTopicProjectOverlay(\n topic: TopicDocLike,\n idMode: OverlayIdMode = \"legacy\"\n): TopicProjectOverlay {\n const metadata = readMetadata(topic);\n const topicId = String(topic._id);\n const legacyProjectId =\n readLegacyProjectId(topic) ||\n readLegacyProjectId(metadata) ||\n readNonEmptyString(metadata.legacyProjectId);\n const storageProjectId = legacyProjectId || topicId;\n const outwardId = idMode === \"topic\" ? topicId : storageProjectId;\n const visibility =\n coerceVisibility(topic.visibility) ||\n coerceVisibility(metadata.visibility) ||\n \"private\";\n const status =\n coerceStatus(topic.status) || coerceStatus(metadata.status) || \"active\";\n let createdAt = 0;\n if (typeof topic.createdAt === \"number\") {\n createdAt = topic.createdAt;\n } else if (typeof topic._creationTime === \"number\") {\n createdAt = topic._creationTime;\n }\n let updatedAt = createdAt;\n if (typeof topic.updatedAt === \"number\") {\n updatedAt = topic.updatedAt;\n } else if (typeof metadata.updatedAt === \"number\") {\n updatedAt = metadata.updatedAt;\n }\n\n return {\n ...metadata,\n _id: outwardId,\n projectId: outwardId,\n topicId,\n storageProjectId,\n legacyProjectId,\n name: readNonEmptyString(topic.name) || \"Untitled Theme\",\n type: mapProjectType(topic, metadata),\n description: readNonEmptyString(topic.description),\n ownerId:\n readNonEmptyString(metadata.ownerId) ||\n readNonEmptyString(topic.createdBy) ||\n \"system\",\n // FR.7 creator-grant: surface the principal-shaped owner field (column-first,\n // metadata fallback for legacy rows that recorded it in metadata).\n ownerPrincipalId:\n readNonEmptyString(topic.ownerPrincipalId) ||\n readNonEmptyString(metadata.ownerPrincipalId),\n // RR.1 carrier: preserve the nested metadata carrier so the kernel's\n // `checkProjectAccessDetailed` metadata-PRIMARY read\n // (`project.metadata?.ownerPrincipalId`) resolves the grant. The `...metadata`\n // spread above only flattens keys; it does not leave a nested `metadata`.\n metadata,\n sharedWith: readStringArray(metadata.sharedWith),\n visibility,\n tenantId:\n readNonEmptyString(topic.tenantId) ||\n readNonEmptyString(metadata.tenantId),\n workspaceId:\n readNonEmptyString(topic.workspaceId) ||\n readNonEmptyString(metadata.workspaceId),\n status,\n tags: readStringArray(metadata.tags),\n chatCount:\n typeof metadata.chatCount === \"number\"\n ? (metadata.chatCount as number)\n : 0,\n artifactCount:\n typeof metadata.artifactCount === \"number\"\n ? (metadata.artifactCount as number)\n : 0,\n lastActivityAt:\n typeof metadata.lastActivityAt === \"number\"\n ? (metadata.lastActivityAt as number)\n : updatedAt,\n _creationTime:\n typeof topic._creationTime === \"number\" ? topic._creationTime : createdAt,\n createdAt,\n updatedAt,\n };\n}\n\nexport async function resolveTopicProjectOverlay(\n ctx: OverlayContext,\n scopeId: string,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n if (options.projectLikeOnly !== false && !isProjectLikeTopic(topic)) {\n return null;\n }\n return materializeTopicProjectOverlay(topic, options.idMode);\n}\n\nexport async function listTopicProjectOverlays(\n ctx: OverlayContext,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay[]> {\n let allTopics: TopicDocLike[] = [];\n\n if (ctx?.db?.query && typeof ctx.db.query === \"function\") {\n try {\n allTopics = (await ctx.db.query(\"topics\").collect()) as TopicDocLike[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to read topics table; falling back to API\",\n { error }\n );\n allTopics = [];\n }\n }\n\n if (allTopics.length === 0 && typeof ctx.runQuery === \"function\") {\n allTopics =\n (((await ctx.runQuery(api.topics.list, {})) ?? []) as TopicDocLike[]) ||\n [];\n }\n\n return allTopics\n .filter(\n (topic) => options.projectLikeOnly === false || isProjectLikeTopic(topic)\n )\n .map((topic) => materializeTopicProjectOverlay(topic, options.idMode));\n}\n\nexport async function patchTopicProjectOverlay(\n ctx: OverlayContext,\n scopeId: string,\n value: Record<string, unknown>\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n\n const plan = buildTopicProjectOverlayPatchPlan(topic, value);\n await applyTopicProjectOverlayPatch(ctx, topic, plan);\n\n return materializeTopicProjectOverlay({\n ...topic,\n ...plan.patch,\n metadata: plan.nextMetadata,\n } as TopicDocLike);\n}\n\nfunction buildTopicProjectOverlayPatchPlan(\n topic: TopicDocLike,\n value: Record<string, unknown>\n): TopicPatchPlan {\n const plan: TopicPatchPlan = {\n nextMetadata: { ...readMetadata(topic) },\n patch: {},\n topicUpdateArgs: {\n id: String(topic._id),\n },\n };\n for (const [key, rawValue] of Object.entries(value)) {\n applyTopicProjectOverlayPatchEntry(plan, key, rawValue);\n }\n\n plan.patch.updatedAt = Date.now();\n plan.patch.metadata = plan.nextMetadata;\n plan.topicUpdateArgs.metadata = plan.nextMetadata;\n\n return plan;\n}\n\nfunction applyTopicProjectOverlayPatchEntry(\n plan: TopicPatchPlan,\n key: string,\n rawValue: unknown\n) {\n switch (key) {\n case \"_id\":\n case \"projectId\":\n case \"topicId\":\n case \"legacyProjectId\":\n case \"storageProjectId\":\n case \"updatedAt\":\n case \"createdAt\":\n return;\n case \"name\":\n case \"description\":\n plan.patch[key] = rawValue;\n plan.topicUpdateArgs[key] = rawValue;\n return;\n case \"tenantId\":\n case \"workspaceId\":\n case \"ownerId\":\n throw new Error(\n `patchTopicProjectOverlay cannot mutate ${key} via component-owned topics`\n );\n case \"status\":\n applyTopicStatusPatch(plan, rawValue);\n return;\n case \"visibility\":\n applyTopicVisibilityPatch(plan, rawValue);\n return;\n case \"type\":\n applyTopicProjectTypePatch(plan, rawValue);\n return;\n default:\n applyTopicMetadataPatch(plan, key, rawValue);\n }\n}\n\nfunction applyTopicStatusPatch(plan: TopicPatchPlan, rawValue: unknown) {\n const status = coerceStatus(rawValue);\n if (status) {\n plan.patch.status = status;\n plan.topicUpdateArgs.status = status;\n }\n}\n\nfunction applyTopicVisibilityPatch(plan: TopicPatchPlan, rawValue: unknown) {\n const visibility = coerceVisibility(rawValue);\n if (visibility) {\n plan.patch.visibility = visibility;\n plan.topicUpdateArgs.visibility = visibility;\n }\n}\n\nfunction applyTopicProjectTypePatch(plan: TopicPatchPlan, rawValue: unknown) {\n const projectType = readNonEmptyString(rawValue);\n if (projectType) {\n plan.nextMetadata.projectType = projectType;\n return;\n }\n plan.nextMetadata = omitMetadataKey(plan.nextMetadata, \"projectType\");\n}\n\nfunction applyTopicMetadataPatch(\n plan: TopicPatchPlan,\n key: string,\n rawValue: unknown\n) {\n if (rawValue === undefined) {\n plan.nextMetadata = omitMetadataKey(plan.nextMetadata, key);\n return;\n }\n plan.nextMetadata[key] = rawValue;\n}\n\nasync function applyTopicProjectOverlayPatch(\n ctx: OverlayContext,\n topic: TopicDocLike,\n plan: TopicPatchPlan\n): Promise<void> {\n if (typeof ctx.runMutation === \"function\") {\n try {\n await ctx.runMutation(api.topics.update, plan.topicUpdateArgs);\n } catch (error) {\n if (!canPatchTopicViaLocalDb(ctx, error)) {\n throw error;\n }\n await ctx.db.patch(topic._id as Id<\"topics\">, plan.patch);\n }\n } else if (ctx?.db && typeof ctx.db.patch === \"function\") {\n await ctx.db.patch(topic._id as Id<\"topics\">, plan.patch);\n } else {\n throw new Error(\n \"Cannot patch topic without component adapter (ctx.runMutation unavailable)\"\n );\n }\n}\n\nfunction canPatchTopicViaLocalDb(\n ctx: OverlayContext,\n error: unknown\n): ctx is {\n db: Pick<DatabaseReader, \"get\" | \"query\"> & Pick<DatabaseWriter, \"patch\">;\n} {\n return (\n isMissingLucernChildComponentError(error) &&\n Boolean(ctx?.db) &&\n typeof ctx.db?.patch === \"function\"\n );\n}\n\nexport function matchesTopicProjectOverlayAccess(\n accessibleProjectIds: Set<string>,\n project: {\n topicId: string;\n legacyProjectId?: string;\n storageProjectId?: string;\n }\n): boolean {\n return (\n accessibleProjectIds.has(project.storageProjectId || project.topicId) ||\n accessibleProjectIds.has(project.topicId) ||\n (typeof project.legacyProjectId === \"string\" &&\n accessibleProjectIds.has(project.legacyProjectId))\n );\n}\n","/** Data-source resolver wiring for the graph-primitives module. */\n\nimport type {\n GraphPrimitivesAppResolverContext,\n GraphPrimitivesAppResolvers,\n} from \"./resolverTypes\";\nimport {\n listTopicProjectOverlays,\n patchTopicProjectOverlay,\n resolveTopicProjectOverlay,\n} from \"./topicProjectOverlay\";\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = getErrorMessage(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found'\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n return (error as { message: string }).message;\n }\n return \"unknown error\";\n}\n\nfunction isAdvisoryTopicPatch(value: Record<string, unknown>): boolean {\n const advisoryKeys = new Set([\"lastActivityAt\", \"updatedAt\"]);\n const keys = Object.keys(value);\n return keys.length > 0 && keys.every((key) => advisoryKeys.has(key));\n}\n\nasync function patchProjectWithTolerance(\n ctx: GraphPrimitivesAppResolverContext,\n projectId: string,\n value: Record<string, unknown>\n): Promise<void> {\n try {\n await patchTopicProjectOverlay(ctx, projectId, value);\n } catch (error) {\n if (\n !(\n isAdvisoryTopicPatch(value) && isMissingLucernChildComponentError(error)\n )\n ) {\n throw error;\n }\n\n console.warn(\n \"[lucern graph-primitives] Non-fatal advisory topic patch failure\",\n {\n projectId,\n keys: Object.keys(value),\n error: getErrorMessage(error),\n }\n );\n }\n}\n\nfunction defaultResolvers(): GraphPrimitivesAppResolvers {\n return {\n getProject: (ctx, projectId) =>\n resolveTopicProjectOverlay(ctx, projectId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n }),\n patchProject: (ctx, projectId, value) =>\n patchProjectWithTolerance(ctx, projectId, value),\n listTopics: (ctx) =>\n listTopicProjectOverlays(ctx, {\n idMode: \"legacy\",\n }),\n getFinalArtifact: (ctx, artifactId) => ctx.db.get(artifactId),\n };\n}\n\nlet resolverOverrides: Partial<GraphPrimitivesAppResolvers> = {};\n\nexport function configureGraphPrimitivesAppResolvers(\n overrides: Partial<GraphPrimitivesAppResolvers>\n): void {\n resolverOverrides = {\n ...resolverOverrides,\n ...overrides,\n };\n}\n\nexport function resetGraphPrimitivesAppResolvers(): void {\n resolverOverrides = {};\n}\n\nexport function resolveGraphPrimitivesAppResolvers(\n _ctx: GraphPrimitivesAppResolverContext\n): GraphPrimitivesAppResolvers {\n return {\n ...defaultResolvers(),\n ...resolverOverrides,\n };\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport type { Id } from \"./convex\";\nimport { api as appApi } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScopeProjectId\";\n\ntype UnknownRecord = Record<string, unknown>;\n\ninterface TopicScopeContext {\n db: {\n get(id: string): Promise<unknown>;\n query(tableName: string): TopicScopeQuery;\n };\n runQuery?: <TResult>(fnRef: unknown, args: unknown) => Promise<TResult>;\n}\n\ninterface TopicScopeQuery {\n collect(): Promise<unknown[]>;\n first(): Promise<unknown | null>;\n withIndex(\n indexName: string,\n range?: (q: TopicScopeIndexRangeBuilder) => unknown\n ): TopicScopeQuery;\n}\n\ninterface TopicScopeIndexRangeBuilder {\n eq(field: string, value: unknown): TopicScopeIndexRangeBuilder;\n}\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport interface TopicProjectScope {\n projectId?: string;\n source: \"topic\" | \"project_mapped_topic\" | \"topic_inferred\" | \"topic_node\";\n tenantId?: string;\n topicId: Id<\"topics\">;\n workspaceId?: string;\n}\n\n/**\n * RR.5 (legacy topics-table retirement) — graph-primitives mirror of the\n * kernel's epistemicNodes-first topic-scope fallback. Kept in lockstep with\n * `packages/reasoning-kernel/src/adapters/lib/topicScope.ts`\n * (`tests/unit/convex/topic-scope-fallbacks.test.ts` asserts parity).\n *\n * Resolves a topic that exists only as `epistemicNodes(nodeType=\"topic\")` —\n * the write-of-record — when no legacy `topics` row backs the ref, returning the\n * node's `topicId` self-key so scoped beliefs/evidence/questions stay reachable.\n * See the kernel module for the full silent-empty-result rationale.\n */\ninterface TopicNodeScopeDoc {\n _id: string | Id<\"epistemicNodes\">;\n globalId?: string;\n metadata?: UnknownRecord;\n nodeType?: string;\n topicId?: string;\n}\n\nasync function resolveTopicNodeScopeOrNull(\n ctx: TopicScopeContext,\n ref: string\n): Promise<TopicProjectScope | null> {\n if (!ctx?.db || typeof ctx.db.query !== \"function\") {\n return null;\n }\n\n let node: TopicNodeScopeDoc | null = null;\n\n // 1. The ref IS the topic node's UUIDv7 globalId.\n try {\n const byGlobalId = (await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", ref))\n .first()) as TopicNodeScopeDoc | null;\n if (byGlobalId && byGlobalId.nodeType === \"topic\") {\n node = byGlobalId;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] topic-node scope lookup by globalId failed\",\n { error, ref }\n );\n }\n\n if (!node) {\n return null;\n }\n\n const scopeKey =\n normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);\n if (!scopeKey) {\n return null;\n }\n\n return {\n topicId: scopeKey as Id<\"topics\">,\n projectId: asMappedProjectId(node),\n source: \"topic_node\",\n };\n}\n\ninterface MaterializedTopicNodeDoc {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n}\n\nfunction asMappedProjectId(\n topic: Pick<TopicDoc, \"metadata\"> | TopicNodeScopeDoc | null | undefined\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(\n (topic as UnknownRecord)[LEGACY_SCOPE_FIELD]\n );\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = topic.metadata || {};\n const candidate =\n (metadata as UnknownRecord)[LEGACY_SCOPE_FIELD] ||\n (metadata as UnknownRecord).legacyProjectId ||\n (metadata as UnknownRecord).projectId ||\n (metadata as UnknownRecord).scopeProjectId;\n return typeof candidate === \"string\"\n ? normalizeScopeValue(candidate)\n : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(\n ctx: TopicScopeContext,\n scopeId: string\n): Promise<TopicDoc[]> {\n const query = ctx.db.query(\"topics\") as TopicScopeQuery;\n try {\n return (await query\n .withIndex(\"by_graph_scope_project\", (q) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId)\n )\n .collect()) as TopicDoc[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve scope alias via index\",\n {\n error,\n scopeId,\n }\n );\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await query.collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: TopicScopeContext,\n topicId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by host query\",\n {\n error,\n topicId,\n }\n );\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: TopicScopeContext,\n legacyScopeId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by legacy scope\",\n {\n error,\n legacyScopeId,\n }\n );\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: TopicScopeContext,\n topic: TopicDoc\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) {\n break;\n }\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) {\n break;\n }\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: TopicScopeContext,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string }\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n return await resolveScopeFromTopicId(ctx, args.topicId);\n }\n\n if (args.projectId) {\n return await resolveScopeFromLegacyProjectId(ctx, args.projectId);\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\"\n );\n}\n\nasync function resolveScopeFromTopicId(\n ctx: TopicScopeContext,\n topicId: Id<\"topics\"> | string\n): Promise<TopicProjectScope> {\n const topic = await resolveTopicDocFromTopicId(ctx, topicId);\n if (topic) {\n return await buildTopicScope(ctx, topic, \"topic\");\n }\n\n const nodeScope = await resolveTopicNodeScopeOrNull(ctx, String(topicId));\n if (nodeScope) {\n return nodeScope;\n }\n throw new Error(`Topic not found: ${String(topicId)}`);\n}\n\nasync function resolveTopicDocFromTopicId(\n ctx: TopicScopeContext,\n topicId: Id<\"topics\"> | string\n): Promise<TopicDoc | null> {\n const direct = await tryReadTopicDoc(ctx, topicId, {\n failureLog: \"[topicScope] Failed to load topic by direct id\",\n idLogKey: \"topicId\",\n });\n if (direct) {\n return direct;\n }\n\n const hostTopic = await tryResolveHostTopicById(ctx, String(topicId));\n if (hostTopic) {\n return hostTopic;\n }\n\n return (\n pickPrimaryTopic(await findTopicsByScopeAlias(ctx, String(topicId))) ?? null\n );\n}\n\nasync function resolveScopeFromLegacyProjectId(\n ctx: TopicScopeContext,\n legacyProjectId: string\n): Promise<TopicProjectScope> {\n const directTopic = await resolveDirectLegacyProjectTopic(\n ctx,\n legacyProjectId\n );\n if (directTopic) {\n return await buildTopicScope(ctx, directTopic, \"topic_inferred\", {\n fallbackProjectId: legacyProjectId,\n });\n }\n\n const primary = pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, legacyProjectId)\n );\n if (primary) {\n return await buildTopicScope(ctx, primary, \"project_mapped_topic\", {\n fallbackProjectId: legacyProjectId,\n });\n }\n\n const nodeScope = await resolveTopicNodeScopeOrNull(ctx, legacyProjectId);\n if (nodeScope) {\n return {\n ...nodeScope,\n projectId: nodeScope.projectId ?? legacyProjectId,\n };\n }\n\n throw new Error(\n `Legacy project scope ${legacyProjectId} has no mapped topic.`\n );\n}\n\nasync function resolveDirectLegacyProjectTopic(\n ctx: TopicScopeContext,\n legacyProjectId: string\n): Promise<TopicDoc | null> {\n const directTopic = await tryReadTopicDoc(ctx, legacyProjectId, {\n failureLog: \"[topicScope] Failed to load direct project topic\",\n idLogKey: \"projectId\",\n });\n return directTopic ?? tryResolveHostTopicByLegacyScope(ctx, legacyProjectId);\n}\n\nasync function tryReadTopicDoc(\n ctx: TopicScopeContext,\n id: Id<\"topics\"> | string,\n log: { failureLog: string; idLogKey: \"projectId\" | \"topicId\" }\n): Promise<TopicDoc | null> {\n try {\n return (await ctx.db.get(id)) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(log.failureLog, {\n error,\n [log.idLogKey]: id,\n });\n return null;\n }\n}\n\nasync function buildTopicScope(\n ctx: TopicScopeContext,\n topic: TopicDoc,\n source: TopicProjectScope[\"source\"],\n options: { fallbackProjectId?: string } = {}\n): Promise<TopicProjectScope> {\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n return {\n topicId: topic._id,\n ...(mapped || options.fallbackProjectId\n ? { projectId: mapped ?? options.fallbackProjectId }\n : {}),\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source,\n };\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","/**\n * questionEvidenceLinks module implementation.\n */\n// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n\nimport { checkProjectAccess } from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal, mutation, query } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport {\n deriveMatcherReviewStatus,\n isOperationalLinkStatus,\n type LinkSuggestionStatus,\n mergeLinkSuggestionStatus,\n resolveReviewedLinkStatus,\n} from \"./matcherFeedbackUtils\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\n\nconst questionIdUnion = v.id(\"epistemicNodes\");\nconst insightIdUnion = v.id(\"epistemicNodes\");\nconst suggestionStatusValidator = v.union(\n v.literal(\"suggested\"),\n v.literal(\"approved\"),\n v.literal(\"dismissed\")\n);\nconst matcherMetadataValidator = v.object({\n surface: v.string(),\n matcherFamily: v.optional(v.string()),\n matcherKey: v.optional(v.string()),\n matcherVersion: v.optional(v.string()),\n reviewStatus: v.optional(\n v.union(\n v.literal(\"pending\"),\n v.literal(\"accepted\"),\n v.literal(\"rejected\"),\n v.literal(\"auto_accepted\"),\n v.literal(\"superseded\")\n )\n ),\n configSnapshot: v.optional(v.any()),\n signalSnapshot: v.optional(v.any()),\n outcomeMetadata: v.optional(v.any()),\n});\n\ninterface MatcherMetadata {\n configSnapshot?: unknown;\n matcherFamily?: string;\n matcherKey?: string;\n matcherVersion?: string;\n outcomeMetadata?: unknown;\n reviewStatus?:\n | \"pending\"\n | \"accepted\"\n | \"rejected\"\n | \"auto_accepted\"\n | \"superseded\";\n signalSnapshot?: unknown;\n surface: string;\n}\n\ntype EvidenceImpact = \"supports\" | \"contradicts\" | \"neutral\";\n\ninterface QuestionEvidenceLinkRow {\n _id: Id<\"questionEvidenceLinks\">;\n createdAt: number;\n createdBy: string;\n helpsAnswer: boolean;\n impact?: EvidenceImpact;\n impactScore?: number;\n insightId: Id<\"epistemicNodes\">;\n questionId: Id<\"epistemicNodes\">;\n rationale?: string;\n relevance?: number;\n status?: LinkSuggestionStatus;\n}\n\ninterface QuestionEvidenceLinkWithInsight extends QuestionEvidenceLinkRow {\n insight: EpistemicNodeRow | null;\n}\n\ninterface EpistemicNodeRow {\n _creationTime?: number;\n _id: Id<\"epistemicNodes\">;\n canonicalText?: string;\n createdAt?: number;\n globalId?: string;\n metadata?: Record<string, unknown>;\n nodeType?: string;\n projectId?: string;\n status?: string;\n title?: string;\n topicId?: string | Id<\"topics\">;\n verificationStatus?: string;\n}\n\ninterface EpistemicEdgeRow {\n _id: Id<\"epistemicEdges\">;\n context?: string;\n createdAt: number;\n createdBy?: string;\n fromGlobalId?: string;\n fromNodeId?: Id<\"epistemicNodes\">;\n globalId?: string;\n weight?: number;\n}\n\ninterface EvidenceEdgeDetail {\n _creationTime: number;\n _id: Id<\"epistemicEdges\">;\n createdAt: number;\n impact?: EvidenceImpact;\n impactScore: number;\n insight: {\n _id: Id<\"epistemicNodes\">;\n _creationTime: number | undefined;\n insight: string | null;\n text: string | null;\n title: string | null;\n canonicalText: string | null;\n source: string | null;\n sourceUrl: string | null;\n verificationStatus: string;\n };\n insightId: Id<\"epistemicNodes\">;\n questionId: Id<\"epistemicNodes\">;\n rationale: string | null;\n userId: string | undefined;\n}\n\ninterface CreateQuestionEvidenceLinkArgs {\n createdBy: string;\n helpsAnswer: boolean;\n impact?: EvidenceImpact;\n impactScore?: number;\n insightId: Id<\"epistemicNodes\">;\n matcherMetadata?: MatcherMetadata;\n questionId: Id<\"epistemicNodes\">;\n rationale?: string;\n relevance?: number;\n status?: LinkSuggestionStatus;\n}\n\ninterface UpdateImpactArgs {\n impact?: EvidenceImpact;\n impactScore?: number;\n linkId: Id<\"questionEvidenceLinks\">;\n userId: string;\n}\n\ninterface ReviewSuggestionArgs {\n linkId: Id<\"questionEvidenceLinks\">;\n reason?: string;\n status: \"approved\" | \"dismissed\";\n userId: string;\n}\n\ninterface RemoveQuestionEvidenceLinkArgs {\n linkId: Id<\"questionEvidenceLinks\">;\n userId: string;\n}\n\ninterface QuestionEvidenceByQuestionArgs {\n questionId: Id<\"epistemicNodes\">;\n}\n\ninterface QuestionEvidenceByInsightArgs {\n insightId: Id<\"epistemicNodes\">;\n}\n\ninterface ProjectQuestionEvidenceArgs {\n limit?: number;\n projectId?: string;\n topicId?: string;\n userId: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n return typeof value === \"string\" && value.length > 0\n ? (value as Id<TableName>)\n : null;\n}\n\nfunction readOptionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readRequiredNumber(value: unknown, fieldName: string): number {\n const numberValue = readOptionalNumber(value);\n if (numberValue === undefined) {\n throw new Error(`questionEvidenceLinks row has invalid ${fieldName}.`);\n }\n return numberValue;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === \"string\")\n : [];\n}\n\nfunction readLinkSuggestionStatus(\n value: unknown\n): LinkSuggestionStatus | undefined {\n if (value === undefined) {\n return;\n }\n if (value === \"suggested\" || value === \"approved\" || value === \"dismissed\") {\n return value;\n }\n throw new Error(\"questionEvidenceLinks row has invalid status.\");\n}\n\nfunction readEvidenceImpact(value: unknown): EvidenceImpact | undefined {\n if (value === undefined) {\n return;\n }\n if (value === \"supports\" || value === \"contradicts\" || value === \"neutral\") {\n return value;\n }\n throw new Error(\"questionEvidenceLinks row has invalid impact.\");\n}\n\nfunction readMatcherReviewStatus(\n value: unknown\n): MatcherMetadata[\"reviewStatus\"] {\n if (value === undefined) {\n return;\n }\n if (\n value === \"pending\" ||\n value === \"accepted\" ||\n value === \"rejected\" ||\n value === \"auto_accepted\" ||\n value === \"superseded\"\n ) {\n return value;\n }\n throw new Error(\"matcher metadata has invalid reviewStatus.\");\n}\n\nfunction readMatcherMetadata(value: unknown): MatcherMetadata | undefined {\n if (value === undefined) {\n return;\n }\n if (!isRecord(value) || typeof value.surface !== \"string\") {\n throw new Error(\"matcher metadata must include a string surface.\");\n }\n return {\n configSnapshot: value.configSnapshot,\n matcherFamily: readOptionalString(value.matcherFamily),\n matcherKey: readOptionalString(value.matcherKey),\n matcherVersion: readOptionalString(value.matcherVersion),\n outcomeMetadata: value.outcomeMetadata,\n reviewStatus: readMatcherReviewStatus(value.reviewStatus),\n signalSnapshot: value.signalSnapshot,\n surface: value.surface,\n };\n}\n\nfunction readMetadata(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nfunction readEpistemicNode(value: unknown): EpistemicNodeRow | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = readConvexId<\"epistemicNodes\">(value._id);\n if (!id) {\n return null;\n }\n return {\n _creationTime: readOptionalNumber(value._creationTime),\n _id: id,\n canonicalText: readOptionalString(value.canonicalText),\n createdAt: readOptionalNumber(value.createdAt),\n globalId: readOptionalString(value.globalId),\n metadata: readMetadata(value.metadata),\n nodeType: readOptionalString(value.nodeType),\n projectId: readOptionalString(value.projectId),\n status: readOptionalString(value.status),\n title: readOptionalString(value.title),\n topicId: readOptionalString(value.topicId) as string | Id<\"topics\">,\n verificationStatus: readOptionalString(value.verificationStatus),\n };\n}\n\nfunction requireEpistemicNode(\n value: unknown,\n message: string\n): EpistemicNodeRow {\n const node = readEpistemicNode(value);\n if (!node) {\n throw new Error(message);\n }\n return node;\n}\n\nfunction readQuestionEvidenceLink(\n value: unknown,\n context = \"questionEvidenceLinks row\"\n): QuestionEvidenceLinkRow {\n if (!isRecord(value)) {\n throw new Error(`${context} must be an object.`);\n }\n const id = readConvexId<\"questionEvidenceLinks\">(value._id);\n const questionId = readConvexId<\"epistemicNodes\">(value.questionId);\n const insightId = readConvexId<\"epistemicNodes\">(value.insightId);\n const createdBy = readOptionalString(value.createdBy);\n if (!(id && questionId && insightId && createdBy)) {\n throw new Error(`${context} has invalid required identifiers.`);\n }\n if (typeof value.helpsAnswer !== \"boolean\") {\n throw new Error(`${context} has invalid helpsAnswer.`);\n }\n return {\n _id: id,\n createdAt: readRequiredNumber(value.createdAt, \"createdAt\"),\n createdBy,\n helpsAnswer: value.helpsAnswer,\n impact: readEvidenceImpact(value.impact),\n impactScore: readOptionalNumber(value.impactScore),\n insightId,\n questionId,\n rationale: readOptionalString(value.rationale),\n relevance: readOptionalNumber(value.relevance),\n status: readLinkSuggestionStatus(value.status),\n };\n}\n\nfunction readQuestionEvidenceLinks(\n values: unknown[]\n): QuestionEvidenceLinkRow[] {\n return values.map((value, index) =>\n readQuestionEvidenceLink(value, `questionEvidenceLinks[${index}]`)\n );\n}\n\nfunction readEpistemicEdge(value: unknown): EpistemicEdgeRow | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = readConvexId<\"epistemicEdges\">(value._id);\n const createdAt = readOptionalNumber(value.createdAt);\n if (!(id && createdAt !== undefined)) {\n return null;\n }\n return {\n _id: id,\n context: readOptionalString(value.context),\n createdAt,\n createdBy: readOptionalString(value.createdBy),\n fromGlobalId: readOptionalString(value.fromGlobalId),\n fromNodeId: readConvexId<\"epistemicNodes\">(value.fromNodeId) ?? undefined,\n globalId: readOptionalString(value.globalId),\n weight: readOptionalNumber(value.weight),\n };\n}\n\nasync function fetchOperationalQuestionEvidenceLinks(\n ctx: QueryCtx,\n questionId: Id<\"epistemicNodes\">\n): Promise<QuestionEvidenceLinkWithInsight[]> {\n const links = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", questionId))\n .collect()\n );\n\n return await Promise.all(\n links\n .filter((link) => isOperationalLinkStatus(link.status))\n .map(async (link) => {\n const insight = readEpistemicNode(await ctx.db.get(link.insightId));\n return {\n ...link,\n insight,\n };\n })\n );\n}\n\nfunction calculateEdgeImpact(edgeWeight: number | undefined): number {\n return edgeWeight == null ? 0 : Math.round(edgeWeight * 10);\n}\n\nasync function buildEvidenceDetailFromEdge(\n ctx: QueryCtx,\n edge: EpistemicEdgeRow,\n questionId: Id<\"epistemicNodes\">,\n seenEvidenceIds: Set<string>\n): Promise<EvidenceEdgeDetail | null> {\n if (!edge.fromNodeId) {\n return null;\n }\n\n const fromNodeId = String(edge.fromNodeId);\n if (seenEvidenceIds.has(fromNodeId)) {\n return null;\n }\n seenEvidenceIds.add(fromNodeId);\n\n const evidenceNode = readEpistemicNode(await ctx.db.get(edge.fromNodeId));\n if (\n evidenceNode?.nodeType !== \"evidence\" ||\n evidenceNode.status !== \"active\"\n ) {\n return null;\n }\n\n const meta = evidenceNode.metadata || {};\n const impactScore = calculateEdgeImpact(edge.weight);\n\n return {\n _id: edge._id,\n _creationTime: edge.createdAt,\n questionId,\n insightId: edge.fromNodeId,\n impact: deriveImpact(impactScore, undefined),\n impactScore,\n rationale: edge.context ?? null,\n userId: edge.createdBy,\n createdAt: edge.createdAt,\n insight: {\n _id: evidenceNode._id,\n _creationTime: evidenceNode.createdAt,\n insight:\n evidenceNode.canonicalText ||\n evidenceNode.title ||\n readOptionalString(meta.snippet) ||\n null,\n text:\n evidenceNode.canonicalText ||\n evidenceNode.title ||\n readOptionalString(meta.snippet) ||\n null,\n title: evidenceNode.title ?? null,\n canonicalText: evidenceNode.canonicalText ?? null,\n source: readOptionalString(meta.sourceTitle) ?? null,\n sourceUrl: readOptionalString(meta.sourceUrl) ?? null,\n verificationStatus: evidenceNode.verificationStatus ?? \"unverified\",\n },\n };\n}\n\nasync function fetchDerivedFromEdgesWithDetails(\n ctx: QueryCtx,\n questionId: Id<\"epistemicNodes\">,\n seenEvidenceIds: Set<string>\n): Promise<EvidenceEdgeDetail[]> {\n const edges = (\n await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", questionId).eq(\"edgeType\", \"derived_from\")\n )\n .collect()\n ).flatMap((edge) => {\n const edgeRow = readEpistemicEdge(edge);\n return edgeRow ? [edgeRow] : [];\n });\n\n const rows: EvidenceEdgeDetail[] = [];\n for (const edge of edges) {\n const edgeRow = await buildEvidenceDetailFromEdge(\n ctx,\n edge,\n questionId,\n seenEvidenceIds\n );\n if (edgeRow) {\n rows.push(edgeRow);\n }\n }\n\n return rows;\n}\n\nfunction deriveImpact(\n impactScore: number | undefined,\n fallback: \"supports\" | \"contradicts\" | \"neutral\" | undefined\n): \"supports\" | \"contradicts\" | \"neutral\" | undefined {\n if (impactScore === undefined) {\n return fallback;\n }\n if (impactScore > 0) {\n return \"supports\";\n }\n if (impactScore < 0) {\n return \"contradicts\";\n }\n return \"neutral\";\n}\n\nfunction readEpistemicMetadata(\n node: Pick<EpistemicNodeRow, \"metadata\"> | null | undefined\n): Record<string, unknown> {\n return node?.metadata ?? {};\n}\n\nasync function markProjectGraphDirty(\n ctx: MutationCtx,\n projectId: string | undefined | null\n): Promise<void> {\n if (!projectId) {\n return;\n }\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n { projectId }\n );\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(ctx, projectId, {\n lastActivityAt: Date.now(),\n });\n}\n\nasync function recordMatcherDecision(\n ctx: MutationCtx,\n args: {\n questionNode: EpistemicNodeRow;\n questionId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n linkId: string;\n linkStatus?: LinkSuggestionStatus;\n matcherMetadata?: MatcherMetadata;\n reviewedBy?: string;\n decisionReason?: string;\n }\n): Promise<void> {\n if (!args.matcherMetadata) {\n return;\n }\n\n await ctx.runMutation(\"matcherFeedback:recordDecision\", {\n projectId: args.questionNode.projectId,\n topicId: args.questionNode.topicId,\n surface: args.matcherMetadata.surface,\n matcherFamily: args.matcherMetadata.matcherFamily,\n matcherKey: args.matcherMetadata.matcherKey,\n matcherVersion: args.matcherMetadata.matcherVersion,\n sourceEntityId: String(args.insightId),\n targetEntityId: String(args.questionId),\n suggestionTable: \"questionEvidenceLinks\",\n suggestionId: args.linkId,\n reviewStatus: deriveMatcherReviewStatus({\n explicitReviewStatus: args.matcherMetadata.reviewStatus,\n linkStatus: args.linkStatus,\n }),\n reviewedBy: args.reviewedBy,\n decisionReason: args.decisionReason,\n configSnapshot: args.matcherMetadata.configSnapshot,\n signalSnapshot: args.matcherMetadata.signalSnapshot,\n outcomeMetadata: args.matcherMetadata.outcomeMetadata,\n });\n}\n\nasync function applyOperationalLinkEffects(\n ctx: MutationCtx,\n args: {\n questionNode: EpistemicNodeRow;\n questionId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n relevance?: number;\n rationale?: string;\n createdBy: string;\n }\n): Promise<void> {\n const meta = readEpistemicMetadata(args.questionNode);\n const currentRelated = readStringArray(meta.relatedInsightIds);\n if (!currentRelated.includes(args.insightId)) {\n await ctx.db.patch(args.questionId, {\n updatedAt: Date.now(),\n metadata: {\n ...meta,\n relatedInsightIds: [...currentRelated, args.insightId],\n },\n });\n }\n\n try {\n const questionNode = readEpistemicNode(await ctx.db.get(args.questionId));\n const evidenceNode = readEpistemicNode(await ctx.db.get(args.insightId));\n\n if (\n questionNode &&\n questionNode.nodeType === \"question\" &&\n evidenceNode &&\n evidenceNode.nodeType === \"evidence\" &&\n questionNode.globalId &&\n evidenceNode.globalId\n ) {\n const existingEdge = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", evidenceNode._id).eq(\"toNodeId\", questionNode._id)\n )\n .first();\n\n if (!existingEdge) {\n const globalId = `edge-derived_from-${evidenceNode._id}-${questionNode._id}-${Date.now()}`;\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId,\n fromGlobalId: evidenceNode.globalId,\n toGlobalId: questionNode.globalId,\n edgeType: \"derived_from\",\n weight: args.relevance ?? 0.5,\n context: args.rationale ?? \"Linked from question evidence links\",\n projectId: args.questionNode.projectId\n ? String(args.questionNode.projectId)\n : undefined,\n createdBy: args.createdBy,\n fromNodeType: \"evidence\",\n toNodeType: \"question\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n }\n }\n } catch (e) {\n console.error(\"[EpistemicSpine] Failed to create derived_from edge:\", e);\n }\n\n if (args.questionNode.projectId) {\n await ctx.scheduler.runAfter(0, \"verificationActions:deepVerifyEvidence\", {\n insightId: args.insightId,\n targetType: \"question\",\n targetId: args.questionId,\n projectId: args.questionNode.projectId,\n userId: args.createdBy,\n });\n }\n}\n\nasync function removeOperationalLinkEffects(\n ctx: MutationCtx,\n args: {\n questionId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n }\n): Promise<void> {\n const question = readEpistemicNode(await ctx.db.get(args.questionId));\n if (question) {\n const meta = readEpistemicMetadata(question);\n const currentRelated = readStringArray(meta.relatedInsightIds);\n await ctx.db.patch(args.questionId, {\n updatedAt: Date.now(),\n metadata: {\n ...meta,\n relatedInsightIds: currentRelated.filter((id) => id !== args.insightId),\n },\n });\n }\n\n try {\n const questionNode = readEpistemicNode(await ctx.db.get(args.questionId));\n const evidenceNode = readEpistemicNode(await ctx.db.get(args.insightId));\n\n if (\n questionNode &&\n questionNode.nodeType === \"question\" &&\n evidenceNode &&\n evidenceNode.nodeType === \"evidence\"\n ) {\n const edge = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", evidenceNode._id).eq(\"toNodeId\", questionNode._id)\n )\n .first();\n\n const edgeRow = readEpistemicEdge(edge);\n if (edgeRow?.globalId) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edgeRow.globalId,\n });\n await ctx.db.delete(edgeRow._id);\n }\n }\n } catch (e) {\n console.error(\"[EpistemicSpine] Failed to remove edge:\", e);\n }\n}\n\n/**\n * Question Evidence Links Management\n *\n * Links evidence (insights) to questions to track what evidence helps answer which questions.\n */\n\nexport const create = mutation({\n args: {\n questionId: questionIdUnion,\n insightId: insightIdUnion,\n helpsAnswer: v.boolean(),\n relevance: v.optional(v.number()),\n rationale: v.optional(v.string()),\n impactScore: v.optional(v.number()),\n impact: v.optional(\n v.union(\n v.literal(\"supports\"),\n v.literal(\"contradicts\"),\n v.literal(\"neutral\")\n )\n ),\n status: v.optional(suggestionStatusValidator),\n matcherMetadata: v.optional(matcherMetadataValidator),\n createdBy: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: CreateQuestionEvidenceLinkArgs) => {\n const matcherMetadata = readMatcherMetadata(args.matcherMetadata);\n const question = requireEpistemicNode(\n await ctx.db.get(args.questionId),\n \"Question not found\"\n );\n if (question.nodeType !== \"question\") {\n throw new Error(\"Question not found\");\n }\n\n const insight = requireEpistemicNode(\n await ctx.db.get(args.insightId),\n \"Insight not found\"\n );\n if (insight.nodeType !== \"evidence\") {\n throw new Error(\"Insight not found\");\n }\n\n const existingLinks = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", args.questionId))\n .collect()\n );\n\n const duplicate = existingLinks.find(\n (link) => link.insightId === args.insightId\n );\n\n const impactScore = args.impactScore;\n const derivedImpact = deriveImpact(impactScore, args.impact);\n\n if (duplicate) {\n const nextStatus = mergeLinkSuggestionStatus(\n duplicate.status,\n args.status\n );\n\n await ctx.db.patch(duplicate._id, {\n helpsAnswer: args.helpsAnswer,\n relevance: args.relevance,\n rationale: args.rationale,\n impactScore: args.impactScore,\n impact: derivedImpact,\n status: nextStatus,\n });\n\n if (\n isOperationalLinkStatus(nextStatus) &&\n !isOperationalLinkStatus(duplicate.status)\n ) {\n await applyOperationalLinkEffects(ctx, {\n questionNode: question,\n questionId: args.questionId,\n insightId: args.insightId,\n relevance: args.relevance,\n rationale: args.rationale,\n createdBy: args.createdBy,\n });\n }\n\n await recordMatcherDecision(ctx, {\n questionNode: question,\n questionId: args.questionId,\n insightId: args.insightId,\n linkId: duplicate._id,\n linkStatus: nextStatus,\n matcherMetadata,\n });\n\n await markProjectGraphDirty(ctx, question.projectId);\n return duplicate._id;\n }\n\n const linkId = await ctx.db.insert(\"questionEvidenceLinks\", {\n questionId: args.questionId,\n insightId: args.insightId,\n helpsAnswer: args.helpsAnswer,\n relevance: args.relevance,\n rationale: args.rationale,\n impactScore: args.impactScore,\n impact: derivedImpact,\n status: args.status,\n createdBy: args.createdBy,\n createdAt: Date.now(),\n });\n\n await recordMatcherDecision(ctx, {\n questionNode: question,\n questionId: args.questionId,\n insightId: args.insightId,\n linkId,\n linkStatus: args.status,\n matcherMetadata,\n });\n\n if (isOperationalLinkStatus(args.status)) {\n await applyOperationalLinkEffects(ctx, {\n questionNode: question,\n questionId: args.questionId,\n insightId: args.insightId,\n relevance: args.relevance,\n rationale: args.rationale,\n createdBy: args.createdBy,\n });\n }\n\n await markProjectGraphDirty(ctx, question.projectId);\n return linkId;\n },\n});\n\nexport const updateImpact = mutation({\n args: {\n linkId: v.id(\"questionEvidenceLinks\"),\n impactScore: v.optional(v.number()),\n impact: v.optional(\n v.union(\n v.literal(\"supports\"),\n v.literal(\"contradicts\"),\n v.literal(\"neutral\")\n )\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateImpactArgs) => {\n const rawLink = await ctx.db.get(args.linkId);\n if (!rawLink) {\n throw new Error(\"Link not found\");\n }\n const link = readQuestionEvidenceLink(rawLink, \"updateImpact.link\");\n\n const newImpactScore = args.impactScore;\n const newImpact = deriveImpact(newImpactScore, args.impact);\n\n const updateData: {\n impact?: \"supports\" | \"contradicts\" | \"neutral\";\n impactScore?: number;\n } = {};\n if (newImpact) {\n updateData.impact = newImpact;\n }\n if (newImpactScore !== undefined) {\n updateData.impactScore = newImpactScore;\n }\n\n await ctx.db.patch(args.linkId, updateData);\n const question = readEpistemicNode(await ctx.db.get(link.questionId));\n await markProjectGraphDirty(ctx, question?.projectId);\n\n return { success: true, newImpact, newImpactScore };\n },\n});\n\nexport const reviewSuggestion = mutation({\n args: {\n linkId: v.id(\"questionEvidenceLinks\"),\n status: v.union(v.literal(\"approved\"), v.literal(\"dismissed\")),\n userId: v.string(),\n reason: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: ReviewSuggestionArgs) => {\n const rawLink = await ctx.db.get(args.linkId);\n if (!rawLink) {\n throw new Error(\"Link not found\");\n }\n const link = readQuestionEvidenceLink(rawLink, \"reviewSuggestion.link\");\n\n const question = readEpistemicNode(await ctx.db.get(link.questionId));\n if (!question) {\n throw new Error(\"Question not found\");\n }\n\n let hasAccess = link.createdBy === args.userId;\n if (!hasAccess && question.projectId) {\n hasAccess = await checkProjectAccess(\n ctx,\n question.projectId,\n args.userId\n );\n }\n if (!hasAccess) {\n throw new Error(\"No permission to review this link\");\n }\n\n const previousStatus = link.status;\n const nextStatus = resolveReviewedLinkStatus(args.status);\n await ctx.db.patch(args.linkId, { status: nextStatus });\n\n if (nextStatus === \"approved\" && !isOperationalLinkStatus(previousStatus)) {\n await applyOperationalLinkEffects(ctx, {\n questionNode: question,\n questionId: link.questionId,\n insightId: link.insightId,\n relevance: link.relevance,\n rationale: link.rationale,\n createdBy: args.userId,\n });\n }\n if (nextStatus === \"dismissed\" && isOperationalLinkStatus(previousStatus)) {\n await removeOperationalLinkEffects(ctx, {\n questionId: link.questionId,\n insightId: link.insightId,\n });\n }\n\n await ctx.runMutation(\"matcherFeedback:recordDecision\", {\n projectId: question.projectId,\n topicId: question.topicId,\n sourceEntityId: String(link.insightId),\n targetEntityId: String(link.questionId),\n suggestionTable: \"questionEvidenceLinks\",\n suggestionId: args.linkId,\n reviewStatus: deriveMatcherReviewStatus({ linkStatus: nextStatus }),\n reviewedBy: args.userId,\n decisionReason: args.reason,\n outcomeMetadata: args.reason ? { reason: args.reason } : undefined,\n });\n\n await markProjectGraphDirty(ctx, question.projectId);\n return { success: true, status: nextStatus };\n },\n});\n\nexport const remove = mutation({\n args: {\n linkId: v.id(\"questionEvidenceLinks\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: RemoveQuestionEvidenceLinkArgs) => {\n const rawLink = await ctx.db.get(args.linkId);\n if (!rawLink) {\n throw new Error(\"Link not found\");\n }\n const link = readQuestionEvidenceLink(rawLink, \"remove.link\");\n if (link.createdBy !== args.userId) {\n throw new Error(\"Only the creator can remove this link\");\n }\n\n const question = readEpistemicNode(await ctx.db.get(link.questionId));\n if (isOperationalLinkStatus(link.status)) {\n await removeOperationalLinkEffects(ctx, {\n questionId: link.questionId,\n insightId: link.insightId,\n });\n }\n\n await ctx.db.delete(args.linkId);\n await markProjectGraphDirty(ctx, question?.projectId);\n },\n});\n\nexport const getByQuestion = query({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: QuestionEvidenceByQuestionArgs) => {\n const links = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", args.questionId))\n .collect()\n );\n\n return links.filter((link) => isOperationalLinkStatus(link.status));\n },\n});\n\nexport const getPendingSuggestions = query({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: QuestionEvidenceByQuestionArgs) => {\n const links = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", args.questionId))\n .collect()\n );\n\n return links.filter((link) => link.status === \"suggested\");\n },\n});\n\nexport const getByInsight = query({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: QuestionEvidenceByInsightArgs) => {\n const links = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_insightId\", (q) => q.eq(\"insightId\", args.insightId))\n .collect()\n );\n\n return links.filter((link) => isOperationalLinkStatus(link.status));\n },\n});\n\nexport const getEvidenceWithDetails = query({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: QuestionEvidenceByQuestionArgs) => {\n const questionNode = readEpistemicNode(await ctx.db.get(args.questionId));\n if (questionNode?.nodeType !== \"question\") {\n return [];\n }\n\n const linksWithInsight = await fetchOperationalQuestionEvidenceLinks(\n ctx,\n args.questionId\n );\n const filteredLinks = linksWithInsight.filter(\n (link): link is QuestionEvidenceLinkWithInsight => link.insight !== null\n );\n const seenEvidenceIds = new Set(\n filteredLinks.map((link) => String(link.insightId))\n );\n const edgeRows = await fetchDerivedFromEdgesWithDetails(\n ctx,\n args.questionId,\n seenEvidenceIds\n );\n\n const evidenceRows: Array<\n QuestionEvidenceLinkWithInsight | EvidenceEdgeDetail\n > = [...filteredLinks, ...edgeRows];\n\n return evidenceRows;\n },\n});\n\nexport const getByProject = query({\n args: {\n ...optionalScopeArgs,\n userId: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: ProjectQuestionEvidenceArgs) => {\n if (!args.projectId) {\n return [];\n }\n const hasAccess = await checkProjectAccess(\n ctx,\n args.projectId,\n args.userId\n );\n if (!hasAccess) {\n return [];\n }\n let scope: Awaited<ReturnType<typeof resolveTopicProjectScope>> | null;\n try {\n scope = await resolveTopicProjectScope(ctx, args);\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[questionEvidenceLinks] Failed to resolve topic scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n }\n );\n scope = null;\n }\n if (!scope) {\n return [];\n }\n\n const pageSize = Math.max(1, Math.min(Math.floor(args.limit ?? 300), 1000));\n const questionScanLimit = Math.min(pageSize * 2, 1000);\n\n const questions = (\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"question\")\n )\n .order(\"desc\")\n .take(questionScanLimit)\n ).flatMap((question) => {\n const row = readEpistemicNode(question);\n return row?.nodeType === \"question\" ? [row] : [];\n });\n\n const questionIds = questions.slice(0, pageSize).map((q) => q._id);\n const allLinks = await Promise.all(\n questionIds.map(async (questionId) => {\n const links = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", questionId))\n .collect()\n );\n return links.filter((link) => isOperationalLinkStatus(link.status));\n })\n );\n\n const flattenedLinks = allLinks.flat().slice(0, pageSize * 5);\n const questionDetails: Record<\n string,\n { _id: string; question: string; status: string }\n > = {};\n\n for (const question of questions) {\n const meta = question.metadata || {};\n questionDetails[String(question._id)] = {\n _id: String(question._id),\n question: question.canonicalText ?? question.title ?? \"\",\n status: readOptionalString(meta.status) ?? question.status ?? \"active\",\n };\n }\n\n return {\n links: flattenedLinks,\n questionDetails,\n };\n },\n});\n\nexport const getLinkedQuestionsForInsight = query({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: QuestionEvidenceByInsightArgs) => {\n const links = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_insightId\", (q) => q.eq(\"insightId\", args.insightId))\n .collect()\n );\n\n const linkedQuestions = await Promise.all(\n links\n .filter((link) => isOperationalLinkStatus(link.status))\n .map(async (link) => {\n const question = readEpistemicNode(await ctx.db.get(link.questionId));\n return {\n linkId: link._id,\n questionId: link.questionId,\n helpsAnswer: link.helpsAnswer,\n relevance: link.relevance,\n rationale: link.rationale,\n createdBy: link.createdBy,\n createdAt: link.createdAt,\n question: question\n ? {\n _id: question._id,\n question: question.canonicalText || question.title || \"\",\n status: question.status,\n }\n : null,\n };\n })\n );\n\n return linkedQuestions.filter((row) => row.question !== null);\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/convex.ts","../src/debug.ts","../src/matcherFeedbackUtils.ts","../src/topicProjectOverlay.ts","../src/resolvers.ts","../src/topicScope.ts","../src/questionEvidenceLinks.ts"],"names":["isMissingLucernChildComponentError","getErrorMessage","LEGACY_SCOPE_FIELD","query","v","readStringArray","readMetadata"],"mappings":"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","file":"questionEvidenceLinks.js","sourcesContent":["import type { Doc as AccessControlDoc } from \"@lucern/access-control/convex\";\nimport {\n type UnsafeConvexAnyApi,\n unsafeConvexAnyApi,\n} from \"@lucern/contracts/convex/unsafeAnyApi\";\nimport {\n actionGeneric,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\n// TODO(FR.11-structural): `api`/`internal`/`components` are `anyApi as any`\n// because this module source tree is bundled into the kernel host at deploy time\n// and has NO top-level Convex `_generated/` directory to import a typed surface\n// from. Every `api.*` / `internal.*` / string-literal cross-component ref in this\n// module (topicScope.ts, topicProjectOverlay.ts, questionEvidenceLinks.ts,\n// beliefEvidenceLinks*.ts, epistemicQuestions.helpers.ts) inherits `any` from\n// here. The fix is structural — generate a per-module typed surface or a shared\n// typed function-reference manifest (template: the typed `components.controlPlane`\n// in modules/control-plane/src/component/convex.ts and the\n// `KERNEL_API_REF_MANIFEST` pattern in packages/server-core/src/kernelApi.ts) —\n// owned by the FR.11 closing/synthesis pass, not a mechanical swap.\nconst unsafeApi = unsafeConvexAnyApi(\n \"graph-primitives top-level module bundle lacks a committed Convex _generated/api surface\"\n);\nexport const api = unsafeApi;\nexport const components =\n componentsGeneric() as unknown as UntypedFunctionReferenceSurface;\nexport const internal = unsafeApi;\n\ntype UntypedFunctionReferenceSurface = UnsafeConvexAnyApi;\ntype BoundaryValue = UntypedFunctionReferenceSurface[string];\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> =\n AccessControlDoc<TableName>;\nexport type DataModel = Record<TableNames, unknown>;\ninterface IndexRangeBuilder {\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n field(fieldName: string): string;\n gt(fieldName: string, value: unknown): IndexRangeBuilder;\n gte(fieldName: string, value: unknown): IndexRangeBuilder;\n lt(fieldName: string, value: unknown): IndexRangeBuilder;\n lte(fieldName: string, value: unknown): IndexRangeBuilder;\n}\ninterface FilterBuilder {\n and(...clauses: unknown[]): FilterBuilder;\n eq(left: unknown, right: unknown): FilterBuilder;\n field(fieldName: string): string;\n gt(left: unknown, right: unknown): FilterBuilder;\n gte(left: unknown, right: unknown): FilterBuilder;\n lt(left: unknown, right: unknown): FilterBuilder;\n lte(left: unknown, right: unknown): FilterBuilder;\n neq(left: unknown, right: unknown): FilterBuilder;\n or(...clauses: unknown[]): FilterBuilder;\n [operator: string]: unknown;\n}\ninterface QueryInitializer<TableName extends TableNames> {\n collect(): Promise<Doc<TableName>[]>;\n filter(predicate: (q: FilterBuilder) => unknown): QueryInitializer<TableName>;\n first(): Promise<Doc<TableName> | null>;\n order(direction: \"asc\" | \"desc\"): QueryInitializer<TableName>;\n take(limit: number): Promise<Doc<TableName>[]>;\n unique(): Promise<Doc<TableName> | null>;\n withIndex(\n indexName: string,\n range?: (q: IndexRangeBuilder) => unknown\n ): QueryInitializer<TableName>;\n withSearchIndex(\n indexName: string,\n search?: (q: IndexRangeBuilder) => unknown\n ): QueryInitializer<TableName>;\n}\nexport interface DatabaseReader {\n get<TableName extends TableNames>(\n id: unknown\n ): Promise<Doc<TableName> | null>;\n normalizeId?<TableName extends TableNames>(\n tableName: TableName,\n id: string\n ): Id<TableName> | null;\n query<TableName extends TableNames>(\n tableName: TableName\n ): QueryInitializer<TableName>;\n}\nexport type DatabaseWriter = DatabaseReader & {\n insert<TableName extends TableNames>(\n tableName: TableName,\n value: Record<string, unknown>\n ): Promise<Id<TableName>>;\n patch<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n replace<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n delete<TableName extends TableNames>(id: Id<TableName>): Promise<void>;\n};\ninterface Scheduler {\n runAfter(\n delayMs: number,\n functionReference: unknown,\n args?: unknown\n ): Promise<void>;\n}\ninterface AuthReader {\n getUserIdentity(): Promise<{\n readonly subject: string;\n readonly [claimName: string]: unknown;\n } | null>;\n}\ninterface RuntimeInvoker {\n runAction<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n runMutation<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n runQuery<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n}\nexport type QueryCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseReader;\n scheduler: Scheduler;\n};\nexport type MutationCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseWriter;\n scheduler: Scheduler;\n};\nexport type ActionCtx = RuntimeInvoker & {\n auth: AuthReader;\n scheduler: Scheduler;\n};\n\ntype ConvexFunctionBuilder<Ctx> = <\n Args = BoundaryValue,\n Result = BoundaryValue,\n>(definition: {\n args?: unknown;\n handler: (ctx: Ctx, args: Args) => Result;\n returns?: unknown;\n}) => unknown;\n\ntype OptionalHandlerConvexFunctionBuilder<Ctx> = <\n Args = BoundaryValue,\n Result = BoundaryValue,\n>(definition: {\n args?: unknown;\n handler?: (ctx: Ctx, args: Args) => Result;\n returns?: unknown;\n}) => unknown;\n\nexport const action =\n actionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const httpAction =\n httpActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalAction =\n internalActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalMutation =\n internalMutationGeneric as unknown as OptionalHandlerConvexFunctionBuilder<MutationCtx>;\nexport const internalQuery =\n internalQueryGeneric as unknown as OptionalHandlerConvexFunctionBuilder<QueryCtx>;\nexport const mutation =\n mutationGeneric as unknown as ConvexFunctionBuilder<MutationCtx>;\nexport const query = queryGeneric as unknown as ConvexFunctionBuilder<QueryCtx>;\n","interface GraphPrimitiveDebugEnvironment {\n process?: {\n env?: Record<string, string | undefined>;\n };\n}\n\nfunction isGraphPrimitiveDebugEnabled(): boolean {\n const env = (globalThis as GraphPrimitiveDebugEnvironment).process?.env;\n return (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG === \"1\" || env?.LUCERN_GRAPH_DEBUG === \"1\"\n );\n}\n\nexport function formatGraphPrimitiveError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error === null) {\n return \"null\";\n }\n if (error === undefined) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(error);\n } catch {\n return Object.prototype.toString.call(error);\n }\n}\n\nexport function debugGraphPrimitiveFallback(\n message: string,\n context?: Record<string, unknown>\n): void {\n if (!isGraphPrimitiveDebugEnabled()) {\n return;\n }\n console.debug(message, context ?? {});\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Matcher feedback helper types shared by graph-primitive review flows. */\nexport type LinkSuggestionStatus = \"suggested\" | \"approved\" | \"dismissed\";\n\nexport type MatcherReviewStatus =\n | \"pending\"\n | \"accepted\"\n | \"rejected\"\n | \"auto_accepted\"\n | \"superseded\";\n\ninterface MatcherFeedbackSummaryRow {\n matcherKey?: string | null;\n reviewStatus: MatcherReviewStatus;\n rewardScore?: number | null;\n surface?: string | null;\n}\n\nexport function isOperationalLinkStatus(\n status?: LinkSuggestionStatus | null\n): boolean {\n return status !== \"suggested\" && status !== \"dismissed\";\n}\n\nexport function mergeLinkSuggestionStatus(\n existing?: LinkSuggestionStatus | null,\n requested?: LinkSuggestionStatus | null\n): LinkSuggestionStatus | undefined {\n if (requested === undefined || requested === null) {\n return existing ?? undefined;\n }\n\n if (\n existing &&\n isOperationalLinkStatus(existing) &&\n !isOperationalLinkStatus(requested)\n ) {\n return existing;\n }\n\n return requested;\n}\n\nexport function resolveReviewedLinkStatus(\n requested: \"approved\" | \"dismissed\"\n): LinkSuggestionStatus {\n return requested;\n}\n\nexport function deriveMatcherReviewStatus(input: {\n explicitReviewStatus?: MatcherReviewStatus | null;\n linkStatus?: LinkSuggestionStatus | null;\n autoAccepted?: boolean;\n}): MatcherReviewStatus {\n if (input.explicitReviewStatus) {\n return input.explicitReviewStatus;\n }\n\n if (input.autoAccepted) {\n return \"auto_accepted\";\n }\n\n if (input.linkStatus === \"suggested\") {\n return \"pending\";\n }\n\n if (input.linkStatus === \"dismissed\") {\n return \"rejected\";\n }\n\n return \"accepted\";\n}\n\nexport function deriveMatcherRewardScore(\n reviewStatus: MatcherReviewStatus\n): number {\n switch (reviewStatus) {\n case \"accepted\":\n case \"auto_accepted\":\n return 1;\n case \"rejected\":\n return -1;\n default:\n return 0;\n }\n}\n\nexport function summarizeMatcherFeedback(rows: MatcherFeedbackSummaryRow[]) {\n const totals = {\n total: rows.length,\n pending: 0,\n accepted: 0,\n autoAccepted: 0,\n rejected: 0,\n superseded: 0,\n };\n\n const surfaces = new Set<string>();\n const matcherKeys = new Set<string>();\n let rewardSum = 0;\n\n for (const row of rows) {\n if (row.surface) {\n surfaces.add(row.surface);\n }\n if (row.matcherKey) {\n matcherKeys.add(row.matcherKey);\n }\n\n switch (row.reviewStatus) {\n case \"pending\":\n totals.pending += 1;\n break;\n case \"accepted\":\n totals.accepted += 1;\n break;\n case \"auto_accepted\":\n totals.autoAccepted += 1;\n break;\n case \"rejected\":\n totals.rejected += 1;\n break;\n case \"superseded\":\n totals.superseded += 1;\n break;\n default:\n break;\n }\n\n rewardSum += row.rewardScore ?? deriveMatcherRewardScore(row.reviewStatus);\n }\n\n const decided = totals.accepted + totals.autoAccepted + totals.rejected;\n const positive = totals.accepted + totals.autoAccepted;\n\n return {\n ...totals,\n decided,\n acceptanceRate: decided > 0 ? positive / decided : 0,\n averageReward: rows.length > 0 ? rewardSum / rows.length : 0,\n uniqueSurfaces: surfaces.size,\n uniqueMatchers: matcherKeys.size,\n };\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport type {\n DatabaseReader,\n DatabaseWriter,\n Id,\n MutationCtx,\n QueryCtx,\n} from \"./convex\";\nimport { api } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\ntype OverlayIdMode = \"legacy\" | \"topic\";\nconst LEGACY_SCOPE_FIELD = \"graphScopeProjectId\";\n\ninterface LegacyProjectThesis {\n confidence: number;\n lastUpdated: number;\n statement: string;\n}\n\ntype LegacyPillarImportance = \"critical\" | \"major\" | \"minor\" | \"not_applicable\";\n\ninterface LegacyThesisPillarConfig {\n aiSuggestion?: {\n suggestedAt: number;\n reasoning: string;\n };\n configuredAt?: number;\n configuredBy?: string;\n pillarImportance?: Record<string, LegacyPillarImportance | undefined>;\n}\n\ninterface LegacyBeliefArchitecture {\n lastCalculated: number;\n overallMaturity: number;\n pillarScores: Record<string, unknown>[];\n}\n\ninterface LegacyOntologyClassification {\n classifiedAt: number;\n functions: Record<string, unknown>[];\n overallConfidence: number;\n valueChains: Record<string, unknown>[];\n}\n\ntype TopicDocLike = Record<string, unknown> & {\n _id: string;\n _creationTime?: number;\n globalId?: string;\n name?: string;\n description?: string;\n type?: string;\n tenantId?: string;\n workspaceId?: string;\n status?: string;\n visibility?: string;\n createdBy?: string;\n /** FR.7 creator-grant: the exact acting principal recorded as owner-principal. */\n ownerPrincipalId?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectOverlay = Record<string, unknown> & {\n _id: string;\n projectId: string;\n topicId: string;\n storageProjectId: string;\n legacyProjectId?: string;\n name: string;\n type: string;\n description?: string;\n ownerId: string;\n /** FR.7 creator-grant: principal-shaped owner; distinct from clerkId-shaped ownerId. */\n ownerPrincipalId?: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n tags: string[];\n chatCount: number;\n artifactCount: number;\n lastActivityAt: number;\n thesis?: LegacyProjectThesis;\n wedgeHypothesis?: string;\n founderArchetype?: string;\n investmentCriteria?: string[];\n sprintPhase?:\n | \"pre_sprint\"\n | \"readiness_check\"\n | \"thesis_crystallization\"\n | \"sprint_planning\"\n | \"active_sprint\"\n | \"theme_assembly\"\n | \"evolution\";\n currentSprintIndex?: number;\n thesisPillarConfig?: LegacyThesisPillarConfig;\n beliefArchitecture?: LegacyBeliefArchitecture;\n ontologyClassification?: LegacyOntologyClassification;\n _creationTime: number;\n createdAt: number;\n updatedAt: number;\n};\n\ninterface OverlayContext {\n db?: Pick<DatabaseReader, \"get\" | \"query\"> &\n Partial<Pick<DatabaseWriter, \"patch\">>;\n runMutation?: MutationCtx[\"runMutation\"];\n runQuery?: QueryCtx[\"runQuery\"];\n}\n\ninterface TopicPatchPlan {\n nextMetadata: Record<string, unknown>;\n patch: Record<string, unknown>;\n topicUpdateArgs: Record<string, unknown> & { id: string };\n}\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readNonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction readMetadata(topic: TopicDocLike): Record<string, unknown> {\n return topic.metadata && typeof topic.metadata === \"object\"\n ? topic.metadata\n : {};\n}\n\nfunction omitMetadataKey(\n metadata: Record<string, unknown>,\n key: string\n): Record<string, unknown> {\n const { [key]: _omitted, ...rest } = metadata;\n return rest;\n}\n\nfunction readLegacyProjectId(\n value: Record<string, unknown> | null | undefined\n): string | undefined {\n if (!value) {\n return;\n }\n return readNonEmptyString(value[LEGACY_SCOPE_FIELD]);\n}\n\nfunction coerceVisibility(\n value: unknown\n): TopicProjectOverlay[\"visibility\"] | undefined {\n return value === \"private\" ||\n value === \"team\" ||\n value === \"firm\" ||\n value === \"external\" ||\n value === \"public\"\n ? value\n : undefined;\n}\n\nfunction coerceStatus(\n value: unknown\n): TopicProjectOverlay[\"status\"] | undefined {\n return value === \"active\" || value === \"archived\" || value === \"watching\"\n ? value\n : undefined;\n}\n\nfunction mapProjectType(\n topic: TopicDocLike,\n metadata: Record<string, unknown>\n): string {\n const explicit = readNonEmptyString(metadata.projectType);\n if (explicit) {\n return explicit;\n }\n if (topic.type === \"theme\") {\n return \"thematic\";\n }\n return readNonEmptyString(topic.type) || \"general\";\n}\n\nfunction isProjectLikeTopic(topic: TopicDocLike): boolean {\n const metadata = readMetadata(topic);\n return (\n topic.type === \"theme\" ||\n topic.type === \"thematic\" ||\n topic.type === \"deal\" ||\n topic.type === \"monitoring\" ||\n readLegacyProjectId(topic) !== undefined ||\n readNonEmptyString(metadata.projectType) !== undefined\n );\n}\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = getErrorMessage(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found'\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n return (error as { message: string }).message;\n }\n return \"unknown error\";\n}\n\nasync function resolveTopicDoc(\n ctx: OverlayContext,\n scopeId: string\n): Promise<TopicDocLike | null> {\n if (ctx?.db && typeof ctx.db.get === \"function\") {\n try {\n const directTopic = (await ctx.db.get(\n scopeId as Id<\"topics\">\n )) as TopicDocLike | null;\n if (directTopic) {\n return directTopic;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by direct ID\",\n {\n error,\n scopeId,\n }\n );\n // Not a direct topics-table id.\n }\n }\n\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n\n try {\n const topic = await ctx.runQuery<TopicDocLike | null>(api.topics.get, {\n id: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by ID query\",\n {\n error,\n scopeId,\n }\n );\n // Fall through to legacy-scope lookup.\n }\n\n try {\n const topic = await ctx.runQuery<TopicDocLike | null>(\n api.topics.getByLegacyScopeId,\n {\n projectId: String(scopeId),\n }\n );\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by legacy scope ID\",\n { error, scopeId }\n );\n // Best-effort compat lookup only.\n }\n\n return null;\n}\n\nexport function materializeTopicProjectOverlay(\n topic: TopicDocLike,\n idMode: OverlayIdMode = \"legacy\"\n): TopicProjectOverlay {\n const metadata = readMetadata(topic);\n const topicId = String(topic._id);\n const legacyProjectId =\n readLegacyProjectId(topic) ||\n readLegacyProjectId(metadata) ||\n readNonEmptyString(metadata.legacyProjectId);\n const storageProjectId = legacyProjectId || topicId;\n const outwardId = idMode === \"topic\" ? topicId : storageProjectId;\n const visibility =\n coerceVisibility(topic.visibility) ||\n coerceVisibility(metadata.visibility) ||\n \"private\";\n const status =\n coerceStatus(topic.status) || coerceStatus(metadata.status) || \"active\";\n let createdAt = 0;\n if (typeof topic.createdAt === \"number\") {\n createdAt = topic.createdAt;\n } else if (typeof topic._creationTime === \"number\") {\n createdAt = topic._creationTime;\n }\n let updatedAt = createdAt;\n if (typeof topic.updatedAt === \"number\") {\n updatedAt = topic.updatedAt;\n } else if (typeof metadata.updatedAt === \"number\") {\n updatedAt = metadata.updatedAt;\n }\n\n return {\n ...metadata,\n _id: outwardId,\n projectId: outwardId,\n topicId,\n storageProjectId,\n legacyProjectId,\n name: readNonEmptyString(topic.name) || \"Untitled Theme\",\n type: mapProjectType(topic, metadata),\n description: readNonEmptyString(topic.description),\n ownerId:\n readNonEmptyString(metadata.ownerId) ||\n readNonEmptyString(topic.createdBy) ||\n \"system\",\n // FR.7 creator-grant: surface the principal-shaped owner field (column-first,\n // metadata fallback for legacy rows that recorded it in metadata).\n ownerPrincipalId:\n readNonEmptyString(topic.ownerPrincipalId) ||\n readNonEmptyString(metadata.ownerPrincipalId),\n // RR.1 carrier: preserve the nested metadata carrier so the kernel's\n // `checkProjectAccessDetailed` metadata-PRIMARY read\n // (`project.metadata?.ownerPrincipalId`) resolves the grant. The `...metadata`\n // spread above only flattens keys; it does not leave a nested `metadata`.\n metadata,\n sharedWith: readStringArray(metadata.sharedWith),\n visibility,\n tenantId:\n readNonEmptyString(topic.tenantId) ||\n readNonEmptyString(metadata.tenantId),\n workspaceId:\n readNonEmptyString(topic.workspaceId) ||\n readNonEmptyString(metadata.workspaceId),\n status,\n tags: readStringArray(metadata.tags),\n chatCount:\n typeof metadata.chatCount === \"number\"\n ? (metadata.chatCount as number)\n : 0,\n artifactCount:\n typeof metadata.artifactCount === \"number\"\n ? (metadata.artifactCount as number)\n : 0,\n lastActivityAt:\n typeof metadata.lastActivityAt === \"number\"\n ? (metadata.lastActivityAt as number)\n : updatedAt,\n _creationTime:\n typeof topic._creationTime === \"number\" ? topic._creationTime : createdAt,\n createdAt,\n updatedAt,\n };\n}\n\nexport async function resolveTopicProjectOverlay(\n ctx: OverlayContext,\n scopeId: string,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n if (options.projectLikeOnly !== false && !isProjectLikeTopic(topic)) {\n return null;\n }\n return materializeTopicProjectOverlay(topic, options.idMode);\n}\n\nexport async function listTopicProjectOverlays(\n ctx: OverlayContext,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay[]> {\n let allTopics: TopicDocLike[] = [];\n\n if (ctx?.db?.query && typeof ctx.db.query === \"function\") {\n try {\n allTopics = (await ctx.db.query(\"topics\").collect()) as TopicDocLike[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to read topics table; falling back to API\",\n { error }\n );\n allTopics = [];\n }\n }\n\n if (allTopics.length === 0 && typeof ctx.runQuery === \"function\") {\n allTopics =\n (((await ctx.runQuery(api.topics.list, {})) ?? []) as TopicDocLike[]) ||\n [];\n }\n\n return allTopics\n .filter(\n (topic) => options.projectLikeOnly === false || isProjectLikeTopic(topic)\n )\n .map((topic) => materializeTopicProjectOverlay(topic, options.idMode));\n}\n\nexport async function patchTopicProjectOverlay(\n ctx: OverlayContext,\n scopeId: string,\n value: Record<string, unknown>\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n\n const plan = buildTopicProjectOverlayPatchPlan(topic, value);\n await applyTopicProjectOverlayPatch(ctx, topic, plan);\n\n return materializeTopicProjectOverlay({\n ...topic,\n ...plan.patch,\n metadata: plan.nextMetadata,\n } as TopicDocLike);\n}\n\nfunction buildTopicProjectOverlayPatchPlan(\n topic: TopicDocLike,\n value: Record<string, unknown>\n): TopicPatchPlan {\n const plan: TopicPatchPlan = {\n nextMetadata: { ...readMetadata(topic) },\n patch: {},\n topicUpdateArgs: {\n id: String(topic._id),\n },\n };\n for (const [key, rawValue] of Object.entries(value)) {\n applyTopicProjectOverlayPatchEntry(plan, key, rawValue);\n }\n\n plan.patch.updatedAt = Date.now();\n plan.patch.metadata = plan.nextMetadata;\n plan.topicUpdateArgs.metadata = plan.nextMetadata;\n\n return plan;\n}\n\nfunction applyTopicProjectOverlayPatchEntry(\n plan: TopicPatchPlan,\n key: string,\n rawValue: unknown\n) {\n switch (key) {\n case \"_id\":\n case \"projectId\":\n case \"topicId\":\n case \"legacyProjectId\":\n case \"storageProjectId\":\n case \"updatedAt\":\n case \"createdAt\":\n return;\n case \"name\":\n case \"description\":\n plan.patch[key] = rawValue;\n plan.topicUpdateArgs[key] = rawValue;\n return;\n case \"tenantId\":\n case \"workspaceId\":\n case \"ownerId\":\n throw new Error(\n `patchTopicProjectOverlay cannot mutate ${key} via component-owned topics`\n );\n case \"status\":\n applyTopicStatusPatch(plan, rawValue);\n return;\n case \"visibility\":\n applyTopicVisibilityPatch(plan, rawValue);\n return;\n case \"type\":\n applyTopicProjectTypePatch(plan, rawValue);\n return;\n default:\n applyTopicMetadataPatch(plan, key, rawValue);\n }\n}\n\nfunction applyTopicStatusPatch(plan: TopicPatchPlan, rawValue: unknown) {\n const status = coerceStatus(rawValue);\n if (status) {\n plan.patch.status = status;\n plan.topicUpdateArgs.status = status;\n }\n}\n\nfunction applyTopicVisibilityPatch(plan: TopicPatchPlan, rawValue: unknown) {\n const visibility = coerceVisibility(rawValue);\n if (visibility) {\n plan.patch.visibility = visibility;\n plan.topicUpdateArgs.visibility = visibility;\n }\n}\n\nfunction applyTopicProjectTypePatch(plan: TopicPatchPlan, rawValue: unknown) {\n const projectType = readNonEmptyString(rawValue);\n if (projectType) {\n plan.nextMetadata.projectType = projectType;\n return;\n }\n plan.nextMetadata = omitMetadataKey(plan.nextMetadata, \"projectType\");\n}\n\nfunction applyTopicMetadataPatch(\n plan: TopicPatchPlan,\n key: string,\n rawValue: unknown\n) {\n if (rawValue === undefined) {\n plan.nextMetadata = omitMetadataKey(plan.nextMetadata, key);\n return;\n }\n plan.nextMetadata[key] = rawValue;\n}\n\nasync function applyTopicProjectOverlayPatch(\n ctx: OverlayContext,\n topic: TopicDocLike,\n plan: TopicPatchPlan\n): Promise<void> {\n if (typeof ctx.runMutation === \"function\") {\n try {\n await ctx.runMutation(api.topics.update, plan.topicUpdateArgs);\n } catch (error) {\n if (!canPatchTopicViaLocalDb(ctx, error)) {\n throw error;\n }\n await ctx.db.patch(topic._id as Id<\"topics\">, plan.patch);\n }\n } else if (ctx?.db && typeof ctx.db.patch === \"function\") {\n await ctx.db.patch(topic._id as Id<\"topics\">, plan.patch);\n } else {\n throw new Error(\n \"Cannot patch topic without component adapter (ctx.runMutation unavailable)\"\n );\n }\n}\n\nfunction canPatchTopicViaLocalDb(\n ctx: OverlayContext,\n error: unknown\n): ctx is {\n db: Pick<DatabaseReader, \"get\" | \"query\"> & Pick<DatabaseWriter, \"patch\">;\n} {\n return (\n isMissingLucernChildComponentError(error) &&\n Boolean(ctx?.db) &&\n typeof ctx.db?.patch === \"function\"\n );\n}\n\nexport function matchesTopicProjectOverlayAccess(\n accessibleProjectIds: Set<string>,\n project: {\n topicId: string;\n legacyProjectId?: string;\n storageProjectId?: string;\n }\n): boolean {\n return (\n accessibleProjectIds.has(project.storageProjectId || project.topicId) ||\n accessibleProjectIds.has(project.topicId) ||\n (typeof project.legacyProjectId === \"string\" &&\n accessibleProjectIds.has(project.legacyProjectId))\n );\n}\n","/** Data-source resolver wiring for the graph-primitives module. */\n\nimport type {\n GraphPrimitivesAppResolverContext,\n GraphPrimitivesAppResolvers,\n} from \"./resolverTypes\";\nimport {\n listTopicProjectOverlays,\n patchTopicProjectOverlay,\n resolveTopicProjectOverlay,\n} from \"./topicProjectOverlay\";\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = getErrorMessage(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found'\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n return (error as { message: string }).message;\n }\n return \"unknown error\";\n}\n\nfunction isAdvisoryTopicPatch(value: Record<string, unknown>): boolean {\n const advisoryKeys = new Set([\"lastActivityAt\", \"updatedAt\"]);\n const keys = Object.keys(value);\n return keys.length > 0 && keys.every((key) => advisoryKeys.has(key));\n}\n\nasync function patchProjectWithTolerance(\n ctx: GraphPrimitivesAppResolverContext,\n projectId: string,\n value: Record<string, unknown>\n): Promise<void> {\n try {\n await patchTopicProjectOverlay(ctx, projectId, value);\n } catch (error) {\n if (\n !(\n isAdvisoryTopicPatch(value) && isMissingLucernChildComponentError(error)\n )\n ) {\n throw error;\n }\n\n console.warn(\n \"[lucern graph-primitives] Non-fatal advisory topic patch failure\",\n {\n projectId,\n keys: Object.keys(value),\n error: getErrorMessage(error),\n }\n );\n }\n}\n\nfunction defaultResolvers(): GraphPrimitivesAppResolvers {\n return {\n getProject: (ctx, projectId) =>\n resolveTopicProjectOverlay(ctx, projectId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n }),\n patchProject: (ctx, projectId, value) =>\n patchProjectWithTolerance(ctx, projectId, value),\n listTopics: (ctx) =>\n listTopicProjectOverlays(ctx, {\n idMode: \"legacy\",\n }),\n getFinalArtifact: (ctx, artifactId) => ctx.db.get(artifactId),\n };\n}\n\nlet resolverOverrides: Partial<GraphPrimitivesAppResolvers> = {};\n\nexport function configureGraphPrimitivesAppResolvers(\n overrides: Partial<GraphPrimitivesAppResolvers>\n): void {\n resolverOverrides = {\n ...resolverOverrides,\n ...overrides,\n };\n}\n\nexport function resetGraphPrimitivesAppResolvers(): void {\n resolverOverrides = {};\n}\n\nexport function resolveGraphPrimitivesAppResolvers(\n _ctx: GraphPrimitivesAppResolverContext\n): GraphPrimitivesAppResolvers {\n return {\n ...defaultResolvers(),\n ...resolverOverrides,\n };\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport type { Id } from \"./convex\";\nimport { api as appApi } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScopeProjectId\";\n\ntype UnknownRecord = Record<string, unknown>;\n\ninterface TopicScopeContext {\n db: {\n get(id: string): Promise<unknown>;\n query(tableName: string): TopicScopeQuery;\n };\n runQuery?: <TResult>(fnRef: unknown, args: unknown) => Promise<TResult>;\n}\n\ninterface TopicScopeQuery {\n collect(): Promise<unknown[]>;\n first(): Promise<unknown | null>;\n withIndex(\n indexName: string,\n range?: (q: TopicScopeIndexRangeBuilder) => unknown\n ): TopicScopeQuery;\n}\n\ninterface TopicScopeIndexRangeBuilder {\n eq(field: string, value: unknown): TopicScopeIndexRangeBuilder;\n}\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport interface TopicProjectScope {\n projectId?: string;\n source: \"topic\" | \"project_mapped_topic\" | \"topic_inferred\" | \"topic_node\";\n tenantId?: string;\n topicId: Id<\"topics\">;\n workspaceId?: string;\n}\n\n/**\n * RR.5 (legacy topics-table retirement) — graph-primitives mirror of the\n * kernel's epistemicNodes-first topic-scope fallback. Kept in lockstep with\n * `packages/reasoning-kernel/src/adapters/lib/topicScope.ts`\n * (`tests/unit/convex/topic-scope-fallbacks.test.ts` asserts parity).\n *\n * Resolves a topic that exists only as `epistemicNodes(nodeType=\"topic\")` —\n * the write-of-record — when no legacy `topics` row backs the ref, returning the\n * node's `topicId` self-key so scoped beliefs/evidence/questions stay reachable.\n * See the kernel module for the full silent-empty-result rationale.\n */\ninterface TopicNodeScopeDoc {\n _id: string | Id<\"epistemicNodes\">;\n globalId?: string;\n metadata?: UnknownRecord;\n nodeType?: string;\n topicId?: string;\n}\n\nasync function resolveTopicNodeScopeOrNull(\n ctx: TopicScopeContext,\n ref: string\n): Promise<TopicProjectScope | null> {\n if (!ctx?.db || typeof ctx.db.query !== \"function\") {\n return null;\n }\n\n let node: TopicNodeScopeDoc | null = null;\n\n // 1. The ref IS the topic node's UUIDv7 globalId.\n try {\n const byGlobalId = (await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", ref))\n .first()) as TopicNodeScopeDoc | null;\n if (byGlobalId && byGlobalId.nodeType === \"topic\") {\n node = byGlobalId;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] topic-node scope lookup by globalId failed\",\n { error, ref }\n );\n }\n\n if (!node) {\n return null;\n }\n\n const scopeKey =\n normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);\n if (!scopeKey) {\n return null;\n }\n\n return {\n topicId: scopeKey as Id<\"topics\">,\n projectId: asMappedProjectId(node),\n source: \"topic_node\",\n };\n}\n\ninterface MaterializedTopicNodeDoc {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n}\n\nfunction asMappedProjectId(\n topic: Pick<TopicDoc, \"metadata\"> | TopicNodeScopeDoc | null | undefined\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(\n (topic as UnknownRecord)[LEGACY_SCOPE_FIELD]\n );\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = topic.metadata || {};\n const candidate =\n (metadata as UnknownRecord)[LEGACY_SCOPE_FIELD] ||\n (metadata as UnknownRecord).legacyProjectId ||\n (metadata as UnknownRecord).projectId ||\n (metadata as UnknownRecord).scopeProjectId;\n return typeof candidate === \"string\"\n ? normalizeScopeValue(candidate)\n : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(\n ctx: TopicScopeContext,\n scopeId: string\n): Promise<TopicDoc[]> {\n const query = ctx.db.query(\"topics\") as TopicScopeQuery;\n try {\n return (await query\n .withIndex(\"by_graph_scope_project\", (q) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId)\n )\n .collect()) as TopicDoc[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve scope alias via index\",\n {\n error,\n scopeId,\n }\n );\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await query.collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: TopicScopeContext,\n topicId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by host query\",\n {\n error,\n topicId,\n }\n );\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: TopicScopeContext,\n legacyScopeId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by legacy scope\",\n {\n error,\n legacyScopeId,\n }\n );\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: TopicScopeContext,\n topic: TopicDoc\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) {\n break;\n }\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) {\n break;\n }\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: TopicScopeContext,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string }\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n return await resolveScopeFromTopicId(ctx, args.topicId);\n }\n\n if (args.projectId) {\n return await resolveScopeFromLegacyProjectId(ctx, args.projectId);\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\"\n );\n}\n\nasync function resolveScopeFromTopicId(\n ctx: TopicScopeContext,\n topicId: Id<\"topics\"> | string\n): Promise<TopicProjectScope> {\n const topic = await resolveTopicDocFromTopicId(ctx, topicId);\n if (topic) {\n return await buildTopicScope(ctx, topic, \"topic\");\n }\n\n const nodeScope = await resolveTopicNodeScopeOrNull(ctx, String(topicId));\n if (nodeScope) {\n return nodeScope;\n }\n throw new Error(`Topic not found: ${String(topicId)}`);\n}\n\nasync function resolveTopicDocFromTopicId(\n ctx: TopicScopeContext,\n topicId: Id<\"topics\"> | string\n): Promise<TopicDoc | null> {\n const direct = await tryReadTopicDoc(ctx, topicId, {\n failureLog: \"[topicScope] Failed to load topic by direct id\",\n idLogKey: \"topicId\",\n });\n if (direct) {\n return direct;\n }\n\n const hostTopic = await tryResolveHostTopicById(ctx, String(topicId));\n if (hostTopic) {\n return hostTopic;\n }\n\n return (\n pickPrimaryTopic(await findTopicsByScopeAlias(ctx, String(topicId))) ?? null\n );\n}\n\nasync function resolveScopeFromLegacyProjectId(\n ctx: TopicScopeContext,\n legacyProjectId: string\n): Promise<TopicProjectScope> {\n const directTopic = await resolveDirectLegacyProjectTopic(\n ctx,\n legacyProjectId\n );\n if (directTopic) {\n return await buildTopicScope(ctx, directTopic, \"topic_inferred\", {\n fallbackProjectId: legacyProjectId,\n });\n }\n\n const primary = pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, legacyProjectId)\n );\n if (primary) {\n return await buildTopicScope(ctx, primary, \"project_mapped_topic\", {\n fallbackProjectId: legacyProjectId,\n });\n }\n\n const nodeScope = await resolveTopicNodeScopeOrNull(ctx, legacyProjectId);\n if (nodeScope) {\n return {\n ...nodeScope,\n projectId: nodeScope.projectId ?? legacyProjectId,\n };\n }\n\n throw new Error(\n `Legacy project scope ${legacyProjectId} has no mapped topic.`\n );\n}\n\nasync function resolveDirectLegacyProjectTopic(\n ctx: TopicScopeContext,\n legacyProjectId: string\n): Promise<TopicDoc | null> {\n const directTopic = await tryReadTopicDoc(ctx, legacyProjectId, {\n failureLog: \"[topicScope] Failed to load direct project topic\",\n idLogKey: \"projectId\",\n });\n return directTopic ?? tryResolveHostTopicByLegacyScope(ctx, legacyProjectId);\n}\n\nasync function tryReadTopicDoc(\n ctx: TopicScopeContext,\n id: Id<\"topics\"> | string,\n log: { failureLog: string; idLogKey: \"projectId\" | \"topicId\" }\n): Promise<TopicDoc | null> {\n try {\n return (await ctx.db.get(id)) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(log.failureLog, {\n error,\n [log.idLogKey]: id,\n });\n return null;\n }\n}\n\nasync function buildTopicScope(\n ctx: TopicScopeContext,\n topic: TopicDoc,\n source: TopicProjectScope[\"source\"],\n options: { fallbackProjectId?: string } = {}\n): Promise<TopicProjectScope> {\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n return {\n topicId: topic._id,\n ...(mapped || options.fallbackProjectId\n ? { projectId: mapped ?? options.fallbackProjectId }\n : {}),\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source,\n };\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","/**\n * questionEvidenceLinks module implementation.\n */\n// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n\nimport { checkProjectAccess } from \"@lucern/access-control/access\";\nimport { generateUuidV7 } from \"@lucern/contracts/ids\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal, mutation, query } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport {\n deriveMatcherReviewStatus,\n isOperationalLinkStatus,\n type LinkSuggestionStatus,\n mergeLinkSuggestionStatus,\n resolveReviewedLinkStatus,\n} from \"./matcherFeedbackUtils\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\n\nconst questionIdUnion = v.id(\"epistemicNodes\");\nconst insightIdUnion = v.id(\"epistemicNodes\");\nconst suggestionStatusValidator = v.union(\n v.literal(\"suggested\"),\n v.literal(\"approved\"),\n v.literal(\"dismissed\")\n);\nconst matcherMetadataValidator = v.object({\n surface: v.string(),\n matcherFamily: v.optional(v.string()),\n matcherKey: v.optional(v.string()),\n matcherVersion: v.optional(v.string()),\n reviewStatus: v.optional(\n v.union(\n v.literal(\"pending\"),\n v.literal(\"accepted\"),\n v.literal(\"rejected\"),\n v.literal(\"auto_accepted\"),\n v.literal(\"superseded\")\n )\n ),\n configSnapshot: v.optional(v.any()),\n signalSnapshot: v.optional(v.any()),\n outcomeMetadata: v.optional(v.any()),\n});\n\ninterface MatcherMetadata {\n configSnapshot?: unknown;\n matcherFamily?: string;\n matcherKey?: string;\n matcherVersion?: string;\n outcomeMetadata?: unknown;\n reviewStatus?:\n | \"pending\"\n | \"accepted\"\n | \"rejected\"\n | \"auto_accepted\"\n | \"superseded\";\n signalSnapshot?: unknown;\n surface: string;\n}\n\ntype EvidenceImpact = \"supports\" | \"contradicts\" | \"neutral\";\n\ninterface QuestionEvidenceLinkRow {\n _id: Id<\"questionEvidenceLinks\">;\n createdAt: number;\n createdBy: string;\n helpsAnswer: boolean;\n impact?: EvidenceImpact;\n impactScore?: number;\n insightId: Id<\"epistemicNodes\">;\n questionId: Id<\"epistemicNodes\">;\n rationale?: string;\n relevance?: number;\n status?: LinkSuggestionStatus;\n}\n\ninterface QuestionEvidenceLinkWithInsight extends QuestionEvidenceLinkRow {\n insight: EpistemicNodeRow | null;\n}\n\ninterface EpistemicNodeRow {\n _creationTime?: number;\n _id: Id<\"epistemicNodes\">;\n canonicalText?: string;\n createdAt?: number;\n globalId?: string;\n metadata?: Record<string, unknown>;\n nodeType?: string;\n projectId?: string;\n status?: string;\n title?: string;\n topicId?: string | Id<\"topics\">;\n verificationStatus?: string;\n}\n\ninterface EpistemicEdgeRow {\n _id: Id<\"epistemicEdges\">;\n context?: string;\n createdAt: number;\n createdBy?: string;\n fromGlobalId?: string;\n fromNodeId?: Id<\"epistemicNodes\">;\n globalId?: string;\n weight?: number;\n}\n\ninterface EvidenceEdgeDetail {\n _creationTime: number;\n _id: Id<\"epistemicEdges\">;\n createdAt: number;\n impact?: EvidenceImpact;\n impactScore: number;\n insight: {\n _id: Id<\"epistemicNodes\">;\n _creationTime: number | undefined;\n insight: string | null;\n text: string | null;\n title: string | null;\n canonicalText: string | null;\n source: string | null;\n sourceUrl: string | null;\n verificationStatus: string;\n };\n insightId: Id<\"epistemicNodes\">;\n questionId: Id<\"epistemicNodes\">;\n rationale: string | null;\n userId: string | undefined;\n}\n\ninterface CreateQuestionEvidenceLinkArgs {\n createdBy: string;\n helpsAnswer: boolean;\n impact?: EvidenceImpact;\n impactScore?: number;\n insightId: Id<\"epistemicNodes\">;\n matcherMetadata?: MatcherMetadata;\n questionId: Id<\"epistemicNodes\">;\n rationale?: string;\n relevance?: number;\n status?: LinkSuggestionStatus;\n}\n\ninterface UpdateImpactArgs {\n impact?: EvidenceImpact;\n impactScore?: number;\n linkId: Id<\"questionEvidenceLinks\">;\n userId: string;\n}\n\ninterface ReviewSuggestionArgs {\n linkId: Id<\"questionEvidenceLinks\">;\n reason?: string;\n status: \"approved\" | \"dismissed\";\n userId: string;\n}\n\ninterface RemoveQuestionEvidenceLinkArgs {\n linkId: Id<\"questionEvidenceLinks\">;\n userId: string;\n}\n\ninterface QuestionEvidenceByQuestionArgs {\n questionId: Id<\"epistemicNodes\">;\n}\n\ninterface QuestionEvidenceByInsightArgs {\n insightId: Id<\"epistemicNodes\">;\n}\n\ninterface ProjectQuestionEvidenceArgs {\n limit?: number;\n projectId?: string;\n topicId?: string;\n userId: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n return typeof value === \"string\" && value.length > 0\n ? (value as Id<TableName>)\n : null;\n}\n\nfunction readOptionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readRequiredNumber(value: unknown, fieldName: string): number {\n const numberValue = readOptionalNumber(value);\n if (numberValue === undefined) {\n throw new Error(`questionEvidenceLinks row has invalid ${fieldName}.`);\n }\n return numberValue;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === \"string\")\n : [];\n}\n\nfunction readLinkSuggestionStatus(\n value: unknown\n): LinkSuggestionStatus | undefined {\n if (value === undefined) {\n return;\n }\n if (value === \"suggested\" || value === \"approved\" || value === \"dismissed\") {\n return value;\n }\n throw new Error(\"questionEvidenceLinks row has invalid status.\");\n}\n\nfunction readEvidenceImpact(value: unknown): EvidenceImpact | undefined {\n if (value === undefined) {\n return;\n }\n if (value === \"supports\" || value === \"contradicts\" || value === \"neutral\") {\n return value;\n }\n throw new Error(\"questionEvidenceLinks row has invalid impact.\");\n}\n\nfunction readMatcherReviewStatus(\n value: unknown\n): MatcherMetadata[\"reviewStatus\"] {\n if (value === undefined) {\n return;\n }\n if (\n value === \"pending\" ||\n value === \"accepted\" ||\n value === \"rejected\" ||\n value === \"auto_accepted\" ||\n value === \"superseded\"\n ) {\n return value;\n }\n throw new Error(\"matcher metadata has invalid reviewStatus.\");\n}\n\nfunction readMatcherMetadata(value: unknown): MatcherMetadata | undefined {\n if (value === undefined) {\n return;\n }\n if (!isRecord(value) || typeof value.surface !== \"string\") {\n throw new Error(\"matcher metadata must include a string surface.\");\n }\n return {\n configSnapshot: value.configSnapshot,\n matcherFamily: readOptionalString(value.matcherFamily),\n matcherKey: readOptionalString(value.matcherKey),\n matcherVersion: readOptionalString(value.matcherVersion),\n outcomeMetadata: value.outcomeMetadata,\n reviewStatus: readMatcherReviewStatus(value.reviewStatus),\n signalSnapshot: value.signalSnapshot,\n surface: value.surface,\n };\n}\n\nfunction readMetadata(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nfunction readEpistemicNode(value: unknown): EpistemicNodeRow | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = readConvexId<\"epistemicNodes\">(value._id);\n if (!id) {\n return null;\n }\n return {\n _creationTime: readOptionalNumber(value._creationTime),\n _id: id,\n canonicalText: readOptionalString(value.canonicalText),\n createdAt: readOptionalNumber(value.createdAt),\n globalId: readOptionalString(value.globalId),\n metadata: readMetadata(value.metadata),\n nodeType: readOptionalString(value.nodeType),\n projectId: readOptionalString(value.projectId),\n status: readOptionalString(value.status),\n title: readOptionalString(value.title),\n topicId: readOptionalString(value.topicId) as string | Id<\"topics\">,\n verificationStatus: readOptionalString(value.verificationStatus),\n };\n}\n\nfunction requireEpistemicNode(\n value: unknown,\n message: string\n): EpistemicNodeRow {\n const node = readEpistemicNode(value);\n if (!node) {\n throw new Error(message);\n }\n return node;\n}\n\nfunction readQuestionEvidenceLink(\n value: unknown,\n context = \"questionEvidenceLinks row\"\n): QuestionEvidenceLinkRow {\n if (!isRecord(value)) {\n throw new Error(`${context} must be an object.`);\n }\n const id = readConvexId<\"questionEvidenceLinks\">(value._id);\n const questionId = readConvexId<\"epistemicNodes\">(value.questionId);\n const insightId = readConvexId<\"epistemicNodes\">(value.insightId);\n const createdBy = readOptionalString(value.createdBy);\n if (!(id && questionId && insightId && createdBy)) {\n throw new Error(`${context} has invalid required identifiers.`);\n }\n if (typeof value.helpsAnswer !== \"boolean\") {\n throw new Error(`${context} has invalid helpsAnswer.`);\n }\n return {\n _id: id,\n createdAt: readRequiredNumber(value.createdAt, \"createdAt\"),\n createdBy,\n helpsAnswer: value.helpsAnswer,\n impact: readEvidenceImpact(value.impact),\n impactScore: readOptionalNumber(value.impactScore),\n insightId,\n questionId,\n rationale: readOptionalString(value.rationale),\n relevance: readOptionalNumber(value.relevance),\n status: readLinkSuggestionStatus(value.status),\n };\n}\n\nfunction readQuestionEvidenceLinks(\n values: unknown[]\n): QuestionEvidenceLinkRow[] {\n return values.map((value, index) =>\n readQuestionEvidenceLink(value, `questionEvidenceLinks[${index}]`)\n );\n}\n\nfunction readEpistemicEdge(value: unknown): EpistemicEdgeRow | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = readConvexId<\"epistemicEdges\">(value._id);\n const createdAt = readOptionalNumber(value.createdAt);\n if (!(id && createdAt !== undefined)) {\n return null;\n }\n return {\n _id: id,\n context: readOptionalString(value.context),\n createdAt,\n createdBy: readOptionalString(value.createdBy),\n fromGlobalId: readOptionalString(value.fromGlobalId),\n fromNodeId: readConvexId<\"epistemicNodes\">(value.fromNodeId) ?? undefined,\n globalId: readOptionalString(value.globalId),\n weight: readOptionalNumber(value.weight),\n };\n}\n\nasync function fetchOperationalQuestionEvidenceLinks(\n ctx: QueryCtx,\n questionId: Id<\"epistemicNodes\">\n): Promise<QuestionEvidenceLinkWithInsight[]> {\n const links = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", questionId))\n .collect()\n );\n\n return await Promise.all(\n links\n .filter((link) => isOperationalLinkStatus(link.status))\n .map(async (link) => {\n const insight = readEpistemicNode(await ctx.db.get(link.insightId));\n return {\n ...link,\n insight,\n };\n })\n );\n}\n\nfunction calculateEdgeImpact(edgeWeight: number | undefined): number {\n return edgeWeight == null ? 0 : Math.round(edgeWeight * 10);\n}\n\nasync function buildEvidenceDetailFromEdge(\n ctx: QueryCtx,\n edge: EpistemicEdgeRow,\n questionId: Id<\"epistemicNodes\">,\n seenEvidenceIds: Set<string>\n): Promise<EvidenceEdgeDetail | null> {\n if (!edge.fromNodeId) {\n return null;\n }\n\n const fromNodeId = String(edge.fromNodeId);\n if (seenEvidenceIds.has(fromNodeId)) {\n return null;\n }\n seenEvidenceIds.add(fromNodeId);\n\n const evidenceNode = readEpistemicNode(await ctx.db.get(edge.fromNodeId));\n if (\n evidenceNode?.nodeType !== \"evidence\" ||\n evidenceNode.status !== \"active\"\n ) {\n return null;\n }\n\n const meta = evidenceNode.metadata || {};\n const impactScore = calculateEdgeImpact(edge.weight);\n\n return {\n _id: edge._id,\n _creationTime: edge.createdAt,\n questionId,\n insightId: edge.fromNodeId,\n impact: deriveImpact(impactScore, undefined),\n impactScore,\n rationale: edge.context ?? null,\n userId: edge.createdBy,\n createdAt: edge.createdAt,\n insight: {\n _id: evidenceNode._id,\n _creationTime: evidenceNode.createdAt,\n insight:\n evidenceNode.canonicalText ||\n evidenceNode.title ||\n readOptionalString(meta.snippet) ||\n null,\n text:\n evidenceNode.canonicalText ||\n evidenceNode.title ||\n readOptionalString(meta.snippet) ||\n null,\n title: evidenceNode.title ?? null,\n canonicalText: evidenceNode.canonicalText ?? null,\n source: readOptionalString(meta.sourceTitle) ?? null,\n sourceUrl: readOptionalString(meta.sourceUrl) ?? null,\n verificationStatus: evidenceNode.verificationStatus ?? \"unverified\",\n },\n };\n}\n\nasync function fetchDerivedFromEdgesWithDetails(\n ctx: QueryCtx,\n questionId: Id<\"epistemicNodes\">,\n seenEvidenceIds: Set<string>\n): Promise<EvidenceEdgeDetail[]> {\n const edges = (\n await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", questionId).eq(\"edgeType\", \"derived_from\")\n )\n .collect()\n ).flatMap((edge) => {\n const edgeRow = readEpistemicEdge(edge);\n return edgeRow ? [edgeRow] : [];\n });\n\n const rows: EvidenceEdgeDetail[] = [];\n for (const edge of edges) {\n const edgeRow = await buildEvidenceDetailFromEdge(\n ctx,\n edge,\n questionId,\n seenEvidenceIds\n );\n if (edgeRow) {\n rows.push(edgeRow);\n }\n }\n\n return rows;\n}\n\nfunction deriveImpact(\n impactScore: number | undefined,\n fallback: \"supports\" | \"contradicts\" | \"neutral\" | undefined\n): \"supports\" | \"contradicts\" | \"neutral\" | undefined {\n if (impactScore === undefined) {\n return fallback;\n }\n if (impactScore > 0) {\n return \"supports\";\n }\n if (impactScore < 0) {\n return \"contradicts\";\n }\n return \"neutral\";\n}\n\nfunction readEpistemicMetadata(\n node: Pick<EpistemicNodeRow, \"metadata\"> | null | undefined\n): Record<string, unknown> {\n return node?.metadata ?? {};\n}\n\nasync function markProjectGraphDirty(\n ctx: MutationCtx,\n projectId: string | undefined | null\n): Promise<void> {\n if (!projectId) {\n return;\n }\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n { projectId }\n );\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(ctx, projectId, {\n lastActivityAt: Date.now(),\n });\n}\n\nasync function recordMatcherDecision(\n ctx: MutationCtx,\n args: {\n questionNode: EpistemicNodeRow;\n questionId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n linkId: string;\n linkStatus?: LinkSuggestionStatus;\n matcherMetadata?: MatcherMetadata;\n reviewedBy?: string;\n decisionReason?: string;\n }\n): Promise<void> {\n if (!args.matcherMetadata) {\n return;\n }\n\n await ctx.runMutation(\"matcherFeedback:recordDecision\", {\n projectId: args.questionNode.projectId,\n topicId: args.questionNode.topicId,\n surface: args.matcherMetadata.surface,\n matcherFamily: args.matcherMetadata.matcherFamily,\n matcherKey: args.matcherMetadata.matcherKey,\n matcherVersion: args.matcherMetadata.matcherVersion,\n sourceEntityId: String(args.insightId),\n targetEntityId: String(args.questionId),\n suggestionTable: \"questionEvidenceLinks\",\n suggestionId: args.linkId,\n reviewStatus: deriveMatcherReviewStatus({\n explicitReviewStatus: args.matcherMetadata.reviewStatus,\n linkStatus: args.linkStatus,\n }),\n reviewedBy: args.reviewedBy,\n decisionReason: args.decisionReason,\n configSnapshot: args.matcherMetadata.configSnapshot,\n signalSnapshot: args.matcherMetadata.signalSnapshot,\n outcomeMetadata: args.matcherMetadata.outcomeMetadata,\n });\n}\n\nasync function applyOperationalLinkEffects(\n ctx: MutationCtx,\n args: {\n questionNode: EpistemicNodeRow;\n questionId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n relevance?: number;\n rationale?: string;\n createdBy: string;\n }\n): Promise<void> {\n const meta = readEpistemicMetadata(args.questionNode);\n const currentRelated = readStringArray(meta.relatedInsightIds);\n if (!currentRelated.includes(args.insightId)) {\n await ctx.db.patch(args.questionId, {\n updatedAt: Date.now(),\n metadata: {\n ...meta,\n relatedInsightIds: [...currentRelated, args.insightId],\n },\n });\n }\n\n try {\n const questionNode = readEpistemicNode(await ctx.db.get(args.questionId));\n const evidenceNode = readEpistemicNode(await ctx.db.get(args.insightId));\n\n if (\n questionNode &&\n questionNode.nodeType === \"question\" &&\n evidenceNode &&\n evidenceNode.nodeType === \"evidence\" &&\n questionNode.globalId &&\n evidenceNode.globalId\n ) {\n const existingEdge = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q\n .eq(\"fromNodeId\", evidenceNode.globalId)\n .eq(\"toNodeId\", questionNode.globalId)\n )\n .first();\n\n if (!existingEdge) {\n const globalId = generateUuidV7();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId,\n fromGlobalId: evidenceNode.globalId,\n toGlobalId: questionNode.globalId,\n edgeType: \"derived_from\",\n weight: args.relevance ?? 0.5,\n context: args.rationale ?? \"Linked from question evidence links\",\n projectId: args.questionNode.projectId\n ? String(args.questionNode.projectId)\n : undefined,\n createdBy: args.createdBy,\n fromNodeType: \"evidence\",\n toNodeType: \"question\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n }\n }\n } catch (e) {\n console.error(\"[EpistemicSpine] Failed to create derived_from edge:\", e);\n }\n\n if (args.questionNode.projectId) {\n await ctx.scheduler.runAfter(0, \"verificationActions:deepVerifyEvidence\", {\n insightId: args.insightId,\n targetType: \"question\",\n targetId: args.questionId,\n projectId: args.questionNode.projectId,\n userId: args.createdBy,\n });\n }\n}\n\nasync function removeOperationalLinkEffects(\n ctx: MutationCtx,\n args: {\n questionId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n }\n): Promise<void> {\n const question = readEpistemicNode(await ctx.db.get(args.questionId));\n if (question) {\n const meta = readEpistemicMetadata(question);\n const currentRelated = readStringArray(meta.relatedInsightIds);\n await ctx.db.patch(args.questionId, {\n updatedAt: Date.now(),\n metadata: {\n ...meta,\n relatedInsightIds: currentRelated.filter((id) => id !== args.insightId),\n },\n });\n }\n\n try {\n const questionNode = readEpistemicNode(await ctx.db.get(args.questionId));\n const evidenceNode = readEpistemicNode(await ctx.db.get(args.insightId));\n\n if (\n questionNode &&\n questionNode.nodeType === \"question\" &&\n evidenceNode &&\n evidenceNode.nodeType === \"evidence\"\n ) {\n const edge = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", evidenceNode._id).eq(\"toNodeId\", questionNode._id)\n )\n .first();\n\n const edgeRow = readEpistemicEdge(edge);\n if (edgeRow?.globalId) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edgeRow.globalId,\n });\n await ctx.db.delete(edgeRow._id);\n }\n }\n } catch (e) {\n console.error(\"[EpistemicSpine] Failed to remove edge:\", e);\n }\n}\n\n/**\n * Question Evidence Links Management\n *\n * Links evidence (insights) to questions to track what evidence helps answer which questions.\n */\n\nexport const create = mutation({\n args: {\n questionId: questionIdUnion,\n insightId: insightIdUnion,\n helpsAnswer: v.boolean(),\n relevance: v.optional(v.number()),\n rationale: v.optional(v.string()),\n impactScore: v.optional(v.number()),\n impact: v.optional(\n v.union(\n v.literal(\"supports\"),\n v.literal(\"contradicts\"),\n v.literal(\"neutral\")\n )\n ),\n status: v.optional(suggestionStatusValidator),\n matcherMetadata: v.optional(matcherMetadataValidator),\n createdBy: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: CreateQuestionEvidenceLinkArgs) => {\n const matcherMetadata = readMatcherMetadata(args.matcherMetadata);\n const question = requireEpistemicNode(\n await ctx.db.get(args.questionId),\n \"Question not found\"\n );\n if (question.nodeType !== \"question\") {\n throw new Error(\"Question not found\");\n }\n\n const insight = requireEpistemicNode(\n await ctx.db.get(args.insightId),\n \"Insight not found\"\n );\n if (insight.nodeType !== \"evidence\") {\n throw new Error(\"Insight not found\");\n }\n\n const existingLinks = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", args.questionId))\n .collect()\n );\n\n const duplicate = existingLinks.find(\n (link) => link.insightId === args.insightId\n );\n\n const impactScore = args.impactScore;\n const derivedImpact = deriveImpact(impactScore, args.impact);\n\n if (duplicate) {\n const nextStatus = mergeLinkSuggestionStatus(\n duplicate.status,\n args.status\n );\n\n await ctx.db.patch(duplicate._id, {\n helpsAnswer: args.helpsAnswer,\n relevance: args.relevance,\n rationale: args.rationale,\n impactScore: args.impactScore,\n impact: derivedImpact,\n status: nextStatus,\n });\n\n if (\n isOperationalLinkStatus(nextStatus) &&\n !isOperationalLinkStatus(duplicate.status)\n ) {\n await applyOperationalLinkEffects(ctx, {\n questionNode: question,\n questionId: args.questionId,\n insightId: args.insightId,\n relevance: args.relevance,\n rationale: args.rationale,\n createdBy: args.createdBy,\n });\n }\n\n await recordMatcherDecision(ctx, {\n questionNode: question,\n questionId: args.questionId,\n insightId: args.insightId,\n linkId: duplicate._id,\n linkStatus: nextStatus,\n matcherMetadata,\n });\n\n await markProjectGraphDirty(ctx, question.projectId);\n return duplicate._id;\n }\n\n const linkId = await ctx.db.insert(\"questionEvidenceLinks\", {\n questionId: args.questionId,\n insightId: args.insightId,\n helpsAnswer: args.helpsAnswer,\n relevance: args.relevance,\n rationale: args.rationale,\n impactScore: args.impactScore,\n impact: derivedImpact,\n status: args.status,\n createdBy: args.createdBy,\n createdAt: Date.now(),\n });\n\n await recordMatcherDecision(ctx, {\n questionNode: question,\n questionId: args.questionId,\n insightId: args.insightId,\n linkId,\n linkStatus: args.status,\n matcherMetadata,\n });\n\n if (isOperationalLinkStatus(args.status)) {\n await applyOperationalLinkEffects(ctx, {\n questionNode: question,\n questionId: args.questionId,\n insightId: args.insightId,\n relevance: args.relevance,\n rationale: args.rationale,\n createdBy: args.createdBy,\n });\n }\n\n await markProjectGraphDirty(ctx, question.projectId);\n return linkId;\n },\n});\n\nexport const updateImpact = mutation({\n args: {\n linkId: v.id(\"questionEvidenceLinks\"),\n impactScore: v.optional(v.number()),\n impact: v.optional(\n v.union(\n v.literal(\"supports\"),\n v.literal(\"contradicts\"),\n v.literal(\"neutral\")\n )\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateImpactArgs) => {\n const rawLink = await ctx.db.get(args.linkId);\n if (!rawLink) {\n throw new Error(\"Link not found\");\n }\n const link = readQuestionEvidenceLink(rawLink, \"updateImpact.link\");\n\n const newImpactScore = args.impactScore;\n const newImpact = deriveImpact(newImpactScore, args.impact);\n\n const updateData: {\n impact?: \"supports\" | \"contradicts\" | \"neutral\";\n impactScore?: number;\n } = {};\n if (newImpact) {\n updateData.impact = newImpact;\n }\n if (newImpactScore !== undefined) {\n updateData.impactScore = newImpactScore;\n }\n\n await ctx.db.patch(args.linkId, updateData);\n const question = readEpistemicNode(await ctx.db.get(link.questionId));\n await markProjectGraphDirty(ctx, question?.projectId);\n\n return { success: true, newImpact, newImpactScore };\n },\n});\n\nexport const reviewSuggestion = mutation({\n args: {\n linkId: v.id(\"questionEvidenceLinks\"),\n status: v.union(v.literal(\"approved\"), v.literal(\"dismissed\")),\n userId: v.string(),\n reason: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: ReviewSuggestionArgs) => {\n const rawLink = await ctx.db.get(args.linkId);\n if (!rawLink) {\n throw new Error(\"Link not found\");\n }\n const link = readQuestionEvidenceLink(rawLink, \"reviewSuggestion.link\");\n\n const question = readEpistemicNode(await ctx.db.get(link.questionId));\n if (!question) {\n throw new Error(\"Question not found\");\n }\n\n let hasAccess = link.createdBy === args.userId;\n if (!hasAccess && question.projectId) {\n hasAccess = await checkProjectAccess(\n ctx,\n question.projectId,\n args.userId\n );\n }\n if (!hasAccess) {\n throw new Error(\"No permission to review this link\");\n }\n\n const previousStatus = link.status;\n const nextStatus = resolveReviewedLinkStatus(args.status);\n await ctx.db.patch(args.linkId, { status: nextStatus });\n\n if (nextStatus === \"approved\" && !isOperationalLinkStatus(previousStatus)) {\n await applyOperationalLinkEffects(ctx, {\n questionNode: question,\n questionId: link.questionId,\n insightId: link.insightId,\n relevance: link.relevance,\n rationale: link.rationale,\n createdBy: args.userId,\n });\n }\n if (nextStatus === \"dismissed\" && isOperationalLinkStatus(previousStatus)) {\n await removeOperationalLinkEffects(ctx, {\n questionId: link.questionId,\n insightId: link.insightId,\n });\n }\n\n await ctx.runMutation(\"matcherFeedback:recordDecision\", {\n projectId: question.projectId,\n topicId: question.topicId,\n sourceEntityId: String(link.insightId),\n targetEntityId: String(link.questionId),\n suggestionTable: \"questionEvidenceLinks\",\n suggestionId: args.linkId,\n reviewStatus: deriveMatcherReviewStatus({ linkStatus: nextStatus }),\n reviewedBy: args.userId,\n decisionReason: args.reason,\n outcomeMetadata: args.reason ? { reason: args.reason } : undefined,\n });\n\n await markProjectGraphDirty(ctx, question.projectId);\n return { success: true, status: nextStatus };\n },\n});\n\nexport const remove = mutation({\n args: {\n linkId: v.id(\"questionEvidenceLinks\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: RemoveQuestionEvidenceLinkArgs) => {\n const rawLink = await ctx.db.get(args.linkId);\n if (!rawLink) {\n throw new Error(\"Link not found\");\n }\n const link = readQuestionEvidenceLink(rawLink, \"remove.link\");\n if (link.createdBy !== args.userId) {\n throw new Error(\"Only the creator can remove this link\");\n }\n\n const question = readEpistemicNode(await ctx.db.get(link.questionId));\n if (isOperationalLinkStatus(link.status)) {\n await removeOperationalLinkEffects(ctx, {\n questionId: link.questionId,\n insightId: link.insightId,\n });\n }\n\n await ctx.db.delete(args.linkId);\n await markProjectGraphDirty(ctx, question?.projectId);\n },\n});\n\nexport const getByQuestion = query({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: QuestionEvidenceByQuestionArgs) => {\n const links = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", args.questionId))\n .collect()\n );\n\n return links.filter((link) => isOperationalLinkStatus(link.status));\n },\n});\n\nexport const getPendingSuggestions = query({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: QuestionEvidenceByQuestionArgs) => {\n const links = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", args.questionId))\n .collect()\n );\n\n return links.filter((link) => link.status === \"suggested\");\n },\n});\n\nexport const getByInsight = query({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: QuestionEvidenceByInsightArgs) => {\n const links = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_insightId\", (q) => q.eq(\"insightId\", args.insightId))\n .collect()\n );\n\n return links.filter((link) => isOperationalLinkStatus(link.status));\n },\n});\n\nexport const getEvidenceWithDetails = query({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: QuestionEvidenceByQuestionArgs) => {\n const questionNode = readEpistemicNode(await ctx.db.get(args.questionId));\n if (questionNode?.nodeType !== \"question\") {\n return [];\n }\n\n const linksWithInsight = await fetchOperationalQuestionEvidenceLinks(\n ctx,\n args.questionId\n );\n const filteredLinks = linksWithInsight.filter(\n (link): link is QuestionEvidenceLinkWithInsight => link.insight !== null\n );\n const seenEvidenceIds = new Set(\n filteredLinks.map((link) => String(link.insightId))\n );\n const edgeRows = await fetchDerivedFromEdgesWithDetails(\n ctx,\n args.questionId,\n seenEvidenceIds\n );\n\n const evidenceRows: Array<\n QuestionEvidenceLinkWithInsight | EvidenceEdgeDetail\n > = [...filteredLinks, ...edgeRows];\n\n return evidenceRows;\n },\n});\n\nexport const getByProject = query({\n args: {\n ...optionalScopeArgs,\n userId: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: ProjectQuestionEvidenceArgs) => {\n if (!args.projectId) {\n return [];\n }\n const hasAccess = await checkProjectAccess(\n ctx,\n args.projectId,\n args.userId\n );\n if (!hasAccess) {\n return [];\n }\n let scope: Awaited<ReturnType<typeof resolveTopicProjectScope>> | null;\n try {\n scope = await resolveTopicProjectScope(ctx, args);\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[questionEvidenceLinks] Failed to resolve topic scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n }\n );\n scope = null;\n }\n if (!scope) {\n return [];\n }\n\n const pageSize = Math.max(1, Math.min(Math.floor(args.limit ?? 300), 1000));\n const questionScanLimit = Math.min(pageSize * 2, 1000);\n\n const questions = (\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"question\")\n )\n .order(\"desc\")\n .take(questionScanLimit)\n ).flatMap((question) => {\n const row = readEpistemicNode(question);\n return row?.nodeType === \"question\" ? [row] : [];\n });\n\n const questionIds = questions.slice(0, pageSize).map((q) => q._id);\n const allLinks = await Promise.all(\n questionIds.map(async (questionId) => {\n const links = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", questionId))\n .collect()\n );\n return links.filter((link) => isOperationalLinkStatus(link.status));\n })\n );\n\n const flattenedLinks = allLinks.flat().slice(0, pageSize * 5);\n const questionDetails: Record<\n string,\n { _id: string; question: string; status: string }\n > = {};\n\n for (const question of questions) {\n const meta = question.metadata || {};\n questionDetails[String(question._id)] = {\n _id: String(question._id),\n question: question.canonicalText ?? question.title ?? \"\",\n status: readOptionalString(meta.status) ?? question.status ?? \"active\",\n };\n }\n\n return {\n links: flattenedLinks,\n questionDetails,\n };\n },\n});\n\nexport const getLinkedQuestionsForInsight = query({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: QuestionEvidenceByInsightArgs) => {\n const links = readQuestionEvidenceLinks(\n await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_insightId\", (q) => q.eq(\"insightId\", args.insightId))\n .collect()\n );\n\n const linkedQuestions = await Promise.all(\n links\n .filter((link) => isOperationalLinkStatus(link.status))\n .map(async (link) => {\n const question = readEpistemicNode(await ctx.db.get(link.questionId));\n return {\n linkId: link._id,\n questionId: link.questionId,\n helpsAnswer: link.helpsAnswer,\n relevance: link.relevance,\n rationale: link.rationale,\n createdBy: link.createdBy,\n createdAt: link.createdAt,\n question: question\n ? {\n _id: question._id,\n question: question.canonicalText || question.title || \"\",\n status: question.status,\n }\n : null,\n };\n })\n );\n\n return linkedQuestions.filter((row) => row.question !== null);\n },\n});\n"]}
|