[Bug] Windows memory indexing falls back to FTS-only in 2026.4.14 even though direct node:sqlite + sqlite-vec works
Summary
On Windows, OpenClaw 2026.4.14 still degrades memory indexing to FTS-only with repeated sqlite-vec unavailable / chunks_vec not updated warnings.
This persists after:
- updating OpenClaw to
2026.4.14
- forcing a full memory reindex
- rebuilding the memory DB from scratch
A direct local node:sqlite + sqlite-vec test on the same machine succeeds, which suggests the problem is in OpenClaw's memory-core runtime path rather than the machine, Windows generally, or sqlite-vec generally.
Impact
- semantic memory recall is degraded to FTS-only behavior
chunks_vec is never created on a fresh DB
- downstream features that depend on healthy vector-backed recall, including dreaming/synthesis workflows, remain blocked
Environment
- OS: Windows 11
- OpenClaw:
2026.4.14
- Node.js:
v24.13.1
- sqlite-vec path observed by OpenClaw:
C:\Users\artva\AppData\Roaming\npm\node_modules\openclaw\node_modules\sqlite-vec-windows-x64\vec0.dll
- Workspace memory store:
C:\Users\artva\.openclaw\memory\main.sqlite
Symptoms
openclaw memory status reports:
Vector: unknown
FTS: ready
Indexed: 30/30 files
openclaw memory index --agent main --force completes, but logs warnings like:
[memory] chunks written for memory/2026-04-14.md without vector embeddings — chunks_vec not updated (sqlite-vec unavailable). Vector recall degraded for this file.
This happens across many files.
What was ruled out
1) Stale DB / stale schema
I backed up the existing DB, moved it aside, and forced a fresh rebuild.
Result:
- new DB created successfully
chunks and FTS tables were created
- no
chunks_vec table was created
- indexing still logged
sqlite-vec unavailable
So this does not appear to be caused by stale DB state.
2) Missing allowExtension: true
Current 2026.4.14 dist appears to open the memory DB with:
const db = new DatabaseSync(dbPath, { allowExtension });
So the previously reported allowExtension issue does not seem to explain this specific case.
3) Windows / sqlite-vec / node:sqlite generally being broken
On the same machine, a direct standalone Node test succeeded using:
import { DatabaseSync } from 'node:sqlite';
import * as sqliteVec from 'sqlite-vec';
const db = new DatabaseSync(':memory:', { allowExtension: true });
sqliteVec.load(db);
const row = db.prepare('select vec_version() as v, vec_length(?) as len').get(
new Uint8Array(new Float32Array([0.1, 0.2, 0.3, 0.4]).buffer)
);
console.log(row);
Result:
That suggests the lower stack works locally.
Current best diagnosis
This looks like an OpenClaw-specific memory-core runtime issue rather than a general local environment problem.
The likely failing step is somewhere in the real memory-core vector initialization path, for example:
- bundled/runtime behavior around
sqliteVec.load(db) differing from the standalone case
CREATE VIRTUAL TABLE IF NOT EXISTS chunks_vec USING vec0(...) failing after load
- an error during vector init being swallowed and only surfacing as
sqlite-vec unavailable
The current dist appears to use a sane sequence:
- initialize provider / generate embeddings
- call
ensureVectorReady(sample.length)
- call
loadSqliteVecExtension({ db, extensionPath })
- then run
CREATE VIRTUAL TABLE IF NOT EXISTS chunks_vec USING vec0(...)
But in the failing runtime path, chunks_vec never appears.
Relevant code path observed in current dist
OpenClaw appears to:
- initialize provider / get embeddings first
- call
ensureVectorReady(sample.length)
- call
loadSqliteVecExtension({ db, extensionPath })
- then run:
CREATE VIRTUAL TABLE IF NOT EXISTS chunks_vec USING vec0(
id TEXT PRIMARY KEY,
embedding FLOAT[${dimensions}]
)
But in the failing runtime path, chunks_vec never appears.
Commands run
openclaw update
openclaw --version
openclaw status --deep --json
openclaw memory status
openclaw memory index --agent main --force
Then a clean DB rebuild test:
- moved
C:\Users\artva\.openclaw\memory\main.sqlite aside
- removed WAL/SHM files
- reran:
openclaw memory index --agent main --force
Expected behavior
chunks_vec should be created on a fresh DB
- forced memory indexing should populate vector rows
openclaw memory status should report vector availability cleanly
Actual behavior
- memory indexing completes
- chunk/FTS writes succeed
- vector table is never created
- repeated warnings indicate sqlite-vec is unavailable
- memory recall is degraded to FTS-only behavior
Related issues
Potentially related to:
#64776 sqlite-vec extension not loaded during gateway runtime memory sync
#65156 sqlite-vec loads but registers no functions / ABI mismatch
#65244 missing allowExtension option in DatabaseSync (though this specific build appears to include it)
Why this matters
This blocks reliable semantic memory and, by extension, downstream features that depend on healthy vector-backed recall, including dreaming/synthesis workflows.
[Bug] Windows memory indexing falls back to FTS-only in 2026.4.14 even though direct node:sqlite + sqlite-vec works
Summary
On Windows, OpenClaw
2026.4.14still degrades memory indexing to FTS-only with repeatedsqlite-vec unavailable/chunks_vec not updatedwarnings.This persists after:
2026.4.14A direct local
node:sqlite+sqlite-vectest on the same machine succeeds, which suggests the problem is in OpenClaw's memory-core runtime path rather than the machine, Windows generally, or sqlite-vec generally.Impact
chunks_vecis never created on a fresh DBEnvironment
2026.4.14v24.13.1C:\Users\artva\AppData\Roaming\npm\node_modules\openclaw\node_modules\sqlite-vec-windows-x64\vec0.dllC:\Users\artva\.openclaw\memory\main.sqliteSymptoms
openclaw memory statusreports:Vector: unknownFTS: readyIndexed: 30/30 filesopenclaw memory index --agent main --forcecompletes, but logs warnings like:This happens across many files.
What was ruled out
1) Stale DB / stale schema
I backed up the existing DB, moved it aside, and forced a fresh rebuild.
Result:
chunksand FTS tables were createdchunks_vectable was createdsqlite-vec unavailableSo this does not appear to be caused by stale DB state.
2) Missing
allowExtension: trueCurrent
2026.4.14dist appears to open the memory DB with:So the previously reported
allowExtensionissue does not seem to explain this specific case.3) Windows / sqlite-vec / node:sqlite generally being broken
On the same machine, a direct standalone Node test succeeded using:
Result:
{"v":"v0.1.9","len":4}That suggests the lower stack works locally.
Current best diagnosis
This looks like an OpenClaw-specific memory-core runtime issue rather than a general local environment problem.
The likely failing step is somewhere in the real memory-core vector initialization path, for example:
sqliteVec.load(db)differing from the standalone caseCREATE VIRTUAL TABLE IF NOT EXISTS chunks_vec USING vec0(...)failing after loadsqlite-vec unavailableThe current dist appears to use a sane sequence:
ensureVectorReady(sample.length)loadSqliteVecExtension({ db, extensionPath })CREATE VIRTUAL TABLE IF NOT EXISTS chunks_vec USING vec0(...)But in the failing runtime path,
chunks_vecnever appears.Relevant code path observed in current dist
OpenClaw appears to:
ensureVectorReady(sample.length)loadSqliteVecExtension({ db, extensionPath })But in the failing runtime path,
chunks_vecnever appears.Commands run
Then a clean DB rebuild test:
C:\Users\artva\.openclaw\memory\main.sqliteasideExpected behavior
chunks_vecshould be created on a fresh DBopenclaw memory statusshould report vector availability cleanlyActual behavior
Related issues
Potentially related to:
#64776sqlite-vec extension not loaded during gateway runtime memory sync#65156sqlite-vec loads but registers no functions / ABI mismatch#65244missingallowExtensionoption inDatabaseSync(though this specific build appears to include it)Why this matters
This blocks reliable semantic memory and, by extension, downstream features that depend on healthy vector-backed recall, including dreaming/synthesis workflows.