# Changelog

## [3.8.0] - 2026-07-14

### Added

- Added follower reads with configurable staleness bounds to reduce latency for read-heavy workloads.
- Added incremental snapshot streaming, lowering peak disk usage during replica recovery.
- Added per-tenant request, storage, and watch-stream quotas.
- Added Prometheus metrics for Raft proposal latency, compaction backlog, and snapshot transfer progress.
- Added rolling upgrade validation to detect incompatible configuration and protocol versions before restart.

### Fixed

- Fixed a rare Raft deadlock triggered when leadership changed during snapshot installation.
- Fixed watch streams occasionally missing delete events after automatic compaction.
- Fixed incorrect lease expiration after a node restarted with a large clock offset.
- Fixed unbounded memory growth when clients repeatedly opened and abandoned transactions.
- Fixed range scans returning duplicate keys while replicas were rebalancing.

### Changed

- Changed the default snapshot compression algorithm from gzip to Zstandard.
- Improved hot-key detection by using per-shard sampling instead of cluster-wide averages.
- Reduced write amplification during compaction for workloads with frequent overwrites.
- Deprecated the legacy v1 client protocol; it will be removed in version 4.0.

## [3.7.2] - 2026-06-18

### Added

- Added an administrative endpoint for inspecting pending replica transfers.
- Added client-visible retry hints when requests fail because a shard leader is unavailable.
- Added audit events for role changes, backup deletion, and encryption-key rotation.

### Fixed

- Fixed replica transfers stalling when the destination node briefly lost connectivity.
- Fixed serializable transactions incorrectly reporting conflicts for disjoint key ranges.
- Fixed backup verification failing when object storage returned paginated listings out of order.
- Fixed TLS certificate reloads dropping established client connections.
- Fixed a race that could leave expired leases visible until the next maintenance cycle.

### Changed

- Increased the default election timeout on high-latency deployments to reduce unnecessary leader changes.
- Improved error messages for malformed cluster join tokens.
- Reduced log noise from transient peer health-check failures.

## [3.7.1] - 2026-05-27

### Added

- Added support for rotating encryption-at-rest keys without taking nodes offline.
- Added optional checksum validation for backup manifests and snapshot chunks.
- Added shard-level disk usage to the cluster status command.

### Fixed

- Fixed nodes failing to rejoin after their advertised address changed.
- Fixed compaction incorrectly removing a transaction’s historical reads under sustained write load.
- Fixed large batch writes exceeding the configured request limit after decompression.
- Fixed stale cluster membership data being served immediately after a control-plane failover.
- Fixed restore operations preserving obsolete replica placement metadata.

### Changed

- Changed backup uploads to use bounded concurrency, preventing object-storage traffic from starving foreground requests.
- Improved replica placement to avoid concentrating leaders in a single availability zone.
- Updated the client retry policy to apply jitter to leader-election and rate-limit backoffs.