diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 67e77318..08ec975e 100755 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,7 +6,7 @@ }, "metadata": { "description": "Reflex-based memory system for AI agents with SurrealDB backend. Stores experiences as interconnected neurons, recalls through spreading activation — not search.", - "version": "3.11.0" + "version": "3.12.0" }, "plugins": [ { @@ -16,7 +16,7 @@ "repo": "acidkill/surreal-memory" }, "description": "Reflex-based memory system for AI agents with SurrealDB backend — stores experiences as interconnected neurons and recalls them through spreading activation, mimicking how the human brain works.", - "version": "3.11.0", + "version": "3.12.0", "author": { "name": "Toni Nowak / AI-Flow NOWAK" }, diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index c565cdfe..492a4c79 100755 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "surreal-memory", - "version": "3.11.0", + "version": "3.12.0", "description": "Reflex-based memory system for AI agents with SurrealDB backend — stores experiences as interconnected neurons and recalls them through spreading activation, mimicking how the human brain works.", "author": { "name": "Toni Nowak / AI-Flow NOWAK" diff --git a/CHANGELOG.md b/CHANGELOG.md index 371ce793..da001733 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,9 +7,65 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [3.12.0] — 2026-09-25 — consolidation can resume its committed work + +Large maintenance runs now make bounded progress and can continue from durable +checkpoints after interruption. Semantic discovery also detects source changes +that invalidate its saved work, while pruning, retention, compression, and +fiber-wide operations avoid relying on unbounded in-memory scans. + +### Added + +- Durable consolidation progress tracks committed work across bounded strategy + steps. Runs can resume across process interruptions, with lease fencing and + replay-safe tool events preventing competing workers or duplicate effects. +- Semantic-link discovery stores bounded staged state and source-revision + fences. It can resume discovery across checkpoints, detect stale work when + source records change, and recover safely when source drift repeats. +- Keyset-paged fiber censuses, maturation reads, compression, and activity + scans keep large maintenance jobs from requiring whole collections in memory. + +### Changed + +- Consolidation strategies and pruning advance through durable, committed + substeps. Retention resumes from its last committed phase after an error + rather than restarting already-completed work. +- Alias-pair checks use source indexes, unused connectivity queries are + removed from prune scans, and semantic-link candidate collection has a + bounded memory footprint. +- Schema migration advances compatible unfinished v3.11 consolidation + checkpoint metadata to schema v12 while retaining its phase, cursor, and + counters. Checkpoints with a different engine or progress-format marker are + left untouched. + ### Fixed -- **Resumable semantic-link discovery** — discovery and similarity progress now checkpoint durably and resume from committed cursors/rows; changed source data invalidates stale progress. +- Compression preserves backups and resumes fiber processing safely, including + compatibility with older stored compression state. +- Context-overflow reranker requests split into smaller requests without + dropping or resetting candidate scores. +- Embedding credentials for OpenAI-compatible providers are isolated from + unrelated provider requests. +- Semantic discovery safely recovers unapplied legacy work, tolerates + unchanged changefeed metadata, handles barriers across changefeed cursors, + and safely restarts stale checkpoints. +- Semantic-link apply checkpoints batch their updates, and keyset range scans + remain bounded at page boundaries. +- Optional SDK-specific test fences no longer fail installations without that + optional package. + +### Compatibility and rollout + +- The database schema advances to v12 through the normal startup migration. + Take the usual database backup before deploying, particularly when a + consolidation may be in progress. +- Compatible v3.11 progress records retain the `3.11.0:checkpoint-v1` engine + marker; the marker is a checkpoint-compatibility identifier, not a package + version field, and it remains stable across compatible package releases. + Migration advances schema metadata without rewriting a checkpoint phase, + cursor, or counters. v3.12 can resume a compatible v3.11 checkpoint when its + schema, progress format, run options, and requested strategies still match; + incompatible markers and formats remain fenced off and are not rewritten. ## [3.11.0] — 2026-09-23 — recall reaches the right memories and checks its work diff --git a/README.md b/README.md index bde42c3e..808cb9ea 100644 --- a/README.md +++ b/README.md @@ -19,24 +19,27 @@ Restart your AI tool. Your agent now remembers. --- -## What's new in 3.11.0 - -- Recall can use BM25-ranked keyword anchors and indexed semantic anchors across - the whole brain. An optional fiber-vector retriever can also surface a fiber - whose neurons did not win an anchor search; existing fibers need a deliberate - vector backfill before enabling it. -- Creation age and an explicitly requested priority now affect recall ranking. - Confidence is reduced when no embedding or fiber-vector anchor grounds a - match, even if keyword anchors are present. -- Brain snapshots retain the persisted fiber fields and stored fiber vectors. - `smem brain recall-check` samples stored summaries through normal recall to - report self-recall separately from the health score. -- `auto_capture_mode = "off"` now disables automatic writes. Auto-classified - decisions, errors, tools, and predictions no longer receive an implicit - expiry; explicit expiry settings still apply. +## What's new in 3.12.0 + +- Consolidation now advances through bounded, durable work units. Interrupted + runs can resume from committed checkpoints, including semantic-link + discovery, deduplication, fiber censuses, compression, and lifecycle work. +- Semantic-link discovery limits candidate memory and records source revisions + so stale or repeatedly changing source data can be detected and recovered + safely instead of replaying unbounded work. +- Pruning and retention resume between committed substeps after errors, and + indexed keyset scans keep large graph operations bounded. +- The schema migration carries compatible unfinished v3.11 checkpoints + forward while preserving their phase data and `3.11.0:checkpoint-v1` + compatibility marker. Package-version bumps do not invalidate this v1 + checkpoint epoch; incompatible formats, schema state, or run parameters + remain fenced off from resume. +- Reranker requests that exceed context limits are split without losing + candidate scores, and OpenAI-compatible embedding credentials are isolated + from unrelated provider requests. See [CHANGELOG.md](CHANGELOG.md) for migration details and the complete list of -changes. +changes. For earlier releases, see the changelog. --- diff --git a/integrations/surreal-memory-client/package-lock.json b/integrations/surreal-memory-client/package-lock.json index 4531cef1..e6f084bd 100644 --- a/integrations/surreal-memory-client/package-lock.json +++ b/integrations/surreal-memory-client/package-lock.json @@ -1,12 +1,12 @@ { "name": "@acidkill/surreal-memory-client", - "version": "3.11.0", + "version": "3.12.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@acidkill/surreal-memory-client", - "version": "3.11.0", + "version": "3.12.0", "license": "MIT", "devDependencies": { "@types/node": "^20.0.0", diff --git a/integrations/surreal-memory-client/package.json b/integrations/surreal-memory-client/package.json index 4f8255bf..3e3544d6 100644 --- a/integrations/surreal-memory-client/package.json +++ b/integrations/surreal-memory-client/package.json @@ -1,6 +1,6 @@ { "name": "@acidkill/surreal-memory-client", - "version": "3.11.0", + "version": "3.12.0", "description": "TypeScript client for the Surreal-Memory REST API \u2014 typed access to brains, neurons, synapses, fibers, recall, and sync.", "type": "module", "main": "dist/index.cjs", diff --git a/integrations/surrealmemory/openclaw.plugin.json b/integrations/surrealmemory/openclaw.plugin.json index e70696db..3726122a 100755 --- a/integrations/surrealmemory/openclaw.plugin.json +++ b/integrations/surrealmemory/openclaw.plugin.json @@ -3,7 +3,7 @@ "kind": "memory", "name": "Surreal-Memory", "description": "Brain-inspired persistent memory for AI agents — neurons, synapses, and fibers. REQUIRED: set plugins.slots.memory = \"surrealmemory\" in openclaw.json to disable the default memory-core plugin and activate Surreal-Memory as the exclusive memory provider.", - "version": "3.11.0", + "version": "3.12.0", "configSchema": { "jsonSchema": { "type": "object", diff --git a/integrations/surrealmemory/package-lock.json b/integrations/surrealmemory/package-lock.json index 0f372b12..ffcf3c10 100755 --- a/integrations/surrealmemory/package-lock.json +++ b/integrations/surrealmemory/package-lock.json @@ -1,12 +1,12 @@ { "name": "@surrealmemory/openclaw-plugin", - "version": "3.11.0", + "version": "3.12.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@surrealmemory/openclaw-plugin", - "version": "3.11.0", + "version": "3.12.0", "license": "MIT", "devDependencies": { "@types/node": "^25.2.2", diff --git a/integrations/surrealmemory/package.json b/integrations/surrealmemory/package.json index 833e104f..6c5c0ad2 100755 --- a/integrations/surrealmemory/package.json +++ b/integrations/surrealmemory/package.json @@ -1,6 +1,6 @@ { "name": "surrealmemory", - "version": "3.11.0", + "version": "3.12.0", "description": "Surreal-Memory plugin for OpenClaw \u2014 graph-based persistent memory for AI agents with SurrealDB backend", "type": "module", "main": "dist/index.js", diff --git a/pyproject.toml b/pyproject.toml index 142f47fd..6fbaa5e5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "surreal-memory" -version = "3.11.0" +version = "3.12.0" description = "Reflex-based memory system for AI agents with SurrealDB backend — retrieval through activation, not search" readme = "README.md" license = "MIT" diff --git a/src/surreal_memory/__init__.py b/src/surreal_memory/__init__.py index 561b3dbb..116c680c 100755 --- a/src/surreal_memory/__init__.py +++ b/src/surreal_memory/__init__.py @@ -16,7 +16,7 @@ from surreal_memory.engine.reflex_activation import CoActivation, ReflexActivation from surreal_memory.engine.retrieval import DepthLevel, ReflexPipeline, RetrievalResult -__version__ = "3.11.0" +__version__ = "3.12.0" __all__ = [ "__version__", diff --git a/src/surreal_memory/engine/consolidation_progress.py b/src/surreal_memory/engine/consolidation_progress.py index 2c8bfc5b..e5c38ab9 100644 --- a/src/surreal_memory/engine/consolidation_progress.py +++ b/src/surreal_memory/engine/consolidation_progress.py @@ -12,7 +12,6 @@ from typing import Any from uuid import uuid4 -from surreal_memory import __version__ from surreal_memory.storage.base import NeuralStorage from surreal_memory.storage.surrealdb.schema import SCHEMA_VERSION from surreal_memory.utils.timeutils import ensure_naive_utc, utcnow @@ -20,7 +19,9 @@ logger = logging.getLogger(__name__) PROGRESS_FORMAT_VERSION = 1 -CONSOLIDATION_ENGINE_VERSION = f"{__version__}:checkpoint-v1" +# Keep this compatibility epoch stable across package releases; change it only +# when checkpoint semantics become incompatible. +CONSOLIDATION_ENGINE_VERSION = "3.11.0:checkpoint-v1" LEASE_SECONDS = 180 INCOMPLETE_STATUSES = {"queued", "running", "paused", "failed"} diff --git a/tests/unit/test_consolidation_progress.py b/tests/unit/test_consolidation_progress.py index 1f09f418..7c059c31 100644 --- a/tests/unit/test_consolidation_progress.py +++ b/tests/unit/test_consolidation_progress.py @@ -98,6 +98,7 @@ async def test_new_run_persists_committed_checkpoints_and_completion() -> None: assert session.state["status"] == "running" assert session.state["schema_version"] > 0 assert session.state["engine_version"] == progress_module.CONSOLIDATION_ENGINE_VERSION + assert session.state["engine_version"] == "3.11.0:checkpoint-v1" assert storage.started == 1 await session.checkpoint( diff --git a/tests/unit/test_health_fixes.py b/tests/unit/test_health_fixes.py index 25e62acc..3585ff8f 100755 --- a/tests/unit/test_health_fixes.py +++ b/tests/unit/test_health_fixes.py @@ -485,7 +485,7 @@ class TestVersionBump: def test_version_is_current(self) -> None: import surreal_memory - assert surreal_memory.__version__ == "3.11.0" + assert surreal_memory.__version__ == "3.12.0" class TestPackageIntegrity: diff --git a/vscode-extension/package-lock.json b/vscode-extension/package-lock.json index fac4fe20..fd39cdc6 100755 --- a/vscode-extension/package-lock.json +++ b/vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "surrealmemory", - "version": "3.11.0", + "version": "3.12.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "surrealmemory", - "version": "3.11.0", + "version": "3.12.0", "license": "MIT", "dependencies": { "cytoscape": "^3.33.1", diff --git a/vscode-extension/package.json b/vscode-extension/package.json index 56b63d6f..d0a7f9cd 100755 --- a/vscode-extension/package.json +++ b/vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "surrealmemory", "displayName": "Surreal-Memory", "description": "Visual brain explorer, inline recall, and memory management for Surreal-Memory", - "version": "3.11.0", + "version": "3.12.0", "publisher": "ai-flow-nowak", "license": "MIT", "preview": true,