{"record":{"id":"00e6299286e130e6","repo":"stablyai/orca","slug":"gpu-crash-evidence-appeared-in-stderr-gpucrashl","errorCode":null,"errorMessage":"GPU crash evidence appeared in stderr:\n${gpuCrashLines.join('\\n')}","messagePattern":"GPU crash evidence appeared in stderr:\n(.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"config/scripts/verify-linux-wayland-gpu-sandbox.mjs","lineNumber":303,"sourceCode":"      'renderer domcontentloaded',\n      () => page.waitForLoadState('domcontentloaded'),\n      rendererSetupTimeoutMs\n    )\n    logPhase('window.loaded')\n    const ptyId = await setupTerminal(page, repoPath, logPhase)\n    terminalExerciseStarted = true\n    logPhase('exercise.start')\n    const scroll = await assertScrollbackBufferWorks(page, ptyId, runId, logPhase)\n    const typedMarkers = await assertKeyboardInputWorks(page, ptyId, repoPath, runId, logPhase)\n    const gpuCrashLines = stderrLines.filter((line) => gpuCrashPattern.test(line))\n\n    if (mode === 'expect-repro') {\n      throw new MissingReproductionError(\n        'Terminal input and scroll stayed responsive without the fix on this host.'\n      )\n    }\n    if (gpuCrashLines.length > 0) {\n      throw new Error(`GPU crash evidence appeared in stderr:\\n${gpuCrashLines.join('\\n')}`)\n    }\n\n    console.log(\n      JSON.stringify(\n        {\n          mode,\n          phase: validationState.phase,\n          waylandDisplay: process.env.WAYLAND_DISPLAY ?? null,\n          xdgSessionType: process.env.XDG_SESSION_TYPE ?? null,\n          switches: commandLineSwitches,\n          scroll,\n          typedMarkers,\n          gpuCrashLines\n        },\n        null,\n        2\n      )\n    )","sourceCodeStart":285,"sourceCodeEnd":321,"githubUrl":"https://github.com/stablyai/orca/blob/1136503c6a231a16dce8f921f6fadb63d181e8db/config/scripts/verify-linux-wayland-gpu-sandbox.mjs#L285-L321","documentation":"Thrown by the Linux Wayland GPU sandbox verification script after completing terminal input and scrollback exercises, when the collected Electron stderr lines match the gpuCrashPattern regex. The pattern (verify-linux-wayland-gpu-sandbox.mjs:28-29) matches known GPU process crash signatures: 'GPU process exited unexpectedly', 'GPU process isn't usable', 'gpu_data_manager', or exit code 8704. This indicates the GPU sandbox crashed during the terminal exercise, which is a real defect.","triggerScenarios":"Running the script in --mode=verify-fix (the default) where the terminal exercises complete but GPU crash signatures are present in Electron's stderr output. The crash can also occur in expect-repro mode, but there the MissingReproductionError at line 298 fires first if the terminal stayed responsive.","commonSituations":"A regression in the GPU sandbox command-line switches (--no-sandbox, --disable-gpu-sandbox, etc.) that are passed to the Electron app; a Mesa or GPU driver update that re-introduces the crash; a Chromium/Electron version bump that changes GPU process lifecycle behavior; running under wlroots compositors with specific GPU hardware (Intel/AMD/NVIDIA) where the sandbox isolation interacts badly with the driver.","solutions":["Inspect the full GPU crash lines from the error message to identify which crash signature matched — this narrows the root cause to a specific GPU subsystem.","Check whether the GPU sandbox command-line switches in the app launch configuration were changed recently (git diff the relevant config).","Verify the Electron/Chromium version is compatible with the GPU sandbox switches being used — an Electron upgrade may require updated flags.","Test with --mode=expect-repro on the same host to confirm the bug reproduces without the fix, proving the fix is the causal change.","If using a container or VM, ensure GPU acceleration passthrough is functional; a broken GPU passthrough can produce misleading crash signatures."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"// GPU crashes are environment-dependent and may be transient.\n// The script's own catch block already collects diagnostics.\n// External callers should log the crash evidence and fail the build.\ntry {\n  await runVerification({ mode: 'verify-fix' })\n} catch (error) {\n  if (error.message.includes('GPU crash evidence appeared in stderr')) {\n    console.error('GPU sandbox regression detected:', error.message)\n    // Surface the crash lines for triage; do not retry — this is a real defect.\n    process.exit(1)\n  }\n  throw error\n}","preventionTips":["Pin the Electron/Chromium version in CI to match production to avoid GPU sandbox regressions from version drift.","Capture the full Electron stderr log during the verification run so GPU crash lines can be correlated with specific terminal exercises.","Maintain a known-good GPU driver/Mesa version matrix for CI runners and alert when a runner's driver is updated."],"tags":["wayland","gpu-sandbox","electron","gpu-crash","ci-gate","terminal"],"backgroundTag":null,"analyzedSha":"1136503c6a231a16dce8f921f6fadb63d181e8db","analyzedAt":"2026-08-12T23:15:58.167Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}