You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Through the ruflo-core plugin launcher the MCP server dies and Claude Code reports Connection closed, dropping all ruflo tools for the rest of the session. One real session: server idle 41 min, then its first memory_stats died, so this is not a startup race.
Cause: Node regression nodejs/node#65446: legacy node::ObjectWrap addons BUILT against ≥ 24.19.0 headers abort in GC finalizers. The fix landed as abe1b673e9b (PR #65943, 2026-09-21) but is not in any release through v24.21.0.
Evidence (A/B on the same store, Node 24.21.0): original binaries aborted 8/22 runs; the same binaries rebuilt against 24.18.1 headers aborted 0/17 (and 0/10 more through the plugin launcher after a 3.56.3 reinstall).
Ask:
ruflo doctor: flag native addons whose build/config.gypinodedir is ≥ 24.19 while the runtime is a 24.x without the fix.
Document the workaround: node-gyp rebuild --release --nodedir=<24.18.1 headers> in each better-sqlite3 dir (agentdb-nested, top-level, agentic-flow).
Longer term: agentdb on better-sqlite3 13.x (node-addon-api) removes the legacy ObjectWrap path.
Thanks @ronmikailov, this was a precise report. What is done and what is not:
Shipped in #4069 (next @claude-flow/cli release):ruflo doctor (and doctor --component native-addon) now reads build/config.gypi of each better-sqlite3 copy in the resolved tree and warns when a locally compiled copy used Node 24.19+ headers while the runtime is Node 24.19-24.21, listing each path and version with the workarounds (Node 22 / 24.18.1 / a release with the fix, rebuild against 24.18.1 headers, or the 12.x prebuilt). It never loads an addon. The workaround is also in docs/USERGUIDE.md.
Already shipped earlier (#3955, in 3.56.4+): ruflo opens AgentDB with its own prebuilt 12.x better-sqlite3, which keeps the source-built 11.x addon out of that code path.
Verified: a clean install of [email protected] still contains nested agentdb/node_modules/better-sqlite3 and agentic-flow/node_modules/better-sqlite3 at 11.10.0 (agentdb 3.0.0-alpha.20 declares it as an optional dependency ^11.8.1), and the overrides in the ruflo wrapper do not apply to an installed package.
Not verified / not done: I did not reproduce the abort (this machine runs Node 22; I did not install Node 24), so I am relying on your A/B (8/22 aborts with the original binaries, 0/17 rebuilt against 24.18.1 headers). The nested 11.x copies cannot be removed from inside the published package; the real fix is an agentdb release depending on better-sqlite3@^12, which is a separate repo and a maintainer decision. The upper bound of the check (24.21.x) should be revisited when a Node release ships fix (nodejs/node PR #65943).
Follow-up: Node v24.22.0 (2026-10-14, LTS) ships the runtime fix, abe1b673e9 "src: keep global list of addon-provided cleanup hooks" (doc/changelogs/CHANGELOG_V24.md, credited to nodejs/node#63985; #65943, which doctor-native-addon.js cites, is its v24.x backport).
A/B on ruflo 3.56.10 (WSL2, x64), 30 serial ruflo memory store --path <scratch> runs per arm. LD_DEBUG shows the command loads only ruflo/node_modules/better-sqlite3 (12.11.1):
The prebuilt never aborted, so rows 3-4 show the stock install is healthy, not the fix; rows 1-2 are the A/B. So isAffectedNodeVersion()'s upper bound (v[1] <= 21) is right, and the fix is runtime-only: on 24.22.0 a binary built against 24.21.0 headers no longer aborts. Two suggestions for the FIX text:
"ruflo itself opens AgentDB through its own prebuilt 12.x copy" holds only while that copy is the prebuilt: the first row is ruflo's own 12.11.1, compiled from source.
Activity
Merge pull request #4069 from ruvnet/fix/doctor-node24-sqlite-4055
ruvnet commentedon Oct 11, 2026
Thanks @ronmikailov, this was a precise report. What is done and what is not:
Shipped in #4069 (next
@claude-flow/clirelease):ruflo doctor(anddoctor --component native-addon) now readsbuild/config.gypiof eachbetter-sqlite3copy in the resolved tree and warns when a locally compiled copy used Node 24.19+ headers while the runtime is Node 24.19-24.21, listing each path and version with the workarounds (Node 22 / 24.18.1 / a release with the fix, rebuild against 24.18.1 headers, or the 12.x prebuilt). It never loads an addon. The workaround is also indocs/USERGUIDE.md.Already shipped earlier (#3955, in 3.56.4+): ruflo opens AgentDB with its own prebuilt 12.x
better-sqlite3, which keeps the source-built 11.x addon out of that code path.Verified: a clean install of
[email protected]still contains nestedagentdb/node_modules/better-sqlite3andagentic-flow/node_modules/better-sqlite3at 11.10.0 (agentdb 3.0.0-alpha.20 declares it as an optional dependency^11.8.1), and theoverridesin theruflowrapper do not apply to an installed package.Not verified / not done: I did not reproduce the abort (this machine runs Node 22; I did not install Node 24), so I am relying on your A/B (8/22 aborts with the original binaries, 0/17 rebuilt against 24.18.1 headers). The nested 11.x copies cannot be removed from inside the published package; the real fix is an
agentdbrelease depending onbetter-sqlite3@^12, which is a separate repo and a maintainer decision. The upper bound of the check (24.21.x) should be revisited when a Node release ships fix (nodejs/node PR #65943).feat(doctor): flag better-sqlite3 copies built against Node 24.19+ he…
Merge pull request #4074 from ruvnet/fix/doctor-4055-pr-number
fix(doctor): cite the right Node PR (#65943) in the native-addon work…
ronmikailov commentedon Oct 15, 2026
Follow-up: Node v24.22.0 (2026-10-14, LTS) ships the runtime fix,
abe1b673e9"src: keep global list of addon-provided cleanup hooks" (doc/changelogs/CHANGELOG_V24.md, credited to nodejs/node#63985; #65943, whichdoctor-native-addon.jscites, is its v24.x backport).A/B on ruflo 3.56.10 (WSL2, x64), 30 serial
ruflo memory store --path <scratch>runs per arm.LD_DEBUGshows the command loads onlyruflo/node_modules/better-sqlite3(12.11.1):(env) != nullptr, exit 134)npm i -g [email protected]on 24.22.0 (12.11.1 prebuilt)The prebuilt never aborted, so rows 3-4 show the stock install is healthy, not the fix; rows 1-2 are the A/B. So
isAffectedNodeVersion()'s upper bound (v[1] <= 21) is right, and the fix is runtime-only: on 24.22.0 a binary built against 24.21.0 headers no longer aborts. Two suggestions for the FIX text:nodejs/node#65446 is still open upstream.