PR 29885 real-environment verification, Linux Boat VM, 2026-11-03 main: 61c3794c32 (github/main fetched this turn) PR: 1dabbeeb0c1366d6487e235ecf5046051f0aaa3b (exact contributor head) No app source edits, mocks, fixtures, or demo data. Started each checkout with vp i, then background vp run dev. Only one serving dev environment at a time; separate .t3 directories. Created /home/user/preview-check git repo and added it through Add project > Local folder. Selected Codex GPT-6.1-Sol in the composer and completed real provider turns. Drove web UI with repo playwright-core and /usr/bin/google-chrome. Failure stimulus: Attached Node inspector, breakpoint at installPdfDocumentNavigation(cdp), after the real Chrome page and CDP session existed. Detached that real CDP session and resumed. No methods mocked or source rewritten. Observed server error: cdpSession.send: Target page, context or browser has been closed. main, shared/default profile, UI Browser open: context.pages(): two about:blank pages, both open. failed page.isClosed(): false. The client retry succeeded but left the failed page behind. PR, same shared/default profile path: failed page.isClosed(): true. context.pages(): one about:blank page from successful client retry. Shared context stayed usable; https://example.com navigation succeeded. PR, real Codex preview_open call with default profile: preview_open({url:"https://example.com",open:false,reuseExistingTab:false}) returned the exact CDP setup error; failed page closed, existing shared page survived. The web client supplies a default profile, so this call used its shared context. PR, real Codex isolated incognito path: preview_open({profileId:"incognito",url:"https://example.com",open:false,reuseExistingTab:false}) returned the setup error. failed page.isClosed(): true; context.pages(): []; browser.contexts().length: 0. Subsequent same provider call succeeded and preview_snapshot returned title Example Domain. Harness caveat: An earlier incognito attempt had overlapping inspector helpers detach twice, causing a harness-induced unhandled rejection. Restarted same persisted dev state, fixed helper to handle one breakpoint and catch detach rejection, then repeated successfully. This interruption is visible in the app conversation and is not claimed as a PR defect. Checks: blacksmith-check task-owned worker: vp i && vp test run apps/server/src/preview/ServerBrowser.test.ts 53/53 tests passed. Worker stopped. GitHub PR checks inspected this turn: all active checks passed. No source changes, commits, or pushes required. Not verified: Desktop Electron CDP relay release/listener cleanup, macOS/Windows, native iOS/Android, remote relay/tunnel mode, spontaneous timing race without debugger stimulus. This verifies real resource cleanup on the forced setup exception, not race frequency. Neighbor UI checks: navigation, refresh, close/reopen passed in the real web client.