Upgrading from 4.x? 5.x needs Node 22.14+ or 24+; Node 20 and 23 are unsupported. On Node 20, npm warns and still installs unless engine-strict is set; the database engine will not load. Read the guide.

launch release memory

ShieldCortex 5.10.0: One Command for Storage and Memory Hygiene

DS
Drakon Systems · 15 October 2026

ShieldCortex 5.10.0 was released on 15 October 2026. It adds one CLI command, shieldcortex maintain, that runs storage and memory hygiene in one step. This is a minor release on 5.9.0 rather than a patch because it adds a new CLI command. No existing CLI command, config key, default, Node floor or Cloud pin changes. Action Guard stays off by default in the shared ShieldCortex config; this release does not change that or any other default.

What maintain does

shieldcortex maintain runs four steps in order. It consolidates short-term memory (STM) when it is above its cap, backfills missing vectors (skipped while the embedding model is not cached), vacuums when at least 20% of database pages are free, then runs doctor's Memories, Semantic coverage and Disk checks.

A database lock held by another live ShieldCortex process, whether seen before opening or at lock acquisition, makes consolidation, embedding and vacuum skip, not fail. Doctor still runs.

Plain maintain can delete and evict memories: run --dry-run first

When STM is over its cap, plain maintain (without --dry-run) runs the first phase of shieldcortex consolidate, not its Dream Mode phase. That phase promotes worthy STM, deletes decayed STM, evicts unpinned memories older than one hour in either tier while that tier exceeds maxShortTermMemories or maxLongTermMemories, and resolves near-identical long-term pairs by deleting or downvoting one of them. Tags are combined; memory text is never merged. It does not archive.

Run --dry-run first to preview what would change.

--dry-run and --json

--dry-run leaves database contents and config unchanged. SQLite may still create shared-memory sidecar files. --json prints a structured report. An unknown argument exits 2.

Exit code and webhook

maintain exits 1 while a FAIL remains after doctor's checks. The remaining FAIL checks are sent to the configured Action Guard webhook, at most once per 24 hours for the same FAIL set. The webhook gets each check's name and the fixed text "Check failed; run shieldcortex doctor for details." Doctor's detailed messages stay in the local report, and memory content is never sent.

Lock fix (#761) and a known limit (#763)

A live ShieldCortex startup lock taken after maintain's first check now stops database initialization before it writes. The maintenance steps skip and doctor still runs.

The startup lock itself still has pre-existing race windows: non-atomic publication, check-then-unlink stale takeover, release without an ownership check, and, for embedded callers, a pre-existing cached-handle shortcut in initDatabase that also bypasses the new refuseIfLocked option. They are tracked in #763 and are not fixed in 5.10.0.

Also in this release

Supporting changes ship with maintain: the Action Guard webhook channel gains a maintenance_fail event, initDatabase gains a refuseIfLocked option, and the cloud config reader gains a read-only mode used by --dry-run.

Two test-only changes replace absolute Iron Dome ReDoS timing caps with a warmed scaling differential and de-flake one of its tripwires. They change no shipped code.

Not included yet: audit-log retention and scheduling of maintain.

Upgrade to 5.10.0

npm install -g shieldcortex@5.10.0

Read the changelog →

Built by Drakon Systems.