@jinn-network/client 0.1.6 → 0.1.7-canary.205587f0

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 (291) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/deployments/deployment-jinn-mvi-l1-sepolia-fast.json +23 -4
  3. package/deployments/deployment-jinn-mvi-l1-sepolia.json +23 -4
  4. package/deployments/deployment-jinn-mvi-l2-baseSepolia.json +5 -4
  5. package/dist/adapters/mech/adapter.d.ts +38 -1
  6. package/dist/adapters/mech/adapter.js +241 -54
  7. package/dist/adapters/mech/adapter.js.map +1 -1
  8. package/dist/adapters/mech/contracts.d.ts +17 -4
  9. package/dist/adapters/mech/contracts.js +8 -2
  10. package/dist/adapters/mech/contracts.js.map +1 -1
  11. package/dist/adapters/mech/safe-revert.d.ts +20 -0
  12. package/dist/adapters/mech/safe-revert.js +12 -4
  13. package/dist/adapters/mech/safe-revert.js.map +1 -1
  14. package/dist/adapters/mech/safe.d.ts +5 -1
  15. package/dist/adapters/mech/safe.js +27 -8
  16. package/dist/adapters/mech/safe.js.map +1 -1
  17. package/dist/adapters/mech/verdict-code.d.ts +1 -0
  18. package/dist/adapters/mech/verdict-code.js +18 -0
  19. package/dist/adapters/mech/verdict-code.js.map +1 -1
  20. package/dist/api/admin-endpoint.d.ts +15 -3
  21. package/dist/api/admin-endpoint.js +24 -2
  22. package/dist/api/admin-endpoint.js.map +1 -1
  23. package/dist/api/bootstrap-endpoint.js +49 -0
  24. package/dist/api/bootstrap-endpoint.js.map +1 -1
  25. package/dist/api/codex-doctor-endpoint.d.ts +73 -0
  26. package/dist/api/codex-doctor-endpoint.js +177 -0
  27. package/dist/api/codex-doctor-endpoint.js.map +1 -0
  28. package/dist/api/discovery-endpoint.d.ts +1 -0
  29. package/dist/api/discovery-endpoint.js +26 -0
  30. package/dist/api/discovery-endpoint.js.map +1 -1
  31. package/dist/api/fleet-build.d.ts +1 -0
  32. package/dist/api/fleet-build.js +2 -1
  33. package/dist/api/fleet-build.js.map +1 -1
  34. package/dist/api/gather-status.d.ts +11 -0
  35. package/dist/api/gather-status.js +467 -4
  36. package/dist/api/gather-status.js.map +1 -1
  37. package/dist/api/hermes-doctor-endpoint.d.ts +117 -0
  38. package/dist/api/hermes-doctor-endpoint.js +229 -23
  39. package/dist/api/hermes-doctor-endpoint.js.map +1 -1
  40. package/dist/api/launcher-status.d.ts +21 -16
  41. package/dist/api/launcher-status.js +2 -1
  42. package/dist/api/launcher-status.js.map +1 -1
  43. package/dist/api/portfolio-v0-build.d.ts +10 -0
  44. package/dist/api/portfolio-v0-build.js +24 -5
  45. package/dist/api/portfolio-v0-build.js.map +1 -1
  46. package/dist/api/prediction-v1-build.d.ts +10 -0
  47. package/dist/api/prediction-v1-build.js +7 -1
  48. package/dist/api/prediction-v1-build.js.map +1 -1
  49. package/dist/api/server.d.ts +31 -1
  50. package/dist/api/server.js +68 -1
  51. package/dist/api/server.js.map +1 -1
  52. package/dist/api/setup-endpoints.d.ts +16 -0
  53. package/dist/api/setup-endpoints.js +78 -4
  54. package/dist/api/setup-endpoints.js.map +1 -1
  55. package/dist/api/setup-retry-endpoint.d.ts +19 -0
  56. package/dist/api/setup-retry-endpoint.js +32 -0
  57. package/dist/api/setup-retry-endpoint.js.map +1 -0
  58. package/dist/api/solvernets-endpoints.d.ts +8 -0
  59. package/dist/api/solvernets-endpoints.js +71 -43
  60. package/dist/api/solvernets-endpoints.js.map +1 -1
  61. package/dist/api/status-build.d.ts +78 -0
  62. package/dist/api/status-build.js +74 -18
  63. package/dist/api/status-build.js.map +1 -1
  64. package/dist/api/task-run-routing.d.ts +7 -0
  65. package/dist/api/task-run-routing.js +12 -0
  66. package/dist/api/task-run-routing.js.map +1 -0
  67. package/dist/api/task-runs-build.d.ts +21 -0
  68. package/dist/api/task-runs-build.js +14 -1
  69. package/dist/api/task-runs-build.js.map +1 -1
  70. package/dist/build-info.json +4 -4
  71. package/dist/build-meta.json +1 -1
  72. package/dist/chain-read-errors.d.ts +10 -0
  73. package/dist/chain-read-errors.js +15 -0
  74. package/dist/chain-read-errors.js.map +1 -1
  75. package/dist/cli/commands/auth.js +1 -1
  76. package/dist/cli/commands/auth.js.map +1 -1
  77. package/dist/cli/commands/create.js +3 -2
  78. package/dist/cli/commands/create.js.map +1 -1
  79. package/dist/cli/commands/doctor.d.ts +2 -0
  80. package/dist/cli/commands/doctor.js +2 -0
  81. package/dist/cli/commands/doctor.js.map +1 -1
  82. package/dist/cli/commands/rewards.js +11 -7
  83. package/dist/cli/commands/rewards.js.map +1 -1
  84. package/dist/cli/commands/solver-nets.js +24 -9
  85. package/dist/cli/commands/solver-nets.js.map +1 -1
  86. package/dist/cli/commands/status.js +1 -1
  87. package/dist/cli/commands/status.js.map +1 -1
  88. package/dist/cli/commands/tasks.js +86 -9
  89. package/dist/cli/commands/tasks.js.map +1 -1
  90. package/dist/cli/commands/update.d.ts +10 -0
  91. package/dist/cli/commands/update.js +36 -0
  92. package/dist/cli/commands/update.js.map +1 -1
  93. package/dist/cli/introspection-context.js +5 -0
  94. package/dist/cli/introspection-context.js.map +1 -1
  95. package/dist/cli/task-native-readiness.d.ts +3 -1
  96. package/dist/cli/task-native-readiness.js +28 -6
  97. package/dist/cli/task-native-readiness.js.map +1 -1
  98. package/dist/config.d.ts +118 -5
  99. package/dist/config.js +132 -18
  100. package/dist/config.js.map +1 -1
  101. package/dist/daemon/checkpoint-loop.d.ts +48 -0
  102. package/dist/daemon/checkpoint-loop.js +76 -0
  103. package/dist/daemon/checkpoint-loop.js.map +1 -0
  104. package/dist/daemon/creator.d.ts +1 -1
  105. package/dist/daemon/creator.js +7 -3
  106. package/dist/daemon/creator.js.map +1 -1
  107. package/dist/daemon/daemon.d.ts +19 -0
  108. package/dist/daemon/daemon.js +68 -1
  109. package/dist/daemon/daemon.js.map +1 -1
  110. package/dist/daemon/eviction-loop.d.ts +40 -0
  111. package/dist/daemon/eviction-loop.js +67 -0
  112. package/dist/daemon/eviction-loop.js.map +1 -0
  113. package/dist/daemon/jinn-claim-loop-wiring.d.ts +33 -0
  114. package/dist/daemon/jinn-claim-loop-wiring.js +40 -0
  115. package/dist/daemon/jinn-claim-loop-wiring.js.map +1 -0
  116. package/dist/daemon/jinn-claim-loop.d.ts +24 -17
  117. package/dist/daemon/jinn-claim-loop.js +77 -23
  118. package/dist/daemon/jinn-claim-loop.js.map +1 -1
  119. package/dist/daemon/skip-log-dedup.d.ts +69 -0
  120. package/dist/daemon/skip-log-dedup.js +106 -0
  121. package/dist/daemon/skip-log-dedup.js.map +1 -0
  122. package/dist/dashboard/assets/index-DMm7Y4f7.css +32 -0
  123. package/dist/dashboard/assets/index-Dt1RV0Ee.js +330 -0
  124. package/dist/dashboard/index.html +2 -2
  125. package/dist/discovery/factory.d.ts +17 -5
  126. package/dist/discovery/factory.js +46 -18
  127. package/dist/discovery/factory.js.map +1 -1
  128. package/dist/discovery/http.js +142 -3
  129. package/dist/discovery/http.js.map +1 -1
  130. package/dist/discovery/onchain.d.ts +5 -0
  131. package/dist/discovery/onchain.js +407 -15
  132. package/dist/discovery/onchain.js.map +1 -1
  133. package/dist/discovery/types.d.ts +45 -1
  134. package/dist/discovery/types.js +8 -10
  135. package/dist/discovery/types.js.map +1 -1
  136. package/dist/discovery/with-fallback.d.ts +7 -0
  137. package/dist/discovery/with-fallback.js +10 -0
  138. package/dist/discovery/with-fallback.js.map +1 -1
  139. package/dist/earning/bootstrap.d.ts +92 -1
  140. package/dist/earning/bootstrap.js +203 -63
  141. package/dist/earning/bootstrap.js.map +1 -1
  142. package/dist/earning/contracts.d.ts +14 -0
  143. package/dist/earning/contracts.js +17 -5
  144. package/dist/earning/contracts.js.map +1 -1
  145. package/dist/earning/funding-plan.js +27 -18
  146. package/dist/earning/funding-plan.js.map +1 -1
  147. package/dist/earning/jinn-rewards.d.ts +46 -0
  148. package/dist/earning/jinn-rewards.js +32 -0
  149. package/dist/earning/jinn-rewards.js.map +1 -1
  150. package/dist/earning/safe-adapter.d.ts +2 -0
  151. package/dist/earning/safe-adapter.js +26 -12
  152. package/dist/earning/safe-adapter.js.map +1 -1
  153. package/dist/earning/store.d.ts +8 -0
  154. package/dist/earning/store.js.map +1 -1
  155. package/dist/earning/testnet-setup-migration.d.ts +12 -0
  156. package/dist/earning/testnet-setup-migration.js +27 -1
  157. package/dist/earning/testnet-setup-migration.js.map +1 -1
  158. package/dist/earning/types.d.ts +15 -0
  159. package/dist/erc8004/reputation.d.ts +8 -0
  160. package/dist/erc8004/reputation.js +22 -3
  161. package/dist/erc8004/reputation.js.map +1 -1
  162. package/dist/harnesses/cost-estimates.d.ts +145 -0
  163. package/dist/harnesses/cost-estimates.js +297 -0
  164. package/dist/harnesses/cost-estimates.js.map +1 -0
  165. package/dist/harnesses/engine/engine.d.ts +72 -0
  166. package/dist/harnesses/engine/engine.js +105 -8
  167. package/dist/harnesses/engine/engine.js.map +1 -1
  168. package/dist/harnesses/engine/persistence.d.ts +51 -1
  169. package/dist/harnesses/engine/persistence.js +118 -5
  170. package/dist/harnesses/engine/persistence.js.map +1 -1
  171. package/dist/harnesses/engine/work-dir-reaper.d.ts +65 -0
  172. package/dist/harnesses/engine/work-dir-reaper.js +100 -0
  173. package/dist/harnesses/engine/work-dir-reaper.js.map +1 -0
  174. package/dist/harnesses/impls/hermes-agent/adapter.js +40 -0
  175. package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -1
  176. package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +20 -0
  177. package/dist/harnesses/impls/hermes-agent/bootstrap.js +40 -6
  178. package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
  179. package/dist/harnesses/impls/hermes-agent/harness.d.ts +59 -1
  180. package/dist/harnesses/impls/hermes-agent/harness.js +104 -0
  181. package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -1
  182. package/dist/harnesses/impls/index.d.ts +9 -0
  183. package/dist/harnesses/impls/index.js +19 -1
  184. package/dist/harnesses/impls/index.js.map +1 -1
  185. package/dist/harnesses/impls/learner/adapters/codex-code.d.ts +3 -0
  186. package/dist/harnesses/impls/learner/adapters/codex-code.js +49 -0
  187. package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -1
  188. package/dist/harnesses/impls/learner/harness.d.ts +41 -4
  189. package/dist/harnesses/impls/learner/harness.js +114 -2
  190. package/dist/harnesses/impls/learner/harness.js.map +1 -1
  191. package/dist/harnesses/impls/learner/plugin-path.d.ts +0 -13
  192. package/dist/harnesses/impls/learner/plugin-path.js +35 -15
  193. package/dist/harnesses/impls/learner/plugin-path.js.map +1 -1
  194. package/dist/harnesses/impls/learner/types.d.ts +15 -0
  195. package/dist/harnesses/impls/stub.d.ts +58 -0
  196. package/dist/harnesses/impls/stub.js +89 -0
  197. package/dist/harnesses/impls/stub.js.map +1 -0
  198. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.d.ts +69 -50
  199. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +178 -93
  200. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
  201. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.d.ts +12 -1
  202. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +121 -7
  203. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js.map +1 -1
  204. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.d.ts +15 -0
  205. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js +54 -4
  206. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js.map +1 -1
  207. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.d.ts +6 -0
  208. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js +1 -1
  209. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js.map +1 -1
  210. package/dist/harnesses/readiness-registry.js +9 -1
  211. package/dist/harnesses/readiness-registry.js.map +1 -1
  212. package/dist/main.js +373 -82
  213. package/dist/main.js.map +1 -1
  214. package/dist/observability/emit-event.d.ts +1 -1
  215. package/dist/observability/emit-event.js.map +1 -1
  216. package/dist/operator-errors.d.ts +7 -0
  217. package/dist/operator-errors.js +13 -1
  218. package/dist/operator-errors.js.map +1 -1
  219. package/dist/plugins/learner/.claude-plugin/plugin.json +9 -0
  220. package/dist/plugins/learner/.codex-plugin/plugin.json +39 -0
  221. package/dist/plugins/learner/AGENTS.md +40 -0
  222. package/dist/plugins/learner/CLAUDE.md +33 -0
  223. package/dist/plugins/learner/README.md +59 -0
  224. package/dist/plugins/learner/hooks/hooks.json +16 -0
  225. package/dist/plugins/learner/hooks/session-start +38 -0
  226. package/dist/plugins/learner/skills/learn/SKILL.md +412 -0
  227. package/dist/plugins/learner/skills/learn/analyst-prompt.md +68 -0
  228. package/dist/plugins/learner/skills/learn/consolidator-prompt.md +94 -0
  229. package/dist/plugins/learner/skills/learn/explorer-prompt.md +53 -0
  230. package/dist/plugins/learner/skills/learn/planner-prompt.md +87 -0
  231. package/dist/plugins/learner/skills/learn/promoter-prompt.md +113 -0
  232. package/dist/plugins/learner/skills/learn/step-worker-prompt.md +47 -0
  233. package/dist/plugins/learner/skills/learn/strategist-prompt.md +85 -0
  234. package/dist/restart-daemon.d.ts +90 -0
  235. package/dist/restart-daemon.js +95 -0
  236. package/dist/restart-daemon.js.map +1 -0
  237. package/dist/setup/halt-mode.d.ts +14 -0
  238. package/dist/setup/halt-mode.js +17 -0
  239. package/dist/setup/halt-mode.js.map +1 -0
  240. package/dist/solver-nets/prediction-operator-ux.js +43 -3
  241. package/dist/solver-nets/prediction-operator-ux.js.map +1 -1
  242. package/dist/solver-nets/registry.d.ts +1 -0
  243. package/dist/solver-nets/registry.js +1 -1
  244. package/dist/solver-nets/registry.js.map +1 -1
  245. package/dist/solver-types/_swe-rebench-v2-pool-cache.d.ts +58 -0
  246. package/dist/solver-types/_swe-rebench-v2-pool-cache.js +87 -0
  247. package/dist/solver-types/_swe-rebench-v2-pool-cache.js.map +1 -0
  248. package/dist/solver-types/_swe-rebench-v2-substrate.d.ts +1 -0
  249. package/dist/solver-types/_swe-rebench-v2-substrate.js +10 -0
  250. package/dist/solver-types/_swe-rebench-v2-substrate.js.map +1 -1
  251. package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +65 -0
  252. package/dist/solver-types/_swe-rebench-v2-validated-pool.js +243 -26
  253. package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
  254. package/dist/solver-types/swe-rebench-v2-auto.d.ts +22 -7
  255. package/dist/solver-types/swe-rebench-v2-auto.js +45 -20
  256. package/dist/solver-types/swe-rebench-v2-auto.js.map +1 -1
  257. package/dist/solver-types/swe-rebench-v2.d.ts +13 -2
  258. package/dist/solver-types/swe-rebench-v2.js +233 -94
  259. package/dist/solver-types/swe-rebench-v2.js.map +1 -1
  260. package/dist/solvernets/daemon-init.d.ts +10 -2
  261. package/dist/solvernets/daemon-init.js +22 -2
  262. package/dist/solvernets/daemon-init.js.map +1 -1
  263. package/dist/solvernets/launched-record-dispatcher.js +35 -7
  264. package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
  265. package/dist/solvernets/store.d.ts +5 -0
  266. package/dist/solvernets/store.js +1 -0
  267. package/dist/solvernets/store.js.map +1 -1
  268. package/dist/store/store.d.ts +15 -0
  269. package/dist/store/store.js +118 -3
  270. package/dist/store/store.js.map +1 -1
  271. package/dist/tasks/sources.d.ts +18 -1
  272. package/dist/tasks/sources.js +33 -5
  273. package/dist/tasks/sources.js.map +1 -1
  274. package/dist/tx-retry.d.ts +151 -19
  275. package/dist/tx-retry.js +286 -32
  276. package/dist/tx-retry.js.map +1 -1
  277. package/dist/types/payloads/prediction-apy-v0.d.ts +5 -5
  278. package/dist/types/payloads/prediction-v0.d.ts +5 -5
  279. package/dist/types/task-document.d.ts +392 -0
  280. package/dist/types/task-document.js +10 -0
  281. package/dist/types/task-document.js.map +1 -1
  282. package/dist/types/task.d.ts +28 -0
  283. package/dist/util/extract-tx-hash.d.ts +14 -0
  284. package/dist/util/extract-tx-hash.js +19 -0
  285. package/dist/util/extract-tx-hash.js.map +1 -0
  286. package/dist/vendor/@jinn-network/sdk/dist/contracts.js +1 -1
  287. package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.d.ts +3 -0
  288. package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.js +1 -0
  289. package/package.json +29 -12
  290. package/dist/dashboard/assets/index-DOlzFN8a.css +0 -32
  291. package/dist/dashboard/assets/index-NkZ7CTAT.js +0 -140
@@ -26,9 +26,10 @@
26
26
  * re-raises as `SkippableError` (no signed verdict).
27
27
  */
28
28
  import { spawn } from 'node:child_process';
29
- import { mkdtemp, writeFile, readFile, rm } from 'node:fs/promises';
29
+ import { mkdtemp, writeFile, readFile, rm, statfs } from 'node:fs/promises';
30
30
  import { tmpdir } from 'node:os';
31
31
  import { isAbsolute, join } from 'node:path';
32
+ import { defaultCommandRunner, resolveImageDigest as resolveSubstrateImageDigest, } from '../../../solver-types/_swe-rebench-v2-substrate.js';
32
33
  /**
33
34
  * Thrown when the eval could not actually grade the solution. There is no
34
35
  * signal about the solver here, only about the operator's environment — the
@@ -46,62 +47,102 @@ export class EvalCouldNotGradeError extends Error {
46
47
  }
47
48
  }
48
49
  /**
49
- * Default cap on the per-instance Docker image cache when no explicit
50
- * `imageCacheMax` and no `JINN_EVAL_IMAGE_CACHE_MAX` env var are configured.
51
- *
52
- * 20 images × ~3 GB/image 60 GB working set — small enough that even a
53
- * 256 GB disk has headroom, large enough that the steady-state loop on a
54
- * frequently-repeating subset of the pool rarely re-pulls.
50
+ * Thrown by `runEval` when the disk cannot be brought above the eval
51
+ * disk-floor even after a broad prune. A clean abort — the caller stops
52
+ * gracefully; no instance is graded, nothing is marked. Distinct from
53
+ * `EvalCouldNotGradeError`: this is operator-environment, retryable, and must
54
+ * never be turned into a `scorable: false` admission (#476).
55
+ */
56
+ export class InsufficientDiskError extends Error {
57
+ freeBytes;
58
+ floorBytes;
59
+ constructor(freeBytes, floorBytes) {
60
+ const gb = (n) => (n / 1_000_000_000).toFixed(1);
61
+ super(`insufficient disk for swe-rebench eval: ${gb(freeBytes)} GB free, ` +
62
+ `need ≥ ${gb(floorBytes)} GB`);
63
+ this.name = 'InsufficientDiskError';
64
+ this.freeBytes = freeBytes;
65
+ this.floorBytes = floorBytes;
66
+ }
67
+ }
68
+ /**
69
+ * Default free-disk floor required before an eval round: 20 GB. A single
70
+ * SWE-rebench eval image was observed to peak transiently at ~12.6 GB, so the
71
+ * floor clears the worst observed instance with real margin. Override with
72
+ * `JINN_EVAL_DISK_FLOOR_GB` on constrained hosts.
55
73
  */
56
- export const DEFAULT_EVAL_IMAGE_CACHE_MAX = 20;
57
- export function resolveImageCacheMax(opt) {
74
+ export const DEFAULT_EVAL_DISK_FLOOR_BYTES = 20_000_000_000;
75
+ /** Resolve the disk floor: explicit option > `JINN_EVAL_DISK_FLOOR_GB` env > default. */
76
+ export function resolveDiskFloorBytes(opt) {
58
77
  if (typeof opt === 'number' && Number.isFinite(opt) && opt > 0)
59
78
  return Math.floor(opt);
60
- const envRaw = process.env['JINN_EVAL_IMAGE_CACHE_MAX'];
79
+ const envRaw = process.env['JINN_EVAL_DISK_FLOOR_GB'];
61
80
  if (envRaw !== undefined) {
62
- // `Number()` returns 0 for `""` / whitespace and NaN for strings with
63
- // non-numeric content (e.g. `"garbage"`, `"1e3oops"`) — unlike `parseInt`,
64
- // which would silently accept `parseInt("1e3oops") === 1`. Either way we
65
- // reject anything that isn't a positive integer.
66
81
  const parsed = Number(envRaw);
67
- if (Number.isFinite(parsed) && Number.isInteger(parsed) && parsed > 0)
68
- return parsed;
69
- // Surface the typo so operators discover it before the disk fills,
70
- // rather than silently running on the default.
71
- console.warn(`[swe-rebench-v2] JINN_EVAL_IMAGE_CACHE_MAX=${JSON.stringify(envRaw)} is not a positive integer — using default ${DEFAULT_EVAL_IMAGE_CACHE_MAX}`);
82
+ if (Number.isFinite(parsed) && parsed > 0)
83
+ return Math.floor(parsed * 1_000_000_000);
84
+ console.warn(`[swe-rebench-v2] JINN_EVAL_DISK_FLOOR_GB=${JSON.stringify(envRaw)} is not a positive ` +
85
+ `number using default ${DEFAULT_EVAL_DISK_FLOOR_BYTES / 1_000_000_000} GB`);
72
86
  }
73
- return DEFAULT_EVAL_IMAGE_CACHE_MAX;
87
+ return DEFAULT_EVAL_DISK_FLOOR_BYTES;
74
88
  }
75
89
  /**
76
- * Production `cleanupImage`: spawn `docker rmi <image>`. Errors are tolerated
77
- * a missing/failed `docker rmi` is operationally survivable (the image
78
- * stays on disk; cache stays bloated for a while; not a correctness failure)
79
- * but we warn on non-zero exit and on failed-to-spawn so a persistently-flaky
80
- * daemon (or a permission slip) becomes visible before disks fill. Silent
81
- * leaks were the original failure mode `jinn-mono-uy6v.11` exists to fix.
82
- *
83
- * We listen on `'exit'` rather than `'close'` and route stdio to `'ignore'`
84
- * so the resolve path doesn't depend on parent-side stream draining (which
85
- * can fail to fire `'close'` cleanly when piped without backpressure on the
86
- * right tick). The image tag + exit code is sufficient signal; operators can
87
- * grep the docker daemon log for the underlying reason.
90
+ * Default wall-clock limit for one upstream eval.py invocation: 2 hours. Some
91
+ * linux/amd64 SWE-rebench images can wedge indefinitely under Apple Silicon
92
+ * emulation after a native crash, so the subprocess gets a hard guardrail.
93
+ * Override with `JINN_SWE_REBENCH_EVAL_TIMEOUT_MS`; set `0` to disable.
88
94
  */
89
- function defaultCleanupImage(image) {
90
- return new Promise((resolve) => {
91
- const child = spawn('docker', ['rmi', image], { stdio: ['ignore', 'ignore', 'ignore'] });
92
- child.on('exit', (code, signal) => {
93
- if (code !== 0) {
94
- const status = code !== null ? `exited ${code}` : `terminated by signal ${signal ?? 'unknown'}`;
95
- console.warn(`[swe-rebench-v2] docker rmi ${image} ${status}`);
96
- }
97
- resolve();
98
- });
99
- child.on('error', (err) => {
100
- console.warn(`[swe-rebench-v2] docker rmi ${image} failed to spawn: ${err.message}`);
101
- resolve();
102
- });
95
+ export const DEFAULT_EVAL_TIMEOUT_MS = 2 * 60 * 60 * 1000;
96
+ /** Resolve the eval timeout: explicit option > env > default. */
97
+ export function resolveEvalTimeoutMs(opt) {
98
+ if (typeof opt === 'number' && Number.isFinite(opt) && opt >= 0)
99
+ return Math.floor(opt);
100
+ const envRaw = process.env['JINN_SWE_REBENCH_EVAL_TIMEOUT_MS'];
101
+ if (envRaw !== undefined) {
102
+ const parsed = Number(envRaw);
103
+ if (Number.isFinite(parsed) && parsed >= 0)
104
+ return Math.floor(parsed);
105
+ console.warn(`[swe-rebench-v2] JINN_SWE_REBENCH_EVAL_TIMEOUT_MS=${JSON.stringify(envRaw)} is not a ` +
106
+ `non-negative number using default ${DEFAULT_EVAL_TIMEOUT_MS} ms`);
107
+ }
108
+ return DEFAULT_EVAL_TIMEOUT_MS;
109
+ }
110
+ /** Production disk probe: free bytes on the filesystem backing the temp dir. */
111
+ async function defaultFreeDiskBytes() {
112
+ const s = await statfs(tmpdir());
113
+ return s.bavail * s.bsize;
114
+ }
115
+ /**
116
+ * Spawn `docker <args>`, resolving regardless of outcome — a failed cleanup
117
+ * command is logged, never thrown (#476: cleanup must not break the eval loop).
118
+ */
119
+ function runDocker(args) {
120
+ return defaultCommandRunner('docker', args)
121
+ .then((res) => {
122
+ if (res.exitCode !== 0) {
123
+ const detail = (res.stderr || res.stdout).trim();
124
+ console.warn(`[swe-rebench-v2] docker ${args.join(' ')} exited ${res.exitCode}` +
125
+ `${detail ? `: ${detail.slice(-500)}` : ''}`);
126
+ }
127
+ })
128
+ .catch((err) => {
129
+ const reason = err instanceof Error ? err.message : String(err);
130
+ console.warn(`[swe-rebench-v2] docker ${args.join(' ')} failed to spawn: ${reason}`);
103
131
  });
104
132
  }
133
+ /**
134
+ * Production `pruneRound`: remove the round's image, then prune stopped
135
+ * containers and build cache. Each step is best-effort.
136
+ */
137
+ async function defaultPruneRound(image) {
138
+ if (image)
139
+ await runDocker(['rmi', '-f', image]);
140
+ await runDocker(['container', 'prune', '-f']);
141
+ await runDocker(['builder', 'prune', '-f']);
142
+ }
143
+ async function defaultResolveImageDigest(imageName) {
144
+ return resolveSubstrateImageDigest(imageName, defaultCommandRunner);
145
+ }
105
146
  /**
106
147
  * Container-output signatures that mean the eval aborted before producing a
107
148
  * usable result — i.e. the operator's environment is the problem, not the
@@ -120,6 +161,7 @@ const INFRA_SIGNATURES = [
120
161
  { rx: /Failed building editable|Failed to build installable wheels/i, reason: 'install_build_failed' },
121
162
  { rx: /No virtual environment found/i, reason: 'venv_missing' },
122
163
  { rx: /exec format error|the requested image's platform .* does not match/i, reason: 'image_arch_mismatch' },
164
+ { rx: /Fatal Python error:\s*Illegal instruction|Illegal instruction(?:\s+\(core dumped\))?/i, reason: 'image_arch_mismatch' },
123
165
  // 2026-05-14 triage (jinn-mono-fufn) — failure fingerprints from real verdicts:
124
166
  { rx: /A virtual environment already exists at \S+\.venv\b/i, reason: 'venv_collision' },
125
167
  { rx: /No module named pytest\b/i, reason: 'pytest_missing' },
@@ -178,64 +220,62 @@ function buildTestCommands(args) {
178
220
  }
179
221
  export class PythonEvalRunner {
180
222
  opts;
181
- /**
182
- * LRU of image tags whose Docker layers may be cached locally. Stored as a
183
- * `Set<string>` because `Set` preserves insertion order; we delete-then-add
184
- * to refresh recency and `next()` on the keys iterator to find the
185
- * least-recently-used entry.
186
- */
187
- imageLru = new Set();
188
- imageCacheMax;
189
- cleanupImage;
223
+ pruneRound;
224
+ diskFloorBytes;
225
+ freeDiskBytes;
226
+ systemPrune;
227
+ resolveImageDigest;
228
+ evalTimeoutMs;
190
229
  constructor(opts) {
191
230
  this.opts = opts;
192
- this.imageCacheMax = resolveImageCacheMax(opts.imageCacheMax);
193
- this.cleanupImage = opts.cleanupImage ?? defaultCleanupImage;
231
+ this.pruneRound = opts.pruneRound ?? defaultPruneRound;
232
+ this.diskFloorBytes = resolveDiskFloorBytes(opts.diskFloorBytes);
233
+ this.freeDiskBytes = opts.freeDiskBytes ?? defaultFreeDiskBytes;
234
+ this.systemPrune = opts.systemPrune ?? (() => runDocker(['system', 'prune', '-f']));
235
+ this.resolveImageDigest = opts.resolveImageDigest ?? defaultResolveImageDigest;
236
+ this.evalTimeoutMs = resolveEvalTimeoutMs(opts.evalTimeoutMs);
237
+ }
238
+ /**
239
+ * Ensure enough free disk for an eval round. Below the floor → broad prune →
240
+ * re-probe; still below → `InsufficientDiskError` (clean abort). (#476)
241
+ */
242
+ async ensureDiskHeadroom() {
243
+ const free = await this.freeDiskBytes();
244
+ if (free >= this.diskFloorBytes)
245
+ return;
246
+ console.warn(`[swe-rebench-v2] low disk (${(free / 1e9).toFixed(1)} GB) — running docker system prune`);
247
+ await this.systemPrune();
248
+ const afterPrune = await this.freeDiskBytes();
249
+ if (afterPrune < this.diskFloorBytes) {
250
+ throw new InsufficientDiskError(afterPrune, this.diskFloorBytes);
251
+ }
194
252
  }
195
253
  async runEval(args) {
254
+ await this.ensureDiskHeadroom();
196
255
  try {
197
- return await this.runEvalImpl(args);
256
+ const result = await this.runEvalImpl(args);
257
+ let imageDigest = null;
258
+ try {
259
+ imageDigest = await this.resolveImageDigest(args.image);
260
+ }
261
+ catch (err) {
262
+ const reason = err instanceof Error ? err.message : String(err);
263
+ console.warn(`[swe-rebench-v2] resolveImageDigest failed for ${args.image}: ${reason}`);
264
+ }
265
+ return {
266
+ ...result,
267
+ ...(imageDigest ? { imageDigest } : {}),
268
+ };
198
269
  }
199
270
  finally {
200
- // Always record the image and run GC — even when the eval threw. A
201
- // pull-and-crash failure (Docker storage IO error, image_arch_mismatch,
202
- // patch_corrupt, eval_no_report) still left an image on disk; we must
203
- // count it toward the cache cap so the failure path can't leak the LRU.
204
- await this.recordImageUsage(args.image);
205
- }
206
- }
207
- /**
208
- * Move `image` to the most-recently-used slot of the in-process LRU; if the
209
- * set now exceeds {@link imageCacheMax}, evict the oldest entries via
210
- * {@link cleanupImage}. Eviction failures are swallowed so a flaky
211
- * `docker rmi` cannot escape `runEval`.
212
- *
213
- * The cap is enforced after the just-used image is inserted: the
214
- * just-evaluated image is the *most* recent, so repeat-evals of recently
215
- * used instances never re-pull. Only when more than N distinct images have
216
- * been used does the oldest get rmi'd.
217
- */
218
- async recordImageUsage(image) {
219
- if (!image)
220
- return;
221
- // Refresh recency: delete-then-add reinserts at the tail of the set.
222
- this.imageLru.delete(image);
223
- this.imageLru.add(image);
224
- while (this.imageLru.size > this.imageCacheMax) {
225
- const oldest = this.imageLru.values().next().value;
226
- if (!oldest)
227
- break;
228
- this.imageLru.delete(oldest);
271
+ // Prune this round's full Docker footprint — even when the eval threw,
272
+ // a pull-and-crash still left an image on disk (#476).
229
273
  try {
230
- await this.cleanupImage(oldest);
274
+ await this.pruneRound(args.image);
231
275
  }
232
276
  catch (err) {
233
- // Best-effort GC: a failed rmi leaves the image on disk but mustn't
234
- // break the loop. Warn so a flaky `docker` (or a permission slip)
235
- // becomes visible before disks fill — silent leaks were the whole
236
- // problem this bead exists to fix.
237
277
  const reason = err instanceof Error ? err.message : String(err);
238
- console.warn(`[swe-rebench-v2] eval-image cleanup failed for ${oldest}: ${reason}`);
278
+ console.warn(`[swe-rebench-v2] pruneRound failed for ${args.image}: ${reason}`);
239
279
  }
240
280
  }
241
281
  }
@@ -280,6 +320,7 @@ export class PythonEvalRunner {
280
320
  const child = spawn(this.opts.pythonBin ?? 'python3', pyArgs, {
281
321
  cwd: this.opts.upstreamRepoDir,
282
322
  stdio: ['ignore', 'pipe', 'pipe'],
323
+ detached: process.platform !== 'win32',
283
324
  // SWE-rebench eval images are published for linux/amd64. Pin the platform
284
325
  // so the upstream `docker run` is consistent on amd64 hosts and does not
285
326
  // silently crash under arm64 emulation on dev machines.
@@ -289,10 +330,54 @@ export class PythonEvalRunner {
289
330
  child.stderr.on('data', (d) => { stderr += d.toString(); });
290
331
  let stdout = '';
291
332
  child.stdout.on('data', (d) => { stdout += d.toString(); });
333
+ let timedOut = false;
334
+ let closed = false;
335
+ let killTimer;
336
+ const killChild = (signal) => {
337
+ const pid = child.pid;
338
+ if (!pid)
339
+ return;
340
+ try {
341
+ if (process.platform === 'win32') {
342
+ child.kill(signal);
343
+ }
344
+ else {
345
+ process.kill(-pid, signal);
346
+ }
347
+ }
348
+ catch {
349
+ try {
350
+ child.kill(signal);
351
+ }
352
+ catch { }
353
+ }
354
+ };
355
+ const timeoutTimer = this.evalTimeoutMs > 0
356
+ ? setTimeout(() => {
357
+ timedOut = true;
358
+ killChild('SIGTERM');
359
+ killTimer = setTimeout(() => {
360
+ if (!closed)
361
+ killChild('SIGKILL');
362
+ }, 10_000);
363
+ killTimer.unref?.();
364
+ }, this.evalTimeoutMs)
365
+ : undefined;
366
+ timeoutTimer?.unref?.();
292
367
  const exitCode = await new Promise((resolve, reject) => {
293
368
  child.on('close', (code) => resolve(code ?? 1));
294
369
  child.on('error', reject);
370
+ }).finally(() => {
371
+ closed = true;
372
+ if (timeoutTimer)
373
+ clearTimeout(timeoutTimer);
374
+ if (killTimer)
375
+ clearTimeout(killTimer);
295
376
  });
377
+ if (timedOut) {
378
+ await rm(tmp, { recursive: true, force: true });
379
+ throw new EvalCouldNotGradeError('eval_timeout', `python eval timed out after ${this.evalTimeoutMs}ms; ${(stderr || stdout).slice(-800)}`);
380
+ }
296
381
  let report;
297
382
  try {
298
383
  report = JSON.parse(await readFile(reportPath, 'utf8'));
@@ -1 +1 @@
1
- {"version":3,"file":"eval-runner.js","sourceRoot":"","sources":["../../../../src/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eval-runner.js","sourceRoot":"","sources":["../../../../src/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@
18
18
  import { type SpawnOptions } from 'node:child_process';
19
19
  import type { EnableResult, Harness, HarnessContext, HarnessEnableContext, HarnessEnableMetadata, ReadyStatus, Solution } from '../../types.js';
20
20
  import type { Task } from '../../../types/task.js';
21
- import { uploadToIpfs } from '../../../adapters/mech/ipfs.js';
21
+ import { fetchFromIpfs, uploadToIpfs } from '../../../adapters/mech/ipfs.js';
22
22
  import { type EvalRunner, type HfFetcher } from './index.js';
23
23
  import { type PythonEvalRunnerOptions } from './eval-runner.js';
24
24
  import { type CommandResult } from '../../../solver-types/_swe-rebench-v2-substrate.js';
@@ -40,6 +40,8 @@ export interface SweRebenchV2EvaluatorHarnessOptions {
40
40
  implStateDir?: string;
41
41
  /** IPFS registry URL used to pin test logs. Defaults to Autonolas gateway. */
42
42
  ipfsRegistryUrl?: string;
43
+ /** IPFS gateway URL used to fetch launcher-published vetted pool artifacts. */
44
+ ipfsGatewayUrl?: string;
43
45
  /**
44
46
  * Test-only injection points. Production runs use Node's child_process
45
47
  * + node:fs + the bundled HFFetcher / PythonEvalRunner.
@@ -63,6 +65,7 @@ export interface SweRebenchV2EvaluatorHarnessOptions {
63
65
  */
64
66
  makeRunner?: (opts: PythonEvalRunnerOptions) => EvalRunner;
65
67
  uploadToIpfs?: typeof uploadToIpfs;
68
+ fetchFromIpfs?: typeof fetchFromIpfs;
66
69
  /**
67
70
  * Override the state directory used for the {@link ValidatedPoolStore}
68
71
  * substrate-recheck. Defaults to `JINN_SWE_REBENCH_V2_STATE_DIR` env
@@ -83,6 +86,7 @@ export declare class SweRebenchV2EvaluatorHarness implements Harness {
83
86
  private readonly stub;
84
87
  private readonly implStateDir;
85
88
  private readonly ipfsRegistryUrl;
89
+ private readonly ipfsGatewayUrl;
86
90
  private readonly deps;
87
91
  /** The engine's claim-eligibility check calls `isReady()` per candidate
88
92
  * task per tick (~17 Hz potential). Cache the live `docker info` result
@@ -98,6 +102,9 @@ export declare class SweRebenchV2EvaluatorHarness implements Harness {
98
102
  * call and the disk-budget bead (jinn-mono-uy6v.11) is a no-op.
99
103
  */
100
104
  private cachedRunner;
105
+ private cachedFetcher;
106
+ private cachedPool;
107
+ private readonly publishedPoolArtifactCache;
101
108
  constructor(opts?: SweRebenchV2EvaluatorHarnessOptions);
102
109
  /**
103
110
  * Resolve the {@link EvalRunner} used for a `run()` invocation. The
@@ -107,6 +114,9 @@ export declare class SweRebenchV2EvaluatorHarness implements Harness {
107
114
  * tests that want a fresh mock per call.
108
115
  */
109
116
  private getRunner;
117
+ private getFetcher;
118
+ private loadPoolForRecheck;
119
+ private loadPublishedPoolArtifact;
110
120
  private isDockerReachable;
111
121
  supports(ctx: {
112
122
  solverType: string;
@@ -131,6 +141,7 @@ export declare class SweRebenchV2EvaluatorHarness implements Harness {
131
141
  * Throws {@link SkippableError} on any mismatch — never fails open.
132
142
  */
133
143
  private recheckSubstrate;
144
+ private loadPublishedPoolRow;
134
145
  run(ctx: HarnessContext): Promise<Solution>;
135
146
  }
136
147
  declare function runCommand(bin: string, args: string[], opts?: SpawnOptions): Promise<CommandResult>;
@@ -23,14 +23,16 @@ import { join } from 'node:path';
23
23
  import { SweRebenchV2TaskSchema, SweRebenchV2SolutionPayloadSchema, } from '../../../vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.js';
24
24
  import { REQUIRES_LIVE_DAEMON_READINESS, SkippableError } from '../../types.js';
25
25
  import { SignedEnvelopeSchema, normalizeEnvelopeRole } from '../../../types/envelope.js';
26
- import { uploadToIpfs } from '../../../adapters/mech/ipfs.js';
26
+ import { fetchFromIpfs, uploadToIpfs } from '../../../adapters/mech/ipfs.js';
27
27
  import { SweRebenchV2Evaluator } from './index.js';
28
28
  import { PythonEvalRunner, EvalCouldNotGradeError, } from './eval-runner.js';
29
29
  import { HttpHfFetcher } from './hf-fetcher.js';
30
- import { ValidatedPoolStore, EVAL_SEMANTICS_VERSION, } from '../../../solver-types/_swe-rebench-v2-validated-pool.js';
30
+ import { ValidatedPoolStore, EVAL_SEMANTICS_VERSION, hashVettedPoolArtifact, loadVettedPoolArtifactScorableEntries, parseVettedPoolArtifact, vettedPoolArtifactRefFromEligibility, } from '../../../solver-types/_swe-rebench-v2-validated-pool.js';
31
31
  import { computeRowHash, resolveImageDigest, } from '../../../solver-types/_swe-rebench-v2-substrate.js';
32
32
  import { defaultStateDir as defaultSolverTypeStateDir, loadSweRebenchV2Pool, } from '../../../solver-types/swe-rebench-v2.js';
33
+ import { PoolCacheStore, loadPoolWithCacheFallback, } from '../../../solver-types/_swe-rebench-v2-pool-cache.js';
33
34
  const DEFAULT_IPFS_REGISTRY_URL = 'https://registry.autonolas.tech';
35
+ const DEFAULT_IPFS_GATEWAY_URL = 'https://gateway.autonolas.tech';
34
36
  const UPSTREAM_REPO_URL = 'https://github.com/SWE-rebench/SWE-rebench-V2.git';
35
37
  const STATE_FILE = 'state.json';
36
38
  const ENABLE_CLI = 'jinn harnesses enable swe-rebench-v2-evaluator';
@@ -40,6 +42,7 @@ export class SweRebenchV2EvaluatorHarness {
40
42
  stub;
41
43
  implStateDir;
42
44
  ipfsRegistryUrl;
45
+ ipfsGatewayUrl;
43
46
  deps;
44
47
  /** The engine's claim-eligibility check calls `isReady()` per candidate
45
48
  * task per tick (~17 Hz potential). Cache the live `docker info` result
@@ -55,10 +58,14 @@ export class SweRebenchV2EvaluatorHarness {
55
58
  * call and the disk-budget bead (jinn-mono-uy6v.11) is a no-op.
56
59
  */
57
60
  cachedRunner;
61
+ cachedFetcher;
62
+ cachedPool;
63
+ publishedPoolArtifactCache = new Map();
58
64
  constructor(opts = {}) {
59
65
  this.stub = opts.stub ?? false;
60
66
  this.implStateDir = opts.implStateDir;
61
67
  this.ipfsRegistryUrl = opts.ipfsRegistryUrl ?? DEFAULT_IPFS_REGISTRY_URL;
68
+ this.ipfsGatewayUrl = opts.ipfsGatewayUrl ?? process.env['JINN_IPFS_GATEWAY_URL'] ?? DEFAULT_IPFS_GATEWAY_URL;
62
69
  this.deps = opts._testDeps ?? {};
63
70
  }
64
71
  /**
@@ -78,6 +85,72 @@ export class SweRebenchV2EvaluatorHarness {
78
85
  }
79
86
  return this.cachedRunner;
80
87
  }
88
+ getFetcher() {
89
+ if (this.deps.fetcher)
90
+ return this.deps.fetcher;
91
+ if (!this.cachedFetcher) {
92
+ this.cachedFetcher = new HttpHfFetcher();
93
+ }
94
+ return this.cachedFetcher;
95
+ }
96
+ loadPoolForRecheck(stateDir) {
97
+ if (!this.cachedPool || this.cachedPool.stateDir !== stateDir) {
98
+ const loadPool = this.deps.loadPool ?? loadSweRebenchV2Pool;
99
+ const promise = loadPoolWithCacheFallback({
100
+ loadPool,
101
+ cache: new PoolCacheStore({ stateDir }),
102
+ currentPool: [],
103
+ }).then((result) => {
104
+ if (result.pool.length > 0)
105
+ return result.pool;
106
+ if (result.error) {
107
+ throw new Error(result.error.message);
108
+ }
109
+ return result.pool;
110
+ });
111
+ this.cachedPool = { stateDir, promise };
112
+ }
113
+ const cached = this.cachedPool;
114
+ return cached.promise.catch((err) => {
115
+ if (this.cachedPool === cached) {
116
+ this.cachedPool = undefined;
117
+ }
118
+ throw err;
119
+ });
120
+ }
121
+ loadPublishedPoolArtifact(artifactCid) {
122
+ const cached = this.publishedPoolArtifactCache.get(artifactCid);
123
+ if (cached)
124
+ return cached;
125
+ const fetchArtifact = this.deps.fetchFromIpfs ?? fetchFromIpfs;
126
+ const promise = (async () => {
127
+ let rawArtifact;
128
+ try {
129
+ rawArtifact = await fetchArtifact(this.ipfsGatewayUrl, artifactCid);
130
+ }
131
+ catch (err) {
132
+ throw new SkippableError('vetted_pool_fetch_failed', `cannot fetch vetted pool artifact ${artifactCid}: ${err instanceof Error ? err.message : String(err)}`);
133
+ }
134
+ try {
135
+ const artifact = parseVettedPoolArtifact(rawArtifact);
136
+ return {
137
+ evalSemanticsVersion: artifact.evalSemanticsVersion,
138
+ artifactHash: hashVettedPoolArtifact(artifact),
139
+ entries: loadVettedPoolArtifactScorableEntries(artifact),
140
+ };
141
+ }
142
+ catch (err) {
143
+ throw new SkippableError('vetted_pool_artifact_invalid', `invalid vetted pool artifact ${artifactCid}: ${err instanceof Error ? err.message : String(err)}`);
144
+ }
145
+ })();
146
+ this.publishedPoolArtifactCache.set(artifactCid, promise);
147
+ promise.catch(() => {
148
+ if (this.publishedPoolArtifactCache.get(artifactCid) === promise) {
149
+ this.publishedPoolArtifactCache.delete(artifactCid);
150
+ }
151
+ });
152
+ return promise;
153
+ }
81
154
  async isDockerReachable(now = Date.now()) {
82
155
  const cached = this.dockerCheckCache;
83
156
  if (cached && now - cached.at < SweRebenchV2EvaluatorHarness.DOCKER_CHECK_TTL_MS) {
@@ -318,6 +391,48 @@ export class SweRebenchV2EvaluatorHarness {
318
391
  }
319
392
  return recheckRow;
320
393
  }
394
+ async loadPublishedPoolRow(task, runtimeTask, fetcher) {
395
+ let ref;
396
+ try {
397
+ ref = vettedPoolArtifactRefFromEligibility(runtimeTask.eligibility);
398
+ }
399
+ catch (err) {
400
+ throw new SkippableError('vetted_pool_ref_invalid', `invalid vetted pool ref: ${err instanceof Error ? err.message : String(err)}`);
401
+ }
402
+ if (!ref)
403
+ return null;
404
+ if (runtimeTask.solverNetManifestCid && ref.manifestCid !== runtimeTask.solverNetManifestCid) {
405
+ throw new SkippableError('vetted_pool_manifest_mismatch', `vetted pool ref manifestCid ${ref.manifestCid} does not match task manifestCid ${runtimeTask.solverNetManifestCid}`);
406
+ }
407
+ if (ref.evalSemanticsVersion !== EVAL_SEMANTICS_VERSION) {
408
+ throw new SkippableError('vetted_pool_semantics_mismatch', `vetted pool ref semanticsVersion=${ref.evalSemanticsVersion} does not match evaluator semanticsVersion=${EVAL_SEMANTICS_VERSION}`);
409
+ }
410
+ const artifact = await this.loadPublishedPoolArtifact(ref.artifactCid);
411
+ try {
412
+ if (artifact.evalSemanticsVersion !== ref.evalSemanticsVersion) {
413
+ throw new Error(`artifact semanticsVersion=${artifact.evalSemanticsVersion} does not match ref=${ref.evalSemanticsVersion}`);
414
+ }
415
+ if (artifact.artifactHash !== ref.artifactHash) {
416
+ throw new Error(`artifact hash ${artifact.artifactHash} does not match ref ${ref.artifactHash}`);
417
+ }
418
+ }
419
+ catch (err) {
420
+ throw new SkippableError('vetted_pool_artifact_invalid', `invalid vetted pool artifact ${ref.artifactCid}: ${err instanceof Error ? err.message : String(err)}`);
421
+ }
422
+ if (!artifact.entries.byId.has(task.instance_id)) {
423
+ throw new SkippableError('vetted_pool_instance_missing_or_unscorable', `${task.instance_id} is not present as scorable in vetted pool artifact ${ref.artifactCid}`);
424
+ }
425
+ try {
426
+ return await fetcher.fetchTaskRow({
427
+ hf_dataset: task.hf_dataset,
428
+ hf_split: task.hf_split,
429
+ instance_id: task.instance_id,
430
+ });
431
+ }
432
+ catch (err) {
433
+ throw new SkippableError('hf_fetch_failed', `cannot load grading row after vetted-pool admission: ${err instanceof Error ? err.message : String(err)}`);
434
+ }
435
+ }
321
436
  async run(ctx) {
322
437
  if (this.stub) {
323
438
  throw new Error('swe-rebench-v2-evaluator: stub registry cannot run evaluation (requires live daemon)');
@@ -346,16 +461,15 @@ export class SweRebenchV2EvaluatorHarness {
346
461
  const stateDir = this.deps.stateDir ??
347
462
  process.env['JINN_SWE_REBENCH_V2_STATE_DIR'] ??
348
463
  defaultSolverTypeStateDir();
349
- const recheckFetcher = this.deps.fetcher ?? new HttpHfFetcher();
350
- const loadPool = this.deps.loadPool ?? loadSweRebenchV2Pool;
351
- const recheckRow = await this.recheckSubstrate(task, recheckFetcher, loadPool, stateDir);
464
+ const fetcher = this.getFetcher();
465
+ const publishedPoolRow = await this.loadPublishedPoolRow(task, ctx.task, fetcher);
466
+ const recheckRow = publishedPoolRow ?? await this.recheckSubstrate(task, fetcher, () => this.loadPoolForRecheck(stateDir), stateDir);
352
467
  // ── End substrate recheck ─────────────────────────────────────────────────
353
- const fetcher = this.deps.fetcher ?? new HttpHfFetcher();
354
468
  const runner = this.getRunner(state.upstreamRepoDir);
355
469
  const evaluator = new SweRebenchV2Evaluator({ fetcher, runner });
356
470
  let graded;
357
471
  try {
358
- graded = await evaluator.grade({ task, solutionPayload });
472
+ graded = await evaluator.grade({ task, solutionPayload, row: recheckRow });
359
473
  }
360
474
  catch (err) {
361
475
  if (err instanceof EvalCouldNotGradeError) {