@lucern/graph-primitives 1.0.30 → 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 { normalizeTupleContradictionPolicy, mkOpinion, createInheritedContractRe
10
10
  import { isNodeType, getLayerForNodeType } from '@lucern/contracts/schema-helpers/spine/tables/epistemicNodes';
11
11
  import { assertSchemaEnumValue } from '@lucern/contracts/schema-helpers/enumValidation';
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
  import { listAudienceRegistryRows } from '@lucern/access-control/audienceRegistry';
15
15
 
16
16
  // src/epistemicBeliefs.admin.ts
@@ -1246,7 +1246,7 @@ async function markBeliefGraphDirty(ctx, scope) {
1246
1246
  );
1247
1247
  }
1248
1248
  async function resolveBeliefScopeOrNull(ctx, args) {
1249
- if (!(args.projectId || args.topicId)) {
1249
+ if (!args.topicId) {
1250
1250
  return null;
1251
1251
  }
1252
1252
  try {
@@ -1776,7 +1776,7 @@ var getByPillar = query({
1776
1776
  },
1777
1777
  returns: permissiveReturn,
1778
1778
  handler: async (ctx, args) => {
1779
- if (!(args.projectId || args.topicId)) {
1779
+ if (!args.topicId) {
1780
1780
  return [];
1781
1781
  }
1782
1782
  let scope;
@@ -2207,7 +2207,7 @@ var getRecentConfidenceChanges = query({
2207
2207
  if (!scope) {
2208
2208
  return [];
2209
2209
  }
2210
- const scopeId = scope.topicId ? String(scope.topicId) : scope.projectId;
2210
+ const scopeId = scope.topicId ? String(scope.topicId) : void 0;
2211
2211
  if (!(scopeId && await checkScopeAccess(ctx, scopeId, args.userId))) {
2212
2212
  return [];
2213
2213
  }
@@ -2464,7 +2464,7 @@ var backfillScoredBeliefEdges = internalMutation({
2464
2464
  returns: permissiveReturn,
2465
2465
  handler: async (ctx, args) => {
2466
2466
  const dryRun = args.dryRun ?? false;
2467
- const scopeTopicId = args.topicId ?? args.projectId;
2467
+ const scopeTopicId = args.topicId;
2468
2468
  if (!scopeTopicId) {
2469
2469
  return {
2470
2470
  dryRun,
@@ -3425,10 +3425,7 @@ async function scheduleFirstScoringThemeEdges(ctx, args, node, state) {
3425
3425
  if (!state.isFirstScoring) {
3426
3426
  return;
3427
3427
  }
3428
- const themeNodes = await ctx.db.query("epistemicNodes").withIndex(
3429
- "by_topic",
3430
- (q) => q.eq("topicId", node.topicId || node.projectId)
3431
- ).filter((q) => q.eq(q.field("nodeType"), "theme")).collect();
3428
+ const themeNodes = await ctx.db.query("epistemicNodes").withIndex("by_topic", (q) => q.eq("topicId", node.topicId)).filter((q) => q.eq(q.field("nodeType"), "theme")).collect();
3432
3429
  for (const theme of themeNodes) {
3433
3430
  if (!(theme.globalId && node.globalId)) {
3434
3431
  continue;
@@ -3789,36 +3786,26 @@ async function insertEpistemicEdge(ctx, doc) {
3789
3786
  function cleanString(value) {
3790
3787
  return typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
3791
3788
  }
3792
- function topicNodeCandidates(topicRef) {
3789
+ function requireTopicGlobalId(topicRef) {
3793
3790
  const normalized = topicRef.trim();
3794
- if (!normalized) {
3795
- return [];
3796
- }
3797
- const candidates = [normalized];
3798
- if (normalized.startsWith("top_")) {
3799
- candidates.push(normalized.slice(4));
3791
+ if (!(normalized && isUuidV7(normalized))) {
3792
+ throw new Error(
3793
+ "Belief creation topic anchors must be UUIDv7 epistemicNodes.globalId values."
3794
+ );
3800
3795
  }
3801
- return [...new Set(candidates)];
3796
+ return normalized;
3802
3797
  }
3803
3798
  function readTopicNodeRef(args) {
3804
3799
  return cleanString(args.topicGlobalId) ?? cleanString(args.topicNodeId) ?? cleanString(args.topicId);
3805
3800
  }
3806
3801
  async function resolveRequiredTopicAnchor(ctx, topicRef) {
3807
- for (const candidate of topicNodeCandidates(topicRef)) {
3808
- try {
3809
- const direct = await ctx.db.get(candidate);
3810
- if (direct?.nodeType === "topic" && cleanString(direct.globalId)) {
3811
- return direct;
3812
- }
3813
- } catch {
3814
- }
3815
- const byGlobalId = await ctx.db.query("epistemicNodes").withIndex("by_globalId", (q) => q.eq("globalId", candidate)).first();
3816
- if (byGlobalId?.nodeType === "topic" && cleanString(byGlobalId.globalId)) {
3817
- return byGlobalId;
3818
- }
3802
+ const topicGlobalId = requireTopicGlobalId(topicRef);
3803
+ const byGlobalId = await ctx.db.query("epistemicNodes").withIndex("by_globalId", (q) => q.eq("globalId", topicGlobalId)).first();
3804
+ if (byGlobalId?.nodeType === "topic" && cleanString(byGlobalId.globalId)) {
3805
+ return byGlobalId;
3819
3806
  }
3820
3807
  throw new Error(
3821
- "Belief creation requires topicGlobalId or topicNodeId for a topic node in epistemicNodes. Legacy topics-table IDs are not valid belief anchors."
3808
+ "Belief creation requires a UUIDv7 topicGlobalId for a topic node in epistemicNodes. Legacy topics-table IDs are not valid belief anchors."
3822
3809
  );
3823
3810
  }
3824
3811
  function scopeFromTopicAnchor(topicNode) {
@@ -4329,7 +4316,7 @@ var create = mutation({
4329
4316
  projectId: scope.projectId,
4330
4317
  topicId: String(scope.topicId)
4331
4318
  });
4332
- if (scope.projectId || scope.topicId) {
4319
+ if (scope.topicId) {
4333
4320
  await ctx.scheduler.runAfter(
4334
4321
  0,
4335
4322
  "embeddingActions:generateEpistemicNodeEmbedding",
@@ -4348,7 +4335,7 @@ Rationale: ${args.rationale}` : args.formulation
4348
4335
  }
4349
4336
  );
4350
4337
  }
4351
- if (scope.projectId || scope.topicId) {
4338
+ if (scope.topicId) {
4352
4339
  await ctx.scheduler.runAfter(
4353
4340
  2e3,
4354
4341
  // 2 second delay
@@ -4361,7 +4348,7 @@ Rationale: ${args.rationale}` : args.formulation
4361
4348
  }
4362
4349
  );
4363
4350
  }
4364
- if (pillar === "other" && (scope.projectId || scope.topicId)) {
4351
+ if (pillar === "other" && scope.topicId) {
4365
4352
  await ctx.scheduler.runAfter(
4366
4353
  2500,
4367
4354
  "beliefCategorization:autoCategorizeBelief",
@@ -4372,7 +4359,7 @@ Rationale: ${args.rationale}` : args.formulation
4372
4359
  }
4373
4360
  );
4374
4361
  }
4375
- if (scope.projectId || scope.topicId) {
4362
+ if (scope.topicId) {
4376
4363
  await ctx.scheduler.runAfter(
4377
4364
  3e3,
4378
4365
  // 3 second delay — after entity extraction
@@ -4640,7 +4627,7 @@ var getByProject = query({
4640
4627
  },
4641
4628
  returns: permissiveReturn,
4642
4629
  handler: async (ctx, args) => {
4643
- if (!(args.projectId || args.topicId)) {
4630
+ if (!args.topicId) {
4644
4631
  return [];
4645
4632
  }
4646
4633
  const pageSize = clampBeliefLimit(args.limit);
@@ -4663,7 +4650,7 @@ var getByProject = query({
4663
4650
  return [];
4664
4651
  }
4665
4652
  if (args.userId) {
4666
- const scopeId = scope.topicId ? String(scope.topicId) : scope.projectId;
4653
+ const scopeId = scope.topicId ? String(scope.topicId) : void 0;
4667
4654
  if (!scopeId) {
4668
4655
  return [];
4669
4656
  }
@@ -4820,7 +4807,7 @@ var forkBelief = mutation({
4820
4807
  supersededBy: newNodeId,
4821
4808
  updatedAt: now,
4822
4809
  metadata: {
4823
- ...metadata ?? {},
4810
+ ...metadata,
4824
4811
  status: "superseded",
4825
4812
  beliefStatus: "superseded",
4826
4813
  epistemicStatus: "superseded",
@@ -4900,7 +4887,7 @@ var forkBelief = mutation({
4900
4887
  projectId: parent.projectId,
4901
4888
  topicId: parent.topicId
4902
4889
  });
4903
- if (parent.projectId || parent.topicId) {
4890
+ if (parent.topicId) {
4904
4891
  const inheritedPillar = normalizePillar(
4905
4892
  String(metadata?.pillar || metadata?.topic || "")
4906
4893
  );
@@ -5306,7 +5293,7 @@ async function insertInternalBeliefAudit(ctx, args) {
5306
5293
  });
5307
5294
  }
5308
5295
  async function scheduleInternalBeliefEmbedding(ctx, args) {
5309
- if (!(args.scope.projectId || args.scope.topicId)) {
5296
+ if (!args.scope.topicId) {
5310
5297
  return;
5311
5298
  }
5312
5299
  await ctx.scheduler.runAfter(0, EMBEDDING_GENERATION_ACTION, {
@@ -5334,7 +5321,7 @@ function numericRequestedConfidence(confidence) {
5334
5321
  return 0.5;
5335
5322
  }
5336
5323
  async function scheduleInternalBeliefCategorization(ctx, args) {
5337
- if (normalizePillar(args.args.pillar || args.args.topic) !== "other" || !(args.scope.projectId || args.scope.topicId)) {
5324
+ if (normalizePillar(args.args.pillar || args.args.topic) !== "other" || !args.scope.topicId) {
5338
5325
  return;
5339
5326
  }
5340
5327
  await ctx.scheduler.runAfter(2500, BELIEF_CATEGORIZATION_ACTION, {