Skip to content

fix(runtime): disable Playwright process signal handlers - #19

Draft
cursor[bot] wants to merge 1 commit into
mainfrom
cursor/high-severity-issues-b180
Draft

fix(runtime): disable Playwright process signal handlers#19
cursor[bot] wants to merge 1 commit into
mainfrom
cursor/high-severity-issues-b180

Conversation

@cursor

@cursor cursor Bot commented Aug 25, 2026

Copy link
Copy Markdown

Bug and impact

After the first createSession, Playwright registers default SIGINT/SIGTERM handlers (handleSIGINT/handleSIGTERM default true). On Ctrl+C / SIGINT those handlers close Chromium and then call process.exit(130), racing companion/MCP closeGracefully (runtime.shutdownapp.closeexit(0)). The HTTP server may not drain; exit is unclean; this compounds dead-browser / orphan races during daemon stop.

Trigger: create at least one session (browser launched), then SIGINT the companion process.

Root cause

BrowserRuntime.launchBrowser called chromium.launch / webkit.launch with only headless, leaving Playwright process-signal ownership enabled. Playwright’s own embedded MCP launcher sets handleSIGINT: false / handleSIGTERM: false for the same reason.

Fix

Pass handleSIGINT: false, handleSIGTERM: false, and handleSIGHUP: false on both Chromium and WebKit launches so companion/MCP own lifecycle.

Validation

  • pnpm --filter @webchain/runtime test — 27 passed (2 new launch-option assertions)
  • pnpm --filter @webchain/runtime typecheck — green

Distinct from #10#18

#12/#15 address companion/runtime shutdown ordering and Promise.allSettled; neither disables Playwright’s process signal handlers (verified on those branches).

Open in Web View Automation 

Playwright defaults handleSIGINT/TERM to true, so after createSession it
registers handlers that close Chromium and process.exit(130) on SIGINT,
racing companion/MCP graceful shutdown. Own lifecycle like Playwright's
embedded MCP launcher.

Co-authored-by: esadrianno <esadrianno@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant