@tangle-network/agent-eval 0.179.0 → 0.181.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.
Files changed (236) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/README.md +119 -146
  3. package/dist/adapters/http.d.ts +2 -2
  4. package/dist/{agent-profile-B7yErX0q.d.ts → agent-profile-CivaSsSy.d.ts} +4 -4
  5. package/dist/{agent-profile-B7yErX0q.d.ts.map → agent-profile-CivaSsSy.d.ts.map} +1 -1
  6. package/dist/{agent-profile-cell-0gSi5ffD.js → agent-profile-cell-Cv6UA-W_.js} +20 -57
  7. package/dist/agent-profile-cell-Cv6UA-W_.js.map +1 -0
  8. package/dist/{agent-profile-cell-CTOZJUuE.d.ts → agent-profile-cell-s__adRnK.d.ts} +3 -3
  9. package/dist/agent-profile-cell-s__adRnK.d.ts.map +1 -0
  10. package/dist/analyst/index.d.ts +10 -10
  11. package/dist/analyst/index.js +4 -4
  12. package/dist/ast-CP9ae9B0.js +557 -0
  13. package/dist/ast-CP9ae9B0.js.map +1 -0
  14. package/dist/ast-hI-vjW6J.d.ts +457 -0
  15. package/dist/ast-hI-vjW6J.d.ts.map +1 -0
  16. package/dist/{benchmark-command-CY6Dg5t5.js → benchmark-command-B57n9vjz.js} +7 -6
  17. package/dist/{benchmark-command-CY6Dg5t5.js.map → benchmark-command-B57n9vjz.js.map} +1 -1
  18. package/dist/benchmarks/index.d.ts +4 -4
  19. package/dist/benchmarks/index.js +3 -3
  20. package/dist/campaign/index.d.ts +6 -6
  21. package/dist/campaign/index.js +8 -8
  22. package/dist/{campaign-BGEurASO.js → campaign-4_ppJW5X.js} +12 -12
  23. package/dist/{campaign-BGEurASO.js.map → campaign-4_ppJW5X.js.map} +1 -1
  24. package/dist/{campaign-evidence-D8DBLqLI.js → campaign-evidence-B8oF9xQ6.js} +515 -471
  25. package/dist/campaign-evidence-B8oF9xQ6.js.map +1 -0
  26. package/dist/cli.js +5 -8
  27. package/dist/cli.js.map +1 -1
  28. package/dist/{client-BlLY6o2w.js → client-CXE-U1SA.js} +3 -1
  29. package/dist/client-CXE-U1SA.js.map +1 -0
  30. package/dist/{client-CuQgX33c.d.ts → client-kh2jOjTK.d.ts} +4 -4
  31. package/dist/{client-CuQgX33c.d.ts.map → client-kh2jOjTK.d.ts.map} +1 -1
  32. package/dist/contract/index.d.ts +13 -13
  33. package/dist/contract/index.js +11 -10
  34. package/dist/contract/index.js.map +1 -1
  35. package/dist/{default-registry-IGDE9XIC.d.ts → default-registry-BwDSWVzg.d.ts} +6 -6
  36. package/dist/{default-registry-IGDE9XIC.d.ts.map → default-registry-BwDSWVzg.d.ts.map} +1 -1
  37. package/dist/{default-registry-BryMEmr8.js → default-registry-aL7xUrUz.js} +2 -2
  38. package/dist/{default-registry-BryMEmr8.js.map → default-registry-aL7xUrUz.js.map} +1 -1
  39. package/dist/{define-agent-eval-Cx4Ls9ta.d.ts → define-agent-eval-CwOWWQt_.d.ts} +33 -12
  40. package/dist/define-agent-eval-CwOWWQt_.d.ts.map +1 -0
  41. package/dist/{define-agent-eval-Dzidv34q.js → define-agent-eval-Ddu33JH9.js} +134 -67
  42. package/dist/define-agent-eval-Ddu33JH9.js.map +1 -0
  43. package/dist/{dspy-rlm-engine-xKiWmj_G.js → dspy-rlm-engine-S53V0HhE.js} +2 -2
  44. package/dist/{dspy-rlm-engine-xKiWmj_G.js.map → dspy-rlm-engine-S53V0HhE.js.map} +1 -1
  45. package/dist/{engine-CX8ReXkn.d.ts → engine-DS1cysJy.d.ts} +10 -7
  46. package/dist/engine-DS1cysJy.d.ts.map +1 -0
  47. package/dist/{eval-campaign-Cs-7MiCs.js → eval-campaign-aYdtjtJR.js} +4 -4
  48. package/dist/{eval-campaign-Cs-7MiCs.js.map → eval-campaign-aYdtjtJR.js.map} +1 -1
  49. package/dist/{exact-types-B7LC1EyX.d.ts → exact-types-BZDe0W2D.d.ts} +2 -2
  50. package/dist/{exact-types-B7LC1EyX.d.ts.map → exact-types-BZDe0W2D.d.ts.map} +1 -1
  51. package/dist/experiment/index.d.ts +27 -477
  52. package/dist/experiment/index.d.ts.map +1 -1
  53. package/dist/experiment/index.js +95 -559
  54. package/dist/experiment/index.js.map +1 -1
  55. package/dist/{experiment-tracker-B3TiF5-u.d.ts → experiment-tracker-C7PfnF4b.d.ts} +2 -2
  56. package/dist/{experiment-tracker-B3TiF5-u.d.ts.map → experiment-tracker-C7PfnF4b.d.ts.map} +1 -1
  57. package/dist/{external-optimizer-process-Dlz8YxrT.js → external-optimizer-process-QDRURJAM.js} +3 -3
  58. package/dist/{external-optimizer-process-Dlz8YxrT.js.map → external-optimizer-process-QDRURJAM.js.map} +1 -1
  59. package/dist/{external-optimizer-subprocess-q3VzlGAO.js → external-optimizer-subprocess-D4dzUBZI.js} +3 -2
  60. package/dist/{external-optimizer-subprocess-q3VzlGAO.js.map → external-optimizer-subprocess-D4dzUBZI.js.map} +1 -1
  61. package/dist/{feedback-trajectory-eHWNv5Aj.d.ts → feedback-trajectory-CXmtITBo.d.ts} +3 -3
  62. package/dist/{feedback-trajectory-eHWNv5Aj.d.ts.map → feedback-trajectory-CXmtITBo.d.ts.map} +1 -1
  63. package/dist/hosted/index.d.ts +2 -2
  64. package/dist/hosted/index.d.ts.map +1 -1
  65. package/dist/hosted/index.js +1 -1
  66. package/dist/{index-BxWvILU8.d.ts → index-Bp_6sj3x.d.ts} +109 -56
  67. package/dist/index-Bp_6sj3x.d.ts.map +1 -0
  68. package/dist/{index-e7LXeRVa.d.ts → index-CJ3LhKIX.d.ts} +2 -2
  69. package/dist/{index-e7LXeRVa.d.ts.map → index-CJ3LhKIX.d.ts.map} +1 -1
  70. package/dist/{index-CbLmrWCa.d.ts → index-DNntP4ch.d.ts} +8 -8
  71. package/dist/{index-CbLmrWCa.d.ts.map → index-DNntP4ch.d.ts.map} +1 -1
  72. package/dist/{index-DxNYmx4a.d.ts → index-DoykkxW0.d.ts} +11 -11
  73. package/dist/{index-DxNYmx4a.d.ts.map → index-DoykkxW0.d.ts.map} +1 -1
  74. package/dist/index.d.ts +28 -28
  75. package/dist/index.js +25 -16
  76. package/dist/index.js.map +1 -1
  77. package/dist/{insight-report-DETqPc_A.d.ts → insight-report-D1qa0HWs.d.ts} +9 -5
  78. package/dist/{insight-report-DETqPc_A.d.ts.map → insight-report-D1qa0HWs.d.ts.map} +1 -1
  79. package/dist/{integrity-DsHWCebQ.js → integrity-DH5ng72x.js} +2 -2
  80. package/dist/{integrity-DsHWCebQ.js.map → integrity-DH5ng72x.js.map} +1 -1
  81. package/dist/{integrity-BKTcA-HP.d.ts → integrity-rGOfSUle.d.ts} +2 -2
  82. package/dist/{integrity-BKTcA-HP.d.ts.map → integrity-rGOfSUle.d.ts.map} +1 -1
  83. package/dist/{ledger-core-Cs9f7385.js → journal-Cs9f7385.js} +1 -1
  84. package/dist/journal-Cs9f7385.js.map +1 -0
  85. package/dist/{judge-calibration-C5CbMYce.d.ts → judge-calibration-DFtEMlde.d.ts} +31 -2
  86. package/dist/judge-calibration-DFtEMlde.d.ts.map +1 -0
  87. package/dist/{judge-calibration-BnpVKtnb.js → judge-calibration-DYmaBtJr.js} +48 -2
  88. package/dist/{judge-calibration-BnpVKtnb.js.map → judge-calibration-DYmaBtJr.js.map} +1 -1
  89. package/dist/ledger-core/index.d.ts +1 -1
  90. package/dist/ledger-core/index.js +1 -1
  91. package/dist/{llm-judge-v80Kmu9g.js → llm-judge-DEFZeSiu.js} +645 -456
  92. package/dist/llm-judge-DEFZeSiu.js.map +1 -0
  93. package/dist/{matrix-DeMmnWrP.d.ts → matrix-CyhW-vgJ.d.ts} +2 -2
  94. package/dist/{matrix-DeMmnWrP.d.ts.map → matrix-CyhW-vgJ.d.ts.map} +1 -1
  95. package/dist/meta-eval/index.d.ts +138 -7
  96. package/dist/meta-eval/index.d.ts.map +1 -1
  97. package/dist/meta-eval/index.js +245 -97
  98. package/dist/meta-eval/index.js.map +1 -1
  99. package/dist/{mint-Cc1_zwRQ.js → mint-ySIIkKlV.js} +2 -2
  100. package/dist/{mint-Cc1_zwRQ.js.map → mint-ySIIkKlV.js.map} +1 -1
  101. package/dist/multishot/golden/index.d.ts +1 -1
  102. package/dist/multishot/index.d.ts +2 -2
  103. package/dist/openapi.json +1 -1
  104. package/dist/outcome-store-BXlkwMPR.js +131 -0
  105. package/dist/outcome-store-BXlkwMPR.js.map +1 -0
  106. package/dist/{outcome-store-BYHIuO0e.d.ts → outcome-store-CNt4iZ67.d.ts} +18 -25
  107. package/dist/outcome-store-CNt4iZ67.d.ts.map +1 -0
  108. package/dist/{paired-promotion-decision-CGzg0cI_.d.ts → paired-promotion-decision-DPsMQm-0.d.ts} +13 -7
  109. package/dist/{paired-promotion-decision-CGzg0cI_.d.ts.map → paired-promotion-decision-DPsMQm-0.d.ts.map} +1 -1
  110. package/dist/pipelines/index.js +1 -1
  111. package/dist/{produced-state-Cv0kJJuP.js → produced-state-BHboMaab.js} +3 -3
  112. package/dist/{produced-state-Cv0kJJuP.js.map → produced-state-BHboMaab.js.map} +1 -1
  113. package/dist/profile-cell.d.ts +1 -1
  114. package/dist/profile-cell.js +1 -1
  115. package/dist/{promotion-policy-DWOm70gx.js → promotion-policy-CDMMxzb6.js} +28 -40
  116. package/dist/promotion-policy-CDMMxzb6.js.map +1 -0
  117. package/dist/{registry-ByVld1-5.d.ts → registry-BRbB6Y0v.d.ts} +4 -4
  118. package/dist/{registry-ByVld1-5.d.ts.map → registry-BRbB6Y0v.d.ts.map} +1 -1
  119. package/dist/{release-confidence-BAcNYOf1.d.ts → release-confidence-BcqeQTHW.d.ts} +3 -3
  120. package/dist/{release-confidence-BAcNYOf1.d.ts.map → release-confidence-BcqeQTHW.d.ts.map} +1 -1
  121. package/dist/{release-confidence-BcGCclTB.js → release-confidence-DMg8n18l.js} +2 -2
  122. package/dist/{release-confidence-BcGCclTB.js.map → release-confidence-DMg8n18l.js.map} +1 -1
  123. package/dist/{report-command-DKlXfU5r.js → report-command-V1ecVgAv.js} +27 -3
  124. package/dist/report-command-V1ecVgAv.js.map +1 -0
  125. package/dist/reporting.d.ts +4 -4
  126. package/dist/reporting.js +3 -3
  127. package/dist/{researcher-jsW1X94L.d.ts → researcher-64T49THL.d.ts} +6 -6
  128. package/dist/{researcher-jsW1X94L.d.ts.map → researcher-64T49THL.d.ts.map} +1 -1
  129. package/dist/{reward-hacking-ZXEi9VCq.d.ts → reward-hacking-uzO_ihep.d.ts} +2 -2
  130. package/dist/{reward-hacking-ZXEi9VCq.d.ts.map → reward-hacking-uzO_ihep.d.ts.map} +1 -1
  131. package/dist/rl.d.ts +53 -99
  132. package/dist/rl.d.ts.map +1 -1
  133. package/dist/rl.js +182 -169
  134. package/dist/rl.js.map +1 -1
  135. package/dist/rollout/index.d.ts +1 -1
  136. package/dist/rollout/index.js +2 -2
  137. package/dist/{rollout-DmoJVqrF.js → rollout-B-UF5R6w.js} +2 -2
  138. package/dist/{rollout-DmoJVqrF.js.map → rollout-B-UF5R6w.js.map} +1 -1
  139. package/dist/rubric-predictive-validity-Bmj2_cll.d.ts +79 -0
  140. package/dist/rubric-predictive-validity-Bmj2_cll.d.ts.map +1 -0
  141. package/dist/rubric-predictive-validity-CCK-1B7w.js +178 -0
  142. package/dist/rubric-predictive-validity-CCK-1B7w.js.map +1 -0
  143. package/dist/{run-record-DTv1MdjK.d.ts → run-record-BiTWauyO.d.ts} +2 -2
  144. package/dist/{run-record-DTv1MdjK.d.ts.map → run-record-BiTWauyO.d.ts.map} +1 -1
  145. package/dist/run-record-Br-Yzt_k.js +464 -0
  146. package/dist/run-record-Br-Yzt_k.js.map +1 -0
  147. package/dist/{run-record-DQpSf7t-.js → run-record-DualPTn2.js} +2 -2
  148. package/dist/{run-record-DQpSf7t-.js.map → run-record-DualPTn2.js.map} +1 -1
  149. package/dist/{semantic-concept-judge-Bi6_iGqg.js → semantic-concept-judge-Bm5JDEKO.js} +3 -3
  150. package/dist/{semantic-concept-judge-Bi6_iGqg.js.map → semantic-concept-judge-Bm5JDEKO.js.map} +1 -1
  151. package/dist/{sequential-B5gXgcyp.js → sequential-DAsyV2T9.js} +42 -25
  152. package/dist/sequential-DAsyV2T9.js.map +1 -0
  153. package/dist/{series-convergence-DeG33RpC.d.ts → series-convergence-BnMs_uAr.d.ts} +3 -3
  154. package/dist/{series-convergence-DeG33RpC.d.ts.map → series-convergence-BnMs_uAr.d.ts.map} +1 -1
  155. package/dist/{skillopt-optimization-method-C3oYul8v.js → skillopt-optimization-method-CL_0aArC.js} +5 -5
  156. package/dist/{skillopt-optimization-method-C3oYul8v.js.map → skillopt-optimization-method-CL_0aArC.js.map} +1 -1
  157. package/dist/{statistical-heldout-0La5ZTlv.d.ts → statistical-heldout-CpVd6FmY.d.ts} +207 -144
  158. package/dist/statistical-heldout-CpVd6FmY.d.ts.map +1 -0
  159. package/dist/{store-tool-spans-4J1EDElP.d.ts → store-tool-spans-Dt-YdAuE.d.ts} +6 -6
  160. package/dist/{store-tool-spans-4J1EDElP.d.ts.map → store-tool-spans-Dt-YdAuE.d.ts.map} +1 -1
  161. package/dist/{summary-report-gMrbYawB.d.ts → summary-report-D1h4dlrK.d.ts} +3 -3
  162. package/dist/{summary-report-gMrbYawB.d.ts.map → summary-report-D1h4dlrK.d.ts.map} +1 -1
  163. package/dist/{summary-report-B16xy9Kd.js → summary-report-e-MaOAHV.js} +2 -2
  164. package/dist/{summary-report-B16xy9Kd.js.map → summary-report-e-MaOAHV.js.map} +1 -1
  165. package/dist/supervisor-run/index.d.ts +4 -2
  166. package/dist/supervisor-run/index.d.ts.map +1 -1
  167. package/dist/supervisor-run/index.js +3 -3
  168. package/dist/{terminal-record-Ce9_UjRz.js → terminal-record-BtPwKTSr.js} +58 -26
  169. package/dist/terminal-record-BtPwKTSr.js.map +1 -0
  170. package/dist/{tool-groups-2QA0S7dK.d.ts → tool-groups-B2bSNaJB.d.ts} +3 -3
  171. package/dist/tool-groups-B2bSNaJB.d.ts.map +1 -0
  172. package/dist/{tool-waste-B9tdWV6g.js → tool-waste-C7MU9u1e.js} +2 -2
  173. package/dist/{tool-waste-B9tdWV6g.js.map → tool-waste-C7MU9u1e.js.map} +1 -1
  174. package/dist/trace-repair/index.d.ts +2 -2
  175. package/dist/traces.d.ts +6 -6
  176. package/dist/traces.js +1 -1
  177. package/dist/{types-BmlkCrg0.d.ts → types-BvZoPTGa.d.ts} +3 -3
  178. package/dist/{types-BmlkCrg0.d.ts.map → types-BvZoPTGa.d.ts.map} +1 -1
  179. package/dist/{types-gvRsyJLh.d.ts → types-CBbLtr2J.d.ts} +38 -3
  180. package/dist/{types-gvRsyJLh.d.ts.map → types-CBbLtr2J.d.ts.map} +1 -1
  181. package/dist/{types-C34V4Vto.d.ts → types-CS0qk_Yp.d.ts} +4 -4
  182. package/dist/{types-C34V4Vto.d.ts.map → types-CS0qk_Yp.d.ts.map} +1 -1
  183. package/dist/{types-DzuaM493.d.ts → types-D7gEdPoQ.d.ts} +3 -3
  184. package/dist/{types-DzuaM493.d.ts.map → types-D7gEdPoQ.d.ts.map} +1 -1
  185. package/dist/{types-vUdAx2Cj.d.ts → types-lPkDQNqJ.d.ts} +20 -2
  186. package/dist/{types-vUdAx2Cj.d.ts.map → types-lPkDQNqJ.d.ts.map} +1 -1
  187. package/dist/wire/index.d.ts +2 -2
  188. package/docs/adapters-observability.md +14 -0
  189. package/docs/campaign-proposers.md +86 -128
  190. package/docs/charter.md +108 -112
  191. package/docs/concepts.md +157 -69
  192. package/docs/design/mlbenchmarks-book-review.md +440 -0
  193. package/docs/design/mlbenchmarks-review/observations.json +713 -0
  194. package/docs/design/mlbenchmarks-review/probes.mts +476 -0
  195. package/docs/design/mlbenchmarks-review/sources.json +200 -0
  196. package/docs/design/self-improvement-evidence-audit.md +263 -0
  197. package/docs/design.md +2 -1
  198. package/docs/eval-surface-map.md +95 -42
  199. package/docs/evaluation-integrity.md +220 -0
  200. package/docs/experiment.md +111 -55
  201. package/docs/feature-guide.md +5 -6
  202. package/docs/hosted-ingest-spec.md +4 -11
  203. package/docs/insight-report.md +187 -455
  204. package/docs/outcome-validity.md +182 -0
  205. package/docs/product-eval-adoption.md +1 -2
  206. package/docs/research-report-methodology.md +7 -7
  207. package/docs/search-history-receipts.md +8 -0
  208. package/docs/statistical-evidence.md +129 -0
  209. package/docs/verdicts.md +76 -49
  210. package/package.json +1 -1
  211. package/dist/agent-profile-cell-0gSi5ffD.js.map +0 -1
  212. package/dist/agent-profile-cell-CTOZJUuE.d.ts.map +0 -1
  213. package/dist/campaign-evidence-D8DBLqLI.js.map +0 -1
  214. package/dist/client-BlLY6o2w.js.map +0 -1
  215. package/dist/define-agent-eval-Cx4Ls9ta.d.ts.map +0 -1
  216. package/dist/define-agent-eval-Dzidv34q.js.map +0 -1
  217. package/dist/engine-CX8ReXkn.d.ts.map +0 -1
  218. package/dist/index-BxWvILU8.d.ts.map +0 -1
  219. package/dist/judge-calibration-C5CbMYce.d.ts.map +0 -1
  220. package/dist/ledger-core-Cs9f7385.js.map +0 -1
  221. package/dist/llm-judge-v80Kmu9g.js.map +0 -1
  222. package/dist/outcome-store-BYHIuO0e.d.ts.map +0 -1
  223. package/dist/outcome-store-ChBKlTd_.js +0 -75
  224. package/dist/outcome-store-ChBKlTd_.js.map +0 -1
  225. package/dist/promotion-policy-DWOm70gx.js.map +0 -1
  226. package/dist/report-command-DKlXfU5r.js.map +0 -1
  227. package/dist/rubric-predictive-validity-2D5Gw9z9.js +0 -131
  228. package/dist/rubric-predictive-validity-2D5Gw9z9.js.map +0 -1
  229. package/dist/rubric-predictive-validity-Dl1dvKCv.d.ts +0 -75
  230. package/dist/rubric-predictive-validity-Dl1dvKCv.d.ts.map +0 -1
  231. package/dist/run-record-CR63CpHK.js +0 -216
  232. package/dist/run-record-CR63CpHK.js.map +0 -1
  233. package/dist/sequential-B5gXgcyp.js.map +0 -1
  234. package/dist/statistical-heldout-0La5ZTlv.d.ts.map +0 -1
  235. package/dist/terminal-record-Ce9_UjRz.js.map +0 -1
  236. package/dist/tool-groups-2QA0S7dK.d.ts.map +0 -1
@@ -1,22 +1,36 @@
1
1
  import { c as CostLedgerHandle, f as CostLedgerSummary, m as CostReceipt } from "./cost-ledger-DbQdN3nO.js";
2
- import { _ as ProposalFinding } from "./types-DzuaM493.js";
3
- import { B as PowerPreflight, ft as EvidenceReceipt, it as CampaignEvidenceContext } from "./statistical-heldout-0La5ZTlv.js";
4
- import { H as SurfaceProposer, R as Scenario, S as JudgeConfig, a as CampaignResult, d as DispatchContext, j as MutableSurface, k as LabeledScenarioStore, p as Gate, v as GateResult } from "./types-C34V4Vto.js";
5
- import { $n as LoopProvenanceRecord, Ii as PremeasuredOptimizationBaseline, Li as RunOptimizationOptions, Pi as RunImprovementLoopResult, Zr as OptimizationMethod, aa as SearchHistoryReceipt, co as RunEvalOptions, do as CampaignCellRetryPolicy, ea as SearchHistoryAdmissionOptions, fo as RunCampaignOptions, ni as OptimizationMethodProvenance, ra as SearchHistoryCoverageRow, ri as OptimizationMethodResult, so as openAutoPr, ui as ComparisonCost, wo as CampaignStorage } from "./index-BxWvILU8.js";
6
- import { o as InsightReport } from "./insight-report-DETqPc_A.js";
7
- import { n as HostedTenant } from "./client-CuQgX33c.js";
2
+ import { _ as ProposalFinding } from "./types-D7gEdPoQ.js";
3
+ import { B as PowerPreflight, Mt as EvaluationClaim, ft as EvidenceReceipt, it as CampaignEvidenceContext } from "./statistical-heldout-CpVd6FmY.js";
4
+ import { H as SurfaceProposer, R as Scenario, S as JudgeConfig, a as CampaignResult, d as DispatchContext, j as MutableSurface, k as LabeledScenarioStore, p as Gate, v as GateResult } from "./types-CS0qk_Yp.js";
5
+ import { Ao as FinalEvidenceUse, Fi as RunImprovementLoopResult, Li as PremeasuredOptimizationBaseline, Qr as OptimizationMethod, Ri as RunOptimizationOptions, To as CampaignStorage, Yn as LoopProvenanceRecord, co as openAutoPr, di as ComparisonCost, fo as CampaignCellRetryPolicy, ia as SearchHistoryCoverageRow, ii as OptimizationMethodResult, ko as FinalEvidencePolicy, lo as RunEvalOptions, oa as SearchHistoryReceipt, or as CampaignComparisonUnits, po as RunCampaignOptions, ri as OptimizationMethodProvenance, ta as SearchHistoryAdmissionOptions } from "./index-Bp_6sj3x.js";
6
+ import { o as InsightReport } from "./insight-report-D1qa0HWs.js";
7
+ import { n as HostedTenant } from "./client-kh2jOjTK.js";
8
8
  //#region src/campaign/presets/run-final-comparison.d.ts
9
9
  interface FinalComparisonOptions<TScenario extends Scenario, TArtifact> extends Omit<RunCampaignOptions<TScenario, TArtifact>, 'dispatch'> {
10
10
  baselineSurface: MutableSurface;
11
11
  winnerSurface: MutableSurface;
12
12
  dispatchWithSurface: (surface: MutableSurface, scenario: TScenario, ctx: Parameters<RunCampaignOptions<TScenario, TArtifact>['dispatch']>[1]) => Promise<TArtifact>;
13
13
  gate: Gate<TArtifact, TScenario>;
14
+ claim?: EvaluationClaim;
15
+ finalEvidence?: FinalEvidencePolicy;
14
16
  holdout?: 'measured' | 'deferred';
15
17
  label?: string;
16
18
  neutralize?: (winner: MutableSurface, baseline: MutableSurface) => MutableSurface;
17
19
  }
18
20
  /** Compare a search-selected surface without changing the search's selection. */
19
21
  declare function runFinalComparison<TScenario extends Scenario, TArtifact>(opts: FinalComparisonOptions<TScenario, TArtifact>): Promise<{
22
+ claim?: {
23
+ use: "certification" | "comparison" | "development";
24
+ population: {
25
+ id: string;
26
+ description: string;
27
+ };
28
+ samplingFrame: string;
29
+ independentUnit: string;
30
+ generalization: "fixed-roster" | "new-units";
31
+ minimumEffect?: number | undefined;
32
+ } | undefined;
33
+ finalEvidence?: FinalEvidenceUse | undefined;
20
34
  baselineOnHoldout: CampaignResult<TArtifact, TScenario>;
21
35
  winnerOnHoldout: CampaignResult<TArtifact, TScenario>;
22
36
  neutralizedOnHoldout?: CampaignResult<TArtifact, TScenario> | undefined;
@@ -37,6 +51,7 @@ interface SelfImproveMethodProvenance {
37
51
  winnerContentHash: string;
38
52
  diff: string;
39
53
  optimizationMethod: NonNullable<SelfImproveProposerResult<Scenario, unknown>['optimization']>;
54
+ claim?: EvaluationClaim;
40
55
  evidence: {
41
56
  trainSplitDigest: `sha256:${string}`;
42
57
  selectionSplitDigest: `sha256:${string}`;
@@ -45,6 +60,7 @@ interface SelfImproveMethodProvenance {
45
60
  winnerCampaignDigest: `sha256:${string}`;
46
61
  costReceiptsDigest: `sha256:${string}`;
47
62
  neutralizedCampaignDigest?: `sha256:${string}`;
63
+ holdoutObservations?: CampaignComparisonUnits;
48
64
  };
49
65
  gate: Awaited<ReturnType<typeof runFinalComparison>>['gateResult'];
50
66
  holdout?: 'deferred';
@@ -119,7 +135,7 @@ interface SelfImproveBudget {
119
135
  * static holdout scenario and recording a meaningless lift. Unless
120
136
  * `holdoutScenarios` reserves an explicit set, ALL scenarios train. */
121
137
  holdout?: 'measured' | 'deferred';
122
- /** Per-scenario replicates per cell raises bootstrap-CI tightness. Default 1. */
138
+ /** Repeated executions per scenario. A claim's independent-unit count stays unchanged. Default 1. */
123
139
  reps?: number;
124
140
  /** DEPTH dial forwarded to the proposer's `propose()` as
125
141
  * `ctx.maxImprovementShots` — max iterations an agentic candidate generator
@@ -327,9 +343,15 @@ interface SelfImproveOptions<TScenario extends Scenario, TArtifact> extends Sear
327
343
  searchLedger?: RunOptimizationOptions<TScenario, TArtifact>['searchLedger'];
328
344
  /** Complete-method final measurement receipts; authority and environment remain caller-owned. */
329
345
  evidence?: CampaignEvidenceContext;
346
+ /** Declare the population and independent units without requiring fresh data. */
347
+ claim?: EvaluationClaim;
348
+ /** Opt into durable fresh-evidence consumption for this final comparison. */
349
+ finalEvidence?: FinalEvidencePolicy;
330
350
  }
331
351
  interface SelfImproveProposerResult<TScenario extends Scenario, TArtifact> {
332
352
  mode: 'proposer';
353
+ claim?: EvaluationClaim;
354
+ finalEvidence?: FinalEvidenceUse;
333
355
  /** Composite mean across all scenarios, baseline run. When
334
356
  * `budget.holdout === 'deferred'` this is measured on the improvement
335
357
  * (search) split — no holdout campaign ran. */
@@ -395,10 +417,9 @@ interface SelfImproveProposerResult<TScenario extends Scenario, TArtifact> {
395
417
  * Hosted-tier dashboards render this as the v3-vs-v4 decision view.
396
418
  */
397
419
  insight: InsightReport;
398
- /** Minimum-detectable-lift analysis from the baseline holdout cells: could this
399
- * budget have shipped ANY plausible effect? Absent when the baseline produced
400
- * fewer than 3 scored holdout cells. See `powerPreflight` for the standalone
401
- * pre-run version (run `gate: 'none'` first, budget the real search after). */
420
+ /** Approximate detectable lift from baseline holdout observations.
421
+ * Declared independent units determine n and baseline variance.
422
+ * Absent with fewer than three observations or a deferred holdout. */
402
423
  power?: PowerPreflight;
403
424
  /**
404
425
  * Raw substrate result for advanced inspection — full per-generation
@@ -502,4 +523,4 @@ interface DefinedAgentEval<TScenario extends Scenario, TArtifact> {
502
523
  declare function defineAgentEval<TScenario extends Scenario, TArtifact>(defaults: DefineAgentEvalOptions<TScenario, TArtifact>): DefinedAgentEval<TScenario, TArtifact>;
503
524
  //#endregion
504
525
  export { SelfImproveMethodResult as _, DefinedAgentEval as a, SelfImproveMethodOptions as c, SelfImproveProposerOptions as d, SelfImproveProposerResult as f, SelfImproveMethodProvenance as g, selfImprove as h, DefineAgentEvalOptions as i, SelfImproveOptions as l, SelfImproveRunError as m, AgentEvalEvaluateOptions as n, defineAgentEval as o, SelfImproveResult as p, AgentEvalImproveOptions as r, SelfImproveBudget as s, AgentEvalAgent as t, SelfImproveProgressEvent as u };
505
- //# sourceMappingURL=define-agent-eval-Cx4Ls9ta.d.ts.map
526
+ //# sourceMappingURL=define-agent-eval-CwOWWQt_.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-agent-eval-CwOWWQt_.d.ts","names":[],"sources":["../src/campaign/presets/run-final-comparison.ts","../src/contract/self-improve-method.ts","../src/contract/self-improve.ts","../src/contract/define-agent-eval.ts"],"mappings":"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"}
@@ -1,20 +1,20 @@
1
1
  import { s as ValidationError } from "./errors-Dngq5h35.js";
2
2
  import { a as spearmanR, r as pearsonR } from "./descriptive-1V17A-qa.js";
3
- import { r as continuousAgreement } from "./judge-calibration-BnpVKtnb.js";
3
+ import { r as continuousAgreement } from "./judge-calibration-DYmaBtJr.js";
4
4
  import { i as pairedCohensDz } from "./effect-sizes-DiH8MGOH.js";
5
5
  import { i as requiredPairedSampleSize, r as pairedMde } from "./power-and-mde-B8F2RdcD.js";
6
6
  import { r as pairRunRecords } from "./paired-arms-D4aeIHUy.js";
7
7
  import { o as pairedTTest, r as pairedBootstrap } from "./paired-tests-C8iCsioC.js";
8
8
  import { r as welchsTTest } from "./baseline-BC-eBZ7U.js";
9
+ import { a as campaignCellToRunRecord, i as campaignCellTaskScore, n as campaignCellExecutionEvidence, r as campaignCellJudgeDimensions } from "./run-record-Br-Yzt_k.js";
10
+ import { B as surfaceDispatchRef, N as defineEvaluationClaim, T as pairedCampaignComposites, V as surfaceHash, Z as campaignSplitDigest, f as campaignMeasurementDigest, h as loopProvenanceArgsFromResult, k as powerPreflight, m as emitLoopProvenance, p as canonicalDigest, t as createCampaignEvidenceReceipt, tt as aggregatePairedHoldout, z as surfaceContentHash } from "./campaign-evidence-B8oF9xQ6.js";
9
11
  import "./query-D1nLIKt7.js";
10
12
  import { r as observedSplitScore } from "./reward-nw2xZGZG.js";
11
- import { c as validateRunRecord, i as modelHasSnapshot } from "./run-record-DQpSf7t-.js";
12
- import { r as paretoChart } from "./summary-report-B16xy9Kd.js";
13
- import { C as assertSearchHistoryAdmissionOptions, I as runFinalComparison, L as openAutoPr, R as defaultProductionGate, W as runEval, d as combineComparisonCosts, f as costFromLedgerSummary, h as runImprovementLoop, q as resolveRunDir, u as executeOptimizationMethod } from "./llm-judge-v80Kmu9g.js";
14
- import { a as campaignCellToRunRecord, i as campaignCellTaskScore, n as campaignCellExecutionEvidence, r as campaignCellJudgeDimensions } from "./run-record-CR63CpHK.js";
15
- import { H as surfaceContentHash, O as powerPreflight, U as surfaceDispatchRef, W as surfaceHash, et as campaignSplitDigest, f as campaignMeasurementDigest, h as loopProvenanceArgsFromResult, m as emitLoopProvenance, p as canonicalDigest, t as createCampaignEvidenceReceipt } from "./campaign-evidence-D8DBLqLI.js";
16
- import { C as inMemoryCampaignStorage, S as fsCampaignStorage, x as createRunCostLedger } from "./external-optimizer-subprocess-q3VzlGAO.js";
17
- import { t as createHostedClient } from "./client-BlLY6o2w.js";
13
+ import { c as validateRunRecord, i as modelHasSnapshot } from "./run-record-DualPTn2.js";
14
+ import { r as paretoChart } from "./summary-report-e-MaOAHV.js";
15
+ import { C as assertSearchHistoryAdmissionOptions, G as assertIndependentEvaluationSplit, I as runFinalComparison, J as reserveFinalEvidence, K as captureFinalEvidencePolicy, L as openAutoPr, Q as resolveRunDir, R as captureJudge, Y as runEval, d as combineComparisonCosts, f as costFromLedgerSummary, h as runImprovementLoop, q as evaluationUnitMap, u as executeOptimizationMethod, z as defaultProductionGate } from "./llm-judge-DEFZeSiu.js";
16
+ import { C as inMemoryCampaignStorage, S as fsCampaignStorage, x as createRunCostLedger } from "./external-optimizer-subprocess-D4dzUBZI.js";
17
+ import { t as createHostedClient } from "./client-CXE-U1SA.js";
18
18
  //#region src/contamination-guard.ts
19
19
  function checkCanaries(output, scenarios) {
20
20
  const leaks = [];
@@ -83,7 +83,7 @@ async function analyzeRuns(opts) {
83
83
  };
84
84
  const judges = computeJudgeInsights(runs);
85
85
  const interRater = opts.raterScores ? computeInterRater(opts.raterScores) : void 0;
86
- const lift = computeLift(runs, opts.baselineCandidateId, opts.candidateCandidateId, split);
86
+ const lift = computeLift(runs, opts.baselineCandidateId, opts.candidateCandidateId, split, opts.independentUnitByScenarioId);
87
87
  const failureClusters = opts.analyst ? await computeFailureClusters(runs, opts.analyst, split) : void 0;
88
88
  const failureClasses = computeFailureClasses(runs, split);
89
89
  const contamination = opts.canaryScenarios ? computeContamination(runs, opts.canaryScenarios) : void 0;
@@ -614,7 +614,7 @@ function computeInterRater(ratings) {
614
614
  disagreementCases
615
615
  };
616
616
  }
617
- function computeLift(runs, baselineId, candidateId, split) {
617
+ function computeLift(runs, baselineId, candidateId, split, independentUnitByScenarioId) {
618
618
  let bId = baselineId;
619
619
  let cId = candidateId;
620
620
  if (!bId || !cId) {
@@ -633,9 +633,20 @@ function computeLift(runs, baselineId, candidateId, split) {
633
633
  const candidate = runs.filter((r) => r.candidateId === cId);
634
634
  if (baseline.length === 0 || candidate.length === 0) return void 0;
635
635
  const pairing = pairRunRecords(baseline.filter((run) => Number.isFinite(compositeOf(run, split))), candidate.filter((run) => Number.isFinite(compositeOf(run, split))));
636
- const pairedBaseline = pairing.pairs.map((pair) => compositeOf(pair.baseline, split));
637
- const pairedCandidate = pairing.pairs.map((pair) => compositeOf(pair.treatment, split));
636
+ let pairedBaseline = pairing.pairs.map((pair) => compositeOf(pair.baseline, split));
637
+ let pairedCandidate = pairing.pairs.map((pair) => compositeOf(pair.treatment, split));
638
638
  if (pairedBaseline.length === 0) return void 0;
639
+ const grouped = independentUnitByScenarioId ? aggregatePairedHoldout({
640
+ before: pairedBaseline,
641
+ after: pairedCandidate,
642
+ cellIds: pairing.pairs.map((pair, index) => `${pair.pairKey}:${index}`)
643
+ }, new Map(pairing.pairs.map((pair) => [pair.pairKey, independentUnitByScenarioId.get(pair.baseline.scenarioId)]))) : void 0;
644
+ if (grouped) {
645
+ pairedBaseline = grouped.before;
646
+ pairedCandidate = grouped.after;
647
+ }
648
+ const reverseInferredArms = grouped !== void 0 && (!baselineId || !candidateId) && mean(pairedBaseline) > mean(pairedCandidate);
649
+ if (reverseInferredArms) [pairedBaseline, pairedCandidate] = [pairedCandidate, pairedBaseline];
639
650
  const baselineMean = mean(pairedBaseline);
640
651
  const candidateMean = mean(pairedCandidate);
641
652
  const delta = candidateMean - baselineMean;
@@ -663,10 +674,14 @@ function computeLift(runs, baselineId, candidateId, split) {
663
674
  ci95: [bootstrap.low, bootstrap.high],
664
675
  pValue: tTest.p,
665
676
  n: pairedBaseline.length,
677
+ ...grouped ? {
678
+ pairedRunN: pairing.pairs.length,
679
+ independentUnitIds: grouped.unitIds
680
+ } : {},
666
681
  minimumRequired: 20,
667
682
  decisionEligible: bootstrap.gateEligible,
668
- unpairedBaseline: pairing.unpairedBaseline.length,
669
- unpairedCandidate: pairing.unpairedTreatment.length,
683
+ unpairedBaseline: (reverseInferredArms ? pairing.unpairedTreatment : pairing.unpairedBaseline).length,
684
+ unpairedCandidate: (reverseInferredArms ? pairing.unpairedBaseline : pairing.unpairedTreatment).length,
670
685
  cohensD: d,
671
686
  mde,
672
687
  requiredN
@@ -682,29 +697,26 @@ async function computeFailureClusters(runs, analyst, split) {
682
697
  totalFailures: 0
683
698
  };
684
699
  const clusters = /* @__PURE__ */ new Map();
700
+ const recordCluster = (key, runId) => {
701
+ const cluster = clusters.get(key) ?? {
702
+ exemplars: [],
703
+ runs: 0
704
+ };
705
+ cluster.runs += 1;
706
+ if (cluster.exemplars.length < 5 && !cluster.exemplars.includes(runId)) cluster.exemplars.push(runId);
707
+ clusters.set(key, cluster);
708
+ };
685
709
  for (const run of failed) try {
686
710
  const result = await analyst.run(run.runId, { runRecord: run });
687
- for (const finding of result.findings) {
688
- const key = finding.area || finding.analyst_id || "unclassified";
689
- const c = clusters.get(key) ?? {
690
- exemplars: [],
691
- share: 0
692
- };
693
- if (c.exemplars.length < 5) c.exemplars.push(run.runId);
694
- clusters.set(key, c);
695
- }
711
+ const keys = new Set(result.findings.map((finding) => finding.area || finding.analyst_id || "unclassified"));
712
+ for (const key of keys) recordCluster(key, run.runId);
696
713
  } catch {
697
- const c = clusters.get("analyst-error") ?? {
698
- exemplars: [],
699
- share: 0
700
- };
701
- if (c.exemplars.length < 5) c.exemplars.push(run.runId);
702
- clusters.set("analyst-error", c);
714
+ recordCluster("analyst-error", run.runId);
703
715
  }
704
716
  const clusterList = [...clusters.entries()].map(([id, c]) => ({
705
717
  id,
706
718
  name: id,
707
- share: c.exemplars.length / failed.length,
719
+ share: c.runs / failed.length,
708
720
  exemplars: c.exemplars
709
721
  }));
710
722
  clusterList.sort((a, b) => b.share - a.share);
@@ -966,16 +978,20 @@ function buildRecommendations(ctx) {
966
978
  }
967
979
  //#endregion
968
980
  //#region src/contract/self-improve-reporting.ts
969
- function meanComposite(byScenario) {
970
- const perScenario = {};
971
- const values = [];
972
- for (const [id, agg] of Object.entries(byScenario)) {
973
- perScenario[id] = agg.meanComposite;
974
- values.push(agg.meanComposite);
975
- }
981
+ function pairedCompositeSummary(baseline, winner, independentUnitByScenarioId) {
982
+ const scores = pairedCampaignComposites(baseline, winner, independentUnitByScenarioId);
983
+ const perScenario = (campaign) => Object.fromEntries(Object.entries(campaign.aggregates.byScenario).map(([id, aggregate]) => [id, aggregate.meanComposite]));
976
984
  return {
977
- compositeMean: values.length === 0 ? 0 : values.reduce((s, v) => s + v, 0) / values.length,
978
- perScenario
985
+ baseline: {
986
+ compositeMean: scores.beforeMean,
987
+ perScenario: perScenario(baseline)
988
+ },
989
+ winner: {
990
+ compositeMean: scores.afterMean,
991
+ perScenario: perScenario(winner)
992
+ },
993
+ baselineComposites: scores.before,
994
+ observations: scores.observations
979
995
  };
980
996
  }
981
997
  /** 32-bit FNV-1a over raw UTF-16 code units, rendered as hex for a cell key.
@@ -1029,10 +1045,7 @@ async function runSelfImproveMethod(args) {
1029
1045
  const evidenceContext = opts.evidence === void 0 ? void 0 : structuredClone(opts.evidence);
1030
1046
  if (evidenceContext && budget.holdout === "deferred") throw new Error("selfImprove: evidence receipts require measured holdout");
1031
1047
  const baselineSurface = structuredClone(opts.baselineSurface);
1032
- const judge = {
1033
- ...opts.judge,
1034
- dimensions: opts.judge.dimensions.map((dimension) => ({ ...dimension }))
1035
- };
1048
+ const judge = opts.judge;
1036
1049
  const { selected, cost: methodCost, history } = await executeOptimizationMethod({
1037
1050
  method: opts.method,
1038
1051
  storage,
@@ -1080,9 +1093,12 @@ async function runSelfImproveMethod(args) {
1080
1093
  }]);
1081
1094
  const gate = opts.gate ?? defaultProductionGate({
1082
1095
  holdoutScenarios: holdout,
1083
- deltaThreshold: .05
1096
+ deltaThreshold: opts.claim?.minimumEffect ?? .05,
1097
+ independentUnitByScenarioId: opts.claim ? evaluationUnitMap(opts.claim, holdout) : void 0
1084
1098
  });
1085
1099
  const comparison = await runFinalComparison({
1100
+ claim: opts.claim,
1101
+ finalEvidence: opts.finalEvidence,
1086
1102
  baselineSurface,
1087
1103
  winnerSurface: selected.winnerSurface,
1088
1104
  scenarios: holdout,
@@ -1135,12 +1151,15 @@ async function runSelfImproveMethod(args) {
1135
1151
  })
1136
1152
  } : void 0;
1137
1153
  const deferred = comparison.holdout === "deferred";
1138
- const baseline = deferred ? null : meanComposite(comparison.baselineOnHoldout.aggregates.byScenario);
1139
- const winner = deferred ? null : meanComposite(comparison.winnerOnHoldout.aggregates.byScenario);
1154
+ const report = deferred ? null : pairedCompositeSummary(comparison.baselineOnHoldout, comparison.winnerOnHoldout, opts.claim ? evaluationUnitMap(opts.claim, holdout) : void 0);
1155
+ const baseline = report?.baseline ?? null;
1156
+ const winner = report?.winner ?? null;
1140
1157
  const lift = baseline && winner ? winner.compositeMean - baseline.compositeMean : void 0;
1141
1158
  const insight = deferred ? void 0 : await analyzeRuns({
1142
1159
  runs: [...cellsToRunRecords(comparison.baselineOnHoldout.cells, "baseline", runDir, baselineSurface, "holdout", opts.model), ...comparison.winnerOnHoldout === comparison.baselineOnHoldout ? [] : cellsToRunRecords(comparison.winnerOnHoldout.cells, "winner", runDir, selected.winnerSurface, "holdout", opts.model)],
1143
1160
  baselineCandidateId: "baseline",
1161
+ independentUnitByScenarioId: opts.claim ? evaluationUnitMap(opts.claim, holdout) : void 0,
1162
+ decisionThreshold: opts.claim?.minimumEffect ?? .05,
1144
1163
  ...comparison.winnerOnHoldout === comparison.baselineOnHoldout ? {} : { candidateCandidateId: "winner" }
1145
1164
  });
1146
1165
  const cost = totalCost();
@@ -1161,6 +1180,7 @@ async function runSelfImproveMethod(args) {
1161
1180
  winnerContentHash: surfaceContentHash(selected.winnerSurface),
1162
1181
  diff: comparison.promotedDiff,
1163
1182
  optimizationMethod: optimization,
1183
+ ...opts.claim ? { claim: opts.claim } : {},
1164
1184
  evidence: {
1165
1185
  trainSplitDigest: campaignSplitDigest(train, budget.reps ?? 1),
1166
1186
  selectionSplitDigest: campaignSplitDigest(selection, budget.reps ?? 1),
@@ -1168,6 +1188,7 @@ async function runSelfImproveMethod(args) {
1168
1188
  baselineCampaignDigest: campaignMeasurementDigest(comparison.baselineOnHoldout),
1169
1189
  winnerCampaignDigest: campaignMeasurementDigest(comparison.winnerOnHoldout),
1170
1190
  costReceiptsDigest: canonicalDigest(receipts),
1191
+ ...report ? { holdoutObservations: report.observations } : {},
1171
1192
  ...comparison.neutralizedOnHoldout ? { neutralizedCampaignDigest: campaignMeasurementDigest(comparison.neutralizedOnHoldout) } : {}
1172
1193
  },
1173
1194
  gate: comparison.gateResult,
@@ -1204,6 +1225,8 @@ async function runSelfImproveMethod(args) {
1204
1225
  const result = {
1205
1226
  ...evidence ? { evidence } : {},
1206
1227
  mode: "method",
1228
+ ...opts.claim ? { claim: opts.claim } : {},
1229
+ ...comparison.finalEvidence ? { finalEvidence: comparison.finalEvidence } : {},
1207
1230
  searchHistoryCoverage: history,
1208
1231
  baseline,
1209
1232
  winner: {
@@ -1236,7 +1259,7 @@ async function runSelfImproveMethod(args) {
1236
1259
  }
1237
1260
  };
1238
1261
  if (opts.hostedTenant) {
1239
- const snapshot = (index, surface, campaign) => ({
1262
+ const snapshot = (index, surface, campaign, compositeMean) => ({
1240
1263
  index,
1241
1264
  surfaceHash: surfaceHash(surface),
1242
1265
  surface,
@@ -1252,7 +1275,7 @@ async function runSelfImproveMethod(args) {
1252
1275
  ...cell.error ? { errorMessage: cell.error } : {}
1253
1276
  };
1254
1277
  }),
1255
- compositeMean: deferred ? null : meanComposite(campaign.aggregates.byScenario).compositeMean,
1278
+ compositeMean,
1256
1279
  costUsd: campaign.aggregates.cost.totalCostUsd,
1257
1280
  durationMs: campaign.durationMs
1258
1281
  });
@@ -1266,8 +1289,8 @@ async function runSelfImproveMethod(args) {
1266
1289
  ...opts.hostedLabels,
1267
1290
  mode: "method"
1268
1291
  },
1269
- baseline: snapshot(0, baselineSurface, comparison.baselineOnHoldout),
1270
- generations: [snapshot(1, selected.winnerSurface, comparison.winnerOnHoldout)],
1292
+ baseline: snapshot(0, baselineSurface, comparison.baselineOnHoldout, baseline?.compositeMean ?? null),
1293
+ generations: [snapshot(1, selected.winnerSurface, comparison.winnerOnHoldout, winner?.compositeMean ?? null)],
1271
1294
  gateDecision: result.gateDecision,
1272
1295
  ...lift === void 0 ? {} : { holdoutLift: lift },
1273
1296
  totalCostUsd: result.totalCostUsd,
@@ -1308,7 +1331,7 @@ function assertSelfImproveSearchMode(opts) {
1308
1331
  if (budget?.populationSize !== void 0) throw new Error("selfImprove: method owns its candidates; budget.populationSize applies only to proposer mode");
1309
1332
  if (budget?.candidateConcurrency !== void 0 || budget?.maxImprovementShots !== void 0 || opts.analyzeGeneration !== void 0 || opts.findings !== void 0 || opts.selectParent !== void 0 || opts.premeasuredBaseline !== void 0 || opts.selectionRankKey !== void 0 || opts.searchLedger !== void 0) throw new Error("selfImprove: candidateConcurrency, maxImprovementShots, analyzeGeneration, findings, selectParent, premeasuredBaseline, selectionRankKey, and searchLedger apply only to proposer mode");
1310
1333
  }
1311
- function splitMethodPartitions(searchScenarios, explicitSelection, fraction) {
1334
+ function splitMethodPartitions(searchScenarios, explicitSelection, fraction, unitByScenario) {
1312
1335
  if (!Number.isFinite(fraction) || fraction <= 0 || fraction >= 1) throw new Error("selfImprove: budget.selectionFraction must be in (0, 1)");
1313
1336
  const byId = /* @__PURE__ */ new Map();
1314
1337
  for (const scenario of searchScenarios) {
@@ -1325,12 +1348,23 @@ function splitMethodPartitions(searchScenarios, explicitSelection, fraction) {
1325
1348
  }
1326
1349
  const train = searchScenarios.filter((scenario) => !selectionIds.has(scenario.id));
1327
1350
  if (train.length === 0) throw new Error("selfImprove: method train split is empty");
1351
+ if (unitByScenario) {
1352
+ const selectedUnits = new Set([...selectionIds].map((id) => unitByScenario.get(id)));
1353
+ if (train.some((scenario) => selectedUnits.has(unitByScenario.get(scenario.id)))) throw new Error("selfImprove: training and selection share independent units");
1354
+ }
1328
1355
  return {
1329
1356
  train,
1330
1357
  selection: explicitSelection.map((scenario) => byId.get(scenario.id))
1331
1358
  };
1332
1359
  }
1333
1360
  if (searchScenarios.length < 2) throw new Error("selfImprove: method requires at least two non-final scenarios");
1361
+ if (unitByScenario) {
1362
+ const split = splitTrainHoldout(searchScenarios, fraction, unitByScenario);
1363
+ return {
1364
+ train: split.train,
1365
+ selection: split.holdout
1366
+ };
1367
+ }
1334
1368
  const sorted = [...searchScenarios].sort((a, b) => stableScenarioHash(a.id) - stableScenarioHash(b.id));
1335
1369
  const count = Math.max(1, Math.min(sorted.length - 1, Math.round(sorted.length * fraction)));
1336
1370
  return {
@@ -1353,11 +1387,18 @@ function stableScenarioHash(value) {
1353
1387
  }
1354
1388
  return hash;
1355
1389
  }
1356
- /**
1357
- * Deterministic train/holdout split by a stable hash of `scenario.id`,
1358
- * so the same scenario set always splits the same way across runs.
1359
- */
1360
- function splitTrainHoldout(scenarios, fraction) {
1390
+ /** Deterministic split by scenario identity, or by source identity for new-unit claims. */
1391
+ function splitTrainHoldout(scenarios, fraction, unitByScenario) {
1392
+ if (unitByScenario) {
1393
+ const units = [...new Set(scenarios.map((scenario) => unitByScenario.get(scenario.id)))].sort((a, b) => stableScenarioHash(a) - stableScenarioHash(b) || (a < b ? -1 : a > b ? 1 : 0));
1394
+ if (units.length < 2) throw new Error("selfImprove: splitting needs at least two independent units");
1395
+ const count = Math.max(1, Math.min(units.length - 1, Math.round(units.length * fraction)));
1396
+ const finalUnits = new Set(units.slice(0, count));
1397
+ return {
1398
+ holdout: scenarios.filter((scenario) => finalUnits.has(unitByScenario.get(scenario.id))),
1399
+ train: scenarios.filter((scenario) => !finalUnits.has(unitByScenario.get(scenario.id)))
1400
+ };
1401
+ }
1361
1402
  const sorted = [...scenarios].sort((a, b) => stableScenarioHash(a.id) - stableScenarioHash(b.id));
1362
1403
  const nHoldout = Math.max(1, Math.min(sorted.length - 1, Math.round(sorted.length * fraction)));
1363
1404
  return {
@@ -1378,6 +1419,17 @@ function winnerSearchCampaign(result) {
1378
1419
  return result.baselineCampaign;
1379
1420
  }
1380
1421
  async function selfImprove(opts) {
1422
+ opts = {
1423
+ ...opts,
1424
+ judge: captureJudge(opts.judge),
1425
+ ...opts.claim || opts.finalEvidence ? {
1426
+ claim: opts.claim && defineEvaluationClaim(opts.claim),
1427
+ finalEvidence: opts.finalEvidence && captureFinalEvidencePolicy(opts.finalEvidence),
1428
+ scenarios: structuredClone(opts.scenarios),
1429
+ selectionScenarios: opts.selectionScenarios && structuredClone(opts.selectionScenarios),
1430
+ budget: opts.budget && structuredClone(opts.budget)
1431
+ } : {}
1432
+ };
1381
1433
  const startedAt = Date.now();
1382
1434
  const runDir = resolveRunDir(opts.runDir ?? (opts.method ? `.agent-eval/runs/self-improve-${startedAt}` : `mem://selfImprove-${startedAt}`));
1383
1435
  const storage = opts.storage ?? (runDir.startsWith("mem://") ? inMemoryCampaignStorage() : fsCampaignStorage());
@@ -1400,6 +1452,8 @@ async function runSelfImprove(opts, costLedger, startedAt, runDir, storage) {
1400
1452
  const holdoutMode = budget.holdout ?? "measured";
1401
1453
  const holdoutDeferred = holdoutMode === "deferred";
1402
1454
  const expectUsage = opts.expectUsage ?? "assert";
1455
+ const unitByScenario = opts.claim ? evaluationUnitMap(opts.claim, opts.scenarios) : void 0;
1456
+ const splitUnitByScenario = opts.claim?.generalization === "new-units" ? unitByScenario : void 0;
1403
1457
  const explicitHoldout = budget.holdoutScenarios;
1404
1458
  const { train, holdout } = explicitHoldout ? {
1405
1459
  train: opts.scenarios.filter((s) => !explicitHoldout.some((h) => h.id === s.id)),
@@ -1407,11 +1461,16 @@ async function runSelfImprove(opts, costLedger, startedAt, runDir, storage) {
1407
1461
  } : holdoutDeferred ? {
1408
1462
  train: opts.scenarios,
1409
1463
  holdout: []
1410
- } : splitTrainHoldout(opts.scenarios, holdoutFraction);
1464
+ } : splitTrainHoldout(opts.scenarios, holdoutFraction, splitUnitByScenario);
1411
1465
  if (train.length === 0) throw new Error("selfImprove: train split is empty. Reduce holdoutFraction or pass more scenarios.");
1412
1466
  if (holdout.length === 0 && !holdoutDeferred) throw new Error("selfImprove: holdout split is empty. Pass more scenarios.");
1467
+ if (opts.claim?.generalization === "new-units") assertIndependentEvaluationSplit(opts.claim, holdout, train);
1468
+ if (opts.finalEvidence) {
1469
+ if (holdoutDeferred) throw new Error("final evidence requires measured holdout");
1470
+ if (opts.method) await reserveFinalEvidence(opts.finalEvidence, opts.claim, holdout, train);
1471
+ }
1413
1472
  if (opts.method) {
1414
- const partitions = splitMethodPartitions(train, opts.selectionScenarios, budget.selectionFraction ?? .25);
1473
+ const partitions = splitMethodPartitions(train, opts.selectionScenarios, budget.selectionFraction ?? .25, splitUnitByScenario);
1415
1474
  return runSelfImproveMethod({
1416
1475
  opts: {
1417
1476
  ...opts,
@@ -1435,7 +1494,8 @@ async function runSelfImprove(opts, costLedger, startedAt, runDir, storage) {
1435
1494
  };
1436
1495
  const gate = opts.gate ?? defaultProductionGate({
1437
1496
  holdoutScenarios: holdout,
1438
- deltaThreshold: .05
1497
+ deltaThreshold: opts.claim?.minimumEffect ?? .05,
1498
+ independentUnitByScenarioId: opts.claim ? evaluationUnitMap(opts.claim, holdout) : void 0
1439
1499
  });
1440
1500
  if (opts.onProgress) opts.onProgress({
1441
1501
  kind: "baseline.started",
@@ -1455,6 +1515,8 @@ async function runSelfImprove(opts, costLedger, startedAt, runDir, storage) {
1455
1515
  reps: budget.reps,
1456
1516
  maxImprovementShots: budget.maxImprovementShots,
1457
1517
  holdoutScenarios: holdout,
1518
+ claim: opts.claim,
1519
+ finalEvidence: opts.finalEvidence,
1458
1520
  holdout: holdoutMode,
1459
1521
  gate,
1460
1522
  neutralize: opts.neutralize,
@@ -1480,16 +1542,16 @@ async function runSelfImprove(opts, costLedger, startedAt, runDir, storage) {
1480
1542
  const reportSplit = holdoutDeferred ? "search" : "holdout";
1481
1543
  const reportBaselineCampaign = holdoutDeferred ? result.baselineCampaign : result.baselineOnHoldout;
1482
1544
  const reportWinnerCampaign = holdoutDeferred ? winnerSearchCampaign(result) : result.winnerOnHoldout;
1483
- const baseline = meanComposite(reportBaselineCampaign.aggregates.byScenario);
1484
- const winnerStats = meanComposite(reportWinnerCampaign.aggregates.byScenario);
1545
+ const reportUnitMap = opts.claim ? evaluationUnitMap(opts.claim, holdoutDeferred ? train : holdout) : void 0;
1546
+ const report = pairedCompositeSummary(reportBaselineCampaign, reportWinnerCampaign, reportUnitMap);
1547
+ const baseline = report.baseline;
1548
+ const winnerStats = report.winner;
1485
1549
  let power;
1486
- const baselineHoldoutComposites = result.baselineOnHoldout.cells.filter((cell) => !cell.error).map((cell) => {
1487
- const scores = Object.values(cell.judgeScores);
1488
- return scores.length === 0 ? NaN : scores.reduce((sum, s) => sum + s.composite, 0) / scores.length;
1489
- }).filter((v) => Number.isFinite(v));
1550
+ const baselineHoldoutComposites = holdoutDeferred ? [] : report.baselineComposites;
1490
1551
  if (baselineHoldoutComposites.length >= 3) {
1491
1552
  power = powerPreflight({
1492
1553
  baselineComposites: baselineHoldoutComposites,
1554
+ deltaThreshold: opts.claim?.minimumEffect ?? .05,
1493
1555
  sharedScorerChannel: true
1494
1556
  });
1495
1557
  if (opts.onProgress) opts.onProgress({
@@ -1518,6 +1580,8 @@ async function runSelfImprove(opts, costLedger, startedAt, runDir, storage) {
1518
1580
  const insight = await analyzeRuns({
1519
1581
  runs: [...cellsToRunRecords(reportBaselineCampaign.cells, "baseline", runDir, opts.baselineSurface, reportSplit, opts.model), ...reportWinnerCampaign === reportBaselineCampaign ? [] : cellsToRunRecords(reportWinnerCampaign.cells, "winner", runDir, result.winnerSurface, reportSplit, opts.model)],
1520
1582
  baselineCandidateId: "baseline",
1583
+ independentUnitByScenarioId: reportUnitMap,
1584
+ decisionThreshold: opts.claim?.minimumEffect ?? .05,
1521
1585
  ...reportWinnerCampaign === reportBaselineCampaign ? {} : { candidateCandidateId: "winner" }
1522
1586
  });
1523
1587
  const durationMs = Date.now() - startedAt;
@@ -1530,13 +1594,16 @@ async function runSelfImprove(opts, costLedger, startedAt, runDir, storage) {
1530
1594
  result,
1531
1595
  costReceipts: costLedger.list(),
1532
1596
  totalCostUsd: totalCost,
1533
- totalDurationMs: durationMs
1597
+ totalDurationMs: durationMs,
1598
+ independentUnitByScenarioId: holdoutDeferred ? void 0 : reportUnitMap
1534
1599
  }),
1535
1600
  storage,
1536
1601
  hostedClient: opts.hostedTenant ? createHostedClient(opts.hostedTenant) : void 0
1537
1602
  });
1538
1603
  if (opts.onProvenance) opts.onProvenance(provenance);
1539
1604
  const summary = {
1605
+ ...opts.claim ? { claim: opts.claim } : {},
1606
+ ...result.finalEvidence ? { finalEvidence: result.finalEvidence } : {},
1540
1607
  mode: "proposer",
1541
1608
  baseline,
1542
1609
  winner: {
@@ -1714,4 +1781,4 @@ function requirePositiveInteger(value, field) {
1714
1781
  //#endregion
1715
1782
  export { summarizeExecution as a, analyzeRuns as i, SelfImproveRunError as n, checkCanaries as o, selfImprove as r, defineAgentEval as t };
1716
1783
 
1717
- //# sourceMappingURL=define-agent-eval-Dzidv34q.js.map
1784
+ //# sourceMappingURL=define-agent-eval-Ddu33JH9.js.map