# Changelog

## [3.8.0] — 2026-07-14

### Added

- Added follower reads with configurable staleness bounds, reducing read latency for geographically distributed clients.
- Added online range splitting for hot partitions based on sustained request rate and storage size.
- Added Prometheus metrics for Raft proposal latency, snapshot transfer progress, compaction backlog, and lease renewal failures.
- Added mutual TLS certificate rotation without restarting nodes.
- Added a `kvctl rebalance` command for previewing and applying replica-placement changes.

### Fixed

- Fixed a rare Raft deadlock triggered when a leadership transfer overlapped with snapshot installation.
- Fixed watch streams occasionally missing delete events after reconnecting with a resume token.
- Fixed excessive memory growth when clients abandoned large transactions before commit.
- Fixed incorrect disk-usage reporting for stores containing pending compaction output.
- Fixed a race that could delay lease expiration until the next scheduling interval.

### Changed

- Changed the default replica rebalancing threshold from 20% to 15% to improve cluster utilization.
- Changed snapshot transfers to use adaptive chunk sizes based on observed network throughput.
- Changed range scans to return partial progress metadata when a request deadline is exceeded.
- Changed rolling upgrades to reject versions more than one minor release apart.

## [3.7.2] — 2026-06-18

### Added

- Added request tracing fields for transaction ID, range ID, replica ID, and Raft term.
- Added a warning when node clock drift approaches the configured maximum offset.
- Added support for exporting cluster topology as JSON through `kvctl topology`.

### Fixed

- Fixed stale reads immediately after a range lease moved to another replica.
- Fixed snapshot retries consuming unbounded temporary disk space after repeated network failures.
- Fixed transaction cleanup failing when the coordinator range was split during recovery.
- Fixed an authentication cache issue that could briefly retain revoked client credentials.
- Fixed uneven replica placement when nodes had identical capacity scores.

### Changed

- Changed health checks to report `degraded` while a node is operational but unable to reach quorum.
- Changed compaction scheduling to prioritize ranges with high tombstone density.
- Changed client retry backoff to include jitter by default.

## [3.7.1] — 2026-05-27

### Added

- Added per-tenant limits for concurrent transactions, watch streams, and scan requests.
- Added structured audit events for role changes, certificate updates, and administrative range operations.
- Added an option to verify snapshot checksums before applying them to a replica.

### Fixed

- Fixed serializable transactions occasionally returning a retryable conflict after a successful commit.
- Fixed watch streams delivering duplicate events when reconnecting during a range merge.
- Fixed a panic caused by removing a node while its replicas were being rebalanced.
- Fixed slow startup when replaying write-ahead logs containing many expired leases.
- Fixed incorrect `NOT_FOUND` responses for keys written immediately before a follower caught up.

### Changed

- Changed the default maximum transaction duration from 60 seconds to 45 seconds.
- Changed log rotation to preserve compressed logs by total size instead of file count.
- Changed decommissioning to wait for all replica removals to reach quorum before marking a node as retired.