From 694f59765d431768e393f307dc49a074e87aef90 Mon Sep 17 00:00:00 2001 From: "cachekit-release-bot[bot]" <247960786+cachekit-release-bot[bot]@users.noreply.github.com> Date: Thu, 3 Sep 2026 22:16:32 +0000 Subject: [PATCH 1/2] chore(main): release 0.18.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 28 ++++++++++++++++++++++++++++ pyproject.toml | 2 +- rust/Cargo.toml | 2 +- src/cachekit/__init__.py | 2 +- 5 files changed, 32 insertions(+), 4 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index b05f59a8..5e39b941 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.17.1" + ".": "0.18.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index b6a4084d..502ab5ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,33 @@ # Changelog +## [0.18.0](https://github.com/cachekit-io/cachekit-py/compare/v0.17.1...v0.18.0) (2026-09-03) + + +### ⚠ BREAKING CHANGES + +* L1CacheConfig.namespace_index is removed. The flag was read by nothing and toggled no behavior, but it shipped in v0.17.1 and docs/configuration.md documented a copy-pasteable L1CacheConfig(..., namespace_index=True) example — L1CacheConfig is a frozen dataclass, so constructors still passing it now raise TypeError instead of silently lying. L1Cache.invalidate_by_key(), .invalidate_by_namespace() and .invalidate_all() are removed with it; per-key L1Cache.invalidate() is unaffected. Same removal shape as L1CacheConfig.invalidation_enabled in v0.16.0 (LAB-520). + +### Features + +* **encryption:** keyring rotation — previous_master_keys + fingerprint selection (LAB-684) ([#261](https://github.com/cachekit-io/cachekit-py/issues/261)) ([e1b05ce](https://github.com/cachekit-io/cachekit-py/commit/e1b05ce1b5f30c63d86ab0cab6f4ddbc9af8cef6)) + + +### Bug Fixes + +* **cachekitio:** percent-encode cache key in request path (LAB-2846) ([#279](https://github.com/cachekit-io/cachekit-py/issues/279)) ([f000ba3](https://github.com/cachekit-io/cachekit-py/commit/f000ba340f84d435f04fd19ba453bb60385e9dd0)) +* **fuzz:** commit per-target corpus seeds cargo-fuzz actually loads (LAB-1149) ([#263](https://github.com/cachekit-io/cachekit-py/issues/263)) ([1b85f56](https://github.com/cachekit-io/cachekit-py/commit/1b85f5605b532bf001d3756b86a9a11a3e1ba705)) +* **l1:** delete dead backed-mode SWR machinery; docs stop claiming backed SWR (LAB-388) ([#256](https://github.com/cachekit-io/cachekit-py/issues/256)) ([878ad08](https://github.com/cachekit-io/cachekit-py/commit/878ad0860a340477257d2ac4f19f3f107f0789b4)) + + +### Performance Improvements + +* **file:** eliminate two full-payload copies on the non-mmap read path (LAB-770) ([#267](https://github.com/cachekit-io/cachekit-py/issues/267)) ([f7e236b](https://github.com/cachekit-io/cachekit-py/commit/f7e236b522010f0b18233eed91f3655629f128d0)) + + +### Code Refactoring + +* delete dead L1 namespace-index/bulk-invalidation machinery (LAB-1433) ([#258](https://github.com/cachekit-io/cachekit-py/issues/258)) ([2607faf](https://github.com/cachekit-io/cachekit-py/commit/2607fafd3d0dcd974e94788b7e5d46ee676701d4)) + ## [0.17.1](https://github.com/cachekit-io/cachekit-py/compare/v0.17.0...v0.17.1) (2026-07-29) diff --git a/pyproject.toml b/pyproject.toml index 3860e791..c6947d9f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "maturin" [project] name = "cachekit" -version = "0.17.1" +version = "0.18.0" description = "Backend-agnostic caching for Python — intent-based decorators with circuit breaker, distributed locking, Prometheus metrics, and optional zero-knowledge AES-256-GCM encryption, on a Rust-powered core. Zero-config L1 in-memory; scales to Redis, Memcached, File, or CachekitIO." readme = "README.md" license = {text = "MIT"} diff --git a/rust/Cargo.toml b/rust/Cargo.toml index aeeaf396..cbdec4a0 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cachekit-rs" -version = "0.17.1" +version = "0.18.0" edition = "2021" authors = ["cachekit Contributors"] description = "High-performance storage engine for caching with compression and encryption" diff --git a/src/cachekit/__init__.py b/src/cachekit/__init__.py index cce48355..e0f9ad3b 100644 --- a/src/cachekit/__init__.py +++ b/src/cachekit/__init__.py @@ -68,7 +68,7 @@ def custom_function(): ``` """ -__version__ = "0.17.1" +__version__ = "0.18.0" from collections.abc import Callable from typing import Any, TypeVar From d02ae1e0b2668be949cebaf7d0e5050466b133ad Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 3 Sep 2026 22:17:05 +0000 Subject: [PATCH 2/2] chore: sync lockfiles with release --- Cargo.lock | 2 +- uv.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bc8e947c..0f7c05e5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -271,7 +271,7 @@ dependencies = [ [[package]] name = "cachekit-rs" -version = "0.17.1" +version = "0.18.0" dependencies = [ "cachekit-core", "criterion", diff --git a/uv.lock b/uv.lock index 49b3a464..65822e76 100644 --- a/uv.lock +++ b/uv.lock @@ -231,7 +231,7 @@ filecache = [ [[package]] name = "cachekit" -version = "0.17.1" +version = "0.18.0" source = { editable = "." } dependencies = [ { name = "blake3" }, @@ -594,7 +594,7 @@ name = "exceptiongroup" version = "1.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" } wheels = [