0.1.0-rc4
Pre-release
Pre-release
- Extracted the request-local memory tier into a dedicated
MemoryTiercollaborator owned byObjectCache, delegating falsey-safe reads, object-cloning writes, per-key/group removal, and request-tier clearing. The publicObjectCachesurface is unchanged and all tests remain green. - Moved the test-only
ValueCodec::header_inline()fixture builder into the test support layer (ValueEnvelopeBuilder), so the production drop-in exposes only the public value-codec encode/decode surface. - Added a topology contract test asserting the
Apidiagnostics and Site Health paths share the singleTopologyclassifier for standalone, cluster, sentinel, replica, and incomplete identities. - Documented the intentional
try { adapter } catch { degrade + return-filled }boilerplate decision and the canonical persistent-connection identity subset used byPhpRedisAdapter::persistent_id(). - Wired the multisite
switch_blogaction so blog scope flips automatically whenever WordPress switches or restores the current blog; global groups survive the switch while non-global groups are scoped to the current blog. - Added a
wp_cache_supports()parity regression confirming the six advertised features (add_multiple,set_multiple,get_multiple,delete_multiple,flush_runtime,flush_group) are the only ones reported. - Added contract coverage for
get_multiple()$forcesemantics (bypasses request memory, reads the backend, repopulates memory), suspendedadd_multiple()/wp_cache_add()behavior, and theWP_Object_Cachealias guard so a co-resident cache is never clobbered. - Broadened third-party interop fixtures with a page-builder admin/post-save path and a caching-adjacent
get_multiple()/set_multiple()-heavy fixture, asserting no PHP diagnostics and populated hit/miss counters. - Re-verified the numeric contract matrix with no drift after the Phase 1 hot-path changes.
- Memoized
KeySpace::group_digest()per request so repeated key derivation hashes each group once, and cleaned upitem_key()string assembly (implode) without changing the wire format. - Replaced the double request-memory array probe (
exists()+ index) on the read path with a single falsey-safememory_read()probe acrossget(),get_multiple(), and the persistent read paths, preserving hit/miss accounting and cachedfalse/0/''/nullsemantics. - Added an opt-out
measure_performanceconfig key (defaulttrue) that skipsmicrotime( true )capture around backend commands while still countingbackend_calls. - Added request-memory-focused before/after benchmark evidence and re-ran the controlled RC3→RC4 comparison (no command-count regression; request-memory hit latency improved).
- Hardened memory safety: the value-envelope decoder now validates the declared payload length against the actual remaining bytes before slicing or allocating, and unit tests prove hostile/over/under-declared length fields are rejected as corrupt and that
unserializefailures are contained with no warnings. - Added object-aliasing isolation tests (contract + persistent integration) proving mutating a returned object never changes the cached copy across
set()+get(),persistent_get, andget_multiple(). - Documented the request-tier growth policy (request-scoped, unbounded by design, freed at request end, eviction deferred to v1) and surfaced the live request-tier entry count as an on-demand Site Health / diagnostics field.
- Added close-path correctness tests for runtime-only and degraded (circuit-open) states, and archived the RC3→RC4 request-memory before/after evidence (~99 bytes/entry, no regression).
- Registered the immutable
0.1.0-rc3drop-in checksum in the lifecycle ownership registry and updated the packaged lifecycle upgrade/rollback E2E testing for RC3 → RC4.