@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
package/dist/epistemicBeliefs.js
CHANGED
|
@@ -7,7 +7,8 @@ import { componentsGeneric, anyApi, internalMutationGeneric, mutationGeneric, qu
|
|
|
7
7
|
import { isNodeType, getLayerForNodeType } from '@lucern/contracts/schema-helpers/spine/tables/epistemicNodes';
|
|
8
8
|
import { permissiveReturn } from '@lucern/contracts/schema-helpers/validators';
|
|
9
9
|
import { assertSchemaEnumValue } from '@lucern/contracts/schema-helpers/enumValidation';
|
|
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
|
import { listAudienceRegistryRows } from '@lucern/access-control/audienceRegistry';
|
|
12
13
|
|
|
13
14
|
// src/epistemicBeliefs.helpers.ts
|
|
@@ -479,6 +480,35 @@ function resolveGraphPrimitivesAppResolvers(_ctx) {
|
|
|
479
480
|
};
|
|
480
481
|
}
|
|
481
482
|
var LEGACY_SCOPE_FIELD2 = "graphScopeProjectId";
|
|
483
|
+
async function resolveTopicNodeScopeOrNull(ctx, ref) {
|
|
484
|
+
if (!ctx?.db || typeof ctx.db.query !== "function") {
|
|
485
|
+
return null;
|
|
486
|
+
}
|
|
487
|
+
let node = null;
|
|
488
|
+
try {
|
|
489
|
+
const byGlobalId = await ctx.db.query("epistemicNodes").withIndex("by_globalId", (q) => q.eq("globalId", ref)).first();
|
|
490
|
+
if (byGlobalId && byGlobalId.nodeType === "topic") {
|
|
491
|
+
node = byGlobalId;
|
|
492
|
+
}
|
|
493
|
+
} catch (error) {
|
|
494
|
+
debugGraphPrimitiveFallback(
|
|
495
|
+
"[topicScope] topic-node scope lookup by globalId failed",
|
|
496
|
+
{ error, ref }
|
|
497
|
+
);
|
|
498
|
+
}
|
|
499
|
+
if (!node) {
|
|
500
|
+
return null;
|
|
501
|
+
}
|
|
502
|
+
const scopeKey = normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);
|
|
503
|
+
if (!scopeKey) {
|
|
504
|
+
return null;
|
|
505
|
+
}
|
|
506
|
+
return {
|
|
507
|
+
topicId: scopeKey,
|
|
508
|
+
projectId: asMappedProjectId(node),
|
|
509
|
+
source: "topic_node"
|
|
510
|
+
};
|
|
511
|
+
}
|
|
482
512
|
function asMappedProjectId(topic) {
|
|
483
513
|
if (!topic) {
|
|
484
514
|
return;
|
|
@@ -619,6 +649,13 @@ async function resolveTopicProjectScope(ctx, args) {
|
|
|
619
649
|
) ?? null;
|
|
620
650
|
}
|
|
621
651
|
if (!topic) {
|
|
652
|
+
const nodeScope = await resolveTopicNodeScopeOrNull(
|
|
653
|
+
ctx,
|
|
654
|
+
String(args.topicId)
|
|
655
|
+
);
|
|
656
|
+
if (nodeScope) {
|
|
657
|
+
return nodeScope;
|
|
658
|
+
}
|
|
622
659
|
throw new Error(`Topic not found: ${String(args.topicId)}`);
|
|
623
660
|
}
|
|
624
661
|
const inherited = await resolveInheritedWorkspaceScope(ctx, topic);
|
|
@@ -689,6 +726,16 @@ async function resolveTopicProjectScope(ctx, args) {
|
|
|
689
726
|
source: "project_mapped_topic"
|
|
690
727
|
};
|
|
691
728
|
}
|
|
729
|
+
const nodeScope = await resolveTopicNodeScopeOrNull(
|
|
730
|
+
ctx,
|
|
731
|
+
String(args.projectId)
|
|
732
|
+
);
|
|
733
|
+
if (nodeScope) {
|
|
734
|
+
return {
|
|
735
|
+
...nodeScope,
|
|
736
|
+
projectId: nodeScope.projectId ?? String(args.projectId)
|
|
737
|
+
};
|
|
738
|
+
}
|
|
692
739
|
throw new Error(
|
|
693
740
|
`Legacy project scope ${String(args.projectId)} has no mapped topic.`
|
|
694
741
|
);
|
|
@@ -1870,14 +1917,14 @@ async function applyBeliefConfidenceChange(ctx, args) {
|
|
|
1870
1917
|
beliefConfidenceId
|
|
1871
1918
|
};
|
|
1872
1919
|
}
|
|
1873
|
-
function
|
|
1920
|
+
function propagationPressureLabel(edgeType, weight) {
|
|
1874
1921
|
if (edgeType === "contradicts" || edgeType === "refutes") {
|
|
1875
|
-
return "
|
|
1922
|
+
return "contradictory";
|
|
1876
1923
|
}
|
|
1877
1924
|
if ((edgeType === "supports" || edgeType === "informs") && weight < 0) {
|
|
1878
|
-
return "
|
|
1925
|
+
return "contradictory";
|
|
1879
1926
|
}
|
|
1880
|
-
return "
|
|
1927
|
+
return "supportive";
|
|
1881
1928
|
}
|
|
1882
1929
|
var propagateConfidenceChange = internalMutation({
|
|
1883
1930
|
args: {
|
|
@@ -1914,14 +1961,15 @@ var propagateConfidenceChange = internalMutation({
|
|
|
1914
1961
|
getNode: async (nodeId) => await ctx.db.get(nodeId)
|
|
1915
1962
|
});
|
|
1916
1963
|
for (const dispatch of dispatches) {
|
|
1964
|
+
const pressureLabel = propagationPressureLabel(dispatch.edgeType, dispatch.weight);
|
|
1917
1965
|
await applyBeliefConfidenceChange(ctx, {
|
|
1918
1966
|
nodeId: dispatch.targetNodeId,
|
|
1919
1967
|
belief: dispatch.opinion.b,
|
|
1920
1968
|
disbelief: dispatch.opinion.d,
|
|
1921
1969
|
uncertainty: dispatch.opinion.u,
|
|
1922
1970
|
baseRate: dispatch.opinion.a,
|
|
1923
|
-
trigger:
|
|
1924
|
-
rationale: `SL propagation via ${dispatch.edgeType} edge: ${dispatch.rationale}`,
|
|
1971
|
+
trigger: "propagation",
|
|
1972
|
+
rationale: `SL propagation via ${dispatch.edgeType} edge (pressure: ${pressureLabel}): ${dispatch.rationale}`,
|
|
1925
1973
|
authenticatedUserId: args.userId,
|
|
1926
1974
|
slOperator: dispatch.operator
|
|
1927
1975
|
});
|
|
@@ -2033,6 +2081,43 @@ async function resolveForkTriggerEvidence(ctx, args) {
|
|
|
2033
2081
|
}
|
|
2034
2082
|
return { evidenceNodeId: args.triggeringEvidenceId, relation };
|
|
2035
2083
|
}
|
|
2084
|
+
async function insertEpistemicNode(ctx, doc) {
|
|
2085
|
+
assertUuidV7Identity("epistemicNodes", doc.globalId);
|
|
2086
|
+
return ctx.db.insert("epistemicNodes", doc);
|
|
2087
|
+
}
|
|
2088
|
+
async function insertEpistemicEdge(ctx, doc) {
|
|
2089
|
+
assertUuidV7Identity("epistemicEdges", doc.globalId);
|
|
2090
|
+
assertStorageEdgeVocabulary(doc.edgeType);
|
|
2091
|
+
if (!doc.fromNodeId || typeof doc.fromNodeId !== "string") {
|
|
2092
|
+
throw new Error(
|
|
2093
|
+
"edge_endpoint_missing: epistemicEdges insert requires a non-empty fromNodeId"
|
|
2094
|
+
);
|
|
2095
|
+
}
|
|
2096
|
+
if (!doc.toNodeId || typeof doc.toNodeId !== "string") {
|
|
2097
|
+
throw new Error(
|
|
2098
|
+
"edge_endpoint_missing: epistemicEdges insert requires a non-empty toNodeId"
|
|
2099
|
+
);
|
|
2100
|
+
}
|
|
2101
|
+
assertCanonicalEdgeEndpoint("fromNodeId", doc.fromNodeId);
|
|
2102
|
+
assertCanonicalEdgeEndpoint("toNodeId", doc.toNodeId);
|
|
2103
|
+
if (doc.fromNodeType && doc.toNodeType && doc.edgeType !== "extracted_from") {
|
|
2104
|
+
assertEdgePolicyAllowed(
|
|
2105
|
+
edgePolicyManifest,
|
|
2106
|
+
doc.edgeType,
|
|
2107
|
+
{
|
|
2108
|
+
kind: "epistemic_node",
|
|
2109
|
+
nodeId: doc.fromNodeId,
|
|
2110
|
+
nodeType: doc.fromNodeType
|
|
2111
|
+
},
|
|
2112
|
+
{
|
|
2113
|
+
kind: "epistemic_node",
|
|
2114
|
+
nodeId: doc.toNodeId,
|
|
2115
|
+
nodeType: doc.toNodeType
|
|
2116
|
+
}
|
|
2117
|
+
);
|
|
2118
|
+
}
|
|
2119
|
+
return ctx.db.insert("epistemicEdges", doc);
|
|
2120
|
+
}
|
|
2036
2121
|
|
|
2037
2122
|
// src/epistemicBeliefs.topicAnchor.ts
|
|
2038
2123
|
function cleanString(value) {
|
|
@@ -2084,18 +2169,15 @@ async function createRequiredBeliefTopicEdge(ctx, args) {
|
|
|
2084
2169
|
const now = Date.now();
|
|
2085
2170
|
const existingEdges = await ctx.db.query("epistemicEdges").withIndex(
|
|
2086
2171
|
"by_from_to",
|
|
2087
|
-
(q) => q.eq("fromNodeId",
|
|
2088
|
-
"toNodeId",
|
|
2089
|
-
String(args.topicNode._id)
|
|
2090
|
-
)
|
|
2172
|
+
(q) => q.eq("fromNodeId", args.beliefGlobalId).eq("toNodeId", topicGlobalId)
|
|
2091
2173
|
).collect();
|
|
2092
2174
|
const existing = existingEdges.find((edge) => edge.edgeType === "belongs_to");
|
|
2093
2175
|
const edgeGlobalId = cleanString(existing?.globalId) ?? generateUuidV7();
|
|
2094
2176
|
if (!existing) {
|
|
2095
|
-
await ctx
|
|
2177
|
+
await insertEpistemicEdge(ctx, {
|
|
2096
2178
|
globalId: edgeGlobalId,
|
|
2097
|
-
fromNodeId:
|
|
2098
|
-
toNodeId:
|
|
2179
|
+
fromNodeId: args.beliefGlobalId,
|
|
2180
|
+
toNodeId: topicGlobalId,
|
|
2099
2181
|
sourceGlobalId: args.beliefGlobalId,
|
|
2100
2182
|
targetGlobalId: topicGlobalId,
|
|
2101
2183
|
edgeType: "belongs_to",
|
|
@@ -2274,7 +2356,7 @@ var create = mutation({
|
|
|
2274
2356
|
const pillar = normalizePillar(args.pillar);
|
|
2275
2357
|
const additionalMeta = args.metadata || {};
|
|
2276
2358
|
const beliefGlobalId = generateGlobalId();
|
|
2277
|
-
const nodeId = await ctx
|
|
2359
|
+
const nodeId = await insertEpistemicNode(ctx, {
|
|
2278
2360
|
globalId: beliefGlobalId,
|
|
2279
2361
|
nodeType: "belief",
|
|
2280
2362
|
epistemicLayer: "L3",
|
|
@@ -2332,7 +2414,6 @@ var create = mutation({
|
|
|
2332
2414
|
})
|
|
2333
2415
|
);
|
|
2334
2416
|
await createRequiredBeliefTopicEdge(ctx, {
|
|
2335
|
-
beliefNodeId: nodeId,
|
|
2336
2417
|
beliefGlobalId,
|
|
2337
2418
|
topicNode,
|
|
2338
2419
|
createdBy: authenticatedUserId
|
|
@@ -2747,7 +2828,7 @@ var forkBelief = mutation({
|
|
|
2747
2828
|
});
|
|
2748
2829
|
}
|
|
2749
2830
|
const newBeliefGlobalId = generateGlobalId();
|
|
2750
|
-
const newNodeId = await ctx
|
|
2831
|
+
const newNodeId = await insertEpistemicNode(ctx, {
|
|
2751
2832
|
globalId: newBeliefGlobalId,
|
|
2752
2833
|
nodeType: "belief",
|
|
2753
2834
|
epistemicLayer: "L3",
|
|
@@ -3531,10 +3612,11 @@ var linkEvidence = mutation({
|
|
|
3531
3612
|
const edgeType = "informs";
|
|
3532
3613
|
const logicalRole = evidenceNodeId ? await computeLogicalRole(ctx, evidenceNodeId, args.beliefNodeId) : "contributory";
|
|
3533
3614
|
const edgeGlobalId = generateGlobalId();
|
|
3534
|
-
await ctx
|
|
3615
|
+
await insertEpistemicEdge(ctx, {
|
|
3535
3616
|
globalId: edgeGlobalId,
|
|
3536
|
-
|
|
3537
|
-
|
|
3617
|
+
// C2-RR.4 Defect E — canonical UUIDv7 endpoints, not Convex doc ids.
|
|
3618
|
+
fromNodeId: evidenceGlobalId,
|
|
3619
|
+
toNodeId: belief.globalId,
|
|
3538
3620
|
sourceGlobalId: evidenceGlobalId,
|
|
3539
3621
|
targetGlobalId: belief.globalId,
|
|
3540
3622
|
edgeType,
|
|
@@ -4330,7 +4412,7 @@ var internalCreate = internalMutation({
|
|
|
4330
4412
|
opinion_u: 1,
|
|
4331
4413
|
opinion_a: baseRate
|
|
4332
4414
|
};
|
|
4333
|
-
const nodeId = await ctx
|
|
4415
|
+
const nodeId = await insertEpistemicNode(ctx, {
|
|
4334
4416
|
globalId,
|
|
4335
4417
|
topicId: scope.topicId,
|
|
4336
4418
|
projectId: scope.projectId,
|
|
@@ -4386,7 +4468,6 @@ var internalCreate = internalMutation({
|
|
|
4386
4468
|
})
|
|
4387
4469
|
);
|
|
4388
4470
|
await createRequiredBeliefTopicEdge(ctx, {
|
|
4389
|
-
beliefNodeId: nodeId,
|
|
4390
4471
|
beliefGlobalId: globalId,
|
|
4391
4472
|
topicNode,
|
|
4392
4473
|
createdBy: args.userId
|