Applies findings from the third simplify pass:
1. \`cliArgv\` is a module-level const, not a function — prebuiltCli is
read once at module init and never mutated, so the per-spawn function
allocation was pure overhead.
2. Help-snapshot failures surface via \`Effect.fail\` instead of \`throw\`,
symmetric with the \`Effect.fail\` already inside the partition above.
Keeps the failure typed in the Effect channel rather than as a defect.
3. \`prebuild-test-cli.ts\` skips the build when the binary is already
newer than every file in src/ — saves the 2.8s rebuild cost on every
subsequent invocation. Pass --force to bypass.
4. \`prebuild-test-cli.ts\` verifies the built binary is executable before
symlinking — catches a silently-failed build leaving stale output
instead of letting tests fail with confusing exec errors later.
Verified: 331/331 CLI tests pass; typecheck clean; skip-if-fresh + --force
behave as documented.
\`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.
Convert the first provider env/config/filtering tests to Effect-aware instance fixtures while keeping behavior unchanged and documenting neutral timing.