Skip to content

v3.0.0 — The SQLite storage backend is removed

Choose a tag to compare

@acidkill acidkill released this 02 Aug 14:18
· 118 commits to main since this release
3524066

Breaking release. SurrealDB has been the production backend since 2.0.0; the SQLite backend was kept only as an internal test fixture, deprecated since 2.21.0. This release removes it entirely.

storage_backend = "sqlite" is now a hard error

Setting it (via config.toml or SURREAL_MEMORY_STORAGE) now raises immediately with the two supported alternatives and a link to the migration guide, instead of silently falling back to something else — a silent fallback here would look exactly like data loss.

Existing SQLite brains at ~/.surrealmemory/brains/*.db are never read, written or deleted by 3.0.0. Installing a 2.x release restores full access to them at any time. See migrating-to-3.0.md to move a brain to SurrealDB, or set SURREAL_MEMORY_STORAGE=memory to try the tool without a database.

What's removed

All 31 storage/sqlite_*.py modules, storage/factory.py (HybridStorage, create_storage — confirmed unused outside tests), storage/read_pool.py and storage/neuron_cache.py — roughly 10,200 lines. InMemoryStorage is now the only non-SurrealDB backend, and now implements the full NeuralStorage interface (previously 64 of 172 methods were inherited stubs, tolerable only because SQLite covered the gap in tests).

Bugs this surfaced and fixed along the way

Migrating tests off SQLite exposed three real gaps in InMemoryStorage that were fixed rather than deferred: get_unprocessed_events was a hardcoded stub returning nothing, find_fibers_batch never applied its limit, and get_alert/get_depth_priors were missing entirely.

Pinning, training dedup and graph density only ever worked on SQLite

Six storage methods lived on SQLiteStorage and were never declared on the NeuralStorage interface. Every caller reached for them through hasattr or a swallowed exception, so on SurrealDB — the production backend — they did nothing at all, and nothing reported it:

  • Pinned memories were decayed and pruned.
  • smem_pin refused every action — pin, unpin and list.
  • smem train was not idempotent — each run re-encoded the whole corpus.
  • activation_strategy="auto" never left classic BFS.

All are now declared on NeuralStorage and implemented on both remaining backends.

Upgrade notes

If storage_backend currently resolves to "sqlite", every command touching storage will fail with a clear message pointing at the two alternatives. See the migration guide — it takes a few minutes and never touches your .db files.