@lucern/graph-primitives 1.0.23 → 1.0.25
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 +3 -0
- package/dist/beliefDecay.js.map +1 -1
- package/dist/beliefEvidenceLinks.js +15 -3
- package/dist/beliefEvidenceLinks.js.map +1 -1
- package/dist/beliefEvidenceLinks.operational.js +12 -3
- package/dist/beliefEvidenceLinks.operational.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 +62 -37
- package/dist/entityLifecycle.js.map +1 -1
- package/dist/epistemicAnswers.js.map +1 -1
- package/dist/epistemicBeliefs.admin.js +17 -6
- package/dist/epistemicBeliefs.admin.js.map +1 -1
- package/dist/epistemicBeliefs.backfills.js +13 -2
- package/dist/epistemicBeliefs.backfills.js.map +1 -1
- package/dist/epistemicBeliefs.confidence.js +17 -6
- package/dist/epistemicBeliefs.confidence.js.map +1 -1
- package/dist/epistemicBeliefs.core.js +32 -9
- package/dist/epistemicBeliefs.core.js.map +1 -1
- package/dist/epistemicBeliefs.forkEvidence.js +13 -2
- package/dist/epistemicBeliefs.forkEvidence.js.map +1 -1
- package/dist/epistemicBeliefs.helpers.d.ts +16 -1
- package/dist/epistemicBeliefs.helpers.js +20 -6
- package/dist/epistemicBeliefs.helpers.js.map +1 -1
- package/dist/epistemicBeliefs.internal.js +28 -5
- package/dist/epistemicBeliefs.internal.js.map +1 -1
- package/dist/epistemicBeliefs.js +32 -9
- package/dist/epistemicBeliefs.js.map +1 -1
- package/dist/epistemicBeliefs.lifecycle.js +17 -6
- package/dist/epistemicBeliefs.lifecycle.js.map +1 -1
- package/dist/epistemicBeliefs.links.js +29 -9
- package/dist/epistemicBeliefs.links.js.map +1 -1
- package/dist/epistemicBeliefs.topicAnchor.js +12 -3
- package/dist/epistemicBeliefs.topicAnchor.js.map +1 -1
- package/dist/epistemicContracts.evaluators.js +17 -6
- package/dist/epistemicContracts.evaluators.js.map +1 -1
- package/dist/epistemicContracts.handlers.js +17 -6
- package/dist/epistemicContracts.handlers.js.map +1 -1
- package/dist/epistemicContracts.js +17 -6
- package/dist/epistemicContracts.js.map +1 -1
- package/dist/epistemicEdges.handlers.js +12 -3
- package/dist/epistemicEdges.handlers.js.map +1 -1
- package/dist/epistemicEdges.helpers.d.ts +2 -2
- package/dist/epistemicEdges.js +15 -3
- package/dist/epistemicEdges.js.map +1 -1
- package/dist/epistemicEdges.mutations.js +3 -0
- package/dist/epistemicEdges.mutations.js.map +1 -1
- package/dist/epistemicEvidence.js +15 -3
- package/dist/epistemicEvidence.js.map +1 -1
- package/dist/epistemicEvidenceHelpers.js +3 -0
- package/dist/epistemicEvidenceHelpers.js.map +1 -1
- package/dist/epistemicEvidenceMutations.js +15 -3
- package/dist/epistemicEvidenceMutations.js.map +1 -1
- package/dist/epistemicEvidenceQueries.js +3 -0
- package/dist/epistemicEvidenceQueries.js.map +1 -1
- package/dist/epistemicHelpers.js.map +1 -1
- package/dist/epistemicInsert.js +12 -3
- package/dist/epistemicInsert.js.map +1 -1
- package/dist/epistemicNodeCreation.js.map +1 -1
- package/dist/epistemicNodes.internal.js.map +1 -1
- package/dist/epistemicNodes.js.map +1 -1
- package/dist/epistemicNodes.mutations.js.map +1 -1
- package/dist/epistemicNodes.validators.d.ts +2 -2
- package/dist/epistemicQuestions.conviction.js +3 -0
- package/dist/epistemicQuestions.conviction.js.map +1 -1
- package/dist/epistemicQuestions.create.js +3 -0
- package/dist/epistemicQuestions.create.js.map +1 -1
- package/dist/epistemicQuestions.evidence.js +3 -0
- package/dist/epistemicQuestions.evidence.js.map +1 -1
- package/dist/epistemicQuestions.helpers.js +3 -0
- package/dist/epistemicQuestions.helpers.js.map +1 -1
- package/dist/epistemicQuestions.js +3 -0
- package/dist/epistemicQuestions.js.map +1 -1
- package/dist/epistemicQuestions.lifecycle.js +3 -0
- package/dist/epistemicQuestions.lifecycle.js.map +1 -1
- package/dist/epistemicQuestions.queries.js +3 -0
- package/dist/epistemicQuestions.queries.js.map +1 -1
- package/dist/epistemicQuestions.tail.js +3 -0
- package/dist/epistemicQuestions.tail.js.map +1 -1
- package/dist/epistemicSources.js.map +1 -1
- package/dist/index.js +78 -42
- package/dist/index.js.map +1 -1
- package/dist/proof-attestation.json +1 -1
- package/dist/questionEvidenceLinks.js +3 -0
- package/dist/questionEvidenceLinks.js.map +1 -1
- package/dist/resolvers.js +3 -0
- package/dist/resolvers.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/package.json +4 -4
package/dist/epistemicBeliefs.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { v } from 'convex/values';
|
|
1
|
+
import { v, ConvexError } from 'convex/values';
|
|
2
2
|
import { normalizeTupleContradictionPolicy, mkOpinion, createInheritedContractRecord, confidenceFromSL, conditionalDeduction, project, dampedDependencyCascade, hasProjectedOpinionChanged, detectTupleContradiction, evaluateTupleContradictionTransition, readOpinionFromRecord, trustDiscount, applyNegativeSupport, cumulativeFusion, applyNegativeEvidence } from '@lucern/confidence';
|
|
3
3
|
import { checkScopeAccess, checkProjectAccess } from '@lucern/access-control/access';
|
|
4
4
|
import { canAudienceClassAccess, normalizeAudienceKey, classFromAudienceKey } from '@lucern/access-control/audience';
|
|
@@ -7,7 +7,7 @@ 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, assertUuidV7Identity, generateUuidV7, assertStorageEdgeVocabulary,
|
|
10
|
+
import { generateGlobalId, assertUuidV7Identity, generateUuidV7, assertStorageEdgeVocabulary, assertUuidShapedEdgeEndpoint } from '@lucern/contracts/ids';
|
|
11
11
|
import { assertEdgePolicyAllowed, edgePolicyManifest } from '@lucern/contracts';
|
|
12
12
|
import { listAudienceRegistryRows } from '@lucern/access-control/audienceRegistry';
|
|
13
13
|
|
|
@@ -286,6 +286,9 @@ function materializeTopicProjectOverlay(topic, idMode = "legacy") {
|
|
|
286
286
|
type: mapProjectType(topic, metadata),
|
|
287
287
|
description: readNonEmptyString(topic.description),
|
|
288
288
|
ownerId: readNonEmptyString(metadata.ownerId) || readNonEmptyString(topic.createdBy) || "system",
|
|
289
|
+
// FR.7 creator-grant: surface the principal-shaped owner field (column-first,
|
|
290
|
+
// metadata fallback for legacy rows that recorded it in metadata).
|
|
291
|
+
ownerPrincipalId: readNonEmptyString(topic.ownerPrincipalId) || readNonEmptyString(metadata.ownerPrincipalId),
|
|
289
292
|
sharedWith: readStringArray(metadata.sharedWith),
|
|
290
293
|
visibility,
|
|
291
294
|
tenantId: readNonEmptyString(topic.tenantId) || readNonEmptyString(metadata.tenantId),
|
|
@@ -907,7 +910,18 @@ var DEFAULT_CONFIDENCE_POLICY = {
|
|
|
907
910
|
tupleContradiction: normalizeTupleContradictionPolicy()
|
|
908
911
|
};
|
|
909
912
|
function throwStructuredMutationError(args) {
|
|
910
|
-
const
|
|
913
|
+
const data = {
|
|
914
|
+
structuredMutationError: true,
|
|
915
|
+
message: args.message,
|
|
916
|
+
status: args.status,
|
|
917
|
+
code: args.code,
|
|
918
|
+
invariantCode: args.invariantCode,
|
|
919
|
+
suggestion: args.suggestion,
|
|
920
|
+
details: args.details
|
|
921
|
+
};
|
|
922
|
+
const error = new ConvexError(
|
|
923
|
+
data
|
|
924
|
+
);
|
|
911
925
|
error.status = args.status;
|
|
912
926
|
error.code = args.code;
|
|
913
927
|
error.invariantCode = args.invariantCode;
|
|
@@ -1256,12 +1270,12 @@ async function requireProjectWriteAccess(ctx, projectId, userId) {
|
|
|
1256
1270
|
);
|
|
1257
1271
|
if (!hasAccess) {
|
|
1258
1272
|
throwStructuredMutationError({
|
|
1259
|
-
message:
|
|
1273
|
+
message: `Project write access denied for topic ${projectId}.`,
|
|
1260
1274
|
status: 403,
|
|
1261
|
-
code: "
|
|
1275
|
+
code: "PROJECT_ACCESS_DENIED",
|
|
1262
1276
|
invariantCode: "policy.scope_required",
|
|
1263
|
-
suggestion: "
|
|
1264
|
-
details: { projectId, userId }
|
|
1277
|
+
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.",
|
|
1278
|
+
details: { topicId: projectId, principalId: userId }
|
|
1265
1279
|
});
|
|
1266
1280
|
}
|
|
1267
1281
|
}
|
|
@@ -2085,6 +2099,15 @@ async function insertEpistemicNode(ctx, doc) {
|
|
|
2085
2099
|
assertUuidV7Identity("epistemicNodes", doc.globalId);
|
|
2086
2100
|
return ctx.db.insert("epistemicNodes", doc);
|
|
2087
2101
|
}
|
|
2102
|
+
async function assertExistingNodeEndpoint(ctx, endpointRole, endpoint) {
|
|
2103
|
+
assertUuidShapedEdgeEndpoint(endpointRole, endpoint);
|
|
2104
|
+
const node = await ctx.db.query("epistemicNodes").withIndex("by_globalId", (q) => q.eq("globalId", endpoint)).first();
|
|
2105
|
+
if (!node) {
|
|
2106
|
+
throw new Error(
|
|
2107
|
+
`edge_endpoint_not_canonical: epistemicEdges insert requires ${endpointRole} to be the globalId of an existing epistemicNodes row, received ${endpoint} (no node with that globalId)`
|
|
2108
|
+
);
|
|
2109
|
+
}
|
|
2110
|
+
}
|
|
2088
2111
|
async function insertEpistemicEdge(ctx, doc) {
|
|
2089
2112
|
assertUuidV7Identity("epistemicEdges", doc.globalId);
|
|
2090
2113
|
assertStorageEdgeVocabulary(doc.edgeType);
|
|
@@ -2098,8 +2121,8 @@ async function insertEpistemicEdge(ctx, doc) {
|
|
|
2098
2121
|
"edge_endpoint_missing: epistemicEdges insert requires a non-empty toNodeId"
|
|
2099
2122
|
);
|
|
2100
2123
|
}
|
|
2101
|
-
|
|
2102
|
-
|
|
2124
|
+
await assertExistingNodeEndpoint(ctx, "fromNodeId", doc.fromNodeId);
|
|
2125
|
+
await assertExistingNodeEndpoint(ctx, "toNodeId", doc.toNodeId);
|
|
2103
2126
|
if (doc.fromNodeType && doc.toNodeType && doc.edgeType !== "extracted_from") {
|
|
2104
2127
|
assertEdgePolicyAllowed(
|
|
2105
2128
|
edgePolicyManifest,
|