From 5398735ba15c83ee3bd2b1df7bb1e47b8a8e5609 Mon Sep 17 00:00:00 2001 From: Toni Nowak <58035493+acidkill@users.noreply.github.com> Date: Sun, 30 Aug 2026 13:29:22 +0200 Subject: [PATCH] chore(release): 3.8.1 --- .claude-plugin/marketplace.json | 4 +-- .claude-plugin/plugin.json | 2 +- CHANGELOG.md | 36 +++++++++++++++++++ .../surreal-memory-client/package-lock.json | 4 +-- .../surreal-memory-client/package.json | 2 +- .../surrealmemory/openclaw.plugin.json | 2 +- integrations/surrealmemory/package-lock.json | 4 +-- integrations/surrealmemory/package.json | 2 +- pyproject.toml | 2 +- src/surreal_memory/__init__.py | 2 +- tests/unit/test_health_fixes.py | 2 +- vscode-extension/package-lock.json | 4 +-- vscode-extension/package.json | 2 +- 13 files changed, 52 insertions(+), 16 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 1b9196c6..a07e5159 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.8.0" + "version": "3.8.1" }, "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.8.0", + "version": "3.8.1", "author": { "name": "Toni Nowak / AI-Flow NOWAK" }, diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 77067c16..9088af48 100755 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "surreal-memory", - "version": "3.8.0", + "version": "3.8.1", "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 a02f11f9..d724fcc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,42 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [3.8.1] — 2026-08-30 — a memory stops being findable by text it no longer contains + +Compression is meant to be either reversible or honest. Two defects made it neither: the +snapshot that destructive compression takes before overwriting content never reached the +database, and every path that replaced a neuron's content re-saved the fingerprint and +embedding of the text it had just deleted. + +### Fixed + +- `save_neuron_snapshot` wrote a `datetime` into a column the schema declares as a string, + so a SCHEMAFULL backend refused the write. The only caller wraps the save in a fail-soft + `except`, so nothing surfaced: destructive compression replaced a neuron's content while + the snapshot meant to protect it silently never existed, leaving content recovery with + nothing to restore from. The read path already parsed either representation, so callers + are unaffected. +- The compression engine's compress, decompress and recover paths, and instruction + refinement, replaced a neuron's `content` without recomputing `content_hash`, the stored + embedding, or `metadata["_structure"]` — so a memory stayed retrievable by text that had + been deleted, and could not be repaired by a missing-only reindex, because the vector was + never empty. This is the same class fixed for `smem_edit` in 3.8.0, applied to the call + sites outside the MCP layer. +- Refreshing is batched rather than per neuron: compression walks every neuron of a fiber + under a time budget, and identical text is embedded once and fanned out, so a fiber costs + one brain lookup and one embedding call rather than a provider round-trip per neuron. A + provider returning fewer vectors than it was given is rejected before any of them is + assigned, since a positional assignment over a short list would leave the tail neurons + holding stale vectors with neither an error nor a warning. +- A neuron compressed to the graph-only tier carries a placeholder for content, so anything + derived from it is one constant shared across the store. Correct derived fields therefore + made a latent problem reachable: consumers comparing those fields would pair unrelated + tombstones with each other, or canonicalise a genuine new memory onto one. The placeholder + now carries the codebase's existing no-fingerprint sentinel, and the consumers of + content-derived fields — the deduplication census, the save-time deduplication pipeline, + interference detection, semantic discovery, recall anchor selection, entity reuse and + novelty scoring — skip placeholder content rather than fingerprinting it. + ## [3.8.0] — 2026-08-27 — the dashboard answers, and what it reports stops lying Every dashboard endpoint that recomputed a multi-second analysis on each request now diff --git a/integrations/surreal-memory-client/package-lock.json b/integrations/surreal-memory-client/package-lock.json index f94fa1b1..96867dd5 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.8.0", + "version": "3.8.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@acidkill/surreal-memory-client", - "version": "3.8.0", + "version": "3.8.1", "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 9d08669f..7686104c 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.8.0", + "version": "3.8.1", "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 9e740ebb..9f1c0d76 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.8.0", + "version": "3.8.1", "configSchema": { "jsonSchema": { "type": "object", diff --git a/integrations/surrealmemory/package-lock.json b/integrations/surrealmemory/package-lock.json index a60228d8..abc3805a 100755 --- a/integrations/surrealmemory/package-lock.json +++ b/integrations/surrealmemory/package-lock.json @@ -1,12 +1,12 @@ { "name": "@surrealmemory/openclaw-plugin", - "version": "3.8.0", + "version": "3.8.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@surrealmemory/openclaw-plugin", - "version": "3.8.0", + "version": "3.8.1", "license": "MIT", "devDependencies": { "@types/node": "^25.2.2", diff --git a/integrations/surrealmemory/package.json b/integrations/surrealmemory/package.json index 75243a5e..33cc7a47 100755 --- a/integrations/surrealmemory/package.json +++ b/integrations/surrealmemory/package.json @@ -1,6 +1,6 @@ { "name": "surrealmemory", - "version": "3.8.0", + "version": "3.8.1", "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 f7934d10..5c996e51 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "surreal-memory" -version = "3.8.0" +version = "3.8.1" 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 d071402d..9866e897 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.8.0" +__version__ = "3.8.1" __all__ = [ "__version__", diff --git a/tests/unit/test_health_fixes.py b/tests/unit/test_health_fixes.py index 7a8b6f6a..0628c827 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.8.0" + assert surreal_memory.__version__ == "3.8.1" class TestPackageIntegrity: diff --git a/vscode-extension/package-lock.json b/vscode-extension/package-lock.json index 9c1bfa33..de0e7a2a 100755 --- a/vscode-extension/package-lock.json +++ b/vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "surrealmemory", - "version": "3.8.0", + "version": "3.8.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "surrealmemory", - "version": "3.8.0", + "version": "3.8.1", "license": "MIT", "dependencies": { "cytoscape": "^3.33.1", diff --git a/vscode-extension/package.json b/vscode-extension/package.json index 49e4ece3..14943663 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.8.0", + "version": "3.8.1", "publisher": "ai-flow-nowak", "license": "MIT", "preview": true,