code-yeongyu / code-yeongyu/senpi

Windows 11 (build 26200): startup fast-fail crash (0xC0000409) with OMO 4.19.4 extension — Node 24.12.0 runtime defect, resolved on Node 24.19.0

Open
#735 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
429
Forks
98
Avg merge
5h 3m
Merged PRs (30d)
526

Description

## Summary

On Windows 11 build 26200, senpi fast-fails (`0xC0000409`, exit code `-1073740791`) 2–4 seconds after the first TUI frame when the OMO senpi extension package 4.19.4 is active. Root cause is not in the extension code: it is a **Node.js 24.12.0 runtime bug** on this Windows build. The exact same setup works on Node 22.23.2 and Node 24.19.0.

Possibly related to nodejs/node#62260 (same OS build, same exit code), but our failure signature differs (see dump analysis below).

## Environment

- OS: Windows 11 x64, build 10.0.26200 (AMD Ryzen 9800X3D)
- senpi: 2026.8.4-2 (also reproduced on 2026.8.5-2)
- Extension: local-path pi package `@code-yeongyu/omo-senpi` 4.19.4 (`extensions/omo.js` bundle)
- Node: v24.12.0 (`C:\Program Files\nodejs`)

## Symptoms

- Interactive `senpi` renders the banner/first frame, then the process dies 2–4 s later.
- No JS exception, no stderr output, no entry in `senpi-crash.log`, no Windows Error Reporting event.
- The wrapper (`dist/cli.js`) exits with code `-1073740791` propagated from the host (`dist/cli-main.js`); the host dies without firing its `exit` handler (native abort).

## Isolation (all runs interactive TTY)

| Configuration | Result |
|---|---|
| `packages = []` | survives |
| OMO 4.19.3 package | survives |
| OMO 4.19.4 package, Node 24.12.0 | crashes 5/5 (also with `--no-maglev`) |
| OMO 4.19.4 package, **Node 22.23.2** | survives |
| OMO 4.19.4 package, **Node 24.19.0** | survives |

Bundle-level bisect (patching the minified bundle) initially pointed at the senpi-task session-start `reconcileOnSessionStart` → scoped-revival → admission-lease path, but any patch that changed the *shape* of the involved functions — including a behavior-preserving `try/catch` wrapper that never caught anything — avoided the crash. Combined with the runtime matrix, this indicates the extension code merely *triggers* a JIT/runtime defect.

## Dump analysis (procdump full dump of the host process)

- Exception: `0xC0000409`, parameter 0 = `0x5` (`FAST_FAIL_INVALID_ARG`), raised from the UCRT invalid-parameter handler (`IsProcessorFeaturePresent(PF_FASTFAIL_AVAILABLE)` → `__int 0x29`; fallback constant `0xC0000417 STATUS_INVALID_CRUNTIME_PARAMETER` follows in the same stub).
- The crashing thread's stack contained the extension's admission-lease temp file path (`...\.omo\senpi-task\locks\session-….lock...tmp`), i.e. the fast-fail fired during fs operations on that file. Caller code inspects a heap/fd-table style header (`[rcx-8]`), consistent with a corrupted pointer/fd handed to a CRT check — plausible downstream symptom of miscompiled code.
- Module list was clean (no AV/injection DLLs; only node.exe, Windows DLLs, senpi's two native addons).

## Suggestion

- A startup warning (or a docs/FAQ note) for Windows users on Node 24.12.0 would have saved hours here: "Node 24.12.0 on Windows 11 26200 can fast-fail on startup; use Node ≥ 24.19.0 or 22 LTS."
- Happy to provide the dump or repro details if useful.

Workaround we adopted: dropped Node 24.19.0's `node.exe` next to the npm shims (`%APPDATA%\npm\node.exe`) so all npm-installed CLIs (including senpi) run on 24.19.0 without touching the system Node.

Contributor guide

Open the contributing guide

Research direction

Review the startup path around extensions/omo.js and the CLI entry points in dist/cli.js and dist/cli-main.js. Confirm where a Windows and Node-version compatibility notice could be presented, or identify the appropriate documentation location. Done means users on Node 24.12.0 receive guidance to use Node 24.19.0 or Node 22 LTS.

Written by the indexing model from the issue text.

Assessment

Tech stack
node.js, typescript
Domain
cli, operating-systems
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.