From feb39d4bc56a605e781bdcc74a03464bea5af0a0 Mon Sep 17 00:00:00 2001 From: alexeybe1kin <210597588+alexeybe1kin@users.noreply.github.com> Date: Tue, 3 Nov 2026 22:01:06 +0200 Subject: [PATCH] Release MemoryGate 0.8.0 Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 15 +++++++++++++++ services/api/app/main.py | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 017b08f..a87181d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,21 @@ a decision with visible consequences. ## Unreleased +## 0.8.0 + +- **Refused request bodies are never echoed back.** A 422 lists only `loc`, `msg` and `type` for + each error. FastAPI's default repeated the input, so a malformed `POST /auth/change-key` or + `PUT /system/ai-runtime` sent the current admin key, or a provider API key, back in the error. +- **Writes that cannot half-happen.** Ingest commits the evidence and its processing job + together, so evidence can no longer sit `pending` with no job; a backup is written to a + temporary file and moved into place, so a partial file is never listed; a retried job reuses + the analysis rows it already wrote; two concurrent writes of the same memory no longer both get + in (a Postgres advisory lock on agent and text); an episode's end time only moves forward. +- **Dashboard and MCP.** A path with an encoded `../` cannot serve files outside the dashboard + build; unknown MCP methods answer "Method not found" and batch requests get an error; the + context tool's `query` is bounded to 2,000 characters; deleting a vector from a collection that + was never created returns early. + - Retrying a job that a worker is still running (its lease has not expired) is refused with a 409. It used to be queued again and cleared the lease, so a second worker could process the same evidence while the first was still on it. diff --git a/services/api/app/main.py b/services/api/app/main.py index ceafab6..75d2b56 100644 --- a/services/api/app/main.py +++ b/services/api/app/main.py @@ -47,7 +47,7 @@ log = logging.getLogger("memorygate") -SERVICE_VERSION = "0.7.0" +SERVICE_VERSION = "0.8.0" app = FastAPI(title="MemoryGate", version=SERVICE_VERSION)