arena: live-web episodes get one process each -- a single hang was poisoning whole rounds

AssistantBench pages make BrowserGym's obs extraction slow and flaky (context-destroyed
retries, unmarked frames); one step-hang kill corrupted process-wide playwright state
and every later episode instant-failed as infra. supervisor --isolate spawns one task
per process, containing the blast radius. Step deadline raised to 150s for live pages.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WsbS5x2rYsMDxP2kW3qqmQ
This commit is contained in:
ciregenz
2026-08-10 21:41:26 -07:00
co-authored by Claude Fable 5
parent c7b0982acc
commit 3ea7b93428
+5 -1
View File
@@ -91,6 +91,9 @@ def main() -> None:
# Resume window: episodes recorded after this epoch count as done, so a restarted supervisor
# keeps the finished work of the run it replaces instead of re-running all 125.
ap.add_argument("--since", type=float, default=0.0)
# Live-web suites corrupt process-wide playwright state on a single hang; one task per process
# contains the blast radius (measured: val.5 hang -> every later episode instant-failed).
ap.add_argument("--isolate", action="store_true")
args = ap.parse_args()
args.log = args.log or f"/tmp/supervise_{args.arm}.log"
@@ -102,7 +105,8 @@ def main() -> None:
if not remaining:
break
print(f"[supervisor] round {rnd}: {len(remaining)} tasks remaining", flush=True)
proc = spawn(args.arm, remaining, args)
batch = remaining[:1] if args.isolate else remaining
proc = spawn(args.arm, batch, args)
last_size = path.stat().st_size if path.exists() else 0
last_change = time.time()
while proc.poll() is None: