niceeval 0.13.1 → 0.13.2

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 (548) hide show
  1. package/INDEX.md +25 -2
  2. package/README.md +9 -10
  3. package/README.zh.md +9 -10
  4. package/dist/agents/ai-sdk.cjs.map +1 -1
  5. package/dist/agents/ai-sdk.d.cts +1 -1
  6. package/dist/agents/ai-sdk.d.mts +1 -1
  7. package/dist/agents/ai-sdk.d.ts +1 -1
  8. package/dist/agents/bub-install-spec.cjs +19 -5
  9. package/dist/agents/bub-install-spec.cjs.map +1 -1
  10. package/dist/agents/bub-install-spec.d.cts +9 -2
  11. package/dist/agents/bub-install-spec.d.mts +9 -2
  12. package/dist/agents/bub-install-spec.d.ts +9 -2
  13. package/dist/agents/bub-install-spec.js +14 -12
  14. package/dist/agents/bub.cjs +10 -6
  15. package/dist/agents/bub.cjs.map +1 -1
  16. package/dist/agents/bub.d.cts +2 -2
  17. package/dist/agents/bub.d.mts +2 -2
  18. package/dist/agents/bub.d.ts +2 -2
  19. package/dist/agents/claude-code.cjs.map +1 -1
  20. package/dist/agents/claude-code.d.cts +2 -2
  21. package/dist/agents/claude-code.d.mts +2 -2
  22. package/dist/agents/claude-code.d.ts +2 -2
  23. package/dist/agents/codex.cjs +4 -4
  24. package/dist/agents/codex.cjs.map +1 -1
  25. package/dist/agents/codex.d.cts +3 -3
  26. package/dist/agents/codex.d.mts +3 -3
  27. package/dist/agents/codex.d.ts +3 -3
  28. package/dist/agents/coding-cli-versions.cjs +10 -1
  29. package/dist/agents/coding-cli-versions.cjs.map +1 -1
  30. package/dist/agents/coding-cli-versions.d.cts +8 -3
  31. package/dist/agents/coding-cli-versions.d.mts +8 -3
  32. package/dist/agents/coding-cli-versions.d.ts +8 -3
  33. package/dist/agents/coding-cli-versions.js +18 -12
  34. package/dist/agents/deepseek-harness.cjs +151 -0
  35. package/dist/agents/deepseek-harness.cjs.map +1 -0
  36. package/dist/agents/deepseek-harness.d.cts +14 -0
  37. package/dist/agents/deepseek-harness.d.mts +14 -0
  38. package/dist/agents/deepseek-harness.d.ts +14 -0
  39. package/dist/agents/deepseek-harness.js +7 -0
  40. package/dist/agents/deepseek-harness.js.map +1 -0
  41. package/dist/agents/exact-npm-plugins.cjs +28 -0
  42. package/dist/agents/exact-npm-plugins.cjs.map +1 -0
  43. package/dist/agents/exact-npm-plugins.d.cts +10 -0
  44. package/dist/agents/exact-npm-plugins.d.mts +10 -0
  45. package/dist/agents/exact-npm-plugins.d.ts +10 -0
  46. package/dist/agents/exact-npm-plugins.js +8 -0
  47. package/dist/agents/exact-npm-plugins.js.map +1 -0
  48. package/dist/agents/index.cjs +5 -1
  49. package/dist/agents/index.cjs.map +1 -1
  50. package/dist/agents/index.d.cts +4 -0
  51. package/dist/agents/index.d.mts +4 -0
  52. package/dist/agents/index.d.ts +4 -0
  53. package/dist/agents/index.js +54 -50
  54. package/dist/agents/index.mjs +54 -50
  55. package/dist/agents/omp.cjs +170 -0
  56. package/dist/agents/omp.cjs.map +1 -0
  57. package/dist/agents/omp.d.cts +14 -0
  58. package/dist/agents/omp.d.mts +14 -0
  59. package/dist/agents/omp.d.ts +14 -0
  60. package/dist/agents/omp.js +7 -0
  61. package/dist/agents/omp.js.map +1 -0
  62. package/dist/agents/openclaw.cjs +51 -2
  63. package/dist/agents/openclaw.cjs.map +1 -1
  64. package/dist/agents/openclaw.d.cts +2 -0
  65. package/dist/agents/openclaw.d.mts +2 -0
  66. package/dist/agents/openclaw.d.ts +2 -0
  67. package/dist/agents/types.cjs.map +1 -1
  68. package/dist/agents/types.d.cts +4 -4
  69. package/dist/agents/types.d.mts +4 -4
  70. package/dist/agents/types.d.ts +4 -4
  71. package/dist/agents/ui-message-stream.cjs +24 -7
  72. package/dist/agents/ui-message-stream.cjs.map +1 -1
  73. package/dist/analysis/api.cjs +28 -2
  74. package/dist/analysis/api.cjs.map +1 -1
  75. package/dist/analysis/api.d.cts +22 -1
  76. package/dist/analysis/api.d.mts +22 -1
  77. package/dist/analysis/api.d.ts +22 -1
  78. package/dist/analysis/api.js +8 -6
  79. package/dist/analysis/bindings.cjs +11 -18
  80. package/dist/analysis/bindings.cjs.map +1 -1
  81. package/dist/analysis/bindings.d.cts +177 -49
  82. package/dist/analysis/bindings.d.mts +177 -49
  83. package/dist/analysis/bindings.d.ts +177 -49
  84. package/dist/analysis/contracts.cjs +1 -0
  85. package/dist/analysis/contracts.cjs.map +1 -1
  86. package/dist/analysis/contracts.d.cts +43 -3
  87. package/dist/analysis/contracts.d.mts +43 -3
  88. package/dist/analysis/contracts.d.ts +43 -3
  89. package/dist/analysis/cost-projection.cjs +2 -1
  90. package/dist/analysis/cost-projection.cjs.map +1 -1
  91. package/dist/analysis/cost-projection.d.cts +1 -1
  92. package/dist/analysis/cost-projection.d.mts +1 -1
  93. package/dist/analysis/cost-projection.d.ts +1 -1
  94. package/dist/analysis/cost.cjs +13 -3
  95. package/dist/analysis/cost.cjs.map +1 -1
  96. package/dist/analysis/cost.d.cts +10 -3
  97. package/dist/analysis/cost.d.mts +10 -3
  98. package/dist/analysis/cost.d.ts +10 -3
  99. package/dist/analysis/experiment-groups.cjs +96 -0
  100. package/dist/analysis/experiment-groups.cjs.map +1 -0
  101. package/dist/analysis/experiment-groups.d.cts +9 -0
  102. package/dist/analysis/experiment-groups.d.mts +9 -0
  103. package/dist/analysis/experiment-groups.d.ts +9 -0
  104. package/dist/analysis/experiment-groups.js +10 -0
  105. package/dist/analysis/experiment-groups.js.map +1 -0
  106. package/dist/analysis/index.cjs +4 -1
  107. package/dist/analysis/index.cjs.map +1 -1
  108. package/dist/analysis/index.d.cts +4 -2
  109. package/dist/analysis/index.d.mts +4 -2
  110. package/dist/analysis/index.d.ts +4 -2
  111. package/dist/analysis/index.js +40 -36
  112. package/dist/analysis/index.mjs +40 -36
  113. package/dist/assertions/limits.cjs +4 -0
  114. package/dist/assertions/limits.cjs.map +1 -1
  115. package/dist/assertions/limits.d.cts +4 -0
  116. package/dist/assertions/limits.d.mts +4 -0
  117. package/dist/assertions/limits.d.ts +4 -0
  118. package/dist/assertions/match.cjs +63 -25
  119. package/dist/assertions/match.cjs.map +1 -1
  120. package/dist/assertions/match.d.cts +7 -0
  121. package/dist/assertions/match.d.mts +7 -0
  122. package/dist/assertions/match.d.ts +7 -0
  123. package/dist/assertions/record/attachment.cjs +32 -4
  124. package/dist/assertions/record/attachment.cjs.map +1 -1
  125. package/dist/assertions/record/diff.cjs +10 -4
  126. package/dist/assertions/record/diff.cjs.map +1 -1
  127. package/dist/assertions/record/producer.cjs +101 -4
  128. package/dist/assertions/record/producer.cjs.map +1 -1
  129. package/dist/assertions/record/producer.d.cts +4 -1
  130. package/dist/assertions/record/producer.d.mts +4 -1
  131. package/dist/assertions/record/producer.d.ts +4 -1
  132. package/dist/assertions/runtime.cjs +45 -5
  133. package/dist/assertions/runtime.cjs.map +1 -1
  134. package/dist/cli/record.cjs +113 -8
  135. package/dist/cli/record.cjs.map +1 -1
  136. package/dist/cli/record.d.cts +20 -1
  137. package/dist/cli/record.d.mts +20 -1
  138. package/dist/cli/record.d.ts +20 -1
  139. package/dist/cli/record.js +4 -2
  140. package/dist/cli.cjs +386 -31
  141. package/dist/cli.cjs.map +1 -1
  142. package/dist/cli.d.cts +10 -2
  143. package/dist/cli.d.mts +10 -2
  144. package/dist/cli.d.ts +10 -2
  145. package/dist/context/send-retry.cjs +4 -4
  146. package/dist/context/send-retry.cjs.map +1 -1
  147. package/dist/coordination/host/runtime.cjs +8 -30
  148. package/dist/coordination/host/runtime.cjs.map +1 -1
  149. package/dist/coordination/host/runtime.d.cts +3 -3
  150. package/dist/coordination/host/runtime.d.mts +3 -3
  151. package/dist/coordination/host/runtime.d.ts +3 -3
  152. package/dist/coordination/host/types.cjs.map +1 -1
  153. package/dist/coordination/host/types.d.cts +0 -5
  154. package/dist/coordination/host/types.d.mts +0 -5
  155. package/dist/coordination/host/types.d.ts +0 -5
  156. package/dist/coordination/platform/node.cjs +90 -9
  157. package/dist/coordination/platform/node.cjs.map +1 -1
  158. package/dist/define.cjs +25 -1
  159. package/dist/define.cjs.map +1 -1
  160. package/dist/experiment/host/index.cjs +1 -0
  161. package/dist/experiment/host/index.cjs.map +1 -1
  162. package/dist/i18n/en.cjs +26 -8
  163. package/dist/i18n/en.cjs.map +1 -1
  164. package/dist/i18n/en.d.cts +19 -6
  165. package/dist/i18n/en.d.mts +19 -6
  166. package/dist/i18n/en.d.ts +19 -6
  167. package/dist/index.cjs.map +1 -1
  168. package/dist/index.d.cts +1 -1
  169. package/dist/index.d.mts +1 -1
  170. package/dist/index.d.ts +1 -1
  171. package/dist/o11y/parsers/hermes.cjs +1 -1
  172. package/dist/o11y/parsers/hermes.cjs.map +1 -1
  173. package/dist/o11y/prices.json +1 -1
  174. package/dist/o11y/record/families.cjs +12 -3
  175. package/dist/o11y/record/families.cjs.map +1 -1
  176. package/dist/o11y/record/families.d.cts +8 -8
  177. package/dist/o11y/record/families.d.mts +8 -8
  178. package/dist/o11y/record/families.d.ts +8 -8
  179. package/dist/o11y/record/family-projectors.d.cts +66 -18
  180. package/dist/o11y/record/family-projectors.d.mts +66 -18
  181. package/dist/o11y/record/family-projectors.d.ts +66 -18
  182. package/dist/o11y/record/family-writers.d.cts +11 -3
  183. package/dist/o11y/record/family-writers.d.mts +11 -3
  184. package/dist/o11y/record/family-writers.d.ts +11 -3
  185. package/dist/o11y/record/runner-producer.cjs +14 -4
  186. package/dist/o11y/record/runner-producer.cjs.map +1 -1
  187. package/dist/record/codec/core.d.cts +2 -2
  188. package/dist/record/codec/core.d.mts +2 -2
  189. package/dist/record/codec/core.d.ts +2 -2
  190. package/dist/record/family/catalog.d.cts +44 -12
  191. package/dist/record/family/catalog.d.mts +44 -12
  192. package/dist/record/family/catalog.d.ts +44 -12
  193. package/dist/record/family/index.js +128 -124
  194. package/dist/record/family/observability-v1.cjs +35 -0
  195. package/dist/record/family/observability-v1.cjs.map +1 -0
  196. package/dist/record/family/observability-v1.d.cts +3 -0
  197. package/dist/record/family/observability-v1.d.mts +3 -0
  198. package/dist/record/family/observability-v1.d.ts +3 -0
  199. package/dist/record/family/observability-v1.js +6 -0
  200. package/dist/record/family/observability-v1.js.map +1 -0
  201. package/dist/record/family/observability.cjs +58 -9
  202. package/dist/record/family/observability.cjs.map +1 -1
  203. package/dist/record/family/observability.d.cts +1014 -15
  204. package/dist/record/family/observability.d.mts +1014 -15
  205. package/dist/record/family/observability.d.ts +1014 -15
  206. package/dist/record/family/observability.js +22 -18
  207. package/dist/record/host/runtime.cjs +600 -31
  208. package/dist/record/host/runtime.cjs.map +1 -1
  209. package/dist/record/host/types.cjs.map +1 -1
  210. package/dist/record/host/types.d.cts +33 -9
  211. package/dist/record/host/types.d.mts +33 -9
  212. package/dist/record/host/types.d.ts +33 -9
  213. package/dist/record/maintenance/runtime.cjs +1 -2
  214. package/dist/record/maintenance/runtime.cjs.map +1 -1
  215. package/dist/record/model/core.cjs.map +1 -1
  216. package/dist/record/model/core.d.cts +1 -1
  217. package/dist/record/model/core.d.mts +1 -1
  218. package/dist/record/model/core.d.ts +1 -1
  219. package/dist/record/model/definition.d.cts +6 -6
  220. package/dist/record/model/definition.d.mts +6 -6
  221. package/dist/record/model/definition.d.ts +6 -6
  222. package/dist/record/model/identifiers.cjs +1 -1
  223. package/dist/record/model/identifiers.cjs.map +1 -1
  224. package/dist/record/model/identifiers.d.cts +1 -1
  225. package/dist/record/model/identifiers.d.mts +1 -1
  226. package/dist/record/model/identifiers.d.ts +1 -1
  227. package/dist/record/platform/node.cjs +159 -23
  228. package/dist/record/platform/node.cjs.map +1 -1
  229. package/dist/record/platform/services.cjs.map +1 -1
  230. package/dist/record/platform/services.d.cts +15 -2
  231. package/dist/record/platform/services.d.mts +15 -2
  232. package/dist/record/platform/services.d.ts +15 -2
  233. package/dist/record/reader/errors.cjs +37 -1
  234. package/dist/record/reader/errors.cjs.map +1 -1
  235. package/dist/record/reader/errors.d.cts +49 -1
  236. package/dist/record/reader/errors.d.mts +49 -1
  237. package/dist/record/reader/errors.d.ts +49 -1
  238. package/dist/record/reader/errors.js +22 -12
  239. package/dist/record/reader/format.cjs +76 -17
  240. package/dist/record/reader/format.cjs.map +1 -1
  241. package/dist/record/reader/format.d.cts +11 -4
  242. package/dist/record/reader/format.d.mts +11 -4
  243. package/dist/record/reader/format.d.ts +11 -4
  244. package/dist/record/reader/format.js +2 -0
  245. package/dist/record/reader/index.js +32 -18
  246. package/dist/record/reader/runtime.cjs +64 -0
  247. package/dist/record/reader/runtime.cjs.map +1 -1
  248. package/dist/record/reader/runtime.d.cts +15 -0
  249. package/dist/record/reader/runtime.d.mts +15 -0
  250. package/dist/record/reader/runtime.d.ts +15 -0
  251. package/dist/record/reader/runtime.js +2 -0
  252. package/dist/report/assets/styles.css +53 -29
  253. package/dist/report/built-in/analysis-values.cjs +21 -13
  254. package/dist/report/built-in/analysis-values.cjs.map +1 -1
  255. package/dist/report/built-in/analysis-values.d.cts +11 -22
  256. package/dist/report/built-in/analysis-values.d.mts +11 -22
  257. package/dist/report/built-in/analysis-values.d.ts +11 -22
  258. package/dist/report/built-in/analysis-values.js +4 -6
  259. package/dist/report/built-in/index.cjs +1 -3
  260. package/dist/report/built-in/index.cjs.map +1 -1
  261. package/dist/report/built-in/index.d.cts +1 -1
  262. package/dist/report/built-in/index.d.mts +1 -1
  263. package/dist/report/built-in/index.d.ts +1 -1
  264. package/dist/report/built-in/index.js +4 -8
  265. package/dist/report/built-in/index.mjs +4 -8
  266. package/dist/report/built-in/machine.cjs +0 -2
  267. package/dist/report/built-in/machine.cjs.map +1 -1
  268. package/dist/report/built-in/machine.d.cts +0 -2
  269. package/dist/report/built-in/machine.d.mts +0 -2
  270. package/dist/report/built-in/machine.d.ts +0 -2
  271. package/dist/report/built-in/result-components.cjs +49 -51
  272. package/dist/report/built-in/result-components.cjs.map +1 -1
  273. package/dist/report/built-in/result-components.d.cts +16 -17
  274. package/dist/report/built-in/result-components.d.mts +16 -17
  275. package/dist/report/built-in/result-components.d.ts +16 -17
  276. package/dist/report/built-in/result-components.js +0 -4
  277. package/dist/report/built-in/run-membership-overview.cjs +126 -17
  278. package/dist/report/built-in/run-membership-overview.cjs.map +1 -1
  279. package/dist/report/built-in/run-membership-overview.d.cts +14 -0
  280. package/dist/report/built-in/run-membership-overview.d.mts +14 -0
  281. package/dist/report/built-in/run-membership-overview.d.ts +14 -0
  282. package/dist/report/built-in/run-membership-overview.js +4 -2
  283. package/dist/report/built-in/standard.cjs +80 -45
  284. package/dist/report/built-in/standard.cjs.map +1 -1
  285. package/dist/report/built-in/standard.d.cts +19 -41
  286. package/dist/report/built-in/standard.d.mts +19 -41
  287. package/dist/report/built-in/standard.d.ts +19 -41
  288. package/dist/report/built-in/standard.js +6 -6
  289. package/dist/report/components/attempt-detail/compute.cjs +78 -2
  290. package/dist/report/components/attempt-detail/compute.cjs.map +1 -1
  291. package/dist/report/components/attempt-detail/compute.d.cts +1 -1
  292. package/dist/report/components/attempt-detail/compute.d.mts +1 -1
  293. package/dist/report/components/attempt-detail/compute.d.ts +1 -1
  294. package/dist/report/components/attempt-detail/content.cjs +1 -1
  295. package/dist/report/components/attempt-detail/content.cjs.map +1 -1
  296. package/dist/report/components/entity-lists/compute.cjs +42 -5
  297. package/dist/report/components/entity-lists/compute.cjs.map +1 -1
  298. package/dist/report/components/entity-lists/compute.d.cts +10 -8
  299. package/dist/report/components/entity-lists/compute.d.mts +10 -8
  300. package/dist/report/components/entity-lists/compute.d.ts +10 -8
  301. package/dist/report/components/entity-lists/content.cjs +31 -6
  302. package/dist/report/components/entity-lists/content.cjs.map +1 -1
  303. package/dist/report/components/entity-lists/index.cjs +9 -4
  304. package/dist/report/components/entity-lists/index.cjs.map +1 -1
  305. package/dist/report/components/entity-lists/index.d.cts +4 -7
  306. package/dist/report/components/entity-lists/index.d.mts +4 -7
  307. package/dist/report/components/entity-lists/index.d.ts +4 -7
  308. package/dist/report/components/summaries/compute.cjs +8 -1
  309. package/dist/report/components/summaries/compute.cjs.map +1 -1
  310. package/dist/report/components/summaries/compute.d.cts +9 -1
  311. package/dist/report/components/summaries/compute.d.mts +9 -1
  312. package/dist/report/components/summaries/compute.d.ts +9 -1
  313. package/dist/report/components/summaries/index.cjs +48 -4
  314. package/dist/report/components/summaries/index.cjs.map +1 -1
  315. package/dist/report/components/summaries/index.d.cts +7 -4
  316. package/dist/report/components/summaries/index.d.mts +7 -4
  317. package/dist/report/components/summaries/index.d.ts +7 -4
  318. package/dist/report/definition/cell.cjs +3 -0
  319. package/dist/report/definition/cell.cjs.map +1 -1
  320. package/dist/report/definition/cell.d.cts +2 -0
  321. package/dist/report/definition/cell.d.mts +2 -0
  322. package/dist/report/definition/cell.d.ts +2 -0
  323. package/dist/report/definition/primitives/chart.cjs +8 -5
  324. package/dist/report/definition/primitives/chart.cjs.map +1 -1
  325. package/dist/report/definition/primitives/points-dataset.cjs +1 -0
  326. package/dist/report/definition/primitives/points-dataset.cjs.map +1 -1
  327. package/dist/report/definition/primitives.cjs +15 -2
  328. package/dist/report/definition/primitives.cjs.map +1 -1
  329. package/dist/report/definition/report.cjs +27 -3
  330. package/dist/report/definition/report.cjs.map +1 -1
  331. package/dist/report/definition/report.d.cts +8 -0
  332. package/dist/report/definition/report.d.mts +8 -0
  333. package/dist/report/definition/report.d.ts +8 -0
  334. package/dist/report/execution/machine.cjs +30 -14
  335. package/dist/report/execution/machine.cjs.map +1 -1
  336. package/dist/report/execution/machine.d.cts +20 -10
  337. package/dist/report/execution/machine.d.mts +20 -10
  338. package/dist/report/execution/machine.d.ts +20 -10
  339. package/dist/report/execution/machine.js +6 -6
  340. package/dist/report/host/execute.cjs +25 -16
  341. package/dist/report/host/execute.cjs.map +1 -1
  342. package/dist/report/host/execute.d.cts +4 -0
  343. package/dist/report/host/execute.d.mts +4 -0
  344. package/dist/report/host/execute.d.ts +4 -0
  345. package/dist/report/host/from-record.cjs +22 -5
  346. package/dist/report/host/from-record.cjs.map +1 -1
  347. package/dist/report/host/machine.cjs +53 -11
  348. package/dist/report/host/machine.cjs.map +1 -1
  349. package/dist/report/host/site-runtime.cjs +9 -8
  350. package/dist/report/host/site-runtime.cjs.map +1 -1
  351. package/dist/report/host/site-runtime.d.cts +1 -1
  352. package/dist/report/host/site-runtime.d.mts +1 -1
  353. package/dist/report/host/site-runtime.d.ts +1 -1
  354. package/dist/report/host/static.cjs +56 -9
  355. package/dist/report/host/static.cjs.map +1 -1
  356. package/dist/report/index.cjs.map +1 -1
  357. package/dist/report/index.d.cts +1 -1
  358. package/dist/report/index.d.mts +1 -1
  359. package/dist/report/index.d.ts +1 -1
  360. package/dist/report/model/dataset.cjs +7 -2
  361. package/dist/report/model/dataset.cjs.map +1 -1
  362. package/dist/report/model/locale.cjs +2 -0
  363. package/dist/report/model/locale.cjs.map +1 -1
  364. package/dist/report/model/locale.d.cts +1 -0
  365. package/dist/report/model/locale.d.mts +1 -0
  366. package/dist/report/model/locale.d.ts +1 -0
  367. package/dist/report/model/metrics.cjs +3 -1
  368. package/dist/report/model/metrics.cjs.map +1 -1
  369. package/dist/report/model/pricing.cjs +16 -11
  370. package/dist/report/model/pricing.cjs.map +1 -1
  371. package/dist/report/react/styles.css +53 -29
  372. package/dist/runner/adoption.cjs +1 -0
  373. package/dist/runner/adoption.cjs.map +1 -1
  374. package/dist/runner/attempt.cjs +44 -5
  375. package/dist/runner/attempt.cjs.map +1 -1
  376. package/dist/runner/attempt.d.cts +13 -1
  377. package/dist/runner/attempt.d.mts +13 -1
  378. package/dist/runner/attempt.d.ts +13 -1
  379. package/dist/runner/config-identity.cjs +10 -2
  380. package/dist/runner/config-identity.cjs.map +1 -1
  381. package/dist/runner/config-identity.d.cts +4 -2
  382. package/dist/runner/config-identity.d.mts +4 -2
  383. package/dist/runner/config-identity.d.ts +4 -2
  384. package/dist/runner/feedback/human.cjs +298 -59
  385. package/dist/runner/feedback/human.cjs.map +1 -1
  386. package/dist/runner/feedback/json.cjs +14 -6
  387. package/dist/runner/feedback/json.cjs.map +1 -1
  388. package/dist/runner/feedback/json.d.cts +3 -2
  389. package/dist/runner/feedback/json.d.mts +3 -2
  390. package/dist/runner/feedback/json.d.ts +3 -2
  391. package/dist/runner/feedback/reducer.cjs +2 -0
  392. package/dist/runner/feedback/reducer.cjs.map +1 -1
  393. package/dist/runner/judge-config.cjs +1 -1
  394. package/dist/runner/judge-config.cjs.map +1 -1
  395. package/dist/runner/ledger.cjs +124 -12
  396. package/dist/runner/ledger.cjs.map +1 -1
  397. package/dist/runner/project-current.cjs +13 -5
  398. package/dist/runner/project-current.cjs.map +1 -1
  399. package/dist/runner/run.cjs +564 -256
  400. package/dist/runner/run.cjs.map +1 -1
  401. package/dist/runner/sandbox-pool.cjs +161 -30
  402. package/dist/runner/sandbox-pool.cjs.map +1 -1
  403. package/dist/runner/sandbox-pool.d.cts +34 -2
  404. package/dist/runner/sandbox-pool.d.mts +34 -2
  405. package/dist/runner/sandbox-pool.d.ts +34 -2
  406. package/dist/runner/shared-state-lease.cjs +803 -0
  407. package/dist/runner/shared-state-lease.cjs.map +1 -0
  408. package/dist/runner/shared-state-lease.d.cts +121 -0
  409. package/dist/runner/shared-state-lease.d.mts +121 -0
  410. package/dist/runner/shared-state-lease.d.ts +121 -0
  411. package/dist/runner/shared-state-lease.js +24 -0
  412. package/dist/runner/shared-state-lease.js.map +1 -0
  413. package/dist/runner/teardown-registry.cjs +97 -34
  414. package/dist/runner/teardown-registry.cjs.map +1 -1
  415. package/dist/runner/teardown-registry.d.cts +27 -1
  416. package/dist/runner/teardown-registry.d.mts +27 -1
  417. package/dist/runner/teardown-registry.d.ts +27 -1
  418. package/dist/runner/teardown-registry.js +20 -16
  419. package/dist/runner/types.cjs.map +1 -1
  420. package/dist/runner/types.d.cts +31 -5
  421. package/dist/runner/types.d.mts +31 -5
  422. package/dist/runner/types.d.ts +31 -5
  423. package/dist/sample/analysis.cjs +249 -459
  424. package/dist/sample/analysis.cjs.map +1 -1
  425. package/dist/sample/capability.cjs +138 -7
  426. package/dist/sample/capability.cjs.map +1 -1
  427. package/dist/sample/capability.d.cts +3 -1
  428. package/dist/sample/capability.d.mts +3 -1
  429. package/dist/sample/capability.d.ts +3 -1
  430. package/dist/sample/capability.js +8 -6
  431. package/dist/sandbox/docker-agent-image.cjs +5 -1
  432. package/dist/sandbox/docker-agent-image.cjs.map +1 -1
  433. package/dist/sandbox/docker-agent-image.d.cts +2 -0
  434. package/dist/sandbox/docker-agent-image.d.mts +2 -0
  435. package/dist/sandbox/docker-agent-image.d.ts +2 -0
  436. package/dist/sandbox/docker-agent-image.js +14 -10
  437. package/dist/sandbox/docker-profile/schema.cjs +283 -534
  438. package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
  439. package/dist/sandbox/docker-profile/schema.d.cts +10 -27
  440. package/dist/sandbox/docker-profile/schema.d.mts +10 -27
  441. package/dist/sandbox/docker-profile/schema.d.ts +10 -27
  442. package/dist/sandbox/e2b-agent-template.cjs +5 -2
  443. package/dist/sandbox/e2b-agent-template.cjs.map +1 -1
  444. package/dist/sandbox/index.cjs +4 -2
  445. package/dist/sandbox/index.cjs.map +1 -1
  446. package/dist/sandbox/index.d.cts +1 -1
  447. package/dist/sandbox/index.d.mts +1 -1
  448. package/dist/sandbox/index.d.ts +1 -1
  449. package/dist/sandbox/index.js +120 -116
  450. package/dist/sandbox/index.mjs +120 -116
  451. package/dist/sandbox/keep-registry.cjs +28 -66
  452. package/dist/sandbox/keep-registry.cjs.map +1 -1
  453. package/dist/sandbox/types.cjs.map +1 -1
  454. package/dist/sandbox/types.d.cts +1 -1
  455. package/dist/sandbox/types.d.mts +1 -1
  456. package/dist/sandbox/types.d.ts +1 -1
  457. package/dist/shared/aggregate.cjs +16 -6
  458. package/dist/shared/aggregate.cjs.map +1 -1
  459. package/dist/shared/aggregate.d.cts +12 -4
  460. package/dist/shared/aggregate.d.mts +12 -4
  461. package/dist/shared/aggregate.d.ts +12 -4
  462. package/dist/shared/turn-label.cjs +20 -2
  463. package/dist/shared/turn-label.cjs.map +1 -1
  464. package/dist/shared/turn-label.d.cts +2 -0
  465. package/dist/shared/turn-label.d.mts +2 -0
  466. package/dist/shared/turn-label.d.ts +2 -0
  467. package/dist/shared/turn-label.js +4 -2
  468. package/dist/vendor/remark/remark-gfm.cjs +7 -7
  469. package/dist/vendor/remark/remark-gfm.cjs.map +1 -1
  470. package/dist/vendor/remark/remark-parse.cjs +12 -12
  471. package/dist/vendor/remark/remark-parse.cjs.map +1 -1
  472. package/dist/vendor/remark/remark.cjs +13 -13
  473. package/dist/vendor/remark/remark.cjs.map +1 -1
  474. package/dist/view/server.cjs +6 -0
  475. package/dist/view/server.cjs.map +1 -1
  476. package/docs-site/images/hitl-handshake-zh.svg +3 -3
  477. package/docs-site/zh/examples/ai-agent-application.mdx +1 -1
  478. package/docs-site/zh/examples/coding-agent-extensions.mdx +1 -1
  479. package/docs-site/zh/examples/integrations/ai-sdk-v7.mdx +4 -3
  480. package/docs-site/zh/examples/integrations/claude-sdk.mdx +3 -3
  481. package/docs-site/zh/examples/integrations/codex-sdk.mdx +5 -5
  482. package/docs-site/zh/examples/integrations/langgraph.mdx +4 -4
  483. package/docs-site/zh/examples/integrations/pi-sdk.mdx +5 -5
  484. package/docs-site/zh/explanation/adapter.mdx +5 -5
  485. package/docs-site/zh/explanation/assert.mdx +7 -7
  486. package/docs-site/zh/explanation/drive.mdx +4 -2
  487. package/docs-site/zh/explanation/evals.mdx +10 -8
  488. package/docs-site/zh/explanation/experiment.mdx +2 -2
  489. package/docs-site/zh/explanation/hitl.mdx +9 -9
  490. package/docs-site/zh/explanation/judge.mdx +5 -5
  491. package/docs-site/zh/explanation/overview.mdx +3 -3
  492. package/docs-site/zh/explanation/runner.mdx +1 -1
  493. package/docs-site/zh/index.mdx +3 -3
  494. package/docs-site/zh/reference/builtin-agents.mdx +13 -13
  495. package/docs-site/zh/reference/capabilities.mdx +1 -1
  496. package/docs-site/zh/reference/cli.mdx +18 -12
  497. package/docs-site/zh/reference/define-agent.mdx +130 -5
  498. package/docs-site/zh/reference/define-config.mdx +2 -2
  499. package/docs-site/zh/reference/define-eval.mdx +4 -4
  500. package/docs-site/zh/reference/events.mdx +11 -11
  501. package/docs-site/zh/reference/official-adapters.mdx +6 -6
  502. package/docs-site/zh/reference/results-data.mdx +6 -0
  503. package/docs-site/zh/troubleshooting/debugging.mdx +1 -1
  504. package/docs-site/zh/troubleshooting/recover-after-kill.mdx +37 -5
  505. package/docs-site/zh/tutorials/accept-results.mdx +72 -0
  506. package/docs-site/zh/tutorials/agent-onboarding.mdx +6 -6
  507. package/docs-site/zh/tutorials/authoring.mdx +9 -13
  508. package/docs-site/zh/tutorials/ci-integration.mdx +6 -6
  509. package/docs-site/zh/tutorials/compare-runs.mdx +61 -0
  510. package/docs-site/zh/tutorials/concurrency.mdx +13 -12
  511. package/docs-site/zh/tutorials/configuration.mdx +4 -6
  512. package/docs-site/zh/tutorials/connect-your-agent.mdx +1 -1
  513. package/docs-site/zh/tutorials/control-run-cost.mdx +58 -0
  514. package/docs-site/zh/tutorials/criteria-files.mdx +2 -2
  515. package/docs-site/zh/tutorials/custom-reports.mdx +2 -2
  516. package/docs-site/zh/tutorials/debug-lifecycle-plan.mdx +46 -0
  517. package/docs-site/zh/tutorials/docker-in-docker.mdx +52 -43
  518. package/docs-site/zh/tutorials/eval-groups.mdx +6 -6
  519. package/docs-site/zh/tutorials/evaluation-kinds.mdx +3 -3
  520. package/docs-site/zh/tutorials/experiments.mdx +2 -3
  521. package/docs-site/zh/tutorials/handle-execution-failures.mdx +18 -10
  522. package/docs-site/zh/tutorials/install-custom-sandbox-agent.mdx +16 -8
  523. package/docs-site/zh/tutorials/nixos-managed-dind.mdx +160 -0
  524. package/docs-site/zh/tutorials/plugins.mdx +14 -0
  525. package/docs-site/zh/tutorials/rerun-and-cache.mdx +4 -2
  526. package/docs-site/zh/tutorials/sandbox-agent.mdx +17 -11
  527. package/docs-site/zh/tutorials/sandbox-providers.mdx +17 -13
  528. package/docs-site/zh/tutorials/sandbox-reuse.mdx +12 -19
  529. package/docs-site/zh/tutorials/select-and-preview.mdx +65 -0
  530. package/docs-site/zh/tutorials/verify-judge.mdx +78 -0
  531. package/docs-site/zh/tutorials/viewing-results.mdx +38 -1
  532. package/docs-site/zh/tutorials/write-experiment.mdx +7 -5
  533. package/docs-site/zh/tutorials/write-send.mdx +9 -8
  534. package/package.json +9 -5
  535. package/dist/report/built-in/overview.cjs +0 -44
  536. package/dist/report/built-in/overview.cjs.map +0 -1
  537. package/dist/report/built-in/overview.d.cts +0 -6
  538. package/dist/report/built-in/overview.d.mts +0 -6
  539. package/dist/report/built-in/overview.d.ts +0 -6
  540. package/dist/report/built-in/overview.js +0 -9
  541. package/dist/report/built-in/overview.js.map +0 -1
  542. package/dist/runner/gate-lease.cjs +0 -283
  543. package/dist/runner/gate-lease.cjs.map +0 -1
  544. package/dist/runner/gate-lease.d.cts +0 -62
  545. package/dist/runner/gate-lease.d.mts +0 -62
  546. package/dist/runner/gate-lease.d.ts +0 -62
  547. package/dist/runner/gate-lease.js +0 -22
  548. package/dist/runner/gate-lease.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["run.ts"],"names":[],"mappings":"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","sourcesContent":["// 运行器主调度:发现产出的 eval × agent × runs → attempt,有界并发调度。\n// 职责只有编排:指纹缓存在 fingerprint.ts,单 attempt 生命周期在 attempt.ts,\n// reporter 编排 / 汇总在 report.ts,Direct Agent 的 Sandbox 占位适配器在 direct-agent-sandbox.ts。\nimport { Effect, Cause, Data, Deferred, Either, Exit, Option } from \"effect\";\nimport { probeJudgeEffect } from \"../assertions/judge.ts\";\nimport { t } from \"../i18n/index.ts\";\nimport { cacheKey, planProjectTarget } from \"./fingerprint.ts\";\nimport { OtelReceiverPool } from \"../o11y/otlp/turn-otel.ts\";\nimport { errorFromThrown, \n// attemptOrigin re-exported via timing for Run diagnostics\nattemptFailureDeclaration, experimentRunInfo, runAttemptEffect, scoreFactOutcomeForAttemptError, type AttemptFailureDeclaration, } from \"./attempt.ts\";\nimport type { DiagnosticRecord, EvalResult, InvocationShape, InvocationSummary, JsonValue, ResolvedJudgeConfig, Reporter, ReporterRegistration, SandboxBuildRecord, } from \"../types.ts\";\nimport type { AgentRun, Attempt, AttemptError, ExperimentHookContext, LifecyclePhase, InvocationReceipt, AttemptRef, RunOptions, } from \"./types.ts\";\nimport { attemptOrigin, artifactPrepareTimingHook, createRunTimingRecorder, runOrigin } from \"./timing.ts\";\nimport { buildFailureOrigin, startSandboxBuilds } from \"../sandbox/build-coordinator.ts\";\nimport { ArtifactPrepareCoordinator } from \"../agents/provisioner.ts\";\nimport { collectBuildPreparation, toBuildPreparation } from \"./build-preparation.ts\";\nimport type { BuildKey } from \"../sandbox/identity.ts\";\nimport { firstLine, getEnv } from \"../util.ts\";\nimport { runReporter, emitReporterEvent, scopeReporter, summarize } from \"./report.ts\";\nimport { reportAttemptLifecycle, reportBudgetExhausted, reportDiagnostic, reportExperimentHook, reportExperimentProgress, reportFailure, reportInterrupted, reportLockWait, reportPrecheck, reportRunActivity, } from \"./feedback/sink.ts\";\nimport { failureDetailFromCurrentReusedAttempt, failureDetailFromResult } from \"./feedback/failure.ts\";\nimport { COORDINATION_RECOVERED_CODE, EVALUATION_ALGORITHM, runWho, HALT_DIAGNOSTIC_CODE } from \"./types.ts\";\nimport { ReusableSandboxPool } from \"./sandbox-pool.ts\";\nimport { liveSandboxRuntimeServices } from \"../sandbox/runtime.ts\";\nimport { detectReuseContamination, reuseContaminationMessage } from \"./reuse-diagnostics.ts\";\nimport { selectedEvalsForRun } from \"./eval-selection.ts\";\nimport { registerExperimentTeardown, unregisterExperimentTeardown } from \"./experiment-cleanup-registry.ts\";\nimport { cleanupCallback } from \"./cleanup-timeout.ts\";\nimport { resolveAttemptTimeout } from \"./timeout.ts\";\nimport { hostname } from \"node:os\";\nimport { linkPluginLifecycles, type GroupPluginContext } from \"../plugin/contracts.ts\";\nimport { isOrphanedTeardownRegistration, readTeardownRegistrationsEffect, removeTeardownRegistrationIfPresentEffect, teardownEntryId, writeTeardownRegistrationEffect, } from \"./teardown-registry.ts\";\nimport { acquireCaseLockEffect, isCaseLockExpired, readCaseLockEffect, CASE_LOCK_HEARTBEAT_INTERVAL_MS, type CaseLockEffectClaim, type CaseLockRecord, } from \"./lock.ts\";\nimport { acquireGateSlotEffect, type GateLeaseEffectClaim, type GateLeaseRecord, } from \"./gate-lease.ts\";\nimport { openRunnerRecordCoordinator, prepareRunnerRecordReuse, type RunnerRecordAttempt, } from \"./record.ts\";\nimport { bindRunnerRunObservabilityDiagnostics } from \"../o11y/record/runner-producer.ts\";\nimport { sandboxReusePoolDescriptor } from \"./sandbox-reuse.ts\";\nexport class RunModeConflictError extends Data.TaggedError(\"RunModeConflictError\")<{\n readonly keepSandbox: NonNullable<RunOptions[\"keepSandbox\"]>;\n readonly conflictingExperimentIds: readonly string[];\n readonly conflictingEvalGroups: readonly {\n readonly experimentId: string | undefined;\n readonly evalGroupId: string;\n }[];\n readonly message: string;\n}> {\n}\n/** 反馈层的 attempt 身份 + 展示 label,两个 sink.ts lifecycle 调用点共用,避免各自手写\n * 同一组字段(见 memory 的 live-who-key-mismatch-freezes-rows —— 手写副本漏改是真实事故源)。 */\nfunction feedbackIdentity(a: Attempt): AttemptRef {\n return { experimentId: a.run.experimentId, evalId: a.evalDef.id, attempt: a.attempt };\n}\nfunction feedbackWho(a: Attempt): string {\n return runWho({ agentName: a.run.agent.name, model: a.run.model, experimentId: a.run.experimentId });\n}\nfunction attemptIdentityKey(experimentId: string | undefined, agentName: string, model: string | undefined, evalId: string): string {\n return JSON.stringify([experimentId, agentName, model ?? null, evalId]);\n}\nfunction attemptGroupKey(run: AgentRun, evalId: string): string {\n return attemptIdentityKey(run.experimentId, run.agent.name, run.model, evalId);\n}\nfunction reuseResultRequiresRetirement(result: EvalResult): boolean {\n return result.error?.code === \"timeout\" ||\n result.error?.code === \"agent-send-failed\" ||\n result.error?.code === \"plugin-resource-prepare-failed\" ||\n result.diagnostics?.some((diagnostic) => diagnostic.code === \"teardown-failed\") === true;\n}\nexport type { AgentRun, RunOptions } from \"./types.ts\";\n/** Only declared, configured capabilities are prechecked. A missing model or\n * key is an ordinary consumed-Fact unavailable outcome and does no network I/O. */\nexport function judgeProbeTargets(evals: readonly (ResolvedJudgeConfig | undefined)[]): ResolvedJudgeConfig[] {\n return judgeProbePlan(evals.map((judge, index) => ({ id: `#${index}`, judge }))).targets.map((target) => target.judge);\n}\n/** 一份探测目标的去重键:同一个 (model, baseUrl, apiKeyEnv) 只探一次,也用来把探测结局\n * 归回「哪些 Experiment × Eval pair 依赖这个端点」。 */\nfunction judgeTargetKey(jc: ResolvedJudgeConfig): string {\n return `${jc.model ?? \"\"}|${jc.baseUrl}|${jc.apiKeyEnv}`;\n}\n/** `judgeProbeTargets` 的完整形态:除了去重后的探测目标,还给出「哪个 pair 依赖哪个目标」——\n * 预检失败只作废需要 judge 的那些 pair(见 docs/feature/judge/library.md「派发前预检」),\n * 所以必须能把探测结局按 pair 归因,不能只知道有几个端点要探。 */\nexport function judgeProbePlan(evals: ReadonlyArray<{\n id: string;\n judge: ResolvedJudgeConfig | undefined;\n}>): {\n targets: Array<{\n key: string;\n judge: ResolvedJudgeConfig;\n }>;\n evalKeys: Map<string, string>;\n} {\n const targets: Array<{\n key: string;\n judge: ResolvedJudgeConfig;\n }> = [];\n const evalKeys = new Map<string, string>();\n const seen = new Set<string>();\n for (const e of evals) {\n const jc = e.judge;\n if (jc === undefined || jc.model === undefined || !getEnv(jc.apiKeyEnv))\n continue;\n const key = judgeTargetKey(jc);\n evalKeys.set(e.id, key);\n if (seen.has(key))\n continue;\n seen.add(key);\n targets.push({ key, judge: jc });\n }\n return { targets, evalKeys };\n}\n/** Connect an application-owned AbortSignal to the current Effect Scope. */\nfunction interruptOnAbort(signal: AbortSignal): Effect.Effect<never> {\n return Effect.async((resume) => {\n const abort = () => resume(Effect.interrupt);\n if (signal.aborted) {\n abort();\n return;\n }\n signal.addEventListener(\"abort\", abort, { once: true });\n return Effect.sync(() => signal.removeEventListener(\"abort\", abort));\n });\n}\n/**\n * The Runner is Effect-native from writer acquisition through dispatch and\n * publication. NodeRuntime is deliberately owned by the CLI/application edge.\n */\nexport function runEvals<AttachmentError, AttachmentRequirements>(opts: RunOptions<AttachmentError, AttachmentRequirements>) {\n return Effect.scoped(Effect.gen(function* () {\n const invocationScope = yield* Effect.scope;\n const startedAtMs = Date.now();\n const startedAt = new Date(startedAtMs).toISOString();\n const t0 = startedAtMs;\n // These roots have deliberately different ownership. `coordinationRoot`\n // contains only local Runner state; `recordRoot` is the portable fact root\n // passed unchanged to the Record reader/writer coordinator.\n const coordinationRoot = opts.coordinationRoot ?? `${process.cwd()}/.niceeval`;\n const recordRoot = opts.recordRoot;\n // `--keep-sandbox` 要把单条 Attempt 的最终现场转交给用户,\n // `sandboxReuse` 则让整个 Invocation 的 pool 继续拥有并在收尾时销毁同一个 Case。\n // 两种 ownership 不能同时成立;在 carry planning/build/provider 等任何资源动作之前\n // 拒绝,避免产生“已登记 kept 但 pool finalizer 又销毁”的假现场。\n if (opts.keepSandbox !== undefined) {\n const conflictingEvalGroups = [...new Map(opts.agentRuns.flatMap((run) => selectedEvalsForRun(opts.evals, run)\n .filter((evalDef) => evalDef.evalGroup !== undefined)\n .map((evalDef) => {\n const value = Object.freeze({\n experimentId: run.experimentId,\n evalGroupId: evalDef.evalGroup!.id,\n });\n return [JSON.stringify([value.experimentId, value.evalGroupId]), value] as const;\n }))).values()];\n const conflictingExperiments = [...new Set(opts.agentRuns\n .filter((run) => run.sandboxReuse || conflictingEvalGroups.some((group) => group.experimentId === run.experimentId))\n .map((run) => run.experimentId))];\n if (conflictingExperiments.length > 0 || conflictingEvalGroups.length > 0) {\n throw new RunModeConflictError({\n keepSandbox: opts.keepSandbox,\n conflictingExperimentIds: Object.freeze(conflictingExperiments),\n conflictingEvalGroups: Object.freeze(conflictingEvalGroups),\n message: `--keep-sandbox cannot be combined with reusable Sandbox ownership` +\n `${conflictingExperiments.length === 0\n ? \"\"\n : ` (experiments: ${conflictingExperiments.map((id) => JSON.stringify(id)).join(\", \")})`}` +\n `${conflictingEvalGroups.length === 0\n ? \"\"\n : ` (Eval Groups: ${conflictingEvalGroups.map(({ experimentId, evalGroupId }) => `${JSON.stringify(experimentId)} / ${JSON.stringify(evalGroupId)}`).join(\", \")})`}. ` +\n \"Drop --keep-sandbox or select only fresh, ungrouped Evals.\",\n });\n }\n }\n // Physical planning produces immutable current inputs. Record reuse receives\n // only this projection and its own frozen view; no historic result facade\n // participates in dispatch or display.\n const targetPlan = yield* planProjectTarget(opts.evals, opts.agentRuns, opts.config.timeoutMs, {\n configJudge: opts.config.judge,\n ...(opts.keepSandbox === undefined ? {} : { keepSandbox: opts.keepSandbox }),\n });\n const { preparedPairsByKey, plannedConfigHashes, resolvedJudgesByKey, plannedFingerprints, } = targetPlan;\n // Plugin link produces one effective immutable AgentRun per source Run. All\n // runtime work after physical planning must consume that same linked value.\n const effectiveRunBySource = new Map<AgentRun, AgentRun>();\n for (const prepared of preparedPairsByKey.values()) {\n const prior = effectiveRunBySource.get(prepared.sourceRun);\n if (prior !== undefined && prior !== prepared.run) {\n throw new Error(`Plugin link produced inconsistent effective runs for Experiment ${JSON.stringify(prepared.sourceRun.experimentId)}.`);\n }\n effectiveRunBySource.set(prepared.sourceRun, prepared.run);\n }\n const effectiveAgentRuns = Object.freeze(opts.agentRuns.map((sourceRun) => effectiveRunBySource.get(sourceRun) ?? sourceRun));\n opts = { ...opts, agentRuns: effectiveAgentRuns };\n const reuse = yield* prepareRunnerRecordReuse({\n evals: opts.evals,\n runs: opts.agentRuns,\n config: opts.config,\n plannedFingerprints,\n plannedConfigHashes,\n ...(opts.rerun === undefined ? {} : { rerun: opts.rerun }),\n ...(opts.keepSandbox === undefined ? {} : { keepSandbox: opts.keepSandbox }),\n });\n // Coordinator creates draft Runs first, then uses their real `draft.runId`\n // values and the frozen Record view to partition every Slot into reuse/gap.\n const recordCoordinator = yield* openRunnerRecordCoordinator({\n recordRoot,\n startedAt: t0,\n evals: opts.evals,\n runs: opts.agentRuns,\n reuse,\n });\n // The draft is the only authority for a Run identity. Session, shape and\n // reporters all observe this same mapping; no caller can replace it with a\n // synthetic legacy value.\n const runIds = recordCoordinator.runIdsByExperiment;\n const carriedAttemptsByKey = recordCoordinator.carriedAttemptsByKey;\n const reusedAttempts = yield* recordCoordinator.readCarriedResults();\n const runsByExperimentId = new Map(opts.agentRuns.map((run) => [run.experimentId, run] as const));\n const runForReusedAttempt = (readback: (typeof reusedAttempts)[number]): AgentRun => {\n const run = runsByExperimentId.get(readback.target.experimentId);\n if (run === undefined) {\n throw new Error(`Record reuse readback references unknown Experiment ${JSON.stringify(readback.target.experimentId)}.`);\n }\n return run;\n };\n // Readback is the sole authority for the externally visible carry count.\n // In particular, the CLI must not guess this before the frozen current view\n // has rejected every non-reusable source.\n const reusedFailures = Object.freeze(reusedAttempts.flatMap((readback) => {\n const failure = failureDetailFromCurrentReusedAttempt(readback, runForReusedAttempt(readback));\n return failure === undefined ? [] : [failure];\n }));\n if (opts.onCurrentRecordReusePlan !== undefined) {\n yield* opts.onCurrentRecordReusePlan({ reused: reusedAttempts.length, reusedFailures });\n }\n else {\n // Direct library callers have no feedback coordinator. Preserve their\n // fallback failure signal without turning a current readback into a legacy\n // result-shaped facade.\n for (const failure of reusedFailures) {\n reportFailure(failure);\n }\n }\n // Session 文件在首次派发前创建;它只记录 Run 身份与轻量计数,锁和实验闸仍各自维护。\n if (opts.session !== undefined) {\n yield* opts.session.start({\n runIds,\n agentRuns: opts.agentRuns,\n carriedAttemptsByKey,\n startedAt,\n });\n }\n const preparedPlansByRun = new Map<AgentRun, globalThis.Record<string, JsonValue>>();\n for (const prepared of preparedPairsByKey.values()) {\n const plans = preparedPlansByRun.get(prepared.run) ?? {};\n plans[prepared.evalDef.id] = prepared.identity;\n preparedPlansByRun.set(prepared.run, plans);\n }\n // 展开 attempts。每个 Eval Group 是一条按规范化 Eval ID 稳定串行的 lane;每个未分组 Eval 是一条\n // attempt-major lane。先按 lane 深度铺成全 Invocation 的 wave,保证任一 lane 的下一槽位\n // 都不会排到其它 lane 的首槽位之前。carried 槽位先从 lane 删除,不占 wave 也不触发 Sandbox。\n const attempts: Attempt[] = [];\n // Group 串行链与 wave 闸都是 Effect Deferred 协调:等待是 Deferred.await 的 Effect,\n // 释放是 Deferred 结算 Effect,不再经过裸 Promise resolve。\n const groupedPredecessors = new WeakMap<Attempt, Effect.Effect<void>>();\n const groupedReleases = new WeakMap<Attempt, Effect.Effect<void>>();\n const groupedTails = new Map<AgentRun, Map<string, Effect.Effect<void>>>();\n const dispatchWaveNumbers = new WeakMap<Attempt, number>();\n type SchedulingSlot = {\n readonly run: AgentRun;\n readonly i: number;\n readonly evalDef: ReturnType<typeof selectedEvalsForRun>[number];\n };\n const lanes: SchedulingSlot[][] = [];\n for (const run of effectiveAgentRuns) {\n // selectedEvalIds 已由 CLI 在构造 AgentRun 时对候选 eval 各求值一次算好(见\n // eval-selection.ts 的 resolveExperimentEvals());这里只按 resolved id 取 eval,\n // 不重新调用用户谓词(见 docs/feature/record/architecture.md「selectedEvalIds」)。\n const evals = selectedEvalsForRun(opts.evals, run);\n const grouped = new Map<string, Array<(typeof evals)[number]>>();\n for (const evalDef of evals) {\n if (evalDef.evalGroup === undefined)\n continue;\n grouped.set(evalDef.evalGroup.id, [...(grouped.get(evalDef.evalGroup.id) ?? []), evalDef]);\n }\n const addedGroups = new Set<string>();\n for (const evalDef of evals) {\n if (evalDef.evalGroup === undefined) {\n lanes.push([...Array(run.attempts).keys()].map((i) => ({ run, i, evalDef })));\n continue;\n }\n if (addedGroups.has(evalDef.evalGroup.id))\n continue;\n addedGroups.add(evalDef.evalGroup.id);\n const groupEvals = grouped.get(evalDef.evalGroup.id) ?? [];\n lanes.push(groupEvals\n .toSorted((left, right) => left.id.localeCompare(right.id))\n .flatMap((groupEval) => [...Array(run.attempts).keys()].map((i) => ({ run, i, evalDef: groupEval }))));\n }\n }\n const runnableLanes = lanes\n .map((lane) => lane.filter(({ run, i, evalDef }) => !carriedAttemptsByKey.get(cacheKey(run, evalDef.id))?.has(i)))\n .filter((lane) => lane.length > 0);\n // LPT 仍作为 wave 内的稳定 tie-breaker:关键路径较长的 Experiment 先入同一波,但每一波\n // 最多只给每条 lane 一个新机会,不能再把整条长 Run 堆到其它 Group 前面。\n const runnableCountByRun = new Map<AgentRun, number>();\n for (const lane of runnableLanes) {\n const run = lane[0]!.run;\n runnableCountByRun.set(run, (runnableCountByRun.get(run) ?? 0) + lane.length);\n }\n const rounds = (run: AgentRun): number => {\n const width = Math.min(run.maxConcurrency ?? opts.maxConcurrency, opts.maxConcurrency);\n return Math.ceil((runnableCountByRun.get(run) ?? 0) / width);\n };\n runnableLanes.sort((left, right) => rounds(right[0]!.run) - rounds(left[0]!.run));\n const slots: Array<SchedulingSlot & {\n readonly wave: number;\n }> = [];\n const waveCount = Math.max(0, ...runnableLanes.map((lane) => lane.length));\n for (let wave = 0; wave < waveCount; wave += 1) {\n for (const lane of runnableLanes) {\n const slot = lane[wave];\n if (slot !== undefined)\n slots.push({ ...slot, wave });\n }\n }\n for (const { run, i, evalDef, wave } of slots) {\n const carryKey = cacheKey(run, evalDef.id);\n // 携带以 attempt 为粒度:只跳过这个具体序号确实被携入的那些(见 fingerprint.ts 的\n // `carriedAttemptsByKey`),不是\"这个组合有过携入就跳过前 N 个\"——attempts:5 里若只有\n // 序号 1 是上一轮的终态、序号 0 是 errored,这里必须只跳过序号 1、照常调度序号 0。\n if (carriedAttemptsByKey.get(carryKey)?.has(i))\n continue;\n // key 标识「同一个运行配置下的同一条 eval」,earlyExit 的跳过/abort 只应作用于\n // 同 key 的重试轮。experimentId 必须进 key:两个实验可以同 agent 同 model、只差\n // flags(feature A/B 正是这种形状),漏掉它会让先过的实验把其它实验的同名 eval\n // 整个跳掉——花了钱还丢结果。\n const key = attemptGroupKey(run, evalDef.id);\n const prepared = preparedPairsByKey.get(cacheKey(run, evalDef.id));\n if (prepared === undefined) {\n throw new Error(`Missing prepared Sandbox plan for ${JSON.stringify(cacheKey(run, evalDef.id))}.`);\n }\n if (prepared.run !== run) {\n throw new Error(`Plugin effective Run invariant failed for ${JSON.stringify(cacheKey(run, evalDef.id))}.`);\n }\n const configHash = plannedConfigHashes.get(cacheKey(run, evalDef.id));\n if (configHash === undefined) {\n throw new Error(`Missing planned config hash for ${JSON.stringify(cacheKey(run, evalDef.id))}.`);\n }\n const fingerprint = plannedFingerprints.get(cacheKey(run, evalDef.id));\n if (fingerprint === undefined) {\n throw new Error(`Missing planned fingerprint for ${JSON.stringify(cacheKey(run, evalDef.id))}.`);\n }\n if (!resolvedJudgesByKey.has(carryKey)) {\n throw new Error(`Missing planned Judge resolution for ${JSON.stringify(carryKey)}.`);\n }\n const sandboxPlansByEval = preparedPlansByRun.get(run);\n if (sandboxPlansByEval === undefined) {\n throw new Error(`Missing Experiment plan map for ${JSON.stringify(run.experimentId)}.`);\n }\n const attempt: Attempt = {\n evalDef,\n run,\n attempt: i,\n key,\n fingerprint,\n configHash,\n judge: resolvedJudgesByKey.get(carryKey),\n plan: prepared.plan,\n sandboxPlansByEval,\n };\n attempts.push(attempt);\n dispatchWaveNumbers.set(attempt, wave);\n if (evalDef.evalGroup !== undefined) {\n let tails = groupedTails.get(run);\n if (tails === undefined)\n groupedTails.set(run, (tails = new Map()));\n const predecessor = tails.get(evalDef.evalGroup.id) ?? Effect.void;\n const settled = yield* Deferred.make<void>();\n groupedPredecessors.set(attempt, predecessor);\n groupedReleases.set(attempt, Deferred.succeed(settled, undefined).pipe(Effect.asVoid));\n tails.set(evalDef.evalGroup.id, Deferred.await(settled));\n }\n }\n // 公平闸只保护每条 lane 的首槽位:任一 lane 的后续槽位都要等所有 lane 的首槽位\n // 至少拿到过一次全局并发位(或在此前确定不派发)。首波以后不再跨 lane 组 wave;\n // Group 自己的 predecessor 已经保证 lane 内串行,继续要求第 N 波全部抵达会让慢 lane\n // 尚未完成的当前槽挡住快 lane 的空闲后继,制造真实空闲和时间轴空白。\n // arrive 同时挂在派发点与 ensuring,保持未派发/中断路径也能结算首波。\n const dispatchWaveReady = new WeakMap<Attempt, Effect.Effect<void>>();\n const dispatchWaveArrive = new WeakMap<Attempt, Effect.Effect<void>>();\n const firstWave = attempts.filter((attempt) => dispatchWaveNumbers.get(attempt) === 0);\n let firstWaveRemaining = firstWave.length;\n const firstWaveSettled = yield* Deferred.make<void>();\n const firstWaveReady = firstWaveRemaining === 0\n ? Effect.void\n : Deferred.await(firstWaveSettled);\n for (const attempt of attempts) {\n const isFirst = dispatchWaveNumbers.get(attempt) === 0;\n dispatchWaveReady.set(attempt, isFirst ? Effect.void : firstWaveReady);\n if (!isFirst) {\n dispatchWaveArrive.set(attempt, Effect.void);\n continue;\n }\n let arrived = false;\n dispatchWaveArrive.set(attempt, Effect.gen(function* () {\n if (arrived)\n return;\n arrived = true;\n firstWaveRemaining -= 1;\n if (firstWaveRemaining === 0) {\n yield* Deferred.succeed(firstWaveSettled, undefined);\n }\n }));\n }\n // 预检 judge:验证 API key + 端点可达,避免跑完 agent 才发现 judge 不通。\n // 放在 attempts 展开之后,fail fast 只对会真正触发 judge 的运行生效\n // (目标收集逻辑见 judgeProbeTargets;全部结果携入、attempts 为空时也自然跳过)。\n // 预检失败的受影响 pair:experimentId|evalId → 失败原因(带实际探测端点)。同一个 Eval\n // 可被多个 Experiment 用不同 Judge 跑 A/B,不能让一个端点的失败连坐另一个配对。\n // 不派发、不建沙箱,逐条落成 errored(见下方 judgePrecheckFailures 的消费点);其余 eval\n // 照常派发——一条 judge 配置问题不没收整批与它无关的结果。\n const judgePrecheckFailures = new Map<string, string>();\n {\n const uniquePairs = [...new Map(attempts.map((a) => [cacheKey(a.run, a.evalDef.id), a])).entries()];\n const { targets, evalKeys } = judgeProbePlan(uniquePairs.map(([id, a]) => ({\n id,\n judge: a.judge,\n })));\n if (targets.length > 0) {\n // judge 预检是一次真实网络往返,可能慢甚至长时间不返回:发运行级行(started/done/failed),\n // 让 live 面板在预检期间显示「为什么还停在 0 running · N queued」,而不是看起来卡死\n // (见 docs/feature/experiments/cli.md「判分预检的显示」)。\n reportPrecheck({ status: \"started\" });\n const precheckStartedAt = Date.now();\n // 逐个目标各记自己的结局:一个端点不通不该作废依赖另一个(可用)端点的 eval,\n // 而落进 attempt 的 error.message 也必须是它自己那个端点的失败原因。\n const failedByKey = new Map<string, string>();\n for (const target of targets) {\n const err = yield* probeJudgeEffect(target.judge, opts.signal);\n if (err)\n failedByKey.set(target.key, err);\n }\n for (const [pairKey, key] of evalKeys) {\n const err = failedByKey.get(key);\n if (err !== undefined)\n judgePrecheckFailures.set(pairKey, err);\n }\n reportPrecheck({\n status: failedByKey.size > 0 ? \"failed\" : \"done\",\n durationMs: Date.now() - precheckStartedAt,\n });\n }\n }\n // Run 级共享构建准备:携带规划后只为仍需 fresh 的 BuildKey 工作。独立并发、不占\n // attempt 并发位;失败按依赖 eval 扇出,origin 指向同一个 sandbox.build timing node。\n // 显式 buildPreparation 优先(测试注入);否则从 pair-owned ProviderPlan 自动收集。\n const runTiming = createRunTimingRecorder();\n let sandboxBuildRecords: SandboxBuildRecord[] = [];\n const buildFailureByPair = new Map<string, AttemptError>();\n const buildLocatorsByPair = new Map<string, Map<BuildKey, JsonValue>>();\n const collected = opts.buildPreparation === undefined\n ? yield* collectBuildPreparation({\n preparedPairs: [...preparedPairsByKey.values()],\n carriedAttemptsByKey,\n })\n : Option.none();\n const buildPreparation = opts.buildPreparation === undefined\n ? Option.flatMap(collected, toBuildPreparation)\n : Option.some(opts.buildPreparation);\n const buildPrep = Option.getOrUndefined(buildPreparation);\n // 共享构建**不阻塞派发**:整批 key 同时开工,每条 attempt 只等自己引用的那几个 key\n // (case.md「Run 级构建协调」第 4 条的逐 key 放行)。全局 barrier 会让 10 个已就绪的镜像\n // 陪着最慢的那个构建干等(台账见 memory/shared-build-single-barrier-not-per-buildkey.md)。\n const runningBuilds = buildPrep && buildPrep.works.length > 0\n ? startSandboxBuilds(buildPrep.works, {\n timing: runTiming,\n provider: buildPrep.provider,\n maxConcurrency: opts.maxBuildConcurrency ?? buildPrep.maxConcurrency ?? 2,\n ...(buildPrep.buildTimeoutMs !== undefined ? { buildTimeoutMs: buildPrep.buildTimeoutMs } : {}),\n ...(buildPrep.prepareBudgetMs !== undefined ? { prepareBudgetMs: buildPrep.prepareBudgetMs } : {}),\n signal: opts.signal,\n // 最小反馈钩子:共享构建投影为运行级 active 行 / 非 TTY 起止事件,不占 attempt 位。\n onActivity: (event) => {\n reportRunActivity({\n id: event.id,\n key: event.key,\n label: event.label,\n status: event.status,\n ...(\"durationMs\" in event ? { durationMs: event.durationMs } : {}),\n });\n },\n })\n : undefined;\n // 逐 pair 的放行闸:第一次问到就记下等待,之后同 pair 的其它 attempt 复用同一条。\n const buildWaits = new Map<string, Promise<void>>();\n const awaitBuildsFor = (pairKey: string): Promise<void> => {\n const keys = buildPrep?.pairBuildKeys[pairKey];\n if (runningBuilds === undefined || keys === undefined || keys.length === 0)\n return Promise.resolve();\n let pending = buildWaits.get(pairKey);\n if (pending !== undefined)\n return pending;\n pending = (async () => {\n for (const key of keys)\n await runningBuilds.settled(key);\n const locators = new Map<BuildKey, JsonValue>();\n for (const key of keys) {\n const failure = runningBuilds.failures.get(key);\n if (failure !== undefined) {\n const originFields = buildFailureOrigin(failure);\n buildFailureByPair.set(pairKey, {\n code: originFields.code,\n message: originFields.message,\n origin: runOrigin(originFields.timingNodeId),\n ...(originFields.cause !== undefined ? { cause: originFields.cause } : {}),\n });\n return;\n }\n const locator = runningBuilds.locators.get(key);\n if (locator !== undefined)\n locators.set(key, locator);\n }\n if (locators.size > 0)\n buildLocatorsByPair.set(pairKey, locators);\n })();\n buildWaits.set(pairKey, pending);\n return pending;\n };\n // Run 级 Agent artifact prepare:由 attempt 内探测到目标 Sandbox 平台后触发 single-flight。\n // 绝不能在这里按宿主平台 eager prepare:macOS 宿主跑 Linux Sandbox 会拿到错误制品。\n const artifactPrepare = opts.artifactPrepare ??\n new ArtifactPrepareCoordinator(artifactPrepareTimingHook(runTiming));\n // The shared receiver belongs to this invocation Scope. Closing through its\n // finalizer covers ordinary completion, Record write failure, and interrupt\n // uniformly; attempts receive the same immutable pool snapshot.\n const otelPool = yield* Effect.acquireRelease(Effect.sync(() => opts.otelPool ?? new OtelReceiverPool(opts.config.telemetry?.port)), (pool) => pool.closeEffect().pipe(Effect.ignore));\n // Runtime dependencies are added to a fresh snapshot; caller-owned planning\n // inputs remain immutable for the duration of this invocation.\n const attemptOptions: RunOptions<AttachmentError, AttachmentRequirements> = {\n ...opts,\n coordinationRoot,\n artifactPrepare,\n otelPool,\n };\n // 缓存携入只在 plan 的 Reuse 行给数量,不逐条铺 eval id 清单(见 cli.md「人在终端里怎么用」:\n // 哪些 eval 复用、哪些重跑属于 --dry 与 niceeval view,不占 human 的 scrollback)。\n // onInvocationStart 报「本次实际要跑的 eval」(过滤 + 去重),不是发现到的全部 —— 否则计数误导。\n const runningIds = new Set(attempts.map((a) => a.evalDef.id));\n const runningEvals = [...runningIds].map((id) => ({ id }));\n const shape: InvocationShape = {\n evals: runningEvals.length,\n configs: effectiveAgentRuns.length,\n totalAttempts: attempts.length,\n maxConcurrency: opts.maxConcurrency,\n runIds,\n };\n // eval 级 reporters:实例只观测引用它的 eval(经 scopeReporter 过滤转发)。\n // 已经挂在全局 reporters 里的同一实例不重复挂;同一实例被多个 eval 引用时合并观测集\n // (共享一个目的地,如同一个 Braintrust 实验)。本次没有任何被观测 eval 要跑时整个跳过。\n const scopedSets = new Map<Reporter, Set<string>>();\n for (const e of opts.evals) {\n for (const r of e.reporters ?? []) {\n if (opts.reporters.some((reg) => reg.reporter === r))\n continue;\n let ids = scopedSets.get(r);\n if (!ids)\n scopedSets.set(r, (ids = new Set()));\n ids.add(e.id);\n }\n }\n const reporters: ReporterRegistration[] = [...opts.reporters];\n // EvalDef.reporters 是用户在单个 eval 上挂的补充观测(如「这个 eval 单独也发一份到某个\n // dashboard」),不是 CLI 显式注册的默认/机器出口——与 Config.reporters 同样默认\n // best-effort(见 ReporterRegistration 的字段注释:required 只留给 --junit)。name 用「scope 内第几个」编号,足以在诊断里区分「哪一个 eval 级 reporter」,\n // 不需要用户自己起名字。\n let evalReporterIndex = 0;\n for (const [r, ids] of scopedSets) {\n const scopedRuns = attempts.filter((a) => ids.has(a.evalDef.id)).length;\n if (scopedRuns === 0)\n continue;\n reporters.push({\n reporter: scopeReporter(r, ids, {\n evals: [...ids].filter((id) => runningIds.has(id)).length,\n configs: effectiveAgentRuns.length,\n totalAttempts: scopedRuns,\n maxConcurrency: opts.maxConcurrency,\n runIds,\n }),\n name: `eval-reporter-${evalReporterIndex++}`,\n required: false,\n });\n }\n for (const reg of reporters) {\n // reporter 只是结果消费方:单个 reporter 抛错记 diagnostic,不能让整次调度崩,也不阻断\n // 其它 reporter 的必要收尾(required/best-effort 的判定权重在 runReporter 内部处理)。\n yield* runReporter(reg, \"onInvocationStart\", () => reg.reporter.onInvocationStart?.(runningEvals, shape));\n }\n yield* emitReporterEvent(reporters, {\n type: \"invocation:start\",\n evals: runningEvals,\n shape,\n });\n const results: EvalResult[] = [];\n const passedKeys = new Set<string>();\n // errored = 框架/环境层面的意外(超时、adapter 崩、eval 脚本抛异常……),不是 agent 表现的信号。\n // 同 key 一旦 errored 就会确定性地重复 error,再跑 runs 里剩下的次数纯烧钱;只有 failed(断言\n // 真的没过)才代表 agent 行为的样本,值得跑满 runs 去测通过率。earlyExit 开时两者都提前收尾。\n // run 级 fail-fast(见 docs/runner.md「首过即停」):同一错误 code 在同一 key 连续复现\n // 即判定确定性错误,停止派发受同一配置影响的后续 attempt(如实报 errored 的结果保留;\n // 这是止损,不是「首过即停」,两个机制互不混用)。\n const lastErrorCode = new Map<string, {\n code: string;\n streak: number;\n }>();\n const failFastKeys = new Map<string, {\n code: string;\n skipped: number;\n }>();\n // 当前 Record reuse 的 passed readback 预置进 passedKeys:上面按序号回填的差额 attempt(carriedCount < run.attempts\n // 那部分)如果不预置这个,会在明明已经拿到过 passed 结果的情况下真的再调度一次 agent——\n // earlyExit 的语义是「已知会通过就不用再跑」,携入的 passed 同样是「已知会通过」,理应同等对待\n // (下面 preflight/body 的 earlyExit 判断本来就只在 a.run.earlyExit 为真时读这两个 Set,所以\n // 这里无条件预置对 --no-early-exit 场景没有副作用)。携入的 failed 故意不预置——failed 本来\n // 就不触发 earlyExit,回填的差额必须真的重跑,才对得起用户调大 runs 的意图(想看这次是不是\n // 还失败,或想凑够 pass@N 的样本量)。\n for (const readback of reusedAttempts) {\n if (readback.verdict !== \"passed\" || readback.source.evaluationKind !== \"pass\")\n continue;\n const run = runForReusedAttempt(readback);\n passedKeys.add(attemptGroupKey(run, readback.target.evalId));\n }\n // budget 护栏:只按「已完成 attempt 的实测花费」判断,不做预测性节流。之前的实现会按\n // 「平均成本 × 在飞数」预扣,快到顶就让还没起飞的 attempt 排队等——这在探测阶段(还没有任何\n // 成本样本时)等价于把同一 budgetKey 的并发摁到一个很小的数,且完全没有文档承诺过这个副作用\n // (`docs-site/zh/tutorials/write-experiment.mdx` 对 `budget` 的描述只有一句「这一格配置的预算\n // 上限」)。新语义:已完成 attempt 的花费加总一旦到顶,就不再放新 attempt 起飞(已经在飞的\n // 照常跑完,不会被中途打断);到顶之前不做任何预测性限流,并发完全由 globalSem / runSem 决定。\n // 代价是「已花 + 在飞未结算」的总花费可能短暂超出 budget——这是有意识的取舍:budget 是防止\n // 无限烧钱的安全网,不是精确计费闸,不应该反过来限制吞吐。\n interface BudgetState {\n spent: number;\n /** 已经真正发起过 agent turn、但仍拿不到成本的 attempt 数。provider/setup 在 agent\n * 运行前失败不计入——这种结果没有可执行的计费事实,不能据此声称 adapter 不报成本。 */\n completedAgentRunsNoCost: number;\n unenforceableWarned: boolean;\n /** 因这个 budgetKey 预算到顶而未派发的 attempt 累计数——反馈层 \"budget-exhausted\" 事件\n * (见 sink.ts 的 `BudgetExhaustedInput`)要求 emitter 自己维护这个累计值,reducer 不推导。 */\n unstartedCount: number;\n }\n const budgetStates = new Map<string, BudgetState>();\n const budgetState = (key: string): BudgetState => {\n let s = budgetStates.get(key);\n if (!s) {\n s = { spent: 0, completedAgentRunsNoCost: 0, unenforceableWarned: false, unstartedCount: 0 };\n budgetStates.set(key, s);\n }\n return s;\n };\n const budgetReported = new Set<string>();\n // reporter 的 onEvalComplete 要「每个 attempt 完成即时触发」(保流式输出),又不能让\n // 并发 worker 交错写 → 用一个 permit=1 的信号量串起来(替代原先手搓的 reportQueue 链)。\n const reportMutex = yield* Effect.makeSemaphore(1);\n // 沙箱启动单独限流:与 agent 并发(maxConcurrency)解耦,防高并发下 daemon/API 过载。\n // 未显式指定时跟 maxConcurrency 走——各 provider 的推荐值已在 cli 层写进 maxConcurrency 默认值。\n const sandboxSem = yield* Effect.makeSemaphore(opts.maxConcurrency);\n // 相同 provider physical identity 共享一个按需池;不从 AgentRun 重选 template。\n const reusePools = new Map<AgentRun, Map<string, ReusableSandboxPool>>();\n // A physical Sandbox number is Run-wide, not pool-local: distinct Eval\n // Groups may materialize identical provider plans concurrently and must not\n // both report `reuseSandbox: 1` for different instances.\n const reuseSandboxNumbers = new Map<AgentRun, number>();\n const nextReuseSandboxNumber = (run: AgentRun): number => {\n const next = (reuseSandboxNumbers.get(run) ?? 0) + 1;\n reuseSandboxNumbers.set(run, next);\n return next;\n };\n type ReusePoolSelection = {\n readonly _tag: \"Fresh\";\n } | {\n readonly _tag: \"Reuse\";\n readonly pool: ReusableSandboxPool;\n };\n const reusePoolKeyOf = (a: Attempt): string | undefined => {\n return sandboxReusePoolDescriptor({\n run: a.run,\n evalId: a.evalDef.id,\n ...(a.evalDef.evalGroup === undefined ? {} : { evalGroupId: a.evalDef.evalGroup.id }),\n plan: a.plan,\n })?.key;\n };\n const acquiredReuseAttempts = new WeakSet<Attempt>();\n const authorizedReuseAttempts = new WeakSet<Attempt>();\n const cancelledReuseAttempts = new WeakSet<Attempt>();\n const existingReusePoolFor = (a: Attempt): ReusableSandboxPool | undefined => {\n const key = reusePoolKeyOf(a);\n return key === undefined ? undefined : reusePools.get(a.run)?.get(key);\n };\n const cancelReuseAttempt = (a: Attempt, force = false): boolean => {\n if ((!force && authorizedReuseAttempts.has(a)) || acquiredReuseAttempts.has(a) || cancelledReuseAttempts.has(a)) {\n return false;\n }\n cancelledReuseAttempts.add(a);\n return true;\n };\n const reusePoolFor = (a: Attempt): Effect.Effect<ReusePoolSelection, never, import(\"effect\").Scope.Scope> => {\n const key = reusePoolKeyOf(a);\n if (key === undefined || a.plan._tag !== \"Sandbox\") {\n return Effect.succeed({ _tag: \"Fresh\" });\n }\n let bySpec = reusePools.get(a.run);\n if (bySpec === undefined) {\n bySpec = new Map<string, ReusableSandboxPool>();\n reusePools.set(a.run, bySpec);\n }\n let pool = bySpec.get(key);\n if (!pool) {\n // 物理 Sandbox lifecycle 不属于任一 Attempt;反馈与事实落到所属 Experiment 的 Run。\n const experimentContext = makeExperimentHookContext(a.run, \"sandbox.create\");\n const setupContext = {\n ...experimentContext,\n ...(a.evalDef.evalGroup === undefined ? {} : { evalGroup: {\n id: a.evalDef.evalGroup.id,\n definitionHash: a.evalDef.evalGroup.definitionHash,\n } }),\n };\n const capacity = a.evalDef.evalGroup === undefined\n ? Math.max(1, Math.min(opts.maxConcurrency, a.run.maxConcurrency ?? opts.maxConcurrency))\n : 1;\n const materializationOwnerId = a.evalDef.evalGroup === undefined\n ? a.plan.pair.evalId\n : JSON.stringify([\"eval-group\", a.run.experimentId, a.evalDef.evalGroup.id]);\n const groupPluginContext: GroupPluginContext | undefined = a.evalDef.evalGroup === undefined\n ? undefined\n : {\n experimentId: a.run.experimentId,\n evalGroupId: a.evalDef.evalGroup.id,\n signal: setupContext.signal,\n progress: setupContext.progress,\n diagnostic: setupContext.diagnostic,\n };\n pool = new ReusableSandboxPool(a.plan, capacity, {\n progress: setupContext.progress,\n diagnostic: setupContext.diagnostic,\n }, setupContext, liveSandboxRuntimeServices, a.run.agent.kind === \"sandbox\" ? a.run.agent : undefined, runTiming, materializationOwnerId, () => nextReuseSandboxNumber(a.run), a.evalDef.evalGroup === undefined ? Object.freeze([]) : linkPluginLifecycles(a.evalDef.evalGroup.plugins ?? [], \"group\"), groupPluginContext);\n bySpec.set(key, pool);\n return pool.managed().pipe(Effect.map((managed) => ({ _tag: \"Reuse\", pool: managed }) as const));\n }\n return Effect.succeed({ _tag: \"Reuse\", pool });\n };\n // 两级并发闸:全局(opts.maxConcurrency)+ 实验级(AgentRun.maxConcurrency,可选)。\n // 实验级闸让「有共享状态、必须串行」的实验(如跨 eval 累积记忆,maxConcurrency: 1)只在\n // 自己内部排队,同批其它实验照常并发。它的名额域跨 Invocation 共用(见 gate-lease.ts 与\n // docs/feature/experiments/architecture.md「并发 Invocation:用例锁」末条),所以名额不是\n // 进程内信号量而是磁盘上的逐槽租约——多开不叠加 N,`maxConcurrency: 1` 的临界区声明在\n // 多开下同样成立。全局位反过来是每条 Invocation 私有的吞吐旋钮,仍是进程内信号量。\n const globalSem = yield* Effect.makeSemaphore(opts.maxConcurrency);\n // 实验闸在进程内先垫一层同名额的信号量,再去取租约。两个原因:\n // ① 名额在本进程内部交接是即时的(Effect 信号量把 permit 直接递给排队的下一个 attempt),\n // 不必等租约轮询的下一个周期——单开是绝大多数场景,不该为跨进程协调付整整一个轮询周期\n // 的空转;② 同实验同时去拍磁盘的 attempt 至多 N 个,不让 runs 展开出的一大批兄弟一起\n // 轮询。它只会更严、不会更松:permit 数恒等于该实验 resolved 的 N,真正的名额权威仍是\n // 租约(跨 Invocation 共用、min-N 收紧)。裸 run(没有 experimentId、没有可共享的名额域)\n // 就只有这一层,不产生任何跨进程协调。\n const gateLocalSems = new Map<AgentRun, Effect.Semaphore>();\n for (const run of effectiveAgentRuns) {\n if (run.maxConcurrency !== undefined) {\n gateLocalSems.set(run, yield* Effect.makeSemaphore(Math.max(1, run.maxConcurrency)));\n }\n }\n // provider 级独占串行闸(见 docs/runner.md「调度:有界并发」):声明了 exclusive 的 provider\n // (如 local——同一棵真实工作树不允许并发写)按 provider 名共享一把 permit=1 的信号量,\n // --max-concurrency / 实验级 maxConcurrency 都不解除。核心不认 provider 名分支:这里只读\n // physical plan 的中性 admission/lane 字段;相同 lane 共用一把锁,表示它们竞争同一份\n // 不可并发底层资源,不是 `provider === \"local\"` 的行为分支。\n const providerExclusiveSems = new Map<string, Effect.Semaphore>();\n for (const attempt of attempts) {\n if (attempt.plan._tag === \"Direct\" ||\n attempt.plan.providerPlan.scheduling.admission._tag !== \"Exclusive\") {\n continue;\n }\n const laneKey = attempt.plan.providerPlan.scheduling.lane.key;\n if (!providerExclusiveSems.has(laneKey)) {\n providerExclusiveSems.set(laneKey, yield* Effect.makeSemaphore(1));\n }\n }\n let exclusiveConcurrencyWarned = false;\n const exclusiveSemFor = (plan: Attempt[\"plan\"]): Effect.Semaphore | undefined => {\n if (plan._tag === \"Direct\" || plan.providerPlan.scheduling.admission._tag !== \"Exclusive\")\n return undefined;\n const laneKey = plan.providerPlan.scheduling.lane.key;\n const sem = providerExclusiveSems.get(laneKey);\n if (sem === undefined) {\n throw new Error(`Missing provider-exclusive semaphore for ${laneKey}`);\n }\n // 如实标注串行事实(一次性,不管命中多少条 attempt):全局上限比 1 高时,这个 provider 的\n // attempt 实际仍然一个一个跑——不管 --max-concurrency 写了多少,这是正确性约束不是调度旋钮。\n if (opts.maxConcurrency > 1 && !exclusiveConcurrencyWarned) {\n exclusiveConcurrencyWarned = true;\n reportDiagnostic({\n key: `provider-exclusive-serial:${laneKey}`,\n code: \"provider-exclusive-serial\",\n severity: \"warning\",\n message: t(\"runner.providerExclusiveSerial\", {\n provider: plan.providerPlan.provider,\n concurrency: opts.maxConcurrency,\n }).trimEnd(),\n data: { provider: plan.providerPlan.provider, concurrency: opts.maxConcurrency },\n });\n }\n return sem;\n };\n // 实验级生命周期(见 docs/feature/experiments/architecture.md「实验级生命周期」):\n // setup 整场至多一次——第一个通过派发许可(preflight)的 attempt 触发,后续 attempt 等同一个\n // memoized Effect completion;等待发生在 gated 里、globalSem 之外,不占全局并发位。teardown 是\n // ExperimentDef.teardown 字段,在最后一个 attempt 收尾后执行,当且仅当 setup 时点走到过\n // ——setup 抛错不豁免,未声明 setup 不影响触发。pendingAttempts 按 Attempt 身份结算并挂在\n // Effect.ensuring 上,中断路径同样移除;重复结算不会像数字计数那样下溢。\n type ExperimentSetupOutcome = {\n readonly _tag: \"Succeeded\";\n } | {\n readonly _tag: \"Failed\";\n readonly error: AttemptError;\n };\n type ExperimentSetup = {\n readonly _tag: \"InProgress\";\n readonly completion: Deferred.Deferred<void, unknown>;\n } | ExperimentSetupOutcome;\n /**\n * 生命周期是一条闭合状态链,而不是 optional Promise、boolean 与计数器的笛卡尔积:\n *\n * Dormant → Active(setup 进行中/成功/失败) → TearingDown → TornDown\n * ↘ UntriggeredComplete(所有 attempt 都在触发点前结算)\n *\n * TearingDown/TornDown 仍携带 setup 与 pendingAttempts,因为强清 drain 可以在 setup 或\n * attempt 尚在飞时先取得收尾执行权;后续 attempt 恢复时仍须读到 setup 的失败结果。\n */\n type ExperimentLifecycle = {\n readonly _tag: \"Dormant\";\n readonly pendingAttempts: ReadonlySet<Attempt>;\n } | {\n readonly _tag: \"Active\";\n readonly pendingAttempts: ReadonlySet<Attempt>;\n readonly setup: ExperimentSetup;\n } | {\n readonly _tag: \"TearingDown\";\n readonly pendingAttempts: ReadonlySet<Attempt>;\n readonly setup: ExperimentSetup;\n readonly completion: Deferred.Deferred<void, unknown>;\n } | {\n readonly _tag: \"TornDown\";\n readonly pendingAttempts: ReadonlySet<Attempt>;\n readonly setup: ExperimentSetupOutcome;\n } | {\n readonly _tag: \"UntriggeredComplete\";\n };\n interface ExperimentLifecycleCell {\n state: ExperimentLifecycle;\n readonly mutex: Effect.Semaphore;\n }\n const expLifecycles = new Map<AgentRun, ExperimentLifecycleCell>();\n for (const a of attempts) {\n if (!a.run.setup && !a.run.teardown)\n continue;\n const cell = expLifecycles.get(a.run);\n if (cell) {\n if (cell.state._tag !== \"Dormant\")\n throw new Error(\"Experiment lifecycle initialized after dispatch.\");\n cell.state = { _tag: \"Dormant\", pendingAttempts: new Set([...cell.state.pendingAttempts, a]) };\n }\n else {\n expLifecycles.set(a.run, {\n state: { _tag: \"Dormant\", pendingAttempts: new Set([a]) },\n mutex: yield* Effect.makeSemaphore(1),\n });\n }\n }\n // 实验域诊断累积器(docs/runner.md「实验域诊断持久化」):只接无法归属单 Attempt 的实验\n // 事实——ctx.diagnostic、teardown failed/late、budget-unenforceable。相同 dedupeKey 只在\n // 同一个 experimentId 桶内折叠 count;不同 Experiment 各自独立累计,不跨来源合并。裸 run\n // (没有 experimentId)没有 Run 可挂,直接丢弃不进这个累积器——只留 reportDiagnostic\n // 的运行期反馈。与之配套的收尾时刻(捕捉每个 Experiment 真正完成的那一刻,不是整个\n // Invocation 收尾的那一刻,才诚实)。\n const experimentDiagnostics = new Map<string, DiagnosticRecord[]>();\n const experimentDedupeIndex = new Map<string, Map<string, DiagnosticRecord>>();\n const experimentCompletedAt = new Map<string, string>();\n const recordExperimentDiagnostic = (input: {\n experimentId: string | undefined;\n code: string;\n level: \"warning\" | \"error\";\n message: string;\n phase: LifecyclePhase;\n data?: Readonly<globalThis.Record<string, JsonValue>>;\n command?: string;\n dedupeKey?: string;\n }): void => {\n if (!input.experimentId)\n return;\n const dedupeIndex = experimentDedupeIndex.get(input.experimentId) ?? new Map<string, DiagnosticRecord>();\n experimentDedupeIndex.set(input.experimentId, dedupeIndex);\n if (input.dedupeKey !== undefined) {\n const existing = dedupeIndex.get(input.dedupeKey);\n if (existing) {\n existing.count = (existing.count ?? 1) + 1;\n // 同一运行级事实会随着未派发槽位增加而得到更精确的上下文。反馈 reducer\n // 已经采用最新 data;持久 Run 诊断也必须同样更新,不能把最初的 0 永久写死。\n if (input.data !== undefined || input.command !== undefined) {\n existing.context = {\n ...(input.data ?? {}),\n ...(input.command !== undefined ? { command: input.command } : {}),\n };\n }\n return;\n }\n }\n const record: DiagnosticRecord = {\n code: input.code,\n level: input.level,\n detail: input.message,\n origin: attemptOrigin(input.phase),\n ...(input.data !== undefined || input.command !== undefined\n ? {\n context: {\n ...(input.data ?? {}),\n ...(input.command !== undefined ? { command: input.command } : {}),\n },\n }\n : {}),\n };\n if (input.dedupeKey !== undefined)\n dedupeIndex.set(input.dedupeKey, record);\n const list = experimentDiagnostics.get(input.experimentId) ?? [];\n list.push(record);\n experimentDiagnostics.set(input.experimentId, list);\n };\n // 强杀后的收尾兜底(docs/feature/experiments/architecture.md「强杀后的收尾兜底」)的磁盘登记\n // 挂在本地协调根下,与留存注册表 `.niceeval/sandboxes/` 同一个根(默认 cwd/.niceeval,\n // 与 attempt.ts 的 `coordinationRoot` 兜底同一口径)。\n const currentHost = hostname();\n const makeExperimentHookContext = (run: AgentRun, phase: LifecyclePhase): ExperimentHookContext => {\n const experimentId = run.experimentId;\n return {\n experimentId: run.experimentId,\n selectedEvalIds: run.selectedEvalIds,\n signal: opts.signal ?? new AbortController().signal,\n // progress 是短命状态:只更新本实验运行级行的 detail,不属于任何 attempt 的 active 条目。\n progress: (u) => {\n const suffix = u.current !== undefined && u.total !== undefined ? ` (${u.current}/${u.total})` : \"\";\n reportExperimentProgress({ experimentId, detail: `${u.message}${suffix}` });\n },\n // diagnostic 双落:运行级永久事件流(human/json 都有即时反馈)+ 实验域诊断累积器\n // (持久化,该 Experiment 的 Run 封口时一次写入)——两条通路相互独立,互不派生\n // (docs/runner.md「实验域诊断持久化」)。实验级钩子的事实不属于任何单个 Attempt,不落\n // result.json。\n diagnostic: (input) => {\n reportDiagnostic({\n key: input.dedupeKey ?? `${input.code}:experiment:${experimentId}`,\n code: input.code,\n severity: input.level,\n message: input.message,\n data: { experimentId, ...(input.data ?? {}) },\n });\n recordExperimentDiagnostic({\n experimentId: run.experimentId,\n code: input.code,\n level: input.level,\n message: input.message,\n phase,\n ...(input.data !== undefined ? { data: input.data } : {}),\n ...(input.dedupeKey !== undefined ? { dedupeKey: input.dedupeKey } : {}),\n });\n },\n };\n };\n const replaceSetup = (cell: ExperimentLifecycleCell, setup: ExperimentSetupOutcome): Effect.Effect<void> => cell.mutex.withPermits(1)(Effect.sync(() => {\n const state = cell.state;\n if (state._tag === \"Active\" || state._tag === \"TearingDown\") {\n cell.state = { ...state, setup };\n }\n }));\n const awaitSetup = (setup: ExperimentSetup): Effect.Effect<void, unknown> => setup._tag === \"InProgress\" ? Deferred.await(setup.completion) : Effect.void;\n const setupOutcomeOf = (setup: ExperimentSetup): ExperimentSetupOutcome => {\n if (setup._tag !== \"InProgress\")\n return setup;\n throw new Error(\"Experiment setup completed without recording its terminal outcome.\");\n };\n const runExperimentTeardown = (run: AgentRun, cell: ExperimentLifecycleCell): Effect.Effect<void, unknown> => Effect.uninterruptibleMask((restore) => cell.mutex.withPermits(1)(Effect.gen(function* () {\n const current = cell.state;\n // setup 时点没走到就没有收尾义务;已完成与在飞状态分别复用自己的确定 Effect。\n if (current._tag === \"Dormant\" || current._tag === \"UntriggeredComplete\" || current._tag === \"TornDown\") {\n return undefined;\n }\n if (current._tag === \"TearingDown\")\n return current.completion;\n // 正常路径、强清 drain 与崩溃路径共同把 Active 原子转成 TearingDown;后到者只 await\n // 同一个 Deferred,因此不双跑、也不空转。\n const completion = yield* Deferred.make<void, unknown>();\n const experimentId = run.experimentId ?? run.agent.name;\n cell.state = {\n _tag: \"TearingDown\",\n pendingAttempts: current.pendingAttempts,\n setup: current.setup,\n completion,\n };\n const teardown = Effect.gen(function* () {\n // 强清可能先取得收尾执行权;必须等 setup 的 Effect 结算后再清理。\n yield* awaitSetup(current.setup);\n if (!run.teardown)\n return;\n reportExperimentHook({ experimentId, hook: \"teardown\", status: \"started\" });\n const startedAt = Date.now();\n const ctx = makeExperimentHookContext(run, \"experiment.teardown\");\n yield* cleanupCallback(() => run.teardown!(ctx)).pipe(Effect.matchEffect({\n onSuccess: () => Effect.sync(() => {\n reportExperimentHook({\n experimentId,\n hook: \"teardown\",\n status: \"done\",\n durationMs: Date.now() - startedAt,\n });\n }),\n onFailure: (error) => Effect.sync(() => {\n reportExperimentHook({\n experimentId,\n hook: \"teardown\",\n status: \"failed\",\n durationMs: Date.now() - startedAt,\n });\n // teardown 失败只作运行级诊断,不改任何已产出的 verdict。\n const message = t(\"runner.experimentTeardownFailed\", {\n experimentId,\n message: error instanceof Error ? error.message : String(error),\n }).trimEnd();\n reportDiagnostic({\n key: `experiment-teardown-failed:${experimentId}`,\n code: \"experiment-teardown-failed\",\n severity: \"warning\",\n message,\n data: { experimentId },\n });\n recordExperimentDiagnostic({\n experimentId: run.experimentId,\n code: \"experiment-teardown-failed\",\n level: \"warning\",\n message,\n phase: \"experiment.teardown\",\n });\n }),\n }));\n // 这个 Experiment 真正走完 teardown(不论成败)的时刻。\n experimentCompletedAt.set(experimentId, new Date().toISOString());\n }).pipe(Effect.ensuring(cell.mutex.withPermits(1)(Effect.gen(function* () {\n const state = cell.state;\n const pendingAttempts = state._tag === \"TearingDown\"\n ? state.pendingAttempts\n : current.pendingAttempts;\n const setup = state._tag === \"TearingDown\" ? state.setup : current.setup;\n cell.state = { _tag: \"TornDown\", pendingAttempts, setup: setupOutcomeOf(setup) };\n // settle 后才注销:drain 在执行体在飞时仍能看见本项。\n yield* unregisterExperimentTeardown(experimentId);\n if (run.experimentId) {\n yield* removeTeardownRegistrationIfPresentEffect(coordinationRoot, teardownEntryId(run.experimentId, process.pid)).pipe(Effect.ignore);\n }\n }))));\n const settle = Effect.exit(restore(teardown)).pipe(Effect.flatMap((exit) => Deferred.done(completion, exit)), Effect.asVoid);\n yield* restore(settle).pipe(Effect.forkIn(invocationScope));\n return completion;\n })).pipe(Effect.flatMap((completion) => completion === undefined ? Effect.void : restore(Deferred.await(completion)))));\n /**\n * 启动自愈:本实验触发 setup 之前,先核对磁盘上是否有它自己的遗留登记——上一次运行同一\n * experimentId 被强杀、来不及删除。同宿主且 pid 已死才是遗留义务;pid 活或异宿主可能是\n * 并发 run,不触碰。先原子删登记拿到执行权,再补执行一次它的 teardown(新进程语义:\n * ctx.selectedEvalIds 从登记恢复,不依赖已丢失的 setup 产物)。失败只记诊断,不阻断、\n * 不重试本次 run 的调度——recovery 补偿的是上一次的泄漏,不是这一次的前提条件。\n */\n const recoverOrphanedTeardownRegistration = (run: AgentRun, experimentId: string): Effect.Effect<void, unknown> => Effect.suspend(() => {\n if (!run.experimentId || !run.teardown)\n return Effect.void;\n return Effect.gen(function* () {\n const registrations = yield* readTeardownRegistrationsEffect(coordinationRoot).pipe(Effect.catchAll(() => Effect.succeed([])));\n for (const { id, entry } of registrations) {\n if (entry.experimentId !== run.experimentId || !isOrphanedTeardownRegistration(entry, currentHost))\n continue;\n const claimed = yield* removeTeardownRegistrationIfPresentEffect(coordinationRoot, id).pipe(Effect.catchAll(() => Effect.succeed(false)));\n if (!claimed)\n continue; // 已被另一个进程抢先删除,义务已被别处接手。\n reportExperimentHook({ experimentId, hook: \"teardown\", status: \"started\", recovery: true });\n const startedAt = Date.now();\n const recoveryCtx: ExperimentHookContext = {\n experimentId,\n selectedEvalIds: entry.selectedEvalIds,\n signal: opts.signal ?? new AbortController().signal,\n progress: (u) => {\n const suffix = u.current !== undefined && u.total !== undefined ? ` (${u.current}/${u.total})` : \"\";\n reportExperimentProgress({ experimentId, detail: `${u.message}${suffix}` });\n },\n diagnostic: (input) => {\n reportDiagnostic({\n key: input.dedupeKey ?? `${input.code}:experiment:${experimentId}`,\n code: input.code,\n severity: input.level,\n message: input.message,\n data: { experimentId, ...(input.data ?? {}) },\n });\n recordExperimentDiagnostic({\n experimentId: run.experimentId,\n code: input.code,\n level: input.level,\n message: input.message,\n phase: \"experiment.teardown\",\n ...(input.data !== undefined ? { data: input.data } : {}),\n ...(input.dedupeKey !== undefined ? { dedupeKey: input.dedupeKey } : {}),\n });\n },\n };\n yield* cleanupCallback(() => run.teardown!(recoveryCtx)).pipe(Effect.matchEffect({\n onSuccess: () => Effect.sync(() => {\n reportExperimentHook({\n experimentId,\n hook: \"teardown\",\n status: \"done\",\n durationMs: Date.now() - startedAt,\n recovery: true,\n });\n }),\n onFailure: (error) => Effect.sync(() => {\n reportExperimentHook({\n experimentId,\n hook: \"teardown\",\n status: \"failed\",\n durationMs: Date.now() - startedAt,\n recovery: true,\n });\n const message = t(\"runner.experimentTeardownFailed\", {\n experimentId,\n message: error instanceof Error ? error.message : String(error),\n }).trimEnd();\n reportDiagnostic({\n key: `experiment-teardown-failed:${experimentId}`,\n code: \"experiment-teardown-failed\",\n severity: \"warning\",\n message,\n data: { experimentId },\n });\n recordExperimentDiagnostic({\n experimentId: run.experimentId,\n code: \"experiment-teardown-failed\",\n level: \"warning\",\n message,\n phase: \"experiment.teardown\",\n });\n }),\n }));\n }\n });\n });\n const ensureExperimentSetup = (a: Attempt): Effect.Effect<void, unknown> => {\n const cell = expLifecycles.get(a.run)!;\n return Effect.uninterruptibleMask((restore) => cell.mutex.withPermits(1)(Effect.gen(function* () {\n const current = cell.state;\n if (current._tag === \"Active\" || current._tag === \"TearingDown\")\n return current.setup;\n if (current._tag === \"TornDown\")\n return undefined;\n if (current._tag === \"UntriggeredComplete\") {\n return yield* Effect.die(new Error(\"Experiment lifecycle cannot be triggered after all attempts settled.\"));\n }\n const run = a.run;\n const experimentId = run.experimentId ?? run.agent.name;\n const completion = yield* Deferred.make<void, unknown>();\n // 先写 Active、再登记和启动 worker:随后任何 attempt 或强清都会复用同一个 Effect 完成点。\n cell.state = {\n _tag: \"Active\",\n pendingAttempts: current.pendingAttempts,\n setup: { _tag: \"InProgress\", completion },\n };\n if (run.teardown) {\n yield* registerExperimentTeardown(experimentId, () => runExperimentTeardown(run, cell));\n }\n let setupStartedAt: number | undefined;\n const setupBody = Effect.gen(function* () {\n // 上一进程的遗留收尾先补做,再原子写入本次登记;两步都先于 setup。\n if (run.teardown && run.experimentId) {\n yield* recoverOrphanedTeardownRegistration(run, experimentId);\n yield* writeTeardownRegistrationEffect(coordinationRoot, {\n experimentId: run.experimentId,\n selectedEvalIds: run.selectedEvalIds,\n pid: process.pid,\n host: currentHost,\n startedAt: new Date().toISOString(),\n }).pipe(Effect.catchAll((error) => Effect.sync(() => {\n const message = t(\"runner.teardownRegistrationWriteFailed\", {\n experimentId,\n message: error instanceof Error ? error.message : String(error),\n }).trimEnd();\n reportDiagnostic({\n key: `teardown-registration-write-failed:${experimentId}`,\n code: \"teardown-registration-write-failed\",\n severity: \"warning\",\n message,\n data: { experimentId },\n });\n recordExperimentDiagnostic({\n experimentId: run.experimentId,\n code: \"teardown-registration-write-failed\",\n level: \"warning\",\n message,\n phase: \"experiment.setup\",\n });\n })));\n }\n if (!run.setup)\n return;\n setupStartedAt = Date.now();\n reportExperimentHook({ experimentId, hook: \"setup\", status: \"started\" });\n const ctx = makeExperimentHookContext(run, \"experiment.setup\");\n const value = yield* Effect.tryPromise({\n try: () => Promise.resolve().then(() => run.setup!(ctx)),\n catch: (error) => error,\n });\n const returned = value as unknown;\n if (typeof returned === \"function\") {\n // tsx 旧式 setup cleanup 只在 author callback 边界适配;主错误说明迁移方向。\n yield* cleanupCallback(returned as () => unknown).pipe(Effect.catchAll(() => Effect.void));\n return yield* Effect.fail(new Error(t(\"runner.setupReturnedCleanup\", {\n layer: `ExperimentDef.setup (${experimentId})`,\n hint: \"ExperimentDef.teardown\",\n }).trimEnd()));\n }\n reportExperimentHook({\n experimentId,\n hook: \"setup\",\n status: \"done\",\n durationMs: Date.now() - (setupStartedAt ?? Date.now()),\n });\n });\n const setupWorker = setupBody.pipe(Effect.matchEffect({\n onSuccess: () => replaceSetup(cell, { _tag: \"Succeeded\" }),\n onFailure: (error) => Effect.sync(() => {\n reportExperimentHook({\n experimentId,\n hook: \"setup\",\n status: \"failed\",\n durationMs: Date.now() - (setupStartedAt ?? Date.now()),\n });\n }).pipe(Effect.zipRight(replaceSetup(cell, {\n _tag: \"Failed\",\n error: { ...errorFromThrown(error, \"experiment.setup\"), code: \"experiment-setup-failed\" },\n }))),\n }), Effect.onExit((exit) => {\n const recordUnexpectedExit = Exit.isFailure(exit)\n ? replaceSetup(cell, {\n _tag: \"Failed\",\n error: {\n ...errorFromThrown(Cause.squash(exit.cause), \"experiment.setup\"),\n code: \"experiment-setup-failed\",\n },\n })\n : Effect.void;\n return recordUnexpectedExit.pipe(Effect.zipRight(Deferred.done(completion, exit)), Effect.asVoid);\n }));\n yield* restore(setupWorker).pipe(Effect.forkIn(invocationScope));\n return cell.state.setup;\n })).pipe(Effect.flatMap((setup) => setup === undefined ? Effect.void : restore(awaitSetup(setup)))));\n };\n // 自愈是「选中实验」的启动期职责,不是首个派发 attempt 的副作用:全携带使 attempts 为空时,\n // 仍必须补上上一进程强杀遗留的收尾。无 teardown 的新定义无法安全补执行,交由 CLI 提醒。\n const recoveredExperimentIds = new Set<string>();\n for (const run of effectiveAgentRuns) {\n if (!run.experimentId || !run.teardown || recoveredExperimentIds.has(run.experimentId))\n continue;\n recoveredExperimentIds.add(run.experimentId);\n yield* recoverOrphanedTeardownRegistration(run, run.experimentId);\n }\n const settleExperimentAttempt = (a: Attempt): Effect.Effect<void, unknown> => {\n const cell = expLifecycles.get(a.run)!;\n return cell.mutex.withPermits(1)(Effect.sync(() => {\n const state = cell.state;\n if (state._tag === \"UntriggeredComplete\")\n return false;\n const pendingAttempts = new Set(state.pendingAttempts);\n pendingAttempts.delete(a);\n if (state._tag === \"Dormant\") {\n cell.state = pendingAttempts.size === 0\n ? { _tag: \"UntriggeredComplete\" }\n : { _tag: \"Dormant\", pendingAttempts };\n return false;\n }\n if (state._tag === \"Active\") {\n cell.state = { ...state, pendingAttempts };\n return pendingAttempts.size === 0;\n }\n cell.state = { ...state, pendingAttempts };\n return false;\n })).pipe(Effect.flatMap((startTeardown) => startTeardown ? runExperimentTeardown(a.run, cell) : Effect.void));\n };\n // ─────────────────────── 派发许可链(docs/runner.md「调度:有界并发」) ───────────────────────\n // 一条 attempt 要真正开跑,顺序通过四道许可,顺序本身是契约:\n // ① 止损闸(checkDispatchHalt)→ ② 实验闸(跨 Invocation 逐槽租约)→ ③ 全局并发位\n // → ④ 派发时刻非阻塞试锁(用例锁)→ preflight → body\n // ②③ 是资源许可,④ 是「这条用例归谁跑」的仲裁。撞上别人持有的新鲜锁时,④ 立刻把 ③ 和 ②\n // 都还回去(不还就会拿着实验闸名额干等持锁方——同一实验的名额域跨 Invocation 共用,\n // maxConcurrency: 1 下这是必然死锁),该用例转 elsewhere 挂起,腾出的位子由排队中的下一条\n // attempt 接手;锁释放/过期后重查携带,仍要自跑的那些从 ① 重新走一遍这条链。\n /**\n * 一把止损闸(docs/feature/error-classification/architecture.md「止损执行体」)。粒度两级:\n * 每个 experiment 一把实验闸,每个 (experiment, eval) 一把 eval 闸;实验闸落下**蕴含**该实验\n * 全部 eval 闸——检查点同时读两把,不做物理级联(eval 闸的数量随选择集变化,级联要遍历,\n * 蕴含只要多读一个字段)。\n *\n * 两个状态载体各有不可替代的角色,不是同一件事的两份副本:\n * - `latch`:`Effect.unsafeMakeLatch(false)`,落闸 = `unsafeOpen()`。`open` 幂等且不可回退,\n * 「落闸幂等、invocation 内不可逆」因此是结构保证而不是调用方自律;`latch.await` 同时是\n * 「等到这把闸落下」的 Effect,给等在全局并发位上的 fiber 当中止信号(见 withGlobalSlot)。\n * - `halted`:同步读的镜像。派发检查点在每轮循环开头问一次,不能为此付一次 await\n * (`Effect.Latch` 没有同步状态读)。恒在 `unsafeOpen()` 之前置位,两者不会互相领先。\n * 实验闸名额租约与撞用例锁后的 elsewhere 轮询都直接竞速 `latch.await`。这样止损只让等待\n * 成功收束;用户取消仍保留为 Effect interruption Cause,不再穿过 AbortSignal / Promise 边界。\n */\n interface HaltGate {\n readonly scope: \"eval\" | \"experiment\";\n /** 展示与折叠用的实验身份(裸 run 退回 agent 名,与 budgetKey / teardown 诊断同一口径)。 */\n readonly experimentId: string;\n /** 持久化用的真实 experimentId;裸 run 没有 Run 可挂,为 undefined。 */\n readonly persistedExperimentId: string | undefined;\n /** eval 闸才有。 */\n readonly evalId: string | undefined;\n /** 两条诊断通路共用的折叠键(= scope + evalId,契约见 architecture.md「诊断」)。 */\n readonly dedupeKey: string;\n readonly latch: Effect.Latch;\n halted: boolean;\n /** 被这把闸拦下、未派发的 attempt 数(进 InvocationCompletion.unstarted)。 */\n unstarted: number;\n /** 触发落闸的失败 message,即作者的修复提示;走完通知与诊断两条通路。 */\n message: string;\n /** 触发落闸的失败所在的生命周期阶段;`--json` 的 warning 事件从 data.phase 读它。 */\n phase: LifecyclePhase;\n }\n const haltGates = new Map<string, HaltGate>();\n const haltGateKey = (run: AgentRun, evalId: string | undefined): string => evalId === undefined\n ? `dispatch-halted:experiment:${run.experimentId ?? run.agent.name}`\n : `dispatch-halted:eval:${run.experimentId ?? run.agent.name}|${evalId}`;\n const haltGateOf = (run: AgentRun, evalId: string | undefined): HaltGate => {\n const dedupeKey = haltGateKey(run, evalId);\n let gate = haltGates.get(dedupeKey);\n if (!gate) {\n gate = {\n scope: evalId === undefined ? \"experiment\" : \"eval\",\n experimentId: run.experimentId ?? run.agent.name,\n persistedExperimentId: run.experimentId,\n evalId,\n dedupeKey,\n latch: Effect.unsafeMakeLatch(false),\n halted: false,\n unstarted: 0,\n message: \"\",\n phase: \"eval.run\",\n };\n haltGates.set(dedupeKey, gate);\n }\n return gate;\n };\n // 闸预先建好(而不是落闸那一刻懒建):等待中的 fiber 要能先订阅 latch / abort,懒建会让\n // 「先开始等、后落闸」的 attempt 订阅到一个已经被换掉的对象上,永远等不到中止。\n for (const a of attempts) {\n haltGateOf(a.run, undefined);\n haltGateOf(a.run, a.evalDef.id);\n }\n /** 这条 attempt 头上的两把闸,实验闸在前(蕴含关系:实验闸落下即视为本 eval 也落闸)。 */\n const haltGatesOf = (a: Attempt): readonly [\n HaltGate,\n HaltGate\n ] => [\n haltGateOf(a.run, undefined),\n haltGateOf(a.run, a.evalDef.id),\n ];\n /**\n * 止损闸检查点:「这条 attempt 是否被作者声明的止损闸拦下」。落闸后本 eval / 本实验剩余\n * attempt 不再派发,计入 `unstarted`、完成状态落 `incomplete`(契约见\n * docs/feature/error-classification/README.md「自愈阶梯与止损阶梯」)。\n *\n * 每轮循环都会重新问一次:挂起在 elsewhere 的用例被唤醒后同样先过这道闸,不会绕开已经落下\n * 的闸重新入场。检查点存在良性竞态——闸落下的瞬间可能有 attempt 已越过检查、照常跑完,\n * 代价是多烧一个沙箱,不为它引入额外互斥(architecture.md「派发」)。\n */\n const checkDispatchHalt = (a: Attempt): {\n halted: false;\n } | {\n halted: true;\n scope: \"eval\" | \"experiment\";\n gate: HaltGate;\n } => {\n const [experimentGate, evalGate] = haltGatesOf(a);\n if (experimentGate.halted)\n return { halted: true, scope: \"experiment\", gate: experimentGate };\n if (evalGate.halted)\n return { halted: true, scope: \"eval\", gate: evalGate };\n return { halted: false };\n };\n /** 「等到这条 attempt 头上任一把闸落下」;给 Effect 世界的等待(全局并发位)当中止信号。 */\n const haltAwait = (a: Attempt): Effect.Effect<void> => {\n const [experimentGate, evalGate] = haltGatesOf(a);\n return Effect.raceFirst(experimentGate.latch.await, evalGate.latch.await);\n };\n /**\n * 运行期即时通知:反馈流一条 error 级通知(architecture.md「观察面」的落闸形态)。与持久化的\n * `dispatch-halted` 诊断**同源互不派生**——两条通路各自从同一份 gate 状态取值,谁都不是谁的\n * 派生物。`data.unstarted` 随未派发数增长刷新(reducer 的 upsert 用最新 data 覆盖、count 自增),\n * cli.ts 的 assembleInvocationCompletion 读它折成 InvocationCompletion.unstarted。\n */\n const reportHaltNotice = (gate: HaltGate): void => {\n reportDiagnostic({\n key: gate.dedupeKey,\n // 稳定词法与持久化侧同一个字面量;折叠到哪一条实验 / 用例由 dedupeKey 与 data 的\n // experimentId / evalId 回答,不编进 code(见 sink.ts 的 DiagnosticInput.code)。\n code: HALT_DIAGNOSTIC_CODE,\n severity: \"error\",\n message: t(gate.scope === \"experiment\" ? \"runner.dispatchHaltedExperiment\" : \"runner.dispatchHaltedEval\", { message: gate.message }).trimEnd(),\n data: {\n experimentId: gate.experimentId,\n scope: gate.scope,\n ...(gate.evalId !== undefined ? { evalId: gate.evalId } : {}),\n phase: gate.phase,\n unstarted: gate.unstarted,\n },\n });\n };\n /**\n * 落闸:attempt 封口的空间轴回执携带超出 `\"attempt\"` 的 scope 时调用(唯一入口)。\n * 幂等——并发 attempt 同时声明同一死因是常态,重复触发只折叠两条通路的诊断计数;不可逆——\n * latch 只开不关,在飞 attempt 之后成功也不重开派发;不抢占——本函数只置状态,不碰任何\n * 已经在跑的 attempt。\n */\n const closeHaltGate = (a: Attempt, declaration: AttemptFailureDeclaration): void => {\n const scope = declaration.class.scope;\n if (scope !== \"eval\" && scope !== \"experiment\")\n return; // 缺省档:死因只属于本次执行,无闸可落\n const gate = haltGateOf(a.run, scope === \"experiment\" ? undefined : a.evalDef.id);\n const message = firstLine(declaration.text);\n // 持久化通路:按 dedupeKey 折叠成一条 dispatch-halted(docs 的形状),落进该 Experiment 的\n // run.json。裸 run 没有 Run 可挂,recordExperimentDiagnostic 自己丢弃。\n recordExperimentDiagnostic({\n experimentId: gate.persistedExperimentId,\n code: HALT_DIAGNOSTIC_CODE,\n level: \"error\",\n message,\n phase: declaration.phase,\n dedupeKey: gate.dedupeKey,\n data: { scope, ...(gate.evalId !== undefined ? { evalId: gate.evalId } : {}) },\n });\n if (!gate.halted) {\n gate.message = message;\n gate.phase = declaration.phase;\n gate.halted = true; // 同步镜像先置位,再开 latch:两者不会互相领先\n gate.latch.unsafeOpen();\n }\n reportHaltNotice(gate);\n };\n /**\n * 未派发记账:与 run 级 fail-fast / budget 停派发同一条通路——每个未派发 attempt 各发一次\n * `attempt:early-exit`(queued → completed,反馈层五项计数守恒),再把当次累计的未派发数刷进\n * 同一条 `dispatch-halted` 诊断。不为没跑过的 attempt 制造 `errored` 记录(architecture.md\n * 「记账」);退出码由观察到失败的那条 `errored` attempt 判红。\n */\n const accountDispatchHalted = (a: Attempt, gate: HaltGate): void => {\n recordCoordinator.markNotDispatched(a);\n gate.unstarted += 1;\n reportAttemptLifecycle({\n type: \"attempt:early-exit\",\n at: Date.now(),\n identity: feedbackIdentity(a),\n who: feedbackWho(a),\n });\n reportHaltNotice(gate);\n };\n /**\n * Eval Group 的不可用策略只约束同一台物理 Sandbox 的后续槽位;它不复用通用\n * dispatch-halted 语义,也绝不把「本来没开始」的槽位伪造成 EvalResult。Group lane\n * 已按规范化 Eval ID 串行,所以 gate 只需同步镜像:前一槽位释放 predecessor 后,下一\n * 槽位在任何 Build / Sandbox 动作前就能看见它。其它 Group 和其它 Experiment 没有共享它。\n */\n interface EvalGroupUnavailableGate {\n readonly experimentId: string | undefined;\n readonly displayExperimentId: string;\n readonly groupId: string;\n readonly onUnavailable: \"stop-group\" | \"replace-sandbox\";\n readonly dedupeKey: string;\n readonly failuresByPhase: Map<\"sandbox.create\" | \"sandbox.prepare\" | \"sandbox.reset\", number>;\n stopped: boolean;\n unstarted: number;\n /** Physical stage is more precise than the closed public LifecyclePhase vocabulary. */\n stage: \"sandbox.create\" | \"sandbox.prepare\" | \"sandbox.reset\";\n /** Durable diagnostic origin stays within the public lifecycle vocabulary. */\n phase: LifecyclePhase;\n message: string;\n }\n const evalGroupUnavailableGates = new Map<string, EvalGroupUnavailableGate>();\n const evalGroupUnavailableGateOf = (a: Attempt): EvalGroupUnavailableGate | undefined => {\n const group = a.evalDef.evalGroup;\n if (group === undefined)\n return undefined;\n const key = JSON.stringify([a.run.experimentId ?? a.run.agent.name, a.run.agent.name, group.id]);\n let gate = evalGroupUnavailableGates.get(key);\n if (gate === undefined) {\n gate = {\n experimentId: a.run.experimentId,\n displayExperimentId: a.run.experimentId ?? a.run.agent.name,\n groupId: group.id,\n onUnavailable: group.onUnavailable,\n dedupeKey: `eval-group-unavailable:${a.run.experimentId ?? a.run.agent.name}|${group.id}`,\n failuresByPhase: new Map(),\n stopped: false,\n unstarted: 0,\n stage: \"sandbox.create\",\n phase: \"sandbox.create\",\n message: \"\",\n };\n evalGroupUnavailableGates.set(key, gate);\n }\n return gate;\n };\n // 预建 gate 和 stop-halt 一样避免「上一槽位刚刚失败、下一槽位已开始等」的换对象竞态。\n for (const a of attempts)\n evalGroupUnavailableGateOf(a);\n const reportEvalGroupUnavailable = (gate: EvalGroupUnavailableGate): void => {\n const message = `Eval Group ${JSON.stringify(gate.groupId)} is unavailable at ${gate.stage}: ${gate.message}`;\n const data = {\n experimentId: gate.displayExperimentId,\n evalGroupId: gate.groupId,\n onUnavailable: gate.onUnavailable,\n phase: gate.stage,\n unstarted: gate.unstarted,\n } as const;\n reportDiagnostic({\n key: gate.dedupeKey,\n code: \"eval-group-unavailable\",\n severity: \"error\",\n message,\n data,\n });\n recordExperimentDiagnostic({\n experimentId: gate.experimentId,\n code: \"eval-group-unavailable\",\n level: \"error\",\n message,\n phase: gate.phase,\n data,\n dedupeKey: gate.dedupeKey,\n });\n };\n /**\n * stop-group 首次物理失败即封住后续 slot。replace-sandbox 留一次机会给**下一** slot;\n * 池的 retire/create 路径完成替换,绝不回跑已经付出成本的 Attempt。同一 lifecycle\n * 阶段第二次失败说明替换也不可用,此时收束该 Group。\n */\n const recordEvalGroupPhysicalFailure = (a: Attempt, phase: \"sandbox.create\" | \"sandbox.prepare\" | \"sandbox.reset\", error: unknown): void => {\n const gate = evalGroupUnavailableGateOf(a);\n if (gate === undefined || gate.stopped)\n return;\n const failures = (gate.failuresByPhase.get(phase) ?? 0) + 1;\n gate.failuresByPhase.set(phase, failures);\n const mustStop = gate.onUnavailable === \"stop-group\" || failures >= 2;\n if (!mustStop) {\n reportDiagnostic({\n key: `eval-group-replacing-sandbox:${gate.displayExperimentId}|${gate.groupId}|${phase}`,\n code: \"eval-group-replacing-sandbox\",\n severity: \"warning\",\n message: `Eval Group ${JSON.stringify(gate.groupId)} will replace its physical Sandbox before a later slot ` +\n `after ${phase} failed: ${firstLine(error instanceof Error ? error.message : String(error))}`,\n data: { experimentId: gate.displayExperimentId, evalGroupId: gate.groupId, phase, onUnavailable: gate.onUnavailable },\n });\n return;\n }\n gate.stopped = true;\n gate.stage = phase;\n gate.phase = phase === \"sandbox.reset\" ? \"sandbox.cleanup\" : phase;\n gate.message = firstLine(error instanceof Error ? error.message : String(error));\n reportEvalGroupUnavailable(gate);\n };\n const accountEvalGroupUnavailable = (a: Attempt, gate: EvalGroupUnavailableGate): void => {\n gate.unstarted += 1;\n cancelReuseAttempt(a);\n // No result, no replacement: this slot never crossed the dispatch boundary.\n reportAttemptLifecycle({\n type: \"attempt:early-exit\",\n at: Date.now(),\n identity: feedbackIdentity(a),\n who: feedbackWho(a),\n });\n reportEvalGroupUnavailable(gate);\n };\n const lockIdentity = { pid: process.pid, host: currentHost };\n // 用例锁(docs/feature/experiments/architecture.md「并发 Invocation:用例锁」):按\n // (experimentId, evalId) 给这批已经确定要真实派发的 attempt 分组——被静态携带筛掉的组合\n // 从不出现在 attempts[] 里,天然满足「全携带用例不取锁」;裸 run(无 experimentId)不接入。\n // 一组(runs > 1 的兄弟 attempt)共享同一把锁:谁先到派发时刻谁试,自己已持有的直接放行,\n // 别人持有则全体挂在同一个等待窗口上,不重复试锁、不各自轮询。\n /** 一次非阻塞试锁的结论。`busy` 直接带出这一条用例的挂起窗口——「发现撞锁」与「挂进哪个\n * 窗口」必须是同一步:分成两步的话,兄弟 attempt 归还许可的那几个 microtask 里窗口可能\n * 已经解决并重新取到锁,它再去建窗口就会读到**自己**的新鲜锁、永久等下去。 */\n type CaseLockTry = {\n kind: \"acquired\";\n } | {\n kind: \"busy\";\n window: Effect.Effect<void>;\n };\n interface CaseLockState {\n experimentId: string;\n evalId: string;\n /** 本用例这次计划的全部 attempt;持有者一次认领它们全部,不按 attempt 拆锁。 */\n group: Attempt[];\n /** 还没收尾的 attempt 序号——`lock_wait` 的计数与「锁还留不留」都读它。 */\n pending: Set<number>;\n /** 本进程此刻持有的锁;undefined = 没持有(还没试 / 撞锁挂起中)。 */\n claim?: CaseLockEffectClaim;\n /** 同组兄弟只允许一条 fiber 做磁盘试锁;后到者在临界区内重读 claim / suspension。 */\n acquireMutex: Effect.Semaphore;\n /** 在飞的挂起窗口:撞锁的兄弟全体等同一个 Deferred。 */\n suspension?: Effect.Effect<void>;\n /** 已经用 `lock_wait started` 报进 `elsewhere`、还没被 `resolved` 报出来的 attempt 数。\n * 五项恒等式要求「报进去多少条就要报出来多少条」:收尾时不能拿当下的 `pending.size`\n * 当迁移数——等待期间被中断而提前 settle 的 attempt 会让 `pending` 缩水,差额就永远\n * 挂在 `elsewhere` 上。 */\n inElsewhere: number;\n }\n const caseLocks = new Map<string, CaseLockState>();\n const caseClaimsAwaitingPublication: CaseLockEffectClaim[] = [];\n for (const a of attempts) {\n if (!a.run.experimentId)\n continue;\n const key = cacheKey(a.run, a.evalDef.id);\n let st = caseLocks.get(key);\n if (!st) {\n st = {\n experimentId: a.run.experimentId,\n evalId: a.evalDef.id,\n group: [],\n pending: new Set<number>(),\n acquireMutex: yield* Effect.makeSemaphore(1),\n inElsewhere: 0,\n };\n caseLocks.set(key, st);\n }\n st.group.push(a);\n st.pending.add(a.attempt);\n }\n const caseStateOf = (a: Attempt): CaseLockState | undefined => a.run.experimentId ? caseLocks.get(cacheKey(a.run, a.evalDef.id)) : undefined;\n /**\n * A late on-disk result cannot become a V1 carried Member in this invocation:\n * the writer's frozen view did not receive an exact source capability during\n * planning. Keep the lock protocol's `resolved` accounting, but dispatch all\n * still-pending Slots normally instead of guessing from legacy result files.\n */\n const resolveCaseWaitWithoutCarry = (st: CaseLockState, waitStartedAt: number | undefined): void => {\n const { experimentId, evalId } = st;\n // 这个窗口当初报进 elsewhere 的条数,收尾必须原数报回来(见 CaseLockState.inElsewhere)。\n const inElsewhere = st.inElsewhere;\n st.inElsewhere = 0;\n if (waitStartedAt === undefined) {\n return;\n }\n // 真实挂起窗口收尾:carried + dispatched 恒等于 \"started\" 报进去的 attempts,这条\n // 恒等式是 elsewhere 不挂账的唯一保证(reducer 只按事件携带的数字增减,不自己推)。\n reportLockWait({\n experimentId,\n evalId,\n status: \"resolved\",\n carried: 0,\n dispatched: inElsewhere,\n waitedMs: Date.now() - waitStartedAt,\n });\n };\n /**\n * 撞新鲜锁后的挂起窗口:这一条用例转 `elsewhere`(不占全局并发位、不占实验闸名额),每个\n * 心跳周期重读一次锁文件;锁消失(正常释放)或过期(可接管)即结束等待并重查携带。等待没有\n * 超时——心跳新鲜就一直等,用户中断照常退出。同组兄弟共享同一个窗口。\n */\n const suspendUntilCaseFree = (st: CaseLockState, holder: CaseLockRecord) => Effect.uninterruptibleMask((restore) => Effect.gen(function* () {\n if (st.suspension)\n return st.suspension;\n const startedAt = Date.now();\n // 等待期间本 eval / 本实验的止损闸落下 → 这一轮等待到头(对方可能还要跑很久,没必要陪着)。\n // 窗口照常走完 resolveCaseWaitWithoutCarry 并发出 `lock_wait resolved`:少发一次 resolved,这批 attempt 就\n // 永远挂在 elsewhere 上,五项恒等式当场破。\n const halt = haltAwait(st.group[0]!);\n const stopWaiting = opts.signal === undefined\n ? halt\n : Effect.raceFirst(halt, interruptOnAbort(opts.signal));\n // 窗口打开这一刻本组还没派发的 attempt 全在 queued(本进程没持锁 = 没有一条开跑),\n // 整批迁进 elsewhere;记下条数,收尾的 resolved 原数迁回(见 CaseLockState.inElsewhere)。\n st.inElsewhere = st.pending.size;\n reportLockWait({\n experimentId: st.experimentId,\n evalId: st.evalId,\n status: \"started\",\n holderPid: holder.pid,\n holderHost: holder.host,\n attempts: st.inElsewhere,\n });\n const poll = Effect.gen(function* () {\n for (;;) {\n const stopped = yield* Effect.raceFirst(Effect.sleep(CASE_LOCK_HEARTBEAT_INTERVAL_MS).pipe(Effect.as(false)), stopWaiting.pipe(Effect.as(true)));\n if (stopped)\n return;\n const record = yield* readCaseLockEffect(coordinationRoot, st.experimentId, st.evalId).pipe(Effect.catchAll(() => Effect.succeed(undefined)));\n if (record === undefined || isCaseLockExpired(record, Date.now()))\n return;\n }\n }).pipe(Effect.ensuring(Effect.sync(() => resolveCaseWaitWithoutCarry(st, startedAt))));\n // 等待本身就是挂起窗口。它不绑定刚归还的全局位 Scope;同组后到者拿到同一 Effect,\n // 每个等待者都可被取消,而任一一次完成都会清掉下一轮重新试锁所读的窗口。\n const window: Effect.Effect<void> = poll.pipe(Effect.ensuring(Effect.sync(() => {\n if (st.suspension === window)\n st.suspension = undefined;\n })));\n st.suspension = window;\n return window;\n }));\n /**\n * 派发时刻的一次**非阻塞**试锁。调用直接留在当前 Effect fiber;`onWaitStart` 只用一个局部\n * AbortController 截断 lock.ts 的轮询,把「新鲜锁」转换成 elsewhere,而用户取消仍沿当前\n * fiber 的 interruption Cause 上抛。撞上过期锁属于一次尝试内部的 rename 接管,照常 acquired。\n */\n const tryAcquireCase = (st: CaseLockState) => st.acquireMutex.withPermits(1)(Effect.suspend(() => {\n // 同组兄弟:自己已持有,直接放行。\n if (st.claim)\n return Effect.succeed<CaseLockTry>({ kind: \"acquired\" });\n // 已经有兄弟挂在窗口上:全体等同一个窗口,不重复试锁。\n if (st.suspension)\n return Effect.succeed<CaseLockTry>({ kind: \"busy\", window: st.suspension });\n return Effect.gen(function* () {\n const { experimentId, evalId } = st;\n // 接管诊断要报\"原持有者是谁\",但 acquireCaseLockEffect 只回传 takenOver 布尔值——取锁前先\n // 无副作用地读一眼当前记录(纯尽力而为:极端时序下这份快照可能已经不是真正被接管的\n // 那条记录,但诊断本来就是人读提示,不是判定依据)。\n const priorHolder = yield* readCaseLockEffect(coordinationRoot, experimentId, evalId).pipe(Effect.catchAll(() => Effect.succeed(undefined)));\n const giveUp = new AbortController();\n let busyWith: CaseLockRecord | undefined;\n return yield* Effect.uninterruptibleMask((restore) => restore(acquireCaseLockEffect(coordinationRoot, experimentId, evalId, lockIdentity, {\n signal: giveUp.signal,\n onWaitStart: (holder) => {\n busyWith = holder;\n giveUp.abort(); // 撞上新鲜锁 = 这次尝试到此为止,不进入 acquireCaseLockEffect 自己的轮询\n },\n })).pipe(Effect.matchEffect({\n onFailure: (error) => {\n const holder = busyWith;\n return holder === undefined\n ? Effect.fail(error)\n : suspendUntilCaseFree(st, holder).pipe(Effect.map((window): CaseLockTry => ({ kind: \"busy\", window })));\n },\n onSuccess: ({ claim, takenOver }) => Effect.sync((): CaseLockTry => {\n // acquire 返回到 claim 登记之间保持 masked;否则恰好落在这条缝里的 interruption\n // 会让 heartbeat/held 已启动、CaseLockState 却没有 release 句柄。\n st.claim = claim;\n if (takenOver) {\n const message = t(\"runner.coordinationRecovered\", { experimentId }).trimEnd();\n reportDiagnostic({\n key: `${COORDINATION_RECOVERED_CODE}:case-lock:${experimentId}|${evalId}`,\n code: COORDINATION_RECOVERED_CODE,\n severity: \"info\",\n message,\n data: {\n experimentId,\n evalId,\n resource: \"case-lock\",\n ...(priorHolder !== undefined ? { previousPid: priorHolder.pid, previousHost: priorHolder.host } : {}),\n },\n });\n }\n // V1 does not convert late legacy rows into carried Members. The frozen writer view is\n // authoritative, so a lock acquired after another Invocation left still dispatches every pending Slot.\n resolveCaseWaitWithoutCarry(st, undefined);\n return { kind: \"acquired\" };\n }),\n })));\n });\n }));\n /** 用例全部 attempt(不论真实派发还是被重查携带命中而跳过)都 settle 后删锁;与\n * ExperimentLifecycle.pendingAttempts 清空触发 teardown 同一种「逐 attempt 身份结算」模式。 */\n const releaseCaseLockIfDone = (st: CaseLockState, attempt: number): Effect.Effect<void> => Effect.sync(() => {\n st.pending.delete(attempt);\n if (st.pending.size > 0)\n return undefined;\n const claim = st.claim;\n st.claim = undefined;\n return claim;\n }).pipe(Effect.tap((claim) => Effect.sync(() => {\n if (claim !== undefined)\n caseClaimsAwaitingPublication.push(claim);\n })));\n /**\n * 实验闸的取位:声明了 `maxConcurrency` 的实验从**跨 Invocation 共用**的逐槽租约取名额\n * (gate-lease.ts);未声明的实验不走租约、不产生任何跨进程协调。取位在全局位之前——等名额\n * 的 attempt 不占别的实验的并发位。返回 undefined 表示等待期间被中断,这条 attempt 就此放弃。\n */\n /**\n * 撞满实验闸名额时报一条 info:名额域跨 Invocation,所以「等」的对象是别的进程,用户无从\n * 从本进程的面板推断。生效名额与本次声明分开报——两者不等就是 min-N 夹低了(别的运行声明了\n * 更小的 maxConcurrency),这是「我明明写了 3 却只跑 1 条」的唯一解释,不说清就只能去翻锁目录。\n * 按实验折叠:同一实验的一堆 attempt 会前后脚撞上同一批持有者,不该刷屏。\n */\n const reportGateLeaseWait = (experimentId: string, declaredN: number, holders: readonly GateLeaseRecord[]): void => {\n const effectiveN = holders.reduce((n, h) => Math.min(n, h.declaredN), declaredN);\n const who = [...new Set(holders.map((h) => `pid ${h.pid}@${h.host}`))].join(\", \") || \"another run\";\n reportDiagnostic({\n key: `gate-lease-waiting:${experimentId}`,\n code: \"gate-lease-waiting\",\n severity: \"info\",\n message: t(\"runner.gateLeaseWaiting\", { experimentId, effectiveN, declaredN, holders: who }).trimEnd(),\n data: { experimentId, effectiveN, declaredN },\n });\n };\n const acquireGateLease = (experimentId: string, maxConcurrency: number): Effect.Effect<GateLeaseEffectClaim, unknown> => Effect.uninterruptibleMask((restore) => restore(acquireGateSlotEffect(coordinationRoot, experimentId, maxConcurrency, lockIdentity, {\n // 撞满名额只发生在「别的 Invocation 正占着这个实验的位子」——本进程自己的并发早被\n // gateLocalSems 挡在这一层之前了。不报的话面板就只剩 `0 running · N queued` 干等,\n // 看不出在等什么、等谁,也看不出生效名额被对方更小的声明夹低了(min-N)。\n onWaitStart: (holders) => reportGateLeaseWait(experimentId, maxConcurrency, holders),\n })).pipe(Effect.map(({ claim, takenOver, takenOverFrom }) => {\n if (takenOver) {\n const message = t(\"runner.coordinationRecovered\", { experimentId }).trimEnd();\n reportDiagnostic({\n key: `${COORDINATION_RECOVERED_CODE}:concurrency-slot:${experimentId}|${claim.slot}`,\n code: COORDINATION_RECOVERED_CODE,\n severity: \"info\",\n message,\n data: {\n experimentId,\n resource: \"concurrency-slot\",\n slot: claim.slot,\n ...(takenOverFrom !== undefined\n ? { previousPid: takenOverFrom.pid, previousHost: takenOverFrom.host }\n : {}),\n },\n });\n }\n return claim;\n })));\n /** 派发链一轮的结局:`done` = 这条 attempt 已经了结(跑完 / 被跳过 / 携入 / 中断),\n * `suspend` = 撞上别人持有的用例锁,许可全部归还、挂进 `window` 这个 elsewhere 窗口后重来,\n * `recheck` = 许可获取被止损闸打断,许可全部归还、回到许可链 ① 重新过闸(记账在那里做)。\n * `recheck` 只在闸已经落下时产生,循环顶因此必然收束,不会空转。 */\n type DispatchOutcome = {\n kind: \"done\";\n } | {\n kind: \"suspend\";\n window: Effect.Effect<void>;\n } | {\n kind: \"recheck\";\n };\n /** 全局并发位的显式持有句柄:`withPermits` 的作用域语义没法表达「中途让位、回来再拿」,\n * 而实验级 setup 要求让位(docs/runner.md「调度:有界并发」)。两个成员都\n * 幂等——让位后收尾 finalizer 不会重复归还,回来之后中断也只归还一次。 */\n interface GlobalSlotHold {\n readonly release: Effect.Effect<void>;\n readonly reacquire: Effect.Effect<void>;\n }\n const withGlobalSlot = <E, R>(haltSignal: Effect.Effect<void>, use: (slot: GlobalSlotHold) => Effect.Effect<DispatchOutcome, E, R>): Effect.Effect<DispatchOutcome, E, R> => Effect.uninterruptibleMask((restore) => {\n const state = { held: false };\n const release = Effect.suspend(() => state.held\n ? globalSem.release(1).pipe(Effect.map(() => {\n state.held = false;\n }))\n : Effect.void);\n const reacquire = Effect.suspend(() => state.held\n ? Effect.void\n : globalSem.take(1).pipe(Effect.map(() => {\n state.held = true;\n })));\n // 取位本身可中断(restore):Ctrl+C 不该被「等一个全局位」拖住;拿到之后的执行体同样\n // 可中断,只有归还挂在 ensuring 上,中断路径照样跑。\n //\n // 排队等位期间止损闸落下 → 竞速的 haltSignal 先到,这一轮不进场(交回 recheck,由许可链\n // ① 做未派发记账)。这是「等待集中同闸 attempt 经 interruption 中止」在 Effect 世界的落点;\n // 竞速只覆盖「还在等位」这一段——拿到位子那一刻竞速已结算,之后的执行体不再被抢占。\n // `ensuring(release)` 提到最外层(而不是只挂在拿到位子之后):极端时序下 take 已经成功、\n // 竞速却判 haltSignal 赢,位子照样归还,不泄漏一个全局名额。\n return Effect.raceFirst(restore(reacquire).pipe(Effect.as(true)), restore(haltSignal).pipe(Effect.as(false)))\n .pipe(Effect.flatMap((entered) => entered\n ? restore(use({ release, reacquire }))\n : Effect.succeed<DispatchOutcome>({ kind: \"recheck\" })), Effect.ensuring(release));\n });\n /**\n * 实验闸(② 道许可)的持有作用域:名额与 attempt **同生命周期**——从这里持有到执行体收尾\n * (teardown 链、沙箱销毁)之后才归还,turn 退避等内部等待一律不释放\n * (docs/runner.md「调度:有界并发」)。撞用例锁挂起是唯一的例外:那时执行体以 `suspend`\n * 正常返回,作用域退出、名额归还,挂起结束后重新取——挂起的用例不占名额,否则同实验的\n * 持锁方(可能就在另一条 Invocation 里)会被自己的等待方饿死。\n */\n const withExperimentGate = <E, R>(a: Attempt, use: Effect.Effect<DispatchOutcome, E, R>): Effect.Effect<DispatchOutcome, E | unknown, R> => {\n const { maxConcurrency, experimentId } = a.run;\n const localSem = gateLocalSems.get(a.run);\n if (maxConcurrency === undefined || localSem === undefined)\n return use;\n if (experimentId === undefined)\n return localSem.withPermits(1)(use);\n const leased = Effect.uninterruptibleMask((restore) => Effect.raceFirst(restore(acquireGateLease(experimentId, maxConcurrency)).pipe(Effect.map((claim) => ({ kind: \"acquired\" as const, claim }))), restore(haltAwait(a)).pipe(Effect.as({ kind: \"halted\" as const }))).pipe(Effect.flatMap((lease) => lease.kind === \"halted\"\n ? Effect.succeed<DispatchOutcome>({ kind: \"recheck\" })\n : restore(use).pipe(Effect.ensuring(lease.claim.release.pipe(Effect.ignore))))));\n return localSem.withPermits(1)(leased);\n };\n // earlyExit:为每个 key 各建一个 AbortController。某 attempt 通过或 errored 时 abort 它,\n // 让并发进行中的同 key attempt 通过 signal 尽早退出,而不只是等排队的才能被跳过。\n const evalAbortControllers = new Map<string, AbortController>();\n const recordFatalController = new AbortController();\n for (const a of attempts) {\n if (a.evalDef.evaluationKind === \"pass\" && a.run.earlyExit && !evalAbortControllers.has(a.key)) {\n evalAbortControllers.set(a.key, new AbortController());\n }\n }\n // 有界派发:forEach 的 worker 数就是 maxConcurrency,不先给全部 Slot 建 fiber。\n // worker 内仍按止损闸、实验闸、全局 permit、用例锁的顺序取得资源;退避可以占住\n // 这个有界 worker,避免为了补位再造一层无界 scheduler。\n // runAttemptEffect 只把「执行错误」收进 EvalResult.error(不 fail),\n // 但中断(Ctrl+C / kill)照常向上传播 —— 所以一条挂掉不会中断其它 attempt,而中断能停掉全部。\n //\n // signal:把 opts.signal 喂给 run → abort 触发根 fiber 中断 → forEach 中断所有子 fiber\n // → 每个 attempt 的 Sample 跑 release(sb.stop)→ 容器全部停掉(治孤儿)。Effect 保证\n // 所有 finalizer 跑完后才结算,所以下面 summarize 时容器已清理干净。\n //\n // 外部 AbortSignal 以一个 Effect interrupt race 接入本 Scope。中断仍返回 Exit,\n // 于是可以保留部分汇总;非中断缺陷照常向上交给 application edge。\n let interrupted = false;\n const dispatchEffect = Effect.forEach(attempts, (a) => {\n const budgetKey = a.run.experimentId ?? a.run.agent.name;\n const caseState = caseStateOf(a);\n // preflight:「要不要开始跑」的许可判断(首过即停 + budget 上限检查)。两类判断都是\n // 即时返回、不做任何等待,所以放在授位之后没有「占着全局并发槽位干等」的问题;放在\n // 派发时刻(而不是排队时刻)判,读到的是这一刻最新的通过集与已花费。\n const preflight = Effect.gen(function* () {\n // 首过即停:只由 passed 触发(errored 不中止其余样本,见 docs/feature/experiments/\n // architecture.md「调度接口」)。\n if (a.evalDef.evaluationKind === \"pass\" && a.run.earlyExit && passedKeys.has(a.key)) {\n cancelReuseAttempt(a);\n recordCoordinator.markNotDispatched(a);\n yield* reportMutex.withPermits(1)(emitReporterEvent(reporters, {\n type: \"invocation:earlyExit\",\n evalId: a.evalDef.id,\n experimentId: a.run.experimentId,\n }));\n reportAttemptLifecycle({\n type: \"attempt:early-exit\",\n at: Date.now(),\n identity: feedbackIdentity(a),\n who: feedbackWho(a),\n });\n return false;\n }\n // run 级 fail-fast:确定性错误(同一 code 在同一 key 连续复现)已识别 → 停止派发,\n // 未派发计入 unstarted(结论落 incomplete,不伪装成全绿;与首过即停互不混用)。\n const failFast = failFastKeys.get(a.key);\n if (failFast !== undefined) {\n cancelReuseAttempt(a);\n recordCoordinator.markNotDispatched(a);\n failFast.skipped += 1;\n reportAttemptLifecycle({\n type: \"attempt:early-exit\",\n at: Date.now(),\n identity: feedbackIdentity(a),\n who: feedbackWho(a),\n });\n reportDiagnostic({\n key: `fail-fast:${a.key}`,\n code: \"fail-fast\",\n severity: \"warning\",\n message: t(\"runner.failFast\", { evalId: a.evalDef.id, code: failFast.code }).trimEnd(),\n identity: feedbackIdentity(a),\n data: { evalId: a.evalDef.id, code: failFast.code, ...(a.run.experimentId ? { experimentId: a.run.experimentId } : {}) },\n });\n return false;\n }\n const budget = a.run.budget;\n if (budget !== undefined) {\n // 只看已完成 attempt 的实测花费(见上方 BudgetState 注释),到顶就跳过新 attempt,\n // 没到顶就立即放行——不等待、不做预测性节流。\n const s = budgetState(budgetKey);\n if (s.spent >= budget) {\n cancelReuseAttempt(a);\n recordCoordinator.markNotDispatched(a);\n if (!budgetReported.has(budgetKey)) {\n budgetReported.add(budgetKey);\n yield* reportMutex.withPermits(1)(emitReporterEvent(reporters, { type: \"invocation:budgetExceeded\", budget, spent: s.spent }));\n }\n // 反馈层:对每一个因预算到顶而不派发的 attempt 各发一次(与上面的\n // attempt:early-exit 同构),让 RunFeedbackState 的 queued/completed 计数与\n // cli.ts 的 assembleRunCompletion() 都能感知到「有 attempt 因预算未派发」——\n // 上面 emitReporterEvent 的 invocation:budgetExceeded 只对旧版 Reporter 接口每\n // budgetKey 报一次,不满足反馈层「每个未派发 attempt 各一条」的计数契约,两者\n // 独立并存。只在挂靠 experiment 时报(budget-exhausted 事件要求真实\n // experimentId;裸 run 不产出这类永久事件,与 locator 的省略规则一致)。\n if (a.run.experimentId) {\n s.unstartedCount += 1;\n reportBudgetExhausted({\n experimentId: a.run.experimentId,\n spent: s.spent,\n unstarted: s.unstartedCount,\n });\n }\n return false;\n }\n }\n return true;\n });\n // body:许可链全部通过之后才跑,真正的执行段。\n const body = (_slot: GlobalSlotHold) => Effect.gen(function* () {\n // 合并全局信号与本 eval 的首过即停信号:任一 abort → 本 attempt 的信号 abort。\n const evalAc = evalAbortControllers.get(a.key);\n const attemptSignal = AbortSignal.any([\n recordFatalController.signal,\n ...(evalAc === undefined ? [] : [evalAc.signal]),\n ...(opts.signal === undefined ? [] : [opts.signal]),\n ]);\n // BuildKey / CaseKey 已在 Attempt.plan 的 physical completion state 中确定;\n // 这里只把协调器执行结果作为必填运行输入传给 materializer,不回写 Attempt。\n const buildLocators = buildLocatorsByPair.get(cacheKey(a.run, a.evalDef.id)) ?? new Map<BuildKey, JsonValue>();\n // 派发前的确定性失败(实验级 setup 失败 / 判分预检失败):不派发 agent、不建沙箱。\n // 这类 Slot 没有 origin Attempt,因而会使 V1 draft 保持 incomplete;不能为它\n // 伪造一个没有 sealed Assertions 的 Member。\n const expLc = expLifecycles.get(a.run);\n const setupFailure = expLc === undefined\n ? Option.none<AttemptError>()\n : (() => {\n const state = expLc.state;\n const outcome = state._tag === \"Active\" || state._tag === \"TearingDown\"\n ? setupOutcomeOf(state.setup)\n : state._tag === \"TornDown\"\n ? state.setup\n : undefined;\n if (outcome === undefined) {\n throw new Error(`Experiment setup has no outcome in lifecycle state ${state._tag}.`);\n }\n return outcome._tag === \"Failed\" ? Option.some(outcome.error) : Option.none<AttemptError>();\n })();\n const precheckFailure = judgePrecheckFailures.get(cacheKey(a.run, a.evalDef.id));\n const buildFailure = buildFailureByPair.get(cacheKey(a.run, a.evalDef.id));\n let blockedError: AttemptError | undefined = recordFatalController.signal.aborted\n ? {\n code: \"record-invocation-fatal\",\n message: \"A prior Record Attempt reservation failed; no further Attempt may start.\",\n origin: attemptOrigin(\"sandbox.queue\"),\n }\n : Option.isSome(setupFailure)\n ? setupFailure.value\n : precheckFailure !== undefined\n ? { code: \"judge-precheck-failed\", message: precheckFailure, origin: attemptOrigin(\"judge.precheck\") }\n : buildFailure !== undefined\n ? buildFailure\n : undefined;\n if (blockedError !== undefined)\n cancelReuseAttempt(a, true);\n // A scheduler-admitted Attempt owns a durable identity before any\n // attempt-owned sandbox, Agent, or Eval work begins. Reservation\n // failure is invocation-fatal at the Record publish gate.\n const initialPhase: LifecyclePhase = a.run.agent.kind === \"sandbox\" ? \"sandbox.queue\" : \"eval.run\";\n const reservationAttempted = blockedError === undefined;\n let reservedRecordAttempt: RunnerRecordAttempt | undefined;\n if (reservationAttempted) {\n const reservation = yield* Effect.either(recordCoordinator.reserveAttempt(a));\n if (Either.isLeft(reservation)) {\n recordFatalController.abort();\n blockedError = {\n ...errorFromThrown(reservation.left, initialPhase),\n code: \"record-attempt-reservation-failed\",\n };\n cancelReuseAttempt(a, true);\n }\n else {\n reservedRecordAttempt = reservation.right;\n a.locator = reservation.right.locator;\n }\n }\n yield* reportMutex.withPermits(1)(emitReporterEvent(reporters, {\n type: \"eval:start\",\n eval: { id: a.evalDef.id },\n agent: a.run.agent,\n model: a.run.model,\n attempt: a.attempt,\n experimentId: a.run.experimentId,\n }));\n // attempt:start 是这个 attempt 从 queued 移进 running 的唯一时刻(见\n // src/runner/feedback/reducer.ts 的 attempt:start 分支),必须与 eval:start 同一\n // 调用点、恰好发生一次 —— 否则 RunFeedbackState 的守恒计数会被破坏。phase 只是粗粒度\n // 占位(sandbox 型 attempt 恒为 sandbox.queue,一定正确;非 sandbox 型给\n // eval.run,attempt.ts 内部一旦跑到第一个真实边界会用 attempt:phase 立即纠正,见\n // attempt.ts 的 enterPhase)——attempt.ts 自己不再发 attempt:start,只发\n // attempt:phase,避免两处各发一次导致计数翻倍。\n reportAttemptLifecycle({\n type: \"attempt:start\",\n at: Date.now(),\n identity: feedbackIdentity(a),\n who: feedbackWho(a),\n phase: initialPhase,\n });\n const poolSelection: ReusePoolSelection = blockedError === undefined\n ? yield* reusePoolFor(a)\n : { _tag: \"Fresh\" };\n // 复用池的租借失败(实例创建、SandboxLayer setup 钩子、寿命确认都在池内)是**这条\n // attempt 的终局失败**,不是调度缺陷:失败原样交回这里,先读空间轴回执(作者在\n // setup 钩子里抛的 ExperimentFatalError 由此落闸),再折成 errored 结果走与\n // blockedError 完全相同的下游路径。\n // 拒绝必须经过具名 Effect 边界:否则会变成 defect 打断 forEach,连坐同批其它实验,\n // 且混进兄弟 fiber 的 interrupt 后被当成用户中断吞掉正文(见\n // docs/feature/error-classification/architecture.md「Effect 边界」:attempt fiber 的\n // E 恒为 never;memory/experiment-fatal-presented-as-user-interrupt.md)。\n const completed = yield* Effect.scoped(Effect.gen(function* () {\n const leased = poolSelection._tag === \"Reuse\"\n ? Either.match(yield* Effect.either(poolSelection.pool.acquire(resolveAttemptTimeout(a.run, a.evalDef, opts.config)?.timeoutMs, buildLocators)), {\n onLeft: (error) => ({ _tag: \"Failed\" as const, error }),\n onRight: (lease) => {\n acquiredReuseAttempts.add(a);\n return { _tag: \"Acquired\" as const, lease };\n },\n })\n : { _tag: \"NotRequested\" as const };\n const lease = leased._tag === \"Acquired\" ? leased.lease : undefined;\n // 租借失败归 `sandbox.create` 阶段:池把「创建实例 + 跑 SandboxLayer setup + 确认寿命」\n // 打包成一次借出,调度器这一侧只知道这条 attempt 没能拿到可用实例。\n const leaseError: AttemptError | undefined = leased._tag === \"Failed\" ? errorFromThrown(leased.error, \"sandbox.create\") : undefined;\n if (leased._tag === \"Failed\") {\n cancelReuseAttempt(a, true);\n const declaration = attemptFailureDeclaration(a.run.classifyFailure, \"sandbox.create\", leased.error);\n if (declaration)\n closeHaltGate(a, declaration);\n // This Attempt did start its physical acquisition and is therefore recorded below\n // as an errored result. The Group policy only decides what a later slot may do.\n recordEvalGroupPhysicalFailure(a, \"sandbox.create\", leased.error);\n }\n const failedBeforeDispatch = blockedError ?? leaseError;\n const recordedAttempt = a;\n const evaluated = failedBeforeDispatch\n ? ({\n id: a.evalDef.id,\n description: a.evalDef.description,\n experimentId: a.run.experimentId,\n experiment: experimentRunInfo(a.run, a.plan, a.sandboxPlansByEval, opts.config, a.judge),\n agent: a.run.agent.name,\n model: a.run.model,\n verdict: \"errored\",\n fingerprint: a.fingerprint,\n evaluationAlgorithm: EVALUATION_ALGORITHM,\n attempt: a.attempt,\n startedAt: new Date().toISOString(),\n durationMs: 0,\n factResults: [],\n factUses: [],\n evaluationKind: a.evalDef.evaluationKind,\n ...(a.evalDef.evaluationKind === \"score\"\n ? { scoreResult: scoreFactOutcomeForAttemptError(failedBeforeDispatch) }\n : {}),\n evidenceCoverage: a.run.agent.evidenceCoverage,\n error: failedBeforeDispatch,\n } satisfies EvalResult)\n : yield* runAttemptEffect(recordedAttempt, attemptOptions, sandboxSem, {\n buildLocators,\n runTiming,\n parentSignal: attemptSignal,\n invocationSignal: opts.signal,\n ...(lease\n ? {\n reusedSandbox: {\n sandbox: lease.sandbox,\n reuseSandbox: lease.reuseSandbox,\n reuseOrdinal: lease.reuseOrdinal,\n },\n }\n : {}),\n // 止损闸的消费点:attempt 封口读终局失败的空间轴。scope 经这条**封口回执**\n // 到达调度器,不走错误通道向上传播——attempt fiber 的 E 保持 never,`errored`\n // 仍是 eval runner 的合法结果而不是调度失败(architecture.md「Effect 边界」)。\n onFailureClass: (declaration) => closeHaltGate(a, declaration),\n onSealedEvaluation: (sealed) => recordCoordinator.noteSealedOrMarkIncomplete(recordedAttempt, sealed),\n });\n if (lease) {\n // Attempt 的 Eval/Agent 收尾已在 runAttemptEffect 内完成;reset 失败会淘汰实例,\n // 本条结果如实保留,后续派发创建替代实例。\n // Only the typed plugin resource prepare code carries physical-resource\n // unavailability. An author SandboxLayer prepare command can also fail at\n // `sandbox.prepare`, but it must not retire a pool or trip this Group gate.\n if (evaluated.error?.code === \"plugin-resource-prepare-failed\") {\n recordEvalGroupPhysicalFailure(a, \"sandbox.prepare\", new Error(evaluated.error.message));\n }\n const mustRetire = reuseResultRequiresRetirement(evaluated);\n yield* lease.commit(mustRetire ? { _tag: \"Retire\" } : { _tag: \"Reset\" });\n }\n return Object.freeze({\n result: evaluated,\n });\n }));\n // Reset/finalizer failures belong to the physical Group instance and\n // only affect later slots; they never rewrite the sealed Attempt.\n if (poolSelection._tag === \"Reuse\") {\n for (const failure of poolSelection.pool.drainRuntimeFailures()) {\n recordEvalGroupPhysicalFailure(a, failure.stage, failure.error);\n }\n }\n const { result } = completed;\n // A never-started blocked Slot has no origin Attempt. A reserved\n // setup/lease failure still closes its origin Attempt with the\n // errored result, without inventing unavailable rich families.\n let locator: string | undefined;\n if (reservedRecordAttempt !== undefined) {\n locator = reservedRecordAttempt.locator;\n result.locator = locator;\n const recordAttempt = yield* recordCoordinator.completeAttemptOrMarkIncomplete(a, result);\n if (recordAttempt !== undefined) {\n locator = recordAttempt.locator;\n result.locator = locator;\n }\n }\n else if (!reservationAttempted) {\n recordCoordinator.markNotDispatched(a);\n }\n // attempt:complete 与上面的 attempt:start 严格一一配对(同一个 body Effect,唯一\n // 出口),覆盖每一个真正跑过 runAttemptEffect 的 attempt(包括之后被下面的并发去重\n // 分支丢弃、不计入 results 的那些)——reducer 的 attempt:complete 无条件\n // running-1/completed+1,少配对一次就会让 running 计数漂移。\n reportAttemptLifecycle({\n type: \"attempt:complete\",\n at: Date.now(),\n identity: feedbackIdentity(a),\n who: feedbackWho(a),\n verdict: result.verdict,\n tokenCount: result.usage\n ? (result.usage.inputTokens ?? 0) + (result.usage.outputTokens ?? 0)\n : undefined,\n estimatedCostUSD: result.estimatedCostUSD,\n });\n if (a.run.budget !== undefined) {\n const s = budgetState(budgetKey);\n if (result.estimatedCostUSD !== undefined) {\n s.spent += result.estimatedCostUSD;\n }\n else if (result.phases?.some((phase) => phase.children?.some((child) => child.key === \"agent.turn\"))) {\n s.completedAgentRunsNoCost += 1;\n if (s.spent === 0 && s.completedAgentRunsNoCost >= 3 && !s.unenforceableWarned) {\n // 连续几次真正跑过 agent 的 attempt 都拿不到成本:budget 对这个 agent\n // 不可执行,说清楚一次。sandbox.create/setup 等前置失败没有 turn,跳过这里:\n // 此时应由 attempt error 回答根因,不能再用计费 warning 抢走注意力。\n // s.unenforceableWarned 已经是 per-budgetKey 的一次性闸门;稳定 key 上的\n // reportDiagnostic 去重是双保险,不依赖它单独生效。\n s.unenforceableWarned = true;\n {\n const message = t(\"runner.budgetUnenforceable\", { budgetKey }).trimEnd();\n reportDiagnostic({ key: `budget-unenforceable:${budgetKey}`, code: \"budget-unenforceable\", severity: \"warning\", message, data: { budgetKey } });\n recordExperimentDiagnostic({\n experimentId: a.run.experimentId,\n code: \"budget-unenforceable\",\n level: \"warning\",\n message,\n phase: \"eval.run\",\n data: { budgetKey },\n });\n }\n }\n }\n }\n if (a.evalDef.evaluationKind === \"pass\" && result.verdict === \"passed\") {\n passedKeys.add(a.key);\n lastErrorCode.delete(a.key);\n evalAc?.abort(); // 让同 key 并发 attempt 尽早退出\n }\n else if (a.evalDef.evaluationKind === \"pass\" && a.run.earlyExit && passedKeys.has(a.key)) {\n // 并发情况:同 key 另一个 attempt 已通过后本 attempt 才完成(被 abort 后产出\n // errored),不计入结果。\n return;\n }\n else if (result.verdict === \"errored\" && !blockedError) {\n // errored 不中止其余样本(基建可能自愈);只有同一错误 code 连续复现才判定为\n // 确定性错误,进 run 级 fail-fast 停止派发(不 abort 已在飞的 attempt)。\n // 派发前确定性失败(实验级 setup 失败、判分预检失败)的合成结果不进 fail-fast:\n // 它不派发 agent、零成本,契约是受影响的「所有」attempt 逐条记 errored 进报告,\n // 不该被止损机制截短。\n const code = result.error?.code ?? \"unexpected-error\";\n const prev = lastErrorCode.get(a.key);\n const streak = prev?.code === code ? prev.streak + 1 : 1;\n lastErrorCode.set(a.key, { code, streak });\n if (streak >= 2 && !failFastKeys.has(a.key)) {\n failFastKeys.set(a.key, { code, skipped: 0 });\n }\n }\n else {\n lastErrorCode.delete(a.key);\n }\n results.push(result);\n // 反馈层的永久失败通知(见 sink.ts 的 FailureInput / docs/feature/experiments/\n // cli.md「什么动态更新,什么逐条追加」表的「failed / errored + locator」行)——\n // 只在拿到 locator 时报(裸 run 没有 locator,不产出这类事件,与上面 result.locator\n // 的省略规则一致),且只报真正计入 results 的 attempt(上面的并发去重分支已经\n // return 掉、不会走到这里,不会为一条被丢弃的重复 attempt 误报失败)。\n if (locator) {\n const failure = failureDetailFromResult(result);\n if (failure)\n reportFailure(failure);\n }\n yield* reportMutex.withPermits(1)(\n // 每个 reporter 单独兜错:一个写文件失败 / 自定义 reporter 抛错只记 diagnostic,\n // 不让一个回调中断其它回调或后续 attempt。\n Effect.forEach(reporters, (reg) => runReporter(reg, \"onEvalComplete\", () => reg.reporter.onEvalComplete?.(result)), { concurrency: \"unbounded\", discard: true }));\n // 和上面的 onEvalComplete 同一把 reportMutex:两条回调路径都要串行化,否则并发\n // attempt 各自触发的 eval:complete 会绕开 permit=1 直接并发跑,和文档承诺的\n // 「报告回调串行化」不一致。\n yield* reportMutex.withPermits(1)(emitReporterEvent(reporters, { type: \"eval:complete\", result }));\n });\n // ③ 全局并发位 → ④ 派发时刻试锁 → preflight → 实验级 setup → body。\n // 独占串行 provider(如 local):同一 provider 名的所有 attempt 共享一把 permit=1 的锁,\n // 包在全局位之外(见上面 exclusiveSemFor 的注释)。\n const exclusiveSem = exclusiveSemFor(a.plan);\n const arriveAtDispatchWave = dispatchWaveArrive.get(a)!;\n const dispatch = withGlobalSlot(haltAwait(a), (slot) => Effect.gen(function* () {\n yield* arriveAtDispatchWave;\n // 拿到位子的这一刻再问一次闸:排在独占 provider 锁 / 实验闸本地信号量上的那段等待\n // 不在上面的竞速覆盖范围里(竞速只包全局位),闸可能正是在那段时间落下的。\n if (checkDispatchHalt(a).halted)\n return { kind: \"recheck\" } as const;\n // 派发时刻取锁:授位之后才试,非阻塞。撞上别人持有的新鲜锁就把这个位子连同实验闸\n // 名额一起还回去(返回 \"suspend\"),由外层转入 elsewhere 挂起;位子当场空出来,\n // 排队中的下一条没被锁的用例接手。\n if (caseState) {\n const outcome = yield* tryAcquireCase(caseState);\n if (outcome.kind === \"busy\")\n return { kind: \"suspend\", window: outcome.window } as const;\n if (yield* recordCoordinator.adoptLatePublishedAttempt(a)) {\n return { kind: \"done\" } as const;\n }\n }\n const proceed = yield* preflight;\n if (!proceed)\n return { kind: \"done\" } as const;\n authorizedReuseAttempts.add(a);\n if (a.run.setup || a.run.teardown) {\n // 实验级 setup:第一个通过派发许可的 attempt 真正执行,其余等同一个 memoized\n // Effect completion(作者 setup 失败收进 lc.setupFailed,由 body 合成 errored 结果)。\n // 等它的时候让出全局并发位(docs/runner.md「调度:有界并发」——内部等待一律让位,\n // 慢启动的 setup 不许饿死同批其它实验),回来再重新拿位。实验闸名额不让。\n yield* slot.release;\n yield* ensureExperimentSetup(a);\n yield* slot.reacquire;\n }\n yield* body(slot);\n return { kind: \"done\" } as const;\n }));\n const guarded = exclusiveSem ? exclusiveSem.withPermits(1)(dispatch) : dispatch;\n // 许可链的循环外壳:撞锁挂起的用例解决后从 ① 重新走一遍(实验闸名额与全局位都要\n // 重新取,不能拿着别人在等的名额干等)。\n const pipeline = Effect.gen(function* () {\n // Group predecessor has settled before this pipeline begins. A physical failure in\n // that predecessor therefore gates this still-queued slot before build, a provider\n // acquire, resource materialization, or a global dispatch permit.\n const unavailable = evalGroupUnavailableGateOf(a);\n if (unavailable?.stopped) {\n accountEvalGroupUnavailable(a, unavailable);\n return;\n }\n // ⓪ 逐 BuildKey 放行:只等本 eval 引用的那几个 key,不引用任何 key 的 attempt\n // 立刻进入许可链。等在这里不占全局并发位,慢构建因此不挡住同批别的 eval。\n const pairKey = cacheKey(a.run, a.evalDef.id);\n yield* Effect.tryPromise({\n try: () => awaitBuildsFor(pairKey),\n catch: (error) => error,\n });\n for (;;) {\n // ① 止损闸:落闸 → 本 attempt 不派发,计 unstarted(完成状态因此落 incomplete)。\n const halt = checkDispatchHalt(a);\n if (halt.halted) {\n cancelReuseAttempt(a);\n accountDispatchHalted(a, halt.gate);\n return;\n }\n // ② 实验闸 → ③ 全局位 → ④ 用例锁 → preflight → body\n const outcome = yield* withExperimentGate(a, guarded);\n if (outcome.kind === \"done\")\n return;\n // 许可获取被落下的闸打断:许可已随作用域归还,回到 ① 让上面的检查点记账。\n if (outcome.kind === \"recheck\")\n continue;\n // ② ③ 已随作用域归还。挂起等锁:不占并发位、计入 elsewhere;锁释放或过期后\n // 按原优先级回到派发队列(下一轮循环)。\n yield* outcome.window;\n }\n });\n const waveReady = dispatchWaveReady.get(a) ?? Effect.void;\n const wavePipeline = waveReady.pipe(Effect.flatMap(() => pipeline));\n const predecessor = groupedPredecessors.get(a);\n const orderedPipeline = predecessor === undefined\n ? wavePipeline\n : predecessor.pipe(Effect.flatMap(() => wavePipeline));\n // 实验级 teardown 结算:每个 attempt 收尾(含被 preflight 跳过、被中断的、被用例锁\n // 被 preflight 跳过、被中断的)都从身份集合移除;最后一个触发 ExperimentDef.teardown。ensuring\n // 在中断路径同样执行,重复 finalizer 也不会让状态下溢。\n const withExpLifecycle = !a.run.setup && !a.run.teardown\n ? orderedPipeline\n : orderedPipeline.pipe(Effect.ensuring(settleExperimentAttempt(a).pipe(Effect.orDie)));\n // 用例锁释放:这个 key 的全部 attempt(真实派发的与被 late-carry 跳过的)都 settle 后\n // 删锁,与上面的实验级 teardown 计数同一种「逐 attempt 收尾时递减,归零触发」模式,\n // 挂在最外层确保晚于实验级 teardown 计数结算(docs「用例全部 attempt 收尾(含沙箱销毁)\n // 后删除自己的锁」)。\n const withCaseLifecycle = !caseState\n ? withExpLifecycle\n : withExpLifecycle.pipe(Effect.ensuring(releaseCaseLockIfDone(caseState, a.attempt)));\n const withWaveLifecycle = withCaseLifecycle.pipe(Effect.ensuring(arriveAtDispatchWave));\n if (predecessor === undefined)\n return withWaveLifecycle;\n const releaseSuccessor = groupedReleases.get(a)!;\n return withWaveLifecycle.pipe(Effect.ensuring(releaseSuccessor));\n }, { concurrency: opts.maxConcurrency, discard: true }).pipe(\n // 中断(用户 Ctrl+C):finalizer 已在中断过程中跑完(容器已停),这里只是把它咽下,\n // 好让流程走到 summarize / onInvocationComplete,用已完成的 results 出一份部分汇总,而不是抛栈。\n // 判据是 `isInterruptedOnly` 而不是 `isInterrupted`:一条 fiber 的缺陷会连带中断兄弟 fiber,\n // 合成的 cause 里同时有 die 与 interrupt,`isInterrupted` 对它同样为真——按它咽下等于把\n // 真·缺陷的正文吞掉、冒充成用户中断(退出码 130),正是\n // memory/experiment-fatal-presented-as-user-interrupt.md 的现象。\n Effect.catchAllCause((cause) => {\n if (Cause.isInterruptedOnly(cause)) {\n interrupted = true;\n return Effect.void;\n }\n return Effect.failCause(cause); // 非中断的意外缺陷:照常抛出\n }));\n const exit = yield* Effect.exit(opts.signal === undefined\n ? dispatchEffect\n : Effect.raceFirst(dispatchEffect, interruptOnAbort(opts.signal)));\n // provenance 在这里齐全:没有任何 attempt 依赖的 key 也照样跑完并留下自己那条记录,\n // 中断路径下同批构建随 signal 收束成 cancelled,不把 run.json 的 sandboxBuilds 落空。\n if (runningBuilds !== undefined) {\n const completedBuilds = yield* Effect.tryPromise({\n try: () => runningBuilds.done,\n catch: (error) => error,\n });\n sandboxBuildRecords = [...completedBuilds.records];\n }\n // 复用污染线索:按实例 × 承接序号聚合本次 Run 真实跑出的结果(携带条目不参与——复用实验\n // 不消费也不产出结果沿用)。只指路,不改判定(见 reuse-diagnostics.ts)。\n for (const notice of detectReuseContamination(results)) {\n reportDiagnostic({\n key: `sandbox-reuse-contamination:${notice.experimentId ?? \"\"}:${notice.reuseSandbox}:${notice.phase}`,\n code: \"sandbox-reuse-contamination\",\n severity: \"warning\",\n message: reuseContaminationMessage(notice),\n data: {\n ...(notice.experimentId !== undefined ? { experimentId: notice.experimentId } : {}),\n reuseSandbox: notice.reuseSandbox,\n phase: notice.phase,\n fromOrdinal: notice.fromOrdinal,\n toOrdinal: notice.toOrdinal,\n count: notice.count,\n },\n });\n }\n // 实验级 teardown 兜底扫尾:正常路径由 per-attempt ensuring 的身份集合归零触发(见上),但一次\n // 真实批跑观察到过结算路径未触发的间歇现象(根因未定位,排查记录见 memory 的\n // experiment-teardown-missed-once-in-batch)。走到这里时 forEach 的全部 fiber 连同 finalizer\n // 都已结算,任何仍停在 Active 的实验都意味着泄漏;在此强制收尾并报警示诊断——\n // 扫尾幂等(cleanup 消费一次性),宁可多一道兜底,不把宿主机资源(隧道/容器)留给用户手拆。\n // 真·缺陷抛出前同样要扫(finalizer 语义,见 docs/feature/experiments/architecture.md\n // 「实验级生命周期」);cli 的 main().catch() 只兜沙箱,不知道实验级 cleanup 的存在。\n const sweepExperimentTeardowns = (): Effect.Effect<void, unknown> => Effect.forEach([...expLifecycles], ([run, cell]) => cell.mutex.withPermits(1)(Effect.sync(() => {\n const state = cell.state;\n // 未触发、已完成均无事可扫;在飞的 teardown 仍须 await 同一个 completion。\n if (state._tag === \"Dormant\" || state._tag === \"UntriggeredComplete\" || state._tag === \"TornDown\") {\n return { _tag: \"None\" } as const;\n }\n if (state._tag === \"Active\" && run.teardown) {\n return { _tag: \"Late\", remaining: state.pendingAttempts.size } as const;\n }\n return { _tag: \"Await\" } as const;\n })).pipe(Effect.flatMap((action) => {\n if (action._tag === \"None\")\n return Effect.void;\n if (action._tag === \"Late\") {\n const experimentId = run.experimentId ?? run.agent.name;\n const message = t(\"runner.experimentTeardownLate\", { experimentId }).trimEnd();\n return Effect.sync(() => {\n reportDiagnostic({\n key: `experiment-teardown-late:${experimentId}`,\n code: \"experiment-teardown-late\",\n severity: \"warning\",\n message,\n data: { experimentId, remaining: action.remaining },\n });\n recordExperimentDiagnostic({\n experimentId: run.experimentId,\n code: \"experiment-teardown-late\",\n level: \"warning\",\n message,\n phase: \"experiment.teardown\",\n data: { remaining: action.remaining },\n });\n }).pipe(Effect.zipRight(runExperimentTeardown(run, cell)));\n }\n return runExperimentTeardown(run, cell);\n })), { concurrency: 1, discard: true });\n if (Exit.isFailure(exit)) {\n // Only a pure interruption becomes a partial interrupted Invocation. The\n // AbortSignal may have fired concurrently with a real failure/defect, but\n // must never relabel that Cause as a user interrupt or hide it behind 130.\n if (Cause.isInterruptedOnly(exit.cause)) {\n interrupted = true;\n }\n else {\n return yield* Effect.failCause(exit.cause).pipe(Effect.ensuring(sweepExperimentTeardowns().pipe(Effect.orDie)));\n }\n }\n if (interrupted)\n reportInterrupted();\n yield* sweepExperimentTeardowns();\n // Record publication is the intentionally narrow interruption mask. By this\n // point dispatch has stopped and its Scope/finalizers plus experiment\n // teardown have settled; only durable Run publication and the receipt remain.\n // The mask preserves typed writer failures, but this is not an Invocation\n // transaction: SIGINT publication freezes each Run independently, leaving\n // Runs with unsettled real Attempts incomplete while siblings may seal.\n const receipt = yield* Effect.uninterruptibleMask(() => Effect.gen(function* () {\n // These diagnostics are already settled and keyed by exact Experiment /\n // AgentRun identity. Bind them only at the final Runner → Record\n // boundary; the invocation-wide Run timing tree deliberately remains\n // unbound because it cannot be safely attributed to individual Runs.\n for (const run of opts.agentRuns) {\n bindRunnerRunObservabilityDiagnostics({\n run,\n diagnostics: experimentDiagnostics.get(run.experimentId) ?? [],\n });\n }\n const receiptCompletedAtMs = Date.now();\n const publishedRuns = yield* recordCoordinator.publish(receiptCompletedAtMs, interrupted ? \"interrupted\" : \"normal\");\n return Object.freeze({\n invocationId: recordCoordinator.reusePlan.target.invocationId,\n runIds: Object.freeze(publishedRuns.map(({ runId }) => String(runId))),\n startedAt,\n completedAt: new Date(receiptCompletedAtMs).toISOString(),\n completion: interrupted ? \"interrupted\" : \"completed\",\n } satisfies InvocationReceipt);\n })).pipe(Effect.ensuring(Effect.forEach(caseClaimsAwaitingPublication, (claim) => claim.release.pipe(Effect.ignore), {\n concurrency: 1,\n discard: true,\n })));\n // Experiment 收尾协议(docs/runner.md):每个真正出现在这次 Invocation 里的 experimentId\n // 各发一次 experiment:complete,携带它自己的 completedAt(真实 teardown 完成时刻,没有\n // teardown 或未触发时退回当前时刻)与实验域诊断累积器里attribute 给它的记录。全部\n // Experiment 此刻都已经收尾(sweepExperimentTeardowns 已经等过),严格早于下面的\n // invocation:summary——Record 已在上面封口;这个事件只给非持久化的 reporter 消费。\n const invocationExperimentIds = new Set(effectiveAgentRuns.map((r) => r.experimentId).filter((id): id is string => id !== undefined));\n const runTimings = runTiming.finalize();\n for (const experimentId of invocationExperimentIds) {\n yield* emitReporterEvent(reporters, {\n type: \"experiment:complete\",\n experimentId,\n completedAt: experimentCompletedAt.get(experimentId) ?? new Date().toISOString(),\n // Only exact current Record readbacks appear in the invocation snapshot.\n reusedAttempts: reusedAttempts.filter((attempt) => attempt.target.experimentId === experimentId),\n diagnostics: experimentDiagnostics.get(experimentId) ?? [],\n // Run 级共享构建时间与 provenance:属于产出它们的 Run;携带条目不继承。\n ...(runTimings !== undefined ? { timings: runTimings } : {}),\n ...(sandboxBuildRecords.length > 0 ? { sandboxBuilds: sandboxBuildRecords } : {}),\n name: opts.config.name,\n });\n }\n // Stable fresh-result ordering is separate from Record readbacks, which retain\n // the planner's target order and are never coerced into EvalResult.\n const order = new Map(opts.evals.map((e, i) => [e.id, i]));\n results.sort((a, b) => (order.get(a.id) ?? 0) - (order.get(b.id) ?? 0) ||\n a.agent.localeCompare(b.agent) ||\n a.attempt - b.attempt);\n const summary = summarize(results, reusedAttempts, startedAt, Date.now() - t0, opts.config.name);\n yield* emitReporterEvent(reporters, { type: \"invocation:summary\", summary });\n for (const reg of reporters) {\n // required reporter(显式 --junit)在这一步失败,不能中断其它\n // reporter 的收尾——继续跑完剩下的循环,让每个 reporter 都拿到 onInvocationComplete 的机会;\n // 失败本身经 runReporter → reportReporterError 折成诊断,由调用方(cli.ts)读取\n // RunFeedbackState 组装成 InvocationCompletion,让最终 completion/退出码判红(见\n // docs/feature/experiments/cli.md「运行完成状态不只看 verdict 计数」)。\n yield* runReporter(reg, \"onInvocationComplete\", () => reg.reporter.onInvocationComplete?.(summary));\n }\n return receipt;\n }));\n}\n"]}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["run.ts"],"names":[],"mappings":"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","sourcesContent":["// 运行器主调度:发现产出的 eval × agent × runs → attempt,有界并发调度。\n// 职责只有编排:指纹缓存在 fingerprint.ts,单 attempt 生命周期在 attempt.ts,\n// reporter 编排 / 汇总在 report.ts,Direct Agent 的 Sandbox 占位适配器在 direct-agent-sandbox.ts。\nimport { Effect, Cause, Data, Deferred, Either, Exit, Option } from \"effect\";\nimport { probeJudgeEffect } from \"../assertions/judge.ts\";\nimport { t } from \"../i18n/index.ts\";\nimport { cacheKey, planProjectTarget } from \"./fingerprint.ts\";\nimport { OtelReceiverPool } from \"../o11y/otlp/turn-otel.ts\";\nimport { errorFromThrown, \n// attemptOrigin re-exported via timing for Run diagnostics\nattemptFailureDeclaration, experimentRunInfo, runAttemptEffect, scoreFactOutcomeForAttemptError, type AttemptFailureDeclaration, type FreshSandboxCleanupFailure, } from \"./attempt.ts\";\nimport type { DiagnosticRecord, EvalResult, InvocationShape, InvocationSummary, JsonValue, ResolvedJudgeConfig, Reporter, ReporterRegistration, SandboxBuildRecord, } from \"../types.ts\";\nimport type { AgentRun, Attempt, AttemptError, ExperimentHookContext, LifecyclePhase, InvocationReceipt, AttemptRef, RunOptions, } from \"./types.ts\";\nimport { attemptOrigin, artifactPrepareTimingHook, createRunTimingRecorder, runOrigin } from \"./timing.ts\";\nimport { buildFailureOrigin, startSandboxBuilds } from \"../sandbox/build-coordinator.ts\";\nimport { ArtifactPrepareCoordinator } from \"../agents/provisioner.ts\";\nimport { collectBuildPreparation, toBuildPreparation } from \"./build-preparation.ts\";\nimport type { BuildKey } from \"../sandbox/identity.ts\";\nimport { firstLine, getEnv } from \"../util.ts\";\nimport { runReporter, emitReporterEvent, scopeReporter, summarize } from \"./report.ts\";\nimport { reportAttemptLifecycle, reportBudgetExhausted, reportDiagnostic, reportExperimentHook, reportExperimentProgress, reportFailure, reportInterrupted, reportLockWait, reportPrecheck, reportRunActivity, } from \"./feedback/sink.ts\";\nimport { failureDetailFromCurrentReusedAttempt, failureDetailFromResult } from \"./feedback/failure.ts\";\nimport { COORDINATION_RECOVERED_CODE, EVALUATION_ALGORITHM, runWho, HALT_DIAGNOSTIC_CODE } from \"./types.ts\";\nimport { ReusableSandboxPool } from \"./sandbox-pool.ts\";\nimport { liveSandboxRuntimeServices } from \"../sandbox/runtime.ts\";\nimport { detectReuseContamination, reuseContaminationMessage } from \"./reuse-diagnostics.ts\";\nimport { selectedEvalsForRun } from \"./eval-selection.ts\";\nimport { registerExperimentTeardown, unregisterExperimentTeardown } from \"./experiment-cleanup-registry.ts\";\nimport { cleanupCallback } from \"./cleanup-timeout.ts\";\nimport { resolveAttemptTimeout } from \"./timeout.ts\";\nimport { hostname } from \"node:os\";\nimport { linkPluginLifecycles, type GroupPluginContext } from \"../plugin/contracts.ts\";\nimport { isOrphanedTeardownRegistration, readTeardownRegistrationsEffect, removeTeardownRegistrationIfPresentEffect, teardownEntryId, writeTeardownRegistrationEffect, } from \"./teardown-registry.ts\";\nimport { acquireCaseLockEffect, isCaseLockExpired, readCaseLockEffect, CASE_LOCK_HEARTBEAT_INTERVAL_MS, type CaseLockEffectClaim, type CaseLockRecord, } from \"./lock.ts\";\nimport { acquireSharedStateLeaseEffect, currentProcessIdentityEffect, type SharedStateLeaseEffectClaim, } from \"./shared-state-lease.ts\";\nimport { openRunnerRecordCoordinator, prepareRunnerRecordReuse, type RunnerRecordAttempt, } from \"./record.ts\";\nimport { bindRunnerRunObservabilityDiagnostics } from \"../o11y/record/runner-producer.ts\";\nimport { sandboxReusePoolDescriptor } from \"./sandbox-reuse.ts\";\nexport class RunModeConflictError extends Data.TaggedError(\"RunModeConflictError\")<{\n readonly keepSandbox: NonNullable<RunOptions[\"keepSandbox\"]>;\n readonly conflictingExperimentIds: readonly string[];\n readonly conflictingEvalGroups: readonly {\n readonly experimentId: string | undefined;\n readonly evalGroupId: string;\n }[];\n readonly message: string;\n}> {\n}\n/** 反馈层的 attempt 身份 + 展示 label,两个 sink.ts lifecycle 调用点共用,避免各自手写\n * 同一组字段(见 memory 的 live-who-key-mismatch-freezes-rows —— 手写副本漏改是真实事故源)。 */\nfunction feedbackIdentity(a: Attempt): AttemptRef {\n return { experimentId: a.run.experimentId, evalId: a.evalDef.id, attempt: a.attempt };\n}\nfunction feedbackWho(a: Attempt): string {\n return runWho({ agentName: a.run.agent.name, model: a.run.model, experimentId: a.run.experimentId });\n}\nconst SHARED_BUILD_FAILURE_DIAGNOSTIC = \"sandbox-build-failed\";\nfunction sharedBuildFailureRoot(error: AttemptError): {\n readonly code: string;\n readonly message: string;\n} {\n const codeMatch = /\\bERR_[A-Z0-9_]+\\b/u.exec(error.message);\n const code = codeMatch?.[0] ?? error.code;\n const focused = codeMatch === null\n ? error.message.slice(-600)\n : error.message.slice(codeMatch.index, codeMatch.index + 600);\n return { code, message: focused.trim() || error.message.slice(-600).trim() || error.code };\n}\nfunction sharedBuildFailureDetail(a: Attempt, error: AttemptError): string {\n const failureId = error.origin.scope === \"run\"\n ? error.origin.timingNodeId\n : `${error.code}:${a.evalDef.id}`;\n const root = sharedBuildFailureRoot(error);\n let message = root.message;\n const encode = () => JSON.stringify({\n schema: \"niceeval.shared-build-failure/v1\",\n failureId,\n evalId: a.evalDef.id,\n attemptOrdinal: a.attempt,\n phase: \"sandbox.image.build\",\n errorCode: root.code,\n message,\n ...(root.code === \"ERR_PNPM_IGNORED_BUILDS\"\n ? { remediation: \"pnpm-allow-builds\" }\n : {}),\n });\n let encoded = encode();\n while (new TextEncoder().encode(encoded).byteLength > 1000 && message.length > 0) {\n message = message.slice(0, Math.floor(message.length * 0.75));\n encoded = encode();\n }\n return encoded;\n}\nfunction attemptIdentityKey(experimentId: string | undefined, agentName: string, model: string | undefined, evalId: string): string {\n return JSON.stringify([experimentId, agentName, model ?? null, evalId]);\n}\nfunction attemptGroupKey(run: AgentRun, evalId: string): string {\n return attemptIdentityKey(run.experimentId, run.agent.name, run.model, evalId);\n}\nfunction reuseResultRequiresRetirement(result: EvalResult): boolean {\n return result.error?.code === \"timeout\" ||\n result.error?.code === \"agent-send-failed\" ||\n result.error?.code === \"plugin-resource-prepare-failed\" ||\n result.diagnostics?.some((diagnostic) => diagnostic.code === \"teardown-failed\") === true;\n}\nexport type { AgentRun, RunOptions } from \"./types.ts\";\n/** Only declared, configured capabilities are prechecked. A missing model or\n * key is an ordinary consumed-Fact unavailable outcome and does no network I/O. */\nexport function judgeProbeTargets(evals: readonly (ResolvedJudgeConfig | undefined)[]): ResolvedJudgeConfig[] {\n return judgeProbePlan(evals.map((judge, index) => ({ id: `#${index}`, judge }))).targets.map((target) => target.judge);\n}\n/** 一份探测目标的去重键:同一个 (model, baseUrl, apiKeyEnv) 只探一次,也用来把探测结局\n * 归回「哪些 Experiment × Eval pair 依赖这个端点」。 */\nfunction judgeTargetKey(jc: ResolvedJudgeConfig): string {\n return `${jc.model ?? \"\"}|${jc.baseUrl}|${jc.apiKeyEnv}`;\n}\n/** `judgeProbeTargets` 的完整形态:除了去重后的探测目标,还给出「哪个 pair 依赖哪个目标」——\n * 预检失败只作废需要 judge 的那些 pair(见 docs/feature/judge/library.md「派发前预检」),\n * 所以必须能把探测结局按 pair 归因,不能只知道有几个端点要探。 */\nexport function judgeProbePlan(evals: ReadonlyArray<{\n id: string;\n judge: ResolvedJudgeConfig | undefined;\n}>): {\n targets: Array<{\n key: string;\n judge: ResolvedJudgeConfig;\n }>;\n evalKeys: Map<string, string>;\n} {\n const targets: Array<{\n key: string;\n judge: ResolvedJudgeConfig;\n }> = [];\n const evalKeys = new Map<string, string>();\n const seen = new Set<string>();\n for (const e of evals) {\n const jc = e.judge;\n if (jc === undefined || jc.model === undefined || !getEnv(jc.apiKeyEnv))\n continue;\n const key = judgeTargetKey(jc);\n evalKeys.set(e.id, key);\n if (seen.has(key))\n continue;\n seen.add(key);\n targets.push({ key, judge: jc });\n }\n return { targets, evalKeys };\n}\n/** Connect an application-owned AbortSignal to the current Effect Scope. */\nfunction interruptOnAbort(signal: AbortSignal): Effect.Effect<never> {\n return Effect.async((resume) => {\n const abort = () => resume(Effect.interrupt);\n if (signal.aborted) {\n abort();\n return;\n }\n signal.addEventListener(\"abort\", abort, { once: true });\n return Effect.sync(() => signal.removeEventListener(\"abort\", abort));\n });\n}\n/**\n * The Runner is Effect-native from writer acquisition through dispatch and\n * publication. NodeRuntime is deliberately owned by the CLI/application edge.\n */\nexport function runEvals<AttachmentError, AttachmentRequirements>(opts: RunOptions<AttachmentError, AttachmentRequirements>) {\n return Effect.scoped(Effect.gen(function* () {\n const invocationScope = yield* Effect.scope;\n const startedAtMs = Date.now();\n const startedAt = new Date(startedAtMs).toISOString();\n const t0 = startedAtMs;\n // These roots have deliberately different ownership. `coordinationRoot`\n // contains only local Runner state; `recordRoot` is the portable fact root\n // passed unchanged to the Record reader/writer coordinator.\n const coordinationRoot = opts.coordinationRoot ?? `${process.cwd()}/.niceeval`;\n const recordRoot = opts.recordRoot;\n // `--keep-sandbox` 要把单条 Attempt 的最终现场转交给用户,\n // `sandboxReuse` 则让整个 Invocation 的 pool 继续拥有并在收尾时销毁同一个 Case。\n // 两种 ownership 不能同时成立;在 carry planning/build/provider 等任何资源动作之前\n // 拒绝,避免产生“已登记 kept 但 pool finalizer 又销毁”的假现场。\n if (opts.keepSandbox !== undefined) {\n const conflictingEvalGroups = [...new Map(opts.agentRuns.flatMap((run) => selectedEvalsForRun(opts.evals, run)\n .filter((evalDef) => evalDef.evalGroup !== undefined)\n .map((evalDef) => {\n const value = Object.freeze({\n experimentId: run.experimentId,\n evalGroupId: evalDef.evalGroup!.id,\n });\n return [JSON.stringify([value.experimentId, value.evalGroupId]), value] as const;\n }))).values()];\n const conflictingExperiments = [...new Set(opts.agentRuns\n .filter((run) => run.sandboxReuse || conflictingEvalGroups.some((group) => group.experimentId === run.experimentId))\n .map((run) => run.experimentId))];\n if (conflictingExperiments.length > 0 || conflictingEvalGroups.length > 0) {\n throw new RunModeConflictError({\n keepSandbox: opts.keepSandbox,\n conflictingExperimentIds: Object.freeze(conflictingExperiments),\n conflictingEvalGroups: Object.freeze(conflictingEvalGroups),\n message: `--keep-sandbox cannot be combined with reusable Sandbox ownership` +\n `${conflictingExperiments.length === 0\n ? \"\"\n : ` (experiments: ${conflictingExperiments.map((id) => JSON.stringify(id)).join(\", \")})`}` +\n `${conflictingEvalGroups.length === 0\n ? \"\"\n : ` (Eval Groups: ${conflictingEvalGroups.map(({ experimentId, evalGroupId }) => `${JSON.stringify(experimentId)} / ${JSON.stringify(evalGroupId)}`).join(\", \")})`}. ` +\n \"Drop --keep-sandbox or select only fresh, ungrouped Evals.\",\n });\n }\n }\n // Physical planning produces immutable current inputs. Record reuse receives\n // only this projection and its own frozen view; no historic result facade\n // participates in dispatch or display.\n const targetPlan = yield* planProjectTarget(opts.evals, opts.agentRuns, opts.config.timeoutMs, {\n configJudge: opts.config.judge,\n ...(opts.keepSandbox === undefined ? {} : { keepSandbox: opts.keepSandbox }),\n });\n const { preparedPairsByKey, plannedConfigHashes, resolvedJudgesByKey, plannedFingerprints, } = targetPlan;\n // Plugin link produces one effective immutable AgentRun per source Run. All\n // runtime work after physical planning must consume that same linked value.\n const effectiveRunBySource = new Map<AgentRun, AgentRun>();\n for (const prepared of preparedPairsByKey.values()) {\n const prior = effectiveRunBySource.get(prepared.sourceRun);\n if (prior !== undefined && prior !== prepared.run) {\n throw new Error(`Plugin link produced inconsistent effective runs for Experiment ${JSON.stringify(prepared.sourceRun.experimentId)}.`);\n }\n effectiveRunBySource.set(prepared.sourceRun, prepared.run);\n }\n const effectiveAgentRuns = Object.freeze(opts.agentRuns.map((sourceRun) => effectiveRunBySource.get(sourceRun) ?? sourceRun));\n opts = { ...opts, agentRuns: effectiveAgentRuns };\n const reuse = yield* prepareRunnerRecordReuse({\n evals: opts.evals,\n runs: opts.agentRuns,\n config: opts.config,\n plannedFingerprints,\n plannedConfigHashes,\n ...(opts.rerun === undefined ? {} : { rerun: opts.rerun }),\n ...(opts.keepSandbox === undefined ? {} : { keepSandbox: opts.keepSandbox }),\n });\n // Coordinator creates draft Runs first, then uses their real `draft.runId`\n // values and the frozen Record view to partition every Slot into reuse/gap.\n const recordCoordinator = yield* openRunnerRecordCoordinator({\n recordRoot,\n startedAt: t0,\n evals: opts.evals,\n runs: opts.agentRuns,\n reuse,\n });\n // The draft is the only authority for a Run identity. Session, shape and\n // reporters all observe this same mapping; no caller can replace it with a\n // synthetic legacy value.\n const runIds = recordCoordinator.runIdsByExperiment;\n const carriedAttemptsByKey = recordCoordinator.carriedAttemptsByKey;\n const reusedAttempts = yield* recordCoordinator.readCarriedResults();\n const runsByExperimentId = new Map(opts.agentRuns.map((run) => [run.experimentId, run] as const));\n const runForReusedAttempt = (readback: (typeof reusedAttempts)[number]): AgentRun => {\n const run = runsByExperimentId.get(readback.target.experimentId);\n if (run === undefined) {\n throw new Error(`Record reuse readback references unknown Experiment ${JSON.stringify(readback.target.experimentId)}.`);\n }\n return run;\n };\n // Readback is the sole authority for the externally visible carry count.\n // In particular, the CLI must not guess this before the frozen current view\n // has rejected every non-reusable source.\n const reusedFailures = Object.freeze(reusedAttempts.flatMap((readback) => {\n const failure = failureDetailFromCurrentReusedAttempt(readback, runForReusedAttempt(readback));\n return failure === undefined ? [] : [failure];\n }));\n if (opts.onCurrentRecordReusePlan !== undefined) {\n yield* opts.onCurrentRecordReusePlan({ reused: reusedAttempts.length, reusedFailures, runIds });\n }\n else {\n // Direct library callers have no feedback coordinator. Preserve their\n // fallback failure signal without turning a current readback into a legacy\n // result-shaped facade.\n for (const failure of reusedFailures) {\n reportFailure(failure);\n }\n }\n // Session 文件在首次派发前创建;它只记录 Run 身份与轻量计数,锁和实验闸仍各自维护。\n if (opts.session !== undefined) {\n yield* opts.session.start({\n runIds,\n agentRuns: opts.agentRuns,\n carriedAttemptsByKey,\n startedAt,\n });\n }\n const preparedPlansByRun = new Map<AgentRun, globalThis.Record<string, JsonValue>>();\n for (const prepared of preparedPairsByKey.values()) {\n const plans = preparedPlansByRun.get(prepared.run) ?? {};\n plans[prepared.evalDef.id] = prepared.identity;\n preparedPlansByRun.set(prepared.run, plans);\n }\n // 展开 attempts。每个 Eval Group 是一条按规范化 Eval ID 稳定串行的 lane;每个未分组 Eval 是一条\n // attempt-major lane。先按 lane 深度铺成全 Invocation 的 wave,保证任一 lane 的下一槽位\n // 都不会排到其它 lane 的首槽位之前。carried 槽位先从 lane 删除,不占 wave 也不触发 Sandbox。\n const attempts: Attempt[] = [];\n // Group 串行链与 wave 闸都是 Effect Deferred 协调:等待是 Deferred.await 的 Effect,\n // 释放是 Deferred 结算 Effect,不再经过裸 Promise resolve。\n const groupedPredecessors = new WeakMap<Attempt, Effect.Effect<void>>();\n const groupedReleases = new WeakMap<Attempt, Effect.Effect<void>>();\n const groupedTails = new Map<AgentRun, Map<string, Effect.Effect<void>>>();\n const dispatchWaveNumbers = new WeakMap<Attempt, number>();\n type SchedulingSlot = {\n readonly run: AgentRun;\n readonly i: number;\n readonly evalDef: ReturnType<typeof selectedEvalsForRun>[number];\n };\n const lanes: SchedulingSlot[][] = [];\n for (const run of effectiveAgentRuns) {\n // selectedEvalIds 已由 CLI 在构造 AgentRun 时对候选 eval 各求值一次算好(见\n // eval-selection.ts 的 resolveExperimentEvals());这里只按 resolved id 取 eval,\n // 不重新调用用户谓词(见 docs/feature/record/architecture.md「selectedEvalIds」)。\n const evals = selectedEvalsForRun(opts.evals, run);\n const grouped = new Map<string, Array<(typeof evals)[number]>>();\n for (const evalDef of evals) {\n if (evalDef.evalGroup === undefined)\n continue;\n grouped.set(evalDef.evalGroup.id, [...(grouped.get(evalDef.evalGroup.id) ?? []), evalDef]);\n }\n const addedGroups = new Set<string>();\n for (const evalDef of evals) {\n if (evalDef.evalGroup === undefined) {\n lanes.push([...Array(run.attempts).keys()].map((i) => ({ run, i, evalDef })));\n continue;\n }\n if (addedGroups.has(evalDef.evalGroup.id))\n continue;\n addedGroups.add(evalDef.evalGroup.id);\n const groupEvals = grouped.get(evalDef.evalGroup.id) ?? [];\n lanes.push(groupEvals\n .toSorted((left, right) => left.id.localeCompare(right.id))\n .flatMap((groupEval) => [...Array(run.attempts).keys()].map((i) => ({ run, i, evalDef: groupEval }))));\n }\n }\n const runnableLanes = lanes\n .map((lane) => lane.filter(({ run, i, evalDef }) => !carriedAttemptsByKey.get(cacheKey(run, evalDef.id))?.has(i)))\n .filter((lane) => lane.length > 0);\n // LPT 仍作为 wave 内的稳定 tie-breaker:关键路径较长的 Experiment 先入同一波,但每一波\n // 最多只给每条 lane 一个新机会,不能再把整条长 Run 堆到其它 Group 前面。\n const runnableCountByRun = new Map<AgentRun, number>();\n for (const lane of runnableLanes) {\n const run = lane[0]!.run;\n runnableCountByRun.set(run, (runnableCountByRun.get(run) ?? 0) + lane.length);\n }\n const rounds = (run: AgentRun): number => {\n const width = Math.min(run.maxConcurrency ?? opts.maxConcurrency, opts.maxConcurrency);\n return Math.ceil((runnableCountByRun.get(run) ?? 0) / width);\n };\n runnableLanes.sort((left, right) => rounds(right[0]!.run) - rounds(left[0]!.run));\n const slots: Array<SchedulingSlot & {\n readonly wave: number;\n }> = [];\n const waveCount = Math.max(0, ...runnableLanes.map((lane) => lane.length));\n for (let wave = 0; wave < waveCount; wave += 1) {\n for (const lane of runnableLanes) {\n const slot = lane[wave];\n if (slot !== undefined)\n slots.push({ ...slot, wave });\n }\n }\n for (const { run, i, evalDef, wave } of slots) {\n const carryKey = cacheKey(run, evalDef.id);\n // 携带以 attempt 为粒度:只跳过这个具体序号确实被携入的那些(见 fingerprint.ts 的\n // `carriedAttemptsByKey`),不是\"这个组合有过携入就跳过前 N 个\"——attempts:5 里若只有\n // 序号 1 是上一轮的终态、序号 0 是 errored,这里必须只跳过序号 1、照常调度序号 0。\n if (carriedAttemptsByKey.get(carryKey)?.has(i))\n continue;\n // key 标识「同一个运行配置下的同一条 eval」,earlyExit 的跳过/abort 只应作用于\n // 同 key 的重试轮。experimentId 必须进 key:两个实验可以同 agent 同 model、只差\n // flags(feature A/B 正是这种形状),漏掉它会让先过的实验把其它实验的同名 eval\n // 整个跳掉——花了钱还丢结果。\n const key = attemptGroupKey(run, evalDef.id);\n const prepared = preparedPairsByKey.get(cacheKey(run, evalDef.id));\n if (prepared === undefined) {\n throw new Error(`Missing prepared Sandbox plan for ${JSON.stringify(cacheKey(run, evalDef.id))}.`);\n }\n if (prepared.run !== run) {\n throw new Error(`Plugin effective Run invariant failed for ${JSON.stringify(cacheKey(run, evalDef.id))}.`);\n }\n const configHash = plannedConfigHashes.get(cacheKey(run, evalDef.id));\n if (configHash === undefined) {\n throw new Error(`Missing planned config hash for ${JSON.stringify(cacheKey(run, evalDef.id))}.`);\n }\n const fingerprint = plannedFingerprints.get(cacheKey(run, evalDef.id));\n if (fingerprint === undefined) {\n throw new Error(`Missing planned fingerprint for ${JSON.stringify(cacheKey(run, evalDef.id))}.`);\n }\n if (!resolvedJudgesByKey.has(carryKey)) {\n throw new Error(`Missing planned Judge resolution for ${JSON.stringify(carryKey)}.`);\n }\n const sandboxPlansByEval = preparedPlansByRun.get(run);\n if (sandboxPlansByEval === undefined) {\n throw new Error(`Missing Experiment plan map for ${JSON.stringify(run.experimentId)}.`);\n }\n const attempt: Attempt = {\n evalDef,\n run,\n attempt: i,\n key,\n fingerprint,\n configHash,\n judge: resolvedJudgesByKey.get(carryKey),\n plan: prepared.plan,\n sandboxPlansByEval,\n };\n attempts.push(attempt);\n dispatchWaveNumbers.set(attempt, wave);\n if (evalDef.evalGroup !== undefined) {\n let tails = groupedTails.get(run);\n if (tails === undefined)\n groupedTails.set(run, (tails = new Map()));\n const predecessor = tails.get(evalDef.evalGroup.id) ?? Effect.void;\n const settled = yield* Deferred.make<void>();\n groupedPredecessors.set(attempt, predecessor);\n groupedReleases.set(attempt, Deferred.succeed(settled, undefined).pipe(Effect.asVoid));\n tails.set(evalDef.evalGroup.id, Deferred.await(settled));\n }\n }\n // 公平闸只保护每条 lane 的首槽位:任一 lane 的后续槽位都要等所有 lane 的首槽位\n // 至少拿到过一次全局并发位(或在此前确定不派发)。首波以后不再跨 lane 组 wave;\n // Group 自己的 predecessor 已经保证 lane 内串行,继续要求第 N 波全部抵达会让慢 lane\n // 尚未完成的当前槽挡住快 lane 的空闲后继,制造真实空闲和时间轴空白。\n // arrive 同时挂在派发点与 ensuring,保持未派发/中断路径也能结算首波。\n const dispatchWaveReady = new WeakMap<Attempt, Effect.Effect<void>>();\n const dispatchWaveArrive = new WeakMap<Attempt, Effect.Effect<void>>();\n const firstWave = attempts.filter((attempt) => dispatchWaveNumbers.get(attempt) === 0);\n let firstWaveRemaining = firstWave.length;\n const firstWaveSettled = yield* Deferred.make<void>();\n const firstWaveReady = firstWaveRemaining === 0\n ? Effect.void\n : Deferred.await(firstWaveSettled);\n for (const attempt of attempts) {\n const isFirst = dispatchWaveNumbers.get(attempt) === 0;\n dispatchWaveReady.set(attempt, isFirst ? Effect.void : firstWaveReady);\n if (!isFirst) {\n dispatchWaveArrive.set(attempt, Effect.void);\n continue;\n }\n let arrived = false;\n dispatchWaveArrive.set(attempt, Effect.gen(function* () {\n if (arrived)\n return;\n arrived = true;\n firstWaveRemaining -= 1;\n if (firstWaveRemaining === 0) {\n yield* Deferred.succeed(firstWaveSettled, undefined);\n }\n }));\n }\n // 预检 judge:验证 API key + 端点可达,避免跑完 agent 才发现 judge 不通。\n // 放在 attempts 展开之后,fail fast 只对会真正触发 judge 的运行生效\n // (目标收集逻辑见 judgeProbeTargets;全部结果携入、attempts 为空时也自然跳过)。\n // 预检失败的受影响 pair:experimentId|evalId → 失败原因(带实际探测端点)。同一个 Eval\n // 可被多个 Experiment 用不同 Judge 跑 A/B,不能让一个端点的失败连坐另一个配对。\n // 不派发、不建沙箱,逐条落成 errored(见下方 judgePrecheckFailures 的消费点);其余 eval\n // 照常派发——一条 judge 配置问题不没收整批与它无关的结果。\n const judgePrecheckFailures = new Map<string, string>();\n {\n const uniquePairs = [...new Map(attempts.map((a) => [cacheKey(a.run, a.evalDef.id), a])).entries()];\n const plannedByPair = new Map<string, number>();\n for (const attempt of attempts) {\n const pairKey = cacheKey(attempt.run, attempt.evalDef.id);\n plannedByPair.set(pairKey, (plannedByPair.get(pairKey) ?? 0) + 1);\n }\n const { targets, evalKeys } = judgeProbePlan(uniquePairs.map(([id, a]) => ({\n id,\n judge: a.judge,\n })));\n if (targets.length > 0) {\n // judge 预检是一次真实网络往返,可能慢甚至长时间不返回:发运行级行(started/done/failed),\n // 让 live 面板在预检期间显示「为什么还停在 0 running · N queued」,而不是看起来卡死\n // (见 docs/feature/experiments/cli.md「判分预检的显示」)。\n reportPrecheck({ status: \"started\" });\n const precheckStartedAt = Date.now();\n // 逐个目标各记自己的结局:一个端点不通不该作废依赖另一个(可用)端点的 eval,\n // 而落进 attempt 的 error.message 也必须是它自己那个端点的失败原因。\n const failedByKey = new Map<string, string>();\n for (const target of targets) {\n const err = yield* probeJudgeEffect(target.judge, opts.signal);\n if (err) {\n failedByKey.set(target.key, err);\n }\n }\n for (const [pairKey, key] of evalKeys) {\n const err = failedByKey.get(key);\n if (err === undefined)\n continue;\n judgePrecheckFailures.set(pairKey, err);\n const pair = uniquePairs.find(([candidate]) => candidate === pairKey)?.[1];\n if (pair === undefined)\n continue;\n const planned = plannedByPair.get(pairKey) ?? 1;\n // No Attempt exists yet, so this pair-owned warning is the stable\n // machine projection: identity and terminal counts travel in data,\n // without fabricating a locator-addressable eval event.\n reportDiagnostic({\n key: `judge-precheck-failed:${pairKey}`,\n code: \"judge-precheck-failed\",\n severity: \"error\",\n message: err,\n data: {\n phase: \"judge.precheck\",\n ...(pair.run.experimentId === undefined ? {} : { experimentId: pair.run.experimentId }),\n evalId: pair.evalDef.id,\n planned,\n errored: planned,\n },\n });\n }\n reportPrecheck({\n status: failedByKey.size > 0 ? \"failed\" : \"done\",\n durationMs: Date.now() - precheckStartedAt,\n });\n }\n }\n // Run 级共享构建准备:携带规划后只为仍需 fresh 的 BuildKey 工作。独立并发、不占\n // attempt 并发位;失败按依赖 eval 扇出,origin 指向同一个 sandbox.build timing node。\n // 显式 buildPreparation 优先(测试注入);否则从 pair-owned ProviderPlan 自动收集。\n const runTiming = createRunTimingRecorder();\n let sandboxBuildRecords: SandboxBuildRecord[] = [];\n const buildFailureByPair = new Map<string, AttemptError>();\n const buildLocatorsByPair = new Map<string, Map<BuildKey, JsonValue>>();\n const collected = opts.buildPreparation === undefined\n ? yield* collectBuildPreparation({\n preparedPairs: [...preparedPairsByKey.values()],\n carriedAttemptsByKey,\n })\n : Option.none();\n const buildPreparation = opts.buildPreparation === undefined\n ? Option.flatMap(collected, toBuildPreparation)\n : Option.some(opts.buildPreparation);\n const buildPrep = Option.getOrUndefined(buildPreparation);\n // 共享构建**不阻塞派发**:整批 key 同时开工,每条 attempt 只等自己引用的那几个 key\n // (case.md「Run 级构建协调」第 4 条的逐 key 放行)。全局 barrier 会让 10 个已就绪的镜像\n // 陪着最慢的那个构建干等(台账见 memory/shared-build-single-barrier-not-per-buildkey.md)。\n const runningBuilds = buildPrep && buildPrep.works.length > 0\n ? startSandboxBuilds(buildPrep.works, {\n timing: runTiming,\n provider: buildPrep.provider,\n maxConcurrency: opts.maxBuildConcurrency ?? buildPrep.maxConcurrency ?? 2,\n ...(buildPrep.buildTimeoutMs !== undefined ? { buildTimeoutMs: buildPrep.buildTimeoutMs } : {}),\n ...(buildPrep.prepareBudgetMs !== undefined ? { prepareBudgetMs: buildPrep.prepareBudgetMs } : {}),\n signal: opts.signal,\n // 最小反馈钩子:共享构建投影为运行级 active 行 / 非 TTY 起止事件,不占 attempt 位。\n onActivity: (event) => {\n reportRunActivity({\n id: event.id,\n key: event.key,\n label: event.label,\n status: event.status,\n ...(\"durationMs\" in event ? { durationMs: event.durationMs } : {}),\n });\n },\n })\n : undefined;\n // 逐 pair 的放行闸:第一次问到就记下等待,之后同 pair 的其它 attempt 复用同一条。\n const buildWaits = new Map<string, Promise<void>>();\n const awaitBuildsFor = (pairKey: string): Promise<void> => {\n const keys = buildPrep?.pairBuildKeys[pairKey];\n if (runningBuilds === undefined || keys === undefined || keys.length === 0)\n return Promise.resolve();\n let pending = buildWaits.get(pairKey);\n if (pending !== undefined)\n return pending;\n pending = (async () => {\n for (const key of keys)\n await runningBuilds.settled(key);\n const locators = new Map<BuildKey, JsonValue>();\n for (const key of keys) {\n const failure = runningBuilds.failures.get(key);\n if (failure !== undefined) {\n const originFields = buildFailureOrigin(failure);\n buildFailureByPair.set(pairKey, {\n code: originFields.code,\n message: originFields.message,\n origin: runOrigin(originFields.timingNodeId),\n ...(originFields.cause !== undefined ? { cause: originFields.cause } : {}),\n });\n return;\n }\n const locator = runningBuilds.locators.get(key);\n if (locator !== undefined)\n locators.set(key, locator);\n }\n if (locators.size > 0)\n buildLocatorsByPair.set(pairKey, locators);\n })();\n buildWaits.set(pairKey, pending);\n return pending;\n };\n // Run 级 Agent artifact prepare:由 attempt 内探测到目标 Sandbox 平台后触发 single-flight。\n // 绝不能在这里按宿主平台 eager prepare:macOS 宿主跑 Linux Sandbox 会拿到错误制品。\n const artifactPrepare = opts.artifactPrepare ??\n new ArtifactPrepareCoordinator(artifactPrepareTimingHook(runTiming));\n // The shared receiver belongs to this invocation Scope. Closing through its\n // finalizer covers ordinary completion, Record write failure, and interrupt\n // uniformly; attempts receive the same immutable pool snapshot.\n const otelPool = yield* Effect.acquireRelease(Effect.sync(() => opts.otelPool ?? new OtelReceiverPool(opts.config.telemetry?.port)), (pool) => pool.closeEffect().pipe(Effect.ignore));\n // Runtime dependencies are added to a fresh snapshot; caller-owned planning\n // inputs remain immutable for the duration of this invocation.\n const attemptOptions: RunOptions<AttachmentError, AttachmentRequirements> = {\n ...opts,\n coordinationRoot,\n artifactPrepare,\n otelPool,\n };\n // 缓存携入只在 plan 的 Reuse 行给数量,不逐条铺 eval id 清单(见 cli.md「人在终端里怎么用」:\n // 哪些 eval 复用、哪些重跑属于 --dry 与 niceeval view,不占 human 的 scrollback)。\n // onInvocationStart 报「本次实际要跑的 eval」(过滤 + 去重),不是发现到的全部 —— 否则计数误导。\n const runningIds = new Set(attempts.map((a) => a.evalDef.id));\n const runningEvals = [...runningIds].map((id) => ({ id }));\n const shape: InvocationShape = {\n evals: runningEvals.length,\n configs: effectiveAgentRuns.length,\n totalAttempts: attempts.length,\n maxConcurrency: opts.maxConcurrency,\n runIds,\n };\n // eval 级 reporters:实例只观测引用它的 eval(经 scopeReporter 过滤转发)。\n // 已经挂在全局 reporters 里的同一实例不重复挂;同一实例被多个 eval 引用时合并观测集\n // (共享一个目的地,如同一个 Braintrust 实验)。本次没有任何被观测 eval 要跑时整个跳过。\n const scopedSets = new Map<Reporter, Set<string>>();\n for (const e of opts.evals) {\n for (const r of e.reporters ?? []) {\n if (opts.reporters.some((reg) => reg.reporter === r))\n continue;\n let ids = scopedSets.get(r);\n if (!ids)\n scopedSets.set(r, (ids = new Set()));\n ids.add(e.id);\n }\n }\n const reporters: ReporterRegistration[] = [...opts.reporters];\n // EvalDef.reporters 是用户在单个 eval 上挂的补充观测(如「这个 eval 单独也发一份到某个\n // dashboard」),不是 CLI 显式注册的默认/机器出口——与 Config.reporters 同样默认\n // best-effort(见 ReporterRegistration 的字段注释:required 只留给 --junit)。name 用「scope 内第几个」编号,足以在诊断里区分「哪一个 eval 级 reporter」,\n // 不需要用户自己起名字。\n let evalReporterIndex = 0;\n for (const [r, ids] of scopedSets) {\n const scopedRuns = attempts.filter((a) => ids.has(a.evalDef.id)).length;\n if (scopedRuns === 0)\n continue;\n reporters.push({\n reporter: scopeReporter(r, ids, {\n evals: [...ids].filter((id) => runningIds.has(id)).length,\n configs: effectiveAgentRuns.length,\n totalAttempts: scopedRuns,\n maxConcurrency: opts.maxConcurrency,\n runIds,\n }),\n name: `eval-reporter-${evalReporterIndex++}`,\n required: false,\n });\n }\n for (const reg of reporters) {\n // reporter 只是结果消费方:单个 reporter 抛错记 diagnostic,不能让整次调度崩,也不阻断\n // 其它 reporter 的必要收尾(required/best-effort 的判定权重在 runReporter 内部处理)。\n yield* runReporter(reg, \"onInvocationStart\", () => reg.reporter.onInvocationStart?.(runningEvals, shape));\n }\n yield* emitReporterEvent(reporters, {\n type: \"invocation:start\",\n evals: runningEvals,\n shape,\n });\n const results: EvalResult[] = [];\n const passedKeys = new Set<string>();\n // errored = 框架/环境层面的意外(超时、adapter 崩、eval 脚本抛异常……),不是 agent 表现的信号。\n // 同 key 一旦 errored 就会确定性地重复 error,再跑 runs 里剩下的次数纯烧钱;只有 failed(断言\n // 真的没过)才代表 agent 行为的样本,值得跑满 runs 去测通过率。earlyExit 开时两者都提前收尾。\n // run 级 fail-fast(见 docs/runner.md「首过即停」):同一错误 code 在同一 key 连续复现\n // 即判定确定性错误,停止派发受同一配置影响的后续 attempt(如实报 errored 的结果保留;\n // 这是止损,不是「首过即停」,两个机制互不混用)。\n const lastErrorCode = new Map<string, {\n code: string;\n streak: number;\n }>();\n const failFastKeys = new Map<string, {\n code: string;\n skipped: number;\n }>();\n // 当前 Record reuse 的 passed readback 预置进 passedKeys:上面按序号回填的差额 attempt(carriedCount < run.attempts\n // 那部分)如果不预置这个,会在明明已经拿到过 passed 结果的情况下真的再调度一次 agent——\n // earlyExit 的语义是「已知会通过就不用再跑」,携入的 passed 同样是「已知会通过」,理应同等对待\n // (下面 preflight/body 的 earlyExit 判断本来就只在 a.run.earlyExit 为真时读这两个 Set,所以\n // 这里无条件预置对 --no-early-exit 场景没有副作用)。携入的 failed 故意不预置——failed 本来\n // 就不触发 earlyExit,回填的差额必须真的重跑,才对得起用户调大 runs 的意图(想看这次是不是\n // 还失败,或想凑够 pass@N 的样本量)。\n for (const readback of reusedAttempts) {\n if (readback.verdict !== \"passed\" || readback.source.evaluationKind !== \"pass\")\n continue;\n const run = runForReusedAttempt(readback);\n passedKeys.add(attemptGroupKey(run, readback.target.evalId));\n }\n // budget 护栏:只按「已完成 attempt 的价目表估算成本」判断,不做预测性节流。observed\n // usage.costUSD 不参与 budget。之前的实现会按\n // 「平均成本 × 在飞数」预扣,快到顶就让还没起飞的 attempt 排队等——这在探测阶段(还没有任何\n // 成本样本时)等价于把同一 budgetKey 的并发摁到一个很小的数,且完全没有文档承诺过这个副作用\n // (`docs-site/zh/tutorials/write-experiment.mdx` 对 `budget` 的描述只有一句「这一格配置的预算\n // 上限」)。新语义:已完成 attempt 的花费加总一旦到顶,就不再放新 attempt 起飞(已经在飞的\n // 照常跑完,不会被中途打断);到顶之前不做任何预测性限流,并发完全由 globalSem / runSem 决定。\n // 代价是「已花 + 在飞未结算」的总花费可能短暂超出 budget——这是有意识的取舍:budget 是防止\n // 无限烧钱的安全网,不是精确计费闸,不应该反过来限制吞吐。\n interface BudgetState {\n spent: number;\n /** 已经真正发起过 agent turn、但仍拿不到成本的 attempt 数。provider/setup 在 agent\n * 运行前失败不计入——这种结果没有可执行的计费事实,不能据此声称 adapter 不报成本。 */\n completedAgentRunsNoCost: number;\n unenforceableWarned: boolean;\n /** 因这个 budgetKey 预算到顶而未派发的 attempt 累计数——反馈层 \"budget-exhausted\" 事件\n * (见 sink.ts 的 `BudgetExhaustedInput`)要求 emitter 自己维护这个累计值,reducer 不推导。 */\n unstartedCount: number;\n }\n const budgetStates = new Map<string, BudgetState>();\n const budgetState = (key: string): BudgetState => {\n let s = budgetStates.get(key);\n if (!s) {\n s = { spent: 0, completedAgentRunsNoCost: 0, unenforceableWarned: false, unstartedCount: 0 };\n budgetStates.set(key, s);\n }\n return s;\n };\n const budgetReported = new Set<string>();\n // reporter 的 onEvalComplete 要「每个 attempt 完成即时触发」(保流式输出),又不能让\n // 并发 worker 交错写 → 用一个 permit=1 的信号量串起来(替代原先手搓的 reportQueue 链)。\n const reportMutex = yield* Effect.makeSemaphore(1);\n // 沙箱启动单独限流:与 agent 并发(maxConcurrency)解耦,防高并发下 daemon/API 过载。\n // 未显式指定时跟 maxConcurrency 走——各 provider 的推荐值已在 cli 层写进 maxConcurrency 默认值。\n const sandboxSem = yield* Effect.makeSemaphore(opts.maxConcurrency);\n // 相同 provider physical identity 共享一个按需池;不从 AgentRun 重选 template。\n const reusePools = new Map<AgentRun, Map<string, ReusableSandboxPool>>();\n /** A terminal Experiment freezes its own registry before physical stop. */\n const frozenReusePoolRuns = new Set<AgentRun>();\n // A physical Sandbox number is Run-wide, not pool-local: distinct Eval\n // Groups may materialize identical provider plans concurrently and must not\n // both report `reuseSandbox: 1` for different instances.\n const reuseSandboxNumbers = new Map<AgentRun, number>();\n const nextReuseSandboxNumber = (run: AgentRun): number => {\n const next = (reuseSandboxNumbers.get(run) ?? 0) + 1;\n reuseSandboxNumbers.set(run, next);\n return next;\n };\n type ReusePoolSelection = {\n readonly _tag: \"Fresh\";\n } | {\n readonly _tag: \"Reuse\";\n readonly pool: ReusableSandboxPool;\n };\n const reusePoolKeyOf = (a: Attempt): string | undefined => {\n return sandboxReusePoolDescriptor({\n run: a.run,\n evalId: a.evalDef.id,\n ...(a.evalDef.evalGroup === undefined ? {} : { evalGroupId: a.evalDef.evalGroup.id }),\n plan: a.plan,\n })?.key;\n };\n const acquiredReuseAttempts = new WeakSet<Attempt>();\n const authorizedReuseAttempts = new WeakSet<Attempt>();\n const cancelledReuseAttempts = new WeakSet<Attempt>();\n const existingReusePoolFor = (a: Attempt): ReusableSandboxPool | undefined => {\n const key = reusePoolKeyOf(a);\n return key === undefined ? undefined : reusePools.get(a.run)?.get(key);\n };\n const cancelReuseAttempt = (a: Attempt, force = false): boolean => {\n if ((!force && authorizedReuseAttempts.has(a)) || acquiredReuseAttempts.has(a) || cancelledReuseAttempts.has(a)) {\n return false;\n }\n cancelledReuseAttempts.add(a);\n return true;\n };\n const reusePoolFor = (a: Attempt): Effect.Effect<ReusePoolSelection, never, import(\"effect\").Scope.Scope> => {\n const key = reusePoolKeyOf(a);\n if (key === undefined || a.plan._tag !== \"Sandbox\") {\n return Effect.succeed({ _tag: \"Fresh\" });\n }\n if (frozenReusePoolRuns.has(a.run)) {\n return Effect.die(new Error(\"Sandbox reuse registry was frozen before this Attempt could acquire a pool.\"));\n }\n let bySpec = reusePools.get(a.run);\n if (bySpec === undefined) {\n bySpec = new Map<string, ReusableSandboxPool>();\n reusePools.set(a.run, bySpec);\n }\n let pool = bySpec.get(key);\n if (!pool) {\n // 物理 Sandbox lifecycle 不属于任一 Attempt;反馈与事实落到所属 Experiment 的 Run。\n const experimentContext = makeExperimentHookContext(a.run, \"sandbox.create\");\n const setupContext = {\n ...experimentContext,\n ...(a.evalDef.evalGroup === undefined ? {} : { evalGroup: {\n id: a.evalDef.evalGroup.id,\n definitionHash: a.evalDef.evalGroup.definitionHash,\n } }),\n };\n const capacity = a.evalDef.evalGroup === undefined\n ? Math.max(1, Math.min(opts.maxConcurrency, a.run.maxConcurrency ?? opts.maxConcurrency))\n : 1;\n const materializationOwnerId = a.evalDef.evalGroup === undefined\n ? a.plan.pair.evalId\n : JSON.stringify([\"eval-group\", a.run.experimentId, a.evalDef.evalGroup.id]);\n const groupPluginContext: GroupPluginContext | undefined = a.evalDef.evalGroup === undefined\n ? undefined\n : {\n experimentId: a.run.experimentId,\n evalGroupId: a.evalDef.evalGroup.id,\n signal: setupContext.signal,\n progress: setupContext.progress,\n diagnostic: setupContext.diagnostic,\n };\n pool = new ReusableSandboxPool(a.plan, capacity, {\n progress: setupContext.progress,\n diagnostic: setupContext.diagnostic,\n }, setupContext, liveSandboxRuntimeServices, a.run.agent.kind === \"sandbox\" ? a.run.agent : undefined, runTiming, materializationOwnerId, () => nextReuseSandboxNumber(a.run), a.evalDef.evalGroup === undefined ? Object.freeze([]) : linkPluginLifecycles(a.evalDef.evalGroup.plugins ?? [], \"group\"), groupPluginContext);\n bySpec.set(key, pool);\n return pool.managed().pipe(Effect.map((managed) => ({ _tag: \"Reuse\", pool: managed }) as const));\n }\n return Effect.succeed({ _tag: \"Reuse\", pool });\n };\n /**\n * Pool ownership is Experiment-scoped, not Invocation-scoped. The last\n * Attempt settlement freezes this registry before stop starts, so no late\n * acquire can create another physical Sandbox between pool stop and the\n * Experiment hook's checkpoint/teardown work.\n */\n const freezeReusablePoolsForRun = (run: AgentRun): Effect.Effect<void> => Effect.sync(() => {\n frozenReusePoolRuns.add(run);\n }).pipe(Effect.zipRight(Effect.forEach([...(reusePools.get(run)?.values() ?? [])], (pool) => pool.freeze(), { concurrency: \"unbounded\", discard: true })));\n const stopReusablePoolsForRun = (run: AgentRun): Effect.Effect<void, unknown> => Effect.gen(function* () {\n const exits = yield* Effect.forEach([...(reusePools.get(run)?.values() ?? [])], (pool) => Effect.exit(pool.stop()), { concurrency: \"unbounded\" });\n const failures: unknown[] = [];\n for (const exit of exits) {\n if (Exit.isFailure(exit))\n failures.push(Cause.squash(exit.cause));\n }\n if (failures.length > 0) {\n return yield* Effect.fail(new AggregateError(failures, \"Sandbox reuse pool cleanup failed.\"));\n }\n });\n // 两级并发闸:全局(opts.maxConcurrency)+ 实验级(AgentRun.maxConcurrency,可选)。两者都只\n // 属于本 Invocation;跨 Invocation 的共享外部状态由 sharedState 租约另行保护,不能把\n // `maxConcurrency` 误当成跨进程临界区。\n const globalSem = yield* Effect.makeSemaphore(opts.maxConcurrency);\n // 实验闸是 Invocation 内信号量:同实验的 attempt 即时交接 permit,同批其它实验不受影响。\n const gateLocalSems = new Map<AgentRun, Effect.Semaphore>();\n for (const run of effectiveAgentRuns) {\n if (run.maxConcurrency !== undefined) {\n gateLocalSems.set(run, yield* Effect.makeSemaphore(Math.max(1, run.maxConcurrency)));\n }\n }\n // provider 级独占串行闸(见 docs/runner.md「调度:有界并发」):声明了 exclusive 的 provider\n // (如 local——同一棵真实工作树不允许并发写)按 provider 名共享一把 permit=1 的信号量,\n // --max-concurrency / 实验级 maxConcurrency 都不解除。核心不认 provider 名分支:这里只读\n // physical plan 的中性 admission/lane 字段;相同 lane 共用一把锁,表示它们竞争同一份\n // 不可并发底层资源,不是 `provider === \"local\"` 的行为分支。\n const providerExclusiveSems = new Map<string, Effect.Semaphore>();\n for (const attempt of attempts) {\n if (attempt.plan._tag === \"Direct\" ||\n attempt.plan.providerPlan.scheduling.admission._tag !== \"Exclusive\") {\n continue;\n }\n const laneKey = attempt.plan.providerPlan.scheduling.lane.key;\n if (!providerExclusiveSems.has(laneKey)) {\n providerExclusiveSems.set(laneKey, yield* Effect.makeSemaphore(1));\n }\n }\n let exclusiveConcurrencyWarned = false;\n const exclusiveSemFor = (plan: Attempt[\"plan\"]): Effect.Semaphore | undefined => {\n if (plan._tag === \"Direct\" || plan.providerPlan.scheduling.admission._tag !== \"Exclusive\")\n return undefined;\n const laneKey = plan.providerPlan.scheduling.lane.key;\n const sem = providerExclusiveSems.get(laneKey);\n if (sem === undefined) {\n throw new Error(`Missing provider-exclusive semaphore for ${laneKey}`);\n }\n // 如实标注串行事实(一次性,不管命中多少条 attempt):全局上限比 1 高时,这个 provider 的\n // attempt 实际仍然一个一个跑——不管 --max-concurrency 写了多少,这是正确性约束不是调度旋钮。\n if (opts.maxConcurrency > 1 && !exclusiveConcurrencyWarned) {\n exclusiveConcurrencyWarned = true;\n reportDiagnostic({\n key: `provider-exclusive-serial:${laneKey}`,\n code: \"provider-exclusive-serial\",\n severity: \"warning\",\n message: t(\"runner.providerExclusiveSerial\", {\n provider: plan.providerPlan.provider,\n concurrency: opts.maxConcurrency,\n }).trimEnd(),\n data: { provider: plan.providerPlan.provider, concurrency: opts.maxConcurrency },\n });\n }\n return sem;\n };\n // 实验级生命周期(见 docs/feature/experiments/architecture.md「实验级生命周期」):\n // setup 整场至多一次——第一个通过派发许可(preflight)的 attempt 触发,后续 attempt 等同一个\n // memoized Effect completion;等待发生在 gated 里、globalSem 之外,不占全局并发位。teardown 是\n // ExperimentDef.teardown 字段,在最后一个 attempt 收尾后执行,当且仅当 setup 时点走到过\n // ——setup 抛错不豁免,未声明 setup 不影响触发。pendingAttempts 按 Attempt 身份结算并挂在\n // Effect.ensuring 上,中断路径同样移除;重复结算不会像数字计数那样下溢。\n type ExperimentSetupOutcome = {\n readonly _tag: \"Succeeded\";\n } | {\n readonly _tag: \"Failed\";\n readonly error: AttemptError;\n };\n type ExperimentSetup = {\n readonly _tag: \"InProgress\";\n readonly completion: Deferred.Deferred<void, unknown>;\n } | ExperimentSetupOutcome;\n /**\n * 生命周期是一条闭合状态链,而不是 optional Promise、boolean 与计数器的笛卡尔积:\n *\n * Dormant → Active(setup 进行中/成功/失败) → TearingDown → TornDown\n * ↘ UntriggeredComplete(所有 attempt 都在触发点前结算)\n *\n * TearingDown/TornDown 仍携带 setup 与 pendingAttempts,因为强清 drain 可以在 setup 或\n * attempt 尚在飞时先取得收尾执行权;后续 attempt 恢复时仍须读到 setup 的失败结果。\n */\n type ExperimentLifecycle = {\n readonly _tag: \"Dormant\";\n readonly pendingAttempts: ReadonlySet<Attempt>;\n } | {\n readonly _tag: \"Active\";\n readonly pendingAttempts: ReadonlySet<Attempt>;\n readonly setup: ExperimentSetup;\n } | {\n readonly _tag: \"TearingDown\";\n readonly pendingAttempts: ReadonlySet<Attempt>;\n readonly setup: ExperimentSetup;\n readonly completion: Deferred.Deferred<void, unknown>;\n } | {\n readonly _tag: \"TornDown\";\n readonly pendingAttempts: ReadonlySet<Attempt>;\n readonly setup: ExperimentSetupOutcome;\n } | {\n readonly _tag: \"UntriggeredComplete\";\n };\n interface ExperimentLifecycleCell {\n state: ExperimentLifecycle;\n readonly mutex: Effect.Semaphore;\n /**\n * Fresh Sandbox scopes are Attempt-owned, but their terminal cleanup\n * outcome belongs to this Experiment whenever it owns sharedState. Keep a\n * monotonic ledger here until the one physical cleanup decision is made.\n */\n readonly physicalCleanupFailures: FreshSandboxCleanupFailure[];\n sharedStateClaim?: SharedStateLeaseEffectClaim;\n }\n const expLifecycles = new Map<AgentRun, ExperimentLifecycleCell>();\n for (const a of attempts) {\n if (!a.run.setup && !a.run.teardown && !a.run.sharedState)\n continue;\n const cell = expLifecycles.get(a.run);\n if (cell) {\n if (cell.state._tag !== \"Dormant\")\n throw new Error(\"Experiment lifecycle initialized after dispatch.\");\n cell.state = { _tag: \"Dormant\", pendingAttempts: new Set([...cell.state.pendingAttempts, a]) };\n }\n else {\n expLifecycles.set(a.run, {\n state: { _tag: \"Dormant\", pendingAttempts: new Set([a]) },\n mutex: yield* Effect.makeSemaphore(1),\n physicalCleanupFailures: [],\n });\n }\n }\n const recordFreshSandboxCleanupFailure = (run: AgentRun, failure: FreshSandboxCleanupFailure): void => {\n if (run.sharedState === undefined)\n return;\n const cell = expLifecycles.get(run);\n if (cell === undefined)\n return;\n cell.physicalCleanupFailures.push(failure);\n };\n // 实验域诊断累积器(docs/runner.md「实验域诊断持久化」):只接无法归属单 Attempt 的实验\n // 事实——ctx.diagnostic、teardown failed/late、budget-unenforceable。相同 dedupeKey 只在\n // 同一个 experimentId 桶内折叠 count;不同 Experiment 各自独立累计,不跨来源合并。裸 run\n // (没有 experimentId)没有 Run 可挂,直接丢弃不进这个累积器——只留 reportDiagnostic\n // 的运行期反馈。与之配套的收尾时刻(捕捉每个 Experiment 真正完成的那一刻,不是整个\n // Invocation 收尾的那一刻,才诚实)。\n const experimentDiagnostics = new Map<string, DiagnosticRecord[]>();\n const experimentDedupeIndex = new Map<string, Map<string, DiagnosticRecord>>();\n const experimentCompletedAt = new Map<string, string>();\n const recordExperimentDiagnostic = (input: {\n experimentId: string | undefined;\n code: string;\n level: \"warning\" | \"error\";\n message: string;\n phase: LifecyclePhase;\n data?: Readonly<globalThis.Record<string, JsonValue>>;\n command?: string;\n dedupeKey?: string;\n }): void => {\n if (!input.experimentId)\n return;\n const dedupeIndex = experimentDedupeIndex.get(input.experimentId) ?? new Map<string, DiagnosticRecord>();\n experimentDedupeIndex.set(input.experimentId, dedupeIndex);\n if (input.dedupeKey !== undefined) {\n const existing = dedupeIndex.get(input.dedupeKey);\n if (existing) {\n existing.count = (existing.count ?? 1) + 1;\n // 同一运行级事实会随着未派发槽位增加而得到更精确的上下文。反馈 reducer\n // 已经采用最新 data;持久 Run 诊断也必须同样更新,不能把最初的 0 永久写死。\n if (input.data !== undefined || input.command !== undefined) {\n existing.context = {\n ...(input.data ?? {}),\n ...(input.command !== undefined ? { command: input.command } : {}),\n };\n }\n return;\n }\n }\n const record: DiagnosticRecord = {\n code: input.code,\n level: input.level,\n detail: input.message,\n origin: attemptOrigin(input.phase),\n ...(input.data !== undefined || input.command !== undefined\n ? {\n context: {\n ...(input.data ?? {}),\n ...(input.command !== undefined ? { command: input.command } : {}),\n },\n }\n : {}),\n };\n if (input.dedupeKey !== undefined)\n dedupeIndex.set(input.dedupeKey, record);\n const list = experimentDiagnostics.get(input.experimentId) ?? [];\n list.push(record);\n experimentDiagnostics.set(input.experimentId, list);\n };\n /**\n * Owner tokens are an explicit inspection capability, not ordinary Runner\n * feedback. Keep both the live feedback event and the durable Run diagnostic\n * limited to the key and recovery obligation; `exp --teardown` is the only\n * public surface that renders immutable owner evidence.\n */\n const reportSharedStateRecoveryRequired = (input: {\n readonly run: AgentRun;\n readonly experimentId: string;\n readonly reason: string;\n readonly phase: LifecyclePhase;\n }): void => {\n const key = input.run.sharedState?.key ?? \"\";\n const message = t(\"runner.sharedStateRecoveryRequired\", { key }).trimEnd();\n reportDiagnostic({\n key: `state-lease-recovery-required:${key || input.experimentId}`,\n code: \"state-lease-recovery-required\",\n severity: \"warning\",\n message,\n data: {\n experimentId: input.experimentId,\n sharedStateKey: key,\n reason: input.reason,\n },\n });\n recordExperimentDiagnostic({\n experimentId: input.run.experimentId,\n code: \"state-lease-recovery-required\",\n level: \"warning\",\n message,\n phase: input.phase,\n data: { sharedStateKey: key, reason: input.reason },\n });\n };\n /**\n * A blocked sharedState acquisition is normal contention. It is deliberately\n * an info notice and deliberately does not enter a Run's durable diagnostic\n * list: there is no cleanup obligation and no owner evidence to expose.\n */\n const acquireSharedStateClaim = (run: AgentRun, experimentId: string): Effect.Effect<SharedStateLeaseEffectClaim, unknown> => Effect.gen(function* () {\n const sharedState = run.sharedState;\n if (sharedState === undefined) {\n return yield* Effect.die(new Error(\"Attempted to acquire an undeclared sharedState lease.\"));\n }\n const processIdentity = sharedStateProcessIdentity ?? (yield* currentProcessIdentityEffect());\n sharedStateProcessIdentity = processIdentity;\n const acquired = yield* acquireSharedStateLeaseEffect(coordinationRoot, sharedState.key, {\n experimentId,\n pid: process.pid,\n host: currentHost,\n processIdentity,\n }, {\n ...(opts.signal === undefined ? {} : { signal: opts.signal }),\n onWaitStart: () => {\n const message = t(\"runner.sharedStateWaiting\", { key: sharedState.key }).trimEnd();\n reportDiagnostic({\n key: `state-lease-waiting:${sharedState.key}`,\n code: \"state-lease-waiting\",\n severity: \"info\",\n message,\n data: { experimentId, sharedStateKey: sharedState.key },\n });\n },\n });\n return acquired.claim;\n });\n // 强杀后的收尾兜底(docs/feature/experiments/architecture.md「强杀后的收尾兜底」)的磁盘登记\n // 挂在本地协调根下,与留存注册表 `.niceeval/sandboxes/` 同一个根(默认 cwd/.niceeval,\n // 与 attempt.ts 的 `coordinationRoot` 兜底同一口径)。\n const currentHost = hostname();\n // Establish process identity lazily: only a configured sharedState opts in\n // to this fail-closed cross-process coordination requirement.\n let sharedStateProcessIdentity: string | undefined;\n const makeExperimentHookContext = (run: AgentRun, phase: LifecyclePhase): ExperimentHookContext => {\n const experimentId = run.experimentId;\n return {\n experimentId: run.experimentId,\n selectedEvalIds: run.selectedEvalIds,\n signal: opts.signal ?? new AbortController().signal,\n // progress 是短命状态:只更新本实验运行级行的 detail,不属于任何 attempt 的 active 条目。\n progress: (u) => {\n const suffix = u.current !== undefined && u.total !== undefined ? ` (${u.current}/${u.total})` : \"\";\n reportExperimentProgress({ experimentId, detail: `${u.message}${suffix}` });\n },\n // diagnostic 双落:运行级永久事件流(human/json 都有即时反馈)+ 实验域诊断累积器\n // (持久化,该 Experiment 的 Run 封口时一次写入)——两条通路相互独立,互不派生\n // (docs/runner.md「实验域诊断持久化」)。实验级钩子的事实不属于任何单个 Attempt,不落\n // result.json。\n diagnostic: (input) => {\n reportDiagnostic({\n key: input.dedupeKey ?? `${input.code}:experiment:${experimentId}`,\n code: input.code,\n severity: input.level,\n message: input.message,\n data: { experimentId, ...(input.data ?? {}) },\n });\n recordExperimentDiagnostic({\n experimentId: run.experimentId,\n code: input.code,\n level: input.level,\n message: input.message,\n phase,\n ...(input.data !== undefined ? { data: input.data } : {}),\n ...(input.dedupeKey !== undefined ? { dedupeKey: input.dedupeKey } : {}),\n });\n },\n };\n };\n const replaceSetup = (cell: ExperimentLifecycleCell, setup: ExperimentSetupOutcome): Effect.Effect<void> => cell.mutex.withPermits(1)(Effect.sync(() => {\n const state = cell.state;\n if (state._tag === \"Active\" || state._tag === \"TearingDown\") {\n cell.state = { ...state, setup };\n }\n }));\n const awaitSetup = (setup: ExperimentSetup): Effect.Effect<void, unknown> => setup._tag === \"InProgress\" ? Deferred.await(setup.completion) : Effect.void;\n const setupOutcomeOf = (setup: ExperimentSetup): ExperimentSetupOutcome => {\n if (setup._tag !== \"InProgress\")\n return setup;\n throw new Error(\"Experiment setup completed without recording its terminal outcome.\");\n };\n const releaseSharedStateLease = (run: AgentRun, cell: ExperimentLifecycleCell, cleanupSucceeded: () => boolean): Effect.Effect<void> => Effect.suspend(() => {\n const claim = cell.sharedStateClaim;\n return Effect.sync(() => claim).pipe(Effect.flatMap((heldClaim) => {\n const claim = heldClaim;\n if (claim === undefined)\n return Effect.void;\n const experimentId = run.experimentId ?? run.agent.name;\n const recoveryRequired = (reason: string): Effect.Effect<void> => Effect.sync(() => {\n reportSharedStateRecoveryRequired({\n run,\n experimentId,\n reason,\n phase: \"experiment.teardown\",\n });\n });\n if (!cleanupSucceeded()) {\n // A retained lease is a durable recovery obligation, not a reason\n // to leave a daemon heartbeat/timer behind after this Invocation.\n // `abandon` cannot delete or rewrite the record.\n cell.sharedStateClaim = undefined;\n return claim.abandon.pipe(Effect.catchAll(() => Effect.void), Effect.zipRight(recoveryRequired(\"cleanup-failed\")));\n }\n // Once release starts its heartbeat is interrupted. Do not retain a\n // stale in-memory claim after a failed compare-owner mutation; its\n // durable record is deliberately left for explicit recovery.\n cell.sharedStateClaim = undefined;\n return claim.release.pipe(Effect.catchAll(() => recoveryRequired(\"release-failed\")));\n }));\n });\n const runExperimentTeardown = (run: AgentRun, cell: ExperimentLifecycleCell): Effect.Effect<void, unknown> => Effect.uninterruptibleMask((restore) => cell.mutex.withPermits(1)(Effect.gen(function* () {\n const current = cell.state;\n // setup 时点没走到就没有收尾义务;已完成与在飞状态分别复用自己的确定 Effect。\n if (current._tag === \"Dormant\" || current._tag === \"UntriggeredComplete\" || current._tag === \"TornDown\") {\n return undefined;\n }\n if (current._tag === \"TearingDown\")\n return current.completion;\n // 正常路径、强清 drain 与崩溃路径共同把 Active 原子转成 TearingDown;后到者只 await\n // 同一个 Deferred,因此不双跑、也不空转。\n const completion = yield* Deferred.make<void, unknown>();\n const experimentId = run.experimentId ?? run.agent.name;\n cell.state = {\n _tag: \"TearingDown\",\n pendingAttempts: current.pendingAttempts,\n setup: current.setup,\n completion,\n };\n let cleanupSucceeded = true;\n const teardown = Effect.gen(function* () {\n // A failed setup still has teardown obligations. Capture its outcome\n // rather than short-circuiting the physical pool/provider cleanup.\n yield* Effect.exit(awaitSetup(current.setup));\n // Last Attempt settle -> freeze registry -> stop every reusable pool\n // (Sandbox lifecycle teardown + provider finalizer) -> author hook.\n // Stop failures are recorded but never skip later cleanup.\n const pools = yield* Effect.exit(freezeReusablePoolsForRun(run).pipe(Effect.zipRight(stopReusablePoolsForRun(run))));\n if (Exit.isFailure(pools)) {\n cleanupSucceeded = false;\n const message = `Sandbox reuse cleanup failed before Experiment teardown: ${String(Cause.squash(pools.cause))}`;\n reportDiagnostic({\n key: `sandbox-reuse-cleanup-failed:${experimentId}`,\n code: \"sandbox-reuse-cleanup-failed\",\n severity: \"warning\",\n message,\n data: { experimentId },\n });\n recordExperimentDiagnostic({\n experimentId: run.experimentId,\n code: \"sandbox-reuse-cleanup-failed\",\n level: \"warning\",\n message,\n phase: \"experiment.teardown\",\n });\n }\n // Fresh Sandbox Scopes close inside their owning Attempt and have\n // therefore already reached a real terminal state by the time the\n // final Attempt settles. Runtime converts hook/provider failures into\n // diagnostics to preserve the remaining finalizers, so consult the\n // Experiment cell's physical ledger before deciding whether its\n // sharedState lease can be released.\n if (cell.physicalCleanupFailures.length > 0) {\n cleanupSucceeded = false;\n const details = cell.physicalCleanupFailures\n .map((failure) => `${failure.stage}: ${failure.error.message}`)\n .join(\"; \");\n const message = `Fresh Sandbox cleanup failed before Experiment teardown: ${details}`;\n reportDiagnostic({\n key: `sandbox-fresh-cleanup-failed:${experimentId}`,\n code: \"sandbox-fresh-cleanup-failed\",\n severity: \"warning\",\n message,\n data: { experimentId, failureCount: cell.physicalCleanupFailures.length },\n });\n recordExperimentDiagnostic({\n experimentId: run.experimentId,\n code: \"sandbox-fresh-cleanup-failed\",\n level: \"warning\",\n message,\n phase: \"experiment.teardown\",\n });\n }\n if (run.teardown) {\n reportExperimentHook({ experimentId, hook: \"teardown\", status: \"started\" });\n const startedAt = Date.now();\n const ctx = makeExperimentHookContext(run, \"experiment.teardown\");\n yield* cleanupCallback(() => run.teardown!(ctx)).pipe(Effect.matchEffect({\n onSuccess: () => Effect.sync(() => {\n reportExperimentHook({\n experimentId,\n hook: \"teardown\",\n status: \"done\",\n durationMs: Date.now() - startedAt,\n });\n }),\n onFailure: (error) => Effect.sync(() => {\n cleanupSucceeded = false;\n reportExperimentHook({\n experimentId,\n hook: \"teardown\",\n status: \"failed\",\n durationMs: Date.now() - startedAt,\n });\n // Teardown failure never skips subsequent release handling, but\n // it makes automatic lease release unsafe.\n const message = t(\"runner.experimentTeardownFailed\", {\n experimentId,\n message: error instanceof Error ? error.message : String(error),\n }).trimEnd();\n reportDiagnostic({\n key: `experiment-teardown-failed:${experimentId}`,\n code: \"experiment-teardown-failed\",\n severity: \"warning\",\n message,\n data: { experimentId },\n });\n recordExperimentDiagnostic({\n experimentId: run.experimentId,\n code: \"experiment-teardown-failed\",\n level: \"warning\",\n message,\n phase: \"experiment.teardown\",\n });\n }),\n }));\n }\n // This Experiment has reached its terminal cleanup point whether its\n // individual cleanup steps succeeded or failed.\n experimentCompletedAt.set(experimentId, new Date().toISOString());\n }).pipe(Effect.ensuring(cell.mutex.withPermits(1)(Effect.gen(function* () {\n const state = cell.state;\n const pendingAttempts = state._tag === \"TearingDown\"\n ? state.pendingAttempts\n : current.pendingAttempts;\n const setup = state._tag === \"TearingDown\" ? state.setup : current.setup;\n cell.state = { _tag: \"TornDown\", pendingAttempts, setup: setupOutcomeOf(setup) };\n // settle 后才注销:drain 在执行体在飞时仍能看见本项。\n yield* unregisterExperimentTeardown(experimentId);\n if (run.experimentId) {\n yield* removeTeardownRegistrationIfPresentEffect(coordinationRoot, teardownEntryId(run.experimentId, process.pid)).pipe(Effect.ignore);\n }\n }))), \n // Include both the cleanup body and its lifecycle-registration\n // finalizer in this decision. A failure while unregistering the\n // teardown ownership is still an incomplete cleanup and must retain\n // the sharedState lease; release itself remains outside this check.\n Effect.onExit((exit) => Exit.isFailure(exit)\n ? Effect.sync(() => {\n cleanupSucceeded = false;\n })\n : Effect.void), \n // Lease release happens only when all prior cleanup was successful.\n // Otherwise the durable owner token remains for the public explicit\n // recovery command; the CLI exit sweep is not allowed to erase it.\n // Read `cleanupSucceeded` only when this finalizer executes. Passing\n // its current boolean while constructing the pipeline would capture\n // the initial `true` and could release after a later teardown failure.\n Effect.ensuring(Effect.suspend(() => releaseSharedStateLease(run, cell, () => cleanupSucceeded))));\n // The initiating waiter may be interrupted, but the one published\n // cleanup fiber must still advance through every later cleanup stage.\n // `cleanupCallback` remains explicitly interruptible for its own\n // bounded timeout; this mask only prevents a caller's cancellation from\n // skipping pool stop or Experiment teardown entirely.\n const settle = Effect.exit(Effect.uninterruptible(teardown)).pipe(Effect.flatMap((exit) => Deferred.done(completion, exit)), Effect.asVoid);\n yield* settle.pipe(Effect.forkIn(invocationScope));\n return completion;\n })).pipe(Effect.flatMap((completion) => completion === undefined ? Effect.void : restore(Deferred.await(completion)))));\n /**\n * 启动自愈:本实验触发 setup 之前,先核对磁盘上是否有它自己的遗留登记——上一次运行同一\n * experimentId 被强杀、来不及删除。同宿主且 pid 已死才是遗留义务;pid 活或异宿主可能是\n * 并发 run,不触碰。sharedState caller 必须已先取得同 key exact authority;再原子删登记拿到执行权,\n * 再补执行一次它的 teardown(新进程语义:\n * ctx.selectedEvalIds 从登记恢复,不依赖已丢失的 setup 产物)。失败只记诊断,不阻断、\n * 不重试本次 run 的调度——recovery 补偿的是上一次的泄漏,不是这一次的前提条件。\n */\n const recoverOrphanedTeardownRegistration = (run: AgentRun, experimentId: string): Effect.Effect<void, unknown> => Effect.suspend(() => {\n if (!run.experimentId || !run.teardown)\n return Effect.void;\n return Effect.gen(function* () {\n const registrations = yield* readTeardownRegistrationsEffect(coordinationRoot).pipe(Effect.catchAll(() => Effect.succeed([])));\n for (const { id, entry } of registrations) {\n if (entry.experimentId !== run.experimentId || !isOrphanedTeardownRegistration(entry, currentHost))\n continue;\n const claimed = yield* removeTeardownRegistrationIfPresentEffect(coordinationRoot, id).pipe(Effect.catchAll(() => Effect.succeed(false)));\n if (!claimed)\n continue; // 已被另一个进程抢先删除,义务已被别处接手。\n reportExperimentHook({ experimentId, hook: \"teardown\", status: \"started\", recovery: true });\n const startedAt = Date.now();\n const recoveryCtx: ExperimentHookContext = {\n experimentId,\n selectedEvalIds: entry.selectedEvalIds,\n signal: opts.signal ?? new AbortController().signal,\n progress: (u) => {\n const suffix = u.current !== undefined && u.total !== undefined ? ` (${u.current}/${u.total})` : \"\";\n reportExperimentProgress({ experimentId, detail: `${u.message}${suffix}` });\n },\n diagnostic: (input) => {\n reportDiagnostic({\n key: input.dedupeKey ?? `${input.code}:experiment:${experimentId}`,\n code: input.code,\n severity: input.level,\n message: input.message,\n data: { experimentId, ...(input.data ?? {}) },\n });\n recordExperimentDiagnostic({\n experimentId: run.experimentId,\n code: input.code,\n level: input.level,\n message: input.message,\n phase: \"experiment.teardown\",\n ...(input.data !== undefined ? { data: input.data } : {}),\n ...(input.dedupeKey !== undefined ? { dedupeKey: input.dedupeKey } : {}),\n });\n },\n };\n yield* cleanupCallback(() => run.teardown!(recoveryCtx)).pipe(Effect.matchEffect({\n onSuccess: () => Effect.sync(() => {\n reportExperimentHook({\n experimentId,\n hook: \"teardown\",\n status: \"done\",\n durationMs: Date.now() - startedAt,\n recovery: true,\n });\n }),\n onFailure: (error) => Effect.sync(() => {\n reportExperimentHook({\n experimentId,\n hook: \"teardown\",\n status: \"failed\",\n durationMs: Date.now() - startedAt,\n recovery: true,\n });\n const message = t(\"runner.experimentTeardownFailed\", {\n experimentId,\n message: error instanceof Error ? error.message : String(error),\n }).trimEnd();\n reportDiagnostic({\n key: `experiment-teardown-failed:${experimentId}`,\n code: \"experiment-teardown-failed\",\n severity: \"warning\",\n message,\n data: { experimentId },\n });\n recordExperimentDiagnostic({\n experimentId: run.experimentId,\n code: \"experiment-teardown-failed\",\n level: \"warning\",\n message,\n phase: \"experiment.teardown\",\n });\n }),\n }));\n }\n });\n });\n // Startup recovery can exist even when every Attempt is carried (or there\n // are no selected Attempts), so it cannot borrow an ExperimentLifecycleCell.\n // Each selected run instead gets an independent completion gate; the first\n // real setup awaits the same gate before it can claim or initialize state.\n const startupRecoveryCompletions = new Map<AgentRun, Deferred.Deferred<void, unknown>>();\n const startupRecoveryCompletionsToAwait: Deferred.Deferred<void, unknown>[] = [];\n const ensureExperimentSetup = (a: Attempt): Effect.Effect<void, unknown> => {\n const cell = expLifecycles.get(a.run)!;\n return Effect.uninterruptibleMask((restore) => {\n const startupRecovery = startupRecoveryCompletions.get(a.run);\n return (startupRecovery === undefined ? Effect.void : restore(Deferred.await(startupRecovery))).pipe(Effect.zipRight(cell.mutex.withPermits(1)(Effect.gen(function* () {\n const current = cell.state;\n if (current._tag === \"Active\" || current._tag === \"TearingDown\")\n return current.setup;\n if (current._tag === \"TornDown\")\n return undefined;\n if (current._tag === \"UntriggeredComplete\") {\n return yield* Effect.die(new Error(\"Experiment lifecycle cannot be triggered after all attempts settled.\"));\n }\n const run = a.run;\n const experimentId = run.experimentId ?? run.agent.name;\n if (run.sharedState && cell.sharedStateClaim === undefined) {\n cell.sharedStateClaim = yield* restore(acquireSharedStateClaim(run, experimentId));\n }\n const completion = yield* Deferred.make<void, unknown>();\n // 先写 Active、再登记和启动 worker:随后任何 attempt 或强清都会复用同一个 Effect 完成点。\n cell.state = {\n _tag: \"Active\",\n pendingAttempts: current.pendingAttempts,\n setup: { _tag: \"InProgress\", completion },\n };\n if (run.teardown || run.sharedState) {\n yield* registerExperimentTeardown(experimentId, () => runExperimentTeardown(run, cell));\n }\n let setupStartedAt: number | undefined;\n const setupBody = Effect.gen(function* () {\n // startup gate 已补做已有遗留收尾;sharedState 时此处已经持有同 key exact authority。\n // 再核对一次可覆盖 gate 之后才出现的孤儿登记,随后原子写入本次登记;两步都先于 setup。\n if (run.teardown && run.experimentId) {\n yield* recoverOrphanedTeardownRegistration(run, experimentId);\n yield* writeTeardownRegistrationEffect(coordinationRoot, {\n experimentId: run.experimentId,\n selectedEvalIds: run.selectedEvalIds,\n pid: process.pid,\n host: currentHost,\n startedAt: new Date().toISOString(),\n }).pipe(Effect.catchAll((error) => Effect.sync(() => {\n const message = t(\"runner.teardownRegistrationWriteFailed\", {\n experimentId,\n message: error instanceof Error ? error.message : String(error),\n }).trimEnd();\n reportDiagnostic({\n key: `teardown-registration-write-failed:${experimentId}`,\n code: \"teardown-registration-write-failed\",\n severity: \"warning\",\n message,\n data: { experimentId },\n });\n recordExperimentDiagnostic({\n experimentId: run.experimentId,\n code: \"teardown-registration-write-failed\",\n level: \"warning\",\n message,\n phase: \"experiment.setup\",\n });\n })));\n }\n if (!run.setup)\n return;\n setupStartedAt = Date.now();\n reportExperimentHook({ experimentId, hook: \"setup\", status: \"started\" });\n const ctx = makeExperimentHookContext(run, \"experiment.setup\");\n const value = yield* Effect.tryPromise({\n try: () => Promise.resolve().then(() => run.setup!(ctx)),\n catch: (error) => error,\n });\n const returned = value as unknown;\n if (typeof returned === \"function\") {\n // tsx 旧式 setup cleanup 只在 author callback 边界适配;主错误说明迁移方向。\n yield* cleanupCallback(returned as () => unknown).pipe(Effect.catchAll(() => Effect.void));\n return yield* Effect.fail(new Error(t(\"runner.setupReturnedCleanup\", {\n layer: `ExperimentDef.setup (${experimentId})`,\n hint: \"ExperimentDef.teardown\",\n }).trimEnd()));\n }\n reportExperimentHook({\n experimentId,\n hook: \"setup\",\n status: \"done\",\n durationMs: Date.now() - (setupStartedAt ?? Date.now()),\n });\n });\n const setupWorker = setupBody.pipe(Effect.matchEffect({\n onSuccess: () => replaceSetup(cell, { _tag: \"Succeeded\" }),\n onFailure: (error) => Effect.sync(() => {\n reportExperimentHook({\n experimentId,\n hook: \"setup\",\n status: \"failed\",\n durationMs: Date.now() - (setupStartedAt ?? Date.now()),\n });\n }).pipe(Effect.zipRight(replaceSetup(cell, {\n _tag: \"Failed\",\n error: { ...errorFromThrown(error, \"experiment.setup\"), code: \"experiment-setup-failed\" },\n }))),\n }), Effect.onExit((exit) => {\n const recordUnexpectedExit = Exit.isFailure(exit)\n ? replaceSetup(cell, {\n _tag: \"Failed\",\n error: {\n ...errorFromThrown(Cause.squash(exit.cause), \"experiment.setup\"),\n code: \"experiment-setup-failed\",\n },\n })\n : Effect.void;\n return recordUnexpectedExit.pipe(Effect.zipRight(Deferred.done(completion, exit)), Effect.asVoid);\n }));\n yield* restore(setupWorker).pipe(Effect.forkIn(invocationScope));\n return cell.state.setup;\n })).pipe(Effect.flatMap((setup) => setup === undefined ? Effect.void : restore(awaitSetup(setup))))));\n });\n };\n const hasOrphanedTeardownRegistration = (run: AgentRun): Effect.Effect<boolean, never> => Effect.suspend(() => {\n if (!run.experimentId || !run.teardown)\n return Effect.succeed(false);\n return readTeardownRegistrationsEffect(coordinationRoot).pipe(Effect.map((registrations) => registrations.some(({ entry }) => entry.experimentId === run.experimentId && isOrphanedTeardownRegistration(entry, currentHost))), \n // A missing or unreadable registration directory must never invent an\n // orphan cleanup obligation. The normal setup path still records a\n // diagnostic if it cannot write this Invocation's own registration.\n Effect.catchAll(() => Effect.succeed(false)));\n });\n /**\n * Startup self-heal remains a selected-Experiment responsibility even for a\n * full-carry / zero-Attempt Invocation. For sharedState it first obtains the\n * exact current key's authority. Thus an active or recovering generation is\n * waited on, never implicitly torn down or replaced.\n */\n const recoverStartupOrphanedTeardown = (run: AgentRun, experimentId: string): Effect.Effect<void, unknown> => Effect.gen(function* () {\n if (!(yield* hasOrphanedTeardownRegistration(run)))\n return;\n if (run.sharedState === undefined) {\n yield* recoverOrphanedTeardownRegistration(run, experimentId);\n return;\n }\n const claim = yield* acquireSharedStateClaim(run, experimentId);\n yield* recoverOrphanedTeardownRegistration(run, experimentId).pipe(Effect.ensuring(claim.release.pipe(Effect.catchAll(() => Effect.sync(() => {\n reportSharedStateRecoveryRequired({\n run,\n experimentId,\n reason: \"startup-recovery-release-failed\",\n phase: \"experiment.teardown\",\n });\n })))));\n });\n const startupRecoveryByExperimentId = new Map<string, Deferred.Deferred<void, unknown>>();\n for (const run of effectiveAgentRuns) {\n if (!run.experimentId || !run.teardown)\n continue;\n let completion = startupRecoveryByExperimentId.get(run.experimentId);\n if (completion === undefined) {\n const createdCompletion = yield* Deferred.make<void, unknown>();\n completion = createdCompletion;\n startupRecoveryByExperimentId.set(run.experimentId, createdCompletion);\n startupRecoveryCompletionsToAwait.push(createdCompletion);\n const recovery = recoverStartupOrphanedTeardown(run, run.experimentId).pipe(Effect.exit, Effect.flatMap((exit) => Deferred.done(createdCompletion, exit)), Effect.asVoid);\n yield* recovery.pipe(Effect.forkIn(invocationScope));\n }\n startupRecoveryCompletions.set(run, completion);\n }\n const settleExperimentAttempt = (a: Attempt): Effect.Effect<void, unknown> => {\n const cell = expLifecycles.get(a.run)!;\n return cell.mutex.withPermits(1)(Effect.sync(() => {\n const state = cell.state;\n if (state._tag === \"UntriggeredComplete\")\n return false;\n const pendingAttempts = new Set(state.pendingAttempts);\n pendingAttempts.delete(a);\n if (state._tag === \"Dormant\") {\n cell.state = pendingAttempts.size === 0\n ? { _tag: \"UntriggeredComplete\" }\n : { _tag: \"Dormant\", pendingAttempts };\n return false;\n }\n if (state._tag === \"Active\") {\n cell.state = { ...state, pendingAttempts };\n return pendingAttempts.size === 0;\n }\n cell.state = { ...state, pendingAttempts };\n return false;\n })).pipe(Effect.flatMap((startTeardown) => startTeardown ? runExperimentTeardown(a.run, cell) : Effect.void));\n };\n // ─────────────────────── 派发许可链(docs/runner.md「调度:有界并发」) ───────────────────────\n // 一条 attempt 要真正开跑,顺序通过四道许可,顺序本身是契约:\n // ① 止损闸(checkDispatchHalt)→ ② 实验闸(跨 Invocation 逐槽租约)→ ③ 全局并发位\n // → ④ 派发时刻非阻塞试锁(用例锁)→ preflight → body\n // ②③ 是资源许可,④ 是「这条用例归谁跑」的仲裁。撞上别人持有的新鲜锁时,④ 立刻把 ③ 和 ②\n // 都还回去(不还就会拿着实验闸名额干等持锁方——同一实验的名额域跨 Invocation 共用,\n // maxConcurrency: 1 下这是必然死锁),该用例转 elsewhere 挂起,腾出的位子由排队中的下一条\n // attempt 接手;锁释放/过期后重查携带,仍要自跑的那些从 ① 重新走一遍这条链。\n /**\n * 一把止损闸(docs/feature/error-classification/architecture.md「止损执行体」)。粒度两级:\n * 每个 experiment 一把实验闸,每个 (experiment, eval) 一把 eval 闸;实验闸落下**蕴含**该实验\n * 全部 eval 闸——检查点同时读两把,不做物理级联(eval 闸的数量随选择集变化,级联要遍历,\n * 蕴含只要多读一个字段)。\n *\n * 两个状态载体各有不可替代的角色,不是同一件事的两份副本:\n * - `latch`:`Effect.unsafeMakeLatch(false)`,落闸 = `unsafeOpen()`。`open` 幂等且不可回退,\n * 「落闸幂等、invocation 内不可逆」因此是结构保证而不是调用方自律;`latch.await` 同时是\n * 「等到这把闸落下」的 Effect,给等在全局并发位上的 fiber 当中止信号(见 withGlobalSlot)。\n * - `halted`:同步读的镜像。派发检查点在每轮循环开头问一次,不能为此付一次 await\n * (`Effect.Latch` 没有同步状态读)。恒在 `unsafeOpen()` 之前置位,两者不会互相领先。\n * 实验闸名额租约与撞用例锁后的 elsewhere 轮询都直接竞速 `latch.await`。这样止损只让等待\n * 成功收束;用户取消仍保留为 Effect interruption Cause,不再穿过 AbortSignal / Promise 边界。\n */\n interface HaltGate {\n readonly scope: \"eval\" | \"experiment\";\n /** 展示与折叠用的实验身份(裸 run 退回 agent 名,与 budgetKey / teardown 诊断同一口径)。 */\n readonly experimentId: string;\n /** 持久化用的真实 experimentId;裸 run 没有 Run 可挂,为 undefined。 */\n readonly persistedExperimentId: string | undefined;\n /** eval 闸才有。 */\n readonly evalId: string | undefined;\n /** 两条诊断通路共用的折叠键(= scope + evalId,契约见 architecture.md「诊断」)。 */\n readonly dedupeKey: string;\n readonly latch: Effect.Latch;\n halted: boolean;\n /** 被这把闸拦下、未派发的 attempt 数(进 InvocationCompletion.unstarted)。 */\n unstarted: number;\n /** 触发落闸的失败 message,即作者的修复提示;走完通知与诊断两条通路。 */\n message: string;\n /** 触发落闸的失败所在的生命周期阶段;`--json` 的 warning 事件从 data.phase 读它。 */\n phase: LifecyclePhase;\n }\n const haltGates = new Map<string, HaltGate>();\n const haltGateKey = (run: AgentRun, evalId: string | undefined): string => evalId === undefined\n ? `dispatch-halted:experiment:${run.experimentId ?? run.agent.name}`\n : `dispatch-halted:eval:${run.experimentId ?? run.agent.name}|${evalId}`;\n const haltGateOf = (run: AgentRun, evalId: string | undefined): HaltGate => {\n const dedupeKey = haltGateKey(run, evalId);\n let gate = haltGates.get(dedupeKey);\n if (!gate) {\n gate = {\n scope: evalId === undefined ? \"experiment\" : \"eval\",\n experimentId: run.experimentId ?? run.agent.name,\n persistedExperimentId: run.experimentId,\n evalId,\n dedupeKey,\n latch: Effect.unsafeMakeLatch(false),\n halted: false,\n unstarted: 0,\n message: \"\",\n phase: \"eval.run\",\n };\n haltGates.set(dedupeKey, gate);\n }\n return gate;\n };\n // 闸预先建好(而不是落闸那一刻懒建):等待中的 fiber 要能先订阅 latch / abort,懒建会让\n // 「先开始等、后落闸」的 attempt 订阅到一个已经被换掉的对象上,永远等不到中止。\n for (const a of attempts) {\n haltGateOf(a.run, undefined);\n haltGateOf(a.run, a.evalDef.id);\n }\n /** 这条 attempt 头上的两把闸,实验闸在前(蕴含关系:实验闸落下即视为本 eval 也落闸)。 */\n const haltGatesOf = (a: Attempt): readonly [\n HaltGate,\n HaltGate\n ] => [\n haltGateOf(a.run, undefined),\n haltGateOf(a.run, a.evalDef.id),\n ];\n /**\n * 止损闸检查点:「这条 attempt 是否被作者声明的止损闸拦下」。落闸后本 eval / 本实验剩余\n * attempt 不再派发,计入 `unstarted`、完成状态落 `incomplete`(契约见\n * docs/feature/error-classification/README.md「自愈阶梯与止损阶梯」)。\n *\n * 每轮循环都会重新问一次:挂起在 elsewhere 的用例被唤醒后同样先过这道闸,不会绕开已经落下\n * 的闸重新入场。检查点存在良性竞态——闸落下的瞬间可能有 attempt 已越过检查、照常跑完,\n * 代价是多烧一个沙箱,不为它引入额外互斥(architecture.md「派发」)。\n */\n const checkDispatchHalt = (a: Attempt): {\n halted: false;\n } | {\n halted: true;\n scope: \"eval\" | \"experiment\";\n gate: HaltGate;\n } => {\n const [experimentGate, evalGate] = haltGatesOf(a);\n if (experimentGate.halted)\n return { halted: true, scope: \"experiment\", gate: experimentGate };\n if (evalGate.halted)\n return { halted: true, scope: \"eval\", gate: evalGate };\n return { halted: false };\n };\n /** 「等到这条 attempt 头上任一把闸落下」;给 Effect 世界的等待(全局并发位)当中止信号。 */\n const haltAwait = (a: Attempt): Effect.Effect<void> => {\n const [experimentGate, evalGate] = haltGatesOf(a);\n return Effect.raceFirst(experimentGate.latch.await, evalGate.latch.await);\n };\n /**\n * 运行期即时通知:反馈流一条 error 级通知(architecture.md「观察面」的落闸形态)。与持久化的\n * `dispatch-halted` 诊断**同源互不派生**——两条通路各自从同一份 gate 状态取值,谁都不是谁的\n * 派生物。`data.unstarted` 随未派发数增长刷新(reducer 的 upsert 用最新 data 覆盖、count 自增),\n * cli.ts 的 assembleInvocationCompletion 读它折成 InvocationCompletion.unstarted。\n */\n const reportHaltNotice = (gate: HaltGate): void => {\n reportDiagnostic({\n key: gate.dedupeKey,\n // 稳定词法与持久化侧同一个字面量;折叠到哪一条实验 / 用例由 dedupeKey 与 data 的\n // experimentId / evalId 回答,不编进 code(见 sink.ts 的 DiagnosticInput.code)。\n code: HALT_DIAGNOSTIC_CODE,\n severity: \"error\",\n message: t(gate.scope === \"experiment\" ? \"runner.dispatchHaltedExperiment\" : \"runner.dispatchHaltedEval\", { message: gate.message }).trimEnd(),\n data: {\n experimentId: gate.experimentId,\n scope: gate.scope,\n ...(gate.evalId !== undefined ? { evalId: gate.evalId } : {}),\n phase: gate.phase,\n unstarted: gate.unstarted,\n },\n });\n };\n /**\n * 落闸:attempt 封口的空间轴回执携带超出 `\"attempt\"` 的 scope 时调用(唯一入口)。\n * 幂等——并发 attempt 同时声明同一死因是常态,重复触发只折叠两条通路的诊断计数;不可逆——\n * latch 只开不关,在飞 attempt 之后成功也不重开派发;不抢占——本函数只置状态,不碰任何\n * 已经在跑的 attempt。\n */\n const closeHaltGate = (a: Attempt, declaration: AttemptFailureDeclaration): void => {\n const scope = declaration.class.scope;\n if (scope !== \"eval\" && scope !== \"experiment\")\n return; // 缺省档:死因只属于本次执行,无闸可落\n const gate = haltGateOf(a.run, scope === \"experiment\" ? undefined : a.evalDef.id);\n const message = firstLine(declaration.text);\n // 持久化通路:按 dedupeKey 折叠成一条 dispatch-halted(docs 的形状),落进该 Experiment 的\n // run.json。裸 run 没有 Run 可挂,recordExperimentDiagnostic 自己丢弃。\n recordExperimentDiagnostic({\n experimentId: gate.persistedExperimentId,\n code: HALT_DIAGNOSTIC_CODE,\n level: \"error\",\n message,\n phase: declaration.phase,\n dedupeKey: gate.dedupeKey,\n data: { scope, ...(gate.evalId !== undefined ? { evalId: gate.evalId } : {}) },\n });\n if (!gate.halted) {\n gate.message = message;\n gate.phase = declaration.phase;\n gate.halted = true; // 同步镜像先置位,再开 latch:两者不会互相领先\n gate.latch.unsafeOpen();\n }\n reportHaltNotice(gate);\n };\n /**\n * 未派发记账:与 run 级 fail-fast / budget 停派发同一条通路——每个未派发 attempt 各发一次\n * `attempt:early-exit`(queued → completed,反馈层五项计数守恒),再把当次累计的未派发数刷进\n * 同一条 `dispatch-halted` 诊断。不为没跑过的 attempt 制造 `errored` 记录(architecture.md\n * 「记账」);退出码由观察到失败的那条 `errored` attempt 判红。\n */\n const accountDispatchHalted = (a: Attempt, gate: HaltGate): void => {\n recordCoordinator.markNotDispatched(a);\n gate.unstarted += 1;\n reportAttemptLifecycle({\n type: \"attempt:early-exit\",\n at: Date.now(),\n identity: feedbackIdentity(a),\n who: feedbackWho(a),\n });\n reportHaltNotice(gate);\n };\n /**\n * Eval Group 的不可用策略只约束同一台物理 Sandbox 的后续槽位;它不复用通用\n * dispatch-halted 语义,也绝不把「本来没开始」的槽位伪造成 EvalResult。Group lane\n * 已按规范化 Eval ID 串行,所以 gate 只需同步镜像:前一槽位释放 predecessor 后,下一\n * 槽位在任何 Build / Sandbox 动作前就能看见它。其它 Group 和其它 Experiment 没有共享它。\n */\n interface EvalGroupUnavailableGate {\n readonly experimentId: string | undefined;\n readonly displayExperimentId: string;\n readonly groupId: string;\n readonly onUnavailable: \"stop-group\" | \"replace-sandbox\";\n readonly dedupeKey: string;\n readonly failuresByPhase: Map<\"sandbox.create\" | \"sandbox.prepare\" | \"sandbox.reset\", number>;\n stopped: boolean;\n unstarted: number;\n /** Physical stage is more precise than the closed public LifecyclePhase vocabulary. */\n stage: \"sandbox.create\" | \"sandbox.prepare\" | \"sandbox.reset\";\n /** Durable diagnostic origin stays within the public lifecycle vocabulary. */\n phase: LifecyclePhase;\n message: string;\n }\n const evalGroupUnavailableGates = new Map<string, EvalGroupUnavailableGate>();\n const evalGroupUnavailableGateOf = (a: Attempt): EvalGroupUnavailableGate | undefined => {\n const group = a.evalDef.evalGroup;\n if (group === undefined)\n return undefined;\n const key = JSON.stringify([a.run.experimentId ?? a.run.agent.name, a.run.agent.name, group.id]);\n let gate = evalGroupUnavailableGates.get(key);\n if (gate === undefined) {\n gate = {\n experimentId: a.run.experimentId,\n displayExperimentId: a.run.experimentId ?? a.run.agent.name,\n groupId: group.id,\n onUnavailable: group.onUnavailable,\n dedupeKey: `eval-group-unavailable:${a.run.experimentId ?? a.run.agent.name}|${group.id}`,\n failuresByPhase: new Map(),\n stopped: false,\n unstarted: 0,\n stage: \"sandbox.create\",\n phase: \"sandbox.create\",\n message: \"\",\n };\n evalGroupUnavailableGates.set(key, gate);\n }\n return gate;\n };\n // 预建 gate 和 stop-halt 一样避免「上一槽位刚刚失败、下一槽位已开始等」的换对象竞态。\n for (const a of attempts)\n evalGroupUnavailableGateOf(a);\n const reportEvalGroupUnavailable = (gate: EvalGroupUnavailableGate): void => {\n const message = `Eval Group ${JSON.stringify(gate.groupId)} is unavailable at ${gate.stage}: ${gate.message}`;\n const data = {\n experimentId: gate.displayExperimentId,\n evalGroupId: gate.groupId,\n onUnavailable: gate.onUnavailable,\n phase: gate.stage,\n unstarted: gate.unstarted,\n } as const;\n reportDiagnostic({\n key: gate.dedupeKey,\n code: \"eval-group-unavailable\",\n severity: \"error\",\n message,\n data,\n });\n recordExperimentDiagnostic({\n experimentId: gate.experimentId,\n code: \"eval-group-unavailable\",\n level: \"error\",\n message,\n phase: gate.phase,\n data,\n dedupeKey: gate.dedupeKey,\n });\n };\n /**\n * stop-group 首次物理失败即封住后续 slot。replace-sandbox 留一次机会给**下一** slot;\n * 池的 retire/create 路径完成替换,绝不回跑已经付出成本的 Attempt。同一 lifecycle\n * 阶段第二次失败说明替换也不可用,此时收束该 Group。\n */\n const recordEvalGroupPhysicalFailure = (a: Attempt, phase: \"sandbox.create\" | \"sandbox.prepare\" | \"sandbox.reset\", error: unknown): void => {\n const gate = evalGroupUnavailableGateOf(a);\n if (gate === undefined || gate.stopped)\n return;\n const failures = (gate.failuresByPhase.get(phase) ?? 0) + 1;\n gate.failuresByPhase.set(phase, failures);\n const mustStop = gate.onUnavailable === \"stop-group\" || failures >= 2;\n if (!mustStop) {\n reportDiagnostic({\n key: `eval-group-replacing-sandbox:${gate.displayExperimentId}|${gate.groupId}|${phase}`,\n code: \"eval-group-replacing-sandbox\",\n severity: \"warning\",\n message: `Eval Group ${JSON.stringify(gate.groupId)} will replace its physical Sandbox before a later slot ` +\n `after ${phase} failed: ${firstLine(error instanceof Error ? error.message : String(error))}`,\n data: { experimentId: gate.displayExperimentId, evalGroupId: gate.groupId, phase, onUnavailable: gate.onUnavailable },\n });\n return;\n }\n gate.stopped = true;\n gate.stage = phase;\n gate.phase = phase === \"sandbox.reset\" ? \"sandbox.cleanup\" : phase;\n gate.message = firstLine(error instanceof Error ? error.message : String(error));\n reportEvalGroupUnavailable(gate);\n };\n const accountEvalGroupUnavailable = (a: Attempt, gate: EvalGroupUnavailableGate): void => {\n gate.unstarted += 1;\n cancelReuseAttempt(a);\n // No result, no replacement: this slot never crossed the dispatch boundary.\n reportAttemptLifecycle({\n type: \"attempt:early-exit\",\n at: Date.now(),\n identity: feedbackIdentity(a),\n who: feedbackWho(a),\n });\n reportEvalGroupUnavailable(gate);\n };\n const lockIdentity = { pid: process.pid, host: currentHost };\n // 用例锁(docs/feature/experiments/architecture.md「并发 Invocation:用例锁」):按\n // (experimentId, evalId) 给这批已经确定要真实派发的 attempt 分组——被静态携带筛掉的组合\n // 从不出现在 attempts[] 里,天然满足「全携带用例不取锁」;裸 run(无 experimentId)不接入。\n // 一组(runs > 1 的兄弟 attempt)共享同一把锁:谁先到派发时刻谁试,自己已持有的直接放行,\n // 别人持有则全体挂在同一个等待窗口上,不重复试锁、不各自轮询。\n /** 一次非阻塞试锁的结论。`busy` 直接带出这一条用例的挂起窗口——「发现撞锁」与「挂进哪个\n * 窗口」必须是同一步:分成两步的话,兄弟 attempt 归还许可的那几个 microtask 里窗口可能\n * 已经解决并重新取到锁,它再去建窗口就会读到**自己**的新鲜锁、永久等下去。 */\n type CaseLockTry = {\n kind: \"acquired\";\n } | {\n kind: \"busy\";\n window: Effect.Effect<void>;\n };\n interface CaseLockState {\n experimentId: string;\n evalId: string;\n /** 本用例这次计划的全部 attempt;持有者一次认领它们全部,不按 attempt 拆锁。 */\n group: Attempt[];\n /** 还没收尾的 attempt 序号——`lock_wait` 的计数与「锁还留不留」都读它。 */\n pending: Set<number>;\n /** 本进程此刻持有的锁;undefined = 没持有(还没试 / 撞锁挂起中)。 */\n claim?: CaseLockEffectClaim;\n /** 同组兄弟只允许一条 fiber 做磁盘试锁;后到者在临界区内重读 claim / suspension。 */\n acquireMutex: Effect.Semaphore;\n /** 在飞的挂起窗口:撞锁的兄弟全体等同一个 Deferred。 */\n suspension?: Effect.Effect<void>;\n /** 已经用 `lock_wait started` 报进 `elsewhere`、还没被 `resolved` 报出来的 attempt 数。\n * 五项恒等式要求「报进去多少条就要报出来多少条」:收尾时不能拿当下的 `pending.size`\n * 当迁移数——等待期间被中断而提前 settle 的 attempt 会让 `pending` 缩水,差额就永远\n * 挂在 `elsewhere` 上。 */\n inElsewhere: number;\n }\n const caseLocks = new Map<string, CaseLockState>();\n const caseClaimsAwaitingPublication: CaseLockEffectClaim[] = [];\n for (const a of attempts) {\n if (!a.run.experimentId)\n continue;\n const key = cacheKey(a.run, a.evalDef.id);\n let st = caseLocks.get(key);\n if (!st) {\n st = {\n experimentId: a.run.experimentId,\n evalId: a.evalDef.id,\n group: [],\n pending: new Set<number>(),\n acquireMutex: yield* Effect.makeSemaphore(1),\n inElsewhere: 0,\n };\n caseLocks.set(key, st);\n }\n st.group.push(a);\n st.pending.add(a.attempt);\n }\n const caseStateOf = (a: Attempt): CaseLockState | undefined => a.run.experimentId ? caseLocks.get(cacheKey(a.run, a.evalDef.id)) : undefined;\n /**\n * A late on-disk result cannot become a V1 carried Member in this invocation:\n * the writer's frozen view did not receive an exact source capability during\n * planning. Keep the lock protocol's `resolved` accounting, but dispatch all\n * still-pending Slots normally instead of guessing from legacy result files.\n */\n const resolveCaseWaitWithoutCarry = (st: CaseLockState, waitStartedAt: number | undefined): void => {\n const { experimentId, evalId } = st;\n // 这个窗口当初报进 elsewhere 的条数,收尾必须原数报回来(见 CaseLockState.inElsewhere)。\n const inElsewhere = st.inElsewhere;\n st.inElsewhere = 0;\n if (waitStartedAt === undefined) {\n return;\n }\n // 真实挂起窗口收尾:carried + dispatched 恒等于 \"started\" 报进去的 attempts,这条\n // 恒等式是 elsewhere 不挂账的唯一保证(reducer 只按事件携带的数字增减,不自己推)。\n reportLockWait({\n experimentId,\n evalId,\n status: \"resolved\",\n carried: 0,\n dispatched: inElsewhere,\n waitedMs: Date.now() - waitStartedAt,\n });\n };\n /**\n * 撞新鲜锁后的挂起窗口:这一条用例转 `elsewhere`(不占全局并发位、不占实验闸名额),每个\n * 心跳周期重读一次锁文件;锁消失(正常释放)或过期(可接管)即结束等待并重查携带。等待没有\n * 超时——心跳新鲜就一直等,用户中断照常退出。同组兄弟共享同一个窗口。\n */\n const suspendUntilCaseFree = (st: CaseLockState, holder: CaseLockRecord) => Effect.uninterruptibleMask((restore) => Effect.gen(function* () {\n if (st.suspension)\n return st.suspension;\n const startedAt = Date.now();\n // 等待期间本 eval / 本实验的止损闸落下 → 这一轮等待到头(对方可能还要跑很久,没必要陪着)。\n // 窗口照常走完 resolveCaseWaitWithoutCarry 并发出 `lock_wait resolved`:少发一次 resolved,这批 attempt 就\n // 永远挂在 elsewhere 上,五项恒等式当场破。\n const halt = haltAwait(st.group[0]!);\n const stopWaiting = opts.signal === undefined\n ? halt\n : Effect.raceFirst(halt, interruptOnAbort(opts.signal));\n // 窗口打开这一刻本组还没派发的 attempt 全在 queued(本进程没持锁 = 没有一条开跑),\n // 整批迁进 elsewhere;记下条数,收尾的 resolved 原数迁回(见 CaseLockState.inElsewhere)。\n st.inElsewhere = st.pending.size;\n reportLockWait({\n experimentId: st.experimentId,\n evalId: st.evalId,\n status: \"started\",\n holderPid: holder.pid,\n holderHost: holder.host,\n attempts: st.inElsewhere,\n });\n const poll = Effect.gen(function* () {\n for (;;) {\n const stopped = yield* Effect.raceFirst(Effect.sleep(CASE_LOCK_HEARTBEAT_INTERVAL_MS).pipe(Effect.as(false)), stopWaiting.pipe(Effect.as(true)));\n if (stopped)\n return;\n const record = yield* readCaseLockEffect(coordinationRoot, st.experimentId, st.evalId).pipe(Effect.catchAll(() => Effect.succeed(undefined)));\n if (record === undefined || isCaseLockExpired(record, Date.now()))\n return;\n }\n }).pipe(Effect.ensuring(Effect.sync(() => resolveCaseWaitWithoutCarry(st, startedAt))));\n // 等待本身就是挂起窗口。它不绑定刚归还的全局位 Scope;同组后到者拿到同一 Effect,\n // 每个等待者都可被取消,而任一一次完成都会清掉下一轮重新试锁所读的窗口。\n const window: Effect.Effect<void> = poll.pipe(Effect.ensuring(Effect.sync(() => {\n if (st.suspension === window)\n st.suspension = undefined;\n })));\n st.suspension = window;\n return window;\n }));\n /**\n * 派发时刻的一次**非阻塞**试锁。调用直接留在当前 Effect fiber;`onWaitStart` 只用一个局部\n * AbortController 截断 lock.ts 的轮询,把「新鲜锁」转换成 elsewhere,而用户取消仍沿当前\n * fiber 的 interruption Cause 上抛。撞上过期锁属于一次尝试内部的 rename 接管,照常 acquired。\n */\n const tryAcquireCase = (st: CaseLockState) => st.acquireMutex.withPermits(1)(Effect.suspend(() => {\n // 同组兄弟:自己已持有,直接放行。\n if (st.claim)\n return Effect.succeed<CaseLockTry>({ kind: \"acquired\" });\n // 已经有兄弟挂在窗口上:全体等同一个窗口,不重复试锁。\n if (st.suspension)\n return Effect.succeed<CaseLockTry>({ kind: \"busy\", window: st.suspension });\n return Effect.gen(function* () {\n const { experimentId, evalId } = st;\n // 接管诊断要报\"原持有者是谁\",但 acquireCaseLockEffect 只回传 takenOver 布尔值——取锁前先\n // 无副作用地读一眼当前记录(纯尽力而为:极端时序下这份快照可能已经不是真正被接管的\n // 那条记录,但诊断本来就是人读提示,不是判定依据)。\n const priorHolder = yield* readCaseLockEffect(coordinationRoot, experimentId, evalId).pipe(Effect.catchAll(() => Effect.succeed(undefined)));\n const giveUp = new AbortController();\n let busyWith: CaseLockRecord | undefined;\n return yield* Effect.uninterruptibleMask((restore) => restore(acquireCaseLockEffect(coordinationRoot, experimentId, evalId, lockIdentity, {\n signal: giveUp.signal,\n onWaitStart: (holder) => {\n busyWith = holder;\n giveUp.abort(); // 撞上新鲜锁 = 这次尝试到此为止,不进入 acquireCaseLockEffect 自己的轮询\n },\n })).pipe(Effect.matchEffect({\n onFailure: (error) => {\n const holder = busyWith;\n return holder === undefined\n ? Effect.fail(error)\n : suspendUntilCaseFree(st, holder).pipe(Effect.map((window): CaseLockTry => ({ kind: \"busy\", window })));\n },\n onSuccess: ({ claim, takenOver }) => Effect.sync((): CaseLockTry => {\n // acquire 返回到 claim 登记之间保持 masked;否则恰好落在这条缝里的 interruption\n // 会让 heartbeat/held 已启动、CaseLockState 却没有 release 句柄。\n st.claim = claim;\n if (takenOver) {\n const message = t(\"runner.coordinationRecovered\", { experimentId }).trimEnd();\n reportDiagnostic({\n key: `${COORDINATION_RECOVERED_CODE}:case-lock:${experimentId}|${evalId}`,\n code: COORDINATION_RECOVERED_CODE,\n severity: \"info\",\n message,\n data: {\n experimentId,\n evalId,\n resource: \"case-lock\",\n ...(priorHolder !== undefined ? { previousPid: priorHolder.pid, previousHost: priorHolder.host } : {}),\n },\n });\n }\n // V1 does not convert late legacy rows into carried Members. The frozen writer view is\n // authoritative, so a lock acquired after another Invocation left still dispatches every pending Slot.\n resolveCaseWaitWithoutCarry(st, undefined);\n return { kind: \"acquired\" };\n }),\n })));\n });\n }));\n /** 用例全部 attempt(不论真实派发还是被重查携带命中而跳过)都 settle 后删锁;与\n * ExperimentLifecycle.pendingAttempts 清空触发 teardown 同一种「逐 attempt 身份结算」模式。 */\n const releaseCaseLockIfDone = (st: CaseLockState, attempt: number): Effect.Effect<void> => Effect.sync(() => {\n st.pending.delete(attempt);\n if (st.pending.size > 0)\n return undefined;\n const claim = st.claim;\n st.claim = undefined;\n return claim;\n }).pipe(Effect.tap((claim) => Effect.sync(() => {\n if (claim !== undefined)\n caseClaimsAwaitingPublication.push(claim);\n })));\n /** 派发链一轮的结局:`done` = 这条 attempt 已经了结(跑完 / 被跳过 / 携入 / 中断),\n * `suspend` = 撞上别人持有的用例锁,许可全部归还、挂进 `window` 这个 elsewhere 窗口后重来,\n * `recheck` = 许可获取被止损闸打断,许可全部归还、回到许可链 ① 重新过闸(记账在那里做)。\n * `recheck` 只在闸已经落下时产生,循环顶因此必然收束,不会空转。 */\n type DispatchOutcome = {\n kind: \"done\";\n } | {\n kind: \"suspend\";\n window: Effect.Effect<void>;\n } | {\n kind: \"recheck\";\n };\n /** 全局并发位的显式持有句柄:`withPermits` 的作用域语义没法表达「中途让位、回来再拿」,\n * 而实验级 setup 要求让位(docs/runner.md「调度:有界并发」)。两个成员都\n * 幂等——让位后收尾 finalizer 不会重复归还,回来之后中断也只归还一次。 */\n interface GlobalSlotHold {\n readonly release: Effect.Effect<void>;\n readonly reacquire: Effect.Effect<void>;\n }\n const withGlobalSlot = <E, R>(haltSignal: Effect.Effect<void>, use: (slot: GlobalSlotHold) => Effect.Effect<DispatchOutcome, E, R>): Effect.Effect<DispatchOutcome, E, R> => Effect.uninterruptibleMask((restore) => {\n const state = { held: false };\n const release = Effect.suspend(() => state.held\n ? globalSem.release(1).pipe(Effect.map(() => {\n state.held = false;\n }))\n : Effect.void);\n const reacquire = Effect.suspend(() => state.held\n ? Effect.void\n : globalSem.take(1).pipe(Effect.map(() => {\n state.held = true;\n })));\n // 取位本身可中断(restore):Ctrl+C 不该被「等一个全局位」拖住;拿到之后的执行体同样\n // 可中断,只有归还挂在 ensuring 上,中断路径照样跑。\n //\n // 排队等位期间止损闸落下 → 竞速的 haltSignal 先到,这一轮不进场(交回 recheck,由许可链\n // ① 做未派发记账)。这是「等待集中同闸 attempt 经 interruption 中止」在 Effect 世界的落点;\n // 竞速只覆盖「还在等位」这一段——拿到位子那一刻竞速已结算,之后的执行体不再被抢占。\n // `ensuring(release)` 提到最外层(而不是只挂在拿到位子之后):极端时序下 take 已经成功、\n // 竞速却判 haltSignal 赢,位子照样归还,不泄漏一个全局名额。\n return Effect.raceFirst(restore(reacquire).pipe(Effect.as(true)), restore(haltSignal).pipe(Effect.as(false)))\n .pipe(Effect.flatMap((entered) => entered\n ? restore(use({ release, reacquire }))\n : Effect.succeed<DispatchOutcome>({ kind: \"recheck\" })), Effect.ensuring(release));\n });\n /** Invocation 内实验闸的持有作用域。它只限制此 Invocation 的 attempt,不取得任何\n * 跨进程资源;共享外部状态必须由 `sharedState` 生命周期租约保护。 */\n const withExperimentGate = <E, R>(a: Attempt, use: Effect.Effect<DispatchOutcome, E, R>): Effect.Effect<DispatchOutcome, E | unknown, R> => {\n const localSem = gateLocalSems.get(a.run);\n return localSem === undefined ? use : localSem.withPermits(1)(use);\n };\n // earlyExit:为每个 key 各建一个 AbortController。某 attempt 通过或 errored 时 abort 它,\n // 让并发进行中的同 key attempt 通过 signal 尽早退出,而不只是等排队的才能被跳过。\n const evalAbortControllers = new Map<string, AbortController>();\n const recordFatalController = new AbortController();\n for (const a of attempts) {\n if (a.evalDef.evaluationKind === \"pass\" && a.run.earlyExit && !evalAbortControllers.has(a.key)) {\n evalAbortControllers.set(a.key, new AbortController());\n }\n }\n // 所有 Slot 都先成为轻量 coordination fiber。执行资源仍由实验闸、globalSem 与\n // provider lane 严格有界;但 sharedState / predecessor / lock 等待绝不能占住一个\n // 有限 forEach worker,否则同 key waiter 会饿死持有者的后继 Slot,形成环形等待。\n // 因而这里必须 unbounded:它只放大 suspendable fibers,不放大 Agent、Sandbox 或\n // provider 的物理并发。\n // runAttemptEffect 只把「执行错误」收进 EvalResult.error(不 fail),\n // 但中断(Ctrl+C / kill)照常向上传播 —— 所以一条挂掉不会中断其它 attempt,而中断能停掉全部。\n //\n // signal:把 opts.signal 喂给 run → abort 触发根 fiber 中断 → forEach 中断所有子 fiber\n // → 每个 attempt 的 Sample 跑 release(sb.stop)→ 容器全部停掉(治孤儿)。Effect 保证\n // 所有 finalizer 跑完后才结算,所以下面 summarize 时容器已清理干净。\n //\n // 外部 AbortSignal 以一个 Effect interrupt race 接入本 Scope。中断仍返回 Exit,\n // 于是可以保留部分汇总;非中断缺陷照常向上交给 application edge。\n let interrupted = false;\n const dispatchEffect = Effect.forEach(attempts, (a) => {\n const budgetKey = a.run.experimentId ?? a.run.agent.name;\n const caseState = caseStateOf(a);\n // preflight:「要不要开始跑」的许可判断(首过即停 + budget 上限检查)。两类判断都是\n // 即时返回、不做任何等待,所以放在授位之后没有「占着全局并发槽位干等」的问题;放在\n // 派发时刻(而不是排队时刻)判,读到的是这一刻最新的通过集与已花费。\n const preflight = Effect.gen(function* () {\n // 首过即停:只由 passed 触发(errored 不中止其余样本,见 docs/feature/experiments/\n // architecture.md「调度接口」)。\n if (a.evalDef.evaluationKind === \"pass\" && a.run.earlyExit && passedKeys.has(a.key)) {\n cancelReuseAttempt(a);\n recordCoordinator.markNotDispatched(a);\n yield* reportMutex.withPermits(1)(emitReporterEvent(reporters, {\n type: \"invocation:earlyExit\",\n evalId: a.evalDef.id,\n experimentId: a.run.experimentId,\n }));\n reportAttemptLifecycle({\n type: \"attempt:early-exit\",\n at: Date.now(),\n identity: feedbackIdentity(a),\n who: feedbackWho(a),\n });\n return false;\n }\n // run 级 fail-fast:确定性错误(同一 code 在同一 key 连续复现)已识别 → 停止派发,\n // 未派发计入 unstarted(结论落 incomplete,不伪装成全绿;与首过即停互不混用)。\n const failFast = failFastKeys.get(a.key);\n if (failFast !== undefined) {\n cancelReuseAttempt(a);\n recordCoordinator.markNotDispatched(a);\n failFast.skipped += 1;\n reportAttemptLifecycle({\n type: \"attempt:early-exit\",\n at: Date.now(),\n identity: feedbackIdentity(a),\n who: feedbackWho(a),\n });\n reportDiagnostic({\n key: `fail-fast:${a.key}`,\n code: \"fail-fast\",\n severity: \"warning\",\n message: t(\"runner.failFast\", { evalId: a.evalDef.id, code: failFast.code }).trimEnd(),\n identity: feedbackIdentity(a),\n data: { evalId: a.evalDef.id, code: failFast.code, ...(a.run.experimentId ? { experimentId: a.run.experimentId } : {}) },\n });\n return false;\n }\n const budget = a.run.budget;\n if (budget !== undefined) {\n // 只看已完成 attempt 的价目表估算成本(见上方 BudgetState 注释;observed\n // usage.costUSD 不参与),到顶就跳过新 attempt,\n // 没到顶就立即放行——不等待、不做预测性节流。\n const s = budgetState(budgetKey);\n if (s.spent >= budget) {\n cancelReuseAttempt(a);\n recordCoordinator.markNotDispatched(a);\n if (!budgetReported.has(budgetKey)) {\n budgetReported.add(budgetKey);\n yield* reportMutex.withPermits(1)(emitReporterEvent(reporters, { type: \"invocation:budgetExceeded\", budget, spent: s.spent }));\n }\n // 反馈层:对每一个因预算到顶而不派发的 attempt 各发一次(与上面的\n // attempt:early-exit 同构),让 RunFeedbackState 的 queued/completed 计数与\n // cli.ts 的 assembleRunCompletion() 都能感知到「有 attempt 因预算未派发」——\n // 上面 emitReporterEvent 的 invocation:budgetExceeded 只对旧版 Reporter 接口每\n // budgetKey 报一次,不满足反馈层「每个未派发 attempt 各一条」的计数契约,两者\n // 独立并存。只在挂靠 experiment 时报(budget-exhausted 事件要求真实\n // experimentId;裸 run 不产出这类永久事件,与 locator 的省略规则一致)。\n if (a.run.experimentId) {\n s.unstartedCount += 1;\n reportBudgetExhausted({\n experimentId: a.run.experimentId,\n spent: s.spent,\n unstarted: s.unstartedCount,\n });\n }\n return false;\n }\n }\n return true;\n });\n // body:许可链全部通过之后才跑,真正的执行段。\n const body = (_slot: GlobalSlotHold) => Effect.gen(function* () {\n // 合并全局信号与本 eval 的首过即停信号:任一 abort → 本 attempt 的信号 abort。\n const evalAc = evalAbortControllers.get(a.key);\n const attemptSignal = AbortSignal.any([\n recordFatalController.signal,\n ...(evalAc === undefined ? [] : [evalAc.signal]),\n ...(opts.signal === undefined ? [] : [opts.signal]),\n ]);\n // BuildKey / CaseKey 已在 Attempt.plan 的 physical completion state 中确定;\n // 这里只把协调器执行结果作为必填运行输入传给 materializer,不回写 Attempt。\n const buildLocators = buildLocatorsByPair.get(cacheKey(a.run, a.evalDef.id)) ?? new Map<BuildKey, JsonValue>();\n // 派发前的确定性失败(实验级 setup 失败 / 判分预检失败):不派发 agent、不建沙箱。\n // 这类 Slot 没有 origin Attempt,因而会使 V1 draft 保持 incomplete;不能为它\n // 伪造一个没有 sealed Assertions 的 Member。\n const expLc = expLifecycles.get(a.run);\n const setupFailure = expLc === undefined\n ? Option.none<AttemptError>()\n : (() => {\n const state = expLc.state;\n const outcome = state._tag === \"Active\" || state._tag === \"TearingDown\"\n ? setupOutcomeOf(state.setup)\n : state._tag === \"TornDown\"\n ? state.setup\n : undefined;\n if (outcome === undefined) {\n throw new Error(`Experiment setup has no outcome in lifecycle state ${state._tag}.`);\n }\n return outcome._tag === \"Failed\" ? Option.some(outcome.error) : Option.none<AttemptError>();\n })();\n const precheckFailure = judgePrecheckFailures.get(cacheKey(a.run, a.evalDef.id));\n const buildFailure = buildFailureByPair.get(cacheKey(a.run, a.evalDef.id));\n let blockedError: AttemptError | undefined = recordFatalController.signal.aborted\n ? {\n code: \"record-invocation-fatal\",\n message: \"A prior Record Attempt reservation failed; no further Attempt may start.\",\n origin: attemptOrigin(\"sandbox.queue\"),\n }\n : Option.isSome(setupFailure)\n ? setupFailure.value\n : precheckFailure !== undefined\n ? { code: \"judge-precheck-failed\", message: precheckFailure, origin: attemptOrigin(\"judge.precheck\") }\n : buildFailure !== undefined\n ? buildFailure\n : undefined;\n if (blockedError !== undefined)\n cancelReuseAttempt(a, true);\n if (buildFailure !== undefined) {\n recordExperimentDiagnostic({\n experimentId: a.run.experimentId,\n code: SHARED_BUILD_FAILURE_DIAGNOSTIC,\n level: \"error\",\n message: sharedBuildFailureDetail(a, buildFailure),\n phase: \"sandbox.queue\",\n });\n }\n // A scheduler-admitted Attempt owns a durable identity before any\n // attempt-owned sandbox, Agent, or Eval work begins. Reservation\n // failure is invocation-fatal at the Record publish gate.\n const initialPhase: LifecyclePhase = a.run.agent.kind === \"sandbox\" ? \"sandbox.queue\" : \"eval.run\";\n const reservationAttempted = blockedError === undefined;\n let reservedRecordAttempt: RunnerRecordAttempt | undefined;\n if (reservationAttempted) {\n const reservation = yield* Effect.either(recordCoordinator.reserveAttempt(a));\n if (Either.isLeft(reservation)) {\n recordFatalController.abort();\n blockedError = {\n ...errorFromThrown(reservation.left, initialPhase),\n code: \"record-attempt-reservation-failed\",\n };\n cancelReuseAttempt(a, true);\n }\n else {\n reservedRecordAttempt = reservation.right;\n a.locator = reservation.right.locator;\n }\n }\n yield* reportMutex.withPermits(1)(emitReporterEvent(reporters, {\n type: \"eval:start\",\n eval: { id: a.evalDef.id },\n agent: a.run.agent,\n model: a.run.model,\n attempt: a.attempt,\n experimentId: a.run.experimentId,\n }));\n // attempt:start 是这个 attempt 从 queued 移进 running 的唯一时刻(见\n // src/runner/feedback/reducer.ts 的 attempt:start 分支),必须与 eval:start 同一\n // 调用点、恰好发生一次 —— 否则 RunFeedbackState 的守恒计数会被破坏。phase 只是粗粒度\n // 占位(sandbox 型 attempt 恒为 sandbox.queue,一定正确;非 sandbox 型给\n // eval.run,attempt.ts 内部一旦跑到第一个真实边界会用 attempt:phase 立即纠正,见\n // attempt.ts 的 enterPhase)——attempt.ts 自己不再发 attempt:start,只发\n // attempt:phase,避免两处各发一次导致计数翻倍。\n reportAttemptLifecycle({\n type: \"attempt:start\",\n at: Date.now(),\n identity: feedbackIdentity(a),\n who: feedbackWho(a),\n phase: initialPhase,\n });\n const poolSelection: ReusePoolSelection = blockedError === undefined\n ? yield* reusePoolFor(a)\n : { _tag: \"Fresh\" };\n // 复用池的租借失败(实例创建、SandboxLayer setup 钩子、寿命确认都在池内)是**这条\n // attempt 的终局失败**,不是调度缺陷:失败原样交回这里,先读空间轴回执(作者在\n // setup 钩子里抛的 ExperimentFatalError 由此落闸),再折成 errored 结果走与\n // blockedError 完全相同的下游路径。\n // 拒绝必须经过具名 Effect 边界:否则会变成 defect 打断 forEach,连坐同批其它实验,\n // 且混进兄弟 fiber 的 interrupt 后被当成用户中断吞掉正文(见\n // docs/feature/error-classification/architecture.md「Effect 边界」:attempt fiber 的\n // E 恒为 never;memory/experiment-fatal-presented-as-user-interrupt.md)。\n const completed = yield* Effect.scoped(Effect.gen(function* () {\n const leased = poolSelection._tag === \"Reuse\"\n ? Either.match(yield* Effect.either(poolSelection.pool.acquire(resolveAttemptTimeout(a.run, a.evalDef, opts.config)?.timeoutMs, buildLocators)), {\n onLeft: (error) => ({ _tag: \"Failed\" as const, error }),\n onRight: (lease) => {\n acquiredReuseAttempts.add(a);\n return { _tag: \"Acquired\" as const, lease };\n },\n })\n : { _tag: \"NotRequested\" as const };\n const lease = leased._tag === \"Acquired\" ? leased.lease : undefined;\n // 租借失败归 `sandbox.create` 阶段:池把「创建实例 + 跑 SandboxLayer setup + 确认寿命」\n // 打包成一次借出,调度器这一侧只知道这条 attempt 没能拿到可用实例。\n const leaseError: AttemptError | undefined = leased._tag === \"Failed\" ? errorFromThrown(leased.error, \"sandbox.create\") : undefined;\n if (leased._tag === \"Failed\") {\n cancelReuseAttempt(a, true);\n const declaration = attemptFailureDeclaration(a.run.classifyFailure, \"sandbox.create\", leased.error);\n if (declaration)\n closeHaltGate(a, declaration);\n // This Attempt did start its physical acquisition and is therefore recorded below\n // as an errored result. The Group policy only decides what a later slot may do.\n recordEvalGroupPhysicalFailure(a, \"sandbox.create\", leased.error);\n }\n const failedBeforeDispatch = blockedError ?? leaseError;\n const recordedAttempt = a;\n const evaluated = failedBeforeDispatch\n ? ({\n id: a.evalDef.id,\n description: a.evalDef.description,\n experimentId: a.run.experimentId,\n experiment: experimentRunInfo(a.run, a.plan, a.sandboxPlansByEval, opts.config, a.judge),\n agent: a.run.agent.name,\n model: a.run.model,\n verdict: \"errored\",\n fingerprint: a.fingerprint,\n evaluationAlgorithm: EVALUATION_ALGORITHM,\n attempt: a.attempt,\n startedAt: new Date().toISOString(),\n durationMs: 0,\n factResults: [],\n factUses: [],\n evaluationKind: a.evalDef.evaluationKind,\n ...(a.evalDef.evaluationKind === \"score\"\n ? { scoreResult: scoreFactOutcomeForAttemptError(failedBeforeDispatch) }\n : {}),\n evidenceCoverage: a.run.agent.evidenceCoverage,\n error: failedBeforeDispatch,\n } satisfies EvalResult)\n : yield* runAttemptEffect(recordedAttempt, attemptOptions, sandboxSem, {\n buildLocators,\n runTiming,\n parentSignal: attemptSignal,\n invocationSignal: opts.signal,\n ...(lease\n ? {\n reusedSandbox: {\n sandbox: lease.sandbox,\n reuseSandbox: lease.reuseSandbox,\n reuseOrdinal: lease.reuseOrdinal,\n },\n }\n : {}),\n // 止损闸的消费点:attempt 封口读终局失败的空间轴。scope 经这条**封口回执**\n // 到达调度器,不走错误通道向上传播——attempt fiber 的 E 保持 never,`errored`\n // 仍是 eval runner 的合法结果而不是调度失败(architecture.md「Effect 边界」)。\n onFailureClass: (declaration) => closeHaltGate(a, declaration),\n ...(a.run.sharedState !== undefined && poolSelection._tag === \"Fresh\"\n ? {\n onFreshSandboxCleanupFailure: (failure: FreshSandboxCleanupFailure) => {\n recordFreshSandboxCleanupFailure(a.run, failure);\n },\n }\n : {}),\n onSealedEvaluation: (sealed) => recordCoordinator.noteSealedOrMarkIncomplete(recordedAttempt, sealed),\n });\n if (lease) {\n // Attempt 的 Eval/Agent 收尾已在 runAttemptEffect 内完成;reset 失败会淘汰实例,\n // 本条结果如实保留,后续派发创建替代实例。\n // Only the typed plugin resource prepare code carries physical-resource\n // unavailability. An author SandboxLayer prepare command can also fail at\n // `sandbox.prepare`, but it must not retire a pool or trip this Group gate.\n if (evaluated.error?.code === \"plugin-resource-prepare-failed\") {\n recordEvalGroupPhysicalFailure(a, \"sandbox.prepare\", new Error(evaluated.error.message));\n }\n const mustRetire = reuseResultRequiresRetirement(evaluated);\n yield* lease.commit(mustRetire ? { _tag: \"Retire\" } : { _tag: \"Reset\" });\n }\n return Object.freeze({\n result: evaluated,\n });\n }));\n // Reset/finalizer failures belong to the physical Group instance and\n // only affect later slots; they never rewrite the sealed Attempt.\n if (poolSelection._tag === \"Reuse\") {\n for (const failure of poolSelection.pool.drainRuntimeFailures()) {\n recordEvalGroupPhysicalFailure(a, failure.stage, failure.error);\n }\n }\n const { result } = completed;\n // A never-started blocked Slot has no origin Attempt. A reserved\n // setup/lease failure still closes its origin Attempt with the\n // errored result, without inventing unavailable rich families.\n let locator: string | undefined;\n if (reservedRecordAttempt !== undefined) {\n locator = reservedRecordAttempt.locator;\n result.locator = locator;\n const recordAttempt = yield* recordCoordinator.completeAttemptOrMarkIncomplete(a, result);\n if (recordAttempt !== undefined) {\n locator = recordAttempt.locator;\n result.locator = locator;\n }\n }\n else if (!reservationAttempted) {\n recordCoordinator.markNotDispatched(a);\n }\n // attempt:complete 与上面的 attempt:start 严格一一配对(同一个 body Effect,唯一\n // 出口),覆盖每一个真正跑过 runAttemptEffect 的 attempt(包括之后被下面的并发去重\n // 分支丢弃、不计入 results 的那些)——reducer 的 attempt:complete 无条件\n // running-1/completed+1,少配对一次就会让 running 计数漂移。\n reportAttemptLifecycle({\n type: \"attempt:complete\",\n at: Date.now(),\n identity: feedbackIdentity(a),\n who: feedbackWho(a),\n verdict: result.verdict,\n tokenCount: result.usage\n ? (result.usage.inputTokens ?? 0) + (result.usage.outputTokens ?? 0)\n : undefined,\n estimatedCostUSD: result.estimatedCostUSD,\n });\n if (a.run.budget !== undefined) {\n const s = budgetState(budgetKey);\n if (result.estimatedCostUSD !== undefined) {\n s.spent += result.estimatedCostUSD;\n }\n else if (result.phases?.some((phase) => phase.children?.some((child) => child.key === \"agent.turn\"))) {\n s.completedAgentRunsNoCost += 1;\n if (s.spent === 0 && s.completedAgentRunsNoCost >= 3 && !s.unenforceableWarned) {\n // 连续几次真正跑过 agent 的 attempt 都拿不到成本:budget 对这个 agent\n // 不可执行,说清楚一次。sandbox.create/setup 等前置失败没有 turn,跳过这里:\n // 此时应由 attempt error 回答根因,不能再用计费 warning 抢走注意力。\n // s.unenforceableWarned 已经是 per-budgetKey 的一次性闸门;稳定 key 上的\n // reportDiagnostic 去重是双保险,不依赖它单独生效。\n s.unenforceableWarned = true;\n {\n const message = t(\"runner.budgetUnenforceable\", { budgetKey }).trimEnd();\n reportDiagnostic({ key: `budget-unenforceable:${budgetKey}`, code: \"budget-unenforceable\", severity: \"warning\", message, data: { budgetKey } });\n recordExperimentDiagnostic({\n experimentId: a.run.experimentId,\n code: \"budget-unenforceable\",\n level: \"warning\",\n message,\n phase: \"eval.run\",\n data: { budgetKey },\n });\n }\n }\n }\n }\n if (a.evalDef.evaluationKind === \"pass\" && result.verdict === \"passed\") {\n passedKeys.add(a.key);\n lastErrorCode.delete(a.key);\n evalAc?.abort(); // 让同 key 并发 attempt 尽早退出\n }\n else if (a.evalDef.evaluationKind === \"pass\" && a.run.earlyExit && passedKeys.has(a.key)) {\n // 并发情况:同 key 另一个 attempt 已通过后本 attempt 才完成(被 abort 后产出\n // errored),不计入结果。\n return;\n }\n else if (result.verdict === \"errored\" && !blockedError) {\n // errored 不中止其余样本(基建可能自愈);只有同一错误 code 连续复现才判定为\n // 确定性错误,进 run 级 fail-fast 停止派发(不 abort 已在飞的 attempt)。\n // 派发前确定性失败(实验级 setup 失败、判分预检失败)的合成结果不进 fail-fast:\n // 它不派发 agent、零成本,契约是受影响的「所有」attempt 逐条记 errored 进报告,\n // 不该被止损机制截短。\n const code = result.error?.code ?? \"unexpected-error\";\n const prev = lastErrorCode.get(a.key);\n const streak = prev?.code === code ? prev.streak + 1 : 1;\n lastErrorCode.set(a.key, { code, streak });\n if (streak >= 2 && !failFastKeys.has(a.key)) {\n failFastKeys.set(a.key, { code, skipped: 0 });\n }\n }\n else {\n lastErrorCode.delete(a.key);\n }\n results.push(result);\n // 反馈层的永久失败通知(见 sink.ts 的 FailureInput / docs/feature/experiments/\n // cli.md「什么动态更新,什么逐条追加」表的「failed / errored + locator」行)——\n // 只在拿到 locator 时报(裸 run 没有 locator,不产出这类事件,与上面 result.locator\n // 的省略规则一致),且只报真正计入 results 的 attempt(上面的并发去重分支已经\n // return 掉、不会走到这里,不会为一条被丢弃的重复 attempt 误报失败)。\n if (locator) {\n const failure = failureDetailFromResult(result);\n if (failure)\n reportFailure(failure);\n }\n yield* reportMutex.withPermits(1)(\n // 每个 reporter 单独兜错:一个写文件失败 / 自定义 reporter 抛错只记 diagnostic,\n // 不让一个回调中断其它回调或后续 attempt。\n Effect.forEach(reporters, (reg) => runReporter(reg, \"onEvalComplete\", () => reg.reporter.onEvalComplete?.(result)), { concurrency: \"unbounded\", discard: true }));\n // 和上面的 onEvalComplete 同一把 reportMutex:两条回调路径都要串行化,否则并发\n // attempt 各自触发的 eval:complete 会绕开 permit=1 直接并发跑,和文档承诺的\n // 「报告回调串行化」不一致。\n yield* reportMutex.withPermits(1)(emitReporterEvent(reporters, { type: \"eval:complete\", result }));\n });\n // ③ 全局并发位 → sharedState(如声明,先于 Eval lock)→ 派发时刻试锁 → preflight\n // → 实验级 setup → provider/Sandbox/body。\n // 独占串行 provider(如 local):同一 provider 名的所有 attempt 共享一把 permit=1 的锁。\n // sharedState 获取与 Experiment setup 都是宿主协调,不能让等待者占着该 Provider lane;\n // permit 只包真正触及 provider、Sandbox 与 Attempt body 的执行段。\n const exclusiveSem = exclusiveSemFor(a.plan);\n const arriveAtDispatchWave = dispatchWaveArrive.get(a)!;\n const dispatch = withGlobalSlot(haltAwait(a), (slot) => Effect.gen(function* () {\n yield* arriveAtDispatchWave;\n // 拿到位子的这一刻再问一次闸:排在独占 provider 锁 / 实验闸本地信号量上的那段等待\n // 不在上面的竞速覆盖范围里(竞速只包全局位),闸可能正是在那段时间落下的。\n if (checkDispatchHalt(a).halted)\n return { kind: \"recheck\" } as const;\n // sharedState 的等待不得先占 Eval lock 或全局并发位,也不得运行 setup / 创建\n // Sandbox。拿到租约后这个 Invocation 仍继续自己在本轮已形成的 plan,不采用别的\n // Run 在等待期间发布的 attempt。\n if (a.run.sharedState) {\n const proceed = yield* preflight;\n if (!proceed)\n return { kind: \"done\" } as const;\n authorizedReuseAttempts.add(a);\n yield* slot.release;\n yield* ensureExperimentSetup(a);\n yield* slot.reacquire;\n }\n // 派发时刻取锁:授位之后才试,非阻塞。撞上别人持有的新鲜锁就把这个位子连同实验闸\n // 名额一起还回去(返回 \"suspend\"),由外层转入 elsewhere 挂起;位子当场空出来,\n // 排队中的下一条没被锁的用例接手。\n if (caseState) {\n const outcome = yield* tryAcquireCase(caseState);\n if (outcome.kind === \"busy\")\n return { kind: \"suspend\", window: outcome.window } as const;\n if (!a.run.sharedState && (yield* recordCoordinator.adoptLatePublishedAttempt(a))) {\n return { kind: \"done\" } as const;\n }\n }\n if (!a.run.sharedState) {\n const proceed = yield* preflight;\n if (!proceed)\n return { kind: \"done\" } as const;\n authorizedReuseAttempts.add(a);\n }\n if (!a.run.sharedState && (a.run.setup || a.run.teardown)) {\n // 实验级 setup:第一个通过派发许可的 attempt 真正执行,其余等同一个 memoized\n // Effect completion(作者 setup 失败收进 lc.setupFailed,由 body 合成 errored 结果)。\n // 等它的时候让出全局并发位(docs/runner.md「调度:有界并发」——内部等待一律让位,\n // 慢启动的 setup 不许饿死同批其它实验),回来再重新拿位。实验闸名额不让。\n yield* slot.release;\n yield* ensureExperimentSetup(a);\n yield* slot.reacquire;\n }\n const physicalBody = body(slot).pipe(Effect.as({ kind: \"done\" } as const));\n if (exclusiveSem === undefined)\n return yield* physicalBody;\n // 保持原来的物理资源获取顺序:exclusive provider → 全局位 → body。先还全局位\n // 再等 provider,避免一个已完成 sharedState/setup 协调、却仍在排 exclusive lane 的\n // attempt 饿死其它 provider;拿到 lane 后才回补全局位,Sandbox 与 body 因而仍在两把\n // permit 的保护中。中断时两个作用域各自归还自己实际持有的 permit。\n yield* slot.release;\n return yield* exclusiveSem.withPermits(1)(slot.reacquire.pipe(Effect.zipRight(physicalBody)));\n }));\n // 许可链的循环外壳:撞锁挂起的用例解决后从 ① 重新走一遍(实验闸名额与全局位都要\n // 重新取,不能拿着别人在等的名额干等)。\n const pipeline = Effect.gen(function* () {\n // Group predecessor has settled before this pipeline begins. A physical failure in\n // that predecessor therefore gates this still-queued slot before build, a provider\n // acquire, resource materialization, or a global dispatch permit.\n const unavailable = evalGroupUnavailableGateOf(a);\n if (unavailable?.stopped) {\n accountEvalGroupUnavailable(a, unavailable);\n return;\n }\n // ⓪ 逐 BuildKey 放行:只等本 eval 引用的那几个 key,不引用任何 key 的 attempt\n // 立刻进入许可链。等在这里不占全局并发位,慢构建因此不挡住同批别的 eval。\n const pairKey = cacheKey(a.run, a.evalDef.id);\n yield* Effect.tryPromise({\n try: () => awaitBuildsFor(pairKey),\n catch: (error) => error,\n });\n for (;;) {\n // ① 止损闸:落闸 → 本 attempt 不派发,计 unstarted(完成状态因此落 incomplete)。\n const halt = checkDispatchHalt(a);\n if (halt.halted) {\n cancelReuseAttempt(a);\n accountDispatchHalted(a, halt.gate);\n return;\n }\n // ② Invocation 内实验闸 → ③ 全局位 → sharedState / 生命周期协调 → Eval lock\n // → exclusive provider permit(如声明)→ body。\n const outcome = yield* withExperimentGate(a, dispatch);\n if (outcome.kind === \"done\")\n return;\n // 许可获取被落下的闸打断:许可已随作用域归还,回到 ① 让上面的检查点记账。\n if (outcome.kind === \"recheck\")\n continue;\n // ② ③ 已随作用域归还。挂起等锁:不占并发位、计入 elsewhere;锁释放或过期后\n // 按原优先级回到派发队列(下一轮循环)。\n yield* outcome.window;\n }\n });\n const waveReady = dispatchWaveReady.get(a) ?? Effect.void;\n const wavePipeline = waveReady.pipe(Effect.flatMap(() => pipeline));\n const predecessor = groupedPredecessors.get(a);\n const orderedPipeline = predecessor === undefined\n ? wavePipeline\n : predecessor.pipe(Effect.flatMap(() => wavePipeline));\n // 实验级 teardown / sharedState lease 结算:每个 attempt 收尾(含被 preflight 跳过、被中断的、被用例锁\n // 被 preflight 跳过、被中断的)都从身份集合移除;最后一个触发 ExperimentDef.teardown。ensuring\n // 在中断路径同样执行,重复 finalizer 也不会让状态下溢。\n const withExpLifecycle = !a.run.setup && !a.run.teardown && !a.run.sharedState\n ? orderedPipeline\n : orderedPipeline.pipe(Effect.ensuring(settleExperimentAttempt(a).pipe(Effect.orDie)));\n // 用例锁释放:这个 key 的全部 attempt(真实派发的与被 late-carry 跳过的)都 settle 后\n // 删锁,与上面的实验级 teardown 计数同一种「逐 attempt 收尾时递减,归零触发」模式,\n // 挂在最外层确保晚于实验级 teardown 计数结算(docs「用例全部 attempt 收尾(含沙箱销毁)\n // 后删除自己的锁」)。\n const withCaseLifecycle = !caseState\n ? withExpLifecycle\n : withExpLifecycle.pipe(Effect.ensuring(releaseCaseLockIfDone(caseState, a.attempt)));\n const withWaveLifecycle = withCaseLifecycle.pipe(Effect.ensuring(arriveAtDispatchWave));\n if (predecessor === undefined)\n return withWaveLifecycle;\n const releaseSuccessor = groupedReleases.get(a)!;\n return withWaveLifecycle.pipe(Effect.ensuring(releaseSuccessor));\n }, { concurrency: \"unbounded\", discard: true }).pipe(\n // 中断(用户 Ctrl+C):finalizer 已在中断过程中跑完(容器已停),这里只是把它咽下,\n // 好让流程走到 summarize / onInvocationComplete,用已完成的 results 出一份部分汇总,而不是抛栈。\n // 判据是 `isInterruptedOnly` 而不是 `isInterrupted`:一条 fiber 的缺陷会连带中断兄弟 fiber,\n // 合成的 cause 里同时有 die 与 interrupt,`isInterrupted` 对它同样为真——按它咽下等于把\n // 真·缺陷的正文吞掉、冒充成用户中断(退出码 130),正是\n // memory/experiment-fatal-presented-as-user-interrupt.md 的现象。\n Effect.catchAllCause((cause) => {\n if (Cause.isInterruptedOnly(cause)) {\n interrupted = true;\n return Effect.void;\n }\n return Effect.failCause(cause); // 非中断的意外缺陷:照常抛出\n }));\n const exit = yield* Effect.exit(opts.signal === undefined\n ? dispatchEffect\n : Effect.raceFirst(dispatchEffect, interruptOnAbort(opts.signal)));\n // A full-carry / zero-Attempt invocation has no dispatch fiber that could\n // await startup recovery. Seal its selected-Experiment obligation here; for\n // normal runs the per-setup gate above has already awaited the same Deferred.\n const startupRecoveryExit = yield* Effect.exit(opts.signal === undefined\n ? Effect.forEach(startupRecoveryCompletionsToAwait, Deferred.await, {\n concurrency: \"unbounded\",\n discard: true,\n })\n : Effect.raceFirst(Effect.forEach(startupRecoveryCompletionsToAwait, Deferred.await, {\n concurrency: \"unbounded\",\n discard: true,\n }), interruptOnAbort(opts.signal)));\n // provenance 在这里齐全:没有任何 attempt 依赖的 key 也照样跑完并留下自己那条记录,\n // 中断路径下同批构建随 signal 收束成 cancelled,不把 run.json 的 sandboxBuilds 落空。\n if (runningBuilds !== undefined) {\n const completedBuilds = yield* Effect.tryPromise({\n try: () => runningBuilds.done,\n catch: (error) => error,\n });\n sandboxBuildRecords = [...completedBuilds.records];\n }\n // 复用污染线索:按实例 × 承接序号聚合本次 Run 真实跑出的结果(携带条目不参与——复用实验\n // 不消费也不产出结果沿用)。只指路,不改判定(见 reuse-diagnostics.ts)。\n for (const notice of detectReuseContamination(results)) {\n reportDiagnostic({\n key: `sandbox-reuse-contamination:${notice.experimentId ?? \"\"}:${notice.reuseSandbox}:${notice.phase}`,\n code: \"sandbox-reuse-contamination\",\n severity: \"warning\",\n message: reuseContaminationMessage(notice),\n data: {\n ...(notice.experimentId !== undefined ? { experimentId: notice.experimentId } : {}),\n reuseSandbox: notice.reuseSandbox,\n phase: notice.phase,\n fromOrdinal: notice.fromOrdinal,\n toOrdinal: notice.toOrdinal,\n count: notice.count,\n },\n });\n }\n // 实验级 teardown 兜底扫尾:正常路径由 per-attempt ensuring 的身份集合归零触发(见上),但一次\n // 真实批跑观察到过结算路径未触发的间歇现象(根因未定位,排查记录见 memory 的\n // experiment-teardown-missed-once-in-batch)。走到这里时 forEach 的全部 fiber 连同 finalizer\n // 都已结算,任何仍停在 Active 的实验都意味着泄漏;在此强制收尾并报警示诊断——\n // 扫尾幂等(cleanup 消费一次性),宁可多一道兜底,不把宿主机资源(隧道/容器)留给用户手拆。\n // 真·缺陷抛出前同样要扫(finalizer 语义,见 docs/feature/experiments/architecture.md\n // 「实验级生命周期」);cli 的 main().catch() 只兜沙箱,不知道实验级 cleanup 的存在。\n const sweepExperimentTeardowns = (): Effect.Effect<void, unknown> => Effect.forEach([...expLifecycles], ([run, cell]) => cell.mutex.withPermits(1)(Effect.sync(() => {\n const state = cell.state;\n // 未触发、已完成均无事可扫;在飞的 teardown 仍须 await 同一个 completion。\n if (state._tag === \"Dormant\" || state._tag === \"UntriggeredComplete\" || state._tag === \"TornDown\") {\n return { _tag: \"None\" } as const;\n }\n if (state._tag === \"Active\" && run.teardown) {\n return { _tag: \"Late\", remaining: state.pendingAttempts.size } as const;\n }\n return { _tag: \"Await\" } as const;\n })).pipe(Effect.flatMap((action) => {\n if (action._tag === \"None\")\n return Effect.void;\n if (action._tag === \"Late\") {\n const experimentId = run.experimentId ?? run.agent.name;\n const message = t(\"runner.experimentTeardownLate\", { experimentId }).trimEnd();\n return Effect.sync(() => {\n reportDiagnostic({\n key: `experiment-teardown-late:${experimentId}`,\n code: \"experiment-teardown-late\",\n severity: \"warning\",\n message,\n data: { experimentId, remaining: action.remaining },\n });\n recordExperimentDiagnostic({\n experimentId: run.experimentId,\n code: \"experiment-teardown-late\",\n level: \"warning\",\n message,\n phase: \"experiment.teardown\",\n data: { remaining: action.remaining },\n });\n }).pipe(Effect.zipRight(runExperimentTeardown(run, cell)));\n }\n return runExperimentTeardown(run, cell);\n })), { concurrency: 1, discard: true });\n if (Exit.isFailure(exit)) {\n // Only a pure interruption becomes a partial interrupted Invocation. The\n // AbortSignal may have fired concurrently with a real failure/defect, but\n // must never relabel that Cause as a user interrupt or hide it behind 130.\n if (Cause.isInterruptedOnly(exit.cause)) {\n interrupted = true;\n }\n else {\n return yield* Effect.failCause(exit.cause).pipe(Effect.ensuring(sweepExperimentTeardowns().pipe(Effect.orDie)));\n }\n }\n if (Exit.isFailure(startupRecoveryExit)) {\n if (Cause.isInterruptedOnly(startupRecoveryExit.cause)) {\n interrupted = true;\n }\n else {\n return yield* Effect.failCause(startupRecoveryExit.cause).pipe(Effect.ensuring(sweepExperimentTeardowns().pipe(Effect.orDie)));\n }\n }\n if (interrupted)\n reportInterrupted();\n yield* sweepExperimentTeardowns();\n // Record publication is the intentionally narrow interruption mask. By this\n // point dispatch has stopped and its Scope/finalizers plus experiment\n // teardown have settled; only durable Run publication and the receipt remain.\n // The mask preserves typed writer failures, but this is not an Invocation\n // transaction: SIGINT publication freezes each Run independently, leaving\n // Runs with unsettled real Attempts incomplete while siblings may seal.\n const receipt = yield* Effect.uninterruptibleMask(() => Effect.gen(function* () {\n // These diagnostics are already settled and keyed by exact Experiment /\n // AgentRun identity. Bind them only at the final Runner → Record\n // boundary; the invocation-wide Run timing tree deliberately remains\n // unbound because it cannot be safely attributed to individual Runs.\n for (const run of opts.agentRuns) {\n bindRunnerRunObservabilityDiagnostics({\n run,\n diagnostics: experimentDiagnostics.get(run.experimentId) ?? [],\n });\n }\n const receiptCompletedAtMs = Date.now();\n const publishedRuns = yield* recordCoordinator.publish(receiptCompletedAtMs, interrupted ? \"interrupted\" : \"normal\");\n return Object.freeze({\n invocationId: recordCoordinator.reusePlan.target.invocationId,\n runIds: Object.freeze(publishedRuns.map(({ runId }) => String(runId))),\n startedAt,\n completedAt: new Date(receiptCompletedAtMs).toISOString(),\n completion: interrupted ? \"interrupted\" : \"completed\",\n } satisfies InvocationReceipt);\n })).pipe(Effect.ensuring(Effect.forEach(caseClaimsAwaitingPublication, (claim) => claim.release.pipe(Effect.ignore), {\n concurrency: 1,\n discard: true,\n })));\n // Experiment 收尾协议(docs/runner.md):每个真正出现在这次 Invocation 里的 experimentId\n // 各发一次 experiment:complete,携带它自己的 completedAt(真实 teardown 完成时刻,没有\n // teardown 或未触发时退回当前时刻)与实验域诊断累积器里attribute 给它的记录。全部\n // Experiment 此刻都已经收尾(sweepExperimentTeardowns 已经等过),严格早于下面的\n // invocation:summary——Record 已在上面封口;这个事件只给非持久化的 reporter 消费。\n const invocationExperimentIds = new Set(effectiveAgentRuns.map((r) => r.experimentId).filter((id): id is string => id !== undefined));\n const runTimings = runTiming.finalize();\n for (const experimentId of invocationExperimentIds) {\n yield* emitReporterEvent(reporters, {\n type: \"experiment:complete\",\n experimentId,\n completedAt: experimentCompletedAt.get(experimentId) ?? new Date().toISOString(),\n // Only exact current Record readbacks appear in the invocation snapshot.\n reusedAttempts: reusedAttempts.filter((attempt) => attempt.target.experimentId === experimentId),\n diagnostics: experimentDiagnostics.get(experimentId) ?? [],\n // Run 级共享构建时间与 provenance:属于产出它们的 Run;携带条目不继承。\n ...(runTimings !== undefined ? { timings: runTimings } : {}),\n ...(sandboxBuildRecords.length > 0 ? { sandboxBuilds: sandboxBuildRecords } : {}),\n name: opts.config.name,\n });\n }\n // Stable fresh-result ordering is separate from Record readbacks, which retain\n // the planner's target order and are never coerced into EvalResult.\n const order = new Map(opts.evals.map((e, i) => [e.id, i]));\n results.sort((a, b) => (order.get(a.id) ?? 0) - (order.get(b.id) ?? 0) ||\n a.agent.localeCompare(b.agent) ||\n a.attempt - b.attempt);\n const summary = summarize(results, reusedAttempts, startedAt, Date.now() - t0, opts.config.name);\n yield* emitReporterEvent(reporters, { type: \"invocation:summary\", summary });\n for (const reg of reporters) {\n // required reporter(显式 --junit)在这一步失败,不能中断其它\n // reporter 的收尾——继续跑完剩下的循环,让每个 reporter 都拿到 onInvocationComplete 的机会;\n // 失败本身经 runReporter → reportReporterError 折成诊断,由调用方(cli.ts)读取\n // RunFeedbackState 组装成 InvocationCompletion,让最终 completion/退出码判红(见\n // docs/feature/experiments/cli.md「运行完成状态不只看 verdict 计数」)。\n yield* runReporter(reg, \"onInvocationComplete\", () => reg.reporter.onInvocationComplete?.(summary));\n }\n return receipt;\n }));\n}\n"]}