@lucern/graph-primitives 0.1.0-alpha.3 → 0.3.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/beliefDecay.js +199 -18
- package/dist/beliefDecay.js.map +1 -1
- package/dist/beliefEvidenceLinks.js.map +1 -1
- package/dist/confidencePropagationDispatch.js.map +1 -1
- package/dist/contradictions.js.map +1 -1
- package/dist/entityBridge.js.map +1 -1
- package/dist/entityLifecycle.js.map +1 -1
- package/dist/epistemicAnswers.js +21 -36
- package/dist/epistemicAnswers.js.map +1 -1
- package/dist/epistemicBeliefs.js +92 -651
- package/dist/epistemicBeliefs.js.map +1 -1
- package/dist/epistemicContracts.js +65 -624
- package/dist/epistemicContracts.js.map +1 -1
- package/dist/epistemicEdges.js.map +1 -1
- package/dist/epistemicEvidence.js +71 -630
- package/dist/epistemicEvidence.js.map +1 -1
- package/dist/epistemicHelpers.js +3 -2
- package/dist/epistemicHelpers.js.map +1 -1
- package/dist/epistemicLinking.js.map +1 -1
- package/dist/epistemicNodes.js +49 -585
- package/dist/epistemicNodes.js.map +1 -1
- package/dist/epistemicQuestions.js +46 -590
- package/dist/epistemicQuestions.js.map +1 -1
- package/dist/epistemicSources.js +29 -565
- package/dist/epistemicSources.js.map +1 -1
- package/dist/evaluators/index.js +65 -624
- package/dist/evaluators/index.js.map +1 -1
- package/dist/index.js +304 -905
- package/dist/index.js.map +1 -1
- package/dist/ontologyApproval.js.map +1 -1
- package/dist/ontologyDefinitions.js.map +1 -1
- package/dist/ontologyRegistry.js.map +1 -1
- package/dist/projectionReconciliation.js.map +1 -1
- package/dist/questionEvidenceLinks.js +188 -2
- package/dist/questionEvidenceLinks.js.map +1 -1
- package/dist/workspaceIsolation.js +30 -581
- package/dist/workspaceIsolation.js.map +1 -1
- package/package.json +5 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../access-control/src/convex.ts","../../access-control/src/topicProjectOverlay.ts","../../access-control/src/projectGrantsBridge.ts","../../access-control/src/resolvers.ts","../../access-control/src/principalContext.ts","../../access-control/src/access.ts","../../access-control/src/auth.ts","../../schema-management/src/validators.ts","../src/convex.ts","../../confidence/src/v1/operations/subjectiveLogic/index.ts","../../confidence/src/v1/operations/scoring.ts","../../confidence/src/v1/operations/contradiction/detectTupleContradiction.ts","../../confidence/src/v1/operations/dynamics/cascade.ts","../../confidence/src/v1/operations/dynamics/defeat.ts","../../confidence/src/v1/operations/contracts/epistemicContract.ts","../../access-control/src/audience.ts","../../access-control/src/audienceRegistry.ts","../../schema-management/src/convex.ts","../../schema-management/src/enumValidation.ts","../src/beliefLifecycle.ts","../src/edges/contains.ts","../src/edges/utils.ts","../src/edges/contradicts.ts","../src/edges/dependsOn.ts","../src/edges/derivedFrom.ts","../src/edges/elaborates.ts","../src/edges/informs.ts","../src/edges/propagationTypes.ts","../src/edges/refutes.ts","../src/edges/supports.ts","../src/edges/tests.ts","../src/edges/index.ts","../../schema-management/src/shared/common.ts","../../schema-management/src/spine/tables/epistemicNodes.ts","../src/topicScope.ts","../src/workspaceIsolation.ts","../src/confidencePropagationDispatch.ts","../src/embeddingTrigger.ts","../src/globalId.ts","../src/logicalRoleInference.ts","../src/topicProjectOverlay.ts","../src/resolvers.ts","../src/epistemicBeliefs.ts","../src/evaluators/shared.ts","../src/evaluators/lintCheckerEvaluator.ts","../src/evaluators/sentryCheckerEvaluator.ts","../src/evaluators/testRunnerEvaluator.ts","../src/evaluators/tscCheckerEvaluator.ts","../src/evaluators/index.ts","../src/epistemicContracts.ts"],"names":["resolvedUser","user","api","anyApi","componentsGeneric","internalMutationGeneric","internalQueryGeneric","mutationGeneric","queryGeneric","opinion","internal","confidence","predictionMeta","v","sourceType","externalIds","LEGACY_SCOPE_FIELD","normalizeScopeValue","epistemicLayer","readNonEmptyString","readStringArray","readMetadata","readLegacyProjectId","coerceVisibility","coerceStatus","mapProjectType","isProjectLikeTopic","resolveTopicDoc","materializeTopicProjectOverlay","resolveTopicProjectOverlay","listTopicProjectOverlays","isMissingLucernChildComponentError","defaultResolvers","resolverOverrides","clamp01","content","query","parseConfig","parseDiagnostics","getMatchedDiagnostics","BUILT_IN_EVIDENTIAL_EVALUATOR","BUILT_IN_EVIDENTIAL_ALIASES","BUILT_IN_METRIC_CHECKER","BUILT_IN_REFERENCE_CHECK_COUNTER","BUILT_IN_TEMPORAL_DEADLINE","BUILT_IN_MARKET_INDEX_COMPARATOR"],"mappings":"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","file":"epistemicContracts.js","sourcesContent":["import {\n actionGeneric,\n anyApi,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\nexport const api = anyApi as any;\nexport const components = componentsGeneric() as any;\nexport const internal = anyApi as any;\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> = any;\nexport type DataModel = any;\nexport type ActionCtx = any;\nexport type DatabaseReader = any;\nexport type DatabaseWriter = any;\nexport type MutationCtx = any;\nexport type QueryCtx = any;\n\nexport const action = actionGeneric as any;\nexport const httpAction = httpActionGeneric as any;\nexport const internalAction = internalActionGeneric as any;\nexport const internalMutation = internalMutationGeneric as any;\nexport const internalQuery = internalQueryGeneric as any;\nexport const mutation = mutationGeneric as any;\nexport const query = queryGeneric as any;\n","import { api } from \"./convex\";\n\ntype OverlayIdMode = \"legacy\" | \"topic\";\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype TopicDocLike = Record<string, unknown> & {\n _id: string;\n _creationTime?: number;\n globalId?: string;\n name?: string;\n description?: string;\n type?: string;\n tenantId?: string;\n workspaceId?: string;\n status?: string;\n visibility?: string;\n createdBy?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectOverlay = Record<string, unknown> & {\n _id: string;\n projectId: string;\n topicId: string;\n storageProjectId: string;\n legacyProjectId?: string;\n name: string;\n type: string;\n description?: string;\n ownerId: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n tags: string[];\n chatCount: number;\n artifactCount: number;\n lastActivityAt: number;\n _creationTime: number;\n createdAt: number;\n updatedAt: number;\n};\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readNonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction readMetadata(topic: TopicDocLike): Record<string, unknown> {\n return topic.metadata && typeof topic.metadata === \"object\"\n ? topic.metadata\n : {};\n}\n\nfunction readLegacyProjectId(\n value: Record<string, unknown> | null | undefined\n): string | undefined {\n if (!value) {\n return;\n }\n return readNonEmptyString(value[LEGACY_SCOPE_FIELD]);\n}\n\nfunction coerceVisibility(\n value: unknown\n): TopicProjectOverlay[\"visibility\"] | undefined {\n return value === \"private\" ||\n value === \"team\" ||\n value === \"firm\" ||\n value === \"external\" ||\n value === \"public\"\n ? value\n : undefined;\n}\n\nfunction coerceStatus(\n value: unknown\n): TopicProjectOverlay[\"status\"] | undefined {\n return value === \"active\" || value === \"archived\" || value === \"watching\"\n ? value\n : undefined;\n}\n\nfunction mapProjectType(\n topic: TopicDocLike,\n metadata: Record<string, unknown>\n): string {\n const explicit = readNonEmptyString(metadata.projectType);\n if (explicit) {\n return explicit;\n }\n if (topic.type === \"theme\") {\n return \"thematic\";\n }\n return readNonEmptyString(topic.type) || \"general\";\n}\n\nfunction isProjectLikeTopic(topic: TopicDocLike): boolean {\n const metadata = readMetadata(topic);\n return (\n topic.type === \"theme\" ||\n topic.type === \"thematic\" ||\n topic.type === \"deal\" ||\n topic.type === \"monitoring\" ||\n readLegacyProjectId(topic) !== undefined ||\n readNonEmptyString(metadata.projectType) !== undefined\n );\n}\n\nasync function resolveTopicDoc(\n ctx: any,\n scopeId: string\n): Promise<TopicDocLike | null> {\n if (ctx?.db && typeof ctx.db.get === \"function\") {\n try {\n const directTopic = (await ctx.db.get(scopeId as any)) as TopicDocLike | null;\n if (directTopic) {\n return directTopic;\n }\n } catch {\n // Not a direct topics-table id.\n }\n }\n\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.get as any, {\n id: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch {\n // Fall through to legacy-scope lookup.\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.getByLegacyScopeId as any, {\n projectId: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch {\n // Best-effort compat lookup only.\n }\n\n return null;\n}\n\nfunction materializeTopicProjectOverlay(\n topic: TopicDocLike,\n idMode: OverlayIdMode = \"legacy\"\n): TopicProjectOverlay {\n const metadata = readMetadata(topic);\n const topicId = String(topic._id);\n const legacyProjectId =\n readLegacyProjectId(topic) ||\n readLegacyProjectId(metadata) ||\n readNonEmptyString(metadata.legacyProjectId);\n const storageProjectId = legacyProjectId || topicId;\n const outwardId = idMode === \"topic\" ? topicId : storageProjectId;\n const visibility =\n coerceVisibility(topic.visibility) ||\n coerceVisibility(metadata.visibility) ||\n \"private\";\n const status =\n coerceStatus(topic.status) || coerceStatus(metadata.status) || \"active\";\n const createdAt =\n typeof topic.createdAt === \"number\"\n ? topic.createdAt\n : typeof topic._creationTime === \"number\"\n ? topic._creationTime\n : 0;\n const updatedAt =\n typeof topic.updatedAt === \"number\"\n ? topic.updatedAt\n : typeof metadata.updatedAt === \"number\"\n ? (metadata.updatedAt as number)\n : createdAt;\n\n return {\n ...metadata,\n _id: outwardId,\n projectId: outwardId,\n topicId,\n storageProjectId,\n legacyProjectId,\n name: readNonEmptyString(topic.name) || \"Untitled Theme\",\n type: mapProjectType(topic, metadata),\n description: readNonEmptyString(topic.description),\n ownerId:\n readNonEmptyString(metadata.ownerId) ||\n readNonEmptyString(topic.createdBy) ||\n \"system\",\n sharedWith: readStringArray(metadata.sharedWith),\n visibility,\n tenantId:\n readNonEmptyString(topic.tenantId) ||\n readNonEmptyString(metadata.tenantId),\n workspaceId:\n readNonEmptyString(topic.workspaceId) ||\n readNonEmptyString(metadata.workspaceId),\n status,\n tags: readStringArray(metadata.tags),\n chatCount:\n typeof metadata.chatCount === \"number\" ? (metadata.chatCount as number) : 0,\n artifactCount:\n typeof metadata.artifactCount === \"number\"\n ? (metadata.artifactCount as number)\n : 0,\n lastActivityAt:\n typeof metadata.lastActivityAt === \"number\"\n ? (metadata.lastActivityAt as number)\n : updatedAt,\n _creationTime:\n typeof topic._creationTime === \"number\" ? topic._creationTime : createdAt,\n createdAt,\n updatedAt,\n };\n}\n\nexport async function resolveTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n if (options.projectLikeOnly !== false && !isProjectLikeTopic(topic)) {\n return null;\n }\n return materializeTopicProjectOverlay(topic, options.idMode);\n}\n\nexport async function listTopicProjectOverlays(\n ctx: any,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay[]> {\n let allTopics: TopicDocLike[] = [];\n\n if (ctx?.db?.query && typeof ctx.db.query === \"function\") {\n try {\n allTopics = (await ctx.db.query(\"topics\").collect()) as TopicDocLike[];\n } catch {\n allTopics = [];\n }\n }\n\n if (allTopics.length === 0 && typeof ctx.runQuery === \"function\") {\n allTopics =\n (((await ctx.runQuery(api.topics.list as any, {})) ?? []) as TopicDocLike[]) ||\n [];\n }\n\n return allTopics\n .filter(\n (topic) => options.projectLikeOnly === false || isProjectLikeTopic(topic)\n )\n .map((topic) => materializeTopicProjectOverlay(topic, options.idMode));\n}\n","import type { Id } from \"./convex\";\nimport { resolveTopicProjectOverlay } from \"./topicProjectOverlay.js\";\n\nconst PROJECT_GRANT_STATUSES = [\"active\", \"revoked\", \"expired\"] as const;\n\ntype ProjectGrantStatus = (typeof PROJECT_GRANT_STATUSES)[number];\n\ntype ProjectGrantRow = Record<string, unknown> & {\n _id: Id<\"projectGrants\">;\n topicId?: string;\n projectId?: string;\n principalId?: string;\n groupId?: string;\n status?: ProjectGrantStatus;\n};\n\ntype ProjectGrantWrite = Record<string, unknown> & {\n topicId?: string;\n projectId?: string;\n};\n\nfunction normalizeString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nasync function resolveGrantScopeIds(\n ctx: any,\n args: {\n topicId?: unknown;\n projectId?: unknown;\n }\n): Promise<{ topicId?: string; projectId?: string }> {\n const topicId = normalizeString(args.topicId);\n const projectId = normalizeString(args.projectId);\n\n for (const scopeId of [topicId, projectId]) {\n if (!scopeId) {\n continue;\n }\n\n try {\n const overlay = await resolveTopicProjectOverlay(ctx, scopeId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n });\n if (overlay) {\n return {\n topicId: normalizeString(overlay.topicId) ?? topicId,\n projectId:\n normalizeString(overlay.projectId) ?? projectId ?? scopeId,\n };\n }\n } catch {\n // Fall back to the raw ids when the topic overlay bridge is unavailable.\n }\n }\n\n return { topicId, projectId };\n}\n\nasync function normalizeProjectGrantRow(\n ctx: any,\n row: ProjectGrantRow\n): Promise<ProjectGrantRow> {\n const scope = await resolveGrantScopeIds(ctx, {\n topicId: row.topicId,\n projectId: row.projectId,\n });\n\n return {\n ...row,\n ...(scope.topicId ? { topicId: scope.topicId } : {}),\n ...(scope.projectId ?? scope.topicId\n ? { projectId: scope.projectId ?? scope.topicId }\n : {}),\n };\n}\n\nasync function normalizeProjectGrantRows(\n ctx: any,\n rows: ProjectGrantRow[]\n): Promise<ProjectGrantRow[]> {\n return await Promise.all(rows.map((row) => normalizeProjectGrantRow(ctx, row)));\n}\n\nasync function listProjectGrantsByPrincipal(\n ctx: any,\n principalId: string\n): Promise<ProjectGrantRow[]> {\n const rows = await Promise.all(\n PROJECT_GRANT_STATUSES.map((status) =>\n ctx.db\n .query(\"projectGrants\")\n .withIndex(\"by_principal_status\", (q: any) =>\n q.eq(\"principalId\", principalId).eq(\"status\", status)\n )\n .collect()\n )\n );\n return await normalizeProjectGrantRows(ctx, rows.flat() as ProjectGrantRow[]);\n}\n\nasync function listProjectGrantsByGroup(\n ctx: any,\n groupId: string\n): Promise<ProjectGrantRow[]> {\n const rows = await Promise.all(\n PROJECT_GRANT_STATUSES.map((status) =>\n ctx.db\n .query(\"projectGrants\")\n .withIndex(\"by_group_status\", (q: any) =>\n q.eq(\"groupId\", groupId).eq(\"status\", status)\n )\n .collect()\n )\n );\n return await normalizeProjectGrantRows(ctx, rows.flat() as ProjectGrantRow[]);\n}\n\nfunction buildScopeMatchers(\n inputScopeId: string,\n resolved: { topicId?: string; projectId?: string }\n): Set<string> {\n return new Set(\n [inputScopeId, resolved.topicId, resolved.projectId]\n .map((value) => normalizeString(value))\n .filter((value): value is string => Boolean(value))\n );\n}\n\nfunction matchesResolvedScope(\n row: ProjectGrantRow,\n scopeIds: Set<string>\n): boolean {\n const rowTopicId = normalizeString(row.topicId);\n const rowProjectId = normalizeString(row.projectId);\n return (\n (rowTopicId !== undefined && scopeIds.has(rowTopicId)) ||\n (rowProjectId !== undefined && scopeIds.has(rowProjectId))\n );\n}\n\nexport async function bridgeListProjectGrants(ctx: any): Promise<any[]> {\n const rows = (await ctx.db.query(\"projectGrants\").collect()) as ProjectGrantRow[];\n return await normalizeProjectGrantRows(ctx, rows);\n}\n\nexport async function bridgeListProjectGrantsByTopicId(\n ctx: any,\n topicId: string\n): Promise<any[]> {\n const resolved = await resolveGrantScopeIds(ctx, { topicId });\n const rows = await bridgeListProjectGrants(ctx);\n const scopeIds = buildScopeMatchers(topicId, resolved);\n return rows.filter((row) => matchesResolvedScope(row as ProjectGrantRow, scopeIds));\n}\n\nexport async function bridgeListProjectGrantsByTopicAndPrincipal(\n ctx: any,\n topicId: string,\n principalId: string\n): Promise<any[]> {\n const resolved = await resolveGrantScopeIds(ctx, { topicId });\n const scopeIds = buildScopeMatchers(topicId, resolved);\n const rows = await listProjectGrantsByPrincipal(ctx, principalId);\n return rows.filter((row) => matchesResolvedScope(row, scopeIds));\n}\n\nexport async function bridgeListProjectGrantsByTopicAndGroup(\n ctx: any,\n topicId: string,\n groupId: string\n): Promise<any[]> {\n const resolved = await resolveGrantScopeIds(ctx, { topicId });\n const scopeIds = buildScopeMatchers(topicId, resolved);\n const rows = await listProjectGrantsByGroup(ctx, groupId);\n return rows.filter((row) => matchesResolvedScope(row, scopeIds));\n}\n\nexport async function bridgeListProjectGrantsByPrincipalStatus(\n ctx: any,\n principalId: string,\n status: ProjectGrantStatus\n): Promise<any[]> {\n const rows = await listProjectGrantsByPrincipal(ctx, principalId);\n return rows.filter((row) => row.status === status);\n}\n\nexport async function bridgeListProjectGrantsByGroupStatus(\n ctx: any,\n groupId: string,\n status: ProjectGrantStatus\n): Promise<any[]> {\n const rows = await listProjectGrantsByGroup(ctx, groupId);\n return rows.filter((row) => row.status === status);\n}\n\nexport async function bridgeInsertProjectGrant(\n ctx: any,\n value: ProjectGrantWrite\n): Promise<Id<\"projectGrants\">> {\n const resolved = await resolveGrantScopeIds(ctx, value);\n return await ctx.db.insert(\"projectGrants\", {\n ...value,\n ...(resolved.topicId ? { topicId: resolved.topicId } : {}),\n ...(resolved.projectId ?? resolved.topicId\n ? { projectId: resolved.projectId ?? resolved.topicId }\n : {}),\n });\n}\n\nexport async function bridgePatchProjectGrant(\n ctx: any,\n projectGrantId: string,\n value: ProjectGrantWrite\n): Promise<void> {\n const resolved = await resolveGrantScopeIds(ctx, value);\n await ctx.db.patch(projectGrantId, {\n ...value,\n ...(resolved.topicId ? { topicId: resolved.topicId } : {}),\n ...(resolved.projectId ?? resolved.topicId\n ? { projectId: resolved.projectId ?? resolved.topicId }\n : {}),\n });\n}\n","/** Data-source resolver wiring for topic-scoped access control. */\nimport { api as appApi } from \"./convex\";\nimport {\n bridgeInsertProjectGrant,\n bridgeListProjectGrantsByGroupStatus,\n bridgeListProjectGrantsByPrincipalStatus,\n bridgeListProjectGrantsByTopicAndGroup,\n bridgeListProjectGrantsByTopicAndPrincipal,\n} from \"./projectGrantsBridge.js\";\nimport {\n listTopicProjectOverlays,\n resolveTopicProjectOverlay,\n} from \"./topicProjectOverlay.js\";\nimport type {\n AccessControlAppResolverContext,\n AccessControlAppResolvers,\n} from \"./resolverTypes\";\n\nasync function findUserByClerkId(\n ctx: AccessControlAppResolverContext,\n clerkId: string\n): Promise<Record<string, unknown> | null> {\n const normalizedClerkId = clerkId.trim();\n if (!normalizedClerkId) {\n return null;\n }\n\n if (typeof ctx.runQuery === \"function\") {\n try {\n const bridgedUser = await ctx.runQuery(appApi.users.getUserByClerkId as any, {\n clerkId: normalizedClerkId,\n });\n if (bridgedUser) {\n return bridgedUser as Record<string, unknown>;\n }\n } catch {\n // Some dev deployments still carry the users table without the legacy\n // by_clerkId index. Fall through to a direct table scan instead of failing\n // the MCP request path closed on index drift alone.\n }\n }\n\n try {\n const users = await ctx.db.query(\"users\").collect();\n return (\n users.find((user) => String((user as { clerkId?: unknown }).clerkId ?? \"\") === normalizedClerkId) ??\n null\n ) as Record<string, unknown> | null;\n } catch {\n return null;\n }\n}\n\nasync function findUserByPrincipalId(\n ctx: AccessControlAppResolverContext,\n principalId: string\n): Promise<Record<string, unknown> | null> {\n const normalizedPrincipalId = principalId.trim();\n if (!normalizedPrincipalId) {\n return null;\n }\n\n try {\n const users = await ctx.db.query(\"users\").collect();\n return (\n users.find(\n (user) =>\n String((user as { defaultPrincipalId?: unknown }).defaultPrincipalId ?? \"\") ===\n normalizedPrincipalId\n ) ?? null\n ) as Record<string, unknown> | null;\n } catch {\n return null;\n }\n}\n\nasync function findAgentByPrincipalId(\n ctx: AccessControlAppResolverContext,\n principalId: string\n): Promise<Record<string, unknown> | null> {\n const normalizedPrincipalId = principalId.trim();\n if (!normalizedPrincipalId) {\n return null;\n }\n\n if (typeof ctx.runQuery === \"function\") {\n try {\n const bridgedAgent = await ctx.runQuery(\n (appApi as any).agents.getAgentByPrincipalId,\n {\n principalId: normalizedPrincipalId,\n }\n );\n if (bridgedAgent) {\n return bridgedAgent as Record<string, unknown>;\n }\n } catch {\n // Fall through to direct scan for local index drift in dev deployments.\n }\n }\n\n try {\n const agents = await ctx.db.query(\"agents\").collect();\n return (\n agents.find(\n (agent) =>\n String((agent as { principalId?: unknown }).principalId ?? \"\") ===\n normalizedPrincipalId\n ) ?? null\n ) as Record<string, unknown> | null;\n } catch {\n return null;\n }\n}\n\nfunction defaultResolvers(): AccessControlAppResolvers {\n return {\n async getProject(ctx, topicId) {\n return await resolveTopicProjectOverlay(ctx, topicId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n });\n },\n async listTopics(ctx) {\n return await listTopicProjectOverlays(ctx, { idMode: \"legacy\" });\n },\n async listTopicsByOwner(ctx, ownerId) {\n const topics = await listTopicProjectOverlays(ctx, { idMode: \"legacy\" });\n return topics.filter((topic) => topic.ownerId === ownerId);\n },\n async listTopicsByVisibility(ctx, visibility) {\n const topics = await listTopicProjectOverlays(ctx, { idMode: \"legacy\" });\n return topics.filter((topic) => topic.visibility === visibility);\n },\n async listProjectGrantsByProjectAndPrincipal(ctx, topicId, principalId) {\n return await bridgeListProjectGrantsByTopicAndPrincipal(\n ctx,\n topicId,\n principalId\n );\n },\n async listProjectGrantsByProjectAndGroup(ctx, topicId, groupId) {\n return await bridgeListProjectGrantsByTopicAndGroup(ctx, topicId, groupId);\n },\n async listProjectGrantsByPrincipalStatus(ctx, principalId, status) {\n return await bridgeListProjectGrantsByPrincipalStatus(\n ctx,\n principalId,\n status\n );\n },\n async listProjectGrantsByGroupStatus(ctx, groupId, status) {\n return await bridgeListProjectGrantsByGroupStatus(ctx, groupId, status);\n },\n async insertProjectGrant(ctx, value) {\n return (await bridgeInsertProjectGrant(ctx, value)) as any;\n },\n async getAgentByPrincipalId(ctx, principalId) {\n return await findAgentByPrincipalId(ctx, principalId);\n },\n async getUserByClerkId(ctx, clerkId) {\n return await findUserByClerkId(ctx, clerkId);\n },\n async getUserByPrincipalId(ctx, principalId) {\n return await findUserByPrincipalId(ctx, principalId);\n },\n };\n}\n\nlet resolverOverrides: Partial<AccessControlAppResolvers> = {};\n\nexport function configureAccessControlAppResolvers(\n overrides: Partial<AccessControlAppResolvers>\n): void {\n resolverOverrides = {\n ...resolverOverrides,\n ...overrides,\n };\n}\n\nexport function resetAccessControlAppResolvers(): void {\n resolverOverrides = {};\n}\n\nexport function resolveAccessControlAppResolvers(\n _ctx: AccessControlAppResolverContext\n): AccessControlAppResolvers {\n return {\n ...defaultResolvers(),\n ...resolverOverrides,\n };\n}\n","/**\n * Principal Context Resolver\n *\n * Derives principal context from the local `users` table only.\n * Governance tables (platformPrincipals, platformMemberships,\n * platformGroupMemberships) have been migrated to Master Control\n * and no longer exist in the tenant deployment.\n */\n\nimport type { MutationCtx, QueryCtx } from \"./convex\";\nimport { resolveAccessControlAppResolvers } from \"./resolvers\";\n\ntype DbCtx = QueryCtx | MutationCtx;\n\nexport type PlatformRole =\n | \"platform_admin\"\n | \"tenant_admin\"\n | \"workspace_admin\"\n | \"editor\"\n | \"viewer\"\n | \"auditor\"\n | \"service_agent\";\n\ntype ResolvedPrincipalType = \"user\" | \"group\" | \"service\" | \"external_viewer\";\n\nexport type ResolvedPrincipalContext = {\n principalId: string;\n principalType: ResolvedPrincipalType;\n clerkId: string;\n tenantId: string | null;\n workspaceId: string | null;\n roles: PlatformRole[];\n groupIds: string[];\n isPlatformAdmin: boolean;\n isTenantAdmin: boolean;\n isWorkspaceAdmin: boolean;\n isSystemFallback: boolean;\n};\n\ntype ResolvedUserRecord = {\n mcRole?: unknown;\n defaultTenantId?: unknown;\n defaultWorkspaceId?: unknown;\n defaultPrincipalId?: unknown;\n principalGroupIds?: unknown;\n};\n\ntype ResolvedAgentRecord = {\n principalId?: unknown;\n tenantId?: unknown;\n workspaceId?: unknown;\n roles?: unknown;\n groupIds?: unknown;\n};\n\ntype CanonicalResolvedUser = {\n mcRole: PlatformRole;\n defaultTenantId: string;\n defaultWorkspaceId: string;\n defaultPrincipalId: string;\n};\n\nfunction requireCanonicalResolvedUser(\n user: Record<string, unknown> | null,\n clerkId: string\n): CanonicalResolvedUser {\n const resolved = user as ResolvedUserRecord | null;\n if (!resolved) {\n throw new Error(\n `[AccessControl] Canonical user identity required for ${clerkId}. Sync users.upsertUser before user-bound access checks.`\n );\n }\n\n const { mcRole, defaultTenantId, defaultWorkspaceId, defaultPrincipalId } = resolved;\n if (\n mcRole !== \"platform_admin\" &&\n mcRole !== \"tenant_admin\" &&\n mcRole !== \"workspace_admin\" &&\n mcRole !== \"editor\" &&\n mcRole !== \"viewer\" &&\n mcRole !== \"auditor\" &&\n mcRole !== \"service_agent\"\n ) {\n throw new Error(\n `[AccessControl] Canonical MC role required for ${clerkId}. Re-sync Master Control identity before user-bound access checks.`\n );\n }\n\n if (typeof defaultTenantId !== \"string\" || defaultTenantId.trim().length === 0) {\n throw new Error(\n `[AccessControl] Canonical home tenant required for ${clerkId}. Re-sync Master Control identity before user-bound access checks.`\n );\n }\n\n if (\n typeof defaultWorkspaceId !== \"string\" ||\n defaultWorkspaceId.trim().length === 0\n ) {\n throw new Error(\n `[AccessControl] Canonical home workspace required for ${clerkId}. Re-sync Master Control identity before user-bound access checks.`\n );\n }\n\n if (\n typeof defaultPrincipalId !== \"string\" ||\n defaultPrincipalId.trim().length === 0\n ) {\n throw new Error(\n `[AccessControl] Canonical federated principal required for ${clerkId}. Re-sync Master Control identity before user-bound access checks.`\n );\n }\n\n return {\n mcRole,\n defaultTenantId: defaultTenantId.trim(),\n defaultWorkspaceId: defaultWorkspaceId.trim(),\n defaultPrincipalId: defaultPrincipalId.trim(),\n };\n}\n\nfunction isPrincipalIdInput(value: string): boolean {\n return (\n value.startsWith(\"user:\") ||\n value.startsWith(\"group:\") ||\n value.startsWith(\"service:\") ||\n value.startsWith(\"agent:\") ||\n value.startsWith(\"external_viewer:\")\n );\n}\n\nasync function resolveCanonicalUserRecord(\n ctx: DbCtx,\n actorId: string\n): Promise<{\n resolvedUser: Record<string, unknown> | null;\n clerkId: string;\n contextClerkId: string;\n}> {\n const normalizedActorId = actorId.trim();\n const clerkId =\n isPrincipalIdInput(normalizedActorId) && normalizedActorId.startsWith(\"user:\")\n ? normalizedActorId.slice(\"user:\".length)\n : normalizedActorId;\n const resolvers = resolveAccessControlAppResolvers(ctx);\n const resolvedByClerkId = await resolvers.getUserByClerkId(ctx, clerkId);\n\n if (resolvedByClerkId) {\n return {\n resolvedUser: resolvedByClerkId as Record<string, unknown>,\n clerkId,\n contextClerkId: clerkId,\n };\n }\n\n const resolvedByPrincipalId = await resolvers.getUserByPrincipalId(\n ctx,\n normalizedActorId\n );\n return {\n resolvedUser: (resolvedByPrincipalId as Record<string, unknown> | null) ?? null,\n clerkId,\n contextClerkId:\n normalizedActorId.startsWith(\"user:\") && clerkId.length > 0\n ? clerkId\n : normalizedActorId,\n };\n}\n\nfunction uniqRoles(roles: string[]): PlatformRole[] {\n const roleSet = new Set<PlatformRole>();\n for (const role of roles) {\n if (\n role === \"platform_admin\" ||\n role === \"tenant_admin\" ||\n role === \"workspace_admin\" ||\n role === \"editor\" ||\n role === \"viewer\" ||\n role === \"auditor\" ||\n role === \"service_agent\"\n ) {\n roleSet.add(role);\n }\n }\n return [...roleSet];\n}\n\nfunction normalizeGroupIds(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return [...new Set(\n value\n .filter((entry): entry is string => typeof entry === \"string\")\n .map((entry) => entry.trim())\n .filter(Boolean)\n )];\n}\n\nfunction requireServiceAgentUser(\n user: Record<string, unknown> | null,\n actorId: string\n): CanonicalResolvedUser {\n const canonicalUser = requireCanonicalResolvedUser(user, actorId);\n if (canonicalUser.mcRole !== \"service_agent\") {\n throw new Error(\n `[AccessControl] Canonical service_agent identity required for ${actorId}. Sync users.upsertUser before agent-bound access checks.`\n );\n }\n return canonicalUser;\n}\n\nfunction requireCanonicalResolvedAgent(\n agent: Record<string, unknown> | null,\n actorId: string\n): {\n principalId: string;\n tenantId: string;\n workspaceId: string;\n roles: PlatformRole[];\n groupIds: string[];\n} {\n const resolved = agent as ResolvedAgentRecord | null;\n if (!resolved) {\n throw new Error(\n `[AccessControl] Agent \"${actorId}\" not found in agents or users table.`\n );\n }\n\n if (typeof resolved.principalId !== \"string\" || resolved.principalId.trim().length === 0) {\n throw new Error(\n `[AccessControl] Canonical agent principalId required for ${actorId}.`\n );\n }\n\n if (typeof resolved.tenantId !== \"string\" || resolved.tenantId.trim().length === 0) {\n throw new Error(\n `[AccessControl] Canonical home tenant required for ${actorId}.`\n );\n }\n\n if (\n typeof resolved.workspaceId !== \"string\" ||\n resolved.workspaceId.trim().length === 0\n ) {\n throw new Error(\n `[AccessControl] Canonical home workspace required for ${actorId}.`\n );\n }\n\n return {\n principalId: resolved.principalId.trim(),\n tenantId: resolved.tenantId.trim(),\n workspaceId: resolved.workspaceId.trim(),\n roles:\n uniqRoles(Array.isArray(resolved.roles) ? (resolved.roles as string[]) : []) ??\n [\"service_agent\"],\n groupIds: normalizeGroupIds(resolved.groupIds),\n };\n}\n\nfunction _pickHomeMembership(\n memberships: Array<{\n tenantId: string;\n workspaceId?: string;\n role: PlatformRole;\n }>\n) {\n const rolePriority: Record<PlatformRole, number> = {\n platform_admin: 7,\n tenant_admin: 6,\n workspace_admin: 5,\n editor: 4,\n auditor: 3,\n viewer: 2,\n service_agent: 1,\n };\n\n const sorted = [...memberships].sort(\n (a, b) => rolePriority[b.role] - rolePriority[a.role]\n );\n\n return sorted[0] ?? null;\n}\n\n/**\n * Resolve principal context from the local `users` table.\n *\n * Governance tables (platformPrincipals, platformMemberships,\n * platformGroupMemberships) have been migrated to Master Control.\n * This function now derives all context from the `users` table\n * via the app resolver layer.\n */\nexport async function resolvePrincipalContext(\n ctx: DbCtx,\n actorId: string\n): Promise<ResolvedPrincipalContext> {\n if (actorId.startsWith(\"agent:\")) {\n const resolvers = resolveAccessControlAppResolvers(ctx);\n const resolvedAgent = await resolvers.getAgentByPrincipalId(ctx, actorId);\n\n if (resolvedAgent) {\n const agent = requireCanonicalResolvedAgent(\n resolvedAgent as Record<string, unknown> | null,\n actorId\n );\n return {\n principalId: agent.principalId,\n principalType: \"service\",\n clerkId: actorId,\n tenantId: agent.tenantId,\n workspaceId: agent.workspaceId,\n roles: agent.roles.length > 0 ? agent.roles : [\"service_agent\"],\n groupIds: agent.groupIds,\n isPlatformAdmin: false,\n isTenantAdmin: false,\n isWorkspaceAdmin: false,\n isSystemFallback: false,\n };\n }\n\n const resolvedUser = (await resolvers.getUserByClerkId(\n ctx,\n actorId\n )) as ResolvedUserRecord | null;\n if (!resolvedUser) {\n throw new Error(\n `[AccessControl] Agent \"${actorId}\" not found in agents or users table.`\n );\n }\n const user = requireServiceAgentUser(\n resolvedUser as Record<string, unknown> | null,\n actorId\n );\n console.warn(\n `[AccessControl] Deprecated legacy service-agent fallback for ${actorId}; migrate this principal into identity.agents.`\n );\n\n return {\n principalId: user.defaultPrincipalId,\n principalType: \"service\",\n clerkId: actorId,\n tenantId: user.defaultTenantId,\n workspaceId: user.defaultWorkspaceId,\n roles: [\"service_agent\"],\n groupIds: normalizeGroupIds(resolvedUser?.principalGroupIds),\n isPlatformAdmin: false,\n isTenantAdmin: false,\n isWorkspaceAdmin: false,\n isSystemFallback: false,\n };\n }\n\n const {\n resolvedUser,\n contextClerkId,\n } = await resolveCanonicalUserRecord(ctx, actorId);\n const user = requireCanonicalResolvedUser(\n resolvedUser as Record<string, unknown> | null,\n contextClerkId\n );\n if (!user.defaultPrincipalId) {\n throw new Error(\n `[AccessControl] Canonical federated principal required for ${contextClerkId}. Re-sync Master Control identity before user-bound access checks.`\n );\n }\n\n if (user.mcRole === \"service_agent\") {\n return {\n principalId: user.defaultPrincipalId,\n principalType: \"service\",\n clerkId: contextClerkId,\n tenantId: user.defaultTenantId,\n workspaceId: user.defaultWorkspaceId,\n roles: [\"service_agent\"],\n groupIds: normalizeGroupIds(resolvedUser?.principalGroupIds),\n isPlatformAdmin: false,\n isTenantAdmin: false,\n isWorkspaceAdmin: false,\n isSystemFallback: false,\n };\n }\n\n const principalId = user.defaultPrincipalId;\n\n const effectiveRole = user.mcRole;\n\n const roles: PlatformRole[] = effectiveRole === \"platform_admin\"\n ? [\"platform_admin\", \"tenant_admin\"]\n : effectiveRole === \"tenant_admin\"\n ? [\"tenant_admin\"]\n : [effectiveRole];\n\n const tenantId = user.defaultTenantId;\n const workspaceId = user.defaultWorkspaceId;\n\n const isPlatformAdmin = effectiveRole === \"platform_admin\";\n\n return {\n principalId,\n principalType: \"user\",\n clerkId: contextClerkId,\n tenantId,\n workspaceId,\n roles: uniqRoles(roles),\n groupIds: normalizeGroupIds(resolvedUser?.principalGroupIds),\n isPlatformAdmin,\n isTenantAdmin: isPlatformAdmin || effectiveRole === \"tenant_admin\",\n isWorkspaceAdmin: isPlatformAdmin || effectiveRole === \"tenant_admin\" || effectiveRole === \"workspace_admin\",\n isSystemFallback: false,\n };\n}\n\n/**\n * Ensure a user principal context exists.\n *\n * Governance bootstrap (creating platformPrincipals, memberships, etc.)\n * has moved to Master Control. This tenant-side stub resolves the\n * existing context from the local `users` table without creating\n * any governance records.\n */\nexport async function ensureUserPrincipalContext(\n ctx: MutationCtx,\n args: {\n clerkId: string;\n email?: string;\n name?: string;\n isAdmin?: boolean;\n actorPrincipalId?: string;\n }\n): Promise<ResolvedPrincipalContext> {\n return resolvePrincipalContext(ctx, args.clerkId);\n}\n","/**\n * Centralized Access Control for Convex\n *\n * This module provides consistent authorization patterns across all Convex\n * mutations and queries. Access checks are principal-context driven and honor\n * tenant ringfencing, explicit topic grants, and broad visibility semantics.\n *\n * Access Rules:\n * - Platform admins have access to all topics\n * - Topic owners have full access to their topics\n * - Explicit topic grants (principal/group) provide access across visibility modes\n * - Legacy `sharedWith` remains a compatibility bridge during migration\n * - `firm` visibility is tenant-scoped and blocked for principals marked external\n * - `public` visibility is available to any authenticated user\n * - Resources without a topic are accessible only to their creator\n */\n\nimport type { MutationCtx, QueryCtx } from \"./convex\";\nimport {\n resolvePrincipalContext,\n type ResolvedPrincipalContext,\n} from \"./principalContext\";\nimport { resolveAccessControlAppResolvers } from \"./resolvers\";\n\ntype DbCtx = QueryCtx | MutationCtx;\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type TopicRecord = {\n _id: string;\n ownerId: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n};\n\n/** @deprecated Use TopicRecord inside access-control. */\nexport type Project = {\n _id: string;\n ownerId: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n};\n\nexport type ResourceWithTopic = {\n topicId?: string;\n /** @deprecated Use topicId inside access-control. */\n projectId?: string;\n userId?: string;\n createdBy?: string;\n};\n\n/** @deprecated Use ResourceWithTopic inside access-control. */\nexport type ResourceWithProject = ResourceWithTopic;\n\nexport type AccessCheckResult = {\n hasAccess: boolean;\n isAdmin: boolean;\n isOwner: boolean;\n isShared: boolean;\n hasGrant: boolean;\n isFirmVisible: boolean;\n isExternalVisible: boolean;\n isPublicVisible: boolean;\n isTenantScopeMatch: boolean;\n isWorkspaceScopeMatch: boolean;\n isPrincipalExternal: boolean;\n};\n\nfunction isTopicInPrincipalTenant(\n topic: { tenantId?: string },\n principalTenantId: string | null\n): boolean {\n if (!topic.tenantId) {\n return false;\n }\n if (!principalTenantId) {\n return false;\n }\n return String(topic.tenantId) === String(principalTenantId);\n}\n\nfunction isTopicInPrincipalWorkspace(\n topic: { workspaceId?: string },\n principalWorkspaceId: string | null\n): boolean {\n if (!topic.workspaceId) {\n return false;\n }\n if (!principalWorkspaceId) {\n return false;\n }\n return String(topic.workspaceId) === String(principalWorkspaceId);\n}\n\nfunction isLegacyUnscopedTopic(topic: {\n tenantId?: string;\n workspaceId?: string;\n}): boolean {\n return !topic.tenantId || !topic.workspaceId;\n}\n\nexport function isGrantScopeAlignedToTopic(\n topic: {\n tenantId?: string;\n workspaceId?: string;\n },\n grant: {\n tenantId?: string;\n workspaceId?: string;\n }\n): boolean {\n if (\n topic.tenantId &&\n grant.tenantId &&\n String(topic.tenantId) !== String(grant.tenantId)\n ) {\n return false;\n }\n if (\n topic.workspaceId &&\n grant.workspaceId &&\n String(topic.workspaceId) !== String(grant.workspaceId)\n ) {\n return false;\n }\n return true;\n}\n\n/** @deprecated Use isGrantScopeAlignedToTopic. */\nexport const isGrantScopeAlignedToProject = isGrantScopeAlignedToTopic;\n\nexport function isGroupScopeAlignedToTopic(\n topic: {\n tenantId?: string;\n workspaceId?: string;\n },\n group: {\n tenantId?: string;\n workspaceId?: string;\n }\n): boolean {\n if (\n topic.tenantId &&\n group.tenantId &&\n String(topic.tenantId) !== String(group.tenantId)\n ) {\n return false;\n }\n if (\n topic.workspaceId &&\n group.workspaceId &&\n String(topic.workspaceId) !== String(group.workspaceId)\n ) {\n return false;\n }\n return true;\n}\n\n/** @deprecated Use isGroupScopeAlignedToTopic. */\nexport const isGroupScopeAlignedToProject = isGroupScopeAlignedToTopic;\n\nexport function isGrantSourceAllowedForVisibility(\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\",\n source: string | undefined\n): boolean {\n if (source !== \"external_share\") {\n return true;\n }\n return visibility === \"external\" || visibility === \"public\";\n}\n\nfunction isGrantActive(grant: {\n status: \"active\" | \"revoked\" | \"expired\";\n expiresAt?: number;\n}): boolean {\n if (grant.status !== \"active\") {\n return false;\n }\n if (grant.expiresAt !== undefined && grant.expiresAt <= Date.now()) {\n return false;\n }\n return true;\n}\n\nasync function hasPrincipalGrant(\n ctx: DbCtx,\n args: {\n topic: TopicRecord;\n principalId: string;\n principalIsExternal: boolean;\n }\n): Promise<boolean> {\n const grants = await resolveAccessControlAppResolvers(\n ctx\n ).listProjectGrantsByProjectAndPrincipal(\n ctx,\n args.topic._id,\n args.principalId\n );\n\n if (\n grants.some(\n (grant) =>\n isGrantActive(grant as any) &&\n isGrantScopeAlignedToTopic(args.topic, grant) &&\n isGrantSourceAllowedForVisibility(\n args.topic.visibility,\n grant.source\n ) &&\n (!args.principalIsExternal ||\n args.topic.visibility === \"public\" ||\n grant.source === \"external_share\")\n )\n ) {\n return true;\n }\n\n return false;\n}\n\nasync function hasGroupGrant(\n ctx: DbCtx,\n args: {\n topic: TopicRecord;\n groupIds: string[];\n }\n): Promise<boolean> {\n // Group-based grant checks require MC group resolution.\n // With groupIds=[] from tenant-local principal context, this is a no-op.\n // Future: call MC to resolve group grants for cross-tenant scenarios.\n if (args.groupIds.length === 0) {\n return false;\n }\n\n for (const groupId of args.groupIds) {\n const grants = await resolveAccessControlAppResolvers(\n ctx\n ).listProjectGrantsByProjectAndGroup(ctx, args.topic._id, groupId);\n\n if (\n grants.some(\n (grant) =>\n isGrantActive(grant as any) &&\n isGrantScopeAlignedToTopic(args.topic, grant) &&\n isGrantSourceAllowedForVisibility(\n args.topic.visibility,\n grant.source\n )\n )\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction isExternalPrincipal(\n _ctx: DbCtx,\n _args: {\n groupIds: string[];\n topicTenantId?: string;\n topicWorkspaceId?: string;\n }\n): boolean {\n // External principal detection requires MC group resolution.\n // With groupIds=[] from tenant-local principal context, always false.\n // Future: call MC to check external group membership.\n return false;\n}\n\n// =============================================================================\n// ADMIN CHECK\n// =============================================================================\n\n/**\n * Check if a user has admin-tier access.\n *\n * Identity bridge: prefers mcRole (synced from Master Control),\n * falls back to legacy isAdmin boolean during migration.\n */\nexport async function isAdmin(ctx: DbCtx, userId: string): Promise<boolean> {\n const user = await resolveAccessControlAppResolvers(ctx).getUserByClerkId(\n ctx,\n userId\n );\n if (!user) return false;\n\n // Identity bridge: mcRole preferred, isAdmin fallback\n if (user.mcRole) {\n return user.mcRole === \"platform_admin\" || user.mcRole === \"tenant_admin\";\n }\n return user.isAdmin === true;\n}\n\n// =============================================================================\n// TOPIC ACCESS\n// =============================================================================\n\n/**\n * Check if a user has access to a topic scope.\n *\n * Returns detailed access info including why access was granted.\n */\n/**\n * STACK_MC_AUTH_BYPASS: All authenticated Stack MC users get full access\n * until RBAC and topic-native grant matching are production-ready.\n * When RBAC is complete, remove this constant and the early-return below.\n */\nconst STACK_MC_AUTH_BYPASS = true;\n\nasync function evaluateTopicAccessDetailed(\n ctx: DbCtx,\n args: {\n topicId: string;\n legacyUserId: string;\n principalContext: ResolvedPrincipalContext;\n }\n): Promise<AccessCheckResult> {\n // Single bypass: authenticated users get full access until RBAC is ready\n if (STACK_MC_AUTH_BYPASS && args.legacyUserId) {\n return {\n hasAccess: true,\n isAdmin: false,\n isOwner: false,\n isShared: false,\n hasGrant: true,\n isFirmVisible: true,\n isExternalVisible: false,\n isPublicVisible: false,\n isTenantScopeMatch: true,\n isWorkspaceScopeMatch: true,\n isPrincipalExternal: false,\n };\n }\n\n const topic = await resolveAccessControlAppResolvers(ctx).getProject(\n ctx,\n args.topicId\n );\n if (!topic) {\n return {\n hasAccess: false,\n isAdmin: false,\n isOwner: false,\n isShared: false,\n hasGrant: false,\n isFirmVisible: false,\n isExternalVisible: false,\n isPublicVisible: false,\n isTenantScopeMatch: false,\n isWorkspaceScopeMatch: false,\n isPrincipalExternal: false,\n };\n }\n\n const { principalContext, legacyUserId } = args;\n const userIsAdmin = principalContext.isPlatformAdmin;\n const isOwner = topic.ownerId === legacyUserId;\n const isShared = (topic.sharedWith ?? []).includes(legacyUserId);\n const principalIsExternal = await isExternalPrincipal(ctx, {\n groupIds: principalContext.groupIds,\n topicTenantId: topic.tenantId,\n topicWorkspaceId: topic.workspaceId,\n });\n\n const hasPrincipalGrantResult = await hasPrincipalGrant(ctx, {\n topic,\n principalId: principalContext.principalId,\n principalIsExternal,\n });\n const hasGroupGrantResult = await hasGroupGrant(ctx, {\n topic,\n groupIds: principalContext.groupIds,\n });\n\n const hasGrant = isShared || hasPrincipalGrantResult || hasGroupGrantResult;\n const legacyUnscoped = isLegacyUnscopedTopic(topic);\n const tenantScopeMatch = isTopicInPrincipalTenant(\n topic,\n principalContext.tenantId\n );\n const workspaceScopeMatch = isTopicInPrincipalWorkspace(\n topic,\n principalContext.workspaceId\n );\n\n const isPublicVisible = topic.visibility === \"public\";\n const isFirmVisible =\n topic.visibility === \"firm\" &&\n !legacyUnscoped &&\n tenantScopeMatch &&\n workspaceScopeMatch &&\n !principalIsExternal;\n const hasScopedGrant =\n hasGrant && (legacyUnscoped || (tenantScopeMatch && workspaceScopeMatch));\n const isExternalVisible = topic.visibility === \"external\" && hasScopedGrant;\n\n const hasAccess =\n userIsAdmin ||\n isOwner ||\n hasScopedGrant ||\n isPublicVisible ||\n isFirmVisible;\n\n return {\n hasAccess,\n isAdmin: userIsAdmin,\n isOwner,\n isShared,\n hasGrant,\n isFirmVisible,\n isExternalVisible,\n isPublicVisible,\n isTenantScopeMatch: tenantScopeMatch,\n isWorkspaceScopeMatch: workspaceScopeMatch,\n isPrincipalExternal: principalIsExternal,\n };\n}\n\nexport async function checkTopicAccessDetailedWithPrincipalContext(\n ctx: DbCtx,\n topicId: string,\n principalContext: ResolvedPrincipalContext\n): Promise<AccessCheckResult> {\n return evaluateTopicAccessDetailed(ctx, {\n topicId,\n legacyUserId: principalContext.clerkId,\n principalContext,\n });\n}\n\nexport async function checkTopicAccessDetailed(\n ctx: DbCtx,\n topicId: string,\n userId: string\n): Promise<AccessCheckResult> {\n const principalContext = await resolvePrincipalContext(ctx, userId);\n return evaluateTopicAccessDetailed(ctx, {\n topicId,\n legacyUserId: userId,\n principalContext,\n });\n}\n\n/**\n * Check if a user has access to a topic scope (simple boolean).\n */\nexport async function checkTopicAccess(\n ctx: DbCtx,\n topicId: string,\n userId: string\n): Promise<boolean> {\n const result = await checkTopicAccessDetailed(ctx, topicId, userId);\n return result.hasAccess;\n}\n\nexport async function checkTopicAccessWithPrincipalContext(\n ctx: DbCtx,\n topicId: string,\n principalContext: ResolvedPrincipalContext\n): Promise<boolean> {\n const result = await checkTopicAccessDetailedWithPrincipalContext(\n ctx,\n topicId,\n principalContext\n );\n return result.hasAccess;\n}\n\n/**\n * Check if a user has access to a scope (topic or legacy project compatibility id).\n *\n * TC-C: topic-canonical access bridge. Tries to resolve the scopeId as a\n * topic first (from the topics table). If found, allows access for any\n * authenticated user (topic-level ACL will be added in TC-D).\n * Falls back to legacy project-based access checks for compatibility.\n */\nexport async function checkScopeAccess(\n ctx: DbCtx,\n scopeId: string,\n userId: string\n): Promise<boolean> {\n // Try as topic first — topics table uses string IDs\n try {\n const topic = await (ctx.db as any).get(scopeId);\n if (\n topic &&\n (topic as any).name !== undefined &&\n (topic as any).type !== undefined\n ) {\n // Valid topic — allow access for any authenticated user.\n // Full topic-level ACL (visibility, tenant ringfencing) deferred to TC-D.\n return true;\n }\n } catch {\n // Not a valid document ID for this deployment, try the legacy project scope.\n }\n\n // Fall back to the legacy project-based access check.\n try {\n return await checkTopicAccess(ctx, scopeId as string, userId);\n } catch {\n // Neither topic nor legacy project scope resolved — deny access.\n return false;\n }\n}\n\n/**\n * Require access to a topic scope, throws if not authorized.\n */\nexport async function requireTopicAccess(\n ctx: DbCtx,\n topicId: string,\n userId: string\n): Promise<void> {\n const hasAccess = await checkTopicAccess(ctx, topicId, userId);\n if (!hasAccess) {\n throw new Error(\n \"Access denied: You don't have permission to access this topic\"\n );\n }\n}\n\n/**\n * Get a topic record with access check.\n *\n * Returns the topic record if the user has access, null otherwise.\n */\nexport async function getTopicWithAccess(\n ctx: DbCtx,\n topicId: string,\n userId: string\n): Promise<TopicRecord | null> {\n const topic = await resolveAccessControlAppResolvers(ctx).getProject(\n ctx,\n topicId\n );\n if (!topic) {\n return null;\n }\n\n const hasAccess = await checkTopicAccess(ctx, topicId, userId);\n if (!hasAccess) {\n return null;\n }\n\n return topic as TopicRecord;\n}\n\n/** @deprecated Use checkTopicAccessDetailed. */\nexport const checkProjectAccessDetailed = checkTopicAccessDetailed;\n\n/** @deprecated Use checkTopicAccess. */\nexport const checkProjectAccess = checkTopicAccess;\n\n/** @deprecated Use requireTopicAccess. */\nexport const requireProjectAccess = requireTopicAccess;\n\n/** @deprecated Use getTopicWithAccess. */\nexport const getProjectWithAccess = getTopicWithAccess;\n\n// =============================================================================\n// RESOURCE ACCESS (for items with optional topic compatibility ids)\n// =============================================================================\n\n/**\n * Check if a user can access a resource that may or may not belong to a topic.\n */\nexport function checkResourceAccess(\n ctx: DbCtx,\n resource: ResourceWithTopic,\n userId: string\n): boolean | Promise<boolean> {\n const topicId = resource.topicId ?? resource.projectId;\n if (topicId) {\n return checkTopicAccess(ctx, topicId, userId);\n }\n\n // No topic - only creator can access.\n const creatorId = resource.userId ?? resource.createdBy;\n return creatorId === userId;\n}\n\n/**\n * Require access to a resource, throws if not authorized.\n */\nexport async function requireResourceAccess(\n ctx: DbCtx,\n resource: ResourceWithTopic,\n userId: string\n): Promise<void> {\n const hasAccess = await checkResourceAccess(ctx, resource, userId);\n if (!hasAccess) {\n throw new Error(\n \"Access denied: You don't have permission to access this resource\"\n );\n }\n}\n\n// =============================================================================\n// CONVENIENCE HELPERS\n// =============================================================================\n\n/**\n * Check if user can modify a resource (stricter than read access).\n *\n * For now, same as checkResourceAccess. In the future, this could be\n * extended to support read-only sharing.\n */\nexport function checkModifyAccess(\n ctx: DbCtx,\n resource: ResourceWithTopic,\n userId: string\n): boolean | Promise<boolean> {\n return checkResourceAccess(ctx, resource, userId);\n}\n\n/**\n * Check if user is the creator of a resource.\n */\nexport function isCreator(\n resource: { userId?: string; createdBy?: string },\n userId: string\n): boolean {\n const creatorId = resource.userId ?? resource.createdBy;\n return creatorId === userId;\n}\n\n/**\n * Build the accessible topic ID set for list-style queries.\n */\nexport async function getAccessibleTopicIds(\n ctx: DbCtx,\n userId: string\n): Promise<Set<string>> {\n const principalContext = await resolvePrincipalContext(ctx, userId);\n\n if (principalContext.isPlatformAdmin) {\n // Admins can access all topics.\n const allTopics =\n await resolveAccessControlAppResolvers(ctx).listTopics(ctx);\n return new Set(allTopics.map((topic) => topic._id));\n }\n\n const topicIds = new Set<string>();\n\n // Owned topics.\n const ownedTopics = await resolveAccessControlAppResolvers(\n ctx\n ).listTopicsByOwner(ctx, userId);\n for (const topic of ownedTopics) {\n topicIds.add(topic._id);\n }\n\n // Public topics.\n const publicTopics = await resolveAccessControlAppResolvers(\n ctx\n ).listTopicsByVisibility(ctx, \"public\");\n for (const topic of publicTopics) {\n topicIds.add(topic._id);\n }\n\n // Firm topics (tenant ringfenced, and hidden from principals in external groups).\n const principalIsExternal = await isExternalPrincipal(ctx, {\n groupIds: principalContext.groupIds,\n topicTenantId: principalContext.tenantId ?? undefined,\n topicWorkspaceId: principalContext.workspaceId ?? undefined,\n });\n if (!principalIsExternal) {\n const firmTopics = await resolveAccessControlAppResolvers(\n ctx\n ).listTopicsByVisibility(ctx, \"firm\");\n\n for (const topic of firmTopics) {\n if (\n isTopicInPrincipalTenant(topic, principalContext.tenantId) &&\n isTopicInPrincipalWorkspace(topic, principalContext.workspaceId)\n ) {\n topicIds.add(topic._id);\n }\n }\n }\n\n // Explicit principal grants\n const directGrants = await resolveAccessControlAppResolvers(\n ctx\n ).listProjectGrantsByPrincipalStatus(\n ctx,\n principalContext.principalId,\n \"active\"\n );\n\n for (const grant of directGrants) {\n if (!isGrantActive(grant as any)) {\n continue;\n }\n const topic = await resolveAccessControlAppResolvers(ctx).getProject(\n ctx,\n grant.projectId\n );\n if (!topic) {\n continue;\n }\n if (!isLegacyUnscopedTopic(topic)) {\n if (!isTopicInPrincipalTenant(topic, principalContext.tenantId)) {\n continue;\n }\n if (\n !isTopicInPrincipalWorkspace(topic, principalContext.workspaceId)\n ) {\n continue;\n }\n }\n if (!isGrantScopeAlignedToTopic(topic, grant)) {\n continue;\n }\n if (\n !isGrantSourceAllowedForVisibility(topic.visibility, grant.source)\n ) {\n continue;\n }\n if (\n principalIsExternal &&\n topic.visibility !== \"public\" &&\n grant.source !== \"external_share\"\n ) {\n continue;\n }\n topicIds.add(grant.projectId);\n }\n\n // Group grants — skipped in tenant-local context (groups live in MC).\n // principalContext.groupIds is [] when resolved locally.\n\n // Legacy shared-with list compatibility while grant backfill is in progress.\n const allTopics =\n await resolveAccessControlAppResolvers(ctx).listTopics(ctx);\n for (const topic of allTopics) {\n if (\n (topic.sharedWith ?? []).includes(userId) &&\n (isLegacyUnscopedTopic(topic) ||\n (isTopicInPrincipalTenant(topic, principalContext.tenantId) &&\n isTopicInPrincipalWorkspace(topic, principalContext.workspaceId)))\n ) {\n topicIds.add(topic._id);\n }\n }\n\n return topicIds;\n}\n\n/** @deprecated Use getAccessibleTopicIds. */\nexport const getAccessibleProjectIds = getAccessibleTopicIds;\n","/**\n * auth module implementation.\n */\n\nimport type { ActionCtx, MutationCtx, QueryCtx } from \"./convex\";\n\ntype AnyCtx = QueryCtx | MutationCtx | ActionCtx;\n\n/**\n * Get the current user's identity from Clerk.\n */\nexport async function getCurrentUser(ctx: AnyCtx) {\n const identity = await ctx.auth.getUserIdentity();\n return identity;\n}\n\n/**\n * Get the current user ID (Clerk subject).\n */\nexport async function getCurrentUserId(ctx: AnyCtx): Promise<string | null> {\n const identity = await ctx.auth.getUserIdentity();\n return identity?.subject ?? null;\n}\n","/**\n * validators module implementation.\n */\n\nimport { v } from \"convex/values\";\n\n/**\n * Permissive return validator used while contracts are tightened.\n */\nexport const permissiveReturn: any = v.optional(v.any());\n\n/**\n * Shallow JSON validators for dynamic payloads.\n */\nexport const looseJsonObject = v.record(v.string(), v.any());\nexport const looseJsonArray = v.array(v.any());\nexport const looseJsonValue = v.union(\n v.string(),\n v.number(),\n v.boolean(),\n v.null(),\n looseJsonObject,\n looseJsonArray\n);\n","import {\n actionGeneric,\n anyApi,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\nexport const api = anyApi as any;\nexport const components = componentsGeneric() as any;\nexport const internal = anyApi as any;\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> = any;\nexport type DataModel = any;\nexport type ActionCtx = any;\nexport type DatabaseReader = any;\nexport type DatabaseWriter = any;\nexport type MutationCtx = any;\nexport type QueryCtx = any;\n\nexport const action = actionGeneric as any;\nexport const httpAction = httpActionGeneric as any;\nexport const internalAction = internalActionGeneric as any;\nexport const internalMutation = internalMutationGeneric as any;\nexport const internalQuery = internalQueryGeneric as any;\nexport const mutation = mutationGeneric as any;\nexport const query = queryGeneric as any;\n","import type { Opinion } from \"../../types\";\n\nexport function opinion(\n belief: number,\n disbelief: number,\n uncertainty: number,\n baseRate: number = 0.5\n): Opinion {\n const b = Math.max(0, Math.min(1, belief));\n const d = Math.max(0, Math.min(1, disbelief));\n const u = Math.max(0, Math.min(1, uncertainty));\n const a = Math.max(0, Math.min(1, baseRate));\n const sum = b + d + u;\n\n if (sum === 0) {\n return { b: 0, d: 0, u: 1, a };\n }\n\n return {\n b: b / sum,\n d: d / sum,\n u: u / sum,\n a,\n };\n}\n\nexport function vacuous(baseRate: number = 0.5): Opinion {\n return { b: 0, d: 0, u: 1, a: baseRate };\n}\n\nexport function dogmatic(probability: number, baseRate: number = 0.5): Opinion {\n const p = Math.max(0, Math.min(1, probability));\n return { b: p, d: 1 - p, u: 0, a: baseRate };\n}\n\nexport function project(o: Opinion): number {\n return o.b + o.a * o.u;\n}\n\nexport function confidenceLevel(o: Opinion): \"high\" | \"medium\" | \"low\" {\n const projected = project(o);\n if (o.u > 0.5) {\n return \"low\";\n }\n if (projected >= 0.8 && o.u < 0.2) {\n return \"high\";\n }\n if (projected >= 0.6) {\n return \"medium\";\n }\n return \"low\";\n}\n\nexport function cumulativeFusion(left: Opinion, right: Opinion): Opinion {\n if (left.u === 0 && right.u === 0) {\n return opinion(\n (left.b + right.b) / 2,\n (left.d + right.d) / 2,\n 0,\n (left.a + right.a) / 2\n );\n }\n\n const k = left.u + right.u - left.u * right.u;\n if (k === 0) {\n return vacuous((left.a + right.a) / 2);\n }\n\n return opinion(\n (left.b * right.u + right.b * left.u) / k,\n (left.d * right.u + right.d * left.u) / k,\n (left.u * right.u) / k,\n (left.a + right.a) / 2\n );\n}\n\nexport function averagingFusion(left: Opinion, right: Opinion): Opinion {\n if (left.u === 0 && right.u === 0) {\n return opinion(\n (left.b + right.b) / 2,\n (left.d + right.d) / 2,\n 0,\n (left.a + right.a) / 2\n );\n }\n\n const k = left.u + right.u;\n if (k === 0) {\n return vacuous((left.a + right.a) / 2);\n }\n\n return opinion(\n (left.b * right.u + right.b * left.u) / k,\n (left.d * right.u + right.d * left.u) / k,\n (2 * left.u * right.u) / k,\n (left.a + right.a) / 2\n );\n}\n\nexport function trustDiscount(sourceOpinion: Opinion, trust: number): Opinion {\n const weight = Math.max(0, Math.min(1, Math.abs(trust)));\n return opinion(\n weight * sourceOpinion.b,\n weight * sourceOpinion.d,\n 1 - weight * (sourceOpinion.b + sourceOpinion.d),\n sourceOpinion.a\n );\n}\n\nconst EPSILON = 1e-9;\n\nfunction childBaseRateFallback(\n ifTrue: Opinion,\n ifFalse: Opinion,\n fallbackBaseRate: number | undefined\n): number {\n if (fallbackBaseRate !== undefined) {\n return Math.max(0, Math.min(1, fallbackBaseRate));\n }\n\n if (Math.abs(ifTrue.a - ifFalse.a) <= EPSILON) {\n return ifTrue.a;\n }\n\n return (ifTrue.a + ifFalse.a) / 2;\n}\n\nfunction computeConditionalDeductionBaseRate(\n opinionA: Opinion,\n ifTrue: Opinion,\n ifFalse: Opinion,\n fallbackBaseRate: number\n): number {\n const denominator =\n 1 - opinionA.a * ifTrue.u - (1 - opinionA.a) * ifFalse.u;\n\n if (ifTrue.u + ifFalse.u < 2 - EPSILON && Math.abs(denominator) > EPSILON) {\n const baseRate =\n (opinionA.a * ifTrue.b + (1 - opinionA.a) * ifFalse.b) / denominator;\n if (baseRate >= -EPSILON && baseRate <= 1 + EPSILON) {\n return Math.max(0, Math.min(1, baseRate));\n }\n }\n\n return fallbackBaseRate;\n}\n\nfunction safeCorrectionTerm(\n numerator: number,\n denominator: number\n): number | undefined {\n if (Math.abs(denominator) <= EPSILON) {\n return undefined;\n }\n\n const value = numerator / denominator;\n if (!Number.isFinite(value)) {\n return undefined;\n }\n\n return Math.max(0, value);\n}\n\nexport function conditionalDeduction(\n opinionA: Opinion,\n ifTrue: Opinion,\n ifFalse: Opinion,\n fallbackBaseRate?: number\n): Opinion {\n const fallbackChildBaseRate = childBaseRateFallback(\n ifTrue,\n ifFalse,\n fallbackBaseRate\n );\n const childBaseRate = computeConditionalDeductionBaseRate(\n opinionA,\n ifTrue,\n ifFalse,\n fallbackChildBaseRate\n );\n const projectedAntecedent = project(opinionA);\n const projectedAntecedentComplement = 1 - projectedAntecedent;\n const intermediateBelief =\n opinionA.b * ifTrue.b +\n opinionA.d * ifFalse.b +\n opinionA.u * (ifTrue.b * opinionA.a + ifFalse.b * (1 - opinionA.a));\n const intermediateDisbelief =\n opinionA.b * ifTrue.d +\n opinionA.d * ifFalse.d +\n opinionA.u * (ifTrue.d * opinionA.a + ifFalse.d * (1 - opinionA.a));\n const intermediateUncertainty =\n opinionA.b * ifTrue.u +\n opinionA.d * ifFalse.u +\n opinionA.u * (ifTrue.u * opinionA.a + ifFalse.u * (1 - opinionA.a));\n const projectedVacuousDeduction =\n ifTrue.b * opinionA.a +\n ifFalse.b * (1 - opinionA.a) +\n childBaseRate *\n (ifTrue.u * opinionA.a + ifFalse.u * (1 - opinionA.a));\n const projectedConditionalA =\n ifTrue.b + childBaseRate * (1 - ifTrue.b - ifTrue.d);\n let correction = 0;\n\n if (\n (ifTrue.b > ifFalse.b && ifTrue.d > ifFalse.d) ||\n (ifTrue.b <= ifFalse.b && ifTrue.d <= ifFalse.d)\n ) {\n correction = 0;\n } else if (ifTrue.b > ifFalse.b && ifTrue.d <= ifFalse.d) {\n const beliefGap = ifTrue.b - ifFalse.b;\n const disbeliefGap = ifFalse.d - ifTrue.d;\n\n if (\n projectedVacuousDeduction <= projectedConditionalA &&\n projectedAntecedent <= opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n opinionA.a * opinionA.u * (intermediateBelief - ifTrue.b),\n projectedAntecedent * childBaseRate\n ) ?? 0;\n } else if (\n projectedVacuousDeduction <= projectedConditionalA &&\n projectedAntecedent > opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n opinionA.a * opinionA.u * (intermediateDisbelief - ifTrue.d) * beliefGap,\n projectedAntecedentComplement * childBaseRate * disbeliefGap\n ) ?? 0;\n } else if (\n projectedVacuousDeduction > projectedConditionalA &&\n projectedAntecedent <= opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n (1 - opinionA.a) *\n opinionA.u *\n (intermediateBelief - ifTrue.b) *\n disbeliefGap,\n projectedAntecedent * (1 - childBaseRate) * beliefGap\n ) ?? 0;\n } else {\n correction =\n safeCorrectionTerm(\n (1 - opinionA.a) * opinionA.u * (intermediateDisbelief - ifTrue.d),\n projectedAntecedentComplement * (1 - childBaseRate)\n ) ?? 0;\n }\n } else {\n const beliefGap = ifFalse.b - ifTrue.b;\n const disbeliefGap = ifTrue.d - ifFalse.d;\n\n if (\n projectedVacuousDeduction <= projectedConditionalA &&\n projectedAntecedent <= opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n (1 - opinionA.a) *\n opinionA.u *\n (intermediateDisbelief - ifTrue.d) *\n beliefGap,\n projectedAntecedent * childBaseRate * disbeliefGap\n ) ?? 0;\n } else if (\n projectedVacuousDeduction <= projectedConditionalA &&\n projectedAntecedent > opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n (1 - opinionA.a) * opinionA.u * (intermediateBelief - ifTrue.b),\n projectedAntecedentComplement * childBaseRate\n ) ?? 0;\n } else if (\n projectedVacuousDeduction > projectedConditionalA &&\n projectedAntecedent <= opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n opinionA.a * opinionA.u * (intermediateDisbelief - ifTrue.d),\n projectedAntecedent * (1 - childBaseRate)\n ) ?? 0;\n } else {\n correction =\n safeCorrectionTerm(\n opinionA.a *\n opinionA.u *\n (intermediateBelief - ifTrue.b) *\n disbeliefGap,\n projectedAntecedentComplement * (1 - childBaseRate) * beliefGap\n ) ?? 0;\n }\n }\n\n return opinion(\n intermediateBelief - childBaseRate * correction,\n intermediateDisbelief - (1 - childBaseRate) * correction,\n intermediateUncertainty + correction,\n childBaseRate\n );\n}\n\n/**\n * Abductive inference over a conditional.\n * Given an opinion on Y and conditionals P(Y|X), P(Y|~X), infer an opinion on X.\n */\nexport function conditionalAbduction(\n opinionY: Opinion,\n ifTrue: Opinion,\n ifFalse: Opinion,\n baseRateX: number\n): Opinion {\n const priorX = Math.max(0, Math.min(1, baseRateX));\n const probabilityY = project(opinionY);\n const probabilityGivenTrue = project(ifTrue);\n const probabilityGivenFalse = project(ifFalse);\n\n const posteriorIfYDenominator =\n probabilityGivenTrue * priorX +\n probabilityGivenFalse * (1 - priorX);\n const posteriorIfY =\n posteriorIfYDenominator === 0\n ? priorX\n : (probabilityGivenTrue * priorX) / posteriorIfYDenominator;\n\n const posteriorIfNotYDenominator =\n (1 - probabilityGivenTrue) * priorX +\n (1 - probabilityGivenFalse) * (1 - priorX);\n const posteriorIfNotY =\n posteriorIfNotYDenominator === 0\n ? priorX\n : ((1 - probabilityGivenTrue) * priorX) / posteriorIfNotYDenominator;\n\n const projectedX =\n probabilityY * posteriorIfY + (1 - probabilityY) * posteriorIfNotY;\n const uncertainty = Math.max(\n opinionY.u * 0.5,\n probabilityY * ifTrue.u + (1 - probabilityY) * ifFalse.u\n );\n\n return opinion(\n projectedX * (1 - uncertainty),\n (1 - projectedX) * (1 - uncertainty),\n uncertainty,\n priorX\n );\n}\n\nexport function negate(o: Opinion): Opinion {\n return { b: o.d, d: o.b, u: o.u, a: 1 - o.a };\n}\n\nexport function constraintFusion(\n left: Opinion,\n right: Opinion,\n mode: \"pressure\" | \"redistribute\" = \"pressure\"\n): { o1: Opinion; o2: Opinion } {\n if (mode === \"redistribute\") {\n const leftProjected = project(left);\n const rightProjected = project(right);\n const total = leftProjected + rightProjected;\n\n if (total <= 1) {\n return { o1: left, o2: right };\n }\n\n const scale = 1 / total;\n return {\n o1: opinion(\n left.b * scale,\n left.d + left.b * (1 - scale),\n left.u,\n left.a\n ),\n o2: opinion(\n right.b * scale,\n right.d + right.b * (1 - scale),\n right.u,\n right.a\n ),\n };\n }\n\n const pressureLeft = right.b * 0.5;\n const pressureRight = left.b * 0.5;\n\n return {\n o1: opinion(\n left.b - pressureLeft * 0.3,\n left.d + pressureLeft * 0.3,\n left.u,\n left.a\n ),\n o2: opinion(\n right.b - pressureRight * 0.3,\n right.d + pressureRight * 0.3,\n right.u,\n right.a\n ),\n };\n}\n\nexport function evidenceBalance(o: Opinion): number {\n const total = o.b + o.d;\n if (total === 0) {\n return 0;\n }\n return (o.b - o.d) / total;\n}\n\nexport function areTensioned(left: Opinion, right: Opinion): boolean {\n return (\n project(left) > 0.5 &&\n project(right) > 0.5 &&\n (left.d > 0.2 || right.d > 0.2)\n );\n}\n\nexport function informationGain(o: Opinion): number {\n if (o.u === 0) {\n return 0;\n }\n if (o.u === 1) {\n return 1;\n }\n return o.u * (1 - Math.abs(o.b - o.d));\n}\n","import type { Opinion, StoredOpinionFields } from \"../types\";\nimport { dogmatic, vacuous } from \"./subjectiveLogic\";\n\nfunction finiteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nexport function clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nexport function confidenceFromOpinion(opinion: Opinion): number {\n return clamp01(opinion.b + opinion.a * opinion.u);\n}\n\nexport function confidenceFromSL(\n belief: number,\n _disbelief: number,\n uncertainty: number,\n baseRate: number = 0.5\n): number {\n return confidenceFromOpinion({\n b: belief,\n d: _disbelief,\n u: uncertainty,\n a: baseRate,\n });\n}\n\nexport function toStoredOpinionFields(opinion: Opinion): StoredOpinionFields {\n return {\n belief: opinion.b,\n disbelief: opinion.d,\n uncertainty: opinion.u,\n baseRate: opinion.a,\n };\n}\n\nexport function readOpinionFromRecord(\n source: unknown,\n fallback: Partial<Opinion> = {}\n): Opinion {\n const record =\n source && typeof source === \"object\"\n ? (source as Record<string, unknown>)\n : {};\n\n return {\n b:\n finiteNumber(record.b) ??\n finiteNumber(record.belief) ??\n finiteNumber(record.slBelief) ??\n finiteNumber(record.opinion_b) ??\n fallback.b ??\n 0,\n d:\n finiteNumber(record.d) ??\n finiteNumber(record.disbelief) ??\n finiteNumber(record.slDisbelief) ??\n finiteNumber(record.opinion_d) ??\n fallback.d ??\n 0,\n u:\n finiteNumber(record.u) ??\n finiteNumber(record.uncertainty) ??\n finiteNumber(record.slUncertainty) ??\n finiteNumber(record.opinion_u) ??\n fallback.u ??\n 1,\n a:\n finiteNumber(record.a) ??\n finiteNumber(record.baseRate) ??\n finiteNumber(record.slBaseRate) ??\n finiteNumber(record.opinion_a) ??\n fallback.a ??\n 0.5,\n };\n}\n\nexport type OpinionFromScalarMode =\n | \"base_rate\"\n | \"dogmatic\"\n | \"projected_with_u\";\n\nexport function opinionFromScalar(\n value: number,\n mode: OpinionFromScalarMode,\n options?: { baseRate?: number; uncertainty?: number }\n): Opinion {\n const clampedValue = clamp01(value);\n const baseRate = clamp01(options?.baseRate ?? 0.5);\n\n switch (mode) {\n case \"base_rate\":\n return {\n b: 0,\n d: 0,\n u: 1,\n a: clampedValue,\n };\n case \"dogmatic\":\n return {\n b: clampedValue,\n d: 1 - clampedValue,\n u: 0,\n a: baseRate,\n };\n case \"projected_with_u\": {\n const uncertainty = options?.uncertainty;\n if (uncertainty === undefined) {\n throw new Error(\n \"opinionFromScalar(value, \\\"projected_with_u\\\") requires options.uncertainty.\"\n );\n }\n const clampedUncertainty = clamp01(uncertainty);\n const evidenceWeight = 1 - clampedUncertainty;\n return {\n b: clampedValue * evidenceWeight,\n d: (1 - clampedValue) * evidenceWeight,\n u: clampedUncertainty,\n a: baseRate,\n };\n }\n }\n\n throw new Error(`Unsupported opinionFromScalar mode: ${mode}`);\n}\n\n/**\n * @deprecated Use opinionFromScalar(value, \"dogmatic\", { baseRate }) instead.\n */\nexport function toDogmaticOpinion(\n confidence: number,\n baseRate: number = 0.5\n): Opinion {\n return opinionFromScalar(confidence, \"dogmatic\", { baseRate });\n}\n\n/** Interpret p as a prior with no observed evidence. */\nexport function opinionFromBaseRate(probability: number): Opinion {\n return vacuous(clamp01(probability));\n}\n\n/** Interpret p as a certainty-equivalent projected probability. */\nexport function opinionFromDogmatic(\n probability: number,\n baseRate: number = 0.5\n): Opinion {\n return dogmatic(clamp01(probability), clamp01(baseRate));\n}\n\n/**\n * Interpret p as a projected probability with an explicit uncertainty bucket.\n * The resulting opinion always projects back to p.\n */\nexport function opinionFromProjected(\n probability: number,\n uncertainty: number,\n baseRate: number = 0.5\n): Opinion {\n const p = clamp01(probability);\n const u = clamp01(uncertainty);\n const remainingMass = 1 - u;\n return {\n b: p * remainingMass,\n d: (1 - p) * remainingMass,\n u,\n a: clamp01(baseRate),\n };\n}\n\nexport function hasProjectedOpinionChanged(\n current: Opinion,\n next: Opinion,\n tolerance: number = 0.01\n): boolean {\n return Math.abs(confidenceFromOpinion(next) - confidenceFromOpinion(current)) >=\n tolerance;\n}\n","import type {\n Opinion,\n TupleContradictionPolicy,\n TupleContradictionTransition,\n} from \"../../types\";\nimport { clamp01 } from \"../scoring\";\n\nexport const DEFAULT_TUPLE_CONTRADICTION_BELIEF_THRESHOLD = 0.7;\nexport const DEFAULT_TUPLE_CONTRADICTION_DISBELIEF_THRESHOLD = 0.7;\n\nexport function normalizeTupleContradictionPolicy(\n policy: Partial<TupleContradictionPolicy> = {}\n): TupleContradictionPolicy {\n return {\n beliefThreshold: clamp01(\n policy.beliefThreshold ?? DEFAULT_TUPLE_CONTRADICTION_BELIEF_THRESHOLD\n ),\n disbeliefThreshold: clamp01(\n policy.disbeliefThreshold ??\n DEFAULT_TUPLE_CONTRADICTION_DISBELIEF_THRESHOLD\n ),\n };\n}\n\nexport function detectTupleContradiction(\n opinion: Opinion,\n tauB: number = DEFAULT_TUPLE_CONTRADICTION_BELIEF_THRESHOLD,\n tauD: number = DEFAULT_TUPLE_CONTRADICTION_DISBELIEF_THRESHOLD\n): boolean {\n return opinion.b > tauB && opinion.d > tauD;\n}\n\nexport function evaluateTupleContradictionTransition(args: {\n previousTupleContradicted?: boolean;\n opinion: Opinion;\n policy?: Partial<TupleContradictionPolicy>;\n}): TupleContradictionTransition {\n const policy = normalizeTupleContradictionPolicy(args.policy);\n const tupleContradicted = detectTupleContradiction(\n args.opinion,\n policy.beliefThreshold,\n policy.disbeliefThreshold\n );\n const previousTupleContradicted = Boolean(args.previousTupleContradicted);\n\n return {\n tupleContradicted,\n crossedIntoTupleContradiction:\n !previousTupleContradicted && tupleContradicted,\n crossedOutOfTupleContradiction:\n previousTupleContradicted && !tupleContradicted,\n policy,\n };\n}\n","import type { Opinion, PropagationMode, PropagationResult } from \"../../types\";\nimport { opinion, project } from \"../subjectiveLogic\";\n\nexport function dampedDependencyOpinion(\n dependencyOpinion: Opinion,\n beliefOpinion: Opinion,\n mode: PropagationMode = \"continuous\",\n threshold: number = 0.3\n): Opinion {\n const dependencyProjection = project(dependencyOpinion);\n\n if (mode === \"threshold\") {\n if (dependencyProjection < threshold) {\n return opinion(\n 0,\n beliefOpinion.d + beliefOpinion.b * 0.5,\n 0.5,\n beliefOpinion.a\n );\n }\n return beliefOpinion;\n }\n\n const dampingFactor = Math.pow(dependencyProjection, 0.5);\n return opinion(\n beliefOpinion.b * dampingFactor,\n beliefOpinion.d + beliefOpinion.b * (1 - dampingFactor) * 0.3,\n beliefOpinion.u + beliefOpinion.b * (1 - dampingFactor) * 0.7,\n beliefOpinion.a\n );\n}\n\nexport function dampedDependencyCascade(\n dependencyOpinion: Opinion,\n beliefOpinion: Opinion,\n mode: PropagationMode = \"continuous\"\n): PropagationResult {\n return {\n opinion: dampedDependencyOpinion(dependencyOpinion, beliefOpinion, mode),\n operator: \"dependency_cascade\",\n rationale: `Damped dependency cascade (${mode}): prerequisite at ${project(\n dependencyOpinion\n ).toFixed(2)}`,\n };\n}\n","import type { EdgeMetadata, Opinion, PropagationResult } from \"../../types\";\nimport {\n constraintFusion,\n cumulativeFusion,\n negate,\n project,\n trustDiscount,\n} from \"../subjectiveLogic\";\n\nexport function applyNegativeSupport(\n source: Opinion,\n target: Opinion,\n weight: number,\n metadata: EdgeMetadata = {}\n): PropagationResult {\n if (metadata.constraint === \"xor\") {\n const result = constraintFusion(\n source,\n target,\n metadata.normalization ?? \"pressure\"\n );\n return {\n opinion: result.o2,\n operator: \"constraint_fusion\",\n rationale: `XOR constraint: source belief at ${project(source).toFixed(\n 2\n )} pressures target`,\n };\n }\n\n const discounted = trustDiscount(negate(source), Math.abs(weight));\n return {\n opinion: cumulativeFusion(target, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Contradicting evidence (weight=${weight.toFixed(\n 2\n )}) from source at ${project(source).toFixed(2)}`,\n };\n}\n\nexport function applyNegativeEvidence(\n source: Opinion,\n target: Opinion,\n weight: number\n): PropagationResult {\n const discounted = trustDiscount(negate(source), Math.abs(weight));\n return {\n opinion: cumulativeFusion(target, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Contradicting evidence (weight=${weight.toFixed(2)})`,\n };\n}\n","import type {\n ContractModulationPlan,\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n EpistemicContractModulation,\n EpistemicContractRecord,\n EpistemicContractStatus,\n EvidentialAction,\n EvidentialEvaluatorConfig,\n EvidentialMetricSnapshot,\n EvidentialOperator,\n MarketIndexComparatorConfig,\n MetricCheckerEvaluatorConfig,\n ReferenceCheckCounterConfig,\n TemporalDeadlineEvaluatorConfig,\n VerificationConfidenceTrigger,\n} from \"../../types\";\n\nexport const BUILT_IN_EVIDENTIAL_EVALUATOR = \"evidential\";\nexport const BUILT_IN_EVIDENTIAL_ALIASES = new Set([\n BUILT_IN_EVIDENTIAL_EVALUATOR,\n \"built_in_evidential\",\n \"builtin_evidential\",\n]);\nexport const BUILT_IN_METRIC_CHECKER = \"metric_checker\";\nexport const BUILT_IN_REFERENCE_CHECK_COUNTER = \"reference_check_counter\";\nexport const BUILT_IN_TEMPORAL_DEADLINE = \"temporal_deadline\";\nexport const BUILT_IN_MARKET_INDEX_COMPARATOR = \"market_index_comparator\";\n\nfunction clampConfidence(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nfunction generateContractId(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return `contract-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nexport function deriveContractStatus(\n result: EpistemicContractEvaluationResult,\n currentStatus: EpistemicContractStatus\n): EpistemicContractStatus {\n if (currentStatus === \"archived\") {\n return currentStatus;\n }\n\n switch (result) {\n case \"confirmed\":\n return \"satisfied\";\n case \"disconfirmed\":\n return \"violated\";\n case \"expired\":\n return \"expired\";\n default:\n return currentStatus === \"satisfied\" ||\n currentStatus === \"violated\" ||\n currentStatus === \"expired\"\n ? \"active\"\n : currentStatus;\n }\n}\n\nexport function deriveVerificationTrigger(\n result: EpistemicContractEvaluationResult\n): VerificationConfidenceTrigger | null {\n switch (result) {\n case \"confirmed\":\n return \"verification_confirmed\";\n case \"disconfirmed\":\n return \"verification_disconfirmed\";\n case \"expired\":\n return \"verification_expired\";\n case \"partial\":\n return \"verification_partial\";\n default:\n return null;\n }\n}\n\nexport function deriveContractModulationPlan(args: {\n currentConfidence: number;\n modulation: EpistemicContractModulation;\n result: EpistemicContractEvaluationResult;\n resultConfidence?: number;\n}): ContractModulationPlan | null {\n const trigger = deriveVerificationTrigger(args.result);\n if (!trigger) {\n return null;\n }\n\n if (args.result === \"confirmed\") {\n const rawNext = args.currentConfidence + args.modulation.onConfirmed.delta;\n const confidenceAfter = clampConfidence(\n Math.min(\n args.modulation.onConfirmed.ceiling ?? Number.POSITIVE_INFINITY,\n rawNext\n )\n );\n return {\n trigger,\n confidenceBefore: args.currentConfidence,\n confidenceAfter,\n confidenceDelta: confidenceAfter - args.currentConfidence,\n };\n }\n\n if (args.result === \"disconfirmed\") {\n const rawNext =\n args.currentConfidence + args.modulation.onDisconfirmed.delta;\n const confidenceAfter = clampConfidence(\n Math.max(args.modulation.onDisconfirmed.floor ?? 0, rawNext)\n );\n return {\n trigger,\n confidenceBefore: args.currentConfidence,\n confidenceAfter,\n confidenceDelta: confidenceAfter - args.currentConfidence,\n };\n }\n\n if (args.result === \"expired\" && args.modulation.onExpired) {\n const confidenceAfter = clampConfidence(\n args.currentConfidence + args.modulation.onExpired.delta\n );\n return {\n trigger,\n confidenceBefore: args.currentConfidence,\n confidenceAfter,\n confidenceDelta: confidenceAfter - args.currentConfidence,\n };\n }\n\n if (args.result === \"partial\" && args.modulation.onPartial) {\n if ((args.resultConfidence ?? 0) < args.modulation.onPartial.threshold) {\n return null;\n }\n const confidenceAfter = clampConfidence(\n args.currentConfidence + args.modulation.onPartial.delta\n );\n return {\n trigger,\n confidenceBefore: args.currentConfidence,\n confidenceAfter,\n confidenceDelta: confidenceAfter - args.currentConfidence,\n };\n }\n\n return null;\n}\n\nexport function createInheritedContractRecord<\n TBeliefId = string,\n TTopicId = string | undefined,\n>(\n contract: EpistemicContractRecord<any, any>,\n args: {\n beliefNodeId: TBeliefId;\n topicId?: TTopicId;\n createdBy: string;\n now: number;\n }\n): EpistemicContractRecord<TBeliefId, TTopicId> {\n return {\n beliefNodeId: args.beliefNodeId,\n contractId: generateContractId(),\n title: contract.title,\n description: contract.description,\n conditionType: contract.conditionType,\n direction: contract.direction,\n condition: contract.condition,\n deadline: contract.deadline,\n compositeOf: contract.compositeOf,\n compositeOperator: contract.compositeOperator,\n modulation: contract.modulation,\n evaluationSchedule: contract.evaluationSchedule,\n periodicIntervalMs: contract.periodicIntervalMs,\n status: \"active\",\n lineageSource: \"inherited\",\n inheritedFromContractId: contract.contractId,\n inheritedFromBeliefNodeId: contract.beliefNodeId as TBeliefId,\n inheritedAt: args.now,\n topicId: args.topicId,\n createdAt: args.now,\n createdBy: args.createdBy,\n updatedAt: args.now,\n };\n}\n\nexport function normalizeEvidentialAction(\n value: unknown\n): EvidentialAction | undefined {\n return value === \"modulate_confidence\" ||\n value === \"flag_review\" ||\n value === \"archive\"\n ? value\n : undefined;\n}\n\nexport function parseComparisonOperator(\n value: unknown,\n evaluatorName: string\n): EvidentialOperator {\n if (\n value === \"gte\" ||\n value === \"lte\" ||\n value === \"eq\" ||\n value === \"gt\" ||\n value === \"lt\"\n ) {\n return value;\n }\n throw new Error(\n `${evaluatorName} requires operator to be one of gte, lte, eq, gt, or lt.`\n );\n}\n\nexport function parseNumericThreshold(\n value: unknown,\n evaluatorName: string\n): number {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n throw new Error(`${evaluatorName} requires a finite numeric threshold.`);\n}\n\nexport function pickFiniteNumber(\n config: Record<string, unknown>,\n keys: string[]\n): number | undefined {\n for (const key of keys) {\n const value = config[key];\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n }\n return undefined;\n}\n\nexport function getEvaluatorInputRecord(\n inputData: unknown,\n nestedKey: string\n): Record<string, unknown> {\n if (!inputData || typeof inputData !== \"object\") {\n return {};\n }\n\n const root = inputData as Record<string, unknown>;\n const nested = root[nestedKey];\n if (nested && typeof nested === \"object\") {\n return nested as Record<string, unknown>;\n }\n return root;\n}\n\nexport function parseEvidentialEvaluatorConfig(\n value: unknown\n): EvidentialEvaluatorConfig {\n if (!value || typeof value !== \"object\") {\n throw new Error(\n \"Evidential contracts require condition.evaluatorConfig with metric/operator/threshold.\"\n );\n }\n\n const config = value as Record<string, unknown>;\n const metric = config.metric;\n const operator = config.operator;\n const threshold = config.threshold;\n\n if (\n metric !== \"evidence_count\" &&\n metric !== \"contradiction_status\" &&\n metric !== \"edge_freshness\" &&\n metric !== \"dependent_count\"\n ) {\n throw new Error(`Unsupported evidential metric: ${String(metric)}`);\n }\n\n if (\n operator !== \"gte\" &&\n operator !== \"lte\" &&\n operator !== \"eq\" &&\n operator !== \"gt\" &&\n operator !== \"lt\"\n ) {\n throw new Error(`Unsupported evidential operator: ${String(operator)}`);\n }\n\n if (typeof threshold !== \"number\" || !Number.isFinite(threshold)) {\n throw new Error(\"Evidential contracts require a numeric threshold.\");\n }\n\n const actionParams =\n config.actionParams &&\n typeof config.actionParams === \"object\" &&\n config.actionParams !== null\n ? (config.actionParams as Record<string, unknown>)\n : undefined;\n\n return {\n metric,\n operator,\n threshold,\n action: normalizeEvidentialAction(config.action),\n actionParams:\n actionParams &&\n (typeof actionParams.targetConfidence === \"number\" ||\n typeof actionParams.rationale === \"string\")\n ? {\n targetConfidence:\n typeof actionParams.targetConfidence === \"number\"\n ? actionParams.targetConfidence\n : undefined,\n rationale:\n typeof actionParams.rationale === \"string\"\n ? actionParams.rationale\n : undefined,\n }\n : undefined,\n };\n}\n\nexport function compareMetricValue(\n operator: EvidentialOperator,\n left: number,\n right: number\n): boolean {\n switch (operator) {\n case \"gte\":\n return left >= right;\n case \"lte\":\n return left <= right;\n case \"eq\":\n return left === right;\n case \"gt\":\n return left > right;\n case \"lt\":\n return left < right;\n default:\n return false;\n }\n}\n\nexport function resolveComparisonResult(\n direction: EpistemicContractDirection,\n comparisonSatisfied: boolean\n): EpistemicContractEvaluationResult {\n return direction === \"falsifies\"\n ? comparisonSatisfied\n ? \"disconfirmed\"\n : \"confirmed\"\n : comparisonSatisfied\n ? \"confirmed\"\n : \"disconfirmed\";\n}\n\nexport function buildComparisonRationale(args: {\n label: string;\n observedValue: number | null;\n operator: EvidentialOperator;\n threshold: number;\n comparisonSatisfied: boolean;\n result: EpistemicContractEvaluationResult;\n unit?: string;\n}): string {\n const renderedObserved =\n args.observedValue === null\n ? \"no data\"\n : `${args.observedValue}${args.unit ? ` ${args.unit}` : \"\"}`;\n const renderedThreshold = `${args.threshold}${args.unit ? ` ${args.unit}` : \"\"}`;\n const clause = `${args.label} observed ${renderedObserved} against ${args.operator} ${renderedThreshold}`;\n\n if (args.observedValue === null) {\n return `${clause}; evaluator returned ${args.result} because no current data was available.`;\n }\n\n return `${clause}; comparison ${\n args.comparisonSatisfied ? \"passed\" : \"failed\"\n }, resulting in ${args.result}.`;\n}\n\nexport function buildEvidentialRationale(args: {\n config: EvidentialEvaluatorConfig;\n snapshot: EvidentialMetricSnapshot;\n comparisonSatisfied: boolean;\n result: EpistemicContractEvaluationResult;\n}): string {\n const observed =\n args.snapshot.value === null ? \"no data\" : String(args.snapshot.value);\n const clause = `${args.snapshot.metric} observed ${observed} against ${args.config.operator} ${args.config.threshold}`;\n\n if (args.snapshot.value === null) {\n return `${clause}; evidential evaluator treated the comparison as unmet, resulting in ${args.result}.`;\n }\n\n return `${clause}; comparison ${\n args.comparisonSatisfied ? \"passed\" : \"failed\"\n }, resulting in ${args.result}.`;\n}\n\nexport function parseMetricCheckerConfig(\n value: unknown\n): MetricCheckerEvaluatorConfig {\n if (!value || typeof value !== \"object\") {\n throw new Error(\n \"metric_checker requires condition.evaluatorConfig with observedValue/operator/threshold.\"\n );\n }\n\n const config = value as Record<string, unknown>;\n return {\n metric:\n typeof config.metric === \"string\" && config.metric.length > 0\n ? config.metric\n : undefined,\n operator: parseComparisonOperator(config.operator, BUILT_IN_METRIC_CHECKER),\n threshold: parseNumericThreshold(config.threshold, BUILT_IN_METRIC_CHECKER),\n observedValue: pickFiniteNumber(config, [\"observedValue\", \"value\"]),\n currentValue: pickFiniteNumber(config, [\"currentValue\"]),\n metricValue: pickFiniteNumber(config, [\"metricValue\"]),\n unit:\n typeof config.unit === \"string\" && config.unit.length > 0\n ? config.unit\n : undefined,\n };\n}\n\nexport function parseReferenceCheckCounterConfig(\n value: unknown\n): ReferenceCheckCounterConfig {\n if (!value || typeof value !== \"object\") {\n throw new Error(\n \"reference_check_counter requires condition.evaluatorConfig with tag/operator/threshold.\"\n );\n }\n\n const config = value as Record<string, unknown>;\n if (typeof config.tag !== \"string\" || config.tag.trim().length === 0) {\n throw new Error(\"reference_check_counter requires a non-empty tag.\");\n }\n\n return {\n tag: config.tag.trim(),\n operator: parseComparisonOperator(\n config.operator,\n BUILT_IN_REFERENCE_CHECK_COUNTER\n ),\n threshold: parseNumericThreshold(\n config.threshold,\n BUILT_IN_REFERENCE_CHECK_COUNTER\n ),\n caseSensitive: config.caseSensitive === true,\n };\n}\n\nexport function parseTemporalDeadlineConfig(\n value: unknown\n): TemporalDeadlineEvaluatorConfig {\n if (!value || typeof value !== \"object\") {\n return {};\n }\n\n const config = value as Record<string, unknown>;\n return {\n label:\n typeof config.label === \"string\" && config.label.length > 0\n ? config.label\n : undefined,\n completed: config.completed === true,\n completedAt: pickFiniteNumber(config, [\"completedAt\"]),\n observedAt: pickFiniteNumber(config, [\"observedAt\"]),\n satisfiedAt: pickFiniteNumber(config, [\"satisfiedAt\"]),\n achievedAt: pickFiniteNumber(config, [\"achievedAt\"]),\n };\n}\n\nexport function parseMarketIndexComparatorConfig(\n value: unknown\n): MarketIndexComparatorConfig {\n if (!value || typeof value !== \"object\") {\n throw new Error(\n \"market_index_comparator requires condition.evaluatorConfig with subjectValue/benchmarkValue/operator/threshold.\"\n );\n }\n\n const config = value as Record<string, unknown>;\n return {\n subject:\n typeof config.subject === \"string\" && config.subject.length > 0\n ? config.subject\n : undefined,\n subjectValue: pickFiniteNumber(config, [\"subjectValue\", \"leftValue\"]),\n primaryValue: pickFiniteNumber(config, [\"primaryValue\"]),\n benchmark:\n typeof config.benchmark === \"string\" && config.benchmark.length > 0\n ? config.benchmark\n : undefined,\n benchmarkValue: pickFiniteNumber(config, [\"benchmarkValue\", \"rightValue\"]),\n comparisonValue: pickFiniteNumber(config, [\"comparisonValue\"]),\n operator: parseComparisonOperator(\n config.operator,\n BUILT_IN_MARKET_INDEX_COMPARATOR\n ),\n threshold: parseNumericThreshold(\n config.threshold,\n BUILT_IN_MARKET_INDEX_COMPARATOR\n ),\n };\n}\n","/**\n * Audience Helpers\n *\n * Shared audience normalization and exposure-class utilities for policy/runtime paths.\n */\n\nexport type AudienceMode = \"internal\" | \"lp\" | \"public\";\nexport type AudienceClass = \"internal\" | \"restricted_external\" | \"public\";\n\nexport type ResolvedAudience = {\n audienceKey: string;\n audienceClass: AudienceClass;\n audienceMode: AudienceMode;\n};\n\nexport const AUDIENCE_CLASS_RANK: Record<AudienceClass, number> = {\n public: 0,\n restricted_external: 1,\n internal: 2,\n};\n\nfunction normalizeKey(key: string | undefined | null): string {\n return (key ?? \"\")\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9:_-]+/g, \"_\")\n .replace(/_+/g, \"_\")\n .replace(/^_+|_+$/g, \"\");\n}\n\nexport function normalizeAudienceKey(key: string | undefined | null): string {\n return normalizeKey(key);\n}\n\nexport function normalizeAudienceMode(\n mode: string | undefined | null\n): AudienceMode {\n if (mode === \"public\" || mode === \"lp\" || mode === \"internal\") {\n return mode;\n }\n return \"internal\";\n}\n\nexport function classFromAudienceMode(mode: AudienceMode): AudienceClass {\n if (mode === \"public\") {\n return \"public\";\n }\n if (mode === \"lp\") {\n return \"restricted_external\";\n }\n return \"internal\";\n}\n\nexport function modeFromAudienceClass(\n audienceClass: AudienceClass\n): AudienceMode {\n if (audienceClass === \"public\") {\n return \"public\";\n }\n if (audienceClass === \"restricted_external\") {\n return \"lp\";\n }\n return \"internal\";\n}\n\nexport function classFromAudienceKey(\n audienceKey: string | undefined | null,\n fallback: AudienceClass = \"internal\"\n): AudienceClass {\n const key = normalizeKey(audienceKey);\n if (!key) {\n return fallback;\n }\n if (key === \"internal\") {\n return \"internal\";\n }\n if (key === \"public\") {\n return \"public\";\n }\n if (\n key === \"lp\" ||\n key === \"external\" ||\n key === \"client\" ||\n key === \"partner\" ||\n key === \"portfolio\" ||\n key === \"network\" ||\n key === \"restricted_external\"\n ) {\n return \"restricted_external\";\n }\n return fallback;\n}\n\nexport function resolveAudience(args?: {\n audienceMode?: string | null;\n audienceKey?: string | null;\n audienceClass?: AudienceClass | null;\n}): ResolvedAudience {\n const fallbackMode = normalizeAudienceMode(args?.audienceMode);\n const fallbackKey = normalizeKey(args?.audienceKey) || fallbackMode;\n const fallbackClass =\n args?.audienceClass ?? classFromAudienceKey(fallbackKey);\n\n return {\n audienceKey: fallbackKey,\n audienceClass: fallbackClass,\n audienceMode: modeFromAudienceClass(fallbackClass),\n };\n}\n\nexport function canViewAudienceLabel(\n viewerAudience: string,\n resourceAudienceLabel: string | undefined | null\n): boolean {\n // Viewer fallback is least privilege; resource fallback is most restrictive.\n const viewerClass = classFromAudienceKey(viewerAudience, \"public\");\n const resourceClass = classFromAudienceKey(resourceAudienceLabel, \"internal\");\n return canAudienceClassAccess(viewerClass, resourceClass);\n}\n\nexport function canAudienceClassAccess(\n viewerClass: AudienceClass,\n resourceClass: AudienceClass\n): boolean {\n return AUDIENCE_CLASS_RANK[viewerClass] >= AUDIENCE_CLASS_RANK[resourceClass];\n}\n","/**\n * Audience Registry Kernel\n *\n * Tenant/workspace audience taxonomy resolution and principal audience-scope derivation.\n */\n\nimport {\n type AudienceClass,\n type AudienceMode,\n canAudienceClassAccess,\n classFromAudienceKey,\n classFromAudienceMode,\n modeFromAudienceClass,\n normalizeAudienceKey,\n normalizeAudienceMode,\n type ResolvedAudience,\n} from \"./audience\";\nimport type { MutationCtx, QueryCtx } from \"./convex\";\n\ntype DbCtx = QueryCtx | MutationCtx;\n\ntype AudienceRegistryRow = {\n audienceKey: string;\n audienceLabel: string;\n audienceClass: AudienceClass;\n workspaceId?: string;\n};\n\nconst DEFAULT_AUDIENCES: AudienceRegistryRow[] = [\n {\n audienceKey: \"internal\",\n audienceLabel: \"Internal\",\n audienceClass: \"internal\",\n },\n {\n audienceKey: \"lp\",\n audienceLabel: \"Limited Partners\",\n audienceClass: \"restricted_external\",\n },\n {\n audienceKey: \"public\",\n audienceLabel: \"Public\",\n audienceClass: \"public\",\n },\n];\n\nconst AUDIENCE_CLASS_PRIORITY: Record<AudienceClass, number> = {\n internal: 0,\n restricted_external: 1,\n public: 2,\n};\n\nexport type AllowedAudienceScope = {\n allowedAudienceClasses: AudienceClass[];\n allowedAudienceKeys: string[];\n allowedAudienceModes: AudienceMode[];\n};\n\nexport type PrincipalAudienceScope = {\n mode: \"legacy_open\" | \"grant_enforced\" | \"admin_override\";\n grantModelEnabled: boolean;\n grantedAudienceKeys: string[];\n grantedAudienceClasses: AudienceClass[];\n allowedAudienceKeys: string[];\n allowedAudienceClasses: AudienceClass[];\n allowedAudienceModes: AudienceMode[];\n};\n\nexport function deriveAllowedAudienceClasses(\n visibility: string | undefined | null\n): AudienceClass[] {\n if (visibility === \"public\") {\n return [\"internal\", \"restricted_external\", \"public\"];\n }\n if (visibility === \"firm\" || visibility === \"external\") {\n return [\"internal\", \"restricted_external\"];\n }\n return [\"internal\"];\n}\n\nfunction unique<T>(items: T[]): T[] {\n return [...new Set(items)];\n}\n\nfunction intersect<T>(left: T[], right: T[]): T[] {\n const rightSet = new Set(right);\n return left.filter((entry) => rightSet.has(entry));\n}\n\nfunction fallbackAudienceKeyForClass(audienceClass: AudienceClass): string {\n if (audienceClass === \"public\") {\n return \"public\";\n }\n if (audienceClass === \"restricted_external\") {\n return \"lp\";\n }\n return \"internal\";\n}\n\nfunction normalizeRegistryRow(row: {\n audienceKey: string;\n audienceLabel: string;\n audienceClass: AudienceClass;\n workspaceId?: string;\n}): AudienceRegistryRow {\n return {\n audienceKey: normalizeAudienceKey(row.audienceKey),\n audienceLabel: row.audienceLabel,\n audienceClass: row.audienceClass,\n workspaceId: row.workspaceId,\n };\n}\n\nfunction dedupeRegistryRows(\n rows: AudienceRegistryRow[]\n): AudienceRegistryRow[] {\n const byKey = new Map<string, AudienceRegistryRow>();\n\n for (const row of rows) {\n const key = normalizeAudienceKey(row.audienceKey);\n if (!key) {\n continue;\n }\n const existing = byKey.get(key);\n const isWorkspaceScoped = row.workspaceId !== undefined;\n const existingWorkspaceScoped = existing?.workspaceId !== undefined;\n\n if (!existing || (isWorkspaceScoped && !existingWorkspaceScoped)) {\n byKey.set(key, {\n ...row,\n audienceKey: key,\n });\n }\n }\n\n const normalized = [...byKey.values()];\n normalized.sort((a, b) => {\n const classDelta =\n AUDIENCE_CLASS_PRIORITY[a.audienceClass] -\n AUDIENCE_CLASS_PRIORITY[b.audienceClass];\n if (classDelta !== 0) {\n return classDelta;\n }\n return a.audienceKey.localeCompare(b.audienceKey);\n });\n return normalized;\n}\n\nfunction isGrantActive(grant: {\n status: \"active\" | \"revoked\" | \"expired\";\n expiresAt?: number;\n}): boolean {\n if (grant.status !== \"active\") {\n return false;\n }\n if (grant.expiresAt !== undefined && grant.expiresAt <= Date.now()) {\n return false;\n }\n return true;\n}\n\nfunction isWorkspaceScopeMatch(args: {\n rowWorkspaceId?: string;\n workspaceId?: string | null;\n}): boolean {\n if (!args.rowWorkspaceId) {\n return true;\n }\n if (!args.workspaceId) {\n return false;\n }\n return String(args.rowWorkspaceId) === String(args.workspaceId);\n}\n\nasync function queryRegistryRows(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n }\n): Promise<AudienceRegistryRow[]> {\n if (!args.tenantId) {\n return [...DEFAULT_AUDIENCES];\n }\n\n const rows = await ctx.db\n .query(\"platformAudiences\")\n .withIndex(\"by_tenantId\", (q) => q.eq(\"tenantId\", args.tenantId!))\n .collect();\n\n const workspaceIdString = args.workspaceId ? String(args.workspaceId) : null;\n const tenantScoped = rows.filter((row) => row.status === \"active\");\n const applicable = tenantScoped.filter((row) => {\n if (!row.workspaceId) {\n return true;\n }\n if (!workspaceIdString) {\n return false;\n }\n return String(row.workspaceId) === workspaceIdString;\n });\n\n return dedupeRegistryRows([\n ...DEFAULT_AUDIENCES,\n ...applicable.map((row) =>\n normalizeRegistryRow({\n audienceKey: row.audienceKey,\n audienceLabel: row.audienceLabel,\n audienceClass: row.audienceClass,\n workspaceId: row.workspaceId,\n })\n ),\n ]);\n}\n\nexport async function listAudienceRegistryRows(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n }\n): Promise<AudienceRegistryRow[]> {\n return queryRegistryRows(ctx, args);\n}\n\nexport async function resolveAudienceFromRegistry(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n audienceMode?: string | null;\n audienceKey?: string | null;\n audienceClass?: AudienceClass | null;\n }\n): Promise<ResolvedAudience> {\n const normalizedMode = normalizeAudienceMode(args.audienceMode);\n const requestedKey =\n normalizeAudienceKey(args.audienceKey) ||\n normalizeAudienceKey(normalizedMode) ||\n \"internal\";\n const registry = await queryRegistryRows(ctx, {\n tenantId: args.tenantId,\n workspaceId: args.workspaceId,\n });\n\n const registryMatch = registry.find(\n (entry) => normalizeAudienceKey(entry.audienceKey) === requestedKey\n );\n if (registryMatch) {\n return {\n audienceKey: requestedKey,\n audienceClass: registryMatch.audienceClass,\n audienceMode: modeFromAudienceClass(registryMatch.audienceClass),\n };\n }\n\n if (args.audienceClass) {\n return {\n audienceKey: requestedKey,\n audienceClass: args.audienceClass,\n audienceMode: modeFromAudienceClass(args.audienceClass),\n };\n }\n\n if (args.audienceKey) {\n return {\n audienceKey: requestedKey,\n audienceClass: \"internal\",\n audienceMode: \"internal\",\n };\n }\n\n return {\n audienceKey: requestedKey,\n audienceClass: classFromAudienceMode(normalizedMode),\n audienceMode: normalizedMode,\n };\n}\n\nexport async function resolveAudienceClassFromRegistry(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n audienceKey?: string | null;\n fallbackClass?: AudienceClass;\n }\n): Promise<AudienceClass> {\n const normalizedKey = normalizeAudienceKey(args.audienceKey);\n if (!normalizedKey) {\n return args.fallbackClass ?? \"internal\";\n }\n\n const registry = await queryRegistryRows(ctx, {\n tenantId: args.tenantId,\n workspaceId: args.workspaceId,\n });\n const match = registry.find(\n (entry) => normalizeAudienceKey(entry.audienceKey) === normalizedKey\n );\n if (match) {\n return match.audienceClass;\n }\n\n return classFromAudienceKey(normalizedKey, args.fallbackClass ?? \"internal\");\n}\n\nexport async function canViewAudienceLabelWithRegistry(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n viewerAudienceKey?: string | null;\n resourceAudienceKey?: string | null;\n }\n): Promise<boolean> {\n const viewerClass = await resolveAudienceClassFromRegistry(ctx, {\n tenantId: args.tenantId,\n workspaceId: args.workspaceId,\n audienceKey: args.viewerAudienceKey,\n fallbackClass: \"public\",\n });\n const resourceClass = await resolveAudienceClassFromRegistry(ctx, {\n tenantId: args.tenantId,\n workspaceId: args.workspaceId,\n audienceKey: args.resourceAudienceKey,\n fallbackClass: \"internal\",\n });\n return canAudienceClassAccess(viewerClass, resourceClass);\n}\n\nexport async function resolveAllowedAudienceScopeForVisibility(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n visibility?: string | null;\n }\n): Promise<AllowedAudienceScope> {\n const allowedAudienceClasses = deriveAllowedAudienceClasses(args.visibility);\n const registry = await queryRegistryRows(ctx, {\n tenantId: args.tenantId,\n workspaceId: args.workspaceId,\n });\n\n const allowedAudienceKeys = unique(\n registry\n .filter((entry) => allowedAudienceClasses.includes(entry.audienceClass))\n .map((entry) => normalizeAudienceKey(entry.audienceKey))\n .filter(Boolean)\n );\n\n const fallbackKeys = allowedAudienceClasses.map(fallbackAudienceKeyForClass);\n const mergedKeys = unique([...allowedAudienceKeys, ...fallbackKeys]);\n const allowedAudienceModes = unique(\n allowedAudienceClasses.map((audienceClass) =>\n modeFromAudienceClass(audienceClass)\n )\n );\n\n return {\n allowedAudienceClasses,\n allowedAudienceKeys: mergedKeys,\n allowedAudienceModes,\n };\n}\n\nexport async function resolvePrincipalAudienceScope(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n principalId: string;\n groupIds: string[];\n isPrivileged: boolean;\n }\n): Promise<PrincipalAudienceScope> {\n const registry = await queryRegistryRows(ctx, {\n tenantId: args.tenantId,\n workspaceId: args.workspaceId,\n });\n const registryKeys = unique(\n registry.map((row) => normalizeAudienceKey(row.audienceKey)).filter(Boolean)\n );\n const registryClasses = unique(registry.map((row) => row.audienceClass));\n\n if (!args.tenantId) {\n return {\n mode: \"legacy_open\",\n grantModelEnabled: false,\n grantedAudienceKeys: [\"internal\"],\n grantedAudienceClasses: [\"internal\"],\n allowedAudienceKeys: registryKeys,\n allowedAudienceClasses: registryClasses,\n allowedAudienceModes: registryClasses.map((entry) =>\n modeFromAudienceClass(entry)\n ),\n };\n }\n\n const tenantGrants = await ctx.db\n .query(\"platformAudienceGrants\")\n .withIndex(\"by_tenant_audienceKey\", (q) => q.eq(\"tenantId\", args.tenantId!))\n .collect();\n\n const activeTenantGrants = tenantGrants.filter((grant) => {\n if (!isGrantActive(grant as any)) {\n return false;\n }\n return isWorkspaceScopeMatch({\n rowWorkspaceId: grant.workspaceId,\n workspaceId: args.workspaceId,\n });\n });\n const grantModelEnabled = activeTenantGrants.length > 0;\n\n if (args.isPrivileged) {\n return {\n mode: \"admin_override\",\n grantModelEnabled,\n grantedAudienceKeys: registryKeys,\n grantedAudienceClasses: registryClasses,\n allowedAudienceKeys: registryKeys,\n allowedAudienceClasses: registryClasses,\n allowedAudienceModes: registryClasses.map((entry) =>\n modeFromAudienceClass(entry)\n ),\n };\n }\n\n if (!grantModelEnabled) {\n return {\n mode: \"legacy_open\",\n grantModelEnabled: false,\n grantedAudienceKeys: [\"internal\"],\n grantedAudienceClasses: [\"internal\"],\n allowedAudienceKeys: registryKeys,\n allowedAudienceClasses: registryClasses,\n allowedAudienceModes: registryClasses.map((entry) =>\n modeFromAudienceClass(entry)\n ),\n };\n }\n\n const directGrants = await ctx.db\n .query(\"platformAudienceGrants\")\n .withIndex(\"by_tenant_principal\", (q) =>\n q.eq(\"tenantId\", args.tenantId!).eq(\"principalId\", args.principalId)\n )\n .collect();\n\n const groupGrants: Array<{\n audienceKey: string;\n audienceClass: AudienceClass;\n status: \"active\" | \"revoked\" | \"expired\";\n expiresAt?: number;\n workspaceId?: string;\n }> = [];\n for (const groupId of args.groupIds) {\n const rows = await ctx.db\n .query(\"platformAudienceGrants\")\n .withIndex(\"by_tenant_group\", (q) =>\n q.eq(\"tenantId\", args.tenantId!).eq(\"groupId\", groupId)\n )\n .collect();\n groupGrants.push(...(rows as any));\n }\n\n const activeGrantRows = [...directGrants, ...groupGrants].filter((grant) => {\n if (!isGrantActive(grant as any)) {\n return false;\n }\n return isWorkspaceScopeMatch({\n rowWorkspaceId: grant.workspaceId,\n workspaceId: args.workspaceId,\n });\n });\n\n const registryKeySet = new Set(registryKeys);\n const grantedAudienceKeys = unique(\n activeGrantRows\n .map((grant) => normalizeAudienceKey(grant.audienceKey))\n .filter((key) => key && registryKeySet.has(key))\n );\n const grantedAudienceClasses = unique(\n activeGrantRows\n .map((grant) => grant.audienceClass)\n .filter((entry): entry is AudienceClass => Boolean(entry))\n );\n\n const allowedAudienceKeys = unique([\n \"internal\",\n ...grantedAudienceKeys,\n ]).filter((key) => key === \"internal\" || registryKeySet.has(key));\n const allowedAudienceClasses = unique<AudienceClass>([\n \"internal\",\n ...grantedAudienceClasses,\n ...allowedAudienceKeys.map((key): AudienceClass => {\n const registryMatch = registry.find(\n (row) => normalizeAudienceKey(row.audienceKey) === key\n );\n return registryMatch?.audienceClass ?? classFromAudienceMode(\"internal\");\n }),\n ]);\n\n return {\n mode: \"grant_enforced\",\n grantModelEnabled: true,\n grantedAudienceKeys: unique([\"internal\", ...grantedAudienceKeys]),\n grantedAudienceClasses: unique([\"internal\", ...grantedAudienceClasses]),\n allowedAudienceKeys,\n allowedAudienceClasses,\n allowedAudienceModes: unique(\n allowedAudienceClasses.map((entry) => modeFromAudienceClass(entry))\n ),\n };\n}\n\nexport function intersectAudienceScopes(\n visibilityScope: AllowedAudienceScope,\n principalScope: PrincipalAudienceScope\n): AllowedAudienceScope {\n const allowedAudienceClasses = intersect(\n visibilityScope.allowedAudienceClasses,\n principalScope.allowedAudienceClasses\n );\n const allowedAudienceKeys = intersect(\n visibilityScope.allowedAudienceKeys.map((entry) =>\n normalizeAudienceKey(entry)\n ),\n principalScope.allowedAudienceKeys.map((entry) =>\n normalizeAudienceKey(entry)\n )\n ).filter(Boolean);\n const mergedClasses = unique(allowedAudienceClasses);\n const mergedKeys = unique(allowedAudienceKeys);\n\n return {\n allowedAudienceClasses: mergedClasses,\n allowedAudienceKeys: mergedKeys,\n allowedAudienceModes: unique(\n mergedClasses.map((audienceClass) => modeFromAudienceClass(audienceClass))\n ),\n };\n}\n\nexport async function ensureDefaultAudienceRegistry(\n ctx: MutationCtx,\n args: {\n tenantId: string;\n actorPrincipalId: string;\n }\n): Promise<{\n inserted: number;\n updated: number;\n}> {\n const now = Date.now();\n let inserted = 0;\n let updated = 0;\n\n for (const seed of DEFAULT_AUDIENCES) {\n const existing = await ctx.db\n .query(\"platformAudiences\")\n .withIndex(\"by_tenant_audienceKey\", (q) =>\n q.eq(\"tenantId\", args.tenantId).eq(\"audienceKey\", seed.audienceKey)\n )\n .collect();\n\n const tenantScoped = existing.find((row) => row.workspaceId === undefined);\n if (!tenantScoped) {\n await ctx.db.insert(\"platformAudiences\", {\n tenantId: args.tenantId,\n audienceKey: seed.audienceKey,\n audienceLabel: seed.audienceLabel,\n audienceClass: seed.audienceClass,\n status: \"active\",\n createdBy: args.actorPrincipalId,\n createdAt: now,\n updatedAt: now,\n });\n inserted += 1;\n continue;\n }\n\n const needsPatch =\n tenantScoped.status !== \"active\" ||\n tenantScoped.audienceLabel !== seed.audienceLabel ||\n tenantScoped.audienceClass !== seed.audienceClass;\n if (!needsPatch) {\n continue;\n }\n\n await ctx.db.patch(tenantScoped._id, {\n audienceLabel: seed.audienceLabel,\n audienceClass: seed.audienceClass,\n status: \"active\",\n updatedAt: now,\n });\n updated += 1;\n }\n\n return { inserted, updated };\n}\n","import {\n actionGeneric,\n anyApi,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\nexport const api = anyApi as any;\nexport const components = componentsGeneric() as any;\nexport const internal = anyApi as any;\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> = any;\nexport type DataModel = any;\nexport type ActionCtx = any;\nexport type DatabaseReader = any;\nexport type DatabaseWriter = any;\nexport type MutationCtx = any;\nexport type QueryCtx = any;\n\nexport const action = actionGeneric as any;\nexport const httpAction = httpActionGeneric as any;\nexport const internalAction = internalActionGeneric as any;\nexport const internalMutation = internalMutationGeneric as any;\nexport const internalQuery = internalQueryGeneric as any;\nexport const mutation = mutationGeneric as any;\nexport const query = queryGeneric as any;\n","/** Enum validation helpers for schema-management contracts. */\nimport { internal } from \"./convex\";\n\nexport type SchemaEnumCategory =\n | \"topic_type\"\n | \"branch_schema\"\n | \"lens_perspective_type\"\n | \"belief_type\"\n | \"edge_type\"\n | \"worktree_type\"\n | \"worktree_phase\"\n | \"activity_type\";\n\nconst BUILTIN_ENUM_FALLBACK: Record<SchemaEnumCategory, Set<string>> = {\n topic_type: new Set([\n \"domain\",\n \"theme\",\n \"deal\",\n \"strategy\",\n \"constitution\",\n \"project\",\n \"portfolio\",\n \"architecture\",\n \"capability\",\n \"runtime\",\n \"interface\",\n \"governance\",\n \"operations\",\n \"security\",\n \"data\",\n ]),\n branch_schema: new Set([\"pillar\", \"track\", \"dimension\", \"axis\", \"phase\"]),\n lens_perspective_type: new Set([\n \"investigation\",\n \"monitoring\",\n \"analysis\",\n \"comparison\",\n \"taxonomy\",\n ]),\n belief_type: new Set([\n \"belief\",\n \"hypothesis\",\n \"principle\",\n \"invariant\",\n \"assumption\",\n \"tenet\",\n \"prior\",\n \"preference\",\n \"goal\",\n \"forecast\",\n \"decision\",\n \"constraint\",\n \"tradeoff\",\n \"policy\",\n \"implementation_choice\",\n // Coding intelligence domain\n \"implementation_decision\",\n \"interface_contract\",\n \"migration_state\",\n \"code_pattern\",\n \"deprecation_notice\",\n ]),\n edge_type: new Set([\n // === 6 CANONICAL EPISTEMIC TYPES ===\n \"supports\", // L3↔L3: belief bears on belief (weight -1 to +1)\n \"informs\", // L2→L3: evidence bears on belief\n \"depends_on\", // L3→L3, Q→Q: structural gate\n \"derived_from\", // Any→Any: provenance chain\n \"contains\", // Any→Any: hierarchy, scoping, membership\n \"tests\", // Q→L3: question interrogates belief\n // === STRUCTURAL / LIFECYCLE ===\n \"supersedes\",\n \"responds_to\",\n \"belongs_to\",\n \"relates_to_thesis\",\n // === ONTOLOGICAL (tenant-extensible) ===\n \"works_at\",\n \"invested_in\",\n \"competes_with\",\n \"participates_in\",\n \"founded_by\",\n \"evaluates\",\n \"performs\",\n \"function_in\",\n \"impacts\",\n \"raised_from\",\n \"mentioned_in\",\n \"perspective_on\",\n \"plays_theme\",\n ]),\n worktree_type: new Set([\n \"belief_test\",\n \"existential\",\n \"contradiction\",\n \"refinement\",\n \"coverage\",\n \"discovery\",\n \"clarification\",\n \"confirmation\",\n ]),\n worktree_phase: new Set([\n \"cluster_mapping\",\n \"hypothesis_formation\",\n \"question_generation\",\n \"evidence_collection\",\n \"synthesis\",\n \"decision\",\n \"retrospective\",\n ]),\n activity_type: new Set([\n \"create\",\n \"update\",\n \"review\",\n \"merge\",\n \"archive\",\n \"comment\",\n \"status_change\",\n \"evidence_added\",\n \"question_added\",\n ]),\n};\n\nfunction normalizeEnumValue(value: string): string {\n return value.trim().toLowerCase();\n}\n\nexport async function validateSchemaEnumValue(\n ctx: {\n runQuery: (fn: any, args: Record<string, unknown>) => Promise<unknown>;\n },\n args: {\n category: SchemaEnumCategory;\n value: string;\n tenantId?: string;\n }\n): Promise<{ valid: boolean; source: \"schema\" | \"builtin\" | \"none\" }> {\n const normalized = normalizeEnumValue(args.value);\n if (!normalized) {\n return { valid: false, source: \"none\" };\n }\n\n try {\n const validFromSchema = (await ctx.runQuery(\n internal.schemaConfig.internalValidate,\n {\n category: args.category,\n value: normalized,\n tenantId: args.tenantId,\n }\n )) as boolean;\n if (validFromSchema) {\n return { valid: true, source: \"schema\" };\n }\n } catch {\n // Fall back to built-ins when schema config is not reachable in this context.\n }\n\n const fallback = BUILTIN_ENUM_FALLBACK[args.category];\n if (fallback.has(normalized)) {\n return { valid: true, source: \"builtin\" };\n }\n\n return { valid: false, source: \"none\" };\n}\n\nexport async function assertSchemaEnumValue(\n ctx: {\n runQuery: (fn: any, args: Record<string, unknown>) => Promise<unknown>;\n },\n args: {\n category: SchemaEnumCategory;\n value?: string;\n tenantId?: string;\n context: string;\n }\n): Promise<string | undefined> {\n if (typeof args.value !== \"string\") {\n return;\n }\n const normalized = normalizeEnumValue(args.value);\n if (!normalized) {\n return;\n }\n\n const validation = await validateSchemaEnumValue(ctx, {\n category: args.category,\n value: normalized,\n tenantId: args.tenantId,\n });\n\n if (!validation.valid) {\n const tenantHint = args.tenantId ? ` for tenant ${args.tenantId}` : \"\";\n throw new Error(\n `[${args.context}] Invalid value \"${normalized}\" for category \"${args.category}\"${tenantHint}. ` +\n \"Add it to schemaEnumConfig before use.\"\n );\n }\n\n return normalized;\n}\n","/**\n * Belief lifecycle helpers shared across Convex modules.\n *\n * Canonical lifecycle:\n * assumption -> hypothesis -> belief -> fact\n */\n\nexport type BeliefLifecycleStatus =\n | \"assumption\"\n | \"hypothesis\"\n | \"belief\"\n | \"fact\";\n\ntype PredictionOutcome =\n | \"pending\"\n | \"confirmed\"\n | \"disconfirmed\"\n | \"partial\"\n | \"expired\";\n\nconst BELIEF_STATUS_VALUES: readonly BeliefLifecycleStatus[] = [\n \"assumption\",\n \"hypothesis\",\n \"belief\",\n \"fact\",\n];\n\nconst RESOLVED_PREDICTION_OUTCOMES: readonly PredictionOutcome[] = [\n \"confirmed\",\n \"disconfirmed\",\n \"partial\",\n \"expired\",\n];\n\nexport function isBeliefLifecycleStatus(\n value: unknown\n): value is BeliefLifecycleStatus {\n return (\n typeof value === \"string\" &&\n BELIEF_STATUS_VALUES.includes(value as BeliefLifecycleStatus)\n );\n}\n\nfunction normalizeBeliefConfidence(confidence: unknown): number | null {\n if (typeof confidence !== \"number\" || !Number.isFinite(confidence)) {\n return null;\n }\n if (confidence >= 0 && confidence <= 1) {\n return confidence;\n }\n // Backward compatibility with historical percentage-scale confidence (0-100).\n if (confidence > 1 && confidence <= 100) {\n return confidence / 100;\n }\n return null;\n}\n\nexport function isResolvedByConfidence(confidence: unknown): boolean {\n const normalized = normalizeBeliefConfidence(confidence);\n if (normalized === null) {\n return false;\n }\n return normalized <= 0 || normalized >= 1;\n}\n\nexport function hasResolvedPredictionOutcome(predictionMeta: unknown): boolean {\n if (!predictionMeta || typeof predictionMeta !== \"object\") {\n return false;\n }\n const outcome = (predictionMeta as { outcome?: unknown }).outcome;\n return (\n typeof outcome === \"string\" &&\n RESOLVED_PREDICTION_OUTCOMES.includes(outcome as PredictionOutcome)\n );\n}\n\nfunction getPredictionMetaFromMetadata(\n metadata: Record<string, unknown> | undefined\n): unknown {\n return metadata?.predictionMeta;\n}\n\nexport function shouldTreatBeliefAsFact(opts: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): boolean {\n if (isResolvedByConfidence(opts.confidence)) {\n return true;\n }\n if (hasResolvedPredictionOutcome(opts.predictionMeta)) {\n return true;\n }\n if (\n hasResolvedPredictionOutcome(getPredictionMetaFromMetadata(opts.metadata))\n ) {\n return true;\n }\n return false;\n}\n\nexport function resolveBeliefLifecycleStatus(opts: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): BeliefLifecycleStatus {\n if (shouldTreatBeliefAsFact(opts)) {\n return \"fact\";\n }\n\n const direct = opts.beliefStatus;\n if (isBeliefLifecycleStatus(direct)) {\n // If the belief has been scored (has numeric credence) but stored status\n // is still pre-validation, promote to \"belief\". Scoring = merge to main.\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (normalized !== null && isPreValidationBeliefStatus(direct)) {\n return \"belief\";\n }\n return direct;\n }\n\n const metaStatus = opts.metadata?.beliefStatus;\n if (isBeliefLifecycleStatus(metaStatus)) {\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (normalized !== null && isPreValidationBeliefStatus(metaStatus)) {\n return \"belief\";\n }\n return metaStatus;\n }\n\n return \"assumption\";\n}\n\nexport function isPreValidationBeliefStatus(\n status: BeliefLifecycleStatus\n): boolean {\n return status === \"assumption\" || status === \"hypothesis\";\n}\n\nexport function isPropagationEligibleBeliefStatus(\n status: BeliefLifecycleStatus\n): boolean {\n return status === \"belief\" || status === \"fact\";\n}\n\nexport function promoteBeliefStatusAfterScoring(\n status: BeliefLifecycleStatus,\n opts?: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n }\n): BeliefLifecycleStatus {\n if (shouldTreatBeliefAsFact({ ...opts })) {\n return \"fact\";\n }\n if (isPreValidationBeliefStatus(status)) {\n return \"belief\";\n }\n return status === \"fact\" ? \"fact\" : \"belief\";\n}\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\n\nexport const containsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"contains\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Structural containment only. Traversed for explicit semantics, but it never propagates opinions.\",\n};\n\n","import {\n applyNegativeEvidence,\n applyNegativeSupport,\n cumulativeFusion,\n project,\n trustDiscount,\n type EdgeMetadata,\n type Opinion,\n type PropagationResult,\n} from \"@lucern/confidence\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeRecord,\n} from \"./propagationTypes\";\n\nexport function readEdgeMetadata<TNodeId extends string>(\n edge: PropagationEdgeRecord<TNodeId>\n): EdgeMetadata {\n return {\n constraint: edge.constraint ?? undefined,\n normalization: edge.normalization ?? undefined,\n propagation: edge.propagation ?? undefined,\n conditionalA: edge.conditionalA ?? undefined,\n conditionalNotA: edge.conditionalNotA ?? undefined,\n };\n}\n\nexport function applyPerHopDamping(\n sourceOpinion: Opinion,\n damping: number\n): Opinion {\n if (damping >= 1) {\n return sourceOpinion;\n }\n\n return trustDiscount(sourceOpinion, Math.max(0, damping));\n}\n\nexport function annotateRationale(\n result: PropagationResult,\n spec: EdgePropagationSpec,\n hop: number\n): PropagationResult {\n return {\n ...result,\n rationale: `hop=${hop} edge=${spec.edgeType} damping=${spec.damping.toFixed(\n 2\n )} :: ${result.rationale}`,\n };\n}\n\nexport function propagatePositiveSupport(\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edgeWeight: number\n): PropagationResult {\n const discounted = trustDiscount(sourceOpinion, Math.abs(edgeWeight));\n return {\n opinion: cumulativeFusion(targetOpinion, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Supporting evidence (weight=${edgeWeight.toFixed(\n 2\n )}) from source at ${project(sourceOpinion).toFixed(2)}`,\n };\n}\n\nexport function propagatePositiveInform(\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edgeWeight: number\n): PropagationResult {\n const discounted = trustDiscount(sourceOpinion, Math.abs(edgeWeight));\n return {\n opinion: cumulativeFusion(targetOpinion, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Supporting evidence (weight=${edgeWeight.toFixed(2)})`,\n };\n}\n\nexport function propagateNegativeSupportWithMetadata(\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edgeWeight: number,\n edge: PropagationEdgeRecord\n): PropagationResult {\n return applyNegativeSupport(\n sourceOpinion,\n targetOpinion,\n edgeWeight,\n readEdgeMetadata(edge)\n );\n}\n\nexport function propagateNegativeInform(\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edgeWeight: number\n): PropagationResult {\n return applyNegativeEvidence(sourceOpinion, targetOpinion, edgeWeight);\n}\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeSupportWithMetadata,\n} from \"./utils\";\n\nexport const contradictsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"contradicts\",\n direction: \"bidirectional\",\n transitivity: \"none\",\n damping: 0.85,\n maxHops: 1,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const negativeWeight = -Math.abs(edge.weight ?? 1);\n const result = propagateNegativeSupportWithMetadata(\n dampedSource,\n targetOpinion,\n negativeWeight,\n edge\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Legacy contradiction edges move negative pressure in either direction, but never beyond one hop.\",\n};\n\n","import {\n conditionalDeduction,\n dampedDependencyCascade,\n project,\n} from \"@lucern/confidence\";\nimport type { EdgePropagationSpec } from \"./propagationTypes\";\nimport { annotateRationale, applyPerHopDamping, readEdgeMetadata } from \"./utils\";\n\nexport const dependsOnPropagationSpec: EdgePropagationSpec = {\n edgeType: \"depends_on\",\n direction: \"incoming\",\n transitivity: \"damped\",\n damping: 0.8,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const metadata = readEdgeMetadata(edge);\n\n if (metadata.conditionalA && metadata.conditionalNotA) {\n const deducedOpinion = conditionalDeduction(\n dampedSource,\n metadata.conditionalA,\n metadata.conditionalNotA,\n targetOpinion.a\n );\n\n return annotateRationale(\n {\n opinion: deducedOpinion,\n operator: \"conditional_deduction\",\n rationale: `Conditional deduction: prerequisite at ${project(\n dampedSource\n ).toFixed(2)}`,\n },\n context.spec,\n context.hop\n );\n }\n\n const result = dampedDependencyCascade(\n dampedSource,\n targetOpinion,\n metadata.propagation ?? \"continuous\"\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Structural gating. Textbook conditional deduction when edge conditionals exist, otherwise damped dependency cascade through downstream chains.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\n\nexport const derivedFromPropagationSpec: EdgePropagationSpec = {\n edgeType: \"derived_from\",\n direction: \"incoming\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Provenance only. The traversal surface stays explicit, but confidence does not move across derived_from edges.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagatePositiveInform,\n} from \"./utils\";\n\nexport const elaboratesPropagationSpec: EdgePropagationSpec = {\n edgeType: \"elaborates\",\n direction: \"outgoing\",\n transitivity: \"damped\",\n damping: 0.7,\n maxHops: 2,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const contextualWeight = Math.min(Math.abs(edge.weight ?? 0.35), 0.35);\n const result = propagatePositiveInform(\n dampedSource,\n targetOpinion,\n contextualWeight\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Context-rich supporting detail. Elaborates carries a small positive effect with short, damped chaining.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeInform,\n propagatePositiveInform,\n} from \"./utils\";\n\nexport const informsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"informs\",\n direction: \"outgoing\",\n transitivity: \"full\",\n damping: 0.92,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const weight = edge.weight ?? 1;\n const result =\n weight < 0\n ? propagateNegativeInform(dampedSource, targetOpinion, weight)\n : propagatePositiveInform(dampedSource, targetOpinion, weight);\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Evidence-bearing influence. Informs can chain through the graph with light per-hop damping.\",\n};\n\n","import type {\n EdgeMetadata,\n Opinion,\n PropagationResult,\n} from \"@lucern/confidence\";\n\nexport type PropagationTraversalDirection = \"outgoing\" | \"incoming\";\n\nexport type PropagationSpecDirection =\n | PropagationTraversalDirection\n | \"bidirectional\";\n\nexport type PropagationTransitivity = \"none\" | \"damped\" | \"full\";\n\nexport type PropagationEdgeType =\n | \"supports\"\n | \"depends_on\"\n | \"informs\"\n | \"contains\"\n | \"tests\"\n | \"derived_from\"\n | \"contradicts\"\n | \"refutes\"\n | \"elaborates\";\n\nexport type PropagationEdgeRecord<TNodeId extends string = string> = {\n fromNodeId?: TNodeId | null;\n toNodeId?: TNodeId | null;\n edgeType: string;\n weight?: number | null;\n constraint?: EdgeMetadata[\"constraint\"] | null;\n normalization?: EdgeMetadata[\"normalization\"] | null;\n propagation?: EdgeMetadata[\"propagation\"] | null;\n conditionalA?: EdgeMetadata[\"conditionalA\"] | null;\n conditionalNotA?: EdgeMetadata[\"conditionalNotA\"] | null;\n tenantId?: string;\n workspaceId?: string;\n};\n\nexport type EdgePropagationSpec<TNodeId extends string = string> = {\n edgeType: PropagationEdgeType;\n direction: PropagationSpecDirection;\n transitivity: PropagationTransitivity;\n damping: number;\n maxHops: number | \"unbounded\";\n operator: (\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edge: PropagationEdgeRecord<TNodeId>,\n context: {\n hop: number;\n sourceNodeId: TNodeId;\n targetNodeId: TNodeId;\n traversedDirection: PropagationTraversalDirection;\n spec: EdgePropagationSpec<TNodeId>;\n }\n ) => PropagationResult | null;\n description: string;\n};\n\nexport function isPropagationTraversalDirection(\n direction: string\n): direction is PropagationTraversalDirection {\n return direction === \"outgoing\" || direction === \"incoming\";\n}\n\nexport function canTraverseHop<TNodeId extends string>(\n spec: EdgePropagationSpec<TNodeId>,\n nextHop: number\n): boolean {\n return spec.maxHops === \"unbounded\" || nextHop <= spec.maxHops;\n}\n\nexport function canContinueTransitively<TNodeId extends string>(\n spec: EdgePropagationSpec<TNodeId>,\n currentHop: number\n): boolean {\n if (spec.transitivity === \"none\") {\n return false;\n }\n\n return spec.maxHops === \"unbounded\" || currentHop < spec.maxHops;\n}\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeInform,\n} from \"./utils\";\n\nexport const refutesPropagationSpec: EdgePropagationSpec = {\n edgeType: \"refutes\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 0.9,\n maxHops: 1,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const negativeWeight = -Math.abs(edge.weight ?? 1);\n const result = propagateNegativeInform(\n dampedSource,\n targetOpinion,\n negativeWeight\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Explicit negative evidence semantics. Refutes is treated as strong one-hop counter-evidence.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeSupportWithMetadata,\n propagatePositiveSupport,\n} from \"./utils\";\n\nexport const supportsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"supports\",\n direction: \"outgoing\",\n transitivity: \"full\",\n damping: 0.85,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const weight = edge.weight ?? 1;\n const result =\n weight < 0\n ? propagateNegativeSupportWithMetadata(\n dampedSource,\n targetOpinion,\n weight,\n edge\n )\n : propagatePositiveSupport(dampedSource, targetOpinion, weight);\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Belief-to-belief influence. Supports chains transitively with moderate per-hop damping.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\n\nexport const testsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"tests\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Interrogation linkage only. Tests edges do not directly move confidence.\",\n};\n\n","import { containsPropagationSpec } from \"./contains\";\nimport { contradictsPropagationSpec } from \"./contradicts\";\nimport { dependsOnPropagationSpec } from \"./dependsOn\";\nimport { derivedFromPropagationSpec } from \"./derivedFrom\";\nimport { elaboratesPropagationSpec } from \"./elaborates\";\nimport { informsPropagationSpec } from \"./informs\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeType,\n PropagationSpecDirection,\n PropagationTraversalDirection,\n} from \"./propagationTypes\";\nimport {\n canContinueTransitively,\n canTraverseHop,\n isPropagationTraversalDirection,\n} from \"./propagationTypes\";\nimport { refutesPropagationSpec } from \"./refutes\";\nimport { supportsPropagationSpec } from \"./supports\";\nimport { testsPropagationSpec } from \"./tests\";\n\nexport type {\n EdgePropagationSpec,\n PropagationEdgeRecord,\n PropagationEdgeType,\n PropagationSpecDirection,\n PropagationTransitivity,\n PropagationTraversalDirection,\n} from \"./propagationTypes\";\nexport {\n canContinueTransitively,\n canTraverseHop,\n isPropagationTraversalDirection,\n} from \"./propagationTypes\";\n\nexport const EDGE_PROPAGATION_SPECS: readonly EdgePropagationSpec[] = [\n supportsPropagationSpec,\n informsPropagationSpec,\n dependsOnPropagationSpec,\n derivedFromPropagationSpec,\n containsPropagationSpec,\n testsPropagationSpec,\n contradictsPropagationSpec,\n refutesPropagationSpec,\n elaboratesPropagationSpec,\n] as const;\n\nconst EDGE_PROPAGATION_SPEC_MAP = new Map<\n PropagationEdgeType,\n EdgePropagationSpec\n>(EDGE_PROPAGATION_SPECS.map((spec) => [spec.edgeType, spec]));\n\nexport function getEdgePropagationSpec(\n edgeType: string\n): EdgePropagationSpec | undefined {\n return EDGE_PROPAGATION_SPEC_MAP.get(edgeType as PropagationEdgeType);\n}\n\nexport function getEdgePropagationSpecs(): readonly EdgePropagationSpec[] {\n return EDGE_PROPAGATION_SPECS;\n}\n\nexport function getTraversalDirections(\n direction: PropagationSpecDirection\n): readonly PropagationTraversalDirection[] {\n if (isPropagationTraversalDirection(direction)) {\n return [direction];\n }\n\n return [\"outgoing\", \"incoming\"];\n}\n\n","/**\n * Common Validators\n *\n * Shared validators for patterns used across domains.\n *\n * @module schema/shared/common\n */\n\nimport { v } from \"convex/values\";\nimport { looseJsonArray, looseJsonObject, looseJsonValue } from \"../validators\";\n\n// =============================================================================\n// CONFIDENCE\n// =============================================================================\n\n/**\n * Confidence level (0-1 scale).\n */\nexport const confidence = v.number();\n\n/**\n * Named confidence levels.\n */\nexport const confidenceLevel = v.union(\n v.literal(\"very_high\"), // 0.9+\n v.literal(\"high\"), // 0.7-0.9\n v.literal(\"medium\"), // 0.4-0.7\n v.literal(\"low\"), // 0.2-0.4\n v.literal(\"very_low\") // 0-0.2\n);\n\n/**\n * Convert numeric confidence to level.\n */\nexport function toConfidenceLevel(\n confidence: number\n): \"very_high\" | \"high\" | \"medium\" | \"low\" | \"very_low\" {\n if (confidence >= 0.9) {\n return \"very_high\";\n }\n if (confidence >= 0.7) {\n return \"high\";\n }\n if (confidence >= 0.4) {\n return \"medium\";\n }\n if (confidence >= 0.2) {\n return \"low\";\n }\n return \"very_low\";\n}\n\n// =============================================================================\n// PRIORITY\n// =============================================================================\n\n/**\n * Standard priority levels (1 = highest).\n */\nexport const priorityLevel = v.union(\n v.literal(1), // Critical\n v.literal(2), // High\n v.literal(3), // Medium\n v.literal(4), // Low\n v.literal(5) // Backlog\n);\n\n/**\n * Named priority levels.\n */\nexport const namedPriority = v.union(\n v.literal(\"critical\"),\n v.literal(\"high\"),\n v.literal(\"medium\"),\n v.literal(\"low\"),\n v.literal(\"backlog\")\n);\n\n// =============================================================================\n// STATUS\n// =============================================================================\n\n/**\n * Generic lifecycle status.\n */\nexport const lifecycleStatus = v.union(\n v.literal(\"active\"),\n v.literal(\"paused\"),\n v.literal(\"completed\"),\n v.literal(\"archived\")\n);\n\n/**\n * Processing status.\n */\nexport const processingStatus = v.union(\n v.literal(\"pending\"),\n v.literal(\"processing\"),\n v.literal(\"completed\"),\n v.literal(\"failed\")\n);\n\n// =============================================================================\n// EXTERNAL IDS\n// =============================================================================\n\n/**\n * Common external ID references.\n */\nexport const externalIds = v.object({\n crunchbaseId: v.optional(v.string()),\n linkedinUrl: v.optional(v.string()),\n pitchbookId: v.optional(v.string()),\n twitterUrl: v.optional(v.string()),\n domain: v.optional(v.string()),\n});\n\n// =============================================================================\n// SOURCE ATTRIBUTION\n// =============================================================================\n\n/**\n * Source type for evidence/information.\n */\nexport const sourceType = v.union(\n v.literal(\"proprietary\"), // Internal Stack research\n v.literal(\"primary\"), // Direct interviews, calls\n v.literal(\"secondary\"), // Published sources\n v.literal(\"ai_generated\"), // AI-synthesized\n v.literal(\"user_input\"), // Manual user entry\n v.literal(\"inferred\") // System inference\n);\n\n/**\n * Source attribution.\n */\nexport const sourceAttribution = v.object({\n sourceType: v.optional(sourceType),\n sourceId: v.optional(v.string()), // Reference to source entity\n sourceUrl: v.optional(v.string()),\n sourceDate: v.optional(v.number()),\n sourceName: v.optional(v.string()),\n});\n\n// =============================================================================\n// LOOSE JSON\n// =============================================================================\n\n/**\n * Shallow JSON validators for dynamic payloads.\n *\n * Canonical source now lives in Lucern schema-management validators.\n */\nexport { looseJsonArray, looseJsonObject, looseJsonValue };\n\n// =============================================================================\n// PAGINATION\n// =============================================================================\n\n/**\n * Pagination parameters.\n */\nexport const pagination = v.object({\n cursor: v.optional(v.string()),\n limit: v.optional(v.number()),\n});\n\n/**\n * Pagination result metadata.\n */\nexport const paginationMeta = v.object({\n hasMore: v.boolean(),\n nextCursor: v.optional(v.string()),\n totalCount: v.optional(v.number()),\n});\n\n// =============================================================================\n// RICH TEXT\n// =============================================================================\n\n/**\n * Rich text content (for editors like TipTap).\n */\nexport const richTextContent = v.object({\n type: v.literal(\"doc\"),\n content: looseJsonArray,\n});\n\n/**\n * Content with optional rich text.\n */\nexport const content = v.union(v.string(), richTextContent);\n\n// =============================================================================\n// TOKEN USAGE\n// =============================================================================\n\n/**\n * LLM token usage tracking.\n */\nexport const tokenUsage = v.object({\n promptTokens: v.optional(v.number()),\n completionTokens: v.optional(v.number()),\n totalTokens: v.optional(v.number()),\n});\n\n// =============================================================================\n// FILE METADATA\n// =============================================================================\n\n/**\n * File upload metadata.\n */\nexport const fileMetadata = v.object({\n fileName: v.optional(v.string()),\n fileSize: v.optional(v.number()),\n mimeType: v.optional(v.string()),\n storageId: v.optional(v.id(\"_storage\")),\n externalUrl: v.optional(v.string()),\n});\n","/**\n * Epistemic Nodes Table\n *\n * Unified knowledge graph nodes: epistemic objects + ontological entities.\n * - Epistemic: beliefs, questions, evidence, sources, syntheses, themes, deals\n * - Ontological: companies, people, investors, functions, value chains\n *\n * This is THE source of truth for all knowledge objects in StackOS.\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n * @module schema/spine/tables/epistemicNodes\n */\n\nimport { defineTable } from \"convex/server\";\nimport { v } from \"convex/values\";\nimport { looseJsonObject } from \"../../shared/common\";\n\n// =============================================================================\n// NODE TYPE VALIDATORS\n// =============================================================================\n\n/**\n * All valid node types in the epistemic graph.\n * Organized by epistemic layer (L4 → L3 → L2 → L1 → Ontological)\n */\nexport const nodeType = v.union(\n // --- L4: Audit Targets (decisions, outcomes) ---\n v.literal(\"decision\"), // Investment decision with knowledge horizon snapshot\n\n // --- L3: Traversal Anchors (epistemic structure) ---\n v.literal(\"belief\"), // Structured conviction (immutable formulation)\n v.literal(\"question\"), // Unit of uncertainty\n v.literal(\"theme\"), // Investment thesis / conviction cluster\n v.literal(\"deal\"), // Investment evaluation process\n v.literal(\"topic\"), // Hierarchical knowledge container\n\n // --- L2: Compression Boundary (minimum reasoning unit) ---\n v.literal(\"claim\"), // Atomic assertion that can be true/false\n v.literal(\"evidence\"), // Interpreted signal linked to beliefs\n v.literal(\"synthesis\"), // Primers, deep research\n v.literal(\"answer\"), // Immutable answer snapshot for a question\n\n // --- L1: Terminal Leaves (non-traversable, grounding) ---\n v.literal(\"atomic_fact\"), // Raw fact from source (not interpreted)\n v.literal(\"excerpt\"), // Direct quote from source document\n v.literal(\"source\"), // News, documents, transcripts\n\n // --- Ontological Entities (things in the world) ---\n v.literal(\"company\"), // Organization (subtype: private, corporate, portfolio)\n v.literal(\"person\"), // Individual (founder, expert, LP, contact)\n v.literal(\"investor\"), // Investment entity (subtype: vc, lp, cvc, pe, family_office, angel)\n v.literal(\"function\"), // What a company does (from classifier)\n v.literal(\"value_chain\") // Market structure / value flow\n);\n\n/**\n * Epistemic layer for traversal rules.\n * Traversal: L4→L3→L2→L1, never skip layers.\n */\nexport const epistemicLayer = v.union(\n v.literal(\"L4\"), // Decisions, outcomes - audit targets\n v.literal(\"L3\"), // Beliefs, questions, themes - traversal anchors\n v.literal(\"L2\"), // Claims, evidence, synthesis - compression boundary\n v.literal(\"L1\"), // Atomic facts, excerpts, sources - terminal leaves\n v.literal(\"ontological\"), // Companies, people, etc - not epistemic\n v.literal(\"organizational\") // Topics, lenses, worktrees — structural containers\n);\n\n/**\n * Node lifecycle status.\n */\nexport const nodeStatus = v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"), // Replaced by newer version\n v.literal(\"archived\"),\n v.literal(\"deleted\")\n);\n\n/**\n * How the node was created.\n */\nexport const sourceType = v.union(\n v.literal(\"human\"), // User created directly\n v.literal(\"ai_extracted\"), // LLM extracted from a source\n v.literal(\"ai_generated\"), // LLM synthesized/created\n v.literal(\"imported\"), // External system import\n v.literal(\"system\"), // System-generated (migrations, classifiers)\n v.literal(\"verified\"), // Human-verified source\n v.literal(\"proprietary\") // Proprietary/internal data\n);\n\n/**\n * Verification status for nodes.\n */\nexport const verificationStatus = v.union(\n v.literal(\"unverified\"),\n v.literal(\"human_verified\"),\n v.literal(\"ai_verified\"),\n v.literal(\"contradicted\"),\n v.literal(\"outdated\")\n);\n\n/**\n * Neo4j sync status.\n */\nexport const syncStatus = v.union(\n v.literal(\"synced\"), // Node and edges fully synced to Neo4j\n v.literal(\"pending_edges\"), // Node created, edges being created\n v.literal(\"edge_creation_failed\") // Edge creation failed, needs retry\n);\n\n// =============================================================================\n// POLICY / ENTITLEMENT METADATA\n// =============================================================================\n\nexport const audienceLabel = v.string();\n\nexport const sensitivityTier = v.union(\n v.literal(\"low\"),\n v.literal(\"medium\"),\n v.literal(\"high\"),\n v.literal(\"restricted\")\n);\n\nexport const exportClass = v.union(\n v.literal(\"internal_only\"),\n v.literal(\"client_safe\"),\n v.literal(\"public_safe\"),\n v.literal(\"restricted\")\n);\n\nexport const anonymizationClass = v.union(\n v.literal(\"none\"),\n v.literal(\"standard\"),\n v.literal(\"strict\")\n);\n\n// =============================================================================\n// TYPED METADATA VALIDATORS\n// =============================================================================\n\n// --- BELIEF METADATA ---\n// Epistemic status tracks where a belief is in its lifecycle (computed display status)\nexport const epistemicStatus = v.union(\n v.literal(\"hypothesis\"), // Initial conjecture, low evidence\n v.literal(\"emerging\"), // Building evidence, gaining traction\n v.literal(\"established\"), // Well-evidenced, core to thesis\n v.literal(\"challenged\"), // Contradicting evidence appeared\n v.literal(\"assumption\"), // Taken as given, not actively tested\n v.literal(\"deprecated\") // Superseded or abandoned\n);\n\n/**\n * Canonical belief lifecycle status.\n *\n * This field is distinct from `status`:\n * - `status`: archival/supersession lifecycle of the node itself.\n * - `beliefStatus`: epistemic lifecycle of the claim.\n */\nexport const beliefStatus = v.union(\n v.literal(\"assumption\"),\n v.literal(\"hypothesis\"),\n v.literal(\"belief\"),\n v.literal(\"fact\")\n);\n\n// How easily can this belief be reversed if wrong?\nexport const reversibility = v.union(\n v.literal(\"irreversible\"), // One-way door decision\n v.literal(\"hard_to_reverse\"), // Significant cost to undo\n v.literal(\"reversible\"), // Can change course with moderate effort\n v.literal(\"trivial\") // Easy to adjust\n);\n\nexport const predictionOutcome = v.union(\n v.literal(\"pending\"),\n v.literal(\"confirmed\"),\n v.literal(\"disconfirmed\"),\n v.literal(\"partial\"),\n v.literal(\"expired\")\n);\n\nexport const predictionMeta = v.object({\n isPrediction: v.boolean(),\n registeredAt: v.number(), // When prediction was made\n expectedBy: v.optional(v.number()), // When we expect resolution\n outcome: v.optional(predictionOutcome),\n outcomeRecordedAt: v.optional(v.number()),\n outcomeEvidenceId: v.optional(v.string()), // globalId of confirming evidence\n confidenceAtPrediction: v.optional(v.number()), // 0-1\n actualVsPredicted: v.optional(v.string()), // Notes on how outcome compared\n});\n\n// --- EVIDENCE METADATA ---\nexport const methodology = v.union(\n // Primary Research (high value)\n v.literal(\"primary_research\"), // Direct investigation\n v.literal(\"expert_interview\"), // Expert call/interview\n v.literal(\"customer_interview\"), // Customer research\n v.literal(\"field_observation\"), // On-site observation\n v.literal(\"proprietary_data\"), // Internal data analysis\n\n // Secondary Research\n v.literal(\"desk_research\"), // Public sources\n v.literal(\"regulatory_filing\"), // SEC, regulatory docs\n v.literal(\"news_article\"), // News/press\n v.literal(\"academic_paper\"), // Academic research\n\n // AI-Assisted\n v.literal(\"ai_synthesis\"), // AI-generated synthesis\n v.literal(\"ai_extraction\") // AI-extracted from source\n);\n\nexport const informationAsymmetry = v.union(\n v.literal(\"proprietary\"), // Only we have this\n v.literal(\"early\"), // We're early but others will get it\n v.literal(\"common\") // Everyone has access\n);\n\n// Evidence temporal nature: factual (resolved outcome) vs forecast (prediction)\n// See convex/schema/spine/nodes/evidence.ts for full documentation.\nexport const temporalNature = v.union(\n v.literal(\"factual\"), // Resolved outcome. Grounded in reality.\n v.literal(\"forecast\"), // Prediction. Will resolve. Discounted weight.\n v.literal(\"unknown\") // Not yet classified.\n);\n\n// --- QUESTION METADATA ---\nexport const questionType = v.union(\n v.literal(\"validation\"), // Does evidence support this belief?\n v.literal(\"falsification\"), // What would prove this belief wrong?\n v.literal(\"assumption_probe\"), // Is this unstated assumption true?\n v.literal(\"prediction_test\"), // Will this predicted outcome occur?\n v.literal(\"counterfactual\"), // What would we expect if X were false?\n v.literal(\"discovery\"), // What don't we know yet?\n v.literal(\"clarification\"), // What does X actually mean?\n v.literal(\"comparison\"), // How does X compare to Y?\n v.literal(\"causal\"), // What caused X?\n v.literal(\"mechanism\"), // How does X work?\n v.literal(\"general\") // Unclassified\n);\n\nexport const questionPriority = v.union(\n v.literal(\"critical\"), // Blocks decision-making\n v.literal(\"high\"), // Important for thesis\n v.literal(\"medium\"), // Would be nice to know\n v.literal(\"low\") // Background/curiosity\n);\n\nexport const answerQuality = v.union(\n v.literal(\"definitive\"), // Clear, well-supported\n v.literal(\"strong\"), // Good evidence, high confidence\n v.literal(\"moderate\"), // Some evidence\n v.literal(\"weak\"), // Limited evidence\n v.literal(\"speculative\"), // Mostly conjecture\n v.literal(\"unanswered\") // No answer yet\n);\n\n// --- BELIEF CONSENSUS METADATA (for non-consensus detection) ---\nexport const consensusView = v.union(\n v.literal(\"aligned\"), // We agree with market consensus\n v.literal(\"ahead_of\"), // We see this before consensus does\n v.literal(\"contrarian\"), // We actively disagree with consensus\n v.literal(\"orthogonal\"), // We're looking at something consensus isn't discussing\n v.literal(\"unknown\") // We don't know what consensus thinks\n);\n\n// --- THEME METADATA ---\nexport const themeConviction = v.union(\n v.literal(\"high\"), // Strong conviction, actively deploying\n v.literal(\"medium\"), // Building conviction\n v.literal(\"low\"), // Exploring, not convicted\n v.literal(\"negative\") // Actively avoiding\n);\n\n// --- DECISION METADATA ---\nexport const decisionType = v.union(\n v.literal(\"invest\"),\n v.literal(\"pass\"),\n v.literal(\"follow_on\"),\n v.literal(\"exit\"),\n v.literal(\"deep_dive\"),\n v.literal(\"monitor\"),\n v.literal(\"deprioritize\"),\n v.literal(\"thesis_adopt\"),\n v.literal(\"thesis_revise\"),\n v.literal(\"thesis_abandon\")\n);\n\nexport const decisionOutcome = v.union(\n v.literal(\"pending\"),\n v.literal(\"successful\"),\n v.literal(\"unsuccessful\"),\n v.literal(\"mixed\"),\n v.literal(\"unknown\")\n);\n\n// --- EXTERNAL IDS ---\nexport const externalIds = v.object({\n crunchbase: v.optional(v.string()),\n linkedin: v.optional(v.string()),\n pitchbook: v.optional(v.string()),\n twitter: v.optional(v.string()),\n website: v.optional(v.string()),\n});\n\n// =============================================================================\n// TABLE DEFINITION\n// =============================================================================\n\n/**\n * Epistemic Nodes table.\n * The unified graph node store for all knowledge objects.\n */\nexport const epistemicNodes = defineTable({\n // === IDENTITY ===\n globalId: v.string(), // UUID - survives migration to Neo4j\n\n // === TYPE ===\n nodeType,\n\n // === EPISTEMIC LAYER ===\n epistemicLayer: v.optional(epistemicLayer),\n\n // === SUBTYPE (for typed entities) ===\n subtype: v.optional(v.string()), // company: private|corporate|portfolio, investor: vc|lp|cvc|pe|family_office|angel\n\n // === CONTENT ===\n canonicalText: v.string(), // The core content (belief statement, company name, etc.)\n contentHash: v.string(), // SHA256(nodeType + canonicalText) for deduplication\n\n // Extended content (for sources/syntheses)\n content: v.optional(v.string()), // Full text for documents/articles\n contentType: v.optional(v.string()), // \"markdown\", \"html\", \"pdf\", \"text\"\n\n // === METADATA ===\n title: v.optional(v.string()), // Display title\n tags: v.optional(v.array(v.string())),\n domain: v.optional(v.string()), // For companies: website domain\n\n // Type-specific metadata (flexible object - LEGACY)\n // New code should use the typed fields below when available\n metadata: v.optional(looseJsonObject),\n\n // === POLICY / ENTITLEMENT ===\n tenantId: v.optional(v.string()),\n workspaceId: v.optional(v.string()),\n ownerPrincipalId: v.optional(v.string()),\n audienceLabel: v.optional(audienceLabel),\n policyTags: v.optional(v.array(v.string())),\n sensitivityTier: v.optional(sensitivityTier),\n exportClass: v.optional(exportClass),\n anonymizationClass: v.optional(anonymizationClass),\n\n // === PUBLICATION (visibility-based, not copy-based) ===\n // Publication expands who can see a workspace-local node — the node stays\n // in its workspace, like a microservice exposing part of its API surface.\n // Rules-based: pack/tenant-level publicationRules auto-evaluate on\n // confidence changes and node creation. No manual click-by-click.\n publicationStatus: v.optional(\n v.union(\n v.literal(\"unpublished\"), // Default: workspace-local only\n v.literal(\"published\"), // Visible at tenant scope (rules matched)\n v.literal(\"suppressed\") // Manually blocked even if rules match\n )\n ),\n publishedAt: v.optional(v.number()), // When publication status last changed to published\n publishedBy: v.optional(v.string()), // userId or \"system:publication_rules\" for auto-publish\n\n // === TYPED METADATA FIELDS ===\n // --- Belief ---\n // Belief type — validated against schemaEnumConfig category \"belief_type\"\n // Platform core: hypothesis, belief, principle, invariant, assumption,\n // tenet, prior, preference, goal, forecast\n beliefType: v.optional(v.string()),\n beliefStatus: v.optional(beliefStatus),\n epistemicStatus: v.optional(epistemicStatus),\n reversibility: v.optional(reversibility),\n predictionMeta: v.optional(predictionMeta),\n // Consensus tracking (for non-consensus detection)\n consensusView: v.optional(consensusView),\n consensusConfidence: v.optional(v.number()), // 0-1: What we think consensus confidence is\n consensusSource: v.optional(v.string()), // Where we got the consensus view (twitter, reports, etc.)\n\n // --- Evidence ---\n methodology: v.optional(methodology),\n informationAsymmetry: v.optional(informationAsymmetry),\n temporalNature: v.optional(temporalNature),\n\n // --- Question ---\n questionType: v.optional(questionType),\n questionPriority: v.optional(questionPriority),\n answerQuality: v.optional(answerQuality),\n\n // --- Theme ---\n themeConviction: v.optional(themeConviction),\n // Market timing (for \"early on theme\" detection)\n marketAwarenessDate: v.optional(v.number()), // When this theme became broadly discussed\n marketAwarenessSource: v.optional(v.string()), // How we know (first major report, twitter volume spike, etc.)\n earlySignalIds: v.optional(v.array(v.string())), // globalIds of evidence we had before market awareness\n\n // --- Decision ---\n decisionType: v.optional(decisionType),\n decisionOutcome: v.optional(decisionOutcome),\n\n // === EXTERNAL IDS (for ontological entities) ===\n externalIds: v.optional(externalIds),\n\n // === PROVENANCE ===\n sourceType,\n aiProvider: v.optional(v.string()), // \"claude\", \"gemini\", \"gpt-4\", etc.\n extractedFromNodeId: v.optional(v.id(\"epistemicNodes\")), // Quick reference to source\n\n // === EXTRACTION CONTEXT ===\n extractionModel: v.optional(v.string()), // \"claude-sonnet-4-20250514\"\n extractionPromptName: v.optional(v.string()), // \"lucern/extract-evidence\"\n extractionPromptVersion: v.optional(v.number()),\n extractionTemperature: v.optional(v.number()),\n extractionLangfuseTraceId: v.optional(v.string()),\n\n // === GROUNDING VERIFICATION ===\n groundingVerified: v.optional(v.boolean()),\n groundingConfidence: v.optional(v.number()), // 0-1 match quality\n groundingMatchedText: v.optional(v.string()), // Actual text from source\n groundingStartOffset: v.optional(v.number()),\n groundingEndOffset: v.optional(v.number()),\n groundingRejectionReason: v.optional(v.string()),\n\n // === CONFIDENCE & VERIFICATION ===\n confidence: v.optional(v.number()), // 0-1 projected probability P(x) = b + a*u\n verificationStatus: v.optional(verificationStatus),\n\n // === SL OPINION (Subjective Logic — Kernel v2) ===\n // Replaces scalar confidence with rich epistemic state.\n // b + d + u = 1. P(x) = b + a*u is stored in `confidence` for backward compat.\n opinion_b: v.optional(v.number()), // Belief: evidence FOR (0-1)\n opinion_d: v.optional(v.number()), // Disbelief: evidence AGAINST (0-1)\n opinion_u: v.optional(v.number()), // Uncertainty: absence of evidence (0-1)\n opinion_a: v.optional(v.number()), // Base rate / prior probability (0-1)\n tupleContradicted: v.optional(v.boolean()), // Single-belief tuple-space contradiction flag\n\n // === LIFECYCLE ===\n status: nodeStatus,\n supersededBy: v.optional(v.id(\"epistemicNodes\")),\n\n // === OWNERSHIP ===\n topicId: v.optional(v.string()), // Canonical scope container (topic-first model)\n projectId: v.optional(v.string()), // DEPRECATED: Use belongs_to edges\n createdBy: v.string(), // Clerk user ID\n createdAt: v.number(),\n updatedAt: v.number(),\n\n // === NEO4J SYNC STATUS ===\n syncStatus: v.optional(syncStatus),\n syncError: v.optional(v.string()), // Error message if sync failed\n})\n .index(\"by_globalId\", [\"globalId\"])\n .index(\"by_contentHash\", [\"contentHash\"])\n .index(\"by_nodeType\", [\"nodeType\"])\n .index(\"by_subtype\", [\"nodeType\", \"subtype\"])\n .index(\"by_domain\", [\"domain\"])\n .index(\"by_project\", [\"projectId\"]) // DEPRECATED\n .index(\"by_project_type\", [\"projectId\", \"nodeType\"]) // DEPRECATED\n .index(\"by_topic\", [\"topicId\"])\n .index(\"by_topic_type\", [\"topicId\", \"nodeType\"])\n .index(\"by_tenantId\", [\"tenantId\"])\n .index(\"by_workspaceId\", [\"workspaceId\"])\n .index(\"by_tenant_workspace\", [\"tenantId\", \"workspaceId\"])\n .index(\"by_audienceLabel\", [\"audienceLabel\"])\n .index(\"by_sensitivityTier\", [\"sensitivityTier\"])\n .index(\"by_exportClass\", [\"exportClass\"])\n .index(\"by_status\", [\"status\"])\n .index(\"by_sourceType\", [\"sourceType\"])\n .index(\"by_verification\", [\"verificationStatus\"])\n .index(\"by_layer\", [\"epistemicLayer\"]) // For layer-constrained traversal\n .index(\"by_layer_type\", [\"epistemicLayer\", \"nodeType\"]) // For layer+type queries\n .index(\"by_syncStatus\", [\"syncStatus\"]) // For finding nodes needing edge retry\n // === PUBLICATION INDEXES ===\n .index(\"by_publicationStatus\", [\"publicationStatus\"])\n .index(\"by_tenant_publicationStatus\", [\"tenantId\", \"publicationStatus\"])\n // === CLASSIFICATION INDEXES (Phase 6) ===\n .index(\"by_belief_status\", [\"nodeType\", \"beliefStatus\"]) // Canonical belief lifecycle stage\n .index(\"by_epistemic_status\", [\"nodeType\", \"epistemicStatus\"]) // Belief lifecycle analysis\n .index(\"by_temporal_nature\", [\"nodeType\", \"temporalNature\"]) // Evidence factual vs forecast\n .index(\"by_methodology\", [\"nodeType\", \"methodology\"]) // Evidence research method analysis\n .index(\"by_reversibility\", [\"nodeType\", \"reversibility\"]) // Decision impact analysis\n .index(\"by_questionType\", [\"nodeType\", \"questionType\"]) // Question classification\n .index(\"by_questionPriority\", [\"nodeType\", \"questionPriority\"]) // Question urgency\n .searchIndex(\"search_canonicalText\", {\n searchField: \"canonicalText\",\n filterFields: [\"nodeType\", \"projectId\", \"topicId\", \"status\"],\n });\n\n// =============================================================================\n// TYPE EXPORTS\n// =============================================================================\n\nimport type { Infer } from \"convex/values\";\n\n// Types needed internally for helper functions\ntype NodeType = Infer<typeof nodeType>;\ntype EpistemicLayer = Infer<typeof epistemicLayer>;\n\n// Only export types that are unique to this file (not already in ./nodes/*.ts)\nexport type ExternalIds = Infer<typeof externalIds>;\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Get the epistemic layer for a node type.\n */\nexport function getLayerForNodeType(type: NodeType): EpistemicLayer {\n switch (type) {\n case \"decision\":\n return \"L4\";\n case \"belief\":\n case \"question\":\n case \"theme\":\n case \"deal\":\n return \"L3\";\n case \"claim\":\n case \"evidence\":\n case \"synthesis\":\n case \"answer\":\n return \"L2\";\n case \"atomic_fact\":\n case \"excerpt\":\n case \"source\":\n return \"L1\";\n case \"topic\":\n return \"organizational\";\n case \"company\":\n case \"person\":\n case \"investor\":\n case \"function\":\n case \"value_chain\":\n return \"ontological\";\n }\n}\n\n/**\n * Async layer resolver with schemaEnumConfig fallback for tenant-defined entity types.\n *\n * For hardcoded types (the switch above), returns immediately.\n * For unknown types, checks schemaEnumConfig for entity_type entries.\n * If found in the registry, returns \"ontological\". Otherwise returns undefined.\n *\n * Use this when you need to handle tenant-extensible entity types.\n * For known platform types, the synchronous `getLayerForNodeType` is sufficient.\n */\nexport async function resolveLayerForNodeType(\n ctx: { db: { query: (table: string) => any } },\n type: string\n): Promise<EpistemicLayer | undefined> {\n // First try the hardcoded switch for known types\n const knownLayer = getLayerForNodeType(type as NodeType);\n if (knownLayer !== undefined) {\n return knownLayer;\n }\n\n // Fallback: check schemaEnumConfig for tenant-registered entity types\n const registryEntry = await ctx.db\n .query(\"schemaEnumConfig\")\n .withIndex(\"by_category_value\", (q: any) =>\n q.eq(\"category\", \"entity_type\").eq(\"value\", type)\n )\n .first();\n\n if (registryEntry && registryEntry.status === \"active\") {\n return \"ontological\";\n }\n\n return;\n}\n\n/**\n * Check if a node type is epistemic (vs ontological).\n */\nexport function isEpistemicNodeType(type: NodeType): boolean {\n return getLayerForNodeType(type) !== \"ontological\";\n}\n","/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport { api as appApi } from \"./convex\";\nimport type { Id } from \"./convex\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectScope = {\n topicId: Id<\"topics\">;\n projectId?: string;\n tenantId?: string;\n workspaceId?: string;\n source: \"topic\" | \"project_mapped_topic\" | \"topic_inferred\";\n};\n\ntype MaterializedTopicNodeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n};\n\nfunction asMappedProjectId(\n topic: TopicDoc | null | undefined\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(topic[LEGACY_SCOPE_FIELD]);\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = (topic.metadata || {}) as Record<string, unknown>;\n const candidate =\n (metadata[LEGACY_SCOPE_FIELD] as string | undefined) ||\n (metadata.legacyProjectId as string | undefined) ||\n (metadata.projectId as string | undefined) ||\n (metadata.scopeProjectId as string | undefined);\n return candidate ? (candidate as string) : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(ctx: any, scopeId: string): Promise<TopicDoc[]> {\n try {\n return (await ctx.db\n .query(\"topics\")\n .withIndex(\"by_graph_scope_project\", (q: any) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId)\n )\n .collect()) as TopicDoc[];\n } catch {\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await ctx.db.query(\"topics\").collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: any,\n topicId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get as any, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch {\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: any,\n legacyScopeId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId as any, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch {\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: any,\n topic: TopicDoc\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) break;\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) break;\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: any,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string }\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n // Try direct lookup, fall back to the legacy mapped-project bridge\n let topic: TopicDoc | null = null;\n try {\n topic = (await ctx.db.get(args.topicId as Id<\"topics\">)) as TopicDoc | null;\n } catch {\n // Not a valid topics table ID\n }\n if (!topic) {\n topic = await tryResolveHostTopicById(ctx, String(args.topicId));\n }\n if (!topic) {\n // Try as legacy projectId / globalId via the mapped-project bridge.\n topic =\n pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, String(args.topicId))\n ) ?? null;\n }\n if (!topic) {\n throw new Error(`Topic not found: ${String(args.topicId)}`);\n }\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n if (mapped) {\n return {\n topicId: topic._id,\n projectId: mapped,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n return {\n topicId: topic._id,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n\n if (args.projectId) {\n let directTopic: TopicDoc | null = null;\n try {\n directTopic = (await ctx.db.get(\n args.projectId as Id<\"topics\">\n )) as TopicDoc | null;\n } catch {\n // Not a valid topics table ID, continue to legacy graph-scope lookup.\n }\n\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n directTopic = await tryResolveHostTopicByLegacyScope(ctx, args.projectId);\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n const topics = await findTopicsByScopeAlias(ctx, args.projectId);\n const primary = pickPrimaryTopic(topics);\n if (primary) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, primary);\n return {\n topicId: primary._id,\n projectId: args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"project_mapped_topic\",\n };\n }\n throw new Error(\n `Legacy project scope ${String(args.projectId)} has no mapped topic.`\n );\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\"\n );\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","import { getLayerForNodeType } from \"@lucern/schema-management/spine/tables/epistemicNodes\";\nimport {\n resolveTopicProjectScope,\n type TopicProjectScope,\n} from \"./topicScope\";\n\ntype StructuredInvariantError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype ScopeLike = {\n tenantId?: unknown;\n workspaceId?: unknown;\n epistemicLayer?: unknown;\n nodeType?: unknown;\n topicId?: unknown;\n projectId?: unknown;\n publicationStatus?: unknown;\n};\n\nexport type RuntimePackMutationContext = {\n toolName?: string;\n packKey?: string;\n packInstallScope?: \"tenant\" | \"workspace\";\n};\n\nexport function normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction throwWorkspaceIsolationError(args: {\n message: string;\n invariantCode: string;\n suggestion: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredInvariantError;\n error.status = 409;\n error.code = \"INVARIANT_VIOLATION\";\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nexport function assertWorkspaceScopedEpistemicNodeScope(args: {\n scope: TopicProjectScope;\n nodeType: string;\n mutationName: string;\n}): void {\n const layer = getLayerForNodeType(args.nodeType as any);\n if (layer === \"ontological\") {\n return;\n }\n\n const workspaceId = normalizeScopeValue(args.scope.workspaceId);\n if (workspaceId) {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n \"Workspace-scoped reasoning isolation requires workspaceId on non-ontological node creation.\",\n invariantCode: \"workspace.scope_required_for_epistemic_nodes\",\n suggestion:\n \"Resolve the topic/project scope through a workspace-bound topic before creating epistemic nodes.\",\n details: {\n mutationName: args.mutationName,\n nodeType: args.nodeType,\n topicId: args.scope.topicId,\n projectId: args.scope.projectId,\n },\n });\n}\n\nexport function nodeMatchesWorkspaceReasoningScope(\n node: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!node) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const nodeTenantId = normalizeScopeValue(node.tenantId);\n const nodeWorkspaceId = normalizeScopeValue(node.workspaceId);\n const epistemicLayer =\n typeof node.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n\n if (\n scopeTenantId &&\n nodeTenantId &&\n scopeTenantId !== nodeTenantId\n ) {\n return false;\n }\n\n // Ontological entities are tenant-global (no workspace required)\n if (epistemicLayer === \"ontological\" && nodeWorkspaceId === undefined) {\n return true;\n }\n\n // Published nodes are visible at tenant scope — the microservice API surface.\n // The node stays in its workspace, but tenant-scope queries can see it.\n if (!scopeWorkspaceId && node.publicationStatus === \"published\") {\n return true;\n }\n\n if (!scopeWorkspaceId) {\n return nodeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === nodeWorkspaceId;\n}\n\nexport function edgeMatchesWorkspaceReasoningScope(\n edge: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!edge) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const edgeTenantId = normalizeScopeValue(edge.tenantId);\n const edgeWorkspaceId = normalizeScopeValue(edge.workspaceId);\n\n if (\n scopeTenantId &&\n edgeTenantId &&\n scopeTenantId !== edgeTenantId\n ) {\n return false;\n }\n\n if (!scopeWorkspaceId) {\n return edgeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === edgeWorkspaceId;\n}\n\nexport async function resolveNodeScopeForWorkspaceIsolation(\n ctx: any,\n node: ScopeLike | null | undefined\n): Promise<{\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n nodeType?: string;\n}> {\n const epistemicLayer =\n typeof node?.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n const resolved = {\n tenantId: normalizeScopeValue(node?.tenantId),\n workspaceId: normalizeScopeValue(node?.workspaceId),\n epistemicLayer,\n nodeType: typeof node?.nodeType === \"string\" ? node.nodeType : undefined,\n };\n\n if (!node) {\n return resolved;\n }\n\n if (resolved.epistemicLayer === \"ontological\") {\n return resolved;\n }\n\n if (resolved.tenantId || resolved.workspaceId) {\n return resolved;\n }\n\n if (node.topicId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n topicId: node.topicId as any,\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n if (node.projectId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n projectId: String(node.projectId),\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n return resolved;\n}\n\nexport function resolveRuntimePackMutationContext(args: {\n runtimeToolName?: string;\n runtimePackKey?: string;\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n}): RuntimePackMutationContext | undefined {\n if (\n !args.runtimeToolName &&\n !args.runtimePackKey &&\n !args.runtimePackInstallScope\n ) {\n return;\n }\n\n return {\n toolName: args.runtimeToolName,\n packKey: args.runtimePackKey,\n packInstallScope: args.runtimePackInstallScope,\n };\n}\n\nexport function assertTenantPackWorkspaceMutationAllowed(args: {\n runtime?: RuntimePackMutationContext;\n target: ScopeLike;\n mutationName: string;\n}): void {\n if (\n !args.runtime?.packKey ||\n args.runtime.packInstallScope !== \"tenant\"\n ) {\n return;\n }\n\n const targetWorkspaceId = normalizeScopeValue(args.target.workspaceId);\n const targetLayer =\n typeof args.target.epistemicLayer === \"string\"\n ? args.target.epistemicLayer\n : undefined;\n\n if (!targetWorkspaceId || targetLayer === \"ontological\") {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n `Tenant-scoped pack \"${args.runtime.packKey}\" cannot mutate workspace-scoped reasoning state.`,\n invariantCode: \"workspace.tenant_pack_reasoning_write_forbidden\",\n suggestion:\n \"Use a workspace-scoped pack for workspace-local graph mutations, or route the change through tenant-global canonical entity flows.\",\n details: {\n mutationName: args.mutationName,\n toolName: args.runtime.toolName,\n packKey: args.runtime.packKey,\n targetWorkspaceId,\n targetNodeType: args.target.nodeType,\n targetLayer,\n },\n });\n}\n","import {\n hasProjectedOpinionChanged,\n readOpinionFromRecord,\n type Opinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport {\n canContinueTransitively,\n canTraverseHop,\n getEdgePropagationSpecs,\n getTraversalDirections,\n type EdgePropagationSpec,\n type PropagationEdgeRecord,\n type PropagationEdgeType,\n type PropagationTraversalDirection,\n} from \"./edges\";\nimport {\n edgeMatchesWorkspaceReasoningScope,\n nodeMatchesWorkspaceReasoningScope,\n} from \"./workspaceIsolation\";\n\nexport type PropagationDispatchScope = {\n tenantId?: string;\n workspaceId?: string;\n};\n\nexport type PropagationDispatchNode<TNodeId extends string = string> = {\n _id?: TNodeId;\n nodeType?: string;\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n publicationStatus?: string;\n metadata?: unknown;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n opinion_a?: number;\n};\n\nexport type PropagationDispatchEdge<TNodeId extends string = string> =\n PropagationEdgeRecord<TNodeId>;\n\nexport type ConfidencePropagationDispatch<TNodeId extends string = string> = {\n targetNodeId: TNodeId;\n edgeType: PropagationEdgeType;\n traversedDirection: PropagationTraversalDirection;\n weight: number;\n opinion: Opinion;\n operator: SLOperator;\n rationale: string;\n hop: number;\n};\n\nfunction resolveTraversalTargetNodeId<TNodeId extends string>(\n edge: PropagationDispatchEdge<TNodeId>,\n direction: PropagationTraversalDirection\n): TNodeId | undefined {\n const targetNodeId =\n direction === \"outgoing\" ? edge.toNodeId : edge.fromNodeId;\n return targetNodeId ?? undefined;\n}\n\nfunction readNodeOpinion<TNodeId extends string>(\n node: PropagationDispatchNode<TNodeId>\n): Opinion {\n const metadata = (node.metadata ?? {}) as Record<string, unknown>;\n\n return readOpinionFromRecord(\n {\n ...metadata,\n opinion_b: node.opinion_b,\n opinion_d: node.opinion_d,\n opinion_u: node.opinion_u,\n opinion_a: node.opinion_a,\n },\n { b: 0, d: 0, u: 1, a: 0.5 }\n );\n}\n\nexport async function collectConfidencePropagationDispatches<\n TNodeId extends string = string,\n>(args: {\n sourceNodeId: TNodeId;\n sourceOpinion: Opinion;\n sourceScope?: PropagationDispatchScope;\n traversalSpecs?: readonly EdgePropagationSpec<TNodeId>[];\n queryEdges: (args: {\n nodeId: TNodeId;\n spec: EdgePropagationSpec<TNodeId>;\n direction: PropagationTraversalDirection;\n hop: number;\n }) => Promise<ReadonlyArray<PropagationDispatchEdge<TNodeId>>>;\n getNode: (\n nodeId: TNodeId\n ) => Promise<PropagationDispatchNode<TNodeId> | null | undefined>;\n}): Promise<ConfidencePropagationDispatch<TNodeId>[]> {\n const dispatchesByTargetId = new Map<\n string,\n ConfidencePropagationDispatch<TNodeId>\n >();\n const opinionCache = new Map<string, Opinion>();\n const nodeCache = new Map<\n string,\n PropagationDispatchNode<TNodeId> | null | undefined\n >();\n const traversalSpecs = (args.traversalSpecs ??\n getEdgePropagationSpecs()) as readonly EdgePropagationSpec<TNodeId>[];\n const queue: Array<{\n nodeId: TNodeId;\n opinion: Opinion;\n hop: number;\n visitedNodeIds: Set<string>;\n }> = [\n {\n nodeId: args.sourceNodeId,\n opinion: args.sourceOpinion,\n hop: 0,\n visitedNodeIds: new Set([String(args.sourceNodeId)]),\n },\n ];\n\n const loadNode = async (nodeId: TNodeId) => {\n const cacheKey = String(nodeId);\n if (!nodeCache.has(cacheKey)) {\n nodeCache.set(cacheKey, await args.getNode(nodeId));\n }\n return nodeCache.get(cacheKey) ?? null;\n };\n\n while (queue.length > 0) {\n const state = queue.shift();\n if (!state) {\n continue;\n }\n\n for (const spec of traversalSpecs) {\n const nextHop = state.hop + 1;\n if (!canTraverseHop(spec, nextHop)) {\n continue;\n }\n\n for (const direction of getTraversalDirections(spec.direction)) {\n const edges = await args.queryEdges({\n nodeId: state.nodeId,\n spec,\n direction,\n hop: nextHop,\n });\n\n for (const edge of edges) {\n if (\n args.sourceScope &&\n !edgeMatchesWorkspaceReasoningScope(edge, args.sourceScope)\n ) {\n continue;\n }\n\n const targetNodeId = resolveTraversalTargetNodeId(edge, direction);\n if (!targetNodeId) {\n continue;\n }\n\n if (state.visitedNodeIds.has(String(targetNodeId))) {\n continue;\n }\n\n const targetNode = await loadNode(targetNodeId);\n if (!targetNode || targetNode.nodeType !== \"belief\") {\n continue;\n }\n\n if (\n args.sourceScope &&\n !nodeMatchesWorkspaceReasoningScope(targetNode, args.sourceScope)\n ) {\n continue;\n }\n\n const cacheKey = String(targetNodeId);\n const targetOpinion =\n opinionCache.get(cacheKey) ?? readNodeOpinion(targetNode);\n const result = spec.operator(state.opinion, targetOpinion, edge, {\n hop: nextHop,\n sourceNodeId: state.nodeId,\n targetNodeId,\n traversedDirection: direction,\n spec,\n });\n\n if (\n !result ||\n !hasProjectedOpinionChanged(targetOpinion, result.opinion)\n ) {\n continue;\n }\n\n opinionCache.set(cacheKey, result.opinion);\n\n const existingDispatch = dispatchesByTargetId.get(cacheKey);\n dispatchesByTargetId.set(cacheKey, {\n targetNodeId,\n edgeType: spec.edgeType,\n traversedDirection: direction,\n weight: edge.weight ?? 1,\n opinion: result.opinion,\n operator: result.operator,\n rationale: existingDispatch\n ? `${existingDispatch.rationale}; ${result.rationale}`\n : result.rationale,\n hop: nextHop,\n });\n\n if (canContinueTransitively(spec, nextHop)) {\n queue.push({\n nodeId: targetNodeId,\n opinion: result.opinion,\n hop: nextHop,\n visitedNodeIds: new Set([\n ...state.visitedNodeIds,\n String(targetNodeId),\n ]),\n });\n }\n }\n }\n }\n }\n\n return Array.from(dispatchesByTargetId.values()).sort((left, right) => {\n if (left.hop !== right.hop) {\n return left.hop - right.hop;\n }\n return String(left.targetNodeId).localeCompare(String(right.targetNodeId));\n });\n}\n","/**\n * Shared helper to schedule embedding generation after epistemic node creation.\n *\n * Best-effort — failures are silently caught. The embedding generation action\n * is a public action in convex/embeddingActions.ts that calls Pinecone.\n */\n\nimport type { Id } from \"./convex\";\n\ninterface EmbeddingTriggerArgs {\n ctx: any;\n nodeId: Id<\"epistemicNodes\">;\n projectId?: string | null;\n topicId?: string | null;\n createdBy: string;\n nodeType:\n | \"belief\"\n | \"question\"\n | \"evidence\"\n | \"answer\"\n | \"synthesis\"\n | \"theme\"\n | \"source\";\n text: string;\n hasAnswer?: boolean;\n confidence?: number;\n}\n\nexport async function scheduleEmbeddingGeneration(args: EmbeddingTriggerArgs): Promise<void> {\n try {\n await args.ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId: args.nodeId,\n projectId: args.projectId ? String(args.projectId) : undefined,\n topicId: args.topicId ? String(args.topicId) : undefined,\n createdBy: args.createdBy,\n nodeType: args.nodeType,\n text: args.text.slice(0, 20_000),\n hasAnswer: args.hasAnswer,\n confidence: args.confidence,\n }\n );\n } catch {\n // Embedding generation is best-effort — never block node creation\n }\n}\n","/**\n * Shared UUID v4 generator for global IDs.\n *\n * Uses crypto.getRandomValues() for collision-safe generation.\n * Replaces the Math.random()-based UUID pattern that was duplicated\n * across 7+ files.\n *\n * @module convex/lib/globalId\n */\n\n/**\n * Generate a UUID v4 global ID using crypto-safe random bytes.\n */\nexport function generateGlobalId(): string {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n // Set version (4) and variant (RFC 4122)\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, \"0\")).join(\n \"\"\n );\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n","/**\n * logicalRoleInference module implementation.\n */\n\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\n\ntype LogicalRole =\n | \"necessary\"\n | \"sufficient\"\n | \"necessary_sufficient\"\n | \"contributory\"\n | \"corroborative\";\n\nconst PILLAR_IMPORTANCE: Record<string, number> = {\n market: 1,\n competition: 2,\n product: 3,\n team: 4,\n financials: 5,\n timing: 6,\n other: 10,\n};\n\ntype GraphCtx = QueryCtx | MutationCtx;\n\nexport async function computeLogicalRole(\n ctx: GraphCtx,\n evidenceId: Id<\"epistemicNodes\">,\n beliefId: Id<\"epistemicNodes\">\n): Promise<LogicalRole> {\n const belief = await ctx.db.get(beliefId);\n if (!belief || belief.nodeType !== \"belief\") {\n return \"contributory\";\n }\n\n const beliefMetadata = belief.metadata as Record<string, unknown> | undefined;\n const pillar = (beliefMetadata?.pillar as string) || \"other\";\n const pillarRank = PILLAR_IMPORTANCE[pillar] ?? 10;\n\n const isSynthesized = await checkIfSynthesizedHypothesis(ctx, beliefId);\n const testingQuestions = await getTestingQuestionsForBelief(ctx, beliefId);\n const answeredQuestions = await getQuestionsAnsweredByEvidence(\n ctx,\n evidenceId\n );\n const directlyTests = testingQuestions.filter((questionId) =>\n answeredQuestions.includes(questionId)\n );\n\n if (directlyTests.length === 0) {\n return \"contributory\";\n }\n\n if (isSynthesized && pillarRank <= 2) {\n return directlyTests.length > 1 ? \"necessary_sufficient\" : \"necessary\";\n }\n\n if (isSynthesized) {\n return \"necessary\";\n }\n\n return directlyTests.length > 1 ? \"necessary\" : \"contributory\";\n}\n\nasync function checkIfSynthesizedHypothesis(\n ctx: GraphCtx,\n beliefId: Id<\"epistemicNodes\">\n): Promise<boolean> {\n const belief = await ctx.db.get(beliefId);\n if (!belief) {\n return false;\n }\n\n const metadata = belief.metadata as Record<string, unknown> | undefined;\n return (\n metadata?.isSynthesized === true ||\n metadata?.beliefStatus === \"hypothesis\"\n );\n}\n\nasync function getTestingQuestionsForBelief(\n ctx: GraphCtx,\n beliefId: Id<\"epistemicNodes\">\n): Promise<string[]> {\n const testEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", beliefId).eq(\"edgeType\", \"tests\")\n )\n .collect();\n\n return testEdges\n .map((edge) => edge.fromNodeId as string)\n .filter((id): id is string => id !== undefined);\n}\n\nasync function getQuestionsAnsweredByEvidence(\n ctx: GraphCtx,\n evidenceId: Id<\"epistemicNodes\">\n): Promise<string[]> {\n const answerEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_type\", (q) =>\n q.eq(\"fromNodeId\", evidenceId).eq(\"edgeType\", \"derived_from\")\n )\n .collect();\n\n return answerEdges\n .map((edge) => edge.toNodeId as string)\n .filter((id): id is string => id !== undefined);\n}\n","import { api } from \"./convex\";\n\ntype OverlayIdMode = \"legacy\" | \"topic\";\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype LegacyProjectThesis = {\n statement: string;\n confidence: number;\n lastUpdated: number;\n};\n\ntype LegacyPillarImportance =\n | \"critical\"\n | \"major\"\n | \"minor\"\n | \"not_applicable\";\n\ntype LegacyThesisPillarConfig = {\n pillarImportance?: Record<string, LegacyPillarImportance | undefined>;\n configuredAt?: number;\n configuredBy?: string;\n aiSuggestion?: {\n suggestedAt: number;\n reasoning: string;\n };\n};\n\ntype LegacyBeliefArchitecture = {\n overallMaturity: number;\n pillarScores: Array<Record<string, unknown>>;\n lastCalculated: number;\n};\n\ntype LegacyOntologyClassification = {\n valueChains: Array<Record<string, unknown>>;\n functions: Array<Record<string, unknown>>;\n overallConfidence: number;\n classifiedAt: number;\n};\n\ntype TopicDocLike = Record<string, unknown> & {\n _id: string;\n _creationTime?: number;\n globalId?: string;\n name?: string;\n description?: string;\n type?: string;\n tenantId?: string;\n workspaceId?: string;\n status?: string;\n visibility?: string;\n createdBy?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectOverlay = Record<string, unknown> & {\n _id: string;\n projectId: string;\n topicId: string;\n storageProjectId: string;\n legacyProjectId?: string;\n name: string;\n type: string;\n description?: string;\n ownerId: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n tags: string[];\n chatCount: number;\n artifactCount: number;\n lastActivityAt: number;\n thesis?: LegacyProjectThesis;\n wedgeHypothesis?: string;\n founderArchetype?: string;\n investmentCriteria?: string[];\n sprintPhase?:\n | \"pre_sprint\"\n | \"readiness_check\"\n | \"thesis_crystallization\"\n | \"sprint_planning\"\n | \"active_sprint\"\n | \"theme_assembly\"\n | \"evolution\";\n currentSprintIndex?: number;\n thesisPillarConfig?: LegacyThesisPillarConfig;\n beliefArchitecture?: LegacyBeliefArchitecture;\n ontologyClassification?: LegacyOntologyClassification;\n _creationTime: number;\n createdAt: number;\n updatedAt: number;\n};\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readNonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction readMetadata(topic: TopicDocLike): Record<string, unknown> {\n return topic.metadata && typeof topic.metadata === \"object\"\n ? topic.metadata\n : {};\n}\n\nfunction readLegacyProjectId(\n value: Record<string, unknown> | null | undefined\n): string | undefined {\n if (!value) {\n return;\n }\n return readNonEmptyString(value[LEGACY_SCOPE_FIELD]);\n}\n\nfunction coerceVisibility(\n value: unknown\n): TopicProjectOverlay[\"visibility\"] | undefined {\n return value === \"private\" ||\n value === \"team\" ||\n value === \"firm\" ||\n value === \"external\" ||\n value === \"public\"\n ? value\n : undefined;\n}\n\nfunction coerceStatus(\n value: unknown\n): TopicProjectOverlay[\"status\"] | undefined {\n return value === \"active\" || value === \"archived\" || value === \"watching\"\n ? value\n : undefined;\n}\n\nfunction mapProjectType(\n topic: TopicDocLike,\n metadata: Record<string, unknown>\n): string {\n const explicit = readNonEmptyString(metadata.projectType);\n if (explicit) {\n return explicit;\n }\n if (topic.type === \"theme\") {\n return \"thematic\";\n }\n return readNonEmptyString(topic.type) || \"general\";\n}\n\nfunction isProjectLikeTopic(topic: TopicDocLike): boolean {\n const metadata = readMetadata(topic);\n return (\n topic.type === \"theme\" ||\n topic.type === \"thematic\" ||\n topic.type === \"deal\" ||\n topic.type === \"monitoring\" ||\n readLegacyProjectId(topic) !== undefined ||\n readNonEmptyString(metadata.projectType) !== undefined\n );\n}\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found'\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nasync function resolveTopicDoc(\n ctx: any,\n scopeId: string\n): Promise<TopicDocLike | null> {\n if (ctx?.db && typeof ctx.db.get === \"function\") {\n try {\n const directTopic = (await ctx.db.get(scopeId as any)) as TopicDocLike | null;\n if (directTopic) {\n return directTopic;\n }\n } catch {\n // Not a direct topics-table id.\n }\n }\n\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.get as any, {\n id: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch {\n // Fall through to legacy-scope lookup.\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.getByLegacyScopeId as any, {\n projectId: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch {\n // Best-effort compat lookup only.\n }\n\n return null;\n}\n\nexport function materializeTopicProjectOverlay(\n topic: TopicDocLike,\n idMode: OverlayIdMode = \"legacy\"\n): TopicProjectOverlay {\n const metadata = readMetadata(topic);\n const topicId = String(topic._id);\n const legacyProjectId =\n readLegacyProjectId(topic) ||\n readLegacyProjectId(metadata) ||\n readNonEmptyString(metadata.legacyProjectId);\n const storageProjectId = legacyProjectId || topicId;\n const outwardId = idMode === \"topic\" ? topicId : storageProjectId;\n const visibility =\n coerceVisibility(topic.visibility) ||\n coerceVisibility(metadata.visibility) ||\n \"private\";\n const status =\n coerceStatus(topic.status) || coerceStatus(metadata.status) || \"active\";\n const createdAt =\n typeof topic.createdAt === \"number\"\n ? topic.createdAt\n : typeof topic._creationTime === \"number\"\n ? topic._creationTime\n : 0;\n const updatedAt =\n typeof topic.updatedAt === \"number\"\n ? topic.updatedAt\n : typeof metadata.updatedAt === \"number\"\n ? (metadata.updatedAt as number)\n : createdAt;\n\n return {\n ...metadata,\n _id: outwardId,\n projectId: outwardId,\n topicId,\n storageProjectId,\n legacyProjectId,\n name: readNonEmptyString(topic.name) || \"Untitled Theme\",\n type: mapProjectType(topic, metadata),\n description: readNonEmptyString(topic.description),\n ownerId:\n readNonEmptyString(metadata.ownerId) ||\n readNonEmptyString(topic.createdBy) ||\n \"system\",\n sharedWith: readStringArray(metadata.sharedWith),\n visibility,\n tenantId:\n readNonEmptyString(topic.tenantId) ||\n readNonEmptyString(metadata.tenantId),\n workspaceId:\n readNonEmptyString(topic.workspaceId) ||\n readNonEmptyString(metadata.workspaceId),\n status,\n tags: readStringArray(metadata.tags),\n chatCount:\n typeof metadata.chatCount === \"number\" ? (metadata.chatCount as number) : 0,\n artifactCount:\n typeof metadata.artifactCount === \"number\"\n ? (metadata.artifactCount as number)\n : 0,\n lastActivityAt:\n typeof metadata.lastActivityAt === \"number\"\n ? (metadata.lastActivityAt as number)\n : updatedAt,\n _creationTime:\n typeof topic._creationTime === \"number\" ? topic._creationTime : createdAt,\n createdAt,\n updatedAt,\n };\n}\n\nexport async function resolveTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n if (options.projectLikeOnly !== false && !isProjectLikeTopic(topic)) {\n return null;\n }\n return materializeTopicProjectOverlay(topic, options.idMode);\n}\n\nexport async function listTopicProjectOverlays(\n ctx: any,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay[]> {\n let allTopics: TopicDocLike[] = [];\n\n if (ctx?.db?.query && typeof ctx.db.query === \"function\") {\n try {\n allTopics = (await ctx.db.query(\"topics\").collect()) as TopicDocLike[];\n } catch {\n allTopics = [];\n }\n }\n\n if (allTopics.length === 0 && typeof ctx.runQuery === \"function\") {\n allTopics =\n (((await ctx.runQuery(api.topics.list as any, {})) ?? []) as TopicDocLike[]) ||\n [];\n }\n\n return allTopics\n .filter(\n (topic) => options.projectLikeOnly === false || isProjectLikeTopic(topic)\n )\n .map((topic) => materializeTopicProjectOverlay(topic, options.idMode));\n}\n\nexport async function patchTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n value: Record<string, unknown>\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n\n const nextMetadata = { ...readMetadata(topic) };\n const patch: Record<string, unknown> = {};\n const topicUpdateArgs: Record<string, unknown> = {\n id: String(topic._id),\n };\n\n for (const [key, rawValue] of Object.entries(value)) {\n switch (key) {\n case \"_id\":\n case \"projectId\":\n case \"topicId\":\n case \"legacyProjectId\":\n case \"storageProjectId\":\n break;\n case \"name\":\n case \"description\":\n patch[key] = rawValue;\n topicUpdateArgs[key] = rawValue;\n break;\n case \"tenantId\":\n case \"workspaceId\":\n case \"ownerId\":\n throw new Error(\n `patchTopicProjectOverlay cannot mutate ${key} via component-owned topics`\n );\n case \"status\": {\n const status = coerceStatus(rawValue);\n if (status) {\n patch.status = status;\n topicUpdateArgs.status = status;\n }\n break;\n }\n case \"visibility\": {\n const visibility = coerceVisibility(rawValue);\n if (visibility) {\n patch.visibility = visibility;\n topicUpdateArgs.visibility = visibility;\n }\n break;\n }\n case \"type\": {\n const projectType = readNonEmptyString(rawValue);\n if (projectType) {\n nextMetadata.projectType = projectType;\n } else {\n delete nextMetadata.projectType;\n }\n break;\n }\n case \"updatedAt\":\n case \"createdAt\":\n break;\n default:\n if (rawValue === undefined) {\n delete nextMetadata[key];\n } else {\n nextMetadata[key] = rawValue;\n }\n }\n }\n\n patch.updatedAt = Date.now();\n patch.metadata = nextMetadata;\n topicUpdateArgs.metadata = nextMetadata;\n\n if (typeof ctx.runMutation === \"function\") {\n try {\n await ctx.runMutation(api.topics.update as any, topicUpdateArgs);\n } catch (error) {\n if (\n !isMissingLucernChildComponentError(error) ||\n !ctx?.db ||\n typeof ctx.db.patch !== \"function\"\n ) {\n throw error;\n }\n await ctx.db.patch(String(topic._id) as any, patch);\n }\n } else if (ctx?.db && typeof ctx.db.patch === \"function\") {\n await ctx.db.patch(String(topic._id) as any, patch);\n } else {\n throw new Error(\n \"Cannot patch topic without component adapter (ctx.runMutation unavailable)\"\n );\n }\n\n return materializeTopicProjectOverlay(\n {\n ...topic,\n ...patch,\n metadata: nextMetadata,\n } as TopicDocLike\n );\n}\n\nexport function matchesTopicProjectOverlayAccess(\n accessibleProjectIds: Set<string>,\n project: { topicId: string; legacyProjectId?: string; storageProjectId?: string }\n): boolean {\n return (\n accessibleProjectIds.has(project.storageProjectId || project.topicId) ||\n accessibleProjectIds.has(project.topicId) ||\n (typeof project.legacyProjectId === \"string\" &&\n accessibleProjectIds.has(project.legacyProjectId))\n );\n}\n","/** Data-source resolver wiring for the graph-primitives module. */\nimport {\n listTopicProjectOverlays,\n patchTopicProjectOverlay,\n resolveTopicProjectOverlay,\n} from \"./topicProjectOverlay\";\nimport type {\n GraphPrimitivesAppResolverContext,\n GraphPrimitivesAppResolvers,\n} from \"./resolverTypes\";\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n return (\n message.includes('Child component ComponentName(Identifier(\"lucern\")) not found') ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction isAdvisoryTopicPatch(value: Record<string, unknown>): boolean {\n const advisoryKeys = new Set([\"lastActivityAt\", \"updatedAt\"]);\n const keys = Object.keys(value);\n return keys.length > 0 && keys.every((key) => advisoryKeys.has(key));\n}\n\nasync function patchProjectWithTolerance(\n ctx: GraphPrimitivesAppResolverContext,\n projectId: string,\n value: Record<string, unknown>\n): Promise<void> {\n try {\n await patchTopicProjectOverlay(ctx, projectId, value);\n } catch (error) {\n if (\n !isAdvisoryTopicPatch(value) ||\n !isMissingLucernChildComponentError(error)\n ) {\n throw error;\n }\n\n console.warn(\"[lucern graph-primitives] Non-fatal advisory topic patch failure\", {\n projectId,\n keys: Object.keys(value),\n error: error instanceof Error ? error.message : error,\n });\n }\n}\n\nfunction defaultResolvers(): GraphPrimitivesAppResolvers {\n return {\n async getProject(ctx, projectId) {\n return await resolveTopicProjectOverlay(ctx, projectId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n });\n },\n async patchProject(ctx, projectId, value) {\n await patchProjectWithTolerance(ctx, projectId, value);\n },\n async listTopics(ctx) {\n return await listTopicProjectOverlays(ctx, {\n idMode: \"legacy\",\n });\n },\n async getFinalArtifact(ctx, artifactId) {\n return await ctx.db.get(artifactId);\n },\n };\n}\n\nlet resolverOverrides: Partial<GraphPrimitivesAppResolvers> = {};\n\nexport function configureGraphPrimitivesAppResolvers(\n overrides: Partial<GraphPrimitivesAppResolvers>\n): void {\n resolverOverrides = {\n ...resolverOverrides,\n ...overrides,\n };\n}\n\nexport function resetGraphPrimitivesAppResolvers(): void {\n resolverOverrides = {};\n}\n\nexport function resolveGraphPrimitivesAppResolvers(\n _ctx: GraphPrimitivesAppResolverContext\n): GraphPrimitivesAppResolvers {\n return {\n ...defaultResolvers(),\n ...resolverOverrides,\n };\n}\n","/**\n * Epistemic Beliefs API\n *\n * Clean API for managing beliefs in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces beliefs.ts.\n *\n * Key differences from beliefs.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no runtime ID translation fallback)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { v } from \"convex/values\";\nimport {\n detectTupleContradiction,\n evaluateTupleContradictionTransition,\n confidenceFromSL,\n normalizeTupleContradictionPolicy,\n readOpinionFromRecord,\n type ConfidencePolicyConfig,\n type Opinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport {\n checkProjectAccess,\n checkScopeAccess,\n} from \"@lucern/access-control/access\";\nimport {\n canAudienceClassAccess,\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { listAudienceRegistryRows } from \"@lucern/access-control/audienceRegistry\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { assertSchemaEnumValue } from \"@lucern/schema-management/enumValidation\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\nimport {\n type BeliefLifecycleStatus,\n isPreValidationBeliefStatus,\n promoteBeliefStatusAfterScoring,\n resolveBeliefLifecycleStatus,\n} from \"./beliefLifecycle\";\nimport type { Doc, Id, MutationCtx } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport { collectConfidencePropagationDispatches } from \"./confidencePropagationDispatch\";\nimport {\n createInheritedContractRecord,\n type VerificationConfidenceTrigger,\n} from \"./epistemicContractHelpers\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { generateGlobalId } from \"./globalId\";\nimport { computeLogicalRole } from \"./logicalRoleInference\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n nodeMatchesWorkspaceReasoningScope,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\n// All IDs now use epistemicNodes exclusively\nconst insightIdUnion = v.id(\"epistemicNodes\");\nconst DEFAULT_PROJECT_BELIEF_LIMIT = 250;\nconst MAX_PROJECT_BELIEF_LIMIT = 1000;\nconst optionalBeliefScopeArgs = optionalScopeArgs;\n\ntype StructuredMutationError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype BeliefScopeArgs = {\n projectId?: string | null;\n topicId?: string | null;\n};\n\ntype AudienceClass = \"internal\" | \"restricted_external\" | \"public\";\n\nconst DEFAULT_CONFIDENCE_POLICY: ConfidencePolicyConfig = {\n scoringMode: \"after_worktree\",\n tupleContradiction: normalizeTupleContradictionPolicy(),\n};\n\nexport type BeliefConfidenceTrigger =\n | \"initial\"\n | \"evidence_added\"\n | \"evidence_removed\"\n | \"contradiction_detected\"\n | \"contradiction_resolved\"\n | \"manual\"\n | \"decay\"\n | \"agent_assessment\"\n | \"worktree_outcome\"\n | \"worktree_completed\"\n // SL-specific triggers\n | \"fusion\"\n | \"discount\"\n | \"deduction\"\n | \"backfill_synthetic\"\n | VerificationConfidenceTrigger;\n\nfunction throwStructuredMutationError(args: {\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredMutationError;\n error.status = args.status;\n error.code = args.code;\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nfunction readFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nfunction assertBaseRateInRange(baseRate: number, field = \"baseRate\"): number {\n if (baseRate < 0 || baseRate > 1) {\n throwStructuredMutationError({\n message: `${field} must be within [0, 1].`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Clamp ${field} into the inclusive [0, 1] interval.`,\n details: { field, baseRate },\n });\n }\n return baseRate;\n}\n\nfunction buildBeliefConfidenceRow(args: {\n beliefId: Id<\"epistemicNodes\">;\n belief: number;\n disbelief: number;\n uncertainty: number;\n baseRate: number;\n trigger: BeliefConfidenceTrigger;\n rationale?: string;\n assessedBy: string;\n assessedAt: number;\n slOperator?: SLOperator;\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringContradictionId?: Id<\"contradictions\">;\n triggeringWorktreeId?: string;\n}) {\n return {\n beliefId: args.beliefId,\n confidence: confidenceFromSL(\n args.belief,\n args.disbelief,\n args.uncertainty,\n args.baseRate\n ),\n belief: args.belief,\n disbelief: args.disbelief,\n uncertainty: args.uncertainty,\n baseRate: args.baseRate,\n slOperator: args.slOperator ?? (\"manual_assessment\" as const),\n trigger: args.trigger,\n ...(args.rationale ? { rationale: args.rationale } : {}),\n assessedBy: args.assessedBy,\n assessedAt: args.assessedAt,\n ...(args.triggeringEvidenceId\n ? {\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringEvidenceIds: [String(args.triggeringEvidenceId)],\n }\n : {}),\n ...(args.triggeringContradictionId\n ? {\n triggeringContradictionId: args.triggeringContradictionId,\n }\n : {}),\n ...(args.triggeringWorktreeId\n ? { triggeringWorktreeId: args.triggeringWorktreeId }\n : {}),\n };\n}\n\nfunction deriveSyntheticBackfillOpinion(\n source: Record<string, unknown>\n): { b: number; d: number; u: number; a: number } {\n const belief = readFiniteNumber(source.opinion_b) ?? readFiniteNumber(source.belief);\n const disbelief =\n readFiniteNumber(source.opinion_d) ?? readFiniteNumber(source.disbelief);\n const uncertainty =\n readFiniteNumber(source.opinion_u) ?? readFiniteNumber(source.uncertainty);\n const baseRate =\n readFiniteNumber(source.opinion_a) ?? readFiniteNumber(source.baseRate);\n\n if (\n belief !== undefined ||\n disbelief !== undefined ||\n uncertainty !== undefined ||\n baseRate !== undefined\n ) {\n return readOpinionFromRecord(source, {\n b: 0,\n d: 0,\n u: 1,\n a: 0.5,\n });\n }\n\n const confidence = clamp01(readFiniteNumber(source.confidence) ?? 0);\n return {\n b: confidence,\n d: 1 - confidence,\n u: 0,\n a: 0.5,\n };\n}\n\nfunction clampBeliefLimit(\n limit: number | undefined,\n fallback = DEFAULT_PROJECT_BELIEF_LIMIT\n): number {\n if (!Number.isFinite(limit)) {\n return fallback;\n }\n return Math.max(\n 1,\n Math.min(Math.floor(limit as number), MAX_PROJECT_BELIEF_LIMIT)\n );\n}\n\nfunction readTupleContradictedFlag(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction readBeliefOpinionSnapshot(\n node: Doc<\"epistemicNodes\">,\n metadata: Record<string, unknown>\n): Opinion {\n return readOpinionFromRecord(\n {\n ...metadata,\n opinion_b: (node as any).opinion_b,\n opinion_d: (node as any).opinion_d,\n opinion_u: (node as any).opinion_u,\n opinion_a: (node as any).opinion_a,\n },\n { b: 0, d: 0, u: 1, a: 0.5 }\n );\n}\n\nfunction deriveTupleContradictionSeverity(\n node: Doc<\"epistemicNodes\">\n): \"critical\" | \"significant\" | \"minor\" {\n const metadata = (node.metadata || {}) as Record<string, unknown>;\n const criticality = typeof metadata.criticality === \"string\"\n ? metadata.criticality\n : undefined;\n\n if (criticality === \"blocking\") {\n return \"critical\";\n }\n if (criticality === \"supporting\") {\n return \"minor\";\n }\n return \"significant\";\n}\n\nfunction formatTupleContradictionDescription(args: {\n opinion: Opinion;\n policy: ConfidencePolicyConfig[\"tupleContradiction\"];\n}): string {\n return `Tuple-space contradiction detected: b=${args.opinion.b.toFixed(2)} > ${args.policy.beliefThreshold.toFixed(2)} and d=${args.opinion.d.toFixed(2)} > ${args.policy.disbeliefThreshold.toFixed(2)}.`;\n}\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction generateContentHash(text: string): string {\n const content = `belief:${text.trim().toLowerCase().replace(/\\s+/g, \" \")}`;\n let hash = 5381;\n for (let i = 0; i < content.length; i++) {\n hash = (hash << 5) + hash + content.charCodeAt(i);\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\nexport function resolveBeliefWorktreeId(\n metadata: Record<string, unknown> | undefined\n): string | undefined {\n const worktreeId = metadata?.worktreeId;\n if (typeof worktreeId === \"string\" && worktreeId.trim().length > 0) {\n return worktreeId;\n }\n\n const sprintId = metadata?.sprintId;\n return typeof sprintId === \"string\" && sprintId.trim().length > 0\n ? sprintId\n : undefined;\n}\n\n// Map pillar names to valid pillar literals\ntype ValidPillar =\n | \"market\"\n | \"competition\"\n | \"product\"\n | \"team\"\n | \"financials\"\n | \"regulatory\"\n | \"timing\"\n | \"customer\"\n | \"technology\"\n | \"distribution\"\n | \"deal\"\n | \"risks\"\n | \"other\";\n\nfunction normalizePillar(pillar?: string): ValidPillar {\n if (!pillar) {\n return \"other\";\n }\n const lower = pillar.toLowerCase();\n const validPillars: ValidPillar[] = [\n \"market\",\n \"competition\",\n \"product\",\n \"team\",\n \"financials\",\n \"regulatory\",\n \"timing\",\n \"customer\",\n \"technology\",\n \"distribution\",\n \"deal\",\n \"risks\",\n ];\n return (validPillars.find((p) => lower.includes(p)) ||\n \"other\") as ValidPillar;\n}\n\nasync function markBeliefGraphDirty(\n ctx: any,\n scope: { projectId?: string | null; topicId?: string | null }\n): Promise<void> {\n const projectId =\n typeof scope.projectId === \"string\" && scope.projectId.trim().length > 0\n ? scope.projectId\n : undefined;\n const topicId =\n typeof scope.topicId === \"string\" && scope.topicId.trim().length > 0\n ? scope.topicId\n : undefined;\n\n if (!projectId && !topicId) {\n return;\n }\n\n if (projectId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n { projectId }\n );\n }\n if (topicId) {\n await ctx.scheduler.runAfter(\n 0,\n (internal.graphAnalysisCache as any).markCacheStaleByTopic,\n { topicId }\n );\n }\n\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n topicId ?? projectId!,\n {\n lastActivityAt: Date.now(),\n }\n );\n}\n\nasync function resolveBeliefScopeOrNull(\n ctx: any,\n args: BeliefScopeArgs\n) {\n if (!args.projectId && !args.topicId) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n projectId: args.projectId ?? undefined,\n topicId: args.topicId ?? undefined,\n });\n } catch {\n return null;\n }\n}\n\nasync function getBeliefNodesForScope(\n ctx: {\n db: {\n query: (...args: any[]) => {\n withIndex: (...args: any[]) => any;\n };\n };\n },\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n args?: { scanLimit?: number; status?: string }\n) {\n const baseQuery = ctx.db.query(\"epistemicNodes\").withIndex(\n scope.topicId ? \"by_topic_type\" : \"by_project_type\",\n (q: any) =>\n scope.topicId\n ? q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n : q.eq(\"projectId\", scope.projectId).eq(\"nodeType\", \"belief\")\n );\n const nodes =\n typeof args?.scanLimit === \"number\"\n ? await baseQuery.order(\"desc\").take(args.scanLimit)\n : await baseQuery.collect();\n const scopedNodes = nodes.filter((node: Doc<\"epistemicNodes\">) =>\n nodeMatchesWorkspaceReasoningScope(node, scope)\n );\n\n if (!args?.status) {\n return scopedNodes;\n }\n\n return scopedNodes.filter((node) => node.status === args.status);\n}\n\nfunction createBeliefAudienceResolver(\n registryRows: Array<{\n audienceKey?: string | null;\n audienceClass: AudienceClass;\n }>\n) {\n const audienceClassByKey = new Map<string, AudienceClass>(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ])\n );\n\n return (\n audienceKey: string | undefined | null,\n fallback: AudienceClass\n ): AudienceClass => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return (\n audienceClassByKey.get(key) ??\n (classFromAudienceKey(key, fallback) as AudienceClass)\n );\n };\n}\n\nexport function flattenBeliefNode(node: Doc<\"epistemicNodes\">) {\n const meta = (node.metadata || {}) as Record<string, unknown>;\n const worktreeId = resolveBeliefWorktreeId(meta);\n const tupleContradicted =\n readTupleContradictedFlag((node as any).tupleContradicted) ??\n readTupleContradictedFlag(meta.tupleContradicted) ??\n false;\n\n return {\n _id: node._id,\n _epistemicNodeId: node._id,\n _creationTime: node._creationTime,\n belief: node.canonicalText,\n formulation: node.canonicalText,\n projectId: node.projectId,\n topicId: node.topicId,\n userId: (node as any).userId || node.createdBy || \"\",\n confidence: (meta.confidence as \"high\" | \"medium\" | \"low\") || \"untested\",\n status: node.status,\n beliefStatus: resolveBeliefStatus(node, meta),\n topic: (meta.topic as string) || (meta.pillar as string) || \"other\",\n pillar: (meta.pillar as string) || (meta.topic as string) || \"\",\n category: (meta.category as string) || \"\",\n subcategory: (meta.subcategory as string) || \"\",\n categoryIcon: (meta.categoryIcon as string) || \"\",\n supportingEvidence: (meta.supportingEvidenceIds as string[]) || [],\n contradictingEvidence: (meta.contradictingEvidenceIds as string[]) || [],\n testingQuestions: (meta.testingQuestionIds as string[]) || [],\n linkedInsights: (meta.linkedInsightIds as string[]) || [],\n createdAt: node.createdAt,\n updatedAt: node.updatedAt || node.createdAt,\n tupleContradicted,\n sprintId: (meta.sprintId as string) || undefined,\n worktreeId,\n sourceBeliefIds: (meta.sourceBeliefIds as string[]) || undefined,\n criticality:\n (meta.criticality as\n | \"critical\"\n | \"supporting\"\n | \"nice_to_have\"\n | \"unanalyzed\"\n | \"blocking\"\n | \"important\") || \"unanalyzed\",\n rationale: (meta.rationale as string) || \"\",\n audienceLabel: node.audienceLabel,\n policyTags: node.policyTags,\n sensitivityTier: node.sensitivityTier,\n exportClass: node.exportClass,\n anonymizationClass: node.anonymizationClass,\n };\n}\n\nfunction resolveBeliefStatus(\n node: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n },\n metadata: Record<string, unknown>\n): BeliefLifecycleStatus {\n return resolveBeliefLifecycleStatus({\n beliefStatus: node.beliefStatus,\n confidence: node.confidence,\n predictionMeta: node.predictionMeta,\n metadata,\n });\n}\n\nasync function hasCompletedWorktreeForBelief(\n ctx: { db: any },\n beliefNodeId: Id<\"epistemicNodes\">,\n): Promise<boolean> {\n // Check if the belief is linked to a completed worktree via worktreeBeliefCluster\n const clusterMembership = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_belief\", (q: any) => q.eq(\"beliefId\", beliefNodeId))\n .collect();\n for (const membership of clusterMembership) {\n const worktree = await ctx.db.get(membership.worktreeId);\n if (worktree?.status === \"completed\" || worktree?.status === \"merged\") {\n return true;\n }\n }\n return false;\n}\n\nasync function getActiveConfidencePolicy(\n ctx: { db: any },\n): Promise<ConfidencePolicyConfig> {\n try {\n const activeConfig = await ctx.db\n .query(\"logicSprintScoring\")\n .withIndex(\"by_active\", (q: any) => q.eq(\"isActive\", true))\n .first();\n\n return {\n scoringMode:\n activeConfig?.confidencePolicy === \"always\"\n ? \"always\"\n : DEFAULT_CONFIDENCE_POLICY.scoringMode,\n tupleContradiction: normalizeTupleContradictionPolicy(\n activeConfig?.tupleContradictionPolicy as\n | Partial<ConfidencePolicyConfig[\"tupleContradiction\"]>\n | undefined\n ),\n };\n } catch {\n // K-tier/component environments do not carry logicSprintScoring.\n return DEFAULT_CONFIDENCE_POLICY;\n }\n}\n\nexport async function applyBeliefConfidenceChange(\n ctx: MutationCtx,\n args: {\n nodeId: Id<\"epistemicNodes\">;\n // SL opinion — the ONLY confidence input (EK-7)\n belief: number; // b: evidence FOR [0,1]\n disbelief: number; // d: evidence AGAINST [0,1]\n uncertainty: number; // u: lack of evidence [0,1]\n baseRate?: number; // a: prior probability [0,1], defaults to 0.5\n trigger: BeliefConfidenceTrigger;\n rationale?: string;\n authenticatedUserId: string;\n slOperator?: SLOperator; // which SL operator produced this opinion\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringWorktreeId?: string;\n }\n): Promise<{\n nodeId: Id<\"epistemicNodes\">;\n previousConfidence: number;\n newConfidence: number;\n opinion: { b: number; d: number; u: number; a: number };\n beliefConfidenceId: Id<\"beliefConfidence\">;\n}> {\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node) {\n throwStructuredMutationError({\n message: \"Node not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion:\n \"Verify nodeId points to an existing node before modulating confidence.\",\n details: { nodeId: args.nodeId },\n });\n }\n if (node.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `modulateConfidence only applies to belief nodes. Received nodeType \"${node.nodeType}\". Entity nodes (company, person, investor, etc.) do not have confidence — use entityLifecycle.updateEntityAttributes for mutable entity data.`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"entity.no_confidence\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes for entity mutations. modulateConfidence is for belief nodes only.\",\n details: { nodeId: args.nodeId, nodeType: node.nodeType },\n });\n }\n if (!node.projectId) {\n throwStructuredMutationError({\n message: \"Belief has no project scope.\",\n status: 400,\n code: \"MISSING_SCOPE\",\n invariantCode: \"belief.project_required\",\n suggestion: \"Belief must have a projectId to modulate confidence.\",\n details: { nodeId: args.nodeId },\n });\n }\n await requireProjectWriteAccess(ctx, node.projectId, args.authenticatedUserId);\n\n const existingMetadata = (node.metadata || {}) as Record<string, unknown>;\n const currentBeliefStatus = resolveBeliefStatus(node, existingMetadata);\n const confidencePolicy = await getActiveConfidencePolicy(ctx);\n if (\n confidencePolicy.scoringMode === \"after_worktree\" &&\n isPreValidationBeliefStatus(currentBeliefStatus)\n ) {\n const hasCompletedWorktree = await hasCompletedWorktreeForBelief(\n ctx,\n args.nodeId,\n );\n if (!hasCompletedWorktree) {\n throwStructuredMutationError({\n message:\n \"Cannot score belief before worktree completion. Complete a worktree that tests this belief first.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"belief.confidence_append_only\",\n suggestion:\n \"Complete a worktree linked to this belief before recording confidence modulation.\",\n details: { nodeId: args.nodeId },\n });\n }\n }\n\n const previousConfidence = node.confidence || 0.5;\n const predictionMeta =\n (node as any).predictionMeta || existingMetadata.predictionMeta;\n const previousOpinion = readBeliefOpinionSnapshot(node, existingMetadata);\n\n // SL opinion — the only path (EK-7)\n const slB = args.belief;\n const slD = args.disbelief;\n const slU = args.uncertainty;\n const slA = args.baseRate ?? 0.5;\n const nextOpinion = { b: slB, d: slD, u: slU, a: slA };\n const derivedConfidence = confidenceFromSL(slB, slD, slU, slA);\n const isFirstScoring =\n typeof node.confidence !== \"number\" || !Number.isFinite(node.confidence);\n const previousTupleContradicted =\n readTupleContradictedFlag((node as any).tupleContradicted) ??\n readTupleContradictedFlag(existingMetadata.tupleContradicted) ??\n detectTupleContradiction(\n previousOpinion,\n confidencePolicy.tupleContradiction.beliefThreshold,\n confidencePolicy.tupleContradiction.disbeliefThreshold\n );\n const tupleTransition = evaluateTupleContradictionTransition({\n previousTupleContradicted,\n opinion: nextOpinion,\n policy: confidencePolicy.tupleContradiction,\n });\n const tupleContradictionDescription = formatTupleContradictionDescription({\n opinion: nextOpinion,\n policy: tupleTransition.policy,\n });\n\n const newBeliefStatus = promoteBeliefStatusAfterScoring(\n currentBeliefStatus,\n {\n confidence: derivedConfidence,\n predictionMeta,\n metadata: existingMetadata,\n }\n );\n\n let tupleContradictionId: Id<\"contradictions\"> | undefined;\n if (tupleTransition.crossedIntoTupleContradiction) {\n tupleContradictionId = (await ctx.runMutation(\"contradictions:create\" as any, {\n projectId: node.projectId,\n topicId: node.topicId as any,\n beliefId: args.nodeId,\n beliefBId: args.nodeId,\n supportingInsightIds: [],\n contradictingInsightIds: [],\n severity: deriveTupleContradictionSeverity(node),\n source: \"tuple_space\",\n detectionMethod: \"agent\",\n description: tupleContradictionDescription,\n createdBy: args.authenticatedUserId,\n })) as Id<\"contradictions\">;\n }\n\n await ctx.db.patch(args.nodeId, {\n confidence: derivedConfidence,\n beliefStatus: newBeliefStatus,\n tupleContradicted: tupleTransition.tupleContradicted,\n updatedAt: now,\n // Store SL opinion fields at node level for fast access\n opinion_b: slB,\n opinion_d: slD,\n opinion_u: slU,\n opinion_a: slA,\n metadata: {\n ...existingMetadata,\n beliefStatus: newBeliefStatus,\n slBelief: slB,\n slDisbelief: slD,\n slUncertainty: slU,\n slBaseRate: slA,\n tupleContradicted: tupleTransition.tupleContradicted,\n },\n } as any);\n\n if (isFirstScoring) {\n const nodeTopicId = node.topicId;\n const themeNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic\", (q: any) =>\n q.eq(\"topicId\", nodeTopicId || node.projectId))\n .filter((q) => q.eq(q.field(\"nodeType\"), \"theme\"))\n .collect();\n\n for (const theme of themeNodes) {\n if (theme.globalId && node.globalId) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: `edge-${node.globalId}-relates_to_thesis-${theme.globalId}`,\n fromGlobalId: node.globalId,\n toGlobalId: theme.globalId,\n edgeType: \"relates_to_thesis\",\n weight: derivedConfidence,\n createdBy: args.authenticatedUserId,\n topicId: String(node.projectId),\n fromNodeType: \"belief\",\n toNodeType: \"theme\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n }\n }\n }\n\n const storedRationale =\n args.rationale ??\n `Confidence changed from ${previousConfidence.toFixed(2)} (nodeId: ${args.nodeId})`;\n\n const beliefConfidenceId = (await ctx.db.insert(\"beliefConfidence\", {\n ...buildBeliefConfidenceRow({\n beliefId: args.nodeId as Id<\"epistemicNodes\">,\n belief: slB,\n disbelief: slD,\n uncertainty: slU,\n baseRate: slA,\n trigger: args.trigger,\n rationale: storedRationale,\n assessedBy: args.authenticatedUserId,\n assessedAt: now,\n slOperator: args.slOperator,\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringContradictionId: tupleContradictionId,\n triggeringWorktreeId: args.triggeringWorktreeId,\n }),\n } as any)) as Id<\"beliefConfidence\">;\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"confidence_changed\",\n previousState: {\n confidence: previousConfidence,\n tupleContradicted: previousTupleContradicted,\n },\n newState: {\n opinion: nextOpinion,\n confidence: derivedConfidence,\n trigger: args.trigger,\n rationale: storedRationale,\n tupleContradicted: tupleTransition.tupleContradicted,\n tupleContradictionPolicy: tupleTransition.policy,\n ...(tupleContradictionId\n ? { tupleContradictionId: String(tupleContradictionId) }\n : {}),\n },\n changedBy: args.authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n topicId: node.topicId,\n });\n\n if (\n tupleTransition.crossedIntoTupleContradiction ||\n tupleTransition.crossedOutOfTupleContradiction\n ) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n previousState: { tupleContradicted: previousTupleContradicted },\n newState: {\n tupleContradicted: tupleTransition.tupleContradicted,\n action: tupleTransition.crossedIntoTupleContradiction\n ? \"tuple_contradiction_detected\"\n : \"tuple_contradiction_cleared\",\n opinion: nextOpinion,\n tupleContradictionPolicy: tupleTransition.policy,\n ...(tupleContradictionId\n ? { tupleContradictionId: String(tupleContradictionId) }\n : {}),\n },\n rationale: tupleTransition.crossedIntoTupleContradiction\n ? tupleContradictionDescription\n : `Tuple-space contradiction cleared: b=${nextOpinion.b.toFixed(2)}, d=${nextOpinion.d.toFixed(2)} no longer exceed the configured policy thresholds.`,\n changedBy: args.authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n topicId: node.topicId,\n });\n }\n\n if (Math.abs(derivedConfidence - previousConfidence) >= 0.15) {\n await ctx.scheduler.runAfter(\n 5000,\n internal.bi.contradictionSemanticDetector.scanAffectedBeliefs,\n {\n beliefId: args.nodeId as string,\n projectId: node.projectId,\n }\n );\n }\n\n // WT-4: Re-evaluate publication rules after confidence changes.\n // Publication is visibility-based: rules auto-determine which workspace\n // nodes are exposed at tenant scope based on confidence thresholds, etc.\n if (node.workspaceId && node.tenantId) {\n await ctx.scheduler.runAfter(\n 0,\n (internal as any).publication.evaluateNodePublication,\n { nodeId: args.nodeId }\n );\n }\n\n return {\n nodeId: args.nodeId,\n previousConfidence,\n newConfidence: derivedConfidence,\n opinion: { b: slB, d: slD, u: slU, a: slA },\n beliefConfidenceId,\n };\n}\n\nfunction propagationTriggerForEdge(\n edgeType: string,\n weight: number\n): BeliefConfidenceTrigger {\n if (edgeType === \"contradicts\" || edgeType === \"refutes\") {\n return \"contradiction_detected\";\n }\n\n if ((edgeType === \"supports\" || edgeType === \"informs\") && weight < 0) {\n return \"contradiction_detected\";\n }\n\n return \"evidence_added\";\n}\n\n// =============================================================================\n// SL PROPAGATION — EDGE-DEFINED OPINION PROPAGATION (EK-7, LKC-5)\n// =============================================================================\n\n/**\n * Propagate a confidence change through graph edges whose specs allow it.\n *\n * After a belief is scored, this function:\n * 1. Reads the graph-primitives edge propagation specs\n * 2. Traverses matching incoming/outgoing/bidirectional edges hop by hop\n * 3. Applies the edge operator with per-hop damping and hop limits\n * 4. Writes propagated opinions as new beliefConfidence entries\n */\nexport const propagateConfidenceChange = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n opinion_b: v.number(),\n opinion_d: v.number(),\n opinion_u: v.number(),\n opinion_a: v.number(),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const sourceOpinion = {\n b: args.opinion_b,\n d: args.opinion_d,\n u: args.opinion_u,\n a: args.opinion_a,\n };\n\n const sourceNode = await ctx.db.get(args.nodeId);\n const sourceScope = await resolveNodeScopeForWorkspaceIsolation(\n ctx,\n sourceNode\n );\n const dispatches = await collectConfidencePropagationDispatches({\n sourceNodeId: args.nodeId,\n sourceOpinion,\n sourceScope,\n queryEdges: async ({ nodeId, spec, direction }) => {\n return await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\n direction === \"outgoing\" ? \"by_from_type\" : \"by_to_type\",\n (q: any) =>\n direction === \"outgoing\"\n ? q.eq(\"fromNodeId\", nodeId).eq(\"edgeType\", spec.edgeType)\n : q.eq(\"toNodeId\", nodeId).eq(\"edgeType\", spec.edgeType)\n )\n .collect();\n },\n getNode: async (nodeId) => await ctx.db.get(nodeId),\n });\n\n for (const dispatch of dispatches) {\n await applyBeliefConfidenceChange(ctx, {\n nodeId: dispatch.targetNodeId,\n belief: dispatch.opinion.b,\n disbelief: dispatch.opinion.d,\n uncertainty: dispatch.opinion.u,\n baseRate: dispatch.opinion.a,\n trigger: propagationTriggerForEdge(dispatch.edgeType, dispatch.weight),\n rationale: `SL propagation via ${dispatch.edgeType} edge: ${dispatch.rationale}`,\n authenticatedUserId: args.userId,\n slOperator: dispatch.operator as SLOperator,\n });\n }\n\n return {\n propagated: dispatches.map((dispatch) => ({\n targetNodeId: String(dispatch.targetNodeId),\n edgeType: dispatch.edgeType,\n operator: dispatch.operator,\n })),\n count: dispatches.length,\n };\n },\n});\n\nasync function requireAuthenticatedUserId(ctx: {\n auth: { getUserIdentity: () => Promise<unknown> };\n}): Promise<string> {\n const userId = await getCurrentUserId(ctx as any);\n if (!userId) {\n throwStructuredMutationError({\n message: \"Authentication required.\",\n status: 401,\n code: \"AUTHENTICATION_REQUIRED\",\n invariantCode: \"auth.required\",\n suggestion:\n \"Provide a valid bearer token before invoking belief mutations.\",\n });\n }\n return userId;\n}\n\nasync function requireProjectWriteAccess(\n ctx: { db: unknown },\n projectId: string,\n userId: string\n): Promise<void> {\n const hasAccess = await checkProjectAccess(ctx as any, projectId, userId);\n if (!hasAccess) {\n throwStructuredMutationError({\n message: \"Project access required.\",\n status: 403,\n code: \"FORBIDDEN\",\n invariantCode: \"policy.scope_required\",\n suggestion: \"Request write access for the project and retry.\",\n details: { projectId, userId },\n });\n }\n}\n\n// =============================================================================\n// CREATE\n// =============================================================================\n\n/**\n * Create a new belief in the epistemic spine.\n * Returns the epistemicNodes ID directly (not a beliefs ID).\n */\nexport const create = mutation({\n args: {\n ...optionalBeliefScopeArgs,\n formulation: v.string(),\n beliefType: v.optional(v.string()),\n rationale: v.optional(v.string()),\n confidence: v.optional(\n v.union(\n v.literal(\"untested\"),\n v.literal(\"high\"),\n v.literal(\"medium\"),\n v.literal(\"low\")\n )\n ),\n pillar: v.optional(v.string()),\n worktreeId: v.optional(v.string()),\n sourceType: v.optional(\n v.union(\n v.literal(\"human\"),\n v.literal(\"ai_extracted\"),\n v.literal(\"ai_generated\")\n )\n ),\n userId: v.string(),\n // === CLASSIFICATION FIELDS ===\n reversibility: v.optional(\n v.union(\n v.literal(\"irreversible\"),\n v.literal(\"hard_to_reverse\"),\n v.literal(\"reversible\"),\n v.literal(\"trivial\")\n )\n ),\n predictionMeta: v.optional(\n v.object({\n isPrediction: v.boolean(),\n registeredAt: v.number(),\n expectedBy: v.optional(v.number()),\n })\n ),\n baseRate: v.number(),\n metadata: v.optional(v.any()), // Additional metadata including isConditional\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"belief\",\n mutationName: \"epistemicBeliefs.create\",\n });\n const topic = await ctx.db.get(scope.topicId);\n const normalizedBeliefType = await assertSchemaEnumValue(ctx, {\n category: \"belief_type\",\n value: args.beliefType,\n tenantId: topic?.tenantId,\n context: \"epistemicBeliefs.create\",\n });\n if (scope.projectId) {\n await requireProjectWriteAccess(\n ctx,\n scope.projectId,\n authenticatedUserId\n );\n }\n const now = Date.now();\n const baseRate = assertBaseRateInRange(args.baseRate);\n const initialBeliefStatus = args.worktreeId ? \"hypothesis\" : \"assumption\";\n const initialEpistemicStatus = args.worktreeId ? \"hypothesis\" : \"assumption\";\n const seedOpinion = {\n opinion_b: 0,\n opinion_d: 0,\n opinion_u: 1,\n opinion_a: baseRate,\n };\n const pillar = normalizePillar(args.pillar);\n\n // Merge additional metadata with standard metadata\n const additionalMeta = (args.metadata as Record<string, unknown>) || {};\n\n // Create the epistemic node\n const beliefGlobalId = generateGlobalId();\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId: beliefGlobalId,\n nodeType: \"belief\",\n epistemicLayer: \"L3\",\n canonicalText: args.formulation,\n contentHash: generateContentHash(args.formulation),\n content: args.rationale,\n title:\n args.formulation.slice(0, 100) +\n (args.formulation.length > 100 ? \"...\" : \"\"),\n metadata: {\n pillar,\n // No confidenceLevel — only set after worktree completion via modulateConfidence()\n status: \"active\",\n worktreeId: args.worktreeId,\n beliefStatus: initialBeliefStatus,\n epistemicStatus: initialEpistemicStatus,\n tupleContradicted: false,\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n ...additionalMeta, // Includes isConditional if provided\n },\n beliefStatus: initialBeliefStatus as any,\n ...seedOpinion,\n tupleContradicted: false,\n // Classification fields\n reversibility: args.reversibility ?? \"reversible\",\n predictionMeta: args.predictionMeta,\n // Infer epistemicStatus based on context\n epistemicStatus: initialEpistemicStatus as any,\n sourceType: args.sourceType || \"human\",\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n confidence: undefined, // No scalar confidence until worktree completion\n verificationStatus: \"unverified\",\n status: \"active\",\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n createdBy: authenticatedUserId,\n createdAt: now,\n updatedAt: now,\n });\n\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: nodeId,\n belief: seedOpinion.opinion_b,\n disbelief: seedOpinion.opinion_d,\n uncertainty: seedOpinion.opinion_u,\n baseRate,\n trigger: \"initial\",\n rationale:\n \"LKC-2 mandatory prior: seeded vacuous opinion at belief creation.\",\n assessedBy: authenticatedUserId,\n assessedAt: now,\n slOperator: \"manual_assessment\",\n }) as any\n );\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Schedule embedding generation\n await scheduleEmbeddingGeneration({\n ctx, nodeId, projectId: scope.projectId, topicId: scope.topicId,\n createdBy: authenticatedUserId, nodeType: \"belief\", text: args.formulation,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: null,\n newState: {\n formulation: args.formulation,\n status: \"active\",\n baseRate: seedOpinion.opinion_a,\n tupleContradicted: false,\n opinion: {\n b: seedOpinion.opinion_b,\n d: seedOpinion.opinion_d,\n u: seedOpinion.opinion_u,\n a: seedOpinion.opinion_a,\n },\n },\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n // Schedule embedding generation for semantic search\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n createdBy: authenticatedUserId,\n nodeType: \"belief\" as const,\n text: args.rationale\n ? `${args.formulation}\\n\\nRationale: ${args.rationale}`\n : args.formulation,\n // Don't pass confidence — \"untested\" is a string, but the\n // embedding action expects v.optional(v.number()). New beliefs\n // have no numeric confidence until scoring.\n }\n );\n }\n\n // ==========================================================================\n // GRAPH TOPOLOGY - SPRINT IS THE EPISTEMIC BOUNDARY\n // ==========================================================================\n //\n // The SPRINT connects beliefs to the theme, not belief creation.\n //\n // Flow:\n // 1. ASSUMPTION beliefs: Raw inputs, float disconnected from theme\n // 2. HYPOTHESIS (in sprint): Being tested, still no theme edge\n // 3. SCORED (sprint complete): NOW gets belongs_to edge to theme\n // - Edge weight = conviction level (high conviction = shorter edge)\n //\n // The belongs_to edge is created ONLY when:\n // - Sprint completes → belief becomes \"scored\" → create theme edge\n // - See: sprints.ts completeSprint mutation\n //\n // Other nodes NEVER connect directly to theme:\n // - Questions → test → Beliefs (not theme)\n // - Evidence → answer/inform → Questions/Beliefs (not theme)\n //\n // NO THEME EDGE CREATED HERE - HAPPENS IN SPRINT COMPLETION\n // ==========================================================================\n\n // ==========================================================================\n // ONTOLOGY: Schedule belief classification for entity extraction\n // ==========================================================================\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 2000, // 2 second delay\n internal.nodeClassification.scheduleClassification,\n {\n nodeId,\n nodeType: \"belief\",\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n // ==========================================================================\n // PILLAR: Auto-categorize uncategorized beliefs into canonical pillars\n // ==========================================================================\n if (pillar === \"other\" && (scope.projectId || scope.topicId)) {\n await ctx.scheduler.runAfter(\n 2500,\n \"beliefCategorization:autoCategorizeBelief\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n // ==========================================================================\n // TEMPORAL: Schedule LLM temporal classification (factual vs forecast)\n // Automatically determines if this is a prediction, extracts measure dates\n // and conditions. Users never need to tag beliefs manually.\n // ==========================================================================\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 3000, // 3 second delay — after entity extraction\n internal.beliefTemporalClassifier.classifyBelief,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n // ==========================================================================\n // CACHE: Invalidate graph analysis cache\n // ==========================================================================\n await markBeliefGraphDirty(ctx, {\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n return { nodeId };\n },\n});\n\n// =============================================================================\n// GET BY ID\n// =============================================================================\n\n/**\n * Get a belief by its epistemicNodes ID.\n */\nexport const getById = query({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n beliefId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const id = (args.nodeId ?? args.beliefId) as\n | Id<\"epistemicNodes\">\n | undefined;\n if (!id) {\n return null;\n }\n const node = await ctx.db.get(id);\n if (!node || node.nodeType !== \"belief\") {\n return null;\n }\n return node;\n },\n});\n\n// =============================================================================\n// REFINE BELIEF\n// =============================================================================\n\n/**\n * Refine an unscored belief in place.\n *\n * Lucern Invariant #1 + #2: Draft beliefs may be refined in place, but scored\n * beliefs are immutable and must be evolved through forkBelief().\n */\nexport const refineBelief = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n canonicalText: v.optional(v.string()),\n title: v.optional(v.string()),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node) {\n throwStructuredMutationError({\n message: \"Belief not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion: \"Verify nodeId points to an existing belief before refining.\",\n details: { nodeId: args.nodeId },\n });\n }\n if (node.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `refineBelief only applies to belief nodes. Received nodeType \"${node.nodeType}\".`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"entity.no_refine\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes for entity mutations.\",\n details: { nodeId: args.nodeId, nodeType: node.nodeType },\n });\n }\n if (!node.projectId) {\n throwStructuredMutationError({\n message: \"Belief has no project scope.\",\n status: 400,\n code: \"MISSING_SCOPE\",\n invariantCode: \"belief.project_required\",\n suggestion: \"Belief must have a projectId to refine.\",\n details: { nodeId: args.nodeId },\n });\n }\n\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n if (\n typeof node.confidence === \"number\" &&\n Number.isFinite(node.confidence)\n ) {\n throwStructuredMutationError({\n message:\n \"Scored beliefs are immutable. Use forkBelief to evolve a scored belief.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"belief.versioning.scored_immutable\",\n suggestion:\n \"Use forkBelief() to create a new version instead of refining in place.\",\n details: { nodeId: args.nodeId, confidence: node.confidence },\n });\n }\n\n const nextText =\n typeof args.canonicalText === \"string\" && args.canonicalText.trim().length > 0\n ? args.canonicalText.trim()\n : undefined;\n const nextTitle =\n typeof args.title === \"string\" && args.title.trim().length > 0\n ? args.title.trim()\n : undefined;\n\n const patch: Record<string, unknown> = { updatedAt: now };\n if (nextText !== undefined) {\n patch.canonicalText = nextText;\n patch.title =\n nextTitle ??\n nextText.slice(0, 100) +\n (nextText.length > 100 ? \"...\" : \"\");\n patch.contentHash = generateContentHash(nextText);\n } else if (nextTitle !== undefined) {\n patch.title = nextTitle;\n }\n if (args.rationale !== undefined) {\n patch.content = args.rationale;\n }\n\n await ctx.db.patch(args.nodeId, patch);\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n if (nextText !== undefined) {\n await scheduleEmbeddingGeneration({\n ctx,\n nodeId: args.nodeId,\n projectId: node.projectId,\n topicId: node.topicId,\n createdBy: authenticatedUserId,\n nodeType: \"belief\",\n text: args.rationale\n ? `${nextText}\\n\\nRationale: ${args.rationale}`\n : nextText,\n });\n }\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n canonicalText: node.canonicalText,\n title: node.title,\n content: node.content,\n },\n newState: {\n canonicalText:\n (patch.canonicalText as string | undefined) ?? node.canonicalText,\n title: (patch.title as string | undefined) ?? node.title,\n content: (patch.content as string | undefined) ?? node.content,\n action: \"refined\",\n rationale: args.rationale,\n },\n projectId: node.projectId,\n topicId: node.topicId,\n });\n\n await markBeliefGraphDirty(ctx, {\n projectId: node.projectId,\n topicId: node.topicId,\n });\n\n return { nodeId: args.nodeId };\n },\n});\n\n// =============================================================================\n// GET BY PROJECT\n// =============================================================================\n\n/**\n * Get all beliefs for a project.\n */\nexport const getByProject = query({\n args: {\n ...optionalBeliefScopeArgs,\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId && !args.topicId) {\n return [];\n }\n\n const pageSize = clampBeliefLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n let scope:\n | Awaited<ReturnType<typeof resolveTopicProjectScope>>\n | { tenantId: undefined; workspaceId: undefined; topicId?: undefined; projectId?: undefined };\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch {\n return [];\n }\n\n if (args.userId) {\n const scopeId = scope.topicId ? String(scope.topicId) : scope.projectId;\n if (!scopeId) {\n return [];\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n }\n\n const query = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\n scope.topicId ? \"by_topic_type\" : \"by_project_type\",\n (q) =>\n scope.topicId\n ? q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n : q.eq(\"projectId\", scope.projectId).eq(\"nodeType\", \"belief\")\n );\n\n const nodes = await query.order(\"desc\").take(scanLimit);\n const scopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, scope)\n );\n\n // Filter by status if provided\n if (args.status) {\n return scopedNodes\n .filter((n) => n.status === args.status)\n .slice(0, pageSize);\n }\n\n // Default: return active beliefs\n return scopedNodes.filter((n) => n.status === \"active\").slice(0, pageSize);\n },\n});\n\n/**\n * Get all beliefs for a topic.\n */\nexport const getByTopic = query({\n args: {\n topicId: v.string(),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampBeliefLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const scope = await resolveTopicProjectScope(ctx, { topicId: args.topicId });\n const query = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n );\n\n const nodes = await query.order(\"desc\").take(scanLimit);\n const scopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n })\n );\n if (args.status) {\n return scopedNodes\n .filter((n) => n.status === args.status)\n .slice(0, pageSize);\n }\n return scopedNodes.filter((n) => n.status === \"active\").slice(0, pageSize);\n },\n});\n\n// =============================================================================\n// FORK BELIEF\n// =============================================================================\n\n/**\n * Fork a belief - create a new version while preserving the original.\n * This is the Lucern-compliant way to \"update\" a belief.\n *\n * Lucern Invariant #1: Beliefs are append-only. Never modify formulation.\n * Lucern Invariant #3: Lineage is permanent.\n */\nexport const forkBelief = mutation({\n args: {\n parentNodeId: v.id(\"epistemicNodes\"),\n newFormulation: v.string(),\n forkReason: v.union(\n v.literal(\"refinement\"),\n v.literal(\"contradiction_response\"),\n v.literal(\"scope_change\"),\n v.literal(\"confidence_collapse\"),\n v.literal(\"manual\")\n ),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n const _confidencePolicy = await getActiveConfidencePolicy(ctx);\n\n // Get the parent belief\n const parent = await ctx.db.get(args.parentNodeId);\n if (!parent) {\n throwStructuredMutationError({\n message: \"Parent node not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion:\n \"Verify parentNodeId points to an existing node before forking.\",\n details: { parentNodeId: args.parentNodeId },\n });\n }\n if (parent.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `forkBelief only applies to belief nodes. Received nodeType \"${parent.nodeType}\". Entity nodes (company, person, investor, etc.) are mutable — use entityLifecycle.updateEntityAttributes instead of forking.`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"entity.no_fork\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes for entity mutations. forkBelief is for belief nodes only.\",\n details: { parentNodeId: args.parentNodeId, nodeType: parent.nodeType },\n });\n }\n if (!parent.projectId) {\n throwStructuredMutationError({\n message: \"Parent belief has no project scope.\",\n status: 400,\n code: \"MISSING_SCOPE\",\n invariantCode: \"belief.project_required\",\n suggestion: \"Belief must have a projectId to fork.\",\n details: { parentNodeId: args.parentNodeId },\n });\n }\n await requireProjectWriteAccess(ctx, parent.projectId, authenticatedUserId);\n\n const metadata = parent.metadata as Record<string, unknown> | undefined;\n const forkBeliefStatus: BeliefLifecycleStatus = \"hypothesis\";\n\n // Create the new forked belief\n const newBeliefGlobalId = generateGlobalId();\n const newNodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId: newBeliefGlobalId,\n nodeType: \"belief\",\n epistemicLayer: \"L3\",\n canonicalText: args.newFormulation,\n contentHash: generateContentHash(args.newFormulation),\n content: args.rationale || parent.content,\n title:\n args.newFormulation.slice(0, 100) +\n (args.newFormulation.length > 100 ? \"...\" : \"\"),\n metadata: {\n ...metadata,\n forkedFrom: args.parentNodeId,\n forkReason: args.forkReason,\n forkTimestamp: now,\n forkedBy: authenticatedUserId,\n status: \"active\",\n beliefStatus: forkBeliefStatus,\n tupleContradicted: false,\n },\n beliefStatus: forkBeliefStatus as any,\n sourceType: parent.sourceType,\n confidence: undefined,\n tupleContradicted: false,\n verificationStatus: \"unverified\",\n status: \"active\",\n projectId: parent.projectId,\n topicId: parent.topicId,\n createdBy: authenticatedUserId,\n createdAt: now,\n updatedAt: now,\n });\n\n const inheritedContracts = (await (ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q: any) =>\n q.eq(\"beliefNodeId\", args.parentNodeId)\n )\n .collect()) as Array<Record<string, unknown> & { status?: string }>;\n\n for (const contract of inheritedContracts) {\n if (contract.status === \"archived\") {\n continue;\n }\n await (ctx.db as any).insert(\n \"epistemicContracts\",\n createInheritedContractRecord(contract as any, {\n beliefNodeId: newNodeId,\n topicId: parent.topicId,\n createdBy: authenticatedUserId,\n now,\n }) as any\n );\n }\n\n // Schedule Neo4j node sync FIRST — the new node must exist in Neo4j\n // before the supersedes edge can be created (MATCH clause requirement).\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: newNodeId,\n operation: \"upsert\",\n });\n\n // Create supersedes edge with delay to let node sync complete first.\n await ctx.scheduler.runAfter(5000, internal.neo4jEdgeAPI.createEdge, {\n globalId: generateGlobalId(),\n fromGlobalId: newBeliefGlobalId,\n toGlobalId: parent.globalId,\n edgeType: \"supersedes\",\n context: `Fork reason: ${args.forkReason}`,\n createdBy: authenticatedUserId,\n topicId: parent.projectId ? String(parent.projectId) : undefined,\n fromNodeType: \"belief\",\n toNodeType: \"belief\",\n });\n\n // Schedule embedding generation for forked belief\n await scheduleEmbeddingGeneration({\n ctx, nodeId: newNodeId, projectId: parent.projectId, topicId: parent.topicId,\n createdBy: authenticatedUserId, nodeType: \"belief\", text: args.newFormulation,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: newNodeId,\n changeType: \"forked\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n parentNodeId: args.parentNodeId,\n formulation: parent.canonicalText,\n },\n newState: {\n formulation: args.newFormulation,\n forkReason: args.forkReason,\n tupleContradicted: false,\n },\n projectId: parent.projectId,\n topicId: parent.topicId,\n });\n\n // Temporal classification — forked beliefs get fresh classification\n // since the formulation may have changed temporal nature\n if (parent.projectId || parent.topicId) {\n const inheritedPillar = normalizePillar(\n String(metadata?.pillar || metadata?.topic || \"\")\n );\n if (inheritedPillar === \"other\") {\n await ctx.scheduler.runAfter(\n 2500,\n \"beliefCategorization:autoCategorizeBelief\" as any,\n {\n nodeId: newNodeId,\n projectId: parent.projectId,\n topicId: parent.topicId,\n }\n );\n }\n\n await ctx.scheduler.runAfter(\n 3000,\n internal.beliefTemporalClassifier.classifyBelief,\n {\n nodeId: newNodeId,\n projectId: parent.projectId,\n topicId: parent.topicId,\n }\n );\n }\n\n await markBeliefGraphDirty(ctx, {\n projectId: parent.projectId,\n topicId: parent.topicId,\n });\n\n return { newNodeId, parentNodeId: args.parentNodeId };\n },\n});\n\n// =============================================================================\n// MODULATE CONFIDENCE\n// =============================================================================\n\n/**\n * Modulate a belief's confidence.\n *\n * Lucern Invariant #2: Confidence changes are append-only (tracked in beliefConfidence table).\n */\nexport const modulateConfidence = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n // SL opinion — the ONLY confidence input (EK-7)\n belief: v.number(), // b: evidence FOR [0,1]\n disbelief: v.number(), // d: evidence AGAINST [0,1]\n uncertainty: v.number(), // u: lack of evidence [0,1]\n baseRate: v.optional(v.number()), // a: prior probability [0,1], defaults to 0.5\n trigger: v.union(\n v.literal(\"evidence_added\"),\n v.literal(\"evidence_removed\"),\n v.literal(\"contradiction_detected\"),\n v.literal(\"contradiction_resolved\"),\n v.literal(\"manual\"),\n v.literal(\"decay\"),\n v.literal(\"agent_assessment\"),\n v.literal(\"worktree_outcome\"),\n v.literal(\"worktree_completed\"),\n // SL-specific triggers\n v.literal(\"fusion\"),\n v.literal(\"discount\"),\n v.literal(\"deduction\"),\n v.literal(\"backfill_synthetic\")\n ),\n rationale: v.optional(v.string()),\n userId: v.string(),\n // SL operator provenance (optional — defaults to manual_assessment)\n slOperator: v.optional(v.union(\n v.literal(\"cumulative_fusion\"),\n v.literal(\"averaging_fusion\"),\n v.literal(\"trust_discount\"),\n v.literal(\"conditional_deduction\"),\n v.literal(\"dependency_cascade\"),\n v.literal(\"negation\"),\n v.literal(\"constraint_fusion\"),\n v.literal(\"manual_assessment\")\n )),\n triggeringEvidenceId: v.optional(v.id(\"epistemicNodes\")),\n triggeringWorktreeId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const result = await applyBeliefConfidenceChange(ctx, {\n nodeId: args.nodeId,\n belief: args.belief,\n disbelief: args.disbelief,\n uncertainty: args.uncertainty,\n baseRate: args.baseRate,\n trigger: args.trigger,\n rationale: args.rationale,\n authenticatedUserId,\n slOperator: args.slOperator as SLOperator | undefined,\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringWorktreeId: args.triggeringWorktreeId,\n });\n\n // Schedule edge-defined SL propagation through graph edges (EK-7, LKC-5)\n // Only propagate if confidence actually changed (avoid noise)\n if (Math.abs(result.newConfidence - result.previousConfidence) >= 0.01) {\n await ctx.scheduler.runAfter(\n 0,\n internal.epistemicBeliefs.propagateConfidenceChange,\n {\n nodeId: args.nodeId,\n opinion_b: args.belief,\n opinion_d: args.disbelief,\n opinion_u: args.uncertainty,\n opinion_a: args.baseRate ?? 0.5,\n userId: authenticatedUserId,\n }\n );\n }\n\n return {\n nodeId: result.nodeId,\n previousConfidence: result.previousConfidence,\n newConfidence: result.newConfidence,\n opinion: result.opinion,\n };\n },\n});\n\n// Two-axis model (valence/certainty) — REMOVED in EK-7.\n// All callers must use modulateConfidence with SL opinion (b, d, u, a).\n\n// =============================================================================\n// UPDATE STATUS\n// =============================================================================\n\n/**\n * Update a belief's status.\n */\nexport const updateStatus = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n ),\n reason: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const previousStatus = node.status;\n\n // Update the node's status and metadata in a single atomic patch\n const metadata = (node.metadata as Record<string, unknown>) || {};\n await ctx.db.patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n metadata: {\n ...metadata,\n status: args.status,\n },\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n previousState: { status: previousStatus },\n newState: { status: args.status, reason: args.reason },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return { nodeId: args.nodeId, previousStatus, newStatus: args.status };\n },\n});\n\n// =============================================================================\n// ARCHIVE\n// =============================================================================\n\n/**\n * Archive a belief (soft delete).\n * Lucern invariant: Beliefs are never deleted, only archived.\n */\nexport const archive = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n reason: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n return await ctx.runMutation(\n // Use updateStatus internally\n internal.epistemicBeliefs.updateStatusInternal,\n {\n nodeId: args.nodeId,\n status: \"archived\",\n reason: args.reason,\n userId: authenticatedUserId,\n }\n );\n },\n});\n\n// =============================================================================\n// UPDATE RATIONALE\n// =============================================================================\n\n/**\n * Update a belief rationale without changing formulation.\n * Formulation mutability rules are unchanged (use fork/refine paths for wording).\n */\nexport const updateRationale = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const metadata = (node.metadata as Record<string, unknown>) || {};\n const previousRationale =\n typeof metadata.rationale === \"string\" ? metadata.rationale : undefined;\n const nextRationale = args.rationale?.trim();\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n rationale:\n nextRationale && nextRationale.length > 0 ? nextRationale : undefined,\n },\n updatedAt: now,\n });\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n previousState: { rationale: previousRationale },\n newState: {\n rationale:\n nextRationale && nextRationale.length > 0 ? nextRationale : undefined,\n },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return {\n nodeId: args.nodeId,\n previousRationale,\n newRationale: nextRationale,\n };\n },\n});\n\n// Internal version for use by other mutations\nexport const updateStatusInternal = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n ),\n reason: v.optional(v.string()),\n userId: v.string(),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: await resolveNodeScopeForWorkspaceIsolation(ctx, node),\n mutationName: \"epistemicBeliefs.updateStatusInternal\",\n });\n\n const previousStatus = node.status;\n\n await ctx.db.patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n previousState: { status: previousStatus },\n newState: { status: args.status, reason: args.reason },\n changedBy: args.userId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return { nodeId: args.nodeId, previousStatus, newStatus: args.status };\n },\n});\n\n// =============================================================================\n// GET CONFIDENCE HISTORY\n// =============================================================================\n\n/**\n * Get the confidence history for a belief.\n */\nexport const getConfidenceHistory = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n return [];\n }\n\n return await ctx.db\n .query(\"beliefConfidence\")\n .withIndex(\"by_beliefId_time\", (q) =>\n q.eq(\"beliefId\", args.nodeId)\n )\n .order(\"asc\")\n .collect();\n },\n});\n\n// =============================================================================\n// GET BELIEF LINEAGE\n// =============================================================================\n\n/**\n * Get the lineage of a belief (all forks and parents).\n */\nexport const getLineage = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const lineage: Array<{\n nodeId: Id<\"epistemicNodes\">;\n formulation: string;\n forkReason?: string;\n createdAt: number;\n }> = [];\n\n let currentId: Id<\"epistemicNodes\"> | null = args.nodeId;\n\n while (currentId) {\n const node = await ctx.db.get(currentId);\n if (!node || node.nodeType !== \"belief\") {\n break;\n }\n\n const metadata = node.metadata as Record<string, unknown> | undefined;\n\n lineage.push({\n nodeId: node._id,\n formulation: node.canonicalText,\n forkReason: metadata?.forkReason as string | undefined,\n createdAt: node.createdAt,\n });\n\n // Find parent via supersedes edge\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_type\", (q) =>\n q.eq(\"fromNodeId\", currentId!).eq(\"edgeType\", \"supersedes\")\n )\n .collect();\n\n if (edges.length > 0) {\n currentId = edges[0].toNodeId ?? null;\n } else {\n // Check metadata for forkedFrom (backfilled beliefs)\n currentId = metadata?.forkedFrom as Id<\"epistemicNodes\"> | null;\n }\n }\n\n return lineage;\n },\n});\n\n// =============================================================================\n// GET BELIEFS BY IDS\n// =============================================================================\n\n/**\n * Get multiple beliefs by their IDs.\n */\nexport const getByIds = query({\n args: {\n nodeIds: v.array(v.id(\"epistemicNodes\")),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const beliefs = await Promise.all(args.nodeIds.map((id) => ctx.db.get(id)));\n return beliefs.filter((b) => b !== null && b.nodeType === \"belief\");\n },\n});\n\n// =============================================================================\n// GET BY SPRINT\n// =============================================================================\n\n/**\n * Get all beliefs associated with a worktree via worktreeBeliefCluster.\n */\nexport const getByWorktree = query({\n args: {\n worktreeId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const worktree = await ctx.db.get(args.worktreeId as Id<\"worktrees\">);\n if (!worktree) {\n return [];\n }\n\n const clusterLinks = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_worktree\", (q: any) => q.eq(\"worktreeId\", args.worktreeId))\n .collect();\n\n const beliefs: Array<Doc<\"epistemicNodes\">> = [];\n for (const link of clusterLinks) {\n const node = await ctx.db.get(link.beliefId);\n if (node) beliefs.push(node);\n }\n return beliefs;\n },\n});\n\n// =============================================================================\n// UPDATE PILLAR\n// =============================================================================\n\n/**\n * Update a belief's pillar/topic categorization.\n * Uses canonical epistemicNodes IDs.\n */\nexport const updatePillar = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n pillar: v.union(\n v.literal(\"market\"),\n v.literal(\"competition\"),\n v.literal(\"product\"),\n v.literal(\"team\"),\n v.literal(\"financials\"),\n v.literal(\"regulatory\"),\n v.literal(\"timing\"),\n v.literal(\"customer\"),\n v.literal(\"technology\"),\n v.literal(\"distribution\"),\n v.literal(\"deal\"),\n v.literal(\"risks\"),\n v.literal(\"other\")\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const existingNode = await ctx.db.get(args.nodeId);\n if (!existingNode || existingNode.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!existingNode.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(\n ctx,\n existingNode.projectId,\n authenticatedUserId\n );\n\n // Update the epistemicNode (canonical source of truth)\n let previousPillar: unknown = null;\n const metadata = (existingNode.metadata as Record<string, unknown>) || {};\n previousPillar = metadata.pillar;\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n pillar: args.pillar,\n topic: args.pillar,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n // Audit log - Lucern Invariant #14: no silent state transitions\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId as string,\n changeType: \"pillar_changed\",\n projectId: existingNode.projectId,\n changedBy: authenticatedUserId,\n changedAt: now,\n isAgent: false,\n previousState: { pillar: previousPillar },\n newState: { pillar: args.pillar },\n });\n\n return {\n nodeId: args.nodeId,\n previousPillar,\n newPillar: args.pillar,\n };\n },\n});\n\n// =============================================================================\n// COUNT BY STATUS\n// =============================================================================\n\n/**\n * Get counts of beliefs by status for a project.\n */\nexport const getCountByStatus = query({\n args: {\n ...optionalBeliefScopeArgs,\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const nodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\n args.topicId ? \"by_topic_type\" : \"by_project_type\",\n (q: any) =>\n args.topicId\n ? q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n : q.eq(\"projectId\", args.projectId).eq(\"nodeType\", \"belief\")\n )\n .collect();\n\n const counts = {\n active: 0,\n superseded: 0,\n archived: 0,\n total: nodes.length,\n };\n\n for (const node of nodes) {\n if (node.status === \"active\") {\n counts.active++;\n } else if (node.status === \"superseded\") {\n counts.superseded++;\n } else if (node.status === \"archived\") {\n counts.archived++;\n }\n }\n\n return counts;\n },\n});\n\n// =============================================================================\n// LINK BELIEFS (Direct epistemicNodes → epistemicNodes)\n// =============================================================================\n\n/**\n * Create an edge between two beliefs in the epistemic spine.\n * This works with epistemicNodes IDs directly (no legacy lookup needed).\n */\nexport const linkBeliefs = mutation({\n args: {\n fromNodeId: v.id(\"epistemicNodes\"),\n toNodeId: v.id(\"epistemicNodes\"),\n edgeType: v.union(\n // Basic belief relationships\n v.literal(\"supersedes\"),\n v.literal(\"depends_on\"),\n v.literal(\"supports\"),\n v.literal(\"contains\"),\n v.literal(\"informs\"),\n v.literal(\"derived_from\"),\n v.literal(\"tests\")\n ),\n weight: v.optional(v.number()), // -1 to 1\n context: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const fromNode = await ctx.db.get(args.fromNodeId);\n const toNode = await ctx.db.get(args.toNodeId);\n\n if (!fromNode || !toNode) {\n throw new Error(\"One or both belief nodes not found\");\n }\n\n if (fromNode.nodeType !== \"belief\" || toNode.nodeType !== \"belief\") {\n throw new Error(\"Both nodes must be beliefs\");\n }\n if (fromNode.projectId !== toNode.projectId) {\n throw new Error(\"Cannot link beliefs across different projects\");\n }\n if (!fromNode.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(\n ctx,\n fromNode.projectId,\n authenticatedUserId\n );\n\n const now = Date.now();\n\n // Create edge directly in Neo4j (MERGE handles duplicates)\n const edgeGlobalId = generateGlobalId();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: fromNode.globalId,\n toGlobalId: toNode.globalId,\n edgeType: args.edgeType,\n weight: args.weight ?? 1.0,\n context: args.context,\n createdBy: authenticatedUserId,\n topicId: fromNode.projectId ? String(fromNode.projectId) : undefined,\n fromNodeType: \"belief\",\n toNodeType: \"belief\",\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edgeGlobalId as unknown as Id<\"epistemicNodes\">,\n changeType: \"created\",\n previousState: null,\n newState: {\n fromNodeId: args.fromNodeId,\n toNodeId: args.toNodeId,\n edgeType: args.edgeType,\n },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: fromNode.projectId,\n });\n\n return { edgeGlobalId, created: true };\n },\n});\n\n// =============================================================================\n// LINK EVIDENCE (Insight) to Belief\n// =============================================================================\n\n/**\n * Link an insight (evidence) to a belief.\n * Creates an edge from evidence → belief with appropriate type.\n */\nexport const linkEvidence = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n insightId: insightIdUnion,\n type: v.union(v.literal(\"supporting\"), v.literal(\"contradicting\")),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const _now = Date.now();\n\n // Verify the belief exists\n const belief = await ctx.db.get(args.beliefNodeId);\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!belief.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, belief.projectId, authenticatedUserId);\n\n // Verify the insight exists\n const insight = await ctx.db.get(args.insightId);\n if (!insight || insight.nodeType !== \"evidence\") {\n throw new Error(\"Insight not found\");\n }\n if (\n \"projectId\" in insight &&\n insight.projectId &&\n insight.projectId !== belief.projectId\n ) {\n throw new Error(\"Insight belongs to a different project\");\n }\n\n const evidenceNodeId = insight._id;\n const evidenceGlobalId = insight.globalId;\n\n // Determine edge type based on supporting/contradicting\n const edgeType = \"informs\"; // Both use informs, weight determines support/contradict\n const weight = args.type === \"supporting\" ? 1.0 : -1.0;\n\n // Compute logicalRole from graph structure\n const logicalRole = evidenceNodeId\n ? await computeLogicalRole(ctx, evidenceNodeId, args.beliefNodeId)\n : \"contributory\";\n\n // Create the edge directly in Neo4j (MERGE handles duplicates)\n const edgeGlobalId = generateGlobalId();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: evidenceGlobalId,\n toGlobalId: belief.globalId,\n edgeType,\n weight,\n context: args.rationale || `${args.type} evidence`,\n createdBy: authenticatedUserId,\n topicId: belief.projectId ? String(belief.projectId) : undefined,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n // Classification fields\n logicalRole,\n temporalClass: \"structural\", // Default - most evidence is long-lived\n });\n\n return { edgeGlobalId, evidenceNodeId, created: true };\n },\n});\n\n// =============================================================================\n// UNLINK EVIDENCE from Belief\n// =============================================================================\n\n/**\n * Remove the link between an insight and a belief.\n */\nexport const unlinkEvidence = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n insightId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const evidenceNode = await ctx.db.get(args.insightId);\n if (!evidenceNode || evidenceNode.nodeType !== \"evidence\") {\n return { success: false, message: \"Evidence node not found\" };\n }\n if (!evidenceNode.projectId) {\n throw new Error(\"Evidence has no project scope\");\n }\n await requireProjectWriteAccess(\n ctx,\n evidenceNode.projectId,\n authenticatedUserId\n );\n const beliefNode = await ctx.db.get(args.beliefNodeId);\n if (!beliefNode || beliefNode.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (beliefNode.projectId !== evidenceNode.projectId) {\n throw new Error(\"Belief and evidence belong to different projects\");\n }\n\n // Find and delete the edge\n const edge = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", evidenceNode._id).eq(\"toNodeId\", args.beliefNodeId)\n )\n .first();\n\n if (edge) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edge.globalId,\n changeType: \"edge_removed\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n fromNodeId: evidenceNode._id,\n toNodeId: args.beliefNodeId,\n },\n newState: null,\n projectId: evidenceNode.projectId,\n });\n }\n\n return { success: true };\n },\n});\n\n// =============================================================================\n// GET BELIEF WITH EVIDENCE\n// =============================================================================\n\n/**\n * Get a belief along with all its linked evidence.\n */\nexport const getWithEvidence = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const belief = await ctx.db.get(args.nodeId);\n if (!belief || belief.nodeType !== \"belief\") {\n return null;\n }\n\n // Get all edges pointing TO this belief from evidence nodes\n const incomingEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", args.nodeId).eq(\"edgeType\", \"informs\")\n )\n .collect();\n\n // Get the evidence nodes\n const evidenceNodeIds = incomingEdges\n .filter((e) => e.fromNodeType === \"evidence\")\n .map((e) => e.fromNodeId);\n\n const evidenceNodes = await Promise.all(\n evidenceNodeIds.map((id) => ctx.db.get(id))\n );\n\n // Categorize by supporting vs contradicting (based on weight)\n const supporting: typeof evidenceNodes = [];\n const contradicting: typeof evidenceNodes = [];\n\n for (let i = 0; i < evidenceNodes.length; i++) {\n const node = evidenceNodes[i];\n const edge = incomingEdges[i];\n if (node) {\n if ((edge.weight || 0) >= 0) {\n supporting.push(node);\n } else {\n contradicting.push(node);\n }\n }\n }\n\n return {\n belief,\n evidence: {\n supporting,\n contradicting,\n total: supporting.length + contradicting.length,\n },\n };\n },\n});\n\n// =============================================================================\n// GET RELATIONSHIPS\n// =============================================================================\n\n/**\n * Get all relationships (edges) for a belief.\n */\nexport const getRelationships = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n direction: v.optional(\n v.union(v.literal(\"in\"), v.literal(\"out\"), v.literal(\"both\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const direction = args.direction || \"both\";\n const results: {\n incoming: Array<{ edge: unknown; node: unknown }>;\n outgoing: Array<{ edge: unknown; node: unknown }>;\n } = {\n incoming: [],\n outgoing: [],\n };\n\n if (direction === \"in\" || direction === \"both\") {\n // Get edges pointing TO this node\n const inEdges = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q) => q.eq(q.field(\"toNodeId\"), args.nodeId))\n .collect();\n\n for (const edge of inEdges) {\n const sourceNode = await ctx.db.get(edge.fromNodeId);\n results.incoming.push({ edge, node: sourceNode });\n }\n }\n\n if (direction === \"out\" || direction === \"both\") {\n // Get edges pointing FROM this node\n const outEdges = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q) => q.eq(q.field(\"fromNodeId\"), args.nodeId))\n .collect();\n\n for (const edge of outEdges) {\n const targetNode = edge.toNodeId\n ? await ctx.db.get(edge.toNodeId)\n : null;\n results.outgoing.push({ edge, node: targetNode });\n }\n }\n\n return results;\n },\n});\n\n// =============================================================================\n// DELETE RELATIONSHIP\n// =============================================================================\n\n/**\n * Delete a relationship (edge) between nodes.\n */\nexport const deleteRelationship = mutation({\n args: {\n edgeId: v.id(\"epistemicEdges\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const edge = await ctx.db.get(args.edgeId);\n if (!edge) {\n throw new Error(\"Edge not found\");\n }\n if (!edge.projectId) {\n throw new Error(\"Edge has no project scope\");\n }\n await requireProjectWriteAccess(ctx, edge.projectId, authenticatedUserId);\n\n // Store for audit\n const previousState = {\n fromNodeId: edge.fromNodeId,\n toNodeId: edge.toNodeId,\n edgeType: edge.edgeType,\n };\n\n // Delete via Neo4j authority path\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(args.edgeId);\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edge.globalId,\n changeType: \"edge_removed\",\n previousState,\n newState: null,\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: edge.projectId,\n });\n\n return { success: true };\n },\n});\n\n// =============================================================================\n// UPDATE CRITICALITY\n// =============================================================================\n\n/**\n * Update a belief's criticality level.\n */\nexport const updateCriticality = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n criticality: v.union(\n v.literal(\"blocking\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"essential\"),\n v.literal(\"nice_to_have\")\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const metadata = (node.metadata as Record<string, unknown>) || {};\n const previousCriticality = metadata.criticality;\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n criticality: args.criticality,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"criticality_changed\",\n previousState: { criticality: previousCriticality as string | undefined },\n newState: { criticality: args.criticality },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return {\n nodeId: args.nodeId,\n previousCriticality,\n newCriticality: args.criticality,\n };\n },\n});\n\n// =============================================================================\n// BATCH UPDATE CRITICALITY\n// =============================================================================\n\n/**\n * Batch update criticality for multiple beliefs.\n * Uses canonical epistemicNodes IDs.\n */\nexport const batchUpdateCriticality = mutation({\n args: {\n updates: v.array(\n v.object({\n beliefId: v.id(\"epistemicNodes\"),\n criticality: v.union(\n v.literal(\"blocking\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"essential\"),\n v.literal(\"nice_to_have\")\n ),\n ifFalseImpact: v.optional(v.string()),\n triagePriority: v.optional(v.number()),\n reasoning: v.optional(v.string()),\n dependentBeliefIds: v.optional(v.array(v.string())),\n blockedByBeliefIds: v.optional(v.array(v.string())),\n })\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n const results: Array<{\n beliefId: string;\n nodeId?: Id<\"epistemicNodes\">;\n success: boolean;\n }> = [];\n\n for (const update of args.updates) {\n try {\n const node = await ctx.db.get(update.beliefId);\n\n if (!node || node.nodeType !== \"belief\") {\n results.push({ beliefId: update.beliefId, success: false });\n continue;\n }\n if (!node.projectId) {\n results.push({ beliefId: update.beliefId, success: false });\n continue;\n }\n await requireProjectWriteAccess(\n ctx,\n node.projectId,\n authenticatedUserId\n );\n\n const metadata = (node.metadata as Record<string, unknown>) || {};\n const previousCriticality = metadata.criticality as string | undefined;\n\n await ctx.db.patch(node._id, {\n metadata: {\n ...metadata,\n criticality: update.criticality,\n ifFalseImpact: update.ifFalseImpact,\n triagePriority: update.triagePriority,\n criticalityReasoning: update.reasoning,\n dependentBeliefIds: update.dependentBeliefIds,\n blockedByBeliefIds: update.blockedByBeliefIds,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: node._id,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: node._id,\n changeType: \"criticality_changed\",\n previousState: { criticality: previousCriticality },\n newState: { criticality: update.criticality },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n results.push({\n beliefId: update.beliefId,\n nodeId: node._id,\n success: true,\n });\n } catch {\n results.push({ beliefId: update.beliefId, success: false });\n }\n }\n\n return { results, updatedCount: results.filter((r) => r.success).length };\n },\n});\n\n// =============================================================================\n// GET BY CRITICALITY\n// =============================================================================\n\n/**\n * Get beliefs by criticality level.\n */\nexport const getByCriticality = query({\n args: {\n ...optionalBeliefScopeArgs,\n criticality: v.union(\n v.literal(\"blocking\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"essential\"),\n v.literal(\"nice_to_have\")\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope);\n\n return nodes.filter((n) => {\n const metadata = n.metadata as Record<string, unknown> | undefined;\n return (\n metadata?.criticality === args.criticality && n.status === \"active\"\n );\n });\n },\n});\n\n// =============================================================================\n// GET UNANALYZED BELIEFS (for BI agents)\n// =============================================================================\n\n/**\n * Get beliefs that haven't been analyzed yet.\n * Used by BI agents for batch processing.\n */\nexport const getUnanalyzed = query({\n args: {\n ...optionalBeliefScopeArgs,\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = args.limit || 50;\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope);\n\n // Filter for unanalyzed beliefs (no criticality set, active status)\n const unanalyzed = nodes.filter((n) => {\n const metadata = n.metadata as Record<string, unknown> | undefined;\n return !metadata?.criticality && n.status === \"active\";\n });\n\n return unanalyzed.slice(0, limit);\n },\n});\n\n// =============================================================================\n// GET BY PROJECT (SYSTEM - no auth check)\n// =============================================================================\n\n/**\n * Get all beliefs for a project (system level - no auth check).\n * Used by BI agents and thesis audit agents.\n */\nexport const getByProjectSystem = query({\n args: {\n ...optionalBeliefScopeArgs,\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampBeliefLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope, { scanLimit });\n\n // Filter by status if provided\n if (args.status) {\n return nodes.filter((n) => n.status === args.status).slice(0, pageSize);\n }\n\n // Default: return active beliefs\n return nodes.filter((n) => n.status === \"active\").slice(0, pageSize);\n },\n});\n\n// =============================================================================\n// GET BY PILLAR\n// =============================================================================\n\n/**\n * Get beliefs filtered by pillar/topic.\n */\nexport const getByPillar = query({\n args: {\n ...optionalBeliefScopeArgs,\n pillar: v.union(\n v.literal(\"market\"),\n v.literal(\"competition\"),\n v.literal(\"product\"),\n v.literal(\"team\"),\n v.literal(\"financials\"),\n v.literal(\"regulatory\"),\n v.literal(\"timing\"),\n v.literal(\"customer\"),\n v.literal(\"technology\"),\n v.literal(\"distribution\"),\n v.literal(\"deal\"),\n v.literal(\"risks\"),\n v.literal(\"other\")\n ),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId && !args.topicId) {\n return [];\n }\n\n let scope:\n | Awaited<ReturnType<typeof resolveTopicProjectScope>>\n | {\n tenantId: undefined;\n workspaceId: undefined;\n topicId?: undefined;\n projectId?: undefined;\n };\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch {\n return [];\n }\n\n const nodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\n scope.topicId ? \"by_topic_type\" : \"by_project_type\",\n (q) =>\n scope.topicId\n ? q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n : q.eq(\"projectId\", scope.projectId).eq(\"nodeType\", \"belief\")\n )\n .collect();\n\n return nodes.filter((n) => {\n const metadata = n.metadata as Record<string, unknown> | undefined;\n const matchesPillar = metadata?.pillar === args.pillar;\n const matchesStatus = args.status\n ? n.status === args.status\n : n.status === \"active\";\n return matchesPillar && matchesStatus;\n });\n },\n});\n\n// =============================================================================\n// GET WORKTREE CLUSTER\n// =============================================================================\n\n/**\n * Get the belief cluster for a worktree.\n * Returns all beliefs linked to the worktree and their relationships.\n */\nexport const getWorktreeCluster = query({\n args: {\n worktreeId: v.string(),\n userId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const worktree = await ctx.db.get(args.worktreeId as Id<\"worktrees\">);\n if (!worktree) {\n return { beliefs: [], edges: [], beliefCount: 0 };\n }\n\n // Get all beliefs linked to this worktree\n const clusterLinks = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_worktree\", (q: any) => q.eq(\"worktreeId\", args.worktreeId))\n .collect();\n\n const beliefIds = new Set(clusterLinks.map((l: any) => String(l.beliefId)));\n const beliefs: Array<Doc<\"epistemicNodes\">> = [];\n for (const link of clusterLinks) {\n const node = await ctx.db.get(link.beliefId);\n if (node) beliefs.push(node);\n }\n\n // Get edges between cluster beliefs\n const clusterEdges: Array<{\n fromNodeId: string;\n toNodeId: string;\n edgeType: string;\n weight?: number;\n context?: string;\n }> = [];\n\n for (const beliefId of beliefIds) {\n const outEdges = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q: any) =>\n q.eq(q.field(\"fromNodeId\"), beliefId as Id<\"epistemicNodes\">)\n )\n .collect();\n\n for (const edge of outEdges) {\n if (beliefIds.has(String(edge.toNodeId))) {\n clusterEdges.push({\n fromNodeId: String(edge.fromNodeId),\n toNodeId: String(edge.toNodeId),\n edgeType: edge.edgeType,\n weight: edge.weight,\n context: edge.context,\n });\n }\n }\n }\n\n return {\n beliefs,\n edges: clusterEdges,\n beliefCount: beliefs.length,\n };\n },\n});\n\n// =============================================================================\n// INTERNAL QUERIES - For use by other Convex modules\n// =============================================================================\n// These queries are NOT exposed to the client API. They allow other Convex\n// functions (BI agents, intelligence, etc.) to read beliefs from epistemicNodes\n// without needing project access checks (internal use only).\n\n/**\n * Internal query to get beliefs for a project.\n * Returns epistemicNodes in legacy beliefs format for backward compatibility.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetByProject = internalQuery({\n args: {\n ...optionalBeliefScopeArgs,\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"validated\"),\n v.literal(\"invalidated\"),\n v.literal(\"archived\"),\n v.literal(\"superseded\")\n )\n ),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const pageSize = clampBeliefLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const audienceMode = args.audienceMode ?? \"internal\";\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n });\n const resolveAudienceClass = createBeliefAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const nodes = await getBeliefNodesForScope(ctx, scope, { scanLimit });\n\n // Filter by audience first, then status.\n let filtered = nodes.filter((node) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(node.audienceLabel, \"internal\")\n )\n );\n if (args.status) {\n filtered = filtered.filter((n) => n.status === args.status);\n }\n\n // Apply limit if provided\n filtered = filtered.slice(0, pageSize);\n\n // Map to legacy format\n return filtered.map(flattenBeliefNode);\n },\n});\n\n/**\n * Internal query to get beliefs for a topic.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetByTopic = internalQuery({\n args: {\n topicId: v.string(),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"validated\"),\n v.literal(\"invalidated\"),\n v.literal(\"archived\"),\n v.literal(\"superseded\")\n )\n ),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampBeliefLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const audienceMode = args.audienceMode ?? \"internal\";\n const scope = await resolveTopicProjectScope(ctx, { topicId: args.topicId });\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n });\n const resolveAudienceClass = createBeliefAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const query = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n );\n const nodes = await query.order(\"desc\").take(scanLimit);\n\n let filtered = nodes.filter((node) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(node.audienceLabel, \"internal\")\n )\n );\n if (args.status) {\n filtered = filtered.filter((n) => n.status === args.status);\n }\n filtered = filtered.slice(0, pageSize);\n\n return filtered.map(flattenBeliefNode);\n },\n});\n\n/**\n * Internal query to get active beliefs for a project.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetActive = internalQuery({\n args: {\n ...optionalBeliefScopeArgs,\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope, {\n status: \"active\",\n });\n\n // Apply limit if provided\n const limited = args.limit ? nodes.slice(0, args.limit) : nodes;\n\n return limited.map(flattenBeliefNode);\n },\n});\n\n/**\n * Internal query to get a single belief by ID.\n * Uses canonical epistemicNodes IDs.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetById = internalQuery({\n args: {\n beliefId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.beliefId as Id<\"epistemicNodes\">);\n\n if (!node || node.nodeType !== \"belief\") {\n return null;\n }\n\n // Map to legacy format\n return flattenBeliefNode(node);\n },\n});\n\n/**\n * Internal mutation to create a belief.\n * Creates ONLY in epistemicNodes (no dual-write).\n *\n * @internal Use by other Convex functions only\n */\nexport const internalCreate = internalMutation({\n args: {\n ...optionalBeliefScopeArgs,\n formulation: v.string(),\n baseRate: v.number(),\n confidence: v.optional(\n v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\"))\n ),\n userId: v.string(),\n rationale: v.optional(v.string()),\n topic: v.optional(v.string()),\n pillar: v.optional(v.string()),\n category: v.optional(v.string()),\n subcategory: v.optional(v.string()),\n categoryIcon: v.optional(v.string()),\n sprintId: v.optional(v.string()),\n sourceBeliefIds: v.optional(v.array(v.string())),\n criticality: v.optional(\n v.union(\n v.literal(\"blocking\"),\n v.literal(\"critical\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"nice_to_have\"),\n v.literal(\"unanalyzed\")\n )\n ),\n beliefType: v.optional(v.string()),\n /** Optional extra metadata fields merged into the node's metadata object.\n * Use for domain overlays like coding intelligence (codeAnchors, failedApproach, etc.) */\n extraMetadata: v.optional(v.any()),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n const baseRate = assertBaseRateInRange(args.baseRate);\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"belief\",\n mutationName: \"epistemicBeliefs.internalCreate\",\n });\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"belief\",\n epistemicLayer: \"L3\",\n },\n mutationName: \"epistemicBeliefs.internalCreate\",\n });\n const topic = await ctx.db.get(scope.topicId);\n const normalizedBeliefType = await assertSchemaEnumValue(ctx, {\n category: \"belief_type\",\n value: args.beliefType,\n tenantId: topic?.tenantId,\n context: \"epistemicBeliefs.internalCreate\",\n });\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.formulation);\n const requestedConfidence = args.confidence;\n const seedOpinion = {\n opinion_b: 0,\n opinion_d: 0,\n opinion_u: 1,\n opinion_a: baseRate,\n };\n\n // Create in epistemicNodes\n const nodeId = await (ctx.db as any).insert(\"epistemicNodes\", {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"belief\",\n canonicalText: args.formulation,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L3\", // L3: Traversal Anchors\n sourceType: args.userId.startsWith(\"agent:\") ? \"ai_generated\" : \"human\",\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n ...seedOpinion,\n tupleContradicted: false,\n metadata: {\n ...(requestedConfidence ? { confidence: requestedConfidence } : {}),\n tupleContradicted: false,\n rationale: args.rationale || \"\",\n topic: args.topic || args.pillar || \"\",\n pillar: args.pillar || args.topic || \"\",\n category: args.category || \"\",\n subcategory: args.subcategory || \"\",\n categoryIcon: args.categoryIcon || \"\",\n sprintId: args.sprintId,\n sourceBeliefIds: args.sourceBeliefIds || [],\n criticality: args.criticality || \"unanalyzed\",\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n supportingEvidenceIds: [],\n contradictingEvidenceIds: [],\n testingQuestionIds: [],\n linkedInsightIds: [],\n // Merge caller-provided metadata (e.g. codeAnchors for coding intelligence)\n ...(args.extraMetadata && typeof args.extraMetadata === \"object\"\n ? args.extraMetadata\n : {}),\n },\n });\n\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: nodeId,\n belief: seedOpinion.opinion_b,\n disbelief: seedOpinion.opinion_d,\n uncertainty: seedOpinion.opinion_u,\n baseRate,\n trigger: \"initial\",\n rationale:\n \"LKC-2 mandatory prior: seeded vacuous opinion at belief creation.\",\n assessedBy: args.userId,\n assessedAt: now,\n slOperator: \"manual_assessment\",\n }) as any\n );\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n newState: {\n formulation: args.formulation,\n baseRate,\n confidence: requestedConfidence,\n opinion: {\n b: seedOpinion.opinion_b,\n d: seedOpinion.opinion_d,\n u: seedOpinion.opinion_u,\n a: seedOpinion.opinion_a,\n },\n tupleContradicted: false,\n source: \"internal\",\n },\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n // Schedule embedding generation for semantic search.\n // Fire when either projectId or topicId is present — topicId alone covers Lucern\n // deployments which have no projects table.\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"belief\" as const,\n text: args.rationale\n ? `${args.formulation}\\n\\nRationale: ${args.rationale}`\n : args.formulation,\n ...(requestedConfidence\n ? {\n confidence:\n requestedConfidence === \"high\"\n ? 0.8\n : requestedConfidence === \"low\"\n ? 0.3\n : 0.5,\n }\n : {}),\n }\n );\n }\n\n if (\n normalizePillar(args.pillar || args.topic) === \"other\" &&\n (scope.projectId || scope.topicId)\n ) {\n await ctx.scheduler.runAfter(\n 2500,\n \"beliefCategorization:autoCategorizeBelief\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n await markBeliefGraphDirty(ctx, {\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n return { nodeId };\n },\n});\n\n// =============================================================================\n// CONFIDENCE CHANGE TRACKING\n// =============================================================================\n\n/**\n * Get recent confidence changes for beliefs in a project.\n * Shows beliefs that have had confidence updates via propagation, decay,\n * or other users - useful for \"Attention Needed\" dashboard panel.\n */\nexport const getRecentConfidenceChanges = query({\n args: {\n ...optionalBeliefScopeArgs,\n userId: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = args.limit ?? 10;\n const sevenDaysAgo = Date.now() - 7 * 24 * 60 * 60 * 1000;\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const scopeId = scope.topicId ? String(scope.topicId) : scope.projectId;\n\n if (!scopeId || !(await checkScopeAccess(ctx, scopeId, args.userId))) {\n return [];\n }\n\n const projectBeliefs = await getBeliefNodesForScope(ctx, scope);\n\n if (projectBeliefs.length === 0) {\n return [];\n }\n\n // Create a map of beliefId to belief info\n const beliefMap = new Map<\n string,\n { id: string; title: string; currentConfidence: number }\n >();\n for (const belief of projectBeliefs) {\n const info = {\n id: belief._id,\n title: belief.canonicalText || belief.title || \"Untitled belief\",\n currentConfidence: belief.confidence ?? 0.5,\n };\n beliefMap.set(belief._id, info);\n }\n\n // Get recent confidence entries\n const recentConfidence = await ctx.db\n .query(\"beliefConfidence\")\n .order(\"desc\")\n .filter((q) => q.gt(q.field(\"assessedAt\"), sevenDaysAgo))\n .take(200);\n\n // Filter to beliefs in this project and compute deltas\n const changes: Array<{\n beliefId: string;\n beliefTitle: string;\n delta: number;\n trigger: string;\n assessedBy: string;\n assessedAt: number;\n }> = [];\n\n const seenBeliefs = new Set<string>();\n\n for (const entry of recentConfidence) {\n const beliefInfo = beliefMap.get(entry.beliefId as string);\n if (!beliefInfo) {\n continue;\n }\n\n // Skip if we've already processed this belief\n if (seenBeliefs.has(beliefInfo.id)) {\n continue;\n }\n seenBeliefs.add(beliefInfo.id);\n\n // Get previous confidence entry to calculate delta\n const previousEntries = await ctx.db\n .query(\"beliefConfidence\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", entry.beliefId))\n .order(\"desc\")\n .filter((q) => q.lt(q.field(\"assessedAt\"), entry.assessedAt))\n .take(1);\n\n const previousConfidence = previousEntries[0]?.confidence ?? 0.5;\n const delta = entry.confidence - previousConfidence;\n\n // Only include if there's a meaningful change\n if (Math.abs(delta) < 0.05) {\n continue;\n }\n\n changes.push({\n beliefId: beliefInfo.id,\n beliefTitle: beliefInfo.title,\n delta,\n trigger: entry.trigger,\n assessedBy: entry.assessedBy,\n assessedAt: entry.assessedAt,\n });\n\n if (changes.length >= limit) {\n break;\n }\n }\n\n return changes;\n },\n});\n\n// =============================================================================\n// BACKFILL: Set valence + certainty on existing records\n// =============================================================================\n\n/**\n * Backfill synthetic t0 opinion-history rows for legacy beliefs that have\n * node-level opinion/confidence metadata but no beliefConfidence history.\n *\n * Run with:\n * npx convex run epistemicBeliefs:backfillSyntheticOpinionHistory '{\"limit\":100}'\n */\nexport const backfillSyntheticOpinionHistory = internalMutation({\n args: {\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = Math.max(1, Math.min(args.limit ?? 100, 100));\n const [beliefNodes, existingHistory] = await Promise.all([\n ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q) => q.eq(\"nodeType\", \"belief\"))\n .collect(),\n ctx.db.query(\"beliefConfidence\").collect(),\n ]);\n\n const beliefsWithHistory = new Set(\n existingHistory.map((entry) => String(entry.beliefId))\n );\n\n let inserted = 0;\n let skippedNoOpinion = 0;\n let skippedHasHistory = 0;\n\n for (const node of beliefNodes) {\n if (inserted >= limit) {\n break;\n }\n\n const hasOpinionSnapshot =\n readFiniteNumber((node as any).opinion_b) !== undefined ||\n readFiniteNumber((node as any).opinion_d) !== undefined ||\n readFiniteNumber((node as any).opinion_u) !== undefined ||\n readFiniteNumber((node as any).opinion_a) !== undefined ||\n readFiniteNumber(node.confidence) !== undefined;\n\n if (!hasOpinionSnapshot) {\n skippedNoOpinion++;\n continue;\n }\n\n if (beliefsWithHistory.has(String(node._id))) {\n skippedHasHistory++;\n continue;\n }\n\n const opinion = deriveSyntheticBackfillOpinion(node as Record<string, unknown>);\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: node._id,\n belief: opinion.b,\n disbelief: opinion.d,\n uncertainty: opinion.u,\n baseRate: opinion.a,\n trigger: \"backfill_synthetic\",\n rationale:\n \"LK-6 backfill: synthesized t0 from node-level opinion fields (no prior beliefConfidence row found).\",\n assessedAt:\n readFiniteNumber(node.createdAt) ??\n readFiniteNumber(node.updatedAt) ??\n Date.now(),\n assessedBy: \"system:lk-6-backfill\",\n slOperator: \"manual_assessment\",\n }) as any\n );\n beliefsWithHistory.add(String(node._id));\n inserted++;\n }\n\n const remainingCandidates = beliefNodes.filter((node) => {\n const hasOpinionSnapshot =\n readFiniteNumber((node as any).opinion_b) !== undefined ||\n readFiniteNumber((node as any).opinion_d) !== undefined ||\n readFiniteNumber((node as any).opinion_u) !== undefined ||\n readFiniteNumber((node as any).opinion_a) !== undefined ||\n readFiniteNumber(node.confidence) !== undefined;\n return hasOpinionSnapshot && !beliefsWithHistory.has(String(node._id));\n }).length;\n\n return {\n scanned: beliefNodes.length,\n inserted,\n skippedNoOpinion,\n skippedHasHistory,\n remainingCandidates,\n hasMore: remainingCandidates > 0,\n };\n },\n});\n\n/**\n * Backfill mandatory priors for legacy beliefs created before LKC-2.\n *\n * Run with:\n * npx convex run epistemicBeliefs:backfillMandatoryPriors '{\"limit\":100}'\n */\nexport const backfillMandatoryPriors = internalMutation({\n args: {\n limit: v.optional(v.number()),\n defaultBaseRate: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = Math.max(1, Math.min(args.limit ?? 100, 1000));\n const defaultBaseRate = assertBaseRateInRange(\n args.defaultBaseRate ?? 0.5,\n \"defaultBaseRate\"\n );\n const [beliefNodes, historyRows] = await Promise.all([\n ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q) => q.eq(\"nodeType\", \"belief\"))\n .collect(),\n ctx.db.query(\"beliefConfidence\").collect(),\n ]);\n\n const historyByBeliefId = new Map<string, typeof historyRows>();\n for (const row of historyRows) {\n const beliefId = String(row.beliefId);\n const entries = historyByBeliefId.get(beliefId) ?? [];\n entries.push(row);\n historyByBeliefId.set(beliefId, entries);\n }\n\n let touched = 0;\n let patchedNodes = 0;\n let patchedHistoryRows = 0;\n let insertedInitialRows = 0;\n let auditEntries = 0;\n\n for (const node of beliefNodes) {\n if (touched >= limit) {\n break;\n }\n\n const beliefId = String(node._id);\n const history = historyByBeliefId.get(beliefId) ?? [];\n const patchedOpinion = {\n belief: readFiniteNumber((node as any).opinion_b) ?? 0,\n disbelief: readFiniteNumber((node as any).opinion_d) ?? 0,\n uncertainty: readFiniteNumber((node as any).opinion_u) ?? 1,\n baseRate:\n readFiniteNumber((node as any).opinion_a) ?? defaultBaseRate,\n };\n const needsNodePatch =\n readFiniteNumber((node as any).opinion_b) === undefined ||\n readFiniteNumber((node as any).opinion_d) === undefined ||\n readFiniteNumber((node as any).opinion_u) === undefined ||\n readFiniteNumber((node as any).opinion_a) === undefined;\n const rowsMissingBaseRate = history.filter(\n (row) => readFiniteNumber((row as any).baseRate) === undefined\n );\n const needsInitialRow = history.length === 0;\n\n if (\n !needsNodePatch &&\n rowsMissingBaseRate.length === 0 &&\n !needsInitialRow\n ) {\n continue;\n }\n\n if (needsNodePatch) {\n await ctx.db.patch(node._id, {\n opinion_b: patchedOpinion.belief,\n opinion_d: patchedOpinion.disbelief,\n opinion_u: patchedOpinion.uncertainty,\n opinion_a: patchedOpinion.baseRate,\n updatedAt: Date.now(),\n } as any);\n patchedNodes++;\n }\n\n for (const row of rowsMissingBaseRate) {\n const belief = readFiniteNumber((row as any).belief) ?? 0;\n const disbelief = readFiniteNumber((row as any).disbelief) ?? 0;\n const uncertainty = readFiniteNumber((row as any).uncertainty) ?? 1;\n await ctx.db.patch((row as any)._id, {\n baseRate: defaultBaseRate,\n confidence: confidenceFromSL(\n belief,\n disbelief,\n uncertainty,\n defaultBaseRate\n ),\n } as any);\n patchedHistoryRows++;\n }\n\n if (needsInitialRow) {\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: node._id,\n belief: patchedOpinion.belief,\n disbelief: patchedOpinion.disbelief,\n uncertainty: patchedOpinion.uncertainty,\n baseRate: patchedOpinion.baseRate,\n trigger: \"initial\",\n rationale:\n \"LKC-2 backfill: inserted missing initial vacuous opinion with neutral prior.\",\n assessedAt:\n readFiniteNumber(node.createdAt) ??\n readFiniteNumber(node.updatedAt) ??\n Date.now(),\n assessedBy: \"system:lkc-2-prior-backfill\",\n slOperator: \"manual_assessment\",\n }) as any\n );\n insertedInitialRows++;\n }\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: beliefId,\n changeType: \"updated\",\n changedAt: Date.now(),\n changedBy: \"system:lkc-2-prior-backfill\",\n isAgent: false,\n previousState: null,\n newState: {\n baseRateBackfilled: true,\n baseRate: defaultBaseRate,\n patchedNodeOpinion: needsNodePatch,\n patchedHistoryRows: rowsMissingBaseRate.length,\n insertedInitialOpinion: needsInitialRow,\n },\n projectId: (node as any).projectId,\n topicId:\n typeof (node as any).topicId === \"string\"\n ? (node as any).topicId\n : undefined,\n } as any);\n auditEntries++;\n touched++;\n }\n\n return {\n scanned: beliefNodes.length,\n patchedNodes,\n patchedHistoryRows,\n insertedInitialRows,\n auditEntries,\n hasMore: touched >= limit,\n };\n },\n});\n\n/**\n * Backfill valence + certainty on beliefConfidence records and epistemicNodes metadata.\n * Converts existing single-number confidence to two-axis:\n * valence = confidence * 2 - 1 (maps 0→-1, 0.5→0, 1→+1)\n * certainty = |confidence - 0.5| * 2 (maps 0.5→0, 0/1→1)\n *\n * Run with: npx convex run epistemicBeliefs:backfillTwoAxisConfidence '{}'\n */\nexport const backfillTwoAxisConfidence = internalMutation({\n args: {\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const dryRun = args.dryRun ?? false;\n\n // 1. Backfill beliefConfidence records missing valence/certainty\n const allConfRecords = await ctx.db.query(\"beliefConfidence\").collect();\n let confUpdated = 0;\n let confSkipped = 0;\n\n for (const record of allConfRecords) {\n if (record.valence !== undefined && record.certainty !== undefined) {\n confSkipped++;\n continue;\n }\n const conf = record.confidence ?? 0.5;\n const valence = Math.round((conf * 2 - 1) * 100) / 100;\n const certainty = Math.round(Math.abs(conf - 0.5) * 2 * 100) / 100;\n\n if (!dryRun) {\n await ctx.db.patch(record._id, { valence, certainty } as any);\n }\n confUpdated++;\n }\n\n // 2. Backfill epistemicNodes metadata missing valence/certainty\n const allBeliefNodes = await ctx.db\n .query(\"epistemicNodes\")\n .filter((q) => q.eq(q.field(\"nodeType\"), \"belief\"))\n .collect();\n let nodesUpdated = 0;\n let nodesSkipped = 0;\n\n for (const node of allBeliefNodes) {\n const meta = (node.metadata || {}) as Record<string, unknown>;\n if (meta.valence !== undefined && meta.certainty !== undefined) {\n nodesSkipped++;\n continue;\n }\n const conf = node.confidence ?? 0.5;\n const valence = Math.round((conf * 2 - 1) * 100) / 100;\n const certainty = Math.round(Math.abs(conf - 0.5) * 2 * 100) / 100;\n\n if (!dryRun) {\n await ctx.db.patch(node._id, {\n metadata: { ...meta, valence, certainty },\n });\n }\n nodesUpdated++;\n }\n\n return {\n dryRun,\n beliefConfidence: {\n updated: confUpdated,\n skipped: confSkipped,\n total: allConfRecords.length,\n },\n epistemicNodes: {\n updated: nodesUpdated,\n skipped: nodesSkipped,\n total: allBeliefNodes.length,\n },\n };\n },\n});\n\n/**\n * Backfill: Create relates_to_thesis edges for confidence-bearing beliefs in a project.\n *\n * When modulateConfidence was missing the edge-creation step, beliefs got scored\n * but never linked to the project's theme node. This backfill fixes that.\n *\n * Run: npx convex run epistemicBeliefs:backfillScoredBeliefEdges '{\"projectId\":\"<id>\"}'\n * Dry run first: npx convex run epistemicBeliefs:backfillScoredBeliefEdges '{\"projectId\":\"<id>\",\"dryRun\":true}'\n */\nexport const backfillScoredBeliefEdges = internalMutation({\n args: {\n ...optionalBeliefScopeArgs,\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const dryRun = args.dryRun ?? false;\n\n // Get all confidence-bearing beliefs in the project\n const allBeliefs = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\n \"by_topic\",\n (q: any) =>\n q.eq(\"topicId\", args.topicId || args.projectId)\n )\n .filter((q) => q.eq(q.field(\"nodeType\"), \"belief\"))\n .collect();\n\n const scoredBeliefs = allBeliefs.filter((belief) => {\n const metadata = (belief.metadata || {}) as Record<string, unknown>;\n const lifecycle = resolveBeliefStatus(belief, metadata);\n return lifecycle === \"belief\" || lifecycle === \"fact\";\n });\n\n // Get theme nodes for the project\n const themeNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\n \"by_topic\",\n (q: any) =>\n q.eq(\"topicId\", args.topicId || args.projectId)\n )\n .filter((q) => q.eq(q.field(\"nodeType\"), \"theme\"))\n .collect();\n\n let created = 0;\n let skipped = 0;\n\n for (const belief of scoredBeliefs) {\n if (!belief.globalId) {\n skipped++;\n continue;\n }\n\n for (const theme of themeNodes) {\n if (!theme.globalId) {\n continue;\n }\n\n const edgeGlobalId = `edge-${belief.globalId}-relates_to_thesis-${theme.globalId}`;\n\n // Check if edge already exists in Convex mirror\n const existing = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q) => q.eq(q.field(\"globalId\"), edgeGlobalId))\n .first();\n\n if (existing) {\n skipped++;\n continue;\n }\n\n if (!dryRun) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: belief.globalId,\n toGlobalId: theme.globalId,\n edgeType: \"relates_to_thesis\",\n weight: belief.confidence ?? 0.5,\n createdBy: \"backfill:scored_belief_theme\",\n topicId: String(args.projectId),\n fromNodeType: \"belief\",\n toNodeType: \"theme\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n }\n created++;\n }\n }\n\n return {\n dryRun,\n scoredBeliefs: scoredBeliefs.length,\n themeNodes: themeNodes.length,\n edgesCreated: created,\n edgesSkipped: skipped,\n };\n },\n});\n\n/**\n * @deprecated Legacy sprint backfill — removed. Sprints are D-tier.\n * Kept as no-op stub to avoid breaking deployed function references.\n */\nexport const backfillBeliefSprintIds = internalMutation({\n args: {\n ...optionalBeliefScopeArgs,\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, _args) => {\n return {\n dryRun: true,\n message: \"backfillBeliefSprintIds removed — sprints are D-tier legacy. Use worktrees.\",\n sprintsScanned: 0,\n beliefsWithSprints: 0,\n updated: 0,\n skipped: 0,\n };\n },\n});\n\n// =============================================================================\n// GET BELIEF CLUSTER POSITIONS (worktree-based)\n// =============================================================================\n\n/**\n * Get belief cluster positions for visualization.\n * Classifies each belief as \"clustered\" (in a worktree) or \"unprocessed\"\n * based on worktreeBeliefCluster membership.\n *\n * Used by PillarDetailPanel, PillarsPanel, BeliefListPanel.\n */\nexport const getBeliefClusterPositions = query({\n args: {\n ...optionalBeliefScopeArgs,\n userId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope || !scope.projectId) {\n return {\n positions: {},\n hasClusters: false,\n counts: { raw: 0, hypothesis: 0, conditional: 0, unprocessed: 0, total: 0 },\n };\n }\n\n const allBeliefNodes = await getBeliefNodesForScope(ctx, scope);\n const clusteredBeliefIds = new Set<string>();\n\n // Find all beliefs that belong to any worktree cluster\n for (const node of allBeliefNodes) {\n const links = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_belief\", (q: any) => q.eq(\"beliefId\", node._id))\n .first();\n if (links) {\n clusteredBeliefIds.add(String(node._id));\n }\n }\n\n const positions: Record<string, \"hypothesis\" | \"unprocessed\"> = {};\n for (const node of allBeliefNodes) {\n const id = String(node._id);\n // Beliefs in worktree clusters are treated as hypotheses (tested)\n positions[id] = clusteredBeliefIds.has(id) ? \"hypothesis\" : \"unprocessed\";\n }\n\n const unprocessedCount = allBeliefNodes.length - clusteredBeliefIds.size;\n\n return {\n positions,\n hasClusters: clusteredBeliefIds.size > 0,\n counts: {\n raw: 0,\n hypothesis: clusteredBeliefIds.size,\n conditional: 0,\n unprocessed: unprocessedCount,\n total: allBeliefNodes.length,\n },\n };\n },\n});\n\n// =============================================================================\n// REASSIGN BELIEFS TO A NEW TOPIC (for auto-branching)\n// =============================================================================\n\n/**\n * Reassign a batch of belief nodes to a different topic.\n *\n * Used by the density-based auto-branching system when beliefs are moved\n * from a parent topic into newly created subtopics. Patches `topicId`\n * and `updatedAt` on the target beliefs, and also reassigns any questions\n * and evidence nodes that are connected to the reassigned beliefs via edges.\n *\n * Skips nodes that don't exist or aren't active.\n */\nexport const reassignBeliefsTopic = mutation({\n args: {\n beliefNodeIds: v.array(v.id(\"epistemicNodes\")),\n targetTopicId: v.string(),\n reason: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // Verify the target topic exists\n const targetTopic = await ctx.db.get(args.targetTopicId as Id<\"topics\">);\n if (!targetTopic) {\n throw new Error(`Target topic not found: ${args.targetTopicId}`);\n }\n\n let reassigned = 0;\n let skipped = 0;\n const now = Date.now();\n const movedBeliefIds = new Set<string>();\n\n // Phase 1: Reassign the beliefs themselves\n for (const beliefNodeId of args.beliefNodeIds) {\n const node = await ctx.db.get(beliefNodeId);\n\n // Skip if node doesn't exist or isn't a belief\n if (!node || node.nodeType !== \"belief\") {\n skipped++;\n continue;\n }\n\n await ctx.db.patch(beliefNodeId, {\n topicId: args.targetTopicId,\n updatedAt: now,\n });\n movedBeliefIds.add(String(beliefNodeId));\n reassigned++;\n }\n\n // Phase 2: Find and reassign connected non-belief nodes (questions, evidence, etc.)\n // For each moved belief, find edges where the belief is source or target,\n // and reassign the connected non-belief node if it's in the same old topic.\n let connectedReassigned = 0;\n const alreadyReassigned = new Set<string>();\n\n for (const beliefId of movedBeliefIds) {\n // Outbound edges from this belief\n const outbound = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from\", (q: any) =>\n q.eq(\"fromNodeId\", beliefId as any)\n )\n .collect();\n\n // Inbound edges to this belief\n const inbound = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q: any) =>\n q.eq(\"toNodeId\", beliefId as any)\n )\n .collect();\n\n const connectedNodeIds = new Set<string>();\n for (const edge of outbound) {\n if (edge.toNodeId) connectedNodeIds.add(String(edge.toNodeId));\n }\n for (const edge of inbound) {\n if (edge.fromNodeId) connectedNodeIds.add(String(edge.fromNodeId));\n }\n\n for (const connectedId of connectedNodeIds) {\n // Skip beliefs (already handled in Phase 1) and already-reassigned nodes\n if (movedBeliefIds.has(connectedId) || alreadyReassigned.has(connectedId)) {\n continue;\n }\n\n try {\n const connectedNode = await ctx.db.get(connectedId as any) as any;\n if (!connectedNode || connectedNode.status !== \"active\") continue;\n // Only reassign if the connected node is still in the OLD topic\n // (i.e., not already in the target or a different subtopic)\n if (\n connectedNode.topicId &&\n String(connectedNode.topicId) !== String(args.targetTopicId)\n ) {\n await ctx.db.patch(connectedId as any, {\n topicId: args.targetTopicId,\n updatedAt: now,\n });\n alreadyReassigned.add(connectedId);\n connectedReassigned++;\n }\n } catch {\n // Skip nodes that can't be patched\n }\n }\n }\n\n return { reassigned, skipped, connectedReassigned };\n },\n});\n","/** Shared evaluator helpers and result-normalization utilities. */\n\nimport type {\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n} from \"../epistemicContractHelpers\";\n\nexport type ToolResultEnvelope = {\n command?: string;\n data?: unknown;\n exitCode?: number | null;\n output?: string;\n report?: unknown;\n stderr?: string;\n stdout?: string;\n};\n\ntype AnyRecord = Record<string, unknown>;\n\nexport function asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nexport function asNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nexport function asRecord(value: unknown): AnyRecord | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as AnyRecord)\n : null;\n}\n\nexport function asString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : null;\n}\n\nexport function deriveDirectionalResult(\n direction: EpistemicContractDirection,\n conditionSatisfied: boolean\n): EpistemicContractEvaluationResult {\n if (direction === \"falsifies\") {\n return conditionSatisfied ? \"disconfirmed\" : \"confirmed\";\n }\n return conditionSatisfied ? \"confirmed\" : \"disconfirmed\";\n}\n\nexport function extractTextCandidates(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n const candidate = asString(value);\n return candidate ? [candidate] : [];\n }\n\n const candidates = [\n record.stdout,\n record.stderr,\n record.output,\n record.text,\n record.message,\n record.raw,\n ]\n .map(asString)\n .filter((candidate): candidate is string => Boolean(candidate));\n\n for (const nestedKey of [\"report\", \"result\", \"data\", \"payload\"]) {\n const nested = record[nestedKey];\n if (nested !== value) {\n candidates.push(...extractTextCandidates(nested));\n }\n }\n\n return Array.from(new Set(candidates));\n}\n\nexport function normalizeFilePath(value: string): string {\n return value.replace(/\\\\/g, \"/\").replace(/^\\.\\//, \"\");\n}\n\nexport function normalizeToolResultEnvelope(value: unknown): ToolResultEnvelope {\n const record = asRecord(value);\n if (!record) {\n return {\n output: asString(value) ?? undefined,\n };\n }\n\n const exitCode =\n asNumber(record.exitCode) ??\n asNumber(record.code) ??\n asNumber(record.status) ??\n null;\n\n return {\n command: asString(record.command) ?? undefined,\n data: record.data ?? record.payload,\n exitCode,\n output: asString(record.output) ?? undefined,\n report:\n record.report ??\n record.json ??\n record.result ??\n record.payload ??\n undefined,\n stderr: asString(record.stderr) ?? undefined,\n stdout: asString(record.stdout) ?? undefined,\n };\n}\n\nexport function parseJsonCandidate<T = unknown>(value: unknown): T | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value !== \"string\") {\n return value as T;\n }\n\n try {\n return JSON.parse(value) as T;\n } catch {\n return null;\n }\n}\n\nexport function patternMatchesPath(\n filePath: string,\n pattern: string\n): boolean {\n const normalizedPath = normalizeFilePath(filePath);\n const normalizedPattern = normalizeFilePath(pattern);\n const escaped = normalizedPattern.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regexPattern = escaped\n .replace(/\\\\\\*\\\\\\*/g, \".*\")\n .replace(/\\\\\\*/g, \"[^/]*\")\n .replace(/\\\\\\?/g, \"[^/]\");\n return new RegExp(`^${regexPattern}$`).test(normalizedPath);\n}\n\nexport function somePatternMatches(\n filePath: string | null | undefined,\n patterns: string[]\n): boolean {\n if (!filePath) {\n return false;\n }\n return patterns.some((pattern) => patternMatchesPath(filePath, pattern));\n}\n","/** Lint-based engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n somePatternMatches,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype ParsedLintDiagnostic = {\n filePath: string | null;\n message: string;\n severity: string;\n};\n\ntype LintCheckerConfig = {\n filePatterns: string[];\n linter: \"biome\";\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): LintCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"lint_checker requires evaluatorConfig with { filePatterns: string[], linter: \\\"biome\\\" }.\"\n );\n }\n\n const filePatterns = asArray(record.filePatterns)\n .map(asString)\n .filter((pattern): pattern is string => Boolean(pattern));\n if (filePatterns.length === 0) {\n throw new Error(\"lint_checker requires at least one file pattern.\");\n }\n\n const linter = asString(record.linter);\n if (linter !== \"biome\") {\n throw new Error(`Unsupported linter: ${String(record.linter)}`);\n }\n\n return {\n filePatterns,\n linter,\n };\n}\n\nfunction parseDiagnostics(resultData: unknown): ParsedLintDiagnostic[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ?? asRecord(envelope.data) ?? asRecord(resultData);\n if (!record) {\n return [];\n }\n\n return asArray(record.diagnostics)\n .map((entry) => {\n const diagnostic = asRecord(entry);\n if (!diagnostic) {\n return null;\n }\n const location = asRecord(diagnostic.location);\n const pathRecord = asRecord(location?.path);\n const filePath =\n asString(diagnostic.filePath) ??\n asString(diagnostic.file) ??\n asString(location?.filePath) ??\n asString(pathRecord?.file);\n const severity = asString(diagnostic.severity) ?? \"error\";\n const message =\n asString(diagnostic.message) ??\n asString(diagnostic.description) ??\n \"Lint issue\";\n return {\n filePath: filePath ? normalizeFilePath(filePath) : null,\n message,\n severity,\n };\n })\n .filter(\n (diagnostic): diagnostic is ParsedLintDiagnostic => Boolean(diagnostic)\n );\n}\n\nfunction getMatchedDiagnostics(\n contract: AnyContract,\n resultData: unknown\n): ParsedLintDiagnostic[] {\n const config = parseConfig(contract.condition);\n return parseDiagnostics(resultData).filter((diagnostic) =>\n somePatternMatches(diagnostic.filePath, config.filePatterns)\n );\n}\n\nexport const lintCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"lint_checker\",\n matches({ contract, resultData }) {\n const envelope = normalizeToolResultEnvelope(resultData);\n const exitCode = asNumber(envelope.exitCode);\n if (exitCode === 0) {\n return true;\n }\n return getMatchedDiagnostics(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"lint_checker requires Biome lint resultData.\",\n };\n }\n\n const envelope = normalizeToolResultEnvelope(args.resultData);\n const exitCode = asNumber(envelope.exitCode);\n const matchedDiagnostics = getMatchedDiagnostics(args.contract, args.resultData);\n\n if (matchedDiagnostics.length === 0 && exitCode !== 0 && exitCode !== null) {\n return {\n result: \"inconclusive\",\n rationale:\n \"Biome reported issues, but none matched the configured file patterns.\",\n };\n }\n\n const conditionSatisfied =\n exitCode === 0 || (exitCode !== null && matchedDiagnostics.length === 0);\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Biome reported no matching lint diagnostics for ${config.filePatterns.join(\", \")}.`\n : `Biome reported ${matchedDiagnostics.length} matching issue(s): ${matchedDiagnostics\n .map((diagnostic) =>\n diagnostic.filePath\n ? `${diagnostic.filePath} (${diagnostic.severity})`\n : diagnostic.message\n )\n .join(\", \")}.`,\n data: {\n exitCode,\n filePatterns: config.filePatterns,\n linter: config.linter,\n matchedDiagnostics,\n },\n };\n },\n};\n","/** Sentry-backed engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n normalizeToolResultEnvelope,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype SentryCheckerConfig = {\n module: string;\n windowDays: number;\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): SentryCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"sentry_checker requires evaluatorConfig with { module, windowDays }.\"\n );\n }\n\n const moduleName = asString(record.module);\n const windowDays = asNumber(record.windowDays);\n if (!moduleName || windowDays === null) {\n throw new Error(\n \"sentry_checker requires a module name and numeric windowDays.\"\n );\n }\n\n return {\n module: moduleName,\n windowDays,\n };\n}\n\nfunction parseIncidentCount(resultData: unknown): {\n incidentCount: number | null;\n moduleName: string | null;\n windowDays: number | null;\n} {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record = asRecord(envelope.report) ?? asRecord(envelope.data) ?? asRecord(resultData);\n if (!record) {\n return {\n incidentCount: null,\n moduleName: null,\n windowDays: null,\n };\n }\n\n const incidents = asArray(record.incidents);\n const incidentCount =\n asNumber(record.incidentCount) ??\n (incidents.length > 0 ? incidents.length : null);\n\n return {\n incidentCount,\n moduleName: asString(record.module),\n windowDays: asNumber(record.windowDays),\n };\n}\n\nfunction matchesModule(contract: AnyContract, resultData: unknown): boolean {\n const config = parseConfig(contract.condition);\n const payload = parseIncidentCount(resultData);\n return !payload.moduleName || payload.moduleName === config.module;\n}\n\nexport const sentryCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"sentry_checker\",\n matches({ contract, resultData }) {\n return matchesModule(contract, resultData);\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"sentry_checker requires incident count resultData.\",\n };\n }\n\n const payload = parseIncidentCount(args.resultData);\n if (payload.incidentCount === null) {\n return {\n result: \"error\",\n rationale: \"sentry_checker could not determine an incident count.\",\n };\n }\n if (!matchesModule(args.contract, args.resultData)) {\n return {\n result: \"inconclusive\",\n rationale: `Sentry result targeted ${payload.moduleName}, not ${config.module}.`,\n };\n }\n\n const conditionSatisfied = payload.incidentCount === 0;\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Sentry reported zero incidents for ${config.module} over ${config.windowDays} day(s).`\n : `Sentry reported ${payload.incidentCount} incident(s) for ${config.module} over ${config.windowDays} day(s).`,\n data: {\n incidentCount: payload.incidentCount,\n module: config.module,\n windowDays: config.windowDays,\n },\n };\n },\n};\n","/** Test-runner engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluator,\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asRecord,\n asString,\n deriveDirectionalResult,\n extractTextCandidates,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n parseJsonCandidate,\n patternMatchesPath,\n} from \"./shared\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype ParsedSuite = {\n failedTests: string[];\n filePath: string;\n passedTests: string[];\n};\n\ntype TestRunnerConfig = {\n runner: \"vitest\";\n testPattern: string;\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): TestRunnerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"test_runner requires evaluatorConfig with { testPattern, runner: \\\"vitest\\\" }.\"\n );\n }\n\n const testPattern = asString(record.testPattern);\n if (!testPattern) {\n throw new Error(\"test_runner requires a non-empty testPattern.\");\n }\n\n const runner = asString(record.runner);\n if (runner !== \"vitest\") {\n throw new Error(`Unsupported test runner: ${String(record.runner)}`);\n }\n\n return {\n runner,\n testPattern,\n };\n}\n\nfunction collectFailedTests(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n return [];\n }\n\n const fullName = asString(record.fullName);\n const title = asString(record.title);\n const label = fullName ?? title ?? \"unnamed test\";\n const status = asString(record.status);\n const state = asString(asRecord(record.result)?.state);\n const isFailed =\n status === \"failed\" ||\n status === \"fail\" ||\n state === \"failed\" ||\n state === \"fail\";\n\n const failures = isFailed ? [label] : [];\n for (const nestedKey of [\"assertionResults\", \"tests\", \"tasks\"]) {\n for (const nested of asArray(record[nestedKey])) {\n failures.push(...collectFailedTests(nested));\n }\n }\n\n return failures;\n}\n\nfunction collectPassedTests(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n return [];\n }\n\n const fullName = asString(record.fullName);\n const title = asString(record.title);\n const label = fullName ?? title ?? \"unnamed test\";\n const status = asString(record.status);\n const state = asString(asRecord(record.result)?.state);\n const isPassed = status === \"passed\" || state === \"passed\";\n\n const passed = isPassed ? [label] : [];\n for (const nestedKey of [\"assertionResults\", \"tests\", \"tasks\"]) {\n for (const nested of asArray(record[nestedKey])) {\n passed.push(...collectPassedTests(nested));\n }\n }\n\n return passed;\n}\n\nfunction parseSuite(value: unknown): ParsedSuite | null {\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n\n const filePath =\n asString(record.name) ??\n asString(record.file) ??\n asString(record.filePath) ??\n asString(record.filepath);\n if (!filePath) {\n return null;\n }\n\n return {\n failedTests: Array.from(new Set(collectFailedTests(record))),\n filePath: normalizeFilePath(filePath),\n passedTests: Array.from(new Set(collectPassedTests(record))),\n };\n}\n\nfunction parseVitestSuites(resultData: unknown): ParsedSuite[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const candidates = [\n envelope.report,\n envelope.data,\n envelope.stdout,\n envelope.output,\n ...extractTextCandidates(resultData),\n ];\n\n for (const candidate of candidates) {\n const parsed = parseJsonCandidate(candidate);\n const report = asRecord(parsed);\n if (!report) {\n continue;\n }\n\n const suites = asArray(report.testResults)\n .map(parseSuite)\n .filter((suite): suite is ParsedSuite => Boolean(suite));\n if (suites.length > 0) {\n return suites;\n }\n\n const fileSuites = asArray(report.files)\n .map(parseSuite)\n .filter((suite): suite is ParsedSuite => Boolean(suite));\n if (fileSuites.length > 0) {\n return fileSuites;\n }\n }\n\n return [];\n}\n\nfunction getMatchedSuites(\n contract: AnyContract,\n resultData: unknown\n): ParsedSuite[] {\n const config = parseConfig(contract.condition);\n return parseVitestSuites(resultData).filter((suite) =>\n patternMatchesPath(suite.filePath, config.testPattern)\n );\n}\n\nexport type EngineeringEpistemicEvaluator = EpistemicEvaluator & {\n matches(args: { contract: AnyContract; resultData: unknown }): boolean;\n};\n\nexport const testRunnerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"test_runner\",\n matches({ contract, resultData }) {\n return getMatchedSuites(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n const matchedSuites = getMatchedSuites(args.contract, args.resultData);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"test_runner requires Vitest JSON resultData.\",\n };\n }\n if (matchedSuites.length === 0) {\n return {\n result: \"inconclusive\",\n rationale: `No Vitest suites matched ${config.testPattern}.`,\n };\n }\n\n const failedTests = matchedSuites.flatMap((suite) => suite.failedTests);\n const passedTests = matchedSuites.flatMap((suite) => suite.passedTests);\n const conditionSatisfied = failedTests.length === 0;\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Vitest matched ${matchedSuites.length} suite(s) for ${config.testPattern}; all ${passedTests.length} test assertions passed.`\n : `Vitest matched ${matchedSuites.length} suite(s) for ${config.testPattern}; failing tests: ${failedTests.join(\", \")}.`,\n data: {\n runner: config.runner,\n testPattern: config.testPattern,\n matchedFiles: matchedSuites.map((suite) => suite.filePath),\n failedTests,\n passedTestCount: passedTests.length,\n },\n };\n },\n};\n","/** Typecheck-based engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n extractTextCandidates,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n somePatternMatches,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype ParsedDiagnostic = {\n code?: string;\n filePath: string | null;\n message: string;\n};\n\ntype TscCheckerConfig = {\n filePatterns: string[];\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): TscCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"tsc_checker requires evaluatorConfig with { filePatterns: string[] }.\"\n );\n }\n\n const filePatterns = asArray(record.filePatterns)\n .map(asString)\n .filter((pattern): pattern is string => Boolean(pattern));\n if (filePatterns.length === 0) {\n throw new Error(\"tsc_checker requires at least one file pattern.\");\n }\n\n return { filePatterns };\n}\n\nfunction parseStructuredDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ?? asRecord(envelope.data) ?? asRecord(resultData);\n if (!record) {\n return [];\n }\n\n return asArray(record.diagnostics).flatMap((entry): ParsedDiagnostic[] => {\n const diagnostic = asRecord(entry);\n if (!diagnostic) {\n return [];\n }\n const filePath =\n asString(diagnostic.filePath) ??\n asString(diagnostic.file) ??\n asString(asRecord(diagnostic.location)?.filePath) ??\n asString(asRecord(asRecord(diagnostic.location)?.path)?.file);\n const message = asString(diagnostic.message) ?? \"TypeScript error\";\n return [\n {\n code: asString(diagnostic.code) ?? undefined,\n filePath: filePath ? normalizeFilePath(filePath) : null,\n message,\n },\n ];\n });\n}\n\nfunction parseTextDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const diagnostics: ParsedDiagnostic[] = [];\n const patterns = [\n /^(.+?)\\((\\d+),(\\d+)\\): error TS(\\d+): (.+)$/gm,\n /^(.+?):(\\d+):(\\d+) - error TS(\\d+): (.+)$/gm,\n ];\n\n for (const text of extractTextCandidates(resultData)) {\n for (const pattern of patterns) {\n for (const match of text.matchAll(pattern)) {\n diagnostics.push({\n code: match[4],\n filePath: normalizeFilePath(match[1] ?? \"\"),\n message: match[5] ?? \"TypeScript error\",\n });\n }\n }\n }\n\n return diagnostics;\n}\n\nfunction parseDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const structured = parseStructuredDiagnostics(resultData);\n return structured.length > 0 ? structured : parseTextDiagnostics(resultData);\n}\n\nfunction getMatchedDiagnostics(\n contract: AnyContract,\n resultData: unknown\n): ParsedDiagnostic[] {\n const config = parseConfig(contract.condition);\n return parseDiagnostics(resultData).filter((diagnostic) =>\n somePatternMatches(diagnostic.filePath, config.filePatterns)\n );\n}\n\nexport const tscCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"tsc_checker\",\n matches({ contract, resultData }) {\n const envelope = normalizeToolResultEnvelope(resultData);\n const exitCode = asNumber(envelope.exitCode);\n if (exitCode === 0) {\n return true;\n }\n return getMatchedDiagnostics(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"tsc_checker requires TypeScript diagnostic resultData.\",\n };\n }\n\n const envelope = normalizeToolResultEnvelope(args.resultData);\n const exitCode = asNumber(envelope.exitCode);\n const matchedDiagnostics = getMatchedDiagnostics(args.contract, args.resultData);\n\n if (matchedDiagnostics.length === 0 && exitCode !== 0 && exitCode !== null) {\n return {\n result: \"inconclusive\",\n rationale:\n \"TypeScript reported errors, but none matched the configured file patterns.\",\n };\n }\n\n const conditionSatisfied =\n exitCode === 0 || (exitCode !== null && matchedDiagnostics.length === 0);\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `TypeScript reported no matching diagnostics for ${config.filePatterns.join(\", \")}.`\n : `TypeScript found ${matchedDiagnostics.length} matching diagnostic(s): ${matchedDiagnostics\n .map((diagnostic) =>\n diagnostic.filePath\n ? `${diagnostic.filePath}${diagnostic.code ? ` (TS${diagnostic.code})` : \"\"}`\n : diagnostic.message\n )\n .join(\", \")}.`,\n data: {\n exitCode,\n filePatterns: config.filePatterns,\n matchedDiagnostics,\n },\n };\n },\n};\n","import type { EpistemicEvaluator } from \"../epistemicContracts\";\nimport { getRegisteredEpistemicEvaluators } from \"../epistemicContracts\";\nimport { lintCheckerEvaluator } from \"./lintCheckerEvaluator\";\nimport { sentryCheckerEvaluator } from \"./sentryCheckerEvaluator\";\nimport { testRunnerEvaluator } from \"./testRunnerEvaluator\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\nimport { tscCheckerEvaluator } from \"./tscCheckerEvaluator\";\n\nexport const ENGINEERING_EPISTEMIC_EVALUATORS: EngineeringEpistemicEvaluator[] =\n [\n testRunnerEvaluator,\n tscCheckerEvaluator,\n lintCheckerEvaluator,\n sentryCheckerEvaluator,\n ];\n\nexport const ENGINEERING_EVALUATOR_NAMES = new Set(\n ENGINEERING_EPISTEMIC_EVALUATORS.map((evaluator) => evaluator.name)\n);\n\nexport function getEngineeringEpistemicEvaluator(\n name: string\n): EngineeringEpistemicEvaluator | undefined {\n return ENGINEERING_EPISTEMIC_EVALUATORS.find(\n (evaluator) => evaluator.name === name\n );\n}\n\nexport function registerAllEngineeringEvaluators(\n registerEvaluator: (evaluator: EpistemicEvaluator) => void\n): void {\n for (const evaluator of ENGINEERING_EPISTEMIC_EVALUATORS) {\n registerEvaluator(evaluator);\n }\n}\n\nexport { lintCheckerEvaluator } from \"./lintCheckerEvaluator\";\nexport { sentryCheckerEvaluator } from \"./sentryCheckerEvaluator\";\nexport { testRunnerEvaluator } from \"./testRunnerEvaluator\";\nexport { tscCheckerEvaluator } from \"./tscCheckerEvaluator\";\n\nexport const RESEARCH_EVALUATOR_NAMES = [\n \"market_index_comparator\",\n \"metric_checker\",\n \"reference_check_counter\",\n \"temporal_deadline\",\n] as const;\n\nexport type ResearchEvaluatorName = (typeof RESEARCH_EVALUATOR_NAMES)[number];\n\nexport function registerAllResearchEvaluators(): ResearchEvaluatorName[] {\n const registered = new Set(getRegisteredEpistemicEvaluators());\n return RESEARCH_EVALUATOR_NAMES.filter((name) => registered.has(name));\n}\n","/** Convex queries and mutations for epistemic contract lifecycle management. */\nimport { v } from \"convex/values\";\nimport { checkProjectAccess } from \"@lucern/access-control/access\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internalMutation, mutation, query } from \"./convex\";\nimport { applyBeliefConfidenceChange } from \"./epistemicBeliefs\";\nimport {\n buildComparisonRationale,\n buildEvidentialRationale,\n compareMetricValue,\n createInheritedContractRecord,\n deriveContractModulationPlan,\n deriveContractStatus,\n getEvaluatorInputRecord,\n normalizeEvidentialAction,\n parseComparisonOperator,\n parseEvidentialEvaluatorConfig,\n parseMarketIndexComparatorConfig,\n parseMetricCheckerConfig,\n parseNumericThreshold,\n parseReferenceCheckCounterConfig,\n parseTemporalDeadlineConfig,\n pickFiniteNumber,\n resolveComparisonResult,\n type EpistemicContractEvaluationResult,\n type EpistemicContractRecord,\n} from \"./epistemicContractHelpers\";\nimport {\n ENGINEERING_EPISTEMIC_EVALUATORS,\n ENGINEERING_EVALUATOR_NAMES,\n getEngineeringEpistemicEvaluator,\n} from \"./evaluators\";\nimport { generateGlobalId } from \"./globalId\";\n\ntype BeliefNodeDoc = {\n _id: Id<\"epistemicNodes\">;\n nodeType: \"belief\";\n canonicalText: string;\n projectId?: string;\n topicId?: Id<\"topics\"> | string;\n confidence?: number;\n status?: string;\n [key: string]: unknown;\n};\n\ntype ContractDoc = EpistemicContractRecord<\n Id<\"epistemicNodes\">,\n Id<\"topics\"> | string | undefined\n> & {\n _id: string;\n _creationTime: number;\n};\n\ntype ContractEvaluationDoc = {\n contractId: string;\n beliefNodeId: Id<\"epistemicNodes\">;\n result: EpistemicContractEvaluationResult;\n evaluatedAt: number;\n evaluator: string;\n trigger: string;\n resultData?: unknown;\n modulationApplied: boolean;\n confidenceDelta?: number;\n confidenceBefore?: number;\n confidenceAfter?: number;\n beliefConfidenceId?: Id<\"beliefConfidence\">;\n modulationRationale?: string;\n topicId?: Id<\"topics\"> | string;\n _id: string;\n _creationTime: number;\n};\n\ntype EvidenceEdgeDoc = {\n fromNodeId: Id<\"epistemicNodes\">;\n weight?: number;\n updatedAt?: number;\n createdAt?: number;\n _creationTime?: number;\n};\n\ntype EvidenceNodeDoc = {\n _id: Id<\"epistemicNodes\">;\n nodeType: string;\n status?: string;\n metadata?: unknown;\n};\n\nexport type EpistemicEvaluatorResult = {\n result: EpistemicContractEvaluationResult;\n confidence?: number;\n data?: unknown;\n rationale: string;\n};\n\nexport type EpistemicEvaluatorContext = {\n belief: BeliefNodeDoc;\n contract: ContractDoc;\n ctx: MutationCtx;\n now: number;\n resultData?: unknown;\n trigger: string;\n inputData?: unknown;\n};\n\nexport type EpistemicEvaluator = {\n name: string;\n evaluate(\n args: EpistemicEvaluatorContext\n ): Promise<EpistemicEvaluatorResult> | EpistemicEvaluatorResult;\n};\n\ntype ContractReadCtx = MutationCtx | QueryCtx;\n\ntype ContradictionStatusCounts = {\n activeCount: number;\n resolvedCount: number;\n};\n\ntype EvidenceFreshness = {\n newestAgeMs: number | null;\n oldestAgeMs: number | null;\n newestEdgeAt: number | null;\n oldestEdgeAt: number | null;\n edgeCount: number;\n};\n\ntype EvidentialMetric =\n | \"evidence_count\"\n | \"contradiction_status\"\n | \"edge_freshness\"\n | \"dependent_count\";\n\ntype EvidentialOperator = \"gte\" | \"lte\" | \"eq\" | \"gt\" | \"lt\";\n\ntype EvidentialAction = \"modulate_confidence\" | \"flag_review\" | \"archive\";\n\ntype EvidentialEvaluatorConfig = {\n metric: EvidentialMetric;\n operator: EvidentialOperator;\n threshold: number;\n action?: EvidentialAction;\n actionParams?: {\n targetConfidence?: number;\n rationale?: string;\n };\n};\n\ntype EvidentialMetricSnapshot = {\n metric: EvidentialMetric;\n value: number | null;\n data: Record<string, unknown>;\n};\n\ntype MetricCheckerEvaluatorConfig = {\n metric?: string;\n operator: EvidentialOperator;\n threshold: number;\n observedValue?: number;\n currentValue?: number;\n metricValue?: number;\n unit?: string;\n};\n\ntype ReferenceCheckCounterConfig = {\n tag: string;\n operator: EvidentialOperator;\n threshold: number;\n caseSensitive?: boolean;\n};\n\ntype TemporalDeadlineEvaluatorConfig = {\n label?: string;\n completed?: boolean;\n completedAt?: number;\n observedAt?: number;\n satisfiedAt?: number;\n achievedAt?: number;\n};\n\ntype MarketIndexComparatorConfig = {\n subject?: string;\n subjectValue?: number;\n primaryValue?: number;\n benchmark?: string;\n benchmarkValue?: number;\n comparisonValue?: number;\n operator: EvidentialOperator;\n threshold: number;\n};\n\ntype ContractEvaluationExecution = {\n evaluationId: string;\n result: EpistemicContractEvaluationResult;\n status: ContractDoc[\"status\"];\n confidenceBefore: number;\n confidenceAfter: number;\n rationale: string;\n data?: unknown;\n currentConfidence: number;\n};\n\ntype TriggerBatchResult = {\n totalContracts: number;\n processedCount: number;\n overflowCount: number;\n scheduledOverflow: boolean;\n batchSize: number;\n executionTimeMs: number;\n trigger: string;\n results: Array<{\n contractId: string;\n result: EpistemicContractEvaluationResult;\n status: ContractDoc[\"status\"];\n confidenceAfter: number;\n }>;\n};\n\nconst evaluatorRegistry = new Map<string, EpistemicEvaluator>();\nconst BUILT_IN_EVIDENTIAL_EVALUATOR = \"evidential\";\nconst BUILT_IN_EVIDENTIAL_ALIASES = new Set([\n BUILT_IN_EVIDENTIAL_EVALUATOR,\n \"built_in_evidential\",\n \"builtin_evidential\",\n]);\nconst BUILT_IN_METRIC_CHECKER = \"metric_checker\";\nconst BUILT_IN_REFERENCE_CHECK_COUNTER = \"reference_check_counter\";\nconst BUILT_IN_TEMPORAL_DEADLINE = \"temporal_deadline\";\nconst BUILT_IN_MARKET_INDEX_COMPARATOR = \"market_index_comparator\";\nconst MAX_CONTRACT_EVALUATION_BATCH_SIZE = 50;\nconst ACTIVE_CONTRADICTION_STATUSES = new Set([\n \"unresolved\",\n \"investigating\",\n \"accepted_as_permanent\",\n]);\nconst DEPENDENT_EDGE_TYPES = new Set([\n \"depends_on\",\n]);\n\nfunction classifyContradictionStatus(status: unknown): \"active\" | \"resolved\" {\n if (typeof status !== \"string\") {\n return \"active\";\n }\n\n if (ACTIVE_CONTRADICTION_STATUSES.has(status)) {\n return \"active\";\n }\n\n if (\n status === \"resolved_support\" ||\n status === \"resolved_contra\" ||\n status === \"belief_forked\"\n ) {\n return \"resolved\";\n }\n\n return \"resolved\";\n}\n\nfunction getEdgeTimestamp(edge: {\n updatedAt?: unknown;\n createdAt?: unknown;\n _creationTime?: unknown;\n}): number | null {\n if (typeof edge.updatedAt === \"number\") {\n return edge.updatedAt;\n }\n if (typeof edge.createdAt === \"number\") {\n return edge.createdAt;\n }\n if (typeof edge._creationTime === \"number\") {\n return edge._creationTime;\n }\n return null;\n}\n\nasync function getEvidenceLinks(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<Array<{ edge: EvidenceEdgeDoc; node: EvidenceNodeDoc }>> {\n const edges = await (ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", beliefNodeId).eq(\"edgeType\", \"informs\")\n )\n .collect() as Promise<EvidenceEdgeDoc[]>);\n\n if (edges.length === 0) {\n return [];\n }\n\n const nodes = await Promise.all(\n edges.map((edge) => ctx.db.get(edge.fromNodeId))\n );\n return edges.flatMap((edge, index) => {\n const node = nodes[index] as EvidenceNodeDoc | null;\n if (!node || node.nodeType !== \"evidence\" || node.status === \"archived\") {\n return [];\n }\n return [{ edge, node }];\n });\n}\n\nfunction getEvidenceTags(node: EvidenceNodeDoc): string[] {\n const metadata =\n node.metadata && typeof node.metadata === \"object\"\n ? (node.metadata as Record<string, unknown>)\n : null;\n const tags = metadata?.tags;\n if (!Array.isArray(tags)) {\n return [];\n }\n return tags.filter((tag): tag is string => typeof tag === \"string\");\n}\n\nasync function computeEvidenceCountMetric(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<number> {\n return (await getEvidenceLinks(ctx, beliefNodeId)).length;\n}\n\nasync function computeTaggedEvidenceCount(args: {\n ctx: ContractReadCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n tag: string;\n caseSensitive?: boolean;\n}): Promise<{ count: number; matchedEvidenceIds: string[] }> {\n const expectedTag = args.caseSensitive ? args.tag : args.tag.toLowerCase();\n const matchedEvidenceIds = (await getEvidenceLinks(args.ctx, args.beliefNodeId))\n .filter(({ node }) =>\n getEvidenceTags(node).some((tag) =>\n (args.caseSensitive ? tag : tag.toLowerCase()) === expectedTag\n )\n )\n .map(({ node }) => String(node._id));\n\n return {\n count: matchedEvidenceIds.length,\n matchedEvidenceIds,\n };\n}\n\nasync function computeContradictionCounts(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<ContradictionStatusCounts> {\n const contradictions = await ((ctx.db as any)\n .query(\"contradictions\")\n .withIndex(\"by_beliefId\", (q: any) => q.eq(\"beliefId\", beliefNodeId))\n .collect() as Promise<\n Array<{ resolutionStatus?: string; status?: string }>\n >);\n\n return contradictions.reduce<ContradictionStatusCounts>(\n (counts, contradiction) => {\n const status =\n contradiction.resolutionStatus ?? contradiction.status ?? \"unresolved\";\n if (classifyContradictionStatus(status) === \"active\") {\n counts.activeCount += 1;\n } else {\n counts.resolvedCount += 1;\n }\n return counts;\n },\n { activeCount: 0, resolvedCount: 0 }\n );\n}\n\nasync function computeEvidenceFreshness(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">,\n now = Date.now()\n): Promise<EvidenceFreshness> {\n const timestamps = (await getEvidenceLinks(ctx, beliefNodeId))\n .map(({ edge }) => getEdgeTimestamp(edge))\n .filter((value): value is number => value !== null);\n\n if (timestamps.length === 0) {\n return {\n newestAgeMs: null,\n oldestAgeMs: null,\n newestEdgeAt: null,\n oldestEdgeAt: null,\n edgeCount: 0,\n };\n }\n\n const newestEdgeAt = Math.max(...timestamps);\n const oldestEdgeAt = Math.min(...timestamps);\n\n return {\n newestAgeMs: Math.max(0, now - newestEdgeAt),\n oldestAgeMs: Math.max(0, now - oldestEdgeAt),\n newestEdgeAt,\n oldestEdgeAt,\n edgeCount: timestamps.length,\n };\n}\n\nasync function computeDependentBeliefCount(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<number> {\n const incomingEdges = await (ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q) => q.eq(\"toNodeId\", beliefNodeId))\n .collect() as Promise<\n Array<{ fromNodeId: Id<\"epistemicNodes\">; edgeType: string }>\n >);\n\n const dependencyEdges = incomingEdges.filter((edge) =>\n DEPENDENT_EDGE_TYPES.has(edge.edgeType)\n );\n if (dependencyEdges.length === 0) {\n return 0;\n }\n\n const dependentBeliefs = await Promise.all(\n dependencyEdges.map((edge) => ctx.db.get(edge.fromNodeId))\n );\n const uniqueBeliefIds = new Set<string>();\n\n for (const node of dependentBeliefs) {\n if (\n node &&\n node.nodeType === \"belief\" &&\n node.status !== \"archived\" &&\n node.status !== \"deleted\"\n ) {\n uniqueBeliefIds.add(String(node._id));\n }\n }\n\n return uniqueBeliefIds.size;\n}\n\nasync function snapshotEvidentialMetric(args: {\n ctx: ContractReadCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n metric: EvidentialMetric;\n now: number;\n}): Promise<EvidentialMetricSnapshot> {\n switch (args.metric) {\n case \"evidence_count\": {\n const count = await computeEvidenceCountMetric(\n args.ctx,\n args.beliefNodeId\n );\n return {\n metric: args.metric,\n value: count,\n data: { evidenceCount: count },\n };\n }\n case \"contradiction_status\": {\n const counts = await computeContradictionCounts(\n args.ctx,\n args.beliefNodeId\n );\n return {\n metric: args.metric,\n value: counts.activeCount,\n data: counts,\n };\n }\n case \"edge_freshness\": {\n const freshness = await computeEvidenceFreshness(\n args.ctx,\n args.beliefNodeId,\n args.now\n );\n return {\n metric: args.metric,\n value: freshness.newestAgeMs,\n data: freshness,\n };\n }\n case \"dependent_count\": {\n const count = await computeDependentBeliefCount(\n args.ctx,\n args.beliefNodeId\n );\n return {\n metric: args.metric,\n value: count,\n data: { dependentCount: count },\n };\n }\n default:\n return {\n metric: args.metric,\n value: null,\n data: {},\n };\n }\n}\n\n\nasync function evaluateBuiltInEvidentialContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseEvidentialEvaluatorConfig(\n args.contract.condition.evaluatorConfig\n );\n const snapshot = await snapshotEvidentialMetric({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n metric: config.metric,\n now: args.now,\n });\n\n const comparisonSatisfied =\n snapshot.value !== null &&\n compareMetricValue(config.operator, snapshot.value, config.threshold);\n const result =\n args.contract.direction === \"falsifies\"\n ? comparisonSatisfied\n ? \"disconfirmed\"\n : \"confirmed\"\n : comparisonSatisfied\n ? \"confirmed\"\n : \"disconfirmed\";\n\n return {\n result,\n rationale: buildEvidentialRationale({\n config,\n snapshot,\n comparisonSatisfied,\n result,\n }),\n data: {\n ...snapshot.data,\n metric: config.metric,\n observedValue: snapshot.value,\n operator: config.operator,\n threshold: config.threshold,\n action: config.action ?? \"modulate_confidence\",\n actionParams: config.actionParams,\n },\n };\n}\n\nasync function evaluateMetricCheckerContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseMetricCheckerConfig(args.contract.condition.evaluatorConfig);\n const input = getEvaluatorInputRecord(args.inputData, \"metricData\");\n const metric =\n typeof input.metric === \"string\" && input.metric.length > 0\n ? input.metric\n : config.metric;\n const observedValue =\n pickFiniteNumber(input, [\n \"observedValue\",\n \"currentValue\",\n \"metricValue\",\n \"value\",\n ]) ??\n config.observedValue ??\n config.currentValue ??\n config.metricValue ??\n null;\n if (observedValue === null) {\n return {\n result: \"inconclusive\",\n rationale: `metric_checker is awaiting data for ${metric ?? args.contract.condition.expression}.`,\n data: {\n metric,\n observedValue: null,\n operator: config.operator,\n threshold: config.threshold,\n unit: config.unit,\n },\n };\n }\n\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n observedValue,\n config.threshold\n );\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: metric ?? \"metric\",\n observedValue,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n unit: config.unit,\n }),\n data: {\n metric,\n observedValue,\n operator: config.operator,\n threshold: config.threshold,\n unit: config.unit,\n },\n };\n}\n\nasync function evaluateReferenceCheckCounterContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseReferenceCheckCounterConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"referenceCheckData\");\n const tag =\n typeof input.tag === \"string\" && input.tag.trim().length > 0\n ? input.tag.trim()\n : config.tag;\n const snapshot = await computeTaggedEvidenceCount({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n tag,\n caseSensitive: config.caseSensitive,\n });\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n snapshot.count,\n config.threshold\n );\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: `reference checks tagged \"${tag}\"`,\n observedValue: snapshot.count,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n }),\n data: {\n tag,\n observedValue: snapshot.count,\n referenceCheckCount: snapshot.count,\n matchedEvidenceIds: snapshot.matchedEvidenceIds,\n operator: config.operator,\n threshold: config.threshold,\n caseSensitive: config.caseSensitive ?? false,\n },\n };\n}\n\nasync function evaluateTemporalDeadlineContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n if (\n typeof args.contract.deadline !== \"number\" ||\n !Number.isFinite(args.contract.deadline)\n ) {\n throw new Error(\n \"temporal_deadline requires contract.deadline to be set to a finite timestamp.\"\n );\n }\n\n const config = parseTemporalDeadlineConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"temporalData\");\n const label =\n (typeof input.label === \"string\" && input.label.length > 0\n ? input.label\n : config.label) ??\n args.contract.title ??\n args.contract.condition.expression;\n const completedAt =\n pickFiniteNumber(input, [\n \"completedAt\",\n \"observedAt\",\n \"satisfiedAt\",\n \"achievedAt\",\n ]) ??\n config.completedAt ??\n config.observedAt ??\n config.satisfiedAt ??\n config.achievedAt;\n const completed =\n input.completed === true || config.completed === true || completedAt !== undefined;\n\n if (completed) {\n if (completedAt !== undefined && completedAt > args.contract.deadline) {\n return {\n result: \"expired\",\n rationale: `${label} completed at ${completedAt}, after deadline ${args.contract.deadline}.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: true,\n completedAt,\n missedDeadline: true,\n overdueByMs: completedAt - args.contract.deadline,\n },\n };\n }\n\n const result =\n args.contract.direction === \"falsifies\" ? \"disconfirmed\" : \"confirmed\";\n return {\n result,\n rationale: `${label} completed before deadline ${args.contract.deadline}.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: true,\n completedAt: completedAt ?? null,\n missedDeadline: false,\n },\n };\n }\n\n if (args.now > args.contract.deadline) {\n return {\n result: \"expired\",\n rationale: `${label} missed deadline ${args.contract.deadline}; temporal contract expired.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: false,\n overdueByMs: args.now - args.contract.deadline,\n },\n };\n }\n\n return {\n result: \"inconclusive\",\n rationale: `${label} is still before deadline ${args.contract.deadline}; awaiting outcome.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: false,\n timeRemainingMs: args.contract.deadline - args.now,\n },\n };\n}\n\nasync function evaluateMarketIndexComparatorContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseMarketIndexComparatorConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"marketIndexData\");\n const subject =\n typeof input.subject === \"string\" && input.subject.length > 0\n ? input.subject\n : config.subject;\n const benchmark =\n typeof input.benchmark === \"string\" && input.benchmark.length > 0\n ? input.benchmark\n : config.benchmark;\n const subjectValue =\n pickFiniteNumber(input, [\"subjectValue\", \"primaryValue\", \"leftValue\"]) ??\n config.subjectValue ??\n config.primaryValue ??\n null;\n const benchmarkValue =\n pickFiniteNumber(input, [\n \"benchmarkValue\",\n \"comparisonValue\",\n \"rightValue\",\n ]) ??\n config.benchmarkValue ??\n config.comparisonValue ??\n null;\n\n if (subjectValue === null || benchmarkValue === null) {\n return {\n result: \"inconclusive\",\n rationale: \"market_index_comparator is awaiting both subject and benchmark values.\",\n data: {\n subject,\n subjectValue,\n benchmark,\n benchmarkValue,\n operator: config.operator,\n threshold: config.threshold,\n },\n };\n }\n\n if (benchmarkValue === 0) {\n throw new Error(\n \"market_index_comparator cannot compare against a zero benchmark value.\"\n );\n }\n\n const differentialPercent =\n ((subjectValue - benchmarkValue) / Math.abs(benchmarkValue)) * 100;\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n differentialPercent,\n config.threshold\n );\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: `${subject ?? \"subject\"} vs ${benchmark ?? \"benchmark\"} differential`,\n observedValue: differentialPercent,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n unit: \"%\",\n }),\n data: {\n subject,\n subjectValue,\n benchmark,\n benchmarkValue,\n differentialPercent,\n operator: config.operator,\n threshold: config.threshold,\n },\n };\n}\n\nfunction ensureBuiltInEvaluators(): void {\n for (const name of BUILT_IN_EVIDENTIAL_ALIASES) {\n if (evaluatorRegistry.has(name)) {\n continue;\n }\n evaluatorRegistry.set(name, {\n name,\n evaluate: evaluateBuiltInEvidentialContract,\n });\n }\n\n for (const evaluator of ENGINEERING_EPISTEMIC_EVALUATORS) {\n if (evaluatorRegistry.has(evaluator.name)) {\n continue;\n }\n evaluatorRegistry.set(evaluator.name, evaluator);\n }\n\n const researchEvaluators: Array<[string, EpistemicEvaluator[\"evaluate\"]]> = [\n [BUILT_IN_METRIC_CHECKER, evaluateMetricCheckerContract],\n [\n BUILT_IN_REFERENCE_CHECK_COUNTER,\n evaluateReferenceCheckCounterContract,\n ],\n [BUILT_IN_TEMPORAL_DEADLINE, evaluateTemporalDeadlineContract],\n [\n BUILT_IN_MARKET_INDEX_COMPARATOR,\n evaluateMarketIndexComparatorContract,\n ],\n ];\n\n for (const [name, evaluate] of researchEvaluators) {\n if (evaluatorRegistry.has(name)) {\n continue;\n }\n evaluatorRegistry.set(name, { name, evaluate });\n }\n}\n\nasync function executeContractEvaluation(args: {\n ctx: MutationCtx;\n belief: BeliefNodeDoc;\n contract: ContractDoc;\n now: number;\n trigger: string;\n inputData?: unknown;\n authenticatedUserId: string;\n currentConfidence?: number;\n resultData?: unknown;\n}): Promise<ContractEvaluationExecution> {\n ensureBuiltInEvaluators();\n\n const evaluator = evaluatorRegistry.get(args.contract.condition.evaluator);\n let evaluation: EpistemicEvaluatorResult;\n if (evaluator) {\n try {\n evaluation = await evaluator.evaluate({\n belief: args.belief,\n contract: args.contract,\n ctx: args.ctx,\n now: args.now,\n resultData: args.resultData,\n trigger: args.trigger,\n inputData: args.inputData,\n });\n } catch (error) {\n evaluation = {\n result: \"error\",\n rationale:\n error instanceof Error ? error.message : \"Unknown evaluator error.\",\n };\n }\n } else {\n evaluation = {\n result: \"error\",\n rationale: `No epistemic evaluator registered for \"${args.contract.condition.evaluator}\".`,\n };\n }\n\n const confidenceBefore =\n typeof args.currentConfidence === \"number\"\n ? args.currentConfidence\n : typeof args.belief.confidence === \"number\"\n ? args.belief.confidence\n : 0.5;\n const modulationPlan = deriveContractModulationPlan({\n currentConfidence: confidenceBefore,\n modulation: args.contract.modulation,\n result: evaluation.result,\n resultConfidence: evaluation.confidence,\n });\n\n let beliefConfidenceId: Id<\"beliefConfidence\"> | undefined;\n let confidenceAfter = confidenceBefore;\n if (modulationPlan) {\n // EK-7: Convert contract modulation to SL opinion.\n // Contract modulations are dogmatic (certainty=1) → u=0.\n const contractB = Math.max(0, Math.min(1, modulationPlan.confidenceAfter));\n const modulationResult = await applyBeliefConfidenceChange(args.ctx, {\n nodeId: args.contract.beliefNodeId,\n belief: contractB,\n disbelief: 1 - contractB,\n uncertainty: 0,\n baseRate: 0.5,\n trigger: modulationPlan.trigger,\n rationale: `Epistemic contract \"${args.contract.title}\" ${evaluation.result}: ${evaluation.rationale}`,\n authenticatedUserId: args.authenticatedUserId,\n });\n beliefConfidenceId = modulationResult.beliefConfidenceId;\n confidenceAfter =\n typeof modulationResult.newConfidence === \"number\"\n ? modulationResult.newConfidence\n : modulationPlan.confidenceAfter;\n }\n\n const evaluationId = await (args.ctx.db as any).insert(\n \"contractEvaluations\",\n {\n contractId: args.contract.contractId,\n beliefNodeId: args.contract.beliefNodeId,\n result: evaluation.result,\n evaluatedAt: args.now,\n evaluator: args.contract.condition.evaluator,\n trigger: args.trigger,\n resultData: evaluation.data,\n modulationApplied: Boolean(modulationPlan),\n confidenceDelta: modulationPlan?.confidenceDelta,\n confidenceBefore: modulationPlan?.confidenceBefore,\n confidenceAfter: modulationPlan ? confidenceAfter : undefined,\n beliefConfidenceId,\n modulationRationale: evaluation.rationale,\n topicId: args.contract.topicId,\n } as any\n );\n\n const nextStatus = deriveContractStatus(\n evaluation.result,\n args.contract.status\n );\n await args.ctx.db.patch(\n args.contract._id as any,\n {\n status: nextStatus,\n lastEvaluatedAt: args.now,\n evaluationCount: (args.contract.evaluationCount ?? 0) + 1,\n updatedAt: args.now,\n } as any\n );\n\n return {\n evaluationId,\n result: evaluation.result,\n status: nextStatus,\n confidenceBefore,\n confidenceAfter,\n rationale: evaluation.rationale,\n data: evaluation.data,\n currentConfidence: confidenceAfter,\n };\n}\n\nfunction resolveSchedulesForTrigger(trigger: string): Set<string> {\n if (trigger === \"evidence_added\") {\n return new Set([\"on_evidence\", \"event_driven\"]);\n }\n if (trigger === \"periodic\") {\n return new Set([\"periodic\"]);\n }\n if (trigger === \"manual\") {\n return new Set([\"on_demand\", \"event_driven\"]);\n }\n return new Set([\"event_driven\"]);\n}\n\nasync function loadContractsForBelief(args: {\n ctx: MutationCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n}): Promise<ContractDoc[]> {\n return await ((args.ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q: any) => q.eq(\"beliefNodeId\", args.beliefNodeId))\n .collect() as Promise<ContractDoc[]>);\n}\n\nasync function loadContractsForTrigger(args: {\n ctx: MutationCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n trigger: string;\n contractIds?: string[];\n}): Promise<ContractDoc[]> {\n const contracts = await loadContractsForBelief(args);\n\n ensureBuiltInEvaluators();\n const allowedSchedules = resolveSchedulesForTrigger(args.trigger);\n const contractIdFilter =\n args.contractIds && args.contractIds.length > 0\n ? new Set(args.contractIds)\n : null;\n\n return contracts.filter((contract) => {\n if (contract.status === \"archived\") {\n return false;\n }\n if (contract.conditionType === \"composite\") {\n return false;\n }\n if (!evaluatorRegistry.has(contract.condition.evaluator)) {\n return false;\n }\n if (contractIdFilter) {\n return contractIdFilter.has(contract.contractId);\n }\n return allowedSchedules.has(contract.evaluationSchedule);\n });\n}\n\nasync function evaluateContractsForTriggerBatch(args: {\n ctx: MutationCtx;\n belief: BeliefNodeDoc;\n trigger: string;\n inputData?: unknown;\n authenticatedUserId: string;\n contractIds?: string[];\n maxBatchSize?: number;\n}): Promise<TriggerBatchResult> {\n const startedAt = Date.now();\n const contracts = await loadContractsForTrigger({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n trigger: args.trigger,\n contractIds: args.contractIds,\n });\n const batchLimit = Math.max(\n 1,\n Math.min(\n args.maxBatchSize ?? MAX_CONTRACT_EVALUATION_BATCH_SIZE,\n MAX_CONTRACT_EVALUATION_BATCH_SIZE\n )\n );\n const currentBatch = contracts.slice(0, batchLimit);\n const overflowContracts = contracts.slice(batchLimit);\n\n let runningConfidence =\n typeof args.belief.confidence === \"number\" ? args.belief.confidence : 0.5;\n const results: TriggerBatchResult[\"results\"] = [];\n\n for (const contract of currentBatch) {\n const evaluation = await executeContractEvaluation({\n ctx: args.ctx,\n belief: args.belief,\n contract,\n now: Date.now(),\n trigger: args.trigger,\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n currentConfidence: runningConfidence,\n });\n runningConfidence = evaluation.currentConfidence;\n args.belief.confidence = runningConfidence;\n results.push({\n contractId: contract.contractId,\n result: evaluation.result,\n status: evaluation.status,\n confidenceAfter: evaluation.confidenceAfter,\n });\n }\n\n if (overflowContracts.length > 0) {\n await args.ctx.scheduler.runAfter(\n 0,\n \"epistemicContracts.processContractEvaluationOverflow\" as any,\n {\n beliefNodeId: args.belief._id,\n trigger: args.trigger,\n contractIds: overflowContracts.map((contract) => contract.contractId),\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n maxBatchSize: batchLimit,\n }\n );\n }\n\n const executionTimeMs = Date.now() - startedAt;\n console.info(\"[epistemicContracts] processed contract evaluation batch\", {\n beliefNodeId: String(args.belief._id),\n trigger: args.trigger,\n batchSize: currentBatch.length,\n overflowCount: overflowContracts.length,\n executionTimeMs,\n });\n\n return {\n totalContracts: contracts.length,\n processedCount: currentBatch.length,\n overflowCount: overflowContracts.length,\n scheduledOverflow: overflowContracts.length > 0,\n batchSize: currentBatch.length,\n executionTimeMs,\n trigger: args.trigger,\n results,\n };\n}\n\nexport function clearEpistemicEvaluators(): void {\n evaluatorRegistry.clear();\n ensureBuiltInEvaluators();\n}\n\nexport function registerEpistemicEvaluator(\n evaluator: EpistemicEvaluator\n): void {\n ensureBuiltInEvaluators();\n evaluatorRegistry.set(evaluator.name, evaluator);\n}\n\nexport function getRegisteredEpistemicEvaluators(): string[] {\n ensureBuiltInEvaluators();\n return Array.from(evaluatorRegistry.keys()).sort();\n}\n\nasync function requireAuth(ctx: MutationCtx | QueryCtx): Promise<string> {\n const userId = await getCurrentUserId(ctx as any);\n if (!userId) {\n throw new Error(\"Authentication required.\");\n }\n return userId;\n}\n\n// biome-ignore lint/suspicious/useAwait: delegates to requireAuth which is async in some ctx paths\nasync function resolveAuthenticatedUserId(\n ctx: MutationCtx | QueryCtx,\n explicitUserId?: string\n): Promise<string> {\n if (explicitUserId) {\n return explicitUserId;\n }\n return requireAuth(ctx);\n}\n\nasync function requireBeliefProjectAccess(\n ctx: MutationCtx | QueryCtx,\n belief: BeliefNodeDoc,\n userId: string\n): Promise<void> {\n if (!belief.projectId) {\n throw new Error(\"Belief has no project scope.\");\n }\n const hasAccess = await checkProjectAccess(\n ctx as any,\n belief.projectId,\n userId\n );\n if (!hasAccess) {\n throw new Error(\"Project access required.\");\n }\n}\n\nasync function requireTopicReadAccess(\n ctx: QueryCtx,\n beliefs: BeliefNodeDoc[],\n userId: string\n): Promise<void> {\n const projectIds = new Set<string>();\n\n for (const belief of beliefs) {\n if (!belief.projectId) {\n throw new Error(\"Belief has no project scope.\");\n }\n projectIds.add(belief.projectId);\n }\n\n for (const projectId of projectIds) {\n const hasAccess = await checkProjectAccess(ctx as any, projectId, userId);\n if (!hasAccess) {\n throw new Error(\"Project access required.\");\n }\n }\n}\n\nasync function getContractByContractId(\n ctx: MutationCtx | QueryCtx,\n contractId: string\n): Promise<ContractDoc | null> {\n return await ((ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_contractId\", (q: any) => q.eq(\"contractId\", contractId))\n .first() as Promise<ContractDoc | null>);\n}\n\nasync function getLatestEvaluation(\n ctx: MutationCtx | QueryCtx,\n contractId: string\n): Promise<ContractEvaluationDoc | null> {\n const evaluations = await ((ctx.db as any)\n .query(\"contractEvaluations\")\n .withIndex(\"by_contract_time\", (q: any) => q.eq(\"contractId\", contractId))\n .order(\"desc\")\n .take(1) as Promise<ContractEvaluationDoc[]>);\n\n return evaluations[0] ?? null;\n}\n\nexport const evaluateEvidenceCount = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await requireAuth(ctx);\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeEvidenceCountMetric(ctx, args.beliefNodeId);\n },\n});\n\nexport const evaluateContradictionStatus = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await requireAuth(ctx);\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeContradictionCounts(ctx, args.beliefNodeId);\n },\n});\n\nexport const evaluateEdgeFreshness = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await requireAuth(ctx);\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeEvidenceFreshness(ctx, args.beliefNodeId);\n },\n});\n\nexport const evaluateDependentBeliefCount = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await requireAuth(ctx);\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeDependentBeliefCount(ctx, args.beliefNodeId);\n },\n});\n\nexport const createEpistemicContract = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n title: v.string(),\n description: v.optional(v.string()),\n conditionType: v.union(\n v.literal(\"assertion\"),\n v.literal(\"temporal\"),\n v.literal(\"evidential\"),\n v.literal(\"threshold\"),\n v.literal(\"composite\")\n ),\n direction: v.union(v.literal(\"confirms\"), v.literal(\"falsifies\")),\n condition: v.object({\n expression: v.string(),\n evaluator: v.string(),\n evaluatorConfig: v.optional(v.any()),\n }),\n deadline: v.optional(v.number()),\n compositeOf: v.optional(v.array(v.string())),\n compositeOperator: v.optional(\n v.union(v.literal(\"all\"), v.literal(\"any\"), v.literal(\"majority\"))\n ),\n modulation: v.object({\n onConfirmed: v.object({\n delta: v.number(),\n ceiling: v.optional(v.number()),\n }),\n onDisconfirmed: v.object({\n delta: v.number(),\n floor: v.optional(v.number()),\n }),\n onExpired: v.optional(\n v.object({\n delta: v.number(),\n })\n ),\n onPartial: v.optional(\n v.object({\n threshold: v.number(),\n delta: v.number(),\n })\n ),\n }),\n evaluationSchedule: v.union(\n v.literal(\"on_demand\"),\n v.literal(\"on_evidence\"),\n v.literal(\"periodic\"),\n v.literal(\"event_driven\")\n ),\n periodicIntervalMs: v.optional(v.number()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n const now = Date.now();\n const contractId = generateGlobalId();\n\n const contractDoc = {\n beliefNodeId: args.beliefNodeId,\n contractId,\n title: args.title,\n description: args.description,\n conditionType: args.conditionType,\n direction: args.direction,\n condition: args.condition,\n deadline: args.deadline,\n compositeOf: args.compositeOf,\n compositeOperator: args.compositeOperator,\n modulation: args.modulation,\n evaluationSchedule: args.evaluationSchedule,\n periodicIntervalMs: args.periodicIntervalMs,\n status: \"active\" as const,\n lineageSource: \"declared\" as const,\n evaluationCount: 0,\n topicId: belief.topicId,\n createdAt: now,\n createdBy: userId,\n updatedAt: now,\n };\n\n const insertedId = await (ctx.db as any).insert(\n \"epistemicContracts\",\n contractDoc\n );\n return {\n contractId,\n id: insertedId,\n status: contractDoc.status,\n };\n },\n});\n\nexport const evaluateContract = mutation({\n args: {\n contractId: v.string(),\n resultData: v.optional(v.any()),\n trigger: v.optional(v.string()),\n inputData: v.optional(v.any()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const contract = await getContractByContractId(ctx, args.contractId);\n if (!contract) {\n throw new Error(`Contract not found: ${args.contractId}`);\n }\n if (contract.status === \"archived\") {\n throw new Error(\"Archived contracts cannot be evaluated.\");\n }\n\n const belief = (await ctx.db.get(\n contract.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found for contract.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n const evaluation = await executeContractEvaluation({\n ctx,\n belief,\n contract,\n now: Date.now(),\n resultData: args.resultData,\n trigger: args.trigger ?? \"manual\",\n inputData: args.inputData,\n authenticatedUserId: userId,\n });\n\n return {\n evaluationId: evaluation.evaluationId,\n result: evaluation.result,\n status: evaluation.status,\n confidenceBefore: evaluation.confidenceBefore,\n confidenceAfter: evaluation.confidenceAfter,\n rationale: evaluation.rationale,\n };\n },\n});\n\nexport const evaluateEngineeringContracts = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n testOutput: v.optional(v.any()),\n tscOutput: v.optional(v.any()),\n lintOutput: v.optional(v.any()),\n sentryData: v.optional(v.any()),\n trigger: v.optional(v.string()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n const trigger = args.trigger ?? \"event_driven\";\n const allowedSchedules = resolveSchedulesForTrigger(trigger);\n const payloadByEvaluator = new Map<string, unknown>([\n [\"test_runner\", args.testOutput],\n [\"tsc_checker\", args.tscOutput],\n [\"lint_checker\", args.lintOutput],\n [\"sentry_checker\", args.sentryData],\n ]);\n const contracts = (await loadContractsForBelief({\n ctx,\n beliefNodeId: args.beliefNodeId,\n })).filter((contract) => {\n if (contract.status === \"archived\") {\n return false;\n }\n if (!allowedSchedules.has(contract.evaluationSchedule)) {\n return false;\n }\n return ENGINEERING_EVALUATOR_NAMES.has(contract.condition.evaluator);\n });\n\n let runningConfidence =\n typeof belief.confidence === \"number\" ? belief.confidence : 0.5;\n const evaluations: Array<Record<string, unknown>> = [];\n\n for (const contract of contracts) {\n const resultData = payloadByEvaluator.get(contract.condition.evaluator);\n if (resultData === undefined) {\n continue;\n }\n\n const engineeringEvaluator = getEngineeringEpistemicEvaluator(\n contract.condition.evaluator\n );\n if (!engineeringEvaluator?.matches({ contract, resultData })) {\n continue;\n }\n\n const evaluation = await executeContractEvaluation({\n ctx,\n belief,\n contract,\n now: Date.now(),\n trigger,\n authenticatedUserId: userId,\n currentConfidence: runningConfidence,\n resultData,\n });\n runningConfidence = evaluation.currentConfidence;\n belief.confidence = runningConfidence;\n\n evaluations.push({\n contractId: contract.contractId,\n evaluator: contract.condition.evaluator,\n evaluationId: evaluation.evaluationId,\n result: evaluation.result,\n status: evaluation.status,\n confidenceBefore: evaluation.confidenceBefore,\n confidenceAfter: evaluation.confidenceAfter,\n rationale: evaluation.rationale,\n });\n }\n\n return {\n beliefNodeId: args.beliefNodeId,\n trigger,\n availableContracts: contracts.length,\n evaluatedContracts: evaluations.length,\n evaluations,\n };\n },\n});\n\nexport const evaluateContractsForTrigger = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n trigger: v.string(),\n inputData: v.optional(v.any()),\n maxBatchSize: v.optional(v.number()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n return await evaluateContractsForTriggerBatch({\n ctx,\n belief,\n trigger: args.trigger,\n inputData: args.inputData,\n authenticatedUserId: userId,\n maxBatchSize: args.maxBatchSize,\n });\n },\n});\n\nexport const processContractEvaluationOverflow = internalMutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n trigger: v.string(),\n contractIds: v.array(v.string()),\n inputData: v.optional(v.any()),\n authenticatedUserId: v.string(),\n maxBatchSize: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n\n return await evaluateContractsForTriggerBatch({\n ctx,\n belief,\n trigger: args.trigger,\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n contractIds: args.contractIds,\n maxBatchSize: args.maxBatchSize,\n });\n },\n});\n\nexport const getContractStatus = query({\n args: {\n beliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n contractId: v.optional(v.string()),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"satisfied\"),\n v.literal(\"violated\"),\n v.literal(\"expired\"),\n v.literal(\"suspended\"),\n v.literal(\"archived\")\n )\n ),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n\n let contracts: ContractDoc[] = [];\n if (args.contractId) {\n const contract = await getContractByContractId(ctx, args.contractId);\n contracts = contract ? [contract] : [];\n } else if (args.beliefNodeId) {\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n contracts = await ((ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q: any) =>\n q.eq(\"beliefNodeId\", args.beliefNodeId)\n )\n .collect() as Promise<ContractDoc[]>);\n }\n\n if (contracts.length > 0) {\n const contractBeliefDocs = await Promise.all(\n contracts.map((contract) => ctx.db.get(contract.beliefNodeId))\n );\n const contractBeliefs: BeliefNodeDoc[] = [];\n\n for (const belief of contractBeliefDocs) {\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n contractBeliefs.push(belief as BeliefNodeDoc);\n }\n\n await requireTopicReadAccess(ctx, contractBeliefs, userId);\n }\n\n if (args.status) {\n contracts = contracts.filter(\n (contract) => contract.status === args.status\n );\n }\n\n const rows = await Promise.all(\n contracts.map(async (contract) => ({\n ...contract,\n latestEvaluation: await getLatestEvaluation(ctx, contract.contractId),\n }))\n );\n\n return rows.sort((a, b) => b.createdAt - a.createdAt);\n },\n});\n\nexport const getContractCoverage = query({\n args: {\n topicId: v.string(),\n recentEvaluationLimit: v.optional(v.number()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const contracts = await ((ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_topic\", (q: any) => q.eq(\"topicId\", args.topicId))\n .collect() as Promise<ContractDoc[]>);\n\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const beliefs = await (ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n )\n .collect() as Promise<BeliefNodeDoc[]>);\n await requireTopicReadAccess(ctx, beliefs, userId);\n\n const recentEvaluationLimit = Math.max(\n 0,\n Math.min(args.recentEvaluationLimit ?? 5, 25)\n );\n const recentEvaluations =\n recentEvaluationLimit === 0\n ? []\n : (((await (ctx.db as any)\n .query(\"contractEvaluations\")\n .withIndex(\"by_topic_time\", (q: any) =>\n q.eq(\"topicId\", args.topicId)\n )\n .order(\"desc\")\n .take(recentEvaluationLimit)) as Promise<\n ContractEvaluationDoc[]\n >) ?? []);\n\n const contractBeliefIds = new Set(\n contracts\n .filter((contract) => contract.status !== \"archived\")\n .map((contract) => String(contract.beliefNodeId))\n );\n\n return {\n active: contracts.filter((contract) => contract.status === \"active\")\n .length,\n violated: contracts.filter((contract) => contract.status === \"violated\")\n .length,\n expired: contracts.filter((contract) => contract.status === \"expired\")\n .length,\n unboundHighConfidence: beliefs\n .filter(\n (belief) =>\n typeof belief.confidence === \"number\" &&\n belief.confidence >= 0.8 &&\n !contractBeliefIds.has(String(belief._id))\n )\n .map((belief) => ({\n nodeId: belief._id,\n canonicalText: belief.canonicalText,\n confidence: belief.confidence,\n })),\n recentEvaluations,\n };\n },\n});\n\nexport function inheritContractsForFork<\n TBeliefId = string,\n TTopicId = string | undefined,\n>(\n contracts: Array<{\n status: string;\n beliefNodeId: any;\n contractId: string;\n title: string;\n description?: string;\n conditionType: any;\n direction: any;\n condition: any;\n deadline?: number;\n compositeOf?: string[];\n compositeOperator?: any;\n modulation: any;\n evaluationSchedule: any;\n periodicIntervalMs?: number;\n createdAt: number;\n createdBy: string;\n updatedAt: number;\n }>,\n args: {\n beliefNodeId: TBeliefId;\n topicId?: TTopicId;\n createdBy: string;\n now: number;\n }\n) {\n return contracts\n .filter((contract) => contract.status !== \"archived\")\n .map((contract) => createInheritedContractRecord(contract as any, args));\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../access-control/src/convex.ts","../../access-control/src/topicProjectOverlay.ts","../../access-control/src/projectGrantsBridge.ts","../../access-control/src/resolvers.ts","../../access-control/src/principalContext.ts","../../access-control/src/access.ts","../../access-control/src/auth.ts","../../../packages/contracts/src/schema-helpers/validators.ts","../src/convex.ts","../../confidence/src/v1/operations/subjectiveLogic/index.ts","../../confidence/src/v1/operations/scoring.ts","../../confidence/src/v1/operations/contradiction/detectTupleContradiction.ts","../../confidence/src/v1/operations/dynamics/cascade.ts","../../confidence/src/v1/operations/dynamics/defeat.ts","../../confidence/src/v1/operations/contracts/epistemicContract.ts","../../access-control/src/audience.ts","../../access-control/src/audienceRegistry.ts","../../../packages/contracts/src/schema-helpers/enumValidation.ts","../src/beliefLifecycle.ts","../src/edges/contains.ts","../src/edges/utils.ts","../src/edges/contradicts.ts","../src/edges/dependsOn.ts","../src/edges/derivedFrom.ts","../src/edges/elaborates.ts","../src/edges/informs.ts","../src/edges/propagationTypes.ts","../src/edges/refutes.ts","../src/edges/supports.ts","../src/edges/tests.ts","../src/edges/index.ts","../../../packages/contracts/src/schema-helpers/spine/tables/epistemicNodes.ts","../src/topicScope.ts","../src/workspaceIsolation.ts","../src/confidencePropagationDispatch.ts","../src/embeddingTrigger.ts","../src/globalId.ts","../src/logicalRoleInference.ts","../src/topicProjectOverlay.ts","../src/resolvers.ts","../src/epistemicBeliefs.ts","../src/evaluators/shared.ts","../src/evaluators/lintCheckerEvaluator.ts","../src/evaluators/sentryCheckerEvaluator.ts","../src/evaluators/testRunnerEvaluator.ts","../src/evaluators/tscCheckerEvaluator.ts","../src/evaluators/index.ts","../src/epistemicContracts.ts"],"names":["resolvedUser","user","api","anyApi","componentsGeneric","internalMutationGeneric","internalQueryGeneric","mutationGeneric","queryGeneric","opinion","LEGACY_SCOPE_FIELD","v","normalizeScopeValue","readNonEmptyString","readStringArray","readMetadata","readLegacyProjectId","coerceVisibility","coerceStatus","mapProjectType","isProjectLikeTopic","resolveTopicDoc","materializeTopicProjectOverlay","resolveTopicProjectOverlay","listTopicProjectOverlays","isMissingLucernChildComponentError","defaultResolvers","resolverOverrides","clamp01","query","parseConfig","parseDiagnostics","getMatchedDiagnostics","BUILT_IN_EVIDENTIAL_EVALUATOR","BUILT_IN_EVIDENTIAL_ALIASES","BUILT_IN_METRIC_CHECKER","BUILT_IN_REFERENCE_CHECK_COUNTER","BUILT_IN_TEMPORAL_DEADLINE","BUILT_IN_MARKET_INDEX_COMPARATOR"],"mappings":"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","file":"epistemicContracts.js","sourcesContent":["import {\n actionGeneric,\n anyApi,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\nexport const api = anyApi as any;\nexport const components = componentsGeneric() as any;\nexport const internal = anyApi as any;\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> = any;\nexport type DataModel = any;\nexport type ActionCtx = any;\nexport type DatabaseReader = any;\nexport type DatabaseWriter = any;\nexport type MutationCtx = any;\nexport type QueryCtx = any;\n\nexport const action = actionGeneric as any;\nexport const httpAction = httpActionGeneric as any;\nexport const internalAction = internalActionGeneric as any;\nexport const internalMutation = internalMutationGeneric as any;\nexport const internalQuery = internalQueryGeneric as any;\nexport const mutation = mutationGeneric as any;\nexport const query = queryGeneric as any;\n","import { api } from \"./convex\";\n\ntype OverlayIdMode = \"legacy\" | \"topic\";\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype TopicDocLike = Record<string, unknown> & {\n _id: string;\n _creationTime?: number;\n globalId?: string;\n name?: string;\n description?: string;\n type?: string;\n tenantId?: string;\n workspaceId?: string;\n status?: string;\n visibility?: string;\n createdBy?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectOverlay = Record<string, unknown> & {\n _id: string;\n projectId: string;\n topicId: string;\n storageProjectId: string;\n legacyProjectId?: string;\n name: string;\n type: string;\n description?: string;\n ownerId: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n tags: string[];\n chatCount: number;\n artifactCount: number;\n lastActivityAt: number;\n _creationTime: number;\n createdAt: number;\n updatedAt: number;\n};\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readNonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction readMetadata(topic: TopicDocLike): Record<string, unknown> {\n return topic.metadata && typeof topic.metadata === \"object\"\n ? topic.metadata\n : {};\n}\n\nfunction readLegacyProjectId(\n value: Record<string, unknown> | null | undefined\n): string | undefined {\n if (!value) {\n return;\n }\n return readNonEmptyString(value[LEGACY_SCOPE_FIELD]);\n}\n\nfunction coerceVisibility(\n value: unknown\n): TopicProjectOverlay[\"visibility\"] | undefined {\n return value === \"private\" ||\n value === \"team\" ||\n value === \"firm\" ||\n value === \"external\" ||\n value === \"public\"\n ? value\n : undefined;\n}\n\nfunction coerceStatus(\n value: unknown\n): TopicProjectOverlay[\"status\"] | undefined {\n return value === \"active\" || value === \"archived\" || value === \"watching\"\n ? value\n : undefined;\n}\n\nfunction mapProjectType(\n topic: TopicDocLike,\n metadata: Record<string, unknown>\n): string {\n const explicit = readNonEmptyString(metadata.projectType);\n if (explicit) {\n return explicit;\n }\n if (topic.type === \"theme\") {\n return \"thematic\";\n }\n return readNonEmptyString(topic.type) || \"general\";\n}\n\nfunction isProjectLikeTopic(topic: TopicDocLike): boolean {\n const metadata = readMetadata(topic);\n return (\n topic.type === \"theme\" ||\n topic.type === \"thematic\" ||\n topic.type === \"deal\" ||\n topic.type === \"monitoring\" ||\n readLegacyProjectId(topic) !== undefined ||\n readNonEmptyString(metadata.projectType) !== undefined\n );\n}\n\nasync function resolveTopicDoc(\n ctx: any,\n scopeId: string\n): Promise<TopicDocLike | null> {\n if (ctx?.db && typeof ctx.db.get === \"function\") {\n try {\n const directTopic = (await ctx.db.get(scopeId as any)) as TopicDocLike | null;\n if (directTopic) {\n return directTopic;\n }\n } catch {\n // Not a direct topics-table id.\n }\n }\n\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.get as any, {\n id: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch {\n // Fall through to legacy-scope lookup.\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.getByLegacyScopeId as any, {\n projectId: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch {\n // Best-effort compat lookup only.\n }\n\n return null;\n}\n\nfunction materializeTopicProjectOverlay(\n topic: TopicDocLike,\n idMode: OverlayIdMode = \"legacy\"\n): TopicProjectOverlay {\n const metadata = readMetadata(topic);\n const topicId = String(topic._id);\n const legacyProjectId =\n readLegacyProjectId(topic) ||\n readLegacyProjectId(metadata) ||\n readNonEmptyString(metadata.legacyProjectId);\n const storageProjectId = legacyProjectId || topicId;\n const outwardId = idMode === \"topic\" ? topicId : storageProjectId;\n const visibility =\n coerceVisibility(topic.visibility) ||\n coerceVisibility(metadata.visibility) ||\n \"private\";\n const status =\n coerceStatus(topic.status) || coerceStatus(metadata.status) || \"active\";\n const createdAt =\n typeof topic.createdAt === \"number\"\n ? topic.createdAt\n : typeof topic._creationTime === \"number\"\n ? topic._creationTime\n : 0;\n const updatedAt =\n typeof topic.updatedAt === \"number\"\n ? topic.updatedAt\n : typeof metadata.updatedAt === \"number\"\n ? (metadata.updatedAt as number)\n : createdAt;\n\n return {\n ...metadata,\n _id: outwardId,\n projectId: outwardId,\n topicId,\n storageProjectId,\n legacyProjectId,\n name: readNonEmptyString(topic.name) || \"Untitled Theme\",\n type: mapProjectType(topic, metadata),\n description: readNonEmptyString(topic.description),\n ownerId:\n readNonEmptyString(metadata.ownerId) ||\n readNonEmptyString(topic.createdBy) ||\n \"system\",\n sharedWith: readStringArray(metadata.sharedWith),\n visibility,\n tenantId:\n readNonEmptyString(topic.tenantId) ||\n readNonEmptyString(metadata.tenantId),\n workspaceId:\n readNonEmptyString(topic.workspaceId) ||\n readNonEmptyString(metadata.workspaceId),\n status,\n tags: readStringArray(metadata.tags),\n chatCount:\n typeof metadata.chatCount === \"number\" ? (metadata.chatCount as number) : 0,\n artifactCount:\n typeof metadata.artifactCount === \"number\"\n ? (metadata.artifactCount as number)\n : 0,\n lastActivityAt:\n typeof metadata.lastActivityAt === \"number\"\n ? (metadata.lastActivityAt as number)\n : updatedAt,\n _creationTime:\n typeof topic._creationTime === \"number\" ? topic._creationTime : createdAt,\n createdAt,\n updatedAt,\n };\n}\n\nexport async function resolveTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n if (options.projectLikeOnly !== false && !isProjectLikeTopic(topic)) {\n return null;\n }\n return materializeTopicProjectOverlay(topic, options.idMode);\n}\n\nexport async function listTopicProjectOverlays(\n ctx: any,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay[]> {\n let allTopics: TopicDocLike[] = [];\n\n if (ctx?.db?.query && typeof ctx.db.query === \"function\") {\n try {\n allTopics = (await ctx.db.query(\"topics\").collect()) as TopicDocLike[];\n } catch {\n allTopics = [];\n }\n }\n\n if (allTopics.length === 0 && typeof ctx.runQuery === \"function\") {\n allTopics =\n (((await ctx.runQuery(api.topics.list as any, {})) ?? []) as TopicDocLike[]) ||\n [];\n }\n\n return allTopics\n .filter(\n (topic) => options.projectLikeOnly === false || isProjectLikeTopic(topic)\n )\n .map((topic) => materializeTopicProjectOverlay(topic, options.idMode));\n}\n","import type { Id } from \"./convex\";\nimport { resolveTopicProjectOverlay } from \"./topicProjectOverlay.js\";\n\nconst PROJECT_GRANT_STATUSES = [\"active\", \"revoked\", \"expired\"] as const;\n\ntype ProjectGrantStatus = (typeof PROJECT_GRANT_STATUSES)[number];\n\ntype ProjectGrantRow = Record<string, unknown> & {\n _id: Id<\"projectGrants\">;\n topicId?: string;\n projectId?: string;\n principalId?: string;\n groupId?: string;\n status?: ProjectGrantStatus;\n};\n\ntype ProjectGrantWrite = Record<string, unknown> & {\n topicId?: string;\n projectId?: string;\n};\n\nfunction normalizeString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nasync function resolveGrantScopeIds(\n ctx: any,\n args: {\n topicId?: unknown;\n projectId?: unknown;\n }\n): Promise<{ topicId?: string; projectId?: string }> {\n const topicId = normalizeString(args.topicId);\n const projectId = normalizeString(args.projectId);\n\n for (const scopeId of [topicId, projectId]) {\n if (!scopeId) {\n continue;\n }\n\n try {\n const overlay = await resolveTopicProjectOverlay(ctx, scopeId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n });\n if (overlay) {\n return {\n topicId: normalizeString(overlay.topicId) ?? topicId,\n projectId:\n normalizeString(overlay.projectId) ?? projectId ?? scopeId,\n };\n }\n } catch {\n // Fall back to the raw ids when the topic overlay bridge is unavailable.\n }\n }\n\n return { topicId, projectId };\n}\n\nasync function normalizeProjectGrantRow(\n ctx: any,\n row: ProjectGrantRow\n): Promise<ProjectGrantRow> {\n const scope = await resolveGrantScopeIds(ctx, {\n topicId: row.topicId,\n projectId: row.projectId,\n });\n\n return {\n ...row,\n ...(scope.topicId ? { topicId: scope.topicId } : {}),\n ...(scope.projectId ?? scope.topicId\n ? { projectId: scope.projectId ?? scope.topicId }\n : {}),\n };\n}\n\nasync function normalizeProjectGrantRows(\n ctx: any,\n rows: ProjectGrantRow[]\n): Promise<ProjectGrantRow[]> {\n return await Promise.all(rows.map((row) => normalizeProjectGrantRow(ctx, row)));\n}\n\nasync function listProjectGrantsByPrincipal(\n ctx: any,\n principalId: string\n): Promise<ProjectGrantRow[]> {\n const rows = await Promise.all(\n PROJECT_GRANT_STATUSES.map((status) =>\n ctx.db\n .query(\"projectGrants\")\n .withIndex(\"by_principal_status\", (q: any) =>\n q.eq(\"principalId\", principalId).eq(\"status\", status)\n )\n .collect()\n )\n );\n return await normalizeProjectGrantRows(ctx, rows.flat() as ProjectGrantRow[]);\n}\n\nasync function listProjectGrantsByGroup(\n ctx: any,\n groupId: string\n): Promise<ProjectGrantRow[]> {\n const rows = await Promise.all(\n PROJECT_GRANT_STATUSES.map((status) =>\n ctx.db\n .query(\"projectGrants\")\n .withIndex(\"by_group_status\", (q: any) =>\n q.eq(\"groupId\", groupId).eq(\"status\", status)\n )\n .collect()\n )\n );\n return await normalizeProjectGrantRows(ctx, rows.flat() as ProjectGrantRow[]);\n}\n\nfunction buildScopeMatchers(\n inputScopeId: string,\n resolved: { topicId?: string; projectId?: string }\n): Set<string> {\n return new Set(\n [inputScopeId, resolved.topicId, resolved.projectId]\n .map((value) => normalizeString(value))\n .filter((value): value is string => Boolean(value))\n );\n}\n\nfunction matchesResolvedScope(\n row: ProjectGrantRow,\n scopeIds: Set<string>\n): boolean {\n const rowTopicId = normalizeString(row.topicId);\n const rowProjectId = normalizeString(row.projectId);\n return (\n (rowTopicId !== undefined && scopeIds.has(rowTopicId)) ||\n (rowProjectId !== undefined && scopeIds.has(rowProjectId))\n );\n}\n\nexport async function bridgeListProjectGrants(ctx: any): Promise<any[]> {\n const rows = (await ctx.db.query(\"projectGrants\").collect()) as ProjectGrantRow[];\n return await normalizeProjectGrantRows(ctx, rows);\n}\n\nexport async function bridgeListProjectGrantsByTopicId(\n ctx: any,\n topicId: string\n): Promise<any[]> {\n const resolved = await resolveGrantScopeIds(ctx, { topicId });\n const rows = await bridgeListProjectGrants(ctx);\n const scopeIds = buildScopeMatchers(topicId, resolved);\n return rows.filter((row) => matchesResolvedScope(row as ProjectGrantRow, scopeIds));\n}\n\nexport async function bridgeListProjectGrantsByTopicAndPrincipal(\n ctx: any,\n topicId: string,\n principalId: string\n): Promise<any[]> {\n const resolved = await resolveGrantScopeIds(ctx, { topicId });\n const scopeIds = buildScopeMatchers(topicId, resolved);\n const rows = await listProjectGrantsByPrincipal(ctx, principalId);\n return rows.filter((row) => matchesResolvedScope(row, scopeIds));\n}\n\nexport async function bridgeListProjectGrantsByTopicAndGroup(\n ctx: any,\n topicId: string,\n groupId: string\n): Promise<any[]> {\n const resolved = await resolveGrantScopeIds(ctx, { topicId });\n const scopeIds = buildScopeMatchers(topicId, resolved);\n const rows = await listProjectGrantsByGroup(ctx, groupId);\n return rows.filter((row) => matchesResolvedScope(row, scopeIds));\n}\n\nexport async function bridgeListProjectGrantsByPrincipalStatus(\n ctx: any,\n principalId: string,\n status: ProjectGrantStatus\n): Promise<any[]> {\n const rows = await listProjectGrantsByPrincipal(ctx, principalId);\n return rows.filter((row) => row.status === status);\n}\n\nexport async function bridgeListProjectGrantsByGroupStatus(\n ctx: any,\n groupId: string,\n status: ProjectGrantStatus\n): Promise<any[]> {\n const rows = await listProjectGrantsByGroup(ctx, groupId);\n return rows.filter((row) => row.status === status);\n}\n\nexport async function bridgeInsertProjectGrant(\n ctx: any,\n value: ProjectGrantWrite\n): Promise<Id<\"projectGrants\">> {\n const resolved = await resolveGrantScopeIds(ctx, value);\n return await ctx.db.insert(\"projectGrants\", {\n ...value,\n ...(resolved.topicId ? { topicId: resolved.topicId } : {}),\n ...(resolved.projectId ?? resolved.topicId\n ? { projectId: resolved.projectId ?? resolved.topicId }\n : {}),\n });\n}\n\nexport async function bridgePatchProjectGrant(\n ctx: any,\n projectGrantId: string,\n value: ProjectGrantWrite\n): Promise<void> {\n const resolved = await resolveGrantScopeIds(ctx, value);\n await ctx.db.patch(projectGrantId, {\n ...value,\n ...(resolved.topicId ? { topicId: resolved.topicId } : {}),\n ...(resolved.projectId ?? resolved.topicId\n ? { projectId: resolved.projectId ?? resolved.topicId }\n : {}),\n });\n}\n","/** Data-source resolver wiring for topic-scoped access control. */\nimport { api as appApi } from \"./convex\";\nimport {\n bridgeInsertProjectGrant,\n bridgeListProjectGrantsByGroupStatus,\n bridgeListProjectGrantsByPrincipalStatus,\n bridgeListProjectGrantsByTopicAndGroup,\n bridgeListProjectGrantsByTopicAndPrincipal,\n} from \"./projectGrantsBridge.js\";\nimport {\n listTopicProjectOverlays,\n resolveTopicProjectOverlay,\n} from \"./topicProjectOverlay.js\";\nimport type {\n AccessControlAppResolverContext,\n AccessControlAppResolvers,\n} from \"./resolverTypes\";\n\nasync function findUserByClerkId(\n ctx: AccessControlAppResolverContext,\n clerkId: string\n): Promise<Record<string, unknown> | null> {\n const normalizedClerkId = clerkId.trim();\n if (!normalizedClerkId) {\n return null;\n }\n\n if (typeof ctx.runQuery === \"function\") {\n try {\n const bridgedUser = await ctx.runQuery(appApi.users.getUserByClerkId as any, {\n clerkId: normalizedClerkId,\n });\n if (bridgedUser) {\n return bridgedUser as Record<string, unknown>;\n }\n } catch {\n // Some dev deployments still carry the users table without the legacy\n // by_clerkId index. Fall through to a direct table scan instead of failing\n // the MCP request path closed on index drift alone.\n }\n }\n\n try {\n const users = await ctx.db.query(\"users\").collect();\n return (\n users.find((user) => String((user as { clerkId?: unknown }).clerkId ?? \"\") === normalizedClerkId) ??\n null\n ) as Record<string, unknown> | null;\n } catch {\n return null;\n }\n}\n\nasync function findUserByPrincipalId(\n ctx: AccessControlAppResolverContext,\n principalId: string\n): Promise<Record<string, unknown> | null> {\n const normalizedPrincipalId = principalId.trim();\n if (!normalizedPrincipalId) {\n return null;\n }\n\n try {\n const users = await ctx.db.query(\"users\").collect();\n return (\n users.find(\n (user) =>\n String((user as { defaultPrincipalId?: unknown }).defaultPrincipalId ?? \"\") ===\n normalizedPrincipalId\n ) ?? null\n ) as Record<string, unknown> | null;\n } catch {\n return null;\n }\n}\n\nasync function findAgentByPrincipalId(\n ctx: AccessControlAppResolverContext,\n principalId: string\n): Promise<Record<string, unknown> | null> {\n const normalizedPrincipalId = principalId.trim();\n if (!normalizedPrincipalId) {\n return null;\n }\n\n if (typeof ctx.runQuery === \"function\") {\n try {\n const bridgedAgent = await ctx.runQuery(\n (appApi as any).agents.getAgentByPrincipalId,\n {\n principalId: normalizedPrincipalId,\n }\n );\n if (bridgedAgent) {\n return bridgedAgent as Record<string, unknown>;\n }\n } catch {\n // Fall through to direct scan for local index drift in dev deployments.\n }\n }\n\n try {\n const agents = await ctx.db.query(\"agents\").collect();\n return (\n agents.find(\n (agent) =>\n String((agent as { principalId?: unknown }).principalId ?? \"\") ===\n normalizedPrincipalId\n ) ?? null\n ) as Record<string, unknown> | null;\n } catch {\n return null;\n }\n}\n\nfunction defaultResolvers(): AccessControlAppResolvers {\n return {\n async getProject(ctx, topicId) {\n return await resolveTopicProjectOverlay(ctx, topicId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n });\n },\n async listTopics(ctx) {\n return await listTopicProjectOverlays(ctx, { idMode: \"legacy\" });\n },\n async listTopicsByOwner(ctx, ownerId) {\n const topics = await listTopicProjectOverlays(ctx, { idMode: \"legacy\" });\n return topics.filter((topic) => topic.ownerId === ownerId);\n },\n async listTopicsByVisibility(ctx, visibility) {\n const topics = await listTopicProjectOverlays(ctx, { idMode: \"legacy\" });\n return topics.filter((topic) => topic.visibility === visibility);\n },\n async listProjectGrantsByProjectAndPrincipal(ctx, topicId, principalId) {\n return await bridgeListProjectGrantsByTopicAndPrincipal(\n ctx,\n topicId,\n principalId\n );\n },\n async listProjectGrantsByProjectAndGroup(ctx, topicId, groupId) {\n return await bridgeListProjectGrantsByTopicAndGroup(ctx, topicId, groupId);\n },\n async listProjectGrantsByPrincipalStatus(ctx, principalId, status) {\n return await bridgeListProjectGrantsByPrincipalStatus(\n ctx,\n principalId,\n status\n );\n },\n async listProjectGrantsByGroupStatus(ctx, groupId, status) {\n return await bridgeListProjectGrantsByGroupStatus(ctx, groupId, status);\n },\n async insertProjectGrant(ctx, value) {\n return (await bridgeInsertProjectGrant(ctx, value)) as any;\n },\n async getAgentByPrincipalId(ctx, principalId) {\n return await findAgentByPrincipalId(ctx, principalId);\n },\n async getUserByClerkId(ctx, clerkId) {\n return await findUserByClerkId(ctx, clerkId);\n },\n async getUserByPrincipalId(ctx, principalId) {\n return await findUserByPrincipalId(ctx, principalId);\n },\n };\n}\n\nlet resolverOverrides: Partial<AccessControlAppResolvers> = {};\n\nexport function configureAccessControlAppResolvers(\n overrides: Partial<AccessControlAppResolvers>\n): void {\n resolverOverrides = {\n ...resolverOverrides,\n ...overrides,\n };\n}\n\nexport function resetAccessControlAppResolvers(): void {\n resolverOverrides = {};\n}\n\nexport function resolveAccessControlAppResolvers(\n _ctx: AccessControlAppResolverContext\n): AccessControlAppResolvers {\n return {\n ...defaultResolvers(),\n ...resolverOverrides,\n };\n}\n","/**\n * Principal Context Resolver\n *\n * Derives principal context from the local `users` table only.\n * Governance tables (platformPrincipals, platformMemberships,\n * platformGroupMemberships) have been migrated to Master Control\n * and no longer exist in the tenant deployment.\n */\n\nimport type { MutationCtx, QueryCtx } from \"./convex\";\nimport { resolveAccessControlAppResolvers } from \"./resolvers\";\n\ntype DbCtx = QueryCtx | MutationCtx;\n\nexport type PlatformRole =\n | \"platform_admin\"\n | \"tenant_admin\"\n | \"workspace_admin\"\n | \"editor\"\n | \"viewer\"\n | \"auditor\"\n | \"service_agent\";\n\ntype ResolvedPrincipalType = \"user\" | \"group\" | \"service\" | \"external_viewer\";\n\nexport type ResolvedPrincipalContext = {\n principalId: string;\n principalType: ResolvedPrincipalType;\n clerkId: string;\n tenantId: string | null;\n workspaceId: string | null;\n roles: PlatformRole[];\n groupIds: string[];\n isPlatformAdmin: boolean;\n isTenantAdmin: boolean;\n isWorkspaceAdmin: boolean;\n isSystemFallback: boolean;\n};\n\ntype ResolvedUserRecord = {\n mcRole?: unknown;\n defaultTenantId?: unknown;\n defaultWorkspaceId?: unknown;\n defaultPrincipalId?: unknown;\n principalGroupIds?: unknown;\n};\n\ntype ResolvedAgentRecord = {\n principalId?: unknown;\n tenantId?: unknown;\n workspaceId?: unknown;\n roles?: unknown;\n groupIds?: unknown;\n};\n\ntype CanonicalResolvedUser = {\n mcRole: PlatformRole;\n defaultTenantId: string;\n defaultWorkspaceId: string;\n defaultPrincipalId: string;\n};\n\nfunction requireCanonicalResolvedUser(\n user: Record<string, unknown> | null,\n clerkId: string\n): CanonicalResolvedUser {\n const resolved = user as ResolvedUserRecord | null;\n if (!resolved) {\n throw new Error(\n `[AccessControl] Canonical user identity required for ${clerkId}. Sync users.upsertUser before user-bound access checks.`\n );\n }\n\n const { mcRole, defaultTenantId, defaultWorkspaceId, defaultPrincipalId } = resolved;\n if (\n mcRole !== \"platform_admin\" &&\n mcRole !== \"tenant_admin\" &&\n mcRole !== \"workspace_admin\" &&\n mcRole !== \"editor\" &&\n mcRole !== \"viewer\" &&\n mcRole !== \"auditor\" &&\n mcRole !== \"service_agent\"\n ) {\n throw new Error(\n `[AccessControl] Canonical MC role required for ${clerkId}. Re-sync Master Control identity before user-bound access checks.`\n );\n }\n\n if (typeof defaultTenantId !== \"string\" || defaultTenantId.trim().length === 0) {\n throw new Error(\n `[AccessControl] Canonical home tenant required for ${clerkId}. Re-sync Master Control identity before user-bound access checks.`\n );\n }\n\n if (\n typeof defaultWorkspaceId !== \"string\" ||\n defaultWorkspaceId.trim().length === 0\n ) {\n throw new Error(\n `[AccessControl] Canonical home workspace required for ${clerkId}. Re-sync Master Control identity before user-bound access checks.`\n );\n }\n\n if (\n typeof defaultPrincipalId !== \"string\" ||\n defaultPrincipalId.trim().length === 0\n ) {\n throw new Error(\n `[AccessControl] Canonical federated principal required for ${clerkId}. Re-sync Master Control identity before user-bound access checks.`\n );\n }\n\n return {\n mcRole,\n defaultTenantId: defaultTenantId.trim(),\n defaultWorkspaceId: defaultWorkspaceId.trim(),\n defaultPrincipalId: defaultPrincipalId.trim(),\n };\n}\n\nfunction isPrincipalIdInput(value: string): boolean {\n return (\n value.startsWith(\"user:\") ||\n value.startsWith(\"group:\") ||\n value.startsWith(\"service:\") ||\n value.startsWith(\"agent:\") ||\n value.startsWith(\"external_viewer:\")\n );\n}\n\nasync function resolveCanonicalUserRecord(\n ctx: DbCtx,\n actorId: string\n): Promise<{\n resolvedUser: Record<string, unknown> | null;\n clerkId: string;\n contextClerkId: string;\n}> {\n const normalizedActorId = actorId.trim();\n const clerkId =\n isPrincipalIdInput(normalizedActorId) && normalizedActorId.startsWith(\"user:\")\n ? normalizedActorId.slice(\"user:\".length)\n : normalizedActorId;\n const resolvers = resolveAccessControlAppResolvers(ctx);\n const resolvedByClerkId = await resolvers.getUserByClerkId(ctx, clerkId);\n\n if (resolvedByClerkId) {\n return {\n resolvedUser: resolvedByClerkId as Record<string, unknown>,\n clerkId,\n contextClerkId: clerkId,\n };\n }\n\n const resolvedByPrincipalId = await resolvers.getUserByPrincipalId(\n ctx,\n normalizedActorId\n );\n return {\n resolvedUser: (resolvedByPrincipalId as Record<string, unknown> | null) ?? null,\n clerkId,\n contextClerkId:\n normalizedActorId.startsWith(\"user:\") && clerkId.length > 0\n ? clerkId\n : normalizedActorId,\n };\n}\n\nfunction uniqRoles(roles: string[]): PlatformRole[] {\n const roleSet = new Set<PlatformRole>();\n for (const role of roles) {\n if (\n role === \"platform_admin\" ||\n role === \"tenant_admin\" ||\n role === \"workspace_admin\" ||\n role === \"editor\" ||\n role === \"viewer\" ||\n role === \"auditor\" ||\n role === \"service_agent\"\n ) {\n roleSet.add(role);\n }\n }\n return [...roleSet];\n}\n\nfunction normalizeGroupIds(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return [...new Set(\n value\n .filter((entry): entry is string => typeof entry === \"string\")\n .map((entry) => entry.trim())\n .filter(Boolean)\n )];\n}\n\nfunction requireServiceAgentUser(\n user: Record<string, unknown> | null,\n actorId: string\n): CanonicalResolvedUser {\n const canonicalUser = requireCanonicalResolvedUser(user, actorId);\n if (canonicalUser.mcRole !== \"service_agent\") {\n throw new Error(\n `[AccessControl] Canonical service_agent identity required for ${actorId}. Sync users.upsertUser before agent-bound access checks.`\n );\n }\n return canonicalUser;\n}\n\nfunction requireCanonicalResolvedAgent(\n agent: Record<string, unknown> | null,\n actorId: string\n): {\n principalId: string;\n tenantId: string;\n workspaceId: string;\n roles: PlatformRole[];\n groupIds: string[];\n} {\n const resolved = agent as ResolvedAgentRecord | null;\n if (!resolved) {\n throw new Error(\n `[AccessControl] Agent \"${actorId}\" not found in agents or users table.`\n );\n }\n\n if (typeof resolved.principalId !== \"string\" || resolved.principalId.trim().length === 0) {\n throw new Error(\n `[AccessControl] Canonical agent principalId required for ${actorId}.`\n );\n }\n\n if (typeof resolved.tenantId !== \"string\" || resolved.tenantId.trim().length === 0) {\n throw new Error(\n `[AccessControl] Canonical home tenant required for ${actorId}.`\n );\n }\n\n if (\n typeof resolved.workspaceId !== \"string\" ||\n resolved.workspaceId.trim().length === 0\n ) {\n throw new Error(\n `[AccessControl] Canonical home workspace required for ${actorId}.`\n );\n }\n\n return {\n principalId: resolved.principalId.trim(),\n tenantId: resolved.tenantId.trim(),\n workspaceId: resolved.workspaceId.trim(),\n roles:\n uniqRoles(Array.isArray(resolved.roles) ? (resolved.roles as string[]) : []) ??\n [\"service_agent\"],\n groupIds: normalizeGroupIds(resolved.groupIds),\n };\n}\n\nfunction _pickHomeMembership(\n memberships: Array<{\n tenantId: string;\n workspaceId?: string;\n role: PlatformRole;\n }>\n) {\n const rolePriority: Record<PlatformRole, number> = {\n platform_admin: 7,\n tenant_admin: 6,\n workspace_admin: 5,\n editor: 4,\n auditor: 3,\n viewer: 2,\n service_agent: 1,\n };\n\n const sorted = [...memberships].sort(\n (a, b) => rolePriority[b.role] - rolePriority[a.role]\n );\n\n return sorted[0] ?? null;\n}\n\n/**\n * Resolve principal context from the local `users` table.\n *\n * Governance tables (platformPrincipals, platformMemberships,\n * platformGroupMemberships) have been migrated to Master Control.\n * This function now derives all context from the `users` table\n * via the app resolver layer.\n */\nexport async function resolvePrincipalContext(\n ctx: DbCtx,\n actorId: string\n): Promise<ResolvedPrincipalContext> {\n if (actorId.startsWith(\"agent:\")) {\n const resolvers = resolveAccessControlAppResolvers(ctx);\n const resolvedAgent = await resolvers.getAgentByPrincipalId(ctx, actorId);\n\n if (resolvedAgent) {\n const agent = requireCanonicalResolvedAgent(\n resolvedAgent as Record<string, unknown> | null,\n actorId\n );\n return {\n principalId: agent.principalId,\n principalType: \"service\",\n clerkId: actorId,\n tenantId: agent.tenantId,\n workspaceId: agent.workspaceId,\n roles: agent.roles.length > 0 ? agent.roles : [\"service_agent\"],\n groupIds: agent.groupIds,\n isPlatformAdmin: false,\n isTenantAdmin: false,\n isWorkspaceAdmin: false,\n isSystemFallback: false,\n };\n }\n\n const resolvedUser = (await resolvers.getUserByClerkId(\n ctx,\n actorId\n )) as ResolvedUserRecord | null;\n if (!resolvedUser) {\n throw new Error(\n `[AccessControl] Agent \"${actorId}\" not found in agents or users table.`\n );\n }\n const user = requireServiceAgentUser(\n resolvedUser as Record<string, unknown> | null,\n actorId\n );\n console.warn(\n `[AccessControl] Deprecated legacy service-agent fallback for ${actorId}; migrate this principal into identity.agents.`\n );\n\n return {\n principalId: user.defaultPrincipalId,\n principalType: \"service\",\n clerkId: actorId,\n tenantId: user.defaultTenantId,\n workspaceId: user.defaultWorkspaceId,\n roles: [\"service_agent\"],\n groupIds: normalizeGroupIds(resolvedUser?.principalGroupIds),\n isPlatformAdmin: false,\n isTenantAdmin: false,\n isWorkspaceAdmin: false,\n isSystemFallback: false,\n };\n }\n\n const {\n resolvedUser,\n contextClerkId,\n } = await resolveCanonicalUserRecord(ctx, actorId);\n const user = requireCanonicalResolvedUser(\n resolvedUser as Record<string, unknown> | null,\n contextClerkId\n );\n if (!user.defaultPrincipalId) {\n throw new Error(\n `[AccessControl] Canonical federated principal required for ${contextClerkId}. Re-sync Master Control identity before user-bound access checks.`\n );\n }\n\n if (user.mcRole === \"service_agent\") {\n return {\n principalId: user.defaultPrincipalId,\n principalType: \"service\",\n clerkId: contextClerkId,\n tenantId: user.defaultTenantId,\n workspaceId: user.defaultWorkspaceId,\n roles: [\"service_agent\"],\n groupIds: normalizeGroupIds(resolvedUser?.principalGroupIds),\n isPlatformAdmin: false,\n isTenantAdmin: false,\n isWorkspaceAdmin: false,\n isSystemFallback: false,\n };\n }\n\n const principalId = user.defaultPrincipalId;\n\n const effectiveRole = user.mcRole;\n\n const roles: PlatformRole[] = effectiveRole === \"platform_admin\"\n ? [\"platform_admin\", \"tenant_admin\"]\n : effectiveRole === \"tenant_admin\"\n ? [\"tenant_admin\"]\n : [effectiveRole];\n\n const tenantId = user.defaultTenantId;\n const workspaceId = user.defaultWorkspaceId;\n\n const isPlatformAdmin = effectiveRole === \"platform_admin\";\n\n return {\n principalId,\n principalType: \"user\",\n clerkId: contextClerkId,\n tenantId,\n workspaceId,\n roles: uniqRoles(roles),\n groupIds: normalizeGroupIds(resolvedUser?.principalGroupIds),\n isPlatformAdmin,\n isTenantAdmin: isPlatformAdmin || effectiveRole === \"tenant_admin\",\n isWorkspaceAdmin: isPlatformAdmin || effectiveRole === \"tenant_admin\" || effectiveRole === \"workspace_admin\",\n isSystemFallback: false,\n };\n}\n\n/**\n * Ensure a user principal context exists.\n *\n * Governance bootstrap (creating platformPrincipals, memberships, etc.)\n * has moved to Master Control. This tenant-side stub resolves the\n * existing context from the local `users` table without creating\n * any governance records.\n */\nexport async function ensureUserPrincipalContext(\n ctx: MutationCtx,\n args: {\n clerkId: string;\n email?: string;\n name?: string;\n isAdmin?: boolean;\n actorPrincipalId?: string;\n }\n): Promise<ResolvedPrincipalContext> {\n return resolvePrincipalContext(ctx, args.clerkId);\n}\n","/**\n * Centralized Access Control for Convex\n *\n * This module provides consistent authorization patterns across all Convex\n * mutations and queries. Access checks are principal-context driven and honor\n * tenant ringfencing, explicit topic grants, and broad visibility semantics.\n *\n * Access Rules:\n * - Platform admins have access to all topics\n * - Topic owners have full access to their topics\n * - Explicit topic grants (principal/group) provide access across visibility modes\n * - Legacy `sharedWith` remains a compatibility bridge during migration\n * - `firm` visibility is tenant-scoped and blocked for principals marked external\n * - `public` visibility is available to any authenticated user\n * - Resources without a topic are accessible only to their creator\n */\n\nimport type { MutationCtx, QueryCtx } from \"./convex\";\nimport {\n resolvePrincipalContext,\n type ResolvedPrincipalContext,\n} from \"./principalContext\";\nimport { resolveAccessControlAppResolvers } from \"./resolvers\";\n\ntype DbCtx = QueryCtx | MutationCtx;\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type TopicRecord = {\n _id: string;\n ownerId: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n};\n\n/** @deprecated Use TopicRecord inside access-control. */\nexport type Project = {\n _id: string;\n ownerId: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n};\n\nexport type ResourceWithTopic = {\n topicId?: string;\n /** @deprecated Use topicId inside access-control. */\n projectId?: string;\n userId?: string;\n createdBy?: string;\n};\n\n/** @deprecated Use ResourceWithTopic inside access-control. */\nexport type ResourceWithProject = ResourceWithTopic;\n\nexport type AccessCheckResult = {\n hasAccess: boolean;\n isAdmin: boolean;\n isOwner: boolean;\n isShared: boolean;\n hasGrant: boolean;\n isFirmVisible: boolean;\n isExternalVisible: boolean;\n isPublicVisible: boolean;\n isTenantScopeMatch: boolean;\n isWorkspaceScopeMatch: boolean;\n isPrincipalExternal: boolean;\n};\n\nfunction isTopicInPrincipalTenant(\n topic: { tenantId?: string },\n principalTenantId: string | null\n): boolean {\n if (!topic.tenantId) {\n return false;\n }\n if (!principalTenantId) {\n return false;\n }\n return String(topic.tenantId) === String(principalTenantId);\n}\n\nfunction isTopicInPrincipalWorkspace(\n topic: { workspaceId?: string },\n principalWorkspaceId: string | null\n): boolean {\n if (!topic.workspaceId) {\n return false;\n }\n if (!principalWorkspaceId) {\n return false;\n }\n return String(topic.workspaceId) === String(principalWorkspaceId);\n}\n\nfunction isLegacyUnscopedTopic(topic: {\n tenantId?: string;\n workspaceId?: string;\n}): boolean {\n return !topic.tenantId || !topic.workspaceId;\n}\n\nexport function isGrantScopeAlignedToTopic(\n topic: {\n tenantId?: string;\n workspaceId?: string;\n },\n grant: {\n tenantId?: string;\n workspaceId?: string;\n }\n): boolean {\n if (\n topic.tenantId &&\n grant.tenantId &&\n String(topic.tenantId) !== String(grant.tenantId)\n ) {\n return false;\n }\n if (\n topic.workspaceId &&\n grant.workspaceId &&\n String(topic.workspaceId) !== String(grant.workspaceId)\n ) {\n return false;\n }\n return true;\n}\n\n/** @deprecated Use isGrantScopeAlignedToTopic. */\nexport const isGrantScopeAlignedToProject = isGrantScopeAlignedToTopic;\n\nexport function isGroupScopeAlignedToTopic(\n topic: {\n tenantId?: string;\n workspaceId?: string;\n },\n group: {\n tenantId?: string;\n workspaceId?: string;\n }\n): boolean {\n if (\n topic.tenantId &&\n group.tenantId &&\n String(topic.tenantId) !== String(group.tenantId)\n ) {\n return false;\n }\n if (\n topic.workspaceId &&\n group.workspaceId &&\n String(topic.workspaceId) !== String(group.workspaceId)\n ) {\n return false;\n }\n return true;\n}\n\n/** @deprecated Use isGroupScopeAlignedToTopic. */\nexport const isGroupScopeAlignedToProject = isGroupScopeAlignedToTopic;\n\nexport function isGrantSourceAllowedForVisibility(\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\",\n source: string | undefined\n): boolean {\n if (source !== \"external_share\") {\n return true;\n }\n return visibility === \"external\" || visibility === \"public\";\n}\n\nfunction isGrantActive(grant: {\n status: \"active\" | \"revoked\" | \"expired\";\n expiresAt?: number;\n}): boolean {\n if (grant.status !== \"active\") {\n return false;\n }\n if (grant.expiresAt !== undefined && grant.expiresAt <= Date.now()) {\n return false;\n }\n return true;\n}\n\nasync function hasPrincipalGrant(\n ctx: DbCtx,\n args: {\n topic: TopicRecord;\n principalId: string;\n principalIsExternal: boolean;\n }\n): Promise<boolean> {\n const grants = await resolveAccessControlAppResolvers(\n ctx\n ).listProjectGrantsByProjectAndPrincipal(\n ctx,\n args.topic._id,\n args.principalId\n );\n\n if (\n grants.some(\n (grant) =>\n isGrantActive(grant as any) &&\n isGrantScopeAlignedToTopic(args.topic, grant) &&\n isGrantSourceAllowedForVisibility(\n args.topic.visibility,\n grant.source\n ) &&\n (!args.principalIsExternal ||\n args.topic.visibility === \"public\" ||\n grant.source === \"external_share\")\n )\n ) {\n return true;\n }\n\n return false;\n}\n\nasync function hasGroupGrant(\n ctx: DbCtx,\n args: {\n topic: TopicRecord;\n groupIds: string[];\n }\n): Promise<boolean> {\n // Group-based grant checks require MC group resolution.\n // With groupIds=[] from tenant-local principal context, this is a no-op.\n // Future: call MC to resolve group grants for cross-tenant scenarios.\n if (args.groupIds.length === 0) {\n return false;\n }\n\n for (const groupId of args.groupIds) {\n const grants = await resolveAccessControlAppResolvers(\n ctx\n ).listProjectGrantsByProjectAndGroup(ctx, args.topic._id, groupId);\n\n if (\n grants.some(\n (grant) =>\n isGrantActive(grant as any) &&\n isGrantScopeAlignedToTopic(args.topic, grant) &&\n isGrantSourceAllowedForVisibility(\n args.topic.visibility,\n grant.source\n )\n )\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction isExternalPrincipal(\n _ctx: DbCtx,\n _args: {\n groupIds: string[];\n topicTenantId?: string;\n topicWorkspaceId?: string;\n }\n): boolean {\n // External principal detection requires MC group resolution.\n // With groupIds=[] from tenant-local principal context, always false.\n // Future: call MC to check external group membership.\n return false;\n}\n\n// =============================================================================\n// ADMIN CHECK\n// =============================================================================\n\n/**\n * Check if a user has admin-tier access.\n *\n * Identity bridge: prefers mcRole (synced from Master Control),\n * falls back to legacy isAdmin boolean during migration.\n */\nexport async function isAdmin(ctx: DbCtx, userId: string): Promise<boolean> {\n const user = await resolveAccessControlAppResolvers(ctx).getUserByClerkId(\n ctx,\n userId\n );\n if (!user) return false;\n\n // Identity bridge: mcRole preferred, isAdmin fallback\n if (user.mcRole) {\n return user.mcRole === \"platform_admin\" || user.mcRole === \"tenant_admin\";\n }\n return user.isAdmin === true;\n}\n\n// =============================================================================\n// TOPIC ACCESS\n// =============================================================================\n\n/**\n * Check if a user has access to a topic scope.\n *\n * Returns detailed access info including why access was granted.\n */\n/**\n * STACK_MC_AUTH_BYPASS: All authenticated Stack MC users get full access\n * until RBAC and topic-native grant matching are production-ready.\n * When RBAC is complete, remove this constant and the early-return below.\n */\nconst STACK_MC_AUTH_BYPASS = true;\n\nasync function evaluateTopicAccessDetailed(\n ctx: DbCtx,\n args: {\n topicId: string;\n legacyUserId: string;\n principalContext: ResolvedPrincipalContext;\n }\n): Promise<AccessCheckResult> {\n // Single bypass: authenticated users get full access until RBAC is ready\n if (STACK_MC_AUTH_BYPASS && args.legacyUserId) {\n return {\n hasAccess: true,\n isAdmin: false,\n isOwner: false,\n isShared: false,\n hasGrant: true,\n isFirmVisible: true,\n isExternalVisible: false,\n isPublicVisible: false,\n isTenantScopeMatch: true,\n isWorkspaceScopeMatch: true,\n isPrincipalExternal: false,\n };\n }\n\n const topic = await resolveAccessControlAppResolvers(ctx).getProject(\n ctx,\n args.topicId\n );\n if (!topic) {\n return {\n hasAccess: false,\n isAdmin: false,\n isOwner: false,\n isShared: false,\n hasGrant: false,\n isFirmVisible: false,\n isExternalVisible: false,\n isPublicVisible: false,\n isTenantScopeMatch: false,\n isWorkspaceScopeMatch: false,\n isPrincipalExternal: false,\n };\n }\n\n const { principalContext, legacyUserId } = args;\n const userIsAdmin = principalContext.isPlatformAdmin;\n const isOwner = topic.ownerId === legacyUserId;\n const isShared = (topic.sharedWith ?? []).includes(legacyUserId);\n const principalIsExternal = await isExternalPrincipal(ctx, {\n groupIds: principalContext.groupIds,\n topicTenantId: topic.tenantId,\n topicWorkspaceId: topic.workspaceId,\n });\n\n const hasPrincipalGrantResult = await hasPrincipalGrant(ctx, {\n topic,\n principalId: principalContext.principalId,\n principalIsExternal,\n });\n const hasGroupGrantResult = await hasGroupGrant(ctx, {\n topic,\n groupIds: principalContext.groupIds,\n });\n\n const hasGrant = isShared || hasPrincipalGrantResult || hasGroupGrantResult;\n const legacyUnscoped = isLegacyUnscopedTopic(topic);\n const tenantScopeMatch = isTopicInPrincipalTenant(\n topic,\n principalContext.tenantId\n );\n const workspaceScopeMatch = isTopicInPrincipalWorkspace(\n topic,\n principalContext.workspaceId\n );\n\n const isPublicVisible = topic.visibility === \"public\";\n const isFirmVisible =\n topic.visibility === \"firm\" &&\n !legacyUnscoped &&\n tenantScopeMatch &&\n workspaceScopeMatch &&\n !principalIsExternal;\n const hasScopedGrant =\n hasGrant && (legacyUnscoped || (tenantScopeMatch && workspaceScopeMatch));\n const isExternalVisible = topic.visibility === \"external\" && hasScopedGrant;\n\n const hasAccess =\n userIsAdmin ||\n isOwner ||\n hasScopedGrant ||\n isPublicVisible ||\n isFirmVisible;\n\n return {\n hasAccess,\n isAdmin: userIsAdmin,\n isOwner,\n isShared,\n hasGrant,\n isFirmVisible,\n isExternalVisible,\n isPublicVisible,\n isTenantScopeMatch: tenantScopeMatch,\n isWorkspaceScopeMatch: workspaceScopeMatch,\n isPrincipalExternal: principalIsExternal,\n };\n}\n\nexport async function checkTopicAccessDetailedWithPrincipalContext(\n ctx: DbCtx,\n topicId: string,\n principalContext: ResolvedPrincipalContext\n): Promise<AccessCheckResult> {\n return evaluateTopicAccessDetailed(ctx, {\n topicId,\n legacyUserId: principalContext.clerkId,\n principalContext,\n });\n}\n\nexport async function checkTopicAccessDetailed(\n ctx: DbCtx,\n topicId: string,\n userId: string\n): Promise<AccessCheckResult> {\n const principalContext = await resolvePrincipalContext(ctx, userId);\n return evaluateTopicAccessDetailed(ctx, {\n topicId,\n legacyUserId: userId,\n principalContext,\n });\n}\n\n/**\n * Check if a user has access to a topic scope (simple boolean).\n */\nexport async function checkTopicAccess(\n ctx: DbCtx,\n topicId: string,\n userId: string\n): Promise<boolean> {\n const result = await checkTopicAccessDetailed(ctx, topicId, userId);\n return result.hasAccess;\n}\n\nexport async function checkTopicAccessWithPrincipalContext(\n ctx: DbCtx,\n topicId: string,\n principalContext: ResolvedPrincipalContext\n): Promise<boolean> {\n const result = await checkTopicAccessDetailedWithPrincipalContext(\n ctx,\n topicId,\n principalContext\n );\n return result.hasAccess;\n}\n\n/**\n * Check if a user has access to a scope (topic or legacy project compatibility id).\n *\n * TC-C: topic-canonical access bridge. Tries to resolve the scopeId as a\n * topic first (from the topics table). If found, allows access for any\n * authenticated user (topic-level ACL will be added in TC-D).\n * Falls back to legacy project-based access checks for compatibility.\n */\nexport async function checkScopeAccess(\n ctx: DbCtx,\n scopeId: string,\n userId: string\n): Promise<boolean> {\n // Try as topic first — topics table uses string IDs\n try {\n const topic = await (ctx.db as any).get(scopeId);\n if (\n topic &&\n (topic as any).name !== undefined &&\n (topic as any).type !== undefined\n ) {\n // Valid topic — allow access for any authenticated user.\n // Full topic-level ACL (visibility, tenant ringfencing) deferred to TC-D.\n return true;\n }\n } catch {\n // Not a valid document ID for this deployment, try the legacy project scope.\n }\n\n // Fall back to the legacy project-based access check.\n try {\n return await checkTopicAccess(ctx, scopeId as string, userId);\n } catch {\n // Neither topic nor legacy project scope resolved — deny access.\n return false;\n }\n}\n\n/**\n * Require access to a topic scope, throws if not authorized.\n */\nexport async function requireTopicAccess(\n ctx: DbCtx,\n topicId: string,\n userId: string\n): Promise<void> {\n const hasAccess = await checkTopicAccess(ctx, topicId, userId);\n if (!hasAccess) {\n throw new Error(\n \"Access denied: You don't have permission to access this topic\"\n );\n }\n}\n\n/**\n * Get a topic record with access check.\n *\n * Returns the topic record if the user has access, null otherwise.\n */\nexport async function getTopicWithAccess(\n ctx: DbCtx,\n topicId: string,\n userId: string\n): Promise<TopicRecord | null> {\n const topic = await resolveAccessControlAppResolvers(ctx).getProject(\n ctx,\n topicId\n );\n if (!topic) {\n return null;\n }\n\n const hasAccess = await checkTopicAccess(ctx, topicId, userId);\n if (!hasAccess) {\n return null;\n }\n\n return topic as TopicRecord;\n}\n\n/** @deprecated Use checkTopicAccessDetailed. */\nexport const checkProjectAccessDetailed = checkTopicAccessDetailed;\n\n/** @deprecated Use checkTopicAccess. */\nexport const checkProjectAccess = checkTopicAccess;\n\n/** @deprecated Use requireTopicAccess. */\nexport const requireProjectAccess = requireTopicAccess;\n\n/** @deprecated Use getTopicWithAccess. */\nexport const getProjectWithAccess = getTopicWithAccess;\n\n// =============================================================================\n// RESOURCE ACCESS (for items with optional topic compatibility ids)\n// =============================================================================\n\n/**\n * Check if a user can access a resource that may or may not belong to a topic.\n */\nexport function checkResourceAccess(\n ctx: DbCtx,\n resource: ResourceWithTopic,\n userId: string\n): boolean | Promise<boolean> {\n const topicId = resource.topicId ?? resource.projectId;\n if (topicId) {\n return checkTopicAccess(ctx, topicId, userId);\n }\n\n // No topic - only creator can access.\n const creatorId = resource.userId ?? resource.createdBy;\n return creatorId === userId;\n}\n\n/**\n * Require access to a resource, throws if not authorized.\n */\nexport async function requireResourceAccess(\n ctx: DbCtx,\n resource: ResourceWithTopic,\n userId: string\n): Promise<void> {\n const hasAccess = await checkResourceAccess(ctx, resource, userId);\n if (!hasAccess) {\n throw new Error(\n \"Access denied: You don't have permission to access this resource\"\n );\n }\n}\n\n// =============================================================================\n// CONVENIENCE HELPERS\n// =============================================================================\n\n/**\n * Check if user can modify a resource (stricter than read access).\n *\n * For now, same as checkResourceAccess. In the future, this could be\n * extended to support read-only sharing.\n */\nexport function checkModifyAccess(\n ctx: DbCtx,\n resource: ResourceWithTopic,\n userId: string\n): boolean | Promise<boolean> {\n return checkResourceAccess(ctx, resource, userId);\n}\n\n/**\n * Check if user is the creator of a resource.\n */\nexport function isCreator(\n resource: { userId?: string; createdBy?: string },\n userId: string\n): boolean {\n const creatorId = resource.userId ?? resource.createdBy;\n return creatorId === userId;\n}\n\n/**\n * Build the accessible topic ID set for list-style queries.\n */\nexport async function getAccessibleTopicIds(\n ctx: DbCtx,\n userId: string\n): Promise<Set<string>> {\n const principalContext = await resolvePrincipalContext(ctx, userId);\n\n if (principalContext.isPlatformAdmin) {\n // Admins can access all topics.\n const allTopics =\n await resolveAccessControlAppResolvers(ctx).listTopics(ctx);\n return new Set(allTopics.map((topic) => topic._id));\n }\n\n const topicIds = new Set<string>();\n\n // Owned topics.\n const ownedTopics = await resolveAccessControlAppResolvers(\n ctx\n ).listTopicsByOwner(ctx, userId);\n for (const topic of ownedTopics) {\n topicIds.add(topic._id);\n }\n\n // Public topics.\n const publicTopics = await resolveAccessControlAppResolvers(\n ctx\n ).listTopicsByVisibility(ctx, \"public\");\n for (const topic of publicTopics) {\n topicIds.add(topic._id);\n }\n\n // Firm topics (tenant ringfenced, and hidden from principals in external groups).\n const principalIsExternal = await isExternalPrincipal(ctx, {\n groupIds: principalContext.groupIds,\n topicTenantId: principalContext.tenantId ?? undefined,\n topicWorkspaceId: principalContext.workspaceId ?? undefined,\n });\n if (!principalIsExternal) {\n const firmTopics = await resolveAccessControlAppResolvers(\n ctx\n ).listTopicsByVisibility(ctx, \"firm\");\n\n for (const topic of firmTopics) {\n if (\n isTopicInPrincipalTenant(topic, principalContext.tenantId) &&\n isTopicInPrincipalWorkspace(topic, principalContext.workspaceId)\n ) {\n topicIds.add(topic._id);\n }\n }\n }\n\n // Explicit principal grants\n const directGrants = await resolveAccessControlAppResolvers(\n ctx\n ).listProjectGrantsByPrincipalStatus(\n ctx,\n principalContext.principalId,\n \"active\"\n );\n\n for (const grant of directGrants) {\n if (!isGrantActive(grant as any)) {\n continue;\n }\n const topic = await resolveAccessControlAppResolvers(ctx).getProject(\n ctx,\n grant.projectId\n );\n if (!topic) {\n continue;\n }\n if (!isLegacyUnscopedTopic(topic)) {\n if (!isTopicInPrincipalTenant(topic, principalContext.tenantId)) {\n continue;\n }\n if (\n !isTopicInPrincipalWorkspace(topic, principalContext.workspaceId)\n ) {\n continue;\n }\n }\n if (!isGrantScopeAlignedToTopic(topic, grant)) {\n continue;\n }\n if (\n !isGrantSourceAllowedForVisibility(topic.visibility, grant.source)\n ) {\n continue;\n }\n if (\n principalIsExternal &&\n topic.visibility !== \"public\" &&\n grant.source !== \"external_share\"\n ) {\n continue;\n }\n topicIds.add(grant.projectId);\n }\n\n // Group grants — skipped in tenant-local context (groups live in MC).\n // principalContext.groupIds is [] when resolved locally.\n\n // Legacy shared-with list compatibility while grant backfill is in progress.\n const allTopics =\n await resolveAccessControlAppResolvers(ctx).listTopics(ctx);\n for (const topic of allTopics) {\n if (\n (topic.sharedWith ?? []).includes(userId) &&\n (isLegacyUnscopedTopic(topic) ||\n (isTopicInPrincipalTenant(topic, principalContext.tenantId) &&\n isTopicInPrincipalWorkspace(topic, principalContext.workspaceId)))\n ) {\n topicIds.add(topic._id);\n }\n }\n\n return topicIds;\n}\n\n/** @deprecated Use getAccessibleTopicIds. */\nexport const getAccessibleProjectIds = getAccessibleTopicIds;\n","/**\n * auth module implementation.\n */\n\nimport type { ActionCtx, MutationCtx, QueryCtx } from \"./convex\";\n\ntype AnyCtx = QueryCtx | MutationCtx | ActionCtx;\n\n/**\n * Get the current user's identity from Clerk.\n */\nexport async function getCurrentUser(ctx: AnyCtx) {\n const identity = await ctx.auth.getUserIdentity();\n return identity;\n}\n\n/**\n * Get the current user ID (Clerk subject).\n */\nexport async function getCurrentUserId(ctx: AnyCtx): Promise<string | null> {\n const identity = await ctx.auth.getUserIdentity();\n return identity?.subject ?? null;\n}\n","import { v } from \"convex/values\";\n\nexport const permissiveReturn = v.optional(v.any());\nexport const looseJsonObject = v.record(v.string(), v.any());\nexport const looseJsonArray = v.array(v.any());\nexport const looseJsonValue = v.union(\n v.string(),\n v.number(),\n v.boolean(),\n v.null(),\n looseJsonObject,\n looseJsonArray\n);\n","import {\n actionGeneric,\n anyApi,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\nexport const api = anyApi as any;\nexport const components = componentsGeneric() as any;\nexport const internal = anyApi as any;\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> = any;\nexport type DataModel = any;\nexport type ActionCtx = any;\nexport type DatabaseReader = any;\nexport type DatabaseWriter = any;\nexport type MutationCtx = any;\nexport type QueryCtx = any;\n\nexport const action = actionGeneric as any;\nexport const httpAction = httpActionGeneric as any;\nexport const internalAction = internalActionGeneric as any;\nexport const internalMutation = internalMutationGeneric as any;\nexport const internalQuery = internalQueryGeneric as any;\nexport const mutation = mutationGeneric as any;\nexport const query = queryGeneric as any;\n","import type { Opinion } from \"../../types\";\n\nexport function opinion(\n belief: number,\n disbelief: number,\n uncertainty: number,\n baseRate: number = 0.5\n): Opinion {\n const b = Math.max(0, Math.min(1, belief));\n const d = Math.max(0, Math.min(1, disbelief));\n const u = Math.max(0, Math.min(1, uncertainty));\n const a = Math.max(0, Math.min(1, baseRate));\n const sum = b + d + u;\n\n if (sum === 0) {\n return { b: 0, d: 0, u: 1, a };\n }\n\n return {\n b: b / sum,\n d: d / sum,\n u: u / sum,\n a,\n };\n}\n\nexport function vacuous(baseRate: number = 0.5): Opinion {\n return { b: 0, d: 0, u: 1, a: baseRate };\n}\n\nexport function dogmatic(probability: number, baseRate: number = 0.5): Opinion {\n const p = Math.max(0, Math.min(1, probability));\n return { b: p, d: 1 - p, u: 0, a: baseRate };\n}\n\nexport function project(o: Opinion): number {\n return o.b + o.a * o.u;\n}\n\nexport function confidenceLevel(o: Opinion): \"high\" | \"medium\" | \"low\" {\n const projected = project(o);\n if (o.u > 0.5) {\n return \"low\";\n }\n if (projected >= 0.8 && o.u < 0.2) {\n return \"high\";\n }\n if (projected >= 0.6) {\n return \"medium\";\n }\n return \"low\";\n}\n\nexport function cumulativeFusion(left: Opinion, right: Opinion): Opinion {\n if (left.u === 0 && right.u === 0) {\n return opinion(\n (left.b + right.b) / 2,\n (left.d + right.d) / 2,\n 0,\n (left.a + right.a) / 2\n );\n }\n\n const k = left.u + right.u - left.u * right.u;\n if (k === 0) {\n return vacuous((left.a + right.a) / 2);\n }\n\n return opinion(\n (left.b * right.u + right.b * left.u) / k,\n (left.d * right.u + right.d * left.u) / k,\n (left.u * right.u) / k,\n (left.a + right.a) / 2\n );\n}\n\nexport function averagingFusion(left: Opinion, right: Opinion): Opinion {\n if (left.u === 0 && right.u === 0) {\n return opinion(\n (left.b + right.b) / 2,\n (left.d + right.d) / 2,\n 0,\n (left.a + right.a) / 2\n );\n }\n\n const k = left.u + right.u;\n if (k === 0) {\n return vacuous((left.a + right.a) / 2);\n }\n\n return opinion(\n (left.b * right.u + right.b * left.u) / k,\n (left.d * right.u + right.d * left.u) / k,\n (2 * left.u * right.u) / k,\n (left.a + right.a) / 2\n );\n}\n\nexport function trustDiscount(sourceOpinion: Opinion, trust: number): Opinion {\n const weight = Math.max(0, Math.min(1, Math.abs(trust)));\n return opinion(\n weight * sourceOpinion.b,\n weight * sourceOpinion.d,\n 1 - weight * (sourceOpinion.b + sourceOpinion.d),\n sourceOpinion.a\n );\n}\n\nconst EPSILON = 1e-9;\n\nfunction childBaseRateFallback(\n ifTrue: Opinion,\n ifFalse: Opinion,\n fallbackBaseRate: number | undefined\n): number {\n if (fallbackBaseRate !== undefined) {\n return Math.max(0, Math.min(1, fallbackBaseRate));\n }\n\n if (Math.abs(ifTrue.a - ifFalse.a) <= EPSILON) {\n return ifTrue.a;\n }\n\n return (ifTrue.a + ifFalse.a) / 2;\n}\n\nfunction computeConditionalDeductionBaseRate(\n opinionA: Opinion,\n ifTrue: Opinion,\n ifFalse: Opinion,\n fallbackBaseRate: number\n): number {\n const denominator =\n 1 - opinionA.a * ifTrue.u - (1 - opinionA.a) * ifFalse.u;\n\n if (ifTrue.u + ifFalse.u < 2 - EPSILON && Math.abs(denominator) > EPSILON) {\n const baseRate =\n (opinionA.a * ifTrue.b + (1 - opinionA.a) * ifFalse.b) / denominator;\n if (baseRate >= -EPSILON && baseRate <= 1 + EPSILON) {\n return Math.max(0, Math.min(1, baseRate));\n }\n }\n\n return fallbackBaseRate;\n}\n\nfunction safeCorrectionTerm(\n numerator: number,\n denominator: number\n): number | undefined {\n if (Math.abs(denominator) <= EPSILON) {\n return undefined;\n }\n\n const value = numerator / denominator;\n if (!Number.isFinite(value)) {\n return undefined;\n }\n\n return Math.max(0, value);\n}\n\nexport function conditionalDeduction(\n opinionA: Opinion,\n ifTrue: Opinion,\n ifFalse: Opinion,\n fallbackBaseRate?: number\n): Opinion {\n const fallbackChildBaseRate = childBaseRateFallback(\n ifTrue,\n ifFalse,\n fallbackBaseRate\n );\n const childBaseRate = computeConditionalDeductionBaseRate(\n opinionA,\n ifTrue,\n ifFalse,\n fallbackChildBaseRate\n );\n const projectedAntecedent = project(opinionA);\n const projectedAntecedentComplement = 1 - projectedAntecedent;\n const intermediateBelief =\n opinionA.b * ifTrue.b +\n opinionA.d * ifFalse.b +\n opinionA.u * (ifTrue.b * opinionA.a + ifFalse.b * (1 - opinionA.a));\n const intermediateDisbelief =\n opinionA.b * ifTrue.d +\n opinionA.d * ifFalse.d +\n opinionA.u * (ifTrue.d * opinionA.a + ifFalse.d * (1 - opinionA.a));\n const intermediateUncertainty =\n opinionA.b * ifTrue.u +\n opinionA.d * ifFalse.u +\n opinionA.u * (ifTrue.u * opinionA.a + ifFalse.u * (1 - opinionA.a));\n const projectedVacuousDeduction =\n ifTrue.b * opinionA.a +\n ifFalse.b * (1 - opinionA.a) +\n childBaseRate *\n (ifTrue.u * opinionA.a + ifFalse.u * (1 - opinionA.a));\n const projectedConditionalA =\n ifTrue.b + childBaseRate * (1 - ifTrue.b - ifTrue.d);\n let correction = 0;\n\n if (\n (ifTrue.b > ifFalse.b && ifTrue.d > ifFalse.d) ||\n (ifTrue.b <= ifFalse.b && ifTrue.d <= ifFalse.d)\n ) {\n correction = 0;\n } else if (ifTrue.b > ifFalse.b && ifTrue.d <= ifFalse.d) {\n const beliefGap = ifTrue.b - ifFalse.b;\n const disbeliefGap = ifFalse.d - ifTrue.d;\n\n if (\n projectedVacuousDeduction <= projectedConditionalA &&\n projectedAntecedent <= opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n opinionA.a * opinionA.u * (intermediateBelief - ifTrue.b),\n projectedAntecedent * childBaseRate\n ) ?? 0;\n } else if (\n projectedVacuousDeduction <= projectedConditionalA &&\n projectedAntecedent > opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n opinionA.a * opinionA.u * (intermediateDisbelief - ifTrue.d) * beliefGap,\n projectedAntecedentComplement * childBaseRate * disbeliefGap\n ) ?? 0;\n } else if (\n projectedVacuousDeduction > projectedConditionalA &&\n projectedAntecedent <= opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n (1 - opinionA.a) *\n opinionA.u *\n (intermediateBelief - ifTrue.b) *\n disbeliefGap,\n projectedAntecedent * (1 - childBaseRate) * beliefGap\n ) ?? 0;\n } else {\n correction =\n safeCorrectionTerm(\n (1 - opinionA.a) * opinionA.u * (intermediateDisbelief - ifTrue.d),\n projectedAntecedentComplement * (1 - childBaseRate)\n ) ?? 0;\n }\n } else {\n const beliefGap = ifFalse.b - ifTrue.b;\n const disbeliefGap = ifTrue.d - ifFalse.d;\n\n if (\n projectedVacuousDeduction <= projectedConditionalA &&\n projectedAntecedent <= opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n (1 - opinionA.a) *\n opinionA.u *\n (intermediateDisbelief - ifTrue.d) *\n beliefGap,\n projectedAntecedent * childBaseRate * disbeliefGap\n ) ?? 0;\n } else if (\n projectedVacuousDeduction <= projectedConditionalA &&\n projectedAntecedent > opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n (1 - opinionA.a) * opinionA.u * (intermediateBelief - ifTrue.b),\n projectedAntecedentComplement * childBaseRate\n ) ?? 0;\n } else if (\n projectedVacuousDeduction > projectedConditionalA &&\n projectedAntecedent <= opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n opinionA.a * opinionA.u * (intermediateDisbelief - ifTrue.d),\n projectedAntecedent * (1 - childBaseRate)\n ) ?? 0;\n } else {\n correction =\n safeCorrectionTerm(\n opinionA.a *\n opinionA.u *\n (intermediateBelief - ifTrue.b) *\n disbeliefGap,\n projectedAntecedentComplement * (1 - childBaseRate) * beliefGap\n ) ?? 0;\n }\n }\n\n return opinion(\n intermediateBelief - childBaseRate * correction,\n intermediateDisbelief - (1 - childBaseRate) * correction,\n intermediateUncertainty + correction,\n childBaseRate\n );\n}\n\n/**\n * Abductive inference over a conditional.\n * Given an opinion on Y and conditionals P(Y|X), P(Y|~X), infer an opinion on X.\n */\nexport function conditionalAbduction(\n opinionY: Opinion,\n ifTrue: Opinion,\n ifFalse: Opinion,\n baseRateX: number\n): Opinion {\n const priorX = Math.max(0, Math.min(1, baseRateX));\n const probabilityY = project(opinionY);\n const probabilityGivenTrue = project(ifTrue);\n const probabilityGivenFalse = project(ifFalse);\n\n const posteriorIfYDenominator =\n probabilityGivenTrue * priorX +\n probabilityGivenFalse * (1 - priorX);\n const posteriorIfY =\n posteriorIfYDenominator === 0\n ? priorX\n : (probabilityGivenTrue * priorX) / posteriorIfYDenominator;\n\n const posteriorIfNotYDenominator =\n (1 - probabilityGivenTrue) * priorX +\n (1 - probabilityGivenFalse) * (1 - priorX);\n const posteriorIfNotY =\n posteriorIfNotYDenominator === 0\n ? priorX\n : ((1 - probabilityGivenTrue) * priorX) / posteriorIfNotYDenominator;\n\n const projectedX =\n probabilityY * posteriorIfY + (1 - probabilityY) * posteriorIfNotY;\n const uncertainty = Math.max(\n opinionY.u * 0.5,\n probabilityY * ifTrue.u + (1 - probabilityY) * ifFalse.u\n );\n\n return opinion(\n projectedX * (1 - uncertainty),\n (1 - projectedX) * (1 - uncertainty),\n uncertainty,\n priorX\n );\n}\n\nexport function negate(o: Opinion): Opinion {\n return { b: o.d, d: o.b, u: o.u, a: 1 - o.a };\n}\n\nexport function constraintFusion(\n left: Opinion,\n right: Opinion,\n mode: \"pressure\" | \"redistribute\" = \"pressure\"\n): { o1: Opinion; o2: Opinion } {\n if (mode === \"redistribute\") {\n const leftProjected = project(left);\n const rightProjected = project(right);\n const total = leftProjected + rightProjected;\n\n if (total <= 1) {\n return { o1: left, o2: right };\n }\n\n const scale = 1 / total;\n return {\n o1: opinion(\n left.b * scale,\n left.d + left.b * (1 - scale),\n left.u,\n left.a\n ),\n o2: opinion(\n right.b * scale,\n right.d + right.b * (1 - scale),\n right.u,\n right.a\n ),\n };\n }\n\n const pressureLeft = right.b * 0.5;\n const pressureRight = left.b * 0.5;\n\n return {\n o1: opinion(\n left.b - pressureLeft * 0.3,\n left.d + pressureLeft * 0.3,\n left.u,\n left.a\n ),\n o2: opinion(\n right.b - pressureRight * 0.3,\n right.d + pressureRight * 0.3,\n right.u,\n right.a\n ),\n };\n}\n\nexport function evidenceBalance(o: Opinion): number {\n const total = o.b + o.d;\n if (total === 0) {\n return 0;\n }\n return (o.b - o.d) / total;\n}\n\nexport function areTensioned(left: Opinion, right: Opinion): boolean {\n return (\n project(left) > 0.5 &&\n project(right) > 0.5 &&\n (left.d > 0.2 || right.d > 0.2)\n );\n}\n\nexport function informationGain(o: Opinion): number {\n if (o.u === 0) {\n return 0;\n }\n if (o.u === 1) {\n return 1;\n }\n return o.u * (1 - Math.abs(o.b - o.d));\n}\n","import type { Opinion, StoredOpinionFields } from \"../types\";\nimport { dogmatic, vacuous } from \"./subjectiveLogic\";\n\nfunction finiteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nexport function clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nexport function confidenceFromOpinion(opinion: Opinion): number {\n return clamp01(opinion.b + opinion.a * opinion.u);\n}\n\nexport function confidenceFromSL(\n belief: number,\n _disbelief: number,\n uncertainty: number,\n baseRate: number = 0.5\n): number {\n return confidenceFromOpinion({\n b: belief,\n d: _disbelief,\n u: uncertainty,\n a: baseRate,\n });\n}\n\nexport function toStoredOpinionFields(opinion: Opinion): StoredOpinionFields {\n return {\n belief: opinion.b,\n disbelief: opinion.d,\n uncertainty: opinion.u,\n baseRate: opinion.a,\n };\n}\n\nexport function readOpinionFromRecord(\n source: unknown,\n fallback: Partial<Opinion> = {}\n): Opinion {\n const record =\n source && typeof source === \"object\"\n ? (source as Record<string, unknown>)\n : {};\n\n return {\n b:\n finiteNumber(record.b) ??\n finiteNumber(record.belief) ??\n finiteNumber(record.slBelief) ??\n finiteNumber(record.opinion_b) ??\n fallback.b ??\n 0,\n d:\n finiteNumber(record.d) ??\n finiteNumber(record.disbelief) ??\n finiteNumber(record.slDisbelief) ??\n finiteNumber(record.opinion_d) ??\n fallback.d ??\n 0,\n u:\n finiteNumber(record.u) ??\n finiteNumber(record.uncertainty) ??\n finiteNumber(record.slUncertainty) ??\n finiteNumber(record.opinion_u) ??\n fallback.u ??\n 1,\n a:\n finiteNumber(record.a) ??\n finiteNumber(record.baseRate) ??\n finiteNumber(record.slBaseRate) ??\n finiteNumber(record.opinion_a) ??\n fallback.a ??\n 0.5,\n };\n}\n\nexport type OpinionFromScalarMode =\n | \"base_rate\"\n | \"dogmatic\"\n | \"projected_with_u\";\n\nexport function opinionFromScalar(\n value: number,\n mode: OpinionFromScalarMode,\n options?: { baseRate?: number; uncertainty?: number }\n): Opinion {\n const clampedValue = clamp01(value);\n const baseRate = clamp01(options?.baseRate ?? 0.5);\n\n switch (mode) {\n case \"base_rate\":\n return {\n b: 0,\n d: 0,\n u: 1,\n a: clampedValue,\n };\n case \"dogmatic\":\n return {\n b: clampedValue,\n d: 1 - clampedValue,\n u: 0,\n a: baseRate,\n };\n case \"projected_with_u\": {\n const uncertainty = options?.uncertainty;\n if (uncertainty === undefined) {\n throw new Error(\n \"opinionFromScalar(value, \\\"projected_with_u\\\") requires options.uncertainty.\"\n );\n }\n const clampedUncertainty = clamp01(uncertainty);\n const evidenceWeight = 1 - clampedUncertainty;\n return {\n b: clampedValue * evidenceWeight,\n d: (1 - clampedValue) * evidenceWeight,\n u: clampedUncertainty,\n a: baseRate,\n };\n }\n }\n\n throw new Error(`Unsupported opinionFromScalar mode: ${mode}`);\n}\n\n/**\n * @deprecated Use opinionFromScalar(value, \"dogmatic\", { baseRate }) instead.\n */\nexport function toDogmaticOpinion(\n confidence: number,\n baseRate: number = 0.5\n): Opinion {\n return opinionFromScalar(confidence, \"dogmatic\", { baseRate });\n}\n\n/** Interpret p as a prior with no observed evidence. */\nexport function opinionFromBaseRate(probability: number): Opinion {\n return vacuous(clamp01(probability));\n}\n\n/** Interpret p as a certainty-equivalent projected probability. */\nexport function opinionFromDogmatic(\n probability: number,\n baseRate: number = 0.5\n): Opinion {\n return dogmatic(clamp01(probability), clamp01(baseRate));\n}\n\n/**\n * Interpret p as a projected probability with an explicit uncertainty bucket.\n * The resulting opinion always projects back to p.\n */\nexport function opinionFromProjected(\n probability: number,\n uncertainty: number,\n baseRate: number = 0.5\n): Opinion {\n const p = clamp01(probability);\n const u = clamp01(uncertainty);\n const remainingMass = 1 - u;\n return {\n b: p * remainingMass,\n d: (1 - p) * remainingMass,\n u,\n a: clamp01(baseRate),\n };\n}\n\nexport function hasProjectedOpinionChanged(\n current: Opinion,\n next: Opinion,\n tolerance: number = 0.01\n): boolean {\n return Math.abs(confidenceFromOpinion(next) - confidenceFromOpinion(current)) >=\n tolerance;\n}\n","import type {\n Opinion,\n TupleContradictionPolicy,\n TupleContradictionTransition,\n} from \"../../types\";\nimport { clamp01 } from \"../scoring\";\n\nexport const DEFAULT_TUPLE_CONTRADICTION_BELIEF_THRESHOLD = 0.7;\nexport const DEFAULT_TUPLE_CONTRADICTION_DISBELIEF_THRESHOLD = 0.7;\n\nexport function normalizeTupleContradictionPolicy(\n policy: Partial<TupleContradictionPolicy> = {}\n): TupleContradictionPolicy {\n return {\n beliefThreshold: clamp01(\n policy.beliefThreshold ?? DEFAULT_TUPLE_CONTRADICTION_BELIEF_THRESHOLD\n ),\n disbeliefThreshold: clamp01(\n policy.disbeliefThreshold ??\n DEFAULT_TUPLE_CONTRADICTION_DISBELIEF_THRESHOLD\n ),\n };\n}\n\nexport function detectTupleContradiction(\n opinion: Opinion,\n tauB: number = DEFAULT_TUPLE_CONTRADICTION_BELIEF_THRESHOLD,\n tauD: number = DEFAULT_TUPLE_CONTRADICTION_DISBELIEF_THRESHOLD\n): boolean {\n return opinion.b > tauB && opinion.d > tauD;\n}\n\nexport function evaluateTupleContradictionTransition(args: {\n previousTupleContradicted?: boolean;\n opinion: Opinion;\n policy?: Partial<TupleContradictionPolicy>;\n}): TupleContradictionTransition {\n const policy = normalizeTupleContradictionPolicy(args.policy);\n const tupleContradicted = detectTupleContradiction(\n args.opinion,\n policy.beliefThreshold,\n policy.disbeliefThreshold\n );\n const previousTupleContradicted = Boolean(args.previousTupleContradicted);\n\n return {\n tupleContradicted,\n crossedIntoTupleContradiction:\n !previousTupleContradicted && tupleContradicted,\n crossedOutOfTupleContradiction:\n previousTupleContradicted && !tupleContradicted,\n policy,\n };\n}\n","import type { Opinion, PropagationMode, PropagationResult } from \"../../types\";\nimport { opinion, project } from \"../subjectiveLogic\";\n\nexport function dampedDependencyOpinion(\n dependencyOpinion: Opinion,\n beliefOpinion: Opinion,\n mode: PropagationMode = \"continuous\",\n threshold: number = 0.3\n): Opinion {\n const dependencyProjection = project(dependencyOpinion);\n\n if (mode === \"threshold\") {\n if (dependencyProjection < threshold) {\n return opinion(\n 0,\n beliefOpinion.d + beliefOpinion.b * 0.5,\n 0.5,\n beliefOpinion.a\n );\n }\n return beliefOpinion;\n }\n\n const dampingFactor = Math.pow(dependencyProjection, 0.5);\n return opinion(\n beliefOpinion.b * dampingFactor,\n beliefOpinion.d + beliefOpinion.b * (1 - dampingFactor) * 0.3,\n beliefOpinion.u + beliefOpinion.b * (1 - dampingFactor) * 0.7,\n beliefOpinion.a\n );\n}\n\nexport function dampedDependencyCascade(\n dependencyOpinion: Opinion,\n beliefOpinion: Opinion,\n mode: PropagationMode = \"continuous\"\n): PropagationResult {\n return {\n opinion: dampedDependencyOpinion(dependencyOpinion, beliefOpinion, mode),\n operator: \"dependency_cascade\",\n rationale: `Damped dependency cascade (${mode}): prerequisite at ${project(\n dependencyOpinion\n ).toFixed(2)}`,\n };\n}\n","import type { EdgeMetadata, Opinion, PropagationResult } from \"../../types\";\nimport {\n constraintFusion,\n cumulativeFusion,\n negate,\n project,\n trustDiscount,\n} from \"../subjectiveLogic\";\n\nexport function applyNegativeSupport(\n source: Opinion,\n target: Opinion,\n weight: number,\n metadata: EdgeMetadata = {}\n): PropagationResult {\n if (metadata.constraint === \"xor\") {\n const result = constraintFusion(\n source,\n target,\n metadata.normalization ?? \"pressure\"\n );\n return {\n opinion: result.o2,\n operator: \"constraint_fusion\",\n rationale: `XOR constraint: source belief at ${project(source).toFixed(\n 2\n )} pressures target`,\n };\n }\n\n const discounted = trustDiscount(negate(source), Math.abs(weight));\n return {\n opinion: cumulativeFusion(target, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Contradicting evidence (weight=${weight.toFixed(\n 2\n )}) from source at ${project(source).toFixed(2)}`,\n };\n}\n\nexport function applyNegativeEvidence(\n source: Opinion,\n target: Opinion,\n weight: number\n): PropagationResult {\n const discounted = trustDiscount(negate(source), Math.abs(weight));\n return {\n opinion: cumulativeFusion(target, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Contradicting evidence (weight=${weight.toFixed(2)})`,\n };\n}\n","import type {\n ContractModulationPlan,\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n EpistemicContractModulation,\n EpistemicContractRecord,\n EpistemicContractStatus,\n EvidentialAction,\n EvidentialEvaluatorConfig,\n EvidentialMetricSnapshot,\n EvidentialOperator,\n MarketIndexComparatorConfig,\n MetricCheckerEvaluatorConfig,\n ReferenceCheckCounterConfig,\n TemporalDeadlineEvaluatorConfig,\n VerificationConfidenceTrigger,\n} from \"../../types\";\n\nexport const BUILT_IN_EVIDENTIAL_EVALUATOR = \"evidential\";\nexport const BUILT_IN_EVIDENTIAL_ALIASES = new Set([\n BUILT_IN_EVIDENTIAL_EVALUATOR,\n \"built_in_evidential\",\n \"builtin_evidential\",\n]);\nexport const BUILT_IN_METRIC_CHECKER = \"metric_checker\";\nexport const BUILT_IN_REFERENCE_CHECK_COUNTER = \"reference_check_counter\";\nexport const BUILT_IN_TEMPORAL_DEADLINE = \"temporal_deadline\";\nexport const BUILT_IN_MARKET_INDEX_COMPARATOR = \"market_index_comparator\";\n\nfunction clampConfidence(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nfunction generateContractId(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return `contract-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nexport function deriveContractStatus(\n result: EpistemicContractEvaluationResult,\n currentStatus: EpistemicContractStatus\n): EpistemicContractStatus {\n if (currentStatus === \"archived\") {\n return currentStatus;\n }\n\n switch (result) {\n case \"confirmed\":\n return \"satisfied\";\n case \"disconfirmed\":\n return \"violated\";\n case \"expired\":\n return \"expired\";\n default:\n return currentStatus === \"satisfied\" ||\n currentStatus === \"violated\" ||\n currentStatus === \"expired\"\n ? \"active\"\n : currentStatus;\n }\n}\n\nexport function deriveVerificationTrigger(\n result: EpistemicContractEvaluationResult\n): VerificationConfidenceTrigger | null {\n switch (result) {\n case \"confirmed\":\n return \"verification_confirmed\";\n case \"disconfirmed\":\n return \"verification_disconfirmed\";\n case \"expired\":\n return \"verification_expired\";\n case \"partial\":\n return \"verification_partial\";\n default:\n return null;\n }\n}\n\nexport function deriveContractModulationPlan(args: {\n currentConfidence: number;\n modulation: EpistemicContractModulation;\n result: EpistemicContractEvaluationResult;\n resultConfidence?: number;\n}): ContractModulationPlan | null {\n const trigger = deriveVerificationTrigger(args.result);\n if (!trigger) {\n return null;\n }\n\n if (args.result === \"confirmed\") {\n const rawNext = args.currentConfidence + args.modulation.onConfirmed.delta;\n const confidenceAfter = clampConfidence(\n Math.min(\n args.modulation.onConfirmed.ceiling ?? Number.POSITIVE_INFINITY,\n rawNext\n )\n );\n return {\n trigger,\n confidenceBefore: args.currentConfidence,\n confidenceAfter,\n confidenceDelta: confidenceAfter - args.currentConfidence,\n };\n }\n\n if (args.result === \"disconfirmed\") {\n const rawNext =\n args.currentConfidence + args.modulation.onDisconfirmed.delta;\n const confidenceAfter = clampConfidence(\n Math.max(args.modulation.onDisconfirmed.floor ?? 0, rawNext)\n );\n return {\n trigger,\n confidenceBefore: args.currentConfidence,\n confidenceAfter,\n confidenceDelta: confidenceAfter - args.currentConfidence,\n };\n }\n\n if (args.result === \"expired\" && args.modulation.onExpired) {\n const confidenceAfter = clampConfidence(\n args.currentConfidence + args.modulation.onExpired.delta\n );\n return {\n trigger,\n confidenceBefore: args.currentConfidence,\n confidenceAfter,\n confidenceDelta: confidenceAfter - args.currentConfidence,\n };\n }\n\n if (args.result === \"partial\" && args.modulation.onPartial) {\n if ((args.resultConfidence ?? 0) < args.modulation.onPartial.threshold) {\n return null;\n }\n const confidenceAfter = clampConfidence(\n args.currentConfidence + args.modulation.onPartial.delta\n );\n return {\n trigger,\n confidenceBefore: args.currentConfidence,\n confidenceAfter,\n confidenceDelta: confidenceAfter - args.currentConfidence,\n };\n }\n\n return null;\n}\n\nexport function createInheritedContractRecord<\n TBeliefId = string,\n TTopicId = string | undefined,\n>(\n contract: EpistemicContractRecord<any, any>,\n args: {\n beliefNodeId: TBeliefId;\n topicId?: TTopicId;\n createdBy: string;\n now: number;\n }\n): EpistemicContractRecord<TBeliefId, TTopicId> {\n return {\n beliefNodeId: args.beliefNodeId,\n contractId: generateContractId(),\n title: contract.title,\n description: contract.description,\n conditionType: contract.conditionType,\n direction: contract.direction,\n condition: contract.condition,\n deadline: contract.deadline,\n compositeOf: contract.compositeOf,\n compositeOperator: contract.compositeOperator,\n modulation: contract.modulation,\n evaluationSchedule: contract.evaluationSchedule,\n periodicIntervalMs: contract.periodicIntervalMs,\n status: \"active\",\n lineageSource: \"inherited\",\n inheritedFromContractId: contract.contractId,\n inheritedFromBeliefNodeId: contract.beliefNodeId as TBeliefId,\n inheritedAt: args.now,\n topicId: args.topicId,\n createdAt: args.now,\n createdBy: args.createdBy,\n updatedAt: args.now,\n };\n}\n\nexport function normalizeEvidentialAction(\n value: unknown\n): EvidentialAction | undefined {\n return value === \"modulate_confidence\" ||\n value === \"flag_review\" ||\n value === \"archive\"\n ? value\n : undefined;\n}\n\nexport function parseComparisonOperator(\n value: unknown,\n evaluatorName: string\n): EvidentialOperator {\n if (\n value === \"gte\" ||\n value === \"lte\" ||\n value === \"eq\" ||\n value === \"gt\" ||\n value === \"lt\"\n ) {\n return value;\n }\n throw new Error(\n `${evaluatorName} requires operator to be one of gte, lte, eq, gt, or lt.`\n );\n}\n\nexport function parseNumericThreshold(\n value: unknown,\n evaluatorName: string\n): number {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n throw new Error(`${evaluatorName} requires a finite numeric threshold.`);\n}\n\nexport function pickFiniteNumber(\n config: Record<string, unknown>,\n keys: string[]\n): number | undefined {\n for (const key of keys) {\n const value = config[key];\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n }\n return undefined;\n}\n\nexport function getEvaluatorInputRecord(\n inputData: unknown,\n nestedKey: string\n): Record<string, unknown> {\n if (!inputData || typeof inputData !== \"object\") {\n return {};\n }\n\n const root = inputData as Record<string, unknown>;\n const nested = root[nestedKey];\n if (nested && typeof nested === \"object\") {\n return nested as Record<string, unknown>;\n }\n return root;\n}\n\nexport function parseEvidentialEvaluatorConfig(\n value: unknown\n): EvidentialEvaluatorConfig {\n if (!value || typeof value !== \"object\") {\n throw new Error(\n \"Evidential contracts require condition.evaluatorConfig with metric/operator/threshold.\"\n );\n }\n\n const config = value as Record<string, unknown>;\n const metric = config.metric;\n const operator = config.operator;\n const threshold = config.threshold;\n\n if (\n metric !== \"evidence_count\" &&\n metric !== \"contradiction_status\" &&\n metric !== \"edge_freshness\" &&\n metric !== \"dependent_count\"\n ) {\n throw new Error(`Unsupported evidential metric: ${String(metric)}`);\n }\n\n if (\n operator !== \"gte\" &&\n operator !== \"lte\" &&\n operator !== \"eq\" &&\n operator !== \"gt\" &&\n operator !== \"lt\"\n ) {\n throw new Error(`Unsupported evidential operator: ${String(operator)}`);\n }\n\n if (typeof threshold !== \"number\" || !Number.isFinite(threshold)) {\n throw new Error(\"Evidential contracts require a numeric threshold.\");\n }\n\n const actionParams =\n config.actionParams &&\n typeof config.actionParams === \"object\" &&\n config.actionParams !== null\n ? (config.actionParams as Record<string, unknown>)\n : undefined;\n\n return {\n metric,\n operator,\n threshold,\n action: normalizeEvidentialAction(config.action),\n actionParams:\n actionParams &&\n (typeof actionParams.targetConfidence === \"number\" ||\n typeof actionParams.rationale === \"string\")\n ? {\n targetConfidence:\n typeof actionParams.targetConfidence === \"number\"\n ? actionParams.targetConfidence\n : undefined,\n rationale:\n typeof actionParams.rationale === \"string\"\n ? actionParams.rationale\n : undefined,\n }\n : undefined,\n };\n}\n\nexport function compareMetricValue(\n operator: EvidentialOperator,\n left: number,\n right: number\n): boolean {\n switch (operator) {\n case \"gte\":\n return left >= right;\n case \"lte\":\n return left <= right;\n case \"eq\":\n return left === right;\n case \"gt\":\n return left > right;\n case \"lt\":\n return left < right;\n default:\n return false;\n }\n}\n\nexport function resolveComparisonResult(\n direction: EpistemicContractDirection,\n comparisonSatisfied: boolean\n): EpistemicContractEvaluationResult {\n return direction === \"falsifies\"\n ? comparisonSatisfied\n ? \"disconfirmed\"\n : \"confirmed\"\n : comparisonSatisfied\n ? \"confirmed\"\n : \"disconfirmed\";\n}\n\nexport function buildComparisonRationale(args: {\n label: string;\n observedValue: number | null;\n operator: EvidentialOperator;\n threshold: number;\n comparisonSatisfied: boolean;\n result: EpistemicContractEvaluationResult;\n unit?: string;\n}): string {\n const renderedObserved =\n args.observedValue === null\n ? \"no data\"\n : `${args.observedValue}${args.unit ? ` ${args.unit}` : \"\"}`;\n const renderedThreshold = `${args.threshold}${args.unit ? ` ${args.unit}` : \"\"}`;\n const clause = `${args.label} observed ${renderedObserved} against ${args.operator} ${renderedThreshold}`;\n\n if (args.observedValue === null) {\n return `${clause}; evaluator returned ${args.result} because no current data was available.`;\n }\n\n return `${clause}; comparison ${\n args.comparisonSatisfied ? \"passed\" : \"failed\"\n }, resulting in ${args.result}.`;\n}\n\nexport function buildEvidentialRationale(args: {\n config: EvidentialEvaluatorConfig;\n snapshot: EvidentialMetricSnapshot;\n comparisonSatisfied: boolean;\n result: EpistemicContractEvaluationResult;\n}): string {\n const observed =\n args.snapshot.value === null ? \"no data\" : String(args.snapshot.value);\n const clause = `${args.snapshot.metric} observed ${observed} against ${args.config.operator} ${args.config.threshold}`;\n\n if (args.snapshot.value === null) {\n return `${clause}; evidential evaluator treated the comparison as unmet, resulting in ${args.result}.`;\n }\n\n return `${clause}; comparison ${\n args.comparisonSatisfied ? \"passed\" : \"failed\"\n }, resulting in ${args.result}.`;\n}\n\nexport function parseMetricCheckerConfig(\n value: unknown\n): MetricCheckerEvaluatorConfig {\n if (!value || typeof value !== \"object\") {\n throw new Error(\n \"metric_checker requires condition.evaluatorConfig with observedValue/operator/threshold.\"\n );\n }\n\n const config = value as Record<string, unknown>;\n return {\n metric:\n typeof config.metric === \"string\" && config.metric.length > 0\n ? config.metric\n : undefined,\n operator: parseComparisonOperator(config.operator, BUILT_IN_METRIC_CHECKER),\n threshold: parseNumericThreshold(config.threshold, BUILT_IN_METRIC_CHECKER),\n observedValue: pickFiniteNumber(config, [\"observedValue\", \"value\"]),\n currentValue: pickFiniteNumber(config, [\"currentValue\"]),\n metricValue: pickFiniteNumber(config, [\"metricValue\"]),\n unit:\n typeof config.unit === \"string\" && config.unit.length > 0\n ? config.unit\n : undefined,\n };\n}\n\nexport function parseReferenceCheckCounterConfig(\n value: unknown\n): ReferenceCheckCounterConfig {\n if (!value || typeof value !== \"object\") {\n throw new Error(\n \"reference_check_counter requires condition.evaluatorConfig with tag/operator/threshold.\"\n );\n }\n\n const config = value as Record<string, unknown>;\n if (typeof config.tag !== \"string\" || config.tag.trim().length === 0) {\n throw new Error(\"reference_check_counter requires a non-empty tag.\");\n }\n\n return {\n tag: config.tag.trim(),\n operator: parseComparisonOperator(\n config.operator,\n BUILT_IN_REFERENCE_CHECK_COUNTER\n ),\n threshold: parseNumericThreshold(\n config.threshold,\n BUILT_IN_REFERENCE_CHECK_COUNTER\n ),\n caseSensitive: config.caseSensitive === true,\n };\n}\n\nexport function parseTemporalDeadlineConfig(\n value: unknown\n): TemporalDeadlineEvaluatorConfig {\n if (!value || typeof value !== \"object\") {\n return {};\n }\n\n const config = value as Record<string, unknown>;\n return {\n label:\n typeof config.label === \"string\" && config.label.length > 0\n ? config.label\n : undefined,\n completed: config.completed === true,\n completedAt: pickFiniteNumber(config, [\"completedAt\"]),\n observedAt: pickFiniteNumber(config, [\"observedAt\"]),\n satisfiedAt: pickFiniteNumber(config, [\"satisfiedAt\"]),\n achievedAt: pickFiniteNumber(config, [\"achievedAt\"]),\n };\n}\n\nexport function parseMarketIndexComparatorConfig(\n value: unknown\n): MarketIndexComparatorConfig {\n if (!value || typeof value !== \"object\") {\n throw new Error(\n \"market_index_comparator requires condition.evaluatorConfig with subjectValue/benchmarkValue/operator/threshold.\"\n );\n }\n\n const config = value as Record<string, unknown>;\n return {\n subject:\n typeof config.subject === \"string\" && config.subject.length > 0\n ? config.subject\n : undefined,\n subjectValue: pickFiniteNumber(config, [\"subjectValue\", \"leftValue\"]),\n primaryValue: pickFiniteNumber(config, [\"primaryValue\"]),\n benchmark:\n typeof config.benchmark === \"string\" && config.benchmark.length > 0\n ? config.benchmark\n : undefined,\n benchmarkValue: pickFiniteNumber(config, [\"benchmarkValue\", \"rightValue\"]),\n comparisonValue: pickFiniteNumber(config, [\"comparisonValue\"]),\n operator: parseComparisonOperator(\n config.operator,\n BUILT_IN_MARKET_INDEX_COMPARATOR\n ),\n threshold: parseNumericThreshold(\n config.threshold,\n BUILT_IN_MARKET_INDEX_COMPARATOR\n ),\n };\n}\n","/**\n * Audience Helpers\n *\n * Shared audience normalization and exposure-class utilities for policy/runtime paths.\n */\n\nexport type AudienceMode = \"internal\" | \"lp\" | \"public\";\nexport type AudienceClass = \"internal\" | \"restricted_external\" | \"public\";\n\nexport type ResolvedAudience = {\n audienceKey: string;\n audienceClass: AudienceClass;\n audienceMode: AudienceMode;\n};\n\nexport const AUDIENCE_CLASS_RANK: Record<AudienceClass, number> = {\n public: 0,\n restricted_external: 1,\n internal: 2,\n};\n\nfunction normalizeKey(key: string | undefined | null): string {\n return (key ?? \"\")\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9:_-]+/g, \"_\")\n .replace(/_+/g, \"_\")\n .replace(/^_+|_+$/g, \"\");\n}\n\nexport function normalizeAudienceKey(key: string | undefined | null): string {\n return normalizeKey(key);\n}\n\nexport function normalizeAudienceMode(\n mode: string | undefined | null\n): AudienceMode {\n if (mode === \"public\" || mode === \"lp\" || mode === \"internal\") {\n return mode;\n }\n return \"internal\";\n}\n\nexport function classFromAudienceMode(mode: AudienceMode): AudienceClass {\n if (mode === \"public\") {\n return \"public\";\n }\n if (mode === \"lp\") {\n return \"restricted_external\";\n }\n return \"internal\";\n}\n\nexport function modeFromAudienceClass(\n audienceClass: AudienceClass\n): AudienceMode {\n if (audienceClass === \"public\") {\n return \"public\";\n }\n if (audienceClass === \"restricted_external\") {\n return \"lp\";\n }\n return \"internal\";\n}\n\nexport function classFromAudienceKey(\n audienceKey: string | undefined | null,\n fallback: AudienceClass = \"internal\"\n): AudienceClass {\n const key = normalizeKey(audienceKey);\n if (!key) {\n return fallback;\n }\n if (key === \"internal\") {\n return \"internal\";\n }\n if (key === \"public\") {\n return \"public\";\n }\n if (\n key === \"lp\" ||\n key === \"external\" ||\n key === \"client\" ||\n key === \"partner\" ||\n key === \"portfolio\" ||\n key === \"network\" ||\n key === \"restricted_external\"\n ) {\n return \"restricted_external\";\n }\n return fallback;\n}\n\nexport function resolveAudience(args?: {\n audienceMode?: string | null;\n audienceKey?: string | null;\n audienceClass?: AudienceClass | null;\n}): ResolvedAudience {\n const fallbackMode = normalizeAudienceMode(args?.audienceMode);\n const fallbackKey = normalizeKey(args?.audienceKey) || fallbackMode;\n const fallbackClass =\n args?.audienceClass ?? classFromAudienceKey(fallbackKey);\n\n return {\n audienceKey: fallbackKey,\n audienceClass: fallbackClass,\n audienceMode: modeFromAudienceClass(fallbackClass),\n };\n}\n\nexport function canViewAudienceLabel(\n viewerAudience: string,\n resourceAudienceLabel: string | undefined | null\n): boolean {\n // Viewer fallback is least privilege; resource fallback is most restrictive.\n const viewerClass = classFromAudienceKey(viewerAudience, \"public\");\n const resourceClass = classFromAudienceKey(resourceAudienceLabel, \"internal\");\n return canAudienceClassAccess(viewerClass, resourceClass);\n}\n\nexport function canAudienceClassAccess(\n viewerClass: AudienceClass,\n resourceClass: AudienceClass\n): boolean {\n return AUDIENCE_CLASS_RANK[viewerClass] >= AUDIENCE_CLASS_RANK[resourceClass];\n}\n","/**\n * Audience Registry Kernel\n *\n * Tenant/workspace audience taxonomy resolution and principal audience-scope derivation.\n */\n\nimport {\n type AudienceClass,\n type AudienceMode,\n canAudienceClassAccess,\n classFromAudienceKey,\n classFromAudienceMode,\n modeFromAudienceClass,\n normalizeAudienceKey,\n normalizeAudienceMode,\n type ResolvedAudience,\n} from \"./audience\";\nimport type { MutationCtx, QueryCtx } from \"./convex\";\n\ntype DbCtx = QueryCtx | MutationCtx;\n\ntype AudienceRegistryRow = {\n audienceKey: string;\n audienceLabel: string;\n audienceClass: AudienceClass;\n workspaceId?: string;\n};\n\nconst DEFAULT_AUDIENCES: AudienceRegistryRow[] = [\n {\n audienceKey: \"internal\",\n audienceLabel: \"Internal\",\n audienceClass: \"internal\",\n },\n {\n audienceKey: \"lp\",\n audienceLabel: \"Limited Partners\",\n audienceClass: \"restricted_external\",\n },\n {\n audienceKey: \"public\",\n audienceLabel: \"Public\",\n audienceClass: \"public\",\n },\n];\n\nconst AUDIENCE_CLASS_PRIORITY: Record<AudienceClass, number> = {\n internal: 0,\n restricted_external: 1,\n public: 2,\n};\n\nexport type AllowedAudienceScope = {\n allowedAudienceClasses: AudienceClass[];\n allowedAudienceKeys: string[];\n allowedAudienceModes: AudienceMode[];\n};\n\nexport type PrincipalAudienceScope = {\n mode: \"legacy_open\" | \"grant_enforced\" | \"admin_override\";\n grantModelEnabled: boolean;\n grantedAudienceKeys: string[];\n grantedAudienceClasses: AudienceClass[];\n allowedAudienceKeys: string[];\n allowedAudienceClasses: AudienceClass[];\n allowedAudienceModes: AudienceMode[];\n};\n\nexport function deriveAllowedAudienceClasses(\n visibility: string | undefined | null\n): AudienceClass[] {\n if (visibility === \"public\") {\n return [\"internal\", \"restricted_external\", \"public\"];\n }\n if (visibility === \"firm\" || visibility === \"external\") {\n return [\"internal\", \"restricted_external\"];\n }\n return [\"internal\"];\n}\n\nfunction unique<T>(items: T[]): T[] {\n return [...new Set(items)];\n}\n\nfunction intersect<T>(left: T[], right: T[]): T[] {\n const rightSet = new Set(right);\n return left.filter((entry) => rightSet.has(entry));\n}\n\nfunction fallbackAudienceKeyForClass(audienceClass: AudienceClass): string {\n if (audienceClass === \"public\") {\n return \"public\";\n }\n if (audienceClass === \"restricted_external\") {\n return \"lp\";\n }\n return \"internal\";\n}\n\nfunction normalizeRegistryRow(row: {\n audienceKey: string;\n audienceLabel: string;\n audienceClass: AudienceClass;\n workspaceId?: string;\n}): AudienceRegistryRow {\n return {\n audienceKey: normalizeAudienceKey(row.audienceKey),\n audienceLabel: row.audienceLabel,\n audienceClass: row.audienceClass,\n workspaceId: row.workspaceId,\n };\n}\n\nfunction dedupeRegistryRows(\n rows: AudienceRegistryRow[]\n): AudienceRegistryRow[] {\n const byKey = new Map<string, AudienceRegistryRow>();\n\n for (const row of rows) {\n const key = normalizeAudienceKey(row.audienceKey);\n if (!key) {\n continue;\n }\n const existing = byKey.get(key);\n const isWorkspaceScoped = row.workspaceId !== undefined;\n const existingWorkspaceScoped = existing?.workspaceId !== undefined;\n\n if (!existing || (isWorkspaceScoped && !existingWorkspaceScoped)) {\n byKey.set(key, {\n ...row,\n audienceKey: key,\n });\n }\n }\n\n const normalized = [...byKey.values()];\n normalized.sort((a, b) => {\n const classDelta =\n AUDIENCE_CLASS_PRIORITY[a.audienceClass] -\n AUDIENCE_CLASS_PRIORITY[b.audienceClass];\n if (classDelta !== 0) {\n return classDelta;\n }\n return a.audienceKey.localeCompare(b.audienceKey);\n });\n return normalized;\n}\n\nfunction isGrantActive(grant: {\n status: \"active\" | \"revoked\" | \"expired\";\n expiresAt?: number;\n}): boolean {\n if (grant.status !== \"active\") {\n return false;\n }\n if (grant.expiresAt !== undefined && grant.expiresAt <= Date.now()) {\n return false;\n }\n return true;\n}\n\nfunction isWorkspaceScopeMatch(args: {\n rowWorkspaceId?: string;\n workspaceId?: string | null;\n}): boolean {\n if (!args.rowWorkspaceId) {\n return true;\n }\n if (!args.workspaceId) {\n return false;\n }\n return String(args.rowWorkspaceId) === String(args.workspaceId);\n}\n\nasync function queryRegistryRows(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n }\n): Promise<AudienceRegistryRow[]> {\n if (!args.tenantId) {\n return [...DEFAULT_AUDIENCES];\n }\n\n const rows = await ctx.db\n .query(\"platformAudiences\")\n .withIndex(\"by_tenantId\", (q) => q.eq(\"tenantId\", args.tenantId!))\n .collect();\n\n const workspaceIdString = args.workspaceId ? String(args.workspaceId) : null;\n const tenantScoped = rows.filter((row) => row.status === \"active\");\n const applicable = tenantScoped.filter((row) => {\n if (!row.workspaceId) {\n return true;\n }\n if (!workspaceIdString) {\n return false;\n }\n return String(row.workspaceId) === workspaceIdString;\n });\n\n return dedupeRegistryRows([\n ...DEFAULT_AUDIENCES,\n ...applicable.map((row) =>\n normalizeRegistryRow({\n audienceKey: row.audienceKey,\n audienceLabel: row.audienceLabel,\n audienceClass: row.audienceClass,\n workspaceId: row.workspaceId,\n })\n ),\n ]);\n}\n\nexport async function listAudienceRegistryRows(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n }\n): Promise<AudienceRegistryRow[]> {\n return queryRegistryRows(ctx, args);\n}\n\nexport async function resolveAudienceFromRegistry(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n audienceMode?: string | null;\n audienceKey?: string | null;\n audienceClass?: AudienceClass | null;\n }\n): Promise<ResolvedAudience> {\n const normalizedMode = normalizeAudienceMode(args.audienceMode);\n const requestedKey =\n normalizeAudienceKey(args.audienceKey) ||\n normalizeAudienceKey(normalizedMode) ||\n \"internal\";\n const registry = await queryRegistryRows(ctx, {\n tenantId: args.tenantId,\n workspaceId: args.workspaceId,\n });\n\n const registryMatch = registry.find(\n (entry) => normalizeAudienceKey(entry.audienceKey) === requestedKey\n );\n if (registryMatch) {\n return {\n audienceKey: requestedKey,\n audienceClass: registryMatch.audienceClass,\n audienceMode: modeFromAudienceClass(registryMatch.audienceClass),\n };\n }\n\n if (args.audienceClass) {\n return {\n audienceKey: requestedKey,\n audienceClass: args.audienceClass,\n audienceMode: modeFromAudienceClass(args.audienceClass),\n };\n }\n\n if (args.audienceKey) {\n return {\n audienceKey: requestedKey,\n audienceClass: \"internal\",\n audienceMode: \"internal\",\n };\n }\n\n return {\n audienceKey: requestedKey,\n audienceClass: classFromAudienceMode(normalizedMode),\n audienceMode: normalizedMode,\n };\n}\n\nexport async function resolveAudienceClassFromRegistry(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n audienceKey?: string | null;\n fallbackClass?: AudienceClass;\n }\n): Promise<AudienceClass> {\n const normalizedKey = normalizeAudienceKey(args.audienceKey);\n if (!normalizedKey) {\n return args.fallbackClass ?? \"internal\";\n }\n\n const registry = await queryRegistryRows(ctx, {\n tenantId: args.tenantId,\n workspaceId: args.workspaceId,\n });\n const match = registry.find(\n (entry) => normalizeAudienceKey(entry.audienceKey) === normalizedKey\n );\n if (match) {\n return match.audienceClass;\n }\n\n return classFromAudienceKey(normalizedKey, args.fallbackClass ?? \"internal\");\n}\n\nexport async function canViewAudienceLabelWithRegistry(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n viewerAudienceKey?: string | null;\n resourceAudienceKey?: string | null;\n }\n): Promise<boolean> {\n const viewerClass = await resolveAudienceClassFromRegistry(ctx, {\n tenantId: args.tenantId,\n workspaceId: args.workspaceId,\n audienceKey: args.viewerAudienceKey,\n fallbackClass: \"public\",\n });\n const resourceClass = await resolveAudienceClassFromRegistry(ctx, {\n tenantId: args.tenantId,\n workspaceId: args.workspaceId,\n audienceKey: args.resourceAudienceKey,\n fallbackClass: \"internal\",\n });\n return canAudienceClassAccess(viewerClass, resourceClass);\n}\n\nexport async function resolveAllowedAudienceScopeForVisibility(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n visibility?: string | null;\n }\n): Promise<AllowedAudienceScope> {\n const allowedAudienceClasses = deriveAllowedAudienceClasses(args.visibility);\n const registry = await queryRegistryRows(ctx, {\n tenantId: args.tenantId,\n workspaceId: args.workspaceId,\n });\n\n const allowedAudienceKeys = unique(\n registry\n .filter((entry) => allowedAudienceClasses.includes(entry.audienceClass))\n .map((entry) => normalizeAudienceKey(entry.audienceKey))\n .filter(Boolean)\n );\n\n const fallbackKeys = allowedAudienceClasses.map(fallbackAudienceKeyForClass);\n const mergedKeys = unique([...allowedAudienceKeys, ...fallbackKeys]);\n const allowedAudienceModes = unique(\n allowedAudienceClasses.map((audienceClass) =>\n modeFromAudienceClass(audienceClass)\n )\n );\n\n return {\n allowedAudienceClasses,\n allowedAudienceKeys: mergedKeys,\n allowedAudienceModes,\n };\n}\n\nexport async function resolvePrincipalAudienceScope(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n principalId: string;\n groupIds: string[];\n isPrivileged: boolean;\n }\n): Promise<PrincipalAudienceScope> {\n const registry = await queryRegistryRows(ctx, {\n tenantId: args.tenantId,\n workspaceId: args.workspaceId,\n });\n const registryKeys = unique(\n registry.map((row) => normalizeAudienceKey(row.audienceKey)).filter(Boolean)\n );\n const registryClasses = unique(registry.map((row) => row.audienceClass));\n\n if (!args.tenantId) {\n return {\n mode: \"legacy_open\",\n grantModelEnabled: false,\n grantedAudienceKeys: [\"internal\"],\n grantedAudienceClasses: [\"internal\"],\n allowedAudienceKeys: registryKeys,\n allowedAudienceClasses: registryClasses,\n allowedAudienceModes: registryClasses.map((entry) =>\n modeFromAudienceClass(entry)\n ),\n };\n }\n\n const tenantGrants = await ctx.db\n .query(\"platformAudienceGrants\")\n .withIndex(\"by_tenant_audienceKey\", (q) => q.eq(\"tenantId\", args.tenantId!))\n .collect();\n\n const activeTenantGrants = tenantGrants.filter((grant) => {\n if (!isGrantActive(grant as any)) {\n return false;\n }\n return isWorkspaceScopeMatch({\n rowWorkspaceId: grant.workspaceId,\n workspaceId: args.workspaceId,\n });\n });\n const grantModelEnabled = activeTenantGrants.length > 0;\n\n if (args.isPrivileged) {\n return {\n mode: \"admin_override\",\n grantModelEnabled,\n grantedAudienceKeys: registryKeys,\n grantedAudienceClasses: registryClasses,\n allowedAudienceKeys: registryKeys,\n allowedAudienceClasses: registryClasses,\n allowedAudienceModes: registryClasses.map((entry) =>\n modeFromAudienceClass(entry)\n ),\n };\n }\n\n if (!grantModelEnabled) {\n return {\n mode: \"legacy_open\",\n grantModelEnabled: false,\n grantedAudienceKeys: [\"internal\"],\n grantedAudienceClasses: [\"internal\"],\n allowedAudienceKeys: registryKeys,\n allowedAudienceClasses: registryClasses,\n allowedAudienceModes: registryClasses.map((entry) =>\n modeFromAudienceClass(entry)\n ),\n };\n }\n\n const directGrants = await ctx.db\n .query(\"platformAudienceGrants\")\n .withIndex(\"by_tenant_principal\", (q) =>\n q.eq(\"tenantId\", args.tenantId!).eq(\"principalId\", args.principalId)\n )\n .collect();\n\n const groupGrants: Array<{\n audienceKey: string;\n audienceClass: AudienceClass;\n status: \"active\" | \"revoked\" | \"expired\";\n expiresAt?: number;\n workspaceId?: string;\n }> = [];\n for (const groupId of args.groupIds) {\n const rows = await ctx.db\n .query(\"platformAudienceGrants\")\n .withIndex(\"by_tenant_group\", (q) =>\n q.eq(\"tenantId\", args.tenantId!).eq(\"groupId\", groupId)\n )\n .collect();\n groupGrants.push(...(rows as any));\n }\n\n const activeGrantRows = [...directGrants, ...groupGrants].filter((grant) => {\n if (!isGrantActive(grant as any)) {\n return false;\n }\n return isWorkspaceScopeMatch({\n rowWorkspaceId: grant.workspaceId,\n workspaceId: args.workspaceId,\n });\n });\n\n const registryKeySet = new Set(registryKeys);\n const grantedAudienceKeys = unique(\n activeGrantRows\n .map((grant) => normalizeAudienceKey(grant.audienceKey))\n .filter((key) => key && registryKeySet.has(key))\n );\n const grantedAudienceClasses = unique(\n activeGrantRows\n .map((grant) => grant.audienceClass)\n .filter((entry): entry is AudienceClass => Boolean(entry))\n );\n\n const allowedAudienceKeys = unique([\n \"internal\",\n ...grantedAudienceKeys,\n ]).filter((key) => key === \"internal\" || registryKeySet.has(key));\n const allowedAudienceClasses = unique<AudienceClass>([\n \"internal\",\n ...grantedAudienceClasses,\n ...allowedAudienceKeys.map((key): AudienceClass => {\n const registryMatch = registry.find(\n (row) => normalizeAudienceKey(row.audienceKey) === key\n );\n return registryMatch?.audienceClass ?? classFromAudienceMode(\"internal\");\n }),\n ]);\n\n return {\n mode: \"grant_enforced\",\n grantModelEnabled: true,\n grantedAudienceKeys: unique([\"internal\", ...grantedAudienceKeys]),\n grantedAudienceClasses: unique([\"internal\", ...grantedAudienceClasses]),\n allowedAudienceKeys,\n allowedAudienceClasses,\n allowedAudienceModes: unique(\n allowedAudienceClasses.map((entry) => modeFromAudienceClass(entry))\n ),\n };\n}\n\nexport function intersectAudienceScopes(\n visibilityScope: AllowedAudienceScope,\n principalScope: PrincipalAudienceScope\n): AllowedAudienceScope {\n const allowedAudienceClasses = intersect(\n visibilityScope.allowedAudienceClasses,\n principalScope.allowedAudienceClasses\n );\n const allowedAudienceKeys = intersect(\n visibilityScope.allowedAudienceKeys.map((entry) =>\n normalizeAudienceKey(entry)\n ),\n principalScope.allowedAudienceKeys.map((entry) =>\n normalizeAudienceKey(entry)\n )\n ).filter(Boolean);\n const mergedClasses = unique(allowedAudienceClasses);\n const mergedKeys = unique(allowedAudienceKeys);\n\n return {\n allowedAudienceClasses: mergedClasses,\n allowedAudienceKeys: mergedKeys,\n allowedAudienceModes: unique(\n mergedClasses.map((audienceClass) => modeFromAudienceClass(audienceClass))\n ),\n };\n}\n\nexport async function ensureDefaultAudienceRegistry(\n ctx: MutationCtx,\n args: {\n tenantId: string;\n actorPrincipalId: string;\n }\n): Promise<{\n inserted: number;\n updated: number;\n}> {\n const now = Date.now();\n let inserted = 0;\n let updated = 0;\n\n for (const seed of DEFAULT_AUDIENCES) {\n const existing = await ctx.db\n .query(\"platformAudiences\")\n .withIndex(\"by_tenant_audienceKey\", (q) =>\n q.eq(\"tenantId\", args.tenantId).eq(\"audienceKey\", seed.audienceKey)\n )\n .collect();\n\n const tenantScoped = existing.find((row) => row.workspaceId === undefined);\n if (!tenantScoped) {\n await ctx.db.insert(\"platformAudiences\", {\n tenantId: args.tenantId,\n audienceKey: seed.audienceKey,\n audienceLabel: seed.audienceLabel,\n audienceClass: seed.audienceClass,\n status: \"active\",\n createdBy: args.actorPrincipalId,\n createdAt: now,\n updatedAt: now,\n });\n inserted += 1;\n continue;\n }\n\n const needsPatch =\n tenantScoped.status !== \"active\" ||\n tenantScoped.audienceLabel !== seed.audienceLabel ||\n tenantScoped.audienceClass !== seed.audienceClass;\n if (!needsPatch) {\n continue;\n }\n\n await ctx.db.patch(tenantScoped._id, {\n audienceLabel: seed.audienceLabel,\n audienceClass: seed.audienceClass,\n status: \"active\",\n updatedAt: now,\n });\n updated += 1;\n }\n\n return { inserted, updated };\n}\n","export type SchemaEnumCategory =\n | \"topic_type\"\n | \"branch_schema\"\n | \"lens_perspective_type\"\n | \"belief_type\"\n | \"edge_type\"\n | \"worktree_type\"\n | \"worktree_phase\"\n | \"activity_type\";\n\nconst BUILTIN_ENUM_FALLBACK: Record<SchemaEnumCategory, ReadonlySet<string>> = {\n topic_type: new Set([\n \"domain\",\n \"theme\",\n \"deal\",\n \"strategy\",\n \"constitution\",\n \"project\",\n \"portfolio\",\n \"architecture\",\n \"capability\",\n \"runtime\",\n \"interface\",\n \"governance\",\n \"operations\",\n \"security\",\n \"data\",\n ]),\n branch_schema: new Set([\"pillar\", \"track\", \"dimension\", \"axis\", \"phase\"]),\n lens_perspective_type: new Set([\n \"investigation\",\n \"monitoring\",\n \"analysis\",\n \"comparison\",\n \"taxonomy\",\n ]),\n belief_type: new Set([\n \"belief\",\n \"hypothesis\",\n \"principle\",\n \"invariant\",\n \"assumption\",\n \"tenet\",\n \"prior\",\n \"preference\",\n \"goal\",\n \"forecast\",\n \"decision\",\n \"constraint\",\n \"tradeoff\",\n \"policy\",\n \"implementation_choice\",\n \"implementation_decision\",\n \"interface_contract\",\n \"migration_state\",\n \"code_pattern\",\n \"deprecation_notice\",\n ]),\n edge_type: new Set([\n \"supports\",\n \"informs\",\n \"depends_on\",\n \"derived_from\",\n \"contains\",\n \"tests\",\n \"supersedes\",\n \"responds_to\",\n \"belongs_to\",\n \"relates_to_thesis\",\n \"works_at\",\n \"invested_in\",\n \"competes_with\",\n \"participates_in\",\n \"founded_by\",\n \"evaluates\",\n \"performs\",\n \"function_in\",\n \"impacts\",\n \"raised_from\",\n \"mentioned_in\",\n \"perspective_on\",\n \"plays_theme\",\n ]),\n worktree_type: new Set([\n \"belief_test\",\n \"existential\",\n \"contradiction\",\n \"refinement\",\n \"coverage\",\n \"discovery\",\n \"clarification\",\n \"confirmation\",\n ]),\n worktree_phase: new Set([\n \"cluster_mapping\",\n \"hypothesis_formation\",\n \"question_generation\",\n \"evidence_collection\",\n \"synthesis\",\n \"decision\",\n \"retrospective\",\n ]),\n activity_type: new Set([\n \"create\",\n \"update\",\n \"review\",\n \"merge\",\n \"archive\",\n \"comment\",\n \"status_change\",\n \"evidence_added\",\n \"question_added\",\n ]),\n};\n\nfunction normalizeEnumValue(value: string): string {\n return value.trim().toLowerCase();\n}\n\nexport async function validateSchemaEnumValue(\n _ctx: unknown,\n args: {\n category: SchemaEnumCategory;\n value: string;\n tenantId?: string;\n }\n): Promise<{ valid: boolean; source: \"builtin\" | \"none\" }> {\n const normalized = normalizeEnumValue(args.value);\n if (!normalized) {\n return { valid: false, source: \"none\" };\n }\n\n if (BUILTIN_ENUM_FALLBACK[args.category].has(normalized)) {\n return { valid: true, source: \"builtin\" };\n }\n\n return { valid: false, source: \"none\" };\n}\n\nexport async function assertSchemaEnumValue(\n ctx: unknown,\n args: {\n category: SchemaEnumCategory;\n value?: string;\n tenantId?: string;\n context: string;\n }\n): Promise<string | undefined> {\n if (typeof args.value !== \"string\") {\n return;\n }\n const normalized = normalizeEnumValue(args.value);\n if (!normalized) {\n return;\n }\n\n const validation = await validateSchemaEnumValue(ctx, {\n category: args.category,\n value: normalized,\n tenantId: args.tenantId,\n });\n\n if (!validation.valid) {\n const tenantHint = args.tenantId ? ` for tenant ${args.tenantId}` : \"\";\n throw new Error(\n `[${args.context}] Invalid value \"${normalized}\" for category \"${args.category}\"${tenantHint}. ` +\n \"Add it to the contracts schema enum manifest before use.\"\n );\n }\n\n return normalized;\n}\n","/**\n * Belief lifecycle helpers shared across Convex modules.\n *\n * Canonical lifecycle:\n * assumption -> hypothesis -> belief -> fact\n */\n\nexport type BeliefLifecycleStatus =\n | \"assumption\"\n | \"hypothesis\"\n | \"belief\"\n | \"fact\";\n\ntype PredictionOutcome =\n | \"pending\"\n | \"confirmed\"\n | \"disconfirmed\"\n | \"partial\"\n | \"expired\";\n\nconst BELIEF_STATUS_VALUES: readonly BeliefLifecycleStatus[] = [\n \"assumption\",\n \"hypothesis\",\n \"belief\",\n \"fact\",\n];\n\nconst RESOLVED_PREDICTION_OUTCOMES: readonly PredictionOutcome[] = [\n \"confirmed\",\n \"disconfirmed\",\n \"partial\",\n \"expired\",\n];\n\nexport function isBeliefLifecycleStatus(\n value: unknown\n): value is BeliefLifecycleStatus {\n return (\n typeof value === \"string\" &&\n BELIEF_STATUS_VALUES.includes(value as BeliefLifecycleStatus)\n );\n}\n\nfunction normalizeBeliefConfidence(confidence: unknown): number | null {\n if (typeof confidence !== \"number\" || !Number.isFinite(confidence)) {\n return null;\n }\n if (confidence >= 0 && confidence <= 1) {\n return confidence;\n }\n // Backward compatibility with historical percentage-scale confidence (0-100).\n if (confidence > 1 && confidence <= 100) {\n return confidence / 100;\n }\n return null;\n}\n\nexport function isResolvedByConfidence(confidence: unknown): boolean {\n const normalized = normalizeBeliefConfidence(confidence);\n if (normalized === null) {\n return false;\n }\n return normalized <= 0 || normalized >= 1;\n}\n\nexport function hasResolvedPredictionOutcome(predictionMeta: unknown): boolean {\n if (!predictionMeta || typeof predictionMeta !== \"object\") {\n return false;\n }\n const outcome = (predictionMeta as { outcome?: unknown }).outcome;\n return (\n typeof outcome === \"string\" &&\n RESOLVED_PREDICTION_OUTCOMES.includes(outcome as PredictionOutcome)\n );\n}\n\nfunction getPredictionMetaFromMetadata(\n metadata: Record<string, unknown> | undefined\n): unknown {\n return metadata?.predictionMeta;\n}\n\nexport function shouldTreatBeliefAsFact(opts: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): boolean {\n if (isResolvedByConfidence(opts.confidence)) {\n return true;\n }\n if (hasResolvedPredictionOutcome(opts.predictionMeta)) {\n return true;\n }\n if (\n hasResolvedPredictionOutcome(getPredictionMetaFromMetadata(opts.metadata))\n ) {\n return true;\n }\n return false;\n}\n\nexport function resolveBeliefLifecycleStatus(opts: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): BeliefLifecycleStatus {\n if (shouldTreatBeliefAsFact(opts)) {\n return \"fact\";\n }\n\n const direct = opts.beliefStatus;\n if (isBeliefLifecycleStatus(direct)) {\n // If the belief has been scored (has numeric credence) but stored status\n // is still pre-validation, promote to \"belief\". Scoring = merge to main.\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (normalized !== null && isPreValidationBeliefStatus(direct)) {\n return \"belief\";\n }\n return direct;\n }\n\n const metaStatus = opts.metadata?.beliefStatus;\n if (isBeliefLifecycleStatus(metaStatus)) {\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (normalized !== null && isPreValidationBeliefStatus(metaStatus)) {\n return \"belief\";\n }\n return metaStatus;\n }\n\n return \"assumption\";\n}\n\nexport function isPreValidationBeliefStatus(\n status: BeliefLifecycleStatus\n): boolean {\n return status === \"assumption\" || status === \"hypothesis\";\n}\n\nexport function isPropagationEligibleBeliefStatus(\n status: BeliefLifecycleStatus\n): boolean {\n return status === \"belief\" || status === \"fact\";\n}\n\nexport function promoteBeliefStatusAfterScoring(\n status: BeliefLifecycleStatus,\n opts?: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n }\n): BeliefLifecycleStatus {\n if (shouldTreatBeliefAsFact({ ...opts })) {\n return \"fact\";\n }\n if (isPreValidationBeliefStatus(status)) {\n return \"belief\";\n }\n return status === \"fact\" ? \"fact\" : \"belief\";\n}\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\n\nexport const containsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"contains\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Structural containment only. Traversed for explicit semantics, but it never propagates opinions.\",\n};\n\n","import {\n applyNegativeEvidence,\n applyNegativeSupport,\n cumulativeFusion,\n project,\n trustDiscount,\n type EdgeMetadata,\n type Opinion,\n type PropagationResult,\n} from \"@lucern/confidence\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeRecord,\n} from \"./propagationTypes\";\n\nexport function readEdgeMetadata<TNodeId extends string>(\n edge: PropagationEdgeRecord<TNodeId>\n): EdgeMetadata {\n return {\n constraint: edge.constraint ?? undefined,\n normalization: edge.normalization ?? undefined,\n propagation: edge.propagation ?? undefined,\n conditionalA: edge.conditionalA ?? undefined,\n conditionalNotA: edge.conditionalNotA ?? undefined,\n };\n}\n\nexport function applyPerHopDamping(\n sourceOpinion: Opinion,\n damping: number\n): Opinion {\n if (damping >= 1) {\n return sourceOpinion;\n }\n\n return trustDiscount(sourceOpinion, Math.max(0, damping));\n}\n\nexport function annotateRationale(\n result: PropagationResult,\n spec: EdgePropagationSpec,\n hop: number\n): PropagationResult {\n return {\n ...result,\n rationale: `hop=${hop} edge=${spec.edgeType} damping=${spec.damping.toFixed(\n 2\n )} :: ${result.rationale}`,\n };\n}\n\nexport function propagatePositiveSupport(\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edgeWeight: number\n): PropagationResult {\n const discounted = trustDiscount(sourceOpinion, Math.abs(edgeWeight));\n return {\n opinion: cumulativeFusion(targetOpinion, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Supporting evidence (weight=${edgeWeight.toFixed(\n 2\n )}) from source at ${project(sourceOpinion).toFixed(2)}`,\n };\n}\n\nexport function propagatePositiveInform(\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edgeWeight: number\n): PropagationResult {\n const discounted = trustDiscount(sourceOpinion, Math.abs(edgeWeight));\n return {\n opinion: cumulativeFusion(targetOpinion, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Supporting evidence (weight=${edgeWeight.toFixed(2)})`,\n };\n}\n\nexport function propagateNegativeSupportWithMetadata(\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edgeWeight: number,\n edge: PropagationEdgeRecord\n): PropagationResult {\n return applyNegativeSupport(\n sourceOpinion,\n targetOpinion,\n edgeWeight,\n readEdgeMetadata(edge)\n );\n}\n\nexport function propagateNegativeInform(\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edgeWeight: number\n): PropagationResult {\n return applyNegativeEvidence(sourceOpinion, targetOpinion, edgeWeight);\n}\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeSupportWithMetadata,\n} from \"./utils\";\n\nexport const contradictsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"contradicts\",\n direction: \"bidirectional\",\n transitivity: \"none\",\n damping: 0.85,\n maxHops: 1,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const negativeWeight = -Math.abs(edge.weight ?? 1);\n const result = propagateNegativeSupportWithMetadata(\n dampedSource,\n targetOpinion,\n negativeWeight,\n edge\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Legacy contradiction edges move negative pressure in either direction, but never beyond one hop.\",\n};\n\n","import {\n conditionalDeduction,\n dampedDependencyCascade,\n project,\n} from \"@lucern/confidence\";\nimport type { EdgePropagationSpec } from \"./propagationTypes\";\nimport { annotateRationale, applyPerHopDamping, readEdgeMetadata } from \"./utils\";\n\nexport const dependsOnPropagationSpec: EdgePropagationSpec = {\n edgeType: \"depends_on\",\n direction: \"incoming\",\n transitivity: \"damped\",\n damping: 0.8,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const metadata = readEdgeMetadata(edge);\n\n if (metadata.conditionalA && metadata.conditionalNotA) {\n const deducedOpinion = conditionalDeduction(\n dampedSource,\n metadata.conditionalA,\n metadata.conditionalNotA,\n targetOpinion.a\n );\n\n return annotateRationale(\n {\n opinion: deducedOpinion,\n operator: \"conditional_deduction\",\n rationale: `Conditional deduction: prerequisite at ${project(\n dampedSource\n ).toFixed(2)}`,\n },\n context.spec,\n context.hop\n );\n }\n\n const result = dampedDependencyCascade(\n dampedSource,\n targetOpinion,\n metadata.propagation ?? \"continuous\"\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Structural gating. Textbook conditional deduction when edge conditionals exist, otherwise damped dependency cascade through downstream chains.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\n\nexport const derivedFromPropagationSpec: EdgePropagationSpec = {\n edgeType: \"derived_from\",\n direction: \"incoming\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Provenance only. The traversal surface stays explicit, but confidence does not move across derived_from edges.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagatePositiveInform,\n} from \"./utils\";\n\nexport const elaboratesPropagationSpec: EdgePropagationSpec = {\n edgeType: \"elaborates\",\n direction: \"outgoing\",\n transitivity: \"damped\",\n damping: 0.7,\n maxHops: 2,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const contextualWeight = Math.min(Math.abs(edge.weight ?? 0.35), 0.35);\n const result = propagatePositiveInform(\n dampedSource,\n targetOpinion,\n contextualWeight\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Context-rich supporting detail. Elaborates carries a small positive effect with short, damped chaining.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeInform,\n propagatePositiveInform,\n} from \"./utils\";\n\nexport const informsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"informs\",\n direction: \"outgoing\",\n transitivity: \"full\",\n damping: 0.92,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const weight = edge.weight ?? 1;\n const result =\n weight < 0\n ? propagateNegativeInform(dampedSource, targetOpinion, weight)\n : propagatePositiveInform(dampedSource, targetOpinion, weight);\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Evidence-bearing influence. Informs can chain through the graph with light per-hop damping.\",\n};\n\n","import type {\n EdgeMetadata,\n Opinion,\n PropagationResult,\n} from \"@lucern/confidence\";\n\nexport type PropagationTraversalDirection = \"outgoing\" | \"incoming\";\n\nexport type PropagationSpecDirection =\n | PropagationTraversalDirection\n | \"bidirectional\";\n\nexport type PropagationTransitivity = \"none\" | \"damped\" | \"full\";\n\nexport type PropagationEdgeType =\n | \"supports\"\n | \"depends_on\"\n | \"informs\"\n | \"contains\"\n | \"tests\"\n | \"derived_from\"\n | \"contradicts\"\n | \"refutes\"\n | \"elaborates\";\n\nexport type PropagationEdgeRecord<TNodeId extends string = string> = {\n fromNodeId?: TNodeId | null;\n toNodeId?: TNodeId | null;\n edgeType: string;\n weight?: number | null;\n constraint?: EdgeMetadata[\"constraint\"] | null;\n normalization?: EdgeMetadata[\"normalization\"] | null;\n propagation?: EdgeMetadata[\"propagation\"] | null;\n conditionalA?: EdgeMetadata[\"conditionalA\"] | null;\n conditionalNotA?: EdgeMetadata[\"conditionalNotA\"] | null;\n tenantId?: string;\n workspaceId?: string;\n};\n\nexport type EdgePropagationSpec<TNodeId extends string = string> = {\n edgeType: PropagationEdgeType;\n direction: PropagationSpecDirection;\n transitivity: PropagationTransitivity;\n damping: number;\n maxHops: number | \"unbounded\";\n operator: (\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edge: PropagationEdgeRecord<TNodeId>,\n context: {\n hop: number;\n sourceNodeId: TNodeId;\n targetNodeId: TNodeId;\n traversedDirection: PropagationTraversalDirection;\n spec: EdgePropagationSpec<TNodeId>;\n }\n ) => PropagationResult | null;\n description: string;\n};\n\nexport function isPropagationTraversalDirection(\n direction: string\n): direction is PropagationTraversalDirection {\n return direction === \"outgoing\" || direction === \"incoming\";\n}\n\nexport function canTraverseHop<TNodeId extends string>(\n spec: EdgePropagationSpec<TNodeId>,\n nextHop: number\n): boolean {\n return spec.maxHops === \"unbounded\" || nextHop <= spec.maxHops;\n}\n\nexport function canContinueTransitively<TNodeId extends string>(\n spec: EdgePropagationSpec<TNodeId>,\n currentHop: number\n): boolean {\n if (spec.transitivity === \"none\") {\n return false;\n }\n\n return spec.maxHops === \"unbounded\" || currentHop < spec.maxHops;\n}\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeInform,\n} from \"./utils\";\n\nexport const refutesPropagationSpec: EdgePropagationSpec = {\n edgeType: \"refutes\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 0.9,\n maxHops: 1,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const negativeWeight = -Math.abs(edge.weight ?? 1);\n const result = propagateNegativeInform(\n dampedSource,\n targetOpinion,\n negativeWeight\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Explicit negative evidence semantics. Refutes is treated as strong one-hop counter-evidence.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeSupportWithMetadata,\n propagatePositiveSupport,\n} from \"./utils\";\n\nexport const supportsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"supports\",\n direction: \"outgoing\",\n transitivity: \"full\",\n damping: 0.85,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const weight = edge.weight ?? 1;\n const result =\n weight < 0\n ? propagateNegativeSupportWithMetadata(\n dampedSource,\n targetOpinion,\n weight,\n edge\n )\n : propagatePositiveSupport(dampedSource, targetOpinion, weight);\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Belief-to-belief influence. Supports chains transitively with moderate per-hop damping.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\n\nexport const testsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"tests\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Interrogation linkage only. Tests edges do not directly move confidence.\",\n};\n\n","import { containsPropagationSpec } from \"./contains\";\nimport { contradictsPropagationSpec } from \"./contradicts\";\nimport { dependsOnPropagationSpec } from \"./dependsOn\";\nimport { derivedFromPropagationSpec } from \"./derivedFrom\";\nimport { elaboratesPropagationSpec } from \"./elaborates\";\nimport { informsPropagationSpec } from \"./informs\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeType,\n PropagationSpecDirection,\n PropagationTraversalDirection,\n} from \"./propagationTypes\";\nimport {\n canContinueTransitively,\n canTraverseHop,\n isPropagationTraversalDirection,\n} from \"./propagationTypes\";\nimport { refutesPropagationSpec } from \"./refutes\";\nimport { supportsPropagationSpec } from \"./supports\";\nimport { testsPropagationSpec } from \"./tests\";\n\nexport type {\n EdgePropagationSpec,\n PropagationEdgeRecord,\n PropagationEdgeType,\n PropagationSpecDirection,\n PropagationTransitivity,\n PropagationTraversalDirection,\n} from \"./propagationTypes\";\nexport {\n canContinueTransitively,\n canTraverseHop,\n isPropagationTraversalDirection,\n} from \"./propagationTypes\";\n\nexport const EDGE_PROPAGATION_SPECS: readonly EdgePropagationSpec[] = [\n supportsPropagationSpec,\n informsPropagationSpec,\n dependsOnPropagationSpec,\n derivedFromPropagationSpec,\n containsPropagationSpec,\n testsPropagationSpec,\n contradictsPropagationSpec,\n refutesPropagationSpec,\n elaboratesPropagationSpec,\n] as const;\n\nconst EDGE_PROPAGATION_SPEC_MAP = new Map<\n PropagationEdgeType,\n EdgePropagationSpec\n>(EDGE_PROPAGATION_SPECS.map((spec) => [spec.edgeType, spec]));\n\nexport function getEdgePropagationSpec(\n edgeType: string\n): EdgePropagationSpec | undefined {\n return EDGE_PROPAGATION_SPEC_MAP.get(edgeType as PropagationEdgeType);\n}\n\nexport function getEdgePropagationSpecs(): readonly EdgePropagationSpec[] {\n return EDGE_PROPAGATION_SPECS;\n}\n\nexport function getTraversalDirections(\n direction: PropagationSpecDirection\n): readonly PropagationTraversalDirection[] {\n if (isPropagationTraversalDirection(direction)) {\n return [direction];\n }\n\n return [\"outgoing\", \"incoming\"];\n}\n\n","export type NodeType =\n | \"decision\"\n | \"belief\"\n | \"question\"\n | \"theme\"\n | \"deal\"\n | \"topic\"\n | \"claim\"\n | \"evidence\"\n | \"synthesis\"\n | \"answer\"\n | \"atomic_fact\"\n | \"excerpt\"\n | \"source\"\n | \"company\"\n | \"person\"\n | \"investor\"\n | \"function\"\n | \"value_chain\";\n\nexport type EpistemicLayer =\n | \"L4\"\n | \"L3\"\n | \"L2\"\n | \"L1\"\n | \"ontological\"\n | \"organizational\";\n\nexport const NODE_TYPES = [\n \"decision\",\n \"belief\",\n \"question\",\n \"theme\",\n \"deal\",\n \"topic\",\n \"claim\",\n \"evidence\",\n \"synthesis\",\n \"answer\",\n \"atomic_fact\",\n \"excerpt\",\n \"source\",\n \"company\",\n \"person\",\n \"investor\",\n \"function\",\n \"value_chain\",\n] as const satisfies readonly NodeType[];\n\nexport function isNodeType(value: string): value is NodeType {\n return (NODE_TYPES as readonly string[]).includes(value);\n}\n\nexport function getLayerForNodeType(type: NodeType): EpistemicLayer {\n switch (type) {\n case \"decision\":\n return \"L4\";\n case \"belief\":\n case \"question\":\n case \"theme\":\n case \"deal\":\n return \"L3\";\n case \"claim\":\n case \"evidence\":\n case \"synthesis\":\n case \"answer\":\n return \"L2\";\n case \"atomic_fact\":\n case \"excerpt\":\n case \"source\":\n return \"L1\";\n case \"topic\":\n return \"organizational\";\n case \"company\":\n case \"person\":\n case \"investor\":\n case \"function\":\n case \"value_chain\":\n return \"ontological\";\n }\n}\n\nexport function resolveKnownLayerForNodeType(\n type: string\n): EpistemicLayer | undefined {\n return isNodeType(type) ? getLayerForNodeType(type) : undefined;\n}\n\nexport function isEpistemicNodeType(type: NodeType): boolean {\n return getLayerForNodeType(type) !== \"ontological\";\n}\n","/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport { api as appApi } from \"./convex\";\nimport type { Id } from \"./convex\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectScope = {\n topicId: Id<\"topics\">;\n projectId?: string;\n tenantId?: string;\n workspaceId?: string;\n source: \"topic\" | \"project_mapped_topic\" | \"topic_inferred\";\n};\n\ntype MaterializedTopicNodeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n};\n\nfunction asMappedProjectId(\n topic: TopicDoc | null | undefined\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(topic[LEGACY_SCOPE_FIELD]);\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = (topic.metadata || {}) as Record<string, unknown>;\n const candidate =\n (metadata[LEGACY_SCOPE_FIELD] as string | undefined) ||\n (metadata.legacyProjectId as string | undefined) ||\n (metadata.projectId as string | undefined) ||\n (metadata.scopeProjectId as string | undefined);\n return candidate ? (candidate as string) : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(ctx: any, scopeId: string): Promise<TopicDoc[]> {\n try {\n return (await ctx.db\n .query(\"topics\")\n .withIndex(\"by_graph_scope_project\", (q: any) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId)\n )\n .collect()) as TopicDoc[];\n } catch {\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await ctx.db.query(\"topics\").collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: any,\n topicId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get as any, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch {\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: any,\n legacyScopeId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId as any, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch {\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: any,\n topic: TopicDoc\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) break;\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) break;\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: any,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string }\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n // Try direct lookup, fall back to the legacy mapped-project bridge\n let topic: TopicDoc | null = null;\n try {\n topic = (await ctx.db.get(args.topicId as Id<\"topics\">)) as TopicDoc | null;\n } catch {\n // Not a valid topics table ID\n }\n if (!topic) {\n topic = await tryResolveHostTopicById(ctx, String(args.topicId));\n }\n if (!topic) {\n // Try as legacy projectId / globalId via the mapped-project bridge.\n topic =\n pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, String(args.topicId))\n ) ?? null;\n }\n if (!topic) {\n throw new Error(`Topic not found: ${String(args.topicId)}`);\n }\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n if (mapped) {\n return {\n topicId: topic._id,\n projectId: mapped,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n return {\n topicId: topic._id,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n\n if (args.projectId) {\n let directTopic: TopicDoc | null = null;\n try {\n directTopic = (await ctx.db.get(\n args.projectId as Id<\"topics\">\n )) as TopicDoc | null;\n } catch {\n // Not a valid topics table ID, continue to legacy graph-scope lookup.\n }\n\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n directTopic = await tryResolveHostTopicByLegacyScope(ctx, args.projectId);\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n const topics = await findTopicsByScopeAlias(ctx, args.projectId);\n const primary = pickPrimaryTopic(topics);\n if (primary) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, primary);\n return {\n topicId: primary._id,\n projectId: args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"project_mapped_topic\",\n };\n }\n throw new Error(\n `Legacy project scope ${String(args.projectId)} has no mapped topic.`\n );\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\"\n );\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","import {\n getLayerForNodeType,\n isNodeType,\n} from \"@lucern/contracts/schema-helpers/spine/tables/epistemicNodes\";\nimport {\n resolveTopicProjectScope,\n type TopicProjectScope,\n} from \"./topicScope\";\n\ntype StructuredInvariantError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype ScopeLike = {\n tenantId?: unknown;\n workspaceId?: unknown;\n epistemicLayer?: unknown;\n nodeType?: unknown;\n topicId?: unknown;\n projectId?: unknown;\n publicationStatus?: unknown;\n};\n\nexport type RuntimePackMutationContext = {\n toolName?: string;\n packKey?: string;\n packInstallScope?: \"tenant\" | \"workspace\";\n};\n\nexport function normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction throwWorkspaceIsolationError(args: {\n message: string;\n invariantCode: string;\n suggestion: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredInvariantError;\n error.status = 409;\n error.code = \"INVARIANT_VIOLATION\";\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nexport function assertWorkspaceScopedEpistemicNodeScope(args: {\n scope: TopicProjectScope;\n nodeType: string;\n mutationName: string;\n}): void {\n const layer = isNodeType(args.nodeType)\n ? getLayerForNodeType(args.nodeType)\n : undefined;\n if (layer === \"ontological\") {\n return;\n }\n\n const workspaceId = normalizeScopeValue(args.scope.workspaceId);\n if (workspaceId) {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n \"Workspace-scoped reasoning isolation requires workspaceId on non-ontological node creation.\",\n invariantCode: \"workspace.scope_required_for_epistemic_nodes\",\n suggestion:\n \"Resolve the topic/project scope through a workspace-bound topic before creating epistemic nodes.\",\n details: {\n mutationName: args.mutationName,\n nodeType: args.nodeType,\n topicId: args.scope.topicId,\n projectId: args.scope.projectId,\n },\n });\n}\n\nexport function nodeMatchesWorkspaceReasoningScope(\n node: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!node) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const nodeTenantId = normalizeScopeValue(node.tenantId);\n const nodeWorkspaceId = normalizeScopeValue(node.workspaceId);\n const epistemicLayer =\n typeof node.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n\n if (\n scopeTenantId &&\n nodeTenantId &&\n scopeTenantId !== nodeTenantId\n ) {\n return false;\n }\n\n // Ontological entities are tenant-global (no workspace required)\n if (epistemicLayer === \"ontological\" && nodeWorkspaceId === undefined) {\n return true;\n }\n\n // Published nodes are visible at tenant scope — the microservice API surface.\n // The node stays in its workspace, but tenant-scope queries can see it.\n if (!scopeWorkspaceId && node.publicationStatus === \"published\") {\n return true;\n }\n\n if (!scopeWorkspaceId) {\n return nodeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === nodeWorkspaceId;\n}\n\nexport function edgeMatchesWorkspaceReasoningScope(\n edge: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!edge) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const edgeTenantId = normalizeScopeValue(edge.tenantId);\n const edgeWorkspaceId = normalizeScopeValue(edge.workspaceId);\n\n if (\n scopeTenantId &&\n edgeTenantId &&\n scopeTenantId !== edgeTenantId\n ) {\n return false;\n }\n\n if (!scopeWorkspaceId) {\n return edgeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === edgeWorkspaceId;\n}\n\nexport async function resolveNodeScopeForWorkspaceIsolation(\n ctx: any,\n node: ScopeLike | null | undefined\n): Promise<{\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n nodeType?: string;\n}> {\n const epistemicLayer =\n typeof node?.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n const resolved = {\n tenantId: normalizeScopeValue(node?.tenantId),\n workspaceId: normalizeScopeValue(node?.workspaceId),\n epistemicLayer,\n nodeType: typeof node?.nodeType === \"string\" ? node.nodeType : undefined,\n };\n\n if (!node) {\n return resolved;\n }\n\n if (resolved.epistemicLayer === \"ontological\") {\n return resolved;\n }\n\n if (resolved.tenantId || resolved.workspaceId) {\n return resolved;\n }\n\n if (node.topicId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n topicId: node.topicId as any,\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n if (node.projectId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n projectId: String(node.projectId),\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n return resolved;\n}\n\nexport function resolveRuntimePackMutationContext(args: {\n runtimeToolName?: string;\n runtimePackKey?: string;\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n}): RuntimePackMutationContext | undefined {\n if (\n !args.runtimeToolName &&\n !args.runtimePackKey &&\n !args.runtimePackInstallScope\n ) {\n return;\n }\n\n return {\n toolName: args.runtimeToolName,\n packKey: args.runtimePackKey,\n packInstallScope: args.runtimePackInstallScope,\n };\n}\n\nexport function assertTenantPackWorkspaceMutationAllowed(args: {\n runtime?: RuntimePackMutationContext;\n target: ScopeLike;\n mutationName: string;\n}): void {\n if (\n !args.runtime?.packKey ||\n args.runtime.packInstallScope !== \"tenant\"\n ) {\n return;\n }\n\n const targetWorkspaceId = normalizeScopeValue(args.target.workspaceId);\n const targetLayer =\n typeof args.target.epistemicLayer === \"string\"\n ? args.target.epistemicLayer\n : undefined;\n\n if (!targetWorkspaceId || targetLayer === \"ontological\") {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n `Tenant-scoped pack \"${args.runtime.packKey}\" cannot mutate workspace-scoped reasoning state.`,\n invariantCode: \"workspace.tenant_pack_reasoning_write_forbidden\",\n suggestion:\n \"Use a workspace-scoped pack for workspace-local graph mutations, or route the change through tenant-global canonical entity flows.\",\n details: {\n mutationName: args.mutationName,\n toolName: args.runtime.toolName,\n packKey: args.runtime.packKey,\n targetWorkspaceId,\n targetNodeType: args.target.nodeType,\n targetLayer,\n },\n });\n}\n","import {\n hasProjectedOpinionChanged,\n readOpinionFromRecord,\n type Opinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport {\n canContinueTransitively,\n canTraverseHop,\n getEdgePropagationSpecs,\n getTraversalDirections,\n type EdgePropagationSpec,\n type PropagationEdgeRecord,\n type PropagationEdgeType,\n type PropagationTraversalDirection,\n} from \"./edges\";\nimport {\n edgeMatchesWorkspaceReasoningScope,\n nodeMatchesWorkspaceReasoningScope,\n} from \"./workspaceIsolation\";\n\nexport type PropagationDispatchScope = {\n tenantId?: string;\n workspaceId?: string;\n};\n\nexport type PropagationDispatchNode<TNodeId extends string = string> = {\n _id?: TNodeId;\n nodeType?: string;\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n publicationStatus?: string;\n metadata?: unknown;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n opinion_a?: number;\n};\n\nexport type PropagationDispatchEdge<TNodeId extends string = string> =\n PropagationEdgeRecord<TNodeId>;\n\nexport type ConfidencePropagationDispatch<TNodeId extends string = string> = {\n targetNodeId: TNodeId;\n edgeType: PropagationEdgeType;\n traversedDirection: PropagationTraversalDirection;\n weight: number;\n opinion: Opinion;\n operator: SLOperator;\n rationale: string;\n hop: number;\n};\n\nfunction resolveTraversalTargetNodeId<TNodeId extends string>(\n edge: PropagationDispatchEdge<TNodeId>,\n direction: PropagationTraversalDirection\n): TNodeId | undefined {\n const targetNodeId =\n direction === \"outgoing\" ? edge.toNodeId : edge.fromNodeId;\n return targetNodeId ?? undefined;\n}\n\nfunction readNodeOpinion<TNodeId extends string>(\n node: PropagationDispatchNode<TNodeId>\n): Opinion {\n const metadata = (node.metadata ?? {}) as Record<string, unknown>;\n\n return readOpinionFromRecord(\n {\n ...metadata,\n opinion_b: node.opinion_b,\n opinion_d: node.opinion_d,\n opinion_u: node.opinion_u,\n opinion_a: node.opinion_a,\n },\n { b: 0, d: 0, u: 1, a: 0.5 }\n );\n}\n\nexport async function collectConfidencePropagationDispatches<\n TNodeId extends string = string,\n>(args: {\n sourceNodeId: TNodeId;\n sourceOpinion: Opinion;\n sourceScope?: PropagationDispatchScope;\n traversalSpecs?: readonly EdgePropagationSpec<TNodeId>[];\n queryEdges: (args: {\n nodeId: TNodeId;\n spec: EdgePropagationSpec<TNodeId>;\n direction: PropagationTraversalDirection;\n hop: number;\n }) => Promise<ReadonlyArray<PropagationDispatchEdge<TNodeId>>>;\n getNode: (\n nodeId: TNodeId\n ) => Promise<PropagationDispatchNode<TNodeId> | null | undefined>;\n}): Promise<ConfidencePropagationDispatch<TNodeId>[]> {\n const dispatchesByTargetId = new Map<\n string,\n ConfidencePropagationDispatch<TNodeId>\n >();\n const opinionCache = new Map<string, Opinion>();\n const nodeCache = new Map<\n string,\n PropagationDispatchNode<TNodeId> | null | undefined\n >();\n const traversalSpecs = (args.traversalSpecs ??\n getEdgePropagationSpecs()) as readonly EdgePropagationSpec<TNodeId>[];\n const queue: Array<{\n nodeId: TNodeId;\n opinion: Opinion;\n hop: number;\n visitedNodeIds: Set<string>;\n }> = [\n {\n nodeId: args.sourceNodeId,\n opinion: args.sourceOpinion,\n hop: 0,\n visitedNodeIds: new Set([String(args.sourceNodeId)]),\n },\n ];\n\n const loadNode = async (nodeId: TNodeId) => {\n const cacheKey = String(nodeId);\n if (!nodeCache.has(cacheKey)) {\n nodeCache.set(cacheKey, await args.getNode(nodeId));\n }\n return nodeCache.get(cacheKey) ?? null;\n };\n\n while (queue.length > 0) {\n const state = queue.shift();\n if (!state) {\n continue;\n }\n\n for (const spec of traversalSpecs) {\n const nextHop = state.hop + 1;\n if (!canTraverseHop(spec, nextHop)) {\n continue;\n }\n\n for (const direction of getTraversalDirections(spec.direction)) {\n const edges = await args.queryEdges({\n nodeId: state.nodeId,\n spec,\n direction,\n hop: nextHop,\n });\n\n for (const edge of edges) {\n if (\n args.sourceScope &&\n !edgeMatchesWorkspaceReasoningScope(edge, args.sourceScope)\n ) {\n continue;\n }\n\n const targetNodeId = resolveTraversalTargetNodeId(edge, direction);\n if (!targetNodeId) {\n continue;\n }\n\n if (state.visitedNodeIds.has(String(targetNodeId))) {\n continue;\n }\n\n const targetNode = await loadNode(targetNodeId);\n if (!targetNode || targetNode.nodeType !== \"belief\") {\n continue;\n }\n\n if (\n args.sourceScope &&\n !nodeMatchesWorkspaceReasoningScope(targetNode, args.sourceScope)\n ) {\n continue;\n }\n\n const cacheKey = String(targetNodeId);\n const targetOpinion =\n opinionCache.get(cacheKey) ?? readNodeOpinion(targetNode);\n const result = spec.operator(state.opinion, targetOpinion, edge, {\n hop: nextHop,\n sourceNodeId: state.nodeId,\n targetNodeId,\n traversedDirection: direction,\n spec,\n });\n\n if (\n !result ||\n !hasProjectedOpinionChanged(targetOpinion, result.opinion)\n ) {\n continue;\n }\n\n opinionCache.set(cacheKey, result.opinion);\n\n const existingDispatch = dispatchesByTargetId.get(cacheKey);\n dispatchesByTargetId.set(cacheKey, {\n targetNodeId,\n edgeType: spec.edgeType,\n traversedDirection: direction,\n weight: edge.weight ?? 1,\n opinion: result.opinion,\n operator: result.operator,\n rationale: existingDispatch\n ? `${existingDispatch.rationale}; ${result.rationale}`\n : result.rationale,\n hop: nextHop,\n });\n\n if (canContinueTransitively(spec, nextHop)) {\n queue.push({\n nodeId: targetNodeId,\n opinion: result.opinion,\n hop: nextHop,\n visitedNodeIds: new Set([\n ...state.visitedNodeIds,\n String(targetNodeId),\n ]),\n });\n }\n }\n }\n }\n }\n\n return Array.from(dispatchesByTargetId.values()).sort((left, right) => {\n if (left.hop !== right.hop) {\n return left.hop - right.hop;\n }\n return String(left.targetNodeId).localeCompare(String(right.targetNodeId));\n });\n}\n","/**\n * Shared helper to schedule embedding generation after epistemic node creation.\n *\n * Best-effort — failures are silently caught. The embedding generation action\n * is a public action in convex/embeddingActions.ts that calls Pinecone.\n */\n\nimport type { Id } from \"./convex\";\n\ninterface EmbeddingTriggerArgs {\n ctx: any;\n nodeId: Id<\"epistemicNodes\">;\n projectId?: string | null;\n topicId?: string | null;\n createdBy: string;\n nodeType:\n | \"belief\"\n | \"question\"\n | \"evidence\"\n | \"answer\"\n | \"synthesis\"\n | \"theme\"\n | \"source\";\n text: string;\n hasAnswer?: boolean;\n confidence?: number;\n}\n\nexport async function scheduleEmbeddingGeneration(args: EmbeddingTriggerArgs): Promise<void> {\n try {\n await args.ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId: args.nodeId,\n projectId: args.projectId ? String(args.projectId) : undefined,\n topicId: args.topicId ? String(args.topicId) : undefined,\n createdBy: args.createdBy,\n nodeType: args.nodeType,\n text: args.text.slice(0, 20_000),\n hasAnswer: args.hasAnswer,\n confidence: args.confidence,\n }\n );\n } catch {\n // Embedding generation is best-effort — never block node creation\n }\n}\n","/**\n * Shared UUID v4 generator for global IDs.\n *\n * Uses crypto.getRandomValues() for collision-safe generation.\n * Replaces the Math.random()-based UUID pattern that was duplicated\n * across 7+ files.\n *\n * @module convex/lib/globalId\n */\n\n/**\n * Generate a UUID v4 global ID using crypto-safe random bytes.\n */\nexport function generateGlobalId(): string {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n // Set version (4) and variant (RFC 4122)\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, \"0\")).join(\n \"\"\n );\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n","/**\n * logicalRoleInference module implementation.\n */\n\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\n\ntype LogicalRole =\n | \"necessary\"\n | \"sufficient\"\n | \"necessary_sufficient\"\n | \"contributory\"\n | \"corroborative\";\n\nconst PILLAR_IMPORTANCE: Record<string, number> = {\n market: 1,\n competition: 2,\n product: 3,\n team: 4,\n financials: 5,\n timing: 6,\n other: 10,\n};\n\ntype GraphCtx = QueryCtx | MutationCtx;\n\nexport async function computeLogicalRole(\n ctx: GraphCtx,\n evidenceId: Id<\"epistemicNodes\">,\n beliefId: Id<\"epistemicNodes\">\n): Promise<LogicalRole> {\n const belief = await ctx.db.get(beliefId);\n if (!belief || belief.nodeType !== \"belief\") {\n return \"contributory\";\n }\n\n const beliefMetadata = belief.metadata as Record<string, unknown> | undefined;\n const pillar = (beliefMetadata?.pillar as string) || \"other\";\n const pillarRank = PILLAR_IMPORTANCE[pillar] ?? 10;\n\n const isSynthesized = await checkIfSynthesizedHypothesis(ctx, beliefId);\n const testingQuestions = await getTestingQuestionsForBelief(ctx, beliefId);\n const answeredQuestions = await getQuestionsAnsweredByEvidence(\n ctx,\n evidenceId\n );\n const directlyTests = testingQuestions.filter((questionId) =>\n answeredQuestions.includes(questionId)\n );\n\n if (directlyTests.length === 0) {\n return \"contributory\";\n }\n\n if (isSynthesized && pillarRank <= 2) {\n return directlyTests.length > 1 ? \"necessary_sufficient\" : \"necessary\";\n }\n\n if (isSynthesized) {\n return \"necessary\";\n }\n\n return directlyTests.length > 1 ? \"necessary\" : \"contributory\";\n}\n\nasync function checkIfSynthesizedHypothesis(\n ctx: GraphCtx,\n beliefId: Id<\"epistemicNodes\">\n): Promise<boolean> {\n const belief = await ctx.db.get(beliefId);\n if (!belief) {\n return false;\n }\n\n const metadata = belief.metadata as Record<string, unknown> | undefined;\n return (\n metadata?.isSynthesized === true ||\n metadata?.beliefStatus === \"hypothesis\"\n );\n}\n\nasync function getTestingQuestionsForBelief(\n ctx: GraphCtx,\n beliefId: Id<\"epistemicNodes\">\n): Promise<string[]> {\n const testEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", beliefId).eq(\"edgeType\", \"tests\")\n )\n .collect();\n\n return testEdges\n .map((edge) => edge.fromNodeId as string)\n .filter((id): id is string => id !== undefined);\n}\n\nasync function getQuestionsAnsweredByEvidence(\n ctx: GraphCtx,\n evidenceId: Id<\"epistemicNodes\">\n): Promise<string[]> {\n const answerEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_type\", (q) =>\n q.eq(\"fromNodeId\", evidenceId).eq(\"edgeType\", \"derived_from\")\n )\n .collect();\n\n return answerEdges\n .map((edge) => edge.toNodeId as string)\n .filter((id): id is string => id !== undefined);\n}\n","import { api } from \"./convex\";\n\ntype OverlayIdMode = \"legacy\" | \"topic\";\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype LegacyProjectThesis = {\n statement: string;\n confidence: number;\n lastUpdated: number;\n};\n\ntype LegacyPillarImportance =\n | \"critical\"\n | \"major\"\n | \"minor\"\n | \"not_applicable\";\n\ntype LegacyThesisPillarConfig = {\n pillarImportance?: Record<string, LegacyPillarImportance | undefined>;\n configuredAt?: number;\n configuredBy?: string;\n aiSuggestion?: {\n suggestedAt: number;\n reasoning: string;\n };\n};\n\ntype LegacyBeliefArchitecture = {\n overallMaturity: number;\n pillarScores: Array<Record<string, unknown>>;\n lastCalculated: number;\n};\n\ntype LegacyOntologyClassification = {\n valueChains: Array<Record<string, unknown>>;\n functions: Array<Record<string, unknown>>;\n overallConfidence: number;\n classifiedAt: number;\n};\n\ntype TopicDocLike = Record<string, unknown> & {\n _id: string;\n _creationTime?: number;\n globalId?: string;\n name?: string;\n description?: string;\n type?: string;\n tenantId?: string;\n workspaceId?: string;\n status?: string;\n visibility?: string;\n createdBy?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectOverlay = Record<string, unknown> & {\n _id: string;\n projectId: string;\n topicId: string;\n storageProjectId: string;\n legacyProjectId?: string;\n name: string;\n type: string;\n description?: string;\n ownerId: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n tags: string[];\n chatCount: number;\n artifactCount: number;\n lastActivityAt: number;\n thesis?: LegacyProjectThesis;\n wedgeHypothesis?: string;\n founderArchetype?: string;\n investmentCriteria?: string[];\n sprintPhase?:\n | \"pre_sprint\"\n | \"readiness_check\"\n | \"thesis_crystallization\"\n | \"sprint_planning\"\n | \"active_sprint\"\n | \"theme_assembly\"\n | \"evolution\";\n currentSprintIndex?: number;\n thesisPillarConfig?: LegacyThesisPillarConfig;\n beliefArchitecture?: LegacyBeliefArchitecture;\n ontologyClassification?: LegacyOntologyClassification;\n _creationTime: number;\n createdAt: number;\n updatedAt: number;\n};\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readNonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction readMetadata(topic: TopicDocLike): Record<string, unknown> {\n return topic.metadata && typeof topic.metadata === \"object\"\n ? topic.metadata\n : {};\n}\n\nfunction readLegacyProjectId(\n value: Record<string, unknown> | null | undefined\n): string | undefined {\n if (!value) {\n return;\n }\n return readNonEmptyString(value[LEGACY_SCOPE_FIELD]);\n}\n\nfunction coerceVisibility(\n value: unknown\n): TopicProjectOverlay[\"visibility\"] | undefined {\n return value === \"private\" ||\n value === \"team\" ||\n value === \"firm\" ||\n value === \"external\" ||\n value === \"public\"\n ? value\n : undefined;\n}\n\nfunction coerceStatus(\n value: unknown\n): TopicProjectOverlay[\"status\"] | undefined {\n return value === \"active\" || value === \"archived\" || value === \"watching\"\n ? value\n : undefined;\n}\n\nfunction mapProjectType(\n topic: TopicDocLike,\n metadata: Record<string, unknown>\n): string {\n const explicit = readNonEmptyString(metadata.projectType);\n if (explicit) {\n return explicit;\n }\n if (topic.type === \"theme\") {\n return \"thematic\";\n }\n return readNonEmptyString(topic.type) || \"general\";\n}\n\nfunction isProjectLikeTopic(topic: TopicDocLike): boolean {\n const metadata = readMetadata(topic);\n return (\n topic.type === \"theme\" ||\n topic.type === \"thematic\" ||\n topic.type === \"deal\" ||\n topic.type === \"monitoring\" ||\n readLegacyProjectId(topic) !== undefined ||\n readNonEmptyString(metadata.projectType) !== undefined\n );\n}\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found'\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nasync function resolveTopicDoc(\n ctx: any,\n scopeId: string\n): Promise<TopicDocLike | null> {\n if (ctx?.db && typeof ctx.db.get === \"function\") {\n try {\n const directTopic = (await ctx.db.get(scopeId as any)) as TopicDocLike | null;\n if (directTopic) {\n return directTopic;\n }\n } catch {\n // Not a direct topics-table id.\n }\n }\n\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.get as any, {\n id: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch {\n // Fall through to legacy-scope lookup.\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.getByLegacyScopeId as any, {\n projectId: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch {\n // Best-effort compat lookup only.\n }\n\n return null;\n}\n\nexport function materializeTopicProjectOverlay(\n topic: TopicDocLike,\n idMode: OverlayIdMode = \"legacy\"\n): TopicProjectOverlay {\n const metadata = readMetadata(topic);\n const topicId = String(topic._id);\n const legacyProjectId =\n readLegacyProjectId(topic) ||\n readLegacyProjectId(metadata) ||\n readNonEmptyString(metadata.legacyProjectId);\n const storageProjectId = legacyProjectId || topicId;\n const outwardId = idMode === \"topic\" ? topicId : storageProjectId;\n const visibility =\n coerceVisibility(topic.visibility) ||\n coerceVisibility(metadata.visibility) ||\n \"private\";\n const status =\n coerceStatus(topic.status) || coerceStatus(metadata.status) || \"active\";\n const createdAt =\n typeof topic.createdAt === \"number\"\n ? topic.createdAt\n : typeof topic._creationTime === \"number\"\n ? topic._creationTime\n : 0;\n const updatedAt =\n typeof topic.updatedAt === \"number\"\n ? topic.updatedAt\n : typeof metadata.updatedAt === \"number\"\n ? (metadata.updatedAt as number)\n : createdAt;\n\n return {\n ...metadata,\n _id: outwardId,\n projectId: outwardId,\n topicId,\n storageProjectId,\n legacyProjectId,\n name: readNonEmptyString(topic.name) || \"Untitled Theme\",\n type: mapProjectType(topic, metadata),\n description: readNonEmptyString(topic.description),\n ownerId:\n readNonEmptyString(metadata.ownerId) ||\n readNonEmptyString(topic.createdBy) ||\n \"system\",\n sharedWith: readStringArray(metadata.sharedWith),\n visibility,\n tenantId:\n readNonEmptyString(topic.tenantId) ||\n readNonEmptyString(metadata.tenantId),\n workspaceId:\n readNonEmptyString(topic.workspaceId) ||\n readNonEmptyString(metadata.workspaceId),\n status,\n tags: readStringArray(metadata.tags),\n chatCount:\n typeof metadata.chatCount === \"number\" ? (metadata.chatCount as number) : 0,\n artifactCount:\n typeof metadata.artifactCount === \"number\"\n ? (metadata.artifactCount as number)\n : 0,\n lastActivityAt:\n typeof metadata.lastActivityAt === \"number\"\n ? (metadata.lastActivityAt as number)\n : updatedAt,\n _creationTime:\n typeof topic._creationTime === \"number\" ? topic._creationTime : createdAt,\n createdAt,\n updatedAt,\n };\n}\n\nexport async function resolveTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n if (options.projectLikeOnly !== false && !isProjectLikeTopic(topic)) {\n return null;\n }\n return materializeTopicProjectOverlay(topic, options.idMode);\n}\n\nexport async function listTopicProjectOverlays(\n ctx: any,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay[]> {\n let allTopics: TopicDocLike[] = [];\n\n if (ctx?.db?.query && typeof ctx.db.query === \"function\") {\n try {\n allTopics = (await ctx.db.query(\"topics\").collect()) as TopicDocLike[];\n } catch {\n allTopics = [];\n }\n }\n\n if (allTopics.length === 0 && typeof ctx.runQuery === \"function\") {\n allTopics =\n (((await ctx.runQuery(api.topics.list as any, {})) ?? []) as TopicDocLike[]) ||\n [];\n }\n\n return allTopics\n .filter(\n (topic) => options.projectLikeOnly === false || isProjectLikeTopic(topic)\n )\n .map((topic) => materializeTopicProjectOverlay(topic, options.idMode));\n}\n\nexport async function patchTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n value: Record<string, unknown>\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n\n const nextMetadata = { ...readMetadata(topic) };\n const patch: Record<string, unknown> = {};\n const topicUpdateArgs: Record<string, unknown> = {\n id: String(topic._id),\n };\n\n for (const [key, rawValue] of Object.entries(value)) {\n switch (key) {\n case \"_id\":\n case \"projectId\":\n case \"topicId\":\n case \"legacyProjectId\":\n case \"storageProjectId\":\n break;\n case \"name\":\n case \"description\":\n patch[key] = rawValue;\n topicUpdateArgs[key] = rawValue;\n break;\n case \"tenantId\":\n case \"workspaceId\":\n case \"ownerId\":\n throw new Error(\n `patchTopicProjectOverlay cannot mutate ${key} via component-owned topics`\n );\n case \"status\": {\n const status = coerceStatus(rawValue);\n if (status) {\n patch.status = status;\n topicUpdateArgs.status = status;\n }\n break;\n }\n case \"visibility\": {\n const visibility = coerceVisibility(rawValue);\n if (visibility) {\n patch.visibility = visibility;\n topicUpdateArgs.visibility = visibility;\n }\n break;\n }\n case \"type\": {\n const projectType = readNonEmptyString(rawValue);\n if (projectType) {\n nextMetadata.projectType = projectType;\n } else {\n delete nextMetadata.projectType;\n }\n break;\n }\n case \"updatedAt\":\n case \"createdAt\":\n break;\n default:\n if (rawValue === undefined) {\n delete nextMetadata[key];\n } else {\n nextMetadata[key] = rawValue;\n }\n }\n }\n\n patch.updatedAt = Date.now();\n patch.metadata = nextMetadata;\n topicUpdateArgs.metadata = nextMetadata;\n\n if (typeof ctx.runMutation === \"function\") {\n try {\n await ctx.runMutation(api.topics.update as any, topicUpdateArgs);\n } catch (error) {\n if (\n !isMissingLucernChildComponentError(error) ||\n !ctx?.db ||\n typeof ctx.db.patch !== \"function\"\n ) {\n throw error;\n }\n await ctx.db.patch(String(topic._id) as any, patch);\n }\n } else if (ctx?.db && typeof ctx.db.patch === \"function\") {\n await ctx.db.patch(String(topic._id) as any, patch);\n } else {\n throw new Error(\n \"Cannot patch topic without component adapter (ctx.runMutation unavailable)\"\n );\n }\n\n return materializeTopicProjectOverlay(\n {\n ...topic,\n ...patch,\n metadata: nextMetadata,\n } as TopicDocLike\n );\n}\n\nexport function matchesTopicProjectOverlayAccess(\n accessibleProjectIds: Set<string>,\n project: { topicId: string; legacyProjectId?: string; storageProjectId?: string }\n): boolean {\n return (\n accessibleProjectIds.has(project.storageProjectId || project.topicId) ||\n accessibleProjectIds.has(project.topicId) ||\n (typeof project.legacyProjectId === \"string\" &&\n accessibleProjectIds.has(project.legacyProjectId))\n );\n}\n","/** Data-source resolver wiring for the graph-primitives module. */\nimport {\n listTopicProjectOverlays,\n patchTopicProjectOverlay,\n resolveTopicProjectOverlay,\n} from \"./topicProjectOverlay\";\nimport type {\n GraphPrimitivesAppResolverContext,\n GraphPrimitivesAppResolvers,\n} from \"./resolverTypes\";\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n return (\n message.includes('Child component ComponentName(Identifier(\"lucern\")) not found') ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction isAdvisoryTopicPatch(value: Record<string, unknown>): boolean {\n const advisoryKeys = new Set([\"lastActivityAt\", \"updatedAt\"]);\n const keys = Object.keys(value);\n return keys.length > 0 && keys.every((key) => advisoryKeys.has(key));\n}\n\nasync function patchProjectWithTolerance(\n ctx: GraphPrimitivesAppResolverContext,\n projectId: string,\n value: Record<string, unknown>\n): Promise<void> {\n try {\n await patchTopicProjectOverlay(ctx, projectId, value);\n } catch (error) {\n if (\n !isAdvisoryTopicPatch(value) ||\n !isMissingLucernChildComponentError(error)\n ) {\n throw error;\n }\n\n console.warn(\"[lucern graph-primitives] Non-fatal advisory topic patch failure\", {\n projectId,\n keys: Object.keys(value),\n error: error instanceof Error ? error.message : error,\n });\n }\n}\n\nfunction defaultResolvers(): GraphPrimitivesAppResolvers {\n return {\n async getProject(ctx, projectId) {\n return await resolveTopicProjectOverlay(ctx, projectId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n });\n },\n async patchProject(ctx, projectId, value) {\n await patchProjectWithTolerance(ctx, projectId, value);\n },\n async listTopics(ctx) {\n return await listTopicProjectOverlays(ctx, {\n idMode: \"legacy\",\n });\n },\n async getFinalArtifact(ctx, artifactId) {\n return await ctx.db.get(artifactId);\n },\n };\n}\n\nlet resolverOverrides: Partial<GraphPrimitivesAppResolvers> = {};\n\nexport function configureGraphPrimitivesAppResolvers(\n overrides: Partial<GraphPrimitivesAppResolvers>\n): void {\n resolverOverrides = {\n ...resolverOverrides,\n ...overrides,\n };\n}\n\nexport function resetGraphPrimitivesAppResolvers(): void {\n resolverOverrides = {};\n}\n\nexport function resolveGraphPrimitivesAppResolvers(\n _ctx: GraphPrimitivesAppResolverContext\n): GraphPrimitivesAppResolvers {\n return {\n ...defaultResolvers(),\n ...resolverOverrides,\n };\n}\n","/**\n * Epistemic Beliefs API\n *\n * Clean API for managing beliefs in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces beliefs.ts.\n *\n * Key differences from beliefs.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no runtime ID translation fallback)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { v } from \"convex/values\";\nimport {\n detectTupleContradiction,\n evaluateTupleContradictionTransition,\n confidenceFromSL,\n normalizeTupleContradictionPolicy,\n readOpinionFromRecord,\n type ConfidencePolicyConfig,\n type Opinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport {\n checkProjectAccess,\n checkScopeAccess,\n} from \"@lucern/access-control/access\";\nimport {\n canAudienceClassAccess,\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { listAudienceRegistryRows } from \"@lucern/access-control/audienceRegistry\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { assertSchemaEnumValue } from \"@lucern/contracts/schema-helpers/enumValidation\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport {\n type BeliefLifecycleStatus,\n isPreValidationBeliefStatus,\n promoteBeliefStatusAfterScoring,\n resolveBeliefLifecycleStatus,\n} from \"./beliefLifecycle\";\nimport type { Doc, Id, MutationCtx } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport { collectConfidencePropagationDispatches } from \"./confidencePropagationDispatch\";\nimport {\n createInheritedContractRecord,\n type VerificationConfidenceTrigger,\n} from \"./epistemicContractHelpers\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { generateGlobalId } from \"./globalId\";\nimport { computeLogicalRole } from \"./logicalRoleInference\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n nodeMatchesWorkspaceReasoningScope,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\n// All IDs now use epistemicNodes exclusively\nconst insightIdUnion = v.id(\"epistemicNodes\");\nconst DEFAULT_PROJECT_BELIEF_LIMIT = 250;\nconst MAX_PROJECT_BELIEF_LIMIT = 1000;\nconst optionalBeliefScopeArgs = optionalScopeArgs;\n\ntype StructuredMutationError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype BeliefScopeArgs = {\n projectId?: string | null;\n topicId?: string | null;\n};\n\ntype AudienceClass = \"internal\" | \"restricted_external\" | \"public\";\n\nconst DEFAULT_CONFIDENCE_POLICY: ConfidencePolicyConfig = {\n scoringMode: \"after_worktree\",\n tupleContradiction: normalizeTupleContradictionPolicy(),\n};\n\nexport type BeliefConfidenceTrigger =\n | \"initial\"\n | \"evidence_added\"\n | \"evidence_removed\"\n | \"contradiction_detected\"\n | \"contradiction_resolved\"\n | \"manual\"\n | \"decay\"\n | \"agent_assessment\"\n | \"worktree_outcome\"\n | \"worktree_completed\"\n // SL-specific triggers\n | \"fusion\"\n | \"discount\"\n | \"deduction\"\n | \"backfill_synthetic\"\n | VerificationConfidenceTrigger;\n\nfunction throwStructuredMutationError(args: {\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredMutationError;\n error.status = args.status;\n error.code = args.code;\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nfunction readFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nfunction assertBaseRateInRange(baseRate: number, field = \"baseRate\"): number {\n if (baseRate < 0 || baseRate > 1) {\n throwStructuredMutationError({\n message: `${field} must be within [0, 1].`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Clamp ${field} into the inclusive [0, 1] interval.`,\n details: { field, baseRate },\n });\n }\n return baseRate;\n}\n\nfunction buildBeliefConfidenceRow(args: {\n beliefId: Id<\"epistemicNodes\">;\n belief: number;\n disbelief: number;\n uncertainty: number;\n baseRate: number;\n trigger: BeliefConfidenceTrigger;\n rationale?: string;\n assessedBy: string;\n assessedAt: number;\n slOperator?: SLOperator;\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringContradictionId?: Id<\"contradictions\">;\n triggeringWorktreeId?: string;\n}) {\n return {\n beliefId: args.beliefId,\n confidence: confidenceFromSL(\n args.belief,\n args.disbelief,\n args.uncertainty,\n args.baseRate\n ),\n belief: args.belief,\n disbelief: args.disbelief,\n uncertainty: args.uncertainty,\n baseRate: args.baseRate,\n slOperator: args.slOperator ?? (\"manual_assessment\" as const),\n trigger: args.trigger,\n ...(args.rationale ? { rationale: args.rationale } : {}),\n assessedBy: args.assessedBy,\n assessedAt: args.assessedAt,\n ...(args.triggeringEvidenceId\n ? {\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringEvidenceIds: [String(args.triggeringEvidenceId)],\n }\n : {}),\n ...(args.triggeringContradictionId\n ? {\n triggeringContradictionId: args.triggeringContradictionId,\n }\n : {}),\n ...(args.triggeringWorktreeId\n ? { triggeringWorktreeId: args.triggeringWorktreeId }\n : {}),\n };\n}\n\nfunction deriveSyntheticBackfillOpinion(\n source: Record<string, unknown>\n): { b: number; d: number; u: number; a: number } {\n const belief = readFiniteNumber(source.opinion_b) ?? readFiniteNumber(source.belief);\n const disbelief =\n readFiniteNumber(source.opinion_d) ?? readFiniteNumber(source.disbelief);\n const uncertainty =\n readFiniteNumber(source.opinion_u) ?? readFiniteNumber(source.uncertainty);\n const baseRate =\n readFiniteNumber(source.opinion_a) ?? readFiniteNumber(source.baseRate);\n\n if (\n belief !== undefined ||\n disbelief !== undefined ||\n uncertainty !== undefined ||\n baseRate !== undefined\n ) {\n return readOpinionFromRecord(source, {\n b: 0,\n d: 0,\n u: 1,\n a: 0.5,\n });\n }\n\n const confidence = clamp01(readFiniteNumber(source.confidence) ?? 0);\n return {\n b: confidence,\n d: 1 - confidence,\n u: 0,\n a: 0.5,\n };\n}\n\nfunction clampBeliefLimit(\n limit: number | undefined,\n fallback = DEFAULT_PROJECT_BELIEF_LIMIT\n): number {\n if (!Number.isFinite(limit)) {\n return fallback;\n }\n return Math.max(\n 1,\n Math.min(Math.floor(limit as number), MAX_PROJECT_BELIEF_LIMIT)\n );\n}\n\nfunction readTupleContradictedFlag(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction readBeliefOpinionSnapshot(\n node: Doc<\"epistemicNodes\">,\n metadata: Record<string, unknown>\n): Opinion {\n return readOpinionFromRecord(\n {\n ...metadata,\n opinion_b: (node as any).opinion_b,\n opinion_d: (node as any).opinion_d,\n opinion_u: (node as any).opinion_u,\n opinion_a: (node as any).opinion_a,\n },\n { b: 0, d: 0, u: 1, a: 0.5 }\n );\n}\n\nfunction deriveTupleContradictionSeverity(\n node: Doc<\"epistemicNodes\">\n): \"critical\" | \"significant\" | \"minor\" {\n const metadata = (node.metadata || {}) as Record<string, unknown>;\n const criticality = typeof metadata.criticality === \"string\"\n ? metadata.criticality\n : undefined;\n\n if (criticality === \"blocking\") {\n return \"critical\";\n }\n if (criticality === \"supporting\") {\n return \"minor\";\n }\n return \"significant\";\n}\n\nfunction formatTupleContradictionDescription(args: {\n opinion: Opinion;\n policy: ConfidencePolicyConfig[\"tupleContradiction\"];\n}): string {\n return `Tuple-space contradiction detected: b=${args.opinion.b.toFixed(2)} > ${args.policy.beliefThreshold.toFixed(2)} and d=${args.opinion.d.toFixed(2)} > ${args.policy.disbeliefThreshold.toFixed(2)}.`;\n}\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction generateContentHash(text: string): string {\n const content = `belief:${text.trim().toLowerCase().replace(/\\s+/g, \" \")}`;\n let hash = 5381;\n for (let i = 0; i < content.length; i++) {\n hash = (hash << 5) + hash + content.charCodeAt(i);\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\nexport function resolveBeliefWorktreeId(\n metadata: Record<string, unknown> | undefined\n): string | undefined {\n const worktreeId = metadata?.worktreeId;\n if (typeof worktreeId === \"string\" && worktreeId.trim().length > 0) {\n return worktreeId;\n }\n\n const sprintId = metadata?.sprintId;\n return typeof sprintId === \"string\" && sprintId.trim().length > 0\n ? sprintId\n : undefined;\n}\n\n// Map pillar names to valid pillar literals\ntype ValidPillar =\n | \"market\"\n | \"competition\"\n | \"product\"\n | \"team\"\n | \"financials\"\n | \"regulatory\"\n | \"timing\"\n | \"customer\"\n | \"technology\"\n | \"distribution\"\n | \"deal\"\n | \"risks\"\n | \"other\";\n\nfunction normalizePillar(pillar?: string): ValidPillar {\n if (!pillar) {\n return \"other\";\n }\n const lower = pillar.toLowerCase();\n const validPillars: ValidPillar[] = [\n \"market\",\n \"competition\",\n \"product\",\n \"team\",\n \"financials\",\n \"regulatory\",\n \"timing\",\n \"customer\",\n \"technology\",\n \"distribution\",\n \"deal\",\n \"risks\",\n ];\n return (validPillars.find((p) => lower.includes(p)) ||\n \"other\") as ValidPillar;\n}\n\nasync function markBeliefGraphDirty(\n ctx: any,\n scope: { projectId?: string | null; topicId?: string | null }\n): Promise<void> {\n const projectId =\n typeof scope.projectId === \"string\" && scope.projectId.trim().length > 0\n ? scope.projectId\n : undefined;\n const topicId =\n typeof scope.topicId === \"string\" && scope.topicId.trim().length > 0\n ? scope.topicId\n : undefined;\n\n if (!projectId && !topicId) {\n return;\n }\n\n if (projectId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n { projectId }\n );\n }\n if (topicId) {\n await ctx.scheduler.runAfter(\n 0,\n (internal.graphAnalysisCache as any).markCacheStaleByTopic,\n { topicId }\n );\n }\n\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n topicId ?? projectId!,\n {\n lastActivityAt: Date.now(),\n }\n );\n}\n\nasync function resolveBeliefScopeOrNull(\n ctx: any,\n args: BeliefScopeArgs\n) {\n if (!args.projectId && !args.topicId) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n projectId: args.projectId ?? undefined,\n topicId: args.topicId ?? undefined,\n });\n } catch {\n return null;\n }\n}\n\nasync function getBeliefNodesForScope(\n ctx: {\n db: {\n query: (...args: any[]) => {\n withIndex: (...args: any[]) => any;\n };\n };\n },\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n args?: { scanLimit?: number; status?: string }\n) {\n const baseQuery = ctx.db.query(\"epistemicNodes\").withIndex(\n \"by_topic_type\",\n (q: any) => q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n );\n const nodes =\n typeof args?.scanLimit === \"number\"\n ? await baseQuery.order(\"desc\").take(args.scanLimit)\n : await baseQuery.collect();\n const scopedNodes = nodes.filter((node: Doc<\"epistemicNodes\">) =>\n nodeMatchesWorkspaceReasoningScope(node, scope)\n );\n\n if (!args?.status) {\n return scopedNodes;\n }\n\n return scopedNodes.filter((node) => node.status === args.status);\n}\n\nfunction createBeliefAudienceResolver(\n registryRows: Array<{\n audienceKey?: string | null;\n audienceClass: AudienceClass;\n }>\n) {\n const audienceClassByKey = new Map<string, AudienceClass>(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ])\n );\n\n return (\n audienceKey: string | undefined | null,\n fallback: AudienceClass\n ): AudienceClass => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return (\n audienceClassByKey.get(key) ??\n (classFromAudienceKey(key, fallback) as AudienceClass)\n );\n };\n}\n\nexport function flattenBeliefNode(node: Doc<\"epistemicNodes\">) {\n const meta = (node.metadata || {}) as Record<string, unknown>;\n const worktreeId = resolveBeliefWorktreeId(meta);\n const tupleContradicted =\n readTupleContradictedFlag((node as any).tupleContradicted) ??\n readTupleContradictedFlag(meta.tupleContradicted) ??\n false;\n\n return {\n _id: node._id,\n _epistemicNodeId: node._id,\n _creationTime: node._creationTime,\n belief: node.canonicalText,\n formulation: node.canonicalText,\n projectId: node.projectId,\n topicId: node.topicId,\n userId: (node as any).userId || node.createdBy || \"\",\n confidence: (meta.confidence as \"high\" | \"medium\" | \"low\") || \"untested\",\n status: node.status,\n beliefStatus: resolveBeliefStatus(node, meta),\n topic: (meta.topic as string) || (meta.pillar as string) || \"other\",\n pillar: (meta.pillar as string) || (meta.topic as string) || \"\",\n category: (meta.category as string) || \"\",\n subcategory: (meta.subcategory as string) || \"\",\n categoryIcon: (meta.categoryIcon as string) || \"\",\n supportingEvidence: (meta.supportingEvidenceIds as string[]) || [],\n contradictingEvidence: (meta.contradictingEvidenceIds as string[]) || [],\n testingQuestions: (meta.testingQuestionIds as string[]) || [],\n linkedInsights: (meta.linkedInsightIds as string[]) || [],\n createdAt: node.createdAt,\n updatedAt: node.updatedAt || node.createdAt,\n tupleContradicted,\n sprintId: (meta.sprintId as string) || undefined,\n worktreeId,\n sourceBeliefIds: (meta.sourceBeliefIds as string[]) || undefined,\n criticality:\n (meta.criticality as\n | \"critical\"\n | \"supporting\"\n | \"nice_to_have\"\n | \"unanalyzed\"\n | \"blocking\"\n | \"important\") || \"unanalyzed\",\n rationale: (meta.rationale as string) || \"\",\n audienceLabel: node.audienceLabel,\n policyTags: node.policyTags,\n sensitivityTier: node.sensitivityTier,\n exportClass: node.exportClass,\n anonymizationClass: node.anonymizationClass,\n };\n}\n\nfunction resolveBeliefStatus(\n node: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n },\n metadata: Record<string, unknown>\n): BeliefLifecycleStatus {\n return resolveBeliefLifecycleStatus({\n beliefStatus: node.beliefStatus,\n confidence: node.confidence,\n predictionMeta: node.predictionMeta,\n metadata,\n });\n}\n\nasync function hasCompletedWorktreeForBelief(\n ctx: { db: any },\n beliefNodeId: Id<\"epistemicNodes\">,\n): Promise<boolean> {\n // Check if the belief is linked to a completed worktree via worktreeBeliefCluster\n const clusterMembership = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_belief\", (q: any) => q.eq(\"beliefId\", beliefNodeId))\n .collect();\n for (const membership of clusterMembership) {\n const worktree = await ctx.db.get(membership.worktreeId);\n if (worktree?.status === \"completed\" || worktree?.status === \"merged\") {\n return true;\n }\n }\n return false;\n}\n\nasync function getActiveConfidencePolicy(\n ctx: { db: any },\n): Promise<ConfidencePolicyConfig> {\n try {\n const activeConfig = await ctx.db\n .query(\"logicSprintScoring\")\n .withIndex(\"by_active\", (q: any) => q.eq(\"isActive\", true))\n .first();\n\n return {\n scoringMode:\n activeConfig?.confidencePolicy === \"always\"\n ? \"always\"\n : DEFAULT_CONFIDENCE_POLICY.scoringMode,\n tupleContradiction: normalizeTupleContradictionPolicy(\n activeConfig?.tupleContradictionPolicy as\n | Partial<ConfidencePolicyConfig[\"tupleContradiction\"]>\n | undefined\n ),\n };\n } catch {\n // K-tier/component environments do not carry logicSprintScoring.\n return DEFAULT_CONFIDENCE_POLICY;\n }\n}\n\nexport async function applyBeliefConfidenceChange(\n ctx: MutationCtx,\n args: {\n nodeId: Id<\"epistemicNodes\">;\n // SL opinion — the ONLY confidence input (EK-7)\n belief: number; // b: evidence FOR [0,1]\n disbelief: number; // d: evidence AGAINST [0,1]\n uncertainty: number; // u: lack of evidence [0,1]\n baseRate?: number; // a: prior probability [0,1], defaults to 0.5\n trigger: BeliefConfidenceTrigger;\n rationale?: string;\n authenticatedUserId: string;\n slOperator?: SLOperator; // which SL operator produced this opinion\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringWorktreeId?: string;\n }\n): Promise<{\n nodeId: Id<\"epistemicNodes\">;\n previousConfidence: number;\n newConfidence: number;\n opinion: { b: number; d: number; u: number; a: number };\n beliefConfidenceId: Id<\"beliefConfidence\">;\n}> {\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node) {\n throwStructuredMutationError({\n message: \"Node not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion:\n \"Verify nodeId points to an existing node before modulating confidence.\",\n details: { nodeId: args.nodeId },\n });\n }\n if (node.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `modulateConfidence only applies to belief nodes. Received nodeType \"${node.nodeType}\". Entity nodes (company, person, investor, etc.) do not have confidence — use entityLifecycle.updateEntityAttributes for mutable entity data.`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"entity.no_confidence\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes for entity mutations. modulateConfidence is for belief nodes only.\",\n details: { nodeId: args.nodeId, nodeType: node.nodeType },\n });\n }\n if (!node.projectId) {\n throwStructuredMutationError({\n message: \"Belief has no project scope.\",\n status: 400,\n code: \"MISSING_SCOPE\",\n invariantCode: \"belief.project_required\",\n suggestion: \"Belief must have a projectId to modulate confidence.\",\n details: { nodeId: args.nodeId },\n });\n }\n await requireProjectWriteAccess(ctx, node.projectId, args.authenticatedUserId);\n\n const existingMetadata = (node.metadata || {}) as Record<string, unknown>;\n const currentBeliefStatus = resolveBeliefStatus(node, existingMetadata);\n const confidencePolicy = await getActiveConfidencePolicy(ctx);\n if (\n confidencePolicy.scoringMode === \"after_worktree\" &&\n isPreValidationBeliefStatus(currentBeliefStatus)\n ) {\n const hasCompletedWorktree = await hasCompletedWorktreeForBelief(\n ctx,\n args.nodeId,\n );\n if (!hasCompletedWorktree) {\n throwStructuredMutationError({\n message:\n \"Cannot score belief before worktree completion. Complete a worktree that tests this belief first.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"belief.confidence_append_only\",\n suggestion:\n \"Complete a worktree linked to this belief before recording confidence modulation.\",\n details: { nodeId: args.nodeId },\n });\n }\n }\n\n const previousConfidence = node.confidence || 0.5;\n const predictionMeta =\n (node as any).predictionMeta || existingMetadata.predictionMeta;\n const previousOpinion = readBeliefOpinionSnapshot(node, existingMetadata);\n\n // SL opinion — the only path (EK-7)\n const slB = args.belief;\n const slD = args.disbelief;\n const slU = args.uncertainty;\n const slA = args.baseRate ?? 0.5;\n const nextOpinion = { b: slB, d: slD, u: slU, a: slA };\n const derivedConfidence = confidenceFromSL(slB, slD, slU, slA);\n const isFirstScoring =\n typeof node.confidence !== \"number\" || !Number.isFinite(node.confidence);\n const previousTupleContradicted =\n readTupleContradictedFlag((node as any).tupleContradicted) ??\n readTupleContradictedFlag(existingMetadata.tupleContradicted) ??\n detectTupleContradiction(\n previousOpinion,\n confidencePolicy.tupleContradiction.beliefThreshold,\n confidencePolicy.tupleContradiction.disbeliefThreshold\n );\n const tupleTransition = evaluateTupleContradictionTransition({\n previousTupleContradicted,\n opinion: nextOpinion,\n policy: confidencePolicy.tupleContradiction,\n });\n const tupleContradictionDescription = formatTupleContradictionDescription({\n opinion: nextOpinion,\n policy: tupleTransition.policy,\n });\n\n const newBeliefStatus = promoteBeliefStatusAfterScoring(\n currentBeliefStatus,\n {\n confidence: derivedConfidence,\n predictionMeta,\n metadata: existingMetadata,\n }\n );\n\n let tupleContradictionId: Id<\"contradictions\"> | undefined;\n if (tupleTransition.crossedIntoTupleContradiction) {\n tupleContradictionId = (await ctx.runMutation(\"contradictions:create\" as any, {\n projectId: node.projectId,\n topicId: node.topicId as any,\n beliefId: args.nodeId,\n beliefBId: args.nodeId,\n supportingInsightIds: [],\n contradictingInsightIds: [],\n severity: deriveTupleContradictionSeverity(node),\n source: \"tuple_space\",\n detectionMethod: \"agent\",\n description: tupleContradictionDescription,\n createdBy: args.authenticatedUserId,\n })) as Id<\"contradictions\">;\n }\n\n await ctx.db.patch(args.nodeId, {\n confidence: derivedConfidence,\n beliefStatus: newBeliefStatus,\n tupleContradicted: tupleTransition.tupleContradicted,\n updatedAt: now,\n // Store SL opinion fields at node level for fast access\n opinion_b: slB,\n opinion_d: slD,\n opinion_u: slU,\n opinion_a: slA,\n metadata: {\n ...existingMetadata,\n beliefStatus: newBeliefStatus,\n slBelief: slB,\n slDisbelief: slD,\n slUncertainty: slU,\n slBaseRate: slA,\n tupleContradicted: tupleTransition.tupleContradicted,\n },\n } as any);\n\n if (isFirstScoring) {\n const nodeTopicId = node.topicId;\n const themeNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic\", (q: any) =>\n q.eq(\"topicId\", nodeTopicId || node.projectId))\n .filter((q) => q.eq(q.field(\"nodeType\"), \"theme\"))\n .collect();\n\n for (const theme of themeNodes) {\n if (theme.globalId && node.globalId) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: `edge-${node.globalId}-relates_to_thesis-${theme.globalId}`,\n fromGlobalId: node.globalId,\n toGlobalId: theme.globalId,\n edgeType: \"relates_to_thesis\",\n weight: derivedConfidence,\n createdBy: args.authenticatedUserId,\n topicId: String(node.projectId),\n fromNodeType: \"belief\",\n toNodeType: \"theme\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n }\n }\n }\n\n const storedRationale =\n args.rationale ??\n `Confidence changed from ${previousConfidence.toFixed(2)} (nodeId: ${args.nodeId})`;\n\n const beliefConfidenceId = (await ctx.db.insert(\"beliefConfidence\", {\n ...buildBeliefConfidenceRow({\n beliefId: args.nodeId as Id<\"epistemicNodes\">,\n belief: slB,\n disbelief: slD,\n uncertainty: slU,\n baseRate: slA,\n trigger: args.trigger,\n rationale: storedRationale,\n assessedBy: args.authenticatedUserId,\n assessedAt: now,\n slOperator: args.slOperator,\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringContradictionId: tupleContradictionId,\n triggeringWorktreeId: args.triggeringWorktreeId,\n }),\n } as any)) as Id<\"beliefConfidence\">;\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"confidence_changed\",\n previousState: {\n confidence: previousConfidence,\n tupleContradicted: previousTupleContradicted,\n },\n newState: {\n opinion: nextOpinion,\n confidence: derivedConfidence,\n trigger: args.trigger,\n rationale: storedRationale,\n tupleContradicted: tupleTransition.tupleContradicted,\n tupleContradictionPolicy: tupleTransition.policy,\n ...(tupleContradictionId\n ? { tupleContradictionId: String(tupleContradictionId) }\n : {}),\n },\n changedBy: args.authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n topicId: node.topicId,\n });\n\n if (\n tupleTransition.crossedIntoTupleContradiction ||\n tupleTransition.crossedOutOfTupleContradiction\n ) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n previousState: { tupleContradicted: previousTupleContradicted },\n newState: {\n tupleContradicted: tupleTransition.tupleContradicted,\n action: tupleTransition.crossedIntoTupleContradiction\n ? \"tuple_contradiction_detected\"\n : \"tuple_contradiction_cleared\",\n opinion: nextOpinion,\n tupleContradictionPolicy: tupleTransition.policy,\n ...(tupleContradictionId\n ? { tupleContradictionId: String(tupleContradictionId) }\n : {}),\n },\n rationale: tupleTransition.crossedIntoTupleContradiction\n ? tupleContradictionDescription\n : `Tuple-space contradiction cleared: b=${nextOpinion.b.toFixed(2)}, d=${nextOpinion.d.toFixed(2)} no longer exceed the configured policy thresholds.`,\n changedBy: args.authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n topicId: node.topicId,\n });\n }\n\n if (Math.abs(derivedConfidence - previousConfidence) >= 0.15) {\n await ctx.scheduler.runAfter(\n 5000,\n internal.bi.contradictionSemanticDetector.scanAffectedBeliefs,\n {\n beliefId: args.nodeId as string,\n projectId: node.projectId,\n }\n );\n }\n\n // WT-4: Re-evaluate publication rules after confidence changes.\n // Publication is visibility-based: rules auto-determine which workspace\n // nodes are exposed at tenant scope based on confidence thresholds, etc.\n if (node.workspaceId && node.tenantId) {\n await ctx.scheduler.runAfter(\n 0,\n (internal as any).publication.evaluateNodePublication,\n { nodeId: args.nodeId }\n );\n }\n\n return {\n nodeId: args.nodeId,\n previousConfidence,\n newConfidence: derivedConfidence,\n opinion: { b: slB, d: slD, u: slU, a: slA },\n beliefConfidenceId,\n };\n}\n\nfunction propagationTriggerForEdge(\n edgeType: string,\n weight: number\n): BeliefConfidenceTrigger {\n if (edgeType === \"contradicts\" || edgeType === \"refutes\") {\n return \"contradiction_detected\";\n }\n\n if ((edgeType === \"supports\" || edgeType === \"informs\") && weight < 0) {\n return \"contradiction_detected\";\n }\n\n return \"evidence_added\";\n}\n\n// =============================================================================\n// SL PROPAGATION — EDGE-DEFINED OPINION PROPAGATION (EK-7, LKC-5)\n// =============================================================================\n\n/**\n * Propagate a confidence change through graph edges whose specs allow it.\n *\n * After a belief is scored, this function:\n * 1. Reads the graph-primitives edge propagation specs\n * 2. Traverses matching incoming/outgoing/bidirectional edges hop by hop\n * 3. Applies the edge operator with per-hop damping and hop limits\n * 4. Writes propagated opinions as new beliefConfidence entries\n */\nexport const propagateConfidenceChange = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n opinion_b: v.number(),\n opinion_d: v.number(),\n opinion_u: v.number(),\n opinion_a: v.number(),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const sourceOpinion = {\n b: args.opinion_b,\n d: args.opinion_d,\n u: args.opinion_u,\n a: args.opinion_a,\n };\n\n const sourceNode = await ctx.db.get(args.nodeId);\n const sourceScope = await resolveNodeScopeForWorkspaceIsolation(\n ctx,\n sourceNode\n );\n const dispatches = await collectConfidencePropagationDispatches({\n sourceNodeId: args.nodeId,\n sourceOpinion,\n sourceScope,\n queryEdges: async ({ nodeId, spec, direction }) => {\n return await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\n direction === \"outgoing\" ? \"by_from_type\" : \"by_to_type\",\n (q: any) =>\n direction === \"outgoing\"\n ? q.eq(\"fromNodeId\", nodeId).eq(\"edgeType\", spec.edgeType)\n : q.eq(\"toNodeId\", nodeId).eq(\"edgeType\", spec.edgeType)\n )\n .collect();\n },\n getNode: async (nodeId) => await ctx.db.get(nodeId),\n });\n\n for (const dispatch of dispatches) {\n await applyBeliefConfidenceChange(ctx, {\n nodeId: dispatch.targetNodeId,\n belief: dispatch.opinion.b,\n disbelief: dispatch.opinion.d,\n uncertainty: dispatch.opinion.u,\n baseRate: dispatch.opinion.a,\n trigger: propagationTriggerForEdge(dispatch.edgeType, dispatch.weight),\n rationale: `SL propagation via ${dispatch.edgeType} edge: ${dispatch.rationale}`,\n authenticatedUserId: args.userId,\n slOperator: dispatch.operator as SLOperator,\n });\n }\n\n return {\n propagated: dispatches.map((dispatch) => ({\n targetNodeId: String(dispatch.targetNodeId),\n edgeType: dispatch.edgeType,\n operator: dispatch.operator,\n })),\n count: dispatches.length,\n };\n },\n});\n\nasync function requireAuthenticatedUserId(ctx: {\n auth: { getUserIdentity: () => Promise<unknown> };\n}): Promise<string> {\n const userId = await getCurrentUserId(ctx as any);\n if (!userId) {\n throwStructuredMutationError({\n message: \"Authentication required.\",\n status: 401,\n code: \"AUTHENTICATION_REQUIRED\",\n invariantCode: \"auth.required\",\n suggestion:\n \"Provide a valid bearer token before invoking belief mutations.\",\n });\n }\n return userId;\n}\n\nasync function requireProjectWriteAccess(\n ctx: { db: unknown },\n projectId: string,\n userId: string\n): Promise<void> {\n const hasAccess = await checkProjectAccess(ctx as any, projectId, userId);\n if (!hasAccess) {\n throwStructuredMutationError({\n message: \"Project access required.\",\n status: 403,\n code: \"FORBIDDEN\",\n invariantCode: \"policy.scope_required\",\n suggestion: \"Request write access for the project and retry.\",\n details: { projectId, userId },\n });\n }\n}\n\n// =============================================================================\n// CREATE\n// =============================================================================\n\n/**\n * Create a new belief in the epistemic spine.\n * Returns the epistemicNodes ID directly (not a beliefs ID).\n */\nexport const create = mutation({\n args: {\n ...optionalBeliefScopeArgs,\n formulation: v.string(),\n beliefType: v.optional(v.string()),\n rationale: v.optional(v.string()),\n confidence: v.optional(\n v.union(\n v.literal(\"untested\"),\n v.literal(\"high\"),\n v.literal(\"medium\"),\n v.literal(\"low\")\n )\n ),\n pillar: v.optional(v.string()),\n worktreeId: v.optional(v.string()),\n sourceType: v.optional(\n v.union(\n v.literal(\"human\"),\n v.literal(\"ai_extracted\"),\n v.literal(\"ai_generated\")\n )\n ),\n userId: v.string(),\n // === CLASSIFICATION FIELDS ===\n reversibility: v.optional(\n v.union(\n v.literal(\"irreversible\"),\n v.literal(\"hard_to_reverse\"),\n v.literal(\"reversible\"),\n v.literal(\"trivial\")\n )\n ),\n predictionMeta: v.optional(\n v.object({\n isPrediction: v.boolean(),\n registeredAt: v.number(),\n expectedBy: v.optional(v.number()),\n })\n ),\n baseRate: v.number(),\n metadata: v.optional(v.any()), // Additional metadata including isConditional\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"belief\",\n mutationName: \"epistemicBeliefs.create\",\n });\n const topic = await ctx.db.get(scope.topicId);\n const normalizedBeliefType = await assertSchemaEnumValue(ctx, {\n category: \"belief_type\",\n value: args.beliefType,\n tenantId: topic?.tenantId,\n context: \"epistemicBeliefs.create\",\n });\n if (scope.projectId) {\n await requireProjectWriteAccess(\n ctx,\n scope.projectId,\n authenticatedUserId\n );\n }\n const now = Date.now();\n const baseRate = assertBaseRateInRange(args.baseRate);\n const initialBeliefStatus = args.worktreeId ? \"hypothesis\" : \"assumption\";\n const initialEpistemicStatus = args.worktreeId ? \"hypothesis\" : \"assumption\";\n const seedOpinion = {\n opinion_b: 0,\n opinion_d: 0,\n opinion_u: 1,\n opinion_a: baseRate,\n };\n const pillar = normalizePillar(args.pillar);\n\n // Merge additional metadata with standard metadata\n const additionalMeta = (args.metadata as Record<string, unknown>) || {};\n\n // Create the epistemic node\n const beliefGlobalId = generateGlobalId();\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId: beliefGlobalId,\n nodeType: \"belief\",\n epistemicLayer: \"L3\",\n canonicalText: args.formulation,\n contentHash: generateContentHash(args.formulation),\n content: args.rationale,\n title:\n args.formulation.slice(0, 100) +\n (args.formulation.length > 100 ? \"...\" : \"\"),\n metadata: {\n pillar,\n // No confidenceLevel — only set after worktree completion via modulateConfidence()\n status: \"active\",\n worktreeId: args.worktreeId,\n beliefStatus: initialBeliefStatus,\n epistemicStatus: initialEpistemicStatus,\n tupleContradicted: false,\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n ...additionalMeta, // Includes isConditional if provided\n },\n beliefStatus: initialBeliefStatus as any,\n ...seedOpinion,\n tupleContradicted: false,\n // Classification fields\n reversibility: args.reversibility ?? \"reversible\",\n predictionMeta: args.predictionMeta,\n // Infer epistemicStatus based on context\n epistemicStatus: initialEpistemicStatus as any,\n sourceType: args.sourceType || \"human\",\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n confidence: undefined, // No scalar confidence until worktree completion\n verificationStatus: \"unverified\",\n status: \"active\",\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n createdBy: authenticatedUserId,\n createdAt: now,\n updatedAt: now,\n });\n\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: nodeId,\n belief: seedOpinion.opinion_b,\n disbelief: seedOpinion.opinion_d,\n uncertainty: seedOpinion.opinion_u,\n baseRate,\n trigger: \"initial\",\n rationale:\n \"LKC-2 mandatory prior: seeded vacuous opinion at belief creation.\",\n assessedBy: authenticatedUserId,\n assessedAt: now,\n slOperator: \"manual_assessment\",\n }) as any\n );\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Schedule embedding generation\n await scheduleEmbeddingGeneration({\n ctx, nodeId, projectId: scope.projectId, topicId: scope.topicId,\n createdBy: authenticatedUserId, nodeType: \"belief\", text: args.formulation,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: null,\n newState: {\n formulation: args.formulation,\n status: \"active\",\n baseRate: seedOpinion.opinion_a,\n tupleContradicted: false,\n opinion: {\n b: seedOpinion.opinion_b,\n d: seedOpinion.opinion_d,\n u: seedOpinion.opinion_u,\n a: seedOpinion.opinion_a,\n },\n },\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n // Schedule embedding generation for semantic search\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n createdBy: authenticatedUserId,\n nodeType: \"belief\" as const,\n text: args.rationale\n ? `${args.formulation}\\n\\nRationale: ${args.rationale}`\n : args.formulation,\n // Don't pass confidence — \"untested\" is a string, but the\n // embedding action expects v.optional(v.number()). New beliefs\n // have no numeric confidence until scoring.\n }\n );\n }\n\n // ==========================================================================\n // GRAPH TOPOLOGY - SPRINT IS THE EPISTEMIC BOUNDARY\n // ==========================================================================\n //\n // The SPRINT connects beliefs to the theme, not belief creation.\n //\n // Flow:\n // 1. ASSUMPTION beliefs: Raw inputs, float disconnected from theme\n // 2. HYPOTHESIS (in sprint): Being tested, still no theme edge\n // 3. SCORED (sprint complete): NOW gets belongs_to edge to theme\n // - Edge weight = conviction level (high conviction = shorter edge)\n //\n // The belongs_to edge is created ONLY when:\n // - Sprint completes → belief becomes \"scored\" → create theme edge\n // - See: sprints.ts completeSprint mutation\n //\n // Other nodes NEVER connect directly to theme:\n // - Questions → test → Beliefs (not theme)\n // - Evidence → answer/inform → Questions/Beliefs (not theme)\n //\n // NO THEME EDGE CREATED HERE - HAPPENS IN SPRINT COMPLETION\n // ==========================================================================\n\n // ==========================================================================\n // ONTOLOGY: Schedule belief classification for entity extraction\n // ==========================================================================\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 2000, // 2 second delay\n internal.nodeClassification.scheduleClassification,\n {\n nodeId,\n nodeType: \"belief\",\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n // ==========================================================================\n // PILLAR: Auto-categorize uncategorized beliefs into canonical pillars\n // ==========================================================================\n if (pillar === \"other\" && (scope.projectId || scope.topicId)) {\n await ctx.scheduler.runAfter(\n 2500,\n \"beliefCategorization:autoCategorizeBelief\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n // ==========================================================================\n // TEMPORAL: Schedule LLM temporal classification (factual vs forecast)\n // Automatically determines if this is a prediction, extracts measure dates\n // and conditions. Users never need to tag beliefs manually.\n // ==========================================================================\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 3000, // 3 second delay — after entity extraction\n internal.beliefTemporalClassifier.classifyBelief,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n // ==========================================================================\n // CACHE: Invalidate graph analysis cache\n // ==========================================================================\n await markBeliefGraphDirty(ctx, {\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n return { nodeId };\n },\n});\n\n// =============================================================================\n// GET BY ID\n// =============================================================================\n\n/**\n * Get a belief by its epistemicNodes ID.\n */\nexport const getById = query({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n beliefId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const id = (args.nodeId ?? args.beliefId) as\n | Id<\"epistemicNodes\">\n | undefined;\n if (!id) {\n return null;\n }\n const node = await ctx.db.get(id);\n if (!node || node.nodeType !== \"belief\") {\n return null;\n }\n return node;\n },\n});\n\n// =============================================================================\n// REFINE BELIEF\n// =============================================================================\n\n/**\n * Refine an unscored belief in place.\n *\n * Lucern Invariant #1 + #2: Draft beliefs may be refined in place, but scored\n * beliefs are immutable and must be evolved through forkBelief().\n */\nexport const refineBelief = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n canonicalText: v.optional(v.string()),\n title: v.optional(v.string()),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node) {\n throwStructuredMutationError({\n message: \"Belief not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion: \"Verify nodeId points to an existing belief before refining.\",\n details: { nodeId: args.nodeId },\n });\n }\n if (node.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `refineBelief only applies to belief nodes. Received nodeType \"${node.nodeType}\".`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"entity.no_refine\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes for entity mutations.\",\n details: { nodeId: args.nodeId, nodeType: node.nodeType },\n });\n }\n if (!node.projectId) {\n throwStructuredMutationError({\n message: \"Belief has no project scope.\",\n status: 400,\n code: \"MISSING_SCOPE\",\n invariantCode: \"belief.project_required\",\n suggestion: \"Belief must have a projectId to refine.\",\n details: { nodeId: args.nodeId },\n });\n }\n\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n if (\n typeof node.confidence === \"number\" &&\n Number.isFinite(node.confidence)\n ) {\n throwStructuredMutationError({\n message:\n \"Scored beliefs are immutable. Use forkBelief to evolve a scored belief.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"belief.versioning.scored_immutable\",\n suggestion:\n \"Use forkBelief() to create a new version instead of refining in place.\",\n details: { nodeId: args.nodeId, confidence: node.confidence },\n });\n }\n\n const nextText =\n typeof args.canonicalText === \"string\" && args.canonicalText.trim().length > 0\n ? args.canonicalText.trim()\n : undefined;\n const nextTitle =\n typeof args.title === \"string\" && args.title.trim().length > 0\n ? args.title.trim()\n : undefined;\n\n const patch: Record<string, unknown> = { updatedAt: now };\n if (nextText !== undefined) {\n patch.canonicalText = nextText;\n patch.title =\n nextTitle ??\n nextText.slice(0, 100) +\n (nextText.length > 100 ? \"...\" : \"\");\n patch.contentHash = generateContentHash(nextText);\n } else if (nextTitle !== undefined) {\n patch.title = nextTitle;\n }\n if (args.rationale !== undefined) {\n patch.content = args.rationale;\n }\n\n await ctx.db.patch(args.nodeId, patch);\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n if (nextText !== undefined) {\n await scheduleEmbeddingGeneration({\n ctx,\n nodeId: args.nodeId,\n projectId: node.projectId,\n topicId: node.topicId,\n createdBy: authenticatedUserId,\n nodeType: \"belief\",\n text: args.rationale\n ? `${nextText}\\n\\nRationale: ${args.rationale}`\n : nextText,\n });\n }\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n canonicalText: node.canonicalText,\n title: node.title,\n content: node.content,\n },\n newState: {\n canonicalText:\n (patch.canonicalText as string | undefined) ?? node.canonicalText,\n title: (patch.title as string | undefined) ?? node.title,\n content: (patch.content as string | undefined) ?? node.content,\n action: \"refined\",\n rationale: args.rationale,\n },\n projectId: node.projectId,\n topicId: node.topicId,\n });\n\n await markBeliefGraphDirty(ctx, {\n projectId: node.projectId,\n topicId: node.topicId,\n });\n\n return { nodeId: args.nodeId };\n },\n});\n\n// =============================================================================\n// GET BY PROJECT\n// =============================================================================\n\n/**\n * Get all beliefs for a project.\n */\nexport const getByProject = query({\n args: {\n ...optionalBeliefScopeArgs,\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId && !args.topicId) {\n return [];\n }\n\n const pageSize = clampBeliefLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n let scope:\n | Awaited<ReturnType<typeof resolveTopicProjectScope>>\n | { tenantId: undefined; workspaceId: undefined; topicId?: undefined; projectId?: undefined };\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch {\n return [];\n }\n\n if (args.userId) {\n const scopeId = scope.topicId ? String(scope.topicId) : scope.projectId;\n if (!scopeId) {\n return [];\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n }\n\n const query = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n );\n\n const nodes = await query.order(\"desc\").take(scanLimit);\n const scopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, scope)\n );\n\n // Filter by status if provided\n if (args.status) {\n return scopedNodes\n .filter((n) => n.status === args.status)\n .slice(0, pageSize);\n }\n\n // Default: return active beliefs\n return scopedNodes.filter((n) => n.status === \"active\").slice(0, pageSize);\n },\n});\n\n/**\n * Get all beliefs for a topic.\n */\nexport const getByTopic = query({\n args: {\n topicId: v.string(),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampBeliefLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const scope = await resolveTopicProjectScope(ctx, { topicId: args.topicId });\n const query = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n );\n\n const nodes = await query.order(\"desc\").take(scanLimit);\n const scopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n })\n );\n if (args.status) {\n return scopedNodes\n .filter((n) => n.status === args.status)\n .slice(0, pageSize);\n }\n return scopedNodes.filter((n) => n.status === \"active\").slice(0, pageSize);\n },\n});\n\n// =============================================================================\n// FORK BELIEF\n// =============================================================================\n\n/**\n * Fork a belief - create a new version while preserving the original.\n * This is the Lucern-compliant way to \"update\" a belief.\n *\n * Lucern Invariant #1: Beliefs are append-only. Never modify formulation.\n * Lucern Invariant #3: Lineage is permanent.\n */\nexport const forkBelief = mutation({\n args: {\n parentNodeId: v.id(\"epistemicNodes\"),\n newFormulation: v.string(),\n forkReason: v.union(\n v.literal(\"refinement\"),\n v.literal(\"contradiction_response\"),\n v.literal(\"scope_change\"),\n v.literal(\"confidence_collapse\"),\n v.literal(\"manual\")\n ),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n const _confidencePolicy = await getActiveConfidencePolicy(ctx);\n\n // Get the parent belief\n const parent = await ctx.db.get(args.parentNodeId);\n if (!parent) {\n throwStructuredMutationError({\n message: \"Parent node not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion:\n \"Verify parentNodeId points to an existing node before forking.\",\n details: { parentNodeId: args.parentNodeId },\n });\n }\n if (parent.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `forkBelief only applies to belief nodes. Received nodeType \"${parent.nodeType}\". Entity nodes (company, person, investor, etc.) are mutable — use entityLifecycle.updateEntityAttributes instead of forking.`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"entity.no_fork\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes for entity mutations. forkBelief is for belief nodes only.\",\n details: { parentNodeId: args.parentNodeId, nodeType: parent.nodeType },\n });\n }\n if (!parent.projectId) {\n throwStructuredMutationError({\n message: \"Parent belief has no project scope.\",\n status: 400,\n code: \"MISSING_SCOPE\",\n invariantCode: \"belief.project_required\",\n suggestion: \"Belief must have a projectId to fork.\",\n details: { parentNodeId: args.parentNodeId },\n });\n }\n await requireProjectWriteAccess(ctx, parent.projectId, authenticatedUserId);\n\n const metadata = parent.metadata as Record<string, unknown> | undefined;\n const forkBeliefStatus: BeliefLifecycleStatus = \"hypothesis\";\n\n // Create the new forked belief\n const newBeliefGlobalId = generateGlobalId();\n const newNodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId: newBeliefGlobalId,\n nodeType: \"belief\",\n epistemicLayer: \"L3\",\n canonicalText: args.newFormulation,\n contentHash: generateContentHash(args.newFormulation),\n content: args.rationale || parent.content,\n title:\n args.newFormulation.slice(0, 100) +\n (args.newFormulation.length > 100 ? \"...\" : \"\"),\n metadata: {\n ...metadata,\n forkedFrom: args.parentNodeId,\n forkReason: args.forkReason,\n forkTimestamp: now,\n forkedBy: authenticatedUserId,\n status: \"active\",\n beliefStatus: forkBeliefStatus,\n tupleContradicted: false,\n },\n beliefStatus: forkBeliefStatus as any,\n sourceType: parent.sourceType,\n confidence: undefined,\n tupleContradicted: false,\n verificationStatus: \"unverified\",\n status: \"active\",\n projectId: parent.projectId,\n topicId: parent.topicId,\n createdBy: authenticatedUserId,\n createdAt: now,\n updatedAt: now,\n });\n\n const inheritedContracts = (await (ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q: any) =>\n q.eq(\"beliefNodeId\", args.parentNodeId)\n )\n .collect()) as Array<Record<string, unknown> & { status?: string }>;\n\n for (const contract of inheritedContracts) {\n if (contract.status === \"archived\") {\n continue;\n }\n await (ctx.db as any).insert(\n \"epistemicContracts\",\n createInheritedContractRecord(contract as any, {\n beliefNodeId: newNodeId,\n topicId: parent.topicId,\n createdBy: authenticatedUserId,\n now,\n }) as any\n );\n }\n\n // Schedule Neo4j node sync FIRST — the new node must exist in Neo4j\n // before the supersedes edge can be created (MATCH clause requirement).\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: newNodeId,\n operation: \"upsert\",\n });\n\n // Create supersedes edge with delay to let node sync complete first.\n await ctx.scheduler.runAfter(5000, internal.neo4jEdgeAPI.createEdge, {\n globalId: generateGlobalId(),\n fromGlobalId: newBeliefGlobalId,\n toGlobalId: parent.globalId,\n edgeType: \"supersedes\",\n context: `Fork reason: ${args.forkReason}`,\n createdBy: authenticatedUserId,\n topicId: parent.projectId ? String(parent.projectId) : undefined,\n fromNodeType: \"belief\",\n toNodeType: \"belief\",\n });\n\n // Schedule embedding generation for forked belief\n await scheduleEmbeddingGeneration({\n ctx, nodeId: newNodeId, projectId: parent.projectId, topicId: parent.topicId,\n createdBy: authenticatedUserId, nodeType: \"belief\", text: args.newFormulation,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: newNodeId,\n changeType: \"forked\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n parentNodeId: args.parentNodeId,\n formulation: parent.canonicalText,\n },\n newState: {\n formulation: args.newFormulation,\n forkReason: args.forkReason,\n tupleContradicted: false,\n },\n projectId: parent.projectId,\n topicId: parent.topicId,\n });\n\n // Temporal classification — forked beliefs get fresh classification\n // since the formulation may have changed temporal nature\n if (parent.projectId || parent.topicId) {\n const inheritedPillar = normalizePillar(\n String(metadata?.pillar || metadata?.topic || \"\")\n );\n if (inheritedPillar === \"other\") {\n await ctx.scheduler.runAfter(\n 2500,\n \"beliefCategorization:autoCategorizeBelief\" as any,\n {\n nodeId: newNodeId,\n projectId: parent.projectId,\n topicId: parent.topicId,\n }\n );\n }\n\n await ctx.scheduler.runAfter(\n 3000,\n internal.beliefTemporalClassifier.classifyBelief,\n {\n nodeId: newNodeId,\n projectId: parent.projectId,\n topicId: parent.topicId,\n }\n );\n }\n\n await markBeliefGraphDirty(ctx, {\n projectId: parent.projectId,\n topicId: parent.topicId,\n });\n\n return { newNodeId, parentNodeId: args.parentNodeId };\n },\n});\n\n// =============================================================================\n// MODULATE CONFIDENCE\n// =============================================================================\n\n/**\n * Modulate a belief's confidence.\n *\n * Lucern Invariant #2: Confidence changes are append-only (tracked in beliefConfidence table).\n */\nexport const modulateConfidence = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n // SL opinion — the ONLY confidence input (EK-7)\n belief: v.number(), // b: evidence FOR [0,1]\n disbelief: v.number(), // d: evidence AGAINST [0,1]\n uncertainty: v.number(), // u: lack of evidence [0,1]\n baseRate: v.optional(v.number()), // a: prior probability [0,1], defaults to 0.5\n trigger: v.union(\n v.literal(\"evidence_added\"),\n v.literal(\"evidence_removed\"),\n v.literal(\"contradiction_detected\"),\n v.literal(\"contradiction_resolved\"),\n v.literal(\"manual\"),\n v.literal(\"decay\"),\n v.literal(\"agent_assessment\"),\n v.literal(\"worktree_outcome\"),\n v.literal(\"worktree_completed\"),\n // SL-specific triggers\n v.literal(\"fusion\"),\n v.literal(\"discount\"),\n v.literal(\"deduction\"),\n v.literal(\"backfill_synthetic\")\n ),\n rationale: v.optional(v.string()),\n userId: v.string(),\n // SL operator provenance (optional — defaults to manual_assessment)\n slOperator: v.optional(v.union(\n v.literal(\"cumulative_fusion\"),\n v.literal(\"averaging_fusion\"),\n v.literal(\"trust_discount\"),\n v.literal(\"conditional_deduction\"),\n v.literal(\"dependency_cascade\"),\n v.literal(\"negation\"),\n v.literal(\"constraint_fusion\"),\n v.literal(\"manual_assessment\")\n )),\n triggeringEvidenceId: v.optional(v.id(\"epistemicNodes\")),\n triggeringWorktreeId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const result = await applyBeliefConfidenceChange(ctx, {\n nodeId: args.nodeId,\n belief: args.belief,\n disbelief: args.disbelief,\n uncertainty: args.uncertainty,\n baseRate: args.baseRate,\n trigger: args.trigger,\n rationale: args.rationale,\n authenticatedUserId,\n slOperator: args.slOperator as SLOperator | undefined,\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringWorktreeId: args.triggeringWorktreeId,\n });\n\n // Schedule edge-defined SL propagation through graph edges (EK-7, LKC-5)\n // Only propagate if confidence actually changed (avoid noise)\n if (Math.abs(result.newConfidence - result.previousConfidence) >= 0.01) {\n await ctx.scheduler.runAfter(\n 0,\n internal.epistemicBeliefs.propagateConfidenceChange,\n {\n nodeId: args.nodeId,\n opinion_b: args.belief,\n opinion_d: args.disbelief,\n opinion_u: args.uncertainty,\n opinion_a: args.baseRate ?? 0.5,\n userId: authenticatedUserId,\n }\n );\n }\n\n return {\n nodeId: result.nodeId,\n previousConfidence: result.previousConfidence,\n newConfidence: result.newConfidence,\n opinion: result.opinion,\n };\n },\n});\n\n// Two-axis model (valence/certainty) — REMOVED in EK-7.\n// All callers must use modulateConfidence with SL opinion (b, d, u, a).\n\n// =============================================================================\n// UPDATE STATUS\n// =============================================================================\n\n/**\n * Update a belief's status.\n */\nexport const updateStatus = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n ),\n reason: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const previousStatus = node.status;\n\n // Update the node's status and metadata in a single atomic patch\n const metadata = (node.metadata as Record<string, unknown>) || {};\n await ctx.db.patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n metadata: {\n ...metadata,\n status: args.status,\n },\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n previousState: { status: previousStatus },\n newState: { status: args.status, reason: args.reason },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return { nodeId: args.nodeId, previousStatus, newStatus: args.status };\n },\n});\n\n// =============================================================================\n// ARCHIVE\n// =============================================================================\n\n/**\n * Archive a belief (soft delete).\n * Lucern invariant: Beliefs are never deleted, only archived.\n */\nexport const archive = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n reason: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n return await ctx.runMutation(\n // Use updateStatus internally\n internal.epistemicBeliefs.updateStatusInternal,\n {\n nodeId: args.nodeId,\n status: \"archived\",\n reason: args.reason,\n userId: authenticatedUserId,\n }\n );\n },\n});\n\n// =============================================================================\n// UPDATE RATIONALE\n// =============================================================================\n\n/**\n * Update a belief rationale without changing formulation.\n * Formulation mutability rules are unchanged (use fork/refine paths for wording).\n */\nexport const updateRationale = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const metadata = (node.metadata as Record<string, unknown>) || {};\n const previousRationale =\n typeof metadata.rationale === \"string\" ? metadata.rationale : undefined;\n const nextRationale = args.rationale?.trim();\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n rationale:\n nextRationale && nextRationale.length > 0 ? nextRationale : undefined,\n },\n updatedAt: now,\n });\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n previousState: { rationale: previousRationale },\n newState: {\n rationale:\n nextRationale && nextRationale.length > 0 ? nextRationale : undefined,\n },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return {\n nodeId: args.nodeId,\n previousRationale,\n newRationale: nextRationale,\n };\n },\n});\n\n// Internal version for use by other mutations\nexport const updateStatusInternal = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n ),\n reason: v.optional(v.string()),\n userId: v.string(),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: await resolveNodeScopeForWorkspaceIsolation(ctx, node),\n mutationName: \"epistemicBeliefs.updateStatusInternal\",\n });\n\n const previousStatus = node.status;\n\n await ctx.db.patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n previousState: { status: previousStatus },\n newState: { status: args.status, reason: args.reason },\n changedBy: args.userId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return { nodeId: args.nodeId, previousStatus, newStatus: args.status };\n },\n});\n\n// =============================================================================\n// GET CONFIDENCE HISTORY\n// =============================================================================\n\n/**\n * Get the confidence history for a belief.\n */\nexport const getConfidenceHistory = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n return [];\n }\n\n return await ctx.db\n .query(\"beliefConfidence\")\n .withIndex(\"by_beliefId_time\", (q) =>\n q.eq(\"beliefId\", args.nodeId)\n )\n .order(\"asc\")\n .collect();\n },\n});\n\n// =============================================================================\n// GET BELIEF LINEAGE\n// =============================================================================\n\n/**\n * Get the lineage of a belief (all forks and parents).\n */\nexport const getLineage = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const lineage: Array<{\n nodeId: Id<\"epistemicNodes\">;\n formulation: string;\n forkReason?: string;\n createdAt: number;\n }> = [];\n\n let currentId: Id<\"epistemicNodes\"> | null = args.nodeId;\n\n while (currentId) {\n const node = await ctx.db.get(currentId);\n if (!node || node.nodeType !== \"belief\") {\n break;\n }\n\n const metadata = node.metadata as Record<string, unknown> | undefined;\n\n lineage.push({\n nodeId: node._id,\n formulation: node.canonicalText,\n forkReason: metadata?.forkReason as string | undefined,\n createdAt: node.createdAt,\n });\n\n // Find parent via supersedes edge\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_type\", (q) =>\n q.eq(\"fromNodeId\", currentId!).eq(\"edgeType\", \"supersedes\")\n )\n .collect();\n\n if (edges.length > 0) {\n currentId = edges[0].toNodeId ?? null;\n } else {\n // Check metadata for forkedFrom (backfilled beliefs)\n currentId = metadata?.forkedFrom as Id<\"epistemicNodes\"> | null;\n }\n }\n\n return lineage;\n },\n});\n\n// =============================================================================\n// GET BELIEFS BY IDS\n// =============================================================================\n\n/**\n * Get multiple beliefs by their IDs.\n */\nexport const getByIds = query({\n args: {\n nodeIds: v.array(v.id(\"epistemicNodes\")),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const beliefs = await Promise.all(args.nodeIds.map((id) => ctx.db.get(id)));\n return beliefs.filter((b) => b !== null && b.nodeType === \"belief\");\n },\n});\n\n// =============================================================================\n// GET BY SPRINT\n// =============================================================================\n\n/**\n * Get all beliefs associated with a worktree via worktreeBeliefCluster.\n */\nexport const getByWorktree = query({\n args: {\n worktreeId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const worktree = await ctx.db.get(args.worktreeId as Id<\"worktrees\">);\n if (!worktree) {\n return [];\n }\n\n const clusterLinks = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_worktree\", (q: any) => q.eq(\"worktreeId\", args.worktreeId))\n .collect();\n\n const beliefs: Array<Doc<\"epistemicNodes\">> = [];\n for (const link of clusterLinks) {\n const node = await ctx.db.get(link.beliefId);\n if (node) beliefs.push(node);\n }\n return beliefs;\n },\n});\n\n// =============================================================================\n// UPDATE PILLAR\n// =============================================================================\n\n/**\n * Update a belief's pillar/topic categorization.\n * Uses canonical epistemicNodes IDs.\n */\nexport const updatePillar = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n pillar: v.union(\n v.literal(\"market\"),\n v.literal(\"competition\"),\n v.literal(\"product\"),\n v.literal(\"team\"),\n v.literal(\"financials\"),\n v.literal(\"regulatory\"),\n v.literal(\"timing\"),\n v.literal(\"customer\"),\n v.literal(\"technology\"),\n v.literal(\"distribution\"),\n v.literal(\"deal\"),\n v.literal(\"risks\"),\n v.literal(\"other\")\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const existingNode = await ctx.db.get(args.nodeId);\n if (!existingNode || existingNode.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!existingNode.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(\n ctx,\n existingNode.projectId,\n authenticatedUserId\n );\n\n // Update the epistemicNode (canonical source of truth)\n let previousPillar: unknown = null;\n const metadata = (existingNode.metadata as Record<string, unknown>) || {};\n previousPillar = metadata.pillar;\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n pillar: args.pillar,\n topic: args.pillar,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n // Audit log - Lucern Invariant #14: no silent state transitions\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId as string,\n changeType: \"pillar_changed\",\n projectId: existingNode.projectId,\n changedBy: authenticatedUserId,\n changedAt: now,\n isAgent: false,\n previousState: { pillar: previousPillar },\n newState: { pillar: args.pillar },\n });\n\n return {\n nodeId: args.nodeId,\n previousPillar,\n newPillar: args.pillar,\n };\n },\n});\n\n// =============================================================================\n// COUNT BY STATUS\n// =============================================================================\n\n/**\n * Get counts of beliefs by status for a project.\n */\nexport const getCountByStatus = query({\n args: {\n ...optionalBeliefScopeArgs,\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return { active: 0, superseded: 0, archived: 0, total: 0 };\n }\n\n const nodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: any) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n )\n .collect();\n\n const counts = {\n active: 0,\n superseded: 0,\n archived: 0,\n total: nodes.length,\n };\n\n for (const node of nodes) {\n if (node.status === \"active\") {\n counts.active++;\n } else if (node.status === \"superseded\") {\n counts.superseded++;\n } else if (node.status === \"archived\") {\n counts.archived++;\n }\n }\n\n return counts;\n },\n});\n\n// =============================================================================\n// LINK BELIEFS (Direct epistemicNodes → epistemicNodes)\n// =============================================================================\n\n/**\n * Create an edge between two beliefs in the epistemic spine.\n * This works with epistemicNodes IDs directly (no legacy lookup needed).\n */\nexport const linkBeliefs = mutation({\n args: {\n fromNodeId: v.id(\"epistemicNodes\"),\n toNodeId: v.id(\"epistemicNodes\"),\n edgeType: v.union(\n // Basic belief relationships\n v.literal(\"supersedes\"),\n v.literal(\"depends_on\"),\n v.literal(\"supports\"),\n v.literal(\"contains\"),\n v.literal(\"informs\"),\n v.literal(\"derived_from\"),\n v.literal(\"tests\")\n ),\n weight: v.optional(v.number()), // -1 to 1\n context: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const fromNode = await ctx.db.get(args.fromNodeId);\n const toNode = await ctx.db.get(args.toNodeId);\n\n if (!fromNode || !toNode) {\n throw new Error(\"One or both belief nodes not found\");\n }\n\n if (fromNode.nodeType !== \"belief\" || toNode.nodeType !== \"belief\") {\n throw new Error(\"Both nodes must be beliefs\");\n }\n if (fromNode.projectId !== toNode.projectId) {\n throw new Error(\"Cannot link beliefs across different projects\");\n }\n if (!fromNode.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(\n ctx,\n fromNode.projectId,\n authenticatedUserId\n );\n\n const now = Date.now();\n\n // Create edge directly in Neo4j (MERGE handles duplicates)\n const edgeGlobalId = generateGlobalId();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: fromNode.globalId,\n toGlobalId: toNode.globalId,\n edgeType: args.edgeType,\n weight: args.weight ?? 1.0,\n context: args.context,\n createdBy: authenticatedUserId,\n topicId: fromNode.projectId ? String(fromNode.projectId) : undefined,\n fromNodeType: \"belief\",\n toNodeType: \"belief\",\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edgeGlobalId as unknown as Id<\"epistemicNodes\">,\n changeType: \"created\",\n previousState: null,\n newState: {\n fromNodeId: args.fromNodeId,\n toNodeId: args.toNodeId,\n edgeType: args.edgeType,\n },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: fromNode.projectId,\n });\n\n return { edgeGlobalId, created: true };\n },\n});\n\n// =============================================================================\n// LINK EVIDENCE (Insight) to Belief\n// =============================================================================\n\n/**\n * Link an insight (evidence) to a belief.\n * Creates an edge from evidence → belief with appropriate type.\n */\nexport const linkEvidence = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n insightId: insightIdUnion,\n type: v.union(v.literal(\"supporting\"), v.literal(\"contradicting\")),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const _now = Date.now();\n\n // Verify the belief exists\n const belief = await ctx.db.get(args.beliefNodeId);\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!belief.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, belief.projectId, authenticatedUserId);\n\n // Verify the insight exists\n const insight = await ctx.db.get(args.insightId);\n if (!insight || insight.nodeType !== \"evidence\") {\n throw new Error(\"Insight not found\");\n }\n if (\n \"projectId\" in insight &&\n insight.projectId &&\n insight.projectId !== belief.projectId\n ) {\n throw new Error(\"Insight belongs to a different project\");\n }\n\n const evidenceNodeId = insight._id;\n const evidenceGlobalId = insight.globalId;\n\n // Determine edge type based on supporting/contradicting\n const edgeType = \"informs\"; // Both use informs, weight determines support/contradict\n const weight = args.type === \"supporting\" ? 1.0 : -1.0;\n\n // Compute logicalRole from graph structure\n const logicalRole = evidenceNodeId\n ? await computeLogicalRole(ctx, evidenceNodeId, args.beliefNodeId)\n : \"contributory\";\n\n // Create the edge directly in Neo4j (MERGE handles duplicates)\n const edgeGlobalId = generateGlobalId();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: evidenceGlobalId,\n toGlobalId: belief.globalId,\n edgeType,\n weight,\n context: args.rationale || `${args.type} evidence`,\n createdBy: authenticatedUserId,\n topicId: belief.projectId ? String(belief.projectId) : undefined,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n // Classification fields\n logicalRole,\n temporalClass: \"structural\", // Default - most evidence is long-lived\n });\n\n return { edgeGlobalId, evidenceNodeId, created: true };\n },\n});\n\n// =============================================================================\n// UNLINK EVIDENCE from Belief\n// =============================================================================\n\n/**\n * Remove the link between an insight and a belief.\n */\nexport const unlinkEvidence = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n insightId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const evidenceNode = await ctx.db.get(args.insightId);\n if (!evidenceNode || evidenceNode.nodeType !== \"evidence\") {\n return { success: false, message: \"Evidence node not found\" };\n }\n if (!evidenceNode.projectId) {\n throw new Error(\"Evidence has no project scope\");\n }\n await requireProjectWriteAccess(\n ctx,\n evidenceNode.projectId,\n authenticatedUserId\n );\n const beliefNode = await ctx.db.get(args.beliefNodeId);\n if (!beliefNode || beliefNode.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (beliefNode.projectId !== evidenceNode.projectId) {\n throw new Error(\"Belief and evidence belong to different projects\");\n }\n\n // Find and delete the edge\n const edge = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", evidenceNode._id).eq(\"toNodeId\", args.beliefNodeId)\n )\n .first();\n\n if (edge) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edge.globalId,\n changeType: \"edge_removed\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n fromNodeId: evidenceNode._id,\n toNodeId: args.beliefNodeId,\n },\n newState: null,\n projectId: evidenceNode.projectId,\n });\n }\n\n return { success: true };\n },\n});\n\n// =============================================================================\n// GET BELIEF WITH EVIDENCE\n// =============================================================================\n\n/**\n * Get a belief along with all its linked evidence.\n */\nexport const getWithEvidence = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const belief = await ctx.db.get(args.nodeId);\n if (!belief || belief.nodeType !== \"belief\") {\n return null;\n }\n\n // Get all edges pointing TO this belief from evidence nodes\n const incomingEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", args.nodeId).eq(\"edgeType\", \"informs\")\n )\n .collect();\n\n // Get the evidence nodes\n const evidenceNodeIds = incomingEdges\n .filter((e) => e.fromNodeType === \"evidence\")\n .map((e) => e.fromNodeId);\n\n const evidenceNodes = await Promise.all(\n evidenceNodeIds.map((id) => ctx.db.get(id))\n );\n\n // Categorize by supporting vs contradicting (based on weight)\n const supporting: typeof evidenceNodes = [];\n const contradicting: typeof evidenceNodes = [];\n\n for (let i = 0; i < evidenceNodes.length; i++) {\n const node = evidenceNodes[i];\n const edge = incomingEdges[i];\n if (node) {\n if ((edge.weight || 0) >= 0) {\n supporting.push(node);\n } else {\n contradicting.push(node);\n }\n }\n }\n\n return {\n belief,\n evidence: {\n supporting,\n contradicting,\n total: supporting.length + contradicting.length,\n },\n };\n },\n});\n\n// =============================================================================\n// GET RELATIONSHIPS\n// =============================================================================\n\n/**\n * Get all relationships (edges) for a belief.\n */\nexport const getRelationships = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n direction: v.optional(\n v.union(v.literal(\"in\"), v.literal(\"out\"), v.literal(\"both\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const direction = args.direction || \"both\";\n const results: {\n incoming: Array<{ edge: unknown; node: unknown }>;\n outgoing: Array<{ edge: unknown; node: unknown }>;\n } = {\n incoming: [],\n outgoing: [],\n };\n\n if (direction === \"in\" || direction === \"both\") {\n // Get edges pointing TO this node\n const inEdges = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q) => q.eq(q.field(\"toNodeId\"), args.nodeId))\n .collect();\n\n for (const edge of inEdges) {\n const sourceNode = await ctx.db.get(edge.fromNodeId);\n results.incoming.push({ edge, node: sourceNode });\n }\n }\n\n if (direction === \"out\" || direction === \"both\") {\n // Get edges pointing FROM this node\n const outEdges = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q) => q.eq(q.field(\"fromNodeId\"), args.nodeId))\n .collect();\n\n for (const edge of outEdges) {\n const targetNode = edge.toNodeId\n ? await ctx.db.get(edge.toNodeId)\n : null;\n results.outgoing.push({ edge, node: targetNode });\n }\n }\n\n return results;\n },\n});\n\n// =============================================================================\n// DELETE RELATIONSHIP\n// =============================================================================\n\n/**\n * Delete a relationship (edge) between nodes.\n */\nexport const deleteRelationship = mutation({\n args: {\n edgeId: v.id(\"epistemicEdges\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const edge = await ctx.db.get(args.edgeId);\n if (!edge) {\n throw new Error(\"Edge not found\");\n }\n if (!edge.projectId) {\n throw new Error(\"Edge has no project scope\");\n }\n await requireProjectWriteAccess(ctx, edge.projectId, authenticatedUserId);\n\n // Store for audit\n const previousState = {\n fromNodeId: edge.fromNodeId,\n toNodeId: edge.toNodeId,\n edgeType: edge.edgeType,\n };\n\n // Delete via Neo4j authority path\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(args.edgeId);\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edge.globalId,\n changeType: \"edge_removed\",\n previousState,\n newState: null,\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: edge.projectId,\n });\n\n return { success: true };\n },\n});\n\n// =============================================================================\n// UPDATE CRITICALITY\n// =============================================================================\n\n/**\n * Update a belief's criticality level.\n */\nexport const updateCriticality = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n criticality: v.union(\n v.literal(\"blocking\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"essential\"),\n v.literal(\"nice_to_have\")\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const metadata = (node.metadata as Record<string, unknown>) || {};\n const previousCriticality = metadata.criticality;\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n criticality: args.criticality,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"criticality_changed\",\n previousState: { criticality: previousCriticality as string | undefined },\n newState: { criticality: args.criticality },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return {\n nodeId: args.nodeId,\n previousCriticality,\n newCriticality: args.criticality,\n };\n },\n});\n\n// =============================================================================\n// BATCH UPDATE CRITICALITY\n// =============================================================================\n\n/**\n * Batch update criticality for multiple beliefs.\n * Uses canonical epistemicNodes IDs.\n */\nexport const batchUpdateCriticality = mutation({\n args: {\n updates: v.array(\n v.object({\n beliefId: v.id(\"epistemicNodes\"),\n criticality: v.union(\n v.literal(\"blocking\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"essential\"),\n v.literal(\"nice_to_have\")\n ),\n ifFalseImpact: v.optional(v.string()),\n triagePriority: v.optional(v.number()),\n reasoning: v.optional(v.string()),\n dependentBeliefIds: v.optional(v.array(v.string())),\n blockedByBeliefIds: v.optional(v.array(v.string())),\n })\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n const results: Array<{\n beliefId: string;\n nodeId?: Id<\"epistemicNodes\">;\n success: boolean;\n }> = [];\n\n for (const update of args.updates) {\n try {\n const node = await ctx.db.get(update.beliefId);\n\n if (!node || node.nodeType !== \"belief\") {\n results.push({ beliefId: update.beliefId, success: false });\n continue;\n }\n if (!node.projectId) {\n results.push({ beliefId: update.beliefId, success: false });\n continue;\n }\n await requireProjectWriteAccess(\n ctx,\n node.projectId,\n authenticatedUserId\n );\n\n const metadata = (node.metadata as Record<string, unknown>) || {};\n const previousCriticality = metadata.criticality as string | undefined;\n\n await ctx.db.patch(node._id, {\n metadata: {\n ...metadata,\n criticality: update.criticality,\n ifFalseImpact: update.ifFalseImpact,\n triagePriority: update.triagePriority,\n criticalityReasoning: update.reasoning,\n dependentBeliefIds: update.dependentBeliefIds,\n blockedByBeliefIds: update.blockedByBeliefIds,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: node._id,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: node._id,\n changeType: \"criticality_changed\",\n previousState: { criticality: previousCriticality },\n newState: { criticality: update.criticality },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n results.push({\n beliefId: update.beliefId,\n nodeId: node._id,\n success: true,\n });\n } catch {\n results.push({ beliefId: update.beliefId, success: false });\n }\n }\n\n return { results, updatedCount: results.filter((r) => r.success).length };\n },\n});\n\n// =============================================================================\n// GET BY CRITICALITY\n// =============================================================================\n\n/**\n * Get beliefs by criticality level.\n */\nexport const getByCriticality = query({\n args: {\n ...optionalBeliefScopeArgs,\n criticality: v.union(\n v.literal(\"blocking\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"essential\"),\n v.literal(\"nice_to_have\")\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope);\n\n return nodes.filter((n) => {\n const metadata = n.metadata as Record<string, unknown> | undefined;\n return (\n metadata?.criticality === args.criticality && n.status === \"active\"\n );\n });\n },\n});\n\n// =============================================================================\n// GET UNANALYZED BELIEFS (for BI agents)\n// =============================================================================\n\n/**\n * Get beliefs that haven't been analyzed yet.\n * Used by BI agents for batch processing.\n */\nexport const getUnanalyzed = query({\n args: {\n ...optionalBeliefScopeArgs,\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = args.limit || 50;\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope);\n\n // Filter for unanalyzed beliefs (no criticality set, active status)\n const unanalyzed = nodes.filter((n) => {\n const metadata = n.metadata as Record<string, unknown> | undefined;\n return !metadata?.criticality && n.status === \"active\";\n });\n\n return unanalyzed.slice(0, limit);\n },\n});\n\n// =============================================================================\n// GET BY PROJECT (SYSTEM - no auth check)\n// =============================================================================\n\n/**\n * Get all beliefs for a project (system level - no auth check).\n * Used by BI agents and thesis audit agents.\n */\nexport const getByProjectSystem = query({\n args: {\n ...optionalBeliefScopeArgs,\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampBeliefLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope, { scanLimit });\n\n // Filter by status if provided\n if (args.status) {\n return nodes.filter((n) => n.status === args.status).slice(0, pageSize);\n }\n\n // Default: return active beliefs\n return nodes.filter((n) => n.status === \"active\").slice(0, pageSize);\n },\n});\n\n// =============================================================================\n// GET BY PILLAR\n// =============================================================================\n\n/**\n * Get beliefs filtered by pillar/topic.\n */\nexport const getByPillar = query({\n args: {\n ...optionalBeliefScopeArgs,\n pillar: v.union(\n v.literal(\"market\"),\n v.literal(\"competition\"),\n v.literal(\"product\"),\n v.literal(\"team\"),\n v.literal(\"financials\"),\n v.literal(\"regulatory\"),\n v.literal(\"timing\"),\n v.literal(\"customer\"),\n v.literal(\"technology\"),\n v.literal(\"distribution\"),\n v.literal(\"deal\"),\n v.literal(\"risks\"),\n v.literal(\"other\")\n ),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId && !args.topicId) {\n return [];\n }\n\n let scope:\n | Awaited<ReturnType<typeof resolveTopicProjectScope>>\n | {\n tenantId: undefined;\n workspaceId: undefined;\n topicId?: undefined;\n projectId?: undefined;\n };\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch {\n return [];\n }\n\n const nodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n )\n .collect();\n\n return nodes.filter((n) => {\n const metadata = n.metadata as Record<string, unknown> | undefined;\n const matchesPillar = metadata?.pillar === args.pillar;\n const matchesStatus = args.status\n ? n.status === args.status\n : n.status === \"active\";\n return matchesPillar && matchesStatus;\n });\n },\n});\n\n// =============================================================================\n// GET WORKTREE CLUSTER\n// =============================================================================\n\n/**\n * Get the belief cluster for a worktree.\n * Returns all beliefs linked to the worktree and their relationships.\n */\nexport const getWorktreeCluster = query({\n args: {\n worktreeId: v.string(),\n userId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const worktree = await ctx.db.get(args.worktreeId as Id<\"worktrees\">);\n if (!worktree) {\n return { beliefs: [], edges: [], beliefCount: 0 };\n }\n\n // Get all beliefs linked to this worktree\n const clusterLinks = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_worktree\", (q: any) => q.eq(\"worktreeId\", args.worktreeId))\n .collect();\n\n const beliefIds = new Set(clusterLinks.map((l: any) => String(l.beliefId)));\n const beliefs: Array<Doc<\"epistemicNodes\">> = [];\n for (const link of clusterLinks) {\n const node = await ctx.db.get(link.beliefId);\n if (node) beliefs.push(node);\n }\n\n // Get edges between cluster beliefs\n const clusterEdges: Array<{\n fromNodeId: string;\n toNodeId: string;\n edgeType: string;\n weight?: number;\n context?: string;\n }> = [];\n\n for (const beliefId of beliefIds) {\n const outEdges = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q: any) =>\n q.eq(q.field(\"fromNodeId\"), beliefId as Id<\"epistemicNodes\">)\n )\n .collect();\n\n for (const edge of outEdges) {\n if (beliefIds.has(String(edge.toNodeId))) {\n clusterEdges.push({\n fromNodeId: String(edge.fromNodeId),\n toNodeId: String(edge.toNodeId),\n edgeType: edge.edgeType,\n weight: edge.weight,\n context: edge.context,\n });\n }\n }\n }\n\n return {\n beliefs,\n edges: clusterEdges,\n beliefCount: beliefs.length,\n };\n },\n});\n\n// =============================================================================\n// INTERNAL QUERIES - For use by other Convex modules\n// =============================================================================\n// These queries are NOT exposed to the client API. They allow other Convex\n// functions (BI agents, intelligence, etc.) to read beliefs from epistemicNodes\n// without needing project access checks (internal use only).\n\n/**\n * Internal query to get beliefs for a project.\n * Returns epistemicNodes in legacy beliefs format for backward compatibility.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetByProject = internalQuery({\n args: {\n ...optionalBeliefScopeArgs,\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"validated\"),\n v.literal(\"invalidated\"),\n v.literal(\"archived\"),\n v.literal(\"superseded\")\n )\n ),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const pageSize = clampBeliefLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const audienceMode = args.audienceMode ?? \"internal\";\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n });\n const resolveAudienceClass = createBeliefAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const nodes = await getBeliefNodesForScope(ctx, scope, { scanLimit });\n\n // Filter by audience first, then status.\n let filtered = nodes.filter((node) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(node.audienceLabel, \"internal\")\n )\n );\n if (args.status) {\n filtered = filtered.filter((n) => n.status === args.status);\n }\n\n // Apply limit if provided\n filtered = filtered.slice(0, pageSize);\n\n // Map to legacy format\n return filtered.map(flattenBeliefNode);\n },\n});\n\n/**\n * Internal query to get beliefs for a topic.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetByTopic = internalQuery({\n args: {\n topicId: v.string(),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"validated\"),\n v.literal(\"invalidated\"),\n v.literal(\"archived\"),\n v.literal(\"superseded\")\n )\n ),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampBeliefLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const audienceMode = args.audienceMode ?? \"internal\";\n const scope = await resolveTopicProjectScope(ctx, { topicId: args.topicId });\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n });\n const resolveAudienceClass = createBeliefAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const query = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n );\n const nodes = await query.order(\"desc\").take(scanLimit);\n\n let filtered = nodes.filter((node) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(node.audienceLabel, \"internal\")\n )\n );\n if (args.status) {\n filtered = filtered.filter((n) => n.status === args.status);\n }\n filtered = filtered.slice(0, pageSize);\n\n return filtered.map(flattenBeliefNode);\n },\n});\n\n/**\n * Internal query to get active beliefs for a project.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetActive = internalQuery({\n args: {\n ...optionalBeliefScopeArgs,\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope, {\n status: \"active\",\n });\n\n // Apply limit if provided\n const limited = args.limit ? nodes.slice(0, args.limit) : nodes;\n\n return limited.map(flattenBeliefNode);\n },\n});\n\n/**\n * Internal query to get a single belief by ID.\n * Uses canonical epistemicNodes IDs.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetById = internalQuery({\n args: {\n beliefId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.beliefId as Id<\"epistemicNodes\">);\n\n if (!node || node.nodeType !== \"belief\") {\n return null;\n }\n\n // Map to legacy format\n return flattenBeliefNode(node);\n },\n});\n\n/**\n * Internal mutation to create a belief.\n * Creates ONLY in epistemicNodes (no dual-write).\n *\n * @internal Use by other Convex functions only\n */\nexport const internalCreate = internalMutation({\n args: {\n ...optionalBeliefScopeArgs,\n formulation: v.string(),\n baseRate: v.number(),\n confidence: v.optional(\n v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\"))\n ),\n userId: v.string(),\n rationale: v.optional(v.string()),\n topic: v.optional(v.string()),\n pillar: v.optional(v.string()),\n category: v.optional(v.string()),\n subcategory: v.optional(v.string()),\n categoryIcon: v.optional(v.string()),\n sprintId: v.optional(v.string()),\n sourceBeliefIds: v.optional(v.array(v.string())),\n criticality: v.optional(\n v.union(\n v.literal(\"blocking\"),\n v.literal(\"critical\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"nice_to_have\"),\n v.literal(\"unanalyzed\")\n )\n ),\n beliefType: v.optional(v.string()),\n /** Optional extra metadata fields merged into the node's metadata object.\n * Use for domain overlays like coding intelligence (codeAnchors, failedApproach, etc.) */\n extraMetadata: v.optional(v.any()),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n const baseRate = assertBaseRateInRange(args.baseRate);\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"belief\",\n mutationName: \"epistemicBeliefs.internalCreate\",\n });\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"belief\",\n epistemicLayer: \"L3\",\n },\n mutationName: \"epistemicBeliefs.internalCreate\",\n });\n const topic = await ctx.db.get(scope.topicId);\n const normalizedBeliefType = await assertSchemaEnumValue(ctx, {\n category: \"belief_type\",\n value: args.beliefType,\n tenantId: topic?.tenantId,\n context: \"epistemicBeliefs.internalCreate\",\n });\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.formulation);\n const requestedConfidence = args.confidence;\n const seedOpinion = {\n opinion_b: 0,\n opinion_d: 0,\n opinion_u: 1,\n opinion_a: baseRate,\n };\n\n // Create in epistemicNodes\n const nodeId = await (ctx.db as any).insert(\"epistemicNodes\", {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"belief\",\n canonicalText: args.formulation,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L3\", // L3: Traversal Anchors\n sourceType: args.userId.startsWith(\"agent:\") ? \"ai_generated\" : \"human\",\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n ...seedOpinion,\n tupleContradicted: false,\n metadata: {\n ...(requestedConfidence ? { confidence: requestedConfidence } : {}),\n tupleContradicted: false,\n rationale: args.rationale || \"\",\n topic: args.topic || args.pillar || \"\",\n pillar: args.pillar || args.topic || \"\",\n category: args.category || \"\",\n subcategory: args.subcategory || \"\",\n categoryIcon: args.categoryIcon || \"\",\n sprintId: args.sprintId,\n sourceBeliefIds: args.sourceBeliefIds || [],\n criticality: args.criticality || \"unanalyzed\",\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n supportingEvidenceIds: [],\n contradictingEvidenceIds: [],\n testingQuestionIds: [],\n linkedInsightIds: [],\n // Merge caller-provided metadata (e.g. codeAnchors for coding intelligence)\n ...(args.extraMetadata && typeof args.extraMetadata === \"object\"\n ? args.extraMetadata\n : {}),\n },\n });\n\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: nodeId,\n belief: seedOpinion.opinion_b,\n disbelief: seedOpinion.opinion_d,\n uncertainty: seedOpinion.opinion_u,\n baseRate,\n trigger: \"initial\",\n rationale:\n \"LKC-2 mandatory prior: seeded vacuous opinion at belief creation.\",\n assessedBy: args.userId,\n assessedAt: now,\n slOperator: \"manual_assessment\",\n }) as any\n );\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n newState: {\n formulation: args.formulation,\n baseRate,\n confidence: requestedConfidence,\n opinion: {\n b: seedOpinion.opinion_b,\n d: seedOpinion.opinion_d,\n u: seedOpinion.opinion_u,\n a: seedOpinion.opinion_a,\n },\n tupleContradicted: false,\n source: \"internal\",\n },\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n // Schedule embedding generation for semantic search.\n // Fire when either projectId or topicId is present — topicId alone covers Lucern\n // deployments which have no projects table.\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"belief\" as const,\n text: args.rationale\n ? `${args.formulation}\\n\\nRationale: ${args.rationale}`\n : args.formulation,\n ...(requestedConfidence\n ? {\n confidence:\n requestedConfidence === \"high\"\n ? 0.8\n : requestedConfidence === \"low\"\n ? 0.3\n : 0.5,\n }\n : {}),\n }\n );\n }\n\n if (\n normalizePillar(args.pillar || args.topic) === \"other\" &&\n (scope.projectId || scope.topicId)\n ) {\n await ctx.scheduler.runAfter(\n 2500,\n \"beliefCategorization:autoCategorizeBelief\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n await markBeliefGraphDirty(ctx, {\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n return { nodeId };\n },\n});\n\n// =============================================================================\n// CONFIDENCE CHANGE TRACKING\n// =============================================================================\n\n/**\n * Get recent confidence changes for beliefs in a project.\n * Shows beliefs that have had confidence updates via propagation, decay,\n * or other users - useful for \"Attention Needed\" dashboard panel.\n */\nexport const getRecentConfidenceChanges = query({\n args: {\n ...optionalBeliefScopeArgs,\n userId: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = args.limit ?? 10;\n const sevenDaysAgo = Date.now() - 7 * 24 * 60 * 60 * 1000;\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const scopeId = scope.topicId ? String(scope.topicId) : scope.projectId;\n\n if (!scopeId || !(await checkScopeAccess(ctx, scopeId, args.userId))) {\n return [];\n }\n\n const projectBeliefs = await getBeliefNodesForScope(ctx, scope);\n\n if (projectBeliefs.length === 0) {\n return [];\n }\n\n // Create a map of beliefId to belief info\n const beliefMap = new Map<\n string,\n { id: string; title: string; currentConfidence: number }\n >();\n for (const belief of projectBeliefs) {\n const info = {\n id: belief._id,\n title: belief.canonicalText || belief.title || \"Untitled belief\",\n currentConfidence: belief.confidence ?? 0.5,\n };\n beliefMap.set(belief._id, info);\n }\n\n // Get recent confidence entries\n const recentConfidence = await ctx.db\n .query(\"beliefConfidence\")\n .order(\"desc\")\n .filter((q) => q.gt(q.field(\"assessedAt\"), sevenDaysAgo))\n .take(200);\n\n // Filter to beliefs in this project and compute deltas\n const changes: Array<{\n beliefId: string;\n beliefTitle: string;\n delta: number;\n trigger: string;\n assessedBy: string;\n assessedAt: number;\n }> = [];\n\n const seenBeliefs = new Set<string>();\n\n for (const entry of recentConfidence) {\n const beliefInfo = beliefMap.get(entry.beliefId as string);\n if (!beliefInfo) {\n continue;\n }\n\n // Skip if we've already processed this belief\n if (seenBeliefs.has(beliefInfo.id)) {\n continue;\n }\n seenBeliefs.add(beliefInfo.id);\n\n // Get previous confidence entry to calculate delta\n const previousEntries = await ctx.db\n .query(\"beliefConfidence\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", entry.beliefId))\n .order(\"desc\")\n .filter((q) => q.lt(q.field(\"assessedAt\"), entry.assessedAt))\n .take(1);\n\n const previousConfidence = previousEntries[0]?.confidence ?? 0.5;\n const delta = entry.confidence - previousConfidence;\n\n // Only include if there's a meaningful change\n if (Math.abs(delta) < 0.05) {\n continue;\n }\n\n changes.push({\n beliefId: beliefInfo.id,\n beliefTitle: beliefInfo.title,\n delta,\n trigger: entry.trigger,\n assessedBy: entry.assessedBy,\n assessedAt: entry.assessedAt,\n });\n\n if (changes.length >= limit) {\n break;\n }\n }\n\n return changes;\n },\n});\n\n// =============================================================================\n// BACKFILL: Set valence + certainty on existing records\n// =============================================================================\n\n/**\n * Backfill synthetic t0 opinion-history rows for legacy beliefs that have\n * node-level opinion/confidence metadata but no beliefConfidence history.\n *\n * Run with:\n * npx convex run epistemicBeliefs:backfillSyntheticOpinionHistory '{\"limit\":100}'\n */\nexport const backfillSyntheticOpinionHistory = internalMutation({\n args: {\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = Math.max(1, Math.min(args.limit ?? 100, 100));\n const [beliefNodes, existingHistory] = await Promise.all([\n ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q) => q.eq(\"nodeType\", \"belief\"))\n .collect(),\n ctx.db.query(\"beliefConfidence\").collect(),\n ]);\n\n const beliefsWithHistory = new Set(\n existingHistory.map((entry) => String(entry.beliefId))\n );\n\n let inserted = 0;\n let skippedNoOpinion = 0;\n let skippedHasHistory = 0;\n\n for (const node of beliefNodes) {\n if (inserted >= limit) {\n break;\n }\n\n const hasOpinionSnapshot =\n readFiniteNumber((node as any).opinion_b) !== undefined ||\n readFiniteNumber((node as any).opinion_d) !== undefined ||\n readFiniteNumber((node as any).opinion_u) !== undefined ||\n readFiniteNumber((node as any).opinion_a) !== undefined ||\n readFiniteNumber(node.confidence) !== undefined;\n\n if (!hasOpinionSnapshot) {\n skippedNoOpinion++;\n continue;\n }\n\n if (beliefsWithHistory.has(String(node._id))) {\n skippedHasHistory++;\n continue;\n }\n\n const opinion = deriveSyntheticBackfillOpinion(node as Record<string, unknown>);\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: node._id,\n belief: opinion.b,\n disbelief: opinion.d,\n uncertainty: opinion.u,\n baseRate: opinion.a,\n trigger: \"backfill_synthetic\",\n rationale:\n \"LK-6 backfill: synthesized t0 from node-level opinion fields (no prior beliefConfidence row found).\",\n assessedAt:\n readFiniteNumber(node.createdAt) ??\n readFiniteNumber(node.updatedAt) ??\n Date.now(),\n assessedBy: \"system:lk-6-backfill\",\n slOperator: \"manual_assessment\",\n }) as any\n );\n beliefsWithHistory.add(String(node._id));\n inserted++;\n }\n\n const remainingCandidates = beliefNodes.filter((node) => {\n const hasOpinionSnapshot =\n readFiniteNumber((node as any).opinion_b) !== undefined ||\n readFiniteNumber((node as any).opinion_d) !== undefined ||\n readFiniteNumber((node as any).opinion_u) !== undefined ||\n readFiniteNumber((node as any).opinion_a) !== undefined ||\n readFiniteNumber(node.confidence) !== undefined;\n return hasOpinionSnapshot && !beliefsWithHistory.has(String(node._id));\n }).length;\n\n return {\n scanned: beliefNodes.length,\n inserted,\n skippedNoOpinion,\n skippedHasHistory,\n remainingCandidates,\n hasMore: remainingCandidates > 0,\n };\n },\n});\n\n/**\n * Backfill mandatory priors for legacy beliefs created before LKC-2.\n *\n * Run with:\n * npx convex run epistemicBeliefs:backfillMandatoryPriors '{\"limit\":100}'\n */\nexport const backfillMandatoryPriors = internalMutation({\n args: {\n limit: v.optional(v.number()),\n defaultBaseRate: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = Math.max(1, Math.min(args.limit ?? 100, 1000));\n const defaultBaseRate = assertBaseRateInRange(\n args.defaultBaseRate ?? 0.5,\n \"defaultBaseRate\"\n );\n const [beliefNodes, historyRows] = await Promise.all([\n ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q) => q.eq(\"nodeType\", \"belief\"))\n .collect(),\n ctx.db.query(\"beliefConfidence\").collect(),\n ]);\n\n const historyByBeliefId = new Map<string, typeof historyRows>();\n for (const row of historyRows) {\n const beliefId = String(row.beliefId);\n const entries = historyByBeliefId.get(beliefId) ?? [];\n entries.push(row);\n historyByBeliefId.set(beliefId, entries);\n }\n\n let touched = 0;\n let patchedNodes = 0;\n let patchedHistoryRows = 0;\n let insertedInitialRows = 0;\n let auditEntries = 0;\n\n for (const node of beliefNodes) {\n if (touched >= limit) {\n break;\n }\n\n const beliefId = String(node._id);\n const history = historyByBeliefId.get(beliefId) ?? [];\n const patchedOpinion = {\n belief: readFiniteNumber((node as any).opinion_b) ?? 0,\n disbelief: readFiniteNumber((node as any).opinion_d) ?? 0,\n uncertainty: readFiniteNumber((node as any).opinion_u) ?? 1,\n baseRate:\n readFiniteNumber((node as any).opinion_a) ?? defaultBaseRate,\n };\n const needsNodePatch =\n readFiniteNumber((node as any).opinion_b) === undefined ||\n readFiniteNumber((node as any).opinion_d) === undefined ||\n readFiniteNumber((node as any).opinion_u) === undefined ||\n readFiniteNumber((node as any).opinion_a) === undefined;\n const rowsMissingBaseRate = history.filter(\n (row) => readFiniteNumber((row as any).baseRate) === undefined\n );\n const needsInitialRow = history.length === 0;\n\n if (\n !needsNodePatch &&\n rowsMissingBaseRate.length === 0 &&\n !needsInitialRow\n ) {\n continue;\n }\n\n if (needsNodePatch) {\n await ctx.db.patch(node._id, {\n opinion_b: patchedOpinion.belief,\n opinion_d: patchedOpinion.disbelief,\n opinion_u: patchedOpinion.uncertainty,\n opinion_a: patchedOpinion.baseRate,\n updatedAt: Date.now(),\n } as any);\n patchedNodes++;\n }\n\n for (const row of rowsMissingBaseRate) {\n const belief = readFiniteNumber((row as any).belief) ?? 0;\n const disbelief = readFiniteNumber((row as any).disbelief) ?? 0;\n const uncertainty = readFiniteNumber((row as any).uncertainty) ?? 1;\n await ctx.db.patch((row as any)._id, {\n baseRate: defaultBaseRate,\n confidence: confidenceFromSL(\n belief,\n disbelief,\n uncertainty,\n defaultBaseRate\n ),\n } as any);\n patchedHistoryRows++;\n }\n\n if (needsInitialRow) {\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: node._id,\n belief: patchedOpinion.belief,\n disbelief: patchedOpinion.disbelief,\n uncertainty: patchedOpinion.uncertainty,\n baseRate: patchedOpinion.baseRate,\n trigger: \"initial\",\n rationale:\n \"LKC-2 backfill: inserted missing initial vacuous opinion with neutral prior.\",\n assessedAt:\n readFiniteNumber(node.createdAt) ??\n readFiniteNumber(node.updatedAt) ??\n Date.now(),\n assessedBy: \"system:lkc-2-prior-backfill\",\n slOperator: \"manual_assessment\",\n }) as any\n );\n insertedInitialRows++;\n }\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: beliefId,\n changeType: \"updated\",\n changedAt: Date.now(),\n changedBy: \"system:lkc-2-prior-backfill\",\n isAgent: false,\n previousState: null,\n newState: {\n baseRateBackfilled: true,\n baseRate: defaultBaseRate,\n patchedNodeOpinion: needsNodePatch,\n patchedHistoryRows: rowsMissingBaseRate.length,\n insertedInitialOpinion: needsInitialRow,\n },\n projectId: (node as any).projectId,\n topicId:\n typeof (node as any).topicId === \"string\"\n ? (node as any).topicId\n : undefined,\n } as any);\n auditEntries++;\n touched++;\n }\n\n return {\n scanned: beliefNodes.length,\n patchedNodes,\n patchedHistoryRows,\n insertedInitialRows,\n auditEntries,\n hasMore: touched >= limit,\n };\n },\n});\n\n/**\n * Backfill valence + certainty on beliefConfidence records and epistemicNodes metadata.\n * Converts existing single-number confidence to two-axis:\n * valence = confidence * 2 - 1 (maps 0→-1, 0.5→0, 1→+1)\n * certainty = |confidence - 0.5| * 2 (maps 0.5→0, 0/1→1)\n *\n * Run with: npx convex run epistemicBeliefs:backfillTwoAxisConfidence '{}'\n */\nexport const backfillTwoAxisConfidence = internalMutation({\n args: {\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const dryRun = args.dryRun ?? false;\n\n // 1. Backfill beliefConfidence records missing valence/certainty\n const allConfRecords = await ctx.db.query(\"beliefConfidence\").collect();\n let confUpdated = 0;\n let confSkipped = 0;\n\n for (const record of allConfRecords) {\n if (record.valence !== undefined && record.certainty !== undefined) {\n confSkipped++;\n continue;\n }\n const conf = record.confidence ?? 0.5;\n const valence = Math.round((conf * 2 - 1) * 100) / 100;\n const certainty = Math.round(Math.abs(conf - 0.5) * 2 * 100) / 100;\n\n if (!dryRun) {\n await ctx.db.patch(record._id, { valence, certainty } as any);\n }\n confUpdated++;\n }\n\n // 2. Backfill epistemicNodes metadata missing valence/certainty\n const allBeliefNodes = await ctx.db\n .query(\"epistemicNodes\")\n .filter((q) => q.eq(q.field(\"nodeType\"), \"belief\"))\n .collect();\n let nodesUpdated = 0;\n let nodesSkipped = 0;\n\n for (const node of allBeliefNodes) {\n const meta = (node.metadata || {}) as Record<string, unknown>;\n if (meta.valence !== undefined && meta.certainty !== undefined) {\n nodesSkipped++;\n continue;\n }\n const conf = node.confidence ?? 0.5;\n const valence = Math.round((conf * 2 - 1) * 100) / 100;\n const certainty = Math.round(Math.abs(conf - 0.5) * 2 * 100) / 100;\n\n if (!dryRun) {\n await ctx.db.patch(node._id, {\n metadata: { ...meta, valence, certainty },\n });\n }\n nodesUpdated++;\n }\n\n return {\n dryRun,\n beliefConfidence: {\n updated: confUpdated,\n skipped: confSkipped,\n total: allConfRecords.length,\n },\n epistemicNodes: {\n updated: nodesUpdated,\n skipped: nodesSkipped,\n total: allBeliefNodes.length,\n },\n };\n },\n});\n\n/**\n * Backfill: Create relates_to_thesis edges for confidence-bearing beliefs in a project.\n *\n * When modulateConfidence was missing the edge-creation step, beliefs got scored\n * but never linked to the project's theme node. This backfill fixes that.\n *\n * Run: npx convex run epistemicBeliefs:backfillScoredBeliefEdges '{\"projectId\":\"<id>\"}'\n * Dry run first: npx convex run epistemicBeliefs:backfillScoredBeliefEdges '{\"projectId\":\"<id>\",\"dryRun\":true}'\n */\nexport const backfillScoredBeliefEdges = internalMutation({\n args: {\n ...optionalBeliefScopeArgs,\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const dryRun = args.dryRun ?? false;\n\n // Get all confidence-bearing beliefs in the project\n const allBeliefs = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\n \"by_topic\",\n (q: any) =>\n q.eq(\"topicId\", args.topicId || args.projectId)\n )\n .filter((q) => q.eq(q.field(\"nodeType\"), \"belief\"))\n .collect();\n\n const scoredBeliefs = allBeliefs.filter((belief) => {\n const metadata = (belief.metadata || {}) as Record<string, unknown>;\n const lifecycle = resolveBeliefStatus(belief, metadata);\n return lifecycle === \"belief\" || lifecycle === \"fact\";\n });\n\n // Get theme nodes for the project\n const themeNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\n \"by_topic\",\n (q: any) =>\n q.eq(\"topicId\", args.topicId || args.projectId)\n )\n .filter((q) => q.eq(q.field(\"nodeType\"), \"theme\"))\n .collect();\n\n let created = 0;\n let skipped = 0;\n\n for (const belief of scoredBeliefs) {\n if (!belief.globalId) {\n skipped++;\n continue;\n }\n\n for (const theme of themeNodes) {\n if (!theme.globalId) {\n continue;\n }\n\n const edgeGlobalId = `edge-${belief.globalId}-relates_to_thesis-${theme.globalId}`;\n\n // Check if edge already exists in Convex mirror\n const existing = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q) => q.eq(q.field(\"globalId\"), edgeGlobalId))\n .first();\n\n if (existing) {\n skipped++;\n continue;\n }\n\n if (!dryRun) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: belief.globalId,\n toGlobalId: theme.globalId,\n edgeType: \"relates_to_thesis\",\n weight: belief.confidence ?? 0.5,\n createdBy: \"backfill:scored_belief_theme\",\n topicId: String(args.projectId),\n fromNodeType: \"belief\",\n toNodeType: \"theme\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n }\n created++;\n }\n }\n\n return {\n dryRun,\n scoredBeliefs: scoredBeliefs.length,\n themeNodes: themeNodes.length,\n edgesCreated: created,\n edgesSkipped: skipped,\n };\n },\n});\n\n/**\n * @deprecated Legacy sprint backfill — removed. Sprints are D-tier.\n * Kept as no-op stub to avoid breaking deployed function references.\n */\nexport const backfillBeliefSprintIds = internalMutation({\n args: {\n ...optionalBeliefScopeArgs,\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, _args) => {\n return {\n dryRun: true,\n message: \"backfillBeliefSprintIds removed — sprints are D-tier legacy. Use worktrees.\",\n sprintsScanned: 0,\n beliefsWithSprints: 0,\n updated: 0,\n skipped: 0,\n };\n },\n});\n\n// =============================================================================\n// GET BELIEF CLUSTER POSITIONS (worktree-based)\n// =============================================================================\n\n/**\n * Get belief cluster positions for visualization.\n * Classifies each belief as \"clustered\" (in a worktree) or \"unprocessed\"\n * based on worktreeBeliefCluster membership.\n *\n * Used by PillarDetailPanel, PillarsPanel, BeliefListPanel.\n */\nexport const getBeliefClusterPositions = query({\n args: {\n ...optionalBeliefScopeArgs,\n userId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope || !scope.projectId) {\n return {\n positions: {},\n hasClusters: false,\n counts: { raw: 0, hypothesis: 0, conditional: 0, unprocessed: 0, total: 0 },\n };\n }\n\n const allBeliefNodes = await getBeliefNodesForScope(ctx, scope);\n const clusteredBeliefIds = new Set<string>();\n\n // Find all beliefs that belong to any worktree cluster\n for (const node of allBeliefNodes) {\n const links = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_belief\", (q: any) => q.eq(\"beliefId\", node._id))\n .first();\n if (links) {\n clusteredBeliefIds.add(String(node._id));\n }\n }\n\n const positions: Record<string, \"hypothesis\" | \"unprocessed\"> = {};\n for (const node of allBeliefNodes) {\n const id = String(node._id);\n // Beliefs in worktree clusters are treated as hypotheses (tested)\n positions[id] = clusteredBeliefIds.has(id) ? \"hypothesis\" : \"unprocessed\";\n }\n\n const unprocessedCount = allBeliefNodes.length - clusteredBeliefIds.size;\n\n return {\n positions,\n hasClusters: clusteredBeliefIds.size > 0,\n counts: {\n raw: 0,\n hypothesis: clusteredBeliefIds.size,\n conditional: 0,\n unprocessed: unprocessedCount,\n total: allBeliefNodes.length,\n },\n };\n },\n});\n\n// =============================================================================\n// REASSIGN BELIEFS TO A NEW TOPIC (for auto-branching)\n// =============================================================================\n\n/**\n * Reassign a batch of belief nodes to a different topic.\n *\n * Used by the density-based auto-branching system when beliefs are moved\n * from a parent topic into newly created subtopics. Patches `topicId`\n * and `updatedAt` on the target beliefs, and also reassigns any questions\n * and evidence nodes that are connected to the reassigned beliefs via edges.\n *\n * Skips nodes that don't exist or aren't active.\n */\nexport const reassignBeliefsTopic = mutation({\n args: {\n beliefNodeIds: v.array(v.id(\"epistemicNodes\")),\n targetTopicId: v.string(),\n reason: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // Verify the target topic exists\n const targetTopic = await ctx.db.get(args.targetTopicId as Id<\"topics\">);\n if (!targetTopic) {\n throw new Error(`Target topic not found: ${args.targetTopicId}`);\n }\n\n let reassigned = 0;\n let skipped = 0;\n const now = Date.now();\n const movedBeliefIds = new Set<string>();\n\n // Phase 1: Reassign the beliefs themselves\n for (const beliefNodeId of args.beliefNodeIds) {\n const node = await ctx.db.get(beliefNodeId);\n\n // Skip if node doesn't exist or isn't a belief\n if (!node || node.nodeType !== \"belief\") {\n skipped++;\n continue;\n }\n\n await ctx.db.patch(beliefNodeId, {\n topicId: args.targetTopicId,\n updatedAt: now,\n });\n movedBeliefIds.add(String(beliefNodeId));\n reassigned++;\n }\n\n // Phase 2: Find and reassign connected non-belief nodes (questions, evidence, etc.)\n // For each moved belief, find edges where the belief is source or target,\n // and reassign the connected non-belief node if it's in the same old topic.\n let connectedReassigned = 0;\n const alreadyReassigned = new Set<string>();\n\n for (const beliefId of movedBeliefIds) {\n // Outbound edges from this belief\n const outbound = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from\", (q: any) =>\n q.eq(\"fromNodeId\", beliefId as any)\n )\n .collect();\n\n // Inbound edges to this belief\n const inbound = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q: any) =>\n q.eq(\"toNodeId\", beliefId as any)\n )\n .collect();\n\n const connectedNodeIds = new Set<string>();\n for (const edge of outbound) {\n if (edge.toNodeId) connectedNodeIds.add(String(edge.toNodeId));\n }\n for (const edge of inbound) {\n if (edge.fromNodeId) connectedNodeIds.add(String(edge.fromNodeId));\n }\n\n for (const connectedId of connectedNodeIds) {\n // Skip beliefs (already handled in Phase 1) and already-reassigned nodes\n if (movedBeliefIds.has(connectedId) || alreadyReassigned.has(connectedId)) {\n continue;\n }\n\n try {\n const connectedNode = await ctx.db.get(connectedId as any) as any;\n if (!connectedNode || connectedNode.status !== \"active\") continue;\n // Only reassign if the connected node is still in the OLD topic\n // (i.e., not already in the target or a different subtopic)\n if (\n connectedNode.topicId &&\n String(connectedNode.topicId) !== String(args.targetTopicId)\n ) {\n await ctx.db.patch(connectedId as any, {\n topicId: args.targetTopicId,\n updatedAt: now,\n });\n alreadyReassigned.add(connectedId);\n connectedReassigned++;\n }\n } catch {\n // Skip nodes that can't be patched\n }\n }\n }\n\n return { reassigned, skipped, connectedReassigned };\n },\n});\n","/** Shared evaluator helpers and result-normalization utilities. */\n\nimport type {\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n} from \"../epistemicContractHelpers\";\n\nexport type ToolResultEnvelope = {\n command?: string;\n data?: unknown;\n exitCode?: number | null;\n output?: string;\n report?: unknown;\n stderr?: string;\n stdout?: string;\n};\n\ntype AnyRecord = Record<string, unknown>;\n\nexport function asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nexport function asNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nexport function asRecord(value: unknown): AnyRecord | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as AnyRecord)\n : null;\n}\n\nexport function asString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : null;\n}\n\nexport function deriveDirectionalResult(\n direction: EpistemicContractDirection,\n conditionSatisfied: boolean\n): EpistemicContractEvaluationResult {\n if (direction === \"falsifies\") {\n return conditionSatisfied ? \"disconfirmed\" : \"confirmed\";\n }\n return conditionSatisfied ? \"confirmed\" : \"disconfirmed\";\n}\n\nexport function extractTextCandidates(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n const candidate = asString(value);\n return candidate ? [candidate] : [];\n }\n\n const candidates = [\n record.stdout,\n record.stderr,\n record.output,\n record.text,\n record.message,\n record.raw,\n ]\n .map(asString)\n .filter((candidate): candidate is string => Boolean(candidate));\n\n for (const nestedKey of [\"report\", \"result\", \"data\", \"payload\"]) {\n const nested = record[nestedKey];\n if (nested !== value) {\n candidates.push(...extractTextCandidates(nested));\n }\n }\n\n return Array.from(new Set(candidates));\n}\n\nexport function normalizeFilePath(value: string): string {\n return value.replace(/\\\\/g, \"/\").replace(/^\\.\\//, \"\");\n}\n\nexport function normalizeToolResultEnvelope(value: unknown): ToolResultEnvelope {\n const record = asRecord(value);\n if (!record) {\n return {\n output: asString(value) ?? undefined,\n };\n }\n\n const exitCode =\n asNumber(record.exitCode) ??\n asNumber(record.code) ??\n asNumber(record.status) ??\n null;\n\n return {\n command: asString(record.command) ?? undefined,\n data: record.data ?? record.payload,\n exitCode,\n output: asString(record.output) ?? undefined,\n report:\n record.report ??\n record.json ??\n record.result ??\n record.payload ??\n undefined,\n stderr: asString(record.stderr) ?? undefined,\n stdout: asString(record.stdout) ?? undefined,\n };\n}\n\nexport function parseJsonCandidate<T = unknown>(value: unknown): T | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value !== \"string\") {\n return value as T;\n }\n\n try {\n return JSON.parse(value) as T;\n } catch {\n return null;\n }\n}\n\nexport function patternMatchesPath(\n filePath: string,\n pattern: string\n): boolean {\n const normalizedPath = normalizeFilePath(filePath);\n const normalizedPattern = normalizeFilePath(pattern);\n const escaped = normalizedPattern.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regexPattern = escaped\n .replace(/\\\\\\*\\\\\\*/g, \".*\")\n .replace(/\\\\\\*/g, \"[^/]*\")\n .replace(/\\\\\\?/g, \"[^/]\");\n return new RegExp(`^${regexPattern}$`).test(normalizedPath);\n}\n\nexport function somePatternMatches(\n filePath: string | null | undefined,\n patterns: string[]\n): boolean {\n if (!filePath) {\n return false;\n }\n return patterns.some((pattern) => patternMatchesPath(filePath, pattern));\n}\n","/** Lint-based engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n somePatternMatches,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype ParsedLintDiagnostic = {\n filePath: string | null;\n message: string;\n severity: string;\n};\n\ntype LintCheckerConfig = {\n filePatterns: string[];\n linter: \"biome\";\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): LintCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"lint_checker requires evaluatorConfig with { filePatterns: string[], linter: \\\"biome\\\" }.\"\n );\n }\n\n const filePatterns = asArray(record.filePatterns)\n .map(asString)\n .filter((pattern): pattern is string => Boolean(pattern));\n if (filePatterns.length === 0) {\n throw new Error(\"lint_checker requires at least one file pattern.\");\n }\n\n const linter = asString(record.linter);\n if (linter !== \"biome\") {\n throw new Error(`Unsupported linter: ${String(record.linter)}`);\n }\n\n return {\n filePatterns,\n linter,\n };\n}\n\nfunction parseDiagnostics(resultData: unknown): ParsedLintDiagnostic[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ?? asRecord(envelope.data) ?? asRecord(resultData);\n if (!record) {\n return [];\n }\n\n return asArray(record.diagnostics)\n .map((entry) => {\n const diagnostic = asRecord(entry);\n if (!diagnostic) {\n return null;\n }\n const location = asRecord(diagnostic.location);\n const pathRecord = asRecord(location?.path);\n const filePath =\n asString(diagnostic.filePath) ??\n asString(diagnostic.file) ??\n asString(location?.filePath) ??\n asString(pathRecord?.file);\n const severity = asString(diagnostic.severity) ?? \"error\";\n const message =\n asString(diagnostic.message) ??\n asString(diagnostic.description) ??\n \"Lint issue\";\n return {\n filePath: filePath ? normalizeFilePath(filePath) : null,\n message,\n severity,\n };\n })\n .filter(\n (diagnostic): diagnostic is ParsedLintDiagnostic => Boolean(diagnostic)\n );\n}\n\nfunction getMatchedDiagnostics(\n contract: AnyContract,\n resultData: unknown\n): ParsedLintDiagnostic[] {\n const config = parseConfig(contract.condition);\n return parseDiagnostics(resultData).filter((diagnostic) =>\n somePatternMatches(diagnostic.filePath, config.filePatterns)\n );\n}\n\nexport const lintCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"lint_checker\",\n matches({ contract, resultData }) {\n const envelope = normalizeToolResultEnvelope(resultData);\n const exitCode = asNumber(envelope.exitCode);\n if (exitCode === 0) {\n return true;\n }\n return getMatchedDiagnostics(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"lint_checker requires Biome lint resultData.\",\n };\n }\n\n const envelope = normalizeToolResultEnvelope(args.resultData);\n const exitCode = asNumber(envelope.exitCode);\n const matchedDiagnostics = getMatchedDiagnostics(args.contract, args.resultData);\n\n if (matchedDiagnostics.length === 0 && exitCode !== 0 && exitCode !== null) {\n return {\n result: \"inconclusive\",\n rationale:\n \"Biome reported issues, but none matched the configured file patterns.\",\n };\n }\n\n const conditionSatisfied =\n exitCode === 0 || (exitCode !== null && matchedDiagnostics.length === 0);\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Biome reported no matching lint diagnostics for ${config.filePatterns.join(\", \")}.`\n : `Biome reported ${matchedDiagnostics.length} matching issue(s): ${matchedDiagnostics\n .map((diagnostic) =>\n diagnostic.filePath\n ? `${diagnostic.filePath} (${diagnostic.severity})`\n : diagnostic.message\n )\n .join(\", \")}.`,\n data: {\n exitCode,\n filePatterns: config.filePatterns,\n linter: config.linter,\n matchedDiagnostics,\n },\n };\n },\n};\n","/** Sentry-backed engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n normalizeToolResultEnvelope,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype SentryCheckerConfig = {\n module: string;\n windowDays: number;\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): SentryCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"sentry_checker requires evaluatorConfig with { module, windowDays }.\"\n );\n }\n\n const moduleName = asString(record.module);\n const windowDays = asNumber(record.windowDays);\n if (!moduleName || windowDays === null) {\n throw new Error(\n \"sentry_checker requires a module name and numeric windowDays.\"\n );\n }\n\n return {\n module: moduleName,\n windowDays,\n };\n}\n\nfunction parseIncidentCount(resultData: unknown): {\n incidentCount: number | null;\n moduleName: string | null;\n windowDays: number | null;\n} {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record = asRecord(envelope.report) ?? asRecord(envelope.data) ?? asRecord(resultData);\n if (!record) {\n return {\n incidentCount: null,\n moduleName: null,\n windowDays: null,\n };\n }\n\n const incidents = asArray(record.incidents);\n const incidentCount =\n asNumber(record.incidentCount) ??\n (incidents.length > 0 ? incidents.length : null);\n\n return {\n incidentCount,\n moduleName: asString(record.module),\n windowDays: asNumber(record.windowDays),\n };\n}\n\nfunction matchesModule(contract: AnyContract, resultData: unknown): boolean {\n const config = parseConfig(contract.condition);\n const payload = parseIncidentCount(resultData);\n return !payload.moduleName || payload.moduleName === config.module;\n}\n\nexport const sentryCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"sentry_checker\",\n matches({ contract, resultData }) {\n return matchesModule(contract, resultData);\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"sentry_checker requires incident count resultData.\",\n };\n }\n\n const payload = parseIncidentCount(args.resultData);\n if (payload.incidentCount === null) {\n return {\n result: \"error\",\n rationale: \"sentry_checker could not determine an incident count.\",\n };\n }\n if (!matchesModule(args.contract, args.resultData)) {\n return {\n result: \"inconclusive\",\n rationale: `Sentry result targeted ${payload.moduleName}, not ${config.module}.`,\n };\n }\n\n const conditionSatisfied = payload.incidentCount === 0;\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Sentry reported zero incidents for ${config.module} over ${config.windowDays} day(s).`\n : `Sentry reported ${payload.incidentCount} incident(s) for ${config.module} over ${config.windowDays} day(s).`,\n data: {\n incidentCount: payload.incidentCount,\n module: config.module,\n windowDays: config.windowDays,\n },\n };\n },\n};\n","/** Test-runner engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluator,\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asRecord,\n asString,\n deriveDirectionalResult,\n extractTextCandidates,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n parseJsonCandidate,\n patternMatchesPath,\n} from \"./shared\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype ParsedSuite = {\n failedTests: string[];\n filePath: string;\n passedTests: string[];\n};\n\ntype TestRunnerConfig = {\n runner: \"vitest\";\n testPattern: string;\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): TestRunnerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"test_runner requires evaluatorConfig with { testPattern, runner: \\\"vitest\\\" }.\"\n );\n }\n\n const testPattern = asString(record.testPattern);\n if (!testPattern) {\n throw new Error(\"test_runner requires a non-empty testPattern.\");\n }\n\n const runner = asString(record.runner);\n if (runner !== \"vitest\") {\n throw new Error(`Unsupported test runner: ${String(record.runner)}`);\n }\n\n return {\n runner,\n testPattern,\n };\n}\n\nfunction collectFailedTests(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n return [];\n }\n\n const fullName = asString(record.fullName);\n const title = asString(record.title);\n const label = fullName ?? title ?? \"unnamed test\";\n const status = asString(record.status);\n const state = asString(asRecord(record.result)?.state);\n const isFailed =\n status === \"failed\" ||\n status === \"fail\" ||\n state === \"failed\" ||\n state === \"fail\";\n\n const failures = isFailed ? [label] : [];\n for (const nestedKey of [\"assertionResults\", \"tests\", \"tasks\"]) {\n for (const nested of asArray(record[nestedKey])) {\n failures.push(...collectFailedTests(nested));\n }\n }\n\n return failures;\n}\n\nfunction collectPassedTests(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n return [];\n }\n\n const fullName = asString(record.fullName);\n const title = asString(record.title);\n const label = fullName ?? title ?? \"unnamed test\";\n const status = asString(record.status);\n const state = asString(asRecord(record.result)?.state);\n const isPassed = status === \"passed\" || state === \"passed\";\n\n const passed = isPassed ? [label] : [];\n for (const nestedKey of [\"assertionResults\", \"tests\", \"tasks\"]) {\n for (const nested of asArray(record[nestedKey])) {\n passed.push(...collectPassedTests(nested));\n }\n }\n\n return passed;\n}\n\nfunction parseSuite(value: unknown): ParsedSuite | null {\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n\n const filePath =\n asString(record.name) ??\n asString(record.file) ??\n asString(record.filePath) ??\n asString(record.filepath);\n if (!filePath) {\n return null;\n }\n\n return {\n failedTests: Array.from(new Set(collectFailedTests(record))),\n filePath: normalizeFilePath(filePath),\n passedTests: Array.from(new Set(collectPassedTests(record))),\n };\n}\n\nfunction parseVitestSuites(resultData: unknown): ParsedSuite[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const candidates = [\n envelope.report,\n envelope.data,\n envelope.stdout,\n envelope.output,\n ...extractTextCandidates(resultData),\n ];\n\n for (const candidate of candidates) {\n const parsed = parseJsonCandidate(candidate);\n const report = asRecord(parsed);\n if (!report) {\n continue;\n }\n\n const suites = asArray(report.testResults)\n .map(parseSuite)\n .filter((suite): suite is ParsedSuite => Boolean(suite));\n if (suites.length > 0) {\n return suites;\n }\n\n const fileSuites = asArray(report.files)\n .map(parseSuite)\n .filter((suite): suite is ParsedSuite => Boolean(suite));\n if (fileSuites.length > 0) {\n return fileSuites;\n }\n }\n\n return [];\n}\n\nfunction getMatchedSuites(\n contract: AnyContract,\n resultData: unknown\n): ParsedSuite[] {\n const config = parseConfig(contract.condition);\n return parseVitestSuites(resultData).filter((suite) =>\n patternMatchesPath(suite.filePath, config.testPattern)\n );\n}\n\nexport type EngineeringEpistemicEvaluator = EpistemicEvaluator & {\n matches(args: { contract: AnyContract; resultData: unknown }): boolean;\n};\n\nexport const testRunnerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"test_runner\",\n matches({ contract, resultData }) {\n return getMatchedSuites(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n const matchedSuites = getMatchedSuites(args.contract, args.resultData);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"test_runner requires Vitest JSON resultData.\",\n };\n }\n if (matchedSuites.length === 0) {\n return {\n result: \"inconclusive\",\n rationale: `No Vitest suites matched ${config.testPattern}.`,\n };\n }\n\n const failedTests = matchedSuites.flatMap((suite) => suite.failedTests);\n const passedTests = matchedSuites.flatMap((suite) => suite.passedTests);\n const conditionSatisfied = failedTests.length === 0;\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Vitest matched ${matchedSuites.length} suite(s) for ${config.testPattern}; all ${passedTests.length} test assertions passed.`\n : `Vitest matched ${matchedSuites.length} suite(s) for ${config.testPattern}; failing tests: ${failedTests.join(\", \")}.`,\n data: {\n runner: config.runner,\n testPattern: config.testPattern,\n matchedFiles: matchedSuites.map((suite) => suite.filePath),\n failedTests,\n passedTestCount: passedTests.length,\n },\n };\n },\n};\n","/** Typecheck-based engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n extractTextCandidates,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n somePatternMatches,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype ParsedDiagnostic = {\n code?: string;\n filePath: string | null;\n message: string;\n};\n\ntype TscCheckerConfig = {\n filePatterns: string[];\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): TscCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"tsc_checker requires evaluatorConfig with { filePatterns: string[] }.\"\n );\n }\n\n const filePatterns = asArray(record.filePatterns)\n .map(asString)\n .filter((pattern): pattern is string => Boolean(pattern));\n if (filePatterns.length === 0) {\n throw new Error(\"tsc_checker requires at least one file pattern.\");\n }\n\n return { filePatterns };\n}\n\nfunction parseStructuredDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ?? asRecord(envelope.data) ?? asRecord(resultData);\n if (!record) {\n return [];\n }\n\n return asArray(record.diagnostics).flatMap((entry): ParsedDiagnostic[] => {\n const diagnostic = asRecord(entry);\n if (!diagnostic) {\n return [];\n }\n const filePath =\n asString(diagnostic.filePath) ??\n asString(diagnostic.file) ??\n asString(asRecord(diagnostic.location)?.filePath) ??\n asString(asRecord(asRecord(diagnostic.location)?.path)?.file);\n const message = asString(diagnostic.message) ?? \"TypeScript error\";\n return [\n {\n code: asString(diagnostic.code) ?? undefined,\n filePath: filePath ? normalizeFilePath(filePath) : null,\n message,\n },\n ];\n });\n}\n\nfunction parseTextDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const diagnostics: ParsedDiagnostic[] = [];\n const patterns = [\n /^(.+?)\\((\\d+),(\\d+)\\): error TS(\\d+): (.+)$/gm,\n /^(.+?):(\\d+):(\\d+) - error TS(\\d+): (.+)$/gm,\n ];\n\n for (const text of extractTextCandidates(resultData)) {\n for (const pattern of patterns) {\n for (const match of text.matchAll(pattern)) {\n diagnostics.push({\n code: match[4],\n filePath: normalizeFilePath(match[1] ?? \"\"),\n message: match[5] ?? \"TypeScript error\",\n });\n }\n }\n }\n\n return diagnostics;\n}\n\nfunction parseDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const structured = parseStructuredDiagnostics(resultData);\n return structured.length > 0 ? structured : parseTextDiagnostics(resultData);\n}\n\nfunction getMatchedDiagnostics(\n contract: AnyContract,\n resultData: unknown\n): ParsedDiagnostic[] {\n const config = parseConfig(contract.condition);\n return parseDiagnostics(resultData).filter((diagnostic) =>\n somePatternMatches(diagnostic.filePath, config.filePatterns)\n );\n}\n\nexport const tscCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"tsc_checker\",\n matches({ contract, resultData }) {\n const envelope = normalizeToolResultEnvelope(resultData);\n const exitCode = asNumber(envelope.exitCode);\n if (exitCode === 0) {\n return true;\n }\n return getMatchedDiagnostics(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"tsc_checker requires TypeScript diagnostic resultData.\",\n };\n }\n\n const envelope = normalizeToolResultEnvelope(args.resultData);\n const exitCode = asNumber(envelope.exitCode);\n const matchedDiagnostics = getMatchedDiagnostics(args.contract, args.resultData);\n\n if (matchedDiagnostics.length === 0 && exitCode !== 0 && exitCode !== null) {\n return {\n result: \"inconclusive\",\n rationale:\n \"TypeScript reported errors, but none matched the configured file patterns.\",\n };\n }\n\n const conditionSatisfied =\n exitCode === 0 || (exitCode !== null && matchedDiagnostics.length === 0);\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `TypeScript reported no matching diagnostics for ${config.filePatterns.join(\", \")}.`\n : `TypeScript found ${matchedDiagnostics.length} matching diagnostic(s): ${matchedDiagnostics\n .map((diagnostic) =>\n diagnostic.filePath\n ? `${diagnostic.filePath}${diagnostic.code ? ` (TS${diagnostic.code})` : \"\"}`\n : diagnostic.message\n )\n .join(\", \")}.`,\n data: {\n exitCode,\n filePatterns: config.filePatterns,\n matchedDiagnostics,\n },\n };\n },\n};\n","import type { EpistemicEvaluator } from \"../epistemicContracts\";\nimport { getRegisteredEpistemicEvaluators } from \"../epistemicContracts\";\nimport { lintCheckerEvaluator } from \"./lintCheckerEvaluator\";\nimport { sentryCheckerEvaluator } from \"./sentryCheckerEvaluator\";\nimport { testRunnerEvaluator } from \"./testRunnerEvaluator\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\nimport { tscCheckerEvaluator } from \"./tscCheckerEvaluator\";\n\nexport const ENGINEERING_EPISTEMIC_EVALUATORS: EngineeringEpistemicEvaluator[] =\n [\n testRunnerEvaluator,\n tscCheckerEvaluator,\n lintCheckerEvaluator,\n sentryCheckerEvaluator,\n ];\n\nexport const ENGINEERING_EVALUATOR_NAMES = new Set(\n ENGINEERING_EPISTEMIC_EVALUATORS.map((evaluator) => evaluator.name)\n);\n\nexport function getEngineeringEpistemicEvaluator(\n name: string\n): EngineeringEpistemicEvaluator | undefined {\n return ENGINEERING_EPISTEMIC_EVALUATORS.find(\n (evaluator) => evaluator.name === name\n );\n}\n\nexport function registerAllEngineeringEvaluators(\n registerEvaluator: (evaluator: EpistemicEvaluator) => void\n): void {\n for (const evaluator of ENGINEERING_EPISTEMIC_EVALUATORS) {\n registerEvaluator(evaluator);\n }\n}\n\nexport { lintCheckerEvaluator } from \"./lintCheckerEvaluator\";\nexport { sentryCheckerEvaluator } from \"./sentryCheckerEvaluator\";\nexport { testRunnerEvaluator } from \"./testRunnerEvaluator\";\nexport { tscCheckerEvaluator } from \"./tscCheckerEvaluator\";\n\nexport const RESEARCH_EVALUATOR_NAMES = [\n \"market_index_comparator\",\n \"metric_checker\",\n \"reference_check_counter\",\n \"temporal_deadline\",\n] as const;\n\nexport type ResearchEvaluatorName = (typeof RESEARCH_EVALUATOR_NAMES)[number];\n\nexport function registerAllResearchEvaluators(): ResearchEvaluatorName[] {\n const registered = new Set(getRegisteredEpistemicEvaluators());\n return RESEARCH_EVALUATOR_NAMES.filter((name) => registered.has(name));\n}\n","/** Convex queries and mutations for epistemic contract lifecycle management. */\nimport { v } from \"convex/values\";\nimport { checkProjectAccess } from \"@lucern/access-control/access\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internalMutation, mutation, query } from \"./convex\";\nimport { applyBeliefConfidenceChange } from \"./epistemicBeliefs\";\nimport {\n buildComparisonRationale,\n buildEvidentialRationale,\n compareMetricValue,\n createInheritedContractRecord,\n deriveContractModulationPlan,\n deriveContractStatus,\n getEvaluatorInputRecord,\n normalizeEvidentialAction,\n parseComparisonOperator,\n parseEvidentialEvaluatorConfig,\n parseMarketIndexComparatorConfig,\n parseMetricCheckerConfig,\n parseNumericThreshold,\n parseReferenceCheckCounterConfig,\n parseTemporalDeadlineConfig,\n pickFiniteNumber,\n resolveComparisonResult,\n type EpistemicContractEvaluationResult,\n type EpistemicContractRecord,\n} from \"./epistemicContractHelpers\";\nimport {\n ENGINEERING_EPISTEMIC_EVALUATORS,\n ENGINEERING_EVALUATOR_NAMES,\n getEngineeringEpistemicEvaluator,\n} from \"./evaluators\";\nimport { generateGlobalId } from \"./globalId\";\n\ntype BeliefNodeDoc = {\n _id: Id<\"epistemicNodes\">;\n nodeType: \"belief\";\n canonicalText: string;\n projectId?: string;\n topicId?: Id<\"topics\"> | string;\n confidence?: number;\n status?: string;\n [key: string]: unknown;\n};\n\ntype ContractDoc = EpistemicContractRecord<\n Id<\"epistemicNodes\">,\n Id<\"topics\"> | string | undefined\n> & {\n _id: string;\n _creationTime: number;\n};\n\ntype ContractEvaluationDoc = {\n contractId: string;\n beliefNodeId: Id<\"epistemicNodes\">;\n result: EpistemicContractEvaluationResult;\n evaluatedAt: number;\n evaluator: string;\n trigger: string;\n resultData?: unknown;\n modulationApplied: boolean;\n confidenceDelta?: number;\n confidenceBefore?: number;\n confidenceAfter?: number;\n beliefConfidenceId?: Id<\"beliefConfidence\">;\n modulationRationale?: string;\n topicId?: Id<\"topics\"> | string;\n _id: string;\n _creationTime: number;\n};\n\ntype EvidenceEdgeDoc = {\n fromNodeId: Id<\"epistemicNodes\">;\n weight?: number;\n updatedAt?: number;\n createdAt?: number;\n _creationTime?: number;\n};\n\ntype EvidenceNodeDoc = {\n _id: Id<\"epistemicNodes\">;\n nodeType: string;\n status?: string;\n metadata?: unknown;\n};\n\nexport type EpistemicEvaluatorResult = {\n result: EpistemicContractEvaluationResult;\n confidence?: number;\n data?: unknown;\n rationale: string;\n};\n\nexport type EpistemicEvaluatorContext = {\n belief: BeliefNodeDoc;\n contract: ContractDoc;\n ctx: MutationCtx;\n now: number;\n resultData?: unknown;\n trigger: string;\n inputData?: unknown;\n};\n\nexport type EpistemicEvaluator = {\n name: string;\n evaluate(\n args: EpistemicEvaluatorContext\n ): Promise<EpistemicEvaluatorResult> | EpistemicEvaluatorResult;\n};\n\ntype ContractReadCtx = MutationCtx | QueryCtx;\n\ntype ContradictionStatusCounts = {\n activeCount: number;\n resolvedCount: number;\n};\n\ntype EvidenceFreshness = {\n newestAgeMs: number | null;\n oldestAgeMs: number | null;\n newestEdgeAt: number | null;\n oldestEdgeAt: number | null;\n edgeCount: number;\n};\n\ntype EvidentialMetric =\n | \"evidence_count\"\n | \"contradiction_status\"\n | \"edge_freshness\"\n | \"dependent_count\";\n\ntype EvidentialOperator = \"gte\" | \"lte\" | \"eq\" | \"gt\" | \"lt\";\n\ntype EvidentialAction = \"modulate_confidence\" | \"flag_review\" | \"archive\";\n\ntype EvidentialEvaluatorConfig = {\n metric: EvidentialMetric;\n operator: EvidentialOperator;\n threshold: number;\n action?: EvidentialAction;\n actionParams?: {\n targetConfidence?: number;\n rationale?: string;\n };\n};\n\ntype EvidentialMetricSnapshot = {\n metric: EvidentialMetric;\n value: number | null;\n data: Record<string, unknown>;\n};\n\ntype MetricCheckerEvaluatorConfig = {\n metric?: string;\n operator: EvidentialOperator;\n threshold: number;\n observedValue?: number;\n currentValue?: number;\n metricValue?: number;\n unit?: string;\n};\n\ntype ReferenceCheckCounterConfig = {\n tag: string;\n operator: EvidentialOperator;\n threshold: number;\n caseSensitive?: boolean;\n};\n\ntype TemporalDeadlineEvaluatorConfig = {\n label?: string;\n completed?: boolean;\n completedAt?: number;\n observedAt?: number;\n satisfiedAt?: number;\n achievedAt?: number;\n};\n\ntype MarketIndexComparatorConfig = {\n subject?: string;\n subjectValue?: number;\n primaryValue?: number;\n benchmark?: string;\n benchmarkValue?: number;\n comparisonValue?: number;\n operator: EvidentialOperator;\n threshold: number;\n};\n\ntype ContractEvaluationExecution = {\n evaluationId: string;\n result: EpistemicContractEvaluationResult;\n status: ContractDoc[\"status\"];\n confidenceBefore: number;\n confidenceAfter: number;\n rationale: string;\n data?: unknown;\n currentConfidence: number;\n};\n\ntype TriggerBatchResult = {\n totalContracts: number;\n processedCount: number;\n overflowCount: number;\n scheduledOverflow: boolean;\n batchSize: number;\n executionTimeMs: number;\n trigger: string;\n results: Array<{\n contractId: string;\n result: EpistemicContractEvaluationResult;\n status: ContractDoc[\"status\"];\n confidenceAfter: number;\n }>;\n};\n\nconst evaluatorRegistry = new Map<string, EpistemicEvaluator>();\nconst BUILT_IN_EVIDENTIAL_EVALUATOR = \"evidential\";\nconst BUILT_IN_EVIDENTIAL_ALIASES = new Set([\n BUILT_IN_EVIDENTIAL_EVALUATOR,\n \"built_in_evidential\",\n \"builtin_evidential\",\n]);\nconst BUILT_IN_METRIC_CHECKER = \"metric_checker\";\nconst BUILT_IN_REFERENCE_CHECK_COUNTER = \"reference_check_counter\";\nconst BUILT_IN_TEMPORAL_DEADLINE = \"temporal_deadline\";\nconst BUILT_IN_MARKET_INDEX_COMPARATOR = \"market_index_comparator\";\nconst MAX_CONTRACT_EVALUATION_BATCH_SIZE = 50;\nconst ACTIVE_CONTRADICTION_STATUSES = new Set([\n \"unresolved\",\n \"investigating\",\n \"accepted_as_permanent\",\n]);\nconst DEPENDENT_EDGE_TYPES = new Set([\n \"depends_on\",\n]);\n\nfunction classifyContradictionStatus(status: unknown): \"active\" | \"resolved\" {\n if (typeof status !== \"string\") {\n return \"active\";\n }\n\n if (ACTIVE_CONTRADICTION_STATUSES.has(status)) {\n return \"active\";\n }\n\n if (\n status === \"resolved_support\" ||\n status === \"resolved_contra\" ||\n status === \"belief_forked\"\n ) {\n return \"resolved\";\n }\n\n return \"resolved\";\n}\n\nfunction getEdgeTimestamp(edge: {\n updatedAt?: unknown;\n createdAt?: unknown;\n _creationTime?: unknown;\n}): number | null {\n if (typeof edge.updatedAt === \"number\") {\n return edge.updatedAt;\n }\n if (typeof edge.createdAt === \"number\") {\n return edge.createdAt;\n }\n if (typeof edge._creationTime === \"number\") {\n return edge._creationTime;\n }\n return null;\n}\n\nasync function getEvidenceLinks(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<Array<{ edge: EvidenceEdgeDoc; node: EvidenceNodeDoc }>> {\n const edges = await (ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", beliefNodeId).eq(\"edgeType\", \"informs\")\n )\n .collect() as Promise<EvidenceEdgeDoc[]>);\n\n if (edges.length === 0) {\n return [];\n }\n\n const nodes = await Promise.all(\n edges.map((edge) => ctx.db.get(edge.fromNodeId))\n );\n return edges.flatMap((edge, index) => {\n const node = nodes[index] as EvidenceNodeDoc | null;\n if (!node || node.nodeType !== \"evidence\" || node.status === \"archived\") {\n return [];\n }\n return [{ edge, node }];\n });\n}\n\nfunction getEvidenceTags(node: EvidenceNodeDoc): string[] {\n const metadata =\n node.metadata && typeof node.metadata === \"object\"\n ? (node.metadata as Record<string, unknown>)\n : null;\n const tags = metadata?.tags;\n if (!Array.isArray(tags)) {\n return [];\n }\n return tags.filter((tag): tag is string => typeof tag === \"string\");\n}\n\nasync function computeEvidenceCountMetric(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<number> {\n return (await getEvidenceLinks(ctx, beliefNodeId)).length;\n}\n\nasync function computeTaggedEvidenceCount(args: {\n ctx: ContractReadCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n tag: string;\n caseSensitive?: boolean;\n}): Promise<{ count: number; matchedEvidenceIds: string[] }> {\n const expectedTag = args.caseSensitive ? args.tag : args.tag.toLowerCase();\n const matchedEvidenceIds = (await getEvidenceLinks(args.ctx, args.beliefNodeId))\n .filter(({ node }) =>\n getEvidenceTags(node).some((tag) =>\n (args.caseSensitive ? tag : tag.toLowerCase()) === expectedTag\n )\n )\n .map(({ node }) => String(node._id));\n\n return {\n count: matchedEvidenceIds.length,\n matchedEvidenceIds,\n };\n}\n\nasync function computeContradictionCounts(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<ContradictionStatusCounts> {\n const contradictions = await ((ctx.db as any)\n .query(\"contradictions\")\n .withIndex(\"by_beliefId\", (q: any) => q.eq(\"beliefId\", beliefNodeId))\n .collect() as Promise<\n Array<{ resolutionStatus?: string; status?: string }>\n >);\n\n return contradictions.reduce<ContradictionStatusCounts>(\n (counts, contradiction) => {\n const status =\n contradiction.resolutionStatus ?? contradiction.status ?? \"unresolved\";\n if (classifyContradictionStatus(status) === \"active\") {\n counts.activeCount += 1;\n } else {\n counts.resolvedCount += 1;\n }\n return counts;\n },\n { activeCount: 0, resolvedCount: 0 }\n );\n}\n\nasync function computeEvidenceFreshness(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">,\n now = Date.now()\n): Promise<EvidenceFreshness> {\n const timestamps = (await getEvidenceLinks(ctx, beliefNodeId))\n .map(({ edge }) => getEdgeTimestamp(edge))\n .filter((value): value is number => value !== null);\n\n if (timestamps.length === 0) {\n return {\n newestAgeMs: null,\n oldestAgeMs: null,\n newestEdgeAt: null,\n oldestEdgeAt: null,\n edgeCount: 0,\n };\n }\n\n const newestEdgeAt = Math.max(...timestamps);\n const oldestEdgeAt = Math.min(...timestamps);\n\n return {\n newestAgeMs: Math.max(0, now - newestEdgeAt),\n oldestAgeMs: Math.max(0, now - oldestEdgeAt),\n newestEdgeAt,\n oldestEdgeAt,\n edgeCount: timestamps.length,\n };\n}\n\nasync function computeDependentBeliefCount(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<number> {\n const incomingEdges = await (ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q) => q.eq(\"toNodeId\", beliefNodeId))\n .collect() as Promise<\n Array<{ fromNodeId: Id<\"epistemicNodes\">; edgeType: string }>\n >);\n\n const dependencyEdges = incomingEdges.filter((edge) =>\n DEPENDENT_EDGE_TYPES.has(edge.edgeType)\n );\n if (dependencyEdges.length === 0) {\n return 0;\n }\n\n const dependentBeliefs = await Promise.all(\n dependencyEdges.map((edge) => ctx.db.get(edge.fromNodeId))\n );\n const uniqueBeliefIds = new Set<string>();\n\n for (const node of dependentBeliefs) {\n if (\n node &&\n node.nodeType === \"belief\" &&\n node.status !== \"archived\" &&\n node.status !== \"deleted\"\n ) {\n uniqueBeliefIds.add(String(node._id));\n }\n }\n\n return uniqueBeliefIds.size;\n}\n\nasync function snapshotEvidentialMetric(args: {\n ctx: ContractReadCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n metric: EvidentialMetric;\n now: number;\n}): Promise<EvidentialMetricSnapshot> {\n switch (args.metric) {\n case \"evidence_count\": {\n const count = await computeEvidenceCountMetric(\n args.ctx,\n args.beliefNodeId\n );\n return {\n metric: args.metric,\n value: count,\n data: { evidenceCount: count },\n };\n }\n case \"contradiction_status\": {\n const counts = await computeContradictionCounts(\n args.ctx,\n args.beliefNodeId\n );\n return {\n metric: args.metric,\n value: counts.activeCount,\n data: counts,\n };\n }\n case \"edge_freshness\": {\n const freshness = await computeEvidenceFreshness(\n args.ctx,\n args.beliefNodeId,\n args.now\n );\n return {\n metric: args.metric,\n value: freshness.newestAgeMs,\n data: freshness,\n };\n }\n case \"dependent_count\": {\n const count = await computeDependentBeliefCount(\n args.ctx,\n args.beliefNodeId\n );\n return {\n metric: args.metric,\n value: count,\n data: { dependentCount: count },\n };\n }\n default:\n return {\n metric: args.metric,\n value: null,\n data: {},\n };\n }\n}\n\n\nasync function evaluateBuiltInEvidentialContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseEvidentialEvaluatorConfig(\n args.contract.condition.evaluatorConfig\n );\n const snapshot = await snapshotEvidentialMetric({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n metric: config.metric,\n now: args.now,\n });\n\n const comparisonSatisfied =\n snapshot.value !== null &&\n compareMetricValue(config.operator, snapshot.value, config.threshold);\n const result =\n args.contract.direction === \"falsifies\"\n ? comparisonSatisfied\n ? \"disconfirmed\"\n : \"confirmed\"\n : comparisonSatisfied\n ? \"confirmed\"\n : \"disconfirmed\";\n\n return {\n result,\n rationale: buildEvidentialRationale({\n config,\n snapshot,\n comparisonSatisfied,\n result,\n }),\n data: {\n ...snapshot.data,\n metric: config.metric,\n observedValue: snapshot.value,\n operator: config.operator,\n threshold: config.threshold,\n action: config.action ?? \"modulate_confidence\",\n actionParams: config.actionParams,\n },\n };\n}\n\nasync function evaluateMetricCheckerContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseMetricCheckerConfig(args.contract.condition.evaluatorConfig);\n const input = getEvaluatorInputRecord(args.inputData, \"metricData\");\n const metric =\n typeof input.metric === \"string\" && input.metric.length > 0\n ? input.metric\n : config.metric;\n const observedValue =\n pickFiniteNumber(input, [\n \"observedValue\",\n \"currentValue\",\n \"metricValue\",\n \"value\",\n ]) ??\n config.observedValue ??\n config.currentValue ??\n config.metricValue ??\n null;\n if (observedValue === null) {\n return {\n result: \"inconclusive\",\n rationale: `metric_checker is awaiting data for ${metric ?? args.contract.condition.expression}.`,\n data: {\n metric,\n observedValue: null,\n operator: config.operator,\n threshold: config.threshold,\n unit: config.unit,\n },\n };\n }\n\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n observedValue,\n config.threshold\n );\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: metric ?? \"metric\",\n observedValue,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n unit: config.unit,\n }),\n data: {\n metric,\n observedValue,\n operator: config.operator,\n threshold: config.threshold,\n unit: config.unit,\n },\n };\n}\n\nasync function evaluateReferenceCheckCounterContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseReferenceCheckCounterConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"referenceCheckData\");\n const tag =\n typeof input.tag === \"string\" && input.tag.trim().length > 0\n ? input.tag.trim()\n : config.tag;\n const snapshot = await computeTaggedEvidenceCount({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n tag,\n caseSensitive: config.caseSensitive,\n });\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n snapshot.count,\n config.threshold\n );\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: `reference checks tagged \"${tag}\"`,\n observedValue: snapshot.count,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n }),\n data: {\n tag,\n observedValue: snapshot.count,\n referenceCheckCount: snapshot.count,\n matchedEvidenceIds: snapshot.matchedEvidenceIds,\n operator: config.operator,\n threshold: config.threshold,\n caseSensitive: config.caseSensitive ?? false,\n },\n };\n}\n\nasync function evaluateTemporalDeadlineContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n if (\n typeof args.contract.deadline !== \"number\" ||\n !Number.isFinite(args.contract.deadline)\n ) {\n throw new Error(\n \"temporal_deadline requires contract.deadline to be set to a finite timestamp.\"\n );\n }\n\n const config = parseTemporalDeadlineConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"temporalData\");\n const label =\n (typeof input.label === \"string\" && input.label.length > 0\n ? input.label\n : config.label) ??\n args.contract.title ??\n args.contract.condition.expression;\n const completedAt =\n pickFiniteNumber(input, [\n \"completedAt\",\n \"observedAt\",\n \"satisfiedAt\",\n \"achievedAt\",\n ]) ??\n config.completedAt ??\n config.observedAt ??\n config.satisfiedAt ??\n config.achievedAt;\n const completed =\n input.completed === true || config.completed === true || completedAt !== undefined;\n\n if (completed) {\n if (completedAt !== undefined && completedAt > args.contract.deadline) {\n return {\n result: \"expired\",\n rationale: `${label} completed at ${completedAt}, after deadline ${args.contract.deadline}.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: true,\n completedAt,\n missedDeadline: true,\n overdueByMs: completedAt - args.contract.deadline,\n },\n };\n }\n\n const result =\n args.contract.direction === \"falsifies\" ? \"disconfirmed\" : \"confirmed\";\n return {\n result,\n rationale: `${label} completed before deadline ${args.contract.deadline}.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: true,\n completedAt: completedAt ?? null,\n missedDeadline: false,\n },\n };\n }\n\n if (args.now > args.contract.deadline) {\n return {\n result: \"expired\",\n rationale: `${label} missed deadline ${args.contract.deadline}; temporal contract expired.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: false,\n overdueByMs: args.now - args.contract.deadline,\n },\n };\n }\n\n return {\n result: \"inconclusive\",\n rationale: `${label} is still before deadline ${args.contract.deadline}; awaiting outcome.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: false,\n timeRemainingMs: args.contract.deadline - args.now,\n },\n };\n}\n\nasync function evaluateMarketIndexComparatorContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseMarketIndexComparatorConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"marketIndexData\");\n const subject =\n typeof input.subject === \"string\" && input.subject.length > 0\n ? input.subject\n : config.subject;\n const benchmark =\n typeof input.benchmark === \"string\" && input.benchmark.length > 0\n ? input.benchmark\n : config.benchmark;\n const subjectValue =\n pickFiniteNumber(input, [\"subjectValue\", \"primaryValue\", \"leftValue\"]) ??\n config.subjectValue ??\n config.primaryValue ??\n null;\n const benchmarkValue =\n pickFiniteNumber(input, [\n \"benchmarkValue\",\n \"comparisonValue\",\n \"rightValue\",\n ]) ??\n config.benchmarkValue ??\n config.comparisonValue ??\n null;\n\n if (subjectValue === null || benchmarkValue === null) {\n return {\n result: \"inconclusive\",\n rationale: \"market_index_comparator is awaiting both subject and benchmark values.\",\n data: {\n subject,\n subjectValue,\n benchmark,\n benchmarkValue,\n operator: config.operator,\n threshold: config.threshold,\n },\n };\n }\n\n if (benchmarkValue === 0) {\n throw new Error(\n \"market_index_comparator cannot compare against a zero benchmark value.\"\n );\n }\n\n const differentialPercent =\n ((subjectValue - benchmarkValue) / Math.abs(benchmarkValue)) * 100;\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n differentialPercent,\n config.threshold\n );\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: `${subject ?? \"subject\"} vs ${benchmark ?? \"benchmark\"} differential`,\n observedValue: differentialPercent,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n unit: \"%\",\n }),\n data: {\n subject,\n subjectValue,\n benchmark,\n benchmarkValue,\n differentialPercent,\n operator: config.operator,\n threshold: config.threshold,\n },\n };\n}\n\nfunction ensureBuiltInEvaluators(): void {\n for (const name of BUILT_IN_EVIDENTIAL_ALIASES) {\n if (evaluatorRegistry.has(name)) {\n continue;\n }\n evaluatorRegistry.set(name, {\n name,\n evaluate: evaluateBuiltInEvidentialContract,\n });\n }\n\n for (const evaluator of ENGINEERING_EPISTEMIC_EVALUATORS) {\n if (evaluatorRegistry.has(evaluator.name)) {\n continue;\n }\n evaluatorRegistry.set(evaluator.name, evaluator);\n }\n\n const researchEvaluators: Array<[string, EpistemicEvaluator[\"evaluate\"]]> = [\n [BUILT_IN_METRIC_CHECKER, evaluateMetricCheckerContract],\n [\n BUILT_IN_REFERENCE_CHECK_COUNTER,\n evaluateReferenceCheckCounterContract,\n ],\n [BUILT_IN_TEMPORAL_DEADLINE, evaluateTemporalDeadlineContract],\n [\n BUILT_IN_MARKET_INDEX_COMPARATOR,\n evaluateMarketIndexComparatorContract,\n ],\n ];\n\n for (const [name, evaluate] of researchEvaluators) {\n if (evaluatorRegistry.has(name)) {\n continue;\n }\n evaluatorRegistry.set(name, { name, evaluate });\n }\n}\n\nasync function executeContractEvaluation(args: {\n ctx: MutationCtx;\n belief: BeliefNodeDoc;\n contract: ContractDoc;\n now: number;\n trigger: string;\n inputData?: unknown;\n authenticatedUserId: string;\n currentConfidence?: number;\n resultData?: unknown;\n}): Promise<ContractEvaluationExecution> {\n ensureBuiltInEvaluators();\n\n const evaluator = evaluatorRegistry.get(args.contract.condition.evaluator);\n let evaluation: EpistemicEvaluatorResult;\n if (evaluator) {\n try {\n evaluation = await evaluator.evaluate({\n belief: args.belief,\n contract: args.contract,\n ctx: args.ctx,\n now: args.now,\n resultData: args.resultData,\n trigger: args.trigger,\n inputData: args.inputData,\n });\n } catch (error) {\n evaluation = {\n result: \"error\",\n rationale:\n error instanceof Error ? error.message : \"Unknown evaluator error.\",\n };\n }\n } else {\n evaluation = {\n result: \"error\",\n rationale: `No epistemic evaluator registered for \"${args.contract.condition.evaluator}\".`,\n };\n }\n\n const confidenceBefore =\n typeof args.currentConfidence === \"number\"\n ? args.currentConfidence\n : typeof args.belief.confidence === \"number\"\n ? args.belief.confidence\n : 0.5;\n const modulationPlan = deriveContractModulationPlan({\n currentConfidence: confidenceBefore,\n modulation: args.contract.modulation,\n result: evaluation.result,\n resultConfidence: evaluation.confidence,\n });\n\n let beliefConfidenceId: Id<\"beliefConfidence\"> | undefined;\n let confidenceAfter = confidenceBefore;\n if (modulationPlan) {\n // EK-7: Convert contract modulation to SL opinion.\n // Contract modulations are dogmatic (certainty=1) → u=0.\n const contractB = Math.max(0, Math.min(1, modulationPlan.confidenceAfter));\n const modulationResult = await applyBeliefConfidenceChange(args.ctx, {\n nodeId: args.contract.beliefNodeId,\n belief: contractB,\n disbelief: 1 - contractB,\n uncertainty: 0,\n baseRate: 0.5,\n trigger: modulationPlan.trigger,\n rationale: `Epistemic contract \"${args.contract.title}\" ${evaluation.result}: ${evaluation.rationale}`,\n authenticatedUserId: args.authenticatedUserId,\n });\n beliefConfidenceId = modulationResult.beliefConfidenceId;\n confidenceAfter =\n typeof modulationResult.newConfidence === \"number\"\n ? modulationResult.newConfidence\n : modulationPlan.confidenceAfter;\n }\n\n const evaluationId = await (args.ctx.db as any).insert(\n \"contractEvaluations\",\n {\n contractId: args.contract.contractId,\n beliefNodeId: args.contract.beliefNodeId,\n result: evaluation.result,\n evaluatedAt: args.now,\n evaluator: args.contract.condition.evaluator,\n trigger: args.trigger,\n resultData: evaluation.data,\n modulationApplied: Boolean(modulationPlan),\n confidenceDelta: modulationPlan?.confidenceDelta,\n confidenceBefore: modulationPlan?.confidenceBefore,\n confidenceAfter: modulationPlan ? confidenceAfter : undefined,\n beliefConfidenceId,\n modulationRationale: evaluation.rationale,\n topicId: args.contract.topicId,\n } as any\n );\n\n const nextStatus = deriveContractStatus(\n evaluation.result,\n args.contract.status\n );\n await args.ctx.db.patch(\n args.contract._id as any,\n {\n status: nextStatus,\n lastEvaluatedAt: args.now,\n evaluationCount: (args.contract.evaluationCount ?? 0) + 1,\n updatedAt: args.now,\n } as any\n );\n\n return {\n evaluationId,\n result: evaluation.result,\n status: nextStatus,\n confidenceBefore,\n confidenceAfter,\n rationale: evaluation.rationale,\n data: evaluation.data,\n currentConfidence: confidenceAfter,\n };\n}\n\nfunction resolveSchedulesForTrigger(trigger: string): Set<string> {\n if (trigger === \"evidence_added\") {\n return new Set([\"on_evidence\", \"event_driven\"]);\n }\n if (trigger === \"periodic\") {\n return new Set([\"periodic\"]);\n }\n if (trigger === \"manual\") {\n return new Set([\"on_demand\", \"event_driven\"]);\n }\n return new Set([\"event_driven\"]);\n}\n\nasync function loadContractsForBelief(args: {\n ctx: MutationCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n}): Promise<ContractDoc[]> {\n return await ((args.ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q: any) => q.eq(\"beliefNodeId\", args.beliefNodeId))\n .collect() as Promise<ContractDoc[]>);\n}\n\nasync function loadContractsForTrigger(args: {\n ctx: MutationCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n trigger: string;\n contractIds?: string[];\n}): Promise<ContractDoc[]> {\n const contracts = await loadContractsForBelief(args);\n\n ensureBuiltInEvaluators();\n const allowedSchedules = resolveSchedulesForTrigger(args.trigger);\n const contractIdFilter =\n args.contractIds && args.contractIds.length > 0\n ? new Set(args.contractIds)\n : null;\n\n return contracts.filter((contract) => {\n if (contract.status === \"archived\") {\n return false;\n }\n if (contract.conditionType === \"composite\") {\n return false;\n }\n if (!evaluatorRegistry.has(contract.condition.evaluator)) {\n return false;\n }\n if (contractIdFilter) {\n return contractIdFilter.has(contract.contractId);\n }\n return allowedSchedules.has(contract.evaluationSchedule);\n });\n}\n\nasync function evaluateContractsForTriggerBatch(args: {\n ctx: MutationCtx;\n belief: BeliefNodeDoc;\n trigger: string;\n inputData?: unknown;\n authenticatedUserId: string;\n contractIds?: string[];\n maxBatchSize?: number;\n}): Promise<TriggerBatchResult> {\n const startedAt = Date.now();\n const contracts = await loadContractsForTrigger({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n trigger: args.trigger,\n contractIds: args.contractIds,\n });\n const batchLimit = Math.max(\n 1,\n Math.min(\n args.maxBatchSize ?? MAX_CONTRACT_EVALUATION_BATCH_SIZE,\n MAX_CONTRACT_EVALUATION_BATCH_SIZE\n )\n );\n const currentBatch = contracts.slice(0, batchLimit);\n const overflowContracts = contracts.slice(batchLimit);\n\n let runningConfidence =\n typeof args.belief.confidence === \"number\" ? args.belief.confidence : 0.5;\n const results: TriggerBatchResult[\"results\"] = [];\n\n for (const contract of currentBatch) {\n const evaluation = await executeContractEvaluation({\n ctx: args.ctx,\n belief: args.belief,\n contract,\n now: Date.now(),\n trigger: args.trigger,\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n currentConfidence: runningConfidence,\n });\n runningConfidence = evaluation.currentConfidence;\n args.belief.confidence = runningConfidence;\n results.push({\n contractId: contract.contractId,\n result: evaluation.result,\n status: evaluation.status,\n confidenceAfter: evaluation.confidenceAfter,\n });\n }\n\n if (overflowContracts.length > 0) {\n await args.ctx.scheduler.runAfter(\n 0,\n \"epistemicContracts.processContractEvaluationOverflow\" as any,\n {\n beliefNodeId: args.belief._id,\n trigger: args.trigger,\n contractIds: overflowContracts.map((contract) => contract.contractId),\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n maxBatchSize: batchLimit,\n }\n );\n }\n\n const executionTimeMs = Date.now() - startedAt;\n console.info(\"[epistemicContracts] processed contract evaluation batch\", {\n beliefNodeId: String(args.belief._id),\n trigger: args.trigger,\n batchSize: currentBatch.length,\n overflowCount: overflowContracts.length,\n executionTimeMs,\n });\n\n return {\n totalContracts: contracts.length,\n processedCount: currentBatch.length,\n overflowCount: overflowContracts.length,\n scheduledOverflow: overflowContracts.length > 0,\n batchSize: currentBatch.length,\n executionTimeMs,\n trigger: args.trigger,\n results,\n };\n}\n\nexport function clearEpistemicEvaluators(): void {\n evaluatorRegistry.clear();\n ensureBuiltInEvaluators();\n}\n\nexport function registerEpistemicEvaluator(\n evaluator: EpistemicEvaluator\n): void {\n ensureBuiltInEvaluators();\n evaluatorRegistry.set(evaluator.name, evaluator);\n}\n\nexport function getRegisteredEpistemicEvaluators(): string[] {\n ensureBuiltInEvaluators();\n return Array.from(evaluatorRegistry.keys()).sort();\n}\n\nasync function requireAuth(ctx: MutationCtx | QueryCtx): Promise<string> {\n const userId = await getCurrentUserId(ctx as any);\n if (!userId) {\n throw new Error(\"Authentication required.\");\n }\n return userId;\n}\n\n// biome-ignore lint/suspicious/useAwait: delegates to requireAuth which is async in some ctx paths\nasync function resolveAuthenticatedUserId(\n ctx: MutationCtx | QueryCtx,\n explicitUserId?: string\n): Promise<string> {\n if (explicitUserId) {\n return explicitUserId;\n }\n return requireAuth(ctx);\n}\n\nasync function requireBeliefProjectAccess(\n ctx: MutationCtx | QueryCtx,\n belief: BeliefNodeDoc,\n userId: string\n): Promise<void> {\n if (!belief.projectId) {\n throw new Error(\"Belief has no project scope.\");\n }\n const hasAccess = await checkProjectAccess(\n ctx as any,\n belief.projectId,\n userId\n );\n if (!hasAccess) {\n throw new Error(\"Project access required.\");\n }\n}\n\nasync function requireTopicReadAccess(\n ctx: QueryCtx,\n beliefs: BeliefNodeDoc[],\n userId: string\n): Promise<void> {\n const projectIds = new Set<string>();\n\n for (const belief of beliefs) {\n if (!belief.projectId) {\n throw new Error(\"Belief has no project scope.\");\n }\n projectIds.add(belief.projectId);\n }\n\n for (const projectId of projectIds) {\n const hasAccess = await checkProjectAccess(ctx as any, projectId, userId);\n if (!hasAccess) {\n throw new Error(\"Project access required.\");\n }\n }\n}\n\nasync function getContractByContractId(\n ctx: MutationCtx | QueryCtx,\n contractId: string\n): Promise<ContractDoc | null> {\n return await ((ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_contractId\", (q: any) => q.eq(\"contractId\", contractId))\n .first() as Promise<ContractDoc | null>);\n}\n\nasync function getLatestEvaluation(\n ctx: MutationCtx | QueryCtx,\n contractId: string\n): Promise<ContractEvaluationDoc | null> {\n const evaluations = await ((ctx.db as any)\n .query(\"contractEvaluations\")\n .withIndex(\"by_contract_time\", (q: any) => q.eq(\"contractId\", contractId))\n .order(\"desc\")\n .take(1) as Promise<ContractEvaluationDoc[]>);\n\n return evaluations[0] ?? null;\n}\n\nexport const evaluateEvidenceCount = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await requireAuth(ctx);\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeEvidenceCountMetric(ctx, args.beliefNodeId);\n },\n});\n\nexport const evaluateContradictionStatus = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await requireAuth(ctx);\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeContradictionCounts(ctx, args.beliefNodeId);\n },\n});\n\nexport const evaluateEdgeFreshness = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await requireAuth(ctx);\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeEvidenceFreshness(ctx, args.beliefNodeId);\n },\n});\n\nexport const evaluateDependentBeliefCount = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await requireAuth(ctx);\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeDependentBeliefCount(ctx, args.beliefNodeId);\n },\n});\n\nexport const createEpistemicContract = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n title: v.string(),\n description: v.optional(v.string()),\n conditionType: v.union(\n v.literal(\"assertion\"),\n v.literal(\"temporal\"),\n v.literal(\"evidential\"),\n v.literal(\"threshold\"),\n v.literal(\"composite\")\n ),\n direction: v.union(v.literal(\"confirms\"), v.literal(\"falsifies\")),\n condition: v.object({\n expression: v.string(),\n evaluator: v.string(),\n evaluatorConfig: v.optional(v.any()),\n }),\n deadline: v.optional(v.number()),\n compositeOf: v.optional(v.array(v.string())),\n compositeOperator: v.optional(\n v.union(v.literal(\"all\"), v.literal(\"any\"), v.literal(\"majority\"))\n ),\n modulation: v.object({\n onConfirmed: v.object({\n delta: v.number(),\n ceiling: v.optional(v.number()),\n }),\n onDisconfirmed: v.object({\n delta: v.number(),\n floor: v.optional(v.number()),\n }),\n onExpired: v.optional(\n v.object({\n delta: v.number(),\n })\n ),\n onPartial: v.optional(\n v.object({\n threshold: v.number(),\n delta: v.number(),\n })\n ),\n }),\n evaluationSchedule: v.union(\n v.literal(\"on_demand\"),\n v.literal(\"on_evidence\"),\n v.literal(\"periodic\"),\n v.literal(\"event_driven\")\n ),\n periodicIntervalMs: v.optional(v.number()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n const now = Date.now();\n const contractId = generateGlobalId();\n\n const contractDoc = {\n beliefNodeId: args.beliefNodeId,\n contractId,\n title: args.title,\n description: args.description,\n conditionType: args.conditionType,\n direction: args.direction,\n condition: args.condition,\n deadline: args.deadline,\n compositeOf: args.compositeOf,\n compositeOperator: args.compositeOperator,\n modulation: args.modulation,\n evaluationSchedule: args.evaluationSchedule,\n periodicIntervalMs: args.periodicIntervalMs,\n status: \"active\" as const,\n lineageSource: \"declared\" as const,\n evaluationCount: 0,\n topicId: belief.topicId,\n createdAt: now,\n createdBy: userId,\n updatedAt: now,\n };\n\n const insertedId = await (ctx.db as any).insert(\n \"epistemicContracts\",\n contractDoc\n );\n return {\n contractId,\n id: insertedId,\n status: contractDoc.status,\n };\n },\n});\n\nexport const evaluateContract = mutation({\n args: {\n contractId: v.string(),\n resultData: v.optional(v.any()),\n trigger: v.optional(v.string()),\n inputData: v.optional(v.any()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const contract = await getContractByContractId(ctx, args.contractId);\n if (!contract) {\n throw new Error(`Contract not found: ${args.contractId}`);\n }\n if (contract.status === \"archived\") {\n throw new Error(\"Archived contracts cannot be evaluated.\");\n }\n\n const belief = (await ctx.db.get(\n contract.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found for contract.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n const evaluation = await executeContractEvaluation({\n ctx,\n belief,\n contract,\n now: Date.now(),\n resultData: args.resultData,\n trigger: args.trigger ?? \"manual\",\n inputData: args.inputData,\n authenticatedUserId: userId,\n });\n\n return {\n evaluationId: evaluation.evaluationId,\n result: evaluation.result,\n status: evaluation.status,\n confidenceBefore: evaluation.confidenceBefore,\n confidenceAfter: evaluation.confidenceAfter,\n rationale: evaluation.rationale,\n };\n },\n});\n\nexport const evaluateEngineeringContracts = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n testOutput: v.optional(v.any()),\n tscOutput: v.optional(v.any()),\n lintOutput: v.optional(v.any()),\n sentryData: v.optional(v.any()),\n trigger: v.optional(v.string()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n const trigger = args.trigger ?? \"event_driven\";\n const allowedSchedules = resolveSchedulesForTrigger(trigger);\n const payloadByEvaluator = new Map<string, unknown>([\n [\"test_runner\", args.testOutput],\n [\"tsc_checker\", args.tscOutput],\n [\"lint_checker\", args.lintOutput],\n [\"sentry_checker\", args.sentryData],\n ]);\n const contracts = (await loadContractsForBelief({\n ctx,\n beliefNodeId: args.beliefNodeId,\n })).filter((contract) => {\n if (contract.status === \"archived\") {\n return false;\n }\n if (!allowedSchedules.has(contract.evaluationSchedule)) {\n return false;\n }\n return ENGINEERING_EVALUATOR_NAMES.has(contract.condition.evaluator);\n });\n\n let runningConfidence =\n typeof belief.confidence === \"number\" ? belief.confidence : 0.5;\n const evaluations: Array<Record<string, unknown>> = [];\n\n for (const contract of contracts) {\n const resultData = payloadByEvaluator.get(contract.condition.evaluator);\n if (resultData === undefined) {\n continue;\n }\n\n const engineeringEvaluator = getEngineeringEpistemicEvaluator(\n contract.condition.evaluator\n );\n if (!engineeringEvaluator?.matches({ contract, resultData })) {\n continue;\n }\n\n const evaluation = await executeContractEvaluation({\n ctx,\n belief,\n contract,\n now: Date.now(),\n trigger,\n authenticatedUserId: userId,\n currentConfidence: runningConfidence,\n resultData,\n });\n runningConfidence = evaluation.currentConfidence;\n belief.confidence = runningConfidence;\n\n evaluations.push({\n contractId: contract.contractId,\n evaluator: contract.condition.evaluator,\n evaluationId: evaluation.evaluationId,\n result: evaluation.result,\n status: evaluation.status,\n confidenceBefore: evaluation.confidenceBefore,\n confidenceAfter: evaluation.confidenceAfter,\n rationale: evaluation.rationale,\n });\n }\n\n return {\n beliefNodeId: args.beliefNodeId,\n trigger,\n availableContracts: contracts.length,\n evaluatedContracts: evaluations.length,\n evaluations,\n };\n },\n});\n\nexport const evaluateContractsForTrigger = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n trigger: v.string(),\n inputData: v.optional(v.any()),\n maxBatchSize: v.optional(v.number()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n return await evaluateContractsForTriggerBatch({\n ctx,\n belief,\n trigger: args.trigger,\n inputData: args.inputData,\n authenticatedUserId: userId,\n maxBatchSize: args.maxBatchSize,\n });\n },\n});\n\nexport const processContractEvaluationOverflow = internalMutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n trigger: v.string(),\n contractIds: v.array(v.string()),\n inputData: v.optional(v.any()),\n authenticatedUserId: v.string(),\n maxBatchSize: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n\n return await evaluateContractsForTriggerBatch({\n ctx,\n belief,\n trigger: args.trigger,\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n contractIds: args.contractIds,\n maxBatchSize: args.maxBatchSize,\n });\n },\n});\n\nexport const getContractStatus = query({\n args: {\n beliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n contractId: v.optional(v.string()),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"satisfied\"),\n v.literal(\"violated\"),\n v.literal(\"expired\"),\n v.literal(\"suspended\"),\n v.literal(\"archived\")\n )\n ),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n\n let contracts: ContractDoc[] = [];\n if (args.contractId) {\n const contract = await getContractByContractId(ctx, args.contractId);\n contracts = contract ? [contract] : [];\n } else if (args.beliefNodeId) {\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n contracts = await ((ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q: any) =>\n q.eq(\"beliefNodeId\", args.beliefNodeId)\n )\n .collect() as Promise<ContractDoc[]>);\n }\n\n if (contracts.length > 0) {\n const contractBeliefDocs = await Promise.all(\n contracts.map((contract) => ctx.db.get(contract.beliefNodeId))\n );\n const contractBeliefs: BeliefNodeDoc[] = [];\n\n for (const belief of contractBeliefDocs) {\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n contractBeliefs.push(belief as BeliefNodeDoc);\n }\n\n await requireTopicReadAccess(ctx, contractBeliefs, userId);\n }\n\n if (args.status) {\n contracts = contracts.filter(\n (contract) => contract.status === args.status\n );\n }\n\n const rows = await Promise.all(\n contracts.map(async (contract) => ({\n ...contract,\n latestEvaluation: await getLatestEvaluation(ctx, contract.contractId),\n }))\n );\n\n return rows.sort((a, b) => b.createdAt - a.createdAt);\n },\n});\n\nexport const getContractCoverage = query({\n args: {\n topicId: v.string(),\n recentEvaluationLimit: v.optional(v.number()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const contracts = await ((ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_topic\", (q: any) => q.eq(\"topicId\", args.topicId))\n .collect() as Promise<ContractDoc[]>);\n\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const beliefs = await (ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n )\n .collect() as Promise<BeliefNodeDoc[]>);\n await requireTopicReadAccess(ctx, beliefs, userId);\n\n const recentEvaluationLimit = Math.max(\n 0,\n Math.min(args.recentEvaluationLimit ?? 5, 25)\n );\n const recentEvaluations =\n recentEvaluationLimit === 0\n ? []\n : (((await (ctx.db as any)\n .query(\"contractEvaluations\")\n .withIndex(\"by_topic_time\", (q: any) =>\n q.eq(\"topicId\", args.topicId)\n )\n .order(\"desc\")\n .take(recentEvaluationLimit)) as Promise<\n ContractEvaluationDoc[]\n >) ?? []);\n\n const contractBeliefIds = new Set(\n contracts\n .filter((contract) => contract.status !== \"archived\")\n .map((contract) => String(contract.beliefNodeId))\n );\n\n return {\n active: contracts.filter((contract) => contract.status === \"active\")\n .length,\n violated: contracts.filter((contract) => contract.status === \"violated\")\n .length,\n expired: contracts.filter((contract) => contract.status === \"expired\")\n .length,\n unboundHighConfidence: beliefs\n .filter(\n (belief) =>\n typeof belief.confidence === \"number\" &&\n belief.confidence >= 0.8 &&\n !contractBeliefIds.has(String(belief._id))\n )\n .map((belief) => ({\n nodeId: belief._id,\n canonicalText: belief.canonicalText,\n confidence: belief.confidence,\n })),\n recentEvaluations,\n };\n },\n});\n\nexport function inheritContractsForFork<\n TBeliefId = string,\n TTopicId = string | undefined,\n>(\n contracts: Array<{\n status: string;\n beliefNodeId: any;\n contractId: string;\n title: string;\n description?: string;\n conditionType: any;\n direction: any;\n condition: any;\n deadline?: number;\n compositeOf?: string[];\n compositeOperator?: any;\n modulation: any;\n evaluationSchedule: any;\n periodicIntervalMs?: number;\n createdAt: number;\n createdBy: string;\n updatedAt: number;\n }>,\n args: {\n beliefNodeId: TBeliefId;\n topicId?: TTopicId;\n createdBy: string;\n now: number;\n }\n) {\n return contracts\n .filter((contract) => contract.status !== \"archived\")\n .map((contract) => createInheritedContractRecord(contract as any, args));\n}\n"]}
|