agent-hitch 0.2.15 → 0.2.17

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 (361) hide show
  1. package/README.md +7 -28
  2. package/README.zh-CN.md +6 -26
  3. package/dist/scripts/benchmark-dataset-verification.js +118 -0
  4. package/dist/scripts/benchmark-dataset-verification.js.map +1 -0
  5. package/dist/scripts/canary-external-endpoint.js +56 -0
  6. package/dist/scripts/canary-external-endpoint.js.map +1 -0
  7. package/dist/scripts/canary-native-training.js +8 -6
  8. package/dist/scripts/canary-native-training.js.map +1 -1
  9. package/dist/scripts/canary-remote-training.js +8 -6
  10. package/dist/scripts/canary-remote-training.js.map +1 -1
  11. package/dist/scripts/check-architecture.js +1 -1
  12. package/dist/scripts/check-architecture.js.map +1 -1
  13. package/dist/src/adapters/providers/codex.js +5 -2
  14. package/dist/src/adapters/providers/codex.js.map +1 -1
  15. package/dist/src/adapters/providers/model-call.js +1 -2
  16. package/dist/src/adapters/providers/model-call.js.map +1 -1
  17. package/dist/src/adapters/providers/training-tool.js +2 -0
  18. package/dist/src/adapters/providers/training-tool.js.map +1 -1
  19. package/dist/src/backends/harbor/artifact-pins.js +42 -0
  20. package/dist/src/backends/harbor/artifact-pins.js.map +1 -0
  21. package/dist/src/backends/harbor/backend.js +16 -8
  22. package/dist/src/backends/harbor/backend.js.map +1 -1
  23. package/dist/src/backends/harbor/bound-credential-helper.js +24 -0
  24. package/dist/src/backends/harbor/bound-credential-helper.js.map +1 -0
  25. package/dist/src/backends/harbor/credential-snapshot.js +71 -0
  26. package/dist/src/backends/harbor/credential-snapshot.js.map +1 -0
  27. package/dist/src/backends/harbor/environment-config.js +25 -2
  28. package/dist/src/backends/harbor/environment-config.js.map +1 -1
  29. package/dist/src/backends/harbor/environment-files.js +143 -0
  30. package/dist/src/backends/harbor/environment-files.js.map +1 -0
  31. package/dist/src/backends/harbor/evaluation-binding.js +160 -0
  32. package/dist/src/backends/harbor/evaluation-binding.js.map +1 -0
  33. package/dist/src/backends/harbor/host-credential-helper.js +5 -0
  34. package/dist/src/backends/harbor/host-credential-helper.js.map +1 -1
  35. package/dist/src/backends/harbor/index.js +2 -0
  36. package/dist/src/backends/harbor/index.js.map +1 -1
  37. package/dist/src/backends/harbor/model-proxy-config.js +3 -18
  38. package/dist/src/backends/harbor/model-proxy-config.js.map +1 -1
  39. package/dist/src/backends/harbor/portable-regrade.js +15 -3
  40. package/dist/src/backends/harbor/portable-regrade.js.map +1 -1
  41. package/dist/src/backends/harbor/python-runtime.js +71 -0
  42. package/dist/src/backends/harbor/python-runtime.js.map +1 -0
  43. package/dist/src/backends/harbor/tools.js +6 -4
  44. package/dist/src/backends/harbor/tools.js.map +1 -1
  45. package/dist/src/backends/index.js +3 -0
  46. package/dist/src/backends/index.js.map +1 -1
  47. package/dist/src/cli/arguments.js +30 -30
  48. package/dist/src/cli/arguments.js.map +1 -1
  49. package/dist/src/cli/commands/capabilities.js +7 -3
  50. package/dist/src/cli/commands/capabilities.js.map +1 -1
  51. package/dist/src/cli/commands/daemon.js +0 -17
  52. package/dist/src/cli/commands/daemon.js.map +1 -1
  53. package/dist/src/cli/commands/eval-binding.js +32 -0
  54. package/dist/src/cli/commands/eval-binding.js.map +1 -0
  55. package/dist/src/cli/commands/eval.js +21 -15
  56. package/dist/src/cli/commands/eval.js.map +1 -1
  57. package/dist/src/cli/commands/models.js +32 -45
  58. package/dist/src/cli/commands/models.js.map +1 -1
  59. package/dist/src/cli/commands/run.js +0 -35
  60. package/dist/src/cli/commands/run.js.map +1 -1
  61. package/dist/src/cli/main.js +0 -4
  62. package/dist/src/cli/main.js.map +1 -1
  63. package/dist/src/cli/output.js +5 -16
  64. package/dist/src/cli/output.js.map +1 -1
  65. package/dist/src/control-plane/eval-records.js +3 -1
  66. package/dist/src/control-plane/eval-records.js.map +1 -1
  67. package/dist/src/control-plane/eval-recovery.js +4 -1
  68. package/dist/src/control-plane/eval-recovery.js.map +1 -1
  69. package/dist/src/control-plane/eval-scheduler.js +16 -8
  70. package/dist/src/control-plane/eval-scheduler.js.map +1 -1
  71. package/dist/src/control-plane/index.js +0 -2
  72. package/dist/src/control-plane/index.js.map +1 -1
  73. package/dist/src/control-plane/model-capture-planning.js +3 -4
  74. package/dist/src/control-plane/model-capture-planning.js.map +1 -1
  75. package/dist/src/control-plane/remote-model-routes.js +4 -24
  76. package/dist/src/control-plane/remote-model-routes.js.map +1 -1
  77. package/dist/src/control-plane/remote-offer-contract.js +2 -2
  78. package/dist/src/control-plane/remote-offer-contract.js.map +1 -1
  79. package/dist/src/control-plane/remote-result-transport.js +7 -8
  80. package/dist/src/control-plane/remote-result-transport.js.map +1 -1
  81. package/dist/src/control-plane/remote-work-coordinator.js +2 -2
  82. package/dist/src/control-plane/remote-work-coordinator.js.map +1 -1
  83. package/dist/src/control-plane/remote-work-recovery.js +2 -2
  84. package/dist/src/control-plane/remote-work-recovery.js.map +1 -1
  85. package/dist/src/control-plane/remote-worker-protocol.js +1 -1
  86. package/dist/src/control-plane/remote-worker-protocol.js.map +1 -1
  87. package/dist/src/control-plane/remote-worker-runner.js +21 -6
  88. package/dist/src/control-plane/remote-worker-runner.js.map +1 -1
  89. package/dist/src/control-plane/remote-workers.js +2 -2
  90. package/dist/src/control-plane/remote-workers.js.map +1 -1
  91. package/dist/src/control-plane/rerun-recovery.js +1 -1
  92. package/dist/src/control-plane/rerun-recovery.js.map +1 -1
  93. package/dist/src/control-plane/rerun-scheduler.js +21 -14
  94. package/dist/src/control-plane/rerun-scheduler.js.map +1 -1
  95. package/dist/src/control-plane/rerun-source.js +5 -2
  96. package/dist/src/control-plane/rerun-source.js.map +1 -1
  97. package/dist/src/control-plane/rerun-submission.js +7 -5
  98. package/dist/src/control-plane/rerun-submission.js.map +1 -1
  99. package/dist/src/control-plane/synthetic-result.js +3 -2
  100. package/dist/src/control-plane/synthetic-result.js.map +1 -1
  101. package/dist/src/control-plane/worker-model-relay.js +1 -1
  102. package/dist/src/control-plane/worker-model-relay.js.map +1 -1
  103. package/dist/src/controller-runtime/hash.js +6 -0
  104. package/dist/src/controller-runtime/hash.js.map +1 -1
  105. package/dist/src/daemon/client.js +12 -35
  106. package/dist/src/daemon/client.js.map +1 -1
  107. package/dist/src/daemon/evaluation-binding.js +33 -0
  108. package/dist/src/daemon/evaluation-binding.js.map +1 -0
  109. package/dist/src/daemon/evaluation-submission.js +27 -0
  110. package/dist/src/daemon/evaluation-submission.js.map +1 -0
  111. package/dist/src/daemon/index.js +1 -0
  112. package/dist/src/daemon/index.js.map +1 -1
  113. package/dist/src/daemon/json-stream.js +98 -0
  114. package/dist/src/daemon/json-stream.js.map +1 -0
  115. package/dist/src/daemon/scheduler.js +1 -4
  116. package/dist/src/daemon/scheduler.js.map +1 -1
  117. package/dist/src/daemon/server.js +14 -54
  118. package/dist/src/daemon/server.js.map +1 -1
  119. package/dist/src/domain/endpoints.js +2 -0
  120. package/dist/src/domain/endpoints.js.map +1 -0
  121. package/dist/src/domain/evaluation-binding.js +5 -0
  122. package/dist/src/domain/evaluation-binding.js.map +1 -0
  123. package/dist/src/domain/index.js +2 -0
  124. package/dist/src/domain/index.js.map +1 -1
  125. package/dist/src/domain/runs.js.map +1 -1
  126. package/dist/src/evals/benchmark-adapter-manifest.js +95 -32
  127. package/dist/src/evals/benchmark-adapter-manifest.js.map +1 -1
  128. package/dist/src/evals/benchmark-verification.js +106 -0
  129. package/dist/src/evals/benchmark-verification.js.map +1 -0
  130. package/dist/src/evals/collect-only-rerun.js +3 -2
  131. package/dist/src/evals/collect-only-rerun.js.map +1 -1
  132. package/dist/src/evals/directory.js +9 -1
  133. package/dist/src/evals/directory.js.map +1 -1
  134. package/dist/src/evals/endpoint-attempts.js +112 -0
  135. package/dist/src/evals/endpoint-attempts.js.map +1 -0
  136. package/dist/src/evals/endpoint-usage.js +8 -0
  137. package/dist/src/evals/endpoint-usage.js.map +1 -0
  138. package/dist/src/evals/environment-binding.js +9 -0
  139. package/dist/src/evals/environment-binding.js.map +1 -0
  140. package/dist/src/evals/eval-artifact-planning.js +10 -1
  141. package/dist/src/evals/eval-artifact-planning.js.map +1 -1
  142. package/dist/src/evals/eval-finalization.js +2 -3
  143. package/dist/src/evals/eval-finalization.js.map +1 -1
  144. package/dist/src/evals/eval-logical-plan.js +2 -0
  145. package/dist/src/evals/eval-logical-plan.js.map +1 -1
  146. package/dist/src/evals/eval-result-builder.js +4 -0
  147. package/dist/src/evals/eval-result-builder.js.map +1 -1
  148. package/dist/src/evals/eval-state.js +22 -0
  149. package/dist/src/evals/eval-state.js.map +1 -0
  150. package/dist/src/evals/execution-plan.js +6 -2
  151. package/dist/src/evals/execution-plan.js.map +1 -1
  152. package/dist/src/evals/index.js +5 -1
  153. package/dist/src/evals/index.js.map +1 -1
  154. package/dist/src/evals/infrastructure-retry.js +2 -0
  155. package/dist/src/evals/infrastructure-retry.js.map +1 -1
  156. package/dist/src/evals/model-capture-runtime.js +9 -13
  157. package/dist/src/evals/model-capture-runtime.js.map +1 -1
  158. package/dist/src/evals/native-phase-evidence.js +8 -2
  159. package/dist/src/evals/native-phase-evidence.js.map +1 -1
  160. package/dist/src/evals/planned-execution.js +7 -2
  161. package/dist/src/evals/planned-execution.js.map +1 -1
  162. package/dist/src/evals/planned-progress-publisher.js +18 -5
  163. package/dist/src/evals/planned-progress-publisher.js.map +1 -1
  164. package/dist/src/evals/planned-retry-execution.js +1 -0
  165. package/dist/src/evals/planned-retry-execution.js.map +1 -1
  166. package/dist/src/evals/preparation-rerun.js +0 -1
  167. package/dist/src/evals/preparation-rerun.js.map +1 -1
  168. package/dist/src/evals/progress.js +92 -7
  169. package/dist/src/evals/progress.js.map +1 -1
  170. package/dist/src/evals/records.js +12 -2
  171. package/dist/src/evals/records.js.map +1 -1
  172. package/dist/src/evals/recovery.js +2 -0
  173. package/dist/src/evals/recovery.js.map +1 -1
  174. package/dist/src/evals/remote-rerun-execution.js +1 -3
  175. package/dist/src/evals/remote-rerun-execution.js.map +1 -1
  176. package/dist/src/evals/remote-verifier-rerun.js +1 -1
  177. package/dist/src/evals/remote-verifier-rerun.js.map +1 -1
  178. package/dist/src/evals/request.js +14 -45
  179. package/dist/src/evals/request.js.map +1 -1
  180. package/dist/src/evals/rerun-observation.js +31 -0
  181. package/dist/src/evals/rerun-observation.js.map +1 -0
  182. package/dist/src/evals/rerun.js +23 -28
  183. package/dist/src/evals/rerun.js.map +1 -1
  184. package/dist/src/evals/service.js +45 -42
  185. package/dist/src/evals/service.js.map +1 -1
  186. package/dist/src/evals/shared-runtime.js +125 -0
  187. package/dist/src/evals/shared-runtime.js.map +1 -0
  188. package/dist/src/evals/trial-import.js +10 -2
  189. package/dist/src/evals/trial-import.js.map +1 -1
  190. package/dist/src/evals/trial-publication-recovery.js +1 -1
  191. package/dist/src/evals/trial-publication-recovery.js.map +1 -1
  192. package/dist/src/evals/verifier-artifacts.js +1 -0
  193. package/dist/src/evals/verifier-artifacts.js.map +1 -1
  194. package/dist/src/evals/verifier-only-rerun.js +1 -1
  195. package/dist/src/evals/verifier-only-rerun.js.map +1 -1
  196. package/dist/src/evals/verifier-rerun-result.js +3 -2
  197. package/dist/src/evals/verifier-rerun-result.js.map +1 -1
  198. package/dist/src/evals/verifier-score-artifacts.js +9 -1
  199. package/dist/src/evals/verifier-score-artifacts.js.map +1 -1
  200. package/dist/src/foundation/config.js +0 -5
  201. package/dist/src/foundation/config.js.map +1 -1
  202. package/dist/src/inference/index.js +3 -22
  203. package/dist/src/inference/index.js.map +1 -1
  204. package/dist/src/inference/lock.js +44 -130
  205. package/dist/src/inference/lock.js.map +1 -1
  206. package/dist/src/model-access/endpoint-contract.js +127 -0
  207. package/dist/src/model-access/endpoint-contract.js.map +1 -0
  208. package/dist/src/model-access/endpoint-credentials.js +54 -0
  209. package/dist/src/model-access/endpoint-credentials.js.map +1 -0
  210. package/dist/src/model-access/endpoint-probe-stream.js +66 -0
  211. package/dist/src/model-access/endpoint-probe-stream.js.map +1 -0
  212. package/dist/src/model-access/endpoint-verification.js +76 -0
  213. package/dist/src/model-access/endpoint-verification.js.map +1 -0
  214. package/dist/src/model-access/endpoints.js +105 -0
  215. package/dist/src/model-access/endpoints.js.map +1 -0
  216. package/dist/src/model-access/index.js +5 -1
  217. package/dist/src/model-access/index.js.map +1 -1
  218. package/dist/src/model-access/proxy.js +57 -14
  219. package/dist/src/model-access/proxy.js.map +1 -1
  220. package/dist/src/model-access/remote-model.js +21 -29
  221. package/dist/src/model-access/remote-model.js.map +1 -1
  222. package/dist/src/model-access/usage.js +30 -0
  223. package/dist/src/model-access/usage.js.map +1 -0
  224. package/dist/src/runs/endpoint-runtime.js +40 -0
  225. package/dist/src/runs/endpoint-runtime.js.map +1 -0
  226. package/dist/src/runs/executor.js +28 -42
  227. package/dist/src/runs/executor.js.map +1 -1
  228. package/dist/src/runs/local-inference-environment.js +5 -53
  229. package/dist/src/runs/local-inference-environment.js.map +1 -1
  230. package/dist/src/runs/manifest.js +1 -0
  231. package/dist/src/runs/manifest.js.map +1 -1
  232. package/dist/src/runs/outcome.js +3 -10
  233. package/dist/src/runs/outcome.js.map +1 -1
  234. package/dist/src/runs/queued.js +3 -2
  235. package/dist/src/runs/queued.js.map +1 -1
  236. package/dist/src/runs/records.js +3 -0
  237. package/dist/src/runs/records.js.map +1 -1
  238. package/dist/src/runs/request.js +10 -38
  239. package/dist/src/runs/request.js.map +1 -1
  240. package/dist/src/workers/remote-harbor-work-spec.js +8 -10
  241. package/dist/src/workers/remote-harbor-work-spec.js.map +1 -1
  242. package/dist/src/workers/remote-harbor-worker.js +3 -0
  243. package/dist/src/workers/remote-harbor-worker.js.map +1 -1
  244. package/docs/evidence/eval-preparation-2026-10-09.json +393 -0
  245. package/docs/evidence/eval-preparation-2026-10-09.md +178 -0
  246. package/docs/local-model-inference-spec.zh-CN.md +4 -663
  247. package/docs/resource-storage.zh-CN.md +116 -0
  248. package/docs/schemas/endpoint-evaluation-attempt.schema.json +29 -0
  249. package/docs/schemas/eval-artifact-pin.schema.json +14 -0
  250. package/docs/schemas/eval-execution-plan.schema.json +486 -105
  251. package/docs/schemas/eval-progress.schema.json +1 -1
  252. package/docs/schemas/eval-request.schema.json +149 -18
  253. package/docs/schemas/eval-rerun-submission.schema.json +8 -1
  254. package/docs/schemas/eval-result.schema.json +310 -56
  255. package/docs/schemas/evaluation-binding.schema.json +15 -0
  256. package/docs/schemas/external-endpoint-binding.schema.json +153 -0
  257. package/docs/schemas/external-endpoint-config.schema.json +93 -0
  258. package/docs/schemas/inference-execution-evidence.schema.json +253 -3
  259. package/docs/schemas/inference-lock-v3.schema.json +6 -0
  260. package/docs/schemas/inference-lock.schema.json +842 -341
  261. package/docs/schemas/ordered-eval-control.schema.json +7 -1
  262. package/docs/schemas/ready-endpoint-binding.schema.json +201 -0
  263. package/docs/schemas/run-manifest.schema.json +6 -0
  264. package/docs/schemas/run-request.schema.json +122 -20
  265. package/examples/external-inference/.env.example +16 -0
  266. package/examples/external-inference/README.md +203 -0
  267. package/examples/external-inference/accept.mjs +297 -0
  268. package/examples/external-inference/compose.gateway.yaml +119 -0
  269. package/examples/external-inference/compose.single.yaml +64 -0
  270. package/examples/external-inference/compose.tp2.yaml +15 -0
  271. package/examples/external-inference/deployment.example.json +58 -0
  272. package/examples/external-inference/endpoint.chat-completions.example.json +13 -0
  273. package/examples/external-inference/endpoint.responses.example.json +13 -0
  274. package/integrations/harbor/hitch_build_inputs.py +213 -0
  275. package/integrations/harbor/hitch_build_process.py +126 -0
  276. package/integrations/harbor/hitch_compose_preparation.py +274 -0
  277. package/integrations/harbor/hitch_harbor_agent.py +25 -39
  278. package/integrations/harbor/hitch_harbor_environment.py +96 -3
  279. package/integrations/harbor/hitch_image_cache.py +357 -0
  280. package/integrations/harbor/hitch_python_runtime.py +303 -0
  281. package/integrations/harbor/hitch_shared_runtime.py +123 -0
  282. package/integrations/model-call/cli.js +11 -10
  283. package/integrations/training-tool/cli.js +56 -15
  284. package/node_modules/smol-toml/LICENSE +24 -0
  285. package/node_modules/smol-toml/README.md +418 -0
  286. package/node_modules/smol-toml/dist/date.d.ts +41 -0
  287. package/node_modules/smol-toml/dist/date.js +127 -0
  288. package/node_modules/smol-toml/dist/error.d.ts +38 -0
  289. package/node_modules/smol-toml/dist/error.js +63 -0
  290. package/node_modules/smol-toml/dist/extract.js +69 -0
  291. package/node_modules/smol-toml/dist/index.cjs +734 -0
  292. package/node_modules/smol-toml/dist/index.d.ts +43 -0
  293. package/node_modules/smol-toml/dist/index.js +33 -0
  294. package/node_modules/smol-toml/dist/parse.d.ts +36 -0
  295. package/node_modules/smol-toml/dist/parse.js +149 -0
  296. package/node_modules/smol-toml/dist/primitive.js +238 -0
  297. package/node_modules/smol-toml/dist/stringify.d.ts +31 -0
  298. package/node_modules/smol-toml/dist/stringify.js +181 -0
  299. package/node_modules/smol-toml/dist/struct.js +179 -0
  300. package/node_modules/smol-toml/dist/util.d.ts +38 -0
  301. package/node_modules/smol-toml/dist/util.js +89 -0
  302. package/node_modules/smol-toml/package.json +68 -0
  303. package/package.json +15 -4
  304. package/dist/src/cli/commands/local.js +0 -130
  305. package/dist/src/cli/commands/local.js.map +0 -1
  306. package/dist/src/cli/commands/model-node.js +0 -26
  307. package/dist/src/cli/commands/model-node.js.map +0 -1
  308. package/dist/src/control-plane/inference-manager.js +0 -357
  309. package/dist/src/control-plane/inference-manager.js.map +0 -1
  310. package/dist/src/control-plane/managed-gateway-receipt.js +0 -26
  311. package/dist/src/control-plane/managed-gateway-receipt.js.map +0 -1
  312. package/dist/src/control-plane/managed-service-recovery.js +0 -158
  313. package/dist/src/control-plane/managed-service-recovery.js.map +0 -1
  314. package/dist/src/daemon/inference-prepare.js +0 -47
  315. package/dist/src/daemon/inference-prepare.js.map +0 -1
  316. package/dist/src/inference/daemon-capacity.js +0 -41
  317. package/dist/src/inference/daemon-capacity.js.map +0 -1
  318. package/dist/src/inference/device-reservation.js +0 -58
  319. package/dist/src/inference/device-reservation.js.map +0 -1
  320. package/dist/src/inference/doctor.js +0 -95
  321. package/dist/src/inference/doctor.js.map +0 -1
  322. package/dist/src/inference/generation-recovery.js +0 -83
  323. package/dist/src/inference/generation-recovery.js.map +0 -1
  324. package/dist/src/inference/managed-launcher.js +0 -35
  325. package/dist/src/inference/managed-launcher.js.map +0 -1
  326. package/dist/src/inference/materialize.js +0 -66
  327. package/dist/src/inference/materialize.js.map +0 -1
  328. package/dist/src/inference/model-location.js +0 -34
  329. package/dist/src/inference/model-location.js.map +0 -1
  330. package/dist/src/inference/node-client.js +0 -167
  331. package/dist/src/inference/node-client.js.map +0 -1
  332. package/dist/src/inference/node-registry.js +0 -79
  333. package/dist/src/inference/node-registry.js.map +0 -1
  334. package/dist/src/inference/observation.js +0 -79
  335. package/dist/src/inference/observation.js.map +0 -1
  336. package/dist/src/inference/preflight.js +0 -132
  337. package/dist/src/inference/preflight.js.map +0 -1
  338. package/dist/src/inference/process-sglang.js +0 -169
  339. package/dist/src/inference/process-sglang.js.map +0 -1
  340. package/dist/src/inference/protocol-probe.js +0 -29
  341. package/dist/src/inference/protocol-probe.js.map +0 -1
  342. package/dist/src/inference/remote-model-store.js +0 -24
  343. package/dist/src/inference/remote-model-store.js.map +0 -1
  344. package/dist/src/inference/runtime-catalog.js +0 -41
  345. package/dist/src/inference/runtime-catalog.js.map +0 -1
  346. package/dist/src/inference/runtime-store.js +0 -93
  347. package/dist/src/inference/runtime-store.js.map +0 -1
  348. package/dist/src/inference/service-attachment.js +0 -46
  349. package/dist/src/inference/service-attachment.js.map +0 -1
  350. package/dist/src/inference/service-inspection.js +0 -38
  351. package/dist/src/inference/service-inspection.js.map +0 -1
  352. package/dist/src/inference/sglang.js +0 -279
  353. package/dist/src/inference/sglang.js.map +0 -1
  354. package/dist/src/inference/supervisor.js +0 -460
  355. package/dist/src/inference/supervisor.js.map +0 -1
  356. package/dist/src/model-access/local-gateway-request.js +0 -139
  357. package/dist/src/model-access/local-gateway-request.js.map +0 -1
  358. package/dist/src/model-access/local-gateway.js +0 -323
  359. package/dist/src/model-access/local-gateway.js.map +0 -1
  360. package/dist/src/runs/local-inference-run.js +0 -53
  361. package/dist/src/runs/local-inference-run.js.map +0 -1
@@ -0,0 +1,393 @@
1
+ {
2
+ "recorded_at": "2026-10-09",
3
+ "scope": "Historical measurements preceding the PR cancellation-cleanup hardening and transplant to dev; no claim that the final PR runtime was used in these measurements.",
4
+ "environment": {
5
+ "host": "Linux x86_64; Intel Xeon Platinum KVM guest; 16 logical CPUs; 65,923,194,880 bytes RAM",
6
+ "node": "22.22.1",
7
+ "docker": "29.1.3",
8
+ "harbor": "0.21.0",
9
+ "model": "GPT-6 Luna via subscription (provider snapshot unresolved)"
10
+ },
11
+ "provenance": [
12
+ {
13
+ "archive": "profiling-20/dataset-fix-replay.json",
14
+ "sha256": "208c288701c3ad2aad541fa08caf7a234436263ed50e02b75db8380e47180e06"
15
+ },
16
+ {
17
+ "archive": "profiling-runtime-sharing/setup-comparison.json",
18
+ "sha256": "076bee8f9a5c49d1fcad24103a4be1ba437f32b51b71aed8fbfca36e650d3bd9"
19
+ },
20
+ {
21
+ "archive": "image-preparation-optimization/results.json",
22
+ "sha256": "cde8c293e6caba11c385cec78ac53d58bd4731f46b1912e811493aff08246a64"
23
+ },
24
+ {
25
+ "archive": "image-preparation-optimization/verifier-replay/result.json",
26
+ "sha256": "fa0cfcc9ce93605c24781705c5ad3060b4a4750836e86ebfb34693f576486431"
27
+ },
28
+ {
29
+ "archive": "gear-one-round-optimized/repeat-baseline-100/three-way-comparison.json",
30
+ "sha256": "5303f428331d32c920fdc8fc809f3a7957eccc749a643a99f72d9eb64feff5a0"
31
+ }
32
+ ],
33
+ "dataset_replay": {
34
+ "measured_at": "2026-10-08T15:35:35.503Z",
35
+ "model_calls": 0,
36
+ "note": "Sequential dataset-check replay, not end-to-end evaluation; bytes are logical reads, not physical disk I/O.",
37
+ "logical_byte_reduction": 0.9047557673677712,
38
+ "results": [
39
+ {
40
+ "mode": "optimized",
41
+ "tasks": 20,
42
+ "dataset_digest": "sha256:d66a830075362fc03124543c2f1ee4649e19b693a582d38feffc1a0a3f3ffd21",
43
+ "wall_ms": 31458.281092,
44
+ "collection_ms": 8200.212244000002,
45
+ "successful_dataset_reads": 93486,
46
+ "logical_dataset_bytes": 2786968032
47
+ },
48
+ {
49
+ "mode": "baseline",
50
+ "tasks": 20,
51
+ "dataset_digest": "sha256:d66a830075362fc03124543c2f1ee4649e19b693a582d38feffc1a0a3f3ffd21",
52
+ "wall_ms": 403823.85438100004,
53
+ "collection_ms": 389990.11956300004,
54
+ "successful_dataset_reads": 981204,
55
+ "logical_dataset_bytes": 29261278662
56
+ },
57
+ {
58
+ "mode": "optimized",
59
+ "tasks": 20,
60
+ "dataset_digest": "sha256:d66a830075362fc03124543c2f1ee4649e19b693a582d38feffc1a0a3f3ffd21",
61
+ "wall_ms": 48336.64004099998,
62
+ "collection_ms": 11848.485729999957,
63
+ "successful_dataset_reads": 93486,
64
+ "logical_dataset_bytes": 2786968032
65
+ }
66
+ ]
67
+ },
68
+ "runtime_setup": {
69
+ "tasks_per_batch": 20,
70
+ "concurrency": 16,
71
+ "order": [
72
+ "upload",
73
+ "shared",
74
+ "shared",
75
+ "upload"
76
+ ],
77
+ "successful_setups": 80,
78
+ "model_calls": 0,
79
+ "upload": {
80
+ "setup_seconds_per_task": 30.16,
81
+ "harness_upload_seconds_per_task": 18.31,
82
+ "controller_upload_seconds_per_task": 0.51,
83
+ "host_process_cpu_core_seconds_per_batch": 194.25,
84
+ "batch_wall_seconds": 111.76
85
+ },
86
+ "shared": {
87
+ "setup_seconds_per_task": 10.85,
88
+ "harness_upload_seconds_per_task": 0,
89
+ "controller_upload_seconds_per_task": 0,
90
+ "host_process_cpu_core_seconds_per_batch": 109.59,
91
+ "batch_wall_seconds": 40.84
92
+ },
93
+ "excluded_snapshot_seconds": [
94
+ 10.259019555,
95
+ 12.346748256
96
+ ]
97
+ },
98
+ "image_and_lifecycle": {
99
+ "scope": "Same frozen 20 tasks, C16, Luna subscription; harness prepared in advance. Baseline has warm dependency/build-layer caches; optimized full runs also reuse the prepared-image cache. Cold image preparation and harness warmup are measured separately. Whole-host and daemon resource counters include other host activity. Container and process totals can miss sub-second lifetimes.",
100
+ "baseline": {
101
+ "evalId": "eval_64cbf7280dfe4f598745928a5d2b5744",
102
+ "runtimeIds": [
103
+ "sha256:2658a4f4417eac3807a4d0c8d7fc1e5e901fd060f1ad363d7e478827eed1282b"
104
+ ],
105
+ "wallSeconds": 514.1380000114441,
106
+ "phaseMeans": {
107
+ "slot_seconds": 285.1684499979019,
108
+ "environment_setup_seconds": 67.6658903837204,
109
+ "agent_setup_seconds": 17.371835076808928,
110
+ "agent_execution_seconds": 106.45874143838883,
111
+ "verifier_seconds": 65.41652805805207,
112
+ "native_other_seconds": 25.621624088287355,
113
+ "after_native_seconds": 1.5526309370994569,
114
+ "after_publish_seconds": 1.0812000155448913,
115
+ "verifier_body_seconds": 15.2249,
116
+ "verifier_lifecycle_seconds": 50.19162805805206
117
+ },
118
+ "preparationMean": {
119
+ "candidate": 39.5421057337,
120
+ "verifier": 20.7157033891
121
+ },
122
+ "stops": {
123
+ "candidate": {
124
+ "count": 20,
125
+ "sum": 213.26049423217773,
126
+ "mean": 10.663024711608887,
127
+ "median": 10.501216650009155,
128
+ "max": 11.307181596755981
129
+ },
130
+ "simulator": {
131
+ "count": 20,
132
+ "sum": 38.22067189216614,
133
+ "mean": 1.9110335946083068,
134
+ "median": 1.8672200441360474,
135
+ "max": 4.260472536087036
136
+ },
137
+ "verifier": {
138
+ "count": 20,
139
+ "sum": 210.8357436656952,
140
+ "mean": 10.54178718328476,
141
+ "median": 10.36497938632965,
142
+ "max": 11.635977268218994
143
+ }
144
+ },
145
+ "valid": 20,
146
+ "passes": 2,
147
+ "dockerDaemonCpuSeconds": 1316.926889,
148
+ "diskWriteGiB": 19.91425323486328,
149
+ "agentAverage": 4.5173376614991865,
150
+ "modelAverage": 3.092310337033131,
151
+ "probeQuality": {
152
+ "unclosedPython": 0,
153
+ "unclosedHost": 0,
154
+ "missingPatches": [],
155
+ "containerCoverage": {
156
+ "dockerListFailures": 1,
157
+ "containerApiFailures": 0,
158
+ "supplementalSamples": 515,
159
+ "supplementedContainerSamples": 29,
160
+ "eventErrors": [],
161
+ "observerRestarts": []
162
+ }
163
+ }
164
+ },
165
+ "warm_first": {
166
+ "evalId": "eval_9592b7d83bd64d84a0ef7322ac32617f",
167
+ "runtimeIds": [
168
+ "sha256:072b2230200ed16e5e27966342725e101e46023cb23f093b2fafa3c8b48849d9"
169
+ ],
170
+ "wallSeconds": 399.9470000267029,
171
+ "phaseMeans": {
172
+ "slot_seconds": 207.14064998626708,
173
+ "environment_setup_seconds": 33.20775940418243,
174
+ "agent_setup_seconds": 17.37574373483658,
175
+ "agent_execution_seconds": 117.32188109159469,
176
+ "verifier_seconds": 22.65836421251297,
177
+ "native_other_seconds": 13.715027666091919,
178
+ "after_native_seconds": 1.7154239416122437,
179
+ "after_publish_seconds": 1.1464499354362487,
180
+ "verifier_body_seconds": 14.51355,
181
+ "verifier_lifecycle_seconds": 8.14481421251297
182
+ },
183
+ "preparationMean": {
184
+ "candidate": 3.6222376064999997,
185
+ "verifier": 1.4092942058
186
+ },
187
+ "stops": {
188
+ "candidate": {
189
+ "count": 20,
190
+ "sum": 5.032052278518677,
191
+ "mean": 0.25160261392593386,
192
+ "median": 0.21620488166809082,
193
+ "max": 0.6075403690338135
194
+ },
195
+ "simulator": {
196
+ "count": 20,
197
+ "sum": 29.80813455581665,
198
+ "mean": 1.4904067277908326,
199
+ "median": 1.4453762769699097,
200
+ "max": 2.123774766921997
201
+ },
202
+ "verifier": {
203
+ "count": 20,
204
+ "sum": 5.935137748718262,
205
+ "mean": 0.2967568874359131,
206
+ "median": 0.24156415462493896,
207
+ "max": 0.7315433025360107
208
+ }
209
+ },
210
+ "valid": 20,
211
+ "passes": 3,
212
+ "dockerDaemonCpuSeconds": 342.916441,
213
+ "diskWriteGiB": 4.655399322509766,
214
+ "agentAverage": 6.599403245108653,
215
+ "modelAverage": 4.016821683707523,
216
+ "probeQuality": {
217
+ "unclosedPython": 0,
218
+ "unclosedHost": 0,
219
+ "missingPatches": [],
220
+ "containerCoverage": {
221
+ "dockerListFailures": 0,
222
+ "containerApiFailures": 0,
223
+ "supplementalSamples": 401,
224
+ "supplementedContainerSamples": 0,
225
+ "eventErrors": [],
226
+ "observerRestarts": []
227
+ }
228
+ }
229
+ },
230
+ "warm_final": {
231
+ "evalId": "eval_23be5bcafce94109aae85d32c7094f88",
232
+ "runtimeIds": [
233
+ "sha256:e6ecc646f98c5906aa44d863779941f6bf82f236d2ebfa7bc399c34bd087df2b"
234
+ ],
235
+ "wallSeconds": 372.13700008392334,
236
+ "phaseMeans": {
237
+ "slot_seconds": 201.82434998750688,
238
+ "environment_setup_seconds": 29.518565595149994,
239
+ "agent_setup_seconds": 16.651894664764406,
240
+ "agent_execution_seconds": 120.01988308429718,
241
+ "verifier_seconds": 20.959102857112885,
242
+ "native_other_seconds": 12.259714829921723,
243
+ "after_native_seconds": 1.205488955974579,
244
+ "after_publish_seconds": 1.2097000002861023,
245
+ "verifier_body_seconds": 13.78495,
246
+ "verifier_lifecycle_seconds": 7.174152857112884
247
+ },
248
+ "preparationMean": {
249
+ "candidate": 3.1690642686,
250
+ "verifier": 1.23830467335
251
+ },
252
+ "stops": {
253
+ "candidate": {
254
+ "count": 20,
255
+ "sum": 4.894258499145508,
256
+ "mean": 0.2447129249572754,
257
+ "median": 0.22374379634857178,
258
+ "max": 0.6866343021392822
259
+ },
260
+ "simulator": {
261
+ "count": 20,
262
+ "sum": 27.246562242507935,
263
+ "mean": 1.3623281121253967,
264
+ "median": 1.336445689201355,
265
+ "max": 1.9595155715942383
266
+ },
267
+ "verifier": {
268
+ "count": 20,
269
+ "sum": 6.640327215194702,
270
+ "mean": 0.3320163607597351,
271
+ "median": 0.22688746452331543,
272
+ "max": 1.4987709522247314
273
+ }
274
+ },
275
+ "valid": 20,
276
+ "passes": 4,
277
+ "dockerDaemonCpuSeconds": 334.41200299999997,
278
+ "diskWriteGiB": 4.676868438720703,
279
+ "agentAverage": 7.2866287076979495,
280
+ "modelAverage": 4.82437277143521,
281
+ "probeQuality": {
282
+ "unclosedPython": 0,
283
+ "unclosedHost": 0,
284
+ "missingPatches": [],
285
+ "containerCoverage": {
286
+ "dockerListFailures": 0,
287
+ "containerApiFailures": 0,
288
+ "supplementalSamples": 373,
289
+ "supplementedContainerSamples": 0,
290
+ "eventErrors": [],
291
+ "observerRestarts": []
292
+ }
293
+ }
294
+ },
295
+ "preparation": {
296
+ "prepare-cold-c16": {
297
+ "label": "prepare-cold-c16",
298
+ "wallSeconds": 140.38053471798776,
299
+ "tasks": 20,
300
+ "roles": 40,
301
+ "imagePreparations": 60,
302
+ "cacheHits": 0,
303
+ "uniqueKeys": 60,
304
+ "hostCpuSeconds": 18.738639999999997,
305
+ "childCliCpuSeconds": 189.417582,
306
+ "roleMeans": {
307
+ "candidate": 62.5674219975539,
308
+ "verifier": 27.406673145008973
309
+ }
310
+ },
311
+ "prepare-warm-c16-a": {
312
+ "label": "prepare-warm-c16-a",
313
+ "wallSeconds": 17.670493709039874,
314
+ "tasks": 20,
315
+ "roles": 40,
316
+ "imagePreparations": 60,
317
+ "cacheHits": 60,
318
+ "uniqueKeys": 60,
319
+ "hostCpuSeconds": 16.190249,
320
+ "childCliCpuSeconds": 15.900727,
321
+ "roleMeans": {
322
+ "candidate": 7.530257558551966,
323
+ "verifier": 3.9297443004033994
324
+ }
325
+ },
326
+ "prepare-warm-c16-b": {
327
+ "label": "prepare-warm-c16-b",
328
+ "wallSeconds": 17.613185116962995,
329
+ "tasks": 20,
330
+ "roles": 40,
331
+ "imagePreparations": 60,
332
+ "cacheHits": 60,
333
+ "uniqueKeys": 60,
334
+ "hostCpuSeconds": 16.228609000000002,
335
+ "childCliCpuSeconds": 16.086499,
336
+ "roleMeans": {
337
+ "candidate": 7.4858669871580785,
338
+ "verifier": 4.021057845893665
339
+ }
340
+ }
341
+ }
342
+ },
343
+ "fixed_snapshot_verifier_replay": {
344
+ "tasks": 20,
345
+ "all_match": true,
346
+ "artifacts": [
347
+ "reward.json",
348
+ "assertions.json",
349
+ "process.json"
350
+ ]
351
+ },
352
+ "full_100_task_comparison": {
353
+ "method": "Three matched baseline evaluations, one logical trial per task. Binary pass is reward == total_score == 1. Invalid slots are never scored as zero.",
354
+ "observedFullRuns": {
355
+ "old": {
356
+ "tasks": 100,
357
+ "passes": 13,
358
+ "passRate": 0.13,
359
+ "meanProcessScore": 0.5384416037179195,
360
+ "invalid": 0
361
+ },
362
+ "new1": {
363
+ "tasks": 100,
364
+ "passes": 18,
365
+ "passRate": 0.18,
366
+ "meanProcessScore": 0.5258498004546767,
367
+ "invalid": 0
368
+ },
369
+ "new2": {
370
+ "tasks": 100,
371
+ "passes": 15,
372
+ "passRate": 0.15,
373
+ "meanProcessScore": 0.49785881969119955,
374
+ "invalid": 0
375
+ }
376
+ },
377
+ "firstPassNew2": {
378
+ "tasks": 99,
379
+ "passes": 15,
380
+ "passRate": 0.15151515151515152,
381
+ "meanProcessScore": 0.4942296879997687,
382
+ "invalid": 1
383
+ },
384
+ "limitations": [
385
+ "Only one old and two new model runs; repeat variation cannot prove absence of a version effect.",
386
+ "Old concurrency was 8; both new runs use 16. Source harness and task/verifier identities match, but old packaged runtime differs.",
387
+ "The configured model is the same; identity_resolved=false, so a precise provider model snapshot is not pinned.",
388
+ "Same-version variability includes model sampling and execution/service timing; it is not an estimate of pure sampling noise.",
389
+ "The primary common-valid cohort excludes infrastructure-invalid first-pass tasks and may have survivorship bias; repaired results are separately labeled.",
390
+ "Pairwise exact McNemar p-values are exploratory, assume independent task pairs, and are not equivalence tests or evidence of causal attribution."
391
+ ]
392
+ }
393
+ }
@@ -0,0 +1,178 @@
1
+ # Evaluation preparation measurements — 2026-10-09
2
+
3
+ Repeated local Harbor tasks spend substantial time preparing identical inputs.
4
+ The changes reduce dataset payload reads, share immutable runtime installations,
5
+ reuse prepared images, and shorten shutdown of Harbor's default keepalive.
6
+ They do not share mutable task state or change scoring formulas.
7
+
8
+ The [aggregate measurements](eval-preparation-2026-10-09.json) include exact
9
+ values, runtime identities, evaluation IDs, measurement limitations, and SHA-256
10
+ digests of the local source archives. Raw trajectories, task payloads, and
11
+ credentials are not included. These are measurements of the development
12
+ versions, before transplanting the changes onto `dev` and hardening cancellation
13
+ cleanup during PR review. They are not fresh performance certification of the
14
+ final PR runtime.
15
+
16
+ ## Environment and comparison boundaries
17
+
18
+ Measurements used a Linux x86_64 KVM host with 16 logical Intel Xeon Platinum
19
+ CPUs and approximately 61.4 GiB RAM, Node 22.22.1, Docker 29.1.3, and Harbor
20
+ 0.21.0. Live evaluations used the same frozen 20 AutomationBench Marketing tasks,
21
+ DSH harness, and GPT-6 Luna subscription configuration, with concurrency 16.
22
+ The precise provider model snapshot was unresolved. The implementation contains
23
+ no benchmark-specific rules; synthetic regressions cover independent layouts,
24
+ datasets, build contexts, and harness artifacts.
25
+
26
+ Each comparison isolates a different development stage. Their percentages must
27
+ not be added or multiplied into a claimed overall speedup. Model workload,
28
+ filesystem cache state, and other activity on the shared host can affect elapsed
29
+ times. Per-task phases overlap across tasks and cannot be summed into batch wall
30
+ time.
31
+
32
+ ## Dataset verification
33
+
34
+ A model-free replay brackets the original implementation with two optimized
35
+ runs. It exercises admission checks, native-descriptor lookup, score collection
36
+ checks, and the new final dataset sweep. All three runs have the same dataset
37
+ digest and descriptor results.
38
+
39
+ | Metric, 20 tasks | Original | Optimized, first | Optimized, second |
40
+ | --- | ---: | ---: | ---: |
41
+ | Logical dataset bytes read | 29,261,278,662 | 2,786,968,032 | 2,786,968,032 |
42
+ | Successful dataset file reads | 981,204 | 93,486 | 93,486 |
43
+ | Full verification replay, seconds | 403.82 | 31.46 | 48.34 |
44
+ | Collection portion, seconds | 389.99 | 8.20 | 11.85 |
45
+
46
+ Logical bytes decrease by **90.48%**. This is not a physical disk I/O counter or
47
+ an end-to-end evaluation speedup. Shared-host load affected timings; the stable
48
+ read counts are the stronger evidence. Payload reads grow linearly for this v1
49
+ collection path, while manifest parsing and task-set metadata checks still occur
50
+ per collection. There is no pathname/mtime cache. Resource v2 closure validation
51
+ and standalone full verification remain in place.
52
+
53
+ Replay the current implementation with any standardized v1 dataset and a built
54
+ pre-optimization checkout. After integrating #46, scoped verification uses
55
+ identity-bound execution and trial receipts. The current script counts task
56
+ content reads only; the historical measurements above also include root
57
+ manifest metadata reads and are retained unchanged.
58
+
59
+ ```sh
60
+ npm run build
61
+ node dist/scripts/benchmark-dataset-verification.js \
62
+ --dataset /absolute/v1-dataset \
63
+ --baseline /absolute/original-hitch \
64
+ --output /absolute/comparison.json
65
+ ```
66
+
67
+ ## Shared immutable runtime and dependencies
68
+
69
+ Four controlled batches ran `upload → shared → shared → upload`, each with 20
70
+ real bridge setups at concurrency 16. All 80 setups succeeded. Controller and
71
+ harness content identities and the base image were fixed. This experiment
72
+ contains no model, simulator, or verifier execution.
73
+
74
+ | Metric | Upload | Read-only snapshots |
75
+ | --- | ---: | ---: |
76
+ | Mean setup, seconds/task | 30.16 | 10.85 |
77
+ | Harness upload, seconds/task | 18.31 | 0 |
78
+ | Controller upload, seconds/task | 0.51 | 0 |
79
+ | Host worker/CLI CPU, core-seconds/batch | 194.25 | 109.59 |
80
+ | Batch wall time including create/cleanup, seconds | 111.76 | 40.84 |
81
+
82
+ Mean setup decreases by **64.0%** and measured host process CPU by **43.6%**.
83
+ The batch and per-task times exclude **10.26–12.35 seconds** to create and verify
84
+ the one-time snapshots. Host process CPU excludes dockerd/containerd. Existing
85
+ artifact validation and per-task Node extraction remain; they were approximately
86
+ unchanged. An earlier full live evaluation at this stage was slower overall
87
+ (755.01 versus 723.52 seconds) because other phases dominated. Sharing alone did
88
+ not establish an end-to-end gain.
89
+
90
+ ## Image preparation and verifier lifecycle
91
+
92
+ This baseline already includes dataset and shared-runtime optimizations. Both
93
+ sides have warm dependency and Docker build-layer caches; the optimized side
94
+ additionally reuses the new prepared-image cache and manages Harbor's default
95
+ keepalive. Harness preparation occurred in advance.
96
+
97
+ | Metric | Baseline | Optimized warm run 1 | Optimized warm run 2 |
98
+ | --- | ---: | ---: | ---: |
99
+ | Full evaluation wall time, seconds | 514.14 | 399.95 | 372.14 |
100
+ | Candidate + sidecar image preparation, seconds/task | 39.54 | 3.62 | 3.17 |
101
+ | Environment setup including readiness, seconds/task | 67.67 | 33.21 | 29.52 |
102
+ | Verifier image preparation, seconds/task | 20.72 | 1.41 | 1.24 |
103
+ | Complete verifier phase, seconds/task | 65.42 | 22.66 | 20.96 |
104
+ | Verifier lifecycle excluding scoring body, seconds/task | 50.19 | 8.14 | 7.17 |
105
+ | Scoring body, seconds/task | 15.22 | 14.51 | 13.78 |
106
+ | Candidate stop signal to exit, seconds/container | 10.66 | 0.25 | 0.24 |
107
+ | Verifier stop signal to exit, seconds/container | 10.54 | 0.30 | 0.33 |
108
+ | Dockerd + containerd CPU, core-seconds | 1,316.93 | 342.92 | 334.41 |
109
+ | Whole-host disk writes, GiB | 19.91 | 4.66 | 4.68 |
110
+
111
+ Both optimized runs produced 20/20 valid executions. Wall time decreased by
112
+ **22.2–27.6%** in these runs; the final run's candidate and verifier image
113
+ preparation decreased by **92.0%** and **94.0%**. Scoring execution remains in a
114
+ separate verifier container. Whole-host writes and daemon CPU include unrelated
115
+ activity and cannot be attributed exclusively to this evaluation. Process and
116
+ container sampling can miss very short lifetimes.
117
+
118
+ The cold preparation-only run took **140.38 seconds** for 60 image preparations.
119
+ Two warm repeats took **17.67** and **17.61 seconds**, with 60/60 hits. There were
120
+ **60 distinct complete build contexts**: observed gains here are primarily reuse
121
+ across rounds. This implementation does not deduplicate shared subsets of
122
+ different contexts. Full-context hashing intentionally invalidates on changes to
123
+ unused or ignored files as well.
124
+
125
+ The final live run's 60 executed image IDs matched their preparation receipts.
126
+ Candidate and verifier mounts were checked. Average active agents increased
127
+ from 4.52 to 7.29, and average simultaneous model requests from 3.09 to 4.82;
128
+ these averages do not guarantee throughput at higher configured concurrency.
129
+
130
+ ## Correctness evidence and limits
131
+
132
+ Regrading the same 20 saved pre-optimization snapshots produced identical
133
+ `reward.json`, `assertions.json`, and `process.json` outputs for all 20 tasks.
134
+ This isolates verifier behavior from new model trajectories. Unit and real Docker
135
+ fixtures additionally cover immutable input identities, cross-process build
136
+ deduplication, invalidation, eviction, failures, cancellation, isolated writable
137
+ state, role separation, prebuilt-image precedence, and preserved custom commands.
138
+
139
+ A complete Gear round also finished with 140/140 valid executions: 100 baseline,
140
+ 12 local, and 28 physical bridge trials. The candidate was rejected by the bridge
141
+ objective; successful execution does not imply promotion or task success.
142
+
143
+ The old 100-task baseline scored 13/100; two optimized baselines scored 18/100 and
144
+ 15/100. The second optimized baseline initially had one model transport failure;
145
+ that invalid slot was repaired, retaining the other 99 trials. The old run used
146
+ concurrency 8 and the optimized runs used 16. Seven tasks passed only in the old
147
+ run and failed in both optimized runs. These limited, differently concurrent
148
+ live samples do **not** establish score equivalence or prove that every
149
+ difference is model randomness. Matched-concurrency repeated comparisons remain
150
+ necessary for that conclusion.
151
+
152
+ ## Opt-in behavior and tradeoffs
153
+
154
+ See [the storage and preparation guide](../resource-storage.zh-CN.md) for current
155
+ configuration. Dataset verification changes apply to the admitted v1 evaluation
156
+ path; runtime sharing, image caching, and managed keepalive are opt-in. Upload
157
+ remains the default runtime transport. Read-only runtime sharing requires local
158
+ Linux Docker and harnesses that do not modify their installation directory.
159
+
160
+ Image caching uses private host-local state and conservative supported inputs.
161
+ Unsupported Compose/Dockerfile features and explicit force builds retain the
162
+ original build path. Prepared images and evaluation snapshots are retained;
163
+ there is no automatic cache garbage collector. Mutable workspaces, credentials,
164
+ Node extraction, and verifier instances remain private. Repeated cancellation
165
+ must finish Docker process-group cleanup before releasing build locks.
166
+
167
+ Review found and fixed a case where the Docker CLI had exited but a descendant
168
+ still held its pipes: cancellation previously skipped cleanup when the leader
169
+ already had a return code. The new real-process regression waits for leader exit,
170
+ cancels a stubborn descendant, and verifies pipe closure before returning.
171
+ Output draining stays active during cleanup to avoid pipe backpressure deadlocks.
172
+
173
+ Review also replaced role-marker/suffix matching with the exact candidate session
174
+ derived from `TrialPaths`. A truncated verifier session can lose its role marker,
175
+ and a verifier step named `env` can resemble a candidate suffix. Regression tests
176
+ cover both cases, long trial names, and legitimate candidate names containing
177
+ `__verifier__`; real Docker checks confirm that verifier image contents and
178
+ mounts stay independent.