From 3ea7b93428663eb78d9e7117e729aaddd276700c Mon Sep 17 00:00:00 2001 From: ciregenz Date: Mon, 10 Aug 2026 21:41:26 -0700 Subject: [PATCH] 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 Claude-Session: https://claude.ai/code/session_01WsbS5x2rYsMDxP2kW3qqmQ --- e2e/browser-v3/arena/supervisor.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/e2e/browser-v3/arena/supervisor.py b/e2e/browser-v3/arena/supervisor.py index 5aa0f9f0..55bbd7dd 100644 --- a/e2e/browser-v3/arena/supervisor.py +++ b/e2e/browser-v3/arena/supervisor.py @@ -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: