@tangle-network/agent-eval 0.172.0 → 0.173.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 +49 -0
- package/README.md +17 -2
- package/dist/adapters/http.d.ts +2 -2
- package/dist/analyst/index.d.ts +13 -13
- package/dist/analyst/index.js +7 -6
- package/dist/analyst/index.js.map +1 -1
- package/dist/{attestation-CJBGmMVh.d.ts → attestation-c1QvaBdX.d.ts} +2 -2
- package/dist/{attestation-CJBGmMVh.d.ts.map → attestation-c1QvaBdX.d.ts.map} +1 -1
- package/dist/{backend-integrity-e79K3UPD.d.ts → backend-integrity-CeuTgqsd.d.ts} +3 -4
- package/dist/backend-integrity-CeuTgqsd.d.ts.map +1 -0
- package/dist/{benchmark-h-h4bfqj.d.ts → benchmark-BjLGkfnN.d.ts} +3 -3
- package/dist/{benchmark-h-h4bfqj.d.ts.map → benchmark-BjLGkfnN.d.ts.map} +1 -1
- package/dist/{benchmark-command-DoFcisuM.js → benchmark-command-9S20PRel.js} +9 -9
- package/dist/{benchmark-command-DoFcisuM.js.map → benchmark-command-9S20PRel.js.map} +1 -1
- package/dist/benchmarks/index.d.ts +5 -5
- package/dist/benchmarks/index.js +3 -3
- package/dist/{bounded-process-CVOC_D3H.js → bounded-process-BBZob7vl.js} +64 -10
- package/dist/bounded-process-BBZob7vl.js.map +1 -0
- package/dist/builder-eval/index.d.ts +3 -3
- package/dist/builder-eval/index.js +2 -2
- package/dist/campaign/index.d.ts +9 -9
- package/dist/campaign/index.js +6 -6
- package/dist/{campaign-Dp35pBbS.js → campaign-pxS0wmo4.js} +8 -8
- package/dist/{campaign-Dp35pBbS.js.map → campaign-pxS0wmo4.js.map} +1 -1
- package/dist/chat-client-Db4bqYfA.js +115 -0
- package/dist/chat-client-Db4bqYfA.js.map +1 -0
- package/dist/{chat-json-call-5Jxna-aV.js → chat-json-call-C26igCih.js} +16 -6
- package/dist/chat-json-call-C26igCih.js.map +1 -0
- package/dist/cli.js +31 -17
- package/dist/cli.js.map +1 -1
- package/dist/{client-BvwNkIRN.js → client-BlLY6o2w.js} +2 -2
- package/dist/{client-BvwNkIRN.js.map → client-BlLY6o2w.js.map} +1 -1
- package/dist/{client-Df7wdslk.d.ts → client-DlqdbM7n.d.ts} +4 -4
- package/dist/{client-Df7wdslk.d.ts.map → client-DlqdbM7n.d.ts.map} +1 -1
- package/dist/contract/index.d.ts +13 -13
- package/dist/contract/index.js +202 -10
- package/dist/contract/index.js.map +1 -1
- package/dist/{counterfactual-Bee5_BIn.d.ts → counterfactual-CLgrwhkY.d.ts} +4 -4
- package/dist/{counterfactual-Bee5_BIn.d.ts.map → counterfactual-CLgrwhkY.d.ts.map} +1 -1
- package/dist/{chat-client-DI79OPye.js → default-registry-B0bKikCb.js} +3 -39
- package/dist/default-registry-B0bKikCb.js.map +1 -0
- package/dist/{default-registry-XxedTLwu.d.ts → default-registry-BKwc8bN5.d.ts} +6 -6
- package/dist/{default-registry-XxedTLwu.d.ts.map → default-registry-BKwc8bN5.d.ts.map} +1 -1
- package/dist/{define-agent-eval-0wW7gFhr.d.ts → define-agent-eval-CY6qdlGV.d.ts} +6 -6
- package/dist/{define-agent-eval-0wW7gFhr.d.ts.map → define-agent-eval-CY6qdlGV.d.ts.map} +1 -1
- package/dist/{define-agent-eval-jS8xj_Q_.js → define-agent-eval-D_i_s69h.js} +7 -7
- package/dist/{define-agent-eval-jS8xj_Q_.js.map → define-agent-eval-D_i_s69h.js.map} +1 -1
- package/dist/{dspy-rlm-engine-CS3qcCEk.js → dspy-rlm-engine-D5byiHn9.js} +5 -6
- package/dist/dspy-rlm-engine-D5byiHn9.js.map +1 -0
- package/dist/{emitter-Bvnu0VzL.d.ts → emitter-Cs0egaFd.d.ts} +3 -3
- package/dist/{emitter-Bvnu0VzL.d.ts.map → emitter-Cs0egaFd.d.ts.map} +1 -1
- package/dist/{engine-BfRay1qD.d.ts → engine-DhFir3Ys.d.ts} +23 -8
- package/dist/{engine-BfRay1qD.d.ts.map → engine-DhFir3Ys.d.ts.map} +1 -1
- package/dist/{eval-campaign-JDTeE6Pl.js → eval-campaign-BeAjdhzC.js} +2 -2
- package/dist/{eval-campaign-JDTeE6Pl.js.map → eval-campaign-BeAjdhzC.js.map} +1 -1
- package/dist/{exact-types-BEecmnWm.d.ts → exact-types-BKOEILRP.d.ts} +2 -2
- package/dist/{exact-types-BEecmnWm.d.ts.map → exact-types-BKOEILRP.d.ts.map} +1 -1
- package/dist/experiment/index.d.ts +4 -4
- package/dist/{external-optimizer-contracts-szBJ_1vh.d.ts → external-optimizer-contracts-CQCpyrIL.d.ts} +2 -2
- package/dist/{external-optimizer-contracts-szBJ_1vh.d.ts.map → external-optimizer-contracts-CQCpyrIL.d.ts.map} +1 -1
- package/dist/{external-optimizer-process-CQxylYeG.js → external-optimizer-process-Cq_Pg15r.js} +2 -2
- package/dist/{external-optimizer-process-CQxylYeG.js.map → external-optimizer-process-Cq_Pg15r.js.map} +1 -1
- package/dist/{external-optimizer-subprocess-Cex8Da2i.js → external-optimizer-subprocess-DgNebftP.js} +2 -2
- package/dist/{external-optimizer-subprocess-Cex8Da2i.js.map → external-optimizer-subprocess-DgNebftP.js.map} +1 -1
- package/dist/failure-cluster-OldNRoAt.d.ts +154 -0
- package/dist/failure-cluster-OldNRoAt.d.ts.map +1 -0
- package/dist/{feedback-trajectory-DIqpCyF0.d.ts → feedback-trajectory-CMnv_uYs.d.ts} +6 -6
- package/dist/{feedback-trajectory-DIqpCyF0.d.ts.map → feedback-trajectory-CMnv_uYs.d.ts.map} +1 -1
- package/dist/{heldout-gate-JgNRDZwZ.d.ts → heldout-gate-Df5hsqmm.d.ts} +7 -7
- package/dist/{heldout-gate-JgNRDZwZ.d.ts.map → heldout-gate-Df5hsqmm.d.ts.map} +1 -1
- package/dist/hosted/index.d.ts +2 -2
- package/dist/hosted/index.js +1 -1
- package/dist/{index-DnglhM0A.d.ts → index-BQqOjerE.d.ts} +94 -13
- package/dist/index-BQqOjerE.d.ts.map +1 -0
- package/dist/{index-_vPrVMRX.d.ts → index-CFDffsKz.d.ts} +11 -11
- package/dist/{index-_vPrVMRX.d.ts.map → index-CFDffsKz.d.ts.map} +1 -1
- package/dist/{index-DDAPhUJJ.d.ts → index-D0Db5X-4.d.ts} +45 -9
- package/dist/index-D0Db5X-4.d.ts.map +1 -0
- package/dist/{index-DMoxLG8P.d.ts → index-e7LXeRVa.d.ts} +3 -3
- package/dist/{index-DMoxLG8P.d.ts.map → index-e7LXeRVa.d.ts.map} +1 -1
- package/dist/index.d.ts +172 -46
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +64 -41
- package/dist/index.js.map +1 -1
- package/dist/{insight-report-08F022xN.d.ts → insight-report-DETqPc_A.d.ts} +4 -4
- package/dist/{insight-report-08F022xN.d.ts.map → insight-report-DETqPc_A.d.ts.map} +1 -1
- package/dist/{integrity-B_EDELom.d.ts → integrity-BKTcA-HP.d.ts} +3 -3
- package/dist/{integrity-B_EDELom.d.ts.map → integrity-BKTcA-HP.d.ts.map} +1 -1
- package/dist/{kind-factory-DMeEoMQZ.js → kind-factory-gP6lDySe.js} +164 -149
- package/dist/kind-factory-gP6lDySe.js.map +1 -0
- package/dist/{llm-client-BFMRpmqb.js → llm-client-CxQtdtd6.js} +12 -5
- package/dist/llm-client-CxQtdtd6.js.map +1 -0
- package/dist/{llm-judge-aQHIk5_-.js → llm-judge-B2YxbAJb.js} +81 -7
- package/dist/{llm-judge-aQHIk5_-.js.map → llm-judge-B2YxbAJb.js.map} +1 -1
- package/dist/{matrix-Ch8JO1pG.d.ts → matrix-DGu8KhSs.d.ts} +2 -2
- package/dist/{matrix-Ch8JO1pG.d.ts.map → matrix-DGu8KhSs.d.ts.map} +1 -1
- package/dist/meta-eval/index.d.ts +100 -5
- package/dist/meta-eval/index.d.ts.map +1 -1
- package/dist/meta-eval/index.js +200 -2
- package/dist/meta-eval/index.js.map +1 -1
- package/dist/{mint-DjfDUMHr.js → mint-vWOdD8Ae.js} +2 -2
- package/dist/{mint-DjfDUMHr.js.map → mint-vWOdD8Ae.js.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 +5 -5
- package/dist/pipelines/index.js +3 -3
- package/dist/{pre-registration-DHz6P_6f.d.ts → pre-registration-BoI4ucR3.d.ts} +2 -2
- package/dist/{pre-registration-DHz6P_6f.d.ts.map → pre-registration-BoI4ucR3.d.ts.map} +1 -1
- package/dist/{produced-state-CxmbFxFd.js → produced-state-7VYDwtkk.js} +3 -3
- package/dist/{produced-state-CxmbFxFd.js.map → produced-state-7VYDwtkk.js.map} +1 -1
- package/dist/{promotion-policy-BBBcz5_3.d.ts → promotion-policy-CvMda3kU.d.ts} +2 -2
- package/dist/{promotion-policy-BBBcz5_3.d.ts.map → promotion-policy-CvMda3kU.d.ts.map} +1 -1
- package/dist/{provenance-Dp-vvyrU.d.ts → provenance-CRY67X50.d.ts} +39 -165
- package/dist/provenance-CRY67X50.d.ts.map +1 -0
- package/dist/{query-BPGMVlbM.js → query-D1nLIKt7.js} +2 -2
- package/dist/{query-BPGMVlbM.js.map → query-D1nLIKt7.js.map} +1 -1
- package/dist/{query-Na5gEIGd.d.ts → query-D6W6MaGx.d.ts} +3 -3
- package/dist/{query-Na5gEIGd.d.ts.map → query-D6W6MaGx.d.ts.map} +1 -1
- package/dist/{registry-xEb_xfns.d.ts → registry-7pOUBrtX.d.ts} +4 -4
- package/dist/{registry-xEb_xfns.d.ts.map → registry-7pOUBrtX.d.ts.map} +1 -1
- package/dist/{release-confidence-D6lQw_o7.d.ts → release-confidence-BAcNYOf1.d.ts} +4 -4
- package/dist/{release-confidence-D6lQw_o7.d.ts.map → release-confidence-BAcNYOf1.d.ts.map} +1 -1
- package/dist/{release-confidence-CzUHc4z4.js → release-confidence-BsGEg_xg.js} +3 -3
- package/dist/{release-confidence-CzUHc4z4.js.map → release-confidence-BsGEg_xg.js.map} +1 -1
- package/dist/reporting.d.ts +3 -3
- package/dist/reporting.js +1 -1
- package/dist/{researcher-CMUTQXD7.d.ts → researcher-jsW1X94L.d.ts} +7 -8
- package/dist/researcher-jsW1X94L.d.ts.map +1 -0
- package/dist/{reward-hacking-SkxYgT0x.js → reward-hacking-CKW4teig.js} +2 -2
- package/dist/{reward-hacking-SkxYgT0x.js.map → reward-hacking-CKW4teig.js.map} +1 -1
- package/dist/{reward-hacking-CgPRUesA.d.ts → reward-hacking-ZXEi9VCq.d.ts} +2 -2
- package/dist/{reward-hacking-CgPRUesA.d.ts.map → reward-hacking-ZXEi9VCq.d.ts.map} +1 -1
- package/dist/rl.d.ts +7 -7
- package/dist/rl.js +4 -4
- package/dist/rollout/index.d.ts +1 -1
- package/dist/rollout/index.js +2 -2
- package/dist/{rollout-Crypdx8s.js → rollout-C-znbbYg.js} +2 -2
- package/dist/{rollout-Crypdx8s.js.map → rollout-C-znbbYg.js.map} +1 -1
- package/dist/{rubric-predictive-validity-DluJLCKQ.d.ts → rubric-predictive-validity-Dl1dvKCv.d.ts} +2 -2
- package/dist/{rubric-predictive-validity-DluJLCKQ.d.ts.map → rubric-predictive-validity-Dl1dvKCv.d.ts.map} +1 -1
- package/dist/{run-record-DQjRcYwA.d.ts → run-record-DTv1MdjK.d.ts} +2 -2
- package/dist/{run-record-DQjRcYwA.d.ts.map → run-record-DTv1MdjK.d.ts.map} +1 -1
- package/dist/{run-record-DLORoL7t.js → run-record-ZIsR9Fif.js} +2 -2
- package/dist/{run-record-DLORoL7t.js.map → run-record-ZIsR9Fif.js.map} +1 -1
- package/dist/{schema-DID1Cqct.d.ts → schema-CR5cpjQ3.d.ts} +57 -2
- package/dist/{schema-DID1Cqct.d.ts.map → schema-CR5cpjQ3.d.ts.map} +1 -1
- package/dist/{schema-CdIX2aHu.js → schema-CSf6qWgZ.js} +35 -1
- package/dist/{schema-CdIX2aHu.js.map → schema-CSf6qWgZ.js.map} +1 -1
- package/dist/semantic-concept-judge-Ct3QU7t5.js +780 -0
- package/dist/semantic-concept-judge-Ct3QU7t5.js.map +1 -0
- package/dist/{series-convergence-D9WgpXGi.d.ts → series-convergence-DeG33RpC.d.ts} +2 -2
- package/dist/{series-convergence-D9WgpXGi.d.ts.map → series-convergence-DeG33RpC.d.ts.map} +1 -1
- package/dist/{server-CCEnywOR.js → server-BR6onwZB.js} +2 -2
- package/dist/{server-CCEnywOR.js.map → server-BR6onwZB.js.map} +1 -1
- package/dist/{skillopt-optimization-method-LHi02MzH.js → skillopt-optimization-method-BzdphODy.js} +6 -6
- package/dist/{skillopt-optimization-method-LHi02MzH.js.map → skillopt-optimization-method-BzdphODy.js.map} +1 -1
- package/dist/{statistical-heldout-Yldkntvy.d.ts → statistical-heldout-DTyB_6-1.d.ts} +3 -3
- package/dist/{statistical-heldout-Yldkntvy.d.ts.map → statistical-heldout-DTyB_6-1.d.ts.map} +1 -1
- package/dist/{store-Cq9oOrI1.d.ts → store-BErPvYBr.d.ts} +2 -2
- package/dist/{store-Cq9oOrI1.d.ts.map → store-BErPvYBr.d.ts.map} +1 -1
- package/dist/{store-otlp-CHjBvWQY.js → store-otlp-Dow0pk_5.js} +2 -2
- package/dist/{store-otlp-CHjBvWQY.js.map → store-otlp-Dow0pk_5.js.map} +1 -1
- package/dist/{store-tool-spans-BvdUbeOB.d.ts → store-tool-spans-CCZNsihA.d.ts} +8 -8
- package/dist/{store-tool-spans-BvdUbeOB.d.ts.map → store-tool-spans-CCZNsihA.d.ts.map} +1 -1
- package/dist/{store-tool-spans-B9o6tU8f.js → store-tool-spans-CeNj_m2L.js} +3 -3
- package/dist/{store-tool-spans-B9o6tU8f.js.map → store-tool-spans-CeNj_m2L.js.map} +1 -1
- package/dist/storyboard/index.d.ts +1 -1
- package/dist/{summary-report-DRstQNBX.d.ts → summary-report-gMrbYawB.d.ts} +3 -3
- package/dist/{summary-report-DRstQNBX.d.ts.map → summary-report-gMrbYawB.d.ts.map} +1 -1
- package/dist/{task-failure-attributes-CBGtLS_H.js → task-failure-attributes-CZjZeBsY.js} +3 -3
- package/dist/{task-failure-attributes-CBGtLS_H.js.map → task-failure-attributes-CZjZeBsY.js.map} +1 -1
- package/dist/{tool-groups-DjwlMBvW.d.ts → tool-groups-Cp4Xdzrp.d.ts} +3 -3
- package/dist/tool-groups-Cp4Xdzrp.d.ts.map +1 -0
- package/dist/{tool-waste-CwGHzBzX.js → tool-waste-B9tdWV6g.js} +253 -6
- package/dist/tool-waste-B9tdWV6g.js.map +1 -0
- package/dist/{tool-waste-BrmLKxMw.d.ts → tool-waste-D23I0zWm.d.ts} +4 -4
- package/dist/{tool-waste-BrmLKxMw.d.ts.map → tool-waste-D23I0zWm.d.ts.map} +1 -1
- package/dist/trace-repair/index.d.ts +2 -2
- package/dist/traces.d.ts +10 -10
- package/dist/traces.js +7 -7
- package/dist/{trajectory-r1bQqvBQ.d.ts → trajectory-D7qrNvaN.d.ts} +3 -3
- package/dist/{trajectory-r1bQqvBQ.d.ts.map → trajectory-D7qrNvaN.d.ts.map} +1 -1
- package/dist/trajectory-replay/index.d.ts +3 -3
- package/dist/{types-CCZ34qmV.d.ts → types-BDV4PiMR.d.ts} +3 -3
- package/dist/{types-CCZ34qmV.d.ts.map → types-BDV4PiMR.d.ts.map} +1 -1
- package/dist/{types-nokrtr7M.d.ts → types-Ba5UQyVD.d.ts} +4 -4
- package/dist/{types-nokrtr7M.d.ts.map → types-Ba5UQyVD.d.ts.map} +1 -1
- package/dist/{types-DMoNFDWi.d.ts → types-DN2WdT5S.d.ts} +3 -3
- package/dist/{types-DMoNFDWi.d.ts.map → types-DN2WdT5S.d.ts.map} +1 -1
- package/dist/types-gvRsyJLh.d.ts +831 -0
- package/dist/types-gvRsyJLh.d.ts.map +1 -0
- package/dist/wire/index.d.ts +3 -3
- package/dist/wire/index.js +1 -1
- package/docs/plants.md +69 -1
- package/docs/public-api.md +6 -4
- package/docs/trace-analysis.md +55 -8
- package/package.json +1 -1
- package/dist/backend-integrity-e79K3UPD.d.ts.map +0 -1
- package/dist/bounded-process-CVOC_D3H.js.map +0 -1
- package/dist/chat-client-DI79OPye.js.map +0 -1
- package/dist/chat-json-call-5Jxna-aV.js.map +0 -1
- package/dist/dspy-rlm-engine-CS3qcCEk.js.map +0 -1
- package/dist/failure-cluster-6YSvsKlp.d.ts +0 -58
- package/dist/failure-cluster-6YSvsKlp.d.ts.map +0 -1
- package/dist/index-DDAPhUJJ.d.ts.map +0 -1
- package/dist/index-DnglhM0A.d.ts.map +0 -1
- package/dist/kind-factory-DMeEoMQZ.js.map +0 -1
- package/dist/llm-client-BFMRpmqb.js.map +0 -1
- package/dist/provenance-Dp-vvyrU.d.ts.map +0 -1
- package/dist/raw-provider-sink-BU29Sh8h.d.ts +0 -134
- package/dist/raw-provider-sink-BU29Sh8h.d.ts.map +0 -1
- package/dist/researcher-CMUTQXD7.d.ts.map +0 -1
- package/dist/semantic-concept-judge-I36eejJx.js +0 -382
- package/dist/semantic-concept-judge-I36eejJx.js.map +0 -1
- package/dist/tool-groups-DjwlMBvW.d.ts.map +0 -1
- package/dist/tool-waste-CwGHzBzX.js.map +0 -1
- package/dist/types-Bfk0uxRj.d.ts +0 -443
- package/dist/types-Bfk0uxRj.d.ts.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { p as CostProvenance } from "./cost-ledger-DbQdN3nO.js";
|
|
2
|
-
import { w as JudgeScore } from "./types-
|
|
2
|
+
import { w as JudgeScore } from "./types-Ba5UQyVD.js";
|
|
3
3
|
import { o as MatrixResult } from "./index-DNgf5gyG.js";
|
|
4
4
|
import { AgentProfile } from "@tangle-network/agent-interface";
|
|
5
5
|
//#region src/multishot/types.d.ts
|
|
@@ -398,4 +398,4 @@ interface RunMultishotMatrixResult {
|
|
|
398
398
|
declare function runMultishotMatrix<TPersona extends MultishotPersona>(opts: RunMultishotMatrixOptions<TPersona>): Promise<RunMultishotMatrixResult>;
|
|
399
399
|
//#endregion
|
|
400
400
|
export { MultishotToolExecutor as A, MultishotFatalToolError as C, MultishotShape as D, MultishotResult as E, assertMultishotShotResult as F, MultishotTransportRequest as M, MultishotTransportResponse as N, MultishotShotResultError as O, MultishotTransportToolCall as P, MultishotDriverEmptyError as S, MultishotPersona as T, JudgeRunResult as _, MultishotCellOutput as a, runJudge as b, RunMultishotMatrixResult as c, MultishotShot as d, RunMultishotOptions as f, JudgeDimension as g, JudgeConfig as h, ConversationJudgeInput as i, MultishotTransport as j, MultishotToolDefinition as k, computeCellComposite as l, DEFAULT_JUDGE_MODEL as m, CellCompositeInput as n, MultishotJudges as o, runMultishot as p, CellCompositeScore as r, RunMultishotMatrixOptions as s, ArtifactJudgeInput as t, runMultishotMatrix as u, renderDimensions as v, MultishotMessage as w, MultishotArtifact as x, renderJsonFooter as y };
|
|
401
|
-
//# sourceMappingURL=matrix-
|
|
401
|
+
//# sourceMappingURL=matrix-DGu8KhSs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matrix-
|
|
1
|
+
{"version":3,"file":"matrix-DGu8KhSs.d.ts","names":[],"sources":["../src/multishot/types.ts","../src/multishot/judges.ts","../src/multishot/multishot.ts","../src/multishot/matrix.ts"],"mappings":";;;;;UAIiB;EACf;EACA;EACA;EACA,YAAY;IAAQ;IAAY;IAAc,MAAM;;;UAGrC;EACf;EACA;EACA;IAAc;IAAc,MAAM;;EAClC;;UAGe;EACf,YAAY;EACZ,WAAW;EACX;EACA;;;EAGA;;;;;;;;EAQA,iBAAiB;;UAGF;EACf;EACA;IACE;IACA;IACA,YAAY;;;;;;UAOC;EACf;EACA,UAAU,MAAM;EAChB,QAAQ;EACR;EACA;EACA,SAAS;;UAGM;EACf;EACA;EACA;IAAY;IAAc;;;UAGX;EACf;IAAW;IAAyB,aAAa;;EACjD;IAAU;IAAwB;;;;EAGlC;;;;EAIA;;;;;;;;KASU,sBACV,KAAK,8BACF,QAAQ;KAED,yBACV,MAAM,yBACN;;EAEE,WAAW;EACX,SAAS;MAER;EAAU;EAAiB;;UAEf;;EAEf;;GAEC;;;;;;;;UASc,eAAe,iBAAiB;;EAE/C,eAAe,SAAS;;;EAGxB,2BAA2B,SAAS;;cAGzB,kCAAkC;WACjB;EAA5B,YAA4B;;cAMjB,gCAAgC;EAC3C,YAAY;;cAMD,iCAAiC;EAC5C,YAAY;;;;;;;;;;;;;;;;;;;iBAyBE,0BAA0B,yBAAyB,SAAS;;;cCvI/D;UAEI;;EAEf;;EAEA;;UAGe,YAAY;;EAE3B;;;EAGA,WAAW;;EAEX;;EAEA,YAAY;;EAEZ;;;EAGA,cAAc,OAAO;;EAErB;;UAGe;;EAEf,OAAO;;EAEP,MAAM;;iBAGc,SAAS,QAC7B,OAAO,YAAY,SACnB,OAAO,SACN,QAAQ;;;iBAsIK,iBAAiB,eAAe;;iBAKhC,iBAAiB,eAAe;;;UCxK/B,oBAAoB,iBAAiB;EACpD,SAAS;EACT,SAAS;;;EAGT,QAAQ,eAAe;;EAEvB,QAAQ;;EAER,gBAAgB,eAAe;;;;EAI/B,mBAAmB;EACnB;EACA;EACA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;;EAGA,gBAAgB;;;;EAIhB,iBAAiB;;;EAGjB,gBAAgB;EAChB,SAAS;;;;;;;;;;;KAYC,cAAc,iBAAiB,qBACzC,MAAM,oBAAoB,cACvB,QAAQ;;;;;;;;;;;;;;;;;iBA2BS,aAAa,iBAAiB,kBAClD,MAAM,oBAAoB,YACzB,QAAQ;;;UClFM,uBAAuB,iBAAiB;EACvD,YAAY;EACZ,SAAS;;UAGM,mBAAmB,iBAAiB;EACnD,UAAU;EACV,SAAS;;UAGM,gBAAgB,iBAAiB;;EAEhD,cAAc,YAAY,uBAAuB;;EAEjD,aAAa,YAAY,mBAAmB;;EAE5C,iBAAiB,YAAY,mBAAmB;;EAEhD;;EAEA;;UAGe;EACf;EACA,cAAc;EACd;IACE,aAAa,MAAM;MAAe;MAAc;;IAChD;;EAEF;IACE,aAAa,MAAM;MAAe;MAAc;;IAChD;;;UAIa,0BAA0B,iBAAiB;;EAE1D,UAAU;IAAQ;IAAY,OAAO;;;EAErC,UAAU;;;EAGV,QAAQ,eAAe;;EAEvB,QAAQ,gBAAgB;;EAExB,QAAQ;;EAER,gBAAgB,eAAe;;EAE/B,mBAAmB;;EAEnB;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;;;EAIA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;;;EAIA,gBAAgB;;EAEhB,iBAAiB;;;EAGjB,gBAAgB;;;;;;;;;;;;;;;EAehB,UAAU,cAAc;;;;;UAMT;EACf;EACA;EACA;;UAoBe;EACf,cAAc;;EAEd,cAAc,cAAc;;EAE5B,iBAAiB,cAAc;;;;;;;iBAQjB,qBAAqB,OAAO;EAC1C;EACA;EACA;EACA;;UAuBe;EACf,QAAQ,aAAa;;iBAGD,mBAAmB,iBAAiB,kBACxD,MAAM,0BAA0B,YAC/B,QAAQ"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { f as Run } from "../schema-
|
|
1
|
+
import { f as Run } from "../schema-CR5cpjQ3.js";
|
|
2
2
|
import { a as ContinuousCalibrationResult, n as CandidateScore, o as GoldenItem, r as ContinuousAgreement, t as CalibrationResult } from "../judge-calibration-C5CbMYce.js";
|
|
3
|
-
import { n as SeriesConvergenceResult, o as CorpusAgreementReport, t as SeriesConvergenceOptions } from "../series-convergence-
|
|
3
|
+
import { n as SeriesConvergenceResult, o as CorpusAgreementReport, t as SeriesConvergenceOptions } from "../series-convergence-DeG33RpC.js";
|
|
4
4
|
import { r as LedgerHash } from "../canonical-CFpojCN5.js";
|
|
5
|
-
import { s as TraceStore } from "../store-
|
|
5
|
+
import { s as TraceStore } from "../store-BErPvYBr.js";
|
|
6
6
|
import { a as OutcomeFilter, i as InMemoryOutcomeStore, n as FileSystemOutcomeStore, o as OutcomeStore, r as FileSystemOutcomeStoreOptions, t as DeploymentOutcome } from "../outcome-store-BYHIuO0e.js";
|
|
7
|
-
import { a as rubricPredictiveValidity, i as RubricRanking, n as RubricPredictiveValidityInput, r as RubricPredictiveValidityReport, t as RubricOutcomePair } from "../rubric-predictive-validity-
|
|
7
|
+
import { a as rubricPredictiveValidity, i as RubricRanking, n as RubricPredictiveValidityInput, r as RubricPredictiveValidityReport, t as RubricOutcomePair } from "../rubric-predictive-validity-Dl1dvKCv.js";
|
|
8
8
|
//#region src/meta-eval/correlation-study.d.ts
|
|
9
9
|
interface EvalMetricSpec {
|
|
10
10
|
id: string;
|
|
@@ -130,6 +130,101 @@ declare function definePlant(input: {
|
|
|
130
130
|
item: GoldenItem;
|
|
131
131
|
expectedVerdict: PlantExpectation;
|
|
132
132
|
}): Plant;
|
|
133
|
+
/**
|
|
134
|
+
* A claim's executable evidence: the command a grader runs and the output it
|
|
135
|
+
* must produce.
|
|
136
|
+
*/
|
|
137
|
+
interface PlantEvidence {
|
|
138
|
+
/** The command a grader runs to test the claim. */
|
|
139
|
+
check?: string;
|
|
140
|
+
/** The output that command must produce for the claim to stand. */
|
|
141
|
+
expect?: string;
|
|
142
|
+
}
|
|
143
|
+
/** Which evidence field {@link perturbEvidence} altered. */
|
|
144
|
+
type PerturbedField = 'check' | 'expect';
|
|
145
|
+
/** How {@link perturbEvidence} altered it. */
|
|
146
|
+
type PerturbationKind = 'number-off-by-one' | 'comparison-flipped';
|
|
147
|
+
interface EvidencePerturbation {
|
|
148
|
+
/** The evidence with exactly one value altered. */
|
|
149
|
+
evidence: PlantEvidence;
|
|
150
|
+
/** Which field changed. */
|
|
151
|
+
field: PerturbedField;
|
|
152
|
+
/** How it changed. */
|
|
153
|
+
how: PerturbationKind;
|
|
154
|
+
/**
|
|
155
|
+
* The exact substring that was replaced. A comparison token carries its
|
|
156
|
+
* surrounding spaces, because the spaces are what make ` -ge ` a comparison
|
|
157
|
+
* and not part of a word.
|
|
158
|
+
*/
|
|
159
|
+
original: string;
|
|
160
|
+
/** What replaced it. */
|
|
161
|
+
perturbed: string;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Derive a known-wrong version of a claim's evidence by altering exactly one
|
|
165
|
+
* value, or return null when no value can be altered safely.
|
|
166
|
+
*
|
|
167
|
+
* Exactly one value changes. A perturbation that moves two does not name the
|
|
168
|
+
* defect it seeded, so a grader that catches it says nothing about which defect
|
|
169
|
+
* the grader can see.
|
|
170
|
+
*
|
|
171
|
+
* The preference order IS the safety order:
|
|
172
|
+
*
|
|
173
|
+
* 1. the last standalone number in `expect` — it falsifies the claim while the
|
|
174
|
+
* command still runs exactly as it did;
|
|
175
|
+
* 2. a flipped comparison in `check` — it inverts a test that was passing;
|
|
176
|
+
* 3. the last standalone number in `check` — last because a number in a command
|
|
177
|
+
* can name an input (a port, a width, a version) rather than a threshold,
|
|
178
|
+
* and renaming an input breaks execution, not the claim.
|
|
179
|
+
*
|
|
180
|
+
* "Standalone" excludes a digit run glued to a word, a dot, a slash, or a
|
|
181
|
+
* hyphen: `python3`, `file42.txt`, `1.5`, `utf-8`. That exclusion is why this
|
|
182
|
+
* helper exists. Hand-rolled perturbation bumps one of those, the check stops
|
|
183
|
+
* executing, and the plant measures the environment instead of the grader.
|
|
184
|
+
*
|
|
185
|
+
* A number is bumped with BigInt, so a value wider than
|
|
186
|
+
* `Number.MAX_SAFE_INTEGER` moves by exactly one. Bumped as a `number` it
|
|
187
|
+
* rounds back to itself, and the plant is then a correct claim the grader is
|
|
188
|
+
* right to verify.
|
|
189
|
+
*/
|
|
190
|
+
declare function perturbEvidence(evidence: PlantEvidence): EvidencePerturbation | null;
|
|
191
|
+
interface PerturbedPlant {
|
|
192
|
+
plant: Plant;
|
|
193
|
+
/** The perturbed evidence to write into the item the grader is handed. */
|
|
194
|
+
evidence: PlantEvidence;
|
|
195
|
+
field: PerturbedField;
|
|
196
|
+
how: PerturbationKind;
|
|
197
|
+
original: string;
|
|
198
|
+
perturbed: string;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Derive a reject-direction plant from a claim a grader verified, by perturbing
|
|
202
|
+
* one value.
|
|
203
|
+
*
|
|
204
|
+
* {@link definePlant} takes a {@link GoldenItem} and never authors a wrong item
|
|
205
|
+
* from a right one, so until now every caller hand-rolled the perturbation.
|
|
206
|
+
* This is that step, done once and the same way every time: the claim's
|
|
207
|
+
* evidence is altered by {@link perturbEvidence}, the result is a `wrong-value`
|
|
208
|
+
* plant the grader owes a `reject`, and the record itself is built by
|
|
209
|
+
* `definePlant` so every refusal there still applies — in particular the one
|
|
210
|
+
* that catches an `expectedVerdict` its `humanScore` contradicts.
|
|
211
|
+
*
|
|
212
|
+
* Returns null when nothing in the evidence can be perturbed. That is not a
|
|
213
|
+
* failure: a claim with no executable evidence cannot be made wrong in a way a
|
|
214
|
+
* grader could execute, and seeding it would measure prose.
|
|
215
|
+
*
|
|
216
|
+
* Refuses an empty `id` or `itemId`. Both name the record — one in the manifest
|
|
217
|
+
* and in `missedIds`, the other in the join with the results — and a miss
|
|
218
|
+
* nobody can look up is not a measurement.
|
|
219
|
+
*/
|
|
220
|
+
declare function plantByPerturbation(input: {
|
|
221
|
+
id: string;
|
|
222
|
+
itemId: string;
|
|
223
|
+
evidence: PlantEvidence;
|
|
224
|
+
/** Score for the perturbed item. Must sit below the run's accept threshold. Default 0. */
|
|
225
|
+
humanScore?: number;
|
|
226
|
+
group?: string;
|
|
227
|
+
}): PerturbedPlant | null;
|
|
133
228
|
interface PlantManifest {
|
|
134
229
|
/**
|
|
135
230
|
* Digest over the seeded order, the plants, and the threshold. Publish it
|
|
@@ -375,5 +470,5 @@ interface EvalHealthStamp {
|
|
|
375
470
|
*/
|
|
376
471
|
declare function evalHealthStamp(report: SentinelReport): EvalHealthStamp;
|
|
377
472
|
//#endregion
|
|
378
|
-
export { CalibrationBin, CalibrationOptions, CalibrationPair, CalibrationReport, CatchRateReport, CatchRateStatus, CorrelationResult, CorrelationStudyOptions, CorrelationStudyResult, DeploymentOutcome, EvalHealthStamp, EvalMetricSpec, FileSystemOutcomeStore, FileSystemOutcomeStoreOptions, InMemoryOutcomeStore, JudgeSentinelOptions, OutcomeFilter, OutcomePair, OutcomeStore, Plant, PlantExpectation, PlantKind, PlantKindCounts, PlantManifest, PlantOutcome, RubricOutcomePair, RubricPredictiveValidityInput, RubricPredictiveValidityReport, RubricRanking, SeedPlantsOptions, SeededGradingSet, SentinelMetricName, SentinelMetrics, SentinelReport, SentinelSetOptions, SentinelSnapshot, SentinelStore, SentinelThresholds, SentinelTrend, SnapshotMeta, UnseededRejection, calibrationCurve, catchRate, correlationStudy, definePlant, evalHealthStamp, fileSentinelStore, inMemorySentinelStore, judgeSentinelReport, rubricPredictiveValidity, seedPlants, snapshotFromAgreement, snapshotFromCalibration, snapshotFromSentinelSet, validateSentinelSnapshot };
|
|
473
|
+
export { CalibrationBin, CalibrationOptions, CalibrationPair, CalibrationReport, CatchRateReport, CatchRateStatus, CorrelationResult, CorrelationStudyOptions, CorrelationStudyResult, DeploymentOutcome, EvalHealthStamp, EvalMetricSpec, EvidencePerturbation, FileSystemOutcomeStore, FileSystemOutcomeStoreOptions, InMemoryOutcomeStore, JudgeSentinelOptions, OutcomeFilter, OutcomePair, OutcomeStore, PerturbationKind, PerturbedField, PerturbedPlant, Plant, PlantEvidence, PlantExpectation, PlantKind, PlantKindCounts, PlantManifest, PlantOutcome, RubricOutcomePair, RubricPredictiveValidityInput, RubricPredictiveValidityReport, RubricRanking, SeedPlantsOptions, SeededGradingSet, SentinelMetricName, SentinelMetrics, SentinelReport, SentinelSetOptions, SentinelSnapshot, SentinelStore, SentinelThresholds, SentinelTrend, SnapshotMeta, UnseededRejection, calibrationCurve, catchRate, correlationStudy, definePlant, evalHealthStamp, fileSentinelStore, inMemorySentinelStore, judgeSentinelReport, perturbEvidence, plantByPerturbation, rubricPredictiveValidity, seedPlants, snapshotFromAgreement, snapshotFromCalibration, snapshotFromSentinelSet, validateSentinelSnapshot };
|
|
379
474
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/meta-eval/correlation-study.ts","../../src/meta-eval/calibration.ts","../../src/meta-eval/plants.ts","../../src/meta-eval/sentinel.ts"],"mappings":";;;;;;;;UAkBiB;EACf;;;EAGA,WAAW,KAAK,KAAK,OAAO,eAAe;;UAG5B;EACf;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;;EAEA;IAAe;IAAe;;;EAE9B;;UAGe;EACf,OAAO;EACP;EACA;;UAGe;;EAEf;;EAEA,gBAAgB;;EAEhB;;EAEA;;;EAGA;;iBAGoB,iBACpB,YAAY,YACZ,cAAc,cACd,aAAa,kBACb,8BACA,UAAS,0BACR,QAAQ;;;UCtDM;EACf;EACA;EACA;EACA;EACA;;EAEA;;UAGe;EACf;EACA;EACA;EACA,MAAM;;EAEN;;EAEA;;UAGe;EACf;;EAEA;;EAEA;IAAU;IAAY;;;UAGP;EACf;EACA;;iBAGoB,iBACpB,YAAY,YACZ,cAAc,cACd,YAAY,gBACZ,uBACA,UAAS,qBACR,QAAQ;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/meta-eval/correlation-study.ts","../../src/meta-eval/calibration.ts","../../src/meta-eval/plants.ts","../../src/meta-eval/sentinel.ts"],"mappings":";;;;;;;;UAkBiB;EACf;;;EAGA,WAAW,KAAK,KAAK,OAAO,eAAe;;UAG5B;EACf;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;;EAEA;IAAe;IAAe;;;EAE9B;;UAGe;EACf,OAAO;EACP;EACA;;UAGe;;EAEf;;EAEA,gBAAgB;;EAEhB;;EAEA;;;EAGA;;iBAGoB,iBACpB,YAAY,YACZ,cAAc,cACd,aAAa,kBACb,8BACA,UAAS,0BACR,QAAQ;;;UCtDM;EACf;EACA;EACA;EACA;EACA;;EAEA;;UAGe;EACf;EACA;EACA;EACA,MAAM;;EAEN;;EAEA;;UAGe;EACf;;EAEA;;EAEA;IAAU;IAAY;;;UAGP;EACf;EACA;;iBAGoB,iBACpB,YAAY,YACZ,cAAc,cACd,YAAY,gBACZ,uBACA,UAAS,qBACR,QAAQ;;;;;;;;KCQC;;;;;;;;;;KAkBA;UAOK;;EAEf;EACA,MAAM;;EAEN,MAAM;;EAEN,iBAAiB;;;;;;;;;;;;;;iBAeH,YAAY;EAC1B;EACA,MAAM;EACN,MAAM;EACN,iBAAiB;IACf;;;;;UAqDa;;EAEf;;EAEA;;;KAIU;;KAGA;UAEK;;EAEf,UAAU;;EAEV,OAAO;;EAEP,KAAK;;;;;;EAML;;EAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsJc,gBAAgB,UAAU,gBAAgB;UA8BzC;EACf,OAAO;;EAEP,UAAU;EACV,OAAO;EACP,KAAK;EACL;EACA;;;;;;;;;;;;;;;;;;;;;;iBAuBc,oBAAoB;EAClC;EACA;EACA,UAAU;;EAEV;EACA;IACE;UA0Ba;;;;;;EAMf,MAAM;;EAEN;;EAEA;;EAEA;;EAEA,QAAQ;;UAGO;;;;;;EAMf,OAAO;EACP,UAAU;;UAGK;;;;;EAKf;;;;;;EAMA;;;;;;;;;;;iBAYc,WACd,kBAAkB,cAClB,iBAAiB,SACjB,UAAS,oBACR;;;;;;UAqGc;EACf;EACA;;;;;;KAOU;UAEK;EACf;EACA;EACA;EACA;;EAEA;;;;;;;;UASe;EACf;EACA;EACA;;EAEA;;UAGe;EACf,QAAQ;;EAER;EACA;EACA;EACA;;;;;EAKA;;EAEA;;EAEA,QAAQ,QAAQ,OAAO,WAAW;;EAElC;;EAEA;EACA,UAAU;;;;;;;;;;iBAWI,UACd,kBAAkB,gBAClB,UAAU,gBACT;;;cC/lBG;KAEM,6BAA6B;UAExB;;EAEf;;EAEA;;EAEA;;UAGe;;EAEf;EACA;;EAEA;;;;;;;EAOA,SAAS;;;UAIM;EACf;EACA;EACA;;;iBAcc,yBAAyB,UAAU,kBAAkB;;;;;;iBAiCrD,wBACd,QAAQ,oBAAoB,6BAC5B,MAAM,eACL;;;;;;;;iBAmBa,sBACd,QAAQ,wBAAwB,qBAChC,MAAM,eACL;UAYc;;EAEf;;;;;;;;;iBAUc,wBACd,QAAQ,kBACR,QAAQ,cACR,MAAM,cACN,UAAS,qBACR;UA4Cc;EACf,OAAO,UAAU,mBAAmB;;EAEpC,QAAQ,mBAAmB,QAAQ;;iBAGrB,sBAAsB,UAAS,qBAA0B;;;;;;;iBAqBzD,kBAAkB,eAAe;UA0ChC;;EAEf;;EAEA;;EAEA;;EAEA;;UAGe;;EAEf;EACA,aAAa;;EAEb,cAAc;;UAGC;EACf;EACA,QAAQ;;EAER,OAAO;;EAEP;;EAEA;;EAEA;EACA;EACA;;UAGe;EACf,UAAU;EACV;EACA;;;;;;;EAOA;;iBAKc,oBACd,SAAS,oBACT,MAAM,uBACL;UA6Gc;EACf;EACA;;;;;;;;;;iBAWc,gBAAgB,QAAQ,iBAAiB"}
|
package/dist/meta-eval/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import { a as hashCanonical } from "../canonical-DPyQ_rpt.js";
|
|
|
3
3
|
import { i as makeRng } from "../internal-BMFSR8Ns.js";
|
|
4
4
|
import { t as mulberry32 } from "../random-Dn5fPWkt.js";
|
|
5
5
|
import { a as spearmanR, r as pearsonR } from "../descriptive-1V17A-qa.js";
|
|
6
|
-
import { u as runMetricExtractor } from "../query-
|
|
6
|
+
import { u as runMetricExtractor } from "../query-D1nLIKt7.js";
|
|
7
7
|
import { t as analyzeSeries } from "../series-convergence-CjO2QdRW.js";
|
|
8
8
|
import { t as rubricPredictiveValidity } from "../rubric-predictive-validity-2D5Gw9z9.js";
|
|
9
9
|
import { n as InMemoryOutcomeStore, t as FileSystemOutcomeStore } from "../outcome-store-ChBKlTd_.js";
|
|
@@ -257,6 +257,15 @@ function bootstrapPearsonCi(xs, ys, iterations, seed) {
|
|
|
257
257
|
* the digest the sealed-experiment path uses, so the answer key cannot be
|
|
258
258
|
* revised once the results are in.
|
|
259
259
|
*
|
|
260
|
+
* Authoring the wrong item is the step before all of that, and it is where the
|
|
261
|
+
* measurement silently breaks. {@link plantByPerturbation} takes a claim a
|
|
262
|
+
* grader verified and alters exactly one load-bearing value in its evidence,
|
|
263
|
+
* so the grader is asked a question it must fail. Hand-rolled perturbation
|
|
264
|
+
* bumps a number that is part of an identity — `python3`, `file42.txt`, `1.5`,
|
|
265
|
+
* `utf-8` — and the check stops EXECUTING; the plant then measures the
|
|
266
|
+
* environment rather than the grader. {@link perturbEvidence} refuses those
|
|
267
|
+
* digit runs by construction.
|
|
268
|
+
*
|
|
260
269
|
* Blindness has two halves, and this module owns one. It never puts a plant
|
|
261
270
|
* flag on a graded item: `seedPlants` returns the mixed set and a manifest,
|
|
262
271
|
* and only the manifest knows which ids are seeded. Keeping the manifest out
|
|
@@ -315,6 +324,195 @@ function definePlant(input) {
|
|
|
315
324
|
};
|
|
316
325
|
}
|
|
317
326
|
/**
|
|
327
|
+
* Characters that make a digit run part of something larger than a number.
|
|
328
|
+
*
|
|
329
|
+
* A run that touches one of these is an identity — `python3`, `file42.txt`,
|
|
330
|
+
* `1.5`, `utf-8` — and bumping it renames a program, a file, a version, or an
|
|
331
|
+
* encoding instead of falsifying the claim. The check then stops EXECUTING,
|
|
332
|
+
* and a plant that cannot run measures the environment rather than the grader:
|
|
333
|
+
* it reads as caught, for a reason that has nothing to do with the seeded
|
|
334
|
+
* defect.
|
|
335
|
+
*/
|
|
336
|
+
const NUMBER_GLUE = /[A-Za-z0-9_./-]/;
|
|
337
|
+
/**
|
|
338
|
+
* Comparison tokens that mean one thing only, each with its inversion.
|
|
339
|
+
*
|
|
340
|
+
* A bare `>` or `<` is absent on purpose: in a shell check it is a
|
|
341
|
+
* redirection, so flipping it rewrites where output goes rather than what the
|
|
342
|
+
* test asks, and the check stops testing the claim.
|
|
343
|
+
*/
|
|
344
|
+
const COMPARISON_FLIPS = [
|
|
345
|
+
[" -ge ", " -lt "],
|
|
346
|
+
[" -gt ", " -le "],
|
|
347
|
+
[" -le ", " -gt "],
|
|
348
|
+
[" -lt ", " -ge "],
|
|
349
|
+
[" -eq ", " -ne "],
|
|
350
|
+
[" -ne ", " -eq "],
|
|
351
|
+
[">=", "<"],
|
|
352
|
+
["<=", ">"],
|
|
353
|
+
["==", "!="],
|
|
354
|
+
["!=", "=="]
|
|
355
|
+
];
|
|
356
|
+
/**
|
|
357
|
+
* The last digit run in `text` that is a number and nothing else, or null.
|
|
358
|
+
*
|
|
359
|
+
* The last is taken because a measured value trails its label — `count=42`,
|
|
360
|
+
* `n>=5 OK cells=8` — and because the choice has to be deterministic: the same
|
|
361
|
+
* claim must always yield the same plant, or two runs of the same authoring
|
|
362
|
+
* step seed two different answer keys for one item.
|
|
363
|
+
*/
|
|
364
|
+
function lastStandaloneNumber(text) {
|
|
365
|
+
const digits = /\d+/g;
|
|
366
|
+
let found = null;
|
|
367
|
+
let match = digits.exec(text);
|
|
368
|
+
while (match !== null) {
|
|
369
|
+
const start = match.index;
|
|
370
|
+
const end = start + match[0].length;
|
|
371
|
+
if (!NUMBER_GLUE.test(text.charAt(start - 1)) && !NUMBER_GLUE.test(text.charAt(end))) found = {
|
|
372
|
+
start,
|
|
373
|
+
end
|
|
374
|
+
};
|
|
375
|
+
match = digits.exec(text);
|
|
376
|
+
}
|
|
377
|
+
return found;
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* The first flippable comparison in `text`, or null.
|
|
381
|
+
*
|
|
382
|
+
* Any single flip inverts the test wherever it sits, so unlike the number rule
|
|
383
|
+
* there is no safety ordering among the matches. The first is taken so the
|
|
384
|
+
* result is fixed by the head of the command and does not move when a later
|
|
385
|
+
* comparison is added.
|
|
386
|
+
*/
|
|
387
|
+
function firstComparison(text) {
|
|
388
|
+
for (let index = 0; index < text.length; index += 1) for (const [token, flipped] of COMPARISON_FLIPS) if (text.startsWith(token, index)) return {
|
|
389
|
+
span: {
|
|
390
|
+
start: index,
|
|
391
|
+
end: index + token.length
|
|
392
|
+
},
|
|
393
|
+
flipped
|
|
394
|
+
};
|
|
395
|
+
return null;
|
|
396
|
+
}
|
|
397
|
+
function replaceSpan(text, span, value) {
|
|
398
|
+
return text.slice(0, span.start) + value + text.slice(span.end);
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Rebuild the evidence with one field replaced. An absent field is dropped
|
|
402
|
+
* rather than set to undefined, so the record always has a canonical JSON form.
|
|
403
|
+
*/
|
|
404
|
+
function withField(check, expect, field, value) {
|
|
405
|
+
const nextCheck = field === "check" ? value : check;
|
|
406
|
+
const nextExpect = field === "expect" ? value : expect;
|
|
407
|
+
return {
|
|
408
|
+
...nextCheck === void 0 ? {} : { check: nextCheck },
|
|
409
|
+
...nextExpect === void 0 ? {} : { expect: nextExpect }
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
function offByOne(check, expect, field, text, span) {
|
|
413
|
+
const original = text.slice(span.start, span.end);
|
|
414
|
+
const perturbed = (BigInt(original) + 1n).toString();
|
|
415
|
+
return {
|
|
416
|
+
evidence: withField(check, expect, field, replaceSpan(text, span, perturbed)),
|
|
417
|
+
field,
|
|
418
|
+
how: "number-off-by-one",
|
|
419
|
+
original,
|
|
420
|
+
perturbed
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Derive a known-wrong version of a claim's evidence by altering exactly one
|
|
425
|
+
* value, or return null when no value can be altered safely.
|
|
426
|
+
*
|
|
427
|
+
* Exactly one value changes. A perturbation that moves two does not name the
|
|
428
|
+
* defect it seeded, so a grader that catches it says nothing about which defect
|
|
429
|
+
* the grader can see.
|
|
430
|
+
*
|
|
431
|
+
* The preference order IS the safety order:
|
|
432
|
+
*
|
|
433
|
+
* 1. the last standalone number in `expect` — it falsifies the claim while the
|
|
434
|
+
* command still runs exactly as it did;
|
|
435
|
+
* 2. a flipped comparison in `check` — it inverts a test that was passing;
|
|
436
|
+
* 3. the last standalone number in `check` — last because a number in a command
|
|
437
|
+
* can name an input (a port, a width, a version) rather than a threshold,
|
|
438
|
+
* and renaming an input breaks execution, not the claim.
|
|
439
|
+
*
|
|
440
|
+
* "Standalone" excludes a digit run glued to a word, a dot, a slash, or a
|
|
441
|
+
* hyphen: `python3`, `file42.txt`, `1.5`, `utf-8`. That exclusion is why this
|
|
442
|
+
* helper exists. Hand-rolled perturbation bumps one of those, the check stops
|
|
443
|
+
* executing, and the plant measures the environment instead of the grader.
|
|
444
|
+
*
|
|
445
|
+
* A number is bumped with BigInt, so a value wider than
|
|
446
|
+
* `Number.MAX_SAFE_INTEGER` moves by exactly one. Bumped as a `number` it
|
|
447
|
+
* rounds back to itself, and the plant is then a correct claim the grader is
|
|
448
|
+
* right to verify.
|
|
449
|
+
*/
|
|
450
|
+
function perturbEvidence(evidence) {
|
|
451
|
+
const check = typeof evidence.check === "string" ? evidence.check : void 0;
|
|
452
|
+
const expect = typeof evidence.expect === "string" ? evidence.expect : void 0;
|
|
453
|
+
if (expect !== void 0) {
|
|
454
|
+
const span = lastStandaloneNumber(expect);
|
|
455
|
+
if (span !== null) return offByOne(check, expect, "expect", expect, span);
|
|
456
|
+
}
|
|
457
|
+
if (check !== void 0) {
|
|
458
|
+
const comparison = firstComparison(check);
|
|
459
|
+
if (comparison !== null) return {
|
|
460
|
+
evidence: withField(check, expect, "check", replaceSpan(check, comparison.span, comparison.flipped)),
|
|
461
|
+
field: "check",
|
|
462
|
+
how: "comparison-flipped",
|
|
463
|
+
original: check.slice(comparison.span.start, comparison.span.end),
|
|
464
|
+
perturbed: comparison.flipped
|
|
465
|
+
};
|
|
466
|
+
const span = lastStandaloneNumber(check);
|
|
467
|
+
if (span !== null) return offByOne(check, expect, "check", check, span);
|
|
468
|
+
}
|
|
469
|
+
return null;
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* Derive a reject-direction plant from a claim a grader verified, by perturbing
|
|
473
|
+
* one value.
|
|
474
|
+
*
|
|
475
|
+
* {@link definePlant} takes a {@link GoldenItem} and never authors a wrong item
|
|
476
|
+
* from a right one, so until now every caller hand-rolled the perturbation.
|
|
477
|
+
* This is that step, done once and the same way every time: the claim's
|
|
478
|
+
* evidence is altered by {@link perturbEvidence}, the result is a `wrong-value`
|
|
479
|
+
* plant the grader owes a `reject`, and the record itself is built by
|
|
480
|
+
* `definePlant` so every refusal there still applies — in particular the one
|
|
481
|
+
* that catches an `expectedVerdict` its `humanScore` contradicts.
|
|
482
|
+
*
|
|
483
|
+
* Returns null when nothing in the evidence can be perturbed. That is not a
|
|
484
|
+
* failure: a claim with no executable evidence cannot be made wrong in a way a
|
|
485
|
+
* grader could execute, and seeding it would measure prose.
|
|
486
|
+
*
|
|
487
|
+
* Refuses an empty `id` or `itemId`. Both name the record — one in the manifest
|
|
488
|
+
* and in `missedIds`, the other in the join with the results — and a miss
|
|
489
|
+
* nobody can look up is not a measurement.
|
|
490
|
+
*/
|
|
491
|
+
function plantByPerturbation(input) {
|
|
492
|
+
const { id, itemId, evidence, humanScore = 0, group } = input;
|
|
493
|
+
if (typeof id !== "string" || id.trim() === "") throw new ValidationError("plantByPerturbation: id must be a non-empty string");
|
|
494
|
+
if (typeof itemId !== "string" || itemId.trim() === "") throw new ValidationError(`plantByPerturbation: plant "${id}" has an empty itemId`);
|
|
495
|
+
const perturbation = perturbEvidence(evidence);
|
|
496
|
+
if (perturbation === null) return null;
|
|
497
|
+
return {
|
|
498
|
+
plant: definePlant({
|
|
499
|
+
id,
|
|
500
|
+
kind: "wrong-value",
|
|
501
|
+
item: {
|
|
502
|
+
itemId,
|
|
503
|
+
humanScore,
|
|
504
|
+
...group === void 0 ? {} : { group }
|
|
505
|
+
},
|
|
506
|
+
expectedVerdict: "reject"
|
|
507
|
+
}),
|
|
508
|
+
evidence: perturbation.evidence,
|
|
509
|
+
field: perturbation.field,
|
|
510
|
+
how: perturbation.how,
|
|
511
|
+
original: perturbation.original,
|
|
512
|
+
perturbed: perturbation.perturbed
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
/**
|
|
318
516
|
* Mix plants into a grading set and seal which items they are.
|
|
319
517
|
*
|
|
320
518
|
* Refusals: a duplicate id anywhere in the mixed set (the join is by id, so a
|
|
@@ -784,6 +982,6 @@ function evalHealthStamp(report) {
|
|
|
784
982
|
};
|
|
785
983
|
}
|
|
786
984
|
//#endregion
|
|
787
|
-
export { FileSystemOutcomeStore, InMemoryOutcomeStore, calibrationCurve, catchRate, correlationStudy, definePlant, evalHealthStamp, fileSentinelStore, inMemorySentinelStore, judgeSentinelReport, rubricPredictiveValidity, seedPlants, snapshotFromAgreement, snapshotFromCalibration, snapshotFromSentinelSet, validateSentinelSnapshot };
|
|
985
|
+
export { FileSystemOutcomeStore, InMemoryOutcomeStore, calibrationCurve, catchRate, correlationStudy, definePlant, evalHealthStamp, fileSentinelStore, inMemorySentinelStore, judgeSentinelReport, perturbEvidence, plantByPerturbation, rubricPredictiveValidity, seedPlants, snapshotFromAgreement, snapshotFromCalibration, snapshotFromSentinelSet, validateSentinelSnapshot };
|
|
788
986
|
|
|
789
987
|
//# sourceMappingURL=index.js.map
|