SIGN IN SIGN UP

Catch async startup failures in CI smoke tests

Both --version smoke tests passed on Windows even though the binary
crashed for users: commander exits the process synchronously, before the
Parser.init promise has a chance to reject. Three changes to close the
gap:

- cli/scripts/smoke-binary.ts: portable script that spawns the binary,
  lets it run for 5s, kills it, and asserts the captured stdout/stderr
  doesn't contain earlyFatalHandler markers ("Fatal error during
  startup", "Internal error: tree-sitter.wasm not found", unhandled
  rejections, missing modules). Wired into the release-build smoke step
  for every platform and into the freebuff-e2e build smoke step.

- freebuff/e2e/tests/startup.e2e.test.ts: wait for "Pick a model to
  start" to render instead of just non-empty output. The model selector
  only appears once the binary survived module init (Parser.init
  included), the auth/session API call returned, and the React tree
  mounted, so a half-rendered crash splash no longer satisfies the
  assertion.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
J
James Grugett committed
065eefaaa39ca8fa1822261dfe440442a6e0d025
Parent: da4f4c7