@tangle-network/agent-bench 0.3.7 → 0.3.8
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.
- package/CHANGELOG.md +4 -0
- package/HARNESS.md +43 -0
- package/dist/adapters.js +23 -23
- package/dist/benchmarks/_harness.d.ts +1 -1
- package/dist/benchmarks/_harness.js +1 -1
- package/dist/benchmarks/aec-bench.js +2 -2
- package/dist/benchmarks/agentbench.js +2 -2
- package/dist/benchmarks/appworld.js +2 -2
- package/dist/benchmarks/bfcl.js +2 -2
- package/dist/benchmarks/commit0.js +2 -2
- package/dist/benchmarks/crag.js +2 -2
- package/dist/benchmarks/dabstep.js +2 -2
- package/dist/benchmarks/enterpriseops-gym.js +2 -2
- package/dist/benchmarks/finresearchbench.js +2 -2
- package/dist/benchmarks/nomiracl.js +2 -2
- package/dist/benchmarks/open-rag-bench.js +2 -2
- package/dist/benchmarks/programbench.js +2 -2
- package/dist/benchmarks/ragbench.js +2 -2
- package/dist/benchmarks/swe-bench.js +2 -2
- package/dist/benchmarks/t2-ragbench.js +2 -2
- package/dist/benchmarks/tau-bench-shared.js +2 -2
- package/dist/benchmarks/tau2-bench.js +3 -3
- package/dist/benchmarks/tau3-banking.js +3 -3
- package/dist/benchmarks/terminal-bench.js +2 -2
- package/dist/benchmarks/toollm.js +2 -2
- package/dist/benchmarks/webarena-verified.js +2 -2
- package/dist/{chunk-CKUVRZ2T.js → chunk-3U5TXJZS.js} +2 -2
- package/dist/{chunk-YCGY7UIZ.js → chunk-7GRVHU22.js} +2 -2
- package/dist/{chunk-Z7ML6L77.js → chunk-HWST3SED.js} +2 -2
- package/dist/{chunk-SYDW647C.js → chunk-IA2FBTWC.js} +2 -2
- package/dist/{chunk-R67DFVLO.js → chunk-IFVINJ4B.js} +2 -2
- package/dist/{chunk-R36V2VP7.js → chunk-IZ5M6OAC.js} +2 -2
- package/dist/{chunk-ODT47UAY.js → chunk-K3BQGZCT.js} +2 -2
- package/dist/{chunk-IFAV6KEM.js → chunk-KP5KD6EN.js} +2 -2
- package/dist/{chunk-ZEWMTR5M.js → chunk-MQMRLGOG.js} +2 -2
- package/dist/{chunk-TSWPNOYM.js → chunk-NQG5XDSB.js} +2 -2
- package/dist/{chunk-7WSD27QQ.js → chunk-PB64GYIG.js} +2 -2
- package/dist/{chunk-HBSWHQNJ.js → chunk-RCYQEFNX.js} +3 -3
- package/dist/{chunk-J3KDJNX2.js → chunk-RH5F53JT.js} +2 -2
- package/dist/{chunk-UAIOHCUK.js → chunk-SFLA7OH3.js} +3 -3
- package/dist/{chunk-Y6O2OCUO.js → chunk-SHM6MRRF.js} +2 -2
- package/dist/{chunk-KDIKRJGB.js → chunk-SHYIRB7I.js} +2 -2
- package/dist/{chunk-HHXFIHXC.js → chunk-SVR2LKYI.js} +2 -2
- package/dist/{chunk-PWQVGAJB.js → chunk-V7AEBY6U.js} +21 -21
- package/dist/{chunk-LRRD7NAG.js → chunk-WSKWVEQB.js} +18 -2
- package/dist/chunk-WSKWVEQB.js.map +1 -0
- package/dist/{chunk-2PVVP7GN.js → chunk-XKEFIFIC.js} +2 -2
- package/dist/{chunk-JRWWGMK7.js → chunk-XYA4XSNU.js} +2 -2
- package/dist/{chunk-X5YKXC6V.js → chunk-YSMEKBTD.js} +2 -2
- package/dist/{chunk-2XU6OGEN.js → chunk-Z4TZ76N7.js} +2 -2
- package/dist/index.js +23 -23
- package/package.json +4 -4
- package/scripts/verify-packed-consumer.mjs +1 -1
- package/src/benchmarks/_harness.ts +20 -2
- package/src/benchmarks/humaneval.test.mts +2 -2
- package/src/quant-arena/README.md +144 -0
- package/src/quant-arena/backtest.test.mts +135 -0
- package/src/quant-arena/backtest.ts +218 -0
- package/src/quant-arena/data.test.mts +44 -0
- package/src/quant-arena/data.ts +141 -0
- package/src/quant-arena/driver.test.mts +253 -0
- package/src/quant-arena/driver.ts +219 -0
- package/src/quant-arena/fixtures/data/PROVENANCE.md +26 -0
- package/src/quant-arena/fixtures/data/holdout/IDX.csv +523 -0
- package/src/quant-arena/fixtures/data/holdout/S01.csv +523 -0
- package/src/quant-arena/fixtures/data/holdout/S02.csv +523 -0
- package/src/quant-arena/fixtures/data/holdout/S03.csv +523 -0
- package/src/quant-arena/fixtures/data/holdout/S04.csv +523 -0
- package/src/quant-arena/fixtures/data/holdout/S05.csv +523 -0
- package/src/quant-arena/fixtures/data/holdout/S06.csv +523 -0
- package/src/quant-arena/fixtures/data/holdout/S07.csv +523 -0
- package/src/quant-arena/fixtures/data/holdout/S08.csv +523 -0
- package/src/quant-arena/fixtures/data/holdout/S09.csv +523 -0
- package/src/quant-arena/fixtures/data/holdout/S10.csv +523 -0
- package/src/quant-arena/fixtures/data/insample/IDX.csv +2087 -0
- package/src/quant-arena/fixtures/data/insample/S01.csv +2087 -0
- package/src/quant-arena/fixtures/data/insample/S02.csv +2087 -0
- package/src/quant-arena/fixtures/data/insample/S03.csv +2087 -0
- package/src/quant-arena/fixtures/data/insample/S04.csv +2087 -0
- package/src/quant-arena/fixtures/data/insample/S05.csv +2087 -0
- package/src/quant-arena/fixtures/data/insample/S06.csv +2087 -0
- package/src/quant-arena/fixtures/data/insample/S07.csv +2087 -0
- package/src/quant-arena/fixtures/data/insample/S08.csv +2087 -0
- package/src/quant-arena/fixtures/data/insample/S09.csv +2087 -0
- package/src/quant-arena/fixtures/data/insample/S10.csv +2087 -0
- package/src/quant-arena/fixtures/demo-campaign/cost-ledger.jsonl +16 -0
- package/src/quant-arena/fixtures/demo-campaign/notebook.jsonl +5 -0
- package/src/quant-arena/fixtures/demo-campaign/rollout-manifest.json +171 -0
- package/src/quant-arena/fixtures/demo-campaign/strategies/cand-001-default-author/strategy.ts +119 -0
- package/src/quant-arena/fixtures/demo-campaign/strategies/cand-002-default-author/strategy.ts +119 -0
- package/src/quant-arena/fixtures/demo-campaign/strategies/cand-003-quant-researcher/strategy.ts +105 -0
- package/src/quant-arena/fixtures/demo-campaign/strategies/cand-004-quant-researcher/strategy.ts +102 -0
- package/src/quant-arena/fixtures/demo-campaign-v2/cost-ledger.jsonl +4 -0
- package/src/quant-arena/fixtures/demo-campaign-v2/notebook.jsonl +2 -0
- package/src/quant-arena/fixtures/demo-campaign-v2/rollout-manifest.json +84 -0
- package/src/quant-arena/fixtures/demo-campaign-v2/strategies/cand-001-quant-researcher/strategy.ts +117 -0
- package/src/quant-arena/holdout-certify.mts +206 -0
- package/src/quant-arena/holdout-certify.test.mts +82 -0
- package/src/quant-arena/leak-audit.test.mts +79 -0
- package/src/quant-arena/leak-audit.ts +95 -0
- package/src/quant-arena/make-fixtures.mts +161 -0
- package/src/quant-arena/multiplicity.test.mts +68 -0
- package/src/quant-arena/multiplicity.ts +87 -0
- package/src/quant-arena/nautilus-certify.ts +31 -0
- package/src/quant-arena/oms.ts +90 -0
- package/src/quant-arena/profiles/quant-researcher.profile.json +7 -0
- package/src/quant-arena/python/pyproject.toml +8 -0
- package/src/quant-arena/python/uv.lock +1297 -0
- package/src/quant-arena/python/vbt-worker.py +192 -0
- package/src/quant-arena/quant-loop.mts +813 -0
- package/src/quant-arena/quant-loop.test.mts +75 -0
- package/src/quant-arena/strategies/buy-hold-index/strategy.ts +11 -0
- package/src/quant-arena/strategies/equal-weight/strategy.ts +20 -0
- package/src/quant-arena/strategies/sma-crossover/strategy.ts +42 -0
- package/src/quant-arena/types.ts +133 -0
- package/src/quant-arena/vbt-client.ts +321 -0
- package/src/quant-arena/vbt-parity.test.mts +183 -0
- package/src/quant-arena/windows.test.mts +45 -0
- package/src/quant-arena/windows.ts +54 -0
- package/src/rollout-ledger/backfill-swe-arena.mts +606 -0
- package/src/rollout-ledger/backfill-swe-arena.test.mts +338 -0
- package/src/rollout-ledger/settle-capture.mts +442 -0
- package/src/rollout-ledger/settle-capture.test.mts +270 -0
- package/src/swe-arena/activation.mts +228 -0
- package/src/swe-arena/activation.test.mts +303 -0
- package/src/swe-arena/arms.ts +30 -14
- package/src/swe-arena/briefing.mts +217 -0
- package/src/swe-arena/briefing.test.mts +178 -0
- package/src/swe-arena/calibrate.ts +102 -1
- package/src/swe-arena/cell-evidence.mts +41 -9
- package/src/swe-arena/factory-command-container.ts +284 -0
- package/src/swe-arena/factory-judge-child.mts +228 -0
- package/src/swe-arena/factory.test.mts +643 -0
- package/src/swe-arena/fixtures/factory/agent-eval-309/calibration.md +51 -0
- package/src/swe-arena/fixtures/factory/agent-eval-309/manifest.json +29 -0
- package/src/swe-arena/fixtures/factory/agent-eval-309/spec.md +64 -0
- package/src/swe-arena/fixtures/factory/agent-runtime-232/calibration.md +48 -0
- package/src/swe-arena/fixtures/factory/agent-runtime-232/manifest.json +29 -0
- package/src/swe-arena/fixtures/factory/agent-runtime-232/spec.md +48 -0
- package/src/swe-arena/fixtures/factory/loops-28/calibration.md +47 -0
- package/src/swe-arena/fixtures/factory/loops-28/manifest.json +30 -0
- package/src/swe-arena/fixtures/factory/loops-28/spec.md +50 -0
- package/src/swe-arena/fixtures/run-report/README.md +43 -0
- package/src/swe-arena/fixtures/run-report/factory-agent-eval-309-FSUP0.json +173 -0
- package/src/swe-arena/fixtures/run-report/factory-agent-eval-309-FSUP0.md +100 -0
- package/src/swe-arena/fixtures/run-report/gen3-rollup.json +551 -0
- package/src/swe-arena/fixtures/run-report/gen3-rollup.md +64 -0
- package/src/swe-arena/fixtures.ts +135 -2
- package/src/swe-arena/gepa-seat.mts +583 -0
- package/src/swe-arena/gepa-seat.test.mts +635 -0
- package/src/swe-arena/ledger-orphans.mts +77 -0
- package/src/swe-arena/ledger-orphans.test.mts +147 -0
- package/src/swe-arena/lineage-record.mts +164 -0
- package/src/swe-arena/lineage-record.test.mts +115 -0
- package/src/swe-arena/outer-loop.mts +677 -27
- package/src/swe-arena/premeasured-from-cells.mts +281 -0
- package/src/swe-arena/premeasured-from-cells.test.mts +180 -0
- package/src/swe-arena/proposer-fanout.mts +295 -14
- package/src/swe-arena/proposer-fanout.test.mts +247 -0
- package/src/swe-arena/proposer-provenance.mts +177 -0
- package/src/swe-arena/proposer-provenance.test.mts +106 -0
- package/src/swe-arena/run-experiment.mts +367 -1
- package/src/swe-arena/run-report.mts +75 -0
- package/src/swe-arena/run-supervisor.test.mts +5 -3
- package/src/swe-arena/score-split.mts +140 -0
- package/src/swe-arena/score-split.test.mts +123 -0
- package/src/swe-arena/types.ts +52 -0
- package/src/swe-structural.mts +245 -837
- package/dist/chunk-LRRD7NAG.js.map +0 -1
- /package/dist/{chunk-CKUVRZ2T.js.map → chunk-3U5TXJZS.js.map} +0 -0
- /package/dist/{chunk-YCGY7UIZ.js.map → chunk-7GRVHU22.js.map} +0 -0
- /package/dist/{chunk-Z7ML6L77.js.map → chunk-HWST3SED.js.map} +0 -0
- /package/dist/{chunk-SYDW647C.js.map → chunk-IA2FBTWC.js.map} +0 -0
- /package/dist/{chunk-R67DFVLO.js.map → chunk-IFVINJ4B.js.map} +0 -0
- /package/dist/{chunk-R36V2VP7.js.map → chunk-IZ5M6OAC.js.map} +0 -0
- /package/dist/{chunk-ODT47UAY.js.map → chunk-K3BQGZCT.js.map} +0 -0
- /package/dist/{chunk-IFAV6KEM.js.map → chunk-KP5KD6EN.js.map} +0 -0
- /package/dist/{chunk-ZEWMTR5M.js.map → chunk-MQMRLGOG.js.map} +0 -0
- /package/dist/{chunk-TSWPNOYM.js.map → chunk-NQG5XDSB.js.map} +0 -0
- /package/dist/{chunk-7WSD27QQ.js.map → chunk-PB64GYIG.js.map} +0 -0
- /package/dist/{chunk-HBSWHQNJ.js.map → chunk-RCYQEFNX.js.map} +0 -0
- /package/dist/{chunk-J3KDJNX2.js.map → chunk-RH5F53JT.js.map} +0 -0
- /package/dist/{chunk-UAIOHCUK.js.map → chunk-SFLA7OH3.js.map} +0 -0
- /package/dist/{chunk-Y6O2OCUO.js.map → chunk-SHM6MRRF.js.map} +0 -0
- /package/dist/{chunk-KDIKRJGB.js.map → chunk-SHYIRB7I.js.map} +0 -0
- /package/dist/{chunk-HHXFIHXC.js.map → chunk-SVR2LKYI.js.map} +0 -0
- /package/dist/{chunk-PWQVGAJB.js.map → chunk-V7AEBY6U.js.map} +0 -0
- /package/dist/{chunk-2PVVP7GN.js.map → chunk-XKEFIFIC.js.map} +0 -0
- /package/dist/{chunk-JRWWGMK7.js.map → chunk-XYA4XSNU.js.map} +0 -0
- /package/dist/{chunk-X5YKXC6V.js.map → chunk-YSMEKBTD.js.map} +0 -0
- /package/dist/{chunk-2XU6OGEN.js.map → chunk-Z4TZ76N7.js.map} +0 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Round rollup — gen3
|
|
2
|
+
|
|
3
|
+
- Cells: 51
|
|
4
|
+
- **Steers across all cells: 0** (cells with ≥1 steer: 0; cells where the steer count is unavailable: 9)
|
|
5
|
+
- Waves per cell (mean): 3.137
|
|
6
|
+
- Max concurrency observed: 2
|
|
7
|
+
- Worker utilization (mean): 0.474
|
|
8
|
+
- Idle share (mean): 52.618%
|
|
9
|
+
- Workers spawned: 161 · accepted: 35
|
|
10
|
+
- Spend: $3.258497 · judged resolved: 17/51
|
|
11
|
+
|
|
12
|
+
| Instance | Arm | Steers | Waves | Utilization | Idle % | Resolved | USD |
|
|
13
|
+
|---|---|---:|---:|---:|---:|---|---:|
|
|
14
|
+
| astropy__astropy-13033 | R4 | 0 | 2 | 0.803 | 19.7 | false | 0.049903 |
|
|
15
|
+
| django__django-11532 | R4 | 0 | 2 | 0.702 | 29.8 | false | 0.036822 |
|
|
16
|
+
| matplotlib__matplotlib-20826 | R4 | 0 | 10 | 0.801 | 19.9 | false | 0.224134 |
|
|
17
|
+
| pydata__xarray-4687 | R4 | 0 | 5 | 0.831 | 16.9 | false | 0.096077 |
|
|
18
|
+
| pytest-dev__pytest-6197 | R4 | 0 | 14 | 0.308 | 69.9 | false | 0.189169 |
|
|
19
|
+
| sphinx-doc__sphinx-9658 | R4 | 0 | 4 | 0.574 | 42.6 | true | 0.085226 |
|
|
20
|
+
| astropy__astropy-13033 | R4 | 0 | 2 | 0.833 | 16.7 | false | 0.033692 |
|
|
21
|
+
| django__django-11532 | R4 | 0 | 2 | 0.546 | 45.4 | false | 0.079202 |
|
|
22
|
+
| matplotlib__matplotlib-20826 | R4 | 0 | 4 | 0.749 | 25.1 | false | 0.107538 |
|
|
23
|
+
| pydata__xarray-4687 | R4 | 0 | 2 | 0.722 | 27.8 | true | 0.040083 |
|
|
24
|
+
| pytest-dev__pytest-6197 | R4 | 0 | 4 | 0.458 | 54.2 | false | 0.072682 |
|
|
25
|
+
| sphinx-doc__sphinx-9658 | R4 | 0 | 5 | 0.611 | 38.9 | true | 0.063746 |
|
|
26
|
+
| astropy__astropy-13033 | R4 | 0 | 3 | 0.817 | 18.3 | true | 0.064968 |
|
|
27
|
+
| django__django-11532 | R4 | unavailable — workers/ directory absent under /tmp/claude-1000/-home-drew-code-supervisor-lab/f06fd156-042a-4ef9-bd88-f2ec7f52b90c/scratchpad/hh/gen3/arm-runs/31fc08bd3a/rep-0/runs/django__django-11532/R4/ws/.loops/supervisor/sup-1-4b0be0 | 0 | 0 | 100 | false | 0 |
|
|
28
|
+
| matplotlib__matplotlib-20826 | R4 | unavailable — workers/ directory absent under /tmp/claude-1000/-home-drew-code-supervisor-lab/f06fd156-042a-4ef9-bd88-f2ec7f52b90c/scratchpad/hh/gen3/arm-runs/31fc08bd3a/rep-0/runs/matplotlib__matplotlib-20826/R4/ws/.loops/supervisor/sup-1-2c15b1 | 0 | 0 | 100 | false | 0 |
|
|
29
|
+
| pydata__xarray-4687 | R4 | 0 | 2 | 0.473 | 52.7 | true | 0.043101 |
|
|
30
|
+
| pytest-dev__pytest-6197 | R4 | 0 | 13 | 0.352 | 64.8 | false | 0.222542 |
|
|
31
|
+
| sphinx-doc__sphinx-9658 | R4 | unavailable — workers/ directory absent under /tmp/claude-1000/-home-drew-code-supervisor-lab/f06fd156-042a-4ef9-bd88-f2ec7f52b90c/scratchpad/hh/gen3/arm-runs/31fc08bd3a/rep-0/runs/sphinx-doc__sphinx-9658/R4/ws/.loops/supervisor/sup-1-cd137b | 0 | 0 | 100 | false | 0 |
|
|
32
|
+
| astropy__astropy-13033 | R4 | 0 | 1 | 0.321 | 67.9 | false | 0.014523 |
|
|
33
|
+
| django__django-11532 | R4 | unavailable — workers/ directory absent under /tmp/claude-1000/-home-drew-code-supervisor-lab/f06fd156-042a-4ef9-bd88-f2ec7f52b90c/scratchpad/hh/gen3/arm-runs/31fc08bd3a/rep-1/runs/django__django-11532/R4/ws/.loops/supervisor/sup-1-c84e92 | 0 | 0 | 100 | false | 0 |
|
|
34
|
+
| matplotlib__matplotlib-20826 | R4 | 0 | 2 | 0.305 | 69.5 | true | 0.028989 |
|
|
35
|
+
| pydata__xarray-4687 | R4 | 0 | 4 | 0.648 | 35.2 | true | 0.081441 |
|
|
36
|
+
| pytest-dev__pytest-6197 | R4 | unavailable — workers/ directory absent under /tmp/claude-1000/-home-drew-code-supervisor-lab/f06fd156-042a-4ef9-bd88-f2ec7f52b90c/scratchpad/hh/gen3/arm-runs/31fc08bd3a/rep-1/runs/pytest-dev__pytest-6197/R4/ws/.loops/supervisor/sup-1-d7b670 | 0 | 0 | 100 | false | 0 |
|
|
37
|
+
| sphinx-doc__sphinx-9658 | R4 | unavailable — workers/ directory absent under /tmp/claude-1000/-home-drew-code-supervisor-lab/f06fd156-042a-4ef9-bd88-f2ec7f52b90c/scratchpad/hh/gen3/arm-runs/31fc08bd3a/rep-1/runs/sphinx-doc__sphinx-9658/R4/ws/.loops/supervisor/sup-1-37e35d | 0 | 0 | 100 | false | 0 |
|
|
38
|
+
| astropy__astropy-13033 | R4 | unavailable — workers/ directory absent under /tmp/claude-1000/-home-drew-code-supervisor-lab/f06fd156-042a-4ef9-bd88-f2ec7f52b90c/scratchpad/hh/gen3/arm-runs/a7a2a982e5/rep-0/runs/astropy__astropy-13033/R4/ws/.loops/supervisor/sup-1-4b8aff | 0 | 0 | 100 | false | 0 |
|
|
39
|
+
| django__django-11532 | R4 | 0 | 2 | 0.447 | 55.3 | true | 0.042501 |
|
|
40
|
+
| matplotlib__matplotlib-20826 | R4 | 0 | 2 | 0.233 | 76.7 | false | 0.028501 |
|
|
41
|
+
| pydata__xarray-4687 | R4 | 0 | 3 | 0.847 | 15.3 | true | 0.070831 |
|
|
42
|
+
| pytest-dev__pytest-6197 | R4 | 0 | 2 | 0.14 | 86 | false | 0.029033 |
|
|
43
|
+
| sphinx-doc__sphinx-9658 | R4 | unavailable — workers/ directory absent under /tmp/claude-1000/-home-drew-code-supervisor-lab/f06fd156-042a-4ef9-bd88-f2ec7f52b90c/scratchpad/hh/gen3/arm-runs/a7a2a982e5/rep-0/runs/sphinx-doc__sphinx-9658/R4/ws/.loops/supervisor/sup-1-d97029 | 0 | 0 | 100 | false | 0 |
|
|
44
|
+
| astropy__astropy-13033 | R4 | 0 | 2 | 0.482 | 51.8 | false | 0.037866 |
|
|
45
|
+
| django__django-11532 | R4 | 0 | 3 | 0.388 | 61.2 | true | 0.059868 |
|
|
46
|
+
| matplotlib__matplotlib-20826 | R4 | unavailable — workers/ directory absent under /tmp/claude-1000/-home-drew-code-supervisor-lab/f06fd156-042a-4ef9-bd88-f2ec7f52b90c/scratchpad/hh/gen3/arm-runs/a7a2a982e5/rep-1/runs/matplotlib__matplotlib-20826/R4/ws/.loops/supervisor/sup-1-eab778 | 0 | 0 | 100 | false | 0 |
|
|
47
|
+
| pydata__xarray-4687 | R4 | 0 | 2 | 0.714 | 28.6 | true | 0.044491 |
|
|
48
|
+
| pytest-dev__pytest-6197 | R4 | 0 | 5 | 0.566 | 43.4 | false | 0.108311 |
|
|
49
|
+
| sphinx-doc__sphinx-9658 | R4 | 0 | 4 | 0.359 | 64.1 | true | 0.060977 |
|
|
50
|
+
| astropy__astropy-13033 | R4 | 0 | 2 | 0.834 | 16.6 | false | 0.04263 |
|
|
51
|
+
| django__django-11532 | R4 | 0 | 3 | 0.394 | 60.6 | false | 0.068403 |
|
|
52
|
+
| matplotlib__matplotlib-20826 | R4 | 0 | 5 | 0.588 | 41.2 | false | 0.110963 |
|
|
53
|
+
| pydata__xarray-4687 | R4 | 0 | 3 | 0.82 | 18 | true | 0.084503 |
|
|
54
|
+
| pytest-dev__pytest-6197 | R4 | 0 | 3 | 0.281 | 71.9 | false | 0.079547 |
|
|
55
|
+
| sphinx-doc__sphinx-9658 | R4 | 0 | 5 | 0.649 | 35.1 | true | 0.068044 |
|
|
56
|
+
| astropy__astropy-13033 | R4 | 0 | 4 | 0.85 | 15 | false | 0.096642 |
|
|
57
|
+
| django__django-11532 | R4 | 0 | 2 | 0.244 | 75.6 | false | 0.047655 |
|
|
58
|
+
| matplotlib__matplotlib-20826 | R4 | 0 | 7 | 0.76 | 24 | false | 0.161885 |
|
|
59
|
+
| pydata__xarray-4687 | R4 | 0 | 5 | 0.528 | 47.2 | true | 0.084818 |
|
|
60
|
+
| pytest-dev__pytest-6197 | R4 | 0 | 5 | 0.263 | 73.7 | true | 0.122129 |
|
|
61
|
+
| sphinx-doc__sphinx-9658 | R4 | 0 | 2 | 0.514 | 48.6 | true | 0.0709 |
|
|
62
|
+
| astropy__astropy-13033 | R4 | 0 | 3 | 0.789 | 21.1 | unavailable — judge.json absent | 0.079491 |
|
|
63
|
+
| astropy__astropy-13033 | R4 | 0 | 2 | 0.846 | 15.4 | unavailable — judge.json absent | 0.040525 |
|
|
64
|
+
| astropy__astropy-13033 | R4 | 0 | 3 | 0.782 | 21.8 | unavailable — judge.json absent | 0.084145 |
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Pinned fixture loaders. All artifacts live under `./fixtures/` (copied
|
|
3
3
|
* from the live experiment's scratchpad on 2026-07-15 so the replay survives
|
|
4
4
|
* scratchpad deletion). Loaders fail loud on shape drift — a silent default
|
|
5
5
|
* here would let the pinned reproduction pass against corrupted fixtures.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { readFileSync } from 'node:fs'
|
|
8
|
+
import { readdirSync, readFileSync } from 'node:fs'
|
|
9
|
+
import { join } from 'node:path'
|
|
9
10
|
import { fileURLToPath } from 'node:url'
|
|
10
11
|
import type {
|
|
12
|
+
FactoryInstance,
|
|
11
13
|
HoldoutEntry,
|
|
12
14
|
HoldoutRegistry,
|
|
13
15
|
LedgerRow,
|
|
@@ -79,6 +81,137 @@ export function loadPreregisterLog(): string[] {
|
|
|
79
81
|
.filter((l) => l.trim().length > 0)
|
|
80
82
|
}
|
|
81
83
|
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
// Factory-bench instance source (manifest dirs, one per harvested PR).
|
|
86
|
+
// The 3 calibrated pilots ship under ./fixtures/factory/; any directory with
|
|
87
|
+
// the same layout (manifest.json + spec.md) loads identically.
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
|
|
90
|
+
/** Default shipped instance root: `./fixtures/factory`. */
|
|
91
|
+
export const FACTORY_INSTANCES_DIR = fixturePath('factory')
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* A FactoryInstance plus what the runner needs beyond the raw manifest: its
|
|
95
|
+
* directory (the judge child re-loads it by path), the spec text, and the
|
|
96
|
+
* calibrated judge-test denominator parsed from `resolved_criterion` — kept
|
|
97
|
+
* OUT of vitest's reported total so a judge file that fails to collect still
|
|
98
|
+
* scores against the full calibrated count instead of shrinking the divisor.
|
|
99
|
+
*/
|
|
100
|
+
export interface LoadedFactoryInstance extends FactoryInstance {
|
|
101
|
+
dir: string
|
|
102
|
+
spec: string
|
|
103
|
+
judgeTestTotal: number
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const SHA_RE = /^[0-9a-f]{40}$/
|
|
107
|
+
const IMAGE_DIGEST_RE = /^.+@sha256:[0-9a-f]{64}$/
|
|
108
|
+
|
|
109
|
+
function requireStringArray(dir: string, field: string, v: unknown, minLen: number): string[] {
|
|
110
|
+
if (!Array.isArray(v) || v.length < minLen || v.some((x) => typeof x !== 'string' || x.length === 0)) {
|
|
111
|
+
throw new Error(`${dir}/manifest.json: ${field} must be a string[] with ≥${minLen} non-empty entries`)
|
|
112
|
+
}
|
|
113
|
+
return v as string[]
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** Load + validate one instance dir (fail-loud on any shape drift). */
|
|
117
|
+
export function loadFactoryInstance(dir: string): LoadedFactoryInstance {
|
|
118
|
+
const manifestPath = join(dir, 'manifest.json')
|
|
119
|
+
let raw: unknown
|
|
120
|
+
try {
|
|
121
|
+
raw = JSON.parse(readFileSync(manifestPath, 'utf8'))
|
|
122
|
+
} catch (err) {
|
|
123
|
+
throw new Error(`${manifestPath}: unreadable or invalid JSON — ${(err as Error).message}`)
|
|
124
|
+
}
|
|
125
|
+
const m = raw as Record<string, unknown>
|
|
126
|
+
for (const field of [
|
|
127
|
+
'id',
|
|
128
|
+
'repo',
|
|
129
|
+
'repo_local_mirror',
|
|
130
|
+
'base_commit',
|
|
131
|
+
'judge_ref',
|
|
132
|
+
'spec_md',
|
|
133
|
+
'command_image',
|
|
134
|
+
'resolved_criterion',
|
|
135
|
+
] as const) {
|
|
136
|
+
if (typeof m[field] !== 'string' || (m[field] as string).length === 0) {
|
|
137
|
+
throw new Error(`${manifestPath}: missing or empty required string field '${field}'`)
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (!(m.id as string).startsWith('factory.')) {
|
|
141
|
+
throw new Error(`${manifestPath}: id '${m.id as string}' must start with 'factory.'`)
|
|
142
|
+
}
|
|
143
|
+
for (const field of ['base_commit', 'judge_ref'] as const) {
|
|
144
|
+
if (!SHA_RE.test(m[field] as string)) {
|
|
145
|
+
throw new Error(`${manifestPath}: ${field} '${m[field] as string}' is not a full 40-hex sha`)
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (!IMAGE_DIGEST_RE.test(m.command_image as string)) {
|
|
149
|
+
throw new Error(
|
|
150
|
+
`${manifestPath}: command_image must be pinned as '<image>@sha256:<64 hex>'`,
|
|
151
|
+
)
|
|
152
|
+
}
|
|
153
|
+
const judge_tests = requireStringArray(dir, 'judge_tests', m.judge_tests, 1)
|
|
154
|
+
const excluded_tests = requireStringArray(dir, 'excluded_tests', m.excluded_tests ?? [], 0)
|
|
155
|
+
const setup_cmds = requireStringArray(dir, 'setup_cmds', m.setup_cmds ?? [], 0)
|
|
156
|
+
const judge_cmds = requireStringArray(dir, 'judge_cmds', m.judge_cmds, 1)
|
|
157
|
+
if (typeof m.timeout_s !== 'number' || !Number.isFinite(m.timeout_s) || m.timeout_s <= 0) {
|
|
158
|
+
throw new Error(`${manifestPath}: timeout_s must be a positive number`)
|
|
159
|
+
}
|
|
160
|
+
const totalMatch = /passed\s*\/\s*(\d+)/.exec(m.resolved_criterion as string)
|
|
161
|
+
const judgeTestTotal = totalMatch ? Number(totalMatch[1]) : 0
|
|
162
|
+
if (judgeTestTotal <= 0) {
|
|
163
|
+
throw new Error(
|
|
164
|
+
`${manifestPath}: resolved_criterion '${m.resolved_criterion as string}' must state the calibrated ` +
|
|
165
|
+
`denominator as 'passed/<N>' — partial credit needs a stable divisor`,
|
|
166
|
+
)
|
|
167
|
+
}
|
|
168
|
+
const specPath = join(dir, m.spec_md as string)
|
|
169
|
+
let spec: string
|
|
170
|
+
try {
|
|
171
|
+
spec = readFileSync(specPath, 'utf8')
|
|
172
|
+
} catch (err) {
|
|
173
|
+
throw new Error(`${specPath}: unreadable spec — ${(err as Error).message}`)
|
|
174
|
+
}
|
|
175
|
+
if (spec.trim().length === 0) throw new Error(`${specPath}: spec is empty`)
|
|
176
|
+
return {
|
|
177
|
+
id: m.id as string,
|
|
178
|
+
repo: m.repo as string,
|
|
179
|
+
repo_local_mirror: m.repo_local_mirror as string,
|
|
180
|
+
base_commit: m.base_commit as string,
|
|
181
|
+
judge_ref: m.judge_ref as string,
|
|
182
|
+
spec_md: m.spec_md as string,
|
|
183
|
+
judge_tests,
|
|
184
|
+
excluded_tests,
|
|
185
|
+
command_image: m.command_image as string,
|
|
186
|
+
setup_cmds,
|
|
187
|
+
judge_cmds,
|
|
188
|
+
resolved_criterion: m.resolved_criterion as string,
|
|
189
|
+
timeout_s: m.timeout_s,
|
|
190
|
+
...(typeof m.worker_visible_paths_note === 'string' ? { worker_visible_paths_note: m.worker_visible_paths_note } : {}),
|
|
191
|
+
...(typeof m.runtime === 'string' ? { runtime: m.runtime } : {}),
|
|
192
|
+
...(m.calibration !== undefined ? { calibration: m.calibration as FactoryInstance['calibration'] } : {}),
|
|
193
|
+
dir,
|
|
194
|
+
spec,
|
|
195
|
+
judgeTestTotal,
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/** Load every `manifest.json` instance dir under `rootDir`. Fail-loud, ids must be unique. */
|
|
200
|
+
export function loadFactoryInstances(rootDir: string = FACTORY_INSTANCES_DIR): LoadedFactoryInstance[] {
|
|
201
|
+
const entries = readdirSync(rootDir, { withFileTypes: true })
|
|
202
|
+
.filter((e) => e.isDirectory())
|
|
203
|
+
.map((e) => join(rootDir, e.name))
|
|
204
|
+
.sort()
|
|
205
|
+
const instances = entries.map((dir) => loadFactoryInstance(dir))
|
|
206
|
+
if (instances.length === 0) throw new Error(`${rootDir}: no factory instance directories found`)
|
|
207
|
+
const ids = new Set<string>()
|
|
208
|
+
for (const inst of instances) {
|
|
209
|
+
if (ids.has(inst.id)) throw new Error(`${rootDir}: duplicate instance id ${inst.id}`)
|
|
210
|
+
ids.add(inst.id)
|
|
211
|
+
}
|
|
212
|
+
return instances
|
|
213
|
+
}
|
|
214
|
+
|
|
82
215
|
/** Per-instance worker-session token spend (instances with 0 workers are absent). */
|
|
83
216
|
export function loadWorkerTokens(): Record<string, WorkerTokens> {
|
|
84
217
|
return JSON.parse(readFixture('worker-tokens.json')) as Record<string, WorkerTokens>
|