# Changelog

## Score

- CAI 62 → 58 (-4.1)
- Rubric changed (rubric-2026.10.1 → rubric-2026.10.5) — scores are not directly comparable.

## Lenses

- Code Health 100 → 76 (-24.2)
- Architecture 69 → 69 (+0.0)
- Maturity 49 → 43 (-5.9)
- Readiness 69 → 69 (+0.0)
- Security 82 → 81 (-1.3)

## Resolved (4)

- Inconsistent naming for removal operations across collection types. `Hash` uses `delete`, while `List`, `Set`, `OrderedSet`, and `UniqueList` use `remove`. In Ruby, `Array` uses `delete`/`delete_at` and `Set` uses `delete`/`remove`. `Hash` uses `delete`. `List` (acting as Array) uses `remove`. This is a minor inconsistency. `Hash#delete` vs `List#remove`. `Set#remove` vs `Set#delete` (Ruby's Set has both, but `remove` is preferred for single elements). `List#remove` is not standard Ruby Array naming (which is `delete` or `delete_at`).
- Inconsistent parameter naming convention. Most other types use `by` or no explicit named parameter for magnitude, but `Counter` uses `by` which is clear, however, looking at `Flag#mark(expires_in, force)` vs `Limiter#poke()` vs `Counter#increment(by)`, the verb-noun pairing is inconsistent. Specifically, `Counter` uses `increment`/`decrement` while `Flag` uses `mark`/`remove`. This is a domain difference, not an API inconsistency.
- PR-triggered workflow without a permissions block
- Potential inconsistency in `Kredis.Types.Counter#increment(by)` and `Kredis.Types.Counter#decrement(by)` vs `Kredis.Types.Flag#mark(expires_in, force)`. The `Counter` methods take a magnitude, while `Flag` takes configuration. This is domain-specific.

## New (7)

- High CVE: [GHSA redacted] (Gemfile.lock)
- Inconsistent naming for bulk vs single operations. `delete` takes keys (plural), while `remove` takes no arguments (implies clearing the whole hash). In other types, `clear` is used for emptying (e.g., List.clear, Set.clear). `remove` is ambiguous: does it remove the hash itself or its contents? `delete` is used for specific keys, but `remove` is used for the whole structure. This is inconsistent with `List.clear` and `Set.clear`.
- Inconsistent naming for collection modification. `prepend` and `append` are used in List, UniqueList, and OrderedSet. However, Set uses `add` and `remove`. While `add`/`remove` is standard for Sets, `prepend`/`append` is specific to ordered collections. The inconsistency lies in the fact that `OrderedSet` behaves like a Set (no duplicates) but uses List-like methods (`prepend`/`append`), whereas `Set` uses `add`/`remove`. This creates a cognitive load where the user must remember the collection type to know the method name.
- Inconsistent naming for state mutation vs query. `mark` sets the flag, but `remove` deletes it. In other types (e.g., Counter, Enum), `reset` is used to clear state. `remove` implies deletion of the object/key rather than resetting the state, which is inconsistent with `reset` used in Counter and Enum.
- Orphaned file (lib/kredis/attributes.rb)
- Orphaned file (lib/kredis/types.rb)
- PR-triggered workflow without a permissions block (.github/workflows/ci.yml)
