# Changelog

## Score

- CAI 66 → 64 (-1.9)
- Rubric changed (rubric-2026.10.1 → rubric-2026.10.5) — scores are not directly comparable.

## Lenses

- Code Health 99 → 75 (-24.0)
- Architecture 69 → 69 (+0.0)
- Maturity 58 → 56 (-1.5)
- Readiness 71 → 71 (+0.0)
- Security 80 → 80 (+0.0)

## Resolved (6)

- Confusing overlap between transaction and connection thresholds. `transactions_threshold` has both a setter (no args) and a getter (with connection_id), while `connection_threshold` and `set_connection_threshold` seem to duplicate the functionality of managing thresholds per connection. It is unclear if 'transaction threshold' and 'connection threshold' are the same metric or different.
- Inconsistent naming convention for state toggles. The presence of both bang (!) and non-bang versions suggests a difference in behavior (e.g., side effects vs. pure state change), but the API surface does not clarify this. Typically, bang methods imply mutation or raising errors, while non-bang might be safer or idempotent. Without clear distinction, users may call the wrong one.
- Off-boarding risk: anonymized user #1
- PR-triggered workflow without a permissions block
- Redundant boolean accessors. `disabled?` is simply the negation of `enabled?`. While sometimes useful for readability, having both exposes unnecessary complexity and potential for inconsistency if the internal state changes.
- Redundant configuration methods with ambiguous distinction. Both methods likely handle configuration setup, but it is unclear if one is for reading and the other for writing, or if they are aliases. This creates confusion for API users.

## New (5)

- Ambiguous duplication: It is unclear if `config()` retrieves the current configuration object while `configure()` mutates it, or if they are redundant aliases for the same operation. In consistent APIs, getter/setter pairs are usually explicit (e.g., `get_config`/`set_config` or just `config` as a property), or distinct verbs are used clearly (e.g., `load_config` vs `apply_config`).
- Inconsistent naming for threshold operations: `transactions_threshold` uses Ruby-style setter syntax (`=`) for setting a global/default value, while `set_connection_threshold` uses an explicit verb for setting a connection-specific value. Meanwhile, `connection_threshold` is a getter for a specific connection. The naming scheme mixes implicit setters (`=`) with explicit verbs (`set_`), and `transactions_threshold` vs `connection_threshold` suggests a potential conceptual overlap or unclear distinction between 'transaction' and 'connection' thresholds.
- PR-triggered workflow without a permissions block (.github/workflows/rspec.yml)
- PR-triggered workflow without a permissions block (.github/workflows/rubocop.yml)
- Redundant bang/non-bang pairs without clear semantic distinction in signature: The API exposes both `enable`/`enable!` and `disable`/`disable!`. Typically, the bang (`!`) implies a side effect or a forceful action, while the non-bang might be a query or a safe check. However, `enabled?()` and `disabled?()` already exist for querying state. It is unclear why `enable` and `enable!` are both present as mutators. If `enable!` is 'force enable' and `enable` is 'enable', the distinction is missing from the signature. If they are identical, one is redundant.

## Changes since last survey

- 14 commits — 9 feature/other, 5 fixes

## By area

- (repo) — 6 commits
- (root) — 3 commits
- lib/isolator — 3 commits
- spec/support — 2 commits

## Notable commits

- fix: Merge pull request #110 from viralpraxis/fix-fake-web-race-condition
- fix: Merge pull request #111 from viralpraxis/fix-fake-web-shutdown-hang
- fix: Merge pull request #112 from viralpraxis/fix-rom-adapter-require-path
- fix: fix `ROM::SQL` adapter
- fix: test suite: fix `FakeWeb` race condition leading to failure
- change: Address RuboCop offenses
- change: Don't count a BEGIN or SAVEPOINT that failed as an open transaction
- change: Don't re-add a closed connection while logging its transaction count
- change: Lower the database_cleaner threshold on the connection it was raised on (#114)
- change: Merge pull request #108 from viralpraxis/address-rubocop-issues
- change: Merge pull request #109 from viralpraxis/make-adapter-base-notify-accept-dummy-block
- change: Merge pull request #115 from ngan/np-debug-message-reads-without-writing
- change: make `Adapters::Base#notify` accept dummy block
- change: test suite: wait for `FakeWeb` to start before running specs
