@lucern/graph-primitives 1.0.22 → 1.0.24
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 +49 -0
- package/dist/beliefDecay.js.map +1 -1
- package/dist/beliefEvidenceLinks.js +99 -5
- package/dist/beliefEvidenceLinks.js.map +1 -1
- package/dist/beliefEvidenceLinks.operational.js +50 -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/entityCanonicalMatch.d.ts +40 -0
- package/dist/entityCanonicalMatch.js +33 -0
- package/dist/entityCanonicalMatch.js.map +1 -0
- package/dist/entityLifecycle.js +149 -39
- 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 +63 -6
- package/dist/epistemicBeliefs.admin.js.map +1 -1
- package/dist/epistemicBeliefs.backfills.js +59 -2
- package/dist/epistemicBeliefs.backfills.js.map +1 -1
- package/dist/epistemicBeliefs.confidence.d.ts +1 -1
- package/dist/epistemicBeliefs.confidence.js +70 -12
- package/dist/epistemicBeliefs.confidence.js.map +1 -1
- package/dist/epistemicBeliefs.core.js +120 -17
- package/dist/epistemicBeliefs.core.js.map +1 -1
- package/dist/epistemicBeliefs.d.ts +1 -1
- package/dist/epistemicBeliefs.forkEvidence.js +13 -2
- package/dist/epistemicBeliefs.forkEvidence.js.map +1 -1
- package/dist/epistemicBeliefs.helpers.d.ts +18 -3
- package/dist/epistemicBeliefs.helpers.js +66 -6
- package/dist/epistemicBeliefs.helpers.js.map +1 -1
- package/dist/epistemicBeliefs.internal.js +115 -12
- package/dist/epistemicBeliefs.internal.js.map +1 -1
- package/dist/epistemicBeliefs.js +132 -28
- package/dist/epistemicBeliefs.js.map +1 -1
- package/dist/epistemicBeliefs.lifecycle.js +70 -12
- package/dist/epistemicBeliefs.lifecycle.js.map +1 -1
- package/dist/epistemicBeliefs.links.js +111 -10
- package/dist/epistemicBeliefs.links.js.map +1 -1
- package/dist/epistemicBeliefs.topicAnchor.js +48 -8
- package/dist/epistemicBeliefs.topicAnchor.js.map +1 -1
- package/dist/epistemicContracts.evaluators.js +70 -12
- package/dist/epistemicContracts.evaluators.js.map +1 -1
- package/dist/epistemicContracts.handlers.js +71 -16
- package/dist/epistemicContracts.handlers.js.map +1 -1
- package/dist/epistemicContracts.js +71 -16
- package/dist/epistemicContracts.js.map +1 -1
- package/dist/epistemicEdges.d.ts +1 -1
- package/dist/epistemicEdges.handlers.js +57 -3
- package/dist/epistemicEdges.handlers.js.map +1 -1
- package/dist/epistemicEdges.helpers.d.ts +2 -2
- package/dist/epistemicEdges.js +174 -4
- package/dist/epistemicEdges.js.map +1 -1
- package/dist/epistemicEdges.mutations.js +115 -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 +180 -14
- package/dist/epistemicEvidence.js.map +1 -1
- package/dist/epistemicEvidenceHelpers.d.ts +1 -1
- package/dist/epistemicEvidenceHelpers.js +49 -0
- package/dist/epistemicEvidenceHelpers.js.map +1 -1
- package/dist/epistemicEvidenceMutations.js +180 -14
- package/dist/epistemicEvidenceMutations.js.map +1 -1
- package/dist/epistemicEvidenceQueries.js +49 -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 +54 -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 +49 -0
- package/dist/epistemicQuestions.conviction.js.map +1 -1
- package/dist/epistemicQuestions.create.js +61 -7
- package/dist/epistemicQuestions.create.js.map +1 -1
- package/dist/epistemicQuestions.d.ts +1 -1
- package/dist/epistemicQuestions.evidence.js +56 -2
- package/dist/epistemicQuestions.evidence.js.map +1 -1
- package/dist/epistemicQuestions.helpers.d.ts +1 -1
- package/dist/epistemicQuestions.helpers.js +49 -0
- package/dist/epistemicQuestions.helpers.js.map +1 -1
- package/dist/epistemicQuestions.js +63 -9
- package/dist/epistemicQuestions.js.map +1 -1
- package/dist/epistemicQuestions.lifecycle.js +49 -0
- package/dist/epistemicQuestions.lifecycle.js.map +1 -1
- package/dist/epistemicQuestions.queries.js +49 -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 +56 -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 +379 -115
- package/dist/index.js.map +1 -1
- package/dist/proof-attestation.json +1 -1
- package/dist/questionEvidenceLinks.js +49 -0
- package/dist/questionEvidenceLinks.js.map +1 -1
- package/dist/resolvers.js +3 -0
- package/dist/resolvers.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/topicProjectOverlay.d.ts +4 -0
- package/dist/topicProjectOverlay.js +3 -0
- package/dist/topicProjectOverlay.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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { v } from 'convex/values';
|
|
1
|
+
import { v, ConvexError } from 'convex/values';
|
|
2
2
|
import { normalizeTupleContradictionPolicy, mkOpinion, conditionalDeduction, project, dampedDependencyCascade, hasProjectedOpinionChanged, confidenceFromSL, detectTupleContradiction, evaluateTupleContradictionTransition, trustDiscount, applyNegativeSupport, cumulativeFusion, applyNegativeEvidence, readOpinionFromRecord } from '@lucern/confidence';
|
|
3
3
|
import { permissiveReturn } from '@lucern/contracts/schema-helpers/validators';
|
|
4
4
|
import { componentsGeneric, internalMutationGeneric, anyApi } from 'convex/server';
|
|
@@ -431,6 +431,35 @@ function debugGraphPrimitiveFallback(message, context) {
|
|
|
431
431
|
|
|
432
432
|
// src/topicScope.ts
|
|
433
433
|
var LEGACY_SCOPE_FIELD = "graphScopeProjectId";
|
|
434
|
+
async function resolveTopicNodeScopeOrNull(ctx, ref) {
|
|
435
|
+
if (!ctx?.db || typeof ctx.db.query !== "function") {
|
|
436
|
+
return null;
|
|
437
|
+
}
|
|
438
|
+
let node = null;
|
|
439
|
+
try {
|
|
440
|
+
const byGlobalId = await ctx.db.query("epistemicNodes").withIndex("by_globalId", (q) => q.eq("globalId", ref)).first();
|
|
441
|
+
if (byGlobalId && byGlobalId.nodeType === "topic") {
|
|
442
|
+
node = byGlobalId;
|
|
443
|
+
}
|
|
444
|
+
} catch (error) {
|
|
445
|
+
debugGraphPrimitiveFallback(
|
|
446
|
+
"[topicScope] topic-node scope lookup by globalId failed",
|
|
447
|
+
{ error, ref }
|
|
448
|
+
);
|
|
449
|
+
}
|
|
450
|
+
if (!node) {
|
|
451
|
+
return null;
|
|
452
|
+
}
|
|
453
|
+
const scopeKey = normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);
|
|
454
|
+
if (!scopeKey) {
|
|
455
|
+
return null;
|
|
456
|
+
}
|
|
457
|
+
return {
|
|
458
|
+
topicId: scopeKey,
|
|
459
|
+
projectId: asMappedProjectId(node),
|
|
460
|
+
source: "topic_node"
|
|
461
|
+
};
|
|
462
|
+
}
|
|
434
463
|
function asMappedProjectId(topic) {
|
|
435
464
|
if (!topic) {
|
|
436
465
|
return;
|
|
@@ -571,6 +600,13 @@ async function resolveTopicProjectScope(ctx, args) {
|
|
|
571
600
|
) ?? null;
|
|
572
601
|
}
|
|
573
602
|
if (!topic) {
|
|
603
|
+
const nodeScope = await resolveTopicNodeScopeOrNull(
|
|
604
|
+
ctx,
|
|
605
|
+
String(args.topicId)
|
|
606
|
+
);
|
|
607
|
+
if (nodeScope) {
|
|
608
|
+
return nodeScope;
|
|
609
|
+
}
|
|
574
610
|
throw new Error(`Topic not found: ${String(args.topicId)}`);
|
|
575
611
|
}
|
|
576
612
|
const inherited = await resolveInheritedWorkspaceScope(ctx, topic);
|
|
@@ -641,6 +677,16 @@ async function resolveTopicProjectScope(ctx, args) {
|
|
|
641
677
|
source: "project_mapped_topic"
|
|
642
678
|
};
|
|
643
679
|
}
|
|
680
|
+
const nodeScope = await resolveTopicNodeScopeOrNull(
|
|
681
|
+
ctx,
|
|
682
|
+
String(args.projectId)
|
|
683
|
+
);
|
|
684
|
+
if (nodeScope) {
|
|
685
|
+
return {
|
|
686
|
+
...nodeScope,
|
|
687
|
+
projectId: nodeScope.projectId ?? String(args.projectId)
|
|
688
|
+
};
|
|
689
|
+
}
|
|
644
690
|
throw new Error(
|
|
645
691
|
`Legacy project scope ${String(args.projectId)} has no mapped topic.`
|
|
646
692
|
);
|
|
@@ -873,7 +919,18 @@ var DEFAULT_CONFIDENCE_POLICY = {
|
|
|
873
919
|
tupleContradiction: normalizeTupleContradictionPolicy()
|
|
874
920
|
};
|
|
875
921
|
function throwStructuredMutationError(args) {
|
|
876
|
-
const
|
|
922
|
+
const data = {
|
|
923
|
+
structuredMutationError: true,
|
|
924
|
+
message: args.message,
|
|
925
|
+
status: args.status,
|
|
926
|
+
code: args.code,
|
|
927
|
+
invariantCode: args.invariantCode,
|
|
928
|
+
suggestion: args.suggestion,
|
|
929
|
+
details: args.details
|
|
930
|
+
};
|
|
931
|
+
const error = new ConvexError(
|
|
932
|
+
data
|
|
933
|
+
);
|
|
877
934
|
error.status = args.status;
|
|
878
935
|
error.code = args.code;
|
|
879
936
|
error.invariantCode = args.invariantCode;
|
|
@@ -991,12 +1048,12 @@ async function requireProjectWriteAccess(ctx, projectId, userId) {
|
|
|
991
1048
|
);
|
|
992
1049
|
if (!hasAccess) {
|
|
993
1050
|
throwStructuredMutationError({
|
|
994
|
-
message:
|
|
1051
|
+
message: `Project write access denied for topic ${projectId}.`,
|
|
995
1052
|
status: 403,
|
|
996
|
-
code: "
|
|
1053
|
+
code: "PROJECT_ACCESS_DENIED",
|
|
997
1054
|
invariantCode: "policy.scope_required",
|
|
998
|
-
suggestion: "
|
|
999
|
-
details: { projectId, userId }
|
|
1055
|
+
suggestion: "The acting principal lacks project-write access to this topic. Request a topic grant (or, if the principal created this topic, run the creator-grant backfill) and retry.",
|
|
1056
|
+
details: { topicId: projectId, principalId: userId }
|
|
1000
1057
|
});
|
|
1001
1058
|
}
|
|
1002
1059
|
}
|
|
@@ -1242,14 +1299,14 @@ async function applyBeliefConfidenceChange(ctx, args) {
|
|
|
1242
1299
|
beliefConfidenceId
|
|
1243
1300
|
};
|
|
1244
1301
|
}
|
|
1245
|
-
function
|
|
1302
|
+
function propagationPressureLabel(edgeType, weight) {
|
|
1246
1303
|
if (edgeType === "contradicts" || edgeType === "refutes") {
|
|
1247
|
-
return "
|
|
1304
|
+
return "contradictory";
|
|
1248
1305
|
}
|
|
1249
1306
|
if ((edgeType === "supports" || edgeType === "informs") && weight < 0) {
|
|
1250
|
-
return "
|
|
1307
|
+
return "contradictory";
|
|
1251
1308
|
}
|
|
1252
|
-
return "
|
|
1309
|
+
return "supportive";
|
|
1253
1310
|
}
|
|
1254
1311
|
var propagateConfidenceChange = internalMutation({
|
|
1255
1312
|
args: {
|
|
@@ -1286,14 +1343,15 @@ var propagateConfidenceChange = internalMutation({
|
|
|
1286
1343
|
getNode: async (nodeId) => await ctx.db.get(nodeId)
|
|
1287
1344
|
});
|
|
1288
1345
|
for (const dispatch of dispatches) {
|
|
1346
|
+
const pressureLabel = propagationPressureLabel(dispatch.edgeType, dispatch.weight);
|
|
1289
1347
|
await applyBeliefConfidenceChange(ctx, {
|
|
1290
1348
|
nodeId: dispatch.targetNodeId,
|
|
1291
1349
|
belief: dispatch.opinion.b,
|
|
1292
1350
|
disbelief: dispatch.opinion.d,
|
|
1293
1351
|
uncertainty: dispatch.opinion.u,
|
|
1294
1352
|
baseRate: dispatch.opinion.a,
|
|
1295
|
-
trigger:
|
|
1296
|
-
rationale: `SL propagation via ${dispatch.edgeType} edge: ${dispatch.rationale}`,
|
|
1353
|
+
trigger: "propagation",
|
|
1354
|
+
rationale: `SL propagation via ${dispatch.edgeType} edge (pressure: ${pressureLabel}): ${dispatch.rationale}`,
|
|
1297
1355
|
authenticatedUserId: args.userId,
|
|
1298
1356
|
slOperator: dispatch.operator
|
|
1299
1357
|
});
|