Symptom
Pool filler reports POOL LOW! 1 tokens but fails to generate new tokens. Every attempt fails with:
fast_runner.py FAILED (rc=1)
stderr: nodriver.core.connection.ProtocolException: Failed to open new tab - no browser is open [code: -32000]
Pool reaches 5 consecutive failures then aborts. OCI circuit breaker opens after 3 failures (cooldown 521s).
Root Cause
The fast_runner.py tries to connect to Chrome on port 9336 via CDP. When Chrome on port 9336 is not running or not responsive, the connection fails. The runner says Rotator Chrome already alive on port 9336, reusing... but then fails to open a new tab = Chrome process exists but is in a broken state (crashed renderer, locked profile, etc.).
Evidence
[2026-03-29 00:34:39] runner: Rotator Chrome already alive on port 9336, reusing...
[2026-03-29 00:34:39] runner: successfully removed temp profile /var/folders/4k/...
[2026-03-29 00:34:39] fast_runner.py FAILED (rc=1)
[2026-03-29 00:34:39] stderr: ProtocolException: Failed to open new tab - no browser is open [code: -32000]
[2026-03-29 00:34:39] Failure 1/3, backoff 30s...
# (repeats 3x then circuit breaker opens)
Current OCI circuit breaker state:
{"failures": 2, "last_failure": 1774740735.069933}
Fix Required
- Chrome health check before reuse: Before declaring Chrome on port 9336 as
alive, actually verify it can open a tab (CDP ping)
- Auto-recovery: If tab open fails with -32000, kill Chrome on port 9336 and restart it fresh
- Circuit breaker reset: Add a manual or time-based circuit breaker reset mechanism
- Fallback: If both local and OCI fail, delay and retry instead of hard abort
Immediate Workaround
# Kill Chrome on port 9336
pkill -f 'remote-debugging-port=9336'
# Reset circuit breaker
echo '{"failures": 0}' > ~/.config/opencode/oci_circuit_breaker.json
# Restart pool filler
launchctl kickstart -k gui/$(id -u)/com.sin.opencode-pool-filler
Labels
bug, pool-filler, chrome, nodriver
Symptom
Pool filler reports
POOL LOW! 1 tokensbut fails to generate new tokens. Every attempt fails with:Pool reaches 5 consecutive failures then aborts. OCI circuit breaker opens after 3 failures (cooldown 521s).
Root Cause
The fast_runner.py tries to connect to Chrome on port 9336 via CDP. When Chrome on port 9336 is not running or not responsive, the connection fails. The runner says
Rotator Chrome already alive on port 9336, reusing...but then fails to open a new tab = Chrome process exists but is in a broken state (crashed renderer, locked profile, etc.).Evidence
Current OCI circuit breaker state:
{"failures": 2, "last_failure": 1774740735.069933}Fix Required
alive, actually verify it can open a tab (CDP ping)Immediate Workaround
Labels
bug, pool-filler, chrome, nodriver