@lucern/graph-primitives 0.1.0-alpha.2
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/README.md +29 -0
- package/dist/beliefDecay-Q_26RTc-.d.ts +72 -0
- package/dist/beliefDecay.d.ts +2 -0
- package/dist/beliefDecay.js +1628 -0
- package/dist/beliefDecay.js.map +1 -0
- package/dist/beliefEvidenceLinks-42FlR48t.d.ts +77 -0
- package/dist/beliefEvidenceLinks.d.ts +1 -0
- package/dist/beliefEvidenceLinks.js +1978 -0
- package/dist/beliefEvidenceLinks.js.map +1 -0
- package/dist/beliefLifecycle-C-AehZgF.d.ts +43 -0
- package/dist/beliefLifecycle.d.ts +1 -0
- package/dist/beliefLifecycle.js +98 -0
- package/dist/beliefLifecycle.js.map +1 -0
- package/dist/confidencePropagationDispatch.d.ts +46 -0
- package/dist/confidencePropagationDispatch.js +744 -0
- package/dist/confidencePropagationDispatch.js.map +1 -0
- package/dist/contradictions-Hdwl7zid.d.ts +71 -0
- package/dist/contradictions.d.ts +1 -0
- package/dist/contradictions.js +1557 -0
- package/dist/contradictions.js.map +1 -0
- package/dist/convex.d.ts +23 -0
- package/dist/convex.js +17 -0
- package/dist/convex.js.map +1 -0
- package/dist/edgeValidation-CeI0wc0r.d.ts +35 -0
- package/dist/edgeValidation.d.ts +2 -0
- package/dist/edgeValidation.js +307 -0
- package/dist/edgeValidation.js.map +1 -0
- package/dist/edges/contains.d.ts +6 -0
- package/dist/edges/contains.js +14 -0
- package/dist/edges/contains.js.map +1 -0
- package/dist/edges/contradicts.d.ts +6 -0
- package/dist/edges/contradicts.js +183 -0
- package/dist/edges/contradicts.js.map +1 -0
- package/dist/edges/dependsOn.d.ts +6 -0
- package/dist/edges/dependsOn.js +240 -0
- package/dist/edges/dependsOn.js.map +1 -0
- package/dist/edges/derivedFrom.d.ts +6 -0
- package/dist/edges/derivedFrom.js +14 -0
- package/dist/edges/derivedFrom.js.map +1 -0
- package/dist/edges/elaborates.d.ts +6 -0
- package/dist/edges/elaborates.js +100 -0
- package/dist/edges/elaborates.js.map +1 -0
- package/dist/edges/index.d.ts +3 -0
- package/dist/edges/index.js +556 -0
- package/dist/edges/index.js.map +1 -0
- package/dist/edges/informs.d.ts +6 -0
- package/dist/edges/informs.js +112 -0
- package/dist/edges/informs.js.map +1 -0
- package/dist/edges/propagationTypes.d.ts +39 -0
- package/dist/edges/propagationTypes.js +17 -0
- package/dist/edges/propagationTypes.js.map +1 -0
- package/dist/edges/refutes.d.ts +6 -0
- package/dist/edges/refutes.js +108 -0
- package/dist/edges/refutes.js.map +1 -0
- package/dist/edges/supports.d.ts +6 -0
- package/dist/edges/supports.js +193 -0
- package/dist/edges/supports.js.map +1 -0
- package/dist/edges/tests.d.ts +6 -0
- package/dist/edges/tests.js +14 -0
- package/dist/edges/tests.js.map +1 -0
- package/dist/edges/utils.d.ts +12 -0
- package/dist/edges/utils.js +188 -0
- package/dist/edges/utils.js.map +1 -0
- package/dist/embeddingTrigger.d.ts +24 -0
- package/dist/embeddingTrigger.js +24 -0
- package/dist/embeddingTrigger.js.map +1 -0
- package/dist/entityBridge-DMaKooYn.d.ts +59 -0
- package/dist/entityBridge.d.ts +1 -0
- package/dist/entityBridge.js +663 -0
- package/dist/entityBridge.js.map +1 -0
- package/dist/entityLifecycle-BkhRJ-XI.d.ts +69 -0
- package/dist/entityLifecycle.d.ts +1 -0
- package/dist/entityLifecycle.js +2083 -0
- package/dist/entityLifecycle.js.map +1 -0
- package/dist/entityValidation-KLZ_Xl2D.d.ts +50 -0
- package/dist/entityValidation.d.ts +3 -0
- package/dist/entityValidation.js +71 -0
- package/dist/entityValidation.js.map +1 -0
- package/dist/epistemicAnswers-DSP1slZ9.d.ts +67 -0
- package/dist/epistemicAnswers.d.ts +1 -0
- package/dist/epistemicAnswers.js +1650 -0
- package/dist/epistemicAnswers.js.map +1 -0
- package/dist/epistemicBeliefs-DtFVTp-k.d.ts +377 -0
- package/dist/epistemicBeliefs.d.ts +5 -0
- package/dist/epistemicBeliefs.js +6386 -0
- package/dist/epistemicBeliefs.js.map +1 -0
- package/dist/epistemicContractHelpers.d.ts +1 -0
- package/dist/epistemicContractHelpers.js +320 -0
- package/dist/epistemicContractHelpers.js.map +1 -0
- package/dist/epistemicContracts.d.ts +77 -0
- package/dist/epistemicContracts.js +8436 -0
- package/dist/epistemicContracts.js.map +1 -0
- package/dist/epistemicEdges-DcA8ErUG.d.ts +191 -0
- package/dist/epistemicEdges.d.ts +2 -0
- package/dist/epistemicEdges.js +2749 -0
- package/dist/epistemicEdges.js.map +1 -0
- package/dist/epistemicEvidence-Bo638XDP.d.ts +128 -0
- package/dist/epistemicEvidence.d.ts +3 -0
- package/dist/epistemicEvidence.js +3282 -0
- package/dist/epistemicEvidence.js.map +1 -0
- package/dist/epistemicHelpers-Bd9xbaib.d.ts +329 -0
- package/dist/epistemicHelpers.d.ts +4 -0
- package/dist/epistemicHelpers.js +999 -0
- package/dist/epistemicHelpers.js.map +1 -0
- package/dist/epistemicLinking-CyeLOIzN.d.ts +35 -0
- package/dist/epistemicLinking.d.ts +1 -0
- package/dist/epistemicLinking.js +1391 -0
- package/dist/epistemicLinking.js.map +1 -0
- package/dist/epistemicNodes-BpD6Koud.d.ts +167 -0
- package/dist/epistemicNodes.d.ts +2 -0
- package/dist/epistemicNodes.js +2942 -0
- package/dist/epistemicNodes.js.map +1 -0
- package/dist/epistemicQuestions-CmEeY6zQ.d.ts +214 -0
- package/dist/epistemicQuestions.d.ts +3 -0
- package/dist/epistemicQuestions.js +4993 -0
- package/dist/epistemicQuestions.js.map +1 -0
- package/dist/epistemicSources-ZazxHOK1.d.ts +25 -0
- package/dist/epistemicSources.d.ts +1 -0
- package/dist/epistemicSources.js +2025 -0
- package/dist/epistemicSources.js.map +1 -0
- package/dist/evaluators/index.d.ts +9 -0
- package/dist/evaluators/index.js +8440 -0
- package/dist/evaluators/index.js.map +1 -0
- package/dist/evaluators/lintCheckerEvaluator.d.ts +11 -0
- package/dist/evaluators/lintCheckerEvaluator.js +155 -0
- package/dist/evaluators/lintCheckerEvaluator.js.map +1 -0
- package/dist/evaluators/sentryCheckerEvaluator.d.ts +11 -0
- package/dist/evaluators/sentryCheckerEvaluator.js +126 -0
- package/dist/evaluators/sentryCheckerEvaluator.js.map +1 -0
- package/dist/evaluators/shared.d.ts +27 -0
- package/dist/evaluators/shared.js +92 -0
- package/dist/evaluators/shared.js.map +1 -0
- package/dist/evaluators/testRunnerEvaluator.d.ts +17 -0
- package/dist/evaluators/testRunnerEvaluator.js +232 -0
- package/dist/evaluators/testRunnerEvaluator.js.map +1 -0
- package/dist/evaluators/tscCheckerEvaluator.d.ts +11 -0
- package/dist/evaluators/tscCheckerEvaluator.js +189 -0
- package/dist/evaluators/tscCheckerEvaluator.js.map +1 -0
- package/dist/globalId-DKh9d_uD.d.ts +20 -0
- package/dist/globalId.d.ts +1 -0
- package/dist/globalId.js +15 -0
- package/dist/globalId.js.map +1 -0
- package/dist/graphTypes-CpgIuCdo.d.ts +52 -0
- package/dist/graphTypes.d.ts +1 -0
- package/dist/graphTypes.js +120 -0
- package/dist/graphTypes.js.map +1 -0
- package/dist/helpers-BYHIk5vU.d.ts +27 -0
- package/dist/helpers.d.ts +4 -0
- package/dist/helpers.js +313 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index-Dct1T70K.d.ts +25 -0
- package/dist/index-Dq-7R-gi.d.ts +31 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.js +22294 -0
- package/dist/index.js.map +1 -0
- package/dist/invariantEnforcement.d.ts +52 -0
- package/dist/invariantEnforcement.js +231 -0
- package/dist/invariantEnforcement.js.map +1 -0
- package/dist/logicalRoleInference-CJxqWi3u.d.ts +16 -0
- package/dist/logicalRoleInference.d.ts +3 -0
- package/dist/logicalRoleInference.js +64 -0
- package/dist/logicalRoleInference.js.map +1 -0
- package/dist/matcherFeedbackUtils.d.ts +33 -0
- package/dist/matcherFeedbackUtils.js +95 -0
- package/dist/matcherFeedbackUtils.js.map +1 -0
- package/dist/ontology-matching-Buhu23ss.d.ts +48 -0
- package/dist/ontology-matching.d.ts +2 -0
- package/dist/ontology-matching.js +346 -0
- package/dist/ontology-matching.js.map +1 -0
- package/dist/ontologyApproval-Ba0Jjk1k.d.ts +26 -0
- package/dist/ontologyApproval.d.ts +1 -0
- package/dist/ontologyApproval.js +78 -0
- package/dist/ontologyApproval.js.map +1 -0
- package/dist/ontologyDefinitions.d.ts +72 -0
- package/dist/ontologyDefinitions.js +635 -0
- package/dist/ontologyDefinitions.js.map +1 -0
- package/dist/ontologyHelpers.d.ts +79 -0
- package/dist/ontologyHelpers.js +81 -0
- package/dist/ontologyHelpers.js.map +1 -0
- package/dist/ontologyRegistry-B67rPJ16.d.ts +31 -0
- package/dist/ontologyRegistry.d.ts +1 -0
- package/dist/ontologyRegistry.js +296 -0
- package/dist/ontologyRegistry.js.map +1 -0
- package/dist/projectionReconciliation-CxrXYGaB.d.ts +20 -0
- package/dist/projectionReconciliation.d.ts +1 -0
- package/dist/projectionReconciliation.js +261 -0
- package/dist/projectionReconciliation.js.map +1 -0
- package/dist/projectionStaleness-CAdpIsaW.d.ts +51 -0
- package/dist/projectionStaleness.d.ts +1 -0
- package/dist/projectionStaleness.js +57 -0
- package/dist/projectionStaleness.js.map +1 -0
- package/dist/questionEvidenceLinks-BdQD0TkM.d.ts +34 -0
- package/dist/questionEvidenceLinks.d.ts +1 -0
- package/dist/questionEvidenceLinks.js +1690 -0
- package/dist/questionEvidenceLinks.js.map +1 -0
- package/dist/resolverTypes-CC8Ea2E2.d.ts +20 -0
- package/dist/resolverTypes.d.ts +4 -0
- package/dist/resolverTypes.js +3 -0
- package/dist/resolverTypes.js.map +1 -0
- package/dist/resolvers-Br1a6eLV.d.ts +14 -0
- package/dist/resolvers.d.ts +5 -0
- package/dist/resolvers.js +308 -0
- package/dist/resolvers.js.map +1 -0
- package/dist/scopeResolverCompat.d.ts +26 -0
- package/dist/scopeResolverCompat.js +242 -0
- package/dist/scopeResolverCompat.js.map +1 -0
- package/dist/text-matching-CMn2WnVD.d.ts +40 -0
- package/dist/text-matching.d.ts +2 -0
- package/dist/text-matching.js +246 -0
- package/dist/text-matching.js.map +1 -0
- package/dist/topicOntologyResolver.d.ts +80 -0
- package/dist/topicOntologyResolver.js +67 -0
- package/dist/topicOntologyResolver.js.map +1 -0
- package/dist/topicProjectOverlay.d.ts +92 -0
- package/dist/topicProjectOverlay.js +249 -0
- package/dist/topicProjectOverlay.js.map +1 -0
- package/dist/topicScope-By_zp4tt.d.ts +34 -0
- package/dist/topicScope.d.ts +3 -0
- package/dist/topicScope.js +206 -0
- package/dist/topicScope.js.map +1 -0
- package/dist/workspaceIsolation.d.ts +44 -0
- package/dist/workspaceIsolation.js +950 -0
- package/dist/workspaceIsolation.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/beliefDecay.ts","../../confidence/src/v1/operations/subjectiveLogic/index.ts","../../confidence/src/v1/operations/bridge/index.ts","../../confidence/src/v1/operations/scoring.ts","../../confidence/src/v1/operations/contradiction/detectTupleContradiction.ts","../../confidence/src/v1/operations/dynamics/cascade.ts","../../confidence/src/v1/operations/dynamics/defeat.ts","../../confidence/src/v1/operations/dynamics/revision.ts","../../confidence/src/v1/operations/dynamics/decay.ts","../../confidence/src/v1/operations/contracts/epistemicContract.ts","../../access-control/src/convex.ts","../../access-control/src/topicProjectOverlay.ts","../../access-control/src/projectGrantsBridge.ts","../../access-control/src/resolvers.ts","../../access-control/src/principalContext.ts","../../access-control/src/access.ts","../../schema-management/src/validators.ts","../src/convex.ts","../src/resolvers.ts","../src/topicProjectOverlay.ts","../src/topicScope.ts","../src/beliefEvidenceLinks.ts","../src/matcherFeedbackUtils.ts","../src/scopeResolverCompat.ts","../src/beliefLifecycle.ts","../src/contradictions.ts","../src/edges/index.ts","../src/edges/contains.ts","../src/edges/utils.ts","../src/edges/contradicts.ts","../src/edges/dependsOn.ts","../src/edges/derivedFrom.ts","../src/edges/elaborates.ts","../src/edges/informs.ts","../src/edges/propagationTypes.ts","../src/edges/refutes.ts","../src/edges/supports.ts","../src/edges/tests.ts","../src/edgeValidation.ts","../src/graphTypes.ts","../src/entityBridge.ts","../../access-control/src/auth.ts","../src/entityLifecycle.ts","../src/entityValidation.ts","../src/globalId.ts","../src/topicOntologyResolver.ts","../src/evaluators/index.ts","../src/epistemicBeliefs.ts","../../access-control/src/audience.ts","../../access-control/src/audienceRegistry.ts","../../schema-management/src/convex.ts","../../schema-management/src/enumValidation.ts","../../schema-management/src/shared/common.ts","../../schema-management/src/spine/tables/epistemicNodes.ts","../src/workspaceIsolation.ts","../src/confidencePropagationDispatch.ts","../src/embeddingTrigger.ts","../src/logicalRoleInference.ts","../src/epistemicContracts.ts","../src/evaluators/shared.ts","../src/evaluators/lintCheckerEvaluator.ts","../src/evaluators/sentryCheckerEvaluator.ts","../src/evaluators/testRunnerEvaluator.ts","../src/evaluators/tscCheckerEvaluator.ts","../src/epistemicAnswers.ts","../src/epistemicEdges.ts","../src/epistemicEvidence.ts","../src/epistemicHelpers.ts","../src/epistemicLinking.ts","../src/epistemicNodes.ts","../src/helpers.ts","../src/invariantEnforcement.ts","../src/epistemicQuestions.ts","../../worktrees/src/v1/engine/scopeBridge.ts","../../worktrees/src/v1/engine/worktreeWorkflowBridge.ts","../src/epistemicSources.ts","../src/ontologyApproval.ts","../src/ontology-matching.ts","../../../packages/contracts/src/text-matching.contract.ts","../../../packages/contracts/src/v1/ontologies/v1.ts","../src/ontologyRegistry.ts","../src/projectionReconciliation.ts","../src/projectionStaleness.ts","../src/questionEvidenceLinks.ts","../src/text-matching.ts"],"names":["clamp01","opinion","confidence","predictionMeta","beliefStatus","lifecycleStatus","resolvedUser","user","allTopics","api","anyApi","componentsGeneric","internalActionGeneric","internalMutationGeneric","internalQueryGeneric","mutationGeneric","queryGeneric","LEGACY_SCOPE_FIELD","readNonEmptyString","readStringArray","readMetadata","readLegacyProjectId","coerceVisibility","coerceStatus","mapProjectType","isProjectLikeTopic","resolveTopicDoc","materializeTopicProjectOverlay","resolveTopicProjectOverlay","listTopicProjectOverlays","isMissingLucernChildComponentError","defaultResolvers","resolverOverrides","v","temporalNature","project","normalizeScopeValue","topicId","hasResolvedPredictionOutcome","normalizeBeliefConfidence","create","getByProject","update","nodeType","content","getById","updateStatus","internal","sourceType","externalIds","epistemicLayer","insightIdUnion","throwStructuredMutationError","generateContentHash","requireProjectWriteAccess","requireAuthenticatedUserId","query","BUILT_IN_EVIDENTIAL_EVALUATOR","BUILT_IN_EVIDENTIAL_ALIASES","BUILT_IN_METRIC_CHECKER","BUILT_IN_REFERENCE_CHECK_COUNTER","BUILT_IN_TEMPORAL_DEADLINE","BUILT_IN_MARKET_INDEX_COMPARATOR","parseConfig","parseDiagnostics","getMatchedDiagnostics","answerQuality","getByTopic","getLineage","remove","edgeMatchesWorkspaceReasoningScope","getByProjectSystem","internalCreate","internalGetByProject","internalGetByTopic","markProjectGraphDirty","EDGE_LAYER_RULES","getDefaultMinLayer","getLayerDepth","getNodeLayer","isValidLayerConnection","shouldContinueTraversal","validateEdgeLayers","contentHash","existing","archive","batchCreate","createInternal","epistemicLayerValidator","get","getByGlobalId","getByProjectAndType","listAll","createEpistemicEdge","ONTOLOGICAL_NODE_TYPES","nodeMatchesWorkspaceReasoningScope","search","getByPillar","getForBelief","normalizeString","resolveTopicProjectScope","worktree","questionType","asRecord","nextMetadata","title","getByInsight","getByQuestion","getEvidenceWithDetails","getPendingSuggestions","reviewSuggestion","suggestionStatusValidator","matcherMetadataValidator","recordMatcherDecision","applyOperationalLinkEffects","removeOperationalLinkEffects"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Belief Decay Algorithm\n *\n * A standalone, refinable module that governs confidence decay for ALL beliefs.\n *\n * Core principles:\n * 1. All beliefs decay over time — confidence is not permanent\n * 2. Forecast beliefs decay FASTER as their deadline approaches\n * 3. The algorithm doesn't auto-rescore — it identifies WHEN rescoring is needed\n * 4. Bayesian updates combine inherited confidence with new human assessments\n *\n * Used by:\n * - Cross-project discovery (adoption with decayed confidence)\n * - Morning briefs (surface beliefs needing rescore)\n * - Sprint planning (flag stale beliefs in scope)\n * - BI agents (automated rescore reminders)\n * - Confidence display (show effective vs raw confidence)\n *\n * @module beliefDecay\n */\n\nimport { v } from \"convex/values\";\nimport {\n DECAY_TIERS,\n DEADLINE_URGENCY,\n bayesianUpdate,\n computeBaseDecay,\n computeDeadlineUrgency,\n computeEffectiveDecay,\n getRescoringSchedule,\n} from \"@lucern/confidence\";\nimport { getAccessibleProjectIds } from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\nimport type { Id } from \"./convex\";\nimport { query } from \"./convex\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs } from \"./topicScope\";\n\nexport {\n DECAY_TIERS,\n DEADLINE_URGENCY,\n bayesianUpdate,\n computeBaseDecay,\n computeDeadlineUrgency,\n computeEffectiveDecay,\n getRescoringSchedule,\n};\n\n// =============================================================================\n// QUERIES — Used by morning briefs, sprint planning, BI agents\n// =============================================================================\n\n/**\n * Identify all beliefs in a project that need rescoring.\n *\n * Returns beliefs sorted by urgency (critical first), with their\n * rescoring schedule and decay details.\n *\n * Used by:\n * - Morning briefs: \"3 beliefs need your attention this week\"\n * - Sprint planning: \"these beliefs in scope are stale\"\n * - BI agents: automated rescore reminders\n * - Project dashboard: health indicators\n */\nexport const identifyBeliefsNeedingRescore = query({\n args: {\n ...optionalScopeArgs,\n maxResults: v.optional(v.number()),\n // Only return beliefs at or above this priority\n minPriority: v.optional(\n v.union(\n v.literal(\"critical\"),\n v.literal(\"high\"),\n v.literal(\"medium\"),\n v.literal(\"low\")\n )\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const { projectId, maxResults = 20, minPriority = \"medium\" } = args;\n\n const priorityRank: Record<string, number> = {\n critical: 4,\n high: 3,\n medium: 2,\n low: 1,\n };\n const minRank = priorityRank[minPriority] ?? 2;\n\n // Get all active beliefs for this project\n const beliefs = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\n args.topicId ? \"by_topic_type\" : \"by_project_type\",\n (q: any) =>\n args.topicId\n ? q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n : q.eq(\"projectId\", projectId).eq(\"nodeType\", \"belief\")\n )\n .collect();\n\n const activeBeliefs = beliefs.filter((b) => b.status === \"active\");\n\n // For each belief, get last scoring and compute schedule\n const results: Array<{\n beliefId: Id<\"epistemicNodes\">;\n beliefText: string;\n confidence: number;\n beliefStatus: string;\n temporalNature: string;\n expectedBy: number | null;\n lastScoredAt: number;\n daysSinceScoring: number;\n schedule: ReturnType<typeof getRescoringSchedule>;\n }> = [];\n\n for (const belief of activeBeliefs) {\n const metadata = (belief.metadata || {}) as any;\n const predictionMeta = (belief as any).predictionMeta as\n | { expectedBy?: number }\n | undefined;\n const temporalNature =\n ((belief as any).temporalNature as string) || \"unknown\";\n const beliefStatus =\n (belief as any).beliefStatus ||\n (metadata.beliefStatus as string | undefined) ||\n null;\n\n // Get most recent confidence entry\n const confidenceHistory = await ctx.db\n .query(\"beliefConfidence\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", belief._id as any))\n .collect();\n\n const sorted = confidenceHistory.sort(\n (a, b) => b.assessedAt - a.assessedAt\n );\n const lastEntry = sorted[0] ?? null;\n const lastScoredAt =\n lastEntry?.assessedAt ||\n belief.updatedAt ||\n (belief as any).createdAt ||\n Date.now();\n const confidence = lastEntry?.confidence ?? metadata.confidence ?? 0.5;\n\n const schedule = getRescoringSchedule({\n lastScoredAt,\n temporalNature: temporalNature as any,\n expectedBy: predictionMeta?.expectedBy ?? null,\n predictionMeta: predictionMeta ?? null,\n confidence,\n beliefStatus,\n });\n\n // Filter by minimum priority\n if (priorityRank[schedule.priority] >= minRank) {\n results.push({\n beliefId: belief._id,\n beliefText: belief.canonicalText,\n confidence,\n beliefStatus: beliefStatus ?? \"assumption\",\n temporalNature,\n expectedBy: predictionMeta?.expectedBy ?? null,\n lastScoredAt,\n daysSinceScoring: Math.round(schedule.decay.ageDays),\n schedule,\n });\n }\n }\n\n // Sort by priority (critical first), then by days overdue\n results.sort((a, b) => {\n const rankDiff =\n priorityRank[b.schedule.priority] - priorityRank[a.schedule.priority];\n if (rankDiff !== 0) {\n return rankDiff;\n }\n // Within same priority, most overdue first\n return a.schedule.daysUntilRescore - b.schedule.daysUntilRescore;\n });\n\n return {\n beliefs: results.slice(0, maxResults),\n summary: {\n total: results.length,\n critical: results.filter((r) => r.schedule.priority === \"critical\")\n .length,\n high: results.filter((r) => r.schedule.priority === \"high\").length,\n medium: results.filter((r) => r.schedule.priority === \"medium\").length,\n overdue: results.filter((r) => r.schedule.isOverdue).length,\n forecastsApproaching: results.filter(\n (r) =>\n r.temporalNature === \"forecast\" &&\n r.schedule.decay.urgency?.urgencyTier.label !== \"distant\"\n ).length,\n },\n };\n },\n});\n\n/**\n * Global belief health across ALL projects for a user.\n *\n * Returns beliefs needing attention from every accessible project,\n * sorted by urgency. This powers a permanent \"Belief Health\" section\n * in the workspace that surfaces stale beliefs regardless of which\n * project they belong to.\n *\n * Key design decision: push model, not pull. Users don't revisit\n * completed theme project pages, so stale beliefs from finished\n * themes only surface here, in morning briefs, and in chat.\n */\nexport const getGlobalBeliefHealth = query({\n args: {\n clerkId: v.string(),\n maxResults: v.optional(v.number()),\n minPriority: v.optional(\n v.union(\n v.literal(\"critical\"),\n v.literal(\"high\"),\n v.literal(\"medium\"),\n v.literal(\"low\")\n )\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const { clerkId, maxResults = 30, minPriority = \"medium\" } = args;\n\n const priorityRank: Record<string, number> = {\n critical: 4,\n high: 3,\n medium: 2,\n low: 1,\n };\n const minRank = priorityRank[minPriority] ?? 2;\n\n // Get all projects accessible to this user\n const allProjects =\n await resolveGraphPrimitivesAppResolvers(ctx).listTopics(ctx);\n const accessibleProjectIds = await getAccessibleProjectIds(ctx, clerkId);\n const accessibleProjects = allProjects.filter((project) =>\n accessibleProjectIds.has(project._id)\n );\n\n const allResults: Array<{\n projectId: string;\n projectName: string;\n beliefId: Id<\"epistemicNodes\">;\n beliefText: string;\n confidence: number;\n temporalNature: string;\n expectedBy: number | null;\n daysSinceScoring: number;\n priority: \"critical\" | \"high\" | \"medium\" | \"low\";\n reason: string;\n deadlineUrgency: string | null;\n }> = [];\n\n for (const project of accessibleProjects.slice(0, 20)) {\n const [topicBeliefs, projectBeliefs] = await Promise.all([\n ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: any) =>\n q.eq(\"topicId\", project._id).eq(\"nodeType\", \"belief\")\n )\n .collect(),\n ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_project_type\", (q: any) =>\n q.eq(\"projectId\", project._id).eq(\"nodeType\", \"belief\")\n )\n .collect(),\n ]);\n const beliefs = Array.from(\n new Map(\n [...topicBeliefs, ...projectBeliefs].map((b) => [String(b._id), b])\n ).values()\n );\n\n const activeBeliefs = beliefs.filter((b) => b.status === \"active\");\n\n for (const belief of activeBeliefs) {\n const metadata = (belief.metadata || {}) as any;\n const predictionMeta = (belief as any).predictionMeta as\n | { expectedBy?: number }\n | undefined;\n const temporalNature =\n ((belief as any).temporalNature as string) || \"unknown\";\n const confidence = belief.confidence ?? metadata.confidence ?? 0.5;\n\n // Use updatedAt/_creationTime as proxy for last scoring\n const lastScoredAt =\n belief.updatedAt || (belief as any).createdAt || belief._creationTime;\n\n const schedule = getRescoringSchedule({\n lastScoredAt,\n temporalNature: temporalNature as any,\n expectedBy: predictionMeta?.expectedBy ?? null,\n predictionMeta: predictionMeta ?? null,\n confidence,\n beliefStatus:\n (belief as any).beliefStatus ||\n (metadata.beliefStatus as string | undefined) ||\n null,\n });\n\n if (priorityRank[schedule.priority] >= minRank) {\n allResults.push({\n projectId: project._id,\n projectName: project.name,\n beliefId: belief._id,\n beliefText: belief.canonicalText,\n confidence,\n temporalNature,\n expectedBy: predictionMeta?.expectedBy ?? null,\n daysSinceScoring: Math.round(schedule.decay.ageDays),\n priority: schedule.priority,\n reason: schedule.reason,\n deadlineUrgency: schedule.decay.urgency?.urgencyTier.label ?? null,\n });\n }\n }\n }\n\n // Sort by priority (critical first), then by staleness\n allResults.sort((a, b) => {\n const rankDiff = priorityRank[b.priority] - priorityRank[a.priority];\n if (rankDiff !== 0) {\n return rankDiff;\n }\n return b.daysSinceScoring - a.daysSinceScoring;\n });\n\n const results = allResults.slice(0, maxResults);\n\n // Group by project for summary\n const projectGroups = new Map<string, number>();\n for (const r of allResults) {\n projectGroups.set(\n r.projectName,\n (projectGroups.get(r.projectName) || 0) + 1\n );\n }\n\n return {\n beliefs: results,\n summary: {\n total: allResults.length,\n critical: allResults.filter((r) => r.priority === \"critical\").length,\n high: allResults.filter((r) => r.priority === \"high\").length,\n medium: allResults.filter((r) => r.priority === \"medium\").length,\n projectsAffected: projectGroups.size,\n forecastsApproaching: allResults.filter(\n (r) =>\n r.temporalNature === \"forecast\" &&\n r.deadlineUrgency &&\n r.deadlineUrgency !== \"distant\"\n ).length,\n byProject: Array.from(projectGroups.entries()).map(([name, count]) => ({\n projectName: name,\n count,\n })),\n },\n };\n },\n});\n\n/**\n * Get decay info for a single belief.\n *\n * Lightweight query for UI components that need to show\n * freshness indicators on individual beliefs.\n */\nexport const getBeliefDecayInfo = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const belief = await ctx.db.get(args.beliefId);\n if (!belief) {\n return null;\n }\n\n const metadata = (belief.metadata || {}) as any;\n const predictionMeta = (belief as any).predictionMeta as\n | { expectedBy?: number }\n | undefined;\n const temporalNature =\n ((belief as any).temporalNature as string) || \"unknown\";\n\n // Get most recent confidence entry\n const confidenceHistory = await ctx.db\n .query(\"beliefConfidence\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", args.beliefId as any))\n .collect();\n\n const sorted = confidenceHistory.sort(\n (a, b) => b.assessedAt - a.assessedAt\n );\n const lastEntry = sorted[0] ?? null;\n const lastScoredAt =\n lastEntry?.assessedAt ||\n belief.updatedAt ||\n (belief as any).createdAt ||\n Date.now();\n const confidence = lastEntry?.confidence ?? metadata.confidence ?? 0.5;\n\n const schedule = getRescoringSchedule({\n lastScoredAt,\n temporalNature: temporalNature as any,\n expectedBy: predictionMeta?.expectedBy ?? null,\n predictionMeta: predictionMeta ?? null,\n confidence,\n beliefStatus:\n (belief as any).beliefStatus ||\n (metadata.beliefStatus as string | undefined) ||\n null,\n });\n\n const decay = schedule.decay;\n\n return {\n confidence,\n decayedConfidence: confidence * decay.effectiveWeight,\n freshness: {\n label: decay.baseTier.label,\n ageDays: Math.round(decay.ageDays),\n weight: decay.effectiveWeight,\n action: decay.action,\n },\n deadline: decay.urgency\n ? {\n daysToDeadline: decay.urgency.daysToDeadline,\n urgency: decay.urgency.urgencyTier.label,\n isOverdue: decay.urgency.isOverdue,\n }\n : null,\n rescoringSchedule: {\n nextRescoreBy: schedule.nextRescoreBy,\n daysUntilRescore: schedule.daysUntilRescore,\n isOverdue: schedule.isOverdue,\n priority: schedule.priority,\n reason: schedule.reason,\n },\n };\n },\n});\n","import type { Opinion } from \"../../types\";\n\nexport function opinion(\n belief: number,\n disbelief: number,\n uncertainty: number,\n baseRate: number = 0.5\n): Opinion {\n const b = Math.max(0, Math.min(1, belief));\n const d = Math.max(0, Math.min(1, disbelief));\n const u = Math.max(0, Math.min(1, uncertainty));\n const a = Math.max(0, Math.min(1, baseRate));\n const sum = b + d + u;\n\n if (sum === 0) {\n return { b: 0, d: 0, u: 1, a };\n }\n\n return {\n b: b / sum,\n d: d / sum,\n u: u / sum,\n a,\n };\n}\n\nexport function vacuous(baseRate: number = 0.5): Opinion {\n return { b: 0, d: 0, u: 1, a: baseRate };\n}\n\nexport function dogmatic(probability: number, baseRate: number = 0.5): Opinion {\n const p = Math.max(0, Math.min(1, probability));\n return { b: p, d: 1 - p, u: 0, a: baseRate };\n}\n\nexport function project(o: Opinion): number {\n return o.b + o.a * o.u;\n}\n\nexport function confidenceLevel(o: Opinion): \"high\" | \"medium\" | \"low\" {\n const projected = project(o);\n if (o.u > 0.5) {\n return \"low\";\n }\n if (projected >= 0.8 && o.u < 0.2) {\n return \"high\";\n }\n if (projected >= 0.6) {\n return \"medium\";\n }\n return \"low\";\n}\n\nexport function cumulativeFusion(left: Opinion, right: Opinion): Opinion {\n if (left.u === 0 && right.u === 0) {\n return opinion(\n (left.b + right.b) / 2,\n (left.d + right.d) / 2,\n 0,\n (left.a + right.a) / 2\n );\n }\n\n const k = left.u + right.u - left.u * right.u;\n if (k === 0) {\n return vacuous((left.a + right.a) / 2);\n }\n\n return opinion(\n (left.b * right.u + right.b * left.u) / k,\n (left.d * right.u + right.d * left.u) / k,\n (left.u * right.u) / k,\n (left.a + right.a) / 2\n );\n}\n\nexport function averagingFusion(left: Opinion, right: Opinion): Opinion {\n if (left.u === 0 && right.u === 0) {\n return opinion(\n (left.b + right.b) / 2,\n (left.d + right.d) / 2,\n 0,\n (left.a + right.a) / 2\n );\n }\n\n const k = left.u + right.u;\n if (k === 0) {\n return vacuous((left.a + right.a) / 2);\n }\n\n return opinion(\n (left.b * right.u + right.b * left.u) / k,\n (left.d * right.u + right.d * left.u) / k,\n (2 * left.u * right.u) / k,\n (left.a + right.a) / 2\n );\n}\n\nexport function trustDiscount(sourceOpinion: Opinion, trust: number): Opinion {\n const weight = Math.max(0, Math.min(1, Math.abs(trust)));\n return opinion(\n weight * sourceOpinion.b,\n weight * sourceOpinion.d,\n 1 - weight * (sourceOpinion.b + sourceOpinion.d),\n sourceOpinion.a\n );\n}\n\nconst EPSILON = 1e-9;\n\nfunction childBaseRateFallback(\n ifTrue: Opinion,\n ifFalse: Opinion,\n fallbackBaseRate: number | undefined\n): number {\n if (fallbackBaseRate !== undefined) {\n return Math.max(0, Math.min(1, fallbackBaseRate));\n }\n\n if (Math.abs(ifTrue.a - ifFalse.a) <= EPSILON) {\n return ifTrue.a;\n }\n\n return (ifTrue.a + ifFalse.a) / 2;\n}\n\nfunction computeConditionalDeductionBaseRate(\n opinionA: Opinion,\n ifTrue: Opinion,\n ifFalse: Opinion,\n fallbackBaseRate: number\n): number {\n const denominator =\n 1 - opinionA.a * ifTrue.u - (1 - opinionA.a) * ifFalse.u;\n\n if (ifTrue.u + ifFalse.u < 2 - EPSILON && Math.abs(denominator) > EPSILON) {\n const baseRate =\n (opinionA.a * ifTrue.b + (1 - opinionA.a) * ifFalse.b) / denominator;\n if (baseRate >= -EPSILON && baseRate <= 1 + EPSILON) {\n return Math.max(0, Math.min(1, baseRate));\n }\n }\n\n return fallbackBaseRate;\n}\n\nfunction safeCorrectionTerm(\n numerator: number,\n denominator: number\n): number | undefined {\n if (Math.abs(denominator) <= EPSILON) {\n return undefined;\n }\n\n const value = numerator / denominator;\n if (!Number.isFinite(value)) {\n return undefined;\n }\n\n return Math.max(0, value);\n}\n\nexport function conditionalDeduction(\n opinionA: Opinion,\n ifTrue: Opinion,\n ifFalse: Opinion,\n fallbackBaseRate?: number\n): Opinion {\n const fallbackChildBaseRate = childBaseRateFallback(\n ifTrue,\n ifFalse,\n fallbackBaseRate\n );\n const childBaseRate = computeConditionalDeductionBaseRate(\n opinionA,\n ifTrue,\n ifFalse,\n fallbackChildBaseRate\n );\n const projectedAntecedent = project(opinionA);\n const projectedAntecedentComplement = 1 - projectedAntecedent;\n const intermediateBelief =\n opinionA.b * ifTrue.b +\n opinionA.d * ifFalse.b +\n opinionA.u * (ifTrue.b * opinionA.a + ifFalse.b * (1 - opinionA.a));\n const intermediateDisbelief =\n opinionA.b * ifTrue.d +\n opinionA.d * ifFalse.d +\n opinionA.u * (ifTrue.d * opinionA.a + ifFalse.d * (1 - opinionA.a));\n const intermediateUncertainty =\n opinionA.b * ifTrue.u +\n opinionA.d * ifFalse.u +\n opinionA.u * (ifTrue.u * opinionA.a + ifFalse.u * (1 - opinionA.a));\n const projectedVacuousDeduction =\n ifTrue.b * opinionA.a +\n ifFalse.b * (1 - opinionA.a) +\n childBaseRate *\n (ifTrue.u * opinionA.a + ifFalse.u * (1 - opinionA.a));\n const projectedConditionalA =\n ifTrue.b + childBaseRate * (1 - ifTrue.b - ifTrue.d);\n let correction = 0;\n\n if (\n (ifTrue.b > ifFalse.b && ifTrue.d > ifFalse.d) ||\n (ifTrue.b <= ifFalse.b && ifTrue.d <= ifFalse.d)\n ) {\n correction = 0;\n } else if (ifTrue.b > ifFalse.b && ifTrue.d <= ifFalse.d) {\n const beliefGap = ifTrue.b - ifFalse.b;\n const disbeliefGap = ifFalse.d - ifTrue.d;\n\n if (\n projectedVacuousDeduction <= projectedConditionalA &&\n projectedAntecedent <= opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n opinionA.a * opinionA.u * (intermediateBelief - ifTrue.b),\n projectedAntecedent * childBaseRate\n ) ?? 0;\n } else if (\n projectedVacuousDeduction <= projectedConditionalA &&\n projectedAntecedent > opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n opinionA.a * opinionA.u * (intermediateDisbelief - ifTrue.d) * beliefGap,\n projectedAntecedentComplement * childBaseRate * disbeliefGap\n ) ?? 0;\n } else if (\n projectedVacuousDeduction > projectedConditionalA &&\n projectedAntecedent <= opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n (1 - opinionA.a) *\n opinionA.u *\n (intermediateBelief - ifTrue.b) *\n disbeliefGap,\n projectedAntecedent * (1 - childBaseRate) * beliefGap\n ) ?? 0;\n } else {\n correction =\n safeCorrectionTerm(\n (1 - opinionA.a) * opinionA.u * (intermediateDisbelief - ifTrue.d),\n projectedAntecedentComplement * (1 - childBaseRate)\n ) ?? 0;\n }\n } else {\n const beliefGap = ifFalse.b - ifTrue.b;\n const disbeliefGap = ifTrue.d - ifFalse.d;\n\n if (\n projectedVacuousDeduction <= projectedConditionalA &&\n projectedAntecedent <= opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n (1 - opinionA.a) *\n opinionA.u *\n (intermediateDisbelief - ifTrue.d) *\n beliefGap,\n projectedAntecedent * childBaseRate * disbeliefGap\n ) ?? 0;\n } else if (\n projectedVacuousDeduction <= projectedConditionalA &&\n projectedAntecedent > opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n (1 - opinionA.a) * opinionA.u * (intermediateBelief - ifTrue.b),\n projectedAntecedentComplement * childBaseRate\n ) ?? 0;\n } else if (\n projectedVacuousDeduction > projectedConditionalA &&\n projectedAntecedent <= opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n opinionA.a * opinionA.u * (intermediateDisbelief - ifTrue.d),\n projectedAntecedent * (1 - childBaseRate)\n ) ?? 0;\n } else {\n correction =\n safeCorrectionTerm(\n opinionA.a *\n opinionA.u *\n (intermediateBelief - ifTrue.b) *\n disbeliefGap,\n projectedAntecedentComplement * (1 - childBaseRate) * beliefGap\n ) ?? 0;\n }\n }\n\n return opinion(\n intermediateBelief - childBaseRate * correction,\n intermediateDisbelief - (1 - childBaseRate) * correction,\n intermediateUncertainty + correction,\n childBaseRate\n );\n}\n\n/**\n * Abductive inference over a conditional.\n * Given an opinion on Y and conditionals P(Y|X), P(Y|~X), infer an opinion on X.\n */\nexport function conditionalAbduction(\n opinionY: Opinion,\n ifTrue: Opinion,\n ifFalse: Opinion,\n baseRateX: number\n): Opinion {\n const priorX = Math.max(0, Math.min(1, baseRateX));\n const probabilityY = project(opinionY);\n const probabilityGivenTrue = project(ifTrue);\n const probabilityGivenFalse = project(ifFalse);\n\n const posteriorIfYDenominator =\n probabilityGivenTrue * priorX +\n probabilityGivenFalse * (1 - priorX);\n const posteriorIfY =\n posteriorIfYDenominator === 0\n ? priorX\n : (probabilityGivenTrue * priorX) / posteriorIfYDenominator;\n\n const posteriorIfNotYDenominator =\n (1 - probabilityGivenTrue) * priorX +\n (1 - probabilityGivenFalse) * (1 - priorX);\n const posteriorIfNotY =\n posteriorIfNotYDenominator === 0\n ? priorX\n : ((1 - probabilityGivenTrue) * priorX) / posteriorIfNotYDenominator;\n\n const projectedX =\n probabilityY * posteriorIfY + (1 - probabilityY) * posteriorIfNotY;\n const uncertainty = Math.max(\n opinionY.u * 0.5,\n probabilityY * ifTrue.u + (1 - probabilityY) * ifFalse.u\n );\n\n return opinion(\n projectedX * (1 - uncertainty),\n (1 - projectedX) * (1 - uncertainty),\n uncertainty,\n priorX\n );\n}\n\nexport function negate(o: Opinion): Opinion {\n return { b: o.d, d: o.b, u: o.u, a: 1 - o.a };\n}\n\nexport function constraintFusion(\n left: Opinion,\n right: Opinion,\n mode: \"pressure\" | \"redistribute\" = \"pressure\"\n): { o1: Opinion; o2: Opinion } {\n if (mode === \"redistribute\") {\n const leftProjected = project(left);\n const rightProjected = project(right);\n const total = leftProjected + rightProjected;\n\n if (total <= 1) {\n return { o1: left, o2: right };\n }\n\n const scale = 1 / total;\n return {\n o1: opinion(\n left.b * scale,\n left.d + left.b * (1 - scale),\n left.u,\n left.a\n ),\n o2: opinion(\n right.b * scale,\n right.d + right.b * (1 - scale),\n right.u,\n right.a\n ),\n };\n }\n\n const pressureLeft = right.b * 0.5;\n const pressureRight = left.b * 0.5;\n\n return {\n o1: opinion(\n left.b - pressureLeft * 0.3,\n left.d + pressureLeft * 0.3,\n left.u,\n left.a\n ),\n o2: opinion(\n right.b - pressureRight * 0.3,\n right.d + pressureRight * 0.3,\n right.u,\n right.a\n ),\n };\n}\n\nexport function evidenceBalance(o: Opinion): number {\n const total = o.b + o.d;\n if (total === 0) {\n return 0;\n }\n return (o.b - o.d) / total;\n}\n\nexport function areTensioned(left: Opinion, right: Opinion): boolean {\n return (\n project(left) > 0.5 &&\n project(right) > 0.5 &&\n (left.d > 0.2 || right.d > 0.2)\n );\n}\n\nexport function informationGain(o: Opinion): number {\n if (o.u === 0) {\n return 0;\n }\n if (o.u === 1) {\n return 1;\n }\n return o.u * (1 - Math.abs(o.b - o.d));\n}\n","import type { DirichletOpinion, Opinion } from \"../../types\";\n\nexport const DEFAULT_NON_INFORMATIVE_WEIGHT = 2;\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nfunction clampNonNegative(value: number): number {\n return Number.isFinite(value) ? Math.max(0, value) : 0;\n}\n\nfunction normalizeNonInformativeWeight(weight?: number): number {\n if (weight === undefined) {\n return DEFAULT_NON_INFORMATIVE_WEIGHT;\n }\n return Number.isFinite(weight)\n ? Math.max(0, weight)\n : DEFAULT_NON_INFORMATIVE_WEIGHT;\n}\n\nfunction normalizeBaseRateVector(\n baseRate: readonly number[] | undefined,\n size: number\n): number[] {\n if (size === 0) {\n return [];\n }\n\n const fallback = Array.from({ length: size }, () => 1 / size);\n if (!baseRate) {\n return fallback;\n }\n\n if (baseRate.length !== size) {\n throw new Error(\n `Base-rate vector length ${baseRate.length} must match evidence vector length ${size}.`\n );\n }\n\n const normalized = baseRate.map((value) => clampNonNegative(value));\n const total = normalized.reduce((sum, value) => sum + value, 0);\n\n if (total === 0) {\n return fallback;\n }\n\n return normalized.map((value) => value / total);\n}\n\nexport function opinionFromDirichlet(\n alpha: readonly number[],\n nonInformativeWeight: number = DEFAULT_NON_INFORMATIVE_WEIGHT,\n baseRate?: readonly number[]\n): DirichletOpinion {\n const evidence = alpha.map((value) => clampNonNegative(value));\n const safeWeight = normalizeNonInformativeWeight(nonInformativeWeight);\n const normalizedBaseRate = normalizeBaseRateVector(baseRate, evidence.length);\n const totalEvidence = evidence.reduce((sum, value) => sum + value, 0);\n const denominator = totalEvidence + safeWeight;\n\n if (denominator === 0) {\n return {\n b: evidence.map(() => 0),\n u: 1,\n a: normalizedBaseRate,\n };\n }\n\n return {\n b: evidence.map((value) => value / denominator),\n u: safeWeight / denominator,\n a: normalizedBaseRate,\n };\n}\n\nexport function projectDirichletOpinion(opinion: DirichletOpinion): number[] {\n return opinion.b.map(\n (belief, index) => belief + (opinion.a[index] ?? 0) * opinion.u\n );\n}\n\nexport function opinionFromBeta(\n alpha: number,\n beta: number,\n nonInformativeWeight: number = DEFAULT_NON_INFORMATIVE_WEIGHT,\n baseRate: number = 0.5\n): Opinion {\n const dirichlet = opinionFromDirichlet(\n [alpha, beta],\n nonInformativeWeight,\n [clamp01(baseRate), 1 - clamp01(baseRate)]\n );\n\n return {\n b: dirichlet.b[0] ?? 0,\n d: dirichlet.b[1] ?? 0,\n u: dirichlet.u,\n a: dirichlet.a[0] ?? clamp01(baseRate),\n };\n}\n\nexport function betaFromOpinion(\n opinion: Opinion,\n nonInformativeWeight: number = DEFAULT_NON_INFORMATIVE_WEIGHT\n): { alpha: number; beta: number } {\n if (opinion.u === 0) {\n return {\n alpha: Number.POSITIVE_INFINITY,\n beta: Number.POSITIVE_INFINITY,\n };\n }\n\n const safeWeight = normalizeNonInformativeWeight(nonInformativeWeight);\n const scale = safeWeight / opinion.u;\n\n return {\n alpha: opinion.b * scale,\n beta: opinion.d * scale,\n };\n}\n","import type { Opinion, StoredOpinionFields } from \"../types\";\nimport { dogmatic, vacuous } from \"./subjectiveLogic\";\n\nfunction finiteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nexport function clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nexport function confidenceFromOpinion(opinion: Opinion): number {\n return clamp01(opinion.b + opinion.a * opinion.u);\n}\n\nexport function confidenceFromSL(\n belief: number,\n _disbelief: number,\n uncertainty: number,\n baseRate: number = 0.5\n): number {\n return confidenceFromOpinion({\n b: belief,\n d: _disbelief,\n u: uncertainty,\n a: baseRate,\n });\n}\n\nexport function toStoredOpinionFields(opinion: Opinion): StoredOpinionFields {\n return {\n belief: opinion.b,\n disbelief: opinion.d,\n uncertainty: opinion.u,\n baseRate: opinion.a,\n };\n}\n\nexport function readOpinionFromRecord(\n source: unknown,\n fallback: Partial<Opinion> = {}\n): Opinion {\n const record =\n source && typeof source === \"object\"\n ? (source as Record<string, unknown>)\n : {};\n\n return {\n b:\n finiteNumber(record.b) ??\n finiteNumber(record.belief) ??\n finiteNumber(record.slBelief) ??\n finiteNumber(record.opinion_b) ??\n fallback.b ??\n 0,\n d:\n finiteNumber(record.d) ??\n finiteNumber(record.disbelief) ??\n finiteNumber(record.slDisbelief) ??\n finiteNumber(record.opinion_d) ??\n fallback.d ??\n 0,\n u:\n finiteNumber(record.u) ??\n finiteNumber(record.uncertainty) ??\n finiteNumber(record.slUncertainty) ??\n finiteNumber(record.opinion_u) ??\n fallback.u ??\n 1,\n a:\n finiteNumber(record.a) ??\n finiteNumber(record.baseRate) ??\n finiteNumber(record.slBaseRate) ??\n finiteNumber(record.opinion_a) ??\n fallback.a ??\n 0.5,\n };\n}\n\nexport type OpinionFromScalarMode =\n | \"base_rate\"\n | \"dogmatic\"\n | \"projected_with_u\";\n\nexport function opinionFromScalar(\n value: number,\n mode: OpinionFromScalarMode,\n options?: { baseRate?: number; uncertainty?: number }\n): Opinion {\n const clampedValue = clamp01(value);\n const baseRate = clamp01(options?.baseRate ?? 0.5);\n\n switch (mode) {\n case \"base_rate\":\n return {\n b: 0,\n d: 0,\n u: 1,\n a: clampedValue,\n };\n case \"dogmatic\":\n return {\n b: clampedValue,\n d: 1 - clampedValue,\n u: 0,\n a: baseRate,\n };\n case \"projected_with_u\": {\n const uncertainty = options?.uncertainty;\n if (uncertainty === undefined) {\n throw new Error(\n \"opinionFromScalar(value, \\\"projected_with_u\\\") requires options.uncertainty.\"\n );\n }\n const clampedUncertainty = clamp01(uncertainty);\n const evidenceWeight = 1 - clampedUncertainty;\n return {\n b: clampedValue * evidenceWeight,\n d: (1 - clampedValue) * evidenceWeight,\n u: clampedUncertainty,\n a: baseRate,\n };\n }\n }\n\n throw new Error(`Unsupported opinionFromScalar mode: ${mode}`);\n}\n\n/**\n * @deprecated Use opinionFromScalar(value, \"dogmatic\", { baseRate }) instead.\n */\nexport function toDogmaticOpinion(\n confidence: number,\n baseRate: number = 0.5\n): Opinion {\n return opinionFromScalar(confidence, \"dogmatic\", { baseRate });\n}\n\n/** Interpret p as a prior with no observed evidence. */\nexport function opinionFromBaseRate(probability: number): Opinion {\n return vacuous(clamp01(probability));\n}\n\n/** Interpret p as a certainty-equivalent projected probability. */\nexport function opinionFromDogmatic(\n probability: number,\n baseRate: number = 0.5\n): Opinion {\n return dogmatic(clamp01(probability), clamp01(baseRate));\n}\n\n/**\n * Interpret p as a projected probability with an explicit uncertainty bucket.\n * The resulting opinion always projects back to p.\n */\nexport function opinionFromProjected(\n probability: number,\n uncertainty: number,\n baseRate: number = 0.5\n): Opinion {\n const p = clamp01(probability);\n const u = clamp01(uncertainty);\n const remainingMass = 1 - u;\n return {\n b: p * remainingMass,\n d: (1 - p) * remainingMass,\n u,\n a: clamp01(baseRate),\n };\n}\n\nexport function hasProjectedOpinionChanged(\n current: Opinion,\n next: Opinion,\n tolerance: number = 0.01\n): boolean {\n return Math.abs(confidenceFromOpinion(next) - confidenceFromOpinion(current)) >=\n tolerance;\n}\n","import type {\n Opinion,\n TupleContradictionPolicy,\n TupleContradictionTransition,\n} from \"../../types\";\nimport { clamp01 } from \"../scoring\";\n\nexport const DEFAULT_TUPLE_CONTRADICTION_BELIEF_THRESHOLD = 0.7;\nexport const DEFAULT_TUPLE_CONTRADICTION_DISBELIEF_THRESHOLD = 0.7;\n\nexport function normalizeTupleContradictionPolicy(\n policy: Partial<TupleContradictionPolicy> = {}\n): TupleContradictionPolicy {\n return {\n beliefThreshold: clamp01(\n policy.beliefThreshold ?? DEFAULT_TUPLE_CONTRADICTION_BELIEF_THRESHOLD\n ),\n disbeliefThreshold: clamp01(\n policy.disbeliefThreshold ??\n DEFAULT_TUPLE_CONTRADICTION_DISBELIEF_THRESHOLD\n ),\n };\n}\n\nexport function detectTupleContradiction(\n opinion: Opinion,\n tauB: number = DEFAULT_TUPLE_CONTRADICTION_BELIEF_THRESHOLD,\n tauD: number = DEFAULT_TUPLE_CONTRADICTION_DISBELIEF_THRESHOLD\n): boolean {\n return opinion.b > tauB && opinion.d > tauD;\n}\n\nexport function evaluateTupleContradictionTransition(args: {\n previousTupleContradicted?: boolean;\n opinion: Opinion;\n policy?: Partial<TupleContradictionPolicy>;\n}): TupleContradictionTransition {\n const policy = normalizeTupleContradictionPolicy(args.policy);\n const tupleContradicted = detectTupleContradiction(\n args.opinion,\n policy.beliefThreshold,\n policy.disbeliefThreshold\n );\n const previousTupleContradicted = Boolean(args.previousTupleContradicted);\n\n return {\n tupleContradicted,\n crossedIntoTupleContradiction:\n !previousTupleContradicted && tupleContradicted,\n crossedOutOfTupleContradiction:\n previousTupleContradicted && !tupleContradicted,\n policy,\n };\n}\n","import type { Opinion, PropagationMode, PropagationResult } from \"../../types\";\nimport { opinion, project } from \"../subjectiveLogic\";\n\nexport function dampedDependencyOpinion(\n dependencyOpinion: Opinion,\n beliefOpinion: Opinion,\n mode: PropagationMode = \"continuous\",\n threshold: number = 0.3\n): Opinion {\n const dependencyProjection = project(dependencyOpinion);\n\n if (mode === \"threshold\") {\n if (dependencyProjection < threshold) {\n return opinion(\n 0,\n beliefOpinion.d + beliefOpinion.b * 0.5,\n 0.5,\n beliefOpinion.a\n );\n }\n return beliefOpinion;\n }\n\n const dampingFactor = Math.pow(dependencyProjection, 0.5);\n return opinion(\n beliefOpinion.b * dampingFactor,\n beliefOpinion.d + beliefOpinion.b * (1 - dampingFactor) * 0.3,\n beliefOpinion.u + beliefOpinion.b * (1 - dampingFactor) * 0.7,\n beliefOpinion.a\n );\n}\n\nexport function dampedDependencyCascade(\n dependencyOpinion: Opinion,\n beliefOpinion: Opinion,\n mode: PropagationMode = \"continuous\"\n): PropagationResult {\n return {\n opinion: dampedDependencyOpinion(dependencyOpinion, beliefOpinion, mode),\n operator: \"dependency_cascade\",\n rationale: `Damped dependency cascade (${mode}): prerequisite at ${project(\n dependencyOpinion\n ).toFixed(2)}`,\n };\n}\n","import type { EdgeMetadata, Opinion, PropagationResult } from \"../../types\";\nimport {\n constraintFusion,\n cumulativeFusion,\n negate,\n project,\n trustDiscount,\n} from \"../subjectiveLogic\";\n\nexport function applyNegativeSupport(\n source: Opinion,\n target: Opinion,\n weight: number,\n metadata: EdgeMetadata = {}\n): PropagationResult {\n if (metadata.constraint === \"xor\") {\n const result = constraintFusion(\n source,\n target,\n metadata.normalization ?? \"pressure\"\n );\n return {\n opinion: result.o2,\n operator: \"constraint_fusion\",\n rationale: `XOR constraint: source belief at ${project(source).toFixed(\n 2\n )} pressures target`,\n };\n }\n\n const discounted = trustDiscount(negate(source), Math.abs(weight));\n return {\n opinion: cumulativeFusion(target, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Contradicting evidence (weight=${weight.toFixed(\n 2\n )}) from source at ${project(source).toFixed(2)}`,\n };\n}\n\nexport function applyNegativeEvidence(\n source: Opinion,\n target: Opinion,\n weight: number\n): PropagationResult {\n const discounted = trustDiscount(negate(source), Math.abs(weight));\n return {\n opinion: cumulativeFusion(target, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Contradicting evidence (weight=${weight.toFixed(2)})`,\n };\n}\n","import type { Opinion } from \"../../types\";\nimport {\n DEFAULT_NON_INFORMATIVE_WEIGHT,\n opinionFromBeta,\n} from \"../bridge\";\nimport { project } from \"../subjectiveLogic\";\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nfunction toEvidence(probability: number, weight: number): {\n alpha: number;\n beta: number;\n} {\n const safeProbability = clamp01(probability);\n const safeWeight = Number.isFinite(weight) ? Math.max(0, weight) : 0;\n\n return {\n alpha: safeProbability * safeWeight,\n beta: (1 - safeProbability) * safeWeight,\n };\n}\n\nexport function bayesianUpdate(\n priorConfidence: number,\n priorWeight: number,\n newAssessment: number,\n newWeight: number,\n options?: {\n baseRate?: number;\n nonInformativeWeight?: number;\n }\n): number {\n return reviseConfidence({\n priorConfidence,\n priorWeight,\n newAssessment,\n newWeight,\n baseRate: options?.baseRate,\n nonInformativeWeight: options?.nonInformativeWeight,\n });\n}\n\nexport function reviseConfidence(args: {\n priorConfidence: number;\n priorWeight: number;\n newAssessment: number;\n newWeight?: number;\n baseRate?: number;\n nonInformativeWeight?: number;\n}): number {\n return project(reviseConfidenceOpinion(args));\n}\n\nexport function reviseConfidenceOpinion(args: {\n priorConfidence: number;\n priorWeight: number;\n newAssessment: number;\n newWeight?: number;\n baseRate?: number;\n nonInformativeWeight?: number;\n}): Opinion {\n const priorEvidence = toEvidence(args.priorConfidence, args.priorWeight);\n const newEvidence = toEvidence(args.newAssessment, args.newWeight ?? 1);\n\n return opinionFromBeta(\n priorEvidence.alpha + newEvidence.alpha,\n priorEvidence.beta + newEvidence.beta,\n args.nonInformativeWeight ?? DEFAULT_NON_INFORMATIVE_WEIGHT,\n args.baseRate ?? 0.5\n );\n}\n","import type {\n BeliefLifecycleBucket,\n DeadlineUrgency,\n DeadlineUrgencyTier,\n DecayTier,\n EffectiveDecay,\n Opinion,\n RescoringSchedule,\n} from \"../../types\";\nimport { opinion } from \"../subjectiveLogic\";\n\nexport const DECAY_TIERS: Record<string, DecayTier> = {\n FRESH: {\n maxAgeDays: 30,\n weight: 1,\n label: \"fresh\",\n action: \"Full confidence — recently validated\",\n rescoreInDays: 30,\n },\n AGING: {\n maxAgeDays: 90,\n weight: 0.8,\n label: \"aging\",\n action: \"Evidence refresh recommended\",\n rescoreInDays: 14,\n },\n STALE: {\n maxAgeDays: 180,\n weight: 0.5,\n label: \"stale\",\n action: \"Evidence update required before trusting\",\n rescoreInDays: 7,\n },\n EXPIRED: {\n maxAgeDays: Number.POSITIVE_INFINITY,\n weight: 0.2,\n label: \"expired\",\n action: \"Full re-evaluation needed\",\n rescoreInDays: 0,\n },\n};\n\nexport const DEADLINE_URGENCY: Record<string, DeadlineUrgencyTier> = {\n DISTANT: {\n minDaysToDeadline: 365,\n urgencyMultiplier: 1,\n label: \"distant\",\n rescoreIntervalDays: 90,\n action: \"Quarterly confidence check\",\n },\n APPROACHING: {\n minDaysToDeadline: 180,\n urgencyMultiplier: 0.9,\n label: \"approaching\",\n rescoreIntervalDays: 30,\n action: \"Monthly confidence check — conditions may be shifting\",\n },\n NEAR: {\n minDaysToDeadline: 90,\n urgencyMultiplier: 0.75,\n label: \"near\",\n rescoreIntervalDays: 14,\n action: \"Biweekly rescore — deadline within 3 months\",\n },\n IMMINENT: {\n minDaysToDeadline: 30,\n urgencyMultiplier: 0.6,\n label: \"imminent\",\n rescoreIntervalDays: 7,\n action: \"Weekly rescore — deadline within 1 month\",\n },\n CRITICAL: {\n minDaysToDeadline: 7,\n urgencyMultiplier: 0.4,\n label: \"critical\",\n rescoreIntervalDays: 1,\n action: \"Daily rescore — deadline THIS WEEK\",\n },\n OVERDUE: {\n minDaysToDeadline: Number.NEGATIVE_INFINITY,\n urgencyMultiplier: 0.2,\n label: \"overdue\",\n rescoreIntervalDays: 0,\n action: \"OVERDUE — must validate or archive immediately\",\n },\n};\n\nfunction normalizeBeliefConfidence(confidence: unknown): number | null {\n if (typeof confidence !== \"number\" || !Number.isFinite(confidence)) {\n return null;\n }\n if (confidence >= 0 && confidence <= 1) {\n return confidence;\n }\n if (confidence > 1 && confidence <= 100) {\n return confidence / 100;\n }\n return null;\n}\n\nfunction hasResolvedPredictionOutcome(predictionMeta: unknown): boolean {\n if (!predictionMeta || typeof predictionMeta !== \"object\") {\n return false;\n }\n\n const outcome = (predictionMeta as { outcome?: unknown }).outcome;\n return (\n outcome === \"confirmed\" ||\n outcome === \"disconfirmed\" ||\n outcome === \"partial\" ||\n outcome === \"expired\"\n );\n}\n\nfunction resolveLifecycleBucket(args: {\n beliefStatus?: string | null;\n confidence?: unknown;\n predictionMeta?: unknown;\n}): BeliefLifecycleBucket {\n if (\n normalizeBeliefConfidence(args.confidence) === 0 ||\n normalizeBeliefConfidence(args.confidence) === 1 ||\n hasResolvedPredictionOutcome(args.predictionMeta)\n ) {\n return \"fact\";\n }\n\n if (\n args.beliefStatus === \"assumption\" ||\n args.beliefStatus === \"hypothesis\" ||\n args.beliefStatus === \"belief\" ||\n args.beliefStatus === \"fact\"\n ) {\n if (\n normalizeBeliefConfidence(args.confidence) !== null &&\n (args.beliefStatus === \"assumption\" || args.beliefStatus === \"hypothesis\")\n ) {\n return \"belief\";\n }\n return args.beliefStatus;\n }\n\n return \"assumption\";\n}\n\nfunction lifecycleMultiplier(status: BeliefLifecycleBucket | string | null | undefined) {\n if (status === \"assumption\") {\n return 0.65;\n }\n if (status === \"hypothesis\") {\n return 0.8;\n }\n return 1;\n}\n\nexport function computeBaseDecay(lastScoredAt: number): {\n ageDays: number;\n tier: DecayTier;\n weight: number;\n} {\n const ageDays = (Date.now() - lastScoredAt) / (1000 * 60 * 60 * 24);\n let tier = DECAY_TIERS.EXPIRED;\n\n if (ageDays <= DECAY_TIERS.FRESH.maxAgeDays) {\n tier = DECAY_TIERS.FRESH;\n } else if (ageDays <= DECAY_TIERS.AGING.maxAgeDays) {\n tier = DECAY_TIERS.AGING;\n } else if (ageDays <= DECAY_TIERS.STALE.maxAgeDays) {\n tier = DECAY_TIERS.STALE;\n }\n\n return { ageDays, tier, weight: tier.weight };\n}\n\nexport function computeDeadlineUrgency(\n expectedBy: number | null | undefined\n): DeadlineUrgency {\n if (!expectedBy) {\n return null;\n }\n\n const daysToDeadline = (expectedBy - Date.now()) / (1000 * 60 * 60 * 24);\n let urgencyTier = DEADLINE_URGENCY.DISTANT;\n\n if (daysToDeadline < 0) {\n urgencyTier = DEADLINE_URGENCY.OVERDUE;\n } else if (daysToDeadline <= 7) {\n urgencyTier = DEADLINE_URGENCY.CRITICAL;\n } else if (daysToDeadline <= 30) {\n urgencyTier = DEADLINE_URGENCY.IMMINENT;\n } else if (daysToDeadline <= 90) {\n urgencyTier = DEADLINE_URGENCY.NEAR;\n } else if (daysToDeadline <= 180) {\n urgencyTier = DEADLINE_URGENCY.APPROACHING;\n }\n\n return {\n daysToDeadline: Math.round(daysToDeadline),\n urgencyTier,\n urgencyMultiplier: urgencyTier.urgencyMultiplier,\n isOverdue: daysToDeadline < 0,\n };\n}\n\nexport function computeEffectiveDecay(\n lastScoredAt: number,\n expectedBy?: number | null,\n beliefStatus?: BeliefLifecycleBucket | string | null\n): EffectiveDecay {\n const base = computeBaseDecay(lastScoredAt);\n const urgency = computeDeadlineUrgency(expectedBy);\n const effectiveWeight =\n (urgency ? base.weight * urgency.urgencyMultiplier : base.weight) *\n lifecycleMultiplier(beliefStatus);\n\n const urgencyRescoreDays =\n urgency?.urgencyTier.rescoreIntervalDays ?? Number.POSITIVE_INFINITY;\n const rescoreInDays = Math.min(base.tier.rescoreInDays, urgencyRescoreDays);\n const rescoreByDate = lastScoredAt + rescoreInDays * 24 * 60 * 60 * 1000;\n\n let action = base.tier.action;\n if (urgency && urgency.urgencyTier.label !== \"distant\") {\n action = `${urgency.urgencyTier.action}. ${base.tier.action}`;\n }\n\n return {\n ageDays: base.ageDays,\n baseTier: base.tier,\n baseWeight: base.weight,\n urgency,\n effectiveWeight: Math.max(0, Math.min(1, effectiveWeight)),\n rescoreByDate,\n rescoreInDays,\n action,\n };\n}\n\nexport function getRescoringSchedule(opts: {\n lastScoredAt: number;\n temporalNature?: \"factual\" | \"forecast\" | \"unknown\" | null;\n expectedBy?: number | null;\n predictionMeta?: { expectedBy?: number; outcome?: unknown } | null;\n confidence?: number;\n beliefStatus?: string | null;\n}): RescoringSchedule {\n const lifecycleStatus = resolveLifecycleBucket({\n beliefStatus: opts.beliefStatus,\n confidence: opts.confidence,\n predictionMeta: opts.predictionMeta,\n });\n\n const decayState = computeEffectiveDecay(\n opts.lastScoredAt,\n opts.expectedBy,\n lifecycleStatus\n );\n const daysUntilRescore =\n (decayState.rescoreByDate - Date.now()) / (1000 * 60 * 60 * 24);\n const isOverdue = daysUntilRescore < 0;\n\n let priority: RescoringSchedule[\"priority\"];\n let reason: string;\n\n if (isOverdue && lifecycleStatus === \"assumption\") {\n priority = \"critical\";\n reason = `Untested assumption is stale (${Math.round(decayState.ageDays)}d) — validate or supersede`;\n } else if (\n (isOverdue && lifecycleStatus === \"hypothesis\") ||\n (lifecycleStatus === \"hypothesis\" && daysUntilRescore < 7)\n ) {\n priority = \"high\";\n reason = `Hypothesis aging without validation (${Math.round(decayState.ageDays)}d) — run/finish sprint testing`;\n } else if (decayState.urgency?.isOverdue) {\n priority = \"critical\";\n reason = `Prediction deadline passed ${Math.abs(decayState.urgency.daysToDeadline)}d ago — validate or archive`;\n } else if (isOverdue && decayState.baseTier.label === \"expired\") {\n priority = \"critical\";\n reason = `Not scored in ${Math.round(decayState.ageDays)}d — confidence severely degraded`;\n } else if (isOverdue && decayState.baseTier.label === \"stale\") {\n priority = \"high\";\n reason = `Stale (${Math.round(decayState.ageDays)}d since scoring) — evidence update required`;\n } else if (\n decayState.urgency &&\n decayState.urgency.urgencyTier.label === \"critical\"\n ) {\n priority = \"critical\";\n reason = `Deadline in ${decayState.urgency.daysToDeadline}d — needs immediate rescoring`;\n } else if (\n decayState.urgency &&\n decayState.urgency.urgencyTier.label === \"imminent\"\n ) {\n priority = \"high\";\n reason = `Deadline in ${decayState.urgency.daysToDeadline}d — weekly rescoring required`;\n } else if (isOverdue) {\n priority = \"high\";\n reason = `Rescore overdue by ${Math.abs(Math.round(daysUntilRescore))}d`;\n } else if (opts.temporalNature === \"forecast\" && daysUntilRescore < 7) {\n priority = \"medium\";\n reason = `Forecast belief — next rescore due in ${Math.round(daysUntilRescore)}d`;\n } else if (daysUntilRescore < 14) {\n priority = \"medium\";\n reason = `Rescore due in ${Math.round(daysUntilRescore)}d`;\n } else {\n priority = \"low\";\n reason = `On schedule — next rescore in ${Math.round(daysUntilRescore)}d`;\n }\n\n if (\n (opts.confidence ?? 0) >= 0.8 &&\n decayState.baseTier.label !== \"fresh\" &&\n priority === \"medium\"\n ) {\n priority = \"high\";\n reason = `High-confidence belief (${((opts.confidence ?? 0) * 100).toFixed(0)}%) aging without rescore — ${reason}`;\n }\n\n return {\n nextRescoreBy: decayState.rescoreByDate,\n daysUntilRescore: Math.round(daysUntilRescore),\n isOverdue,\n priority,\n reason,\n decay: decayState,\n };\n}\n\nexport function decay(\n current: Opinion,\n daysSinceLastUpdate: number,\n halfLifeDays: number = 90\n): Opinion {\n if (daysSinceLastUpdate <= 0) {\n return current;\n }\n\n const decayFactor = Math.pow(0.5, daysSinceLastUpdate / halfLifeDays);\n const certainty = current.b + current.d;\n const lostCertainty = certainty - certainty * decayFactor;\n\n return opinion(\n current.b * decayFactor,\n current.d * decayFactor,\n current.u + lostCertainty,\n current.a\n );\n}\n","import type {\n ContractModulationPlan,\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n EpistemicContractModulation,\n EpistemicContractRecord,\n EpistemicContractStatus,\n EvidentialAction,\n EvidentialEvaluatorConfig,\n EvidentialMetricSnapshot,\n EvidentialOperator,\n MarketIndexComparatorConfig,\n MetricCheckerEvaluatorConfig,\n ReferenceCheckCounterConfig,\n TemporalDeadlineEvaluatorConfig,\n VerificationConfidenceTrigger,\n} from \"../../types\";\n\nexport const BUILT_IN_EVIDENTIAL_EVALUATOR = \"evidential\";\nexport const BUILT_IN_EVIDENTIAL_ALIASES = new Set([\n BUILT_IN_EVIDENTIAL_EVALUATOR,\n \"built_in_evidential\",\n \"builtin_evidential\",\n]);\nexport const BUILT_IN_METRIC_CHECKER = \"metric_checker\";\nexport const BUILT_IN_REFERENCE_CHECK_COUNTER = \"reference_check_counter\";\nexport const BUILT_IN_TEMPORAL_DEADLINE = \"temporal_deadline\";\nexport const BUILT_IN_MARKET_INDEX_COMPARATOR = \"market_index_comparator\";\n\nfunction clampConfidence(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nfunction generateContractId(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return `contract-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nexport function deriveContractStatus(\n result: EpistemicContractEvaluationResult,\n currentStatus: EpistemicContractStatus\n): EpistemicContractStatus {\n if (currentStatus === \"archived\") {\n return currentStatus;\n }\n\n switch (result) {\n case \"confirmed\":\n return \"satisfied\";\n case \"disconfirmed\":\n return \"violated\";\n case \"expired\":\n return \"expired\";\n default:\n return currentStatus === \"satisfied\" ||\n currentStatus === \"violated\" ||\n currentStatus === \"expired\"\n ? \"active\"\n : currentStatus;\n }\n}\n\nexport function deriveVerificationTrigger(\n result: EpistemicContractEvaluationResult\n): VerificationConfidenceTrigger | null {\n switch (result) {\n case \"confirmed\":\n return \"verification_confirmed\";\n case \"disconfirmed\":\n return \"verification_disconfirmed\";\n case \"expired\":\n return \"verification_expired\";\n case \"partial\":\n return \"verification_partial\";\n default:\n return null;\n }\n}\n\nexport function deriveContractModulationPlan(args: {\n currentConfidence: number;\n modulation: EpistemicContractModulation;\n result: EpistemicContractEvaluationResult;\n resultConfidence?: number;\n}): ContractModulationPlan | null {\n const trigger = deriveVerificationTrigger(args.result);\n if (!trigger) {\n return null;\n }\n\n if (args.result === \"confirmed\") {\n const rawNext = args.currentConfidence + args.modulation.onConfirmed.delta;\n const confidenceAfter = clampConfidence(\n Math.min(\n args.modulation.onConfirmed.ceiling ?? Number.POSITIVE_INFINITY,\n rawNext\n )\n );\n return {\n trigger,\n confidenceBefore: args.currentConfidence,\n confidenceAfter,\n confidenceDelta: confidenceAfter - args.currentConfidence,\n };\n }\n\n if (args.result === \"disconfirmed\") {\n const rawNext =\n args.currentConfidence + args.modulation.onDisconfirmed.delta;\n const confidenceAfter = clampConfidence(\n Math.max(args.modulation.onDisconfirmed.floor ?? 0, rawNext)\n );\n return {\n trigger,\n confidenceBefore: args.currentConfidence,\n confidenceAfter,\n confidenceDelta: confidenceAfter - args.currentConfidence,\n };\n }\n\n if (args.result === \"expired\" && args.modulation.onExpired) {\n const confidenceAfter = clampConfidence(\n args.currentConfidence + args.modulation.onExpired.delta\n );\n return {\n trigger,\n confidenceBefore: args.currentConfidence,\n confidenceAfter,\n confidenceDelta: confidenceAfter - args.currentConfidence,\n };\n }\n\n if (args.result === \"partial\" && args.modulation.onPartial) {\n if ((args.resultConfidence ?? 0) < args.modulation.onPartial.threshold) {\n return null;\n }\n const confidenceAfter = clampConfidence(\n args.currentConfidence + args.modulation.onPartial.delta\n );\n return {\n trigger,\n confidenceBefore: args.currentConfidence,\n confidenceAfter,\n confidenceDelta: confidenceAfter - args.currentConfidence,\n };\n }\n\n return null;\n}\n\nexport function createInheritedContractRecord<\n TBeliefId = string,\n TTopicId = string | undefined,\n>(\n contract: EpistemicContractRecord<any, any>,\n args: {\n beliefNodeId: TBeliefId;\n topicId?: TTopicId;\n createdBy: string;\n now: number;\n }\n): EpistemicContractRecord<TBeliefId, TTopicId> {\n return {\n beliefNodeId: args.beliefNodeId,\n contractId: generateContractId(),\n title: contract.title,\n description: contract.description,\n conditionType: contract.conditionType,\n direction: contract.direction,\n condition: contract.condition,\n deadline: contract.deadline,\n compositeOf: contract.compositeOf,\n compositeOperator: contract.compositeOperator,\n modulation: contract.modulation,\n evaluationSchedule: contract.evaluationSchedule,\n periodicIntervalMs: contract.periodicIntervalMs,\n status: \"active\",\n lineageSource: \"inherited\",\n inheritedFromContractId: contract.contractId,\n inheritedFromBeliefNodeId: contract.beliefNodeId as TBeliefId,\n inheritedAt: args.now,\n topicId: args.topicId,\n createdAt: args.now,\n createdBy: args.createdBy,\n updatedAt: args.now,\n };\n}\n\nexport function normalizeEvidentialAction(\n value: unknown\n): EvidentialAction | undefined {\n return value === \"modulate_confidence\" ||\n value === \"flag_review\" ||\n value === \"archive\"\n ? value\n : undefined;\n}\n\nexport function parseComparisonOperator(\n value: unknown,\n evaluatorName: string\n): EvidentialOperator {\n if (\n value === \"gte\" ||\n value === \"lte\" ||\n value === \"eq\" ||\n value === \"gt\" ||\n value === \"lt\"\n ) {\n return value;\n }\n throw new Error(\n `${evaluatorName} requires operator to be one of gte, lte, eq, gt, or lt.`\n );\n}\n\nexport function parseNumericThreshold(\n value: unknown,\n evaluatorName: string\n): number {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n throw new Error(`${evaluatorName} requires a finite numeric threshold.`);\n}\n\nexport function pickFiniteNumber(\n config: Record<string, unknown>,\n keys: string[]\n): number | undefined {\n for (const key of keys) {\n const value = config[key];\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n }\n return undefined;\n}\n\nexport function getEvaluatorInputRecord(\n inputData: unknown,\n nestedKey: string\n): Record<string, unknown> {\n if (!inputData || typeof inputData !== \"object\") {\n return {};\n }\n\n const root = inputData as Record<string, unknown>;\n const nested = root[nestedKey];\n if (nested && typeof nested === \"object\") {\n return nested as Record<string, unknown>;\n }\n return root;\n}\n\nexport function parseEvidentialEvaluatorConfig(\n value: unknown\n): EvidentialEvaluatorConfig {\n if (!value || typeof value !== \"object\") {\n throw new Error(\n \"Evidential contracts require condition.evaluatorConfig with metric/operator/threshold.\"\n );\n }\n\n const config = value as Record<string, unknown>;\n const metric = config.metric;\n const operator = config.operator;\n const threshold = config.threshold;\n\n if (\n metric !== \"evidence_count\" &&\n metric !== \"contradiction_status\" &&\n metric !== \"edge_freshness\" &&\n metric !== \"dependent_count\"\n ) {\n throw new Error(`Unsupported evidential metric: ${String(metric)}`);\n }\n\n if (\n operator !== \"gte\" &&\n operator !== \"lte\" &&\n operator !== \"eq\" &&\n operator !== \"gt\" &&\n operator !== \"lt\"\n ) {\n throw new Error(`Unsupported evidential operator: ${String(operator)}`);\n }\n\n if (typeof threshold !== \"number\" || !Number.isFinite(threshold)) {\n throw new Error(\"Evidential contracts require a numeric threshold.\");\n }\n\n const actionParams =\n config.actionParams &&\n typeof config.actionParams === \"object\" &&\n config.actionParams !== null\n ? (config.actionParams as Record<string, unknown>)\n : undefined;\n\n return {\n metric,\n operator,\n threshold,\n action: normalizeEvidentialAction(config.action),\n actionParams:\n actionParams &&\n (typeof actionParams.targetConfidence === \"number\" ||\n typeof actionParams.rationale === \"string\")\n ? {\n targetConfidence:\n typeof actionParams.targetConfidence === \"number\"\n ? actionParams.targetConfidence\n : undefined,\n rationale:\n typeof actionParams.rationale === \"string\"\n ? actionParams.rationale\n : undefined,\n }\n : undefined,\n };\n}\n\nexport function compareMetricValue(\n operator: EvidentialOperator,\n left: number,\n right: number\n): boolean {\n switch (operator) {\n case \"gte\":\n return left >= right;\n case \"lte\":\n return left <= right;\n case \"eq\":\n return left === right;\n case \"gt\":\n return left > right;\n case \"lt\":\n return left < right;\n default:\n return false;\n }\n}\n\nexport function resolveComparisonResult(\n direction: EpistemicContractDirection,\n comparisonSatisfied: boolean\n): EpistemicContractEvaluationResult {\n return direction === \"falsifies\"\n ? comparisonSatisfied\n ? \"disconfirmed\"\n : \"confirmed\"\n : comparisonSatisfied\n ? \"confirmed\"\n : \"disconfirmed\";\n}\n\nexport function buildComparisonRationale(args: {\n label: string;\n observedValue: number | null;\n operator: EvidentialOperator;\n threshold: number;\n comparisonSatisfied: boolean;\n result: EpistemicContractEvaluationResult;\n unit?: string;\n}): string {\n const renderedObserved =\n args.observedValue === null\n ? \"no data\"\n : `${args.observedValue}${args.unit ? ` ${args.unit}` : \"\"}`;\n const renderedThreshold = `${args.threshold}${args.unit ? ` ${args.unit}` : \"\"}`;\n const clause = `${args.label} observed ${renderedObserved} against ${args.operator} ${renderedThreshold}`;\n\n if (args.observedValue === null) {\n return `${clause}; evaluator returned ${args.result} because no current data was available.`;\n }\n\n return `${clause}; comparison ${\n args.comparisonSatisfied ? \"passed\" : \"failed\"\n }, resulting in ${args.result}.`;\n}\n\nexport function buildEvidentialRationale(args: {\n config: EvidentialEvaluatorConfig;\n snapshot: EvidentialMetricSnapshot;\n comparisonSatisfied: boolean;\n result: EpistemicContractEvaluationResult;\n}): string {\n const observed =\n args.snapshot.value === null ? \"no data\" : String(args.snapshot.value);\n const clause = `${args.snapshot.metric} observed ${observed} against ${args.config.operator} ${args.config.threshold}`;\n\n if (args.snapshot.value === null) {\n return `${clause}; evidential evaluator treated the comparison as unmet, resulting in ${args.result}.`;\n }\n\n return `${clause}; comparison ${\n args.comparisonSatisfied ? \"passed\" : \"failed\"\n }, resulting in ${args.result}.`;\n}\n\nexport function parseMetricCheckerConfig(\n value: unknown\n): MetricCheckerEvaluatorConfig {\n if (!value || typeof value !== \"object\") {\n throw new Error(\n \"metric_checker requires condition.evaluatorConfig with observedValue/operator/threshold.\"\n );\n }\n\n const config = value as Record<string, unknown>;\n return {\n metric:\n typeof config.metric === \"string\" && config.metric.length > 0\n ? config.metric\n : undefined,\n operator: parseComparisonOperator(config.operator, BUILT_IN_METRIC_CHECKER),\n threshold: parseNumericThreshold(config.threshold, BUILT_IN_METRIC_CHECKER),\n observedValue: pickFiniteNumber(config, [\"observedValue\", \"value\"]),\n currentValue: pickFiniteNumber(config, [\"currentValue\"]),\n metricValue: pickFiniteNumber(config, [\"metricValue\"]),\n unit:\n typeof config.unit === \"string\" && config.unit.length > 0\n ? config.unit\n : undefined,\n };\n}\n\nexport function parseReferenceCheckCounterConfig(\n value: unknown\n): ReferenceCheckCounterConfig {\n if (!value || typeof value !== \"object\") {\n throw new Error(\n \"reference_check_counter requires condition.evaluatorConfig with tag/operator/threshold.\"\n );\n }\n\n const config = value as Record<string, unknown>;\n if (typeof config.tag !== \"string\" || config.tag.trim().length === 0) {\n throw new Error(\"reference_check_counter requires a non-empty tag.\");\n }\n\n return {\n tag: config.tag.trim(),\n operator: parseComparisonOperator(\n config.operator,\n BUILT_IN_REFERENCE_CHECK_COUNTER\n ),\n threshold: parseNumericThreshold(\n config.threshold,\n BUILT_IN_REFERENCE_CHECK_COUNTER\n ),\n caseSensitive: config.caseSensitive === true,\n };\n}\n\nexport function parseTemporalDeadlineConfig(\n value: unknown\n): TemporalDeadlineEvaluatorConfig {\n if (!value || typeof value !== \"object\") {\n return {};\n }\n\n const config = value as Record<string, unknown>;\n return {\n label:\n typeof config.label === \"string\" && config.label.length > 0\n ? config.label\n : undefined,\n completed: config.completed === true,\n completedAt: pickFiniteNumber(config, [\"completedAt\"]),\n observedAt: pickFiniteNumber(config, [\"observedAt\"]),\n satisfiedAt: pickFiniteNumber(config, [\"satisfiedAt\"]),\n achievedAt: pickFiniteNumber(config, [\"achievedAt\"]),\n };\n}\n\nexport function parseMarketIndexComparatorConfig(\n value: unknown\n): MarketIndexComparatorConfig {\n if (!value || typeof value !== \"object\") {\n throw new Error(\n \"market_index_comparator requires condition.evaluatorConfig with subjectValue/benchmarkValue/operator/threshold.\"\n );\n }\n\n const config = value as Record<string, unknown>;\n return {\n subject:\n typeof config.subject === \"string\" && config.subject.length > 0\n ? config.subject\n : undefined,\n subjectValue: pickFiniteNumber(config, [\"subjectValue\", \"leftValue\"]),\n primaryValue: pickFiniteNumber(config, [\"primaryValue\"]),\n benchmark:\n typeof config.benchmark === \"string\" && config.benchmark.length > 0\n ? config.benchmark\n : undefined,\n benchmarkValue: pickFiniteNumber(config, [\"benchmarkValue\", \"rightValue\"]),\n comparisonValue: pickFiniteNumber(config, [\"comparisonValue\"]),\n operator: parseComparisonOperator(\n config.operator,\n BUILT_IN_MARKET_INDEX_COMPARATOR\n ),\n threshold: parseNumericThreshold(\n config.threshold,\n BUILT_IN_MARKET_INDEX_COMPARATOR\n ),\n };\n}\n","import {\n actionGeneric,\n anyApi,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\nexport const api = anyApi as any;\nexport const components = componentsGeneric() as any;\nexport const internal = anyApi as any;\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> = any;\nexport type DataModel = any;\nexport type ActionCtx = any;\nexport type DatabaseReader = any;\nexport type DatabaseWriter = any;\nexport type MutationCtx = any;\nexport type QueryCtx = any;\n\nexport const action = actionGeneric as any;\nexport const httpAction = httpActionGeneric as any;\nexport const internalAction = internalActionGeneric as any;\nexport const internalMutation = internalMutationGeneric as any;\nexport const internalQuery = internalQueryGeneric as any;\nexport const mutation = mutationGeneric as any;\nexport const query = queryGeneric as any;\n","import { api } from \"./convex\";\n\ntype OverlayIdMode = \"legacy\" | \"topic\";\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype TopicDocLike = Record<string, unknown> & {\n _id: string;\n _creationTime?: number;\n globalId?: string;\n name?: string;\n description?: string;\n type?: string;\n tenantId?: string;\n workspaceId?: string;\n status?: string;\n visibility?: string;\n createdBy?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectOverlay = Record<string, unknown> & {\n _id: string;\n projectId: string;\n topicId: string;\n storageProjectId: string;\n legacyProjectId?: string;\n name: string;\n type: string;\n description?: string;\n ownerId: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n tags: string[];\n chatCount: number;\n artifactCount: number;\n lastActivityAt: number;\n _creationTime: number;\n createdAt: number;\n updatedAt: number;\n};\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readNonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction readMetadata(topic: TopicDocLike): Record<string, unknown> {\n return topic.metadata && typeof topic.metadata === \"object\"\n ? topic.metadata\n : {};\n}\n\nfunction readLegacyProjectId(\n value: Record<string, unknown> | null | undefined\n): string | undefined {\n if (!value) {\n return;\n }\n return readNonEmptyString(value[LEGACY_SCOPE_FIELD]);\n}\n\nfunction coerceVisibility(\n value: unknown\n): TopicProjectOverlay[\"visibility\"] | undefined {\n return value === \"private\" ||\n value === \"team\" ||\n value === \"firm\" ||\n value === \"external\" ||\n value === \"public\"\n ? value\n : undefined;\n}\n\nfunction coerceStatus(\n value: unknown\n): TopicProjectOverlay[\"status\"] | undefined {\n return value === \"active\" || value === \"archived\" || value === \"watching\"\n ? value\n : undefined;\n}\n\nfunction mapProjectType(\n topic: TopicDocLike,\n metadata: Record<string, unknown>\n): string {\n const explicit = readNonEmptyString(metadata.projectType);\n if (explicit) {\n return explicit;\n }\n if (topic.type === \"theme\") {\n return \"thematic\";\n }\n return readNonEmptyString(topic.type) || \"general\";\n}\n\nfunction isProjectLikeTopic(topic: TopicDocLike): boolean {\n const metadata = readMetadata(topic);\n return (\n topic.type === \"theme\" ||\n topic.type === \"thematic\" ||\n topic.type === \"deal\" ||\n topic.type === \"monitoring\" ||\n readLegacyProjectId(topic) !== undefined ||\n readNonEmptyString(metadata.projectType) !== undefined\n );\n}\n\nasync function resolveTopicDoc(\n ctx: any,\n scopeId: string\n): Promise<TopicDocLike | null> {\n if (ctx?.db && typeof ctx.db.get === \"function\") {\n try {\n const directTopic = (await ctx.db.get(scopeId as any)) as TopicDocLike | null;\n if (directTopic) {\n return directTopic;\n }\n } catch {\n // Not a direct topics-table id.\n }\n }\n\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.get as any, {\n id: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch {\n // Fall through to legacy-scope lookup.\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.getByLegacyScopeId as any, {\n projectId: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch {\n // Best-effort compat lookup only.\n }\n\n return null;\n}\n\nfunction materializeTopicProjectOverlay(\n topic: TopicDocLike,\n idMode: OverlayIdMode = \"legacy\"\n): TopicProjectOverlay {\n const metadata = readMetadata(topic);\n const topicId = String(topic._id);\n const legacyProjectId =\n readLegacyProjectId(topic) ||\n readLegacyProjectId(metadata) ||\n readNonEmptyString(metadata.legacyProjectId);\n const storageProjectId = legacyProjectId || topicId;\n const outwardId = idMode === \"topic\" ? topicId : storageProjectId;\n const visibility =\n coerceVisibility(topic.visibility) ||\n coerceVisibility(metadata.visibility) ||\n \"private\";\n const status =\n coerceStatus(topic.status) || coerceStatus(metadata.status) || \"active\";\n const createdAt =\n typeof topic.createdAt === \"number\"\n ? topic.createdAt\n : typeof topic._creationTime === \"number\"\n ? topic._creationTime\n : 0;\n const updatedAt =\n typeof topic.updatedAt === \"number\"\n ? topic.updatedAt\n : typeof metadata.updatedAt === \"number\"\n ? (metadata.updatedAt as number)\n : createdAt;\n\n return {\n ...metadata,\n _id: outwardId,\n projectId: outwardId,\n topicId,\n storageProjectId,\n legacyProjectId,\n name: readNonEmptyString(topic.name) || \"Untitled Theme\",\n type: mapProjectType(topic, metadata),\n description: readNonEmptyString(topic.description),\n ownerId:\n readNonEmptyString(metadata.ownerId) ||\n readNonEmptyString(topic.createdBy) ||\n \"system\",\n sharedWith: readStringArray(metadata.sharedWith),\n visibility,\n tenantId:\n readNonEmptyString(topic.tenantId) ||\n readNonEmptyString(metadata.tenantId),\n workspaceId:\n readNonEmptyString(topic.workspaceId) ||\n readNonEmptyString(metadata.workspaceId),\n status,\n tags: readStringArray(metadata.tags),\n chatCount:\n typeof metadata.chatCount === \"number\" ? (metadata.chatCount as number) : 0,\n artifactCount:\n typeof metadata.artifactCount === \"number\"\n ? (metadata.artifactCount as number)\n : 0,\n lastActivityAt:\n typeof metadata.lastActivityAt === \"number\"\n ? (metadata.lastActivityAt as number)\n : updatedAt,\n _creationTime:\n typeof topic._creationTime === \"number\" ? topic._creationTime : createdAt,\n createdAt,\n updatedAt,\n };\n}\n\nexport async function resolveTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n if (options.projectLikeOnly !== false && !isProjectLikeTopic(topic)) {\n return null;\n }\n return materializeTopicProjectOverlay(topic, options.idMode);\n}\n\nexport async function listTopicProjectOverlays(\n ctx: any,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay[]> {\n let allTopics: TopicDocLike[] = [];\n\n if (ctx?.db?.query && typeof ctx.db.query === \"function\") {\n try {\n allTopics = (await ctx.db.query(\"topics\").collect()) as TopicDocLike[];\n } catch {\n allTopics = [];\n }\n }\n\n if (allTopics.length === 0 && typeof ctx.runQuery === \"function\") {\n allTopics =\n (((await ctx.runQuery(api.topics.list as any, {})) ?? []) as TopicDocLike[]) ||\n [];\n }\n\n return allTopics\n .filter(\n (topic) => options.projectLikeOnly === false || isProjectLikeTopic(topic)\n )\n .map((topic) => materializeTopicProjectOverlay(topic, options.idMode));\n}\n","import type { Id } from \"./convex\";\nimport { resolveTopicProjectOverlay } from \"./topicProjectOverlay.js\";\n\nconst PROJECT_GRANT_STATUSES = [\"active\", \"revoked\", \"expired\"] as const;\n\ntype ProjectGrantStatus = (typeof PROJECT_GRANT_STATUSES)[number];\n\ntype ProjectGrantRow = Record<string, unknown> & {\n _id: Id<\"projectGrants\">;\n topicId?: string;\n projectId?: string;\n principalId?: string;\n groupId?: string;\n status?: ProjectGrantStatus;\n};\n\ntype ProjectGrantWrite = Record<string, unknown> & {\n topicId?: string;\n projectId?: string;\n};\n\nfunction normalizeString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nasync function resolveGrantScopeIds(\n ctx: any,\n args: {\n topicId?: unknown;\n projectId?: unknown;\n }\n): Promise<{ topicId?: string; projectId?: string }> {\n const topicId = normalizeString(args.topicId);\n const projectId = normalizeString(args.projectId);\n\n for (const scopeId of [topicId, projectId]) {\n if (!scopeId) {\n continue;\n }\n\n try {\n const overlay = await resolveTopicProjectOverlay(ctx, scopeId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n });\n if (overlay) {\n return {\n topicId: normalizeString(overlay.topicId) ?? topicId,\n projectId:\n normalizeString(overlay.projectId) ?? projectId ?? scopeId,\n };\n }\n } catch {\n // Fall back to the raw ids when the topic overlay bridge is unavailable.\n }\n }\n\n return { topicId, projectId };\n}\n\nasync function normalizeProjectGrantRow(\n ctx: any,\n row: ProjectGrantRow\n): Promise<ProjectGrantRow> {\n const scope = await resolveGrantScopeIds(ctx, {\n topicId: row.topicId,\n projectId: row.projectId,\n });\n\n return {\n ...row,\n ...(scope.topicId ? { topicId: scope.topicId } : {}),\n ...(scope.projectId ?? scope.topicId\n ? { projectId: scope.projectId ?? scope.topicId }\n : {}),\n };\n}\n\nasync function normalizeProjectGrantRows(\n ctx: any,\n rows: ProjectGrantRow[]\n): Promise<ProjectGrantRow[]> {\n return await Promise.all(rows.map((row) => normalizeProjectGrantRow(ctx, row)));\n}\n\nasync function listProjectGrantsByPrincipal(\n ctx: any,\n principalId: string\n): Promise<ProjectGrantRow[]> {\n const rows = await Promise.all(\n PROJECT_GRANT_STATUSES.map((status) =>\n ctx.db\n .query(\"projectGrants\")\n .withIndex(\"by_principal_status\", (q: any) =>\n q.eq(\"principalId\", principalId).eq(\"status\", status)\n )\n .collect()\n )\n );\n return await normalizeProjectGrantRows(ctx, rows.flat() as ProjectGrantRow[]);\n}\n\nasync function listProjectGrantsByGroup(\n ctx: any,\n groupId: string\n): Promise<ProjectGrantRow[]> {\n const rows = await Promise.all(\n PROJECT_GRANT_STATUSES.map((status) =>\n ctx.db\n .query(\"projectGrants\")\n .withIndex(\"by_group_status\", (q: any) =>\n q.eq(\"groupId\", groupId).eq(\"status\", status)\n )\n .collect()\n )\n );\n return await normalizeProjectGrantRows(ctx, rows.flat() as ProjectGrantRow[]);\n}\n\nfunction buildScopeMatchers(\n inputScopeId: string,\n resolved: { topicId?: string; projectId?: string }\n): Set<string> {\n return new Set(\n [inputScopeId, resolved.topicId, resolved.projectId]\n .map((value) => normalizeString(value))\n .filter((value): value is string => Boolean(value))\n );\n}\n\nfunction matchesResolvedScope(\n row: ProjectGrantRow,\n scopeIds: Set<string>\n): boolean {\n const rowTopicId = normalizeString(row.topicId);\n const rowProjectId = normalizeString(row.projectId);\n return (\n (rowTopicId !== undefined && scopeIds.has(rowTopicId)) ||\n (rowProjectId !== undefined && scopeIds.has(rowProjectId))\n );\n}\n\nexport async function bridgeListProjectGrants(ctx: any): Promise<any[]> {\n const rows = (await ctx.db.query(\"projectGrants\").collect()) as ProjectGrantRow[];\n return await normalizeProjectGrantRows(ctx, rows);\n}\n\nexport async function bridgeListProjectGrantsByTopicId(\n ctx: any,\n topicId: string\n): Promise<any[]> {\n const resolved = await resolveGrantScopeIds(ctx, { topicId });\n const rows = await bridgeListProjectGrants(ctx);\n const scopeIds = buildScopeMatchers(topicId, resolved);\n return rows.filter((row) => matchesResolvedScope(row as ProjectGrantRow, scopeIds));\n}\n\nexport async function bridgeListProjectGrantsByTopicAndPrincipal(\n ctx: any,\n topicId: string,\n principalId: string\n): Promise<any[]> {\n const resolved = await resolveGrantScopeIds(ctx, { topicId });\n const scopeIds = buildScopeMatchers(topicId, resolved);\n const rows = await listProjectGrantsByPrincipal(ctx, principalId);\n return rows.filter((row) => matchesResolvedScope(row, scopeIds));\n}\n\nexport async function bridgeListProjectGrantsByTopicAndGroup(\n ctx: any,\n topicId: string,\n groupId: string\n): Promise<any[]> {\n const resolved = await resolveGrantScopeIds(ctx, { topicId });\n const scopeIds = buildScopeMatchers(topicId, resolved);\n const rows = await listProjectGrantsByGroup(ctx, groupId);\n return rows.filter((row) => matchesResolvedScope(row, scopeIds));\n}\n\nexport async function bridgeListProjectGrantsByPrincipalStatus(\n ctx: any,\n principalId: string,\n status: ProjectGrantStatus\n): Promise<any[]> {\n const rows = await listProjectGrantsByPrincipal(ctx, principalId);\n return rows.filter((row) => row.status === status);\n}\n\nexport async function bridgeListProjectGrantsByGroupStatus(\n ctx: any,\n groupId: string,\n status: ProjectGrantStatus\n): Promise<any[]> {\n const rows = await listProjectGrantsByGroup(ctx, groupId);\n return rows.filter((row) => row.status === status);\n}\n\nexport async function bridgeInsertProjectGrant(\n ctx: any,\n value: ProjectGrantWrite\n): Promise<Id<\"projectGrants\">> {\n const resolved = await resolveGrantScopeIds(ctx, value);\n return await ctx.db.insert(\"projectGrants\", {\n ...value,\n ...(resolved.topicId ? { topicId: resolved.topicId } : {}),\n ...(resolved.projectId ?? resolved.topicId\n ? { projectId: resolved.projectId ?? resolved.topicId }\n : {}),\n });\n}\n\nexport async function bridgePatchProjectGrant(\n ctx: any,\n projectGrantId: string,\n value: ProjectGrantWrite\n): Promise<void> {\n const resolved = await resolveGrantScopeIds(ctx, value);\n await ctx.db.patch(projectGrantId, {\n ...value,\n ...(resolved.topicId ? { topicId: resolved.topicId } : {}),\n ...(resolved.projectId ?? resolved.topicId\n ? { projectId: resolved.projectId ?? resolved.topicId }\n : {}),\n });\n}\n","/** Data-source resolver wiring for topic-scoped access control. */\nimport { api as appApi } from \"./convex\";\nimport {\n bridgeInsertProjectGrant,\n bridgeListProjectGrantsByGroupStatus,\n bridgeListProjectGrantsByPrincipalStatus,\n bridgeListProjectGrantsByTopicAndGroup,\n bridgeListProjectGrantsByTopicAndPrincipal,\n} from \"./projectGrantsBridge.js\";\nimport {\n listTopicProjectOverlays,\n resolveTopicProjectOverlay,\n} from \"./topicProjectOverlay.js\";\nimport type {\n AccessControlAppResolverContext,\n AccessControlAppResolvers,\n} from \"./resolverTypes\";\n\nasync function findUserByClerkId(\n ctx: AccessControlAppResolverContext,\n clerkId: string\n): Promise<Record<string, unknown> | null> {\n const normalizedClerkId = clerkId.trim();\n if (!normalizedClerkId) {\n return null;\n }\n\n if (typeof ctx.runQuery === \"function\") {\n try {\n const bridgedUser = await ctx.runQuery(appApi.users.getUserByClerkId as any, {\n clerkId: normalizedClerkId,\n });\n if (bridgedUser) {\n return bridgedUser as Record<string, unknown>;\n }\n } catch {\n // Some dev deployments still carry the users table without the legacy\n // by_clerkId index. Fall through to a direct table scan instead of failing\n // the MCP request path closed on index drift alone.\n }\n }\n\n try {\n const users = await ctx.db.query(\"users\").collect();\n return (\n users.find((user) => String((user as { clerkId?: unknown }).clerkId ?? \"\") === normalizedClerkId) ??\n null\n ) as Record<string, unknown> | null;\n } catch {\n return null;\n }\n}\n\nasync function findUserByPrincipalId(\n ctx: AccessControlAppResolverContext,\n principalId: string\n): Promise<Record<string, unknown> | null> {\n const normalizedPrincipalId = principalId.trim();\n if (!normalizedPrincipalId) {\n return null;\n }\n\n try {\n const users = await ctx.db.query(\"users\").collect();\n return (\n users.find(\n (user) =>\n String((user as { defaultPrincipalId?: unknown }).defaultPrincipalId ?? \"\") ===\n normalizedPrincipalId\n ) ?? null\n ) as Record<string, unknown> | null;\n } catch {\n return null;\n }\n}\n\nasync function findAgentByPrincipalId(\n ctx: AccessControlAppResolverContext,\n principalId: string\n): Promise<Record<string, unknown> | null> {\n const normalizedPrincipalId = principalId.trim();\n if (!normalizedPrincipalId) {\n return null;\n }\n\n if (typeof ctx.runQuery === \"function\") {\n try {\n const bridgedAgent = await ctx.runQuery(\n (appApi as any).agents.getAgentByPrincipalId,\n {\n principalId: normalizedPrincipalId,\n }\n );\n if (bridgedAgent) {\n return bridgedAgent as Record<string, unknown>;\n }\n } catch {\n // Fall through to direct scan for local index drift in dev deployments.\n }\n }\n\n try {\n const agents = await ctx.db.query(\"agents\").collect();\n return (\n agents.find(\n (agent) =>\n String((agent as { principalId?: unknown }).principalId ?? \"\") ===\n normalizedPrincipalId\n ) ?? null\n ) as Record<string, unknown> | null;\n } catch {\n return null;\n }\n}\n\nfunction defaultResolvers(): AccessControlAppResolvers {\n return {\n async getProject(ctx, topicId) {\n return await resolveTopicProjectOverlay(ctx, topicId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n });\n },\n async listTopics(ctx) {\n return await listTopicProjectOverlays(ctx, { idMode: \"legacy\" });\n },\n async listTopicsByOwner(ctx, ownerId) {\n const topics = await listTopicProjectOverlays(ctx, { idMode: \"legacy\" });\n return topics.filter((topic) => topic.ownerId === ownerId);\n },\n async listTopicsByVisibility(ctx, visibility) {\n const topics = await listTopicProjectOverlays(ctx, { idMode: \"legacy\" });\n return topics.filter((topic) => topic.visibility === visibility);\n },\n async listProjectGrantsByProjectAndPrincipal(ctx, topicId, principalId) {\n return await bridgeListProjectGrantsByTopicAndPrincipal(\n ctx,\n topicId,\n principalId\n );\n },\n async listProjectGrantsByProjectAndGroup(ctx, topicId, groupId) {\n return await bridgeListProjectGrantsByTopicAndGroup(ctx, topicId, groupId);\n },\n async listProjectGrantsByPrincipalStatus(ctx, principalId, status) {\n return await bridgeListProjectGrantsByPrincipalStatus(\n ctx,\n principalId,\n status\n );\n },\n async listProjectGrantsByGroupStatus(ctx, groupId, status) {\n return await bridgeListProjectGrantsByGroupStatus(ctx, groupId, status);\n },\n async insertProjectGrant(ctx, value) {\n return (await bridgeInsertProjectGrant(ctx, value)) as any;\n },\n async getAgentByPrincipalId(ctx, principalId) {\n return await findAgentByPrincipalId(ctx, principalId);\n },\n async getUserByClerkId(ctx, clerkId) {\n return await findUserByClerkId(ctx, clerkId);\n },\n async getUserByPrincipalId(ctx, principalId) {\n return await findUserByPrincipalId(ctx, principalId);\n },\n };\n}\n\nlet resolverOverrides: Partial<AccessControlAppResolvers> = {};\n\nexport function configureAccessControlAppResolvers(\n overrides: Partial<AccessControlAppResolvers>\n): void {\n resolverOverrides = {\n ...resolverOverrides,\n ...overrides,\n };\n}\n\nexport function resetAccessControlAppResolvers(): void {\n resolverOverrides = {};\n}\n\nexport function resolveAccessControlAppResolvers(\n _ctx: AccessControlAppResolverContext\n): AccessControlAppResolvers {\n return {\n ...defaultResolvers(),\n ...resolverOverrides,\n };\n}\n","/**\n * Principal Context Resolver\n *\n * Derives principal context from the local `users` table only.\n * Governance tables (platformPrincipals, platformMemberships,\n * platformGroupMemberships) have been migrated to Master Control\n * and no longer exist in the tenant deployment.\n */\n\nimport type { MutationCtx, QueryCtx } from \"./convex\";\nimport { resolveAccessControlAppResolvers } from \"./resolvers\";\n\ntype DbCtx = QueryCtx | MutationCtx;\n\nexport type PlatformRole =\n | \"platform_admin\"\n | \"tenant_admin\"\n | \"workspace_admin\"\n | \"editor\"\n | \"viewer\"\n | \"auditor\"\n | \"service_agent\";\n\ntype ResolvedPrincipalType = \"user\" | \"group\" | \"service\" | \"external_viewer\";\n\nexport type ResolvedPrincipalContext = {\n principalId: string;\n principalType: ResolvedPrincipalType;\n clerkId: string;\n tenantId: string | null;\n workspaceId: string | null;\n roles: PlatformRole[];\n groupIds: string[];\n isPlatformAdmin: boolean;\n isTenantAdmin: boolean;\n isWorkspaceAdmin: boolean;\n isSystemFallback: boolean;\n};\n\ntype ResolvedUserRecord = {\n mcRole?: unknown;\n defaultTenantId?: unknown;\n defaultWorkspaceId?: unknown;\n defaultPrincipalId?: unknown;\n principalGroupIds?: unknown;\n};\n\ntype ResolvedAgentRecord = {\n principalId?: unknown;\n tenantId?: unknown;\n workspaceId?: unknown;\n roles?: unknown;\n groupIds?: unknown;\n};\n\ntype CanonicalResolvedUser = {\n mcRole: PlatformRole;\n defaultTenantId: string;\n defaultWorkspaceId: string;\n defaultPrincipalId: string;\n};\n\nfunction requireCanonicalResolvedUser(\n user: Record<string, unknown> | null,\n clerkId: string\n): CanonicalResolvedUser {\n const resolved = user as ResolvedUserRecord | null;\n if (!resolved) {\n throw new Error(\n `[AccessControl] Canonical user identity required for ${clerkId}. Sync users.upsertUser before user-bound access checks.`\n );\n }\n\n const { mcRole, defaultTenantId, defaultWorkspaceId, defaultPrincipalId } = resolved;\n if (\n mcRole !== \"platform_admin\" &&\n mcRole !== \"tenant_admin\" &&\n mcRole !== \"workspace_admin\" &&\n mcRole !== \"editor\" &&\n mcRole !== \"viewer\" &&\n mcRole !== \"auditor\" &&\n mcRole !== \"service_agent\"\n ) {\n throw new Error(\n `[AccessControl] Canonical MC role required for ${clerkId}. Re-sync Master Control identity before user-bound access checks.`\n );\n }\n\n if (typeof defaultTenantId !== \"string\" || defaultTenantId.trim().length === 0) {\n throw new Error(\n `[AccessControl] Canonical home tenant required for ${clerkId}. Re-sync Master Control identity before user-bound access checks.`\n );\n }\n\n if (\n typeof defaultWorkspaceId !== \"string\" ||\n defaultWorkspaceId.trim().length === 0\n ) {\n throw new Error(\n `[AccessControl] Canonical home workspace required for ${clerkId}. Re-sync Master Control identity before user-bound access checks.`\n );\n }\n\n if (\n typeof defaultPrincipalId !== \"string\" ||\n defaultPrincipalId.trim().length === 0\n ) {\n throw new Error(\n `[AccessControl] Canonical federated principal required for ${clerkId}. Re-sync Master Control identity before user-bound access checks.`\n );\n }\n\n return {\n mcRole,\n defaultTenantId: defaultTenantId.trim(),\n defaultWorkspaceId: defaultWorkspaceId.trim(),\n defaultPrincipalId: defaultPrincipalId.trim(),\n };\n}\n\nfunction isPrincipalIdInput(value: string): boolean {\n return (\n value.startsWith(\"user:\") ||\n value.startsWith(\"group:\") ||\n value.startsWith(\"service:\") ||\n value.startsWith(\"agent:\") ||\n value.startsWith(\"external_viewer:\")\n );\n}\n\nasync function resolveCanonicalUserRecord(\n ctx: DbCtx,\n actorId: string\n): Promise<{\n resolvedUser: Record<string, unknown> | null;\n clerkId: string;\n contextClerkId: string;\n}> {\n const normalizedActorId = actorId.trim();\n const clerkId =\n isPrincipalIdInput(normalizedActorId) && normalizedActorId.startsWith(\"user:\")\n ? normalizedActorId.slice(\"user:\".length)\n : normalizedActorId;\n const resolvers = resolveAccessControlAppResolvers(ctx);\n const resolvedByClerkId = await resolvers.getUserByClerkId(ctx, clerkId);\n\n if (resolvedByClerkId) {\n return {\n resolvedUser: resolvedByClerkId as Record<string, unknown>,\n clerkId,\n contextClerkId: clerkId,\n };\n }\n\n const resolvedByPrincipalId = await resolvers.getUserByPrincipalId(\n ctx,\n normalizedActorId\n );\n return {\n resolvedUser: (resolvedByPrincipalId as Record<string, unknown> | null) ?? null,\n clerkId,\n contextClerkId:\n normalizedActorId.startsWith(\"user:\") && clerkId.length > 0\n ? clerkId\n : normalizedActorId,\n };\n}\n\nfunction uniqRoles(roles: string[]): PlatformRole[] {\n const roleSet = new Set<PlatformRole>();\n for (const role of roles) {\n if (\n role === \"platform_admin\" ||\n role === \"tenant_admin\" ||\n role === \"workspace_admin\" ||\n role === \"editor\" ||\n role === \"viewer\" ||\n role === \"auditor\" ||\n role === \"service_agent\"\n ) {\n roleSet.add(role);\n }\n }\n return [...roleSet];\n}\n\nfunction normalizeGroupIds(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return [...new Set(\n value\n .filter((entry): entry is string => typeof entry === \"string\")\n .map((entry) => entry.trim())\n .filter(Boolean)\n )];\n}\n\nfunction requireServiceAgentUser(\n user: Record<string, unknown> | null,\n actorId: string\n): CanonicalResolvedUser {\n const canonicalUser = requireCanonicalResolvedUser(user, actorId);\n if (canonicalUser.mcRole !== \"service_agent\") {\n throw new Error(\n `[AccessControl] Canonical service_agent identity required for ${actorId}. Sync users.upsertUser before agent-bound access checks.`\n );\n }\n return canonicalUser;\n}\n\nfunction requireCanonicalResolvedAgent(\n agent: Record<string, unknown> | null,\n actorId: string\n): {\n principalId: string;\n tenantId: string;\n workspaceId: string;\n roles: PlatformRole[];\n groupIds: string[];\n} {\n const resolved = agent as ResolvedAgentRecord | null;\n if (!resolved) {\n throw new Error(\n `[AccessControl] Agent \"${actorId}\" not found in agents or users table.`\n );\n }\n\n if (typeof resolved.principalId !== \"string\" || resolved.principalId.trim().length === 0) {\n throw new Error(\n `[AccessControl] Canonical agent principalId required for ${actorId}.`\n );\n }\n\n if (typeof resolved.tenantId !== \"string\" || resolved.tenantId.trim().length === 0) {\n throw new Error(\n `[AccessControl] Canonical home tenant required for ${actorId}.`\n );\n }\n\n if (\n typeof resolved.workspaceId !== \"string\" ||\n resolved.workspaceId.trim().length === 0\n ) {\n throw new Error(\n `[AccessControl] Canonical home workspace required for ${actorId}.`\n );\n }\n\n return {\n principalId: resolved.principalId.trim(),\n tenantId: resolved.tenantId.trim(),\n workspaceId: resolved.workspaceId.trim(),\n roles:\n uniqRoles(Array.isArray(resolved.roles) ? (resolved.roles as string[]) : []) ??\n [\"service_agent\"],\n groupIds: normalizeGroupIds(resolved.groupIds),\n };\n}\n\nfunction _pickHomeMembership(\n memberships: Array<{\n tenantId: string;\n workspaceId?: string;\n role: PlatformRole;\n }>\n) {\n const rolePriority: Record<PlatformRole, number> = {\n platform_admin: 7,\n tenant_admin: 6,\n workspace_admin: 5,\n editor: 4,\n auditor: 3,\n viewer: 2,\n service_agent: 1,\n };\n\n const sorted = [...memberships].sort(\n (a, b) => rolePriority[b.role] - rolePriority[a.role]\n );\n\n return sorted[0] ?? null;\n}\n\n/**\n * Resolve principal context from the local `users` table.\n *\n * Governance tables (platformPrincipals, platformMemberships,\n * platformGroupMemberships) have been migrated to Master Control.\n * This function now derives all context from the `users` table\n * via the app resolver layer.\n */\nexport async function resolvePrincipalContext(\n ctx: DbCtx,\n actorId: string\n): Promise<ResolvedPrincipalContext> {\n if (actorId.startsWith(\"agent:\")) {\n const resolvers = resolveAccessControlAppResolvers(ctx);\n const resolvedAgent = await resolvers.getAgentByPrincipalId(ctx, actorId);\n\n if (resolvedAgent) {\n const agent = requireCanonicalResolvedAgent(\n resolvedAgent as Record<string, unknown> | null,\n actorId\n );\n return {\n principalId: agent.principalId,\n principalType: \"service\",\n clerkId: actorId,\n tenantId: agent.tenantId,\n workspaceId: agent.workspaceId,\n roles: agent.roles.length > 0 ? agent.roles : [\"service_agent\"],\n groupIds: agent.groupIds,\n isPlatformAdmin: false,\n isTenantAdmin: false,\n isWorkspaceAdmin: false,\n isSystemFallback: false,\n };\n }\n\n const resolvedUser = (await resolvers.getUserByClerkId(\n ctx,\n actorId\n )) as ResolvedUserRecord | null;\n if (!resolvedUser) {\n throw new Error(\n `[AccessControl] Agent \"${actorId}\" not found in agents or users table.`\n );\n }\n const user = requireServiceAgentUser(\n resolvedUser as Record<string, unknown> | null,\n actorId\n );\n console.warn(\n `[AccessControl] Deprecated legacy service-agent fallback for ${actorId}; migrate this principal into identity.agents.`\n );\n\n return {\n principalId: user.defaultPrincipalId,\n principalType: \"service\",\n clerkId: actorId,\n tenantId: user.defaultTenantId,\n workspaceId: user.defaultWorkspaceId,\n roles: [\"service_agent\"],\n groupIds: normalizeGroupIds(resolvedUser?.principalGroupIds),\n isPlatformAdmin: false,\n isTenantAdmin: false,\n isWorkspaceAdmin: false,\n isSystemFallback: false,\n };\n }\n\n const {\n resolvedUser,\n contextClerkId,\n } = await resolveCanonicalUserRecord(ctx, actorId);\n const user = requireCanonicalResolvedUser(\n resolvedUser as Record<string, unknown> | null,\n contextClerkId\n );\n if (!user.defaultPrincipalId) {\n throw new Error(\n `[AccessControl] Canonical federated principal required for ${contextClerkId}. Re-sync Master Control identity before user-bound access checks.`\n );\n }\n\n if (user.mcRole === \"service_agent\") {\n return {\n principalId: user.defaultPrincipalId,\n principalType: \"service\",\n clerkId: contextClerkId,\n tenantId: user.defaultTenantId,\n workspaceId: user.defaultWorkspaceId,\n roles: [\"service_agent\"],\n groupIds: normalizeGroupIds(resolvedUser?.principalGroupIds),\n isPlatformAdmin: false,\n isTenantAdmin: false,\n isWorkspaceAdmin: false,\n isSystemFallback: false,\n };\n }\n\n const principalId = user.defaultPrincipalId;\n\n const effectiveRole = user.mcRole;\n\n const roles: PlatformRole[] = effectiveRole === \"platform_admin\"\n ? [\"platform_admin\", \"tenant_admin\"]\n : effectiveRole === \"tenant_admin\"\n ? [\"tenant_admin\"]\n : [effectiveRole];\n\n const tenantId = user.defaultTenantId;\n const workspaceId = user.defaultWorkspaceId;\n\n const isPlatformAdmin = effectiveRole === \"platform_admin\";\n\n return {\n principalId,\n principalType: \"user\",\n clerkId: contextClerkId,\n tenantId,\n workspaceId,\n roles: uniqRoles(roles),\n groupIds: normalizeGroupIds(resolvedUser?.principalGroupIds),\n isPlatformAdmin,\n isTenantAdmin: isPlatformAdmin || effectiveRole === \"tenant_admin\",\n isWorkspaceAdmin: isPlatformAdmin || effectiveRole === \"tenant_admin\" || effectiveRole === \"workspace_admin\",\n isSystemFallback: false,\n };\n}\n\n/**\n * Ensure a user principal context exists.\n *\n * Governance bootstrap (creating platformPrincipals, memberships, etc.)\n * has moved to Master Control. This tenant-side stub resolves the\n * existing context from the local `users` table without creating\n * any governance records.\n */\nexport async function ensureUserPrincipalContext(\n ctx: MutationCtx,\n args: {\n clerkId: string;\n email?: string;\n name?: string;\n isAdmin?: boolean;\n actorPrincipalId?: string;\n }\n): Promise<ResolvedPrincipalContext> {\n return resolvePrincipalContext(ctx, args.clerkId);\n}\n","/**\n * Centralized Access Control for Convex\n *\n * This module provides consistent authorization patterns across all Convex\n * mutations and queries. Access checks are principal-context driven and honor\n * tenant ringfencing, explicit topic grants, and broad visibility semantics.\n *\n * Access Rules:\n * - Platform admins have access to all topics\n * - Topic owners have full access to their topics\n * - Explicit topic grants (principal/group) provide access across visibility modes\n * - Legacy `sharedWith` remains a compatibility bridge during migration\n * - `firm` visibility is tenant-scoped and blocked for principals marked external\n * - `public` visibility is available to any authenticated user\n * - Resources without a topic are accessible only to their creator\n */\n\nimport type { MutationCtx, QueryCtx } from \"./convex\";\nimport {\n resolvePrincipalContext,\n type ResolvedPrincipalContext,\n} from \"./principalContext\";\nimport { resolveAccessControlAppResolvers } from \"./resolvers\";\n\ntype DbCtx = QueryCtx | MutationCtx;\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type TopicRecord = {\n _id: string;\n ownerId: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n};\n\n/** @deprecated Use TopicRecord inside access-control. */\nexport type Project = {\n _id: string;\n ownerId: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n};\n\nexport type ResourceWithTopic = {\n topicId?: string;\n /** @deprecated Use topicId inside access-control. */\n projectId?: string;\n userId?: string;\n createdBy?: string;\n};\n\n/** @deprecated Use ResourceWithTopic inside access-control. */\nexport type ResourceWithProject = ResourceWithTopic;\n\nexport type AccessCheckResult = {\n hasAccess: boolean;\n isAdmin: boolean;\n isOwner: boolean;\n isShared: boolean;\n hasGrant: boolean;\n isFirmVisible: boolean;\n isExternalVisible: boolean;\n isPublicVisible: boolean;\n isTenantScopeMatch: boolean;\n isWorkspaceScopeMatch: boolean;\n isPrincipalExternal: boolean;\n};\n\nfunction isTopicInPrincipalTenant(\n topic: { tenantId?: string },\n principalTenantId: string | null\n): boolean {\n if (!topic.tenantId) {\n return false;\n }\n if (!principalTenantId) {\n return false;\n }\n return String(topic.tenantId) === String(principalTenantId);\n}\n\nfunction isTopicInPrincipalWorkspace(\n topic: { workspaceId?: string },\n principalWorkspaceId: string | null\n): boolean {\n if (!topic.workspaceId) {\n return false;\n }\n if (!principalWorkspaceId) {\n return false;\n }\n return String(topic.workspaceId) === String(principalWorkspaceId);\n}\n\nfunction isLegacyUnscopedTopic(topic: {\n tenantId?: string;\n workspaceId?: string;\n}): boolean {\n return !topic.tenantId || !topic.workspaceId;\n}\n\nexport function isGrantScopeAlignedToTopic(\n topic: {\n tenantId?: string;\n workspaceId?: string;\n },\n grant: {\n tenantId?: string;\n workspaceId?: string;\n }\n): boolean {\n if (\n topic.tenantId &&\n grant.tenantId &&\n String(topic.tenantId) !== String(grant.tenantId)\n ) {\n return false;\n }\n if (\n topic.workspaceId &&\n grant.workspaceId &&\n String(topic.workspaceId) !== String(grant.workspaceId)\n ) {\n return false;\n }\n return true;\n}\n\n/** @deprecated Use isGrantScopeAlignedToTopic. */\nexport const isGrantScopeAlignedToProject = isGrantScopeAlignedToTopic;\n\nexport function isGroupScopeAlignedToTopic(\n topic: {\n tenantId?: string;\n workspaceId?: string;\n },\n group: {\n tenantId?: string;\n workspaceId?: string;\n }\n): boolean {\n if (\n topic.tenantId &&\n group.tenantId &&\n String(topic.tenantId) !== String(group.tenantId)\n ) {\n return false;\n }\n if (\n topic.workspaceId &&\n group.workspaceId &&\n String(topic.workspaceId) !== String(group.workspaceId)\n ) {\n return false;\n }\n return true;\n}\n\n/** @deprecated Use isGroupScopeAlignedToTopic. */\nexport const isGroupScopeAlignedToProject = isGroupScopeAlignedToTopic;\n\nexport function isGrantSourceAllowedForVisibility(\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\",\n source: string | undefined\n): boolean {\n if (source !== \"external_share\") {\n return true;\n }\n return visibility === \"external\" || visibility === \"public\";\n}\n\nfunction isGrantActive(grant: {\n status: \"active\" | \"revoked\" | \"expired\";\n expiresAt?: number;\n}): boolean {\n if (grant.status !== \"active\") {\n return false;\n }\n if (grant.expiresAt !== undefined && grant.expiresAt <= Date.now()) {\n return false;\n }\n return true;\n}\n\nasync function hasPrincipalGrant(\n ctx: DbCtx,\n args: {\n topic: TopicRecord;\n principalId: string;\n principalIsExternal: boolean;\n }\n): Promise<boolean> {\n const grants = await resolveAccessControlAppResolvers(\n ctx\n ).listProjectGrantsByProjectAndPrincipal(\n ctx,\n args.topic._id,\n args.principalId\n );\n\n if (\n grants.some(\n (grant) =>\n isGrantActive(grant as any) &&\n isGrantScopeAlignedToTopic(args.topic, grant) &&\n isGrantSourceAllowedForVisibility(\n args.topic.visibility,\n grant.source\n ) &&\n (!args.principalIsExternal ||\n args.topic.visibility === \"public\" ||\n grant.source === \"external_share\")\n )\n ) {\n return true;\n }\n\n return false;\n}\n\nasync function hasGroupGrant(\n ctx: DbCtx,\n args: {\n topic: TopicRecord;\n groupIds: string[];\n }\n): Promise<boolean> {\n // Group-based grant checks require MC group resolution.\n // With groupIds=[] from tenant-local principal context, this is a no-op.\n // Future: call MC to resolve group grants for cross-tenant scenarios.\n if (args.groupIds.length === 0) {\n return false;\n }\n\n for (const groupId of args.groupIds) {\n const grants = await resolveAccessControlAppResolvers(\n ctx\n ).listProjectGrantsByProjectAndGroup(ctx, args.topic._id, groupId);\n\n if (\n grants.some(\n (grant) =>\n isGrantActive(grant as any) &&\n isGrantScopeAlignedToTopic(args.topic, grant) &&\n isGrantSourceAllowedForVisibility(\n args.topic.visibility,\n grant.source\n )\n )\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction isExternalPrincipal(\n _ctx: DbCtx,\n _args: {\n groupIds: string[];\n topicTenantId?: string;\n topicWorkspaceId?: string;\n }\n): boolean {\n // External principal detection requires MC group resolution.\n // With groupIds=[] from tenant-local principal context, always false.\n // Future: call MC to check external group membership.\n return false;\n}\n\n// =============================================================================\n// ADMIN CHECK\n// =============================================================================\n\n/**\n * Check if a user has admin-tier access.\n *\n * Identity bridge: prefers mcRole (synced from Master Control),\n * falls back to legacy isAdmin boolean during migration.\n */\nexport async function isAdmin(ctx: DbCtx, userId: string): Promise<boolean> {\n const user = await resolveAccessControlAppResolvers(ctx).getUserByClerkId(\n ctx,\n userId\n );\n if (!user) return false;\n\n // Identity bridge: mcRole preferred, isAdmin fallback\n if (user.mcRole) {\n return user.mcRole === \"platform_admin\" || user.mcRole === \"tenant_admin\";\n }\n return user.isAdmin === true;\n}\n\n// =============================================================================\n// TOPIC ACCESS\n// =============================================================================\n\n/**\n * Check if a user has access to a topic scope.\n *\n * Returns detailed access info including why access was granted.\n */\n/**\n * STACK_MC_AUTH_BYPASS: All authenticated Stack MC users get full access\n * until RBAC and topic-native grant matching are production-ready.\n * When RBAC is complete, remove this constant and the early-return below.\n */\nconst STACK_MC_AUTH_BYPASS = true;\n\nasync function evaluateTopicAccessDetailed(\n ctx: DbCtx,\n args: {\n topicId: string;\n legacyUserId: string;\n principalContext: ResolvedPrincipalContext;\n }\n): Promise<AccessCheckResult> {\n // Single bypass: authenticated users get full access until RBAC is ready\n if (STACK_MC_AUTH_BYPASS && args.legacyUserId) {\n return {\n hasAccess: true,\n isAdmin: false,\n isOwner: false,\n isShared: false,\n hasGrant: true,\n isFirmVisible: true,\n isExternalVisible: false,\n isPublicVisible: false,\n isTenantScopeMatch: true,\n isWorkspaceScopeMatch: true,\n isPrincipalExternal: false,\n };\n }\n\n const topic = await resolveAccessControlAppResolvers(ctx).getProject(\n ctx,\n args.topicId\n );\n if (!topic) {\n return {\n hasAccess: false,\n isAdmin: false,\n isOwner: false,\n isShared: false,\n hasGrant: false,\n isFirmVisible: false,\n isExternalVisible: false,\n isPublicVisible: false,\n isTenantScopeMatch: false,\n isWorkspaceScopeMatch: false,\n isPrincipalExternal: false,\n };\n }\n\n const { principalContext, legacyUserId } = args;\n const userIsAdmin = principalContext.isPlatformAdmin;\n const isOwner = topic.ownerId === legacyUserId;\n const isShared = (topic.sharedWith ?? []).includes(legacyUserId);\n const principalIsExternal = await isExternalPrincipal(ctx, {\n groupIds: principalContext.groupIds,\n topicTenantId: topic.tenantId,\n topicWorkspaceId: topic.workspaceId,\n });\n\n const hasPrincipalGrantResult = await hasPrincipalGrant(ctx, {\n topic,\n principalId: principalContext.principalId,\n principalIsExternal,\n });\n const hasGroupGrantResult = await hasGroupGrant(ctx, {\n topic,\n groupIds: principalContext.groupIds,\n });\n\n const hasGrant = isShared || hasPrincipalGrantResult || hasGroupGrantResult;\n const legacyUnscoped = isLegacyUnscopedTopic(topic);\n const tenantScopeMatch = isTopicInPrincipalTenant(\n topic,\n principalContext.tenantId\n );\n const workspaceScopeMatch = isTopicInPrincipalWorkspace(\n topic,\n principalContext.workspaceId\n );\n\n const isPublicVisible = topic.visibility === \"public\";\n const isFirmVisible =\n topic.visibility === \"firm\" &&\n !legacyUnscoped &&\n tenantScopeMatch &&\n workspaceScopeMatch &&\n !principalIsExternal;\n const hasScopedGrant =\n hasGrant && (legacyUnscoped || (tenantScopeMatch && workspaceScopeMatch));\n const isExternalVisible = topic.visibility === \"external\" && hasScopedGrant;\n\n const hasAccess =\n userIsAdmin ||\n isOwner ||\n hasScopedGrant ||\n isPublicVisible ||\n isFirmVisible;\n\n return {\n hasAccess,\n isAdmin: userIsAdmin,\n isOwner,\n isShared,\n hasGrant,\n isFirmVisible,\n isExternalVisible,\n isPublicVisible,\n isTenantScopeMatch: tenantScopeMatch,\n isWorkspaceScopeMatch: workspaceScopeMatch,\n isPrincipalExternal: principalIsExternal,\n };\n}\n\nexport async function checkTopicAccessDetailedWithPrincipalContext(\n ctx: DbCtx,\n topicId: string,\n principalContext: ResolvedPrincipalContext\n): Promise<AccessCheckResult> {\n return evaluateTopicAccessDetailed(ctx, {\n topicId,\n legacyUserId: principalContext.clerkId,\n principalContext,\n });\n}\n\nexport async function checkTopicAccessDetailed(\n ctx: DbCtx,\n topicId: string,\n userId: string\n): Promise<AccessCheckResult> {\n const principalContext = await resolvePrincipalContext(ctx, userId);\n return evaluateTopicAccessDetailed(ctx, {\n topicId,\n legacyUserId: userId,\n principalContext,\n });\n}\n\n/**\n * Check if a user has access to a topic scope (simple boolean).\n */\nexport async function checkTopicAccess(\n ctx: DbCtx,\n topicId: string,\n userId: string\n): Promise<boolean> {\n const result = await checkTopicAccessDetailed(ctx, topicId, userId);\n return result.hasAccess;\n}\n\nexport async function checkTopicAccessWithPrincipalContext(\n ctx: DbCtx,\n topicId: string,\n principalContext: ResolvedPrincipalContext\n): Promise<boolean> {\n const result = await checkTopicAccessDetailedWithPrincipalContext(\n ctx,\n topicId,\n principalContext\n );\n return result.hasAccess;\n}\n\n/**\n * Check if a user has access to a scope (topic or legacy project compatibility id).\n *\n * TC-C: topic-canonical access bridge. Tries to resolve the scopeId as a\n * topic first (from the topics table). If found, allows access for any\n * authenticated user (topic-level ACL will be added in TC-D).\n * Falls back to legacy project-based access checks for compatibility.\n */\nexport async function checkScopeAccess(\n ctx: DbCtx,\n scopeId: string,\n userId: string\n): Promise<boolean> {\n // Try as topic first — topics table uses string IDs\n try {\n const topic = await (ctx.db as any).get(scopeId);\n if (\n topic &&\n (topic as any).name !== undefined &&\n (topic as any).type !== undefined\n ) {\n // Valid topic — allow access for any authenticated user.\n // Full topic-level ACL (visibility, tenant ringfencing) deferred to TC-D.\n return true;\n }\n } catch {\n // Not a valid document ID for this deployment, try the legacy project scope.\n }\n\n // Fall back to the legacy project-based access check.\n try {\n return await checkTopicAccess(ctx, scopeId as string, userId);\n } catch {\n // Neither topic nor legacy project scope resolved — deny access.\n return false;\n }\n}\n\n/**\n * Require access to a topic scope, throws if not authorized.\n */\nexport async function requireTopicAccess(\n ctx: DbCtx,\n topicId: string,\n userId: string\n): Promise<void> {\n const hasAccess = await checkTopicAccess(ctx, topicId, userId);\n if (!hasAccess) {\n throw new Error(\n \"Access denied: You don't have permission to access this topic\"\n );\n }\n}\n\n/**\n * Get a topic record with access check.\n *\n * Returns the topic record if the user has access, null otherwise.\n */\nexport async function getTopicWithAccess(\n ctx: DbCtx,\n topicId: string,\n userId: string\n): Promise<TopicRecord | null> {\n const topic = await resolveAccessControlAppResolvers(ctx).getProject(\n ctx,\n topicId\n );\n if (!topic) {\n return null;\n }\n\n const hasAccess = await checkTopicAccess(ctx, topicId, userId);\n if (!hasAccess) {\n return null;\n }\n\n return topic as TopicRecord;\n}\n\n/** @deprecated Use checkTopicAccessDetailed. */\nexport const checkProjectAccessDetailed = checkTopicAccessDetailed;\n\n/** @deprecated Use checkTopicAccess. */\nexport const checkProjectAccess = checkTopicAccess;\n\n/** @deprecated Use requireTopicAccess. */\nexport const requireProjectAccess = requireTopicAccess;\n\n/** @deprecated Use getTopicWithAccess. */\nexport const getProjectWithAccess = getTopicWithAccess;\n\n// =============================================================================\n// RESOURCE ACCESS (for items with optional topic compatibility ids)\n// =============================================================================\n\n/**\n * Check if a user can access a resource that may or may not belong to a topic.\n */\nexport function checkResourceAccess(\n ctx: DbCtx,\n resource: ResourceWithTopic,\n userId: string\n): boolean | Promise<boolean> {\n const topicId = resource.topicId ?? resource.projectId;\n if (topicId) {\n return checkTopicAccess(ctx, topicId, userId);\n }\n\n // No topic - only creator can access.\n const creatorId = resource.userId ?? resource.createdBy;\n return creatorId === userId;\n}\n\n/**\n * Require access to a resource, throws if not authorized.\n */\nexport async function requireResourceAccess(\n ctx: DbCtx,\n resource: ResourceWithTopic,\n userId: string\n): Promise<void> {\n const hasAccess = await checkResourceAccess(ctx, resource, userId);\n if (!hasAccess) {\n throw new Error(\n \"Access denied: You don't have permission to access this resource\"\n );\n }\n}\n\n// =============================================================================\n// CONVENIENCE HELPERS\n// =============================================================================\n\n/**\n * Check if user can modify a resource (stricter than read access).\n *\n * For now, same as checkResourceAccess. In the future, this could be\n * extended to support read-only sharing.\n */\nexport function checkModifyAccess(\n ctx: DbCtx,\n resource: ResourceWithTopic,\n userId: string\n): boolean | Promise<boolean> {\n return checkResourceAccess(ctx, resource, userId);\n}\n\n/**\n * Check if user is the creator of a resource.\n */\nexport function isCreator(\n resource: { userId?: string; createdBy?: string },\n userId: string\n): boolean {\n const creatorId = resource.userId ?? resource.createdBy;\n return creatorId === userId;\n}\n\n/**\n * Build the accessible topic ID set for list-style queries.\n */\nexport async function getAccessibleTopicIds(\n ctx: DbCtx,\n userId: string\n): Promise<Set<string>> {\n const principalContext = await resolvePrincipalContext(ctx, userId);\n\n if (principalContext.isPlatformAdmin) {\n // Admins can access all topics.\n const allTopics =\n await resolveAccessControlAppResolvers(ctx).listTopics(ctx);\n return new Set(allTopics.map((topic) => topic._id));\n }\n\n const topicIds = new Set<string>();\n\n // Owned topics.\n const ownedTopics = await resolveAccessControlAppResolvers(\n ctx\n ).listTopicsByOwner(ctx, userId);\n for (const topic of ownedTopics) {\n topicIds.add(topic._id);\n }\n\n // Public topics.\n const publicTopics = await resolveAccessControlAppResolvers(\n ctx\n ).listTopicsByVisibility(ctx, \"public\");\n for (const topic of publicTopics) {\n topicIds.add(topic._id);\n }\n\n // Firm topics (tenant ringfenced, and hidden from principals in external groups).\n const principalIsExternal = await isExternalPrincipal(ctx, {\n groupIds: principalContext.groupIds,\n topicTenantId: principalContext.tenantId ?? undefined,\n topicWorkspaceId: principalContext.workspaceId ?? undefined,\n });\n if (!principalIsExternal) {\n const firmTopics = await resolveAccessControlAppResolvers(\n ctx\n ).listTopicsByVisibility(ctx, \"firm\");\n\n for (const topic of firmTopics) {\n if (\n isTopicInPrincipalTenant(topic, principalContext.tenantId) &&\n isTopicInPrincipalWorkspace(topic, principalContext.workspaceId)\n ) {\n topicIds.add(topic._id);\n }\n }\n }\n\n // Explicit principal grants\n const directGrants = await resolveAccessControlAppResolvers(\n ctx\n ).listProjectGrantsByPrincipalStatus(\n ctx,\n principalContext.principalId,\n \"active\"\n );\n\n for (const grant of directGrants) {\n if (!isGrantActive(grant as any)) {\n continue;\n }\n const topic = await resolveAccessControlAppResolvers(ctx).getProject(\n ctx,\n grant.projectId\n );\n if (!topic) {\n continue;\n }\n if (!isLegacyUnscopedTopic(topic)) {\n if (!isTopicInPrincipalTenant(topic, principalContext.tenantId)) {\n continue;\n }\n if (\n !isTopicInPrincipalWorkspace(topic, principalContext.workspaceId)\n ) {\n continue;\n }\n }\n if (!isGrantScopeAlignedToTopic(topic, grant)) {\n continue;\n }\n if (\n !isGrantSourceAllowedForVisibility(topic.visibility, grant.source)\n ) {\n continue;\n }\n if (\n principalIsExternal &&\n topic.visibility !== \"public\" &&\n grant.source !== \"external_share\"\n ) {\n continue;\n }\n topicIds.add(grant.projectId);\n }\n\n // Group grants — skipped in tenant-local context (groups live in MC).\n // principalContext.groupIds is [] when resolved locally.\n\n // Legacy shared-with list compatibility while grant backfill is in progress.\n const allTopics =\n await resolveAccessControlAppResolvers(ctx).listTopics(ctx);\n for (const topic of allTopics) {\n if (\n (topic.sharedWith ?? []).includes(userId) &&\n (isLegacyUnscopedTopic(topic) ||\n (isTopicInPrincipalTenant(topic, principalContext.tenantId) &&\n isTopicInPrincipalWorkspace(topic, principalContext.workspaceId)))\n ) {\n topicIds.add(topic._id);\n }\n }\n\n return topicIds;\n}\n\n/** @deprecated Use getAccessibleTopicIds. */\nexport const getAccessibleProjectIds = getAccessibleTopicIds;\n","/**\n * validators module implementation.\n */\n\nimport { v } from \"convex/values\";\n\n/**\n * Permissive return validator used while contracts are tightened.\n */\nexport const permissiveReturn: any = v.optional(v.any());\n\n/**\n * Shallow JSON validators for dynamic payloads.\n */\nexport const looseJsonObject = v.record(v.string(), v.any());\nexport const looseJsonArray = v.array(v.any());\nexport const looseJsonValue = v.union(\n v.string(),\n v.number(),\n v.boolean(),\n v.null(),\n looseJsonObject,\n looseJsonArray\n);\n","import {\n actionGeneric,\n anyApi,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\nexport const api = anyApi as any;\nexport const components = componentsGeneric() as any;\nexport const internal = anyApi as any;\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> = any;\nexport type DataModel = any;\nexport type ActionCtx = any;\nexport type DatabaseReader = any;\nexport type DatabaseWriter = any;\nexport type MutationCtx = any;\nexport type QueryCtx = any;\n\nexport const action = actionGeneric as any;\nexport const httpAction = httpActionGeneric as any;\nexport const internalAction = internalActionGeneric as any;\nexport const internalMutation = internalMutationGeneric as any;\nexport const internalQuery = internalQueryGeneric as any;\nexport const mutation = mutationGeneric as any;\nexport const query = queryGeneric as any;\n","/** Data-source resolver wiring for the graph-primitives module. */\nimport {\n listTopicProjectOverlays,\n patchTopicProjectOverlay,\n resolveTopicProjectOverlay,\n} from \"./topicProjectOverlay\";\nimport type {\n GraphPrimitivesAppResolverContext,\n GraphPrimitivesAppResolvers,\n} from \"./resolverTypes\";\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n return (\n message.includes('Child component ComponentName(Identifier(\"lucern\")) not found') ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction isAdvisoryTopicPatch(value: Record<string, unknown>): boolean {\n const advisoryKeys = new Set([\"lastActivityAt\", \"updatedAt\"]);\n const keys = Object.keys(value);\n return keys.length > 0 && keys.every((key) => advisoryKeys.has(key));\n}\n\nasync function patchProjectWithTolerance(\n ctx: GraphPrimitivesAppResolverContext,\n projectId: string,\n value: Record<string, unknown>\n): Promise<void> {\n try {\n await patchTopicProjectOverlay(ctx, projectId, value);\n } catch (error) {\n if (\n !isAdvisoryTopicPatch(value) ||\n !isMissingLucernChildComponentError(error)\n ) {\n throw error;\n }\n\n console.warn(\"[lucern graph-primitives] Non-fatal advisory topic patch failure\", {\n projectId,\n keys: Object.keys(value),\n error: error instanceof Error ? error.message : error,\n });\n }\n}\n\nfunction defaultResolvers(): GraphPrimitivesAppResolvers {\n return {\n async getProject(ctx, projectId) {\n return await resolveTopicProjectOverlay(ctx, projectId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n });\n },\n async patchProject(ctx, projectId, value) {\n await patchProjectWithTolerance(ctx, projectId, value);\n },\n async listTopics(ctx) {\n return await listTopicProjectOverlays(ctx, {\n idMode: \"legacy\",\n });\n },\n async getFinalArtifact(ctx, artifactId) {\n return await ctx.db.get(artifactId);\n },\n };\n}\n\nlet resolverOverrides: Partial<GraphPrimitivesAppResolvers> = {};\n\nexport function configureGraphPrimitivesAppResolvers(\n overrides: Partial<GraphPrimitivesAppResolvers>\n): void {\n resolverOverrides = {\n ...resolverOverrides,\n ...overrides,\n };\n}\n\nexport function resetGraphPrimitivesAppResolvers(): void {\n resolverOverrides = {};\n}\n\nexport function resolveGraphPrimitivesAppResolvers(\n _ctx: GraphPrimitivesAppResolverContext\n): GraphPrimitivesAppResolvers {\n return {\n ...defaultResolvers(),\n ...resolverOverrides,\n };\n}\n","import { api } from \"./convex\";\n\ntype OverlayIdMode = \"legacy\" | \"topic\";\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype LegacyProjectThesis = {\n statement: string;\n confidence: number;\n lastUpdated: number;\n};\n\ntype LegacyPillarImportance =\n | \"critical\"\n | \"major\"\n | \"minor\"\n | \"not_applicable\";\n\ntype LegacyThesisPillarConfig = {\n pillarImportance?: Record<string, LegacyPillarImportance | undefined>;\n configuredAt?: number;\n configuredBy?: string;\n aiSuggestion?: {\n suggestedAt: number;\n reasoning: string;\n };\n};\n\ntype LegacyBeliefArchitecture = {\n overallMaturity: number;\n pillarScores: Array<Record<string, unknown>>;\n lastCalculated: number;\n};\n\ntype LegacyOntologyClassification = {\n valueChains: Array<Record<string, unknown>>;\n functions: Array<Record<string, unknown>>;\n overallConfidence: number;\n classifiedAt: number;\n};\n\ntype TopicDocLike = Record<string, unknown> & {\n _id: string;\n _creationTime?: number;\n globalId?: string;\n name?: string;\n description?: string;\n type?: string;\n tenantId?: string;\n workspaceId?: string;\n status?: string;\n visibility?: string;\n createdBy?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectOverlay = Record<string, unknown> & {\n _id: string;\n projectId: string;\n topicId: string;\n storageProjectId: string;\n legacyProjectId?: string;\n name: string;\n type: string;\n description?: string;\n ownerId: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n tags: string[];\n chatCount: number;\n artifactCount: number;\n lastActivityAt: number;\n thesis?: LegacyProjectThesis;\n wedgeHypothesis?: string;\n founderArchetype?: string;\n investmentCriteria?: string[];\n sprintPhase?:\n | \"pre_sprint\"\n | \"readiness_check\"\n | \"thesis_crystallization\"\n | \"sprint_planning\"\n | \"active_sprint\"\n | \"theme_assembly\"\n | \"evolution\";\n currentSprintIndex?: number;\n thesisPillarConfig?: LegacyThesisPillarConfig;\n beliefArchitecture?: LegacyBeliefArchitecture;\n ontologyClassification?: LegacyOntologyClassification;\n _creationTime: number;\n createdAt: number;\n updatedAt: number;\n};\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readNonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction readMetadata(topic: TopicDocLike): Record<string, unknown> {\n return topic.metadata && typeof topic.metadata === \"object\"\n ? topic.metadata\n : {};\n}\n\nfunction readLegacyProjectId(\n value: Record<string, unknown> | null | undefined\n): string | undefined {\n if (!value) {\n return;\n }\n return readNonEmptyString(value[LEGACY_SCOPE_FIELD]);\n}\n\nfunction coerceVisibility(\n value: unknown\n): TopicProjectOverlay[\"visibility\"] | undefined {\n return value === \"private\" ||\n value === \"team\" ||\n value === \"firm\" ||\n value === \"external\" ||\n value === \"public\"\n ? value\n : undefined;\n}\n\nfunction coerceStatus(\n value: unknown\n): TopicProjectOverlay[\"status\"] | undefined {\n return value === \"active\" || value === \"archived\" || value === \"watching\"\n ? value\n : undefined;\n}\n\nfunction mapProjectType(\n topic: TopicDocLike,\n metadata: Record<string, unknown>\n): string {\n const explicit = readNonEmptyString(metadata.projectType);\n if (explicit) {\n return explicit;\n }\n if (topic.type === \"theme\") {\n return \"thematic\";\n }\n return readNonEmptyString(topic.type) || \"general\";\n}\n\nfunction isProjectLikeTopic(topic: TopicDocLike): boolean {\n const metadata = readMetadata(topic);\n return (\n topic.type === \"theme\" ||\n topic.type === \"thematic\" ||\n topic.type === \"deal\" ||\n topic.type === \"monitoring\" ||\n readLegacyProjectId(topic) !== undefined ||\n readNonEmptyString(metadata.projectType) !== undefined\n );\n}\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found'\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nasync function resolveTopicDoc(\n ctx: any,\n scopeId: string\n): Promise<TopicDocLike | null> {\n if (ctx?.db && typeof ctx.db.get === \"function\") {\n try {\n const directTopic = (await ctx.db.get(scopeId as any)) as TopicDocLike | null;\n if (directTopic) {\n return directTopic;\n }\n } catch {\n // Not a direct topics-table id.\n }\n }\n\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.get as any, {\n id: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch {\n // Fall through to legacy-scope lookup.\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.getByLegacyScopeId as any, {\n projectId: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch {\n // Best-effort compat lookup only.\n }\n\n return null;\n}\n\nexport function materializeTopicProjectOverlay(\n topic: TopicDocLike,\n idMode: OverlayIdMode = \"legacy\"\n): TopicProjectOverlay {\n const metadata = readMetadata(topic);\n const topicId = String(topic._id);\n const legacyProjectId =\n readLegacyProjectId(topic) ||\n readLegacyProjectId(metadata) ||\n readNonEmptyString(metadata.legacyProjectId);\n const storageProjectId = legacyProjectId || topicId;\n const outwardId = idMode === \"topic\" ? topicId : storageProjectId;\n const visibility =\n coerceVisibility(topic.visibility) ||\n coerceVisibility(metadata.visibility) ||\n \"private\";\n const status =\n coerceStatus(topic.status) || coerceStatus(metadata.status) || \"active\";\n const createdAt =\n typeof topic.createdAt === \"number\"\n ? topic.createdAt\n : typeof topic._creationTime === \"number\"\n ? topic._creationTime\n : 0;\n const updatedAt =\n typeof topic.updatedAt === \"number\"\n ? topic.updatedAt\n : typeof metadata.updatedAt === \"number\"\n ? (metadata.updatedAt as number)\n : createdAt;\n\n return {\n ...metadata,\n _id: outwardId,\n projectId: outwardId,\n topicId,\n storageProjectId,\n legacyProjectId,\n name: readNonEmptyString(topic.name) || \"Untitled Theme\",\n type: mapProjectType(topic, metadata),\n description: readNonEmptyString(topic.description),\n ownerId:\n readNonEmptyString(metadata.ownerId) ||\n readNonEmptyString(topic.createdBy) ||\n \"system\",\n sharedWith: readStringArray(metadata.sharedWith),\n visibility,\n tenantId:\n readNonEmptyString(topic.tenantId) ||\n readNonEmptyString(metadata.tenantId),\n workspaceId:\n readNonEmptyString(topic.workspaceId) ||\n readNonEmptyString(metadata.workspaceId),\n status,\n tags: readStringArray(metadata.tags),\n chatCount:\n typeof metadata.chatCount === \"number\" ? (metadata.chatCount as number) : 0,\n artifactCount:\n typeof metadata.artifactCount === \"number\"\n ? (metadata.artifactCount as number)\n : 0,\n lastActivityAt:\n typeof metadata.lastActivityAt === \"number\"\n ? (metadata.lastActivityAt as number)\n : updatedAt,\n _creationTime:\n typeof topic._creationTime === \"number\" ? topic._creationTime : createdAt,\n createdAt,\n updatedAt,\n };\n}\n\nexport async function resolveTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n if (options.projectLikeOnly !== false && !isProjectLikeTopic(topic)) {\n return null;\n }\n return materializeTopicProjectOverlay(topic, options.idMode);\n}\n\nexport async function listTopicProjectOverlays(\n ctx: any,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay[]> {\n let allTopics: TopicDocLike[] = [];\n\n if (ctx?.db?.query && typeof ctx.db.query === \"function\") {\n try {\n allTopics = (await ctx.db.query(\"topics\").collect()) as TopicDocLike[];\n } catch {\n allTopics = [];\n }\n }\n\n if (allTopics.length === 0 && typeof ctx.runQuery === \"function\") {\n allTopics =\n (((await ctx.runQuery(api.topics.list as any, {})) ?? []) as TopicDocLike[]) ||\n [];\n }\n\n return allTopics\n .filter(\n (topic) => options.projectLikeOnly === false || isProjectLikeTopic(topic)\n )\n .map((topic) => materializeTopicProjectOverlay(topic, options.idMode));\n}\n\nexport async function patchTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n value: Record<string, unknown>\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n\n const nextMetadata = { ...readMetadata(topic) };\n const patch: Record<string, unknown> = {};\n const topicUpdateArgs: Record<string, unknown> = {\n id: String(topic._id),\n };\n\n for (const [key, rawValue] of Object.entries(value)) {\n switch (key) {\n case \"_id\":\n case \"projectId\":\n case \"topicId\":\n case \"legacyProjectId\":\n case \"storageProjectId\":\n break;\n case \"name\":\n case \"description\":\n patch[key] = rawValue;\n topicUpdateArgs[key] = rawValue;\n break;\n case \"tenantId\":\n case \"workspaceId\":\n case \"ownerId\":\n throw new Error(\n `patchTopicProjectOverlay cannot mutate ${key} via component-owned topics`\n );\n case \"status\": {\n const status = coerceStatus(rawValue);\n if (status) {\n patch.status = status;\n topicUpdateArgs.status = status;\n }\n break;\n }\n case \"visibility\": {\n const visibility = coerceVisibility(rawValue);\n if (visibility) {\n patch.visibility = visibility;\n topicUpdateArgs.visibility = visibility;\n }\n break;\n }\n case \"type\": {\n const projectType = readNonEmptyString(rawValue);\n if (projectType) {\n nextMetadata.projectType = projectType;\n } else {\n delete nextMetadata.projectType;\n }\n break;\n }\n case \"updatedAt\":\n case \"createdAt\":\n break;\n default:\n if (rawValue === undefined) {\n delete nextMetadata[key];\n } else {\n nextMetadata[key] = rawValue;\n }\n }\n }\n\n patch.updatedAt = Date.now();\n patch.metadata = nextMetadata;\n topicUpdateArgs.metadata = nextMetadata;\n\n if (typeof ctx.runMutation === \"function\") {\n try {\n await ctx.runMutation(api.topics.update as any, topicUpdateArgs);\n } catch (error) {\n if (\n !isMissingLucernChildComponentError(error) ||\n !ctx?.db ||\n typeof ctx.db.patch !== \"function\"\n ) {\n throw error;\n }\n await ctx.db.patch(String(topic._id) as any, patch);\n }\n } else if (ctx?.db && typeof ctx.db.patch === \"function\") {\n await ctx.db.patch(String(topic._id) as any, patch);\n } else {\n throw new Error(\n \"Cannot patch topic without component adapter (ctx.runMutation unavailable)\"\n );\n }\n\n return materializeTopicProjectOverlay(\n {\n ...topic,\n ...patch,\n metadata: nextMetadata,\n } as TopicDocLike\n );\n}\n\nexport function matchesTopicProjectOverlayAccess(\n accessibleProjectIds: Set<string>,\n project: { topicId: string; legacyProjectId?: string; storageProjectId?: string }\n): boolean {\n return (\n accessibleProjectIds.has(project.storageProjectId || project.topicId) ||\n accessibleProjectIds.has(project.topicId) ||\n (typeof project.legacyProjectId === \"string\" &&\n accessibleProjectIds.has(project.legacyProjectId))\n );\n}\n","/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport { api as appApi } from \"./convex\";\nimport type { Id } from \"./convex\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectScope = {\n topicId: Id<\"topics\">;\n projectId?: string;\n tenantId?: string;\n workspaceId?: string;\n source: \"topic\" | \"project_mapped_topic\" | \"topic_inferred\";\n};\n\ntype MaterializedTopicNodeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n};\n\nfunction asMappedProjectId(\n topic: TopicDoc | null | undefined\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(topic[LEGACY_SCOPE_FIELD]);\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = (topic.metadata || {}) as Record<string, unknown>;\n const candidate =\n (metadata[LEGACY_SCOPE_FIELD] as string | undefined) ||\n (metadata.legacyProjectId as string | undefined) ||\n (metadata.projectId as string | undefined) ||\n (metadata.scopeProjectId as string | undefined);\n return candidate ? (candidate as string) : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(ctx: any, scopeId: string): Promise<TopicDoc[]> {\n try {\n return (await ctx.db\n .query(\"topics\")\n .withIndex(\"by_graph_scope_project\", (q: any) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId)\n )\n .collect()) as TopicDoc[];\n } catch {\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await ctx.db.query(\"topics\").collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: any,\n topicId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get as any, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch {\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: any,\n legacyScopeId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId as any, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch {\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: any,\n topic: TopicDoc\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) break;\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) break;\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: any,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string }\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n // Try direct lookup, fall back to the legacy mapped-project bridge\n let topic: TopicDoc | null = null;\n try {\n topic = (await ctx.db.get(args.topicId as Id<\"topics\">)) as TopicDoc | null;\n } catch {\n // Not a valid topics table ID\n }\n if (!topic) {\n topic = await tryResolveHostTopicById(ctx, String(args.topicId));\n }\n if (!topic) {\n // Try as legacy projectId / globalId via the mapped-project bridge.\n topic =\n pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, String(args.topicId))\n ) ?? null;\n }\n if (!topic) {\n throw new Error(`Topic not found: ${String(args.topicId)}`);\n }\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n if (mapped) {\n return {\n topicId: topic._id,\n projectId: mapped,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n return {\n topicId: topic._id,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n\n if (args.projectId) {\n let directTopic: TopicDoc | null = null;\n try {\n directTopic = (await ctx.db.get(\n args.projectId as Id<\"topics\">\n )) as TopicDoc | null;\n } catch {\n // Not a valid topics table ID, continue to legacy graph-scope lookup.\n }\n\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n directTopic = await tryResolveHostTopicByLegacyScope(ctx, args.projectId);\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n const topics = await findTopicsByScopeAlias(ctx, args.projectId);\n const primary = pickPrimaryTopic(topics);\n if (primary) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, primary);\n return {\n topicId: primary._id,\n projectId: args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"project_mapped_topic\",\n };\n }\n throw new Error(\n `Legacy project scope ${String(args.projectId)} has no mapped topic.`\n );\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\"\n );\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","import { v } from \"convex/values\";\nimport {\n deriveMatcherReviewStatus,\n isOperationalLinkStatus,\n type LinkSuggestionStatus,\n mergeLinkSuggestionStatus,\n resolveReviewedLinkStatus,\n} from \"./matcherFeedbackUtils\";\nimport { internal } from \"./convex\";\nimport type { Id } from \"./convex\";\nimport { mutation, query } from \"./convex\";\nimport { checkProjectAccess } from \"@lucern/access-control/access\";\nimport { resolveScopeSoft, scopeArgs } from \"./scopeResolverCompat\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\n\n// IDs are now always epistemicNodes IDs (backfill complete)\nconst beliefIdUnion = v.id(\"epistemicNodes\");\nconst insightIdUnion = v.id(\"epistemicNodes\");\nconst suggestionStatusValidator = v.union(\n v.literal(\"suggested\"),\n v.literal(\"approved\"),\n v.literal(\"dismissed\")\n);\nconst matcherMetadataValidator = v.object({\n surface: v.string(),\n matcherFamily: v.optional(v.string()),\n matcherKey: v.optional(v.string()),\n matcherVersion: v.optional(v.string()),\n reviewStatus: v.optional(\n v.union(\n v.literal(\"pending\"),\n v.literal(\"accepted\"),\n v.literal(\"rejected\"),\n v.literal(\"auto_accepted\"),\n v.literal(\"superseded\")\n )\n ),\n configSnapshot: v.optional(v.any()),\n signalSnapshot: v.optional(v.any()),\n outcomeMetadata: v.optional(v.any()),\n});\n\ntype MatcherMetadata = {\n surface: string;\n matcherFamily?: string;\n matcherKey?: string;\n matcherVersion?: string;\n reviewStatus?:\n | \"pending\"\n | \"accepted\"\n | \"rejected\"\n | \"auto_accepted\"\n | \"superseded\";\n configSnapshot?: Record<string, unknown>;\n signalSnapshot?: Record<string, unknown>;\n outcomeMetadata?: Record<string, unknown>;\n};\n\nasync function markProjectGraphDirty(\n ctx: any,\n projectId: string | undefined | null\n): Promise<void> {\n if (!projectId) {\n return;\n }\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n {\n projectId,\n }\n );\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(ctx, projectId, {\n lastActivityAt: Date.now(),\n });\n}\n\nasync function recordMatcherDecision(\n ctx: any,\n args: {\n beliefNode: any;\n beliefId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n linkId: string;\n linkStatus?: LinkSuggestionStatus;\n matcherMetadata?: MatcherMetadata;\n reviewedBy?: string;\n decisionReason?: string;\n }\n): Promise<void> {\n if (!args.matcherMetadata) {\n return;\n }\n\n await ctx.runMutation(\"matcherFeedback:recordDecision\" as any, {\n projectId: args.beliefNode.projectId,\n topicId: args.beliefNode.topicId,\n surface: args.matcherMetadata.surface,\n matcherFamily: args.matcherMetadata.matcherFamily,\n matcherKey: args.matcherMetadata.matcherKey,\n matcherVersion: args.matcherMetadata.matcherVersion,\n sourceEntityId: String(args.insightId),\n targetEntityId: String(args.beliefId),\n suggestionTable: \"beliefEvidenceLinks\",\n suggestionId: args.linkId,\n reviewStatus: deriveMatcherReviewStatus({\n explicitReviewStatus: args.matcherMetadata.reviewStatus,\n linkStatus: args.linkStatus,\n }),\n reviewedBy: args.reviewedBy,\n decisionReason: args.decisionReason,\n configSnapshot: args.matcherMetadata.configSnapshot,\n signalSnapshot: args.matcherMetadata.signalSnapshot,\n outcomeMetadata: args.matcherMetadata.outcomeMetadata,\n });\n}\n\nasync function applyOperationalLinkEffects(\n ctx: any,\n args: {\n beliefNode: any;\n beliefId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n relation: \"supports\" | \"contradicts\";\n confidence?: number;\n rationale?: string;\n createdBy: string;\n }\n): Promise<void> {\n const currentSupporting = args.beliefNode.supportingInsightIds ?? [];\n const currentContradicting = args.beliefNode.contradictingInsightIds ?? [];\n\n if (args.relation === \"supports\") {\n if (!currentSupporting.includes(args.insightId)) {\n await ctx.db.patch(args.beliefId, {\n supportingInsightIds: [...currentSupporting, args.insightId],\n contradictingInsightIds: currentContradicting.filter(\n (id: Id<\"epistemicNodes\">) => id !== args.insightId\n ),\n });\n }\n } else if (!currentContradicting.includes(args.insightId)) {\n await ctx.db.patch(args.beliefId, {\n contradictingInsightIds: [...currentContradicting, args.insightId],\n supportingInsightIds: currentSupporting.filter(\n (id: Id<\"epistemicNodes\">) => id !== args.insightId\n ),\n });\n }\n\n try {\n const beliefSpineNode = await ctx.db.get(args.beliefId);\n const evidenceSpineNode = await ctx.db.get(args.insightId);\n\n if (\n beliefSpineNode &&\n beliefSpineNode.nodeType === \"belief\" &&\n evidenceSpineNode &&\n evidenceSpineNode.nodeType === \"evidence\"\n ) {\n const existingEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q\n .eq(\"fromNodeId\", evidenceSpineNode._id)\n .eq(\"toNodeId\", beliefSpineNode._id)\n )\n .collect();\n\n for (const edge of existingEdges) {\n if (edge.edgeType === \"informs\") {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n }\n }\n\n const weight =\n args.relation === \"supports\"\n ? (args.confidence ?? 0.7)\n : -(args.confidence ?? 0.7);\n const globalId = `edge-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;\n\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId,\n fromGlobalId: evidenceSpineNode.globalId,\n toGlobalId: beliefSpineNode.globalId,\n edgeType: \"informs\",\n weight,\n confidence: args.confidence,\n context: args.rationale || `Linked as ${args.relation}`,\n projectId: args.beliefNode.projectId\n ? String(args.beliefNode.projectId)\n : undefined,\n createdBy: args.createdBy,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n }\n } catch (e) {\n console.error(\"[EpistemicSpine] Failed to create informs edge:\", e);\n }\n\n if (args.beliefNode.projectId) {\n await ctx.scheduler.runAfter(\n 0,\n \"verificationActions:deepVerifyEvidence\" as any,\n {\n insightId: args.insightId,\n targetType: \"belief\",\n targetId: args.beliefId,\n projectId: args.beliefNode.projectId,\n userId: args.createdBy,\n }\n );\n }\n}\n\nasync function removeOperationalLinkEffects(\n ctx: any,\n args: {\n beliefId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n relation: \"supports\" | \"contradicts\";\n }\n): Promise<void> {\n const belief = await ctx.db.get(args.beliefId);\n if (belief) {\n const currentSupporting = belief.supportingInsightIds ?? [];\n const currentContradicting = belief.contradictingInsightIds ?? [];\n\n if (args.relation === \"supports\") {\n await ctx.db.patch(args.beliefId, {\n supportingInsightIds: currentSupporting.filter(\n (id: Id<\"epistemicNodes\">) => id !== args.insightId\n ),\n });\n } else {\n await ctx.db.patch(args.beliefId, {\n contradictingInsightIds: currentContradicting.filter(\n (id: Id<\"epistemicNodes\">) => id !== args.insightId\n ),\n });\n }\n }\n\n try {\n const beliefSpineNode = await ctx.db.get(args.beliefId);\n const evidenceSpineNode = await ctx.db.get(args.insightId);\n\n if (\n beliefSpineNode &&\n beliefSpineNode.nodeType === \"belief\" &&\n evidenceSpineNode &&\n evidenceSpineNode.nodeType === \"evidence\"\n ) {\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q\n .eq(\"fromNodeId\", evidenceSpineNode._id)\n .eq(\"toNodeId\", beliefSpineNode._id)\n )\n .collect();\n\n for (const edge of edges) {\n if (edge.edgeType === \"informs\") {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n }\n }\n }\n } catch (e) {\n console.error(\"[EpistemicSpine] Failed to remove informs edge:\", e);\n }\n}\n\n/**\n * Belief Evidence Links Management (LucernCoreZero)\n *\n * Normalized edge table connecting beliefs to evidence (insights).\n * This is the core of Lucern's reasoning structure.\n *\n * Relations:\n * - \"supports\": Evidence increases confidence in belief\n * - \"contradicts\": Evidence decreases confidence in belief\n */\n\n// ===== MUTATIONS =====\n\n/**\n * Create a link between a belief and evidence\n */\nexport const create = mutation({\n args: {\n beliefId: beliefIdUnion,\n insightId: insightIdUnion,\n relation: v.union(v.literal(\"supports\"), v.literal(\"contradicts\")),\n confidence: v.optional(v.number()),\n rationale: v.optional(v.string()),\n status: v.optional(suggestionStatusValidator),\n matcherMetadata: v.optional(matcherMetadataValidator),\n createdBy: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // IDs are already epistemicNodes IDs (backfill complete)\n const resolvedBeliefId = args.beliefId as Id<\"epistemicNodes\">;\n const resolvedInsightId = args.insightId as Id<\"epistemicNodes\">;\n\n // Get the belief node to check project access\n const beliefNode = await ctx.db.get(resolvedBeliefId);\n if (!beliefNode) {\n throw new Error(\"Belief node not found\");\n }\n\n // Get the insight node\n const insightNode = await ctx.db.get(resolvedInsightId);\n if (!insightNode) {\n throw new Error(\"Evidence node not found\");\n }\n\n // Verify project access (only if belief is project-scoped)\n if ((beliefNode as any).projectId) {\n const hasAccess = await checkProjectAccess(\n ctx,\n (beliefNode as any).projectId,\n args.createdBy\n );\n if (!hasAccess) {\n throw new Error(\"No permission to link evidence to this belief\");\n }\n }\n // System-wide beliefs (no projectId) are accessible by all users\n\n // Check for existing link (avoid duplicates)\n const existingLinks = await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", args.beliefId))\n .collect();\n\n const duplicate = existingLinks.find(\n (link) => link.insightId === args.insightId\n );\n\n if (duplicate) {\n const nextStatus = mergeLinkSuggestionStatus(\n duplicate.status as LinkSuggestionStatus | undefined,\n args.status\n );\n await ctx.db.patch(duplicate._id, {\n relation: args.relation,\n confidence: args.confidence,\n rationale: args.rationale,\n status: nextStatus,\n });\n if (\n isOperationalLinkStatus(nextStatus) &&\n !isOperationalLinkStatus(\n duplicate.status as LinkSuggestionStatus | undefined\n )\n ) {\n await applyOperationalLinkEffects(ctx, {\n beliefNode,\n beliefId: resolvedBeliefId,\n insightId: resolvedInsightId,\n relation: args.relation,\n confidence: args.confidence,\n rationale: args.rationale,\n createdBy: args.createdBy,\n });\n }\n await recordMatcherDecision(ctx, {\n beliefNode,\n beliefId: resolvedBeliefId,\n insightId: resolvedInsightId,\n linkId: duplicate._id,\n linkStatus: nextStatus,\n matcherMetadata: args.matcherMetadata as MatcherMetadata | undefined,\n });\n await markProjectGraphDirty(ctx, (beliefNode as any).projectId);\n return duplicate._id;\n }\n\n // Validate confidence if provided\n if (\n args.confidence !== undefined &&\n (args.confidence < 0 || args.confidence > 1)\n ) {\n throw new Error(\"Confidence must be between 0 and 1\");\n }\n\n const now = Date.now();\n const linkId = await ctx.db.insert(\"beliefEvidenceLinks\", {\n beliefId: args.beliefId,\n insightId: args.insightId,\n relation: args.relation,\n confidence: args.confidence,\n rationale: args.rationale,\n status: args.status,\n createdBy: args.createdBy,\n createdAt: now,\n });\n\n await recordMatcherDecision(ctx, {\n beliefNode,\n beliefId: resolvedBeliefId,\n insightId: resolvedInsightId,\n linkId,\n linkStatus: args.status,\n matcherMetadata: args.matcherMetadata as MatcherMetadata | undefined,\n });\n\n if (isOperationalLinkStatus(args.status)) {\n await applyOperationalLinkEffects(ctx, {\n beliefNode,\n beliefId: resolvedBeliefId,\n insightId: resolvedInsightId,\n relation: args.relation,\n confidence: args.confidence,\n rationale: args.rationale,\n createdBy: args.createdBy,\n });\n }\n\n await markProjectGraphDirty(ctx, (beliefNode as any).projectId);\n\n return linkId;\n },\n});\n\n/**\n * Remove a belief-evidence link\n */\nexport const remove = mutation({\n args: {\n linkId: v.id(\"beliefEvidenceLinks\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const link = await ctx.db.get(args.linkId);\n if (!link) {\n throw new Error(\"Link not found\");\n }\n\n // Only creator can remove\n if (link.createdBy !== args.userId) {\n throw new Error(\"Only the creator can remove this link\");\n }\n\n const belief = await ctx.db.get(link.beliefId);\n if (\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n ) {\n await removeOperationalLinkEffects(ctx, {\n beliefId: link.beliefId,\n insightId: link.insightId,\n relation: link.relation,\n });\n }\n\n await ctx.db.delete(args.linkId);\n await markProjectGraphDirty(ctx, (belief as any)?.projectId);\n },\n});\n\n/**\n * Update link confidence or rationale\n */\nexport const update = mutation({\n args: {\n linkId: v.id(\"beliefEvidenceLinks\"),\n confidence: v.optional(v.number()),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const link = await ctx.db.get(args.linkId);\n if (!link) {\n throw new Error(\"Link not found\");\n }\n\n // Verify access (link creator or project access)\n const belief = await ctx.db.get(link.beliefId);\n if (!belief) {\n throw new Error(\"Belief not found\");\n }\n\n // Verify access (link creator always has access, or project access for project-scoped beliefs)\n let hasAccess = link.createdBy === args.userId;\n\n if (!hasAccess && belief.projectId) {\n hasAccess = await checkProjectAccess(ctx, belief.projectId, args.userId);\n }\n\n // System-wide beliefs (no projectId) - only link creator can modify\n if (!hasAccess) {\n throw new Error(\"No permission to update this link\");\n }\n\n // Validate confidence if provided\n if (\n args.confidence !== undefined &&\n (args.confidence < 0 || args.confidence > 1)\n ) {\n throw new Error(\"Confidence must be between 0 and 1\");\n }\n\n const updates: Record<string, unknown> = {};\n if (args.confidence !== undefined) {\n updates.confidence = args.confidence;\n }\n if (args.rationale !== undefined) {\n updates.rationale = args.rationale;\n }\n\n if (Object.keys(updates).length > 0) {\n await ctx.db.patch(args.linkId, updates);\n await markProjectGraphDirty(ctx, (belief as any).projectId);\n }\n },\n});\n\nexport const reviewSuggestion = mutation({\n args: {\n linkId: v.id(\"beliefEvidenceLinks\"),\n status: v.union(v.literal(\"approved\"), v.literal(\"dismissed\")),\n userId: v.string(),\n reason: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const link = await ctx.db.get(args.linkId);\n if (!link) {\n throw new Error(\"Link not found\");\n }\n\n const belief = await ctx.db.get(link.beliefId);\n if (!belief) {\n throw new Error(\"Belief not found\");\n }\n\n let hasAccess = link.createdBy === args.userId;\n if (!hasAccess && belief.projectId) {\n hasAccess = await checkProjectAccess(ctx, belief.projectId, args.userId);\n }\n if (!hasAccess) {\n throw new Error(\"No permission to review this link\");\n }\n\n const previousStatus = link.status as LinkSuggestionStatus | undefined;\n const nextStatus = resolveReviewedLinkStatus(args.status);\n await ctx.db.patch(args.linkId, { status: nextStatus });\n\n if (nextStatus === \"approved\" && !isOperationalLinkStatus(previousStatus)) {\n await applyOperationalLinkEffects(ctx, {\n beliefNode: belief,\n beliefId: link.beliefId,\n insightId: link.insightId,\n relation: link.relation,\n confidence: link.confidence,\n rationale: link.rationale,\n createdBy: args.userId,\n });\n }\n if (nextStatus === \"dismissed\" && isOperationalLinkStatus(previousStatus)) {\n await removeOperationalLinkEffects(ctx, {\n beliefId: link.beliefId,\n insightId: link.insightId,\n relation: link.relation,\n });\n }\n\n await ctx.runMutation(\"matcherFeedback:recordDecision\" as any, {\n projectId: belief.projectId,\n topicId: belief.topicId,\n sourceEntityId: String(link.insightId),\n targetEntityId: String(link.beliefId),\n suggestionTable: \"beliefEvidenceLinks\",\n suggestionId: args.linkId,\n reviewStatus: deriveMatcherReviewStatus({ linkStatus: nextStatus }),\n reviewedBy: args.userId,\n decisionReason: args.reason,\n outcomeMetadata: args.reason ? { reason: args.reason } : undefined,\n });\n\n await markProjectGraphDirty(ctx, belief.projectId);\n return { success: true, status: nextStatus };\n },\n});\n\n// ===== QUERIES =====\n\n/**\n * Get all links for a belief\n */\nexport const getByBelief = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const links = await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", args.beliefId))\n .collect();\n\n return links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n },\n});\n\nexport const getPendingSuggestions = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const links = await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", args.beliefId))\n .collect();\n\n return links.filter((link) => link.status === \"suggested\");\n },\n});\n\n/**\n * Get supporting evidence links for a belief\n */\nexport const getSupportingLinks = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const links = await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_relation\", (q) =>\n q.eq(\"beliefId\", args.beliefId).eq(\"relation\", \"supports\")\n )\n .collect();\n\n return links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n },\n});\n\n/**\n * Get contradicting evidence links for a belief\n */\nexport const getContradictingLinks = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const links = await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_relation\", (q) =>\n q.eq(\"beliefId\", args.beliefId).eq(\"relation\", \"contradicts\")\n )\n .collect();\n\n return links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n },\n});\n\n/**\n * Get all beliefs linked to a specific insight\n */\nexport const getByInsight = query({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const links = await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_insightId\", (q) => q.eq(\"insightId\", args.insightId))\n .collect();\n\n return links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n },\n});\n\n/**\n * Get evidence counts for a belief (for badges)\n */\nexport const getCounts = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const links = await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", args.beliefId))\n .collect();\n\n const activeLinks = links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n const supporting = activeLinks.filter(\n (l) => l.relation === \"supports\"\n ).length;\n const contradicting = activeLinks.filter(\n (l) => l.relation === \"contradicts\"\n ).length;\n\n return {\n supporting,\n contradicting,\n total: activeLinks.length,\n netSupport: supporting - contradicting,\n };\n },\n});\n\n/**\n * Get full evidence details for a belief (with insight data)\n */\nexport const getEvidenceWithDetails = query({\n args: {\n beliefId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // Verify belief exists\n const belief = await ctx.db.get(args.beliefId);\n if (!belief) {\n return null;\n }\n\n // Verify project access (only for project-scoped beliefs)\n if (belief.projectId) {\n const hasAccess = await checkProjectAccess(\n ctx,\n belief.projectId,\n args.userId\n );\n if (!hasAccess) {\n return null;\n }\n }\n // System-wide beliefs are accessible to all users\n\n // Get all links\n const links = await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", args.beliefId))\n .collect();\n\n // Fetch insight details for each link\n const linksWithDetails = await Promise.all(\n links\n .filter((link) =>\n isOperationalLinkStatus(\n link.status as LinkSuggestionStatus | undefined\n )\n )\n .map(async (link) => {\n const insight = await ctx.db.get(link.insightId);\n return {\n ...link,\n insight,\n };\n })\n );\n\n // Separate supporting and contradicting\n const supporting = linksWithDetails.filter(\n (l) => l.relation === \"supports\"\n );\n const contradicting = linksWithDetails.filter(\n (l) => l.relation === \"contradicts\"\n );\n\n return {\n supporting,\n contradicting,\n counts: {\n supporting: supporting.length,\n contradicting: contradicting.length,\n netSupport: supporting.length - contradicting.length,\n },\n };\n },\n});\n\n/**\n * Get all belief-evidence links for a project (batch fetch)\n * Returns links grouped by insightId for efficient UI rendering\n */\nexport const getByProject = query({\n args: {\n ...scopeArgs,\n userId: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveScopeSoft(ctx, args);\n const projectId = scope.projectId;\n if (!projectId) {\n return [] as any; // graceful: scope resolver guarantees projectId\n }\n\n // Verify project access\n const hasAccess = await checkProjectAccess(ctx, projectId, args.userId);\n if (!hasAccess) {\n return { links: [], beliefDetails: {} };\n }\n const pageSize = Math.max(1, Math.min(Math.floor(args.limit ?? 300), 1000));\n\n // Get all beliefs from epistemic spine\n const beliefs = await ctx.runQuery(\n internal.epistemicBeliefs.internalGetByProject,\n {\n projectId,\n limit: pageSize,\n }\n );\n\n const beliefIds = beliefs.map((b) => b._id);\n\n // Get all links for these beliefs\n const allLinks = await Promise.all(\n beliefIds.map(async (beliefId) => {\n const links = await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", beliefId))\n .take(200);\n return links;\n })\n );\n\n const flattenedLinks = allLinks.flat().slice(0, pageSize * 5);\n\n // Create a map of belief details for easy lookup\n const beliefDetails: Record<\n string,\n { _id: string; belief: string; status: string; confidence: string }\n > = {};\n for (const belief of beliefs) {\n beliefDetails[belief._id] = {\n _id: belief._id,\n belief: belief.belief,\n status: belief.status,\n confidence: belief.confidence,\n };\n }\n\n return {\n links: flattenedLinks,\n beliefDetails,\n };\n },\n});\n\n/**\n * Get belief links with full belief details for a specific insight\n * Used in insight detail view\n */\nexport const getLinkedBeliefsForInsight = query({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const links = await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_insightId\", (q) => q.eq(\"insightId\", args.insightId))\n .collect();\n\n // Fetch belief details for each link\n const linkedBeliefs = await Promise.all(\n links.map(async (link) => {\n const belief = await ctx.db.get(link.beliefId);\n return {\n linkId: link._id,\n beliefId: link.beliefId,\n relation: link.relation,\n rationale: link.rationale,\n belief: belief\n ? {\n _id: belief._id,\n belief: (belief as any).belief ?? (belief as any).canonicalText,\n status: belief.status,\n confidence: (belief as any).confidence,\n }\n : null,\n };\n })\n );\n\n return linkedBeliefs.filter((l) => l.belief !== null);\n },\n});\n","/** Matcher feedback helper types shared by graph-primitive review flows. */\nexport type LinkSuggestionStatus = \"suggested\" | \"approved\" | \"dismissed\";\n\nexport type MatcherReviewStatus =\n | \"pending\"\n | \"accepted\"\n | \"rejected\"\n | \"auto_accepted\"\n | \"superseded\";\n\ntype MatcherFeedbackSummaryRow = {\n matcherKey?: string | null;\n reviewStatus: MatcherReviewStatus;\n rewardScore?: number | null;\n surface?: string | null;\n};\n\nexport function isOperationalLinkStatus(\n status?: LinkSuggestionStatus | null\n): boolean {\n return status !== \"suggested\" && status !== \"dismissed\";\n}\n\nexport function mergeLinkSuggestionStatus(\n existing?: LinkSuggestionStatus | null,\n requested?: LinkSuggestionStatus | null\n): LinkSuggestionStatus | undefined {\n if (requested === undefined || requested === null) {\n return existing ?? undefined;\n }\n\n if (\n existing &&\n isOperationalLinkStatus(existing) &&\n !isOperationalLinkStatus(requested)\n ) {\n return existing;\n }\n\n return requested;\n}\n\nexport function resolveReviewedLinkStatus(\n requested: \"approved\" | \"dismissed\"\n): LinkSuggestionStatus {\n return requested;\n}\n\nexport function deriveMatcherReviewStatus(input: {\n explicitReviewStatus?: MatcherReviewStatus | null;\n linkStatus?: LinkSuggestionStatus | null;\n autoAccepted?: boolean;\n}): MatcherReviewStatus {\n if (input.explicitReviewStatus) {\n return input.explicitReviewStatus;\n }\n\n if (input.autoAccepted) {\n return \"auto_accepted\";\n }\n\n if (input.linkStatus === \"suggested\") {\n return \"pending\";\n }\n\n if (input.linkStatus === \"dismissed\") {\n return \"rejected\";\n }\n\n return \"accepted\";\n}\n\nexport function deriveMatcherRewardScore(\n reviewStatus: MatcherReviewStatus\n): number {\n switch (reviewStatus) {\n case \"accepted\":\n case \"auto_accepted\":\n return 1;\n case \"rejected\":\n return -1;\n default:\n return 0;\n }\n}\n\nexport function summarizeMatcherFeedback(rows: MatcherFeedbackSummaryRow[]) {\n const totals = {\n total: rows.length,\n pending: 0,\n accepted: 0,\n autoAccepted: 0,\n rejected: 0,\n superseded: 0,\n };\n\n const surfaces = new Set<string>();\n const matcherKeys = new Set<string>();\n let rewardSum = 0;\n\n for (const row of rows) {\n if (row.surface) {\n surfaces.add(row.surface);\n }\n if (row.matcherKey) {\n matcherKeys.add(row.matcherKey);\n }\n\n switch (row.reviewStatus) {\n case \"pending\":\n totals.pending += 1;\n break;\n case \"accepted\":\n totals.accepted += 1;\n break;\n case \"auto_accepted\":\n totals.autoAccepted += 1;\n break;\n case \"rejected\":\n totals.rejected += 1;\n break;\n case \"superseded\":\n totals.superseded += 1;\n break;\n default:\n break;\n }\n\n rewardSum += row.rewardScore ?? deriveMatcherRewardScore(row.reviewStatus);\n }\n\n const decided = totals.accepted + totals.autoAccepted + totals.rejected;\n const positive = totals.accepted + totals.autoAccepted;\n\n return {\n ...totals,\n decided,\n acceptanceRate: decided > 0 ? positive / decided : 0,\n averageReward: rows.length > 0 ? rewardSum / rows.length : 0,\n uniqueSurfaces: surfaces.size,\n uniqueMatchers: matcherKeys.size,\n };\n}\n","import { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\n\nexport const scopeArgs = optionalScopeArgs;\n\nexport type ResolvedScope = Awaited<ReturnType<typeof resolveTopicProjectScope>>;\nexport type SoftResolvedScope = {\n topicId?: string;\n projectId?: string;\n tenantId?: string;\n workspaceId?: string;\n source?: ResolvedScope[\"source\"];\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\nexport async function resolveScope(\n ctx: any,\n args: { topicId?: string | null; projectId?: string | null }\n): Promise<ResolvedScope | null> {\n const topicId = normalizeScopeValue(args.topicId);\n const projectId = normalizeScopeValue(args.projectId);\n if (!topicId && !projectId) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n topicId,\n projectId,\n });\n } catch {\n return null;\n }\n}\n\nexport async function resolveScopeSoft(\n ctx: any,\n args: { topicId?: string | null; projectId?: string | null }\n): Promise<SoftResolvedScope> {\n const resolved = await resolveScope(ctx, args);\n if (resolved) {\n const topicId = normalizeScopeValue(resolved.topicId);\n return {\n ...(topicId ? { topicId } : {}),\n ...(resolved.projectId ? { projectId: resolved.projectId } : {}),\n ...(resolved.tenantId ? { tenantId: resolved.tenantId } : {}),\n ...(resolved.workspaceId ? { workspaceId: resolved.workspaceId } : {}),\n ...(resolved.source ? { source: resolved.source } : {}),\n };\n }\n\n const topicId = normalizeScopeValue(args.topicId);\n const projectId = normalizeScopeValue(args.projectId);\n return {\n ...(topicId ? { topicId } : {}),\n ...(projectId ? { projectId } : {}),\n };\n}\n","/**\n * Belief lifecycle helpers shared across Convex modules.\n *\n * Canonical lifecycle:\n * assumption -> hypothesis -> belief -> fact\n */\n\nexport type BeliefLifecycleStatus =\n | \"assumption\"\n | \"hypothesis\"\n | \"belief\"\n | \"fact\";\n\ntype PredictionOutcome =\n | \"pending\"\n | \"confirmed\"\n | \"disconfirmed\"\n | \"partial\"\n | \"expired\";\n\nconst BELIEF_STATUS_VALUES: readonly BeliefLifecycleStatus[] = [\n \"assumption\",\n \"hypothesis\",\n \"belief\",\n \"fact\",\n];\n\nconst RESOLVED_PREDICTION_OUTCOMES: readonly PredictionOutcome[] = [\n \"confirmed\",\n \"disconfirmed\",\n \"partial\",\n \"expired\",\n];\n\nexport function isBeliefLifecycleStatus(\n value: unknown\n): value is BeliefLifecycleStatus {\n return (\n typeof value === \"string\" &&\n BELIEF_STATUS_VALUES.includes(value as BeliefLifecycleStatus)\n );\n}\n\nfunction normalizeBeliefConfidence(confidence: unknown): number | null {\n if (typeof confidence !== \"number\" || !Number.isFinite(confidence)) {\n return null;\n }\n if (confidence >= 0 && confidence <= 1) {\n return confidence;\n }\n // Backward compatibility with historical percentage-scale confidence (0-100).\n if (confidence > 1 && confidence <= 100) {\n return confidence / 100;\n }\n return null;\n}\n\nexport function isResolvedByConfidence(confidence: unknown): boolean {\n const normalized = normalizeBeliefConfidence(confidence);\n if (normalized === null) {\n return false;\n }\n return normalized <= 0 || normalized >= 1;\n}\n\nexport function hasResolvedPredictionOutcome(predictionMeta: unknown): boolean {\n if (!predictionMeta || typeof predictionMeta !== \"object\") {\n return false;\n }\n const outcome = (predictionMeta as { outcome?: unknown }).outcome;\n return (\n typeof outcome === \"string\" &&\n RESOLVED_PREDICTION_OUTCOMES.includes(outcome as PredictionOutcome)\n );\n}\n\nfunction getPredictionMetaFromMetadata(\n metadata: Record<string, unknown> | undefined\n): unknown {\n return metadata?.predictionMeta;\n}\n\nexport function shouldTreatBeliefAsFact(opts: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): boolean {\n if (isResolvedByConfidence(opts.confidence)) {\n return true;\n }\n if (hasResolvedPredictionOutcome(opts.predictionMeta)) {\n return true;\n }\n if (\n hasResolvedPredictionOutcome(getPredictionMetaFromMetadata(opts.metadata))\n ) {\n return true;\n }\n return false;\n}\n\nexport function resolveBeliefLifecycleStatus(opts: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): BeliefLifecycleStatus {\n if (shouldTreatBeliefAsFact(opts)) {\n return \"fact\";\n }\n\n const direct = opts.beliefStatus;\n if (isBeliefLifecycleStatus(direct)) {\n // If the belief has been scored (has numeric credence) but stored status\n // is still pre-validation, promote to \"belief\". Scoring = merge to main.\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (normalized !== null && isPreValidationBeliefStatus(direct)) {\n return \"belief\";\n }\n return direct;\n }\n\n const metaStatus = opts.metadata?.beliefStatus;\n if (isBeliefLifecycleStatus(metaStatus)) {\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (normalized !== null && isPreValidationBeliefStatus(metaStatus)) {\n return \"belief\";\n }\n return metaStatus;\n }\n\n return \"assumption\";\n}\n\nexport function isPreValidationBeliefStatus(\n status: BeliefLifecycleStatus\n): boolean {\n return status === \"assumption\" || status === \"hypothesis\";\n}\n\nexport function isPropagationEligibleBeliefStatus(\n status: BeliefLifecycleStatus\n): boolean {\n return status === \"belief\" || status === \"fact\";\n}\n\nexport function promoteBeliefStatusAfterScoring(\n status: BeliefLifecycleStatus,\n opts?: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n }\n): BeliefLifecycleStatus {\n if (shouldTreatBeliefAsFact({ ...opts })) {\n return \"fact\";\n }\n if (isPreValidationBeliefStatus(status)) {\n return \"belief\";\n }\n return status === \"fact\" ? \"fact\" : \"belief\";\n}\n","/**\n * Contradiction Detection & Surfacing (Phase 8.3)\n *\n * Contradictions are GOLD. When evidence conflicts for a belief,\n * that's a signal to dig deeper. This module detects, tracks, and\n * helps resolve contradictions in the belief system.\n */\n\nimport { v } from \"convex/values\";\nimport { internal } from \"./convex\";\nimport type { Doc, Id } from \"./convex\";\nimport { mutation, query } from \"./convex\";\nimport { checkProjectAccess, requireProjectAccess } from \"@lucern/access-control/access\";\nimport { resolveScopeSoft, scopeArgs } from \"./scopeResolverCompat\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\n\n// IDs are now always epistemicNodes IDs (backfill complete)\nconst _beliefIdUnion = v.id(\"epistemicNodes\");\nconst _insightIdUnion = v.id(\"epistemicNodes\");\nconst DEFAULT_CONTRADICTION_SOURCE = \"evidence_links\" as const;\nconst TUPLE_SPACE_CONTRADICTION_SOURCE = \"tuple_space\" as const;\n\nfunction contradictionSourceOf(\n contradiction: { source?: unknown } | null | undefined\n): \"evidence_links\" | \"tuple_space\" {\n return contradiction?.source === TUPLE_SPACE_CONTRADICTION_SOURCE\n ? TUPLE_SPACE_CONTRADICTION_SOURCE\n : DEFAULT_CONTRADICTION_SOURCE;\n}\n\n// =============================================================================\n// QUERIES\n// =============================================================================\n\n/**\n * Detect contradictions for a project\n * Finds beliefs that have both supporting AND contradicting evidence\n */\nexport const detectContradictions = query({\n args: {\n ...scopeArgs,\n includeResolved: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveScopeSoft(ctx, args);\n const projectId = scope.projectId;\n if (!projectId) {\n return [] as any; // graceful: scope resolver guarantees projectId\n }\n\n // Get all beliefs from epistemic spine\n const beliefs = await ctx.runQuery(\n internal.epistemicBeliefs.internalGetByProject,\n {\n projectId,\n }\n );\n\n // Get all belief-evidence links\n const contradictionCandidates: Array<{\n beliefId: Id<\"epistemicNodes\">;\n belief: Doc<\"epistemicNodes\">;\n supportingInsights: Doc<\"epistemicNodes\">[];\n contradictingInsights: Doc<\"epistemicNodes\">[];\n existingContradiction?: Doc<\"contradictions\">;\n }> = [];\n\n for (const belief of beliefs) {\n // Get evidence links for this belief\n const evidenceLinks = await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", belief._id))\n .collect();\n\n const supportingLinks = evidenceLinks.filter(\n (l) => l.relation === \"supports\"\n );\n const contradictingLinks = evidenceLinks.filter(\n (l) => l.relation === \"contradicts\"\n );\n\n // Only flag as contradiction if BOTH supporting AND contradicting evidence exists\n if (supportingLinks.length > 0 && contradictingLinks.length > 0) {\n // Fetch the actual insights\n const supportingInsights = await Promise.all(\n supportingLinks.map((l) => ctx.db.get(l.insightId))\n );\n const contradictingInsights = await Promise.all(\n contradictingLinks.map((l) => ctx.db.get(l.insightId))\n );\n\n // Check if there's already a tracked contradiction\n const existingContradictions = await ctx.db\n .query(\"contradictions\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", belief._id))\n .collect();\n const existingContradiction = existingContradictions.find(\n (candidate) =>\n contradictionSourceOf(candidate) === DEFAULT_CONTRADICTION_SOURCE\n );\n\n // Skip resolved contradictions unless explicitly requested\n if (\n existingContradiction &&\n !args.includeResolved &&\n existingContradiction.status !== \"unresolved\" &&\n existingContradiction.status !== \"investigating\"\n ) {\n continue;\n }\n\n contradictionCandidates.push({\n beliefId: belief._id,\n belief,\n supportingInsights: supportingInsights.filter(\n Boolean\n ) as Doc<\"epistemicNodes\">[],\n contradictingInsights: contradictingInsights.filter(\n Boolean\n ) as Doc<\"epistemicNodes\">[],\n existingContradiction: existingContradiction ?? undefined,\n });\n }\n }\n\n return contradictionCandidates;\n },\n});\n\n/**\n * Get all tracked contradictions for a project\n */\nexport const getByProject = query({\n args: {\n ...scopeArgs,\n userId: v.string(),\n status: v.optional(\n v.union(\n v.literal(\"unresolved\"),\n v.literal(\"investigating\"),\n v.literal(\"resolved_support\"),\n v.literal(\"resolved_contra\"),\n v.literal(\"belief_forked\")\n )\n ),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveScopeSoft(ctx, args);\n const projectId = scope.projectId;\n if (!projectId) {\n return [] as any; // graceful: scope resolver guarantees projectId\n }\n\n const hasAccess = await checkProjectAccess(ctx, projectId, args.userId);\n if (!hasAccess) {\n return [];\n }\n const pageSize = Math.max(1, Math.min(Math.floor(args.limit ?? 200), 1000));\n const scanLimit = Math.min(pageSize * 3, 1000);\n\n let contradictions;\n\n if (args.status) {\n const status = args.status; // Capture in local variable for type narrowing\n contradictions = await ctx.db\n .query(\"contradictions\")\n .withIndex(\"by_topic_status\", (q) =>\n q.eq(\"topicId\", String(scope.topicId ?? projectId)).eq(\"status\", status)\n )\n .order(\"desc\")\n .take(scanLimit);\n } else {\n contradictions = await ctx.db\n .query(\"contradictions\")\n .withIndex(\"by_topicId\", (q) => q.eq(\"topicId\", String(scope.topicId ?? projectId)))\n .order(\"desc\")\n .take(scanLimit);\n }\n\n // Enrich with belief and insight data\n const enriched = await Promise.all(\n contradictions.slice(0, pageSize).map(async (c) => {\n const belief = await ctx.db.get(c.beliefId);\n const supportingInsights = await Promise.all(\n c.supportingInsightIds.map((id) => ctx.db.get(id))\n );\n const contradictingInsights = await Promise.all(\n c.contradictingInsightIds.map((id) => ctx.db.get(id))\n );\n\n return {\n ...c,\n belief,\n supportingInsights: supportingInsights.filter(Boolean),\n contradictingInsights: contradictingInsights.filter(Boolean),\n };\n })\n );\n\n return enriched;\n },\n});\n\n/**\n * Get unresolved contradiction count for dashboard\n */\nexport const getUnresolvedCount = query({\n args: {\n ...scopeArgs,\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveScopeSoft(ctx, args);\n const projectId = scope.projectId;\n if (!projectId) {\n return [] as any; // graceful: scope resolver guarantees projectId\n }\n\n const contradictions = await ctx.db\n .query(\"contradictions\")\n .withIndex(\"by_topic_status\", (q) =>\n q.eq(\"topicId\", String(scope.topicId ?? projectId)).eq(\"status\", \"unresolved\")\n )\n .collect();\n\n const critical = contradictions.filter(\n (c) => c.severity === \"critical\"\n ).length;\n const significant = contradictions.filter(\n (c) => c.severity === \"significant\"\n ).length;\n const minor = contradictions.filter((c) => c.severity === \"minor\").length;\n\n return {\n total: contradictions.length,\n critical,\n significant,\n minor,\n };\n },\n});\n\n/**\n * Get a single contradiction with full context\n */\nexport const getById = query({\n args: { contradictionId: v.id(\"contradictions\") },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const contradiction = await ctx.db.get(args.contradictionId);\n if (!contradiction) {\n return null;\n }\n\n const belief = await ctx.db.get(contradiction.beliefId);\n const supportingInsights = await Promise.all(\n contradiction.supportingInsightIds.map((id) => ctx.db.get(id))\n );\n const contradictingInsights = await Promise.all(\n contradiction.contradictingInsightIds.map((id) => ctx.db.get(id))\n );\n\n return {\n ...contradiction,\n belief,\n supportingInsights: supportingInsights.filter(Boolean),\n contradictingInsights: contradictingInsights.filter(Boolean),\n resolutionSprintId: (contradiction as any).resolutionSprintId ?? (contradiction as any).resolutionSprintId ?? null,\n };\n },\n});\n\n// =============================================================================\n// MUTATIONS\n// =============================================================================\n\n/**\n * Track a new contradiction\n */\nexport const create = mutation({\n args: {\n ...scopeArgs,\n beliefId: v.id(\"epistemicNodes\"),\n beliefBId: v.optional(v.id(\"epistemicNodes\")),\n supportingInsightIds: v.array(v.id(\"epistemicNodes\")),\n contradictingInsightIds: v.array(v.id(\"epistemicNodes\")),\n severity: v.union(\n v.literal(\"critical\"),\n v.literal(\"significant\"),\n v.literal(\"minor\")\n ),\n source: v.optional(\n v.union(\n v.literal(\"evidence_links\"),\n v.literal(\"tuple_space\")\n )\n ),\n description: v.optional(v.string()),\n detectionMethod: v.optional(\n v.union(\n v.literal(\"semantic\"),\n v.literal(\"keyword\"),\n v.literal(\"manual\"),\n v.literal(\"agent\")\n )\n ),\n aiAnalysis: v.optional(\n v.object({\n summary: v.string(),\n likelyExplanation: v.string(),\n suggestedResolution: v.string(),\n confidenceInAnalysis: v.number(),\n analyzedAt: v.number(),\n })\n ),\n createdBy: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveScopeSoft(ctx, args);\n const projectId = scope.projectId;\n if (!projectId) {\n return [] as any; // graceful: scope resolver guarantees projectId\n }\n\n const now = Date.now();\n const source = args.source ?? DEFAULT_CONTRADICTION_SOURCE;\n\n // Evidence-link contradictions preserve the current \"merge evidence into the\n // active record\" behavior. Tuple-space contradictions are append-only and\n // should create a fresh record on each threshold crossing.\n const existingRows = await ctx.db\n .query(\"contradictions\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", args.beliefId))\n .collect();\n const existing = existingRows.find(\n (row) =>\n contradictionSourceOf(row) === source &&\n (args.beliefBId ? String((row as any).beliefBId ?? \"\") === String(args.beliefBId) : true)\n );\n\n if (existing && source !== TUPLE_SPACE_CONTRADICTION_SOURCE) {\n // Update existing contradiction with new evidence\n await ctx.db.patch(existing._id, {\n supportingInsightIds: [\n ...new Set([\n ...existing.supportingInsightIds,\n ...args.supportingInsightIds,\n ]),\n ],\n contradictingInsightIds: [\n ...new Set([\n ...existing.contradictingInsightIds,\n ...args.contradictingInsightIds,\n ]),\n ],\n severity: args.severity,\n description: args.description ?? (existing as any).description,\n detectionMethod: args.detectionMethod ?? (existing as any).detectionMethod,\n aiAnalysis: args.aiAnalysis,\n });\n return existing._id;\n }\n\n // Create new contradiction\n return await ctx.db.insert(\"contradictions\", {\n projectId,\n topicId: String(scope.topicId ?? projectId),\n beliefId: args.beliefId,\n ...(args.beliefBId ? { beliefBId: args.beliefBId } : {}),\n supportingInsightIds: args.supportingInsightIds,\n contradictingInsightIds: args.contradictingInsightIds,\n source,\n ...(args.description ? { description: args.description } : {}),\n ...(args.detectionMethod ? { detectionMethod: args.detectionMethod } : {}),\n resolutionStatus: \"unresolved\", // Lucern: required field\n status: \"unresolved\", // Legacy: kept for backward compat\n severity: args.severity,\n aiAnalysis: args.aiAnalysis,\n detectedAt: now,\n createdBy: args.createdBy,\n });\n },\n});\n\n/**\n * Update contradiction status\n *\n * INVARIANT #14 ENFORCEMENT: All state transitions logged to epistemicAudit\n */\nexport const updateStatus = mutation({\n args: {\n contradictionId: v.id(\"contradictions\"),\n status: v.union(\n v.literal(\"unresolved\"),\n v.literal(\"investigating\"),\n v.literal(\"resolved_support\"),\n v.literal(\"resolved_contra\"),\n v.literal(\"belief_forked\")\n ),\n resolutionSprintId: v.optional(v.string()),\n userId: v.optional(v.string()), // Added for audit trail\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const existing = await ctx.db.get(args.contradictionId);\n if (!existing) {\n throw new Error(\"Contradiction not found\");\n }\n\n // Access control\n if (existing.projectId && args.userId) {\n await requireProjectAccess(ctx, existing.projectId, args.userId);\n }\n\n const now = Date.now();\n const update: Record<string, unknown> = { status: args.status };\n\n if (args.resolutionSprintId) {\n update.resolutionSprintId = args.resolutionSprintId;\n }\n\n if (\n args.status.startsWith(\"resolved_\") ||\n args.status === \"belief_forked\"\n ) {\n update.resolvedAt = now;\n }\n\n await ctx.db.patch(args.contradictionId, update);\n\n // ============================================================\n // INVARIANT #14: No silent state transitions\n // Log all status changes to epistemicAudit\n // ============================================================\n if (existing.status !== args.status) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"contradiction\",\n entityId: args.contradictionId as unknown as string,\n changeType: \"status_changed\",\n changedAt: now,\n changedBy: args.userId ?? \"system\",\n isAgent: !args.userId,\n previousState: { status: existing.status },\n newState: {\n status: args.status,\n resolutionSprintId: args.resolutionSprintId,\n },\n rationale: `Contradiction status changed from ${existing.status} to ${args.status}`,\n projectId: existing.projectId,\n });\n }\n\n return { success: true };\n },\n});\n\n/**\n * Resolve a contradiction with findings\n *\n * INVARIANT #14 ENFORCEMENT: All state transitions logged to epistemicAudit\n */\nexport const resolve = mutation({\n args: {\n contradictionId: v.id(\"contradictions\"),\n verdict: v.string(),\n reasoning: v.string(),\n beliefUpdate: v.string(),\n resolvedBy: v.string(),\n newStatus: v.union(\n v.literal(\"resolved_support\"),\n v.literal(\"resolved_contra\"),\n v.literal(\"belief_forked\")\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const existing = await ctx.db.get(args.contradictionId);\n if (!existing) {\n throw new Error(\"Contradiction not found\");\n }\n\n // Access control\n if (existing.projectId) {\n await requireProjectAccess(ctx, existing.projectId, args.resolvedBy);\n }\n\n const now = Date.now();\n\n await ctx.db.patch(args.contradictionId, {\n status: args.newStatus,\n resolution: {\n verdict: args.verdict,\n reasoning: args.reasoning,\n beliefUpdate: args.beliefUpdate,\n resolvedBy: args.resolvedBy,\n },\n resolvedAt: now,\n });\n\n // ============================================================\n // INVARIANT #14: No silent state transitions\n // Log resolution to epistemicAudit with full context\n // ============================================================\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"contradiction\",\n entityId: args.contradictionId as unknown as string,\n changeType: \"resolved\",\n changedAt: now,\n changedBy: args.resolvedBy,\n isAgent: false,\n previousState: { status: existing.status },\n newState: {\n status: args.newStatus,\n verdict: args.verdict,\n beliefUpdate: args.beliefUpdate,\n },\n rationale: `Contradiction resolved: ${args.verdict}. Reasoning: ${args.reasoning}`,\n projectId: existing.projectId,\n });\n\n // Flywheel: After resolution, re-scan the affected belief neighborhood\n // Resolution may shift confidence, revealing new contradictions\n await ctx.scheduler.runAfter(\n 5000, // 5s delay\n internal.bi.contradictionSemanticDetector.scanAffectedBeliefs,\n {\n beliefId: existing.beliefId as string,\n projectId: existing.projectId,\n }\n );\n\n return { success: true };\n },\n});\n\n/**\n * Update severity assessment\n *\n * INVARIANT #14 ENFORCEMENT: All state transitions logged to epistemicAudit\n */\nexport const updateSeverity = mutation({\n args: {\n contradictionId: v.id(\"contradictions\"),\n severity: v.union(\n v.literal(\"critical\"),\n v.literal(\"significant\"),\n v.literal(\"minor\")\n ),\n userId: v.optional(v.string()), // Added for audit trail\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const existing = await ctx.db.get(args.contradictionId);\n if (!existing) {\n throw new Error(\"Contradiction not found\");\n }\n\n const now = Date.now();\n await ctx.db.patch(args.contradictionId, { severity: args.severity });\n\n // ============================================================\n // INVARIANT #14: No silent state transitions\n // Log severity changes to epistemicAudit\n // ============================================================\n if (existing.severity !== args.severity) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"contradiction\",\n entityId: args.contradictionId as unknown as string,\n changeType: \"severity_changed\",\n changedAt: now,\n changedBy: args.userId ?? \"system\",\n isAgent: !args.userId,\n previousState: { severity: existing.severity },\n newState: { severity: args.severity },\n rationale: `Contradiction severity changed from ${existing.severity} to ${args.severity}`,\n projectId: existing.projectId,\n });\n }\n\n return { success: true };\n },\n});\n\n/**\n * Add AI analysis to a contradiction\n */\nexport const addAiAnalysis = mutation({\n args: {\n contradictionId: v.id(\"contradictions\"),\n summary: v.string(),\n likelyExplanation: v.string(),\n suggestedResolution: v.string(),\n confidenceInAnalysis: v.number(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n await ctx.db.patch(args.contradictionId, {\n aiAnalysis: {\n summary: args.summary,\n likelyExplanation: args.likelyExplanation,\n suggestedResolution: args.suggestedResolution,\n confidenceInAnalysis: args.confidenceInAnalysis,\n analyzedAt: Date.now(),\n },\n });\n return { success: true };\n },\n});\n\n/**\n * Scan project and auto-create contradictions for any beliefs with conflicting evidence\n * Called by cron job or manually\n */\nexport const scanAndCreateContradictions = mutation({\n args: {\n ...scopeArgs,\n createdBy: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveScopeSoft(ctx, args);\n const projectId = scope.projectId;\n if (!projectId) {\n return [] as any; // graceful: scope resolver guarantees projectId\n }\n\n const now = Date.now();\n\n // Get all beliefs from epistemic spine\n const beliefs = await ctx.runQuery(\n internal.epistemicBeliefs.internalGetByProject,\n {\n projectId,\n }\n );\n\n let created = 0;\n let updated = 0;\n\n for (const belief of beliefs) {\n // Get evidence links for this belief\n const evidenceLinks = await ctx.db\n .query(\"beliefEvidenceLinks\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", belief._id))\n .collect();\n\n const supportingIds = evidenceLinks\n .filter((l) => l.relation === \"supports\")\n .map((l) => l.insightId);\n const contradictingIds = evidenceLinks\n .filter((l) => l.relation === \"contradicts\")\n .map((l) => l.insightId);\n\n // Only create contradiction if BOTH sides have evidence\n if (supportingIds.length > 0 && contradictingIds.length > 0) {\n // Check if contradiction already exists\n const existingRows = await ctx.db\n .query(\"contradictions\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", belief._id))\n .collect();\n const existing = existingRows.find(\n (candidate) =>\n contradictionSourceOf(candidate) === DEFAULT_CONTRADICTION_SOURCE\n );\n\n // Determine severity based on belief criticality\n let severity: \"critical\" | \"significant\" | \"minor\" = \"significant\";\n if (belief.criticality === \"blocking\") {\n severity = \"critical\";\n } else if (belief.criticality === \"supporting\") {\n severity = \"minor\";\n }\n\n if (existing) {\n // Update existing with any new evidence\n const newSupporting = supportingIds.filter(\n (id) => !existing.supportingInsightIds.includes(id)\n );\n const newContradicting = contradictingIds.filter(\n (id) => !existing.contradictingInsightIds.includes(id)\n );\n\n if (newSupporting.length > 0 || newContradicting.length > 0) {\n await ctx.db.patch(existing._id, {\n supportingInsightIds: [\n ...existing.supportingInsightIds,\n ...newSupporting,\n ],\n contradictingInsightIds: [\n ...existing.contradictingInsightIds,\n ...newContradicting,\n ],\n severity,\n });\n updated++;\n }\n } else {\n // Create new contradiction\n await ctx.db.insert(\"contradictions\", {\n projectId,\n topicId: String(scope.topicId ?? projectId),\n beliefId: belief._id,\n supportingInsightIds: supportingIds,\n contradictingInsightIds: contradictingIds,\n source: DEFAULT_CONTRADICTION_SOURCE,\n resolutionStatus: \"unresolved\", // Lucern: required field\n status: \"unresolved\", // Legacy: kept for backward compat\n severity,\n detectedAt: now,\n createdBy: args.createdBy,\n });\n created++;\n }\n }\n }\n\n return { created, updated };\n },\n});\n","import { containsPropagationSpec } from \"./contains\";\nimport { contradictsPropagationSpec } from \"./contradicts\";\nimport { dependsOnPropagationSpec } from \"./dependsOn\";\nimport { derivedFromPropagationSpec } from \"./derivedFrom\";\nimport { elaboratesPropagationSpec } from \"./elaborates\";\nimport { informsPropagationSpec } from \"./informs\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeType,\n PropagationSpecDirection,\n PropagationTraversalDirection,\n} from \"./propagationTypes\";\nimport {\n canContinueTransitively,\n canTraverseHop,\n isPropagationTraversalDirection,\n} from \"./propagationTypes\";\nimport { refutesPropagationSpec } from \"./refutes\";\nimport { supportsPropagationSpec } from \"./supports\";\nimport { testsPropagationSpec } from \"./tests\";\n\nexport type {\n EdgePropagationSpec,\n PropagationEdgeRecord,\n PropagationEdgeType,\n PropagationSpecDirection,\n PropagationTransitivity,\n PropagationTraversalDirection,\n} from \"./propagationTypes\";\nexport {\n canContinueTransitively,\n canTraverseHop,\n isPropagationTraversalDirection,\n} from \"./propagationTypes\";\n\nexport const EDGE_PROPAGATION_SPECS: readonly EdgePropagationSpec[] = [\n supportsPropagationSpec,\n informsPropagationSpec,\n dependsOnPropagationSpec,\n derivedFromPropagationSpec,\n containsPropagationSpec,\n testsPropagationSpec,\n contradictsPropagationSpec,\n refutesPropagationSpec,\n elaboratesPropagationSpec,\n] as const;\n\nconst EDGE_PROPAGATION_SPEC_MAP = new Map<\n PropagationEdgeType,\n EdgePropagationSpec\n>(EDGE_PROPAGATION_SPECS.map((spec) => [spec.edgeType, spec]));\n\nexport function getEdgePropagationSpec(\n edgeType: string\n): EdgePropagationSpec | undefined {\n return EDGE_PROPAGATION_SPEC_MAP.get(edgeType as PropagationEdgeType);\n}\n\nexport function getEdgePropagationSpecs(): readonly EdgePropagationSpec[] {\n return EDGE_PROPAGATION_SPECS;\n}\n\nexport function getTraversalDirections(\n direction: PropagationSpecDirection\n): readonly PropagationTraversalDirection[] {\n if (isPropagationTraversalDirection(direction)) {\n return [direction];\n }\n\n return [\"outgoing\", \"incoming\"];\n}\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\n\nexport const containsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"contains\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Structural containment only. Traversed for explicit semantics, but it never propagates opinions.\",\n};\n\n","import {\n applyNegativeEvidence,\n applyNegativeSupport,\n cumulativeFusion,\n project,\n trustDiscount,\n type EdgeMetadata,\n type Opinion,\n type PropagationResult,\n} from \"@lucern/confidence\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeRecord,\n} from \"./propagationTypes\";\n\nexport function readEdgeMetadata<TNodeId extends string>(\n edge: PropagationEdgeRecord<TNodeId>\n): EdgeMetadata {\n return {\n constraint: edge.constraint ?? undefined,\n normalization: edge.normalization ?? undefined,\n propagation: edge.propagation ?? undefined,\n conditionalA: edge.conditionalA ?? undefined,\n conditionalNotA: edge.conditionalNotA ?? undefined,\n };\n}\n\nexport function applyPerHopDamping(\n sourceOpinion: Opinion,\n damping: number\n): Opinion {\n if (damping >= 1) {\n return sourceOpinion;\n }\n\n return trustDiscount(sourceOpinion, Math.max(0, damping));\n}\n\nexport function annotateRationale(\n result: PropagationResult,\n spec: EdgePropagationSpec,\n hop: number\n): PropagationResult {\n return {\n ...result,\n rationale: `hop=${hop} edge=${spec.edgeType} damping=${spec.damping.toFixed(\n 2\n )} :: ${result.rationale}`,\n };\n}\n\nexport function propagatePositiveSupport(\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edgeWeight: number\n): PropagationResult {\n const discounted = trustDiscount(sourceOpinion, Math.abs(edgeWeight));\n return {\n opinion: cumulativeFusion(targetOpinion, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Supporting evidence (weight=${edgeWeight.toFixed(\n 2\n )}) from source at ${project(sourceOpinion).toFixed(2)}`,\n };\n}\n\nexport function propagatePositiveInform(\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edgeWeight: number\n): PropagationResult {\n const discounted = trustDiscount(sourceOpinion, Math.abs(edgeWeight));\n return {\n opinion: cumulativeFusion(targetOpinion, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Supporting evidence (weight=${edgeWeight.toFixed(2)})`,\n };\n}\n\nexport function propagateNegativeSupportWithMetadata(\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edgeWeight: number,\n edge: PropagationEdgeRecord\n): PropagationResult {\n return applyNegativeSupport(\n sourceOpinion,\n targetOpinion,\n edgeWeight,\n readEdgeMetadata(edge)\n );\n}\n\nexport function propagateNegativeInform(\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edgeWeight: number\n): PropagationResult {\n return applyNegativeEvidence(sourceOpinion, targetOpinion, edgeWeight);\n}\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeSupportWithMetadata,\n} from \"./utils\";\n\nexport const contradictsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"contradicts\",\n direction: \"bidirectional\",\n transitivity: \"none\",\n damping: 0.85,\n maxHops: 1,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const negativeWeight = -Math.abs(edge.weight ?? 1);\n const result = propagateNegativeSupportWithMetadata(\n dampedSource,\n targetOpinion,\n negativeWeight,\n edge\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Legacy contradiction edges move negative pressure in either direction, but never beyond one hop.\",\n};\n\n","import {\n conditionalDeduction,\n dampedDependencyCascade,\n project,\n} from \"@lucern/confidence\";\nimport type { EdgePropagationSpec } from \"./propagationTypes\";\nimport { annotateRationale, applyPerHopDamping, readEdgeMetadata } from \"./utils\";\n\nexport const dependsOnPropagationSpec: EdgePropagationSpec = {\n edgeType: \"depends_on\",\n direction: \"incoming\",\n transitivity: \"damped\",\n damping: 0.8,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const metadata = readEdgeMetadata(edge);\n\n if (metadata.conditionalA && metadata.conditionalNotA) {\n const deducedOpinion = conditionalDeduction(\n dampedSource,\n metadata.conditionalA,\n metadata.conditionalNotA,\n targetOpinion.a\n );\n\n return annotateRationale(\n {\n opinion: deducedOpinion,\n operator: \"conditional_deduction\",\n rationale: `Conditional deduction: prerequisite at ${project(\n dampedSource\n ).toFixed(2)}`,\n },\n context.spec,\n context.hop\n );\n }\n\n const result = dampedDependencyCascade(\n dampedSource,\n targetOpinion,\n metadata.propagation ?? \"continuous\"\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Structural gating. Textbook conditional deduction when edge conditionals exist, otherwise damped dependency cascade through downstream chains.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\n\nexport const derivedFromPropagationSpec: EdgePropagationSpec = {\n edgeType: \"derived_from\",\n direction: \"incoming\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Provenance only. The traversal surface stays explicit, but confidence does not move across derived_from edges.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagatePositiveInform,\n} from \"./utils\";\n\nexport const elaboratesPropagationSpec: EdgePropagationSpec = {\n edgeType: \"elaborates\",\n direction: \"outgoing\",\n transitivity: \"damped\",\n damping: 0.7,\n maxHops: 2,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const contextualWeight = Math.min(Math.abs(edge.weight ?? 0.35), 0.35);\n const result = propagatePositiveInform(\n dampedSource,\n targetOpinion,\n contextualWeight\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Context-rich supporting detail. Elaborates carries a small positive effect with short, damped chaining.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeInform,\n propagatePositiveInform,\n} from \"./utils\";\n\nexport const informsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"informs\",\n direction: \"outgoing\",\n transitivity: \"full\",\n damping: 0.92,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const weight = edge.weight ?? 1;\n const result =\n weight < 0\n ? propagateNegativeInform(dampedSource, targetOpinion, weight)\n : propagatePositiveInform(dampedSource, targetOpinion, weight);\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Evidence-bearing influence. Informs can chain through the graph with light per-hop damping.\",\n};\n\n","import type {\n EdgeMetadata,\n Opinion,\n PropagationResult,\n} from \"@lucern/confidence\";\n\nexport type PropagationTraversalDirection = \"outgoing\" | \"incoming\";\n\nexport type PropagationSpecDirection =\n | PropagationTraversalDirection\n | \"bidirectional\";\n\nexport type PropagationTransitivity = \"none\" | \"damped\" | \"full\";\n\nexport type PropagationEdgeType =\n | \"supports\"\n | \"depends_on\"\n | \"informs\"\n | \"contains\"\n | \"tests\"\n | \"derived_from\"\n | \"contradicts\"\n | \"refutes\"\n | \"elaborates\";\n\nexport type PropagationEdgeRecord<TNodeId extends string = string> = {\n fromNodeId?: TNodeId | null;\n toNodeId?: TNodeId | null;\n edgeType: string;\n weight?: number | null;\n constraint?: EdgeMetadata[\"constraint\"] | null;\n normalization?: EdgeMetadata[\"normalization\"] | null;\n propagation?: EdgeMetadata[\"propagation\"] | null;\n conditionalA?: EdgeMetadata[\"conditionalA\"] | null;\n conditionalNotA?: EdgeMetadata[\"conditionalNotA\"] | null;\n tenantId?: string;\n workspaceId?: string;\n};\n\nexport type EdgePropagationSpec<TNodeId extends string = string> = {\n edgeType: PropagationEdgeType;\n direction: PropagationSpecDirection;\n transitivity: PropagationTransitivity;\n damping: number;\n maxHops: number | \"unbounded\";\n operator: (\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edge: PropagationEdgeRecord<TNodeId>,\n context: {\n hop: number;\n sourceNodeId: TNodeId;\n targetNodeId: TNodeId;\n traversedDirection: PropagationTraversalDirection;\n spec: EdgePropagationSpec<TNodeId>;\n }\n ) => PropagationResult | null;\n description: string;\n};\n\nexport function isPropagationTraversalDirection(\n direction: string\n): direction is PropagationTraversalDirection {\n return direction === \"outgoing\" || direction === \"incoming\";\n}\n\nexport function canTraverseHop<TNodeId extends string>(\n spec: EdgePropagationSpec<TNodeId>,\n nextHop: number\n): boolean {\n return spec.maxHops === \"unbounded\" || nextHop <= spec.maxHops;\n}\n\nexport function canContinueTransitively<TNodeId extends string>(\n spec: EdgePropagationSpec<TNodeId>,\n currentHop: number\n): boolean {\n if (spec.transitivity === \"none\") {\n return false;\n }\n\n return spec.maxHops === \"unbounded\" || currentHop < spec.maxHops;\n}\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeInform,\n} from \"./utils\";\n\nexport const refutesPropagationSpec: EdgePropagationSpec = {\n edgeType: \"refutes\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 0.9,\n maxHops: 1,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const negativeWeight = -Math.abs(edge.weight ?? 1);\n const result = propagateNegativeInform(\n dampedSource,\n targetOpinion,\n negativeWeight\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Explicit negative evidence semantics. Refutes is treated as strong one-hop counter-evidence.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeSupportWithMetadata,\n propagatePositiveSupport,\n} from \"./utils\";\n\nexport const supportsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"supports\",\n direction: \"outgoing\",\n transitivity: \"full\",\n damping: 0.85,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const weight = edge.weight ?? 1;\n const result =\n weight < 0\n ? propagateNegativeSupportWithMetadata(\n dampedSource,\n targetOpinion,\n weight,\n edge\n )\n : propagatePositiveSupport(dampedSource, targetOpinion, weight);\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Belief-to-belief influence. Supports chains transitively with moderate per-hop damping.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\n\nexport const testsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"tests\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Interrogation linkage only. Tests edges do not directly move confidence.\",\n};\n\n","/**\n * edgeValidation module implementation.\n */\n\nimport { type EpistemicLayer, isDeprecatedEdgeType } from \"./graphTypes\";\n\nexport { isDeprecatedEdgeType };\nexport type { EpistemicLayer };\n\nfunction getLayerDepth(layer: EpistemicLayer): number {\n switch (layer) {\n case \"L4\":\n return 4;\n case \"L3\":\n return 3;\n case \"L2\":\n return 2;\n case \"L1\":\n return 1;\n case \"ontological\":\n return 0;\n default:\n return -1;\n }\n}\n\nfunction isValidLayerConnection(\n fromLayer: EpistemicLayer,\n toLayer: EpistemicLayer\n): boolean {\n if (fromLayer === toLayer) {\n return true;\n }\n\n // Ontological ↔ ontological (entity-entity edges)\n if (fromLayer === \"ontological\" && toLayer === \"ontological\") {\n return true;\n }\n\n // Ontological ↔ epistemic bridge (OE-B: entity-belief/evidence/source connections)\n if (\n fromLayer === \"ontological\" &&\n (toLayer === \"L3\" || toLayer === \"L2\" || toLayer === \"L1\")\n ) {\n return true;\n }\n if (\n (fromLayer === \"L3\" || fromLayer === \"L2\" || fromLayer === \"L1\") &&\n toLayer === \"ontological\"\n ) {\n return true;\n }\n\n // Epistemic layer transitions\n if (fromLayer === \"L2\" && toLayer === \"L1\") {\n return true;\n }\n if (fromLayer === \"L2\" && toLayer === \"L3\") {\n return true;\n }\n if (fromLayer === \"L3\" && toLayer === \"L2\") {\n return true;\n }\n if (fromLayer === \"L3\" && toLayer === \"L4\") {\n return true;\n }\n if (fromLayer === \"L4\" && toLayer === \"L3\") {\n return true;\n }\n\n // Organizational connections\n if (fromLayer === \"L3\" && toLayer === \"organizational\") {\n return true;\n }\n if (fromLayer === \"organizational\" && toLayer === \"L3\") {\n return true;\n }\n\n const fromDepth = getLayerDepth(fromLayer);\n const toDepth = getLayerDepth(toLayer);\n if (Math.abs(fromDepth - toDepth) > 1) {\n return false;\n }\n return true;\n}\n\nexport type TraversalMode =\n | \"anchor_down\"\n | \"anchor_up\"\n | \"same_layer\"\n | \"decision_trace\";\n\nexport function shouldContinueTraversal(\n currentLayer: EpistemicLayer,\n targetLayer: EpistemicLayer,\n options: {\n mode: TraversalMode;\n minLayer?: number;\n maxLayer?: number;\n }\n): boolean {\n const currentDepth = getLayerDepth(currentLayer);\n const targetDepth = getLayerDepth(targetLayer);\n\n if (options.minLayer !== undefined && targetDepth < options.minLayer) {\n return false;\n }\n if (options.maxLayer !== undefined && targetDepth > options.maxLayer) {\n return false;\n }\n\n switch (options.mode) {\n case \"anchor_down\":\n return targetDepth <= currentDepth;\n case \"anchor_up\":\n return targetDepth >= currentDepth;\n case \"same_layer\":\n return targetDepth === currentDepth;\n case \"decision_trace\":\n return currentDepth === 4\n ? targetDepth === 3\n : targetDepth === currentDepth;\n default:\n return true;\n }\n}\n\nexport function getDefaultMinLayer(mode: TraversalMode): number {\n switch (mode) {\n case \"anchor_down\":\n return 1;\n case \"anchor_up\":\n return 2;\n case \"same_layer\":\n return 1;\n case \"decision_trace\":\n return 3;\n default:\n return 1;\n }\n}\n\nexport const EDGE_LAYER_RULES: Record<\n string,\n { from: EpistemicLayer[]; to: EpistemicLayer[]; description: string }\n> = {\n // === 6 Canonical Epistemic Types ===\n supports: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief bears on Belief (weight: +1 supports, -1 contradicts)\",\n },\n informs: {\n from: [\"L2\"],\n to: [\"L3\"],\n description: \"Evidence -> Belief (L2 -> L3)\",\n },\n depends_on: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief B requires Belief A (structural gate)\",\n },\n derived_from: {\n from: [\"L2\", \"L3\", \"L4\"],\n to: [\"L1\", \"L2\", \"L3\"],\n description: \"A was produced from B (provenance chain)\",\n },\n contains: {\n from: [\"L3\", \"L4\", \"ontological\"],\n to: [\"L2\", \"L3\", \"ontological\"],\n description: \"A scopes/aggregates B (hierarchy)\",\n },\n tests: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Question -> Belief (L3 -> L3)\",\n },\n\n // === Structural / Lifecycle ===\n supersedes: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"NewNode -> OldNode (fork lineage)\",\n },\n responds_to: {\n from: [\"L2\", \"L3\"],\n to: [\"L3\"],\n description: \"Answer -> Question (L2/L3 -> L3)\",\n },\n belongs_to: {\n from: [\"L2\", \"L3\", \"ontological\"],\n to: [\"L3\"],\n description: \"Membership (migrating to contains)\",\n },\n relates_to_thesis: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief -> Theme (L3 -> L3)\",\n },\n\n // === Ontological (entity-entity or entity-epistemic bridge) ===\n works_at: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Person -> Company\",\n },\n invested_in: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Investor -> Company\",\n },\n competes_with: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> Company\",\n },\n participates_in: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> ValueChain\",\n },\n founded_by: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> Person\",\n },\n evaluates: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Deal -> Company\",\n },\n performs: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> Function\",\n },\n function_in: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Function -> ValueChain\",\n },\n impacts: {\n from: [\"ontological\", \"L3\"],\n to: [\"ontological\"],\n description: \"Theme/Entity -> ValueChain\",\n },\n raised_from: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> Investor\",\n },\n mentioned_in: {\n from: [\"ontological\"],\n to: [\"L1\", \"L2\"],\n description: \"Entity -> Source/Evidence\",\n },\n perspective_on: {\n from: [\"ontological\"],\n to: [\"L3\"],\n description: \"Person -> Belief/Theme\",\n },\n plays_theme: {\n from: [\"ontological\"],\n to: [\"L3\"],\n description: \"Deal -> Theme\",\n },\n};\n\nexport function validateEdgeLayers(\n edgeType: string,\n fromLayer: EpistemicLayer,\n toLayer: EpistemicLayer\n): { valid: boolean; reason?: string } {\n const rules = EDGE_LAYER_RULES[edgeType];\n\n if (!rules) {\n console.warn(\n `[EdgeValidation] Unknown edge type: ${edgeType}, allowing by default`\n );\n return { valid: true };\n }\n\n if (edgeType === \"supersedes\") {\n if (fromLayer !== toLayer) {\n return {\n valid: false,\n reason: `${edgeType} edges must be between nodes of the same layer. Got ${fromLayer} -> ${toLayer}`,\n };\n }\n return { valid: true };\n }\n\n if (!rules.from.includes(fromLayer)) {\n return {\n valid: false,\n reason: `Edge type '${edgeType}' does not allow source layer ${fromLayer}. Allowed: ${rules.from.join(\", \")}`,\n };\n }\n\n if (!rules.to.includes(toLayer)) {\n return {\n valid: false,\n reason: `Edge type '${edgeType}' does not allow target layer ${toLayer}. Allowed: ${rules.to.join(\", \")}`,\n };\n }\n\n if (!isValidLayerConnection(fromLayer, toLayer)) {\n return {\n valid: false,\n reason: `Layer transition ${fromLayer} -> ${toLayer} is not permitted`,\n };\n }\n\n return { valid: true };\n}\n\n","/**\n * Graph Type Registry for Convex\n *\n * This file mirrors the canonical type registry at lib/ontology/types.ts\n * but is compatible with Convex's bundling requirements.\n *\n * IMPORTANT: Keep this file in sync with lib/ontology/types.ts\n * The frontend uses lib/ontology/types.ts, Convex uses this file.\n *\n * @see /docs/architecture/UNIFIED_GRAPH_ARCHITECTURE.md\n */\n\n// =============================================================================\n// EPISTEMIC LAYERS\n// =============================================================================\n\nexport type EpistemicLayer =\n | \"L4\"\n | \"L3\"\n | \"L2\"\n | \"L1\"\n | \"ontological\"\n | \"organizational\";\n\n// =============================================================================\n// NODE TYPE TO LABEL MAPPING\n// =============================================================================\n\nexport const NODE_TYPE_TO_LABEL: Record<string, string> = {\n // L4: Audit Targets\n decision: \"Decision\",\n\n // L3: Traversal Anchors\n belief: \"Belief\",\n question: \"Question\",\n theme: \"Theme\",\n deal: \"Deal\",\n topic: \"Topic\",\n\n // L2: Compression Boundary\n claim: \"Claim\",\n evidence: \"Evidence\",\n synthesis: \"Synthesis\",\n answer: \"Answer\",\n\n // L1: Terminal Leaves\n atomic_fact: \"AtomicFact\",\n excerpt: \"Excerpt\",\n source: \"Source\",\n\n // Ontological (Neo4j is SOT)\n company: \"Company\",\n person: \"Person\",\n investor: \"Investor\",\n function: \"Function\",\n value_chain: \"ValueChain\",\n};\n\n// =============================================================================\n// EDGE TYPE TO NEO4J RELATIONSHIP MAPPING\n// =============================================================================\n\n/**\n * Epistemic Kernel v2: 6 canonical edge types + ontological edges.\n *\n * Weight and metadata carry nuance that previously required 67 separate type strings.\n * See: docs/architecture/epistemic-kernel-v2.md\n */\nexport const EDGE_TYPE_TO_REL: Record<string, string> = {\n // === THE SIX CANONICAL EPISTEMIC EDGE TYPES ===\n supports: \"SUPPORTS\", // L3↔L3: belief bears on belief (weight -1 to +1)\n informs: \"INFORMS\", // L2→L3: evidence bears on belief\n depends_on: \"DEPENDS_ON\", // L3→L3, Q→Q: structural gate\n derived_from: \"DERIVED_FROM\", // Any→Any: provenance chain (fork, synthesis, extraction, answer)\n contains: \"CONTAINS\", // Any→Any: hierarchy, scoping, membership\n tests: \"TESTS\", // Q→L3: question interrogates belief\n\n // === L4 DECISION EDGES (derived_from with derivationType=decision) ===\n // Kept as separate Neo4j relationship types for backward compat with L4 queries.\n // New code should use derived_from + metadata.\n based_on_belief: \"BASED_ON_BELIEF\",\n based_on_question: \"BASED_ON_QUESTION\",\n blocked_by_contradiction: \"BLOCKED_BY_CONTRADICTION\",\n informed_by_theme: \"INFORMED_BY_THEME\",\n\n // === ONTOLOGICAL EDGES (tenant-extensible, managed by ontology system) ===\n works_at: \"WORKS_AT\",\n invested_in: \"INVESTED_IN\",\n competes_with: \"COMPETES_WITH\",\n participates_in: \"PARTICIPATES_IN\",\n founded_by: \"FOUNDED_BY\",\n evaluates: \"EVALUATES\",\n performs: \"PERFORMS\",\n function_in: \"FUNCTION_IN\",\n impacts: \"IMPACTS\",\n raised_from: \"RAISED_FROM\",\n mentioned_in: \"MENTIONED_IN\",\n perspective_on: \"PERSPECTIVE_ON\",\n about_entity: \"ABOUT_ENTITY\",\n entity_referenced_in: \"ENTITY_REFERENCED_IN\",\n};\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Get the epistemic layer for a node type\n */\nexport function getNodeLayer(nodeType: string): EpistemicLayer {\n const L4_TYPES = [\"decision\"];\n const L3_TYPES = [\"belief\", \"question\", \"theme\", \"deal\"];\n const L2_TYPES = [\"claim\", \"evidence\", \"synthesis\", \"answer\"];\n const L1_TYPES = [\"atomic_fact\", \"excerpt\", \"source\"];\n const ONTOLOGICAL_TYPES = [\n \"company\",\n \"person\",\n \"investor\",\n \"function\",\n \"value_chain\",\n ];\n const ORGANIZATIONAL_TYPES = [\"topic\"];\n\n if (L4_TYPES.includes(nodeType)) {\n return \"L4\";\n }\n if (L3_TYPES.includes(nodeType)) {\n return \"L3\";\n }\n if (L2_TYPES.includes(nodeType)) {\n return \"L2\";\n }\n if (L1_TYPES.includes(nodeType)) {\n return \"L1\";\n }\n if (ONTOLOGICAL_TYPES.includes(nodeType)) {\n return \"ontological\";\n }\n if (ORGANIZATIONAL_TYPES.includes(nodeType)) {\n return \"organizational\";\n }\n\n // Unknown types default to L2\n console.warn(`[GraphTypes] Unknown nodeType \"${nodeType}\", defaulting to L2`);\n return \"L2\";\n}\n\n/**\n * Get the Neo4j label for a node type\n */\nexport function getNeo4jLabel(nodeType: string): string {\n return (\n NODE_TYPE_TO_LABEL[nodeType] ||\n nodeType.charAt(0).toUpperCase() + nodeType.slice(1)\n );\n}\n\n/**\n * Get the Neo4j relationship type for an edge type\n */\nexport function getNeo4jRelType(edgeType: string): string {\n return EDGE_TYPE_TO_REL[edgeType] || edgeType.toUpperCase();\n}\n\n/**\n * The 6 canonical epistemic edge types (Kernel v2).\n * Anything not in this set or the ontological/L4 sets is deprecated.\n */\nconst CANONICAL_EPISTEMIC_TYPES = new Set([\n \"supports\",\n \"informs\",\n \"depends_on\",\n \"derived_from\",\n \"contains\",\n \"tests\",\n]);\n\n/**\n * Check if an edge type is deprecated.\n *\n * Kernel v2: only the 6 canonical epistemic types, L4 decision types,\n * and ontological types are active. All legacy types (67 old types) are deprecated.\n */\nexport function isDeprecatedEdgeType(edgeType: string): boolean {\n // Canonical epistemic types are NOT deprecated\n if (CANONICAL_EPISTEMIC_TYPES.has(edgeType)) return false;\n // Types in the EDGE_TYPE_TO_REL map (ontological + L4) are NOT deprecated\n if (edgeType in EDGE_TYPE_TO_REL) return false;\n // Everything else is a legacy type\n return true;\n}\n","/**\n * Entity↔Belief Bridge (OE-B)\n *\n * Query and mutation helpers for traversing entity↔belief connections\n * via the epistemic edge graph. Entities (ontological layer) connect to\n * beliefs/questions/themes (L3) and evidence (L2) through typed bridge edges.\n *\n * Bridge edge types:\n * - contains: Belief/Question/Theme → Entity (L3 → ontological), also Entity → Evidence (ontological → L2)\n * - evaluates: Deal → Company (L3 → ontological)\n * - perspective_on: Person → Belief/Theme (ontological → L3)\n * - impacts: Theme → ValueChain (L3 → ontological)\n * - mentioned_in: Entity → Source (ontological → L1)\n *\n * @module graph-primitives/entityBridge\n */\n\nimport { v } from \"convex/values\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\nimport type { Id } from \"./convex\";\nimport { internal, mutation, query } from \"./convex\";\nimport { validateEdgeLayers } from \"./edgeValidation\";\nimport { getNodeLayer } from \"./graphTypes\";\nimport { readMaterializedTopicTableId } from \"./topicScope\";\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\n/** Edge types that bridge ontological ↔ epistemic layers */\nconst ENTITY_BRIDGE_EDGE_TYPES = [\n \"contains\",\n \"evaluates\",\n \"perspective_on\",\n \"impacts\",\n \"mentioned_in\",\n] as const;\n\n/** Edge types that connect ontological ↔ ontological */\nconst _ONTOLOGICAL_EDGE_TYPES = [\n \"works_at\",\n \"participates_in\",\n \"performs\",\n \"function_in\",\n \"invested_in\",\n \"raised_from\",\n \"founded_by\",\n \"competes_with\",\n \"contains\",\n \"derived_from\",\n] as const;\n\n// =============================================================================\n// QUERIES\n// =============================================================================\n\n/**\n * Get all beliefs/questions/themes connected to an entity.\n * Traverses both directions:\n * - about_entity edges (L3 → entity): returns the L3 source nodes\n * - perspective_on edges (entity → L3): returns the L3 target nodes\n * - evaluates edges (L3 → entity): returns the L3 source nodes\n */\nexport const getBeliefsForEntity = query({\n args: {\n entityNodeId: v.id(\"epistemicNodes\"),\n edgeTypes: v.optional(v.array(v.string())),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const entity = await ctx.db.get(args.entityNodeId);\n if (!entity || entity.epistemicLayer !== \"ontological\") {\n return { beliefs: [], entity: null };\n }\n\n const filterTypes = args.edgeTypes || [\n \"contains\",\n \"evaluates\",\n \"perspective_on\",\n \"impacts\",\n ];\n\n // Edges TO this entity (contains, evaluates, impacts)\n const inboundEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q) => q.eq(\"toNodeId\", args.entityNodeId))\n .collect();\n\n // Edges FROM this entity (perspective_on)\n const outboundEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from\", (q) => q.eq(\"fromNodeId\", args.entityNodeId))\n .collect();\n\n const beliefNodeIds = new Set<string>();\n const edgeMap: Record<\n string,\n { edgeType: string; weight?: number; context?: string }\n > = {};\n\n for (const edge of inboundEdges) {\n if (!filterTypes.includes(edge.edgeType as string) || !edge.fromNodeId) {\n continue;\n }\n const id = String(edge.fromNodeId);\n beliefNodeIds.add(id);\n edgeMap[id] = {\n edgeType: edge.edgeType,\n weight: edge.weight ?? undefined,\n context: edge.context ?? undefined,\n };\n }\n\n for (const edge of outboundEdges) {\n const et = edge.edgeType as string;\n if (\n !filterTypes.includes(et) ||\n !edge.toNodeId ||\n et === \"mentioned_in\"\n ) {\n continue;\n }\n const id = String(edge.toNodeId);\n beliefNodeIds.add(id);\n edgeMap[id] = {\n edgeType: edge.edgeType,\n weight: edge.weight ?? undefined,\n context: edge.context ?? undefined,\n };\n }\n\n // Hydrate belief nodes\n const beliefs = await Promise.all(\n [...beliefNodeIds].map(async (nodeId) => {\n const node = await ctx.db.get(nodeId as Id<\"epistemicNodes\">);\n if (!node || node.status !== \"active\") {\n return null;\n }\n return {\n ...node,\n _edge: edgeMap[nodeId],\n };\n })\n );\n\n return {\n beliefs: beliefs.filter(Boolean),\n entity: {\n _id: entity._id,\n globalId: entity.globalId,\n nodeType: entity.nodeType,\n title: entity.title,\n metadata: entity.metadata,\n },\n };\n },\n});\n\n/**\n * Get all entities connected to a belief/question/theme.\n * Traverses both directions:\n * - about_entity edges (belief → entity): returns the entity target nodes\n * - perspective_on edges (entity → belief): returns the entity source nodes\n * - evaluates edges (deal → entity): returns the entity target nodes\n */\nexport const getEntitiesForBelief = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n edgeTypes: v.optional(v.array(v.string())),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const belief = await ctx.db.get(args.beliefNodeId);\n if (!belief) {\n return { entities: [], belief: null };\n }\n\n const filterTypes = args.edgeTypes || [\n \"contains\",\n \"evaluates\",\n \"perspective_on\",\n \"impacts\",\n ];\n\n // Edges FROM this belief (contains, evaluates, impacts)\n const outboundEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from\", (q) => q.eq(\"fromNodeId\", args.beliefNodeId))\n .collect();\n\n // Edges TO this belief (perspective_on)\n const inboundEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q) => q.eq(\"toNodeId\", args.beliefNodeId))\n .collect();\n\n const entityNodeIds = new Set<string>();\n const edgeMap: Record<\n string,\n { edgeType: string; weight?: number; context?: string }\n > = {};\n\n for (const edge of outboundEdges) {\n if (!filterTypes.includes(edge.edgeType as string) || !edge.toNodeId) {\n continue;\n }\n const id = String(edge.toNodeId);\n entityNodeIds.add(id);\n edgeMap[id] = {\n edgeType: edge.edgeType,\n weight: edge.weight ?? undefined,\n context: edge.context ?? undefined,\n };\n }\n\n for (const edge of inboundEdges) {\n if (!filterTypes.includes(edge.edgeType as string) || !edge.fromNodeId) {\n continue;\n }\n const id = String(edge.fromNodeId);\n entityNodeIds.add(id);\n edgeMap[id] = {\n edgeType: edge.edgeType,\n weight: edge.weight ?? undefined,\n context: edge.context ?? undefined,\n };\n }\n\n // Hydrate entity nodes (filter to ontological only)\n const entities = await Promise.all(\n [...entityNodeIds].map(async (nodeId) => {\n const node = await ctx.db.get(nodeId as Id<\"epistemicNodes\">);\n if (\n !node ||\n node.status !== \"active\" ||\n node.epistemicLayer !== \"ontological\"\n ) {\n return null;\n }\n return {\n ...node,\n _edge: edgeMap[nodeId],\n };\n })\n );\n\n return {\n entities: entities.filter(Boolean),\n belief: {\n _id: belief._id,\n globalId: belief.globalId,\n nodeType: belief.nodeType,\n title: belief.title,\n canonicalText: belief.canonicalText,\n },\n };\n },\n});\n\n/**\n * Get the topic scope for an entity by traversing its belief connections.\n * Entities don't have direct topic scope — they inherit it through their\n * connected beliefs/themes. This enables topic-based entity discovery.\n */\nexport const getEntityTopicScope = query({\n args: {\n entityNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const entity = await ctx.db.get(args.entityNodeId);\n if (!entity || entity.epistemicLayer !== \"ontological\") {\n return { topics: [], projectIds: [] };\n }\n\n // Get all L3 nodes connected via bridge edges\n const inboundEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q) => q.eq(\"toNodeId\", args.entityNodeId))\n .collect();\n\n const outboundEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from\", (q) => q.eq(\"fromNodeId\", args.entityNodeId))\n .collect();\n\n const connectedNodeIds = new Set<string>();\n\n for (const edge of inboundEdges) {\n if (\n ENTITY_BRIDGE_EDGE_TYPES.includes(edge.edgeType as any) &&\n edge.fromNodeId\n ) {\n connectedNodeIds.add(String(edge.fromNodeId));\n }\n }\n for (const edge of outboundEdges) {\n if (\n ENTITY_BRIDGE_EDGE_TYPES.includes(edge.edgeType as any) &&\n edge.toNodeId\n ) {\n connectedNodeIds.add(String(edge.toNodeId));\n }\n }\n\n // Collect unique projectIds and topicIds from connected nodes\n const projectIds = new Set<string>();\n const topicIds = new Set<string>();\n\n for (const nodeId of connectedNodeIds) {\n const node = await ctx.db.get(nodeId as Id<\"epistemicNodes\">);\n if (!node || node.status !== \"active\") {\n continue;\n }\n if (node.projectId) {\n projectIds.add(String(node.projectId));\n }\n if ((node as any).topicId) {\n topicIds.add(String((node as any).topicId));\n }\n }\n\n // Also check contains edges from connected beliefs to topics\n for (const nodeId of connectedNodeIds) {\n const scopeEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from\", (q) =>\n q.eq(\"fromNodeId\", nodeId as Id<\"epistemicNodes\">)\n )\n .collect();\n\n for (const edge of scopeEdges) {\n if (edge.edgeType === \"contains\" && edge.toNodeId) {\n const scopedTopicNode = await ctx.db.get(\n edge.toNodeId as Id<\"epistemicNodes\">\n );\n const canonicalTopicId = readMaterializedTopicTableId(\n scopedTopicNode as {\n _id: Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n } | null\n );\n if (canonicalTopicId) {\n topicIds.add(canonicalTopicId);\n }\n }\n }\n }\n\n return {\n topics: [...topicIds],\n projectIds: [...projectIds],\n connectedNodeCount: connectedNodeIds.size,\n };\n },\n});\n\n/**\n * Get evidence nodes that reference an entity.\n * Uses entity_referenced_in edges (ontological → L2).\n */\nexport const getEvidenceForEntity = query({\n args: {\n entityNodeId: v.id(\"epistemicNodes\"),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const entity = await ctx.db.get(args.entityNodeId);\n if (!entity || entity.epistemicLayer !== \"ontological\") {\n return [];\n }\n\n const effectiveLimit = args.limit ?? 50;\n\n // contains: Entity → Evidence (outbound from entity)\n const outboundEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from\", (q) => q.eq(\"fromNodeId\", args.entityNodeId))\n .collect();\n\n const evidenceEdges = outboundEdges.filter((e) => {\n const et = e.edgeType as string;\n return et === \"contains\" || et === \"mentioned_in\";\n });\n\n const results = await Promise.all(\n evidenceEdges.slice(0, effectiveLimit).map(async (edge) => {\n if (!edge.toNodeId) {\n return null;\n }\n const node = await ctx.db.get(edge.toNodeId);\n if (!node || node.status !== \"active\") {\n return null;\n }\n return {\n ...node,\n _edge: {\n edgeType: edge.edgeType,\n weight: edge.weight,\n context: edge.context,\n },\n };\n })\n );\n\n return results.filter(Boolean);\n },\n});\n\n// =============================================================================\n// MUTATIONS\n// =============================================================================\n\n/**\n * Link an entity to a belief/question/theme via about_entity edge.\n * Creates the edge through the Neo4j dual-write path.\n */\nexport const linkEntityToBelief = mutation({\n args: {\n entityNodeId: v.id(\"epistemicNodes\"),\n beliefNodeId: v.id(\"epistemicNodes\"),\n edgeType: v.optional(v.string()),\n weight: v.optional(v.number()),\n context: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await getCurrentUserId(ctx as any);\n if (!userId) {\n throw new Error(\"Authentication required to create entity-belief links.\");\n }\n\n const entity = await ctx.db.get(args.entityNodeId);\n if (!entity || entity.epistemicLayer !== \"ontological\") {\n throw new Error(\"Source node must be an ontological entity.\");\n }\n\n const belief = await ctx.db.get(args.beliefNodeId);\n if (!belief) {\n throw new Error(\"Target belief/question/theme node not found.\");\n }\n if (!entity.globalId) {\n throw new Error(\"Source entity is missing a globalId.\");\n }\n if (!belief.globalId) {\n throw new Error(\n \"Target belief/question/theme node is missing a globalId.\"\n );\n }\n\n const effectiveEdgeType = args.edgeType || \"contains\";\n\n // Validate edge direction based on type\n const fromLayer = getNodeLayer(entity.nodeType);\n const toLayer = getNodeLayer(belief.nodeType);\n\n let fromNodeId: Id<\"epistemicNodes\">;\n let toNodeId: Id<\"epistemicNodes\">;\n let fromGlobalId: string;\n let toGlobalId: string;\n let fromNodeType: string;\n let toNodeType: string;\n let edgeFromLayer: string;\n let edgeToLayer: string;\n\n if (effectiveEdgeType === \"contains\" && entity.epistemicLayer === \"ontological\") {\n // contains: L3 → ontological (belief is source, entity is target)\n fromNodeId = args.beliefNodeId;\n toNodeId = args.entityNodeId;\n fromGlobalId = belief.globalId;\n toGlobalId = entity.globalId;\n fromNodeType = belief.nodeType;\n toNodeType = entity.nodeType;\n edgeFromLayer = getNodeLayer(belief.nodeType);\n edgeToLayer = \"ontological\";\n } else if (\n effectiveEdgeType === \"mentioned_in\" ||\n effectiveEdgeType === \"perspective_on\"\n ) {\n // These go ontological → epistemic\n fromNodeId = args.entityNodeId;\n toNodeId = args.beliefNodeId;\n fromGlobalId = entity.globalId;\n toGlobalId = belief.globalId;\n fromNodeType = entity.nodeType;\n toNodeType = belief.nodeType;\n edgeFromLayer = \"ontological\";\n edgeToLayer = getNodeLayer(belief.nodeType);\n } else {\n // For other edge types, use validation to determine direction\n const validation = validateEdgeLayers(\n effectiveEdgeType,\n fromLayer,\n toLayer\n );\n if (validation.valid) {\n fromNodeId = args.entityNodeId;\n toNodeId = args.beliefNodeId;\n fromGlobalId = entity.globalId;\n toGlobalId = belief.globalId;\n fromNodeType = entity.nodeType;\n toNodeType = belief.nodeType;\n edgeFromLayer = fromLayer;\n edgeToLayer = toLayer;\n } else {\n // Try reversed direction\n const reversed = validateEdgeLayers(\n effectiveEdgeType,\n toLayer,\n fromLayer\n );\n if (!reversed.valid) {\n throw new Error(\n `Edge type '${effectiveEdgeType}' is not valid between ${entity.nodeType} (${fromLayer}) and ${belief.nodeType} (${toLayer}): ${validation.reason}`\n );\n }\n // Reversed direction is valid\n fromNodeId = args.beliefNodeId;\n toNodeId = args.entityNodeId;\n fromGlobalId = belief.globalId;\n toGlobalId = entity.globalId;\n fromNodeType = belief.nodeType;\n toNodeType = entity.nodeType;\n edgeFromLayer = toLayer;\n edgeToLayer = fromLayer;\n }\n }\n\n // Check for duplicate edge\n const existing = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", fromNodeId).eq(\"toNodeId\", toNodeId)\n )\n .first();\n\n if (existing && existing.edgeType === effectiveEdgeType) {\n return { edgeId: existing._id, existed: true };\n }\n\n // Create via Neo4j dual-write path\n const globalId = `edge-${effectiveEdgeType}-${fromNodeId}-${toNodeId}-${Date.now()}`;\n\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId,\n fromGlobalId,\n toGlobalId,\n edgeType: effectiveEdgeType,\n weight: args.weight ?? 1.0,\n context: args.context || `Entity-belief bridge: ${effectiveEdgeType}`,\n topicId:\n belief.projectId || entity.projectId\n ? String(belief.projectId || entity.projectId)\n : undefined,\n createdBy: userId,\n fromNodeType,\n toNodeType,\n fromLayer: edgeFromLayer,\n toLayer: edgeToLayer,\n });\n\n return { globalId, edgeType: effectiveEdgeType, existed: false };\n },\n});\n","/**\n * auth module implementation.\n */\n\nimport type { ActionCtx, MutationCtx, QueryCtx } from \"./convex\";\n\ntype AnyCtx = QueryCtx | MutationCtx | ActionCtx;\n\n/**\n * Get the current user's identity from Clerk.\n */\nexport async function getCurrentUser(ctx: AnyCtx) {\n const identity = await ctx.auth.getUserIdentity();\n return identity;\n}\n\n/**\n * Get the current user ID (Clerk subject).\n */\nexport async function getCurrentUserId(ctx: AnyCtx): Promise<string | null> {\n const identity = await ctx.auth.getUserIdentity();\n return identity?.subject ?? null;\n}\n","/**\n * Entity Lifecycle Mutations\n *\n * Entity-specific CRUD for ontological nodes (company, person, investor, etc.).\n * Entities are L0 reality infrastructure, NOT epistemic primitives.\n *\n * Key differences from belief mutations:\n * - No confidence field manipulation\n * - No beliefStatus/beliefType fields\n * - Metadata IS mutable (patch directly)\n * - No worktree/sprint gating\n * - Merge operation (beliefs don't merge)\n *\n * Invariant #14: No silent state transitions — all changes logged to epistemicAudit.\n *\n * @module graph-primitives/entityLifecycle\n */\n\nimport { v } from \"convex/values\";\nimport { checkProjectAccess } from \"@lucern/access-control/access\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\nimport { internal, mutation, query } from \"./convex\";\nimport { validateEntityMetadata } from \"./entityValidation\";\nimport { generateGlobalId } from \"./globalId\";\nimport { validateEntityTypeForTopic } from \"./topicOntologyResolver\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\n\n// =============================================================================\n// AUTH HELPERS (same pattern as epistemicBeliefs.ts)\n// =============================================================================\n\ntype StructuredMutationError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\nfunction throwStructuredMutationError(args: {\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredMutationError;\n error.status = args.status;\n error.code = args.code;\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nasync function requireAuthenticatedUserId(ctx: {\n auth: { getUserIdentity: () => Promise<unknown> };\n}): Promise<string> {\n const userId = await getCurrentUserId(ctx as any);\n if (!userId) {\n throwStructuredMutationError({\n message: \"Authentication required.\",\n status: 401,\n code: \"AUTHENTICATION_REQUIRED\",\n invariantCode: \"auth.required\",\n suggestion:\n \"Provide a valid bearer token before invoking entity mutations.\",\n });\n }\n return userId;\n}\n\nasync function requireProjectWriteAccess(\n ctx: { db: unknown },\n projectId: string,\n userId: string\n): Promise<void> {\n const hasAccess = await checkProjectAccess(ctx as any, projectId, userId);\n if (!hasAccess) {\n throwStructuredMutationError({\n message: \"Project access required.\",\n status: 403,\n code: \"FORBIDDEN\",\n invariantCode: \"policy.scope_required\",\n suggestion: \"Request write access for the project and retry.\",\n details: { projectId, userId },\n });\n }\n}\n\n// =============================================================================\n// CONTENT HASHING\n// =============================================================================\n\nfunction generateContentHash(nodeType: string, text: string): string {\n const content = `${nodeType}:${text.trim().toLowerCase().replace(/\\s+/g, \" \")}`;\n let hash = 5381;\n for (let i = 0; i < content.length; i++) {\n hash = (hash << 5) + hash + content.charCodeAt(i);\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\n// Ontological node types that are entities\nexport const ONTOLOGICAL_NODE_TYPES = [\n \"company\",\n \"person\",\n \"investor\",\n \"function\",\n \"value_chain\",\n] as const;\n\nexport type OntologicalNodeType = (typeof ONTOLOGICAL_NODE_TYPES)[number];\n\nexport function isOntologicalNodeType(\n nodeType: string\n): nodeType is OntologicalNodeType {\n return (ONTOLOGICAL_NODE_TYPES as readonly string[]).includes(nodeType);\n}\n\nfunction normalizeCanonicalEntityText(value: string): string {\n return value.trim().toLowerCase().replace(/\\s+/g, \" \");\n}\n\nfunction buildEntityTitle(canonicalText: string): string {\n return canonicalText.slice(0, 100) + (canonicalText.length > 100 ? \"...\" : \"\");\n}\n\ntype ScopeTopicDoc = {\n _id: string;\n tenantId?: string;\n workspaceId?: string;\n};\n\ntype ScopeProjectDoc = {\n _id: string;\n tenantId?: string;\n workspaceId?: string;\n};\n\ntype CanonicalEntityScope = Awaited<ReturnType<typeof resolveTopicProjectScope>> & {\n tenantId?: string;\n topic: ScopeTopicDoc | null;\n project: ScopeProjectDoc | null;\n};\n\nasync function resolveCanonicalEntityScope(\n ctx: { db: any },\n args: { topicId?: any; projectId?: string }\n): Promise<CanonicalEntityScope> {\n const scope = await resolveTopicProjectScope(ctx, args);\n const topic = scope.topicId\n ? (((await ctx.db.get(scope.topicId)) as ScopeTopicDoc | null) ?? null)\n : null;\n const project =\n scope.projectId !== undefined\n ? ((((await resolveGraphPrimitivesAppResolvers(ctx).getProject(\n ctx as any,\n scope.projectId as any\n )) as ScopeProjectDoc | null) ?? null))\n : null;\n\n const tenantId =\n typeof topic?.tenantId === \"string\" && topic.tenantId.trim().length > 0\n ? topic.tenantId.trim()\n : typeof project?.tenantId === \"string\" &&\n project.tenantId.trim().length > 0\n ? project.tenantId.trim()\n : undefined;\n\n return {\n ...scope,\n tenantId,\n topic,\n project,\n };\n}\n\nfunction matchesCanonicalEntityRecord(\n node: {\n status?: unknown;\n nodeType?: unknown;\n epistemicLayer?: unknown;\n tenantId?: unknown;\n workspaceId?: unknown;\n contentHash?: unknown;\n },\n args: {\n nodeType?: string;\n tenantId?: string;\n contentHash?: string;\n includeArchived?: boolean;\n }\n): boolean {\n if (node.epistemicLayer !== \"ontological\") {\n return false;\n }\n if (node.workspaceId !== undefined) {\n return false;\n }\n if (args.nodeType && node.nodeType !== args.nodeType) {\n return false;\n }\n if (args.contentHash && node.contentHash !== args.contentHash) {\n return false;\n }\n const rowTenantId =\n typeof node.tenantId === \"string\" && node.tenantId.trim().length > 0\n ? node.tenantId.trim()\n : undefined;\n if (rowTenantId !== args.tenantId) {\n return false;\n }\n if (args.includeArchived) {\n return node.status !== \"deleted\";\n }\n return node.status === \"active\";\n}\n\nasync function findExistingCanonicalEntity(\n ctx: { db: any },\n args: {\n nodeType: OntologicalNodeType;\n canonicalText: string;\n tenantId?: string;\n }\n) {\n const contentHash = generateContentHash(args.nodeType, args.canonicalText);\n const candidates = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_contentHash\", (q: any) => q.eq(\"contentHash\", contentHash))\n .collect();\n\n return (\n candidates.find((node: any) =>\n matchesCanonicalEntityRecord(node, {\n nodeType: args.nodeType,\n tenantId: args.tenantId,\n contentHash,\n })\n ) ?? null\n );\n}\n\nasync function listCanonicalEntitiesForScope(\n ctx: { db: any },\n args: {\n tenantId?: string;\n nodeType?: string;\n searchTerm?: string;\n includeArchived?: boolean;\n limit: number;\n }\n) {\n const baseRows =\n args.tenantId !== undefined\n ? await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_tenantId\", (q: any) => q.eq(\"tenantId\", args.tenantId))\n .collect()\n : args.nodeType\n ? await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q: any) => q.eq(\"nodeType\", args.nodeType))\n .collect()\n : await ctx.db.query(\"epistemicNodes\").collect();\n\n const normalizedSearch =\n typeof args.searchTerm === \"string\" && args.searchTerm.trim().length > 0\n ? normalizeCanonicalEntityText(args.searchTerm)\n : undefined;\n\n return baseRows\n .filter((node: any) =>\n matchesCanonicalEntityRecord(node, {\n nodeType: args.nodeType,\n tenantId: args.tenantId,\n includeArchived: args.includeArchived,\n })\n )\n .filter((node: any) => {\n if (!normalizedSearch) {\n return true;\n }\n const text =\n typeof node.canonicalText === \"string\" ? node.canonicalText : \"\";\n return normalizeCanonicalEntityText(text).includes(normalizedSearch);\n })\n .sort((a: any, b: any) =>\n String(a.title ?? a.canonicalText ?? \"\").localeCompare(\n String(b.title ?? b.canonicalText ?? \"\")\n )\n )\n .slice(0, args.limit);\n}\n\nconst entityVerificationStatusValidator = v.union(\n v.literal(\"unverified\"),\n v.literal(\"human_verified\"),\n v.literal(\"ai_verified\"),\n v.literal(\"contradicted\"),\n v.literal(\"outdated\")\n);\n\n// =============================================================================\n// CANONICAL ENTITY QUERIES\n// =============================================================================\n\n/**\n * List canonical tenant-global entities visible from a topic/project scope.\n * Canonical entities are tenant-scoped and intentionally workspace-global.\n */\nexport const listCanonicalEntities = query({\n args: {\n topicId: v.optional(v.string()),\n scopeProjectId: v.optional(v.string()),\n nodeType: v.optional(v.string()),\n searchTerm: v.optional(v.string()),\n includeArchived: v.optional(v.boolean()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveCanonicalEntityScope(ctx, {\n topicId: args.topicId,\n projectId: args.scopeProjectId,\n });\n\n const limit = Math.max(1, Math.min(Math.floor(args.limit ?? 100), 500));\n return listCanonicalEntitiesForScope(ctx, {\n tenantId: scope.tenantId,\n nodeType: args.nodeType,\n searchTerm: args.searchTerm,\n includeArchived: args.includeArchived,\n limit,\n });\n },\n});\n\n// =============================================================================\n// CREATE ENTITY\n// =============================================================================\n\n/**\n * Create a new ontological entity in epistemicNodes.\n *\n * Unlike beliefs, entities:\n * - Have epistemicLayer = 'ontological'\n * - Have no confidence or beliefStatus\n * - Are mutable (metadata can be patched)\n * - Require metadata validation against registered schema\n */\nexport const createEntity = mutation({\n args: {\n nodeType: v.string(), // \"company\", \"person\", \"investor\", \"function\", \"value_chain\"\n canonicalText: v.string(), // Display name (e.g., \"Anthropic\", \"Dario Amodei\")\n metadata: v.optional(v.any()), // Type-specific attributes validated against schema\n subtype: v.optional(v.string()), // e.g., \"company/private\", \"investor/vc\"\n ...optionalScopeArgs,\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n const canonicalText = args.canonicalText.trim();\n\n if (!canonicalText) {\n throwStructuredMutationError({\n message: \"canonicalText is required.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"entity.type_check\",\n });\n }\n\n // Validate nodeType is ontological\n if (!isOntologicalNodeType(args.nodeType)) {\n throwStructuredMutationError({\n message: `\"${args.nodeType}\" is not an ontological entity type. Use epistemicBeliefs.create for epistemic nodes.`,\n status: 400,\n code: \"INVALID_NODE_TYPE\",\n invariantCode: \"entity.type_check\",\n suggestion: `Valid entity types: ${ONTOLOGICAL_NODE_TYPES.join(\", \")}`,\n });\n }\n\n // Resolve topic/project scope\n const scope = await resolveCanonicalEntityScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n if (scope.projectId) {\n await requireProjectWriteAccess(\n ctx,\n scope.projectId,\n authenticatedUserId\n );\n }\n\n // Validate nodeType against the resolved ontology for the topic scope.\n // If the topic (or its ancestor) binds to an ontology with a published version,\n // the entity's nodeType must be in that ontology's entity type vocabulary.\n if (scope.topicId) {\n const ontologyValidation = await validateEntityTypeForTopic(\n ctx,\n scope.topicId,\n args.nodeType\n );\n if (!ontologyValidation.valid) {\n throwStructuredMutationError({\n message: `Ontology validation failed: ${ontologyValidation.error}`,\n status: 400,\n code: \"ONTOLOGY_VALIDATION_ERROR\",\n invariantCode: \"entity.ontology_type_check\",\n suggestion:\n \"Use a nodeType that is defined in the ontology bound to this topic, or update the ontology to include this entity type.\",\n details: { nodeType: args.nodeType, topicId: scope.topicId },\n });\n }\n }\n\n // Validate metadata against registered schema\n const metadata = (args.metadata as Record<string, unknown>) || {};\n const validation = await validateEntityMetadata(\n ctx,\n args.nodeType,\n metadata,\n scope.tenantId\n );\n if (!validation.valid) {\n throwStructuredMutationError({\n message: `Entity metadata validation failed: ${validation.errors.join(\"; \")}`,\n status: 400,\n code: \"VALIDATION_ERROR\",\n invariantCode: \"entity.metadata_schema\",\n suggestion:\n \"Check the registered schema for this entity type in schemaEnumConfig.\",\n details: { errors: validation.errors },\n });\n }\n\n const existing = await findExistingCanonicalEntity(ctx, {\n nodeType: args.nodeType,\n canonicalText,\n tenantId: scope.tenantId,\n });\n if (existing) {\n return {\n nodeId: existing._id,\n globalId: existing.globalId,\n isDuplicate: true,\n };\n }\n\n // Create the entity node\n const entityGlobalId = generateGlobalId();\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId: entityGlobalId,\n nodeType: args.nodeType as any,\n epistemicLayer: \"ontological\",\n subtype: args.subtype,\n canonicalText,\n contentHash: generateContentHash(args.nodeType, canonicalText),\n title: buildEntityTitle(canonicalText),\n metadata: {\n ...metadata,\n ...(args.subtype ? { subtype: args.subtype } : {}),\n status: \"active\",\n },\n tenantId: scope.tenantId,\n sourceType: \"human\",\n verificationStatus: \"unverified\",\n status: \"active\",\n projectId: scope.projectId,\n createdBy: authenticatedUserId,\n createdAt: now,\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Log to epistemic audit (Invariant #14)\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"entity\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: null,\n newState: {\n canonicalText,\n nodeType: args.nodeType,\n tenantId: scope.tenantId,\n workspaceId: null,\n },\n projectId: scope.projectId,\n });\n\n return { nodeId, globalId: entityGlobalId, isDuplicate: false };\n },\n});\n\n// =============================================================================\n// UPDATE ENTITY ATTRIBUTES\n// =============================================================================\n\n/**\n * Patch entity metadata. Entities ARE mutable (unlike scored beliefs).\n * Logs before/after diff to epistemicAudit.\n */\nexport const updateEntityAttributes = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n canonicalText: v.optional(v.string()),\n title: v.optional(v.string()),\n metadata: v.optional(v.any()), // Partial metadata to merge\n subtype: v.optional(v.string()),\n domain: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n verificationStatus: v.optional(entityVerificationStatusValidator),\n externalIds: v.optional(\n v.object({\n crunchbase: v.optional(v.string()),\n linkedin: v.optional(v.string()),\n pitchbook: v.optional(v.string()),\n twitter: v.optional(v.string()),\n website: v.optional(v.string()),\n })\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node) {\n throwStructuredMutationError({\n message: \"Entity not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n details: { nodeId: args.nodeId },\n });\n }\n\n // Verify this is an ontological node\n if (!isOntologicalNodeType(node.nodeType)) {\n throwStructuredMutationError({\n message: `Node \"${args.nodeId}\" is a ${node.nodeType}, not an entity. Use belief/question APIs for epistemic nodes.`,\n status: 400,\n code: \"LIFECYCLE_VIOLATION\",\n invariantCode: \"entity.type_check\",\n suggestion:\n \"Only ontological entities can be updated via updateEntityAttributes.\",\n });\n }\n\n const scopeProjectId =\n typeof node.projectId === \"string\" && node.projectId.trim().length > 0\n ? node.projectId\n : undefined;\n if (scopeProjectId) {\n await requireProjectWriteAccess(ctx, scopeProjectId, authenticatedUserId);\n }\n\n // Merge new metadata with existing\n const existingMetadata = (node.metadata as Record<string, unknown>) || {};\n const newMetadataFields =\n args.metadata !== undefined\n ? ((args.metadata as Record<string, unknown>) || {})\n : {};\n const mergedMetadata = { ...existingMetadata, ...newMetadataFields };\n if (args.subtype !== undefined) {\n mergedMetadata.subtype = args.subtype;\n }\n\n if (args.canonicalText !== undefined && args.canonicalText.trim().length === 0) {\n throwStructuredMutationError({\n message: \"canonicalText cannot be empty.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"entity.update_requires_entity_lifecycle\",\n });\n }\n\n const nextCanonicalText =\n typeof args.canonicalText === \"string\" && args.canonicalText.trim().length > 0\n ? args.canonicalText.trim()\n : node.canonicalText;\n\n if (args.canonicalText !== undefined) {\n const duplicate = await findExistingCanonicalEntity(ctx, {\n nodeType: node.nodeType,\n canonicalText: nextCanonicalText,\n tenantId: typeof node.tenantId === \"string\" ? node.tenantId : undefined,\n });\n if (duplicate && String(duplicate._id) !== String(args.nodeId)) {\n throwStructuredMutationError({\n message:\n \"A canonical entity with this name already exists in the tenant scope.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"entity.canonical_text_unique_per_tenant\",\n suggestion:\n \"Merge the duplicate entity instead of renaming this node onto an existing canonical record.\",\n details: {\n nodeId: args.nodeId,\n duplicateNodeId: duplicate._id,\n canonicalText: nextCanonicalText,\n },\n });\n }\n }\n\n // Validate merged metadata against schema\n const validation = await validateEntityMetadata(\n ctx,\n node.nodeType,\n mergedMetadata,\n typeof node.tenantId === \"string\" ? node.tenantId : undefined\n );\n if (!validation.valid) {\n throwStructuredMutationError({\n message: `Entity metadata validation failed: ${validation.errors.join(\"; \")}`,\n status: 400,\n code: \"VALIDATION_ERROR\",\n invariantCode: \"entity.metadata_schema\",\n details: { errors: validation.errors },\n });\n }\n\n const updates: Record<string, unknown> = {\n metadata: mergedMetadata,\n updatedAt: now,\n };\n\n if (args.canonicalText !== undefined) {\n updates.canonicalText = nextCanonicalText;\n updates.contentHash = generateContentHash(node.nodeType, nextCanonicalText);\n updates.title =\n args.title !== undefined ? args.title : buildEntityTitle(nextCanonicalText);\n } else if (args.title !== undefined) {\n updates.title = args.title;\n }\n\n if (args.subtype !== undefined) {\n updates.subtype = args.subtype;\n }\n if (args.domain !== undefined) {\n updates.domain = args.domain;\n }\n if (args.tags !== undefined) {\n updates.tags = args.tags;\n }\n if (args.verificationStatus !== undefined) {\n updates.verificationStatus = args.verificationStatus;\n }\n if (args.externalIds !== undefined) {\n updates.externalIds = args.externalIds;\n }\n\n // Patch the node\n await ctx.db.patch(args.nodeId, updates);\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 with before/after diff (Invariant #14)\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"entity\",\n entityId: args.nodeId,\n changeType: \"entity_attributes_updated\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n canonicalText: node.canonicalText,\n title: node.title,\n subtype: node.subtype,\n domain: node.domain,\n tags: node.tags,\n verificationStatus: node.verificationStatus,\n externalIds: node.externalIds,\n metadata: existingMetadata,\n },\n newState: updates,\n projectId: scopeProjectId,\n });\n\n return { nodeId: args.nodeId, updated: true };\n },\n});\n\n// =============================================================================\n// MERGE ENTITIES\n// =============================================================================\n\n/**\n * Merge a duplicate entity into a canonical one.\n * Non-destructive: duplicate is preserved with status='superseded' and lineage.\n *\n * Steps:\n * 1. Create same_as edge between them\n * 2. Re-point all edges from duplicate → canonical\n * 3. Set duplicate status to 'superseded', supersededBy = canonical\n */\nexport const mergeEntities = mutation({\n args: {\n canonicalNodeId: v.id(\"epistemicNodes\"),\n duplicateNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const canonical = await ctx.db.get(args.canonicalNodeId);\n const duplicate = await ctx.db.get(args.duplicateNodeId);\n\n if (!canonical || !duplicate) {\n throwStructuredMutationError({\n message: \"One or both entity nodes not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n details: {\n canonicalNodeId: args.canonicalNodeId,\n duplicateNodeId: args.duplicateNodeId,\n },\n });\n }\n\n if (\n !isOntologicalNodeType(canonical.nodeType) ||\n !isOntologicalNodeType(duplicate.nodeType)\n ) {\n throwStructuredMutationError({\n message: \"Both nodes must be ontological entities to merge.\",\n status: 400,\n code: \"LIFECYCLE_VIOLATION\",\n invariantCode: \"entity.type_check\",\n });\n }\n\n if (args.canonicalNodeId === args.duplicateNodeId) {\n throwStructuredMutationError({\n message: \"Cannot merge an entity with itself.\",\n status: 400,\n code: \"SELF_MERGE\",\n invariantCode: \"entity.no_self_merge\",\n suggestion: \"Provide two different entity IDs to merge.\",\n details: { canonicalNodeId: args.canonicalNodeId },\n });\n }\n\n if (canonical.nodeType !== duplicate.nodeType) {\n throwStructuredMutationError({\n message: `Cannot merge different entity types: ${canonical.nodeType} vs ${duplicate.nodeType}.`,\n status: 400,\n code: \"TYPE_MISMATCH\",\n });\n }\n\n if (canonical.projectId) {\n await requireProjectWriteAccess(\n ctx,\n canonical.projectId as string,\n authenticatedUserId\n );\n }\n\n // 1. Create derived_from edge (canonical replacement for same_as)\n const edgeGlobalId = generateGlobalId();\n await ctx.db.insert(\"epistemicEdges\", {\n globalId: edgeGlobalId,\n fromNodeId: args.duplicateNodeId,\n toNodeId: args.canonicalNodeId,\n sourceGlobalId: duplicate.globalId,\n targetGlobalId: canonical.globalId,\n edgeType: \"derived_from\" as any,\n weight: 1.0,\n context: `Entity merge: ${duplicate.canonicalText} → ${canonical.canonicalText}`,\n createdBy: authenticatedUserId,\n createdAt: now,\n updatedAt: now,\n });\n\n // 2. Re-point all edges from duplicate → canonical\n // Edges where duplicate is the source\n const outgoingEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from\", (q: any) =>\n q.eq(\"fromNodeId\", args.duplicateNodeId)\n )\n .collect();\n\n for (const edge of outgoingEdges) {\n if (edge.toNodeId === args.canonicalNodeId) {\n continue; // Skip derived_from merge edge\n }\n await ctx.db.patch(edge._id, {\n fromNodeId: args.canonicalNodeId,\n sourceGlobalId: canonical.globalId,\n updatedAt: now,\n });\n }\n\n // Edges where duplicate is the target\n const incomingEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q: any) => q.eq(\"toNodeId\", args.duplicateNodeId))\n .collect();\n\n for (const edge of incomingEdges) {\n if (edge.fromNodeId === args.canonicalNodeId) {\n continue; // Skip derived_from merge edge\n }\n await ctx.db.patch(edge._id, {\n toNodeId: args.canonicalNodeId,\n targetGlobalId: canonical.globalId,\n updatedAt: now,\n });\n }\n\n // 3. Set duplicate status to 'superseded'\n const duplicateMetadata =\n (duplicate.metadata as Record<string, unknown>) || {};\n await ctx.db.patch(args.duplicateNodeId, {\n status: \"superseded\" as any,\n metadata: {\n ...duplicateMetadata,\n status: \"superseded\",\n supersededBy: args.canonicalNodeId,\n mergedAt: now,\n mergedBy: authenticatedUserId,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync for both nodes\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.canonicalNodeId,\n operation: \"upsert\",\n });\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.duplicateNodeId,\n operation: \"upsert\",\n });\n\n // Log to epistemic audit (Invariant #14)\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"entity\",\n entityId: args.canonicalNodeId,\n changeType: \"entity_merged\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n rationale: `Entity merge: absorbed ${args.duplicateNodeId} (${duplicate.canonicalText}). ${outgoingEdges.length + incomingEdges.length} edges re-pointed.`,\n previousState: null,\n newState: {\n nodeType: canonical.nodeType,\n canonicalText: canonical.canonicalText,\n },\n projectId: canonical.projectId,\n });\n\n // Count only edges that were actually re-pointed (exclude skipped same_as)\n const outgoingRepointed = outgoingEdges.filter(\n (e) => e.toNodeId !== args.canonicalNodeId\n ).length;\n const incomingRepointed = incomingEdges.filter(\n (e) => e.fromNodeId !== args.canonicalNodeId\n ).length;\n\n // OE-E: Reactive hook — schedule belief review for the canonical entity.\n // After merge, beliefs previously connected to the duplicate now point to\n // the canonical entity. Review whether those beliefs still hold.\n await ctx.scheduler.runAfter(\n 0,\n internal.lucernMcp.triggerEntityChangeReview,\n {\n entityNodeId: args.canonicalNodeId,\n changeDescription: `Merged with duplicate \"${duplicate.canonicalText}\". ${outgoingRepointed + incomingRepointed} edges re-pointed.`,\n userId: authenticatedUserId,\n }\n );\n\n return {\n canonicalNodeId: args.canonicalNodeId,\n duplicateNodeId: args.duplicateNodeId,\n edgesRepointed: outgoingRepointed + incomingRepointed,\n };\n },\n});\n\n// =============================================================================\n// ARCHIVE ENTITY\n// =============================================================================\n\n/**\n * Archive an entity. Sets status to 'archived'.\n * Non-destructive: entity preserved with full lineage.\n */\nexport const archiveEntity = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node) {\n throwStructuredMutationError({\n message: \"Entity not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n details: { nodeId: args.nodeId },\n });\n }\n\n if (!isOntologicalNodeType(node.nodeType)) {\n throwStructuredMutationError({\n message: `Node \"${args.nodeId}\" is a ${node.nodeType}, not an entity. Use belief archive APIs for epistemic nodes.`,\n status: 400,\n code: \"LIFECYCLE_VIOLATION\",\n invariantCode: \"entity.type_check\",\n });\n }\n\n if (node.projectId) {\n await requireProjectWriteAccess(\n ctx,\n node.projectId as string,\n authenticatedUserId\n );\n }\n\n await ctx.db.patch(args.nodeId, {\n status: \"archived\" as any,\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n // Log to epistemic audit (Invariant #14)\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"entity\",\n entityId: args.nodeId,\n changeType: \"entity_archived\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: { status: node.status },\n newState: { status: \"archived\" },\n projectId: node.projectId,\n });\n\n // OE-E: Reactive hook — schedule belief review for archived entity.\n // Beliefs that referenced this entity may need reassessment.\n await ctx.scheduler.runAfter(\n 0,\n internal.lucernMcp.triggerEntityChangeReview,\n {\n entityNodeId: args.nodeId,\n changeDescription: `Entity \"${node.canonicalText}\" was archived.`,\n userId: authenticatedUserId,\n }\n );\n\n return { nodeId: args.nodeId, archived: true };\n },\n});\n","/**\n * Entity Metadata Validation\n *\n * Validates entity metadata against registered schemas in schemaEnumConfig.\n * Strict on create (must pass), lenient on read (existing data tolerance).\n *\n * @module graph-primitives/entityValidation\n */\n\nimport type { MutationCtx, QueryCtx } from \"./convex\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\ntype FieldSchema = {\n type: \"string\" | \"number\" | \"boolean\";\n required: boolean;\n};\n\ntype EntitySchema = Record<string, FieldSchema>;\n\ntype ValidationResult = {\n valid: boolean;\n errors: string[];\n};\n\n// =============================================================================\n// SCHEMA LOOKUP\n// =============================================================================\n\n/**\n * Fetch the registered metadata schema for an entity type.\n * Returns null if no schema is registered.\n */\nexport async function getEntityTypeSchema(\n ctx: QueryCtx | MutationCtx,\n nodeType: string,\n tenantId?: string\n): Promise<EntitySchema | null> {\n // Try tenant-specific first, then platform default\n if (tenantId) {\n const tenantEntry = await (ctx.db as any)\n .query(\"schemaEnumConfig\")\n .withIndex(\"by_tenant_category\", (q: any) =>\n q.eq(\"tenantId\", tenantId).eq(\"category\", \"entity_type\")\n )\n .collect();\n\n const tenantMatch = tenantEntry.find(\n (e: any) => e.value === nodeType && e.status === \"active\"\n );\n if (tenantMatch?.metadata?.schema) {\n return tenantMatch.metadata.schema as EntitySchema;\n }\n }\n\n // Fall back to platform default\n const platformEntry = await (ctx.db as any)\n .query(\"schemaEnumConfig\")\n .withIndex(\"by_category_value\", (q: any) =>\n q.eq(\"category\", \"entity_type\").eq(\"value\", nodeType)\n )\n .first();\n\n if (platformEntry?.metadata?.schema && platformEntry.status === \"active\") {\n return platformEntry.metadata.schema as EntitySchema;\n }\n\n return null;\n}\n\n// =============================================================================\n// VALIDATION\n// =============================================================================\n\n/**\n * Validate entity metadata against the registered schema.\n *\n * Policy: strict on create (unregistered types fail), lenient on read.\n *\n * @param ctx - Convex query/mutation context\n * @param nodeType - The entity nodeType (e.g., \"company\", \"person\")\n * @param metadata - The metadata object to validate\n * @param tenantId - Optional tenant ID for tenant-specific schemas\n * @returns ValidationResult with errors if invalid\n */\nexport async function validateEntityMetadata(\n ctx: QueryCtx | MutationCtx,\n nodeType: string,\n metadata: Record<string, unknown> | undefined | null,\n tenantId?: string\n): Promise<ValidationResult> {\n const errors: string[] = [];\n\n const schema = await getEntityTypeSchema(ctx, nodeType, tenantId);\n\n if (!schema) {\n return {\n valid: false,\n errors: [\n `No registered schema for entity type \"${nodeType}\". Register it in schemaEnumConfig (category=\"entity_type\") before creating entities of this type.`,\n ],\n };\n }\n\n const meta = metadata || {};\n\n // Check required fields\n for (const [fieldName, fieldDef] of Object.entries(schema)) {\n if (fieldDef.required) {\n const value = meta[fieldName];\n if (value === undefined || value === null || value === \"\") {\n errors.push(`Required field \"${fieldName}\" is missing or empty`);\n }\n }\n }\n\n // Check field types for provided fields\n for (const [fieldName, value] of Object.entries(meta)) {\n const fieldDef = schema[fieldName];\n if (!fieldDef) {\n // Extra fields are allowed (loose metadata tolerance)\n continue;\n }\n\n if (value === undefined || value === null) {\n // null/undefined are allowed for optional fields (already caught above for required)\n continue;\n }\n\n const actualType = typeof value;\n if (actualType !== fieldDef.type) {\n errors.push(\n `Field \"${fieldName}\" expected type \"${fieldDef.type}\" but got \"${actualType}\"`\n );\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\n/**\n * Check if a nodeType is a registered entity type (platform or tenant).\n */\nexport async function isRegisteredEntityType(\n ctx: QueryCtx | MutationCtx,\n nodeType: string,\n tenantId?: string\n): Promise<boolean> {\n const schema = await getEntityTypeSchema(ctx, nodeType, tenantId);\n return schema !== null;\n}\n","/**\n * Shared UUID v4 generator for global IDs.\n *\n * Uses crypto.getRandomValues() for collision-safe generation.\n * Replaces the Math.random()-based UUID pattern that was duplicated\n * across 7+ files.\n *\n * @module convex/lib/globalId\n */\n\n/**\n * Generate a UUID v4 global ID using crypto-safe random bytes.\n */\nexport function generateGlobalId(): string {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n // Set version (4) and variant (RFC 4122)\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, \"0\")).join(\n \"\"\n );\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n","/**\n * Topic Ontology Resolution — Hybrid Inheritance\n *\n * Resolves the effective ontology for a topic by walking the parent chain.\n *\n * Strategy:\n * - If the topic has an ontologyId, return its ontology definition.\n * - Otherwise, walk up the parent chain until an ancestor with an ontologyId is found.\n * - Returns null if no ancestor in the chain has an ontology binding.\n *\n * This is a helper function callable from within Convex mutation/query handlers.\n * For the public query API, see topics.resolveTopicOntology.\n *\n * @module graph-primitives/topicOntologyResolver\n */\n\nimport type { Id } from \"./convex\";\n\n// Minimal topic shape needed for resolution (avoids importing full generated types)\ntype TopicDoc = {\n _id: Id<\"topics\">;\n name: string;\n depth: number;\n ontologyId?: Id<\"ontologyDefinitions\">;\n parentTopicId?: Id<\"topics\">;\n};\n\ntype OntologyDef = {\n _id: Id<\"ontologyDefinitions\">;\n ontologyKey: string;\n name: string;\n tier: \"platform\" | \"pack\" | \"tenant\";\n status: \"draft\" | \"active\" | \"deprecated\" | \"archived\";\n};\n\ntype OntologyVer = {\n _id: Id<\"ontologyVersions\">;\n ontologyId: Id<\"ontologyDefinitions\">;\n version: string;\n status: \"draft\" | \"published\" | \"deprecated\";\n entityTypes: Array<{ value: string; label: string; description?: string }>;\n edgeTypes: Array<{ value: string; label: string; description?: string }>;\n publishedAt?: number;\n};\n\nexport type ResolvedTopicOntology = {\n ontologyId: Id<\"ontologyDefinitions\">;\n ontologyKey: string;\n ontologyName: string;\n tier: string;\n source: \"direct\" | \"inherited\";\n sourceTopicId: Id<\"topics\">;\n /** Valid entity type values from the latest published version */\n validEntityTypes: string[];\n /** Valid edge type values from the latest published version */\n validEdgeTypes: string[];\n /** The published version, if any */\n publishedVersion: OntologyVer | null;\n};\n\nconst MAX_RESOLUTION_DEPTH = 10;\n\n/**\n * Resolve the effective ontology for a topic.\n *\n * @param ctx - Convex mutation/query context with db access\n * @param topicId - The topic to resolve the ontology for\n * @returns The resolved ontology or null if none is bound in the ancestor chain\n */\nexport async function resolveTopicOntologyInternal(\n ctx: { db: any },\n topicId: Id<\"topics\">\n): Promise<ResolvedTopicOntology | null> {\n let current = (await ctx.db.get(topicId)) as TopicDoc | null;\n if (!current) {\n return null;\n }\n\n const startTopicId = topicId;\n\n for (let i = 0; i < MAX_RESOLUTION_DEPTH && current; i++) {\n if (current.ontologyId) {\n const ontologyDef = (await ctx.db.get(\n current.ontologyId\n )) as OntologyDef | null;\n if (!ontologyDef || ontologyDef.status === \"archived\") {\n // Ontology was archived or deleted — continue walking up\n if (current.parentTopicId) {\n current = (await ctx.db.get(\n current.parentTopicId\n )) as TopicDoc | null;\n continue;\n }\n return null;\n }\n\n // Fetch the latest published version for this ontology\n const versions = (await ctx.db\n .query(\"ontologyVersions\")\n .withIndex(\"by_ontologyId\", (q: any) =>\n q.eq(\"ontologyId\", current?.ontologyId!)\n )\n .collect()) as OntologyVer[];\n\n const published = versions\n .filter((v) => v.status === \"published\")\n .sort((a, b) => (b.publishedAt ?? 0) - (a.publishedAt ?? 0));\n\n const latestPublished = published[0] ?? null;\n\n return {\n ontologyId: ontologyDef._id,\n ontologyKey: ontologyDef.ontologyKey,\n ontologyName: ontologyDef.name,\n tier: ontologyDef.tier,\n source: current._id === startTopicId ? \"direct\" : \"inherited\",\n sourceTopicId: current._id,\n validEntityTypes: latestPublished\n ? latestPublished.entityTypes.map((et) => et.value)\n : [],\n validEdgeTypes: latestPublished\n ? latestPublished.edgeTypes.map((et) => et.value)\n : [],\n publishedVersion: latestPublished,\n };\n }\n\n // No ontologyId on this topic — walk up\n if (!current.parentTopicId) {\n break;\n }\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n }\n\n return null;\n}\n\n/**\n * Validate that a nodeType is allowed by the resolved ontology for a topic.\n *\n * Returns { valid: true } if:\n * - The topic has no bound ontology (no constraint)\n * - The nodeType is in the ontology's published entity types\n *\n * Returns { valid: false, error } if:\n * - The topic has a bound ontology and the nodeType is not in its entity types\n */\nexport async function validateEntityTypeForTopic(\n ctx: { db: any },\n topicId: Id<\"topics\">,\n nodeType: string\n): Promise<{ valid: true } | { valid: false; error: string }> {\n const resolved = await resolveTopicOntologyInternal(ctx, topicId);\n\n // No ontology bound — all entity types are allowed\n if (!resolved) {\n return { valid: true };\n }\n\n // No published version — ontology exists but has no content yet, allow all\n if (resolved.validEntityTypes.length === 0) {\n return { valid: true };\n }\n\n // Check if nodeType is in the ontology's entity types\n if (resolved.validEntityTypes.includes(nodeType)) {\n return { valid: true };\n }\n\n return {\n valid: false,\n error: `Entity type \"${nodeType}\" is not defined in the ontology \"${resolved.ontologyKey}\" (${resolved.ontologyName}). Valid entity types: ${resolved.validEntityTypes.join(\", \")}. Source: ${resolved.source} from topic ${resolved.sourceTopicId}.`,\n };\n}\n","import type { EpistemicEvaluator } from \"../epistemicContracts\";\nimport { getRegisteredEpistemicEvaluators } from \"../epistemicContracts\";\nimport { lintCheckerEvaluator } from \"./lintCheckerEvaluator\";\nimport { sentryCheckerEvaluator } from \"./sentryCheckerEvaluator\";\nimport { testRunnerEvaluator } from \"./testRunnerEvaluator\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\nimport { tscCheckerEvaluator } from \"./tscCheckerEvaluator\";\n\nexport const ENGINEERING_EPISTEMIC_EVALUATORS: EngineeringEpistemicEvaluator[] =\n [\n testRunnerEvaluator,\n tscCheckerEvaluator,\n lintCheckerEvaluator,\n sentryCheckerEvaluator,\n ];\n\nexport const ENGINEERING_EVALUATOR_NAMES = new Set(\n ENGINEERING_EPISTEMIC_EVALUATORS.map((evaluator) => evaluator.name)\n);\n\nexport function getEngineeringEpistemicEvaluator(\n name: string\n): EngineeringEpistemicEvaluator | undefined {\n return ENGINEERING_EPISTEMIC_EVALUATORS.find(\n (evaluator) => evaluator.name === name\n );\n}\n\nexport function registerAllEngineeringEvaluators(\n registerEvaluator: (evaluator: EpistemicEvaluator) => void\n): void {\n for (const evaluator of ENGINEERING_EPISTEMIC_EVALUATORS) {\n registerEvaluator(evaluator);\n }\n}\n\nexport { lintCheckerEvaluator } from \"./lintCheckerEvaluator\";\nexport { sentryCheckerEvaluator } from \"./sentryCheckerEvaluator\";\nexport { testRunnerEvaluator } from \"./testRunnerEvaluator\";\nexport { tscCheckerEvaluator } from \"./tscCheckerEvaluator\";\n\nexport const RESEARCH_EVALUATOR_NAMES = [\n \"market_index_comparator\",\n \"metric_checker\",\n \"reference_check_counter\",\n \"temporal_deadline\",\n] as const;\n\nexport type ResearchEvaluatorName = (typeof RESEARCH_EVALUATOR_NAMES)[number];\n\nexport function registerAllResearchEvaluators(): ResearchEvaluatorName[] {\n const registered = new Set(getRegisteredEpistemicEvaluators());\n return RESEARCH_EVALUATOR_NAMES.filter((name) => registered.has(name));\n}\n","/**\n * Epistemic Beliefs API\n *\n * Clean API for managing beliefs in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces beliefs.ts.\n *\n * Key differences from beliefs.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no runtime ID translation fallback)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { v } from \"convex/values\";\nimport {\n detectTupleContradiction,\n evaluateTupleContradictionTransition,\n confidenceFromSL,\n normalizeTupleContradictionPolicy,\n readOpinionFromRecord,\n type ConfidencePolicyConfig,\n type Opinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport {\n checkProjectAccess,\n checkScopeAccess,\n} from \"@lucern/access-control/access\";\nimport {\n canAudienceClassAccess,\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { listAudienceRegistryRows } from \"@lucern/access-control/audienceRegistry\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { assertSchemaEnumValue } from \"@lucern/schema-management/enumValidation\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\nimport {\n type BeliefLifecycleStatus,\n isPreValidationBeliefStatus,\n promoteBeliefStatusAfterScoring,\n resolveBeliefLifecycleStatus,\n} from \"./beliefLifecycle\";\nimport type { Doc, Id, MutationCtx } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport { collectConfidencePropagationDispatches } from \"./confidencePropagationDispatch\";\nimport {\n createInheritedContractRecord,\n type VerificationConfidenceTrigger,\n} from \"./epistemicContractHelpers\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { generateGlobalId } from \"./globalId\";\nimport { computeLogicalRole } from \"./logicalRoleInference\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n nodeMatchesWorkspaceReasoningScope,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\n// All IDs now use epistemicNodes exclusively\nconst insightIdUnion = v.id(\"epistemicNodes\");\nconst DEFAULT_PROJECT_BELIEF_LIMIT = 250;\nconst MAX_PROJECT_BELIEF_LIMIT = 1000;\nconst optionalBeliefScopeArgs = optionalScopeArgs;\n\ntype StructuredMutationError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype BeliefScopeArgs = {\n projectId?: string | null;\n topicId?: string | null;\n};\n\ntype AudienceClass = \"internal\" | \"restricted_external\" | \"public\";\n\nconst DEFAULT_CONFIDENCE_POLICY: ConfidencePolicyConfig = {\n scoringMode: \"after_worktree\",\n tupleContradiction: normalizeTupleContradictionPolicy(),\n};\n\nexport type BeliefConfidenceTrigger =\n | \"initial\"\n | \"evidence_added\"\n | \"evidence_removed\"\n | \"contradiction_detected\"\n | \"contradiction_resolved\"\n | \"manual\"\n | \"decay\"\n | \"agent_assessment\"\n | \"worktree_outcome\"\n | \"worktree_completed\"\n // SL-specific triggers\n | \"fusion\"\n | \"discount\"\n | \"deduction\"\n | \"backfill_synthetic\"\n | VerificationConfidenceTrigger;\n\nfunction throwStructuredMutationError(args: {\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredMutationError;\n error.status = args.status;\n error.code = args.code;\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nfunction readFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nfunction assertBaseRateInRange(baseRate: number, field = \"baseRate\"): number {\n if (baseRate < 0 || baseRate > 1) {\n throwStructuredMutationError({\n message: `${field} must be within [0, 1].`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Clamp ${field} into the inclusive [0, 1] interval.`,\n details: { field, baseRate },\n });\n }\n return baseRate;\n}\n\nfunction buildBeliefConfidenceRow(args: {\n beliefId: Id<\"epistemicNodes\">;\n belief: number;\n disbelief: number;\n uncertainty: number;\n baseRate: number;\n trigger: BeliefConfidenceTrigger;\n rationale?: string;\n assessedBy: string;\n assessedAt: number;\n slOperator?: SLOperator;\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringContradictionId?: Id<\"contradictions\">;\n triggeringWorktreeId?: string;\n}) {\n return {\n beliefId: args.beliefId,\n confidence: confidenceFromSL(\n args.belief,\n args.disbelief,\n args.uncertainty,\n args.baseRate\n ),\n belief: args.belief,\n disbelief: args.disbelief,\n uncertainty: args.uncertainty,\n baseRate: args.baseRate,\n slOperator: args.slOperator ?? (\"manual_assessment\" as const),\n trigger: args.trigger,\n ...(args.rationale ? { rationale: args.rationale } : {}),\n assessedBy: args.assessedBy,\n assessedAt: args.assessedAt,\n ...(args.triggeringEvidenceId\n ? {\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringEvidenceIds: [String(args.triggeringEvidenceId)],\n }\n : {}),\n ...(args.triggeringContradictionId\n ? {\n triggeringContradictionId: args.triggeringContradictionId,\n }\n : {}),\n ...(args.triggeringWorktreeId\n ? { triggeringWorktreeId: args.triggeringWorktreeId }\n : {}),\n };\n}\n\nfunction deriveSyntheticBackfillOpinion(\n source: Record<string, unknown>\n): { b: number; d: number; u: number; a: number } {\n const belief = readFiniteNumber(source.opinion_b) ?? readFiniteNumber(source.belief);\n const disbelief =\n readFiniteNumber(source.opinion_d) ?? readFiniteNumber(source.disbelief);\n const uncertainty =\n readFiniteNumber(source.opinion_u) ?? readFiniteNumber(source.uncertainty);\n const baseRate =\n readFiniteNumber(source.opinion_a) ?? readFiniteNumber(source.baseRate);\n\n if (\n belief !== undefined ||\n disbelief !== undefined ||\n uncertainty !== undefined ||\n baseRate !== undefined\n ) {\n return readOpinionFromRecord(source, {\n b: 0,\n d: 0,\n u: 1,\n a: 0.5,\n });\n }\n\n const confidence = clamp01(readFiniteNumber(source.confidence) ?? 0);\n return {\n b: confidence,\n d: 1 - confidence,\n u: 0,\n a: 0.5,\n };\n}\n\nfunction clampBeliefLimit(\n limit: number | undefined,\n fallback = DEFAULT_PROJECT_BELIEF_LIMIT\n): number {\n if (!Number.isFinite(limit)) {\n return fallback;\n }\n return Math.max(\n 1,\n Math.min(Math.floor(limit as number), MAX_PROJECT_BELIEF_LIMIT)\n );\n}\n\nfunction readTupleContradictedFlag(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction readBeliefOpinionSnapshot(\n node: Doc<\"epistemicNodes\">,\n metadata: Record<string, unknown>\n): Opinion {\n return readOpinionFromRecord(\n {\n ...metadata,\n opinion_b: (node as any).opinion_b,\n opinion_d: (node as any).opinion_d,\n opinion_u: (node as any).opinion_u,\n opinion_a: (node as any).opinion_a,\n },\n { b: 0, d: 0, u: 1, a: 0.5 }\n );\n}\n\nfunction deriveTupleContradictionSeverity(\n node: Doc<\"epistemicNodes\">\n): \"critical\" | \"significant\" | \"minor\" {\n const metadata = (node.metadata || {}) as Record<string, unknown>;\n const criticality = typeof metadata.criticality === \"string\"\n ? metadata.criticality\n : undefined;\n\n if (criticality === \"blocking\") {\n return \"critical\";\n }\n if (criticality === \"supporting\") {\n return \"minor\";\n }\n return \"significant\";\n}\n\nfunction formatTupleContradictionDescription(args: {\n opinion: Opinion;\n policy: ConfidencePolicyConfig[\"tupleContradiction\"];\n}): string {\n return `Tuple-space contradiction detected: b=${args.opinion.b.toFixed(2)} > ${args.policy.beliefThreshold.toFixed(2)} and d=${args.opinion.d.toFixed(2)} > ${args.policy.disbeliefThreshold.toFixed(2)}.`;\n}\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction generateContentHash(text: string): string {\n const content = `belief:${text.trim().toLowerCase().replace(/\\s+/g, \" \")}`;\n let hash = 5381;\n for (let i = 0; i < content.length; i++) {\n hash = (hash << 5) + hash + content.charCodeAt(i);\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\nexport function resolveBeliefWorktreeId(\n metadata: Record<string, unknown> | undefined\n): string | undefined {\n const worktreeId = metadata?.worktreeId;\n if (typeof worktreeId === \"string\" && worktreeId.trim().length > 0) {\n return worktreeId;\n }\n\n const sprintId = metadata?.sprintId;\n return typeof sprintId === \"string\" && sprintId.trim().length > 0\n ? sprintId\n : undefined;\n}\n\n// Map pillar names to valid pillar literals\ntype ValidPillar =\n | \"market\"\n | \"competition\"\n | \"product\"\n | \"team\"\n | \"financials\"\n | \"regulatory\"\n | \"timing\"\n | \"customer\"\n | \"technology\"\n | \"distribution\"\n | \"deal\"\n | \"risks\"\n | \"other\";\n\nfunction normalizePillar(pillar?: string): ValidPillar {\n if (!pillar) {\n return \"other\";\n }\n const lower = pillar.toLowerCase();\n const validPillars: ValidPillar[] = [\n \"market\",\n \"competition\",\n \"product\",\n \"team\",\n \"financials\",\n \"regulatory\",\n \"timing\",\n \"customer\",\n \"technology\",\n \"distribution\",\n \"deal\",\n \"risks\",\n ];\n return (validPillars.find((p) => lower.includes(p)) ||\n \"other\") as ValidPillar;\n}\n\nasync function markBeliefGraphDirty(\n ctx: any,\n scope: { projectId?: string | null; topicId?: string | null }\n): Promise<void> {\n const projectId =\n typeof scope.projectId === \"string\" && scope.projectId.trim().length > 0\n ? scope.projectId\n : undefined;\n const topicId =\n typeof scope.topicId === \"string\" && scope.topicId.trim().length > 0\n ? scope.topicId\n : undefined;\n\n if (!projectId && !topicId) {\n return;\n }\n\n if (projectId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n { projectId }\n );\n }\n if (topicId) {\n await ctx.scheduler.runAfter(\n 0,\n (internal.graphAnalysisCache as any).markCacheStaleByTopic,\n { topicId }\n );\n }\n\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n topicId ?? projectId!,\n {\n lastActivityAt: Date.now(),\n }\n );\n}\n\nasync function resolveBeliefScopeOrNull(\n ctx: any,\n args: BeliefScopeArgs\n) {\n if (!args.projectId && !args.topicId) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n projectId: args.projectId ?? undefined,\n topicId: args.topicId ?? undefined,\n });\n } catch {\n return null;\n }\n}\n\nasync function getBeliefNodesForScope(\n ctx: {\n db: {\n query: (...args: any[]) => {\n withIndex: (...args: any[]) => any;\n };\n };\n },\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n args?: { scanLimit?: number; status?: string }\n) {\n const baseQuery = ctx.db.query(\"epistemicNodes\").withIndex(\n scope.topicId ? \"by_topic_type\" : \"by_project_type\",\n (q: any) =>\n scope.topicId\n ? q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n : q.eq(\"projectId\", scope.projectId).eq(\"nodeType\", \"belief\")\n );\n const nodes =\n typeof args?.scanLimit === \"number\"\n ? await baseQuery.order(\"desc\").take(args.scanLimit)\n : await baseQuery.collect();\n const scopedNodes = nodes.filter((node: Doc<\"epistemicNodes\">) =>\n nodeMatchesWorkspaceReasoningScope(node, scope)\n );\n\n if (!args?.status) {\n return scopedNodes;\n }\n\n return scopedNodes.filter((node) => node.status === args.status);\n}\n\nfunction createBeliefAudienceResolver(\n registryRows: Array<{\n audienceKey?: string | null;\n audienceClass: AudienceClass;\n }>\n) {\n const audienceClassByKey = new Map<string, AudienceClass>(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ])\n );\n\n return (\n audienceKey: string | undefined | null,\n fallback: AudienceClass\n ): AudienceClass => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return (\n audienceClassByKey.get(key) ??\n (classFromAudienceKey(key, fallback) as AudienceClass)\n );\n };\n}\n\nexport function flattenBeliefNode(node: Doc<\"epistemicNodes\">) {\n const meta = (node.metadata || {}) as Record<string, unknown>;\n const worktreeId = resolveBeliefWorktreeId(meta);\n const tupleContradicted =\n readTupleContradictedFlag((node as any).tupleContradicted) ??\n readTupleContradictedFlag(meta.tupleContradicted) ??\n false;\n\n return {\n _id: node._id,\n _epistemicNodeId: node._id,\n _creationTime: node._creationTime,\n belief: node.canonicalText,\n formulation: node.canonicalText,\n projectId: node.projectId,\n topicId: node.topicId,\n userId: (node as any).userId || node.createdBy || \"\",\n confidence: (meta.confidence as \"high\" | \"medium\" | \"low\") || \"untested\",\n status: node.status,\n beliefStatus: resolveBeliefStatus(node, meta),\n topic: (meta.topic as string) || (meta.pillar as string) || \"other\",\n pillar: (meta.pillar as string) || (meta.topic as string) || \"\",\n category: (meta.category as string) || \"\",\n subcategory: (meta.subcategory as string) || \"\",\n categoryIcon: (meta.categoryIcon as string) || \"\",\n supportingEvidence: (meta.supportingEvidenceIds as string[]) || [],\n contradictingEvidence: (meta.contradictingEvidenceIds as string[]) || [],\n testingQuestions: (meta.testingQuestionIds as string[]) || [],\n linkedInsights: (meta.linkedInsightIds as string[]) || [],\n createdAt: node.createdAt,\n updatedAt: node.updatedAt || node.createdAt,\n tupleContradicted,\n sprintId: (meta.sprintId as string) || undefined,\n worktreeId,\n sourceBeliefIds: (meta.sourceBeliefIds as string[]) || undefined,\n criticality:\n (meta.criticality as\n | \"critical\"\n | \"supporting\"\n | \"nice_to_have\"\n | \"unanalyzed\"\n | \"blocking\"\n | \"important\") || \"unanalyzed\",\n rationale: (meta.rationale as string) || \"\",\n audienceLabel: node.audienceLabel,\n policyTags: node.policyTags,\n sensitivityTier: node.sensitivityTier,\n exportClass: node.exportClass,\n anonymizationClass: node.anonymizationClass,\n };\n}\n\nfunction resolveBeliefStatus(\n node: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n },\n metadata: Record<string, unknown>\n): BeliefLifecycleStatus {\n return resolveBeliefLifecycleStatus({\n beliefStatus: node.beliefStatus,\n confidence: node.confidence,\n predictionMeta: node.predictionMeta,\n metadata,\n });\n}\n\nasync function hasCompletedWorktreeForBelief(\n ctx: { db: any },\n beliefNodeId: Id<\"epistemicNodes\">,\n): Promise<boolean> {\n // Check if the belief is linked to a completed worktree via worktreeBeliefCluster\n const clusterMembership = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_belief\", (q: any) => q.eq(\"beliefId\", beliefNodeId))\n .collect();\n for (const membership of clusterMembership) {\n const worktree = await ctx.db.get(membership.worktreeId);\n if (worktree?.status === \"completed\" || worktree?.status === \"merged\") {\n return true;\n }\n }\n return false;\n}\n\nasync function getActiveConfidencePolicy(\n ctx: { db: any },\n): Promise<ConfidencePolicyConfig> {\n try {\n const activeConfig = await ctx.db\n .query(\"logicSprintScoring\")\n .withIndex(\"by_active\", (q: any) => q.eq(\"isActive\", true))\n .first();\n\n return {\n scoringMode:\n activeConfig?.confidencePolicy === \"always\"\n ? \"always\"\n : DEFAULT_CONFIDENCE_POLICY.scoringMode,\n tupleContradiction: normalizeTupleContradictionPolicy(\n activeConfig?.tupleContradictionPolicy as\n | Partial<ConfidencePolicyConfig[\"tupleContradiction\"]>\n | undefined\n ),\n };\n } catch {\n // K-tier/component environments do not carry logicSprintScoring.\n return DEFAULT_CONFIDENCE_POLICY;\n }\n}\n\nexport async function applyBeliefConfidenceChange(\n ctx: MutationCtx,\n args: {\n nodeId: Id<\"epistemicNodes\">;\n // SL opinion — the ONLY confidence input (EK-7)\n belief: number; // b: evidence FOR [0,1]\n disbelief: number; // d: evidence AGAINST [0,1]\n uncertainty: number; // u: lack of evidence [0,1]\n baseRate?: number; // a: prior probability [0,1], defaults to 0.5\n trigger: BeliefConfidenceTrigger;\n rationale?: string;\n authenticatedUserId: string;\n slOperator?: SLOperator; // which SL operator produced this opinion\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringWorktreeId?: string;\n }\n): Promise<{\n nodeId: Id<\"epistemicNodes\">;\n previousConfidence: number;\n newConfidence: number;\n opinion: { b: number; d: number; u: number; a: number };\n beliefConfidenceId: Id<\"beliefConfidence\">;\n}> {\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node) {\n throwStructuredMutationError({\n message: \"Node not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion:\n \"Verify nodeId points to an existing node before modulating confidence.\",\n details: { nodeId: args.nodeId },\n });\n }\n if (node.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `modulateConfidence only applies to belief nodes. Received nodeType \"${node.nodeType}\". Entity nodes (company, person, investor, etc.) do not have confidence — use entityLifecycle.updateEntityAttributes for mutable entity data.`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"entity.no_confidence\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes for entity mutations. modulateConfidence is for belief nodes only.\",\n details: { nodeId: args.nodeId, nodeType: node.nodeType },\n });\n }\n if (!node.projectId) {\n throwStructuredMutationError({\n message: \"Belief has no project scope.\",\n status: 400,\n code: \"MISSING_SCOPE\",\n invariantCode: \"belief.project_required\",\n suggestion: \"Belief must have a projectId to modulate confidence.\",\n details: { nodeId: args.nodeId },\n });\n }\n await requireProjectWriteAccess(ctx, node.projectId, args.authenticatedUserId);\n\n const existingMetadata = (node.metadata || {}) as Record<string, unknown>;\n const currentBeliefStatus = resolveBeliefStatus(node, existingMetadata);\n const confidencePolicy = await getActiveConfidencePolicy(ctx);\n if (\n confidencePolicy.scoringMode === \"after_worktree\" &&\n isPreValidationBeliefStatus(currentBeliefStatus)\n ) {\n const hasCompletedWorktree = await hasCompletedWorktreeForBelief(\n ctx,\n args.nodeId,\n );\n if (!hasCompletedWorktree) {\n throwStructuredMutationError({\n message:\n \"Cannot score belief before worktree completion. Complete a worktree that tests this belief first.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"belief.confidence_append_only\",\n suggestion:\n \"Complete a worktree linked to this belief before recording confidence modulation.\",\n details: { nodeId: args.nodeId },\n });\n }\n }\n\n const previousConfidence = node.confidence || 0.5;\n const predictionMeta =\n (node as any).predictionMeta || existingMetadata.predictionMeta;\n const previousOpinion = readBeliefOpinionSnapshot(node, existingMetadata);\n\n // SL opinion — the only path (EK-7)\n const slB = args.belief;\n const slD = args.disbelief;\n const slU = args.uncertainty;\n const slA = args.baseRate ?? 0.5;\n const nextOpinion = { b: slB, d: slD, u: slU, a: slA };\n const derivedConfidence = confidenceFromSL(slB, slD, slU, slA);\n const isFirstScoring =\n typeof node.confidence !== \"number\" || !Number.isFinite(node.confidence);\n const previousTupleContradicted =\n readTupleContradictedFlag((node as any).tupleContradicted) ??\n readTupleContradictedFlag(existingMetadata.tupleContradicted) ??\n detectTupleContradiction(\n previousOpinion,\n confidencePolicy.tupleContradiction.beliefThreshold,\n confidencePolicy.tupleContradiction.disbeliefThreshold\n );\n const tupleTransition = evaluateTupleContradictionTransition({\n previousTupleContradicted,\n opinion: nextOpinion,\n policy: confidencePolicy.tupleContradiction,\n });\n const tupleContradictionDescription = formatTupleContradictionDescription({\n opinion: nextOpinion,\n policy: tupleTransition.policy,\n });\n\n const newBeliefStatus = promoteBeliefStatusAfterScoring(\n currentBeliefStatus,\n {\n confidence: derivedConfidence,\n predictionMeta,\n metadata: existingMetadata,\n }\n );\n\n let tupleContradictionId: Id<\"contradictions\"> | undefined;\n if (tupleTransition.crossedIntoTupleContradiction) {\n tupleContradictionId = (await ctx.runMutation(\"contradictions:create\" as any, {\n projectId: node.projectId,\n topicId: node.topicId as any,\n beliefId: args.nodeId,\n beliefBId: args.nodeId,\n supportingInsightIds: [],\n contradictingInsightIds: [],\n severity: deriveTupleContradictionSeverity(node),\n source: \"tuple_space\",\n detectionMethod: \"agent\",\n description: tupleContradictionDescription,\n createdBy: args.authenticatedUserId,\n })) as Id<\"contradictions\">;\n }\n\n await ctx.db.patch(args.nodeId, {\n confidence: derivedConfidence,\n beliefStatus: newBeliefStatus,\n tupleContradicted: tupleTransition.tupleContradicted,\n updatedAt: now,\n // Store SL opinion fields at node level for fast access\n opinion_b: slB,\n opinion_d: slD,\n opinion_u: slU,\n opinion_a: slA,\n metadata: {\n ...existingMetadata,\n beliefStatus: newBeliefStatus,\n slBelief: slB,\n slDisbelief: slD,\n slUncertainty: slU,\n slBaseRate: slA,\n tupleContradicted: tupleTransition.tupleContradicted,\n },\n } as any);\n\n if (isFirstScoring) {\n const nodeTopicId = node.topicId;\n const themeNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic\", (q: any) =>\n q.eq(\"topicId\", nodeTopicId || node.projectId))\n .filter((q) => q.eq(q.field(\"nodeType\"), \"theme\"))\n .collect();\n\n for (const theme of themeNodes) {\n if (theme.globalId && node.globalId) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: `edge-${node.globalId}-relates_to_thesis-${theme.globalId}`,\n fromGlobalId: node.globalId,\n toGlobalId: theme.globalId,\n edgeType: \"relates_to_thesis\",\n weight: derivedConfidence,\n createdBy: args.authenticatedUserId,\n topicId: String(node.projectId),\n fromNodeType: \"belief\",\n toNodeType: \"theme\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n }\n }\n }\n\n const storedRationale =\n args.rationale ??\n `Confidence changed from ${previousConfidence.toFixed(2)} (nodeId: ${args.nodeId})`;\n\n const beliefConfidenceId = (await ctx.db.insert(\"beliefConfidence\", {\n ...buildBeliefConfidenceRow({\n beliefId: args.nodeId as Id<\"epistemicNodes\">,\n belief: slB,\n disbelief: slD,\n uncertainty: slU,\n baseRate: slA,\n trigger: args.trigger,\n rationale: storedRationale,\n assessedBy: args.authenticatedUserId,\n assessedAt: now,\n slOperator: args.slOperator,\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringContradictionId: tupleContradictionId,\n triggeringWorktreeId: args.triggeringWorktreeId,\n }),\n } as any)) as Id<\"beliefConfidence\">;\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"confidence_changed\",\n previousState: {\n confidence: previousConfidence,\n tupleContradicted: previousTupleContradicted,\n },\n newState: {\n opinion: nextOpinion,\n confidence: derivedConfidence,\n trigger: args.trigger,\n rationale: storedRationale,\n tupleContradicted: tupleTransition.tupleContradicted,\n tupleContradictionPolicy: tupleTransition.policy,\n ...(tupleContradictionId\n ? { tupleContradictionId: String(tupleContradictionId) }\n : {}),\n },\n changedBy: args.authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n topicId: node.topicId,\n });\n\n if (\n tupleTransition.crossedIntoTupleContradiction ||\n tupleTransition.crossedOutOfTupleContradiction\n ) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n previousState: { tupleContradicted: previousTupleContradicted },\n newState: {\n tupleContradicted: tupleTransition.tupleContradicted,\n action: tupleTransition.crossedIntoTupleContradiction\n ? \"tuple_contradiction_detected\"\n : \"tuple_contradiction_cleared\",\n opinion: nextOpinion,\n tupleContradictionPolicy: tupleTransition.policy,\n ...(tupleContradictionId\n ? { tupleContradictionId: String(tupleContradictionId) }\n : {}),\n },\n rationale: tupleTransition.crossedIntoTupleContradiction\n ? tupleContradictionDescription\n : `Tuple-space contradiction cleared: b=${nextOpinion.b.toFixed(2)}, d=${nextOpinion.d.toFixed(2)} no longer exceed the configured policy thresholds.`,\n changedBy: args.authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n topicId: node.topicId,\n });\n }\n\n if (Math.abs(derivedConfidence - previousConfidence) >= 0.15) {\n await ctx.scheduler.runAfter(\n 5000,\n internal.bi.contradictionSemanticDetector.scanAffectedBeliefs,\n {\n beliefId: args.nodeId as string,\n projectId: node.projectId,\n }\n );\n }\n\n // WT-4: Re-evaluate publication rules after confidence changes.\n // Publication is visibility-based: rules auto-determine which workspace\n // nodes are exposed at tenant scope based on confidence thresholds, etc.\n if (node.workspaceId && node.tenantId) {\n await ctx.scheduler.runAfter(\n 0,\n (internal as any).publication.evaluateNodePublication,\n { nodeId: args.nodeId }\n );\n }\n\n return {\n nodeId: args.nodeId,\n previousConfidence,\n newConfidence: derivedConfidence,\n opinion: { b: slB, d: slD, u: slU, a: slA },\n beliefConfidenceId,\n };\n}\n\nfunction propagationTriggerForEdge(\n edgeType: string,\n weight: number\n): BeliefConfidenceTrigger {\n if (edgeType === \"contradicts\" || edgeType === \"refutes\") {\n return \"contradiction_detected\";\n }\n\n if ((edgeType === \"supports\" || edgeType === \"informs\") && weight < 0) {\n return \"contradiction_detected\";\n }\n\n return \"evidence_added\";\n}\n\n// =============================================================================\n// SL PROPAGATION — EDGE-DEFINED OPINION PROPAGATION (EK-7, LKC-5)\n// =============================================================================\n\n/**\n * Propagate a confidence change through graph edges whose specs allow it.\n *\n * After a belief is scored, this function:\n * 1. Reads the graph-primitives edge propagation specs\n * 2. Traverses matching incoming/outgoing/bidirectional edges hop by hop\n * 3. Applies the edge operator with per-hop damping and hop limits\n * 4. Writes propagated opinions as new beliefConfidence entries\n */\nexport const propagateConfidenceChange = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n opinion_b: v.number(),\n opinion_d: v.number(),\n opinion_u: v.number(),\n opinion_a: v.number(),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const sourceOpinion = {\n b: args.opinion_b,\n d: args.opinion_d,\n u: args.opinion_u,\n a: args.opinion_a,\n };\n\n const sourceNode = await ctx.db.get(args.nodeId);\n const sourceScope = await resolveNodeScopeForWorkspaceIsolation(\n ctx,\n sourceNode\n );\n const dispatches = await collectConfidencePropagationDispatches({\n sourceNodeId: args.nodeId,\n sourceOpinion,\n sourceScope,\n queryEdges: async ({ nodeId, spec, direction }) => {\n return await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\n direction === \"outgoing\" ? \"by_from_type\" : \"by_to_type\",\n (q: any) =>\n direction === \"outgoing\"\n ? q.eq(\"fromNodeId\", nodeId).eq(\"edgeType\", spec.edgeType)\n : q.eq(\"toNodeId\", nodeId).eq(\"edgeType\", spec.edgeType)\n )\n .collect();\n },\n getNode: async (nodeId) => await ctx.db.get(nodeId),\n });\n\n for (const dispatch of dispatches) {\n await applyBeliefConfidenceChange(ctx, {\n nodeId: dispatch.targetNodeId,\n belief: dispatch.opinion.b,\n disbelief: dispatch.opinion.d,\n uncertainty: dispatch.opinion.u,\n baseRate: dispatch.opinion.a,\n trigger: propagationTriggerForEdge(dispatch.edgeType, dispatch.weight),\n rationale: `SL propagation via ${dispatch.edgeType} edge: ${dispatch.rationale}`,\n authenticatedUserId: args.userId,\n slOperator: dispatch.operator as SLOperator,\n });\n }\n\n return {\n propagated: dispatches.map((dispatch) => ({\n targetNodeId: String(dispatch.targetNodeId),\n edgeType: dispatch.edgeType,\n operator: dispatch.operator,\n })),\n count: dispatches.length,\n };\n },\n});\n\nasync function requireAuthenticatedUserId(ctx: {\n auth: { getUserIdentity: () => Promise<unknown> };\n}): Promise<string> {\n const userId = await getCurrentUserId(ctx as any);\n if (!userId) {\n throwStructuredMutationError({\n message: \"Authentication required.\",\n status: 401,\n code: \"AUTHENTICATION_REQUIRED\",\n invariantCode: \"auth.required\",\n suggestion:\n \"Provide a valid bearer token before invoking belief mutations.\",\n });\n }\n return userId;\n}\n\nasync function requireProjectWriteAccess(\n ctx: { db: unknown },\n projectId: string,\n userId: string\n): Promise<void> {\n const hasAccess = await checkProjectAccess(ctx as any, projectId, userId);\n if (!hasAccess) {\n throwStructuredMutationError({\n message: \"Project access required.\",\n status: 403,\n code: \"FORBIDDEN\",\n invariantCode: \"policy.scope_required\",\n suggestion: \"Request write access for the project and retry.\",\n details: { projectId, userId },\n });\n }\n}\n\n// =============================================================================\n// CREATE\n// =============================================================================\n\n/**\n * Create a new belief in the epistemic spine.\n * Returns the epistemicNodes ID directly (not a beliefs ID).\n */\nexport const create = mutation({\n args: {\n ...optionalBeliefScopeArgs,\n formulation: v.string(),\n beliefType: v.optional(v.string()),\n rationale: v.optional(v.string()),\n confidence: v.optional(\n v.union(\n v.literal(\"untested\"),\n v.literal(\"high\"),\n v.literal(\"medium\"),\n v.literal(\"low\")\n )\n ),\n pillar: v.optional(v.string()),\n worktreeId: v.optional(v.string()),\n sourceType: v.optional(\n v.union(\n v.literal(\"human\"),\n v.literal(\"ai_extracted\"),\n v.literal(\"ai_generated\")\n )\n ),\n userId: v.string(),\n // === CLASSIFICATION FIELDS ===\n reversibility: v.optional(\n v.union(\n v.literal(\"irreversible\"),\n v.literal(\"hard_to_reverse\"),\n v.literal(\"reversible\"),\n v.literal(\"trivial\")\n )\n ),\n predictionMeta: v.optional(\n v.object({\n isPrediction: v.boolean(),\n registeredAt: v.number(),\n expectedBy: v.optional(v.number()),\n })\n ),\n baseRate: v.number(),\n metadata: v.optional(v.any()), // Additional metadata including isConditional\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"belief\",\n mutationName: \"epistemicBeliefs.create\",\n });\n const topic = await ctx.db.get(scope.topicId);\n const normalizedBeliefType = await assertSchemaEnumValue(ctx, {\n category: \"belief_type\",\n value: args.beliefType,\n tenantId: topic?.tenantId,\n context: \"epistemicBeliefs.create\",\n });\n if (scope.projectId) {\n await requireProjectWriteAccess(\n ctx,\n scope.projectId,\n authenticatedUserId\n );\n }\n const now = Date.now();\n const baseRate = assertBaseRateInRange(args.baseRate);\n const initialBeliefStatus = args.worktreeId ? \"hypothesis\" : \"assumption\";\n const initialEpistemicStatus = args.worktreeId ? \"hypothesis\" : \"assumption\";\n const seedOpinion = {\n opinion_b: 0,\n opinion_d: 0,\n opinion_u: 1,\n opinion_a: baseRate,\n };\n const pillar = normalizePillar(args.pillar);\n\n // Merge additional metadata with standard metadata\n const additionalMeta = (args.metadata as Record<string, unknown>) || {};\n\n // Create the epistemic node\n const beliefGlobalId = generateGlobalId();\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId: beliefGlobalId,\n nodeType: \"belief\",\n epistemicLayer: \"L3\",\n canonicalText: args.formulation,\n contentHash: generateContentHash(args.formulation),\n content: args.rationale,\n title:\n args.formulation.slice(0, 100) +\n (args.formulation.length > 100 ? \"...\" : \"\"),\n metadata: {\n pillar,\n // No confidenceLevel — only set after worktree completion via modulateConfidence()\n status: \"active\",\n worktreeId: args.worktreeId,\n beliefStatus: initialBeliefStatus,\n epistemicStatus: initialEpistemicStatus,\n tupleContradicted: false,\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n ...additionalMeta, // Includes isConditional if provided\n },\n beliefStatus: initialBeliefStatus as any,\n ...seedOpinion,\n tupleContradicted: false,\n // Classification fields\n reversibility: args.reversibility ?? \"reversible\",\n predictionMeta: args.predictionMeta,\n // Infer epistemicStatus based on context\n epistemicStatus: initialEpistemicStatus as any,\n sourceType: args.sourceType || \"human\",\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n confidence: undefined, // No scalar confidence until worktree completion\n verificationStatus: \"unverified\",\n status: \"active\",\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n createdBy: authenticatedUserId,\n createdAt: now,\n updatedAt: now,\n });\n\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: nodeId,\n belief: seedOpinion.opinion_b,\n disbelief: seedOpinion.opinion_d,\n uncertainty: seedOpinion.opinion_u,\n baseRate,\n trigger: \"initial\",\n rationale:\n \"LKC-2 mandatory prior: seeded vacuous opinion at belief creation.\",\n assessedBy: authenticatedUserId,\n assessedAt: now,\n slOperator: \"manual_assessment\",\n }) as any\n );\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Schedule embedding generation\n await scheduleEmbeddingGeneration({\n ctx, nodeId, projectId: scope.projectId, topicId: scope.topicId,\n createdBy: authenticatedUserId, nodeType: \"belief\", text: args.formulation,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: null,\n newState: {\n formulation: args.formulation,\n status: \"active\",\n baseRate: seedOpinion.opinion_a,\n tupleContradicted: false,\n opinion: {\n b: seedOpinion.opinion_b,\n d: seedOpinion.opinion_d,\n u: seedOpinion.opinion_u,\n a: seedOpinion.opinion_a,\n },\n },\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n // Schedule embedding generation for semantic search\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n createdBy: authenticatedUserId,\n nodeType: \"belief\" as const,\n text: args.rationale\n ? `${args.formulation}\\n\\nRationale: ${args.rationale}`\n : args.formulation,\n // Don't pass confidence — \"untested\" is a string, but the\n // embedding action expects v.optional(v.number()). New beliefs\n // have no numeric confidence until scoring.\n }\n );\n }\n\n // ==========================================================================\n // GRAPH TOPOLOGY - SPRINT IS THE EPISTEMIC BOUNDARY\n // ==========================================================================\n //\n // The SPRINT connects beliefs to the theme, not belief creation.\n //\n // Flow:\n // 1. ASSUMPTION beliefs: Raw inputs, float disconnected from theme\n // 2. HYPOTHESIS (in sprint): Being tested, still no theme edge\n // 3. SCORED (sprint complete): NOW gets belongs_to edge to theme\n // - Edge weight = conviction level (high conviction = shorter edge)\n //\n // The belongs_to edge is created ONLY when:\n // - Sprint completes → belief becomes \"scored\" → create theme edge\n // - See: sprints.ts completeSprint mutation\n //\n // Other nodes NEVER connect directly to theme:\n // - Questions → test → Beliefs (not theme)\n // - Evidence → answer/inform → Questions/Beliefs (not theme)\n //\n // NO THEME EDGE CREATED HERE - HAPPENS IN SPRINT COMPLETION\n // ==========================================================================\n\n // ==========================================================================\n // ONTOLOGY: Schedule belief classification for entity extraction\n // ==========================================================================\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 2000, // 2 second delay\n internal.nodeClassification.scheduleClassification,\n {\n nodeId,\n nodeType: \"belief\",\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n // ==========================================================================\n // PILLAR: Auto-categorize uncategorized beliefs into canonical pillars\n // ==========================================================================\n if (pillar === \"other\" && (scope.projectId || scope.topicId)) {\n await ctx.scheduler.runAfter(\n 2500,\n \"beliefCategorization:autoCategorizeBelief\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n // ==========================================================================\n // TEMPORAL: Schedule LLM temporal classification (factual vs forecast)\n // Automatically determines if this is a prediction, extracts measure dates\n // and conditions. Users never need to tag beliefs manually.\n // ==========================================================================\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 3000, // 3 second delay — after entity extraction\n internal.beliefTemporalClassifier.classifyBelief,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n // ==========================================================================\n // CACHE: Invalidate graph analysis cache\n // ==========================================================================\n await markBeliefGraphDirty(ctx, {\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n return { nodeId };\n },\n});\n\n// =============================================================================\n// GET BY ID\n// =============================================================================\n\n/**\n * Get a belief by its epistemicNodes ID.\n */\nexport const getById = query({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n beliefId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const id = (args.nodeId ?? args.beliefId) as\n | Id<\"epistemicNodes\">\n | undefined;\n if (!id) {\n return null;\n }\n const node = await ctx.db.get(id);\n if (!node || node.nodeType !== \"belief\") {\n return null;\n }\n return node;\n },\n});\n\n// =============================================================================\n// REFINE BELIEF\n// =============================================================================\n\n/**\n * Refine an unscored belief in place.\n *\n * Lucern Invariant #1 + #2: Draft beliefs may be refined in place, but scored\n * beliefs are immutable and must be evolved through forkBelief().\n */\nexport const refineBelief = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n canonicalText: v.optional(v.string()),\n title: v.optional(v.string()),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node) {\n throwStructuredMutationError({\n message: \"Belief not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion: \"Verify nodeId points to an existing belief before refining.\",\n details: { nodeId: args.nodeId },\n });\n }\n if (node.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `refineBelief only applies to belief nodes. Received nodeType \"${node.nodeType}\".`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"entity.no_refine\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes for entity mutations.\",\n details: { nodeId: args.nodeId, nodeType: node.nodeType },\n });\n }\n if (!node.projectId) {\n throwStructuredMutationError({\n message: \"Belief has no project scope.\",\n status: 400,\n code: \"MISSING_SCOPE\",\n invariantCode: \"belief.project_required\",\n suggestion: \"Belief must have a projectId to refine.\",\n details: { nodeId: args.nodeId },\n });\n }\n\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n if (\n typeof node.confidence === \"number\" &&\n Number.isFinite(node.confidence)\n ) {\n throwStructuredMutationError({\n message:\n \"Scored beliefs are immutable. Use forkBelief to evolve a scored belief.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"belief.versioning.scored_immutable\",\n suggestion:\n \"Use forkBelief() to create a new version instead of refining in place.\",\n details: { nodeId: args.nodeId, confidence: node.confidence },\n });\n }\n\n const nextText =\n typeof args.canonicalText === \"string\" && args.canonicalText.trim().length > 0\n ? args.canonicalText.trim()\n : undefined;\n const nextTitle =\n typeof args.title === \"string\" && args.title.trim().length > 0\n ? args.title.trim()\n : undefined;\n\n const patch: Record<string, unknown> = { updatedAt: now };\n if (nextText !== undefined) {\n patch.canonicalText = nextText;\n patch.title =\n nextTitle ??\n nextText.slice(0, 100) +\n (nextText.length > 100 ? \"...\" : \"\");\n patch.contentHash = generateContentHash(nextText);\n } else if (nextTitle !== undefined) {\n patch.title = nextTitle;\n }\n if (args.rationale !== undefined) {\n patch.content = args.rationale;\n }\n\n await ctx.db.patch(args.nodeId, patch);\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n if (nextText !== undefined) {\n await scheduleEmbeddingGeneration({\n ctx,\n nodeId: args.nodeId,\n projectId: node.projectId,\n topicId: node.topicId,\n createdBy: authenticatedUserId,\n nodeType: \"belief\",\n text: args.rationale\n ? `${nextText}\\n\\nRationale: ${args.rationale}`\n : nextText,\n });\n }\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n canonicalText: node.canonicalText,\n title: node.title,\n content: node.content,\n },\n newState: {\n canonicalText:\n (patch.canonicalText as string | undefined) ?? node.canonicalText,\n title: (patch.title as string | undefined) ?? node.title,\n content: (patch.content as string | undefined) ?? node.content,\n action: \"refined\",\n rationale: args.rationale,\n },\n projectId: node.projectId,\n topicId: node.topicId,\n });\n\n await markBeliefGraphDirty(ctx, {\n projectId: node.projectId,\n topicId: node.topicId,\n });\n\n return { nodeId: args.nodeId };\n },\n});\n\n// =============================================================================\n// GET BY PROJECT\n// =============================================================================\n\n/**\n * Get all beliefs for a project.\n */\nexport const getByProject = query({\n args: {\n ...optionalBeliefScopeArgs,\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId && !args.topicId) {\n return [];\n }\n\n const pageSize = clampBeliefLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n let scope:\n | Awaited<ReturnType<typeof resolveTopicProjectScope>>\n | { tenantId: undefined; workspaceId: undefined; topicId?: undefined; projectId?: undefined };\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch {\n return [];\n }\n\n if (args.userId) {\n const scopeId = scope.topicId ? String(scope.topicId) : scope.projectId;\n if (!scopeId) {\n return [];\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n }\n\n const query = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\n scope.topicId ? \"by_topic_type\" : \"by_project_type\",\n (q) =>\n scope.topicId\n ? q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n : q.eq(\"projectId\", scope.projectId).eq(\"nodeType\", \"belief\")\n );\n\n const nodes = await query.order(\"desc\").take(scanLimit);\n const scopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, scope)\n );\n\n // Filter by status if provided\n if (args.status) {\n return scopedNodes\n .filter((n) => n.status === args.status)\n .slice(0, pageSize);\n }\n\n // Default: return active beliefs\n return scopedNodes.filter((n) => n.status === \"active\").slice(0, pageSize);\n },\n});\n\n/**\n * Get all beliefs for a topic.\n */\nexport const getByTopic = query({\n args: {\n topicId: v.string(),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampBeliefLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const scope = await resolveTopicProjectScope(ctx, { topicId: args.topicId });\n const query = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n );\n\n const nodes = await query.order(\"desc\").take(scanLimit);\n const scopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n })\n );\n if (args.status) {\n return scopedNodes\n .filter((n) => n.status === args.status)\n .slice(0, pageSize);\n }\n return scopedNodes.filter((n) => n.status === \"active\").slice(0, pageSize);\n },\n});\n\n// =============================================================================\n// FORK BELIEF\n// =============================================================================\n\n/**\n * Fork a belief - create a new version while preserving the original.\n * This is the Lucern-compliant way to \"update\" a belief.\n *\n * Lucern Invariant #1: Beliefs are append-only. Never modify formulation.\n * Lucern Invariant #3: Lineage is permanent.\n */\nexport const forkBelief = mutation({\n args: {\n parentNodeId: v.id(\"epistemicNodes\"),\n newFormulation: v.string(),\n forkReason: v.union(\n v.literal(\"refinement\"),\n v.literal(\"contradiction_response\"),\n v.literal(\"scope_change\"),\n v.literal(\"confidence_collapse\"),\n v.literal(\"manual\")\n ),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n const _confidencePolicy = await getActiveConfidencePolicy(ctx);\n\n // Get the parent belief\n const parent = await ctx.db.get(args.parentNodeId);\n if (!parent) {\n throwStructuredMutationError({\n message: \"Parent node not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion:\n \"Verify parentNodeId points to an existing node before forking.\",\n details: { parentNodeId: args.parentNodeId },\n });\n }\n if (parent.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `forkBelief only applies to belief nodes. Received nodeType \"${parent.nodeType}\". Entity nodes (company, person, investor, etc.) are mutable — use entityLifecycle.updateEntityAttributes instead of forking.`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"entity.no_fork\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes for entity mutations. forkBelief is for belief nodes only.\",\n details: { parentNodeId: args.parentNodeId, nodeType: parent.nodeType },\n });\n }\n if (!parent.projectId) {\n throwStructuredMutationError({\n message: \"Parent belief has no project scope.\",\n status: 400,\n code: \"MISSING_SCOPE\",\n invariantCode: \"belief.project_required\",\n suggestion: \"Belief must have a projectId to fork.\",\n details: { parentNodeId: args.parentNodeId },\n });\n }\n await requireProjectWriteAccess(ctx, parent.projectId, authenticatedUserId);\n\n const metadata = parent.metadata as Record<string, unknown> | undefined;\n const forkBeliefStatus: BeliefLifecycleStatus = \"hypothesis\";\n\n // Create the new forked belief\n const newBeliefGlobalId = generateGlobalId();\n const newNodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId: newBeliefGlobalId,\n nodeType: \"belief\",\n epistemicLayer: \"L3\",\n canonicalText: args.newFormulation,\n contentHash: generateContentHash(args.newFormulation),\n content: args.rationale || parent.content,\n title:\n args.newFormulation.slice(0, 100) +\n (args.newFormulation.length > 100 ? \"...\" : \"\"),\n metadata: {\n ...metadata,\n forkedFrom: args.parentNodeId,\n forkReason: args.forkReason,\n forkTimestamp: now,\n forkedBy: authenticatedUserId,\n status: \"active\",\n beliefStatus: forkBeliefStatus,\n tupleContradicted: false,\n },\n beliefStatus: forkBeliefStatus as any,\n sourceType: parent.sourceType,\n confidence: undefined,\n tupleContradicted: false,\n verificationStatus: \"unverified\",\n status: \"active\",\n projectId: parent.projectId,\n topicId: parent.topicId,\n createdBy: authenticatedUserId,\n createdAt: now,\n updatedAt: now,\n });\n\n const inheritedContracts = (await (ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q: any) =>\n q.eq(\"beliefNodeId\", args.parentNodeId)\n )\n .collect()) as Array<Record<string, unknown> & { status?: string }>;\n\n for (const contract of inheritedContracts) {\n if (contract.status === \"archived\") {\n continue;\n }\n await (ctx.db as any).insert(\n \"epistemicContracts\",\n createInheritedContractRecord(contract as any, {\n beliefNodeId: newNodeId,\n topicId: parent.topicId,\n createdBy: authenticatedUserId,\n now,\n }) as any\n );\n }\n\n // Schedule Neo4j node sync FIRST — the new node must exist in Neo4j\n // before the supersedes edge can be created (MATCH clause requirement).\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: newNodeId,\n operation: \"upsert\",\n });\n\n // Create supersedes edge with delay to let node sync complete first.\n await ctx.scheduler.runAfter(5000, internal.neo4jEdgeAPI.createEdge, {\n globalId: generateGlobalId(),\n fromGlobalId: newBeliefGlobalId,\n toGlobalId: parent.globalId,\n edgeType: \"supersedes\",\n context: `Fork reason: ${args.forkReason}`,\n createdBy: authenticatedUserId,\n topicId: parent.projectId ? String(parent.projectId) : undefined,\n fromNodeType: \"belief\",\n toNodeType: \"belief\",\n });\n\n // Schedule embedding generation for forked belief\n await scheduleEmbeddingGeneration({\n ctx, nodeId: newNodeId, projectId: parent.projectId, topicId: parent.topicId,\n createdBy: authenticatedUserId, nodeType: \"belief\", text: args.newFormulation,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: newNodeId,\n changeType: \"forked\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n parentNodeId: args.parentNodeId,\n formulation: parent.canonicalText,\n },\n newState: {\n formulation: args.newFormulation,\n forkReason: args.forkReason,\n tupleContradicted: false,\n },\n projectId: parent.projectId,\n topicId: parent.topicId,\n });\n\n // Temporal classification — forked beliefs get fresh classification\n // since the formulation may have changed temporal nature\n if (parent.projectId || parent.topicId) {\n const inheritedPillar = normalizePillar(\n String(metadata?.pillar || metadata?.topic || \"\")\n );\n if (inheritedPillar === \"other\") {\n await ctx.scheduler.runAfter(\n 2500,\n \"beliefCategorization:autoCategorizeBelief\" as any,\n {\n nodeId: newNodeId,\n projectId: parent.projectId,\n topicId: parent.topicId,\n }\n );\n }\n\n await ctx.scheduler.runAfter(\n 3000,\n internal.beliefTemporalClassifier.classifyBelief,\n {\n nodeId: newNodeId,\n projectId: parent.projectId,\n topicId: parent.topicId,\n }\n );\n }\n\n await markBeliefGraphDirty(ctx, {\n projectId: parent.projectId,\n topicId: parent.topicId,\n });\n\n return { newNodeId, parentNodeId: args.parentNodeId };\n },\n});\n\n// =============================================================================\n// MODULATE CONFIDENCE\n// =============================================================================\n\n/**\n * Modulate a belief's confidence.\n *\n * Lucern Invariant #2: Confidence changes are append-only (tracked in beliefConfidence table).\n */\nexport const modulateConfidence = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n // SL opinion — the ONLY confidence input (EK-7)\n belief: v.number(), // b: evidence FOR [0,1]\n disbelief: v.number(), // d: evidence AGAINST [0,1]\n uncertainty: v.number(), // u: lack of evidence [0,1]\n baseRate: v.optional(v.number()), // a: prior probability [0,1], defaults to 0.5\n trigger: v.union(\n v.literal(\"evidence_added\"),\n v.literal(\"evidence_removed\"),\n v.literal(\"contradiction_detected\"),\n v.literal(\"contradiction_resolved\"),\n v.literal(\"manual\"),\n v.literal(\"decay\"),\n v.literal(\"agent_assessment\"),\n v.literal(\"worktree_outcome\"),\n v.literal(\"worktree_completed\"),\n // SL-specific triggers\n v.literal(\"fusion\"),\n v.literal(\"discount\"),\n v.literal(\"deduction\"),\n v.literal(\"backfill_synthetic\")\n ),\n rationale: v.optional(v.string()),\n userId: v.string(),\n // SL operator provenance (optional — defaults to manual_assessment)\n slOperator: v.optional(v.union(\n v.literal(\"cumulative_fusion\"),\n v.literal(\"averaging_fusion\"),\n v.literal(\"trust_discount\"),\n v.literal(\"conditional_deduction\"),\n v.literal(\"dependency_cascade\"),\n v.literal(\"negation\"),\n v.literal(\"constraint_fusion\"),\n v.literal(\"manual_assessment\")\n )),\n triggeringEvidenceId: v.optional(v.id(\"epistemicNodes\")),\n triggeringWorktreeId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const result = await applyBeliefConfidenceChange(ctx, {\n nodeId: args.nodeId,\n belief: args.belief,\n disbelief: args.disbelief,\n uncertainty: args.uncertainty,\n baseRate: args.baseRate,\n trigger: args.trigger,\n rationale: args.rationale,\n authenticatedUserId,\n slOperator: args.slOperator as SLOperator | undefined,\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringWorktreeId: args.triggeringWorktreeId,\n });\n\n // Schedule edge-defined SL propagation through graph edges (EK-7, LKC-5)\n // Only propagate if confidence actually changed (avoid noise)\n if (Math.abs(result.newConfidence - result.previousConfidence) >= 0.01) {\n await ctx.scheduler.runAfter(\n 0,\n internal.epistemicBeliefs.propagateConfidenceChange,\n {\n nodeId: args.nodeId,\n opinion_b: args.belief,\n opinion_d: args.disbelief,\n opinion_u: args.uncertainty,\n opinion_a: args.baseRate ?? 0.5,\n userId: authenticatedUserId,\n }\n );\n }\n\n return {\n nodeId: result.nodeId,\n previousConfidence: result.previousConfidence,\n newConfidence: result.newConfidence,\n opinion: result.opinion,\n };\n },\n});\n\n// Two-axis model (valence/certainty) — REMOVED in EK-7.\n// All callers must use modulateConfidence with SL opinion (b, d, u, a).\n\n// =============================================================================\n// UPDATE STATUS\n// =============================================================================\n\n/**\n * Update a belief's status.\n */\nexport const updateStatus = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n ),\n reason: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const previousStatus = node.status;\n\n // Update the node's status and metadata in a single atomic patch\n const metadata = (node.metadata as Record<string, unknown>) || {};\n await ctx.db.patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n metadata: {\n ...metadata,\n status: args.status,\n },\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n previousState: { status: previousStatus },\n newState: { status: args.status, reason: args.reason },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return { nodeId: args.nodeId, previousStatus, newStatus: args.status };\n },\n});\n\n// =============================================================================\n// ARCHIVE\n// =============================================================================\n\n/**\n * Archive a belief (soft delete).\n * Lucern invariant: Beliefs are never deleted, only archived.\n */\nexport const archive = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n reason: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n return await ctx.runMutation(\n // Use updateStatus internally\n internal.epistemicBeliefs.updateStatusInternal,\n {\n nodeId: args.nodeId,\n status: \"archived\",\n reason: args.reason,\n userId: authenticatedUserId,\n }\n );\n },\n});\n\n// =============================================================================\n// UPDATE RATIONALE\n// =============================================================================\n\n/**\n * Update a belief rationale without changing formulation.\n * Formulation mutability rules are unchanged (use fork/refine paths for wording).\n */\nexport const updateRationale = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const metadata = (node.metadata as Record<string, unknown>) || {};\n const previousRationale =\n typeof metadata.rationale === \"string\" ? metadata.rationale : undefined;\n const nextRationale = args.rationale?.trim();\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n rationale:\n nextRationale && nextRationale.length > 0 ? nextRationale : undefined,\n },\n updatedAt: now,\n });\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n previousState: { rationale: previousRationale },\n newState: {\n rationale:\n nextRationale && nextRationale.length > 0 ? nextRationale : undefined,\n },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return {\n nodeId: args.nodeId,\n previousRationale,\n newRationale: nextRationale,\n };\n },\n});\n\n// Internal version for use by other mutations\nexport const updateStatusInternal = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n ),\n reason: v.optional(v.string()),\n userId: v.string(),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: await resolveNodeScopeForWorkspaceIsolation(ctx, node),\n mutationName: \"epistemicBeliefs.updateStatusInternal\",\n });\n\n const previousStatus = node.status;\n\n await ctx.db.patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n previousState: { status: previousStatus },\n newState: { status: args.status, reason: args.reason },\n changedBy: args.userId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return { nodeId: args.nodeId, previousStatus, newStatus: args.status };\n },\n});\n\n// =============================================================================\n// GET CONFIDENCE HISTORY\n// =============================================================================\n\n/**\n * Get the confidence history for a belief.\n */\nexport const getConfidenceHistory = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n return [];\n }\n\n return await ctx.db\n .query(\"beliefConfidence\")\n .withIndex(\"by_beliefId_time\", (q) =>\n q.eq(\"beliefId\", args.nodeId)\n )\n .order(\"asc\")\n .collect();\n },\n});\n\n// =============================================================================\n// GET BELIEF LINEAGE\n// =============================================================================\n\n/**\n * Get the lineage of a belief (all forks and parents).\n */\nexport const getLineage = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const lineage: Array<{\n nodeId: Id<\"epistemicNodes\">;\n formulation: string;\n forkReason?: string;\n createdAt: number;\n }> = [];\n\n let currentId: Id<\"epistemicNodes\"> | null = args.nodeId;\n\n while (currentId) {\n const node = await ctx.db.get(currentId);\n if (!node || node.nodeType !== \"belief\") {\n break;\n }\n\n const metadata = node.metadata as Record<string, unknown> | undefined;\n\n lineage.push({\n nodeId: node._id,\n formulation: node.canonicalText,\n forkReason: metadata?.forkReason as string | undefined,\n createdAt: node.createdAt,\n });\n\n // Find parent via supersedes edge\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_type\", (q) =>\n q.eq(\"fromNodeId\", currentId!).eq(\"edgeType\", \"supersedes\")\n )\n .collect();\n\n if (edges.length > 0) {\n currentId = edges[0].toNodeId ?? null;\n } else {\n // Check metadata for forkedFrom (backfilled beliefs)\n currentId = metadata?.forkedFrom as Id<\"epistemicNodes\"> | null;\n }\n }\n\n return lineage;\n },\n});\n\n// =============================================================================\n// GET BELIEFS BY IDS\n// =============================================================================\n\n/**\n * Get multiple beliefs by their IDs.\n */\nexport const getByIds = query({\n args: {\n nodeIds: v.array(v.id(\"epistemicNodes\")),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const beliefs = await Promise.all(args.nodeIds.map((id) => ctx.db.get(id)));\n return beliefs.filter((b) => b !== null && b.nodeType === \"belief\");\n },\n});\n\n// =============================================================================\n// GET BY SPRINT\n// =============================================================================\n\n/**\n * Get all beliefs associated with a worktree via worktreeBeliefCluster.\n */\nexport const getByWorktree = query({\n args: {\n worktreeId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const worktree = await ctx.db.get(args.worktreeId as Id<\"worktrees\">);\n if (!worktree) {\n return [];\n }\n\n const clusterLinks = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_worktree\", (q: any) => q.eq(\"worktreeId\", args.worktreeId))\n .collect();\n\n const beliefs: Array<Doc<\"epistemicNodes\">> = [];\n for (const link of clusterLinks) {\n const node = await ctx.db.get(link.beliefId);\n if (node) beliefs.push(node);\n }\n return beliefs;\n },\n});\n\n// =============================================================================\n// UPDATE PILLAR\n// =============================================================================\n\n/**\n * Update a belief's pillar/topic categorization.\n * Uses canonical epistemicNodes IDs.\n */\nexport const updatePillar = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n pillar: v.union(\n v.literal(\"market\"),\n v.literal(\"competition\"),\n v.literal(\"product\"),\n v.literal(\"team\"),\n v.literal(\"financials\"),\n v.literal(\"regulatory\"),\n v.literal(\"timing\"),\n v.literal(\"customer\"),\n v.literal(\"technology\"),\n v.literal(\"distribution\"),\n v.literal(\"deal\"),\n v.literal(\"risks\"),\n v.literal(\"other\")\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const existingNode = await ctx.db.get(args.nodeId);\n if (!existingNode || existingNode.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!existingNode.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(\n ctx,\n existingNode.projectId,\n authenticatedUserId\n );\n\n // Update the epistemicNode (canonical source of truth)\n let previousPillar: unknown = null;\n const metadata = (existingNode.metadata as Record<string, unknown>) || {};\n previousPillar = metadata.pillar;\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n pillar: args.pillar,\n topic: args.pillar,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n // Audit log - Lucern Invariant #14: no silent state transitions\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId as string,\n changeType: \"pillar_changed\",\n projectId: existingNode.projectId,\n changedBy: authenticatedUserId,\n changedAt: now,\n isAgent: false,\n previousState: { pillar: previousPillar },\n newState: { pillar: args.pillar },\n });\n\n return {\n nodeId: args.nodeId,\n previousPillar,\n newPillar: args.pillar,\n };\n },\n});\n\n// =============================================================================\n// COUNT BY STATUS\n// =============================================================================\n\n/**\n * Get counts of beliefs by status for a project.\n */\nexport const getCountByStatus = query({\n args: {\n ...optionalBeliefScopeArgs,\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const nodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\n args.topicId ? \"by_topic_type\" : \"by_project_type\",\n (q: any) =>\n args.topicId\n ? q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n : q.eq(\"projectId\", args.projectId).eq(\"nodeType\", \"belief\")\n )\n .collect();\n\n const counts = {\n active: 0,\n superseded: 0,\n archived: 0,\n total: nodes.length,\n };\n\n for (const node of nodes) {\n if (node.status === \"active\") {\n counts.active++;\n } else if (node.status === \"superseded\") {\n counts.superseded++;\n } else if (node.status === \"archived\") {\n counts.archived++;\n }\n }\n\n return counts;\n },\n});\n\n// =============================================================================\n// LINK BELIEFS (Direct epistemicNodes → epistemicNodes)\n// =============================================================================\n\n/**\n * Create an edge between two beliefs in the epistemic spine.\n * This works with epistemicNodes IDs directly (no legacy lookup needed).\n */\nexport const linkBeliefs = mutation({\n args: {\n fromNodeId: v.id(\"epistemicNodes\"),\n toNodeId: v.id(\"epistemicNodes\"),\n edgeType: v.union(\n // Basic belief relationships\n v.literal(\"supersedes\"),\n v.literal(\"depends_on\"),\n v.literal(\"supports\"),\n v.literal(\"contains\"),\n v.literal(\"informs\"),\n v.literal(\"derived_from\"),\n v.literal(\"tests\")\n ),\n weight: v.optional(v.number()), // -1 to 1\n context: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const fromNode = await ctx.db.get(args.fromNodeId);\n const toNode = await ctx.db.get(args.toNodeId);\n\n if (!fromNode || !toNode) {\n throw new Error(\"One or both belief nodes not found\");\n }\n\n if (fromNode.nodeType !== \"belief\" || toNode.nodeType !== \"belief\") {\n throw new Error(\"Both nodes must be beliefs\");\n }\n if (fromNode.projectId !== toNode.projectId) {\n throw new Error(\"Cannot link beliefs across different projects\");\n }\n if (!fromNode.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(\n ctx,\n fromNode.projectId,\n authenticatedUserId\n );\n\n const now = Date.now();\n\n // Create edge directly in Neo4j (MERGE handles duplicates)\n const edgeGlobalId = generateGlobalId();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: fromNode.globalId,\n toGlobalId: toNode.globalId,\n edgeType: args.edgeType,\n weight: args.weight ?? 1.0,\n context: args.context,\n createdBy: authenticatedUserId,\n topicId: fromNode.projectId ? String(fromNode.projectId) : undefined,\n fromNodeType: \"belief\",\n toNodeType: \"belief\",\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edgeGlobalId as unknown as Id<\"epistemicNodes\">,\n changeType: \"created\",\n previousState: null,\n newState: {\n fromNodeId: args.fromNodeId,\n toNodeId: args.toNodeId,\n edgeType: args.edgeType,\n },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: fromNode.projectId,\n });\n\n return { edgeGlobalId, created: true };\n },\n});\n\n// =============================================================================\n// LINK EVIDENCE (Insight) to Belief\n// =============================================================================\n\n/**\n * Link an insight (evidence) to a belief.\n * Creates an edge from evidence → belief with appropriate type.\n */\nexport const linkEvidence = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n insightId: insightIdUnion,\n type: v.union(v.literal(\"supporting\"), v.literal(\"contradicting\")),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const _now = Date.now();\n\n // Verify the belief exists\n const belief = await ctx.db.get(args.beliefNodeId);\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!belief.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, belief.projectId, authenticatedUserId);\n\n // Verify the insight exists\n const insight = await ctx.db.get(args.insightId);\n if (!insight || insight.nodeType !== \"evidence\") {\n throw new Error(\"Insight not found\");\n }\n if (\n \"projectId\" in insight &&\n insight.projectId &&\n insight.projectId !== belief.projectId\n ) {\n throw new Error(\"Insight belongs to a different project\");\n }\n\n const evidenceNodeId = insight._id;\n const evidenceGlobalId = insight.globalId;\n\n // Determine edge type based on supporting/contradicting\n const edgeType = \"informs\"; // Both use informs, weight determines support/contradict\n const weight = args.type === \"supporting\" ? 1.0 : -1.0;\n\n // Compute logicalRole from graph structure\n const logicalRole = evidenceNodeId\n ? await computeLogicalRole(ctx, evidenceNodeId, args.beliefNodeId)\n : \"contributory\";\n\n // Create the edge directly in Neo4j (MERGE handles duplicates)\n const edgeGlobalId = generateGlobalId();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: evidenceGlobalId,\n toGlobalId: belief.globalId,\n edgeType,\n weight,\n context: args.rationale || `${args.type} evidence`,\n createdBy: authenticatedUserId,\n topicId: belief.projectId ? String(belief.projectId) : undefined,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n // Classification fields\n logicalRole,\n temporalClass: \"structural\", // Default - most evidence is long-lived\n });\n\n return { edgeGlobalId, evidenceNodeId, created: true };\n },\n});\n\n// =============================================================================\n// UNLINK EVIDENCE from Belief\n// =============================================================================\n\n/**\n * Remove the link between an insight and a belief.\n */\nexport const unlinkEvidence = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n insightId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const evidenceNode = await ctx.db.get(args.insightId);\n if (!evidenceNode || evidenceNode.nodeType !== \"evidence\") {\n return { success: false, message: \"Evidence node not found\" };\n }\n if (!evidenceNode.projectId) {\n throw new Error(\"Evidence has no project scope\");\n }\n await requireProjectWriteAccess(\n ctx,\n evidenceNode.projectId,\n authenticatedUserId\n );\n const beliefNode = await ctx.db.get(args.beliefNodeId);\n if (!beliefNode || beliefNode.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (beliefNode.projectId !== evidenceNode.projectId) {\n throw new Error(\"Belief and evidence belong to different projects\");\n }\n\n // Find and delete the edge\n const edge = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", evidenceNode._id).eq(\"toNodeId\", args.beliefNodeId)\n )\n .first();\n\n if (edge) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edge.globalId,\n changeType: \"edge_removed\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n fromNodeId: evidenceNode._id,\n toNodeId: args.beliefNodeId,\n },\n newState: null,\n projectId: evidenceNode.projectId,\n });\n }\n\n return { success: true };\n },\n});\n\n// =============================================================================\n// GET BELIEF WITH EVIDENCE\n// =============================================================================\n\n/**\n * Get a belief along with all its linked evidence.\n */\nexport const getWithEvidence = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const belief = await ctx.db.get(args.nodeId);\n if (!belief || belief.nodeType !== \"belief\") {\n return null;\n }\n\n // Get all edges pointing TO this belief from evidence nodes\n const incomingEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", args.nodeId).eq(\"edgeType\", \"informs\")\n )\n .collect();\n\n // Get the evidence nodes\n const evidenceNodeIds = incomingEdges\n .filter((e) => e.fromNodeType === \"evidence\")\n .map((e) => e.fromNodeId);\n\n const evidenceNodes = await Promise.all(\n evidenceNodeIds.map((id) => ctx.db.get(id))\n );\n\n // Categorize by supporting vs contradicting (based on weight)\n const supporting: typeof evidenceNodes = [];\n const contradicting: typeof evidenceNodes = [];\n\n for (let i = 0; i < evidenceNodes.length; i++) {\n const node = evidenceNodes[i];\n const edge = incomingEdges[i];\n if (node) {\n if ((edge.weight || 0) >= 0) {\n supporting.push(node);\n } else {\n contradicting.push(node);\n }\n }\n }\n\n return {\n belief,\n evidence: {\n supporting,\n contradicting,\n total: supporting.length + contradicting.length,\n },\n };\n },\n});\n\n// =============================================================================\n// GET RELATIONSHIPS\n// =============================================================================\n\n/**\n * Get all relationships (edges) for a belief.\n */\nexport const getRelationships = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n direction: v.optional(\n v.union(v.literal(\"in\"), v.literal(\"out\"), v.literal(\"both\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const direction = args.direction || \"both\";\n const results: {\n incoming: Array<{ edge: unknown; node: unknown }>;\n outgoing: Array<{ edge: unknown; node: unknown }>;\n } = {\n incoming: [],\n outgoing: [],\n };\n\n if (direction === \"in\" || direction === \"both\") {\n // Get edges pointing TO this node\n const inEdges = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q) => q.eq(q.field(\"toNodeId\"), args.nodeId))\n .collect();\n\n for (const edge of inEdges) {\n const sourceNode = await ctx.db.get(edge.fromNodeId);\n results.incoming.push({ edge, node: sourceNode });\n }\n }\n\n if (direction === \"out\" || direction === \"both\") {\n // Get edges pointing FROM this node\n const outEdges = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q) => q.eq(q.field(\"fromNodeId\"), args.nodeId))\n .collect();\n\n for (const edge of outEdges) {\n const targetNode = edge.toNodeId\n ? await ctx.db.get(edge.toNodeId)\n : null;\n results.outgoing.push({ edge, node: targetNode });\n }\n }\n\n return results;\n },\n});\n\n// =============================================================================\n// DELETE RELATIONSHIP\n// =============================================================================\n\n/**\n * Delete a relationship (edge) between nodes.\n */\nexport const deleteRelationship = mutation({\n args: {\n edgeId: v.id(\"epistemicEdges\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const edge = await ctx.db.get(args.edgeId);\n if (!edge) {\n throw new Error(\"Edge not found\");\n }\n if (!edge.projectId) {\n throw new Error(\"Edge has no project scope\");\n }\n await requireProjectWriteAccess(ctx, edge.projectId, authenticatedUserId);\n\n // Store for audit\n const previousState = {\n fromNodeId: edge.fromNodeId,\n toNodeId: edge.toNodeId,\n edgeType: edge.edgeType,\n };\n\n // Delete via Neo4j authority path\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(args.edgeId);\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edge.globalId,\n changeType: \"edge_removed\",\n previousState,\n newState: null,\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: edge.projectId,\n });\n\n return { success: true };\n },\n});\n\n// =============================================================================\n// UPDATE CRITICALITY\n// =============================================================================\n\n/**\n * Update a belief's criticality level.\n */\nexport const updateCriticality = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n criticality: v.union(\n v.literal(\"blocking\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"essential\"),\n v.literal(\"nice_to_have\")\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const metadata = (node.metadata as Record<string, unknown>) || {};\n const previousCriticality = metadata.criticality;\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n criticality: args.criticality,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"criticality_changed\",\n previousState: { criticality: previousCriticality as string | undefined },\n newState: { criticality: args.criticality },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return {\n nodeId: args.nodeId,\n previousCriticality,\n newCriticality: args.criticality,\n };\n },\n});\n\n// =============================================================================\n// BATCH UPDATE CRITICALITY\n// =============================================================================\n\n/**\n * Batch update criticality for multiple beliefs.\n * Uses canonical epistemicNodes IDs.\n */\nexport const batchUpdateCriticality = mutation({\n args: {\n updates: v.array(\n v.object({\n beliefId: v.id(\"epistemicNodes\"),\n criticality: v.union(\n v.literal(\"blocking\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"essential\"),\n v.literal(\"nice_to_have\")\n ),\n ifFalseImpact: v.optional(v.string()),\n triagePriority: v.optional(v.number()),\n reasoning: v.optional(v.string()),\n dependentBeliefIds: v.optional(v.array(v.string())),\n blockedByBeliefIds: v.optional(v.array(v.string())),\n })\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n const results: Array<{\n beliefId: string;\n nodeId?: Id<\"epistemicNodes\">;\n success: boolean;\n }> = [];\n\n for (const update of args.updates) {\n try {\n const node = await ctx.db.get(update.beliefId);\n\n if (!node || node.nodeType !== \"belief\") {\n results.push({ beliefId: update.beliefId, success: false });\n continue;\n }\n if (!node.projectId) {\n results.push({ beliefId: update.beliefId, success: false });\n continue;\n }\n await requireProjectWriteAccess(\n ctx,\n node.projectId,\n authenticatedUserId\n );\n\n const metadata = (node.metadata as Record<string, unknown>) || {};\n const previousCriticality = metadata.criticality as string | undefined;\n\n await ctx.db.patch(node._id, {\n metadata: {\n ...metadata,\n criticality: update.criticality,\n ifFalseImpact: update.ifFalseImpact,\n triagePriority: update.triagePriority,\n criticalityReasoning: update.reasoning,\n dependentBeliefIds: update.dependentBeliefIds,\n blockedByBeliefIds: update.blockedByBeliefIds,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: node._id,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: node._id,\n changeType: \"criticality_changed\",\n previousState: { criticality: previousCriticality },\n newState: { criticality: update.criticality },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n results.push({\n beliefId: update.beliefId,\n nodeId: node._id,\n success: true,\n });\n } catch {\n results.push({ beliefId: update.beliefId, success: false });\n }\n }\n\n return { results, updatedCount: results.filter((r) => r.success).length };\n },\n});\n\n// =============================================================================\n// GET BY CRITICALITY\n// =============================================================================\n\n/**\n * Get beliefs by criticality level.\n */\nexport const getByCriticality = query({\n args: {\n ...optionalBeliefScopeArgs,\n criticality: v.union(\n v.literal(\"blocking\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"essential\"),\n v.literal(\"nice_to_have\")\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope);\n\n return nodes.filter((n) => {\n const metadata = n.metadata as Record<string, unknown> | undefined;\n return (\n metadata?.criticality === args.criticality && n.status === \"active\"\n );\n });\n },\n});\n\n// =============================================================================\n// GET UNANALYZED BELIEFS (for BI agents)\n// =============================================================================\n\n/**\n * Get beliefs that haven't been analyzed yet.\n * Used by BI agents for batch processing.\n */\nexport const getUnanalyzed = query({\n args: {\n ...optionalBeliefScopeArgs,\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = args.limit || 50;\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope);\n\n // Filter for unanalyzed beliefs (no criticality set, active status)\n const unanalyzed = nodes.filter((n) => {\n const metadata = n.metadata as Record<string, unknown> | undefined;\n return !metadata?.criticality && n.status === \"active\";\n });\n\n return unanalyzed.slice(0, limit);\n },\n});\n\n// =============================================================================\n// GET BY PROJECT (SYSTEM - no auth check)\n// =============================================================================\n\n/**\n * Get all beliefs for a project (system level - no auth check).\n * Used by BI agents and thesis audit agents.\n */\nexport const getByProjectSystem = query({\n args: {\n ...optionalBeliefScopeArgs,\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampBeliefLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope, { scanLimit });\n\n // Filter by status if provided\n if (args.status) {\n return nodes.filter((n) => n.status === args.status).slice(0, pageSize);\n }\n\n // Default: return active beliefs\n return nodes.filter((n) => n.status === \"active\").slice(0, pageSize);\n },\n});\n\n// =============================================================================\n// GET BY PILLAR\n// =============================================================================\n\n/**\n * Get beliefs filtered by pillar/topic.\n */\nexport const getByPillar = query({\n args: {\n ...optionalBeliefScopeArgs,\n pillar: v.union(\n v.literal(\"market\"),\n v.literal(\"competition\"),\n v.literal(\"product\"),\n v.literal(\"team\"),\n v.literal(\"financials\"),\n v.literal(\"regulatory\"),\n v.literal(\"timing\"),\n v.literal(\"customer\"),\n v.literal(\"technology\"),\n v.literal(\"distribution\"),\n v.literal(\"deal\"),\n v.literal(\"risks\"),\n v.literal(\"other\")\n ),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId && !args.topicId) {\n return [];\n }\n\n let scope:\n | Awaited<ReturnType<typeof resolveTopicProjectScope>>\n | {\n tenantId: undefined;\n workspaceId: undefined;\n topicId?: undefined;\n projectId?: undefined;\n };\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch {\n return [];\n }\n\n const nodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\n scope.topicId ? \"by_topic_type\" : \"by_project_type\",\n (q) =>\n scope.topicId\n ? q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n : q.eq(\"projectId\", scope.projectId).eq(\"nodeType\", \"belief\")\n )\n .collect();\n\n return nodes.filter((n) => {\n const metadata = n.metadata as Record<string, unknown> | undefined;\n const matchesPillar = metadata?.pillar === args.pillar;\n const matchesStatus = args.status\n ? n.status === args.status\n : n.status === \"active\";\n return matchesPillar && matchesStatus;\n });\n },\n});\n\n// =============================================================================\n// GET WORKTREE CLUSTER\n// =============================================================================\n\n/**\n * Get the belief cluster for a worktree.\n * Returns all beliefs linked to the worktree and their relationships.\n */\nexport const getWorktreeCluster = query({\n args: {\n worktreeId: v.string(),\n userId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const worktree = await ctx.db.get(args.worktreeId as Id<\"worktrees\">);\n if (!worktree) {\n return { beliefs: [], edges: [], beliefCount: 0 };\n }\n\n // Get all beliefs linked to this worktree\n const clusterLinks = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_worktree\", (q: any) => q.eq(\"worktreeId\", args.worktreeId))\n .collect();\n\n const beliefIds = new Set(clusterLinks.map((l: any) => String(l.beliefId)));\n const beliefs: Array<Doc<\"epistemicNodes\">> = [];\n for (const link of clusterLinks) {\n const node = await ctx.db.get(link.beliefId);\n if (node) beliefs.push(node);\n }\n\n // Get edges between cluster beliefs\n const clusterEdges: Array<{\n fromNodeId: string;\n toNodeId: string;\n edgeType: string;\n weight?: number;\n context?: string;\n }> = [];\n\n for (const beliefId of beliefIds) {\n const outEdges = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q: any) =>\n q.eq(q.field(\"fromNodeId\"), beliefId as Id<\"epistemicNodes\">)\n )\n .collect();\n\n for (const edge of outEdges) {\n if (beliefIds.has(String(edge.toNodeId))) {\n clusterEdges.push({\n fromNodeId: String(edge.fromNodeId),\n toNodeId: String(edge.toNodeId),\n edgeType: edge.edgeType,\n weight: edge.weight,\n context: edge.context,\n });\n }\n }\n }\n\n return {\n beliefs,\n edges: clusterEdges,\n beliefCount: beliefs.length,\n };\n },\n});\n\n// =============================================================================\n// INTERNAL QUERIES - For use by other Convex modules\n// =============================================================================\n// These queries are NOT exposed to the client API. They allow other Convex\n// functions (BI agents, intelligence, etc.) to read beliefs from epistemicNodes\n// without needing project access checks (internal use only).\n\n/**\n * Internal query to get beliefs for a project.\n * Returns epistemicNodes in legacy beliefs format for backward compatibility.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetByProject = internalQuery({\n args: {\n ...optionalBeliefScopeArgs,\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"validated\"),\n v.literal(\"invalidated\"),\n v.literal(\"archived\"),\n v.literal(\"superseded\")\n )\n ),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const pageSize = clampBeliefLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const audienceMode = args.audienceMode ?? \"internal\";\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n });\n const resolveAudienceClass = createBeliefAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const nodes = await getBeliefNodesForScope(ctx, scope, { scanLimit });\n\n // Filter by audience first, then status.\n let filtered = nodes.filter((node) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(node.audienceLabel, \"internal\")\n )\n );\n if (args.status) {\n filtered = filtered.filter((n) => n.status === args.status);\n }\n\n // Apply limit if provided\n filtered = filtered.slice(0, pageSize);\n\n // Map to legacy format\n return filtered.map(flattenBeliefNode);\n },\n});\n\n/**\n * Internal query to get beliefs for a topic.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetByTopic = internalQuery({\n args: {\n topicId: v.string(),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"validated\"),\n v.literal(\"invalidated\"),\n v.literal(\"archived\"),\n v.literal(\"superseded\")\n )\n ),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampBeliefLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const audienceMode = args.audienceMode ?? \"internal\";\n const scope = await resolveTopicProjectScope(ctx, { topicId: args.topicId });\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n });\n const resolveAudienceClass = createBeliefAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const query = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n );\n const nodes = await query.order(\"desc\").take(scanLimit);\n\n let filtered = nodes.filter((node) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(node.audienceLabel, \"internal\")\n )\n );\n if (args.status) {\n filtered = filtered.filter((n) => n.status === args.status);\n }\n filtered = filtered.slice(0, pageSize);\n\n return filtered.map(flattenBeliefNode);\n },\n});\n\n/**\n * Internal query to get active beliefs for a project.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetActive = internalQuery({\n args: {\n ...optionalBeliefScopeArgs,\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope, {\n status: \"active\",\n });\n\n // Apply limit if provided\n const limited = args.limit ? nodes.slice(0, args.limit) : nodes;\n\n return limited.map(flattenBeliefNode);\n },\n});\n\n/**\n * Internal query to get a single belief by ID.\n * Uses canonical epistemicNodes IDs.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetById = internalQuery({\n args: {\n beliefId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.beliefId as Id<\"epistemicNodes\">);\n\n if (!node || node.nodeType !== \"belief\") {\n return null;\n }\n\n // Map to legacy format\n return flattenBeliefNode(node);\n },\n});\n\n/**\n * Internal mutation to create a belief.\n * Creates ONLY in epistemicNodes (no dual-write).\n *\n * @internal Use by other Convex functions only\n */\nexport const internalCreate = internalMutation({\n args: {\n ...optionalBeliefScopeArgs,\n formulation: v.string(),\n baseRate: v.number(),\n confidence: v.optional(\n v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\"))\n ),\n userId: v.string(),\n rationale: v.optional(v.string()),\n topic: v.optional(v.string()),\n pillar: v.optional(v.string()),\n category: v.optional(v.string()),\n subcategory: v.optional(v.string()),\n categoryIcon: v.optional(v.string()),\n sprintId: v.optional(v.string()),\n sourceBeliefIds: v.optional(v.array(v.string())),\n criticality: v.optional(\n v.union(\n v.literal(\"blocking\"),\n v.literal(\"critical\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"nice_to_have\"),\n v.literal(\"unanalyzed\")\n )\n ),\n beliefType: v.optional(v.string()),\n /** Optional extra metadata fields merged into the node's metadata object.\n * Use for domain overlays like coding intelligence (codeAnchors, failedApproach, etc.) */\n extraMetadata: v.optional(v.any()),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n const baseRate = assertBaseRateInRange(args.baseRate);\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"belief\",\n mutationName: \"epistemicBeliefs.internalCreate\",\n });\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"belief\",\n epistemicLayer: \"L3\",\n },\n mutationName: \"epistemicBeliefs.internalCreate\",\n });\n const topic = await ctx.db.get(scope.topicId);\n const normalizedBeliefType = await assertSchemaEnumValue(ctx, {\n category: \"belief_type\",\n value: args.beliefType,\n tenantId: topic?.tenantId,\n context: \"epistemicBeliefs.internalCreate\",\n });\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.formulation);\n const requestedConfidence = args.confidence;\n const seedOpinion = {\n opinion_b: 0,\n opinion_d: 0,\n opinion_u: 1,\n opinion_a: baseRate,\n };\n\n // Create in epistemicNodes\n const nodeId = await (ctx.db as any).insert(\"epistemicNodes\", {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"belief\",\n canonicalText: args.formulation,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L3\", // L3: Traversal Anchors\n sourceType: args.userId.startsWith(\"agent:\") ? \"ai_generated\" : \"human\",\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n ...seedOpinion,\n tupleContradicted: false,\n metadata: {\n ...(requestedConfidence ? { confidence: requestedConfidence } : {}),\n tupleContradicted: false,\n rationale: args.rationale || \"\",\n topic: args.topic || args.pillar || \"\",\n pillar: args.pillar || args.topic || \"\",\n category: args.category || \"\",\n subcategory: args.subcategory || \"\",\n categoryIcon: args.categoryIcon || \"\",\n sprintId: args.sprintId,\n sourceBeliefIds: args.sourceBeliefIds || [],\n criticality: args.criticality || \"unanalyzed\",\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n supportingEvidenceIds: [],\n contradictingEvidenceIds: [],\n testingQuestionIds: [],\n linkedInsightIds: [],\n // Merge caller-provided metadata (e.g. codeAnchors for coding intelligence)\n ...(args.extraMetadata && typeof args.extraMetadata === \"object\"\n ? args.extraMetadata\n : {}),\n },\n });\n\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: nodeId,\n belief: seedOpinion.opinion_b,\n disbelief: seedOpinion.opinion_d,\n uncertainty: seedOpinion.opinion_u,\n baseRate,\n trigger: \"initial\",\n rationale:\n \"LKC-2 mandatory prior: seeded vacuous opinion at belief creation.\",\n assessedBy: args.userId,\n assessedAt: now,\n slOperator: \"manual_assessment\",\n }) as any\n );\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n newState: {\n formulation: args.formulation,\n baseRate,\n confidence: requestedConfidence,\n opinion: {\n b: seedOpinion.opinion_b,\n d: seedOpinion.opinion_d,\n u: seedOpinion.opinion_u,\n a: seedOpinion.opinion_a,\n },\n tupleContradicted: false,\n source: \"internal\",\n },\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n // Schedule embedding generation for semantic search.\n // Fire when either projectId or topicId is present — topicId alone covers Lucern\n // deployments which have no projects table.\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"belief\" as const,\n text: args.rationale\n ? `${args.formulation}\\n\\nRationale: ${args.rationale}`\n : args.formulation,\n ...(requestedConfidence\n ? {\n confidence:\n requestedConfidence === \"high\"\n ? 0.8\n : requestedConfidence === \"low\"\n ? 0.3\n : 0.5,\n }\n : {}),\n }\n );\n }\n\n if (\n normalizePillar(args.pillar || args.topic) === \"other\" &&\n (scope.projectId || scope.topicId)\n ) {\n await ctx.scheduler.runAfter(\n 2500,\n \"beliefCategorization:autoCategorizeBelief\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n await markBeliefGraphDirty(ctx, {\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n return { nodeId };\n },\n});\n\n// =============================================================================\n// CONFIDENCE CHANGE TRACKING\n// =============================================================================\n\n/**\n * Get recent confidence changes for beliefs in a project.\n * Shows beliefs that have had confidence updates via propagation, decay,\n * or other users - useful for \"Attention Needed\" dashboard panel.\n */\nexport const getRecentConfidenceChanges = query({\n args: {\n ...optionalBeliefScopeArgs,\n userId: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = args.limit ?? 10;\n const sevenDaysAgo = Date.now() - 7 * 24 * 60 * 60 * 1000;\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const scopeId = scope.topicId ? String(scope.topicId) : scope.projectId;\n\n if (!scopeId || !(await checkScopeAccess(ctx, scopeId, args.userId))) {\n return [];\n }\n\n const projectBeliefs = await getBeliefNodesForScope(ctx, scope);\n\n if (projectBeliefs.length === 0) {\n return [];\n }\n\n // Create a map of beliefId to belief info\n const beliefMap = new Map<\n string,\n { id: string; title: string; currentConfidence: number }\n >();\n for (const belief of projectBeliefs) {\n const info = {\n id: belief._id,\n title: belief.canonicalText || belief.title || \"Untitled belief\",\n currentConfidence: belief.confidence ?? 0.5,\n };\n beliefMap.set(belief._id, info);\n }\n\n // Get recent confidence entries\n const recentConfidence = await ctx.db\n .query(\"beliefConfidence\")\n .order(\"desc\")\n .filter((q) => q.gt(q.field(\"assessedAt\"), sevenDaysAgo))\n .take(200);\n\n // Filter to beliefs in this project and compute deltas\n const changes: Array<{\n beliefId: string;\n beliefTitle: string;\n delta: number;\n trigger: string;\n assessedBy: string;\n assessedAt: number;\n }> = [];\n\n const seenBeliefs = new Set<string>();\n\n for (const entry of recentConfidence) {\n const beliefInfo = beliefMap.get(entry.beliefId as string);\n if (!beliefInfo) {\n continue;\n }\n\n // Skip if we've already processed this belief\n if (seenBeliefs.has(beliefInfo.id)) {\n continue;\n }\n seenBeliefs.add(beliefInfo.id);\n\n // Get previous confidence entry to calculate delta\n const previousEntries = await ctx.db\n .query(\"beliefConfidence\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", entry.beliefId))\n .order(\"desc\")\n .filter((q) => q.lt(q.field(\"assessedAt\"), entry.assessedAt))\n .take(1);\n\n const previousConfidence = previousEntries[0]?.confidence ?? 0.5;\n const delta = entry.confidence - previousConfidence;\n\n // Only include if there's a meaningful change\n if (Math.abs(delta) < 0.05) {\n continue;\n }\n\n changes.push({\n beliefId: beliefInfo.id,\n beliefTitle: beliefInfo.title,\n delta,\n trigger: entry.trigger,\n assessedBy: entry.assessedBy,\n assessedAt: entry.assessedAt,\n });\n\n if (changes.length >= limit) {\n break;\n }\n }\n\n return changes;\n },\n});\n\n// =============================================================================\n// BACKFILL: Set valence + certainty on existing records\n// =============================================================================\n\n/**\n * Backfill synthetic t0 opinion-history rows for legacy beliefs that have\n * node-level opinion/confidence metadata but no beliefConfidence history.\n *\n * Run with:\n * npx convex run epistemicBeliefs:backfillSyntheticOpinionHistory '{\"limit\":100}'\n */\nexport const backfillSyntheticOpinionHistory = internalMutation({\n args: {\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = Math.max(1, Math.min(args.limit ?? 100, 100));\n const [beliefNodes, existingHistory] = await Promise.all([\n ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q) => q.eq(\"nodeType\", \"belief\"))\n .collect(),\n ctx.db.query(\"beliefConfidence\").collect(),\n ]);\n\n const beliefsWithHistory = new Set(\n existingHistory.map((entry) => String(entry.beliefId))\n );\n\n let inserted = 0;\n let skippedNoOpinion = 0;\n let skippedHasHistory = 0;\n\n for (const node of beliefNodes) {\n if (inserted >= limit) {\n break;\n }\n\n const hasOpinionSnapshot =\n readFiniteNumber((node as any).opinion_b) !== undefined ||\n readFiniteNumber((node as any).opinion_d) !== undefined ||\n readFiniteNumber((node as any).opinion_u) !== undefined ||\n readFiniteNumber((node as any).opinion_a) !== undefined ||\n readFiniteNumber(node.confidence) !== undefined;\n\n if (!hasOpinionSnapshot) {\n skippedNoOpinion++;\n continue;\n }\n\n if (beliefsWithHistory.has(String(node._id))) {\n skippedHasHistory++;\n continue;\n }\n\n const opinion = deriveSyntheticBackfillOpinion(node as Record<string, unknown>);\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: node._id,\n belief: opinion.b,\n disbelief: opinion.d,\n uncertainty: opinion.u,\n baseRate: opinion.a,\n trigger: \"backfill_synthetic\",\n rationale:\n \"LK-6 backfill: synthesized t0 from node-level opinion fields (no prior beliefConfidence row found).\",\n assessedAt:\n readFiniteNumber(node.createdAt) ??\n readFiniteNumber(node.updatedAt) ??\n Date.now(),\n assessedBy: \"system:lk-6-backfill\",\n slOperator: \"manual_assessment\",\n }) as any\n );\n beliefsWithHistory.add(String(node._id));\n inserted++;\n }\n\n const remainingCandidates = beliefNodes.filter((node) => {\n const hasOpinionSnapshot =\n readFiniteNumber((node as any).opinion_b) !== undefined ||\n readFiniteNumber((node as any).opinion_d) !== undefined ||\n readFiniteNumber((node as any).opinion_u) !== undefined ||\n readFiniteNumber((node as any).opinion_a) !== undefined ||\n readFiniteNumber(node.confidence) !== undefined;\n return hasOpinionSnapshot && !beliefsWithHistory.has(String(node._id));\n }).length;\n\n return {\n scanned: beliefNodes.length,\n inserted,\n skippedNoOpinion,\n skippedHasHistory,\n remainingCandidates,\n hasMore: remainingCandidates > 0,\n };\n },\n});\n\n/**\n * Backfill mandatory priors for legacy beliefs created before LKC-2.\n *\n * Run with:\n * npx convex run epistemicBeliefs:backfillMandatoryPriors '{\"limit\":100}'\n */\nexport const backfillMandatoryPriors = internalMutation({\n args: {\n limit: v.optional(v.number()),\n defaultBaseRate: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = Math.max(1, Math.min(args.limit ?? 100, 1000));\n const defaultBaseRate = assertBaseRateInRange(\n args.defaultBaseRate ?? 0.5,\n \"defaultBaseRate\"\n );\n const [beliefNodes, historyRows] = await Promise.all([\n ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q) => q.eq(\"nodeType\", \"belief\"))\n .collect(),\n ctx.db.query(\"beliefConfidence\").collect(),\n ]);\n\n const historyByBeliefId = new Map<string, typeof historyRows>();\n for (const row of historyRows) {\n const beliefId = String(row.beliefId);\n const entries = historyByBeliefId.get(beliefId) ?? [];\n entries.push(row);\n historyByBeliefId.set(beliefId, entries);\n }\n\n let touched = 0;\n let patchedNodes = 0;\n let patchedHistoryRows = 0;\n let insertedInitialRows = 0;\n let auditEntries = 0;\n\n for (const node of beliefNodes) {\n if (touched >= limit) {\n break;\n }\n\n const beliefId = String(node._id);\n const history = historyByBeliefId.get(beliefId) ?? [];\n const patchedOpinion = {\n belief: readFiniteNumber((node as any).opinion_b) ?? 0,\n disbelief: readFiniteNumber((node as any).opinion_d) ?? 0,\n uncertainty: readFiniteNumber((node as any).opinion_u) ?? 1,\n baseRate:\n readFiniteNumber((node as any).opinion_a) ?? defaultBaseRate,\n };\n const needsNodePatch =\n readFiniteNumber((node as any).opinion_b) === undefined ||\n readFiniteNumber((node as any).opinion_d) === undefined ||\n readFiniteNumber((node as any).opinion_u) === undefined ||\n readFiniteNumber((node as any).opinion_a) === undefined;\n const rowsMissingBaseRate = history.filter(\n (row) => readFiniteNumber((row as any).baseRate) === undefined\n );\n const needsInitialRow = history.length === 0;\n\n if (\n !needsNodePatch &&\n rowsMissingBaseRate.length === 0 &&\n !needsInitialRow\n ) {\n continue;\n }\n\n if (needsNodePatch) {\n await ctx.db.patch(node._id, {\n opinion_b: patchedOpinion.belief,\n opinion_d: patchedOpinion.disbelief,\n opinion_u: patchedOpinion.uncertainty,\n opinion_a: patchedOpinion.baseRate,\n updatedAt: Date.now(),\n } as any);\n patchedNodes++;\n }\n\n for (const row of rowsMissingBaseRate) {\n const belief = readFiniteNumber((row as any).belief) ?? 0;\n const disbelief = readFiniteNumber((row as any).disbelief) ?? 0;\n const uncertainty = readFiniteNumber((row as any).uncertainty) ?? 1;\n await ctx.db.patch((row as any)._id, {\n baseRate: defaultBaseRate,\n confidence: confidenceFromSL(\n belief,\n disbelief,\n uncertainty,\n defaultBaseRate\n ),\n } as any);\n patchedHistoryRows++;\n }\n\n if (needsInitialRow) {\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: node._id,\n belief: patchedOpinion.belief,\n disbelief: patchedOpinion.disbelief,\n uncertainty: patchedOpinion.uncertainty,\n baseRate: patchedOpinion.baseRate,\n trigger: \"initial\",\n rationale:\n \"LKC-2 backfill: inserted missing initial vacuous opinion with neutral prior.\",\n assessedAt:\n readFiniteNumber(node.createdAt) ??\n readFiniteNumber(node.updatedAt) ??\n Date.now(),\n assessedBy: \"system:lkc-2-prior-backfill\",\n slOperator: \"manual_assessment\",\n }) as any\n );\n insertedInitialRows++;\n }\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: beliefId,\n changeType: \"updated\",\n changedAt: Date.now(),\n changedBy: \"system:lkc-2-prior-backfill\",\n isAgent: false,\n previousState: null,\n newState: {\n baseRateBackfilled: true,\n baseRate: defaultBaseRate,\n patchedNodeOpinion: needsNodePatch,\n patchedHistoryRows: rowsMissingBaseRate.length,\n insertedInitialOpinion: needsInitialRow,\n },\n projectId: (node as any).projectId,\n topicId:\n typeof (node as any).topicId === \"string\"\n ? (node as any).topicId\n : undefined,\n } as any);\n auditEntries++;\n touched++;\n }\n\n return {\n scanned: beliefNodes.length,\n patchedNodes,\n patchedHistoryRows,\n insertedInitialRows,\n auditEntries,\n hasMore: touched >= limit,\n };\n },\n});\n\n/**\n * Backfill valence + certainty on beliefConfidence records and epistemicNodes metadata.\n * Converts existing single-number confidence to two-axis:\n * valence = confidence * 2 - 1 (maps 0→-1, 0.5→0, 1→+1)\n * certainty = |confidence - 0.5| * 2 (maps 0.5→0, 0/1→1)\n *\n * Run with: npx convex run epistemicBeliefs:backfillTwoAxisConfidence '{}'\n */\nexport const backfillTwoAxisConfidence = internalMutation({\n args: {\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const dryRun = args.dryRun ?? false;\n\n // 1. Backfill beliefConfidence records missing valence/certainty\n const allConfRecords = await ctx.db.query(\"beliefConfidence\").collect();\n let confUpdated = 0;\n let confSkipped = 0;\n\n for (const record of allConfRecords) {\n if (record.valence !== undefined && record.certainty !== undefined) {\n confSkipped++;\n continue;\n }\n const conf = record.confidence ?? 0.5;\n const valence = Math.round((conf * 2 - 1) * 100) / 100;\n const certainty = Math.round(Math.abs(conf - 0.5) * 2 * 100) / 100;\n\n if (!dryRun) {\n await ctx.db.patch(record._id, { valence, certainty } as any);\n }\n confUpdated++;\n }\n\n // 2. Backfill epistemicNodes metadata missing valence/certainty\n const allBeliefNodes = await ctx.db\n .query(\"epistemicNodes\")\n .filter((q) => q.eq(q.field(\"nodeType\"), \"belief\"))\n .collect();\n let nodesUpdated = 0;\n let nodesSkipped = 0;\n\n for (const node of allBeliefNodes) {\n const meta = (node.metadata || {}) as Record<string, unknown>;\n if (meta.valence !== undefined && meta.certainty !== undefined) {\n nodesSkipped++;\n continue;\n }\n const conf = node.confidence ?? 0.5;\n const valence = Math.round((conf * 2 - 1) * 100) / 100;\n const certainty = Math.round(Math.abs(conf - 0.5) * 2 * 100) / 100;\n\n if (!dryRun) {\n await ctx.db.patch(node._id, {\n metadata: { ...meta, valence, certainty },\n });\n }\n nodesUpdated++;\n }\n\n return {\n dryRun,\n beliefConfidence: {\n updated: confUpdated,\n skipped: confSkipped,\n total: allConfRecords.length,\n },\n epistemicNodes: {\n updated: nodesUpdated,\n skipped: nodesSkipped,\n total: allBeliefNodes.length,\n },\n };\n },\n});\n\n/**\n * Backfill: Create relates_to_thesis edges for confidence-bearing beliefs in a project.\n *\n * When modulateConfidence was missing the edge-creation step, beliefs got scored\n * but never linked to the project's theme node. This backfill fixes that.\n *\n * Run: npx convex run epistemicBeliefs:backfillScoredBeliefEdges '{\"projectId\":\"<id>\"}'\n * Dry run first: npx convex run epistemicBeliefs:backfillScoredBeliefEdges '{\"projectId\":\"<id>\",\"dryRun\":true}'\n */\nexport const backfillScoredBeliefEdges = internalMutation({\n args: {\n ...optionalBeliefScopeArgs,\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const dryRun = args.dryRun ?? false;\n\n // Get all confidence-bearing beliefs in the project\n const allBeliefs = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\n \"by_topic\",\n (q: any) =>\n q.eq(\"topicId\", args.topicId || args.projectId)\n )\n .filter((q) => q.eq(q.field(\"nodeType\"), \"belief\"))\n .collect();\n\n const scoredBeliefs = allBeliefs.filter((belief) => {\n const metadata = (belief.metadata || {}) as Record<string, unknown>;\n const lifecycle = resolveBeliefStatus(belief, metadata);\n return lifecycle === \"belief\" || lifecycle === \"fact\";\n });\n\n // Get theme nodes for the project\n const themeNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\n \"by_topic\",\n (q: any) =>\n q.eq(\"topicId\", args.topicId || args.projectId)\n )\n .filter((q) => q.eq(q.field(\"nodeType\"), \"theme\"))\n .collect();\n\n let created = 0;\n let skipped = 0;\n\n for (const belief of scoredBeliefs) {\n if (!belief.globalId) {\n skipped++;\n continue;\n }\n\n for (const theme of themeNodes) {\n if (!theme.globalId) {\n continue;\n }\n\n const edgeGlobalId = `edge-${belief.globalId}-relates_to_thesis-${theme.globalId}`;\n\n // Check if edge already exists in Convex mirror\n const existing = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q) => q.eq(q.field(\"globalId\"), edgeGlobalId))\n .first();\n\n if (existing) {\n skipped++;\n continue;\n }\n\n if (!dryRun) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: belief.globalId,\n toGlobalId: theme.globalId,\n edgeType: \"relates_to_thesis\",\n weight: belief.confidence ?? 0.5,\n createdBy: \"backfill:scored_belief_theme\",\n topicId: String(args.projectId),\n fromNodeType: \"belief\",\n toNodeType: \"theme\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n }\n created++;\n }\n }\n\n return {\n dryRun,\n scoredBeliefs: scoredBeliefs.length,\n themeNodes: themeNodes.length,\n edgesCreated: created,\n edgesSkipped: skipped,\n };\n },\n});\n\n/**\n * @deprecated Legacy sprint backfill — removed. Sprints are D-tier.\n * Kept as no-op stub to avoid breaking deployed function references.\n */\nexport const backfillBeliefSprintIds = internalMutation({\n args: {\n ...optionalBeliefScopeArgs,\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, _args) => {\n return {\n dryRun: true,\n message: \"backfillBeliefSprintIds removed — sprints are D-tier legacy. Use worktrees.\",\n sprintsScanned: 0,\n beliefsWithSprints: 0,\n updated: 0,\n skipped: 0,\n };\n },\n});\n\n// =============================================================================\n// GET BELIEF CLUSTER POSITIONS (worktree-based)\n// =============================================================================\n\n/**\n * Get belief cluster positions for visualization.\n * Classifies each belief as \"clustered\" (in a worktree) or \"unprocessed\"\n * based on worktreeBeliefCluster membership.\n *\n * Used by PillarDetailPanel, PillarsPanel, BeliefListPanel.\n */\nexport const getBeliefClusterPositions = query({\n args: {\n ...optionalBeliefScopeArgs,\n userId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope || !scope.projectId) {\n return {\n positions: {},\n hasClusters: false,\n counts: { raw: 0, hypothesis: 0, conditional: 0, unprocessed: 0, total: 0 },\n };\n }\n\n const allBeliefNodes = await getBeliefNodesForScope(ctx, scope);\n const clusteredBeliefIds = new Set<string>();\n\n // Find all beliefs that belong to any worktree cluster\n for (const node of allBeliefNodes) {\n const links = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_belief\", (q: any) => q.eq(\"beliefId\", node._id))\n .first();\n if (links) {\n clusteredBeliefIds.add(String(node._id));\n }\n }\n\n const positions: Record<string, \"hypothesis\" | \"unprocessed\"> = {};\n for (const node of allBeliefNodes) {\n const id = String(node._id);\n // Beliefs in worktree clusters are treated as hypotheses (tested)\n positions[id] = clusteredBeliefIds.has(id) ? \"hypothesis\" : \"unprocessed\";\n }\n\n const unprocessedCount = allBeliefNodes.length - clusteredBeliefIds.size;\n\n return {\n positions,\n hasClusters: clusteredBeliefIds.size > 0,\n counts: {\n raw: 0,\n hypothesis: clusteredBeliefIds.size,\n conditional: 0,\n unprocessed: unprocessedCount,\n total: allBeliefNodes.length,\n },\n };\n },\n});\n\n// =============================================================================\n// REASSIGN BELIEFS TO A NEW TOPIC (for auto-branching)\n// =============================================================================\n\n/**\n * Reassign a batch of belief nodes to a different topic.\n *\n * Used by the density-based auto-branching system when beliefs are moved\n * from a parent topic into newly created subtopics. Patches `topicId`\n * and `updatedAt` on the target beliefs, and also reassigns any questions\n * and evidence nodes that are connected to the reassigned beliefs via edges.\n *\n * Skips nodes that don't exist or aren't active.\n */\nexport const reassignBeliefsTopic = mutation({\n args: {\n beliefNodeIds: v.array(v.id(\"epistemicNodes\")),\n targetTopicId: v.string(),\n reason: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // Verify the target topic exists\n const targetTopic = await ctx.db.get(args.targetTopicId as Id<\"topics\">);\n if (!targetTopic) {\n throw new Error(`Target topic not found: ${args.targetTopicId}`);\n }\n\n let reassigned = 0;\n let skipped = 0;\n const now = Date.now();\n const movedBeliefIds = new Set<string>();\n\n // Phase 1: Reassign the beliefs themselves\n for (const beliefNodeId of args.beliefNodeIds) {\n const node = await ctx.db.get(beliefNodeId);\n\n // Skip if node doesn't exist or isn't a belief\n if (!node || node.nodeType !== \"belief\") {\n skipped++;\n continue;\n }\n\n await ctx.db.patch(beliefNodeId, {\n topicId: args.targetTopicId,\n updatedAt: now,\n });\n movedBeliefIds.add(String(beliefNodeId));\n reassigned++;\n }\n\n // Phase 2: Find and reassign connected non-belief nodes (questions, evidence, etc.)\n // For each moved belief, find edges where the belief is source or target,\n // and reassign the connected non-belief node if it's in the same old topic.\n let connectedReassigned = 0;\n const alreadyReassigned = new Set<string>();\n\n for (const beliefId of movedBeliefIds) {\n // Outbound edges from this belief\n const outbound = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from\", (q: any) =>\n q.eq(\"fromNodeId\", beliefId as any)\n )\n .collect();\n\n // Inbound edges to this belief\n const inbound = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q: any) =>\n q.eq(\"toNodeId\", beliefId as any)\n )\n .collect();\n\n const connectedNodeIds = new Set<string>();\n for (const edge of outbound) {\n if (edge.toNodeId) connectedNodeIds.add(String(edge.toNodeId));\n }\n for (const edge of inbound) {\n if (edge.fromNodeId) connectedNodeIds.add(String(edge.fromNodeId));\n }\n\n for (const connectedId of connectedNodeIds) {\n // Skip beliefs (already handled in Phase 1) and already-reassigned nodes\n if (movedBeliefIds.has(connectedId) || alreadyReassigned.has(connectedId)) {\n continue;\n }\n\n try {\n const connectedNode = await ctx.db.get(connectedId as any) as any;\n if (!connectedNode || connectedNode.status !== \"active\") continue;\n // Only reassign if the connected node is still in the OLD topic\n // (i.e., not already in the target or a different subtopic)\n if (\n connectedNode.topicId &&\n String(connectedNode.topicId) !== String(args.targetTopicId)\n ) {\n await ctx.db.patch(connectedId as any, {\n topicId: args.targetTopicId,\n updatedAt: now,\n });\n alreadyReassigned.add(connectedId);\n connectedReassigned++;\n }\n } catch {\n // Skip nodes that can't be patched\n }\n }\n }\n\n return { reassigned, skipped, connectedReassigned };\n },\n});\n","/**\n * Audience Helpers\n *\n * Shared audience normalization and exposure-class utilities for policy/runtime paths.\n */\n\nexport type AudienceMode = \"internal\" | \"lp\" | \"public\";\nexport type AudienceClass = \"internal\" | \"restricted_external\" | \"public\";\n\nexport type ResolvedAudience = {\n audienceKey: string;\n audienceClass: AudienceClass;\n audienceMode: AudienceMode;\n};\n\nexport const AUDIENCE_CLASS_RANK: Record<AudienceClass, number> = {\n public: 0,\n restricted_external: 1,\n internal: 2,\n};\n\nfunction normalizeKey(key: string | undefined | null): string {\n return (key ?? \"\")\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9:_-]+/g, \"_\")\n .replace(/_+/g, \"_\")\n .replace(/^_+|_+$/g, \"\");\n}\n\nexport function normalizeAudienceKey(key: string | undefined | null): string {\n return normalizeKey(key);\n}\n\nexport function normalizeAudienceMode(\n mode: string | undefined | null\n): AudienceMode {\n if (mode === \"public\" || mode === \"lp\" || mode === \"internal\") {\n return mode;\n }\n return \"internal\";\n}\n\nexport function classFromAudienceMode(mode: AudienceMode): AudienceClass {\n if (mode === \"public\") {\n return \"public\";\n }\n if (mode === \"lp\") {\n return \"restricted_external\";\n }\n return \"internal\";\n}\n\nexport function modeFromAudienceClass(\n audienceClass: AudienceClass\n): AudienceMode {\n if (audienceClass === \"public\") {\n return \"public\";\n }\n if (audienceClass === \"restricted_external\") {\n return \"lp\";\n }\n return \"internal\";\n}\n\nexport function classFromAudienceKey(\n audienceKey: string | undefined | null,\n fallback: AudienceClass = \"internal\"\n): AudienceClass {\n const key = normalizeKey(audienceKey);\n if (!key) {\n return fallback;\n }\n if (key === \"internal\") {\n return \"internal\";\n }\n if (key === \"public\") {\n return \"public\";\n }\n if (\n key === \"lp\" ||\n key === \"external\" ||\n key === \"client\" ||\n key === \"partner\" ||\n key === \"portfolio\" ||\n key === \"network\" ||\n key === \"restricted_external\"\n ) {\n return \"restricted_external\";\n }\n return fallback;\n}\n\nexport function resolveAudience(args?: {\n audienceMode?: string | null;\n audienceKey?: string | null;\n audienceClass?: AudienceClass | null;\n}): ResolvedAudience {\n const fallbackMode = normalizeAudienceMode(args?.audienceMode);\n const fallbackKey = normalizeKey(args?.audienceKey) || fallbackMode;\n const fallbackClass =\n args?.audienceClass ?? classFromAudienceKey(fallbackKey);\n\n return {\n audienceKey: fallbackKey,\n audienceClass: fallbackClass,\n audienceMode: modeFromAudienceClass(fallbackClass),\n };\n}\n\nexport function canViewAudienceLabel(\n viewerAudience: string,\n resourceAudienceLabel: string | undefined | null\n): boolean {\n // Viewer fallback is least privilege; resource fallback is most restrictive.\n const viewerClass = classFromAudienceKey(viewerAudience, \"public\");\n const resourceClass = classFromAudienceKey(resourceAudienceLabel, \"internal\");\n return canAudienceClassAccess(viewerClass, resourceClass);\n}\n\nexport function canAudienceClassAccess(\n viewerClass: AudienceClass,\n resourceClass: AudienceClass\n): boolean {\n return AUDIENCE_CLASS_RANK[viewerClass] >= AUDIENCE_CLASS_RANK[resourceClass];\n}\n","/**\n * Audience Registry Kernel\n *\n * Tenant/workspace audience taxonomy resolution and principal audience-scope derivation.\n */\n\nimport {\n type AudienceClass,\n type AudienceMode,\n canAudienceClassAccess,\n classFromAudienceKey,\n classFromAudienceMode,\n modeFromAudienceClass,\n normalizeAudienceKey,\n normalizeAudienceMode,\n type ResolvedAudience,\n} from \"./audience\";\nimport type { MutationCtx, QueryCtx } from \"./convex\";\n\ntype DbCtx = QueryCtx | MutationCtx;\n\ntype AudienceRegistryRow = {\n audienceKey: string;\n audienceLabel: string;\n audienceClass: AudienceClass;\n workspaceId?: string;\n};\n\nconst DEFAULT_AUDIENCES: AudienceRegistryRow[] = [\n {\n audienceKey: \"internal\",\n audienceLabel: \"Internal\",\n audienceClass: \"internal\",\n },\n {\n audienceKey: \"lp\",\n audienceLabel: \"Limited Partners\",\n audienceClass: \"restricted_external\",\n },\n {\n audienceKey: \"public\",\n audienceLabel: \"Public\",\n audienceClass: \"public\",\n },\n];\n\nconst AUDIENCE_CLASS_PRIORITY: Record<AudienceClass, number> = {\n internal: 0,\n restricted_external: 1,\n public: 2,\n};\n\nexport type AllowedAudienceScope = {\n allowedAudienceClasses: AudienceClass[];\n allowedAudienceKeys: string[];\n allowedAudienceModes: AudienceMode[];\n};\n\nexport type PrincipalAudienceScope = {\n mode: \"legacy_open\" | \"grant_enforced\" | \"admin_override\";\n grantModelEnabled: boolean;\n grantedAudienceKeys: string[];\n grantedAudienceClasses: AudienceClass[];\n allowedAudienceKeys: string[];\n allowedAudienceClasses: AudienceClass[];\n allowedAudienceModes: AudienceMode[];\n};\n\nexport function deriveAllowedAudienceClasses(\n visibility: string | undefined | null\n): AudienceClass[] {\n if (visibility === \"public\") {\n return [\"internal\", \"restricted_external\", \"public\"];\n }\n if (visibility === \"firm\" || visibility === \"external\") {\n return [\"internal\", \"restricted_external\"];\n }\n return [\"internal\"];\n}\n\nfunction unique<T>(items: T[]): T[] {\n return [...new Set(items)];\n}\n\nfunction intersect<T>(left: T[], right: T[]): T[] {\n const rightSet = new Set(right);\n return left.filter((entry) => rightSet.has(entry));\n}\n\nfunction fallbackAudienceKeyForClass(audienceClass: AudienceClass): string {\n if (audienceClass === \"public\") {\n return \"public\";\n }\n if (audienceClass === \"restricted_external\") {\n return \"lp\";\n }\n return \"internal\";\n}\n\nfunction normalizeRegistryRow(row: {\n audienceKey: string;\n audienceLabel: string;\n audienceClass: AudienceClass;\n workspaceId?: string;\n}): AudienceRegistryRow {\n return {\n audienceKey: normalizeAudienceKey(row.audienceKey),\n audienceLabel: row.audienceLabel,\n audienceClass: row.audienceClass,\n workspaceId: row.workspaceId,\n };\n}\n\nfunction dedupeRegistryRows(\n rows: AudienceRegistryRow[]\n): AudienceRegistryRow[] {\n const byKey = new Map<string, AudienceRegistryRow>();\n\n for (const row of rows) {\n const key = normalizeAudienceKey(row.audienceKey);\n if (!key) {\n continue;\n }\n const existing = byKey.get(key);\n const isWorkspaceScoped = row.workspaceId !== undefined;\n const existingWorkspaceScoped = existing?.workspaceId !== undefined;\n\n if (!existing || (isWorkspaceScoped && !existingWorkspaceScoped)) {\n byKey.set(key, {\n ...row,\n audienceKey: key,\n });\n }\n }\n\n const normalized = [...byKey.values()];\n normalized.sort((a, b) => {\n const classDelta =\n AUDIENCE_CLASS_PRIORITY[a.audienceClass] -\n AUDIENCE_CLASS_PRIORITY[b.audienceClass];\n if (classDelta !== 0) {\n return classDelta;\n }\n return a.audienceKey.localeCompare(b.audienceKey);\n });\n return normalized;\n}\n\nfunction isGrantActive(grant: {\n status: \"active\" | \"revoked\" | \"expired\";\n expiresAt?: number;\n}): boolean {\n if (grant.status !== \"active\") {\n return false;\n }\n if (grant.expiresAt !== undefined && grant.expiresAt <= Date.now()) {\n return false;\n }\n return true;\n}\n\nfunction isWorkspaceScopeMatch(args: {\n rowWorkspaceId?: string;\n workspaceId?: string | null;\n}): boolean {\n if (!args.rowWorkspaceId) {\n return true;\n }\n if (!args.workspaceId) {\n return false;\n }\n return String(args.rowWorkspaceId) === String(args.workspaceId);\n}\n\nasync function queryRegistryRows(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n }\n): Promise<AudienceRegistryRow[]> {\n if (!args.tenantId) {\n return [...DEFAULT_AUDIENCES];\n }\n\n const rows = await ctx.db\n .query(\"platformAudiences\")\n .withIndex(\"by_tenantId\", (q) => q.eq(\"tenantId\", args.tenantId!))\n .collect();\n\n const workspaceIdString = args.workspaceId ? String(args.workspaceId) : null;\n const tenantScoped = rows.filter((row) => row.status === \"active\");\n const applicable = tenantScoped.filter((row) => {\n if (!row.workspaceId) {\n return true;\n }\n if (!workspaceIdString) {\n return false;\n }\n return String(row.workspaceId) === workspaceIdString;\n });\n\n return dedupeRegistryRows([\n ...DEFAULT_AUDIENCES,\n ...applicable.map((row) =>\n normalizeRegistryRow({\n audienceKey: row.audienceKey,\n audienceLabel: row.audienceLabel,\n audienceClass: row.audienceClass,\n workspaceId: row.workspaceId,\n })\n ),\n ]);\n}\n\nexport async function listAudienceRegistryRows(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n }\n): Promise<AudienceRegistryRow[]> {\n return queryRegistryRows(ctx, args);\n}\n\nexport async function resolveAudienceFromRegistry(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n audienceMode?: string | null;\n audienceKey?: string | null;\n audienceClass?: AudienceClass | null;\n }\n): Promise<ResolvedAudience> {\n const normalizedMode = normalizeAudienceMode(args.audienceMode);\n const requestedKey =\n normalizeAudienceKey(args.audienceKey) ||\n normalizeAudienceKey(normalizedMode) ||\n \"internal\";\n const registry = await queryRegistryRows(ctx, {\n tenantId: args.tenantId,\n workspaceId: args.workspaceId,\n });\n\n const registryMatch = registry.find(\n (entry) => normalizeAudienceKey(entry.audienceKey) === requestedKey\n );\n if (registryMatch) {\n return {\n audienceKey: requestedKey,\n audienceClass: registryMatch.audienceClass,\n audienceMode: modeFromAudienceClass(registryMatch.audienceClass),\n };\n }\n\n if (args.audienceClass) {\n return {\n audienceKey: requestedKey,\n audienceClass: args.audienceClass,\n audienceMode: modeFromAudienceClass(args.audienceClass),\n };\n }\n\n if (args.audienceKey) {\n return {\n audienceKey: requestedKey,\n audienceClass: \"internal\",\n audienceMode: \"internal\",\n };\n }\n\n return {\n audienceKey: requestedKey,\n audienceClass: classFromAudienceMode(normalizedMode),\n audienceMode: normalizedMode,\n };\n}\n\nexport async function resolveAudienceClassFromRegistry(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n audienceKey?: string | null;\n fallbackClass?: AudienceClass;\n }\n): Promise<AudienceClass> {\n const normalizedKey = normalizeAudienceKey(args.audienceKey);\n if (!normalizedKey) {\n return args.fallbackClass ?? \"internal\";\n }\n\n const registry = await queryRegistryRows(ctx, {\n tenantId: args.tenantId,\n workspaceId: args.workspaceId,\n });\n const match = registry.find(\n (entry) => normalizeAudienceKey(entry.audienceKey) === normalizedKey\n );\n if (match) {\n return match.audienceClass;\n }\n\n return classFromAudienceKey(normalizedKey, args.fallbackClass ?? \"internal\");\n}\n\nexport async function canViewAudienceLabelWithRegistry(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n viewerAudienceKey?: string | null;\n resourceAudienceKey?: string | null;\n }\n): Promise<boolean> {\n const viewerClass = await resolveAudienceClassFromRegistry(ctx, {\n tenantId: args.tenantId,\n workspaceId: args.workspaceId,\n audienceKey: args.viewerAudienceKey,\n fallbackClass: \"public\",\n });\n const resourceClass = await resolveAudienceClassFromRegistry(ctx, {\n tenantId: args.tenantId,\n workspaceId: args.workspaceId,\n audienceKey: args.resourceAudienceKey,\n fallbackClass: \"internal\",\n });\n return canAudienceClassAccess(viewerClass, resourceClass);\n}\n\nexport async function resolveAllowedAudienceScopeForVisibility(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n visibility?: string | null;\n }\n): Promise<AllowedAudienceScope> {\n const allowedAudienceClasses = deriveAllowedAudienceClasses(args.visibility);\n const registry = await queryRegistryRows(ctx, {\n tenantId: args.tenantId,\n workspaceId: args.workspaceId,\n });\n\n const allowedAudienceKeys = unique(\n registry\n .filter((entry) => allowedAudienceClasses.includes(entry.audienceClass))\n .map((entry) => normalizeAudienceKey(entry.audienceKey))\n .filter(Boolean)\n );\n\n const fallbackKeys = allowedAudienceClasses.map(fallbackAudienceKeyForClass);\n const mergedKeys = unique([...allowedAudienceKeys, ...fallbackKeys]);\n const allowedAudienceModes = unique(\n allowedAudienceClasses.map((audienceClass) =>\n modeFromAudienceClass(audienceClass)\n )\n );\n\n return {\n allowedAudienceClasses,\n allowedAudienceKeys: mergedKeys,\n allowedAudienceModes,\n };\n}\n\nexport async function resolvePrincipalAudienceScope(\n ctx: DbCtx,\n args: {\n tenantId?: string | null;\n workspaceId?: string | null;\n principalId: string;\n groupIds: string[];\n isPrivileged: boolean;\n }\n): Promise<PrincipalAudienceScope> {\n const registry = await queryRegistryRows(ctx, {\n tenantId: args.tenantId,\n workspaceId: args.workspaceId,\n });\n const registryKeys = unique(\n registry.map((row) => normalizeAudienceKey(row.audienceKey)).filter(Boolean)\n );\n const registryClasses = unique(registry.map((row) => row.audienceClass));\n\n if (!args.tenantId) {\n return {\n mode: \"legacy_open\",\n grantModelEnabled: false,\n grantedAudienceKeys: [\"internal\"],\n grantedAudienceClasses: [\"internal\"],\n allowedAudienceKeys: registryKeys,\n allowedAudienceClasses: registryClasses,\n allowedAudienceModes: registryClasses.map((entry) =>\n modeFromAudienceClass(entry)\n ),\n };\n }\n\n const tenantGrants = await ctx.db\n .query(\"platformAudienceGrants\")\n .withIndex(\"by_tenant_audienceKey\", (q) => q.eq(\"tenantId\", args.tenantId!))\n .collect();\n\n const activeTenantGrants = tenantGrants.filter((grant) => {\n if (!isGrantActive(grant as any)) {\n return false;\n }\n return isWorkspaceScopeMatch({\n rowWorkspaceId: grant.workspaceId,\n workspaceId: args.workspaceId,\n });\n });\n const grantModelEnabled = activeTenantGrants.length > 0;\n\n if (args.isPrivileged) {\n return {\n mode: \"admin_override\",\n grantModelEnabled,\n grantedAudienceKeys: registryKeys,\n grantedAudienceClasses: registryClasses,\n allowedAudienceKeys: registryKeys,\n allowedAudienceClasses: registryClasses,\n allowedAudienceModes: registryClasses.map((entry) =>\n modeFromAudienceClass(entry)\n ),\n };\n }\n\n if (!grantModelEnabled) {\n return {\n mode: \"legacy_open\",\n grantModelEnabled: false,\n grantedAudienceKeys: [\"internal\"],\n grantedAudienceClasses: [\"internal\"],\n allowedAudienceKeys: registryKeys,\n allowedAudienceClasses: registryClasses,\n allowedAudienceModes: registryClasses.map((entry) =>\n modeFromAudienceClass(entry)\n ),\n };\n }\n\n const directGrants = await ctx.db\n .query(\"platformAudienceGrants\")\n .withIndex(\"by_tenant_principal\", (q) =>\n q.eq(\"tenantId\", args.tenantId!).eq(\"principalId\", args.principalId)\n )\n .collect();\n\n const groupGrants: Array<{\n audienceKey: string;\n audienceClass: AudienceClass;\n status: \"active\" | \"revoked\" | \"expired\";\n expiresAt?: number;\n workspaceId?: string;\n }> = [];\n for (const groupId of args.groupIds) {\n const rows = await ctx.db\n .query(\"platformAudienceGrants\")\n .withIndex(\"by_tenant_group\", (q) =>\n q.eq(\"tenantId\", args.tenantId!).eq(\"groupId\", groupId)\n )\n .collect();\n groupGrants.push(...(rows as any));\n }\n\n const activeGrantRows = [...directGrants, ...groupGrants].filter((grant) => {\n if (!isGrantActive(grant as any)) {\n return false;\n }\n return isWorkspaceScopeMatch({\n rowWorkspaceId: grant.workspaceId,\n workspaceId: args.workspaceId,\n });\n });\n\n const registryKeySet = new Set(registryKeys);\n const grantedAudienceKeys = unique(\n activeGrantRows\n .map((grant) => normalizeAudienceKey(grant.audienceKey))\n .filter((key) => key && registryKeySet.has(key))\n );\n const grantedAudienceClasses = unique(\n activeGrantRows\n .map((grant) => grant.audienceClass)\n .filter((entry): entry is AudienceClass => Boolean(entry))\n );\n\n const allowedAudienceKeys = unique([\n \"internal\",\n ...grantedAudienceKeys,\n ]).filter((key) => key === \"internal\" || registryKeySet.has(key));\n const allowedAudienceClasses = unique<AudienceClass>([\n \"internal\",\n ...grantedAudienceClasses,\n ...allowedAudienceKeys.map((key): AudienceClass => {\n const registryMatch = registry.find(\n (row) => normalizeAudienceKey(row.audienceKey) === key\n );\n return registryMatch?.audienceClass ?? classFromAudienceMode(\"internal\");\n }),\n ]);\n\n return {\n mode: \"grant_enforced\",\n grantModelEnabled: true,\n grantedAudienceKeys: unique([\"internal\", ...grantedAudienceKeys]),\n grantedAudienceClasses: unique([\"internal\", ...grantedAudienceClasses]),\n allowedAudienceKeys,\n allowedAudienceClasses,\n allowedAudienceModes: unique(\n allowedAudienceClasses.map((entry) => modeFromAudienceClass(entry))\n ),\n };\n}\n\nexport function intersectAudienceScopes(\n visibilityScope: AllowedAudienceScope,\n principalScope: PrincipalAudienceScope\n): AllowedAudienceScope {\n const allowedAudienceClasses = intersect(\n visibilityScope.allowedAudienceClasses,\n principalScope.allowedAudienceClasses\n );\n const allowedAudienceKeys = intersect(\n visibilityScope.allowedAudienceKeys.map((entry) =>\n normalizeAudienceKey(entry)\n ),\n principalScope.allowedAudienceKeys.map((entry) =>\n normalizeAudienceKey(entry)\n )\n ).filter(Boolean);\n const mergedClasses = unique(allowedAudienceClasses);\n const mergedKeys = unique(allowedAudienceKeys);\n\n return {\n allowedAudienceClasses: mergedClasses,\n allowedAudienceKeys: mergedKeys,\n allowedAudienceModes: unique(\n mergedClasses.map((audienceClass) => modeFromAudienceClass(audienceClass))\n ),\n };\n}\n\nexport async function ensureDefaultAudienceRegistry(\n ctx: MutationCtx,\n args: {\n tenantId: string;\n actorPrincipalId: string;\n }\n): Promise<{\n inserted: number;\n updated: number;\n}> {\n const now = Date.now();\n let inserted = 0;\n let updated = 0;\n\n for (const seed of DEFAULT_AUDIENCES) {\n const existing = await ctx.db\n .query(\"platformAudiences\")\n .withIndex(\"by_tenant_audienceKey\", (q) =>\n q.eq(\"tenantId\", args.tenantId).eq(\"audienceKey\", seed.audienceKey)\n )\n .collect();\n\n const tenantScoped = existing.find((row) => row.workspaceId === undefined);\n if (!tenantScoped) {\n await ctx.db.insert(\"platformAudiences\", {\n tenantId: args.tenantId,\n audienceKey: seed.audienceKey,\n audienceLabel: seed.audienceLabel,\n audienceClass: seed.audienceClass,\n status: \"active\",\n createdBy: args.actorPrincipalId,\n createdAt: now,\n updatedAt: now,\n });\n inserted += 1;\n continue;\n }\n\n const needsPatch =\n tenantScoped.status !== \"active\" ||\n tenantScoped.audienceLabel !== seed.audienceLabel ||\n tenantScoped.audienceClass !== seed.audienceClass;\n if (!needsPatch) {\n continue;\n }\n\n await ctx.db.patch(tenantScoped._id, {\n audienceLabel: seed.audienceLabel,\n audienceClass: seed.audienceClass,\n status: \"active\",\n updatedAt: now,\n });\n updated += 1;\n }\n\n return { inserted, updated };\n}\n","import {\n actionGeneric,\n anyApi,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\nexport const api = anyApi as any;\nexport const components = componentsGeneric() as any;\nexport const internal = anyApi as any;\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> = any;\nexport type DataModel = any;\nexport type ActionCtx = any;\nexport type DatabaseReader = any;\nexport type DatabaseWriter = any;\nexport type MutationCtx = any;\nexport type QueryCtx = any;\n\nexport const action = actionGeneric as any;\nexport const httpAction = httpActionGeneric as any;\nexport const internalAction = internalActionGeneric as any;\nexport const internalMutation = internalMutationGeneric as any;\nexport const internalQuery = internalQueryGeneric as any;\nexport const mutation = mutationGeneric as any;\nexport const query = queryGeneric as any;\n","/** Enum validation helpers for schema-management contracts. */\nimport { internal } from \"./convex\";\n\nexport type SchemaEnumCategory =\n | \"topic_type\"\n | \"branch_schema\"\n | \"lens_perspective_type\"\n | \"belief_type\"\n | \"edge_type\"\n | \"worktree_type\"\n | \"worktree_phase\"\n | \"activity_type\";\n\nconst BUILTIN_ENUM_FALLBACK: Record<SchemaEnumCategory, Set<string>> = {\n topic_type: new Set([\n \"domain\",\n \"theme\",\n \"deal\",\n \"strategy\",\n \"constitution\",\n \"project\",\n \"portfolio\",\n \"architecture\",\n \"capability\",\n \"runtime\",\n \"interface\",\n \"governance\",\n \"operations\",\n \"security\",\n \"data\",\n ]),\n branch_schema: new Set([\"pillar\", \"track\", \"dimension\", \"axis\", \"phase\"]),\n lens_perspective_type: new Set([\n \"investigation\",\n \"monitoring\",\n \"analysis\",\n \"comparison\",\n \"taxonomy\",\n ]),\n belief_type: new Set([\n \"belief\",\n \"hypothesis\",\n \"principle\",\n \"invariant\",\n \"assumption\",\n \"tenet\",\n \"prior\",\n \"preference\",\n \"goal\",\n \"forecast\",\n \"decision\",\n \"constraint\",\n \"tradeoff\",\n \"policy\",\n \"implementation_choice\",\n // Coding intelligence domain\n \"implementation_decision\",\n \"interface_contract\",\n \"migration_state\",\n \"code_pattern\",\n \"deprecation_notice\",\n ]),\n edge_type: new Set([\n // === 6 CANONICAL EPISTEMIC TYPES ===\n \"supports\", // L3↔L3: belief bears on belief (weight -1 to +1)\n \"informs\", // L2→L3: evidence bears on belief\n \"depends_on\", // L3→L3, Q→Q: structural gate\n \"derived_from\", // Any→Any: provenance chain\n \"contains\", // Any→Any: hierarchy, scoping, membership\n \"tests\", // Q→L3: question interrogates belief\n // === STRUCTURAL / LIFECYCLE ===\n \"supersedes\",\n \"responds_to\",\n \"belongs_to\",\n \"relates_to_thesis\",\n // === ONTOLOGICAL (tenant-extensible) ===\n \"works_at\",\n \"invested_in\",\n \"competes_with\",\n \"participates_in\",\n \"founded_by\",\n \"evaluates\",\n \"performs\",\n \"function_in\",\n \"impacts\",\n \"raised_from\",\n \"mentioned_in\",\n \"perspective_on\",\n \"plays_theme\",\n ]),\n worktree_type: new Set([\n \"belief_test\",\n \"existential\",\n \"contradiction\",\n \"refinement\",\n \"coverage\",\n \"discovery\",\n \"clarification\",\n \"confirmation\",\n ]),\n worktree_phase: new Set([\n \"cluster_mapping\",\n \"hypothesis_formation\",\n \"question_generation\",\n \"evidence_collection\",\n \"synthesis\",\n \"decision\",\n \"retrospective\",\n ]),\n activity_type: new Set([\n \"create\",\n \"update\",\n \"review\",\n \"merge\",\n \"archive\",\n \"comment\",\n \"status_change\",\n \"evidence_added\",\n \"question_added\",\n ]),\n};\n\nfunction normalizeEnumValue(value: string): string {\n return value.trim().toLowerCase();\n}\n\nexport async function validateSchemaEnumValue(\n ctx: {\n runQuery: (fn: any, args: Record<string, unknown>) => Promise<unknown>;\n },\n args: {\n category: SchemaEnumCategory;\n value: string;\n tenantId?: string;\n }\n): Promise<{ valid: boolean; source: \"schema\" | \"builtin\" | \"none\" }> {\n const normalized = normalizeEnumValue(args.value);\n if (!normalized) {\n return { valid: false, source: \"none\" };\n }\n\n try {\n const validFromSchema = (await ctx.runQuery(\n internal.schemaConfig.internalValidate,\n {\n category: args.category,\n value: normalized,\n tenantId: args.tenantId,\n }\n )) as boolean;\n if (validFromSchema) {\n return { valid: true, source: \"schema\" };\n }\n } catch {\n // Fall back to built-ins when schema config is not reachable in this context.\n }\n\n const fallback = BUILTIN_ENUM_FALLBACK[args.category];\n if (fallback.has(normalized)) {\n return { valid: true, source: \"builtin\" };\n }\n\n return { valid: false, source: \"none\" };\n}\n\nexport async function assertSchemaEnumValue(\n ctx: {\n runQuery: (fn: any, args: Record<string, unknown>) => Promise<unknown>;\n },\n args: {\n category: SchemaEnumCategory;\n value?: string;\n tenantId?: string;\n context: string;\n }\n): Promise<string | undefined> {\n if (typeof args.value !== \"string\") {\n return;\n }\n const normalized = normalizeEnumValue(args.value);\n if (!normalized) {\n return;\n }\n\n const validation = await validateSchemaEnumValue(ctx, {\n category: args.category,\n value: normalized,\n tenantId: args.tenantId,\n });\n\n if (!validation.valid) {\n const tenantHint = args.tenantId ? ` for tenant ${args.tenantId}` : \"\";\n throw new Error(\n `[${args.context}] Invalid value \"${normalized}\" for category \"${args.category}\"${tenantHint}. ` +\n \"Add it to schemaEnumConfig before use.\"\n );\n }\n\n return normalized;\n}\n","/**\n * Common Validators\n *\n * Shared validators for patterns used across domains.\n *\n * @module schema/shared/common\n */\n\nimport { v } from \"convex/values\";\nimport { looseJsonArray, looseJsonObject, looseJsonValue } from \"../validators\";\n\n// =============================================================================\n// CONFIDENCE\n// =============================================================================\n\n/**\n * Confidence level (0-1 scale).\n */\nexport const confidence = v.number();\n\n/**\n * Named confidence levels.\n */\nexport const confidenceLevel = v.union(\n v.literal(\"very_high\"), // 0.9+\n v.literal(\"high\"), // 0.7-0.9\n v.literal(\"medium\"), // 0.4-0.7\n v.literal(\"low\"), // 0.2-0.4\n v.literal(\"very_low\") // 0-0.2\n);\n\n/**\n * Convert numeric confidence to level.\n */\nexport function toConfidenceLevel(\n confidence: number\n): \"very_high\" | \"high\" | \"medium\" | \"low\" | \"very_low\" {\n if (confidence >= 0.9) {\n return \"very_high\";\n }\n if (confidence >= 0.7) {\n return \"high\";\n }\n if (confidence >= 0.4) {\n return \"medium\";\n }\n if (confidence >= 0.2) {\n return \"low\";\n }\n return \"very_low\";\n}\n\n// =============================================================================\n// PRIORITY\n// =============================================================================\n\n/**\n * Standard priority levels (1 = highest).\n */\nexport const priorityLevel = v.union(\n v.literal(1), // Critical\n v.literal(2), // High\n v.literal(3), // Medium\n v.literal(4), // Low\n v.literal(5) // Backlog\n);\n\n/**\n * Named priority levels.\n */\nexport const namedPriority = v.union(\n v.literal(\"critical\"),\n v.literal(\"high\"),\n v.literal(\"medium\"),\n v.literal(\"low\"),\n v.literal(\"backlog\")\n);\n\n// =============================================================================\n// STATUS\n// =============================================================================\n\n/**\n * Generic lifecycle status.\n */\nexport const lifecycleStatus = v.union(\n v.literal(\"active\"),\n v.literal(\"paused\"),\n v.literal(\"completed\"),\n v.literal(\"archived\")\n);\n\n/**\n * Processing status.\n */\nexport const processingStatus = v.union(\n v.literal(\"pending\"),\n v.literal(\"processing\"),\n v.literal(\"completed\"),\n v.literal(\"failed\")\n);\n\n// =============================================================================\n// EXTERNAL IDS\n// =============================================================================\n\n/**\n * Common external ID references.\n */\nexport const externalIds = v.object({\n crunchbaseId: v.optional(v.string()),\n linkedinUrl: v.optional(v.string()),\n pitchbookId: v.optional(v.string()),\n twitterUrl: v.optional(v.string()),\n domain: v.optional(v.string()),\n});\n\n// =============================================================================\n// SOURCE ATTRIBUTION\n// =============================================================================\n\n/**\n * Source type for evidence/information.\n */\nexport const sourceType = v.union(\n v.literal(\"proprietary\"), // Internal Stack research\n v.literal(\"primary\"), // Direct interviews, calls\n v.literal(\"secondary\"), // Published sources\n v.literal(\"ai_generated\"), // AI-synthesized\n v.literal(\"user_input\"), // Manual user entry\n v.literal(\"inferred\") // System inference\n);\n\n/**\n * Source attribution.\n */\nexport const sourceAttribution = v.object({\n sourceType: v.optional(sourceType),\n sourceId: v.optional(v.string()), // Reference to source entity\n sourceUrl: v.optional(v.string()),\n sourceDate: v.optional(v.number()),\n sourceName: v.optional(v.string()),\n});\n\n// =============================================================================\n// LOOSE JSON\n// =============================================================================\n\n/**\n * Shallow JSON validators for dynamic payloads.\n *\n * Canonical source now lives in Lucern schema-management validators.\n */\nexport { looseJsonArray, looseJsonObject, looseJsonValue };\n\n// =============================================================================\n// PAGINATION\n// =============================================================================\n\n/**\n * Pagination parameters.\n */\nexport const pagination = v.object({\n cursor: v.optional(v.string()),\n limit: v.optional(v.number()),\n});\n\n/**\n * Pagination result metadata.\n */\nexport const paginationMeta = v.object({\n hasMore: v.boolean(),\n nextCursor: v.optional(v.string()),\n totalCount: v.optional(v.number()),\n});\n\n// =============================================================================\n// RICH TEXT\n// =============================================================================\n\n/**\n * Rich text content (for editors like TipTap).\n */\nexport const richTextContent = v.object({\n type: v.literal(\"doc\"),\n content: looseJsonArray,\n});\n\n/**\n * Content with optional rich text.\n */\nexport const content = v.union(v.string(), richTextContent);\n\n// =============================================================================\n// TOKEN USAGE\n// =============================================================================\n\n/**\n * LLM token usage tracking.\n */\nexport const tokenUsage = v.object({\n promptTokens: v.optional(v.number()),\n completionTokens: v.optional(v.number()),\n totalTokens: v.optional(v.number()),\n});\n\n// =============================================================================\n// FILE METADATA\n// =============================================================================\n\n/**\n * File upload metadata.\n */\nexport const fileMetadata = v.object({\n fileName: v.optional(v.string()),\n fileSize: v.optional(v.number()),\n mimeType: v.optional(v.string()),\n storageId: v.optional(v.id(\"_storage\")),\n externalUrl: v.optional(v.string()),\n});\n","/**\n * Epistemic Nodes Table\n *\n * Unified knowledge graph nodes: epistemic objects + ontological entities.\n * - Epistemic: beliefs, questions, evidence, sources, syntheses, themes, deals\n * - Ontological: companies, people, investors, functions, value chains\n *\n * This is THE source of truth for all knowledge objects in StackOS.\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n * @module schema/spine/tables/epistemicNodes\n */\n\nimport { defineTable } from \"convex/server\";\nimport { v } from \"convex/values\";\nimport { looseJsonObject } from \"../../shared/common\";\n\n// =============================================================================\n// NODE TYPE VALIDATORS\n// =============================================================================\n\n/**\n * All valid node types in the epistemic graph.\n * Organized by epistemic layer (L4 → L3 → L2 → L1 → Ontological)\n */\nexport const nodeType = v.union(\n // --- L4: Audit Targets (decisions, outcomes) ---\n v.literal(\"decision\"), // Investment decision with knowledge horizon snapshot\n\n // --- L3: Traversal Anchors (epistemic structure) ---\n v.literal(\"belief\"), // Structured conviction (immutable formulation)\n v.literal(\"question\"), // Unit of uncertainty\n v.literal(\"theme\"), // Investment thesis / conviction cluster\n v.literal(\"deal\"), // Investment evaluation process\n v.literal(\"topic\"), // Hierarchical knowledge container\n\n // --- L2: Compression Boundary (minimum reasoning unit) ---\n v.literal(\"claim\"), // Atomic assertion that can be true/false\n v.literal(\"evidence\"), // Interpreted signal linked to beliefs\n v.literal(\"synthesis\"), // Primers, deep research\n v.literal(\"answer\"), // Immutable answer snapshot for a question\n\n // --- L1: Terminal Leaves (non-traversable, grounding) ---\n v.literal(\"atomic_fact\"), // Raw fact from source (not interpreted)\n v.literal(\"excerpt\"), // Direct quote from source document\n v.literal(\"source\"), // News, documents, transcripts\n\n // --- Ontological Entities (things in the world) ---\n v.literal(\"company\"), // Organization (subtype: private, corporate, portfolio)\n v.literal(\"person\"), // Individual (founder, expert, LP, contact)\n v.literal(\"investor\"), // Investment entity (subtype: vc, lp, cvc, pe, family_office, angel)\n v.literal(\"function\"), // What a company does (from classifier)\n v.literal(\"value_chain\") // Market structure / value flow\n);\n\n/**\n * Epistemic layer for traversal rules.\n * Traversal: L4→L3→L2→L1, never skip layers.\n */\nexport const epistemicLayer = v.union(\n v.literal(\"L4\"), // Decisions, outcomes - audit targets\n v.literal(\"L3\"), // Beliefs, questions, themes - traversal anchors\n v.literal(\"L2\"), // Claims, evidence, synthesis - compression boundary\n v.literal(\"L1\"), // Atomic facts, excerpts, sources - terminal leaves\n v.literal(\"ontological\"), // Companies, people, etc - not epistemic\n v.literal(\"organizational\") // Topics, lenses, worktrees — structural containers\n);\n\n/**\n * Node lifecycle status.\n */\nexport const nodeStatus = v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"), // Replaced by newer version\n v.literal(\"archived\"),\n v.literal(\"deleted\")\n);\n\n/**\n * How the node was created.\n */\nexport const sourceType = v.union(\n v.literal(\"human\"), // User created directly\n v.literal(\"ai_extracted\"), // LLM extracted from a source\n v.literal(\"ai_generated\"), // LLM synthesized/created\n v.literal(\"imported\"), // External system import\n v.literal(\"system\"), // System-generated (migrations, classifiers)\n v.literal(\"verified\"), // Human-verified source\n v.literal(\"proprietary\") // Proprietary/internal data\n);\n\n/**\n * Verification status for nodes.\n */\nexport const verificationStatus = v.union(\n v.literal(\"unverified\"),\n v.literal(\"human_verified\"),\n v.literal(\"ai_verified\"),\n v.literal(\"contradicted\"),\n v.literal(\"outdated\")\n);\n\n/**\n * Neo4j sync status.\n */\nexport const syncStatus = v.union(\n v.literal(\"synced\"), // Node and edges fully synced to Neo4j\n v.literal(\"pending_edges\"), // Node created, edges being created\n v.literal(\"edge_creation_failed\") // Edge creation failed, needs retry\n);\n\n// =============================================================================\n// POLICY / ENTITLEMENT METADATA\n// =============================================================================\n\nexport const audienceLabel = v.string();\n\nexport const sensitivityTier = v.union(\n v.literal(\"low\"),\n v.literal(\"medium\"),\n v.literal(\"high\"),\n v.literal(\"restricted\")\n);\n\nexport const exportClass = v.union(\n v.literal(\"internal_only\"),\n v.literal(\"client_safe\"),\n v.literal(\"public_safe\"),\n v.literal(\"restricted\")\n);\n\nexport const anonymizationClass = v.union(\n v.literal(\"none\"),\n v.literal(\"standard\"),\n v.literal(\"strict\")\n);\n\n// =============================================================================\n// TYPED METADATA VALIDATORS\n// =============================================================================\n\n// --- BELIEF METADATA ---\n// Epistemic status tracks where a belief is in its lifecycle (computed display status)\nexport const epistemicStatus = v.union(\n v.literal(\"hypothesis\"), // Initial conjecture, low evidence\n v.literal(\"emerging\"), // Building evidence, gaining traction\n v.literal(\"established\"), // Well-evidenced, core to thesis\n v.literal(\"challenged\"), // Contradicting evidence appeared\n v.literal(\"assumption\"), // Taken as given, not actively tested\n v.literal(\"deprecated\") // Superseded or abandoned\n);\n\n/**\n * Canonical belief lifecycle status.\n *\n * This field is distinct from `status`:\n * - `status`: archival/supersession lifecycle of the node itself.\n * - `beliefStatus`: epistemic lifecycle of the claim.\n */\nexport const beliefStatus = v.union(\n v.literal(\"assumption\"),\n v.literal(\"hypothesis\"),\n v.literal(\"belief\"),\n v.literal(\"fact\")\n);\n\n// How easily can this belief be reversed if wrong?\nexport const reversibility = v.union(\n v.literal(\"irreversible\"), // One-way door decision\n v.literal(\"hard_to_reverse\"), // Significant cost to undo\n v.literal(\"reversible\"), // Can change course with moderate effort\n v.literal(\"trivial\") // Easy to adjust\n);\n\nexport const predictionOutcome = v.union(\n v.literal(\"pending\"),\n v.literal(\"confirmed\"),\n v.literal(\"disconfirmed\"),\n v.literal(\"partial\"),\n v.literal(\"expired\")\n);\n\nexport const predictionMeta = v.object({\n isPrediction: v.boolean(),\n registeredAt: v.number(), // When prediction was made\n expectedBy: v.optional(v.number()), // When we expect resolution\n outcome: v.optional(predictionOutcome),\n outcomeRecordedAt: v.optional(v.number()),\n outcomeEvidenceId: v.optional(v.string()), // globalId of confirming evidence\n confidenceAtPrediction: v.optional(v.number()), // 0-1\n actualVsPredicted: v.optional(v.string()), // Notes on how outcome compared\n});\n\n// --- EVIDENCE METADATA ---\nexport const methodology = v.union(\n // Primary Research (high value)\n v.literal(\"primary_research\"), // Direct investigation\n v.literal(\"expert_interview\"), // Expert call/interview\n v.literal(\"customer_interview\"), // Customer research\n v.literal(\"field_observation\"), // On-site observation\n v.literal(\"proprietary_data\"), // Internal data analysis\n\n // Secondary Research\n v.literal(\"desk_research\"), // Public sources\n v.literal(\"regulatory_filing\"), // SEC, regulatory docs\n v.literal(\"news_article\"), // News/press\n v.literal(\"academic_paper\"), // Academic research\n\n // AI-Assisted\n v.literal(\"ai_synthesis\"), // AI-generated synthesis\n v.literal(\"ai_extraction\") // AI-extracted from source\n);\n\nexport const informationAsymmetry = v.union(\n v.literal(\"proprietary\"), // Only we have this\n v.literal(\"early\"), // We're early but others will get it\n v.literal(\"common\") // Everyone has access\n);\n\n// Evidence temporal nature: factual (resolved outcome) vs forecast (prediction)\n// See convex/schema/spine/nodes/evidence.ts for full documentation.\nexport const temporalNature = v.union(\n v.literal(\"factual\"), // Resolved outcome. Grounded in reality.\n v.literal(\"forecast\"), // Prediction. Will resolve. Discounted weight.\n v.literal(\"unknown\") // Not yet classified.\n);\n\n// --- QUESTION METADATA ---\nexport const questionType = v.union(\n v.literal(\"validation\"), // Does evidence support this belief?\n v.literal(\"falsification\"), // What would prove this belief wrong?\n v.literal(\"assumption_probe\"), // Is this unstated assumption true?\n v.literal(\"prediction_test\"), // Will this predicted outcome occur?\n v.literal(\"counterfactual\"), // What would we expect if X were false?\n v.literal(\"discovery\"), // What don't we know yet?\n v.literal(\"clarification\"), // What does X actually mean?\n v.literal(\"comparison\"), // How does X compare to Y?\n v.literal(\"causal\"), // What caused X?\n v.literal(\"mechanism\"), // How does X work?\n v.literal(\"general\") // Unclassified\n);\n\nexport const questionPriority = v.union(\n v.literal(\"critical\"), // Blocks decision-making\n v.literal(\"high\"), // Important for thesis\n v.literal(\"medium\"), // Would be nice to know\n v.literal(\"low\") // Background/curiosity\n);\n\nexport const answerQuality = v.union(\n v.literal(\"definitive\"), // Clear, well-supported\n v.literal(\"strong\"), // Good evidence, high confidence\n v.literal(\"moderate\"), // Some evidence\n v.literal(\"weak\"), // Limited evidence\n v.literal(\"speculative\"), // Mostly conjecture\n v.literal(\"unanswered\") // No answer yet\n);\n\n// --- BELIEF CONSENSUS METADATA (for non-consensus detection) ---\nexport const consensusView = v.union(\n v.literal(\"aligned\"), // We agree with market consensus\n v.literal(\"ahead_of\"), // We see this before consensus does\n v.literal(\"contrarian\"), // We actively disagree with consensus\n v.literal(\"orthogonal\"), // We're looking at something consensus isn't discussing\n v.literal(\"unknown\") // We don't know what consensus thinks\n);\n\n// --- THEME METADATA ---\nexport const themeConviction = v.union(\n v.literal(\"high\"), // Strong conviction, actively deploying\n v.literal(\"medium\"), // Building conviction\n v.literal(\"low\"), // Exploring, not convicted\n v.literal(\"negative\") // Actively avoiding\n);\n\n// --- DECISION METADATA ---\nexport const decisionType = v.union(\n v.literal(\"invest\"),\n v.literal(\"pass\"),\n v.literal(\"follow_on\"),\n v.literal(\"exit\"),\n v.literal(\"deep_dive\"),\n v.literal(\"monitor\"),\n v.literal(\"deprioritize\"),\n v.literal(\"thesis_adopt\"),\n v.literal(\"thesis_revise\"),\n v.literal(\"thesis_abandon\")\n);\n\nexport const decisionOutcome = v.union(\n v.literal(\"pending\"),\n v.literal(\"successful\"),\n v.literal(\"unsuccessful\"),\n v.literal(\"mixed\"),\n v.literal(\"unknown\")\n);\n\n// --- EXTERNAL IDS ---\nexport const externalIds = v.object({\n crunchbase: v.optional(v.string()),\n linkedin: v.optional(v.string()),\n pitchbook: v.optional(v.string()),\n twitter: v.optional(v.string()),\n website: v.optional(v.string()),\n});\n\n// =============================================================================\n// TABLE DEFINITION\n// =============================================================================\n\n/**\n * Epistemic Nodes table.\n * The unified graph node store for all knowledge objects.\n */\nexport const epistemicNodes = defineTable({\n // === IDENTITY ===\n globalId: v.string(), // UUID - survives migration to Neo4j\n\n // === TYPE ===\n nodeType,\n\n // === EPISTEMIC LAYER ===\n epistemicLayer: v.optional(epistemicLayer),\n\n // === SUBTYPE (for typed entities) ===\n subtype: v.optional(v.string()), // company: private|corporate|portfolio, investor: vc|lp|cvc|pe|family_office|angel\n\n // === CONTENT ===\n canonicalText: v.string(), // The core content (belief statement, company name, etc.)\n contentHash: v.string(), // SHA256(nodeType + canonicalText) for deduplication\n\n // Extended content (for sources/syntheses)\n content: v.optional(v.string()), // Full text for documents/articles\n contentType: v.optional(v.string()), // \"markdown\", \"html\", \"pdf\", \"text\"\n\n // === METADATA ===\n title: v.optional(v.string()), // Display title\n tags: v.optional(v.array(v.string())),\n domain: v.optional(v.string()), // For companies: website domain\n\n // Type-specific metadata (flexible object - LEGACY)\n // New code should use the typed fields below when available\n metadata: v.optional(looseJsonObject),\n\n // === POLICY / ENTITLEMENT ===\n tenantId: v.optional(v.string()),\n workspaceId: v.optional(v.string()),\n ownerPrincipalId: v.optional(v.string()),\n audienceLabel: v.optional(audienceLabel),\n policyTags: v.optional(v.array(v.string())),\n sensitivityTier: v.optional(sensitivityTier),\n exportClass: v.optional(exportClass),\n anonymizationClass: v.optional(anonymizationClass),\n\n // === PUBLICATION (visibility-based, not copy-based) ===\n // Publication expands who can see a workspace-local node — the node stays\n // in its workspace, like a microservice exposing part of its API surface.\n // Rules-based: pack/tenant-level publicationRules auto-evaluate on\n // confidence changes and node creation. No manual click-by-click.\n publicationStatus: v.optional(\n v.union(\n v.literal(\"unpublished\"), // Default: workspace-local only\n v.literal(\"published\"), // Visible at tenant scope (rules matched)\n v.literal(\"suppressed\") // Manually blocked even if rules match\n )\n ),\n publishedAt: v.optional(v.number()), // When publication status last changed to published\n publishedBy: v.optional(v.string()), // userId or \"system:publication_rules\" for auto-publish\n\n // === TYPED METADATA FIELDS ===\n // --- Belief ---\n // Belief type — validated against schemaEnumConfig category \"belief_type\"\n // Platform core: hypothesis, belief, principle, invariant, assumption,\n // tenet, prior, preference, goal, forecast\n beliefType: v.optional(v.string()),\n beliefStatus: v.optional(beliefStatus),\n epistemicStatus: v.optional(epistemicStatus),\n reversibility: v.optional(reversibility),\n predictionMeta: v.optional(predictionMeta),\n // Consensus tracking (for non-consensus detection)\n consensusView: v.optional(consensusView),\n consensusConfidence: v.optional(v.number()), // 0-1: What we think consensus confidence is\n consensusSource: v.optional(v.string()), // Where we got the consensus view (twitter, reports, etc.)\n\n // --- Evidence ---\n methodology: v.optional(methodology),\n informationAsymmetry: v.optional(informationAsymmetry),\n temporalNature: v.optional(temporalNature),\n\n // --- Question ---\n questionType: v.optional(questionType),\n questionPriority: v.optional(questionPriority),\n answerQuality: v.optional(answerQuality),\n\n // --- Theme ---\n themeConviction: v.optional(themeConviction),\n // Market timing (for \"early on theme\" detection)\n marketAwarenessDate: v.optional(v.number()), // When this theme became broadly discussed\n marketAwarenessSource: v.optional(v.string()), // How we know (first major report, twitter volume spike, etc.)\n earlySignalIds: v.optional(v.array(v.string())), // globalIds of evidence we had before market awareness\n\n // --- Decision ---\n decisionType: v.optional(decisionType),\n decisionOutcome: v.optional(decisionOutcome),\n\n // === EXTERNAL IDS (for ontological entities) ===\n externalIds: v.optional(externalIds),\n\n // === PROVENANCE ===\n sourceType,\n aiProvider: v.optional(v.string()), // \"claude\", \"gemini\", \"gpt-4\", etc.\n extractedFromNodeId: v.optional(v.id(\"epistemicNodes\")), // Quick reference to source\n\n // === EXTRACTION CONTEXT ===\n extractionModel: v.optional(v.string()), // \"claude-sonnet-4-20250514\"\n extractionPromptName: v.optional(v.string()), // \"lucern/extract-evidence\"\n extractionPromptVersion: v.optional(v.number()),\n extractionTemperature: v.optional(v.number()),\n extractionLangfuseTraceId: v.optional(v.string()),\n\n // === GROUNDING VERIFICATION ===\n groundingVerified: v.optional(v.boolean()),\n groundingConfidence: v.optional(v.number()), // 0-1 match quality\n groundingMatchedText: v.optional(v.string()), // Actual text from source\n groundingStartOffset: v.optional(v.number()),\n groundingEndOffset: v.optional(v.number()),\n groundingRejectionReason: v.optional(v.string()),\n\n // === CONFIDENCE & VERIFICATION ===\n confidence: v.optional(v.number()), // 0-1 projected probability P(x) = b + a*u\n verificationStatus: v.optional(verificationStatus),\n\n // === SL OPINION (Subjective Logic — Kernel v2) ===\n // Replaces scalar confidence with rich epistemic state.\n // b + d + u = 1. P(x) = b + a*u is stored in `confidence` for backward compat.\n opinion_b: v.optional(v.number()), // Belief: evidence FOR (0-1)\n opinion_d: v.optional(v.number()), // Disbelief: evidence AGAINST (0-1)\n opinion_u: v.optional(v.number()), // Uncertainty: absence of evidence (0-1)\n opinion_a: v.optional(v.number()), // Base rate / prior probability (0-1)\n tupleContradicted: v.optional(v.boolean()), // Single-belief tuple-space contradiction flag\n\n // === LIFECYCLE ===\n status: nodeStatus,\n supersededBy: v.optional(v.id(\"epistemicNodes\")),\n\n // === OWNERSHIP ===\n topicId: v.optional(v.string()), // Canonical scope container (topic-first model)\n projectId: v.optional(v.string()), // DEPRECATED: Use belongs_to edges\n createdBy: v.string(), // Clerk user ID\n createdAt: v.number(),\n updatedAt: v.number(),\n\n // === NEO4J SYNC STATUS ===\n syncStatus: v.optional(syncStatus),\n syncError: v.optional(v.string()), // Error message if sync failed\n})\n .index(\"by_globalId\", [\"globalId\"])\n .index(\"by_contentHash\", [\"contentHash\"])\n .index(\"by_nodeType\", [\"nodeType\"])\n .index(\"by_subtype\", [\"nodeType\", \"subtype\"])\n .index(\"by_domain\", [\"domain\"])\n .index(\"by_project\", [\"projectId\"]) // DEPRECATED\n .index(\"by_project_type\", [\"projectId\", \"nodeType\"]) // DEPRECATED\n .index(\"by_topic\", [\"topicId\"])\n .index(\"by_topic_type\", [\"topicId\", \"nodeType\"])\n .index(\"by_tenantId\", [\"tenantId\"])\n .index(\"by_workspaceId\", [\"workspaceId\"])\n .index(\"by_tenant_workspace\", [\"tenantId\", \"workspaceId\"])\n .index(\"by_audienceLabel\", [\"audienceLabel\"])\n .index(\"by_sensitivityTier\", [\"sensitivityTier\"])\n .index(\"by_exportClass\", [\"exportClass\"])\n .index(\"by_status\", [\"status\"])\n .index(\"by_sourceType\", [\"sourceType\"])\n .index(\"by_verification\", [\"verificationStatus\"])\n .index(\"by_layer\", [\"epistemicLayer\"]) // For layer-constrained traversal\n .index(\"by_layer_type\", [\"epistemicLayer\", \"nodeType\"]) // For layer+type queries\n .index(\"by_syncStatus\", [\"syncStatus\"]) // For finding nodes needing edge retry\n // === PUBLICATION INDEXES ===\n .index(\"by_publicationStatus\", [\"publicationStatus\"])\n .index(\"by_tenant_publicationStatus\", [\"tenantId\", \"publicationStatus\"])\n // === CLASSIFICATION INDEXES (Phase 6) ===\n .index(\"by_belief_status\", [\"nodeType\", \"beliefStatus\"]) // Canonical belief lifecycle stage\n .index(\"by_epistemic_status\", [\"nodeType\", \"epistemicStatus\"]) // Belief lifecycle analysis\n .index(\"by_temporal_nature\", [\"nodeType\", \"temporalNature\"]) // Evidence factual vs forecast\n .index(\"by_methodology\", [\"nodeType\", \"methodology\"]) // Evidence research method analysis\n .index(\"by_reversibility\", [\"nodeType\", \"reversibility\"]) // Decision impact analysis\n .index(\"by_questionType\", [\"nodeType\", \"questionType\"]) // Question classification\n .index(\"by_questionPriority\", [\"nodeType\", \"questionPriority\"]) // Question urgency\n .searchIndex(\"search_canonicalText\", {\n searchField: \"canonicalText\",\n filterFields: [\"nodeType\", \"projectId\", \"topicId\", \"status\"],\n });\n\n// =============================================================================\n// TYPE EXPORTS\n// =============================================================================\n\nimport type { Infer } from \"convex/values\";\n\n// Types needed internally for helper functions\ntype NodeType = Infer<typeof nodeType>;\ntype EpistemicLayer = Infer<typeof epistemicLayer>;\n\n// Only export types that are unique to this file (not already in ./nodes/*.ts)\nexport type ExternalIds = Infer<typeof externalIds>;\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Get the epistemic layer for a node type.\n */\nexport function getLayerForNodeType(type: NodeType): EpistemicLayer {\n switch (type) {\n case \"decision\":\n return \"L4\";\n case \"belief\":\n case \"question\":\n case \"theme\":\n case \"deal\":\n return \"L3\";\n case \"claim\":\n case \"evidence\":\n case \"synthesis\":\n case \"answer\":\n return \"L2\";\n case \"atomic_fact\":\n case \"excerpt\":\n case \"source\":\n return \"L1\";\n case \"topic\":\n return \"organizational\";\n case \"company\":\n case \"person\":\n case \"investor\":\n case \"function\":\n case \"value_chain\":\n return \"ontological\";\n }\n}\n\n/**\n * Async layer resolver with schemaEnumConfig fallback for tenant-defined entity types.\n *\n * For hardcoded types (the switch above), returns immediately.\n * For unknown types, checks schemaEnumConfig for entity_type entries.\n * If found in the registry, returns \"ontological\". Otherwise returns undefined.\n *\n * Use this when you need to handle tenant-extensible entity types.\n * For known platform types, the synchronous `getLayerForNodeType` is sufficient.\n */\nexport async function resolveLayerForNodeType(\n ctx: { db: { query: (table: string) => any } },\n type: string\n): Promise<EpistemicLayer | undefined> {\n // First try the hardcoded switch for known types\n const knownLayer = getLayerForNodeType(type as NodeType);\n if (knownLayer !== undefined) {\n return knownLayer;\n }\n\n // Fallback: check schemaEnumConfig for tenant-registered entity types\n const registryEntry = await ctx.db\n .query(\"schemaEnumConfig\")\n .withIndex(\"by_category_value\", (q: any) =>\n q.eq(\"category\", \"entity_type\").eq(\"value\", type)\n )\n .first();\n\n if (registryEntry && registryEntry.status === \"active\") {\n return \"ontological\";\n }\n\n return;\n}\n\n/**\n * Check if a node type is epistemic (vs ontological).\n */\nexport function isEpistemicNodeType(type: NodeType): boolean {\n return getLayerForNodeType(type) !== \"ontological\";\n}\n","import { getLayerForNodeType } from \"@lucern/schema-management/spine/tables/epistemicNodes\";\nimport {\n resolveTopicProjectScope,\n type TopicProjectScope,\n} from \"./topicScope\";\n\ntype StructuredInvariantError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype ScopeLike = {\n tenantId?: unknown;\n workspaceId?: unknown;\n epistemicLayer?: unknown;\n nodeType?: unknown;\n topicId?: unknown;\n projectId?: unknown;\n publicationStatus?: unknown;\n};\n\nexport type RuntimePackMutationContext = {\n toolName?: string;\n packKey?: string;\n packInstallScope?: \"tenant\" | \"workspace\";\n};\n\nexport function normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction throwWorkspaceIsolationError(args: {\n message: string;\n invariantCode: string;\n suggestion: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredInvariantError;\n error.status = 409;\n error.code = \"INVARIANT_VIOLATION\";\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nexport function assertWorkspaceScopedEpistemicNodeScope(args: {\n scope: TopicProjectScope;\n nodeType: string;\n mutationName: string;\n}): void {\n const layer = getLayerForNodeType(args.nodeType as any);\n if (layer === \"ontological\") {\n return;\n }\n\n const workspaceId = normalizeScopeValue(args.scope.workspaceId);\n if (workspaceId) {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n \"Workspace-scoped reasoning isolation requires workspaceId on non-ontological node creation.\",\n invariantCode: \"workspace.scope_required_for_epistemic_nodes\",\n suggestion:\n \"Resolve the topic/project scope through a workspace-bound topic before creating epistemic nodes.\",\n details: {\n mutationName: args.mutationName,\n nodeType: args.nodeType,\n topicId: args.scope.topicId,\n projectId: args.scope.projectId,\n },\n });\n}\n\nexport function nodeMatchesWorkspaceReasoningScope(\n node: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!node) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const nodeTenantId = normalizeScopeValue(node.tenantId);\n const nodeWorkspaceId = normalizeScopeValue(node.workspaceId);\n const epistemicLayer =\n typeof node.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n\n if (\n scopeTenantId &&\n nodeTenantId &&\n scopeTenantId !== nodeTenantId\n ) {\n return false;\n }\n\n // Ontological entities are tenant-global (no workspace required)\n if (epistemicLayer === \"ontological\" && nodeWorkspaceId === undefined) {\n return true;\n }\n\n // Published nodes are visible at tenant scope — the microservice API surface.\n // The node stays in its workspace, but tenant-scope queries can see it.\n if (!scopeWorkspaceId && node.publicationStatus === \"published\") {\n return true;\n }\n\n if (!scopeWorkspaceId) {\n return nodeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === nodeWorkspaceId;\n}\n\nexport function edgeMatchesWorkspaceReasoningScope(\n edge: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!edge) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const edgeTenantId = normalizeScopeValue(edge.tenantId);\n const edgeWorkspaceId = normalizeScopeValue(edge.workspaceId);\n\n if (\n scopeTenantId &&\n edgeTenantId &&\n scopeTenantId !== edgeTenantId\n ) {\n return false;\n }\n\n if (!scopeWorkspaceId) {\n return edgeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === edgeWorkspaceId;\n}\n\nexport async function resolveNodeScopeForWorkspaceIsolation(\n ctx: any,\n node: ScopeLike | null | undefined\n): Promise<{\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n nodeType?: string;\n}> {\n const epistemicLayer =\n typeof node?.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n const resolved = {\n tenantId: normalizeScopeValue(node?.tenantId),\n workspaceId: normalizeScopeValue(node?.workspaceId),\n epistemicLayer,\n nodeType: typeof node?.nodeType === \"string\" ? node.nodeType : undefined,\n };\n\n if (!node) {\n return resolved;\n }\n\n if (resolved.epistemicLayer === \"ontological\") {\n return resolved;\n }\n\n if (resolved.tenantId || resolved.workspaceId) {\n return resolved;\n }\n\n if (node.topicId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n topicId: node.topicId as any,\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n if (node.projectId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n projectId: String(node.projectId),\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n return resolved;\n}\n\nexport function resolveRuntimePackMutationContext(args: {\n runtimeToolName?: string;\n runtimePackKey?: string;\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n}): RuntimePackMutationContext | undefined {\n if (\n !args.runtimeToolName &&\n !args.runtimePackKey &&\n !args.runtimePackInstallScope\n ) {\n return;\n }\n\n return {\n toolName: args.runtimeToolName,\n packKey: args.runtimePackKey,\n packInstallScope: args.runtimePackInstallScope,\n };\n}\n\nexport function assertTenantPackWorkspaceMutationAllowed(args: {\n runtime?: RuntimePackMutationContext;\n target: ScopeLike;\n mutationName: string;\n}): void {\n if (\n !args.runtime?.packKey ||\n args.runtime.packInstallScope !== \"tenant\"\n ) {\n return;\n }\n\n const targetWorkspaceId = normalizeScopeValue(args.target.workspaceId);\n const targetLayer =\n typeof args.target.epistemicLayer === \"string\"\n ? args.target.epistemicLayer\n : undefined;\n\n if (!targetWorkspaceId || targetLayer === \"ontological\") {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n `Tenant-scoped pack \"${args.runtime.packKey}\" cannot mutate workspace-scoped reasoning state.`,\n invariantCode: \"workspace.tenant_pack_reasoning_write_forbidden\",\n suggestion:\n \"Use a workspace-scoped pack for workspace-local graph mutations, or route the change through tenant-global canonical entity flows.\",\n details: {\n mutationName: args.mutationName,\n toolName: args.runtime.toolName,\n packKey: args.runtime.packKey,\n targetWorkspaceId,\n targetNodeType: args.target.nodeType,\n targetLayer,\n },\n });\n}\n","import {\n hasProjectedOpinionChanged,\n readOpinionFromRecord,\n type Opinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport {\n canContinueTransitively,\n canTraverseHop,\n getEdgePropagationSpecs,\n getTraversalDirections,\n type EdgePropagationSpec,\n type PropagationEdgeRecord,\n type PropagationEdgeType,\n type PropagationTraversalDirection,\n} from \"./edges\";\nimport {\n edgeMatchesWorkspaceReasoningScope,\n nodeMatchesWorkspaceReasoningScope,\n} from \"./workspaceIsolation\";\n\nexport type PropagationDispatchScope = {\n tenantId?: string;\n workspaceId?: string;\n};\n\nexport type PropagationDispatchNode<TNodeId extends string = string> = {\n _id?: TNodeId;\n nodeType?: string;\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n publicationStatus?: string;\n metadata?: unknown;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n opinion_a?: number;\n};\n\nexport type PropagationDispatchEdge<TNodeId extends string = string> =\n PropagationEdgeRecord<TNodeId>;\n\nexport type ConfidencePropagationDispatch<TNodeId extends string = string> = {\n targetNodeId: TNodeId;\n edgeType: PropagationEdgeType;\n traversedDirection: PropagationTraversalDirection;\n weight: number;\n opinion: Opinion;\n operator: SLOperator;\n rationale: string;\n hop: number;\n};\n\nfunction resolveTraversalTargetNodeId<TNodeId extends string>(\n edge: PropagationDispatchEdge<TNodeId>,\n direction: PropagationTraversalDirection\n): TNodeId | undefined {\n const targetNodeId =\n direction === \"outgoing\" ? edge.toNodeId : edge.fromNodeId;\n return targetNodeId ?? undefined;\n}\n\nfunction readNodeOpinion<TNodeId extends string>(\n node: PropagationDispatchNode<TNodeId>\n): Opinion {\n const metadata = (node.metadata ?? {}) as Record<string, unknown>;\n\n return readOpinionFromRecord(\n {\n ...metadata,\n opinion_b: node.opinion_b,\n opinion_d: node.opinion_d,\n opinion_u: node.opinion_u,\n opinion_a: node.opinion_a,\n },\n { b: 0, d: 0, u: 1, a: 0.5 }\n );\n}\n\nexport async function collectConfidencePropagationDispatches<\n TNodeId extends string = string,\n>(args: {\n sourceNodeId: TNodeId;\n sourceOpinion: Opinion;\n sourceScope?: PropagationDispatchScope;\n traversalSpecs?: readonly EdgePropagationSpec<TNodeId>[];\n queryEdges: (args: {\n nodeId: TNodeId;\n spec: EdgePropagationSpec<TNodeId>;\n direction: PropagationTraversalDirection;\n hop: number;\n }) => Promise<ReadonlyArray<PropagationDispatchEdge<TNodeId>>>;\n getNode: (\n nodeId: TNodeId\n ) => Promise<PropagationDispatchNode<TNodeId> | null | undefined>;\n}): Promise<ConfidencePropagationDispatch<TNodeId>[]> {\n const dispatchesByTargetId = new Map<\n string,\n ConfidencePropagationDispatch<TNodeId>\n >();\n const opinionCache = new Map<string, Opinion>();\n const nodeCache = new Map<\n string,\n PropagationDispatchNode<TNodeId> | null | undefined\n >();\n const traversalSpecs = (args.traversalSpecs ??\n getEdgePropagationSpecs()) as readonly EdgePropagationSpec<TNodeId>[];\n const queue: Array<{\n nodeId: TNodeId;\n opinion: Opinion;\n hop: number;\n visitedNodeIds: Set<string>;\n }> = [\n {\n nodeId: args.sourceNodeId,\n opinion: args.sourceOpinion,\n hop: 0,\n visitedNodeIds: new Set([String(args.sourceNodeId)]),\n },\n ];\n\n const loadNode = async (nodeId: TNodeId) => {\n const cacheKey = String(nodeId);\n if (!nodeCache.has(cacheKey)) {\n nodeCache.set(cacheKey, await args.getNode(nodeId));\n }\n return nodeCache.get(cacheKey) ?? null;\n };\n\n while (queue.length > 0) {\n const state = queue.shift();\n if (!state) {\n continue;\n }\n\n for (const spec of traversalSpecs) {\n const nextHop = state.hop + 1;\n if (!canTraverseHop(spec, nextHop)) {\n continue;\n }\n\n for (const direction of getTraversalDirections(spec.direction)) {\n const edges = await args.queryEdges({\n nodeId: state.nodeId,\n spec,\n direction,\n hop: nextHop,\n });\n\n for (const edge of edges) {\n if (\n args.sourceScope &&\n !edgeMatchesWorkspaceReasoningScope(edge, args.sourceScope)\n ) {\n continue;\n }\n\n const targetNodeId = resolveTraversalTargetNodeId(edge, direction);\n if (!targetNodeId) {\n continue;\n }\n\n if (state.visitedNodeIds.has(String(targetNodeId))) {\n continue;\n }\n\n const targetNode = await loadNode(targetNodeId);\n if (!targetNode || targetNode.nodeType !== \"belief\") {\n continue;\n }\n\n if (\n args.sourceScope &&\n !nodeMatchesWorkspaceReasoningScope(targetNode, args.sourceScope)\n ) {\n continue;\n }\n\n const cacheKey = String(targetNodeId);\n const targetOpinion =\n opinionCache.get(cacheKey) ?? readNodeOpinion(targetNode);\n const result = spec.operator(state.opinion, targetOpinion, edge, {\n hop: nextHop,\n sourceNodeId: state.nodeId,\n targetNodeId,\n traversedDirection: direction,\n spec,\n });\n\n if (\n !result ||\n !hasProjectedOpinionChanged(targetOpinion, result.opinion)\n ) {\n continue;\n }\n\n opinionCache.set(cacheKey, result.opinion);\n\n const existingDispatch = dispatchesByTargetId.get(cacheKey);\n dispatchesByTargetId.set(cacheKey, {\n targetNodeId,\n edgeType: spec.edgeType,\n traversedDirection: direction,\n weight: edge.weight ?? 1,\n opinion: result.opinion,\n operator: result.operator,\n rationale: existingDispatch\n ? `${existingDispatch.rationale}; ${result.rationale}`\n : result.rationale,\n hop: nextHop,\n });\n\n if (canContinueTransitively(spec, nextHop)) {\n queue.push({\n nodeId: targetNodeId,\n opinion: result.opinion,\n hop: nextHop,\n visitedNodeIds: new Set([\n ...state.visitedNodeIds,\n String(targetNodeId),\n ]),\n });\n }\n }\n }\n }\n }\n\n return Array.from(dispatchesByTargetId.values()).sort((left, right) => {\n if (left.hop !== right.hop) {\n return left.hop - right.hop;\n }\n return String(left.targetNodeId).localeCompare(String(right.targetNodeId));\n });\n}\n","/**\n * Shared helper to schedule embedding generation after epistemic node creation.\n *\n * Best-effort — failures are silently caught. The embedding generation action\n * is a public action in convex/embeddingActions.ts that calls Pinecone.\n */\n\nimport type { Id } from \"./convex\";\n\ninterface EmbeddingTriggerArgs {\n ctx: any;\n nodeId: Id<\"epistemicNodes\">;\n projectId?: string | null;\n topicId?: string | null;\n createdBy: string;\n nodeType:\n | \"belief\"\n | \"question\"\n | \"evidence\"\n | \"answer\"\n | \"synthesis\"\n | \"theme\"\n | \"source\";\n text: string;\n hasAnswer?: boolean;\n confidence?: number;\n}\n\nexport async function scheduleEmbeddingGeneration(args: EmbeddingTriggerArgs): Promise<void> {\n try {\n await args.ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId: args.nodeId,\n projectId: args.projectId ? String(args.projectId) : undefined,\n topicId: args.topicId ? String(args.topicId) : undefined,\n createdBy: args.createdBy,\n nodeType: args.nodeType,\n text: args.text.slice(0, 20_000),\n hasAnswer: args.hasAnswer,\n confidence: args.confidence,\n }\n );\n } catch {\n // Embedding generation is best-effort — never block node creation\n }\n}\n","/**\n * logicalRoleInference module implementation.\n */\n\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\n\ntype LogicalRole =\n | \"necessary\"\n | \"sufficient\"\n | \"necessary_sufficient\"\n | \"contributory\"\n | \"corroborative\";\n\nconst PILLAR_IMPORTANCE: Record<string, number> = {\n market: 1,\n competition: 2,\n product: 3,\n team: 4,\n financials: 5,\n timing: 6,\n other: 10,\n};\n\ntype GraphCtx = QueryCtx | MutationCtx;\n\nexport async function computeLogicalRole(\n ctx: GraphCtx,\n evidenceId: Id<\"epistemicNodes\">,\n beliefId: Id<\"epistemicNodes\">\n): Promise<LogicalRole> {\n const belief = await ctx.db.get(beliefId);\n if (!belief || belief.nodeType !== \"belief\") {\n return \"contributory\";\n }\n\n const beliefMetadata = belief.metadata as Record<string, unknown> | undefined;\n const pillar = (beliefMetadata?.pillar as string) || \"other\";\n const pillarRank = PILLAR_IMPORTANCE[pillar] ?? 10;\n\n const isSynthesized = await checkIfSynthesizedHypothesis(ctx, beliefId);\n const testingQuestions = await getTestingQuestionsForBelief(ctx, beliefId);\n const answeredQuestions = await getQuestionsAnsweredByEvidence(\n ctx,\n evidenceId\n );\n const directlyTests = testingQuestions.filter((questionId) =>\n answeredQuestions.includes(questionId)\n );\n\n if (directlyTests.length === 0) {\n return \"contributory\";\n }\n\n if (isSynthesized && pillarRank <= 2) {\n return directlyTests.length > 1 ? \"necessary_sufficient\" : \"necessary\";\n }\n\n if (isSynthesized) {\n return \"necessary\";\n }\n\n return directlyTests.length > 1 ? \"necessary\" : \"contributory\";\n}\n\nasync function checkIfSynthesizedHypothesis(\n ctx: GraphCtx,\n beliefId: Id<\"epistemicNodes\">\n): Promise<boolean> {\n const belief = await ctx.db.get(beliefId);\n if (!belief) {\n return false;\n }\n\n const metadata = belief.metadata as Record<string, unknown> | undefined;\n return (\n metadata?.isSynthesized === true ||\n metadata?.beliefStatus === \"hypothesis\"\n );\n}\n\nasync function getTestingQuestionsForBelief(\n ctx: GraphCtx,\n beliefId: Id<\"epistemicNodes\">\n): Promise<string[]> {\n const testEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", beliefId).eq(\"edgeType\", \"tests\")\n )\n .collect();\n\n return testEdges\n .map((edge) => edge.fromNodeId as string)\n .filter((id): id is string => id !== undefined);\n}\n\nasync function getQuestionsAnsweredByEvidence(\n ctx: GraphCtx,\n evidenceId: Id<\"epistemicNodes\">\n): Promise<string[]> {\n const answerEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_type\", (q) =>\n q.eq(\"fromNodeId\", evidenceId).eq(\"edgeType\", \"derived_from\")\n )\n .collect();\n\n return answerEdges\n .map((edge) => edge.toNodeId as string)\n .filter((id): id is string => id !== undefined);\n}\n","/** Convex queries and mutations for epistemic contract lifecycle management. */\nimport { v } from \"convex/values\";\nimport { checkProjectAccess } from \"@lucern/access-control/access\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internalMutation, mutation, query } from \"./convex\";\nimport { applyBeliefConfidenceChange } from \"./epistemicBeliefs\";\nimport {\n buildComparisonRationale,\n buildEvidentialRationale,\n compareMetricValue,\n createInheritedContractRecord,\n deriveContractModulationPlan,\n deriveContractStatus,\n getEvaluatorInputRecord,\n normalizeEvidentialAction,\n parseComparisonOperator,\n parseEvidentialEvaluatorConfig,\n parseMarketIndexComparatorConfig,\n parseMetricCheckerConfig,\n parseNumericThreshold,\n parseReferenceCheckCounterConfig,\n parseTemporalDeadlineConfig,\n pickFiniteNumber,\n resolveComparisonResult,\n type EpistemicContractEvaluationResult,\n type EpistemicContractRecord,\n} from \"./epistemicContractHelpers\";\nimport {\n ENGINEERING_EPISTEMIC_EVALUATORS,\n ENGINEERING_EVALUATOR_NAMES,\n getEngineeringEpistemicEvaluator,\n} from \"./evaluators\";\nimport { generateGlobalId } from \"./globalId\";\n\ntype BeliefNodeDoc = {\n _id: Id<\"epistemicNodes\">;\n nodeType: \"belief\";\n canonicalText: string;\n projectId?: string;\n topicId?: Id<\"topics\"> | string;\n confidence?: number;\n status?: string;\n [key: string]: unknown;\n};\n\ntype ContractDoc = EpistemicContractRecord<\n Id<\"epistemicNodes\">,\n Id<\"topics\"> | string | undefined\n> & {\n _id: string;\n _creationTime: number;\n};\n\ntype ContractEvaluationDoc = {\n contractId: string;\n beliefNodeId: Id<\"epistemicNodes\">;\n result: EpistemicContractEvaluationResult;\n evaluatedAt: number;\n evaluator: string;\n trigger: string;\n resultData?: unknown;\n modulationApplied: boolean;\n confidenceDelta?: number;\n confidenceBefore?: number;\n confidenceAfter?: number;\n beliefConfidenceId?: Id<\"beliefConfidence\">;\n modulationRationale?: string;\n topicId?: Id<\"topics\"> | string;\n _id: string;\n _creationTime: number;\n};\n\ntype EvidenceEdgeDoc = {\n fromNodeId: Id<\"epistemicNodes\">;\n weight?: number;\n updatedAt?: number;\n createdAt?: number;\n _creationTime?: number;\n};\n\ntype EvidenceNodeDoc = {\n _id: Id<\"epistemicNodes\">;\n nodeType: string;\n status?: string;\n metadata?: unknown;\n};\n\nexport type EpistemicEvaluatorResult = {\n result: EpistemicContractEvaluationResult;\n confidence?: number;\n data?: unknown;\n rationale: string;\n};\n\nexport type EpistemicEvaluatorContext = {\n belief: BeliefNodeDoc;\n contract: ContractDoc;\n ctx: MutationCtx;\n now: number;\n resultData?: unknown;\n trigger: string;\n inputData?: unknown;\n};\n\nexport type EpistemicEvaluator = {\n name: string;\n evaluate(\n args: EpistemicEvaluatorContext\n ): Promise<EpistemicEvaluatorResult> | EpistemicEvaluatorResult;\n};\n\ntype ContractReadCtx = MutationCtx | QueryCtx;\n\ntype ContradictionStatusCounts = {\n activeCount: number;\n resolvedCount: number;\n};\n\ntype EvidenceFreshness = {\n newestAgeMs: number | null;\n oldestAgeMs: number | null;\n newestEdgeAt: number | null;\n oldestEdgeAt: number | null;\n edgeCount: number;\n};\n\ntype EvidentialMetric =\n | \"evidence_count\"\n | \"contradiction_status\"\n | \"edge_freshness\"\n | \"dependent_count\";\n\ntype EvidentialOperator = \"gte\" | \"lte\" | \"eq\" | \"gt\" | \"lt\";\n\ntype EvidentialAction = \"modulate_confidence\" | \"flag_review\" | \"archive\";\n\ntype EvidentialEvaluatorConfig = {\n metric: EvidentialMetric;\n operator: EvidentialOperator;\n threshold: number;\n action?: EvidentialAction;\n actionParams?: {\n targetConfidence?: number;\n rationale?: string;\n };\n};\n\ntype EvidentialMetricSnapshot = {\n metric: EvidentialMetric;\n value: number | null;\n data: Record<string, unknown>;\n};\n\ntype MetricCheckerEvaluatorConfig = {\n metric?: string;\n operator: EvidentialOperator;\n threshold: number;\n observedValue?: number;\n currentValue?: number;\n metricValue?: number;\n unit?: string;\n};\n\ntype ReferenceCheckCounterConfig = {\n tag: string;\n operator: EvidentialOperator;\n threshold: number;\n caseSensitive?: boolean;\n};\n\ntype TemporalDeadlineEvaluatorConfig = {\n label?: string;\n completed?: boolean;\n completedAt?: number;\n observedAt?: number;\n satisfiedAt?: number;\n achievedAt?: number;\n};\n\ntype MarketIndexComparatorConfig = {\n subject?: string;\n subjectValue?: number;\n primaryValue?: number;\n benchmark?: string;\n benchmarkValue?: number;\n comparisonValue?: number;\n operator: EvidentialOperator;\n threshold: number;\n};\n\ntype ContractEvaluationExecution = {\n evaluationId: string;\n result: EpistemicContractEvaluationResult;\n status: ContractDoc[\"status\"];\n confidenceBefore: number;\n confidenceAfter: number;\n rationale: string;\n data?: unknown;\n currentConfidence: number;\n};\n\ntype TriggerBatchResult = {\n totalContracts: number;\n processedCount: number;\n overflowCount: number;\n scheduledOverflow: boolean;\n batchSize: number;\n executionTimeMs: number;\n trigger: string;\n results: Array<{\n contractId: string;\n result: EpistemicContractEvaluationResult;\n status: ContractDoc[\"status\"];\n confidenceAfter: number;\n }>;\n};\n\nconst evaluatorRegistry = new Map<string, EpistemicEvaluator>();\nconst BUILT_IN_EVIDENTIAL_EVALUATOR = \"evidential\";\nconst BUILT_IN_EVIDENTIAL_ALIASES = new Set([\n BUILT_IN_EVIDENTIAL_EVALUATOR,\n \"built_in_evidential\",\n \"builtin_evidential\",\n]);\nconst BUILT_IN_METRIC_CHECKER = \"metric_checker\";\nconst BUILT_IN_REFERENCE_CHECK_COUNTER = \"reference_check_counter\";\nconst BUILT_IN_TEMPORAL_DEADLINE = \"temporal_deadline\";\nconst BUILT_IN_MARKET_INDEX_COMPARATOR = \"market_index_comparator\";\nconst MAX_CONTRACT_EVALUATION_BATCH_SIZE = 50;\nconst ACTIVE_CONTRADICTION_STATUSES = new Set([\n \"unresolved\",\n \"investigating\",\n \"accepted_as_permanent\",\n]);\nconst DEPENDENT_EDGE_TYPES = new Set([\n \"depends_on\",\n]);\n\nfunction classifyContradictionStatus(status: unknown): \"active\" | \"resolved\" {\n if (typeof status !== \"string\") {\n return \"active\";\n }\n\n if (ACTIVE_CONTRADICTION_STATUSES.has(status)) {\n return \"active\";\n }\n\n if (\n status === \"resolved_support\" ||\n status === \"resolved_contra\" ||\n status === \"belief_forked\"\n ) {\n return \"resolved\";\n }\n\n return \"resolved\";\n}\n\nfunction getEdgeTimestamp(edge: {\n updatedAt?: unknown;\n createdAt?: unknown;\n _creationTime?: unknown;\n}): number | null {\n if (typeof edge.updatedAt === \"number\") {\n return edge.updatedAt;\n }\n if (typeof edge.createdAt === \"number\") {\n return edge.createdAt;\n }\n if (typeof edge._creationTime === \"number\") {\n return edge._creationTime;\n }\n return null;\n}\n\nasync function getEvidenceLinks(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<Array<{ edge: EvidenceEdgeDoc; node: EvidenceNodeDoc }>> {\n const edges = await (ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", beliefNodeId).eq(\"edgeType\", \"informs\")\n )\n .collect() as Promise<EvidenceEdgeDoc[]>);\n\n if (edges.length === 0) {\n return [];\n }\n\n const nodes = await Promise.all(\n edges.map((edge) => ctx.db.get(edge.fromNodeId))\n );\n return edges.flatMap((edge, index) => {\n const node = nodes[index] as EvidenceNodeDoc | null;\n if (!node || node.nodeType !== \"evidence\" || node.status === \"archived\") {\n return [];\n }\n return [{ edge, node }];\n });\n}\n\nfunction getEvidenceTags(node: EvidenceNodeDoc): string[] {\n const metadata =\n node.metadata && typeof node.metadata === \"object\"\n ? (node.metadata as Record<string, unknown>)\n : null;\n const tags = metadata?.tags;\n if (!Array.isArray(tags)) {\n return [];\n }\n return tags.filter((tag): tag is string => typeof tag === \"string\");\n}\n\nasync function computeEvidenceCountMetric(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<number> {\n return (await getEvidenceLinks(ctx, beliefNodeId)).length;\n}\n\nasync function computeTaggedEvidenceCount(args: {\n ctx: ContractReadCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n tag: string;\n caseSensitive?: boolean;\n}): Promise<{ count: number; matchedEvidenceIds: string[] }> {\n const expectedTag = args.caseSensitive ? args.tag : args.tag.toLowerCase();\n const matchedEvidenceIds = (await getEvidenceLinks(args.ctx, args.beliefNodeId))\n .filter(({ node }) =>\n getEvidenceTags(node).some((tag) =>\n (args.caseSensitive ? tag : tag.toLowerCase()) === expectedTag\n )\n )\n .map(({ node }) => String(node._id));\n\n return {\n count: matchedEvidenceIds.length,\n matchedEvidenceIds,\n };\n}\n\nasync function computeContradictionCounts(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<ContradictionStatusCounts> {\n const contradictions = await ((ctx.db as any)\n .query(\"contradictions\")\n .withIndex(\"by_beliefId\", (q: any) => q.eq(\"beliefId\", beliefNodeId))\n .collect() as Promise<\n Array<{ resolutionStatus?: string; status?: string }>\n >);\n\n return contradictions.reduce<ContradictionStatusCounts>(\n (counts, contradiction) => {\n const status =\n contradiction.resolutionStatus ?? contradiction.status ?? \"unresolved\";\n if (classifyContradictionStatus(status) === \"active\") {\n counts.activeCount += 1;\n } else {\n counts.resolvedCount += 1;\n }\n return counts;\n },\n { activeCount: 0, resolvedCount: 0 }\n );\n}\n\nasync function computeEvidenceFreshness(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">,\n now = Date.now()\n): Promise<EvidenceFreshness> {\n const timestamps = (await getEvidenceLinks(ctx, beliefNodeId))\n .map(({ edge }) => getEdgeTimestamp(edge))\n .filter((value): value is number => value !== null);\n\n if (timestamps.length === 0) {\n return {\n newestAgeMs: null,\n oldestAgeMs: null,\n newestEdgeAt: null,\n oldestEdgeAt: null,\n edgeCount: 0,\n };\n }\n\n const newestEdgeAt = Math.max(...timestamps);\n const oldestEdgeAt = Math.min(...timestamps);\n\n return {\n newestAgeMs: Math.max(0, now - newestEdgeAt),\n oldestAgeMs: Math.max(0, now - oldestEdgeAt),\n newestEdgeAt,\n oldestEdgeAt,\n edgeCount: timestamps.length,\n };\n}\n\nasync function computeDependentBeliefCount(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<number> {\n const incomingEdges = await (ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q) => q.eq(\"toNodeId\", beliefNodeId))\n .collect() as Promise<\n Array<{ fromNodeId: Id<\"epistemicNodes\">; edgeType: string }>\n >);\n\n const dependencyEdges = incomingEdges.filter((edge) =>\n DEPENDENT_EDGE_TYPES.has(edge.edgeType)\n );\n if (dependencyEdges.length === 0) {\n return 0;\n }\n\n const dependentBeliefs = await Promise.all(\n dependencyEdges.map((edge) => ctx.db.get(edge.fromNodeId))\n );\n const uniqueBeliefIds = new Set<string>();\n\n for (const node of dependentBeliefs) {\n if (\n node &&\n node.nodeType === \"belief\" &&\n node.status !== \"archived\" &&\n node.status !== \"deleted\"\n ) {\n uniqueBeliefIds.add(String(node._id));\n }\n }\n\n return uniqueBeliefIds.size;\n}\n\nasync function snapshotEvidentialMetric(args: {\n ctx: ContractReadCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n metric: EvidentialMetric;\n now: number;\n}): Promise<EvidentialMetricSnapshot> {\n switch (args.metric) {\n case \"evidence_count\": {\n const count = await computeEvidenceCountMetric(\n args.ctx,\n args.beliefNodeId\n );\n return {\n metric: args.metric,\n value: count,\n data: { evidenceCount: count },\n };\n }\n case \"contradiction_status\": {\n const counts = await computeContradictionCounts(\n args.ctx,\n args.beliefNodeId\n );\n return {\n metric: args.metric,\n value: counts.activeCount,\n data: counts,\n };\n }\n case \"edge_freshness\": {\n const freshness = await computeEvidenceFreshness(\n args.ctx,\n args.beliefNodeId,\n args.now\n );\n return {\n metric: args.metric,\n value: freshness.newestAgeMs,\n data: freshness,\n };\n }\n case \"dependent_count\": {\n const count = await computeDependentBeliefCount(\n args.ctx,\n args.beliefNodeId\n );\n return {\n metric: args.metric,\n value: count,\n data: { dependentCount: count },\n };\n }\n default:\n return {\n metric: args.metric,\n value: null,\n data: {},\n };\n }\n}\n\n\nasync function evaluateBuiltInEvidentialContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseEvidentialEvaluatorConfig(\n args.contract.condition.evaluatorConfig\n );\n const snapshot = await snapshotEvidentialMetric({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n metric: config.metric,\n now: args.now,\n });\n\n const comparisonSatisfied =\n snapshot.value !== null &&\n compareMetricValue(config.operator, snapshot.value, config.threshold);\n const result =\n args.contract.direction === \"falsifies\"\n ? comparisonSatisfied\n ? \"disconfirmed\"\n : \"confirmed\"\n : comparisonSatisfied\n ? \"confirmed\"\n : \"disconfirmed\";\n\n return {\n result,\n rationale: buildEvidentialRationale({\n config,\n snapshot,\n comparisonSatisfied,\n result,\n }),\n data: {\n ...snapshot.data,\n metric: config.metric,\n observedValue: snapshot.value,\n operator: config.operator,\n threshold: config.threshold,\n action: config.action ?? \"modulate_confidence\",\n actionParams: config.actionParams,\n },\n };\n}\n\nasync function evaluateMetricCheckerContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseMetricCheckerConfig(args.contract.condition.evaluatorConfig);\n const input = getEvaluatorInputRecord(args.inputData, \"metricData\");\n const metric =\n typeof input.metric === \"string\" && input.metric.length > 0\n ? input.metric\n : config.metric;\n const observedValue =\n pickFiniteNumber(input, [\n \"observedValue\",\n \"currentValue\",\n \"metricValue\",\n \"value\",\n ]) ??\n config.observedValue ??\n config.currentValue ??\n config.metricValue ??\n null;\n if (observedValue === null) {\n return {\n result: \"inconclusive\",\n rationale: `metric_checker is awaiting data for ${metric ?? args.contract.condition.expression}.`,\n data: {\n metric,\n observedValue: null,\n operator: config.operator,\n threshold: config.threshold,\n unit: config.unit,\n },\n };\n }\n\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n observedValue,\n config.threshold\n );\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: metric ?? \"metric\",\n observedValue,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n unit: config.unit,\n }),\n data: {\n metric,\n observedValue,\n operator: config.operator,\n threshold: config.threshold,\n unit: config.unit,\n },\n };\n}\n\nasync function evaluateReferenceCheckCounterContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseReferenceCheckCounterConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"referenceCheckData\");\n const tag =\n typeof input.tag === \"string\" && input.tag.trim().length > 0\n ? input.tag.trim()\n : config.tag;\n const snapshot = await computeTaggedEvidenceCount({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n tag,\n caseSensitive: config.caseSensitive,\n });\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n snapshot.count,\n config.threshold\n );\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: `reference checks tagged \"${tag}\"`,\n observedValue: snapshot.count,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n }),\n data: {\n tag,\n observedValue: snapshot.count,\n referenceCheckCount: snapshot.count,\n matchedEvidenceIds: snapshot.matchedEvidenceIds,\n operator: config.operator,\n threshold: config.threshold,\n caseSensitive: config.caseSensitive ?? false,\n },\n };\n}\n\nasync function evaluateTemporalDeadlineContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n if (\n typeof args.contract.deadline !== \"number\" ||\n !Number.isFinite(args.contract.deadline)\n ) {\n throw new Error(\n \"temporal_deadline requires contract.deadline to be set to a finite timestamp.\"\n );\n }\n\n const config = parseTemporalDeadlineConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"temporalData\");\n const label =\n (typeof input.label === \"string\" && input.label.length > 0\n ? input.label\n : config.label) ??\n args.contract.title ??\n args.contract.condition.expression;\n const completedAt =\n pickFiniteNumber(input, [\n \"completedAt\",\n \"observedAt\",\n \"satisfiedAt\",\n \"achievedAt\",\n ]) ??\n config.completedAt ??\n config.observedAt ??\n config.satisfiedAt ??\n config.achievedAt;\n const completed =\n input.completed === true || config.completed === true || completedAt !== undefined;\n\n if (completed) {\n if (completedAt !== undefined && completedAt > args.contract.deadline) {\n return {\n result: \"expired\",\n rationale: `${label} completed at ${completedAt}, after deadline ${args.contract.deadline}.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: true,\n completedAt,\n missedDeadline: true,\n overdueByMs: completedAt - args.contract.deadline,\n },\n };\n }\n\n const result =\n args.contract.direction === \"falsifies\" ? \"disconfirmed\" : \"confirmed\";\n return {\n result,\n rationale: `${label} completed before deadline ${args.contract.deadline}.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: true,\n completedAt: completedAt ?? null,\n missedDeadline: false,\n },\n };\n }\n\n if (args.now > args.contract.deadline) {\n return {\n result: \"expired\",\n rationale: `${label} missed deadline ${args.contract.deadline}; temporal contract expired.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: false,\n overdueByMs: args.now - args.contract.deadline,\n },\n };\n }\n\n return {\n result: \"inconclusive\",\n rationale: `${label} is still before deadline ${args.contract.deadline}; awaiting outcome.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: false,\n timeRemainingMs: args.contract.deadline - args.now,\n },\n };\n}\n\nasync function evaluateMarketIndexComparatorContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseMarketIndexComparatorConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"marketIndexData\");\n const subject =\n typeof input.subject === \"string\" && input.subject.length > 0\n ? input.subject\n : config.subject;\n const benchmark =\n typeof input.benchmark === \"string\" && input.benchmark.length > 0\n ? input.benchmark\n : config.benchmark;\n const subjectValue =\n pickFiniteNumber(input, [\"subjectValue\", \"primaryValue\", \"leftValue\"]) ??\n config.subjectValue ??\n config.primaryValue ??\n null;\n const benchmarkValue =\n pickFiniteNumber(input, [\n \"benchmarkValue\",\n \"comparisonValue\",\n \"rightValue\",\n ]) ??\n config.benchmarkValue ??\n config.comparisonValue ??\n null;\n\n if (subjectValue === null || benchmarkValue === null) {\n return {\n result: \"inconclusive\",\n rationale: \"market_index_comparator is awaiting both subject and benchmark values.\",\n data: {\n subject,\n subjectValue,\n benchmark,\n benchmarkValue,\n operator: config.operator,\n threshold: config.threshold,\n },\n };\n }\n\n if (benchmarkValue === 0) {\n throw new Error(\n \"market_index_comparator cannot compare against a zero benchmark value.\"\n );\n }\n\n const differentialPercent =\n ((subjectValue - benchmarkValue) / Math.abs(benchmarkValue)) * 100;\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n differentialPercent,\n config.threshold\n );\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: `${subject ?? \"subject\"} vs ${benchmark ?? \"benchmark\"} differential`,\n observedValue: differentialPercent,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n unit: \"%\",\n }),\n data: {\n subject,\n subjectValue,\n benchmark,\n benchmarkValue,\n differentialPercent,\n operator: config.operator,\n threshold: config.threshold,\n },\n };\n}\n\nfunction ensureBuiltInEvaluators(): void {\n for (const name of BUILT_IN_EVIDENTIAL_ALIASES) {\n if (evaluatorRegistry.has(name)) {\n continue;\n }\n evaluatorRegistry.set(name, {\n name,\n evaluate: evaluateBuiltInEvidentialContract,\n });\n }\n\n for (const evaluator of ENGINEERING_EPISTEMIC_EVALUATORS) {\n if (evaluatorRegistry.has(evaluator.name)) {\n continue;\n }\n evaluatorRegistry.set(evaluator.name, evaluator);\n }\n\n const researchEvaluators: Array<[string, EpistemicEvaluator[\"evaluate\"]]> = [\n [BUILT_IN_METRIC_CHECKER, evaluateMetricCheckerContract],\n [\n BUILT_IN_REFERENCE_CHECK_COUNTER,\n evaluateReferenceCheckCounterContract,\n ],\n [BUILT_IN_TEMPORAL_DEADLINE, evaluateTemporalDeadlineContract],\n [\n BUILT_IN_MARKET_INDEX_COMPARATOR,\n evaluateMarketIndexComparatorContract,\n ],\n ];\n\n for (const [name, evaluate] of researchEvaluators) {\n if (evaluatorRegistry.has(name)) {\n continue;\n }\n evaluatorRegistry.set(name, { name, evaluate });\n }\n}\n\nasync function executeContractEvaluation(args: {\n ctx: MutationCtx;\n belief: BeliefNodeDoc;\n contract: ContractDoc;\n now: number;\n trigger: string;\n inputData?: unknown;\n authenticatedUserId: string;\n currentConfidence?: number;\n resultData?: unknown;\n}): Promise<ContractEvaluationExecution> {\n ensureBuiltInEvaluators();\n\n const evaluator = evaluatorRegistry.get(args.contract.condition.evaluator);\n let evaluation: EpistemicEvaluatorResult;\n if (evaluator) {\n try {\n evaluation = await evaluator.evaluate({\n belief: args.belief,\n contract: args.contract,\n ctx: args.ctx,\n now: args.now,\n resultData: args.resultData,\n trigger: args.trigger,\n inputData: args.inputData,\n });\n } catch (error) {\n evaluation = {\n result: \"error\",\n rationale:\n error instanceof Error ? error.message : \"Unknown evaluator error.\",\n };\n }\n } else {\n evaluation = {\n result: \"error\",\n rationale: `No epistemic evaluator registered for \"${args.contract.condition.evaluator}\".`,\n };\n }\n\n const confidenceBefore =\n typeof args.currentConfidence === \"number\"\n ? args.currentConfidence\n : typeof args.belief.confidence === \"number\"\n ? args.belief.confidence\n : 0.5;\n const modulationPlan = deriveContractModulationPlan({\n currentConfidence: confidenceBefore,\n modulation: args.contract.modulation,\n result: evaluation.result,\n resultConfidence: evaluation.confidence,\n });\n\n let beliefConfidenceId: Id<\"beliefConfidence\"> | undefined;\n let confidenceAfter = confidenceBefore;\n if (modulationPlan) {\n // EK-7: Convert contract modulation to SL opinion.\n // Contract modulations are dogmatic (certainty=1) → u=0.\n const contractB = Math.max(0, Math.min(1, modulationPlan.confidenceAfter));\n const modulationResult = await applyBeliefConfidenceChange(args.ctx, {\n nodeId: args.contract.beliefNodeId,\n belief: contractB,\n disbelief: 1 - contractB,\n uncertainty: 0,\n baseRate: 0.5,\n trigger: modulationPlan.trigger,\n rationale: `Epistemic contract \"${args.contract.title}\" ${evaluation.result}: ${evaluation.rationale}`,\n authenticatedUserId: args.authenticatedUserId,\n });\n beliefConfidenceId = modulationResult.beliefConfidenceId;\n confidenceAfter =\n typeof modulationResult.newConfidence === \"number\"\n ? modulationResult.newConfidence\n : modulationPlan.confidenceAfter;\n }\n\n const evaluationId = await (args.ctx.db as any).insert(\n \"contractEvaluations\",\n {\n contractId: args.contract.contractId,\n beliefNodeId: args.contract.beliefNodeId,\n result: evaluation.result,\n evaluatedAt: args.now,\n evaluator: args.contract.condition.evaluator,\n trigger: args.trigger,\n resultData: evaluation.data,\n modulationApplied: Boolean(modulationPlan),\n confidenceDelta: modulationPlan?.confidenceDelta,\n confidenceBefore: modulationPlan?.confidenceBefore,\n confidenceAfter: modulationPlan ? confidenceAfter : undefined,\n beliefConfidenceId,\n modulationRationale: evaluation.rationale,\n topicId: args.contract.topicId,\n } as any\n );\n\n const nextStatus = deriveContractStatus(\n evaluation.result,\n args.contract.status\n );\n await args.ctx.db.patch(\n args.contract._id as any,\n {\n status: nextStatus,\n lastEvaluatedAt: args.now,\n evaluationCount: (args.contract.evaluationCount ?? 0) + 1,\n updatedAt: args.now,\n } as any\n );\n\n return {\n evaluationId,\n result: evaluation.result,\n status: nextStatus,\n confidenceBefore,\n confidenceAfter,\n rationale: evaluation.rationale,\n data: evaluation.data,\n currentConfidence: confidenceAfter,\n };\n}\n\nfunction resolveSchedulesForTrigger(trigger: string): Set<string> {\n if (trigger === \"evidence_added\") {\n return new Set([\"on_evidence\", \"event_driven\"]);\n }\n if (trigger === \"periodic\") {\n return new Set([\"periodic\"]);\n }\n if (trigger === \"manual\") {\n return new Set([\"on_demand\", \"event_driven\"]);\n }\n return new Set([\"event_driven\"]);\n}\n\nasync function loadContractsForBelief(args: {\n ctx: MutationCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n}): Promise<ContractDoc[]> {\n return await ((args.ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q: any) => q.eq(\"beliefNodeId\", args.beliefNodeId))\n .collect() as Promise<ContractDoc[]>);\n}\n\nasync function loadContractsForTrigger(args: {\n ctx: MutationCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n trigger: string;\n contractIds?: string[];\n}): Promise<ContractDoc[]> {\n const contracts = await loadContractsForBelief(args);\n\n ensureBuiltInEvaluators();\n const allowedSchedules = resolveSchedulesForTrigger(args.trigger);\n const contractIdFilter =\n args.contractIds && args.contractIds.length > 0\n ? new Set(args.contractIds)\n : null;\n\n return contracts.filter((contract) => {\n if (contract.status === \"archived\") {\n return false;\n }\n if (contract.conditionType === \"composite\") {\n return false;\n }\n if (!evaluatorRegistry.has(contract.condition.evaluator)) {\n return false;\n }\n if (contractIdFilter) {\n return contractIdFilter.has(contract.contractId);\n }\n return allowedSchedules.has(contract.evaluationSchedule);\n });\n}\n\nasync function evaluateContractsForTriggerBatch(args: {\n ctx: MutationCtx;\n belief: BeliefNodeDoc;\n trigger: string;\n inputData?: unknown;\n authenticatedUserId: string;\n contractIds?: string[];\n maxBatchSize?: number;\n}): Promise<TriggerBatchResult> {\n const startedAt = Date.now();\n const contracts = await loadContractsForTrigger({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n trigger: args.trigger,\n contractIds: args.contractIds,\n });\n const batchLimit = Math.max(\n 1,\n Math.min(\n args.maxBatchSize ?? MAX_CONTRACT_EVALUATION_BATCH_SIZE,\n MAX_CONTRACT_EVALUATION_BATCH_SIZE\n )\n );\n const currentBatch = contracts.slice(0, batchLimit);\n const overflowContracts = contracts.slice(batchLimit);\n\n let runningConfidence =\n typeof args.belief.confidence === \"number\" ? args.belief.confidence : 0.5;\n const results: TriggerBatchResult[\"results\"] = [];\n\n for (const contract of currentBatch) {\n const evaluation = await executeContractEvaluation({\n ctx: args.ctx,\n belief: args.belief,\n contract,\n now: Date.now(),\n trigger: args.trigger,\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n currentConfidence: runningConfidence,\n });\n runningConfidence = evaluation.currentConfidence;\n args.belief.confidence = runningConfidence;\n results.push({\n contractId: contract.contractId,\n result: evaluation.result,\n status: evaluation.status,\n confidenceAfter: evaluation.confidenceAfter,\n });\n }\n\n if (overflowContracts.length > 0) {\n await args.ctx.scheduler.runAfter(\n 0,\n \"epistemicContracts.processContractEvaluationOverflow\" as any,\n {\n beliefNodeId: args.belief._id,\n trigger: args.trigger,\n contractIds: overflowContracts.map((contract) => contract.contractId),\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n maxBatchSize: batchLimit,\n }\n );\n }\n\n const executionTimeMs = Date.now() - startedAt;\n console.info(\"[epistemicContracts] processed contract evaluation batch\", {\n beliefNodeId: String(args.belief._id),\n trigger: args.trigger,\n batchSize: currentBatch.length,\n overflowCount: overflowContracts.length,\n executionTimeMs,\n });\n\n return {\n totalContracts: contracts.length,\n processedCount: currentBatch.length,\n overflowCount: overflowContracts.length,\n scheduledOverflow: overflowContracts.length > 0,\n batchSize: currentBatch.length,\n executionTimeMs,\n trigger: args.trigger,\n results,\n };\n}\n\nexport function clearEpistemicEvaluators(): void {\n evaluatorRegistry.clear();\n ensureBuiltInEvaluators();\n}\n\nexport function registerEpistemicEvaluator(\n evaluator: EpistemicEvaluator\n): void {\n ensureBuiltInEvaluators();\n evaluatorRegistry.set(evaluator.name, evaluator);\n}\n\nexport function getRegisteredEpistemicEvaluators(): string[] {\n ensureBuiltInEvaluators();\n return Array.from(evaluatorRegistry.keys()).sort();\n}\n\nasync function requireAuth(ctx: MutationCtx | QueryCtx): Promise<string> {\n const userId = await getCurrentUserId(ctx as any);\n if (!userId) {\n throw new Error(\"Authentication required.\");\n }\n return userId;\n}\n\n// biome-ignore lint/suspicious/useAwait: delegates to requireAuth which is async in some ctx paths\nasync function resolveAuthenticatedUserId(\n ctx: MutationCtx | QueryCtx,\n explicitUserId?: string\n): Promise<string> {\n if (explicitUserId) {\n return explicitUserId;\n }\n return requireAuth(ctx);\n}\n\nasync function requireBeliefProjectAccess(\n ctx: MutationCtx | QueryCtx,\n belief: BeliefNodeDoc,\n userId: string\n): Promise<void> {\n if (!belief.projectId) {\n throw new Error(\"Belief has no project scope.\");\n }\n const hasAccess = await checkProjectAccess(\n ctx as any,\n belief.projectId,\n userId\n );\n if (!hasAccess) {\n throw new Error(\"Project access required.\");\n }\n}\n\nasync function requireTopicReadAccess(\n ctx: QueryCtx,\n beliefs: BeliefNodeDoc[],\n userId: string\n): Promise<void> {\n const projectIds = new Set<string>();\n\n for (const belief of beliefs) {\n if (!belief.projectId) {\n throw new Error(\"Belief has no project scope.\");\n }\n projectIds.add(belief.projectId);\n }\n\n for (const projectId of projectIds) {\n const hasAccess = await checkProjectAccess(ctx as any, projectId, userId);\n if (!hasAccess) {\n throw new Error(\"Project access required.\");\n }\n }\n}\n\nasync function getContractByContractId(\n ctx: MutationCtx | QueryCtx,\n contractId: string\n): Promise<ContractDoc | null> {\n return await ((ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_contractId\", (q: any) => q.eq(\"contractId\", contractId))\n .first() as Promise<ContractDoc | null>);\n}\n\nasync function getLatestEvaluation(\n ctx: MutationCtx | QueryCtx,\n contractId: string\n): Promise<ContractEvaluationDoc | null> {\n const evaluations = await ((ctx.db as any)\n .query(\"contractEvaluations\")\n .withIndex(\"by_contract_time\", (q: any) => q.eq(\"contractId\", contractId))\n .order(\"desc\")\n .take(1) as Promise<ContractEvaluationDoc[]>);\n\n return evaluations[0] ?? null;\n}\n\nexport const evaluateEvidenceCount = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await requireAuth(ctx);\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeEvidenceCountMetric(ctx, args.beliefNodeId);\n },\n});\n\nexport const evaluateContradictionStatus = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await requireAuth(ctx);\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeContradictionCounts(ctx, args.beliefNodeId);\n },\n});\n\nexport const evaluateEdgeFreshness = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await requireAuth(ctx);\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeEvidenceFreshness(ctx, args.beliefNodeId);\n },\n});\n\nexport const evaluateDependentBeliefCount = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await requireAuth(ctx);\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeDependentBeliefCount(ctx, args.beliefNodeId);\n },\n});\n\nexport const createEpistemicContract = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n title: v.string(),\n description: v.optional(v.string()),\n conditionType: v.union(\n v.literal(\"assertion\"),\n v.literal(\"temporal\"),\n v.literal(\"evidential\"),\n v.literal(\"threshold\"),\n v.literal(\"composite\")\n ),\n direction: v.union(v.literal(\"confirms\"), v.literal(\"falsifies\")),\n condition: v.object({\n expression: v.string(),\n evaluator: v.string(),\n evaluatorConfig: v.optional(v.any()),\n }),\n deadline: v.optional(v.number()),\n compositeOf: v.optional(v.array(v.string())),\n compositeOperator: v.optional(\n v.union(v.literal(\"all\"), v.literal(\"any\"), v.literal(\"majority\"))\n ),\n modulation: v.object({\n onConfirmed: v.object({\n delta: v.number(),\n ceiling: v.optional(v.number()),\n }),\n onDisconfirmed: v.object({\n delta: v.number(),\n floor: v.optional(v.number()),\n }),\n onExpired: v.optional(\n v.object({\n delta: v.number(),\n })\n ),\n onPartial: v.optional(\n v.object({\n threshold: v.number(),\n delta: v.number(),\n })\n ),\n }),\n evaluationSchedule: v.union(\n v.literal(\"on_demand\"),\n v.literal(\"on_evidence\"),\n v.literal(\"periodic\"),\n v.literal(\"event_driven\")\n ),\n periodicIntervalMs: v.optional(v.number()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n const now = Date.now();\n const contractId = generateGlobalId();\n\n const contractDoc = {\n beliefNodeId: args.beliefNodeId,\n contractId,\n title: args.title,\n description: args.description,\n conditionType: args.conditionType,\n direction: args.direction,\n condition: args.condition,\n deadline: args.deadline,\n compositeOf: args.compositeOf,\n compositeOperator: args.compositeOperator,\n modulation: args.modulation,\n evaluationSchedule: args.evaluationSchedule,\n periodicIntervalMs: args.periodicIntervalMs,\n status: \"active\" as const,\n lineageSource: \"declared\" as const,\n evaluationCount: 0,\n topicId: belief.topicId,\n createdAt: now,\n createdBy: userId,\n updatedAt: now,\n };\n\n const insertedId = await (ctx.db as any).insert(\n \"epistemicContracts\",\n contractDoc\n );\n return {\n contractId,\n id: insertedId,\n status: contractDoc.status,\n };\n },\n});\n\nexport const evaluateContract = mutation({\n args: {\n contractId: v.string(),\n resultData: v.optional(v.any()),\n trigger: v.optional(v.string()),\n inputData: v.optional(v.any()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const contract = await getContractByContractId(ctx, args.contractId);\n if (!contract) {\n throw new Error(`Contract not found: ${args.contractId}`);\n }\n if (contract.status === \"archived\") {\n throw new Error(\"Archived contracts cannot be evaluated.\");\n }\n\n const belief = (await ctx.db.get(\n contract.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found for contract.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n const evaluation = await executeContractEvaluation({\n ctx,\n belief,\n contract,\n now: Date.now(),\n resultData: args.resultData,\n trigger: args.trigger ?? \"manual\",\n inputData: args.inputData,\n authenticatedUserId: userId,\n });\n\n return {\n evaluationId: evaluation.evaluationId,\n result: evaluation.result,\n status: evaluation.status,\n confidenceBefore: evaluation.confidenceBefore,\n confidenceAfter: evaluation.confidenceAfter,\n rationale: evaluation.rationale,\n };\n },\n});\n\nexport const evaluateEngineeringContracts = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n testOutput: v.optional(v.any()),\n tscOutput: v.optional(v.any()),\n lintOutput: v.optional(v.any()),\n sentryData: v.optional(v.any()),\n trigger: v.optional(v.string()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n const trigger = args.trigger ?? \"event_driven\";\n const allowedSchedules = resolveSchedulesForTrigger(trigger);\n const payloadByEvaluator = new Map<string, unknown>([\n [\"test_runner\", args.testOutput],\n [\"tsc_checker\", args.tscOutput],\n [\"lint_checker\", args.lintOutput],\n [\"sentry_checker\", args.sentryData],\n ]);\n const contracts = (await loadContractsForBelief({\n ctx,\n beliefNodeId: args.beliefNodeId,\n })).filter((contract) => {\n if (contract.status === \"archived\") {\n return false;\n }\n if (!allowedSchedules.has(contract.evaluationSchedule)) {\n return false;\n }\n return ENGINEERING_EVALUATOR_NAMES.has(contract.condition.evaluator);\n });\n\n let runningConfidence =\n typeof belief.confidence === \"number\" ? belief.confidence : 0.5;\n const evaluations: Array<Record<string, unknown>> = [];\n\n for (const contract of contracts) {\n const resultData = payloadByEvaluator.get(contract.condition.evaluator);\n if (resultData === undefined) {\n continue;\n }\n\n const engineeringEvaluator = getEngineeringEpistemicEvaluator(\n contract.condition.evaluator\n );\n if (!engineeringEvaluator?.matches({ contract, resultData })) {\n continue;\n }\n\n const evaluation = await executeContractEvaluation({\n ctx,\n belief,\n contract,\n now: Date.now(),\n trigger,\n authenticatedUserId: userId,\n currentConfidence: runningConfidence,\n resultData,\n });\n runningConfidence = evaluation.currentConfidence;\n belief.confidence = runningConfidence;\n\n evaluations.push({\n contractId: contract.contractId,\n evaluator: contract.condition.evaluator,\n evaluationId: evaluation.evaluationId,\n result: evaluation.result,\n status: evaluation.status,\n confidenceBefore: evaluation.confidenceBefore,\n confidenceAfter: evaluation.confidenceAfter,\n rationale: evaluation.rationale,\n });\n }\n\n return {\n beliefNodeId: args.beliefNodeId,\n trigger,\n availableContracts: contracts.length,\n evaluatedContracts: evaluations.length,\n evaluations,\n };\n },\n});\n\nexport const evaluateContractsForTrigger = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n trigger: v.string(),\n inputData: v.optional(v.any()),\n maxBatchSize: v.optional(v.number()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n return await evaluateContractsForTriggerBatch({\n ctx,\n belief,\n trigger: args.trigger,\n inputData: args.inputData,\n authenticatedUserId: userId,\n maxBatchSize: args.maxBatchSize,\n });\n },\n});\n\nexport const processContractEvaluationOverflow = internalMutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n trigger: v.string(),\n contractIds: v.array(v.string()),\n inputData: v.optional(v.any()),\n authenticatedUserId: v.string(),\n maxBatchSize: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n\n return await evaluateContractsForTriggerBatch({\n ctx,\n belief,\n trigger: args.trigger,\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n contractIds: args.contractIds,\n maxBatchSize: args.maxBatchSize,\n });\n },\n});\n\nexport const getContractStatus = query({\n args: {\n beliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n contractId: v.optional(v.string()),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"satisfied\"),\n v.literal(\"violated\"),\n v.literal(\"expired\"),\n v.literal(\"suspended\"),\n v.literal(\"archived\")\n )\n ),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n\n let contracts: ContractDoc[] = [];\n if (args.contractId) {\n const contract = await getContractByContractId(ctx, args.contractId);\n contracts = contract ? [contract] : [];\n } else if (args.beliefNodeId) {\n const belief = (await ctx.db.get(\n args.beliefNodeId\n )) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n contracts = await ((ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q: any) =>\n q.eq(\"beliefNodeId\", args.beliefNodeId)\n )\n .collect() as Promise<ContractDoc[]>);\n }\n\n if (contracts.length > 0) {\n const contractBeliefDocs = await Promise.all(\n contracts.map((contract) => ctx.db.get(contract.beliefNodeId))\n );\n const contractBeliefs: BeliefNodeDoc[] = [];\n\n for (const belief of contractBeliefDocs) {\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n contractBeliefs.push(belief as BeliefNodeDoc);\n }\n\n await requireTopicReadAccess(ctx, contractBeliefs, userId);\n }\n\n if (args.status) {\n contracts = contracts.filter(\n (contract) => contract.status === args.status\n );\n }\n\n const rows = await Promise.all(\n contracts.map(async (contract) => ({\n ...contract,\n latestEvaluation: await getLatestEvaluation(ctx, contract.contractId),\n }))\n );\n\n return rows.sort((a, b) => b.createdAt - a.createdAt);\n },\n});\n\nexport const getContractCoverage = query({\n args: {\n topicId: v.string(),\n recentEvaluationLimit: v.optional(v.number()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const contracts = await ((ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_topic\", (q: any) => q.eq(\"topicId\", args.topicId))\n .collect() as Promise<ContractDoc[]>);\n\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const beliefs = await (ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n )\n .collect() as Promise<BeliefNodeDoc[]>);\n await requireTopicReadAccess(ctx, beliefs, userId);\n\n const recentEvaluationLimit = Math.max(\n 0,\n Math.min(args.recentEvaluationLimit ?? 5, 25)\n );\n const recentEvaluations =\n recentEvaluationLimit === 0\n ? []\n : (((await (ctx.db as any)\n .query(\"contractEvaluations\")\n .withIndex(\"by_topic_time\", (q: any) =>\n q.eq(\"topicId\", args.topicId)\n )\n .order(\"desc\")\n .take(recentEvaluationLimit)) as Promise<\n ContractEvaluationDoc[]\n >) ?? []);\n\n const contractBeliefIds = new Set(\n contracts\n .filter((contract) => contract.status !== \"archived\")\n .map((contract) => String(contract.beliefNodeId))\n );\n\n return {\n active: contracts.filter((contract) => contract.status === \"active\")\n .length,\n violated: contracts.filter((contract) => contract.status === \"violated\")\n .length,\n expired: contracts.filter((contract) => contract.status === \"expired\")\n .length,\n unboundHighConfidence: beliefs\n .filter(\n (belief) =>\n typeof belief.confidence === \"number\" &&\n belief.confidence >= 0.8 &&\n !contractBeliefIds.has(String(belief._id))\n )\n .map((belief) => ({\n nodeId: belief._id,\n canonicalText: belief.canonicalText,\n confidence: belief.confidence,\n })),\n recentEvaluations,\n };\n },\n});\n\nexport function inheritContractsForFork<\n TBeliefId = string,\n TTopicId = string | undefined,\n>(\n contracts: Array<{\n status: string;\n beliefNodeId: any;\n contractId: string;\n title: string;\n description?: string;\n conditionType: any;\n direction: any;\n condition: any;\n deadline?: number;\n compositeOf?: string[];\n compositeOperator?: any;\n modulation: any;\n evaluationSchedule: any;\n periodicIntervalMs?: number;\n createdAt: number;\n createdBy: string;\n updatedAt: number;\n }>,\n args: {\n beliefNodeId: TBeliefId;\n topicId?: TTopicId;\n createdBy: string;\n now: number;\n }\n) {\n return contracts\n .filter((contract) => contract.status !== \"archived\")\n .map((contract) => createInheritedContractRecord(contract as any, args));\n}\n","/** Shared evaluator helpers and result-normalization utilities. */\n\nimport type {\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n} from \"../epistemicContractHelpers\";\n\nexport type ToolResultEnvelope = {\n command?: string;\n data?: unknown;\n exitCode?: number | null;\n output?: string;\n report?: unknown;\n stderr?: string;\n stdout?: string;\n};\n\ntype AnyRecord = Record<string, unknown>;\n\nexport function asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nexport function asNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nexport function asRecord(value: unknown): AnyRecord | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as AnyRecord)\n : null;\n}\n\nexport function asString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : null;\n}\n\nexport function deriveDirectionalResult(\n direction: EpistemicContractDirection,\n conditionSatisfied: boolean\n): EpistemicContractEvaluationResult {\n if (direction === \"falsifies\") {\n return conditionSatisfied ? \"disconfirmed\" : \"confirmed\";\n }\n return conditionSatisfied ? \"confirmed\" : \"disconfirmed\";\n}\n\nexport function extractTextCandidates(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n const candidate = asString(value);\n return candidate ? [candidate] : [];\n }\n\n const candidates = [\n record.stdout,\n record.stderr,\n record.output,\n record.text,\n record.message,\n record.raw,\n ]\n .map(asString)\n .filter((candidate): candidate is string => Boolean(candidate));\n\n for (const nestedKey of [\"report\", \"result\", \"data\", \"payload\"]) {\n const nested = record[nestedKey];\n if (nested !== value) {\n candidates.push(...extractTextCandidates(nested));\n }\n }\n\n return Array.from(new Set(candidates));\n}\n\nexport function normalizeFilePath(value: string): string {\n return value.replace(/\\\\/g, \"/\").replace(/^\\.\\//, \"\");\n}\n\nexport function normalizeToolResultEnvelope(value: unknown): ToolResultEnvelope {\n const record = asRecord(value);\n if (!record) {\n return {\n output: asString(value) ?? undefined,\n };\n }\n\n const exitCode =\n asNumber(record.exitCode) ??\n asNumber(record.code) ??\n asNumber(record.status) ??\n null;\n\n return {\n command: asString(record.command) ?? undefined,\n data: record.data ?? record.payload,\n exitCode,\n output: asString(record.output) ?? undefined,\n report:\n record.report ??\n record.json ??\n record.result ??\n record.payload ??\n undefined,\n stderr: asString(record.stderr) ?? undefined,\n stdout: asString(record.stdout) ?? undefined,\n };\n}\n\nexport function parseJsonCandidate<T = unknown>(value: unknown): T | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value !== \"string\") {\n return value as T;\n }\n\n try {\n return JSON.parse(value) as T;\n } catch {\n return null;\n }\n}\n\nexport function patternMatchesPath(\n filePath: string,\n pattern: string\n): boolean {\n const normalizedPath = normalizeFilePath(filePath);\n const normalizedPattern = normalizeFilePath(pattern);\n const escaped = normalizedPattern.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regexPattern = escaped\n .replace(/\\\\\\*\\\\\\*/g, \".*\")\n .replace(/\\\\\\*/g, \"[^/]*\")\n .replace(/\\\\\\?/g, \"[^/]\");\n return new RegExp(`^${regexPattern}$`).test(normalizedPath);\n}\n\nexport function somePatternMatches(\n filePath: string | null | undefined,\n patterns: string[]\n): boolean {\n if (!filePath) {\n return false;\n }\n return patterns.some((pattern) => patternMatchesPath(filePath, pattern));\n}\n","/** Lint-based engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n somePatternMatches,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype ParsedLintDiagnostic = {\n filePath: string | null;\n message: string;\n severity: string;\n};\n\ntype LintCheckerConfig = {\n filePatterns: string[];\n linter: \"biome\";\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): LintCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"lint_checker requires evaluatorConfig with { filePatterns: string[], linter: \\\"biome\\\" }.\"\n );\n }\n\n const filePatterns = asArray(record.filePatterns)\n .map(asString)\n .filter((pattern): pattern is string => Boolean(pattern));\n if (filePatterns.length === 0) {\n throw new Error(\"lint_checker requires at least one file pattern.\");\n }\n\n const linter = asString(record.linter);\n if (linter !== \"biome\") {\n throw new Error(`Unsupported linter: ${String(record.linter)}`);\n }\n\n return {\n filePatterns,\n linter,\n };\n}\n\nfunction parseDiagnostics(resultData: unknown): ParsedLintDiagnostic[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ?? asRecord(envelope.data) ?? asRecord(resultData);\n if (!record) {\n return [];\n }\n\n return asArray(record.diagnostics)\n .map((entry) => {\n const diagnostic = asRecord(entry);\n if (!diagnostic) {\n return null;\n }\n const location = asRecord(diagnostic.location);\n const pathRecord = asRecord(location?.path);\n const filePath =\n asString(diagnostic.filePath) ??\n asString(diagnostic.file) ??\n asString(location?.filePath) ??\n asString(pathRecord?.file);\n const severity = asString(diagnostic.severity) ?? \"error\";\n const message =\n asString(diagnostic.message) ??\n asString(diagnostic.description) ??\n \"Lint issue\";\n return {\n filePath: filePath ? normalizeFilePath(filePath) : null,\n message,\n severity,\n };\n })\n .filter(\n (diagnostic): diagnostic is ParsedLintDiagnostic => Boolean(diagnostic)\n );\n}\n\nfunction getMatchedDiagnostics(\n contract: AnyContract,\n resultData: unknown\n): ParsedLintDiagnostic[] {\n const config = parseConfig(contract.condition);\n return parseDiagnostics(resultData).filter((diagnostic) =>\n somePatternMatches(diagnostic.filePath, config.filePatterns)\n );\n}\n\nexport const lintCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"lint_checker\",\n matches({ contract, resultData }) {\n const envelope = normalizeToolResultEnvelope(resultData);\n const exitCode = asNumber(envelope.exitCode);\n if (exitCode === 0) {\n return true;\n }\n return getMatchedDiagnostics(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"lint_checker requires Biome lint resultData.\",\n };\n }\n\n const envelope = normalizeToolResultEnvelope(args.resultData);\n const exitCode = asNumber(envelope.exitCode);\n const matchedDiagnostics = getMatchedDiagnostics(args.contract, args.resultData);\n\n if (matchedDiagnostics.length === 0 && exitCode !== 0 && exitCode !== null) {\n return {\n result: \"inconclusive\",\n rationale:\n \"Biome reported issues, but none matched the configured file patterns.\",\n };\n }\n\n const conditionSatisfied =\n exitCode === 0 || (exitCode !== null && matchedDiagnostics.length === 0);\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Biome reported no matching lint diagnostics for ${config.filePatterns.join(\", \")}.`\n : `Biome reported ${matchedDiagnostics.length} matching issue(s): ${matchedDiagnostics\n .map((diagnostic) =>\n diagnostic.filePath\n ? `${diagnostic.filePath} (${diagnostic.severity})`\n : diagnostic.message\n )\n .join(\", \")}.`,\n data: {\n exitCode,\n filePatterns: config.filePatterns,\n linter: config.linter,\n matchedDiagnostics,\n },\n };\n },\n};\n","/** Sentry-backed engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n normalizeToolResultEnvelope,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype SentryCheckerConfig = {\n module: string;\n windowDays: number;\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): SentryCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"sentry_checker requires evaluatorConfig with { module, windowDays }.\"\n );\n }\n\n const moduleName = asString(record.module);\n const windowDays = asNumber(record.windowDays);\n if (!moduleName || windowDays === null) {\n throw new Error(\n \"sentry_checker requires a module name and numeric windowDays.\"\n );\n }\n\n return {\n module: moduleName,\n windowDays,\n };\n}\n\nfunction parseIncidentCount(resultData: unknown): {\n incidentCount: number | null;\n moduleName: string | null;\n windowDays: number | null;\n} {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record = asRecord(envelope.report) ?? asRecord(envelope.data) ?? asRecord(resultData);\n if (!record) {\n return {\n incidentCount: null,\n moduleName: null,\n windowDays: null,\n };\n }\n\n const incidents = asArray(record.incidents);\n const incidentCount =\n asNumber(record.incidentCount) ??\n (incidents.length > 0 ? incidents.length : null);\n\n return {\n incidentCount,\n moduleName: asString(record.module),\n windowDays: asNumber(record.windowDays),\n };\n}\n\nfunction matchesModule(contract: AnyContract, resultData: unknown): boolean {\n const config = parseConfig(contract.condition);\n const payload = parseIncidentCount(resultData);\n return !payload.moduleName || payload.moduleName === config.module;\n}\n\nexport const sentryCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"sentry_checker\",\n matches({ contract, resultData }) {\n return matchesModule(contract, resultData);\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"sentry_checker requires incident count resultData.\",\n };\n }\n\n const payload = parseIncidentCount(args.resultData);\n if (payload.incidentCount === null) {\n return {\n result: \"error\",\n rationale: \"sentry_checker could not determine an incident count.\",\n };\n }\n if (!matchesModule(args.contract, args.resultData)) {\n return {\n result: \"inconclusive\",\n rationale: `Sentry result targeted ${payload.moduleName}, not ${config.module}.`,\n };\n }\n\n const conditionSatisfied = payload.incidentCount === 0;\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Sentry reported zero incidents for ${config.module} over ${config.windowDays} day(s).`\n : `Sentry reported ${payload.incidentCount} incident(s) for ${config.module} over ${config.windowDays} day(s).`,\n data: {\n incidentCount: payload.incidentCount,\n module: config.module,\n windowDays: config.windowDays,\n },\n };\n },\n};\n","/** Test-runner engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluator,\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asRecord,\n asString,\n deriveDirectionalResult,\n extractTextCandidates,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n parseJsonCandidate,\n patternMatchesPath,\n} from \"./shared\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype ParsedSuite = {\n failedTests: string[];\n filePath: string;\n passedTests: string[];\n};\n\ntype TestRunnerConfig = {\n runner: \"vitest\";\n testPattern: string;\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): TestRunnerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"test_runner requires evaluatorConfig with { testPattern, runner: \\\"vitest\\\" }.\"\n );\n }\n\n const testPattern = asString(record.testPattern);\n if (!testPattern) {\n throw new Error(\"test_runner requires a non-empty testPattern.\");\n }\n\n const runner = asString(record.runner);\n if (runner !== \"vitest\") {\n throw new Error(`Unsupported test runner: ${String(record.runner)}`);\n }\n\n return {\n runner,\n testPattern,\n };\n}\n\nfunction collectFailedTests(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n return [];\n }\n\n const fullName = asString(record.fullName);\n const title = asString(record.title);\n const label = fullName ?? title ?? \"unnamed test\";\n const status = asString(record.status);\n const state = asString(asRecord(record.result)?.state);\n const isFailed =\n status === \"failed\" ||\n status === \"fail\" ||\n state === \"failed\" ||\n state === \"fail\";\n\n const failures = isFailed ? [label] : [];\n for (const nestedKey of [\"assertionResults\", \"tests\", \"tasks\"]) {\n for (const nested of asArray(record[nestedKey])) {\n failures.push(...collectFailedTests(nested));\n }\n }\n\n return failures;\n}\n\nfunction collectPassedTests(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n return [];\n }\n\n const fullName = asString(record.fullName);\n const title = asString(record.title);\n const label = fullName ?? title ?? \"unnamed test\";\n const status = asString(record.status);\n const state = asString(asRecord(record.result)?.state);\n const isPassed = status === \"passed\" || state === \"passed\";\n\n const passed = isPassed ? [label] : [];\n for (const nestedKey of [\"assertionResults\", \"tests\", \"tasks\"]) {\n for (const nested of asArray(record[nestedKey])) {\n passed.push(...collectPassedTests(nested));\n }\n }\n\n return passed;\n}\n\nfunction parseSuite(value: unknown): ParsedSuite | null {\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n\n const filePath =\n asString(record.name) ??\n asString(record.file) ??\n asString(record.filePath) ??\n asString(record.filepath);\n if (!filePath) {\n return null;\n }\n\n return {\n failedTests: Array.from(new Set(collectFailedTests(record))),\n filePath: normalizeFilePath(filePath),\n passedTests: Array.from(new Set(collectPassedTests(record))),\n };\n}\n\nfunction parseVitestSuites(resultData: unknown): ParsedSuite[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const candidates = [\n envelope.report,\n envelope.data,\n envelope.stdout,\n envelope.output,\n ...extractTextCandidates(resultData),\n ];\n\n for (const candidate of candidates) {\n const parsed = parseJsonCandidate(candidate);\n const report = asRecord(parsed);\n if (!report) {\n continue;\n }\n\n const suites = asArray(report.testResults)\n .map(parseSuite)\n .filter((suite): suite is ParsedSuite => Boolean(suite));\n if (suites.length > 0) {\n return suites;\n }\n\n const fileSuites = asArray(report.files)\n .map(parseSuite)\n .filter((suite): suite is ParsedSuite => Boolean(suite));\n if (fileSuites.length > 0) {\n return fileSuites;\n }\n }\n\n return [];\n}\n\nfunction getMatchedSuites(\n contract: AnyContract,\n resultData: unknown\n): ParsedSuite[] {\n const config = parseConfig(contract.condition);\n return parseVitestSuites(resultData).filter((suite) =>\n patternMatchesPath(suite.filePath, config.testPattern)\n );\n}\n\nexport type EngineeringEpistemicEvaluator = EpistemicEvaluator & {\n matches(args: { contract: AnyContract; resultData: unknown }): boolean;\n};\n\nexport const testRunnerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"test_runner\",\n matches({ contract, resultData }) {\n return getMatchedSuites(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n const matchedSuites = getMatchedSuites(args.contract, args.resultData);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"test_runner requires Vitest JSON resultData.\",\n };\n }\n if (matchedSuites.length === 0) {\n return {\n result: \"inconclusive\",\n rationale: `No Vitest suites matched ${config.testPattern}.`,\n };\n }\n\n const failedTests = matchedSuites.flatMap((suite) => suite.failedTests);\n const passedTests = matchedSuites.flatMap((suite) => suite.passedTests);\n const conditionSatisfied = failedTests.length === 0;\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Vitest matched ${matchedSuites.length} suite(s) for ${config.testPattern}; all ${passedTests.length} test assertions passed.`\n : `Vitest matched ${matchedSuites.length} suite(s) for ${config.testPattern}; failing tests: ${failedTests.join(\", \")}.`,\n data: {\n runner: config.runner,\n testPattern: config.testPattern,\n matchedFiles: matchedSuites.map((suite) => suite.filePath),\n failedTests,\n passedTestCount: passedTests.length,\n },\n };\n },\n};\n","/** Typecheck-based engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n extractTextCandidates,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n somePatternMatches,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype ParsedDiagnostic = {\n code?: string;\n filePath: string | null;\n message: string;\n};\n\ntype TscCheckerConfig = {\n filePatterns: string[];\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): TscCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"tsc_checker requires evaluatorConfig with { filePatterns: string[] }.\"\n );\n }\n\n const filePatterns = asArray(record.filePatterns)\n .map(asString)\n .filter((pattern): pattern is string => Boolean(pattern));\n if (filePatterns.length === 0) {\n throw new Error(\"tsc_checker requires at least one file pattern.\");\n }\n\n return { filePatterns };\n}\n\nfunction parseStructuredDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ?? asRecord(envelope.data) ?? asRecord(resultData);\n if (!record) {\n return [];\n }\n\n return asArray(record.diagnostics).flatMap((entry): ParsedDiagnostic[] => {\n const diagnostic = asRecord(entry);\n if (!diagnostic) {\n return [];\n }\n const filePath =\n asString(diagnostic.filePath) ??\n asString(diagnostic.file) ??\n asString(asRecord(diagnostic.location)?.filePath) ??\n asString(asRecord(asRecord(diagnostic.location)?.path)?.file);\n const message = asString(diagnostic.message) ?? \"TypeScript error\";\n return [\n {\n code: asString(diagnostic.code) ?? undefined,\n filePath: filePath ? normalizeFilePath(filePath) : null,\n message,\n },\n ];\n });\n}\n\nfunction parseTextDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const diagnostics: ParsedDiagnostic[] = [];\n const patterns = [\n /^(.+?)\\((\\d+),(\\d+)\\): error TS(\\d+): (.+)$/gm,\n /^(.+?):(\\d+):(\\d+) - error TS(\\d+): (.+)$/gm,\n ];\n\n for (const text of extractTextCandidates(resultData)) {\n for (const pattern of patterns) {\n for (const match of text.matchAll(pattern)) {\n diagnostics.push({\n code: match[4],\n filePath: normalizeFilePath(match[1] ?? \"\"),\n message: match[5] ?? \"TypeScript error\",\n });\n }\n }\n }\n\n return diagnostics;\n}\n\nfunction parseDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const structured = parseStructuredDiagnostics(resultData);\n return structured.length > 0 ? structured : parseTextDiagnostics(resultData);\n}\n\nfunction getMatchedDiagnostics(\n contract: AnyContract,\n resultData: unknown\n): ParsedDiagnostic[] {\n const config = parseConfig(contract.condition);\n return parseDiagnostics(resultData).filter((diagnostic) =>\n somePatternMatches(diagnostic.filePath, config.filePatterns)\n );\n}\n\nexport const tscCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"tsc_checker\",\n matches({ contract, resultData }) {\n const envelope = normalizeToolResultEnvelope(resultData);\n const exitCode = asNumber(envelope.exitCode);\n if (exitCode === 0) {\n return true;\n }\n return getMatchedDiagnostics(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"tsc_checker requires TypeScript diagnostic resultData.\",\n };\n }\n\n const envelope = normalizeToolResultEnvelope(args.resultData);\n const exitCode = asNumber(envelope.exitCode);\n const matchedDiagnostics = getMatchedDiagnostics(args.contract, args.resultData);\n\n if (matchedDiagnostics.length === 0 && exitCode !== 0 && exitCode !== null) {\n return {\n result: \"inconclusive\",\n rationale:\n \"TypeScript reported errors, but none matched the configured file patterns.\",\n };\n }\n\n const conditionSatisfied =\n exitCode === 0 || (exitCode !== null && matchedDiagnostics.length === 0);\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `TypeScript reported no matching diagnostics for ${config.filePatterns.join(\", \")}.`\n : `TypeScript found ${matchedDiagnostics.length} matching diagnostic(s): ${matchedDiagnostics\n .map((diagnostic) =>\n diagnostic.filePath\n ? `${diagnostic.filePath}${diagnostic.code ? ` (TS${diagnostic.code})` : \"\"}`\n : diagnostic.message\n )\n .join(\", \")}.`,\n data: {\n exitCode,\n filePatterns: config.filePatterns,\n matchedDiagnostics,\n },\n };\n },\n};\n","/**\n * Epistemic Answers API\n *\n * Answers are first-class L2 nodes in the epistemic spine.\n * Every answer is an immutable snapshot — new answers create new nodes,\n * old ones get `superseded`. This gives full version history and lets\n * answers have their own edges in the knowledge graph.\n *\n * Edge: Answer —responds_to→ Question\n * Edge: Answer —based_on→ Evidence (for each supporting evidence)\n * Edge: NewAnswer —supersedes→ OldAnswer (for versioning)\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { v } from \"convex/values\";\nimport { api, internal } from \"./convex\";\nimport type { Id } from \"./convex\";\nimport { internalMutation, mutation, query } from \"./convex\";\nimport { checkScopeAccess } from \"@lucern/access-control/access\";\nimport { generateGlobalId } from \"./globalId\";\nimport { resolveScope, scopeArgs } from \"./scopeResolverCompat\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction generateContentHash(text: string): string {\n const content = `answer:${text.trim().toLowerCase().replace(/\\s+/g, \" \").slice(0, 500)}`;\n let hash = 5381;\n for (let i = 0; i < content.length; i++) {\n hash = (hash << 5) + hash + content.charCodeAt(i);\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\n// =============================================================================\n// CREATE\n// =============================================================================\n\n/**\n * Create a new answer node for a question.\n *\n * 1. Validates the question exists\n * 2. Determines version number\n * 3. Supersedes previous active answer (if any)\n * 4. Creates the answer node\n * 5. Creates responds_to edge (Answer → Question)\n * 6. Creates supersedes edge (NewAnswer → OldAnswer) if versioning\n * 7. Creates based_on edges (Answer → Evidence) for each evidence node\n * 8. Updates question's answerQuality field\n * 9. Logs to epistemicAudit\n */\nexport const create = mutation({\n args: {\n ...scopeArgs,\n questionNodeId: v.id(\"epistemicNodes\"),\n answerText: v.string(),\n confidence: v.optional(\n v.union(\n v.literal(\"definitive\"),\n v.literal(\"strong\"),\n v.literal(\"moderate\"),\n v.literal(\"weak\"),\n v.literal(\"speculative\")\n )\n ),\n evidenceNodeIds: v.optional(v.array(v.id(\"epistemicNodes\"))),\n answerSource: v.optional(v.string()),\n sprintId: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveScope(ctx, args);\n const topicId = scope?.topicId ? String(scope.topicId) : (args.topicId || \"\");\n await checkScopeAccess(ctx, topicId, args.userId);\n\n // 1. Validate question exists\n const questionNode = await ctx.db.get(args.questionNodeId);\n if (!questionNode || questionNode.nodeType !== \"question\") {\n throw new Error(\"Question node not found or not a question type\");\n }\n\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.answerText);\n\n // 2. Find current active answer(s) for this question to determine version\n // TC-C: Use by_topic_type (canonical)\n const existingAnswers = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", questionNode.topicId ?? topicId).eq(\"nodeType\", \"answer\")\n )\n .collect();\n\n const activeAnswersForQuestion = existingAnswers.filter((n) => {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n return (\n meta.questionNodeId === args.questionNodeId &&\n meta.isLatest === true &&\n n.status === \"active\"\n );\n });\n\n const versionNumber =\n activeAnswersForQuestion.length > 0\n ? Math.max(\n ...activeAnswersForQuestion.map((a) => {\n const meta = (a.metadata || {}) as Record<string, unknown>;\n return (meta.versionNumber as number) || 0;\n })\n ) + 1\n : 1;\n\n // 3. Supersede previous active answers\n for (const oldAnswer of activeAnswersForQuestion) {\n await ctx.db.patch(oldAnswer._id, {\n status: \"superseded\",\n supersededBy: undefined, // Will be set after insert\n updatedAt: now,\n metadata: {\n ...((oldAnswer.metadata as Record<string, unknown>) || {}),\n isLatest: false,\n },\n });\n }\n\n // Gather evidence globalIds\n const evidenceGlobalIds: string[] = [];\n if (args.evidenceNodeIds) {\n for (const evId of args.evidenceNodeIds) {\n const evNode = await ctx.db.get(evId);\n if (evNode) {\n evidenceGlobalIds.push(evNode.globalId);\n }\n }\n }\n\n // 4. Insert new answer node — inherit topicId from the question\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n projectId: topicId,\n topicId: questionNode.topicId,\n nodeType: \"answer\",\n epistemicLayer: \"L2\",\n canonicalText: args.answerText,\n contentHash,\n status: \"active\",\n sourceType: args.answerSource === \"human\" ? \"human\" : \"ai_generated\",\n createdBy: args.userId,\n createdAt: now,\n updatedAt: now,\n metadata: {\n questionGlobalId: questionNode.globalId,\n questionNodeId: String(args.questionNodeId),\n versionNumber,\n isLatest: true,\n evidenceGlobalIds,\n evidenceCount: evidenceGlobalIds.length,\n answeredBy: args.userId,\n answerSource: args.answerSource || \"human\",\n sprintId: args.sprintId,\n },\n });\n\n // Update supersededBy on old answers\n for (const oldAnswer of activeAnswersForQuestion) {\n await ctx.db.patch(oldAnswer._id, {\n supersededBy: nodeId,\n });\n }\n\n // 5. Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n await ctx.scheduler.runAfter(\n 0,\n api.embeddingActions.generateEpistemicNodeEmbedding,\n {\n nodeId,\n projectId: topicId,\n topicId: questionNode.topicId ? String(questionNode.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"answer\",\n text: args.answerText.slice(0, 20_000),\n }\n );\n await ctx.scheduler.runAfter(\n 0,\n internal.sprints.embedProjectThemeCollectiveInternal,\n {\n projectId: topicId,\n userId: args.userId,\n }\n );\n\n // 6. Create responds_to edge (Answer → Question)\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: crypto.randomUUID(),\n fromGlobalId: globalId,\n toGlobalId: questionNode.globalId,\n edgeType: \"responds_to\",\n weight: 1.0,\n createdBy: args.userId,\n topicId: String(args.topicId ?? \"\"),\n fromNodeType: \"answer\",\n toNodeType: \"question\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n\n // 7. Create supersedes edges (NewAnswer → OldAnswer)\n for (const oldAnswer of activeAnswersForQuestion) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: crypto.randomUUID(),\n fromGlobalId: globalId,\n toGlobalId: oldAnswer.globalId,\n edgeType: \"supersedes\",\n createdBy: args.userId,\n topicId: String(args.topicId ?? \"\"),\n fromNodeType: \"answer\",\n toNodeType: \"answer\",\n fromLayer: \"L2\",\n toLayer: \"L2\",\n });\n }\n\n // 8. Create based_on edges (Answer → Evidence)\n if (args.evidenceNodeIds) {\n for (const evId of args.evidenceNodeIds) {\n const evNode = await ctx.db.get(evId);\n if (evNode) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: crypto.randomUUID(),\n fromGlobalId: globalId,\n toGlobalId: evNode.globalId,\n edgeType: \"derived_from\",\n createdBy: args.userId,\n topicId: String(args.topicId ?? \"\"),\n fromNodeType: \"answer\",\n toNodeType: \"evidence\",\n fromLayer: \"L2\",\n toLayer: \"L2\",\n });\n }\n }\n }\n\n // 9. Re-edge: evidence that \"derived_from\" the question now also gets \"derived_from\" → answer\n const evidenceEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", args.questionNodeId).eq(\"edgeType\", \"derived_from\")\n )\n .collect();\n\n for (const edge of evidenceEdges) {\n const evidenceNode = await ctx.db.get(edge.fromNodeId);\n if (evidenceNode) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: crypto.randomUUID(),\n fromGlobalId: evidenceNode.globalId,\n toGlobalId: globalId,\n edgeType: \"derived_from\",\n createdBy: args.userId,\n topicId: String(args.topicId ?? \"\"),\n fromNodeType: \"evidence\",\n toNodeType: \"answer\",\n fromLayer: \"L2\",\n toLayer: \"L2\",\n });\n }\n }\n\n // 10. Update question's answerQuality\n const answerQuality = args.confidence || \"moderate\";\n await ctx.db.patch(args.questionNodeId, {\n answerQuality,\n updatedAt: now,\n });\n\n // 11. Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"answer\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: topicId,\n newState: {\n answerText: args.answerText.slice(0, 200),\n versionNumber,\n questionNodeId: String(args.questionNodeId),\n confidence: answerQuality,\n },\n });\n\n return { nodeId, globalId, versionNumber };\n },\n});\n\n// =============================================================================\n// CREATE INTERNAL (for scheduler / other modules)\n// =============================================================================\n\n/**\n * Internal mutation for creating answer nodes.\n * Called from epistemicQuestions.updateStatus when status === \"answered\".\n */\nexport const createInternal = internalMutation({\n args: {\n ...scopeArgs,\n questionNodeId: v.id(\"epistemicNodes\"),\n answerText: v.string(),\n confidence: v.optional(v.string()),\n evidenceNodeIds: v.optional(v.array(v.id(\"epistemicNodes\"))),\n answerSource: v.optional(v.string()),\n sprintId: v.optional(v.string()),\n userId: v.string(),\n backfilledFromQuestionId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveScope(ctx, args);\n const topicId = scope?.topicId ? String(scope.topicId) : (args.topicId || \"\");\n\n // Validate question exists\n const questionNode = await ctx.db.get(args.questionNodeId);\n if (!questionNode || questionNode.nodeType !== \"question\") {\n throw new Error(\"Question node not found or not a question type\");\n }\n\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.answerText);\n\n // Find current active answers for this question (TC-C: use topic index)\n const existingAnswers = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", questionNode.topicId ?? topicId).eq(\"nodeType\", \"answer\")\n )\n .collect();\n\n const activeAnswersForQuestion = existingAnswers.filter((n) => {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n return (\n meta.questionNodeId === String(args.questionNodeId) &&\n meta.isLatest === true &&\n n.status === \"active\"\n );\n });\n\n const versionNumber =\n activeAnswersForQuestion.length > 0\n ? Math.max(\n ...activeAnswersForQuestion.map((a) => {\n const meta = (a.metadata || {}) as Record<string, unknown>;\n return (meta.versionNumber as number) || 0;\n })\n ) + 1\n : 1;\n\n // Supersede previous active answers\n for (const oldAnswer of activeAnswersForQuestion) {\n await ctx.db.patch(oldAnswer._id, {\n status: \"superseded\",\n updatedAt: now,\n metadata: {\n ...((oldAnswer.metadata as Record<string, unknown>) || {}),\n isLatest: false,\n },\n });\n }\n\n // Gather evidence globalIds\n const evidenceGlobalIds: string[] = [];\n if (args.evidenceNodeIds) {\n for (const evId of args.evidenceNodeIds) {\n const evNode = await ctx.db.get(evId);\n if (evNode) {\n evidenceGlobalIds.push(evNode.globalId);\n }\n }\n }\n\n // Insert answer node — inherit topicId from the question (TC-C fix)\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n projectId: topicId,\n topicId: questionNode.topicId,\n nodeType: \"answer\",\n epistemicLayer: \"L2\",\n canonicalText: args.answerText,\n contentHash,\n status: \"active\",\n sourceType: args.answerSource === \"human\" ? \"human\" : \"ai_generated\",\n createdBy: args.userId,\n createdAt: now,\n updatedAt: now,\n metadata: {\n questionGlobalId: questionNode.globalId,\n questionNodeId: String(args.questionNodeId),\n versionNumber,\n isLatest: true,\n evidenceGlobalIds,\n evidenceCount: evidenceGlobalIds.length,\n answeredBy: args.userId,\n answerSource: args.answerSource || \"human\",\n sprintId: args.sprintId,\n backfilledFromQuestionId: args.backfilledFromQuestionId,\n },\n });\n\n // Update supersededBy on old answers\n for (const oldAnswer of activeAnswersForQuestion) {\n await ctx.db.patch(oldAnswer._id, {\n supersededBy: nodeId,\n });\n }\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n await ctx.scheduler.runAfter(\n 0,\n api.embeddingActions.generateEpistemicNodeEmbedding,\n {\n nodeId,\n projectId: topicId,\n topicId: questionNode.topicId ? String(questionNode.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"answer\",\n text: args.answerText.slice(0, 20_000),\n }\n );\n await ctx.scheduler.runAfter(\n 0,\n internal.sprints.embedProjectThemeCollectiveInternal,\n {\n projectId: topicId,\n userId: args.userId,\n }\n );\n\n // Create responds_to edge (Answer → Question)\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: crypto.randomUUID(),\n fromGlobalId: globalId,\n toGlobalId: questionNode.globalId,\n edgeType: \"responds_to\",\n weight: 1.0,\n createdBy: args.userId,\n topicId: String(args.topicId ?? \"\"),\n fromNodeType: \"answer\",\n toNodeType: \"question\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n\n // Create supersedes edges\n for (const oldAnswer of activeAnswersForQuestion) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: crypto.randomUUID(),\n fromGlobalId: globalId,\n toGlobalId: oldAnswer.globalId,\n edgeType: \"supersedes\",\n createdBy: args.userId,\n topicId: String(args.topicId ?? \"\"),\n fromNodeType: \"answer\",\n toNodeType: \"answer\",\n fromLayer: \"L2\",\n toLayer: \"L2\",\n });\n }\n\n // Create based_on edges (Answer → Evidence)\n if (args.evidenceNodeIds) {\n for (const evId of args.evidenceNodeIds) {\n const evNode = await ctx.db.get(evId);\n if (evNode) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: crypto.randomUUID(),\n fromGlobalId: globalId,\n toGlobalId: evNode.globalId,\n edgeType: \"derived_from\",\n createdBy: args.userId,\n topicId: String(args.topicId ?? \"\"),\n fromNodeType: \"answer\",\n toNodeType: \"evidence\",\n fromLayer: \"L2\",\n toLayer: \"L2\",\n });\n }\n }\n }\n\n // Re-edge: evidence that \"derived_from\" the question now also gets \"derived_from\" → answer\n const evidenceEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", args.questionNodeId).eq(\"edgeType\", \"derived_from\")\n )\n .collect();\n\n for (const edge of evidenceEdges) {\n const evidenceNode = await ctx.db.get(edge.fromNodeId);\n if (evidenceNode) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: crypto.randomUUID(),\n fromGlobalId: evidenceNode.globalId,\n toGlobalId: globalId,\n edgeType: \"derived_from\",\n createdBy: args.userId,\n topicId: String(args.topicId ?? \"\"),\n fromNodeType: \"evidence\",\n toNodeType: \"answer\",\n fromLayer: \"L2\",\n toLayer: \"L2\",\n });\n }\n }\n\n // Update question's answerQuality\n const answerQuality = args.confidence || \"moderate\";\n await (ctx.db as any).patch(args.questionNodeId, {\n answerQuality,\n updatedAt: now,\n });\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"answer\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: topicId,\n newState: {\n answerText: args.answerText.slice(0, 200),\n versionNumber,\n questionNodeId: String(args.questionNodeId),\n backfilled: !!args.backfilledFromQuestionId,\n },\n });\n\n return { nodeId, globalId, versionNumber };\n },\n});\n\n// =============================================================================\n// QUERIES\n// =============================================================================\n\n/**\n * Get all answers for a question, optionally including superseded.\n */\nexport const getByQuestion = query({\n args: {\n questionNodeId: v.id(\"epistemicNodes\"),\n includeSuperseded: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const questionNode = await ctx.db.get(args.questionNodeId);\n if (!questionNode || questionNode.nodeType !== \"question\") {\n return [];\n }\n\n // Get answers via topic or project index (TC-C: prefer topic)\n const topicId = questionNode.topicId;\n const answers = topicId\n ? await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", topicId).eq(\"nodeType\", \"answer\")\n )\n .collect()\n : await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_project_type\", (q) =>\n q.eq(\"projectId\", questionNode.projectId!).eq(\"nodeType\", \"answer\")\n )\n .collect();\n\n // Filter to answers for this question\n const questionIdStr = String(args.questionNodeId);\n const filtered = answers.filter((a) => {\n const meta = (a.metadata || {}) as Record<string, unknown>;\n return meta.questionNodeId === questionIdStr;\n });\n\n if (!args.includeSuperseded) {\n return filtered.filter((a) => a.status === \"active\");\n }\n\n // Sort by version number (newest first)\n filtered.sort((a, b) => {\n const metaA = (a.metadata || {}) as Record<string, unknown>;\n const metaB = (b.metadata || {}) as Record<string, unknown>;\n return (\n ((metaB.versionNumber as number) || 0) -\n ((metaA.versionNumber as number) || 0)\n );\n });\n\n return filtered;\n },\n});\n\n/**\n * Get the single active (latest) answer for a question.\n */\nexport const getLatestForQuestion = query({\n args: {\n questionNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const questionNode = await ctx.db.get(args.questionNodeId);\n if (!questionNode || questionNode.nodeType !== \"question\") {\n return null;\n }\n\n // Prefer topicId (canonical), fall back to projectId (legacy).\n // Filter status === \"active\" at DB level to reduce JS-side work.\n // metadata.questionNodeId filtering must stay in JS (no index on metadata fields).\n let answers;\n if (questionNode.topicId) {\n answers = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", questionNode.topicId!).eq(\"nodeType\", \"answer\")\n )\n .filter((q) => q.eq(q.field(\"status\"), \"active\"))\n .collect();\n } else {\n answers = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_project_type\", (q) =>\n q.eq(\"projectId\", questionNode.projectId!).eq(\"nodeType\", \"answer\")\n )\n .filter((q) => q.eq(q.field(\"status\"), \"active\"))\n .collect();\n }\n\n const questionIdStr = String(args.questionNodeId);\n const latest = answers.find((a) => {\n const meta = (a.metadata || {}) as Record<string, unknown>;\n return meta.questionNodeId === questionIdStr && meta.isLatest === true;\n });\n\n return latest || null;\n },\n});\n\n/**\n * Get full version history for answers to a question.\n * Returns answers ordered by version number (newest first).\n */\nexport const getVersionHistory = query({\n args: {\n questionNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const questionNode = await ctx.db.get(args.questionNodeId);\n if (!questionNode || questionNode.nodeType !== \"question\") {\n return [];\n }\n\n // Prefer topicId (canonical), fall back to projectId (legacy).\n // Filter status at DB level; metadata.questionNodeId must filter in JS (no index on metadata).\n let answers;\n if (questionNode.topicId) {\n answers = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", questionNode.topicId!).eq(\"nodeType\", \"answer\")\n )\n .filter((q) =>\n q.or(\n q.eq(q.field(\"status\"), \"active\"),\n q.eq(q.field(\"status\"), \"superseded\")\n )\n )\n .collect();\n } else {\n answers = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_project_type\", (q) =>\n q.eq(\"projectId\", questionNode.projectId!).eq(\"nodeType\", \"answer\")\n )\n .filter((q) =>\n q.or(\n q.eq(q.field(\"status\"), \"active\"),\n q.eq(q.field(\"status\"), \"superseded\")\n )\n )\n .collect();\n }\n\n const questionIdStr = String(args.questionNodeId);\n const history = answers\n .filter((a) => {\n const meta = (a.metadata || {}) as Record<string, unknown>;\n return meta.questionNodeId === questionIdStr;\n })\n .map((a) => {\n const meta = (a.metadata || {}) as Record<string, unknown>;\n return {\n _id: a._id,\n globalId: a.globalId,\n answerText: a.canonicalText,\n versionNumber: (meta.versionNumber as number) || 1,\n isLatest: (meta.isLatest as boolean) || false,\n status: a.status,\n answeredBy: (meta.answeredBy as string) || a.createdBy,\n answerSource: meta.answerSource as string | undefined,\n evidenceCount: (meta.evidenceCount as number) || 0,\n createdAt: a.createdAt,\n supersededBy: a.supersededBy,\n };\n })\n .sort((a, b) => b.versionNumber - a.versionNumber);\n\n return history;\n },\n});\n\n// =============================================================================\n// BACKFILL: Create answer nodes for questions that have answer text but no node\n// =============================================================================\n\n/**\n * Backfill answer nodes for questions that have answer text in metadata\n * but never had an answer node created (due to the QuestionAnswerEditor bug\n * where saveAnswer passed wrong params to updateStatus).\n *\n * Run once via Convex dashboard:\n * internal.epistemicAnswers.backfillAnswerNodes({ projectId, userId })\n */\nexport const backfillAnswerNodes = internalMutation({\n args: {\n ...scopeArgs,\n userId: v.string(),\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveScope(ctx, args);\n const topicId = (scope?.topicId ??\n args.topicId) as Id<\"topics\">;\n const dryRun = args.dryRun ?? false;\n\n // 1. Find all question nodes with answer text in metadata (TC-C: prefer topic)\n const questions = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", topicId).eq(\"nodeType\", \"question\")\n )\n .collect();\n\n const questionsWithAnswers = questions.filter((q) => {\n const meta = (q.metadata || {}) as Record<string, unknown>;\n const answer = meta.answer as string | undefined;\n return answer && answer.trim().length > 0;\n });\n\n // 2. Find all existing answer nodes (TC-C: use topic index since projectId is now topicId)\n const existingAnswers = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", topicId).eq(\"nodeType\", \"answer\")\n )\n .collect();\n\n // Build set of question IDs that already have answer nodes\n const questionIdsWithAnswerNodes = new Set(\n existingAnswers.map((a) => {\n const meta = (a.metadata || {}) as Record<string, unknown>;\n return meta.questionNodeId as string;\n })\n );\n\n // 3. Filter to questions that need backfill\n const needsBackfill = questionsWithAnswers.filter(\n (q) => !questionIdsWithAnswerNodes.has(String(q._id))\n );\n\n console.log(\n `[backfillAnswerNodes] Found ${questionsWithAnswers.length} questions with answers, ` +\n `${questionIdsWithAnswerNodes.size} already have answer nodes, ` +\n `${needsBackfill.length} need backfill. dryRun=${dryRun}`\n );\n\n if (dryRun) {\n return {\n questionsWithAnswers: questionsWithAnswers.length,\n alreadyHaveNodes: questionIdsWithAnswerNodes.size,\n needsBackfill: needsBackfill.length,\n questions: needsBackfill.map((q) => ({\n id: q._id,\n globalId: q.globalId,\n text: q.canonicalText?.slice(0, 80),\n answer: ((q.metadata as any)?.answer as string)?.slice(0, 80),\n })),\n };\n }\n\n // 4. Create answer nodes for each\n let created = 0;\n for (const question of needsBackfill) {\n const meta = (question.metadata || {}) as Record<string, unknown>;\n const answerText = meta.answer as string;\n\n await ctx.scheduler.runAfter(\n 0,\n internal.epistemicAnswers.createInternal,\n {\n topicId: String(topicId), // TC-C: migrated from projectId\n questionNodeId: question._id,\n answerText,\n answerSource: (meta.answeredBy as string) ? \"human\" : \"ai_generated\",\n userId: (meta.answeredBy as string) || args.userId,\n backfilledFromQuestionId: String(question._id),\n }\n );\n created++;\n }\n\n return {\n questionsWithAnswers: questionsWithAnswers.length,\n alreadyHaveNodes: questionIdsWithAnswerNodes.size,\n backfilled: created,\n };\n },\n});\n","/**\n * Epistemic Edges - CRUD operations for the knowledge graph relationships\n *\n * Every \"supports\", \"contradicts\", \"derived_from\" relationship in StackOS is an edge.\n * Edges connect epistemic nodes and carry metadata about the relationship.\n *\n * @see /docs/architecture/EPISTEMIC_SPINE.md\n */\n\nimport { v } from \"convex/values\";\nimport {\n checkProjectAccess,\n checkScopeAccess,\n requireProjectAccess,\n} from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\nimport type { Id } from \"./convex\";\nimport { internal, internalMutation, mutation, query } from \"./convex\";\nimport {\n getDefaultMinLayer,\n shouldContinueTraversal,\n type TraversalMode,\n validateEdgeLayers,\n} from \"./edgeValidation\";\nimport { getNodeLayer, isDeprecatedEdgeType } from \"./graphTypes\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\n\n// =============================================================================\n// TYPES (Phase 2A: Layer Architecture Compliant)\n// =============================================================================\n\n/**\n * Epistemic Layer Validator for edges\n */\nexport const epistemicLayerValidator = v.union(\n v.literal(\"L4\"),\n v.literal(\"L3\"),\n v.literal(\"L2\"),\n v.literal(\"L1\"),\n v.literal(\"ontological\"),\n v.literal(\"organizational\")\n);\n\nconst subjectiveOpinionValidator = v.object({\n b: v.number(),\n d: v.number(),\n u: v.number(),\n a: v.number(),\n});\n\nexport const edgeTypeValidator = v.union(\n // --- L4 Decision Edges (Phase 2A) ---\n v.literal(\"based_on_belief\"), // Decision → Belief (L4 → L3)\n v.literal(\"based_on_question\"), // Decision → Question (L4 → L3)\n v.literal(\"blocked_by_contradiction\"), // Decision → Contradiction (L4 → L3)\n v.literal(\"informed_by_theme\"), // Decision → Theme (L4 → L3)\n\n // --- Evidence Flow (L2 → L3, L2 → L1) ---\n v.literal(\"derived_from\"), // Evidence/Synthesis → Source/Question (provenance)\n v.literal(\"responds_to\"), // Answer → Question (L2 → L3)\n v.literal(\"informs\"), // Evidence → Belief (L2 → L3) - use weight: -1 to +1\n v.literal(\"tests\"), // Question → Belief (L3 → L3)\n v.literal(\"explores\"), // Question → Belief assumption (L3 → L3)\n v.literal(\"qualifies\"), // Evidence → Belief (L2 → L3)\n\n // --- Synthesis (L2 → L2, L2 → L1) ---\n // \"based_on\" removed — use \"derived_from\" instead\n\n // --- Theme Relationships (L3 → L3) ---\n v.literal(\"relates_to_thesis\"), // Belief → Theme (L3 → L3) - use weight: -1 to +1\n v.literal(\"belongs_to\"), // Any → Theme (? → L3)\n v.literal(\"plays_theme\"), // Deal → Theme (L3 → L3)\n v.literal(\"scoped_by\"), // Belief/Question → Topic (L3 → organizational)\n\n // --- Deal/Company ---\n v.literal(\"evaluates\"), // Deal → Company (L3 → ontological)\n\n // --- People (ontological → ontological, ontological → L3) ---\n v.literal(\"perspective_on\"), // Person → Belief/Theme\n v.literal(\"works_at\"), // Person → Company/Investor\n v.literal(\"mentioned_in\"), // Person/Company → Source (ontological → L1)\n v.literal(\"founded_by\"), // Company → Person (ontological → ontological)\n\n // --- Value Chain (ontological → ontological) ---\n v.literal(\"participates_in\"), // Company → ValueChain\n v.literal(\"performs\"), // Company → Function\n v.literal(\"function_in\"), // Function → ValueChain\n v.literal(\"impacts\"), // Theme → ValueChain (L3 → ontological)\n\n // --- Investment (ontological → ontological) ---\n v.literal(\"invested_in\"), // Investor → Company\n v.literal(\"raised_from\"), // Company → Investor\n\n // --- Lifecycle (same layer only) ---\n v.literal(\"supersedes\"), // NewNode → OldNode (same layer)\n v.literal(\"same_as\"), // Duplicate detection (same layer)\n\n // --- Same-Type Relationships: Belief ↔ Belief (L3 → L3) ---\n v.literal(\"depends_on\"), // Belief B requires Belief A to be true\n v.literal(\"supports\"), // Beliefs strengthen each other (weight > 0)\n v.literal(\"contains\"), // Parent contains child (hierarchical containment)\n\n // --- Belief Cluster Mapping (L3 → L3) - For Thesis Validation Sprints ---\n // These edge types capture the full range of belief-to-belief relationships\n // needed for cluster mapping, confidence propagation, and thesis testing.\n v.literal(\"counterfactual_of\"), // If A is TRUE, B FAILS (inverse dependency)\n v.literal(\"cascade_to\"), // If B fails, A also fails (downstream impact)\n v.literal(\"cascade_from\"), // Changes propagate from A to B (upstream dependency)\n v.literal(\"mutually_exclusive\"), // A and B cannot BOTH be true (zero-sum)\n v.literal(\"correlates_with\"), // A and B move together non-causally (observed pattern)\n v.literal(\"amplifies\"), // A strengthens B unidirectionally (one-way boost)\n v.literal(\"precondition_for\"), // A must validate before B can be tested (temporal)\n v.literal(\"in_tension_with\"), // A and B pull opposite directions (soft conflict)\n\n // --- Belief ↔ Belief: Epistemic Impact (Confidence Propagation) ---\n v.literal(\"falsified_by\"), // If B is validated, A becomes false\n v.literal(\"exclusive_with\"), // A XOR B (sum of confidences ≤ 1)\n v.literal(\"contradicts\"), // A directly contradicts B\n v.literal(\"collapses_if\"), // If A falls below threshold, B collapses\n v.literal(\"strengthened_by\"), // If A rises, B rises\n v.literal(\"weakened_by\"), // If A rises, B falls\n v.literal(\"alternative_to\"), // Competing explanations\n v.literal(\"subsumes\"), // A is more general, includes B\n v.literal(\"validated_by\"), // If B is true, A gains confidence\n v.literal(\"required_for\"), // A must be true for B to be meaningful\n v.literal(\"blocks\"), // A being unresolved blocks B\n\n // --- Same-Type Relationships: Question ↔ Question (L3 → L3) ---\n v.literal(\"prerequisite_for\"), // Question A must be answered first\n v.literal(\"parallel_to\"), // Same topic, different angles\n\n // --- Same-Type Relationships: Evidence ↔ Evidence (L2 → L2) ---\n v.literal(\"corroborates\"), // Independent support for same conclusion\n v.literal(\"extends\"), // Adds depth to other evidence\n v.literal(\"same_source_as\"), // Same document/study\n v.literal(\"same_theme_as\"), // Same topic/entity\n\n // --- NEW: Deep Epistemic Analysis Edges (Phase: Schema Upgrade) ---\n v.literal(\"assumes\"), // Hidden dependency discovered by AI (Belief B implicitly assumes A)\n v.literal(\"would_predict\"), // Pre-registered prediction for validation (If Belief true, expect Evidence)\n v.literal(\"analogous_to\"), // Explicit analogy with disanalogies (Belief A like Belief B because...)\n v.literal(\"independent_of\"), // True evidence independence marker (Evidence A independent of B)\n\n // --- Entity↔Belief Bridge (OE-B) ---\n // \"about_entity\" and \"entity_referenced_in\" removed — use \"contains\" instead\n v.literal(\"competes_with\") // Company → Company (ontological → ontological)\n);\n\n// =============================================================================\n// QUERIES\n// =============================================================================\n\n/**\n * Get a single edge by ID\n */\nexport const get = query({\n args: { edgeId: v.id(\"epistemicEdges\") },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n return await ctx.db.get(args.edgeId);\n },\n});\n\n/**\n * Get an edge by its global UUID\n */\nexport const getByGlobalId = query({\n args: { globalId: v.string() },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n return await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", args.globalId))\n .first();\n },\n});\n\n/**\n * Get all edges FROM a specific node\n */\nexport const getFromNode = query({\n args: {\n fromNodeId: v.id(\"epistemicNodes\"),\n edgeType: v.optional(edgeTypeValidator),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const { edgeType } = args;\n if (edgeType) {\n return await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_type\", (q) =>\n q.eq(\"fromNodeId\", args.fromNodeId).eq(\"edgeType\", edgeType as any)\n )\n .collect();\n }\n\n return await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from\", (q) => q.eq(\"fromNodeId\", args.fromNodeId))\n .collect();\n },\n});\n\n/**\n * Get all edges TO a specific node\n */\nexport const getToNode = query({\n args: {\n toNodeId: v.id(\"epistemicNodes\"),\n edgeType: v.optional(edgeTypeValidator),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const { edgeType } = args;\n if (edgeType) {\n return await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", args.toNodeId).eq(\"edgeType\", edgeType as any)\n )\n .collect();\n }\n\n return await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q) => q.eq(\"toNodeId\", args.toNodeId))\n .collect();\n },\n});\n\n/**\n * Get edges pointing FROM a node (by any string ID - for backward compat)\n * This is a more flexible version of getFromNode that accepts any string ID\n *\n * Performance: Uses indexes where possible, falls back to globalId search only when needed\n */\nexport const getBySourceNode = query({\n args: {\n sourceNodeId: v.string(),\n edgeType: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // First, try to use the indexed query if it's a valid epistemicNodes ID\n const isConvexId =\n args.sourceNodeId.length === 32 ||\n args.sourceNodeId.includes(\"epistemicNodes\");\n\n if (isConvexId) {\n // Use indexed query for Convex IDs\n const query = args.edgeType\n ? ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_type\", (q) =>\n q\n .eq(\"fromNodeId\", args.sourceNodeId as Id<\"epistemicNodes\">)\n .eq(\"edgeType\", args.edgeType as any)\n )\n : ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from\", (q) =>\n q.eq(\"fromNodeId\", args.sourceNodeId as Id<\"epistemicNodes\">)\n );\n\n return await query.collect();\n }\n\n // For globalIds, use the sourceGlobalId index\n const byGlobalId = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_source_global_id\", (q) =>\n q.eq(\"sourceGlobalId\", args.sourceNodeId)\n )\n .collect();\n\n if (args.edgeType) {\n return byGlobalId.filter((edge) => edge.edgeType === args.edgeType);\n }\n return byGlobalId;\n },\n});\n\n/**\n * Get edges pointing TO a node (by any string ID - for backward compat)\n * This is a more flexible version of getToNode that accepts any string ID\n *\n * Performance: Uses indexes where possible, falls back to globalId search only when needed\n */\nexport const getByTargetNode = query({\n args: {\n targetNodeId: v.string(),\n edgeType: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // First, try to use the indexed query if it's a valid epistemicNodes ID\n const isConvexId =\n args.targetNodeId.length === 32 ||\n args.targetNodeId.includes(\"epistemicNodes\");\n\n if (isConvexId) {\n // Use indexed query for Convex IDs\n const query = args.edgeType\n ? ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q\n .eq(\"toNodeId\", args.targetNodeId as Id<\"epistemicNodes\">)\n .eq(\"edgeType\", args.edgeType as any)\n )\n : ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q) =>\n q.eq(\"toNodeId\", args.targetNodeId as Id<\"epistemicNodes\">)\n );\n\n return await query.collect();\n }\n\n // For globalIds, use the targetGlobalId index\n const byGlobalId = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_target_global_id\", (q) =>\n q.eq(\"targetGlobalId\", args.targetNodeId)\n )\n .collect();\n\n if (args.edgeType) {\n return byGlobalId.filter((edge) => edge.edgeType === args.edgeType);\n }\n return byGlobalId;\n },\n});\n\n/**\n * Get edge between two specific nodes (returns array)\n */\nexport const getBetween = query({\n args: {\n fromNodeId: v.id(\"epistemicNodes\"),\n toNodeId: v.id(\"epistemicNodes\"),\n edgeType: v.optional(edgeTypeValidator),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", args.fromNodeId).eq(\"toNodeId\", args.toNodeId)\n )\n .collect();\n\n if (args.edgeType) {\n return edges.filter((e) => e.edgeType === args.edgeType);\n }\n\n return edges;\n },\n});\n\n/**\n * Get first edge between two specific nodes (returns single edge or null)\n * Used by findEvidencePath for direct edge checking\n */\nexport const getByNodes = query({\n args: {\n fromNodeId: v.id(\"epistemicNodes\"),\n toNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n return await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", args.fromNodeId).eq(\"toNodeId\", args.toNodeId)\n )\n .first();\n },\n});\n\n/**\n * Get all edges of a specific type for a project\n */\nexport const getByProjectAndType = query({\n args: {\n ...optionalScopeArgs,\n edgeType: edgeTypeValidator,\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId && !args.topicId) {\n return [];\n }\n\n let scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>;\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch {\n return [];\n }\n\n const projectEdges = await collectScopedEdges(ctx, scope, 5000);\n\n return projectEdges\n .filter(\n (e) =>\n e.edgeType === args.edgeType &&\n edgeMatchesWorkspaceReasoningScope(e, scope)\n )\n .slice(0, 5000);\n },\n});\n\n/**\n * Get all edges for a project\n */\nexport const getByProject = query({\n args: {\n ...optionalScopeArgs,\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId && !args.topicId) {\n return [];\n }\n\n let scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>;\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch {\n return [];\n }\n\n // userId is optional — if not provided, skip access check (internal/dev callers)\n if (args.userId) {\n const hasAccess = await checkScopeAccess(\n ctx,\n String(scope.topicId ?? scope.projectId),\n args.userId\n );\n if (!hasAccess) {\n return [];\n }\n }\n const pageSize = Math.max(1, Math.min(Math.floor(args.limit ?? 500), 2000));\n\n const edges = await collectScopedEdges(ctx, scope, Math.min(pageSize * 3, 6000));\n return edges\n .filter((edge) => edgeMatchesWorkspaceReasoningScope(edge, scope))\n .slice(0, pageSize);\n },\n});\n\nexport const getByTopic = getByProject;\n\ntype WorkspaceEdgeScope = Awaited<ReturnType<typeof resolveTopicProjectScope>>;\ntype WorkspaceScopedEdge = {\n _id: Id<\"epistemicEdges\">;\n topicId?: Id<\"topics\">;\n projectId?: string;\n edgeType: string;\n};\n\nfunction dedupeWorkspaceEdges<T extends { _id: unknown }>(edges: T[]): T[] {\n const seen = new Set<string>();\n const deduped: T[] = [];\n\n for (const edge of edges) {\n const key = String(edge._id);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n deduped.push(edge);\n }\n\n return deduped;\n}\n\nfunction edgeMatchesWorkspaceReasoningScope(\n edge: Pick<WorkspaceScopedEdge, \"topicId\" | \"projectId\">,\n scope: WorkspaceEdgeScope\n): boolean {\n return (\n (scope.topicId !== undefined && edge.topicId === scope.topicId) ||\n (scope.projectId !== undefined && edge.projectId === scope.projectId)\n );\n}\n\nasync function collectScopedEdges(\n ctx: Parameters<typeof checkScopeAccess>[0],\n scope: WorkspaceEdgeScope,\n scanLimit: number\n): Promise<WorkspaceScopedEdge[]> {\n const queries: Promise<WorkspaceScopedEdge[]>[] = [];\n\n if (scope.topicId) {\n queries.push(\n ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_topic\", (q: any) => q.eq(\"topicId\", scope.topicId))\n .order(\"desc\")\n .take(scanLimit) as Promise<WorkspaceScopedEdge[]>\n );\n }\n\n // Kernel v2: also check edges scoped to projectId (many edges still have\n // topicId=s97 scope while UI passes projectId=n97). Query both to catch all.\n if (scope.projectId) {\n queries.push(\n ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_topic\", (q: any) => q.eq(\"topicId\", scope.projectId))\n .order(\"desc\")\n .take(scanLimit) as Promise<WorkspaceScopedEdge[]>\n );\n }\n\n return dedupeWorkspaceEdges((await Promise.all(queries)).flat());\n}\n\n/**\n * List all edges (unscoped — for internal dev tools).\n * No project filtering, no access control.\n */\nexport const listAll = query({\n args: {\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = Math.max(\n 1,\n Math.min(Math.floor(args.limit ?? 5000), 10_000)\n );\n return await ctx.db.query(\"epistemicEdges\").order(\"desc\").take(pageSize);\n },\n});\n\n/**\n * Find contradictions: evidence that contradicts a belief (informs with weight < 0)\n * Note: Legacy 'contradicts' edges have been migrated to 'informs' with negative weight\n */\nexport const findContradictions = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", args.nodeId).eq(\"edgeType\", \"informs\")\n )\n .collect();\n // Filter for negative weight (contradicting evidence)\n return edges.filter((e) => (e.weight ?? 0) < 0);\n },\n});\n\n/**\n * Find supporting evidence for a node (informs with weight >= 0)\n * Note: Legacy 'supports' edges have been migrated to 'informs' with positive weight\n */\nexport const findSupport = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", args.nodeId).eq(\"edgeType\", \"informs\")\n )\n .collect();\n // Filter for non-negative weight (supporting evidence)\n return edges.filter((e) => (e.weight ?? 0) >= 0);\n },\n});\n\n// =============================================================================\n// MUTATIONS\n// =============================================================================\n\n/**\n * Create a new edge\n *\n * Phase 2C: Validates layer rules before creation and stores layer metadata\n */\nexport const create = mutation({\n args: {\n globalId: v.string(),\n fromNodeId: v.id(\"epistemicNodes\"),\n toNodeId: v.id(\"epistemicNodes\"),\n edgeType: edgeTypeValidator,\n weight: v.optional(v.number()),\n confidence: v.optional(v.number()),\n context: v.optional(v.string()),\n // NOTE: 'relation' field has been removed. Use 'weight' instead.\n derivationType: v.optional(v.string()), // For derived_from edges\n createdBy: v.string(),\n ...optionalScopeArgs,\n // Phase 2C: Allow skipping validation for migrations\n skipLayerValidation: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // Verify both nodes exist\n const fromNode = await ctx.db.get(args.fromNodeId);\n const toNode = await ctx.db.get(args.toNodeId);\n\n if (!fromNode || !toNode) {\n throw new Error(\"One or both nodes not found\");\n }\n\n const resolvedScope =\n args.topicId || args.projectId\n ? await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n })\n : undefined;\n const resolvedProjectId = resolvedScope?.projectId ?? args.projectId;\n\n // Access control\n if (resolvedProjectId) {\n await requireProjectAccess(ctx, resolvedProjectId, args.createdBy);\n }\n\n // Phase 2C: Get layers (use stored or derive from nodeType)\n const fromLayer =\n fromNode.epistemicLayer || getNodeLayer(fromNode.nodeType);\n const toLayer = toNode.epistemicLayer || getNodeLayer(toNode.nodeType);\n\n // Phase 2C: Validate layer rules (unless explicitly skipped for migrations)\n if (!args.skipLayerValidation) {\n const validation = validateEdgeLayers(args.edgeType, fromLayer, toLayer);\n if (!validation.valid) {\n throw new Error(\n `[EdgeValidation] Invalid edge: ${validation.reason}. ` +\n `Attempted: ${args.edgeType} from ${fromNode.nodeType}(${fromLayer}) → ${toNode.nodeType}(${toLayer})`\n );\n }\n }\n\n // Phase 2C: Block removed edge types\n if (isDeprecatedEdgeType(args.edgeType)) {\n throw new Error(\n `FORBIDDEN: Edge type '${args.edgeType}' has been removed from StackOS schema.`\n );\n }\n\n // Check for duplicate edge\n const existing = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", args.fromNodeId).eq(\"toNodeId\", args.toNodeId)\n )\n .collect();\n\n const duplicateEdge = existing.find((e) => e.edgeType === args.edgeType);\n if (duplicateEdge) {\n // Return existing edge ID - caller can decide to update or error\n return { edgeId: duplicateEdge._id, isDuplicate: true };\n }\n\n // Phase 1 (Graph Architecture): Write to Neo4j directly - Neo4j is source of truth\n // The Convex epistemicEdges table is being deprecated in favor of Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: args.globalId,\n fromGlobalId: fromNode.globalId,\n toGlobalId: toNode.globalId,\n edgeType: args.edgeType,\n weight: args.weight,\n confidence: args.confidence,\n context: args.context,\n derivationType: args.derivationType,\n createdBy: args.createdBy,\n topicId: resolvedProjectId ? String(resolvedProjectId) : undefined,\n fromNodeType: fromNode.nodeType,\n toNodeType: toNode.nodeType,\n fromLayer,\n toLayer,\n });\n\n // Audit log\n const auditProjectId = resolvedProjectId || fromNode.projectId;\n if (auditProjectId) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: args.globalId,\n changeType: \"edge_added\",\n changedAt: Date.now(),\n changedBy: args.createdBy,\n isAgent: false,\n newState: {\n edgeType: args.edgeType,\n fromNodeId: String(args.fromNodeId),\n toNodeId: String(args.toNodeId),\n weight: args.weight,\n },\n projectId: auditProjectId,\n });\n\n // Update project activity timestamp for delta-based cron gating\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n auditProjectId,\n {\n lastActivityAt: Date.now(),\n }\n );\n }\n\n // Return globalId since we no longer have a Convex edgeId\n return { edgeGlobalId: args.globalId, isDuplicate: false };\n },\n});\n\n/**\n * Update an edge's properties\n */\nexport const update = mutation({\n args: {\n edgeId: v.id(\"epistemicEdges\"),\n weight: v.optional(v.number()),\n confidence: v.optional(v.number()),\n context: v.optional(v.string()),\n // NOTE: 'relation' field has been removed. Use 'weight' instead.\n derivationType: v.optional(v.string()),\n userId: v.optional(v.string()),\n // EK-4: SL opinion metadata (Kernel v2 schema fields)\n constraint: v.optional(v.string()),\n propagation: v.optional(v.string()),\n blocking: v.optional(v.boolean()),\n implicit: v.optional(v.boolean()),\n conditionalA: v.optional(subjectiveOpinionValidator),\n conditionalNotA: v.optional(subjectiveOpinionValidator),\n containment: v.optional(v.string()),\n interrogation: v.optional(v.string()),\n reasoningMethod: v.optional(v.string()),\n analogyBasis: v.optional(v.string()),\n disanalogies: v.optional(v.array(v.string())),\n analogyStrength: v.optional(v.number()),\n causal: v.optional(v.boolean()),\n predictionFulfilled: v.optional(v.boolean()),\n predictionFulfilledAt: v.optional(v.number()),\n predictionFulfilledBy: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const { edgeId, userId, ...updates } = args;\n\n const edge = await ctx.db.get(edgeId);\n if (!edge) {\n throw new Error(\"Edge not found\");\n }\n\n // Access control\n if (edge.projectId && userId) {\n await requireProjectAccess(ctx, edge.projectId, userId);\n }\n\n // Remove undefined values\n const cleanUpdates: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(updates)) {\n if (value !== undefined) {\n cleanUpdates[key] = value;\n }\n }\n\n await ctx.db.patch(edgeId, cleanUpdates);\n\n // Audit log\n if (edge.projectId) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edge.globalId,\n changeType: \"updated\",\n changedAt: Date.now(),\n changedBy: userId || edge.createdBy,\n isAgent: false,\n previousState: {\n weight: edge.weight,\n confidence: edge.confidence,\n context: edge.context,\n },\n newState: cleanUpdates,\n projectId: edge.projectId,\n });\n }\n\n return { success: true };\n },\n});\n\n/**\n * Delete an edge\n */\nexport const remove = mutation({\n args: {\n edgeId: v.id(\"epistemicEdges\"),\n userId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const edge = await ctx.db.get(args.edgeId);\n if (!edge) {\n return { success: false, error: \"Edge not found\" };\n }\n\n // Access control\n if (edge.projectId && args.userId) {\n await requireProjectAccess(ctx, edge.projectId, args.userId);\n }\n\n // Audit log before deletion\n if (edge.projectId) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edge.globalId,\n changeType: \"edge_removed\",\n changedAt: Date.now(),\n changedBy: args.userId || edge.createdBy,\n isAgent: false,\n previousState: {\n edgeType: edge.edgeType,\n fromNodeId: String(edge.fromNodeId),\n toNodeId: edge.toNodeId ? String(edge.toNodeId) : undefined,\n weight: edge.weight,\n },\n projectId: edge.projectId,\n });\n }\n\n // Update project activity timestamp for delta-based cron gating\n if (edge.projectId) {\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n edge.projectId,\n {\n lastActivityAt: Date.now(),\n }\n );\n }\n\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(args.edgeId);\n return { success: true };\n },\n});\n\n/**\n * Delete all edges between two nodes\n */\nexport const removeBetween = mutation({\n args: {\n fromNodeId: v.id(\"epistemicNodes\"),\n toNodeId: v.id(\"epistemicNodes\"),\n edgeType: v.optional(edgeTypeValidator),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", args.fromNodeId).eq(\"toNodeId\", args.toNodeId)\n )\n .collect();\n\n let deleted = 0;\n for (const edge of edges) {\n if (!args.edgeType || edge.edgeType === args.edgeType) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n deleted++;\n }\n }\n\n return { deleted };\n },\n});\n\n/**\n * Batch create edges (for migrations or bulk operations)\n *\n * Phase 2C: Validates layer rules and stores layer metadata\n */\nexport const batchCreate = mutation({\n args: {\n edges: v.array(\n v.object({\n globalId: v.string(),\n fromNodeId: v.id(\"epistemicNodes\"),\n toNodeId: v.id(\"epistemicNodes\"),\n edgeType: edgeTypeValidator,\n weight: v.optional(v.number()),\n confidence: v.optional(v.number()),\n context: v.optional(v.string()),\n // NOTE: 'relation' field has been removed. Use 'weight' instead.\n derivationType: v.optional(v.string()),\n createdBy: v.string(),\n ...optionalScopeArgs,\n })\n ),\n // Phase 2C: Allow skipping validation for migrations\n skipLayerValidation: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const results: Array<{ globalId: string; edgeGlobalId: string }> = [];\n const errors: Array<{ globalId: string; error: string }> = [];\n\n for (const edge of args.edges) {\n // Get node types for denormalization\n const fromNode = await ctx.db.get(edge.fromNodeId);\n const toNode = await ctx.db.get(edge.toNodeId);\n\n if (!fromNode || !toNode) {\n errors.push({\n globalId: edge.globalId,\n error: \"One or both nodes not found\",\n });\n continue;\n }\n\n // Phase 2C: Get layers\n const fromLayer =\n fromNode.epistemicLayer || getNodeLayer(fromNode.nodeType);\n const toLayer = toNode.epistemicLayer || getNodeLayer(toNode.nodeType);\n\n // Phase 2C: Validate layer rules (unless explicitly skipped)\n if (!args.skipLayerValidation) {\n const validation = validateEdgeLayers(\n edge.edgeType,\n fromLayer,\n toLayer\n );\n if (!validation.valid) {\n errors.push({\n globalId: edge.globalId,\n error: validation.reason || \"Invalid layer combination\",\n });\n continue;\n }\n }\n\n // Phase 2C: Block removed edge types\n if (isDeprecatedEdgeType(edge.edgeType)) {\n errors.push({\n globalId: edge.globalId,\n error: `FORBIDDEN: Edge type '${edge.edgeType}' has been removed from StackOS schema.`,\n });\n continue;\n }\n\n // Phase 1 (Graph Architecture): Write to Neo4j directly - Neo4j is source of truth\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edge.globalId,\n fromGlobalId: fromNode.globalId,\n toGlobalId: toNode.globalId,\n edgeType: edge.edgeType,\n weight: edge.weight,\n confidence: edge.confidence,\n context: edge.context,\n derivationType: edge.derivationType,\n createdBy: edge.createdBy,\n topicId: edge.projectId ? String(edge.projectId) : undefined,\n fromNodeType: fromNode.nodeType,\n toNodeType: toNode.nodeType,\n fromLayer,\n toLayer,\n });\n\n results.push({ globalId: edge.globalId, edgeGlobalId: edge.globalId });\n }\n\n // Update project activity timestamp for delta-based cron gating\n const projectIds = new Set<string>(\n args.edges.flatMap((edge) =>\n typeof edge.projectId === \"string\" ? [edge.projectId] : []\n )\n );\n for (const pid of projectIds) {\n if (pid) {\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(ctx, pid, {\n lastActivityAt: Date.now(),\n });\n }\n }\n\n return { created: results.length, results, errors };\n },\n});\n\n// =============================================================================\n// TRAVERSAL HELPERS\n// =============================================================================\n\n/**\n * Get the full lineage chain for a node (what it was derived from)\n * Traverses extracted_from and derived_from edges backwards to find sources.\n *\n * Phase 2D: Now supports layer-aware traversal with minLayer/maxLayer constraints\n *\n * Edge semantics:\n * - `Evidence -extracted_from-> Source` means Evidence was extracted from Source\n * - To find lineage, we query edges where current node is fromNodeId (the derived node)\n * and follow toNodeId to find the source/parent nodes\n */\nexport const getLineage = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n maxDepth: v.optional(v.number()),\n // Phase 2D: Layer-aware traversal options\n minLayer: v.optional(v.number()), // 1=L1, 2=L2, 3=L3, 4=L4\n maxLayer: v.optional(v.number()),\n mode: v.optional(\n v.union(\n v.literal(\"anchor_down\"),\n v.literal(\"anchor_up\"),\n v.literal(\"same_layer\"),\n v.literal(\"decision_trace\")\n )\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const maxDepth = args.maxDepth ?? 10;\n const mode: TraversalMode = args.mode ?? \"anchor_down\";\n const minLayer = args.minLayer ?? getDefaultMinLayer(mode);\n const maxLayer = args.maxLayer ?? 4;\n\n const lineage: Array<{\n node: NonNullable<Awaited<ReturnType<typeof ctx.db.get>>>;\n depth: number;\n edgeType: string;\n layer: string; // Phase 2D: Include layer info\n }> = [];\n\n const visited = new Set<string>();\n\n // Get the starting node to check its layer\n const startNode = await ctx.db.get(args.nodeId);\n if (!startNode) {\n return lineage;\n }\n\n const startLayer =\n startNode.epistemicLayer || getNodeLayer(startNode.nodeType);\n\n const queue: Array<{\n nodeId: Id<\"epistemicNodes\">;\n depth: number;\n currentLayer: string;\n }> = [{ nodeId: args.nodeId, depth: 0, currentLayer: startLayer }];\n\n while (queue.length > 0) {\n const current = queue.shift();\n if (!current || current.depth >= maxDepth) {\n continue;\n }\n\n const nodeIdStr = current.nodeId.toString();\n if (visited.has(nodeIdStr)) {\n continue;\n }\n visited.add(nodeIdStr);\n\n // Find edges where this node is the \"from\" (derived/child node)\n // For edges like `Evidence -extracted_from-> Source`, we find Source as the parent\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from\", (q) => q.eq(\"fromNodeId\", current.nodeId))\n .collect();\n\n // Filter to lineage-type edges (relationships that indicate provenance)\n const lineageEdges = edges.filter(\n (e) => e.edgeType === \"derived_from\"\n );\n\n for (const edge of lineageEdges) {\n if (!edge.toNodeId) {\n continue;\n }\n const targetNode = await ctx.db.get(edge.toNodeId);\n if (!targetNode || visited.has(edge.toNodeId.toString())) {\n continue;\n }\n\n const targetLayer =\n edge.toLayer ||\n (targetNode as any).epistemicLayer ||\n getNodeLayer((targetNode as any).nodeType);\n\n // Phase 2D: Check layer constraints before traversing\n const shouldContinue = shouldContinueTraversal(\n current.currentLayer as \"L1\" | \"L2\" | \"L3\" | \"L4\" | \"ontological\",\n targetLayer as \"L1\" | \"L2\" | \"L3\" | \"L4\" | \"ontological\",\n { mode, minLayer, maxLayer }\n );\n\n if (!shouldContinue) {\n continue; // Skip this edge due to layer constraints\n }\n\n lineage.push({\n node: targetNode,\n depth: current.depth + 1,\n edgeType: edge.edgeType,\n layer: targetLayer,\n });\n queue.push({\n nodeId: edge.toNodeId,\n depth: current.depth + 1,\n currentLayer: targetLayer,\n });\n }\n }\n\n return lineage;\n },\n});\n\n/**\n * Get all evidence supporting or contradicting a belief\n * Returns structured data for UI display\n * Note: Legacy 'supports'/'contradicts' edges have been migrated to 'informs' with weight\n */\nexport const getEvidenceForBelief = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // Get all informs edges to this belief\n const informsEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", args.beliefNodeId).eq(\"edgeType\", \"informs\")\n )\n .collect();\n\n // Separate by weight\n const supportEdges = informsEdges.filter((e) => (e.weight ?? 0) >= 0);\n const contradictEdges = informsEdges.filter((e) => (e.weight ?? 0) < 0);\n\n // Fetch the actual evidence nodes\n const supportingEvidence = await Promise.all(\n supportEdges.map(async (edge) => ({\n edge,\n node: await ctx.db.get(edge.fromNodeId),\n }))\n );\n\n const contradictingEvidence = await Promise.all(\n contradictEdges.map(async (edge) => ({\n edge,\n node: await ctx.db.get(edge.fromNodeId),\n }))\n );\n\n // Filter out null nodes (deleted or missing references)\n const filteredSupporting = supportingEvidence.filter(\n (e) => e.node !== null\n );\n const filteredContradicting = contradictingEvidence.filter(\n (e) => e.node !== null\n );\n\n return {\n supporting: filteredSupporting,\n contradicting: filteredContradicting,\n supportCount: filteredSupporting.length,\n contradictCount: filteredContradicting.length,\n };\n },\n});\n\n/**\n * Cleanup deprecated edge types from the graph.\n *\n * These edge types were created by the old `createBeliefRelationship` tool\n * before we standardized on `createBeliefConditional` with the 9 proper types.\n *\n * Deprecated types: old generic edges superseded by canonical 6\n */\nexport const cleanupDeprecatedEdges = mutation({\n args: {\n ...optionalScopeArgs,\n dryRun: v.optional(v.boolean()), // If true, just reports what would be deleted\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const DEPRECATED_TYPES = [\n \"contradicts\", // Old generic contradict edge (use weight: -1 on informs)\n ];\n\n // Find all deprecated edges in the project (kernel v2: by_project removed)\n const scopeId = args.topicId || args.projectId;\n const allEdges = scopeId\n ? await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_topic\", (q: any) => q.eq(\"topicId\", scopeId))\n .collect()\n : [];\n\n const deprecatedEdges = allEdges.filter((edge) =>\n DEPRECATED_TYPES.includes(edge.edgeType)\n );\n\n if (args.dryRun) {\n return {\n dryRun: true,\n found: deprecatedEdges.length,\n edges: deprecatedEdges.map((e) => ({\n id: e._id,\n type: e.edgeType,\n from: e.fromNodeId,\n to: e.toNodeId,\n description:\n (e as any).context?.description || (e as any).description,\n })),\n message: `Would delete ${deprecatedEdges.length} deprecated edges`,\n };\n }\n\n // Actually delete them via Neo4j authority path\n for (const edge of deprecatedEdges) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n }\n\n return {\n dryRun: false,\n deleted: deprecatedEdges.length,\n edges: deprecatedEdges.map((e) => ({\n id: e._id,\n type: e.edgeType,\n })),\n message: `Deleted ${deprecatedEdges.length} deprecated edges`,\n };\n },\n});\n\n/**\n * Delete specific edges by ID (for manual cleanup)\n */\nexport const deleteEdges = mutation({\n args: {\n edgeIds: v.array(v.id(\"epistemicEdges\")),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const deleted: string[] = [];\n const notFound: string[] = [];\n\n for (const edgeId of args.edgeIds) {\n const edge = await ctx.db.get(edgeId);\n if (edge) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edgeId);\n deleted.push(edgeId);\n } else {\n notFound.push(edgeId);\n }\n }\n\n return {\n deleted: deleted.length,\n notFound: notFound.length,\n message: `Deleted ${deleted.length} edges, ${notFound.length} not found`,\n };\n },\n});\n\n/**\n * Get all edges between a set of belief IDs (for belief cluster visualization)\n * Returns edges where both source and target are in the provided belief IDs\n */\nexport const getClusterEdges = query({\n args: {\n beliefIds: v.array(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (args.beliefIds.length === 0) {\n return [];\n }\n\n const beliefIdSet = new Set(args.beliefIds);\n\n // Get all edges and filter to those within the cluster\n // This is a scan but necessary for flexible matching\n const allEdges = await ctx.db.query(\"epistemicEdges\").collect();\n\n return allEdges.filter((edge) => {\n // Check if both endpoints are in the belief cluster\n const fromInCluster =\n beliefIdSet.has(String(edge.fromNodeId)) ||\n (edge.sourceGlobalId && beliefIdSet.has(edge.sourceGlobalId));\n const toInCluster =\n beliefIdSet.has(String(edge.toNodeId)) ||\n (edge.targetGlobalId && beliefIdSet.has(edge.targetGlobalId));\n\n return fromInCluster && toInCluster;\n });\n },\n});\n\n// =============================================================================\n// INTERNAL MUTATIONS FOR NEO4J DUAL-WRITE\n// These are called from neo4jEdgeAPI.ts (Node.js runtime) to maintain Convex mirror\n// =============================================================================\n\n/**\n * Internal mutation to mirror a Neo4j edge to Convex for reactive UI.\n * Called by createEdge action for edge types that need reactive UI updates.\n *\n * This does NOT replace Neo4j as source of truth - it's a read-optimized mirror\n * for Convex reactive queries used by UI components.\n */\nexport const mirrorEdgeToConvex = internalMutation({\n args: {\n globalId: v.string(),\n fromGlobalId: v.string(),\n toGlobalId: v.string(),\n edgeType: v.string(),\n weight: v.optional(v.number()),\n confidence: v.optional(v.number()),\n context: v.optional(v.string()),\n derivationType: v.optional(v.string()),\n createdBy: v.string(),\n ...optionalScopeArgs,\n fromLayer: v.optional(v.string()),\n toLayer: v.optional(v.string()),\n fromNodeType: v.optional(v.string()),\n toNodeType: v.optional(v.string()),\n // === CLASSIFICATION FIELDS ===\n reasoningMethod: v.optional(v.string()),\n logicalRole: v.optional(v.string()),\n temporalClass: v.optional(v.string()),\n validFrom: v.optional(v.number()),\n validUntil: v.optional(v.number()),\n constraint: v.optional(v.string()),\n propagation: v.optional(v.string()),\n blocking: v.optional(v.boolean()),\n implicit: v.optional(v.boolean()),\n conditionalA: v.optional(subjectiveOpinionValidator),\n conditionalNotA: v.optional(subjectiveOpinionValidator),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // Resolve source node globalId → Convex ID\n const fromNode = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", args.fromGlobalId))\n .first();\n\n if (!fromNode) {\n // Source node doesn't exist in Convex - skip mirror\n // This can happen for cross-graph edges (e.g., to Neo4j-only ontology nodes)\n console.log(\n `[Dual-Write] Skipping mirror - source node not in Convex: ${args.fromGlobalId}`\n );\n return { success: false, reason: \"source_not_in_convex\" };\n }\n\n // Resolve target node globalId → Convex ID (optional for cross-graph edges)\n const toNode = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", args.toGlobalId))\n .first();\n\n // Check if edge already exists (idempotency)\n const existing = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", args.globalId))\n .first();\n\n if (existing) {\n console.log(`[Dual-Write] Edge already exists: ${args.globalId}`);\n return { success: true, edgeId: existing._id, existed: true };\n }\n\n // Insert edge into Convex\n const now = Date.now();\n const edgeId = await ctx.db.insert(\"epistemicEdges\", {\n globalId: args.globalId,\n fromNodeId: fromNode._id,\n toNodeId: toNode?._id, // Optional - may be undefined for cross-graph edges\n sourceGlobalId: args.fromGlobalId,\n targetGlobalId: args.toGlobalId,\n // Cast through any because EdgeType may include types not yet in\n // Convex _generated types (deployed schema lags source schema).\n edgeType: args.edgeType as any,\n weight: args.weight,\n confidence: args.confidence,\n context: args.context,\n derivationType: args.derivationType,\n constraint: args.constraint as\n | \"xor\"\n | \"alternative\"\n | \"counterfactual\"\n | undefined,\n propagation: args.propagation as \"threshold\" | \"continuous\" | undefined,\n blocking: args.blocking,\n implicit: args.implicit,\n conditionalA: args.conditionalA,\n conditionalNotA: args.conditionalNotA,\n createdBy: args.createdBy,\n createdAt: now,\n updatedAt: now,\n topicId: args.projectId as string | undefined,\n fromLayer: args.fromLayer as\n | \"L4\"\n | \"L3\"\n | \"L2\"\n | \"L1\"\n | \"ontological\"\n | undefined,\n toLayer: args.toLayer as\n | \"L4\"\n | \"L3\"\n | \"L2\"\n | \"L1\"\n | \"ontological\"\n | undefined,\n fromNodeType: args.fromNodeType,\n toNodeType: args.toNodeType,\n // Classification fields\n reasoningMethod: args.reasoningMethod as\n | \"deductive\"\n | \"causal\"\n | \"inductive\"\n | \"abductive\"\n | \"statistical\"\n | \"analogical\"\n | \"correlational\"\n | \"testimonial\"\n | \"implicit\"\n | \"pattern_match\"\n | undefined,\n logicalRole: args.logicalRole as\n | \"necessary\"\n | \"sufficient\"\n | \"necessary_sufficient\"\n | \"contributory\"\n | \"corroborative\"\n | undefined,\n temporalClass: args.temporalClass as\n | \"structural\"\n | \"cyclical\"\n | \"transient\"\n | \"point_in_time\"\n | undefined,\n validFrom: args.validFrom,\n validUntil: args.validUntil,\n });\n\n console.log(\n `[Dual-Write] Mirrored edge to Convex: ${args.globalId} (${args.edgeType})`\n );\n return { success: true, edgeId, existed: false };\n },\n});\n\n/**\n * Internal mutation to delete a mirrored edge from Convex.\n * Called by deleteEdge action to maintain Convex mirror consistency.\n */\nexport const deleteEdgeFromConvex = internalMutation({\n args: {\n globalId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const existing = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", args.globalId))\n .first();\n\n if (!existing) {\n return { success: false, reason: \"not_found\" };\n }\n\n await ctx.db.delete(existing._id);\n console.log(`[Dual-Write] Deleted edge from Convex: ${args.globalId}`);\n return { success: true };\n },\n});\n\n/**\n * Internal mutation to update a mirrored edge in Convex.\n * Called by updateEdge action to maintain Convex mirror consistency.\n */\nexport const updateEdgeInConvex = internalMutation({\n args: {\n globalId: v.string(),\n weight: v.optional(v.number()),\n confidence: v.optional(v.number()),\n context: v.optional(v.string()),\n derivationType: v.optional(v.string()),\n constraint: v.optional(v.string()),\n propagation: v.optional(v.string()),\n blocking: v.optional(v.boolean()),\n implicit: v.optional(v.boolean()),\n conditionalA: v.optional(subjectiveOpinionValidator),\n conditionalNotA: v.optional(subjectiveOpinionValidator),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const existing = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", args.globalId))\n .first();\n\n if (!existing) {\n return { success: false, reason: \"not_found\" };\n }\n\n const updates: Record<string, unknown> = {\n updatedAt: Date.now(),\n };\n\n if (args.weight !== undefined) {\n updates.weight = args.weight;\n }\n if (args.confidence !== undefined) {\n updates.confidence = args.confidence;\n }\n if (args.context !== undefined) {\n updates.context = args.context;\n }\n if (args.derivationType !== undefined) {\n updates.derivationType = args.derivationType;\n }\n if (args.constraint !== undefined) {\n updates.constraint = args.constraint;\n }\n if (args.propagation !== undefined) {\n updates.propagation = args.propagation;\n }\n if (args.blocking !== undefined) {\n updates.blocking = args.blocking;\n }\n if (args.implicit !== undefined) {\n updates.implicit = args.implicit;\n }\n if (args.conditionalA !== undefined) {\n updates.conditionalA = args.conditionalA;\n }\n if (args.conditionalNotA !== undefined) {\n updates.conditionalNotA = args.conditionalNotA;\n }\n\n await ctx.db.patch(existing._id, updates);\n console.log(`[Dual-Write] Updated edge in Convex: ${args.globalId}`);\n\n return { success: true };\n },\n});\n","/**\n * Epistemic Evidence API\n *\n * Clean API for managing evidence/insights in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces insights.ts for CREATE operations.\n *\n * Key differences from insights.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyInsightId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * Terminology:\n * - \"Evidence\" in the epistemic graph = \"Insight\" in the legacy schema\n * - Evidence is at L2 (Compression Boundary) in the Lucern architecture\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { v } from \"convex/values\";\nimport {\n checkScopeAccess,\n checkProjectAccess,\n requireProjectAccess,\n} from \"@lucern/access-control/access\";\nimport {\n canAudienceClassAccess,\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { listAudienceRegistryRows } from \"@lucern/access-control/audienceRegistry\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\nimport type { Doc, Id } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { generateGlobalId } from \"./globalId\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n nodeMatchesWorkspaceReasoningScope,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction generateContentHash(text: string): string {\n const content = `evidence:${text.trim().toLowerCase().replace(/\\s+/g, \" \").slice(0, 500)}`;\n let hash = 5381;\n for (let i = 0; i < content.length; i++) {\n hash = (hash << 5) + hash + content.charCodeAt(i);\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\n// Valid evidence kinds\ntype EvidenceKind =\n | \"fact\"\n | \"observation\"\n | \"claim\"\n | \"quote\"\n | \"statistic\"\n | \"signal\";\n\ntype AudienceClass = \"internal\" | \"restricted_external\" | \"public\";\n\nfunction normalizeKind(kind?: string): EvidenceKind {\n if (!kind) {\n return \"observation\";\n }\n const validKinds: EvidenceKind[] = [\n \"fact\",\n \"observation\",\n \"claim\",\n \"quote\",\n \"statistic\",\n \"signal\",\n ];\n return (validKinds.find((k) => kind.toLowerCase() === k) ||\n \"observation\") as EvidenceKind;\n}\n\n// Valid source types\ntype SourceType = \"proprietary\" | \"verified\" | \"ai_generated\";\n\nfunction normalizeSourceType(sourceType?: string): SourceType {\n if (sourceType === \"proprietary\" || sourceType === \"verified\") {\n return sourceType;\n }\n return \"ai_generated\";\n}\n\nasync function markProjectGraphDirty(\n ctx: any,\n projectId: string | undefined | null,\n topicId?: string | undefined | null\n): Promise<void> {\n const normalizedProjectId =\n typeof projectId === \"string\" && projectId.trim().length > 0\n ? projectId\n : undefined;\n const normalizedTopicId =\n typeof topicId === \"string\" && topicId.trim().length > 0\n ? topicId\n : undefined;\n\n if (!normalizedProjectId && !normalizedTopicId) {\n return;\n }\n\n if (normalizedProjectId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n {\n projectId: normalizedProjectId,\n }\n );\n }\n if (normalizedTopicId) {\n await ctx.scheduler.runAfter(\n 0,\n (internal.graphAnalysisCache as any).markCacheStaleByTopic,\n {\n topicId: normalizedTopicId,\n }\n );\n }\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n normalizedTopicId ?? normalizedProjectId!,\n {\n lastActivityAt: Date.now(),\n }\n );\n}\n\nfunction requireScopeId(...ids: (string | undefined)[]): string {\n for (const id of ids) {\n if (typeof id === \"string\" && id.trim().length > 0) return id;\n }\n throw new Error(\"No scope identifier provided (topicId or projectId required)\");\n}\n\nconst DEFAULT_EVIDENCE_PAGE_SIZE = 250;\nconst MAX_EVIDENCE_PAGE_SIZE = 1000;\nconst LEGACY_SPRINT_LINK_KEY = \"linked\" + \"SprintId\";\nconst optionalEvidenceScopeArgs = optionalScopeArgs;\ntype EvidenceScopeArgs = {\n projectId?: string | null;\n topicId?: string | null;\n};\n\nfunction clampEvidenceLimit(\n limit: number | undefined,\n fallback = DEFAULT_EVIDENCE_PAGE_SIZE\n): number {\n if (!Number.isFinite(limit)) {\n return fallback;\n }\n return Math.max(\n 1,\n Math.min(Math.floor(limit as number), MAX_EVIDENCE_PAGE_SIZE)\n );\n}\n\ntype EvidenceNodeDoc = Doc<\"epistemicNodes\">;\n\nfunction dedupeEvidenceNodes(nodes: EvidenceNodeDoc[]): EvidenceNodeDoc[] {\n const seen = new Set<string>();\n const deduped: EvidenceNodeDoc[] = [];\n for (const node of nodes) {\n const id = String(node._id);\n if (seen.has(id)) {\n continue;\n }\n seen.add(id);\n deduped.push(node);\n }\n return deduped;\n}\n\nfunction evidenceMatchesScope(\n node: Pick<EvidenceNodeDoc, \"topicId\" | \"projectId\">,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>\n): boolean {\n return (\n (scope.topicId !== undefined && node.topicId === scope.topicId) ||\n (scope.projectId !== undefined && node.projectId === scope.projectId)\n );\n}\n\nexport function resolveEvidenceLinkedWorktreeId(\n metadata: Record<string, unknown> | undefined\n): string | undefined {\n const worktreeId = metadata?.linkedWorktreeId;\n if (typeof worktreeId === \"string\" && worktreeId.trim().length > 0) {\n return worktreeId;\n }\n const sprintId = metadata?.[LEGACY_SPRINT_LINK_KEY];\n return typeof sprintId === \"string\" && sprintId.trim().length > 0\n ? sprintId\n : undefined;\n}\n\nasync function resolveEvidenceScopeOrNull(ctx: any, args: EvidenceScopeArgs) {\n if (!args.projectId && !args.topicId) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n projectId: args.projectId ?? undefined,\n topicId: args.topicId ?? undefined,\n });\n } catch {\n return null;\n }\n}\n\nasync function getEvidenceNodesForScope(\n ctx: any,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n args?: { scanLimit?: number }\n) {\n const scanLimit =\n typeof args?.scanLimit === \"number\" ? args.scanLimit : undefined;\n const [topicNodes, projectNodes] = await Promise.all([\n scope.topicId\n ? scanLimit\n ? ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: any) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"evidence\")\n )\n .order(\"desc\")\n .take(scanLimit)\n : ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: any) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"evidence\")\n )\n .collect()\n : Promise.resolve([]),\n scope.projectId\n ? scanLimit\n ? ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_project_type\", (q: any) =>\n q.eq(\"projectId\", scope.projectId).eq(\"nodeType\", \"evidence\")\n )\n .order(\"desc\")\n .take(scanLimit)\n : ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_project_type\", (q: any) =>\n q.eq(\"projectId\", scope.projectId).eq(\"nodeType\", \"evidence\")\n )\n .collect()\n : Promise.resolve([]),\n ]);\n\n return dedupeEvidenceNodes([...topicNodes, ...projectNodes]).filter((node) =>\n evidenceMatchesScope(node, scope)\n );\n}\n\nfunction createEvidenceAudienceResolver(\n registryRows: Array<{\n audienceKey?: string | null;\n audienceClass: AudienceClass;\n }>\n) {\n const audienceClassByKey = new Map<string, AudienceClass>(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ])\n );\n\n return (\n audienceKey: string | undefined | null,\n fallback: AudienceClass\n ): AudienceClass => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return (\n audienceClassByKey.get(key) ??\n (classFromAudienceKey(key, fallback) as AudienceClass)\n );\n };\n}\n\nexport function flattenEvidenceNode(n: EvidenceNodeDoc) {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n const linkedWorktreeId = resolveEvidenceLinkedWorktreeId(meta);\n return {\n ...n,\n text: n.canonicalText || \"\",\n title: n.title || \"\",\n kind: (meta.kind as string) || \"observation\",\n tags: (meta.tags as string[]) || [],\n sourceQuestionId: (meta.sourceQuestionId as string) || undefined,\n linkedBeliefId:\n (meta.linkedBeliefNodeId as string) ||\n (meta.linkedBeliefId as string) ||\n undefined,\n linkedWorktreeId,\n [LEGACY_SPRINT_LINK_KEY]:\n (meta[LEGACY_SPRINT_LINK_KEY] as string) || undefined,\n sprintIndex: (meta.sprintIndex as number) || undefined,\n externalSourceUrl: (meta.sourceUrl as string) || undefined,\n externalSourceType: (meta.externalSourceType as string) || undefined,\n };\n}\n\n// =============================================================================\n// CREATE\n// =============================================================================\n\n/**\n * Create new evidence in the epistemic spine.\n * Returns the epistemicNodes ID directly (not an insights ID).\n */\nexport const create = mutation({\n args: {\n ...optionalEvidenceScopeArgs,\n text: v.string(),\n title: v.optional(v.string()),\n content: v.optional(v.string()),\n contentType: v.optional(v.string()),\n kind: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n sourceType: v.optional(v.string()),\n externalSourceType: v.optional(v.string()),\n sourceUrl: v.optional(v.string()),\n sourceQuestionId: v.optional(v.string()),\n userId: v.string(),\n // Classification fields (from AI tools)\n methodology: v.optional(v.string()),\n informationAsymmetry: v.optional(v.string()),\n sourceDescription: v.optional(v.string()),\n metadata: v.optional(v.any()),\n // Optional linking to beliefs\n linkedBeliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n evidenceRelation: v.optional(\n v.union(v.literal(\"supports\"), v.literal(\"contradicts\"))\n ),\n confidence: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"evidence\",\n mutationName: \"epistemicEvidence.create\",\n });\n if (scope.projectId) {\n await requireProjectAccess(ctx, scope.projectId, args.userId);\n }\n\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.text);\n const kind = normalizeKind(args.kind);\n const sourceType = normalizeSourceType(args.sourceType);\n const additionalMetadata =\n args.metadata && typeof args.metadata === \"object\"\n ? (args.metadata as Record<string, unknown>)\n : {};\n\n // Create ONLY in epistemicNodes (no insights table!)\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"evidence\",\n canonicalText: args.text,\n contentHash,\n ...(typeof args.title === \"string\" && args.title.trim().length > 0\n ? { title: args.title.trim() }\n : {}),\n ...(typeof args.content === \"string\" && args.content.length > 0\n ? { content: args.content }\n : {}),\n ...(typeof args.contentType === \"string\" &&\n args.contentType.trim().length > 0\n ? { contentType: args.contentType.trim() }\n : {}),\n status: \"active\",\n epistemicLayer: \"L2\", // L2: Compression Boundary (Evidence/Claims)\n sourceType,\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n kind,\n tags: args.tags || [],\n externalSourceType: args.externalSourceType,\n sourceUrl: args.sourceUrl,\n sourceQuestionId: args.sourceQuestionId,\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n evidenceRelation: args.evidenceRelation,\n confidence: args.confidence,\n methodology: args.methodology,\n informationAsymmetry: args.informationAsymmetry,\n sourceDescription: args.sourceDescription,\n ...additionalMetadata,\n },\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Schedule embedding generation\n await scheduleEmbeddingGeneration({\n ctx, nodeId, projectId: scope.projectId, topicId: scope.topicId,\n createdBy: args.userId, nodeType: \"evidence\", text: args.text,\n });\n\n // If linked to a belief, create the edge in Neo4j with delay\n // to let node sync complete first (race condition prevention).\n if (args.linkedBeliefNodeId && args.evidenceRelation) {\n const beliefNode = await ctx.db.get(args.linkedBeliefNodeId);\n if (beliefNode) {\n const weight = args.evidenceRelation === \"supports\" ? 1.0 : -1.0;\n await ctx.scheduler.runAfter(5000, internal.neo4jEdgeAPI.createEdge, {\n globalId: crypto.randomUUID(),\n fromGlobalId: globalId,\n toGlobalId: beliefNode.globalId,\n edgeType: \"informs\",\n weight: weight * (args.confidence || 0.7),\n createdBy: args.userId,\n topicId: scope.projectId ? String(scope.projectId) : undefined,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n metadata: {\n relation: args.evidenceRelation,\n confidence: args.confidence,\n },\n });\n }\n }\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: scope.projectId,\n newState: {\n text: args.text.slice(0, 200),\n kind,\n sourceType,\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n evidenceRelation: args.evidenceRelation,\n },\n });\n\n // Schedule embedding generation for semantic search.\n // topicId alone is sufficient for Lucern deployments (no projects table).\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"evidence\" as const,\n text: args.text,\n }\n );\n }\n\n // ==========================================================================\n // ONTOLOGY: Schedule evidence classification for entity extraction\n // ==========================================================================\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 2000, // 2 second delay\n internal.nodeClassification.scheduleClassification,\n {\n nodeId,\n nodeType: \"evidence\",\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n await markProjectGraphDirty(ctx, scope.projectId, String(scope.topicId));\n\n return { nodeId };\n },\n});\n\n/**\n * Create evidence and link to a belief in one operation\n */\nexport const createAndLink = mutation({\n args: {\n ...optionalEvidenceScopeArgs,\n text: v.string(),\n kind: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n sourceType: v.optional(v.string()),\n userId: v.string(),\n beliefNodeId: v.id(\"epistemicNodes\"),\n relation: v.union(v.literal(\"supports\"), v.literal(\"contradicts\")),\n confidence: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n await requireProjectAccess(ctx, String(scope.topicId), args.userId);\n\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.text);\n const kind = normalizeKind(args.kind);\n const sourceType = normalizeSourceType(args.sourceType);\n const confidence = args.confidence ?? 0.7;\n\n // Create evidence node\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"evidence\",\n canonicalText: args.text,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L2\",\n sourceType,\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n kind,\n tags: args.tags || [],\n linkedBeliefNodeId: args.beliefNodeId,\n evidenceRelation: args.relation,\n confidence,\n },\n });\n\n // Schedule Neo4j node sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Create edge directly in Neo4j\n const beliefNode = await ctx.db.get(args.beliefNodeId);\n if (!beliefNode) {\n throw new Error(\"Belief node not found for edge creation\");\n }\n\n const weight = args.relation === \"supports\" ? confidence : -confidence;\n const edgeGlobalId = crypto.randomUUID();\n // Delay edge creation by 5s to let node sync complete first.\n await ctx.scheduler.runAfter(5000, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: globalId,\n toGlobalId: beliefNode.globalId,\n edgeType: \"informs\",\n weight,\n createdBy: args.userId,\n topicId: scope.projectId,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n metadata: {\n relation: args.relation,\n confidence,\n },\n });\n\n await markProjectGraphDirty(ctx, scope.projectId, String(scope.topicId));\n\n return { nodeId, edgeGlobalId };\n },\n});\n\n// =============================================================================\n// UPDATE\n// =============================================================================\n\n/**\n * Update evidence status\n */\nexport const updateStatus = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"archived\"),\n v.literal(\"acted_on\")\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"evidence\") {\n throw new Error(\"Evidence not found\");\n }\n\n const now = Date.now();\n\n await (ctx.db as any).patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n });\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: { status: node.status },\n newState: { status: args.status },\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { nodeId: args.nodeId };\n },\n});\n\n// =============================================================================\n// QUERIES\n// =============================================================================\n\n/**\n * Get evidence by ID\n */\nexport const getById = query({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n insightId: v.optional(v.string()),\n evidenceId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const id =\n args.nodeId ?? (args.insightId as any) ?? (args.evidenceId as any);\n if (!id) {\n return null;\n }\n const node = (await ctx.db.get(\n id as Id<\"epistemicNodes\">\n )) as Doc<\"epistemicNodes\"> | null;\n if (!node || node.nodeType !== \"evidence\") {\n return null;\n }\n return node;\n },\n});\n\n/**\n * Get all evidence for a project\n */\nexport const getByProject = query({\n args: {\n ...optionalEvidenceScopeArgs,\n status: v.optional(v.string()),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId && !args.topicId) {\n return [];\n }\n\n const pageSize = clampEvidenceLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_EVIDENCE_PAGE_SIZE);\n let scope:\n | Awaited<ReturnType<typeof resolveTopicProjectScope>>\n | {\n tenantId: undefined;\n workspaceId: undefined;\n topicId?: undefined;\n projectId?: undefined;\n };\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch {\n return [];\n }\n\n if (args.userId) {\n const scopeId = scope.topicId ? String(scope.topicId) : scope.projectId;\n if (!scopeId) {\n return [];\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n }\n\n const [topicNodes, projectNodes] = await Promise.all([\n scope.topicId\n ? ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: any) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"evidence\")\n )\n .order(\"desc\")\n .take(scanLimit)\n : Promise.resolve([]),\n scope.projectId\n ? ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_project_type\", (q) =>\n q.eq(\"projectId\", scope.projectId).eq(\"nodeType\", \"evidence\")\n )\n .order(\"desc\")\n .take(scanLimit)\n : Promise.resolve([]),\n ]);\n\n const scopedNodes = dedupeEvidenceNodes([\n ...topicNodes,\n ...projectNodes,\n ]).filter((node) => evidenceMatchesScope(node, scope));\n\n const filteredNodes = args.status\n ? scopedNodes.filter((node) => node.status === args.status)\n : scopedNodes;\n\n return filteredNodes.map(flattenEvidenceNode).slice(0, pageSize);\n },\n});\n\n/**\n * Get all evidence for a topic.\n */\nexport const getByTopic = query({\n args: {\n topicId: v.string(),\n status: v.optional(v.string()),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampEvidenceLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_EVIDENCE_PAGE_SIZE);\n const scope = await resolveTopicProjectScope(ctx, { topicId: args.topicId });\n const [topicNodes, projectNodes] = await Promise.all([\n ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"evidence\")\n )\n .order(\"desc\")\n .take(scanLimit),\n scope.projectId\n ? ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_project_type\", (q) =>\n q.eq(\"projectId\", scope.projectId).eq(\"nodeType\", \"evidence\")\n )\n .order(\"desc\")\n .take(scanLimit)\n : Promise.resolve([]),\n ]);\n\n const scopedNodes = dedupeEvidenceNodes([\n ...topicNodes,\n ...projectNodes,\n ]).filter((node) => evidenceMatchesScope(node, scope));\n\n const filteredNodes = args.status\n ? scopedNodes.filter((node) => node.status === args.status)\n : scopedNodes;\n\n return filteredNodes.map(flattenEvidenceNode).slice(0, pageSize);\n },\n});\n\n/**\n * Get evidence linked to a specific belief\n */\nexport const getForBelief = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // Find edges to the belief from evidence\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", args.beliefNodeId).eq(\"edgeType\", \"informs\")\n )\n .collect();\n\n // Get the evidence nodes\n const evidenceNodeIds = edges.map((e) => e.fromNodeId);\n const evidenceNodes = await Promise.all(\n evidenceNodeIds.map((id) => ctx.db.get(id))\n );\n\n // Combine with edge data\n return evidenceNodes\n .filter((e) => e !== null && e.nodeType === \"evidence\")\n .map((e, i) => ({\n ...e,\n relation: (edges[i]?.weight ?? 0) >= 0 ? \"supports\" : \"contradicts\",\n confidence: Math.abs(edges[i]?.weight ?? 0),\n edgeId: edges[i]?._id,\n }));\n },\n});\n\n// =============================================================================\n// INTERNAL QUERIES (for other Convex modules)\n// =============================================================================\n\n/**\n * Internal query to get evidence for a project\n */\nexport const internalGetByProject = internalQuery({\n args: {\n ...optionalEvidenceScopeArgs,\n status: v.optional(v.string()),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampEvidenceLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_EVIDENCE_PAGE_SIZE);\n const scope = await resolveEvidenceScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const audienceMode = args.audienceMode ?? \"internal\";\n const project = await resolveGraphPrimitivesAppResolvers(ctx).getProject(\n ctx,\n scope.topicId ? String(scope.topicId) : scope.projectId!\n );\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: project?.tenantId,\n workspaceId: project?.workspaceId,\n });\n const resolveAudienceClass = createEvidenceAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n const nodes = await getEvidenceNodesForScope(ctx, scope, { scanLimit });\n const workspaceScopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: project?.tenantId,\n workspaceId: project?.workspaceId,\n })\n );\n\n // Map to flattened format for internal callers\n return workspaceScopedNodes\n .filter(\n (n) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(n.audienceLabel, \"internal\")\n ) &&\n (!args.status || n.status === args.status)\n )\n .slice(0, pageSize)\n .map((n) => {\n const metadata = (n.metadata || {}) as Record<string, unknown>;\n return {\n _id: n._id,\n _creationTime: n.createdAt,\n projectId: n.projectId,\n topicId: n.topicId,\n text: n.canonicalText,\n kind: metadata.kind || \"observation\",\n tags: metadata.tags || [],\n sourceType: n.sourceType,\n externalSourceType: metadata.externalSourceType,\n sourceUrl: metadata.sourceUrl,\n status: n.status,\n createdBy: n.createdBy,\n createdAt: n.createdAt,\n updatedAt: n.updatedAt,\n audienceLabel: n.audienceLabel,\n policyTags: n.policyTags,\n sensitivityTier: n.sensitivityTier,\n exportClass: n.exportClass,\n anonymizationClass: n.anonymizationClass,\n };\n });\n },\n});\n\n/**\n * Internal query to get evidence for a topic\n */\nexport const internalGetByTopic = internalQuery({\n args: {\n topicId: v.string(),\n status: v.optional(v.string()),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampEvidenceLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_EVIDENCE_PAGE_SIZE);\n const audienceMode = args.audienceMode ?? \"internal\";\n const scope = await resolveTopicProjectScope(ctx, { topicId: args.topicId });\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n });\n const resolveAudienceClass = createEvidenceAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const nodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"evidence\")\n )\n .order(\"desc\")\n .take(scanLimit);\n const workspaceScopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n })\n );\n\n return workspaceScopedNodes\n .filter(\n (n) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(n.audienceLabel, \"internal\")\n ) &&\n (!args.status || n.status === args.status)\n )\n .slice(0, pageSize)\n .map((n) => {\n const metadata = (n.metadata || {}) as Record<string, unknown>;\n return {\n _id: n._id,\n _creationTime: n.createdAt,\n projectId: n.projectId,\n topicId: n.topicId,\n text: n.canonicalText,\n kind: metadata.kind || \"observation\",\n tags: metadata.tags || [],\n sourceType: n.sourceType,\n externalSourceType: metadata.externalSourceType,\n sourceUrl: metadata.sourceUrl,\n status: n.status,\n createdBy: n.createdBy,\n createdAt: n.createdAt,\n updatedAt: n.updatedAt,\n audienceLabel: n.audienceLabel,\n policyTags: n.policyTags,\n sensitivityTier: n.sensitivityTier,\n exportClass: n.exportClass,\n anonymizationClass: n.anonymizationClass,\n };\n });\n },\n});\n\n/**\n * Internal mutation to create evidence (for other Convex modules)\n */\nexport const internalCreate = internalMutation({\n args: {\n ...optionalEvidenceScopeArgs,\n text: v.string(),\n title: v.optional(v.string()),\n content: v.optional(v.string()),\n contentType: v.optional(v.string()),\n kind: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n sourceType: v.optional(v.string()),\n externalSourceType: v.optional(v.string()),\n sourceUrl: v.optional(v.string()),\n sourceQuestionId: v.optional(v.string()),\n userId: v.string(),\n linkedBeliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n evidenceRelation: v.optional(v.string()),\n confidence: v.optional(v.number()),\n /** Optional extra metadata fields merged into the node's metadata object.\n * Use for domain overlays like coding intelligence (codeAnchors, failedApproach, etc.) */\n metadata: v.optional(v.any()),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"evidence\",\n mutationName: \"epistemicEvidence.internalCreate\",\n });\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"evidence\",\n epistemicLayer: \"L2\",\n },\n mutationName: \"epistemicEvidence.internalCreate\",\n });\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.text);\n const kind = normalizeKind(args.kind);\n const sourceType = normalizeSourceType(args.sourceType);\n const additionalMetadata =\n args.metadata && typeof args.metadata === \"object\"\n ? (args.metadata as Record<string, unknown>)\n : {};\n\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"evidence\",\n canonicalText: args.text,\n contentHash,\n ...(typeof args.title === \"string\" && args.title.trim().length > 0\n ? { title: args.title.trim() }\n : {}),\n ...(typeof args.content === \"string\" && args.content.length > 0\n ? { content: args.content }\n : {}),\n ...(typeof args.contentType === \"string\" &&\n args.contentType.trim().length > 0\n ? { contentType: args.contentType.trim() }\n : {}),\n status: \"active\",\n epistemicLayer: \"L2\",\n sourceType,\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n kind,\n tags: args.tags || [],\n externalSourceType: args.externalSourceType,\n sourceUrl: args.sourceUrl,\n sourceQuestionId: args.sourceQuestionId,\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n evidenceRelation: args.evidenceRelation,\n confidence: args.confidence,\n ...additionalMetadata,\n },\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: String(nodeId),\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: scope.projectId,\n newState: {\n text: args.text.slice(0, 200),\n kind,\n sourceType,\n externalSourceType: args.externalSourceType,\n sourceUrl: args.sourceUrl,\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n evidenceRelation: args.evidenceRelation,\n confidence: args.confidence,\n },\n triggeringAction: \"epistemicEvidence.internalCreate\",\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Create edge if linked to belief (directly in Neo4j)\n if (args.linkedBeliefNodeId && args.evidenceRelation) {\n const beliefNode = await ctx.db.get(args.linkedBeliefNodeId);\n if (beliefNode) {\n const confidence = args.confidence ?? 0.7;\n const weight =\n args.evidenceRelation === \"supports\" ? confidence : -confidence;\n\n // Delay edge creation by 5s to let node sync to Neo4j complete first.\n // Without this delay, the Neo4j MATCH in createEdge may fail because\n // the evidence node hasn't been synced yet (race condition).\n await ctx.scheduler.runAfter(5000, internal.neo4jEdgeAPI.createEdge, {\n globalId: crypto.randomUUID(),\n fromGlobalId: globalId,\n toGlobalId: beliefNode.globalId,\n edgeType: \"informs\",\n weight,\n createdBy: args.userId,\n topicId: scope.projectId ? String(scope.projectId) : undefined,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n metadata: {\n relation: args.evidenceRelation,\n confidence,\n },\n });\n }\n }\n\n // Schedule embedding generation for semantic search.\n // topicId alone is sufficient for Lucern deployments (no projects table).\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"evidence\" as const,\n text: args.text,\n }\n );\n }\n\n await markProjectGraphDirty(ctx, scope.projectId, String(scope.topicId));\n\n return { nodeId };\n },\n});\n\n/**\n * Update verification status on an evidence node.\n * Used by verificationActions after deep verification completes.\n */\nexport const updateVerificationStatus = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n verificationHash: v.string(),\n verificationStatus: v.string(),\n lastVerificationId: v.optional(v.id(\"verificationResults\")),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"evidence\") {\n throw new Error(\"Evidence node not found\");\n }\n const metadata = (node.metadata || {}) as Record<string, unknown>;\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n verificationHash: args.verificationHash,\n verificationStatus: args.verificationStatus,\n lastVerificationId: args.lastVerificationId,\n },\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { success: true };\n },\n});\n\n/**\n * Helper to format evidence node as legacy insight\n */\nfunction formatEvidenceNode(n: {\n _id: Id<\"epistemicNodes\">;\n projectId: string;\n topicId?: string;\n canonicalText: string;\n sourceType: string;\n status: string;\n metadata?: unknown;\n createdBy: string;\n createdAt: number;\n updatedAt: number;\n}) {\n const metadata = (n.metadata || {}) as Record<string, unknown>;\n const linkedWorktreeId = resolveEvidenceLinkedWorktreeId(metadata);\n return {\n _id: n._id,\n _epistemicNodeId: n._id,\n _creationTime: n.createdAt,\n projectId: n.projectId,\n topicId: n.topicId,\n text: n.canonicalText,\n kind: metadata.kind || \"observation\",\n tags: (metadata.tags as string[]) || [],\n sourceType: n.sourceType,\n externalSourceType: metadata.externalSourceType,\n externalSourceUrl: metadata.sourceUrl,\n sourceArtifactId: metadata.sourceArtifactId,\n sourceQuestionId: metadata.sourceQuestionId,\n linkedWorktreeId,\n [LEGACY_SPRINT_LINK_KEY]:\n (metadata[LEGACY_SPRINT_LINK_KEY] as string) || undefined,\n sourceAnchor: metadata.sourceAnchor,\n aiProvider: metadata.aiProvider,\n verificationStatus: metadata.verificationStatus,\n status: n.status,\n createdBy: n.createdBy,\n createdAt: n.createdAt,\n updatedAt: n.updatedAt,\n };\n}\n\n/**\n * Get evidence for project - SYSTEM query (no access check)\n */\nexport const getByProjectSystem = query({\n args: {\n ...optionalEvidenceScopeArgs,\n kind: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampEvidenceLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_EVIDENCE_PAGE_SIZE);\n const scope = await resolveEvidenceScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getEvidenceNodesForScope(ctx, scope, { scanLimit });\n\n const filtered = args.kind\n ? nodes.filter((n) => {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n return meta.kind === args.kind;\n })\n : nodes;\n\n filtered.sort((a, b) => b.createdAt - a.createdAt);\n return filtered.slice(0, pageSize).map((n) => formatEvidenceNode(n as any));\n },\n});\n\n// =============================================================================\n// ANALYTICS QUERIES\n// =============================================================================\n\n/**\n * Get evidence balance for a project (supporting vs challenging evidence).\n * Used by the EvidenceBalance visualization component.\n *\n * Calculates by examining edges from evidence nodes to belief nodes,\n * where positive weight = supporting and negative weight = challenging.\n */\nexport const getEvidenceBalance = query({\n args: {\n ...optionalEvidenceScopeArgs,\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n const hasAccess = await checkScopeAccess(\n ctx,\n scope.topicId ? String(scope.topicId) : scope.projectId!,\n args.userId\n );\n if (!hasAccess) {\n return { supporting: 0, challenging: 0, total: 0 };\n }\n\n const resolvedTopicId = scope.topicId || scope.projectId;\n const edges = resolvedTopicId\n ? await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_topic\", (q) => q.eq(\"topicId\", resolvedTopicId))\n .collect()\n : [];\n\n // Filter to informs edges from evidence to beliefs\n const evidenceEdges = edges.filter(\n (e) =>\n e.edgeType === \"informs\" && e.fromLayer === \"L2\" && e.toLayer === \"L3\"\n );\n\n let supporting = 0;\n let challenging = 0;\n\n for (const edge of evidenceEdges) {\n const weight = edge.weight ?? 0;\n if (weight > 0) {\n supporting++;\n } else if (weight < 0) {\n challenging++;\n }\n }\n\n return { supporting, challenging, total: evidenceEdges.length };\n },\n});\n\n// =============================================================================\n// PORTED FROM DEPRECATED insights.ts — update, flagAsIncorrect, remove\n// These functions operate ONLY on epistemicNodes (no legacy insights table).\n// =============================================================================\n\n/**\n * Update an evidence node's text, kind, tags, or verification fields.\n * Accepts either a native epistemicNodes ID via `nodeId` or a string `insightId`\n * for backward compatibility (callers still pass Id<\"epistemicNodes\"> shaped strings).\n *\n * Ported from insights.ts → update mutation.\n */\nexport const update = mutation({\n args: {\n // Accept both native and legacy-shaped IDs\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n insightId: v.optional(v.string()),\n text: v.optional(v.string()),\n kind: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n userId: v.string(),\n externalSourceUrl: v.optional(v.string()),\n verificationStatus: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // Resolve the node ID — prefer nodeId, fall back to insightId cast\n const resolvedId =\n args.nodeId ?? (args.insightId as Id<\"epistemicNodes\"> | undefined);\n if (!resolvedId) {\n throw new Error(\"Either nodeId or insightId is required\");\n }\n\n const node = await ctx.db.get(resolvedId as Id<\"epistemicNodes\">);\n if (!node || node.nodeType !== \"evidence\") {\n throw new Error(\"Evidence node not found\");\n }\n\n // Verify project access\n if (!node.projectId) {\n throw new Error(\"Evidence has no project scope\");\n }\n await checkProjectAccess(ctx, node.projectId, args.userId);\n\n const now = Date.now();\n const existingMeta = (node.metadata || {}) as Record<string, unknown>;\n const metaUpdates: Record<string, unknown> = { ...existingMeta };\n\n if (args.kind !== undefined) {\n metaUpdates.kind = args.kind;\n }\n if (args.tags !== undefined) {\n metaUpdates.tags = args.tags;\n }\n if (args.externalSourceUrl !== undefined) {\n metaUpdates.externalSourceUrl = args.externalSourceUrl;\n }\n\n await ctx.db.patch(resolvedId as Id<\"epistemicNodes\">, {\n canonicalText: args.text ?? node.canonicalText,\n metadata: metaUpdates,\n updatedAt: now,\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: resolvedId as Id<\"epistemicNodes\">,\n operation: \"upsert\",\n });\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: resolvedId as Id<\"epistemicNodes\">,\n changeType: \"updated\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: { text: node.canonicalText?.slice(0, 200) },\n newState: { text: (args.text ?? node.canonicalText)?.slice(0, 200) },\n });\n\n // Regenerate embedding if text changed\n if (args.text !== undefined) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId: resolvedId as Id<\"epistemicNodes\">,\n topicId: node.projectId,\n createdBy: node.createdBy,\n nodeType: \"evidence\" as const,\n text: args.text,\n }\n );\n }\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { nodeId: resolvedId };\n },\n});\n\n/**\n * Flag an evidence node as incorrect (human contradiction).\n * Sets verificationStatus to \"contradicted\" and records the reason in metadata.\n *\n * Ported from insights.ts → flagAsIncorrect mutation.\n */\nexport const flagAsIncorrect = mutation({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n reason: v.string(),\n suggestedCorrection: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n\n const node = await ctx.db.get(args.insightId);\n if (!node || node.nodeType !== \"evidence\") {\n throw new Error(\"Evidence not found in epistemic spine\");\n }\n\n // Verify project access\n if (!node.projectId) {\n throw new Error(\"Evidence has no project scope\");\n }\n await checkProjectAccess(ctx, node.projectId, args.userId);\n\n // Update the node with contradiction metadata\n const existingMeta = (node.metadata || {}) as Record<string, unknown>;\n await ctx.db.patch(node._id, {\n verificationStatus: \"contradicted\" as any,\n metadata: {\n ...existingMeta,\n contradictionReason: args.reason,\n suggestedCorrection: args.suggestedCorrection,\n contradictedBy: args.userId,\n contradictedAt: now,\n },\n updatedAt: now,\n });\n\n // Create a verification result record for analytics\n await ctx.db.insert(\"verificationResults\", {\n targetType: \"insight\",\n targetId: node._id,\n claimText: node.canonicalText || \"Evidence text not available\",\n verdict: \"contradicted\",\n confidence: 1.0,\n sources: [],\n reasoning: args.reason,\n suggestedRevision: args.suggestedCorrection,\n caveats: [],\n mode: \"deep_verify\",\n verifiedAt: now,\n durationMs: 0,\n projectId: node.projectId,\n userId: args.userId,\n });\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: node._id,\n changeType: \"updated\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n newState: {\n reason: args.reason,\n suggestedCorrection: args.suggestedCorrection,\n },\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n console.log(\n `[EpistemicEvidence] Evidence flagged as incorrect by ${args.userId}: \"${args.insightId.slice(0, 20)}...\"`\n );\n\n return { success: true };\n },\n});\n\n/**\n * Archive (soft-delete) an evidence node.\n * Sets status to \"archived\" — never actually deletes from epistemicNodes.\n *\n * Ported from insights.ts → remove mutation.\n */\nexport const remove = mutation({\n args: {\n // Accept both native and legacy-shaped IDs\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n insightId: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const resolvedId =\n args.nodeId ?? (args.insightId as Id<\"epistemicNodes\"> | undefined);\n if (!resolvedId) {\n throw new Error(\"Either nodeId or insightId is required\");\n }\n\n const node = await ctx.db.get(resolvedId as Id<\"epistemicNodes\">);\n if (!node || node.nodeType !== \"evidence\") {\n throw new Error(\"Evidence node not found\");\n }\n\n // Only creator can archive\n if (node.createdBy !== args.userId) {\n throw new Error(\"Only the creator can archive this evidence\");\n }\n\n const now = Date.now();\n\n // Soft-delete: set status to archived (never actually delete)\n await ctx.db.patch(resolvedId as Id<\"epistemicNodes\">, {\n status: \"archived\",\n updatedAt: now,\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: resolvedId as Id<\"epistemicNodes\">,\n operation: \"upsert\",\n });\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: resolvedId as Id<\"epistemicNodes\">,\n changeType: \"archived\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: { status: node.status },\n newState: { status: \"archived\" },\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { nodeId: resolvedId };\n },\n});\n","/**\n * Epistemic Spine - Dual-Write Helpers\n *\n * These functions handle writing to both legacy tables AND the epistemic spine.\n * They're called from existing mutations to ensure every new entity gets a spine entry.\n *\n * The spine is the canonical identity layer - these helpers ensure consistency.\n *\n * @see /docs/architecture/EPISTEMIC_SPINE.md\n * @see /docs/architecture/UNIFIED_GRAPH_ARCHITECTURE.md\n */\n\nimport { internal } from \"./convex\";\nimport type { Id } from \"./convex\";\nimport type { MutationCtx } from \"./convex\";\nimport { generateGlobalId } from \"./globalId\";\n\n// Import and re-export from centralized type registry\n// This ensures consistency across all Convex files\nimport {\n getNeo4jLabel,\n getNeo4jRelType,\n isDeprecatedEdgeType,\n} from \"./graphTypes\";\n\n// Re-export for backwards compatibility (other files import from here)\nexport { getNeo4jLabel, getNeo4jRelType, isDeprecatedEdgeType };\n\n// =============================================================================\n// CONTENT HASHING (Convex-compatible sync version)\n// =============================================================================\n\n/**\n * Generate a simple content hash for deduplication\n * Uses a basic hash since crypto.subtle isn't available in Convex runtime\n */\nfunction generateContentHash(nodeType: string, text: string): string {\n const content = `${nodeType}:${normalizeText(text)}`;\n\n // Simple hash function (djb2)\n let hash = 5381;\n for (let i = 0; i < content.length; i++) {\n hash = (hash << 5) + hash + content.charCodeAt(i);\n hash &= hash; // Convert to 32-bit integer\n }\n\n // Convert to hex string and pad to consistent length\n const hashHex = Math.abs(hash).toString(16).padStart(8, \"0\");\n // Add length and checksum for better uniqueness\n const lengthHex = content.length.toString(16).padStart(4, \"0\");\n const checksum = content\n .split(\"\")\n .reduce((a, c) => a + c.charCodeAt(0), 0)\n .toString(16)\n .padStart(8, \"0\");\n\n return `${hashHex}${lengthHex}${checksum}`;\n}\n\n/**\n * Normalize text for consistent hashing\n */\nfunction normalizeText(text: string): string {\n return text.trim().toLowerCase().replace(/\\s+/g, \" \");\n}\n\n// =============================================================================\n// TYPE MAPPINGS\n// =============================================================================\n\ntype EpistemicNodeType =\n // L4: Audit targets\n | \"decision\"\n // L3: Traversal anchors\n | \"belief\"\n | \"question\"\n | \"theme\"\n | \"deal\"\n // L2: Compression boundary\n | \"claim\"\n | \"evidence\"\n | \"synthesis\"\n | \"answer\"\n // L1: Terminal leaves\n | \"atomic_fact\"\n | \"excerpt\"\n | \"source\";\n\ntype OntologicalNodeType =\n | \"company\"\n | \"person\"\n | \"investor\"\n | \"function\"\n | \"value_chain\";\n\ntype NodeType = EpistemicNodeType | OntologicalNodeType;\n\n// =============================================================================\n// EPISTEMIC LAYER ARCHITECTURE (Lucern Invariant Compliance)\n// =============================================================================\n\n/**\n * Epistemic Layer - governs traversal rules\n * L4 → L3 → L2 → L1 (never skip layers)\n */\nexport type EpistemicLayer =\n | \"L4\"\n | \"L3\"\n | \"L2\"\n | \"L1\"\n | \"ontological\"\n | \"organizational\";\n\n/**\n * Map nodeType to its epistemic layer\n *\n * Layer semantics:\n * - L4: Audit targets (decisions, outcomes) - what we committed to\n * - L3: Traversal anchors (beliefs, questions, themes) - epistemic structure\n * - L2: Compression boundary (claims, evidence, synthesis) - minimum reasoning unit\n * - L1: Terminal leaves (atomic_fact, excerpt, source) - non-traversable grounding\n * - ontological: Entities in the world (companies, people) - not epistemic\n * - organizational: Structural containers (topics, lenses, worktrees) - not epistemic\n */\nexport function getNodeLayer(nodeType: string): EpistemicLayer {\n switch (nodeType) {\n // L4: Audit targets\n case \"decision\":\n return \"L4\";\n\n // L3: Traversal anchors\n case \"belief\":\n case \"question\":\n case \"theme\":\n case \"deal\":\n return \"L3\";\n\n // L2: Compression boundary\n case \"claim\":\n case \"evidence\":\n case \"synthesis\":\n case \"answer\":\n return \"L2\";\n\n // L1: Terminal leaves\n case \"atomic_fact\":\n case \"excerpt\":\n case \"source\":\n return \"L1\";\n\n // Ontological entities\n case \"company\":\n case \"person\":\n case \"investor\":\n case \"function\":\n case \"value_chain\":\n return \"ontological\";\n\n // Organizational containers\n case \"topic\":\n return \"organizational\";\n\n default:\n // Unknown types default to L2 (safest for traversal)\n console.warn(\n `[EpistemicLayer] Unknown nodeType: ${nodeType}, defaulting to L2`\n );\n return \"L2\";\n }\n}\n\n/**\n * Layer traversal rules\n * Key constraint: Cannot skip layers during traversal\n */\nexport const LAYER_TRAVERSAL_RULES = {\n L4: {\n canReach: [\"L3\", \"L4\"], // Decisions can reach beliefs/questions\n mustPassThrough: \"L3\", // Must go through L3 to reach L2\n },\n L3: {\n canReach: [\"L2\", \"L3\", \"L4\"], // Beliefs can reach evidence, other beliefs, or decisions\n mustPassThrough: \"L2\", // Must go through L2 to reach L1\n },\n L2: {\n canReach: [\"L1\", \"L2\", \"L3\"], // Evidence can reach sources, other evidence, or beliefs\n mustPassThrough: null, // L2 can reach L1 directly\n },\n L1: {\n canReach: [\"L1\"], // Sources can only reach other sources\n mustPassThrough: null, // Terminal - no traversal beyond\n },\n ontological: {\n canReach: [\"L3\", \"L2\", \"ontological\"], // Entities can link to epistemic structure\n mustPassThrough: null, // No layer constraints for entities\n },\n organizational: {\n canReach: [\"L3\", \"L2\", \"organizational\"], // Containers scope epistemic structure + nest\n mustPassThrough: null, // No layer constraints for containers\n },\n} as const;\n\n/**\n * Check if a direct edge between two layers is allowed\n */\nexport function isValidLayerConnection(\n fromLayer: EpistemicLayer,\n toLayer: EpistemicLayer\n): boolean {\n const rules = LAYER_TRAVERSAL_RULES[fromLayer];\n return (rules.canReach as readonly string[]).includes(toLayer);\n}\n\n/**\n * Get layer hierarchy number (for comparison)\n * Higher number = higher layer\n */\nexport function getLayerDepth(layer: EpistemicLayer): number {\n switch (layer) {\n case \"L4\":\n return 4;\n case \"L3\":\n return 3;\n case \"L2\":\n return 2;\n case \"L1\":\n return 1;\n case \"ontological\":\n return 0; // Ontological exists outside the epistemic hierarchy\n case \"organizational\":\n return 0; // Organizational exists outside the epistemic hierarchy\n default:\n return 2;\n }\n}\n\n/**\n * Check if we can traverse from one layer to another\n * (considering intermediate layers)\n */\nexport function canTraverseToLayer(\n fromLayer: EpistemicLayer,\n toLayer: EpistemicLayer\n): boolean {\n const fromDepth = getLayerDepth(fromLayer);\n const toDepth = getLayerDepth(toLayer);\n\n // Ontological/organizational layers are special - use explicit rules\n if (\n fromLayer === \"ontological\" ||\n toLayer === \"ontological\" ||\n fromLayer === \"organizational\" ||\n toLayer === \"organizational\"\n ) {\n return isValidLayerConnection(fromLayer, toLayer);\n }\n\n // Can always stay at same layer\n if (fromDepth === toDepth) {\n return true;\n }\n\n // Can go up (L1→L2→L3→L4) or down (L4→L3→L2→L1)\n // But must respect layer rules\n return isValidLayerConnection(fromLayer, toLayer);\n}\n\n// =============================================================================\n// PHASE 2D: LAYER-AWARE TRAVERSAL\n// =============================================================================\n\n/**\n * Traversal mode - determines how to traverse the graph\n *\n * anchor_down: Start at L3 belief, traverse to L2 evidence, stop at L1 sources\n * anchor_up: Start at L2 evidence, traverse to L3 beliefs it supports\n * same_layer: Traverse within a single layer (e.g., belief → belief)\n * decision_trace: Start at L4 decision, traverse to L3 beliefs it was based on\n */\nexport type TraversalMode =\n | \"anchor_down\"\n | \"anchor_up\"\n | \"same_layer\"\n | \"decision_trace\";\n\n/**\n * Traversal options for layer-aware queries\n */\nexport type TraversalOptions = {\n /** Starting node ID */\n startNodeId: Id<\"epistemicNodes\">;\n /** Traversal mode */\n mode: TraversalMode;\n /** Edge types to follow (empty = all valid for mode) */\n allowedEdgeTypes?: string[];\n /** Maximum depth */\n maxDepth?: number;\n /** Minimum layer to stop at (L1 = 1, L4 = 4) */\n minLayer?: number;\n /** Maximum layer to reach */\n maxLayer?: number;\n};\n\n/**\n * Check if traversal should continue based on layer constraints\n */\nexport function shouldContinueTraversal(\n currentLayer: EpistemicLayer,\n targetLayer: EpistemicLayer,\n options: {\n mode: TraversalMode;\n minLayer?: number;\n maxLayer?: number;\n }\n): boolean {\n const currentDepth = getLayerDepth(currentLayer);\n const targetDepth = getLayerDepth(targetLayer);\n\n // Check min/max layer constraints\n if (options.minLayer !== undefined && targetDepth < options.minLayer) {\n return false; // Would go below minimum layer\n }\n if (options.maxLayer !== undefined && targetDepth > options.maxLayer) {\n return false; // Would go above maximum layer\n }\n\n // Mode-specific rules\n switch (options.mode) {\n case \"anchor_down\":\n // Can only go down (L4→L3→L2→L1)\n return targetDepth < currentDepth || targetDepth === currentDepth;\n\n case \"anchor_up\":\n // Can only go up (L1→L2→L3→L4)\n return targetDepth > currentDepth || targetDepth === currentDepth;\n\n case \"same_layer\":\n // Must stay at same layer\n return targetDepth === currentDepth;\n\n case \"decision_trace\":\n // Decisions (L4) can trace to beliefs (L3), stop there\n return currentDepth === 4\n ? targetDepth === 3\n : targetDepth === currentDepth;\n\n default:\n return true;\n }\n}\n\n/**\n * Get default minLayer for a traversal mode\n */\nexport function getDefaultMinLayer(mode: TraversalMode): number {\n switch (mode) {\n case \"anchor_down\":\n return 1; // Can go all the way to L1 sources\n case \"anchor_up\":\n return 2; // Start at L2 evidence minimum\n case \"same_layer\":\n return 1; // No constraint\n case \"decision_trace\":\n return 3; // Stop at L3 beliefs (don't go to L2 evidence)\n default:\n return 1;\n }\n}\n\n/**\n * Get allowed edge types for a traversal mode\n */\nexport function getDefaultEdgeTypesForMode(mode: TraversalMode): string[] {\n switch (mode) {\n case \"anchor_down\":\n // From beliefs/questions down to evidence and sources\n return [\n \"informs\", // evidence → belief (traverse backwards)\n \"derived_from\", // evidence → source (provenance) + evidence → question\n ];\n case \"anchor_up\":\n // From evidence up to beliefs\n return [\"informs\", \"derived_from\"];\n case \"same_layer\":\n // Within-layer relationships\n return [\n // L3: Belief ↔ Belief\n \"depends_on\",\n \"supports\",\n \"contains\",\n // L3: Question ↔ Question\n \"prerequisite_for\",\n \"parallel_to\",\n // L2: Evidence ↔ Evidence\n \"corroborates\",\n \"extends\",\n \"same_source_as\",\n \"same_theme_as\",\n ];\n case \"decision_trace\":\n // From decisions to beliefs\n return [\n \"derived_from\",\n \"depends_on\",\n \"contains\",\n ];\n default:\n return [];\n }\n}\n\n// =============================================================================\n// PHASE 2C: EDGE LAYER RULES\n// =============================================================================\n\n/**\n * Edge Layer Rules - defines valid layer combinations for each edge type\n *\n * Format: { from: [allowed source layers], to: [allowed target layers] }\n *\n * Key rules:\n * - L4 edges: Decision → L3 (beliefs, questions, themes)\n * - Cross-layer edges: L2 → L3 (evidence informs beliefs)\n * - Same-layer edges: L3 → L3, L2 → L2 (beliefs depend on beliefs)\n * - Downward edges: L2 → L1 (evidence extracted from source)\n * - Lifecycle edges: same layer only (supersedes)\n */\nexport const EDGE_LAYER_RULES: Record<\n string,\n { from: EpistemicLayer[]; to: EpistemicLayer[]; description: string }\n> = {\n // === L4 Decision Edges ===\n based_on_belief: {\n from: [\"L4\"],\n to: [\"L3\"],\n description: \"Decision → Belief (L4 → L3)\",\n },\n based_on_question: {\n from: [\"L4\"],\n to: [\"L3\"],\n description: \"Decision → Question (L4 → L3)\",\n },\n blocked_by_contradiction: {\n from: [\"L4\"],\n to: [\"L3\"],\n description: \"Decision → Contradiction (L4 → L3)\",\n },\n informed_by_theme: {\n from: [\"L4\"],\n to: [\"L3\"],\n description: \"Decision → Theme (L4 → L3)\",\n },\n\n // === Evidence Flow (L2 → L3, L2 → L1) ===\n derived_from: {\n from: [\"L2\", \"L3\", \"L4\"],\n to: [\"L1\", \"L2\", \"L3\"],\n description: \"A was produced from B (provenance chain)\",\n },\n answers: {\n from: [\"L2\"],\n to: [\"L3\"],\n description: \"Evidence → Question (L2 → L3)\",\n },\n responds_to: {\n from: [\"L2\"],\n to: [\"L3\"],\n description: \"Answer → Question (L2 → L3)\",\n },\n informs: {\n from: [\"L2\"],\n to: [\"L3\"],\n description: \"Evidence → Belief (L2 → L3)\",\n },\n qualifies: {\n from: [\"L2\"],\n to: [\"L3\"],\n description: \"Evidence → Belief (L2 → L3)\",\n },\n\n // === Question → Belief (L3 → L3) ===\n tests: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Question → Belief (L3 → L3)\",\n },\n explores: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Question → Belief assumption (L3 → L3)\",\n },\n\n // === Synthesis (L2 → L2, L2 → L1) ===\n based_on: {\n from: [\"L2\"],\n to: [\"L2\", \"L1\"],\n description: \"Synthesis → Evidence/Source (L2 → L2/L1)\",\n },\n\n // === Theme Relationships (L3 → L3) ===\n relates_to_thesis: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief → Theme (L3 → L3)\",\n },\n belongs_to: {\n from: [\"L3\", \"L2\"], // Can belong to theme from L3 or L2\n to: [\"L3\"],\n description: \"Any → Theme (L3/L2 → L3)\",\n },\n plays_theme: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Deal → Theme (L3 → L3)\",\n },\n\n // === Topic Hierarchy (L3 → organizational) ===\n scoped_by: {\n from: [\"L3\"],\n to: [\"organizational\"],\n description: \"Belief/Question → Topic (L3 → organizational)\",\n },\n\n // === Deal/Company ===\n evaluates: {\n from: [\"L3\"],\n to: [\"ontological\"],\n description: \"Deal → Company (L3 → ontological)\",\n },\n\n // === People (ontological → ontological, ontological → L3) ===\n perspective_on: {\n from: [\"ontological\"],\n to: [\"L3\"],\n description: \"Person → Belief/Theme (ontological → L3)\",\n },\n works_at: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Person → Company (ontological → ontological)\",\n },\n\n // === Value Chain (ontological) ===\n participates_in: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company → ValueChain (ontological → ontological)\",\n },\n performs: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company → Function (ontological → ontological)\",\n },\n function_in: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Function → ValueChain (ontological → ontological)\",\n },\n impacts: {\n from: [\"L3\"],\n to: [\"ontological\"],\n description: \"Theme → ValueChain (L3 → ontological)\",\n },\n\n // === Investment (ontological) ===\n invested_in: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Investor → Company (ontological → ontological)\",\n },\n raised_from: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company → Investor (ontological → ontological)\",\n },\n\n // === Entity↔Belief Bridge (OE-B) ===\n about_entity: {\n from: [\"L3\"],\n to: [\"ontological\"],\n description: \"Belief/Question/Theme → Entity (L3 → ontological)\",\n },\n entity_referenced_in: {\n from: [\"ontological\"],\n to: [\"L2\"],\n description: \"Entity → Evidence (ontological → L2)\",\n },\n mentioned_in: {\n from: [\"ontological\"],\n to: [\"L1\"],\n description: \"Entity → Source document (ontological → L1)\",\n },\n founded_by: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company → Person (ontological → ontological)\",\n },\n competes_with: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company → Company (ontological → ontological)\",\n },\n contains: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"ValueChain → Function (ontological → ontological)\",\n },\n\n // === Lifecycle (same layer only) ===\n supersedes: {\n from: [\"L4\", \"L3\", \"L2\", \"L1\", \"ontological\", \"organizational\"],\n to: [\"L4\", \"L3\", \"L2\", \"L1\", \"ontological\", \"organizational\"],\n description: \"NewNode → OldNode (same layer only - validated separately)\",\n },\n same_as: {\n from: [\"L4\", \"L3\", \"L2\", \"L1\", \"ontological\", \"organizational\"],\n to: [\"L4\", \"L3\", \"L2\", \"L1\", \"ontological\", \"organizational\"],\n description: \"Duplicate detection (same layer only - validated separately)\",\n },\n\n // === Same-Type: Belief ↔ Belief (L3 → L3) ===\n depends_on: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief B requires Belief A (L3 → L3)\",\n },\n reinforces: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Beliefs strengthen each other (L3 → L3)\",\n },\n parent_of: {\n from: [\"L3\", \"organizational\"],\n to: [\"L3\", \"organizational\"],\n description:\n \"A is higher-level than B (L3 → L3, organizational → organizational)\",\n },\n child_of: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief A is more specific (L3 → L3)\",\n },\n\n // === Same-Type: Question ↔ Question (L3 → L3) ===\n prerequisite_for: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Question A must be answered first (L3 → L3)\",\n },\n parallel_to: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Same topic, different angles (L3 → L3)\",\n },\n\n // === Same-Type: Evidence ↔ Evidence (L2 → L2) ===\n corroborates: {\n from: [\"L2\"],\n to: [\"L2\"],\n description: \"Independent support (L2 → L2)\",\n },\n extends: {\n from: [\"L2\"],\n to: [\"L2\"],\n description: \"Adds depth (L2 → L2)\",\n },\n same_source_as: {\n from: [\"L2\"],\n to: [\"L2\"],\n description: \"Same document/study (L2 → L2)\",\n },\n same_theme_as: {\n from: [\"L2\"],\n to: [\"L2\"],\n description: \"Same topic/entity (L2 → L2)\",\n },\n\n // === NEW: Deep Epistemic Analysis Edges (Phase: Schema Upgrade) ===\n assumes: {\n from: [\"L3\"],\n to: [\"L3\"],\n description:\n \"Hidden dependency - Belief B implicitly assumes Belief A (L3 → L3)\",\n },\n would_predict: {\n from: [\"L3\"],\n to: [\"L2\"],\n description:\n \"Pre-registered prediction - If Belief true, expect Evidence (L3 → L2)\",\n },\n analogous_to: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Explicit analogy - Belief A is like Belief B (L3 → L3)\",\n },\n independent_of: {\n from: [\"L2\"],\n to: [\"L2\"],\n description:\n \"True evidence independence - Evidence A independent of B (L2 → L2)\",\n },\n\n // NOTE: Deprecated edge types (supports, contradicts, derived_from, cites,\n // summarizes, related_to, partially_answers, blocks, refines, branches_from)\n // have been REMOVED from the system. Use compliant alternatives instead.\n};\n\n/**\n * Validate an edge against layer rules\n *\n * Returns { valid: true } or { valid: false, reason: string }\n */\nexport function validateEdgeLayers(\n edgeType: string,\n fromLayer: EpistemicLayer,\n toLayer: EpistemicLayer\n): { valid: boolean; reason?: string } {\n const rules = EDGE_LAYER_RULES[edgeType];\n\n // Unknown edge type - allow but warn\n if (!rules) {\n console.warn(\n `[EdgeValidation] Unknown edge type: ${edgeType}, allowing by default`\n );\n return { valid: true };\n }\n\n // Special handling for same-layer edges (supersedes)\n if (edgeType === \"supersedes\") {\n if (fromLayer !== toLayer) {\n return {\n valid: false,\n reason: `${edgeType} edges must be between nodes of the same layer. Got ${fromLayer} → ${toLayer}`,\n };\n }\n return { valid: true };\n }\n\n // Check from layer\n if (!rules.from.includes(fromLayer)) {\n return {\n valid: false,\n reason: `Edge type '${edgeType}' does not allow source layer ${fromLayer}. Allowed: ${rules.from.join(\", \")}`,\n };\n }\n\n // Check to layer\n if (!rules.to.includes(toLayer)) {\n return {\n valid: false,\n reason: `Edge type '${edgeType}' does not allow target layer ${toLayer}. Allowed: ${rules.to.join(\", \")}`,\n };\n }\n\n return { valid: true };\n}\n\ntype EpistemicSourceType =\n | \"human\"\n | \"ai_extracted\"\n | \"ai_generated\"\n | \"imported\";\ntype EpistemicVerificationStatus =\n | \"unverified\"\n | \"human_verified\"\n | \"ai_verified\"\n | \"contradicted\"\n | \"outdated\";\n\n/**\n * Map legacy insight sourceType to epistemic sourceType\n */\nfunction mapInsightSourceType(sourceType?: string): EpistemicSourceType {\n switch (sourceType) {\n case \"verified\":\n case \"proprietary\":\n return \"human\";\n case \"ai_generated\":\n return \"ai_generated\";\n default:\n return \"human\";\n }\n}\n\n/**\n * Map legacy verification status to epistemic verification status\n */\nfunction mapVerificationStatus(status?: string): EpistemicVerificationStatus {\n switch (status) {\n case \"manually_verified\":\n return \"human_verified\";\n case \"deep_verified\":\n case \"pre_screened\":\n return \"ai_verified\";\n default:\n return \"unverified\";\n }\n}\n\n// =============================================================================\n// DUAL-WRITE FUNCTIONS\n// =============================================================================\n\n/**\n * Create an epistemic node for an insight (evidence)\n * Called after inserting into the insights table\n */\nexport async function createEpistemicNodeForInsight(\n ctx: MutationCtx,\n _insightId: Id<\"epistemicNodes\">,\n insight: {\n projectId: string;\n text: string;\n kind: string;\n tags?: string[];\n sourceType?: string;\n aiProvider?: string;\n verificationStatus?: string;\n sourceArtifactId?: Id<\"finalArtifacts\">;\n sourceQuestionId?: Id<\"epistemicNodes\">; // If this evidence was created to answer a question\n sourceAnchor?: {\n artifactId: string;\n artifactType: string;\n artifactTitle?: string;\n sectionHeading?: string;\n selectedText?: string;\n startOffset?: number;\n endOffset?: number;\n pageNumber?: number;\n };\n createdBy: string;\n }\n): Promise<Id<\"epistemicNodes\">> {\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(\"evidence\", insight.text);\n\n // Check for duplicate\n const existing = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_contentHash\", (q) => q.eq(\"contentHash\", contentHash))\n .first();\n\n if (existing && existing.status === \"active\") {\n await ctx.db.patch(existing._id, {\n updatedAt: now,\n });\n return existing._id;\n }\n\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n nodeType: \"evidence\",\n epistemicLayer: \"L2\", // Evidence is at L2 (compression boundary)\n canonicalText: insight.text,\n contentHash,\n title:\n insight.text.slice(0, 100) + (insight.text.length > 100 ? \"...\" : \"\"),\n tags: insight.tags,\n metadata: {\n kind: insight.kind,\n pillar: insight.tags?.find((t) =>\n [\n \"market\",\n \"competition\",\n \"product\",\n \"team\",\n \"financials\",\n \"regulatory\",\n \"timing\",\n \"customer\",\n \"technology\",\n \"distribution\",\n ].includes(t)\n ),\n // Include sourceArtifactId for source document panel\n sourceArtifactId: insight.sourceArtifactId,\n // Include sourceQuestionId if this evidence was created to answer a question\n sourceQuestionId: insight.sourceQuestionId,\n // Include sourceAnchor for linking evidence back to source documents\n sourceAnchor: insight.sourceAnchor,\n },\n sourceType: mapInsightSourceType(insight.sourceType),\n aiProvider: insight.aiProvider,\n confidence:\n insight.verificationStatus === \"manually_verified\"\n ? 0.9\n : insight.verificationStatus === \"deep_verified\"\n ? 0.7\n : insight.verificationStatus === \"pre_screened\"\n ? 0.5\n : 0.3,\n verificationStatus: mapVerificationStatus(insight.verificationStatus),\n status: \"active\",\n topicId: insight.projectId,\n createdBy: insight.createdBy,\n createdAt: now,\n updatedAt: now,\n });\n\n // If there's a source artifact, create a derived_from edge\n if (insight.sourceArtifactId) {\n // Find or create the source node\n const sourceNode = await findOrCreateSourceNode(\n ctx,\n insight.sourceArtifactId,\n insight.createdBy,\n insight.projectId\n );\n if (sourceNode) {\n await createEpistemicEdge(ctx, {\n fromNodeId: nodeId,\n toNodeId: sourceNode,\n edgeType: \"derived_from\",\n projectId: insight.projectId,\n createdBy: insight.createdBy,\n });\n }\n }\n\n return nodeId;\n}\n\n/**\n * Create an epistemic node for a belief\n * Called after inserting into the beliefs table\n */\nexport async function createEpistemicNodeForBelief(\n ctx: MutationCtx,\n beliefId: Id<\"epistemicNodes\">,\n belief: {\n projectId: string;\n belief: string;\n rationale?: string;\n confidence: string;\n topic?: string;\n sourceAnchor?: {\n artifactId: string;\n artifactType: string;\n artifactTitle?: string;\n sectionHeading?: string;\n selectedText?: string;\n startOffset?: number;\n endOffset?: number;\n };\n createdBy: string;\n }\n): Promise<Id<\"epistemicNodes\">> {\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(\"belief\", belief.belief);\n\n // Check for duplicate\n const existing = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_contentHash\", (q) => q.eq(\"contentHash\", contentHash))\n .first();\n\n if (existing && existing.status === \"active\") {\n await ctx.db.patch(existing._id, {\n metadata: {\n ...((existing.metadata as Record<string, unknown>) || {}),\n sourceBeliefId: beliefId,\n },\n updatedAt: now,\n });\n return existing._id;\n }\n\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n nodeType: \"belief\",\n epistemicLayer: \"L3\", // Beliefs are at L3 (traversal anchors)\n canonicalText: belief.belief,\n contentHash,\n content: belief.rationale,\n title:\n belief.belief.slice(0, 100) + (belief.belief.length > 100 ? \"...\" : \"\"),\n metadata: {\n sourceBeliefId: beliefId,\n beliefStatus: \"assumption\",\n topic: belief.topic, // Use 'topic' for consistency with legacy schema\n pillar: belief.topic, // Keep 'pillar' for backward compat with existing data\n // No confidence/confidenceLevel — only set after sprint completion\n rationale: belief.rationale,\n status: \"active\",\n // Include sourceAnchor for linking beliefs back to source documents\n sourceAnchor: belief.sourceAnchor,\n },\n beliefStatus: \"assumption\" as any,\n epistemicStatus: \"assumption\" as any,\n sourceType: \"human\",\n confidence: undefined, // No confidence until sprint completion\n verificationStatus: \"unverified\",\n status: \"active\",\n topicId: belief.projectId,\n createdBy: belief.createdBy,\n createdAt: now,\n updatedAt: now,\n });\n\n return nodeId;\n}\n\n/**\n * Create an epistemic node for a question\n * Called after inserting into the questions table\n */\nexport async function createEpistemicNodeForQuestion(\n ctx: MutationCtx,\n _questionId: Id<\"epistemicNodes\">,\n question: {\n projectId: string;\n question: string;\n category?: string;\n priority: string;\n source: string;\n sourceAnchor?: {\n artifactId: string;\n artifactType: string;\n artifactTitle?: string;\n sectionHeading?: string;\n selectedText?: string;\n startOffset?: number;\n endOffset?: number;\n };\n createdBy: string;\n }\n): Promise<Id<\"epistemicNodes\">> {\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(\"question\", question.question);\n\n // Check for duplicate\n const existing = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_contentHash\", (q) => q.eq(\"contentHash\", contentHash))\n .first();\n\n if (existing && existing.status === \"active\") {\n await ctx.db.patch(existing._id, {\n updatedAt: now,\n });\n return existing._id;\n }\n\n const sourceType: EpistemicSourceType =\n question.source === \"manual\"\n ? \"human\"\n : question.source === \"ai_suggested\"\n ? \"ai_generated\"\n : \"ai_extracted\";\n\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n nodeType: \"question\",\n epistemicLayer: \"L3\", // Questions are at L3 (traversal anchors)\n canonicalText: question.question,\n contentHash,\n title:\n question.question.slice(0, 100) +\n (question.question.length > 100 ? \"...\" : \"\"),\n metadata: {\n pillar: question.category,\n priority: question.priority,\n source: question.source,\n // Include sourceAnchor for linking questions back to source documents\n sourceAnchor: question.sourceAnchor,\n },\n sourceType,\n verificationStatus: \"unverified\",\n status: \"active\",\n topicId: question.projectId,\n createdBy: question.createdBy,\n createdAt: now,\n updatedAt: now,\n });\n\n return nodeId;\n}\n\n/**\n * Create an epistemic node for a synthesis artifact (primer or deep research).\n *\n * ⚠️ IMPORTANT: This function should NOT be called for primers/deep research\n * unless the node is being connected to evidence as a source.\n * Standalone synthesis nodes create orphans in the graph.\n *\n * The correct pattern is:\n * 1. Store the artifact in finalArtifacts (for UI display)\n * 2. Only create epistemic node when extracting evidence FROM the artifact\n * 3. Create edge: evidence -> derived_from -> synthesis\n *\n * @deprecated Consider removing automatic node creation for primers.\n * Use the artifact ID reference in evidence metadata instead.\n */\nexport async function createEpistemicNodeForArtifact(\n ctx: MutationCtx,\n artifactId: Id<\"finalArtifacts\">,\n artifact: {\n projectId?: string;\n title: string;\n content: string;\n type: string;\n isDeepResearch?: boolean;\n aiProvider?: string;\n createdBy: string;\n }\n): Promise<Id<\"epistemicNodes\">> {\n const now = Date.now();\n const globalId = generateGlobalId();\n\n // Determine node type\n let nodeType: EpistemicNodeType = \"source\";\n const isSynthesis =\n artifact.isDeepResearch ||\n artifact.type.includes(\"deep\") ||\n artifact.type.includes(\"research\") ||\n artifact.type.includes(\"primer\");\n\n if (isSynthesis) {\n nodeType = \"synthesis\";\n\n // ⚠️ DO NOT create standalone synthesis nodes\n // Primers/deep research should be stored in finalArtifacts for UI display\n // Epistemic nodes should only be created when:\n // 1. Evidence is extracted FROM the artifact\n // 2. The node is connected via derived_from edge\n console.log(\n `[EpistemicHelpers] Skipping synthesis node creation for \"${artifact.type}\" - ` +\n \"will create when evidence is extracted\"\n );\n\n // Return a placeholder - callers should handle null\n // For backward compatibility, we check for existing node first\n const contentHash = generateContentHash(\n nodeType,\n artifact.title + artifact.content.slice(0, 500)\n );\n const existing = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_contentHash\", (q) => q.eq(\"contentHash\", contentHash))\n .first();\n\n if (existing && existing.status === \"active\") {\n return existing._id; // Return existing node if found\n }\n\n // Don't create new synthesis nodes - they become orphans\n // Throw to signal to callers that no node was created\n throw new Error(\"SKIP_SYNTHESIS_NODE_CREATION\");\n }\n\n const contentHash = generateContentHash(\n nodeType,\n artifact.title + artifact.content.slice(0, 500)\n );\n\n // Check for duplicate\n const existing = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_contentHash\", (q) => q.eq(\"contentHash\", contentHash))\n .first();\n\n if (existing && existing.status === \"active\") {\n await ctx.db.patch(existing._id, {\n metadata: {\n ...((existing.metadata as Record<string, unknown>) || {}),\n legacyArtifactId: artifactId,\n },\n updatedAt: now,\n });\n return existing._id;\n }\n\n // Source artifacts are L1 terminal leaves.\n const epistemicLayer = \"L1\";\n\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n nodeType,\n epistemicLayer, // Synthesis is L2, Source is L1\n canonicalText: artifact.title,\n contentHash,\n content: artifact.content,\n contentType: \"markdown\",\n title: artifact.title,\n metadata: {\n legacyArtifactId: artifactId,\n artifactType: artifact.type,\n },\n sourceType: \"ai_generated\",\n aiProvider:\n artifact.aiProvider || (artifact.isDeepResearch ? \"gemini\" : \"anthropic\"),\n verificationStatus: \"unverified\",\n status: \"active\",\n topicId: artifact.projectId,\n createdBy: artifact.createdBy,\n createdAt: now,\n updatedAt: now,\n });\n\n return nodeId;\n}\n\n/**\n * Find or create an epistemic node for a source artifact\n */\nasync function findOrCreateSourceNode(\n ctx: MutationCtx,\n artifactId: Id<\"finalArtifacts\">,\n createdBy: string,\n scopeProjectId?: string\n): Promise<Id<\"epistemicNodes\"> | null> {\n // Check if we already have a node for this artifact.\n // Scope by topicId/projectId when available to avoid full table scan.\n const artifact = await ctx.db.get(artifactId);\n const effectiveProjectId = scopeProjectId || artifact?.projectId;\n const effectiveTopicId = (artifact as any)?.topicId as string | undefined;\n\n let existingNodes;\n if (effectiveTopicId) {\n existingNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic\", (q: any) => q.eq(\"topicId\", effectiveTopicId))\n .collect();\n } else if (effectiveProjectId) {\n existingNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_project\", (q) => q.eq(\"projectId\", effectiveProjectId))\n .collect();\n } else {\n // Last resort: scan by nodeType to avoid unscoped full scan\n existingNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q) => q.eq(\"nodeType\", \"source\"))\n .collect();\n }\n\n const existing = existingNodes.find((n) => {\n const metadata = n.metadata as Record<string, unknown> | undefined;\n return metadata?.legacyArtifactId === artifactId;\n });\n\n if (existing) {\n return existing._id;\n }\n\n // artifact was already fetched above for scoping; recheck in case it was null\n if (!artifact) {\n return null;\n }\n\n const now = Date.now();\n const globalId = generateGlobalId();\n\n // Determine node type based on artifact metadata\n const artifactType =\n ((artifact.metadata as Record<string, unknown>)?.type as string) || \"\";\n const isDeepResearch = (artifact.metadata as Record<string, unknown>)\n ?.isDeepResearch as boolean;\n\n let nodeType: EpistemicNodeType = \"source\";\n if (\n isDeepResearch ||\n artifactType.includes(\"deep\") ||\n artifactType.includes(\"research\")\n ) {\n nodeType = \"synthesis\";\n } else if (artifactType.includes(\"primer\")) {\n nodeType = \"synthesis\";\n }\n\n const title =\n ((artifact.metadata as Record<string, unknown>)?.title as string) ||\n ((artifact.metadata as Record<string, unknown>)?.theme as string) ||\n \"Untitled\";\n\n const contentHash = generateContentHash(\n nodeType,\n title + (artifact.content?.slice(0, 500) || \"\")\n );\n\n // Determine layer based on nodeType\n const epistemicLayer = nodeType === \"synthesis\" ? \"L2\" : \"L1\";\n\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n nodeType,\n epistemicLayer, // Synthesis is L2, Source is L1\n canonicalText: title,\n contentHash,\n content: artifact.content,\n contentType: \"markdown\",\n title,\n metadata: {\n legacyArtifactId: artifactId,\n artifactType,\n stage: artifact.stage,\n },\n sourceType: isDeepResearch ? \"ai_generated\" : \"ai_extracted\",\n aiProvider: isDeepResearch ? \"gemini\" : \"anthropic\",\n verificationStatus: \"unverified\",\n status: \"active\",\n topicId: artifact.projectId,\n createdBy,\n createdAt: now,\n updatedAt: now,\n });\n\n return nodeId;\n}\n\n/**\n * Edge type union for createEpistemicEdge\n * Phase 2C: Updated to include L4 edges and modern edge types\n * Phase 3: Added full epistemic impact edges for confidence propagation\n */\ntype EpistemicEdgeType =\n // Canonical edge types (K-tier compliant)\n | \"derived_from\" // replaces: answers, extracted_from, based_on, same_as, based_on_belief, based_on_question\n | \"supports\" // replaces: reinforces, strengthened_by, validated_by, weakened_by, alternative_to, falsified_by, exclusive_with (with appropriate weight)\n | \"contains\" // replaces: parent_of, child_of, about_entity, entity_referenced_in, subsumes, informed_by_theme\n | \"depends_on\" // replaces: collapses_if, cascade_from, required_for, blocks, blocked_by_contradiction\n | \"informs\"\n | \"tests\" // replaces: explores\n | \"responds_to\"\n // Theme relationships\n | \"relates_to_thesis\"\n | \"belongs_to\"\n | \"plays_theme\"\n // Lifecycle\n | \"supersedes\"\n // Same-type: Belief - Cluster Mapping (Thesis Validation Sprints)\n | \"counterfactual_of\"\n | \"cascade_to\"\n | \"mutually_exclusive\"\n | \"correlates_with\"\n | \"amplifies\"\n | \"precondition_for\"\n | \"in_tension_with\"\n // Same-type: Belief - Deep Epistemic Analysis (Tier 2)\n | \"assumes\"\n | \"would_predict\"\n | \"analogous_to\"\n | \"independent_of\"\n // Same-type: Question\n | \"prerequisite_for\"\n | \"parallel_to\"\n // Same-type: Evidence\n | \"corroborates\"\n | \"extends\"\n | \"same_source_as\"\n | \"same_theme_as\"\n // Ontological\n | \"evaluates\"\n | \"perspective_on\"\n | \"works_at\"\n | \"participates_in\"\n | \"performs\"\n | \"function_in\"\n | \"impacts\"\n | \"invested_in\"\n | \"raised_from\"\n // People/Entity References\n | \"mentioned_in\"\n | \"founded_by\"\n | \"competes_with\";\n\n// NOTE: Deprecated edge types have been REMOVED from this type.\n// See schema.ts for the list of removed types and their compliant alternatives.\n\n// =============================================================================\n// CONFIDENCE NORMALIZATION\n// =============================================================================\n\n/**\n * Normalize confidence to a 0-1 number regardless of input format.\n *\n * Handles:\n * - number (0-1): returned as-is\n * - number (1-100): divided by 100\n * - string (\"high\"/\"medium\"/\"low\"): mapped to 0.8/0.5/0.3\n * - undefined/null/other: returns 0.5 default\n *\n * This is the canonical way to read confidence from any source.\n */\nexport function normalizeConfidence(confidence: unknown): number {\n if (typeof confidence === \"number\") {\n return confidence > 1 ? confidence / 100 : confidence;\n }\n if (typeof confidence === \"string\") {\n switch (confidence) {\n case \"high\":\n return 0.8;\n case \"medium\":\n return 0.5;\n case \"low\":\n return 0.3;\n default:\n return 0.5;\n }\n }\n return 0.5;\n}\n\n/**\n * Epistemic Edge Propagation Semantics\n *\n * Each edge type has specific propagation rules for confidence cascades:\n *\n * | Edge Type | Direction | Propagation Rule |\n * |-------------------|--------------|-----------------------------------------------------------|\n * | depends_on | B → A | A.conf = min(A.conf, B.conf + 0.2) |\n * | reinforces | A ↔ B | Both get boost when either validated |\n * | falsified_by | B → A | A.conf = 1 - B.conf (inverse) |\n * | exclusive_with | A ↔ B | A.conf + B.conf ≤ 1.0 (redistribute on evidence) |\n * | contradicts | A ↔ B | Creates tension - neither can be validated without fork |\n * | collapses_if | A → B | If A.conf < threshold, B.conf → 0 |\n * | cascade_from | A → B | B.conf_delta = A.conf_delta * damping_factor |\n * | strengthened_by | A → B | B.conf += A.conf_delta * correlation |\n * | weakened_by | A → B | B.conf -= A.conf_delta * correlation |\n * | alternative_to | A ↔ B | Evidence for A reduces B, and vice versa |\n * | subsumes | A → B | A.conf >= B.conf always |\n * | validated_by | A → B | If A validated, B gains confidence |\n * | required_for | A → B | B cannot be validated until A is validated |\n * | blocks | A → B | B resolution blocked until A resolved |\n */\n\n/**\n * Create an epistemic edge between two nodes\n *\n * Phase 1 (Graph Architecture): Writes to Neo4j directly - Neo4j is source of truth.\n * Returns globalId (string) instead of Convex edge ID.\n *\n * Phase 2C: Validates layer rules before creation\n */\nexport async function createEpistemicEdge(\n ctx: MutationCtx,\n params: {\n fromNodeId: Id<\"epistemicNodes\">;\n toNodeId: Id<\"epistemicNodes\">;\n edgeType: EpistemicEdgeType;\n weight?: number;\n confidence?: number;\n context?: string;\n // NOTE: 'relation' field has been removed. Use 'weight' instead.\n projectId?: string;\n createdBy: string;\n // Phase 2C: Allow skipping validation for migrations\n skipLayerValidation?: boolean;\n }\n): Promise<string> {\n const globalId = generateGlobalId();\n\n // Get node types for denormalization\n const fromNode = await ctx.db.get(params.fromNodeId);\n const toNode = await ctx.db.get(params.toNodeId);\n\n if (!fromNode || !toNode) {\n throw new Error(\"One or both nodes not found\");\n }\n\n // Phase 2C: Get layers (use stored or derive from nodeType)\n const fromLayer = fromNode.epistemicLayer || getNodeLayer(fromNode.nodeType);\n const toLayer = toNode.epistemicLayer || getNodeLayer(toNode.nodeType);\n\n // Phase 2C: Validate layer rules\n if (!params.skipLayerValidation) {\n const validation = validateEdgeLayers(params.edgeType, fromLayer, toLayer);\n if (!validation.valid) {\n throw new Error(\n `[EdgeValidation] Invalid edge: ${validation.reason}. ` +\n `Attempted: ${params.edgeType} from ${fromNode.nodeType}(${fromLayer}) → ${toNode.nodeType}(${toLayer})`\n );\n }\n }\n\n // Phase 1 (Graph Architecture): Write to Neo4j directly - Neo4j is source of truth\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId,\n fromGlobalId: fromNode.globalId,\n toGlobalId: toNode.globalId,\n edgeType: params.edgeType,\n weight: params.weight,\n confidence: params.confidence,\n context: params.context,\n createdBy: params.createdBy,\n topicId: params.projectId ? String(params.projectId) : undefined,\n fromNodeType: fromNode.nodeType,\n toNodeType: toNode.nodeType,\n fromLayer,\n toLayer,\n });\n\n return globalId;\n}\n\n/**\n * Create an edge when linking an insight to a question\n * This creates a \"derived_from\" edge (evidence answers/informs question)\n */\nexport async function createEdgeForInsightQuestionLink(\n ctx: MutationCtx,\n questionId: Id<\"epistemicNodes\">,\n insightId: Id<\"epistemicNodes\">,\n createdBy: string\n): Promise<string | null> {\n console.log(\"[EpistemicSpine] Creating edge for insight-question link:\", {\n questionId: String(questionId),\n insightId: String(insightId),\n });\n\n // Find the epistemic nodes for both entities\n const questionNode = await findNodeByLegacyId(ctx, \"question\", questionId);\n const insightNode = await findNodeByLegacyId(ctx, \"insight\", insightId);\n\n console.log(\"[EpistemicSpine] Found nodes:\", {\n questionNode: questionNode ? String(questionNode) : null,\n insightNode: insightNode ? String(insightNode) : null,\n });\n\n if (!questionNode || !insightNode) {\n // Nodes don't exist yet - this can happen for legacy data\n // They'll be created during backfill\n console.log(\"[EpistemicSpine] Missing nodes, skipping edge creation\");\n return null;\n }\n\n // Get the question for projectId\n const question = await ctx.db.get(questionId);\n const projectId = question?.projectId;\n\n // Create the edge: Evidence -> Question\n // Use \"derived_from\" - canonical replacement for \"answers\" edge type\n return await createEpistemicEdge(ctx, {\n fromNodeId: insightNode,\n toNodeId: questionNode,\n edgeType: \"derived_from\",\n projectId,\n createdBy,\n context: \"Linked from questions workspace\",\n });\n}\n\n/**\n * Find an epistemic node by its legacy ID (stored in metadata)\n */\nasync function findNodeByLegacyId(\n ctx: MutationCtx,\n legacyType: \"insight\" | \"belief\" | \"question\" | \"artifact\",\n legacyId: Id<\"epistemicNodes\"> | Id<\"finalArtifacts\">\n): Promise<Id<\"epistemicNodes\"> | null> {\n // Query all nodes and find the one with matching legacy ID\n // This is not ideal for performance, but works for now\n // TODO: Add a dedicated index for legacy IDs\n const nodeType =\n legacyType === \"insight\"\n ? \"evidence\"\n : legacyType === \"artifact\"\n ? \"source\"\n : legacyType;\n\n const nodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q) => q.eq(\"nodeType\", nodeType))\n .collect();\n\n const legacyKey = `legacy${legacyType.charAt(0).toUpperCase() + legacyType.slice(1)}Id`;\n\n // Convert legacyId to string for comparison (Convex Id objects need string comparison)\n const legacyIdStr = String(legacyId);\n\n const found = nodes.find((n) => {\n const metadata = n.metadata as Record<string, unknown> | undefined;\n const storedId = metadata?.[legacyKey];\n // Compare as strings to handle Convex Id serialization\n return storedId && String(storedId) === legacyIdStr;\n });\n\n if (!found) {\n console.log(\n `[EpistemicSpine] Node not found for ${legacyType}:${legacyIdStr}, searched ${nodes.length} ${nodeType} nodes`\n );\n }\n\n return found?._id ?? null;\n}\n","/**\n * Epistemic Linking Mutations\n *\n * Creates proper edges in the epistemic graph when linking entities.\n * These mutations are called by the SuggestedMatches component when\n * a user links items from AI-suggested matches.\n *\n * @see /docs/architecture/EPISTEMIC_SPINE.md\n */\n\nimport { v } from \"convex/values\";\nimport { internal } from \"./convex\";\nimport { mutation } from \"./convex\";\nimport {\n getNodeLayer,\n isDeprecatedEdgeType,\n validateEdgeLayers,\n} from \"./epistemicHelpers\";\nimport { checkProjectAccess } from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\n\n// =============================================================================\n// EDGE TYPE MAPPINGS\n// =============================================================================\n\n/**\n * Map frontend relation types to Convex edge types\n */\nconst RELATION_TO_EDGE_TYPE: Record<string, string> = {\n // Cross-type: Evidence → Belief\n supports: \"informs\", // with weight > 0\n contradicts: \"informs\", // with weight < 0\n\n // Cross-type: Question → Belief\n tests: \"tests\",\n\n // Cross-type: Evidence → Question\n answers: \"derived_from\",\n partial: \"derived_from\", // with lower weight\n context: \"derived_from\", // with even lower weight\n\n // Same-type: Belief ↔ Belief\n depends_on: \"depends_on\",\n reinforces: \"supports\",\n parent: \"contains\",\n child: \"contains\",\n\n // Same-type: Question ↔ Question\n prerequisite: \"prerequisite_for\",\n parallel: \"parallel_to\",\n\n // Same-type: Evidence ↔ Evidence\n corroborates: \"corroborates\",\n extends: \"extends\",\n same_source: \"same_source_as\",\n same_theme: \"same_theme_as\",\n\n // Generic\n adjacent: \"related_to\",\n related: \"related_to\",\n informs: \"informs\",\n};\n\n/**\n * Calculate edge weight based on relation type\n */\nfunction getEdgeWeight(relation: string): number {\n switch (relation) {\n case \"supports\":\n case \"corroborates\":\n return 0.7;\n case \"contradicts\":\n return -0.7;\n case \"qualifies\":\n case \"partial\":\n return 0.4;\n case \"context\":\n case \"adjacent\":\n return 0.2;\n case \"depends_on\":\n case \"parent\":\n case \"prerequisite\":\n return 0.8;\n case \"child\":\n return 0.6;\n case \"parallel\":\n case \"extends\":\n case \"same_theme\":\n case \"same_source\":\n return 0.5;\n default:\n return 0.5;\n }\n}\n\nfunction buildDeterministicEdgeGlobalId(\n fromGlobalId: string,\n toGlobalId: string,\n edgeType: string\n): string {\n return `edge_link_${edgeType}_${fromGlobalId}_${toGlobalId}`;\n}\n\n// =============================================================================\n// BELIEF-BELIEF LINKING\n// =============================================================================\n\n/**\n * Link two beliefs with a semantic relationship\n */\nexport const linkBeliefToBelief = mutation({\n args: {\n fromBeliefId: v.id(\"epistemicNodes\"),\n toBeliefId: v.id(\"epistemicNodes\"),\n relation: v.string(), // \"depends_on\" | \"supports\" | \"contains\" | \"contradicts\" | \"adjacent\"\n userId: v.string(),\n rationale: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const fromBelief = await ctx.db.get(args.fromBeliefId);\n const toBelief = await ctx.db.get(args.toBeliefId);\n\n if (\n !fromBelief ||\n !toBelief ||\n fromBelief.nodeType !== \"belief\" ||\n toBelief.nodeType !== \"belief\"\n ) {\n throw new Error(\"One or both beliefs not found\");\n }\n\n // Verify project access\n if (fromBelief.projectId) {\n const hasAccess = await checkProjectAccess(\n ctx,\n fromBelief.projectId,\n args.userId\n );\n if (!hasAccess) {\n throw new Error(\"No permission to link these beliefs\");\n }\n }\n\n const fromNode = fromBelief;\n const toNode = toBelief;\n\n if (fromNode && toNode) {\n // Create epistemic edge\n const edgeType = RELATION_TO_EDGE_TYPE[args.relation] || \"related_to\";\n const weight = getEdgeWeight(args.relation);\n\n // Phase 2C: Get layers and validate\n const fromLayer =\n fromNode.epistemicLayer || getNodeLayer(fromNode.nodeType);\n const toLayer = toNode.epistemicLayer || getNodeLayer(toNode.nodeType);\n\n const validation = validateEdgeLayers(edgeType, fromLayer, toLayer);\n if (!validation.valid) {\n console.warn(\n `[EpistemicLinking] Invalid edge blocked: ${validation.reason}`\n );\n // Don't throw - just skip creating invalid edge to avoid breaking UI\n } else if (isDeprecatedEdgeType(edgeType)) {\n // Block removed edge types\n console.error(\n `[EpistemicLinking] FORBIDDEN edge type '${edgeType}' blocked. Use compliant edge types.`\n );\n // Skip creating - don't break UI\n } else {\n // Deterministic IDs make Neo4j MERGE idempotent without relying on Convex mirrors.\n const edgeGlobalId = buildDeterministicEdgeGlobalId(\n fromNode.globalId,\n toNode.globalId,\n edgeType\n );\n\n // Phase 1 (Graph Architecture): Write to Neo4j directly\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: fromNode.globalId,\n toGlobalId: toNode.globalId,\n edgeType: edgeType as\n | \"depends_on\"\n | \"supports\"\n | \"contains\"\n | \"informs\"\n | \"derived_from\"\n | \"tests\",\n weight,\n context: args.rationale || `Linked as ${args.relation}`,\n topicId: fromBelief.projectId\n ? String(fromBelief.projectId)\n : undefined,\n createdBy: args.userId,\n fromNodeType: \"belief\",\n toNodeType: \"belief\",\n fromLayer,\n toLayer,\n });\n }\n }\n\n return { success: true };\n },\n});\n\n// =============================================================================\n// QUESTION-QUESTION LINKING\n// =============================================================================\n\n/**\n * ⛔ DEPRECATED: Question-to-question linking is disabled.\n *\n * Raw questions are excluded from the graph visualization once key questions exist,\n * so question-to-question edges create unnecessary noise without providing value.\n *\n * This mutation now returns success without creating edges for backwards compatibility.\n */\nexport const linkQuestionToQuestion = mutation({\n args: {\n fromQuestionId: v.id(\"epistemicNodes\"),\n toQuestionId: v.id(\"epistemicNodes\"),\n relation: v.string(), // \"parent\" | \"child\" | \"prerequisite\" | \"parallel\" | \"contradicts\" | \"adjacent\"\n userId: v.string(),\n rationale: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, _args) => {\n // ⛔ Question-to-question edges are no longer created.\n // Raw questions are excluded from the graph once key questions exist.\n console.log(\n \"[EpistemicLinking] Question-to-question linking is deprecated and disabled.\"\n );\n return { success: true, deprecated: true };\n },\n});\n\n// =============================================================================\n// EVIDENCE-EVIDENCE LINKING\n// =============================================================================\n\n/**\n * Link two pieces of evidence with a semantic relationship\n */\nexport const linkEvidenceToEvidence = mutation({\n args: {\n fromInsightId: v.id(\"epistemicNodes\"),\n toInsightId: v.id(\"epistemicNodes\"),\n relation: v.string(), // \"corroborates\" | \"contradicts\" | \"extends\" | \"same_source\" | \"same_theme\" | \"adjacent\"\n userId: v.string(),\n rationale: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const fromInsight = await ctx.db.get(args.fromInsightId);\n const toInsight = await ctx.db.get(args.toInsightId);\n\n if (!fromInsight || !toInsight) {\n throw new Error(\"One or both insights not found\");\n }\n\n // Verify project access\n if (fromInsight.projectId) {\n const hasAccess = await checkProjectAccess(\n ctx,\n fromInsight.projectId,\n args.userId\n );\n if (!hasAccess) {\n throw new Error(\"No permission to link these evidence items\");\n }\n }\n\n const fromNode =\n fromInsight.nodeType === \"evidence\" ? (fromInsight as any) : null;\n const toNode =\n toInsight.nodeType === \"evidence\" ? (toInsight as any) : null;\n\n if (fromNode && toNode) {\n const edgeType = RELATION_TO_EDGE_TYPE[args.relation] || \"related_to\";\n const weight = getEdgeWeight(args.relation);\n\n // Phase 2C: Get layers and validate\n const fromLayer =\n fromNode.epistemicLayer || getNodeLayer(fromNode.nodeType);\n const toLayer = toNode.epistemicLayer || getNodeLayer(toNode.nodeType);\n\n const validation = validateEdgeLayers(edgeType, fromLayer, toLayer);\n if (!validation.valid) {\n console.warn(\n `[EpistemicLinking] Invalid edge blocked: ${validation.reason}`\n );\n } else if (isDeprecatedEdgeType(edgeType)) {\n console.error(\n `[EpistemicLinking] FORBIDDEN edge type '${edgeType}' blocked. Use compliant edge types.`\n );\n } else {\n const edgeGlobalId = buildDeterministicEdgeGlobalId(\n fromNode.globalId,\n toNode.globalId,\n edgeType\n );\n\n // Phase 1 (Graph Architecture): Write to Neo4j directly\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: fromNode.globalId,\n toGlobalId: toNode.globalId,\n edgeType: edgeType as\n | \"corroborates\"\n | \"extends\"\n | \"same_source_as\"\n | \"same_theme_as\",\n weight,\n context: args.rationale || `Linked as ${args.relation}`,\n topicId: fromInsight.projectId\n ? String(fromInsight.projectId)\n : undefined,\n createdBy: args.userId,\n fromNodeType: \"evidence\",\n toNodeType: \"evidence\",\n fromLayer,\n toLayer,\n });\n }\n }\n\n return { success: true };\n },\n});\n","/**\n * Epistemic Nodes - CRUD operations for the knowledge graph nodes\n *\n * Every belief, question, evidence, and source in StackOS is an epistemic node.\n * This is the canonical identity layer - these records are the source of truth.\n *\n * @see /docs/architecture/EPISTEMIC_SPINE.md\n */\n\nimport { v } from \"convex/values\";\nimport {\n checkProjectAccess,\n checkScopeAccess,\n requireProjectAccess,\n} from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\nimport type { Id } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport { getNodeLayer } from \"./helpers\";\nimport {\n assertBeliefNodeArchiveAllowed,\n assertBeliefNodeGenericUpdateAllowed,\n assertBeliefNodeHardDeleteAllowed,\n assertBeliefNodeSupersedeAllowed,\n assertBeliefNodeVerifyAllowed,\n assertOntologicalNodeArchiveAllowed,\n assertOntologicalNodeGenericCreateAllowed,\n assertOntologicalNodeGenericUpdateAllowed,\n assertOntologicalNodeSupersedeAllowed,\n} from \"./invariantEnforcement\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\n// =============================================================================\n// TYPES (Phase 2A: Layer Architecture Compliant)\n// =============================================================================\n\n/**\n * Epistemic Layer Validator\n * L4: Decisions, outcomes - audit targets\n * L3: Beliefs, questions, themes - traversal anchors\n * L2: Claims, evidence, synthesis - compression boundary\n * L1: Atomic facts, excerpts, sources - terminal leaves\n */\nexport const epistemicLayerValidator = v.union(\n v.literal(\"L4\"),\n v.literal(\"L3\"),\n v.literal(\"L2\"),\n v.literal(\"L1\"),\n v.literal(\"ontological\"),\n v.literal(\"organizational\")\n);\n\n// L4: Audit targets (decisions, outcomes)\nexport const l4NodeTypeValidator = v.union(v.literal(\"decision\"));\n\n// L3: Traversal anchors (epistemic structure)\nexport const l3NodeTypeValidator = v.union(\n v.literal(\"belief\"),\n v.literal(\"question\"),\n v.literal(\"theme\"),\n v.literal(\"deal\")\n);\n\n// L2: Compression boundary (minimum reasoning unit)\nexport const l2NodeTypeValidator = v.union(\n v.literal(\"claim\"),\n v.literal(\"evidence\"),\n v.literal(\"synthesis\")\n);\n\n// L1: Terminal leaves (non-traversable, grounding)\nexport const l1NodeTypeValidator = v.union(\n v.literal(\"atomic_fact\"),\n v.literal(\"excerpt\"),\n v.literal(\"source\")\n);\n\n// Epistemic node types (knowledge objects) - all layers\nexport const epistemicNodeTypeValidator = v.union(\n // L4: Audit targets\n v.literal(\"decision\"),\n // L3: Traversal anchors\n v.literal(\"belief\"),\n v.literal(\"question\"),\n v.literal(\"theme\"),\n v.literal(\"deal\"),\n // L2: Compression boundary\n v.literal(\"claim\"),\n v.literal(\"evidence\"),\n v.literal(\"synthesis\"),\n v.literal(\"answer\"),\n // L1: Terminal leaves\n v.literal(\"atomic_fact\"),\n v.literal(\"excerpt\"),\n v.literal(\"source\")\n);\n\n// Ontological node types (real-world entities)\nexport const ontologicalNodeTypeValidator = v.union(\n v.literal(\"company\"),\n v.literal(\"person\"),\n v.literal(\"investor\"),\n v.literal(\"function\"),\n v.literal(\"value_chain\")\n);\n\n// Organizational node types (structural containers)\nexport const organizationalNodeTypeValidator = v.union(v.literal(\"topic\"));\n\n// All node types\nexport const nodeTypeValidator = v.union(\n // L4: Audit targets\n v.literal(\"decision\"),\n // L3: Traversal anchors\n v.literal(\"belief\"),\n v.literal(\"question\"),\n v.literal(\"theme\"),\n v.literal(\"deal\"),\n // L2: Compression boundary\n v.literal(\"claim\"),\n v.literal(\"evidence\"),\n v.literal(\"synthesis\"),\n v.literal(\"answer\"),\n // L1: Terminal leaves\n v.literal(\"atomic_fact\"),\n v.literal(\"excerpt\"),\n v.literal(\"source\"),\n // Ontological\n v.literal(\"company\"),\n v.literal(\"person\"),\n v.literal(\"investor\"),\n v.literal(\"function\"),\n v.literal(\"value_chain\"),\n // Organizational\n v.literal(\"topic\")\n);\n\nexport const sourceTypeValidator = v.union(\n v.literal(\"human\"),\n v.literal(\"ai_extracted\"),\n v.literal(\"ai_generated\"),\n v.literal(\"imported\"),\n v.literal(\"system\") // System-generated (migrations, classifiers)\n);\n\nexport const statusValidator = v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\"),\n v.literal(\"deleted\")\n);\n\nexport const verificationStatusValidator = v.union(\n v.literal(\"unverified\"),\n v.literal(\"human_verified\"),\n v.literal(\"ai_verified\"),\n v.literal(\"contradicted\"),\n v.literal(\"outdated\")\n);\n\nconst optionalNodeScopeArgs = optionalScopeArgs;\n\n// =============================================================================\n// QUERIES\n// =============================================================================\n\n/**\n * Get a single node by ID\n */\nexport const get = query({\n args: { nodeId: v.id(\"epistemicNodes\") },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n return await ctx.db.get(args.nodeId);\n },\n});\n\n/**\n * Get a node by its global UUID\n */\nexport const getByGlobalId = query({\n args: { globalId: v.string() },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n return await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", args.globalId))\n .first();\n },\n});\n\n/**\n * Find nodes by content hash (for deduplication)\n */\nexport const getByContentHash = query({\n args: { contentHash: v.string() },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n return await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_contentHash\", (q) => q.eq(\"contentHash\", args.contentHash))\n .collect();\n },\n});\n\n/**\n * Get all nodes of a specific type for a project\n */\nexport const getByProjectAndType = query({\n args: {\n ...optionalNodeScopeArgs,\n nodeType: nodeTypeValidator,\n status: v.optional(statusValidator),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId && !args.topicId) {\n return [];\n }\n\n let scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>;\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch {\n return [];\n }\n\n const pageSize = clampNodeLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_NODE_PAGE_SIZE);\n const nodes = await collectScopedNodes(ctx, scope, {\n nodeType: args.nodeType,\n scanLimit,\n });\n\n // Filter by status if provided\n if (args.status) {\n return nodes\n .filter(\n (n) =>\n n.status === args.status &&\n nodeMatchesWorkspaceReasoningScope(n, scope)\n )\n .slice(0, pageSize);\n }\n\n // Default to active nodes only\n return nodes\n .filter(\n (n) =>\n n.status === \"active\" && nodeMatchesWorkspaceReasoningScope(n, scope)\n )\n .slice(0, pageSize);\n },\n});\n\n/**\n * Lightweight variant of getByProjectAndType for operational scripts.\n * Returns compact node metadata and supports limits to avoid oversized payloads.\n */\nexport const getByProjectAndTypeLite = query({\n args: {\n ...optionalNodeScopeArgs,\n nodeType: nodeTypeValidator,\n status: v.optional(statusValidator),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId && !args.topicId) {\n return [];\n }\n\n let scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>;\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch {\n return [];\n }\n\n const pageSize = clampNodeLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_NODE_PAGE_SIZE);\n const query = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(scope.topicId ? \"by_topic_type\" : \"by_project_type\", (q) =>\n scope.topicId\n ? q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", args.nodeType)\n : q.eq(\"projectId\", scope.projectId).eq(\"nodeType\", args.nodeType)\n );\n\n const nodes = await query.order(\"desc\").take(scanLimit);\n const statusFiltered = args.status\n ? nodes.filter((n) => n.status === args.status)\n : nodes.filter((n) => n.status === \"active\");\n const capped = statusFiltered.slice(0, pageSize);\n\n return capped.map((n) => ({\n _id: n._id,\n globalId: n.globalId,\n nodeType: n.nodeType,\n createdBy: n.createdBy,\n topicId: n.topicId,\n projectId: n.projectId,\n status: n.status,\n epistemicLayer: n.epistemicLayer,\n }));\n },\n});\n\nconst DEFAULT_NODE_PAGE_SIZE = 250;\nconst MAX_NODE_PAGE_SIZE = 8000;\n\ntype WorkspaceNodeScope = Awaited<ReturnType<typeof resolveTopicProjectScope>>;\ntype WorkspaceScopedNode = {\n _id: Id<\"epistemicNodes\">;\n topicId?: Id<\"topics\">;\n projectId?: string;\n status: string;\n nodeType: string;\n};\n\nfunction clampNodeLimit(\n limit: number | undefined,\n fallback = DEFAULT_NODE_PAGE_SIZE\n): number {\n if (!Number.isFinite(limit)) {\n return fallback;\n }\n return Math.max(1, Math.min(Math.floor(limit as number), MAX_NODE_PAGE_SIZE));\n}\n\nfunction dedupeWorkspaceNodes<T extends { _id: unknown }>(nodes: T[]): T[] {\n const seen = new Set<string>();\n const deduped: T[] = [];\n\n for (const node of nodes) {\n const key = String(node._id);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n deduped.push(node);\n }\n\n return deduped;\n}\n\nfunction nodeMatchesWorkspaceReasoningScope(\n node: Pick<WorkspaceScopedNode, \"topicId\" | \"projectId\">,\n scope: WorkspaceNodeScope\n): boolean {\n return (\n (scope.topicId !== undefined && node.topicId === scope.topicId) ||\n (scope.projectId !== undefined && node.projectId === scope.projectId)\n );\n}\n\nasync function collectScopedNodes(\n ctx: Parameters<typeof checkScopeAccess>[0],\n scope: WorkspaceNodeScope,\n args: {\n nodeType?: string;\n scanLimit: number;\n }\n): Promise<WorkspaceScopedNode[]> {\n const queries: Promise<WorkspaceScopedNode[]>[] = [];\n\n if (scope.topicId) {\n queries.push(\n args.nodeType\n ? (ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: any) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", args.nodeType)\n )\n .order(\"desc\")\n .take(args.scanLimit) as Promise<WorkspaceScopedNode[]>)\n : (ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic\", (q: any) => q.eq(\"topicId\", scope.topicId))\n .order(\"desc\")\n .take(args.scanLimit) as Promise<WorkspaceScopedNode[]>)\n );\n }\n\n if (scope.projectId && !scope.topicId) {\n queries.push(\n args.nodeType\n ? (ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: any) =>\n q.eq(\"topicId\", scope.projectId).eq(\"nodeType\", args.nodeType)\n )\n .order(\"desc\")\n .take(args.scanLimit) as Promise<WorkspaceScopedNode[]>)\n : (ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic\", (q: any) =>\n q.eq(\"topicId\", scope.projectId)\n )\n .order(\"desc\")\n .take(args.scanLimit) as Promise<WorkspaceScopedNode[]>)\n );\n }\n\n const combined = dedupeWorkspaceNodes((await Promise.all(queries)).flat());\n return combined.filter((node) => nodeMatchesWorkspaceReasoningScope(node, scope));\n}\n\n/**\n * Get all nodes for a project\n */\nexport const getByProject = query({\n args: {\n ...optionalNodeScopeArgs,\n userId: v.optional(v.string()),\n includeArchived: v.optional(v.boolean()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId && !args.topicId) {\n return [];\n }\n\n const pageSize = clampNodeLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_NODE_PAGE_SIZE);\n let scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>;\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch {\n return [];\n }\n\n // userId is optional — if not provided, skip access check (internal callers)\n if (args.userId) {\n const hasAccess = await checkScopeAccess(\n ctx,\n String(scope.topicId ?? scope.projectId),\n args.userId\n );\n if (!hasAccess) {\n return [];\n }\n }\n\n const nodes = await collectScopedNodes(ctx, scope, { scanLimit });\n\n if (args.includeArchived) {\n return nodes\n .filter(\n (n) =>\n n.status !== \"deleted\" && nodeMatchesWorkspaceReasoningScope(n, scope)\n )\n .slice(0, pageSize);\n }\n\n return nodes\n .filter(\n (n) =>\n n.status === \"active\" && nodeMatchesWorkspaceReasoningScope(n, scope)\n )\n .slice(0, pageSize);\n },\n});\n\nexport const getByTopic = getByProject;\n\n/**\n * List all active nodes (unscoped — for internal dev tools).\n * No project filtering, no access control.\n */\nexport const listAll = query({\n args: {\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampNodeLimit(args.limit ?? 2000);\n const scanLimit = Math.min(pageSize * 2, MAX_NODE_PAGE_SIZE * 2);\n const nodes = await ctx.db\n .query(\"epistemicNodes\")\n .order(\"desc\")\n .take(scanLimit);\n return nodes.filter((n) => n.status === \"active\").slice(0, pageSize);\n },\n});\n\n/**\n * Search nodes by text content\n */\nexport const search = query({\n args: {\n searchQuery: v.string(),\n ...optionalNodeScopeArgs,\n nodeType: v.optional(nodeTypeValidator),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampNodeLimit(args.limit, 100);\n let scope: Awaited<ReturnType<typeof resolveTopicProjectScope>> | undefined;\n\n if (args.projectId || args.topicId) {\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch {\n return [];\n }\n }\n\n const searchResults = ctx.db\n .query(\"epistemicNodes\")\n .withSearchIndex(\"search_canonicalText\", (q) => {\n let search = q.search(\"canonicalText\", args.searchQuery);\n if (scope?.topicId) {\n search = search.eq(\"topicId\", scope.topicId);\n } else if (scope?.projectId) {\n search = search.eq(\"projectId\", scope.projectId);\n }\n if (args.nodeType) {\n search = search.eq(\"nodeType\", args.nodeType);\n }\n return search.eq(\"status\", \"active\");\n });\n\n return await searchResults.take(pageSize);\n },\n});\n\n// =============================================================================\n// MUTATIONS\n// =============================================================================\n\n/**\n * Create a new epistemic node\n */\nexport const create = mutation({\n args: {\n globalId: v.string(),\n nodeType: nodeTypeValidator,\n subtype: v.optional(v.string()), // company: private|corporate|portfolio, investor: vc|lp|cvc|pe|etc\n canonicalText: v.string(),\n contentHash: v.string(),\n content: v.optional(v.string()),\n contentType: v.optional(v.string()),\n title: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n domain: v.optional(v.string()), // For companies: website domain\n metadata: v.optional(v.any()),\n externalIds: v.optional(\n v.object({\n crunchbase: v.optional(v.string()),\n linkedin: v.optional(v.string()),\n pitchbook: v.optional(v.string()),\n twitter: v.optional(v.string()),\n website: v.optional(v.string()),\n })\n ),\n sourceType: sourceTypeValidator,\n aiProvider: v.optional(v.string()),\n extractedFromNodeId: v.optional(v.id(\"epistemicNodes\")),\n confidence: v.optional(v.number()),\n verificationStatus: v.optional(verificationStatusValidator),\n ...optionalNodeScopeArgs,\n createdBy: v.string(),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n\n assertOntologicalNodeGenericCreateAllowed({\n nodeType: args.nodeType,\n mutationName: \"epistemicNodes.create\",\n });\n\n // Check for duplicate by content hash\n const existing = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_contentHash\", (q) => q.eq(\"contentHash\", args.contentHash))\n .first();\n\n if (existing && existing.status === \"active\") {\n // Return existing node ID if duplicate found\n // Caller can decide whether to create edge to existing or error\n return { nodeId: existing._id, isDuplicate: true };\n }\n\n // Phase 2B: Derive epistemic layer from nodeType\n const epistemicLayer = getNodeLayer(args.nodeType);\n const resolvedScope =\n args.topicId || args.projectId\n ? await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n })\n : undefined;\n\n if (resolvedScope) {\n assertWorkspaceScopedEpistemicNodeScope({\n scope: resolvedScope,\n nodeType: args.nodeType,\n mutationName: \"epistemicNodes.create\",\n });\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: {\n tenantId: resolvedScope.tenantId,\n workspaceId: resolvedScope.workspaceId,\n nodeType: args.nodeType,\n epistemicLayer,\n },\n mutationName: \"epistemicNodes.create\",\n });\n } else if (epistemicLayer !== \"ontological\") {\n throw new Error(\n \"Workspace-scoped reasoning isolation requires topicId or projectId for non-ontological node creation.\"\n );\n }\n\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId: args.globalId,\n nodeType: args.nodeType,\n epistemicLayer, // Phase 2B: Auto-derived from nodeType\n subtype: args.subtype,\n canonicalText: args.canonicalText,\n contentHash: args.contentHash,\n content: args.content,\n contentType: args.contentType,\n title: args.title,\n tags: args.tags,\n domain: args.domain,\n metadata: args.metadata,\n externalIds: args.externalIds,\n sourceType: args.sourceType,\n aiProvider: args.aiProvider,\n extractedFromNodeId: args.extractedFromNodeId,\n confidence: args.confidence,\n verificationStatus: args.verificationStatus ?? \"unverified\",\n status: \"active\",\n topicId: resolvedScope?.topicId ?? args.topicId,\n projectId: resolvedScope?.projectId ?? args.projectId,\n tenantId: resolvedScope?.tenantId,\n workspaceId: resolvedScope?.workspaceId,\n createdBy: args.createdBy,\n createdAt: now,\n updatedAt: now,\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"node\",\n entityId: String(nodeId),\n changeType: \"created\",\n changedAt: now,\n changedBy: args.createdBy,\n isAgent: false,\n newState: {\n nodeType: args.nodeType,\n canonicalText: args.canonicalText.slice(0, 200),\n status: \"active\",\n verificationStatus: args.verificationStatus ?? \"unverified\",\n confidence: args.confidence,\n },\n projectId: resolvedScope?.projectId ?? args.projectId,\n triggeringAction: \"epistemicNodes.create\",\n });\n\n // Schedule Neo4j sync (fire-and-forget)\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n return { nodeId, isDuplicate: false };\n },\n});\n\n/**\n * Update an existing node\n */\nexport const update = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n subtype: v.optional(v.string()),\n canonicalText: v.optional(v.string()),\n contentHash: v.optional(v.string()),\n content: v.optional(v.string()),\n contentType: v.optional(v.string()),\n title: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n domain: v.optional(v.string()),\n metadata: v.optional(v.any()),\n externalIds: v.optional(\n v.object({\n crunchbase: v.optional(v.string()),\n linkedin: v.optional(v.string()),\n pitchbook: v.optional(v.string()),\n twitter: v.optional(v.string()),\n website: v.optional(v.string()),\n })\n ),\n confidence: v.optional(v.number()),\n verificationStatus: v.optional(verificationStatusValidator),\n status: v.optional(statusValidator),\n userId: v.optional(v.string()),\n // EK-4: SL opinion fields (Kernel v2)\n opinion_b: v.optional(v.number()),\n opinion_d: v.optional(v.number()),\n opinion_u: v.optional(v.number()),\n opinion_a: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const { nodeId, userId, ...updates } = args;\n\n const node = await ctx.db.get(nodeId);\n if (!node) {\n throw new Error(\"Node not found\");\n }\n\n // Access control\n if (node.projectId && userId) {\n await requireProjectAccess(ctx, node.projectId, userId);\n }\n\n // Remove undefined values\n const cleanUpdates: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(updates)) {\n if (value !== undefined) {\n cleanUpdates[key] = value;\n }\n }\n\n if (node.nodeType === \"belief\") {\n assertBeliefNodeGenericUpdateAllowed({\n node,\n updates: cleanUpdates,\n mutationName: \"epistemicNodes.update\",\n });\n }\n assertOntologicalNodeGenericUpdateAllowed({\n node,\n mutationName: \"epistemicNodes.update\",\n });\n\n cleanUpdates.updatedAt = Date.now();\n\n await ctx.db.patch(nodeId, cleanUpdates);\n\n // Audit log\n if (node.projectId) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"node\",\n entityId: String(nodeId),\n changeType: \"updated\",\n changedAt: Date.now(),\n changedBy: userId || node.createdBy,\n isAgent: false,\n previousState: {\n status: node.status,\n confidence: node.confidence,\n canonicalText: node.canonicalText?.slice(0, 200),\n },\n newState: cleanUpdates,\n projectId: node.projectId,\n });\n }\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n return { success: true };\n },\n});\n\n/**\n * Supersede a node with a new version\n * Creates a new node and marks the old one as superseded\n *\n * Phase 2B: Supersession only allowed within the same layer\n * (e.g., a belief can only supersede another belief)\n */\nexport const supersede = mutation({\n args: {\n oldNodeId: v.id(\"epistemicNodes\"),\n newGlobalId: v.string(),\n newCanonicalText: v.string(),\n newContentHash: v.string(),\n createdBy: v.string(),\n reason: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const oldNode = await ctx.db.get(args.oldNodeId);\n if (!oldNode) {\n throw new Error(\"Node not found\");\n }\n\n // Access control\n if (oldNode.projectId) {\n await requireProjectAccess(ctx, oldNode.projectId, args.createdBy);\n }\n\n assertBeliefNodeSupersedeAllowed({\n node: oldNode,\n mutationName: \"epistemicNodes.supersede\",\n });\n assertOntologicalNodeSupersedeAllowed({\n node: oldNode,\n mutationName: \"epistemicNodes.supersede\",\n });\n\n const now = Date.now();\n\n // Phase 2B: Get the layer (use existing or derive from nodeType)\n const epistemicLayer =\n oldNode.epistemicLayer || getNodeLayer(oldNode.nodeType);\n\n // Create new node inheriting most properties from old (including layer)\n const newNodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId: args.newGlobalId,\n nodeType: oldNode.nodeType,\n epistemicLayer, // Phase 2B: Inherit layer (supersession is same-layer only)\n canonicalText: args.newCanonicalText,\n contentHash: args.newContentHash,\n content: oldNode.content,\n contentType: oldNode.contentType,\n title: oldNode.title,\n tags: oldNode.tags,\n metadata: oldNode.metadata,\n sourceType: \"human\", // Supersession is always human-initiated\n confidence: oldNode.confidence,\n verificationStatus: \"unverified\", // New version needs re-verification\n status: \"active\",\n projectId: oldNode.projectId,\n createdBy: args.createdBy,\n createdAt: now,\n updatedAt: now,\n });\n\n // Mark old node as superseded\n await ctx.db.patch(args.oldNodeId, {\n status: \"superseded\",\n supersededBy: newNodeId,\n updatedAt: now,\n });\n\n // Audit log\n if (oldNode.projectId) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"node\",\n entityId: String(args.oldNodeId),\n changeType: \"superseded\",\n changedAt: now,\n changedBy: args.createdBy,\n isAgent: false,\n previousState: {\n status: oldNode.status,\n canonicalText: oldNode.canonicalText?.slice(0, 200),\n },\n newState: {\n status: \"superseded\",\n supersededBy: String(newNodeId),\n newCanonicalText: args.newCanonicalText.slice(0, 200),\n },\n rationale: args.reason,\n projectId: oldNode.projectId,\n });\n }\n\n return { newNodeId, oldNodeId: args.oldNodeId };\n },\n});\n\n/**\n * Archive a node (soft delete)\n *\n * INVARIANT: Belief nodes cannot be archived per Epistemic Invariant #1.\n * For belief nodes, this uses \"superseded\" status instead.\n */\nexport const archive = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n userId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.nodeId);\n if (!node) {\n throw new Error(\"Node not found\");\n }\n\n // Access control\n if (node.projectId && args.userId) {\n await requireProjectAccess(ctx, node.projectId, args.userId);\n }\n\n assertBeliefNodeArchiveAllowed({\n node,\n mutationName: \"epistemicNodes.archive\",\n });\n assertOntologicalNodeArchiveAllowed({\n node,\n mutationName: \"epistemicNodes.archive\",\n });\n\n await ctx.db.patch(args.nodeId, {\n status: \"archived\",\n updatedAt: Date.now(),\n });\n\n // Audit log\n if (node.projectId) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"node\",\n entityId: String(args.nodeId),\n changeType: \"archived\",\n changedAt: Date.now(),\n changedBy: args.userId || node.createdBy,\n isAgent: false,\n previousState: { status: node.status },\n newState: { status: \"archived\" },\n projectId: node.projectId,\n });\n }\n\n return { success: true, effectiveStatus: \"archived\" };\n },\n});\n\n/**\n * Permanently delete a node (hard delete)\n * INTERNAL ONLY - not exposed to clients\n * Use with extreme caution - prefer archive for most cases\n * Violates Lucern Invariant #1 (append-only) - only use for data cleanup/migration\n */\nexport const hardDelete = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n reason: v.string(), // Required: document why this is being hard-deleted\n allowBeliefHardDelete: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.nodeId);\n if (!node) {\n return { success: false, error: \"Node not found\" };\n }\n\n assertBeliefNodeHardDeleteAllowed({\n node,\n allowBeliefHardDelete: args.allowBeliefHardDelete ?? false,\n reason: args.reason,\n mutationName: \"epistemicNodes.hardDelete\",\n });\n\n // Log the deletion to audit before deleting\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"node\",\n entityId: args.nodeId as string,\n changeType: \"deleted\",\n projectId: node.projectId,\n changedBy: \"system:hard_delete\",\n changedAt: Date.now(),\n isAgent: false,\n previousState: {\n nodeType: node.nodeType,\n title: node.title || node.canonicalText?.slice(0, 100),\n status: node.status,\n },\n rationale: args.reason,\n });\n\n // First, delete all edges referencing this node\n const fromEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from\", (q) => q.eq(\"fromNodeId\", args.nodeId))\n .collect();\n\n const toEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q) => q.eq(\"toNodeId\", args.nodeId))\n .collect();\n\n const uniqueEdges = new Map<string, (typeof fromEdges)[number]>();\n for (const edge of [...fromEdges, ...toEdges]) {\n uniqueEdges.set(edge.globalId, edge);\n }\n\n for (const edge of uniqueEdges.values()) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n }\n\n // Then delete the node\n await ctx.db.delete(args.nodeId);\n\n return {\n success: true,\n deletedEdgeCount: uniqueEdges.size,\n };\n },\n});\n\n/**\n * Update verification status\n */\nexport const verify = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n verificationStatus: verificationStatusValidator,\n confidence: v.optional(v.number()),\n userId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.nodeId);\n if (!node) {\n throw new Error(\"Node not found\");\n }\n\n assertBeliefNodeVerifyAllowed({\n node,\n confidence: args.confidence,\n mutationName: \"epistemicNodes.verify\",\n });\n\n const updates: Record<string, unknown> = {\n verificationStatus: args.verificationStatus,\n updatedAt: Date.now(),\n };\n\n if (args.confidence !== undefined) {\n updates.confidence = args.confidence;\n }\n\n await ctx.db.patch(args.nodeId, updates);\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"node\",\n entityId: String(args.nodeId),\n changeType: \"updated\",\n changedAt: Date.now(),\n changedBy: args.userId ?? node.createdBy ?? \"system:verification\",\n isAgent: false,\n previousState: {\n verificationStatus: node.verificationStatus,\n confidence: node.confidence,\n },\n newState: {\n verificationStatus: args.verificationStatus,\n confidence: args.confidence ?? node.confidence,\n },\n projectId: node.projectId,\n triggeringAction: \"epistemicNodes.verify\",\n });\n\n return { success: true };\n },\n});\n\n/**\n * Batch create nodes (for migrations or bulk imports)\n * Phase 2B: Auto-derives epistemicLayer from nodeType\n */\nexport const batchCreate = mutation({\n args: {\n nodes: v.array(\n v.object({\n ...optionalNodeScopeArgs,\n globalId: v.string(),\n nodeType: nodeTypeValidator,\n subtype: v.optional(v.string()),\n canonicalText: v.string(),\n contentHash: v.string(),\n content: v.optional(v.string()),\n contentType: v.optional(v.string()),\n title: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n domain: v.optional(v.string()),\n metadata: v.optional(v.any()),\n externalIds: v.optional(\n v.object({\n crunchbase: v.optional(v.string()),\n linkedin: v.optional(v.string()),\n pitchbook: v.optional(v.string()),\n twitter: v.optional(v.string()),\n website: v.optional(v.string()),\n })\n ),\n sourceType: sourceTypeValidator,\n aiProvider: v.optional(v.string()),\n confidence: v.optional(v.number()),\n verificationStatus: v.optional(verificationStatusValidator),\n createdBy: v.string(),\n })\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n const results: Array<{ globalId: string; nodeId: Id<\"epistemicNodes\"> }> =\n [];\n\n for (const node of args.nodes) {\n assertOntologicalNodeGenericCreateAllowed({\n nodeType: node.nodeType,\n mutationName: \"epistemicNodes.batchCreate\",\n });\n\n // Phase 2B: Derive epistemic layer from nodeType\n const epistemicLayer = getNodeLayer(node.nodeType);\n const resolvedScope =\n node.topicId || node.projectId\n ? await resolveTopicProjectScope(ctx, {\n topicId: node.topicId,\n projectId: node.projectId,\n }).catch(() => undefined)\n : undefined;\n\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n ...node,\n epistemicLayer, // Phase 2B: Auto-derived from nodeType\n verificationStatus: node.verificationStatus ?? \"unverified\",\n status: \"active\",\n topicId: resolvedScope?.topicId ?? node.topicId,\n projectId: resolvedScope?.projectId ?? node.projectId,\n createdAt: now,\n updatedAt: now,\n });\n\n results.push({ globalId: node.globalId, nodeId });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"node\",\n entityId: String(nodeId),\n changeType: \"created\",\n changedAt: now,\n changedBy: node.createdBy,\n isAgent: false,\n newState: {\n nodeType: node.nodeType,\n canonicalText: node.canonicalText.slice(0, 200),\n status: \"active\",\n verificationStatus: node.verificationStatus ?? \"unverified\",\n confidence: node.confidence,\n },\n projectId: resolvedScope?.projectId ?? node.projectId,\n triggeringAction: \"epistemicNodes.batchCreate\",\n });\n\n // Schedule Neo4j sync for each node\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n }\n\n return { created: results.length, results };\n },\n});\n\n// =============================================================================\n// INTERNAL MUTATIONS (for orchestrating actions - Neo4j Edge API)\n// =============================================================================\n\n/**\n * Internal mutation to create a node with syncStatus tracking\n * Used by neo4jEdgeAPI.createNodeWithEdges for atomic node+edge creation\n */\nexport const createInternal = internalMutation({\n args: {\n ...optionalNodeScopeArgs,\n globalId: v.string(),\n nodeType: nodeTypeValidator,\n subtype: v.optional(v.string()),\n canonicalText: v.string(),\n contentHash: v.optional(v.string()), // Optional - will be generated if not provided\n content: v.optional(v.string()),\n contentType: v.optional(v.string()),\n title: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n domain: v.optional(v.string()),\n metadata: v.optional(v.any()),\n externalIds: v.optional(\n v.object({\n crunchbase: v.optional(v.string()),\n linkedin: v.optional(v.string()),\n pitchbook: v.optional(v.string()),\n twitter: v.optional(v.string()),\n website: v.optional(v.string()),\n })\n ),\n sourceType: v.optional(sourceTypeValidator),\n aiProvider: v.optional(v.string()),\n extractedFromNodeId: v.optional(v.id(\"epistemicNodes\")),\n confidence: v.optional(v.number()),\n verificationStatus: v.optional(verificationStatusValidator),\n createdBy: v.string(),\n // Neo4j sync status tracking\n syncStatus: v.optional(\n v.union(\n v.literal(\"synced\"),\n v.literal(\"pending_edges\"),\n v.literal(\"edge_creation_failed\")\n )\n ),\n epistemicLayer: v.optional(v.string()),\n status: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n const resolvedScope =\n args.topicId || args.projectId\n ? await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n }).catch(() => undefined)\n : undefined;\n\n // Generate content hash if not provided\n const contentHash =\n args.contentHash || `${args.nodeType}:${args.canonicalText}`.slice(0, 64);\n\n // Phase 2B: Derive epistemic layer from nodeType (or use provided)\n const epistemicLayer = (args.epistemicLayer ||\n getNodeLayer(args.nodeType)) as \"L4\" | \"L3\" | \"L2\" | \"L1\" | \"ontological\";\n\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId: args.globalId,\n nodeType: args.nodeType,\n epistemicLayer,\n subtype: args.subtype,\n canonicalText: args.canonicalText,\n contentHash,\n content: args.content,\n contentType: args.contentType,\n title: args.title,\n tags: args.tags,\n domain: args.domain,\n metadata: args.metadata,\n externalIds: args.externalIds,\n sourceType: args.sourceType ?? \"human\",\n aiProvider: args.aiProvider,\n extractedFromNodeId: args.extractedFromNodeId,\n confidence: args.confidence,\n verificationStatus: args.verificationStatus ?? \"unverified\",\n status: (args.status ?? \"active\") as\n | \"active\"\n | \"superseded\"\n | \"archived\"\n | \"deleted\",\n topicId: resolvedScope?.topicId ?? args.topicId,\n projectId: resolvedScope?.projectId ?? args.projectId,\n createdBy: args.createdBy,\n createdAt: now,\n updatedAt: now,\n // Neo4j sync status\n syncStatus: args.syncStatus,\n });\n\n // Schedule Neo4j node sync (fire-and-forget)\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n return nodeId;\n },\n});\n\n/**\n * Internal query to get a node by ID\n * Used by neo4jEdgeAPI for reading node data\n */\nexport const getInternal = internalQuery({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n return await ctx.db.get(args.nodeId);\n },\n});\n\n/**\n * Update the sync status of a node (for Neo4j edge sync tracking)\n * Used by neo4jEdgeAPI to mark nodes as synced or failed\n */\nexport const updateSyncStatus = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n syncStatus: v.union(\n v.literal(\"synced\"),\n v.literal(\"pending_edges\"),\n v.literal(\"edge_creation_failed\")\n ),\n syncError: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const updates: {\n syncStatus: \"synced\" | \"pending_edges\" | \"edge_creation_failed\";\n syncError?: string;\n updatedAt: number;\n } = {\n syncStatus: args.syncStatus,\n updatedAt: Date.now(),\n };\n\n if (args.syncError !== undefined) {\n updates.syncError = args.syncError;\n }\n\n await ctx.db.patch(args.nodeId, updates);\n return { success: true };\n },\n});\n\n/**\n * Backfill: move nodes from one topicId to another.\n * Used for data migration when nodes are accidentally scoped to Root.\n */\nexport const backfillTopicId = internalMutation({\n args: {\n nodeIds: v.array(v.id(\"epistemicNodes\")),\n newTopicId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n let patched = 0;\n for (const nodeId of args.nodeIds) {\n const node = await ctx.db.get(nodeId);\n if (!node) {\n continue;\n }\n await ctx.db.patch(nodeId, {\n topicId: args.newTopicId,\n updatedAt: Date.now(),\n });\n patched++;\n }\n return { patched, total: args.nodeIds.length };\n },\n});\n\n/**\n * Find nodes that need edge sync retry\n * Used by background reconciliation job\n */\nexport const getNodesPendingEdgeSync = internalQuery({\n args: {\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = args.limit ?? 100;\n\n return await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_syncStatus\", (q) =>\n q.eq(\"syncStatus\", \"edge_creation_failed\")\n )\n .take(limit);\n },\n});\n","/**\n * helpers module implementation.\n */\n\nimport { type Id, internal, type MutationCtx } from \"./convex\";\nimport {\n type EpistemicLayer,\n validateEdgeLayers,\n} from \"./edgeValidation\";\nimport { generateGlobalId } from \"./globalId\";\nimport { getNodeLayer } from \"./graphTypes\";\n\nexport { getNodeLayer };\nexport type { EpistemicLayer };\n\nexport async function createEpistemicEdge(\n ctx: MutationCtx,\n params: {\n fromNodeId: Id<\"epistemicNodes\">;\n toNodeId: Id<\"epistemicNodes\">;\n edgeType: string;\n weight?: number;\n confidence?: number;\n context?: string;\n projectId?: string;\n createdBy: string;\n skipLayerValidation?: boolean;\n }\n): Promise<string> {\n const globalId = generateGlobalId();\n\n const fromNode = await ctx.db.get(params.fromNodeId);\n const toNode = await ctx.db.get(params.toNodeId);\n\n if (!fromNode || !toNode) {\n throw new Error(\"One or both nodes not found\");\n }\n\n const fromLayer = fromNode.epistemicLayer || getNodeLayer(fromNode.nodeType);\n const toLayer = toNode.epistemicLayer || getNodeLayer(toNode.nodeType);\n\n if (!params.skipLayerValidation) {\n const validation = validateEdgeLayers(\n params.edgeType,\n fromLayer as EpistemicLayer,\n toLayer as EpistemicLayer\n );\n if (!validation.valid) {\n throw new Error(\n `[EdgeValidation] Invalid edge: ${validation.reason}. ` +\n `Attempted: ${params.edgeType} from ${fromNode.nodeType}(${fromLayer}) → ${toNode.nodeType}(${toLayer})`\n );\n }\n }\n\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId,\n fromGlobalId: fromNode.globalId,\n toGlobalId: toNode.globalId,\n edgeType: params.edgeType as any,\n weight: params.weight,\n confidence: params.confidence,\n context: params.context,\n createdBy: params.createdBy,\n topicId: params.projectId ? String(params.projectId) : undefined,\n fromNodeType: fromNode.nodeType,\n toNodeType: toNode.nodeType,\n fromLayer,\n toLayer,\n });\n\n return globalId;\n}\n","/** Invariant error helpers that protect belief lifecycle mutations. */\nimport { hasResolvedPredictionOutcome } from \"./beliefLifecycle\";\n\ntype StructuredInvariantError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype BeliefNodeLike = {\n _id?: string;\n nodeType?: unknown;\n confidence?: unknown;\n metadata?: unknown;\n predictionMeta?: unknown;\n};\n\ntype InvariantArgs = {\n message: string;\n invariantCode:\n | \"belief.formulation_immutable_after_scoring\"\n | \"belief.confidence_append_only\"\n | \"belief.status_transition_requires_belief_api\"\n | \"belief.lineage_requires_fork_belief\"\n | \"belief.hard_delete_forbidden\"\n | \"entity.create_requires_entity_lifecycle\"\n | \"entity.update_requires_entity_lifecycle\"\n | \"entity.archive_requires_entity_lifecycle\"\n | \"entity.supersede_requires_entity_lifecycle\";\n suggestion: string;\n status?: number;\n code?: string;\n details?: unknown;\n};\n\nconst FORBIDDEN_GENERIC_BELIEF_METADATA_KEYS = new Set([\n \"beliefStatus\",\n \"epistemicStatus\",\n \"forkedBy\",\n \"forkedFrom\",\n \"forkReason\",\n \"forkTimestamp\",\n \"status\",\n \"supersededBy\",\n \"supersedes\",\n]);\n\nconst ONTOLOGICAL_NODE_TYPES = new Set([\n \"company\",\n \"person\",\n \"investor\",\n \"function\",\n \"value_chain\",\n]);\n\nfunction throwInvariantError(args: InvariantArgs): never {\n const error = new Error(args.message) as StructuredInvariantError;\n error.status = args.status ?? 409;\n error.code = args.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 isBeliefNode(node: BeliefNodeLike | null | undefined): boolean {\n return node?.nodeType === \"belief\";\n}\n\nexport function isOntologicalNode(\n node: BeliefNodeLike | null | undefined\n): boolean {\n return (\n typeof node?.nodeType === \"string\" && ONTOLOGICAL_NODE_TYPES.has(node.nodeType)\n );\n}\n\nexport function isScoredBeliefNode(node: BeliefNodeLike): boolean {\n if (!isBeliefNode(node)) {\n return false;\n }\n\n const metadata =\n node.metadata && typeof node.metadata === \"object\"\n ? (node.metadata as Record<string, unknown>)\n : undefined;\n\n const numericConfidence =\n typeof node.confidence === \"number\" && Number.isFinite(node.confidence);\n if (numericConfidence) {\n return true;\n }\n\n return (\n hasResolvedPredictionOutcome(node.predictionMeta) ||\n hasResolvedPredictionOutcome(metadata?.predictionMeta)\n );\n}\n\nfunction getForbiddenMetadataKeys(metadata: unknown): string[] {\n if (!metadata || typeof metadata !== \"object\" || Array.isArray(metadata)) {\n return [];\n }\n\n return Object.keys(metadata).filter((key) =>\n FORBIDDEN_GENERIC_BELIEF_METADATA_KEYS.has(key)\n );\n}\n\nexport function assertBeliefNodeGenericUpdateAllowed(args: {\n node: BeliefNodeLike;\n updates: Record<string, unknown>;\n mutationName: string;\n}): void {\n if (!isBeliefNode(args.node)) {\n return;\n }\n\n if (Object.hasOwn(args.updates, \"confidence\")) {\n throwInvariantError({\n message:\n \"Belief confidence is append-only. Generic node updates cannot set confidence directly.\",\n invariantCode: \"belief.confidence_append_only\",\n suggestion:\n \"Use epistemicBeliefs.modulateConfidence() so the beliefConfidence ledger and audit trail are updated together.\",\n details: { mutationName: args.mutationName, nodeId: args.node._id },\n });\n }\n\n if (Object.hasOwn(args.updates, \"status\")) {\n throwInvariantError({\n message:\n \"Belief status transitions must use the dedicated belief lifecycle APIs.\",\n invariantCode: \"belief.status_transition_requires_belief_api\",\n suggestion:\n \"Use epistemicBeliefs.updateStatus() or epistemicBeliefs.archive() so status transitions emit the correct audit event.\",\n details: { mutationName: args.mutationName, nodeId: args.node._id },\n });\n }\n\n const forbiddenMetadataKeys = getForbiddenMetadataKeys(args.updates.metadata);\n if (forbiddenMetadataKeys.length > 0) {\n throwInvariantError({\n message:\n \"Belief lineage and lifecycle metadata cannot be rewritten through generic node updates.\",\n invariantCode: \"belief.lineage_requires_fork_belief\",\n suggestion:\n \"Use epistemicBeliefs.forkBelief() for lineage changes and dedicated belief lifecycle mutations for status changes.\",\n details: {\n mutationName: args.mutationName,\n nodeId: args.node._id,\n forbiddenMetadataKeys,\n },\n });\n }\n\n if (\n isScoredBeliefNode(args.node) &&\n (Object.hasOwn(args.updates, \"canonicalText\") ||\n Object.hasOwn(args.updates, \"contentHash\"))\n ) {\n throwInvariantError({\n message:\n \"Cannot refine a scored belief in place. Scored formulations are immutable.\",\n invariantCode: \"belief.formulation_immutable_after_scoring\",\n suggestion:\n \"Use epistemicBeliefs.forkBelief() to evolve the formulation while preserving lineage.\",\n details: { mutationName: args.mutationName, nodeId: args.node._id },\n });\n }\n}\n\nexport function assertBeliefNodeArchiveAllowed(args: {\n node: BeliefNodeLike;\n mutationName: string;\n}): void {\n if (!isBeliefNode(args.node)) {\n return;\n }\n\n throwInvariantError({\n message:\n \"Belief archiving must go through the dedicated belief lifecycle API.\",\n invariantCode: \"belief.status_transition_requires_belief_api\",\n suggestion:\n \"Use epistemicBeliefs.archive() so the belief lifecycle audit trail stays consistent.\",\n details: { mutationName: args.mutationName, nodeId: args.node._id },\n });\n}\n\nexport function assertBeliefNodeVerifyAllowed(args: {\n node: BeliefNodeLike;\n confidence: number | undefined;\n mutationName: string;\n}): void {\n if (!isBeliefNode(args.node) || args.confidence === undefined) {\n return;\n }\n\n throwInvariantError({\n message:\n \"Belief verification cannot set confidence directly. Confidence changes must stay append-only.\",\n invariantCode: \"belief.confidence_append_only\",\n suggestion:\n \"Call epistemicBeliefs.modulateConfidence() after verification so the confidence history is preserved.\",\n details: { mutationName: args.mutationName, nodeId: args.node._id },\n });\n}\n\nexport function assertBeliefNodeSupersedeAllowed(args: {\n node: BeliefNodeLike;\n mutationName: string;\n}): void {\n if (!isBeliefNode(args.node)) {\n return;\n }\n\n throwInvariantError({\n message:\n \"Belief lineage changes must use forkBelief(), not the generic supersede path.\",\n invariantCode: \"belief.lineage_requires_fork_belief\",\n suggestion:\n \"Use epistemicBeliefs.forkBelief() so the child belief, supersedes edge, and audit trail are created together.\",\n details: { mutationName: args.mutationName, nodeId: args.node._id },\n });\n}\n\nexport function assertBeliefNodeHardDeleteAllowed(args: {\n node: BeliefNodeLike;\n allowBeliefHardDelete: boolean;\n reason: string;\n mutationName: string;\n}): void {\n if (!isBeliefNode(args.node)) {\n return;\n }\n\n if (!args.allowBeliefHardDelete) {\n throwInvariantError({\n message:\n \"Belief hard delete is forbidden by default. Beliefs must retain lineage and audit history.\",\n invariantCode: \"belief.hard_delete_forbidden\",\n suggestion:\n \"Use epistemicBeliefs.archive() or epistemicBeliefs.forkBelief() instead. Only migration repair flows may opt into hard delete explicitly.\",\n details: { mutationName: args.mutationName, nodeId: args.node._id },\n });\n }\n\n if (!args.reason.trim().toLowerCase().startsWith(\"migration:\")) {\n throwInvariantError({\n message:\n \"Belief hard delete bypasses require a migration-scoped rationale.\",\n invariantCode: \"belief.hard_delete_forbidden\",\n suggestion:\n 'Retry with allowBeliefHardDelete: true and a reason starting with \"migration:\" only for one-off data repair flows.',\n details: {\n mutationName: args.mutationName,\n nodeId: args.node._id,\n reason: args.reason,\n },\n });\n }\n}\n\nexport function assertOntologicalNodeGenericCreateAllowed(args: {\n nodeType: string;\n mutationName: string;\n}): void {\n if (!ONTOLOGICAL_NODE_TYPES.has(args.nodeType)) {\n return;\n }\n\n throwInvariantError({\n message:\n \"Ontological entities must be created through the dedicated entity lifecycle API.\",\n invariantCode: \"entity.create_requires_entity_lifecycle\",\n suggestion:\n \"Use entityLifecycle.createEntity() so tenant-global canonical scope and deduplication are enforced.\",\n details: {\n mutationName: args.mutationName,\n nodeType: args.nodeType,\n },\n });\n}\n\nexport function assertOntologicalNodeGenericUpdateAllowed(args: {\n node: BeliefNodeLike;\n mutationName: string;\n}): void {\n if (!isOntologicalNode(args.node)) {\n return;\n }\n\n throwInvariantError({\n message:\n \"Ontological entities must be updated through the dedicated entity lifecycle API.\",\n invariantCode: \"entity.update_requires_entity_lifecycle\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes() so canonical entity mutations stay type-safe and audited.\",\n details: {\n mutationName: args.mutationName,\n nodeId: args.node._id,\n nodeType: args.node.nodeType,\n },\n });\n}\n\nexport function assertOntologicalNodeArchiveAllowed(args: {\n node: BeliefNodeLike;\n mutationName: string;\n}): void {\n if (!isOntologicalNode(args.node)) {\n return;\n }\n\n throwInvariantError({\n message:\n \"Ontological entities must be archived through the dedicated entity lifecycle API.\",\n invariantCode: \"entity.archive_requires_entity_lifecycle\",\n suggestion:\n \"Use entityLifecycle.archiveEntity() so entity archival emits the correct audit trail and review hooks.\",\n details: {\n mutationName: args.mutationName,\n nodeId: args.node._id,\n nodeType: args.node.nodeType,\n },\n });\n}\n\nexport function assertOntologicalNodeSupersedeAllowed(args: {\n node: BeliefNodeLike;\n mutationName: string;\n}): void {\n if (!isOntologicalNode(args.node)) {\n return;\n }\n\n throwInvariantError({\n message:\n \"Ontological entities do not use the generic supersede path.\",\n invariantCode: \"entity.supersede_requires_entity_lifecycle\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes() to edit an entity in place or entityLifecycle.mergeEntities() to collapse duplicates.\",\n details: {\n mutationName: args.mutationName,\n nodeId: args.node._id,\n nodeType: args.node.nodeType,\n },\n });\n}\n","/**\n * Epistemic Questions API\n *\n * Clean API for managing questions in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces questions.ts for CREATE operations.\n *\n * Key differences from questions.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyQuestionId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { v } from \"convex/values\";\nimport {\n checkProjectAccess,\n checkScopeAccess,\n} from \"@lucern/access-control/access\";\nimport {\n canAudienceClassAccess,\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { listAudienceRegistryRows } from \"@lucern/access-control/audienceRegistry\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\nimport type { Doc, Id } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { generateGlobalId } from \"./globalId\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n nodeMatchesWorkspaceReasoningScope,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\nimport { resolveWorkflowBridgeDoc } from \"../../worktrees/src/v1/engine/worktreeWorkflowBridge\";\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction generateContentHash(text: string): string {\n const content = `question:${text.trim().toLowerCase().replace(/\\s+/g, \" \")}`;\n let hash = 5381;\n for (let i = 0; i < content.length; i++) {\n hash = (hash << 5) + hash + content.charCodeAt(i);\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\nfunction buildTestsEdgeGlobalId(\n fromGlobalId: string,\n toGlobalId: string\n): string {\n return `edge-${fromGlobalId}-tests-${toGlobalId}`;\n}\n\nasync function markProjectGraphDirty(\n ctx: any,\n projectId: string | undefined | null,\n topicId?: string | undefined | null\n): Promise<void> {\n const normalizedProjectId =\n typeof projectId === \"string\" && projectId.trim().length > 0\n ? projectId\n : undefined;\n const normalizedTopicId =\n typeof topicId === \"string\" && topicId.trim().length > 0\n ? topicId\n : undefined;\n\n if (!normalizedProjectId && !normalizedTopicId) {\n return;\n }\n\n if (normalizedProjectId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n {\n projectId: normalizedProjectId,\n }\n );\n }\n if (normalizedTopicId) {\n await ctx.scheduler.runAfter(\n 0,\n (internal.graphAnalysisCache as any).markCacheStaleByTopic,\n {\n topicId: normalizedTopicId,\n }\n );\n }\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n normalizedTopicId ?? normalizedProjectId!,\n {\n lastActivityAt: Date.now(),\n }\n );\n}\n\n// Valid question categories (pillars)\ntype ValidCategory =\n | \"market\"\n | \"competition\"\n | \"product\"\n | \"team\"\n | \"financials\"\n | \"deal\"\n | \"risks\"\n | \"other\";\n\nfunction normalizeCategory(category?: string): ValidCategory {\n if (!category) {\n return \"other\";\n }\n const lower = category.toLowerCase();\n // Handle \"financial\" → \"financials\" mapping\n if (lower === \"financial\") {\n return \"financials\";\n }\n const validCategories: ValidCategory[] = [\n \"market\",\n \"competition\",\n \"product\",\n \"team\",\n \"financials\",\n \"deal\",\n \"risks\",\n ];\n return (validCategories.find((c) => lower.includes(c)) ||\n \"other\") as ValidCategory;\n}\n\ntype QuestionNodeDoc = Doc<\"epistemicNodes\">;\nconst DEFAULT_QUESTION_PAGE_SIZE = 250;\nconst MAX_QUESTION_PAGE_SIZE = 1000;\ntype QuestionScopeArgs = {\n projectId?: string | null;\n topicId?: string | null;\n};\nfunction clampQuestionLimit(\n limit: number | undefined,\n fallback = DEFAULT_QUESTION_PAGE_SIZE\n): number {\n if (!Number.isFinite(limit)) {\n return fallback;\n }\n return Math.max(\n 1,\n Math.min(Math.floor(limit as number), MAX_QUESTION_PAGE_SIZE)\n );\n}\n\nfunction dedupeQuestionNodes(nodes: QuestionNodeDoc[]): QuestionNodeDoc[] {\n const seen = new Set<string>();\n const deduped: QuestionNodeDoc[] = [];\n for (const node of nodes) {\n const id = String(node._id);\n if (seen.has(id)) {\n continue;\n }\n seen.add(id);\n deduped.push(node);\n }\n return deduped;\n}\n\nfunction normalizeQuestionTopicId(\n topicId: string | undefined | null\n): string | undefined {\n return typeof topicId === \"string\" && topicId.trim().length > 0\n ? topicId\n : undefined;\n}\n\nfunction resolveQuestionScopeId(scope: {\n projectId?: string | undefined;\n topicId?: string | undefined;\n}): string | undefined {\n return normalizeQuestionTopicId(scope.topicId) ?? scope.projectId ?? undefined;\n}\n\nasync function resolveQuestionScopeOrNull(ctx: any, args: QuestionScopeArgs) {\n if (!args.projectId && !args.topicId) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n projectId: args.projectId ?? undefined,\n topicId: args.topicId ?? undefined,\n });\n } catch {\n return null;\n }\n}\n\nasync function getQuestionNodesForScope(\n ctx: any,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n args?: { scanLimit?: number }\n): Promise<QuestionNodeDoc[]> {\n const fetchNodes = (query: any) =>\n typeof args?.scanLimit === \"number\"\n ? query.order(\"desc\").take(args.scanLimit)\n : query.collect();\n\n const [topicNodes, projectNodes] = await Promise.all([\n scope.topicId\n ? fetchNodes(\n ctx.db.query(\"epistemicNodes\").withIndex(\"by_topic_type\", (q: any) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"question\")\n )\n )\n : Promise.resolve([]),\n scope.projectId\n ? fetchNodes(\n ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_project_type\", (q: any) =>\n q.eq(\"projectId\", scope.projectId).eq(\"nodeType\", \"question\")\n )\n )\n : Promise.resolve([]),\n ]);\n\n return dedupeQuestionNodes([...topicNodes, ...projectNodes]).filter((node) =>\n questionMatchesScope(node, scope)\n );\n}\n\nasync function getQuestionEdgesForScope(\n ctx: any,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>\n) {\n const query = ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_topic\", (q: any) =>\n q.eq(\"topicId\", scope.topicId || scope.projectId)\n );\n\n return await query.collect();\n}\n\nfunction questionMatchesScope(\n node: Pick<QuestionNodeDoc, \"topicId\" | \"projectId\">,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>\n): boolean {\n return (\n (scope.topicId !== undefined && node.topicId === scope.topicId) ||\n (scope.projectId !== undefined && node.projectId === scope.projectId)\n );\n}\n\nexport function resolveLinkedWorktreeId(\n meta: Record<string, unknown>\n): string | null {\n const linkedWorktreeId = meta.linkedWorktreeId;\n return typeof linkedWorktreeId === \"string\" && linkedWorktreeId.trim()\n ? linkedWorktreeId\n : null;\n}\n\nfunction buildLinkedWorktreeMetadata(\n linkedWorktreeId: string | null | undefined\n): Record<string, string> {\n return linkedWorktreeId\n ? {\n linkedWorktreeId,\n }\n : {};\n}\n\nfunction questionMatchesWorkflowLink(\n meta: Record<string, unknown>,\n workflow: {\n worktreeId?: string | null;\n sprintId?: string | null;\n }\n): boolean {\n const linkedWorktreeId = resolveLinkedWorktreeId(meta);\n return Boolean(\n linkedWorktreeId &&\n (linkedWorktreeId === workflow.worktreeId ||\n linkedWorktreeId === workflow.sprintId)\n );\n}\n\nasync function resolveQuestionLinkedSprintId(\n ctx: {\n db: { get: (...args: any[]) => Promise<unknown>; query?: (...args: any[]) => any };\n },\n args: {\n sprintId?: string | null;\n worktreeId?: string | null;\n },\n meta: Record<string, unknown>\n): Promise<string | null> {\n const workflowId =\n args.sprintId ?? args.worktreeId ?? resolveLinkedWorktreeId(meta);\n if (!workflowId) {\n return null;\n }\n\n const workflow = await resolveWorkflowBridgeDoc(ctx, workflowId);\n return workflow.sprintId;\n}\n\nexport function flattenQuestionNode(n: QuestionNodeDoc) {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n const linkedWorktreeId = resolveLinkedWorktreeId(meta);\n return {\n ...n,\n question: n.canonicalText || \"\",\n category: (meta.category as string) || \"other\",\n priority: (meta.priority as string) || \"medium\",\n status:\n (meta.questionStatus as string) || (meta.status as string) || \"open\",\n beliefId: meta.linkedBeliefNodeId || meta.beliefId || null,\n relatedBeliefIds: (meta.relatedBeliefIds as string[]) || [],\n relatedInsightIds: (meta.relatedInsightIds as string[]) || [],\n linkedWorktreeId,\n sprintIndex: (meta.sprintIndex as number) || undefined,\n linkedBeliefId: meta.linkedBeliefNodeId || null,\n testType: (meta.testType as string) || \"validates\",\n importance: (meta.importance as number) || 5,\n isKeyQuestion: (meta.isKeyQuestion as boolean) || false,\n answer: (meta.answer as string) || null,\n convictionStage: (meta.convictionStage as string) || null,\n conviction: meta.conviction ?? null,\n source: (meta.source as string) || \"ai_suggested\",\n };\n}\n\nfunction flattenInternalQuestionNode(n: QuestionNodeDoc) {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n const flattened = flattenQuestionNode(n);\n return {\n ...flattened,\n _epistemicNodeId: n._id,\n questionType:\n n.questionType || (meta.questionType as string) || flattened.testType,\n linkedBeliefIds: flattened.relatedBeliefIds,\n audienceLabel: n.audienceLabel,\n policyTags: n.policyTags,\n sensitivityTier: n.sensitivityTier,\n exportClass: n.exportClass,\n anonymizationClass: n.anonymizationClass,\n };\n}\n\nconst INACTIVE_NODE_STATUSES = new Set([\"archived\", \"superseded\", \"deleted\"]);\n\nfunction requireScopeId(...ids: (string | undefined)[]): string {\n for (const id of ids) {\n if (typeof id === \"string\" && id.trim().length > 0) return id;\n }\n throw new Error(\"No scope identifier provided (topicId or projectId required)\");\n}\n\nconst INACTIVE_METADATA_STATUSES = new Set([\n \"archived\",\n \"superseded\",\n \"deleted\",\n]);\n\nfunction getQuestionStatusCandidates(node: QuestionNodeDoc): string[] {\n const meta = (node.metadata || {}) as Record<string, unknown>;\n return [meta.questionStatus, meta.status, node.status].filter(\n (value): value is string => typeof value === \"string\"\n );\n}\n\nexport function isActiveQuestionNode(node: QuestionNodeDoc): boolean {\n if (INACTIVE_NODE_STATUSES.has(node.status)) {\n return false;\n }\n return !getQuestionStatusCandidates(node).some((status) =>\n INACTIVE_METADATA_STATUSES.has(status.toLowerCase())\n );\n}\n\nexport function matchesRequestedQuestionStatus(\n node: QuestionNodeDoc,\n requestedStatus: string\n): boolean {\n const normalizedStatus = requestedStatus.toLowerCase();\n return getQuestionStatusCandidates(node).some(\n (status) => status.toLowerCase() === normalizedStatus\n );\n}\n\n// =============================================================================\n// CREATE\n// =============================================================================\n\n/**\n * Create a new question in the epistemic spine.\n * Returns the epistemicNodes ID directly (not a questions ID).\n */\nexport const create = mutation({\n args: {\n ...optionalScopeArgs,\n question: v.string(),\n category: v.optional(v.string()),\n priority: v.optional(\n v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\"))\n ),\n source: v.optional(v.string()),\n userId: v.string(),\n // Optional linking\n linkedBeliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n testType: v.optional(\n v.union(\n v.literal(\"validates\"),\n v.literal(\"invalidates\"),\n v.literal(\"clarifies\")\n )\n ),\n // Optional metadata\n importance: v.optional(v.number()),\n epistemicUnlock: v.optional(v.string()),\n // === SOURCE QUESTIONS (for key question derivation) ===\n // When a key question is synthesized from raw questions, track the source\n sourceQuestionIds: v.optional(v.array(v.string())), // globalIds of source questions\n // === WORKTREE LINKAGE ===\n linkedWorktreeId: v.optional(v.string()),\n // === CLASSIFICATION FIELDS ===\n questionType: v.optional(\n v.union(\n v.literal(\"validation\"),\n v.literal(\"falsification\"),\n v.literal(\"assumption_probe\"),\n v.literal(\"prediction_test\"),\n v.literal(\"counterfactual\"),\n v.literal(\"discovery\"),\n v.literal(\"clarification\"),\n v.literal(\"comparison\"),\n v.literal(\"causal\"),\n v.literal(\"mechanism\"),\n v.literal(\"general\")\n )\n ),\n questionPriority: v.optional(\n v.union(\n v.literal(\"critical\"),\n v.literal(\"high\"),\n v.literal(\"medium\"),\n v.literal(\"low\")\n )\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"question\",\n mutationName: \"epistemicQuestions.create\",\n });\n if (scope.projectId) {\n await checkProjectAccess(ctx, scope.projectId, args.userId);\n }\n\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.question);\n const category = normalizeCategory(args.category);\n\n // Create ONLY in epistemicNodes (no questions table!)\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"question\",\n canonicalText: args.question,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L3\", // L3: Traversal Anchors (Questions)\n sourceType: args.source === \"user\" ? \"human\" : \"ai_generated\",\n // Classification fields\n questionType: args.questionType ?? \"general\",\n questionPriority: args.questionPriority ?? \"medium\",\n answerQuality: \"unanswered\", // New questions start unanswered\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n category,\n priority: args.priority || \"medium\",\n source: args.source || \"ai_suggested\",\n questionStatus: \"open\",\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n ...buildLinkedWorktreeMetadata(\n args.linkedWorktreeId\n ),\n testType: args.testType,\n importance: args.importance,\n epistemicUnlock: args.epistemicUnlock,\n // Track source questions for key question derivation\n prerequisiteQuestions: args.sourceQuestionIds,\n },\n });\n\n // Schedule Neo4j sync for the new node.\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Schedule embedding generation\n await scheduleEmbeddingGeneration({\n ctx, nodeId, projectId: scope.projectId, topicId: scope.topicId,\n createdBy: args.userId, nodeType: \"question\", text: args.question,\n });\n\n // NOTE: We no longer create prerequisite_for edges between questions.\n // Raw questions are excluded from the graph once key questions exist,\n // so the edges create unnecessary noise without providing value.\n // The sourceQuestionIds are still tracked in metadata for reference only.\n\n // If linked to a belief, create tests edge through Neo4j authority path.\n if (args.linkedBeliefNodeId) {\n const beliefNode = await ctx.db.get(args.linkedBeliefNodeId);\n if (beliefNode?.globalId) {\n await ctx.scheduler.runAfter(100, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.linkedBeliefNodeId,\n operation: \"upsert\",\n });\n\n const edgeGlobalId = buildTestsEdgeGlobalId(\n beliefNode.globalId,\n globalId\n );\n await ctx.scheduler.runAfter(250, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: beliefNode.globalId,\n toGlobalId: globalId,\n edgeType: \"tests\",\n weight: 1.0,\n context: args.testType || \"tests\",\n createdBy: args.userId,\n topicId: scope.projectId ? String(scope.projectId) : undefined,\n fromNodeType: \"belief\",\n toNodeType: \"question\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n }\n }\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: scope.projectId,\n newState: {\n question: args.question,\n category,\n priority: args.priority || \"medium\",\n },\n });\n\n // Schedule embedding generation for semantic search.\n // topicId alone is sufficient for Lucern deployments (no projects table).\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"question\" as const,\n text: args.question,\n hasAnswer: false,\n }\n );\n }\n\n // ==========================================================================\n // ONTOLOGY: Schedule question classification for entity extraction\n // ==========================================================================\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 2000, // 2 second delay\n internal.nodeClassification.scheduleClassification,\n {\n nodeId,\n nodeType: \"question\",\n projectId: scope.projectId,\n topicId: normalizeQuestionTopicId(scope.topicId),\n }\n );\n }\n\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n normalizeQuestionTopicId(scope.topicId)\n );\n\n return { nodeId };\n },\n});\n\n/**\n * Create multiple questions in batch (for efficiency)\n */\nexport const createBatch = mutation({\n args: {\n ...optionalScopeArgs,\n questions: v.array(\n v.object({\n question: v.string(),\n category: v.optional(v.string()),\n priority: v.optional(\n v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\"))\n ),\n linkedBeliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n testType: v.optional(\n v.union(\n v.literal(\"validates\"),\n v.literal(\"invalidates\"),\n v.literal(\"clarifies\")\n )\n ),\n })\n ),\n source: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n const scopeId = resolveQuestionScopeId(scope);\n if (!scopeId) {\n throw new Error(\"No scope identifier provided\");\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n throw new Error(\"Access denied\");\n }\n\n const now = Date.now();\n const nodeIds: Id<\"epistemicNodes\">[] = [];\n\n for (const q of args.questions) {\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(q.question);\n const category = normalizeCategory(q.category);\n\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"question\",\n canonicalText: q.question,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L3\",\n sourceType: args.source === \"user\" ? \"human\" : \"ai_generated\",\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n category,\n priority: q.priority || \"medium\",\n source: args.source || \"ai_suggested\",\n questionStatus: \"open\",\n linkedBeliefNodeId: q.linkedBeliefNodeId,\n testType: q.testType,\n },\n });\n\n nodeIds.push(nodeId);\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: String(nodeId),\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: scope.projectId,\n topicId: normalizeQuestionTopicId(scope.topicId),\n newState: {\n question: q.question,\n category,\n priority: q.priority || \"medium\",\n source: args.source || \"ai_suggested\",\n linkedBeliefNodeId: q.linkedBeliefNodeId,\n testType: q.testType,\n },\n triggeringAction: \"epistemicQuestions.createBatch\",\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Create edge if linked to belief (directly in Neo4j)\n if (q.linkedBeliefNodeId) {\n const beliefNode = await ctx.db.get(q.linkedBeliefNodeId);\n if (beliefNode) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: crypto.randomUUID(),\n fromGlobalId: beliefNode.globalId,\n toGlobalId: globalId,\n edgeType: \"tests\",\n weight: 1.0,\n createdBy: args.userId,\n topicId: scope.projectId,\n fromNodeType: \"belief\",\n toNodeType: \"question\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n }\n }\n }\n\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n normalizeQuestionTopicId(scope.topicId)\n );\n\n return { nodeIds, count: nodeIds.length };\n },\n});\n\n// =============================================================================\n// UPDATE\n// =============================================================================\n\n/**\n * Update a question's status (open, researching, answered, etc.)\n */\nexport const updateStatus = mutation({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n // Backward compatibility for older callers still sending questionId.\n questionId: v.optional(v.union(v.id(\"epistemicNodes\"), v.string())),\n status: v.union(\n v.literal(\"open\"),\n v.literal(\"researching\"),\n v.literal(\"answered\"),\n v.literal(\"parked\"),\n v.literal(\"closed\")\n ),\n userId: v.optional(v.string()),\n answer: v.optional(v.string()),\n answerStatus: v.optional(\n v.union(\n v.literal(\"ai_draft\"),\n v.literal(\"user_draft\"),\n v.literal(\"final\")\n )\n ),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const resolvedNodeId = (args.nodeId ?? args.questionId) as\n | Id<\"epistemicNodes\">\n | undefined;\n if (!resolvedNodeId) {\n throw new Error(\"Missing nodeId/questionId\");\n }\n const resolvedUserId = args.userId || (await getCurrentUserId(ctx));\n if (!resolvedUserId) {\n throw new Error(\"Not authenticated\");\n }\n\n const node = await ctx.db.get(resolvedNodeId);\n if (!node || node.nodeType !== \"question\") {\n throw new Error(\"Question not found\");\n }\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: await resolveNodeScopeForWorkspaceIsolation(ctx, node),\n mutationName: \"epistemicQuestions.updateStatus\",\n });\n\n const now = Date.now();\n const metadata = (node.metadata || {}) as Record<string, unknown>;\n const previousStatus = metadata.questionStatus || \"open\";\n\n await ctx.db.patch(resolvedNodeId, {\n updatedAt: now,\n metadata: {\n ...metadata,\n questionStatus: args.status,\n answer: args.answer || metadata.answer,\n answerStatus: args.answerStatus || metadata.answerStatus,\n answeredAt: args.status === \"answered\" ? now : metadata.answeredAt,\n answeredBy:\n args.status === \"answered\" ? resolvedUserId : metadata.answeredBy,\n },\n });\n\n // If answered with answer text, schedule answer node creation\n if (args.status === \"answered\" && args.answer) {\n await ctx.scheduler.runAfter(\n 0,\n internal.epistemicAnswers.createInternal,\n {\n projectId: node.projectId,\n topicId: normalizeQuestionTopicId(node.topicId),\n questionNodeId: resolvedNodeId,\n answerText: args.answer,\n answerSource: \"human\",\n userId: resolvedUserId,\n }\n );\n }\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: resolvedNodeId,\n changeType: \"status_changed\",\n changedAt: now,\n changedBy: resolvedUserId,\n isAgent: false,\n projectId: node.projectId,\n previousState: { status: previousStatus },\n newState: { status: args.status },\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: resolvedNodeId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { nodeId: resolvedNodeId, previousStatus, newStatus: args.status };\n },\n});\n\n/**\n * Update question priority\n *\n * Note: Convex mutations are serialized per-document, so concurrent updates\n * to the same question will be processed sequentially, not in parallel.\n */\nexport const updatePriority = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n priority: v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\")),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"question\") {\n throw new Error(\"Question not found\");\n }\n\n const now = Date.now();\n const metadata = (node.metadata || {}) as Record<string, unknown>;\n const previousPriority = metadata.priority || \"medium\";\n\n await ctx.db.patch(args.nodeId, {\n updatedAt: now,\n metadata: {\n ...metadata,\n priority: args.priority,\n },\n });\n\n // Log to audit (was missing)\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: args.nodeId,\n changeType: \"priority_changed\" as any,\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: { priority: previousPriority },\n newState: { priority: args.priority },\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { nodeId: args.nodeId };\n },\n});\n\n// =============================================================================\n// QUERIES\n// =============================================================================\n\n/**\n * Get a question by ID\n */\nexport const getById = query({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n questionId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const id = args.nodeId ?? (args.questionId as any);\n if (!id) {\n return null;\n }\n const node = (await ctx.db.get(\n id as Id<\"epistemicNodes\">\n )) as QuestionNodeDoc | null;\n if (!node || node.nodeType !== \"question\") {\n return null;\n }\n return flattenQuestionNode(node);\n },\n});\n\n/**\n * Get all questions for a project\n */\nexport const getByProject = query({\n args: {\n ...optionalScopeArgs,\n status: v.optional(v.string()),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveQuestionScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n\n const pageSize = clampQuestionLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_QUESTION_PAGE_SIZE);\n\n if (args.userId) {\n const scopeId = resolveQuestionScopeId(scope);\n if (!scopeId) {\n return [];\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n }\n\n const workspaceScopedNodes = await getQuestionNodesForScope(ctx, scope, {\n scanLimit,\n });\n\n const scopedNodes = args.status\n ? workspaceScopedNodes.filter((node) =>\n matchesRequestedQuestionStatus(node, args.status!)\n )\n : workspaceScopedNodes.filter(isActiveQuestionNode);\n\n return scopedNodes.map(flattenQuestionNode).slice(0, pageSize);\n },\n});\n\n/**\n * Get all questions for a topic.\n */\nexport const getByTopic = query({\n args: {\n topicId: v.string(),\n status: v.optional(v.string()),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampQuestionLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_QUESTION_PAGE_SIZE);\n const scope = await resolveTopicProjectScope(ctx, { topicId: args.topicId });\n const scopedNodes = await getQuestionNodesForScope(ctx, scope, {\n scanLimit,\n });\n\n const filteredNodes = args.status\n ? scopedNodes.filter((node) =>\n matchesRequestedQuestionStatus(node, args.status!)\n )\n : scopedNodes.filter(isActiveQuestionNode);\n\n return filteredNodes.map(flattenQuestionNode).slice(0, pageSize);\n },\n});\n\n/**\n * Get questions by category/pillar\n */\nexport const getByCategory = query({\n args: {\n ...optionalScopeArgs,\n category: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveQuestionScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n\n const nodes = await getQuestionNodesForScope(ctx, scope);\n\n return nodes.filter((n) => {\n const metadata = (n.metadata || {}) as Record<string, unknown>;\n return questionMatchesScope(n, scope) && (\n isActiveQuestionNode(n) &&\n metadata.category === normalizeCategory(args.category)\n );\n });\n },\n});\n\n/**\n * Get questions linked to a specific belief\n */\nexport const getForBelief = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // Find edges from the belief to questions\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_type\", (q) =>\n q.eq(\"fromNodeId\", args.beliefNodeId).eq(\"edgeType\", \"tests\")\n )\n .collect();\n\n // Get the question nodes\n const questionNodeIds = edges\n .map((e) => e.toNodeId)\n .filter(Boolean) as Id<\"epistemicNodes\">[];\n const questions = await Promise.all(\n questionNodeIds.map((id) => ctx.db.get(id))\n );\n\n return questions.filter(\n (q) =>\n q !== null &&\n (q as any).nodeType === \"question\" &&\n isActiveQuestionNode(q as QuestionNodeDoc)\n );\n },\n});\n\n// =============================================================================\n// INTERNAL QUERIES (for other Convex modules)\n// =============================================================================\n\n/**\n * Internal query to get questions for a project\n */\nexport const internalGetByProject = internalQuery({\n args: {\n ...optionalScopeArgs,\n status: v.optional(v.string()),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampQuestionLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_QUESTION_PAGE_SIZE);\n const audienceMode = args.audienceMode ?? \"internal\";\n const scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n const projectScopeId = resolveQuestionScopeId(scope);\n if (!projectScopeId) {\n return [];\n }\n const project = await resolveGraphPrimitivesAppResolvers(ctx).getProject(\n ctx,\n projectScopeId\n );\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: project?.tenantId,\n workspaceId: project?.workspaceId,\n });\n const audienceClassByKey = new Map(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ])\n );\n const resolveAudienceClass = (\n audienceKey: string | undefined | null,\n fallback: \"public\" | \"internal\"\n ) => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return audienceClassByKey.get(key) ?? classFromAudienceKey(key, fallback);\n };\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const nodes = await getQuestionNodesForScope(ctx, scope, { scanLimit });\n const workspaceScopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: project?.tenantId,\n workspaceId: project?.workspaceId,\n })\n );\n\n const visibleNodes = workspaceScopedNodes.filter((node) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(node.audienceLabel, \"internal\")\n )\n );\n\n const scopedNodes = args.status\n ? visibleNodes.filter((node) =>\n matchesRequestedQuestionStatus(node, args.status!)\n )\n : visibleNodes.filter(isActiveQuestionNode);\n\n // Map to flattened format for internal callers\n return scopedNodes.slice(0, pageSize).map(flattenInternalQuestionNode);\n },\n});\n\n/**\n * Internal query to get questions for a topic.\n */\nexport const internalGetByTopic = internalQuery({\n args: {\n topicId: v.string(),\n status: v.optional(v.string()),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampQuestionLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_QUESTION_PAGE_SIZE);\n const audienceMode = args.audienceMode ?? \"internal\";\n const scope = await resolveTopicProjectScope(ctx, { topicId: args.topicId });\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n });\n const audienceClassByKey = new Map(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ])\n );\n const resolveAudienceClass = (\n audienceKey: string | undefined | null,\n fallback: \"public\" | \"internal\"\n ) => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return audienceClassByKey.get(key) ?? classFromAudienceKey(key, fallback);\n };\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const nodes = await getQuestionNodesForScope(ctx, scope, { scanLimit });\n const workspaceScopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n })\n );\n\n const visibleNodes = workspaceScopedNodes.filter((node) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(node.audienceLabel, \"internal\")\n )\n );\n\n const scopedNodes = args.status\n ? visibleNodes.filter((node) =>\n matchesRequestedQuestionStatus(node, args.status!)\n )\n : visibleNodes.filter(isActiveQuestionNode);\n\n return scopedNodes.slice(0, pageSize).map(flattenInternalQuestionNode);\n },\n});\n\n/**\n * Internal mutation to create a question (for other Convex modules)\n */\nexport const internalCreate = internalMutation({\n args: {\n ...optionalScopeArgs,\n question: v.string(),\n category: v.optional(v.string()),\n priority: v.optional(v.string()),\n source: v.optional(v.string()),\n userId: v.string(),\n linkedBeliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n testType: v.optional(v.string()),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"question\",\n mutationName: \"epistemicQuestions.internalCreate\",\n });\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"question\",\n epistemicLayer: \"L3\",\n },\n mutationName: \"epistemicQuestions.internalCreate\",\n });\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.question);\n const category = normalizeCategory(args.category);\n\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"question\",\n canonicalText: args.question,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L3\",\n sourceType: args.source === \"user\" ? \"human\" : \"ai_generated\",\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n category,\n priority: args.priority || \"medium\",\n source: args.source || \"ai_suggested\",\n questionStatus: \"open\",\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n testType: args.testType,\n },\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Create edge if linked to belief (directly in Neo4j)\n if (args.linkedBeliefNodeId) {\n const beliefNode = await ctx.db.get(args.linkedBeliefNodeId);\n if (beliefNode) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: crypto.randomUUID(),\n fromGlobalId: beliefNode.globalId,\n toGlobalId: globalId,\n edgeType: \"tests\",\n weight: 1.0,\n createdBy: args.userId,\n topicId: scope.projectId ? String(scope.projectId) : undefined,\n fromNodeType: \"belief\",\n toNodeType: \"question\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n }\n }\n\n // Schedule embedding generation for semantic search.\n // topicId alone is sufficient for Lucern deployments (no projects table).\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"question\" as const,\n text: args.question,\n hasAnswer: false,\n }\n );\n }\n\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n normalizeQuestionTopicId(scope.topicId)\n );\n\n return { nodeId };\n },\n});\n\n// =============================================================================\n// MUTATIONS\n// =============================================================================\n\n/**\n * Add a question to the epistemic graph\n */\nexport const addQuestion = mutation({\n args: {\n ...optionalScopeArgs,\n question: v.string(),\n category: v.optional(v.string()),\n priority: v.optional(v.string()),\n source: v.optional(v.string()),\n userId: v.string(),\n beliefId: v.optional(v.string()),\n chatId: v.optional(v.string()),\n importance: v.optional(v.number()),\n epistemicUnlock: v.optional(v.string()),\n metadata: v.optional(v.any()),\n questionType: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n const scopeId = resolveQuestionScopeId(scope);\n if (!scopeId) {\n throw new Error(\"No scope identifier provided\");\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n throw new Error(\"Access denied\");\n }\n\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.question);\n const category = normalizeCategory(args.category);\n const additionalMetadata =\n args.metadata && typeof args.metadata === \"object\"\n ? (args.metadata as Record<string, unknown>)\n : {};\n\n // Create in epistemicNodes\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"question\",\n canonicalText: args.question,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L3\",\n sourceType: args.source === \"user\" ? \"human\" : \"ai_generated\",\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n ...additionalMetadata,\n category,\n priority: args.priority || \"medium\",\n source: args.source || \"ai_suggested\",\n questionStatus: \"open\",\n beliefId: args.beliefId,\n linkedBeliefId: args.beliefId,\n chatId: args.chatId,\n importance: args.importance,\n epistemicUnlock: args.epistemicUnlock,\n },\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: String(nodeId),\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: scope.projectId,\n topicId: normalizeQuestionTopicId(scope.topicId),\n newState: {\n ...additionalMetadata,\n question: args.question,\n category,\n priority: args.priority || \"medium\",\n source: args.source || \"ai_suggested\",\n beliefId: args.beliefId,\n chatId: args.chatId,\n importance: args.importance,\n epistemicUnlock: args.epistemicUnlock,\n },\n triggeringAction: \"epistemicQuestions.addQuestion\",\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Generate embedding\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: normalizeQuestionTopicId(scope.topicId),\n createdBy: args.userId,\n nodeType: \"question\" as const,\n text: args.question,\n hasAnswer: false,\n }\n );\n\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n normalizeQuestionTopicId(scope.topicId)\n );\n\n return nodeId;\n },\n});\n\n// =============================================================================\n// EVIDENCE CREATION FROM SCORED QUESTIONS\n// =============================================================================\n\n/**\n * Create an L2 evidence node from a scored question's answer and link it to\n * the tested belief(s) via INFORMS edges. This bridges the sprint question\n * workflow to the evidence graph so computeSprintConviction can score beliefs.\n *\n * Called as a side-effect when a question is finalized with conviction scoring.\n */\nexport const createEvidenceFromScoredQuestion = internalMutation({\n args: {\n questionNodeId: v.id(\"epistemicNodes\"),\n questionText: v.string(),\n answerText: v.string(),\n beliefId: v.string(),\n relatedBeliefIds: v.array(v.string()),\n conviction: v.number(),\n rationale: v.string(),\n ...optionalScopeArgs,\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n\n // Check if evidence was already created for this question (idempotent)\n const questionNode = await ctx.db.get(args.questionNodeId);\n if (!questionNode) {\n return;\n }\n const qMeta = (questionNode.metadata || {}) as Record<string, unknown>;\n if (qMeta.evidenceNodeId) {\n return; // Already created\n }\n\n // Build evidence text from Q&A\n const evidenceText = `Q: ${args.questionText}\\n\\nA: ${args.answerText}`;\n const globalId = generateGlobalId();\n const contentHash = `evidence:${args.questionNodeId}:scored`;\n\n // Create L2 evidence node\n const evidenceNodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n projectId: args.projectId,\n topicId: normalizeQuestionTopicId(args.topicId),\n nodeType: \"evidence\",\n canonicalText: evidenceText,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L2\",\n sourceType: \"verified\", // Human-scored sprint answer\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n kind: \"observation\",\n sourceQuestionId: args.questionNodeId,\n sprintConviction: args.conviction,\n rationale: args.rationale,\n origin: \"sprint_question_scoring\",\n },\n });\n\n // Mark the question with the evidence node ID (for idempotency)\n await ctx.db.patch(args.questionNodeId, {\n metadata: {\n ...qMeta,\n evidenceNodeId,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync for the evidence node\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: evidenceNodeId,\n operation: \"upsert\",\n });\n\n // Collect all belief IDs to link (primary + related)\n const allBeliefIds = new Set<string>();\n allBeliefIds.add(args.beliefId);\n for (const id of args.relatedBeliefIds) {\n allBeliefIds.add(id);\n }\n\n // Create INFORMS edges: Evidence → Belief(s)\n // Weight based on conviction: high conviction (>0.7) = supports, low (<0.3) = contradicts\n const weight =\n args.conviction >= 0.5 ? args.conviction : -(1 - args.conviction);\n\n // Helper: resolve belief ID to a canonical epistemic belief node.\n async function resolveBeliefNode(bId: string) {\n try {\n const node = await ctx.db.get(bId as Id<\"epistemicNodes\">);\n if (node?.nodeType === \"belief\") {\n return node;\n }\n } catch {\n return null;\n }\n return null;\n }\n\n for (const bId of allBeliefIds) {\n const beliefNode = await resolveBeliefNode(bId);\n if (!beliefNode) {\n continue;\n }\n\n const edgeGlobalId = generateGlobalId();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: globalId,\n toGlobalId: beliefNode.globalId,\n edgeType: \"informs\",\n weight,\n confidence: Math.abs(weight),\n context: `origin=sprint_question_scoring | relation=${weight >= 0 ? \"supports\" : \"contradicts\"} | sourceQuestionId=${String(args.questionNodeId)}`,\n createdBy: args.userId,\n topicId: args.projectId ? String(args.projectId) : undefined,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n }\n\n // Create DERIVED_FROM edge: Evidence → Question (answer is derived from question — provenance)\n const answersEdgeGlobalId = generateGlobalId();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: answersEdgeGlobalId,\n fromGlobalId: globalId,\n toGlobalId: questionNode.globalId,\n edgeType: \"derived_from\",\n weight: 1.0,\n confidence: 1.0,\n context: `origin=sprint_question_scoring | sourceQuestionId=${String(args.questionNodeId)}`,\n createdBy: args.userId,\n topicId: args.projectId ? String(args.projectId) : undefined,\n fromNodeType: \"evidence\",\n toNodeType: \"question\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n\n // Audit log\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: evidenceNodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: args.projectId,\n topicId: normalizeQuestionTopicId(args.topicId),\n newState: {\n text: evidenceText.slice(0, 200),\n kind: \"observation\",\n sourceType: \"verified\",\n origin: \"sprint_question_scoring\",\n linkedBeliefIds: [...allBeliefIds],\n },\n });\n\n await markProjectGraphDirty(\n ctx,\n args.projectId,\n normalizeQuestionTopicId(args.topicId)\n );\n\n return { evidenceNodeId };\n },\n});\n\n/**\n * Backfill: Create evidence nodes + INFORMS edges for all scored questions\n * that are missing them. Run once to fix existing sprint data.\n */\nexport const backfillScoredQuestionEvidence = internalMutation({\n args: {\n ...optionalScopeArgs,\n userId: v.string(),\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const dryRun = args.dryRun ?? false;\n const scope = await resolveQuestionScopeOrNull(ctx, args);\n if (!scope) {\n return {\n dryRun,\n totalQuestions: 0,\n candidateCount: 0,\n scheduled: 0,\n skipped: 0,\n candidates: [],\n };\n }\n\n const allQuestions = await getQuestionNodesForScope(ctx, scope);\n\n // Filter to scored questions with answers that don't yet have evidence\n const candidates = allQuestions.filter((n) => {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n return (\n meta.convictionStage === \"scored\" &&\n meta.answer &&\n !meta.evidenceNodeId &&\n (meta.linkedBeliefId || meta.beliefId)\n );\n });\n\n if (dryRun) {\n return {\n dryRun: true,\n candidateCount: candidates.length,\n candidates: candidates.map((n) => {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n return {\n questionId: n._id,\n questionText: n.canonicalText?.slice(0, 80),\n beliefId: meta.linkedBeliefId || meta.beliefId,\n conviction: meta.conviction,\n hasAnswer: !!meta.answer,\n };\n }),\n };\n }\n\n let created = 0;\n let skipped = 0;\n\n for (const questionNode of candidates) {\n const meta = (questionNode.metadata || {}) as Record<string, unknown>;\n const beliefId =\n (meta.linkedBeliefId as string) ?? (meta.beliefId as string);\n const answerText = meta.answer as string;\n const conviction = (meta.conviction as number) ?? 0.5;\n\n if (!beliefId || !answerText) {\n skipped++;\n continue;\n }\n\n await ctx.scheduler.runAfter(\n created * 100, // Stagger to avoid overwhelming Neo4j\n internal.epistemicQuestions.createEvidenceFromScoredQuestion,\n {\n questionNodeId: questionNode._id,\n questionText: questionNode.canonicalText || \"\",\n answerText,\n beliefId,\n relatedBeliefIds: (meta.relatedBeliefIds as string[]) || [],\n conviction,\n rationale: (meta.convictionRationale as string) || \"\",\n projectId: scope.projectId,\n topicId: normalizeQuestionTopicId(scope.topicId),\n userId: args.userId,\n }\n );\n created++;\n }\n\n if (created > 0) {\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n normalizeQuestionTopicId(scope.topicId)\n );\n }\n\n return {\n dryRun: false,\n totalQuestions: allQuestions.length,\n candidateCount: candidates.length,\n scheduled: created,\n skipped,\n };\n },\n});\n\n// =============================================================================\n// SPRINT CLUSTER QUERIES\n// =============================================================================\n\n/**\n * Get ALL questions for a sprint cluster, with linked belief details.\n * This is the main query for the Questions phase UI.\n *\n * CLUSTER = Hypotheses + Conditionals ONLY (no raw beliefs!)\n */\nexport const getForSprintCluster = query({\n args: {\n sprintId: v.optional(v.string()),\n worktreeId: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const docId = args.sprintId || args.worktreeId;\n if (!docId) return [];\n const workflow = await resolveWorkflowBridgeDoc(ctx, docId);\n const scopeDoc = workflow.worktree ?? workflow.sprint;\n if (!scopeDoc) {\n return [];\n }\n const scope = await resolveQuestionScopeOrNull(ctx, {\n projectId: workflow.projectId,\n topicId: workflow.topicId,\n });\n const scopeId = scope ? resolveQuestionScopeId(scope) : undefined;\n if (!scope || !scopeId) {\n return [];\n }\n\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n\n // Get hypothesis and raw belief IDs from sprint synthesis state\n const synthesisState = scopeDoc.synthesisState as\n | Record<string, unknown>\n | undefined;\n const hypothesisIds = new Set(\n ((synthesisState?.synthesizedBeliefIds as string[]) || []).map(\n (id: unknown) => String(id)\n )\n );\n const rawBeliefIds = new Set(\n ((synthesisState?.originalBeliefIds as string[]) || []).map(\n (id: unknown) => String(id)\n )\n );\n\n // Cluster = hypotheses + conditionals (exclude raw beliefs)\n const clusterBeliefIds = new Set<string>(hypothesisIds);\n\n // Find conditionals via edges connected to hypotheses\n const edges = await getQuestionEdgesForScope(ctx, scope);\n\n for (const edge of edges) {\n const fromStr = String(edge.fromNodeId || \"\");\n const toStr = String(edge.toNodeId || \"\");\n\n if (hypothesisIds.has(fromStr) && !rawBeliefIds.has(toStr)) {\n clusterBeliefIds.add(toStr);\n }\n if (hypothesisIds.has(toStr) && !rawBeliefIds.has(fromStr)) {\n clusterBeliefIds.add(fromStr);\n }\n }\n\n // Get all question-type epistemicNodes in the project\n const questionNodes = await getQuestionNodesForScope(ctx, scope);\n\n // Include questions explicitly linked to the sprint via targetQuestionIds\n const sprintQuestionIds = new Set(\n (((workflow.worktree?.targetQuestionIds as unknown[]) ||\n (workflow.sprint?.targetQuestionIds as unknown[]) ||\n []) as unknown[]).map((id: unknown) => String(id))\n );\n\n // Filter to questions linked to cluster beliefs OR explicitly in sprint\n const clusterQuestions = questionNodes.filter((q) => {\n // Always include questions explicitly added to this sprint\n if (sprintQuestionIds.has(String(q._id))) {\n return true;\n }\n // Include questions linked to cluster beliefs via metadata\n const meta = (q.metadata || {}) as Record<string, unknown>;\n const linkedId = String(meta.linkedBeliefNodeId || \"\");\n if (linkedId && clusterBeliefIds.has(linkedId)) {\n return true;\n }\n // Also check edges connecting this question to cluster beliefs\n return edges.some(\n (e) =>\n (String(e.fromNodeId) === String(q._id) &&\n clusterBeliefIds.has(String(e.toNodeId || \"\"))) ||\n (String(e.toNodeId) === String(q._id) &&\n clusterBeliefIds.has(String(e.fromNodeId || \"\")))\n );\n });\n\n // Enrich with linked belief details\n const enrichedQuestions = await Promise.all(\n clusterQuestions.map(async (q) => {\n const meta = (q.metadata || {}) as Record<string, unknown>;\n\n // Collect all belief IDs this question is linked to\n const linkedBeliefNodeIds = new Set<string>();\n const primaryBeliefId = String(meta.linkedBeliefNodeId || \"\");\n if (primaryBeliefId) {\n linkedBeliefNodeIds.add(primaryBeliefId);\n }\n\n for (const edge of edges) {\n if (String(edge.fromNodeId) === String(q._id)) {\n linkedBeliefNodeIds.add(String(edge.toNodeId || \"\"));\n }\n if (String(edge.toNodeId) === String(q._id)) {\n linkedBeliefNodeIds.add(String(edge.fromNodeId || \"\"));\n }\n }\n // Remove empty strings\n linkedBeliefNodeIds.delete(\"\");\n\n // Fetch belief details\n const linkedBeliefs = (\n await Promise.all(\n Array.from(linkedBeliefNodeIds).map(async (nodeId) => {\n const node = await ctx.db.get(nodeId as Id<\"epistemicNodes\">);\n if (!node || node.nodeType !== \"belief\") {\n return null;\n }\n\n const isHypothesis = hypothesisIds.has(nodeId);\n const isRaw = rawBeliefIds.has(nodeId);\n const isConditional =\n !isHypothesis && !isRaw && clusterBeliefIds.has(nodeId);\n\n return {\n beliefId: node._id,\n beliefText: node.canonicalText || \"\",\n isHypothesis,\n isConditional,\n isRaw,\n isPrimaryTarget: isHypothesis,\n };\n })\n )\n ).filter(Boolean);\n\n return {\n _id: q._id,\n _creationTime: q._creationTime,\n projectId: q.projectId,\n topicId: q.topicId,\n canonicalText: q.canonicalText,\n question: q.canonicalText, // legacy field name\n questionType:\n q.questionType || (meta.questionType as string) || \"general\",\n priority: (meta.priority as string) || \"medium\",\n isKeyQuestion: (meta.isKeyQuestion as boolean) || false,\n testType: (meta.testType as string) || \"validates\",\n category: (meta.category as string) || \"other\",\n status: q.status,\n linkedBeliefs,\n testLogic: (meta.testType as string) || \"validates\",\n testRationale: (meta.rationale as string) || null,\n beliefId: meta.linkedBeliefNodeId || null,\n relatedBeliefIds: Array.from(linkedBeliefNodeIds),\n // Conviction stage fields — needed by UI to show/hide action buttons\n convictionStage: (meta.convictionStage as string) || null,\n answer: (meta.answer as string) || null,\n conviction: (meta.conviction as number) ?? null,\n linkedWorktreeId: resolveLinkedWorktreeId(meta),\n metadata: q.metadata,\n };\n })\n );\n\n // Dedupe by question ID\n const seen = new Set<string>();\n return enrichedQuestions.filter((q) => {\n if (seen.has(String(q._id))) {\n return false;\n }\n seen.add(String(q._id));\n return true;\n });\n },\n});\n\n// =============================================================================\n// PORTED FROM questions.ts — 15 functions migrated to epistemicNodes\n// =============================================================================\n\n/**\n * 1. getInConviction - Get questions in conviction stage for a sprint\n * Ported from questions.ts lines 1008-1157\n */\nexport const getInConviction = query({\n args: {\n sprintId: v.optional(v.string()),\n worktreeId: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const docId = args.sprintId || args.worktreeId;\n if (!docId) return [];\n const workflow = await resolveWorkflowBridgeDoc(ctx, docId);\n const scopeDoc = workflow.worktree ?? workflow.sprint;\n if (!scopeDoc) {\n return [];\n }\n const scope = await resolveQuestionScopeOrNull(ctx, {\n projectId: workflow.projectId,\n topicId: workflow.topicId,\n });\n const scopeId = scope ? resolveQuestionScopeId(scope) : undefined;\n if (!scope || !scopeId) {\n return [];\n }\n\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n\n const allQuestions = await getQuestionNodesForScope(ctx, scope);\n\n // Filter to questions in conviction stages\n const convictionQuestions = allQuestions.filter((q) => {\n const meta = (q.metadata || {}) as Record<string, unknown>;\n return (\n meta.convictionStage === \"in_conviction\" ||\n meta.convictionStage === \"scored\"\n );\n });\n\n // Get synthesized belief IDs from sprint\n const sprintBeliefIds = new Set([\n ...((scopeDoc.synthesisState as any)?.synthesizedBeliefIds || []).map(\n String\n ),\n ...(((workflow.worktree?.targetBeliefIds as unknown[]) ||\n (workflow.sprint?.targetBeliefIds as unknown[]) ||\n []) as unknown[]).map(String),\n ]);\n\n // Filter to questions relevant to this sprint\n const sprintQuestions = convictionQuestions.filter((q) => {\n const meta = (q.metadata || {}) as Record<string, unknown>;\n\n // Direct sprint link\n if (questionMatchesWorkflowLink(meta, workflow)) {\n return true;\n }\n\n // Linked to sprint beliefs via linkedBeliefNodeId\n if (\n meta.linkedBeliefNodeId &&\n sprintBeliefIds.has(String(meta.linkedBeliefNodeId))\n ) {\n return true;\n }\n if (\n meta.linkedBeliefId &&\n sprintBeliefIds.has(String(meta.linkedBeliefId))\n ) {\n return true;\n }\n if (meta.beliefId && sprintBeliefIds.has(String(meta.beliefId))) {\n return true;\n }\n\n // Linked via relatedBeliefIds\n const relatedIds = (meta.relatedBeliefIds as string[]) || [];\n if (relatedIds.some((id) => sprintBeliefIds.has(String(id)))) {\n return true;\n }\n\n return false;\n });\n\n // Enrich with evidence and belief details\n const questionsWithDetails = await Promise.all(\n sprintQuestions.map(async (q) => {\n const meta = (q.metadata || {}) as Record<string, unknown>;\n\n // Fetch evidence from questionEvidenceLinks\n const evidenceLinks = await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (qb) => qb.eq(\"questionId\", q._id as any))\n .collect();\n\n const evidenceWithDetails = await Promise.all(\n evidenceLinks.map(async (link) => {\n const insight = await ctx.db.get(link.insightId);\n const insightMeta =\n ((insight as any)?.metadata as\n | Record<string, unknown>\n | undefined) || {};\n const canonicalText = (insight as any)?.canonicalText;\n const legacyText = (insight as any)?.text;\n const contentText = (insight as any)?.content;\n const titleText = (insight as any)?.title;\n const snippetText = insightMeta.snippet;\n return {\n ...link,\n insightText:\n (typeof canonicalText === \"string\" && canonicalText.trim()) ||\n (typeof legacyText === \"string\" && legacyText.trim()) ||\n (typeof contentText === \"string\" && contentText.trim()) ||\n (typeof titleText === \"string\" && titleText.trim()) ||\n (typeof snippetText === \"string\" && snippetText.trim()) ||\n \"\",\n insightSource: insight?.sourceType || \"unknown\",\n };\n })\n );\n\n // Fetch beliefs this question tests\n const beliefIds: string[] = [];\n const relatedIds = (meta.relatedBeliefIds as string[]) || [];\n if (meta.linkedBeliefNodeId) {\n beliefIds.push(String(meta.linkedBeliefNodeId));\n }\n if (meta.linkedBeliefId) {\n beliefIds.push(String(meta.linkedBeliefId));\n }\n if (meta.beliefId) {\n beliefIds.push(String(meta.beliefId));\n }\n for (const id of relatedIds) {\n if (!beliefIds.includes(String(id))) {\n beliefIds.push(String(id));\n }\n }\n\n const beliefsWithDetails = await Promise.all(\n beliefIds.map(async (beliefId) => {\n // Try as epistemicNodes ID first\n try {\n const node = await ctx.db.get(beliefId as Id<\"epistemicNodes\">);\n if (node && node.nodeType === \"belief\") {\n return {\n _id: node._id,\n belief: node.canonicalText || \"\",\n confidence: (node.metadata as any)?.confidence,\n pillar: (node.metadata as any)?.category,\n beliefType: node.status,\n dependsOnCount: 0,\n cascadesToCount: 0,\n exclusiveWithCount: 0,\n };\n }\n } catch {\n // Not a valid epistemicNodes ID\n }\n return null;\n })\n );\n\n return {\n _id: q._id,\n _creationTime: q._creationTime,\n projectId: q.projectId,\n question: q.canonicalText,\n canonicalText: q.canonicalText,\n category: (meta.category as string) || \"other\",\n priority: (meta.priority as string) || \"medium\",\n status: (meta.questionStatus as string) || q.status,\n questionType:\n q.questionType || (meta.questionType as string) || \"general\",\n testType: (meta.testType as string) || undefined,\n importance: (meta.importance as number) || undefined,\n isKeyQuestion: (meta.isKeyQuestion as boolean) || false,\n conviction: meta.conviction as number | undefined,\n convictionStage: meta.convictionStage as string,\n convictionRationale: meta.convictionRationale as string | undefined,\n convictionAdvancedAt: meta.convictionAdvancedAt as number | undefined,\n convictionAdvancedBy: meta.convictionAdvancedBy as string | undefined,\n convictionUpdatedAt: meta.convictionUpdatedAt as number | undefined,\n convictionUpdatedBy: meta.convictionUpdatedBy as string | undefined,\n answer: meta.answer as string | undefined,\n answerStatus: meta.answerStatus as string | undefined,\n answerCompleteness: meta.answerCompleteness as string | undefined,\n whatWeNeed: meta.whatWeNeed as string | undefined,\n linkedWorktreeId: resolveLinkedWorktreeId(meta) || undefined,\n beliefId: meta.linkedBeliefNodeId || meta.beliefId || null,\n linkedBeliefId: meta.linkedBeliefNodeId || meta.linkedBeliefId,\n relatedBeliefIds: relatedIds,\n evidenceCount: evidenceWithDetails.length,\n evidence: evidenceWithDetails,\n testedBeliefs: beliefsWithDetails.filter(Boolean),\n createdAt: q.createdAt,\n createdBy: q.createdBy,\n updatedAt: q.updatedAt,\n metadata: q.metadata,\n };\n })\n );\n\n // Sort: in_conviction first, then scored, then by importance\n return questionsWithDetails.sort((a, b) => {\n if (\n a.convictionStage === \"in_conviction\" &&\n b.convictionStage === \"scored\"\n ) {\n return -1;\n }\n if (\n a.convictionStage === \"scored\" &&\n b.convictionStage === \"in_conviction\"\n ) {\n return 1;\n }\n return (a.importance || 5) - (b.importance || 5);\n });\n },\n});\n\n/**\n * 2. advanceToConviction - Move a question to the conviction stage\n * Ported from questions.ts line 830\n */\nexport const advanceToConviction = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n sprintId: v.optional(v.string()),\n worktreeId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.questionId);\n if (!node || node.nodeType !== \"question\") {\n throw new Error(\"Question not found\");\n }\n\n const meta = (node.metadata || {}) as Record<string, unknown>;\n\n // Only allow advancing questions that aren't already in conviction or scored\n if (\n meta.convictionStage === \"in_conviction\" ||\n meta.convictionStage === \"scored\"\n ) {\n throw new Error(\"Question is already in conviction stage\");\n }\n\n const now = Date.now();\n\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: {\n ...meta,\n convictionStage: \"in_conviction\",\n convictionAdvancedAt: now,\n convictionAdvancedBy: args.userId,\n ...buildLinkedWorktreeMetadata(args.worktreeId ?? args.sprintId),\n },\n });\n\n // Log to epistemic audit\n try {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: args.questionId,\n changeType: \"status_changed\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: {\n convictionStage: meta.convictionStage || \"researching\",\n },\n newState: { convictionStage: \"in_conviction\" },\n triggeringAction: \"question_advanced_to_conviction\",\n });\n } catch (e) {\n console.error(\"[EpistemicAudit] Failed to log advanceToConviction:\", e);\n }\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return {\n questionId: args.questionId,\n convictionStage: \"in_conviction\",\n advancedAt: now,\n };\n },\n});\n\n/**\n * 3. updateConviction - Update conviction score for a question\n * Ported from questions.ts line 775\n */\nexport const updateConviction = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n conviction: v.optional(v.number()),\n answerCompleteness: v.optional(\n v.union(\n v.literal(\"unanswered\"),\n v.literal(\"partial\"),\n v.literal(\"sufficient\"),\n v.literal(\"comprehensive\")\n )\n ),\n convictionRationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.questionId);\n if (!node || node.nodeType !== \"question\") {\n throw new Error(\"Question not found\");\n }\n\n const now = Date.now();\n const meta = (node.metadata || {}) as Record<string, unknown>;\n const updates: Record<string, unknown> = { ...meta };\n\n if (args.conviction !== undefined) {\n updates.conviction = Math.max(0, Math.min(1, args.conviction));\n }\n if (args.answerCompleteness !== undefined) {\n updates.answerCompleteness = args.answerCompleteness;\n }\n if (args.convictionRationale !== undefined) {\n updates.convictionRationale = args.convictionRationale;\n }\n\n updates.convictionUpdatedAt = now;\n updates.convictionUpdatedBy = args.userId;\n\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: updates,\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return {\n questionId: args.questionId,\n conviction: updates.conviction ?? meta.conviction,\n answerCompleteness: updates.answerCompleteness ?? meta.answerCompleteness,\n };\n },\n});\n\n/**\n * 4. finalizeConviction - Finalize conviction scoring for a question\n * Ported from questions.ts line 893\n */\nexport const finalizeConviction = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n conviction: v.number(),\n answer: v.string(),\n convictionRationale: v.optional(v.string()),\n userId: v.string(),\n answerCompleteness: v.optional(\n v.union(\n v.literal(\"unanswered\"),\n v.literal(\"partial\"),\n v.literal(\"sufficient\"),\n v.literal(\"comprehensive\"),\n v.literal(\"unanswerable\")\n )\n ),\n whatWeNeed: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.questionId);\n if (!node || node.nodeType !== \"question\") {\n throw new Error(\"Question not found\");\n }\n\n const now = Date.now();\n const clampedConviction = Math.max(0, Math.min(1, args.conviction));\n const isUnanswerable = args.answerCompleteness === \"unanswerable\";\n const meta = (node.metadata || {}) as Record<string, unknown>;\n\n // Determine answer completeness\n let completeness = args.answerCompleteness;\n if (!completeness) {\n completeness =\n clampedConviction >= 0.8\n ? \"comprehensive\"\n : clampedConviction >= 0.6\n ? \"sufficient\"\n : clampedConviction >= 0.3\n ? \"partial\"\n : \"unanswered\";\n }\n\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: {\n ...meta,\n convictionStage: \"scored\",\n conviction: clampedConviction,\n convictionRationale: args.convictionRationale,\n convictionUpdatedAt: now,\n convictionUpdatedBy: args.userId,\n answer: args.answer,\n answerStatus: \"final\",\n questionStatus: isUnanswerable ? \"blocked\" : \"answered\",\n answeredAt: now,\n answeredBy: args.userId,\n answerCompleteness: completeness,\n whatWeNeed: args.whatWeNeed,\n },\n });\n\n // Log to epistemic audit\n try {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: args.questionId,\n changeType: \"status_changed\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: {\n convictionStage: meta.convictionStage || \"in_conviction\",\n },\n newState: {\n convictionStage: \"scored\",\n conviction: clampedConviction,\n },\n triggeringAction: \"question_conviction_finalized\",\n });\n } catch (e) {\n console.error(\"[EpistemicAudit] Failed to log finalizeConviction:\", e);\n }\n\n // Schedule evidence creation from scored question\n if (node.projectId || node.topicId) {\n const beliefId =\n (meta.linkedBeliefNodeId as string) ||\n (meta.linkedBeliefId as string) ||\n (meta.beliefId as string);\n if (beliefId) {\n try {\n await ctx.scheduler.runAfter(\n 0,\n internal.epistemicQuestions.createEvidenceFromScoredQuestion,\n {\n questionNodeId: args.questionId,\n questionText: node.canonicalText || \"\",\n answerText: args.answer,\n beliefId,\n relatedBeliefIds: (meta.relatedBeliefIds as string[]) || [],\n conviction: clampedConviction,\n rationale: args.convictionRationale || \"\",\n projectId: node.projectId,\n topicId: normalizeQuestionTopicId(node.topicId),\n userId: args.userId,\n }\n );\n } catch (e) {\n console.error(\n \"[finalizeConviction] Failed to schedule evidence creation:\",\n e\n );\n }\n }\n }\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.questionId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return {\n questionId: args.questionId,\n convictionStage: \"scored\",\n conviction: clampedConviction,\n };\n },\n});\n\n/**\n * 5. getByBeliefWithAccess - Get questions linked to a belief with access check\n * Ported from questions.ts line 1806\n */\nexport const getByBeliefWithAccess = query({\n args: {\n beliefId: v.string(),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // Try to get the belief node to find its project\n let beliefNode: any = null;\n try {\n beliefNode = await ctx.db.get(args.beliefId as Id<\"epistemicNodes\">);\n } catch {\n // Not a valid epistemicNodes ID - try legacy beliefs table\n try {\n beliefNode = await ctx.db.get(args.beliefId as Id<\"epistemicNodes\">);\n } catch {\n return [];\n }\n }\n\n if (!beliefNode) {\n return [];\n }\n\n const scope = await resolveQuestionScopeOrNull(ctx, {\n projectId: beliefNode.projectId,\n topicId: normalizeQuestionTopicId(beliefNode.topicId),\n });\n const scopeId = scope ? resolveQuestionScopeId(scope) : undefined;\n if (!scope || !scopeId) {\n return [];\n }\n\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n\n const questionNodes = await getQuestionNodesForScope(ctx, scope);\n\n // Filter to those linked to this belief\n const beliefIdStr = String(args.beliefId);\n return questionNodes.filter((q) => {\n const meta = (q.metadata || {}) as Record<string, unknown>;\n // Check primary belief link\n if (String(meta.linkedBeliefNodeId || \"\") === beliefIdStr) {\n return true;\n }\n if (String(meta.linkedBeliefId || \"\") === beliefIdStr) {\n return true;\n }\n if (String(meta.beliefId || \"\") === beliefIdStr) {\n return true;\n }\n // Check related belief IDs array\n const relatedIds = (meta.relatedBeliefIds as string[]) || [];\n if (relatedIds.some((id) => String(id) === beliefIdStr)) {\n return true;\n }\n return false;\n });\n },\n});\n\n/**\n * 6. updateQuestion - Update question text and properties\n * Ported from questions.ts line 655\n */\nexport const updateQuestion = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n question: v.optional(v.string()),\n category: v.optional(\n v.union(\n v.literal(\"market\"),\n v.literal(\"competition\"),\n v.literal(\"product\"),\n v.literal(\"team\"),\n v.literal(\"financials\"),\n v.literal(\"financial\"),\n v.literal(\"regulatory\"),\n v.literal(\"timing\"),\n v.literal(\"customer\"),\n v.literal(\"technology\"),\n v.literal(\"distribution\"),\n v.literal(\"strategic\"),\n v.literal(\"other\")\n )\n ),\n priority: v.optional(\n v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.questionId);\n if (!node || node.nodeType !== \"question\") {\n throw new Error(\"Question not found\");\n }\n\n const now = Date.now();\n const meta = (node.metadata || {}) as Record<string, unknown>;\n const metaUpdates: Record<string, unknown> = { ...meta };\n\n // Update category if provided\n if (args.category) {\n const category =\n args.category === \"financial\" ? \"financials\" : args.category;\n metaUpdates.category = category;\n }\n\n // Update priority if provided\n if (args.priority) {\n metaUpdates.priority = args.priority;\n }\n\n // SOURCE CERTIFICATION: Re-tag as proprietary if user edits text\n const patchData: Record<string, unknown> = {\n updatedAt: now,\n metadata: metaUpdates,\n };\n\n if (args.question !== undefined) {\n patchData.canonicalText = args.question;\n patchData.contentHash = generateContentHash(args.question);\n if (node.sourceType === \"ai_generated\") {\n patchData.sourceType = \"human\";\n }\n }\n\n await ctx.db.patch(args.questionId, patchData);\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.questionId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n },\n});\n\n/**\n * 7. linkToBelief - Link a question to a belief\n * Ported from questions.ts line 1298\n */\nexport const linkToBelief = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n beliefId: v.string(), // Accept string for backward compat\n userId: v.string(),\n testType: v.optional(\n v.union(\n v.literal(\"validates\"),\n v.literal(\"invalidates\"),\n v.literal(\"clarifies\")\n )\n ),\n answerImpact: v.optional(\n v.object({\n ifYes: v.string(),\n ifNo: v.string(),\n })\n ),\n isPrimaryBelief: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const questionNode = await ctx.db.get(args.questionId);\n if (!questionNode || questionNode.nodeType !== \"question\") {\n throw new Error(\"Question not found\");\n }\n\n // Verify project access\n const questionScopeId = resolveQuestionScopeId({\n projectId: questionNode.projectId,\n topicId: normalizeQuestionTopicId(questionNode.topicId),\n });\n if (questionScopeId) {\n const hasAccess = await checkScopeAccess(\n ctx,\n questionScopeId,\n args.userId\n );\n if (!hasAccess) {\n throw new Error(\"Access denied\");\n }\n }\n\n // Resolve belief node\n let beliefNode: any = null;\n try {\n beliefNode = await ctx.db.get(args.beliefId as Id<\"epistemicNodes\">);\n } catch {\n // Try legacy beliefs table\n try {\n beliefNode = await ctx.db.get(args.beliefId as Id<\"epistemicNodes\">);\n } catch {\n throw new Error(\"Belief not found\");\n }\n }\n if (!beliefNode) {\n throw new Error(\"Belief not found\");\n }\n\n const now = Date.now();\n const meta = (questionNode.metadata || {}) as Record<string, unknown>;\n\n // Add to related beliefs (avoid duplicates)\n const currentBeliefs = (meta.relatedBeliefIds as string[]) || [];\n const beliefIdStr = String(args.beliefId);\n const newRelated = currentBeliefs.includes(beliefIdStr)\n ? currentBeliefs\n : [...currentBeliefs, beliefIdStr];\n\n const metaUpdates: Record<string, unknown> = {\n ...meta,\n relatedBeliefIds: newRelated,\n };\n\n // If this is the primary belief being tested\n if (args.isPrimaryBelief || args.testType) {\n metaUpdates.linkedBeliefNodeId = args.beliefId;\n metaUpdates.linkedBeliefId = args.beliefId;\n metaUpdates.questionType = \"belief_test\";\n if (args.testType) {\n metaUpdates.testType = args.testType;\n }\n if (args.answerImpact) {\n metaUpdates.answerImpact = args.answerImpact;\n }\n }\n\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: metaUpdates,\n });\n\n // Create edge in Neo4j (Question → Belief via \"tests\")\n try {\n const beliefGlobalId = beliefNode.globalId;\n if (beliefGlobalId && questionNode.globalId) {\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.questionId,\n operation: \"upsert\",\n });\n await ctx.scheduler.runAfter(100, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.beliefId as Id<\"epistemicNodes\">,\n operation: \"upsert\",\n });\n\n const edgeGlobalId = buildTestsEdgeGlobalId(\n questionNode.globalId,\n beliefGlobalId\n );\n await ctx.scheduler.runAfter(250, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: questionNode.globalId,\n toGlobalId: beliefGlobalId,\n edgeType: \"tests\",\n context: args.testType || \"tests\",\n topicId: questionNode.projectId\n ? String(questionNode.projectId)\n : undefined,\n createdBy: args.userId,\n fromNodeType: \"question\",\n toNodeType: \"belief\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n }\n } catch (e) {\n console.error(\"[linkToBelief] Failed to create tests edge:\", e);\n }\n\n await markProjectGraphDirty(\n ctx,\n questionNode.projectId,\n questionNode.topicId\n );\n },\n});\n\n/**\n * 8. linkToInsight - Link a question to an insight/evidence\n * Ported from questions.ts line 1437\n */\nexport const linkToInsight = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n insightId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n sprintId: v.optional(v.string()),\n worktreeId: v.optional(v.string()),\n relevance: v.optional(v.number()),\n rationale: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const questionNode = await ctx.db.get(args.questionId);\n if (!questionNode || questionNode.nodeType !== \"question\") {\n throw new Error(\"Question not found\");\n }\n\n // Verify insight exists\n const insight = await ctx.db.get(args.insightId);\n if (!insight) {\n throw new Error(\"Insight not found\");\n }\n\n // Verify project access\n const questionScopeId = resolveQuestionScopeId({\n projectId: questionNode.projectId,\n topicId: normalizeQuestionTopicId(questionNode.topicId),\n });\n if (questionScopeId) {\n const hasAccess = await checkScopeAccess(\n ctx,\n questionScopeId,\n args.userId\n );\n if (!hasAccess) {\n throw new Error(\"Access denied\");\n }\n }\n\n const now = Date.now();\n const meta = (questionNode.metadata || {}) as Record<string, unknown>;\n\n // Add to related insights (avoid duplicates)\n const currentInsights = (meta.relatedInsightIds as string[]) || [];\n const insightIdStr = String(args.insightId);\n\n if (!currentInsights.includes(insightIdStr)) {\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: {\n ...meta,\n relatedInsightIds: [...currentInsights, insightIdStr],\n },\n });\n\n // Create questionEvidenceLinks record\n try {\n const existingLinks = await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) =>\n q.eq(\"questionId\", args.questionId as any)\n )\n .collect();\n\n const duplicate = existingLinks.find(\n (link) => String(link.insightId) === String(args.insightId)\n );\n\n if (!duplicate) {\n await ctx.db.insert(\"questionEvidenceLinks\", {\n questionId: args.questionId as any,\n insightId: args.insightId,\n helpsAnswer: true,\n relevance: args.relevance ?? 0.7,\n rationale: args.rationale || \"Linked from research results\",\n createdBy: args.userId,\n createdAt: now,\n });\n }\n } catch (e) {\n console.error(\n \"[linkToInsight] Failed to create questionEvidenceLink:\",\n e\n );\n }\n\n // Evidence linking now goes through graph edges (epistemicEdges),\n // not denormalized sprint.linkedEvidenceIds. Sprint table removed from K-tier.\n }\n\n await markProjectGraphDirty(\n ctx,\n questionNode.projectId,\n questionNode.topicId\n );\n },\n});\n\n/**\n * 9. unlinkInsight - Unlink an insight from a question\n * Ported from questions.ts line 1647\n */\nexport const unlinkInsight = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n insightId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const questionNode = await ctx.db.get(args.questionId);\n if (!questionNode || questionNode.nodeType !== \"question\") {\n throw new Error(\"Question not found\");\n }\n\n // Verify project access\n const questionScopeId = resolveQuestionScopeId({\n projectId: questionNode.projectId,\n topicId: normalizeQuestionTopicId(questionNode.topicId),\n });\n if (questionScopeId) {\n const hasAccess = await checkScopeAccess(\n ctx,\n questionScopeId,\n args.userId\n );\n if (!hasAccess) {\n throw new Error(\"Access denied\");\n }\n }\n\n const now = Date.now();\n const meta = (questionNode.metadata || {}) as Record<string, unknown>;\n\n // Remove from related insights\n const currentInsights = (meta.relatedInsightIds as string[]) || [];\n const newInsights = currentInsights.filter(\n (id) => String(id) !== String(args.insightId)\n );\n\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: {\n ...meta,\n relatedInsightIds: newInsights,\n },\n });\n\n // Remove questionEvidenceLink\n try {\n const links = await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) =>\n q.eq(\"questionId\", args.questionId as any)\n )\n .collect();\n\n for (const link of links) {\n if (String(link.insightId) === String(args.insightId)) {\n await ctx.db.delete(link._id);\n }\n }\n } catch (e) {\n console.error(\n \"[unlinkInsight] Failed to remove questionEvidenceLink:\",\n e\n );\n }\n\n // Remove epistemic edge if exists\n try {\n const evidenceNode = await ctx.db.get(args.insightId);\n\n if (evidenceNode && evidenceNode.nodeType === \"evidence\") {\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", evidenceNode._id).eq(\"toNodeId\", args.questionId)\n )\n .collect();\n\n for (const edge of edges) {\n if (edge.edgeType === \"derived_from\") {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n }\n }\n }\n } catch (e) {\n console.error(\"[unlinkInsight] Failed to remove edge:\", e);\n }\n\n await markProjectGraphDirty(\n ctx,\n questionNode.projectId,\n questionNode.topicId\n );\n },\n});\n\n/**\n * 10. list - List questions for a project (simple query for AI tools)\n * New function that maps to getByProject semantics for callers expecting `list`\n */\nexport const list = query({\n args: {\n ...optionalScopeArgs,\n userId: v.string(),\n status: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveQuestionScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n\n const scopeId = resolveQuestionScopeId(scope);\n if (!scopeId) {\n return [];\n }\n\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n\n const nodes = await getQuestionNodesForScope(ctx, scope);\n\n const filtered = args.status\n ? nodes.filter((node) =>\n matchesRequestedQuestionStatus(node, args.status!)\n )\n : nodes.filter(isActiveQuestionNode);\n\n // Map to a flattened format that callers expect\n return filtered.map(flattenInternalQuestionNode);\n },\n});\n\n/**\n * 11. getByPillar - Get questions by pillar/category with linked beliefs\n * Ported from questions.ts line 2526\n */\nexport const getByPillar = query({\n args: {\n ...optionalScopeArgs,\n pillar: v.string(),\n includeAnswered: v.optional(v.boolean()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveQuestionScopeOrNull(ctx, args);\n if (!scope) {\n return { questions: [], beliefs: [] };\n }\n\n const scopeId = resolveQuestionScopeId(scope);\n if (!scopeId) {\n return { questions: [], beliefs: [] };\n }\n\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return { questions: [], beliefs: [] };\n }\n\n // Get all belief nodes in this pillar\n const allBeliefNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\n scope.topicId ? \"by_topic_type\" : \"by_project_type\",\n (q) =>\n scope.topicId\n ? q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n : q.eq(\"projectId\", scope.projectId).eq(\"nodeType\", \"belief\")\n )\n .collect();\n\n const beliefs = allBeliefNodes.filter((n) => {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n return (\n (meta.category === args.pillar ||\n meta.topic === args.pillar ||\n meta.pillar === args.pillar) &&\n n.status !== \"archived\"\n );\n });\n\n if (beliefs.length === 0) {\n return { questions: [], beliefs: [] };\n }\n\n const beliefIds = new Set(beliefs.map((b) => String(b._id)));\n const beliefMap = new Map(\n beliefs.map((b) => [String(b._id), b.canonicalText || \"\"])\n );\n\n // Get all question nodes in the project\n const questionNodes = await getQuestionNodesForScope(ctx, scope);\n\n // Filter to questions linked to these beliefs\n const pillarQuestions = questionNodes.filter((q) => {\n const meta = (q.metadata || {}) as Record<string, unknown>;\n const linkedId = String(\n meta.linkedBeliefNodeId || meta.linkedBeliefId || meta.beliefId || \"\"\n );\n if (linkedId && beliefIds.has(linkedId)) {\n return true;\n }\n const relatedIds = (meta.relatedBeliefIds as string[]) || [];\n return relatedIds.some((id) => beliefIds.has(String(id)));\n });\n\n // Optionally filter out answered questions\n const includeAnswered = args.includeAnswered ?? true;\n const filteredQuestions = includeAnswered\n ? pillarQuestions\n : pillarQuestions.filter((q) => {\n const meta = (q.metadata || {}) as Record<string, unknown>;\n return meta.questionStatus !== \"answered\";\n });\n\n // Enrich with belief text\n const enrichedQuestions = filteredQuestions.map((q) => {\n const meta = (q.metadata || {}) as Record<string, unknown>;\n const linkedId = String(\n meta.linkedBeliefNodeId || meta.linkedBeliefId || meta.beliefId || \"\"\n );\n return {\n _id: q._id,\n _creationTime: q._creationTime,\n projectId: q.projectId,\n question: q.canonicalText,\n canonicalText: q.canonicalText,\n category: (meta.category as string) || \"other\",\n priority: (meta.priority as string) || \"medium\",\n status: (meta.questionStatus as string) || q.status,\n questionType:\n q.questionType || (meta.questionType as string) || \"general\",\n beliefId: linkedId || undefined,\n beliefText: linkedId ? beliefMap.get(linkedId) : undefined,\n createdAt: q.createdAt,\n createdBy: q.createdBy,\n updatedAt: q.updatedAt,\n };\n });\n\n // Sort by priority then creation date\n const priorityOrder: Record<string, number> = {\n high: 0,\n medium: 1,\n low: 2,\n };\n enrichedQuestions.sort((a, b) => {\n const aPriority = priorityOrder[a.priority || \"medium\"] ?? 1;\n const bPriority = priorityOrder[b.priority || \"medium\"] ?? 1;\n if (aPriority !== bPriority) {\n return aPriority - bPriority;\n }\n return (b.createdAt || 0) - (a.createdAt || 0);\n });\n\n return {\n questions: enrichedQuestions,\n beliefs: beliefs.map((b) => ({\n _id: b._id,\n belief: b.canonicalText,\n pillar:\n ((b.metadata as any)?.category as string) ||\n ((b.metadata as any)?.pillar as string),\n confidence: (b.metadata as any)?.confidence,\n })),\n };\n },\n});\n\n/**\n * 12. consolidate - Consolidate multiple questions into one\n * Ported from questions.ts line 2619\n */\nexport const consolidate = mutation({\n args: {\n ...optionalScopeArgs,\n questionIds: v.array(v.string()), // Accept string[] for backward compat\n consolidatedQuestion: v.string(),\n consolidationRationale: v.optional(v.string()),\n linkedBeliefIds: v.optional(v.array(v.string())),\n priority: v.optional(\n v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\"))\n ),\n sprintId: v.optional(v.string()),\n consolidatedBy: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n const scopeId = resolveQuestionScopeId(scope);\n if (!scopeId) {\n return [] as any; // graceful: topicId migration\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.consolidatedBy);\n if (!hasAccess) {\n throw new Error(\"Access denied\");\n }\n\n if (args.questionIds.length < 2) {\n throw new Error(\"At least 2 questions required for consolidation\");\n }\n\n // Fetch the original questions\n const originalQuestions = await Promise.all(\n args.questionIds.map(async (qid) => {\n try {\n return await ctx.db.get(qid as Id<\"epistemicNodes\">);\n } catch {\n return null;\n }\n })\n );\n\n // Validate all questions exist and belong to this scope\n const validQuestions = originalQuestions.filter((q) => {\n if (!q || q.nodeType !== \"question\") {\n return false;\n }\n if (scope.topicId) {\n return (\n String(q.topicId) === String(scope.topicId) ||\n (!q.topicId &&\n scope.projectId !== undefined &&\n String(q.projectId) === String(scope.projectId))\n );\n }\n return String(q.projectId) === String(scope.projectId);\n });\n if (validQuestions.length !== args.questionIds.length) {\n throw new Error(\n \"Some questions not found or do not belong to this topic scope\"\n );\n }\n\n // Determine priority\n const priorityOrder: Record<string, number> = {\n high: 0,\n medium: 1,\n low: 2,\n };\n let bestPriority = args.priority;\n if (!bestPriority) {\n let bestScore = 2;\n for (const q of validQuestions) {\n const meta = (q?.metadata || {}) as Record<string, unknown>;\n const score = priorityOrder[(meta.priority as string) || \"medium\"] ?? 1;\n if (score < bestScore) {\n bestScore = score;\n bestPriority =\n (meta.priority as \"high\" | \"medium\" | \"low\") || \"medium\";\n }\n }\n }\n\n // Collect linked beliefs\n const linkedBeliefSet = new Set<string>();\n if (args.linkedBeliefIds) {\n for (const bid of args.linkedBeliefIds) {\n linkedBeliefSet.add(String(bid));\n }\n } else {\n for (const q of validQuestions) {\n const meta = (q?.metadata || {}) as Record<string, unknown>;\n if (meta.linkedBeliefNodeId) {\n linkedBeliefSet.add(String(meta.linkedBeliefNodeId));\n }\n if (meta.linkedBeliefId) {\n linkedBeliefSet.add(String(meta.linkedBeliefId));\n }\n }\n }\n\n // Determine category\n let category = \"other\";\n if (linkedBeliefSet.size > 0) {\n const firstBeliefId = Array.from(linkedBeliefSet)[0];\n try {\n const belief = await ctx.db.get(firstBeliefId as Id<\"epistemicNodes\">);\n if (belief) {\n const bMeta = (belief.metadata || {}) as Record<string, unknown>;\n category =\n (bMeta.category as string) || (bMeta.pillar as string) || \"other\";\n }\n } catch {\n // Ignore\n }\n }\n\n // Create the new consolidated question in epistemicNodes\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.consolidatedQuestion);\n\n const newNodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n projectId: scope.projectId,\n topicId: scope.topicId,\n nodeType: \"question\",\n canonicalText: args.consolidatedQuestion,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L3\",\n sourceType: \"human\",\n createdAt: now,\n updatedAt: now,\n createdBy: args.consolidatedBy,\n metadata: {\n category,\n priority: bestPriority || \"medium\",\n source: \"consolidated\",\n questionStatus: \"open\",\n linkedBeliefNodeId:\n linkedBeliefSet.size > 0 ? Array.from(linkedBeliefSet)[0] : undefined,\n consolidationMetadata: {\n originalQuestionIds: args.questionIds,\n rationale: args.consolidationRationale,\n consolidatedAt: now,\n consolidatedBy: args.consolidatedBy,\n },\n },\n });\n\n // Archive the original questions\n for (const qid of args.questionIds) {\n try {\n const node = await ctx.db.get(qid as Id<\"epistemicNodes\">);\n if (node) {\n const meta = (node.metadata || {}) as Record<string, unknown>;\n await ctx.db.patch(qid as Id<\"epistemicNodes\">, {\n status: \"archived\",\n updatedAt: now,\n metadata: {\n ...meta,\n questionStatus: \"archived\",\n archivedAt: now,\n archivedReason: `Consolidated into question ${newNodeId}`,\n consolidatedIntoId: newNodeId,\n },\n });\n }\n } catch {\n // Ignore invalid IDs\n }\n }\n\n // Sprint linking removed — K-tier uses worktrees exclusively.\n // Worktree question targets are managed via worktree.targetQuestionIds.\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: newNodeId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n normalizeQuestionTopicId(scope.topicId)\n );\n\n return {\n newQuestionId: newNodeId,\n archivedCount: args.questionIds.length,\n linkedBeliefs: Array.from(linkedBeliefSet),\n };\n },\n});\n\n/**\n * 13. deleteQuestion - Archive a question (soft delete)\n * Ported from questions.ts line 1257\n */\nexport const deleteQuestion = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.questionId);\n if (!node || node.nodeType !== \"question\") {\n throw new Error(\"Question not found\");\n }\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: await resolveNodeScopeForWorkspaceIsolation(ctx, node),\n mutationName: \"epistemicQuestions.deleteQuestion\",\n });\n\n const now = Date.now();\n const meta = (node.metadata || {}) as Record<string, unknown>;\n\n // Soft-delete: set status to archived (never hard-delete)\n await ctx.db.patch(args.questionId, {\n status: \"archived\",\n updatedAt: now,\n metadata: {\n ...meta,\n questionStatus: \"archived\",\n archivedAt: now,\n archivedBy: args.userId,\n },\n });\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: args.questionId,\n changeType: \"status_changed\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: {\n status: meta.questionStatus || node.status,\n },\n newState: { status: \"archived\" },\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.questionId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n },\n});\n\n/**\n * 14. markAnsweredWithArtifact - Mark question as answered with a specific artifact\n * Ported from questions.ts line 1728\n */\nexport const markAnsweredWithArtifact = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n artifactId: v.id(\"finalArtifacts\"),\n answer: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.questionId);\n if (!node || node.nodeType !== \"question\") {\n throw new Error(\"Question not found\");\n }\n\n // Verify artifact exists\n const artifact = await resolveGraphPrimitivesAppResolvers(\n ctx\n ).getFinalArtifact(ctx, args.artifactId);\n if (!artifact) {\n throw new Error(\"Artifact not found\");\n }\n\n // Verify project access\n const scopeId = resolveQuestionScopeId({\n projectId: node.projectId,\n topicId: normalizeQuestionTopicId(node.topicId),\n });\n if (scopeId) {\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n throw new Error(\"Access denied\");\n }\n }\n\n const now = Date.now();\n const meta = (node.metadata || {}) as Record<string, unknown>;\n\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: {\n ...meta,\n questionStatus: \"answered\",\n answeringArtifactId: args.artifactId,\n answer: args.answer,\n answeredAt: now,\n answeredBy: args.userId,\n },\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.questionId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n },\n});\n\n/**\n * 15. getQuestionClusterPositions - Get cluster positions for visualization\n * Ported from questions.ts line 2788\n */\nexport const getQuestionClusterPositions = query({\n args: {\n ...optionalScopeArgs,\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n let scope:\n | Awaited<ReturnType<typeof resolveTopicProjectScope>>\n | null = null;\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch {\n return {\n positions: {},\n counts: {\n cluster: 0,\n sprintLinked: 0,\n baseline: 0,\n total: 0,\n },\n };\n }\n\n // Get all question nodes for this project\n const questionNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(scope.topicId ? \"by_topic_type\" : \"by_project_type\", (q) =>\n scope?.topicId\n ? q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"question\")\n : q.eq(\"projectId\", scope?.projectId).eq(\"nodeType\", \"question\")\n )\n .collect();\n const activeQuestionNodes = questionNodes.filter(isActiveQuestionNode);\n\n // Build result mapping\n const positions: Record<string, \"cluster\" | \"sprint_linked\" | \"baseline\"> =\n {};\n let clusterCount = 0;\n let sprintLinkedCount = 0;\n let baselineCount = 0;\n\n for (const question of activeQuestionNodes) {\n const id = question._id.toString();\n const meta = (question.metadata || {}) as Record<string, unknown>;\n const questionType =\n typeof (question as any).questionType === \"string\"\n ? (question as any).questionType\n : typeof meta.questionType === \"string\"\n ? meta.questionType\n : undefined;\n\n // Questions with questionType === \"belief_test\" or testType set are cluster questions\n if (questionType === \"belief_test\" || meta.testType) {\n positions[id] = \"cluster\";\n clusterCount++;\n }\n // Questions linked to a sprint but not belief_test are sprint_linked\n else if (resolveLinkedWorktreeId(meta)) {\n positions[id] = \"sprint_linked\";\n sprintLinkedCount++;\n }\n // Everything else is baseline/raw\n else {\n positions[id] = \"baseline\";\n baselineCount++;\n }\n }\n\n return {\n positions,\n counts: {\n cluster: clusterCount,\n sprintLinked: sprintLinkedCount,\n baseline: baselineCount,\n total: activeQuestionNodes.length,\n },\n };\n },\n});\n","import { resolveTopicProjectScope as resolveLucernTopicProjectScope } from \"@lucern/graph-primitives/topicScope\";\n\ntype ScopeArgs = {\n projectId?: string | null;\n topicId?: string | null;\n};\n\nexport type CanonicalTopicProjectScope = {\n projectId: string;\n topicId?: string;\n};\n\nfunction normalizeString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function getCanonicalScopeAccessId(\n scope: CanonicalTopicProjectScope\n): string {\n return scope.topicId ?? scope.projectId;\n}\n\nexport function requireScopeId(...ids: unknown[]): string {\n for (const id of ids) {\n const normalized = normalizeString(id);\n if (normalized) {\n return normalized;\n }\n }\n throw new Error(\"No scope identifier provided (topicId or projectId required)\");\n}\n\nexport function scopeMatchesValue(\n scope: CanonicalTopicProjectScope,\n value: ScopeArgs\n): boolean {\n const candidates = new Set<string>();\n const valueTopicId = normalizeString(value.topicId);\n const valueProjectId = normalizeString(value.projectId);\n if (valueTopicId) {\n candidates.add(valueTopicId);\n }\n if (valueProjectId) {\n candidates.add(valueProjectId);\n }\n if (candidates.size === 0) {\n return false;\n }\n return (\n candidates.has(scope.projectId) ||\n (typeof scope.topicId === \"string\" && candidates.has(scope.topicId))\n );\n}\n\nexport function dedupeDocsById<T extends { _id: unknown }>(docs: T[]): T[] {\n const seen = new Map<string, T>();\n for (const doc of docs) {\n seen.set(String(doc._id), doc);\n }\n return Array.from(seen.values());\n}\n\nexport async function resolveTopicProjectScope(\n ctx: any,\n args: ScopeArgs\n): Promise<CanonicalTopicProjectScope> {\n const resolved = await resolveLucernTopicProjectScope(ctx, {\n topicId: normalizeString(args.topicId),\n projectId: normalizeString(args.projectId),\n });\n const topicId = normalizeString(resolved.topicId);\n const projectId = requireScopeId(\n resolved.projectId,\n args.projectId,\n topicId\n );\n return { projectId, ...(topicId ? { topicId } : {}) };\n}\n\nexport async function requireProjectBackedScope(\n ctx: any,\n args: ScopeArgs\n): Promise<CanonicalTopicProjectScope> {\n return await resolveTopicProjectScope(ctx, args);\n}\n","import {\n getCanonicalScopeAccessId,\n requireProjectBackedScope,\n resolveTopicProjectScope,\n type CanonicalTopicProjectScope,\n} from \"./scopeBridge\";\n\ntype WorkflowLikeDoc = {\n _id?: string;\n topicId?: string;\n projectId?: string;\n metadata?: Record<string, unknown>;\n [key: string]: unknown;\n};\n\nexport type WorkflowBridgeResolution = {\n inputId: string | null;\n sprint: WorkflowLikeDoc | null;\n worktree: WorkflowLikeDoc | null;\n sprintId: string | null;\n worktreeId: string | null;\n topicId?: string;\n projectId?: string;\n};\n\nexport type WorkflowBridgeScopeResolution = WorkflowBridgeResolution & {\n scope: CanonicalTopicProjectScope;\n scopeId: string;\n};\n\nexport function isLegacySprintDoc(doc: unknown): doc is WorkflowLikeDoc {\n if (!doc || typeof doc !== \"object\") {\n return false;\n }\n\n if (\"metadata\" in doc && (doc as any).metadata?.pairedSprintId) {\n return false;\n }\n\n return (\n \"sprintScope\" in doc ||\n \"targetPillar\" in doc ||\n \"pillarThesis\" in doc ||\n \"synthesisState\" in doc ||\n (\"projectId\" in doc && !(\"worktreeScope\" in doc))\n );\n}\n\nexport function isWorktreeDoc(doc: unknown): doc is WorkflowLikeDoc {\n if (!doc || typeof doc !== \"object\") {\n return false;\n }\n\n return (\n \"worktreeScope\" in doc ||\n \"targetBranch\" in doc ||\n \"executionBand\" in doc ||\n \"proofArtifacts\" in doc\n );\n}\n\nexport function getPairedSprintId(doc: WorkflowLikeDoc | null | undefined) {\n const pairedSprintId = doc?.metadata?.pairedSprintId;\n return typeof pairedSprintId === \"string\" && pairedSprintId.trim().length > 0\n ? pairedSprintId\n : null;\n}\n\nfunction getStringField(\n doc: WorkflowLikeDoc | null | undefined,\n field: \"topicId\" | \"projectId\"\n) {\n const value = doc?.[field];\n return typeof value === \"string\" && value.trim().length > 0 ? value : undefined;\n}\n\nasync function findPairedWorktreeForSprint(\n ctx: {\n db: {\n query?: (...args: any[]) => {\n withIndex: (...args: any[]) => { collect: () => Promise<unknown[]> };\n };\n };\n },\n sprint: WorkflowLikeDoc\n): Promise<WorkflowLikeDoc | null> {\n const sprintId =\n typeof sprint._id === \"string\" && sprint._id.length > 0 ? sprint._id : null;\n if (!sprintId || typeof ctx.db.query !== \"function\") {\n return null;\n }\n\n let topicId = getStringField(sprint, \"topicId\");\n if (!topicId) {\n try {\n const scope = await resolveTopicProjectScope(ctx as any, {\n topicId: getStringField(sprint, \"topicId\"),\n projectId: getStringField(sprint, \"projectId\"),\n });\n topicId = scope.topicId;\n } catch {\n topicId = undefined;\n }\n }\n\n if (!topicId) {\n return null;\n }\n\n const worktrees = (await ctx.db\n .query(\"worktrees\")\n .withIndex(\"by_topicId\", (q: any) => q.eq(\"topicId\", topicId))\n .collect()) as WorkflowLikeDoc[];\n\n return (\n worktrees.find(\n (worktree) =>\n String(worktree?.metadata?.pairedSprintId || \"\") === sprintId\n ) ?? null\n );\n}\n\nexport async function resolveWorkflowBridgeDoc(\n ctx: {\n db: {\n get: (...args: any[]) => Promise<unknown>;\n query?: (...args: any[]) => any;\n };\n },\n workflowId: string | null | undefined\n): Promise<WorkflowBridgeResolution> {\n const empty: WorkflowBridgeResolution = {\n inputId: workflowId ?? null,\n sprint: null,\n worktree: null,\n sprintId: null,\n worktreeId: null,\n };\n\n if (!workflowId) {\n return empty;\n }\n\n let doc: unknown;\n try {\n doc = await ctx.db.get(workflowId as any);\n } catch {\n return empty;\n }\n\n if (!doc || typeof doc !== \"object\") {\n return empty;\n }\n\n if (isLegacySprintDoc(doc)) {\n const worktree = await findPairedWorktreeForSprint(ctx, doc);\n return {\n ...empty,\n sprint: doc,\n worktree,\n sprintId:\n typeof doc._id === \"string\" && doc._id.length > 0 ? doc._id : workflowId,\n worktreeId:\n worktree && typeof worktree._id === \"string\" && worktree._id.length > 0\n ? worktree._id\n : null,\n topicId:\n getStringField(worktree, \"topicId\") ?? getStringField(doc, \"topicId\"),\n projectId:\n getStringField(doc, \"projectId\") ?? getStringField(worktree, \"projectId\"),\n };\n }\n\n const worktree = doc as WorkflowLikeDoc;\n const pairedSprintId = getPairedSprintId(worktree);\n let sprint: WorkflowLikeDoc | null = null;\n\n if (pairedSprintId) {\n try {\n const paired = await ctx.db.get(pairedSprintId as any);\n if (isLegacySprintDoc(paired)) {\n sprint = paired;\n }\n } catch {\n sprint = null;\n }\n }\n\n return {\n ...empty,\n worktree,\n sprint,\n worktreeId:\n typeof worktree._id === \"string\" && worktree._id.length > 0\n ? worktree._id\n : workflowId,\n sprintId:\n sprint && typeof sprint._id === \"string\" && sprint._id.length > 0\n ? sprint._id\n : pairedSprintId,\n topicId: getStringField(worktree, \"topicId\") ?? getStringField(sprint, \"topicId\"),\n projectId:\n getStringField(sprint, \"projectId\") ?? getStringField(worktree, \"projectId\"),\n };\n}\n\nexport async function resolveWorkflowBridgeScope(\n ctx: { db: { get: (...args: any[]) => Promise<unknown> } },\n args: {\n workflowId?: string | null;\n topicId?: string | null;\n projectId?: string | null;\n }\n): Promise<WorkflowBridgeScopeResolution> {\n const workflow = await resolveWorkflowBridgeDoc(ctx, args.workflowId);\n const scope = await requireProjectBackedScope(ctx, {\n topicId: args.topicId ?? workflow.topicId,\n projectId: args.projectId ?? workflow.projectId,\n });\n\n return {\n ...workflow,\n scope,\n scopeId: getCanonicalScopeAccessId(scope),\n };\n}\n","/**\n * Epistemic Sources API\n *\n * Invariants:\n * - Invariant 7: evidence is context-bound. Sources carry topic, author, and capture time.\n * - Invariant 8: no retroactive reinterpretation. Source identity fields stay immutable.\n * - Invariant 14: no silent state transitions. Every create/update is audited.\n * - Invariant 15: retrieval respects boundaries. Sources live at L1 terminal leaves.\n */\n\nimport { v } from \"convex/values\";\nimport {\n checkScopeAccess,\n requireProjectAccess,\n} from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\nimport type { Doc, Id } from \"./convex\";\nimport {\n internal,\n mutation,\n query,\n} from \"./convex\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { generateGlobalId } from \"./globalId\";\nimport { resolveTopicProjectScope } from \"./topicScope\";\nimport { assertWorkspaceScopedEpistemicNodeScope } from \"./workspaceIsolation\";\n\ntype StructuredSourceError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\nfunction throwStructuredSourceError(args: {\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredSourceError;\n error.status = args.status;\n error.code = args.code;\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nfunction normalizeString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction normalizeMetadata(\n metadata: unknown\n): Record<string, unknown> {\n const record = asRecord(metadata);\n const { url: _ignoredUrl, contentSha: _ignoredSha, ...rest } = record;\n return rest;\n}\n\nfunction generateSourceContentHash(identity: string): string {\n const content = `source:${identity.trim().toLowerCase()}`;\n let hash = 5381;\n for (let index = 0; index < content.length; index += 1) {\n hash = (hash << 5) + hash + content.charCodeAt(index);\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\nexport function normalizeSourceUrl(url: string): string {\n const trimmed = normalizeString(url);\n if (!trimmed) {\n throwStructuredSourceError({\n message: \"Source URL is required.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"source.url.valid\",\n suggestion: \"Provide an absolute URL with a valid protocol and host.\",\n });\n }\n\n let parsed: URL;\n try {\n parsed = new URL(trimmed);\n } catch {\n throwStructuredSourceError({\n message: `Invalid URL: ${trimmed}`,\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"source.url.valid\",\n suggestion: \"Provide an absolute URL with a valid protocol and host.\",\n details: { url: trimmed },\n });\n }\n\n const protocol = parsed.protocol.toLowerCase();\n const hostname = parsed.hostname.toLowerCase();\n const port = parsed.port ? `:${parsed.port}` : \"\";\n const pathname =\n parsed.pathname === \"/\"\n ? \"\"\n : parsed.pathname.replace(/\\/+$/, \"\");\n\n const sortedEntries = [...parsed.searchParams.entries()].sort(([aKey, aValue], [bKey, bValue]) =>\n aKey === bKey ? aValue.localeCompare(bValue) : aKey.localeCompare(bKey)\n );\n const params = new URLSearchParams();\n for (const [key, value] of sortedEntries) {\n params.append(key, value);\n }\n const search = params.toString();\n\n return `${protocol}//${hostname}${port}${pathname}${\n search.length > 0 ? `?${search}` : \"\"\n }`;\n}\n\nasync function findSourceByIdentity(\n ctx: { db: any },\n args: { normalizedUrl?: string; sha?: string }\n) {\n const sourceNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q: any) => q.eq(\"nodeType\", \"source\"))\n .collect();\n\n let urlMatch: Doc<\"epistemicNodes\"> | null = null;\n let shaMatch: Doc<\"epistemicNodes\"> | null = null;\n\n for (const node of sourceNodes as Doc<\"epistemicNodes\">[]) {\n const metadata = asRecord(node.metadata);\n if (\n args.normalizedUrl &&\n normalizeString(metadata.url) === args.normalizedUrl &&\n !urlMatch\n ) {\n urlMatch = node;\n }\n if (args.sha && normalizeString(metadata.contentSha) === args.sha && !shaMatch) {\n shaMatch = node;\n }\n if (urlMatch && (!args.sha || shaMatch)) {\n break;\n }\n }\n\n if (urlMatch && shaMatch && String(urlMatch._id) !== String(shaMatch._id)) {\n throwStructuredSourceError({\n message: \"Source identity conflict: URL and SHA resolve to different source nodes.\",\n status: 409,\n code: \"CONTENT_SHA_MISMATCH\",\n invariantCode: \"source.content_hash_immutable\",\n suggestion:\n \"Same source identity resolves to different records. Create a new source with a distinct URL or use fork semantics.\",\n details: {\n urlSourceId: String(urlMatch._id),\n shaSourceId: String(shaMatch._id),\n },\n });\n }\n\n return urlMatch ?? shaMatch;\n}\n\nfunction buildSourceMetadata(args: {\n existingMetadata?: Record<string, unknown>;\n normalizedUrl?: string;\n sha?: string;\n kind: string;\n capturedAt?: number;\n metadata?: Record<string, unknown>;\n}) {\n const existingMetadata = args.existingMetadata ?? {};\n const nextMetadata: Record<string, unknown> = {\n ...existingMetadata,\n kind: args.kind,\n ...args.metadata,\n };\n\n if (args.capturedAt !== undefined) {\n nextMetadata.capturedAt = args.capturedAt;\n }\n if (!Object.prototype.hasOwnProperty.call(existingMetadata, \"url\") && args.normalizedUrl) {\n nextMetadata.url = args.normalizedUrl;\n } else if (Object.prototype.hasOwnProperty.call(existingMetadata, \"url\")) {\n nextMetadata.url = existingMetadata.url;\n }\n if (!Object.prototype.hasOwnProperty.call(existingMetadata, \"contentSha\") && args.sha) {\n nextMetadata.contentSha = args.sha;\n } else if (Object.prototype.hasOwnProperty.call(existingMetadata, \"contentSha\")) {\n nextMetadata.contentSha = existingMetadata.contentSha;\n }\n\n return nextMetadata;\n}\n\nfunction sourceEmbeddingText(args: {\n title?: string;\n url?: string;\n kind: string;\n metadata: Record<string, unknown>;\n}) {\n const lines = [\n normalizeString(args.title),\n normalizeString(args.url),\n args.kind,\n normalizeString(args.metadata.sourceDescription),\n ].filter((value): value is string => Boolean(value));\n return lines.join(\"\\n\");\n}\n\nexport const upsertSource = mutation({\n args: {\n url: v.optional(v.string()),\n sha: v.optional(v.string()),\n kind: v.string(),\n title: v.optional(v.string()),\n capturedAt: v.optional(v.number()),\n metadata: v.optional(v.any()),\n topicId: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const normalizedUrl = normalizeString(args.url)\n ? normalizeSourceUrl(args.url)\n : undefined;\n const sha = normalizeString(args.sha);\n\n if (!normalizedUrl && !sha) {\n throwStructuredSourceError({\n message: \"Source identity requires a URL or content SHA.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"source.identity.required\",\n suggestion: \"Provide url or sha.\",\n });\n }\n\n const now = Date.now();\n const metadataPatch = normalizeMetadata(args.metadata);\n const existing = await findSourceByIdentity(ctx, { normalizedUrl, sha });\n\n if (existing) {\n if (existing.topicId && !(await checkScopeAccess(ctx, String(existing.topicId), args.userId))) {\n throwStructuredSourceError({\n message: \"Access denied to existing source scope.\",\n status: 403,\n code: \"FORBIDDEN\",\n invariantCode: \"policy.scope_required\",\n suggestion: \"Request access to the source topic scope and retry.\",\n details: { topicId: existing.topicId },\n });\n }\n\n const existingMetadata = asRecord(existing.metadata);\n const existingSha = normalizeString(existingMetadata.contentSha);\n if (sha && existingSha && existingSha !== sha) {\n throwStructuredSourceError({\n message: \"Same URL cannot be reused with a different content hash.\",\n status: 409,\n code: \"CONTENT_SHA_MISMATCH\",\n invariantCode: \"source.content_hash_immutable\",\n suggestion:\n \"Same URL, different content. Create a new source with a distinct URL or use fork semantics.\",\n details: {\n sourceId: String(existing._id),\n url: existingMetadata.url,\n existingSha,\n receivedSha: sha,\n },\n });\n }\n\n const nextMetadata = buildSourceMetadata({\n existingMetadata,\n kind: args.kind,\n capturedAt: normalizeNumber(args.capturedAt),\n metadata: metadataPatch,\n });\n\n const patch: Record<string, unknown> = {\n metadata: nextMetadata,\n updatedAt: now,\n };\n const title = normalizeString(args.title);\n if (title) {\n patch.title = title;\n patch.canonicalText = title;\n }\n\n await ctx.db.patch(existing._id, patch);\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: existing._id,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"source\" as any,\n entityId: existing._id,\n changeType: \"source_metadata_updated\" as any,\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n topicId: existing.topicId ? String(existing.topicId) : undefined,\n previousState: {\n title: existing.title,\n metadata: existingMetadata,\n },\n newState: {\n title: title ?? existing.title,\n metadata: nextMetadata,\n },\n } as any);\n\n return (await ctx.db.get(existing._id)) ?? existing;\n }\n\n if (!normalizeString(args.topicId)) {\n throwStructuredSourceError({\n message: \"topicId is required when creating a new source.\",\n status: 400,\n code: \"INVALID_REQUEST\",\n invariantCode: \"source.context_required\",\n suggestion: \"Provide topicId when creating a new source node.\",\n });\n }\n\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"source\",\n mutationName: \"epistemicSources.upsertSource\",\n });\n if (scope.projectId) {\n await requireProjectAccess(ctx, scope.projectId, args.userId);\n }\n\n const globalId = generateGlobalId();\n const title = normalizeString(args.title);\n const nextMetadata = buildSourceMetadata({\n normalizedUrl,\n sha,\n kind: args.kind,\n capturedAt: normalizeNumber(args.capturedAt),\n metadata: metadataPatch,\n });\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"source\",\n epistemicLayer: \"L1\",\n canonicalText: title ?? normalizedUrl ?? \"source\",\n contentHash: sha ?? generateSourceContentHash(normalizedUrl ?? title ?? \"source\"),\n ...(title ? { title } : {}),\n status: \"active\",\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: nextMetadata,\n });\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n await scheduleEmbeddingGeneration({\n ctx,\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId,\n createdBy: args.userId,\n nodeType: \"source\",\n text: sourceEmbeddingText({\n title,\n url: normalizedUrl,\n kind: args.kind,\n metadata: nextMetadata,\n }),\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"source\" as any,\n entityId: nodeId,\n changeType: \"source_created\" as any,\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n previousState: null,\n newState: {\n title,\n url: normalizedUrl,\n contentSha: sha,\n kind: args.kind,\n },\n } as any);\n\n return await ctx.db.get(nodeId);\n },\n});\n\nexport const getById = query({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n sourceId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const id = args.nodeId ?? (args.sourceId as any);\n if (!id) {\n return null;\n }\n const node = (await ctx.db.get(\n id as Id<\"epistemicNodes\">\n )) as Doc<\"epistemicNodes\"> | null;\n if (!node || node.nodeType !== \"source\") {\n return null;\n }\n return node;\n },\n});\n\nexport const findByUrl = query({\n args: {\n url: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const normalizedUrl = normalizeSourceUrl(args.url);\n const node = await findSourceByIdentity(ctx, { normalizedUrl });\n return node && node.nodeType === \"source\" ? node : null;\n },\n});\n\nexport const findBySha = query({\n args: {\n sha: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const sha = normalizeString(args.sha);\n if (!sha) {\n return null;\n }\n const node = await findSourceByIdentity(ctx, { sha });\n return node && node.nodeType === \"source\" ? node : null;\n },\n});\n","// DORMANT: Ontology approval UI stubbed in EK-16.1c. Re-enable when approval workflow ships.\n\nimport { v } from \"convex/values\";\nimport { internalMutation, mutation, query } from \"./convex\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\n\nexport const getPendingForProject = query({\n args: v.any(),\n returns: permissiveReturn,\n handler: async () => ({ total: 0, bySource: [] }),\n});\n\nexport const getPendingForNode = query({\n args: v.any(),\n returns: permissiveReturn,\n handler: async () => [],\n});\n\nexport const getThemeOntologyMatches = query({\n args: v.any(),\n returns: permissiveReturn,\n handler: async () => [],\n});\n\nexport const createPendingLink = mutation({\n args: v.any(),\n returns: permissiveReturn,\n handler: async () => null,\n});\n\nexport const approve = mutation({\n args: v.any(),\n returns: permissiveReturn,\n handler: async () => ({ success: true }),\n});\n\nexport const reject = mutation({\n args: v.any(),\n returns: permissiveReturn,\n handler: async () => ({ success: true }),\n});\n\nexport const bulkApprove = mutation({\n args: v.any(),\n returns: permissiveReturn,\n handler: async (ctx, args) => ({\n approved: 0,\n total: Array.isArray((args as { linkIds?: unknown[] }).linkIds)\n ? (args as { linkIds: unknown[] }).linkIds.length\n : 0,\n }),\n});\n\nexport const bulkApproveHighConfidence = mutation({\n args: v.any(),\n returns: permissiveReturn,\n handler: async () => ({ approved: 0 }),\n});\n\nexport const createNeo4jEdge = internalMutation({\n args: v.any(),\n returns: permissiveReturn,\n handler: async () => ({ success: true }),\n});\n\nexport const batchCreatePendingLinks = internalMutation({\n args: v.any(),\n returns: permissiveReturn,\n handler: async () => ({ created: 0, autoApproved: 0 }),\n});\n","export {\n scoreEntityTypeMatch,\n rankEntityTypeMatches,\n scoreEntityConnection,\n rankEntityConnections,\n} from \"@lucern/contracts/v1/ontologies/v1\";\n\nexport type OntologyEntityType = {\n value: string;\n label: string;\n description?: string;\n subtypes?: Array<{ value: string; label: string; description?: string }>;\n};\n\nexport type EntityTypeMatch = {\n entityType: string;\n label: string;\n score: number;\n reason: string;\n};\n\nexport type EntityMatchCandidate = {\n nodeId: string;\n entityType: string;\n title: string;\n canonicalText: string;\n connectedBeliefCount: number;\n connectedEvidenceCount: number;\n};\n\nexport type EntityConnectionMatch = {\n entityNodeId: string;\n entityType: string;\n title: string;\n score: number;\n suggestedEdgeType: string;\n reason: string;\n};\n","/**\n * Shared lexical matching primitives used across MCP handlers and graph utilities.\n *\n * The goal is not to replace downstream LLM scoring. It provides a fast,\n * deterministic substrate for candidate generation, reranking, and light\n * classification across belief/question/evidence/entity surfaces.\n */\n\nexport type LexicalStrategy = \"tokenOverlap\" | \"bigramJaccard\" | \"wordOverlap\";\n\nexport type PreparedLexicalQuery = {\n raw: string;\n tokens: string[];\n words: string[];\n bigrams: Set<string>;\n};\n\nexport type LexicalSignal = {\n strategy?: LexicalStrategy;\n text: string | null | undefined;\n weight: number;\n};\n\nexport type LexicalRerankOptions = {\n lexicalWeight?: number;\n rankWeight?: number;\n};\n\nconst TOKEN_SPLIT_REGEX = /[^a-z0-9]+/;\nconst NON_ALPHANUMERIC_REGEX = /[^a-z0-9]/g;\n\n/** Stop words that add noise to scoring. */\nconst STOP_WORDS = new Set([\n \"the\",\n \"a\",\n \"an\",\n \"and\",\n \"or\",\n \"but\",\n \"in\",\n \"on\",\n \"at\",\n \"to\",\n \"for\",\n \"of\",\n \"with\",\n \"by\",\n \"from\",\n \"is\",\n \"it\",\n \"as\",\n \"be\",\n \"was\",\n \"are\",\n \"this\",\n \"that\",\n \"has\",\n \"had\",\n \"have\",\n \"not\",\n \"all\",\n \"can\",\n \"do\",\n \"its\",\n \"may\",\n \"will\",\n \"how\",\n \"what\",\n \"which\",\n \"who\",\n \"when\",\n \"where\",\n \"than\",\n \"then\",\n \"each\",\n \"into\",\n \"such\",\n \"any\",\n \"been\",\n \"if\",\n \"would\",\n \"about\",\n \"should\",\n \"these\",\n \"those\",\n \"their\",\n \"we\",\n \"our\",\n \"so\",\n]);\n\n/** Tokenize a string into lowercase words, removing stop words. */\nexport function tokenizeSearchText(text: string): string[] {\n return text\n .toLowerCase()\n .split(TOKEN_SPLIT_REGEX)\n .filter((token) => token.length >= 2 && !STOP_WORDS.has(token));\n}\n\n/** Simple stemmer: strip common English suffixes for fuzzy matching. */\nexport function stemToken(word: string): string {\n if (word.length <= 4) {\n return word;\n }\n if (word.endsWith(\"ation\")) {\n return word.slice(0, -5);\n }\n if (word.endsWith(\"ment\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"ness\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"ical\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"tion\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"sion\")) {\n return word.slice(0, -4);\n }\n if (word.endsWith(\"ing\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ous\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ive\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ity\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ics\")) {\n return word.slice(0, -3);\n }\n if (word.endsWith(\"ly\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"ed\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"er\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"es\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"al\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"ic\")) {\n return word.slice(0, -2);\n }\n if (word.endsWith(\"s\") && !word.endsWith(\"ss\")) {\n return word.slice(0, -1);\n }\n return word;\n}\n\n/** Compute token overlap score between query tokens and text tokens. */\nexport function tokenOverlapScore(\n queryTokens: string[],\n textTokens: string[]\n): number {\n if (queryTokens.length === 0 || textTokens.length === 0) {\n return 0;\n }\n\n const stemmedText = new Set(textTokens.map(stemToken));\n let matchCount = 0;\n\n for (const queryToken of queryTokens) {\n const stemmedQuery = stemToken(queryToken);\n\n if (stemmedText.has(stemmedQuery)) {\n matchCount += 1;\n continue;\n }\n\n for (const textToken of stemmedText) {\n if (\n textToken.startsWith(stemmedQuery) ||\n stemmedQuery.startsWith(textToken)\n ) {\n matchCount += 0.5;\n break;\n }\n }\n }\n\n return matchCount / queryTokens.length;\n}\n\n/**\n * Extract character bigrams from text. Normalizes to lowercase, removes\n * non-alphanumeric characters, and generates overlapping pairs.\n */\nexport function bigramTokenize(text: string): Set<string> {\n const normalized = text.toLowerCase().replace(NON_ALPHANUMERIC_REGEX, \"\");\n const bigrams = new Set<string>();\n for (let i = 0; i < normalized.length - 1; i++) {\n bigrams.add(normalized.slice(i, i + 2));\n }\n return bigrams;\n}\n\n/**\n * Extract word-level tokens from text (for coarser matching).\n * Normalizes to lowercase, splits on non-alphanumeric.\n */\nexport function wordTokenize(text: string): string[] {\n return text\n .toLowerCase()\n .split(TOKEN_SPLIT_REGEX)\n .filter((token) => token.length > 1);\n}\n\n/** Jaccard similarity between two sets: |A ∩ B| / |A ∪ B|. */\nexport function jaccardSimilarity(\n setA: Set<string>,\n setB: Set<string>\n): number {\n if (setA.size === 0 && setB.size === 0) {\n return 0;\n }\n\n let intersectionSize = 0;\n const smaller = setA.size <= setB.size ? setA : setB;\n const larger = setA.size <= setB.size ? setB : setA;\n\n for (const item of smaller) {\n if (larger.has(item)) {\n intersectionSize++;\n }\n }\n\n const unionSize = setA.size + setB.size - intersectionSize;\n return unionSize === 0 ? 0 : intersectionSize / unionSize;\n}\n\n/** Exact word overlap score: fraction of type words found in input text. */\nexport function wordOverlapScore(\n inputWords: string[],\n typeWords: string[]\n): number {\n if (typeWords.length === 0) {\n return 0;\n }\n let matches = 0;\n for (const word of typeWords) {\n if (inputWords.includes(word)) {\n matches++;\n }\n }\n return matches / typeWords.length;\n}\n\n/** Pre-compute reusable lexical structures for a query. */\nexport function prepareLexicalQuery(query: string): PreparedLexicalQuery {\n return {\n raw: query,\n tokens: tokenizeSearchText(query),\n words: wordTokenize(query),\n bigrams: bigramTokenize(query),\n };\n}\n\n/** Score a single lexical signal against a prepared query. */\nexport function scoreLexicalSignal(\n query: PreparedLexicalQuery,\n signal: LexicalSignal\n): number {\n const text = signal.text?.trim();\n if (!text) {\n return 0;\n }\n\n switch (signal.strategy ?? \"tokenOverlap\") {\n case \"bigramJaccard\":\n return jaccardSimilarity(query.bigrams, bigramTokenize(text));\n case \"wordOverlap\":\n return wordOverlapScore(query.words, wordTokenize(text));\n default:\n return tokenOverlapScore(query.tokens, tokenizeSearchText(text));\n }\n}\n\n/** Weighted lexical score across multiple textual signals. */\nexport function scoreLexicalSignals(\n query: PreparedLexicalQuery,\n signals: LexicalSignal[]\n): number {\n let weightedScore = 0;\n let totalWeight = 0;\n\n for (const signal of signals) {\n if (!signal.text?.trim() || signal.weight <= 0) {\n continue;\n }\n weightedScore += scoreLexicalSignal(query, signal) * signal.weight;\n totalWeight += signal.weight;\n }\n\n return totalWeight === 0 ? 0 : weightedScore / totalWeight;\n}\n\n/** Map a candidate's original rank position into a 0..1 prior. */\nexport function rankWindowScore(index: number, total: number): number {\n if (total <= 1) {\n return 1;\n }\n const clampedIndex = Math.max(0, Math.min(index, total - 1));\n return 1 - clampedIndex / (total - 1);\n}\n\n/** Rerank a candidate window by lexical overlap while preserving original-rank prior. */\nexport function rerankLexicalWindow<T>(\n query: string,\n items: T[],\n getText: (item: T) => string | null | undefined,\n options?: LexicalRerankOptions\n): T[] {\n const preparedQuery = prepareLexicalQuery(query);\n if (preparedQuery.tokens.length === 0 || items.length <= 1) {\n return items;\n }\n\n const lexicalWeight = options?.lexicalWeight ?? 0.65;\n const rankWeight = options?.rankWeight ?? 0.35;\n\n return items\n .map((item, index) => {\n const lexicalScore = scoreLexicalSignals(preparedQuery, [\n { text: getText(item) ?? \"\", weight: 1, strategy: \"tokenOverlap\" },\n ]);\n const rankScore = rankWindowScore(index, items.length);\n\n return {\n item,\n combinedScore: lexicalScore * lexicalWeight + rankScore * rankWeight,\n };\n })\n .sort((left, right) => right.combinedScore - left.combinedScore)\n .map(({ item }) => item);\n}\n","/**\n * @lucern/contracts — OntologiesV1 namespace (resource contracts)\n *\n * Ontology Matching Engine — L0 entity type classification and similarity scoring.\n * Provides bigram-based text similarity for matching free text against\n * ontology entity types. Domain-agnostic: works identically for companies,\n * molecules, code modules, or any tenant-defined entity vocabulary.\n *\n * Moved from src/ontology-matching.contract.ts in EK-16 T1 PR 2.\n * Compat shim remains at the old path until the Lucern 1.0.0 cut.\n */\n\nimport {\n bigramTokenize,\n jaccardSimilarity,\n prepareLexicalQuery,\n scoreLexicalSignals,\n wordOverlapScore,\n wordTokenize,\n} from \"../../text-matching.contract\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/** An entity type definition from a resolved ontology version. */\nexport type OntologyEntityType = {\n value: string;\n label: string;\n description?: string;\n subtypes?: Array<{ value: string; label: string; description?: string }>;\n};\n\n/** A scored match between input text and an entity type. */\nexport type EntityTypeMatch = {\n entityType: string;\n label: string;\n score: number;\n reason: string;\n};\n\n/** A candidate entity node that can be matched against a target node. */\nexport type EntityMatchCandidate = {\n nodeId: string;\n entityType: string;\n title: string;\n canonicalText: string;\n connectedBeliefCount: number;\n connectedEvidenceCount: number;\n};\n\n/** A scored entity match with suggested bridge edge type. */\nexport type EntityConnectionMatch = {\n entityNodeId: string;\n entityType: string;\n title: string;\n score: number;\n suggestedEdgeType: string;\n reason: string;\n};\n\n// =============================================================================\n// ENTITY TYPE SCORING\n// =============================================================================\n\n/** Weights for combining scoring signals. */\nconst MATCH_WEIGHTS = {\n tokenOverlap: 0.35,\n bigramSimilarity: 0.25,\n wordOverlap: 0.2,\n descriptionBonus: 0.2,\n} as const;\n\n/**\n * Score how well input text matches a single entity type definition.\n * Combines bigram Jaccard similarity, word overlap, and description matching.\n */\nexport function scoreEntityTypeMatch(\n inputText: string,\n entityType: OntologyEntityType\n): EntityTypeMatch {\n const preparedQuery = prepareLexicalQuery(inputText);\n const labelText = `${entityType.label} ${entityType.value}`;\n\n const tokenScore = scoreLexicalSignals(preparedQuery, [\n { text: labelText, weight: 1, strategy: \"tokenOverlap\" },\n ]);\n\n // Score against the type label (primary signal)\n const labelBigrams = bigramTokenize(entityType.label);\n const bigramScore = jaccardSimilarity(preparedQuery.bigrams, labelBigrams);\n\n // Word overlap with label + value\n const labelWords = wordTokenize(labelText);\n const wordScore = wordOverlapScore(preparedQuery.words, labelWords);\n\n // Description matching bonus (if description exists)\n let descScore = 0;\n if (entityType.description) {\n descScore = scoreLexicalSignals(preparedQuery, [\n { text: entityType.description, weight: 1, strategy: \"tokenOverlap\" },\n ]);\n }\n\n // Check subtypes for additional matches\n let subtypeBonus = 0;\n if (entityType.subtypes && entityType.subtypes.length > 0) {\n for (const subtype of entityType.subtypes) {\n const subtypeScore = scoreLexicalSignals(preparedQuery, [\n {\n text: `${subtype.label} ${subtype.value} ${subtype.description || \"\"}`,\n weight: 1,\n strategy: \"tokenOverlap\",\n },\n ]);\n subtypeBonus = Math.max(subtypeBonus, subtypeScore * 0.3); // up to 30% subtype bonus\n }\n }\n\n const score = Math.min(\n 1.0,\n tokenScore * MATCH_WEIGHTS.tokenOverlap +\n bigramScore * MATCH_WEIGHTS.bigramSimilarity +\n wordScore * MATCH_WEIGHTS.wordOverlap +\n descScore * MATCH_WEIGHTS.descriptionBonus +\n subtypeBonus\n );\n\n // Generate human-readable reason\n const reasons: string[] = [];\n if (tokenScore > 0.3) {\n reasons.push(`stem match: ${(tokenScore * 100).toFixed(0)}%`);\n }\n if (bigramScore > 0.3) {\n reasons.push(`text similarity: ${(bigramScore * 100).toFixed(0)}%`);\n }\n if (wordScore > 0.3) {\n reasons.push(`word match: ${(wordScore * 100).toFixed(0)}%`);\n }\n if (descScore > 0.2) {\n reasons.push(\"description match\");\n }\n if (subtypeBonus > 0.05) {\n reasons.push(\"subtype match\");\n }\n const reason = reasons.length > 0 ? reasons.join(\", \") : \"low similarity\";\n\n return {\n entityType: entityType.value,\n label: entityType.label,\n score,\n reason,\n };\n}\n\n/**\n * Rank all entity types in an ontology against input text.\n * Returns matches sorted by score (descending), filtered to score > minScore.\n */\nexport function rankEntityTypeMatches(\n inputText: string,\n entityTypes: OntologyEntityType[],\n options?: { minScore?: number; limit?: number }\n): EntityTypeMatch[] {\n const minScore = options?.minScore ?? 0.05;\n const limit = options?.limit ?? 10;\n\n const matches = entityTypes\n .map((et) => scoreEntityTypeMatch(inputText, et))\n .filter((m) => m.score >= minScore)\n .sort((a, b) => b.score - a.score)\n .slice(0, limit);\n\n return matches;\n}\n\n// =============================================================================\n// ENTITY DISCOVERY SCORING\n// =============================================================================\n\n/**\n * Score how well a node's text matches an entity candidate.\n * Used by discover_entity_connections to suggest missing bridge edges.\n */\nexport function scoreEntityConnection(\n nodeText: string,\n candidate: EntityMatchCandidate,\n options?: { connectivityWeight?: number }\n): EntityConnectionMatch {\n const preparedQuery = prepareLexicalQuery(nodeText);\n const connectivityWeight = options?.connectivityWeight ?? 0.3;\n const textWeight = 1.0 - connectivityWeight;\n const candidateText = `${candidate.title} ${candidate.canonicalText}`;\n const tokenScore = scoreLexicalSignals(preparedQuery, [\n { text: candidateText, weight: 1, strategy: \"tokenOverlap\" },\n ]);\n const textScore = scoreLexicalSignals(preparedQuery, [\n { text: candidateText, weight: 1, strategy: \"bigramJaccard\" },\n ]);\n const wordScore = scoreLexicalSignals(preparedQuery, [\n { text: candidateText, weight: 1, strategy: \"wordOverlap\" },\n ]);\n\n // Connectivity signal (normalized externally by caller)\n const maxConnections = Math.max(\n 1,\n candidate.connectedBeliefCount + candidate.connectedEvidenceCount\n );\n const connectivityScore = Math.min(1.0, maxConnections / 10); // soft-cap at 10\n\n const combinedTextScore =\n tokenScore * 0.45 + textScore * 0.35 + wordScore * 0.2;\n const score =\n combinedTextScore * textWeight + connectivityScore * connectivityWeight;\n\n // Suggest edge type based on entity type\n const suggestedEdgeType = suggestEdgeType(candidate.entityType);\n\n const reason =\n tokenScore > 0.3\n ? `stem match: ${(tokenScore * 100).toFixed(0)}%`\n : textScore > 0.2\n ? `name similarity: ${(textScore * 100).toFixed(0)}%`\n : wordScore > 0.2\n ? `keyword match: ${(wordScore * 100).toFixed(0)}%`\n : `connectivity: ${candidate.connectedBeliefCount} beliefs`;\n\n return {\n entityNodeId: candidate.nodeId,\n entityType: candidate.entityType,\n title: candidate.title,\n score,\n suggestedEdgeType,\n reason,\n };\n}\n\n/**\n * Suggest the most appropriate bridge edge type for an entity type.\n */\nfunction suggestEdgeType(entityType: string): string {\n switch (entityType) {\n case \"company\":\n case \"person\":\n case \"investor\":\n return \"contains\";\n case \"function\":\n case \"value_chain\":\n return \"impacts\";\n default:\n return \"contains\";\n }\n}\n\n/**\n * Rank entity candidates against a node's text.\n * Returns sorted matches above the minimum score threshold.\n */\nexport function rankEntityConnections(\n nodeText: string,\n candidates: EntityMatchCandidate[],\n options?: { minScore?: number; limit?: number; connectivityWeight?: number }\n): EntityConnectionMatch[] {\n const minScore = options?.minScore ?? 0.05;\n const limit = options?.limit ?? 10;\n\n return candidates\n .map((c) =>\n scoreEntityConnection(nodeText, c, {\n connectivityWeight: options?.connectivityWeight,\n })\n )\n .filter((m) => m.score >= minScore)\n .sort((a, b) => b.score - a.score)\n .slice(0, limit);\n}\n","/**\n * Ontology Registry\n *\n * Seeds schemaEnumConfig with platform-default entity types, subtypes,\n * and entity edge types. Provides tenant extension API.\n *\n * Categories:\n * - entity_type: Company, Person, Investor, Function, ValueChain\n * - entity_subtype: company/private, investor/vc, etc.\n * - entity_edge_type: works_at, invested_in, etc.\n *\n * @module graph-primitives/ontologyRegistry\n */\n\nimport { v } from \"convex/values\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\nimport type { MutationCtx } from \"./convex\";\nimport { internalMutation, mutation } from \"./convex\";\n\n// =============================================================================\n// PLATFORM-DEFAULT ENTITY TYPES\n// =============================================================================\n\ntype FieldSchema = {\n type: \"string\" | \"number\" | \"boolean\";\n required: boolean;\n};\n\ntype EntityTypeDefinition = {\n value: string;\n label: string;\n description: string;\n schema: Record<string, FieldSchema>;\n};\n\nconst PLATFORM_ENTITY_TYPES: EntityTypeDefinition[] = [\n {\n value: \"company\",\n label: \"Company\",\n description: \"A business entity — startup, portfolio company, or corporate\",\n schema: {\n name: { type: \"string\", required: true },\n sector: { type: \"string\", required: false },\n founded_year: { type: \"number\", required: false },\n website: { type: \"string\", required: false },\n domain: { type: \"string\", required: false },\n },\n },\n {\n value: \"person\",\n label: \"Person\",\n description: \"An individual — founder, executive, or contact\",\n schema: {\n name: { type: \"string\", required: true },\n role: { type: \"string\", required: false },\n affiliation: { type: \"string\", required: false },\n linkedin: { type: \"string\", required: false },\n },\n },\n {\n value: \"investor\",\n label: \"Investor\",\n description: \"An investment entity — fund, GP, or angel\",\n schema: {\n name: { type: \"string\", required: true },\n fund_name: { type: \"string\", required: false },\n investment_focus: { type: \"string\", required: false },\n aum: { type: \"number\", required: false },\n },\n },\n {\n value: \"function\",\n label: \"Function\",\n description: \"A business function in a value chain\",\n schema: {\n name: { type: \"string\", required: true },\n description: { type: \"string\", required: false },\n },\n },\n {\n value: \"value_chain\",\n label: \"Value Chain\",\n description: \"A value chain or industry vertical\",\n schema: {\n name: { type: \"string\", required: true },\n description: { type: \"string\", required: false },\n },\n },\n];\n\n// =============================================================================\n// PLATFORM-DEFAULT ENTITY SUBTYPES\n// =============================================================================\n\ntype SubtypeDefinition = {\n value: string;\n label: string;\n parentType: string;\n};\n\nconst PLATFORM_ENTITY_SUBTYPES: SubtypeDefinition[] = [\n // Company subtypes\n { value: \"company/private\", label: \"Private Company\", parentType: \"company\" },\n { value: \"company/corporate\", label: \"Corporate\", parentType: \"company\" },\n {\n value: \"company/portfolio\",\n label: \"Portfolio Company\",\n parentType: \"company\",\n },\n // Investor subtypes\n { value: \"investor/vc\", label: \"Venture Capital\", parentType: \"investor\" },\n { value: \"investor/lp\", label: \"Limited Partner\", parentType: \"investor\" },\n { value: \"investor/cvc\", label: \"Corporate VC\", parentType: \"investor\" },\n { value: \"investor/pe\", label: \"Private Equity\", parentType: \"investor\" },\n {\n value: \"investor/family_office\",\n label: \"Family Office\",\n parentType: \"investor\",\n },\n { value: \"investor/angel\", label: \"Angel Investor\", parentType: \"investor\" },\n];\n\n// =============================================================================\n// PLATFORM-DEFAULT ENTITY EDGE TYPES\n// =============================================================================\n\ntype EntityEdgeTypeDefinition = {\n value: string;\n label: string;\n description: string;\n};\n\nconst PLATFORM_ENTITY_EDGE_TYPES: EntityEdgeTypeDefinition[] = [\n {\n value: \"works_at\",\n label: \"Works At\",\n description: \"Person → Company/Investor employment\",\n },\n {\n value: \"performs\",\n label: \"Performs\",\n description: \"Company → Function capability\",\n },\n {\n value: \"invested_in\",\n label: \"Invested In\",\n description: \"Investor → Company investment\",\n },\n {\n value: \"founded_by\",\n label: \"Founded By\",\n description: \"Company → Person founding\",\n },\n {\n value: \"participates_in\",\n label: \"Participates In\",\n description: \"Company → ValueChain participation\",\n },\n {\n value: \"function_in\",\n label: \"Function In\",\n description: \"Function → ValueChain membership\",\n },\n {\n value: \"impacts\",\n label: \"Impacts\",\n description: \"Theme → ValueChain impact\",\n },\n {\n value: \"mentioned_in\",\n label: \"Mentioned In\",\n description: \"Entity → Source reference\",\n },\n {\n value: \"competes_with\",\n label: \"Competes With\",\n description: \"Company → Company competition\",\n },\n {\n value: \"depends_on\",\n label: \"Depends On\",\n description: \"Entity → Entity dependency\",\n },\n {\n value: \"contains\",\n label: \"Contains\",\n description: \"Containment: ValueChain → Function, Belief/Question/Theme → Entity, Entity → Evidence\",\n },\n {\n value: \"raised_from\",\n label: \"Raised From\",\n description: \"Company → Investor fundraising\",\n },\n {\n value: \"derived_from\",\n label: \"Derived From\",\n description: \"Entity → Entity deduplication merge link (replaces same_as)\",\n },\n];\n\n// =============================================================================\n// SEED MUTATION (idempotent)\n// =============================================================================\n\nasync function upsertEnumEntry(\n ctx: MutationCtx,\n entry: {\n category: string;\n value: string;\n label: string;\n description?: string;\n tier: \"platform\" | \"tenant\";\n metadata?: Record<string, unknown>;\n sortOrder?: number;\n }\n): Promise<{ inserted: boolean }> {\n const existing = await ctx.db\n .query(\"schemaEnumConfig\")\n .withIndex(\"by_category_value\", (q) =>\n q.eq(\"category\", entry.category).eq(\"value\", entry.value)\n )\n .first();\n\n if (existing) {\n return { inserted: false };\n }\n\n const now = Date.now();\n await ctx.db.insert(\"schemaEnumConfig\", {\n category: entry.category,\n value: entry.value,\n label: entry.label,\n description: entry.description,\n tier: entry.tier,\n metadata: entry.metadata,\n sortOrder: entry.sortOrder,\n status: \"active\" as const,\n createdAt: now,\n updatedAt: now,\n });\n\n return { inserted: true };\n}\n\n/**\n * Seed the ontology registry with platform-default entity types.\n * Idempotent — safe to call multiple times.\n */\nexport const seedOntologyRegistry = internalMutation({\n args: {},\n returns: permissiveReturn,\n handler: async (ctx) => {\n let inserted = 0;\n let skipped = 0;\n\n // Seed entity types\n for (let i = 0; i < PLATFORM_ENTITY_TYPES.length; i++) {\n const entityType = PLATFORM_ENTITY_TYPES[i];\n const result = await upsertEnumEntry(ctx, {\n category: \"entity_type\",\n value: entityType.value,\n label: entityType.label,\n description: entityType.description,\n tier: \"platform\",\n metadata: { schema: entityType.schema },\n sortOrder: i + 1,\n });\n if (result.inserted) {\n inserted++;\n } else {\n skipped++;\n }\n }\n\n // Seed entity subtypes\n for (let i = 0; i < PLATFORM_ENTITY_SUBTYPES.length; i++) {\n const subtype = PLATFORM_ENTITY_SUBTYPES[i];\n const result = await upsertEnumEntry(ctx, {\n category: \"entity_subtype\",\n value: subtype.value,\n label: subtype.label,\n tier: \"platform\",\n metadata: { parentType: subtype.parentType },\n sortOrder: i + 1,\n });\n if (result.inserted) {\n inserted++;\n } else {\n skipped++;\n }\n }\n\n // Seed entity edge types\n for (let i = 0; i < PLATFORM_ENTITY_EDGE_TYPES.length; i++) {\n const edgeType = PLATFORM_ENTITY_EDGE_TYPES[i];\n const result = await upsertEnumEntry(ctx, {\n category: \"entity_edge_type\",\n value: edgeType.value,\n label: edgeType.label,\n description: edgeType.description,\n tier: \"platform\",\n sortOrder: i + 1,\n });\n if (result.inserted) {\n inserted++;\n } else {\n skipped++;\n }\n }\n\n return { inserted, skipped, total: inserted + skipped };\n },\n});\n\n// =============================================================================\n// TENANT EXTENSION API\n// =============================================================================\n\n/**\n * Register a new entity type for a tenant.\n * Creates a schemaEnumConfig entry with tier='tenant'.\n */\nexport const registerEntityType = mutation({\n args: {\n tenantId: v.string(),\n value: v.string(),\n label: v.string(),\n description: v.optional(v.string()),\n schema: v.any(), // Record<string, { type, required }>\n domainNamespace: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // Auth guard — tenant mutations require authenticated user\n const userId = await getCurrentUserId(ctx as any);\n if (!userId) {\n throw new Error(\"Authentication required to register entity types.\");\n }\n\n // Check for existing entry with same value\n const existing = await ctx.db\n .query(\"schemaEnumConfig\")\n .withIndex(\"by_tenant_category\", (q) =>\n q.eq(\"tenantId\", args.tenantId).eq(\"category\", \"entity_type\")\n )\n .collect();\n\n const duplicate = existing.find((e) => e.value === args.value);\n if (duplicate) {\n throw new Error(\n `Entity type \"${args.value}\" already registered for tenant ${args.tenantId}`\n );\n }\n\n const now = Date.now();\n const id = await ctx.db.insert(\"schemaEnumConfig\", {\n tenantId: args.tenantId,\n category: \"entity_type\",\n value: args.value,\n label: args.label,\n description: args.description,\n tier: \"tenant\" as const,\n domainNamespace: args.domainNamespace,\n metadata: { schema: args.schema },\n status: \"active\" as const,\n createdAt: now,\n updatedAt: now,\n });\n\n return { id, value: args.value };\n },\n});\n","/**\n * Projection Reconciliation Runtime\n *\n * Phase 2 (WT-C) runtime hooks for Convex-authoritative / Neo4j-projected\n * reconciliation health and endpoint-class staleness evaluation.\n */\n\nimport { v } from \"convex/values\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\nimport { internal, internalAction, internalQuery, query } from \"./convex\";\nimport {\n evaluateProjectionStaleness,\n type ProjectionEndpointClass,\n} from \"./projectionStaleness\";\n\ntype QueueStatus = \"pending\" | \"in_progress\" | \"failed\" | \"succeeded\";\n\ntype QueueRow = {\n status: QueueStatus;\n createdAt: number;\n updatedAt: number;\n};\n\nasync function collectQueueByStatus(\n ctx: any,\n status: QueueStatus\n): Promise<QueueRow[]> {\n return await ctx.db\n .query(\"neo4jSyncQueue\")\n .withIndex(\"by_status\", (q: any) => q.eq(\"status\", status))\n .collect();\n}\n\nfunction maxTimestamp(\n rows: QueueRow[],\n field: \"createdAt\" | \"updatedAt\"\n): number | undefined {\n let maxValue: number | undefined;\n for (const row of rows) {\n const value = row[field];\n if (!Number.isFinite(value)) {\n continue;\n }\n if (maxValue === undefined || value > maxValue) {\n maxValue = value;\n }\n }\n return maxValue;\n}\n\nfunction minTimestamp(\n rows: QueueRow[],\n field: \"createdAt\" | \"updatedAt\"\n): number | undefined {\n let minValue: number | undefined;\n for (const row of rows) {\n const value = row[field];\n if (!Number.isFinite(value)) {\n continue;\n }\n if (minValue === undefined || value < minValue) {\n minValue = value;\n }\n }\n return minValue;\n}\n\nasync function getQueueSnapshot(ctx: any) {\n const [pendingRows, inProgressRows, failedRows, succeededRows] =\n await Promise.all([\n collectQueueByStatus(ctx, \"pending\"),\n collectQueueByStatus(ctx, \"in_progress\"),\n collectQueueByStatus(ctx, \"failed\"),\n collectQueueByStatus(ctx, \"succeeded\"),\n ]);\n\n const now = Date.now();\n const backlogOldestCreatedAt = minTimestamp(\n [...pendingRows, ...inProgressRows],\n \"createdAt\"\n );\n const queueBacklogAgeMs =\n backlogOldestCreatedAt !== undefined\n ? Math.max(0, now - backlogOldestCreatedAt)\n : 0;\n const lastSuccessfulSyncAt = maxTimestamp(succeededRows, \"updatedAt\");\n\n return {\n now,\n queuePendingCount: pendingRows.length,\n queueInProgressCount: inProgressRows.length,\n queueFailedCount: failedRows.length,\n queueSucceededCount: succeededRows.length,\n queueBacklogAgeMs,\n backlogOldestCreatedAt,\n lastSuccessfulSyncAt,\n };\n}\n\nfunction buildEndpointAssessments(\n snapshot: Awaited<ReturnType<typeof getQueueSnapshot>>\n) {\n const analytics = evaluateProjectionStaleness({\n endpointClass: \"analytics\",\n queueBacklogAgeMs: snapshot.queueBacklogAgeMs,\n queuePendingCount:\n snapshot.queuePendingCount + snapshot.queueInProgressCount,\n queueFailedCount: snapshot.queueFailedCount,\n nowMs: snapshot.now,\n lastSuccessfulSyncAt: snapshot.lastSuccessfulSyncAt,\n });\n const traversal = evaluateProjectionStaleness({\n endpointClass: \"traversal\",\n queueBacklogAgeMs: snapshot.queueBacklogAgeMs,\n queuePendingCount:\n snapshot.queuePendingCount + snapshot.queueInProgressCount,\n queueFailedCount: snapshot.queueFailedCount,\n nowMs: snapshot.now,\n lastSuccessfulSyncAt: snapshot.lastSuccessfulSyncAt,\n });\n const entityRead = evaluateProjectionStaleness({\n endpointClass: \"entity_read\",\n queueBacklogAgeMs: snapshot.queueBacklogAgeMs,\n queuePendingCount:\n snapshot.queuePendingCount + snapshot.queueInProgressCount,\n queueFailedCount: snapshot.queueFailedCount,\n nowMs: snapshot.now,\n lastSuccessfulSyncAt: snapshot.lastSuccessfulSyncAt,\n });\n const nonGraph = evaluateProjectionStaleness({\n endpointClass: \"non_graph\",\n queueBacklogAgeMs: snapshot.queueBacklogAgeMs,\n queuePendingCount:\n snapshot.queuePendingCount + snapshot.queueInProgressCount,\n queueFailedCount: snapshot.queueFailedCount,\n nowMs: snapshot.now,\n lastSuccessfulSyncAt: snapshot.lastSuccessfulSyncAt,\n });\n\n return {\n analytics,\n traversal,\n entityRead,\n nonGraph,\n };\n}\n\nfunction assertAuthenticated(clerkId: string | null): string {\n if (!clerkId) {\n throw new Error(\"Authentication required\");\n }\n return clerkId;\n}\n\nexport const getProjectionReconciliationStatusInternal = internalQuery({\n args: {},\n returns: permissiveReturn,\n handler: async (ctx) => {\n const snapshot = await getQueueSnapshot(ctx);\n const assessments = buildEndpointAssessments(snapshot);\n\n return {\n ...snapshot,\n endpointAssessments: assessments,\n generatedAt: snapshot.now,\n };\n },\n});\n\nexport const getProjectionReconciliationStatus = query({\n args: {},\n returns: permissiveReturn,\n handler: async (ctx) => {\n assertAuthenticated(await getCurrentUserId(ctx));\n const snapshot = await getQueueSnapshot(ctx);\n const assessments = buildEndpointAssessments(snapshot);\n\n return {\n ...snapshot,\n endpointAssessments: assessments,\n generatedAt: snapshot.now,\n };\n },\n});\n\nexport const assessProjectionStaleness = query({\n args: {\n endpointClass: v.union(\n v.literal(\"analytics\"),\n v.literal(\"traversal\"),\n v.literal(\"entity_read\"),\n v.literal(\"non_graph\")\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n assertAuthenticated(await getCurrentUserId(ctx));\n const snapshot = await getQueueSnapshot(ctx);\n const endpointClass = args.endpointClass as ProjectionEndpointClass;\n\n return {\n endpointClass,\n assessment: evaluateProjectionStaleness({\n endpointClass,\n queueBacklogAgeMs: snapshot.queueBacklogAgeMs,\n queuePendingCount:\n snapshot.queuePendingCount + snapshot.queueInProgressCount,\n queueFailedCount: snapshot.queueFailedCount,\n nowMs: snapshot.now,\n lastSuccessfulSyncAt: snapshot.lastSuccessfulSyncAt,\n }),\n snapshot,\n };\n },\n});\n\nexport const runProjectionRepairCycle = internalAction({\n args: {\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const processed = await ctx.runAction(\n internal.neo4jSync.processRetryQueue,\n {\n limit: args.limit ?? 25,\n }\n );\n const status = await ctx.runQuery(\n internal.projectionReconciliation\n .getProjectionReconciliationStatusInternal,\n {}\n );\n\n return {\n processed,\n status,\n runAt: Date.now(),\n };\n },\n});\n","/**\n * projectionStaleness module implementation.\n */\n\nexport type ProjectionEndpointClass =\n | \"analytics\"\n | \"traversal\"\n | \"entity_read\"\n | \"non_graph\";\n\nexport type ProjectionFallbackMode =\n | \"fail_with_503\"\n | \"degrade_to_convex_depth_limited\"\n | \"fallback_to_convex_entity_read\"\n | \"none\";\n\nexport type ProjectionStalenessPolicy = {\n endpointClass: ProjectionEndpointClass;\n thresholdMs: number;\n fallbackMode: ProjectionFallbackMode;\n nonOverridable: true;\n};\n\nexport type ProjectionStalenessInput = {\n endpointClass: ProjectionEndpointClass;\n queueBacklogAgeMs: number;\n queuePendingCount: number;\n queueFailedCount: number;\n nowMs?: number;\n lastSuccessfulSyncAt?: number;\n};\n\nexport type ProjectionStalenessEnvelope = {\n endpointClass: ProjectionEndpointClass;\n stalenessMs: number;\n thresholdMs: number;\n isStale: boolean;\n fallbackMode: ProjectionFallbackMode;\n queuePendingCount: number;\n queueFailedCount: number;\n evaluatedAt: number;\n lastSuccessfulSyncAt?: number;\n lastSuccessfulSyncAgeMs?: number;\n reasonCode:\n | \"PROJECTION_HEALTHY\"\n | \"PROJECTION_STALE\"\n | \"PROJECTION_STALE_WITH_FAILED_RETRIES\";\n};\n\nexport const PROJECTION_STALENESS_POLICIES: Record<\n ProjectionEndpointClass,\n ProjectionStalenessPolicy\n> = {\n analytics: {\n endpointClass: \"analytics\",\n thresholdMs: 30_000,\n fallbackMode: \"fail_with_503\",\n nonOverridable: true,\n },\n traversal: {\n endpointClass: \"traversal\",\n thresholdMs: 60_000,\n fallbackMode: \"degrade_to_convex_depth_limited\",\n nonOverridable: true,\n },\n entity_read: {\n endpointClass: \"entity_read\",\n thresholdMs: 5 * 60_000,\n fallbackMode: \"fallback_to_convex_entity_read\",\n nonOverridable: true,\n },\n non_graph: {\n endpointClass: \"non_graph\",\n thresholdMs: Number.POSITIVE_INFINITY,\n fallbackMode: \"none\",\n nonOverridable: true,\n },\n};\n\nexport function getProjectionStalenessPolicy(\n endpointClass: ProjectionEndpointClass\n): ProjectionStalenessPolicy {\n return PROJECTION_STALENESS_POLICIES[endpointClass];\n}\n\nexport function evaluateProjectionStaleness(\n input: ProjectionStalenessInput\n): ProjectionStalenessEnvelope {\n const policy = getProjectionStalenessPolicy(input.endpointClass);\n const evaluatedAt = input.nowMs ?? Date.now();\n const stalenessMs = Math.max(0, input.queueBacklogAgeMs);\n const isStale = stalenessMs > policy.thresholdMs;\n const lastSuccessfulSyncAgeMs =\n input.lastSuccessfulSyncAt !== undefined\n ? Math.max(0, evaluatedAt - input.lastSuccessfulSyncAt)\n : undefined;\n\n return {\n endpointClass: input.endpointClass,\n stalenessMs,\n thresholdMs: policy.thresholdMs,\n isStale,\n fallbackMode: policy.fallbackMode,\n queuePendingCount: input.queuePendingCount,\n queueFailedCount: input.queueFailedCount,\n evaluatedAt,\n lastSuccessfulSyncAt: input.lastSuccessfulSyncAt,\n lastSuccessfulSyncAgeMs,\n reasonCode: isStale\n ? input.queueFailedCount > 0\n ? \"PROJECTION_STALE_WITH_FAILED_RETRIES\"\n : \"PROJECTION_STALE\"\n : \"PROJECTION_HEALTHY\",\n };\n}\n\nexport function shouldFailClosedForProjection(\n envelope: ProjectionStalenessEnvelope\n): boolean {\n return envelope.isStale && envelope.fallbackMode === \"fail_with_503\";\n}\n","/**\n * questionEvidenceLinks module implementation.\n */\n\nimport { v } from \"convex/values\";\nimport { checkProjectAccess } from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\nimport type { Id } from \"./convex\";\nimport { internal, mutation, query } from \"./convex\";\nimport {\n deriveMatcherReviewStatus,\n isOperationalLinkStatus,\n type LinkSuggestionStatus,\n mergeLinkSuggestionStatus,\n resolveReviewedLinkStatus,\n} from \"./matcherFeedbackUtils\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs } from \"./topicScope\";\n\nconst questionIdUnion = v.id(\"epistemicNodes\");\nconst insightIdUnion = v.id(\"epistemicNodes\");\nconst suggestionStatusValidator = v.union(\n v.literal(\"suggested\"),\n v.literal(\"approved\"),\n v.literal(\"dismissed\")\n);\nconst matcherMetadataValidator = v.object({\n surface: v.string(),\n matcherFamily: v.optional(v.string()),\n matcherKey: v.optional(v.string()),\n matcherVersion: v.optional(v.string()),\n reviewStatus: v.optional(\n v.union(\n v.literal(\"pending\"),\n v.literal(\"accepted\"),\n v.literal(\"rejected\"),\n v.literal(\"auto_accepted\"),\n v.literal(\"superseded\")\n )\n ),\n configSnapshot: v.optional(v.any()),\n signalSnapshot: v.optional(v.any()),\n outcomeMetadata: v.optional(v.any()),\n});\n\ntype MatcherMetadata = {\n surface: string;\n matcherFamily?: string;\n matcherKey?: string;\n matcherVersion?: string;\n reviewStatus?:\n | \"pending\"\n | \"accepted\"\n | \"rejected\"\n | \"auto_accepted\"\n | \"superseded\";\n configSnapshot?: Record<string, unknown>;\n signalSnapshot?: Record<string, unknown>;\n outcomeMetadata?: Record<string, unknown>;\n};\n\nasync function markProjectGraphDirty(\n ctx: any,\n projectId: string | undefined | null\n): Promise<void> {\n if (!projectId) {\n return;\n }\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n { projectId }\n );\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(ctx, projectId, {\n lastActivityAt: Date.now(),\n });\n}\n\nasync function recordMatcherDecision(\n ctx: any,\n args: {\n questionNode: any;\n questionId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n linkId: string;\n linkStatus?: LinkSuggestionStatus;\n matcherMetadata?: MatcherMetadata;\n reviewedBy?: string;\n decisionReason?: string;\n }\n): Promise<void> {\n if (!args.matcherMetadata) {\n return;\n }\n\n await ctx.runMutation(\"matcherFeedback:recordDecision\" as any, {\n projectId: args.questionNode.projectId,\n topicId: args.questionNode.topicId,\n surface: args.matcherMetadata.surface,\n matcherFamily: args.matcherMetadata.matcherFamily,\n matcherKey: args.matcherMetadata.matcherKey,\n matcherVersion: args.matcherMetadata.matcherVersion,\n sourceEntityId: String(args.insightId),\n targetEntityId: String(args.questionId),\n suggestionTable: \"questionEvidenceLinks\",\n suggestionId: args.linkId,\n reviewStatus: deriveMatcherReviewStatus({\n explicitReviewStatus: args.matcherMetadata.reviewStatus,\n linkStatus: args.linkStatus,\n }),\n reviewedBy: args.reviewedBy,\n decisionReason: args.decisionReason,\n configSnapshot: args.matcherMetadata.configSnapshot,\n signalSnapshot: args.matcherMetadata.signalSnapshot,\n outcomeMetadata: args.matcherMetadata.outcomeMetadata,\n });\n}\n\nasync function applyOperationalLinkEffects(\n ctx: any,\n args: {\n questionNode: any;\n questionId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n relevance?: number;\n rationale?: string;\n createdBy: string;\n }\n): Promise<void> {\n const meta = ((args.questionNode as any).metadata || {}) as Record<\n string,\n unknown\n >;\n const currentRelated = (meta.relatedInsightIds as string[]) || [];\n if (!currentRelated.includes(args.insightId)) {\n await ctx.db.patch(args.questionId, {\n updatedAt: Date.now(),\n metadata: {\n ...meta,\n relatedInsightIds: [...currentRelated, args.insightId],\n },\n } as any);\n }\n\n try {\n const questionNode = await ctx.db.get(args.questionId);\n const evidenceNode = await ctx.db.get(args.insightId);\n\n if (\n questionNode &&\n questionNode.nodeType === \"question\" &&\n evidenceNode &&\n evidenceNode.nodeType === \"evidence\" &&\n questionNode.globalId &&\n evidenceNode.globalId\n ) {\n const existingEdge = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", evidenceNode._id).eq(\"toNodeId\", questionNode._id)\n )\n .first();\n\n if (!existingEdge) {\n const globalId = `edge-derived_from-${evidenceNode._id}-${questionNode._id}-${Date.now()}`;\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId,\n fromGlobalId: evidenceNode.globalId,\n toGlobalId: questionNode.globalId,\n edgeType: \"derived_from\",\n weight: args.relevance ?? 0.5,\n context: args.rationale || \"Linked from question evidence links\",\n projectId: args.questionNode.projectId\n ? String(args.questionNode.projectId)\n : undefined,\n createdBy: args.createdBy,\n fromNodeType: \"evidence\",\n toNodeType: \"question\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n }\n }\n } catch (e) {\n console.error(\"[EpistemicSpine] Failed to create derived_from edge:\", e);\n }\n\n if (args.questionNode.projectId) {\n await ctx.scheduler.runAfter(\n 0,\n \"verificationActions:deepVerifyEvidence\" as any,\n {\n insightId: args.insightId,\n targetType: \"question\",\n targetId: args.questionId,\n projectId: args.questionNode.projectId,\n userId: args.createdBy,\n }\n );\n }\n}\n\nasync function removeOperationalLinkEffects(\n ctx: any,\n args: {\n questionId: Id<\"epistemicNodes\">;\n insightId: Id<\"epistemicNodes\">;\n }\n): Promise<void> {\n const question = await ctx.db.get(args.questionId);\n if (question) {\n const meta = ((question as any).metadata || {}) as Record<string, unknown>;\n const currentRelated = (meta.relatedInsightIds as string[]) || [];\n await ctx.db.patch(args.questionId, {\n updatedAt: Date.now(),\n metadata: {\n ...meta,\n relatedInsightIds: currentRelated.filter(\n (id: string) => id !== args.insightId\n ),\n },\n } as any);\n }\n\n try {\n const questionNode = await ctx.db.get(args.questionId);\n const evidenceNode = await ctx.db.get(args.insightId);\n\n if (\n questionNode &&\n questionNode.nodeType === \"question\" &&\n evidenceNode &&\n evidenceNode.nodeType === \"evidence\"\n ) {\n const edge = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", evidenceNode._id).eq(\"toNodeId\", questionNode._id)\n )\n .first();\n\n if (edge) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n }\n }\n } catch (e) {\n console.error(\"[EpistemicSpine] Failed to remove edge:\", e);\n }\n}\n\n/**\n * Question Evidence Links Management\n *\n * Links evidence (insights) to questions to track what evidence helps answer which questions.\n */\n\nexport const create = mutation({\n args: {\n questionId: questionIdUnion,\n insightId: insightIdUnion,\n helpsAnswer: v.boolean(),\n relevance: v.optional(v.number()),\n rationale: v.optional(v.string()),\n impactScore: v.optional(v.number()),\n impact: v.optional(\n v.union(\n v.literal(\"supports\"),\n v.literal(\"contradicts\"),\n v.literal(\"neutral\")\n )\n ),\n status: v.optional(suggestionStatusValidator),\n matcherMetadata: v.optional(matcherMetadataValidator),\n createdBy: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const question = await ctx.db.get(args.questionId);\n if (!question) {\n throw new Error(\"Question not found\");\n }\n\n const insight = await ctx.db.get(args.insightId);\n if (!insight) {\n throw new Error(\"Insight not found\");\n }\n\n const existingLinks = await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", args.questionId))\n .collect();\n\n const duplicate = existingLinks.find(\n (link) => link.insightId === args.insightId\n );\n\n const impactScore = args.impactScore;\n const derivedImpact =\n impactScore !== undefined\n ? impactScore > 0\n ? \"supports\"\n : impactScore < 0\n ? \"contradicts\"\n : \"neutral\"\n : args.impact;\n\n if (duplicate) {\n const nextStatus = mergeLinkSuggestionStatus(\n duplicate.status as LinkSuggestionStatus | undefined,\n args.status\n );\n\n await ctx.db.patch(duplicate._id, {\n helpsAnswer: args.helpsAnswer,\n relevance: args.relevance,\n rationale: args.rationale,\n impactScore: args.impactScore,\n impact: derivedImpact,\n status: nextStatus,\n });\n\n if (\n isOperationalLinkStatus(nextStatus) &&\n !isOperationalLinkStatus(\n duplicate.status as LinkSuggestionStatus | undefined\n )\n ) {\n await applyOperationalLinkEffects(ctx, {\n questionNode: question,\n questionId: args.questionId,\n insightId: args.insightId,\n relevance: args.relevance,\n rationale: args.rationale,\n createdBy: args.createdBy,\n });\n }\n\n await recordMatcherDecision(ctx, {\n questionNode: question,\n questionId: args.questionId,\n insightId: args.insightId,\n linkId: duplicate._id,\n linkStatus: nextStatus,\n matcherMetadata: args.matcherMetadata as MatcherMetadata | undefined,\n });\n\n await markProjectGraphDirty(ctx, question.projectId);\n return duplicate._id;\n }\n\n const linkId = await ctx.db.insert(\"questionEvidenceLinks\", {\n questionId: args.questionId,\n insightId: args.insightId,\n helpsAnswer: args.helpsAnswer,\n relevance: args.relevance,\n rationale: args.rationale,\n impactScore: args.impactScore,\n impact: derivedImpact,\n status: args.status,\n createdBy: args.createdBy,\n createdAt: Date.now(),\n });\n\n await recordMatcherDecision(ctx, {\n questionNode: question,\n questionId: args.questionId,\n insightId: args.insightId,\n linkId,\n linkStatus: args.status,\n matcherMetadata: args.matcherMetadata as MatcherMetadata | undefined,\n });\n\n if (isOperationalLinkStatus(args.status)) {\n await applyOperationalLinkEffects(ctx, {\n questionNode: question,\n questionId: args.questionId,\n insightId: args.insightId,\n relevance: args.relevance,\n rationale: args.rationale,\n createdBy: args.createdBy,\n });\n }\n\n await markProjectGraphDirty(ctx, question.projectId);\n return linkId;\n },\n});\n\nexport const updateImpact = mutation({\n args: {\n linkId: v.id(\"questionEvidenceLinks\"),\n impactScore: v.optional(v.number()),\n impact: v.optional(\n v.union(\n v.literal(\"supports\"),\n v.literal(\"contradicts\"),\n v.literal(\"neutral\")\n )\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const link = await ctx.db.get(args.linkId);\n if (!link) {\n throw new Error(\"Link not found\");\n }\n\n const newImpactScore = args.impactScore;\n const newImpact =\n newImpactScore !== undefined\n ? newImpactScore > 0\n ? \"supports\"\n : newImpactScore < 0\n ? \"contradicts\"\n : \"neutral\"\n : args.impact;\n\n const updateData: {\n impact?: \"supports\" | \"contradicts\" | \"neutral\";\n impactScore?: number;\n } = {};\n if (newImpact) {\n updateData.impact = newImpact;\n }\n if (newImpactScore !== undefined) {\n updateData.impactScore = newImpactScore;\n }\n\n await ctx.db.patch(args.linkId, updateData);\n const question = await ctx.db.get(link.questionId);\n await markProjectGraphDirty(ctx, question?.projectId);\n\n return { success: true, newImpact, newImpactScore };\n },\n});\n\nexport const reviewSuggestion = mutation({\n args: {\n linkId: v.id(\"questionEvidenceLinks\"),\n status: v.union(v.literal(\"approved\"), v.literal(\"dismissed\")),\n userId: v.string(),\n reason: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const link = await ctx.db.get(args.linkId);\n if (!link) {\n throw new Error(\"Link not found\");\n }\n\n const question = await ctx.db.get(link.questionId);\n if (!question) {\n throw new Error(\"Question not found\");\n }\n\n let hasAccess = link.createdBy === args.userId;\n if (!hasAccess && question.projectId) {\n hasAccess = await checkProjectAccess(\n ctx,\n question.projectId,\n args.userId\n );\n }\n if (!hasAccess) {\n throw new Error(\"No permission to review this link\");\n }\n\n const previousStatus = link.status as LinkSuggestionStatus | undefined;\n const nextStatus = resolveReviewedLinkStatus(args.status);\n await ctx.db.patch(args.linkId, { status: nextStatus });\n\n if (nextStatus === \"approved\" && !isOperationalLinkStatus(previousStatus)) {\n await applyOperationalLinkEffects(ctx, {\n questionNode: question,\n questionId: link.questionId,\n insightId: link.insightId,\n relevance: link.relevance,\n rationale: link.rationale,\n createdBy: args.userId,\n });\n }\n if (nextStatus === \"dismissed\" && isOperationalLinkStatus(previousStatus)) {\n await removeOperationalLinkEffects(ctx, {\n questionId: link.questionId,\n insightId: link.insightId,\n });\n }\n\n await ctx.runMutation(\"matcherFeedback:recordDecision\" as any, {\n projectId: question.projectId,\n topicId: question.topicId,\n sourceEntityId: String(link.insightId),\n targetEntityId: String(link.questionId),\n suggestionTable: \"questionEvidenceLinks\",\n suggestionId: args.linkId,\n reviewStatus: deriveMatcherReviewStatus({ linkStatus: nextStatus }),\n reviewedBy: args.userId,\n decisionReason: args.reason,\n outcomeMetadata: args.reason ? { reason: args.reason } : undefined,\n });\n\n await markProjectGraphDirty(ctx, question.projectId);\n return { success: true, status: nextStatus };\n },\n});\n\nexport const remove = mutation({\n args: {\n linkId: v.id(\"questionEvidenceLinks\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const link = await ctx.db.get(args.linkId);\n if (!link) {\n throw new Error(\"Link not found\");\n }\n if (link.createdBy !== args.userId) {\n throw new Error(\"Only the creator can remove this link\");\n }\n\n const question = await ctx.db.get(link.questionId);\n if (\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n ) {\n await removeOperationalLinkEffects(ctx, {\n questionId: link.questionId,\n insightId: link.insightId,\n });\n }\n\n await ctx.db.delete(args.linkId);\n await markProjectGraphDirty(ctx, question?.projectId);\n },\n});\n\nexport const getByQuestion = query({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const links = await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", args.questionId))\n .collect();\n\n return links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n },\n});\n\nexport const getPendingSuggestions = query({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const links = await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", args.questionId))\n .collect();\n\n return links.filter((link) => link.status === \"suggested\");\n },\n});\n\nexport const getByInsight = query({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const links = await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_insightId\", (q) => q.eq(\"insightId\", args.insightId))\n .collect();\n\n return links.filter((link) =>\n isOperationalLinkStatus(link.status as LinkSuggestionStatus | undefined)\n );\n },\n});\n\nexport const getEvidenceWithDetails = query({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const questionNode = await ctx.db.get(args.questionId);\n if (!questionNode || questionNode.nodeType !== \"question\") {\n return [];\n }\n\n const links = await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", args.questionId))\n .collect();\n\n const linksWithDetails = await Promise.all(\n links\n .filter((link) =>\n isOperationalLinkStatus(\n link.status as LinkSuggestionStatus | undefined\n )\n )\n .map(async (link) => {\n const insight = await ctx.db.get(link.insightId);\n return {\n ...link,\n insight,\n };\n })\n );\n\n const filtered = linksWithDetails.filter((l) => l.insight !== null);\n const epistemicEdgeResults: typeof filtered = [];\n const seenEvidenceIds = new Set(filtered.map((l) => String(l.insightId)));\n\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", args.questionId).eq(\"edgeType\", \"derived_from\")\n )\n .collect();\n\n for (const edge of edges) {\n if (!edge.fromNodeId || seenEvidenceIds.has(String(edge.fromNodeId))) {\n continue;\n }\n seenEvidenceIds.add(String(edge.fromNodeId));\n\n const evidenceNode = await ctx.db.get(edge.fromNodeId);\n if (\n !evidenceNode ||\n evidenceNode.nodeType !== \"evidence\" ||\n evidenceNode.status !== \"active\"\n ) {\n continue;\n }\n\n const meta = (evidenceNode.metadata || {}) as Record<string, unknown>;\n epistemicEdgeResults.push({\n _id: edge._id as any,\n _creationTime: edge.createdAt,\n questionId: args.questionId,\n insightId: edge.fromNodeId as any,\n impact:\n (edge.weight ?? 0) > 0\n ? \"supports\"\n : (edge.weight ?? 0) < 0\n ? \"contradicts\"\n : \"neutral\",\n impactScore: edge.weight != null ? Math.round(edge.weight * 10) : 0,\n rationale: edge.context || null,\n userId: edge.createdBy,\n createdAt: edge.createdAt,\n insight: {\n _id: evidenceNode._id,\n _creationTime: evidenceNode.createdAt,\n insight:\n evidenceNode.canonicalText ||\n evidenceNode.title ||\n (meta.snippet as string) ||\n null,\n text:\n evidenceNode.canonicalText ||\n evidenceNode.title ||\n (meta.snippet as string) ||\n null,\n title: evidenceNode.title || null,\n canonicalText: evidenceNode.canonicalText || null,\n source: (meta.sourceTitle as string) || null,\n sourceUrl: (meta.sourceUrl as string) || null,\n verificationStatus: evidenceNode.verificationStatus || \"unverified\",\n },\n } as any);\n }\n\n return [...filtered, ...epistemicEdgeResults];\n },\n});\n\nexport const getByProject = query({\n args: {\n ...optionalScopeArgs,\n userId: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId) {\n return [];\n }\n const hasAccess = await checkProjectAccess(\n ctx,\n args.projectId,\n args.userId\n );\n if (!hasAccess) {\n return [];\n }\n\n const pageSize = Math.max(1, Math.min(Math.floor(args.limit ?? 300), 1000));\n const questionScanLimit = Math.min(pageSize * 2, 1000);\n\n const questions = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(args.topicId ? \"by_topic_type\" : \"by_project_type\", (q: any) =>\n args.topicId ? q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"question\") : q.eq(\"projectId\", args.projectId).eq(\"nodeType\", \"question\")\n )\n .order(\"desc\")\n .take(questionScanLimit);\n\n const questionIds = questions.slice(0, pageSize).map((q) => q._id);\n const allLinks = await Promise.all(\n questionIds.map(async (questionId) => {\n const links = await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", questionId))\n .collect();\n return links.filter((link) =>\n isOperationalLinkStatus(\n link.status as LinkSuggestionStatus | undefined\n )\n );\n })\n );\n\n const flattenedLinks = allLinks.flat().slice(0, pageSize * 5);\n const questionDetails: Record<\n string,\n { _id: string; question: string; status: string }\n > = {};\n\n for (const question of questions) {\n const meta = (question.metadata || {}) as Record<string, unknown>;\n questionDetails[question._id] = {\n _id: question._id,\n question: question.canonicalText || question.title || \"\",\n status: (meta.status as string) || question.status || \"active\",\n };\n }\n\n return {\n links: flattenedLinks,\n questionDetails,\n };\n },\n});\n\nexport const getLinkedQuestionsForInsight = query({\n args: {\n insightId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const links = await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_insightId\", (q) => q.eq(\"insightId\", args.insightId))\n .collect();\n\n const linkedQuestions = await Promise.all(\n links\n .filter((link) =>\n isOperationalLinkStatus(\n link.status as LinkSuggestionStatus | undefined\n )\n )\n .map(async (link) => {\n const question = await ctx.db.get(link.questionId);\n return {\n linkId: link._id,\n questionId: link.questionId,\n helpsAnswer: link.helpsAnswer,\n relevance: link.relevance,\n rationale: link.rationale,\n createdBy: link.createdBy,\n createdAt: link.createdAt,\n question: question\n ? {\n _id: question._id,\n question:\n (question as any).question ||\n (question as any).canonicalText ||\n \"\",\n status: question.status,\n }\n : null,\n };\n })\n );\n\n return linkedQuestions.filter((row) => row.question !== null);\n },\n});\n","export {\n tokenizeSearchText,\n stemToken,\n tokenOverlapScore,\n bigramTokenize,\n wordTokenize,\n jaccardSimilarity,\n wordOverlapScore,\n prepareLexicalQuery,\n scoreLexicalSignal,\n scoreLexicalSignals,\n rankWindowScore,\n rerankLexicalWindow,\n} from \"@lucern/contracts/text-matching.contract\";\n\nexport type LexicalStrategy = \"tokenOverlap\" | \"bigramJaccard\" | \"wordOverlap\";\n\nexport type PreparedLexicalQuery = {\n raw: string;\n tokens: string[];\n words: string[];\n bigrams: Set<string>;\n};\n\nexport type LexicalSignal = {\n strategy?: LexicalStrategy;\n text: string | null | undefined;\n weight: number;\n};\n\nexport type LexicalRerankOptions = {\n lexicalWeight?: number;\n rankWeight?: number;\n};\n"]}
|