* v1.42.1.1 fix wave: browse launch hardening (2 bug fixes + headed exit-code wiring)
Bundles two browse launch-path bug fixes plus the missing exit-code wiring
that made the second fix actually work end-to-end.
PR #1617 — Chromium sandbox policy at all 3 launch sites
- shouldEnableChromiumSandbox() centralizes the Win32 / CI / CONTAINER /
root heuristic that previously lived only in the headless launch path.
- launch(), launchHeaded() / launchPersistentContext(), and handoff() now
share the policy so Playwright stops auto-adding --no-sandbox on every
headed launch and the yellow "unsupported command-line flag" infobar
disappears on macOS and Linux dev.
PR #1626 — clean Cmd+Q stops triggering supervisor respawn
- resolveDisconnectCause(browser) reads the underlying Chromium
ChildProcess exitCode + signalCode (with a 1s wait for an async exit
event) to distinguish clean user-quit from crash.
- handleChromiumDisconnect(browser) dispatches the headless launch()
disconnect path: clean → exit(0), crash → exit(1).
- launchHeaded() disconnect handler resolves cause inline and computes
exitCode = 0 (clean) | 2 (crash) before forwarding to onDisconnect.
- handoff() disconnect handler uses the same shared helper.
Codex-caught propagation fix (this commit, not in either source PR)
- BrowserManager.onDisconnect signature widened to accept an exitCode
argument. Without this, launchHeaded's locally-computed exit code was
dropped before reaching server.ts.
- browse/src/server.ts:688 — onDisconnect callback now forwards the
resolved code: (code) => activeShutdown?.(code ?? 2). The ?? 2
preserves legacy crash semantics for callers that invoke onDisconnect
without an explicit code.
Tests
- browse/test/browser-manager-unit.test.ts goes from 2 → 17 tests.
- 6 new tests pin shouldEnableChromiumSandbox across darwin / linux /
win32 / CI / CONTAINER / root.
- 7 new tests pin resolveDisconnectCause across already-exited,
async-exit, SIGSEGV, SIGKILL, and null-browser.
- 2 new tests (this commit) pin the onDisconnect(exitCode) propagation
contract including the exact server.ts forwarding callback shape so a
refactor that drops the forward fails CI before the user-visible
respawn bug returns.
Refs PRs #1617, #1626; companion gbrowser PR #23.
* chore: bump version v1.42.1.1 → v1.42.2.0
User-requested rebump (claims v1.42.2.0 slot on the queue).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>