niceeval 0.15.1-canary.76 → 0.16.1

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 (714) hide show
  1. package/INDEX.md +45 -40
  2. package/dist/adapter-execution-trace.cjs.map +1 -1
  3. package/dist/adapter-execution-trace.d.cts +26 -0
  4. package/dist/adapter-execution-trace.d.mts +26 -0
  5. package/dist/adapter-execution-trace.d.ts +26 -0
  6. package/dist/adapter-usage.cjs.map +1 -1
  7. package/dist/adapter-usage.d.cts +9 -0
  8. package/dist/adapter-usage.d.mts +9 -0
  9. package/dist/adapter-usage.d.ts +9 -0
  10. package/dist/adapter.cjs +19 -4
  11. package/dist/adapter.cjs.map +1 -1
  12. package/dist/adapter.d.cts +37 -12
  13. package/dist/adapter.d.mts +37 -12
  14. package/dist/adapter.d.ts +37 -12
  15. package/dist/agents/ai-sdk.cjs +3 -0
  16. package/dist/agents/ai-sdk.cjs.map +1 -1
  17. package/dist/agents/bub.cjs +3 -0
  18. package/dist/agents/bub.cjs.map +1 -1
  19. package/dist/agents/claude-code-native.cjs +28 -2
  20. package/dist/agents/claude-code-native.cjs.map +1 -1
  21. package/dist/agents/claude-code.cjs +3 -0
  22. package/dist/agents/claude-code.cjs.map +1 -1
  23. package/dist/agents/codex.cjs +3 -0
  24. package/dist/agents/codex.cjs.map +1 -1
  25. package/dist/agents/coding-cli-versions.cjs +9 -10
  26. package/dist/agents/coding-cli-versions.cjs.map +1 -1
  27. package/dist/agents/coding-cli-versions.d.cts +1 -1
  28. package/dist/agents/coding-cli-versions.d.mts +1 -1
  29. package/dist/agents/coding-cli-versions.d.ts +1 -1
  30. package/dist/agents/deepseek-harness.cjs +3 -0
  31. package/dist/agents/deepseek-harness.cjs.map +1 -1
  32. package/dist/agents/hermes.cjs +3 -0
  33. package/dist/agents/hermes.cjs.map +1 -1
  34. package/dist/agents/index.cjs.map +1 -1
  35. package/dist/agents/index.d.cts +3 -2
  36. package/dist/agents/index.d.mts +3 -2
  37. package/dist/agents/index.d.ts +3 -2
  38. package/dist/agents/omp.cjs +3 -0
  39. package/dist/agents/omp.cjs.map +1 -1
  40. package/dist/agents/openai-compat.cjs +6 -0
  41. package/dist/agents/openai-compat.cjs.map +1 -1
  42. package/dist/agents/openclaw.cjs +3 -0
  43. package/dist/agents/openclaw.cjs.map +1 -1
  44. package/dist/agents/opencode.cjs +3 -0
  45. package/dist/agents/opencode.cjs.map +1 -1
  46. package/dist/agents/sdk-streams.cjs +9 -0
  47. package/dist/agents/sdk-streams.cjs.map +1 -1
  48. package/dist/agents/ui-message-stream.cjs +3 -0
  49. package/dist/agents/ui-message-stream.cjs.map +1 -1
  50. package/dist/assertions/api.cjs.map +1 -1
  51. package/dist/assertions/api.d.cts +27 -5
  52. package/dist/assertions/api.d.mts +27 -5
  53. package/dist/assertions/api.d.ts +27 -5
  54. package/dist/assertions/collection.cjs +6 -0
  55. package/dist/assertions/collection.cjs.map +1 -1
  56. package/dist/assertions/collection.d.cts +4 -2
  57. package/dist/assertions/collection.d.mts +4 -2
  58. package/dist/assertions/collection.d.ts +4 -2
  59. package/dist/assertions/collection.js +12 -8
  60. package/dist/assertions/context-match.cjs +70 -0
  61. package/dist/assertions/context-match.cjs.map +1 -0
  62. package/dist/assertions/context-match.d.cts +107 -0
  63. package/dist/assertions/context-match.d.mts +107 -0
  64. package/dist/assertions/context-match.d.ts +107 -0
  65. package/dist/assertions/context-match.js +12 -0
  66. package/dist/assertions/context-match.js.map +1 -0
  67. package/dist/assertions/full-content.cjs +109 -0
  68. package/dist/assertions/full-content.cjs.map +1 -0
  69. package/dist/assertions/full-content.d.cts +6 -0
  70. package/dist/assertions/full-content.d.mts +6 -0
  71. package/dist/assertions/full-content.d.ts +6 -0
  72. package/dist/assertions/full-content.js +12 -0
  73. package/dist/assertions/full-content.js.map +1 -0
  74. package/dist/assertions/judge-presets.cjs +2 -34
  75. package/dist/assertions/judge-presets.cjs.map +1 -1
  76. package/dist/assertions/judge-presets.d.cts +6 -9
  77. package/dist/assertions/judge-presets.d.mts +6 -9
  78. package/dist/assertions/judge-presets.d.ts +6 -9
  79. package/dist/assertions/judge-presets.js +8 -8
  80. package/dist/assertions/judge.cjs +107 -29
  81. package/dist/assertions/judge.cjs.map +1 -1
  82. package/dist/assertions/judge.d.cts +2 -0
  83. package/dist/assertions/judge.d.mts +2 -0
  84. package/dist/assertions/judge.d.ts +2 -0
  85. package/dist/assertions/match.cjs +244 -5
  86. package/dist/assertions/match.cjs.map +1 -1
  87. package/dist/assertions/match.d.cts +43 -3
  88. package/dist/assertions/match.d.mts +43 -3
  89. package/dist/assertions/match.d.ts +43 -3
  90. package/dist/assertions/match.js +88 -78
  91. package/dist/assertions/material.cjs +520 -0
  92. package/dist/assertions/material.cjs.map +1 -0
  93. package/dist/assertions/material.d.cts +56 -0
  94. package/dist/assertions/material.d.mts +56 -0
  95. package/dist/assertions/material.d.ts +56 -0
  96. package/dist/assertions/material.js +20 -0
  97. package/dist/assertions/material.js.map +1 -0
  98. package/dist/assertions/record/attachment.cjs +5 -2
  99. package/dist/assertions/record/attachment.cjs.map +1 -1
  100. package/dist/assertions/record/codec.cjs +2 -1
  101. package/dist/assertions/record/codec.cjs.map +1 -1
  102. package/dist/assertions/record/model.cjs.map +1 -1
  103. package/dist/assertions/record/model.d.cts +6 -1
  104. package/dist/assertions/record/model.d.mts +6 -1
  105. package/dist/assertions/record/model.d.ts +6 -1
  106. package/dist/assertions/runtime.cjs +207 -14
  107. package/dist/assertions/runtime.cjs.map +1 -1
  108. package/dist/assertions/runtime.d.cts +9 -0
  109. package/dist/assertions/runtime.d.mts +9 -0
  110. package/dist/assertions/runtime.d.ts +9 -0
  111. package/dist/assertions/runtime.js +14 -8
  112. package/dist/assertions/score-match-audit.cjs +18 -8
  113. package/dist/assertions/score-match-audit.cjs.map +1 -1
  114. package/dist/assertions/score-match-gateway.cjs +83 -25
  115. package/dist/assertions/score-match-gateway.cjs.map +1 -1
  116. package/dist/assertions/score-match-gateway.d.cts +2 -0
  117. package/dist/assertions/score-match-gateway.d.mts +2 -0
  118. package/dist/assertions/score-match-gateway.d.ts +2 -0
  119. package/dist/assertions/value-composition.test-d.cjs +77 -0
  120. package/dist/assertions/value-composition.test-d.cjs.map +1 -0
  121. package/dist/assertions/value-composition.test-d.d.cts +1 -0
  122. package/dist/assertions/value-composition.test-d.d.mts +1 -0
  123. package/dist/assertions/value-composition.test-d.d.ts +1 -0
  124. package/dist/assertions/value-composition.test-d.js +4 -0
  125. package/dist/assertions/value-composition.test-d.js.map +1 -0
  126. package/dist/context/assert-first.cjs +207 -213
  127. package/dist/context/assert-first.cjs.map +1 -1
  128. package/dist/context/assert-first.d.cts +49 -23
  129. package/dist/context/assert-first.d.mts +49 -23
  130. package/dist/context/assert-first.d.ts +49 -23
  131. package/dist/context/session.cjs +111 -9
  132. package/dist/context/session.cjs.map +1 -1
  133. package/dist/context/session.d.cts +18 -0
  134. package/dist/context/session.d.mts +18 -0
  135. package/dist/context/session.d.ts +18 -0
  136. package/dist/define.cjs +17 -1
  137. package/dist/define.cjs.map +1 -1
  138. package/dist/eval/cli/contribution.cjs +2 -0
  139. package/dist/eval/cli/contribution.cjs.map +1 -1
  140. package/dist/eval/host/index.cjs +2 -0
  141. package/dist/eval/host/index.cjs.map +1 -1
  142. package/dist/eval/record/evaluation.cjs +3 -0
  143. package/dist/eval/record/evaluation.cjs.map +1 -1
  144. package/dist/eval/record/membership-provenance.d.cts +15 -15
  145. package/dist/eval/record/membership-provenance.d.mts +15 -15
  146. package/dist/eval/record/membership-provenance.d.ts +15 -15
  147. package/dist/eval/record/score.cjs +7 -0
  148. package/dist/eval/record/score.cjs.map +1 -1
  149. package/dist/eval/record/sealed-assertion.cjs +3 -0
  150. package/dist/eval/record/sealed-assertion.cjs.map +1 -1
  151. package/dist/eval/record/verdict.cjs +7 -0
  152. package/dist/eval/record/verdict.cjs.map +1 -1
  153. package/dist/expect/index.cjs +8 -2
  154. package/dist/expect/index.cjs.map +1 -1
  155. package/dist/expect/index.d.cts +9 -4
  156. package/dist/expect/index.d.mts +9 -4
  157. package/dist/expect/index.d.ts +9 -4
  158. package/dist/expect/index.js +72 -62
  159. package/dist/expect/index.mjs +72 -62
  160. package/dist/experiment/host/cli/contribution.cjs +37 -23
  161. package/dist/experiment/host/cli/contribution.cjs.map +1 -1
  162. package/dist/experiment/host/cli/contribution.d.cts +9 -1
  163. package/dist/experiment/host/cli/contribution.d.mts +9 -1
  164. package/dist/experiment/host/cli/contribution.d.ts +9 -1
  165. package/dist/experiment/host/current.cjs +74 -0
  166. package/dist/experiment/host/current.cjs.map +1 -0
  167. package/dist/experiment/host/current.d.cts +33 -0
  168. package/dist/experiment/host/current.d.mts +33 -0
  169. package/dist/experiment/host/current.d.ts +33 -0
  170. package/dist/experiment/host/current.js +10 -0
  171. package/dist/experiment/host/current.js.map +1 -0
  172. package/dist/experiment/host/index.cjs +17 -174
  173. package/dist/experiment/host/index.cjs.map +1 -1
  174. package/dist/experiment/host/index.d.cts +8 -54
  175. package/dist/experiment/host/index.d.mts +8 -54
  176. package/dist/experiment/host/index.d.ts +8 -54
  177. package/dist/experiment/host/operations.cjs +33 -10
  178. package/dist/experiment/host/operations.cjs.map +1 -1
  179. package/dist/experiment/host/operations.d.cts +29 -1
  180. package/dist/experiment/host/operations.d.mts +29 -1
  181. package/dist/experiment/host/operations.d.ts +29 -1
  182. package/dist/experiment/host/operations.js +6 -4
  183. package/dist/experiment/host/requirements.cjs +3 -0
  184. package/dist/experiment/host/requirements.cjs.map +1 -0
  185. package/dist/experiment/host/requirements.d.cts +3 -0
  186. package/dist/experiment/host/requirements.d.mts +3 -0
  187. package/dist/experiment/host/requirements.d.ts +3 -0
  188. package/dist/experiment/host/requirements.js +4 -0
  189. package/dist/experiment/host/requirements.js.map +1 -0
  190. package/dist/experiment/host/runtime.cjs +179 -0
  191. package/dist/experiment/host/runtime.cjs.map +1 -0
  192. package/dist/experiment/host/runtime.d.cts +79 -0
  193. package/dist/experiment/host/runtime.d.mts +79 -0
  194. package/dist/experiment/host/runtime.d.ts +79 -0
  195. package/dist/experiment/host/runtime.js +6 -0
  196. package/dist/experiment/host/runtime.js.map +1 -0
  197. package/dist/experiment/host/types.cjs.map +1 -1
  198. package/dist/experiment/host/types.d.cts +17 -16
  199. package/dist/experiment/host/types.d.mts +17 -16
  200. package/dist/experiment/host/types.d.ts +17 -16
  201. package/dist/fresh-import.cjs +2 -1
  202. package/dist/fresh-import.cjs.map +1 -1
  203. package/dist/index.cjs +4 -2
  204. package/dist/index.cjs.map +1 -1
  205. package/dist/index.d.cts +12 -6
  206. package/dist/index.d.mts +12 -6
  207. package/dist/index.d.ts +12 -6
  208. package/dist/index.js +32 -30
  209. package/dist/index.mjs +32 -30
  210. package/dist/inspection/artifacts.cjs +83 -54
  211. package/dist/inspection/artifacts.cjs.map +1 -1
  212. package/dist/inspection/artifacts.d.cts +8 -0
  213. package/dist/inspection/artifacts.d.mts +8 -0
  214. package/dist/inspection/artifacts.d.ts +8 -0
  215. package/dist/inspection/artifacts.js +2 -0
  216. package/dist/inspection/assertions.cjs +4 -1
  217. package/dist/inspection/assertions.cjs.map +1 -1
  218. package/dist/inspection/cli/contribution.cjs +27 -4
  219. package/dist/inspection/cli/contribution.cjs.map +1 -1
  220. package/dist/inspection/cli/contribution.d.cts +2 -1
  221. package/dist/inspection/cli/contribution.d.mts +2 -1
  222. package/dist/inspection/cli/contribution.d.ts +2 -1
  223. package/dist/inspection/execution-traces.cjs +114 -8
  224. package/dist/inspection/execution-traces.cjs.map +1 -1
  225. package/dist/inspection/execution-traces.d.cts +38 -0
  226. package/dist/inspection/execution-traces.d.mts +38 -0
  227. package/dist/inspection/execution-traces.d.ts +38 -0
  228. package/dist/inspection/facts.cjs +12 -0
  229. package/dist/inspection/facts.cjs.map +1 -1
  230. package/dist/inspection/limits.cjs +5 -1
  231. package/dist/inspection/limits.cjs.map +1 -1
  232. package/dist/inspection/limits.d.cts +4 -0
  233. package/dist/inspection/limits.d.mts +4 -0
  234. package/dist/inspection/limits.d.ts +4 -0
  235. package/dist/inspection/limits.js +6 -2
  236. package/dist/inspection/overview.cjs +74 -33
  237. package/dist/inspection/overview.cjs.map +1 -1
  238. package/dist/inspection/overview.d.cts +19 -1
  239. package/dist/inspection/overview.d.mts +19 -1
  240. package/dist/inspection/overview.d.ts +19 -1
  241. package/dist/inspection/overview.js +4 -2
  242. package/dist/inspection/project-input.cjs +9 -0
  243. package/dist/inspection/project-input.cjs.map +1 -0
  244. package/dist/inspection/project-input.d.cts +20 -0
  245. package/dist/inspection/project-input.d.mts +20 -0
  246. package/dist/inspection/project-input.d.ts +20 -0
  247. package/dist/inspection/project-input.js +8 -0
  248. package/dist/inspection/project-input.js.map +1 -0
  249. package/dist/inspection/project-result.cjs +60 -0
  250. package/dist/inspection/project-result.cjs.map +1 -0
  251. package/dist/inspection/project-result.d.cts +1264 -0
  252. package/dist/inspection/project-result.d.mts +1264 -0
  253. package/dist/inspection/project-result.d.ts +1264 -0
  254. package/dist/inspection/project-result.js +10 -0
  255. package/dist/inspection/project-result.js.map +1 -0
  256. package/dist/inspection/project-source.cjs +109 -0
  257. package/dist/inspection/project-source.cjs.map +1 -0
  258. package/dist/inspection/project-source.d.cts +10 -0
  259. package/dist/inspection/project-source.d.mts +10 -0
  260. package/dist/inspection/project-source.d.ts +10 -0
  261. package/dist/inspection/project-source.js +6 -0
  262. package/dist/inspection/project-source.js.map +1 -0
  263. package/dist/inspection/project.cjs +100 -0
  264. package/dist/inspection/project.cjs.map +1 -0
  265. package/dist/inspection/project.d.cts +3 -0
  266. package/dist/inspection/project.d.mts +3 -0
  267. package/dist/inspection/project.d.ts +3 -0
  268. package/dist/inspection/project.js +6 -0
  269. package/dist/inspection/project.js.map +1 -0
  270. package/dist/inspection/protocol.cjs +19 -9
  271. package/dist/inspection/protocol.cjs.map +1 -1
  272. package/dist/inspection/protocol.d.cts +5506 -38189
  273. package/dist/inspection/protocol.d.mts +5506 -38189
  274. package/dist/inspection/protocol.d.ts +5506 -38189
  275. package/dist/inspection/public.mjs +896 -84
  276. package/dist/inspection/query.cjs +2 -0
  277. package/dist/inspection/query.cjs.map +1 -1
  278. package/dist/inspection/results.cjs +234 -29
  279. package/dist/inspection/results.cjs.map +1 -1
  280. package/dist/inspection/results.d.cts +870 -13
  281. package/dist/inspection/results.d.mts +870 -13
  282. package/dist/inspection/results.d.ts +870 -13
  283. package/dist/inspection/results.js +36 -34
  284. package/dist/inspection/select.cjs +126 -14
  285. package/dist/inspection/select.cjs.map +1 -1
  286. package/dist/inspection/select.d.cts +1 -1
  287. package/dist/inspection/select.d.mts +1 -1
  288. package/dist/inspection/select.d.ts +1 -1
  289. package/dist/inspection/source.cjs +4 -0
  290. package/dist/inspection/source.cjs.map +1 -1
  291. package/dist/inspection/sources.cjs +5 -0
  292. package/dist/inspection/sources.cjs.map +1 -1
  293. package/dist/inspection/trace.cjs +82 -84
  294. package/dist/inspection/trace.cjs.map +1 -1
  295. package/dist/inspection/trace.d.cts +7 -2
  296. package/dist/inspection/trace.d.mts +7 -2
  297. package/dist/inspection/trace.d.ts +7 -2
  298. package/dist/model-slots.cjs +35 -0
  299. package/dist/model-slots.cjs.map +1 -0
  300. package/dist/model-slots.d.cts +19 -0
  301. package/dist/model-slots.d.mts +19 -0
  302. package/dist/model-slots.d.ts +19 -0
  303. package/dist/model-slots.js +8 -0
  304. package/dist/model-slots.js.map +1 -0
  305. package/dist/o11y/adapter-call-price.cjs +4 -0
  306. package/dist/o11y/adapter-call-price.cjs.map +1 -1
  307. package/dist/o11y/adapter-call-price.d.cts +24 -0
  308. package/dist/o11y/adapter-call-price.d.mts +24 -0
  309. package/dist/o11y/adapter-call-price.d.ts +24 -0
  310. package/dist/o11y/adapter-call-price.js +6 -2
  311. package/dist/o11y/adapter-usage-projection.cjs +158 -0
  312. package/dist/o11y/adapter-usage-projection.cjs.map +1 -0
  313. package/dist/o11y/adapter-usage-projection.d.cts +141 -0
  314. package/dist/o11y/adapter-usage-projection.d.mts +141 -0
  315. package/dist/o11y/adapter-usage-projection.d.ts +141 -0
  316. package/dist/o11y/adapter-usage-projection.js +20 -0
  317. package/dist/o11y/adapter-usage-projection.js.map +1 -0
  318. package/dist/o11y/eval-usage.cjs +149 -0
  319. package/dist/o11y/eval-usage.cjs.map +1 -0
  320. package/dist/o11y/eval-usage.d.cts +46 -0
  321. package/dist/o11y/eval-usage.d.mts +46 -0
  322. package/dist/o11y/eval-usage.d.ts +46 -0
  323. package/dist/o11y/eval-usage.js +8 -0
  324. package/dist/o11y/eval-usage.js.map +1 -0
  325. package/dist/o11y/judge-call-price.cjs +62 -0
  326. package/dist/o11y/judge-call-price.cjs.map +1 -0
  327. package/dist/o11y/judge-call-price.d.cts +3 -0
  328. package/dist/o11y/judge-call-price.d.mts +3 -0
  329. package/dist/o11y/judge-call-price.d.ts +3 -0
  330. package/dist/o11y/judge-call-price.js +6 -0
  331. package/dist/o11y/judge-call-price.js.map +1 -0
  332. package/dist/o11y/judge-usage-projection.cjs +134 -0
  333. package/dist/o11y/judge-usage-projection.cjs.map +1 -0
  334. package/dist/o11y/judge-usage-projection.d.cts +18 -0
  335. package/dist/o11y/judge-usage-projection.d.mts +18 -0
  336. package/dist/o11y/judge-usage-projection.d.ts +18 -0
  337. package/dist/o11y/judge-usage-projection.js +20 -0
  338. package/dist/o11y/judge-usage-projection.js.map +1 -0
  339. package/dist/o11y/judge-usage-receipt.cjs +135 -0
  340. package/dist/o11y/judge-usage-receipt.cjs.map +1 -0
  341. package/dist/o11y/judge-usage-receipt.d.cts +5 -0
  342. package/dist/o11y/judge-usage-receipt.d.mts +5 -0
  343. package/dist/o11y/judge-usage-receipt.d.ts +5 -0
  344. package/dist/o11y/judge-usage-receipt.js +6 -0
  345. package/dist/o11y/judge-usage-receipt.js.map +1 -0
  346. package/dist/o11y/judge-usage.cjs +171 -0
  347. package/dist/o11y/judge-usage.cjs.map +1 -0
  348. package/dist/o11y/judge-usage.d.cts +35 -0
  349. package/dist/o11y/judge-usage.d.mts +35 -0
  350. package/dist/o11y/judge-usage.d.ts +35 -0
  351. package/dist/o11y/judge-usage.js +6 -0
  352. package/dist/o11y/judge-usage.js.map +1 -0
  353. package/dist/plugin/contracts.cjs +2 -0
  354. package/dist/plugin/contracts.cjs.map +1 -1
  355. package/dist/plugin/link.cjs +7 -0
  356. package/dist/plugin/link.cjs.map +1 -1
  357. package/dist/record/attachment/protocol.cjs +8 -6
  358. package/dist/record/attachment/protocol.cjs.map +1 -1
  359. package/dist/record/attachment/protocol.d.cts +10 -0
  360. package/dist/record/attachment/protocol.d.mts +10 -0
  361. package/dist/record/attachment/protocol.d.ts +10 -0
  362. package/dist/record/attachment/protocol.js +38 -36
  363. package/dist/record/codec/seal-manifest.d.cts +3 -3
  364. package/dist/record/codec/seal-manifest.d.mts +3 -3
  365. package/dist/record/codec/seal-manifest.d.ts +3 -3
  366. package/dist/record/family/adapter-usage/definition.d.cts +1 -0
  367. package/dist/record/family/adapter-usage/definition.d.mts +1 -0
  368. package/dist/record/family/adapter-usage/definition.d.ts +1 -0
  369. package/dist/record/family/adapter-usage/persistence.cjs +1 -1
  370. package/dist/record/family/adapter-usage/persistence.cjs.map +1 -1
  371. package/dist/record/family/adapter-usage/persistence.d.cts +2 -1
  372. package/dist/record/family/adapter-usage/persistence.d.mts +2 -1
  373. package/dist/record/family/adapter-usage/persistence.d.ts +2 -1
  374. package/dist/record/family/adapter-usage/schema.cjs +21 -2
  375. package/dist/record/family/adapter-usage/schema.cjs.map +1 -1
  376. package/dist/record/family/adapter-usage/schema.d.cts +85 -0
  377. package/dist/record/family/adapter-usage/schema.d.mts +85 -0
  378. package/dist/record/family/adapter-usage/schema.d.ts +85 -0
  379. package/dist/record/family/adapter-usage/schema.js +18 -12
  380. package/dist/record/family/catalog.cjs +31 -27
  381. package/dist/record/family/catalog.cjs.map +1 -1
  382. package/dist/record/family/catalog.d.cts +94 -3
  383. package/dist/record/family/catalog.d.mts +94 -3
  384. package/dist/record/family/catalog.d.ts +94 -3
  385. package/dist/record/family/current.cjs +45 -42
  386. package/dist/record/family/current.cjs.map +1 -1
  387. package/dist/record/family/current.d.cts +240 -1
  388. package/dist/record/family/current.d.mts +240 -1
  389. package/dist/record/family/current.d.ts +240 -1
  390. package/dist/record/family/execution-traces/definition.d.cts +26 -0
  391. package/dist/record/family/execution-traces/definition.d.mts +26 -0
  392. package/dist/record/family/execution-traces/definition.d.ts +26 -0
  393. package/dist/record/family/execution-traces/definition.js +20 -14
  394. package/dist/record/family/execution-traces/schema.cjs +57 -1
  395. package/dist/record/family/execution-traces/schema.cjs.map +1 -1
  396. package/dist/record/family/execution-traces/schema.d.cts +114 -0
  397. package/dist/record/family/execution-traces/schema.d.mts +114 -0
  398. package/dist/record/family/execution-traces/schema.d.ts +114 -0
  399. package/dist/record/family/execution-traces/schema.js +18 -12
  400. package/dist/record/family/judge-usage/definition.cjs +12 -0
  401. package/dist/record/family/judge-usage/definition.cjs.map +1 -0
  402. package/dist/record/family/judge-usage/definition.d.cts +91 -0
  403. package/dist/record/family/judge-usage/definition.d.mts +91 -0
  404. package/dist/record/family/judge-usage/definition.d.ts +91 -0
  405. package/dist/record/family/judge-usage/definition.js +6 -0
  406. package/dist/record/family/judge-usage/definition.js.map +1 -0
  407. package/dist/record/family/judge-usage/persistence.cjs +10 -0
  408. package/dist/record/family/judge-usage/persistence.cjs.map +1 -0
  409. package/dist/record/family/judge-usage/persistence.d.cts +91 -0
  410. package/dist/record/family/judge-usage/persistence.d.mts +91 -0
  411. package/dist/record/family/judge-usage/persistence.d.ts +91 -0
  412. package/dist/record/family/judge-usage/persistence.js +6 -0
  413. package/dist/record/family/judge-usage/persistence.js.map +1 -0
  414. package/dist/record/family/judge-usage/schema.cjs +307 -0
  415. package/dist/record/family/judge-usage/schema.cjs.map +1 -0
  416. package/dist/record/family/judge-usage/schema.d.cts +351 -0
  417. package/dist/record/family/judge-usage/schema.d.mts +351 -0
  418. package/dist/record/family/judge-usage/schema.d.ts +351 -0
  419. package/dist/record/family/judge-usage/schema.js +18 -0
  420. package/dist/record/family/judge-usage/schema.js.map +1 -0
  421. package/dist/record/host/sqlite-host.cjs +55 -9
  422. package/dist/record/host/sqlite-host.cjs.map +1 -1
  423. package/dist/record/host/types.cjs.map +1 -1
  424. package/dist/record/host/types.d.cts +7 -0
  425. package/dist/record/host/types.d.mts +7 -0
  426. package/dist/record/host/types.d.ts +7 -0
  427. package/dist/record/model/run-context.cjs +7 -1
  428. package/dist/record/model/run-context.cjs.map +1 -1
  429. package/dist/record/model/run-context.d.cts +4 -0
  430. package/dist/record/model/run-context.d.mts +4 -0
  431. package/dist/record/model/run-context.d.ts +4 -0
  432. package/dist/record/model/seal-manifest.d.cts +1 -1
  433. package/dist/record/model/seal-manifest.d.mts +1 -1
  434. package/dist/record/model/seal-manifest.d.ts +1 -1
  435. package/dist/record/sqlite/client.cjs +18 -5
  436. package/dist/record/sqlite/client.cjs.map +1 -1
  437. package/dist/record/sqlite/client.d.cts +1 -1
  438. package/dist/record/sqlite/client.d.mts +1 -1
  439. package/dist/record/sqlite/client.d.ts +1 -1
  440. package/dist/record/sqlite/project-state-database.cjs +29 -8
  441. package/dist/record/sqlite/project-state-database.cjs.map +1 -1
  442. package/dist/run/host/runtime.cjs +4 -0
  443. package/dist/run/host/runtime.cjs.map +1 -1
  444. package/dist/run/storage/sqlite.cjs +20 -0
  445. package/dist/run/storage/sqlite.cjs.map +1 -1
  446. package/dist/runner/adapter-execution-trace.cjs +125 -2
  447. package/dist/runner/adapter-execution-trace.cjs.map +1 -1
  448. package/dist/runner/adapter-execution-trace.d.cts +1 -1
  449. package/dist/runner/adapter-execution-trace.d.mts +1 -1
  450. package/dist/runner/adapter-execution-trace.d.ts +1 -1
  451. package/dist/runner/adapter-usage.cjs +55 -7
  452. package/dist/runner/adapter-usage.cjs.map +1 -1
  453. package/dist/runner/adapter-usage.d.cts +9 -2
  454. package/dist/runner/adapter-usage.d.mts +9 -2
  455. package/dist/runner/adapter-usage.d.ts +9 -2
  456. package/dist/runner/adoption.cjs +9 -0
  457. package/dist/runner/adoption.cjs.map +1 -1
  458. package/dist/runner/attempt-cancellation.cjs +12 -0
  459. package/dist/runner/attempt-cancellation.cjs.map +1 -0
  460. package/dist/runner/attempt-cancellation.d.cts +6 -0
  461. package/dist/runner/attempt-cancellation.d.mts +6 -0
  462. package/dist/runner/attempt-cancellation.d.ts +6 -0
  463. package/dist/runner/attempt-cancellation.js +6 -0
  464. package/dist/runner/attempt-cancellation.js.map +1 -0
  465. package/dist/runner/attempt-resources.cjs +10 -4
  466. package/dist/runner/attempt-resources.cjs.map +1 -1
  467. package/dist/runner/attempt-resources.d.cts +2 -1
  468. package/dist/runner/attempt-resources.d.mts +2 -1
  469. package/dist/runner/attempt-resources.d.ts +2 -1
  470. package/dist/runner/attempt.cjs +1177 -1139
  471. package/dist/runner/attempt.cjs.map +1 -1
  472. package/dist/runner/config-identity.cjs +20 -1
  473. package/dist/runner/config-identity.cjs.map +1 -1
  474. package/dist/runner/config-identity.d.cts +5 -0
  475. package/dist/runner/config-identity.d.mts +5 -0
  476. package/dist/runner/config-identity.d.ts +5 -0
  477. package/dist/runner/discover.cjs +14 -0
  478. package/dist/runner/discover.cjs.map +1 -1
  479. package/dist/runner/discover.d.cts +3 -0
  480. package/dist/runner/discover.d.mts +3 -0
  481. package/dist/runner/discover.d.ts +3 -0
  482. package/dist/runner/feedback/human.cjs +9 -4
  483. package/dist/runner/feedback/human.cjs.map +1 -1
  484. package/dist/runner/fingerprint.cjs +1 -0
  485. package/dist/runner/fingerprint.cjs.map +1 -1
  486. package/dist/runner/judge-usage.cjs +18 -0
  487. package/dist/runner/judge-usage.cjs.map +1 -0
  488. package/dist/runner/judge-usage.d.cts +5 -0
  489. package/dist/runner/judge-usage.d.mts +5 -0
  490. package/dist/runner/judge-usage.d.ts +5 -0
  491. package/dist/runner/judge-usage.js +8 -0
  492. package/dist/runner/judge-usage.js.map +1 -0
  493. package/dist/runner/project-target.cjs.map +1 -1
  494. package/dist/runner/project-target.d.cts +2 -0
  495. package/dist/runner/project-target.d.mts +2 -0
  496. package/dist/runner/project-target.d.ts +2 -0
  497. package/dist/runner/record/planning.cjs +1 -0
  498. package/dist/runner/record/planning.cjs.map +1 -1
  499. package/dist/runner/record.cjs +4 -0
  500. package/dist/runner/record.cjs.map +1 -1
  501. package/dist/runner/reporters/braintrust.cjs +2 -0
  502. package/dist/runner/reporters/braintrust.cjs.map +1 -1
  503. package/dist/runner/reuse-diagnostics.cjs +9 -10
  504. package/dist/runner/reuse-diagnostics.cjs.map +1 -1
  505. package/dist/runner/reuse-diagnostics.d.cts +5 -6
  506. package/dist/runner/reuse-diagnostics.d.mts +5 -6
  507. package/dist/runner/reuse-diagnostics.d.ts +5 -6
  508. package/dist/runner/reuse-diagnostics.js +4 -4
  509. package/dist/runner/reuse-plan.cjs +100 -48
  510. package/dist/runner/reuse-plan.cjs.map +1 -1
  511. package/dist/runner/reuse-plan.d.cts +60 -3
  512. package/dist/runner/reuse-plan.d.mts +60 -3
  513. package/dist/runner/reuse-plan.d.ts +60 -3
  514. package/dist/runner/reuse-plan.js +14 -10
  515. package/dist/runner/run.cjs +8 -6
  516. package/dist/runner/run.cjs.map +1 -1
  517. package/dist/runner/session.cjs +1 -1
  518. package/dist/runner/session.cjs.map +1 -1
  519. package/dist/runner/session.d.cts +1 -1
  520. package/dist/runner/session.d.mts +1 -1
  521. package/dist/runner/session.d.ts +1 -1
  522. package/dist/runner/source-producer.cjs +3 -1
  523. package/dist/runner/source-producer.cjs.map +1 -1
  524. package/dist/runner/types.cjs.map +1 -1
  525. package/dist/runner/types.d.cts +26 -5
  526. package/dist/runner/types.d.mts +26 -5
  527. package/dist/runner/types.d.ts +26 -5
  528. package/dist/sandbox/action.cjs +3 -0
  529. package/dist/sandbox/action.cjs.map +1 -1
  530. package/dist/sandbox/commands.cjs +3 -0
  531. package/dist/sandbox/commands.cjs.map +1 -1
  532. package/dist/sandbox/compose.cjs +6 -0
  533. package/dist/sandbox/compose.cjs.map +1 -1
  534. package/dist/sandbox/docker-profile/registry.cjs +7 -0
  535. package/dist/sandbox/docker-profile/registry.cjs.map +1 -1
  536. package/dist/sandbox/docker-profile/runtime.cjs +3 -0
  537. package/dist/sandbox/docker-profile/runtime.cjs.map +1 -1
  538. package/dist/sandbox/docker-profile/schema.cjs +7 -0
  539. package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
  540. package/dist/sandbox/incus.cjs +7 -0
  541. package/dist/sandbox/incus.cjs.map +1 -1
  542. package/dist/sandbox/layer.cjs +12 -0
  543. package/dist/sandbox/layer.cjs.map +1 -1
  544. package/dist/shared/adapter-cleanup.cjs +18 -0
  545. package/dist/shared/adapter-cleanup.cjs.map +1 -0
  546. package/dist/shared/adapter-cleanup.d.cts +4 -0
  547. package/dist/shared/adapter-cleanup.d.mts +4 -0
  548. package/dist/shared/adapter-cleanup.d.ts +4 -0
  549. package/dist/shared/adapter-cleanup.js +10 -0
  550. package/dist/shared/adapter-cleanup.js.map +1 -0
  551. package/dist/shared/attempt-lifecycle.cjs +3 -0
  552. package/dist/shared/attempt-lifecycle.cjs.map +1 -0
  553. package/dist/shared/attempt-lifecycle.d.cts +13 -0
  554. package/dist/shared/attempt-lifecycle.d.mts +13 -0
  555. package/dist/shared/attempt-lifecycle.d.ts +13 -0
  556. package/dist/shared/attempt-lifecycle.js +4 -0
  557. package/dist/shared/attempt-lifecycle.js.map +1 -0
  558. package/dist/show/contribution.cjs +52 -14
  559. package/dist/show/contribution.cjs.map +1 -1
  560. package/dist/show/contribution.d.cts +23 -1
  561. package/dist/show/contribution.d.mts +23 -1
  562. package/dist/show/contribution.d.ts +23 -1
  563. package/dist/show/model.cjs +8 -1
  564. package/dist/show/model.cjs.map +1 -1
  565. package/dist/show/model.d.cts +10 -1
  566. package/dist/show/model.d.mts +10 -1
  567. package/dist/show/model.d.ts +10 -1
  568. package/dist/show/render.cjs +287 -49
  569. package/dist/show/render.cjs.map +1 -1
  570. package/dist/show/render.d.cts +3 -0
  571. package/dist/show/render.d.mts +3 -0
  572. package/dist/show/render.d.ts +3 -0
  573. package/dist/sources/projector.cjs +3 -0
  574. package/dist/sources/projector.cjs.map +1 -1
  575. package/dist/types.cjs.map +1 -1
  576. package/dist/types.d.cts +1 -1
  577. package/dist/types.d.mts +1 -1
  578. package/dist/types.d.ts +1 -1
  579. package/dist/view/app-dist/.vite/manifest.json +2 -2
  580. package/dist/view/app-dist/assets/index-CmVoXbwG.js +63 -0
  581. package/dist/view/app-dist/assets/{quality-cost-scatter-CFB3wnkN.js → quality-cost-scatter-BuLISaH4.js} +1 -1
  582. package/dist/view/app-dist/index.html +1 -1
  583. package/dist/view/cli/contribution.cjs +54 -21
  584. package/dist/view/cli/contribution.cjs.map +1 -1
  585. package/dist/view/cli/contribution.d.cts +2 -1
  586. package/dist/view/cli/contribution.d.mts +2 -1
  587. package/dist/view/cli/contribution.d.ts +2 -1
  588. package/dist/view/function-runtime.mjs +13231 -11647
  589. package/dist/view/http-protocol.cjs +3 -0
  590. package/dist/view/http-protocol.cjs.map +1 -1
  591. package/dist/view/http-protocol.d.cts +8 -0
  592. package/dist/view/http-protocol.d.mts +8 -0
  593. package/dist/view/http-protocol.d.ts +8 -0
  594. package/dist/view/inspection-host.cjs +17 -1
  595. package/dist/view/inspection-host.cjs.map +1 -1
  596. package/dist/view/render.cjs +1 -0
  597. package/dist/view/render.cjs.map +1 -1
  598. package/dist/view/render.d.cts +2 -1
  599. package/dist/view/render.d.mts +2 -1
  600. package/dist/view/render.d.ts +2 -1
  601. package/dist/view/revision.cjs.map +1 -1
  602. package/dist/view/revision.d.cts +12 -0
  603. package/dist/view/revision.d.mts +12 -0
  604. package/dist/view/revision.d.ts +12 -0
  605. package/dist/view/server.cjs +10 -9
  606. package/dist/view/server.cjs.map +1 -1
  607. package/docs-site/zh/examples/ai-agent-application.mdx +1 -1
  608. package/docs-site/zh/explanation/adapter.mdx +2 -2
  609. package/docs-site/zh/explanation/assert.mdx +60 -24
  610. package/docs-site/zh/explanation/drive.mdx +1 -1
  611. package/docs-site/zh/explanation/evals.mdx +31 -29
  612. package/docs-site/zh/explanation/experiment.mdx +15 -15
  613. package/docs-site/zh/explanation/judge.mdx +23 -15
  614. package/docs-site/zh/explanation/overview.mdx +44 -21
  615. package/docs-site/zh/explanation/record.mdx +28 -13
  616. package/docs-site/zh/explanation/results-flow.mdx +37 -0
  617. package/docs-site/zh/explanation/runner.mdx +27 -6
  618. package/docs-site/zh/index.mdx +22 -115
  619. package/docs-site/zh/introduction.mdx +89 -61
  620. package/docs-site/zh/reference/cli.mdx +50 -26
  621. package/docs-site/zh/reference/define-agent.mdx +37 -5
  622. package/docs-site/zh/reference/define-eval.mdx +130 -29
  623. package/docs-site/zh/reference/define-experiment.mdx +251 -0
  624. package/docs-site/zh/reference/events.mdx +34 -30
  625. package/docs-site/zh/reference/expect.mdx +77 -2
  626. package/docs-site/zh/reference/official-adapters.mdx +2 -2
  627. package/docs-site/zh/troubleshooting/debug-sandbox.mdx +43 -24
  628. package/docs-site/zh/troubleshooting/debugging.mdx +65 -42
  629. package/docs-site/zh/troubleshooting/recover-after-kill.mdx +35 -28
  630. package/docs-site/zh/tutorials/accept-results.mdx +34 -24
  631. package/docs-site/zh/tutorials/agent-feedback-loop.mdx +74 -43
  632. package/docs-site/zh/tutorials/agent-onboarding.mdx +27 -20
  633. package/docs-site/zh/tutorials/authoring.mdx +138 -121
  634. package/docs-site/zh/tutorials/ci-integration.mdx +46 -22
  635. package/docs-site/zh/tutorials/compare-runs.mdx +40 -13
  636. package/docs-site/zh/tutorials/concurrency.mdx +66 -62
  637. package/docs-site/zh/tutorials/configuration.mdx +17 -17
  638. package/docs-site/zh/tutorials/connect-otel.mdx +48 -37
  639. package/docs-site/zh/tutorials/connect-your-agent.mdx +80 -173
  640. package/docs-site/zh/tutorials/control-run-cost.mdx +63 -12
  641. package/docs-site/zh/tutorials/criteria-files.mdx +28 -21
  642. package/docs-site/zh/tutorials/custom-application.mdx +75 -55
  643. package/docs-site/zh/tutorials/dataset-fanout.mdx +32 -22
  644. package/docs-site/zh/tutorials/debug-lifecycle-plan.mdx +38 -31
  645. package/docs-site/zh/tutorials/docker-in-docker.mdx +83 -89
  646. package/docs-site/zh/tutorials/eval-groups.mdx +70 -89
  647. package/docs-site/zh/tutorials/evaluation-kinds.mdx +12 -5
  648. package/docs-site/zh/tutorials/experiment-services.mdx +243 -0
  649. package/docs-site/zh/tutorials/fixtures.mdx +42 -26
  650. package/docs-site/zh/tutorials/handle-execution-failures.mdx +41 -19
  651. package/docs-site/zh/tutorials/install-custom-sandbox-agent.mdx +21 -16
  652. package/docs-site/zh/tutorials/niceeval-taste-application.mdx +394 -0
  653. package/docs-site/zh/tutorials/niceeval-taste.mdx +190 -0
  654. package/docs-site/zh/tutorials/nixos-managed-dind.mdx +51 -39
  655. package/docs-site/zh/tutorials/plugins.mdx +55 -31
  656. package/docs-site/zh/tutorials/prebuilt-sandbox.mdx +204 -0
  657. package/docs-site/zh/tutorials/quickstart.mdx +91 -47
  658. package/docs-site/zh/tutorials/reporters.mdx +45 -30
  659. package/docs-site/zh/tutorials/rerun-and-cache.mdx +39 -40
  660. package/docs-site/zh/tutorials/sandbox-agent.mdx +65 -40
  661. package/docs-site/zh/tutorials/sandbox-providers.mdx +104 -282
  662. package/docs-site/zh/tutorials/sandbox-reuse.mdx +65 -97
  663. package/docs-site/zh/tutorials/select-and-preview.mdx +25 -20
  664. package/docs-site/zh/tutorials/verify-judge.mdx +49 -26
  665. package/docs-site/zh/tutorials/viewing-results.mdx +130 -80
  666. package/docs-site/zh/tutorials/write-experiment.mdx +116 -298
  667. package/docs-site/zh/tutorials/write-send.mdx +53 -52
  668. package/node_modules/undici/docs/docs/api/Agent.md +8 -8
  669. package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +9 -6
  670. package/node_modules/undici/docs/docs/api/Errors.md +25 -0
  671. package/node_modules/undici/docs/docs/api/Interceptors.md +4 -3
  672. package/node_modules/undici/docs/docs/api/Pool.md +5 -6
  673. package/node_modules/undici/lib/api/readable.js +1 -2
  674. package/node_modules/undici/lib/core/request.js +23 -2
  675. package/node_modules/undici/lib/core/util.js +0 -39
  676. package/node_modules/undici/lib/dispatcher/client-h1.js +11 -4
  677. package/node_modules/undici/lib/dispatcher/client-h2.js +52 -8
  678. package/node_modules/undici/lib/dispatcher/client.js +1 -1
  679. package/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +3 -2
  680. package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +21 -6
  681. package/node_modules/undici/lib/dispatcher/pool-base.js +63 -2
  682. package/node_modules/undici/lib/dispatcher/pool.js +90 -7
  683. package/node_modules/undici/lib/dispatcher/proxy-agent.js +16 -3
  684. package/node_modules/undici/lib/handler/deduplication-handler.js +24 -11
  685. package/node_modules/undici/lib/handler/redirect-handler.js +5 -0
  686. package/node_modules/undici/lib/handler/retry-handler.js +72 -13
  687. package/node_modules/undici/lib/interceptor/cache.js +4 -1
  688. package/node_modules/undici/lib/interceptor/decompress.js +236 -69
  689. package/node_modules/undici/lib/web/cache/cache.js +17 -8
  690. package/node_modules/undici/lib/web/cache/cachestorage.js +11 -5
  691. package/node_modules/undici/lib/web/cookies/index.js +19 -7
  692. package/node_modules/undici/lib/web/cookies/util.js +3 -1
  693. package/node_modules/undici/lib/web/eventsource/eventsource.js +25 -1
  694. package/node_modules/undici/lib/web/fetch/body.js +22 -15
  695. package/node_modules/undici/lib/web/fetch/data-url.js +6 -6
  696. package/node_modules/undici/lib/web/fetch/formdata.js +30 -36
  697. package/node_modules/undici/lib/web/fetch/headers.js +34 -31
  698. package/node_modules/undici/lib/web/fetch/index.js +38 -14
  699. package/node_modules/undici/lib/web/fetch/request.js +74 -79
  700. package/node_modules/undici/lib/web/fetch/response.js +43 -44
  701. package/node_modules/undici/lib/web/fetch/util.js +7 -7
  702. package/node_modules/undici/lib/web/infra/index.js +16 -1
  703. package/node_modules/undici/lib/web/webidl/index.js +2 -14
  704. package/node_modules/undici/lib/web/websocket/events.js +43 -26
  705. package/node_modules/undici/lib/web/websocket/receiver.js +5 -0
  706. package/node_modules/undici/lib/web/websocket/stream/websocketerror.js +13 -10
  707. package/node_modules/undici/lib/web/websocket/websocket.js +44 -41
  708. package/node_modules/undici/package.json +1 -1
  709. package/node_modules/undici/types/diagnostics-channel.d.ts +2 -1
  710. package/node_modules/undici/types/interceptors.d.ts +1 -1
  711. package/node_modules/undici/types/webidl.d.ts +13 -7
  712. package/package.json +4 -4
  713. package/dist/view/app-dist/assets/index-DFzw1L97.js +0 -63
  714. package/docs-site/zh/tutorials/experiments.mdx +0 -101
@@ -1 +1 @@
1
- {"version":3,"file":"reuse-diagnostics.js","sourceRoot":"","sources":["reuse-diagnostics.ts"],"names":[],"mappings":"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","sourcesContent":["// 复用污染的收尾诊断(契约见 docs/feature/sandbox/reuse.md「复用污染的可观察性」)。\n//\n// 「setup 幂等、不依赖 workdir 外残留」是作者义务,违约的症状(下游 Eval 莫名失败)不指向复用。\n// Run 收尾按 Sandbox 实例与承接序号聚合:首承接正常、而同一实例序号 ≥ 2 的 Attempt 集中失败或\n// 集中 errored 在同一生命周期阶段时,追加一条运行级 diagnostic 点名实例、序号区间与阶段。\n// 只指路,不改判定 —— 这里既不读也不写任何 verdict。\nimport type { EvalResult, LifecyclePhase } from \"./types.ts\";\n/** 同一阶段上至少这么多条后承接失败才算「集中」;低于它是零散失败,不发诊断(不误报)。 */\nconst CLUSTER_MIN = 2;\nexport interface ReuseContaminationNotice {\n /** 承接这些 Attempt 的实验;裸 run(无 experimentId)用 undefined。 */\n experimentId?: string;\n /** 本次 Run 内的 Sandbox 编号。 */\n reuseSandbox: number;\n /** 集中失败所在的生命周期阶段。 */\n phase: LifecyclePhase;\n /** 集中失败的承接序号区间(闭区间)与条数。 */\n fromOrdinal: number;\n toOrdinal: number;\n count: number;\n}\nfunction failing(result: EvalResult): boolean {\n return result.verdict === \"failed\" || result.verdict === \"errored\";\n}\n/** 失败落在哪个阶段:errored 读 `error.phase`;断言失败没有 error,归 `eval.run`(判定发生地)。 */\nfunction phaseOf(result: EvalResult): LifecyclePhase {\n return (result.error?.origin.scope === \"attempt\" ? result.error.origin.phase : undefined) ?? \"eval.run\";\n}\n/**\n * 按实例 × 承接序号聚合出复用污染线索。只看声明了复用(`sandbox.reused`)且带完整调度事实的\n * 结果;首承接(序号 1)缺失或本身失败的实例整个跳过——那种失败与「上一条 Attempt 的残留」\n * 无关,报出来就是误报。\n */\nexport function detectReuseContamination(results: readonly EvalResult[]): ReuseContaminationNotice[] {\n const byInstance = new Map<string, {\n experimentId?: string;\n reuseSandbox: number;\n attempts: EvalResult[];\n }>();\n for (const result of results) {\n const sandbox = result.sandbox;\n if (!sandbox?.reused || sandbox.reuseSandbox === undefined || sandbox.reuseOrdinal === undefined)\n continue;\n const key = `${result.experimentId ?? \"\"}#${sandbox.reuseSandbox}`;\n let group = byInstance.get(key);\n if (!group) {\n group = { ...(result.experimentId !== undefined ? { experimentId: result.experimentId } : {}), reuseSandbox: sandbox.reuseSandbox, attempts: [] };\n byInstance.set(key, group);\n }\n group.attempts.push(result);\n }\n const notices: ReuseContaminationNotice[] = [];\n for (const group of byInstance.values()) {\n const first = group.attempts.find((r) => r.sandbox!.reuseOrdinal === 1);\n // 首承接没跑到、或首承接自己就失败:这台实例的失败不能归因到「前一条 Attempt 的残留」。\n if (!first || failing(first))\n continue;\n const laterFailures = group.attempts.filter((r) => r.sandbox!.reuseOrdinal! >= 2 && failing(r));\n const byPhase = new Map<LifecyclePhase, number[]>();\n for (const attempt of laterFailures) {\n const phase = phaseOf(attempt);\n const ordinals = byPhase.get(phase) ?? [];\n ordinals.push(attempt.sandbox!.reuseOrdinal!);\n byPhase.set(phase, ordinals);\n }\n for (const [phase, ordinals] of byPhase) {\n if (ordinals.length < CLUSTER_MIN)\n continue;\n const sorted = [...ordinals].sort((a, b) => a - b);\n notices.push({\n ...(group.experimentId !== undefined ? { experimentId: group.experimentId } : {}),\n reuseSandbox: group.reuseSandbox,\n phase,\n fromOrdinal: sorted[0]!,\n toOrdinal: sorted[sorted.length - 1]!,\n count: sorted.length,\n });\n }\n }\n return notices;\n}\n/** 诊断正文:点名实例、序号区间与阶段,并说清它只是线索。 */\nexport function reuseContaminationMessage(notice: ReuseContaminationNotice): string {\n const where = notice.experimentId !== undefined ? ` in experiment \"${notice.experimentId}\"` : \"\";\n return (` · [sandbox] reused sandbox #${notice.reuseSandbox}${where} handled its first attempt cleanly, but ` +\n `${notice.count} later attempts (handoff ${notice.fromOrdinal}-${notice.toOrdinal}) all stopped in ${notice.phase}. ` +\n \"Files left outside workdir by an earlier attempt are a likely cause: setup must be idempotent and must not \" +\n \"depend on anything the previous attempt left behind. This only points at a suspect; it changes no verdict.\");\n}\n"]}
1
+ {"version":3,"file":"reuse-diagnostics.js","sourceRoot":"","sources":["reuse-diagnostics.ts"],"names":[],"mappings":"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","sourcesContent":["// 复用失败的收尾诊断(契约见 docs/feature/sandbox/reuse.md「复用失败的可观察性」)。\n//\n// 有意持久状态是合法的实验输入;失败序列本身不能证明污染或根因。\n// Run 收尾按 Sandbox 实例与承接序号聚合:首承接正常、而同一实例序号 ≥ 2 的 Attempt 集中失败或\n// 集中 errored 在同一生命周期阶段时,追加一条运行级 diagnostic 点名实例、序号区间与阶段。\n// 只指路,不改判定 —— 这里既不读也不写任何 verdict。\nimport type { EvalResult, LifecyclePhase } from \"./types.ts\";\n/** 同一阶段上至少这么多条后承接失败才算「集中」;低于它是零散失败,不发诊断(不误报)。 */\nconst CLUSTER_MIN = 2;\nexport interface ReuseFailureClusterNotice {\n /** 承接这些 Attempt 的实验;裸 run(无 experimentId)用 undefined。 */\n experimentId?: string;\n /** 本次 Run 内的 Sandbox 编号。 */\n reuseSandbox: number;\n /** 集中失败所在的生命周期阶段。 */\n phase: LifecyclePhase;\n /** 集中失败的承接序号区间(闭区间)与条数。 */\n fromOrdinal: number;\n toOrdinal: number;\n count: number;\n}\nfunction failing(result: EvalResult): boolean {\n return result.verdict === \"failed\" || result.verdict === \"errored\";\n}\n/** 失败落在哪个阶段:errored 读 `error.phase`;断言失败没有 error,归 `eval.run`(判定发生地)。 */\nfunction phaseOf(result: EvalResult): LifecyclePhase {\n return (result.error?.origin.scope === \"attempt\" ? result.error.origin.phase : undefined) ?? \"eval.run\";\n}\n/**\n * 按实例 × 承接序号聚合复用后的失败。只看声明了复用且带完整调度事实的结果;\n * 首承接缺失或本身失败时没有成功基准,不报告后续失败聚集。\n */\nexport function detectReuseFailureClusters(results: readonly EvalResult[]): ReuseFailureClusterNotice[] {\n const byInstance = new Map<string, {\n experimentId?: string;\n reuseSandbox: number;\n attempts: EvalResult[];\n }>();\n for (const result of results) {\n const sandbox = result.sandbox;\n if (!sandbox?.reused || sandbox.reuseSandbox === undefined || sandbox.reuseOrdinal === undefined)\n continue;\n const key = `${result.experimentId ?? \"\"}#${sandbox.reuseSandbox}`;\n let group = byInstance.get(key);\n if (!group) {\n group = { ...(result.experimentId !== undefined ? { experimentId: result.experimentId } : {}), reuseSandbox: sandbox.reuseSandbox, attempts: [] };\n byInstance.set(key, group);\n }\n group.attempts.push(result);\n }\n const notices: ReuseFailureClusterNotice[] = [];\n for (const group of byInstance.values()) {\n const first = group.attempts.find((r) => r.sandbox!.reuseOrdinal === 1);\n // 首承接缺失或失败时,没有成功基准可供比较。\n if (!first || failing(first))\n continue;\n const laterFailures = group.attempts.filter((r) => r.sandbox!.reuseOrdinal! >= 2 && failing(r));\n const byPhase = new Map<LifecyclePhase, number[]>();\n for (const attempt of laterFailures) {\n const phase = phaseOf(attempt);\n const ordinals = byPhase.get(phase) ?? [];\n ordinals.push(attempt.sandbox!.reuseOrdinal!);\n byPhase.set(phase, ordinals);\n }\n for (const [phase, ordinals] of byPhase) {\n if (ordinals.length < CLUSTER_MIN)\n continue;\n const sorted = [...ordinals].sort((a, b) => a - b);\n notices.push({\n ...(group.experimentId !== undefined ? { experimentId: group.experimentId } : {}),\n reuseSandbox: group.reuseSandbox,\n phase,\n fromOrdinal: sorted[0]!,\n toOrdinal: sorted[sorted.length - 1]!,\n count: sorted.length,\n });\n }\n }\n return notices;\n}\n/** 诊断正文:点名实例、序号区间与阶段,并说清它只是线索。 */\nexport function reuseFailureClusterMessage(notice: ReuseFailureClusterNotice): string {\n const where = notice.experimentId !== undefined ? ` in experiment \"${notice.experimentId}\"` : \"\";\n return (` · [sandbox] reused sandbox #${notice.reuseSandbox}${where} handled its first attempt cleanly, but ` +\n `${notice.count} later attempts (handoff ${notice.fromOrdinal}-${notice.toOrdinal}) all stopped in ${notice.phase}. ` +\n \"This failure pattern does not establish a cause. Intentional persistent memory and checkpoints are supported; \" +\n \"check expected state, unexpected leftovers, and repeatable setup against the experiment's design. No verdict is changed.\");\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { EvalResult, LifecyclePhase } from "./types.cjs";
2
- export interface ReuseContaminationNotice {
2
+ export interface ReuseFailureClusterNotice {
3
3
  /** 承接这些 Attempt 的实验;裸 run(无 experimentId)用 undefined。 */
4
4
  experimentId?: string;
5
5
  /** 本次 Run 内的 Sandbox 编号。 */
@@ -12,10 +12,9 @@ export interface ReuseContaminationNotice {
12
12
  count: number;
13
13
  }
14
14
  /**
15
- * 按实例 × 承接序号聚合出复用污染线索。只看声明了复用(`sandbox.reused`)且带完整调度事实的
16
- * 结果;首承接(序号 1)缺失或本身失败的实例整个跳过——那种失败与「上一条 Attempt 的残留」
17
- * 无关,报出来就是误报。
15
+ * 按实例 × 承接序号聚合复用后的失败。只看声明了复用且带完整调度事实的结果;
16
+ * 首承接缺失或本身失败时没有成功基准,不报告后续失败聚集。
18
17
  */
19
- export declare function detectReuseContamination(results: readonly EvalResult[]): ReuseContaminationNotice[];
18
+ export declare function detectReuseFailureClusters(results: readonly EvalResult[]): ReuseFailureClusterNotice[];
20
19
  /** 诊断正文:点名实例、序号区间与阶段,并说清它只是线索。 */
21
- export declare function reuseContaminationMessage(notice: ReuseContaminationNotice): string;
20
+ export declare function reuseFailureClusterMessage(notice: ReuseFailureClusterNotice): string;
@@ -1,5 +1,5 @@
1
1
  import type { EvalResult, LifecyclePhase } from "./types.mjs";
2
- export interface ReuseContaminationNotice {
2
+ export interface ReuseFailureClusterNotice {
3
3
  /** 承接这些 Attempt 的实验;裸 run(无 experimentId)用 undefined。 */
4
4
  experimentId?: string;
5
5
  /** 本次 Run 内的 Sandbox 编号。 */
@@ -12,10 +12,9 @@ export interface ReuseContaminationNotice {
12
12
  count: number;
13
13
  }
14
14
  /**
15
- * 按实例 × 承接序号聚合出复用污染线索。只看声明了复用(`sandbox.reused`)且带完整调度事实的
16
- * 结果;首承接(序号 1)缺失或本身失败的实例整个跳过——那种失败与「上一条 Attempt 的残留」
17
- * 无关,报出来就是误报。
15
+ * 按实例 × 承接序号聚合复用后的失败。只看声明了复用且带完整调度事实的结果;
16
+ * 首承接缺失或本身失败时没有成功基准,不报告后续失败聚集。
18
17
  */
19
- export declare function detectReuseContamination(results: readonly EvalResult[]): ReuseContaminationNotice[];
18
+ export declare function detectReuseFailureClusters(results: readonly EvalResult[]): ReuseFailureClusterNotice[];
20
19
  /** 诊断正文:点名实例、序号区间与阶段,并说清它只是线索。 */
21
- export declare function reuseContaminationMessage(notice: ReuseContaminationNotice): string;
20
+ export declare function reuseFailureClusterMessage(notice: ReuseFailureClusterNotice): string;
@@ -1,5 +1,5 @@
1
1
  import type { EvalResult, LifecyclePhase } from "./types.js";
2
- export interface ReuseContaminationNotice {
2
+ export interface ReuseFailureClusterNotice {
3
3
  /** 承接这些 Attempt 的实验;裸 run(无 experimentId)用 undefined。 */
4
4
  experimentId?: string;
5
5
  /** 本次 Run 内的 Sandbox 编号。 */
@@ -12,10 +12,9 @@ export interface ReuseContaminationNotice {
12
12
  count: number;
13
13
  }
14
14
  /**
15
- * 按实例 × 承接序号聚合出复用污染线索。只看声明了复用(`sandbox.reused`)且带完整调度事实的
16
- * 结果;首承接(序号 1)缺失或本身失败的实例整个跳过——那种失败与「上一条 Attempt 的残留」
17
- * 无关,报出来就是误报。
15
+ * 按实例 × 承接序号聚合复用后的失败。只看声明了复用且带完整调度事实的结果;
16
+ * 首承接缺失或本身失败时没有成功基准,不报告后续失败聚集。
18
17
  */
19
- export declare function detectReuseContamination(results: readonly EvalResult[]): ReuseContaminationNotice[];
18
+ export declare function detectReuseFailureClusters(results: readonly EvalResult[]): ReuseFailureClusterNotice[];
20
19
  /** 诊断正文:点名实例、序号区间与阶段,并说清它只是线索。 */
21
- export declare function reuseContaminationMessage(notice: ReuseContaminationNotice): string;
20
+ export declare function reuseFailureClusterMessage(notice: ReuseFailureClusterNotice): string;
@@ -1,8 +1,8 @@
1
1
  import { createRequire as __niceevalCreateRequire } from "node:module";
2
2
  const __niceevalRequire = __niceevalCreateRequire(import.meta.url);
3
3
  const __niceevalCanonical = __niceevalRequire("./reuse-diagnostics.cjs");
4
- const __niceevalExport0 = __niceevalCanonical["detectReuseContamination"];
5
- export { __niceevalExport0 as detectReuseContamination };
6
- const __niceevalExport1 = __niceevalCanonical["reuseContaminationMessage"];
7
- export { __niceevalExport1 as reuseContaminationMessage };
4
+ const __niceevalExport0 = __niceevalCanonical["detectReuseFailureClusters"];
5
+ export { __niceevalExport0 as detectReuseFailureClusters };
6
+ const __niceevalExport1 = __niceevalCanonical["reuseFailureClusterMessage"];
7
+ export { __niceevalExport1 as reuseFailureClusterMessage };
8
8
  //# sourceMappingURL=reuse-diagnostics.js.map
@@ -1,20 +1,29 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ProjectTargetReusePlanner = exports.EXECUTION_COMPARISON_SOURCE_STATES = exports.EXECUTION_COMPARISON_PROJECTION_STATE = exports.projectTargetPolicyIdentity = exports.PROJECT_TARGET_RECORD_IDENTITY_MAXIMUM_LENGTH = exports.PROJECT_TARGET_INVOCATION_ID_MAXIMUM_LENGTH = exports.PROJECT_TARGET_POLICY_VERSION = exports.PROJECT_TARGET_POLICY_NAME = void 0;
4
+ exports.mergeCurrentAssessmentRuns = mergeCurrentAssessmentRuns;
4
5
  exports.recordedAttemptVerdict = recordedAttemptVerdict;
5
6
  exports.validateProjectTargetReusePlanInput = validateProjectTargetReusePlanInput;
6
7
  exports.planProjectTargetReuse = planProjectTargetReuse;
7
8
  exports.planProjectTargetReuseWithoutSources = planProjectTargetReuseWithoutSources;
9
+ exports.assessCurrentTargetSlot = assessCurrentTargetSlot;
10
+ // @concord-file ne-runner-reuse-plan
11
+ // @concord-implements docs/feature/experiments/cache.md
12
+ // @concord-implements docs/feature/experiments/use-case/cache-explicit-rerun.md
13
+ // @concord-implements docs/feature/experiments/use-case/rerun-all.md
8
14
  const effect_1 = require("effect");
15
+ const errors_ts_1 = require("../record/reader/errors.cjs");
16
+ const identifiers_ts_1 = require("../record/codec/identifiers.cjs");
17
+ const core_ts_1 = require("../record/codec/core.cjs");
9
18
  const score_ts_1 = require("../eval/record/score.cjs");
10
19
  const rename_identity_ts_1 = require("./rename-identity.cjs");
11
20
  const catalog_ts_1 = require("../record/family/catalog.cjs");
12
21
  const eligibility_ts_1 = require("../eval/record/eligibility.cjs");
13
22
  const membership_provenance_ts_1 = require("../eval/record/membership-provenance.cjs");
14
23
  const verdict_ts_1 = require("../eval/record/verdict.cjs");
15
- const identifiers_ts_1 = require("../record/model/identifiers.cjs");
24
+ const identifiers_ts_2 = require("../record/model/identifiers.cjs");
16
25
  exports.PROJECT_TARGET_POLICY_NAME = "project-target";
17
- exports.PROJECT_TARGET_POLICY_VERSION = 1;
26
+ exports.PROJECT_TARGET_POLICY_VERSION = 2;
18
27
  exports.PROJECT_TARGET_INVOCATION_ID_MAXIMUM_LENGTH = 255;
19
28
  exports.PROJECT_TARGET_RECORD_IDENTITY_MAXIMUM_LENGTH = 4096;
20
29
  exports.projectTargetPolicyIdentity = Object.freeze({
@@ -33,6 +42,25 @@ exports.EXECUTION_COMPARISON_SOURCE_STATES = [
33
42
  ...membership_provenance_ts_1.COMPARISON_SOURCE_STATES,
34
43
  exports.EXECUTION_COMPARISON_PROJECTION_STATE.migrationRequired,
35
44
  ];
45
+ /** Both consumers retain every expected lifecycle position at one cutoff. */
46
+ function mergeCurrentAssessmentRuns(runs, resources) {
47
+ return effect_1.Effect.map(effect_1.Effect.forEach(resources, (resource) => {
48
+ const published = runs.find((run) => run.document.runId === resource.runId);
49
+ const lifecycle = Object.freeze({ state: resource.state, slots: resource.slots });
50
+ if (published !== undefined)
51
+ return effect_1.Effect.succeed(Object.freeze({ ...published, createdRevision: resource.createdRevision, lifecycle }));
52
+ return effect_1.Schema.decodeUnknownEffect(effect_1.Schema.Struct({
53
+ runId: identifiers_ts_1.RunIdSchema, experimentId: identifiers_ts_1.ExperimentIdSchema, startedAt: identifiers_ts_1.UtcMillisSchema,
54
+ expectedSlots: effect_1.Schema.Array(core_ts_1.RecordSlotIdentitySchema),
55
+ }))({
56
+ runId: resource.runId, experimentId: resource.experimentId, startedAt: Date.parse(resource.startedAt),
57
+ expectedSlots: resource.slots.map(({ publication: _publication, ...slot }) => slot),
58
+ }).pipe(effect_1.Effect.map((document) => Object.freeze({ createdRevision: resource.createdRevision, lifecycle, document, members: Object.freeze([]) })), effect_1.Effect.mapError(() => new errors_ts_1.RecordIntegrityFailure({ code: "record-integrity-failure", runId: resource.runId, reason: "core-invalid" })));
59
+ }, { concurrency: 1 }), (lifecycle) => Object.freeze([
60
+ ...lifecycle,
61
+ ...runs.filter((run) => !resources.some((resource) => resource.runId === run.document.runId)),
62
+ ]));
63
+ }
36
64
  /**
37
65
  * Fold the terminal Verdict from the source Attempt's immutable Core outcome
38
66
  * and its fixed Assertions facts. This is a projection, not a second durable
@@ -104,6 +132,8 @@ function validateProjectTargetReusePlanInput(input) {
104
132
  * Plans only from Record Host selection references. It neither reconstructs
105
133
  * attempt handles from strings nor reads private Record paths.
106
134
  */
135
+ // @concord-code ne-runner-plan-reuse
136
+ // @concord-implements docs/feature/experiments/cache.md
107
137
  function planProjectTargetReuse(input) {
108
138
  return effect_1.Effect.suspend(() => {
109
139
  const invalid = validateProjectTargetReusePlanInput(input);
@@ -112,15 +142,25 @@ function planProjectTargetReuse(input) {
112
142
  return effect_1.Effect.gen(function* () {
113
143
  const selection = yield* input.reader.selectRuns({ includePublishedActive: true });
114
144
  const readable = yield* effect_1.Effect.forEach(selection.runRefs, (ref) => input.reader.readRun(ref), { concurrency: 1 });
115
- const runs = [];
145
+ const publishedRuns = [];
116
146
  const coreIssues = [];
117
147
  for (const read of readable) {
118
148
  if (read.state === "available")
119
- runs.push(read.value);
149
+ publishedRuns.push(read.value);
120
150
  else if (read.state === "core-invalid")
121
151
  coreIssues.push(...read.issues);
122
152
  }
123
- const byRunId = new Map(runs.map((run) => [run.document.runId, run]));
153
+ const resources = [];
154
+ let afterRunId = "";
155
+ for (;;) {
156
+ const page = yield* input.reader.listRunResources({ afterRunId, pageSize: 100 });
157
+ resources.push(...page.runs);
158
+ if (page.nextAfterRunId === null)
159
+ break;
160
+ afterRunId = page.nextAfterRunId;
161
+ }
162
+ const runs = yield* mergeCurrentAssessmentRuns(publishedRuns, resources);
163
+ const byRunId = new Map(publishedRuns.map((run) => [run.document.runId, run]));
124
164
  const slots = [];
125
165
  for (const target of flattenTargetSlots(input.target)) {
126
166
  slots.push(yield* planTargetSlot({
@@ -170,6 +210,22 @@ function planProjectTargetReuseWithoutSources(input) {
170
210
  }
171
211
  exports.ProjectTargetReusePlanner = Object.freeze({ plan: planProjectTargetReuse });
172
212
  function planTargetSlot(input) {
213
+ return assessCurrentTargetSlot({
214
+ ...input,
215
+ readAttempt: (ref) => input.reader.readAttempt(ref).pipe(effect_1.Effect.map((read) => read.state !== "available" ? read : {
216
+ state: "available",
217
+ value: { ...read.value, publicationAvailable: read.value.ref.publicationIdentity !== undefined },
218
+ })),
219
+ readAssertions: (attempt) => input.reader.read(attempt.owner, catalog_ts_1.NiceEvalRecordAttachments.assertions),
220
+ readActivities: (attempt) => input.reader.read(attempt.owner, catalog_ts_1.NiceEvalRecordAttachments.runnerActivities.attempt),
221
+ sourceFor: (attempt, sourceBarrier) => {
222
+ if (!hasPublicationIdentity(attempt))
223
+ throw new Error("Expected a published Attempt");
224
+ return candidateFor({ target: input.target, sourceBarrier, attempt, byRunId: input.byRunId }).source;
225
+ },
226
+ });
227
+ }
228
+ function assessCurrentTargetSlot(input) {
173
229
  return effect_1.Effect.gen(function* () {
174
230
  if (input.target.reuseEligibility !== undefined) {
175
231
  return gapSlot(input.target, {
@@ -213,15 +269,18 @@ function planTargetSlot(input) {
213
269
  }
214
270
  const member = sourceRun.members.find((candidate) => candidate.document.slotId === expected.slotId);
215
271
  if (member === undefined || member.attempt === null) {
272
+ const publication = sourceRun.lifecycle?.slots.find((slot) => slot.slotId === expected.slotId)?.publication;
216
273
  return gapSlot(input.target, {
217
274
  reason: "source-member-missing",
218
275
  scope: "slot",
219
276
  issues: [],
220
277
  sourceBarrier,
221
- comparisons: [],
278
+ comparisons: publication?.state === "pending" || publication?.state === "absent"
279
+ ? [comparison("core", "attempt-outcome", "unavailable", "not-comparable", publication.state === "pending" ? "pending" : publication.reason)]
280
+ : [],
222
281
  });
223
282
  }
224
- const readAttempt = yield* input.reader.readAttempt(member.attempt);
283
+ const readAttempt = yield* input.readAttempt(member.attempt);
225
284
  if (readAttempt.state !== "available") {
226
285
  return gapSlot(input.target, {
227
286
  reason: "source-core-invalid",
@@ -231,7 +290,7 @@ function planTargetSlot(input) {
231
290
  comparisons: [],
232
291
  });
233
292
  }
234
- if (!hasPublicationIdentity(readAttempt.value)) {
293
+ if (!readAttempt.value.publicationAvailable) {
235
294
  return gapSlot(input.target, {
236
295
  reason: "source-publication-unavailable",
237
296
  scope: "slot",
@@ -240,13 +299,10 @@ function planTargetSlot(input) {
240
299
  comparisons: [],
241
300
  });
242
301
  }
243
- const candidateResolution = candidateFor({
244
- target: input.target,
245
- sourceBarrier,
246
- attempt: readAttempt.value,
247
- byRunId: input.byRunId,
248
- });
249
- if (candidateResolution === undefined) {
302
+ const document = readAttempt.value.document;
303
+ const originRun = input.byRunId.get(document.originRunId);
304
+ const originExpected = originRun?.document.expectedSlots.find((slot) => slot.slotId === document.slotId);
305
+ if (originExpected === undefined || document.evalId !== originExpected.evalId || document.executionIdentityDigest !== originExpected.executionIdentityDigest) {
250
306
  return gapSlot(input.target, {
251
307
  reason: "source-core-invalid",
252
308
  scope: "slot",
@@ -255,20 +311,21 @@ function planTargetSlot(input) {
255
311
  comparisons: [],
256
312
  });
257
313
  }
258
- const candidate = candidateResolution.source;
259
- const ordinaryIdentity = reusableSlotIdentityMatches({ target: input.target, sourceExpected: expected, originExpected: candidateResolution.originExpected });
314
+ const candidate = input.sourceFor(readAttempt.value, sourceBarrier);
315
+ const ordinaryIdentity = reusableSlotIdentityMatches({ target: input.target, sourceExpected: expected, originExpected });
260
316
  if (!ordinaryIdentity) {
261
317
  const originRun = input.byRunId.get(candidate.origin.runId);
262
318
  const pureRename = targetMatchesLogicalIdentity(input.target, expected) &&
263
- candidateResolution.originExpected.evalId === input.target.evalId &&
264
- candidateResolution.originExpected.attemptOrdinal === input.target.attempt &&
265
- (0, rename_identity_ts_1.executionDigestForExperiment)(input.target, originRun.document.experimentId) === candidateResolution.originExpected.executionIdentityDigest;
319
+ originExpected.evalId === input.target.evalId &&
320
+ originExpected.attemptOrdinal === input.target.attempt &&
321
+ (0, rename_identity_ts_1.executionDigestForExperiment)(input.target, originRun.document.experimentId) === originExpected.executionIdentityDigest;
266
322
  if (!pureRename)
267
323
  return gapSlot(input.target, {
268
324
  reason: "identity-mismatch", scope: "slot", issues: [], sourceBarrier, candidate,
269
325
  comparisons: [identityMismatchComparison()],
270
326
  });
271
- if (!(0, rename_identity_ts_1.hasProvenNoExperimentHooks)(sourceRun.document.context) ||
327
+ if (sourceRun.document.context === undefined || originRun.document.context === undefined ||
328
+ !(0, rename_identity_ts_1.hasProvenNoExperimentHooks)(sourceRun.document.context) ||
272
329
  !(0, rename_identity_ts_1.hasProvenNoExperimentHooks)(originRun.document.context))
273
330
  return gapSlot(input.target, {
274
331
  reason: "adoption-unproven", scope: "slot", issues: [], sourceBarrier, candidate, comparisons: [],
@@ -289,7 +346,7 @@ function planTargetSlot(input) {
289
346
  reason: "adoption-unproven", scope: "slot", issues: [], sourceBarrier, candidate, comparisons: [],
290
347
  });
291
348
  }
292
- const assertions = yield* input.reader.read(readAttempt.value.owner, catalog_ts_1.NiceEvalRecordAttachments.assertions);
349
+ const assertions = yield* input.readAssertions(readAttempt.value);
293
350
  if (assertions.state !== "available") {
294
351
  const problem = attachmentProblem(assertions);
295
352
  return gapSlot(input.target, {
@@ -318,6 +375,14 @@ function planTargetSlot(input) {
318
375
  ],
319
376
  });
320
377
  }
378
+ if (input.target.evaluationKind === "score") {
379
+ const score = (0, score_ts_1.foldRecordedAttemptScore)({ outcome: readAttempt.value.document.outcome, assertions: assertions.value });
380
+ if (effect_1.Result.isFailure(score) || score.success.state !== "complete")
381
+ return gapSlot(input.target, {
382
+ reason: "score-incomplete", scope: "slot", issues: [], sourceBarrier, candidate,
383
+ comparisons: [comparison("niceeval.assertions", "assertion-verdict", "available", "ineligible", "score-incomplete")],
384
+ });
385
+ }
321
386
  if (verdict !== "passed" && verdict !== "failed") {
322
387
  return gapSlot(input.target, {
323
388
  reason: "verdict-ineligible",
@@ -328,15 +393,7 @@ function planTargetSlot(input) {
328
393
  comparisons: [verdictComparison(verdict, "ineligible")],
329
394
  });
330
395
  }
331
- if (!ordinaryIdentity && input.target.evaluationKind === "score") {
332
- const score = (0, score_ts_1.foldRecordedAttemptScore)({ outcome: readAttempt.value.document.outcome, assertions: assertions.value });
333
- if (effect_1.Result.isFailure(score) || score.success.state !== "complete")
334
- return gapSlot(input.target, {
335
- reason: "verdict-ineligible", scope: "slot", issues: [], sourceBarrier, candidate,
336
- comparisons: [verdictComparison(verdict, "ineligible")],
337
- });
338
- }
339
- const activities = yield* input.reader.read(readAttempt.value.owner, catalog_ts_1.NiceEvalRecordAttachments.runnerActivities.attempt);
396
+ const activities = yield* input.readActivities(readAttempt.value);
340
397
  if (activities.state !== "available") {
341
398
  const problem = attachmentProblem(activities);
342
399
  return gapSlot(input.target, {
@@ -410,20 +467,15 @@ function planTargetSlot(input) {
410
467
  }
411
468
  function latestSourceRun(runs, target) {
412
469
  const candidates = runs.filter((run) => run.document.experimentId === target.experimentId
413
- && run.document.expectedSlots.some((slot) => slot.evalId === target.evalId));
470
+ // Execution refreshes may see their own already-created pending Run.
471
+ // Logical current targets have no Run identity and keep every barrier.
472
+ && (!("runId" in target) || run.document.runId !== target.runId)
473
+ && run.document.expectedSlots.some((slot) => slot.evalId === target.evalId && slot.attemptOrdinal === target.attempt));
414
474
  return candidates.sort((left, right) => {
415
- const a = left.createdRevision, b = right.createdRevision;
416
- if (a !== undefined && b !== undefined)
417
- return a - b || (0, identifiers_ts_1.compareCanonicalIdentity)(left.document.runId, right.document.runId);
418
- return compareReadableRuns(left, right);
475
+ const a = left.createdRevision ?? 0, b = right.createdRevision ?? 0;
476
+ return a - b || (0, identifiers_ts_2.compareCanonicalIdentity)(left.document.runId, right.document.runId);
419
477
  }).at(-1);
420
478
  }
421
- function compareReadableRuns(left, right) {
422
- if (left.document.startedAt !== right.document.startedAt) {
423
- return left.document.startedAt < right.document.startedAt ? -1 : 1;
424
- }
425
- return (0, identifiers_ts_1.compareCanonicalIdentity)(left.document.runId, right.document.runId);
426
- }
427
479
  function hasPublicationIdentity(attempt) {
428
480
  return attempt.ref.publicationIdentity !== undefined;
429
481
  }
@@ -463,7 +515,7 @@ function targetMatchesLogicalIdentity(target, slot) {
463
515
  && target.executionIdentityDigest === slot.executionIdentityDigest;
464
516
  }
465
517
  function targetMatchesSlotIdentity(target, slot) {
466
- return target.slotId === slot.slotId
518
+ return (!("slotId" in target) || target.slotId === slot.slotId)
467
519
  && target.evalId === slot.evalId
468
520
  && target.attempt === slot.attemptOrdinal
469
521
  && target.executionIdentityDigest === slot.executionIdentityDigest;
@@ -573,11 +625,11 @@ function isTargetRun(value) {
573
625
  return false;
574
626
  const run = value;
575
627
  return (typeof run.runId === "string"
576
- && (0, identifiers_ts_1.isPortableSegment)(run.runId)
628
+ && (0, identifiers_ts_2.isPortableSegment)(run.runId)
577
629
  && typeof run.experimentId === "string"
578
630
  && isBoundedRecordIdentity(run.experimentId)
579
631
  && typeof run.startedAt === "number"
580
- && (0, identifiers_ts_1.isUtcMillis)(run.startedAt)
632
+ && (0, identifiers_ts_2.isUtcMillis)(run.startedAt)
581
633
  && Array.isArray(run.slots));
582
634
  }
583
635
  function isTargetSlot(value) {
@@ -585,9 +637,9 @@ function isTargetSlot(value) {
585
637
  return false;
586
638
  const slot = value;
587
639
  return (typeof slot.runId === "string"
588
- && (0, identifiers_ts_1.isPortableSegment)(slot.runId)
640
+ && (0, identifiers_ts_2.isPortableSegment)(slot.runId)
589
641
  && typeof slot.slotId === "string"
590
- && (0, identifiers_ts_1.isPortableSegment)(slot.slotId)
642
+ && (0, identifiers_ts_2.isPortableSegment)(slot.slotId)
591
643
  && typeof slot.experimentId === "string"
592
644
  && isBoundedRecordIdentity(slot.experimentId)
593
645
  && typeof slot.evalId === "string"
@@ -599,7 +651,7 @@ function isTargetSlot(value) {
599
651
  && (slot.reuseEligibility === undefined
600
652
  || slot.reuseEligibility === "adapter-behavior-revision-required")
601
653
  && typeof slot.executionIdentityDigest === "string"
602
- && (0, identifiers_ts_1.isSha256Digest)(slot.executionIdentityDigest)
654
+ && (0, identifiers_ts_2.isSha256Digest)(slot.executionIdentityDigest)
603
655
  && isExecutionIdentity(slot.inputIdentity)
604
656
  && isExecutionIdentity(slot.configIdentity)
605
657
  && (slot.timeout === undefined || isExecutionDurationLimit(slot.timeout)));