Skip to content

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 #735

Description

@grim-susemi

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions