Skip to content

Conversation

@bolshakov
Copy link
Owner

@bolshakov bolshakov commented Jan 5, 2026

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":

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

@bolshakov bolshakov force-pushed the feature/strict-type-checking branch 3 times, most recently from e54d438 to 5616139 Compare January 5, 2026 21:25
@bolshakov bolshakov changed the title --wip-- [skip ci] Enable strict type checking across Wiring layer Jan 5, 2026
@bolshakov bolshakov marked this pull request as ready for review January 5, 2026 21:25
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
@bolshakov bolshakov force-pushed the feature/strict-type-checking branch from 5616139 to 6ed0f1e Compare January 6, 2026 08:47
@bolshakov bolshakov merged commit 04abb18 into develop Jan 6, 2026
31 checks passed
@bolshakov bolshakov deleted the feature/strict-type-checking branch January 6, 2026 08:56
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