@lucern/graph-primitives 1.0.22 → 1.0.23

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 (127) hide show
  1. package/dist/beliefDecay.js +46 -0
  2. package/dist/beliefDecay.js.map +1 -1
  3. package/dist/beliefEvidenceLinks.js +87 -5
  4. package/dist/beliefEvidenceLinks.js.map +1 -1
  5. package/dist/beliefEvidenceLinks.operational.js +41 -5
  6. package/dist/beliefEvidenceLinks.operational.js.map +1 -1
  7. package/dist/contradictions.js +46 -0
  8. package/dist/contradictions.js.map +1 -1
  9. package/dist/edgeValidation.js +66 -1
  10. package/dist/edgeValidation.js.map +1 -1
  11. package/dist/entityBridge.js +66 -1
  12. package/dist/entityBridge.js.map +1 -1
  13. package/dist/entityLifecycle.js +90 -5
  14. package/dist/entityLifecycle.js.map +1 -1
  15. package/dist/epistemicAnswers.js +64 -11
  16. package/dist/epistemicAnswers.js.map +1 -1
  17. package/dist/epistemicBeliefs.admin.js +46 -0
  18. package/dist/epistemicBeliefs.admin.js.map +1 -1
  19. package/dist/epistemicBeliefs.backfills.js +46 -0
  20. package/dist/epistemicBeliefs.backfills.js.map +1 -1
  21. package/dist/epistemicBeliefs.confidence.d.ts +1 -1
  22. package/dist/epistemicBeliefs.confidence.js +53 -6
  23. package/dist/epistemicBeliefs.confidence.js.map +1 -1
  24. package/dist/epistemicBeliefs.core.js +91 -11
  25. package/dist/epistemicBeliefs.core.js.map +1 -1
  26. package/dist/epistemicBeliefs.d.ts +1 -1
  27. package/dist/epistemicBeliefs.forkEvidence.js.map +1 -1
  28. package/dist/epistemicBeliefs.helpers.d.ts +2 -2
  29. package/dist/epistemicBeliefs.helpers.js +46 -0
  30. package/dist/epistemicBeliefs.helpers.js.map +1 -1
  31. package/dist/epistemicBeliefs.internal.js +90 -10
  32. package/dist/epistemicBeliefs.internal.js.map +1 -1
  33. package/dist/epistemicBeliefs.js +103 -22
  34. package/dist/epistemicBeliefs.js.map +1 -1
  35. package/dist/epistemicBeliefs.lifecycle.js +53 -6
  36. package/dist/epistemicBeliefs.lifecycle.js.map +1 -1
  37. package/dist/epistemicBeliefs.links.js +85 -4
  38. package/dist/epistemicBeliefs.links.js.map +1 -1
  39. package/dist/epistemicBeliefs.topicAnchor.js +39 -8
  40. package/dist/epistemicBeliefs.topicAnchor.js.map +1 -1
  41. package/dist/epistemicContracts.evaluators.js +53 -6
  42. package/dist/epistemicContracts.evaluators.js.map +1 -1
  43. package/dist/epistemicContracts.handlers.js +54 -10
  44. package/dist/epistemicContracts.handlers.js.map +1 -1
  45. package/dist/epistemicContracts.js +54 -10
  46. package/dist/epistemicContracts.js.map +1 -1
  47. package/dist/epistemicEdges.d.ts +1 -1
  48. package/dist/epistemicEdges.handlers.js +48 -3
  49. package/dist/epistemicEdges.handlers.js.map +1 -1
  50. package/dist/epistemicEdges.helpers.d.ts +3 -3
  51. package/dist/epistemicEdges.js +162 -4
  52. package/dist/epistemicEdges.js.map +1 -1
  53. package/dist/epistemicEdges.mutations.js +112 -1
  54. package/dist/epistemicEdges.mutations.js.map +1 -1
  55. package/dist/epistemicEdges.queries.js +46 -0
  56. package/dist/epistemicEdges.queries.js.map +1 -1
  57. package/dist/epistemicEdges.types.d.ts +1 -1
  58. package/dist/epistemicEvidence.d.ts +1 -1
  59. package/dist/epistemicEvidence.js +168 -14
  60. package/dist/epistemicEvidence.js.map +1 -1
  61. package/dist/epistemicEvidenceHelpers.d.ts +1 -1
  62. package/dist/epistemicEvidenceHelpers.js +46 -0
  63. package/dist/epistemicEvidenceHelpers.js.map +1 -1
  64. package/dist/epistemicEvidenceMutations.js +168 -14
  65. package/dist/epistemicEvidenceMutations.js.map +1 -1
  66. package/dist/epistemicEvidenceQueries.js +46 -0
  67. package/dist/epistemicEvidenceQueries.js.map +1 -1
  68. package/dist/epistemicHelpers.js +11 -6
  69. package/dist/epistemicHelpers.js.map +1 -1
  70. package/dist/epistemicInsert.d.ts +8 -0
  71. package/dist/epistemicInsert.js +45 -0
  72. package/dist/epistemicInsert.js.map +1 -0
  73. package/dist/epistemicNodeCreation.js +11 -6
  74. package/dist/epistemicNodeCreation.js.map +1 -1
  75. package/dist/epistemicNodes.helpers.d.ts +1 -1
  76. package/dist/epistemicNodes.internal.js +53 -1
  77. package/dist/epistemicNodes.internal.js.map +1 -1
  78. package/dist/epistemicNodes.js +56 -4
  79. package/dist/epistemicNodes.js.map +1 -1
  80. package/dist/epistemicNodes.mutations.js +55 -3
  81. package/dist/epistemicNodes.mutations.js.map +1 -1
  82. package/dist/epistemicNodes.queries.js +46 -0
  83. package/dist/epistemicNodes.queries.js.map +1 -1
  84. package/dist/epistemicNodes.validators.d.ts +1 -1
  85. package/dist/epistemicQuestions.conviction.js +46 -0
  86. package/dist/epistemicQuestions.conviction.js.map +1 -1
  87. package/dist/epistemicQuestions.create.js +58 -7
  88. package/dist/epistemicQuestions.create.js.map +1 -1
  89. package/dist/epistemicQuestions.d.ts +1 -1
  90. package/dist/epistemicQuestions.evidence.js +53 -2
  91. package/dist/epistemicQuestions.evidence.js.map +1 -1
  92. package/dist/epistemicQuestions.helpers.d.ts +1 -1
  93. package/dist/epistemicQuestions.helpers.js +46 -0
  94. package/dist/epistemicQuestions.helpers.js.map +1 -1
  95. package/dist/epistemicQuestions.js +60 -9
  96. package/dist/epistemicQuestions.js.map +1 -1
  97. package/dist/epistemicQuestions.lifecycle.js +46 -0
  98. package/dist/epistemicQuestions.lifecycle.js.map +1 -1
  99. package/dist/epistemicQuestions.queries.js +46 -0
  100. package/dist/epistemicQuestions.queries.js.map +1 -1
  101. package/dist/epistemicQuestions.sprint.js +46 -0
  102. package/dist/epistemicQuestions.sprint.js.map +1 -1
  103. package/dist/epistemicQuestions.tail.js +53 -2
  104. package/dist/epistemicQuestions.tail.js.map +1 -1
  105. package/dist/epistemicSources.js +53 -2
  106. package/dist/epistemicSources.js.map +1 -1
  107. package/dist/helpers.js +66 -1
  108. package/dist/helpers.js.map +1 -1
  109. package/dist/index.d.ts +1 -1
  110. package/dist/index.js +304 -76
  111. package/dist/index.js.map +1 -1
  112. package/dist/proof-attestation.json +1 -1
  113. package/dist/questionEvidenceLinks.js +46 -0
  114. package/dist/questionEvidenceLinks.js.map +1 -1
  115. package/dist/scopeResolverCompat.d.ts +1 -1
  116. package/dist/scopeResolverCompat.js +46 -0
  117. package/dist/scopeResolverCompat.js.map +1 -1
  118. package/dist/{topicScope-By_zp4tt.d.ts → topicScope-7zhyeGl7.d.ts} +1 -1
  119. package/dist/topicScope.d.ts +1 -1
  120. package/dist/topicScope.js +46 -0
  121. package/dist/topicScope.js.map +1 -1
  122. package/dist/workflowBridge.js +46 -0
  123. package/dist/workflowBridge.js.map +1 -1
  124. package/dist/workspaceIsolation.d.ts +1 -1
  125. package/dist/workspaceIsolation.js +46 -0
  126. package/dist/workspaceIsolation.js.map +1 -1
  127. package/package.json +4 -4
@@ -2,8 +2,9 @@ import { v } from 'convex/values';
2
2
  import { checkProjectAccess, checkScopeAccess } from '@lucern/access-control/access';
3
3
  import { permissiveReturn } from '@lucern/contracts/schema-helpers/validators';
4
4
  import { componentsGeneric, anyApi, mutationGeneric, internalMutationGeneric } from 'convex/server';
5
- import { generateGlobalId } from '@lucern/contracts/ids';
5
+ import { generateGlobalId, assertUuidV7Identity } from '@lucern/contracts/ids';
6
6
  import { isNodeType, getLayerForNodeType } from '@lucern/contracts/schema-helpers/spine/tables/epistemicNodes';
7
+ import '@lucern/contracts';
7
8
 
8
9
  // src/epistemicQuestions.create.ts
9
10
  var api = anyApi;
@@ -53,6 +54,35 @@ async function scheduleEmbeddingGeneration(args) {
53
54
  }
54
55
  }
55
56
  var LEGACY_SCOPE_FIELD = "graphScopeProjectId";
57
+ async function resolveTopicNodeScopeOrNull(ctx, ref) {
58
+ if (!ctx?.db || typeof ctx.db.query !== "function") {
59
+ return null;
60
+ }
61
+ let node = null;
62
+ try {
63
+ const byGlobalId = await ctx.db.query("epistemicNodes").withIndex("by_globalId", (q) => q.eq("globalId", ref)).first();
64
+ if (byGlobalId && byGlobalId.nodeType === "topic") {
65
+ node = byGlobalId;
66
+ }
67
+ } catch (error) {
68
+ debugGraphPrimitiveFallback(
69
+ "[topicScope] topic-node scope lookup by globalId failed",
70
+ { error, ref }
71
+ );
72
+ }
73
+ if (!node) {
74
+ return null;
75
+ }
76
+ const scopeKey = normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);
77
+ if (!scopeKey) {
78
+ return null;
79
+ }
80
+ return {
81
+ topicId: scopeKey,
82
+ projectId: asMappedProjectId(node),
83
+ source: "topic_node"
84
+ };
85
+ }
56
86
  function asMappedProjectId(topic) {
57
87
  if (!topic) {
58
88
  return;
@@ -193,6 +223,13 @@ async function resolveTopicProjectScope(ctx, args) {
193
223
  ) ?? null;
194
224
  }
195
225
  if (!topic) {
226
+ const nodeScope = await resolveTopicNodeScopeOrNull(
227
+ ctx,
228
+ String(args.topicId)
229
+ );
230
+ if (nodeScope) {
231
+ return nodeScope;
232
+ }
196
233
  throw new Error(`Topic not found: ${String(args.topicId)}`);
197
234
  }
198
235
  const inherited = await resolveInheritedWorkspaceScope(ctx, topic);
@@ -263,6 +300,16 @@ async function resolveTopicProjectScope(ctx, args) {
263
300
  source: "project_mapped_topic"
264
301
  };
265
302
  }
303
+ const nodeScope = await resolveTopicNodeScopeOrNull(
304
+ ctx,
305
+ String(args.projectId)
306
+ );
307
+ if (nodeScope) {
308
+ return {
309
+ ...nodeScope,
310
+ projectId: nodeScope.projectId ?? String(args.projectId)
311
+ };
312
+ }
266
313
  throw new Error(
267
314
  `Legacy project scope ${String(args.projectId)} has no mapped topic.`
268
315
  );
@@ -748,6 +795,10 @@ function buildLinkedWorktreeMetadata(linkedWorktreeId) {
748
795
  linkedWorktreeId
749
796
  } : {};
750
797
  }
798
+ async function insertEpistemicNode(ctx, doc) {
799
+ assertUuidV7Identity("epistemicNodes", doc.globalId);
800
+ return ctx.db.insert("epistemicNodes", doc);
801
+ }
751
802
 
752
803
  // src/epistemicQuestions.create.ts
753
804
  var create = mutation({
@@ -821,7 +872,7 @@ var create = mutation({
821
872
  const globalId = generateGlobalId();
822
873
  const contentHash = generateContentHash(args.question);
823
874
  const category = normalizeCategory(args.category);
824
- const nodeId = await ctx.db.insert("epistemicNodes", {
875
+ const nodeId = await insertEpistemicNode(ctx, {
825
876
  globalId,
826
877
  topicId: scope.topicId,
827
878
  projectId: scope.projectId,
@@ -989,7 +1040,7 @@ var createBatch = mutation({
989
1040
  const globalId = generateGlobalId();
990
1041
  const contentHash = generateContentHash(q.question);
991
1042
  const category = normalizeCategory(q.category);
992
- const nodeId = await ctx.db.insert("epistemicNodes", {
1043
+ const nodeId = await insertEpistemicNode(ctx, {
993
1044
  globalId,
994
1045
  topicId: scope.topicId,
995
1046
  projectId: scope.projectId,
@@ -1041,7 +1092,7 @@ var createBatch = mutation({
1041
1092
  const beliefNode = await ctx.db.get(q.linkedBeliefNodeId);
1042
1093
  if (beliefNode) {
1043
1094
  await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {
1044
- globalId: crypto.randomUUID(),
1095
+ globalId: generateGlobalId(),
1045
1096
  fromGlobalId: beliefNode.globalId,
1046
1097
  toGlobalId: globalId,
1047
1098
  edgeType: "tests",
@@ -1105,7 +1156,7 @@ var internalCreate = internalMutation({
1105
1156
  const globalId = generateGlobalId();
1106
1157
  const contentHash = generateContentHash(args.question);
1107
1158
  const category = normalizeCategory(args.category);
1108
- const nodeId = await ctx.db.insert("epistemicNodes", {
1159
+ const nodeId = await insertEpistemicNode(ctx, {
1109
1160
  globalId,
1110
1161
  topicId: scope.topicId,
1111
1162
  projectId: scope.projectId,
@@ -1137,7 +1188,7 @@ var internalCreate = internalMutation({
1137
1188
  const beliefNode = await ctx.db.get(args.linkedBeliefNodeId);
1138
1189
  if (beliefNode) {
1139
1190
  await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {
1140
- globalId: crypto.randomUUID(),
1191
+ globalId: generateGlobalId(),
1141
1192
  fromGlobalId: beliefNode.globalId,
1142
1193
  toGlobalId: globalId,
1143
1194
  edgeType: "tests",
@@ -1208,7 +1259,7 @@ var addQuestion = mutation({
1208
1259
  const contentHash = generateContentHash(args.question);
1209
1260
  const category = normalizeCategory(args.category);
1210
1261
  const additionalMetadata = args.metadata && typeof args.metadata === "object" ? args.metadata : {};
1211
- const nodeId = await ctx.db.insert("epistemicNodes", {
1262
+ const nodeId = await insertEpistemicNode(ctx, {
1212
1263
  globalId,
1213
1264
  topicId: scope.topicId,
1214
1265
  projectId: scope.projectId,