@lucern/graph-primitives 1.0.23 → 1.0.24
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 +3 -0
- package/dist/beliefDecay.js.map +1 -1
- package/dist/beliefEvidenceLinks.js +15 -3
- package/dist/beliefEvidenceLinks.js.map +1 -1
- package/dist/beliefEvidenceLinks.operational.js +12 -3
- package/dist/beliefEvidenceLinks.operational.js.map +1 -1
- package/dist/entityCanonicalMatch.d.ts +40 -0
- package/dist/entityCanonicalMatch.js +33 -0
- package/dist/entityCanonicalMatch.js.map +1 -0
- package/dist/entityLifecycle.js +62 -37
- package/dist/entityLifecycle.js.map +1 -1
- package/dist/epistemicAnswers.js.map +1 -1
- package/dist/epistemicBeliefs.admin.js +17 -6
- package/dist/epistemicBeliefs.admin.js.map +1 -1
- package/dist/epistemicBeliefs.backfills.js +13 -2
- package/dist/epistemicBeliefs.backfills.js.map +1 -1
- package/dist/epistemicBeliefs.confidence.js +17 -6
- package/dist/epistemicBeliefs.confidence.js.map +1 -1
- package/dist/epistemicBeliefs.core.js +32 -9
- package/dist/epistemicBeliefs.core.js.map +1 -1
- package/dist/epistemicBeliefs.forkEvidence.js +13 -2
- package/dist/epistemicBeliefs.forkEvidence.js.map +1 -1
- package/dist/epistemicBeliefs.helpers.d.ts +16 -1
- package/dist/epistemicBeliefs.helpers.js +20 -6
- package/dist/epistemicBeliefs.helpers.js.map +1 -1
- package/dist/epistemicBeliefs.internal.js +28 -5
- package/dist/epistemicBeliefs.internal.js.map +1 -1
- package/dist/epistemicBeliefs.js +32 -9
- package/dist/epistemicBeliefs.js.map +1 -1
- package/dist/epistemicBeliefs.lifecycle.js +17 -6
- package/dist/epistemicBeliefs.lifecycle.js.map +1 -1
- package/dist/epistemicBeliefs.links.js +29 -9
- package/dist/epistemicBeliefs.links.js.map +1 -1
- package/dist/epistemicBeliefs.topicAnchor.js +12 -3
- package/dist/epistemicBeliefs.topicAnchor.js.map +1 -1
- package/dist/epistemicContracts.evaluators.js +17 -6
- package/dist/epistemicContracts.evaluators.js.map +1 -1
- package/dist/epistemicContracts.handlers.js +17 -6
- package/dist/epistemicContracts.handlers.js.map +1 -1
- package/dist/epistemicContracts.js +17 -6
- package/dist/epistemicContracts.js.map +1 -1
- package/dist/epistemicEdges.handlers.js +12 -3
- package/dist/epistemicEdges.handlers.js.map +1 -1
- package/dist/epistemicEdges.helpers.d.ts +2 -2
- package/dist/epistemicEdges.js +15 -3
- package/dist/epistemicEdges.js.map +1 -1
- package/dist/epistemicEdges.mutations.js +3 -0
- package/dist/epistemicEdges.mutations.js.map +1 -1
- package/dist/epistemicEvidence.js +15 -3
- package/dist/epistemicEvidence.js.map +1 -1
- package/dist/epistemicEvidenceHelpers.js +3 -0
- package/dist/epistemicEvidenceHelpers.js.map +1 -1
- package/dist/epistemicEvidenceMutations.js +15 -3
- package/dist/epistemicEvidenceMutations.js.map +1 -1
- package/dist/epistemicEvidenceQueries.js +3 -0
- package/dist/epistemicEvidenceQueries.js.map +1 -1
- package/dist/epistemicHelpers.js.map +1 -1
- package/dist/epistemicInsert.js +12 -3
- package/dist/epistemicInsert.js.map +1 -1
- package/dist/epistemicNodeCreation.js.map +1 -1
- package/dist/epistemicNodes.internal.js.map +1 -1
- package/dist/epistemicNodes.js.map +1 -1
- package/dist/epistemicNodes.mutations.js.map +1 -1
- package/dist/epistemicNodes.validators.d.ts +2 -2
- package/dist/epistemicQuestions.conviction.js +3 -0
- package/dist/epistemicQuestions.conviction.js.map +1 -1
- package/dist/epistemicQuestions.create.js +3 -0
- package/dist/epistemicQuestions.create.js.map +1 -1
- package/dist/epistemicQuestions.evidence.js +3 -0
- package/dist/epistemicQuestions.evidence.js.map +1 -1
- package/dist/epistemicQuestions.helpers.js +3 -0
- package/dist/epistemicQuestions.helpers.js.map +1 -1
- package/dist/epistemicQuestions.js +3 -0
- package/dist/epistemicQuestions.js.map +1 -1
- package/dist/epistemicQuestions.lifecycle.js +3 -0
- package/dist/epistemicQuestions.lifecycle.js.map +1 -1
- package/dist/epistemicQuestions.queries.js +3 -0
- package/dist/epistemicQuestions.queries.js.map +1 -1
- package/dist/epistemicQuestions.tail.js +3 -0
- package/dist/epistemicQuestions.tail.js.map +1 -1
- package/dist/epistemicSources.js.map +1 -1
- package/dist/index.js +78 -42
- package/dist/index.js.map +1 -1
- package/dist/proof-attestation.json +1 -1
- package/dist/questionEvidenceLinks.js +3 -0
- package/dist/questionEvidenceLinks.js.map +1 -1
- package/dist/resolvers.js +3 -0
- package/dist/resolvers.js.map +1 -1
- package/dist/topicProjectOverlay.d.ts +4 -0
- package/dist/topicProjectOverlay.js +3 -0
- package/dist/topicProjectOverlay.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/beliefLifecycle.ts","../src/convex.ts","../src/debug.ts","../src/topicScope.ts","../src/workspaceIsolation.ts","../src/epistemicBeliefs.helpers.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","../src/confidencePropagationDispatch.ts","../src/epistemicBeliefs.confidence.ts","../src/epistemicContracts.metrics.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.evaluators.ts","../src/epistemicContracts.handlers.ts"],"names":["normalizeScopeValue","v","mkOpinion","project","readOpinionFromRecord","confidenceFromSL","detectTupleContradiction","evaluateTupleContradictionTransition","parseConfig","parseDiagnostics","getMatchedDiagnostics","BUILT_IN_EVIDENTIAL_ALIASES","BUILT_IN_METRIC_CHECKER","BUILT_IN_REFERENCE_CHECK_COUNTER","BUILT_IN_TEMPORAL_DEADLINE","BUILT_IN_MARKET_INDEX_COMPARATOR","resolveSchedulesForTrigger","getCurrentUserId","checkProjectAccess","permissiveReturn"],"mappings":"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","file":"epistemicContracts.js","sourcesContent":["/**\n * Belief lifecycle helpers shared across Convex modules.\n *\n * Canonical lifecycle:\n * assumption -> hypothesis -> active -> resolved_true/resolved_false\n * \\-> superseded\n */\n\nexport type BeliefLifecycleStatus =\n | \"assumption\"\n | \"hypothesis\"\n | \"active\"\n | \"superseded\"\n | \"resolved_true\"\n | \"resolved_false\";\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 \"active\",\n \"superseded\",\n \"resolved_true\",\n \"resolved_false\",\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 normalizeLegacyBeliefStatus(\n value: unknown\n): BeliefLifecycleStatus | null {\n if (isBeliefLifecycleStatus(value)) {\n return value;\n }\n if (value === \"belief\" || value === \"established\" || value === \"emerging\") {\n return \"active\";\n }\n if (value === \"fact\" || value === \"confirmed\") {\n return \"resolved_true\";\n }\n if (value === \"disconfirmed\" || value === \"expired\") {\n return \"resolved_false\";\n }\n if (value === \"deprecated\") {\n return \"superseded\";\n }\n return null;\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\nfunction resolvedPredictionStatus(\n predictionMeta: unknown\n): BeliefLifecycleStatus | null {\n if (!predictionMeta || typeof predictionMeta !== \"object\") {\n return null;\n }\n const outcome = (predictionMeta as { outcome?: unknown }).outcome;\n if (outcome === \"confirmed\") {\n return \"resolved_true\";\n }\n if (outcome === \"disconfirmed\" || outcome === \"expired\") {\n return \"resolved_false\";\n }\n return null;\n}\n\nfunction shouldTreatBeliefAsResolved(opts: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): BeliefLifecycleStatus | null {\n if (isResolvedByConfidence(opts.confidence)) {\n const normalized = normalizeBeliefConfidence(opts.confidence);\n return normalized === 0 ? \"resolved_false\" : \"resolved_true\";\n }\n const directPredictionStatus = resolvedPredictionStatus(opts.predictionMeta);\n if (directPredictionStatus) {\n return directPredictionStatus;\n }\n const metadataPredictionStatus = resolvedPredictionStatus(\n getPredictionMetaFromMetadata(opts.metadata)\n );\n if (metadataPredictionStatus) {\n return metadataPredictionStatus;\n }\n return null;\n}\n\nexport function resolveBeliefLifecycleStatus(opts: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): BeliefLifecycleStatus {\n const resolvedStatus = shouldTreatBeliefAsResolved(opts);\n if (resolvedStatus) {\n return resolvedStatus;\n }\n\n const direct = opts.beliefStatus;\n const normalizedDirect = normalizeLegacyBeliefStatus(direct);\n if (normalizedDirect) {\n // If the belief has been scored (has numeric credence) but stored status\n // is still pre-validation, promote to active. Evidence, not user intent,\n // makes a hypothesis active.\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (\n normalized !== null &&\n isPreValidationBeliefStatus(normalizedDirect)\n ) {\n return \"active\";\n }\n return normalizedDirect;\n }\n\n const metaStatus = opts.metadata?.beliefStatus;\n const normalizedMetaStatus = normalizeLegacyBeliefStatus(metaStatus);\n if (normalizedMetaStatus) {\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (\n normalized !== null &&\n isPreValidationBeliefStatus(normalizedMetaStatus)\n ) {\n return \"active\";\n }\n return normalizedMetaStatus;\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 === \"active\" || status === \"resolved_true\";\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 const resolvedStatus = shouldTreatBeliefAsResolved({ ...opts });\n if (resolvedStatus) {\n return resolvedStatus;\n }\n if (isPreValidationBeliefStatus(status)) {\n return \"active\";\n }\n return status;\n}\n\nexport function promoteBeliefStatusAfterEvidence(\n status: BeliefLifecycleStatus\n): BeliefLifecycleStatus {\n return isPreValidationBeliefStatus(status) ? \"active\" : status;\n}\n","import {\n actionGeneric,\n anyApi,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\nexport const api = anyApi as any;\nexport const components = componentsGeneric() as any;\nexport const internal = anyApi as any;\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> = any;\nexport type DataModel = any;\ntype IndexRangeBuilder = {\n field(fieldName: string): string;\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n gt(fieldName: string, value: unknown): IndexRangeBuilder;\n gte(fieldName: string, value: unknown): IndexRangeBuilder;\n lt(fieldName: string, value: unknown): IndexRangeBuilder;\n lte(fieldName: string, value: unknown): IndexRangeBuilder;\n};\ntype FilterBuilder = {\n eq(left: unknown, right: unknown): unknown;\n neq(left: unknown, right: unknown): unknown;\n gt(left: unknown, right: unknown): unknown;\n gte(left: unknown, right: unknown): unknown;\n lt(left: unknown, right: unknown): unknown;\n lte(left: unknown, right: unknown): unknown;\n and(...clauses: unknown[]): unknown;\n or(...clauses: unknown[]): unknown;\n field(fieldName: string): unknown;\n};\ntype QueryInitializer<TableName extends TableNames> = {\n withIndex(\n indexName: string,\n range?: (q: any) => unknown\n ): QueryInitializer<TableName>;\n filter(predicate: (q: any) => unknown): QueryInitializer<TableName>;\n order(direction: \"asc\" | \"desc\"): QueryInitializer<TableName>;\n collect(): Promise<Doc<TableName>[]>;\n take(limit: number): Promise<Doc<TableName>[]>;\n first(): Promise<Doc<TableName> | null>;\n unique(): Promise<Doc<TableName> | null>;\n};\nexport type DatabaseReader = {\n get<TableName extends TableNames>(\n id: Id<TableName>\n ): Promise<Doc<TableName> | null>;\n query<TableName extends TableNames>(\n tableName: TableName\n ): QueryInitializer<TableName>;\n normalizeId?<TableName extends TableNames>(\n tableName: TableName,\n id: string\n ): Id<TableName> | null;\n};\nexport type DatabaseWriter = DatabaseReader & {\n insert<TableName extends TableNames>(\n tableName: TableName,\n value: Record<string, unknown>\n ): Promise<Id<TableName>>;\n patch<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n replace<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n delete<TableName extends TableNames>(id: Id<TableName>): Promise<void>;\n};\ntype Scheduler = {\n runAfter(delayMs: number, functionReference: unknown, args?: unknown): Promise<void>;\n};\ntype AuthReader = {\n getUserIdentity(): Promise<unknown>;\n};\ntype RuntimeInvoker = {\n runQuery(functionReference: unknown, args?: unknown): Promise<any>;\n runMutation(functionReference: unknown, args?: unknown): Promise<any>;\n runAction(functionReference: unknown, args?: unknown): Promise<any>;\n};\nexport type QueryCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseReader;\n scheduler: Scheduler;\n};\nexport type MutationCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseWriter;\n scheduler: Scheduler;\n};\nexport type ActionCtx = RuntimeInvoker & {\n auth: AuthReader;\n scheduler: Scheduler;\n};\n\ntype ConvexFunctionBuilder<Ctx> = <\n Definition extends { handler?: (ctx: Ctx, args: any) => any },\n>(\n definition: Definition\n) => any;\n\nexport const action = actionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const httpAction =\n httpActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalAction =\n internalActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalMutation =\n internalMutationGeneric as unknown as ConvexFunctionBuilder<MutationCtx>;\nexport const internalQuery =\n internalQueryGeneric as unknown as ConvexFunctionBuilder<QueryCtx>;\nexport const mutation =\n mutationGeneric as unknown as ConvexFunctionBuilder<MutationCtx>;\nexport const query = queryGeneric as unknown as ConvexFunctionBuilder<QueryCtx>;\n","type GraphPrimitiveDebugEnvironment = {\n process?: {\n env?: Record<string, string | undefined>;\n };\n};\n\nfunction isGraphPrimitiveDebugEnabled(): boolean {\n const env = (globalThis as GraphPrimitiveDebugEnvironment).process?.env;\n return (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG === \"1\" ||\n env?.LUCERN_GRAPH_DEBUG === \"1\"\n );\n}\n\nexport function formatGraphPrimitiveError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error === null) {\n return \"null\";\n }\n if (error === undefined) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(error);\n } catch {\n return Object.prototype.toString.call(error);\n }\n}\n\nexport function debugGraphPrimitiveFallback(\n message: string,\n context?: Record<string, unknown>\n): void {\n if (!isGraphPrimitiveDebugEnabled()) {\n return;\n }\n console.debug(message, context ?? {});\n}\n","/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport { api as appApi } from \"./convex\";\nimport type { Id } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectScope = {\n topicId: Id<\"topics\">;\n projectId?: string;\n tenantId?: string;\n workspaceId?: string;\n source:\n | \"topic\"\n | \"project_mapped_topic\"\n | \"topic_inferred\"\n | \"topic_node\";\n};\n\n/**\n * RR.5 (legacy topics-table retirement) — graph-primitives mirror of the\n * kernel's epistemicNodes-first topic-scope fallback. Kept in lockstep with\n * `packages/reasoning-kernel/src/adapters/lib/topicScope.ts`\n * (`tests/unit/convex/topic-scope-fallbacks.test.ts` asserts parity).\n *\n * Resolves a topic that exists only as `epistemicNodes(nodeType=\"topic\")` —\n * the write-of-record — when no legacy `topics` row backs the ref, returning the\n * node's `topicId` self-key so scoped beliefs/evidence/questions stay reachable.\n * See the kernel module for the full silent-empty-result rationale.\n */\ntype TopicNodeScopeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n globalId?: string;\n nodeType?: string;\n topicId?: string;\n metadata?: Record<string, unknown>;\n};\n\nasync function resolveTopicNodeScopeOrNull(\n ctx: any,\n ref: string,\n): Promise<TopicProjectScope | null> {\n if (!ctx?.db || typeof ctx.db.query !== \"function\") {\n return null;\n }\n\n let node: TopicNodeScopeDoc | null = null;\n\n // 1. The ref IS the topic node's UUIDv7 globalId.\n try {\n const byGlobalId = (await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q: any) => q.eq(\"globalId\", ref))\n .first()) as TopicNodeScopeDoc | null;\n if (byGlobalId && byGlobalId.nodeType === \"topic\") {\n node = byGlobalId;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] topic-node scope lookup by globalId failed\",\n { error, ref },\n );\n }\n\n if (!node) {\n return null;\n }\n\n const scopeKey =\n normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);\n if (!scopeKey) {\n return null;\n }\n\n return {\n topicId: scopeKey as Id<\"topics\">,\n projectId: asMappedProjectId(node as unknown as TopicDoc),\n source: \"topic_node\",\n };\n}\n\ntype MaterializedTopicNodeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n};\n\nfunction asMappedProjectId(\n topic: TopicDoc | null | undefined,\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(topic[LEGACY_SCOPE_FIELD]);\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = (topic.metadata || {}) as Record<string, unknown>;\n const candidate =\n (metadata[LEGACY_SCOPE_FIELD] as string | undefined) ||\n (metadata.legacyProjectId as string | undefined) ||\n (metadata.projectId as string | undefined) ||\n (metadata.scopeProjectId as string | undefined);\n return candidate ? (candidate as string) : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(\n ctx: any,\n scopeId: string,\n): Promise<TopicDoc[]> {\n try {\n return (await ctx.db\n .query(\"topics\")\n .withIndex(\"by_graph_scope_project\", (q: any) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId),\n )\n .collect()) as TopicDoc[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve scope alias via index\",\n {\n error,\n scopeId,\n },\n );\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await ctx.db.query(\"topics\").collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: any,\n topicId: string,\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get as any, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by host query\",\n {\n error,\n topicId,\n },\n );\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: any,\n legacyScopeId: string,\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId as any, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by legacy scope\",\n {\n error,\n legacyScopeId,\n },\n );\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined,\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: any,\n topic: TopicDoc,\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) break;\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) break;\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: any,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string },\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n // Try direct lookup, fall back to the legacy mapped-project bridge\n let topic: TopicDoc | null = null;\n try {\n topic = (await ctx.db.get(\n args.topicId as Id<\"topics\">,\n )) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to load topic by direct id\",\n {\n error,\n topicId: args.topicId,\n },\n );\n // Not a valid topics table ID\n }\n if (!topic) {\n topic = await tryResolveHostTopicById(ctx, String(args.topicId));\n }\n if (!topic) {\n // Try as legacy projectId / globalId via the mapped-project bridge.\n topic =\n pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, String(args.topicId)),\n ) ?? null;\n }\n if (!topic) {\n // RR.5: no legacy topics row — resolve the canonical topic node store\n // before throwing (silent-empty-result fix).\n const nodeScope = await resolveTopicNodeScopeOrNull(\n ctx,\n String(args.topicId),\n );\n if (nodeScope) {\n return nodeScope;\n }\n throw new Error(`Topic not found: ${String(args.topicId)}`);\n }\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n if (mapped) {\n return {\n topicId: topic._id,\n projectId: mapped,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n return {\n topicId: topic._id,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n\n if (args.projectId) {\n let directTopic: TopicDoc | null = null;\n try {\n directTopic = (await ctx.db.get(\n args.projectId as Id<\"topics\">,\n )) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to load direct project topic\",\n {\n error,\n projectId: args.projectId,\n },\n );\n // Not a valid topics table ID, continue to legacy graph-scope lookup.\n }\n\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n directTopic = await tryResolveHostTopicByLegacyScope(ctx, args.projectId);\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n const topics = await findTopicsByScopeAlias(ctx, args.projectId);\n const primary = pickPrimaryTopic(topics);\n if (primary) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, primary);\n return {\n topicId: primary._id,\n projectId: args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"project_mapped_topic\",\n };\n }\n // RR.5: try the canonical topic node store before failing.\n const nodeScope = await resolveTopicNodeScopeOrNull(\n ctx,\n String(args.projectId),\n );\n if (nodeScope) {\n return {\n ...nodeScope,\n projectId: nodeScope.projectId ?? String(args.projectId),\n };\n }\n\n throw new Error(\n `Legacy project scope ${String(args.projectId)} has no mapped topic.`,\n );\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\",\n );\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","import {\n getLayerForNodeType,\n isNodeType,\n} from \"@lucern/contracts/schema-helpers/spine/tables/epistemicNodes\";\nimport {\n resolveTopicProjectScope,\n type TopicProjectScope,\n} from \"./topicScope\";\n\ntype StructuredInvariantError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype ScopeLike = {\n tenantId?: unknown;\n workspaceId?: unknown;\n epistemicLayer?: unknown;\n nodeType?: unknown;\n topicId?: unknown;\n projectId?: unknown;\n publicationStatus?: unknown;\n};\n\nexport type RuntimePackMutationContext = {\n toolName?: string;\n packKey?: string;\n packInstallScope?: \"tenant\" | \"workspace\";\n};\n\nexport function normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction throwWorkspaceIsolationError(args: {\n message: string;\n invariantCode: string;\n suggestion: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredInvariantError;\n error.status = 409;\n error.code = \"INVARIANT_VIOLATION\";\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nexport function assertWorkspaceScopedEpistemicNodeScope(args: {\n scope: TopicProjectScope;\n nodeType: string;\n mutationName: string;\n}): void {\n const layer = isNodeType(args.nodeType)\n ? getLayerForNodeType(args.nodeType)\n : undefined;\n if (layer === \"ontological\") {\n return;\n }\n\n const workspaceId = normalizeScopeValue(args.scope.workspaceId);\n if (workspaceId) {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n \"Workspace-scoped reasoning isolation requires workspaceId on non-ontological node creation.\",\n invariantCode: \"workspace.scope_required_for_epistemic_nodes\",\n suggestion:\n \"Resolve the topic/project scope through a workspace-bound topic before creating epistemic nodes.\",\n details: {\n mutationName: args.mutationName,\n nodeType: args.nodeType,\n topicId: args.scope.topicId,\n projectId: args.scope.projectId,\n },\n });\n}\n\nexport function nodeMatchesWorkspaceReasoningScope(\n node: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!node) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const nodeTenantId = normalizeScopeValue(node.tenantId);\n const nodeWorkspaceId = normalizeScopeValue(node.workspaceId);\n const epistemicLayer =\n typeof node.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n\n if (\n scopeTenantId &&\n nodeTenantId &&\n scopeTenantId !== nodeTenantId\n ) {\n return false;\n }\n\n // Ontological entities are tenant-global (no workspace required)\n if (epistemicLayer === \"ontological\" && nodeWorkspaceId === undefined) {\n return true;\n }\n\n // Published nodes are visible at tenant scope — the microservice API surface.\n // The node stays in its workspace, but tenant-scope queries can see it.\n if (!scopeWorkspaceId && node.publicationStatus === \"published\") {\n return true;\n }\n\n if (!scopeWorkspaceId) {\n return nodeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === nodeWorkspaceId;\n}\n\nexport function edgeMatchesWorkspaceReasoningScope(\n edge: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!edge) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const edgeTenantId = normalizeScopeValue(edge.tenantId);\n const edgeWorkspaceId = normalizeScopeValue(edge.workspaceId);\n\n if (\n scopeTenantId &&\n edgeTenantId &&\n scopeTenantId !== edgeTenantId\n ) {\n return false;\n }\n\n if (!scopeWorkspaceId) {\n return edgeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === edgeWorkspaceId;\n}\n\nexport async function resolveNodeScopeForWorkspaceIsolation(\n ctx: any,\n node: ScopeLike | null | undefined\n): Promise<{\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n nodeType?: string;\n}> {\n const epistemicLayer =\n typeof node?.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n const resolved = {\n tenantId: normalizeScopeValue(node?.tenantId),\n workspaceId: normalizeScopeValue(node?.workspaceId),\n epistemicLayer,\n nodeType: typeof node?.nodeType === \"string\" ? node.nodeType : undefined,\n };\n\n if (!node) {\n return resolved;\n }\n\n if (resolved.epistemicLayer === \"ontological\") {\n return resolved;\n }\n\n if (resolved.tenantId || resolved.workspaceId) {\n return resolved;\n }\n\n if (node.topicId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n topicId: node.topicId as any,\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n if (node.projectId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n projectId: String(node.projectId),\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n return resolved;\n}\n\nexport function resolveRuntimePackMutationContext(args: {\n runtimeToolName?: string;\n runtimePackKey?: string;\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n}): RuntimePackMutationContext | undefined {\n if (\n !args.runtimeToolName &&\n !args.runtimePackKey &&\n !args.runtimePackInstallScope\n ) {\n return;\n }\n\n return {\n toolName: args.runtimeToolName,\n packKey: args.runtimePackKey,\n packInstallScope: args.runtimePackInstallScope,\n };\n}\n\nexport function assertTenantPackWorkspaceMutationAllowed(args: {\n runtime?: RuntimePackMutationContext;\n target: ScopeLike;\n mutationName: string;\n}): void {\n if (\n !args.runtime?.packKey ||\n args.runtime.packInstallScope !== \"tenant\"\n ) {\n return;\n }\n\n const targetWorkspaceId = normalizeScopeValue(args.target.workspaceId);\n const targetLayer =\n typeof args.target.epistemicLayer === \"string\"\n ? args.target.epistemicLayer\n : undefined;\n\n if (!targetWorkspaceId || targetLayer === \"ontological\") {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n `Tenant-scoped pack \"${args.runtime.packKey}\" cannot mutate workspace-scoped reasoning state.`,\n invariantCode: \"workspace.tenant_pack_reasoning_write_forbidden\",\n suggestion:\n \"Use a workspace-scoped pack for workspace-local graph mutations, or route the change through tenant-global canonical entity flows.\",\n details: {\n mutationName: args.mutationName,\n toolName: args.runtime.toolName,\n packKey: args.runtime.packKey,\n targetWorkspaceId,\n targetNodeType: args.target.nodeType,\n targetLayer,\n },\n });\n}\n","/**\n * Epistemic Beliefs API\n *\n * Clean API for managing beliefs in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces beliefs.ts.\n *\n * Key differences from beliefs.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no runtime ID translation fallback)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { v } from \"convex/values\";\nimport {\n detectTupleContradiction,\n evaluateTupleContradictionTransition,\n confidenceFromSL,\n mkOpinion,\n normalizeTupleContradictionPolicy,\n readOpinionFromRecord,\n type ConfidencePolicyConfig,\n type Opinion,\n type SLOpinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport {\n checkProjectAccess,\n checkScopeAccess,\n} from \"@lucern/access-control/access\";\nimport {\n canAudienceClassAccess,\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { listAudienceRegistryRows } from \"@lucern/access-control/audienceRegistry\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { assertSchemaEnumValue } from \"@lucern/contracts/schema-helpers/enumValidation\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport {\n type BeliefLifecycleStatus,\n isPreValidationBeliefStatus,\n promoteBeliefStatusAfterScoring,\n resolveBeliefLifecycleStatus,\n} from \"./beliefLifecycle\";\nimport type { Doc, Id, MutationCtx, QueryCtx } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport { collectConfidencePropagationDispatches } from \"./confidencePropagationDispatch\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport {\n createInheritedContractRecord,\n type VerificationConfidenceTrigger,\n} from \"./epistemicContractHelpers\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { generateGlobalId } from \"./globalId\";\nimport { computeLogicalRole } from \"./logicalRoleInference\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n nodeMatchesWorkspaceReasoningScope,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\n// All IDs now use epistemicNodes exclusively\nexport const insightIdUnion = v.id(\"epistemicNodes\");\nconst DEFAULT_PROJECT_BELIEF_LIMIT = 250;\nexport const MAX_PROJECT_BELIEF_LIMIT = 1000;\nexport const optionalBeliefScopeArgs = optionalScopeArgs;\n\ntype StructuredMutationError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype BeliefScopeArgs = {\n projectId?: string | null;\n topicId?: string | null;\n};\n\ntype EpistemicNodeOpinionDoc = Doc<\"epistemicNodes\"> & {\n opinion_a?: number;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n tupleContradicted?: boolean;\n userId?: string;\n metadata?: Record<string, unknown> | null;\n};\n\ntype EpistemicIndexQuery = {\n eq(field: string, value: unknown): EpistemicIndexQuery;\n gt(field: string, value: unknown): EpistemicIndexQuery;\n lt(field: string, value: unknown): EpistemicIndexQuery;\n field(field: string): string;\n};\n\ntype EpistemicQueryChain<T> = {\n withIndex(\n _name: string,\n callback: (q: EpistemicIndexQuery) => EpistemicIndexQuery,\n ): EpistemicQueryChain<T>;\n order(direction: \"asc\" | \"desc\"): EpistemicQueryChain<T>;\n filter(\n callback: (q: EpistemicIndexQuery) => EpistemicIndexQuery,\n ): EpistemicQueryChain<T>;\n first(): Promise<T | null>;\n collect(): Promise<T[]>;\n take(limit: number): Promise<T[]>;\n};\n\ntype EpistemicBeliefCtx = QueryCtx & {\n db: {\n query<T = unknown>(_table: string): EpistemicQueryChain<T>;\n get<T = unknown>(id: Id<string>): Promise<T | null>;\n };\n scheduler: {\n runAfter(\n _delayMs: number,\n _handler: unknown,\n _args: unknown,\n ): Promise<unknown>;\n };\n};\n\ntype AudienceClass = \"internal\" | \"restricted_external\" | \"public\";\n\nconst DEFAULT_CONFIDENCE_POLICY: ConfidencePolicyConfig = {\n scoringMode: \"after_worktree\",\n tupleContradiction: normalizeTupleContradictionPolicy(),\n};\n\nexport type BeliefConfidenceTrigger =\n | \"initial\"\n | \"evidence_added\"\n | \"evidence_removed\"\n | \"contradiction_detected\"\n | \"contradiction_resolved\"\n | \"propagation\"\n | \"agent_assessment\"\n | \"worktree_outcome\"\n | \"worktree_completed\"\n // SL-specific triggers\n | \"fusion\"\n | \"discount\"\n | \"deduction\"\n | \"backfill_synthetic\"\n | VerificationConfidenceTrigger;\n\nexport function throwStructuredMutationError(args: {\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredMutationError;\n error.status = args.status;\n error.code = args.code;\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nexport function readFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nexport function assertBaseRateInRange(baseRate: number, field = \"baseRate\"): number {\n if (baseRate < 0 || baseRate > 1) {\n throwStructuredMutationError({\n message: `${field} must be within [0, 1].`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Clamp ${field} into the inclusive [0, 1] interval.`,\n details: { field, baseRate },\n });\n }\n return baseRate;\n}\n\nexport function buildBeliefConfidenceRow(args: {\n beliefId: Id<\"epistemicNodes\">;\n belief: number;\n disbelief: number;\n uncertainty: number;\n baseRate: number;\n trigger: BeliefConfidenceTrigger;\n rationale?: string;\n assessedBy: string;\n assessedAt: number;\n slOperator?: SLOperator;\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringContradictionId?: Id<\"contradictions\">;\n triggeringWorktreeId?: string;\n}) {\n return {\n beliefId: args.beliefId,\n confidence: confidenceFromSL(\n args.belief,\n args.disbelief,\n args.uncertainty,\n args.baseRate,\n ),\n belief: args.belief,\n disbelief: args.disbelief,\n uncertainty: args.uncertainty,\n baseRate: args.baseRate,\n slOperator: args.slOperator ?? (\"prior_seed\" as const),\n trigger: args.trigger,\n ...(args.rationale ? { rationale: args.rationale } : {}),\n assessedBy: args.assessedBy,\n assessedAt: args.assessedAt,\n ...(args.triggeringEvidenceId\n ? {\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringEvidenceIds: [String(args.triggeringEvidenceId)],\n }\n : {}),\n ...(args.triggeringContradictionId\n ? {\n triggeringContradictionId: args.triggeringContradictionId,\n }\n : {}),\n ...(args.triggeringWorktreeId\n ? { triggeringWorktreeId: args.triggeringWorktreeId }\n : {}),\n };\n}\n\ntype BeliefStatusResult =\n | { success: true }\n | { success: false; message: \"Evidence node not found\" };\n\nexport function buildBeliefStatusSuccessResult(): BeliefStatusResult {\n return { success: true };\n}\n\nexport function buildBeliefEvidenceNotFoundResult(): BeliefStatusResult {\n const result = {} as Extract<BeliefStatusResult, { success: false }>;\n result.success = false;\n result.message = \"Evidence node not found\";\n return result;\n}\n\nexport function deriveSyntheticBackfillOpinion(\n source: Record<string, unknown>,\n): SLOpinion {\n const belief =\n readFiniteNumber(source.opinion_b) ?? readFiniteNumber(source.belief);\n const disbelief =\n readFiniteNumber(source.opinion_d) ?? readFiniteNumber(source.disbelief);\n const uncertainty =\n readFiniteNumber(source.opinion_u) ?? readFiniteNumber(source.uncertainty);\n const baseRate =\n readFiniteNumber(source.opinion_a) ?? readFiniteNumber(source.baseRate);\n\n if (\n belief !== undefined ||\n disbelief !== undefined ||\n uncertainty !== undefined ||\n baseRate !== undefined\n ) {\n try {\n return readOpinionFromRecord(source);\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to decode legacy belief opinion\",\n {\n error,\n },\n );\n return mkOpinion(0, 0, 1, 0.5);\n }\n }\n\n const confidence = clamp01(readFiniteNumber(source.confidence) ?? 0);\n return mkOpinion(confidence, 1 - confidence, 0, 0.5);\n}\n\nexport function clampBeliefLimit(\n limit: number | undefined,\n fallback = DEFAULT_PROJECT_BELIEF_LIMIT,\n): number {\n if (!Number.isFinite(limit)) {\n return fallback;\n }\n return Math.max(\n 1,\n Math.min(Math.floor(limit as number), MAX_PROJECT_BELIEF_LIMIT),\n );\n}\n\nexport function readTupleContradictedFlag(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nexport function readBeliefOpinionSnapshot(\n node: Doc<\"epistemicNodes\">,\n metadata: Record<string, unknown>,\n): SLOpinion {\n try {\n return readOpinionFromRecord({\n ...metadata,\n opinion_b: (node as any).opinion_b,\n opinion_d: (node as any).opinion_d,\n opinion_u: (node as any).opinion_u,\n opinion_a: (node as any).opinion_a,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to read belief opinion snapshot\",\n {\n error,\n beliefId: node._id,\n },\n );\n return mkOpinion(0, 0, 1, 0.5);\n }\n}\n\nexport function deriveTupleContradictionSeverity(\n node: Doc<\"epistemicNodes\">,\n): \"critical\" | \"significant\" | \"minor\" {\n const metadata = (node.metadata || {}) as Record<string, unknown>;\n const criticality =\n typeof metadata.criticality === \"string\" ? metadata.criticality : undefined;\n\n if (criticality === \"blocking\") {\n return \"critical\";\n }\n if (criticality === \"supporting\") {\n return \"minor\";\n }\n return \"significant\";\n}\n\nexport function formatTupleContradictionDescription(args: {\n opinion: Opinion;\n policy: ConfidencePolicyConfig[\"tupleContradiction\"];\n}): string {\n return `Tuple-space contradiction detected: b=${args.opinion.b.toFixed(2)} > ${args.policy.beliefThreshold.toFixed(2)} and d=${args.opinion.d.toFixed(2)} > ${args.policy.disbeliefThreshold.toFixed(2)}.`;\n}\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nexport function generateContentHash(text: string): string {\n const content = `belief:${text.trim().toLowerCase().replace(/\\s+/g, \" \")}`;\n let hash = 5381;\n for (let i = 0; i < content.length; i++) {\n hash = (hash << 5) + hash + content.charCodeAt(i);\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\nexport function resolveBeliefWorktreeId(\n metadata: Record<string, unknown> | undefined,\n): string | undefined {\n const worktreeId = metadata?.worktreeId;\n if (typeof worktreeId === \"string\" && worktreeId.trim().length > 0) {\n return worktreeId;\n }\n\n const sprintId = metadata?.sprintId;\n return typeof sprintId === \"string\" && sprintId.trim().length > 0\n ? sprintId\n : undefined;\n}\n\n// Map pillar names to valid pillar literals\ntype ValidPillar =\n | \"market\"\n | \"competition\"\n | \"product\"\n | \"team\"\n | \"financials\"\n | \"regulatory\"\n | \"timing\"\n | \"customer\"\n | \"technology\"\n | \"distribution\"\n | \"deal\"\n | \"risks\"\n | \"other\";\n\nexport function normalizePillar(pillar?: string): ValidPillar {\n if (!pillar) {\n return \"other\";\n }\n const lower = pillar.toLowerCase();\n const validPillars: ValidPillar[] = [\n \"market\",\n \"competition\",\n \"product\",\n \"team\",\n \"financials\",\n \"regulatory\",\n \"timing\",\n \"customer\",\n \"technology\",\n \"distribution\",\n \"deal\",\n \"risks\",\n ];\n return (validPillars.find((p) => lower.includes(p)) ||\n \"other\") as ValidPillar;\n}\n\nexport async function markBeliefGraphDirty(\n ctx: EpistemicBeliefCtx,\n scope: { projectId?: string | null; topicId?: string | null },\n): Promise<void> {\n const projectId =\n typeof scope.projectId === \"string\" && scope.projectId.trim().length > 0\n ? scope.projectId\n : undefined;\n const topicId =\n typeof scope.topicId === \"string\" && scope.topicId.trim().length > 0\n ? scope.topicId\n : undefined;\n\n if (!projectId && !topicId) {\n return;\n }\n\n if (projectId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n { projectId },\n );\n }\n if (topicId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleByTopic,\n { topicId },\n );\n }\n\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n topicId ?? projectId!,\n {\n lastActivityAt: Date.now(),\n },\n );\n}\n\nexport async function resolveBeliefScopeOrNull(\n ctx: QueryCtx,\n args: BeliefScopeArgs,\n) {\n if (!args.projectId && !args.topicId) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n projectId: args.projectId ?? undefined,\n topicId: args.topicId ?? undefined,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to resolve belief scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n },\n );\n return null;\n }\n}\n\nexport async function getBeliefNodesForScope(\n ctx: EpistemicBeliefCtx,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n args?: { scanLimit?: number; status?: string },\n) {\n const baseQuery = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: any) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\"),\n );\n const nodes: EpistemicNodeOpinionDoc[] =\n typeof args?.scanLimit === \"number\"\n ? (await baseQuery.order(\"desc\").take(args.scanLimit)) as EpistemicNodeOpinionDoc[]\n : (await baseQuery.collect()) as EpistemicNodeOpinionDoc[];\n const scopedNodes = nodes.filter((node: Doc<\"epistemicNodes\">) =>\n nodeMatchesWorkspaceReasoningScope(node, scope),\n );\n\n if (!args?.status) {\n return scopedNodes;\n }\n\n return scopedNodes.filter((node: EpistemicNodeOpinionDoc) => node.status === args.status);\n}\n\nexport function createBeliefAudienceResolver(\n registryRows: Array<{\n audienceKey?: string | null;\n audienceClass: AudienceClass;\n }>,\n) {\n const audienceClassByKey = new Map<string, AudienceClass>(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ]),\n );\n\n return (\n audienceKey: string | undefined | null,\n fallback: AudienceClass,\n ): AudienceClass => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return (\n audienceClassByKey.get(key) ??\n (classFromAudienceKey(key, fallback) as AudienceClass)\n );\n };\n}\n\nexport function flattenBeliefNode(node: Doc<\"epistemicNodes\">) {\n const meta = (node.metadata || {}) as Record<string, unknown>;\n const worktreeId = resolveBeliefWorktreeId(meta);\n const tupleContradicted =\n readTupleContradictedFlag(\n (node as EpistemicNodeOpinionDoc).tupleContradicted,\n ) ??\n readTupleContradictedFlag(meta.tupleContradicted) ??\n false;\n\n return {\n _id: node._id,\n _epistemicNodeId: node._id,\n _creationTime: node._creationTime,\n belief: node.canonicalText,\n formulation: node.canonicalText,\n projectId: node.projectId,\n topicId: node.topicId,\n userId: (node as EpistemicNodeOpinionDoc).userId || node.createdBy || \"\",\n confidence: (meta.confidence as \"high\" | \"medium\" | \"low\") || \"untested\",\n status: node.status,\n beliefStatus: resolveBeliefStatus(node, meta),\n topic: (meta.topic as string) || (meta.pillar as string) || \"other\",\n pillar: (meta.pillar as string) || (meta.topic as string) || \"\",\n category: (meta.category as string) || \"\",\n subcategory: (meta.subcategory as string) || \"\",\n categoryIcon: (meta.categoryIcon as string) || \"\",\n supportingEvidence: (meta.supportingEvidenceIds as string[]) || [],\n contradictingEvidence: (meta.contradictingEvidenceIds as string[]) || [],\n testingQuestions: (meta.testingQuestionIds as string[]) || [],\n linkedInsights: (meta.linkedInsightIds as string[]) || [],\n createdAt: node.createdAt,\n updatedAt: node.updatedAt || node.createdAt,\n tupleContradicted,\n sprintId: (meta.sprintId as string) || undefined,\n worktreeId,\n sourceBeliefIds: (meta.sourceBeliefIds as string[]) || undefined,\n criticality:\n (meta.criticality as\n | \"critical\"\n | \"supporting\"\n | \"nice_to_have\"\n | \"unanalyzed\"\n | \"blocking\"\n | \"important\") || \"unanalyzed\",\n rationale: (meta.rationale as string) || \"\",\n audienceLabel: node.audienceLabel,\n policyTags: node.policyTags,\n sensitivityTier: node.sensitivityTier,\n exportClass: node.exportClass,\n anonymizationClass: node.anonymizationClass,\n };\n}\n\nexport function resolveBeliefStatus(\n node: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n },\n metadata: Record<string, unknown>,\n): BeliefLifecycleStatus {\n return resolveBeliefLifecycleStatus({\n beliefStatus: node.beliefStatus,\n confidence: node.confidence,\n predictionMeta: node.predictionMeta,\n metadata,\n });\n}\n\nexport async function hasCompletedWorktreeForBelief(\n ctx: EpistemicBeliefCtx,\n beliefNodeId: Id<\"epistemicNodes\">,\n): Promise<boolean> {\n // Check if the belief is linked to a completed worktree via worktreeBeliefCluster\n const clusterMembership = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_belief\", (q: any) => q.eq(\"beliefId\", beliefNodeId))\n .collect();\n for (const membership of clusterMembership) {\n const worktree = await ctx.db.get(membership.worktreeId);\n if (worktree?.status === \"completed\" || worktree?.status === \"merged\") {\n return true;\n }\n }\n return false;\n}\n\nexport async function getActiveConfidencePolicy(\n ctx: EpistemicBeliefCtx,\n): Promise<ConfidencePolicyConfig> {\n try {\n const activeConfig = await ctx.db\n .query(\"logicSprintScoring\")\n .withIndex(\"by_active\", (q: any) => q.eq(\"isActive\", true))\n .first();\n\n return {\n scoringMode:\n activeConfig?.confidencePolicy === \"always\"\n ? \"always\"\n : DEFAULT_CONFIDENCE_POLICY.scoringMode,\n tupleContradiction: normalizeTupleContradictionPolicy(\n activeConfig?.tupleContradictionPolicy as\n | Partial<ConfidencePolicyConfig[\"tupleContradiction\"]>\n | undefined,\n ),\n };\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to load active confidence policy\",\n {\n error,\n },\n );\n // K-tier/component environments do not carry logicSprintScoring.\n return DEFAULT_CONFIDENCE_POLICY;\n }\n}\n\nexport async function requireAuthenticatedUserId(ctx: {\n auth: { getUserIdentity: () => Promise<unknown> };\n}): Promise<string> {\n const userId = await getCurrentUserId(\n ctx as Parameters<typeof getCurrentUserId>[0],\n );\n if (!userId) {\n throwStructuredMutationError({\n message: \"Authentication required.\",\n status: 401,\n code: \"AUTHENTICATION_REQUIRED\",\n invariantCode: \"auth.required\",\n suggestion:\n \"Provide a valid bearer token before invoking belief mutations.\",\n });\n }\n return userId;\n}\n\nexport async function requireProjectWriteAccess(\n ctx: { db: unknown },\n projectId: string,\n userId: string,\n): Promise<void> {\n const hasAccess = await checkProjectAccess(\n ctx as Parameters<typeof checkProjectAccess>[0],\n projectId,\n userId,\n );\n if (!hasAccess) {\n throwStructuredMutationError({\n message: \"Project access required.\",\n status: 403,\n code: \"FORBIDDEN\",\n invariantCode: \"policy.scope_required\",\n suggestion: \"Request write access for the project and retry.\",\n details: { projectId, userId },\n });\n }\n}\n","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 PropagationResult,\n type SLOpinion,\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: SLOpinion,\n damping: number\n): SLOpinion {\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: SLOpinion,\n targetOpinion: SLOpinion,\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: SLOpinion,\n targetOpinion: SLOpinion,\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: SLOpinion,\n targetOpinion: SLOpinion,\n edgeWeight: number,\n edge: PropagationEdgeRecord\n): PropagationResult {\n return applyNegativeSupport(\n sourceOpinion,\n targetOpinion,\n edgeWeight,\n readEdgeMetadata(edge)\n );\n}\n\nexport const propagateNegativeInform = applyNegativeEvidence;\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 mkOpinion,\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 mkOpinion(\n metadata.conditionalA.b,\n metadata.conditionalA.d,\n metadata.conditionalA.u,\n metadata.conditionalA.a\n ),\n mkOpinion(\n metadata.conditionalNotA.b,\n metadata.conditionalNotA.d,\n metadata.conditionalNotA.u,\n metadata.conditionalNotA.a\n ),\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","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 PropagationResult,\n SLOpinion,\n} from \"@lucern/confidence\";\n\nexport type PropagationTraversalDirection = \"outgoing\" | \"incoming\";\n\nexport type PropagationSpecDirection =\n | PropagationTraversalDirection\n | \"bidirectional\";\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: \"none\" | \"damped\" | \"full\";\n damping: number;\n maxHops: number | \"unbounded\";\n operator: (\n sourceOpinion: SLOpinion,\n targetOpinion: SLOpinion,\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 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","import {\n hasProjectedOpinionChanged,\n mkOpinion,\n readOpinionFromRecord,\n type SLOpinion,\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: SLOpinion;\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): SLOpinion {\n const metadata = (node.metadata ?? {}) as Record<string, unknown>;\n\n try {\n return readOpinionFromRecord({\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 } catch {\n return mkOpinion(0, 0, 1, 0.5);\n }\n}\n\nexport async function collectConfidencePropagationDispatches<\n TNodeId extends string = string,\n>(args: {\n sourceNodeId: TNodeId;\n sourceOpinion: SLOpinion;\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, SLOpinion>();\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: SLOpinion;\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 const projectedOpinion = mkOpinion(\n result.opinion.b,\n result.opinion.d,\n result.opinion.u,\n result.opinion.a\n );\n\n opinionCache.set(cacheKey, projectedOpinion);\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: projectedOpinion,\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: projectedOpinion,\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","/** Split confidence operations out of epistemicBeliefs.ts. */\n\nimport { v } from \"convex/values\";\nimport {\n detectTupleContradiction,\n evaluateTupleContradictionTransition,\n confidenceFromSL,\n mkOpinion,\n normalizeTupleContradictionPolicy,\n readOpinionFromRecord,\n type ConfidencePolicyConfig,\n type Opinion,\n type SLOpinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport {\n checkProjectAccess,\n checkScopeAccess,\n} from \"@lucern/access-control/access\";\nimport {\n canAudienceClassAccess,\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { listAudienceRegistryRows } from \"@lucern/access-control/audienceRegistry\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { assertSchemaEnumValue } from \"@lucern/contracts/schema-helpers/enumValidation\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport {\n type BeliefLifecycleStatus,\n isPreValidationBeliefStatus,\n promoteBeliefStatusAfterScoring,\n resolveBeliefLifecycleStatus,\n} from \"./beliefLifecycle\";\nimport type { Doc, Id, MutationCtx } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport { collectConfidencePropagationDispatches } from \"./confidencePropagationDispatch\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport {\n createInheritedContractRecord,\n type VerificationConfidenceTrigger,\n} from \"./epistemicContractHelpers\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { generateGlobalId } from \"./globalId\";\nimport { computeLogicalRole } from \"./logicalRoleInference\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n nodeMatchesWorkspaceReasoningScope,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\nimport {\n buildBeliefConfidenceRow,\n deriveTupleContradictionSeverity,\n formatTupleContradictionDescription,\n getActiveConfidencePolicy,\n hasCompletedWorktreeForBelief,\n readBeliefOpinionSnapshot,\n readTupleContradictedFlag,\n resolveBeliefStatus,\n throwStructuredMutationError,\n requireProjectWriteAccess,\n type BeliefConfidenceTrigger,\n} from \"./epistemicBeliefs.helpers\";\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 appending SL scoring.\",\n details: { nodeId: args.nodeId },\n });\n }\n if (node.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `appendSlScoring 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. appendSlScoring 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 before SL scoring can be appended.\",\n details: { nodeId: args.nodeId },\n });\n }\n await requireProjectWriteAccess(\n ctx,\n node.projectId,\n args.authenticatedUserId,\n );\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 SL scoring.\",\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(currentBeliefStatus, {\n confidence: derivedConfidence,\n predictionMeta,\n metadata: existingMetadata,\n });\n\n let tupleContradictionId: Id<\"contradictions\"> | undefined;\n if (tupleTransition.crossedIntoTupleContradiction) {\n tupleContradictionId = (await ctx.runMutation(\n \"contradictions:create\" as any,\n {\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 },\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 )\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\n/**\n * Returns the pressure direction label for use in the propagation rationale\n * string. The ledger trigger is always \"propagation\" (stage-1 containment,\n * AC.1 adjudication P1). The direction is carried in the rationale only.\n */\nfunction propagationPressureLabel(\n edgeType: string,\n weight: number,\n): \"supportive\" | \"contradictory\" {\n if (edgeType === \"contradicts\" || edgeType === \"refutes\") {\n return \"contradictory\";\n }\n if ((edgeType === \"supports\" || edgeType === \"informs\") && weight < 0) {\n return \"contradictory\";\n }\n return \"supportive\";\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 = mkOpinion(\n args.opinion_b,\n args.opinion_d,\n args.opinion_u,\n 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 const pressureLabel = propagationPressureLabel(dispatch.edgeType, dispatch.weight);\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: \"propagation\",\n rationale: `SL propagation via ${dispatch.edgeType} edge (pressure: ${pressureLabel}): ${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","/** Metric helpers and evidential snapshots used by contract evaluators. */\n\nimport type { Id } from \"./convex\";\nimport {\n buildEvidentialRationale,\n buildComparisonRationale,\n compareMetricValue,\n parseMetricCheckerConfig,\n parseReferenceCheckCounterConfig,\n parseTemporalDeadlineConfig,\n parseMarketIndexComparatorConfig,\n parseEvidentialEvaluatorConfig,\n pickFiniteNumber,\n resolveComparisonResult,\n getEvaluatorInputRecord,\n} from \"./epistemicContractHelpers\";\nimport {\n type ContractDoc,\n type ContractReadCtx,\n type ContradictionStatusCounts,\n type EvidenceEdgeDoc,\n type EvidenceFreshness,\n type EvidenceNodeDoc,\n type EvidentialAction,\n type EvidentialEvaluatorConfig,\n type EvidentialMetric,\n type EvidentialMetricSnapshot,\n type EpistemicEvaluator,\n type EpistemicEvaluatorContext,\n type EpistemicEvaluatorResult,\n type MarketIndexComparatorConfig,\n type MetricCheckerEvaluatorConfig,\n type ReferenceCheckCounterConfig,\n type TemporalDeadlineEvaluatorConfig,\n} from \"./epistemicContracts.types\";\n\nconst ACTIVE_CONTRADICTION_STATUSES = new Set([\n \"unresolved\",\n \"investigating\",\n \"accepted_as_permanent\",\n]);\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(edges.map((edge) => ctx.db.get(edge.fromNodeId)));\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\nexport async 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\nexport async 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\nexport async 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\nexport async 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(args.ctx, args.beliefNodeId);\n return {\n metric: args.metric,\n value: count,\n data: { evidenceCount: count },\n };\n }\n case \"contradiction_status\": {\n const counts = await computeContradictionCounts(args.ctx, args.beliefNodeId);\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(args.ctx, args.beliefNodeId);\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\nexport async function evaluateBuiltInEvidentialContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseEvidentialEvaluatorConfig(args.contract.condition.evaluatorConfig);\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 ?? \"append_sl_scoring\",\n actionParams: config.actionParams,\n },\n };\n}\n\nexport async 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(args.contract.direction, comparisonSatisfied);\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\nexport async function evaluateReferenceCheckCounterContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseReferenceCheckCounterConfig(args.contract.condition.evaluatorConfig);\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(args.contract.direction, comparisonSatisfied);\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\nexport async 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(args.contract.condition.evaluatorConfig);\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\nexport async function evaluateMarketIndexComparatorContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseMarketIndexComparatorConfig(args.contract.condition.evaluatorConfig);\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, [\"benchmarkValue\", \"comparisonValue\", \"rightValue\"]) ??\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(args.contract.direction, comparisonSatisfied);\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\nexport const METRIC_COMPARATOR_EVALUATOR_NAMES = {\n evidential: \"evidential\",\n evidentialAliases: new Set([\"evidential\", \"built_in_evidential\", \"builtin_evidential\"]),\n metricChecker: \"metric_checker\",\n referenceCheckCounter: \"reference_check_counter\",\n temporalDeadline: \"temporal_deadline\",\n marketIndexComparator: \"market_index_comparator\",\n};\n","/** Shared evaluator helpers and result-normalization utilities. */\n\nimport type {\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n} from \"../epistemicContractHelpers\";\nimport { debugGraphPrimitiveFallback } from \"../debug\";\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(\n value: unknown,\n): 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 (error) {\n debugGraphPrimitiveFallback(\n \"[evaluators/shared] Failed to parse JSON candidate\",\n {\n error,\n valueType: typeof value,\n },\n );\n return null;\n }\n}\n\nexport function patternMatchesPath(filePath: string, pattern: string): 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","/** Evaluator registry and contract execution logic for epistemic contracts. */\n\nimport type { Id, MutationCtx } from \"./convex\";\nimport { applyBeliefConfidenceChange } from \"./epistemicBeliefs\";\nimport {\n deriveContractModulationPlan,\n deriveContractStatus,\n} from \"./epistemicContractHelpers\";\nimport {\n evaluateBuiltInEvidentialContract,\n evaluateMarketIndexComparatorContract,\n evaluateMetricCheckerContract,\n evaluateReferenceCheckCounterContract,\n evaluateTemporalDeadlineContract,\n METRIC_COMPARATOR_EVALUATOR_NAMES,\n} from \"./epistemicContracts.metrics\";\nimport {\n type BeliefNodeDoc,\n type ContractDoc,\n type ContractEvaluationExecution,\n type EpistemicEvaluator,\n type EpistemicEvaluatorResult,\n type TriggerBatchResult,\n} from \"./epistemicContracts.types\";\nimport {\n ENGINEERING_EPISTEMIC_EVALUATORS,\n} from \"./evaluators\";\n\nconst evaluatorRegistry = new Map<string, EpistemicEvaluator>();\nconst BUILT_IN_EVIDENTIAL_ALIASES = METRIC_COMPARATOR_EVALUATOR_NAMES.evidentialAliases;\nconst BUILT_IN_METRIC_CHECKER = METRIC_COMPARATOR_EVALUATOR_NAMES.metricChecker;\nconst BUILT_IN_REFERENCE_CHECK_COUNTER =\n METRIC_COMPARATOR_EVALUATOR_NAMES.referenceCheckCounter;\nconst BUILT_IN_TEMPORAL_DEADLINE = METRIC_COMPARATOR_EVALUATOR_NAMES.temporalDeadline;\nconst BUILT_IN_MARKET_INDEX_COMPARATOR =\n METRIC_COMPARATOR_EVALUATOR_NAMES.marketIndexComparator;\nconst MAX_CONTRACT_EVALUATION_BATCH_SIZE = 50;\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\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 [BUILT_IN_REFERENCE_CHECK_COUNTER, evaluateReferenceCheckCounterContract],\n [BUILT_IN_TEMPORAL_DEADLINE, evaluateTemporalDeadlineContract],\n [BUILT_IN_MARKET_INDEX_COMPARATOR, evaluateMarketIndexComparatorContract],\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\nfunction normalizeTrigger(trigger?: string): string {\n if (trigger === \"evidence_added\") {\n return \"evidence_added\";\n }\n if (trigger === \"periodic\") {\n return \"periodic\";\n }\n if (trigger === \"manual\") {\n return \"manual\";\n }\n return \"event_driven\";\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\nexport async 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(\"contractEvaluations\", {\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 const nextStatus = deriveContractStatus(evaluation.result, args.contract.status);\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\nexport async 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: normalizeTrigger(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: normalizeTrigger(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: normalizeTrigger(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: normalizeTrigger(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: normalizeTrigger(args.trigger),\n results,\n };\n}\n\nexport async 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","/** Convex queries and mutations for epistemic contract lifecycle management. */\n\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 {\n computeContradictionCounts,\n computeDependentBeliefCount,\n computeEvidenceCountMetric,\n computeEvidenceFreshness,\n} from \"./epistemicContracts.metrics\";\nimport {\n createInheritedContractRecord,\n} from \"./epistemicContractHelpers\";\nimport { type BeliefNodeDoc, type ContractDoc, type ContractEvaluationDoc } from \"./epistemicContracts.types\";\nimport {\n ENGINEERING_EVALUATOR_NAMES,\n getEngineeringEpistemicEvaluator,\n} from \"./evaluators\";\nimport {\n evaluateContractsForTriggerBatch,\n executeContractEvaluation,\n loadContractsForBelief,\n} from \"./epistemicContracts.evaluators\";\nimport { generateGlobalId } from \"./globalId\";\nimport type { MutationCtx, QueryCtx } from \"./convex\";\nimport { internalMutation, mutation, query } from \"./convex\";\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\ntype ContractStatusRow = Omit<ContractDoc, \"latestEvaluation\"> & {\n latestEvaluation: ContractEvaluationDoc | null;\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(args.beliefNodeId)) 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(args.beliefNodeId)) 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(args.beliefNodeId)) 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(args.beliefNodeId)) 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(args.beliefNodeId)) 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.insert(\"epistemicContracts\", 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(contract.beliefNodeId)) 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(args.beliefNodeId)) 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(\n trigger === \"manual\"\n ? \"manual\"\n : trigger === \"evidence_added\"\n ? \"evidence_added\"\n : trigger\n );\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(args.beliefNodeId)) 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(args.beliefNodeId)) 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(args.beliefNodeId)) 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((contract) => contract.status === args.status);\n }\n\n const rows: ContractStatusRow[] = 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) => q.eq(\"topicId\", args.topicId))\n .order(\"desc\")\n .take(recentEvaluationLimit)) as Promise<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\").length,\n violated: contracts.filter((contract) => contract.status === \"violated\").length,\n expired: contracts.filter((contract) => contract.status === \"expired\").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":["../src/beliefLifecycle.ts","../src/convex.ts","../src/debug.ts","../src/topicScope.ts","../src/workspaceIsolation.ts","../src/epistemicBeliefs.helpers.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","../src/confidencePropagationDispatch.ts","../src/epistemicBeliefs.confidence.ts","../src/epistemicContracts.metrics.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.evaluators.ts","../src/epistemicContracts.handlers.ts"],"names":["normalizeScopeValue","v","mkOpinion","project","readOpinionFromRecord","confidenceFromSL","detectTupleContradiction","evaluateTupleContradictionTransition","parseConfig","parseDiagnostics","getMatchedDiagnostics","BUILT_IN_EVIDENTIAL_ALIASES","BUILT_IN_METRIC_CHECKER","BUILT_IN_REFERENCE_CHECK_COUNTER","BUILT_IN_TEMPORAL_DEADLINE","BUILT_IN_MARKET_INDEX_COMPARATOR","resolveSchedulesForTrigger","getCurrentUserId","checkProjectAccess","permissiveReturn"],"mappings":"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","file":"epistemicContracts.js","sourcesContent":["/**\n * Belief lifecycle helpers shared across Convex modules.\n *\n * Canonical lifecycle:\n * assumption -> hypothesis -> active -> resolved_true/resolved_false\n * \\-> superseded\n */\n\nexport type BeliefLifecycleStatus =\n | \"assumption\"\n | \"hypothesis\"\n | \"active\"\n | \"superseded\"\n | \"resolved_true\"\n | \"resolved_false\";\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 \"active\",\n \"superseded\",\n \"resolved_true\",\n \"resolved_false\",\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 normalizeLegacyBeliefStatus(\n value: unknown\n): BeliefLifecycleStatus | null {\n if (isBeliefLifecycleStatus(value)) {\n return value;\n }\n if (value === \"belief\" || value === \"established\" || value === \"emerging\") {\n return \"active\";\n }\n if (value === \"fact\" || value === \"confirmed\") {\n return \"resolved_true\";\n }\n if (value === \"disconfirmed\" || value === \"expired\") {\n return \"resolved_false\";\n }\n if (value === \"deprecated\") {\n return \"superseded\";\n }\n return null;\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\nfunction resolvedPredictionStatus(\n predictionMeta: unknown\n): BeliefLifecycleStatus | null {\n if (!predictionMeta || typeof predictionMeta !== \"object\") {\n return null;\n }\n const outcome = (predictionMeta as { outcome?: unknown }).outcome;\n if (outcome === \"confirmed\") {\n return \"resolved_true\";\n }\n if (outcome === \"disconfirmed\" || outcome === \"expired\") {\n return \"resolved_false\";\n }\n return null;\n}\n\nfunction shouldTreatBeliefAsResolved(opts: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): BeliefLifecycleStatus | null {\n if (isResolvedByConfidence(opts.confidence)) {\n const normalized = normalizeBeliefConfidence(opts.confidence);\n return normalized === 0 ? \"resolved_false\" : \"resolved_true\";\n }\n const directPredictionStatus = resolvedPredictionStatus(opts.predictionMeta);\n if (directPredictionStatus) {\n return directPredictionStatus;\n }\n const metadataPredictionStatus = resolvedPredictionStatus(\n getPredictionMetaFromMetadata(opts.metadata)\n );\n if (metadataPredictionStatus) {\n return metadataPredictionStatus;\n }\n return null;\n}\n\nexport function resolveBeliefLifecycleStatus(opts: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): BeliefLifecycleStatus {\n const resolvedStatus = shouldTreatBeliefAsResolved(opts);\n if (resolvedStatus) {\n return resolvedStatus;\n }\n\n const direct = opts.beliefStatus;\n const normalizedDirect = normalizeLegacyBeliefStatus(direct);\n if (normalizedDirect) {\n // If the belief has been scored (has numeric credence) but stored status\n // is still pre-validation, promote to active. Evidence, not user intent,\n // makes a hypothesis active.\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (\n normalized !== null &&\n isPreValidationBeliefStatus(normalizedDirect)\n ) {\n return \"active\";\n }\n return normalizedDirect;\n }\n\n const metaStatus = opts.metadata?.beliefStatus;\n const normalizedMetaStatus = normalizeLegacyBeliefStatus(metaStatus);\n if (normalizedMetaStatus) {\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (\n normalized !== null &&\n isPreValidationBeliefStatus(normalizedMetaStatus)\n ) {\n return \"active\";\n }\n return normalizedMetaStatus;\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 === \"active\" || status === \"resolved_true\";\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 const resolvedStatus = shouldTreatBeliefAsResolved({ ...opts });\n if (resolvedStatus) {\n return resolvedStatus;\n }\n if (isPreValidationBeliefStatus(status)) {\n return \"active\";\n }\n return status;\n}\n\nexport function promoteBeliefStatusAfterEvidence(\n status: BeliefLifecycleStatus\n): BeliefLifecycleStatus {\n return isPreValidationBeliefStatus(status) ? \"active\" : status;\n}\n","import {\n actionGeneric,\n anyApi,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\nexport const api = anyApi as any;\nexport const components = componentsGeneric() as any;\nexport const internal = anyApi as any;\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> = any;\nexport type DataModel = any;\ntype IndexRangeBuilder = {\n field(fieldName: string): string;\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n gt(fieldName: string, value: unknown): IndexRangeBuilder;\n gte(fieldName: string, value: unknown): IndexRangeBuilder;\n lt(fieldName: string, value: unknown): IndexRangeBuilder;\n lte(fieldName: string, value: unknown): IndexRangeBuilder;\n};\ntype FilterBuilder = {\n eq(left: unknown, right: unknown): unknown;\n neq(left: unknown, right: unknown): unknown;\n gt(left: unknown, right: unknown): unknown;\n gte(left: unknown, right: unknown): unknown;\n lt(left: unknown, right: unknown): unknown;\n lte(left: unknown, right: unknown): unknown;\n and(...clauses: unknown[]): unknown;\n or(...clauses: unknown[]): unknown;\n field(fieldName: string): unknown;\n};\ntype QueryInitializer<TableName extends TableNames> = {\n withIndex(\n indexName: string,\n range?: (q: any) => unknown\n ): QueryInitializer<TableName>;\n filter(predicate: (q: any) => unknown): QueryInitializer<TableName>;\n order(direction: \"asc\" | \"desc\"): QueryInitializer<TableName>;\n collect(): Promise<Doc<TableName>[]>;\n take(limit: number): Promise<Doc<TableName>[]>;\n first(): Promise<Doc<TableName> | null>;\n unique(): Promise<Doc<TableName> | null>;\n};\nexport type DatabaseReader = {\n get<TableName extends TableNames>(\n id: Id<TableName>\n ): Promise<Doc<TableName> | null>;\n query<TableName extends TableNames>(\n tableName: TableName\n ): QueryInitializer<TableName>;\n normalizeId?<TableName extends TableNames>(\n tableName: TableName,\n id: string\n ): Id<TableName> | null;\n};\nexport type DatabaseWriter = DatabaseReader & {\n insert<TableName extends TableNames>(\n tableName: TableName,\n value: Record<string, unknown>\n ): Promise<Id<TableName>>;\n patch<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n replace<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n delete<TableName extends TableNames>(id: Id<TableName>): Promise<void>;\n};\ntype Scheduler = {\n runAfter(delayMs: number, functionReference: unknown, args?: unknown): Promise<void>;\n};\ntype AuthReader = {\n getUserIdentity(): Promise<unknown>;\n};\ntype RuntimeInvoker = {\n runQuery(functionReference: unknown, args?: unknown): Promise<any>;\n runMutation(functionReference: unknown, args?: unknown): Promise<any>;\n runAction(functionReference: unknown, args?: unknown): Promise<any>;\n};\nexport type QueryCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseReader;\n scheduler: Scheduler;\n};\nexport type MutationCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseWriter;\n scheduler: Scheduler;\n};\nexport type ActionCtx = RuntimeInvoker & {\n auth: AuthReader;\n scheduler: Scheduler;\n};\n\ntype ConvexFunctionBuilder<Ctx> = <\n Definition extends { handler?: (ctx: Ctx, args: any) => any },\n>(\n definition: Definition\n) => any;\n\nexport const action = actionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const httpAction =\n httpActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalAction =\n internalActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalMutation =\n internalMutationGeneric as unknown as ConvexFunctionBuilder<MutationCtx>;\nexport const internalQuery =\n internalQueryGeneric as unknown as ConvexFunctionBuilder<QueryCtx>;\nexport const mutation =\n mutationGeneric as unknown as ConvexFunctionBuilder<MutationCtx>;\nexport const query = queryGeneric as unknown as ConvexFunctionBuilder<QueryCtx>;\n","type GraphPrimitiveDebugEnvironment = {\n process?: {\n env?: Record<string, string | undefined>;\n };\n};\n\nfunction isGraphPrimitiveDebugEnabled(): boolean {\n const env = (globalThis as GraphPrimitiveDebugEnvironment).process?.env;\n return (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG === \"1\" ||\n env?.LUCERN_GRAPH_DEBUG === \"1\"\n );\n}\n\nexport function formatGraphPrimitiveError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error === null) {\n return \"null\";\n }\n if (error === undefined) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(error);\n } catch {\n return Object.prototype.toString.call(error);\n }\n}\n\nexport function debugGraphPrimitiveFallback(\n message: string,\n context?: Record<string, unknown>\n): void {\n if (!isGraphPrimitiveDebugEnabled()) {\n return;\n }\n console.debug(message, context ?? {});\n}\n","/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport { api as appApi } from \"./convex\";\nimport type { Id } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectScope = {\n topicId: Id<\"topics\">;\n projectId?: string;\n tenantId?: string;\n workspaceId?: string;\n source:\n | \"topic\"\n | \"project_mapped_topic\"\n | \"topic_inferred\"\n | \"topic_node\";\n};\n\n/**\n * RR.5 (legacy topics-table retirement) — graph-primitives mirror of the\n * kernel's epistemicNodes-first topic-scope fallback. Kept in lockstep with\n * `packages/reasoning-kernel/src/adapters/lib/topicScope.ts`\n * (`tests/unit/convex/topic-scope-fallbacks.test.ts` asserts parity).\n *\n * Resolves a topic that exists only as `epistemicNodes(nodeType=\"topic\")` —\n * the write-of-record — when no legacy `topics` row backs the ref, returning the\n * node's `topicId` self-key so scoped beliefs/evidence/questions stay reachable.\n * See the kernel module for the full silent-empty-result rationale.\n */\ntype TopicNodeScopeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n globalId?: string;\n nodeType?: string;\n topicId?: string;\n metadata?: Record<string, unknown>;\n};\n\nasync function resolveTopicNodeScopeOrNull(\n ctx: any,\n ref: string,\n): Promise<TopicProjectScope | null> {\n if (!ctx?.db || typeof ctx.db.query !== \"function\") {\n return null;\n }\n\n let node: TopicNodeScopeDoc | null = null;\n\n // 1. The ref IS the topic node's UUIDv7 globalId.\n try {\n const byGlobalId = (await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q: any) => q.eq(\"globalId\", ref))\n .first()) as TopicNodeScopeDoc | null;\n if (byGlobalId && byGlobalId.nodeType === \"topic\") {\n node = byGlobalId;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] topic-node scope lookup by globalId failed\",\n { error, ref },\n );\n }\n\n if (!node) {\n return null;\n }\n\n const scopeKey =\n normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);\n if (!scopeKey) {\n return null;\n }\n\n return {\n topicId: scopeKey as Id<\"topics\">,\n projectId: asMappedProjectId(node as unknown as TopicDoc),\n source: \"topic_node\",\n };\n}\n\ntype MaterializedTopicNodeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n};\n\nfunction asMappedProjectId(\n topic: TopicDoc | null | undefined,\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(topic[LEGACY_SCOPE_FIELD]);\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = (topic.metadata || {}) as Record<string, unknown>;\n const candidate =\n (metadata[LEGACY_SCOPE_FIELD] as string | undefined) ||\n (metadata.legacyProjectId as string | undefined) ||\n (metadata.projectId as string | undefined) ||\n (metadata.scopeProjectId as string | undefined);\n return candidate ? (candidate as string) : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(\n ctx: any,\n scopeId: string,\n): Promise<TopicDoc[]> {\n try {\n return (await ctx.db\n .query(\"topics\")\n .withIndex(\"by_graph_scope_project\", (q: any) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId),\n )\n .collect()) as TopicDoc[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve scope alias via index\",\n {\n error,\n scopeId,\n },\n );\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await ctx.db.query(\"topics\").collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: any,\n topicId: string,\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get as any, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by host query\",\n {\n error,\n topicId,\n },\n );\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: any,\n legacyScopeId: string,\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId as any, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by legacy scope\",\n {\n error,\n legacyScopeId,\n },\n );\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined,\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: any,\n topic: TopicDoc,\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) break;\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) break;\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: any,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string },\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n // Try direct lookup, fall back to the legacy mapped-project bridge\n let topic: TopicDoc | null = null;\n try {\n topic = (await ctx.db.get(\n args.topicId as Id<\"topics\">,\n )) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to load topic by direct id\",\n {\n error,\n topicId: args.topicId,\n },\n );\n // Not a valid topics table ID\n }\n if (!topic) {\n topic = await tryResolveHostTopicById(ctx, String(args.topicId));\n }\n if (!topic) {\n // Try as legacy projectId / globalId via the mapped-project bridge.\n topic =\n pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, String(args.topicId)),\n ) ?? null;\n }\n if (!topic) {\n // RR.5: no legacy topics row — resolve the canonical topic node store\n // before throwing (silent-empty-result fix).\n const nodeScope = await resolveTopicNodeScopeOrNull(\n ctx,\n String(args.topicId),\n );\n if (nodeScope) {\n return nodeScope;\n }\n throw new Error(`Topic not found: ${String(args.topicId)}`);\n }\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n if (mapped) {\n return {\n topicId: topic._id,\n projectId: mapped,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n return {\n topicId: topic._id,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n\n if (args.projectId) {\n let directTopic: TopicDoc | null = null;\n try {\n directTopic = (await ctx.db.get(\n args.projectId as Id<\"topics\">,\n )) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to load direct project topic\",\n {\n error,\n projectId: args.projectId,\n },\n );\n // Not a valid topics table ID, continue to legacy graph-scope lookup.\n }\n\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n directTopic = await tryResolveHostTopicByLegacyScope(ctx, args.projectId);\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n const topics = await findTopicsByScopeAlias(ctx, args.projectId);\n const primary = pickPrimaryTopic(topics);\n if (primary) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, primary);\n return {\n topicId: primary._id,\n projectId: args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"project_mapped_topic\",\n };\n }\n // RR.5: try the canonical topic node store before failing.\n const nodeScope = await resolveTopicNodeScopeOrNull(\n ctx,\n String(args.projectId),\n );\n if (nodeScope) {\n return {\n ...nodeScope,\n projectId: nodeScope.projectId ?? String(args.projectId),\n };\n }\n\n throw new Error(\n `Legacy project scope ${String(args.projectId)} has no mapped topic.`,\n );\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\",\n );\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","import {\n getLayerForNodeType,\n isNodeType,\n} from \"@lucern/contracts/schema-helpers/spine/tables/epistemicNodes\";\nimport {\n resolveTopicProjectScope,\n type TopicProjectScope,\n} from \"./topicScope\";\n\ntype StructuredInvariantError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype ScopeLike = {\n tenantId?: unknown;\n workspaceId?: unknown;\n epistemicLayer?: unknown;\n nodeType?: unknown;\n topicId?: unknown;\n projectId?: unknown;\n publicationStatus?: unknown;\n};\n\nexport type RuntimePackMutationContext = {\n toolName?: string;\n packKey?: string;\n packInstallScope?: \"tenant\" | \"workspace\";\n};\n\nexport function normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction throwWorkspaceIsolationError(args: {\n message: string;\n invariantCode: string;\n suggestion: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredInvariantError;\n error.status = 409;\n error.code = \"INVARIANT_VIOLATION\";\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nexport function assertWorkspaceScopedEpistemicNodeScope(args: {\n scope: TopicProjectScope;\n nodeType: string;\n mutationName: string;\n}): void {\n const layer = isNodeType(args.nodeType)\n ? getLayerForNodeType(args.nodeType)\n : undefined;\n if (layer === \"ontological\") {\n return;\n }\n\n const workspaceId = normalizeScopeValue(args.scope.workspaceId);\n if (workspaceId) {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n \"Workspace-scoped reasoning isolation requires workspaceId on non-ontological node creation.\",\n invariantCode: \"workspace.scope_required_for_epistemic_nodes\",\n suggestion:\n \"Resolve the topic/project scope through a workspace-bound topic before creating epistemic nodes.\",\n details: {\n mutationName: args.mutationName,\n nodeType: args.nodeType,\n topicId: args.scope.topicId,\n projectId: args.scope.projectId,\n },\n });\n}\n\nexport function nodeMatchesWorkspaceReasoningScope(\n node: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!node) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const nodeTenantId = normalizeScopeValue(node.tenantId);\n const nodeWorkspaceId = normalizeScopeValue(node.workspaceId);\n const epistemicLayer =\n typeof node.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n\n if (\n scopeTenantId &&\n nodeTenantId &&\n scopeTenantId !== nodeTenantId\n ) {\n return false;\n }\n\n // Ontological entities are tenant-global (no workspace required)\n if (epistemicLayer === \"ontological\" && nodeWorkspaceId === undefined) {\n return true;\n }\n\n // Published nodes are visible at tenant scope — the microservice API surface.\n // The node stays in its workspace, but tenant-scope queries can see it.\n if (!scopeWorkspaceId && node.publicationStatus === \"published\") {\n return true;\n }\n\n if (!scopeWorkspaceId) {\n return nodeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === nodeWorkspaceId;\n}\n\nexport function edgeMatchesWorkspaceReasoningScope(\n edge: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!edge) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const edgeTenantId = normalizeScopeValue(edge.tenantId);\n const edgeWorkspaceId = normalizeScopeValue(edge.workspaceId);\n\n if (\n scopeTenantId &&\n edgeTenantId &&\n scopeTenantId !== edgeTenantId\n ) {\n return false;\n }\n\n if (!scopeWorkspaceId) {\n return edgeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === edgeWorkspaceId;\n}\n\nexport async function resolveNodeScopeForWorkspaceIsolation(\n ctx: any,\n node: ScopeLike | null | undefined\n): Promise<{\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n nodeType?: string;\n}> {\n const epistemicLayer =\n typeof node?.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n const resolved = {\n tenantId: normalizeScopeValue(node?.tenantId),\n workspaceId: normalizeScopeValue(node?.workspaceId),\n epistemicLayer,\n nodeType: typeof node?.nodeType === \"string\" ? node.nodeType : undefined,\n };\n\n if (!node) {\n return resolved;\n }\n\n if (resolved.epistemicLayer === \"ontological\") {\n return resolved;\n }\n\n if (resolved.tenantId || resolved.workspaceId) {\n return resolved;\n }\n\n if (node.topicId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n topicId: node.topicId as any,\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n if (node.projectId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n projectId: String(node.projectId),\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n return resolved;\n}\n\nexport function resolveRuntimePackMutationContext(args: {\n runtimeToolName?: string;\n runtimePackKey?: string;\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n}): RuntimePackMutationContext | undefined {\n if (\n !args.runtimeToolName &&\n !args.runtimePackKey &&\n !args.runtimePackInstallScope\n ) {\n return;\n }\n\n return {\n toolName: args.runtimeToolName,\n packKey: args.runtimePackKey,\n packInstallScope: args.runtimePackInstallScope,\n };\n}\n\nexport function assertTenantPackWorkspaceMutationAllowed(args: {\n runtime?: RuntimePackMutationContext;\n target: ScopeLike;\n mutationName: string;\n}): void {\n if (\n !args.runtime?.packKey ||\n args.runtime.packInstallScope !== \"tenant\"\n ) {\n return;\n }\n\n const targetWorkspaceId = normalizeScopeValue(args.target.workspaceId);\n const targetLayer =\n typeof args.target.epistemicLayer === \"string\"\n ? args.target.epistemicLayer\n : undefined;\n\n if (!targetWorkspaceId || targetLayer === \"ontological\") {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n `Tenant-scoped pack \"${args.runtime.packKey}\" cannot mutate workspace-scoped reasoning state.`,\n invariantCode: \"workspace.tenant_pack_reasoning_write_forbidden\",\n suggestion:\n \"Use a workspace-scoped pack for workspace-local graph mutations, or route the change through tenant-global canonical entity flows.\",\n details: {\n mutationName: args.mutationName,\n toolName: args.runtime.toolName,\n packKey: args.runtime.packKey,\n targetWorkspaceId,\n targetNodeType: args.target.nodeType,\n targetLayer,\n },\n });\n}\n","/**\n * Epistemic 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 { ConvexError } from \"convex/values\";\nimport {\n detectTupleContradiction,\n evaluateTupleContradictionTransition,\n confidenceFromSL,\n mkOpinion,\n normalizeTupleContradictionPolicy,\n readOpinionFromRecord,\n type ConfidencePolicyConfig,\n type Opinion,\n type SLOpinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport {\n checkProjectAccess,\n checkScopeAccess,\n} from \"@lucern/access-control/access\";\nimport {\n canAudienceClassAccess,\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { listAudienceRegistryRows } from \"@lucern/access-control/audienceRegistry\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { assertSchemaEnumValue } from \"@lucern/contracts/schema-helpers/enumValidation\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport {\n type BeliefLifecycleStatus,\n isPreValidationBeliefStatus,\n promoteBeliefStatusAfterScoring,\n resolveBeliefLifecycleStatus,\n} from \"./beliefLifecycle\";\nimport type { Doc, Id, MutationCtx, QueryCtx } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport { collectConfidencePropagationDispatches } from \"./confidencePropagationDispatch\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport {\n createInheritedContractRecord,\n type VerificationConfidenceTrigger,\n} from \"./epistemicContractHelpers\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { generateGlobalId } from \"./globalId\";\nimport { computeLogicalRole } from \"./logicalRoleInference\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n nodeMatchesWorkspaceReasoningScope,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\n// All IDs now use epistemicNodes exclusively\nexport const insightIdUnion = v.id(\"epistemicNodes\");\nconst DEFAULT_PROJECT_BELIEF_LIMIT = 250;\nexport const MAX_PROJECT_BELIEF_LIMIT = 1000;\nexport const optionalBeliefScopeArgs = optionalScopeArgs;\n\ntype StructuredMutationError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\n/**\n * Boundary-safe payload carried inside a {@link ConvexError}. Mirrors the kernel\n * copy in packages/reasoning-kernel/src/adapters/beliefs.shared.ts so structured\n * refusals from the graph-primitives module survive the Convex client boundary\n * (only `ConvexError.data` is preserved across serialization).\n */\nexport type StructuredMutationErrorData = {\n structuredMutationError: true;\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype BeliefScopeArgs = {\n projectId?: string | null;\n topicId?: string | null;\n};\n\ntype EpistemicNodeOpinionDoc = Doc<\"epistemicNodes\"> & {\n opinion_a?: number;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n tupleContradicted?: boolean;\n userId?: string;\n metadata?: Record<string, unknown> | null;\n};\n\ntype EpistemicIndexQuery = {\n eq(field: string, value: unknown): EpistemicIndexQuery;\n gt(field: string, value: unknown): EpistemicIndexQuery;\n lt(field: string, value: unknown): EpistemicIndexQuery;\n field(field: string): string;\n};\n\ntype EpistemicQueryChain<T> = {\n withIndex(\n _name: string,\n callback: (q: EpistemicIndexQuery) => EpistemicIndexQuery,\n ): EpistemicQueryChain<T>;\n order(direction: \"asc\" | \"desc\"): EpistemicQueryChain<T>;\n filter(\n callback: (q: EpistemicIndexQuery) => EpistemicIndexQuery,\n ): EpistemicQueryChain<T>;\n first(): Promise<T | null>;\n collect(): Promise<T[]>;\n take(limit: number): Promise<T[]>;\n};\n\ntype EpistemicBeliefCtx = QueryCtx & {\n db: {\n query<T = unknown>(_table: string): EpistemicQueryChain<T>;\n get<T = unknown>(id: Id<string>): Promise<T | null>;\n };\n scheduler: {\n runAfter(\n _delayMs: number,\n _handler: unknown,\n _args: unknown,\n ): Promise<unknown>;\n };\n};\n\ntype AudienceClass = \"internal\" | \"restricted_external\" | \"public\";\n\nconst DEFAULT_CONFIDENCE_POLICY: ConfidencePolicyConfig = {\n scoringMode: \"after_worktree\",\n tupleContradiction: normalizeTupleContradictionPolicy(),\n};\n\nexport type BeliefConfidenceTrigger =\n | \"initial\"\n | \"evidence_added\"\n | \"evidence_removed\"\n | \"contradiction_detected\"\n | \"contradiction_resolved\"\n | \"propagation\"\n | \"agent_assessment\"\n | \"worktree_outcome\"\n | \"worktree_completed\"\n // SL-specific triggers\n | \"fusion\"\n | \"discount\"\n | \"deduction\"\n | \"backfill_synthetic\"\n | VerificationConfidenceTrigger;\n\nexport function throwStructuredMutationError(args: {\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n}): never {\n // FR.7 (parity with kernel beliefs.shared.ts): throw a ConvexError carrying\n // the structured payload in `.data` so the gateway can reconstruct the real\n // HTTP status/code instead of collapsing the refusal into a retryable 500.\n // The legacy `.status`/`.code` props are retained for in-process tests.\n const data: StructuredMutationErrorData = {\n structuredMutationError: true,\n message: args.message,\n status: args.status,\n code: args.code,\n invariantCode: args.invariantCode,\n suggestion: args.suggestion,\n details: args.details,\n };\n const error = new ConvexError(\n data as unknown as string,\n ) as unknown as ConvexError<string> & Partial<StructuredMutationError>;\n error.status = args.status;\n error.code = args.code;\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nexport function readFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nexport function assertBaseRateInRange(baseRate: number, field = \"baseRate\"): number {\n if (baseRate < 0 || baseRate > 1) {\n throwStructuredMutationError({\n message: `${field} must be within [0, 1].`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Clamp ${field} into the inclusive [0, 1] interval.`,\n details: { field, baseRate },\n });\n }\n return baseRate;\n}\n\nexport function buildBeliefConfidenceRow(args: {\n beliefId: Id<\"epistemicNodes\">;\n belief: number;\n disbelief: number;\n uncertainty: number;\n baseRate: number;\n trigger: BeliefConfidenceTrigger;\n rationale?: string;\n assessedBy: string;\n assessedAt: number;\n slOperator?: SLOperator;\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringContradictionId?: Id<\"contradictions\">;\n triggeringWorktreeId?: string;\n}) {\n return {\n beliefId: args.beliefId,\n confidence: confidenceFromSL(\n args.belief,\n args.disbelief,\n args.uncertainty,\n args.baseRate,\n ),\n belief: args.belief,\n disbelief: args.disbelief,\n uncertainty: args.uncertainty,\n baseRate: args.baseRate,\n slOperator: args.slOperator ?? (\"prior_seed\" as const),\n trigger: args.trigger,\n ...(args.rationale ? { rationale: args.rationale } : {}),\n assessedBy: args.assessedBy,\n assessedAt: args.assessedAt,\n ...(args.triggeringEvidenceId\n ? {\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringEvidenceIds: [String(args.triggeringEvidenceId)],\n }\n : {}),\n ...(args.triggeringContradictionId\n ? {\n triggeringContradictionId: args.triggeringContradictionId,\n }\n : {}),\n ...(args.triggeringWorktreeId\n ? { triggeringWorktreeId: args.triggeringWorktreeId }\n : {}),\n };\n}\n\ntype BeliefStatusResult =\n | { success: true }\n | { success: false; message: \"Evidence node not found\" };\n\nexport function buildBeliefStatusSuccessResult(): BeliefStatusResult {\n return { success: true };\n}\n\nexport function buildBeliefEvidenceNotFoundResult(): BeliefStatusResult {\n const result = {} as Extract<BeliefStatusResult, { success: false }>;\n result.success = false;\n result.message = \"Evidence node not found\";\n return result;\n}\n\nexport function deriveSyntheticBackfillOpinion(\n source: Record<string, unknown>,\n): SLOpinion {\n const belief =\n readFiniteNumber(source.opinion_b) ?? readFiniteNumber(source.belief);\n const disbelief =\n readFiniteNumber(source.opinion_d) ?? readFiniteNumber(source.disbelief);\n const uncertainty =\n readFiniteNumber(source.opinion_u) ?? readFiniteNumber(source.uncertainty);\n const baseRate =\n readFiniteNumber(source.opinion_a) ?? readFiniteNumber(source.baseRate);\n\n if (\n belief !== undefined ||\n disbelief !== undefined ||\n uncertainty !== undefined ||\n baseRate !== undefined\n ) {\n try {\n return readOpinionFromRecord(source);\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to decode legacy belief opinion\",\n {\n error,\n },\n );\n return mkOpinion(0, 0, 1, 0.5);\n }\n }\n\n const confidence = clamp01(readFiniteNumber(source.confidence) ?? 0);\n return mkOpinion(confidence, 1 - confidence, 0, 0.5);\n}\n\nexport function clampBeliefLimit(\n limit: number | undefined,\n fallback = DEFAULT_PROJECT_BELIEF_LIMIT,\n): number {\n if (!Number.isFinite(limit)) {\n return fallback;\n }\n return Math.max(\n 1,\n Math.min(Math.floor(limit as number), MAX_PROJECT_BELIEF_LIMIT),\n );\n}\n\nexport function readTupleContradictedFlag(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nexport function readBeliefOpinionSnapshot(\n node: Doc<\"epistemicNodes\">,\n metadata: Record<string, unknown>,\n): SLOpinion {\n try {\n return readOpinionFromRecord({\n ...metadata,\n opinion_b: (node as any).opinion_b,\n opinion_d: (node as any).opinion_d,\n opinion_u: (node as any).opinion_u,\n opinion_a: (node as any).opinion_a,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to read belief opinion snapshot\",\n {\n error,\n beliefId: node._id,\n },\n );\n return mkOpinion(0, 0, 1, 0.5);\n }\n}\n\nexport function deriveTupleContradictionSeverity(\n node: Doc<\"epistemicNodes\">,\n): \"critical\" | \"significant\" | \"minor\" {\n const metadata = (node.metadata || {}) as Record<string, unknown>;\n const criticality =\n typeof metadata.criticality === \"string\" ? metadata.criticality : undefined;\n\n if (criticality === \"blocking\") {\n return \"critical\";\n }\n if (criticality === \"supporting\") {\n return \"minor\";\n }\n return \"significant\";\n}\n\nexport function formatTupleContradictionDescription(args: {\n opinion: Opinion;\n policy: ConfidencePolicyConfig[\"tupleContradiction\"];\n}): string {\n return `Tuple-space contradiction detected: b=${args.opinion.b.toFixed(2)} > ${args.policy.beliefThreshold.toFixed(2)} and d=${args.opinion.d.toFixed(2)} > ${args.policy.disbeliefThreshold.toFixed(2)}.`;\n}\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nexport function generateContentHash(text: string): string {\n const content = `belief:${text.trim().toLowerCase().replace(/\\s+/g, \" \")}`;\n let hash = 5381;\n for (let i = 0; i < content.length; i++) {\n hash = (hash << 5) + hash + content.charCodeAt(i);\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\nexport function resolveBeliefWorktreeId(\n metadata: Record<string, unknown> | undefined,\n): string | undefined {\n const worktreeId = metadata?.worktreeId;\n if (typeof worktreeId === \"string\" && worktreeId.trim().length > 0) {\n return worktreeId;\n }\n\n const sprintId = metadata?.sprintId;\n return typeof sprintId === \"string\" && sprintId.trim().length > 0\n ? sprintId\n : undefined;\n}\n\n// Map pillar names to valid pillar literals\ntype ValidPillar =\n | \"market\"\n | \"competition\"\n | \"product\"\n | \"team\"\n | \"financials\"\n | \"regulatory\"\n | \"timing\"\n | \"customer\"\n | \"technology\"\n | \"distribution\"\n | \"deal\"\n | \"risks\"\n | \"other\";\n\nexport function normalizePillar(pillar?: string): ValidPillar {\n if (!pillar) {\n return \"other\";\n }\n const lower = pillar.toLowerCase();\n const validPillars: ValidPillar[] = [\n \"market\",\n \"competition\",\n \"product\",\n \"team\",\n \"financials\",\n \"regulatory\",\n \"timing\",\n \"customer\",\n \"technology\",\n \"distribution\",\n \"deal\",\n \"risks\",\n ];\n return (validPillars.find((p) => lower.includes(p)) ||\n \"other\") as ValidPillar;\n}\n\nexport async function markBeliefGraphDirty(\n ctx: EpistemicBeliefCtx,\n scope: { projectId?: string | null; topicId?: string | null },\n): Promise<void> {\n const projectId =\n typeof scope.projectId === \"string\" && scope.projectId.trim().length > 0\n ? scope.projectId\n : undefined;\n const topicId =\n typeof scope.topicId === \"string\" && scope.topicId.trim().length > 0\n ? scope.topicId\n : undefined;\n\n if (!projectId && !topicId) {\n return;\n }\n\n if (projectId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n { projectId },\n );\n }\n if (topicId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleByTopic,\n { topicId },\n );\n }\n\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n topicId ?? projectId!,\n {\n lastActivityAt: Date.now(),\n },\n );\n}\n\nexport async function resolveBeliefScopeOrNull(\n ctx: QueryCtx,\n args: BeliefScopeArgs,\n) {\n if (!args.projectId && !args.topicId) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n projectId: args.projectId ?? undefined,\n topicId: args.topicId ?? undefined,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to resolve belief scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n },\n );\n return null;\n }\n}\n\nexport async function getBeliefNodesForScope(\n ctx: EpistemicBeliefCtx,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n args?: { scanLimit?: number; status?: string },\n) {\n const baseQuery = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: any) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\"),\n );\n const nodes: EpistemicNodeOpinionDoc[] =\n typeof args?.scanLimit === \"number\"\n ? (await baseQuery.order(\"desc\").take(args.scanLimit)) as EpistemicNodeOpinionDoc[]\n : (await baseQuery.collect()) as EpistemicNodeOpinionDoc[];\n const scopedNodes = nodes.filter((node: Doc<\"epistemicNodes\">) =>\n nodeMatchesWorkspaceReasoningScope(node, scope),\n );\n\n if (!args?.status) {\n return scopedNodes;\n }\n\n return scopedNodes.filter((node: EpistemicNodeOpinionDoc) => node.status === args.status);\n}\n\nexport function createBeliefAudienceResolver(\n registryRows: Array<{\n audienceKey?: string | null;\n audienceClass: AudienceClass;\n }>,\n) {\n const audienceClassByKey = new Map<string, AudienceClass>(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ]),\n );\n\n return (\n audienceKey: string | undefined | null,\n fallback: AudienceClass,\n ): AudienceClass => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return (\n audienceClassByKey.get(key) ??\n (classFromAudienceKey(key, fallback) as AudienceClass)\n );\n };\n}\n\nexport function flattenBeliefNode(node: Doc<\"epistemicNodes\">) {\n const meta = (node.metadata || {}) as Record<string, unknown>;\n const worktreeId = resolveBeliefWorktreeId(meta);\n const tupleContradicted =\n readTupleContradictedFlag(\n (node as EpistemicNodeOpinionDoc).tupleContradicted,\n ) ??\n readTupleContradictedFlag(meta.tupleContradicted) ??\n false;\n\n return {\n _id: node._id,\n _epistemicNodeId: node._id,\n _creationTime: node._creationTime,\n belief: node.canonicalText,\n formulation: node.canonicalText,\n projectId: node.projectId,\n topicId: node.topicId,\n userId: (node as EpistemicNodeOpinionDoc).userId || node.createdBy || \"\",\n confidence: (meta.confidence as \"high\" | \"medium\" | \"low\") || \"untested\",\n status: node.status,\n beliefStatus: resolveBeliefStatus(node, meta),\n topic: (meta.topic as string) || (meta.pillar as string) || \"other\",\n pillar: (meta.pillar as string) || (meta.topic as string) || \"\",\n category: (meta.category as string) || \"\",\n subcategory: (meta.subcategory as string) || \"\",\n categoryIcon: (meta.categoryIcon as string) || \"\",\n supportingEvidence: (meta.supportingEvidenceIds as string[]) || [],\n contradictingEvidence: (meta.contradictingEvidenceIds as string[]) || [],\n testingQuestions: (meta.testingQuestionIds as string[]) || [],\n linkedInsights: (meta.linkedInsightIds as string[]) || [],\n createdAt: node.createdAt,\n updatedAt: node.updatedAt || node.createdAt,\n tupleContradicted,\n sprintId: (meta.sprintId as string) || undefined,\n worktreeId,\n sourceBeliefIds: (meta.sourceBeliefIds as string[]) || undefined,\n criticality:\n (meta.criticality as\n | \"critical\"\n | \"supporting\"\n | \"nice_to_have\"\n | \"unanalyzed\"\n | \"blocking\"\n | \"important\") || \"unanalyzed\",\n rationale: (meta.rationale as string) || \"\",\n audienceLabel: node.audienceLabel,\n policyTags: node.policyTags,\n sensitivityTier: node.sensitivityTier,\n exportClass: node.exportClass,\n anonymizationClass: node.anonymizationClass,\n };\n}\n\nexport function resolveBeliefStatus(\n node: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n },\n metadata: Record<string, unknown>,\n): BeliefLifecycleStatus {\n return resolveBeliefLifecycleStatus({\n beliefStatus: node.beliefStatus,\n confidence: node.confidence,\n predictionMeta: node.predictionMeta,\n metadata,\n });\n}\n\nexport async function hasCompletedWorktreeForBelief(\n ctx: EpistemicBeliefCtx,\n beliefNodeId: Id<\"epistemicNodes\">,\n): Promise<boolean> {\n // Check if the belief is linked to a completed worktree via worktreeBeliefCluster\n const clusterMembership = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_belief\", (q: any) => q.eq(\"beliefId\", beliefNodeId))\n .collect();\n for (const membership of clusterMembership) {\n const worktree = await ctx.db.get(membership.worktreeId);\n if (worktree?.status === \"completed\" || worktree?.status === \"merged\") {\n return true;\n }\n }\n return false;\n}\n\nexport async function getActiveConfidencePolicy(\n ctx: EpistemicBeliefCtx,\n): Promise<ConfidencePolicyConfig> {\n try {\n const activeConfig = await ctx.db\n .query(\"logicSprintScoring\")\n .withIndex(\"by_active\", (q: any) => q.eq(\"isActive\", true))\n .first();\n\n return {\n scoringMode:\n activeConfig?.confidencePolicy === \"always\"\n ? \"always\"\n : DEFAULT_CONFIDENCE_POLICY.scoringMode,\n tupleContradiction: normalizeTupleContradictionPolicy(\n activeConfig?.tupleContradictionPolicy as\n | Partial<ConfidencePolicyConfig[\"tupleContradiction\"]>\n | undefined,\n ),\n };\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to load active confidence policy\",\n {\n error,\n },\n );\n // K-tier/component environments do not carry logicSprintScoring.\n return DEFAULT_CONFIDENCE_POLICY;\n }\n}\n\nexport async function requireAuthenticatedUserId(ctx: {\n auth: { getUserIdentity: () => Promise<unknown> };\n}): Promise<string> {\n const userId = await getCurrentUserId(\n ctx as Parameters<typeof getCurrentUserId>[0],\n );\n if (!userId) {\n throwStructuredMutationError({\n message: \"Authentication required.\",\n status: 401,\n code: \"AUTHENTICATION_REQUIRED\",\n invariantCode: \"auth.required\",\n suggestion:\n \"Provide a valid bearer token before invoking belief mutations.\",\n });\n }\n return userId;\n}\n\nexport async function requireProjectWriteAccess(\n ctx: { db: unknown },\n projectId: string,\n userId: string,\n): Promise<void> {\n const hasAccess = await checkProjectAccess(\n ctx as Parameters<typeof checkProjectAccess>[0],\n projectId,\n userId,\n );\n if (!hasAccess) {\n // FR.7: structured, non-retryable 403 naming ONLY the targeted topic and\n // the caller's own principal (no cross-tenant leakage; security condition e).\n throwStructuredMutationError({\n message: `Project write access denied for topic ${projectId}.`,\n status: 403,\n code: \"PROJECT_ACCESS_DENIED\",\n invariantCode: \"policy.scope_required\",\n suggestion:\n \"The acting principal lacks project-write access to this topic. Request a topic grant (or, if the principal created this topic, run the creator-grant backfill) and retry.\",\n details: { topicId: projectId, principalId: userId },\n });\n }\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 PropagationResult,\n type SLOpinion,\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: SLOpinion,\n damping: number\n): SLOpinion {\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: SLOpinion,\n targetOpinion: SLOpinion,\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: SLOpinion,\n targetOpinion: SLOpinion,\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: SLOpinion,\n targetOpinion: SLOpinion,\n edgeWeight: number,\n edge: PropagationEdgeRecord\n): PropagationResult {\n return applyNegativeSupport(\n sourceOpinion,\n targetOpinion,\n edgeWeight,\n readEdgeMetadata(edge)\n );\n}\n\nexport const propagateNegativeInform = applyNegativeEvidence;\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 mkOpinion,\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 mkOpinion(\n metadata.conditionalA.b,\n metadata.conditionalA.d,\n metadata.conditionalA.u,\n metadata.conditionalA.a\n ),\n mkOpinion(\n metadata.conditionalNotA.b,\n metadata.conditionalNotA.d,\n metadata.conditionalNotA.u,\n metadata.conditionalNotA.a\n ),\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","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 PropagationResult,\n SLOpinion,\n} from \"@lucern/confidence\";\n\nexport type PropagationTraversalDirection = \"outgoing\" | \"incoming\";\n\nexport type PropagationSpecDirection =\n | PropagationTraversalDirection\n | \"bidirectional\";\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: \"none\" | \"damped\" | \"full\";\n damping: number;\n maxHops: number | \"unbounded\";\n operator: (\n sourceOpinion: SLOpinion,\n targetOpinion: SLOpinion,\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 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","import {\n hasProjectedOpinionChanged,\n mkOpinion,\n readOpinionFromRecord,\n type SLOpinion,\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: SLOpinion;\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): SLOpinion {\n const metadata = (node.metadata ?? {}) as Record<string, unknown>;\n\n try {\n return readOpinionFromRecord({\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 } catch {\n return mkOpinion(0, 0, 1, 0.5);\n }\n}\n\nexport async function collectConfidencePropagationDispatches<\n TNodeId extends string = string,\n>(args: {\n sourceNodeId: TNodeId;\n sourceOpinion: SLOpinion;\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, SLOpinion>();\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: SLOpinion;\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 const projectedOpinion = mkOpinion(\n result.opinion.b,\n result.opinion.d,\n result.opinion.u,\n result.opinion.a\n );\n\n opinionCache.set(cacheKey, projectedOpinion);\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: projectedOpinion,\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: projectedOpinion,\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","/** Split confidence operations out of epistemicBeliefs.ts. */\n\nimport { v } from \"convex/values\";\nimport {\n detectTupleContradiction,\n evaluateTupleContradictionTransition,\n confidenceFromSL,\n mkOpinion,\n normalizeTupleContradictionPolicy,\n readOpinionFromRecord,\n type ConfidencePolicyConfig,\n type Opinion,\n type SLOpinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport {\n checkProjectAccess,\n checkScopeAccess,\n} from \"@lucern/access-control/access\";\nimport {\n canAudienceClassAccess,\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { listAudienceRegistryRows } from \"@lucern/access-control/audienceRegistry\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { assertSchemaEnumValue } from \"@lucern/contracts/schema-helpers/enumValidation\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport {\n type BeliefLifecycleStatus,\n isPreValidationBeliefStatus,\n promoteBeliefStatusAfterScoring,\n resolveBeliefLifecycleStatus,\n} from \"./beliefLifecycle\";\nimport type { Doc, Id, MutationCtx } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport { collectConfidencePropagationDispatches } from \"./confidencePropagationDispatch\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport {\n createInheritedContractRecord,\n type VerificationConfidenceTrigger,\n} from \"./epistemicContractHelpers\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { generateGlobalId } from \"./globalId\";\nimport { computeLogicalRole } from \"./logicalRoleInference\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n nodeMatchesWorkspaceReasoningScope,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\nimport {\n buildBeliefConfidenceRow,\n deriveTupleContradictionSeverity,\n formatTupleContradictionDescription,\n getActiveConfidencePolicy,\n hasCompletedWorktreeForBelief,\n readBeliefOpinionSnapshot,\n readTupleContradictedFlag,\n resolveBeliefStatus,\n throwStructuredMutationError,\n requireProjectWriteAccess,\n type BeliefConfidenceTrigger,\n} from \"./epistemicBeliefs.helpers\";\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 appending SL scoring.\",\n details: { nodeId: args.nodeId },\n });\n }\n if (node.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `appendSlScoring 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. appendSlScoring 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 before SL scoring can be appended.\",\n details: { nodeId: args.nodeId },\n });\n }\n await requireProjectWriteAccess(\n ctx,\n node.projectId,\n args.authenticatedUserId,\n );\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 SL scoring.\",\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(currentBeliefStatus, {\n confidence: derivedConfidence,\n predictionMeta,\n metadata: existingMetadata,\n });\n\n let tupleContradictionId: Id<\"contradictions\"> | undefined;\n if (tupleTransition.crossedIntoTupleContradiction) {\n tupleContradictionId = (await ctx.runMutation(\n \"contradictions:create\" as any,\n {\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 },\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 )\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\n/**\n * Returns the pressure direction label for use in the propagation rationale\n * string. The ledger trigger is always \"propagation\" (stage-1 containment,\n * AC.1 adjudication P1). The direction is carried in the rationale only.\n */\nfunction propagationPressureLabel(\n edgeType: string,\n weight: number,\n): \"supportive\" | \"contradictory\" {\n if (edgeType === \"contradicts\" || edgeType === \"refutes\") {\n return \"contradictory\";\n }\n if ((edgeType === \"supports\" || edgeType === \"informs\") && weight < 0) {\n return \"contradictory\";\n }\n return \"supportive\";\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 = mkOpinion(\n args.opinion_b,\n args.opinion_d,\n args.opinion_u,\n 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 const pressureLabel = propagationPressureLabel(dispatch.edgeType, dispatch.weight);\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: \"propagation\",\n rationale: `SL propagation via ${dispatch.edgeType} edge (pressure: ${pressureLabel}): ${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","/** Metric helpers and evidential snapshots used by contract evaluators. */\n\nimport type { Id } from \"./convex\";\nimport {\n buildEvidentialRationale,\n buildComparisonRationale,\n compareMetricValue,\n parseMetricCheckerConfig,\n parseReferenceCheckCounterConfig,\n parseTemporalDeadlineConfig,\n parseMarketIndexComparatorConfig,\n parseEvidentialEvaluatorConfig,\n pickFiniteNumber,\n resolveComparisonResult,\n getEvaluatorInputRecord,\n} from \"./epistemicContractHelpers\";\nimport {\n type ContractDoc,\n type ContractReadCtx,\n type ContradictionStatusCounts,\n type EvidenceEdgeDoc,\n type EvidenceFreshness,\n type EvidenceNodeDoc,\n type EvidentialAction,\n type EvidentialEvaluatorConfig,\n type EvidentialMetric,\n type EvidentialMetricSnapshot,\n type EpistemicEvaluator,\n type EpistemicEvaluatorContext,\n type EpistemicEvaluatorResult,\n type MarketIndexComparatorConfig,\n type MetricCheckerEvaluatorConfig,\n type ReferenceCheckCounterConfig,\n type TemporalDeadlineEvaluatorConfig,\n} from \"./epistemicContracts.types\";\n\nconst ACTIVE_CONTRADICTION_STATUSES = new Set([\n \"unresolved\",\n \"investigating\",\n \"accepted_as_permanent\",\n]);\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(edges.map((edge) => ctx.db.get(edge.fromNodeId)));\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\nexport async 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\nexport async 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\nexport async 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\nexport async 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(args.ctx, args.beliefNodeId);\n return {\n metric: args.metric,\n value: count,\n data: { evidenceCount: count },\n };\n }\n case \"contradiction_status\": {\n const counts = await computeContradictionCounts(args.ctx, args.beliefNodeId);\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(args.ctx, args.beliefNodeId);\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\nexport async function evaluateBuiltInEvidentialContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseEvidentialEvaluatorConfig(args.contract.condition.evaluatorConfig);\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 ?? \"append_sl_scoring\",\n actionParams: config.actionParams,\n },\n };\n}\n\nexport async 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(args.contract.direction, comparisonSatisfied);\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\nexport async function evaluateReferenceCheckCounterContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseReferenceCheckCounterConfig(args.contract.condition.evaluatorConfig);\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(args.contract.direction, comparisonSatisfied);\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\nexport async 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(args.contract.condition.evaluatorConfig);\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\nexport async function evaluateMarketIndexComparatorContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseMarketIndexComparatorConfig(args.contract.condition.evaluatorConfig);\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, [\"benchmarkValue\", \"comparisonValue\", \"rightValue\"]) ??\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(args.contract.direction, comparisonSatisfied);\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\nexport const METRIC_COMPARATOR_EVALUATOR_NAMES = {\n evidential: \"evidential\",\n evidentialAliases: new Set([\"evidential\", \"built_in_evidential\", \"builtin_evidential\"]),\n metricChecker: \"metric_checker\",\n referenceCheckCounter: \"reference_check_counter\",\n temporalDeadline: \"temporal_deadline\",\n marketIndexComparator: \"market_index_comparator\",\n};\n","/** Shared evaluator helpers and result-normalization utilities. */\n\nimport type {\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n} from \"../epistemicContractHelpers\";\nimport { debugGraphPrimitiveFallback } from \"../debug\";\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(\n value: unknown,\n): 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 (error) {\n debugGraphPrimitiveFallback(\n \"[evaluators/shared] Failed to parse JSON candidate\",\n {\n error,\n valueType: typeof value,\n },\n );\n return null;\n }\n}\n\nexport function patternMatchesPath(filePath: string, pattern: string): 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","/** Evaluator registry and contract execution logic for epistemic contracts. */\n\nimport type { Id, MutationCtx } from \"./convex\";\nimport { applyBeliefConfidenceChange } from \"./epistemicBeliefs\";\nimport {\n deriveContractModulationPlan,\n deriveContractStatus,\n} from \"./epistemicContractHelpers\";\nimport {\n evaluateBuiltInEvidentialContract,\n evaluateMarketIndexComparatorContract,\n evaluateMetricCheckerContract,\n evaluateReferenceCheckCounterContract,\n evaluateTemporalDeadlineContract,\n METRIC_COMPARATOR_EVALUATOR_NAMES,\n} from \"./epistemicContracts.metrics\";\nimport {\n type BeliefNodeDoc,\n type ContractDoc,\n type ContractEvaluationExecution,\n type EpistemicEvaluator,\n type EpistemicEvaluatorResult,\n type TriggerBatchResult,\n} from \"./epistemicContracts.types\";\nimport {\n ENGINEERING_EPISTEMIC_EVALUATORS,\n} from \"./evaluators\";\n\nconst evaluatorRegistry = new Map<string, EpistemicEvaluator>();\nconst BUILT_IN_EVIDENTIAL_ALIASES = METRIC_COMPARATOR_EVALUATOR_NAMES.evidentialAliases;\nconst BUILT_IN_METRIC_CHECKER = METRIC_COMPARATOR_EVALUATOR_NAMES.metricChecker;\nconst BUILT_IN_REFERENCE_CHECK_COUNTER =\n METRIC_COMPARATOR_EVALUATOR_NAMES.referenceCheckCounter;\nconst BUILT_IN_TEMPORAL_DEADLINE = METRIC_COMPARATOR_EVALUATOR_NAMES.temporalDeadline;\nconst BUILT_IN_MARKET_INDEX_COMPARATOR =\n METRIC_COMPARATOR_EVALUATOR_NAMES.marketIndexComparator;\nconst MAX_CONTRACT_EVALUATION_BATCH_SIZE = 50;\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\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 [BUILT_IN_REFERENCE_CHECK_COUNTER, evaluateReferenceCheckCounterContract],\n [BUILT_IN_TEMPORAL_DEADLINE, evaluateTemporalDeadlineContract],\n [BUILT_IN_MARKET_INDEX_COMPARATOR, evaluateMarketIndexComparatorContract],\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\nfunction normalizeTrigger(trigger?: string): string {\n if (trigger === \"evidence_added\") {\n return \"evidence_added\";\n }\n if (trigger === \"periodic\") {\n return \"periodic\";\n }\n if (trigger === \"manual\") {\n return \"manual\";\n }\n return \"event_driven\";\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\nexport async 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(\"contractEvaluations\", {\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 const nextStatus = deriveContractStatus(evaluation.result, args.contract.status);\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\nexport async 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: normalizeTrigger(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: normalizeTrigger(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: normalizeTrigger(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: normalizeTrigger(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: normalizeTrigger(args.trigger),\n results,\n };\n}\n\nexport async 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","/** Convex queries and mutations for epistemic contract lifecycle management. */\n\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 {\n computeContradictionCounts,\n computeDependentBeliefCount,\n computeEvidenceCountMetric,\n computeEvidenceFreshness,\n} from \"./epistemicContracts.metrics\";\nimport {\n createInheritedContractRecord,\n} from \"./epistemicContractHelpers\";\nimport { type BeliefNodeDoc, type ContractDoc, type ContractEvaluationDoc } from \"./epistemicContracts.types\";\nimport {\n ENGINEERING_EVALUATOR_NAMES,\n getEngineeringEpistemicEvaluator,\n} from \"./evaluators\";\nimport {\n evaluateContractsForTriggerBatch,\n executeContractEvaluation,\n loadContractsForBelief,\n} from \"./epistemicContracts.evaluators\";\nimport { generateGlobalId } from \"./globalId\";\nimport type { MutationCtx, QueryCtx } from \"./convex\";\nimport { internalMutation, mutation, query } from \"./convex\";\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\ntype ContractStatusRow = Omit<ContractDoc, \"latestEvaluation\"> & {\n latestEvaluation: ContractEvaluationDoc | null;\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(args.beliefNodeId)) 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(args.beliefNodeId)) 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(args.beliefNodeId)) 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(args.beliefNodeId)) 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(args.beliefNodeId)) 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.insert(\"epistemicContracts\", 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(contract.beliefNodeId)) 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(args.beliefNodeId)) 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(\n trigger === \"manual\"\n ? \"manual\"\n : trigger === \"evidence_added\"\n ? \"evidence_added\"\n : trigger\n );\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(args.beliefNodeId)) 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(args.beliefNodeId)) 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(args.beliefNodeId)) 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((contract) => contract.status === args.status);\n }\n\n const rows: ContractStatusRow[] = 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) => q.eq(\"topicId\", args.topicId))\n .order(\"desc\")\n .take(recentEvaluationLimit)) as Promise<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\").length,\n violated: contracts.filter((contract) => contract.status === \"violated\").length,\n expired: contracts.filter((contract) => contract.status === \"expired\").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"]}
|