@tangle-network/agent-eval 0.187.1 → 0.188.0
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/CHANGELOG.md +63 -0
- package/dist/adapters/http.d.ts +2 -2
- package/dist/{agent-profile-uAIQK3Nr.d.ts → agent-profile-CfbuZk8b.d.ts} +4 -4
- package/dist/{agent-profile-uAIQK3Nr.d.ts.map → agent-profile-CfbuZk8b.d.ts.map} +1 -1
- package/dist/analyst/index.d.ts +12 -12
- package/dist/analyst/index.d.ts.map +1 -1
- package/dist/analyst/index.js +6 -6
- package/dist/{analyze-runs-DapYZz02.d.ts → analyze-runs-CLz5O01x.d.ts} +5 -5
- package/dist/{analyze-runs-DapYZz02.d.ts.map → analyze-runs-CLz5O01x.d.ts.map} +1 -1
- package/dist/{benchmark-command-CERRH0E6.js → benchmark-command-CdUGku3W.js} +12 -12
- package/dist/benchmark-command-CdUGku3W.js.map +1 -0
- package/dist/benchmarks/index.d.ts +4 -4
- package/dist/benchmarks/index.js +3 -3
- package/dist/builder-eval/index.d.ts +3 -3
- package/dist/builder-eval/index.js +1 -1
- package/dist/campaign/index.d.ts +5 -5
- package/dist/campaign/index.js +5 -5
- package/dist/{campaign-DlxdTOvw.js → campaign-DZuysBbS.js} +6 -6
- package/dist/{campaign-DlxdTOvw.js.map → campaign-DZuysBbS.js.map} +1 -1
- package/dist/{chat-client-DqPqWzVV.js → chat-client-C4dg7Ng_.js} +2 -2
- package/dist/{chat-client-DqPqWzVV.js.map → chat-client-C4dg7Ng_.js.map} +1 -1
- package/dist/{chat-json-call-C-DnDxEy.js → chat-json-call-JVGbfx95.js} +2 -2
- package/dist/{chat-json-call-C-DnDxEy.js.map → chat-json-call-JVGbfx95.js.map} +1 -1
- package/dist/cli.js +4 -4
- package/dist/{client-DCc7a8ZC.d.ts → client-CFj9dfcn.d.ts} +4 -4
- package/dist/{client-DCc7a8ZC.d.ts.map → client-CFj9dfcn.d.ts.map} +1 -1
- package/dist/contract/index.d.ts +11 -11
- package/dist/contract/index.js +6 -6
- package/dist/{counterfactual-CLgrwhkY.d.ts → counterfactual-CPaWN99-.d.ts} +4 -4
- package/dist/{counterfactual-CLgrwhkY.d.ts.map → counterfactual-CPaWN99-.d.ts.map} +1 -1
- package/dist/{counterfactual-Bjq1mlUu.js → counterfactual-DtMWvn7D.js} +2 -2
- package/dist/{counterfactual-Bjq1mlUu.js.map → counterfactual-DtMWvn7D.js.map} +1 -1
- package/dist/{default-registry-DMxeb4GD.d.ts → default-registry-BLsGfnoO.d.ts} +6 -6
- package/dist/{default-registry-DMxeb4GD.d.ts.map → default-registry-BLsGfnoO.d.ts.map} +1 -1
- package/dist/{default-registry-Ca2IWH1X.js → default-registry-BtZ_t-9b.js} +2 -2
- package/dist/{default-registry-Ca2IWH1X.js.map → default-registry-BtZ_t-9b.js.map} +1 -1
- package/dist/{define-agent-eval-C0EqJ9Gz.js → define-agent-eval-ChtddasD.js} +3 -3
- package/dist/{define-agent-eval-C0EqJ9Gz.js.map → define-agent-eval-ChtddasD.js.map} +1 -1
- package/dist/{define-agent-eval-CGBwPPaq.d.ts → define-agent-eval-CsicmDxt.d.ts} +7 -7
- package/dist/{define-agent-eval-CGBwPPaq.d.ts.map → define-agent-eval-CsicmDxt.d.ts.map} +1 -1
- package/dist/diagnosis/index.d.ts +38 -96
- package/dist/diagnosis/index.d.ts.map +1 -1
- package/dist/diagnosis/index.js +83 -134
- package/dist/diagnosis/index.js.map +1 -1
- package/dist/{dspy-rlm-engine-BE9lCzzL.js → dspy-rlm-engine-sPX7B5ac.js} +3 -3
- package/dist/{dspy-rlm-engine-BE9lCzzL.js.map → dspy-rlm-engine-sPX7B5ac.js.map} +1 -1
- package/dist/emitter-DbMXUIVP.js +334 -0
- package/dist/emitter-DbMXUIVP.js.map +1 -0
- package/dist/{emitter-Cs0egaFd.d.ts → emitter-HcCmFQl_.d.ts} +37 -6
- package/dist/emitter-HcCmFQl_.d.ts.map +1 -0
- package/dist/{engine-DNlKhIm0.d.ts → engine-Gw2n1irt.d.ts} +15 -5
- package/dist/engine-Gw2n1irt.d.ts.map +1 -0
- package/dist/{eval-campaign-XFHEpN86.js → eval-campaign-CeotQ1ZR.js} +7 -4
- package/dist/{eval-campaign-XFHEpN86.js.map → eval-campaign-CeotQ1ZR.js.map} +1 -1
- package/dist/evaluation.d.ts +2 -2
- package/dist/{exact-types-BEHN7tnq.d.ts → exact-types-CrhPoDp8.d.ts} +2 -2
- package/dist/{exact-types-BEHN7tnq.d.ts.map → exact-types-CrhPoDp8.d.ts.map} +1 -1
- package/dist/experiment/index.d.ts +57 -3
- package/dist/experiment/index.d.ts.map +1 -1
- package/dist/experiment/index.js +119 -2
- package/dist/experiment/index.js.map +1 -1
- package/dist/{external-optimizer-process-BbhvXTFx.js → external-optimizer-process-D3BLpZyR.js} +2 -2
- package/dist/{external-optimizer-process-BbhvXTFx.js.map → external-optimizer-process-D3BLpZyR.js.map} +1 -1
- package/dist/{external-optimizer-subprocess-DMgmqTB6.js → external-optimizer-subprocess-BrfsgL92.js} +2 -2
- package/dist/{external-optimizer-subprocess-DMgmqTB6.js.map → external-optimizer-subprocess-BrfsgL92.js.map} +1 -1
- package/dist/{failure-cluster-OldNRoAt.d.ts → failure-cluster-CbgEDcFJ.d.ts} +3 -3
- package/dist/{failure-cluster-OldNRoAt.d.ts.map → failure-cluster-CbgEDcFJ.d.ts.map} +1 -1
- package/dist/failure-taxonomy-CjabTATj.js +538 -0
- package/dist/failure-taxonomy-CjabTATj.js.map +1 -0
- package/dist/{feedback-trajectory-CytTR7u4.d.ts → feedback-trajectory-BJi4t3Vf.d.ts} +6 -6
- package/dist/{feedback-trajectory-CytTR7u4.d.ts.map → feedback-trajectory-BJi4t3Vf.d.ts.map} +1 -1
- package/dist/hosted/index.d.ts +2 -2
- package/dist/{index-CKZa_rnt.d.ts → index-B-s8qDRJ.d.ts} +2 -2
- package/dist/{index-CKZa_rnt.d.ts.map → index-B-s8qDRJ.d.ts.map} +1 -1
- package/dist/{index-YZrbnBSV.d.ts → index-BD1oSbHr.d.ts} +11 -11
- package/dist/{index-YZrbnBSV.d.ts.map → index-BD1oSbHr.d.ts.map} +1 -1
- package/dist/{index-vYNHCV2G.d.ts → index-Ca0_IjFu.d.ts} +7 -7
- package/dist/{index-vYNHCV2G.d.ts.map → index-Ca0_IjFu.d.ts.map} +1 -1
- package/dist/{index-BRsrfSHT.d.ts → index-eTTnPe3r.d.ts} +9 -9
- package/dist/{index-BRsrfSHT.d.ts.map → index-eTTnPe3r.d.ts.map} +1 -1
- package/dist/index.d.ts +383 -68
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1482 -207
- package/dist/index.js.map +1 -1
- package/dist/{insight-report-DpOo-3iL.d.ts → insight-report-DeE1solA.d.ts} +4 -4
- package/dist/{insight-report-DpOo-3iL.d.ts.map → insight-report-DeE1solA.d.ts.map} +1 -1
- package/dist/{integrity-Cy9WHAtb.js → integrity-BFP4kjGj.js} +6 -1
- package/dist/integrity-BFP4kjGj.js.map +1 -0
- package/dist/{integrity-rGOfSUle.d.ts → integrity-CaeNeusS.d.ts} +4 -4
- package/dist/integrity-CaeNeusS.d.ts.map +1 -0
- package/dist/jev.d.ts +2 -2
- package/dist/{kind-factory-V79Hw0AU.js → kind-factory-g1ROw67A.js} +15 -4
- package/dist/{kind-factory-V79Hw0AU.js.map → kind-factory-g1ROw67A.js.map} +1 -1
- package/dist/{llm-client-DDhZ29Vm.js → llm-client-DF9bPNYA.js} +2 -2
- package/dist/{llm-client-DDhZ29Vm.js.map → llm-client-DF9bPNYA.js.map} +1 -1
- package/dist/{llm-judge-BVso5x-u.js → llm-judge-DF18J3CR.js} +9 -9
- package/dist/llm-judge-DF18J3CR.js.map +1 -0
- package/dist/{matrix-CPKsRY8Y.d.ts → matrix-BvA1WUpj.d.ts} +2 -2
- package/dist/{matrix-CPKsRY8Y.d.ts.map → matrix-BvA1WUpj.d.ts.map} +1 -1
- package/dist/meta-eval/index.d.ts +4 -4
- package/dist/{mint-BI14xehJ.d.ts → mint-CJFSYBIU.d.ts} +3 -3
- package/dist/{mint-BI14xehJ.d.ts.map → mint-CJFSYBIU.d.ts.map} +1 -1
- package/dist/multishot/golden/index.d.ts +1 -1
- package/dist/multishot/index.d.ts +2 -2
- package/dist/openapi.json +1 -1
- package/dist/pipelines/index.d.ts +67 -12
- package/dist/pipelines/index.d.ts.map +1 -1
- package/dist/pipelines/index.js +178 -41
- package/dist/pipelines/index.js.map +1 -1
- package/dist/{prime-protocol-CDBcL9NM.d.ts → prime-protocol-CF8Z43Fj.d.ts} +2 -2
- package/dist/{prime-protocol-CDBcL9NM.d.ts.map → prime-protocol-CF8Z43Fj.d.ts.map} +1 -1
- package/dist/{produced-state-Cn9ECr4v.js → produced-state-xsMMjYVc.js} +3 -3
- package/dist/{produced-state-Cn9ECr4v.js.map → produced-state-xsMMjYVc.js.map} +1 -1
- package/dist/{query-D6W6MaGx.d.ts → query-DBUQhehH.d.ts} +3 -3
- package/dist/{query-D6W6MaGx.d.ts.map → query-DBUQhehH.d.ts.map} +1 -1
- package/dist/random-DGEyr3zG.d.ts +83 -0
- package/dist/random-DGEyr3zG.d.ts.map +1 -0
- package/dist/{raw-provider-sink-BQd7mzyT.js → raw-provider-sink-C96CcqeG.js} +19 -56
- package/dist/raw-provider-sink-C96CcqeG.js.map +1 -0
- package/dist/redact-DPoH1-OW.d.ts +158 -0
- package/dist/redact-DPoH1-OW.d.ts.map +1 -0
- package/dist/redact-DxwlUAvh.js +824 -0
- package/dist/redact-DxwlUAvh.js.map +1 -0
- package/dist/{registry-D5Ly3GRV.d.ts → registry-BM2Kdk8T.d.ts} +4 -4
- package/dist/{registry-D5Ly3GRV.d.ts.map → registry-BM2Kdk8T.d.ts.map} +1 -1
- package/dist/{release-confidence-CSp3MsU4.d.ts → release-confidence-CG4Z9QLB.d.ts} +4 -4
- package/dist/{release-confidence-CSp3MsU4.d.ts.map → release-confidence-CG4Z9QLB.d.ts.map} +1 -1
- package/dist/{report-command-CSTjzFGY.js → report-command-DKJ_yAIj.js} +21 -12
- package/dist/{report-command-CSTjzFGY.js.map → report-command-DKJ_yAIj.js.map} +1 -1
- package/dist/reporting.d.ts +3 -3
- package/dist/{researcher-D7E92STT.d.ts → researcher-Bjcd_8T_.d.ts} +7 -7
- package/dist/{researcher-D7E92STT.d.ts.map → researcher-Bjcd_8T_.d.ts.map} +1 -1
- package/dist/{reward-hacking-BIQ2BWLG.d.ts → reward-hacking-DrKXJtgH.d.ts} +2 -2
- package/dist/{reward-hacking-BIQ2BWLG.d.ts.map → reward-hacking-DrKXJtgH.d.ts.map} +1 -1
- package/dist/rl.d.ts +8 -8
- package/dist/rl.js +1 -1
- package/dist/rollout/index.d.ts +2 -2
- package/dist/{rubric-predictive-validity-CTU8y8Cv.d.ts → rubric-predictive-validity-B14yBAmM.d.ts} +2 -2
- package/dist/{rubric-predictive-validity-CTU8y8Cv.d.ts.map → rubric-predictive-validity-B14yBAmM.d.ts.map} +1 -1
- package/dist/{run-record-D9wS35fK.d.ts → run-record-xEULpgML.d.ts} +2 -2
- package/dist/{run-record-D9wS35fK.d.ts.map → run-record-xEULpgML.d.ts.map} +1 -1
- package/dist/{schema-CR5cpjQ3.d.ts → schema-2g7trUwH.d.ts} +17 -2
- package/dist/schema-2g7trUwH.d.ts.map +1 -0
- package/dist/schema-CSf6qWgZ.js.map +1 -1
- package/dist/{semantic-concept-judge-Cnt0TWp0.js → semantic-concept-judge-70LxrCSL.js} +5 -5
- package/dist/{semantic-concept-judge-Cnt0TWp0.js.map → semantic-concept-judge-70LxrCSL.js.map} +1 -1
- package/dist/{series-convergence-BnMs_uAr.d.ts → series-convergence-DY7ha0kx.d.ts} +2 -2
- package/dist/{series-convergence-BnMs_uAr.d.ts.map → series-convergence-DY7ha0kx.d.ts.map} +1 -1
- package/dist/{server-DmpcFiVK.js → server-C8XvqCg8.js} +2 -2
- package/dist/{server-DmpcFiVK.js.map → server-C8XvqCg8.js.map} +1 -1
- package/dist/{skillopt-optimization-method-Cc9SVLqi.js → skillopt-optimization-method-C60h0Got.js} +5 -5
- package/dist/{skillopt-optimization-method-Cc9SVLqi.js.map → skillopt-optimization-method-C60h0Got.js.map} +1 -1
- package/dist/spans-W0o8pbEg.d.ts +60 -0
- package/dist/spans-W0o8pbEg.d.ts.map +1 -0
- package/dist/{statistical-heldout-DTmhTW8P.d.ts → statistical-heldout-CPv-y6sK.d.ts} +3 -3
- package/dist/{statistical-heldout-DTmhTW8P.d.ts.map → statistical-heldout-CPv-y6sK.d.ts.map} +1 -1
- package/dist/{store-BErPvYBr.d.ts → store-C4avFjIi.d.ts} +2 -2
- package/dist/{store-BErPvYBr.d.ts.map → store-C4avFjIi.d.ts.map} +1 -1
- package/dist/{store-otlp-2gYCy-v0.js → store-otlp-DPgzSQKS.js} +2 -2
- package/dist/{store-otlp-2gYCy-v0.js.map → store-otlp-DPgzSQKS.js.map} +1 -1
- package/dist/{store-tool-spans-B3bX9yqn.d.ts → store-tool-spans-C2lLwDzg.d.ts} +9 -54
- package/dist/store-tool-spans-C2lLwDzg.d.ts.map +1 -0
- package/dist/{store-tool-spans-B1e6Auc2.js → store-tool-spans-ClPxcvh2.js} +4 -4
- package/dist/{store-tool-spans-B1e6Auc2.js.map → store-tool-spans-ClPxcvh2.js.map} +1 -1
- package/dist/storyboard/index.d.ts +1 -1
- package/dist/{summary-report-Iy6kXo8x.d.ts → summary-report-SNvJoAvD.d.ts} +3 -3
- package/dist/{summary-report-Iy6kXo8x.d.ts.map → summary-report-SNvJoAvD.d.ts.map} +1 -1
- package/dist/supervisor-run/index.d.ts.map +1 -1
- package/dist/supervisor-run/index.js +1 -1
- package/dist/{tool-groups-veQYPiTy.d.ts → tool-groups-CCQqAa16.d.ts} +3 -3
- package/dist/tool-groups-CCQqAa16.d.ts.map +1 -0
- package/dist/{tool-waste-nbHPAxei.js → tool-waste-CJDfxH45.js} +3 -537
- package/dist/tool-waste-CJDfxH45.js.map +1 -0
- package/dist/{tool-waste-D23I0zWm.d.ts → tool-waste-CP5DO383.d.ts} +4 -4
- package/dist/{tool-waste-D23I0zWm.d.ts.map → tool-waste-CP5DO383.d.ts.map} +1 -1
- package/dist/trace-repair/index.d.ts +2 -2
- package/dist/traces.d.ts +12 -11
- package/dist/traces.d.ts.map +1 -1
- package/dist/traces.js +8 -8
- package/dist/{trajectory-D7qrNvaN.d.ts → trajectory-Y1fmdlw7.d.ts} +3 -3
- package/dist/{trajectory-D7qrNvaN.d.ts.map → trajectory-Y1fmdlw7.d.ts.map} +1 -1
- package/dist/trajectory-replay/index.d.ts +3 -3
- package/dist/trajectory-replay/index.js +2 -2
- package/dist/{types--18oHwVF.d.ts → types-5ak2PqnJ.d.ts} +3 -3
- package/dist/{types--18oHwVF.d.ts.map → types-5ak2PqnJ.d.ts.map} +1 -1
- package/dist/{types-BTRcIqFr.d.ts → types-B1vDZ694.d.ts} +4 -4
- package/dist/{types-BTRcIqFr.d.ts.map → types-B1vDZ694.d.ts.map} +1 -1
- package/dist/{types-CBbLtr2J.d.ts → types-C0bWoSKC.d.ts} +10 -11
- package/dist/types-C0bWoSKC.d.ts.map +1 -0
- package/dist/{types-BjB2wZM9.d.ts → types-DDp2Mb8Y.d.ts} +3 -3
- package/dist/{types-BjB2wZM9.d.ts.map → types-DDp2Mb8Y.d.ts.map} +1 -1
- package/dist/wire/index.d.ts +3 -3
- package/dist/wire/index.js +1 -1
- package/docs/diagnosis.md +2 -3
- package/docs/eval-surface-map.md +1 -1
- package/docs/experiment.md +8 -1
- package/docs/redaction.md +59 -0
- package/docs/trace-contracts.md +102 -0
- package/docs/verdicts.md +1 -1
- package/package.json +3 -2
- package/dist/benchmark-command-CERRH0E6.js.map +0 -1
- package/dist/emitter-Cs0egaFd.d.ts.map +0 -1
- package/dist/emitter-DeQHiDMm.js +0 -257
- package/dist/emitter-DeQHiDMm.js.map +0 -1
- package/dist/engine-DNlKhIm0.d.ts.map +0 -1
- package/dist/experiment-tracker-BKEumQug.js +0 -280
- package/dist/experiment-tracker-BKEumQug.js.map +0 -1
- package/dist/experiment-tracker-URRGP9ek.d.ts +0 -237
- package/dist/experiment-tracker-URRGP9ek.d.ts.map +0 -1
- package/dist/integrity-Cy9WHAtb.js.map +0 -1
- package/dist/integrity-rGOfSUle.d.ts.map +0 -1
- package/dist/llm-judge-BVso5x-u.js.map +0 -1
- package/dist/raw-provider-sink-BQd7mzyT.js.map +0 -1
- package/dist/redact-7Aq1ukl-.js +0 -107
- package/dist/redact-7Aq1ukl-.js.map +0 -1
- package/dist/schema-CR5cpjQ3.d.ts.map +0 -1
- package/dist/store-tool-spans-B3bX9yqn.d.ts.map +0 -1
- package/dist/tool-groups-veQYPiTy.d.ts.map +0 -1
- package/dist/tool-waste-nbHPAxei.js.map +0 -1
- package/dist/types-CBbLtr2J.d.ts.map +0 -1
package/dist/experiment/index.js
CHANGED
|
@@ -10,7 +10,6 @@ import { t as eProcess } from "../sequential-eprocess-D1jKoihe.js";
|
|
|
10
10
|
import { a as heldoutSignificance, o as pairHoldout } from "../statistical-heldout-GcLIPxk4.js";
|
|
11
11
|
import { A as FinalEvidenceConflictError, M as openFinalEvidenceLedger, N as defineEvaluationClaim, P as summarizeEvaluationUnits, a as createEvidenceReceipt, i as INDEPENDENT_EVIDENCE_AUTHORITY_KINDS, j as FinalEvidenceError, k as powerPreflight, n as EVIDENCE_AUTHORITY_KINDS, o as isIndependentEvidence, r as EVIDENCE_RECEIPT_VERSION, s as verifyEvidenceReceipt, t as createCampaignEvidenceReceipt } from "../campaign-evidence-IF1p0oDa.js";
|
|
12
12
|
import { _ as runSelectionRule, a as evaluateHaltRule, c as evaluatePopulationReproducibilityGate, d as evaluateProvenanceGate, f as executeDecisionRule, g as readField, h as projectNLadderBudget, i as evaluateCondition, l as evaluatePowerFloorGate, m as powerFloorProblems, n as computeEstimand, o as evaluateIdentityGate, p as intervalSpecProblems, r as computeInterval, s as evaluateOracleDeterminismGate, t as classifyReissue, u as evaluatePredicate, v as runUniformPassBudget } from "../ast-CP9ae9B0.js";
|
|
13
|
-
import { a as inMemoryExperimentStore, r as fileExperimentStore, t as ExperimentTracker } from "../experiment-tracker-BKEumQug.js";
|
|
14
13
|
import { n as pairedEvalueSequence, r as sequentialCrossingHorizon } from "../sequential-CzK5DarL.js";
|
|
15
14
|
import { n as paretoPolicy, r as paretoSignificanceGate, t as buildEvidenceVector } from "../promotion-policy-CfMNUro2.js";
|
|
16
15
|
import { n as sequentialPairedGate, t as sequentialDecide } from "../sequential-lwJOTRON.js";
|
|
@@ -851,6 +850,124 @@ function mixSeed(seed, effect) {
|
|
|
851
850
|
return (seed ^ Math.round(effect * 1000003) * 2654435769) >>> 0 | 0;
|
|
852
851
|
}
|
|
853
852
|
//#endregion
|
|
853
|
+
//#region src/experiment/prospective-canary-join.ts
|
|
854
|
+
function nonEmpty$1(value, label) {
|
|
855
|
+
if (typeof value !== "string" || value.length === 0 || value.trim() !== value) throw new ValidationError(`prospective canary: ${label} must be a nonempty trimmed string`);
|
|
856
|
+
}
|
|
857
|
+
function utc(value, label) {
|
|
858
|
+
nonEmpty$1(value, label);
|
|
859
|
+
const parsed = Date.parse(value);
|
|
860
|
+
const canonical = Number.isFinite(parsed) ? new Date(parsed).toISOString() : "";
|
|
861
|
+
if (!value.endsWith("Z") || !Number.isFinite(parsed) || value !== canonical && value !== canonical.replace(".000Z", "Z")) throw new ValidationError(`prospective canary: ${label} must be a canonical UTC timestamp`);
|
|
862
|
+
return parsed;
|
|
863
|
+
}
|
|
864
|
+
function indexRows(rows, label, assignments) {
|
|
865
|
+
const indexed = /* @__PURE__ */ new Map();
|
|
866
|
+
for (const row of rows) {
|
|
867
|
+
nonEmpty$1(row.assignmentId, `${label} assignmentId`);
|
|
868
|
+
if (!assignments.has(row.assignmentId)) throw new ValidationError(`prospective canary: orphan ${label} for '${row.assignmentId}'`);
|
|
869
|
+
if (indexed.has(row.assignmentId)) throw new ValidationError(`prospective canary: duplicate ${label} for '${row.assignmentId}'`);
|
|
870
|
+
indexed.set(row.assignmentId, row);
|
|
871
|
+
}
|
|
872
|
+
return indexed;
|
|
873
|
+
}
|
|
874
|
+
function uniqueIds(ids, label) {
|
|
875
|
+
if (!Array.isArray(ids)) throw new ValidationError(`prospective canary: ${label} must be an array`);
|
|
876
|
+
const seen = /* @__PURE__ */ new Set();
|
|
877
|
+
for (const id of ids) {
|
|
878
|
+
nonEmpty$1(id, label);
|
|
879
|
+
if (seen.has(id)) throw new ValidationError(`prospective canary: duplicate ${label} '${id}'`);
|
|
880
|
+
seen.add(id);
|
|
881
|
+
}
|
|
882
|
+
return [...seen].sort();
|
|
883
|
+
}
|
|
884
|
+
/**
|
|
885
|
+
* Join independently sourced served receipts without inventing missing costs.
|
|
886
|
+
* The host still verifies ledger completeness, source authority, isolation,
|
|
887
|
+
* randomization and the pre-traffic witness in `decideRandomizedCanary`.
|
|
888
|
+
*/
|
|
889
|
+
function joinProspectiveCanaryReceipts(input) {
|
|
890
|
+
if (input.enabled !== true) throw new ValidationError("prospective canary: pilot is disabled");
|
|
891
|
+
const witnessedAt = utc(input.protocolWitnessedAt, "protocolWitnessedAt");
|
|
892
|
+
const cutoff = utc(input.sealed.rule.analysisCutoff, "analysisCutoff");
|
|
893
|
+
if (witnessedAt >= cutoff) throw new ValidationError("prospective canary: protocol witness must precede cutoff");
|
|
894
|
+
if (!Array.isArray(input.assignments) || input.assignments.length === 0) throw new ValidationError("prospective canary: assignment ledger is empty");
|
|
895
|
+
const historical = new Set(uniqueIds(input.historicalSourceUnitIds, "historical source unit"));
|
|
896
|
+
const assignmentIds = /* @__PURE__ */ new Set();
|
|
897
|
+
const assignmentSources = /* @__PURE__ */ new Set();
|
|
898
|
+
const sourceUnits = /* @__PURE__ */ new Set();
|
|
899
|
+
for (const row of input.assignments) {
|
|
900
|
+
nonEmpty$1(row.assignmentId, "assignmentId");
|
|
901
|
+
nonEmpty$1(row.assignmentSourceId, "assignmentSourceId");
|
|
902
|
+
nonEmpty$1(row.clusterId, "clusterId");
|
|
903
|
+
nonEmpty$1(row.sourceUnitId, "sourceUnitId");
|
|
904
|
+
if (row.arm !== "control" && row.arm !== "candidate") throw new ValidationError("prospective canary: assignment arm is invalid");
|
|
905
|
+
if (assignmentIds.has(row.assignmentId) || assignmentSources.has(row.assignmentSourceId)) throw new ValidationError("prospective canary: duplicate assignment identity");
|
|
906
|
+
if (sourceUnits.has(row.sourceUnitId) || historical.has(row.sourceUnitId)) throw new ValidationError(`prospective canary: source unit '${row.sourceUnitId}' is reused`);
|
|
907
|
+
const assignedAt = utc(row.assignedAt, `assignment '${row.assignmentId}' assignedAt`);
|
|
908
|
+
if (assignedAt <= witnessedAt || assignedAt > cutoff) throw new ValidationError("prospective canary: assignment falls outside witnessed window");
|
|
909
|
+
assignmentIds.add(row.assignmentId);
|
|
910
|
+
assignmentSources.add(row.assignmentSourceId);
|
|
911
|
+
sourceUnits.add(row.sourceUnitId);
|
|
912
|
+
}
|
|
913
|
+
const outcomes = indexRows(input.outcomes, "outcome", assignmentIds);
|
|
914
|
+
const executions = indexRows(input.executions, "execution", assignmentIds);
|
|
915
|
+
const billing = indexRows(input.billing, "billing", assignmentIds);
|
|
916
|
+
const sourceIds = new Set(assignmentSources);
|
|
917
|
+
const claimSource = (id, label) => {
|
|
918
|
+
nonEmpty$1(id, label);
|
|
919
|
+
if (sourceIds.has(id)) throw new ValidationError(`prospective canary: reused independent source '${id}'`);
|
|
920
|
+
sourceIds.add(id);
|
|
921
|
+
};
|
|
922
|
+
return input.assignments.map((assignment) => {
|
|
923
|
+
const outcome = outcomes.get(assignment.assignmentId);
|
|
924
|
+
const execution = executions.get(assignment.assignmentId);
|
|
925
|
+
const bill = billing.get(assignment.assignmentId);
|
|
926
|
+
const assignedAt = Date.parse(assignment.assignedAt);
|
|
927
|
+
if (outcome) {
|
|
928
|
+
claimSource(outcome.outcomeSourceId, "outcomeSourceId");
|
|
929
|
+
nonEmpty$1(outcome.outcomeCheckerDigest, "outcomeCheckerDigest");
|
|
930
|
+
if (utc(outcome.checkedAt, "checkedAt") < assignedAt) throw new ValidationError("prospective canary: outcome precedes assignment");
|
|
931
|
+
if (![
|
|
932
|
+
0,
|
|
933
|
+
1,
|
|
934
|
+
null
|
|
935
|
+
].includes(outcome.checkedOutcome)) throw new ValidationError("prospective canary: checked outcome must be 0, 1 or null");
|
|
936
|
+
}
|
|
937
|
+
if (execution) {
|
|
938
|
+
if (execution.traceSourceId === null === (execution.noExecutionSourceId === null)) throw new ValidationError("prospective canary: execution needs one trace or no-execution source");
|
|
939
|
+
claimSource(execution.traceSourceId ?? execution.noExecutionSourceId, "execution source");
|
|
940
|
+
if (utc(execution.recordedAt, "execution recordedAt") < assignedAt) throw new ValidationError("prospective canary: execution precedes assignment");
|
|
941
|
+
if (execution.turns !== null && (!Number.isSafeInteger(execution.turns) || execution.turns < 0)) throw new ValidationError("prospective canary: turns must be a nonnegative integer");
|
|
942
|
+
if (execution.noExecutionSourceId !== null && (execution.turns !== 0 || execution.providerCallIds.length !== 0)) throw new ValidationError("prospective canary: no-execution receipt contains turns or calls");
|
|
943
|
+
}
|
|
944
|
+
if (bill) {
|
|
945
|
+
claimSource(bill.billingSourceId, "billingSourceId");
|
|
946
|
+
if (utc(bill.recordedAt, "billing recordedAt") < assignedAt) throw new ValidationError("prospective canary: billing precedes assignment");
|
|
947
|
+
if (bill.settlement === "settled") {
|
|
948
|
+
if (bill.billedCostUsd === null || !Number.isFinite(bill.billedCostUsd) || bill.billedCostUsd < 0) throw new ValidationError("prospective canary: settled billing needs nonnegative actual cost");
|
|
949
|
+
} else if (bill.settlement !== "unknown" || bill.billedCostUsd !== null) throw new ValidationError("prospective canary: unknown billing cost must stay null");
|
|
950
|
+
if (execution && uniqueIds(bill.providerCallIds, "billing call").join("\0") !== uniqueIds(execution.providerCallIds, "execution call").join("\0")) throw new ValidationError("prospective canary: provider-call billing join is incomplete");
|
|
951
|
+
}
|
|
952
|
+
return {
|
|
953
|
+
assignmentId: assignment.assignmentId,
|
|
954
|
+
assignmentSourceId: assignment.assignmentSourceId,
|
|
955
|
+
clusterId: assignment.clusterId,
|
|
956
|
+
arm: assignment.arm,
|
|
957
|
+
checkedOutcome: outcome?.checkedOutcome ?? null,
|
|
958
|
+
outcomeSourceId: outcome?.outcomeSourceId ?? null,
|
|
959
|
+
billedCostUsd: bill?.settlement === "settled" ? bill.billedCostUsd : null,
|
|
960
|
+
billingSourceId: bill?.billingSourceId ?? null,
|
|
961
|
+
traceSourceId: execution?.traceSourceId ?? null,
|
|
962
|
+
noExecutionSourceId: execution?.noExecutionSourceId ?? null,
|
|
963
|
+
servedProfileDigest: execution?.servedProfileDigest ?? null,
|
|
964
|
+
servedCodeRevisionDigest: execution?.servedCodeRevisionDigest ?? null,
|
|
965
|
+
outcomeCheckerDigest: outcome?.outcomeCheckerDigest ?? null,
|
|
966
|
+
turns: execution?.turns ?? null
|
|
967
|
+
};
|
|
968
|
+
});
|
|
969
|
+
}
|
|
970
|
+
//#endregion
|
|
854
971
|
//#region src/experiment/randomized-canary.ts
|
|
855
972
|
/** Fixed-horizon, assignment-level decision for an unpaired served canary. */
|
|
856
973
|
function nonEmpty(value, label) {
|
|
@@ -1116,6 +1233,6 @@ function decideRandomizedCanary(sealed, cohort, rows, verifyCohort) {
|
|
|
1116
1233
|
return result;
|
|
1117
1234
|
}
|
|
1118
1235
|
//#endregion
|
|
1119
|
-
export { BOOTSTRAP_GATE_MIN_N, DesignRefusalError, EVIDENCE_AUTHORITY_KINDS, EVIDENCE_RECEIPT_VERSION, EVIDENCE_STATES,
|
|
1236
|
+
export { BOOTSTRAP_GATE_MIN_N, DesignRefusalError, EVIDENCE_AUTHORITY_KINDS, EVIDENCE_RECEIPT_VERSION, EVIDENCE_STATES, FinalEvidenceConflictError, FinalEvidenceError, FunnelIntegrityError, INDEPENDENT_EVIDENCE_AUTHORITY_KINDS, MatchedBudgetError, SealIntegrityError, amendExperiment, assertDesignAdequate, assertFunnelReconciles, assertMatchedBudgets, benjaminiHochberg, bonferroni, buildEvidenceVector, buildFunnel, classifyReissue, clusteredPower, comparePairedArms, composeFunnels, computeEstimand, computeInterval, createCampaignEvidenceReceipt, createEvidenceReceipt, decideRandomizedCanary, defineEvaluationClaim, defineExperiment, eProcess, evaluateCondition, evaluateHaltRule, evaluateHypothesis, evaluateIdentityGate, evaluateOracleDeterminismGate, evaluatePopulationReproducibilityGate, evaluatePowerFloorGate, evaluatePredicate, evaluateProvenanceGate, evidenceRegistryRecordSchema, executeAdmissionRule, executeDecisionRule, hashJson, heldoutSignificance, holm, isIndependentEvidence, joinProspectiveCanaryReceipts, manifestContentDigest, mcnemar, mcnemarPower, mcnemarRequiredN, mulberry32, openFinalEvidenceLedger, openSealedExperiment, pairArms, pairHoldout, pairRunRecords, pairedBootstrap, pairedEvalueSequence, pairedMde, pairedRiskDifference, pairedRiskDifferenceExact, pairedRiskDifferenceScore, paretoPolicy, paretoSignificanceGate, parseEvidenceRegistryRecord, powerPreflight, projectNLadderBudget, randomizedCanaryObservationDigest, randomizedCanaryRosterDigest, readField, renderEvidenceIndex, renderFunnelTable, requiredPairedSampleSize, requiredSampleSize, runSelectionRule, runUniformPassBudget, sealExperiment, sealRandomizedCanaryRule, sequentialCrossingHorizon, sequentialDecide, sequentialPairedGate, signManifest, summarizeEvaluationUnits, validateEvidenceRegistry, verifyEvidenceReceipt, verifyManifest, verifyMatchedBudgets, verifySealedExperiment, wilson };
|
|
1120
1237
|
|
|
1121
1238
|
//# sourceMappingURL=index.js.map
|