PR: https://git.cafe/pingdotgg/t3code/pulls/21902 GitHub: pingdotgg/t3code#21902 Head: 365934975c7d5f480c9498c8cb9b8b3fd825d137 Baseline: github/main 955e2bfbb5c092c54ad795c8d379fec99702a6b5 Linux Boat VM; isolated dev state; only one dev server at a time. Browser client: repository Playwright, /usr/bin/google-chrome. Server preview: T3-managed chrome-headless-shell 156.0.8078.70, production flags, explicit VM sandbox opt-out. Project added through Local folder UI; real Codex gpt-6.1-sol turns submitted through composer using local proxy. Actual site: https://webglsamples.org/aquarium/aquarium.html (default 500 fish). No app fixtures, replay provider, or mocked service used. CPU is the whole server-preview Chromium process tree, percentage of one core, over eight-second windows; Linux CLK_TCK=100. Client Chrome and Codex are excluded. The first exploratory baseline sample was too early and discarded. The corrected baseline below explicitly waited 80 seconds without a viewer or provider action. {"label":"main-corrected","start":"2026-11-01T05:09:16.429Z","note":"no viewer, no provider actions during 80-second observation"} {"label":"main-corrected-initial","at":"2026-11-01T05:09:24.472Z","seconds":8.012,"cpuPercent":707.6884672990515,"pids":[27006,27008,27009,27026,27028,27074]} {"label":"main-corrected","elapsed":40,"at":"2026-11-01T05:09:56.515Z"} {"label":"main-corrected-72-to-80-seconds","at":"2026-11-01T05:10:36.615Z","seconds":8.013,"cpuPercent":689.7541495070511,"pids":[27006,27008,27009,27026,27028,27074]} {"label":"pr-head","start":"2026-11-01T05:12:29.424Z","note":"no viewer, no provider actions during 80-second observation"} {"label":"pr-head-initial","at":"2026-11-01T05:12:37.490Z","seconds":8.013,"cpuPercent":693.373268438787,"pids":[30600,30602,30603,30619,30622,30666]} {"label":"pr-head","elapsed":40,"at":"2026-11-01T05:13:09.514Z"} {"label":"pr-head-72-to-80-seconds","at":"2026-11-01T05:13:49.576Z","seconds":8.007,"cpuPercent":0,"pids":[30600,30602,30603,30619,30622,30666]} {"label":"pr-recording-after-60s","at":"2026-11-01T05:17:37.070Z","seconds":8.012,"cpuPercent":471.2930604093859,"pids":[30600,30602,30603,30619,30622,30666]} {"label":"pr-viewer-attached","start":"2026-11-01T05:19:53.933Z","note":"viewer attached; no provider actions during 80-second observation"} {"label":"pr-viewer-attached-initial","at":"2026-11-01T05:20:01.969Z","seconds":8.013,"cpuPercent":596.9050293273431,"pids":[30600,30602,30603,30619,30622,30666]} {"label":"pr-viewer-attached","elapsed":40,"at":"2026-11-01T05:20:34.010Z"} {"label":"pr-viewer-attached-72-to-80-seconds","at":"2026-11-01T05:21:14.076Z","seconds":8.012,"cpuPercent":594.3584623065401,"pids":[30600,30602,30603,30619,30622,30666]} First action after idle: Codex preview_snapshot(save=true), followed by preview_evaluate. Passive diagnostic result from the actual aquarium page: {"state":"visible","focused":true,"elapsedSeconds":149,"events":[{"ms":60009,"state":"hidden"},{"ms":118536,"state":"visible"}],"initial":[{"s":1,"state":"visible","frames":12},{"s":2,"state":"visible","frames":11},{"s":3,"state":"visible","frames":11}],"aroundHide":[{"s":57,"state":"visible","frames":22},{"s":58,"state":"visible","frames":23},{"s":59,"state":"visible","frames":19},{"s":60,"state":"hidden","frames":19},{"s":61,"state":"hidden","frames":0},{"s":62,"state":"hidden","frames":0},{"s":63,"state":"hidden","frames":0},{"s":64,"state":"hidden","frames":0}],"last":[{"s":144,"state":"visible","frames":19},{"s":145,"state":"visible","frames":16},{"s":146,"state":"visible","frames":16},{"s":147,"state":"visible","frames":16},{"s":148,"state":"visible","frames":20}]} The timer continued producing samples while animation frames were paused. The first restored screenshot contains the aquarium, not a blank capture. Recording started through Codex preview_recording_start at 2026-11-01T05:16:04.706Z, with no viewer. Counter read before recording_stop: samples at elapsed seconds 350–357 were all visible and rendered 11–14 frames each. No visibility transition occurred during the recording. preview_recording_stop returned a 34,981,296-byte MP4. ffprobe: 127.645433 seconds, 2560x1600. Inspected playback of a six-second excerpt from 75 seconds into the recording; animated fish and FPS counter remained visible. Focused checks on task-owned Blacksmith worker (worker id omitted): vp i node apps/server/node_modules/playwright-core/cli.js install chromium --with-deps vp test run apps/server/src/preview/ServerBrowser.test.ts apps/server/src/preview/ServerBrowserContexts.test.ts apps/server/src/preview/ServerBrowserPage.test.ts => 3 files passed, 89 tests passed. vp run check:changed 575579d68ac4bae09f8426a345d4a3eac1e90c67 => format, lint, unused patches, knip, graphql, typecheck, and scoped tests passed. The worker initially lacked Chromium and git ancestry. Installed the browser and fetched the PR history, then the checks passed. No source changes were made. {"label":"pr-all-viewers-detached","start":"2026-11-01T05:21:40.754Z","note":"no viewer, no provider actions during 80-second observation"} {"label":"pr-all-viewers-detached-initial","at":"2026-11-01T05:21:48.790Z","seconds":8.011,"cpuPercent":684.1842466608415,"pids":[30600,30602,30603,30619,30622,30666]} {"label":"pr-all-viewers-detached","elapsed":40,"at":"2026-11-01T05:22:20.831Z"} {"label":"pr-all-viewers-detached-72-to-80-seconds","at":"2026-11-01T05:23:00.891Z","seconds":8.01,"cpuPercent":0,"pids":[30600,30602,30603,30619,30622,30666]} {"label":"pr-viewer-only-wake","at":"2026-11-01T05:23:32.713Z","seconds":8.011,"cpuPercent":568.4683560104856,"pids":[30600,30602,30603,30619,30622,30666]} Viewer path: displayed aquarium in browser panel for >80s without provider actions; animation continued. Hiding the side panel left a floating viewer, so dismissed that as well. Confirmed zero client canvas elements at 05:21:40.659Z, then waited another 80s; CPU fell to 0%. At 05:23:13.674Z reopened the same panel without any provider turn/action. Aquarium restored and animated. Took control through the UI, then clicked 100 fish in the streamed page; the selection changed from 500 (red) to 100 (red), and the scene contained fewer fish. Captured actual client video of reopening and taking control. Not exercised: native Electron desktop host, macOS/Windows, iOS/Android, packaged release, remote relay/tunnel, and runtime failure injection through the full client. Automated focused tests cover desktop exclusion and failure recovery but are not a native-client verification.