# Changelog

## Score

- CAI 51 → 49 (-2.6)

## Lenses

- Code Health 52 → 51 (-1.8)
- Architecture 96 → 96 (+0.1)
- Maturity 64 → 67 (+3.5)
- Readiness 77 → 70 (-6.8)
- Security 38 → 33 (-4.9)
- Performance 78 → 83 (+4.3)

## Resolved (106)

- AttributeExtractor.ConvertJsonToBinary (cognitive 109) (libs/server/Resp/Vector/AttributeExtractor.cs)
- AttributeExtractor.ConvertJsonToBinary (cyclomatic 52) (libs/server/Resp/Vector/AttributeExtractor.cs)
- AttributeExtractor.ExtractFieldsBinary (cognitive 32) (libs/server/Resp/Vector/AttributeExtractor.cs)
- AttributeExtractor.ExtractFieldsBinary (cyclomatic 21) (libs/server/Resp/Vector/AttributeExtractor.cs)
- BaseConfig.BaseConfig.ctor (cyclomatic 20) (benchmark/BDN.benchmark/Program.cs)
- ClassTooLong: AttributeExtractor (libs/server/Resp/Vector/AttributeExtractor.cs)
- ClusterManager.TryMeetAsync (cognitive 19) (libs/cluster/Server/Gossip/Gossip.cs)
- Duplicated block (10 lines × 2) (libs/server/Storage/Session/MainStore/VectorStoreOps.cs)
- Duplicated block (10 lines × 2) (libs/storage/Tsavorite/cs/src/core/ClientSession/BasicContext.cs)
- Duplicated block (10 lines × 2) (libs/storage/Tsavorite/cs/src/core/ClientSession/TransactionalContext.cs)
- Duplicated block (11 lines × 3) (libs/server/Lua/LuaRunner.Functions.Struct.cs)
- Duplicated block (11 lines × 6) (libs/storage/Tsavorite/cs/src/core/Index/Tsavorite/Implementation/SplitIndex.cs)
- Duplicated block (11–12 lines × 2) (libs/server/Resp/KeyAdminCommands.cs)
- Duplicated block (11–12 lines × 2) (libs/server/Storage/Session/MainStore/VectorStoreOps.cs)
- Duplicated block (13 lines × 3) (libs/storage/Tsavorite/cs/src/core/Index/Tsavorite/Implementation/SplitIndex.cs)
- Duplicated block (15 lines × 2) (libs/storage/Tsavorite/cs/src/core/Index/Tsavorite/Implementation/SplitIndex.cs)
- Duplicated block (16 lines × 2) (libs/server/AOF/ReplayCoordinator/AofReplayCoordinator.cs)
- Duplicated block (17 lines × 2) (libs/common/Networking/NetworkHandler.cs)
- Duplicated block (17–21 lines × 2) (libs/server/Objects/Hash/HashObjectImpl.cs)
- Duplicated block (20 lines × 2) (libs/server/Lua/LuaRunner.Functions.Struct.cs)
- …and 86 more

## New (276)

- AofProcessor.StoreRMW (cyclomatic 16) (libs/server/AOF/AofProcessor.cs)
- AofReplayCoordinator.AddOrReplayTransactionOperation (cognitive 18) (libs/server/AOF/ReplayCoordinator/AofReplayCoordinator.cs)
- AofReplayCoordinator.ProcessTransactionGroup (cyclomatic 17) (libs/server/AOF/ReplayCoordinator/AofReplayCoordinator.cs)
- BarePragmaDisable (libs/server/Resp/Vector/VectorManager.Replication.cs)
- BaseConfig.BaseConfig.ctor (cognitive 17) (benchmark/BDN.benchmark/Program.cs)
- Change coupling: ClusterManagerWorkerState.cs ↔ ReplicaFailoverSession.cs (libs/cluster/Server/ClusterManagerWorkerState.cs)
- Change coupling: Gossip.cs ↔ RespClusterBasicCommands.cs (libs/cluster/Server/Gossip/Gossip.cs)
- ClusterSession.NetworkClusterGossip (cyclomatic 22) (libs/cluster/Session/RespClusterBasicCommands.cs)
- Dead code: AddHeapSize (libs/server/Storage/SizeTracker/CacheSizeTracker.cs)
- Dead code: AddReadCacheHeapSize (libs/server/Storage/SizeTracker/CacheSizeTracker.cs)
- Dead code: AfterConsistentReadKeyBatchCallback (libs/storage/Tsavorite/cs/benchmark/YCSB.benchmark/SessionFixedLenFunctions.cs)
- Dead code: AfterConsistentReadKeyCallback (libs/storage/Tsavorite/cs/benchmark/YCSB.benchmark/SessionFixedLenFunctions.cs)
- Dead code: BeforeConsistentReadCallback (libs/storage/Tsavorite/cs/benchmark/YCSB.benchmark/SessionFixedLenFunctions.cs)
- Dead code: BeforeConsistentReadKeyBatchCallback (libs/storage/Tsavorite/cs/benchmark/YCSB.benchmark/SessionFixedLenFunctions.cs)
- Dead code: BeginDeserializeValue (libs/storage/Tsavorite/cs/src/core/Index/StoreFunctions/IStoreFunctions.cs)
- Dead code: BeginSerializeValue (libs/storage/Tsavorite/cs/src/core/Index/StoreFunctions/IStoreFunctions.cs)
- Dead code: BufferSize (test/standalone/Garnet.test/ReqGen.cs)
- Dead code: ChunkHeader (libs/storage/Tsavorite/cs/src/core/Allocator/ObjectSerialization/ChunkHeader.cs)
- Dead code: ClearKeyIsInline (libs/storage/Tsavorite/cs/src/core/Allocator/RecordDataHeader.cs)
- Dead code: ClearUsers (libs/server/ACL/AccessControlList.cs)
- …and 256 more

## Changes since last survey

- 24 commits — 15 feature/other, 9 fixes

## By area

- libs/server — 8 commits
- libs/storage — 3 commits
- .github/workflows — 2 commits
- libs/cluster — 2 commits
- test/cluster — 2 commits
- (root) — 1 commit
- libs/common — 1 commit
- libs/resources — 1 commit
- test/standalone — 1 commit
- website/docs — 1 commit
- website/sidebars.js — 1 commit
- website/yarn.lock — 1 commit

## Notable commits

- fix: Bump version to 2.2.4; combined RESP fixes: HINCRBY overflow, integer-parse protocol error, expired-key checks, large PEXPIRE, SET KEEPTTL (#2259)
- fix: Exponential backoff for gossip reconnect, TLS read fix, and pub/sub large-payload forwarding (#2225)
- fix: Fix Vector Set replay after startup AOF recovery (#2231)
- fix: Fix gaps in validation around `struct.pack` and `cmsgpack.unpack` (#2269)
- fix: Fix null entries in the custom procedure session cache (#2275)
- fix: Fixes in Vector Set validation (#2276)
- fix: [Tests] Fix migration test race caused by uninitialized configuration epochs (#2248)
- fix: fix pfcount with missing key (#2270)
- fix: fix stack overflow in the Garnet server coming from Garnet's glob pattern matching logic (#2261)
- change: Add VisuaLeaf to the GUI tools tested with Garnet (#2233)
- change: Add vector set imports with XVCREATE and XVIMPORT (#2190)
- change: Build(deps): Bump follow-redirects from 1.16.0 to 1.16.1 in /website (#2271)
- change: Build(deps): Bump the github-actions group with 2 updates (#2272)
- change: Build(deps): Bump the github-actions group with 3 updates (#2241)
- change: Build: Bump version to 2.2.3 (#2254)
- change: Improve network connection handling (#2268)
- change: Prevent AOF writes during diskless checkpoint streaming (#2252)
- change: Read whole records into the scan frame when the scan end falls inside one (#2227)
- change: Remove .NET 8 support (#2230)
- change: Stop promoting Vector Set index reads to an exclusive lock (#2286)
- …and 4 more

## Architecture

- Containers 9 added · 18 removed · contexts 0 added · 0 removed · edges 0 added · 0 removed

## Added containers (9)

- cli:Bitmap
- cli:CommandInfoUpdater
- cli:Embedded.perftest
- cli:GarnetClientStress
- cli:GarnetServer
- cli:LightEpochLitmus
- cli:MigrateBench
- cli:TstRunner
- worker:Garnet.worker

## Removed containers (18)

- cli:Bitmap(net10.0)
- cli:Bitmap(net8.0)
- cli:CommandInfoUpdater(net10.0)
- cli:CommandInfoUpdater(net8.0)
- cli:Embedded.perftest(net10.0)
- cli:Embedded.perftest(net8.0)
- cli:GarnetClientStress(net10.0)
- cli:GarnetClientStress(net8.0)
- cli:GarnetServer(net10.0)
- cli:GarnetServer(net8.0)
- cli:LightEpochLitmus(net10.0)
- cli:LightEpochLitmus(net8.0)
- cli:MigrateBench(net10.0)
- cli:MigrateBench(net8.0)
- cli:TstRunner(net10.0)
- cli:TstRunner(net8.0)
- worker:Garnet.worker(net10.0)
- worker:Garnet.worker(net8.0)
