@lucern/graph-primitives 1.0.31 → 1.0.33
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.
- package/dist/beliefEvidenceLinks.js.map +1 -1
- package/dist/beliefEvidenceLinks.operational.js.map +1 -1
- package/dist/contradictions.js +5 -5
- package/dist/contradictions.js.map +1 -1
- package/dist/entityBridge.js +2 -1
- package/dist/entityBridge.js.map +1 -1
- package/dist/entityLifecycle.js.map +1 -1
- package/dist/epistemicAnswers.js +1 -1
- package/dist/epistemicAnswers.js.map +1 -1
- package/dist/epistemicBeliefs.admin.js +2 -2
- package/dist/epistemicBeliefs.admin.js.map +1 -1
- package/dist/epistemicBeliefs.backfills.js +9 -5
- package/dist/epistemicBeliefs.backfills.js.map +1 -1
- package/dist/epistemicBeliefs.confidence.js +3 -5
- package/dist/epistemicBeliefs.confidence.js.map +1 -1
- package/dist/epistemicBeliefs.core.js +20 -30
- package/dist/epistemicBeliefs.core.js.map +1 -1
- package/dist/epistemicBeliefs.forkEvidence.js.map +1 -1
- package/dist/epistemicBeliefs.helpers.js +1 -1
- package/dist/epistemicBeliefs.helpers.js.map +1 -1
- package/dist/epistemicBeliefs.internal.js +15 -25
- package/dist/epistemicBeliefs.internal.js.map +1 -1
- package/dist/epistemicBeliefs.js +33 -43
- package/dist/epistemicBeliefs.js.map +1 -1
- package/dist/epistemicBeliefs.lifecycle.js +3 -5
- package/dist/epistemicBeliefs.lifecycle.js.map +1 -1
- package/dist/epistemicBeliefs.links.js +1 -1
- package/dist/epistemicBeliefs.links.js.map +1 -1
- package/dist/epistemicBeliefs.queries.js.map +1 -1
- package/dist/epistemicBeliefs.topicAnchor.js +12 -22
- package/dist/epistemicBeliefs.topicAnchor.js.map +1 -1
- package/dist/epistemicContracts.evaluators.js +3 -5
- package/dist/epistemicContracts.evaluators.js.map +1 -1
- package/dist/epistemicContracts.handlers.js +3 -6
- package/dist/epistemicContracts.handlers.js.map +1 -1
- package/dist/epistemicContracts.js +3 -6
- package/dist/epistemicContracts.js.map +1 -1
- package/dist/epistemicEdgeCreation.js.map +1 -1
- package/dist/epistemicEdges.handlers.js.map +1 -1
- package/dist/epistemicEdges.js +6 -7
- package/dist/epistemicEdges.js.map +1 -1
- package/dist/epistemicEdges.mutations.js +3 -4
- package/dist/epistemicEdges.mutations.js.map +1 -1
- package/dist/epistemicEdges.queries.js +3 -3
- package/dist/epistemicEdges.queries.js.map +1 -1
- package/dist/epistemicEvidence.js +10 -10
- package/dist/epistemicEvidence.js.map +1 -1
- package/dist/epistemicEvidenceHelpers.js +1 -1
- package/dist/epistemicEvidenceHelpers.js.map +1 -1
- package/dist/epistemicEvidenceMutations.js +5 -5
- package/dist/epistemicEvidenceMutations.js.map +1 -1
- package/dist/epistemicEvidenceQueries.js +6 -6
- package/dist/epistemicEvidenceQueries.js.map +1 -1
- package/dist/epistemicHelpers.js +4 -4
- package/dist/epistemicHelpers.js.map +1 -1
- package/dist/epistemicInsert.js.map +1 -1
- package/dist/epistemicLayerRules.js +2 -2
- package/dist/epistemicLayerRules.js.map +1 -1
- package/dist/epistemicLinking.js.map +1 -1
- package/dist/epistemicNodeCreation.js +2 -2
- package/dist/epistemicNodeCreation.js.map +1 -1
- package/dist/epistemicNodes.internal.js +2 -3
- package/dist/epistemicNodes.internal.js.map +1 -1
- package/dist/epistemicNodes.js +10 -12
- package/dist/epistemicNodes.js.map +1 -1
- package/dist/epistemicNodes.mutations.js +3 -4
- package/dist/epistemicNodes.mutations.js.map +1 -1
- package/dist/epistemicNodes.queries.js +5 -5
- package/dist/epistemicNodes.queries.js.map +1 -1
- package/dist/epistemicQuestions.conviction.js +5 -5
- package/dist/epistemicQuestions.conviction.js.map +1 -1
- package/dist/epistemicQuestions.create.js +7 -7
- package/dist/epistemicQuestions.create.js.map +1 -1
- package/dist/epistemicQuestions.evidence.js +2 -2
- package/dist/epistemicQuestions.evidence.js.map +1 -1
- package/dist/epistemicQuestions.helpers.js +7 -4
- package/dist/epistemicQuestions.helpers.js.map +1 -1
- package/dist/epistemicQuestions.js +16 -13
- package/dist/epistemicQuestions.js.map +1 -1
- package/dist/epistemicQuestions.lifecycle.js.map +1 -1
- package/dist/epistemicQuestions.queries.js +2 -2
- package/dist/epistemicQuestions.queries.js.map +1 -1
- package/dist/epistemicQuestions.sprint.js +6 -3
- package/dist/epistemicQuestions.sprint.js.map +1 -1
- package/dist/epistemicQuestions.tail.js +2 -2
- package/dist/epistemicQuestions.tail.js.map +1 -1
- package/dist/epistemicSources.js.map +1 -1
- package/dist/index.js +88 -98
- package/dist/index.js.map +1 -1
- package/dist/proof-attestation.json +1 -1
- package/dist/questionEvidenceLinks.js +3 -2
- package/dist/questionEvidenceLinks.js.map +1 -1
- package/package.json +4 -4
package/dist/epistemicBeliefs.js
CHANGED
|
@@ -8,9 +8,9 @@ import { getCurrentUserId } from '@lucern/access-control/auth';
|
|
|
8
8
|
import { throwStructuredMutationError } from '@lucern/access-control/structuredMutationError';
|
|
9
9
|
import { normalizeTupleContradictionPolicy, mkOpinion, createInheritedContractRecord, readOpinionFromRecord, confidenceFromSL, conditionalDeduction, project, dampedDependencyCascade, trustDiscount, applyNegativeSupport, cumulativeFusion, applyNegativeEvidence, detectTupleContradiction, evaluateTupleContradictionTransition, hasProjectedOpinionChanged } from '@lucern/confidence';
|
|
10
10
|
import { isNodeType, getLayerForNodeType } from '@lucern/contracts/schema-helpers/spine/tables/epistemicNodes';
|
|
11
|
+
import { generateUuidV7, generateGlobalId, assertUuidV7Identity, assertStorageEdgeVocabulary, isUuidV7, assertUuidShapedEdgeEndpoint } from '@lucern/contracts/ids';
|
|
11
12
|
import { assertSchemaEnumValue } from '@lucern/contracts/schema-helpers/enumValidation';
|
|
12
13
|
import { assertEdgePolicyAllowed, edgePolicyManifest } from '@lucern/contracts';
|
|
13
|
-
import { generateGlobalId, assertUuidV7Identity, generateUuidV7, assertStorageEdgeVocabulary, 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 (!
|
|
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 (!
|
|
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) :
|
|
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
|
|
2467
|
+
const scopeTopicId = args.topicId;
|
|
2468
2468
|
if (!scopeTopicId) {
|
|
2469
2469
|
return {
|
|
2470
2470
|
dryRun,
|
|
@@ -2498,13 +2498,16 @@ var backfillScoredBeliefEdges = internalMutation({
|
|
|
2498
2498
|
if (!theme.globalId) {
|
|
2499
2499
|
continue;
|
|
2500
2500
|
}
|
|
2501
|
-
const
|
|
2502
|
-
|
|
2501
|
+
const existing = await ctx.db.query("epistemicEdges").withIndex(
|
|
2502
|
+
"by_from_to",
|
|
2503
|
+
(q) => q.eq("fromNodeId", belief.globalId).eq("toNodeId", theme.globalId)
|
|
2504
|
+
).filter((q) => q.eq(q.field("edgeType"), "relates_to_thesis")).first();
|
|
2503
2505
|
if (existing) {
|
|
2504
2506
|
skipped++;
|
|
2505
2507
|
continue;
|
|
2506
2508
|
}
|
|
2507
2509
|
if (!dryRun) {
|
|
2510
|
+
const edgeGlobalId = generateUuidV7();
|
|
2508
2511
|
await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {
|
|
2509
2512
|
globalId: edgeGlobalId,
|
|
2510
2513
|
fromGlobalId: belief.globalId,
|
|
@@ -3425,16 +3428,13 @@ async function scheduleFirstScoringThemeEdges(ctx, args, node, state) {
|
|
|
3425
3428
|
if (!state.isFirstScoring) {
|
|
3426
3429
|
return;
|
|
3427
3430
|
}
|
|
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();
|
|
3431
|
+
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
3432
|
for (const theme of themeNodes) {
|
|
3433
3433
|
if (!(theme.globalId && node.globalId)) {
|
|
3434
3434
|
continue;
|
|
3435
3435
|
}
|
|
3436
3436
|
await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {
|
|
3437
|
-
globalId:
|
|
3437
|
+
globalId: generateUuidV7(),
|
|
3438
3438
|
fromGlobalId: node.globalId,
|
|
3439
3439
|
toGlobalId: theme.globalId,
|
|
3440
3440
|
edgeType: "relates_to_thesis",
|
|
@@ -3789,36 +3789,26 @@ async function insertEpistemicEdge(ctx, doc) {
|
|
|
3789
3789
|
function cleanString(value) {
|
|
3790
3790
|
return typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
|
|
3791
3791
|
}
|
|
3792
|
-
function
|
|
3792
|
+
function requireTopicGlobalId(topicRef) {
|
|
3793
3793
|
const normalized = topicRef.trim();
|
|
3794
|
-
if (!normalized) {
|
|
3795
|
-
|
|
3796
|
-
|
|
3797
|
-
|
|
3798
|
-
if (normalized.startsWith("top_")) {
|
|
3799
|
-
candidates.push(normalized.slice(4));
|
|
3794
|
+
if (!(normalized && isUuidV7(normalized))) {
|
|
3795
|
+
throw new Error(
|
|
3796
|
+
"Belief creation topic anchors must be UUIDv7 epistemicNodes.globalId values."
|
|
3797
|
+
);
|
|
3800
3798
|
}
|
|
3801
|
-
return
|
|
3799
|
+
return normalized;
|
|
3802
3800
|
}
|
|
3803
3801
|
function readTopicNodeRef(args) {
|
|
3804
3802
|
return cleanString(args.topicGlobalId) ?? cleanString(args.topicNodeId) ?? cleanString(args.topicId);
|
|
3805
3803
|
}
|
|
3806
3804
|
async function resolveRequiredTopicAnchor(ctx, topicRef) {
|
|
3807
|
-
|
|
3808
|
-
|
|
3809
|
-
|
|
3810
|
-
|
|
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
|
-
}
|
|
3805
|
+
const topicGlobalId = requireTopicGlobalId(topicRef);
|
|
3806
|
+
const byGlobalId = await ctx.db.query("epistemicNodes").withIndex("by_globalId", (q) => q.eq("globalId", topicGlobalId)).first();
|
|
3807
|
+
if (byGlobalId?.nodeType === "topic" && cleanString(byGlobalId.globalId)) {
|
|
3808
|
+
return byGlobalId;
|
|
3819
3809
|
}
|
|
3820
3810
|
throw new Error(
|
|
3821
|
-
"Belief creation requires
|
|
3811
|
+
"Belief creation requires a UUIDv7 topicGlobalId for a topic node in epistemicNodes. Legacy topics-table IDs are not valid belief anchors."
|
|
3822
3812
|
);
|
|
3823
3813
|
}
|
|
3824
3814
|
function scopeFromTopicAnchor(topicNode) {
|
|
@@ -4329,7 +4319,7 @@ var create = mutation({
|
|
|
4329
4319
|
projectId: scope.projectId,
|
|
4330
4320
|
topicId: String(scope.topicId)
|
|
4331
4321
|
});
|
|
4332
|
-
if (scope.
|
|
4322
|
+
if (scope.topicId) {
|
|
4333
4323
|
await ctx.scheduler.runAfter(
|
|
4334
4324
|
0,
|
|
4335
4325
|
"embeddingActions:generateEpistemicNodeEmbedding",
|
|
@@ -4348,7 +4338,7 @@ Rationale: ${args.rationale}` : args.formulation
|
|
|
4348
4338
|
}
|
|
4349
4339
|
);
|
|
4350
4340
|
}
|
|
4351
|
-
if (scope.
|
|
4341
|
+
if (scope.topicId) {
|
|
4352
4342
|
await ctx.scheduler.runAfter(
|
|
4353
4343
|
2e3,
|
|
4354
4344
|
// 2 second delay
|
|
@@ -4361,7 +4351,7 @@ Rationale: ${args.rationale}` : args.formulation
|
|
|
4361
4351
|
}
|
|
4362
4352
|
);
|
|
4363
4353
|
}
|
|
4364
|
-
if (pillar === "other" &&
|
|
4354
|
+
if (pillar === "other" && scope.topicId) {
|
|
4365
4355
|
await ctx.scheduler.runAfter(
|
|
4366
4356
|
2500,
|
|
4367
4357
|
"beliefCategorization:autoCategorizeBelief",
|
|
@@ -4372,7 +4362,7 @@ Rationale: ${args.rationale}` : args.formulation
|
|
|
4372
4362
|
}
|
|
4373
4363
|
);
|
|
4374
4364
|
}
|
|
4375
|
-
if (scope.
|
|
4365
|
+
if (scope.topicId) {
|
|
4376
4366
|
await ctx.scheduler.runAfter(
|
|
4377
4367
|
3e3,
|
|
4378
4368
|
// 3 second delay — after entity extraction
|
|
@@ -4640,7 +4630,7 @@ var getByProject = query({
|
|
|
4640
4630
|
},
|
|
4641
4631
|
returns: permissiveReturn,
|
|
4642
4632
|
handler: async (ctx, args) => {
|
|
4643
|
-
if (!
|
|
4633
|
+
if (!args.topicId) {
|
|
4644
4634
|
return [];
|
|
4645
4635
|
}
|
|
4646
4636
|
const pageSize = clampBeliefLimit(args.limit);
|
|
@@ -4663,7 +4653,7 @@ var getByProject = query({
|
|
|
4663
4653
|
return [];
|
|
4664
4654
|
}
|
|
4665
4655
|
if (args.userId) {
|
|
4666
|
-
const scopeId = scope.topicId ? String(scope.topicId) :
|
|
4656
|
+
const scopeId = scope.topicId ? String(scope.topicId) : void 0;
|
|
4667
4657
|
if (!scopeId) {
|
|
4668
4658
|
return [];
|
|
4669
4659
|
}
|
|
@@ -4820,7 +4810,7 @@ var forkBelief = mutation({
|
|
|
4820
4810
|
supersededBy: newNodeId,
|
|
4821
4811
|
updatedAt: now,
|
|
4822
4812
|
metadata: {
|
|
4823
|
-
...metadata
|
|
4813
|
+
...metadata,
|
|
4824
4814
|
status: "superseded",
|
|
4825
4815
|
beliefStatus: "superseded",
|
|
4826
4816
|
epistemicStatus: "superseded",
|
|
@@ -4900,7 +4890,7 @@ var forkBelief = mutation({
|
|
|
4900
4890
|
projectId: parent.projectId,
|
|
4901
4891
|
topicId: parent.topicId
|
|
4902
4892
|
});
|
|
4903
|
-
if (parent.
|
|
4893
|
+
if (parent.topicId) {
|
|
4904
4894
|
const inheritedPillar = normalizePillar(
|
|
4905
4895
|
String(metadata?.pillar || metadata?.topic || "")
|
|
4906
4896
|
);
|
|
@@ -5306,7 +5296,7 @@ async function insertInternalBeliefAudit(ctx, args) {
|
|
|
5306
5296
|
});
|
|
5307
5297
|
}
|
|
5308
5298
|
async function scheduleInternalBeliefEmbedding(ctx, args) {
|
|
5309
|
-
if (!
|
|
5299
|
+
if (!args.scope.topicId) {
|
|
5310
5300
|
return;
|
|
5311
5301
|
}
|
|
5312
5302
|
await ctx.scheduler.runAfter(0, EMBEDDING_GENERATION_ACTION, {
|
|
@@ -5334,7 +5324,7 @@ function numericRequestedConfidence(confidence) {
|
|
|
5334
5324
|
return 0.5;
|
|
5335
5325
|
}
|
|
5336
5326
|
async function scheduleInternalBeliefCategorization(ctx, args) {
|
|
5337
|
-
if (normalizePillar(args.args.pillar || args.args.topic) !== "other" || !
|
|
5327
|
+
if (normalizePillar(args.args.pillar || args.args.topic) !== "other" || !args.scope.topicId) {
|
|
5338
5328
|
return;
|
|
5339
5329
|
}
|
|
5340
5330
|
await ctx.scheduler.runAfter(2500, BELIEF_CATEGORIZATION_ACTION, {
|