fix(sqlite): reject runtimes vulnerable to WAL corruption#106065
Conversation
Dependency GuardThis PR changes dependency-related files. Maintainers should confirm these changes are intentional. Changed files:
Maintainer follow-up:
|
Dependency graph changes notedThis PR includes dependency graph changes. The dependency guard is informational because the PR author is a repository admin or a member of
Security review is still recommended before merge when the dependency graph change is intentional. |
d0d7251 to
7bcefb5
Compare
|
Land-ready proof for
Several ancillary detector/CodeQL jobs failed while the GitHub App installation was rate-limited; the authoritative full CI and hosted Testbox gates passed. Known platform gap remains native Windows ARM64 because the available VM was unresponsive; Windows x64 and WSL2 passed. |
|
Merged via squash.
|
…06065) * fix(sqlite): require WAL-reset-safe Node runtime * docs(sqlite): document safe Node runtime floor * fix(sqlite): defer runtime library validation until use * fix(ci): align startup memory with Node 24.15
* fix(sqlite): require WAL-reset-safe Node runtime * docs(sqlite): document safe Node runtime floor * fix(sqlite): defer runtime library validation until use * fix(ci): align startup memory with Node 24.15
…06065) * fix(sqlite): require WAL-reset-safe Node runtime * docs(sqlite): document safe Node runtime floor * fix(sqlite): defer runtime library validation until use * fix(ci): align startup memory with Node 24.15
Related: #101290
What Problem This Solves
Fixes an issue where users running OpenClaw on Node releases with a vulnerable SQLite build could expose WAL-mode state databases to an upstream WAL-reset corruption bug during concurrent writes and checkpoints.
Why This Change Was Made
OpenClaw now requires official Node releases that include a patched SQLite version, verifies the loaded
sqlite_version()at runtime, and keeps gateway/daemon execution on Node. Installers, worker bootstrap, service migration, package metadata, CI, and documentation all enforce the same supported ranges: Node 22.22.3+, 24.15.0+, or 25.9.0+.The stateful guard checks the actual loaded SQLite library instead of trusting Node version or compile-time metadata, so downstream, custom, and
--shared-sqliteNode builds fail closed when their runtime library is unsafe. Metadata-only CLI commands do not eagerly initialize SQLite.User Impact
OpenClaw refuses to open state databases under runtimes vulnerable to the WAL-reset bug and prints an actionable upgrade message. Fresh installs and daemon migrations select a safe Node runtime, while Bun remains supported as a package/script runner rather than the stateful OpenClaw runtime.
Evidence
tbx_01kxcxbvv88achex8758k48h43, Actions run29225126402.24.15.0, SQLite3.51.3.24.15.0/ SQLite3.51.3.tbx_01kxczr2bnybcfxbwzhyhns3pe, Actions run29226814949: 157 passing tests, 1 expected skip; CLI startup build and bootstrap import guard passed.plugins list --jsonused 388.0 MB RSS against the measured 400 MB Linux ceiling.1.3.13and1.3.14launcher checks reject unsupportednode:sqliteexecution with the expected upgrade guidance.Known platform gap: the available native Windows ARM64 VM was unresponsive; Windows x64 and WSL2 validation passed.