@lucern/graph-primitives 0.1.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/README.md +29 -0
  2. package/dist/beliefDecay-Q_26RTc-.d.ts +72 -0
  3. package/dist/beliefDecay.d.ts +2 -0
  4. package/dist/beliefDecay.js +1628 -0
  5. package/dist/beliefDecay.js.map +1 -0
  6. package/dist/beliefEvidenceLinks-42FlR48t.d.ts +77 -0
  7. package/dist/beliefEvidenceLinks.d.ts +1 -0
  8. package/dist/beliefEvidenceLinks.js +1978 -0
  9. package/dist/beliefEvidenceLinks.js.map +1 -0
  10. package/dist/beliefLifecycle-C-AehZgF.d.ts +43 -0
  11. package/dist/beliefLifecycle.d.ts +1 -0
  12. package/dist/beliefLifecycle.js +98 -0
  13. package/dist/beliefLifecycle.js.map +1 -0
  14. package/dist/confidencePropagationDispatch.d.ts +46 -0
  15. package/dist/confidencePropagationDispatch.js +744 -0
  16. package/dist/confidencePropagationDispatch.js.map +1 -0
  17. package/dist/contradictions-Hdwl7zid.d.ts +71 -0
  18. package/dist/contradictions.d.ts +1 -0
  19. package/dist/contradictions.js +1557 -0
  20. package/dist/contradictions.js.map +1 -0
  21. package/dist/convex.d.ts +23 -0
  22. package/dist/convex.js +17 -0
  23. package/dist/convex.js.map +1 -0
  24. package/dist/edgeValidation-CeI0wc0r.d.ts +35 -0
  25. package/dist/edgeValidation.d.ts +2 -0
  26. package/dist/edgeValidation.js +307 -0
  27. package/dist/edgeValidation.js.map +1 -0
  28. package/dist/edges/contains.d.ts +6 -0
  29. package/dist/edges/contains.js +14 -0
  30. package/dist/edges/contains.js.map +1 -0
  31. package/dist/edges/contradicts.d.ts +6 -0
  32. package/dist/edges/contradicts.js +183 -0
  33. package/dist/edges/contradicts.js.map +1 -0
  34. package/dist/edges/dependsOn.d.ts +6 -0
  35. package/dist/edges/dependsOn.js +240 -0
  36. package/dist/edges/dependsOn.js.map +1 -0
  37. package/dist/edges/derivedFrom.d.ts +6 -0
  38. package/dist/edges/derivedFrom.js +14 -0
  39. package/dist/edges/derivedFrom.js.map +1 -0
  40. package/dist/edges/elaborates.d.ts +6 -0
  41. package/dist/edges/elaborates.js +100 -0
  42. package/dist/edges/elaborates.js.map +1 -0
  43. package/dist/edges/index.d.ts +3 -0
  44. package/dist/edges/index.js +556 -0
  45. package/dist/edges/index.js.map +1 -0
  46. package/dist/edges/informs.d.ts +6 -0
  47. package/dist/edges/informs.js +112 -0
  48. package/dist/edges/informs.js.map +1 -0
  49. package/dist/edges/propagationTypes.d.ts +39 -0
  50. package/dist/edges/propagationTypes.js +17 -0
  51. package/dist/edges/propagationTypes.js.map +1 -0
  52. package/dist/edges/refutes.d.ts +6 -0
  53. package/dist/edges/refutes.js +108 -0
  54. package/dist/edges/refutes.js.map +1 -0
  55. package/dist/edges/supports.d.ts +6 -0
  56. package/dist/edges/supports.js +193 -0
  57. package/dist/edges/supports.js.map +1 -0
  58. package/dist/edges/tests.d.ts +6 -0
  59. package/dist/edges/tests.js +14 -0
  60. package/dist/edges/tests.js.map +1 -0
  61. package/dist/edges/utils.d.ts +12 -0
  62. package/dist/edges/utils.js +188 -0
  63. package/dist/edges/utils.js.map +1 -0
  64. package/dist/embeddingTrigger.d.ts +24 -0
  65. package/dist/embeddingTrigger.js +24 -0
  66. package/dist/embeddingTrigger.js.map +1 -0
  67. package/dist/entityBridge-DMaKooYn.d.ts +59 -0
  68. package/dist/entityBridge.d.ts +1 -0
  69. package/dist/entityBridge.js +663 -0
  70. package/dist/entityBridge.js.map +1 -0
  71. package/dist/entityLifecycle-BkhRJ-XI.d.ts +69 -0
  72. package/dist/entityLifecycle.d.ts +1 -0
  73. package/dist/entityLifecycle.js +2083 -0
  74. package/dist/entityLifecycle.js.map +1 -0
  75. package/dist/entityValidation-KLZ_Xl2D.d.ts +50 -0
  76. package/dist/entityValidation.d.ts +3 -0
  77. package/dist/entityValidation.js +71 -0
  78. package/dist/entityValidation.js.map +1 -0
  79. package/dist/epistemicAnswers-DSP1slZ9.d.ts +67 -0
  80. package/dist/epistemicAnswers.d.ts +1 -0
  81. package/dist/epistemicAnswers.js +1650 -0
  82. package/dist/epistemicAnswers.js.map +1 -0
  83. package/dist/epistemicBeliefs-DtFVTp-k.d.ts +377 -0
  84. package/dist/epistemicBeliefs.d.ts +5 -0
  85. package/dist/epistemicBeliefs.js +6386 -0
  86. package/dist/epistemicBeliefs.js.map +1 -0
  87. package/dist/epistemicContractHelpers.d.ts +1 -0
  88. package/dist/epistemicContractHelpers.js +320 -0
  89. package/dist/epistemicContractHelpers.js.map +1 -0
  90. package/dist/epistemicContracts.d.ts +77 -0
  91. package/dist/epistemicContracts.js +8436 -0
  92. package/dist/epistemicContracts.js.map +1 -0
  93. package/dist/epistemicEdges-DcA8ErUG.d.ts +191 -0
  94. package/dist/epistemicEdges.d.ts +2 -0
  95. package/dist/epistemicEdges.js +2749 -0
  96. package/dist/epistemicEdges.js.map +1 -0
  97. package/dist/epistemicEvidence-Bo638XDP.d.ts +128 -0
  98. package/dist/epistemicEvidence.d.ts +3 -0
  99. package/dist/epistemicEvidence.js +3282 -0
  100. package/dist/epistemicEvidence.js.map +1 -0
  101. package/dist/epistemicHelpers-Bd9xbaib.d.ts +329 -0
  102. package/dist/epistemicHelpers.d.ts +4 -0
  103. package/dist/epistemicHelpers.js +999 -0
  104. package/dist/epistemicHelpers.js.map +1 -0
  105. package/dist/epistemicLinking-CyeLOIzN.d.ts +35 -0
  106. package/dist/epistemicLinking.d.ts +1 -0
  107. package/dist/epistemicLinking.js +1391 -0
  108. package/dist/epistemicLinking.js.map +1 -0
  109. package/dist/epistemicNodes-BpD6Koud.d.ts +167 -0
  110. package/dist/epistemicNodes.d.ts +2 -0
  111. package/dist/epistemicNodes.js +2942 -0
  112. package/dist/epistemicNodes.js.map +1 -0
  113. package/dist/epistemicQuestions-CmEeY6zQ.d.ts +214 -0
  114. package/dist/epistemicQuestions.d.ts +3 -0
  115. package/dist/epistemicQuestions.js +4993 -0
  116. package/dist/epistemicQuestions.js.map +1 -0
  117. package/dist/epistemicSources-ZazxHOK1.d.ts +25 -0
  118. package/dist/epistemicSources.d.ts +1 -0
  119. package/dist/epistemicSources.js +2025 -0
  120. package/dist/epistemicSources.js.map +1 -0
  121. package/dist/evaluators/index.d.ts +9 -0
  122. package/dist/evaluators/index.js +8440 -0
  123. package/dist/evaluators/index.js.map +1 -0
  124. package/dist/evaluators/lintCheckerEvaluator.d.ts +11 -0
  125. package/dist/evaluators/lintCheckerEvaluator.js +155 -0
  126. package/dist/evaluators/lintCheckerEvaluator.js.map +1 -0
  127. package/dist/evaluators/sentryCheckerEvaluator.d.ts +11 -0
  128. package/dist/evaluators/sentryCheckerEvaluator.js +126 -0
  129. package/dist/evaluators/sentryCheckerEvaluator.js.map +1 -0
  130. package/dist/evaluators/shared.d.ts +27 -0
  131. package/dist/evaluators/shared.js +92 -0
  132. package/dist/evaluators/shared.js.map +1 -0
  133. package/dist/evaluators/testRunnerEvaluator.d.ts +17 -0
  134. package/dist/evaluators/testRunnerEvaluator.js +232 -0
  135. package/dist/evaluators/testRunnerEvaluator.js.map +1 -0
  136. package/dist/evaluators/tscCheckerEvaluator.d.ts +11 -0
  137. package/dist/evaluators/tscCheckerEvaluator.js +189 -0
  138. package/dist/evaluators/tscCheckerEvaluator.js.map +1 -0
  139. package/dist/globalId-DKh9d_uD.d.ts +20 -0
  140. package/dist/globalId.d.ts +1 -0
  141. package/dist/globalId.js +15 -0
  142. package/dist/globalId.js.map +1 -0
  143. package/dist/graphTypes-CpgIuCdo.d.ts +52 -0
  144. package/dist/graphTypes.d.ts +1 -0
  145. package/dist/graphTypes.js +120 -0
  146. package/dist/graphTypes.js.map +1 -0
  147. package/dist/helpers-BYHIk5vU.d.ts +27 -0
  148. package/dist/helpers.d.ts +4 -0
  149. package/dist/helpers.js +313 -0
  150. package/dist/helpers.js.map +1 -0
  151. package/dist/index-Dct1T70K.d.ts +25 -0
  152. package/dist/index-Dq-7R-gi.d.ts +31 -0
  153. package/dist/index.d.ts +45 -0
  154. package/dist/index.js +22294 -0
  155. package/dist/index.js.map +1 -0
  156. package/dist/invariantEnforcement.d.ts +52 -0
  157. package/dist/invariantEnforcement.js +231 -0
  158. package/dist/invariantEnforcement.js.map +1 -0
  159. package/dist/logicalRoleInference-CJxqWi3u.d.ts +16 -0
  160. package/dist/logicalRoleInference.d.ts +3 -0
  161. package/dist/logicalRoleInference.js +64 -0
  162. package/dist/logicalRoleInference.js.map +1 -0
  163. package/dist/matcherFeedbackUtils.d.ts +33 -0
  164. package/dist/matcherFeedbackUtils.js +95 -0
  165. package/dist/matcherFeedbackUtils.js.map +1 -0
  166. package/dist/ontology-matching-Buhu23ss.d.ts +48 -0
  167. package/dist/ontology-matching.d.ts +2 -0
  168. package/dist/ontology-matching.js +346 -0
  169. package/dist/ontology-matching.js.map +1 -0
  170. package/dist/ontologyApproval-Ba0Jjk1k.d.ts +26 -0
  171. package/dist/ontologyApproval.d.ts +1 -0
  172. package/dist/ontologyApproval.js +78 -0
  173. package/dist/ontologyApproval.js.map +1 -0
  174. package/dist/ontologyDefinitions.d.ts +72 -0
  175. package/dist/ontologyDefinitions.js +635 -0
  176. package/dist/ontologyDefinitions.js.map +1 -0
  177. package/dist/ontologyHelpers.d.ts +79 -0
  178. package/dist/ontologyHelpers.js +81 -0
  179. package/dist/ontologyHelpers.js.map +1 -0
  180. package/dist/ontologyRegistry-B67rPJ16.d.ts +31 -0
  181. package/dist/ontologyRegistry.d.ts +1 -0
  182. package/dist/ontologyRegistry.js +296 -0
  183. package/dist/ontologyRegistry.js.map +1 -0
  184. package/dist/projectionReconciliation-CxrXYGaB.d.ts +20 -0
  185. package/dist/projectionReconciliation.d.ts +1 -0
  186. package/dist/projectionReconciliation.js +261 -0
  187. package/dist/projectionReconciliation.js.map +1 -0
  188. package/dist/projectionStaleness-CAdpIsaW.d.ts +51 -0
  189. package/dist/projectionStaleness.d.ts +1 -0
  190. package/dist/projectionStaleness.js +57 -0
  191. package/dist/projectionStaleness.js.map +1 -0
  192. package/dist/questionEvidenceLinks-BdQD0TkM.d.ts +34 -0
  193. package/dist/questionEvidenceLinks.d.ts +1 -0
  194. package/dist/questionEvidenceLinks.js +1690 -0
  195. package/dist/questionEvidenceLinks.js.map +1 -0
  196. package/dist/resolverTypes-CC8Ea2E2.d.ts +20 -0
  197. package/dist/resolverTypes.d.ts +4 -0
  198. package/dist/resolverTypes.js +3 -0
  199. package/dist/resolverTypes.js.map +1 -0
  200. package/dist/resolvers-Br1a6eLV.d.ts +14 -0
  201. package/dist/resolvers.d.ts +5 -0
  202. package/dist/resolvers.js +308 -0
  203. package/dist/resolvers.js.map +1 -0
  204. package/dist/scopeResolverCompat.d.ts +26 -0
  205. package/dist/scopeResolverCompat.js +242 -0
  206. package/dist/scopeResolverCompat.js.map +1 -0
  207. package/dist/text-matching-CMn2WnVD.d.ts +40 -0
  208. package/dist/text-matching.d.ts +2 -0
  209. package/dist/text-matching.js +246 -0
  210. package/dist/text-matching.js.map +1 -0
  211. package/dist/topicOntologyResolver.d.ts +80 -0
  212. package/dist/topicOntologyResolver.js +67 -0
  213. package/dist/topicOntologyResolver.js.map +1 -0
  214. package/dist/topicProjectOverlay.d.ts +92 -0
  215. package/dist/topicProjectOverlay.js +249 -0
  216. package/dist/topicProjectOverlay.js.map +1 -0
  217. package/dist/topicScope-By_zp4tt.d.ts +34 -0
  218. package/dist/topicScope.d.ts +3 -0
  219. package/dist/topicScope.js +206 -0
  220. package/dist/topicScope.js.map +1 -0
  221. package/dist/workspaceIsolation.d.ts +44 -0
  222. package/dist/workspaceIsolation.js +950 -0
  223. package/dist/workspaceIsolation.js.map +1 -0
  224. package/package.json +46 -0
@@ -0,0 +1,329 @@
1
+ import { Id, MutationCtx } from './convex.js';
2
+ import { a as getNeo4jLabel, b as getNeo4jRelType, i as isDeprecatedEdgeType } from './graphTypes-CpgIuCdo.js';
3
+
4
+ /**
5
+ * Epistemic Spine - Dual-Write Helpers
6
+ *
7
+ * These functions handle writing to both legacy tables AND the epistemic spine.
8
+ * They're called from existing mutations to ensure every new entity gets a spine entry.
9
+ *
10
+ * The spine is the canonical identity layer - these helpers ensure consistency.
11
+ *
12
+ * @see /docs/architecture/EPISTEMIC_SPINE.md
13
+ * @see /docs/architecture/UNIFIED_GRAPH_ARCHITECTURE.md
14
+ */
15
+
16
+ /**
17
+ * Epistemic Layer - governs traversal rules
18
+ * L4 → L3 → L2 → L1 (never skip layers)
19
+ */
20
+ type EpistemicLayer = "L4" | "L3" | "L2" | "L1" | "ontological" | "organizational";
21
+ /**
22
+ * Map nodeType to its epistemic layer
23
+ *
24
+ * Layer semantics:
25
+ * - L4: Audit targets (decisions, outcomes) - what we committed to
26
+ * - L3: Traversal anchors (beliefs, questions, themes) - epistemic structure
27
+ * - L2: Compression boundary (claims, evidence, synthesis) - minimum reasoning unit
28
+ * - L1: Terminal leaves (atomic_fact, excerpt, source) - non-traversable grounding
29
+ * - ontological: Entities in the world (companies, people) - not epistemic
30
+ * - organizational: Structural containers (topics, lenses, worktrees) - not epistemic
31
+ */
32
+ declare function getNodeLayer(nodeType: string): EpistemicLayer;
33
+ /**
34
+ * Layer traversal rules
35
+ * Key constraint: Cannot skip layers during traversal
36
+ */
37
+ declare const LAYER_TRAVERSAL_RULES: {
38
+ readonly L4: {
39
+ readonly canReach: readonly ["L3", "L4"];
40
+ readonly mustPassThrough: "L3";
41
+ };
42
+ readonly L3: {
43
+ readonly canReach: readonly ["L2", "L3", "L4"];
44
+ readonly mustPassThrough: "L2";
45
+ };
46
+ readonly L2: {
47
+ readonly canReach: readonly ["L1", "L2", "L3"];
48
+ readonly mustPassThrough: null;
49
+ };
50
+ readonly L1: {
51
+ readonly canReach: readonly ["L1"];
52
+ readonly mustPassThrough: null;
53
+ };
54
+ readonly ontological: {
55
+ readonly canReach: readonly ["L3", "L2", "ontological"];
56
+ readonly mustPassThrough: null;
57
+ };
58
+ readonly organizational: {
59
+ readonly canReach: readonly ["L3", "L2", "organizational"];
60
+ readonly mustPassThrough: null;
61
+ };
62
+ };
63
+ /**
64
+ * Check if a direct edge between two layers is allowed
65
+ */
66
+ declare function isValidLayerConnection(fromLayer: EpistemicLayer, toLayer: EpistemicLayer): boolean;
67
+ /**
68
+ * Get layer hierarchy number (for comparison)
69
+ * Higher number = higher layer
70
+ */
71
+ declare function getLayerDepth(layer: EpistemicLayer): number;
72
+ /**
73
+ * Check if we can traverse from one layer to another
74
+ * (considering intermediate layers)
75
+ */
76
+ declare function canTraverseToLayer(fromLayer: EpistemicLayer, toLayer: EpistemicLayer): boolean;
77
+ /**
78
+ * Traversal mode - determines how to traverse the graph
79
+ *
80
+ * anchor_down: Start at L3 belief, traverse to L2 evidence, stop at L1 sources
81
+ * anchor_up: Start at L2 evidence, traverse to L3 beliefs it supports
82
+ * same_layer: Traverse within a single layer (e.g., belief → belief)
83
+ * decision_trace: Start at L4 decision, traverse to L3 beliefs it was based on
84
+ */
85
+ type TraversalMode = "anchor_down" | "anchor_up" | "same_layer" | "decision_trace";
86
+ /**
87
+ * Traversal options for layer-aware queries
88
+ */
89
+ type TraversalOptions = {
90
+ /** Starting node ID */
91
+ startNodeId: Id<"epistemicNodes">;
92
+ /** Traversal mode */
93
+ mode: TraversalMode;
94
+ /** Edge types to follow (empty = all valid for mode) */
95
+ allowedEdgeTypes?: string[];
96
+ /** Maximum depth */
97
+ maxDepth?: number;
98
+ /** Minimum layer to stop at (L1 = 1, L4 = 4) */
99
+ minLayer?: number;
100
+ /** Maximum layer to reach */
101
+ maxLayer?: number;
102
+ };
103
+ /**
104
+ * Check if traversal should continue based on layer constraints
105
+ */
106
+ declare function shouldContinueTraversal(currentLayer: EpistemicLayer, targetLayer: EpistemicLayer, options: {
107
+ mode: TraversalMode;
108
+ minLayer?: number;
109
+ maxLayer?: number;
110
+ }): boolean;
111
+ /**
112
+ * Get default minLayer for a traversal mode
113
+ */
114
+ declare function getDefaultMinLayer(mode: TraversalMode): number;
115
+ /**
116
+ * Get allowed edge types for a traversal mode
117
+ */
118
+ declare function getDefaultEdgeTypesForMode(mode: TraversalMode): string[];
119
+ /**
120
+ * Edge Layer Rules - defines valid layer combinations for each edge type
121
+ *
122
+ * Format: { from: [allowed source layers], to: [allowed target layers] }
123
+ *
124
+ * Key rules:
125
+ * - L4 edges: Decision → L3 (beliefs, questions, themes)
126
+ * - Cross-layer edges: L2 → L3 (evidence informs beliefs)
127
+ * - Same-layer edges: L3 → L3, L2 → L2 (beliefs depend on beliefs)
128
+ * - Downward edges: L2 → L1 (evidence extracted from source)
129
+ * - Lifecycle edges: same layer only (supersedes)
130
+ */
131
+ declare const EDGE_LAYER_RULES: Record<string, {
132
+ from: EpistemicLayer[];
133
+ to: EpistemicLayer[];
134
+ description: string;
135
+ }>;
136
+ /**
137
+ * Validate an edge against layer rules
138
+ *
139
+ * Returns { valid: true } or { valid: false, reason: string }
140
+ */
141
+ declare function validateEdgeLayers(edgeType: string, fromLayer: EpistemicLayer, toLayer: EpistemicLayer): {
142
+ valid: boolean;
143
+ reason?: string;
144
+ };
145
+ /**
146
+ * Create an epistemic node for an insight (evidence)
147
+ * Called after inserting into the insights table
148
+ */
149
+ declare function createEpistemicNodeForInsight(ctx: MutationCtx, _insightId: Id<"epistemicNodes">, insight: {
150
+ projectId: string;
151
+ text: string;
152
+ kind: string;
153
+ tags?: string[];
154
+ sourceType?: string;
155
+ aiProvider?: string;
156
+ verificationStatus?: string;
157
+ sourceArtifactId?: Id<"finalArtifacts">;
158
+ sourceQuestionId?: Id<"epistemicNodes">;
159
+ sourceAnchor?: {
160
+ artifactId: string;
161
+ artifactType: string;
162
+ artifactTitle?: string;
163
+ sectionHeading?: string;
164
+ selectedText?: string;
165
+ startOffset?: number;
166
+ endOffset?: number;
167
+ pageNumber?: number;
168
+ };
169
+ createdBy: string;
170
+ }): Promise<Id<"epistemicNodes">>;
171
+ /**
172
+ * Create an epistemic node for a belief
173
+ * Called after inserting into the beliefs table
174
+ */
175
+ declare function createEpistemicNodeForBelief(ctx: MutationCtx, beliefId: Id<"epistemicNodes">, belief: {
176
+ projectId: string;
177
+ belief: string;
178
+ rationale?: string;
179
+ confidence: string;
180
+ topic?: string;
181
+ sourceAnchor?: {
182
+ artifactId: string;
183
+ artifactType: string;
184
+ artifactTitle?: string;
185
+ sectionHeading?: string;
186
+ selectedText?: string;
187
+ startOffset?: number;
188
+ endOffset?: number;
189
+ };
190
+ createdBy: string;
191
+ }): Promise<Id<"epistemicNodes">>;
192
+ /**
193
+ * Create an epistemic node for a question
194
+ * Called after inserting into the questions table
195
+ */
196
+ declare function createEpistemicNodeForQuestion(ctx: MutationCtx, _questionId: Id<"epistemicNodes">, question: {
197
+ projectId: string;
198
+ question: string;
199
+ category?: string;
200
+ priority: string;
201
+ source: string;
202
+ sourceAnchor?: {
203
+ artifactId: string;
204
+ artifactType: string;
205
+ artifactTitle?: string;
206
+ sectionHeading?: string;
207
+ selectedText?: string;
208
+ startOffset?: number;
209
+ endOffset?: number;
210
+ };
211
+ createdBy: string;
212
+ }): Promise<Id<"epistemicNodes">>;
213
+ /**
214
+ * Create an epistemic node for a synthesis artifact (primer or deep research).
215
+ *
216
+ * ⚠️ IMPORTANT: This function should NOT be called for primers/deep research
217
+ * unless the node is being connected to evidence as a source.
218
+ * Standalone synthesis nodes create orphans in the graph.
219
+ *
220
+ * The correct pattern is:
221
+ * 1. Store the artifact in finalArtifacts (for UI display)
222
+ * 2. Only create epistemic node when extracting evidence FROM the artifact
223
+ * 3. Create edge: evidence -> derived_from -> synthesis
224
+ *
225
+ * @deprecated Consider removing automatic node creation for primers.
226
+ * Use the artifact ID reference in evidence metadata instead.
227
+ */
228
+ declare function createEpistemicNodeForArtifact(ctx: MutationCtx, artifactId: Id<"finalArtifacts">, artifact: {
229
+ projectId?: string;
230
+ title: string;
231
+ content: string;
232
+ type: string;
233
+ isDeepResearch?: boolean;
234
+ aiProvider?: string;
235
+ createdBy: string;
236
+ }): Promise<Id<"epistemicNodes">>;
237
+ /**
238
+ * Edge type union for createEpistemicEdge
239
+ * Phase 2C: Updated to include L4 edges and modern edge types
240
+ * Phase 3: Added full epistemic impact edges for confidence propagation
241
+ */
242
+ type EpistemicEdgeType = "derived_from" | "supports" | "contains" | "depends_on" | "informs" | "tests" | "responds_to" | "relates_to_thesis" | "belongs_to" | "plays_theme" | "supersedes" | "counterfactual_of" | "cascade_to" | "mutually_exclusive" | "correlates_with" | "amplifies" | "precondition_for" | "in_tension_with" | "assumes" | "would_predict" | "analogous_to" | "independent_of" | "prerequisite_for" | "parallel_to" | "corroborates" | "extends" | "same_source_as" | "same_theme_as" | "evaluates" | "perspective_on" | "works_at" | "participates_in" | "performs" | "function_in" | "impacts" | "invested_in" | "raised_from" | "mentioned_in" | "founded_by" | "competes_with";
243
+ /**
244
+ * Normalize confidence to a 0-1 number regardless of input format.
245
+ *
246
+ * Handles:
247
+ * - number (0-1): returned as-is
248
+ * - number (1-100): divided by 100
249
+ * - string ("high"/"medium"/"low"): mapped to 0.8/0.5/0.3
250
+ * - undefined/null/other: returns 0.5 default
251
+ *
252
+ * This is the canonical way to read confidence from any source.
253
+ */
254
+ declare function normalizeConfidence(confidence: unknown): number;
255
+ /**
256
+ * Epistemic Edge Propagation Semantics
257
+ *
258
+ * Each edge type has specific propagation rules for confidence cascades:
259
+ *
260
+ * | Edge Type | Direction | Propagation Rule |
261
+ * |-------------------|--------------|-----------------------------------------------------------|
262
+ * | depends_on | B → A | A.conf = min(A.conf, B.conf + 0.2) |
263
+ * | reinforces | A ↔ B | Both get boost when either validated |
264
+ * | falsified_by | B → A | A.conf = 1 - B.conf (inverse) |
265
+ * | exclusive_with | A ↔ B | A.conf + B.conf ≤ 1.0 (redistribute on evidence) |
266
+ * | contradicts | A ↔ B | Creates tension - neither can be validated without fork |
267
+ * | collapses_if | A → B | If A.conf < threshold, B.conf → 0 |
268
+ * | cascade_from | A → B | B.conf_delta = A.conf_delta * damping_factor |
269
+ * | strengthened_by | A → B | B.conf += A.conf_delta * correlation |
270
+ * | weakened_by | A → B | B.conf -= A.conf_delta * correlation |
271
+ * | alternative_to | A ↔ B | Evidence for A reduces B, and vice versa |
272
+ * | subsumes | A → B | A.conf >= B.conf always |
273
+ * | validated_by | A → B | If A validated, B gains confidence |
274
+ * | required_for | A → B | B cannot be validated until A is validated |
275
+ * | blocks | A → B | B resolution blocked until A resolved |
276
+ */
277
+ /**
278
+ * Create an epistemic edge between two nodes
279
+ *
280
+ * Phase 1 (Graph Architecture): Writes to Neo4j directly - Neo4j is source of truth.
281
+ * Returns globalId (string) instead of Convex edge ID.
282
+ *
283
+ * Phase 2C: Validates layer rules before creation
284
+ */
285
+ declare function createEpistemicEdge(ctx: MutationCtx, params: {
286
+ fromNodeId: Id<"epistemicNodes">;
287
+ toNodeId: Id<"epistemicNodes">;
288
+ edgeType: EpistemicEdgeType;
289
+ weight?: number;
290
+ confidence?: number;
291
+ context?: string;
292
+ projectId?: string;
293
+ createdBy: string;
294
+ skipLayerValidation?: boolean;
295
+ }): Promise<string>;
296
+ /**
297
+ * Create an edge when linking an insight to a question
298
+ * This creates a "derived_from" edge (evidence answers/informs question)
299
+ */
300
+ declare function createEdgeForInsightQuestionLink(ctx: MutationCtx, questionId: Id<"epistemicNodes">, insightId: Id<"epistemicNodes">, createdBy: string): Promise<string | null>;
301
+
302
+ declare const epistemicHelpers_EDGE_LAYER_RULES: typeof EDGE_LAYER_RULES;
303
+ type epistemicHelpers_EpistemicLayer = EpistemicLayer;
304
+ declare const epistemicHelpers_LAYER_TRAVERSAL_RULES: typeof LAYER_TRAVERSAL_RULES;
305
+ type epistemicHelpers_TraversalMode = TraversalMode;
306
+ type epistemicHelpers_TraversalOptions = TraversalOptions;
307
+ declare const epistemicHelpers_canTraverseToLayer: typeof canTraverseToLayer;
308
+ declare const epistemicHelpers_createEdgeForInsightQuestionLink: typeof createEdgeForInsightQuestionLink;
309
+ declare const epistemicHelpers_createEpistemicEdge: typeof createEpistemicEdge;
310
+ declare const epistemicHelpers_createEpistemicNodeForArtifact: typeof createEpistemicNodeForArtifact;
311
+ declare const epistemicHelpers_createEpistemicNodeForBelief: typeof createEpistemicNodeForBelief;
312
+ declare const epistemicHelpers_createEpistemicNodeForInsight: typeof createEpistemicNodeForInsight;
313
+ declare const epistemicHelpers_createEpistemicNodeForQuestion: typeof createEpistemicNodeForQuestion;
314
+ declare const epistemicHelpers_getDefaultEdgeTypesForMode: typeof getDefaultEdgeTypesForMode;
315
+ declare const epistemicHelpers_getDefaultMinLayer: typeof getDefaultMinLayer;
316
+ declare const epistemicHelpers_getLayerDepth: typeof getLayerDepth;
317
+ declare const epistemicHelpers_getNeo4jLabel: typeof getNeo4jLabel;
318
+ declare const epistemicHelpers_getNeo4jRelType: typeof getNeo4jRelType;
319
+ declare const epistemicHelpers_getNodeLayer: typeof getNodeLayer;
320
+ declare const epistemicHelpers_isDeprecatedEdgeType: typeof isDeprecatedEdgeType;
321
+ declare const epistemicHelpers_isValidLayerConnection: typeof isValidLayerConnection;
322
+ declare const epistemicHelpers_normalizeConfidence: typeof normalizeConfidence;
323
+ declare const epistemicHelpers_shouldContinueTraversal: typeof shouldContinueTraversal;
324
+ declare const epistemicHelpers_validateEdgeLayers: typeof validateEdgeLayers;
325
+ declare namespace epistemicHelpers {
326
+ export { epistemicHelpers_EDGE_LAYER_RULES as EDGE_LAYER_RULES, type epistemicHelpers_EpistemicLayer as EpistemicLayer, epistemicHelpers_LAYER_TRAVERSAL_RULES as LAYER_TRAVERSAL_RULES, type epistemicHelpers_TraversalMode as TraversalMode, type epistemicHelpers_TraversalOptions as TraversalOptions, epistemicHelpers_canTraverseToLayer as canTraverseToLayer, epistemicHelpers_createEdgeForInsightQuestionLink as createEdgeForInsightQuestionLink, epistemicHelpers_createEpistemicEdge as createEpistemicEdge, epistemicHelpers_createEpistemicNodeForArtifact as createEpistemicNodeForArtifact, epistemicHelpers_createEpistemicNodeForBelief as createEpistemicNodeForBelief, epistemicHelpers_createEpistemicNodeForInsight as createEpistemicNodeForInsight, epistemicHelpers_createEpistemicNodeForQuestion as createEpistemicNodeForQuestion, epistemicHelpers_getDefaultEdgeTypesForMode as getDefaultEdgeTypesForMode, epistemicHelpers_getDefaultMinLayer as getDefaultMinLayer, epistemicHelpers_getLayerDepth as getLayerDepth, epistemicHelpers_getNeo4jLabel as getNeo4jLabel, epistemicHelpers_getNeo4jRelType as getNeo4jRelType, epistemicHelpers_getNodeLayer as getNodeLayer, epistemicHelpers_isDeprecatedEdgeType as isDeprecatedEdgeType, epistemicHelpers_isValidLayerConnection as isValidLayerConnection, epistemicHelpers_normalizeConfidence as normalizeConfidence, epistemicHelpers_shouldContinueTraversal as shouldContinueTraversal, epistemicHelpers_validateEdgeLayers as validateEdgeLayers };
327
+ }
328
+
329
+ export { type EpistemicLayer as E, LAYER_TRAVERSAL_RULES as L, type TraversalMode as T, getLayerDepth as a, type TraversalOptions as b, canTraverseToLayer as c, getDefaultMinLayer as d, epistemicHelpers as e, getDefaultEdgeTypesForMode as f, getNodeLayer as g, EDGE_LAYER_RULES as h, isValidLayerConnection as i, createEpistemicNodeForInsight as j, createEpistemicNodeForBelief as k, createEpistemicNodeForQuestion as l, createEpistemicNodeForArtifact as m, normalizeConfidence as n, createEpistemicEdge as o, createEdgeForInsightQuestionLink as p, shouldContinueTraversal as s, validateEdgeLayers as v };
@@ -0,0 +1,4 @@
1
+ import './convex.js';
2
+ export { a as getNeo4jLabel, b as getNeo4jRelType, i as isDeprecatedEdgeType } from './graphTypes-CpgIuCdo.js';
3
+ export { h as EDGE_LAYER_RULES, E as EpistemicLayer, L as LAYER_TRAVERSAL_RULES, T as TraversalMode, b as TraversalOptions, c as canTraverseToLayer, p as createEdgeForInsightQuestionLink, o as createEpistemicEdge, m as createEpistemicNodeForArtifact, k as createEpistemicNodeForBelief, j as createEpistemicNodeForInsight, l as createEpistemicNodeForQuestion, f as getDefaultEdgeTypesForMode, d as getDefaultMinLayer, a as getLayerDepth, g as getNodeLayer, i as isValidLayerConnection, n as normalizeConfidence, s as shouldContinueTraversal, v as validateEdgeLayers } from './epistemicHelpers-Bd9xbaib.js';
4
+ import 'convex/values';