diff --git a/CHANGELOG.md b/CHANGELOG.md index a41753e..ab55dff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,28 @@ are historical; consult the [current guides](docs/README.md) for present behavio The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [0.9.1] - 2026-11-01 + +This release combines Round 13 (speed) and Round 14 (retrieval quality and +document workflow improvements), merged in PRs #137 and #140. V4 HTTP routes +remain compatible. Production qualification remains **NO-GO** pending the +normal certification and production-like release gates. + +### Added + +- Lossless Turkish article-aware chunking for new document revisions, controlled + by `MESA_CHUNKING=auto|plain` (default `auto`). Admitted chunk text pins retry + plans; ambiguous prefixes return HTTP 409 without appending chunks. +- Optional lazy BGE cross-encoder reranking after fusion and outside the search + connection. It is off by default; enable with `MESA_RERANK_ENABLED=true` and + the existing `[ml]` extra. Results add `rerank_score` while preserving fusion + scores. Default model: `BAAI/bge-reranker-v2-m3`; depth: 50. +- Source-based document deletion through `Mesa.delete(source=...)` and + `mesa delete --source `; document-ID deletion remains available. +- Versioned, bounded search-scope caching of authorized rows and temporary + BM25 indexes, invalidated by SQLite commits. Configure it through + `MESA_SEARCH_SCOPE_CACHE` (default `true`). +- Tag-triggered PyPI trusted publishing through GitHub Actions and OIDC. ### Changed @@ -15,9 +36,37 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 (passage MRR 0.3953 → 0.5663 with reranking off); other lane weights remain 1.0. The full weight/reranker matrix and model environment are recorded in the [retrieval guide](docs/retrieval-and-graph.md#round-14-dev-benchmark). -- New document revisions use lossless Turkish article boundaries in automatic - mode. Optional BGE reranking remains off by default, and query embedding calls - run before acquiring the shared search connection. +- Index ingest ledger lookups and reconcile revision activation once per commit + transition, reducing bookkeeping growth while preserving activation rules. +- Run query embedding before the shared search connection, and scrypt API-key + verification, issuance and rotation in worker threads. Graph-disabled search + skips graph seed preparation. +- Include the OpenAI and Ollama SDKs in the base installation: + `pip install mesa-memory`. Anthropic remains in `[adapters]`. +- `mesa add` waits for the revision to become active by default; use `--no-wait` + to return after admission. SDK waiting also polls mutation status. +- Accept zero RRF lane weights to disable a lane's contribution. + +### Fixed + +- Fail promptly on terminal chunk mutations with their ID, state and error + class instead of waiting for the document timeout; keep retryable states + pending. CLI errors remain readable and exit with status 1. +- Retry `queue_over_capacity` during document admission within the SDK deadline. +- Preserve timestamped runtime log handlers across Alembic migrations. +- Record projection-attempt start times from the actual outbox claim time. +- Preserve the missing-ML installation message when an earlier server lifespan + left tasks associated with a closed event loop. + +### Upgrade notes + +- Existing active revisions keep their chunks. Use `MESA_CHUNKING=plain` for + new revisions requiring the earlier chunking plan, and + `MESA_RRF_VECTOR_WEIGHT=1` to retain the earlier vector weighting. +- The ingestion optimization adds SQLite indexes through the normal migrations. + Continue to follow the documented backup and single-owner upgrade procedure. +- Benchmark results describe the frozen Turkish Tier M dev split and the + documented model/hardware setup; they are not general performance guarantees. ## [0.9.0] - 2026-10-28 diff --git a/README.md b/README.md index 6d0e4cb..78f4671 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ MESA is an LLM-independent, source-linked memory engine for AI applications. It stores documents with exact provenance (document, revision, passage) and returns verifiable, scoped evidence over HTTP, Python SDK, and MCP. MESA returns evidence; it never writes the final answer or hallucinates sources. -Package version: **0.9.0**. V4 is the current API. Production qualification remains at the release candidate stage: **NO-GO** until the [release gates](https://github.com/Yasou13/MESA/blob/main/docs/release.md) pass. +Package version: **0.9.1**. V4 is the current API. Production qualification remains at the release candidate stage: **NO-GO** until the [release gates](https://github.com/Yasou13/MESA/blob/main/docs/release.md) pass. ## Installation diff --git a/docker-compose.v4.yml b/docker-compose.v4.yml index c85abd3..dc99fb9 100644 --- a/docker-compose.v4.yml +++ b/docker-compose.v4.yml @@ -5,7 +5,7 @@ x-mesa-v4-runtime: &mesa-v4-runtime context: . dockerfile: Dockerfile target: runtime - image: ${MESA_V4_IMAGE:-mesa-memory:0.9.0} + image: ${MESA_V4_IMAGE:-mesa-memory:0.9.1} restart: "on-failure:5" read_only: true tmpfs: diff --git a/docs/README.md b/docs/README.md index 720bcaa..1adffb3 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,7 +2,7 @@ Bu klasörde 12 kullanım/geliştirme rehberi ve 8 mimari karar belgesi vardır. Hepsini sırayla okumak gerekmez. Amacınıza göre aşağıdaki giriş noktasını seçin. -Paket sürümü 0.9.0; V4 güncel API'dir. +Paket sürümü 0.9.1; V4 güncel API'dir. ## Nereden başlamalıyım? diff --git a/docs/RUNBOOK.md b/docs/RUNBOOK.md index 74758a0..2acbe93 100644 --- a/docs/RUNBOOK.md +++ b/docs/RUNBOOK.md @@ -245,7 +245,7 @@ audit must remain `NOT EXECUTED`, never converted to a simulated success. ## Upgrading to v0.8.0 -Current package metadata is 0.9.0 (unreleased). The v0.8.1 publication was owner-approved with the limitations in +Current package metadata is 0.9.1. The v0.8.1 publication was owner-approved with the limitations in the [release notes](../CHANGELOG.md#v081-publication); it does not certify production readiness. Confirm actual tags in GitHub Releases. This guide describes changes since v0.7.1, not a completed production migration. diff --git a/docs/api-reference.md b/docs/api-reference.md index 1446811..fc199ab 100644 --- a/docs/api-reference.md +++ b/docs/api-reference.md @@ -1,6 +1,6 @@ # API reference -MESA v4 tenant/dataset yetkili versioned API sunar. Paket 0.9.0 (yayımlanmadı); yayın sahibinin adımıdır ve production sertifikasyonu içermez. +MESA v4 tenant/dataset yetkili versioned API sunar. Paket 0.9.1; yayın sahibinin adımıdır ve production sertifikasyonu içermez. Versioned memory, health ve metrics çağrıları `X-API-Key` ister. `/health/init`, OpenAPI, Swagger ve Redoc public yüzeylerdir; ağ/reverse-proxy politikası gerekir. V4 anahtarı `mesa-v4-admin issue-key` ile üretilir; yalnız saltlı scrypt özeti saklanır. diff --git a/docs/architecture-v4.md b/docs/architecture-v4.md index fdf9ed7..1c766e0 100644 --- a/docs/architecture-v4.md +++ b/docs/architecture-v4.md @@ -1,6 +1,6 @@ # MESA Core current V4 architecture -> **Package version:** 0.9.0 (unreleased; publishing is an owner step), without production certification. +> **Package version:** 0.9.1, without production certification. This document owns the current V4 design; production qualification remains release candidate / `NO-GO` under the [release policy](release.md). diff --git a/docs/reference/openapi.json b/docs/reference/openapi.json index 219191a..c743916 100644 --- a/docs/reference/openapi.json +++ b/docs/reference/openapi.json @@ -2,7 +2,7 @@ "openapi": "3.1.0", "info": { "title": "MESA API", - "version": "0.9.0" + "version": "0.9.1" }, "paths": { "/v4/catalog/workspaces": { diff --git a/docs/release.md b/docs/release.md index d60edd7..93b3b6b 100644 --- a/docs/release.md +++ b/docs/release.md @@ -1,6 +1,6 @@ # Release procedure -V4 paket sürümü `0.9.0`; henüz yayımlanmadı, yayın aşağıdaki “Yayınlama” +V4 paket sürümü `0.9.1`; yayın aşağıdaki “Yayınlama” adımlarıyla depo sahibinindir. Aşağıda kayıtlı yayın istisnasını depo sahibi v0.8.1 source release için açıkça onayladı. Production qualification halen release candidate olarak değerlendirilir. Production kararı diff --git a/mesa_client/client.py b/mesa_client/client.py index c59bb01..9610e6d 100644 --- a/mesa_client/client.py +++ b/mesa_client/client.py @@ -1,5 +1,5 @@ """ -MESA v0.9.0 Client SDK +MESA v0.9.1 Client SDK A robust, type-safe Python client for the MESA memory system. Provides both synchronous and asynchronous implementations utilizing httpx. @@ -262,7 +262,7 @@ def __init__( ): self.base_url = base_url.rstrip("/") self.max_retries = max_retries - headers = {"User-Agent": "mesa-client/v0.9.0"} + headers = {"User-Agent": "mesa-client/v0.9.1"} if api_key: headers["X-API-Key"] = api_key @@ -327,7 +327,7 @@ def __init__( ): self.base_url = base_url.rstrip("/") self.max_retries = max_retries - headers = {"User-Agent": "mesa-client/v0.9.0"} + headers = {"User-Agent": "mesa-client/v0.9.1"} if api_key: headers["X-API-Key"] = api_key diff --git a/mesa_mcp/__init__.py b/mesa_mcp/__init__.py index 959ad1f..a5ab66e 100644 --- a/mesa_mcp/__init__.py +++ b/mesa_mcp/__init__.py @@ -2,4 +2,4 @@ __all__ = ["__version__"] -__version__ = "0.9.0" +__version__ = "0.9.1" diff --git a/pyproject.toml b/pyproject.toml index 4c81e62..f95738b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "mesa-memory" -version = "0.9.0" +version = "0.9.1" description = "Enterprise AI agent memory engine" readme = "README.md" license = {file = "LICENSE"} diff --git a/tests/test_mcp_api_boundary.py b/tests/test_mcp_api_boundary.py index d7534c3..c75169e 100644 --- a/tests/test_mcp_api_boundary.py +++ b/tests/test_mcp_api_boundary.py @@ -86,7 +86,7 @@ async def test_mcp_health_exposes_truthful_v4_capability_without_rebuild_tool( from mesa_mcp import __version__ - assert health["server_version"] == __version__ == "0.9.0" + assert health["server_version"] == __version__ == "0.9.1" assert health["v4_capability"] == { "api_version": "v4", "capabilities": {"durable_rebuild": True}, diff --git a/tests/test_profile_b_compose_env_parity.py b/tests/test_profile_b_compose_env_parity.py index 206117b..62732c3 100644 --- a/tests/test_profile_b_compose_env_parity.py +++ b/tests/test_profile_b_compose_env_parity.py @@ -152,7 +152,7 @@ def test_effective_compose_config_defaults_match_mesaconfig_contract() -> None: assert container_env[flag] == "false" assert container_env["MESA_OLLAMA_URL"] == "http://host.docker.internal:11434" service = rendered["services"]["mesa-v4"] - assert service["image"] == "mesa-memory:0.9.0" + assert service["image"] == "mesa-memory:0.9.1" assert service["read_only"] is True assert service["ports"][0]["host_ip"] == "127.0.0.1" assert "host.docker.internal:host-gateway" in { diff --git a/uv.lock b/uv.lock index 3981378..3d19068 100644 --- a/uv.lock +++ b/uv.lock @@ -2163,7 +2163,7 @@ wheels = [ [[package]] name = "mesa-memory" -version = "0.9.0" +version = "0.9.1" source = { editable = "." } dependencies = [ { name = "aiosqlite" },