\`bun run --conditions=browser src/index.ts\` pays ~15s of JIT + plugin
init + DB migration per subprocess spawn in isolation mode. A pre-built
binary cuts that to ~5s — most of which is now the SQLite \`:memory:\`
migration that runs regardless of execution mode.
Adds \`script/prebuild-test-cli.ts\` which wraps the existing build.ts
with \`--single --skip-embed-web-ui --skip-install\`, then symlinks the
platform-specific output to \`dist/test-cli/bin/opencode\` so the
harness has a stable path.
The harness (test/lib/cli-process.ts) reads OPENCODE_TEST_CLI_PATH and
spawns the binary directly when set; falls back to dev mode otherwise.
Strictly opt-in — default behavior, CI, and local iteration are
unchanged. Anyone who wants the speedup runs:
bun script/prebuild-test-cli.ts
export OPENCODE_TEST_CLI_PATH="\$PWD/dist/test-cli/bin/opencode"
bun test test/cli/
Measured locally:
Dev mode (default): 29.9s (331 tests)
Binary mode: 22.1s (-26%, after one-time 2.8s build)
The win compounds as more subprocess tests are added — every new test
that hits DB migration saves ~10s vs dev mode.