# Changelog

## Score

- CAI 73 → 61 (-12.3)
- Rubric changed (rubric-2026.10.1 → rubric-2026.10.5) — scores are not directly comparable.

## Lenses

- Code Health 97 → 73 (-23.4)
- Architecture 100 → 100 (+0.1)
- Maturity 72 → 47 (-24.5)
- Readiness 68 → 68 (+0.0)
- Security 71 → 71 (+0.0)
- Performance 95 → 95 (+0.0)

## Resolved (8)

- Ambiguous distinction between 'destroy' and 'unregister'. Both pairs exist with singular and bulk variants. It is unclear if 'destroy' implies immediate resource cleanup (e.g., freeing OS semaphores) while 'unregister' implies only removing from the internal registry, or if they are functionally identical aliases. This creates confusion for users regarding lifecycle management.
- Further sole-owners (lower concentration)
- Inconsistent accessor patterns between Simple and ThreadSafe variants. `Simple.Integer` exposes `value` as a property (likely a method without parens), while `ThreadSafe.Integer` exposes `value()` as a method and `value=` as a setter. This inconsistency forces users to remember different access patterns depending on the thread-safety variant, even though the underlying intent (getting/setting an integer) is identical.
- Inconsistent retrieval/creation patterns. `register` creates, `retrieve_or_register` creates if missing, but `[]` (index access) is a standard Ruby idiom for retrieval that is not mirrored by a corresponding `[]=` or explicit `store` method for creation. Furthermore, `retrieve_or_register` takes `args` while `register` takes `options`, implying different underlying mechanisms or parameter structures for similar intents.
- Off-boarding risk: anonymized user #1
- PR-triggered workflow without a permissions block
- Redundant state query methods across multiple circuit breaker implementations. While `CircuitBreakerBehaviour` defines the interface, `AdaptiveCircuitBreaker`, `DualCircuitBreaker`, and potentially others duplicate these exact methods. If `CircuitBreakerBehaviour` is a module included in these classes, the duplication is implicit. However, if they are separate classes implementing the same interface, the API surface is bloated. More critically, `DualCircuitBreaker` exposes these methods which delegate to internal breakers, but the naming doesn't indicate which breaker's state is being queried (though `active_breaker_type` exists, the state methods are ambiguous).
- Workflow holding a long-lived secret is unscoped

## New (47)

- Ambiguous intent: `register` implies creation, but `retrieve_or_register` implies a lookup-first strategy. While distinct, the naming convention `retrieve_or_register` is verbose and inconsistent with the simple imperative style of `register`, `destroy`, and `unregister`. It suggests a 'get_or_create' pattern that isn't reflected in the other methods.
- Duplicated block (10 lines × 2) (experiments/experiments/experiment_slow_query.rb)
- Duplicated block (12 lines × 2) (experiments/experiments/experiment_oscillating_errors_adaptive.rb)
- Duplicated block (13–14 lines × 3) (experiments/experiments/experiment_error_spike_100_adaptive.rb)
- Duplicated block (15 lines × 6) (experiments/experiments/experiment_error_spike_100.rb)
- Duplicated block (16 lines × 2) (examples/net_http/07_circuit_dynamic_config.rb)
- Duplicated block (16–17 lines × 4) (examples/net_http/03_circuit_open.rb)
- Duplicated block (17 lines × 3) (examples/net_http/02_circuit_extended.rb)
- Duplicated block (18 lines × 2) (examples/net_http/05_circuit_in_threads.rb)
- Duplicated block (20 lines × 2) (examples/net_http/03_circuit_open.rb)
- Duplicated block (21 lines × 2) (examples/net_http/05_circuit_in_threads.rb)
- Duplicated block (21–23 lines × 2) (examples/net_http/03_circuit_open.rb)
- Duplicated block (5 lines × 2) (experiments/experiments/experiment_sudden_error_spikes.rb)
- Duplicated block (5 lines × 6) (experiments/experiments/experiment_error_spike_100.rb)
- Duplicated block (7 lines × 2) (experiments/experiments/experiment_gradual_increase.rb)
- Duplicated block (7 lines × 4) (experiments/experiments/experiment_error_spike_100.rb)
- Duplicated block (8 lines × 2) (experiments/experiments/experiment_gradual_increase.rb)
- Duplicated block (8 lines × 4) (experiments/experiments/experiment_near_target_error_rate.rb)
- Duplicated block (9 lines × 2) (experiments/experiments/experiment_one_of_many_services_degradation.rb)
- Duplicated block (9 lines × 3) (experiments/experiments/experiment_near_target_error_rate_adaptive.rb)
- …and 27 more
