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) : null

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Ensure the terminal pane stays mounted through the whole scrollback assertion (no tab switch / PTY close).
  2. Re-run the assertion after confirming the pane is stable.
  3. 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

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


AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12). Data as JSON: /api/errors/625ca22f59bec845. Report an issue: GitHub.