Repository navigation
chore(main): release 0.23.0 - #511
Open
cachekit-release-bot[bot] wants to merge 2 commits into
Open
cachekit-release-bot[bot] wants to merge 2 commits into
cachekit-release-bot[bot] wants to merge 2 commits into
Conversation
|
Important Review skippedBot user detected. To trigger a single review, invoke the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
cachekit-release-bot
Bot
force-pushed
the
release-please--branches--main--components--cachekit
branch
25 times, most recently
from
October 6, 2026 03:16
916adcb to
cf1103e
Compare
cachekit-release-bot
Bot
force-pushed
the
release-please--branches--main--components--cachekit
branch
25 times, most recently
from
October 10, 2026 02:47
c46ff09 to
d6bbf5f
Compare
cachekit-release-bot
Bot
force-pushed
the
release-please--branches--main--components--cachekit
branch
from
October 10, 2026 04:40
d6bbf5f to
16d2298
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🤖 I have created a release beep boop
0.23.0 (2026-10-10)
⚠ BREAKING CHANGES
BackendError.original_exceptionand__cause__for a redis-py failure are now aRedisClientError, not redis-py's exception. Code that checkedisinstance(err.original_exception, redis.exceptions.AuthenticationError)should checkissubclass(err.original_exception.exc_type, ...). ARedisBackenderror carried nooriginal_exceptionbefore; it now carries the sameRedisClientError.repr(RedisBackendConfig(...))andstr(...)no longer showredis_url; the attribute is unchanged.MonitoringConfig.enable_tracing(passing it raisesTypeError), theenable_tracingkey ofDecoratorConfig.to_dict(),create_cache_wrapper(enable_tracing=),FeatureOrchestrator.create_span,FeatureOrchestrator.set_span_attributes,FeatureOrchestrator.record_exception,handle_cache_error(span=), andStructuredLogger.set_trace_id/clear_trace_id. A failed sync client creation or L2 GET no longer records a secondcache_operations_totalsample withoperation="exception"; it records one failure sample, as the async paths do.master_key=on@cache,@cache.secure,DecoratorConfig.secure(),EncryptionConfig,CacheSerializationHandlerandvalidate_encryption_configraisesTypeErrorfor abytes,bytearrayormemoryviewkey: passkey.hex(). OnlyEncryptionWrappertakes raw key bytes. With encryption on, such a key already failed, withAttributeError. With encryption unset, the decorator raisedConfigurationErrorfor it, and now raisesTypeError. With encryption off (encryption=False,EncryptionConfig(enabled=False)) it was accepted, and failed only when an encrypted entry was read; it now raises where it is passed. On Python 3.14,CacheSerializationHandlerread a bytes key holding ASCII hex digits as that hex; it now raises too.@cache(config=..., encryption=...)raisesConfigurationErrorwhen the config is encrypted (DecoratorConfig.secure(...), or a config built withencryption=EncryptionConfig(enabled=True, ...)), and@cache(config=DecoratorConfig.io(...), backend=...)raisesConfigurationError. A keyword that names noDecoratorConfigfield raisesConfigurationError, notTypeError, from@cache, from every preset but@cache.local, from theDecoratorConfigpreset classmethods and besideconfig=; so doesencryption=on@cache.secureandDecoratorConfig.secure().EncryptionWrapper(master_key=...)raisesEncryptionError, andprevious_master_keys=raisesKeyringConfigurationError, for a raw key that is not exactly 32 bytes: passbytes.fromhex(hex_key), neverhex_key.encode().EncryptionWrappernow raisesConfigurationErrorat construction when its serializer's class does not declarecross_sdk_compatible = True.AutoSerializerand unmarked custom serializers are refused. This is a breaking change for code that builds the wrapper directly aroundAutoSerializer.CACHEKIT_ALLOW_CUSTOM_HOST=true. A custom host with non-ASCII characters must be given in its ASCII (xn--) form.DecoratorConfig().backendisUNSET, notNone.UNSETis falsy, soif config.backend:reads as before, andto_dict()still reports an unset backend asNone. Code that testsconfig.backend is Noneon an unset backend must testis UNSETinstead. Type checkers now seeUNSETin the field's type, so narrowing withis not Noneand then using the value as a backend is flagged; narrow withif config.backend:oris not UNSET.DecoratorConfig(..., backend=None)and every preset withbackend=Nonenow mean L1-only instead of "resolve the default backend". To keep the old behaviour, omitbackendfrom the config.DecoratorConfig.secure(..., backend=None)and an interop config withbackend=None, which decorated before, now raiseConfigurationErrorat decoration.MemcachedBackendwith akey_prefix, the tenant-scoped Redis backend from env auto-detection orRedisBackendProvider, or a custom backend with a non-emptykey_prefix) no longer authenticate. By default each one is read once as a miss, counted asauth_tamper, recomputed and overwritten. Withfail_closed=True, every read of one raisesDecryptionAuthenticationErroruntil it expires or is deleted. Delete those entries, or move the cache to a fresh key space (a newnamespaceor Memcachedkey_prefix), rather than wait out the TTL. During a rolling upgrade, old and new processes read each other's writes as failed authentication, so give the new release a fresh key space or stop the old processes first. There is no fallback to the earlier AAD. Unaffected: aRedisBackendyou construct yourself,FileBackend,CachekitIOBackend, and interop mode.Bug Fixes
Performance Improvements
This PR was generated with Release Please. See documentation.