Release v0.2.39 — pluggable Store/Counter backends Phase 1 of the pluggable-backend program. `Store` and `Counter` now delegate to backend instances behind their existing static/instance APIs. `OpenSwoole\\Table` / `OpenSwoole\\Atomic` remain the default (nanosecond hot path); flip to Redis/Valkey for cross-node shared state with one line in app.php (`Store::defaultBackend(Store::BACKEND_REDIS)`) or the `ZEALPHP_STORE_BACKEND=redis` env var. Every existing handler call site keeps working unchanged. Pub/sub + Streams primitives (`Store::publish` / `App::onPubSub` / `Store::publishReliable` / `App::onReliableMessage`) ship in this release backed by RedisPubSub + RedisStreams lifecycle classes. Phase 3 pub/sub design empirically de-risked via three committed spikes (in-process, cross-process, cross-host @ 0.53 ms median via wireguard). Tagged retroactively at d854b99 (the 'complete v0.2.39 version-ref bumps' commit) — the v0.2.39 content was authored but never tagged when work moved on to v0.2.40. Master branch is behind d854b99; the v0.2.40 release on top of v0.2.39 brings everything to master via PR #87. Full notes: CHANGELOG.md [0.2.39] section (kept verbatim within the v0.2.40 collapsed entry).