Skip to content

v3.7.0-alpha.3 β€” Windows daemon fix + CI regression guard (closes #1766)

Pre-release
Pre-release

Choose a tag to compare

@ruvnet ruvnet released this 05 May 23:26

What's in this release

This is the prerelease that fixes #1766 β€” npx claude-flow daemon start reporting success but the daemon dying ~1 second later on Windows + Node 25. Originally diagnosed by @Zarkk1zz, fixed in PR #1768 (commit 69e72d2), and now backed by a Windows CI regression test from PR #1769 (commit fd4c3cb).

The fix (v3/@claude-flow/cli/src/commands/daemon.ts)

  • detached: !isWin β†’ detached: true on every platform.
  • Added explicit child.disconnect() after child.unref(), wrapped in try/catch.
  • Why: PR #1719 (v3.6.13) had switched the spawn from spawn(..., {shell:true}) to fork(..., { stdio: [..., 'ipc'] }) which left the IPC channel open. child.unref() releases the libuv handle but does not close the IPC pipe β€” and on Windows that pipe is what tied the daemon to the parent npx wrapper. When npx exited, the pipe tore down and the daemon went with it. disconnect() severs the IPC pipe; detached:true gives the child its own session/pgid; the daemon now genuinely stands on its own.

Windows verification

Confirmed across three independent Windows machines:

Where Node PID Survived
Local Windows 11 (maintainer) 24.12.0 25532 246s post parent exit
@Zarkk1zz's machine 25.8 β€” per original issue report
GitHub Actions windows-latest (CI) 20 7072 5s post parent exit (assertion)

The CI step lives in the existing Build & Package (windows-latest) matrix job in .github/workflows/ci.yml. It installs @claude-flow/cli@alpha into RUNNER_TEMP, spawns the daemon via cmd.exe /c node $cli daemon start, waits for that parent to exit (via [System.Diagnostics.Process]::Start + WaitForExit(120000)), then asserts Get-Process -Id $daemonPid still finds the daemon 5 seconds later. Future regressions will turn the build red instead of waiting for a user report.

Concrete CI output from the latest run on windows-latest:

Install took 34.4588359s
cmd.exe parent exited in 0.9135141s with code 0
Daemon recorded PID = 7072
PASS: daemon PID 7072 alive 5s after parent exit (@claude-flow/cli@3.7.0-alpha.3)

Verification manifest

verification.md now includes a Post-witness validations section for #1766 with source/dist SHA-256 hashes (8d52ffff… for source, f09d153c… for dist) and the full runtime witness. This sits outside the signed Ed25519 JSON manifest above so existing signatures stay valid; it'll fold into the next manifest re-issuance.

Packages

All three packages on npm at 3.7.0-alpha.3:

npm install ruflo@3.7.0-alpha.3
# or
npx @claude-flow/cli@3.7.0-alpha.3 daemon start
Package Version Tags
@claude-flow/cli 3.7.0-alpha.3 alpha, latest, v3alpha
claude-flow 3.7.0-alpha.3 alpha, latest, v3alpha
ruflo 3.7.0-alpha.3 alpha, latest

Upgrade

If you're on 3.7.0-alpha.1 or 3.7.0-alpha.2 on Windows, upgrade to fix daemon start:

npm install ruflo@3.7.0-alpha.3

If you hit any issue, you can pin back to 3.7.0-alpha.1 (which predates the cli-core split too):

npm install ruflo@3.7.0-alpha.1

Credits

  • @Zarkk1zz for the careful diagnosis and post-patch verification on Node 25.8 / Git Bash + PowerShell.
  • Closes #1766.