@lucern/graph-primitives 1.0.31 → 1.0.32

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 (89) hide show
  1. package/dist/beliefEvidenceLinks.js.map +1 -1
  2. package/dist/beliefEvidenceLinks.operational.js.map +1 -1
  3. package/dist/contradictions.js +5 -5
  4. package/dist/contradictions.js.map +1 -1
  5. package/dist/entityLifecycle.js.map +1 -1
  6. package/dist/epistemicAnswers.js +1 -1
  7. package/dist/epistemicAnswers.js.map +1 -1
  8. package/dist/epistemicBeliefs.admin.js +2 -2
  9. package/dist/epistemicBeliefs.admin.js.map +1 -1
  10. package/dist/epistemicBeliefs.backfills.js +3 -3
  11. package/dist/epistemicBeliefs.backfills.js.map +1 -1
  12. package/dist/epistemicBeliefs.confidence.js +1 -4
  13. package/dist/epistemicBeliefs.confidence.js.map +1 -1
  14. package/dist/epistemicBeliefs.core.js +20 -30
  15. package/dist/epistemicBeliefs.core.js.map +1 -1
  16. package/dist/epistemicBeliefs.forkEvidence.js.map +1 -1
  17. package/dist/epistemicBeliefs.helpers.js +1 -1
  18. package/dist/epistemicBeliefs.helpers.js.map +1 -1
  19. package/dist/epistemicBeliefs.internal.js +15 -25
  20. package/dist/epistemicBeliefs.internal.js.map +1 -1
  21. package/dist/epistemicBeliefs.js +27 -40
  22. package/dist/epistemicBeliefs.js.map +1 -1
  23. package/dist/epistemicBeliefs.lifecycle.js +1 -4
  24. package/dist/epistemicBeliefs.lifecycle.js.map +1 -1
  25. package/dist/epistemicBeliefs.links.js +1 -1
  26. package/dist/epistemicBeliefs.links.js.map +1 -1
  27. package/dist/epistemicBeliefs.queries.js.map +1 -1
  28. package/dist/epistemicBeliefs.topicAnchor.js +12 -22
  29. package/dist/epistemicBeliefs.topicAnchor.js.map +1 -1
  30. package/dist/epistemicContracts.evaluators.js +1 -4
  31. package/dist/epistemicContracts.evaluators.js.map +1 -1
  32. package/dist/epistemicContracts.handlers.js +1 -4
  33. package/dist/epistemicContracts.handlers.js.map +1 -1
  34. package/dist/epistemicContracts.js +1 -4
  35. package/dist/epistemicContracts.js.map +1 -1
  36. package/dist/epistemicEdgeCreation.js.map +1 -1
  37. package/dist/epistemicEdges.handlers.js.map +1 -1
  38. package/dist/epistemicEdges.js +6 -7
  39. package/dist/epistemicEdges.js.map +1 -1
  40. package/dist/epistemicEdges.mutations.js +3 -4
  41. package/dist/epistemicEdges.mutations.js.map +1 -1
  42. package/dist/epistemicEdges.queries.js +3 -3
  43. package/dist/epistemicEdges.queries.js.map +1 -1
  44. package/dist/epistemicEvidence.js +10 -10
  45. package/dist/epistemicEvidence.js.map +1 -1
  46. package/dist/epistemicEvidenceHelpers.js +1 -1
  47. package/dist/epistemicEvidenceHelpers.js.map +1 -1
  48. package/dist/epistemicEvidenceMutations.js +5 -5
  49. package/dist/epistemicEvidenceMutations.js.map +1 -1
  50. package/dist/epistemicEvidenceQueries.js +6 -6
  51. package/dist/epistemicEvidenceQueries.js.map +1 -1
  52. package/dist/epistemicHelpers.js +4 -4
  53. package/dist/epistemicHelpers.js.map +1 -1
  54. package/dist/epistemicInsert.js.map +1 -1
  55. package/dist/epistemicLayerRules.js +2 -2
  56. package/dist/epistemicLayerRules.js.map +1 -1
  57. package/dist/epistemicLinking.js.map +1 -1
  58. package/dist/epistemicNodeCreation.js +2 -2
  59. package/dist/epistemicNodeCreation.js.map +1 -1
  60. package/dist/epistemicNodes.internal.js +2 -3
  61. package/dist/epistemicNodes.internal.js.map +1 -1
  62. package/dist/epistemicNodes.js +10 -12
  63. package/dist/epistemicNodes.js.map +1 -1
  64. package/dist/epistemicNodes.mutations.js +3 -4
  65. package/dist/epistemicNodes.mutations.js.map +1 -1
  66. package/dist/epistemicNodes.queries.js +5 -5
  67. package/dist/epistemicNodes.queries.js.map +1 -1
  68. package/dist/epistemicQuestions.conviction.js +5 -5
  69. package/dist/epistemicQuestions.conviction.js.map +1 -1
  70. package/dist/epistemicQuestions.create.js +7 -7
  71. package/dist/epistemicQuestions.create.js.map +1 -1
  72. package/dist/epistemicQuestions.evidence.js +2 -2
  73. package/dist/epistemicQuestions.evidence.js.map +1 -1
  74. package/dist/epistemicQuestions.helpers.js +7 -4
  75. package/dist/epistemicQuestions.helpers.js.map +1 -1
  76. package/dist/epistemicQuestions.js +16 -13
  77. package/dist/epistemicQuestions.js.map +1 -1
  78. package/dist/epistemicQuestions.lifecycle.js.map +1 -1
  79. package/dist/epistemicQuestions.queries.js +2 -2
  80. package/dist/epistemicQuestions.queries.js.map +1 -1
  81. package/dist/epistemicQuestions.sprint.js +6 -3
  82. package/dist/epistemicQuestions.sprint.js.map +1 -1
  83. package/dist/epistemicQuestions.tail.js +2 -2
  84. package/dist/epistemicQuestions.tail.js.map +1 -1
  85. package/dist/epistemicSources.js.map +1 -1
  86. package/dist/index.js +79 -92
  87. package/dist/index.js.map +1 -1
  88. package/dist/proof-attestation.json +1 -1
  89. package/package.json +4 -4
@@ -10,7 +10,7 @@ import { throwStructuredMutationError } from '@lucern/access-control/structuredM
10
10
  import { normalizeTupleContradictionPolicy, createInheritedContractRecord, confidenceFromSL } from '@lucern/confidence';
11
11
  import { isNodeType, getLayerForNodeType } from '@lucern/contracts/schema-helpers/spine/tables/epistemicNodes';
12
12
  import { assertEdgePolicyAllowed, edgePolicyManifest } from '@lucern/contracts';
13
- import { generateGlobalId, assertUuidV7Identity, generateUuidV7, assertStorageEdgeVocabulary, assertUuidShapedEdgeEndpoint } from '@lucern/contracts/ids';
13
+ import { generateGlobalId, assertUuidV7Identity, generateUuidV7, assertStorageEdgeVocabulary, isUuidV7, assertUuidShapedEdgeEndpoint } from '@lucern/contracts/ids';
14
14
 
15
15
  // src/epistemicBeliefs.core.ts
16
16
 
@@ -1165,36 +1165,26 @@ async function insertEpistemicEdge(ctx, doc) {
1165
1165
  function cleanString(value) {
1166
1166
  return typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
1167
1167
  }
1168
- function topicNodeCandidates(topicRef) {
1168
+ function requireTopicGlobalId(topicRef) {
1169
1169
  const normalized = topicRef.trim();
1170
- if (!normalized) {
1171
- return [];
1172
- }
1173
- const candidates = [normalized];
1174
- if (normalized.startsWith("top_")) {
1175
- candidates.push(normalized.slice(4));
1170
+ if (!(normalized && isUuidV7(normalized))) {
1171
+ throw new Error(
1172
+ "Belief creation topic anchors must be UUIDv7 epistemicNodes.globalId values."
1173
+ );
1176
1174
  }
1177
- return [...new Set(candidates)];
1175
+ return normalized;
1178
1176
  }
1179
1177
  function readTopicNodeRef(args) {
1180
1178
  return cleanString(args.topicGlobalId) ?? cleanString(args.topicNodeId) ?? cleanString(args.topicId);
1181
1179
  }
1182
1180
  async function resolveRequiredTopicAnchor(ctx, topicRef) {
1183
- for (const candidate of topicNodeCandidates(topicRef)) {
1184
- try {
1185
- const direct = await ctx.db.get(candidate);
1186
- if (direct?.nodeType === "topic" && cleanString(direct.globalId)) {
1187
- return direct;
1188
- }
1189
- } catch {
1190
- }
1191
- const byGlobalId = await ctx.db.query("epistemicNodes").withIndex("by_globalId", (q) => q.eq("globalId", candidate)).first();
1192
- if (byGlobalId?.nodeType === "topic" && cleanString(byGlobalId.globalId)) {
1193
- return byGlobalId;
1194
- }
1181
+ const topicGlobalId = requireTopicGlobalId(topicRef);
1182
+ const byGlobalId = await ctx.db.query("epistemicNodes").withIndex("by_globalId", (q) => q.eq("globalId", topicGlobalId)).first();
1183
+ if (byGlobalId?.nodeType === "topic" && cleanString(byGlobalId.globalId)) {
1184
+ return byGlobalId;
1195
1185
  }
1196
1186
  throw new Error(
1197
- "Belief creation requires topicGlobalId or topicNodeId for a topic node in epistemicNodes. Legacy topics-table IDs are not valid belief anchors."
1187
+ "Belief creation requires a UUIDv7 topicGlobalId for a topic node in epistemicNodes. Legacy topics-table IDs are not valid belief anchors."
1198
1188
  );
1199
1189
  }
1200
1190
  function scopeFromTopicAnchor(topicNode) {
@@ -1705,7 +1695,7 @@ var create = mutation({
1705
1695
  projectId: scope.projectId,
1706
1696
  topicId: String(scope.topicId)
1707
1697
  });
1708
- if (scope.projectId || scope.topicId) {
1698
+ if (scope.topicId) {
1709
1699
  await ctx.scheduler.runAfter(
1710
1700
  0,
1711
1701
  "embeddingActions:generateEpistemicNodeEmbedding",
@@ -1724,7 +1714,7 @@ Rationale: ${args.rationale}` : args.formulation
1724
1714
  }
1725
1715
  );
1726
1716
  }
1727
- if (scope.projectId || scope.topicId) {
1717
+ if (scope.topicId) {
1728
1718
  await ctx.scheduler.runAfter(
1729
1719
  2e3,
1730
1720
  // 2 second delay
@@ -1737,7 +1727,7 @@ Rationale: ${args.rationale}` : args.formulation
1737
1727
  }
1738
1728
  );
1739
1729
  }
1740
- if (pillar === "other" && (scope.projectId || scope.topicId)) {
1730
+ if (pillar === "other" && scope.topicId) {
1741
1731
  await ctx.scheduler.runAfter(
1742
1732
  2500,
1743
1733
  "beliefCategorization:autoCategorizeBelief",
@@ -1748,7 +1738,7 @@ Rationale: ${args.rationale}` : args.formulation
1748
1738
  }
1749
1739
  );
1750
1740
  }
1751
- if (scope.projectId || scope.topicId) {
1741
+ if (scope.topicId) {
1752
1742
  await ctx.scheduler.runAfter(
1753
1743
  3e3,
1754
1744
  // 3 second delay — after entity extraction
@@ -2016,7 +2006,7 @@ var getByProject = query({
2016
2006
  },
2017
2007
  returns: permissiveReturn,
2018
2008
  handler: async (ctx, args) => {
2019
- if (!(args.projectId || args.topicId)) {
2009
+ if (!args.topicId) {
2020
2010
  return [];
2021
2011
  }
2022
2012
  const pageSize = clampBeliefLimit(args.limit);
@@ -2039,7 +2029,7 @@ var getByProject = query({
2039
2029
  return [];
2040
2030
  }
2041
2031
  if (args.userId) {
2042
- const scopeId = scope.topicId ? String(scope.topicId) : scope.projectId;
2032
+ const scopeId = scope.topicId ? String(scope.topicId) : void 0;
2043
2033
  if (!scopeId) {
2044
2034
  return [];
2045
2035
  }
@@ -2196,7 +2186,7 @@ var forkBelief = mutation({
2196
2186
  supersededBy: newNodeId,
2197
2187
  updatedAt: now,
2198
2188
  metadata: {
2199
- ...metadata ?? {},
2189
+ ...metadata,
2200
2190
  status: "superseded",
2201
2191
  beliefStatus: "superseded",
2202
2192
  epistemicStatus: "superseded",
@@ -2276,7 +2266,7 @@ var forkBelief = mutation({
2276
2266
  projectId: parent.projectId,
2277
2267
  topicId: parent.topicId
2278
2268
  });
2279
- if (parent.projectId || parent.topicId) {
2269
+ if (parent.topicId) {
2280
2270
  const inheritedPillar = normalizePillar(
2281
2271
  String(metadata?.pillar || metadata?.topic || "")
2282
2272
  );