@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
|
@@ -2,8 +2,9 @@ import { v } from 'convex/values';
|
|
|
2
2
|
import { checkProjectAccess, checkScopeAccess } from '@lucern/access-control/access';
|
|
3
3
|
import { permissiveReturn } from '@lucern/contracts/schema-helpers/validators';
|
|
4
4
|
import { componentsGeneric, anyApi, mutationGeneric, internalMutationGeneric } from 'convex/server';
|
|
5
|
-
import { generateGlobalId } from '@lucern/contracts/ids';
|
|
5
|
+
import { generateGlobalId, assertUuidV7Identity } from '@lucern/contracts/ids';
|
|
6
6
|
import { isNodeType, getLayerForNodeType } from '@lucern/contracts/schema-helpers/spine/tables/epistemicNodes';
|
|
7
|
+
import '@lucern/contracts';
|
|
7
8
|
|
|
8
9
|
// src/epistemicQuestions.create.ts
|
|
9
10
|
var api = anyApi;
|
|
@@ -53,6 +54,35 @@ async function scheduleEmbeddingGeneration(args) {
|
|
|
53
54
|
}
|
|
54
55
|
}
|
|
55
56
|
var LEGACY_SCOPE_FIELD = "graphScopeProjectId";
|
|
57
|
+
async function resolveTopicNodeScopeOrNull(ctx, ref) {
|
|
58
|
+
if (!ctx?.db || typeof ctx.db.query !== "function") {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
let node = null;
|
|
62
|
+
try {
|
|
63
|
+
const byGlobalId = await ctx.db.query("epistemicNodes").withIndex("by_globalId", (q) => q.eq("globalId", ref)).first();
|
|
64
|
+
if (byGlobalId && byGlobalId.nodeType === "topic") {
|
|
65
|
+
node = byGlobalId;
|
|
66
|
+
}
|
|
67
|
+
} catch (error) {
|
|
68
|
+
debugGraphPrimitiveFallback(
|
|
69
|
+
"[topicScope] topic-node scope lookup by globalId failed",
|
|
70
|
+
{ error, ref }
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
if (!node) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
const scopeKey = normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);
|
|
77
|
+
if (!scopeKey) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
topicId: scopeKey,
|
|
82
|
+
projectId: asMappedProjectId(node),
|
|
83
|
+
source: "topic_node"
|
|
84
|
+
};
|
|
85
|
+
}
|
|
56
86
|
function asMappedProjectId(topic) {
|
|
57
87
|
if (!topic) {
|
|
58
88
|
return;
|
|
@@ -193,6 +223,13 @@ async function resolveTopicProjectScope(ctx, args) {
|
|
|
193
223
|
) ?? null;
|
|
194
224
|
}
|
|
195
225
|
if (!topic) {
|
|
226
|
+
const nodeScope = await resolveTopicNodeScopeOrNull(
|
|
227
|
+
ctx,
|
|
228
|
+
String(args.topicId)
|
|
229
|
+
);
|
|
230
|
+
if (nodeScope) {
|
|
231
|
+
return nodeScope;
|
|
232
|
+
}
|
|
196
233
|
throw new Error(`Topic not found: ${String(args.topicId)}`);
|
|
197
234
|
}
|
|
198
235
|
const inherited = await resolveInheritedWorkspaceScope(ctx, topic);
|
|
@@ -263,6 +300,16 @@ async function resolveTopicProjectScope(ctx, args) {
|
|
|
263
300
|
source: "project_mapped_topic"
|
|
264
301
|
};
|
|
265
302
|
}
|
|
303
|
+
const nodeScope = await resolveTopicNodeScopeOrNull(
|
|
304
|
+
ctx,
|
|
305
|
+
String(args.projectId)
|
|
306
|
+
);
|
|
307
|
+
if (nodeScope) {
|
|
308
|
+
return {
|
|
309
|
+
...nodeScope,
|
|
310
|
+
projectId: nodeScope.projectId ?? String(args.projectId)
|
|
311
|
+
};
|
|
312
|
+
}
|
|
266
313
|
throw new Error(
|
|
267
314
|
`Legacy project scope ${String(args.projectId)} has no mapped topic.`
|
|
268
315
|
);
|
|
@@ -479,6 +526,9 @@ function materializeTopicProjectOverlay(topic, idMode = "legacy") {
|
|
|
479
526
|
type: mapProjectType(topic, metadata),
|
|
480
527
|
description: readNonEmptyString(topic.description),
|
|
481
528
|
ownerId: readNonEmptyString(metadata.ownerId) || readNonEmptyString(topic.createdBy) || "system",
|
|
529
|
+
// FR.7 creator-grant: surface the principal-shaped owner field (column-first,
|
|
530
|
+
// metadata fallback for legacy rows that recorded it in metadata).
|
|
531
|
+
ownerPrincipalId: readNonEmptyString(topic.ownerPrincipalId) || readNonEmptyString(metadata.ownerPrincipalId),
|
|
482
532
|
sharedWith: readStringArray(metadata.sharedWith),
|
|
483
533
|
visibility,
|
|
484
534
|
tenantId: readNonEmptyString(topic.tenantId) || readNonEmptyString(metadata.tenantId),
|
|
@@ -748,6 +798,10 @@ function buildLinkedWorktreeMetadata(linkedWorktreeId) {
|
|
|
748
798
|
linkedWorktreeId
|
|
749
799
|
} : {};
|
|
750
800
|
}
|
|
801
|
+
async function insertEpistemicNode(ctx, doc) {
|
|
802
|
+
assertUuidV7Identity("epistemicNodes", doc.globalId);
|
|
803
|
+
return ctx.db.insert("epistemicNodes", doc);
|
|
804
|
+
}
|
|
751
805
|
|
|
752
806
|
// src/epistemicQuestions.create.ts
|
|
753
807
|
var create = mutation({
|
|
@@ -821,7 +875,7 @@ var create = mutation({
|
|
|
821
875
|
const globalId = generateGlobalId();
|
|
822
876
|
const contentHash = generateContentHash(args.question);
|
|
823
877
|
const category = normalizeCategory(args.category);
|
|
824
|
-
const nodeId = await ctx
|
|
878
|
+
const nodeId = await insertEpistemicNode(ctx, {
|
|
825
879
|
globalId,
|
|
826
880
|
topicId: scope.topicId,
|
|
827
881
|
projectId: scope.projectId,
|
|
@@ -989,7 +1043,7 @@ var createBatch = mutation({
|
|
|
989
1043
|
const globalId = generateGlobalId();
|
|
990
1044
|
const contentHash = generateContentHash(q.question);
|
|
991
1045
|
const category = normalizeCategory(q.category);
|
|
992
|
-
const nodeId = await ctx
|
|
1046
|
+
const nodeId = await insertEpistemicNode(ctx, {
|
|
993
1047
|
globalId,
|
|
994
1048
|
topicId: scope.topicId,
|
|
995
1049
|
projectId: scope.projectId,
|
|
@@ -1041,7 +1095,7 @@ var createBatch = mutation({
|
|
|
1041
1095
|
const beliefNode = await ctx.db.get(q.linkedBeliefNodeId);
|
|
1042
1096
|
if (beliefNode) {
|
|
1043
1097
|
await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {
|
|
1044
|
-
globalId:
|
|
1098
|
+
globalId: generateGlobalId(),
|
|
1045
1099
|
fromGlobalId: beliefNode.globalId,
|
|
1046
1100
|
toGlobalId: globalId,
|
|
1047
1101
|
edgeType: "tests",
|
|
@@ -1105,7 +1159,7 @@ var internalCreate = internalMutation({
|
|
|
1105
1159
|
const globalId = generateGlobalId();
|
|
1106
1160
|
const contentHash = generateContentHash(args.question);
|
|
1107
1161
|
const category = normalizeCategory(args.category);
|
|
1108
|
-
const nodeId = await ctx
|
|
1162
|
+
const nodeId = await insertEpistemicNode(ctx, {
|
|
1109
1163
|
globalId,
|
|
1110
1164
|
topicId: scope.topicId,
|
|
1111
1165
|
projectId: scope.projectId,
|
|
@@ -1137,7 +1191,7 @@ var internalCreate = internalMutation({
|
|
|
1137
1191
|
const beliefNode = await ctx.db.get(args.linkedBeliefNodeId);
|
|
1138
1192
|
if (beliefNode) {
|
|
1139
1193
|
await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {
|
|
1140
|
-
globalId:
|
|
1194
|
+
globalId: generateGlobalId(),
|
|
1141
1195
|
fromGlobalId: beliefNode.globalId,
|
|
1142
1196
|
toGlobalId: globalId,
|
|
1143
1197
|
edgeType: "tests",
|
|
@@ -1208,7 +1262,7 @@ var addQuestion = mutation({
|
|
|
1208
1262
|
const contentHash = generateContentHash(args.question);
|
|
1209
1263
|
const category = normalizeCategory(args.category);
|
|
1210
1264
|
const additionalMetadata = args.metadata && typeof args.metadata === "object" ? args.metadata : {};
|
|
1211
|
-
const nodeId = await ctx
|
|
1265
|
+
const nodeId = await insertEpistemicNode(ctx, {
|
|
1212
1266
|
globalId,
|
|
1213
1267
|
topicId: scope.topicId,
|
|
1214
1268
|
projectId: scope.projectId,
|