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.<pid>.<rand>.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.
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
@code-yeongyu/omo-senpi4.19.4 (extensions/omo.jsbundle)C:\Program Files\nodejs)Symptoms
senpirenders the banner/first frame, then the process dies 2–4 s later.senpi-crash.log, no Windows Error Reporting event.dist/cli.js) exits with code-1073740791propagated from the host (dist/cli-main.js); the host dies without firing itsexithandler (native abort).Isolation (all runs interactive TTY)
packages = []--no-maglev)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-preservingtry/catchwrapper 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)
0xC0000409, parameter 0 =0x5(FAST_FAIL_INVALID_ARG), raised from the UCRT invalid-parameter handler (IsProcessorFeaturePresent(PF_FASTFAIL_AVAILABLE)→__int 0x29; fallback constant0xC0000417 STATUS_INVALID_CRUNTIME_PARAMETERfollows in the same stub)....\.omo\senpi-task\locks\session-….lock.<pid>.<rand>.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.Suggestion
Workaround we adopted: dropped Node 24.19.0's
node.exenext 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.