mirror of
https://github.com/open-jarvis/OpenJarvis.git
synced 2026-07-28 05:12:26 +00:00
Concurrent hybrid SWE cells were colliding on the swebench-harness shared cache because run_id was keyed only on instance_id (`oj-<instance_id>`). The second cell to score the same task hit "1 instances already run, skipping..." and silently scored 0 with `reason: no_report` (or read the first cell's verdict on a write race). Previously papered over by manual cache wipes + rescores; this is the root-cause fix. run_id is now `oj-<cell>-<instance>` when a cell name is supplied, falling back to the legacy `oj-<instance>` form for single-cell callers. Same-cell resumes still hit the harness cache (run_id is deterministic for a given cell + instance). Cell name is sanitized to filesystem-safe `[A-Za-z0-9._-]+` since it lands in both the `logs/run_evaluation/<run_id>/...` subtree and the `<model>.<run_id>.json` summary filename. Plumbed cell_name through `runner._process -> score -> _score_swebench -> SWEBenchHarnessScorer -> _run_harness -> _build_run_id`. Regression test under `tests/agents/hybrid/test_swebench_run_id_isolation.py` pins: (a) different cells produce different run_ids, (b) same cell is stable, (c) legacy `None` cell preserves old format, (d) hostile cell names sanitize cleanly, (e) end-to-end wiring from scorer constructor through to the run_id. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>