@lucern/graph-primitives 1.0.16 → 1.0.18

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 (92) hide show
  1. package/dist/beliefEvidenceLinks.js +144 -99
  2. package/dist/beliefEvidenceLinks.js.map +1 -1
  3. package/dist/beliefEvidenceLinks.operational.d.ts +29 -0
  4. package/dist/beliefEvidenceLinks.operational.js +157 -0
  5. package/dist/beliefEvidenceLinks.operational.js.map +1 -0
  6. package/dist/{beliefLifecycle-y8WLXqQj.d.ts → beliefLifecycle-CXwdDw5e.d.ts} +7 -4
  7. package/dist/beliefLifecycle.d.ts +1 -1
  8. package/dist/beliefLifecycle.js +75 -18
  9. package/dist/beliefLifecycle.js.map +1 -1
  10. package/dist/entityLifecycle.js +1 -12
  11. package/dist/entityLifecycle.js.map +1 -1
  12. package/dist/epistemicAnswers.js +1 -12
  13. package/dist/epistemicAnswers.js.map +1 -1
  14. package/dist/epistemicBeliefs.admin.js.map +1 -1
  15. package/dist/epistemicBeliefs.backfills.d.ts +1 -1
  16. package/dist/epistemicBeliefs.backfills.js +63 -35
  17. package/dist/epistemicBeliefs.backfills.js.map +1 -1
  18. package/dist/epistemicBeliefs.confidence.d.ts +1 -1
  19. package/dist/epistemicBeliefs.confidence.js +70 -41
  20. package/dist/epistemicBeliefs.confidence.js.map +1 -1
  21. package/dist/epistemicBeliefs.core.js +946 -566
  22. package/dist/epistemicBeliefs.core.js.map +1 -1
  23. package/dist/epistemicBeliefs.d.ts +2 -2
  24. package/dist/epistemicBeliefs.forkEvidence.d.ts +18 -0
  25. package/dist/epistemicBeliefs.forkEvidence.js +121 -0
  26. package/dist/epistemicBeliefs.forkEvidence.js.map +1 -0
  27. package/dist/epistemicBeliefs.helpers.d.ts +2 -2
  28. package/dist/epistemicBeliefs.helpers.js +60 -32
  29. package/dist/epistemicBeliefs.helpers.js.map +1 -1
  30. package/dist/epistemicBeliefs.internal.js +175 -51
  31. package/dist/epistemicBeliefs.internal.js.map +1 -1
  32. package/dist/epistemicBeliefs.js +437 -84
  33. package/dist/epistemicBeliefs.js.map +1 -1
  34. package/dist/epistemicBeliefs.lifecycle.d.ts +2 -2
  35. package/dist/epistemicBeliefs.lifecycle.js +75 -47
  36. package/dist/epistemicBeliefs.lifecycle.js.map +1 -1
  37. package/dist/epistemicBeliefs.links.js +47 -13
  38. package/dist/epistemicBeliefs.links.js.map +1 -1
  39. package/dist/epistemicBeliefs.topicAnchor.d.ts +29 -0
  40. package/dist/epistemicBeliefs.topicAnchor.js +105 -0
  41. package/dist/epistemicBeliefs.topicAnchor.js.map +1 -0
  42. package/dist/epistemicContracts.evaluators.js +71 -42
  43. package/dist/epistemicContracts.evaluators.js.map +1 -1
  44. package/dist/epistemicContracts.handlers.js +72 -54
  45. package/dist/epistemicContracts.handlers.js.map +1 -1
  46. package/dist/epistemicContracts.js +72 -54
  47. package/dist/epistemicContracts.js.map +1 -1
  48. package/dist/epistemicContracts.metrics.js +1 -1
  49. package/dist/epistemicContracts.metrics.js.map +1 -1
  50. package/dist/epistemicContracts.types.d.ts +1 -1
  51. package/dist/epistemicEdgeCreation.js +1 -12
  52. package/dist/epistemicEdgeCreation.js.map +1 -1
  53. package/dist/epistemicEdges.helpers.d.ts +1 -1
  54. package/dist/epistemicEvidence.js +173 -93
  55. package/dist/epistemicEvidence.js.map +1 -1
  56. package/dist/epistemicEvidenceMutations.js +173 -93
  57. package/dist/epistemicEvidenceMutations.js.map +1 -1
  58. package/dist/epistemicHelpers.js +1 -12
  59. package/dist/epistemicHelpers.js.map +1 -1
  60. package/dist/epistemicNodeCreation.js +1 -10
  61. package/dist/epistemicNodeCreation.js.map +1 -1
  62. package/dist/epistemicNodes.internal.js.map +1 -1
  63. package/dist/epistemicNodes.js +2 -2
  64. package/dist/epistemicNodes.js.map +1 -1
  65. package/dist/epistemicNodes.mutations.js +2 -2
  66. package/dist/epistemicNodes.mutations.js.map +1 -1
  67. package/dist/epistemicQuestions.create.js +1 -12
  68. package/dist/epistemicQuestions.create.js.map +1 -1
  69. package/dist/epistemicQuestions.evidence.js +1 -12
  70. package/dist/epistemicQuestions.evidence.js.map +1 -1
  71. package/dist/epistemicQuestions.js +1 -12
  72. package/dist/epistemicQuestions.js.map +1 -1
  73. package/dist/epistemicQuestions.tail.js +1 -12
  74. package/dist/epistemicQuestions.tail.js.map +1 -1
  75. package/dist/epistemicSources.js +1 -12
  76. package/dist/epistemicSources.js.map +1 -1
  77. package/dist/evaluators/index.js +1 -1
  78. package/dist/evaluators/index.js.map +1 -1
  79. package/dist/globalId-4y9SPpC_.d.ts +10 -0
  80. package/dist/globalId.d.ts +1 -1
  81. package/dist/globalId.js +1 -13
  82. package/dist/globalId.js.map +1 -1
  83. package/dist/helpers.js +1 -12
  84. package/dist/helpers.js.map +1 -1
  85. package/dist/index.d.ts +4 -3
  86. package/dist/index.js +771 -247
  87. package/dist/index.js.map +1 -1
  88. package/dist/invariantEnforcement.js +2 -2
  89. package/dist/invariantEnforcement.js.map +1 -1
  90. package/dist/proof-attestation.json +3 -3
  91. package/package.json +4 -4
  92. package/dist/globalId-DKh9d_uD.d.ts +0 -20
@@ -6,6 +6,7 @@ import { getCurrentUserId } from '@lucern/access-control/auth';
6
6
  import { componentsGeneric, internalMutationGeneric, anyApi, queryGeneric, mutationGeneric } from 'convex/server';
7
7
  import '@lucern/contracts/schema-helpers/spine/tables/epistemicNodes';
8
8
  import { permissiveReturn } from '@lucern/contracts/schema-helpers/validators';
9
+ import { generateGlobalId } from '@lucern/contracts/ids';
9
10
 
10
11
  // src/epistemicBeliefs.helpers.ts
11
12
 
@@ -13,18 +14,32 @@ import { permissiveReturn } from '@lucern/contracts/schema-helpers/validators';
13
14
  var BELIEF_STATUS_VALUES = [
14
15
  "assumption",
15
16
  "hypothesis",
16
- "belief",
17
- "fact"
18
- ];
19
- var RESOLVED_PREDICTION_OUTCOMES = [
20
- "confirmed",
21
- "disconfirmed",
22
- "partial",
23
- "expired"
17
+ "active",
18
+ "superseded",
19
+ "resolved_true",
20
+ "resolved_false"
24
21
  ];
25
22
  function isBeliefLifecycleStatus(value) {
26
23
  return typeof value === "string" && BELIEF_STATUS_VALUES.includes(value);
27
24
  }
25
+ function normalizeLegacyBeliefStatus(value) {
26
+ if (isBeliefLifecycleStatus(value)) {
27
+ return value;
28
+ }
29
+ if (value === "belief" || value === "established" || value === "emerging") {
30
+ return "active";
31
+ }
32
+ if (value === "fact" || value === "confirmed") {
33
+ return "resolved_true";
34
+ }
35
+ if (value === "disconfirmed" || value === "expired") {
36
+ return "resolved_false";
37
+ }
38
+ if (value === "deprecated") {
39
+ return "superseded";
40
+ }
41
+ return null;
42
+ }
28
43
  function normalizeBeliefConfidence(confidence) {
29
44
  if (typeof confidence !== "number" || !Number.isFinite(confidence)) {
30
45
  return null;
@@ -44,47 +59,61 @@ function isResolvedByConfidence(confidence) {
44
59
  }
45
60
  return normalized <= 0 || normalized >= 1;
46
61
  }
47
- function hasResolvedPredictionOutcome(predictionMeta) {
62
+ function getPredictionMetaFromMetadata(metadata) {
63
+ return metadata?.predictionMeta;
64
+ }
65
+ function resolvedPredictionStatus(predictionMeta) {
48
66
  if (!predictionMeta || typeof predictionMeta !== "object") {
49
- return false;
67
+ return null;
50
68
  }
51
69
  const outcome = predictionMeta.outcome;
52
- return typeof outcome === "string" && RESOLVED_PREDICTION_OUTCOMES.includes(outcome);
53
- }
54
- function getPredictionMetaFromMetadata(metadata) {
55
- return metadata?.predictionMeta;
70
+ if (outcome === "confirmed") {
71
+ return "resolved_true";
72
+ }
73
+ if (outcome === "disconfirmed" || outcome === "expired") {
74
+ return "resolved_false";
75
+ }
76
+ return null;
56
77
  }
57
- function shouldTreatBeliefAsFact(opts) {
78
+ function shouldTreatBeliefAsResolved(opts) {
58
79
  if (isResolvedByConfidence(opts.confidence)) {
59
- return true;
80
+ const normalized = normalizeBeliefConfidence(opts.confidence);
81
+ return normalized === 0 ? "resolved_false" : "resolved_true";
60
82
  }
61
- if (hasResolvedPredictionOutcome(opts.predictionMeta)) {
62
- return true;
83
+ const directPredictionStatus = resolvedPredictionStatus(opts.predictionMeta);
84
+ if (directPredictionStatus) {
85
+ return directPredictionStatus;
63
86
  }
64
- if (hasResolvedPredictionOutcome(getPredictionMetaFromMetadata(opts.metadata))) {
65
- return true;
87
+ const metadataPredictionStatus = resolvedPredictionStatus(
88
+ getPredictionMetaFromMetadata(opts.metadata)
89
+ );
90
+ if (metadataPredictionStatus) {
91
+ return metadataPredictionStatus;
66
92
  }
67
- return false;
93
+ return null;
68
94
  }
69
95
  function resolveBeliefLifecycleStatus(opts) {
70
- if (shouldTreatBeliefAsFact(opts)) {
71
- return "fact";
96
+ const resolvedStatus = shouldTreatBeliefAsResolved(opts);
97
+ if (resolvedStatus) {
98
+ return resolvedStatus;
72
99
  }
73
100
  const direct = opts.beliefStatus;
74
- if (isBeliefLifecycleStatus(direct)) {
101
+ const normalizedDirect = normalizeLegacyBeliefStatus(direct);
102
+ if (normalizedDirect) {
75
103
  const normalized = normalizeBeliefConfidence(opts.confidence);
76
- if (normalized !== null && isPreValidationBeliefStatus(direct)) {
77
- return "belief";
104
+ if (normalized !== null && isPreValidationBeliefStatus(normalizedDirect)) {
105
+ return "active";
78
106
  }
79
- return direct;
107
+ return normalizedDirect;
80
108
  }
81
109
  const metaStatus = opts.metadata?.beliefStatus;
82
- if (isBeliefLifecycleStatus(metaStatus)) {
110
+ const normalizedMetaStatus = normalizeLegacyBeliefStatus(metaStatus);
111
+ if (normalizedMetaStatus) {
83
112
  const normalized = normalizeBeliefConfidence(opts.confidence);
84
- if (normalized !== null && isPreValidationBeliefStatus(metaStatus)) {
85
- return "belief";
113
+ if (normalized !== null && isPreValidationBeliefStatus(normalizedMetaStatus)) {
114
+ return "active";
86
115
  }
87
- return metaStatus;
116
+ return normalizedMetaStatus;
88
117
  }
89
118
  return "assumption";
90
119
  }
@@ -92,13 +121,14 @@ function isPreValidationBeliefStatus(status) {
92
121
  return status === "assumption" || status === "hypothesis";
93
122
  }
94
123
  function promoteBeliefStatusAfterScoring(status, opts) {
95
- if (shouldTreatBeliefAsFact({ ...opts })) {
96
- return "fact";
124
+ const resolvedStatus = shouldTreatBeliefAsResolved({ ...opts });
125
+ if (resolvedStatus) {
126
+ return resolvedStatus;
97
127
  }
98
128
  if (isPreValidationBeliefStatus(status)) {
99
- return "belief";
129
+ return "active";
100
130
  }
101
- return status === "fact" ? "fact" : "belief";
131
+ return status;
102
132
  }
103
133
  var api = anyApi;
104
134
  componentsGeneric();
@@ -455,7 +485,7 @@ function buildBeliefConfidenceRow(args) {
455
485
  disbelief: args.disbelief,
456
486
  uncertainty: args.uncertainty,
457
487
  baseRate: args.baseRate,
458
- slOperator: args.slOperator ?? "manual_assessment",
488
+ slOperator: args.slOperator ?? "prior_seed",
459
489
  trigger: args.trigger,
460
490
  ...args.rationale ? { rationale: args.rationale } : {},
461
491
  assessedBy: args.assessedBy,
@@ -982,17 +1012,17 @@ async function applyBeliefConfidenceChange(ctx, args) {
982
1012
  status: 404,
983
1013
  code: "NOT_FOUND",
984
1014
  invariantCode: "belief.exists",
985
- suggestion: "Verify nodeId points to an existing node before modulating confidence.",
1015
+ suggestion: "Verify nodeId points to an existing node before appending SL scoring.",
986
1016
  details: { nodeId: args.nodeId }
987
1017
  });
988
1018
  }
989
1019
  if (node.nodeType !== "belief") {
990
1020
  throwStructuredMutationError({
991
- message: `modulateConfidence only applies to belief nodes. Received nodeType "${node.nodeType}". Entity nodes (company, person, investor, etc.) do not have confidence \u2014 use entityLifecycle.updateEntityAttributes for mutable entity data.`,
1021
+ message: `appendSlScoring only applies to belief nodes. Received nodeType "${node.nodeType}". Entity nodes (company, person, investor, etc.) do not have confidence \u2014 use entityLifecycle.updateEntityAttributes for mutable entity data.`,
992
1022
  status: 400,
993
1023
  code: "INVALID_ARGUMENT",
994
1024
  invariantCode: "entity.no_confidence",
995
- suggestion: "Use entityLifecycle.updateEntityAttributes for entity mutations. modulateConfidence is for belief nodes only.",
1025
+ suggestion: "Use entityLifecycle.updateEntityAttributes for entity mutations. appendSlScoring is for belief nodes only.",
996
1026
  details: { nodeId: args.nodeId, nodeType: node.nodeType }
997
1027
  });
998
1028
  }
@@ -1002,7 +1032,7 @@ async function applyBeliefConfidenceChange(ctx, args) {
1002
1032
  status: 400,
1003
1033
  code: "MISSING_SCOPE",
1004
1034
  invariantCode: "belief.project_required",
1005
- suggestion: "Belief must have a projectId to modulate confidence.",
1035
+ suggestion: "Belief must have a projectId before SL scoring can be appended.",
1006
1036
  details: { nodeId: args.nodeId }
1007
1037
  });
1008
1038
  }
@@ -1025,7 +1055,7 @@ async function applyBeliefConfidenceChange(ctx, args) {
1025
1055
  status: 409,
1026
1056
  code: "CONFLICT",
1027
1057
  invariantCode: "belief.confidence_append_only",
1028
- suggestion: "Complete a worktree linked to this belief before recording confidence modulation.",
1058
+ suggestion: "Complete a worktree linked to this belief before recording SL scoring.",
1029
1059
  details: { nodeId: args.nodeId }
1030
1060
  });
1031
1061
  }
@@ -1280,18 +1310,6 @@ internalMutation({
1280
1310
  }
1281
1311
  });
1282
1312
 
1283
- // src/globalId.ts
1284
- function generateGlobalId() {
1285
- const bytes = new Uint8Array(16);
1286
- crypto.getRandomValues(bytes);
1287
- bytes[6] = bytes[6] & 15 | 64;
1288
- bytes[8] = bytes[8] & 63 | 128;
1289
- const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join(
1290
- ""
1291
- );
1292
- return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
1293
- }
1294
-
1295
1313
  // src/epistemicContracts.metrics.ts
1296
1314
  var ACTIVE_CONTRADICTION_STATUSES = /* @__PURE__ */ new Set([
1297
1315
  "unresolved",
@@ -1490,7 +1508,7 @@ async function evaluateBuiltInEvidentialContract(args) {
1490
1508
  observedValue: snapshot.value,
1491
1509
  operator: config.operator,
1492
1510
  threshold: config.threshold,
1493
- action: config.action ?? "modulate_confidence",
1511
+ action: config.action ?? "append_sl_scoring",
1494
1512
  actionParams: config.actionParams
1495
1513
  }
1496
1514
  };