stablyai/orca · error · Error

Missing ${entryPath}; run pnpm exec electron-vite build firs

Error message

Missing ${entryPath}; run pnpm exec electron-vite build first

What it means

Thrown by runBenchmark() when the built watchdog entry `out/main/main-thread-hang-watchdog-entry.js` does not exist (existsSync returns false). The benchmark forks/spawns this built artifact as the watchdog under test, so it must be produced by the Electron build before the benchmark can run.

Source

Thrown at config/scripts/hang-watchdog-memory-benchmark.mjs:365

      )
    }
    const line = result.stdout.split('\n').find((candidate) => candidate.startsWith(RESULT_PREFIX))
    if (line) {
      return { ...JSON.parse(line.slice(RESULT_PREFIX.length)), launchAttempts: attempt }
    }
    if (attempt === MAX_LAUNCH_ATTEMPTS || result.stderr || result.stdout) {
      throw new Error(`Electron trial did not report a result (status ${result.status})`)
    }
  }
  throw new Error('Electron trial exhausted launcher attempts')
}

function runBenchmark() {
  if (process.platform !== 'darwin') {
    throw new Error('The production watchdog is macOS-only; run this benchmark on macOS')
  }
  if (!existsSync(entryPath)) {
    throw new Error(`Missing ${entryPath}; run pnpm exec electron-vite build first`)
  }
  const options = parseArgs(process.argv.slice(2))
  const builtEntry = readFileSync(entryPath, 'utf8')
  const hasChildContract = builtEntry.includes('ORCA_HANG_WATCHDOG_PARENT_PID')
  const hasWorkerContract = builtEntry.includes('workerData') && builtEntry.includes('parentPort')
  if (
    (options.boundary === 'child' && !hasChildContract) ||
    (options.boundary === 'worker' && !hasWorkerContract)
  ) {
    throw new Error(
      `Built watchdog does not implement the requested ${options.boundary} boundary; rebuild the matching revision`
    )
  }
  const executable = electronPath()
  const results = Array.from({ length: options.trials }, () =>
    runTrial(executable, options.boundary)
  )
  const rssBytes = results.map((result) => result.rssBytes)

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Run `pnpm exec electron-vite build` first to produce out/main/main-thread-hang-watchdog-entry.js.
  2. Verify the path exists: `ls out/main/main-thread-hang-watchdog-entry.js`.
  3. If the build output path changed, update entryPath in the script to match.

Example fix

# before
node config/scripts/hang-watchdog-memory-benchmark.mjs --boundary child  # out/ missing
# after
pnpm exec electron-vite build && node config/scripts/hang-watchdog-memory-benchmark.mjs --boundary child
Defensive patterns

Strategy: validation

Validate before calling

import { existsSync } from 'node:fs'
if (!existsSync(entryPath)) {
  throw new Error(`run 'pnpm exec electron-vite build' first; missing ${entryPath}`)
}

Prevention

When it happens

Trigger: Running the benchmark before building, after `clean` wiped out/, on a fresh clone without a build step, or when electron-vite build failed silently.

Common situations: Fresh checkout, CI job that skips the build step, or a build configuration change that renamed/moved the output entry.

Related errors


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