@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
|
@@ -342,6 +342,9 @@ function materializeTopicProjectOverlay(topic, idMode = "legacy") {
|
|
|
342
342
|
type: mapProjectType(topic, metadata),
|
|
343
343
|
description: readNonEmptyString(topic.description),
|
|
344
344
|
ownerId: readNonEmptyString(metadata.ownerId) || readNonEmptyString(topic.createdBy) || "system",
|
|
345
|
+
// FR.7 creator-grant: surface the principal-shaped owner field (column-first,
|
|
346
|
+
// metadata fallback for legacy rows that recorded it in metadata).
|
|
347
|
+
ownerPrincipalId: readNonEmptyString(topic.ownerPrincipalId) || readNonEmptyString(metadata.ownerPrincipalId),
|
|
345
348
|
sharedWith: readStringArray(metadata.sharedWith),
|
|
346
349
|
visibility,
|
|
347
350
|
tenantId: readNonEmptyString(topic.tenantId) || readNonEmptyString(metadata.tenantId),
|
|
@@ -536,6 +539,35 @@ function resolveGraphPrimitivesAppResolvers(_ctx) {
|
|
|
536
539
|
};
|
|
537
540
|
}
|
|
538
541
|
var LEGACY_SCOPE_FIELD2 = "graphScopeProjectId";
|
|
542
|
+
async function resolveTopicNodeScopeOrNull(ctx, ref) {
|
|
543
|
+
if (!ctx?.db || typeof ctx.db.query !== "function") {
|
|
544
|
+
return null;
|
|
545
|
+
}
|
|
546
|
+
let node = null;
|
|
547
|
+
try {
|
|
548
|
+
const byGlobalId = await ctx.db.query("epistemicNodes").withIndex("by_globalId", (q) => q.eq("globalId", ref)).first();
|
|
549
|
+
if (byGlobalId && byGlobalId.nodeType === "topic") {
|
|
550
|
+
node = byGlobalId;
|
|
551
|
+
}
|
|
552
|
+
} catch (error) {
|
|
553
|
+
debugGraphPrimitiveFallback(
|
|
554
|
+
"[topicScope] topic-node scope lookup by globalId failed",
|
|
555
|
+
{ error, ref }
|
|
556
|
+
);
|
|
557
|
+
}
|
|
558
|
+
if (!node) {
|
|
559
|
+
return null;
|
|
560
|
+
}
|
|
561
|
+
const scopeKey = normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);
|
|
562
|
+
if (!scopeKey) {
|
|
563
|
+
return null;
|
|
564
|
+
}
|
|
565
|
+
return {
|
|
566
|
+
topicId: scopeKey,
|
|
567
|
+
projectId: asMappedProjectId(node),
|
|
568
|
+
source: "topic_node"
|
|
569
|
+
};
|
|
570
|
+
}
|
|
539
571
|
function asMappedProjectId(topic) {
|
|
540
572
|
if (!topic) {
|
|
541
573
|
return;
|
|
@@ -676,6 +708,13 @@ async function resolveTopicProjectScope(ctx, args) {
|
|
|
676
708
|
) ?? null;
|
|
677
709
|
}
|
|
678
710
|
if (!topic) {
|
|
711
|
+
const nodeScope = await resolveTopicNodeScopeOrNull(
|
|
712
|
+
ctx,
|
|
713
|
+
String(args.topicId)
|
|
714
|
+
);
|
|
715
|
+
if (nodeScope) {
|
|
716
|
+
return nodeScope;
|
|
717
|
+
}
|
|
679
718
|
throw new Error(`Topic not found: ${String(args.topicId)}`);
|
|
680
719
|
}
|
|
681
720
|
const inherited = await resolveInheritedWorkspaceScope(ctx, topic);
|
|
@@ -746,6 +785,16 @@ async function resolveTopicProjectScope(ctx, args) {
|
|
|
746
785
|
source: "project_mapped_topic"
|
|
747
786
|
};
|
|
748
787
|
}
|
|
788
|
+
const nodeScope = await resolveTopicNodeScopeOrNull(
|
|
789
|
+
ctx,
|
|
790
|
+
String(args.projectId)
|
|
791
|
+
);
|
|
792
|
+
if (nodeScope) {
|
|
793
|
+
return {
|
|
794
|
+
...nodeScope,
|
|
795
|
+
projectId: nodeScope.projectId ?? String(args.projectId)
|
|
796
|
+
};
|
|
797
|
+
}
|
|
749
798
|
throw new Error(
|
|
750
799
|
`Legacy project scope ${String(args.projectId)} has no mapped topic.`
|
|
751
800
|
);
|
|
@@ -935,7 +984,72 @@ var EDGE_LAYER_RULES = {
|
|
|
935
984
|
from: ["ontological"],
|
|
936
985
|
to: ["L3"],
|
|
937
986
|
description: "Deal -> Theme"
|
|
938
|
-
}
|
|
987
|
+
},
|
|
988
|
+
// C2-RR.4 — storage migration alias + the remaining 55 reachable edge types.
|
|
989
|
+
// Mirrors the kernel rule table
|
|
990
|
+
// (packages/reasoning-kernel/src/adapters/lib/edgeValidation.ts) so this
|
|
991
|
+
// graph-primitives write path admits the same public edge vocabulary. See the
|
|
992
|
+
// kernel file for the per-group rationale.
|
|
993
|
+
extracted_from: {
|
|
994
|
+
from: ["L2", "L3", "L4"],
|
|
995
|
+
to: ["L1", "L2", "L3"],
|
|
996
|
+
description: "Legacy storage migration alias for derived_from; public writes use derived_from"
|
|
997
|
+
},
|
|
998
|
+
qualifies: { from: ["L2", "L3"], to: ["L3"], description: "Evidence/Belief qualifies a Belief" },
|
|
999
|
+
contradicts: { from: ["L2", "L3"], to: ["L3"], description: "Evidence/Belief contradicts a Belief" },
|
|
1000
|
+
reinforces: { from: ["L2", "L3"], to: ["L3"], description: "Evidence/Belief reinforces a Belief" },
|
|
1001
|
+
corroborates: { from: ["L2", "L3"], to: ["L3"], description: "Independent evidence/belief corroborates a Belief" },
|
|
1002
|
+
strengthened_by: { from: ["L3"], to: ["L2", "L3"], description: "Belief is strengthened by Evidence/Belief" },
|
|
1003
|
+
weakened_by: { from: ["L3"], to: ["L2", "L3"], description: "Belief is weakened by Evidence/Belief" },
|
|
1004
|
+
validated_by: { from: ["L3"], to: ["L2", "L3"], description: "Belief is validated by Evidence/Belief" },
|
|
1005
|
+
falsified_by: { from: ["L3"], to: ["L2", "L3"], description: "Belief is falsified by Evidence/Belief" },
|
|
1006
|
+
amplifies: { from: ["L3"], to: ["L3"], description: "Belief amplifies another Belief" },
|
|
1007
|
+
precondition_for: { from: ["L3"], to: ["L3"], description: "Belief is a precondition for another Belief" },
|
|
1008
|
+
prerequisite_for: { from: ["L3"], to: ["L3"], description: "Belief is a prerequisite for another Belief" },
|
|
1009
|
+
required_for: { from: ["L3"], to: ["L3"], description: "Belief is required for another Belief" },
|
|
1010
|
+
in_tension_with: { from: ["L3"], to: ["L3"], description: "Belief is in tension with another Belief" },
|
|
1011
|
+
mutually_exclusive: { from: ["L3"], to: ["L3"], description: "Beliefs cannot both hold" },
|
|
1012
|
+
exclusive_with: { from: ["L3"], to: ["L3"], description: "Belief is exclusive with another Belief" },
|
|
1013
|
+
alternative_to: { from: ["L3"], to: ["L3"], description: "Belief is an alternative to another Belief" },
|
|
1014
|
+
subsumes: { from: ["L3"], to: ["L3"], description: "Belief subsumes a narrower Belief" },
|
|
1015
|
+
extends: { from: ["L3"], to: ["L3"], description: "Belief extends another Belief" },
|
|
1016
|
+
refines: { from: ["L3"], to: ["L3"], description: "Belief refines another Belief" },
|
|
1017
|
+
implements: { from: ["L3"], to: ["L3"], description: "Belief implements an abstract Belief" },
|
|
1018
|
+
violates: { from: ["L3"], to: ["L3"], description: "Belief violates a constraint Belief" },
|
|
1019
|
+
assumes: { from: ["L3"], to: ["L3"], description: "Belief assumes another Belief" },
|
|
1020
|
+
would_predict: { from: ["L3"], to: ["L3"], description: "Belief would predict another Belief" },
|
|
1021
|
+
analogous_to: { from: ["L3"], to: ["L3"], description: "Belief is analogous to another Belief" },
|
|
1022
|
+
independent_of: { from: ["L3"], to: ["L3"], description: "Belief is independent of another Belief" },
|
|
1023
|
+
correlates_with: { from: ["L3"], to: ["L3"], description: "Belief correlates with another Belief" },
|
|
1024
|
+
co_changes_with: { from: ["L3"], to: ["L3"], description: "Belief co-changes with another Belief" },
|
|
1025
|
+
counterfactual_of: { from: ["L3"], to: ["L3"], description: "Belief is a counterfactual of another Belief" },
|
|
1026
|
+
parallel_to: { from: ["L3"], to: ["L3"], description: "Belief runs parallel to another Belief" },
|
|
1027
|
+
cascade_from: { from: ["L3"], to: ["L3"], description: "Cascade from an upstream Belief" },
|
|
1028
|
+
cascade_to: { from: ["L3"], to: ["L3"], description: "Cascade to a downstream Belief" },
|
|
1029
|
+
collapses_if: { from: ["L3"], to: ["L3"], description: "Belief collapses if another fails" },
|
|
1030
|
+
branches_from: { from: ["L3"], to: ["L3"], description: "Belief branches from an ancestor Belief" },
|
|
1031
|
+
same_as: { from: ["L2", "L3", "ontological"], to: ["L2", "L3", "ontological"], description: "Two nodes are the same entity" },
|
|
1032
|
+
answers: { from: ["L2", "L3"], to: ["L3"], description: "Answer/Belief answers a Question" },
|
|
1033
|
+
partially_answers: { from: ["L2", "L3"], to: ["L3"], description: "Answer/Belief partially answers a Question" },
|
|
1034
|
+
explores: { from: ["L3"], to: ["L3"], description: "Question explores a Belief/Theme" },
|
|
1035
|
+
informed_by_theme: { from: ["L3"], to: ["L3"], description: "Belief is informed by a Theme" },
|
|
1036
|
+
same_theme_as: { from: ["L3"], to: ["L3"], description: "Two Beliefs share a Theme" },
|
|
1037
|
+
based_on: { from: ["L4"], to: ["L3"], description: "Decision is based on a Belief/Question" },
|
|
1038
|
+
based_on_belief: { from: ["L4"], to: ["L3"], description: "Decision is based on a Belief" },
|
|
1039
|
+
based_on_question: { from: ["L4"], to: ["L3"], description: "Decision is based on a Question" },
|
|
1040
|
+
blocked_by_contradiction: { from: ["L4"], to: ["L3"], description: "Decision is blocked by a Contradiction" },
|
|
1041
|
+
parent_of: { from: ["L3", "L4", "ontological", "organizational"], to: ["L2", "L3", "ontological", "organizational"], description: "A is the parent of B" },
|
|
1042
|
+
child_of: { from: ["L2", "L3", "ontological", "organizational"], to: ["L3", "L4", "ontological", "organizational"], description: "A is the child of B" },
|
|
1043
|
+
scoped_by: { from: ["L2", "L3"], to: ["L3", "organizational"], description: "Object is scoped by a Topic/Theme" },
|
|
1044
|
+
cites: { from: ["L2", "L3"], to: ["L1", "L2"], description: "Evidence/Belief cites a Source/Excerpt" },
|
|
1045
|
+
summarizes: { from: ["L2", "L3"], to: ["L1", "L2"], description: "Synthesis/Evidence summarizes a Source/Evidence" },
|
|
1046
|
+
same_source_as: { from: ["L1", "L2"], to: ["L1", "L2"], description: "Two nodes derive from the same Source" },
|
|
1047
|
+
migrating_from: { from: ["L2", "L3", "L4"], to: ["L1", "L2", "L3"], description: "Migration lineage: from an ancestor" },
|
|
1048
|
+
migrating_to: { from: ["L1", "L2", "L3"], to: ["L2", "L3", "L4"], description: "Migration lineage: to a successor" },
|
|
1049
|
+
about_entity: { from: ["L2", "L3"], to: ["ontological"], description: "Belief/Evidence is about an Entity" },
|
|
1050
|
+
entity_referenced_in: { from: ["ontological"], to: ["L1", "L2"], description: "Entity is referenced in a Source/Evidence" },
|
|
1051
|
+
related_to: { from: ["L2", "L3", "ontological", "organizational"], to: ["L2", "L3", "ontological", "organizational"], description: "Lateral adjacency; no confidence pressure" },
|
|
1052
|
+
blocks: { from: ["L3", "L4"], to: ["L3", "L4"], description: "A blocks B (structural gate)" }
|
|
939
1053
|
};
|
|
940
1054
|
function validateEdgeLayers(edgeType, fromLayer, toLayer) {
|
|
941
1055
|
const rules = EDGE_LAYER_RULES[edgeType];
|