Skip to content

Integration test: 2026-10-19 - #213

Open
apiology wants to merge 1042 commits into
masterfrom
2026-10-19
Open

apiology wants to merge 1042 commits into
masterfrom
2026-10-19

Conversation

@apiology

@apiology apiology commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner

Claude: This PR was written by Claude Code on behalf of @apiology.

Problem:

Open PRs are tested only one at a time:

castwide/solargraph PRs, each tested only against its own base

A conflict between two of them would surface only after both merge.

Solution:

Merges every PR below into one branch so CI runs on the combination.

castwide/solargraph PRs included

  1. [regression fix] Make RuboCop block CI again, and auto-prune .rubocop_todo.yml castwide/solargraph#1260 — [regression fix] Make RuboCop block CI again, and auto-prune .rubocop_todo.yml
  2. [regression fix] Show undercover failures as a failed check without blocking merge castwide/solargraph#1047 — [regression fix] Show undercover failures as a failed check without blocking merge
  3. Spec performance fixes castwide/solargraph#1237 — Spec performance fixes
  4. [regression fix] Stop asserts crash on ivars in module_function methods castwide/solargraph#1429 — [regression fix] Stop asserts crash on ivars in module_function methods
  5. [regression fix] Resolve aliases of top-level methods castwide/solargraph#1430 — [regression fix] Resolve aliases of top-level methods
  6. [regression fix] Accept aliases of macro-defined methods with assertions on castwide/solargraph#1431 — [regression fix] Accept aliases of macro-defined methods with assertions on
  7. [regression fix] Stop closure asserts on methods in class << self and Struct.new blocks castwide/solargraph#1433 — [regression fix] Stop closure asserts on methods in class << self and Struct.new blocks
  8. [regression fix] Close @!attribute directive pins over their class, not the documented method castwide/solargraph#1432 — [regression fix] Close @!attribute directive pins over their class, not the documented method
  9. Fix a nil crash and missing nil checks across the parser, type checker and RBS handling castwide/solargraph#1245 — Fix a nil crash and missing nil checks across the parser, type checker and RBS handling
  10. [regression fix] Fix and re-enable strong-level typechecking in CI castwide/solargraph#1240 — [regression fix] Fix and re-enable strong-level typechecking in CI
  11. [regression fix] Stop rerunning a gem cache command that failed castwide/solargraph#1442 — [regression fix] Stop rerunning a gem cache command that failed
  12. [regression fix] Let conventions add source paths when mapping gems castwide/solargraph#1404 — [regression fix] Let conventions add source paths when mapping gems
  13. [regression fix] Create accessor pins for ActiveSupport macros in gem source castwide/solargraph#1446 — [regression fix] Create accessor pins for ActiveSupport macros in gem source
  14. [regression fix] Load Solargraph plugin gems when caching gems castwide/solargraph#1407 — [regression fix] Give gem caches the workspace's plugins
  15. [regression fix] Let solargraph-rails spec failures fail CI again castwide/solargraph#1321 — [regression fix] Let solargraph-rails spec failures fail CI again
  16. [regression fix] Let overcommit failures fail CI again castwide/solargraph#1448 — [regression fix] Let overcommit failures fail CI again
  17. Read AST children with typesafe pattern-matching castwide/solargraph#1418 — Read AST children with typesafe pattern-matching
  18. Fix raise/fail nil guards, root-scoped is_a?, case/when, ||=, and namespace-scope narrowing in flow-sensitive typing castwide/solargraph#1259 — Fix raise/fail nil guards, root-scoped is_a?, case/when, ||=, and namespace-scope narrowing in flow-sensitive typing
  19. Replace .first/.last with fetch on never-empty arrays castwide/solargraph#1392 — Replace .first/.last with fetch on never-empty arrays
  20. [regression fix] Fix typecheck crash on ivars assigned in a superclass file castwide/solargraph#1450 — [regression fix] Fix typecheck crash on ivars assigned in a superclass file (carries in castwide/master 48909fb: Don't diagnose nil when another tick drains the queue castwide/solargraph#1426, Accept anonymous argument forwarding in strong typecheck castwide/solargraph#1400, Resolve instance variable type when assigned only in an ancestor class's method castwide/solargraph#1345, Apply @!override to constants instead of crashing the typechecker castwide/solargraph#1305, Resolve generic type variables against union @param types castwide/solargraph#1299, ensure clause breaks return type inference castwide/solargraph#1285, Improved RBS type alias support castwide/solargraph#1281, Bind reopened generic parameters by position castwide/solargraph#1411, Resolve class methods added by self.included hooks castwide/solargraph#1405, Define Boolean so its operators resolve castwide/solargraph#1351, Stop reporting a duck type's own method as unresolved castwide/solargraph#1280)
  21. [regression fix] Resolve requires from git- and path-sourced gems castwide/solargraph#1402 — [regression fix] Resolve requires from git- and path-sourced gems
  22. Type pattern-match captures and narrow case/in subjects castwide/solargraph#1416 — Type pattern-match captures and narrow case/in subjects
  23. Fix unresolved method-level generic block parameters castwide/solargraph#1326 — Fix unresolved method-level generic block parameters
  24. Add Range.from_node! for nodes that always have a location castwide/solargraph#1394 — Add Range.from_node! for nodes that always have a location
  25. Use location! where a pin's location is always set castwide/solargraph#1399 — Use location! where a pin's location is always set
  26. Narrow other via self.class == other.class in flow-sensitive typing castwide/solargraph#1367 — Narrow other via self.class == other.class in flow-sensitive typing
  27. Treat zero-start Range slices of Array and String as non-nil castwide/solargraph#1395 — Treat zero-start Range slices of Array and String as non-nil
  28. Use Hash#fetch for keys RuboCop JSON and LSP always send castwide/solargraph#1398 — Use Hash#fetch for keys RuboCop JSON and LSP always send
  29. Keep the generic return type when a method takes a block castwide/solargraph#1274 — Keep the generic return type when a method takes a block
  30. Report a bad config value instead of ignoring it castwide/solargraph#1366 — Report a bad config value instead of ignoring it
  31. Remove every unioned type flow-sensitive-typing rules out castwide/solargraph#1277 — Remove every unioned type flow-sensitive-typing rules out
  32. Inline is_ast_node? guards so flow-sensitive typing can narrow the node castwide/solargraph#1396 — Inline is_ast_node? guards so flow-sensitive typing can narrow the node
  33. Use closure! where a pin's closure is always set castwide/solargraph#1393 — Use closure! where a pin's closure is always set
  34. Resolve inline RBS type names in the enclosing namespace castwide/solargraph#1447 — Resolve inline RBS type names in the enclosing namespace
  35. Narrow select results to the class their block checks castwide/solargraph#1438 — Narrow select results to the class their block checks
  36. Conform to modules included by an unqualified name castwide/solargraph#1437 — Conform to modules included by an unqualified name
  37. Recover the typecheck memory lost to Ruby 3.2 object shapes castwide/solargraph#1401 — Recover the typecheck memory lost to Ruby 3.2 object shapes
  38. Type attribute and index assignments as their RHS castwide/solargraph#1425 — Type attribute and index assignments as their RHS
  39. Typecheck calls made with safe navigation castwide/solargraph#1443 — Typecheck calls made with safe navigation
  40. Fix a nil crash and missing nil checks across the parser, type checker and RBS handling castwide/solargraph#1245 — Fix a nil crash and missing nil checks across the parser, type checker and RBS handling
  41. Read AST children with typesafe pattern-matching castwide/solargraph#1418 — Read AST children with typesafe pattern-matching
  42. Restore declared literal types without inferring them from code castwide/solargraph#1451 — Restore declared literal types without inferring them from code
  43. Type method parameters from inline RBS signatures castwide/solargraph#1441 — Type method parameters from inline RBS signatures (carries in castwide/master c323ef1: [regression fix] Stop rerunning a gem cache command that failed castwide/solargraph#1442, Keep the generic return type when a method takes a block castwide/solargraph#1274, Remove Dispatch#update's hidden assumption that self is a Host castwide/solargraph#1440, Read anonymous <A>, (A) and {A=>B} types as Array, Array and Hash castwide/solargraph#1454, New Plugin architecture with ActiveSupport implementation castwide/solargraph#1435, Keep the adapter spec from hanging in Backport.run castwide/solargraph#1449, Stop mapping a gem's non-sig RBS as its API castwide/solargraph#1453, Type variables from rbs-inline #: assertions on assignments castwide/solargraph#1444, Resolve inline RBS type names in the enclosing namespace castwide/solargraph#1447, Enable pending clip spec castwide/solargraph#1462)
  44. Declare ApiMap::Index's default-proc hashes non-nil castwide/solargraph#1422 — Declare ApiMap::Index's default-proc hashes non-nil
  45. Fix super inferring the union of every ancestor's return type castwide/solargraph#1364 — Fix super inferring the union of every ancestor's return type
  46. Accept an explicit @return [undefined] as declared castwide/solargraph#1420 — Accept an explicit @return [undefined] as declared
  47. Infer block parameter types on safe-navigated calls castwide/solargraph#1421 — Infer block parameter types on safe-navigated calls
  48. [regression fix] Structurally verify RBS interface-typed expectations castwide/solargraph#1266 — Structurally verify RBS interface-typed expectations
  49. [regression fix] Cache gems that have a leftover YARD lock castwide/solargraph#1465 — [regression fix] Cache gems that have a leftover YARD lock
  50. Resolve every generic parameter, not only the first castwide/solargraph#1415 — Resolve every generic parameter, not only the first
  51. [regression fix] Keep declared global types when gems reassign them castwide/solargraph#1439 — [regression fix] Keep declared global types when gems reassign them
  52. Type destructured declared tuples by position castwide/solargraph#1461 — Type destructured declared tuples by position
  53. Type declared tuple elements by position castwide/solargraph#1463 — Type declared tuple elements by position
  54. Resolve class variables read in a namespace body castwide/solargraph#1466 — Resolve class variables read in a namespace body
  55. Infer precise Hash{K => V} types from hash literals castwide/solargraph#1352 — Infer precise Hash{K => V} types from hash literals
  56. Make strong typecheck report the same problems on macOS and Linux castwide/solargraph#1472 — Make strong typecheck report the same problems on macOS and Linux
  57. Block parameters don't shadow outer parameters of the same name castwide/solargraph#1424 — Block parameters don't shadow outer parameters of the same name
  58. Resolve explicit super inside define_method blocks castwide/solargraph#1423 — Resolve explicit super inside define_method blocks
  59. Infer Integer arithmetic correctly when bigdecimal RBS is loaded castwide/solargraph#1467 — Infer Integer arithmetic correctly when bigdecimal RBS is loaded
  60. Narrow Hash#[] to non-nil after key? and ||= castwide/solargraph#1417 — Narrow Hash#[] to non-nil after key? and ||=

apiology/solargraph PRs included

  1. Cut CI duration from 20 minutes to 6 #44 — Cut CI duration from 20 minutes to 6
  2. Accept classes for RBS singleton(X) parameters #364 — Accept classes for RBS singleton(X) parameters
  3. Infer factory return types for string arguments #366 — Infer factory return types for string arguments
  4. [regression fix] Add ActiveSupport::Concern class methods for classes defined in gems castwide/solargraph#1476 (was Add concern class methods for classes defined in gems #448) — Add concern class methods for classes defined in gems (brings castwide master 3c8d348: Move Class, Struct, and Data definition processors to NodeProcessors castwide/solargraph#1468, Remove Convention::ActiveSupportConcern castwide/solargraph#1469, Preserve immutable completion item properties during resolve castwide/solargraph#1471)
  5. Infer symbol blocks calling methods with no declared return type #406 — Infer symbol blocks calling methods with no declared return type

Notes

  • Rebuilt from castwide master da44db2 on 2026-10-20; every commit is one Merge <repo>#N merge commit.

apiology and others added 6 commits October 21, 2026 12:18
The strict-level spec for undefined calls from external sources built
its ApiMap with ApiMap.load, which leaves uncached gems in
unloaded_gems without loading their pins. Kramdown::Parser::GFM was
only resolvable when an earlier spec (e.g. api_map_method_spec via
load_with_cache) had already cached the gem, so the example failed
when run alone or with a fresh SOLARGRAPH_CACHE.

Cache the gem in a before hook, matching library_spec and
external_spec.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SEntZKsZwQHhzqcwG7MTqn
(cherry picked from commit 1b02dda)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SEntZKsZwQHhzqcwG7MTqn
Which gems a body of code can use is workspace data, not bench data.
Collection::Gem#without_yard now catalogs the gem source with a
Workspace whose gemnames are the gem and its runtime dependencies, and
ApiMap#catalog gives the plugin Panel the External's configured gem
names plus the bench workspace's gemnames. Bench#gem_names is removed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SEntZKsZwQHhzqcwG7MTqn
…e parser, type checker and RBS handling

Resolve the Diagnostics::TypeCheck conflict by keeping this branch's
workspace: keyword and the PR's 'normal' string default. Regenerate
.rubocop_todo.yml.

Combination fix: castwide#1245 turns MessageWorker#tick's wait into a while
loop, while this branch's MessageWorker#stop (from castwide#1243) wakes the
thread once and relies on it falling through. Together the worker
never exits and Host#fully_stop times out, so the loop also stops
waiting once stopped? is true.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SEntZKsZwQHhzqcwG7MTqn
Workspace.for_gem builds a workspace for the source of a gem without
loading files or resolving a bundle, and
Workspace#available_gem_names derives the gem and its runtime
dependencies from it. This replaces the gemnames: keyword, so callers
no longer compute the list, and leaves Workspace#gemnames untouched.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SEntZKsZwQHhzqcwG7MTqn
Workspace#initialize takes a metagem: keyword, so a workspace for the
source of a gem is built through the normal constructor rather than
Workspace.for_gem reaching into an instance variable.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SEntZKsZwQHhzqcwG7MTqn
…typechecking in CI

castwide#1240 and castwide#1245 both branch from c961a9d; castwide#1245 carries the code
fixes castwide#1240 had pointed its markers at. Conflicts resolved by intent,
starting from the earlier castwide#1240 merge (0b3a1c2) for the hunks castwide#1245
does not touch: keep castwide#1245's code, and keep castwide#1240's marker labels
where castwide#1245 left a marker in place (host.rb predicates, node_chainer,
namespace_node, resbody_node, block.rb, rbs_map/conversions.rb), plus
castwide#1240's Repo#bundle_script @return tag. Keep castwide#1245's deletion of
YardMap::Cache and DomainDirective. rules.rb keeps castwide#1240's @todo list
plus the two castwide#1245 labels still in use. .rubocop_todo.yml regenerated
with RuboCop 1.92.0.

Combination markers: castwide#1240's AST::Node#children union makes child
reads in castwide#1245's rewritten code fail, so those get castwide#1240's
1418/1416 child-node marker (Data/Struct assignment nodes,
NodeMethods.drill_signature, CasgnNode, SendNode#process_attribute).
Lines castwide#1245 rewrote get the marker castwide#1240 had on the same expression:
#225 in Constants#resolve_and_cache, castwide#1223 and castwide#1259
in Library, castwide#1258 in Callable, #178 on Method's
attr_writer, and castwide#1400 on uncache/load in
Collection::Gem.load_all. castwide#1240's pull/1245 markers stay on
CheckGemVersion's show_message, Repo's bundled_group_map and
Chain::Parameter#current_index, where castwide#1245 does not clear the
finding.

Remove 41 markers strong reports as unneeded: 30 cite castwide#1245, whose
fixes are now in; the other 11 are cleared by castwide#1245's code and
castwide#1240's annotations combined.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SEntZKsZwQHhzqcwG7MTqn
Regenerate .rubocop_todo.yml.
…and that failed

Stub unloaded_gems as a Set in the sync_catalog deadlock spec, as
External#unloaded_gems returns; the merged unloaded_gems - cache_errors
raises TypeError on the Array stub.

Remove the @sg-ignore on the cache status check, which typecheck
reports as unneeded now that it reads s&.success?.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SEntZKsZwQHhzqcwG7MTqn
…s when mapping gems

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SEntZKsZwQHhzqcwG7MTqn
apiology and others added 5 commits October 21, 2026 14:16
A plugin was recorded in the gem cache key only when the workspace
config required it. A process that requires the plugin directly, such
as a plugin spec suite using a workspace without config, mapped gems
with the plugin loaded but read and wrote the plain gems directory,
so it missed caches built by `solargraph gems` with the plugin
configured.

Record the gem that defines each registered convention, and key
config-required plugins by gem name so both paths give the same key.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SEntZKsZwQHhzqcwG7MTqn
Keep the natural Hash iteration and mark the Solargraph gap: the
each_value block param is typed as the Hash pair, not the value.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SEntZKsZwQHhzqcwG7MTqn
call_nodes_from skipped csend nodes, so foo&.bar was never checked:
no unresolved-call, arity or argument-type problems. A union
receiver such as String, Symbol, nil passed name&.chomp(':') even
though Symbol has no chomp. Treat csend like send, and drop nil
from the reported receiver type since &. never calls through nil.
Typechecking safe navigation calls exposes Host::Dispatch#update
passing self (a Host::Dispatch) to Progress#send, whose parameter is
declared as Host. Suppress it with a marker citing the fix,
castwide#1440.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wo4FerFK9aaxrGrmVE9ncZ
Document return and parameter types on the plugin, panel, addon,
external, node map and source map APIs so strong typecheck can follow
them. In the ActiveSupport plugin, narrow the last chain link to
Source::Chain::Call and guard nil closures and nodes, drop the
unreachable else branch, and call panel methods directly. Qualify
Chain in the NodeMethods.convert_hash return tag, which did not
resolve from that namespace. Remove a stray @node_map reset from
Source#code=, which has no such ivar.

Mark the three remaining typecheck problems with @sg-ignore, each
naming the checker gap that causes it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SEntZKsZwQHhzqcwG7MTqn
apiology and others added 30 commits October 29, 2026 17:32
ApiMap#inner_get_methods sorted Store#get_methods results by name with
Array#sort, which is not stable. Ruby on macOS reorders equal names
where Linux keeps them, so get_method_stack(...).first differed by OS.
On macOS bigdecimal's Integer#- (BigDecimal) -> BigDecimal came ahead
of core's, and typecheck reported "Wrong argument type for Integer#-:
arg_0 expected BigDecimal, received Integer" that Linux CI never saw.

Break name ties by store position so every platform agrees. The
position comes from an identity hash rather than sort_by.with_index
or each_with_index.sort_by, because Solargraph leaves the block
parameters of those Enumerator chains untyped and reports "Unresolved
call to name" on them.
Use each_with_index.sort_by for the stable sort instead of an identity
hash built only to avoid a typecheck error. Solargraph leaves the
block's pin untyped ("Unresolved call to name"); castwide/solargraph
castwide#1461 clears it, so the line carries an sg-ignore citing that PR.
Regenerate .rubocop_todo.yml.
Regenerate .rubocop_todo.yml.

Remove the sg-ignores the batch CI (k1463b, run 40916916729) reports
Unneeded once castwide#1463 types tuple elements by position:
  lib/solargraph/parser/comment_ripper.rb:31, 33, 38, 40, 49 (pull/1223)
  lib/solargraph/position.rb:121 (pull/1223)
  lib/solargraph/yard_map/mapper/to_method.rb:107 (pull/1231)

Remove the pending markers that now pass, in
spec/source_map/clip_spec.rb: the four labeled
"needs castwide#1461" and
"types elements of tuples" (pended for castwide#1201).
Regenerate .rubocop_todo.yml.

Remove the sg-ignores the merge makes Unneeded:
  lib/solargraph/language_server/message/base.rb:71 (cited castwide#1223)
  lib/solargraph/language_server/message/base.rb:73 (cited castwide#1223)
  lib/solargraph/language_server/message/base.rb:91 (cited castwide#1223)
  lib/solargraph/position.rb:121 (cited castwide#1223)
  lib/solargraph/type_checker/rules.rb:20 (cited castwide#1266)
  lib/solargraph/type_checker/rules.rb:172 (cited castwide#1266)

Drop the Hash#fetch pending in strong_spec.rb citing
castwide#1266, already merged here, which now passes, and
the require of rbs only it used.
Master moved StructDefinitionNode to NodeProcessors and marked its
:true check with a disable-next directive, since the old todo
exclusion names the former path. Apply the same directive to the
pattern-matching :true check this PR introduced.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LTpguFfufaaEmy3yWcWsUi
castwide#1223 closed without merging, so four sg-ignores
cited a fix that will never land. castwide#1451 clears the three in
Message::Base (nil literal vs NilClass); castwide#1463 covers the tuple index
in Position.normalize.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JFJrPm9QhVqVqk5QPMD1c6
Typing symbol blocks makes arguments.map(&:node) nilable, matching
Chain#node. simple_convert already returns nil for a non-node, so
document that; its body now needs the castwide#1396 ignores, since
Solargraph does not narrow on Parser.is_ast_node?, and the nil-check
ignore at its call in Call becomes unneeded. Skip the chain inference
when the block has no symbol name.
…n macOS and Linux

Regenerate .rubocop_todo.yml.

Remove the sg-ignore the merge makes Unneeded (Solargraph / strong,
https://github.com/apiology/solargraph/actions/runs/40988189551/job/123844024147):
  lib/solargraph/api_map.rb:917 # @sg-ignore castwide#1461
The old tag omitted Integer, true, false and nil, all of which
initialize assigns. The elsif pattern-capture inference gap that
masked the Integer case is fixed by castwide#1416.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LTpguFfufaaEmy3yWcWsUi
Plugin::ActiveSupport added an extend of ClassMethods only for
includes in workspace source maps. Since Convention::ActiveSupportConcern
was removed, classes defined in gems (ActiveJob::Base,
ActionController::Base, Rails::Application) lost class methods that
come from concerns they include, e.g. ActiveSupport::Callbacks
.define_callbacks.

Load external requires before running plugins and pass the external
pins to the plugin panel, so the plugin also sees includes from gems
and stdlib.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EhUSLUimEYJyCZv8NdQGKb
ActiveSupport::Concern extends an includer with the ClassMethods of
the concern's own dependencies too: ActiveJob::Base includes
ActiveJob::Callbacks, which includes ActiveSupport::Callbacks, so
ActiveJob::Base gets set_callback. Plugin::ActiveSupport only extended
the ClassMethods of the directly included module.

Resolve each included module lexically and also extend the includer
with the ClassMethods of the modules it includes, at any depth.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EhUSLUimEYJyCZv8NdQGKb
ActiveSupport::Concern runs a concern's included block and
class_methods block in the includer, so the includer gets the
concern's class methods and extends (e.g., ActiveRecord::Core's
self.configurations, ActiveSupport::Callbacks' DescendantsTracker).
Copy those pins onto the includer for each concern it includes,
directly or as a dependency.

Extend only ClassMethods defined in the included module itself:
for an include of an undefined module, the old X::ClassMethods
reference resolved lexically to an enclosing namespace's
ClassMethods, e.g. ActiveRecord::Base::ClassMethods with its
generics unbound.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EhUSLUimEYJyCZv8NdQGKb
Strong typecheck inferred Array, Array<Array> for the recursive
flat_map in nested_include_paths; push into a typed result array
instead.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EhUSLUimEYJyCZv8NdQGKb
OpasgnNode builds the `a + b` send for `a += b` with node.updated, so
the send keeps the op_asgn's location map and its `+=` operator.
assignment_syntax? then flagged it as an attribute assignment, and the
local was typed as the right-hand side instead of the operator's
return type. Require a setter method name as well.
…f the same name

Regenerate .rubocop_todo.yml.
Parser::AST::Node#children is typed Array[self] on master but as a
union of Node, Integer, Float, Rational, Complex, String, Symbol and
nil where the ast RBS shim applies, so strong typecheck flags each
place this PR passes a raw child where a Node (or nil) is expected.

Capture receivers with 'in [::Parser::AST::Node | nil => receiver, *]'
and guard the rest with is_a?(::Parser::AST::Node). Valid ASTs always
have a Node or nil in these positions, so results do not change.
…r's return type

Regenerate .rubocop_todo.yml.
…al RBS is loaded

Regenerate .rubocop_todo.yml.
…rn type

Regenerate .rubocop_todo.yml.

Drop sg-ignores made unneeded on 2026-10-19:
  lib/solargraph/parser/parser_gem/node_methods.rb any_splatted_call?: # @sg-ignore castwide#1451 (added by this PR; castwide#1451 is merged here)
  lib/solargraph/source/chain/call.rb before named_types: # @sg-ignore Found after castwide#1418 merged

node_methods.rb keeps this branch's pattern-matching bodies, so the
PR's sg-ignores citing castwide#1396 (merged here) are not
carried over; only its nil-accepting @PARAM tags are.
Regenerate .rubocop_todo.yml.

Remove the sg-ignores citing castwide#1417:
  lib/solargraph/api_map.rb:206 # @sg-ignore castwide#1417
  lib/solargraph/api_map.rb:210 # @sg-ignore castwide#1417
  lib/solargraph/api_map.rb:680 # @sg-ignore castwide#1417
  lib/solargraph/api_map.rb:699 # @sg-ignore castwide#1417
  lib/solargraph/api_map.rb:712 # @sg-ignore castwide#1417
  lib/solargraph/parser/node_processor.rb:21 # @sg-ignore castwide#1417
  lib/solargraph/parser/node_processor.rb:24 # @sg-ignore castwide#1417

Remove the sg-ignores the merge makes Unneeded (Solargraph / strong,
https://github.com/apiology/solargraph/actions/runs/41059260415/job/124074555542),
with their continuation lines:
  lib/solargraph/type_checker.rb:689 # @sg-ignore castwide#1223
    #   also needs castwide#1417
  lib/solargraph/type_checker.rb:692 # @sg-ignore castwide#1223
    #   also needs castwide#1417
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.

1 participant