@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, deriveContractModulationPlan, deriveContractStatus, trustDiscount, applyNegativeSupport, cumulativeFusion, applyNegativeEvidence, readOpinionFromRecord, parseEvidentialEvaluatorConfig, compareMetricValue, buildEvidentialRationale, parseMetricCheckerConfig, getEvaluatorInputRecord, pickFiniteNumber, resolveComparisonResult, buildComparisonRationale, parseReferenceCheckCounterConfig, parseTemporalDeadlineConfig, parseMarketIndexComparatorConfig, createInheritedContractRecord } from '@lucern/confidence';
|
|
3
3
|
import { checkProjectAccess } from '@lucern/access-control/access';
|
|
4
4
|
import '@lucern/access-control/audience';
|
|
@@ -149,6 +149,35 @@ function debugGraphPrimitiveFallback(message, context) {
|
|
|
149
149
|
console.debug(message, context ?? {});
|
|
150
150
|
}
|
|
151
151
|
var LEGACY_SCOPE_FIELD = "graphScopeProjectId";
|
|
152
|
+
async function resolveTopicNodeScopeOrNull(ctx, ref) {
|
|
153
|
+
if (!ctx?.db || typeof ctx.db.query !== "function") {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
let node = null;
|
|
157
|
+
try {
|
|
158
|
+
const byGlobalId = await ctx.db.query("epistemicNodes").withIndex("by_globalId", (q) => q.eq("globalId", ref)).first();
|
|
159
|
+
if (byGlobalId && byGlobalId.nodeType === "topic") {
|
|
160
|
+
node = byGlobalId;
|
|
161
|
+
}
|
|
162
|
+
} catch (error) {
|
|
163
|
+
debugGraphPrimitiveFallback(
|
|
164
|
+
"[topicScope] topic-node scope lookup by globalId failed",
|
|
165
|
+
{ error, ref }
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
if (!node) {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
const scopeKey = normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);
|
|
172
|
+
if (!scopeKey) {
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
topicId: scopeKey,
|
|
177
|
+
projectId: asMappedProjectId(node),
|
|
178
|
+
source: "topic_node"
|
|
179
|
+
};
|
|
180
|
+
}
|
|
152
181
|
function asMappedProjectId(topic) {
|
|
153
182
|
if (!topic) {
|
|
154
183
|
return;
|
|
@@ -289,6 +318,13 @@ async function resolveTopicProjectScope(ctx, args) {
|
|
|
289
318
|
) ?? null;
|
|
290
319
|
}
|
|
291
320
|
if (!topic) {
|
|
321
|
+
const nodeScope = await resolveTopicNodeScopeOrNull(
|
|
322
|
+
ctx,
|
|
323
|
+
String(args.topicId)
|
|
324
|
+
);
|
|
325
|
+
if (nodeScope) {
|
|
326
|
+
return nodeScope;
|
|
327
|
+
}
|
|
292
328
|
throw new Error(`Topic not found: ${String(args.topicId)}`);
|
|
293
329
|
}
|
|
294
330
|
const inherited = await resolveInheritedWorkspaceScope(ctx, topic);
|
|
@@ -359,6 +395,16 @@ async function resolveTopicProjectScope(ctx, args) {
|
|
|
359
395
|
source: "project_mapped_topic"
|
|
360
396
|
};
|
|
361
397
|
}
|
|
398
|
+
const nodeScope = await resolveTopicNodeScopeOrNull(
|
|
399
|
+
ctx,
|
|
400
|
+
String(args.projectId)
|
|
401
|
+
);
|
|
402
|
+
if (nodeScope) {
|
|
403
|
+
return {
|
|
404
|
+
...nodeScope,
|
|
405
|
+
projectId: nodeScope.projectId ?? String(args.projectId)
|
|
406
|
+
};
|
|
407
|
+
}
|
|
362
408
|
throw new Error(
|
|
363
409
|
`Legacy project scope ${String(args.projectId)} has no mapped topic.`
|
|
364
410
|
);
|
|
@@ -464,7 +510,18 @@ var DEFAULT_CONFIDENCE_POLICY = {
|
|
|
464
510
|
tupleContradiction: normalizeTupleContradictionPolicy()
|
|
465
511
|
};
|
|
466
512
|
function throwStructuredMutationError(args) {
|
|
467
|
-
const
|
|
513
|
+
const data = {
|
|
514
|
+
structuredMutationError: true,
|
|
515
|
+
message: args.message,
|
|
516
|
+
status: args.status,
|
|
517
|
+
code: args.code,
|
|
518
|
+
invariantCode: args.invariantCode,
|
|
519
|
+
suggestion: args.suggestion,
|
|
520
|
+
details: args.details
|
|
521
|
+
};
|
|
522
|
+
const error = new ConvexError(
|
|
523
|
+
data
|
|
524
|
+
);
|
|
468
525
|
error.status = args.status;
|
|
469
526
|
error.code = args.code;
|
|
470
527
|
error.invariantCode = args.invariantCode;
|
|
@@ -582,12 +639,12 @@ async function requireProjectWriteAccess(ctx, projectId, userId) {
|
|
|
582
639
|
);
|
|
583
640
|
if (!hasAccess) {
|
|
584
641
|
throwStructuredMutationError({
|
|
585
|
-
message:
|
|
642
|
+
message: `Project write access denied for topic ${projectId}.`,
|
|
586
643
|
status: 403,
|
|
587
|
-
code: "
|
|
644
|
+
code: "PROJECT_ACCESS_DENIED",
|
|
588
645
|
invariantCode: "policy.scope_required",
|
|
589
|
-
suggestion: "
|
|
590
|
-
details: { projectId, userId }
|
|
646
|
+
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.",
|
|
647
|
+
details: { topicId: projectId, principalId: userId }
|
|
591
648
|
});
|
|
592
649
|
}
|
|
593
650
|
}
|
|
@@ -1243,14 +1300,14 @@ async function applyBeliefConfidenceChange(ctx, args) {
|
|
|
1243
1300
|
beliefConfidenceId
|
|
1244
1301
|
};
|
|
1245
1302
|
}
|
|
1246
|
-
function
|
|
1303
|
+
function propagationPressureLabel(edgeType, weight) {
|
|
1247
1304
|
if (edgeType === "contradicts" || edgeType === "refutes") {
|
|
1248
|
-
return "
|
|
1305
|
+
return "contradictory";
|
|
1249
1306
|
}
|
|
1250
1307
|
if ((edgeType === "supports" || edgeType === "informs") && weight < 0) {
|
|
1251
|
-
return "
|
|
1308
|
+
return "contradictory";
|
|
1252
1309
|
}
|
|
1253
|
-
return "
|
|
1310
|
+
return "supportive";
|
|
1254
1311
|
}
|
|
1255
1312
|
internalMutation({
|
|
1256
1313
|
args: {
|
|
@@ -1287,14 +1344,15 @@ internalMutation({
|
|
|
1287
1344
|
getNode: async (nodeId) => await ctx.db.get(nodeId)
|
|
1288
1345
|
});
|
|
1289
1346
|
for (const dispatch of dispatches) {
|
|
1347
|
+
const pressureLabel = propagationPressureLabel(dispatch.edgeType, dispatch.weight);
|
|
1290
1348
|
await applyBeliefConfidenceChange(ctx, {
|
|
1291
1349
|
nodeId: dispatch.targetNodeId,
|
|
1292
1350
|
belief: dispatch.opinion.b,
|
|
1293
1351
|
disbelief: dispatch.opinion.d,
|
|
1294
1352
|
uncertainty: dispatch.opinion.u,
|
|
1295
1353
|
baseRate: dispatch.opinion.a,
|
|
1296
|
-
trigger:
|
|
1297
|
-
rationale: `SL propagation via ${dispatch.edgeType} edge: ${dispatch.rationale}`,
|
|
1354
|
+
trigger: "propagation",
|
|
1355
|
+
rationale: `SL propagation via ${dispatch.edgeType} edge (pressure: ${pressureLabel}): ${dispatch.rationale}`,
|
|
1298
1356
|
authenticatedUserId: args.userId,
|
|
1299
1357
|
slOperator: dispatch.operator
|
|
1300
1358
|
});
|
|
@@ -2745,10 +2803,7 @@ var createEpistemicContract = mutation({
|
|
|
2745
2803
|
createdBy: userId,
|
|
2746
2804
|
updatedAt: now
|
|
2747
2805
|
};
|
|
2748
|
-
const insertedId = await ctx.db.insert(
|
|
2749
|
-
"epistemicContracts",
|
|
2750
|
-
contractDoc
|
|
2751
|
-
);
|
|
2806
|
+
const insertedId = await ctx.db.insert("epistemicContracts", contractDoc);
|
|
2752
2807
|
return {
|
|
2753
2808
|
contractId,
|
|
2754
2809
|
id: insertedId,
|