# Changelog

## Score

- CAI 75 → 76 (+0.1)
- Rubric changed (rubric-2026.09.9 → rubric-2026.09.17) — scores are not directly comparable.

## Lenses

- Code Health 87 → 87 (+0.0)
- Architecture 99 → 99 (+0.3)
- Maturity 60 → 62 (+1.8)
- Readiness 93 → 90 (-2.3)
- Security 86 → 86 (+0.0)

## Resolved (2)

- Documentation: contradicts the code (README.md)
- Documentation: no installation or build instructions (README.md)

## New (5)

- Confusingly similar names for potentially inverse operations. `update_and_fetch` suggests updating first then fetching the new value, while `fetch_and_update` suggests fetching the old value then updating. While the order of words might imply the return value (fetch=return old, update=return new), the naming is not immediately intuitive and risks confusion with standard `fetch_update` patterns in other libraries (like `std::collections::HashMap`'s `entry` API).
- Dependency hygiene PARTLY measured — Cargo dependencies read, no committed lock to grade for currency
- Inconsistent entry point for opening a database. `sled.open` is a convenience function that likely uses default config, while `Db.open_with_config` requires explicit configuration. This creates two different ways to achieve the same primary goal (opening a DB) with different signatures and implied defaults.
- Inverted test pyramid
- Redundant existence check. `contains_key` is a common pattern, but in Rust, `get` returning `Option` is the idiomatic way to check existence. Having both `get` and `contains_key` (which likely just calls `get` and checks for `Some`) adds API surface without significant benefit, especially since `get` is already present.
