@lucern/graph-primitives 1.0.29 → 1.0.31
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-DZ6tkLYq.d.ts → beliefDecay-BmkEk5OJ.d.ts} +3 -3
- package/dist/beliefDecay.d.ts +1 -1
- package/dist/beliefDecay.js +448 -314
- package/dist/beliefDecay.js.map +1 -1
- package/dist/{beliefEvidenceLinks-CWOXxxJg.d.ts → beliefEvidenceLinks-BzfjON_6.d.ts} +13 -13
- package/dist/beliefEvidenceLinks.d.ts +1 -1
- package/dist/beliefEvidenceLinks.js +843 -624
- package/dist/beliefEvidenceLinks.js.map +1 -1
- package/dist/beliefEvidenceLinks.operational.d.ts +7 -5
- package/dist/beliefEvidenceLinks.operational.js +91 -18
- package/dist/beliefEvidenceLinks.operational.js.map +1 -1
- package/dist/beliefLifecycle.js.map +1 -1
- package/dist/confidencePropagationDispatch.d.ts +28 -27
- package/dist/confidencePropagationDispatch.js +157 -99
- package/dist/confidencePropagationDispatch.js.map +1 -1
- package/dist/{contradictions-51VLsESq.d.ts → contradictions-BATPuZTL.d.ts} +10 -10
- package/dist/contradictions.d.ts +1 -1
- package/dist/contradictions.js +395 -225
- package/dist/contradictions.js.map +1 -1
- package/dist/convex.d.ts +65 -30
- package/dist/convex.js +7 -3
- package/dist/convex.js.map +1 -1
- package/dist/debug.js.map +1 -1
- package/dist/edgeValidation.js +293 -85
- package/dist/edgeValidation.js.map +1 -1
- package/dist/edges/contains.d.ts +1 -1
- package/dist/edges/contains.js.map +1 -1
- package/dist/edges/contradicts.d.ts +1 -1
- package/dist/edges/contradicts.js.map +1 -1
- package/dist/edges/{dependsOn.d.ts → depends-on.d.ts} +1 -1
- package/dist/edges/{dependsOn.js → depends-on.js} +4 -4
- package/dist/edges/depends-on.js.map +1 -0
- package/dist/edges/{derivedFrom.d.ts → derived-from.d.ts} +1 -1
- package/dist/edges/{derivedFrom.js → derived-from.js} +3 -3
- package/dist/edges/derived-from.js.map +1 -0
- package/dist/edges/elaborates.d.ts +1 -1
- package/dist/edges/elaborates.js.map +1 -1
- package/dist/edges/index.d.ts +7 -3
- package/dist/edges/index.js +7 -4
- package/dist/edges/index.js.map +1 -1
- package/dist/edges/informs.d.ts +1 -1
- package/dist/edges/informs.js.map +1 -1
- package/dist/edges/{propagationTypes.d.ts → propagation-types.d.ts} +14 -14
- package/dist/edges/{propagationTypes.js → propagation-types.js} +3 -3
- package/dist/edges/propagation-types.js.map +1 -0
- package/dist/edges/refutes.d.ts +1 -1
- package/dist/edges/refutes.js.map +1 -1
- package/dist/edges/supports.d.ts +1 -1
- package/dist/edges/supports.js.map +1 -1
- package/dist/edges/tests.d.ts +1 -1
- package/dist/edges/tests.js.map +1 -1
- package/dist/edges/utils.d.ts +1 -1
- package/dist/edges/utils.js.map +1 -1
- package/dist/embeddingTrigger.d.ts +14 -6
- package/dist/embeddingTrigger.js +11 -14
- package/dist/embeddingTrigger.js.map +1 -1
- package/dist/{entityBridge-DMaKooYn.d.ts → entityBridge-BhVDM3pc.d.ts} +5 -5
- package/dist/entityBridge.d.ts +1 -1
- package/dist/entityBridge.js +602 -225
- package/dist/entityBridge.js.map +1 -1
- package/dist/entityCanonicalMatch.d.ts +14 -12
- package/dist/entityCanonicalMatch.js.map +1 -1
- package/dist/{entityLifecycle-CvgSK5FV.d.ts → entityLifecycle-BsfCz9pS.d.ts} +5 -9
- package/dist/entityLifecycle.d.ts +1 -1
- package/dist/entityLifecycle.js +854 -480
- package/dist/entityLifecycle.js.map +1 -1
- package/dist/{entityValidation-KLZ_Xl2D.d.ts → entityValidation-B1yNEHJx.d.ts} +7 -6
- package/dist/entityValidation.d.ts +3 -1
- package/dist/entityValidation.js +60 -8
- package/dist/entityValidation.js.map +1 -1
- package/dist/{epistemicAnswers-C5ib4z6_.d.ts → epistemicAnswers-f47YMu9U.d.ts} +6 -6
- package/dist/epistemicAnswers.d.ts +1 -1
- package/dist/epistemicAnswers.js +587 -545
- package/dist/epistemicAnswers.js.map +1 -1
- package/dist/epistemicBeliefs.admin.d.ts +8 -8
- package/dist/epistemicBeliefs.admin.js +365 -166
- package/dist/epistemicBeliefs.admin.js.map +1 -1
- package/dist/epistemicBeliefs.backfills.d.ts +8 -8
- package/dist/epistemicBeliefs.backfills.js +655 -289
- package/dist/epistemicBeliefs.backfills.js.map +1 -1
- package/dist/epistemicBeliefs.confidence.d.ts +19 -15
- package/dist/epistemicBeliefs.confidence.js +633 -386
- package/dist/epistemicBeliefs.confidence.js.map +1 -1
- package/dist/epistemicBeliefs.core.d.ts +6 -6
- package/dist/epistemicBeliefs.core.js +717 -371
- package/dist/epistemicBeliefs.core.js.map +1 -1
- package/dist/epistemicBeliefs.d.ts +11 -9
- package/dist/epistemicBeliefs.forkEvidence.d.ts +2 -0
- package/dist/epistemicBeliefs.forkEvidence.js +8 -8
- package/dist/epistemicBeliefs.forkEvidence.js.map +1 -1
- package/dist/epistemicBeliefs.helpers.d.ts +68 -49
- package/dist/epistemicBeliefs.helpers.js +358 -211
- package/dist/epistemicBeliefs.helpers.js.map +1 -1
- package/dist/epistemicBeliefs.internal.d.ts +5 -5
- package/dist/epistemicBeliefs.internal.js +1248 -1026
- package/dist/epistemicBeliefs.internal.js.map +1 -1
- package/dist/epistemicBeliefs.js +4942 -3590
- package/dist/epistemicBeliefs.js.map +1 -1
- package/dist/epistemicBeliefs.lifecycle.d.ts +5 -5
- package/dist/epistemicBeliefs.lifecycle.js +1138 -781
- package/dist/epistemicBeliefs.lifecycle.js.map +1 -1
- package/dist/epistemicBeliefs.links.d.ts +7 -7
- package/dist/epistemicBeliefs.links.js +404 -267
- package/dist/epistemicBeliefs.links.js.map +1 -1
- package/dist/epistemicBeliefs.queries.d.ts +4 -4
- package/dist/epistemicBeliefs.queries.js +175 -20
- package/dist/epistemicBeliefs.queries.js.map +1 -1
- package/dist/epistemicBeliefs.topicAnchor.d.ts +6 -4
- package/dist/epistemicBeliefs.topicAnchor.js +12 -5
- package/dist/epistemicBeliefs.topicAnchor.js.map +1 -1
- package/dist/epistemicContracts.d.ts +28 -3
- package/dist/epistemicContracts.evaluators.d.ts +2 -0
- package/dist/epistemicContracts.evaluators.js +1062 -576
- package/dist/epistemicContracts.evaluators.js.map +1 -1
- package/dist/epistemicContracts.handlers.d.ts +15 -32
- package/dist/epistemicContracts.handlers.js +1829 -1351
- package/dist/epistemicContracts.handlers.js.map +1 -1
- package/dist/epistemicContracts.js +1131 -636
- package/dist/epistemicContracts.js.map +1 -1
- package/dist/epistemicContracts.metrics.d.ts +2 -0
- package/dist/epistemicContracts.metrics.js +375 -158
- package/dist/epistemicContracts.metrics.js.map +1 -1
- package/dist/epistemicContracts.types.d.ts +87 -81
- package/dist/epistemicEdgeCreation.d.ts +2 -0
- package/dist/epistemicEdgeCreation.js +87 -16
- package/dist/epistemicEdgeCreation.js.map +1 -1
- package/dist/{epistemicEdges-BF-cn4i3.d.ts → epistemicEdges-BGBh0QSP.d.ts} +4 -7
- package/dist/epistemicEdges.d.ts +6 -5
- package/dist/epistemicEdges.handlers.d.ts +3 -3
- package/dist/epistemicEdges.handlers.js +129 -24
- package/dist/epistemicEdges.handlers.js.map +1 -1
- package/dist/epistemicEdges.helpers.d.ts +6 -4
- package/dist/epistemicEdges.helpers.js +37 -2
- package/dist/epistemicEdges.helpers.js.map +1 -1
- package/dist/epistemicEdges.js +1966 -1202
- package/dist/epistemicEdges.js.map +1 -1
- package/dist/epistemicEdges.mutations.d.ts +7 -7
- package/dist/epistemicEdges.mutations.js +956 -579
- package/dist/epistemicEdges.mutations.js.map +1 -1
- package/dist/epistemicEdges.queries.d.ts +16 -16
- package/dist/epistemicEdges.queries.js +639 -367
- package/dist/epistemicEdges.queries.js.map +1 -1
- package/dist/epistemicEdges.types.d.ts +10 -8
- package/dist/epistemicEvidence.d.ts +4 -1
- package/dist/epistemicEvidence.js +933 -532
- package/dist/epistemicEvidence.js.map +1 -1
- package/dist/epistemicEvidenceHelpers.d.ts +26 -10
- package/dist/epistemicEvidenceHelpers.js +239 -200
- package/dist/epistemicEvidenceHelpers.js.map +1 -1
- package/dist/epistemicEvidenceMutations.d.ts +8 -8
- package/dist/epistemicEvidenceMutations.js +840 -692
- package/dist/epistemicEvidenceMutations.js.map +1 -1
- package/dist/epistemicEvidenceQueries.d.ts +8 -8
- package/dist/epistemicEvidenceQueries.js +514 -238
- package/dist/epistemicEvidenceQueries.js.map +1 -1
- package/dist/epistemicHelpers.d.ts +4 -2
- package/dist/epistemicHelpers.js +308 -134
- package/dist/epistemicHelpers.js.map +1 -1
- package/dist/epistemicInsert.d.ts +16 -4
- package/dist/epistemicInsert.js +6 -3
- package/dist/epistemicInsert.js.map +1 -1
- package/dist/epistemicLayerRules.d.ts +10 -8
- package/dist/epistemicLayerRules.js +1 -5
- package/dist/epistemicLayerRules.js.map +1 -1
- package/dist/{epistemicLinking-CfE00tHJ.d.ts → epistemicLinking-CsCDv2cN.d.ts} +3 -3
- package/dist/epistemicLinking.d.ts +1 -1
- package/dist/epistemicLinking.js +177 -100
- package/dist/epistemicLinking.js.map +1 -1
- package/dist/epistemicNodeCreation.d.ts +2 -0
- package/dist/epistemicNodeCreation.js +203 -40
- package/dist/epistemicNodeCreation.js.map +1 -1
- package/dist/{epistemicNodes-BCQxpYx_.d.ts → epistemicNodes-CokAgBHg.d.ts} +3 -3
- package/dist/epistemicNodes.d.ts +3 -3
- package/dist/epistemicNodes.helpers.d.ts +24 -15
- package/dist/epistemicNodes.helpers.js.map +1 -1
- package/dist/epistemicNodes.internal.d.ts +6 -6
- package/dist/epistemicNodes.internal.js +389 -319
- package/dist/epistemicNodes.internal.js.map +1 -1
- package/dist/epistemicNodes.js +700 -504
- package/dist/epistemicNodes.js.map +1 -1
- package/dist/epistemicNodes.mutations.d.ts +6 -6
- package/dist/epistemicNodes.mutations.js +560 -463
- package/dist/epistemicNodes.mutations.js.map +1 -1
- package/dist/epistemicNodes.queries.d.ts +8 -8
- package/dist/epistemicNodes.queries.js +311 -314
- package/dist/epistemicNodes.queries.js.map +1 -1
- package/dist/epistemicNodes.validators.d.ts +2 -2
- package/dist/epistemicNodes.validators.js.map +1 -1
- package/dist/epistemicQuestions.conviction.d.ts +8 -8
- package/dist/epistemicQuestions.conviction.js +665 -484
- package/dist/epistemicQuestions.conviction.js.map +1 -1
- package/dist/epistemicQuestions.create.d.ts +4 -4
- package/dist/epistemicQuestions.create.js +640 -612
- package/dist/epistemicQuestions.create.js.map +1 -1
- package/dist/epistemicQuestions.d.ts +8 -5
- package/dist/epistemicQuestions.evidence.d.ts +2 -2
- package/dist/epistemicQuestions.evidence.js +475 -383
- package/dist/epistemicQuestions.evidence.js.map +1 -1
- package/dist/epistemicQuestions.helpers.d.ts +125 -24
- package/dist/epistemicQuestions.helpers.js +240 -209
- package/dist/epistemicQuestions.helpers.js.map +1 -1
- package/dist/epistemicQuestions.js +3474 -2823
- package/dist/epistemicQuestions.js.map +1 -1
- package/dist/epistemicQuestions.lifecycle.d.ts +2 -2
- package/dist/epistemicQuestions.lifecycle.js +607 -546
- package/dist/epistemicQuestions.lifecycle.js.map +1 -1
- package/dist/epistemicQuestions.queries.d.ts +12 -7
- package/dist/epistemicQuestions.queries.js +305 -244
- package/dist/epistemicQuestions.queries.js.map +1 -1
- package/dist/epistemicQuestions.sprint.d.ts +2 -2
- package/dist/epistemicQuestions.sprint.js +600 -394
- package/dist/epistemicQuestions.sprint.js.map +1 -1
- package/dist/epistemicQuestions.tail.d.ts +6 -6
- package/dist/epistemicQuestions.tail.js +572 -433
- package/dist/epistemicQuestions.tail.js.map +1 -1
- package/dist/{epistemicSources-dlKj58Jp.d.ts → epistemicSources-DQtaEkWs.d.ts} +4 -4
- package/dist/epistemicSources.d.ts +1 -1
- package/dist/epistemicSources.js +351 -311
- package/dist/epistemicSources.js.map +1 -1
- package/dist/evaluators/index.d.ts +8 -6
- package/dist/evaluators/index.js +399 -167
- package/dist/evaluators/index.js.map +1 -1
- package/dist/evaluators/lint-checker-evaluator.d.ts +16 -0
- package/dist/evaluators/{lintCheckerEvaluator.js → lint-checker-evaluator.js} +10 -5
- package/dist/evaluators/lint-checker-evaluator.js.map +1 -0
- package/dist/evaluators/{sentryCheckerEvaluator.d.ts → sentry-checker-evaluator.d.ts} +7 -2
- package/dist/evaluators/{sentryCheckerEvaluator.js → sentry-checker-evaluator.js} +3 -3
- package/dist/evaluators/sentry-checker-evaluator.js.map +1 -0
- package/dist/evaluators/shared.d.ts +2 -2
- package/dist/evaluators/shared.js +3 -1
- package/dist/evaluators/shared.js.map +1 -1
- package/dist/evaluators/{testRunnerEvaluator.d.ts → test-runner-evaluator.d.ts} +6 -1
- package/dist/evaluators/{testRunnerEvaluator.js → test-runner-evaluator.js} +6 -4
- package/dist/evaluators/test-runner-evaluator.js.map +1 -0
- package/dist/evaluators/tsc-checker-evaluator.d.ts +16 -0
- package/dist/evaluators/{tscCheckerEvaluator.js → tsc-checker-evaluator.js} +10 -5
- package/dist/evaluators/tsc-checker-evaluator.js.map +1 -0
- package/dist/graphTypes.js +6 -2
- package/dist/graphTypes.js.map +1 -1
- package/dist/helpers.d.ts +2 -0
- package/dist/helpers.js +313 -93
- package/dist/helpers.js.map +1 -1
- package/dist/{index-C-Kyd7hD.d.ts → index-DZxyC9Pb.d.ts} +7 -6
- package/dist/index.d.ts +86 -83
- package/dist/index.js +16914 -11760
- package/dist/index.js.map +1 -1
- package/dist/invariantEnforcement.d.ts +3 -3
- package/dist/invariantEnforcement.js.map +1 -1
- package/dist/logicalRoleInference.d.ts +2 -0
- package/dist/logicalRoleInference.js +1 -1
- package/dist/logicalRoleInference.js.map +1 -1
- package/dist/matcherFeedbackUtils.d.ts +2 -2
- package/dist/matcherFeedbackUtils.js.map +1 -1
- package/dist/{ontology-matching-C6rrz2VP.d.ts → ontology-matching-C-mYFrir.d.ts} +16 -16
- package/dist/ontology-matching.d.ts +1 -1
- package/dist/{ontologyApproval-CFYmqKmk.d.ts → ontologyApproval-BVt0feJi.d.ts} +10 -10
- package/dist/ontologyApproval.d.ts +1 -1
- package/dist/ontologyApproval.js +7 -1
- package/dist/ontologyApproval.js.map +1 -1
- package/dist/ontologyDefinitions.d.ts +14 -24
- package/dist/ontologyDefinitions.js +269 -34
- package/dist/ontologyDefinitions.js.map +1 -1
- package/dist/ontologyHelpers.d.ts +13 -13
- package/dist/ontologyHelpers.js.map +1 -1
- package/dist/{ontologyRegistry-B67rPJ16.d.ts → ontologyRegistry-CljS-ENv.d.ts} +2 -2
- package/dist/ontologyRegistry.d.ts +1 -1
- package/dist/ontologyRegistry.js +34 -6
- package/dist/ontologyRegistry.js.map +1 -1
- package/dist/{projectionReconciliation-jww2fBI0.d.ts → projectionReconciliation-DnrSgHSQ.d.ts} +4 -4
- package/dist/projectionReconciliation.d.ts +1 -1
- package/dist/projectionReconciliation.js +57 -10
- package/dist/projectionReconciliation.js.map +1 -1
- package/dist/{projectionStaleness-CmdbpjVK.d.ts → projectionStaleness-C8ImQ2zP.d.ts} +17 -17
- package/dist/projectionStaleness.d.ts +1 -1
- package/dist/projectionStaleness.js +8 -2
- package/dist/projectionStaleness.js.map +1 -1
- package/dist/proof-attestation.json +1 -1
- package/dist/{questionEvidenceLinks-DFlyPpAj.d.ts → questionEvidenceLinks-_nPRa-LY.d.ts} +10 -10
- package/dist/questionEvidenceLinks.d.ts +1 -1
- package/dist/questionEvidenceLinks.js +564 -347
- package/dist/questionEvidenceLinks.js.map +1 -1
- package/dist/{resolverTypes-CC8Ea2E2.d.ts → resolverTypes-BOXPxLET.d.ts} +8 -7
- package/dist/resolverTypes.d.ts +4 -2
- package/dist/{resolvers-Br1a6eLV.d.ts → resolvers-B1TIBmRO.d.ts} +3 -1
- package/dist/resolvers.d.ts +5 -3
- package/dist/resolvers.js +121 -77
- package/dist/resolvers.js.map +1 -1
- package/dist/scopeResolverCompat.d.ts +10 -7
- package/dist/scopeResolverCompat.js +106 -123
- package/dist/scopeResolverCompat.js.map +1 -1
- package/dist/{text-matching-DNg4M5Wd.d.ts → text-matching-DzFooju6.d.ts} +7 -7
- package/dist/text-matching.d.ts +1 -1
- package/dist/topicOntologyResolver.d.ts +22 -21
- package/dist/topicOntologyResolver.js +54 -32
- package/dist/topicOntologyResolver.js.map +1 -1
- package/dist/topicProjectOverlay.d.ts +30 -20
- package/dist/topicProjectOverlay.js +120 -76
- package/dist/topicProjectOverlay.js.map +1 -1
- package/dist/{topicScope-7zhyeGl7.d.ts → topicScope-DJVa0mLa.d.ts} +22 -7
- package/dist/topicScope.d.ts +3 -1
- package/dist/topicScope.js +104 -119
- package/dist/topicScope.js.map +1 -1
- package/dist/workflowBridge.d.ts +26 -15
- package/dist/workflowBridge.js +140 -144
- package/dist/workflowBridge.js.map +1 -1
- package/dist/workspaceIsolation.d.ts +14 -12
- package/dist/workspaceIsolation.js +108 -122
- package/dist/workspaceIsolation.js.map +1 -1
- package/package.json +4 -4
- package/dist/edges/dependsOn.js.map +0 -1
- package/dist/edges/derivedFrom.js.map +0 -1
- package/dist/edges/propagationTypes.js.map +0 -1
- package/dist/evaluators/lintCheckerEvaluator.d.ts +0 -11
- package/dist/evaluators/lintCheckerEvaluator.js.map +0 -1
- package/dist/evaluators/sentryCheckerEvaluator.js.map +0 -1
- package/dist/evaluators/testRunnerEvaluator.js.map +0 -1
- package/dist/evaluators/tscCheckerEvaluator.d.ts +0 -11
- package/dist/evaluators/tscCheckerEvaluator.js.map +0 -1
- package/dist/{epistemicQuestions-bwHd2FWE.d.ts → epistemicQuestions-Do1fhYm5.d.ts} +4 -4
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { Id } from './convex.js';
|
|
2
2
|
import { ContractReadCtx, ContradictionStatusCounts, EvidenceFreshness, EpistemicEvaluatorContext, EpistemicEvaluatorResult } from './epistemicContracts.types.js';
|
|
3
|
+
import '@lucern/access-control/convex';
|
|
4
|
+
import '@lucern/contracts/convex/unsafeAnyApi';
|
|
3
5
|
import 'convex/values';
|
|
4
6
|
import '@lucern/confidence';
|
|
5
7
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parseEvidentialEvaluatorConfig, compareMetricValue, buildEvidentialRationale, parseMetricCheckerConfig, getEvaluatorInputRecord, pickFiniteNumber,
|
|
1
|
+
import { parseEvidentialEvaluatorConfig, compareMetricValue, resolveComparisonResult, buildEvidentialRationale, parseMetricCheckerConfig, getEvaluatorInputRecord, pickFiniteNumber, buildComparisonRationale, parseReferenceCheckCounterConfig, parseTemporalDeadlineConfig, parseMarketIndexComparatorConfig } from '@lucern/confidence';
|
|
2
2
|
|
|
3
3
|
// src/epistemicContractHelpers.ts
|
|
4
4
|
|
|
@@ -8,9 +8,7 @@ var ACTIVE_CONTRADICTION_STATUSES = /* @__PURE__ */ new Set([
|
|
|
8
8
|
"investigating",
|
|
9
9
|
"accepted_as_permanent"
|
|
10
10
|
]);
|
|
11
|
-
var DEPENDENT_EDGE_TYPES = /* @__PURE__ */ new Set([
|
|
12
|
-
"depends_on"
|
|
13
|
-
]);
|
|
11
|
+
var DEPENDENT_EDGE_TYPES = /* @__PURE__ */ new Set(["depends_on"]);
|
|
14
12
|
function classifyContradictionStatus(status) {
|
|
15
13
|
if (typeof status !== "string") {
|
|
16
14
|
return "active";
|
|
@@ -23,6 +21,99 @@ function classifyContradictionStatus(status) {
|
|
|
23
21
|
}
|
|
24
22
|
return "resolved";
|
|
25
23
|
}
|
|
24
|
+
function isRecord(value) {
|
|
25
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
26
|
+
}
|
|
27
|
+
function readOptionalNumber(value) {
|
|
28
|
+
return typeof value === "number" && Number.isFinite(value) ? value : void 0;
|
|
29
|
+
}
|
|
30
|
+
function readOptionalString(value) {
|
|
31
|
+
return typeof value === "string" && value.trim().length > 0 ? value : void 0;
|
|
32
|
+
}
|
|
33
|
+
function readConvexId(value) {
|
|
34
|
+
const normalized = readOptionalString(value);
|
|
35
|
+
return normalized;
|
|
36
|
+
}
|
|
37
|
+
function readMetricNodeDoc(value) {
|
|
38
|
+
if (!isRecord(value)) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
const id = readConvexId(value._id);
|
|
42
|
+
const nodeType = readOptionalString(value.nodeType);
|
|
43
|
+
if (!(id && nodeType)) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const node = { _id: id, nodeType };
|
|
47
|
+
const globalId = readOptionalString(value.globalId);
|
|
48
|
+
if (globalId !== void 0) {
|
|
49
|
+
node.globalId = globalId;
|
|
50
|
+
}
|
|
51
|
+
if ("metadata" in value) {
|
|
52
|
+
node.metadata = value.metadata;
|
|
53
|
+
}
|
|
54
|
+
const status = readOptionalString(value.status);
|
|
55
|
+
if (status !== void 0) {
|
|
56
|
+
node.status = status;
|
|
57
|
+
}
|
|
58
|
+
return node;
|
|
59
|
+
}
|
|
60
|
+
function readIncomingEdgeRow(value) {
|
|
61
|
+
if (!isRecord(value)) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
const fromNodeId = readOptionalString(value.fromNodeId);
|
|
65
|
+
if (!fromNodeId) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
const edge = { fromNodeId };
|
|
69
|
+
const id = readConvexId(value._id);
|
|
70
|
+
if (id !== void 0) {
|
|
71
|
+
edge._id = id;
|
|
72
|
+
}
|
|
73
|
+
const edgeType = readOptionalString(value.edgeType);
|
|
74
|
+
if (edgeType !== void 0) {
|
|
75
|
+
edge.edgeType = edgeType;
|
|
76
|
+
}
|
|
77
|
+
const fromGlobalId = readOptionalString(value.fromGlobalId);
|
|
78
|
+
if (fromGlobalId !== void 0) {
|
|
79
|
+
edge.fromGlobalId = fromGlobalId;
|
|
80
|
+
}
|
|
81
|
+
const fromUuid = readOptionalString(value.fromUuid);
|
|
82
|
+
if (fromUuid !== void 0) {
|
|
83
|
+
edge.fromUuid = fromUuid;
|
|
84
|
+
}
|
|
85
|
+
const sourceGlobalId = readOptionalString(value.sourceGlobalId);
|
|
86
|
+
if (sourceGlobalId !== void 0) {
|
|
87
|
+
edge.sourceGlobalId = sourceGlobalId;
|
|
88
|
+
}
|
|
89
|
+
const targetGlobalId = readOptionalString(value.targetGlobalId);
|
|
90
|
+
if (targetGlobalId !== void 0) {
|
|
91
|
+
edge.targetGlobalId = targetGlobalId;
|
|
92
|
+
}
|
|
93
|
+
const toGlobalId = readOptionalString(value.toGlobalId);
|
|
94
|
+
if (toGlobalId !== void 0) {
|
|
95
|
+
edge.toGlobalId = toGlobalId;
|
|
96
|
+
}
|
|
97
|
+
const toNodeId = readOptionalString(value.toNodeId);
|
|
98
|
+
if (toNodeId !== void 0) {
|
|
99
|
+
edge.toNodeId = toNodeId;
|
|
100
|
+
}
|
|
101
|
+
const toUuid = readOptionalString(value.toUuid);
|
|
102
|
+
if (toUuid !== void 0) {
|
|
103
|
+
edge.toUuid = toUuid;
|
|
104
|
+
}
|
|
105
|
+
const weight = readOptionalNumber(value.weight);
|
|
106
|
+
if (weight !== void 0) {
|
|
107
|
+
edge.weight = weight;
|
|
108
|
+
}
|
|
109
|
+
for (const timestampField of ["_creationTime", "createdAt", "updatedAt"]) {
|
|
110
|
+
const timestamp = readOptionalNumber(value[timestampField]);
|
|
111
|
+
if (timestamp !== void 0) {
|
|
112
|
+
edge[timestampField] = timestamp;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return edge;
|
|
116
|
+
}
|
|
26
117
|
function getEdgeTimestamp(edge) {
|
|
27
118
|
if (typeof edge.updatedAt === "number") {
|
|
28
119
|
return edge.updatedAt;
|
|
@@ -35,22 +126,86 @@ function getEdgeTimestamp(edge) {
|
|
|
35
126
|
}
|
|
36
127
|
return null;
|
|
37
128
|
}
|
|
129
|
+
async function collectNodeEndpointRefs(ctx, nodeId) {
|
|
130
|
+
const refs = /* @__PURE__ */ new Set([String(nodeId)]);
|
|
131
|
+
const node = readMetricNodeDoc(await ctx.db.get(nodeId));
|
|
132
|
+
if (node?.globalId) {
|
|
133
|
+
refs.add(node.globalId);
|
|
134
|
+
}
|
|
135
|
+
return [...refs];
|
|
136
|
+
}
|
|
137
|
+
async function collectIncomingEdgeRows(ctx, nodeId, edgeType) {
|
|
138
|
+
const refs = await collectNodeEndpointRefs(ctx, nodeId);
|
|
139
|
+
const seen = /* @__PURE__ */ new Set();
|
|
140
|
+
const edges = [];
|
|
141
|
+
for (const ref of refs) {
|
|
142
|
+
const rows = edgeType === void 0 ? await ctx.db.query("epistemicEdges").withIndex("by_to", (q) => q.eq("toNodeId", ref)).collect() : await ctx.db.query("epistemicEdges").withIndex(
|
|
143
|
+
"by_to_type",
|
|
144
|
+
(q) => q.eq("toNodeId", ref).eq("edgeType", edgeType)
|
|
145
|
+
).collect();
|
|
146
|
+
for (const row of rows) {
|
|
147
|
+
const edge = readIncomingEdgeRow(row);
|
|
148
|
+
if (!edge) {
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
if (edgeType !== void 0 && edge.edgeType !== edgeType) {
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
const key = edge._id === void 0 ? `${edge.fromNodeId}->${edge.toNodeId ?? ref}:${edge.edgeType ?? ""}` : String(edge._id);
|
|
155
|
+
if (seen.has(key)) {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
seen.add(key);
|
|
159
|
+
edges.push(edge);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return edges;
|
|
163
|
+
}
|
|
164
|
+
function sourceEndpointRefs(edge) {
|
|
165
|
+
return [
|
|
166
|
+
edge.fromNodeId,
|
|
167
|
+
edge.sourceGlobalId,
|
|
168
|
+
edge.fromGlobalId,
|
|
169
|
+
edge.fromUuid
|
|
170
|
+
].filter((value) => value !== void 0);
|
|
171
|
+
}
|
|
172
|
+
async function resolveEndpointNode(ctx, refs) {
|
|
173
|
+
const candidates = refs.map((value) => value.trim()).filter(
|
|
174
|
+
(value, index, values) => value.length > 0 && values.indexOf(value) === index
|
|
175
|
+
);
|
|
176
|
+
for (const candidate of candidates) {
|
|
177
|
+
try {
|
|
178
|
+
const direct = readMetricNodeDoc(
|
|
179
|
+
await ctx.db.get(candidate)
|
|
180
|
+
);
|
|
181
|
+
if (direct) {
|
|
182
|
+
return direct;
|
|
183
|
+
}
|
|
184
|
+
} catch {
|
|
185
|
+
}
|
|
186
|
+
const byGlobalId = readMetricNodeDoc(
|
|
187
|
+
await ctx.db.query("epistemicNodes").withIndex("by_globalId", (q) => q.eq("globalId", candidate)).first()
|
|
188
|
+
);
|
|
189
|
+
if (byGlobalId) {
|
|
190
|
+
return byGlobalId;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
38
195
|
async function getEvidenceLinks(ctx, beliefNodeId) {
|
|
39
|
-
const edges = await ctx
|
|
40
|
-
"by_to_type",
|
|
41
|
-
(q) => q.eq("toNodeId", beliefNodeId).eq("edgeType", "informs")
|
|
42
|
-
).collect();
|
|
196
|
+
const edges = await collectIncomingEdgeRows(ctx, beliefNodeId, "informs");
|
|
43
197
|
if (edges.length === 0) {
|
|
44
198
|
return [];
|
|
45
199
|
}
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
const node =
|
|
49
|
-
if (
|
|
50
|
-
|
|
200
|
+
const links = [];
|
|
201
|
+
for (const edge of edges) {
|
|
202
|
+
const node = await resolveEndpointNode(ctx, sourceEndpointRefs(edge));
|
|
203
|
+
if (node?.nodeType !== "evidence" || node.status === "archived") {
|
|
204
|
+
continue;
|
|
51
205
|
}
|
|
52
|
-
|
|
53
|
-
}
|
|
206
|
+
links.push({ edge, node });
|
|
207
|
+
}
|
|
208
|
+
return links;
|
|
54
209
|
}
|
|
55
210
|
function getEvidenceTags(node) {
|
|
56
211
|
const metadata = node.metadata && typeof node.metadata === "object" ? node.metadata : null;
|
|
@@ -76,7 +231,8 @@ async function computeTaggedEvidenceCount(args) {
|
|
|
76
231
|
};
|
|
77
232
|
}
|
|
78
233
|
async function computeContradictionCounts(ctx, beliefNodeId) {
|
|
79
|
-
const
|
|
234
|
+
const contradictionDb = ctx.db;
|
|
235
|
+
const contradictions = await contradictionDb.query("contradictions").withIndex("by_beliefId", (q) => q.eq("beliefId", beliefNodeId)).collect();
|
|
80
236
|
return contradictions.reduce(
|
|
81
237
|
(counts, contradiction) => {
|
|
82
238
|
const status = contradiction.resolutionStatus ?? contradiction.status ?? "unresolved";
|
|
@@ -112,18 +268,16 @@ async function computeEvidenceFreshness(ctx, beliefNodeId, now = Date.now()) {
|
|
|
112
268
|
};
|
|
113
269
|
}
|
|
114
270
|
async function computeDependentBeliefCount(ctx, beliefNodeId) {
|
|
115
|
-
const incomingEdges = await ctx
|
|
271
|
+
const incomingEdges = await collectIncomingEdgeRows(ctx, beliefNodeId);
|
|
116
272
|
const dependencyEdges = incomingEdges.filter(
|
|
117
|
-
(edge) => DEPENDENT_EDGE_TYPES.has(edge.edgeType)
|
|
273
|
+
(edge) => edge.edgeType ? DEPENDENT_EDGE_TYPES.has(edge.edgeType) : false
|
|
118
274
|
);
|
|
119
275
|
if (dependencyEdges.length === 0) {
|
|
120
276
|
return 0;
|
|
121
277
|
}
|
|
122
|
-
const dependentBeliefs = await Promise.all(
|
|
123
|
-
dependencyEdges.map((edge) => ctx.db.get(edge.fromNodeId))
|
|
124
|
-
);
|
|
125
278
|
const uniqueBeliefIds = /* @__PURE__ */ new Set();
|
|
126
|
-
for (const
|
|
279
|
+
for (const edge of dependencyEdges) {
|
|
280
|
+
const node = await resolveEndpointNode(ctx, sourceEndpointRefs(edge));
|
|
127
281
|
if (node && node.nodeType === "belief" && node.status !== "archived" && node.status !== "deleted") {
|
|
128
282
|
uniqueBeliefIds.add(String(node._id));
|
|
129
283
|
}
|
|
@@ -133,7 +287,10 @@ async function computeDependentBeliefCount(ctx, beliefNodeId) {
|
|
|
133
287
|
async function snapshotEvidentialMetric(args) {
|
|
134
288
|
switch (args.metric) {
|
|
135
289
|
case "evidence_count": {
|
|
136
|
-
const count = await computeEvidenceCountMetric(
|
|
290
|
+
const count = await computeEvidenceCountMetric(
|
|
291
|
+
args.ctx,
|
|
292
|
+
args.beliefNodeId
|
|
293
|
+
);
|
|
137
294
|
return {
|
|
138
295
|
metric: args.metric,
|
|
139
296
|
value: count,
|
|
@@ -141,7 +298,10 @@ async function snapshotEvidentialMetric(args) {
|
|
|
141
298
|
};
|
|
142
299
|
}
|
|
143
300
|
case "contradiction_status": {
|
|
144
|
-
const counts = await computeContradictionCounts(
|
|
301
|
+
const counts = await computeContradictionCounts(
|
|
302
|
+
args.ctx,
|
|
303
|
+
args.beliefNodeId
|
|
304
|
+
);
|
|
145
305
|
return {
|
|
146
306
|
metric: args.metric,
|
|
147
307
|
value: counts.activeCount,
|
|
@@ -161,7 +321,10 @@ async function snapshotEvidentialMetric(args) {
|
|
|
161
321
|
};
|
|
162
322
|
}
|
|
163
323
|
case "dependent_count": {
|
|
164
|
-
const count = await computeDependentBeliefCount(
|
|
324
|
+
const count = await computeDependentBeliefCount(
|
|
325
|
+
args.ctx,
|
|
326
|
+
args.beliefNodeId
|
|
327
|
+
);
|
|
165
328
|
return {
|
|
166
329
|
metric: args.metric,
|
|
167
330
|
value: count,
|
|
@@ -177,7 +340,9 @@ async function snapshotEvidentialMetric(args) {
|
|
|
177
340
|
}
|
|
178
341
|
}
|
|
179
342
|
async function evaluateBuiltInEvidentialContract(args) {
|
|
180
|
-
const config = parseEvidentialEvaluatorConfig(
|
|
343
|
+
const config = parseEvidentialEvaluatorConfig(
|
|
344
|
+
args.contract.condition.evaluatorConfig
|
|
345
|
+
);
|
|
181
346
|
const snapshot = await snapshotEvidentialMetric({
|
|
182
347
|
ctx: args.ctx,
|
|
183
348
|
beliefNodeId: args.belief._id,
|
|
@@ -185,7 +350,10 @@ async function evaluateBuiltInEvidentialContract(args) {
|
|
|
185
350
|
now: args.now
|
|
186
351
|
});
|
|
187
352
|
const comparisonSatisfied = snapshot.value !== null && compareMetricValue(config.operator, snapshot.value, config.threshold);
|
|
188
|
-
const result =
|
|
353
|
+
const result = resolveComparisonResult(
|
|
354
|
+
args.contract.direction,
|
|
355
|
+
comparisonSatisfied
|
|
356
|
+
);
|
|
189
357
|
return {
|
|
190
358
|
result,
|
|
191
359
|
rationale: buildEvidentialRationale({
|
|
@@ -205,57 +373,66 @@ async function evaluateBuiltInEvidentialContract(args) {
|
|
|
205
373
|
}
|
|
206
374
|
};
|
|
207
375
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
"
|
|
214
|
-
"
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
376
|
+
function evaluateMetricCheckerContract(args) {
|
|
377
|
+
return Promise.resolve().then(() => {
|
|
378
|
+
const config = parseMetricCheckerConfig(
|
|
379
|
+
args.contract.condition.evaluatorConfig
|
|
380
|
+
);
|
|
381
|
+
const input = getEvaluatorInputRecord(args.inputData, "metricData");
|
|
382
|
+
const metric = typeof input.metric === "string" && input.metric.length > 0 ? input.metric : config.metric;
|
|
383
|
+
const observedValue = pickFiniteNumber(input, [
|
|
384
|
+
"observedValue",
|
|
385
|
+
"currentValue",
|
|
386
|
+
"metricValue",
|
|
387
|
+
"value"
|
|
388
|
+
]) ?? config.observedValue ?? config.currentValue ?? config.metricValue ?? null;
|
|
389
|
+
if (observedValue === null) {
|
|
390
|
+
return {
|
|
391
|
+
result: "inconclusive",
|
|
392
|
+
rationale: `metric_checker is awaiting data for ${metric ?? args.contract.condition.expression}.`,
|
|
393
|
+
data: {
|
|
394
|
+
metric,
|
|
395
|
+
observedValue: null,
|
|
396
|
+
operator: config.operator,
|
|
397
|
+
threshold: config.threshold,
|
|
398
|
+
unit: config.unit
|
|
399
|
+
}
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
const comparisonSatisfied = compareMetricValue(
|
|
403
|
+
config.operator,
|
|
404
|
+
observedValue,
|
|
405
|
+
config.threshold
|
|
406
|
+
);
|
|
407
|
+
const result = resolveComparisonResult(
|
|
408
|
+
args.contract.direction,
|
|
409
|
+
comparisonSatisfied
|
|
410
|
+
);
|
|
219
411
|
return {
|
|
220
|
-
result
|
|
221
|
-
rationale:
|
|
412
|
+
result,
|
|
413
|
+
rationale: buildComparisonRationale({
|
|
414
|
+
label: metric ?? "metric",
|
|
415
|
+
observedValue,
|
|
416
|
+
operator: config.operator,
|
|
417
|
+
threshold: config.threshold,
|
|
418
|
+
comparisonSatisfied,
|
|
419
|
+
result,
|
|
420
|
+
unit: config.unit
|
|
421
|
+
}),
|
|
222
422
|
data: {
|
|
223
423
|
metric,
|
|
224
|
-
observedValue
|
|
424
|
+
observedValue,
|
|
225
425
|
operator: config.operator,
|
|
226
426
|
threshold: config.threshold,
|
|
227
427
|
unit: config.unit
|
|
228
428
|
}
|
|
229
429
|
};
|
|
230
|
-
}
|
|
231
|
-
const comparisonSatisfied = compareMetricValue(
|
|
232
|
-
config.operator,
|
|
233
|
-
observedValue,
|
|
234
|
-
config.threshold
|
|
235
|
-
);
|
|
236
|
-
const result = resolveComparisonResult(args.contract.direction, comparisonSatisfied);
|
|
237
|
-
return {
|
|
238
|
-
result,
|
|
239
|
-
rationale: buildComparisonRationale({
|
|
240
|
-
label: metric ?? "metric",
|
|
241
|
-
observedValue,
|
|
242
|
-
operator: config.operator,
|
|
243
|
-
threshold: config.threshold,
|
|
244
|
-
comparisonSatisfied,
|
|
245
|
-
result,
|
|
246
|
-
unit: config.unit
|
|
247
|
-
}),
|
|
248
|
-
data: {
|
|
249
|
-
metric,
|
|
250
|
-
observedValue,
|
|
251
|
-
operator: config.operator,
|
|
252
|
-
threshold: config.threshold,
|
|
253
|
-
unit: config.unit
|
|
254
|
-
}
|
|
255
|
-
};
|
|
430
|
+
});
|
|
256
431
|
}
|
|
257
432
|
async function evaluateReferenceCheckCounterContract(args) {
|
|
258
|
-
const config = parseReferenceCheckCounterConfig(
|
|
433
|
+
const config = parseReferenceCheckCounterConfig(
|
|
434
|
+
args.contract.condition.evaluatorConfig
|
|
435
|
+
);
|
|
259
436
|
const input = getEvaluatorInputRecord(args.inputData, "referenceCheckData");
|
|
260
437
|
const tag = typeof input.tag === "string" && input.tag.trim().length > 0 ? input.tag.trim() : config.tag;
|
|
261
438
|
const snapshot = await computeTaggedEvidenceCount({
|
|
@@ -269,7 +446,10 @@ async function evaluateReferenceCheckCounterContract(args) {
|
|
|
269
446
|
snapshot.count,
|
|
270
447
|
config.threshold
|
|
271
448
|
);
|
|
272
|
-
const result = resolveComparisonResult(
|
|
449
|
+
const result = resolveComparisonResult(
|
|
450
|
+
args.contract.direction,
|
|
451
|
+
comparisonSatisfied
|
|
452
|
+
);
|
|
273
453
|
return {
|
|
274
454
|
result,
|
|
275
455
|
rationale: buildComparisonRationale({
|
|
@@ -291,131 +471,168 @@ async function evaluateReferenceCheckCounterContract(args) {
|
|
|
291
471
|
}
|
|
292
472
|
};
|
|
293
473
|
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
"temporal_deadline requires contract.deadline to be set to a finite timestamp."
|
|
298
|
-
);
|
|
299
|
-
}
|
|
300
|
-
const config = parseTemporalDeadlineConfig(args.contract.condition.evaluatorConfig);
|
|
301
|
-
const input = getEvaluatorInputRecord(args.inputData, "temporalData");
|
|
302
|
-
const label = (typeof input.label === "string" && input.label.length > 0 ? input.label : config.label) ?? args.contract.title ?? args.contract.condition.expression;
|
|
303
|
-
const completedAt = pickFiniteNumber(input, [
|
|
304
|
-
"completedAt",
|
|
305
|
-
"observedAt",
|
|
306
|
-
"satisfiedAt",
|
|
307
|
-
"achievedAt"
|
|
308
|
-
]) ?? config.completedAt ?? config.observedAt ?? config.satisfiedAt ?? config.achievedAt;
|
|
309
|
-
const completed = input.completed === true || config.completed === true || completedAt !== void 0;
|
|
310
|
-
if (completed) {
|
|
311
|
-
if (completedAt !== void 0 && completedAt > args.contract.deadline) {
|
|
312
|
-
return {
|
|
313
|
-
result: "expired",
|
|
314
|
-
rationale: `${label} completed at ${completedAt}, after deadline ${args.contract.deadline}.`,
|
|
315
|
-
data: {
|
|
316
|
-
label,
|
|
317
|
-
deadline: args.contract.deadline,
|
|
318
|
-
completed: true,
|
|
319
|
-
completedAt,
|
|
320
|
-
missedDeadline: true,
|
|
321
|
-
overdueByMs: completedAt - args.contract.deadline
|
|
322
|
-
}
|
|
323
|
-
};
|
|
324
|
-
}
|
|
325
|
-
const result = args.contract.direction === "falsifies" ? "disconfirmed" : "confirmed";
|
|
474
|
+
function resolveCompletedTemporalDeadlineResult(args) {
|
|
475
|
+
const { completedAt, context, deadline, label } = args;
|
|
476
|
+
if (completedAt !== void 0 && completedAt > deadline) {
|
|
326
477
|
return {
|
|
327
|
-
result,
|
|
328
|
-
rationale: `${label} completed
|
|
478
|
+
result: "expired",
|
|
479
|
+
rationale: `${label} completed at ${completedAt}, after deadline ${deadline}.`,
|
|
329
480
|
data: {
|
|
330
481
|
label,
|
|
331
|
-
deadline
|
|
482
|
+
deadline,
|
|
332
483
|
completed: true,
|
|
333
|
-
completedAt
|
|
334
|
-
missedDeadline:
|
|
484
|
+
completedAt,
|
|
485
|
+
missedDeadline: true,
|
|
486
|
+
overdueByMs: completedAt - deadline
|
|
335
487
|
}
|
|
336
488
|
};
|
|
337
489
|
}
|
|
338
|
-
|
|
490
|
+
const result = context.contract.direction === "falsifies" ? "disconfirmed" : "confirmed";
|
|
491
|
+
return {
|
|
492
|
+
result,
|
|
493
|
+
rationale: `${label} completed before deadline ${deadline}.`,
|
|
494
|
+
data: {
|
|
495
|
+
label,
|
|
496
|
+
deadline,
|
|
497
|
+
completed: true,
|
|
498
|
+
completedAt: completedAt ?? null,
|
|
499
|
+
missedDeadline: false
|
|
500
|
+
}
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
function resolveOpenTemporalDeadlineResult(args) {
|
|
504
|
+
const { context, deadline, label } = args;
|
|
505
|
+
if (context.now > deadline) {
|
|
339
506
|
return {
|
|
340
507
|
result: "expired",
|
|
341
|
-
rationale: `${label} missed deadline ${
|
|
508
|
+
rationale: `${label} missed deadline ${deadline}; temporal contract expired.`,
|
|
342
509
|
data: {
|
|
343
510
|
label,
|
|
344
|
-
deadline
|
|
511
|
+
deadline,
|
|
345
512
|
completed: false,
|
|
346
|
-
overdueByMs:
|
|
513
|
+
overdueByMs: context.now - deadline
|
|
347
514
|
}
|
|
348
515
|
};
|
|
349
516
|
}
|
|
350
517
|
return {
|
|
351
518
|
result: "inconclusive",
|
|
352
|
-
rationale: `${label} is still before deadline ${
|
|
519
|
+
rationale: `${label} is still before deadline ${deadline}; awaiting outcome.`,
|
|
353
520
|
data: {
|
|
354
521
|
label,
|
|
355
|
-
deadline
|
|
522
|
+
deadline,
|
|
356
523
|
completed: false,
|
|
357
|
-
timeRemainingMs:
|
|
524
|
+
timeRemainingMs: deadline - context.now
|
|
358
525
|
}
|
|
359
526
|
};
|
|
360
527
|
}
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
528
|
+
function evaluateTemporalDeadlineContract(args) {
|
|
529
|
+
return Promise.resolve().then(() => {
|
|
530
|
+
if (typeof args.contract.deadline !== "number" || !Number.isFinite(args.contract.deadline)) {
|
|
531
|
+
throw new Error(
|
|
532
|
+
"temporal_deadline requires contract.deadline to be set to a finite timestamp."
|
|
533
|
+
);
|
|
534
|
+
}
|
|
535
|
+
const deadline = args.contract.deadline;
|
|
536
|
+
const config = parseTemporalDeadlineConfig(
|
|
537
|
+
args.contract.condition.evaluatorConfig
|
|
538
|
+
);
|
|
539
|
+
const input = getEvaluatorInputRecord(args.inputData, "temporalData");
|
|
540
|
+
const label = (typeof input.label === "string" && input.label.length > 0 ? input.label : config.label) ?? args.contract.title ?? args.contract.condition.expression;
|
|
541
|
+
const completedAt = pickFiniteNumber(input, [
|
|
542
|
+
"completedAt",
|
|
543
|
+
"observedAt",
|
|
544
|
+
"satisfiedAt",
|
|
545
|
+
"achievedAt"
|
|
546
|
+
]) ?? config.completedAt ?? config.observedAt ?? config.satisfiedAt ?? config.achievedAt;
|
|
547
|
+
const completed = input.completed === true || config.completed === true || completedAt !== void 0;
|
|
548
|
+
if (completed) {
|
|
549
|
+
return resolveCompletedTemporalDeadlineResult({
|
|
550
|
+
completedAt,
|
|
551
|
+
context: args,
|
|
552
|
+
deadline,
|
|
553
|
+
label
|
|
554
|
+
});
|
|
555
|
+
}
|
|
556
|
+
return resolveOpenTemporalDeadlineResult({
|
|
557
|
+
context: args,
|
|
558
|
+
deadline,
|
|
559
|
+
label
|
|
560
|
+
});
|
|
561
|
+
});
|
|
562
|
+
}
|
|
563
|
+
function evaluateMarketIndexComparatorContract(args) {
|
|
564
|
+
return Promise.resolve().then(() => {
|
|
565
|
+
const config = parseMarketIndexComparatorConfig(
|
|
566
|
+
args.contract.condition.evaluatorConfig
|
|
567
|
+
);
|
|
568
|
+
const input = getEvaluatorInputRecord(args.inputData, "marketIndexData");
|
|
569
|
+
const subject = typeof input.subject === "string" && input.subject.length > 0 ? input.subject : config.subject;
|
|
570
|
+
const benchmark = typeof input.benchmark === "string" && input.benchmark.length > 0 ? input.benchmark : config.benchmark;
|
|
571
|
+
const subjectValue = pickFiniteNumber(input, ["subjectValue", "primaryValue", "leftValue"]) ?? config.subjectValue ?? config.primaryValue ?? null;
|
|
572
|
+
const benchmarkValue = pickFiniteNumber(input, [
|
|
573
|
+
"benchmarkValue",
|
|
574
|
+
"comparisonValue",
|
|
575
|
+
"rightValue"
|
|
576
|
+
]) ?? config.benchmarkValue ?? config.comparisonValue ?? null;
|
|
577
|
+
if (subjectValue === null || benchmarkValue === null) {
|
|
578
|
+
return {
|
|
579
|
+
result: "inconclusive",
|
|
580
|
+
rationale: "market_index_comparator is awaiting both subject and benchmark values.",
|
|
581
|
+
data: {
|
|
582
|
+
subject,
|
|
583
|
+
subjectValue,
|
|
584
|
+
benchmark,
|
|
585
|
+
benchmarkValue,
|
|
586
|
+
operator: config.operator,
|
|
587
|
+
threshold: config.threshold
|
|
588
|
+
}
|
|
589
|
+
};
|
|
590
|
+
}
|
|
591
|
+
if (benchmarkValue === 0) {
|
|
592
|
+
throw new Error(
|
|
593
|
+
"market_index_comparator cannot compare against a zero benchmark value."
|
|
594
|
+
);
|
|
595
|
+
}
|
|
596
|
+
const differentialPercent = (subjectValue - benchmarkValue) / Math.abs(benchmarkValue) * 100;
|
|
597
|
+
const comparisonSatisfied = compareMetricValue(
|
|
598
|
+
config.operator,
|
|
599
|
+
differentialPercent,
|
|
600
|
+
config.threshold
|
|
601
|
+
);
|
|
602
|
+
const result = resolveComparisonResult(
|
|
603
|
+
args.contract.direction,
|
|
604
|
+
comparisonSatisfied
|
|
605
|
+
);
|
|
369
606
|
return {
|
|
370
|
-
result
|
|
371
|
-
rationale:
|
|
607
|
+
result,
|
|
608
|
+
rationale: buildComparisonRationale({
|
|
609
|
+
label: `${subject ?? "subject"} vs ${benchmark ?? "benchmark"} differential`,
|
|
610
|
+
observedValue: differentialPercent,
|
|
611
|
+
operator: config.operator,
|
|
612
|
+
threshold: config.threshold,
|
|
613
|
+
comparisonSatisfied,
|
|
614
|
+
result,
|
|
615
|
+
unit: "%"
|
|
616
|
+
}),
|
|
372
617
|
data: {
|
|
373
618
|
subject,
|
|
374
619
|
subjectValue,
|
|
375
620
|
benchmark,
|
|
376
621
|
benchmarkValue,
|
|
622
|
+
differentialPercent,
|
|
377
623
|
operator: config.operator,
|
|
378
624
|
threshold: config.threshold
|
|
379
625
|
}
|
|
380
626
|
};
|
|
381
|
-
}
|
|
382
|
-
if (benchmarkValue === 0) {
|
|
383
|
-
throw new Error(
|
|
384
|
-
"market_index_comparator cannot compare against a zero benchmark value."
|
|
385
|
-
);
|
|
386
|
-
}
|
|
387
|
-
const differentialPercent = (subjectValue - benchmarkValue) / Math.abs(benchmarkValue) * 100;
|
|
388
|
-
const comparisonSatisfied = compareMetricValue(
|
|
389
|
-
config.operator,
|
|
390
|
-
differentialPercent,
|
|
391
|
-
config.threshold
|
|
392
|
-
);
|
|
393
|
-
const result = resolveComparisonResult(args.contract.direction, comparisonSatisfied);
|
|
394
|
-
return {
|
|
395
|
-
result,
|
|
396
|
-
rationale: buildComparisonRationale({
|
|
397
|
-
label: `${subject ?? "subject"} vs ${benchmark ?? "benchmark"} differential`,
|
|
398
|
-
observedValue: differentialPercent,
|
|
399
|
-
operator: config.operator,
|
|
400
|
-
threshold: config.threshold,
|
|
401
|
-
comparisonSatisfied,
|
|
402
|
-
result,
|
|
403
|
-
unit: "%"
|
|
404
|
-
}),
|
|
405
|
-
data: {
|
|
406
|
-
subject,
|
|
407
|
-
subjectValue,
|
|
408
|
-
benchmark,
|
|
409
|
-
benchmarkValue,
|
|
410
|
-
differentialPercent,
|
|
411
|
-
operator: config.operator,
|
|
412
|
-
threshold: config.threshold
|
|
413
|
-
}
|
|
414
|
-
};
|
|
627
|
+
});
|
|
415
628
|
}
|
|
416
629
|
var METRIC_COMPARATOR_EVALUATOR_NAMES = {
|
|
417
630
|
evidential: "evidential",
|
|
418
|
-
evidentialAliases: /* @__PURE__ */ new Set([
|
|
631
|
+
evidentialAliases: /* @__PURE__ */ new Set([
|
|
632
|
+
"evidential",
|
|
633
|
+
"built_in_evidential",
|
|
634
|
+
"builtin_evidential"
|
|
635
|
+
]),
|
|
419
636
|
metricChecker: "metric_checker",
|
|
420
637
|
referenceCheckCounter: "reference_check_counter",
|
|
421
638
|
temporalDeadline: "temporal_deadline",
|