v3.7.0-alpha.3 β Windows daemon fix + CI regression guard (closes #1766)
Pre-releaseWhat'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: trueon every platform.- Added explicit
child.disconnect()afterchild.unref(), wrapped in try/catch. - Why: PR #1719 (v3.6.13) had switched the spawn from
spawn(..., {shell:true})tofork(..., { 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:truegives 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.3If 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