@lucern/graph-primitives 0.1.0-alpha.4 → 0.3.0-alpha.1

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.
Files changed (78) hide show
  1. package/dist/beliefDecay.js +229 -1115
  2. package/dist/beliefDecay.js.map +1 -1
  3. package/dist/beliefEvidenceLinks.js +53 -834
  4. package/dist/beliefEvidenceLinks.js.map +1 -1
  5. package/dist/confidencePropagationDispatch.d.ts +3 -3
  6. package/dist/confidencePropagationDispatch.js +30 -308
  7. package/dist/confidencePropagationDispatch.js.map +1 -1
  8. package/dist/contradictions.js +5 -797
  9. package/dist/contradictions.js.map +1 -1
  10. package/dist/edges/contradicts.js +1 -122
  11. package/dist/edges/contradicts.js.map +1 -1
  12. package/dist/edges/dependsOn.js +14 -172
  13. package/dist/edges/dependsOn.js.map +1 -1
  14. package/dist/edges/elaborates.js +1 -49
  15. package/dist/edges/elaborates.js.map +1 -1
  16. package/dist/edges/index.js +14 -277
  17. package/dist/edges/index.js.map +1 -1
  18. package/dist/edges/informs.js +1 -62
  19. package/dist/edges/informs.js.map +1 -1
  20. package/dist/edges/propagationTypes.d.ts +2 -2
  21. package/dist/edges/propagationTypes.js.map +1 -1
  22. package/dist/edges/refutes.js +1 -62
  23. package/dist/edges/refutes.js.map +1 -1
  24. package/dist/edges/supports.js +1 -122
  25. package/dist/edges/supports.js.map +1 -1
  26. package/dist/edges/utils.d.ts +6 -6
  27. package/dist/edges/utils.js +1 -130
  28. package/dist/edges/utils.js.map +1 -1
  29. package/dist/entityBridge.js +2 -17
  30. package/dist/entityBridge.js.map +1 -1
  31. package/dist/entityLifecycle.js +62 -848
  32. package/dist/entityLifecycle.js.map +1 -1
  33. package/dist/epistemicAnswers.js +27 -838
  34. package/dist/epistemicAnswers.js.map +1 -1
  35. package/dist/epistemicBeliefs.js +186 -2214
  36. package/dist/epistemicBeliefs.js.map +1 -1
  37. package/dist/epistemicContractHelpers.js +1 -318
  38. package/dist/epistemicContractHelpers.js.map +1 -1
  39. package/dist/epistemicContracts.js +163 -2467
  40. package/dist/epistemicContracts.js.map +1 -1
  41. package/dist/epistemicEdges.js +60 -863
  42. package/dist/epistemicEdges.js.map +1 -1
  43. package/dist/epistemicEvidence.js +116 -1647
  44. package/dist/epistemicEvidence.js.map +1 -1
  45. package/dist/epistemicHelpers.js +3 -2
  46. package/dist/epistemicHelpers.js.map +1 -1
  47. package/dist/epistemicLinking.js +2 -785
  48. package/dist/epistemicLinking.js.map +1 -1
  49. package/dist/epistemicNodes.js +34 -1427
  50. package/dist/epistemicNodes.js.map +1 -1
  51. package/dist/epistemicQuestions.js +88 -1637
  52. package/dist/epistemicQuestions.js.map +1 -1
  53. package/dist/epistemicSources.js +28 -1421
  54. package/dist/epistemicSources.js.map +1 -1
  55. package/dist/evaluators/index.js +163 -2467
  56. package/dist/evaluators/index.js.map +1 -1
  57. package/dist/index.js +486 -3649
  58. package/dist/index.js.map +1 -1
  59. package/dist/ontology-matching.js +1 -344
  60. package/dist/ontology-matching.js.map +1 -1
  61. package/dist/ontologyApproval.js +1 -13
  62. package/dist/ontologyApproval.js.map +1 -1
  63. package/dist/ontologyDefinitions.js +2 -17
  64. package/dist/ontologyDefinitions.js.map +1 -1
  65. package/dist/ontologyRegistry.js +2 -17
  66. package/dist/ontologyRegistry.js.map +1 -1
  67. package/dist/projectionReconciliation.js +2 -17
  68. package/dist/projectionReconciliation.js.map +1 -1
  69. package/dist/questionEvidenceLinks.js +242 -837
  70. package/dist/questionEvidenceLinks.js.map +1 -1
  71. package/dist/text-matching.js +1 -244
  72. package/dist/text-matching.js.map +1 -1
  73. package/dist/workflowBridge.d.ts +27 -0
  74. package/dist/workflowBridge.js +303 -0
  75. package/dist/workflowBridge.js.map +1 -0
  76. package/dist/workspaceIsolation.js +8 -609
  77. package/dist/workspaceIsolation.js.map +1 -1
  78. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"sources":["../../confidence/src/v1/operations/subjectiveLogic/index.ts","../../confidence/src/v1/operations/scoring.ts","../../confidence/src/v1/operations/contradiction/detectTupleContradiction.ts","../../confidence/src/v1/operations/dynamics/cascade.ts","../../confidence/src/v1/operations/dynamics/defeat.ts","../../confidence/src/v1/operations/contracts/epistemicContract.ts","../../access-control/src/convex.ts","../../access-control/src/topicProjectOverlay.ts","../../access-control/src/projectGrantsBridge.ts","../../access-control/src/resolvers.ts","../../access-control/src/principalContext.ts","../../access-control/src/access.ts","../../access-control/src/audience.ts","../../access-control/src/audienceRegistry.ts","../../access-control/src/auth.ts","../../schema-management/src/convex.ts","../../schema-management/src/enumValidation.ts","../../schema-management/src/validators.ts","../src/beliefLifecycle.ts","../src/convex.ts","../src/edges/contains.ts","../src/edges/utils.ts","../src/edges/contradicts.ts","../src/edges/dependsOn.ts","../src/edges/derivedFrom.ts","../src/edges/elaborates.ts","../src/edges/informs.ts","../src/edges/propagationTypes.ts","../src/edges/refutes.ts","../src/edges/supports.ts","../src/edges/tests.ts","../src/edges/index.ts","../../schema-management/src/shared/common.ts","../../schema-management/src/spine/tables/epistemicNodes.ts","../src/topicScope.ts","../src/workspaceIsolation.ts","../src/confidencePropagationDispatch.ts","../src/embeddingTrigger.ts","../src/globalId.ts","../src/logicalRoleInference.ts","../src/topicProjectOverlay.ts","../src/resolvers.ts","../src/epistemicBeliefs.ts"],"names":["opinion","resolvedUser","user","componentsGeneric","anyApi","confidence","predictionMeta","api","internal","internalMutationGeneric","internalQueryGeneric","mutationGeneric","queryGeneric","v","sourceType","externalIds","LEGACY_SCOPE_FIELD","normalizeScopeValue","epistemicLayer","readNonEmptyString","readStringArray","readMetadata","readLegacyProjectId","coerceVisibility","coerceStatus","mapProjectType","isProjectLikeTopic","resolveTopicDoc","materializeTopicProjectOverlay","resolveTopicProjectOverlay","listTopicProjectOverlays","isMissingLucernChildComponentError","defaultResolvers","resolverOverrides","clamp01","content","query"],"mappings":"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","file":"epistemicBeliefs.js","sourcesContent":["import type { Opinion } from \"../../types\";\n\nexport function opinion(\n belief: number,\n disbelief: number,\n uncertainty: number,\n baseRate: number = 0.5\n): Opinion {\n const b = Math.max(0, Math.min(1, belief));\n const d = Math.max(0, Math.min(1, disbelief));\n const u = Math.max(0, Math.min(1, uncertainty));\n const a = Math.max(0, Math.min(1, baseRate));\n const sum = b + d + u;\n\n if (sum === 0) {\n return { b: 0, d: 0, u: 1, a };\n }\n\n return {\n b: b / sum,\n d: d / sum,\n u: u / sum,\n a,\n };\n}\n\nexport function vacuous(baseRate: number = 0.5): Opinion {\n return { b: 0, d: 0, u: 1, a: baseRate };\n}\n\nexport function dogmatic(probability: number, baseRate: number = 0.5): Opinion {\n const p = Math.max(0, Math.min(1, probability));\n return { b: p, d: 1 - p, u: 0, a: baseRate };\n}\n\nexport function project(o: Opinion): number {\n return o.b + o.a * o.u;\n}\n\nexport function confidenceLevel(o: Opinion): \"high\" | \"medium\" | \"low\" {\n const projected = project(o);\n if (o.u > 0.5) {\n return \"low\";\n }\n if (projected >= 0.8 && o.u < 0.2) {\n return \"high\";\n }\n if (projected >= 0.6) {\n return \"medium\";\n }\n return \"low\";\n}\n\nexport function cumulativeFusion(left: Opinion, right: Opinion): Opinion {\n if (left.u === 0 && right.u === 0) {\n return opinion(\n (left.b + right.b) / 2,\n (left.d + right.d) / 2,\n 0,\n (left.a + right.a) / 2\n );\n }\n\n const k = left.u + right.u - left.u * right.u;\n if (k === 0) {\n return vacuous((left.a + right.a) / 2);\n }\n\n return opinion(\n (left.b * right.u + right.b * left.u) / k,\n (left.d * right.u + right.d * left.u) / k,\n (left.u * right.u) / k,\n (left.a + right.a) / 2\n );\n}\n\nexport function averagingFusion(left: Opinion, right: Opinion): Opinion {\n if (left.u === 0 && right.u === 0) {\n return opinion(\n (left.b + right.b) / 2,\n (left.d + right.d) / 2,\n 0,\n (left.a + right.a) / 2\n );\n }\n\n const k = left.u + right.u;\n if (k === 0) {\n return vacuous((left.a + right.a) / 2);\n }\n\n return opinion(\n (left.b * right.u + right.b * left.u) / k,\n (left.d * right.u + right.d * left.u) / k,\n (2 * left.u * right.u) / k,\n (left.a + right.a) / 2\n );\n}\n\nexport function trustDiscount(sourceOpinion: Opinion, trust: number): Opinion {\n const weight = Math.max(0, Math.min(1, Math.abs(trust)));\n return opinion(\n weight * sourceOpinion.b,\n weight * sourceOpinion.d,\n 1 - weight * (sourceOpinion.b + sourceOpinion.d),\n sourceOpinion.a\n );\n}\n\nconst EPSILON = 1e-9;\n\nfunction childBaseRateFallback(\n ifTrue: Opinion,\n ifFalse: Opinion,\n fallbackBaseRate: number | undefined\n): number {\n if (fallbackBaseRate !== undefined) {\n return Math.max(0, Math.min(1, fallbackBaseRate));\n }\n\n if (Math.abs(ifTrue.a - ifFalse.a) <= EPSILON) {\n return ifTrue.a;\n }\n\n return (ifTrue.a + ifFalse.a) / 2;\n}\n\nfunction computeConditionalDeductionBaseRate(\n opinionA: Opinion,\n ifTrue: Opinion,\n ifFalse: Opinion,\n fallbackBaseRate: number\n): number {\n const denominator =\n 1 - opinionA.a * ifTrue.u - (1 - opinionA.a) * ifFalse.u;\n\n if (ifTrue.u + ifFalse.u < 2 - EPSILON && Math.abs(denominator) > EPSILON) {\n const baseRate =\n (opinionA.a * ifTrue.b + (1 - opinionA.a) * ifFalse.b) / denominator;\n if (baseRate >= -EPSILON && baseRate <= 1 + EPSILON) {\n return Math.max(0, Math.min(1, baseRate));\n }\n }\n\n return fallbackBaseRate;\n}\n\nfunction safeCorrectionTerm(\n numerator: number,\n denominator: number\n): number | undefined {\n if (Math.abs(denominator) <= EPSILON) {\n return undefined;\n }\n\n const value = numerator / denominator;\n if (!Number.isFinite(value)) {\n return undefined;\n }\n\n return Math.max(0, value);\n}\n\nexport function conditionalDeduction(\n opinionA: Opinion,\n ifTrue: Opinion,\n ifFalse: Opinion,\n fallbackBaseRate?: number\n): Opinion {\n const fallbackChildBaseRate = childBaseRateFallback(\n ifTrue,\n ifFalse,\n fallbackBaseRate\n );\n const childBaseRate = computeConditionalDeductionBaseRate(\n opinionA,\n ifTrue,\n ifFalse,\n fallbackChildBaseRate\n );\n const projectedAntecedent = project(opinionA);\n const projectedAntecedentComplement = 1 - projectedAntecedent;\n const intermediateBelief =\n opinionA.b * ifTrue.b +\n opinionA.d * ifFalse.b +\n opinionA.u * (ifTrue.b * opinionA.a + ifFalse.b * (1 - opinionA.a));\n const intermediateDisbelief =\n opinionA.b * ifTrue.d +\n opinionA.d * ifFalse.d +\n opinionA.u * (ifTrue.d * opinionA.a + ifFalse.d * (1 - opinionA.a));\n const intermediateUncertainty =\n opinionA.b * ifTrue.u +\n opinionA.d * ifFalse.u +\n opinionA.u * (ifTrue.u * opinionA.a + ifFalse.u * (1 - opinionA.a));\n const projectedVacuousDeduction =\n ifTrue.b * opinionA.a +\n ifFalse.b * (1 - opinionA.a) +\n childBaseRate *\n (ifTrue.u * opinionA.a + ifFalse.u * (1 - opinionA.a));\n const projectedConditionalA =\n ifTrue.b + childBaseRate * (1 - ifTrue.b - ifTrue.d);\n let correction = 0;\n\n if (\n (ifTrue.b > ifFalse.b && ifTrue.d > ifFalse.d) ||\n (ifTrue.b <= ifFalse.b && ifTrue.d <= ifFalse.d)\n ) {\n correction = 0;\n } else if (ifTrue.b > ifFalse.b && ifTrue.d <= ifFalse.d) {\n const beliefGap = ifTrue.b - ifFalse.b;\n const disbeliefGap = ifFalse.d - ifTrue.d;\n\n if (\n projectedVacuousDeduction <= projectedConditionalA &&\n projectedAntecedent <= opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n opinionA.a * opinionA.u * (intermediateBelief - ifTrue.b),\n projectedAntecedent * childBaseRate\n ) ?? 0;\n } else if (\n projectedVacuousDeduction <= projectedConditionalA &&\n projectedAntecedent > opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n opinionA.a * opinionA.u * (intermediateDisbelief - ifTrue.d) * beliefGap,\n projectedAntecedentComplement * childBaseRate * disbeliefGap\n ) ?? 0;\n } else if (\n projectedVacuousDeduction > projectedConditionalA &&\n projectedAntecedent <= opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n (1 - opinionA.a) *\n opinionA.u *\n (intermediateBelief - ifTrue.b) *\n disbeliefGap,\n projectedAntecedent * (1 - childBaseRate) * beliefGap\n ) ?? 0;\n } else {\n correction =\n safeCorrectionTerm(\n (1 - opinionA.a) * opinionA.u * (intermediateDisbelief - ifTrue.d),\n projectedAntecedentComplement * (1 - childBaseRate)\n ) ?? 0;\n }\n } else {\n const beliefGap = ifFalse.b - ifTrue.b;\n const disbeliefGap = ifTrue.d - ifFalse.d;\n\n if (\n projectedVacuousDeduction <= projectedConditionalA &&\n projectedAntecedent <= opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n (1 - opinionA.a) *\n opinionA.u *\n (intermediateDisbelief - ifTrue.d) *\n beliefGap,\n projectedAntecedent * childBaseRate * disbeliefGap\n ) ?? 0;\n } else if (\n projectedVacuousDeduction <= projectedConditionalA &&\n projectedAntecedent > opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n (1 - opinionA.a) * opinionA.u * (intermediateBelief - ifTrue.b),\n projectedAntecedentComplement * childBaseRate\n ) ?? 0;\n } else if (\n projectedVacuousDeduction > projectedConditionalA &&\n projectedAntecedent <= opinionA.a\n ) {\n correction =\n safeCorrectionTerm(\n opinionA.a * opinionA.u * (intermediateDisbelief - ifTrue.d),\n projectedAntecedent * (1 - childBaseRate)\n ) ?? 0;\n } else {\n correction =\n safeCorrectionTerm(\n opinionA.a *\n opinionA.u *\n (intermediateBelief - ifTrue.b) *\n disbeliefGap,\n projectedAntecedentComplement * (1 - childBaseRate) * beliefGap\n ) ?? 0;\n }\n }\n\n return opinion(\n intermediateBelief - childBaseRate * correction,\n intermediateDisbelief - (1 - childBaseRate) * correction,\n intermediateUncertainty + correction,\n childBaseRate\n );\n}\n\n/**\n * Abductive inference over a conditional.\n * Given an opinion on Y and conditionals P(Y|X), P(Y|~X), infer an opinion on X.\n */\nexport function conditionalAbduction(\n opinionY: Opinion,\n ifTrue: Opinion,\n ifFalse: Opinion,\n baseRateX: number\n): Opinion {\n const priorX = Math.max(0, Math.min(1, baseRateX));\n const probabilityY = project(opinionY);\n const probabilityGivenTrue = project(ifTrue);\n const probabilityGivenFalse = project(ifFalse);\n\n const posteriorIfYDenominator =\n probabilityGivenTrue * priorX +\n probabilityGivenFalse * (1 - priorX);\n const posteriorIfY =\n posteriorIfYDenominator === 0\n ? priorX\n : (probabilityGivenTrue * priorX) / posteriorIfYDenominator;\n\n const posteriorIfNotYDenominator =\n (1 - probabilityGivenTrue) * priorX +\n (1 - probabilityGivenFalse) * (1 - priorX);\n const posteriorIfNotY =\n posteriorIfNotYDenominator === 0\n ? priorX\n : ((1 - probabilityGivenTrue) * priorX) / posteriorIfNotYDenominator;\n\n const projectedX =\n probabilityY * posteriorIfY + (1 - probabilityY) * posteriorIfNotY;\n const uncertainty = Math.max(\n opinionY.u * 0.5,\n probabilityY * ifTrue.u + (1 - probabilityY) * ifFalse.u\n );\n\n return opinion(\n projectedX * (1 - uncertainty),\n (1 - projectedX) * (1 - uncertainty),\n uncertainty,\n priorX\n );\n}\n\nexport function negate(o: Opinion): Opinion {\n return { b: o.d, d: o.b, u: o.u, a: 1 - o.a };\n}\n\nexport function constraintFusion(\n left: Opinion,\n right: Opinion,\n mode: \"pressure\" | \"redistribute\" = \"pressure\"\n): { o1: Opinion; o2: Opinion } {\n if (mode === \"redistribute\") {\n const leftProjected = project(left);\n const rightProjected = project(right);\n const total = leftProjected + rightProjected;\n\n if (total <= 1) {\n return { o1: left, o2: right };\n }\n\n const scale = 1 / total;\n return {\n o1: opinion(\n left.b * scale,\n left.d + left.b * (1 - scale),\n left.u,\n left.a\n ),\n o2: opinion(\n right.b * scale,\n right.d + right.b * (1 - scale),\n right.u,\n right.a\n ),\n };\n }\n\n const pressureLeft = right.b * 0.5;\n const pressureRight = left.b * 0.5;\n\n return {\n o1: opinion(\n left.b - pressureLeft * 0.3,\n left.d + pressureLeft * 0.3,\n left.u,\n left.a\n ),\n o2: opinion(\n right.b - pressureRight * 0.3,\n right.d + pressureRight * 0.3,\n right.u,\n right.a\n ),\n };\n}\n\nexport function evidenceBalance(o: Opinion): number {\n const total = o.b + o.d;\n if (total === 0) {\n return 0;\n }\n return (o.b - o.d) / total;\n}\n\nexport function areTensioned(left: Opinion, right: Opinion): boolean {\n return (\n project(left) > 0.5 &&\n project(right) > 0.5 &&\n (left.d > 0.2 || right.d > 0.2)\n );\n}\n\nexport function informationGain(o: Opinion): number {\n if (o.u === 0) {\n return 0;\n }\n if (o.u === 1) {\n return 1;\n }\n return o.u * (1 - Math.abs(o.b - o.d));\n}\n","import type { Opinion, StoredOpinionFields } from \"../types\";\nimport { dogmatic, vacuous } from \"./subjectiveLogic\";\n\nfunction finiteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nexport function clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nexport function confidenceFromOpinion(opinion: Opinion): number {\n return clamp01(opinion.b + opinion.a * opinion.u);\n}\n\nexport function confidenceFromSL(\n belief: number,\n _disbelief: number,\n uncertainty: number,\n baseRate: number = 0.5\n): number {\n return confidenceFromOpinion({\n b: belief,\n d: _disbelief,\n u: uncertainty,\n a: baseRate,\n });\n}\n\nexport function toStoredOpinionFields(opinion: Opinion): StoredOpinionFields {\n return {\n belief: opinion.b,\n disbelief: opinion.d,\n uncertainty: opinion.u,\n baseRate: opinion.a,\n };\n}\n\nexport function readOpinionFromRecord(\n source: unknown,\n fallback: Partial<Opinion> = {}\n): Opinion {\n const record =\n source && typeof source === \"object\"\n ? (source as Record<string, unknown>)\n : {};\n\n return {\n b:\n finiteNumber(record.b) ??\n finiteNumber(record.belief) ??\n finiteNumber(record.slBelief) ??\n finiteNumber(record.opinion_b) ??\n fallback.b ??\n 0,\n d:\n finiteNumber(record.d) ??\n finiteNumber(record.disbelief) ??\n finiteNumber(record.slDisbelief) ??\n finiteNumber(record.opinion_d) ??\n fallback.d ??\n 0,\n u:\n finiteNumber(record.u) ??\n finiteNumber(record.uncertainty) ??\n finiteNumber(record.slUncertainty) ??\n finiteNumber(record.opinion_u) ??\n fallback.u ??\n 1,\n a:\n finiteNumber(record.a) ??\n finiteNumber(record.baseRate) ??\n finiteNumber(record.slBaseRate) ??\n finiteNumber(record.opinion_a) ??\n fallback.a ??\n 0.5,\n };\n}\n\nexport type OpinionFromScalarMode =\n | \"base_rate\"\n | \"dogmatic\"\n | \"projected_with_u\";\n\nexport function opinionFromScalar(\n value: number,\n mode: OpinionFromScalarMode,\n options?: { baseRate?: number; uncertainty?: number }\n): Opinion {\n const clampedValue = clamp01(value);\n const baseRate = clamp01(options?.baseRate ?? 0.5);\n\n switch (mode) {\n case \"base_rate\":\n return {\n b: 0,\n d: 0,\n u: 1,\n a: clampedValue,\n };\n case \"dogmatic\":\n return {\n b: clampedValue,\n d: 1 - clampedValue,\n u: 0,\n a: baseRate,\n };\n case \"projected_with_u\": {\n const uncertainty = options?.uncertainty;\n if (uncertainty === undefined) {\n throw new Error(\n \"opinionFromScalar(value, \\\"projected_with_u\\\") requires options.uncertainty.\"\n );\n }\n const clampedUncertainty = clamp01(uncertainty);\n const evidenceWeight = 1 - clampedUncertainty;\n return {\n b: clampedValue * evidenceWeight,\n d: (1 - clampedValue) * evidenceWeight,\n u: clampedUncertainty,\n a: baseRate,\n };\n }\n }\n\n throw new Error(`Unsupported opinionFromScalar mode: ${mode}`);\n}\n\n/**\n * @deprecated Use opinionFromScalar(value, \"dogmatic\", { baseRate }) instead.\n */\nexport function toDogmaticOpinion(\n confidence: number,\n baseRate: number = 0.5\n): Opinion {\n return opinionFromScalar(confidence, \"dogmatic\", { baseRate });\n}\n\n/** Interpret p as a prior with no observed evidence. */\nexport function opinionFromBaseRate(probability: number): Opinion {\n return vacuous(clamp01(probability));\n}\n\n/** Interpret p as a certainty-equivalent projected probability. */\nexport function opinionFromDogmatic(\n probability: number,\n baseRate: number = 0.5\n): Opinion {\n return dogmatic(clamp01(probability), clamp01(baseRate));\n}\n\n/**\n * Interpret p as a projected probability with an explicit uncertainty bucket.\n * The resulting opinion always projects back to p.\n */\nexport function opinionFromProjected(\n probability: number,\n uncertainty: number,\n baseRate: number = 0.5\n): Opinion {\n const p = clamp01(probability);\n const u = clamp01(uncertainty);\n const remainingMass = 1 - u;\n return {\n b: p * remainingMass,\n d: (1 - p) * remainingMass,\n u,\n a: clamp01(baseRate),\n };\n}\n\nexport function hasProjectedOpinionChanged(\n current: Opinion,\n next: Opinion,\n tolerance: number = 0.01\n): boolean {\n return Math.abs(confidenceFromOpinion(next) - confidenceFromOpinion(current)) >=\n tolerance;\n}\n","import type {\n Opinion,\n TupleContradictionPolicy,\n TupleContradictionTransition,\n} from \"../../types\";\nimport { clamp01 } from \"../scoring\";\n\nexport const DEFAULT_TUPLE_CONTRADICTION_BELIEF_THRESHOLD = 0.7;\nexport const DEFAULT_TUPLE_CONTRADICTION_DISBELIEF_THRESHOLD = 0.7;\n\nexport function normalizeTupleContradictionPolicy(\n policy: Partial<TupleContradictionPolicy> = {}\n): TupleContradictionPolicy {\n return {\n beliefThreshold: clamp01(\n policy.beliefThreshold ?? DEFAULT_TUPLE_CONTRADICTION_BELIEF_THRESHOLD\n ),\n disbeliefThreshold: clamp01(\n policy.disbeliefThreshold ??\n DEFAULT_TUPLE_CONTRADICTION_DISBELIEF_THRESHOLD\n ),\n };\n}\n\nexport function detectTupleContradiction(\n opinion: Opinion,\n tauB: number = DEFAULT_TUPLE_CONTRADICTION_BELIEF_THRESHOLD,\n tauD: number = DEFAULT_TUPLE_CONTRADICTION_DISBELIEF_THRESHOLD\n): boolean {\n return opinion.b > tauB && opinion.d > tauD;\n}\n\nexport function evaluateTupleContradictionTransition(args: {\n previousTupleContradicted?: boolean;\n opinion: Opinion;\n policy?: Partial<TupleContradictionPolicy>;\n}): TupleContradictionTransition {\n const policy = normalizeTupleContradictionPolicy(args.policy);\n const tupleContradicted = detectTupleContradiction(\n args.opinion,\n policy.beliefThreshold,\n policy.disbeliefThreshold\n );\n const previousTupleContradicted = Boolean(args.previousTupleContradicted);\n\n return {\n tupleContradicted,\n crossedIntoTupleContradiction:\n !previousTupleContradicted && tupleContradicted,\n crossedOutOfTupleContradiction:\n previousTupleContradicted && !tupleContradicted,\n policy,\n };\n}\n","import type { Opinion, PropagationMode, PropagationResult } from \"../../types\";\nimport { opinion, project } from \"../subjectiveLogic\";\n\nexport function dampedDependencyOpinion(\n dependencyOpinion: Opinion,\n beliefOpinion: Opinion,\n mode: PropagationMode = \"continuous\",\n threshold: number = 0.3\n): Opinion {\n const dependencyProjection = project(dependencyOpinion);\n\n if (mode === \"threshold\") {\n if (dependencyProjection < threshold) {\n return opinion(\n 0,\n beliefOpinion.d + beliefOpinion.b * 0.5,\n 0.5,\n beliefOpinion.a\n );\n }\n return beliefOpinion;\n }\n\n const dampingFactor = Math.pow(dependencyProjection, 0.5);\n return opinion(\n beliefOpinion.b * dampingFactor,\n beliefOpinion.d + beliefOpinion.b * (1 - dampingFactor) * 0.3,\n beliefOpinion.u + beliefOpinion.b * (1 - dampingFactor) * 0.7,\n beliefOpinion.a\n );\n}\n\nexport function dampedDependencyCascade(\n dependencyOpinion: Opinion,\n beliefOpinion: Opinion,\n mode: PropagationMode = \"continuous\"\n): PropagationResult {\n return {\n opinion: dampedDependencyOpinion(dependencyOpinion, beliefOpinion, mode),\n operator: \"dependency_cascade\",\n rationale: `Damped dependency cascade (${mode}): prerequisite at ${project(\n dependencyOpinion\n ).toFixed(2)}`,\n };\n}\n","import type { EdgeMetadata, Opinion, PropagationResult } from \"../../types\";\nimport {\n constraintFusion,\n cumulativeFusion,\n negate,\n project,\n trustDiscount,\n} from \"../subjectiveLogic\";\n\nexport function applyNegativeSupport(\n source: Opinion,\n target: Opinion,\n weight: number,\n metadata: EdgeMetadata = {}\n): PropagationResult {\n if (metadata.constraint === \"xor\") {\n const result = constraintFusion(\n source,\n target,\n metadata.normalization ?? \"pressure\"\n );\n return {\n opinion: result.o2,\n operator: \"constraint_fusion\",\n rationale: `XOR constraint: source belief at ${project(source).toFixed(\n 2\n )} pressures target`,\n };\n }\n\n const discounted = trustDiscount(negate(source), Math.abs(weight));\n return {\n opinion: cumulativeFusion(target, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Contradicting evidence (weight=${weight.toFixed(\n 2\n )}) from source at ${project(source).toFixed(2)}`,\n };\n}\n\nexport function applyNegativeEvidence(\n source: Opinion,\n target: Opinion,\n weight: number\n): PropagationResult {\n const discounted = trustDiscount(negate(source), Math.abs(weight));\n return {\n opinion: cumulativeFusion(target, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Contradicting evidence (weight=${weight.toFixed(2)})`,\n };\n}\n","import type {\n ContractModulationPlan,\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n EpistemicContractModulation,\n EpistemicContractRecord,\n EpistemicContractStatus,\n EvidentialAction,\n EvidentialEvaluatorConfig,\n EvidentialMetricSnapshot,\n EvidentialOperator,\n MarketIndexComparatorConfig,\n MetricCheckerEvaluatorConfig,\n ReferenceCheckCounterConfig,\n TemporalDeadlineEvaluatorConfig,\n VerificationConfidenceTrigger,\n} from \"../../types\";\n\nexport const BUILT_IN_EVIDENTIAL_EVALUATOR = \"evidential\";\nexport const BUILT_IN_EVIDENTIAL_ALIASES = new Set([\n BUILT_IN_EVIDENTIAL_EVALUATOR,\n \"built_in_evidential\",\n \"builtin_evidential\",\n]);\nexport const BUILT_IN_METRIC_CHECKER = \"metric_checker\";\nexport const BUILT_IN_REFERENCE_CHECK_COUNTER = \"reference_check_counter\";\nexport const BUILT_IN_TEMPORAL_DEADLINE = \"temporal_deadline\";\nexport const BUILT_IN_MARKET_INDEX_COMPARATOR = \"market_index_comparator\";\n\nfunction clampConfidence(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nfunction generateContractId(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return `contract-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nexport function deriveContractStatus(\n result: EpistemicContractEvaluationResult,\n currentStatus: EpistemicContractStatus\n): EpistemicContractStatus {\n if (currentStatus === \"archived\") {\n return currentStatus;\n }\n\n switch (result) {\n case \"confirmed\":\n return \"satisfied\";\n case \"disconfirmed\":\n return \"violated\";\n case \"expired\":\n return \"expired\";\n default:\n return currentStatus === \"satisfied\" ||\n currentStatus === \"violated\" ||\n currentStatus === \"expired\"\n ? \"active\"\n : currentStatus;\n }\n}\n\nexport function deriveVerificationTrigger(\n result: EpistemicContractEvaluationResult\n): VerificationConfidenceTrigger | null {\n switch (result) {\n case \"confirmed\":\n return \"verification_confirmed\";\n case \"disconfirmed\":\n return \"verification_disconfirmed\";\n case \"expired\":\n return \"verification_expired\";\n case \"partial\":\n return \"verification_partial\";\n default:\n return null;\n }\n}\n\nexport function deriveContractModulationPlan(args: {\n currentConfidence: number;\n modulation: EpistemicContractModulation;\n result: EpistemicContractEvaluationResult;\n resultConfidence?: number;\n}): ContractModulationPlan | null {\n const trigger = deriveVerificationTrigger(args.result);\n if (!trigger) {\n return null;\n }\n\n if (args.result === \"confirmed\") {\n const rawNext = args.currentConfidence + args.modulation.onConfirmed.delta;\n const confidenceAfter = clampConfidence(\n Math.min(\n args.modulation.onConfirmed.ceiling ?? Number.POSITIVE_INFINITY,\n rawNext\n )\n );\n return {\n trigger,\n confidenceBefore: args.currentConfidence,\n confidenceAfter,\n confidenceDelta: confidenceAfter - args.currentConfidence,\n };\n }\n\n if (args.result === \"disconfirmed\") {\n const rawNext =\n args.currentConfidence + args.modulation.onDisconfirmed.delta;\n const confidenceAfter = clampConfidence(\n Math.max(args.modulation.onDisconfirmed.floor ?? 0, rawNext)\n );\n return {\n trigger,\n confidenceBefore: args.currentConfidence,\n confidenceAfter,\n confidenceDelta: confidenceAfter - args.currentConfidence,\n };\n }\n\n if (args.result === \"expired\" && args.modulation.onExpired) {\n const confidenceAfter = clampConfidence(\n args.currentConfidence + args.modulation.onExpired.delta\n );\n return {\n trigger,\n confidenceBefore: args.currentConfidence,\n confidenceAfter,\n confidenceDelta: confidenceAfter - args.currentConfidence,\n };\n }\n\n if (args.result === \"partial\" && args.modulation.onPartial) {\n if ((args.resultConfidence ?? 0) < args.modulation.onPartial.threshold) {\n return null;\n }\n const confidenceAfter = clampConfidence(\n args.currentConfidence + args.modulation.onPartial.delta\n );\n return {\n trigger,\n confidenceBefore: args.currentConfidence,\n confidenceAfter,\n confidenceDelta: confidenceAfter - args.currentConfidence,\n };\n }\n\n return null;\n}\n\nexport function createInheritedContractRecord<\n TBeliefId = string,\n TTopicId = string | undefined,\n>(\n contract: EpistemicContractRecord<any, any>,\n args: {\n beliefNodeId: TBeliefId;\n topicId?: TTopicId;\n createdBy: string;\n now: number;\n }\n): EpistemicContractRecord<TBeliefId, TTopicId> {\n return {\n beliefNodeId: args.beliefNodeId,\n contractId: generateContractId(),\n title: contract.title,\n description: contract.description,\n conditionType: contract.conditionType,\n direction: contract.direction,\n condition: contract.condition,\n deadline: contract.deadline,\n compositeOf: contract.compositeOf,\n compositeOperator: contract.compositeOperator,\n modulation: contract.modulation,\n evaluationSchedule: contract.evaluationSchedule,\n periodicIntervalMs: contract.periodicIntervalMs,\n status: \"active\",\n lineageSource: \"inherited\",\n inheritedFromContractId: contract.contractId,\n inheritedFromBeliefNodeId: contract.beliefNodeId as TBeliefId,\n inheritedAt: args.now,\n topicId: args.topicId,\n createdAt: args.now,\n createdBy: args.createdBy,\n updatedAt: args.now,\n };\n}\n\nexport function normalizeEvidentialAction(\n value: unknown\n): EvidentialAction | undefined {\n return value === \"modulate_confidence\" ||\n value === \"flag_review\" ||\n value === \"archive\"\n ? value\n : undefined;\n}\n\nexport function parseComparisonOperator(\n value: unknown,\n evaluatorName: string\n): EvidentialOperator {\n if (\n value === \"gte\" ||\n value === \"lte\" ||\n value === \"eq\" ||\n value === \"gt\" ||\n value === \"lt\"\n ) {\n return value;\n }\n throw new Error(\n `${evaluatorName} requires operator to be one of gte, lte, eq, gt, or lt.`\n );\n}\n\nexport function parseNumericThreshold(\n value: unknown,\n evaluatorName: string\n): number {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n throw new Error(`${evaluatorName} requires a finite numeric threshold.`);\n}\n\nexport function pickFiniteNumber(\n config: Record<string, unknown>,\n keys: string[]\n): number | undefined {\n for (const key of keys) {\n const value = config[key];\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n }\n return undefined;\n}\n\nexport function getEvaluatorInputRecord(\n inputData: unknown,\n nestedKey: string\n): Record<string, unknown> {\n if (!inputData || typeof inputData !== \"object\") {\n return {};\n }\n\n const root = inputData as Record<string, unknown>;\n const nested = root[nestedKey];\n if (nested && typeof nested === \"object\") {\n return nested as Record<string, unknown>;\n }\n return root;\n}\n\nexport function parseEvidentialEvaluatorConfig(\n value: unknown\n): EvidentialEvaluatorConfig {\n if (!value || typeof value !== \"object\") {\n throw new Error(\n \"Evidential contracts require condition.evaluatorConfig with metric/operator/threshold.\"\n );\n }\n\n const config = value as Record<string, unknown>;\n const metric = config.metric;\n const operator = config.operator;\n const threshold = config.threshold;\n\n if (\n metric !== \"evidence_count\" &&\n metric !== \"contradiction_status\" &&\n metric !== \"edge_freshness\" &&\n metric !== \"dependent_count\"\n ) {\n throw new Error(`Unsupported evidential metric: ${String(metric)}`);\n }\n\n if (\n operator !== \"gte\" &&\n operator !== \"lte\" &&\n operator !== \"eq\" &&\n operator !== \"gt\" &&\n operator !== \"lt\"\n ) {\n throw new Error(`Unsupported evidential operator: ${String(operator)}`);\n }\n\n if (typeof threshold !== \"number\" || !Number.isFinite(threshold)) {\n throw new Error(\"Evidential contracts require a numeric threshold.\");\n }\n\n const actionParams =\n config.actionParams &&\n typeof config.actionParams === \"object\" &&\n config.actionParams !== null\n ? (config.actionParams as Record<string, unknown>)\n : undefined;\n\n return {\n metric,\n operator,\n threshold,\n action: normalizeEvidentialAction(config.action),\n actionParams:\n actionParams &&\n (typeof actionParams.targetConfidence === \"number\" ||\n typeof actionParams.rationale === \"string\")\n ? {\n targetConfidence:\n typeof actionParams.targetConfidence === \"number\"\n ? actionParams.targetConfidence\n : undefined,\n rationale:\n typeof actionParams.rationale === \"string\"\n ? actionParams.rationale\n : undefined,\n }\n : undefined,\n };\n}\n\nexport function compareMetricValue(\n operator: EvidentialOperator,\n left: number,\n right: number\n): boolean {\n switch (operator) {\n case \"gte\":\n return left >= right;\n case \"lte\":\n return left <= right;\n case \"eq\":\n return left === right;\n case \"gt\":\n return left > right;\n case \"lt\":\n return left < right;\n default:\n return false;\n }\n}\n\nexport function resolveComparisonResult(\n direction: EpistemicContractDirection,\n comparisonSatisfied: boolean\n): EpistemicContractEvaluationResult {\n return direction === \"falsifies\"\n ? comparisonSatisfied\n ? \"disconfirmed\"\n : \"confirmed\"\n : comparisonSatisfied\n ? \"confirmed\"\n : \"disconfirmed\";\n}\n\nexport function buildComparisonRationale(args: {\n label: string;\n observedValue: number | null;\n operator: EvidentialOperator;\n threshold: number;\n comparisonSatisfied: boolean;\n result: EpistemicContractEvaluationResult;\n unit?: string;\n}): string {\n const renderedObserved =\n args.observedValue === null\n ? \"no data\"\n : `${args.observedValue}${args.unit ? ` ${args.unit}` : \"\"}`;\n const renderedThreshold = `${args.threshold}${args.unit ? ` ${args.unit}` : \"\"}`;\n const clause = `${args.label} observed ${renderedObserved} against ${args.operator} ${renderedThreshold}`;\n\n if (args.observedValue === null) {\n return `${clause}; evaluator returned ${args.result} because no current data was available.`;\n }\n\n return `${clause}; comparison ${\n args.comparisonSatisfied ? \"passed\" : \"failed\"\n }, resulting in ${args.result}.`;\n}\n\nexport function buildEvidentialRationale(args: {\n config: EvidentialEvaluatorConfig;\n snapshot: EvidentialMetricSnapshot;\n comparisonSatisfied: boolean;\n result: EpistemicContractEvaluationResult;\n}): string {\n const observed =\n args.snapshot.value === null ? \"no data\" : String(args.snapshot.value);\n const clause = `${args.snapshot.metric} observed ${observed} against ${args.config.operator} ${args.config.threshold}`;\n\n if (args.snapshot.value === null) {\n return `${clause}; evidential evaluator treated the comparison as unmet, resulting in ${args.result}.`;\n }\n\n return `${clause}; comparison ${\n args.comparisonSatisfied ? \"passed\" : \"failed\"\n }, resulting in ${args.result}.`;\n}\n\nexport function parseMetricCheckerConfig(\n value: unknown\n): MetricCheckerEvaluatorConfig {\n if (!value || typeof value !== \"object\") {\n throw new Error(\n \"metric_checker requires condition.evaluatorConfig with observedValue/operator/threshold.\"\n );\n }\n\n const config = value as Record<string, unknown>;\n return {\n metric:\n typeof config.metric === \"string\" && config.metric.length > 0\n ? config.metric\n : undefined,\n operator: parseComparisonOperator(config.operator, BUILT_IN_METRIC_CHECKER),\n threshold: parseNumericThreshold(config.threshold, BUILT_IN_METRIC_CHECKER),\n observedValue: pickFiniteNumber(config, [\"observedValue\", \"value\"]),\n currentValue: pickFiniteNumber(config, [\"currentValue\"]),\n metricValue: pickFiniteNumber(config, [\"metricValue\"]),\n unit:\n typeof config.unit === \"string\" && config.unit.length > 0\n ? config.unit\n : undefined,\n };\n}\n\nexport function parseReferenceCheckCounterConfig(\n value: unknown\n): ReferenceCheckCounterConfig {\n if (!value || typeof value !== \"object\") {\n throw new Error(\n \"reference_check_counter requires condition.evaluatorConfig with tag/operator/threshold.\"\n );\n }\n\n const config = value as Record<string, unknown>;\n if (typeof config.tag !== \"string\" || config.tag.trim().length === 0) {\n throw new Error(\"reference_check_counter requires a non-empty tag.\");\n }\n\n return {\n tag: config.tag.trim(),\n operator: parseComparisonOperator(\n config.operator,\n BUILT_IN_REFERENCE_CHECK_COUNTER\n ),\n threshold: parseNumericThreshold(\n config.threshold,\n BUILT_IN_REFERENCE_CHECK_COUNTER\n ),\n caseSensitive: config.caseSensitive === true,\n };\n}\n\nexport function parseTemporalDeadlineConfig(\n value: unknown\n): TemporalDeadlineEvaluatorConfig {\n if (!value || typeof value !== \"object\") {\n return {};\n }\n\n const config = value as Record<string, unknown>;\n return {\n label:\n typeof config.label === \"string\" && config.label.length > 0\n ? config.label\n : undefined,\n completed: config.completed === true,\n completedAt: pickFiniteNumber(config, [\"completedAt\"]),\n observedAt: pickFiniteNumber(config, [\"observedAt\"]),\n satisfiedAt: pickFiniteNumber(config, [\"satisfiedAt\"]),\n achievedAt: pickFiniteNumber(config, [\"achievedAt\"]),\n };\n}\n\nexport function parseMarketIndexComparatorConfig(\n value: unknown\n): MarketIndexComparatorConfig {\n if (!value || typeof value !== \"object\") {\n throw new Error(\n \"market_index_comparator requires condition.evaluatorConfig with subjectValue/benchmarkValue/operator/threshold.\"\n );\n }\n\n const config = value as Record<string, unknown>;\n return {\n subject:\n typeof config.subject === \"string\" && config.subject.length > 0\n ? config.subject\n : undefined,\n subjectValue: pickFiniteNumber(config, [\"subjectValue\", \"leftValue\"]),\n primaryValue: pickFiniteNumber(config, [\"primaryValue\"]),\n benchmark:\n typeof config.benchmark === \"string\" && config.benchmark.length > 0\n ? config.benchmark\n : undefined,\n benchmarkValue: pickFiniteNumber(config, [\"benchmarkValue\", \"rightValue\"]),\n comparisonValue: pickFiniteNumber(config, [\"comparisonValue\"]),\n operator: parseComparisonOperator(\n config.operator,\n BUILT_IN_MARKET_INDEX_COMPARATOR\n ),\n threshold: parseNumericThreshold(\n config.threshold,\n BUILT_IN_MARKET_INDEX_COMPARATOR\n ),\n };\n}\n","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 * 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","/**\n * auth module implementation.\n */\n\nimport type { ActionCtx, MutationCtx, QueryCtx } from \"./convex\";\n\ntype AnyCtx = QueryCtx | MutationCtx | ActionCtx;\n\n/**\n * Get the current user's identity from Clerk.\n */\nexport async function getCurrentUser(ctx: AnyCtx) {\n const identity = await ctx.auth.getUserIdentity();\n return identity;\n}\n\n/**\n * Get the current user ID (Clerk subject).\n */\nexport async function getCurrentUserId(ctx: AnyCtx): Promise<string | null> {\n const identity = await ctx.auth.getUserIdentity();\n return identity?.subject ?? null;\n}\n","import {\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 * 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","/**\n * Belief lifecycle helpers shared across Convex modules.\n *\n * Canonical lifecycle:\n * assumption -> hypothesis -> belief -> fact\n */\n\nexport type BeliefLifecycleStatus =\n | \"assumption\"\n | \"hypothesis\"\n | \"belief\"\n | \"fact\";\n\ntype PredictionOutcome =\n | \"pending\"\n | \"confirmed\"\n | \"disconfirmed\"\n | \"partial\"\n | \"expired\";\n\nconst BELIEF_STATUS_VALUES: readonly BeliefLifecycleStatus[] = [\n \"assumption\",\n \"hypothesis\",\n \"belief\",\n \"fact\",\n];\n\nconst RESOLVED_PREDICTION_OUTCOMES: readonly PredictionOutcome[] = [\n \"confirmed\",\n \"disconfirmed\",\n \"partial\",\n \"expired\",\n];\n\nexport function isBeliefLifecycleStatus(\n value: unknown\n): value is BeliefLifecycleStatus {\n return (\n typeof value === \"string\" &&\n BELIEF_STATUS_VALUES.includes(value as BeliefLifecycleStatus)\n );\n}\n\nfunction normalizeBeliefConfidence(confidence: unknown): number | null {\n if (typeof confidence !== \"number\" || !Number.isFinite(confidence)) {\n return null;\n }\n if (confidence >= 0 && confidence <= 1) {\n return confidence;\n }\n // Backward compatibility with historical percentage-scale confidence (0-100).\n if (confidence > 1 && confidence <= 100) {\n return confidence / 100;\n }\n return null;\n}\n\nexport function isResolvedByConfidence(confidence: unknown): boolean {\n const normalized = normalizeBeliefConfidence(confidence);\n if (normalized === null) {\n return false;\n }\n return normalized <= 0 || normalized >= 1;\n}\n\nexport function hasResolvedPredictionOutcome(predictionMeta: unknown): boolean {\n if (!predictionMeta || typeof predictionMeta !== \"object\") {\n return false;\n }\n const outcome = (predictionMeta as { outcome?: unknown }).outcome;\n return (\n typeof outcome === \"string\" &&\n RESOLVED_PREDICTION_OUTCOMES.includes(outcome as PredictionOutcome)\n );\n}\n\nfunction getPredictionMetaFromMetadata(\n metadata: Record<string, unknown> | undefined\n): unknown {\n return metadata?.predictionMeta;\n}\n\nexport function shouldTreatBeliefAsFact(opts: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): boolean {\n if (isResolvedByConfidence(opts.confidence)) {\n return true;\n }\n if (hasResolvedPredictionOutcome(opts.predictionMeta)) {\n return true;\n }\n if (\n hasResolvedPredictionOutcome(getPredictionMetaFromMetadata(opts.metadata))\n ) {\n return true;\n }\n return false;\n}\n\nexport function resolveBeliefLifecycleStatus(opts: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): BeliefLifecycleStatus {\n if (shouldTreatBeliefAsFact(opts)) {\n return \"fact\";\n }\n\n const direct = opts.beliefStatus;\n if (isBeliefLifecycleStatus(direct)) {\n // If the belief has been scored (has numeric credence) but stored status\n // is still pre-validation, promote to \"belief\". Scoring = merge to main.\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (normalized !== null && isPreValidationBeliefStatus(direct)) {\n return \"belief\";\n }\n return direct;\n }\n\n const metaStatus = opts.metadata?.beliefStatus;\n if (isBeliefLifecycleStatus(metaStatus)) {\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (normalized !== null && isPreValidationBeliefStatus(metaStatus)) {\n return \"belief\";\n }\n return metaStatus;\n }\n\n return \"assumption\";\n}\n\nexport function isPreValidationBeliefStatus(\n status: BeliefLifecycleStatus\n): boolean {\n return status === \"assumption\" || status === \"hypothesis\";\n}\n\nexport function isPropagationEligibleBeliefStatus(\n status: BeliefLifecycleStatus\n): boolean {\n return status === \"belief\" || status === \"fact\";\n}\n\nexport function promoteBeliefStatusAfterScoring(\n status: BeliefLifecycleStatus,\n opts?: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n }\n): BeliefLifecycleStatus {\n if (shouldTreatBeliefAsFact({ ...opts })) {\n return \"fact\";\n }\n if (isPreValidationBeliefStatus(status)) {\n return \"belief\";\n }\n return status === \"fact\" ? \"fact\" : \"belief\";\n}\n","import {\n actionGeneric,\n anyApi,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\nexport const api = anyApi as any;\nexport const components = componentsGeneric() as any;\nexport const internal = anyApi as any;\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> = any;\nexport type DataModel = any;\nexport type ActionCtx = any;\nexport type DatabaseReader = any;\nexport type DatabaseWriter = any;\nexport type MutationCtx = any;\nexport type QueryCtx = any;\n\nexport const action = actionGeneric as any;\nexport const httpAction = httpActionGeneric as any;\nexport const internalAction = internalActionGeneric as any;\nexport const internalMutation = internalMutationGeneric as any;\nexport const internalQuery = internalQueryGeneric as any;\nexport const mutation = mutationGeneric as any;\nexport const query = queryGeneric as any;\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\n\nexport const containsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"contains\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Structural containment only. Traversed for explicit semantics, but it never propagates opinions.\",\n};\n\n","import {\n applyNegativeEvidence,\n applyNegativeSupport,\n cumulativeFusion,\n project,\n trustDiscount,\n type EdgeMetadata,\n type Opinion,\n type PropagationResult,\n} from \"@lucern/confidence\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeRecord,\n} from \"./propagationTypes\";\n\nexport function readEdgeMetadata<TNodeId extends string>(\n edge: PropagationEdgeRecord<TNodeId>\n): EdgeMetadata {\n return {\n constraint: edge.constraint ?? undefined,\n normalization: edge.normalization ?? undefined,\n propagation: edge.propagation ?? undefined,\n conditionalA: edge.conditionalA ?? undefined,\n conditionalNotA: edge.conditionalNotA ?? undefined,\n };\n}\n\nexport function applyPerHopDamping(\n sourceOpinion: Opinion,\n damping: number\n): Opinion {\n if (damping >= 1) {\n return sourceOpinion;\n }\n\n return trustDiscount(sourceOpinion, Math.max(0, damping));\n}\n\nexport function annotateRationale(\n result: PropagationResult,\n spec: EdgePropagationSpec,\n hop: number\n): PropagationResult {\n return {\n ...result,\n rationale: `hop=${hop} edge=${spec.edgeType} damping=${spec.damping.toFixed(\n 2\n )} :: ${result.rationale}`,\n };\n}\n\nexport function propagatePositiveSupport(\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edgeWeight: number\n): PropagationResult {\n const discounted = trustDiscount(sourceOpinion, Math.abs(edgeWeight));\n return {\n opinion: cumulativeFusion(targetOpinion, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Supporting evidence (weight=${edgeWeight.toFixed(\n 2\n )}) from source at ${project(sourceOpinion).toFixed(2)}`,\n };\n}\n\nexport function propagatePositiveInform(\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edgeWeight: number\n): PropagationResult {\n const discounted = trustDiscount(sourceOpinion, Math.abs(edgeWeight));\n return {\n opinion: cumulativeFusion(targetOpinion, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Supporting evidence (weight=${edgeWeight.toFixed(2)})`,\n };\n}\n\nexport function propagateNegativeSupportWithMetadata(\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edgeWeight: number,\n edge: PropagationEdgeRecord\n): PropagationResult {\n return applyNegativeSupport(\n sourceOpinion,\n targetOpinion,\n edgeWeight,\n readEdgeMetadata(edge)\n );\n}\n\nexport function propagateNegativeInform(\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edgeWeight: number\n): PropagationResult {\n return applyNegativeEvidence(sourceOpinion, targetOpinion, edgeWeight);\n}\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeSupportWithMetadata,\n} from \"./utils\";\n\nexport const contradictsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"contradicts\",\n direction: \"bidirectional\",\n transitivity: \"none\",\n damping: 0.85,\n maxHops: 1,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const negativeWeight = -Math.abs(edge.weight ?? 1);\n const result = propagateNegativeSupportWithMetadata(\n dampedSource,\n targetOpinion,\n negativeWeight,\n edge\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Legacy contradiction edges move negative pressure in either direction, but never beyond one hop.\",\n};\n\n","import {\n conditionalDeduction,\n dampedDependencyCascade,\n project,\n} from \"@lucern/confidence\";\nimport type { EdgePropagationSpec } from \"./propagationTypes\";\nimport { annotateRationale, applyPerHopDamping, readEdgeMetadata } from \"./utils\";\n\nexport const dependsOnPropagationSpec: EdgePropagationSpec = {\n edgeType: \"depends_on\",\n direction: \"incoming\",\n transitivity: \"damped\",\n damping: 0.8,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const metadata = readEdgeMetadata(edge);\n\n if (metadata.conditionalA && metadata.conditionalNotA) {\n const deducedOpinion = conditionalDeduction(\n dampedSource,\n metadata.conditionalA,\n metadata.conditionalNotA,\n targetOpinion.a\n );\n\n return annotateRationale(\n {\n opinion: deducedOpinion,\n operator: \"conditional_deduction\",\n rationale: `Conditional deduction: prerequisite at ${project(\n dampedSource\n ).toFixed(2)}`,\n },\n context.spec,\n context.hop\n );\n }\n\n const result = dampedDependencyCascade(\n dampedSource,\n targetOpinion,\n metadata.propagation ?? \"continuous\"\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Structural gating. Textbook conditional deduction when edge conditionals exist, otherwise damped dependency cascade through downstream chains.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\n\nexport const derivedFromPropagationSpec: EdgePropagationSpec = {\n edgeType: \"derived_from\",\n direction: \"incoming\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Provenance only. The traversal surface stays explicit, but confidence does not move across derived_from edges.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagatePositiveInform,\n} from \"./utils\";\n\nexport const elaboratesPropagationSpec: EdgePropagationSpec = {\n edgeType: \"elaborates\",\n direction: \"outgoing\",\n transitivity: \"damped\",\n damping: 0.7,\n maxHops: 2,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const contextualWeight = Math.min(Math.abs(edge.weight ?? 0.35), 0.35);\n const result = propagatePositiveInform(\n dampedSource,\n targetOpinion,\n contextualWeight\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Context-rich supporting detail. Elaborates carries a small positive effect with short, damped chaining.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeInform,\n propagatePositiveInform,\n} from \"./utils\";\n\nexport const informsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"informs\",\n direction: \"outgoing\",\n transitivity: \"full\",\n damping: 0.92,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const weight = edge.weight ?? 1;\n const result =\n weight < 0\n ? propagateNegativeInform(dampedSource, targetOpinion, weight)\n : propagatePositiveInform(dampedSource, targetOpinion, weight);\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Evidence-bearing influence. Informs can chain through the graph with light per-hop damping.\",\n};\n\n","import type {\n EdgeMetadata,\n Opinion,\n PropagationResult,\n} from \"@lucern/confidence\";\n\nexport type PropagationTraversalDirection = \"outgoing\" | \"incoming\";\n\nexport type PropagationSpecDirection =\n | PropagationTraversalDirection\n | \"bidirectional\";\n\nexport type PropagationTransitivity = \"none\" | \"damped\" | \"full\";\n\nexport type PropagationEdgeType =\n | \"supports\"\n | \"depends_on\"\n | \"informs\"\n | \"contains\"\n | \"tests\"\n | \"derived_from\"\n | \"contradicts\"\n | \"refutes\"\n | \"elaborates\";\n\nexport type PropagationEdgeRecord<TNodeId extends string = string> = {\n fromNodeId?: TNodeId | null;\n toNodeId?: TNodeId | null;\n edgeType: string;\n weight?: number | null;\n constraint?: EdgeMetadata[\"constraint\"] | null;\n normalization?: EdgeMetadata[\"normalization\"] | null;\n propagation?: EdgeMetadata[\"propagation\"] | null;\n conditionalA?: EdgeMetadata[\"conditionalA\"] | null;\n conditionalNotA?: EdgeMetadata[\"conditionalNotA\"] | null;\n tenantId?: string;\n workspaceId?: string;\n};\n\nexport type EdgePropagationSpec<TNodeId extends string = string> = {\n edgeType: PropagationEdgeType;\n direction: PropagationSpecDirection;\n transitivity: PropagationTransitivity;\n damping: number;\n maxHops: number | \"unbounded\";\n operator: (\n sourceOpinion: Opinion,\n targetOpinion: Opinion,\n edge: PropagationEdgeRecord<TNodeId>,\n context: {\n hop: number;\n sourceNodeId: TNodeId;\n targetNodeId: TNodeId;\n traversedDirection: PropagationTraversalDirection;\n spec: EdgePropagationSpec<TNodeId>;\n }\n ) => PropagationResult | null;\n description: string;\n};\n\nexport function isPropagationTraversalDirection(\n direction: string\n): direction is PropagationTraversalDirection {\n return direction === \"outgoing\" || direction === \"incoming\";\n}\n\nexport function canTraverseHop<TNodeId extends string>(\n spec: EdgePropagationSpec<TNodeId>,\n nextHop: number\n): boolean {\n return spec.maxHops === \"unbounded\" || nextHop <= spec.maxHops;\n}\n\nexport function canContinueTransitively<TNodeId extends string>(\n spec: EdgePropagationSpec<TNodeId>,\n currentHop: number\n): boolean {\n if (spec.transitivity === \"none\") {\n return false;\n }\n\n return spec.maxHops === \"unbounded\" || currentHop < spec.maxHops;\n}\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeInform,\n} from \"./utils\";\n\nexport const refutesPropagationSpec: EdgePropagationSpec = {\n edgeType: \"refutes\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 0.9,\n maxHops: 1,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const negativeWeight = -Math.abs(edge.weight ?? 1);\n const result = propagateNegativeInform(\n dampedSource,\n targetOpinion,\n negativeWeight\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Explicit negative evidence semantics. Refutes is treated as strong one-hop counter-evidence.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeSupportWithMetadata,\n propagatePositiveSupport,\n} from \"./utils\";\n\nexport const supportsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"supports\",\n direction: \"outgoing\",\n transitivity: \"full\",\n damping: 0.85,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const weight = edge.weight ?? 1;\n const result =\n weight < 0\n ? propagateNegativeSupportWithMetadata(\n dampedSource,\n targetOpinion,\n weight,\n edge\n )\n : propagatePositiveSupport(dampedSource, targetOpinion, weight);\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Belief-to-belief influence. Supports chains transitively with moderate per-hop damping.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\n\nexport const testsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"tests\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Interrogation linkage only. Tests edges do not directly move confidence.\",\n};\n\n","import { containsPropagationSpec } from \"./contains\";\nimport { contradictsPropagationSpec } from \"./contradicts\";\nimport { dependsOnPropagationSpec } from \"./dependsOn\";\nimport { derivedFromPropagationSpec } from \"./derivedFrom\";\nimport { elaboratesPropagationSpec } from \"./elaborates\";\nimport { informsPropagationSpec } from \"./informs\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeType,\n PropagationSpecDirection,\n PropagationTraversalDirection,\n} from \"./propagationTypes\";\nimport {\n canContinueTransitively,\n canTraverseHop,\n isPropagationTraversalDirection,\n} from \"./propagationTypes\";\nimport { refutesPropagationSpec } from \"./refutes\";\nimport { supportsPropagationSpec } from \"./supports\";\nimport { testsPropagationSpec } from \"./tests\";\n\nexport type {\n EdgePropagationSpec,\n PropagationEdgeRecord,\n PropagationEdgeType,\n PropagationSpecDirection,\n PropagationTransitivity,\n PropagationTraversalDirection,\n} from \"./propagationTypes\";\nexport {\n canContinueTransitively,\n canTraverseHop,\n isPropagationTraversalDirection,\n} from \"./propagationTypes\";\n\nexport const EDGE_PROPAGATION_SPECS: readonly EdgePropagationSpec[] = [\n supportsPropagationSpec,\n informsPropagationSpec,\n dependsOnPropagationSpec,\n derivedFromPropagationSpec,\n containsPropagationSpec,\n testsPropagationSpec,\n contradictsPropagationSpec,\n refutesPropagationSpec,\n elaboratesPropagationSpec,\n] as const;\n\nconst EDGE_PROPAGATION_SPEC_MAP = new Map<\n PropagationEdgeType,\n EdgePropagationSpec\n>(EDGE_PROPAGATION_SPECS.map((spec) => [spec.edgeType, spec]));\n\nexport function getEdgePropagationSpec(\n edgeType: string\n): EdgePropagationSpec | undefined {\n return EDGE_PROPAGATION_SPEC_MAP.get(edgeType as PropagationEdgeType);\n}\n\nexport function getEdgePropagationSpecs(): readonly EdgePropagationSpec[] {\n return EDGE_PROPAGATION_SPECS;\n}\n\nexport function getTraversalDirections(\n direction: PropagationSpecDirection\n): readonly PropagationTraversalDirection[] {\n if (isPropagationTraversalDirection(direction)) {\n return [direction];\n }\n\n return [\"outgoing\", \"incoming\"];\n}\n\n","/**\n * Common Validators\n *\n * Shared validators for patterns used across domains.\n *\n * @module schema/shared/common\n */\n\nimport { v } from \"convex/values\";\nimport { looseJsonArray, looseJsonObject, looseJsonValue } from \"../validators\";\n\n// =============================================================================\n// CONFIDENCE\n// =============================================================================\n\n/**\n * Confidence level (0-1 scale).\n */\nexport const confidence = v.number();\n\n/**\n * Named confidence levels.\n */\nexport const confidenceLevel = v.union(\n v.literal(\"very_high\"), // 0.9+\n v.literal(\"high\"), // 0.7-0.9\n v.literal(\"medium\"), // 0.4-0.7\n v.literal(\"low\"), // 0.2-0.4\n v.literal(\"very_low\") // 0-0.2\n);\n\n/**\n * Convert numeric confidence to level.\n */\nexport function toConfidenceLevel(\n confidence: number\n): \"very_high\" | \"high\" | \"medium\" | \"low\" | \"very_low\" {\n if (confidence >= 0.9) {\n return \"very_high\";\n }\n if (confidence >= 0.7) {\n return \"high\";\n }\n if (confidence >= 0.4) {\n return \"medium\";\n }\n if (confidence >= 0.2) {\n return \"low\";\n }\n return \"very_low\";\n}\n\n// =============================================================================\n// PRIORITY\n// =============================================================================\n\n/**\n * Standard priority levels (1 = highest).\n */\nexport const priorityLevel = v.union(\n v.literal(1), // Critical\n v.literal(2), // High\n v.literal(3), // Medium\n v.literal(4), // Low\n v.literal(5) // Backlog\n);\n\n/**\n * Named priority levels.\n */\nexport const namedPriority = v.union(\n v.literal(\"critical\"),\n v.literal(\"high\"),\n v.literal(\"medium\"),\n v.literal(\"low\"),\n v.literal(\"backlog\")\n);\n\n// =============================================================================\n// STATUS\n// =============================================================================\n\n/**\n * Generic lifecycle status.\n */\nexport const lifecycleStatus = v.union(\n v.literal(\"active\"),\n v.literal(\"paused\"),\n v.literal(\"completed\"),\n v.literal(\"archived\")\n);\n\n/**\n * Processing status.\n */\nexport const processingStatus = v.union(\n v.literal(\"pending\"),\n v.literal(\"processing\"),\n v.literal(\"completed\"),\n v.literal(\"failed\")\n);\n\n// =============================================================================\n// EXTERNAL IDS\n// =============================================================================\n\n/**\n * Common external ID references.\n */\nexport const externalIds = v.object({\n crunchbaseId: v.optional(v.string()),\n linkedinUrl: v.optional(v.string()),\n pitchbookId: v.optional(v.string()),\n twitterUrl: v.optional(v.string()),\n domain: v.optional(v.string()),\n});\n\n// =============================================================================\n// SOURCE ATTRIBUTION\n// =============================================================================\n\n/**\n * Source type for evidence/information.\n */\nexport const sourceType = v.union(\n v.literal(\"proprietary\"), // Internal Stack research\n v.literal(\"primary\"), // Direct interviews, calls\n v.literal(\"secondary\"), // Published sources\n v.literal(\"ai_generated\"), // AI-synthesized\n v.literal(\"user_input\"), // Manual user entry\n v.literal(\"inferred\") // System inference\n);\n\n/**\n * Source attribution.\n */\nexport const sourceAttribution = v.object({\n sourceType: v.optional(sourceType),\n sourceId: v.optional(v.string()), // Reference to source entity\n sourceUrl: v.optional(v.string()),\n sourceDate: v.optional(v.number()),\n sourceName: v.optional(v.string()),\n});\n\n// =============================================================================\n// LOOSE JSON\n// =============================================================================\n\n/**\n * Shallow JSON validators for dynamic payloads.\n *\n * Canonical source now lives in Lucern schema-management validators.\n */\nexport { looseJsonArray, looseJsonObject, looseJsonValue };\n\n// =============================================================================\n// PAGINATION\n// =============================================================================\n\n/**\n * Pagination parameters.\n */\nexport const pagination = v.object({\n cursor: v.optional(v.string()),\n limit: v.optional(v.number()),\n});\n\n/**\n * Pagination result metadata.\n */\nexport const paginationMeta = v.object({\n hasMore: v.boolean(),\n nextCursor: v.optional(v.string()),\n totalCount: v.optional(v.number()),\n});\n\n// =============================================================================\n// RICH TEXT\n// =============================================================================\n\n/**\n * Rich text content (for editors like TipTap).\n */\nexport const richTextContent = v.object({\n type: v.literal(\"doc\"),\n content: looseJsonArray,\n});\n\n/**\n * Content with optional rich text.\n */\nexport const content = v.union(v.string(), richTextContent);\n\n// =============================================================================\n// TOKEN USAGE\n// =============================================================================\n\n/**\n * LLM token usage tracking.\n */\nexport const tokenUsage = v.object({\n promptTokens: v.optional(v.number()),\n completionTokens: v.optional(v.number()),\n totalTokens: v.optional(v.number()),\n});\n\n// =============================================================================\n// FILE METADATA\n// =============================================================================\n\n/**\n * File upload metadata.\n */\nexport const fileMetadata = v.object({\n fileName: v.optional(v.string()),\n fileSize: v.optional(v.number()),\n mimeType: v.optional(v.string()),\n storageId: v.optional(v.id(\"_storage\")),\n externalUrl: v.optional(v.string()),\n});\n","/**\n * Epistemic Nodes Table\n *\n * Unified knowledge graph nodes: epistemic objects + ontological entities.\n * - Epistemic: beliefs, questions, evidence, sources, syntheses, themes, deals\n * - Ontological: companies, people, investors, functions, value chains\n *\n * This is THE source of truth for all knowledge objects in StackOS.\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n * @module schema/spine/tables/epistemicNodes\n */\n\nimport { defineTable } from \"convex/server\";\nimport { v } from \"convex/values\";\nimport { looseJsonObject } from \"../../shared/common\";\n\n// =============================================================================\n// NODE TYPE VALIDATORS\n// =============================================================================\n\n/**\n * All valid node types in the epistemic graph.\n * Organized by epistemic layer (L4 → L3 → L2 → L1 → Ontological)\n */\nexport const nodeType = v.union(\n // --- L4: Audit Targets (decisions, outcomes) ---\n v.literal(\"decision\"), // Investment decision with knowledge horizon snapshot\n\n // --- L3: Traversal Anchors (epistemic structure) ---\n v.literal(\"belief\"), // Structured conviction (immutable formulation)\n v.literal(\"question\"), // Unit of uncertainty\n v.literal(\"theme\"), // Investment thesis / conviction cluster\n v.literal(\"deal\"), // Investment evaluation process\n v.literal(\"topic\"), // Hierarchical knowledge container\n\n // --- L2: Compression Boundary (minimum reasoning unit) ---\n v.literal(\"claim\"), // Atomic assertion that can be true/false\n v.literal(\"evidence\"), // Interpreted signal linked to beliefs\n v.literal(\"synthesis\"), // Primers, deep research\n v.literal(\"answer\"), // Immutable answer snapshot for a question\n\n // --- L1: Terminal Leaves (non-traversable, grounding) ---\n v.literal(\"atomic_fact\"), // Raw fact from source (not interpreted)\n v.literal(\"excerpt\"), // Direct quote from source document\n v.literal(\"source\"), // News, documents, transcripts\n\n // --- Ontological Entities (things in the world) ---\n v.literal(\"company\"), // Organization (subtype: private, corporate, portfolio)\n v.literal(\"person\"), // Individual (founder, expert, LP, contact)\n v.literal(\"investor\"), // Investment entity (subtype: vc, lp, cvc, pe, family_office, angel)\n v.literal(\"function\"), // What a company does (from classifier)\n v.literal(\"value_chain\") // Market structure / value flow\n);\n\n/**\n * Epistemic layer for traversal rules.\n * Traversal: L4→L3→L2→L1, never skip layers.\n */\nexport const epistemicLayer = v.union(\n v.literal(\"L4\"), // Decisions, outcomes - audit targets\n v.literal(\"L3\"), // Beliefs, questions, themes - traversal anchors\n v.literal(\"L2\"), // Claims, evidence, synthesis - compression boundary\n v.literal(\"L1\"), // Atomic facts, excerpts, sources - terminal leaves\n v.literal(\"ontological\"), // Companies, people, etc - not epistemic\n v.literal(\"organizational\") // Topics, lenses, worktrees — structural containers\n);\n\n/**\n * Node lifecycle status.\n */\nexport const nodeStatus = v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"), // Replaced by newer version\n v.literal(\"archived\"),\n v.literal(\"deleted\")\n);\n\n/**\n * How the node was created.\n */\nexport const sourceType = v.union(\n v.literal(\"human\"), // User created directly\n v.literal(\"ai_extracted\"), // LLM extracted from a source\n v.literal(\"ai_generated\"), // LLM synthesized/created\n v.literal(\"imported\"), // External system import\n v.literal(\"system\"), // System-generated (migrations, classifiers)\n v.literal(\"verified\"), // Human-verified source\n v.literal(\"proprietary\") // Proprietary/internal data\n);\n\n/**\n * Verification status for nodes.\n */\nexport const verificationStatus = v.union(\n v.literal(\"unverified\"),\n v.literal(\"human_verified\"),\n v.literal(\"ai_verified\"),\n v.literal(\"contradicted\"),\n v.literal(\"outdated\")\n);\n\n/**\n * Neo4j sync status.\n */\nexport const syncStatus = v.union(\n v.literal(\"synced\"), // Node and edges fully synced to Neo4j\n v.literal(\"pending_edges\"), // Node created, edges being created\n v.literal(\"edge_creation_failed\") // Edge creation failed, needs retry\n);\n\n// =============================================================================\n// POLICY / ENTITLEMENT METADATA\n// =============================================================================\n\nexport const audienceLabel = v.string();\n\nexport const sensitivityTier = v.union(\n v.literal(\"low\"),\n v.literal(\"medium\"),\n v.literal(\"high\"),\n v.literal(\"restricted\")\n);\n\nexport const exportClass = v.union(\n v.literal(\"internal_only\"),\n v.literal(\"client_safe\"),\n v.literal(\"public_safe\"),\n v.literal(\"restricted\")\n);\n\nexport const anonymizationClass = v.union(\n v.literal(\"none\"),\n v.literal(\"standard\"),\n v.literal(\"strict\")\n);\n\n// =============================================================================\n// TYPED METADATA VALIDATORS\n// =============================================================================\n\n// --- BELIEF METADATA ---\n// Epistemic status tracks where a belief is in its lifecycle (computed display status)\nexport const epistemicStatus = v.union(\n v.literal(\"hypothesis\"), // Initial conjecture, low evidence\n v.literal(\"emerging\"), // Building evidence, gaining traction\n v.literal(\"established\"), // Well-evidenced, core to thesis\n v.literal(\"challenged\"), // Contradicting evidence appeared\n v.literal(\"assumption\"), // Taken as given, not actively tested\n v.literal(\"deprecated\") // Superseded or abandoned\n);\n\n/**\n * Canonical belief lifecycle status.\n *\n * This field is distinct from `status`:\n * - `status`: archival/supersession lifecycle of the node itself.\n * - `beliefStatus`: epistemic lifecycle of the claim.\n */\nexport const beliefStatus = v.union(\n v.literal(\"assumption\"),\n v.literal(\"hypothesis\"),\n v.literal(\"belief\"),\n v.literal(\"fact\")\n);\n\n// How easily can this belief be reversed if wrong?\nexport const reversibility = v.union(\n v.literal(\"irreversible\"), // One-way door decision\n v.literal(\"hard_to_reverse\"), // Significant cost to undo\n v.literal(\"reversible\"), // Can change course with moderate effort\n v.literal(\"trivial\") // Easy to adjust\n);\n\nexport const predictionOutcome = v.union(\n v.literal(\"pending\"),\n v.literal(\"confirmed\"),\n v.literal(\"disconfirmed\"),\n v.literal(\"partial\"),\n v.literal(\"expired\")\n);\n\nexport const predictionMeta = v.object({\n isPrediction: v.boolean(),\n registeredAt: v.number(), // When prediction was made\n expectedBy: v.optional(v.number()), // When we expect resolution\n outcome: v.optional(predictionOutcome),\n outcomeRecordedAt: v.optional(v.number()),\n outcomeEvidenceId: v.optional(v.string()), // globalId of confirming evidence\n confidenceAtPrediction: v.optional(v.number()), // 0-1\n actualVsPredicted: v.optional(v.string()), // Notes on how outcome compared\n});\n\n// --- EVIDENCE METADATA ---\nexport const methodology = v.union(\n // Primary Research (high value)\n v.literal(\"primary_research\"), // Direct investigation\n v.literal(\"expert_interview\"), // Expert call/interview\n v.literal(\"customer_interview\"), // Customer research\n v.literal(\"field_observation\"), // On-site observation\n v.literal(\"proprietary_data\"), // Internal data analysis\n\n // Secondary Research\n v.literal(\"desk_research\"), // Public sources\n v.literal(\"regulatory_filing\"), // SEC, regulatory docs\n v.literal(\"news_article\"), // News/press\n v.literal(\"academic_paper\"), // Academic research\n\n // AI-Assisted\n v.literal(\"ai_synthesis\"), // AI-generated synthesis\n v.literal(\"ai_extraction\") // AI-extracted from source\n);\n\nexport const informationAsymmetry = v.union(\n v.literal(\"proprietary\"), // Only we have this\n v.literal(\"early\"), // We're early but others will get it\n v.literal(\"common\") // Everyone has access\n);\n\n// Evidence temporal nature: factual (resolved outcome) vs forecast (prediction)\n// See convex/schema/spine/nodes/evidence.ts for full documentation.\nexport const temporalNature = v.union(\n v.literal(\"factual\"), // Resolved outcome. Grounded in reality.\n v.literal(\"forecast\"), // Prediction. Will resolve. Discounted weight.\n v.literal(\"unknown\") // Not yet classified.\n);\n\n// --- QUESTION METADATA ---\nexport const questionType = v.union(\n v.literal(\"validation\"), // Does evidence support this belief?\n v.literal(\"falsification\"), // What would prove this belief wrong?\n v.literal(\"assumption_probe\"), // Is this unstated assumption true?\n v.literal(\"prediction_test\"), // Will this predicted outcome occur?\n v.literal(\"counterfactual\"), // What would we expect if X were false?\n v.literal(\"discovery\"), // What don't we know yet?\n v.literal(\"clarification\"), // What does X actually mean?\n v.literal(\"comparison\"), // How does X compare to Y?\n v.literal(\"causal\"), // What caused X?\n v.literal(\"mechanism\"), // How does X work?\n v.literal(\"general\") // Unclassified\n);\n\nexport const questionPriority = v.union(\n v.literal(\"critical\"), // Blocks decision-making\n v.literal(\"high\"), // Important for thesis\n v.literal(\"medium\"), // Would be nice to know\n v.literal(\"low\") // Background/curiosity\n);\n\nexport const answerQuality = v.union(\n v.literal(\"definitive\"), // Clear, well-supported\n v.literal(\"strong\"), // Good evidence, high confidence\n v.literal(\"moderate\"), // Some evidence\n v.literal(\"weak\"), // Limited evidence\n v.literal(\"speculative\"), // Mostly conjecture\n v.literal(\"unanswered\") // No answer yet\n);\n\n// --- BELIEF CONSENSUS METADATA (for non-consensus detection) ---\nexport const consensusView = v.union(\n v.literal(\"aligned\"), // We agree with market consensus\n v.literal(\"ahead_of\"), // We see this before consensus does\n v.literal(\"contrarian\"), // We actively disagree with consensus\n v.literal(\"orthogonal\"), // We're looking at something consensus isn't discussing\n v.literal(\"unknown\") // We don't know what consensus thinks\n);\n\n// --- THEME METADATA ---\nexport const themeConviction = v.union(\n v.literal(\"high\"), // Strong conviction, actively deploying\n v.literal(\"medium\"), // Building conviction\n v.literal(\"low\"), // Exploring, not convicted\n v.literal(\"negative\") // Actively avoiding\n);\n\n// --- DECISION METADATA ---\nexport const decisionType = v.union(\n v.literal(\"invest\"),\n v.literal(\"pass\"),\n v.literal(\"follow_on\"),\n v.literal(\"exit\"),\n v.literal(\"deep_dive\"),\n v.literal(\"monitor\"),\n v.literal(\"deprioritize\"),\n v.literal(\"thesis_adopt\"),\n v.literal(\"thesis_revise\"),\n v.literal(\"thesis_abandon\")\n);\n\nexport const decisionOutcome = v.union(\n v.literal(\"pending\"),\n v.literal(\"successful\"),\n v.literal(\"unsuccessful\"),\n v.literal(\"mixed\"),\n v.literal(\"unknown\")\n);\n\n// --- EXTERNAL IDS ---\nexport const externalIds = v.object({\n crunchbase: v.optional(v.string()),\n linkedin: v.optional(v.string()),\n pitchbook: v.optional(v.string()),\n twitter: v.optional(v.string()),\n website: v.optional(v.string()),\n});\n\n// =============================================================================\n// TABLE DEFINITION\n// =============================================================================\n\n/**\n * Epistemic Nodes table.\n * The unified graph node store for all knowledge objects.\n */\nexport const epistemicNodes = defineTable({\n // === IDENTITY ===\n globalId: v.string(), // UUID - survives migration to Neo4j\n\n // === TYPE ===\n nodeType,\n\n // === EPISTEMIC LAYER ===\n epistemicLayer: v.optional(epistemicLayer),\n\n // === SUBTYPE (for typed entities) ===\n subtype: v.optional(v.string()), // company: private|corporate|portfolio, investor: vc|lp|cvc|pe|family_office|angel\n\n // === CONTENT ===\n canonicalText: v.string(), // The core content (belief statement, company name, etc.)\n contentHash: v.string(), // SHA256(nodeType + canonicalText) for deduplication\n\n // Extended content (for sources/syntheses)\n content: v.optional(v.string()), // Full text for documents/articles\n contentType: v.optional(v.string()), // \"markdown\", \"html\", \"pdf\", \"text\"\n\n // === METADATA ===\n title: v.optional(v.string()), // Display title\n tags: v.optional(v.array(v.string())),\n domain: v.optional(v.string()), // For companies: website domain\n\n // Type-specific metadata (flexible object - LEGACY)\n // New code should use the typed fields below when available\n metadata: v.optional(looseJsonObject),\n\n // === POLICY / ENTITLEMENT ===\n tenantId: v.optional(v.string()),\n workspaceId: v.optional(v.string()),\n ownerPrincipalId: v.optional(v.string()),\n audienceLabel: v.optional(audienceLabel),\n policyTags: v.optional(v.array(v.string())),\n sensitivityTier: v.optional(sensitivityTier),\n exportClass: v.optional(exportClass),\n anonymizationClass: v.optional(anonymizationClass),\n\n // === PUBLICATION (visibility-based, not copy-based) ===\n // Publication expands who can see a workspace-local node — the node stays\n // in its workspace, like a microservice exposing part of its API surface.\n // Rules-based: pack/tenant-level publicationRules auto-evaluate on\n // confidence changes and node creation. No manual click-by-click.\n publicationStatus: v.optional(\n v.union(\n v.literal(\"unpublished\"), // Default: workspace-local only\n v.literal(\"published\"), // Visible at tenant scope (rules matched)\n v.literal(\"suppressed\") // Manually blocked even if rules match\n )\n ),\n publishedAt: v.optional(v.number()), // When publication status last changed to published\n publishedBy: v.optional(v.string()), // userId or \"system:publication_rules\" for auto-publish\n\n // === TYPED METADATA FIELDS ===\n // --- Belief ---\n // Belief type — validated against schemaEnumConfig category \"belief_type\"\n // Platform core: hypothesis, belief, principle, invariant, assumption,\n // tenet, prior, preference, goal, forecast\n beliefType: v.optional(v.string()),\n beliefStatus: v.optional(beliefStatus),\n epistemicStatus: v.optional(epistemicStatus),\n reversibility: v.optional(reversibility),\n predictionMeta: v.optional(predictionMeta),\n // Consensus tracking (for non-consensus detection)\n consensusView: v.optional(consensusView),\n consensusConfidence: v.optional(v.number()), // 0-1: What we think consensus confidence is\n consensusSource: v.optional(v.string()), // Where we got the consensus view (twitter, reports, etc.)\n\n // --- Evidence ---\n methodology: v.optional(methodology),\n informationAsymmetry: v.optional(informationAsymmetry),\n temporalNature: v.optional(temporalNature),\n\n // --- Question ---\n questionType: v.optional(questionType),\n questionPriority: v.optional(questionPriority),\n answerQuality: v.optional(answerQuality),\n\n // --- Theme ---\n themeConviction: v.optional(themeConviction),\n // Market timing (for \"early on theme\" detection)\n marketAwarenessDate: v.optional(v.number()), // When this theme became broadly discussed\n marketAwarenessSource: v.optional(v.string()), // How we know (first major report, twitter volume spike, etc.)\n earlySignalIds: v.optional(v.array(v.string())), // globalIds of evidence we had before market awareness\n\n // --- Decision ---\n decisionType: v.optional(decisionType),\n decisionOutcome: v.optional(decisionOutcome),\n\n // === EXTERNAL IDS (for ontological entities) ===\n externalIds: v.optional(externalIds),\n\n // === PROVENANCE ===\n sourceType,\n aiProvider: v.optional(v.string()), // \"claude\", \"gemini\", \"gpt-4\", etc.\n extractedFromNodeId: v.optional(v.id(\"epistemicNodes\")), // Quick reference to source\n\n // === EXTRACTION CONTEXT ===\n extractionModel: v.optional(v.string()), // \"claude-sonnet-4-20250514\"\n extractionPromptName: v.optional(v.string()), // \"lucern/extract-evidence\"\n extractionPromptVersion: v.optional(v.number()),\n extractionTemperature: v.optional(v.number()),\n extractionLangfuseTraceId: v.optional(v.string()),\n\n // === GROUNDING VERIFICATION ===\n groundingVerified: v.optional(v.boolean()),\n groundingConfidence: v.optional(v.number()), // 0-1 match quality\n groundingMatchedText: v.optional(v.string()), // Actual text from source\n groundingStartOffset: v.optional(v.number()),\n groundingEndOffset: v.optional(v.number()),\n groundingRejectionReason: v.optional(v.string()),\n\n // === CONFIDENCE & VERIFICATION ===\n confidence: v.optional(v.number()), // 0-1 projected probability P(x) = b + a*u\n verificationStatus: v.optional(verificationStatus),\n\n // === SL OPINION (Subjective Logic — Kernel v2) ===\n // Replaces scalar confidence with rich epistemic state.\n // b + d + u = 1. P(x) = b + a*u is stored in `confidence` for backward compat.\n opinion_b: v.optional(v.number()), // Belief: evidence FOR (0-1)\n opinion_d: v.optional(v.number()), // Disbelief: evidence AGAINST (0-1)\n opinion_u: v.optional(v.number()), // Uncertainty: absence of evidence (0-1)\n opinion_a: v.optional(v.number()), // Base rate / prior probability (0-1)\n tupleContradicted: v.optional(v.boolean()), // Single-belief tuple-space contradiction flag\n\n // === LIFECYCLE ===\n status: nodeStatus,\n supersededBy: v.optional(v.id(\"epistemicNodes\")),\n\n // === OWNERSHIP ===\n topicId: v.optional(v.string()), // Canonical scope container (topic-first model)\n projectId: v.optional(v.string()), // DEPRECATED: Use belongs_to edges\n createdBy: v.string(), // Clerk user ID\n createdAt: v.number(),\n updatedAt: v.number(),\n\n // === NEO4J SYNC STATUS ===\n syncStatus: v.optional(syncStatus),\n syncError: v.optional(v.string()), // Error message if sync failed\n})\n .index(\"by_globalId\", [\"globalId\"])\n .index(\"by_contentHash\", [\"contentHash\"])\n .index(\"by_nodeType\", [\"nodeType\"])\n .index(\"by_subtype\", [\"nodeType\", \"subtype\"])\n .index(\"by_domain\", [\"domain\"])\n .index(\"by_project\", [\"projectId\"]) // DEPRECATED\n .index(\"by_project_type\", [\"projectId\", \"nodeType\"]) // DEPRECATED\n .index(\"by_topic\", [\"topicId\"])\n .index(\"by_topic_type\", [\"topicId\", \"nodeType\"])\n .index(\"by_tenantId\", [\"tenantId\"])\n .index(\"by_workspaceId\", [\"workspaceId\"])\n .index(\"by_tenant_workspace\", [\"tenantId\", \"workspaceId\"])\n .index(\"by_audienceLabel\", [\"audienceLabel\"])\n .index(\"by_sensitivityTier\", [\"sensitivityTier\"])\n .index(\"by_exportClass\", [\"exportClass\"])\n .index(\"by_status\", [\"status\"])\n .index(\"by_sourceType\", [\"sourceType\"])\n .index(\"by_verification\", [\"verificationStatus\"])\n .index(\"by_layer\", [\"epistemicLayer\"]) // For layer-constrained traversal\n .index(\"by_layer_type\", [\"epistemicLayer\", \"nodeType\"]) // For layer+type queries\n .index(\"by_syncStatus\", [\"syncStatus\"]) // For finding nodes needing edge retry\n // === PUBLICATION INDEXES ===\n .index(\"by_publicationStatus\", [\"publicationStatus\"])\n .index(\"by_tenant_publicationStatus\", [\"tenantId\", \"publicationStatus\"])\n // === CLASSIFICATION INDEXES (Phase 6) ===\n .index(\"by_belief_status\", [\"nodeType\", \"beliefStatus\"]) // Canonical belief lifecycle stage\n .index(\"by_epistemic_status\", [\"nodeType\", \"epistemicStatus\"]) // Belief lifecycle analysis\n .index(\"by_temporal_nature\", [\"nodeType\", \"temporalNature\"]) // Evidence factual vs forecast\n .index(\"by_methodology\", [\"nodeType\", \"methodology\"]) // Evidence research method analysis\n .index(\"by_reversibility\", [\"nodeType\", \"reversibility\"]) // Decision impact analysis\n .index(\"by_questionType\", [\"nodeType\", \"questionType\"]) // Question classification\n .index(\"by_questionPriority\", [\"nodeType\", \"questionPriority\"]) // Question urgency\n .searchIndex(\"search_canonicalText\", {\n searchField: \"canonicalText\",\n filterFields: [\"nodeType\", \"projectId\", \"topicId\", \"status\"],\n });\n\n// =============================================================================\n// TYPE EXPORTS\n// =============================================================================\n\nimport type { Infer } from \"convex/values\";\n\n// Types needed internally for helper functions\ntype NodeType = Infer<typeof nodeType>;\ntype EpistemicLayer = Infer<typeof epistemicLayer>;\n\n// Only export types that are unique to this file (not already in ./nodes/*.ts)\nexport type ExternalIds = Infer<typeof externalIds>;\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Get the epistemic layer for a node type.\n */\nexport function getLayerForNodeType(type: NodeType): EpistemicLayer {\n switch (type) {\n case \"decision\":\n return \"L4\";\n case \"belief\":\n case \"question\":\n case \"theme\":\n case \"deal\":\n return \"L3\";\n case \"claim\":\n case \"evidence\":\n case \"synthesis\":\n case \"answer\":\n return \"L2\";\n case \"atomic_fact\":\n case \"excerpt\":\n case \"source\":\n return \"L1\";\n case \"topic\":\n return \"organizational\";\n case \"company\":\n case \"person\":\n case \"investor\":\n case \"function\":\n case \"value_chain\":\n return \"ontological\";\n }\n}\n\n/**\n * Async layer resolver with schemaEnumConfig fallback for tenant-defined entity types.\n *\n * For hardcoded types (the switch above), returns immediately.\n * For unknown types, checks schemaEnumConfig for entity_type entries.\n * If found in the registry, returns \"ontological\". Otherwise returns undefined.\n *\n * Use this when you need to handle tenant-extensible entity types.\n * For known platform types, the synchronous `getLayerForNodeType` is sufficient.\n */\nexport async function resolveLayerForNodeType(\n ctx: { db: { query: (table: string) => any } },\n type: string\n): Promise<EpistemicLayer | undefined> {\n // First try the hardcoded switch for known types\n const knownLayer = getLayerForNodeType(type as NodeType);\n if (knownLayer !== undefined) {\n return knownLayer;\n }\n\n // Fallback: check schemaEnumConfig for tenant-registered entity types\n const registryEntry = await ctx.db\n .query(\"schemaEnumConfig\")\n .withIndex(\"by_category_value\", (q: any) =>\n q.eq(\"category\", \"entity_type\").eq(\"value\", type)\n )\n .first();\n\n if (registryEntry && registryEntry.status === \"active\") {\n return \"ontological\";\n }\n\n return;\n}\n\n/**\n * Check if a node type is epistemic (vs ontological).\n */\nexport function isEpistemicNodeType(type: NodeType): boolean {\n return getLayerForNodeType(type) !== \"ontological\";\n}\n","/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport { api as appApi } from \"./convex\";\nimport type { Id } from \"./convex\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectScope = {\n topicId: Id<\"topics\">;\n projectId?: string;\n tenantId?: string;\n workspaceId?: string;\n source: \"topic\" | \"project_mapped_topic\" | \"topic_inferred\";\n};\n\ntype MaterializedTopicNodeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n};\n\nfunction asMappedProjectId(\n topic: TopicDoc | null | undefined\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(topic[LEGACY_SCOPE_FIELD]);\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = (topic.metadata || {}) as Record<string, unknown>;\n const candidate =\n (metadata[LEGACY_SCOPE_FIELD] as string | undefined) ||\n (metadata.legacyProjectId as string | undefined) ||\n (metadata.projectId as string | undefined) ||\n (metadata.scopeProjectId as string | undefined);\n return candidate ? (candidate as string) : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(ctx: any, scopeId: string): Promise<TopicDoc[]> {\n try {\n return (await ctx.db\n .query(\"topics\")\n .withIndex(\"by_graph_scope_project\", (q: any) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId)\n )\n .collect()) as TopicDoc[];\n } catch {\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await ctx.db.query(\"topics\").collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: any,\n topicId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get as any, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch {\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: any,\n legacyScopeId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId as any, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch {\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: any,\n topic: TopicDoc\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) break;\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) break;\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: any,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string }\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n // Try direct lookup, fall back to the legacy mapped-project bridge\n let topic: TopicDoc | null = null;\n try {\n topic = (await ctx.db.get(args.topicId as Id<\"topics\">)) as TopicDoc | null;\n } catch {\n // Not a valid topics table ID\n }\n if (!topic) {\n topic = await tryResolveHostTopicById(ctx, String(args.topicId));\n }\n if (!topic) {\n // Try as legacy projectId / globalId via the mapped-project bridge.\n topic =\n pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, String(args.topicId))\n ) ?? null;\n }\n if (!topic) {\n throw new Error(`Topic not found: ${String(args.topicId)}`);\n }\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n if (mapped) {\n return {\n topicId: topic._id,\n projectId: mapped,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n return {\n topicId: topic._id,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n\n if (args.projectId) {\n let directTopic: TopicDoc | null = null;\n try {\n directTopic = (await ctx.db.get(\n args.projectId as Id<\"topics\">\n )) as TopicDoc | null;\n } catch {\n // Not a valid topics table ID, continue to legacy graph-scope lookup.\n }\n\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n directTopic = await tryResolveHostTopicByLegacyScope(ctx, args.projectId);\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n const topics = await findTopicsByScopeAlias(ctx, args.projectId);\n const primary = pickPrimaryTopic(topics);\n if (primary) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, primary);\n return {\n topicId: primary._id,\n projectId: args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"project_mapped_topic\",\n };\n }\n throw new Error(\n `Legacy project scope ${String(args.projectId)} has no mapped topic.`\n );\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\"\n );\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","import { getLayerForNodeType } from \"@lucern/schema-management/spine/tables/epistemicNodes\";\nimport {\n resolveTopicProjectScope,\n type TopicProjectScope,\n} from \"./topicScope\";\n\ntype StructuredInvariantError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype ScopeLike = {\n tenantId?: unknown;\n workspaceId?: unknown;\n epistemicLayer?: unknown;\n nodeType?: unknown;\n topicId?: unknown;\n projectId?: unknown;\n publicationStatus?: unknown;\n};\n\nexport type RuntimePackMutationContext = {\n toolName?: string;\n packKey?: string;\n packInstallScope?: \"tenant\" | \"workspace\";\n};\n\nexport function normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction throwWorkspaceIsolationError(args: {\n message: string;\n invariantCode: string;\n suggestion: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredInvariantError;\n error.status = 409;\n error.code = \"INVARIANT_VIOLATION\";\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nexport function assertWorkspaceScopedEpistemicNodeScope(args: {\n scope: TopicProjectScope;\n nodeType: string;\n mutationName: string;\n}): void {\n const layer = getLayerForNodeType(args.nodeType as any);\n if (layer === \"ontological\") {\n return;\n }\n\n const workspaceId = normalizeScopeValue(args.scope.workspaceId);\n if (workspaceId) {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n \"Workspace-scoped reasoning isolation requires workspaceId on non-ontological node creation.\",\n invariantCode: \"workspace.scope_required_for_epistemic_nodes\",\n suggestion:\n \"Resolve the topic/project scope through a workspace-bound topic before creating epistemic nodes.\",\n details: {\n mutationName: args.mutationName,\n nodeType: args.nodeType,\n topicId: args.scope.topicId,\n projectId: args.scope.projectId,\n },\n });\n}\n\nexport function nodeMatchesWorkspaceReasoningScope(\n node: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!node) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const nodeTenantId = normalizeScopeValue(node.tenantId);\n const nodeWorkspaceId = normalizeScopeValue(node.workspaceId);\n const epistemicLayer =\n typeof node.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n\n if (\n scopeTenantId &&\n nodeTenantId &&\n scopeTenantId !== nodeTenantId\n ) {\n return false;\n }\n\n // Ontological entities are tenant-global (no workspace required)\n if (epistemicLayer === \"ontological\" && nodeWorkspaceId === undefined) {\n return true;\n }\n\n // Published nodes are visible at tenant scope — the microservice API surface.\n // The node stays in its workspace, but tenant-scope queries can see it.\n if (!scopeWorkspaceId && node.publicationStatus === \"published\") {\n return true;\n }\n\n if (!scopeWorkspaceId) {\n return nodeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === nodeWorkspaceId;\n}\n\nexport function edgeMatchesWorkspaceReasoningScope(\n edge: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!edge) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const edgeTenantId = normalizeScopeValue(edge.tenantId);\n const edgeWorkspaceId = normalizeScopeValue(edge.workspaceId);\n\n if (\n scopeTenantId &&\n edgeTenantId &&\n scopeTenantId !== edgeTenantId\n ) {\n return false;\n }\n\n if (!scopeWorkspaceId) {\n return edgeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === edgeWorkspaceId;\n}\n\nexport async function resolveNodeScopeForWorkspaceIsolation(\n ctx: any,\n node: ScopeLike | null | undefined\n): Promise<{\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n nodeType?: string;\n}> {\n const epistemicLayer =\n typeof node?.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n const resolved = {\n tenantId: normalizeScopeValue(node?.tenantId),\n workspaceId: normalizeScopeValue(node?.workspaceId),\n epistemicLayer,\n nodeType: typeof node?.nodeType === \"string\" ? node.nodeType : undefined,\n };\n\n if (!node) {\n return resolved;\n }\n\n if (resolved.epistemicLayer === \"ontological\") {\n return resolved;\n }\n\n if (resolved.tenantId || resolved.workspaceId) {\n return resolved;\n }\n\n if (node.topicId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n topicId: node.topicId as any,\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n if (node.projectId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n projectId: String(node.projectId),\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n return resolved;\n}\n\nexport function resolveRuntimePackMutationContext(args: {\n runtimeToolName?: string;\n runtimePackKey?: string;\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n}): RuntimePackMutationContext | undefined {\n if (\n !args.runtimeToolName &&\n !args.runtimePackKey &&\n !args.runtimePackInstallScope\n ) {\n return;\n }\n\n return {\n toolName: args.runtimeToolName,\n packKey: args.runtimePackKey,\n packInstallScope: args.runtimePackInstallScope,\n };\n}\n\nexport function assertTenantPackWorkspaceMutationAllowed(args: {\n runtime?: RuntimePackMutationContext;\n target: ScopeLike;\n mutationName: string;\n}): void {\n if (\n !args.runtime?.packKey ||\n args.runtime.packInstallScope !== \"tenant\"\n ) {\n return;\n }\n\n const targetWorkspaceId = normalizeScopeValue(args.target.workspaceId);\n const targetLayer =\n typeof args.target.epistemicLayer === \"string\"\n ? args.target.epistemicLayer\n : undefined;\n\n if (!targetWorkspaceId || targetLayer === \"ontological\") {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n `Tenant-scoped pack \"${args.runtime.packKey}\" cannot mutate workspace-scoped reasoning state.`,\n invariantCode: \"workspace.tenant_pack_reasoning_write_forbidden\",\n suggestion:\n \"Use a workspace-scoped pack for workspace-local graph mutations, or route the change through tenant-global canonical entity flows.\",\n details: {\n mutationName: args.mutationName,\n toolName: args.runtime.toolName,\n packKey: args.runtime.packKey,\n targetWorkspaceId,\n targetNodeType: args.target.nodeType,\n targetLayer,\n },\n });\n}\n","import {\n hasProjectedOpinionChanged,\n readOpinionFromRecord,\n type Opinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport {\n canContinueTransitively,\n canTraverseHop,\n getEdgePropagationSpecs,\n getTraversalDirections,\n type EdgePropagationSpec,\n type PropagationEdgeRecord,\n type PropagationEdgeType,\n type PropagationTraversalDirection,\n} from \"./edges\";\nimport {\n edgeMatchesWorkspaceReasoningScope,\n nodeMatchesWorkspaceReasoningScope,\n} from \"./workspaceIsolation\";\n\nexport type PropagationDispatchScope = {\n tenantId?: string;\n workspaceId?: string;\n};\n\nexport type PropagationDispatchNode<TNodeId extends string = string> = {\n _id?: TNodeId;\n nodeType?: string;\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n publicationStatus?: string;\n metadata?: unknown;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n opinion_a?: number;\n};\n\nexport type PropagationDispatchEdge<TNodeId extends string = string> =\n PropagationEdgeRecord<TNodeId>;\n\nexport type ConfidencePropagationDispatch<TNodeId extends string = string> = {\n targetNodeId: TNodeId;\n edgeType: PropagationEdgeType;\n traversedDirection: PropagationTraversalDirection;\n weight: number;\n opinion: Opinion;\n operator: SLOperator;\n rationale: string;\n hop: number;\n};\n\nfunction resolveTraversalTargetNodeId<TNodeId extends string>(\n edge: PropagationDispatchEdge<TNodeId>,\n direction: PropagationTraversalDirection\n): TNodeId | undefined {\n const targetNodeId =\n direction === \"outgoing\" ? edge.toNodeId : edge.fromNodeId;\n return targetNodeId ?? undefined;\n}\n\nfunction readNodeOpinion<TNodeId extends string>(\n node: PropagationDispatchNode<TNodeId>\n): Opinion {\n const metadata = (node.metadata ?? {}) as Record<string, unknown>;\n\n return readOpinionFromRecord(\n {\n ...metadata,\n opinion_b: node.opinion_b,\n opinion_d: node.opinion_d,\n opinion_u: node.opinion_u,\n opinion_a: node.opinion_a,\n },\n { b: 0, d: 0, u: 1, a: 0.5 }\n );\n}\n\nexport async function collectConfidencePropagationDispatches<\n TNodeId extends string = string,\n>(args: {\n sourceNodeId: TNodeId;\n sourceOpinion: Opinion;\n sourceScope?: PropagationDispatchScope;\n traversalSpecs?: readonly EdgePropagationSpec<TNodeId>[];\n queryEdges: (args: {\n nodeId: TNodeId;\n spec: EdgePropagationSpec<TNodeId>;\n direction: PropagationTraversalDirection;\n hop: number;\n }) => Promise<ReadonlyArray<PropagationDispatchEdge<TNodeId>>>;\n getNode: (\n nodeId: TNodeId\n ) => Promise<PropagationDispatchNode<TNodeId> | null | undefined>;\n}): Promise<ConfidencePropagationDispatch<TNodeId>[]> {\n const dispatchesByTargetId = new Map<\n string,\n ConfidencePropagationDispatch<TNodeId>\n >();\n const opinionCache = new Map<string, Opinion>();\n const nodeCache = new Map<\n string,\n PropagationDispatchNode<TNodeId> | null | undefined\n >();\n const traversalSpecs = (args.traversalSpecs ??\n getEdgePropagationSpecs()) as readonly EdgePropagationSpec<TNodeId>[];\n const queue: Array<{\n nodeId: TNodeId;\n opinion: Opinion;\n hop: number;\n visitedNodeIds: Set<string>;\n }> = [\n {\n nodeId: args.sourceNodeId,\n opinion: args.sourceOpinion,\n hop: 0,\n visitedNodeIds: new Set([String(args.sourceNodeId)]),\n },\n ];\n\n const loadNode = async (nodeId: TNodeId) => {\n const cacheKey = String(nodeId);\n if (!nodeCache.has(cacheKey)) {\n nodeCache.set(cacheKey, await args.getNode(nodeId));\n }\n return nodeCache.get(cacheKey) ?? null;\n };\n\n while (queue.length > 0) {\n const state = queue.shift();\n if (!state) {\n continue;\n }\n\n for (const spec of traversalSpecs) {\n const nextHop = state.hop + 1;\n if (!canTraverseHop(spec, nextHop)) {\n continue;\n }\n\n for (const direction of getTraversalDirections(spec.direction)) {\n const edges = await args.queryEdges({\n nodeId: state.nodeId,\n spec,\n direction,\n hop: nextHop,\n });\n\n for (const edge of edges) {\n if (\n args.sourceScope &&\n !edgeMatchesWorkspaceReasoningScope(edge, args.sourceScope)\n ) {\n continue;\n }\n\n const targetNodeId = resolveTraversalTargetNodeId(edge, direction);\n if (!targetNodeId) {\n continue;\n }\n\n if (state.visitedNodeIds.has(String(targetNodeId))) {\n continue;\n }\n\n const targetNode = await loadNode(targetNodeId);\n if (!targetNode || targetNode.nodeType !== \"belief\") {\n continue;\n }\n\n if (\n args.sourceScope &&\n !nodeMatchesWorkspaceReasoningScope(targetNode, args.sourceScope)\n ) {\n continue;\n }\n\n const cacheKey = String(targetNodeId);\n const targetOpinion =\n opinionCache.get(cacheKey) ?? readNodeOpinion(targetNode);\n const result = spec.operator(state.opinion, targetOpinion, edge, {\n hop: nextHop,\n sourceNodeId: state.nodeId,\n targetNodeId,\n traversedDirection: direction,\n spec,\n });\n\n if (\n !result ||\n !hasProjectedOpinionChanged(targetOpinion, result.opinion)\n ) {\n continue;\n }\n\n opinionCache.set(cacheKey, result.opinion);\n\n const existingDispatch = dispatchesByTargetId.get(cacheKey);\n dispatchesByTargetId.set(cacheKey, {\n targetNodeId,\n edgeType: spec.edgeType,\n traversedDirection: direction,\n weight: edge.weight ?? 1,\n opinion: result.opinion,\n operator: result.operator,\n rationale: existingDispatch\n ? `${existingDispatch.rationale}; ${result.rationale}`\n : result.rationale,\n hop: nextHop,\n });\n\n if (canContinueTransitively(spec, nextHop)) {\n queue.push({\n nodeId: targetNodeId,\n opinion: result.opinion,\n hop: nextHop,\n visitedNodeIds: new Set([\n ...state.visitedNodeIds,\n String(targetNodeId),\n ]),\n });\n }\n }\n }\n }\n }\n\n return Array.from(dispatchesByTargetId.values()).sort((left, right) => {\n if (left.hop !== right.hop) {\n return left.hop - right.hop;\n }\n return String(left.targetNodeId).localeCompare(String(right.targetNodeId));\n });\n}\n","/**\n * Shared helper to schedule embedding generation after epistemic node creation.\n *\n * Best-effort — failures are silently caught. The embedding generation action\n * is a public action in convex/embeddingActions.ts that calls Pinecone.\n */\n\nimport type { Id } from \"./convex\";\n\ninterface EmbeddingTriggerArgs {\n ctx: any;\n nodeId: Id<\"epistemicNodes\">;\n projectId?: string | null;\n topicId?: string | null;\n createdBy: string;\n nodeType:\n | \"belief\"\n | \"question\"\n | \"evidence\"\n | \"answer\"\n | \"synthesis\"\n | \"theme\"\n | \"source\";\n text: string;\n hasAnswer?: boolean;\n confidence?: number;\n}\n\nexport async function scheduleEmbeddingGeneration(args: EmbeddingTriggerArgs): Promise<void> {\n try {\n await args.ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId: args.nodeId,\n projectId: args.projectId ? String(args.projectId) : undefined,\n topicId: args.topicId ? String(args.topicId) : undefined,\n createdBy: args.createdBy,\n nodeType: args.nodeType,\n text: args.text.slice(0, 20_000),\n hasAnswer: args.hasAnswer,\n confidence: args.confidence,\n }\n );\n } catch {\n // Embedding generation is best-effort — never block node creation\n }\n}\n","/**\n * Shared UUID v4 generator for global IDs.\n *\n * Uses crypto.getRandomValues() for collision-safe generation.\n * Replaces the Math.random()-based UUID pattern that was duplicated\n * across 7+ files.\n *\n * @module convex/lib/globalId\n */\n\n/**\n * Generate a UUID v4 global ID using crypto-safe random bytes.\n */\nexport function generateGlobalId(): string {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n // Set version (4) and variant (RFC 4122)\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, \"0\")).join(\n \"\"\n );\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n","/**\n * logicalRoleInference module implementation.\n */\n\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\n\ntype LogicalRole =\n | \"necessary\"\n | \"sufficient\"\n | \"necessary_sufficient\"\n | \"contributory\"\n | \"corroborative\";\n\nconst PILLAR_IMPORTANCE: Record<string, number> = {\n market: 1,\n competition: 2,\n product: 3,\n team: 4,\n financials: 5,\n timing: 6,\n other: 10,\n};\n\ntype GraphCtx = QueryCtx | MutationCtx;\n\nexport async function computeLogicalRole(\n ctx: GraphCtx,\n evidenceId: Id<\"epistemicNodes\">,\n beliefId: Id<\"epistemicNodes\">\n): Promise<LogicalRole> {\n const belief = await ctx.db.get(beliefId);\n if (!belief || belief.nodeType !== \"belief\") {\n return \"contributory\";\n }\n\n const beliefMetadata = belief.metadata as Record<string, unknown> | undefined;\n const pillar = (beliefMetadata?.pillar as string) || \"other\";\n const pillarRank = PILLAR_IMPORTANCE[pillar] ?? 10;\n\n const isSynthesized = await checkIfSynthesizedHypothesis(ctx, beliefId);\n const testingQuestions = await getTestingQuestionsForBelief(ctx, beliefId);\n const answeredQuestions = await getQuestionsAnsweredByEvidence(\n ctx,\n evidenceId\n );\n const directlyTests = testingQuestions.filter((questionId) =>\n answeredQuestions.includes(questionId)\n );\n\n if (directlyTests.length === 0) {\n return \"contributory\";\n }\n\n if (isSynthesized && pillarRank <= 2) {\n return directlyTests.length > 1 ? \"necessary_sufficient\" : \"necessary\";\n }\n\n if (isSynthesized) {\n return \"necessary\";\n }\n\n return directlyTests.length > 1 ? \"necessary\" : \"contributory\";\n}\n\nasync function checkIfSynthesizedHypothesis(\n ctx: GraphCtx,\n beliefId: Id<\"epistemicNodes\">\n): Promise<boolean> {\n const belief = await ctx.db.get(beliefId);\n if (!belief) {\n return false;\n }\n\n const metadata = belief.metadata as Record<string, unknown> | undefined;\n return (\n metadata?.isSynthesized === true ||\n metadata?.beliefStatus === \"hypothesis\"\n );\n}\n\nasync function getTestingQuestionsForBelief(\n ctx: GraphCtx,\n beliefId: Id<\"epistemicNodes\">\n): Promise<string[]> {\n const testEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", beliefId).eq(\"edgeType\", \"tests\")\n )\n .collect();\n\n return testEdges\n .map((edge) => edge.fromNodeId as string)\n .filter((id): id is string => id !== undefined);\n}\n\nasync function getQuestionsAnsweredByEvidence(\n ctx: GraphCtx,\n evidenceId: Id<\"epistemicNodes\">\n): Promise<string[]> {\n const answerEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_type\", (q) =>\n q.eq(\"fromNodeId\", evidenceId).eq(\"edgeType\", \"derived_from\")\n )\n .collect();\n\n return answerEdges\n .map((edge) => edge.toNodeId as string)\n .filter((id): id is string => id !== undefined);\n}\n","import { api } from \"./convex\";\n\ntype OverlayIdMode = \"legacy\" | \"topic\";\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype LegacyProjectThesis = {\n statement: string;\n confidence: number;\n lastUpdated: number;\n};\n\ntype LegacyPillarImportance =\n | \"critical\"\n | \"major\"\n | \"minor\"\n | \"not_applicable\";\n\ntype LegacyThesisPillarConfig = {\n pillarImportance?: Record<string, LegacyPillarImportance | undefined>;\n configuredAt?: number;\n configuredBy?: string;\n aiSuggestion?: {\n suggestedAt: number;\n reasoning: string;\n };\n};\n\ntype LegacyBeliefArchitecture = {\n overallMaturity: number;\n pillarScores: Array<Record<string, unknown>>;\n lastCalculated: number;\n};\n\ntype LegacyOntologyClassification = {\n valueChains: Array<Record<string, unknown>>;\n functions: Array<Record<string, unknown>>;\n overallConfidence: number;\n classifiedAt: number;\n};\n\ntype TopicDocLike = Record<string, unknown> & {\n _id: string;\n _creationTime?: number;\n globalId?: string;\n name?: string;\n description?: string;\n type?: string;\n tenantId?: string;\n workspaceId?: string;\n status?: string;\n visibility?: string;\n createdBy?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectOverlay = Record<string, unknown> & {\n _id: string;\n projectId: string;\n topicId: string;\n storageProjectId: string;\n legacyProjectId?: string;\n name: string;\n type: string;\n description?: string;\n ownerId: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n tags: string[];\n chatCount: number;\n artifactCount: number;\n lastActivityAt: number;\n thesis?: LegacyProjectThesis;\n wedgeHypothesis?: string;\n founderArchetype?: string;\n investmentCriteria?: string[];\n sprintPhase?:\n | \"pre_sprint\"\n | \"readiness_check\"\n | \"thesis_crystallization\"\n | \"sprint_planning\"\n | \"active_sprint\"\n | \"theme_assembly\"\n | \"evolution\";\n currentSprintIndex?: number;\n thesisPillarConfig?: LegacyThesisPillarConfig;\n beliefArchitecture?: LegacyBeliefArchitecture;\n ontologyClassification?: LegacyOntologyClassification;\n _creationTime: number;\n createdAt: number;\n updatedAt: number;\n};\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readNonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction readMetadata(topic: TopicDocLike): Record<string, unknown> {\n return topic.metadata && typeof topic.metadata === \"object\"\n ? topic.metadata\n : {};\n}\n\nfunction readLegacyProjectId(\n value: Record<string, unknown> | null | undefined\n): string | undefined {\n if (!value) {\n return;\n }\n return readNonEmptyString(value[LEGACY_SCOPE_FIELD]);\n}\n\nfunction coerceVisibility(\n value: unknown\n): TopicProjectOverlay[\"visibility\"] | undefined {\n return value === \"private\" ||\n value === \"team\" ||\n value === \"firm\" ||\n value === \"external\" ||\n value === \"public\"\n ? value\n : undefined;\n}\n\nfunction coerceStatus(\n value: unknown\n): TopicProjectOverlay[\"status\"] | undefined {\n return value === \"active\" || value === \"archived\" || value === \"watching\"\n ? value\n : undefined;\n}\n\nfunction mapProjectType(\n topic: TopicDocLike,\n metadata: Record<string, unknown>\n): string {\n const explicit = readNonEmptyString(metadata.projectType);\n if (explicit) {\n return explicit;\n }\n if (topic.type === \"theme\") {\n return \"thematic\";\n }\n return readNonEmptyString(topic.type) || \"general\";\n}\n\nfunction isProjectLikeTopic(topic: TopicDocLike): boolean {\n const metadata = readMetadata(topic);\n return (\n topic.type === \"theme\" ||\n topic.type === \"thematic\" ||\n topic.type === \"deal\" ||\n topic.type === \"monitoring\" ||\n readLegacyProjectId(topic) !== undefined ||\n readNonEmptyString(metadata.projectType) !== undefined\n );\n}\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found'\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nasync function resolveTopicDoc(\n ctx: any,\n scopeId: string\n): Promise<TopicDocLike | null> {\n if (ctx?.db && typeof ctx.db.get === \"function\") {\n try {\n const directTopic = (await ctx.db.get(scopeId as any)) as TopicDocLike | null;\n if (directTopic) {\n return directTopic;\n }\n } catch {\n // Not a direct topics-table id.\n }\n }\n\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.get as any, {\n id: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch {\n // Fall through to legacy-scope lookup.\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.getByLegacyScopeId as any, {\n projectId: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch {\n // Best-effort compat lookup only.\n }\n\n return null;\n}\n\nexport function materializeTopicProjectOverlay(\n topic: TopicDocLike,\n idMode: OverlayIdMode = \"legacy\"\n): TopicProjectOverlay {\n const metadata = readMetadata(topic);\n const topicId = String(topic._id);\n const legacyProjectId =\n readLegacyProjectId(topic) ||\n readLegacyProjectId(metadata) ||\n readNonEmptyString(metadata.legacyProjectId);\n const storageProjectId = legacyProjectId || topicId;\n const outwardId = idMode === \"topic\" ? topicId : storageProjectId;\n const visibility =\n coerceVisibility(topic.visibility) ||\n coerceVisibility(metadata.visibility) ||\n \"private\";\n const status =\n coerceStatus(topic.status) || coerceStatus(metadata.status) || \"active\";\n const createdAt =\n typeof topic.createdAt === \"number\"\n ? topic.createdAt\n : typeof topic._creationTime === \"number\"\n ? topic._creationTime\n : 0;\n const updatedAt =\n typeof topic.updatedAt === \"number\"\n ? topic.updatedAt\n : typeof metadata.updatedAt === \"number\"\n ? (metadata.updatedAt as number)\n : createdAt;\n\n return {\n ...metadata,\n _id: outwardId,\n projectId: outwardId,\n topicId,\n storageProjectId,\n legacyProjectId,\n name: readNonEmptyString(topic.name) || \"Untitled Theme\",\n type: mapProjectType(topic, metadata),\n description: readNonEmptyString(topic.description),\n ownerId:\n readNonEmptyString(metadata.ownerId) ||\n readNonEmptyString(topic.createdBy) ||\n \"system\",\n sharedWith: readStringArray(metadata.sharedWith),\n visibility,\n tenantId:\n readNonEmptyString(topic.tenantId) ||\n readNonEmptyString(metadata.tenantId),\n workspaceId:\n readNonEmptyString(topic.workspaceId) ||\n readNonEmptyString(metadata.workspaceId),\n status,\n tags: readStringArray(metadata.tags),\n chatCount:\n typeof metadata.chatCount === \"number\" ? (metadata.chatCount as number) : 0,\n artifactCount:\n typeof metadata.artifactCount === \"number\"\n ? (metadata.artifactCount as number)\n : 0,\n lastActivityAt:\n typeof metadata.lastActivityAt === \"number\"\n ? (metadata.lastActivityAt as number)\n : updatedAt,\n _creationTime:\n typeof topic._creationTime === \"number\" ? topic._creationTime : createdAt,\n createdAt,\n updatedAt,\n };\n}\n\nexport async function resolveTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n if (options.projectLikeOnly !== false && !isProjectLikeTopic(topic)) {\n return null;\n }\n return materializeTopicProjectOverlay(topic, options.idMode);\n}\n\nexport async function listTopicProjectOverlays(\n ctx: any,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay[]> {\n let allTopics: TopicDocLike[] = [];\n\n if (ctx?.db?.query && typeof ctx.db.query === \"function\") {\n try {\n allTopics = (await ctx.db.query(\"topics\").collect()) as TopicDocLike[];\n } catch {\n allTopics = [];\n }\n }\n\n if (allTopics.length === 0 && typeof ctx.runQuery === \"function\") {\n allTopics =\n (((await ctx.runQuery(api.topics.list as any, {})) ?? []) as TopicDocLike[]) ||\n [];\n }\n\n return allTopics\n .filter(\n (topic) => options.projectLikeOnly === false || isProjectLikeTopic(topic)\n )\n .map((topic) => materializeTopicProjectOverlay(topic, options.idMode));\n}\n\nexport async function patchTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n value: Record<string, unknown>\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n\n const nextMetadata = { ...readMetadata(topic) };\n const patch: Record<string, unknown> = {};\n const topicUpdateArgs: Record<string, unknown> = {\n id: String(topic._id),\n };\n\n for (const [key, rawValue] of Object.entries(value)) {\n switch (key) {\n case \"_id\":\n case \"projectId\":\n case \"topicId\":\n case \"legacyProjectId\":\n case \"storageProjectId\":\n break;\n case \"name\":\n case \"description\":\n patch[key] = rawValue;\n topicUpdateArgs[key] = rawValue;\n break;\n case \"tenantId\":\n case \"workspaceId\":\n case \"ownerId\":\n throw new Error(\n `patchTopicProjectOverlay cannot mutate ${key} via component-owned topics`\n );\n case \"status\": {\n const status = coerceStatus(rawValue);\n if (status) {\n patch.status = status;\n topicUpdateArgs.status = status;\n }\n break;\n }\n case \"visibility\": {\n const visibility = coerceVisibility(rawValue);\n if (visibility) {\n patch.visibility = visibility;\n topicUpdateArgs.visibility = visibility;\n }\n break;\n }\n case \"type\": {\n const projectType = readNonEmptyString(rawValue);\n if (projectType) {\n nextMetadata.projectType = projectType;\n } else {\n delete nextMetadata.projectType;\n }\n break;\n }\n case \"updatedAt\":\n case \"createdAt\":\n break;\n default:\n if (rawValue === undefined) {\n delete nextMetadata[key];\n } else {\n nextMetadata[key] = rawValue;\n }\n }\n }\n\n patch.updatedAt = Date.now();\n patch.metadata = nextMetadata;\n topicUpdateArgs.metadata = nextMetadata;\n\n if (typeof ctx.runMutation === \"function\") {\n try {\n await ctx.runMutation(api.topics.update as any, topicUpdateArgs);\n } catch (error) {\n if (\n !isMissingLucernChildComponentError(error) ||\n !ctx?.db ||\n typeof ctx.db.patch !== \"function\"\n ) {\n throw error;\n }\n await ctx.db.patch(String(topic._id) as any, patch);\n }\n } else if (ctx?.db && typeof ctx.db.patch === \"function\") {\n await ctx.db.patch(String(topic._id) as any, patch);\n } else {\n throw new Error(\n \"Cannot patch topic without component adapter (ctx.runMutation unavailable)\"\n );\n }\n\n return materializeTopicProjectOverlay(\n {\n ...topic,\n ...patch,\n metadata: nextMetadata,\n } as TopicDocLike\n );\n}\n\nexport function matchesTopicProjectOverlayAccess(\n accessibleProjectIds: Set<string>,\n project: { topicId: string; legacyProjectId?: string; storageProjectId?: string }\n): boolean {\n return (\n accessibleProjectIds.has(project.storageProjectId || project.topicId) ||\n accessibleProjectIds.has(project.topicId) ||\n (typeof project.legacyProjectId === \"string\" &&\n accessibleProjectIds.has(project.legacyProjectId))\n );\n}\n","/** Data-source resolver wiring for the graph-primitives module. */\nimport {\n listTopicProjectOverlays,\n patchTopicProjectOverlay,\n resolveTopicProjectOverlay,\n} from \"./topicProjectOverlay\";\nimport type {\n GraphPrimitivesAppResolverContext,\n GraphPrimitivesAppResolvers,\n} from \"./resolverTypes\";\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n return (\n message.includes('Child component ComponentName(Identifier(\"lucern\")) not found') ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction isAdvisoryTopicPatch(value: Record<string, unknown>): boolean {\n const advisoryKeys = new Set([\"lastActivityAt\", \"updatedAt\"]);\n const keys = Object.keys(value);\n return keys.length > 0 && keys.every((key) => advisoryKeys.has(key));\n}\n\nasync function patchProjectWithTolerance(\n ctx: GraphPrimitivesAppResolverContext,\n projectId: string,\n value: Record<string, unknown>\n): Promise<void> {\n try {\n await patchTopicProjectOverlay(ctx, projectId, value);\n } catch (error) {\n if (\n !isAdvisoryTopicPatch(value) ||\n !isMissingLucernChildComponentError(error)\n ) {\n throw error;\n }\n\n console.warn(\"[lucern graph-primitives] Non-fatal advisory topic patch failure\", {\n projectId,\n keys: Object.keys(value),\n error: error instanceof Error ? error.message : error,\n });\n }\n}\n\nfunction defaultResolvers(): GraphPrimitivesAppResolvers {\n return {\n async getProject(ctx, projectId) {\n return await resolveTopicProjectOverlay(ctx, projectId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n });\n },\n async patchProject(ctx, projectId, value) {\n await patchProjectWithTolerance(ctx, projectId, value);\n },\n async listTopics(ctx) {\n return await listTopicProjectOverlays(ctx, {\n idMode: \"legacy\",\n });\n },\n async getFinalArtifact(ctx, artifactId) {\n return await ctx.db.get(artifactId);\n },\n };\n}\n\nlet resolverOverrides: Partial<GraphPrimitivesAppResolvers> = {};\n\nexport function configureGraphPrimitivesAppResolvers(\n overrides: Partial<GraphPrimitivesAppResolvers>\n): void {\n resolverOverrides = {\n ...resolverOverrides,\n ...overrides,\n };\n}\n\nexport function resetGraphPrimitivesAppResolvers(): void {\n resolverOverrides = {};\n}\n\nexport function resolveGraphPrimitivesAppResolvers(\n _ctx: GraphPrimitivesAppResolverContext\n): GraphPrimitivesAppResolvers {\n return {\n ...defaultResolvers(),\n ...resolverOverrides,\n };\n}\n","/**\n * Epistemic Beliefs API\n *\n * Clean API for managing beliefs in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces beliefs.ts.\n *\n * Key differences from beliefs.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no runtime ID translation fallback)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { v } from \"convex/values\";\nimport {\n detectTupleContradiction,\n evaluateTupleContradictionTransition,\n confidenceFromSL,\n normalizeTupleContradictionPolicy,\n readOpinionFromRecord,\n type ConfidencePolicyConfig,\n type Opinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport {\n checkProjectAccess,\n checkScopeAccess,\n} from \"@lucern/access-control/access\";\nimport {\n canAudienceClassAccess,\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { listAudienceRegistryRows } from \"@lucern/access-control/audienceRegistry\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { assertSchemaEnumValue } from \"@lucern/schema-management/enumValidation\";\nimport { permissiveReturn } from \"@lucern/schema-management/validators\";\nimport {\n type BeliefLifecycleStatus,\n isPreValidationBeliefStatus,\n promoteBeliefStatusAfterScoring,\n resolveBeliefLifecycleStatus,\n} from \"./beliefLifecycle\";\nimport type { Doc, Id, MutationCtx } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport { collectConfidencePropagationDispatches } from \"./confidencePropagationDispatch\";\nimport {\n createInheritedContractRecord,\n type VerificationConfidenceTrigger,\n} from \"./epistemicContractHelpers\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { generateGlobalId } from \"./globalId\";\nimport { computeLogicalRole } from \"./logicalRoleInference\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n nodeMatchesWorkspaceReasoningScope,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\n// All IDs now use epistemicNodes exclusively\nconst insightIdUnion = v.id(\"epistemicNodes\");\nconst DEFAULT_PROJECT_BELIEF_LIMIT = 250;\nconst MAX_PROJECT_BELIEF_LIMIT = 1000;\nconst optionalBeliefScopeArgs = optionalScopeArgs;\n\ntype StructuredMutationError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype BeliefScopeArgs = {\n projectId?: string | null;\n topicId?: string | null;\n};\n\ntype AudienceClass = \"internal\" | \"restricted_external\" | \"public\";\n\nconst DEFAULT_CONFIDENCE_POLICY: ConfidencePolicyConfig = {\n scoringMode: \"after_worktree\",\n tupleContradiction: normalizeTupleContradictionPolicy(),\n};\n\nexport type BeliefConfidenceTrigger =\n | \"initial\"\n | \"evidence_added\"\n | \"evidence_removed\"\n | \"contradiction_detected\"\n | \"contradiction_resolved\"\n | \"manual\"\n | \"decay\"\n | \"agent_assessment\"\n | \"worktree_outcome\"\n | \"worktree_completed\"\n // SL-specific triggers\n | \"fusion\"\n | \"discount\"\n | \"deduction\"\n | \"backfill_synthetic\"\n | VerificationConfidenceTrigger;\n\nfunction throwStructuredMutationError(args: {\n message: string;\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredMutationError;\n error.status = args.status;\n error.code = args.code;\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nfunction readFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nfunction assertBaseRateInRange(baseRate: number, field = \"baseRate\"): number {\n if (baseRate < 0 || baseRate > 1) {\n throwStructuredMutationError({\n message: `${field} must be within [0, 1].`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Clamp ${field} into the inclusive [0, 1] interval.`,\n details: { field, baseRate },\n });\n }\n return baseRate;\n}\n\nfunction buildBeliefConfidenceRow(args: {\n beliefId: Id<\"epistemicNodes\">;\n belief: number;\n disbelief: number;\n uncertainty: number;\n baseRate: number;\n trigger: BeliefConfidenceTrigger;\n rationale?: string;\n assessedBy: string;\n assessedAt: number;\n slOperator?: SLOperator;\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringContradictionId?: Id<\"contradictions\">;\n triggeringWorktreeId?: string;\n}) {\n return {\n beliefId: args.beliefId,\n confidence: confidenceFromSL(\n args.belief,\n args.disbelief,\n args.uncertainty,\n args.baseRate\n ),\n belief: args.belief,\n disbelief: args.disbelief,\n uncertainty: args.uncertainty,\n baseRate: args.baseRate,\n slOperator: args.slOperator ?? (\"manual_assessment\" as const),\n trigger: args.trigger,\n ...(args.rationale ? { rationale: args.rationale } : {}),\n assessedBy: args.assessedBy,\n assessedAt: args.assessedAt,\n ...(args.triggeringEvidenceId\n ? {\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringEvidenceIds: [String(args.triggeringEvidenceId)],\n }\n : {}),\n ...(args.triggeringContradictionId\n ? {\n triggeringContradictionId: args.triggeringContradictionId,\n }\n : {}),\n ...(args.triggeringWorktreeId\n ? { triggeringWorktreeId: args.triggeringWorktreeId }\n : {}),\n };\n}\n\nfunction deriveSyntheticBackfillOpinion(\n source: Record<string, unknown>\n): { b: number; d: number; u: number; a: number } {\n const belief = readFiniteNumber(source.opinion_b) ?? readFiniteNumber(source.belief);\n const disbelief =\n readFiniteNumber(source.opinion_d) ?? readFiniteNumber(source.disbelief);\n const uncertainty =\n readFiniteNumber(source.opinion_u) ?? readFiniteNumber(source.uncertainty);\n const baseRate =\n readFiniteNumber(source.opinion_a) ?? readFiniteNumber(source.baseRate);\n\n if (\n belief !== undefined ||\n disbelief !== undefined ||\n uncertainty !== undefined ||\n baseRate !== undefined\n ) {\n return readOpinionFromRecord(source, {\n b: 0,\n d: 0,\n u: 1,\n a: 0.5,\n });\n }\n\n const confidence = clamp01(readFiniteNumber(source.confidence) ?? 0);\n return {\n b: confidence,\n d: 1 - confidence,\n u: 0,\n a: 0.5,\n };\n}\n\nfunction clampBeliefLimit(\n limit: number | undefined,\n fallback = DEFAULT_PROJECT_BELIEF_LIMIT\n): number {\n if (!Number.isFinite(limit)) {\n return fallback;\n }\n return Math.max(\n 1,\n Math.min(Math.floor(limit as number), MAX_PROJECT_BELIEF_LIMIT)\n );\n}\n\nfunction readTupleContradictedFlag(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction readBeliefOpinionSnapshot(\n node: Doc<\"epistemicNodes\">,\n metadata: Record<string, unknown>\n): Opinion {\n return readOpinionFromRecord(\n {\n ...metadata,\n opinion_b: (node as any).opinion_b,\n opinion_d: (node as any).opinion_d,\n opinion_u: (node as any).opinion_u,\n opinion_a: (node as any).opinion_a,\n },\n { b: 0, d: 0, u: 1, a: 0.5 }\n );\n}\n\nfunction deriveTupleContradictionSeverity(\n node: Doc<\"epistemicNodes\">\n): \"critical\" | \"significant\" | \"minor\" {\n const metadata = (node.metadata || {}) as Record<string, unknown>;\n const criticality = typeof metadata.criticality === \"string\"\n ? metadata.criticality\n : undefined;\n\n if (criticality === \"blocking\") {\n return \"critical\";\n }\n if (criticality === \"supporting\") {\n return \"minor\";\n }\n return \"significant\";\n}\n\nfunction formatTupleContradictionDescription(args: {\n opinion: Opinion;\n policy: ConfidencePolicyConfig[\"tupleContradiction\"];\n}): string {\n return `Tuple-space contradiction detected: b=${args.opinion.b.toFixed(2)} > ${args.policy.beliefThreshold.toFixed(2)} and d=${args.opinion.d.toFixed(2)} > ${args.policy.disbeliefThreshold.toFixed(2)}.`;\n}\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction generateContentHash(text: string): string {\n const content = `belief:${text.trim().toLowerCase().replace(/\\s+/g, \" \")}`;\n let hash = 5381;\n for (let i = 0; i < content.length; i++) {\n hash = (hash << 5) + hash + content.charCodeAt(i);\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\nexport function resolveBeliefWorktreeId(\n metadata: Record<string, unknown> | undefined\n): string | undefined {\n const worktreeId = metadata?.worktreeId;\n if (typeof worktreeId === \"string\" && worktreeId.trim().length > 0) {\n return worktreeId;\n }\n\n const sprintId = metadata?.sprintId;\n return typeof sprintId === \"string\" && sprintId.trim().length > 0\n ? sprintId\n : undefined;\n}\n\n// Map pillar names to valid pillar literals\ntype ValidPillar =\n | \"market\"\n | \"competition\"\n | \"product\"\n | \"team\"\n | \"financials\"\n | \"regulatory\"\n | \"timing\"\n | \"customer\"\n | \"technology\"\n | \"distribution\"\n | \"deal\"\n | \"risks\"\n | \"other\";\n\nfunction normalizePillar(pillar?: string): ValidPillar {\n if (!pillar) {\n return \"other\";\n }\n const lower = pillar.toLowerCase();\n const validPillars: ValidPillar[] = [\n \"market\",\n \"competition\",\n \"product\",\n \"team\",\n \"financials\",\n \"regulatory\",\n \"timing\",\n \"customer\",\n \"technology\",\n \"distribution\",\n \"deal\",\n \"risks\",\n ];\n return (validPillars.find((p) => lower.includes(p)) ||\n \"other\") as ValidPillar;\n}\n\nasync function markBeliefGraphDirty(\n ctx: any,\n scope: { projectId?: string | null; topicId?: string | null }\n): Promise<void> {\n const projectId =\n typeof scope.projectId === \"string\" && scope.projectId.trim().length > 0\n ? scope.projectId\n : undefined;\n const topicId =\n typeof scope.topicId === \"string\" && scope.topicId.trim().length > 0\n ? scope.topicId\n : undefined;\n\n if (!projectId && !topicId) {\n return;\n }\n\n if (projectId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n { projectId }\n );\n }\n if (topicId) {\n await ctx.scheduler.runAfter(\n 0,\n (internal.graphAnalysisCache as any).markCacheStaleByTopic,\n { topicId }\n );\n }\n\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n topicId ?? projectId!,\n {\n lastActivityAt: Date.now(),\n }\n );\n}\n\nasync function resolveBeliefScopeOrNull(\n ctx: any,\n args: BeliefScopeArgs\n) {\n if (!args.projectId && !args.topicId) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n projectId: args.projectId ?? undefined,\n topicId: args.topicId ?? undefined,\n });\n } catch {\n return null;\n }\n}\n\nasync function getBeliefNodesForScope(\n ctx: {\n db: {\n query: (...args: any[]) => {\n withIndex: (...args: any[]) => any;\n };\n };\n },\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n args?: { scanLimit?: number; status?: string }\n) {\n const baseQuery = ctx.db.query(\"epistemicNodes\").withIndex(\n scope.topicId ? \"by_topic_type\" : \"by_project_type\",\n (q: any) =>\n scope.topicId\n ? q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n : q.eq(\"projectId\", scope.projectId).eq(\"nodeType\", \"belief\")\n );\n const nodes =\n typeof args?.scanLimit === \"number\"\n ? await baseQuery.order(\"desc\").take(args.scanLimit)\n : await baseQuery.collect();\n const scopedNodes = nodes.filter((node: Doc<\"epistemicNodes\">) =>\n nodeMatchesWorkspaceReasoningScope(node, scope)\n );\n\n if (!args?.status) {\n return scopedNodes;\n }\n\n return scopedNodes.filter((node) => node.status === args.status);\n}\n\nfunction createBeliefAudienceResolver(\n registryRows: Array<{\n audienceKey?: string | null;\n audienceClass: AudienceClass;\n }>\n) {\n const audienceClassByKey = new Map<string, AudienceClass>(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ])\n );\n\n return (\n audienceKey: string | undefined | null,\n fallback: AudienceClass\n ): AudienceClass => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return (\n audienceClassByKey.get(key) ??\n (classFromAudienceKey(key, fallback) as AudienceClass)\n );\n };\n}\n\nexport function flattenBeliefNode(node: Doc<\"epistemicNodes\">) {\n const meta = (node.metadata || {}) as Record<string, unknown>;\n const worktreeId = resolveBeliefWorktreeId(meta);\n const tupleContradicted =\n readTupleContradictedFlag((node as any).tupleContradicted) ??\n readTupleContradictedFlag(meta.tupleContradicted) ??\n false;\n\n return {\n _id: node._id,\n _epistemicNodeId: node._id,\n _creationTime: node._creationTime,\n belief: node.canonicalText,\n formulation: node.canonicalText,\n projectId: node.projectId,\n topicId: node.topicId,\n userId: (node as any).userId || node.createdBy || \"\",\n confidence: (meta.confidence as \"high\" | \"medium\" | \"low\") || \"untested\",\n status: node.status,\n beliefStatus: resolveBeliefStatus(node, meta),\n topic: (meta.topic as string) || (meta.pillar as string) || \"other\",\n pillar: (meta.pillar as string) || (meta.topic as string) || \"\",\n category: (meta.category as string) || \"\",\n subcategory: (meta.subcategory as string) || \"\",\n categoryIcon: (meta.categoryIcon as string) || \"\",\n supportingEvidence: (meta.supportingEvidenceIds as string[]) || [],\n contradictingEvidence: (meta.contradictingEvidenceIds as string[]) || [],\n testingQuestions: (meta.testingQuestionIds as string[]) || [],\n linkedInsights: (meta.linkedInsightIds as string[]) || [],\n createdAt: node.createdAt,\n updatedAt: node.updatedAt || node.createdAt,\n tupleContradicted,\n sprintId: (meta.sprintId as string) || undefined,\n worktreeId,\n sourceBeliefIds: (meta.sourceBeliefIds as string[]) || undefined,\n criticality:\n (meta.criticality as\n | \"critical\"\n | \"supporting\"\n | \"nice_to_have\"\n | \"unanalyzed\"\n | \"blocking\"\n | \"important\") || \"unanalyzed\",\n rationale: (meta.rationale as string) || \"\",\n audienceLabel: node.audienceLabel,\n policyTags: node.policyTags,\n sensitivityTier: node.sensitivityTier,\n exportClass: node.exportClass,\n anonymizationClass: node.anonymizationClass,\n };\n}\n\nfunction resolveBeliefStatus(\n node: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n },\n metadata: Record<string, unknown>\n): BeliefLifecycleStatus {\n return resolveBeliefLifecycleStatus({\n beliefStatus: node.beliefStatus,\n confidence: node.confidence,\n predictionMeta: node.predictionMeta,\n metadata,\n });\n}\n\nasync function hasCompletedWorktreeForBelief(\n ctx: { db: any },\n beliefNodeId: Id<\"epistemicNodes\">,\n): Promise<boolean> {\n // Check if the belief is linked to a completed worktree via worktreeBeliefCluster\n const clusterMembership = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_belief\", (q: any) => q.eq(\"beliefId\", beliefNodeId))\n .collect();\n for (const membership of clusterMembership) {\n const worktree = await ctx.db.get(membership.worktreeId);\n if (worktree?.status === \"completed\" || worktree?.status === \"merged\") {\n return true;\n }\n }\n return false;\n}\n\nasync function getActiveConfidencePolicy(\n ctx: { db: any },\n): Promise<ConfidencePolicyConfig> {\n try {\n const activeConfig = await ctx.db\n .query(\"logicSprintScoring\")\n .withIndex(\"by_active\", (q: any) => q.eq(\"isActive\", true))\n .first();\n\n return {\n scoringMode:\n activeConfig?.confidencePolicy === \"always\"\n ? \"always\"\n : DEFAULT_CONFIDENCE_POLICY.scoringMode,\n tupleContradiction: normalizeTupleContradictionPolicy(\n activeConfig?.tupleContradictionPolicy as\n | Partial<ConfidencePolicyConfig[\"tupleContradiction\"]>\n | undefined\n ),\n };\n } catch {\n // K-tier/component environments do not carry logicSprintScoring.\n return DEFAULT_CONFIDENCE_POLICY;\n }\n}\n\nexport async function applyBeliefConfidenceChange(\n ctx: MutationCtx,\n args: {\n nodeId: Id<\"epistemicNodes\">;\n // SL opinion — the ONLY confidence input (EK-7)\n belief: number; // b: evidence FOR [0,1]\n disbelief: number; // d: evidence AGAINST [0,1]\n uncertainty: number; // u: lack of evidence [0,1]\n baseRate?: number; // a: prior probability [0,1], defaults to 0.5\n trigger: BeliefConfidenceTrigger;\n rationale?: string;\n authenticatedUserId: string;\n slOperator?: SLOperator; // which SL operator produced this opinion\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringWorktreeId?: string;\n }\n): Promise<{\n nodeId: Id<\"epistemicNodes\">;\n previousConfidence: number;\n newConfidence: number;\n opinion: { b: number; d: number; u: number; a: number };\n beliefConfidenceId: Id<\"beliefConfidence\">;\n}> {\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node) {\n throwStructuredMutationError({\n message: \"Node not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion:\n \"Verify nodeId points to an existing node before modulating confidence.\",\n details: { nodeId: args.nodeId },\n });\n }\n if (node.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `modulateConfidence only applies to belief nodes. Received nodeType \"${node.nodeType}\". Entity nodes (company, person, investor, etc.) do not have confidence — use entityLifecycle.updateEntityAttributes for mutable entity data.`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"entity.no_confidence\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes for entity mutations. modulateConfidence is for belief nodes only.\",\n details: { nodeId: args.nodeId, nodeType: node.nodeType },\n });\n }\n if (!node.projectId) {\n throwStructuredMutationError({\n message: \"Belief has no project scope.\",\n status: 400,\n code: \"MISSING_SCOPE\",\n invariantCode: \"belief.project_required\",\n suggestion: \"Belief must have a projectId to modulate confidence.\",\n details: { nodeId: args.nodeId },\n });\n }\n await requireProjectWriteAccess(ctx, node.projectId, args.authenticatedUserId);\n\n const existingMetadata = (node.metadata || {}) as Record<string, unknown>;\n const currentBeliefStatus = resolveBeliefStatus(node, existingMetadata);\n const confidencePolicy = await getActiveConfidencePolicy(ctx);\n if (\n confidencePolicy.scoringMode === \"after_worktree\" &&\n isPreValidationBeliefStatus(currentBeliefStatus)\n ) {\n const hasCompletedWorktree = await hasCompletedWorktreeForBelief(\n ctx,\n args.nodeId,\n );\n if (!hasCompletedWorktree) {\n throwStructuredMutationError({\n message:\n \"Cannot score belief before worktree completion. Complete a worktree that tests this belief first.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"belief.confidence_append_only\",\n suggestion:\n \"Complete a worktree linked to this belief before recording confidence modulation.\",\n details: { nodeId: args.nodeId },\n });\n }\n }\n\n const previousConfidence = node.confidence || 0.5;\n const predictionMeta =\n (node as any).predictionMeta || existingMetadata.predictionMeta;\n const previousOpinion = readBeliefOpinionSnapshot(node, existingMetadata);\n\n // SL opinion — the only path (EK-7)\n const slB = args.belief;\n const slD = args.disbelief;\n const slU = args.uncertainty;\n const slA = args.baseRate ?? 0.5;\n const nextOpinion = { b: slB, d: slD, u: slU, a: slA };\n const derivedConfidence = confidenceFromSL(slB, slD, slU, slA);\n const isFirstScoring =\n typeof node.confidence !== \"number\" || !Number.isFinite(node.confidence);\n const previousTupleContradicted =\n readTupleContradictedFlag((node as any).tupleContradicted) ??\n readTupleContradictedFlag(existingMetadata.tupleContradicted) ??\n detectTupleContradiction(\n previousOpinion,\n confidencePolicy.tupleContradiction.beliefThreshold,\n confidencePolicy.tupleContradiction.disbeliefThreshold\n );\n const tupleTransition = evaluateTupleContradictionTransition({\n previousTupleContradicted,\n opinion: nextOpinion,\n policy: confidencePolicy.tupleContradiction,\n });\n const tupleContradictionDescription = formatTupleContradictionDescription({\n opinion: nextOpinion,\n policy: tupleTransition.policy,\n });\n\n const newBeliefStatus = promoteBeliefStatusAfterScoring(\n currentBeliefStatus,\n {\n confidence: derivedConfidence,\n predictionMeta,\n metadata: existingMetadata,\n }\n );\n\n let tupleContradictionId: Id<\"contradictions\"> | undefined;\n if (tupleTransition.crossedIntoTupleContradiction) {\n tupleContradictionId = (await ctx.runMutation(\"contradictions:create\" as any, {\n projectId: node.projectId,\n topicId: node.topicId as any,\n beliefId: args.nodeId,\n beliefBId: args.nodeId,\n supportingInsightIds: [],\n contradictingInsightIds: [],\n severity: deriveTupleContradictionSeverity(node),\n source: \"tuple_space\",\n detectionMethod: \"agent\",\n description: tupleContradictionDescription,\n createdBy: args.authenticatedUserId,\n })) as Id<\"contradictions\">;\n }\n\n await ctx.db.patch(args.nodeId, {\n confidence: derivedConfidence,\n beliefStatus: newBeliefStatus,\n tupleContradicted: tupleTransition.tupleContradicted,\n updatedAt: now,\n // Store SL opinion fields at node level for fast access\n opinion_b: slB,\n opinion_d: slD,\n opinion_u: slU,\n opinion_a: slA,\n metadata: {\n ...existingMetadata,\n beliefStatus: newBeliefStatus,\n slBelief: slB,\n slDisbelief: slD,\n slUncertainty: slU,\n slBaseRate: slA,\n tupleContradicted: tupleTransition.tupleContradicted,\n },\n } as any);\n\n if (isFirstScoring) {\n const nodeTopicId = node.topicId;\n const themeNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic\", (q: any) =>\n q.eq(\"topicId\", nodeTopicId || node.projectId))\n .filter((q) => q.eq(q.field(\"nodeType\"), \"theme\"))\n .collect();\n\n for (const theme of themeNodes) {\n if (theme.globalId && node.globalId) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: `edge-${node.globalId}-relates_to_thesis-${theme.globalId}`,\n fromGlobalId: node.globalId,\n toGlobalId: theme.globalId,\n edgeType: \"relates_to_thesis\",\n weight: derivedConfidence,\n createdBy: args.authenticatedUserId,\n topicId: String(node.projectId),\n fromNodeType: \"belief\",\n toNodeType: \"theme\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n }\n }\n }\n\n const storedRationale =\n args.rationale ??\n `Confidence changed from ${previousConfidence.toFixed(2)} (nodeId: ${args.nodeId})`;\n\n const beliefConfidenceId = (await ctx.db.insert(\"beliefConfidence\", {\n ...buildBeliefConfidenceRow({\n beliefId: args.nodeId as Id<\"epistemicNodes\">,\n belief: slB,\n disbelief: slD,\n uncertainty: slU,\n baseRate: slA,\n trigger: args.trigger,\n rationale: storedRationale,\n assessedBy: args.authenticatedUserId,\n assessedAt: now,\n slOperator: args.slOperator,\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringContradictionId: tupleContradictionId,\n triggeringWorktreeId: args.triggeringWorktreeId,\n }),\n } as any)) as Id<\"beliefConfidence\">;\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"confidence_changed\",\n previousState: {\n confidence: previousConfidence,\n tupleContradicted: previousTupleContradicted,\n },\n newState: {\n opinion: nextOpinion,\n confidence: derivedConfidence,\n trigger: args.trigger,\n rationale: storedRationale,\n tupleContradicted: tupleTransition.tupleContradicted,\n tupleContradictionPolicy: tupleTransition.policy,\n ...(tupleContradictionId\n ? { tupleContradictionId: String(tupleContradictionId) }\n : {}),\n },\n changedBy: args.authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n topicId: node.topicId,\n });\n\n if (\n tupleTransition.crossedIntoTupleContradiction ||\n tupleTransition.crossedOutOfTupleContradiction\n ) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n previousState: { tupleContradicted: previousTupleContradicted },\n newState: {\n tupleContradicted: tupleTransition.tupleContradicted,\n action: tupleTransition.crossedIntoTupleContradiction\n ? \"tuple_contradiction_detected\"\n : \"tuple_contradiction_cleared\",\n opinion: nextOpinion,\n tupleContradictionPolicy: tupleTransition.policy,\n ...(tupleContradictionId\n ? { tupleContradictionId: String(tupleContradictionId) }\n : {}),\n },\n rationale: tupleTransition.crossedIntoTupleContradiction\n ? tupleContradictionDescription\n : `Tuple-space contradiction cleared: b=${nextOpinion.b.toFixed(2)}, d=${nextOpinion.d.toFixed(2)} no longer exceed the configured policy thresholds.`,\n changedBy: args.authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n topicId: node.topicId,\n });\n }\n\n if (Math.abs(derivedConfidence - previousConfidence) >= 0.15) {\n await ctx.scheduler.runAfter(\n 5000,\n internal.bi.contradictionSemanticDetector.scanAffectedBeliefs,\n {\n beliefId: args.nodeId as string,\n projectId: node.projectId,\n }\n );\n }\n\n // WT-4: Re-evaluate publication rules after confidence changes.\n // Publication is visibility-based: rules auto-determine which workspace\n // nodes are exposed at tenant scope based on confidence thresholds, etc.\n if (node.workspaceId && node.tenantId) {\n await ctx.scheduler.runAfter(\n 0,\n (internal as any).publication.evaluateNodePublication,\n { nodeId: args.nodeId }\n );\n }\n\n return {\n nodeId: args.nodeId,\n previousConfidence,\n newConfidence: derivedConfidence,\n opinion: { b: slB, d: slD, u: slU, a: slA },\n beliefConfidenceId,\n };\n}\n\nfunction propagationTriggerForEdge(\n edgeType: string,\n weight: number\n): BeliefConfidenceTrigger {\n if (edgeType === \"contradicts\" || edgeType === \"refutes\") {\n return \"contradiction_detected\";\n }\n\n if ((edgeType === \"supports\" || edgeType === \"informs\") && weight < 0) {\n return \"contradiction_detected\";\n }\n\n return \"evidence_added\";\n}\n\n// =============================================================================\n// SL PROPAGATION — EDGE-DEFINED OPINION PROPAGATION (EK-7, LKC-5)\n// =============================================================================\n\n/**\n * Propagate a confidence change through graph edges whose specs allow it.\n *\n * After a belief is scored, this function:\n * 1. Reads the graph-primitives edge propagation specs\n * 2. Traverses matching incoming/outgoing/bidirectional edges hop by hop\n * 3. Applies the edge operator with per-hop damping and hop limits\n * 4. Writes propagated opinions as new beliefConfidence entries\n */\nexport const propagateConfidenceChange = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n opinion_b: v.number(),\n opinion_d: v.number(),\n opinion_u: v.number(),\n opinion_a: v.number(),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const sourceOpinion = {\n b: args.opinion_b,\n d: args.opinion_d,\n u: args.opinion_u,\n a: args.opinion_a,\n };\n\n const sourceNode = await ctx.db.get(args.nodeId);\n const sourceScope = await resolveNodeScopeForWorkspaceIsolation(\n ctx,\n sourceNode\n );\n const dispatches = await collectConfidencePropagationDispatches({\n sourceNodeId: args.nodeId,\n sourceOpinion,\n sourceScope,\n queryEdges: async ({ nodeId, spec, direction }) => {\n return await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\n direction === \"outgoing\" ? \"by_from_type\" : \"by_to_type\",\n (q: any) =>\n direction === \"outgoing\"\n ? q.eq(\"fromNodeId\", nodeId).eq(\"edgeType\", spec.edgeType)\n : q.eq(\"toNodeId\", nodeId).eq(\"edgeType\", spec.edgeType)\n )\n .collect();\n },\n getNode: async (nodeId) => await ctx.db.get(nodeId),\n });\n\n for (const dispatch of dispatches) {\n await applyBeliefConfidenceChange(ctx, {\n nodeId: dispatch.targetNodeId,\n belief: dispatch.opinion.b,\n disbelief: dispatch.opinion.d,\n uncertainty: dispatch.opinion.u,\n baseRate: dispatch.opinion.a,\n trigger: propagationTriggerForEdge(dispatch.edgeType, dispatch.weight),\n rationale: `SL propagation via ${dispatch.edgeType} edge: ${dispatch.rationale}`,\n authenticatedUserId: args.userId,\n slOperator: dispatch.operator as SLOperator,\n });\n }\n\n return {\n propagated: dispatches.map((dispatch) => ({\n targetNodeId: String(dispatch.targetNodeId),\n edgeType: dispatch.edgeType,\n operator: dispatch.operator,\n })),\n count: dispatches.length,\n };\n },\n});\n\nasync function requireAuthenticatedUserId(ctx: {\n auth: { getUserIdentity: () => Promise<unknown> };\n}): Promise<string> {\n const userId = await getCurrentUserId(ctx as any);\n if (!userId) {\n throwStructuredMutationError({\n message: \"Authentication required.\",\n status: 401,\n code: \"AUTHENTICATION_REQUIRED\",\n invariantCode: \"auth.required\",\n suggestion:\n \"Provide a valid bearer token before invoking belief mutations.\",\n });\n }\n return userId;\n}\n\nasync function requireProjectWriteAccess(\n ctx: { db: unknown },\n projectId: string,\n userId: string\n): Promise<void> {\n const hasAccess = await checkProjectAccess(ctx as any, projectId, userId);\n if (!hasAccess) {\n throwStructuredMutationError({\n message: \"Project access required.\",\n status: 403,\n code: \"FORBIDDEN\",\n invariantCode: \"policy.scope_required\",\n suggestion: \"Request write access for the project and retry.\",\n details: { projectId, userId },\n });\n }\n}\n\n// =============================================================================\n// CREATE\n// =============================================================================\n\n/**\n * Create a new belief in the epistemic spine.\n * Returns the epistemicNodes ID directly (not a beliefs ID).\n */\nexport const create = mutation({\n args: {\n ...optionalBeliefScopeArgs,\n formulation: v.string(),\n beliefType: v.optional(v.string()),\n rationale: v.optional(v.string()),\n confidence: v.optional(\n v.union(\n v.literal(\"untested\"),\n v.literal(\"high\"),\n v.literal(\"medium\"),\n v.literal(\"low\")\n )\n ),\n pillar: v.optional(v.string()),\n worktreeId: v.optional(v.string()),\n sourceType: v.optional(\n v.union(\n v.literal(\"human\"),\n v.literal(\"ai_extracted\"),\n v.literal(\"ai_generated\")\n )\n ),\n userId: v.string(),\n // === CLASSIFICATION FIELDS ===\n reversibility: v.optional(\n v.union(\n v.literal(\"irreversible\"),\n v.literal(\"hard_to_reverse\"),\n v.literal(\"reversible\"),\n v.literal(\"trivial\")\n )\n ),\n predictionMeta: v.optional(\n v.object({\n isPrediction: v.boolean(),\n registeredAt: v.number(),\n expectedBy: v.optional(v.number()),\n })\n ),\n baseRate: v.number(),\n metadata: v.optional(v.any()), // Additional metadata including isConditional\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"belief\",\n mutationName: \"epistemicBeliefs.create\",\n });\n const topic = await ctx.db.get(scope.topicId);\n const normalizedBeliefType = await assertSchemaEnumValue(ctx, {\n category: \"belief_type\",\n value: args.beliefType,\n tenantId: topic?.tenantId,\n context: \"epistemicBeliefs.create\",\n });\n if (scope.projectId) {\n await requireProjectWriteAccess(\n ctx,\n scope.projectId,\n authenticatedUserId\n );\n }\n const now = Date.now();\n const baseRate = assertBaseRateInRange(args.baseRate);\n const initialBeliefStatus = args.worktreeId ? \"hypothesis\" : \"assumption\";\n const initialEpistemicStatus = args.worktreeId ? \"hypothesis\" : \"assumption\";\n const seedOpinion = {\n opinion_b: 0,\n opinion_d: 0,\n opinion_u: 1,\n opinion_a: baseRate,\n };\n const pillar = normalizePillar(args.pillar);\n\n // Merge additional metadata with standard metadata\n const additionalMeta = (args.metadata as Record<string, unknown>) || {};\n\n // Create the epistemic node\n const beliefGlobalId = generateGlobalId();\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId: beliefGlobalId,\n nodeType: \"belief\",\n epistemicLayer: \"L3\",\n canonicalText: args.formulation,\n contentHash: generateContentHash(args.formulation),\n content: args.rationale,\n title:\n args.formulation.slice(0, 100) +\n (args.formulation.length > 100 ? \"...\" : \"\"),\n metadata: {\n pillar,\n // No confidenceLevel — only set after worktree completion via modulateConfidence()\n status: \"active\",\n worktreeId: args.worktreeId,\n beliefStatus: initialBeliefStatus,\n epistemicStatus: initialEpistemicStatus,\n tupleContradicted: false,\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n ...additionalMeta, // Includes isConditional if provided\n },\n beliefStatus: initialBeliefStatus as any,\n ...seedOpinion,\n tupleContradicted: false,\n // Classification fields\n reversibility: args.reversibility ?? \"reversible\",\n predictionMeta: args.predictionMeta,\n // Infer epistemicStatus based on context\n epistemicStatus: initialEpistemicStatus as any,\n sourceType: args.sourceType || \"human\",\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n confidence: undefined, // No scalar confidence until worktree completion\n verificationStatus: \"unverified\",\n status: \"active\",\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n createdBy: authenticatedUserId,\n createdAt: now,\n updatedAt: now,\n });\n\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: nodeId,\n belief: seedOpinion.opinion_b,\n disbelief: seedOpinion.opinion_d,\n uncertainty: seedOpinion.opinion_u,\n baseRate,\n trigger: \"initial\",\n rationale:\n \"LKC-2 mandatory prior: seeded vacuous opinion at belief creation.\",\n assessedBy: authenticatedUserId,\n assessedAt: now,\n slOperator: \"manual_assessment\",\n }) as any\n );\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Schedule embedding generation\n await scheduleEmbeddingGeneration({\n ctx, nodeId, projectId: scope.projectId, topicId: scope.topicId,\n createdBy: authenticatedUserId, nodeType: \"belief\", text: args.formulation,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: null,\n newState: {\n formulation: args.formulation,\n status: \"active\",\n baseRate: seedOpinion.opinion_a,\n tupleContradicted: false,\n opinion: {\n b: seedOpinion.opinion_b,\n d: seedOpinion.opinion_d,\n u: seedOpinion.opinion_u,\n a: seedOpinion.opinion_a,\n },\n },\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n // Schedule embedding generation for semantic search\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n createdBy: authenticatedUserId,\n nodeType: \"belief\" as const,\n text: args.rationale\n ? `${args.formulation}\\n\\nRationale: ${args.rationale}`\n : args.formulation,\n // Don't pass confidence — \"untested\" is a string, but the\n // embedding action expects v.optional(v.number()). New beliefs\n // have no numeric confidence until scoring.\n }\n );\n }\n\n // ==========================================================================\n // GRAPH TOPOLOGY - SPRINT IS THE EPISTEMIC BOUNDARY\n // ==========================================================================\n //\n // The SPRINT connects beliefs to the theme, not belief creation.\n //\n // Flow:\n // 1. ASSUMPTION beliefs: Raw inputs, float disconnected from theme\n // 2. HYPOTHESIS (in sprint): Being tested, still no theme edge\n // 3. SCORED (sprint complete): NOW gets belongs_to edge to theme\n // - Edge weight = conviction level (high conviction = shorter edge)\n //\n // The belongs_to edge is created ONLY when:\n // - Sprint completes → belief becomes \"scored\" → create theme edge\n // - See: sprints.ts completeSprint mutation\n //\n // Other nodes NEVER connect directly to theme:\n // - Questions → test → Beliefs (not theme)\n // - Evidence → answer/inform → Questions/Beliefs (not theme)\n //\n // NO THEME EDGE CREATED HERE - HAPPENS IN SPRINT COMPLETION\n // ==========================================================================\n\n // ==========================================================================\n // ONTOLOGY: Schedule belief classification for entity extraction\n // ==========================================================================\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 2000, // 2 second delay\n internal.nodeClassification.scheduleClassification,\n {\n nodeId,\n nodeType: \"belief\",\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n // ==========================================================================\n // PILLAR: Auto-categorize uncategorized beliefs into canonical pillars\n // ==========================================================================\n if (pillar === \"other\" && (scope.projectId || scope.topicId)) {\n await ctx.scheduler.runAfter(\n 2500,\n \"beliefCategorization:autoCategorizeBelief\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n // ==========================================================================\n // TEMPORAL: Schedule LLM temporal classification (factual vs forecast)\n // Automatically determines if this is a prediction, extracts measure dates\n // and conditions. Users never need to tag beliefs manually.\n // ==========================================================================\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 3000, // 3 second delay — after entity extraction\n internal.beliefTemporalClassifier.classifyBelief,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n // ==========================================================================\n // CACHE: Invalidate graph analysis cache\n // ==========================================================================\n await markBeliefGraphDirty(ctx, {\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n return { nodeId };\n },\n});\n\n// =============================================================================\n// GET BY ID\n// =============================================================================\n\n/**\n * Get a belief by its epistemicNodes ID.\n */\nexport const getById = query({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n beliefId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const id = (args.nodeId ?? args.beliefId) as\n | Id<\"epistemicNodes\">\n | undefined;\n if (!id) {\n return null;\n }\n const node = await ctx.db.get(id);\n if (!node || node.nodeType !== \"belief\") {\n return null;\n }\n return node;\n },\n});\n\n// =============================================================================\n// REFINE BELIEF\n// =============================================================================\n\n/**\n * Refine an unscored belief in place.\n *\n * Lucern Invariant #1 + #2: Draft beliefs may be refined in place, but scored\n * beliefs are immutable and must be evolved through forkBelief().\n */\nexport const refineBelief = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n canonicalText: v.optional(v.string()),\n title: v.optional(v.string()),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node) {\n throwStructuredMutationError({\n message: \"Belief not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion: \"Verify nodeId points to an existing belief before refining.\",\n details: { nodeId: args.nodeId },\n });\n }\n if (node.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `refineBelief only applies to belief nodes. Received nodeType \"${node.nodeType}\".`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"entity.no_refine\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes for entity mutations.\",\n details: { nodeId: args.nodeId, nodeType: node.nodeType },\n });\n }\n if (!node.projectId) {\n throwStructuredMutationError({\n message: \"Belief has no project scope.\",\n status: 400,\n code: \"MISSING_SCOPE\",\n invariantCode: \"belief.project_required\",\n suggestion: \"Belief must have a projectId to refine.\",\n details: { nodeId: args.nodeId },\n });\n }\n\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n if (\n typeof node.confidence === \"number\" &&\n Number.isFinite(node.confidence)\n ) {\n throwStructuredMutationError({\n message:\n \"Scored beliefs are immutable. Use forkBelief to evolve a scored belief.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"belief.versioning.scored_immutable\",\n suggestion:\n \"Use forkBelief() to create a new version instead of refining in place.\",\n details: { nodeId: args.nodeId, confidence: node.confidence },\n });\n }\n\n const nextText =\n typeof args.canonicalText === \"string\" && args.canonicalText.trim().length > 0\n ? args.canonicalText.trim()\n : undefined;\n const nextTitle =\n typeof args.title === \"string\" && args.title.trim().length > 0\n ? args.title.trim()\n : undefined;\n\n const patch: Record<string, unknown> = { updatedAt: now };\n if (nextText !== undefined) {\n patch.canonicalText = nextText;\n patch.title =\n nextTitle ??\n nextText.slice(0, 100) +\n (nextText.length > 100 ? \"...\" : \"\");\n patch.contentHash = generateContentHash(nextText);\n } else if (nextTitle !== undefined) {\n patch.title = nextTitle;\n }\n if (args.rationale !== undefined) {\n patch.content = args.rationale;\n }\n\n await ctx.db.patch(args.nodeId, patch);\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n if (nextText !== undefined) {\n await scheduleEmbeddingGeneration({\n ctx,\n nodeId: args.nodeId,\n projectId: node.projectId,\n topicId: node.topicId,\n createdBy: authenticatedUserId,\n nodeType: \"belief\",\n text: args.rationale\n ? `${nextText}\\n\\nRationale: ${args.rationale}`\n : nextText,\n });\n }\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n canonicalText: node.canonicalText,\n title: node.title,\n content: node.content,\n },\n newState: {\n canonicalText:\n (patch.canonicalText as string | undefined) ?? node.canonicalText,\n title: (patch.title as string | undefined) ?? node.title,\n content: (patch.content as string | undefined) ?? node.content,\n action: \"refined\",\n rationale: args.rationale,\n },\n projectId: node.projectId,\n topicId: node.topicId,\n });\n\n await markBeliefGraphDirty(ctx, {\n projectId: node.projectId,\n topicId: node.topicId,\n });\n\n return { nodeId: args.nodeId };\n },\n});\n\n// =============================================================================\n// GET BY PROJECT\n// =============================================================================\n\n/**\n * Get all beliefs for a project.\n */\nexport const getByProject = query({\n args: {\n ...optionalBeliefScopeArgs,\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId && !args.topicId) {\n return [];\n }\n\n const pageSize = clampBeliefLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n let scope:\n | Awaited<ReturnType<typeof resolveTopicProjectScope>>\n | { tenantId: undefined; workspaceId: undefined; topicId?: undefined; projectId?: undefined };\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch {\n return [];\n }\n\n if (args.userId) {\n const scopeId = scope.topicId ? String(scope.topicId) : scope.projectId;\n if (!scopeId) {\n return [];\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n }\n\n const query = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\n scope.topicId ? \"by_topic_type\" : \"by_project_type\",\n (q) =>\n scope.topicId\n ? q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n : q.eq(\"projectId\", scope.projectId).eq(\"nodeType\", \"belief\")\n );\n\n const nodes = await query.order(\"desc\").take(scanLimit);\n const scopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, scope)\n );\n\n // Filter by status if provided\n if (args.status) {\n return scopedNodes\n .filter((n) => n.status === args.status)\n .slice(0, pageSize);\n }\n\n // Default: return active beliefs\n return scopedNodes.filter((n) => n.status === \"active\").slice(0, pageSize);\n },\n});\n\n/**\n * Get all beliefs for a topic.\n */\nexport const getByTopic = query({\n args: {\n topicId: v.string(),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampBeliefLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const scope = await resolveTopicProjectScope(ctx, { topicId: args.topicId });\n const query = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n );\n\n const nodes = await query.order(\"desc\").take(scanLimit);\n const scopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n })\n );\n if (args.status) {\n return scopedNodes\n .filter((n) => n.status === args.status)\n .slice(0, pageSize);\n }\n return scopedNodes.filter((n) => n.status === \"active\").slice(0, pageSize);\n },\n});\n\n// =============================================================================\n// FORK BELIEF\n// =============================================================================\n\n/**\n * Fork a belief - create a new version while preserving the original.\n * This is the Lucern-compliant way to \"update\" a belief.\n *\n * Lucern Invariant #1: Beliefs are append-only. Never modify formulation.\n * Lucern Invariant #3: Lineage is permanent.\n */\nexport const forkBelief = mutation({\n args: {\n parentNodeId: v.id(\"epistemicNodes\"),\n newFormulation: v.string(),\n forkReason: v.union(\n v.literal(\"refinement\"),\n v.literal(\"contradiction_response\"),\n v.literal(\"scope_change\"),\n v.literal(\"confidence_collapse\"),\n v.literal(\"manual\")\n ),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n const _confidencePolicy = await getActiveConfidencePolicy(ctx);\n\n // Get the parent belief\n const parent = await ctx.db.get(args.parentNodeId);\n if (!parent) {\n throwStructuredMutationError({\n message: \"Parent node not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion:\n \"Verify parentNodeId points to an existing node before forking.\",\n details: { parentNodeId: args.parentNodeId },\n });\n }\n if (parent.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `forkBelief only applies to belief nodes. Received nodeType \"${parent.nodeType}\". Entity nodes (company, person, investor, etc.) are mutable — use entityLifecycle.updateEntityAttributes instead of forking.`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"entity.no_fork\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes for entity mutations. forkBelief is for belief nodes only.\",\n details: { parentNodeId: args.parentNodeId, nodeType: parent.nodeType },\n });\n }\n if (!parent.projectId) {\n throwStructuredMutationError({\n message: \"Parent belief has no project scope.\",\n status: 400,\n code: \"MISSING_SCOPE\",\n invariantCode: \"belief.project_required\",\n suggestion: \"Belief must have a projectId to fork.\",\n details: { parentNodeId: args.parentNodeId },\n });\n }\n await requireProjectWriteAccess(ctx, parent.projectId, authenticatedUserId);\n\n const metadata = parent.metadata as Record<string, unknown> | undefined;\n const forkBeliefStatus: BeliefLifecycleStatus = \"hypothesis\";\n\n // Create the new forked belief\n const newBeliefGlobalId = generateGlobalId();\n const newNodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId: newBeliefGlobalId,\n nodeType: \"belief\",\n epistemicLayer: \"L3\",\n canonicalText: args.newFormulation,\n contentHash: generateContentHash(args.newFormulation),\n content: args.rationale || parent.content,\n title:\n args.newFormulation.slice(0, 100) +\n (args.newFormulation.length > 100 ? \"...\" : \"\"),\n metadata: {\n ...metadata,\n forkedFrom: args.parentNodeId,\n forkReason: args.forkReason,\n forkTimestamp: now,\n forkedBy: authenticatedUserId,\n status: \"active\",\n beliefStatus: forkBeliefStatus,\n tupleContradicted: false,\n },\n beliefStatus: forkBeliefStatus as any,\n sourceType: parent.sourceType,\n confidence: undefined,\n tupleContradicted: false,\n verificationStatus: \"unverified\",\n status: \"active\",\n projectId: parent.projectId,\n topicId: parent.topicId,\n createdBy: authenticatedUserId,\n createdAt: now,\n updatedAt: now,\n });\n\n const inheritedContracts = (await (ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q: any) =>\n q.eq(\"beliefNodeId\", args.parentNodeId)\n )\n .collect()) as Array<Record<string, unknown> & { status?: string }>;\n\n for (const contract of inheritedContracts) {\n if (contract.status === \"archived\") {\n continue;\n }\n await (ctx.db as any).insert(\n \"epistemicContracts\",\n createInheritedContractRecord(contract as any, {\n beliefNodeId: newNodeId,\n topicId: parent.topicId,\n createdBy: authenticatedUserId,\n now,\n }) as any\n );\n }\n\n // Schedule Neo4j node sync FIRST — the new node must exist in Neo4j\n // before the supersedes edge can be created (MATCH clause requirement).\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: newNodeId,\n operation: \"upsert\",\n });\n\n // Create supersedes edge with delay to let node sync complete first.\n await ctx.scheduler.runAfter(5000, internal.neo4jEdgeAPI.createEdge, {\n globalId: generateGlobalId(),\n fromGlobalId: newBeliefGlobalId,\n toGlobalId: parent.globalId,\n edgeType: \"supersedes\",\n context: `Fork reason: ${args.forkReason}`,\n createdBy: authenticatedUserId,\n topicId: parent.projectId ? String(parent.projectId) : undefined,\n fromNodeType: \"belief\",\n toNodeType: \"belief\",\n });\n\n // Schedule embedding generation for forked belief\n await scheduleEmbeddingGeneration({\n ctx, nodeId: newNodeId, projectId: parent.projectId, topicId: parent.topicId,\n createdBy: authenticatedUserId, nodeType: \"belief\", text: args.newFormulation,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: newNodeId,\n changeType: \"forked\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n parentNodeId: args.parentNodeId,\n formulation: parent.canonicalText,\n },\n newState: {\n formulation: args.newFormulation,\n forkReason: args.forkReason,\n tupleContradicted: false,\n },\n projectId: parent.projectId,\n topicId: parent.topicId,\n });\n\n // Temporal classification — forked beliefs get fresh classification\n // since the formulation may have changed temporal nature\n if (parent.projectId || parent.topicId) {\n const inheritedPillar = normalizePillar(\n String(metadata?.pillar || metadata?.topic || \"\")\n );\n if (inheritedPillar === \"other\") {\n await ctx.scheduler.runAfter(\n 2500,\n \"beliefCategorization:autoCategorizeBelief\" as any,\n {\n nodeId: newNodeId,\n projectId: parent.projectId,\n topicId: parent.topicId,\n }\n );\n }\n\n await ctx.scheduler.runAfter(\n 3000,\n internal.beliefTemporalClassifier.classifyBelief,\n {\n nodeId: newNodeId,\n projectId: parent.projectId,\n topicId: parent.topicId,\n }\n );\n }\n\n await markBeliefGraphDirty(ctx, {\n projectId: parent.projectId,\n topicId: parent.topicId,\n });\n\n return { newNodeId, parentNodeId: args.parentNodeId };\n },\n});\n\n// =============================================================================\n// MODULATE CONFIDENCE\n// =============================================================================\n\n/**\n * Modulate a belief's confidence.\n *\n * Lucern Invariant #2: Confidence changes are append-only (tracked in beliefConfidence table).\n */\nexport const modulateConfidence = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n // SL opinion — the ONLY confidence input (EK-7)\n belief: v.number(), // b: evidence FOR [0,1]\n disbelief: v.number(), // d: evidence AGAINST [0,1]\n uncertainty: v.number(), // u: lack of evidence [0,1]\n baseRate: v.optional(v.number()), // a: prior probability [0,1], defaults to 0.5\n trigger: v.union(\n v.literal(\"evidence_added\"),\n v.literal(\"evidence_removed\"),\n v.literal(\"contradiction_detected\"),\n v.literal(\"contradiction_resolved\"),\n v.literal(\"manual\"),\n v.literal(\"decay\"),\n v.literal(\"agent_assessment\"),\n v.literal(\"worktree_outcome\"),\n v.literal(\"worktree_completed\"),\n // SL-specific triggers\n v.literal(\"fusion\"),\n v.literal(\"discount\"),\n v.literal(\"deduction\"),\n v.literal(\"backfill_synthetic\")\n ),\n rationale: v.optional(v.string()),\n userId: v.string(),\n // SL operator provenance (optional — defaults to manual_assessment)\n slOperator: v.optional(v.union(\n v.literal(\"cumulative_fusion\"),\n v.literal(\"averaging_fusion\"),\n v.literal(\"trust_discount\"),\n v.literal(\"conditional_deduction\"),\n v.literal(\"dependency_cascade\"),\n v.literal(\"negation\"),\n v.literal(\"constraint_fusion\"),\n v.literal(\"manual_assessment\")\n )),\n triggeringEvidenceId: v.optional(v.id(\"epistemicNodes\")),\n triggeringWorktreeId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const result = await applyBeliefConfidenceChange(ctx, {\n nodeId: args.nodeId,\n belief: args.belief,\n disbelief: args.disbelief,\n uncertainty: args.uncertainty,\n baseRate: args.baseRate,\n trigger: args.trigger,\n rationale: args.rationale,\n authenticatedUserId,\n slOperator: args.slOperator as SLOperator | undefined,\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringWorktreeId: args.triggeringWorktreeId,\n });\n\n // Schedule edge-defined SL propagation through graph edges (EK-7, LKC-5)\n // Only propagate if confidence actually changed (avoid noise)\n if (Math.abs(result.newConfidence - result.previousConfidence) >= 0.01) {\n await ctx.scheduler.runAfter(\n 0,\n internal.epistemicBeliefs.propagateConfidenceChange,\n {\n nodeId: args.nodeId,\n opinion_b: args.belief,\n opinion_d: args.disbelief,\n opinion_u: args.uncertainty,\n opinion_a: args.baseRate ?? 0.5,\n userId: authenticatedUserId,\n }\n );\n }\n\n return {\n nodeId: result.nodeId,\n previousConfidence: result.previousConfidence,\n newConfidence: result.newConfidence,\n opinion: result.opinion,\n };\n },\n});\n\n// Two-axis model (valence/certainty) — REMOVED in EK-7.\n// All callers must use modulateConfidence with SL opinion (b, d, u, a).\n\n// =============================================================================\n// UPDATE STATUS\n// =============================================================================\n\n/**\n * Update a belief's status.\n */\nexport const updateStatus = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n ),\n reason: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const previousStatus = node.status;\n\n // Update the node's status and metadata in a single atomic patch\n const metadata = (node.metadata as Record<string, unknown>) || {};\n await ctx.db.patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n metadata: {\n ...metadata,\n status: args.status,\n },\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n previousState: { status: previousStatus },\n newState: { status: args.status, reason: args.reason },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return { nodeId: args.nodeId, previousStatus, newStatus: args.status };\n },\n});\n\n// =============================================================================\n// ARCHIVE\n// =============================================================================\n\n/**\n * Archive a belief (soft delete).\n * Lucern invariant: Beliefs are never deleted, only archived.\n */\nexport const archive = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n reason: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n return await ctx.runMutation(\n // Use updateStatus internally\n internal.epistemicBeliefs.updateStatusInternal,\n {\n nodeId: args.nodeId,\n status: \"archived\",\n reason: args.reason,\n userId: authenticatedUserId,\n }\n );\n },\n});\n\n// =============================================================================\n// UPDATE RATIONALE\n// =============================================================================\n\n/**\n * Update a belief rationale without changing formulation.\n * Formulation mutability rules are unchanged (use fork/refine paths for wording).\n */\nexport const updateRationale = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const metadata = (node.metadata as Record<string, unknown>) || {};\n const previousRationale =\n typeof metadata.rationale === \"string\" ? metadata.rationale : undefined;\n const nextRationale = args.rationale?.trim();\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n rationale:\n nextRationale && nextRationale.length > 0 ? nextRationale : undefined,\n },\n updatedAt: now,\n });\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n previousState: { rationale: previousRationale },\n newState: {\n rationale:\n nextRationale && nextRationale.length > 0 ? nextRationale : undefined,\n },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return {\n nodeId: args.nodeId,\n previousRationale,\n newRationale: nextRationale,\n };\n },\n});\n\n// Internal version for use by other mutations\nexport const updateStatusInternal = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n ),\n reason: v.optional(v.string()),\n userId: v.string(),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: await resolveNodeScopeForWorkspaceIsolation(ctx, node),\n mutationName: \"epistemicBeliefs.updateStatusInternal\",\n });\n\n const previousStatus = node.status;\n\n await ctx.db.patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n previousState: { status: previousStatus },\n newState: { status: args.status, reason: args.reason },\n changedBy: args.userId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return { nodeId: args.nodeId, previousStatus, newStatus: args.status };\n },\n});\n\n// =============================================================================\n// GET CONFIDENCE HISTORY\n// =============================================================================\n\n/**\n * Get the confidence history for a belief.\n */\nexport const getConfidenceHistory = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n return [];\n }\n\n return await ctx.db\n .query(\"beliefConfidence\")\n .withIndex(\"by_beliefId_time\", (q) =>\n q.eq(\"beliefId\", args.nodeId)\n )\n .order(\"asc\")\n .collect();\n },\n});\n\n// =============================================================================\n// GET BELIEF LINEAGE\n// =============================================================================\n\n/**\n * Get the lineage of a belief (all forks and parents).\n */\nexport const getLineage = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const lineage: Array<{\n nodeId: Id<\"epistemicNodes\">;\n formulation: string;\n forkReason?: string;\n createdAt: number;\n }> = [];\n\n let currentId: Id<\"epistemicNodes\"> | null = args.nodeId;\n\n while (currentId) {\n const node = await ctx.db.get(currentId);\n if (!node || node.nodeType !== \"belief\") {\n break;\n }\n\n const metadata = node.metadata as Record<string, unknown> | undefined;\n\n lineage.push({\n nodeId: node._id,\n formulation: node.canonicalText,\n forkReason: metadata?.forkReason as string | undefined,\n createdAt: node.createdAt,\n });\n\n // Find parent via supersedes edge\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_type\", (q) =>\n q.eq(\"fromNodeId\", currentId!).eq(\"edgeType\", \"supersedes\")\n )\n .collect();\n\n if (edges.length > 0) {\n currentId = edges[0].toNodeId ?? null;\n } else {\n // Check metadata for forkedFrom (backfilled beliefs)\n currentId = metadata?.forkedFrom as Id<\"epistemicNodes\"> | null;\n }\n }\n\n return lineage;\n },\n});\n\n// =============================================================================\n// GET BELIEFS BY IDS\n// =============================================================================\n\n/**\n * Get multiple beliefs by their IDs.\n */\nexport const getByIds = query({\n args: {\n nodeIds: v.array(v.id(\"epistemicNodes\")),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const beliefs = await Promise.all(args.nodeIds.map((id) => ctx.db.get(id)));\n return beliefs.filter((b) => b !== null && b.nodeType === \"belief\");\n },\n});\n\n// =============================================================================\n// GET BY SPRINT\n// =============================================================================\n\n/**\n * Get all beliefs associated with a worktree via worktreeBeliefCluster.\n */\nexport const getByWorktree = query({\n args: {\n worktreeId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const worktree = await ctx.db.get(args.worktreeId as Id<\"worktrees\">);\n if (!worktree) {\n return [];\n }\n\n const clusterLinks = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_worktree\", (q: any) => q.eq(\"worktreeId\", args.worktreeId))\n .collect();\n\n const beliefs: Array<Doc<\"epistemicNodes\">> = [];\n for (const link of clusterLinks) {\n const node = await ctx.db.get(link.beliefId);\n if (node) beliefs.push(node);\n }\n return beliefs;\n },\n});\n\n// =============================================================================\n// UPDATE PILLAR\n// =============================================================================\n\n/**\n * Update a belief's pillar/topic categorization.\n * Uses canonical epistemicNodes IDs.\n */\nexport const updatePillar = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n pillar: v.union(\n v.literal(\"market\"),\n v.literal(\"competition\"),\n v.literal(\"product\"),\n v.literal(\"team\"),\n v.literal(\"financials\"),\n v.literal(\"regulatory\"),\n v.literal(\"timing\"),\n v.literal(\"customer\"),\n v.literal(\"technology\"),\n v.literal(\"distribution\"),\n v.literal(\"deal\"),\n v.literal(\"risks\"),\n v.literal(\"other\")\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const existingNode = await ctx.db.get(args.nodeId);\n if (!existingNode || existingNode.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!existingNode.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(\n ctx,\n existingNode.projectId,\n authenticatedUserId\n );\n\n // Update the epistemicNode (canonical source of truth)\n let previousPillar: unknown = null;\n const metadata = (existingNode.metadata as Record<string, unknown>) || {};\n previousPillar = metadata.pillar;\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n pillar: args.pillar,\n topic: args.pillar,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n // Audit log - Lucern Invariant #14: no silent state transitions\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId as string,\n changeType: \"pillar_changed\",\n projectId: existingNode.projectId,\n changedBy: authenticatedUserId,\n changedAt: now,\n isAgent: false,\n previousState: { pillar: previousPillar },\n newState: { pillar: args.pillar },\n });\n\n return {\n nodeId: args.nodeId,\n previousPillar,\n newPillar: args.pillar,\n };\n },\n});\n\n// =============================================================================\n// COUNT BY STATUS\n// =============================================================================\n\n/**\n * Get counts of beliefs by status for a project.\n */\nexport const getCountByStatus = query({\n args: {\n ...optionalBeliefScopeArgs,\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const nodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\n args.topicId ? \"by_topic_type\" : \"by_project_type\",\n (q: any) =>\n args.topicId\n ? q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n : q.eq(\"projectId\", args.projectId).eq(\"nodeType\", \"belief\")\n )\n .collect();\n\n const counts = {\n active: 0,\n superseded: 0,\n archived: 0,\n total: nodes.length,\n };\n\n for (const node of nodes) {\n if (node.status === \"active\") {\n counts.active++;\n } else if (node.status === \"superseded\") {\n counts.superseded++;\n } else if (node.status === \"archived\") {\n counts.archived++;\n }\n }\n\n return counts;\n },\n});\n\n// =============================================================================\n// LINK BELIEFS (Direct epistemicNodes → epistemicNodes)\n// =============================================================================\n\n/**\n * Create an edge between two beliefs in the epistemic spine.\n * This works with epistemicNodes IDs directly (no legacy lookup needed).\n */\nexport const linkBeliefs = mutation({\n args: {\n fromNodeId: v.id(\"epistemicNodes\"),\n toNodeId: v.id(\"epistemicNodes\"),\n edgeType: v.union(\n // Basic belief relationships\n v.literal(\"supersedes\"),\n v.literal(\"depends_on\"),\n v.literal(\"supports\"),\n v.literal(\"contains\"),\n v.literal(\"informs\"),\n v.literal(\"derived_from\"),\n v.literal(\"tests\")\n ),\n weight: v.optional(v.number()), // -1 to 1\n context: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const fromNode = await ctx.db.get(args.fromNodeId);\n const toNode = await ctx.db.get(args.toNodeId);\n\n if (!fromNode || !toNode) {\n throw new Error(\"One or both belief nodes not found\");\n }\n\n if (fromNode.nodeType !== \"belief\" || toNode.nodeType !== \"belief\") {\n throw new Error(\"Both nodes must be beliefs\");\n }\n if (fromNode.projectId !== toNode.projectId) {\n throw new Error(\"Cannot link beliefs across different projects\");\n }\n if (!fromNode.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(\n ctx,\n fromNode.projectId,\n authenticatedUserId\n );\n\n const now = Date.now();\n\n // Create edge directly in Neo4j (MERGE handles duplicates)\n const edgeGlobalId = generateGlobalId();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: fromNode.globalId,\n toGlobalId: toNode.globalId,\n edgeType: args.edgeType,\n weight: args.weight ?? 1.0,\n context: args.context,\n createdBy: authenticatedUserId,\n topicId: fromNode.projectId ? String(fromNode.projectId) : undefined,\n fromNodeType: \"belief\",\n toNodeType: \"belief\",\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edgeGlobalId as unknown as Id<\"epistemicNodes\">,\n changeType: \"created\",\n previousState: null,\n newState: {\n fromNodeId: args.fromNodeId,\n toNodeId: args.toNodeId,\n edgeType: args.edgeType,\n },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: fromNode.projectId,\n });\n\n return { edgeGlobalId, created: true };\n },\n});\n\n// =============================================================================\n// LINK EVIDENCE (Insight) to Belief\n// =============================================================================\n\n/**\n * Link an insight (evidence) to a belief.\n * Creates an edge from evidence → belief with appropriate type.\n */\nexport const linkEvidence = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n insightId: insightIdUnion,\n type: v.union(v.literal(\"supporting\"), v.literal(\"contradicting\")),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const _now = Date.now();\n\n // Verify the belief exists\n const belief = await ctx.db.get(args.beliefNodeId);\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!belief.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, belief.projectId, authenticatedUserId);\n\n // Verify the insight exists\n const insight = await ctx.db.get(args.insightId);\n if (!insight || insight.nodeType !== \"evidence\") {\n throw new Error(\"Insight not found\");\n }\n if (\n \"projectId\" in insight &&\n insight.projectId &&\n insight.projectId !== belief.projectId\n ) {\n throw new Error(\"Insight belongs to a different project\");\n }\n\n const evidenceNodeId = insight._id;\n const evidenceGlobalId = insight.globalId;\n\n // Determine edge type based on supporting/contradicting\n const edgeType = \"informs\"; // Both use informs, weight determines support/contradict\n const weight = args.type === \"supporting\" ? 1.0 : -1.0;\n\n // Compute logicalRole from graph structure\n const logicalRole = evidenceNodeId\n ? await computeLogicalRole(ctx, evidenceNodeId, args.beliefNodeId)\n : \"contributory\";\n\n // Create the edge directly in Neo4j (MERGE handles duplicates)\n const edgeGlobalId = generateGlobalId();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: evidenceGlobalId,\n toGlobalId: belief.globalId,\n edgeType,\n weight,\n context: args.rationale || `${args.type} evidence`,\n createdBy: authenticatedUserId,\n topicId: belief.projectId ? String(belief.projectId) : undefined,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n // Classification fields\n logicalRole,\n temporalClass: \"structural\", // Default - most evidence is long-lived\n });\n\n return { edgeGlobalId, evidenceNodeId, created: true };\n },\n});\n\n// =============================================================================\n// UNLINK EVIDENCE from Belief\n// =============================================================================\n\n/**\n * Remove the link between an insight and a belief.\n */\nexport const unlinkEvidence = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n insightId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const evidenceNode = await ctx.db.get(args.insightId);\n if (!evidenceNode || evidenceNode.nodeType !== \"evidence\") {\n return { success: false, message: \"Evidence node not found\" };\n }\n if (!evidenceNode.projectId) {\n throw new Error(\"Evidence has no project scope\");\n }\n await requireProjectWriteAccess(\n ctx,\n evidenceNode.projectId,\n authenticatedUserId\n );\n const beliefNode = await ctx.db.get(args.beliefNodeId);\n if (!beliefNode || beliefNode.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (beliefNode.projectId !== evidenceNode.projectId) {\n throw new Error(\"Belief and evidence belong to different projects\");\n }\n\n // Find and delete the edge\n const edge = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", evidenceNode._id).eq(\"toNodeId\", args.beliefNodeId)\n )\n .first();\n\n if (edge) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edge.globalId,\n changeType: \"edge_removed\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n fromNodeId: evidenceNode._id,\n toNodeId: args.beliefNodeId,\n },\n newState: null,\n projectId: evidenceNode.projectId,\n });\n }\n\n return { success: true };\n },\n});\n\n// =============================================================================\n// GET BELIEF WITH EVIDENCE\n// =============================================================================\n\n/**\n * Get a belief along with all its linked evidence.\n */\nexport const getWithEvidence = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const belief = await ctx.db.get(args.nodeId);\n if (!belief || belief.nodeType !== \"belief\") {\n return null;\n }\n\n // Get all edges pointing TO this belief from evidence nodes\n const incomingEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", args.nodeId).eq(\"edgeType\", \"informs\")\n )\n .collect();\n\n // Get the evidence nodes\n const evidenceNodeIds = incomingEdges\n .filter((e) => e.fromNodeType === \"evidence\")\n .map((e) => e.fromNodeId);\n\n const evidenceNodes = await Promise.all(\n evidenceNodeIds.map((id) => ctx.db.get(id))\n );\n\n // Categorize by supporting vs contradicting (based on weight)\n const supporting: typeof evidenceNodes = [];\n const contradicting: typeof evidenceNodes = [];\n\n for (let i = 0; i < evidenceNodes.length; i++) {\n const node = evidenceNodes[i];\n const edge = incomingEdges[i];\n if (node) {\n if ((edge.weight || 0) >= 0) {\n supporting.push(node);\n } else {\n contradicting.push(node);\n }\n }\n }\n\n return {\n belief,\n evidence: {\n supporting,\n contradicting,\n total: supporting.length + contradicting.length,\n },\n };\n },\n});\n\n// =============================================================================\n// GET RELATIONSHIPS\n// =============================================================================\n\n/**\n * Get all relationships (edges) for a belief.\n */\nexport const getRelationships = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n direction: v.optional(\n v.union(v.literal(\"in\"), v.literal(\"out\"), v.literal(\"both\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const direction = args.direction || \"both\";\n const results: {\n incoming: Array<{ edge: unknown; node: unknown }>;\n outgoing: Array<{ edge: unknown; node: unknown }>;\n } = {\n incoming: [],\n outgoing: [],\n };\n\n if (direction === \"in\" || direction === \"both\") {\n // Get edges pointing TO this node\n const inEdges = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q) => q.eq(q.field(\"toNodeId\"), args.nodeId))\n .collect();\n\n for (const edge of inEdges) {\n const sourceNode = await ctx.db.get(edge.fromNodeId);\n results.incoming.push({ edge, node: sourceNode });\n }\n }\n\n if (direction === \"out\" || direction === \"both\") {\n // Get edges pointing FROM this node\n const outEdges = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q) => q.eq(q.field(\"fromNodeId\"), args.nodeId))\n .collect();\n\n for (const edge of outEdges) {\n const targetNode = edge.toNodeId\n ? await ctx.db.get(edge.toNodeId)\n : null;\n results.outgoing.push({ edge, node: targetNode });\n }\n }\n\n return results;\n },\n});\n\n// =============================================================================\n// DELETE RELATIONSHIP\n// =============================================================================\n\n/**\n * Delete a relationship (edge) between nodes.\n */\nexport const deleteRelationship = mutation({\n args: {\n edgeId: v.id(\"epistemicEdges\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const edge = await ctx.db.get(args.edgeId);\n if (!edge) {\n throw new Error(\"Edge not found\");\n }\n if (!edge.projectId) {\n throw new Error(\"Edge has no project scope\");\n }\n await requireProjectWriteAccess(ctx, edge.projectId, authenticatedUserId);\n\n // Store for audit\n const previousState = {\n fromNodeId: edge.fromNodeId,\n toNodeId: edge.toNodeId,\n edgeType: edge.edgeType,\n };\n\n // Delete via Neo4j authority path\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(args.edgeId);\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edge.globalId,\n changeType: \"edge_removed\",\n previousState,\n newState: null,\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: edge.projectId,\n });\n\n return { success: true };\n },\n});\n\n// =============================================================================\n// UPDATE CRITICALITY\n// =============================================================================\n\n/**\n * Update a belief's criticality level.\n */\nexport const updateCriticality = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n criticality: v.union(\n v.literal(\"blocking\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"essential\"),\n v.literal(\"nice_to_have\")\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const metadata = (node.metadata as Record<string, unknown>) || {};\n const previousCriticality = metadata.criticality;\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n criticality: args.criticality,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"criticality_changed\",\n previousState: { criticality: previousCriticality as string | undefined },\n newState: { criticality: args.criticality },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return {\n nodeId: args.nodeId,\n previousCriticality,\n newCriticality: args.criticality,\n };\n },\n});\n\n// =============================================================================\n// BATCH UPDATE CRITICALITY\n// =============================================================================\n\n/**\n * Batch update criticality for multiple beliefs.\n * Uses canonical epistemicNodes IDs.\n */\nexport const batchUpdateCriticality = mutation({\n args: {\n updates: v.array(\n v.object({\n beliefId: v.id(\"epistemicNodes\"),\n criticality: v.union(\n v.literal(\"blocking\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"essential\"),\n v.literal(\"nice_to_have\")\n ),\n ifFalseImpact: v.optional(v.string()),\n triagePriority: v.optional(v.number()),\n reasoning: v.optional(v.string()),\n dependentBeliefIds: v.optional(v.array(v.string())),\n blockedByBeliefIds: v.optional(v.array(v.string())),\n })\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n const results: Array<{\n beliefId: string;\n nodeId?: Id<\"epistemicNodes\">;\n success: boolean;\n }> = [];\n\n for (const update of args.updates) {\n try {\n const node = await ctx.db.get(update.beliefId);\n\n if (!node || node.nodeType !== \"belief\") {\n results.push({ beliefId: update.beliefId, success: false });\n continue;\n }\n if (!node.projectId) {\n results.push({ beliefId: update.beliefId, success: false });\n continue;\n }\n await requireProjectWriteAccess(\n ctx,\n node.projectId,\n authenticatedUserId\n );\n\n const metadata = (node.metadata as Record<string, unknown>) || {};\n const previousCriticality = metadata.criticality as string | undefined;\n\n await ctx.db.patch(node._id, {\n metadata: {\n ...metadata,\n criticality: update.criticality,\n ifFalseImpact: update.ifFalseImpact,\n triagePriority: update.triagePriority,\n criticalityReasoning: update.reasoning,\n dependentBeliefIds: update.dependentBeliefIds,\n blockedByBeliefIds: update.blockedByBeliefIds,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: node._id,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: node._id,\n changeType: \"criticality_changed\",\n previousState: { criticality: previousCriticality },\n newState: { criticality: update.criticality },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n results.push({\n beliefId: update.beliefId,\n nodeId: node._id,\n success: true,\n });\n } catch {\n results.push({ beliefId: update.beliefId, success: false });\n }\n }\n\n return { results, updatedCount: results.filter((r) => r.success).length };\n },\n});\n\n// =============================================================================\n// GET BY CRITICALITY\n// =============================================================================\n\n/**\n * Get beliefs by criticality level.\n */\nexport const getByCriticality = query({\n args: {\n ...optionalBeliefScopeArgs,\n criticality: v.union(\n v.literal(\"blocking\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"essential\"),\n v.literal(\"nice_to_have\")\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope);\n\n return nodes.filter((n) => {\n const metadata = n.metadata as Record<string, unknown> | undefined;\n return (\n metadata?.criticality === args.criticality && n.status === \"active\"\n );\n });\n },\n});\n\n// =============================================================================\n// GET UNANALYZED BELIEFS (for BI agents)\n// =============================================================================\n\n/**\n * Get beliefs that haven't been analyzed yet.\n * Used by BI agents for batch processing.\n */\nexport const getUnanalyzed = query({\n args: {\n ...optionalBeliefScopeArgs,\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = args.limit || 50;\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope);\n\n // Filter for unanalyzed beliefs (no criticality set, active status)\n const unanalyzed = nodes.filter((n) => {\n const metadata = n.metadata as Record<string, unknown> | undefined;\n return !metadata?.criticality && n.status === \"active\";\n });\n\n return unanalyzed.slice(0, limit);\n },\n});\n\n// =============================================================================\n// GET BY PROJECT (SYSTEM - no auth check)\n// =============================================================================\n\n/**\n * Get all beliefs for a project (system level - no auth check).\n * Used by BI agents and thesis audit agents.\n */\nexport const getByProjectSystem = query({\n args: {\n ...optionalBeliefScopeArgs,\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampBeliefLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope, { scanLimit });\n\n // Filter by status if provided\n if (args.status) {\n return nodes.filter((n) => n.status === args.status).slice(0, pageSize);\n }\n\n // Default: return active beliefs\n return nodes.filter((n) => n.status === \"active\").slice(0, pageSize);\n },\n});\n\n// =============================================================================\n// GET BY PILLAR\n// =============================================================================\n\n/**\n * Get beliefs filtered by pillar/topic.\n */\nexport const getByPillar = query({\n args: {\n ...optionalBeliefScopeArgs,\n pillar: v.union(\n v.literal(\"market\"),\n v.literal(\"competition\"),\n v.literal(\"product\"),\n v.literal(\"team\"),\n v.literal(\"financials\"),\n v.literal(\"regulatory\"),\n v.literal(\"timing\"),\n v.literal(\"customer\"),\n v.literal(\"technology\"),\n v.literal(\"distribution\"),\n v.literal(\"deal\"),\n v.literal(\"risks\"),\n v.literal(\"other\")\n ),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId && !args.topicId) {\n return [];\n }\n\n let scope:\n | Awaited<ReturnType<typeof resolveTopicProjectScope>>\n | {\n tenantId: undefined;\n workspaceId: undefined;\n topicId?: undefined;\n projectId?: undefined;\n };\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch {\n return [];\n }\n\n const nodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\n scope.topicId ? \"by_topic_type\" : \"by_project_type\",\n (q) =>\n scope.topicId\n ? q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n : q.eq(\"projectId\", scope.projectId).eq(\"nodeType\", \"belief\")\n )\n .collect();\n\n return nodes.filter((n) => {\n const metadata = n.metadata as Record<string, unknown> | undefined;\n const matchesPillar = metadata?.pillar === args.pillar;\n const matchesStatus = args.status\n ? n.status === args.status\n : n.status === \"active\";\n return matchesPillar && matchesStatus;\n });\n },\n});\n\n// =============================================================================\n// GET WORKTREE CLUSTER\n// =============================================================================\n\n/**\n * Get the belief cluster for a worktree.\n * Returns all beliefs linked to the worktree and their relationships.\n */\nexport const getWorktreeCluster = query({\n args: {\n worktreeId: v.string(),\n userId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const worktree = await ctx.db.get(args.worktreeId as Id<\"worktrees\">);\n if (!worktree) {\n return { beliefs: [], edges: [], beliefCount: 0 };\n }\n\n // Get all beliefs linked to this worktree\n const clusterLinks = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_worktree\", (q: any) => q.eq(\"worktreeId\", args.worktreeId))\n .collect();\n\n const beliefIds = new Set(clusterLinks.map((l: any) => String(l.beliefId)));\n const beliefs: Array<Doc<\"epistemicNodes\">> = [];\n for (const link of clusterLinks) {\n const node = await ctx.db.get(link.beliefId);\n if (node) beliefs.push(node);\n }\n\n // Get edges between cluster beliefs\n const clusterEdges: Array<{\n fromNodeId: string;\n toNodeId: string;\n edgeType: string;\n weight?: number;\n context?: string;\n }> = [];\n\n for (const beliefId of beliefIds) {\n const outEdges = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q: any) =>\n q.eq(q.field(\"fromNodeId\"), beliefId as Id<\"epistemicNodes\">)\n )\n .collect();\n\n for (const edge of outEdges) {\n if (beliefIds.has(String(edge.toNodeId))) {\n clusterEdges.push({\n fromNodeId: String(edge.fromNodeId),\n toNodeId: String(edge.toNodeId),\n edgeType: edge.edgeType,\n weight: edge.weight,\n context: edge.context,\n });\n }\n }\n }\n\n return {\n beliefs,\n edges: clusterEdges,\n beliefCount: beliefs.length,\n };\n },\n});\n\n// =============================================================================\n// INTERNAL QUERIES - For use by other Convex modules\n// =============================================================================\n// These queries are NOT exposed to the client API. They allow other Convex\n// functions (BI agents, intelligence, etc.) to read beliefs from epistemicNodes\n// without needing project access checks (internal use only).\n\n/**\n * Internal query to get beliefs for a project.\n * Returns epistemicNodes in legacy beliefs format for backward compatibility.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetByProject = internalQuery({\n args: {\n ...optionalBeliefScopeArgs,\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"validated\"),\n v.literal(\"invalidated\"),\n v.literal(\"archived\"),\n v.literal(\"superseded\")\n )\n ),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const pageSize = clampBeliefLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const audienceMode = args.audienceMode ?? \"internal\";\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n });\n const resolveAudienceClass = createBeliefAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const nodes = await getBeliefNodesForScope(ctx, scope, { scanLimit });\n\n // Filter by audience first, then status.\n let filtered = nodes.filter((node) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(node.audienceLabel, \"internal\")\n )\n );\n if (args.status) {\n filtered = filtered.filter((n) => n.status === args.status);\n }\n\n // Apply limit if provided\n filtered = filtered.slice(0, pageSize);\n\n // Map to legacy format\n return filtered.map(flattenBeliefNode);\n },\n});\n\n/**\n * Internal query to get beliefs for a topic.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetByTopic = internalQuery({\n args: {\n topicId: v.string(),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"validated\"),\n v.literal(\"invalidated\"),\n v.literal(\"archived\"),\n v.literal(\"superseded\")\n )\n ),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampBeliefLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const audienceMode = args.audienceMode ?? \"internal\";\n const scope = await resolveTopicProjectScope(ctx, { topicId: args.topicId });\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n });\n const resolveAudienceClass = createBeliefAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const query = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n );\n const nodes = await query.order(\"desc\").take(scanLimit);\n\n let filtered = nodes.filter((node) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(node.audienceLabel, \"internal\")\n )\n );\n if (args.status) {\n filtered = filtered.filter((n) => n.status === args.status);\n }\n filtered = filtered.slice(0, pageSize);\n\n return filtered.map(flattenBeliefNode);\n },\n});\n\n/**\n * Internal query to get active beliefs for a project.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetActive = internalQuery({\n args: {\n ...optionalBeliefScopeArgs,\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope, {\n status: \"active\",\n });\n\n // Apply limit if provided\n const limited = args.limit ? nodes.slice(0, args.limit) : nodes;\n\n return limited.map(flattenBeliefNode);\n },\n});\n\n/**\n * Internal query to get a single belief by ID.\n * Uses canonical epistemicNodes IDs.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetById = internalQuery({\n args: {\n beliefId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.beliefId as Id<\"epistemicNodes\">);\n\n if (!node || node.nodeType !== \"belief\") {\n return null;\n }\n\n // Map to legacy format\n return flattenBeliefNode(node);\n },\n});\n\n/**\n * Internal mutation to create a belief.\n * Creates ONLY in epistemicNodes (no dual-write).\n *\n * @internal Use by other Convex functions only\n */\nexport const internalCreate = internalMutation({\n args: {\n ...optionalBeliefScopeArgs,\n formulation: v.string(),\n baseRate: v.number(),\n confidence: v.optional(\n v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\"))\n ),\n userId: v.string(),\n rationale: v.optional(v.string()),\n topic: v.optional(v.string()),\n pillar: v.optional(v.string()),\n category: v.optional(v.string()),\n subcategory: v.optional(v.string()),\n categoryIcon: v.optional(v.string()),\n sprintId: v.optional(v.string()),\n sourceBeliefIds: v.optional(v.array(v.string())),\n criticality: v.optional(\n v.union(\n v.literal(\"blocking\"),\n v.literal(\"critical\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"nice_to_have\"),\n v.literal(\"unanalyzed\")\n )\n ),\n beliefType: v.optional(v.string()),\n /** Optional extra metadata fields merged into the node's metadata object.\n * Use for domain overlays like coding intelligence (codeAnchors, failedApproach, etc.) */\n extraMetadata: v.optional(v.any()),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n const baseRate = assertBaseRateInRange(args.baseRate);\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"belief\",\n mutationName: \"epistemicBeliefs.internalCreate\",\n });\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"belief\",\n epistemicLayer: \"L3\",\n },\n mutationName: \"epistemicBeliefs.internalCreate\",\n });\n const topic = await ctx.db.get(scope.topicId);\n const normalizedBeliefType = await assertSchemaEnumValue(ctx, {\n category: \"belief_type\",\n value: args.beliefType,\n tenantId: topic?.tenantId,\n context: \"epistemicBeliefs.internalCreate\",\n });\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.formulation);\n const requestedConfidence = args.confidence;\n const seedOpinion = {\n opinion_b: 0,\n opinion_d: 0,\n opinion_u: 1,\n opinion_a: baseRate,\n };\n\n // Create in epistemicNodes\n const nodeId = await (ctx.db as any).insert(\"epistemicNodes\", {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"belief\",\n canonicalText: args.formulation,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L3\", // L3: Traversal Anchors\n sourceType: args.userId.startsWith(\"agent:\") ? \"ai_generated\" : \"human\",\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n ...seedOpinion,\n tupleContradicted: false,\n metadata: {\n ...(requestedConfidence ? { confidence: requestedConfidence } : {}),\n tupleContradicted: false,\n rationale: args.rationale || \"\",\n topic: args.topic || args.pillar || \"\",\n pillar: args.pillar || args.topic || \"\",\n category: args.category || \"\",\n subcategory: args.subcategory || \"\",\n categoryIcon: args.categoryIcon || \"\",\n sprintId: args.sprintId,\n sourceBeliefIds: args.sourceBeliefIds || [],\n criticality: args.criticality || \"unanalyzed\",\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n supportingEvidenceIds: [],\n contradictingEvidenceIds: [],\n testingQuestionIds: [],\n linkedInsightIds: [],\n // Merge caller-provided metadata (e.g. codeAnchors for coding intelligence)\n ...(args.extraMetadata && typeof args.extraMetadata === \"object\"\n ? args.extraMetadata\n : {}),\n },\n });\n\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: nodeId,\n belief: seedOpinion.opinion_b,\n disbelief: seedOpinion.opinion_d,\n uncertainty: seedOpinion.opinion_u,\n baseRate,\n trigger: \"initial\",\n rationale:\n \"LKC-2 mandatory prior: seeded vacuous opinion at belief creation.\",\n assessedBy: args.userId,\n assessedAt: now,\n slOperator: \"manual_assessment\",\n }) as any\n );\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n newState: {\n formulation: args.formulation,\n baseRate,\n confidence: requestedConfidence,\n opinion: {\n b: seedOpinion.opinion_b,\n d: seedOpinion.opinion_d,\n u: seedOpinion.opinion_u,\n a: seedOpinion.opinion_a,\n },\n tupleContradicted: false,\n source: \"internal\",\n },\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n // Schedule embedding generation for semantic search.\n // Fire when either projectId or topicId is present — topicId alone covers Lucern\n // deployments which have no projects table.\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"belief\" as const,\n text: args.rationale\n ? `${args.formulation}\\n\\nRationale: ${args.rationale}`\n : args.formulation,\n ...(requestedConfidence\n ? {\n confidence:\n requestedConfidence === \"high\"\n ? 0.8\n : requestedConfidence === \"low\"\n ? 0.3\n : 0.5,\n }\n : {}),\n }\n );\n }\n\n if (\n normalizePillar(args.pillar || args.topic) === \"other\" &&\n (scope.projectId || scope.topicId)\n ) {\n await ctx.scheduler.runAfter(\n 2500,\n \"beliefCategorization:autoCategorizeBelief\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n await markBeliefGraphDirty(ctx, {\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n return { nodeId };\n },\n});\n\n// =============================================================================\n// CONFIDENCE CHANGE TRACKING\n// =============================================================================\n\n/**\n * Get recent confidence changes for beliefs in a project.\n * Shows beliefs that have had confidence updates via propagation, decay,\n * or other users - useful for \"Attention Needed\" dashboard panel.\n */\nexport const getRecentConfidenceChanges = query({\n args: {\n ...optionalBeliefScopeArgs,\n userId: v.string(),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = args.limit ?? 10;\n const sevenDaysAgo = Date.now() - 7 * 24 * 60 * 60 * 1000;\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const scopeId = scope.topicId ? String(scope.topicId) : scope.projectId;\n\n if (!scopeId || !(await checkScopeAccess(ctx, scopeId, args.userId))) {\n return [];\n }\n\n const projectBeliefs = await getBeliefNodesForScope(ctx, scope);\n\n if (projectBeliefs.length === 0) {\n return [];\n }\n\n // Create a map of beliefId to belief info\n const beliefMap = new Map<\n string,\n { id: string; title: string; currentConfidence: number }\n >();\n for (const belief of projectBeliefs) {\n const info = {\n id: belief._id,\n title: belief.canonicalText || belief.title || \"Untitled belief\",\n currentConfidence: belief.confidence ?? 0.5,\n };\n beliefMap.set(belief._id, info);\n }\n\n // Get recent confidence entries\n const recentConfidence = await ctx.db\n .query(\"beliefConfidence\")\n .order(\"desc\")\n .filter((q) => q.gt(q.field(\"assessedAt\"), sevenDaysAgo))\n .take(200);\n\n // Filter to beliefs in this project and compute deltas\n const changes: Array<{\n beliefId: string;\n beliefTitle: string;\n delta: number;\n trigger: string;\n assessedBy: string;\n assessedAt: number;\n }> = [];\n\n const seenBeliefs = new Set<string>();\n\n for (const entry of recentConfidence) {\n const beliefInfo = beliefMap.get(entry.beliefId as string);\n if (!beliefInfo) {\n continue;\n }\n\n // Skip if we've already processed this belief\n if (seenBeliefs.has(beliefInfo.id)) {\n continue;\n }\n seenBeliefs.add(beliefInfo.id);\n\n // Get previous confidence entry to calculate delta\n const previousEntries = await ctx.db\n .query(\"beliefConfidence\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", entry.beliefId))\n .order(\"desc\")\n .filter((q) => q.lt(q.field(\"assessedAt\"), entry.assessedAt))\n .take(1);\n\n const previousConfidence = previousEntries[0]?.confidence ?? 0.5;\n const delta = entry.confidence - previousConfidence;\n\n // Only include if there's a meaningful change\n if (Math.abs(delta) < 0.05) {\n continue;\n }\n\n changes.push({\n beliefId: beliefInfo.id,\n beliefTitle: beliefInfo.title,\n delta,\n trigger: entry.trigger,\n assessedBy: entry.assessedBy,\n assessedAt: entry.assessedAt,\n });\n\n if (changes.length >= limit) {\n break;\n }\n }\n\n return changes;\n },\n});\n\n// =============================================================================\n// BACKFILL: Set valence + certainty on existing records\n// =============================================================================\n\n/**\n * Backfill synthetic t0 opinion-history rows for legacy beliefs that have\n * node-level opinion/confidence metadata but no beliefConfidence history.\n *\n * Run with:\n * npx convex run epistemicBeliefs:backfillSyntheticOpinionHistory '{\"limit\":100}'\n */\nexport const backfillSyntheticOpinionHistory = internalMutation({\n args: {\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = Math.max(1, Math.min(args.limit ?? 100, 100));\n const [beliefNodes, existingHistory] = await Promise.all([\n ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q) => q.eq(\"nodeType\", \"belief\"))\n .collect(),\n ctx.db.query(\"beliefConfidence\").collect(),\n ]);\n\n const beliefsWithHistory = new Set(\n existingHistory.map((entry) => String(entry.beliefId))\n );\n\n let inserted = 0;\n let skippedNoOpinion = 0;\n let skippedHasHistory = 0;\n\n for (const node of beliefNodes) {\n if (inserted >= limit) {\n break;\n }\n\n const hasOpinionSnapshot =\n readFiniteNumber((node as any).opinion_b) !== undefined ||\n readFiniteNumber((node as any).opinion_d) !== undefined ||\n readFiniteNumber((node as any).opinion_u) !== undefined ||\n readFiniteNumber((node as any).opinion_a) !== undefined ||\n readFiniteNumber(node.confidence) !== undefined;\n\n if (!hasOpinionSnapshot) {\n skippedNoOpinion++;\n continue;\n }\n\n if (beliefsWithHistory.has(String(node._id))) {\n skippedHasHistory++;\n continue;\n }\n\n const opinion = deriveSyntheticBackfillOpinion(node as Record<string, unknown>);\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: node._id,\n belief: opinion.b,\n disbelief: opinion.d,\n uncertainty: opinion.u,\n baseRate: opinion.a,\n trigger: \"backfill_synthetic\",\n rationale:\n \"LK-6 backfill: synthesized t0 from node-level opinion fields (no prior beliefConfidence row found).\",\n assessedAt:\n readFiniteNumber(node.createdAt) ??\n readFiniteNumber(node.updatedAt) ??\n Date.now(),\n assessedBy: \"system:lk-6-backfill\",\n slOperator: \"manual_assessment\",\n }) as any\n );\n beliefsWithHistory.add(String(node._id));\n inserted++;\n }\n\n const remainingCandidates = beliefNodes.filter((node) => {\n const hasOpinionSnapshot =\n readFiniteNumber((node as any).opinion_b) !== undefined ||\n readFiniteNumber((node as any).opinion_d) !== undefined ||\n readFiniteNumber((node as any).opinion_u) !== undefined ||\n readFiniteNumber((node as any).opinion_a) !== undefined ||\n readFiniteNumber(node.confidence) !== undefined;\n return hasOpinionSnapshot && !beliefsWithHistory.has(String(node._id));\n }).length;\n\n return {\n scanned: beliefNodes.length,\n inserted,\n skippedNoOpinion,\n skippedHasHistory,\n remainingCandidates,\n hasMore: remainingCandidates > 0,\n };\n },\n});\n\n/**\n * Backfill mandatory priors for legacy beliefs created before LKC-2.\n *\n * Run with:\n * npx convex run epistemicBeliefs:backfillMandatoryPriors '{\"limit\":100}'\n */\nexport const backfillMandatoryPriors = internalMutation({\n args: {\n limit: v.optional(v.number()),\n defaultBaseRate: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = Math.max(1, Math.min(args.limit ?? 100, 1000));\n const defaultBaseRate = assertBaseRateInRange(\n args.defaultBaseRate ?? 0.5,\n \"defaultBaseRate\"\n );\n const [beliefNodes, historyRows] = await Promise.all([\n ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_nodeType\", (q) => q.eq(\"nodeType\", \"belief\"))\n .collect(),\n ctx.db.query(\"beliefConfidence\").collect(),\n ]);\n\n const historyByBeliefId = new Map<string, typeof historyRows>();\n for (const row of historyRows) {\n const beliefId = String(row.beliefId);\n const entries = historyByBeliefId.get(beliefId) ?? [];\n entries.push(row);\n historyByBeliefId.set(beliefId, entries);\n }\n\n let touched = 0;\n let patchedNodes = 0;\n let patchedHistoryRows = 0;\n let insertedInitialRows = 0;\n let auditEntries = 0;\n\n for (const node of beliefNodes) {\n if (touched >= limit) {\n break;\n }\n\n const beliefId = String(node._id);\n const history = historyByBeliefId.get(beliefId) ?? [];\n const patchedOpinion = {\n belief: readFiniteNumber((node as any).opinion_b) ?? 0,\n disbelief: readFiniteNumber((node as any).opinion_d) ?? 0,\n uncertainty: readFiniteNumber((node as any).opinion_u) ?? 1,\n baseRate:\n readFiniteNumber((node as any).opinion_a) ?? defaultBaseRate,\n };\n const needsNodePatch =\n readFiniteNumber((node as any).opinion_b) === undefined ||\n readFiniteNumber((node as any).opinion_d) === undefined ||\n readFiniteNumber((node as any).opinion_u) === undefined ||\n readFiniteNumber((node as any).opinion_a) === undefined;\n const rowsMissingBaseRate = history.filter(\n (row) => readFiniteNumber((row as any).baseRate) === undefined\n );\n const needsInitialRow = history.length === 0;\n\n if (\n !needsNodePatch &&\n rowsMissingBaseRate.length === 0 &&\n !needsInitialRow\n ) {\n continue;\n }\n\n if (needsNodePatch) {\n await ctx.db.patch(node._id, {\n opinion_b: patchedOpinion.belief,\n opinion_d: patchedOpinion.disbelief,\n opinion_u: patchedOpinion.uncertainty,\n opinion_a: patchedOpinion.baseRate,\n updatedAt: Date.now(),\n } as any);\n patchedNodes++;\n }\n\n for (const row of rowsMissingBaseRate) {\n const belief = readFiniteNumber((row as any).belief) ?? 0;\n const disbelief = readFiniteNumber((row as any).disbelief) ?? 0;\n const uncertainty = readFiniteNumber((row as any).uncertainty) ?? 1;\n await ctx.db.patch((row as any)._id, {\n baseRate: defaultBaseRate,\n confidence: confidenceFromSL(\n belief,\n disbelief,\n uncertainty,\n defaultBaseRate\n ),\n } as any);\n patchedHistoryRows++;\n }\n\n if (needsInitialRow) {\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: node._id,\n belief: patchedOpinion.belief,\n disbelief: patchedOpinion.disbelief,\n uncertainty: patchedOpinion.uncertainty,\n baseRate: patchedOpinion.baseRate,\n trigger: \"initial\",\n rationale:\n \"LKC-2 backfill: inserted missing initial vacuous opinion with neutral prior.\",\n assessedAt:\n readFiniteNumber(node.createdAt) ??\n readFiniteNumber(node.updatedAt) ??\n Date.now(),\n assessedBy: \"system:lkc-2-prior-backfill\",\n slOperator: \"manual_assessment\",\n }) as any\n );\n insertedInitialRows++;\n }\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: beliefId,\n changeType: \"updated\",\n changedAt: Date.now(),\n changedBy: \"system:lkc-2-prior-backfill\",\n isAgent: false,\n previousState: null,\n newState: {\n baseRateBackfilled: true,\n baseRate: defaultBaseRate,\n patchedNodeOpinion: needsNodePatch,\n patchedHistoryRows: rowsMissingBaseRate.length,\n insertedInitialOpinion: needsInitialRow,\n },\n projectId: (node as any).projectId,\n topicId:\n typeof (node as any).topicId === \"string\"\n ? (node as any).topicId\n : undefined,\n } as any);\n auditEntries++;\n touched++;\n }\n\n return {\n scanned: beliefNodes.length,\n patchedNodes,\n patchedHistoryRows,\n insertedInitialRows,\n auditEntries,\n hasMore: touched >= limit,\n };\n },\n});\n\n/**\n * Backfill valence + certainty on beliefConfidence records and epistemicNodes metadata.\n * Converts existing single-number confidence to two-axis:\n * valence = confidence * 2 - 1 (maps 0→-1, 0.5→0, 1→+1)\n * certainty = |confidence - 0.5| * 2 (maps 0.5→0, 0/1→1)\n *\n * Run with: npx convex run epistemicBeliefs:backfillTwoAxisConfidence '{}'\n */\nexport const backfillTwoAxisConfidence = internalMutation({\n args: {\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const dryRun = args.dryRun ?? false;\n\n // 1. Backfill beliefConfidence records missing valence/certainty\n const allConfRecords = await ctx.db.query(\"beliefConfidence\").collect();\n let confUpdated = 0;\n let confSkipped = 0;\n\n for (const record of allConfRecords) {\n if (record.valence !== undefined && record.certainty !== undefined) {\n confSkipped++;\n continue;\n }\n const conf = record.confidence ?? 0.5;\n const valence = Math.round((conf * 2 - 1) * 100) / 100;\n const certainty = Math.round(Math.abs(conf - 0.5) * 2 * 100) / 100;\n\n if (!dryRun) {\n await ctx.db.patch(record._id, { valence, certainty } as any);\n }\n confUpdated++;\n }\n\n // 2. Backfill epistemicNodes metadata missing valence/certainty\n const allBeliefNodes = await ctx.db\n .query(\"epistemicNodes\")\n .filter((q) => q.eq(q.field(\"nodeType\"), \"belief\"))\n .collect();\n let nodesUpdated = 0;\n let nodesSkipped = 0;\n\n for (const node of allBeliefNodes) {\n const meta = (node.metadata || {}) as Record<string, unknown>;\n if (meta.valence !== undefined && meta.certainty !== undefined) {\n nodesSkipped++;\n continue;\n }\n const conf = node.confidence ?? 0.5;\n const valence = Math.round((conf * 2 - 1) * 100) / 100;\n const certainty = Math.round(Math.abs(conf - 0.5) * 2 * 100) / 100;\n\n if (!dryRun) {\n await ctx.db.patch(node._id, {\n metadata: { ...meta, valence, certainty },\n });\n }\n nodesUpdated++;\n }\n\n return {\n dryRun,\n beliefConfidence: {\n updated: confUpdated,\n skipped: confSkipped,\n total: allConfRecords.length,\n },\n epistemicNodes: {\n updated: nodesUpdated,\n skipped: nodesSkipped,\n total: allBeliefNodes.length,\n },\n };\n },\n});\n\n/**\n * Backfill: Create relates_to_thesis edges for confidence-bearing beliefs in a project.\n *\n * When modulateConfidence was missing the edge-creation step, beliefs got scored\n * but never linked to the project's theme node. This backfill fixes that.\n *\n * Run: npx convex run epistemicBeliefs:backfillScoredBeliefEdges '{\"projectId\":\"<id>\"}'\n * Dry run first: npx convex run epistemicBeliefs:backfillScoredBeliefEdges '{\"projectId\":\"<id>\",\"dryRun\":true}'\n */\nexport const backfillScoredBeliefEdges = internalMutation({\n args: {\n ...optionalBeliefScopeArgs,\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const dryRun = args.dryRun ?? false;\n\n // Get all confidence-bearing beliefs in the project\n const allBeliefs = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\n \"by_topic\",\n (q: any) =>\n q.eq(\"topicId\", args.topicId || args.projectId)\n )\n .filter((q) => q.eq(q.field(\"nodeType\"), \"belief\"))\n .collect();\n\n const scoredBeliefs = allBeliefs.filter((belief) => {\n const metadata = (belief.metadata || {}) as Record<string, unknown>;\n const lifecycle = resolveBeliefStatus(belief, metadata);\n return lifecycle === \"belief\" || lifecycle === \"fact\";\n });\n\n // Get theme nodes for the project\n const themeNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\n \"by_topic\",\n (q: any) =>\n q.eq(\"topicId\", args.topicId || args.projectId)\n )\n .filter((q) => q.eq(q.field(\"nodeType\"), \"theme\"))\n .collect();\n\n let created = 0;\n let skipped = 0;\n\n for (const belief of scoredBeliefs) {\n if (!belief.globalId) {\n skipped++;\n continue;\n }\n\n for (const theme of themeNodes) {\n if (!theme.globalId) {\n continue;\n }\n\n const edgeGlobalId = `edge-${belief.globalId}-relates_to_thesis-${theme.globalId}`;\n\n // Check if edge already exists in Convex mirror\n const existing = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q) => q.eq(q.field(\"globalId\"), edgeGlobalId))\n .first();\n\n if (existing) {\n skipped++;\n continue;\n }\n\n if (!dryRun) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: belief.globalId,\n toGlobalId: theme.globalId,\n edgeType: \"relates_to_thesis\",\n weight: belief.confidence ?? 0.5,\n createdBy: \"backfill:scored_belief_theme\",\n topicId: String(args.projectId),\n fromNodeType: \"belief\",\n toNodeType: \"theme\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n }\n created++;\n }\n }\n\n return {\n dryRun,\n scoredBeliefs: scoredBeliefs.length,\n themeNodes: themeNodes.length,\n edgesCreated: created,\n edgesSkipped: skipped,\n };\n },\n});\n\n/**\n * @deprecated Legacy sprint backfill — removed. Sprints are D-tier.\n * Kept as no-op stub to avoid breaking deployed function references.\n */\nexport const backfillBeliefSprintIds = internalMutation({\n args: {\n ...optionalBeliefScopeArgs,\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (_ctx, _args) => {\n return {\n dryRun: true,\n message: \"backfillBeliefSprintIds removed — sprints are D-tier legacy. Use worktrees.\",\n sprintsScanned: 0,\n beliefsWithSprints: 0,\n updated: 0,\n skipped: 0,\n };\n },\n});\n\n// =============================================================================\n// GET BELIEF CLUSTER POSITIONS (worktree-based)\n// =============================================================================\n\n/**\n * Get belief cluster positions for visualization.\n * Classifies each belief as \"clustered\" (in a worktree) or \"unprocessed\"\n * based on worktreeBeliefCluster membership.\n *\n * Used by PillarDetailPanel, PillarsPanel, BeliefListPanel.\n */\nexport const getBeliefClusterPositions = query({\n args: {\n ...optionalBeliefScopeArgs,\n userId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope || !scope.projectId) {\n return {\n positions: {},\n hasClusters: false,\n counts: { raw: 0, hypothesis: 0, conditional: 0, unprocessed: 0, total: 0 },\n };\n }\n\n const allBeliefNodes = await getBeliefNodesForScope(ctx, scope);\n const clusteredBeliefIds = new Set<string>();\n\n // Find all beliefs that belong to any worktree cluster\n for (const node of allBeliefNodes) {\n const links = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_belief\", (q: any) => q.eq(\"beliefId\", node._id))\n .first();\n if (links) {\n clusteredBeliefIds.add(String(node._id));\n }\n }\n\n const positions: Record<string, \"hypothesis\" | \"unprocessed\"> = {};\n for (const node of allBeliefNodes) {\n const id = String(node._id);\n // Beliefs in worktree clusters are treated as hypotheses (tested)\n positions[id] = clusteredBeliefIds.has(id) ? \"hypothesis\" : \"unprocessed\";\n }\n\n const unprocessedCount = allBeliefNodes.length - clusteredBeliefIds.size;\n\n return {\n positions,\n hasClusters: clusteredBeliefIds.size > 0,\n counts: {\n raw: 0,\n hypothesis: clusteredBeliefIds.size,\n conditional: 0,\n unprocessed: unprocessedCount,\n total: allBeliefNodes.length,\n },\n };\n },\n});\n\n// =============================================================================\n// REASSIGN BELIEFS TO A NEW TOPIC (for auto-branching)\n// =============================================================================\n\n/**\n * Reassign a batch of belief nodes to a different topic.\n *\n * Used by the density-based auto-branching system when beliefs are moved\n * from a parent topic into newly created subtopics. Patches `topicId`\n * and `updatedAt` on the target beliefs, and also reassigns any questions\n * and evidence nodes that are connected to the reassigned beliefs via edges.\n *\n * Skips nodes that don't exist or aren't active.\n */\nexport const reassignBeliefsTopic = mutation({\n args: {\n beliefNodeIds: v.array(v.id(\"epistemicNodes\")),\n targetTopicId: v.string(),\n reason: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n // Verify the target topic exists\n const targetTopic = await ctx.db.get(args.targetTopicId as Id<\"topics\">);\n if (!targetTopic) {\n throw new Error(`Target topic not found: ${args.targetTopicId}`);\n }\n\n let reassigned = 0;\n let skipped = 0;\n const now = Date.now();\n const movedBeliefIds = new Set<string>();\n\n // Phase 1: Reassign the beliefs themselves\n for (const beliefNodeId of args.beliefNodeIds) {\n const node = await ctx.db.get(beliefNodeId);\n\n // Skip if node doesn't exist or isn't a belief\n if (!node || node.nodeType !== \"belief\") {\n skipped++;\n continue;\n }\n\n await ctx.db.patch(beliefNodeId, {\n topicId: args.targetTopicId,\n updatedAt: now,\n });\n movedBeliefIds.add(String(beliefNodeId));\n reassigned++;\n }\n\n // Phase 2: Find and reassign connected non-belief nodes (questions, evidence, etc.)\n // For each moved belief, find edges where the belief is source or target,\n // and reassign the connected non-belief node if it's in the same old topic.\n let connectedReassigned = 0;\n const alreadyReassigned = new Set<string>();\n\n for (const beliefId of movedBeliefIds) {\n // Outbound edges from this belief\n const outbound = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from\", (q: any) =>\n q.eq(\"fromNodeId\", beliefId as any)\n )\n .collect();\n\n // Inbound edges to this belief\n const inbound = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q: any) =>\n q.eq(\"toNodeId\", beliefId as any)\n )\n .collect();\n\n const connectedNodeIds = new Set<string>();\n for (const edge of outbound) {\n if (edge.toNodeId) connectedNodeIds.add(String(edge.toNodeId));\n }\n for (const edge of inbound) {\n if (edge.fromNodeId) connectedNodeIds.add(String(edge.fromNodeId));\n }\n\n for (const connectedId of connectedNodeIds) {\n // Skip beliefs (already handled in Phase 1) and already-reassigned nodes\n if (movedBeliefIds.has(connectedId) || alreadyReassigned.has(connectedId)) {\n continue;\n }\n\n try {\n const connectedNode = await ctx.db.get(connectedId as any) as any;\n if (!connectedNode || connectedNode.status !== \"active\") continue;\n // Only reassign if the connected node is still in the OLD topic\n // (i.e., not already in the target or a different subtopic)\n if (\n connectedNode.topicId &&\n String(connectedNode.topicId) !== String(args.targetTopicId)\n ) {\n await ctx.db.patch(connectedId as any, {\n topicId: args.targetTopicId,\n updatedAt: now,\n });\n alreadyReassigned.add(connectedId);\n connectedReassigned++;\n }\n } catch {\n // Skip nodes that can't be patched\n }\n }\n }\n\n return { reassigned, skipped, connectedReassigned };\n },\n});\n"]}
1
+ {"version":3,"sources":["../src/beliefLifecycle.ts","../src/convex.ts","../src/edges/contains.ts","../src/edges/utils.ts","../src/edges/contradicts.ts","../src/edges/dependsOn.ts","../src/edges/derivedFrom.ts","../src/edges/elaborates.ts","../src/edges/informs.ts","../src/edges/propagationTypes.ts","../src/edges/refutes.ts","../src/edges/supports.ts","../src/edges/tests.ts","../src/edges/index.ts","../src/topicScope.ts","../src/workspaceIsolation.ts","../src/confidencePropagationDispatch.ts","../src/embeddingTrigger.ts","../src/globalId.ts","../src/logicalRoleInference.ts","../src/topicProjectOverlay.ts","../src/resolvers.ts","../src/epistemicBeliefs.ts"],"names":["project","normalizeScopeValue","mkOpinion","LEGACY_SCOPE_FIELD","isMissingLucernChildComponentError","v","readOpinionFromRecord","query"],"mappings":"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","file":"epistemicBeliefs.js","sourcesContent":["/**\n * Belief lifecycle helpers shared across Convex modules.\n *\n * Canonical lifecycle:\n * assumption -> hypothesis -> belief -> fact\n */\n\nexport type BeliefLifecycleStatus =\n | \"assumption\"\n | \"hypothesis\"\n | \"belief\"\n | \"fact\";\n\ntype PredictionOutcome =\n | \"pending\"\n | \"confirmed\"\n | \"disconfirmed\"\n | \"partial\"\n | \"expired\";\n\nconst BELIEF_STATUS_VALUES: readonly BeliefLifecycleStatus[] = [\n \"assumption\",\n \"hypothesis\",\n \"belief\",\n \"fact\",\n];\n\nconst RESOLVED_PREDICTION_OUTCOMES: readonly PredictionOutcome[] = [\n \"confirmed\",\n \"disconfirmed\",\n \"partial\",\n \"expired\",\n];\n\nexport function isBeliefLifecycleStatus(\n value: unknown\n): value is BeliefLifecycleStatus {\n return (\n typeof value === \"string\" &&\n BELIEF_STATUS_VALUES.includes(value as BeliefLifecycleStatus)\n );\n}\n\nfunction normalizeBeliefConfidence(confidence: unknown): number | null {\n if (typeof confidence !== \"number\" || !Number.isFinite(confidence)) {\n return null;\n }\n if (confidence >= 0 && confidence <= 1) {\n return confidence;\n }\n // Backward compatibility with historical percentage-scale confidence (0-100).\n if (confidence > 1 && confidence <= 100) {\n return confidence / 100;\n }\n return null;\n}\n\nexport function isResolvedByConfidence(confidence: unknown): boolean {\n const normalized = normalizeBeliefConfidence(confidence);\n if (normalized === null) {\n return false;\n }\n return normalized <= 0 || normalized >= 1;\n}\n\nexport function hasResolvedPredictionOutcome(predictionMeta: unknown): boolean {\n if (!predictionMeta || typeof predictionMeta !== \"object\") {\n return false;\n }\n const outcome = (predictionMeta as { outcome?: unknown }).outcome;\n return (\n typeof outcome === \"string\" &&\n RESOLVED_PREDICTION_OUTCOMES.includes(outcome as PredictionOutcome)\n );\n}\n\nfunction getPredictionMetaFromMetadata(\n metadata: Record<string, unknown> | undefined\n): unknown {\n return metadata?.predictionMeta;\n}\n\nexport function shouldTreatBeliefAsFact(opts: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): boolean {\n if (isResolvedByConfidence(opts.confidence)) {\n return true;\n }\n if (hasResolvedPredictionOutcome(opts.predictionMeta)) {\n return true;\n }\n if (\n hasResolvedPredictionOutcome(getPredictionMetaFromMetadata(opts.metadata))\n ) {\n return true;\n }\n return false;\n}\n\nexport function resolveBeliefLifecycleStatus(opts: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): BeliefLifecycleStatus {\n if (shouldTreatBeliefAsFact(opts)) {\n return \"fact\";\n }\n\n const direct = opts.beliefStatus;\n if (isBeliefLifecycleStatus(direct)) {\n // If the belief has been scored (has numeric credence) but stored status\n // is still pre-validation, promote to \"belief\". Scoring = merge to main.\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (normalized !== null && isPreValidationBeliefStatus(direct)) {\n return \"belief\";\n }\n return direct;\n }\n\n const metaStatus = opts.metadata?.beliefStatus;\n if (isBeliefLifecycleStatus(metaStatus)) {\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (normalized !== null && isPreValidationBeliefStatus(metaStatus)) {\n return \"belief\";\n }\n return metaStatus;\n }\n\n return \"assumption\";\n}\n\nexport function isPreValidationBeliefStatus(\n status: BeliefLifecycleStatus\n): boolean {\n return status === \"assumption\" || status === \"hypothesis\";\n}\n\nexport function isPropagationEligibleBeliefStatus(\n status: BeliefLifecycleStatus\n): boolean {\n return status === \"belief\" || status === \"fact\";\n}\n\nexport function promoteBeliefStatusAfterScoring(\n status: BeliefLifecycleStatus,\n opts?: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n }\n): BeliefLifecycleStatus {\n if (shouldTreatBeliefAsFact({ ...opts })) {\n return \"fact\";\n }\n if (isPreValidationBeliefStatus(status)) {\n return \"belief\";\n }\n return status === \"fact\" ? \"fact\" : \"belief\";\n}\n","import {\n actionGeneric,\n anyApi,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\nexport const api = anyApi as any;\nexport const components = componentsGeneric() as any;\nexport const internal = anyApi as any;\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> = any;\nexport type DataModel = any;\nexport type ActionCtx = any;\nexport type DatabaseReader = any;\nexport type DatabaseWriter = any;\nexport type MutationCtx = any;\nexport type QueryCtx = any;\n\nexport const action = actionGeneric as any;\nexport const httpAction = httpActionGeneric as any;\nexport const internalAction = internalActionGeneric as any;\nexport const internalMutation = internalMutationGeneric as any;\nexport const internalQuery = internalQueryGeneric as any;\nexport const mutation = mutationGeneric as any;\nexport const query = queryGeneric as any;\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\n\nexport const containsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"contains\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Structural containment only. Traversed for explicit semantics, but it never propagates opinions.\",\n};\n\n","import {\n applyNegativeEvidence,\n applyNegativeSupport,\n cumulativeFusion,\n project,\n trustDiscount,\n type EdgeMetadata,\n type PropagationResult,\n type SLOpinion,\n} from \"@lucern/confidence\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeRecord,\n} from \"./propagationTypes\";\n\nexport function readEdgeMetadata<TNodeId extends string>(\n edge: PropagationEdgeRecord<TNodeId>\n): EdgeMetadata {\n return {\n constraint: edge.constraint ?? undefined,\n normalization: edge.normalization ?? undefined,\n propagation: edge.propagation ?? undefined,\n conditionalA: edge.conditionalA ?? undefined,\n conditionalNotA: edge.conditionalNotA ?? undefined,\n };\n}\n\nexport function applyPerHopDamping(\n sourceOpinion: SLOpinion,\n damping: number\n): SLOpinion {\n if (damping >= 1) {\n return sourceOpinion;\n }\n\n return trustDiscount(sourceOpinion, Math.max(0, damping));\n}\n\nexport function annotateRationale(\n result: PropagationResult,\n spec: EdgePropagationSpec,\n hop: number\n): PropagationResult {\n return {\n ...result,\n rationale: `hop=${hop} edge=${spec.edgeType} damping=${spec.damping.toFixed(\n 2\n )} :: ${result.rationale}`,\n };\n}\n\nexport function propagatePositiveSupport(\n sourceOpinion: SLOpinion,\n targetOpinion: SLOpinion,\n edgeWeight: number\n): PropagationResult {\n const discounted = trustDiscount(sourceOpinion, Math.abs(edgeWeight));\n return {\n opinion: cumulativeFusion(targetOpinion, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Supporting evidence (weight=${edgeWeight.toFixed(\n 2\n )}) from source at ${project(sourceOpinion).toFixed(2)}`,\n };\n}\n\nexport function propagatePositiveInform(\n sourceOpinion: SLOpinion,\n targetOpinion: SLOpinion,\n edgeWeight: number\n): PropagationResult {\n const discounted = trustDiscount(sourceOpinion, Math.abs(edgeWeight));\n return {\n opinion: cumulativeFusion(targetOpinion, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Supporting evidence (weight=${edgeWeight.toFixed(2)})`,\n };\n}\n\nexport function propagateNegativeSupportWithMetadata(\n sourceOpinion: SLOpinion,\n targetOpinion: SLOpinion,\n edgeWeight: number,\n edge: PropagationEdgeRecord\n): PropagationResult {\n return applyNegativeSupport(\n sourceOpinion,\n targetOpinion,\n edgeWeight,\n readEdgeMetadata(edge)\n );\n}\n\nexport function propagateNegativeInform(\n sourceOpinion: SLOpinion,\n targetOpinion: SLOpinion,\n edgeWeight: number\n): PropagationResult {\n return applyNegativeEvidence(sourceOpinion, targetOpinion, edgeWeight);\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 mkOpinion,\n project,\n} from \"@lucern/confidence\";\nimport type { EdgePropagationSpec } from \"./propagationTypes\";\nimport { annotateRationale, applyPerHopDamping, readEdgeMetadata } from \"./utils\";\n\nexport const dependsOnPropagationSpec: EdgePropagationSpec = {\n edgeType: \"depends_on\",\n direction: \"incoming\",\n transitivity: \"damped\",\n damping: 0.8,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const metadata = readEdgeMetadata(edge);\n\n if (metadata.conditionalA && metadata.conditionalNotA) {\n const deducedOpinion = conditionalDeduction(\n dampedSource,\n mkOpinion(\n metadata.conditionalA.b,\n metadata.conditionalA.d,\n metadata.conditionalA.u,\n metadata.conditionalA.a\n ),\n mkOpinion(\n metadata.conditionalNotA.b,\n metadata.conditionalNotA.d,\n metadata.conditionalNotA.u,\n metadata.conditionalNotA.a\n ),\n targetOpinion.a\n );\n\n return annotateRationale(\n {\n opinion: deducedOpinion,\n operator: \"conditional_deduction\",\n rationale: `Conditional deduction: prerequisite at ${project(\n dampedSource\n ).toFixed(2)}`,\n },\n context.spec,\n context.hop\n );\n }\n\n const result = dampedDependencyCascade(\n dampedSource,\n targetOpinion,\n metadata.propagation ?? \"continuous\"\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Structural gating. Textbook conditional deduction when edge conditionals exist, otherwise damped dependency cascade through downstream chains.\",\n};\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\n\nexport const derivedFromPropagationSpec: EdgePropagationSpec = {\n edgeType: \"derived_from\",\n direction: \"incoming\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Provenance only. The traversal surface stays explicit, but confidence does not move across derived_from edges.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagatePositiveInform,\n} from \"./utils\";\n\nexport const elaboratesPropagationSpec: EdgePropagationSpec = {\n edgeType: \"elaborates\",\n direction: \"outgoing\",\n transitivity: \"damped\",\n damping: 0.7,\n maxHops: 2,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const contextualWeight = Math.min(Math.abs(edge.weight ?? 0.35), 0.35);\n const result = propagatePositiveInform(\n dampedSource,\n targetOpinion,\n contextualWeight\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Context-rich supporting detail. Elaborates carries a small positive effect with short, damped chaining.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeInform,\n propagatePositiveInform,\n} from \"./utils\";\n\nexport const informsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"informs\",\n direction: \"outgoing\",\n transitivity: \"full\",\n damping: 0.92,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const weight = edge.weight ?? 1;\n const result =\n weight < 0\n ? propagateNegativeInform(dampedSource, targetOpinion, weight)\n : propagatePositiveInform(dampedSource, targetOpinion, weight);\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Evidence-bearing influence. Informs can chain through the graph with light per-hop damping.\",\n};\n\n","import type {\n EdgeMetadata,\n PropagationResult,\n SLOpinion,\n} from \"@lucern/confidence\";\n\nexport type PropagationTraversalDirection = \"outgoing\" | \"incoming\";\n\nexport type PropagationSpecDirection =\n | PropagationTraversalDirection\n | \"bidirectional\";\n\nexport type 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: SLOpinion,\n targetOpinion: SLOpinion,\n edge: PropagationEdgeRecord<TNodeId>,\n context: {\n hop: number;\n sourceNodeId: TNodeId;\n targetNodeId: TNodeId;\n traversedDirection: PropagationTraversalDirection;\n spec: EdgePropagationSpec<TNodeId>;\n }\n ) => PropagationResult | null;\n description: string;\n};\n\nexport function isPropagationTraversalDirection(\n direction: string\n): direction is PropagationTraversalDirection {\n return direction === \"outgoing\" || direction === \"incoming\";\n}\n\nexport function canTraverseHop<TNodeId extends string>(\n spec: EdgePropagationSpec<TNodeId>,\n nextHop: number\n): boolean {\n return spec.maxHops === \"unbounded\" || nextHop <= spec.maxHops;\n}\n\nexport function canContinueTransitively<TNodeId extends string>(\n spec: EdgePropagationSpec<TNodeId>,\n currentHop: number\n): boolean {\n if (spec.transitivity === \"none\") {\n return false;\n }\n\n return spec.maxHops === \"unbounded\" || currentHop < spec.maxHops;\n}\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeInform,\n} from \"./utils\";\n\nexport const refutesPropagationSpec: EdgePropagationSpec = {\n edgeType: \"refutes\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 0.9,\n maxHops: 1,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const negativeWeight = -Math.abs(edge.weight ?? 1);\n const result = propagateNegativeInform(\n dampedSource,\n targetOpinion,\n negativeWeight\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Explicit negative evidence semantics. Refutes is treated as strong one-hop counter-evidence.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeSupportWithMetadata,\n propagatePositiveSupport,\n} from \"./utils\";\n\nexport const supportsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"supports\",\n direction: \"outgoing\",\n transitivity: \"full\",\n damping: 0.85,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const weight = edge.weight ?? 1;\n const result =\n weight < 0\n ? propagateNegativeSupportWithMetadata(\n dampedSource,\n targetOpinion,\n weight,\n edge\n )\n : propagatePositiveSupport(dampedSource, targetOpinion, weight);\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Belief-to-belief influence. Supports chains transitively with moderate per-hop damping.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\n\nexport const testsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"tests\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Interrogation linkage only. Tests edges do not directly move confidence.\",\n};\n\n","import { containsPropagationSpec } from \"./contains\";\nimport { contradictsPropagationSpec } from \"./contradicts\";\nimport { dependsOnPropagationSpec } from \"./dependsOn\";\nimport { derivedFromPropagationSpec } from \"./derivedFrom\";\nimport { elaboratesPropagationSpec } from \"./elaborates\";\nimport { informsPropagationSpec } from \"./informs\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeType,\n PropagationSpecDirection,\n PropagationTraversalDirection,\n} from \"./propagationTypes\";\nimport {\n canContinueTransitively,\n canTraverseHop,\n isPropagationTraversalDirection,\n} from \"./propagationTypes\";\nimport { refutesPropagationSpec } from \"./refutes\";\nimport { supportsPropagationSpec } from \"./supports\";\nimport { testsPropagationSpec } from \"./tests\";\n\nexport type {\n EdgePropagationSpec,\n PropagationEdgeRecord,\n PropagationEdgeType,\n PropagationSpecDirection,\n 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","/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport { api as appApi } from \"./convex\";\nimport type { Id } from \"./convex\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectScope = {\n topicId: Id<\"topics\">;\n projectId?: string;\n tenantId?: string;\n workspaceId?: string;\n source: \"topic\" | \"project_mapped_topic\" | \"topic_inferred\";\n};\n\ntype MaterializedTopicNodeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n};\n\nfunction asMappedProjectId(\n topic: TopicDoc | null | undefined\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(topic[LEGACY_SCOPE_FIELD]);\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = (topic.metadata || {}) as Record<string, unknown>;\n const candidate =\n (metadata[LEGACY_SCOPE_FIELD] as string | undefined) ||\n (metadata.legacyProjectId as string | undefined) ||\n (metadata.projectId as string | undefined) ||\n (metadata.scopeProjectId as string | undefined);\n return candidate ? (candidate as string) : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(ctx: any, scopeId: string): Promise<TopicDoc[]> {\n try {\n return (await ctx.db\n .query(\"topics\")\n .withIndex(\"by_graph_scope_project\", (q: any) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId)\n )\n .collect()) as TopicDoc[];\n } catch {\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await ctx.db.query(\"topics\").collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: any,\n topicId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get as any, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch {\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: any,\n legacyScopeId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId as any, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch {\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: any,\n topic: TopicDoc\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) break;\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) break;\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: any,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string }\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n // Try direct lookup, fall back to the legacy mapped-project bridge\n let topic: TopicDoc | null = null;\n try {\n topic = (await ctx.db.get(args.topicId as Id<\"topics\">)) as TopicDoc | null;\n } catch {\n // Not a valid topics table ID\n }\n if (!topic) {\n topic = await tryResolveHostTopicById(ctx, String(args.topicId));\n }\n if (!topic) {\n // Try as legacy projectId / globalId via the mapped-project bridge.\n topic =\n pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, String(args.topicId))\n ) ?? null;\n }\n if (!topic) {\n throw new Error(`Topic not found: ${String(args.topicId)}`);\n }\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n if (mapped) {\n return {\n topicId: topic._id,\n projectId: mapped,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n return {\n topicId: topic._id,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n\n if (args.projectId) {\n let directTopic: TopicDoc | null = null;\n try {\n directTopic = (await ctx.db.get(\n args.projectId as Id<\"topics\">\n )) as TopicDoc | null;\n } catch {\n // Not a valid topics table ID, continue to legacy graph-scope lookup.\n }\n\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n directTopic = await tryResolveHostTopicByLegacyScope(ctx, args.projectId);\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n const topics = await findTopicsByScopeAlias(ctx, args.projectId);\n const primary = pickPrimaryTopic(topics);\n if (primary) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, primary);\n return {\n topicId: primary._id,\n projectId: args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"project_mapped_topic\",\n };\n }\n throw new Error(\n `Legacy project scope ${String(args.projectId)} has no mapped topic.`\n );\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\"\n );\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","import {\n getLayerForNodeType,\n isNodeType,\n} from \"@lucern/contracts/schema-helpers/spine/tables/epistemicNodes\";\nimport {\n resolveTopicProjectScope,\n type TopicProjectScope,\n} from \"./topicScope\";\n\ntype StructuredInvariantError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype ScopeLike = {\n tenantId?: unknown;\n workspaceId?: unknown;\n epistemicLayer?: unknown;\n nodeType?: unknown;\n topicId?: unknown;\n projectId?: unknown;\n publicationStatus?: unknown;\n};\n\nexport type RuntimePackMutationContext = {\n toolName?: string;\n packKey?: string;\n packInstallScope?: \"tenant\" | \"workspace\";\n};\n\nexport function normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction throwWorkspaceIsolationError(args: {\n message: string;\n invariantCode: string;\n suggestion: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredInvariantError;\n error.status = 409;\n error.code = \"INVARIANT_VIOLATION\";\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nexport function assertWorkspaceScopedEpistemicNodeScope(args: {\n scope: TopicProjectScope;\n nodeType: string;\n mutationName: string;\n}): void {\n const layer = isNodeType(args.nodeType)\n ? getLayerForNodeType(args.nodeType)\n : undefined;\n if (layer === \"ontological\") {\n return;\n }\n\n const workspaceId = normalizeScopeValue(args.scope.workspaceId);\n if (workspaceId) {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n \"Workspace-scoped reasoning isolation requires workspaceId on non-ontological node creation.\",\n invariantCode: \"workspace.scope_required_for_epistemic_nodes\",\n suggestion:\n \"Resolve the topic/project scope through a workspace-bound topic before creating epistemic nodes.\",\n details: {\n mutationName: args.mutationName,\n nodeType: args.nodeType,\n topicId: args.scope.topicId,\n projectId: args.scope.projectId,\n },\n });\n}\n\nexport function nodeMatchesWorkspaceReasoningScope(\n node: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!node) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const nodeTenantId = normalizeScopeValue(node.tenantId);\n const nodeWorkspaceId = normalizeScopeValue(node.workspaceId);\n const epistemicLayer =\n typeof node.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n\n if (\n scopeTenantId &&\n nodeTenantId &&\n scopeTenantId !== nodeTenantId\n ) {\n return false;\n }\n\n // Ontological entities are tenant-global (no workspace required)\n if (epistemicLayer === \"ontological\" && nodeWorkspaceId === undefined) {\n return true;\n }\n\n // Published nodes are visible at tenant scope — the microservice API surface.\n // The node stays in its workspace, but tenant-scope queries can see it.\n if (!scopeWorkspaceId && node.publicationStatus === \"published\") {\n return true;\n }\n\n if (!scopeWorkspaceId) {\n return nodeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === nodeWorkspaceId;\n}\n\nexport function edgeMatchesWorkspaceReasoningScope(\n edge: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!edge) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const edgeTenantId = normalizeScopeValue(edge.tenantId);\n const edgeWorkspaceId = normalizeScopeValue(edge.workspaceId);\n\n if (\n scopeTenantId &&\n edgeTenantId &&\n scopeTenantId !== edgeTenantId\n ) {\n return false;\n }\n\n if (!scopeWorkspaceId) {\n return edgeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === edgeWorkspaceId;\n}\n\nexport async function resolveNodeScopeForWorkspaceIsolation(\n ctx: any,\n node: ScopeLike | null | undefined\n): Promise<{\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n nodeType?: string;\n}> {\n const epistemicLayer =\n typeof node?.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n const resolved = {\n tenantId: normalizeScopeValue(node?.tenantId),\n workspaceId: normalizeScopeValue(node?.workspaceId),\n epistemicLayer,\n nodeType: typeof node?.nodeType === \"string\" ? node.nodeType : undefined,\n };\n\n if (!node) {\n return resolved;\n }\n\n if (resolved.epistemicLayer === \"ontological\") {\n return resolved;\n }\n\n if (resolved.tenantId || resolved.workspaceId) {\n return resolved;\n }\n\n if (node.topicId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n topicId: node.topicId as any,\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n if (node.projectId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n projectId: String(node.projectId),\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n return resolved;\n}\n\nexport function resolveRuntimePackMutationContext(args: {\n runtimeToolName?: string;\n runtimePackKey?: string;\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n}): RuntimePackMutationContext | undefined {\n if (\n !args.runtimeToolName &&\n !args.runtimePackKey &&\n !args.runtimePackInstallScope\n ) {\n return;\n }\n\n return {\n toolName: args.runtimeToolName,\n packKey: args.runtimePackKey,\n packInstallScope: args.runtimePackInstallScope,\n };\n}\n\nexport function assertTenantPackWorkspaceMutationAllowed(args: {\n runtime?: RuntimePackMutationContext;\n target: ScopeLike;\n mutationName: string;\n}): void {\n if (\n !args.runtime?.packKey ||\n args.runtime.packInstallScope !== \"tenant\"\n ) {\n return;\n }\n\n const targetWorkspaceId = normalizeScopeValue(args.target.workspaceId);\n const targetLayer =\n typeof args.target.epistemicLayer === \"string\"\n ? args.target.epistemicLayer\n : undefined;\n\n if (!targetWorkspaceId || targetLayer === \"ontological\") {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n `Tenant-scoped pack \"${args.runtime.packKey}\" cannot mutate workspace-scoped reasoning state.`,\n invariantCode: \"workspace.tenant_pack_reasoning_write_forbidden\",\n suggestion:\n \"Use a workspace-scoped pack for workspace-local graph mutations, or route the change through tenant-global canonical entity flows.\",\n details: {\n mutationName: args.mutationName,\n toolName: args.runtime.toolName,\n packKey: args.runtime.packKey,\n targetWorkspaceId,\n targetNodeType: args.target.nodeType,\n targetLayer,\n },\n });\n}\n","import {\n hasProjectedOpinionChanged,\n mkOpinion,\n readOpinionFromRecord,\n type SLOpinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport {\n canContinueTransitively,\n canTraverseHop,\n getEdgePropagationSpecs,\n getTraversalDirections,\n type EdgePropagationSpec,\n type PropagationEdgeRecord,\n type PropagationEdgeType,\n type PropagationTraversalDirection,\n} from \"./edges\";\nimport {\n edgeMatchesWorkspaceReasoningScope,\n nodeMatchesWorkspaceReasoningScope,\n} from \"./workspaceIsolation\";\n\nexport type PropagationDispatchScope = {\n tenantId?: string;\n workspaceId?: string;\n};\n\nexport type PropagationDispatchNode<TNodeId extends string = string> = {\n _id?: TNodeId;\n nodeType?: string;\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n publicationStatus?: string;\n metadata?: unknown;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n opinion_a?: number;\n};\n\nexport type PropagationDispatchEdge<TNodeId extends string = string> =\n PropagationEdgeRecord<TNodeId>;\n\nexport type ConfidencePropagationDispatch<TNodeId extends string = string> = {\n targetNodeId: TNodeId;\n edgeType: PropagationEdgeType;\n traversedDirection: PropagationTraversalDirection;\n weight: number;\n opinion: SLOpinion;\n operator: SLOperator;\n rationale: string;\n hop: number;\n};\n\nfunction resolveTraversalTargetNodeId<TNodeId extends string>(\n edge: PropagationDispatchEdge<TNodeId>,\n direction: PropagationTraversalDirection\n): TNodeId | undefined {\n const targetNodeId =\n direction === \"outgoing\" ? edge.toNodeId : edge.fromNodeId;\n return targetNodeId ?? undefined;\n}\n\nfunction readNodeOpinion<TNodeId extends string>(\n node: PropagationDispatchNode<TNodeId>\n): SLOpinion {\n const metadata = (node.metadata ?? {}) as Record<string, unknown>;\n\n try {\n return readOpinionFromRecord({\n ...metadata,\n opinion_b: node.opinion_b,\n opinion_d: node.opinion_d,\n opinion_u: node.opinion_u,\n opinion_a: node.opinion_a,\n });\n } catch {\n return mkOpinion(0, 0, 1, 0.5);\n }\n}\n\nexport async function collectConfidencePropagationDispatches<\n TNodeId extends string = string,\n>(args: {\n sourceNodeId: TNodeId;\n sourceOpinion: SLOpinion;\n sourceScope?: PropagationDispatchScope;\n traversalSpecs?: readonly EdgePropagationSpec<TNodeId>[];\n queryEdges: (args: {\n nodeId: TNodeId;\n spec: EdgePropagationSpec<TNodeId>;\n direction: PropagationTraversalDirection;\n hop: number;\n }) => Promise<ReadonlyArray<PropagationDispatchEdge<TNodeId>>>;\n getNode: (\n nodeId: TNodeId\n ) => Promise<PropagationDispatchNode<TNodeId> | null | undefined>;\n}): Promise<ConfidencePropagationDispatch<TNodeId>[]> {\n const dispatchesByTargetId = new Map<\n string,\n ConfidencePropagationDispatch<TNodeId>\n >();\n const opinionCache = new Map<string, SLOpinion>();\n const nodeCache = new Map<\n string,\n PropagationDispatchNode<TNodeId> | null | undefined\n >();\n const traversalSpecs = (args.traversalSpecs ??\n getEdgePropagationSpecs()) as readonly EdgePropagationSpec<TNodeId>[];\n const queue: Array<{\n nodeId: TNodeId;\n opinion: SLOpinion;\n hop: number;\n visitedNodeIds: Set<string>;\n }> = [\n {\n nodeId: args.sourceNodeId,\n opinion: args.sourceOpinion,\n hop: 0,\n visitedNodeIds: new Set([String(args.sourceNodeId)]),\n },\n ];\n\n const loadNode = async (nodeId: TNodeId) => {\n const cacheKey = String(nodeId);\n if (!nodeCache.has(cacheKey)) {\n nodeCache.set(cacheKey, await args.getNode(nodeId));\n }\n return nodeCache.get(cacheKey) ?? null;\n };\n\n while (queue.length > 0) {\n const state = queue.shift();\n if (!state) {\n continue;\n }\n\n for (const spec of traversalSpecs) {\n const nextHop = state.hop + 1;\n if (!canTraverseHop(spec, nextHop)) {\n continue;\n }\n\n for (const direction of getTraversalDirections(spec.direction)) {\n const edges = await args.queryEdges({\n nodeId: state.nodeId,\n spec,\n direction,\n hop: nextHop,\n });\n\n for (const edge of edges) {\n if (\n args.sourceScope &&\n !edgeMatchesWorkspaceReasoningScope(edge, args.sourceScope)\n ) {\n continue;\n }\n\n const targetNodeId = resolveTraversalTargetNodeId(edge, direction);\n if (!targetNodeId) {\n continue;\n }\n\n if (state.visitedNodeIds.has(String(targetNodeId))) {\n continue;\n }\n\n const targetNode = await loadNode(targetNodeId);\n if (!targetNode || targetNode.nodeType !== \"belief\") {\n continue;\n }\n\n if (\n args.sourceScope &&\n !nodeMatchesWorkspaceReasoningScope(targetNode, args.sourceScope)\n ) {\n continue;\n }\n\n const cacheKey = String(targetNodeId);\n const targetOpinion =\n opinionCache.get(cacheKey) ?? readNodeOpinion(targetNode);\n const result = spec.operator(state.opinion, targetOpinion, edge, {\n hop: nextHop,\n sourceNodeId: state.nodeId,\n targetNodeId,\n traversedDirection: direction,\n spec,\n });\n\n if (\n !result ||\n !hasProjectedOpinionChanged(targetOpinion, result.opinion)\n ) {\n continue;\n }\n\n const projectedOpinion = mkOpinion(\n result.opinion.b,\n result.opinion.d,\n result.opinion.u,\n result.opinion.a\n );\n\n opinionCache.set(cacheKey, projectedOpinion);\n\n const existingDispatch = dispatchesByTargetId.get(cacheKey);\n dispatchesByTargetId.set(cacheKey, {\n targetNodeId,\n edgeType: spec.edgeType,\n traversedDirection: direction,\n weight: edge.weight ?? 1,\n opinion: projectedOpinion,\n operator: result.operator,\n rationale: existingDispatch\n ? `${existingDispatch.rationale}; ${result.rationale}`\n : result.rationale,\n hop: nextHop,\n });\n\n if (canContinueTransitively(spec, nextHop)) {\n queue.push({\n nodeId: targetNodeId,\n opinion: projectedOpinion,\n hop: nextHop,\n visitedNodeIds: new Set([\n ...state.visitedNodeIds,\n String(targetNodeId),\n ]),\n });\n }\n }\n }\n }\n }\n\n return Array.from(dispatchesByTargetId.values()).sort((left, right) => {\n if (left.hop !== right.hop) {\n return left.hop - right.hop;\n }\n return String(left.targetNodeId).localeCompare(String(right.targetNodeId));\n });\n}\n","/**\n * Shared helper to schedule embedding generation after epistemic node creation.\n *\n * Best-effort — failures are silently caught. The embedding generation action\n * is a public action in convex/embeddingActions.ts that calls Pinecone.\n */\n\nimport type { Id } from \"./convex\";\n\ninterface EmbeddingTriggerArgs {\n ctx: any;\n nodeId: Id<\"epistemicNodes\">;\n projectId?: string | null;\n topicId?: string | null;\n createdBy: string;\n nodeType:\n | \"belief\"\n | \"question\"\n | \"evidence\"\n | \"answer\"\n | \"synthesis\"\n | \"theme\"\n | \"source\";\n text: string;\n hasAnswer?: boolean;\n confidence?: number;\n}\n\nexport async function scheduleEmbeddingGeneration(args: EmbeddingTriggerArgs): Promise<void> {\n try {\n await args.ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId: args.nodeId,\n projectId: args.projectId ? String(args.projectId) : undefined,\n topicId: args.topicId ? String(args.topicId) : undefined,\n createdBy: args.createdBy,\n nodeType: args.nodeType,\n text: args.text.slice(0, 20_000),\n hasAnswer: args.hasAnswer,\n confidence: args.confidence,\n }\n );\n } catch {\n // Embedding generation is best-effort — never block node creation\n }\n}\n","/**\n * Shared UUID v4 generator for global IDs.\n *\n * Uses crypto.getRandomValues() for collision-safe generation.\n * Replaces the Math.random()-based UUID pattern that was duplicated\n * across 7+ files.\n *\n * @module convex/lib/globalId\n */\n\n/**\n * Generate a UUID v4 global ID using crypto-safe random bytes.\n */\nexport function generateGlobalId(): string {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n // Set version (4) and variant (RFC 4122)\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, \"0\")).join(\n \"\"\n );\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n","/**\n * logicalRoleInference module implementation.\n */\n\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\n\ntype LogicalRole =\n | \"necessary\"\n | \"sufficient\"\n | \"necessary_sufficient\"\n | \"contributory\"\n | \"corroborative\";\n\nconst PILLAR_IMPORTANCE: Record<string, number> = {\n market: 1,\n competition: 2,\n product: 3,\n team: 4,\n financials: 5,\n timing: 6,\n other: 10,\n};\n\ntype GraphCtx = QueryCtx | MutationCtx;\n\nexport async function computeLogicalRole(\n ctx: GraphCtx,\n evidenceId: Id<\"epistemicNodes\">,\n beliefId: Id<\"epistemicNodes\">\n): Promise<LogicalRole> {\n const belief = await ctx.db.get(beliefId);\n if (!belief || belief.nodeType !== \"belief\") {\n return \"contributory\";\n }\n\n const beliefMetadata = belief.metadata as Record<string, unknown> | undefined;\n const pillar = (beliefMetadata?.pillar as string) || \"other\";\n const pillarRank = PILLAR_IMPORTANCE[pillar] ?? 10;\n\n const isSynthesized = await checkIfSynthesizedHypothesis(ctx, beliefId);\n const testingQuestions = await getTestingQuestionsForBelief(ctx, beliefId);\n const answeredQuestions = await getQuestionsAnsweredByEvidence(\n ctx,\n evidenceId\n );\n const directlyTests = testingQuestions.filter((questionId) =>\n answeredQuestions.includes(questionId)\n );\n\n if (directlyTests.length === 0) {\n return \"contributory\";\n }\n\n if (isSynthesized && pillarRank <= 2) {\n return directlyTests.length > 1 ? \"necessary_sufficient\" : \"necessary\";\n }\n\n if (isSynthesized) {\n return \"necessary\";\n }\n\n return directlyTests.length > 1 ? \"necessary\" : \"contributory\";\n}\n\nasync function checkIfSynthesizedHypothesis(\n ctx: GraphCtx,\n beliefId: Id<\"epistemicNodes\">\n): Promise<boolean> {\n const belief = await ctx.db.get(beliefId);\n if (!belief) {\n return false;\n }\n\n const metadata = belief.metadata as Record<string, unknown> | undefined;\n return (\n metadata?.isSynthesized === true ||\n metadata?.beliefStatus === \"hypothesis\"\n );\n}\n\nasync function getTestingQuestionsForBelief(\n ctx: GraphCtx,\n beliefId: Id<\"epistemicNodes\">\n): Promise<string[]> {\n const testEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", beliefId).eq(\"edgeType\", \"tests\")\n )\n .collect();\n\n return testEdges\n .map((edge) => edge.fromNodeId as string)\n .filter((id): id is string => id !== undefined);\n}\n\nasync function getQuestionsAnsweredByEvidence(\n ctx: GraphCtx,\n evidenceId: Id<\"epistemicNodes\">\n): Promise<string[]> {\n const answerEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_type\", (q) =>\n q.eq(\"fromNodeId\", evidenceId).eq(\"edgeType\", \"derived_from\")\n )\n .collect();\n\n return answerEdges\n .map((edge) => edge.toNodeId as string)\n .filter((id): id is string => id !== undefined);\n}\n","import { api } from \"./convex\";\n\ntype OverlayIdMode = \"legacy\" | \"topic\";\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype LegacyProjectThesis = {\n statement: string;\n confidence: number;\n lastUpdated: number;\n};\n\ntype LegacyPillarImportance =\n | \"critical\"\n | \"major\"\n | \"minor\"\n | \"not_applicable\";\n\ntype LegacyThesisPillarConfig = {\n pillarImportance?: Record<string, LegacyPillarImportance | undefined>;\n configuredAt?: number;\n configuredBy?: string;\n aiSuggestion?: {\n suggestedAt: number;\n reasoning: string;\n };\n};\n\ntype LegacyBeliefArchitecture = {\n overallMaturity: number;\n pillarScores: Array<Record<string, unknown>>;\n lastCalculated: number;\n};\n\ntype LegacyOntologyClassification = {\n valueChains: Array<Record<string, unknown>>;\n functions: Array<Record<string, unknown>>;\n overallConfidence: number;\n classifiedAt: number;\n};\n\ntype TopicDocLike = Record<string, unknown> & {\n _id: string;\n _creationTime?: number;\n globalId?: string;\n name?: string;\n description?: string;\n type?: string;\n tenantId?: string;\n workspaceId?: string;\n status?: string;\n visibility?: string;\n createdBy?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectOverlay = Record<string, unknown> & {\n _id: string;\n projectId: string;\n topicId: string;\n storageProjectId: string;\n legacyProjectId?: string;\n name: string;\n type: string;\n description?: string;\n ownerId: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n tags: string[];\n chatCount: number;\n artifactCount: number;\n lastActivityAt: number;\n thesis?: LegacyProjectThesis;\n wedgeHypothesis?: string;\n founderArchetype?: string;\n investmentCriteria?: string[];\n sprintPhase?:\n | \"pre_sprint\"\n | \"readiness_check\"\n | \"thesis_crystallization\"\n | \"sprint_planning\"\n | \"active_sprint\"\n | \"theme_assembly\"\n | \"evolution\";\n currentSprintIndex?: number;\n thesisPillarConfig?: LegacyThesisPillarConfig;\n beliefArchitecture?: LegacyBeliefArchitecture;\n ontologyClassification?: LegacyOntologyClassification;\n _creationTime: number;\n createdAt: number;\n updatedAt: number;\n};\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readNonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction readMetadata(topic: TopicDocLike): Record<string, unknown> {\n return topic.metadata && typeof topic.metadata === \"object\"\n ? topic.metadata\n : {};\n}\n\nfunction readLegacyProjectId(\n value: Record<string, unknown> | null | undefined\n): string | undefined {\n if (!value) {\n return;\n }\n return readNonEmptyString(value[LEGACY_SCOPE_FIELD]);\n}\n\nfunction coerceVisibility(\n value: unknown\n): TopicProjectOverlay[\"visibility\"] | undefined {\n return value === \"private\" ||\n value === \"team\" ||\n value === \"firm\" ||\n value === \"external\" ||\n value === \"public\"\n ? value\n : undefined;\n}\n\nfunction coerceStatus(\n value: unknown\n): TopicProjectOverlay[\"status\"] | undefined {\n return value === \"active\" || value === \"archived\" || value === \"watching\"\n ? value\n : undefined;\n}\n\nfunction mapProjectType(\n topic: TopicDocLike,\n metadata: Record<string, unknown>\n): string {\n const explicit = readNonEmptyString(metadata.projectType);\n if (explicit) {\n return explicit;\n }\n if (topic.type === \"theme\") {\n return \"thematic\";\n }\n return readNonEmptyString(topic.type) || \"general\";\n}\n\nfunction isProjectLikeTopic(topic: TopicDocLike): boolean {\n const metadata = readMetadata(topic);\n return (\n topic.type === \"theme\" ||\n topic.type === \"thematic\" ||\n topic.type === \"deal\" ||\n topic.type === \"monitoring\" ||\n readLegacyProjectId(topic) !== undefined ||\n readNonEmptyString(metadata.projectType) !== undefined\n );\n}\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found'\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nasync function resolveTopicDoc(\n ctx: any,\n scopeId: string\n): Promise<TopicDocLike | null> {\n if (ctx?.db && typeof ctx.db.get === \"function\") {\n try {\n const directTopic = (await ctx.db.get(scopeId as any)) as TopicDocLike | null;\n if (directTopic) {\n return directTopic;\n }\n } catch {\n // Not a direct topics-table id.\n }\n }\n\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.get as any, {\n id: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch {\n // Fall through to legacy-scope lookup.\n }\n\n try {\n const topic = await ctx.runQuery(api.topics.getByLegacyScopeId as any, {\n projectId: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch {\n // Best-effort compat lookup only.\n }\n\n return null;\n}\n\nexport function materializeTopicProjectOverlay(\n topic: TopicDocLike,\n idMode: OverlayIdMode = \"legacy\"\n): TopicProjectOverlay {\n const metadata = readMetadata(topic);\n const topicId = String(topic._id);\n const legacyProjectId =\n readLegacyProjectId(topic) ||\n readLegacyProjectId(metadata) ||\n readNonEmptyString(metadata.legacyProjectId);\n const storageProjectId = legacyProjectId || topicId;\n const outwardId = idMode === \"topic\" ? topicId : storageProjectId;\n const visibility =\n coerceVisibility(topic.visibility) ||\n coerceVisibility(metadata.visibility) ||\n \"private\";\n const status =\n coerceStatus(topic.status) || coerceStatus(metadata.status) || \"active\";\n const createdAt =\n typeof topic.createdAt === \"number\"\n ? topic.createdAt\n : typeof topic._creationTime === \"number\"\n ? topic._creationTime\n : 0;\n const updatedAt =\n typeof topic.updatedAt === \"number\"\n ? topic.updatedAt\n : typeof metadata.updatedAt === \"number\"\n ? (metadata.updatedAt as number)\n : createdAt;\n\n return {\n ...metadata,\n _id: outwardId,\n projectId: outwardId,\n topicId,\n storageProjectId,\n legacyProjectId,\n name: readNonEmptyString(topic.name) || \"Untitled Theme\",\n type: mapProjectType(topic, metadata),\n description: readNonEmptyString(topic.description),\n ownerId:\n readNonEmptyString(metadata.ownerId) ||\n readNonEmptyString(topic.createdBy) ||\n \"system\",\n sharedWith: readStringArray(metadata.sharedWith),\n visibility,\n tenantId:\n readNonEmptyString(topic.tenantId) ||\n readNonEmptyString(metadata.tenantId),\n workspaceId:\n readNonEmptyString(topic.workspaceId) ||\n readNonEmptyString(metadata.workspaceId),\n status,\n tags: readStringArray(metadata.tags),\n chatCount:\n typeof metadata.chatCount === \"number\" ? (metadata.chatCount as number) : 0,\n artifactCount:\n typeof metadata.artifactCount === \"number\"\n ? (metadata.artifactCount as number)\n : 0,\n lastActivityAt:\n typeof metadata.lastActivityAt === \"number\"\n ? (metadata.lastActivityAt as number)\n : updatedAt,\n _creationTime:\n typeof topic._creationTime === \"number\" ? topic._creationTime : createdAt,\n createdAt,\n updatedAt,\n };\n}\n\nexport async function resolveTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n if (options.projectLikeOnly !== false && !isProjectLikeTopic(topic)) {\n return null;\n }\n return materializeTopicProjectOverlay(topic, options.idMode);\n}\n\nexport async function listTopicProjectOverlays(\n ctx: any,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay[]> {\n let allTopics: TopicDocLike[] = [];\n\n if (ctx?.db?.query && typeof ctx.db.query === \"function\") {\n try {\n allTopics = (await ctx.db.query(\"topics\").collect()) as TopicDocLike[];\n } catch {\n allTopics = [];\n }\n }\n\n if (allTopics.length === 0 && typeof ctx.runQuery === \"function\") {\n allTopics =\n (((await ctx.runQuery(api.topics.list as any, {})) ?? []) as TopicDocLike[]) ||\n [];\n }\n\n return allTopics\n .filter(\n (topic) => options.projectLikeOnly === false || isProjectLikeTopic(topic)\n )\n .map((topic) => materializeTopicProjectOverlay(topic, options.idMode));\n}\n\nexport async function patchTopicProjectOverlay(\n ctx: any,\n scopeId: string,\n value: Record<string, unknown>\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n\n const nextMetadata = { ...readMetadata(topic) };\n const patch: Record<string, unknown> = {};\n const topicUpdateArgs: Record<string, unknown> = {\n id: String(topic._id),\n };\n\n for (const [key, rawValue] of Object.entries(value)) {\n switch (key) {\n case \"_id\":\n case \"projectId\":\n case \"topicId\":\n case \"legacyProjectId\":\n case \"storageProjectId\":\n break;\n case \"name\":\n case \"description\":\n patch[key] = rawValue;\n topicUpdateArgs[key] = rawValue;\n break;\n case \"tenantId\":\n case \"workspaceId\":\n case \"ownerId\":\n throw new Error(\n `patchTopicProjectOverlay cannot mutate ${key} via component-owned topics`\n );\n case \"status\": {\n const status = coerceStatus(rawValue);\n if (status) {\n patch.status = status;\n topicUpdateArgs.status = status;\n }\n break;\n }\n case \"visibility\": {\n const visibility = coerceVisibility(rawValue);\n if (visibility) {\n patch.visibility = visibility;\n topicUpdateArgs.visibility = visibility;\n }\n break;\n }\n case \"type\": {\n const projectType = readNonEmptyString(rawValue);\n if (projectType) {\n nextMetadata.projectType = projectType;\n } else {\n delete nextMetadata.projectType;\n }\n break;\n }\n case \"updatedAt\":\n case \"createdAt\":\n break;\n default:\n if (rawValue === undefined) {\n delete nextMetadata[key];\n } else {\n nextMetadata[key] = rawValue;\n }\n }\n }\n\n patch.updatedAt = Date.now();\n patch.metadata = nextMetadata;\n topicUpdateArgs.metadata = nextMetadata;\n\n if (typeof ctx.runMutation === \"function\") {\n try {\n await ctx.runMutation(api.topics.update as any, topicUpdateArgs);\n } catch (error) {\n if (\n !isMissingLucernChildComponentError(error) ||\n !ctx?.db ||\n typeof ctx.db.patch !== \"function\"\n ) {\n throw error;\n }\n await ctx.db.patch(String(topic._id) as any, patch);\n }\n } else if (ctx?.db && typeof ctx.db.patch === \"function\") {\n await ctx.db.patch(String(topic._id) as any, patch);\n } else {\n throw new Error(\n \"Cannot patch topic without component adapter (ctx.runMutation unavailable)\"\n );\n }\n\n return materializeTopicProjectOverlay(\n {\n ...topic,\n ...patch,\n metadata: nextMetadata,\n } as TopicDocLike\n );\n}\n\nexport function matchesTopicProjectOverlayAccess(\n accessibleProjectIds: Set<string>,\n project: { topicId: string; legacyProjectId?: string; storageProjectId?: string }\n): boolean {\n return (\n accessibleProjectIds.has(project.storageProjectId || project.topicId) ||\n accessibleProjectIds.has(project.topicId) ||\n (typeof project.legacyProjectId === \"string\" &&\n accessibleProjectIds.has(project.legacyProjectId))\n );\n}\n","/** Data-source resolver wiring for the graph-primitives module. */\nimport {\n listTopicProjectOverlays,\n patchTopicProjectOverlay,\n resolveTopicProjectOverlay,\n} from \"./topicProjectOverlay\";\nimport type {\n GraphPrimitivesAppResolverContext,\n GraphPrimitivesAppResolvers,\n} from \"./resolverTypes\";\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n return (\n message.includes('Child component ComponentName(Identifier(\"lucern\")) not found') ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction isAdvisoryTopicPatch(value: Record<string, unknown>): boolean {\n const advisoryKeys = new Set([\"lastActivityAt\", \"updatedAt\"]);\n const keys = Object.keys(value);\n return keys.length > 0 && keys.every((key) => advisoryKeys.has(key));\n}\n\nasync function patchProjectWithTolerance(\n ctx: GraphPrimitivesAppResolverContext,\n projectId: string,\n value: Record<string, unknown>\n): Promise<void> {\n try {\n await patchTopicProjectOverlay(ctx, projectId, value);\n } catch (error) {\n if (\n !isAdvisoryTopicPatch(value) ||\n !isMissingLucernChildComponentError(error)\n ) {\n throw error;\n }\n\n console.warn(\"[lucern graph-primitives] Non-fatal advisory topic patch failure\", {\n projectId,\n keys: Object.keys(value),\n error: error instanceof Error ? error.message : error,\n });\n }\n}\n\nfunction defaultResolvers(): GraphPrimitivesAppResolvers {\n return {\n async getProject(ctx, projectId) {\n return await resolveTopicProjectOverlay(ctx, projectId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n });\n },\n async patchProject(ctx, projectId, value) {\n await patchProjectWithTolerance(ctx, projectId, value);\n },\n async listTopics(ctx) {\n return await listTopicProjectOverlays(ctx, {\n idMode: \"legacy\",\n });\n },\n async getFinalArtifact(ctx, artifactId) {\n return await ctx.db.get(artifactId);\n },\n };\n}\n\nlet resolverOverrides: Partial<GraphPrimitivesAppResolvers> = {};\n\nexport function configureGraphPrimitivesAppResolvers(\n overrides: Partial<GraphPrimitivesAppResolvers>\n): void {\n resolverOverrides = {\n ...resolverOverrides,\n ...overrides,\n };\n}\n\nexport function resetGraphPrimitivesAppResolvers(): void {\n resolverOverrides = {};\n}\n\nexport function resolveGraphPrimitivesAppResolvers(\n _ctx: GraphPrimitivesAppResolverContext\n): GraphPrimitivesAppResolvers {\n return {\n ...defaultResolvers(),\n ...resolverOverrides,\n };\n}\n","/**\n * Epistemic Beliefs API\n *\n * Clean API for managing beliefs in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces beliefs.ts.\n *\n * Key differences from beliefs.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no runtime ID translation fallback)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { v } from \"convex/values\";\nimport {\n detectTupleContradiction,\n evaluateTupleContradictionTransition,\n confidenceFromSL,\n mkOpinion,\n normalizeTupleContradictionPolicy,\n readOpinionFromRecord,\n type ConfidencePolicyConfig,\n type Opinion,\n type SLOpinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport {\n checkProjectAccess,\n checkScopeAccess,\n} from \"@lucern/access-control/access\";\nimport {\n canAudienceClassAccess,\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { listAudienceRegistryRows } from \"@lucern/access-control/audienceRegistry\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { assertSchemaEnumValue } from \"@lucern/contracts/schema-helpers/enumValidation\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport {\n type BeliefLifecycleStatus,\n isPreValidationBeliefStatus,\n promoteBeliefStatusAfterScoring,\n resolveBeliefLifecycleStatus,\n} from \"./beliefLifecycle\";\nimport type { Doc, Id, MutationCtx } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport { collectConfidencePropagationDispatches } from \"./confidencePropagationDispatch\";\nimport {\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): SLOpinion {\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 try {\n return readOpinionFromRecord(source);\n } catch {\n return mkOpinion(0, 0, 1, 0.5);\n }\n }\n\n const confidence = clamp01(readFiniteNumber(source.confidence) ?? 0);\n return mkOpinion(confidence, 1 - confidence, 0, 0.5);\n}\n\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): SLOpinion {\n try {\n return readOpinionFromRecord({\n ...metadata,\n opinion_b: (node as any).opinion_b,\n opinion_d: (node as any).opinion_d,\n opinion_u: (node as any).opinion_u,\n opinion_a: (node as any).opinion_a,\n });\n } catch {\n return mkOpinion(0, 0, 1, 0.5);\n }\n}\n\nfunction deriveTupleContradictionSeverity(\n node: Doc<\"epistemicNodes\">\n): \"critical\" | \"significant\" | \"minor\" {\n const metadata = (node.metadata || {}) as Record<string, unknown>;\n const criticality = typeof metadata.criticality === \"string\"\n ? metadata.criticality\n : undefined;\n\n if (criticality === \"blocking\") {\n return \"critical\";\n }\n if (criticality === \"supporting\") {\n return \"minor\";\n }\n return \"significant\";\n}\n\nfunction formatTupleContradictionDescription(args: {\n opinion: Opinion;\n policy: ConfidencePolicyConfig[\"tupleContradiction\"];\n}): string {\n return `Tuple-space contradiction detected: b=${args.opinion.b.toFixed(2)} > ${args.policy.beliefThreshold.toFixed(2)} and d=${args.opinion.d.toFixed(2)} > ${args.policy.disbeliefThreshold.toFixed(2)}.`;\n}\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction generateContentHash(text: string): string {\n const content = `belief:${text.trim().toLowerCase().replace(/\\s+/g, \" \")}`;\n let hash = 5381;\n for (let i = 0; i < content.length; i++) {\n hash = (hash << 5) + hash + content.charCodeAt(i);\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\nexport function resolveBeliefWorktreeId(\n metadata: Record<string, unknown> | undefined\n): string | undefined {\n const worktreeId = metadata?.worktreeId;\n if (typeof worktreeId === \"string\" && worktreeId.trim().length > 0) {\n return worktreeId;\n }\n\n const sprintId = metadata?.sprintId;\n return typeof sprintId === \"string\" && sprintId.trim().length > 0\n ? sprintId\n : undefined;\n}\n\n// Map pillar names to valid pillar literals\ntype ValidPillar =\n | \"market\"\n | \"competition\"\n | \"product\"\n | \"team\"\n | \"financials\"\n | \"regulatory\"\n | \"timing\"\n | \"customer\"\n | \"technology\"\n | \"distribution\"\n | \"deal\"\n | \"risks\"\n | \"other\";\n\nfunction normalizePillar(pillar?: string): ValidPillar {\n if (!pillar) {\n return \"other\";\n }\n const lower = pillar.toLowerCase();\n const validPillars: ValidPillar[] = [\n \"market\",\n \"competition\",\n \"product\",\n \"team\",\n \"financials\",\n \"regulatory\",\n \"timing\",\n \"customer\",\n \"technology\",\n \"distribution\",\n \"deal\",\n \"risks\",\n ];\n return (validPillars.find((p) => lower.includes(p)) ||\n \"other\") as ValidPillar;\n}\n\nasync function markBeliefGraphDirty(\n ctx: any,\n scope: { projectId?: string | null; topicId?: string | null }\n): Promise<void> {\n const projectId =\n typeof scope.projectId === \"string\" && scope.projectId.trim().length > 0\n ? scope.projectId\n : undefined;\n const topicId =\n typeof scope.topicId === \"string\" && scope.topicId.trim().length > 0\n ? scope.topicId\n : undefined;\n\n if (!projectId && !topicId) {\n return;\n }\n\n if (projectId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n { projectId }\n );\n }\n if (topicId) {\n await ctx.scheduler.runAfter(\n 0,\n (internal.graphAnalysisCache as any).markCacheStaleByTopic,\n { topicId }\n );\n }\n\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n topicId ?? projectId!,\n {\n lastActivityAt: Date.now(),\n }\n );\n}\n\nasync function resolveBeliefScopeOrNull(\n ctx: any,\n args: BeliefScopeArgs\n) {\n if (!args.projectId && !args.topicId) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n projectId: args.projectId ?? undefined,\n topicId: args.topicId ?? undefined,\n });\n } catch {\n return null;\n }\n}\n\nasync function getBeliefNodesForScope(\n ctx: {\n db: {\n query: (...args: any[]) => {\n withIndex: (...args: any[]) => any;\n };\n };\n },\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n args?: { scanLimit?: number; status?: string }\n) {\n const baseQuery = ctx.db.query(\"epistemicNodes\").withIndex(\n \"by_topic_type\",\n (q: any) => q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n );\n const nodes =\n typeof args?.scanLimit === \"number\"\n ? await baseQuery.order(\"desc\").take(args.scanLimit)\n : await baseQuery.collect();\n const scopedNodes = nodes.filter((node: Doc<\"epistemicNodes\">) =>\n nodeMatchesWorkspaceReasoningScope(node, scope)\n );\n\n if (!args?.status) {\n return scopedNodes;\n }\n\n return scopedNodes.filter((node) => node.status === args.status);\n}\n\nfunction createBeliefAudienceResolver(\n registryRows: Array<{\n audienceKey?: string | null;\n audienceClass: AudienceClass;\n }>\n) {\n const audienceClassByKey = new Map<string, AudienceClass>(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ])\n );\n\n return (\n audienceKey: string | undefined | null,\n fallback: AudienceClass\n ): AudienceClass => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return (\n audienceClassByKey.get(key) ??\n (classFromAudienceKey(key, fallback) as AudienceClass)\n );\n };\n}\n\nexport function flattenBeliefNode(node: Doc<\"epistemicNodes\">) {\n const meta = (node.metadata || {}) as Record<string, unknown>;\n const worktreeId = resolveBeliefWorktreeId(meta);\n const tupleContradicted =\n readTupleContradictedFlag((node as any).tupleContradicted) ??\n readTupleContradictedFlag(meta.tupleContradicted) ??\n false;\n\n return {\n _id: node._id,\n _epistemicNodeId: node._id,\n _creationTime: node._creationTime,\n belief: node.canonicalText,\n formulation: node.canonicalText,\n projectId: node.projectId,\n topicId: node.topicId,\n userId: (node as any).userId || node.createdBy || \"\",\n confidence: (meta.confidence as \"high\" | \"medium\" | \"low\") || \"untested\",\n status: node.status,\n beliefStatus: resolveBeliefStatus(node, meta),\n topic: (meta.topic as string) || (meta.pillar as string) || \"other\",\n pillar: (meta.pillar as string) || (meta.topic as string) || \"\",\n category: (meta.category as string) || \"\",\n subcategory: (meta.subcategory as string) || \"\",\n categoryIcon: (meta.categoryIcon as string) || \"\",\n supportingEvidence: (meta.supportingEvidenceIds as string[]) || [],\n contradictingEvidence: (meta.contradictingEvidenceIds as string[]) || [],\n testingQuestions: (meta.testingQuestionIds as string[]) || [],\n linkedInsights: (meta.linkedInsightIds as string[]) || [],\n createdAt: node.createdAt,\n updatedAt: node.updatedAt || node.createdAt,\n tupleContradicted,\n sprintId: (meta.sprintId as string) || undefined,\n worktreeId,\n sourceBeliefIds: (meta.sourceBeliefIds as string[]) || undefined,\n criticality:\n (meta.criticality as\n | \"critical\"\n | \"supporting\"\n | \"nice_to_have\"\n | \"unanalyzed\"\n | \"blocking\"\n | \"important\") || \"unanalyzed\",\n rationale: (meta.rationale as string) || \"\",\n audienceLabel: node.audienceLabel,\n policyTags: node.policyTags,\n sensitivityTier: node.sensitivityTier,\n exportClass: node.exportClass,\n anonymizationClass: node.anonymizationClass,\n };\n}\n\nfunction resolveBeliefStatus(\n node: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n },\n metadata: Record<string, unknown>\n): BeliefLifecycleStatus {\n return resolveBeliefLifecycleStatus({\n beliefStatus: node.beliefStatus,\n confidence: node.confidence,\n predictionMeta: node.predictionMeta,\n metadata,\n });\n}\n\nasync function hasCompletedWorktreeForBelief(\n ctx: { db: any },\n beliefNodeId: Id<\"epistemicNodes\">,\n): Promise<boolean> {\n // Check if the belief is linked to a completed worktree via worktreeBeliefCluster\n const clusterMembership = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_belief\", (q: any) => q.eq(\"beliefId\", beliefNodeId))\n .collect();\n for (const membership of clusterMembership) {\n const worktree = await ctx.db.get(membership.worktreeId);\n if (worktree?.status === \"completed\" || worktree?.status === \"merged\") {\n return true;\n }\n }\n return false;\n}\n\nasync function getActiveConfidencePolicy(\n ctx: { db: any },\n): Promise<ConfidencePolicyConfig> {\n try {\n const activeConfig = await ctx.db\n .query(\"logicSprintScoring\")\n .withIndex(\"by_active\", (q: any) => q.eq(\"isActive\", true))\n .first();\n\n return {\n scoringMode:\n activeConfig?.confidencePolicy === \"always\"\n ? \"always\"\n : DEFAULT_CONFIDENCE_POLICY.scoringMode,\n tupleContradiction: normalizeTupleContradictionPolicy(\n activeConfig?.tupleContradictionPolicy as\n | Partial<ConfidencePolicyConfig[\"tupleContradiction\"]>\n | undefined\n ),\n };\n } catch {\n // K-tier/component environments do not carry logicSprintScoring.\n return DEFAULT_CONFIDENCE_POLICY;\n }\n}\n\nexport async function applyBeliefConfidenceChange(\n ctx: MutationCtx,\n args: {\n nodeId: Id<\"epistemicNodes\">;\n // SL opinion — the ONLY confidence input (EK-7)\n belief: number; // b: evidence FOR [0,1]\n disbelief: number; // d: evidence AGAINST [0,1]\n uncertainty: number; // u: lack of evidence [0,1]\n baseRate?: number; // a: prior probability [0,1], defaults to 0.5\n trigger: BeliefConfidenceTrigger;\n rationale?: string;\n authenticatedUserId: string;\n slOperator?: SLOperator; // which SL operator produced this opinion\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringWorktreeId?: string;\n }\n): Promise<{\n nodeId: Id<\"epistemicNodes\">;\n previousConfidence: number;\n newConfidence: number;\n opinion: { b: number; d: number; u: number; a: number };\n beliefConfidenceId: Id<\"beliefConfidence\">;\n}> {\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node) {\n throwStructuredMutationError({\n message: \"Node not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion:\n \"Verify nodeId points to an existing node before modulating confidence.\",\n details: { nodeId: args.nodeId },\n });\n }\n if (node.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `modulateConfidence only applies to belief nodes. Received nodeType \"${node.nodeType}\". Entity nodes (company, person, investor, etc.) do not have confidence — use entityLifecycle.updateEntityAttributes for mutable entity data.`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"entity.no_confidence\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes for entity mutations. modulateConfidence is for belief nodes only.\",\n details: { nodeId: args.nodeId, nodeType: node.nodeType },\n });\n }\n if (!node.projectId) {\n throwStructuredMutationError({\n message: \"Belief has no project scope.\",\n status: 400,\n code: \"MISSING_SCOPE\",\n invariantCode: \"belief.project_required\",\n suggestion: \"Belief must have a projectId to modulate confidence.\",\n details: { nodeId: args.nodeId },\n });\n }\n await requireProjectWriteAccess(ctx, node.projectId, args.authenticatedUserId);\n\n const existingMetadata = (node.metadata || {}) as Record<string, unknown>;\n const currentBeliefStatus = resolveBeliefStatus(node, existingMetadata);\n const confidencePolicy = await getActiveConfidencePolicy(ctx);\n if (\n confidencePolicy.scoringMode === \"after_worktree\" &&\n isPreValidationBeliefStatus(currentBeliefStatus)\n ) {\n const hasCompletedWorktree = await hasCompletedWorktreeForBelief(\n ctx,\n args.nodeId,\n );\n if (!hasCompletedWorktree) {\n throwStructuredMutationError({\n message:\n \"Cannot score belief before worktree completion. Complete a worktree that tests this belief first.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"belief.confidence_append_only\",\n suggestion:\n \"Complete a worktree linked to this belief before recording confidence modulation.\",\n details: { nodeId: args.nodeId },\n });\n }\n }\n\n const previousConfidence = node.confidence || 0.5;\n const predictionMeta =\n (node as any).predictionMeta || existingMetadata.predictionMeta;\n const previousOpinion = readBeliefOpinionSnapshot(node, existingMetadata);\n\n // SL opinion — the only path (EK-7)\n const slB = args.belief;\n const slD = args.disbelief;\n const slU = args.uncertainty;\n const slA = args.baseRate ?? 0.5;\n const nextOpinion = { b: slB, d: slD, u: slU, a: slA };\n const derivedConfidence = confidenceFromSL(slB, slD, slU, slA);\n const isFirstScoring =\n typeof node.confidence !== \"number\" || !Number.isFinite(node.confidence);\n const previousTupleContradicted =\n readTupleContradictedFlag((node as any).tupleContradicted) ??\n readTupleContradictedFlag(existingMetadata.tupleContradicted) ??\n detectTupleContradiction(\n previousOpinion,\n confidencePolicy.tupleContradiction.beliefThreshold,\n confidencePolicy.tupleContradiction.disbeliefThreshold\n );\n const tupleTransition = evaluateTupleContradictionTransition({\n previousTupleContradicted,\n opinion: nextOpinion,\n policy: confidencePolicy.tupleContradiction,\n });\n const tupleContradictionDescription = formatTupleContradictionDescription({\n opinion: nextOpinion,\n policy: tupleTransition.policy,\n });\n\n const newBeliefStatus = promoteBeliefStatusAfterScoring(\n currentBeliefStatus,\n {\n confidence: derivedConfidence,\n predictionMeta,\n metadata: existingMetadata,\n }\n );\n\n let tupleContradictionId: Id<\"contradictions\"> | undefined;\n if (tupleTransition.crossedIntoTupleContradiction) {\n tupleContradictionId = (await ctx.runMutation(\"contradictions:create\" as any, {\n projectId: node.projectId,\n topicId: node.topicId as any,\n beliefId: args.nodeId,\n beliefBId: args.nodeId,\n supportingInsightIds: [],\n contradictingInsightIds: [],\n severity: deriveTupleContradictionSeverity(node),\n source: \"tuple_space\",\n detectionMethod: \"agent\",\n description: tupleContradictionDescription,\n createdBy: args.authenticatedUserId,\n })) as Id<\"contradictions\">;\n }\n\n await ctx.db.patch(args.nodeId, {\n confidence: derivedConfidence,\n beliefStatus: newBeliefStatus,\n tupleContradicted: tupleTransition.tupleContradicted,\n updatedAt: now,\n // Store SL opinion fields at node level for fast access\n opinion_b: slB,\n opinion_d: slD,\n opinion_u: slU,\n opinion_a: slA,\n metadata: {\n ...existingMetadata,\n beliefStatus: newBeliefStatus,\n slBelief: slB,\n slDisbelief: slD,\n slUncertainty: slU,\n slBaseRate: slA,\n tupleContradicted: tupleTransition.tupleContradicted,\n },\n } as any);\n\n if (isFirstScoring) {\n const nodeTopicId = node.topicId;\n const themeNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic\", (q: any) =>\n q.eq(\"topicId\", nodeTopicId || node.projectId))\n .filter((q) => q.eq(q.field(\"nodeType\"), \"theme\"))\n .collect();\n\n for (const theme of themeNodes) {\n if (theme.globalId && node.globalId) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: `edge-${node.globalId}-relates_to_thesis-${theme.globalId}`,\n fromGlobalId: node.globalId,\n toGlobalId: theme.globalId,\n edgeType: \"relates_to_thesis\",\n weight: derivedConfidence,\n createdBy: args.authenticatedUserId,\n topicId: String(node.projectId),\n fromNodeType: \"belief\",\n toNodeType: \"theme\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n }\n }\n }\n\n const storedRationale =\n args.rationale ??\n `Confidence changed from ${previousConfidence.toFixed(2)} (nodeId: ${args.nodeId})`;\n\n const beliefConfidenceId = (await ctx.db.insert(\"beliefConfidence\", {\n ...buildBeliefConfidenceRow({\n beliefId: args.nodeId as Id<\"epistemicNodes\">,\n belief: slB,\n disbelief: slD,\n uncertainty: slU,\n baseRate: slA,\n trigger: args.trigger,\n rationale: storedRationale,\n assessedBy: args.authenticatedUserId,\n assessedAt: now,\n slOperator: args.slOperator,\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringContradictionId: tupleContradictionId,\n triggeringWorktreeId: args.triggeringWorktreeId,\n }),\n } as any)) as Id<\"beliefConfidence\">;\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"confidence_changed\",\n previousState: {\n confidence: previousConfidence,\n tupleContradicted: previousTupleContradicted,\n },\n newState: {\n opinion: nextOpinion,\n confidence: derivedConfidence,\n trigger: args.trigger,\n rationale: storedRationale,\n tupleContradicted: tupleTransition.tupleContradicted,\n tupleContradictionPolicy: tupleTransition.policy,\n ...(tupleContradictionId\n ? { tupleContradictionId: String(tupleContradictionId) }\n : {}),\n },\n changedBy: args.authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n topicId: node.topicId,\n });\n\n if (\n tupleTransition.crossedIntoTupleContradiction ||\n tupleTransition.crossedOutOfTupleContradiction\n ) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n previousState: { tupleContradicted: previousTupleContradicted },\n newState: {\n tupleContradicted: tupleTransition.tupleContradicted,\n action: tupleTransition.crossedIntoTupleContradiction\n ? \"tuple_contradiction_detected\"\n : \"tuple_contradiction_cleared\",\n opinion: nextOpinion,\n tupleContradictionPolicy: tupleTransition.policy,\n ...(tupleContradictionId\n ? { tupleContradictionId: String(tupleContradictionId) }\n : {}),\n },\n rationale: tupleTransition.crossedIntoTupleContradiction\n ? tupleContradictionDescription\n : `Tuple-space contradiction cleared: b=${nextOpinion.b.toFixed(2)}, d=${nextOpinion.d.toFixed(2)} no longer exceed the configured policy thresholds.`,\n changedBy: args.authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n topicId: node.topicId,\n });\n }\n\n if (Math.abs(derivedConfidence - previousConfidence) >= 0.15) {\n await ctx.scheduler.runAfter(\n 5000,\n internal.bi.contradictionSemanticDetector.scanAffectedBeliefs,\n {\n beliefId: args.nodeId as string,\n projectId: node.projectId,\n }\n );\n }\n\n // WT-4: Re-evaluate publication rules after confidence changes.\n // Publication is visibility-based: rules auto-determine which workspace\n // nodes are exposed at tenant scope based on confidence thresholds, etc.\n if (node.workspaceId && node.tenantId) {\n await ctx.scheduler.runAfter(\n 0,\n (internal as any).publication.evaluateNodePublication,\n { nodeId: args.nodeId }\n );\n }\n\n return {\n nodeId: args.nodeId,\n previousConfidence,\n newConfidence: derivedConfidence,\n opinion: { b: slB, d: slD, u: slU, a: slA },\n beliefConfidenceId,\n };\n}\n\nfunction propagationTriggerForEdge(\n edgeType: string,\n weight: number\n): BeliefConfidenceTrigger {\n if (edgeType === \"contradicts\" || edgeType === \"refutes\") {\n return \"contradiction_detected\";\n }\n\n if ((edgeType === \"supports\" || edgeType === \"informs\") && weight < 0) {\n return \"contradiction_detected\";\n }\n\n return \"evidence_added\";\n}\n\n// =============================================================================\n// SL PROPAGATION — EDGE-DEFINED OPINION PROPAGATION (EK-7, LKC-5)\n// =============================================================================\n\n/**\n * Propagate a confidence change through graph edges whose specs allow it.\n *\n * After a belief is scored, this function:\n * 1. Reads the graph-primitives edge propagation specs\n * 2. Traverses matching incoming/outgoing/bidirectional edges hop by hop\n * 3. Applies the edge operator with per-hop damping and hop limits\n * 4. Writes propagated opinions as new beliefConfidence entries\n */\nexport const propagateConfidenceChange = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n opinion_b: v.number(),\n opinion_d: v.number(),\n opinion_u: v.number(),\n opinion_a: v.number(),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const sourceOpinion = mkOpinion(\n args.opinion_b,\n args.opinion_d,\n args.opinion_u,\n args.opinion_a\n );\n\n const sourceNode = await ctx.db.get(args.nodeId);\n const sourceScope = await resolveNodeScopeForWorkspaceIsolation(\n ctx,\n sourceNode\n );\n const dispatches = await collectConfidencePropagationDispatches({\n sourceNodeId: args.nodeId,\n sourceOpinion,\n sourceScope,\n queryEdges: async ({ nodeId, spec, direction }) => {\n return await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\n direction === \"outgoing\" ? \"by_from_type\" : \"by_to_type\",\n (q: any) =>\n direction === \"outgoing\"\n ? q.eq(\"fromNodeId\", nodeId).eq(\"edgeType\", spec.edgeType)\n : q.eq(\"toNodeId\", nodeId).eq(\"edgeType\", spec.edgeType)\n )\n .collect();\n },\n getNode: async (nodeId) => await ctx.db.get(nodeId),\n });\n\n for (const dispatch of dispatches) {\n 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.optional(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 ?? 0.5);\n const initialBeliefStatus = args.worktreeId ? \"hypothesis\" : \"assumption\";\n const initialEpistemicStatus = args.worktreeId ? \"hypothesis\" : \"assumption\";\n const seedOpinion = {\n opinion_b: 0,\n opinion_d: 0,\n opinion_u: 1,\n opinion_a: baseRate,\n };\n const pillar = normalizePillar(args.pillar);\n\n // Merge additional metadata with standard metadata\n const additionalMeta = (args.metadata as Record<string, unknown>) || {};\n\n // Create the epistemic node\n const beliefGlobalId = generateGlobalId();\n const nodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId: beliefGlobalId,\n nodeType: \"belief\",\n epistemicLayer: \"L3\",\n canonicalText: args.formulation,\n contentHash: generateContentHash(args.formulation),\n content: args.rationale,\n title:\n args.formulation.slice(0, 100) +\n (args.formulation.length > 100 ? \"...\" : \"\"),\n metadata: {\n pillar,\n // No confidenceLevel — only set after worktree completion via modulateConfidence()\n status: \"active\",\n worktreeId: args.worktreeId,\n beliefStatus: initialBeliefStatus,\n epistemicStatus: initialEpistemicStatus,\n tupleContradicted: false,\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n ...additionalMeta, // Includes isConditional if provided\n },\n beliefStatus: initialBeliefStatus as any,\n ...seedOpinion,\n tupleContradicted: false,\n // Classification fields\n reversibility: args.reversibility ?? \"reversible\",\n predictionMeta: args.predictionMeta,\n // Infer epistemicStatus based on context\n epistemicStatus: initialEpistemicStatus as any,\n sourceType: args.sourceType || \"human\",\n ...(normalizedBeliefType ? { beliefType: normalizedBeliefType } : {}),\n confidence: undefined, // No scalar confidence until worktree completion\n verificationStatus: \"unverified\",\n status: \"active\",\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n createdBy: authenticatedUserId,\n createdAt: now,\n updatedAt: now,\n });\n\n await ctx.db.insert(\n \"beliefConfidence\",\n buildBeliefConfidenceRow({\n beliefId: nodeId,\n belief: seedOpinion.opinion_b,\n disbelief: seedOpinion.opinion_d,\n uncertainty: seedOpinion.opinion_u,\n baseRate,\n trigger: \"initial\",\n rationale:\n \"LKC-2 mandatory prior: seeded vacuous opinion at belief creation.\",\n assessedBy: authenticatedUserId,\n assessedAt: now,\n slOperator: \"manual_assessment\",\n }) as any\n );\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Schedule embedding generation\n await scheduleEmbeddingGeneration({\n ctx, nodeId, projectId: scope.projectId, topicId: scope.topicId,\n createdBy: authenticatedUserId, nodeType: \"belief\", text: args.formulation,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: null,\n newState: {\n formulation: args.formulation,\n status: \"active\",\n baseRate: seedOpinion.opinion_a,\n tupleContradicted: false,\n opinion: {\n b: seedOpinion.opinion_b,\n d: seedOpinion.opinion_d,\n u: seedOpinion.opinion_u,\n a: seedOpinion.opinion_a,\n },\n },\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n // Schedule embedding generation for semantic search\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 0,\n \"embeddingActions:generateEpistemicNodeEmbedding\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n createdBy: authenticatedUserId,\n nodeType: \"belief\" as const,\n text: args.rationale\n ? `${args.formulation}\\n\\nRationale: ${args.rationale}`\n : args.formulation,\n // Don't pass confidence — \"untested\" is a string, but the\n // embedding action expects v.optional(v.number()). New beliefs\n // have no numeric confidence until scoring.\n }\n );\n }\n\n // ==========================================================================\n // GRAPH TOPOLOGY - SPRINT IS THE EPISTEMIC BOUNDARY\n // ==========================================================================\n //\n // The SPRINT connects beliefs to the theme, not belief creation.\n //\n // Flow:\n // 1. ASSUMPTION beliefs: Raw inputs, float disconnected from theme\n // 2. HYPOTHESIS (in sprint): Being tested, still no theme edge\n // 3. SCORED (sprint complete): NOW gets belongs_to edge to theme\n // - Edge weight = conviction level (high conviction = shorter edge)\n //\n // The belongs_to edge is created ONLY when:\n // - Sprint completes → belief becomes \"scored\" → create theme edge\n // - See: sprints.ts completeSprint mutation\n //\n // Other nodes NEVER connect directly to theme:\n // - Questions → test → Beliefs (not theme)\n // - Evidence → answer/inform → Questions/Beliefs (not theme)\n //\n // NO THEME EDGE CREATED HERE - HAPPENS IN SPRINT COMPLETION\n // ==========================================================================\n\n // ==========================================================================\n // ONTOLOGY: Schedule belief classification for entity extraction\n // ==========================================================================\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 2000, // 2 second delay\n internal.nodeClassification.scheduleClassification,\n {\n nodeId,\n nodeType: \"belief\",\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n // ==========================================================================\n // PILLAR: Auto-categorize uncategorized beliefs into canonical pillars\n // ==========================================================================\n if (pillar === \"other\" && (scope.projectId || scope.topicId)) {\n await ctx.scheduler.runAfter(\n 2500,\n \"beliefCategorization:autoCategorizeBelief\" as any,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n // ==========================================================================\n // TEMPORAL: Schedule LLM temporal classification (factual vs forecast)\n // Automatically determines if this is a prediction, extracts measure dates\n // and conditions. Users never need to tag beliefs manually.\n // ==========================================================================\n if (scope.projectId || scope.topicId) {\n await ctx.scheduler.runAfter(\n 3000, // 3 second delay — after entity extraction\n internal.beliefTemporalClassifier.classifyBelief,\n {\n nodeId,\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n }\n );\n }\n\n // ==========================================================================\n // CACHE: Invalidate graph analysis cache\n // ==========================================================================\n await markBeliefGraphDirty(ctx, {\n projectId: scope.projectId,\n topicId: String(scope.topicId),\n });\n\n return { nodeId };\n },\n});\n\n// =============================================================================\n// GET BY ID\n// =============================================================================\n\n/**\n * Get a belief by its epistemicNodes ID.\n */\nexport const getById = query({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n beliefId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const id = (args.nodeId ?? args.beliefId) as\n | Id<\"epistemicNodes\">\n | undefined;\n if (!id) {\n return null;\n }\n const node = await ctx.db.get(id);\n if (!node || node.nodeType !== \"belief\") {\n return null;\n }\n return node;\n },\n});\n\n// =============================================================================\n// REFINE BELIEF\n// =============================================================================\n\n/**\n * Refine an unscored belief in place.\n *\n * Lucern Invariant #1 + #2: Draft beliefs may be refined in place, but scored\n * beliefs are immutable and must be evolved through forkBelief().\n */\nexport const refineBelief = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n canonicalText: v.optional(v.string()),\n title: v.optional(v.string()),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node) {\n throwStructuredMutationError({\n message: \"Belief not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion: \"Verify nodeId points to an existing belief before refining.\",\n details: { nodeId: args.nodeId },\n });\n }\n if (node.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `refineBelief only applies to belief nodes. Received nodeType \"${node.nodeType}\".`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"entity.no_refine\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes for entity mutations.\",\n details: { nodeId: args.nodeId, nodeType: node.nodeType },\n });\n }\n if (!node.projectId) {\n throwStructuredMutationError({\n message: \"Belief has no project scope.\",\n status: 400,\n code: \"MISSING_SCOPE\",\n invariantCode: \"belief.project_required\",\n suggestion: \"Belief must have a projectId to refine.\",\n details: { nodeId: args.nodeId },\n });\n }\n\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n if (\n typeof node.confidence === \"number\" &&\n Number.isFinite(node.confidence)\n ) {\n throwStructuredMutationError({\n message:\n \"Scored beliefs are immutable. Use forkBelief to evolve a scored belief.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"belief.versioning.scored_immutable\",\n suggestion:\n \"Use forkBelief() to create a new version instead of refining in place.\",\n details: { nodeId: args.nodeId, confidence: node.confidence },\n });\n }\n\n const nextText =\n typeof args.canonicalText === \"string\" && args.canonicalText.trim().length > 0\n ? args.canonicalText.trim()\n : undefined;\n const nextTitle =\n typeof args.title === \"string\" && args.title.trim().length > 0\n ? args.title.trim()\n : undefined;\n\n const patch: Record<string, unknown> = { updatedAt: now };\n if (nextText !== undefined) {\n patch.canonicalText = nextText;\n patch.title =\n nextTitle ??\n nextText.slice(0, 100) +\n (nextText.length > 100 ? \"...\" : \"\");\n patch.contentHash = generateContentHash(nextText);\n } else if (nextTitle !== undefined) {\n patch.title = nextTitle;\n }\n if (args.rationale !== undefined) {\n patch.content = args.rationale;\n }\n\n await ctx.db.patch(args.nodeId, patch);\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n if (nextText !== undefined) {\n await scheduleEmbeddingGeneration({\n ctx,\n nodeId: args.nodeId,\n projectId: node.projectId,\n topicId: node.topicId,\n createdBy: authenticatedUserId,\n nodeType: \"belief\",\n text: args.rationale\n ? `${nextText}\\n\\nRationale: ${args.rationale}`\n : nextText,\n });\n }\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n canonicalText: node.canonicalText,\n title: node.title,\n content: node.content,\n },\n newState: {\n canonicalText:\n (patch.canonicalText as string | undefined) ?? node.canonicalText,\n title: (patch.title as string | undefined) ?? node.title,\n content: (patch.content as string | undefined) ?? node.content,\n action: \"refined\",\n rationale: args.rationale,\n },\n projectId: node.projectId,\n topicId: node.topicId,\n });\n\n await markBeliefGraphDirty(ctx, {\n projectId: node.projectId,\n topicId: node.topicId,\n });\n\n return { nodeId: args.nodeId };\n },\n});\n\n// =============================================================================\n// GET BY PROJECT\n// =============================================================================\n\n/**\n * Get all beliefs for a project.\n */\nexport const getByProject = query({\n args: {\n ...optionalBeliefScopeArgs,\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId && !args.topicId) {\n return [];\n }\n\n const pageSize = clampBeliefLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n let scope:\n | Awaited<ReturnType<typeof resolveTopicProjectScope>>\n | { tenantId: undefined; workspaceId: undefined; topicId?: undefined; projectId?: undefined };\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch {\n return [];\n }\n\n if (args.userId) {\n const scopeId = scope.topicId ? String(scope.topicId) : scope.projectId;\n if (!scopeId) {\n return [];\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n }\n\n const query = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n );\n\n const nodes = await query.order(\"desc\").take(scanLimit);\n const scopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, scope)\n );\n\n // Filter by status if provided\n if (args.status) {\n return scopedNodes\n .filter((n) => n.status === args.status)\n .slice(0, pageSize);\n }\n\n // Default: return active beliefs\n return scopedNodes.filter((n) => n.status === \"active\").slice(0, pageSize);\n },\n});\n\n/**\n * Get all beliefs for a topic.\n */\nexport const getByTopic = query({\n args: {\n topicId: v.string(),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampBeliefLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const scope = await resolveTopicProjectScope(ctx, { topicId: args.topicId });\n const query = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n );\n\n const nodes = await query.order(\"desc\").take(scanLimit);\n const scopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n })\n );\n if (args.status) {\n return scopedNodes\n .filter((n) => n.status === args.status)\n .slice(0, pageSize);\n }\n return scopedNodes.filter((n) => n.status === \"active\").slice(0, pageSize);\n },\n});\n\n// =============================================================================\n// FORK BELIEF\n// =============================================================================\n\n/**\n * Fork a belief - create a new version while preserving the original.\n * This is the Lucern-compliant way to \"update\" a belief.\n *\n * Lucern Invariant #1: Beliefs are append-only. Never modify formulation.\n * Lucern Invariant #3: Lineage is permanent.\n */\nexport const forkBelief = mutation({\n args: {\n parentNodeId: v.id(\"epistemicNodes\"),\n newFormulation: v.string(),\n forkReason: v.union(\n v.literal(\"refinement\"),\n v.literal(\"contradiction_response\"),\n v.literal(\"scope_change\"),\n v.literal(\"confidence_collapse\"),\n v.literal(\"manual\")\n ),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n const _confidencePolicy = await getActiveConfidencePolicy(ctx);\n\n // Get the parent belief\n const parent = await ctx.db.get(args.parentNodeId);\n if (!parent) {\n throwStructuredMutationError({\n message: \"Parent node not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion:\n \"Verify parentNodeId points to an existing node before forking.\",\n details: { parentNodeId: args.parentNodeId },\n });\n }\n if (parent.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `forkBelief only applies to belief nodes. Received nodeType \"${parent.nodeType}\". Entity nodes (company, person, investor, etc.) are mutable — use entityLifecycle.updateEntityAttributes instead of forking.`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"entity.no_fork\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes for entity mutations. forkBelief is for belief nodes only.\",\n details: { parentNodeId: args.parentNodeId, nodeType: parent.nodeType },\n });\n }\n if (!parent.projectId) {\n throwStructuredMutationError({\n message: \"Parent belief has no project scope.\",\n status: 400,\n code: \"MISSING_SCOPE\",\n invariantCode: \"belief.project_required\",\n suggestion: \"Belief must have a projectId to fork.\",\n details: { parentNodeId: args.parentNodeId },\n });\n }\n await requireProjectWriteAccess(ctx, parent.projectId, authenticatedUserId);\n\n const metadata = parent.metadata as Record<string, unknown> | undefined;\n const forkBeliefStatus: BeliefLifecycleStatus = \"hypothesis\";\n\n // Create the new forked belief\n const newBeliefGlobalId = generateGlobalId();\n const newNodeId = await ctx.db.insert(\"epistemicNodes\", {\n globalId: newBeliefGlobalId,\n nodeType: \"belief\",\n epistemicLayer: \"L3\",\n canonicalText: args.newFormulation,\n contentHash: generateContentHash(args.newFormulation),\n content: args.rationale || parent.content,\n title:\n args.newFormulation.slice(0, 100) +\n (args.newFormulation.length > 100 ? \"...\" : \"\"),\n metadata: {\n ...metadata,\n forkedFrom: args.parentNodeId,\n forkReason: args.forkReason,\n forkTimestamp: now,\n forkedBy: authenticatedUserId,\n status: \"active\",\n beliefStatus: forkBeliefStatus,\n tupleContradicted: false,\n },\n beliefStatus: forkBeliefStatus as any,\n sourceType: parent.sourceType,\n confidence: undefined,\n tupleContradicted: false,\n verificationStatus: \"unverified\",\n status: \"active\",\n projectId: parent.projectId,\n topicId: parent.topicId,\n createdBy: authenticatedUserId,\n createdAt: now,\n updatedAt: now,\n });\n\n const inheritedContracts = (await (ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q: any) =>\n q.eq(\"beliefNodeId\", args.parentNodeId)\n )\n .collect()) as Array<Record<string, unknown> & { status?: string }>;\n\n for (const contract of inheritedContracts) {\n if (contract.status === \"archived\") {\n continue;\n }\n await (ctx.db as any).insert(\n \"epistemicContracts\",\n createInheritedContractRecord(contract as any, {\n beliefNodeId: newNodeId,\n topicId: parent.topicId,\n createdBy: authenticatedUserId,\n now,\n }) as any\n );\n }\n\n // Schedule Neo4j node sync FIRST — the new node must exist in Neo4j\n // before the supersedes edge can be created (MATCH clause requirement).\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: newNodeId,\n operation: \"upsert\",\n });\n\n // Create supersedes edge with delay to let node sync complete first.\n await ctx.scheduler.runAfter(5000, internal.neo4jEdgeAPI.createEdge, {\n globalId: generateGlobalId(),\n fromGlobalId: newBeliefGlobalId,\n toGlobalId: parent.globalId,\n edgeType: \"supersedes\",\n context: `Fork reason: ${args.forkReason}`,\n createdBy: authenticatedUserId,\n topicId: parent.projectId ? String(parent.projectId) : undefined,\n fromNodeType: \"belief\",\n toNodeType: \"belief\",\n });\n\n // Schedule embedding generation for forked belief\n await scheduleEmbeddingGeneration({\n ctx, nodeId: newNodeId, projectId: parent.projectId, topicId: parent.topicId,\n createdBy: authenticatedUserId, nodeType: \"belief\", text: args.newFormulation,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: newNodeId,\n changeType: \"forked\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n parentNodeId: args.parentNodeId,\n formulation: parent.canonicalText,\n },\n newState: {\n formulation: args.newFormulation,\n forkReason: args.forkReason,\n tupleContradicted: false,\n },\n projectId: parent.projectId,\n topicId: parent.topicId,\n });\n\n // Temporal classification — forked beliefs get fresh classification\n // since the formulation may have changed temporal nature\n if (parent.projectId || parent.topicId) {\n const inheritedPillar = normalizePillar(\n String(metadata?.pillar || metadata?.topic || \"\")\n );\n if (inheritedPillar === \"other\") {\n await ctx.scheduler.runAfter(\n 2500,\n \"beliefCategorization:autoCategorizeBelief\" as any,\n {\n nodeId: newNodeId,\n projectId: parent.projectId,\n topicId: parent.topicId,\n }\n );\n }\n\n await ctx.scheduler.runAfter(\n 3000,\n internal.beliefTemporalClassifier.classifyBelief,\n {\n nodeId: newNodeId,\n projectId: parent.projectId,\n topicId: parent.topicId,\n }\n );\n }\n\n await markBeliefGraphDirty(ctx, {\n projectId: parent.projectId,\n topicId: parent.topicId,\n });\n\n return { newNodeId, parentNodeId: args.parentNodeId };\n },\n});\n\n// =============================================================================\n// MODULATE CONFIDENCE\n// =============================================================================\n\n/**\n * Modulate a belief's confidence.\n *\n * Lucern Invariant #2: Confidence changes are append-only (tracked in beliefConfidence table).\n */\nexport const modulateConfidence = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n // SL opinion — the ONLY confidence input (EK-7)\n belief: v.number(), // b: evidence FOR [0,1]\n disbelief: v.number(), // d: evidence AGAINST [0,1]\n uncertainty: v.number(), // u: lack of evidence [0,1]\n baseRate: v.number(), // a: prior probability [0,1]\n trigger: v.union(\n v.literal(\"evidence_added\"),\n v.literal(\"evidence_removed\"),\n v.literal(\"contradiction_detected\"),\n v.literal(\"contradiction_resolved\"),\n v.literal(\"manual\"),\n v.literal(\"decay\"),\n v.literal(\"agent_assessment\"),\n v.literal(\"worktree_outcome\"),\n v.literal(\"worktree_completed\"),\n // SL-specific triggers\n v.literal(\"fusion\"),\n v.literal(\"discount\"),\n v.literal(\"deduction\"),\n v.literal(\"backfill_synthetic\")\n ),\n rationale: v.optional(v.string()),\n userId: v.string(),\n // SL operator provenance (optional — defaults to manual_assessment)\n slOperator: v.optional(v.union(\n v.literal(\"cumulative_fusion\"),\n v.literal(\"averaging_fusion\"),\n v.literal(\"trust_discount\"),\n v.literal(\"conditional_deduction\"),\n v.literal(\"dependency_cascade\"),\n v.literal(\"negation\"),\n v.literal(\"constraint_fusion\"),\n v.literal(\"manual_assessment\")\n )),\n triggeringEvidenceId: v.optional(v.id(\"epistemicNodes\")),\n triggeringWorktreeId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const result = await applyBeliefConfidenceChange(ctx, {\n nodeId: args.nodeId,\n belief: args.belief,\n disbelief: args.disbelief,\n uncertainty: args.uncertainty,\n baseRate: args.baseRate,\n trigger: args.trigger,\n rationale: args.rationale,\n authenticatedUserId,\n slOperator: args.slOperator as SLOperator | undefined,\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringWorktreeId: args.triggeringWorktreeId,\n });\n\n // Schedule edge-defined SL propagation through graph edges (EK-7, LKC-5)\n // Only propagate if confidence actually changed (avoid noise)\n if (Math.abs(result.newConfidence - result.previousConfidence) >= 0.01) {\n await ctx.scheduler.runAfter(\n 0,\n internal.epistemicBeliefs.propagateConfidenceChange,\n {\n nodeId: args.nodeId,\n opinion_b: args.belief,\n opinion_d: args.disbelief,\n opinion_u: args.uncertainty,\n opinion_a: args.baseRate ?? 0.5,\n userId: authenticatedUserId,\n }\n );\n }\n\n return {\n nodeId: result.nodeId,\n previousConfidence: result.previousConfidence,\n newConfidence: result.newConfidence,\n opinion: result.opinion,\n };\n },\n});\n\n// Two-axis model (valence/certainty) — REMOVED in EK-7.\n// All callers must use modulateConfidence with SL opinion (b, d, u, a).\n\n// =============================================================================\n// UPDATE STATUS\n// =============================================================================\n\n/**\n * Update a belief's status.\n */\nexport const updateStatus = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n ),\n reason: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const previousStatus = node.status;\n\n // Update the node's status and metadata in a single atomic patch\n const metadata = (node.metadata as Record<string, unknown>) || {};\n await ctx.db.patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n metadata: {\n ...metadata,\n status: args.status,\n },\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n previousState: { status: previousStatus },\n newState: { status: args.status, reason: args.reason },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return { nodeId: args.nodeId, previousStatus, newStatus: args.status };\n },\n});\n\n// =============================================================================\n// ARCHIVE\n// =============================================================================\n\n/**\n * Archive a belief (soft delete).\n * Lucern invariant: Beliefs are never deleted, only archived.\n */\nexport const archive = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n reason: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n return await ctx.runMutation(\n // Use updateStatus internally\n internal.epistemicBeliefs.updateStatusInternal,\n {\n nodeId: args.nodeId,\n status: \"archived\",\n reason: args.reason,\n userId: authenticatedUserId,\n }\n );\n },\n});\n\n// =============================================================================\n// UPDATE RATIONALE\n// =============================================================================\n\n/**\n * Update a belief rationale without changing formulation.\n * Formulation mutability rules are unchanged (use fork/refine paths for wording).\n */\nexport const updateRationale = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const metadata = (node.metadata as Record<string, unknown>) || {};\n const previousRationale =\n typeof metadata.rationale === \"string\" ? metadata.rationale : undefined;\n const nextRationale = args.rationale?.trim();\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n rationale:\n nextRationale && nextRationale.length > 0 ? nextRationale : undefined,\n },\n updatedAt: now,\n });\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n previousState: { rationale: previousRationale },\n newState: {\n rationale:\n nextRationale && nextRationale.length > 0 ? nextRationale : undefined,\n },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return {\n nodeId: args.nodeId,\n previousRationale,\n newRationale: nextRationale,\n };\n },\n});\n\n// Internal version for use by other mutations\nexport const updateStatusInternal = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n status: v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n ),\n reason: v.optional(v.string()),\n userId: v.string(),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: await resolveNodeScopeForWorkspaceIsolation(ctx, node),\n mutationName: \"epistemicBeliefs.updateStatusInternal\",\n });\n\n const previousStatus = node.status;\n\n await ctx.db.patch(args.nodeId, {\n status: args.status,\n updatedAt: now,\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"status_changed\",\n previousState: { status: previousStatus },\n newState: { status: args.status, reason: args.reason },\n changedBy: args.userId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return { nodeId: args.nodeId, previousStatus, newStatus: args.status };\n },\n});\n\n// =============================================================================\n// GET CONFIDENCE HISTORY\n// =============================================================================\n\n/**\n * Get the confidence history for a belief.\n */\nexport const getConfidenceHistory = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n return [];\n }\n\n return await ctx.db\n .query(\"beliefConfidence\")\n .withIndex(\"by_beliefId_time\", (q) =>\n q.eq(\"beliefId\", args.nodeId)\n )\n .order(\"asc\")\n .collect();\n },\n});\n\n// =============================================================================\n// GET BELIEF LINEAGE\n// =============================================================================\n\n/**\n * Get the lineage of a belief (all forks and parents).\n */\nexport const getLineage = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const lineage: Array<{\n nodeId: Id<\"epistemicNodes\">;\n formulation: string;\n forkReason?: string;\n createdAt: number;\n }> = [];\n\n let currentId: Id<\"epistemicNodes\"> | null = args.nodeId;\n\n while (currentId) {\n const node = await ctx.db.get(currentId);\n if (!node || node.nodeType !== \"belief\") {\n break;\n }\n\n const metadata = node.metadata as Record<string, unknown> | undefined;\n\n lineage.push({\n nodeId: node._id,\n formulation: node.canonicalText,\n forkReason: metadata?.forkReason as string | undefined,\n createdAt: node.createdAt,\n });\n\n // Find parent via supersedes edge\n const edges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_type\", (q) =>\n q.eq(\"fromNodeId\", currentId!).eq(\"edgeType\", \"supersedes\")\n )\n .collect();\n\n if (edges.length > 0) {\n currentId = edges[0].toNodeId ?? null;\n } else {\n // Check metadata for forkedFrom (backfilled beliefs)\n currentId = metadata?.forkedFrom as Id<\"epistemicNodes\"> | null;\n }\n }\n\n return lineage;\n },\n});\n\n// =============================================================================\n// GET BELIEFS BY IDS\n// =============================================================================\n\n/**\n * Get multiple beliefs by their IDs.\n */\nexport const getByIds = query({\n args: {\n nodeIds: v.array(v.id(\"epistemicNodes\")),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const beliefs = await Promise.all(args.nodeIds.map((id) => ctx.db.get(id)));\n return beliefs.filter((b) => b !== null && b.nodeType === \"belief\");\n },\n});\n\n// =============================================================================\n// GET BY SPRINT\n// =============================================================================\n\n/**\n * Get all beliefs associated with a worktree via worktreeBeliefCluster.\n */\nexport const getByWorktree = query({\n args: {\n worktreeId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const worktree = await ctx.db.get(args.worktreeId as Id<\"worktrees\">);\n if (!worktree) {\n return [];\n }\n\n const clusterLinks = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_worktree\", (q: any) => q.eq(\"worktreeId\", args.worktreeId))\n .collect();\n\n const beliefs: Array<Doc<\"epistemicNodes\">> = [];\n for (const link of clusterLinks) {\n const node = await ctx.db.get(link.beliefId);\n if (node) beliefs.push(node);\n }\n return beliefs;\n },\n});\n\n// =============================================================================\n// UPDATE PILLAR\n// =============================================================================\n\n/**\n * Update a belief's pillar/topic categorization.\n * Uses canonical epistemicNodes IDs.\n */\nexport const updatePillar = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n pillar: v.union(\n v.literal(\"market\"),\n v.literal(\"competition\"),\n v.literal(\"product\"),\n v.literal(\"team\"),\n v.literal(\"financials\"),\n v.literal(\"regulatory\"),\n v.literal(\"timing\"),\n v.literal(\"customer\"),\n v.literal(\"technology\"),\n v.literal(\"distribution\"),\n v.literal(\"deal\"),\n v.literal(\"risks\"),\n v.literal(\"other\")\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const existingNode = await ctx.db.get(args.nodeId);\n if (!existingNode || existingNode.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!existingNode.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(\n ctx,\n existingNode.projectId,\n authenticatedUserId\n );\n\n // Update the epistemicNode (canonical source of truth)\n let previousPillar: unknown = null;\n const metadata = (existingNode.metadata as Record<string, unknown>) || {};\n previousPillar = metadata.pillar;\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n pillar: args.pillar,\n topic: args.pillar,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n // Audit log - Lucern Invariant #14: no silent state transitions\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId as string,\n changeType: \"pillar_changed\",\n projectId: existingNode.projectId,\n changedBy: authenticatedUserId,\n changedAt: now,\n isAgent: false,\n previousState: { pillar: previousPillar },\n newState: { pillar: args.pillar },\n });\n\n return {\n nodeId: args.nodeId,\n previousPillar,\n newPillar: args.pillar,\n };\n },\n});\n\n// =============================================================================\n// COUNT BY STATUS\n// =============================================================================\n\n/**\n * Get counts of beliefs by status for a project.\n */\nexport const getCountByStatus = query({\n args: {\n ...optionalBeliefScopeArgs,\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return { active: 0, superseded: 0, archived: 0, total: 0 };\n }\n\n const nodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: any) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n )\n .collect();\n\n const counts = {\n active: 0,\n superseded: 0,\n archived: 0,\n total: nodes.length,\n };\n\n for (const node of nodes) {\n if (node.status === \"active\") {\n counts.active++;\n } else if (node.status === \"superseded\") {\n counts.superseded++;\n } else if (node.status === \"archived\") {\n counts.archived++;\n }\n }\n\n return counts;\n },\n});\n\n// =============================================================================\n// LINK BELIEFS (Direct epistemicNodes → epistemicNodes)\n// =============================================================================\n\n/**\n * Create an edge between two beliefs in the epistemic spine.\n * This works with epistemicNodes IDs directly (no legacy lookup needed).\n */\nexport const linkBeliefs = mutation({\n args: {\n fromNodeId: v.id(\"epistemicNodes\"),\n toNodeId: v.id(\"epistemicNodes\"),\n edgeType: v.union(\n // Basic belief relationships\n v.literal(\"supersedes\"),\n v.literal(\"depends_on\"),\n v.literal(\"supports\"),\n v.literal(\"contains\"),\n v.literal(\"informs\"),\n v.literal(\"derived_from\"),\n v.literal(\"tests\")\n ),\n weight: v.optional(v.number()), // -1 to 1\n context: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const fromNode = await ctx.db.get(args.fromNodeId);\n const toNode = await ctx.db.get(args.toNodeId);\n\n if (!fromNode || !toNode) {\n throw new Error(\"One or both belief nodes not found\");\n }\n\n if (fromNode.nodeType !== \"belief\" || toNode.nodeType !== \"belief\") {\n throw new Error(\"Both nodes must be beliefs\");\n }\n if (fromNode.projectId !== toNode.projectId) {\n throw new Error(\"Cannot link beliefs across different projects\");\n }\n if (!fromNode.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(\n ctx,\n fromNode.projectId,\n authenticatedUserId\n );\n\n const now = Date.now();\n\n // Create edge directly in Neo4j (MERGE handles duplicates)\n const edgeGlobalId = generateGlobalId();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: fromNode.globalId,\n toGlobalId: toNode.globalId,\n edgeType: args.edgeType,\n weight: args.weight ?? 1.0,\n context: args.context,\n createdBy: authenticatedUserId,\n topicId: fromNode.projectId ? String(fromNode.projectId) : undefined,\n fromNodeType: \"belief\",\n toNodeType: \"belief\",\n });\n\n // Log to epistemic audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edgeGlobalId as unknown as Id<\"epistemicNodes\">,\n changeType: \"created\",\n previousState: null,\n newState: {\n fromNodeId: args.fromNodeId,\n toNodeId: args.toNodeId,\n edgeType: args.edgeType,\n },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: fromNode.projectId,\n });\n\n return { edgeGlobalId, created: true };\n },\n});\n\n// =============================================================================\n// LINK EVIDENCE (Insight) to Belief\n// =============================================================================\n\n/**\n * Link an insight (evidence) to a belief.\n * Creates an edge from evidence → belief with appropriate type.\n */\nexport const linkEvidence = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n insightId: insightIdUnion,\n type: v.union(v.literal(\"supporting\"), v.literal(\"contradicting\")),\n rationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const _now = Date.now();\n\n // Verify the belief exists\n const belief = await ctx.db.get(args.beliefNodeId);\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!belief.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, belief.projectId, authenticatedUserId);\n\n // Verify the insight exists\n const insight = await ctx.db.get(args.insightId);\n if (!insight || insight.nodeType !== \"evidence\") {\n throw new Error(\"Insight not found\");\n }\n if (\n \"projectId\" in insight &&\n insight.projectId &&\n insight.projectId !== belief.projectId\n ) {\n throw new Error(\"Insight belongs to a different project\");\n }\n\n const evidenceNodeId = insight._id;\n const evidenceGlobalId = insight.globalId;\n\n // Determine edge type based on supporting/contradicting\n const edgeType = \"informs\"; // Both use informs, weight determines support/contradict\n const weight = args.type === \"supporting\" ? 1.0 : -1.0;\n\n // Compute logicalRole from graph structure\n const logicalRole = evidenceNodeId\n ? await computeLogicalRole(ctx, evidenceNodeId, args.beliefNodeId)\n : \"contributory\";\n\n // Create the edge directly in Neo4j (MERGE handles duplicates)\n const edgeGlobalId = generateGlobalId();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: evidenceGlobalId,\n toGlobalId: belief.globalId,\n edgeType,\n weight,\n context: args.rationale || `${args.type} evidence`,\n createdBy: authenticatedUserId,\n topicId: belief.projectId ? String(belief.projectId) : undefined,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n // Classification fields\n logicalRole,\n temporalClass: \"structural\", // Default - most evidence is long-lived\n });\n\n return { edgeGlobalId, evidenceNodeId, created: true };\n },\n});\n\n// =============================================================================\n// UNLINK EVIDENCE from Belief\n// =============================================================================\n\n/**\n * Remove the link between an insight and a belief.\n */\nexport const unlinkEvidence = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n insightId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const evidenceNode = await ctx.db.get(args.insightId);\n if (!evidenceNode || evidenceNode.nodeType !== \"evidence\") {\n return { success: false, message: \"Evidence node not found\" };\n }\n if (!evidenceNode.projectId) {\n throw new Error(\"Evidence has no project scope\");\n }\n await requireProjectWriteAccess(\n ctx,\n evidenceNode.projectId,\n authenticatedUserId\n );\n const beliefNode = await ctx.db.get(args.beliefNodeId);\n if (!beliefNode || beliefNode.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (beliefNode.projectId !== evidenceNode.projectId) {\n throw new Error(\"Belief and evidence belong to different projects\");\n }\n\n // Find and delete the edge\n const edge = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q.eq(\"fromNodeId\", evidenceNode._id).eq(\"toNodeId\", args.beliefNodeId)\n )\n .first();\n\n if (edge) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(edge._id);\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edge.globalId,\n changeType: \"edge_removed\",\n changedAt: now,\n changedBy: authenticatedUserId,\n isAgent: false,\n previousState: {\n fromNodeId: evidenceNode._id,\n toNodeId: args.beliefNodeId,\n },\n newState: null,\n projectId: evidenceNode.projectId,\n });\n }\n\n return { success: true };\n },\n});\n\n// =============================================================================\n// GET BELIEF WITH EVIDENCE\n// =============================================================================\n\n/**\n * Get a belief along with all its linked evidence.\n */\nexport const getWithEvidence = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const belief = await ctx.db.get(args.nodeId);\n if (!belief || belief.nodeType !== \"belief\") {\n return null;\n }\n\n // Get all edges pointing TO this belief from evidence nodes\n const incomingEdges = await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", args.nodeId).eq(\"edgeType\", \"informs\")\n )\n .collect();\n\n // Get the evidence nodes\n const evidenceNodeIds = incomingEdges\n .filter((e) => e.fromNodeType === \"evidence\")\n .map((e) => e.fromNodeId);\n\n const evidenceNodes = await Promise.all(\n evidenceNodeIds.map((id) => ctx.db.get(id))\n );\n\n // Categorize by supporting vs contradicting (based on weight)\n const supporting: typeof evidenceNodes = [];\n const contradicting: typeof evidenceNodes = [];\n\n for (let i = 0; i < evidenceNodes.length; i++) {\n const node = evidenceNodes[i];\n const edge = incomingEdges[i];\n if (node) {\n if ((edge.weight || 0) >= 0) {\n supporting.push(node);\n } else {\n contradicting.push(node);\n }\n }\n }\n\n return {\n belief,\n evidence: {\n supporting,\n contradicting,\n total: supporting.length + contradicting.length,\n },\n };\n },\n});\n\n// =============================================================================\n// GET RELATIONSHIPS\n// =============================================================================\n\n/**\n * Get all relationships (edges) for a belief.\n */\nexport const getRelationships = query({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n direction: v.optional(\n v.union(v.literal(\"in\"), v.literal(\"out\"), v.literal(\"both\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const direction = args.direction || \"both\";\n const results: {\n incoming: Array<{ edge: unknown; node: unknown }>;\n outgoing: Array<{ edge: unknown; node: unknown }>;\n } = {\n incoming: [],\n outgoing: [],\n };\n\n if (direction === \"in\" || direction === \"both\") {\n // Get edges pointing TO this node\n const inEdges = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q) => q.eq(q.field(\"toNodeId\"), args.nodeId))\n .collect();\n\n for (const edge of inEdges) {\n const sourceNode = await ctx.db.get(edge.fromNodeId);\n results.incoming.push({ edge, node: sourceNode });\n }\n }\n\n if (direction === \"out\" || direction === \"both\") {\n // Get edges pointing FROM this node\n const outEdges = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q) => q.eq(q.field(\"fromNodeId\"), args.nodeId))\n .collect();\n\n for (const edge of outEdges) {\n const targetNode = edge.toNodeId\n ? await ctx.db.get(edge.toNodeId)\n : null;\n results.outgoing.push({ edge, node: targetNode });\n }\n }\n\n return results;\n },\n});\n\n// =============================================================================\n// DELETE RELATIONSHIP\n// =============================================================================\n\n/**\n * Delete a relationship (edge) between nodes.\n */\nexport const deleteRelationship = mutation({\n args: {\n edgeId: v.id(\"epistemicEdges\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const edge = await ctx.db.get(args.edgeId);\n if (!edge) {\n throw new Error(\"Edge not found\");\n }\n if (!edge.projectId) {\n throw new Error(\"Edge has no project scope\");\n }\n await requireProjectWriteAccess(ctx, edge.projectId, authenticatedUserId);\n\n // Store for audit\n const previousState = {\n fromNodeId: edge.fromNodeId,\n toNodeId: edge.toNodeId,\n edgeType: edge.edgeType,\n };\n\n // Delete via Neo4j authority path\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n await ctx.db.delete(args.edgeId);\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"edge\",\n entityId: edge.globalId,\n changeType: \"edge_removed\",\n previousState,\n newState: null,\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: edge.projectId,\n });\n\n return { success: true };\n },\n});\n\n// =============================================================================\n// UPDATE CRITICALITY\n// =============================================================================\n\n/**\n * Update a belief's criticality level.\n */\nexport const updateCriticality = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n criticality: v.union(\n v.literal(\"blocking\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"essential\"),\n v.literal(\"nice_to_have\")\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node || node.nodeType !== \"belief\") {\n throw new Error(\"Belief not found\");\n }\n if (!node.projectId) {\n throw new Error(\"Belief has no project scope\");\n }\n await requireProjectWriteAccess(ctx, node.projectId, authenticatedUserId);\n\n const metadata = (node.metadata as Record<string, unknown>) || {};\n const previousCriticality = metadata.criticality;\n\n await ctx.db.patch(args.nodeId, {\n metadata: {\n ...metadata,\n criticality: args.criticality,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"criticality_changed\",\n previousState: { criticality: previousCriticality as string | undefined },\n newState: { criticality: args.criticality },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n return {\n nodeId: args.nodeId,\n previousCriticality,\n newCriticality: args.criticality,\n };\n },\n});\n\n// =============================================================================\n// BATCH UPDATE CRITICALITY\n// =============================================================================\n\n/**\n * Batch update criticality for multiple beliefs.\n * Uses canonical epistemicNodes IDs.\n */\nexport const batchUpdateCriticality = mutation({\n args: {\n updates: v.array(\n v.object({\n beliefId: v.id(\"epistemicNodes\"),\n criticality: v.union(\n v.literal(\"blocking\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"essential\"),\n v.literal(\"nice_to_have\")\n ),\n ifFalseImpact: v.optional(v.string()),\n triagePriority: v.optional(v.number()),\n reasoning: v.optional(v.string()),\n dependentBeliefIds: v.optional(v.array(v.string())),\n blockedByBeliefIds: v.optional(v.array(v.string())),\n })\n ),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const authenticatedUserId = await requireAuthenticatedUserId(ctx);\n const now = Date.now();\n const results: Array<{\n beliefId: string;\n nodeId?: Id<\"epistemicNodes\">;\n success: boolean;\n }> = [];\n\n for (const update of args.updates) {\n try {\n const node = await ctx.db.get(update.beliefId);\n\n if (!node || node.nodeType !== \"belief\") {\n results.push({ beliefId: update.beliefId, success: false });\n continue;\n }\n if (!node.projectId) {\n results.push({ beliefId: update.beliefId, success: false });\n continue;\n }\n await requireProjectWriteAccess(\n ctx,\n node.projectId,\n authenticatedUserId\n );\n\n const metadata = (node.metadata as Record<string, unknown>) || {};\n const previousCriticality = metadata.criticality as string | undefined;\n\n await ctx.db.patch(node._id, {\n metadata: {\n ...metadata,\n criticality: update.criticality,\n ifFalseImpact: update.ifFalseImpact,\n triagePriority: update.triagePriority,\n criticalityReasoning: update.reasoning,\n dependentBeliefIds: update.dependentBeliefIds,\n blockedByBeliefIds: update.blockedByBeliefIds,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: node._id,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: node._id,\n changeType: \"criticality_changed\",\n previousState: { criticality: previousCriticality },\n newState: { criticality: update.criticality },\n changedBy: authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n });\n\n results.push({\n beliefId: update.beliefId,\n nodeId: node._id,\n success: true,\n });\n } catch {\n results.push({ beliefId: update.beliefId, success: false });\n }\n }\n\n return { results, updatedCount: results.filter((r) => r.success).length };\n },\n});\n\n// =============================================================================\n// GET BY CRITICALITY\n// =============================================================================\n\n/**\n * Get beliefs by criticality level.\n */\nexport const getByCriticality = query({\n args: {\n ...optionalBeliefScopeArgs,\n criticality: v.union(\n v.literal(\"blocking\"),\n v.literal(\"important\"),\n v.literal(\"supporting\"),\n v.literal(\"essential\"),\n v.literal(\"nice_to_have\")\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope);\n\n return nodes.filter((n) => {\n const metadata = n.metadata as Record<string, unknown> | undefined;\n return (\n metadata?.criticality === args.criticality && n.status === \"active\"\n );\n });\n },\n});\n\n// =============================================================================\n// GET UNANALYZED BELIEFS (for BI agents)\n// =============================================================================\n\n/**\n * Get beliefs that haven't been analyzed yet.\n * Used by BI agents for batch processing.\n */\nexport const getUnanalyzed = query({\n args: {\n ...optionalBeliefScopeArgs,\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const limit = args.limit || 50;\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope);\n\n // Filter for unanalyzed beliefs (no criticality set, active status)\n const unanalyzed = nodes.filter((n) => {\n const metadata = n.metadata as Record<string, unknown> | undefined;\n return !metadata?.criticality && n.status === \"active\";\n });\n\n return unanalyzed.slice(0, limit);\n },\n});\n\n// =============================================================================\n// GET BY PROJECT (SYSTEM - no auth check)\n// =============================================================================\n\n/**\n * Get all beliefs for a project (system level - no auth check).\n * Used by BI agents and thesis audit agents.\n */\nexport const getByProjectSystem = query({\n args: {\n ...optionalBeliefScopeArgs,\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampBeliefLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope, { scanLimit });\n\n // Filter by status if provided\n if (args.status) {\n return nodes.filter((n) => n.status === args.status).slice(0, pageSize);\n }\n\n // Default: return active beliefs\n return nodes.filter((n) => n.status === \"active\").slice(0, pageSize);\n },\n});\n\n// =============================================================================\n// GET BY PILLAR\n// =============================================================================\n\n/**\n * Get beliefs filtered by pillar/topic.\n */\nexport const getByPillar = query({\n args: {\n ...optionalBeliefScopeArgs,\n pillar: v.union(\n v.literal(\"market\"),\n v.literal(\"competition\"),\n v.literal(\"product\"),\n v.literal(\"team\"),\n v.literal(\"financials\"),\n v.literal(\"regulatory\"),\n v.literal(\"timing\"),\n v.literal(\"customer\"),\n v.literal(\"technology\"),\n v.literal(\"distribution\"),\n v.literal(\"deal\"),\n v.literal(\"risks\"),\n v.literal(\"other\")\n ),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"superseded\"),\n v.literal(\"archived\")\n )\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n if (!args.projectId && !args.topicId) {\n return [];\n }\n\n let scope:\n | Awaited<ReturnType<typeof resolveTopicProjectScope>>\n | {\n tenantId: undefined;\n workspaceId: undefined;\n topicId?: undefined;\n projectId?: undefined;\n };\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch {\n return [];\n }\n\n const nodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n )\n .collect();\n\n return nodes.filter((n) => {\n const metadata = n.metadata as Record<string, unknown> | undefined;\n const matchesPillar = metadata?.pillar === args.pillar;\n const matchesStatus = args.status\n ? n.status === args.status\n : n.status === \"active\";\n return matchesPillar && matchesStatus;\n });\n },\n});\n\n// =============================================================================\n// GET WORKTREE CLUSTER\n// =============================================================================\n\n/**\n * Get the belief cluster for a worktree.\n * Returns all beliefs linked to the worktree and their relationships.\n */\nexport const getWorktreeCluster = query({\n args: {\n worktreeId: v.string(),\n userId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const worktree = await ctx.db.get(args.worktreeId as Id<\"worktrees\">);\n if (!worktree) {\n return { beliefs: [], edges: [], beliefCount: 0 };\n }\n\n // Get all beliefs linked to this worktree\n const clusterLinks = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_worktree\", (q: any) => q.eq(\"worktreeId\", args.worktreeId))\n .collect();\n\n const beliefIds = new Set(clusterLinks.map((l: any) => String(l.beliefId)));\n const beliefs: Array<Doc<\"epistemicNodes\">> = [];\n for (const link of clusterLinks) {\n const node = await ctx.db.get(link.beliefId);\n if (node) beliefs.push(node);\n }\n\n // Get edges between cluster beliefs\n const clusterEdges: Array<{\n fromNodeId: string;\n toNodeId: string;\n edgeType: string;\n weight?: number;\n context?: string;\n }> = [];\n\n for (const beliefId of beliefIds) {\n const outEdges = await ctx.db\n .query(\"epistemicEdges\")\n .filter((q: any) =>\n q.eq(q.field(\"fromNodeId\"), beliefId as Id<\"epistemicNodes\">)\n )\n .collect();\n\n for (const edge of outEdges) {\n if (beliefIds.has(String(edge.toNodeId))) {\n clusterEdges.push({\n fromNodeId: String(edge.fromNodeId),\n toNodeId: String(edge.toNodeId),\n edgeType: edge.edgeType,\n weight: edge.weight,\n context: edge.context,\n });\n }\n }\n }\n\n return {\n beliefs,\n edges: clusterEdges,\n beliefCount: beliefs.length,\n };\n },\n});\n\n// =============================================================================\n// INTERNAL QUERIES - For use by other Convex modules\n// =============================================================================\n// These queries are NOT exposed to the client API. They allow other Convex\n// functions (BI agents, intelligence, etc.) to read beliefs from epistemicNodes\n// without needing project access checks (internal use only).\n\n/**\n * Internal query to get beliefs for a project.\n * Returns epistemicNodes in legacy beliefs format for backward compatibility.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetByProject = internalQuery({\n args: {\n ...optionalBeliefScopeArgs,\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"validated\"),\n v.literal(\"invalidated\"),\n v.literal(\"archived\"),\n v.literal(\"superseded\")\n )\n ),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const pageSize = clampBeliefLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const audienceMode = args.audienceMode ?? \"internal\";\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n });\n const resolveAudienceClass = createBeliefAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const nodes = await getBeliefNodesForScope(ctx, scope, { scanLimit });\n\n // Filter by audience first, then status.\n let filtered = nodes.filter((node) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(node.audienceLabel, \"internal\")\n )\n );\n if (args.status) {\n filtered = filtered.filter((n) => n.status === args.status);\n }\n\n // Apply limit if provided\n filtered = filtered.slice(0, pageSize);\n\n // Map to legacy format\n return filtered.map(flattenBeliefNode);\n },\n});\n\n/**\n * Internal query to get beliefs for a topic.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetByTopic = internalQuery({\n args: {\n topicId: v.string(),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"validated\"),\n v.literal(\"invalidated\"),\n v.literal(\"archived\"),\n v.literal(\"superseded\")\n )\n ),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const pageSize = clampBeliefLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_PROJECT_BELIEF_LIMIT);\n const audienceMode = args.audienceMode ?? \"internal\";\n const scope = await resolveTopicProjectScope(ctx, { topicId: args.topicId });\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n });\n const resolveAudienceClass = createBeliefAudienceResolver(registryRows);\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const query = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n );\n const nodes = await query.order(\"desc\").take(scanLimit);\n\n let filtered = nodes.filter((node) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(node.audienceLabel, \"internal\")\n )\n );\n if (args.status) {\n filtered = filtered.filter((n) => n.status === args.status);\n }\n filtered = filtered.slice(0, pageSize);\n\n return filtered.map(flattenBeliefNode);\n },\n});\n\n/**\n * Internal query to get active beliefs for a project.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetActive = internalQuery({\n args: {\n ...optionalBeliefScopeArgs,\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const scope = await resolveBeliefScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n const nodes = await getBeliefNodesForScope(ctx, scope, {\n status: \"active\",\n });\n\n // Apply limit if provided\n const limited = args.limit ? nodes.slice(0, args.limit) : nodes;\n\n return limited.map(flattenBeliefNode);\n },\n});\n\n/**\n * Internal query to get a single belief by ID.\n * Uses canonical epistemicNodes IDs.\n *\n * @internal Use by other Convex functions only\n */\nexport const internalGetById = internalQuery({\n args: {\n beliefId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const node = await ctx.db.get(args.beliefId as Id<\"epistemicNodes\">);\n\n if (!node || node.nodeType !== \"belief\") {\n return null;\n }\n\n // Map to legacy format\n return flattenBeliefNode(node);\n },\n});\n\n/**\n * Internal mutation to create a belief.\n * Creates ONLY in epistemicNodes (no dual-write).\n *\n * @internal Use by other Convex functions only\n */\nexport const internalCreate = internalMutation({\n args: {\n ...optionalBeliefScopeArgs,\n formulation: v.string(),\n baseRate: v.optional(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 ?? 0.5);\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"]}