# Changelog

## Score

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

## Lenses

- Code Health 90 → 71 (-19.6)
- Architecture 88 → 89 (+1.3)
- Maturity 59 → 54 (-4.8)
- Readiness 65 → 70 (+4.6)
- Security 77 → 77 (+0.0)
- Accessibility 65 → 65 (+0.0)

## Resolved (5)

- Duplicated block (8 lines × 2) (lib/solargraph/language_server/message/text_document/definition.rb)
- Inconsistent first parameter for method retrieval. ApiMap uses 'rooted_tag' while Cache and Store use 'fqns'. This forces callers to convert between a tag object and a string namespace depending on which internal component they query.
- Inconsistent parameter naming and semantics for constant retrieval. ApiMap and Cache use 'namespace' and 'contexts', while Store uses 'fqns' (fully qualified namespace) and 'visibility'. This suggests different internal representations or filtering logic that isn't reflected in a unified interface.
- Typo in class name: 'Defintion' instead of 'Definition'. This creates a confusing inconsistency with the parent namespace 'DataDefinition' and 'StructDefinition'.
- While signatures match, the existence of both ApiMap and Store with overlapping 'get_path_pins' suggests a potential duplication of intent. ApiMap is a higher-level facade, while Store is the data source. However, ApiMap also has 'get_path_suggestions', which Store lacks, indicating ApiMap adds value. The inconsistency is minor but worth noting if Store is intended to be private.

## New (5)

- Ambiguous naming for method resolution. 'get_methods' and 'get_method_stack' appear to perform similar lookups but with different return structures or depth handling. Without documentation, it is unclear if 'stack' implies inheritance resolution while 'methods' implies direct definition, or if they are redundant.
- Hotspot: lib/solargraph/parser/parser_gem/node_processors/send_node.rb (lib/solargraph/parser/parser_gem/node_processors/send_node.rb)
- Hotspot: lib/solargraph/type_checker.rb (lib/solargraph/type_checker.rb)
- Method name collision across related types with potentially different semantics. 'get_methods' exists on ApiMap, its Cache, and its Store. While this might be intentional delegation, it creates a confusing surface where the same name behaves differently depending on the layer (cache miss vs direct store access vs full resolution).
- Typo in class name: 'Defintion' instead of 'Definition'. This creates an inconsistent naming pattern compared to other classes like 'ClassDefinition' and 'DataDefinition'.

## Changes since last survey

- 16 commits — 13 feature/other, 3 fixes

## By area

- lib/solargraph — 12 commits
- (root) — 2 commits
- .github/workflows — 2 commits

## Notable commits

- fix: Fix false positive: Struct.new(keyword_init: true) members are optional (#1269)
- fix: Revert "No Collection::Rbs (#1390)" (#1413)
- fix: [regression fix] Build rugged on Ubuntu 26.04 CI runners (#1436)
- change: Add nil guard to Hover (#1389)
- change: Add nil protection to definition (#1427)
- change: Index `X = Class.new(Super)` constant assignments as classes (#1306)
- change: Loosen the Rubocop development dependency (#1428)
- change: Make `rbs validate` a blocking CI check again (#1317)
- change: Map Forwardable delegations to method pins (#1311)
- change: Map gems without YARD (#1378)
- change: No Collection::Rbs (#1390)
- change: Read implicitly-returns-nil per RBS overload, not from the first one (#1316)
- change: Release 0.61.0
- change: Resolve a self return type per union member (#1314)
- change: Stop dropping union members that differ only by type parameter (#1273)
- change: Strip nil from or-expression fallbacks in conditional branch values (#1309)
