From e53275924ad16f49d9b41b6998a9be035b3f3f81 Mon Sep 17 00:00:00 2001 From: CaspianG <259116618+CaspianG@users.noreply.github.com> Date: Thu, 30 Jul 2026 18:07:44 +0300 Subject: [PATCH 1/2] Prepare WaveMind v2.9.0 --- CHANGELOG.md | 6 +++++- README.md | 2 +- .../cloud/gcp-remote-active-active/terraform.tfvars.example | 2 +- deploy/helm/wavemind/Chart.yaml | 4 ++-- deploy/helm/wavemind/values.yaml | 2 +- deploy/remote/inventory.example.json | 2 +- deploy/serverless/wavemind-serverless.sample.json | 4 ++-- docker-compose.yml | 2 +- docs/RELEASE.md | 3 ++- pyproject.toml | 2 +- wavemind/__init__.py | 2 +- 11 files changed, 18 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a16e6a42..6b17dc6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ Notable user-facing and operational changes are recorded here. Git tags, GitHub Releases, checked evidence artifacts, and package versions remain the authoritative release sources. -## Unreleased +## [2.9.0] - 2026-07-30 - Added `wavemind init` starter projects for Python, TypeScript, MCP, and Docker, plus `wavemind doctor` runtime and Experience Packet diagnostics. @@ -23,6 +23,8 @@ authoritative release sources. - Added a frozen 60/30 coding, support, and enterprise benchmark plus a strict 12-check quality admission and weekly evidence refresh. +Release: [WaveMind v2.9.0](https://github.com/CaspianG/wavemind/releases/tag/v2.9.0) + ## [2.8.0] - 2026-07-28 - Added a durable MCP memory server with remember, recall, feedback, forget, @@ -66,6 +68,7 @@ Release: [WaveMind v2.6.3](https://github.com/CaspianG/wavemind/releases/tag/v2. | Version | Published | Notes | |---|---|---| +| [v2.9.0](https://github.com/CaspianG/wavemind/releases/tag/v2.9.0) | 2026-07-30 | Trusted agent experience, safety, portability, and SDKs | | [v2.8.0](https://github.com/CaspianG/wavemind/releases/tag/v2.8.0) | 2026-07-28 | Adaptive multimodal agent memory and MCP | | [v2.7.0](https://github.com/CaspianG/wavemind/releases/tag/v2.7.0) | 2026-07-27 | Multimodal lifecycle and public presentation | | [v2.6.3](https://github.com/CaspianG/wavemind/releases/tag/v2.6.3) | 2026-07-27 | Production Memory OS release | @@ -77,6 +80,7 @@ Release: [WaveMind v2.6.3](https://github.com/CaspianG/wavemind/releases/tag/v2. See the complete [release archive](https://github.com/CaspianG/wavemind/releases) for earlier versions and attached evidence bundles. +[2.9.0]: https://github.com/CaspianG/wavemind/compare/v2.8.0...v2.9.0 [2.8.0]: https://github.com/CaspianG/wavemind/compare/v2.7.0...v2.8.0 [2.7.0]: https://github.com/CaspianG/wavemind/compare/v2.6.3...v2.7.0 [2.6.3]: https://github.com/CaspianG/wavemind/compare/v2.6.2...v2.6.3 diff --git a/README.md b/README.md index 30f0aebf..f74489a2 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ claim that one vector database should replace every other system. | Remote Redis/worker soak | 6 hours, 500/500 cycles, 2,500 attempts, zero failures or state corruption | [`memory_os_remote_worker_soak_results.json`](benchmarks/memory_os_remote_worker_soak_results.json) | | LongMemEval-V2 protocol | Strict frozen-20 smoke: official per-question haystacks, isolated A/B stores, Core `10%`, Memory OS `10%`; full strict rerun remains gated | [`strict smoke`](benchmarks/longmemeval_v2_frozen20_protocol_results.json) / [`legacy 451-question execution`](benchmarks/longmemeval_v2_small_memory_os_results.json) | | Core production readiness | `pass`, 39/39 criteria | [`production_readiness_results.json`](benchmarks/production_readiness_results.json) | -| Public package | PyPI and GitHub release `v2.8.0` | [PyPI](https://pypi.org/project/wavemind/) / [release](https://github.com/CaspianG/wavemind/releases/latest) | +| Public package | PyPI and GitHub release `v2.9.0` | [PyPI](https://pypi.org/project/wavemind/) / [release](https://github.com/CaspianG/wavemind/releases/latest) | Remote multi-region, managed serverless, 100M service evidence, and universal multimodal admission remain explicitly gated. See diff --git a/deploy/cloud/gcp-remote-active-active/terraform.tfvars.example b/deploy/cloud/gcp-remote-active-active/terraform.tfvars.example index e6ec0498..54de0a87 100644 --- a/deploy/cloud/gcp-remote-active-active/terraform.tfvars.example +++ b/deploy/cloud/gcp-remote-active-active/terraform.tfvars.example @@ -1,6 +1,6 @@ project_id = "wavemind-benchmarks" deployment_id = "wavemind-gcp-regions" -wavemind_image = "ghcr.io/caspiang/wavemind:2.8.0" +wavemind_image = "ghcr.io/caspiang/wavemind:2.9.0" # Use the public address of the machine or self-hosted runner performing SSH. ssh_source_ranges = ["203.0.113.10/32"] diff --git a/deploy/helm/wavemind/Chart.yaml b/deploy/helm/wavemind/Chart.yaml index 91e75c6a..11898aee 100644 --- a/deploy/helm/wavemind/Chart.yaml +++ b/deploy/helm/wavemind/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: wavemind description: Local-first dynamic memory layer with scheduled cluster repair type: application -version: 0.3.1 -appVersion: "2.8.0" +version: 0.3.2 +appVersion: "2.9.0" keywords: - ai - memory diff --git a/deploy/helm/wavemind/values.yaml b/deploy/helm/wavemind/values.yaml index cd85b5c3..a82cb398 100644 --- a/deploy/helm/wavemind/values.yaml +++ b/deploy/helm/wavemind/values.yaml @@ -3,7 +3,7 @@ replicationFactor: 2 image: repository: ghcr.io/caspiang/wavemind - tag: "2.8.0" + tag: "2.9.0" pullPolicy: IfNotPresent nameOverride: "" diff --git a/deploy/remote/inventory.example.json b/deploy/remote/inventory.example.json index 3ccf5021..cfbd8199 100644 --- a/deploy/remote/inventory.example.json +++ b/deploy/remote/inventory.example.json @@ -3,7 +3,7 @@ "deployment_id": "wavemind-staging", "environment": "staging", "source": "ssh-remote-production-lab", - "image": "ghcr.io/caspiang/wavemind:2.8.0", + "image": "ghcr.io/caspiang/wavemind:2.9.0", "regions": [ { "id": "eu-west", diff --git a/deploy/serverless/wavemind-serverless.sample.json b/deploy/serverless/wavemind-serverless.sample.json index 803250df..9f4e7d24 100644 --- a/deploy/serverless/wavemind-serverless.sample.json +++ b/deploy/serverless/wavemind-serverless.sample.json @@ -37,7 +37,7 @@ "containers": [ { "name": "api", - "image": "ghcr.io/caspiang/wavemind:2.8.0", + "image": "ghcr.io/caspiang/wavemind:2.9.0", "command": [ "wavemind" ], @@ -175,7 +175,7 @@ "containers": [ { "name": "api", - "image": "ghcr.io/caspiang/wavemind:2.8.0", + "image": "ghcr.io/caspiang/wavemind:2.9.0", "command": [ "wavemind" ], diff --git a/docker-compose.yml b/docker-compose.yml index d8066670..409d16f5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,7 @@ services: context: . args: INSTALL_OPTIONAL: "false" - image: wavemind:2.8.0 + image: wavemind:2.9.0 restart: unless-stopped environment: WAVEMIND_DB: /data/wavemind.sqlite3 diff --git a/docs/RELEASE.md b/docs/RELEASE.md index e2987ced..9f6cd37f 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -6,7 +6,8 @@ WaveMind uses Git tags for releases. 1. Make sure `main` is green in GitHub Actions. 2. Update the version in `pyproject.toml`, `wavemind/__init__.py`, - `deploy/helm/wavemind/Chart.yaml`, `deploy/helm/wavemind/values.yaml`, + both `version` and `appVersion` in `deploy/helm/wavemind/Chart.yaml`, + `deploy/helm/wavemind/values.yaml`, `docker-compose.yml`, `deploy/remote/inventory.example.json`, `deploy/serverless/wavemind-serverless.sample.json`, and `deploy/cloud/gcp-remote-active-active/terraform.tfvars.example`. diff --git a/pyproject.toml b/pyproject.toml index daf0880f..ec02374c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "wavemind" -version = "2.8.0" +version = "2.9.0" description = "Adaptive, local-first memory infrastructure for agents and applications" readme = "README.md" license = "MIT" diff --git a/wavemind/__init__.py b/wavemind/__init__.py index 255f38f3..e661d8e8 100644 --- a/wavemind/__init__.py +++ b/wavemind/__init__.py @@ -344,7 +344,7 @@ WorkRuntime, ) -__version__ = "2.8.0" +__version__ = "2.9.0" __all__ = [ "FieldProjector", From d763cc0b42aab373bc0bd17c472f9f2261e6e316 Mon Sep 17 00:00:00 2001 From: CaspianG <259116618+CaspianG@users.noreply.github.com> Date: Thu, 30 Jul 2026 18:19:14 +0300 Subject: [PATCH 2/2] Test release Docker starter from local wheel --- .github/workflows/full-check.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/.github/workflows/full-check.yml b/.github/workflows/full-check.yml index 0d69f3ab..52e7e315 100644 --- a/.github/workflows/full-check.yml +++ b/.github/workflows/full-check.yml @@ -465,6 +465,32 @@ jobs: run: | python -m pip install -e . python -m wavemind init /tmp/wavemind-docker-starter --template docker + python -m pip wheel . --no-deps --wheel-dir /tmp/wavemind-docker-starter + python - <<'PY' + from pathlib import Path + + import wavemind + + root = Path("/tmp/wavemind-docker-starter") + wheel = next(root.glob("wavemind-*.whl")) + dockerfile = root / "Dockerfile" + source = dockerfile.read_text(encoding="utf-8") + expected = ( + "RUN python -m pip install --no-cache-dir " + f"wavemind=={wavemind.__version__}\n" + ) + replacement = ( + f"COPY {wheel.name} /tmp/{wheel.name}\n" + f"RUN python -m pip install --no-cache-dir /tmp/{wheel.name} " + f"&& rm /tmp/{wheel.name}\n" + ) + if expected not in source: + raise SystemExit("generated Dockerfile does not pin the current version") + dockerfile.write_text( + source.replace(expected, replacement), + encoding="utf-8", + ) + PY cd /tmp/wavemind-docker-starter trap 'docker compose down --volumes --remove-orphans' EXIT WAVEMIND_PORT=18081 docker compose up -d --build --wait