@lucern/graph-primitives 1.0.0 → 1.0.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 (202) hide show
  1. package/README.md +13 -12
  2. package/dist/beliefDecay.js +24 -17
  3. package/dist/beliefDecay.js.map +1 -1
  4. package/dist/beliefEvidenceLinks.js +32 -8
  5. package/dist/beliefEvidenceLinks.js.map +1 -1
  6. package/dist/confidencePropagationDispatch.js.map +1 -1
  7. package/dist/contradictions.js +32 -9
  8. package/dist/contradictions.js.map +1 -1
  9. package/dist/convex.d.ts +55 -12
  10. package/dist/convex.js.map +1 -1
  11. package/dist/edgeValidation.d.ts +25 -2
  12. package/dist/edges/index.d.ts +9 -2
  13. package/dist/edges/index.js.map +1 -1
  14. package/dist/edges/propagationTypes.d.ts +2 -3
  15. package/dist/edges/propagationTypes.js.map +1 -1
  16. package/dist/entityBridge.js +10 -3
  17. package/dist/entityBridge.js.map +1 -1
  18. package/dist/entityLifecycle.js +15 -3
  19. package/dist/entityLifecycle.js.map +1 -1
  20. package/dist/epistemicAnswers.js.map +1 -1
  21. package/dist/epistemicBeliefs.admin.d.ts +36 -0
  22. package/dist/epistemicBeliefs.admin.js +745 -0
  23. package/dist/epistemicBeliefs.admin.js.map +1 -0
  24. package/dist/epistemicBeliefs.backfills.d.ts +62 -0
  25. package/dist/epistemicBeliefs.backfills.js +1004 -0
  26. package/dist/epistemicBeliefs.backfills.js.map +1 -0
  27. package/dist/epistemicBeliefs.confidence.d.ts +45 -0
  28. package/dist/epistemicBeliefs.confidence.js +1285 -0
  29. package/dist/epistemicBeliefs.confidence.js.map +1 -0
  30. package/dist/epistemicBeliefs.core.d.ts +35 -0
  31. package/dist/epistemicBeliefs.core.js +1508 -0
  32. package/dist/epistemicBeliefs.core.js.map +1 -0
  33. package/dist/epistemicBeliefs.d.ts +12 -3
  34. package/dist/epistemicBeliefs.helpers.d.ts +168 -0
  35. package/dist/epistemicBeliefs.helpers.js +1060 -0
  36. package/dist/epistemicBeliefs.helpers.js.map +1 -0
  37. package/dist/epistemicBeliefs.internal.d.ts +30 -0
  38. package/dist/epistemicBeliefs.internal.js +1329 -0
  39. package/dist/epistemicBeliefs.internal.js.map +1 -0
  40. package/dist/epistemicBeliefs.js +1196 -1184
  41. package/dist/epistemicBeliefs.js.map +1 -1
  42. package/dist/epistemicBeliefs.lifecycle.d.ts +19 -0
  43. package/dist/epistemicBeliefs.lifecycle.js +1608 -0
  44. package/dist/epistemicBeliefs.lifecycle.js.map +1 -0
  45. package/dist/epistemicBeliefs.links.d.ts +30 -0
  46. package/dist/epistemicBeliefs.links.js +761 -0
  47. package/dist/epistemicBeliefs.links.js.map +1 -0
  48. package/dist/epistemicBeliefs.queries.d.ts +16 -0
  49. package/dist/epistemicBeliefs.queries.js +90 -0
  50. package/dist/epistemicBeliefs.queries.js.map +1 -0
  51. package/dist/epistemicContractHelpers.d.ts +1 -1
  52. package/dist/epistemicContractHelpers.js +1 -1
  53. package/dist/epistemicContracts.d.ts +5 -76
  54. package/dist/epistemicContracts.evaluators.d.ts +36 -0
  55. package/dist/epistemicContracts.evaluators.js +2506 -0
  56. package/dist/epistemicContracts.evaluators.js.map +1 -0
  57. package/dist/epistemicContracts.handlers.d.ts +40 -0
  58. package/dist/epistemicContracts.handlers.js +3029 -0
  59. package/dist/epistemicContracts.handlers.js.map +1 -0
  60. package/dist/epistemicContracts.js +2006 -5281
  61. package/dist/epistemicContracts.js.map +1 -1
  62. package/dist/epistemicContracts.metrics.d.ts +26 -0
  63. package/dist/epistemicContracts.metrics.js +427 -0
  64. package/dist/epistemicContracts.metrics.js.map +1 -0
  65. package/dist/epistemicContracts.types.d.ts +159 -0
  66. package/dist/epistemicContracts.types.js +3 -0
  67. package/dist/epistemicContracts.types.js.map +1 -0
  68. package/dist/epistemicEdgeCreation.d.ts +73 -0
  69. package/dist/epistemicEdgeCreation.js +450 -0
  70. package/dist/epistemicEdgeCreation.js.map +1 -0
  71. package/dist/epistemicEdges-BF-cn4i3.d.ts +43 -0
  72. package/dist/epistemicEdges.d.ts +8 -1
  73. package/dist/epistemicEdges.handlers.d.ts +20 -0
  74. package/dist/epistemicEdges.handlers.js +289 -0
  75. package/dist/epistemicEdges.handlers.js.map +1 -0
  76. package/dist/epistemicEdges.helpers.d.ts +27 -0
  77. package/dist/epistemicEdges.helpers.js +162 -0
  78. package/dist/epistemicEdges.helpers.js.map +1 -0
  79. package/dist/epistemicEdges.js +797 -875
  80. package/dist/epistemicEdges.js.map +1 -1
  81. package/dist/epistemicEdges.mutations.d.ts +39 -0
  82. package/dist/epistemicEdges.mutations.js +1365 -0
  83. package/dist/epistemicEdges.mutations.js.map +1 -0
  84. package/dist/epistemicEdges.queries.d.ts +95 -0
  85. package/dist/epistemicEdges.queries.js +851 -0
  86. package/dist/epistemicEdges.queries.js.map +1 -0
  87. package/dist/epistemicEdges.types.d.ts +32 -0
  88. package/dist/epistemicEdges.types.js +3 -0
  89. package/dist/epistemicEdges.types.js.map +1 -0
  90. package/dist/epistemicEvidence-DvfchNt7.d.ts +46 -0
  91. package/dist/epistemicEvidence.d.ts +5 -2
  92. package/dist/epistemicEvidence.js +801 -807
  93. package/dist/epistemicEvidence.js.map +1 -1
  94. package/dist/epistemicEvidenceHelpers.d.ts +71 -0
  95. package/dist/epistemicEvidenceHelpers.js +769 -0
  96. package/dist/epistemicEvidenceHelpers.js.map +1 -0
  97. package/dist/epistemicEvidenceMutations.d.ts +10 -0
  98. package/dist/epistemicEvidenceMutations.js +1421 -0
  99. package/dist/epistemicEvidenceMutations.js.map +1 -0
  100. package/dist/epistemicEvidenceQueries.d.ts +10 -0
  101. package/dist/epistemicEvidenceQueries.js +1049 -0
  102. package/dist/epistemicEvidenceQueries.js.map +1 -0
  103. package/dist/epistemicHelpers.d.ts +4 -2
  104. package/dist/epistemicHelpers.js +132 -127
  105. package/dist/epistemicHelpers.js.map +1 -1
  106. package/dist/epistemicLayerRules.d.ts +138 -0
  107. package/dist/epistemicLayerRules.js +481 -0
  108. package/dist/epistemicLayerRules.js.map +1 -0
  109. package/dist/epistemicLinking.js +1 -1
  110. package/dist/epistemicLinking.js.map +1 -1
  111. package/dist/epistemicNodeCreation.d.ts +101 -0
  112. package/dist/epistemicNodeCreation.js +709 -0
  113. package/dist/epistemicNodeCreation.js.map +1 -0
  114. package/dist/epistemicNodes-BCQxpYx_.d.ts +54 -0
  115. package/dist/epistemicNodes.d.ts +5 -1
  116. package/dist/epistemicNodes.helpers.d.ts +51 -0
  117. package/dist/epistemicNodes.helpers.js +73 -0
  118. package/dist/epistemicNodes.helpers.js.map +1 -0
  119. package/dist/epistemicNodes.internal.d.ts +34 -0
  120. package/dist/epistemicNodes.internal.js +658 -0
  121. package/dist/epistemicNodes.internal.js.map +1 -0
  122. package/dist/epistemicNodes.js +698 -693
  123. package/dist/epistemicNodes.js.map +1 -1
  124. package/dist/epistemicNodes.mutations.d.ts +34 -0
  125. package/dist/epistemicNodes.mutations.js +1153 -0
  126. package/dist/epistemicNodes.mutations.js.map +1 -0
  127. package/dist/epistemicNodes.queries.d.ts +36 -0
  128. package/dist/epistemicNodes.queries.js +619 -0
  129. package/dist/epistemicNodes.queries.js.map +1 -0
  130. package/dist/epistemicNodes.validators.d.ts +23 -0
  131. package/dist/epistemicNodes.validators.js +105 -0
  132. package/dist/epistemicNodes.validators.js.map +1 -0
  133. package/dist/epistemicQuestions-bwHd2FWE.d.ts +68 -0
  134. package/dist/epistemicQuestions.conviction.d.ts +52 -0
  135. package/dist/epistemicQuestions.conviction.js +1389 -0
  136. package/dist/epistemicQuestions.conviction.js.map +1 -0
  137. package/dist/epistemicQuestions.create.d.ts +29 -0
  138. package/dist/epistemicQuestions.create.js +1300 -0
  139. package/dist/epistemicQuestions.create.js.map +1 -0
  140. package/dist/epistemicQuestions.d.ts +10 -2
  141. package/dist/epistemicQuestions.evidence.d.ts +22 -0
  142. package/dist/epistemicQuestions.evidence.js +929 -0
  143. package/dist/epistemicQuestions.evidence.js.map +1 -0
  144. package/dist/epistemicQuestions.helpers.d.ts +69 -0
  145. package/dist/epistemicQuestions.helpers.js +824 -0
  146. package/dist/epistemicQuestions.helpers.js.map +1 -0
  147. package/dist/epistemicQuestions.js +2435 -2430
  148. package/dist/epistemicQuestions.js.map +1 -1
  149. package/dist/epistemicQuestions.lifecycle.d.ts +24 -0
  150. package/dist/epistemicQuestions.lifecycle.js +838 -0
  151. package/dist/epistemicQuestions.lifecycle.js.map +1 -0
  152. package/dist/epistemicQuestions.queries.d.ts +41 -0
  153. package/dist/epistemicQuestions.queries.js +1013 -0
  154. package/dist/epistemicQuestions.queries.js.map +1 -0
  155. package/dist/epistemicQuestions.sprint.d.ts +22 -0
  156. package/dist/epistemicQuestions.sprint.js +757 -0
  157. package/dist/epistemicQuestions.sprint.js.map +1 -0
  158. package/dist/epistemicQuestions.tail.d.ts +42 -0
  159. package/dist/epistemicQuestions.tail.js +1345 -0
  160. package/dist/epistemicQuestions.tail.js.map +1 -0
  161. package/dist/epistemicSources.js +6 -2
  162. package/dist/epistemicSources.js.map +1 -1
  163. package/dist/evaluators/index.d.ts +2 -2
  164. package/dist/evaluators/index.js +45 -5320
  165. package/dist/evaluators/index.js.map +1 -1
  166. package/dist/evaluators/lintCheckerEvaluator.d.ts +1 -1
  167. package/dist/evaluators/sentryCheckerEvaluator.d.ts +1 -1
  168. package/dist/evaluators/testRunnerEvaluator.d.ts +1 -1
  169. package/dist/evaluators/tscCheckerEvaluator.d.ts +1 -1
  170. package/dist/{graphTypes-CpgIuCdo.d.ts → graphTypes-B8VaIjnl.d.ts} +1 -1
  171. package/dist/graphTypes.d.ts +1 -1
  172. package/dist/{helpers-BYHIk5vU.d.ts → helpers-DNYfg6mo.d.ts} +2 -3
  173. package/dist/helpers.d.ts +2 -2
  174. package/dist/helpers.js.map +1 -1
  175. package/dist/{index-Dq-7R-gi.d.ts → index-C-Kyd7hD.d.ts} +1 -1
  176. package/dist/index.d.ts +160 -14
  177. package/dist/index.js +12291 -13001
  178. package/dist/index.js.map +1 -1
  179. package/dist/logicalRoleInference.js.map +1 -1
  180. package/dist/ontologyApproval.js +1 -1
  181. package/dist/ontologyApproval.js.map +1 -1
  182. package/dist/ontologyDefinitions.js +25 -7
  183. package/dist/ontologyDefinitions.js.map +1 -1
  184. package/dist/ontologyRegistry.js.map +1 -1
  185. package/dist/projectionReconciliation.js.map +1 -1
  186. package/dist/questionEvidenceLinks.js +28 -7
  187. package/dist/questionEvidenceLinks.js.map +1 -1
  188. package/dist/resolvers.js.map +1 -1
  189. package/dist/scopeResolverCompat.js.map +1 -1
  190. package/dist/topicProjectOverlay.js.map +1 -1
  191. package/dist/topicScope.js.map +1 -1
  192. package/dist/workflowBridge.js.map +1 -1
  193. package/dist/workspaceIsolation.js.map +1 -1
  194. package/package.json +4 -5
  195. package/dist/edgeValidation-CeI0wc0r.d.ts +0 -35
  196. package/dist/epistemicBeliefs-DzKjZAeC.d.ts +0 -377
  197. package/dist/epistemicEdges-CvlKnEyy.d.ts +0 -191
  198. package/dist/epistemicEvidence-xw6UUrwh.d.ts +0 -128
  199. package/dist/epistemicHelpers-DevrYgPN.d.ts +0 -329
  200. package/dist/epistemicNodes-DjSUfvyD.d.ts +0 -167
  201. package/dist/epistemicQuestions-B_nUclrH.d.ts +0 -214
  202. package/dist/index-Dct1T70K.d.ts +0 -25
@@ -1,6 +1,6 @@
1
1
  import { EngineeringEpistemicEvaluator } from './testRunnerEvaluator.js';
2
2
  import '@lucern/confidence';
3
- import '../epistemicContracts.js';
3
+ import '../epistemicContracts.types.js';
4
4
  import '../convex.js';
5
5
  import 'convex/values';
6
6
 
@@ -1,6 +1,6 @@
1
1
  import { EngineeringEpistemicEvaluator } from './testRunnerEvaluator.js';
2
2
  import '@lucern/confidence';
3
- import '../epistemicContracts.js';
3
+ import '../epistemicContracts.types.js';
4
4
  import '../convex.js';
5
5
  import 'convex/values';
6
6
 
@@ -1,5 +1,5 @@
1
1
  import { EpistemicContractRecord } from '@lucern/confidence';
2
- import { EpistemicEvaluator } from '../epistemicContracts.js';
2
+ import { EpistemicEvaluator } from '../epistemicContracts.types.js';
3
3
  import '../convex.js';
4
4
  import 'convex/values';
5
5
 
@@ -1,6 +1,6 @@
1
1
  import { EngineeringEpistemicEvaluator } from './testRunnerEvaluator.js';
2
2
  import '@lucern/confidence';
3
- import '../epistemicContracts.js';
3
+ import '../epistemicContracts.types.js';
4
4
  import '../convex.js';
5
5
  import 'convex/values';
6
6
 
@@ -49,4 +49,4 @@ declare namespace graphTypes {
49
49
  export { graphTypes_EDGE_TYPE_TO_REL as EDGE_TYPE_TO_REL, type graphTypes_EpistemicLayer as EpistemicLayer, graphTypes_NODE_TYPE_TO_LABEL as NODE_TYPE_TO_LABEL, graphTypes_getNeo4jLabel as getNeo4jLabel, graphTypes_getNeo4jRelType as getNeo4jRelType, graphTypes_getNodeLayer as getNodeLayer, graphTypes_isDeprecatedEdgeType as isDeprecatedEdgeType };
50
50
  }
51
51
 
52
- export { type EpistemicLayer as E, NODE_TYPE_TO_LABEL as N, getNeo4jLabel as a, getNeo4jRelType as b, getNodeLayer as c, EDGE_TYPE_TO_REL as d, graphTypes as g, isDeprecatedEdgeType as i };
52
+ export { type EpistemicLayer as E, NODE_TYPE_TO_LABEL as N, getNeo4jRelType as a, getNodeLayer as b, graphTypes as c, EDGE_TYPE_TO_REL as d, getNeo4jLabel as g, isDeprecatedEdgeType as i };
@@ -1 +1 @@
1
- export { d as EDGE_TYPE_TO_REL, E as EpistemicLayer, N as NODE_TYPE_TO_LABEL, a as getNeo4jLabel, b as getNeo4jRelType, c as getNodeLayer, i as isDeprecatedEdgeType } from './graphTypes-CpgIuCdo.js';
1
+ export { d as EDGE_TYPE_TO_REL, E as EpistemicLayer, N as NODE_TYPE_TO_LABEL, g as getNeo4jLabel, a as getNeo4jRelType, b as getNodeLayer, i as isDeprecatedEdgeType } from './graphTypes-B8VaIjnl.js';
@@ -1,5 +1,5 @@
1
1
  import { MutationCtx, Id } from './convex.js';
2
- import { E as EpistemicLayer, c as getNodeLayer } from './graphTypes-CpgIuCdo.js';
2
+ import { b as getNodeLayer } from './graphTypes-B8VaIjnl.js';
3
3
 
4
4
  /**
5
5
  * helpers module implementation.
@@ -17,11 +17,10 @@ declare function createEpistemicEdge(ctx: MutationCtx, params: {
17
17
  skipLayerValidation?: boolean;
18
18
  }): Promise<string>;
19
19
 
20
- declare const helpers_EpistemicLayer: typeof EpistemicLayer;
21
20
  declare const helpers_createEpistemicEdge: typeof createEpistemicEdge;
22
21
  declare const helpers_getNodeLayer: typeof getNodeLayer;
23
22
  declare namespace helpers {
24
- export { helpers_EpistemicLayer as EpistemicLayer, helpers_createEpistemicEdge as createEpistemicEdge, helpers_getNodeLayer as getNodeLayer };
23
+ export { helpers_createEpistemicEdge as createEpistemicEdge, helpers_getNodeLayer as getNodeLayer };
25
24
  }
26
25
 
27
26
  export { createEpistemicEdge as c, helpers as h };
package/dist/helpers.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import './convex.js';
2
- export { E as EpistemicLayer, c as getNodeLayer } from './graphTypes-CpgIuCdo.js';
3
- export { c as createEpistemicEdge } from './helpers-BYHIk5vU.js';
2
+ export { b as getNodeLayer } from './graphTypes-B8VaIjnl.js';
3
+ export { c as createEpistemicEdge } from './helpers-DNYfg6mo.js';
4
4
  import 'convex/values';
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/convex.ts","../src/graphTypes.ts","../src/edgeValidation.ts","../src/globalId.ts","../src/helpers.ts"],"names":[],"mappings":"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","file":"helpers.js","sourcesContent":["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","/**\n * Graph Type Registry for Convex\n *\n * This file mirrors the canonical type registry at lib/ontology/types.ts\n * but is compatible with Convex's bundling requirements.\n *\n * IMPORTANT: Keep this file in sync with lib/ontology/types.ts\n * The frontend uses lib/ontology/types.ts, Convex uses this file.\n *\n * @see /docs/architecture/UNIFIED_GRAPH_ARCHITECTURE.md\n */\n\n// =============================================================================\n// EPISTEMIC LAYERS\n// =============================================================================\n\nexport type EpistemicLayer =\n | \"L4\"\n | \"L3\"\n | \"L2\"\n | \"L1\"\n | \"ontological\"\n | \"organizational\";\n\n// =============================================================================\n// NODE TYPE TO LABEL MAPPING\n// =============================================================================\n\nexport const NODE_TYPE_TO_LABEL: Record<string, string> = {\n // L4: Audit Targets\n decision: \"Decision\",\n\n // L3: Traversal Anchors\n belief: \"Belief\",\n question: \"Question\",\n theme: \"Theme\",\n deal: \"Deal\",\n topic: \"Topic\",\n\n // L2: Compression Boundary\n claim: \"Claim\",\n evidence: \"Evidence\",\n synthesis: \"Synthesis\",\n answer: \"Answer\",\n\n // L1: Terminal Leaves\n atomic_fact: \"AtomicFact\",\n excerpt: \"Excerpt\",\n source: \"Source\",\n\n // Ontological (Neo4j is SOT)\n company: \"Company\",\n person: \"Person\",\n investor: \"Investor\",\n function: \"Function\",\n value_chain: \"ValueChain\",\n};\n\n// =============================================================================\n// EDGE TYPE TO NEO4J RELATIONSHIP MAPPING\n// =============================================================================\n\n/**\n * Epistemic Kernel v2: 6 canonical edge types + ontological edges.\n *\n * Weight and metadata carry nuance that previously required 67 separate type strings.\n * See: docs/architecture/epistemic-kernel-v2.md\n */\nexport const EDGE_TYPE_TO_REL: Record<string, string> = {\n // === THE SIX CANONICAL EPISTEMIC EDGE TYPES ===\n supports: \"SUPPORTS\", // L3↔L3: belief bears on belief (weight -1 to +1)\n informs: \"INFORMS\", // L2→L3: evidence bears on belief\n depends_on: \"DEPENDS_ON\", // L3→L3, Q→Q: structural gate\n derived_from: \"DERIVED_FROM\", // Any→Any: provenance chain (fork, synthesis, extraction, answer)\n contains: \"CONTAINS\", // Any→Any: hierarchy, scoping, membership\n tests: \"TESTS\", // Q→L3: question interrogates belief\n\n // === L4 DECISION EDGES (derived_from with derivationType=decision) ===\n // Kept as separate Neo4j relationship types for backward compat with L4 queries.\n // New code should use derived_from + metadata.\n based_on_belief: \"BASED_ON_BELIEF\",\n based_on_question: \"BASED_ON_QUESTION\",\n blocked_by_contradiction: \"BLOCKED_BY_CONTRADICTION\",\n informed_by_theme: \"INFORMED_BY_THEME\",\n\n // === ONTOLOGICAL EDGES (tenant-extensible, managed by ontology system) ===\n works_at: \"WORKS_AT\",\n invested_in: \"INVESTED_IN\",\n competes_with: \"COMPETES_WITH\",\n participates_in: \"PARTICIPATES_IN\",\n founded_by: \"FOUNDED_BY\",\n evaluates: \"EVALUATES\",\n performs: \"PERFORMS\",\n function_in: \"FUNCTION_IN\",\n impacts: \"IMPACTS\",\n raised_from: \"RAISED_FROM\",\n mentioned_in: \"MENTIONED_IN\",\n perspective_on: \"PERSPECTIVE_ON\",\n about_entity: \"ABOUT_ENTITY\",\n entity_referenced_in: \"ENTITY_REFERENCED_IN\",\n};\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Get the epistemic layer for a node type\n */\nexport function getNodeLayer(nodeType: string): EpistemicLayer {\n const L4_TYPES = [\"decision\"];\n const L3_TYPES = [\"belief\", \"question\", \"theme\", \"deal\"];\n const L2_TYPES = [\"claim\", \"evidence\", \"synthesis\", \"answer\"];\n const L1_TYPES = [\"atomic_fact\", \"excerpt\", \"source\"];\n const ONTOLOGICAL_TYPES = [\n \"company\",\n \"person\",\n \"investor\",\n \"function\",\n \"value_chain\",\n ];\n const ORGANIZATIONAL_TYPES = [\"topic\"];\n\n if (L4_TYPES.includes(nodeType)) {\n return \"L4\";\n }\n if (L3_TYPES.includes(nodeType)) {\n return \"L3\";\n }\n if (L2_TYPES.includes(nodeType)) {\n return \"L2\";\n }\n if (L1_TYPES.includes(nodeType)) {\n return \"L1\";\n }\n if (ONTOLOGICAL_TYPES.includes(nodeType)) {\n return \"ontological\";\n }\n if (ORGANIZATIONAL_TYPES.includes(nodeType)) {\n return \"organizational\";\n }\n\n // Unknown types default to L2\n console.warn(`[GraphTypes] Unknown nodeType \"${nodeType}\", defaulting to L2`);\n return \"L2\";\n}\n\n/**\n * Get the Neo4j label for a node type\n */\nexport function getNeo4jLabel(nodeType: string): string {\n return (\n NODE_TYPE_TO_LABEL[nodeType] ||\n nodeType.charAt(0).toUpperCase() + nodeType.slice(1)\n );\n}\n\n/**\n * Get the Neo4j relationship type for an edge type\n */\nexport function getNeo4jRelType(edgeType: string): string {\n return EDGE_TYPE_TO_REL[edgeType] || edgeType.toUpperCase();\n}\n\n/**\n * The 6 canonical epistemic edge types (Kernel v2).\n * Anything not in this set or the ontological/L4 sets is deprecated.\n */\nconst CANONICAL_EPISTEMIC_TYPES = new Set([\n \"supports\",\n \"informs\",\n \"depends_on\",\n \"derived_from\",\n \"contains\",\n \"tests\",\n]);\n\n/**\n * Check if an edge type is deprecated.\n *\n * Kernel v2: only the 6 canonical epistemic types, L4 decision types,\n * and ontological types are active. All legacy types (67 old types) are deprecated.\n */\nexport function isDeprecatedEdgeType(edgeType: string): boolean {\n // Canonical epistemic types are NOT deprecated\n if (CANONICAL_EPISTEMIC_TYPES.has(edgeType)) return false;\n // Types in the EDGE_TYPE_TO_REL map (ontological + L4) are NOT deprecated\n if (edgeType in EDGE_TYPE_TO_REL) return false;\n // Everything else is a legacy type\n return true;\n}\n","/**\n * edgeValidation module implementation.\n */\n\nimport { type EpistemicLayer, isDeprecatedEdgeType } from \"./graphTypes\";\n\nexport { isDeprecatedEdgeType };\nexport type { EpistemicLayer };\n\nfunction getLayerDepth(layer: EpistemicLayer): number {\n switch (layer) {\n case \"L4\":\n return 4;\n case \"L3\":\n return 3;\n case \"L2\":\n return 2;\n case \"L1\":\n return 1;\n case \"ontological\":\n return 0;\n default:\n return -1;\n }\n}\n\nfunction isValidLayerConnection(\n fromLayer: EpistemicLayer,\n toLayer: EpistemicLayer\n): boolean {\n if (fromLayer === toLayer) {\n return true;\n }\n\n // Ontological ↔ ontological (entity-entity edges)\n if (fromLayer === \"ontological\" && toLayer === \"ontological\") {\n return true;\n }\n\n // Ontological ↔ epistemic bridge (OE-B: entity-belief/evidence/source connections)\n if (\n fromLayer === \"ontological\" &&\n (toLayer === \"L3\" || toLayer === \"L2\" || toLayer === \"L1\")\n ) {\n return true;\n }\n if (\n (fromLayer === \"L3\" || fromLayer === \"L2\" || fromLayer === \"L1\") &&\n toLayer === \"ontological\"\n ) {\n return true;\n }\n\n // Epistemic layer transitions\n if (fromLayer === \"L2\" && toLayer === \"L1\") {\n return true;\n }\n if (fromLayer === \"L2\" && toLayer === \"L3\") {\n return true;\n }\n if (fromLayer === \"L3\" && toLayer === \"L2\") {\n return true;\n }\n if (fromLayer === \"L3\" && toLayer === \"L4\") {\n return true;\n }\n if (fromLayer === \"L4\" && toLayer === \"L3\") {\n return true;\n }\n\n // Organizational connections\n if (fromLayer === \"L3\" && toLayer === \"organizational\") {\n return true;\n }\n if (fromLayer === \"organizational\" && toLayer === \"L3\") {\n return true;\n }\n\n const fromDepth = getLayerDepth(fromLayer);\n const toDepth = getLayerDepth(toLayer);\n if (Math.abs(fromDepth - toDepth) > 1) {\n return false;\n }\n return true;\n}\n\nexport type TraversalMode =\n | \"anchor_down\"\n | \"anchor_up\"\n | \"same_layer\"\n | \"decision_trace\";\n\nexport function shouldContinueTraversal(\n currentLayer: EpistemicLayer,\n targetLayer: EpistemicLayer,\n options: {\n mode: TraversalMode;\n minLayer?: number;\n maxLayer?: number;\n }\n): boolean {\n const currentDepth = getLayerDepth(currentLayer);\n const targetDepth = getLayerDepth(targetLayer);\n\n if (options.minLayer !== undefined && targetDepth < options.minLayer) {\n return false;\n }\n if (options.maxLayer !== undefined && targetDepth > options.maxLayer) {\n return false;\n }\n\n switch (options.mode) {\n case \"anchor_down\":\n return targetDepth <= currentDepth;\n case \"anchor_up\":\n return targetDepth >= currentDepth;\n case \"same_layer\":\n return targetDepth === currentDepth;\n case \"decision_trace\":\n return currentDepth === 4\n ? targetDepth === 3\n : targetDepth === currentDepth;\n default:\n return true;\n }\n}\n\nexport function getDefaultMinLayer(mode: TraversalMode): number {\n switch (mode) {\n case \"anchor_down\":\n return 1;\n case \"anchor_up\":\n return 2;\n case \"same_layer\":\n return 1;\n case \"decision_trace\":\n return 3;\n default:\n return 1;\n }\n}\n\nexport const EDGE_LAYER_RULES: Record<\n string,\n { from: EpistemicLayer[]; to: EpistemicLayer[]; description: string }\n> = {\n // === 6 Canonical Epistemic Types ===\n supports: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief bears on Belief (weight: +1 supports, -1 contradicts)\",\n },\n informs: {\n from: [\"L2\"],\n to: [\"L3\"],\n description: \"Evidence -> Belief (L2 -> L3)\",\n },\n depends_on: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief B requires Belief A (structural gate)\",\n },\n derived_from: {\n from: [\"L2\", \"L3\", \"L4\"],\n to: [\"L1\", \"L2\", \"L3\"],\n description: \"A was produced from B (provenance chain)\",\n },\n contains: {\n from: [\"L3\", \"L4\", \"ontological\"],\n to: [\"L2\", \"L3\", \"ontological\"],\n description: \"A scopes/aggregates B (hierarchy)\",\n },\n tests: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Question -> Belief (L3 -> L3)\",\n },\n\n // === Structural / Lifecycle ===\n supersedes: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"NewNode -> OldNode (fork lineage)\",\n },\n responds_to: {\n from: [\"L2\", \"L3\"],\n to: [\"L3\"],\n description: \"Answer -> Question (L2/L3 -> L3)\",\n },\n belongs_to: {\n from: [\"L2\", \"L3\", \"ontological\"],\n to: [\"L3\"],\n description: \"Membership (migrating to contains)\",\n },\n relates_to_thesis: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief -> Theme (L3 -> L3)\",\n },\n\n // === Ontological (entity-entity or entity-epistemic bridge) ===\n works_at: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Person -> Company\",\n },\n invested_in: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Investor -> Company\",\n },\n competes_with: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> Company\",\n },\n participates_in: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> ValueChain\",\n },\n founded_by: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> Person\",\n },\n evaluates: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Deal -> Company\",\n },\n performs: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> Function\",\n },\n function_in: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Function -> ValueChain\",\n },\n impacts: {\n from: [\"ontological\", \"L3\"],\n to: [\"ontological\"],\n description: \"Theme/Entity -> ValueChain\",\n },\n raised_from: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> Investor\",\n },\n mentioned_in: {\n from: [\"ontological\"],\n to: [\"L1\", \"L2\"],\n description: \"Entity -> Source/Evidence\",\n },\n perspective_on: {\n from: [\"ontological\"],\n to: [\"L3\"],\n description: \"Person -> Belief/Theme\",\n },\n plays_theme: {\n from: [\"ontological\"],\n to: [\"L3\"],\n description: \"Deal -> Theme\",\n },\n};\n\nexport function validateEdgeLayers(\n edgeType: string,\n fromLayer: EpistemicLayer,\n toLayer: EpistemicLayer\n): { valid: boolean; reason?: string } {\n const rules = EDGE_LAYER_RULES[edgeType];\n\n if (!rules) {\n console.warn(\n `[EdgeValidation] Unknown edge type: ${edgeType}, allowing by default`\n );\n return { valid: true };\n }\n\n if (edgeType === \"supersedes\") {\n if (fromLayer !== toLayer) {\n return {\n valid: false,\n reason: `${edgeType} edges must be between nodes of the same layer. Got ${fromLayer} -> ${toLayer}`,\n };\n }\n return { valid: true };\n }\n\n if (!rules.from.includes(fromLayer)) {\n return {\n valid: false,\n reason: `Edge type '${edgeType}' does not allow source layer ${fromLayer}. Allowed: ${rules.from.join(\", \")}`,\n };\n }\n\n if (!rules.to.includes(toLayer)) {\n return {\n valid: false,\n reason: `Edge type '${edgeType}' does not allow target layer ${toLayer}. Allowed: ${rules.to.join(\", \")}`,\n };\n }\n\n if (!isValidLayerConnection(fromLayer, toLayer)) {\n return {\n valid: false,\n reason: `Layer transition ${fromLayer} -> ${toLayer} is not permitted`,\n };\n }\n\n return { valid: true };\n}\n\n","/**\n * 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 * helpers module implementation.\n */\n\nimport { type Id, internal, type MutationCtx } from \"./convex\";\nimport {\n type EpistemicLayer,\n validateEdgeLayers,\n} from \"./edgeValidation\";\nimport { generateGlobalId } from \"./globalId\";\nimport { getNodeLayer } from \"./graphTypes\";\n\nexport { getNodeLayer };\nexport type { EpistemicLayer };\n\nexport async function createEpistemicEdge(\n ctx: MutationCtx,\n params: {\n fromNodeId: Id<\"epistemicNodes\">;\n toNodeId: Id<\"epistemicNodes\">;\n edgeType: string;\n weight?: number;\n confidence?: number;\n context?: string;\n projectId?: string;\n createdBy: string;\n skipLayerValidation?: boolean;\n }\n): Promise<string> {\n const globalId = generateGlobalId();\n\n const fromNode = await ctx.db.get(params.fromNodeId);\n const toNode = await ctx.db.get(params.toNodeId);\n\n if (!fromNode || !toNode) {\n throw new Error(\"One or both nodes not found\");\n }\n\n const fromLayer = fromNode.epistemicLayer || getNodeLayer(fromNode.nodeType);\n const toLayer = toNode.epistemicLayer || getNodeLayer(toNode.nodeType);\n\n if (!params.skipLayerValidation) {\n const validation = validateEdgeLayers(\n params.edgeType,\n fromLayer as EpistemicLayer,\n toLayer as EpistemicLayer\n );\n if (!validation.valid) {\n throw new Error(\n `[EdgeValidation] Invalid edge: ${validation.reason}. ` +\n `Attempted: ${params.edgeType} from ${fromNode.nodeType}(${fromLayer}) → ${toNode.nodeType}(${toLayer})`\n );\n }\n }\n\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId,\n fromGlobalId: fromNode.globalId,\n toGlobalId: toNode.globalId,\n edgeType: params.edgeType as any,\n weight: params.weight,\n confidence: params.confidence,\n context: params.context,\n createdBy: params.createdBy,\n topicId: params.projectId ? String(params.projectId) : undefined,\n fromNodeType: fromNode.nodeType,\n toNodeType: toNode.nodeType,\n fromLayer,\n toLayer,\n });\n\n return globalId;\n}\n"]}
1
+ {"version":3,"sources":["../src/convex.ts","../src/graphTypes.ts","../src/edgeValidation.ts","../src/globalId.ts","../src/helpers.ts"],"names":[],"mappings":"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","file":"helpers.js","sourcesContent":["import {\n actionGeneric,\n anyApi,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\nexport const api = anyApi as any;\nexport const components = componentsGeneric() as any;\nexport const internal = anyApi as any;\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> = any;\nexport type DataModel = any;\ntype IndexRangeBuilder = {\n field(fieldName: string): string;\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n gt(fieldName: string, value: unknown): IndexRangeBuilder;\n gte(fieldName: string, value: unknown): IndexRangeBuilder;\n lt(fieldName: string, value: unknown): IndexRangeBuilder;\n lte(fieldName: string, value: unknown): IndexRangeBuilder;\n};\ntype FilterBuilder = {\n eq(left: unknown, right: unknown): unknown;\n neq(left: unknown, right: unknown): unknown;\n gt(left: unknown, right: unknown): unknown;\n gte(left: unknown, right: unknown): unknown;\n lt(left: unknown, right: unknown): unknown;\n lte(left: unknown, right: unknown): unknown;\n and(...clauses: unknown[]): unknown;\n or(...clauses: unknown[]): unknown;\n field(fieldName: string): unknown;\n};\ntype QueryInitializer<TableName extends TableNames> = {\n withIndex(\n indexName: string,\n range?: (q: any) => unknown\n ): QueryInitializer<TableName>;\n filter(predicate: (q: any) => unknown): QueryInitializer<TableName>;\n order(direction: \"asc\" | \"desc\"): QueryInitializer<TableName>;\n collect(): Promise<Doc<TableName>[]>;\n take(limit: number): Promise<Doc<TableName>[]>;\n first(): Promise<Doc<TableName> | null>;\n unique(): Promise<Doc<TableName> | null>;\n};\nexport type DatabaseReader = {\n get<TableName extends TableNames>(\n id: Id<TableName>\n ): Promise<Doc<TableName> | null>;\n query<TableName extends TableNames>(\n tableName: TableName\n ): QueryInitializer<TableName>;\n normalizeId?<TableName extends TableNames>(\n tableName: TableName,\n id: string\n ): Id<TableName> | null;\n};\nexport type DatabaseWriter = DatabaseReader & {\n insert<TableName extends TableNames>(\n tableName: TableName,\n value: Record<string, unknown>\n ): Promise<Id<TableName>>;\n patch<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n replace<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n delete<TableName extends TableNames>(id: Id<TableName>): Promise<void>;\n};\ntype Scheduler = {\n runAfter(delayMs: number, functionReference: unknown, args?: unknown): Promise<void>;\n};\ntype AuthReader = {\n getUserIdentity(): Promise<unknown>;\n};\ntype RuntimeInvoker = {\n runQuery(functionReference: unknown, args?: unknown): Promise<any>;\n runMutation(functionReference: unknown, args?: unknown): Promise<any>;\n runAction(functionReference: unknown, args?: unknown): Promise<any>;\n};\nexport type QueryCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseReader;\n scheduler: Scheduler;\n};\nexport type MutationCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseWriter;\n scheduler: Scheduler;\n};\nexport type ActionCtx = RuntimeInvoker & {\n auth: AuthReader;\n scheduler: Scheduler;\n};\n\ntype ConvexFunctionBuilder<Ctx> = <\n Definition extends { handler?: (ctx: Ctx, args: any) => any },\n>(\n definition: Definition\n) => any;\n\nexport const action = actionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const httpAction =\n httpActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalAction =\n internalActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalMutation =\n internalMutationGeneric as unknown as ConvexFunctionBuilder<MutationCtx>;\nexport const internalQuery =\n internalQueryGeneric as unknown as ConvexFunctionBuilder<QueryCtx>;\nexport const mutation =\n mutationGeneric as unknown as ConvexFunctionBuilder<MutationCtx>;\nexport const query = queryGeneric as unknown as ConvexFunctionBuilder<QueryCtx>;\n","/**\n * Graph Type Registry for Convex\n *\n * This file mirrors the canonical type registry at lib/ontology/types.ts\n * but is compatible with Convex's bundling requirements.\n *\n * IMPORTANT: Keep this file in sync with lib/ontology/types.ts\n * The frontend uses lib/ontology/types.ts, Convex uses this file.\n *\n * @see /docs/architecture/UNIFIED_GRAPH_ARCHITECTURE.md\n */\n\n// =============================================================================\n// EPISTEMIC LAYERS\n// =============================================================================\n\nexport type EpistemicLayer =\n | \"L4\"\n | \"L3\"\n | \"L2\"\n | \"L1\"\n | \"ontological\"\n | \"organizational\";\n\n// =============================================================================\n// NODE TYPE TO LABEL MAPPING\n// =============================================================================\n\nexport const NODE_TYPE_TO_LABEL: Record<string, string> = {\n // L4: Audit Targets\n decision: \"Decision\",\n\n // L3: Traversal Anchors\n belief: \"Belief\",\n question: \"Question\",\n theme: \"Theme\",\n deal: \"Deal\",\n topic: \"Topic\",\n\n // L2: Compression Boundary\n claim: \"Claim\",\n evidence: \"Evidence\",\n synthesis: \"Synthesis\",\n answer: \"Answer\",\n\n // L1: Terminal Leaves\n atomic_fact: \"AtomicFact\",\n excerpt: \"Excerpt\",\n source: \"Source\",\n\n // Ontological (Neo4j is SOT)\n company: \"Company\",\n person: \"Person\",\n investor: \"Investor\",\n function: \"Function\",\n value_chain: \"ValueChain\",\n};\n\n// =============================================================================\n// EDGE TYPE TO NEO4J RELATIONSHIP MAPPING\n// =============================================================================\n\n/**\n * Epistemic Kernel v2: 6 canonical edge types + ontological edges.\n *\n * Weight and metadata carry nuance that previously required 67 separate type strings.\n * See: docs/architecture/epistemic-kernel-v2.md\n */\nexport const EDGE_TYPE_TO_REL: Record<string, string> = {\n // === THE SIX CANONICAL EPISTEMIC EDGE TYPES ===\n supports: \"SUPPORTS\", // L3↔L3: belief bears on belief (weight -1 to +1)\n informs: \"INFORMS\", // L2→L3: evidence bears on belief\n depends_on: \"DEPENDS_ON\", // L3→L3, Q→Q: structural gate\n derived_from: \"DERIVED_FROM\", // Any→Any: provenance chain (fork, synthesis, extraction, answer)\n contains: \"CONTAINS\", // Any→Any: hierarchy, scoping, membership\n tests: \"TESTS\", // Q→L3: question interrogates belief\n\n // === L4 DECISION EDGES (derived_from with derivationType=decision) ===\n // Kept as separate Neo4j relationship types for backward compat with L4 queries.\n // New code should use derived_from + metadata.\n based_on_belief: \"BASED_ON_BELIEF\",\n based_on_question: \"BASED_ON_QUESTION\",\n blocked_by_contradiction: \"BLOCKED_BY_CONTRADICTION\",\n informed_by_theme: \"INFORMED_BY_THEME\",\n\n // === ONTOLOGICAL EDGES (tenant-extensible, managed by ontology system) ===\n works_at: \"WORKS_AT\",\n invested_in: \"INVESTED_IN\",\n competes_with: \"COMPETES_WITH\",\n participates_in: \"PARTICIPATES_IN\",\n founded_by: \"FOUNDED_BY\",\n evaluates: \"EVALUATES\",\n performs: \"PERFORMS\",\n function_in: \"FUNCTION_IN\",\n impacts: \"IMPACTS\",\n raised_from: \"RAISED_FROM\",\n mentioned_in: \"MENTIONED_IN\",\n perspective_on: \"PERSPECTIVE_ON\",\n about_entity: \"ABOUT_ENTITY\",\n entity_referenced_in: \"ENTITY_REFERENCED_IN\",\n};\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Get the epistemic layer for a node type\n */\nexport function getNodeLayer(nodeType: string): EpistemicLayer {\n const L4_TYPES = [\"decision\"];\n const L3_TYPES = [\"belief\", \"question\", \"theme\", \"deal\"];\n const L2_TYPES = [\"claim\", \"evidence\", \"synthesis\", \"answer\"];\n const L1_TYPES = [\"atomic_fact\", \"excerpt\", \"source\"];\n const ONTOLOGICAL_TYPES = [\n \"company\",\n \"person\",\n \"investor\",\n \"function\",\n \"value_chain\",\n ];\n const ORGANIZATIONAL_TYPES = [\"topic\"];\n\n if (L4_TYPES.includes(nodeType)) {\n return \"L4\";\n }\n if (L3_TYPES.includes(nodeType)) {\n return \"L3\";\n }\n if (L2_TYPES.includes(nodeType)) {\n return \"L2\";\n }\n if (L1_TYPES.includes(nodeType)) {\n return \"L1\";\n }\n if (ONTOLOGICAL_TYPES.includes(nodeType)) {\n return \"ontological\";\n }\n if (ORGANIZATIONAL_TYPES.includes(nodeType)) {\n return \"organizational\";\n }\n\n // Unknown types default to L2\n console.warn(`[GraphTypes] Unknown nodeType \"${nodeType}\", defaulting to L2`);\n return \"L2\";\n}\n\n/**\n * Get the Neo4j label for a node type\n */\nexport function getNeo4jLabel(nodeType: string): string {\n return (\n NODE_TYPE_TO_LABEL[nodeType] ||\n nodeType.charAt(0).toUpperCase() + nodeType.slice(1)\n );\n}\n\n/**\n * Get the Neo4j relationship type for an edge type\n */\nexport function getNeo4jRelType(edgeType: string): string {\n return EDGE_TYPE_TO_REL[edgeType] || edgeType.toUpperCase();\n}\n\n/**\n * The 6 canonical epistemic edge types (Kernel v2).\n * Anything not in this set or the ontological/L4 sets is deprecated.\n */\nconst CANONICAL_EPISTEMIC_TYPES = new Set([\n \"supports\",\n \"informs\",\n \"depends_on\",\n \"derived_from\",\n \"contains\",\n \"tests\",\n]);\n\n/**\n * Check if an edge type is deprecated.\n *\n * Kernel v2: only the 6 canonical epistemic types, L4 decision types,\n * and ontological types are active. All legacy types (67 old types) are deprecated.\n */\nexport function isDeprecatedEdgeType(edgeType: string): boolean {\n // Canonical epistemic types are NOT deprecated\n if (CANONICAL_EPISTEMIC_TYPES.has(edgeType)) return false;\n // Types in the EDGE_TYPE_TO_REL map (ontological + L4) are NOT deprecated\n if (edgeType in EDGE_TYPE_TO_REL) return false;\n // Everything else is a legacy type\n return true;\n}\n","/**\n * edgeValidation module implementation.\n */\n\nimport { type EpistemicLayer, isDeprecatedEdgeType } from \"./graphTypes\";\n\nexport { isDeprecatedEdgeType };\nexport type { EpistemicLayer };\n\nfunction getLayerDepth(layer: EpistemicLayer): number {\n switch (layer) {\n case \"L4\":\n return 4;\n case \"L3\":\n return 3;\n case \"L2\":\n return 2;\n case \"L1\":\n return 1;\n case \"ontological\":\n return 0;\n default:\n return -1;\n }\n}\n\nfunction isValidLayerConnection(\n fromLayer: EpistemicLayer,\n toLayer: EpistemicLayer\n): boolean {\n if (fromLayer === toLayer) {\n return true;\n }\n\n // Ontological ↔ ontological (entity-entity edges)\n if (fromLayer === \"ontological\" && toLayer === \"ontological\") {\n return true;\n }\n\n // Ontological ↔ epistemic bridge (OE-B: entity-belief/evidence/source connections)\n if (\n fromLayer === \"ontological\" &&\n (toLayer === \"L3\" || toLayer === \"L2\" || toLayer === \"L1\")\n ) {\n return true;\n }\n if (\n (fromLayer === \"L3\" || fromLayer === \"L2\" || fromLayer === \"L1\") &&\n toLayer === \"ontological\"\n ) {\n return true;\n }\n\n // Epistemic layer transitions\n if (fromLayer === \"L2\" && toLayer === \"L1\") {\n return true;\n }\n if (fromLayer === \"L2\" && toLayer === \"L3\") {\n return true;\n }\n if (fromLayer === \"L3\" && toLayer === \"L2\") {\n return true;\n }\n if (fromLayer === \"L3\" && toLayer === \"L4\") {\n return true;\n }\n if (fromLayer === \"L4\" && toLayer === \"L3\") {\n return true;\n }\n\n // Organizational connections\n if (fromLayer === \"L3\" && toLayer === \"organizational\") {\n return true;\n }\n if (fromLayer === \"organizational\" && toLayer === \"L3\") {\n return true;\n }\n\n const fromDepth = getLayerDepth(fromLayer);\n const toDepth = getLayerDepth(toLayer);\n if (Math.abs(fromDepth - toDepth) > 1) {\n return false;\n }\n return true;\n}\n\nexport type TraversalMode =\n | \"anchor_down\"\n | \"anchor_up\"\n | \"same_layer\"\n | \"decision_trace\";\n\nexport function shouldContinueTraversal(\n currentLayer: EpistemicLayer,\n targetLayer: EpistemicLayer,\n options: {\n mode: TraversalMode;\n minLayer?: number;\n maxLayer?: number;\n }\n): boolean {\n const currentDepth = getLayerDepth(currentLayer);\n const targetDepth = getLayerDepth(targetLayer);\n\n if (options.minLayer !== undefined && targetDepth < options.minLayer) {\n return false;\n }\n if (options.maxLayer !== undefined && targetDepth > options.maxLayer) {\n return false;\n }\n\n switch (options.mode) {\n case \"anchor_down\":\n return targetDepth <= currentDepth;\n case \"anchor_up\":\n return targetDepth >= currentDepth;\n case \"same_layer\":\n return targetDepth === currentDepth;\n case \"decision_trace\":\n return currentDepth === 4\n ? targetDepth === 3\n : targetDepth === currentDepth;\n default:\n return true;\n }\n}\n\nexport function getDefaultMinLayer(mode: TraversalMode): number {\n switch (mode) {\n case \"anchor_down\":\n return 1;\n case \"anchor_up\":\n return 2;\n case \"same_layer\":\n return 1;\n case \"decision_trace\":\n return 3;\n default:\n return 1;\n }\n}\n\nexport const EDGE_LAYER_RULES: Record<\n string,\n { from: EpistemicLayer[]; to: EpistemicLayer[]; description: string }\n> = {\n // === 6 Canonical Epistemic Types ===\n supports: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief bears on Belief (weight: +1 supports, -1 contradicts)\",\n },\n informs: {\n from: [\"L2\"],\n to: [\"L3\"],\n description: \"Evidence -> Belief (L2 -> L3)\",\n },\n depends_on: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief B requires Belief A (structural gate)\",\n },\n derived_from: {\n from: [\"L2\", \"L3\", \"L4\"],\n to: [\"L1\", \"L2\", \"L3\"],\n description: \"A was produced from B (provenance chain)\",\n },\n contains: {\n from: [\"L3\", \"L4\", \"ontological\"],\n to: [\"L2\", \"L3\", \"ontological\"],\n description: \"A scopes/aggregates B (hierarchy)\",\n },\n tests: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Question -> Belief (L3 -> L3)\",\n },\n\n // === Structural / Lifecycle ===\n supersedes: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"NewNode -> OldNode (fork lineage)\",\n },\n responds_to: {\n from: [\"L2\", \"L3\"],\n to: [\"L3\"],\n description: \"Answer -> Question (L2/L3 -> L3)\",\n },\n belongs_to: {\n from: [\"L2\", \"L3\", \"ontological\"],\n to: [\"L3\"],\n description: \"Membership (migrating to contains)\",\n },\n relates_to_thesis: {\n from: [\"L3\"],\n to: [\"L3\"],\n description: \"Belief -> Theme (L3 -> L3)\",\n },\n\n // === Ontological (entity-entity or entity-epistemic bridge) ===\n works_at: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Person -> Company\",\n },\n invested_in: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Investor -> Company\",\n },\n competes_with: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> Company\",\n },\n participates_in: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> ValueChain\",\n },\n founded_by: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> Person\",\n },\n evaluates: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Deal -> Company\",\n },\n performs: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> Function\",\n },\n function_in: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Function -> ValueChain\",\n },\n impacts: {\n from: [\"ontological\", \"L3\"],\n to: [\"ontological\"],\n description: \"Theme/Entity -> ValueChain\",\n },\n raised_from: {\n from: [\"ontological\"],\n to: [\"ontological\"],\n description: \"Company -> Investor\",\n },\n mentioned_in: {\n from: [\"ontological\"],\n to: [\"L1\", \"L2\"],\n description: \"Entity -> Source/Evidence\",\n },\n perspective_on: {\n from: [\"ontological\"],\n to: [\"L3\"],\n description: \"Person -> Belief/Theme\",\n },\n plays_theme: {\n from: [\"ontological\"],\n to: [\"L3\"],\n description: \"Deal -> Theme\",\n },\n};\n\nexport function validateEdgeLayers(\n edgeType: string,\n fromLayer: EpistemicLayer,\n toLayer: EpistemicLayer\n): { valid: boolean; reason?: string } {\n const rules = EDGE_LAYER_RULES[edgeType];\n\n if (!rules) {\n console.warn(\n `[EdgeValidation] Unknown edge type: ${edgeType}, allowing by default`\n );\n return { valid: true };\n }\n\n if (edgeType === \"supersedes\") {\n if (fromLayer !== toLayer) {\n return {\n valid: false,\n reason: `${edgeType} edges must be between nodes of the same layer. Got ${fromLayer} -> ${toLayer}`,\n };\n }\n return { valid: true };\n }\n\n if (!rules.from.includes(fromLayer)) {\n return {\n valid: false,\n reason: `Edge type '${edgeType}' does not allow source layer ${fromLayer}. Allowed: ${rules.from.join(\", \")}`,\n };\n }\n\n if (!rules.to.includes(toLayer)) {\n return {\n valid: false,\n reason: `Edge type '${edgeType}' does not allow target layer ${toLayer}. Allowed: ${rules.to.join(\", \")}`,\n };\n }\n\n if (!isValidLayerConnection(fromLayer, toLayer)) {\n return {\n valid: false,\n reason: `Layer transition ${fromLayer} -> ${toLayer} is not permitted`,\n };\n }\n\n return { valid: true };\n}\n\n","/**\n * 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 * helpers module implementation.\n */\n\nimport { type Id, internal, type MutationCtx } from \"./convex\";\nimport {\n type EpistemicLayer,\n validateEdgeLayers,\n} from \"./edgeValidation\";\nimport { generateGlobalId } from \"./globalId\";\nimport { getNodeLayer } from \"./graphTypes\";\n\nexport { getNodeLayer };\n\nexport async function createEpistemicEdge(\n ctx: MutationCtx,\n params: {\n fromNodeId: Id<\"epistemicNodes\">;\n toNodeId: Id<\"epistemicNodes\">;\n edgeType: string;\n weight?: number;\n confidence?: number;\n context?: string;\n projectId?: string;\n createdBy: string;\n skipLayerValidation?: boolean;\n }\n): Promise<string> {\n const globalId = generateGlobalId();\n\n const fromNode = await ctx.db.get(params.fromNodeId);\n const toNode = await ctx.db.get(params.toNodeId);\n\n if (!fromNode || !toNode) {\n throw new Error(\"One or both nodes not found\");\n }\n\n const fromLayer = fromNode.epistemicLayer || getNodeLayer(fromNode.nodeType);\n const toLayer = toNode.epistemicLayer || getNodeLayer(toNode.nodeType);\n\n if (!params.skipLayerValidation) {\n const validation = validateEdgeLayers(\n params.edgeType,\n fromLayer as EpistemicLayer,\n toLayer as EpistemicLayer\n );\n if (!validation.valid) {\n throw new Error(\n `[EdgeValidation] Invalid edge: ${validation.reason}. ` +\n `Attempted: ${params.edgeType} from ${fromNode.nodeType}(${fromLayer}) → ${toNode.nodeType}(${toLayer})`\n );\n }\n }\n\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId,\n fromGlobalId: fromNode.globalId,\n toGlobalId: toNode.globalId,\n edgeType: params.edgeType as any,\n weight: params.weight,\n confidence: params.confidence,\n context: params.context,\n createdBy: params.createdBy,\n topicId: params.projectId ? String(params.projectId) : undefined,\n fromNodeType: fromNode.nodeType,\n toNodeType: toNode.nodeType,\n fromLayer,\n toLayer,\n });\n\n return globalId;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { EpistemicEvaluator } from './epistemicContracts.js';
1
+ import { EpistemicEvaluator } from './epistemicContracts.types.js';
2
2
  import { EngineeringEpistemicEvaluator, testRunnerEvaluator } from './evaluators/testRunnerEvaluator.js';
3
3
  import { lintCheckerEvaluator } from './evaluators/lintCheckerEvaluator.js';
4
4
  import { sentryCheckerEvaluator } from './evaluators/sentryCheckerEvaluator.js';
package/dist/index.d.ts CHANGED
@@ -1,25 +1,29 @@
1
+ import { EpistemicLayer as EpistemicLayer$1, canTraverseToLayer, getDefaultEdgeTypesForMode, getDefaultMinLayer as getDefaultMinLayer$1, getLayerDepth, getNodeLayer, isValidLayerConnection, shouldContinueTraversal as shouldContinueTraversal$1, validateEdgeLayers as validateEdgeLayers$1 } from './epistemicLayerRules.js';
2
+ import { E as EpistemicLayer, i as isDeprecatedEdgeType, g as getNeo4jLabel, a as getNeo4jRelType } from './graphTypes-B8VaIjnl.js';
3
+ export { c as graphTypes } from './graphTypes-B8VaIjnl.js';
4
+ import { getEdgePropagationSpec, getEdgePropagationSpecs, getTraversalDirections } from './edges/index.js';
5
+ import { getDefaultMinLayer, shouldContinueTraversal, validateEdgeLayers } from './edgeValidation.js';
6
+ import { flattenBeliefNode, resolveBeliefWorktreeId } from './epistemicBeliefs.helpers.js';
7
+ import { applyBeliefConfidenceChange } from './epistemicBeliefs.confidence.js';
8
+ import { createEpistemicNodeForArtifact, createEpistemicNodeForBelief, createEpistemicNodeForInsight, createEpistemicNodeForQuestion } from './epistemicNodeCreation.js';
9
+ import { createEdgeForInsightQuestionLink, createEpistemicEdge, normalizeConfidence } from './epistemicEdgeCreation.js';
1
10
  export { b as beliefDecay } from './beliefDecay-DZ6tkLYq.js';
2
11
  export { b as beliefEvidenceLinks } from './beliefEvidenceLinks-CWOXxxJg.js';
3
12
  export { b as beliefLifecycle } from './beliefLifecycle-y8WLXqQj.js';
4
13
  export { c as contradictions } from './contradictions-51VLsESq.js';
5
- export { i as edges } from './index-Dct1T70K.js';
6
- export { e as edgeValidation } from './edgeValidation-CeI0wc0r.js';
7
14
  export { e as entityBridge } from './entityBridge-DMaKooYn.js';
8
15
  export { e as entityLifecycle } from './entityLifecycle-CvgSK5FV.js';
9
16
  export { e as entityValidation } from './entityValidation-KLZ_Xl2D.js';
10
- export { i as evaluators } from './index-Dq-7R-gi.js';
17
+ export { i as evaluators } from './index-C-Kyd7hD.js';
11
18
  export { e as epistemicAnswers } from './epistemicAnswers-C5ib4z6_.js';
12
- export { e as epistemicBeliefs } from './epistemicBeliefs-DzKjZAeC.js';
13
- export { e as epistemicEdges } from './epistemicEdges-CvlKnEyy.js';
14
- export { e as epistemicEvidence } from './epistemicEvidence-xw6UUrwh.js';
15
- export { e as epistemicHelpers } from './epistemicHelpers-DevrYgPN.js';
19
+ export { e as epistemicEdges } from './epistemicEdges-BF-cn4i3.js';
20
+ export { e as epistemicEvidence } from './epistemicEvidence-DvfchNt7.js';
16
21
  export { e as epistemicLinking } from './epistemicLinking-CfE00tHJ.js';
17
- export { e as epistemicNodes } from './epistemicNodes-DjSUfvyD.js';
18
- export { e as epistemicQuestions } from './epistemicQuestions-B_nUclrH.js';
22
+ export { e as epistemicNodes } from './epistemicNodes-BCQxpYx_.js';
23
+ export { e as epistemicQuestions } from './epistemicQuestions-bwHd2FWE.js';
19
24
  export { e as epistemicSources } from './epistemicSources-dlKj58Jp.js';
20
25
  export { g as globalId } from './globalId-DKh9d_uD.js';
21
- export { g as graphTypes } from './graphTypes-CpgIuCdo.js';
22
- export { h as helpers } from './helpers-BYHIk5vU.js';
26
+ export { h as helpers } from './helpers-DNYfg6mo.js';
23
27
  export { l as logicalRoleInference } from './logicalRoleInference-CJxqWi3u.js';
24
28
  export { o as ontologyApproval } from './ontologyApproval-CFYmqKmk.js';
25
29
  export { o as ontologyMatching } from './ontology-matching-C6rrz2VP.js';
@@ -31,15 +35,157 @@ export { r as resolvers } from './resolvers-Br1a6eLV.js';
31
35
  export { r as resolverTypes } from './resolverTypes-CC8Ea2E2.js';
32
36
  export { t as textMatching } from './text-matching-DNg4M5Wd.js';
33
37
  export { t as topicScope } from './topicScope-By_zp4tt.js';
34
- import '@lucern/confidence';
35
- import './edges/propagationTypes.js';
38
+ import { EdgePropagationSpec, canContinueTransitively, canTraverseHop, isPropagationTraversalDirection } from './edges/propagationTypes.js';
36
39
  import './convex.js';
37
40
  import 'convex/values';
38
- import './epistemicContracts.js';
41
+ import '@lucern/confidence';
42
+ import './epistemicContracts.types.js';
39
43
  import './evaluators/testRunnerEvaluator.js';
40
44
  import './evaluators/lintCheckerEvaluator.js';
41
45
  import './evaluators/sentryCheckerEvaluator.js';
42
46
  import './evaluators/tscCheckerEvaluator.js';
47
+ import './epistemicEdges.queries.js';
48
+ import './epistemicEdges.mutations.js';
49
+ import './epistemicEdges.handlers.js';
50
+ import './epistemicEdges.helpers.js';
51
+ import './epistemicEdges.types.js';
52
+ import './epistemicEvidenceHelpers.js';
53
+ import './epistemicEvidenceMutations.js';
54
+ import './epistemicEvidenceQueries.js';
55
+ import './epistemicNodes.validators.js';
56
+ import './epistemicNodes.queries.js';
57
+ import './epistemicNodes.mutations.js';
58
+ import './epistemicNodes.internal.js';
59
+ import './epistemicQuestions.create.js';
60
+ import './epistemicQuestions.lifecycle.js';
61
+ import './epistemicQuestions.queries.js';
62
+ import './epistemicQuestions.tail.js';
63
+ import './epistemicQuestions.evidence.js';
64
+ import './epistemicQuestions.sprint.js';
65
+ import './epistemicQuestions.conviction.js';
66
+ import './epistemicQuestions.helpers.js';
43
67
  import '@lucern/contracts/v1/ontologies/v1';
44
68
  import './topicProjectOverlay.js';
45
69
  import '@lucern/contracts/text-matching.contract';
70
+
71
+ declare const edges: {
72
+ readonly EDGE_PROPAGATION_SPECS: readonly EdgePropagationSpec[];
73
+ readonly canContinueTransitively: typeof canContinueTransitively;
74
+ readonly canTraverseHop: typeof canTraverseHop;
75
+ readonly getEdgePropagationSpec: typeof getEdgePropagationSpec;
76
+ readonly getEdgePropagationSpecs: typeof getEdgePropagationSpecs;
77
+ readonly getTraversalDirections: typeof getTraversalDirections;
78
+ readonly isPropagationTraversalDirection: typeof isPropagationTraversalDirection;
79
+ };
80
+ declare const edgeValidation: {
81
+ readonly EDGE_LAYER_RULES: Record<string, {
82
+ from: EpistemicLayer[];
83
+ to: EpistemicLayer[];
84
+ description: string;
85
+ }>;
86
+ readonly getDefaultMinLayer: typeof getDefaultMinLayer;
87
+ readonly isDeprecatedEdgeType: typeof isDeprecatedEdgeType;
88
+ readonly shouldContinueTraversal: typeof shouldContinueTraversal;
89
+ readonly validateEdgeLayers: typeof validateEdgeLayers;
90
+ };
91
+ declare const epistemicBeliefs: {
92
+ readonly applyBeliefConfidenceChange: typeof applyBeliefConfidenceChange;
93
+ readonly archive: any;
94
+ readonly backfillBeliefSprintIds: any;
95
+ readonly backfillMandatoryPriors: any;
96
+ readonly backfillScoredBeliefEdges: any;
97
+ readonly backfillSyntheticOpinionHistory: any;
98
+ readonly backfillTwoAxisConfidence: any;
99
+ readonly batchUpdateCriticality: any;
100
+ readonly create: any;
101
+ readonly deleteRelationship: any;
102
+ readonly flattenBeliefNode: typeof flattenBeliefNode;
103
+ readonly forkBelief: any;
104
+ readonly getBeliefClusterPositions: any;
105
+ readonly getByCriticality: any;
106
+ readonly getById: any;
107
+ readonly getByIds: any;
108
+ readonly getByPillar: any;
109
+ readonly getByProject: any;
110
+ readonly getByProjectSystem: any;
111
+ readonly getByTopic: any;
112
+ readonly getByWorktree: any;
113
+ readonly getConfidenceHistory: any;
114
+ readonly getCountByStatus: any;
115
+ readonly getLineage: any;
116
+ readonly getRecentConfidenceChanges: any;
117
+ readonly getRelationships: any;
118
+ readonly getUnanalyzed: any;
119
+ readonly getWithEvidence: any;
120
+ readonly internalCreate: any;
121
+ readonly internalGetActive: any;
122
+ readonly internalGetById: any;
123
+ readonly internalGetByProject: any;
124
+ readonly internalGetByTopic: any;
125
+ readonly linkBeliefs: any;
126
+ readonly linkEvidence: any;
127
+ readonly modulateConfidence: any;
128
+ readonly propagateConfidenceChange: any;
129
+ readonly reassignBeliefsTopic: any;
130
+ readonly refineBelief: any;
131
+ readonly resolveBeliefWorktreeId: typeof resolveBeliefWorktreeId;
132
+ readonly unlinkEvidence: any;
133
+ readonly updateCriticality: any;
134
+ readonly updatePillar: any;
135
+ readonly updateRationale: any;
136
+ readonly updateStatus: any;
137
+ readonly updateStatusInternal: any;
138
+ };
139
+ declare const epistemicHelpers: {
140
+ readonly EDGE_LAYER_RULES: Record<string, {
141
+ from: EpistemicLayer$1[];
142
+ to: EpistemicLayer$1[];
143
+ description: string;
144
+ }>;
145
+ readonly LAYER_TRAVERSAL_RULES: {
146
+ readonly L4: {
147
+ readonly canReach: readonly ["L3", "L4"];
148
+ readonly mustPassThrough: "L3";
149
+ };
150
+ readonly L3: {
151
+ readonly canReach: readonly ["L2", "L3", "L4"];
152
+ readonly mustPassThrough: "L2";
153
+ };
154
+ readonly L2: {
155
+ readonly canReach: readonly ["L1", "L2", "L3"];
156
+ readonly mustPassThrough: null;
157
+ };
158
+ readonly L1: {
159
+ readonly canReach: readonly ["L1"];
160
+ readonly mustPassThrough: null;
161
+ };
162
+ readonly ontological: {
163
+ readonly canReach: readonly ["L3", "L2", "ontological"];
164
+ readonly mustPassThrough: null;
165
+ };
166
+ readonly organizational: {
167
+ readonly canReach: readonly ["L3", "L2", "organizational"];
168
+ readonly mustPassThrough: null;
169
+ };
170
+ };
171
+ readonly canTraverseToLayer: typeof canTraverseToLayer;
172
+ readonly createEdgeForInsightQuestionLink: typeof createEdgeForInsightQuestionLink;
173
+ readonly createEpistemicEdge: typeof createEpistemicEdge;
174
+ readonly createEpistemicNodeForArtifact: typeof createEpistemicNodeForArtifact;
175
+ readonly createEpistemicNodeForBelief: typeof createEpistemicNodeForBelief;
176
+ readonly createEpistemicNodeForInsight: typeof createEpistemicNodeForInsight;
177
+ readonly createEpistemicNodeForQuestion: typeof createEpistemicNodeForQuestion;
178
+ readonly getDefaultEdgeTypesForMode: typeof getDefaultEdgeTypesForMode;
179
+ readonly getDefaultMinLayer: typeof getDefaultMinLayer$1;
180
+ readonly getLayerDepth: typeof getLayerDepth;
181
+ readonly getNeo4jLabel: typeof getNeo4jLabel;
182
+ readonly getNeo4jRelType: typeof getNeo4jRelType;
183
+ readonly getNodeLayer: typeof getNodeLayer;
184
+ readonly isDeprecatedEdgeType: typeof isDeprecatedEdgeType;
185
+ readonly isValidLayerConnection: typeof isValidLayerConnection;
186
+ readonly normalizeConfidence: typeof normalizeConfidence;
187
+ readonly shouldContinueTraversal: typeof shouldContinueTraversal$1;
188
+ readonly validateEdgeLayers: typeof validateEdgeLayers$1;
189
+ };
190
+
191
+ export { edgeValidation, edges, epistemicBeliefs, epistemicHelpers };