stablyai/orca · error · Error
No active terminal pane for scrollback API scroll.
Error message
No active terminal pane for scrollback API scroll.
What it means
During the scrollback assertion, the scrollback API scroll step resolves the active terminal pane (same store → tab → pane manager walk as focusActiveTerminal) and throws if no pane exists before calling terminal.scrollLines(-10). It mirrors the focus guard because the scroll must target a live pane.
Source
Thrown at config/scripts/linux-wayland-terminal-exercise.mjs:286
// Why: headless Wayland does not provide a reliable native wheel path in CI,
// so verify xterm's scrollback buffer can move without bypassing the renderer.
await runWithTimeout(
'terminal scrollback API scroll',
() =>
page.evaluate(() => {
const store = window.__store
const state = store?.getState()
const worktreeId = state?.activeWorktreeId
const tabId =
state?.activeTabType === 'terminal'
? state.activeTabId
: worktreeId
? (state?.activeTabIdByWorktree?.[worktreeId] ?? null)
: null
const manager = tabId ? window.__paneManagers?.get(tabId) : null
const pane = manager?.getActivePane?.() ?? manager?.getPanes?.()[0] ?? null
if (!pane) {
throw new Error('No active terminal pane for scrollback API scroll.')
}
pane.terminal.scrollLines(-10)
}),
rendererActionTimeoutMs
)
logPhase('scroll.api-scroll-sent')
const after = await waitFor('terminal scrollback API response', () =>
page.evaluate((previousViewportY) => {
const store = window.__store
const state = store?.getState()
const worktreeId = state?.activeWorktreeId
const tabId =
state?.activeTabType === 'terminal'
? state.activeTabId
: worktreeId
? (state?.activeTabIdByWorktree?.[worktreeId] ?? null)
: null
const manager = tabId ? window.__paneManagers?.get(tabId) : nullView on GitHub (pinned to 1136503c6a)
Solutions
- Ensure the terminal pane stays mounted through the whole scrollback assertion (no tab switch / PTY close).
- Re-run the assertion after confirming the pane is stable.
- Check that activeTabType and activeTabId still point at the terminal tab at scroll time.
Defensive patterns
Strategy: type-guard
Validate before calling
const hasPane = await page.evaluate(() => {
const state = window.__store?.getState?.()
const tabId = state?.activeTabType === 'terminal' ? state.activeTabId : null
const manager = tabId ? window.__paneManagers?.get(tabId) : null
return Boolean(manager?.getActivePane?.() ?? manager?.getPanes?.()[0])
})
if (!hasPane) throw new Error('cannot scroll: no active terminal pane') Prevention
- Keep the terminal pane mounted through the entire scrollback assertion (no tab switch or PTY close).
- Re-verify activeTabType/activeTabId at scroll time if the GPU stall may have reset state.
When it happens
Trigger: The pane disappeared between the 'scrollable terminal buffer' check and the API scroll; the active tab/pane state changed mid-assertion; the pane manager no longer has the tab.
Common situations: Terminal pane unmounted during the assertion (e.g. PTY closed, tab switched); GPU wedge cleared and reset state; teardown racing the scroll.
Related errors
- Timed out polling ${label} after ${pollTimeoutMs}ms.
- Timed out waiting for ${label}; last value: ${JSON.stringify
- No active terminal pane to focus.
- Terminal input and scroll stayed responsive without the fix
- GPU crash evidence appeared in stderr: ${gpuCrashLines.join(
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/625ca22f59bec845.
Report an issue: GitHub.