@lucern/graph-primitives 1.0.32 → 1.0.34
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/entityBridge.js +2 -1
- package/dist/entityBridge.js.map +1 -1
- package/dist/epistemicBeliefs.backfills.js +6 -2
- package/dist/epistemicBeliefs.backfills.js.map +1 -1
- package/dist/epistemicBeliefs.confidence.js +2 -1
- package/dist/epistemicBeliefs.confidence.js.map +1 -1
- package/dist/epistemicBeliefs.js +7 -4
- package/dist/epistemicBeliefs.js.map +1 -1
- package/dist/epistemicBeliefs.lifecycle.js +2 -1
- package/dist/epistemicBeliefs.lifecycle.js.map +1 -1
- package/dist/epistemicContracts.evaluators.js +2 -1
- package/dist/epistemicContracts.evaluators.js.map +1 -1
- package/dist/epistemicContracts.handlers.js +2 -2
- package/dist/epistemicContracts.handlers.js.map +1 -1
- package/dist/epistemicContracts.js +2 -2
- package/dist/epistemicContracts.js.map +1 -1
- package/dist/index.js +10 -7
- package/dist/index.js.map +1 -1
- package/dist/proof-attestation.json +1 -1
- package/dist/questionEvidenceLinks.js +3 -2
- package/dist/questionEvidenceLinks.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/convex.ts","../src/beliefLifecycle.ts","../src/edges/contains.ts","../src/edges/utils.ts","../src/edges/contradicts.ts","../src/edges/depends-on.ts","../src/edges/derived-from.ts","../src/edges/elaborates.ts","../src/edges/informs.ts","../src/edges/propagation-types.ts","../src/edges/refutes.ts","../src/edges/supports.ts","../src/edges/tests.ts","../src/edges/index.ts","../src/debug.ts","../src/topicScope.ts","../src/workspaceIsolation.ts","../src/confidencePropagationDispatch.ts","../src/epistemicBeliefs.helpers.ts","../src/epistemicBeliefs.confidence.ts","../src/epistemicBeliefs.lifecycle.ts"],"names":["project","canContinueTransitively","canTraverseHop","isPropagationTraversalDirection","normalizeScopeValue","mkOpinion","v","readOpinionFromRecord","isRecord","readOptionalString","readRecord","throwStructuredMutationError","confidenceFromSL","permissiveReturn","requireScopeWriteAccess"],"mappings":"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","file":"epistemicBeliefs.lifecycle.js","sourcesContent":["import type { Doc as AccessControlDoc } from \"@lucern/access-control/convex\";\nimport {\n type UnsafeConvexAnyApi,\n unsafeConvexAnyApi,\n} from \"@lucern/contracts/convex/unsafeAnyApi\";\nimport {\n actionGeneric,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\n// TODO(FR.11-structural): `api`/`internal`/`components` are `anyApi as any`\n// because this module source tree is bundled into the kernel host at deploy time\n// and has NO top-level Convex `_generated/` directory to import a typed surface\n// from. Every `api.*` / `internal.*` / string-literal cross-component ref in this\n// module (topicScope.ts, topicProjectOverlay.ts, questionEvidenceLinks.ts,\n// beliefEvidenceLinks*.ts, epistemicQuestions.helpers.ts) inherits `any` from\n// here. The fix is structural — generate a per-module typed surface or a shared\n// typed function-reference manifest (template: the typed `components.controlPlane`\n// in modules/control-plane/src/component/convex.ts and the\n// `KERNEL_API_REF_MANIFEST` pattern in packages/server-core/src/kernelApi.ts) —\n// owned by the FR.11 closing/synthesis pass, not a mechanical swap.\nconst unsafeApi = unsafeConvexAnyApi(\n \"graph-primitives top-level module bundle lacks a committed Convex _generated/api surface\"\n);\nexport const api = unsafeApi;\nexport const components =\n componentsGeneric() as unknown as UntypedFunctionReferenceSurface;\nexport const internal = unsafeApi;\n\ntype UntypedFunctionReferenceSurface = UnsafeConvexAnyApi;\ntype BoundaryValue = UntypedFunctionReferenceSurface[string];\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> =\n AccessControlDoc<TableName>;\nexport type DataModel = Record<TableNames, unknown>;\ninterface IndexRangeBuilder {\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n field(fieldName: string): string;\n gt(fieldName: string, value: unknown): IndexRangeBuilder;\n gte(fieldName: string, value: unknown): IndexRangeBuilder;\n lt(fieldName: string, value: unknown): IndexRangeBuilder;\n lte(fieldName: string, value: unknown): IndexRangeBuilder;\n}\ninterface FilterBuilder {\n and(...clauses: unknown[]): FilterBuilder;\n eq(left: unknown, right: unknown): FilterBuilder;\n field(fieldName: string): string;\n gt(left: unknown, right: unknown): FilterBuilder;\n gte(left: unknown, right: unknown): FilterBuilder;\n lt(left: unknown, right: unknown): FilterBuilder;\n lte(left: unknown, right: unknown): FilterBuilder;\n neq(left: unknown, right: unknown): FilterBuilder;\n or(...clauses: unknown[]): FilterBuilder;\n [operator: string]: unknown;\n}\ninterface QueryInitializer<TableName extends TableNames> {\n collect(): Promise<Doc<TableName>[]>;\n filter(predicate: (q: FilterBuilder) => unknown): QueryInitializer<TableName>;\n first(): Promise<Doc<TableName> | null>;\n order(direction: \"asc\" | \"desc\"): QueryInitializer<TableName>;\n take(limit: number): Promise<Doc<TableName>[]>;\n unique(): Promise<Doc<TableName> | null>;\n withIndex(\n indexName: string,\n range?: (q: IndexRangeBuilder) => unknown\n ): QueryInitializer<TableName>;\n withSearchIndex(\n indexName: string,\n search?: (q: IndexRangeBuilder) => unknown\n ): QueryInitializer<TableName>;\n}\nexport interface DatabaseReader {\n get<TableName extends TableNames>(\n id: unknown\n ): Promise<Doc<TableName> | null>;\n normalizeId?<TableName extends TableNames>(\n tableName: TableName,\n id: string\n ): Id<TableName> | null;\n query<TableName extends TableNames>(\n tableName: TableName\n ): QueryInitializer<TableName>;\n}\nexport type DatabaseWriter = DatabaseReader & {\n insert<TableName extends TableNames>(\n tableName: TableName,\n value: Record<string, unknown>\n ): Promise<Id<TableName>>;\n patch<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n replace<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n delete<TableName extends TableNames>(id: Id<TableName>): Promise<void>;\n};\ninterface Scheduler {\n runAfter(\n delayMs: number,\n functionReference: unknown,\n args?: unknown\n ): Promise<void>;\n}\ninterface AuthReader {\n getUserIdentity(): Promise<{\n readonly subject: string;\n readonly [claimName: string]: unknown;\n } | null>;\n}\ninterface RuntimeInvoker {\n runAction<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n runMutation<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n runQuery<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n}\nexport type QueryCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseReader;\n scheduler: Scheduler;\n};\nexport type MutationCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseWriter;\n scheduler: Scheduler;\n};\nexport type ActionCtx = RuntimeInvoker & {\n auth: AuthReader;\n scheduler: Scheduler;\n};\n\ntype ConvexFunctionBuilder<Ctx> = <\n Args = BoundaryValue,\n Result = BoundaryValue,\n>(definition: {\n args?: unknown;\n handler: (ctx: Ctx, args: Args) => Result;\n returns?: unknown;\n}) => unknown;\n\ntype OptionalHandlerConvexFunctionBuilder<Ctx> = <\n Args = BoundaryValue,\n Result = BoundaryValue,\n>(definition: {\n args?: unknown;\n handler?: (ctx: Ctx, args: Args) => Result;\n returns?: unknown;\n}) => unknown;\n\nexport const action =\n actionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const httpAction =\n httpActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalAction =\n internalActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalMutation =\n internalMutationGeneric as unknown as OptionalHandlerConvexFunctionBuilder<MutationCtx>;\nexport const internalQuery =\n internalQueryGeneric as unknown as OptionalHandlerConvexFunctionBuilder<QueryCtx>;\nexport const mutation =\n mutationGeneric as unknown as ConvexFunctionBuilder<MutationCtx>;\nexport const query = queryGeneric as unknown as ConvexFunctionBuilder<QueryCtx>;\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\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 (normalized !== null && isPreValidationBeliefStatus(normalizedDirect)) {\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 type { EdgePropagationSpec } from \"./propagation-types\";\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","import {\n applyNegativeEvidence,\n applyNegativeSupport,\n cumulativeFusion,\n type EdgeMetadata,\n type PropagationResult,\n project,\n type SLOpinion,\n trustDiscount,\n} from \"@lucern/confidence\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeRecord,\n} from \"./propagation-types\";\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 \"./propagation-types\";\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","import {\n conditionalDeduction,\n dampedDependencyCascade,\n mkOpinion,\n project,\n} from \"@lucern/confidence\";\nimport type { EdgePropagationSpec } from \"./propagation-types\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n readEdgeMetadata,\n} 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 \"./propagation-types\";\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","import type { EdgePropagationSpec } from \"./propagation-types\";\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","import type { EdgePropagationSpec } from \"./propagation-types\";\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","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 interface PropagationEdgeRecord<TNodeId extends string = string> {\n conditionalA?: EdgeMetadata[\"conditionalA\"] | null;\n conditionalNotA?: EdgeMetadata[\"conditionalNotA\"] | null;\n constraint?: EdgeMetadata[\"constraint\"] | null;\n edgeType: string;\n fromNodeId?: TNodeId | null;\n normalization?: EdgeMetadata[\"normalization\"] | null;\n propagation?: EdgeMetadata[\"propagation\"] | null;\n tenantId?: string;\n toNodeId?: TNodeId | null;\n weight?: number | null;\n workspaceId?: string;\n}\n\nexport interface EdgePropagationSpec<TNodeId extends string = string> {\n damping: number;\n description: string;\n direction: PropagationSpecDirection;\n edgeType: PropagationEdgeType;\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 transitivity: \"none\" | \"damped\" | \"full\";\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 \"./propagation-types\";\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","import type { EdgePropagationSpec } from \"./propagation-types\";\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","import type { EdgePropagationSpec } from \"./propagation-types\";\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","import { containsPropagationSpec } from \"./contains\";\nimport { contradictsPropagationSpec } from \"./contradicts\";\nimport { dependsOnPropagationSpec } from \"./depends-on\";\nimport { derivedFromPropagationSpec } from \"./derived-from\";\nimport { elaboratesPropagationSpec } from \"./elaborates\";\nimport { informsPropagationSpec } from \"./informs\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeType,\n PropagationSpecDirection,\n PropagationTraversalDirection,\n} from \"./propagation-types\";\nimport {\n canContinueTransitively as importedCanContinueTransitively,\n canTraverseHop as importedCanTraverseHop,\n isPropagationTraversalDirection as importedIsPropagationTraversalDirection,\n} from \"./propagation-types\";\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 \"./propagation-types\";\n\nconst canContinueTransitively = importedCanContinueTransitively;\nconst canTraverseHop = importedCanTraverseHop;\nconst isPropagationTraversalDirection = importedIsPropagationTraversalDirection;\n\nexport {\n canContinueTransitively,\n canTraverseHop,\n isPropagationTraversalDirection,\n};\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","interface GraphPrimitiveDebugEnvironment {\n process?: {\n env?: Record<string, string | undefined>;\n };\n}\n\nfunction isGraphPrimitiveDebugEnabled(): boolean {\n const env = (globalThis as GraphPrimitiveDebugEnvironment).process?.env;\n return (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG === \"1\" || env?.LUCERN_GRAPH_DEBUG === \"1\"\n );\n}\n\nexport function formatGraphPrimitiveError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error === null) {\n return \"null\";\n }\n if (error === undefined) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(error);\n } catch {\n return Object.prototype.toString.call(error);\n }\n}\n\nexport function debugGraphPrimitiveFallback(\n message: string,\n context?: Record<string, unknown>\n): void {\n if (!isGraphPrimitiveDebugEnabled()) {\n return;\n }\n console.debug(message, context ?? {});\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport type { Id } from \"./convex\";\nimport { api as appApi } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScopeProjectId\";\n\ntype UnknownRecord = Record<string, unknown>;\n\ninterface TopicScopeContext {\n db: {\n get(id: string): Promise<unknown>;\n query(tableName: string): TopicScopeQuery;\n };\n runQuery?: <TResult>(fnRef: unknown, args: unknown) => Promise<TResult>;\n}\n\ninterface TopicScopeQuery {\n collect(): Promise<unknown[]>;\n first(): Promise<unknown | null>;\n withIndex(\n indexName: string,\n range?: (q: TopicScopeIndexRangeBuilder) => unknown\n ): TopicScopeQuery;\n}\n\ninterface TopicScopeIndexRangeBuilder {\n eq(field: string, value: unknown): TopicScopeIndexRangeBuilder;\n}\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport interface TopicProjectScope {\n projectId?: string;\n source: \"topic\" | \"project_mapped_topic\" | \"topic_inferred\" | \"topic_node\";\n tenantId?: string;\n topicId: Id<\"topics\">;\n workspaceId?: string;\n}\n\n/**\n * RR.5 (legacy topics-table retirement) — graph-primitives mirror of the\n * kernel's epistemicNodes-first topic-scope fallback. Kept in lockstep with\n * `packages/reasoning-kernel/src/adapters/lib/topicScope.ts`\n * (`tests/unit/convex/topic-scope-fallbacks.test.ts` asserts parity).\n *\n * Resolves a topic that exists only as `epistemicNodes(nodeType=\"topic\")` —\n * the write-of-record — when no legacy `topics` row backs the ref, returning the\n * node's `topicId` self-key so scoped beliefs/evidence/questions stay reachable.\n * See the kernel module for the full silent-empty-result rationale.\n */\ninterface TopicNodeScopeDoc {\n _id: string | Id<\"epistemicNodes\">;\n globalId?: string;\n metadata?: UnknownRecord;\n nodeType?: string;\n topicId?: string;\n}\n\nasync function resolveTopicNodeScopeOrNull(\n ctx: TopicScopeContext,\n ref: string\n): Promise<TopicProjectScope | null> {\n if (!ctx?.db || typeof ctx.db.query !== \"function\") {\n return null;\n }\n\n let node: TopicNodeScopeDoc | null = null;\n\n // 1. The ref IS the topic node's UUIDv7 globalId.\n try {\n const byGlobalId = (await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", ref))\n .first()) as TopicNodeScopeDoc | null;\n if (byGlobalId && byGlobalId.nodeType === \"topic\") {\n node = byGlobalId;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] topic-node scope lookup by globalId failed\",\n { error, ref }\n );\n }\n\n if (!node) {\n return null;\n }\n\n const scopeKey =\n normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);\n if (!scopeKey) {\n return null;\n }\n\n return {\n topicId: scopeKey as Id<\"topics\">,\n projectId: asMappedProjectId(node),\n source: \"topic_node\",\n };\n}\n\ninterface MaterializedTopicNodeDoc {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n}\n\nfunction asMappedProjectId(\n topic: Pick<TopicDoc, \"metadata\"> | TopicNodeScopeDoc | null | undefined\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(\n (topic as UnknownRecord)[LEGACY_SCOPE_FIELD]\n );\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = topic.metadata || {};\n const candidate =\n (metadata as UnknownRecord)[LEGACY_SCOPE_FIELD] ||\n (metadata as UnknownRecord).legacyProjectId ||\n (metadata as UnknownRecord).projectId ||\n (metadata as UnknownRecord).scopeProjectId;\n return typeof candidate === \"string\"\n ? normalizeScopeValue(candidate)\n : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(\n ctx: TopicScopeContext,\n scopeId: string\n): Promise<TopicDoc[]> {\n const query = ctx.db.query(\"topics\") as TopicScopeQuery;\n try {\n return (await query\n .withIndex(\"by_graph_scope_project\", (q) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId)\n )\n .collect()) as TopicDoc[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve scope alias via index\",\n {\n error,\n scopeId,\n }\n );\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await query.collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: TopicScopeContext,\n topicId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by host query\",\n {\n error,\n topicId,\n }\n );\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: TopicScopeContext,\n legacyScopeId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by legacy scope\",\n {\n error,\n legacyScopeId,\n }\n );\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: TopicScopeContext,\n topic: TopicDoc\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) {\n break;\n }\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) {\n break;\n }\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: TopicScopeContext,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string }\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n return await resolveScopeFromTopicId(ctx, args.topicId);\n }\n\n if (args.projectId) {\n return await resolveScopeFromLegacyProjectId(ctx, args.projectId);\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\"\n );\n}\n\nasync function resolveScopeFromTopicId(\n ctx: TopicScopeContext,\n topicId: Id<\"topics\"> | string\n): Promise<TopicProjectScope> {\n const topic = await resolveTopicDocFromTopicId(ctx, topicId);\n if (topic) {\n return await buildTopicScope(ctx, topic, \"topic\");\n }\n\n const nodeScope = await resolveTopicNodeScopeOrNull(ctx, String(topicId));\n if (nodeScope) {\n return nodeScope;\n }\n throw new Error(`Topic not found: ${String(topicId)}`);\n}\n\nasync function resolveTopicDocFromTopicId(\n ctx: TopicScopeContext,\n topicId: Id<\"topics\"> | string\n): Promise<TopicDoc | null> {\n const direct = await tryReadTopicDoc(ctx, topicId, {\n failureLog: \"[topicScope] Failed to load topic by direct id\",\n idLogKey: \"topicId\",\n });\n if (direct) {\n return direct;\n }\n\n const hostTopic = await tryResolveHostTopicById(ctx, String(topicId));\n if (hostTopic) {\n return hostTopic;\n }\n\n return (\n pickPrimaryTopic(await findTopicsByScopeAlias(ctx, String(topicId))) ?? null\n );\n}\n\nasync function resolveScopeFromLegacyProjectId(\n ctx: TopicScopeContext,\n legacyProjectId: string\n): Promise<TopicProjectScope> {\n const directTopic = await resolveDirectLegacyProjectTopic(\n ctx,\n legacyProjectId\n );\n if (directTopic) {\n return await buildTopicScope(ctx, directTopic, \"topic_inferred\", {\n fallbackProjectId: legacyProjectId,\n });\n }\n\n const primary = pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, legacyProjectId)\n );\n if (primary) {\n return await buildTopicScope(ctx, primary, \"project_mapped_topic\", {\n fallbackProjectId: legacyProjectId,\n });\n }\n\n const nodeScope = await resolveTopicNodeScopeOrNull(ctx, legacyProjectId);\n if (nodeScope) {\n return {\n ...nodeScope,\n projectId: nodeScope.projectId ?? legacyProjectId,\n };\n }\n\n throw new Error(\n `Legacy project scope ${legacyProjectId} has no mapped topic.`\n );\n}\n\nasync function resolveDirectLegacyProjectTopic(\n ctx: TopicScopeContext,\n legacyProjectId: string\n): Promise<TopicDoc | null> {\n const directTopic = await tryReadTopicDoc(ctx, legacyProjectId, {\n failureLog: \"[topicScope] Failed to load direct project topic\",\n idLogKey: \"projectId\",\n });\n return directTopic ?? tryResolveHostTopicByLegacyScope(ctx, legacyProjectId);\n}\n\nasync function tryReadTopicDoc(\n ctx: TopicScopeContext,\n id: Id<\"topics\"> | string,\n log: { failureLog: string; idLogKey: \"projectId\" | \"topicId\" }\n): Promise<TopicDoc | null> {\n try {\n return (await ctx.db.get(id)) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(log.failureLog, {\n error,\n [log.idLogKey]: id,\n });\n return null;\n }\n}\n\nasync function buildTopicScope(\n ctx: TopicScopeContext,\n topic: TopicDoc,\n source: TopicProjectScope[\"source\"],\n options: { fallbackProjectId?: string } = {}\n): Promise<TopicProjectScope> {\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n return {\n topicId: topic._id,\n ...(mapped || options.fallbackProjectId\n ? { projectId: mapped ?? options.fallbackProjectId }\n : {}),\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source,\n };\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport {\n getLayerForNodeType,\n isNodeType,\n} from \"@lucern/contracts/schema-helpers/spine/tables/epistemicNodes\";\nimport type { MutationCtx, QueryCtx } from \"./convex\";\nimport { resolveTopicProjectScope, type TopicProjectScope } from \"./topicScope\";\n\ntype StructuredInvariantError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ninterface ScopeLike {\n epistemicLayer?: unknown;\n nodeType?: unknown;\n projectId?: unknown;\n publicationStatus?: unknown;\n tenantId?: unknown;\n topicId?: unknown;\n workspaceId?: unknown;\n}\n\nexport interface RuntimePackMutationContext {\n packInstallScope?: \"tenant\" | \"workspace\";\n packKey?: string;\n toolName?: string;\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 (scopeTenantId && nodeTenantId && scopeTenantId !== nodeTenantId) {\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 (scopeTenantId && edgeTenantId && scopeTenantId !== edgeTenantId) {\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: QueryCtx | MutationCtx,\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 const topicId = normalizeScopeValue(node.topicId);\n if (topicId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n topicId,\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 !(\n args.runtimeToolName ||\n args.runtimePackKey ||\n args.runtimePackInstallScope\n )\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 (!args.runtime?.packKey || args.runtime.packInstallScope !== \"tenant\") {\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: `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","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; keep the existing camelCase filename.\nimport {\n hasProjectedOpinionChanged,\n mkOpinion,\n readOpinionFromRecord,\n type SLOperator,\n type SLOpinion,\n} from \"@lucern/confidence\";\nimport {\n canContinueTransitively,\n canTraverseHop,\n type EdgePropagationSpec,\n getEdgePropagationSpecs,\n getTraversalDirections,\n type PropagationEdgeRecord,\n type PropagationEdgeType,\n type PropagationTraversalDirection,\n} from \"./edges\";\nimport {\n edgeMatchesWorkspaceReasoningScope,\n nodeMatchesWorkspaceReasoningScope,\n} from \"./workspaceIsolation\";\n\nexport interface PropagationDispatchScope {\n tenantId?: string;\n workspaceId?: string;\n}\n\nexport interface PropagationDispatchNode<TNodeId extends string = string> {\n _id?: TNodeId;\n epistemicLayer?: string;\n metadata?: unknown;\n nodeType?: string;\n opinion_a?: number;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n publicationStatus?: string;\n tenantId?: string;\n workspaceId?: string;\n}\n\nexport type PropagationDispatchEdge<TNodeId extends string = string> =\n PropagationEdgeRecord<TNodeId>;\n\nexport interface ConfidencePropagationDispatch<\n TNodeId extends string = string,\n> {\n edgeType: PropagationEdgeType;\n hop: number;\n operator: SLOperator;\n opinion: SLOpinion;\n rationale: string;\n targetNodeId: TNodeId;\n traversedDirection: PropagationTraversalDirection;\n weight: number;\n}\n\ninterface DispatchState<TNodeId extends string = string> {\n hop: number;\n nodeId: TNodeId;\n opinion: SLOpinion;\n visitedNodeIds: Set<string>;\n}\n\ninterface CollectConfidencePropagationDispatchesArgs<\n TNodeId extends string = string,\n> {\n getNode: (\n nodeId: TNodeId\n ) => Promise<PropagationDispatchNode<TNodeId> | null | undefined>;\n queryEdges: (args: {\n direction: PropagationTraversalDirection;\n hop: number;\n nodeId: TNodeId;\n spec: EdgePropagationSpec<TNodeId>;\n }) => Promise<readonly PropagationDispatchEdge<TNodeId>[]>;\n sourceNodeId: TNodeId;\n sourceOpinion: SLOpinion;\n sourceScope?: PropagationDispatchScope;\n traversalSpecs?: readonly EdgePropagationSpec<TNodeId>[];\n}\n\ninterface TraversalScope<TNodeId extends string = string> {\n args: CollectConfidencePropagationDispatchesArgs<TNodeId>;\n dispatchesByTargetId: Map<string, ConfidencePropagationDispatch<TNodeId>>;\n nodeCache: Map<string, PropagationDispatchNode<TNodeId> | null | undefined>;\n opinionCache: Map<string, SLOpinion>;\n traversalSpecs: readonly EdgePropagationSpec<TNodeId>[];\n}\n\nfunction nodeIdToCacheKey<TNodeId extends string>(nodeId: TNodeId): string {\n return String(nodeId);\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\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 buildInitialState<TNodeId extends string>(\n sourceNodeId: TNodeId,\n sourceOpinion: SLOpinion\n): DispatchState<TNodeId> {\n return {\n nodeId: sourceNodeId,\n opinion: sourceOpinion,\n hop: 0,\n visitedNodeIds: new Set([nodeIdToCacheKey(sourceNodeId)]),\n };\n}\n\nfunction extendVisited<TNodeId extends string>(\n currentVisited: Set<string>,\n targetNodeId: TNodeId\n): Set<string> {\n return new Set([...currentVisited, nodeIdToCacheKey(targetNodeId)]);\n}\n\nfunction makeTransitiveState<TNodeId extends string>(\n current: DispatchState<TNodeId>,\n targetNodeId: TNodeId,\n projectedOpinion: SLOpinion,\n nextHop: number\n): DispatchState<TNodeId> {\n return {\n nodeId: targetNodeId,\n opinion: projectedOpinion,\n hop: nextHop,\n visitedNodeIds: extendVisited(current.visitedNodeIds, targetNodeId),\n };\n}\n\nfunction makeDispatchRecord<TNodeId extends string>(\n targetNodeId: TNodeId,\n spec: EdgePropagationSpec<TNodeId>,\n direction: PropagationTraversalDirection,\n edge: PropagationDispatchEdge<TNodeId>,\n projectedOpinion: SLOpinion,\n nextHop: number,\n result: NonNullable<ReturnType<EdgePropagationSpec<TNodeId>[\"operator\"]>>,\n existingDispatch?: ConfidencePropagationDispatch<TNodeId>\n): ConfidencePropagationDispatch<TNodeId> {\n return {\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\nasync function loadCachedNode<TNodeId extends string>(\n scope: TraversalScope<TNodeId>,\n nodeId: TNodeId\n): Promise<PropagationDispatchNode<TNodeId> | null | undefined> {\n const cacheKey = nodeIdToCacheKey(nodeId);\n if (!scope.nodeCache.has(cacheKey)) {\n scope.nodeCache.set(cacheKey, await scope.args.getNode(nodeId));\n }\n\n return scope.nodeCache.get(cacheKey) ?? null;\n}\n\nasync function collectTargetDispatch<TNodeId extends string>(\n state: DispatchState<TNodeId>,\n nextHop: number,\n spec: EdgePropagationSpec<TNodeId>,\n direction: PropagationTraversalDirection,\n edge: PropagationDispatchEdge<TNodeId>,\n queue: DispatchState<TNodeId>[],\n scope: TraversalScope<TNodeId>\n): Promise<void> {\n const sourceScope = scope.args.sourceScope;\n if (sourceScope && !edgeMatchesWorkspaceReasoningScope(edge, sourceScope)) {\n return;\n }\n\n const targetNodeId = resolveTraversalTargetNodeId(edge, direction);\n if (!targetNodeId) {\n return;\n }\n\n const targetNodeIdKey = nodeIdToCacheKey(targetNodeId);\n if (state.visitedNodeIds.has(targetNodeIdKey)) {\n return;\n }\n\n const targetNode = await loadCachedNode(scope, targetNodeId);\n if (targetNode?.nodeType !== \"belief\") {\n return;\n }\n\n if (\n sourceScope &&\n !nodeMatchesWorkspaceReasoningScope(targetNode, sourceScope)\n ) {\n return;\n }\n\n const targetOpinion =\n scope.opinionCache.get(targetNodeIdKey) ?? 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 (!(result && hasProjectedOpinionChanged(targetOpinion, result.opinion))) {\n return;\n }\n\n const projectedOpinion = mkOpinion(\n result.opinion.b,\n result.opinion.d,\n result.opinion.u,\n result.opinion.a\n );\n scope.opinionCache.set(targetNodeIdKey, projectedOpinion);\n\n const existingDispatch = scope.dispatchesByTargetId.get(targetNodeIdKey);\n scope.dispatchesByTargetId.set(\n targetNodeIdKey,\n makeDispatchRecord(\n targetNodeId,\n spec,\n direction,\n edge,\n projectedOpinion,\n nextHop,\n result,\n existingDispatch\n )\n );\n\n if (canContinueTransitively(spec, nextHop)) {\n queue.push(\n makeTransitiveState(state, targetNodeId, projectedOpinion, nextHop)\n );\n }\n}\n\nasync function processTraversalSpec<TNodeId extends string>(\n state: DispatchState<TNodeId>,\n nextHop: number,\n spec: EdgePropagationSpec<TNodeId>,\n queue: DispatchState<TNodeId>[],\n scope: TraversalScope<TNodeId>\n): Promise<void> {\n const sourceNodeId = state.nodeId;\n for (const direction of getTraversalDirections(spec.direction)) {\n const edges = await scope.args.queryEdges({\n nodeId: sourceNodeId,\n spec,\n direction,\n hop: nextHop,\n });\n\n for (const edge of edges) {\n await collectTargetDispatch(\n state,\n nextHop,\n spec,\n direction,\n edge,\n queue,\n scope\n );\n }\n }\n}\n\nasync function processQueuedState<TNodeId extends string>(\n state: DispatchState<TNodeId>,\n queue: DispatchState<TNodeId>[],\n scope: TraversalScope<TNodeId>\n): Promise<void> {\n const nextHop = state.hop + 1;\n for (const spec of scope.traversalSpecs) {\n if (!canTraverseHop(spec, nextHop)) {\n continue;\n }\n\n await processTraversalSpec(state, nextHop, spec, queue, scope);\n }\n}\n\nfunction sortDispatches<TNodeId extends string>(\n dispatches: Iterable<ConfidencePropagationDispatch<TNodeId>>\n): ConfidencePropagationDispatch<TNodeId>[] {\n return Array.from(dispatches).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\nexport async function collectConfidencePropagationDispatches<\n TNodeId extends string = string,\n>(\n args: CollectConfidencePropagationDispatchesArgs<TNodeId>\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\n const scope: TraversalScope<TNodeId> = {\n args,\n dispatchesByTargetId,\n opinionCache,\n nodeCache,\n traversalSpecs,\n };\n\n const queue: DispatchState<TNodeId>[] = [\n buildInitialState(args.sourceNodeId, args.sourceOpinion),\n ];\n\n while (queue.length > 0) {\n const state = queue.shift();\n if (!state) {\n continue;\n }\n\n await processQueuedState(state, queue, scope);\n }\n\n return sortDispatches(dispatchesByTargetId.values());\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\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 {\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { throwStructuredMutationError } from \"@lucern/access-control/structuredMutationError\";\nimport {\n type ConfidencePolicyConfig,\n confidenceFromSL,\n mkOpinion,\n normalizeTupleContradictionPolicy,\n type Opinion,\n readOpinionFromRecord,\n type SLOperator,\n type SLOpinion,\n} from \"@lucern/confidence\";\nimport { v } from \"convex/values\";\nimport {\n type BeliefLifecycleStatus,\n resolveBeliefLifecycleStatus,\n} from \"./beliefLifecycle\";\nimport type { Id, QueryCtx } from \"./convex\";\nimport { internal } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport type { VerificationConfidenceTrigger } from \"./epistemicContractHelpers\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport { nodeMatchesWorkspaceReasoningScope } 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\n// CQ.11: the structured-refusal primitive is the single shared copy in\n// `@lucern/access-control/structuredMutationError` (the same home the shared\n// access gate throws from). Re-exported here so the graph-primitives modules\n// that imported it from this helper keep their import path unchanged.\nexport type { StructuredMutationErrorData } from \"@lucern/access-control/structuredMutationError\";\n// biome-ignore lint/performance/noBarrelFile: Public helper compatibility re-export retained for existing graph-primitives consumers.\nexport { throwStructuredMutationError } from \"@lucern/access-control/structuredMutationError\";\n\ninterface BeliefScopeArgs {\n projectId?: string | null;\n topicId?: string | null;\n}\n\ninterface EpistemicNodeOpinionSource {\n _id?: unknown;\n metadata?: Record<string, unknown> | null;\n opinion_a?: number;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n tupleContradicted?: boolean;\n userId?: string;\n}\n\nexport interface EpistemicNodeOpinionDoc extends EpistemicNodeOpinionSource {\n _creationTime?: number;\n _id: Id<\"epistemicNodes\">;\n anonymizationClass?: string;\n audienceLabel?: string;\n beliefStatus?: unknown;\n canonicalText?: string;\n confidence?: unknown;\n createdAt?: number;\n createdBy?: string;\n epistemicLayer?: string;\n exportClass?: string;\n globalId?: string;\n metadata?: Record<string, unknown> | null;\n nodeType: \"belief\";\n policyTags?: string[];\n predictionMeta?: unknown;\n projectId?: string;\n publicationStatus?: string;\n sensitivityTier?: string;\n status?: string;\n tenantId?: string;\n topicId?: string;\n updatedAt?: number;\n workspaceId?: string;\n}\n\ninterface EpistemicIndexQuery {\n eq(field: string, value: unknown): EpistemicIndexQuery;\n field(field: string): string;\n gt(field: string, value: unknown): EpistemicIndexQuery;\n lt(field: string, value: unknown): EpistemicIndexQuery;\n}\n\ntype EpistemicBeliefCtx = QueryCtx;\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 readFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return;\n }\n const strings = value.filter(\n (item): item is string => typeof item === \"string\" && item.length > 0\n );\n return strings.length === value.length ? strings : undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nexport function readBeliefNodeView(\n value: unknown\n): EpistemicNodeOpinionDoc | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readOptionalString(value._id) as Id<\"epistemicNodes\"> | undefined;\n const nodeType = readOptionalString(value.nodeType);\n if (!(id && nodeType === \"belief\")) {\n return null;\n }\n\n const node: EpistemicNodeOpinionDoc = {\n _id: id,\n nodeType,\n };\n const creationTime = readFiniteNumber(value._creationTime);\n if (creationTime !== undefined) {\n node._creationTime = creationTime;\n }\n const metadata = readRecord(value.metadata);\n if (metadata !== undefined) {\n node.metadata = metadata;\n }\n const opinionA = readFiniteNumber(value.opinion_a);\n if (opinionA !== undefined) {\n node.opinion_a = opinionA;\n }\n const opinionB = readFiniteNumber(value.opinion_b);\n if (opinionB !== undefined) {\n node.opinion_b = opinionB;\n }\n const opinionD = readFiniteNumber(value.opinion_d);\n if (opinionD !== undefined) {\n node.opinion_d = opinionD;\n }\n const opinionU = readFiniteNumber(value.opinion_u);\n if (opinionU !== undefined) {\n node.opinion_u = opinionU;\n }\n const tupleContradicted =\n typeof value.tupleContradicted === \"boolean\"\n ? value.tupleContradicted\n : undefined;\n if (tupleContradicted !== undefined) {\n node.tupleContradicted = tupleContradicted;\n }\n\n const stringFields = {\n anonymizationClass: value.anonymizationClass,\n audienceLabel: value.audienceLabel,\n canonicalText: value.canonicalText,\n createdBy: value.createdBy,\n epistemicLayer: value.epistemicLayer,\n exportClass: value.exportClass,\n globalId: value.globalId,\n projectId: value.projectId,\n publicationStatus: value.publicationStatus,\n sensitivityTier: value.sensitivityTier,\n status: value.status,\n tenantId: value.tenantId,\n topicId: value.topicId,\n userId: value.userId,\n workspaceId: value.workspaceId,\n };\n for (const [field, fieldValue] of Object.entries(stringFields)) {\n const normalized = readOptionalString(fieldValue);\n if (normalized !== undefined) {\n node[field as keyof typeof stringFields] = normalized;\n }\n }\n\n const createdAt = readFiniteNumber(value.createdAt);\n if (createdAt !== undefined) {\n node.createdAt = createdAt;\n }\n const updatedAt = readFiniteNumber(value.updatedAt);\n if (updatedAt !== undefined) {\n node.updatedAt = updatedAt;\n }\n if (value.beliefStatus !== undefined) {\n node.beliefStatus = value.beliefStatus;\n }\n if (value.confidence !== undefined) {\n node.confidence = value.confidence;\n }\n if (value.predictionMeta !== undefined) {\n node.predictionMeta = value.predictionMeta;\n }\n const policyTags = readStringArray(value.policyTags);\n if (policyTags !== undefined) {\n node.policyTags = policyTags;\n }\n\n return node;\n}\n\nfunction readBeliefNodeViews(\n values: readonly unknown[]\n): EpistemicNodeOpinionDoc[] {\n return values.flatMap((value) => {\n const node = readBeliefNodeView(value);\n return node ? [node] : [];\n });\n}\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nexport function assertBaseRateInRange(\n baseRate: number,\n field = \"baseRate\"\n): 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: EpistemicNodeOpinionSource,\n metadata: Record<string, unknown>\n): SLOpinion {\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 (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(node: {\n metadata?: Record<string, unknown> | null;\n}): \"critical\" | \"significant\" | \"minor\" {\n const metadata = node.metadata || {};\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 // biome-ignore lint/suspicious/noBitwiseOperators: Preserve deterministic djb2 hash semantics for persisted belief metadata compatibility.\n hash = (hash << 5) + hash + content.charCodeAt(i);\n // biome-ignore lint/suspicious/noBitwiseOperators: Preserve deterministic djb2 hash semantics for persisted belief metadata compatibility.\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 const activityScopeId = topicId ?? projectId;\n if (!activityScopeId) {\n throw new Error(\n \"Expected belief graph dirty scope to include a topic or project id.\"\n );\n }\n\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n activityScopeId,\n {\n lastActivityAt: Date.now(),\n }\n );\n}\n\nexport async function resolveBeliefScopeOrNull(\n ctx: QueryCtx,\n args: BeliefScopeArgs\n) {\n if (!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: EpistemicIndexQuery) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n );\n const rows =\n typeof args?.scanLimit === \"number\"\n ? await baseQuery.order(\"desc\").take(args.scanLimit)\n : await baseQuery.collect();\n const nodes = readBeliefNodeViews(rows);\n const scopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, scope)\n );\n\n if (!args?.status) {\n return scopedNodes;\n }\n\n return scopedNodes.filter(\n (node: EpistemicNodeOpinionDoc) => node.status === args.status\n );\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: EpistemicNodeOpinionDoc) {\n const meta = node.metadata || {};\n const worktreeId = resolveBeliefWorktreeId(meta);\n const tupleContradicted =\n readTupleContradictedFlag(node.tupleContradicted) ??\n readTupleContradictedFlag(meta.tupleContradicted) ??\n false;\n\n return {\n _id: node._id,\n _epistemicNodeId: node._id,\n _creationTime: node._creationTime,\n belief: node.canonicalText,\n formulation: node.canonicalText,\n projectId: node.projectId,\n topicId: node.topicId,\n userId: node.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: EpistemicIndexQuery) =>\n q.eq(\"beliefId\", beliefNodeId)\n )\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: EpistemicIndexQuery) =>\n q.eq(\"isActive\", true)\n )\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","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Split confidence operations out of epistemicBeliefs.ts. */\n\nimport { requireScopeWriteAccess } from \"@lucern/access-control/access\";\nimport {\n confidenceFromSL,\n detectTupleContradiction,\n evaluateTupleContradictionTransition,\n mkOpinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport {\n isPreValidationBeliefStatus,\n promoteBeliefStatusAfterScoring,\n} from \"./beliefLifecycle\";\nimport {\n collectConfidencePropagationDispatches,\n type PropagationDispatchEdge,\n type PropagationDispatchNode,\n} from \"./confidencePropagationDispatch\";\nimport type { Id, MutationCtx } from \"./convex\";\nimport { internal, internalMutation } from \"./convex\";\nimport {\n type BeliefConfidenceTrigger,\n buildBeliefConfidenceRow,\n deriveTupleContradictionSeverity,\n formatTupleContradictionDescription,\n getActiveConfidencePolicy,\n hasCompletedWorktreeForBelief,\n readBeliefOpinionSnapshot,\n readTupleContradictedFlag,\n resolveBeliefStatus,\n throwStructuredMutationError,\n} from \"./epistemicBeliefs.helpers\";\nimport { resolveNodeScopeForWorkspaceIsolation } from \"./workspaceIsolation\";\n\ninterface EdgePropagationIndexScope {\n eq(field: string, value: unknown): EdgePropagationIndexScope;\n}\n\ninterface BeliefConfidenceChangeArgs {\n authenticatedUserId: string;\n baseRate?: number;\n belief: number;\n disbelief: number;\n nodeId: Id<\"epistemicNodes\">;\n rationale?: string;\n slOperator?: SLOperator;\n trigger: BeliefConfidenceTrigger;\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringWorktreeId?: string;\n uncertainty: number;\n}\n\ninterface BeliefConfidenceChangeResult {\n beliefConfidenceId: Id<\"beliefConfidence\">;\n newConfidence: number;\n nodeId: Id<\"epistemicNodes\">;\n opinion: { a: number; b: number; d: number; u: number };\n previousConfidence: number;\n}\n\ninterface ConfidenceBeliefNode\n extends PropagationDispatchNode<Id<\"epistemicNodes\">> {\n _id: Id<\"epistemicNodes\">;\n beliefStatus?: unknown;\n confidence?: number;\n globalId?: string;\n metadata?: Record<string, unknown>;\n nodeType: \"belief\";\n predictionMeta?: Record<string, unknown>;\n projectId: string;\n status?: string;\n topicId?: string;\n tupleContradicted?: boolean;\n}\n\ninterface PropagateConfidenceChangeArgs {\n nodeId: Id<\"epistemicNodes\">;\n opinion_a: number;\n opinion_b: number;\n opinion_d: number;\n opinion_u: number;\n userId: string;\n}\n\ntype ConfidencePolicy = Awaited<ReturnType<typeof getActiveConfidencePolicy>>;\ntype TupleTransition = ReturnType<typeof evaluateTupleContradictionTransition>;\n\ninterface ConfidenceChangeState {\n confidencePolicy: ConfidencePolicy;\n currentBeliefStatus: ReturnType<typeof resolveBeliefStatus>;\n derivedConfidence: number;\n existingMetadata: Record<string, unknown>;\n isFirstScoring: boolean;\n newBeliefStatus: ReturnType<typeof promoteBeliefStatusAfterScoring>;\n nextOpinion: { a: number; b: number; d: number; u: number };\n previousConfidence: number;\n previousTupleContradicted: boolean;\n storedRationale: string;\n tupleContradictionDescription: string;\n tupleTransition: TupleTransition;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? (value as Id<TableName>)\n : undefined;\n}\n\nfunction readOptionalBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction readOptionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nfunction readConfidenceBeliefNode(value: unknown): ConfidenceBeliefNode | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(value._id);\n const nodeType = readOptionalString(value.nodeType);\n const projectId = readOptionalString(value.projectId);\n if (!(id && nodeType === \"belief\" && projectId)) {\n return null;\n }\n\n const node: ConfidenceBeliefNode = {\n _id: id,\n nodeType,\n projectId,\n };\n const confidence = readOptionalNumber(value.confidence);\n const epistemicLayer = readOptionalString(value.epistemicLayer);\n const globalId = readOptionalString(value.globalId);\n const metadata = readRecord(value.metadata);\n const opinionA = readOptionalNumber(value.opinion_a);\n const opinionB = readOptionalNumber(value.opinion_b);\n const opinionD = readOptionalNumber(value.opinion_d);\n const opinionU = readOptionalNumber(value.opinion_u);\n const predictionMeta = readRecord(value.predictionMeta);\n const publicationStatus = readOptionalString(value.publicationStatus);\n const status = readOptionalString(value.status);\n const tenantId = readOptionalString(value.tenantId);\n const topicId = readOptionalString(value.topicId);\n const tupleContradicted = readOptionalBoolean(value.tupleContradicted);\n const workspaceId = readOptionalString(value.workspaceId);\n\n if (confidence !== undefined) {\n node.confidence = confidence;\n }\n if (epistemicLayer !== undefined) {\n node.epistemicLayer = epistemicLayer;\n }\n if (globalId !== undefined) {\n node.globalId = globalId;\n }\n if (metadata !== undefined) {\n node.metadata = metadata;\n }\n if (opinionA !== undefined) {\n node.opinion_a = opinionA;\n }\n if (opinionB !== undefined) {\n node.opinion_b = opinionB;\n }\n if (opinionD !== undefined) {\n node.opinion_d = opinionD;\n }\n if (opinionU !== undefined) {\n node.opinion_u = opinionU;\n }\n if (predictionMeta !== undefined) {\n node.predictionMeta = predictionMeta;\n }\n if (publicationStatus !== undefined) {\n node.publicationStatus = publicationStatus;\n }\n if (status !== undefined) {\n node.status = status;\n }\n if (tenantId !== undefined) {\n node.tenantId = tenantId;\n }\n if (topicId !== undefined) {\n node.topicId = topicId;\n }\n if (tupleContradicted !== undefined) {\n node.tupleContradicted = tupleContradicted;\n }\n if (workspaceId !== undefined) {\n node.workspaceId = workspaceId;\n }\n\n return node;\n}\n\nfunction readPropagationEdge(\n value: unknown\n): PropagationDispatchEdge<Id<\"epistemicNodes\">> | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const edgeType = readOptionalString(value.edgeType);\n if (!edgeType) {\n return null;\n }\n\n const edge: PropagationDispatchEdge<Id<\"epistemicNodes\">> = { edgeType };\n const fromNodeId = readConvexId<\"epistemicNodes\">(value.fromNodeId);\n const tenantId = readOptionalString(value.tenantId);\n const toNodeId = readConvexId<\"epistemicNodes\">(value.toNodeId);\n const weight = readOptionalNumber(value.weight);\n const workspaceId = readOptionalString(value.workspaceId);\n\n if (fromNodeId !== undefined) {\n edge.fromNodeId = fromNodeId;\n }\n if (tenantId !== undefined) {\n edge.tenantId = tenantId;\n }\n if (toNodeId !== undefined) {\n edge.toNodeId = toNodeId;\n }\n if (weight !== undefined) {\n edge.weight = weight;\n }\n if (workspaceId !== undefined) {\n edge.workspaceId = workspaceId;\n }\n\n return edge;\n}\n\nfunction readRowList<T>(\n values: readonly unknown[],\n reader: (value: unknown) => T | null\n): T[] {\n return values.flatMap((value) => {\n const row = reader(value);\n return row ? [row] : [];\n });\n}\n\nexport async function applyBeliefConfidenceChange(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs\n): Promise<BeliefConfidenceChangeResult> {\n const now = Date.now();\n const node = await requireConfidenceBeliefNode(ctx, args);\n const state = await buildConfidenceChangeState(ctx, node, args);\n await assertConfidenceScoringPolicySatisfied(ctx, args, state);\n const tupleContradictionId = await createTupleContradictionIfNeeded(\n ctx,\n args,\n node,\n state\n );\n await patchBeliefConfidenceState(ctx, args, state);\n await scheduleFirstScoringThemeEdges(ctx, args, node, state);\n const beliefConfidenceId = await insertBeliefConfidenceRecord(\n ctx,\n args,\n state,\n tupleContradictionId,\n now\n );\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n await insertConfidenceAudit(\n ctx,\n args,\n node,\n state,\n tupleContradictionId,\n now\n );\n await insertTupleTransitionAuditIfNeeded(\n ctx,\n args,\n node,\n state,\n tupleContradictionId,\n now\n );\n await scheduleConfidenceFollowups(ctx, args, node, state);\n\n return {\n nodeId: args.nodeId,\n previousConfidence: state.previousConfidence,\n newConfidence: state.derivedConfidence,\n opinion: state.nextOpinion,\n beliefConfidenceId,\n };\n}\n\nasync function requireConfidenceBeliefNode(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs\n): Promise<ConfidenceBeliefNode> {\n const node = readConfidenceBeliefNode(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 await requireScopeWriteAccess(ctx, node.projectId, args.authenticatedUserId);\n return node;\n}\n\nasync function buildConfidenceChangeState(\n ctx: MutationCtx,\n node: ConfidenceBeliefNode,\n args: BeliefConfidenceChangeArgs\n): Promise<ConfidenceChangeState> {\n const existingMetadata = readNodeMetadata(node);\n const currentBeliefStatus = resolveBeliefStatus(node, existingMetadata);\n const confidencePolicy = await getActiveConfidencePolicy(ctx);\n const previousConfidence = node.confidence || 0.5;\n const predictionMeta = node.predictionMeta || existingMetadata.predictionMeta;\n const previousOpinion = readBeliefOpinionSnapshot(node, existingMetadata);\n const nextOpinion = {\n b: args.belief,\n d: args.disbelief,\n u: args.uncertainty,\n a: args.baseRate ?? 0.5,\n };\n const derivedConfidence = confidenceFromSL(\n nextOpinion.b,\n nextOpinion.d,\n nextOpinion.u,\n nextOpinion.a\n );\n const isFirstScoring =\n typeof node.confidence !== \"number\" || !Number.isFinite(node.confidence);\n const previousTupleContradicted =\n readTupleContradictedFlag(node.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 const storedRationale =\n args.rationale ??\n `Confidence changed from ${previousConfidence.toFixed(2)} (nodeId: ${args.nodeId})`;\n\n return {\n confidencePolicy,\n currentBeliefStatus,\n derivedConfidence,\n existingMetadata,\n isFirstScoring,\n newBeliefStatus,\n nextOpinion,\n previousConfidence,\n previousTupleContradicted,\n storedRationale,\n tupleContradictionDescription,\n tupleTransition,\n };\n}\n\nfunction readNodeMetadata(node: ConfidenceBeliefNode): Record<string, unknown> {\n return node.metadata ?? {};\n}\n\nasync function assertConfidenceScoringPolicySatisfied(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n state: ConfidenceChangeState\n): Promise<void> {\n if (\n state.confidencePolicy.scoringMode !== \"after_worktree\" ||\n !isPreValidationBeliefStatus(state.currentBeliefStatus)\n ) {\n return;\n }\n const hasCompletedWorktree = await hasCompletedWorktreeForBelief(\n ctx,\n args.nodeId\n );\n if (hasCompletedWorktree) {\n return;\n }\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\nasync function createTupleContradictionIfNeeded(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState\n): Promise<Id<\"contradictions\"> | undefined> {\n if (!state.tupleTransition.crossedIntoTupleContradiction) {\n return;\n }\n return (await ctx.runMutation(\"contradictions:create\", {\n projectId: node.projectId,\n topicId: node.topicId,\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: state.tupleContradictionDescription,\n createdBy: args.authenticatedUserId,\n })) as Id<\"contradictions\">;\n}\n\nasync function patchBeliefConfidenceState(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n state: ConfidenceChangeState\n): Promise<void> {\n await ctx.db.patch(args.nodeId, {\n confidence: state.derivedConfidence,\n beliefStatus: state.newBeliefStatus,\n tupleContradicted: state.tupleTransition.tupleContradicted,\n updatedAt: Date.now(),\n opinion_b: state.nextOpinion.b,\n opinion_d: state.nextOpinion.d,\n opinion_u: state.nextOpinion.u,\n opinion_a: state.nextOpinion.a,\n metadata: {\n ...state.existingMetadata,\n beliefStatus: state.newBeliefStatus,\n slBelief: state.nextOpinion.b,\n slDisbelief: state.nextOpinion.d,\n slUncertainty: state.nextOpinion.u,\n slBaseRate: state.nextOpinion.a,\n tupleContradicted: state.tupleTransition.tupleContradicted,\n },\n });\n}\n\nasync function scheduleFirstScoringThemeEdges(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState\n): Promise<void> {\n if (!state.isFirstScoring) {\n return;\n }\n const themeNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic\", (q) => q.eq(\"topicId\", node.topicId))\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 continue;\n }\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: state.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\nasync function insertBeliefConfidenceRecord(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n state: ConfidenceChangeState,\n tupleContradictionId: Id<\"contradictions\"> | undefined,\n now: number\n): Promise<Id<\"beliefConfidence\">> {\n return await ctx.db.insert(\"beliefConfidence\", {\n ...buildBeliefConfidenceRow({\n beliefId: args.nodeId as Id<\"epistemicNodes\">,\n belief: state.nextOpinion.b,\n disbelief: state.nextOpinion.d,\n uncertainty: state.nextOpinion.u,\n baseRate: state.nextOpinion.a,\n trigger: args.trigger,\n rationale: state.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 });\n}\n\nasync function insertConfidenceAudit(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState,\n tupleContradictionId: Id<\"contradictions\"> | undefined,\n now: number\n): Promise<void> {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"confidence_changed\",\n previousState: {\n confidence: state.previousConfidence,\n tupleContradicted: state.previousTupleContradicted,\n },\n newState: {\n opinion: state.nextOpinion,\n confidence: state.derivedConfidence,\n trigger: args.trigger,\n rationale: state.storedRationale,\n tupleContradicted: state.tupleTransition.tupleContradicted,\n tupleContradictionPolicy: state.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\nasync function insertTupleTransitionAuditIfNeeded(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState,\n tupleContradictionId: Id<\"contradictions\"> | undefined,\n now: number\n): Promise<void> {\n if (\n !(\n state.tupleTransition.crossedIntoTupleContradiction ||\n state.tupleTransition.crossedOutOfTupleContradiction\n )\n ) {\n return;\n }\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n previousState: { tupleContradicted: state.previousTupleContradicted },\n newState: {\n tupleContradicted: state.tupleTransition.tupleContradicted,\n action: state.tupleTransition.crossedIntoTupleContradiction\n ? \"tuple_contradiction_detected\"\n : \"tuple_contradiction_cleared\",\n opinion: state.nextOpinion,\n tupleContradictionPolicy: state.tupleTransition.policy,\n ...(tupleContradictionId\n ? { tupleContradictionId: String(tupleContradictionId) }\n : {}),\n },\n rationale: tupleAuditRationale(state),\n changedBy: args.authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n topicId: node.topicId,\n });\n}\n\nfunction tupleAuditRationale(state: ConfidenceChangeState): string {\n if (state.tupleTransition.crossedIntoTupleContradiction) {\n return state.tupleContradictionDescription;\n }\n return `Tuple-space contradiction cleared: b=${state.nextOpinion.b.toFixed(2)}, d=${state.nextOpinion.d.toFixed(2)} no longer exceed the configured policy thresholds.`;\n}\n\nasync function scheduleConfidenceFollowups(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState\n): Promise<void> {\n if (Math.abs(state.derivedConfidence - state.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 if (node.workspaceId && node.tenantId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.publication.evaluateNodePublication,\n { nodeId: args.nodeId }\n );\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: MutationCtx, args: PropagateConfidenceChangeArgs) => {\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 = readConfidenceBeliefNode(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 readRowList(\n await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\n direction === \"outgoing\" ? \"by_from_type\" : \"by_to_type\",\n (q: EdgePropagationIndexScope) =>\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 readPropagationEdge\n ),\n getNode: async (nodeId) =>\n readConfidenceBeliefNode(await ctx.db.get(nodeId)),\n });\n\n for (const dispatch of dispatches) {\n const pressureLabel = propagationPressureLabel(\n dispatch.edgeType,\n dispatch.weight\n );\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","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Split belief confidence and lifecycle mutations out of epistemicBeliefs.ts. */\n\nimport { requireScopeWriteAccess } from \"@lucern/access-control/access\";\nimport type { SLOperator } from \"@lucern/confidence\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx } from \"./convex\";\nimport { internal, internalMutation, mutation } from \"./convex\";\nimport { applyBeliefConfidenceChange } from \"./epistemicBeliefs.confidence\";\nimport {\n type BeliefConfidenceTrigger,\n readBeliefNodeView,\n requireAuthenticatedUserId,\n} from \"./epistemicBeliefs.helpers\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\ninterface AppendSlScoringArgs {\n baseRate: number;\n belief: number;\n disbelief: number;\n nodeId: Id<\"epistemicNodes\">;\n rationale?: string;\n slOperator?: SLOperator;\n trigger: BeliefConfidenceTrigger;\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringWorktreeId?: string;\n uncertainty: number;\n userId: string;\n}\n\ntype MutableBeliefStatus = \"active\" | \"archived\" | \"superseded\";\n\ninterface UpdateStatusArgs {\n nodeId: Id<\"epistemicNodes\">;\n reason?: string;\n status: MutableBeliefStatus;\n userId: string;\n}\n\ninterface ArchiveArgs {\n nodeId: Id<\"epistemicNodes\">;\n reason?: string;\n userId: string;\n}\n\ninterface UpdateRationaleArgs {\n nodeId: Id<\"epistemicNodes\">;\n rationale?: string;\n userId: string;\n}\n\ninterface UpdateStatusInternalArgs extends UpdateStatusArgs {\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n runtimePackKey?: string;\n runtimeToolName?: string;\n}\n\nexport const appendSlScoring = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n // SL opinion — the ONLY confidence input (EK-7)\n belief: v.number(), // b: evidence FOR [0,1]\n disbelief: v.number(), // d: evidence AGAINST [0,1]\n uncertainty: v.number(), // u: lack of evidence [0,1]\n baseRate: v.number(), // a: prior probability [0,1]\n trigger: v.union(\n v.literal(\"evidence_added\"),\n v.literal(\"evidence_removed\"),\n v.literal(\"contradiction_detected\"),\n v.literal(\"contradiction_resolved\"),\n v.literal(\"agent_assessment\"),\n v.literal(\"worktree_outcome\"),\n v.literal(\"worktree_completed\"),\n // SL-specific triggers\n v.literal(\"fusion\"),\n v.literal(\"discount\"),\n v.literal(\"deduction\"),\n v.literal(\"backfill_synthetic\")\n ),\n rationale: v.optional(v.string()),\n userId: v.string(),\n // SL operator provenance (optional — defaults inside the SL scorer)\n slOperator: v.optional(\n v.union(\n v.literal(\"cumulative_fusion\"),\n v.literal(\"averaging_fusion\"),\n v.literal(\"trust_discount\"),\n v.literal(\"conditional_deduction\"),\n v.literal(\"dependency_cascade\"),\n v.literal(\"negation\"),\n v.literal(\"constraint_fusion\"),\n v.literal(\"no_op\"),\n v.literal(\"prior_seed\")\n )\n ),\n triggeringEvidenceId: v.optional(v.id(\"epistemicNodes\")),\n triggeringWorktreeId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: AppendSlScoringArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const result = await applyBeliefConfidenceChange(ctx, {\n nodeId: args.nodeId,\n belief: args.belief,\n disbelief: args.disbelief,\n uncertainty: args.uncertainty,\n baseRate: args.baseRate,\n trigger: args.trigger,\n rationale: args.rationale,\n authenticatedUserId,\n slOperator: args.slOperator,\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringWorktreeId: args.triggeringWorktreeId,\n });\n\n // Schedule edge-defined SL propagation through graph edges (EK-7, LKC-5)\n // Only propagate if confidence actually changed (avoid noise)\n if (Math.abs(result.newConfidence - result.previousConfidence) >= 0.01) {\n await ctx.scheduler.runAfter(\n 0,\n internal.epistemicBeliefs.propagateConfidenceChange,\n {\n nodeId: args.nodeId,\n opinion_b: args.belief,\n opinion_d: args.disbelief,\n opinion_u: args.uncertainty,\n opinion_a: args.baseRate ?? 0.5,\n userId: authenticatedUserId,\n }\n );\n }\n\n return {\n nodeId: result.nodeId,\n previousConfidence: result.previousConfidence,\n newConfidence: result.newConfidence,\n opinion: result.opinion,\n };\n },\n});\n\n// Two-axis model (valence/certainty) — REMOVED in EK-7.\n// All confidence movement is evidence-backed SL scoring, not user-authored state.\n\n// =============================================================================\n// UPDATE STATUS\n// =============================================================================\n\n/**\n * Update a belief's status.\n */\nexport const updateStatus = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n ),\n reason: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateStatusArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = readBeliefNodeView(await ctx.db.get(args.nodeId));\n if (!node) {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireScopeWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const previousStatus = node.status;\n\n // Update the node's status and metadata in a single atomic patch\n const metadata = node.metadata ?? {};\n await ctx.db.patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n metadata: {\n ...metadata,\n status: args.status,\n },\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n previousState: { status: previousStatus },\n newState: { status: args.status, reason: args.reason },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return { nodeId: args.nodeId, previousStatus, newStatus: args.status };\n },\n});\n\n// =============================================================================\n// ARCHIVE\n// =============================================================================\n\n/**\n * Archive a belief (soft delete).\n * Lucern invariant: Beliefs are never deleted, only archived.\n */\nexport const archive = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n reason: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: ArchiveArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const node = readBeliefNodeView(await ctx.db.get(args.nodeId));\n if (!node) {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireScopeWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n return await ctx.runMutation(\n // Use updateStatus internally\n internal.epistemicBeliefs.updateStatusInternal,\n {\n nodeId: args.nodeId,\n status: \"archived\",\n reason: args.reason,\n userId: authenticatedUserId,\n }\n );\n },\n});\n\n// =============================================================================\n// UPDATE RATIONALE\n// =============================================================================\n\n/**\n * Update a belief rationale without changing formulation.\n * Formulation mutability rules are unchanged (use fork/refine paths for wording).\n */\nexport const updateRationale = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateRationaleArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = readBeliefNodeView(await ctx.db.get(args.nodeId));\n if (!node) {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireScopeWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const metadata = node.metadata ?? {};\n const previousRationale =\n typeof metadata.rationale === \"string\" ? metadata.rationale : undefined;\n const nextRationale = args.rationale?.trim();\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n rationale:\n nextRationale && nextRationale.length > 0 ? nextRationale : undefined,\n },\n updatedAt: now,\n });\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n previousState: { rationale: previousRationale },\n newState: {\n rationale:\n nextRationale && nextRationale.length > 0 ? nextRationale : undefined,\n },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return {\n nodeId: args.nodeId,\n previousRationale,\n newRationale: nextRationale,\n };\n },\n});\n\n// Internal version for use by other mutations\nexport const updateStatusInternal = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n ),\n reason: v.optional(v.string()),\n userId: v.string(),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateStatusInternalArgs) => {\n const now = Date.now();\n\n const node = readBeliefNodeView(await ctx.db.get(args.nodeId));\n if (!node) {\n throw new Error(\"Belief not found\");\n }\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: await resolveNodeScopeForWorkspaceIsolation(ctx, node),\n mutationName: \"epistemicBeliefs.updateStatusInternal\",\n });\n\n const previousStatus = node.status;\n\n await ctx.db.patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n previousState: { status: previousStatus },\n newState: { status: args.status, reason: args.reason },\n changedBy: args.userId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return { nodeId: args.nodeId, previousStatus, newStatus: args.status };\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/convex.ts","../src/beliefLifecycle.ts","../src/edges/contains.ts","../src/edges/utils.ts","../src/edges/contradicts.ts","../src/edges/depends-on.ts","../src/edges/derived-from.ts","../src/edges/elaborates.ts","../src/edges/informs.ts","../src/edges/propagation-types.ts","../src/edges/refutes.ts","../src/edges/supports.ts","../src/edges/tests.ts","../src/edges/index.ts","../src/debug.ts","../src/topicScope.ts","../src/workspaceIsolation.ts","../src/confidencePropagationDispatch.ts","../src/epistemicBeliefs.helpers.ts","../src/epistemicBeliefs.confidence.ts","../src/epistemicBeliefs.lifecycle.ts"],"names":["project","canContinueTransitively","canTraverseHop","isPropagationTraversalDirection","normalizeScopeValue","mkOpinion","v","readOpinionFromRecord","isRecord","readOptionalString","readRecord","throwStructuredMutationError","confidenceFromSL","permissiveReturn","requireScopeWriteAccess"],"mappings":"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","file":"epistemicBeliefs.lifecycle.js","sourcesContent":["import type { Doc as AccessControlDoc } from \"@lucern/access-control/convex\";\nimport {\n type UnsafeConvexAnyApi,\n unsafeConvexAnyApi,\n} from \"@lucern/contracts/convex/unsafeAnyApi\";\nimport {\n actionGeneric,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\n// TODO(FR.11-structural): `api`/`internal`/`components` are `anyApi as any`\n// because this module source tree is bundled into the kernel host at deploy time\n// and has NO top-level Convex `_generated/` directory to import a typed surface\n// from. Every `api.*` / `internal.*` / string-literal cross-component ref in this\n// module (topicScope.ts, topicProjectOverlay.ts, questionEvidenceLinks.ts,\n// beliefEvidenceLinks*.ts, epistemicQuestions.helpers.ts) inherits `any` from\n// here. The fix is structural — generate a per-module typed surface or a shared\n// typed function-reference manifest (template: the typed `components.controlPlane`\n// in modules/control-plane/src/component/convex.ts and the\n// `KERNEL_API_REF_MANIFEST` pattern in packages/server-core/src/kernelApi.ts) —\n// owned by the FR.11 closing/synthesis pass, not a mechanical swap.\nconst unsafeApi = unsafeConvexAnyApi(\n \"graph-primitives top-level module bundle lacks a committed Convex _generated/api surface\"\n);\nexport const api = unsafeApi;\nexport const components =\n componentsGeneric() as unknown as UntypedFunctionReferenceSurface;\nexport const internal = unsafeApi;\n\ntype UntypedFunctionReferenceSurface = UnsafeConvexAnyApi;\ntype BoundaryValue = UntypedFunctionReferenceSurface[string];\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> =\n AccessControlDoc<TableName>;\nexport type DataModel = Record<TableNames, unknown>;\ninterface IndexRangeBuilder {\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n field(fieldName: string): string;\n gt(fieldName: string, value: unknown): IndexRangeBuilder;\n gte(fieldName: string, value: unknown): IndexRangeBuilder;\n lt(fieldName: string, value: unknown): IndexRangeBuilder;\n lte(fieldName: string, value: unknown): IndexRangeBuilder;\n}\ninterface FilterBuilder {\n and(...clauses: unknown[]): FilterBuilder;\n eq(left: unknown, right: unknown): FilterBuilder;\n field(fieldName: string): string;\n gt(left: unknown, right: unknown): FilterBuilder;\n gte(left: unknown, right: unknown): FilterBuilder;\n lt(left: unknown, right: unknown): FilterBuilder;\n lte(left: unknown, right: unknown): FilterBuilder;\n neq(left: unknown, right: unknown): FilterBuilder;\n or(...clauses: unknown[]): FilterBuilder;\n [operator: string]: unknown;\n}\ninterface QueryInitializer<TableName extends TableNames> {\n collect(): Promise<Doc<TableName>[]>;\n filter(predicate: (q: FilterBuilder) => unknown): QueryInitializer<TableName>;\n first(): Promise<Doc<TableName> | null>;\n order(direction: \"asc\" | \"desc\"): QueryInitializer<TableName>;\n take(limit: number): Promise<Doc<TableName>[]>;\n unique(): Promise<Doc<TableName> | null>;\n withIndex(\n indexName: string,\n range?: (q: IndexRangeBuilder) => unknown\n ): QueryInitializer<TableName>;\n withSearchIndex(\n indexName: string,\n search?: (q: IndexRangeBuilder) => unknown\n ): QueryInitializer<TableName>;\n}\nexport interface DatabaseReader {\n get<TableName extends TableNames>(\n id: unknown\n ): Promise<Doc<TableName> | null>;\n normalizeId?<TableName extends TableNames>(\n tableName: TableName,\n id: string\n ): Id<TableName> | null;\n query<TableName extends TableNames>(\n tableName: TableName\n ): QueryInitializer<TableName>;\n}\nexport type DatabaseWriter = DatabaseReader & {\n insert<TableName extends TableNames>(\n tableName: TableName,\n value: Record<string, unknown>\n ): Promise<Id<TableName>>;\n patch<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n replace<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n delete<TableName extends TableNames>(id: Id<TableName>): Promise<void>;\n};\ninterface Scheduler {\n runAfter(\n delayMs: number,\n functionReference: unknown,\n args?: unknown\n ): Promise<void>;\n}\ninterface AuthReader {\n getUserIdentity(): Promise<{\n readonly subject: string;\n readonly [claimName: string]: unknown;\n } | null>;\n}\ninterface RuntimeInvoker {\n runAction<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n runMutation<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n runQuery<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n}\nexport type QueryCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseReader;\n scheduler: Scheduler;\n};\nexport type MutationCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseWriter;\n scheduler: Scheduler;\n};\nexport type ActionCtx = RuntimeInvoker & {\n auth: AuthReader;\n scheduler: Scheduler;\n};\n\ntype ConvexFunctionBuilder<Ctx> = <\n Args = BoundaryValue,\n Result = BoundaryValue,\n>(definition: {\n args?: unknown;\n handler: (ctx: Ctx, args: Args) => Result;\n returns?: unknown;\n}) => unknown;\n\ntype OptionalHandlerConvexFunctionBuilder<Ctx> = <\n Args = BoundaryValue,\n Result = BoundaryValue,\n>(definition: {\n args?: unknown;\n handler?: (ctx: Ctx, args: Args) => Result;\n returns?: unknown;\n}) => unknown;\n\nexport const action =\n actionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const httpAction =\n httpActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalAction =\n internalActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalMutation =\n internalMutationGeneric as unknown as OptionalHandlerConvexFunctionBuilder<MutationCtx>;\nexport const internalQuery =\n internalQueryGeneric as unknown as OptionalHandlerConvexFunctionBuilder<QueryCtx>;\nexport const mutation =\n mutationGeneric as unknown as ConvexFunctionBuilder<MutationCtx>;\nexport const query = queryGeneric as unknown as ConvexFunctionBuilder<QueryCtx>;\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\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 (normalized !== null && isPreValidationBeliefStatus(normalizedDirect)) {\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 type { EdgePropagationSpec } from \"./propagation-types\";\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","import {\n applyNegativeEvidence,\n applyNegativeSupport,\n cumulativeFusion,\n type EdgeMetadata,\n type PropagationResult,\n project,\n type SLOpinion,\n trustDiscount,\n} from \"@lucern/confidence\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeRecord,\n} from \"./propagation-types\";\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 \"./propagation-types\";\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","import {\n conditionalDeduction,\n dampedDependencyCascade,\n mkOpinion,\n project,\n} from \"@lucern/confidence\";\nimport type { EdgePropagationSpec } from \"./propagation-types\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n readEdgeMetadata,\n} 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 \"./propagation-types\";\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","import type { EdgePropagationSpec } from \"./propagation-types\";\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","import type { EdgePropagationSpec } from \"./propagation-types\";\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","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 interface PropagationEdgeRecord<TNodeId extends string = string> {\n conditionalA?: EdgeMetadata[\"conditionalA\"] | null;\n conditionalNotA?: EdgeMetadata[\"conditionalNotA\"] | null;\n constraint?: EdgeMetadata[\"constraint\"] | null;\n edgeType: string;\n fromNodeId?: TNodeId | null;\n normalization?: EdgeMetadata[\"normalization\"] | null;\n propagation?: EdgeMetadata[\"propagation\"] | null;\n tenantId?: string;\n toNodeId?: TNodeId | null;\n weight?: number | null;\n workspaceId?: string;\n}\n\nexport interface EdgePropagationSpec<TNodeId extends string = string> {\n damping: number;\n description: string;\n direction: PropagationSpecDirection;\n edgeType: PropagationEdgeType;\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 transitivity: \"none\" | \"damped\" | \"full\";\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 \"./propagation-types\";\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","import type { EdgePropagationSpec } from \"./propagation-types\";\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","import type { EdgePropagationSpec } from \"./propagation-types\";\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","import { containsPropagationSpec } from \"./contains\";\nimport { contradictsPropagationSpec } from \"./contradicts\";\nimport { dependsOnPropagationSpec } from \"./depends-on\";\nimport { derivedFromPropagationSpec } from \"./derived-from\";\nimport { elaboratesPropagationSpec } from \"./elaborates\";\nimport { informsPropagationSpec } from \"./informs\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeType,\n PropagationSpecDirection,\n PropagationTraversalDirection,\n} from \"./propagation-types\";\nimport {\n canContinueTransitively as importedCanContinueTransitively,\n canTraverseHop as importedCanTraverseHop,\n isPropagationTraversalDirection as importedIsPropagationTraversalDirection,\n} from \"./propagation-types\";\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 \"./propagation-types\";\n\nconst canContinueTransitively = importedCanContinueTransitively;\nconst canTraverseHop = importedCanTraverseHop;\nconst isPropagationTraversalDirection = importedIsPropagationTraversalDirection;\n\nexport {\n canContinueTransitively,\n canTraverseHop,\n isPropagationTraversalDirection,\n};\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","interface GraphPrimitiveDebugEnvironment {\n process?: {\n env?: Record<string, string | undefined>;\n };\n}\n\nfunction isGraphPrimitiveDebugEnabled(): boolean {\n const env = (globalThis as GraphPrimitiveDebugEnvironment).process?.env;\n return (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG === \"1\" || env?.LUCERN_GRAPH_DEBUG === \"1\"\n );\n}\n\nexport function formatGraphPrimitiveError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error === null) {\n return \"null\";\n }\n if (error === undefined) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(error);\n } catch {\n return Object.prototype.toString.call(error);\n }\n}\n\nexport function debugGraphPrimitiveFallback(\n message: string,\n context?: Record<string, unknown>\n): void {\n if (!isGraphPrimitiveDebugEnabled()) {\n return;\n }\n console.debug(message, context ?? {});\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport type { Id } from \"./convex\";\nimport { api as appApi } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScopeProjectId\";\n\ntype UnknownRecord = Record<string, unknown>;\n\ninterface TopicScopeContext {\n db: {\n get(id: string): Promise<unknown>;\n query(tableName: string): TopicScopeQuery;\n };\n runQuery?: <TResult>(fnRef: unknown, args: unknown) => Promise<TResult>;\n}\n\ninterface TopicScopeQuery {\n collect(): Promise<unknown[]>;\n first(): Promise<unknown | null>;\n withIndex(\n indexName: string,\n range?: (q: TopicScopeIndexRangeBuilder) => unknown\n ): TopicScopeQuery;\n}\n\ninterface TopicScopeIndexRangeBuilder {\n eq(field: string, value: unknown): TopicScopeIndexRangeBuilder;\n}\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport interface TopicProjectScope {\n projectId?: string;\n source: \"topic\" | \"project_mapped_topic\" | \"topic_inferred\" | \"topic_node\";\n tenantId?: string;\n topicId: Id<\"topics\">;\n workspaceId?: string;\n}\n\n/**\n * RR.5 (legacy topics-table retirement) — graph-primitives mirror of the\n * kernel's epistemicNodes-first topic-scope fallback. Kept in lockstep with\n * `packages/reasoning-kernel/src/adapters/lib/topicScope.ts`\n * (`tests/unit/convex/topic-scope-fallbacks.test.ts` asserts parity).\n *\n * Resolves a topic that exists only as `epistemicNodes(nodeType=\"topic\")` —\n * the write-of-record — when no legacy `topics` row backs the ref, returning the\n * node's `topicId` self-key so scoped beliefs/evidence/questions stay reachable.\n * See the kernel module for the full silent-empty-result rationale.\n */\ninterface TopicNodeScopeDoc {\n _id: string | Id<\"epistemicNodes\">;\n globalId?: string;\n metadata?: UnknownRecord;\n nodeType?: string;\n topicId?: string;\n}\n\nasync function resolveTopicNodeScopeOrNull(\n ctx: TopicScopeContext,\n ref: string\n): Promise<TopicProjectScope | null> {\n if (!ctx?.db || typeof ctx.db.query !== \"function\") {\n return null;\n }\n\n let node: TopicNodeScopeDoc | null = null;\n\n // 1. The ref IS the topic node's UUIDv7 globalId.\n try {\n const byGlobalId = (await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", ref))\n .first()) as TopicNodeScopeDoc | null;\n if (byGlobalId && byGlobalId.nodeType === \"topic\") {\n node = byGlobalId;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] topic-node scope lookup by globalId failed\",\n { error, ref }\n );\n }\n\n if (!node) {\n return null;\n }\n\n const scopeKey =\n normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);\n if (!scopeKey) {\n return null;\n }\n\n return {\n topicId: scopeKey as Id<\"topics\">,\n projectId: asMappedProjectId(node),\n source: \"topic_node\",\n };\n}\n\ninterface MaterializedTopicNodeDoc {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n}\n\nfunction asMappedProjectId(\n topic: Pick<TopicDoc, \"metadata\"> | TopicNodeScopeDoc | null | undefined\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(\n (topic as UnknownRecord)[LEGACY_SCOPE_FIELD]\n );\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = topic.metadata || {};\n const candidate =\n (metadata as UnknownRecord)[LEGACY_SCOPE_FIELD] ||\n (metadata as UnknownRecord).legacyProjectId ||\n (metadata as UnknownRecord).projectId ||\n (metadata as UnknownRecord).scopeProjectId;\n return typeof candidate === \"string\"\n ? normalizeScopeValue(candidate)\n : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(\n ctx: TopicScopeContext,\n scopeId: string\n): Promise<TopicDoc[]> {\n const query = ctx.db.query(\"topics\") as TopicScopeQuery;\n try {\n return (await query\n .withIndex(\"by_graph_scope_project\", (q) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId)\n )\n .collect()) as TopicDoc[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve scope alias via index\",\n {\n error,\n scopeId,\n }\n );\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await query.collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: TopicScopeContext,\n topicId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by host query\",\n {\n error,\n topicId,\n }\n );\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: TopicScopeContext,\n legacyScopeId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by legacy scope\",\n {\n error,\n legacyScopeId,\n }\n );\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: TopicScopeContext,\n topic: TopicDoc\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) {\n break;\n }\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) {\n break;\n }\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: TopicScopeContext,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string }\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n return await resolveScopeFromTopicId(ctx, args.topicId);\n }\n\n if (args.projectId) {\n return await resolveScopeFromLegacyProjectId(ctx, args.projectId);\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\"\n );\n}\n\nasync function resolveScopeFromTopicId(\n ctx: TopicScopeContext,\n topicId: Id<\"topics\"> | string\n): Promise<TopicProjectScope> {\n const topic = await resolveTopicDocFromTopicId(ctx, topicId);\n if (topic) {\n return await buildTopicScope(ctx, topic, \"topic\");\n }\n\n const nodeScope = await resolveTopicNodeScopeOrNull(ctx, String(topicId));\n if (nodeScope) {\n return nodeScope;\n }\n throw new Error(`Topic not found: ${String(topicId)}`);\n}\n\nasync function resolveTopicDocFromTopicId(\n ctx: TopicScopeContext,\n topicId: Id<\"topics\"> | string\n): Promise<TopicDoc | null> {\n const direct = await tryReadTopicDoc(ctx, topicId, {\n failureLog: \"[topicScope] Failed to load topic by direct id\",\n idLogKey: \"topicId\",\n });\n if (direct) {\n return direct;\n }\n\n const hostTopic = await tryResolveHostTopicById(ctx, String(topicId));\n if (hostTopic) {\n return hostTopic;\n }\n\n return (\n pickPrimaryTopic(await findTopicsByScopeAlias(ctx, String(topicId))) ?? null\n );\n}\n\nasync function resolveScopeFromLegacyProjectId(\n ctx: TopicScopeContext,\n legacyProjectId: string\n): Promise<TopicProjectScope> {\n const directTopic = await resolveDirectLegacyProjectTopic(\n ctx,\n legacyProjectId\n );\n if (directTopic) {\n return await buildTopicScope(ctx, directTopic, \"topic_inferred\", {\n fallbackProjectId: legacyProjectId,\n });\n }\n\n const primary = pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, legacyProjectId)\n );\n if (primary) {\n return await buildTopicScope(ctx, primary, \"project_mapped_topic\", {\n fallbackProjectId: legacyProjectId,\n });\n }\n\n const nodeScope = await resolveTopicNodeScopeOrNull(ctx, legacyProjectId);\n if (nodeScope) {\n return {\n ...nodeScope,\n projectId: nodeScope.projectId ?? legacyProjectId,\n };\n }\n\n throw new Error(\n `Legacy project scope ${legacyProjectId} has no mapped topic.`\n );\n}\n\nasync function resolveDirectLegacyProjectTopic(\n ctx: TopicScopeContext,\n legacyProjectId: string\n): Promise<TopicDoc | null> {\n const directTopic = await tryReadTopicDoc(ctx, legacyProjectId, {\n failureLog: \"[topicScope] Failed to load direct project topic\",\n idLogKey: \"projectId\",\n });\n return directTopic ?? tryResolveHostTopicByLegacyScope(ctx, legacyProjectId);\n}\n\nasync function tryReadTopicDoc(\n ctx: TopicScopeContext,\n id: Id<\"topics\"> | string,\n log: { failureLog: string; idLogKey: \"projectId\" | \"topicId\" }\n): Promise<TopicDoc | null> {\n try {\n return (await ctx.db.get(id)) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(log.failureLog, {\n error,\n [log.idLogKey]: id,\n });\n return null;\n }\n}\n\nasync function buildTopicScope(\n ctx: TopicScopeContext,\n topic: TopicDoc,\n source: TopicProjectScope[\"source\"],\n options: { fallbackProjectId?: string } = {}\n): Promise<TopicProjectScope> {\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n return {\n topicId: topic._id,\n ...(mapped || options.fallbackProjectId\n ? { projectId: mapped ?? options.fallbackProjectId }\n : {}),\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source,\n };\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport {\n getLayerForNodeType,\n isNodeType,\n} from \"@lucern/contracts/schema-helpers/spine/tables/epistemicNodes\";\nimport type { MutationCtx, QueryCtx } from \"./convex\";\nimport { resolveTopicProjectScope, type TopicProjectScope } from \"./topicScope\";\n\ntype StructuredInvariantError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ninterface ScopeLike {\n epistemicLayer?: unknown;\n nodeType?: unknown;\n projectId?: unknown;\n publicationStatus?: unknown;\n tenantId?: unknown;\n topicId?: unknown;\n workspaceId?: unknown;\n}\n\nexport interface RuntimePackMutationContext {\n packInstallScope?: \"tenant\" | \"workspace\";\n packKey?: string;\n toolName?: string;\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 (scopeTenantId && nodeTenantId && scopeTenantId !== nodeTenantId) {\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 (scopeTenantId && edgeTenantId && scopeTenantId !== edgeTenantId) {\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: QueryCtx | MutationCtx,\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 const topicId = normalizeScopeValue(node.topicId);\n if (topicId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n topicId,\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 !(\n args.runtimeToolName ||\n args.runtimePackKey ||\n args.runtimePackInstallScope\n )\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 (!args.runtime?.packKey || args.runtime.packInstallScope !== \"tenant\") {\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: `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","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; keep the existing camelCase filename.\nimport {\n hasProjectedOpinionChanged,\n mkOpinion,\n readOpinionFromRecord,\n type SLOperator,\n type SLOpinion,\n} from \"@lucern/confidence\";\nimport {\n canContinueTransitively,\n canTraverseHop,\n type EdgePropagationSpec,\n getEdgePropagationSpecs,\n getTraversalDirections,\n type PropagationEdgeRecord,\n type PropagationEdgeType,\n type PropagationTraversalDirection,\n} from \"./edges\";\nimport {\n edgeMatchesWorkspaceReasoningScope,\n nodeMatchesWorkspaceReasoningScope,\n} from \"./workspaceIsolation\";\n\nexport interface PropagationDispatchScope {\n tenantId?: string;\n workspaceId?: string;\n}\n\nexport interface PropagationDispatchNode<TNodeId extends string = string> {\n _id?: TNodeId;\n epistemicLayer?: string;\n metadata?: unknown;\n nodeType?: string;\n opinion_a?: number;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n publicationStatus?: string;\n tenantId?: string;\n workspaceId?: string;\n}\n\nexport type PropagationDispatchEdge<TNodeId extends string = string> =\n PropagationEdgeRecord<TNodeId>;\n\nexport interface ConfidencePropagationDispatch<\n TNodeId extends string = string,\n> {\n edgeType: PropagationEdgeType;\n hop: number;\n operator: SLOperator;\n opinion: SLOpinion;\n rationale: string;\n targetNodeId: TNodeId;\n traversedDirection: PropagationTraversalDirection;\n weight: number;\n}\n\ninterface DispatchState<TNodeId extends string = string> {\n hop: number;\n nodeId: TNodeId;\n opinion: SLOpinion;\n visitedNodeIds: Set<string>;\n}\n\ninterface CollectConfidencePropagationDispatchesArgs<\n TNodeId extends string = string,\n> {\n getNode: (\n nodeId: TNodeId\n ) => Promise<PropagationDispatchNode<TNodeId> | null | undefined>;\n queryEdges: (args: {\n direction: PropagationTraversalDirection;\n hop: number;\n nodeId: TNodeId;\n spec: EdgePropagationSpec<TNodeId>;\n }) => Promise<readonly PropagationDispatchEdge<TNodeId>[]>;\n sourceNodeId: TNodeId;\n sourceOpinion: SLOpinion;\n sourceScope?: PropagationDispatchScope;\n traversalSpecs?: readonly EdgePropagationSpec<TNodeId>[];\n}\n\ninterface TraversalScope<TNodeId extends string = string> {\n args: CollectConfidencePropagationDispatchesArgs<TNodeId>;\n dispatchesByTargetId: Map<string, ConfidencePropagationDispatch<TNodeId>>;\n nodeCache: Map<string, PropagationDispatchNode<TNodeId> | null | undefined>;\n opinionCache: Map<string, SLOpinion>;\n traversalSpecs: readonly EdgePropagationSpec<TNodeId>[];\n}\n\nfunction nodeIdToCacheKey<TNodeId extends string>(nodeId: TNodeId): string {\n return String(nodeId);\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\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 buildInitialState<TNodeId extends string>(\n sourceNodeId: TNodeId,\n sourceOpinion: SLOpinion\n): DispatchState<TNodeId> {\n return {\n nodeId: sourceNodeId,\n opinion: sourceOpinion,\n hop: 0,\n visitedNodeIds: new Set([nodeIdToCacheKey(sourceNodeId)]),\n };\n}\n\nfunction extendVisited<TNodeId extends string>(\n currentVisited: Set<string>,\n targetNodeId: TNodeId\n): Set<string> {\n return new Set([...currentVisited, nodeIdToCacheKey(targetNodeId)]);\n}\n\nfunction makeTransitiveState<TNodeId extends string>(\n current: DispatchState<TNodeId>,\n targetNodeId: TNodeId,\n projectedOpinion: SLOpinion,\n nextHop: number\n): DispatchState<TNodeId> {\n return {\n nodeId: targetNodeId,\n opinion: projectedOpinion,\n hop: nextHop,\n visitedNodeIds: extendVisited(current.visitedNodeIds, targetNodeId),\n };\n}\n\nfunction makeDispatchRecord<TNodeId extends string>(\n targetNodeId: TNodeId,\n spec: EdgePropagationSpec<TNodeId>,\n direction: PropagationTraversalDirection,\n edge: PropagationDispatchEdge<TNodeId>,\n projectedOpinion: SLOpinion,\n nextHop: number,\n result: NonNullable<ReturnType<EdgePropagationSpec<TNodeId>[\"operator\"]>>,\n existingDispatch?: ConfidencePropagationDispatch<TNodeId>\n): ConfidencePropagationDispatch<TNodeId> {\n return {\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\nasync function loadCachedNode<TNodeId extends string>(\n scope: TraversalScope<TNodeId>,\n nodeId: TNodeId\n): Promise<PropagationDispatchNode<TNodeId> | null | undefined> {\n const cacheKey = nodeIdToCacheKey(nodeId);\n if (!scope.nodeCache.has(cacheKey)) {\n scope.nodeCache.set(cacheKey, await scope.args.getNode(nodeId));\n }\n\n return scope.nodeCache.get(cacheKey) ?? null;\n}\n\nasync function collectTargetDispatch<TNodeId extends string>(\n state: DispatchState<TNodeId>,\n nextHop: number,\n spec: EdgePropagationSpec<TNodeId>,\n direction: PropagationTraversalDirection,\n edge: PropagationDispatchEdge<TNodeId>,\n queue: DispatchState<TNodeId>[],\n scope: TraversalScope<TNodeId>\n): Promise<void> {\n const sourceScope = scope.args.sourceScope;\n if (sourceScope && !edgeMatchesWorkspaceReasoningScope(edge, sourceScope)) {\n return;\n }\n\n const targetNodeId = resolveTraversalTargetNodeId(edge, direction);\n if (!targetNodeId) {\n return;\n }\n\n const targetNodeIdKey = nodeIdToCacheKey(targetNodeId);\n if (state.visitedNodeIds.has(targetNodeIdKey)) {\n return;\n }\n\n const targetNode = await loadCachedNode(scope, targetNodeId);\n if (targetNode?.nodeType !== \"belief\") {\n return;\n }\n\n if (\n sourceScope &&\n !nodeMatchesWorkspaceReasoningScope(targetNode, sourceScope)\n ) {\n return;\n }\n\n const targetOpinion =\n scope.opinionCache.get(targetNodeIdKey) ?? 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 (!(result && hasProjectedOpinionChanged(targetOpinion, result.opinion))) {\n return;\n }\n\n const projectedOpinion = mkOpinion(\n result.opinion.b,\n result.opinion.d,\n result.opinion.u,\n result.opinion.a\n );\n scope.opinionCache.set(targetNodeIdKey, projectedOpinion);\n\n const existingDispatch = scope.dispatchesByTargetId.get(targetNodeIdKey);\n scope.dispatchesByTargetId.set(\n targetNodeIdKey,\n makeDispatchRecord(\n targetNodeId,\n spec,\n direction,\n edge,\n projectedOpinion,\n nextHop,\n result,\n existingDispatch\n )\n );\n\n if (canContinueTransitively(spec, nextHop)) {\n queue.push(\n makeTransitiveState(state, targetNodeId, projectedOpinion, nextHop)\n );\n }\n}\n\nasync function processTraversalSpec<TNodeId extends string>(\n state: DispatchState<TNodeId>,\n nextHop: number,\n spec: EdgePropagationSpec<TNodeId>,\n queue: DispatchState<TNodeId>[],\n scope: TraversalScope<TNodeId>\n): Promise<void> {\n const sourceNodeId = state.nodeId;\n for (const direction of getTraversalDirections(spec.direction)) {\n const edges = await scope.args.queryEdges({\n nodeId: sourceNodeId,\n spec,\n direction,\n hop: nextHop,\n });\n\n for (const edge of edges) {\n await collectTargetDispatch(\n state,\n nextHop,\n spec,\n direction,\n edge,\n queue,\n scope\n );\n }\n }\n}\n\nasync function processQueuedState<TNodeId extends string>(\n state: DispatchState<TNodeId>,\n queue: DispatchState<TNodeId>[],\n scope: TraversalScope<TNodeId>\n): Promise<void> {\n const nextHop = state.hop + 1;\n for (const spec of scope.traversalSpecs) {\n if (!canTraverseHop(spec, nextHop)) {\n continue;\n }\n\n await processTraversalSpec(state, nextHop, spec, queue, scope);\n }\n}\n\nfunction sortDispatches<TNodeId extends string>(\n dispatches: Iterable<ConfidencePropagationDispatch<TNodeId>>\n): ConfidencePropagationDispatch<TNodeId>[] {\n return Array.from(dispatches).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\nexport async function collectConfidencePropagationDispatches<\n TNodeId extends string = string,\n>(\n args: CollectConfidencePropagationDispatchesArgs<TNodeId>\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\n const scope: TraversalScope<TNodeId> = {\n args,\n dispatchesByTargetId,\n opinionCache,\n nodeCache,\n traversalSpecs,\n };\n\n const queue: DispatchState<TNodeId>[] = [\n buildInitialState(args.sourceNodeId, args.sourceOpinion),\n ];\n\n while (queue.length > 0) {\n const state = queue.shift();\n if (!state) {\n continue;\n }\n\n await processQueuedState(state, queue, scope);\n }\n\n return sortDispatches(dispatchesByTargetId.values());\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\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 {\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { throwStructuredMutationError } from \"@lucern/access-control/structuredMutationError\";\nimport {\n type ConfidencePolicyConfig,\n confidenceFromSL,\n mkOpinion,\n normalizeTupleContradictionPolicy,\n type Opinion,\n readOpinionFromRecord,\n type SLOperator,\n type SLOpinion,\n} from \"@lucern/confidence\";\nimport { v } from \"convex/values\";\nimport {\n type BeliefLifecycleStatus,\n resolveBeliefLifecycleStatus,\n} from \"./beliefLifecycle\";\nimport type { Id, QueryCtx } from \"./convex\";\nimport { internal } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport type { VerificationConfidenceTrigger } from \"./epistemicContractHelpers\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport { nodeMatchesWorkspaceReasoningScope } 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\n// CQ.11: the structured-refusal primitive is the single shared copy in\n// `@lucern/access-control/structuredMutationError` (the same home the shared\n// access gate throws from). Re-exported here so the graph-primitives modules\n// that imported it from this helper keep their import path unchanged.\nexport type { StructuredMutationErrorData } from \"@lucern/access-control/structuredMutationError\";\n// biome-ignore lint/performance/noBarrelFile: Public helper compatibility re-export retained for existing graph-primitives consumers.\nexport { throwStructuredMutationError } from \"@lucern/access-control/structuredMutationError\";\n\ninterface BeliefScopeArgs {\n projectId?: string | null;\n topicId?: string | null;\n}\n\ninterface EpistemicNodeOpinionSource {\n _id?: unknown;\n metadata?: Record<string, unknown> | null;\n opinion_a?: number;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n tupleContradicted?: boolean;\n userId?: string;\n}\n\nexport interface EpistemicNodeOpinionDoc extends EpistemicNodeOpinionSource {\n _creationTime?: number;\n _id: Id<\"epistemicNodes\">;\n anonymizationClass?: string;\n audienceLabel?: string;\n beliefStatus?: unknown;\n canonicalText?: string;\n confidence?: unknown;\n createdAt?: number;\n createdBy?: string;\n epistemicLayer?: string;\n exportClass?: string;\n globalId?: string;\n metadata?: Record<string, unknown> | null;\n nodeType: \"belief\";\n policyTags?: string[];\n predictionMeta?: unknown;\n projectId?: string;\n publicationStatus?: string;\n sensitivityTier?: string;\n status?: string;\n tenantId?: string;\n topicId?: string;\n updatedAt?: number;\n workspaceId?: string;\n}\n\ninterface EpistemicIndexQuery {\n eq(field: string, value: unknown): EpistemicIndexQuery;\n field(field: string): string;\n gt(field: string, value: unknown): EpistemicIndexQuery;\n lt(field: string, value: unknown): EpistemicIndexQuery;\n}\n\ntype EpistemicBeliefCtx = QueryCtx;\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 readFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return;\n }\n const strings = value.filter(\n (item): item is string => typeof item === \"string\" && item.length > 0\n );\n return strings.length === value.length ? strings : undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nexport function readBeliefNodeView(\n value: unknown\n): EpistemicNodeOpinionDoc | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readOptionalString(value._id) as Id<\"epistemicNodes\"> | undefined;\n const nodeType = readOptionalString(value.nodeType);\n if (!(id && nodeType === \"belief\")) {\n return null;\n }\n\n const node: EpistemicNodeOpinionDoc = {\n _id: id,\n nodeType,\n };\n const creationTime = readFiniteNumber(value._creationTime);\n if (creationTime !== undefined) {\n node._creationTime = creationTime;\n }\n const metadata = readRecord(value.metadata);\n if (metadata !== undefined) {\n node.metadata = metadata;\n }\n const opinionA = readFiniteNumber(value.opinion_a);\n if (opinionA !== undefined) {\n node.opinion_a = opinionA;\n }\n const opinionB = readFiniteNumber(value.opinion_b);\n if (opinionB !== undefined) {\n node.opinion_b = opinionB;\n }\n const opinionD = readFiniteNumber(value.opinion_d);\n if (opinionD !== undefined) {\n node.opinion_d = opinionD;\n }\n const opinionU = readFiniteNumber(value.opinion_u);\n if (opinionU !== undefined) {\n node.opinion_u = opinionU;\n }\n const tupleContradicted =\n typeof value.tupleContradicted === \"boolean\"\n ? value.tupleContradicted\n : undefined;\n if (tupleContradicted !== undefined) {\n node.tupleContradicted = tupleContradicted;\n }\n\n const stringFields = {\n anonymizationClass: value.anonymizationClass,\n audienceLabel: value.audienceLabel,\n canonicalText: value.canonicalText,\n createdBy: value.createdBy,\n epistemicLayer: value.epistemicLayer,\n exportClass: value.exportClass,\n globalId: value.globalId,\n projectId: value.projectId,\n publicationStatus: value.publicationStatus,\n sensitivityTier: value.sensitivityTier,\n status: value.status,\n tenantId: value.tenantId,\n topicId: value.topicId,\n userId: value.userId,\n workspaceId: value.workspaceId,\n };\n for (const [field, fieldValue] of Object.entries(stringFields)) {\n const normalized = readOptionalString(fieldValue);\n if (normalized !== undefined) {\n node[field as keyof typeof stringFields] = normalized;\n }\n }\n\n const createdAt = readFiniteNumber(value.createdAt);\n if (createdAt !== undefined) {\n node.createdAt = createdAt;\n }\n const updatedAt = readFiniteNumber(value.updatedAt);\n if (updatedAt !== undefined) {\n node.updatedAt = updatedAt;\n }\n if (value.beliefStatus !== undefined) {\n node.beliefStatus = value.beliefStatus;\n }\n if (value.confidence !== undefined) {\n node.confidence = value.confidence;\n }\n if (value.predictionMeta !== undefined) {\n node.predictionMeta = value.predictionMeta;\n }\n const policyTags = readStringArray(value.policyTags);\n if (policyTags !== undefined) {\n node.policyTags = policyTags;\n }\n\n return node;\n}\n\nfunction readBeliefNodeViews(\n values: readonly unknown[]\n): EpistemicNodeOpinionDoc[] {\n return values.flatMap((value) => {\n const node = readBeliefNodeView(value);\n return node ? [node] : [];\n });\n}\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nexport function assertBaseRateInRange(\n baseRate: number,\n field = \"baseRate\"\n): 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: EpistemicNodeOpinionSource,\n metadata: Record<string, unknown>\n): SLOpinion {\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 (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(node: {\n metadata?: Record<string, unknown> | null;\n}): \"critical\" | \"significant\" | \"minor\" {\n const metadata = node.metadata || {};\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 // biome-ignore lint/suspicious/noBitwiseOperators: Preserve deterministic djb2 hash semantics for persisted belief metadata compatibility.\n hash = (hash << 5) + hash + content.charCodeAt(i);\n // biome-ignore lint/suspicious/noBitwiseOperators: Preserve deterministic djb2 hash semantics for persisted belief metadata compatibility.\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 const activityScopeId = topicId ?? projectId;\n if (!activityScopeId) {\n throw new Error(\n \"Expected belief graph dirty scope to include a topic or project id.\"\n );\n }\n\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n activityScopeId,\n {\n lastActivityAt: Date.now(),\n }\n );\n}\n\nexport async function resolveBeliefScopeOrNull(\n ctx: QueryCtx,\n args: BeliefScopeArgs\n) {\n if (!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: EpistemicIndexQuery) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n );\n const rows =\n typeof args?.scanLimit === \"number\"\n ? await baseQuery.order(\"desc\").take(args.scanLimit)\n : await baseQuery.collect();\n const nodes = readBeliefNodeViews(rows);\n const scopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, scope)\n );\n\n if (!args?.status) {\n return scopedNodes;\n }\n\n return scopedNodes.filter(\n (node: EpistemicNodeOpinionDoc) => node.status === args.status\n );\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: EpistemicNodeOpinionDoc) {\n const meta = node.metadata || {};\n const worktreeId = resolveBeliefWorktreeId(meta);\n const tupleContradicted =\n readTupleContradictedFlag(node.tupleContradicted) ??\n readTupleContradictedFlag(meta.tupleContradicted) ??\n false;\n\n return {\n _id: node._id,\n _epistemicNodeId: node._id,\n _creationTime: node._creationTime,\n belief: node.canonicalText,\n formulation: node.canonicalText,\n projectId: node.projectId,\n topicId: node.topicId,\n userId: node.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: EpistemicIndexQuery) =>\n q.eq(\"beliefId\", beliefNodeId)\n )\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: EpistemicIndexQuery) =>\n q.eq(\"isActive\", true)\n )\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","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Split confidence operations out of epistemicBeliefs.ts. */\n\nimport { requireScopeWriteAccess } from \"@lucern/access-control/access\";\nimport {\n confidenceFromSL,\n detectTupleContradiction,\n evaluateTupleContradictionTransition,\n mkOpinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport { generateUuidV7 } from \"@lucern/contracts/ids\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport {\n isPreValidationBeliefStatus,\n promoteBeliefStatusAfterScoring,\n} from \"./beliefLifecycle\";\nimport {\n collectConfidencePropagationDispatches,\n type PropagationDispatchEdge,\n type PropagationDispatchNode,\n} from \"./confidencePropagationDispatch\";\nimport type { Id, MutationCtx } from \"./convex\";\nimport { internal, internalMutation } from \"./convex\";\nimport {\n type BeliefConfidenceTrigger,\n buildBeliefConfidenceRow,\n deriveTupleContradictionSeverity,\n formatTupleContradictionDescription,\n getActiveConfidencePolicy,\n hasCompletedWorktreeForBelief,\n readBeliefOpinionSnapshot,\n readTupleContradictedFlag,\n resolveBeliefStatus,\n throwStructuredMutationError,\n} from \"./epistemicBeliefs.helpers\";\nimport { resolveNodeScopeForWorkspaceIsolation } from \"./workspaceIsolation\";\n\ninterface EdgePropagationIndexScope {\n eq(field: string, value: unknown): EdgePropagationIndexScope;\n}\n\ninterface BeliefConfidenceChangeArgs {\n authenticatedUserId: string;\n baseRate?: number;\n belief: number;\n disbelief: number;\n nodeId: Id<\"epistemicNodes\">;\n rationale?: string;\n slOperator?: SLOperator;\n trigger: BeliefConfidenceTrigger;\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringWorktreeId?: string;\n uncertainty: number;\n}\n\ninterface BeliefConfidenceChangeResult {\n beliefConfidenceId: Id<\"beliefConfidence\">;\n newConfidence: number;\n nodeId: Id<\"epistemicNodes\">;\n opinion: { a: number; b: number; d: number; u: number };\n previousConfidence: number;\n}\n\ninterface ConfidenceBeliefNode\n extends PropagationDispatchNode<Id<\"epistemicNodes\">> {\n _id: Id<\"epistemicNodes\">;\n beliefStatus?: unknown;\n confidence?: number;\n globalId?: string;\n metadata?: Record<string, unknown>;\n nodeType: \"belief\";\n predictionMeta?: Record<string, unknown>;\n projectId: string;\n status?: string;\n topicId?: string;\n tupleContradicted?: boolean;\n}\n\ninterface PropagateConfidenceChangeArgs {\n nodeId: Id<\"epistemicNodes\">;\n opinion_a: number;\n opinion_b: number;\n opinion_d: number;\n opinion_u: number;\n userId: string;\n}\n\ntype ConfidencePolicy = Awaited<ReturnType<typeof getActiveConfidencePolicy>>;\ntype TupleTransition = ReturnType<typeof evaluateTupleContradictionTransition>;\n\ninterface ConfidenceChangeState {\n confidencePolicy: ConfidencePolicy;\n currentBeliefStatus: ReturnType<typeof resolveBeliefStatus>;\n derivedConfidence: number;\n existingMetadata: Record<string, unknown>;\n isFirstScoring: boolean;\n newBeliefStatus: ReturnType<typeof promoteBeliefStatusAfterScoring>;\n nextOpinion: { a: number; b: number; d: number; u: number };\n previousConfidence: number;\n previousTupleContradicted: boolean;\n storedRationale: string;\n tupleContradictionDescription: string;\n tupleTransition: TupleTransition;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? (value as Id<TableName>)\n : undefined;\n}\n\nfunction readOptionalBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction readOptionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nfunction readConfidenceBeliefNode(value: unknown): ConfidenceBeliefNode | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(value._id);\n const nodeType = readOptionalString(value.nodeType);\n const projectId = readOptionalString(value.projectId);\n if (!(id && nodeType === \"belief\" && projectId)) {\n return null;\n }\n\n const node: ConfidenceBeliefNode = {\n _id: id,\n nodeType,\n projectId,\n };\n const confidence = readOptionalNumber(value.confidence);\n const epistemicLayer = readOptionalString(value.epistemicLayer);\n const globalId = readOptionalString(value.globalId);\n const metadata = readRecord(value.metadata);\n const opinionA = readOptionalNumber(value.opinion_a);\n const opinionB = readOptionalNumber(value.opinion_b);\n const opinionD = readOptionalNumber(value.opinion_d);\n const opinionU = readOptionalNumber(value.opinion_u);\n const predictionMeta = readRecord(value.predictionMeta);\n const publicationStatus = readOptionalString(value.publicationStatus);\n const status = readOptionalString(value.status);\n const tenantId = readOptionalString(value.tenantId);\n const topicId = readOptionalString(value.topicId);\n const tupleContradicted = readOptionalBoolean(value.tupleContradicted);\n const workspaceId = readOptionalString(value.workspaceId);\n\n if (confidence !== undefined) {\n node.confidence = confidence;\n }\n if (epistemicLayer !== undefined) {\n node.epistemicLayer = epistemicLayer;\n }\n if (globalId !== undefined) {\n node.globalId = globalId;\n }\n if (metadata !== undefined) {\n node.metadata = metadata;\n }\n if (opinionA !== undefined) {\n node.opinion_a = opinionA;\n }\n if (opinionB !== undefined) {\n node.opinion_b = opinionB;\n }\n if (opinionD !== undefined) {\n node.opinion_d = opinionD;\n }\n if (opinionU !== undefined) {\n node.opinion_u = opinionU;\n }\n if (predictionMeta !== undefined) {\n node.predictionMeta = predictionMeta;\n }\n if (publicationStatus !== undefined) {\n node.publicationStatus = publicationStatus;\n }\n if (status !== undefined) {\n node.status = status;\n }\n if (tenantId !== undefined) {\n node.tenantId = tenantId;\n }\n if (topicId !== undefined) {\n node.topicId = topicId;\n }\n if (tupleContradicted !== undefined) {\n node.tupleContradicted = tupleContradicted;\n }\n if (workspaceId !== undefined) {\n node.workspaceId = workspaceId;\n }\n\n return node;\n}\n\nfunction readPropagationEdge(\n value: unknown\n): PropagationDispatchEdge<Id<\"epistemicNodes\">> | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const edgeType = readOptionalString(value.edgeType);\n if (!edgeType) {\n return null;\n }\n\n const edge: PropagationDispatchEdge<Id<\"epistemicNodes\">> = { edgeType };\n const fromNodeId = readConvexId<\"epistemicNodes\">(value.fromNodeId);\n const tenantId = readOptionalString(value.tenantId);\n const toNodeId = readConvexId<\"epistemicNodes\">(value.toNodeId);\n const weight = readOptionalNumber(value.weight);\n const workspaceId = readOptionalString(value.workspaceId);\n\n if (fromNodeId !== undefined) {\n edge.fromNodeId = fromNodeId;\n }\n if (tenantId !== undefined) {\n edge.tenantId = tenantId;\n }\n if (toNodeId !== undefined) {\n edge.toNodeId = toNodeId;\n }\n if (weight !== undefined) {\n edge.weight = weight;\n }\n if (workspaceId !== undefined) {\n edge.workspaceId = workspaceId;\n }\n\n return edge;\n}\n\nfunction readRowList<T>(\n values: readonly unknown[],\n reader: (value: unknown) => T | null\n): T[] {\n return values.flatMap((value) => {\n const row = reader(value);\n return row ? [row] : [];\n });\n}\n\nexport async function applyBeliefConfidenceChange(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs\n): Promise<BeliefConfidenceChangeResult> {\n const now = Date.now();\n const node = await requireConfidenceBeliefNode(ctx, args);\n const state = await buildConfidenceChangeState(ctx, node, args);\n await assertConfidenceScoringPolicySatisfied(ctx, args, state);\n const tupleContradictionId = await createTupleContradictionIfNeeded(\n ctx,\n args,\n node,\n state\n );\n await patchBeliefConfidenceState(ctx, args, state);\n await scheduleFirstScoringThemeEdges(ctx, args, node, state);\n const beliefConfidenceId = await insertBeliefConfidenceRecord(\n ctx,\n args,\n state,\n tupleContradictionId,\n now\n );\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n await insertConfidenceAudit(\n ctx,\n args,\n node,\n state,\n tupleContradictionId,\n now\n );\n await insertTupleTransitionAuditIfNeeded(\n ctx,\n args,\n node,\n state,\n tupleContradictionId,\n now\n );\n await scheduleConfidenceFollowups(ctx, args, node, state);\n\n return {\n nodeId: args.nodeId,\n previousConfidence: state.previousConfidence,\n newConfidence: state.derivedConfidence,\n opinion: state.nextOpinion,\n beliefConfidenceId,\n };\n}\n\nasync function requireConfidenceBeliefNode(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs\n): Promise<ConfidenceBeliefNode> {\n const node = readConfidenceBeliefNode(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 await requireScopeWriteAccess(ctx, node.projectId, args.authenticatedUserId);\n return node;\n}\n\nasync function buildConfidenceChangeState(\n ctx: MutationCtx,\n node: ConfidenceBeliefNode,\n args: BeliefConfidenceChangeArgs\n): Promise<ConfidenceChangeState> {\n const existingMetadata = readNodeMetadata(node);\n const currentBeliefStatus = resolveBeliefStatus(node, existingMetadata);\n const confidencePolicy = await getActiveConfidencePolicy(ctx);\n const previousConfidence = node.confidence || 0.5;\n const predictionMeta = node.predictionMeta || existingMetadata.predictionMeta;\n const previousOpinion = readBeliefOpinionSnapshot(node, existingMetadata);\n const nextOpinion = {\n b: args.belief,\n d: args.disbelief,\n u: args.uncertainty,\n a: args.baseRate ?? 0.5,\n };\n const derivedConfidence = confidenceFromSL(\n nextOpinion.b,\n nextOpinion.d,\n nextOpinion.u,\n nextOpinion.a\n );\n const isFirstScoring =\n typeof node.confidence !== \"number\" || !Number.isFinite(node.confidence);\n const previousTupleContradicted =\n readTupleContradictedFlag(node.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 const storedRationale =\n args.rationale ??\n `Confidence changed from ${previousConfidence.toFixed(2)} (nodeId: ${args.nodeId})`;\n\n return {\n confidencePolicy,\n currentBeliefStatus,\n derivedConfidence,\n existingMetadata,\n isFirstScoring,\n newBeliefStatus,\n nextOpinion,\n previousConfidence,\n previousTupleContradicted,\n storedRationale,\n tupleContradictionDescription,\n tupleTransition,\n };\n}\n\nfunction readNodeMetadata(node: ConfidenceBeliefNode): Record<string, unknown> {\n return node.metadata ?? {};\n}\n\nasync function assertConfidenceScoringPolicySatisfied(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n state: ConfidenceChangeState\n): Promise<void> {\n if (\n state.confidencePolicy.scoringMode !== \"after_worktree\" ||\n !isPreValidationBeliefStatus(state.currentBeliefStatus)\n ) {\n return;\n }\n const hasCompletedWorktree = await hasCompletedWorktreeForBelief(\n ctx,\n args.nodeId\n );\n if (hasCompletedWorktree) {\n return;\n }\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\nasync function createTupleContradictionIfNeeded(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState\n): Promise<Id<\"contradictions\"> | undefined> {\n if (!state.tupleTransition.crossedIntoTupleContradiction) {\n return;\n }\n return (await ctx.runMutation(\"contradictions:create\", {\n projectId: node.projectId,\n topicId: node.topicId,\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: state.tupleContradictionDescription,\n createdBy: args.authenticatedUserId,\n })) as Id<\"contradictions\">;\n}\n\nasync function patchBeliefConfidenceState(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n state: ConfidenceChangeState\n): Promise<void> {\n await ctx.db.patch(args.nodeId, {\n confidence: state.derivedConfidence,\n beliefStatus: state.newBeliefStatus,\n tupleContradicted: state.tupleTransition.tupleContradicted,\n updatedAt: Date.now(),\n opinion_b: state.nextOpinion.b,\n opinion_d: state.nextOpinion.d,\n opinion_u: state.nextOpinion.u,\n opinion_a: state.nextOpinion.a,\n metadata: {\n ...state.existingMetadata,\n beliefStatus: state.newBeliefStatus,\n slBelief: state.nextOpinion.b,\n slDisbelief: state.nextOpinion.d,\n slUncertainty: state.nextOpinion.u,\n slBaseRate: state.nextOpinion.a,\n tupleContradicted: state.tupleTransition.tupleContradicted,\n },\n });\n}\n\nasync function scheduleFirstScoringThemeEdges(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState\n): Promise<void> {\n if (!state.isFirstScoring) {\n return;\n }\n const themeNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic\", (q) => q.eq(\"topicId\", node.topicId))\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 continue;\n }\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: generateUuidV7(),\n fromGlobalId: node.globalId,\n toGlobalId: theme.globalId,\n edgeType: \"relates_to_thesis\",\n weight: state.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\nasync function insertBeliefConfidenceRecord(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n state: ConfidenceChangeState,\n tupleContradictionId: Id<\"contradictions\"> | undefined,\n now: number\n): Promise<Id<\"beliefConfidence\">> {\n return await ctx.db.insert(\"beliefConfidence\", {\n ...buildBeliefConfidenceRow({\n beliefId: args.nodeId as Id<\"epistemicNodes\">,\n belief: state.nextOpinion.b,\n disbelief: state.nextOpinion.d,\n uncertainty: state.nextOpinion.u,\n baseRate: state.nextOpinion.a,\n trigger: args.trigger,\n rationale: state.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 });\n}\n\nasync function insertConfidenceAudit(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState,\n tupleContradictionId: Id<\"contradictions\"> | undefined,\n now: number\n): Promise<void> {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"confidence_changed\",\n previousState: {\n confidence: state.previousConfidence,\n tupleContradicted: state.previousTupleContradicted,\n },\n newState: {\n opinion: state.nextOpinion,\n confidence: state.derivedConfidence,\n trigger: args.trigger,\n rationale: state.storedRationale,\n tupleContradicted: state.tupleTransition.tupleContradicted,\n tupleContradictionPolicy: state.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\nasync function insertTupleTransitionAuditIfNeeded(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState,\n tupleContradictionId: Id<\"contradictions\"> | undefined,\n now: number\n): Promise<void> {\n if (\n !(\n state.tupleTransition.crossedIntoTupleContradiction ||\n state.tupleTransition.crossedOutOfTupleContradiction\n )\n ) {\n return;\n }\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n previousState: { tupleContradicted: state.previousTupleContradicted },\n newState: {\n tupleContradicted: state.tupleTransition.tupleContradicted,\n action: state.tupleTransition.crossedIntoTupleContradiction\n ? \"tuple_contradiction_detected\"\n : \"tuple_contradiction_cleared\",\n opinion: state.nextOpinion,\n tupleContradictionPolicy: state.tupleTransition.policy,\n ...(tupleContradictionId\n ? { tupleContradictionId: String(tupleContradictionId) }\n : {}),\n },\n rationale: tupleAuditRationale(state),\n changedBy: args.authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n topicId: node.topicId,\n });\n}\n\nfunction tupleAuditRationale(state: ConfidenceChangeState): string {\n if (state.tupleTransition.crossedIntoTupleContradiction) {\n return state.tupleContradictionDescription;\n }\n return `Tuple-space contradiction cleared: b=${state.nextOpinion.b.toFixed(2)}, d=${state.nextOpinion.d.toFixed(2)} no longer exceed the configured policy thresholds.`;\n}\n\nasync function scheduleConfidenceFollowups(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState\n): Promise<void> {\n if (Math.abs(state.derivedConfidence - state.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 if (node.workspaceId && node.tenantId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.publication.evaluateNodePublication,\n { nodeId: args.nodeId }\n );\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: MutationCtx, args: PropagateConfidenceChangeArgs) => {\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 = readConfidenceBeliefNode(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 readRowList(\n await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\n direction === \"outgoing\" ? \"by_from_type\" : \"by_to_type\",\n (q: EdgePropagationIndexScope) =>\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 readPropagationEdge\n ),\n getNode: async (nodeId) =>\n readConfidenceBeliefNode(await ctx.db.get(nodeId)),\n });\n\n for (const dispatch of dispatches) {\n const pressureLabel = propagationPressureLabel(\n dispatch.edgeType,\n dispatch.weight\n );\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","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Split belief confidence and lifecycle mutations out of epistemicBeliefs.ts. */\n\nimport { requireScopeWriteAccess } from \"@lucern/access-control/access\";\nimport type { SLOperator } from \"@lucern/confidence\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx } from \"./convex\";\nimport { internal, internalMutation, mutation } from \"./convex\";\nimport { applyBeliefConfidenceChange } from \"./epistemicBeliefs.confidence\";\nimport {\n type BeliefConfidenceTrigger,\n readBeliefNodeView,\n requireAuthenticatedUserId,\n} from \"./epistemicBeliefs.helpers\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\ninterface AppendSlScoringArgs {\n baseRate: number;\n belief: number;\n disbelief: number;\n nodeId: Id<\"epistemicNodes\">;\n rationale?: string;\n slOperator?: SLOperator;\n trigger: BeliefConfidenceTrigger;\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringWorktreeId?: string;\n uncertainty: number;\n userId: string;\n}\n\ntype MutableBeliefStatus = \"active\" | \"archived\" | \"superseded\";\n\ninterface UpdateStatusArgs {\n nodeId: Id<\"epistemicNodes\">;\n reason?: string;\n status: MutableBeliefStatus;\n userId: string;\n}\n\ninterface ArchiveArgs {\n nodeId: Id<\"epistemicNodes\">;\n reason?: string;\n userId: string;\n}\n\ninterface UpdateRationaleArgs {\n nodeId: Id<\"epistemicNodes\">;\n rationale?: string;\n userId: string;\n}\n\ninterface UpdateStatusInternalArgs extends UpdateStatusArgs {\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n runtimePackKey?: string;\n runtimeToolName?: string;\n}\n\nexport const appendSlScoring = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n // SL opinion — the ONLY confidence input (EK-7)\n belief: v.number(), // b: evidence FOR [0,1]\n disbelief: v.number(), // d: evidence AGAINST [0,1]\n uncertainty: v.number(), // u: lack of evidence [0,1]\n baseRate: v.number(), // a: prior probability [0,1]\n trigger: v.union(\n v.literal(\"evidence_added\"),\n v.literal(\"evidence_removed\"),\n v.literal(\"contradiction_detected\"),\n v.literal(\"contradiction_resolved\"),\n v.literal(\"agent_assessment\"),\n v.literal(\"worktree_outcome\"),\n v.literal(\"worktree_completed\"),\n // SL-specific triggers\n v.literal(\"fusion\"),\n v.literal(\"discount\"),\n v.literal(\"deduction\"),\n v.literal(\"backfill_synthetic\")\n ),\n rationale: v.optional(v.string()),\n userId: v.string(),\n // SL operator provenance (optional — defaults inside the SL scorer)\n slOperator: v.optional(\n v.union(\n v.literal(\"cumulative_fusion\"),\n v.literal(\"averaging_fusion\"),\n v.literal(\"trust_discount\"),\n v.literal(\"conditional_deduction\"),\n v.literal(\"dependency_cascade\"),\n v.literal(\"negation\"),\n v.literal(\"constraint_fusion\"),\n v.literal(\"no_op\"),\n v.literal(\"prior_seed\")\n )\n ),\n triggeringEvidenceId: v.optional(v.id(\"epistemicNodes\")),\n triggeringWorktreeId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: AppendSlScoringArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const result = await applyBeliefConfidenceChange(ctx, {\n nodeId: args.nodeId,\n belief: args.belief,\n disbelief: args.disbelief,\n uncertainty: args.uncertainty,\n baseRate: args.baseRate,\n trigger: args.trigger,\n rationale: args.rationale,\n authenticatedUserId,\n slOperator: args.slOperator,\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringWorktreeId: args.triggeringWorktreeId,\n });\n\n // Schedule edge-defined SL propagation through graph edges (EK-7, LKC-5)\n // Only propagate if confidence actually changed (avoid noise)\n if (Math.abs(result.newConfidence - result.previousConfidence) >= 0.01) {\n await ctx.scheduler.runAfter(\n 0,\n internal.epistemicBeliefs.propagateConfidenceChange,\n {\n nodeId: args.nodeId,\n opinion_b: args.belief,\n opinion_d: args.disbelief,\n opinion_u: args.uncertainty,\n opinion_a: args.baseRate ?? 0.5,\n userId: authenticatedUserId,\n }\n );\n }\n\n return {\n nodeId: result.nodeId,\n previousConfidence: result.previousConfidence,\n newConfidence: result.newConfidence,\n opinion: result.opinion,\n };\n },\n});\n\n// Two-axis model (valence/certainty) — REMOVED in EK-7.\n// All confidence movement is evidence-backed SL scoring, not user-authored state.\n\n// =============================================================================\n// UPDATE STATUS\n// =============================================================================\n\n/**\n * Update a belief's status.\n */\nexport const updateStatus = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n ),\n reason: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateStatusArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = readBeliefNodeView(await ctx.db.get(args.nodeId));\n if (!node) {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireScopeWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const previousStatus = node.status;\n\n // Update the node's status and metadata in a single atomic patch\n const metadata = node.metadata ?? {};\n await ctx.db.patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n metadata: {\n ...metadata,\n status: args.status,\n },\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n previousState: { status: previousStatus },\n newState: { status: args.status, reason: args.reason },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return { nodeId: args.nodeId, previousStatus, newStatus: args.status };\n },\n});\n\n// =============================================================================\n// ARCHIVE\n// =============================================================================\n\n/**\n * Archive a belief (soft delete).\n * Lucern invariant: Beliefs are never deleted, only archived.\n */\nexport const archive = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n reason: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: ArchiveArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const node = readBeliefNodeView(await ctx.db.get(args.nodeId));\n if (!node) {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireScopeWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n return await ctx.runMutation(\n // Use updateStatus internally\n internal.epistemicBeliefs.updateStatusInternal,\n {\n nodeId: args.nodeId,\n status: \"archived\",\n reason: args.reason,\n userId: authenticatedUserId,\n }\n );\n },\n});\n\n// =============================================================================\n// UPDATE RATIONALE\n// =============================================================================\n\n/**\n * Update a belief rationale without changing formulation.\n * Formulation mutability rules are unchanged (use fork/refine paths for wording).\n */\nexport const updateRationale = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateRationaleArgs) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = readBeliefNodeView(await ctx.db.get(args.nodeId));\n if (!node) {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireScopeWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const metadata = node.metadata ?? {};\n const previousRationale =\n typeof metadata.rationale === \"string\" ? metadata.rationale : undefined;\n const nextRationale = args.rationale?.trim();\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n rationale:\n nextRationale && nextRationale.length > 0 ? nextRationale : undefined,\n },\n updatedAt: now,\n });\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n previousState: { rationale: previousRationale },\n newState: {\n rationale:\n nextRationale && nextRationale.length > 0 ? nextRationale : undefined,\n },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return {\n nodeId: args.nodeId,\n previousRationale,\n newRationale: nextRationale,\n };\n },\n});\n\n// Internal version for use by other mutations\nexport const updateStatusInternal = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n ),\n reason: v.optional(v.string()),\n userId: v.string(),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateStatusInternalArgs) => {\n const now = Date.now();\n\n const node = readBeliefNodeView(await ctx.db.get(args.nodeId));\n if (!node) {\n throw new Error(\"Belief not found\");\n }\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: await resolveNodeScopeForWorkspaceIsolation(ctx, node),\n mutationName: \"epistemicBeliefs.updateStatusInternal\",\n });\n\n const previousStatus = node.status;\n\n await ctx.db.patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n previousState: { status: previousStatus },\n newState: { status: args.status, reason: args.reason },\n changedBy: args.userId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return { nodeId: args.nodeId, previousStatus, newStatus: args.status };\n },\n});\n"]}
|