@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
@@ -3,6 +3,8 @@ import { requireProjectAccess } from '@lucern/access-control/access';
3
3
  import { permissiveReturn } from '@lucern/contracts/schema-helpers/validators';
4
4
  import { componentsGeneric, anyApi, mutationGeneric } from 'convex/server';
5
5
  import { isNodeType, getLayerForNodeType } from '@lucern/contracts/schema-helpers/spine/tables/epistemicNodes';
6
+ import { assertUuidV7Identity } from '@lucern/contracts/ids';
7
+ import '@lucern/contracts';
6
8
 
7
9
  // src/epistemicNodes.mutations.ts
8
10
  var api = anyApi;
@@ -58,6 +60,35 @@ function getNodeLayer(nodeType) {
58
60
  return "L2";
59
61
  }
60
62
  var LEGACY_SCOPE_FIELD = "graphScopeProjectId";
63
+ async function resolveTopicNodeScopeOrNull(ctx, ref) {
64
+ if (!ctx?.db || typeof ctx.db.query !== "function") {
65
+ return null;
66
+ }
67
+ let node = null;
68
+ try {
69
+ const byGlobalId = await ctx.db.query("epistemicNodes").withIndex("by_globalId", (q) => q.eq("globalId", ref)).first();
70
+ if (byGlobalId && byGlobalId.nodeType === "topic") {
71
+ node = byGlobalId;
72
+ }
73
+ } catch (error) {
74
+ debugGraphPrimitiveFallback(
75
+ "[topicScope] topic-node scope lookup by globalId failed",
76
+ { error, ref }
77
+ );
78
+ }
79
+ if (!node) {
80
+ return null;
81
+ }
82
+ const scopeKey = normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);
83
+ if (!scopeKey) {
84
+ return null;
85
+ }
86
+ return {
87
+ topicId: scopeKey,
88
+ projectId: asMappedProjectId(node),
89
+ source: "topic_node"
90
+ };
91
+ }
61
92
  function asMappedProjectId(topic) {
62
93
  if (!topic) {
63
94
  return;
@@ -198,6 +229,13 @@ async function resolveTopicProjectScope(ctx, args) {
198
229
  ) ?? null;
199
230
  }
200
231
  if (!topic) {
232
+ const nodeScope = await resolveTopicNodeScopeOrNull(
233
+ ctx,
234
+ String(args.topicId)
235
+ );
236
+ if (nodeScope) {
237
+ return nodeScope;
238
+ }
201
239
  throw new Error(`Topic not found: ${String(args.topicId)}`);
202
240
  }
203
241
  const inherited = await resolveInheritedWorkspaceScope(ctx, topic);
@@ -268,6 +306,16 @@ async function resolveTopicProjectScope(ctx, args) {
268
306
  source: "project_mapped_topic"
269
307
  };
270
308
  }
309
+ const nodeScope = await resolveTopicNodeScopeOrNull(
310
+ ctx,
311
+ String(args.projectId)
312
+ );
313
+ if (nodeScope) {
314
+ return {
315
+ ...nodeScope,
316
+ projectId: nodeScope.projectId ?? String(args.projectId)
317
+ };
318
+ }
271
319
  throw new Error(
272
320
  `Legacy project scope ${String(args.projectId)} has no mapped topic.`
273
321
  );
@@ -662,6 +710,10 @@ var verificationStatusValidator = v.union(
662
710
  v.literal("contradicted"),
663
711
  v.literal("outdated")
664
712
  );
713
+ async function insertEpistemicNode(ctx, doc) {
714
+ assertUuidV7Identity("epistemicNodes", doc.globalId);
715
+ return ctx.db.insert("epistemicNodes", doc);
716
+ }
665
717
 
666
718
  // src/epistemicNodes.mutations.ts
667
719
  var optionalNodeScopeArgs = optionalScopeArgs;
@@ -739,7 +791,7 @@ var create = mutation({
739
791
  "Workspace-scoped reasoning isolation requires topicId or projectId for non-ontological node creation."
740
792
  );
741
793
  }
742
- const nodeId = await ctx.db.insert("epistemicNodes", {
794
+ const nodeId = await insertEpistemicNode(ctx, {
743
795
  globalId: args.globalId,
744
796
  nodeType: args.nodeType,
745
797
  epistemicLayer,
@@ -904,7 +956,7 @@ var supersede = mutation({
904
956
  });
905
957
  const now = Date.now();
906
958
  const epistemicLayer = oldNode.epistemicLayer || getNodeLayer(oldNode.nodeType);
907
- const newNodeId = await ctx.db.insert("epistemicNodes", {
959
+ const newNodeId = await insertEpistemicNode(ctx, {
908
960
  globalId: args.newGlobalId,
909
961
  nodeType: oldNode.nodeType,
910
962
  epistemicLayer,
@@ -1110,7 +1162,7 @@ var batchCreate = mutation({
1110
1162
  });
1111
1163
  const epistemicLayer = getNodeLayer(node.nodeType);
1112
1164
  const resolvedScope = await resolveNodeScope(node);
1113
- const nodeId = await ctx.db.insert("epistemicNodes", {
1165
+ const nodeId = await insertEpistemicNode(ctx, {
1114
1166
  ...node,
1115
1167
  epistemicLayer,
1116
1168
  // Phase 2B: Auto-derived from nodeType