Skip to content

Release/v6.0.0#606

Draft
bolshakov wants to merge 66 commits intomainfrom
release/v6.0.0
Draft

Release/v6.0.0#606
bolshakov wants to merge 66 commits intomainfrom
release/v6.0.0

Conversation

@bolshakov
Copy link
Owner

No description provided.

bolshakov and others added 30 commits December 6, 2025 09:37
Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.268.0 to 1.269.0.
- [Release notes](https://github.com/ruby/setup-ruby/releases)
- [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb)
- [Commits](ruby/setup-ruby@8aeb6ff...d697be2)

---
updated-dependencies:
- dependency-name: ruby/setup-ruby
  dependency-version: 1.269.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [connection_pool](https://github.com/mperham/connection_pool) from 2.5.5 to 3.0.2.
- [Changelog](https://github.com/mperham/connection_pool/blob/main/Changes.md)
- [Commits](mperham/connection_pool@v2.5.5...v3.0.2)

---
updated-dependencies:
- dependency-name: connection_pool
  dependency-version: 3.0.2
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [step-security/harden-runner](https://github.com/step-security/harden-runner) from 2.13.3 to 2.14.0.
- [Release notes](https://github.com/step-security/harden-runner/releases)
- [Commits](step-security/harden-runner@df199fb...20cf305)

---
updated-dependencies:
- dependency-name: step-security/harden-runner
  dependency-version: 2.14.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Systems enforce configuration consistency - creating the same light name
with different settings raises ConfigurationError. Lights are cached
within their system.

API is private (`__stoplight__system`, `__stoplight__reset!`) pending
Redis key isolation in the stores refactoring.
Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.269.0 to 1.270.0.
- [Release notes](https://github.com/ruby/setup-ruby/releases)
- [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb)
- [Commits](ruby/setup-ruby@d697be2...ac793fd)

---
updated-dependencies:
- dependency-name: ruby/setup-ruby
  dependency-version: 1.270.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [concurrent-ruby-ext](http://www.concurrent-ruby.com) from 1.3.5 to 1.3.6.

---
updated-dependencies:
- dependency-name: concurrent-ruby-ext
  dependency-version: 1.3.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [cucumber](https://github.com/cucumber/cucumber-ruby) from 10.1.1 to 10.2.0.
- [Release notes](https://github.com/cucumber/cucumber-ruby/releases)
- [Changelog](https://github.com/cucumber/cucumber-ruby/blob/main/CHANGELOG.md)
- [Commits](cucumber/cucumber-ruby@v10.1.1...v10.2.0)

---
updated-dependencies:
- dependency-name: cucumber
  dependency-version: 10.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [concurrent-ruby](https://github.com/ruby-concurrency/concurrent-ruby) from 1.3.5 to 1.3.6.
- [Release notes](https://github.com/ruby-concurrency/concurrent-ruby/releases)
- [Changelog](https://github.com/ruby-concurrency/concurrent-ruby/blob/master/CHANGELOG.md)
- [Commits](ruby-concurrency/concurrent-ruby@v1.3.5...v1.3.6)

---
updated-dependencies:
- dependency-name: concurrent-ruby
  dependency-version: 1.3.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.270.0 to 1.271.0.
- [Release notes](https://github.com/ruby/setup-ruby/releases)
- [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb)
- [Commits](ruby/setup-ruby@ac793fd...f8d7259)

---
updated-dependencies:
- dependency-name: ruby/setup-ruby
  dependency-version: 1.271.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Introduce `Stoplight::Domain::Clock` interface and `Stoplight::Infrastructure::SystemClock`
implementation to centralize how Stoplight obtains and interprets time.

- `Domain::Clock`: abstract wall-clock interface defining `#current_time`
  and `#at` methods
- `Infrastructure::SystemClock`: production implementation using Ruby's `Time` class

All time-dependent components should use this interface rather than
calling `Time` methods directly.
Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.271.0 to 1.274.0.
- [Release notes](https://github.com/ruby/setup-ruby/releases)
- [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb)
- [Commits](ruby/setup-ruby@f8d7259...ed55d55)

---
updated-dependencies:
- dependency-name: ruby/setup-ruby
  dependency-version: 1.274.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3.11.1 to 3.12.0.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](docker/setup-buildx-action@e468171...8d2750c)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-version: 3.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.274.0 to 1.275.0.
- [Release notes](https://github.com/ruby/setup-ruby/releases)
- [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb)
- [Commits](ruby/setup-ruby@ed55d55...d354de1)

---
updated-dependencies:
- dependency-name: ruby/setup-ruby
  dependency-version: 1.275.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [zeitwerk](https://github.com/fxn/zeitwerk) from 2.7.3 to 2.7.4.
- [Changelog](https://github.com/fxn/zeitwerk/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fxn/zeitwerk/commits)

---
updated-dependencies:
- dependency-name: zeitwerk
  dependency-version: 2.7.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [debug](https://github.com/ruby/debug) from 1.11.0 to 1.11.1.
- [Release notes](https://github.com/ruby/debug/releases)
- [Commits](ruby/debug@v1.11.0...v1.11.1)

---
updated-dependencies:
- dependency-name: debug
  dependency-version: 1.11.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Continues storage abstraction separation by extracting state management from DataStore into dedicated per-circuit storage instances.

Previously, we introduced the `Domain::Storage::State` interface. This PR implements the actual storage classes following the same pattern as recovery locks.

**Before:** DataStore handled state for ALL circuits:

```ruby
data_store.set_state(config, state)
snapshot = data_store.get_state_snapshot(config)
first_to_transition = data_store.transition_to_color(config, Color::RED)
```

**After:** each circuit has its own state storage instance:

```ruby
state_store = Memory::State.new(clock:, cool_off_time:)  # Per circuit
state_store.set_state(state)  # No config needed - knows its circuit
snapshot = state_store.state_snapshot
first_to_transition = state_store.transition_to_color(Color::RED)
```

Also introduces `Domain::Clock` interface with `Infrastructure::SystemClock` implementation, making time dependencies explicit and testable.

The Redis implementation is composed with `FailSafe::State` decorator for automatic memory failover, wired in `LightBuilder`.
Completes storage abstraction separation by extracting recovery lock coordination from DataStore into dedicated per-circuit storage instances.

[Previous PR] introduced `Domain::Storage::RecoveryLock` interface with compatibility adapter. This PR implements the actual storage classes and removes DataStore's lock responsibilities entirely.

Before: DataStore handled locks for ALL circuits

```ruby
token = data_store.acquire_recovery_lock(config)
data_store.release_recovery_lock(token)
```

After: each circuit has its own lock storage instance

```
recovery_lock_store = Memory::RecoveryLock.new  # Per circuit
token = recovery_lock_store.acquire_lock()  # No config needed - knows its circuit
recovery_lock_store.release_lock(token)
```

[Previous PR]: #530
Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.275.0 to 1.276.0.
- [Release notes](https://github.com/ruby/setup-ruby/releases)
- [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb)
- [Commits](ruby/setup-ruby@d354de1...ae195bb)

---
updated-dependencies:
- dependency-name: ruby/setup-ruby
  dependency-version: 1.276.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
bolshakov and others added 30 commits January 1, 2026 13:15
This PR refactors the storage wiring layer to eliminate nested conditionals and enable proper RBS type checking. The core change introduces a DataStoreBackend abstraction that encapsulates all storage construction for a specific data store type (Memory or Redis).
Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.278.0 to 1.279.0.
- [Release notes](https://github.com/ruby/setup-ruby/releases)
- [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb)
- [Commits](ruby/setup-ruby@4c24fa5...b90be12)

---
updated-dependencies:
- dependency-name: ruby/setup-ruby
  dependency-version: 1.279.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Remove Steep ignores for core Wiring components, bringing them under
strict type checking. Previously only Domain and Infrastructure layers
were fully typed.

Replaced `**settings` hash splats with explicit keyword parameters throughout
the public API. Hash splats defeat static analysis since Steep can't infer
which keys are valid.

Required to type optional parameters that accept `nil` as a valid value.
Without this, we can't distinguish "user passed nil" from "user passed nothing":

```ruby
def light(name, threshold: T.undefined, window_size: T.undefined)
```

Internal representation for Settings that preserves the configured/unconfigured
distinction through the configuration pipeline. Enables typed traversal from
user input to resolved Config.

Replaces ad-hoc `Hash[Symbol, untyped]` with a typed container that Steep
can reason about.

- `ConfigNormalizer` - logic moved into `ConfigurationPipeline`
- Hash-based settings passing throughout factory classes
Move domain concepts to top-level Stoplight namespace:
- Domain::Color -> Stoplight::Color
- Domain::State -> Stoplight::State
- Domain::Error -> Stoplight::Error
- Wiring::DataStore::* -> Stoplight::DataStore::*
- Infrastructure::Notifier::* aliased at Stoplight::Notifier::*

Remove inheritance-based extension points:
- DataStore::Base removed (was empty abstract class)

Introduce RBS interface types for public contracts:
- _Light: core circuit breaker operations
- _Configuration: configure block interface
- _StateTransitionNotifier: notification duck type
- _ExceptionMatcher: flexible error matching (Class, Proc, etc.)
- _LightInfo: minimal context passed to notifiers

Reorganize type signatures:
- Public API types remain in sig/
- Implementation details moved to sig/_private/
- Port interfaces extracted to sig/stoplight/ports/

Remove Wiring::PublicApi module—aliases now live directly in their
respective files under lib/stoplight/.

Breaking changes documented in UPGRADING.md.
Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.279.0 to 1.280.0.
- [Release notes](https://github.com/ruby/setup-ruby/releases)
- [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb)
- [Commits](ruby/setup-ruby@b90be12...d5f787c)

---
updated-dependencies:
- dependency-name: ruby/setup-ruby
  dependency-version: 1.280.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Remove inheritance-based abstractions in favor of RBS interface
definitions, embracing Ruby's duck typing philosophy while maintaining
static type safety through Steep.
Remove the intermediate Settings representation and Option type (Some/None)
abstraction in favor of using Domain::Config directly with the existing
Undefined sentinel pattern.

Previously, defaults were injected lazily at light creation time. Settings
tracked whether each value was explicitly configured (Some) or not (None),
and ConfigurationPipeline resolved None values to defaults at the end.

Now, configuration starts with DefaultConfig containing all default values,
and user-provided values extend/override them immediately via Config#with.
This "defaults-first" approach is simpler and makes the effective
configuration visible earlier in the pipeline.

Old flow:
  User DSL → Settings (Option-wrapped) → ConfigurationPipeline → Config
  (defaults injected here)

New flow:
  DefaultConfig → extend with user values → Config (validated)
  (starts with defaults)

This reduces indirection and makes the configuration flow clearer.
ConfigurationDsl handles interpreting user-friendly values (symbols,
single error classes) into canonical forms before merging.
Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.280.0 to 1.281.0.
- [Release notes](https://github.com/ruby/setup-ruby/releases)
- [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb)
- [Commits](ruby/setup-ruby@d5f787c...675dd7b)

---
updated-dependencies:
- dependency-name: ruby/setup-ruby
  dependency-version: 1.281.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [step-security/harden-runner](https://github.com/step-security/harden-runner) from 2.14.0 to 2.14.1.
- [Release notes](https://github.com/step-security/harden-runner/releases)
- [Commits](step-security/harden-runner@20cf305...e3f713f)

---
updated-dependencies:
- dependency-name: step-security/harden-runner
  dependency-version: 2.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [puma](https://github.com/puma/puma) from 7.1.0 to 7.2.0.
- [Release notes](https://github.com/puma/puma/releases)
- [Changelog](https://github.com/puma/puma/blob/main/History.md)
- [Commits](puma/puma@v7.1.0...v7.2.0)

---
updated-dependencies:
- dependency-name: puma
  dependency-version: 7.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@8e8c483...de0fac2)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [standard](https://github.com/standardrb/standard) from 1.52.0 to 1.53.0.
- [Release notes](https://github.com/standardrb/standard/releases)
- [Changelog](https://github.com/standardrb/standard/blob/main/CHANGELOG.md)
- [Commits](standardrb/standard@v1.52.0...v1.53.0)

---
updated-dependencies:
- dependency-name: standard
  dependency-version: 1.53.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.281.0 to 1.286.0.
- [Release notes](https://github.com/ruby/setup-ruby/releases)
- [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb)
- [Commits](ruby/setup-ruby@675dd7b...90be115)

---
updated-dependencies:
- dependency-name: ruby/setup-ruby
  dependency-version: 1.286.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [docker/login-action](https://github.com/docker/login-action) from 3.6.0 to 3.7.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](docker/login-action@5e57cd1...c94ce9f)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: 3.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.286.0 to 1.288.0.
- [Release notes](https://github.com/ruby/setup-ruby/releases)
- [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb)
- [Commits](ruby/setup-ruby@90be115...09a7688)

---
updated-dependencies:
- dependency-name: ruby/setup-ruby
  dependency-version: 1.288.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants