stablyai/orca · error · Error

The native IBus Hangul E2E runner requires Linux/X11

Error message

The native IBus Hangul E2E runner requires Linux/X11

What it means

runOuter() is the entry point of the native IBus Hangul E2E runner. The very first guard rejects non-Linux hosts because the entire flow depends on X11, IBus, gsettings, xfwm4, and xvfb-run — none of which are available on macOS/Windows. Failing fast prevents confusing downstream spawn errors.

Source

Thrown at config/scripts/run-terminal-ibus-hangul-e2e.mjs:247

    )
  }

  if (evidence.ibusGroupAfterCleanup.length > 0) {
    throw new Error(
      `Owned IBus processes survived cleanup: ${evidence.ibusGroupAfterCleanup.join('; ')}`
    )
  }
  if (evidence.windowManagerGroupAfterCleanup.length > 0) {
    throw new Error(
      `Owned window-manager processes survived cleanup: ${evidence.windowManagerGroupAfterCleanup.join('; ')}`
    )
  }
  return testExitCode
}

async function runOuter() {
  if (process.platform !== 'linux') {
    throw new Error('The native IBus Hangul E2E runner requires Linux/X11')
  }

  const evidenceDir = mkdtempSync(path.join(os.tmpdir(), 'orca-terminal-ime-e2e-'))
  const runtimeDir = path.join(evidenceDir, 'runtime')
  mkdirSync(runtimeDir, { mode: 0o700 })
  mkdirSync(path.join(evidenceDir, 'config'))
  mkdirSync(path.join(evidenceDir, 'cache'))
  console.error(`[terminal-ime] evidence directory: ${evidenceDir}`)

  const sessionProcess = spawn(
    'xvfb-run',
    [
      '--auto-servernum',
      'dbus-run-session',
      '--',
      process.execPath,
      scriptPath,
      insideSessionFlag,

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Run only on Linux: use a Linux CI runner, or guard the package.json script with a platform check.
  2. If developing on another OS, run the test inside a Linux container/VM.
  3. Wire the runner behind a `uname`/platform gate in the calling task so it is skipped on non-Linux.

Example fix

// package.json
"test:e2e:terminal-ibus-hangul-native": "node -e "process.platform==='linux' && require('child_process').execSync('node config/scripts/run-terminal-ibus-hangul-e2e.mjs',{stdio:'inherit'})""
Defensive patterns

Strategy: validation

Validate before calling

if (process.platform !== 'linux') {
  console.error('Skipping native IBus Hangul E2E: requires Linux/X11')
  process.exit(0) // skip, not fail
}

Type guard

function isLinux(platform: string): platform is 'linux' {
  return platform === 'linux'
}

Prevention

When it happens

Trigger: Invoking the native IBus Hangul E2E script on macOS or Windows (process.platform === 'darwin' or 'win32').

Common situations: A developer on macOS runs the wrong pnpm task; CI matrix lacks a linux leg guard; the universal test script dispatches this runner on every OS.

Related errors


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