@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.
- package/dist/beliefDecay.js +46 -0
- package/dist/beliefDecay.js.map +1 -1
- package/dist/beliefEvidenceLinks.js +87 -5
- package/dist/beliefEvidenceLinks.js.map +1 -1
- package/dist/beliefEvidenceLinks.operational.js +41 -5
- package/dist/beliefEvidenceLinks.operational.js.map +1 -1
- package/dist/contradictions.js +46 -0
- package/dist/contradictions.js.map +1 -1
- package/dist/edgeValidation.js +66 -1
- package/dist/edgeValidation.js.map +1 -1
- package/dist/entityBridge.js +66 -1
- package/dist/entityBridge.js.map +1 -1
- package/dist/entityLifecycle.js +90 -5
- package/dist/entityLifecycle.js.map +1 -1
- package/dist/epistemicAnswers.js +64 -11
- package/dist/epistemicAnswers.js.map +1 -1
- package/dist/epistemicBeliefs.admin.js +46 -0
- package/dist/epistemicBeliefs.admin.js.map +1 -1
- package/dist/epistemicBeliefs.backfills.js +46 -0
- package/dist/epistemicBeliefs.backfills.js.map +1 -1
- package/dist/epistemicBeliefs.confidence.d.ts +1 -1
- package/dist/epistemicBeliefs.confidence.js +53 -6
- package/dist/epistemicBeliefs.confidence.js.map +1 -1
- package/dist/epistemicBeliefs.core.js +91 -11
- package/dist/epistemicBeliefs.core.js.map +1 -1
- package/dist/epistemicBeliefs.d.ts +1 -1
- package/dist/epistemicBeliefs.forkEvidence.js.map +1 -1
- package/dist/epistemicBeliefs.helpers.d.ts +2 -2
- package/dist/epistemicBeliefs.helpers.js +46 -0
- package/dist/epistemicBeliefs.helpers.js.map +1 -1
- package/dist/epistemicBeliefs.internal.js +90 -10
- package/dist/epistemicBeliefs.internal.js.map +1 -1
- package/dist/epistemicBeliefs.js +103 -22
- package/dist/epistemicBeliefs.js.map +1 -1
- package/dist/epistemicBeliefs.lifecycle.js +53 -6
- package/dist/epistemicBeliefs.lifecycle.js.map +1 -1
- package/dist/epistemicBeliefs.links.js +85 -4
- package/dist/epistemicBeliefs.links.js.map +1 -1
- package/dist/epistemicBeliefs.topicAnchor.js +39 -8
- package/dist/epistemicBeliefs.topicAnchor.js.map +1 -1
- package/dist/epistemicContracts.evaluators.js +53 -6
- package/dist/epistemicContracts.evaluators.js.map +1 -1
- package/dist/epistemicContracts.handlers.js +54 -10
- package/dist/epistemicContracts.handlers.js.map +1 -1
- package/dist/epistemicContracts.js +54 -10
- package/dist/epistemicContracts.js.map +1 -1
- package/dist/epistemicEdges.d.ts +1 -1
- package/dist/epistemicEdges.handlers.js +48 -3
- package/dist/epistemicEdges.handlers.js.map +1 -1
- package/dist/epistemicEdges.helpers.d.ts +3 -3
- package/dist/epistemicEdges.js +162 -4
- package/dist/epistemicEdges.js.map +1 -1
- package/dist/epistemicEdges.mutations.js +112 -1
- package/dist/epistemicEdges.mutations.js.map +1 -1
- package/dist/epistemicEdges.queries.js +46 -0
- package/dist/epistemicEdges.queries.js.map +1 -1
- package/dist/epistemicEdges.types.d.ts +1 -1
- package/dist/epistemicEvidence.d.ts +1 -1
- package/dist/epistemicEvidence.js +168 -14
- package/dist/epistemicEvidence.js.map +1 -1
- package/dist/epistemicEvidenceHelpers.d.ts +1 -1
- package/dist/epistemicEvidenceHelpers.js +46 -0
- package/dist/epistemicEvidenceHelpers.js.map +1 -1
- package/dist/epistemicEvidenceMutations.js +168 -14
- package/dist/epistemicEvidenceMutations.js.map +1 -1
- package/dist/epistemicEvidenceQueries.js +46 -0
- package/dist/epistemicEvidenceQueries.js.map +1 -1
- package/dist/epistemicHelpers.js +11 -6
- package/dist/epistemicHelpers.js.map +1 -1
- package/dist/epistemicInsert.d.ts +8 -0
- package/dist/epistemicInsert.js +45 -0
- package/dist/epistemicInsert.js.map +1 -0
- package/dist/epistemicNodeCreation.js +11 -6
- package/dist/epistemicNodeCreation.js.map +1 -1
- package/dist/epistemicNodes.helpers.d.ts +1 -1
- package/dist/epistemicNodes.internal.js +53 -1
- package/dist/epistemicNodes.internal.js.map +1 -1
- package/dist/epistemicNodes.js +56 -4
- package/dist/epistemicNodes.js.map +1 -1
- package/dist/epistemicNodes.mutations.js +55 -3
- package/dist/epistemicNodes.mutations.js.map +1 -1
- package/dist/epistemicNodes.queries.js +46 -0
- package/dist/epistemicNodes.queries.js.map +1 -1
- package/dist/epistemicNodes.validators.d.ts +1 -1
- package/dist/epistemicQuestions.conviction.js +46 -0
- package/dist/epistemicQuestions.conviction.js.map +1 -1
- package/dist/epistemicQuestions.create.js +58 -7
- package/dist/epistemicQuestions.create.js.map +1 -1
- package/dist/epistemicQuestions.d.ts +1 -1
- package/dist/epistemicQuestions.evidence.js +53 -2
- package/dist/epistemicQuestions.evidence.js.map +1 -1
- package/dist/epistemicQuestions.helpers.d.ts +1 -1
- package/dist/epistemicQuestions.helpers.js +46 -0
- package/dist/epistemicQuestions.helpers.js.map +1 -1
- package/dist/epistemicQuestions.js +60 -9
- package/dist/epistemicQuestions.js.map +1 -1
- package/dist/epistemicQuestions.lifecycle.js +46 -0
- package/dist/epistemicQuestions.lifecycle.js.map +1 -1
- package/dist/epistemicQuestions.queries.js +46 -0
- package/dist/epistemicQuestions.queries.js.map +1 -1
- package/dist/epistemicQuestions.sprint.js +46 -0
- package/dist/epistemicQuestions.sprint.js.map +1 -1
- package/dist/epistemicQuestions.tail.js +53 -2
- package/dist/epistemicQuestions.tail.js.map +1 -1
- package/dist/epistemicSources.js +53 -2
- package/dist/epistemicSources.js.map +1 -1
- package/dist/helpers.js +66 -1
- package/dist/helpers.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +304 -76
- package/dist/index.js.map +1 -1
- package/dist/proof-attestation.json +1 -1
- package/dist/questionEvidenceLinks.js +46 -0
- package/dist/questionEvidenceLinks.js.map +1 -1
- package/dist/scopeResolverCompat.d.ts +1 -1
- package/dist/scopeResolverCompat.js +46 -0
- package/dist/scopeResolverCompat.js.map +1 -1
- package/dist/{topicScope-By_zp4tt.d.ts → topicScope-7zhyeGl7.d.ts} +1 -1
- package/dist/topicScope.d.ts +1 -1
- package/dist/topicScope.js +46 -0
- package/dist/topicScope.js.map +1 -1
- package/dist/workflowBridge.js +46 -0
- package/dist/workflowBridge.js.map +1 -1
- package/dist/workspaceIsolation.d.ts +1 -1
- package/dist/workspaceIsolation.js +46 -0
- package/dist/workspaceIsolation.js.map +1 -1
- package/package.json +4 -4
|
@@ -7,7 +7,8 @@ import { normalizeTupleContradictionPolicy, createInheritedContractRecord, confi
|
|
|
7
7
|
import '@lucern/access-control/audience';
|
|
8
8
|
import { getCurrentUserId } from '@lucern/access-control/auth';
|
|
9
9
|
import { isNodeType, getLayerForNodeType } from '@lucern/contracts/schema-helpers/spine/tables/epistemicNodes';
|
|
10
|
-
import { generateGlobalId, generateUuidV7 } from '@lucern/contracts/ids';
|
|
10
|
+
import { generateGlobalId, assertUuidV7Identity, generateUuidV7, assertStorageEdgeVocabulary, assertCanonicalEdgeEndpoint } from '@lucern/contracts/ids';
|
|
11
|
+
import { assertEdgePolicyAllowed, edgePolicyManifest } from '@lucern/contracts';
|
|
11
12
|
|
|
12
13
|
// src/epistemicBeliefs.core.ts
|
|
13
14
|
|
|
@@ -466,6 +467,35 @@ function resolveGraphPrimitivesAppResolvers(_ctx) {
|
|
|
466
467
|
};
|
|
467
468
|
}
|
|
468
469
|
var LEGACY_SCOPE_FIELD2 = "graphScopeProjectId";
|
|
470
|
+
async function resolveTopicNodeScopeOrNull(ctx, ref) {
|
|
471
|
+
if (!ctx?.db || typeof ctx.db.query !== "function") {
|
|
472
|
+
return null;
|
|
473
|
+
}
|
|
474
|
+
let node = null;
|
|
475
|
+
try {
|
|
476
|
+
const byGlobalId = await ctx.db.query("epistemicNodes").withIndex("by_globalId", (q) => q.eq("globalId", ref)).first();
|
|
477
|
+
if (byGlobalId && byGlobalId.nodeType === "topic") {
|
|
478
|
+
node = byGlobalId;
|
|
479
|
+
}
|
|
480
|
+
} catch (error) {
|
|
481
|
+
debugGraphPrimitiveFallback(
|
|
482
|
+
"[topicScope] topic-node scope lookup by globalId failed",
|
|
483
|
+
{ error, ref }
|
|
484
|
+
);
|
|
485
|
+
}
|
|
486
|
+
if (!node) {
|
|
487
|
+
return null;
|
|
488
|
+
}
|
|
489
|
+
const scopeKey = normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);
|
|
490
|
+
if (!scopeKey) {
|
|
491
|
+
return null;
|
|
492
|
+
}
|
|
493
|
+
return {
|
|
494
|
+
topicId: scopeKey,
|
|
495
|
+
projectId: asMappedProjectId(node),
|
|
496
|
+
source: "topic_node"
|
|
497
|
+
};
|
|
498
|
+
}
|
|
469
499
|
function asMappedProjectId(topic) {
|
|
470
500
|
if (!topic) {
|
|
471
501
|
return;
|
|
@@ -606,6 +636,13 @@ async function resolveTopicProjectScope(ctx, args) {
|
|
|
606
636
|
) ?? null;
|
|
607
637
|
}
|
|
608
638
|
if (!topic) {
|
|
639
|
+
const nodeScope = await resolveTopicNodeScopeOrNull(
|
|
640
|
+
ctx,
|
|
641
|
+
String(args.topicId)
|
|
642
|
+
);
|
|
643
|
+
if (nodeScope) {
|
|
644
|
+
return nodeScope;
|
|
645
|
+
}
|
|
609
646
|
throw new Error(`Topic not found: ${String(args.topicId)}`);
|
|
610
647
|
}
|
|
611
648
|
const inherited = await resolveInheritedWorkspaceScope(ctx, topic);
|
|
@@ -676,6 +713,16 @@ async function resolveTopicProjectScope(ctx, args) {
|
|
|
676
713
|
source: "project_mapped_topic"
|
|
677
714
|
};
|
|
678
715
|
}
|
|
716
|
+
const nodeScope = await resolveTopicNodeScopeOrNull(
|
|
717
|
+
ctx,
|
|
718
|
+
String(args.projectId)
|
|
719
|
+
);
|
|
720
|
+
if (nodeScope) {
|
|
721
|
+
return {
|
|
722
|
+
...nodeScope,
|
|
723
|
+
projectId: nodeScope.projectId ?? String(args.projectId)
|
|
724
|
+
};
|
|
725
|
+
}
|
|
679
726
|
throw new Error(
|
|
680
727
|
`Legacy project scope ${String(args.projectId)} has no mapped topic.`
|
|
681
728
|
);
|
|
@@ -1023,6 +1070,43 @@ async function resolveForkTriggerEvidence(ctx, args) {
|
|
|
1023
1070
|
}
|
|
1024
1071
|
return { evidenceNodeId: args.triggeringEvidenceId, relation };
|
|
1025
1072
|
}
|
|
1073
|
+
async function insertEpistemicNode(ctx, doc) {
|
|
1074
|
+
assertUuidV7Identity("epistemicNodes", doc.globalId);
|
|
1075
|
+
return ctx.db.insert("epistemicNodes", doc);
|
|
1076
|
+
}
|
|
1077
|
+
async function insertEpistemicEdge(ctx, doc) {
|
|
1078
|
+
assertUuidV7Identity("epistemicEdges", doc.globalId);
|
|
1079
|
+
assertStorageEdgeVocabulary(doc.edgeType);
|
|
1080
|
+
if (!doc.fromNodeId || typeof doc.fromNodeId !== "string") {
|
|
1081
|
+
throw new Error(
|
|
1082
|
+
"edge_endpoint_missing: epistemicEdges insert requires a non-empty fromNodeId"
|
|
1083
|
+
);
|
|
1084
|
+
}
|
|
1085
|
+
if (!doc.toNodeId || typeof doc.toNodeId !== "string") {
|
|
1086
|
+
throw new Error(
|
|
1087
|
+
"edge_endpoint_missing: epistemicEdges insert requires a non-empty toNodeId"
|
|
1088
|
+
);
|
|
1089
|
+
}
|
|
1090
|
+
assertCanonicalEdgeEndpoint("fromNodeId", doc.fromNodeId);
|
|
1091
|
+
assertCanonicalEdgeEndpoint("toNodeId", doc.toNodeId);
|
|
1092
|
+
if (doc.fromNodeType && doc.toNodeType && doc.edgeType !== "extracted_from") {
|
|
1093
|
+
assertEdgePolicyAllowed(
|
|
1094
|
+
edgePolicyManifest,
|
|
1095
|
+
doc.edgeType,
|
|
1096
|
+
{
|
|
1097
|
+
kind: "epistemic_node",
|
|
1098
|
+
nodeId: doc.fromNodeId,
|
|
1099
|
+
nodeType: doc.fromNodeType
|
|
1100
|
+
},
|
|
1101
|
+
{
|
|
1102
|
+
kind: "epistemic_node",
|
|
1103
|
+
nodeId: doc.toNodeId,
|
|
1104
|
+
nodeType: doc.toNodeType
|
|
1105
|
+
}
|
|
1106
|
+
);
|
|
1107
|
+
}
|
|
1108
|
+
return ctx.db.insert("epistemicEdges", doc);
|
|
1109
|
+
}
|
|
1026
1110
|
|
|
1027
1111
|
// src/epistemicBeliefs.topicAnchor.ts
|
|
1028
1112
|
function cleanString(value) {
|
|
@@ -1074,18 +1158,15 @@ async function createRequiredBeliefTopicEdge(ctx, args) {
|
|
|
1074
1158
|
const now = Date.now();
|
|
1075
1159
|
const existingEdges = await ctx.db.query("epistemicEdges").withIndex(
|
|
1076
1160
|
"by_from_to",
|
|
1077
|
-
(q) => q.eq("fromNodeId",
|
|
1078
|
-
"toNodeId",
|
|
1079
|
-
String(args.topicNode._id)
|
|
1080
|
-
)
|
|
1161
|
+
(q) => q.eq("fromNodeId", args.beliefGlobalId).eq("toNodeId", topicGlobalId)
|
|
1081
1162
|
).collect();
|
|
1082
1163
|
const existing = existingEdges.find((edge) => edge.edgeType === "belongs_to");
|
|
1083
1164
|
const edgeGlobalId = cleanString(existing?.globalId) ?? generateUuidV7();
|
|
1084
1165
|
if (!existing) {
|
|
1085
|
-
await ctx
|
|
1166
|
+
await insertEpistemicEdge(ctx, {
|
|
1086
1167
|
globalId: edgeGlobalId,
|
|
1087
|
-
fromNodeId:
|
|
1088
|
-
toNodeId:
|
|
1168
|
+
fromNodeId: args.beliefGlobalId,
|
|
1169
|
+
toNodeId: topicGlobalId,
|
|
1089
1170
|
sourceGlobalId: args.beliefGlobalId,
|
|
1090
1171
|
targetGlobalId: topicGlobalId,
|
|
1091
1172
|
edgeType: "belongs_to",
|
|
@@ -1264,7 +1345,7 @@ var create = mutation({
|
|
|
1264
1345
|
const pillar = normalizePillar(args.pillar);
|
|
1265
1346
|
const additionalMeta = args.metadata || {};
|
|
1266
1347
|
const beliefGlobalId = generateGlobalId();
|
|
1267
|
-
const nodeId = await ctx
|
|
1348
|
+
const nodeId = await insertEpistemicNode(ctx, {
|
|
1268
1349
|
globalId: beliefGlobalId,
|
|
1269
1350
|
nodeType: "belief",
|
|
1270
1351
|
epistemicLayer: "L3",
|
|
@@ -1322,7 +1403,6 @@ var create = mutation({
|
|
|
1322
1403
|
})
|
|
1323
1404
|
);
|
|
1324
1405
|
await createRequiredBeliefTopicEdge(ctx, {
|
|
1325
|
-
beliefNodeId: nodeId,
|
|
1326
1406
|
beliefGlobalId,
|
|
1327
1407
|
topicNode,
|
|
1328
1408
|
createdBy: authenticatedUserId
|
|
@@ -1737,7 +1817,7 @@ var forkBelief = mutation({
|
|
|
1737
1817
|
});
|
|
1738
1818
|
}
|
|
1739
1819
|
const newBeliefGlobalId = generateGlobalId();
|
|
1740
|
-
const newNodeId = await ctx
|
|
1820
|
+
const newNodeId = await insertEpistemicNode(ctx, {
|
|
1741
1821
|
globalId: newBeliefGlobalId,
|
|
1742
1822
|
nodeType: "belief",
|
|
1743
1823
|
epistemicLayer: "L3",
|