code-v7: + write_file, non-regression, zero benefit
Same model, different harness. — code-v6 plus exactly one tool; the zero-score autopsy that motivated code-v8.
One-gene change: one new tool
Relative to code-v6, code-v7 adds exactly write_file to the tool list — so the −2pt net and the 12 flips can be read as noise around a single-gene edit.
41 vs 43: 12 flips, within noise
Both-pass 36, both-fail 49 (hardcore); 7 regressions vs 5 improvements with a consistent signature — v7 edited less and shelled more, exploration got stuck, not write_file's fault.
Improvements — 5 tasks (vs v6)
Regressions — 7 tasks (vs v6)
Compliant in name, substitute in practice
4103 calls: run_command 3101 (100/100) / read_file 834 (97/100) / edit_file 147 (77/100) / apply_patch 21 (10/100) / write_file 0 / read_output 0. All 41 passing tasks contained edit calls (77 total, ~1.9/task) — writing to disk is a necessary condition for passing.
59 zero-score tasks: 22 never wrote, 37 wrote and failed
By repo: matplotlib 8/8, mwaskom 2/2, pylint 8/9, django 7/10, sympy 7/10, sphinx 6/10, pytest 6/11, astropy 5/10, pydata 4/11, sklearn 4/11, psf 2/7, pallets 0/1.
16 hit the budget ceiling (llm 51 rounds, ntools 42~55): "read-only loop" — e.g. sklearn-14087: 36×run + 14×read, root cause identified but submitted text only.
6 stopped early (ntools<35): requests-6028, sklearn-25102, sphinx-11510/9229, sympy-18698, pylint-4970.
apply_patch misuse: matplotlib-24149 passed unified-diff, sphinx-8595 3× missing >>>>>>> REPLACE, xarray-6992 all 4 failed.
Env issues: astropy-13236 (erfa/numpy install), xarray-3993/6992 30s timeout, matplotlib-24149/8595 OSError: Argument list too long: 'docker'.
Zero-score group 38/59 hit ≥50 calls (pass group only 15/41); mean llm rounds 43.8 vs 35.9.
v6 → v7: fewer edits, same shell
Total calls 4184 → 4103 (−2%), run flat, edit 193 → 147 with coverage 88 → 77 tasks. Conclusion: +write_file non-regression holds, but zero benefit.
| Metric | code-v6 | code-v7 | Δ |
|---|---|---|---|
| Pass | 43 (56 fail + 3 err) | 41 (59 fail) | −2pt · noise |
| Total tool calls | 4184 | 4103 | −2% |
| run_command | 3109 | 3101 (100/100) | flat |
| read_file | 859 | 834 (97/100) | −25 |
| edit_file | 193 | 147 (77/100) | −46 · coverage 88→77 |
| apply_patch | 23 | 21 (10/100) | −2 |
| write_file | n/a | 0/100 | zero adoption |
T1 / T2 / T3 by ROI
- T1 · tools.enabled += grep_search, glob_files (planned code-v8): ~half of run_command is exploration; 3 bypass-reads and 7 regressions (incl. sympy-12419 read collapse) all trace to inefficient search → budget burned → zero writes. Expected: exploration steps halved; most salvageable zero-write tasks convert to edits. Validate: run_command ratio, first-edit round median, zero-write count.
- T2 · enforce edit→verify micro-loop (planned code-v9: verification.enabled=true or prompt "apply small patch then run targeted tests"): 38/59 zero-score hit the ceiling while the pass group averages 8 fewer rounds; sklearn-14087-class "analysis correct, no write" is directly convertible. Validate: first-edit round, pytest-within-3-rounds ratio, both-fail 49 narrowing.
- T3 · fix apply_patch schema comprehension + give write_file a real role (planned code-v10: minimal SEARCH/REPLACE few-shot, write_file scoped to create/full-rewrite): 8 apply failures all format issues; write_file 0/100 means self-description didn't move habits. Validate: apply error count, write_file adoption, multi-file (django/sphinx) pass rate.
Artifacts and code locations
Baseline: jobs/eval100-code-v6-1/ (43×1.0 / 56×0.0 / 3 errors, mean ~0.43; eval100-code-v6 with only 19 completed excluded)
# harness gene (the only difference in this experiment) harnesses/code-v7.yaml = code-v6 + tools.enabled += write_file # tool list: [run_command, read_file, apply_patch, edit_file] → + write_file # counting rules authoritative = tool.start # llm.end.messages (llm_summary) keeps ~70%, intent sampling only # related code src/agent_runtime/tools/tools.py:77-336 # tool prefer definitions
For run commands, defer to the repo README and the actual artifacts under jobs/; this page only shows the gene definition and counting rules from the report.