@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 { permissiveReturn } from '@lucern/contracts/schema-helpers/validators';
|
|
3
3
|
import { componentsGeneric, anyApi, internalMutationGeneric, mutationGeneric } from 'convex/server';
|
|
4
4
|
import '@lucern/contracts/schema-helpers/spine/tables/epistemicNodes';
|
|
@@ -28,6 +28,35 @@ function debugGraphPrimitiveFallback(message, context) {
|
|
|
28
28
|
|
|
29
29
|
// src/topicScope.ts
|
|
30
30
|
var LEGACY_SCOPE_FIELD = "graphScopeProjectId";
|
|
31
|
+
async function resolveTopicNodeScopeOrNull(ctx, ref) {
|
|
32
|
+
if (!ctx?.db || typeof ctx.db.query !== "function") {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
let node = null;
|
|
36
|
+
try {
|
|
37
|
+
const byGlobalId = await ctx.db.query("epistemicNodes").withIndex("by_globalId", (q) => q.eq("globalId", ref)).first();
|
|
38
|
+
if (byGlobalId && byGlobalId.nodeType === "topic") {
|
|
39
|
+
node = byGlobalId;
|
|
40
|
+
}
|
|
41
|
+
} catch (error) {
|
|
42
|
+
debugGraphPrimitiveFallback(
|
|
43
|
+
"[topicScope] topic-node scope lookup by globalId failed",
|
|
44
|
+
{ error, ref }
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
if (!node) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
const scopeKey = normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);
|
|
51
|
+
if (!scopeKey) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
topicId: scopeKey,
|
|
56
|
+
projectId: asMappedProjectId(node),
|
|
57
|
+
source: "topic_node"
|
|
58
|
+
};
|
|
59
|
+
}
|
|
31
60
|
function asMappedProjectId(topic) {
|
|
32
61
|
if (!topic) {
|
|
33
62
|
return;
|
|
@@ -168,6 +197,13 @@ async function resolveTopicProjectScope(ctx, args) {
|
|
|
168
197
|
) ?? null;
|
|
169
198
|
}
|
|
170
199
|
if (!topic) {
|
|
200
|
+
const nodeScope = await resolveTopicNodeScopeOrNull(
|
|
201
|
+
ctx,
|
|
202
|
+
String(args.topicId)
|
|
203
|
+
);
|
|
204
|
+
if (nodeScope) {
|
|
205
|
+
return nodeScope;
|
|
206
|
+
}
|
|
171
207
|
throw new Error(`Topic not found: ${String(args.topicId)}`);
|
|
172
208
|
}
|
|
173
209
|
const inherited = await resolveInheritedWorkspaceScope(ctx, topic);
|
|
@@ -238,6 +274,16 @@ async function resolveTopicProjectScope(ctx, args) {
|
|
|
238
274
|
source: "project_mapped_topic"
|
|
239
275
|
};
|
|
240
276
|
}
|
|
277
|
+
const nodeScope = await resolveTopicNodeScopeOrNull(
|
|
278
|
+
ctx,
|
|
279
|
+
String(args.projectId)
|
|
280
|
+
);
|
|
281
|
+
if (nodeScope) {
|
|
282
|
+
return {
|
|
283
|
+
...nodeScope,
|
|
284
|
+
projectId: nodeScope.projectId ?? String(args.projectId)
|
|
285
|
+
};
|
|
286
|
+
}
|
|
241
287
|
throw new Error(
|
|
242
288
|
`Legacy project scope ${String(args.projectId)} has no mapped topic.`
|
|
243
289
|
);
|
|
@@ -916,7 +962,18 @@ var DEFAULT_CONFIDENCE_POLICY = {
|
|
|
916
962
|
tupleContradiction: normalizeTupleContradictionPolicy()
|
|
917
963
|
};
|
|
918
964
|
function throwStructuredMutationError(args) {
|
|
919
|
-
const
|
|
965
|
+
const data = {
|
|
966
|
+
structuredMutationError: true,
|
|
967
|
+
message: args.message,
|
|
968
|
+
status: args.status,
|
|
969
|
+
code: args.code,
|
|
970
|
+
invariantCode: args.invariantCode,
|
|
971
|
+
suggestion: args.suggestion,
|
|
972
|
+
details: args.details
|
|
973
|
+
};
|
|
974
|
+
const error = new ConvexError(
|
|
975
|
+
data
|
|
976
|
+
);
|
|
920
977
|
error.status = args.status;
|
|
921
978
|
error.code = args.code;
|
|
922
979
|
error.invariantCode = args.invariantCode;
|
|
@@ -1049,12 +1106,12 @@ async function requireProjectWriteAccess(ctx, projectId, userId) {
|
|
|
1049
1106
|
);
|
|
1050
1107
|
if (!hasAccess) {
|
|
1051
1108
|
throwStructuredMutationError({
|
|
1052
|
-
message:
|
|
1109
|
+
message: `Project write access denied for topic ${projectId}.`,
|
|
1053
1110
|
status: 403,
|
|
1054
|
-
code: "
|
|
1111
|
+
code: "PROJECT_ACCESS_DENIED",
|
|
1055
1112
|
invariantCode: "policy.scope_required",
|
|
1056
|
-
suggestion: "
|
|
1057
|
-
details: { projectId, userId }
|
|
1113
|
+
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.",
|
|
1114
|
+
details: { topicId: projectId, principalId: userId }
|
|
1058
1115
|
});
|
|
1059
1116
|
}
|
|
1060
1117
|
}
|
|
@@ -1300,14 +1357,14 @@ async function applyBeliefConfidenceChange(ctx, args) {
|
|
|
1300
1357
|
beliefConfidenceId
|
|
1301
1358
|
};
|
|
1302
1359
|
}
|
|
1303
|
-
function
|
|
1360
|
+
function propagationPressureLabel(edgeType, weight) {
|
|
1304
1361
|
if (edgeType === "contradicts" || edgeType === "refutes") {
|
|
1305
|
-
return "
|
|
1362
|
+
return "contradictory";
|
|
1306
1363
|
}
|
|
1307
1364
|
if ((edgeType === "supports" || edgeType === "informs") && weight < 0) {
|
|
1308
|
-
return "
|
|
1365
|
+
return "contradictory";
|
|
1309
1366
|
}
|
|
1310
|
-
return "
|
|
1367
|
+
return "supportive";
|
|
1311
1368
|
}
|
|
1312
1369
|
internalMutation({
|
|
1313
1370
|
args: {
|
|
@@ -1344,14 +1401,15 @@ internalMutation({
|
|
|
1344
1401
|
getNode: async (nodeId) => await ctx.db.get(nodeId)
|
|
1345
1402
|
});
|
|
1346
1403
|
for (const dispatch of dispatches) {
|
|
1404
|
+
const pressureLabel = propagationPressureLabel(dispatch.edgeType, dispatch.weight);
|
|
1347
1405
|
await applyBeliefConfidenceChange(ctx, {
|
|
1348
1406
|
nodeId: dispatch.targetNodeId,
|
|
1349
1407
|
belief: dispatch.opinion.b,
|
|
1350
1408
|
disbelief: dispatch.opinion.d,
|
|
1351
1409
|
uncertainty: dispatch.opinion.u,
|
|
1352
1410
|
baseRate: dispatch.opinion.a,
|
|
1353
|
-
trigger:
|
|
1354
|
-
rationale: `SL propagation via ${dispatch.edgeType} edge: ${dispatch.rationale}`,
|
|
1411
|
+
trigger: "propagation",
|
|
1412
|
+
rationale: `SL propagation via ${dispatch.edgeType} edge (pressure: ${pressureLabel}): ${dispatch.rationale}`,
|
|
1355
1413
|
authenticatedUserId: args.userId,
|
|
1356
1414
|
slOperator: dispatch.operator
|
|
1357
1415
|
});
|