stablyai/orca · warning · Error
Timed out polling renderer diagnostics after ${pollTimeoutMs
Error message
Timed out polling renderer diagnostics after ${pollTimeoutMs}ms. What it means
pollRendererDiagnostics races a page.evaluate that collects renderer diagnostics against a 2500ms deadline. It throws when the read does not settle in time, which is the expected signature of the Wayland GPU stall freezing renderer protocol calls. Note collectRendererDiagnostics wraps this call in try/catch and returns { error: message } rather than propagating, so the throw surfaces as a diagnostic field, not a crash.
Source
Thrown at config/scripts/linux-wayland-renderer-diagnostics.mjs:17
const pollTimeoutMs = 2_500
function delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms))
}
async function pollRendererDiagnostics(read) {
const readPromise = Promise.resolve().then(read)
readPromise.catch(() => undefined)
// Why: the Wayland GPU stall can freeze renderer protocol calls, so
// diagnostics need a short deadline too.
const result = await Promise.race([
readPromise.then((value) => ({ timedOut: false, value })),
delay(pollTimeoutMs).then(() => ({ timedOut: true, value: null }))
])
if (result.timedOut) {
throw new Error(`Timed out polling renderer diagnostics after ${pollTimeoutMs}ms.`)
}
return result.value
}
export async function collectRendererDiagnostics(page) {
if (!page) {
return null
}
try {
return await pollRendererDiagnostics(() =>
page.evaluate(async () => {
const timed = (label, promise) =>
Promise.race([
Promise.resolve(promise).then(
(value) => ({ value }),
(error) => ({
error: error instanceof Error ? error.message : String(error)
})View on GitHub (pinned to 1136503c6a)
Solutions
- Treat this as a symptom of the GPU wedge — collectRendererDiagnostics already degrades gracefully and returns the error field.
- Investigate the GPU/renderer stall root cause (this error is the detector, not the bug).
- If diagnostics legitimately need more time, raise pollTimeoutMs, but prefer fixing the stall.
Defensive patterns
Strategy: try-catch
Try / catch
try {
return await pollRendererDiagnostics(read)
} catch (error) {
return { error: error instanceof Error ? error.message : String(error) }
} Prevention
- Treat the diagnostics timeout as a GPU-stall signal, not a diagnostics bug — collectRendererDiagnostics already degrades to an error field.
- Investigate the underlying Wayland GPU wedge rather than suppressing this error.
When it happens
Trigger: page.evaluate hangs past 2500ms because the renderer/GPU process is wedged; the diagnostics collection itself blocked.
Common situations: Wayland GPU process stall in CI; renderer frozen on a heavy synchronous operation; the diagnostics page.evaluate hit its own internal 1s sub-timeouts and still overshot.
Understand the failure class
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
Related errors
- Timed out polling ${label} after ${pollTimeoutMs}ms.
- Timed out during ${label} after ${timeoutMs}ms.
- Timed out waiting for ${label}; last value: ${JSON.stringify
- Base run has --disable-gpu; hardware acceleration is disable
- Expected hardware acceleration to remain enabled, but --disa
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/72c2a6d1234db261.
Report an issue: GitHub.