rigortype 0.3.9 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -4
  3. data/data/core_overlay/enumerable.rbs +51 -0
  4. data/data/core_overlay/enumerator.rbs +84 -0
  5. data/data/core_overlay/hash_rbs3.rbs +41 -0
  6. data/data/core_overlay/process.rbs +40 -0
  7. data/data/core_overlay/string_io.rbs +33 -0
  8. data/data/effects/core.yml +3 -3
  9. data/data/gem_overlay/activesupport/core_ext.rbs +127 -4
  10. data/docs/handbook/03-narrowing.md +95 -10
  11. data/docs/handbook/04-tuples-and-shapes.md +8 -6
  12. data/docs/handbook/07-rbs-and-extended.md +16 -11
  13. data/docs/handbook/08-understanding-errors.md +3 -2
  14. data/docs/handbook/10-sorbet.md +9 -10
  15. data/docs/handbook/11-sig-gen.md +454 -13
  16. data/docs/install.md +87 -15
  17. data/docs/manual/02-cli-reference.md +65 -4
  18. data/docs/manual/03-configuration.md +12 -0
  19. data/docs/manual/04-diagnostics.md +4 -0
  20. data/docs/manual/07-plugins.md +1 -1
  21. data/docs/manual/08-skills.md +4 -3
  22. data/docs/manual/10-mcp-server.md +3 -2
  23. data/docs/manual/12-caching.md +43 -4
  24. data/docs/manual/14-rails-quickstart.md +19 -11
  25. data/docs/manual/16-rbs-extended-annotations.md +40 -7
  26. data/docs/manual/19-effect-labels.md +10 -0
  27. data/docs/manual/plugins/README.md +7 -0
  28. data/docs/manual/plugins/rigor-actioncable.md +8 -1
  29. data/docs/manual/plugins/rigor-actionmailer.md +7 -0
  30. data/docs/manual/plugins/rigor-actionpack.md +243 -0
  31. data/docs/manual/plugins/rigor-active-model-serializers.md +153 -0
  32. data/docs/manual/plugins/rigor-activejob.md +7 -0
  33. data/docs/manual/plugins/rigor-activerecord.md +110 -4
  34. data/docs/manual/plugins/rigor-activestorage.md +8 -1
  35. data/docs/manual/plugins/rigor-activesupport-core-ext.md +11 -5
  36. data/docs/manual/plugins/rigor-grape.md +106 -0
  37. data/docs/manual/plugins/rigor-graphql.md +23 -2
  38. data/docs/manual/plugins/rigor-pundit.md +8 -1
  39. data/docs/manual/plugins/rigor-rails-i18n.md +10 -5
  40. data/docs/manual/plugins/rigor-rails-routes.md +7 -0
  41. data/docs/manual/plugins/rigor-rbs-inline.md +212 -25
  42. data/docs/manual/plugins/rigor-sidekiq.md +8 -1
  43. data/docs/manual/plugins/rigor-sorbet.md +21 -5
  44. data/exe/rigor +19 -4
  45. data/lib/rigor/analysis/baseline.rb +1 -1
  46. data/lib/rigor/analysis/check_rules/declaration_sourced_guard.rb +167 -2
  47. data/lib/rigor/analysis/check_rules/lexical_method_sites.rb +189 -0
  48. data/lib/rigor/analysis/check_rules/main_pass_collector.rb +5 -3
  49. data/lib/rigor/analysis/check_rules/rule_ids.rb +20 -5
  50. data/lib/rigor/analysis/check_rules/rule_walk.rb +2 -1
  51. data/lib/rigor/analysis/check_rules/source_arity.rb +427 -0
  52. data/lib/rigor/analysis/check_rules/special_global_setters.rb +146 -0
  53. data/lib/rigor/analysis/check_rules/unreachable_clause_collector.rb +36 -2
  54. data/lib/rigor/analysis/check_rules.rb +638 -136
  55. data/lib/rigor/analysis/dependency_recorder.rb +222 -17
  56. data/lib/rigor/analysis/fact_store.rb +9 -0
  57. data/lib/rigor/analysis/incremental.rb +26 -0
  58. data/lib/rigor/analysis/incremental_run_slot/write_guard.rb +266 -0
  59. data/lib/rigor/analysis/incremental_run_slot.rb +171 -0
  60. data/lib/rigor/analysis/incremental_session.rb +309 -53
  61. data/lib/rigor/analysis/plugin_fact_fingerprint.rb +24 -13
  62. data/lib/rigor/analysis/project_scan.rb +11 -1
  63. data/lib/rigor/analysis/reachability/plugin_roots.rb +0 -1
  64. data/lib/rigor/analysis/reachability/scan_cache.rb +3 -1
  65. data/lib/rigor/analysis/rule_catalog.rb +127 -0
  66. data/lib/rigor/analysis/run_cache_key.rb +46 -18
  67. data/lib/rigor/analysis/run_stats.rb +2 -2
  68. data/lib/rigor/analysis/runner/diagnostic_aggregator.rb +168 -12
  69. data/lib/rigor/analysis/runner/effect_envelope_pass.rb +9 -4
  70. data/lib/rigor/analysis/runner/pool_coordinator.rb +109 -17
  71. data/lib/rigor/analysis/runner/project_pre_passes.rb +44 -17
  72. data/lib/rigor/analysis/runner.rb +603 -54
  73. data/lib/rigor/analysis/shadow_harness.rb +27 -0
  74. data/lib/rigor/analysis/source_rbs_gate.rb +157 -0
  75. data/lib/rigor/analysis/template_unit_collector.rb +303 -0
  76. data/lib/rigor/analysis/template_unit_paths.rb +93 -0
  77. data/lib/rigor/analysis/template_unit_positions.rb +293 -0
  78. data/lib/rigor/analysis/template_units.rb +409 -0
  79. data/lib/rigor/analysis/worker_session.rb +57 -13
  80. data/lib/rigor/bleeding_edge.rb +0 -2
  81. data/lib/rigor/builtins/hkt_builtins.rb +1 -0
  82. data/lib/rigor/builtins/imported_refinements.rb +4 -0
  83. data/lib/rigor/builtins/regex_refinement.rb +17 -9
  84. data/lib/rigor/builtins/static_return_refinements.rb +2 -0
  85. data/lib/rigor/cache/descriptor.rb +45 -1
  86. data/lib/rigor/cache/engine_source.rb +29 -1
  87. data/lib/rigor/cache/file_digest.rb +28 -0
  88. data/lib/rigor/cache/incremental_snapshot.rb +102 -8
  89. data/lib/rigor/cache/rbs_cache_producer.rb +4 -0
  90. data/lib/rigor/cache/rbs_descriptor.rb +37 -7
  91. data/lib/rigor/cache/store.rb +63 -4
  92. data/lib/rigor/cache/value_digest.rb +325 -0
  93. data/lib/rigor/ci_detector.rb +1 -0
  94. data/lib/rigor/cli/check_command.rb +83 -13
  95. data/lib/rigor/cli/doc_links.rb +1 -1
  96. data/lib/rigor/cli/docs_command.rb +4 -4
  97. data/lib/rigor/cli/doctor_command.rb +1 -1
  98. data/lib/rigor/cli/effects_report.rb +2 -2
  99. data/lib/rigor/cli/plugin_command.rb +3 -3
  100. data/lib/rigor/cli/prism_colorizer.rb +0 -1
  101. data/lib/rigor/cli/sig_gen_command.rb +210 -29
  102. data/lib/rigor/cli/skill_command.rb +1 -1
  103. data/lib/rigor/cli/skill_describe.rb +0 -1
  104. data/lib/rigor/cli/type_of_command.rb +19 -5
  105. data/lib/rigor/cli/type_of_renderer.rb +20 -9
  106. data/lib/rigor/cli/type_of_template_probe.rb +189 -0
  107. data/lib/rigor/cli/unused_command.rb +3 -3
  108. data/lib/rigor/cli.rb +21 -3
  109. data/lib/rigor/config_audit.rb +3 -2
  110. data/lib/rigor/config_path.rb +29 -0
  111. data/lib/rigor/configuration/severity_profile.rb +24 -3
  112. data/lib/rigor/configuration.rb +71 -7
  113. data/lib/rigor/effects/ancestry_recorder.rb +191 -0
  114. data/lib/rigor/effects/attribution.rb +11 -2
  115. data/lib/rigor/effects/callee_rule.rb +368 -0
  116. data/lib/rigor/effects/catalog.rb +7 -4
  117. data/lib/rigor/effects/collector.rb +11 -5
  118. data/lib/rigor/effects/config_envelopes.rb +9 -2
  119. data/lib/rigor/effects/definition_context.rb +179 -0
  120. data/lib/rigor/effects/effect_table.rb +11 -3
  121. data/lib/rigor/effects/envelope_check.rb +1 -1
  122. data/lib/rigor/effects/envelope_index.rb +15 -0
  123. data/lib/rigor/effects/file_collection.rb +59 -5
  124. data/lib/rigor/effects/framework_units.rb +1 -1
  125. data/lib/rigor/effects/identity.rb +16 -0
  126. data/lib/rigor/effects/local_ownership.rb +38 -12
  127. data/lib/rigor/effects/method_key.rb +21 -0
  128. data/lib/rigor/effects/mutation_classifier.rb +23 -12
  129. data/lib/rigor/effects/plugin_facts.rb +49 -37
  130. data/lib/rigor/effects/propagator.rb +295 -16
  131. data/lib/rigor/effects/registry.rb +1 -1
  132. data/lib/rigor/effects/scanner.rb +121 -72
  133. data/lib/rigor/effects/signature_sources.rb +1 -1
  134. data/lib/rigor/effects/snapshot.rb +2 -1
  135. data/lib/rigor/effects/summary.rb +27 -4
  136. data/lib/rigor/effects/unit_scan.rb +385 -30
  137. data/lib/rigor/effects/visibility.rb +101 -0
  138. data/lib/rigor/environment/bundle_sig_discovery.rb +5 -3
  139. data/lib/rigor/environment/lockfile_resolver.rb +27 -1
  140. data/lib/rigor/environment/member_consistency/comparator.rb +708 -0
  141. data/lib/rigor/environment/member_consistency.rb +298 -0
  142. data/lib/rigor/environment/rbs_collection_discovery.rb +10 -1
  143. data/lib/rigor/environment/rbs_loader.rb +400 -134
  144. data/lib/rigor/environment/source_rbs_synthesis.rb +147 -0
  145. data/lib/rigor/environment.rb +104 -96
  146. data/lib/rigor/hashing/xxh3.rb +264 -0
  147. data/lib/rigor/inference/acceptance.rb +139 -9
  148. data/lib/rigor/inference/block_auto_splat.rb +216 -0
  149. data/lib/rigor/inference/block_call_timing.rb +338 -0
  150. data/lib/rigor/inference/block_parameter_binder.rb +88 -26
  151. data/lib/rigor/inference/block_repetition.rb +71 -0
  152. data/lib/rigor/inference/body_fixpoint.rb +2 -1
  153. data/lib/rigor/inference/budget_trace.rb +2 -1
  154. data/lib/rigor/inference/builtins/method_catalog.rb +2 -1
  155. data/lib/rigor/inference/builtins/string_catalog.rb +1 -1
  156. data/lib/rigor/inference/captured_locals.rb +393 -15
  157. data/lib/rigor/inference/closure_escape_analyzer.rb +157 -13
  158. data/lib/rigor/inference/content_join.rb +200 -27
  159. data/lib/rigor/inference/declaration_walk/context.rb +195 -0
  160. data/lib/rigor/inference/declaration_walk/errors.rb +18 -0
  161. data/lib/rigor/inference/declaration_walk/shadow.rb +147 -0
  162. data/lib/rigor/inference/declaration_walk/traversal.rb +441 -0
  163. data/lib/rigor/inference/declaration_walk.rb +7 -0
  164. data/lib/rigor/inference/def_node_resolver.rb +3 -2
  165. data/lib/rigor/inference/def_return_typer.rb +11 -7
  166. data/lib/rigor/inference/define_method_block_self.rb +64 -0
  167. data/lib/rigor/inference/definer_resolution.rb +266 -0
  168. data/lib/rigor/inference/element_read_widening.rb +22 -10
  169. data/lib/rigor/inference/error_info.rb +196 -0
  170. data/lib/rigor/inference/expression_typer.rb +1665 -538
  171. data/lib/rigor/inference/external_ancestor_resolution.rb +264 -0
  172. data/lib/rigor/inference/fresh_frame_blocks.rb +127 -0
  173. data/lib/rigor/inference/global_write_census.rb +239 -0
  174. data/lib/rigor/inference/guard_rebinding.rb +488 -0
  175. data/lib/rigor/inference/hash_lookup_mutation.rb +88 -0
  176. data/lib/rigor/inference/index_write_widening.rb +16 -3
  177. data/lib/rigor/inference/indexed_narrowing.rb +61 -9
  178. data/lib/rigor/inference/jump_targets.rb +82 -0
  179. data/lib/rigor/inference/last_line/implicit_self.rb +210 -0
  180. data/lib/rigor/inference/last_line/self_evidence.rb +329 -0
  181. data/lib/rigor/inference/last_line.rb +340 -0
  182. data/lib/rigor/inference/last_status.rb +144 -0
  183. data/lib/rigor/inference/macro_block_self_type.rb +179 -17
  184. data/lib/rigor/inference/match_rebinding/calls.rb +281 -0
  185. data/lib/rigor/inference/match_rebinding/frame.rb +148 -0
  186. data/lib/rigor/inference/match_rebinding/operands.rb +236 -0
  187. data/lib/rigor/inference/match_rebinding/self_calls.rb +83 -0
  188. data/lib/rigor/inference/match_rebinding.rb +392 -0
  189. data/lib/rigor/inference/method_dispatcher/alias_strict_nominals.rb +36 -0
  190. data/lib/rigor/inference/method_dispatcher/block_folding.rb +85 -24
  191. data/lib/rigor/inference/method_dispatcher/facet_distribution.rb +147 -0
  192. data/lib/rigor/inference/method_dispatcher/hash_transform_keys_folding.rb +191 -0
  193. data/lib/rigor/inference/method_dispatcher/iterator_dispatch.rb +4 -0
  194. data/lib/rigor/inference/method_dispatcher/match_data_folding.rb +159 -0
  195. data/lib/rigor/inference/method_dispatcher/overload_selector.rb +113 -73
  196. data/lib/rigor/inference/method_dispatcher/process_folding.rb +56 -0
  197. data/lib/rigor/inference/method_dispatcher/proven_overload.rb +72 -0
  198. data/lib/rigor/inference/method_dispatcher/rbs_dispatch.rb +901 -38
  199. data/lib/rigor/inference/method_dispatcher/self_substitute.rb +142 -0
  200. data/lib/rigor/inference/method_dispatcher/shape_dispatch.rb +128 -53
  201. data/lib/rigor/inference/method_dispatcher/struct_folding.rb +1 -1
  202. data/lib/rigor/inference/method_dispatcher.rb +214 -13
  203. data/lib/rigor/inference/method_parameter_binder.rb +8 -3
  204. data/lib/rigor/inference/module_function_state.rb +213 -0
  205. data/lib/rigor/inference/multi_target_binder.rb +345 -52
  206. data/lib/rigor/inference/mutation_rejoin.rb +4 -1
  207. data/lib/rigor/inference/mutation_widening.rb +70 -48
  208. data/lib/rigor/inference/narrowing.rb +674 -124
  209. data/lib/rigor/inference/operand_effects.rb +167 -0
  210. data/lib/rigor/inference/operand_walk.rb +88 -0
  211. data/lib/rigor/inference/optimistic_origin.rb +152 -9
  212. data/lib/rigor/inference/parameter_inference_collector.rb +13 -11
  213. data/lib/rigor/inference/project_method_ownership.rb +136 -0
  214. data/lib/rigor/inference/project_patched_methods.rb +7 -2
  215. data/lib/rigor/inference/project_patched_scanner.rb +7 -3
  216. data/lib/rigor/inference/receiver_alias.rb +90 -1
  217. data/lib/rigor/inference/receiver_blind_block.rb +219 -0
  218. data/lib/rigor/inference/refinement_mutation.rb +15 -11
  219. data/lib/rigor/inference/repeated_or_writes.rb +463 -0
  220. data/lib/rigor/inference/return_barrier.rb +54 -0
  221. data/lib/rigor/inference/rewrite_mutation.rb +120 -0
  222. data/lib/rigor/inference/scope_indexer/certainty.rb +176 -0
  223. data/lib/rigor/inference/scope_indexer/class_cvars_collector.rb +35 -0
  224. data/lib/rigor/inference/scope_indexer/def_nestings_collector.rb +47 -0
  225. data/lib/rigor/inference/scope_indexer/layered_def_nestings.rb +36 -0
  226. data/lib/rigor/inference/scope_indexer/member_layouts_collector.rb +61 -0
  227. data/lib/rigor/inference/scope_indexer/mixin_accumulator.rb +130 -0
  228. data/lib/rigor/inference/scope_indexer/superclasses_collector.rb +64 -0
  229. data/lib/rigor/inference/scope_indexer.rb +5913 -701
  230. data/lib/rigor/inference/singleton_hook_decline.rb +253 -0
  231. data/lib/rigor/inference/statement_evaluator.rb +3249 -497
  232. data/lib/rigor/inference/stored_block_call.rb +54 -0
  233. data/lib/rigor/inference/string_mutation.rb +44 -7
  234. data/lib/rigor/inference/unknown_store_widening.rb +200 -0
  235. data/lib/rigor/inference/unthreaded_rebinds.rb +282 -0
  236. data/lib/rigor/language_server/debouncer.rb +0 -1
  237. data/lib/rigor/language_server/diagnostic_publisher.rb +3 -2
  238. data/lib/rigor/language_server/hover_renderer.rb +3 -3
  239. data/lib/rigor/language_server/project_context.rb +5 -3
  240. data/lib/rigor/mcp/server.rb +2 -1
  241. data/lib/rigor/plugin/base.rb +196 -13
  242. data/lib/rigor/plugin/box_probe.rb +91 -0
  243. data/lib/rigor/plugin/bundled_catalog.rb +1 -1
  244. data/lib/rigor/plugin/effect_attribution.rb +58 -4
  245. data/lib/rigor/plugin/io_boundary.rb +82 -4
  246. data/lib/rigor/plugin/isolation.rb +1 -1
  247. data/lib/rigor/plugin/loader.rb +2 -1
  248. data/lib/rigor/plugin/macro/block_as_method.rb +45 -6
  249. data/lib/rigor/plugin/manifest.rb +71 -10
  250. data/lib/rigor/plugin/registry.rb +35 -1
  251. data/lib/rigor/plugin/source_rbs_synthesis_reporter.rb +9 -3
  252. data/lib/rigor/plugin/template_unit.rb +196 -0
  253. data/lib/rigor/plugin/trust_policy.rb +3 -3
  254. data/lib/rigor/plugin.rb +1 -0
  255. data/lib/rigor/protection/discovery_seed.rb +20 -9
  256. data/lib/rigor/protection/kill_signature.rb +0 -1
  257. data/lib/rigor/protection/mutation_cache.rb +4 -5
  258. data/lib/rigor/rbs_extended.rb +27 -0
  259. data/lib/rigor/reflection/constant_ancestors.rb +146 -0
  260. data/lib/rigor/reflection/constant_path.rb +41 -13
  261. data/lib/rigor/reflection.rb +73 -107
  262. data/lib/rigor/scope/discovery_index.rb +351 -2
  263. data/lib/rigor/scope/resolution_chain/relevance.rb +165 -0
  264. data/lib/rigor/scope/resolution_chain.rb +884 -0
  265. data/lib/rigor/scope.rb +981 -198
  266. data/lib/rigor/sig_gen/alias_index.rb +289 -0
  267. data/lib/rigor/sig_gen/classification.rb +22 -5
  268. data/lib/rigor/sig_gen/declaration_equivalence.rb +127 -0
  269. data/lib/rigor/sig_gen/effect_annotation.rb +202 -0
  270. data/lib/rigor/sig_gen/generator.rb +580 -47
  271. data/lib/rigor/sig_gen/inline_declarations.rb +184 -0
  272. data/lib/rigor/sig_gen/method_candidate.rb +47 -3
  273. data/lib/rigor/sig_gen/observation_collector.rb +1 -1
  274. data/lib/rigor/sig_gen/renderer.rb +124 -9
  275. data/lib/rigor/sig_gen/skip_reason_catalog.rb +44 -1
  276. data/lib/rigor/sig_gen/write_result.rb +19 -3
  277. data/lib/rigor/sig_gen/writer.rb +166 -35
  278. data/lib/rigor/sig_gen.rb +3 -0
  279. data/lib/rigor/signature_path_audit.rb +1 -1
  280. data/lib/rigor/source/node_walker.rb +0 -3
  281. data/lib/rigor/source/parameter_envelope.rb +72 -0
  282. data/lib/rigor/source.rb +1 -0
  283. data/lib/rigor/type/combinator.rb +112 -12
  284. data/lib/rigor/type/difference.rb +1 -0
  285. data/lib/rigor/type/hash_shape.rb +1 -1
  286. data/lib/rigor/type/refined.rb +1 -0
  287. data/lib/rigor/version.rb +1 -1
  288. data/lib/rigor.rb +1 -0
  289. data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable/effects.rb +1 -0
  290. data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable.rb +9 -5
  291. data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer.rb +13 -4
  292. data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/analyzer.rb +0 -1
  293. data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/controller_scan.rb +96 -0
  294. data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/effects.rb +65 -8
  295. data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/erb_compiler.rb +270 -0
  296. data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/render_locals.rb +402 -0
  297. data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/view_assigns.rb +370 -0
  298. data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/view_units.rb +132 -0
  299. data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack.rb +239 -4
  300. data/plugins/rigor-actionpack/sig/action_view.rbs +43 -0
  301. data/plugins/rigor-active-model-serializers/lib/rigor/plugin/active_model_serializers/serializer_discoverer.rb +220 -0
  302. data/plugins/rigor-active-model-serializers/lib/rigor/plugin/active_model_serializers/serializer_index.rb +56 -0
  303. data/plugins/rigor-active-model-serializers/lib/rigor/plugin/active_model_serializers.rb +263 -0
  304. data/plugins/rigor-active-model-serializers/lib/rigor-active-model-serializers.rb +7 -0
  305. data/plugins/rigor-active-model-serializers/sig/active_model_serializers.rbs +45 -0
  306. data/plugins/rigor-activejob/lib/rigor/plugin/activejob/effects.rb +1 -0
  307. data/plugins/rigor-activejob/lib/rigor/plugin/activejob.rb +9 -5
  308. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/analyzer.rb +35 -3
  309. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/effects.rb +72 -12
  310. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/model_discoverer.rb +380 -3
  311. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/model_index.rb +14 -6
  312. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord.rb +281 -35
  313. data/plugins/rigor-activerecord/sig/active_record/relation.rbs +206 -31
  314. data/plugins/rigor-activestorage/lib/rigor/plugin/activestorage.rb +25 -14
  315. data/plugins/rigor-activesupport-core-ext/lib/rigor/plugin/activesupport_core_ext/effects.rb +9 -2
  316. data/plugins/rigor-activesupport-core-ext/sig/active_support/core_ext.rbs +171 -5
  317. data/plugins/rigor-dry-monads/lib/rigor/plugin/dry_monads.rb +2 -0
  318. data/plugins/rigor-ethon/lib/rigor/plugin/ethon.rb +1 -0
  319. data/plugins/rigor-ffi/lib/rigor/plugin/ffi/types.rb +1 -1
  320. data/plugins/rigor-ffi/lib/rigor/plugin/ffi.rb +10 -0
  321. data/plugins/rigor-grape/lib/rigor/plugin/grape.rb +141 -0
  322. data/plugins/rigor-grape/lib/rigor-grape.rb +6 -0
  323. data/plugins/rigor-grape/sig/grape.rbs +263 -0
  324. data/plugins/rigor-graphql/lib/rigor/plugin/graphql.rb +72 -2
  325. data/plugins/rigor-graphql/sig/graphql.rbs +485 -0
  326. data/plugins/rigor-minitest/lib/rigor/plugin/minitest/assertion_analyzer.rb +2 -0
  327. data/plugins/rigor-pundit/lib/rigor/plugin/pundit.rb +11 -7
  328. data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n.rb +35 -37
  329. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/analyzer.rb +0 -1
  330. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/devise_routes.rb +2 -0
  331. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/doorkeeper_routes.rb +1 -0
  332. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes.rb +9 -17
  333. data/plugins/rigor-rbs-inline/lib/rigor/plugin/rbs_inline/same_line_annotations.rb +149 -0
  334. data/plugins/rigor-rbs-inline/lib/rigor/plugin/rbs_inline.rb +217 -36
  335. data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq/schedule_scan.rb +1 -0
  336. data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq.rb +9 -5
  337. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/sigil_detector.rb +0 -1
  338. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet.rb +46 -1
  339. data/plugins/rigor-sorbet/sig/sorbet.rbs +277 -0
  340. data/sig/rigor/analysis/baseline.rbs +69 -7
  341. data/sig/rigor/analysis/fact_store.rbs +1 -1
  342. data/sig/rigor/analysis/project_scan.rbs +74 -0
  343. data/sig/rigor/effects/config_envelopes.rbs +100 -0
  344. data/sig/rigor/effects/effect_table.rbs +60 -0
  345. data/sig/rigor/effects/envelope.rbs +97 -0
  346. data/sig/rigor/effects/envelope_index.rbs +33 -0
  347. data/sig/rigor/effects/file_collection.rbs +81 -0
  348. data/sig/rigor/effects/label.rbs +26 -0
  349. data/sig/rigor/effects/label_set.rbs +46 -0
  350. data/sig/rigor/effects/method_key.rbs +24 -0
  351. data/sig/rigor/effects/origin.rbs +50 -0
  352. data/sig/rigor/effects/plugin_facts.rbs +141 -0
  353. data/sig/rigor/effects/registry.rbs +68 -0
  354. data/sig/rigor/effects/summary.rbs +50 -0
  355. data/sig/rigor/effects/taint_cause.rbs +12 -0
  356. data/sig/rigor/environment.rbs +14 -10
  357. data/sig/rigor/inference/optimistic_origin.rbs +10 -0
  358. data/sig/rigor/inference.rbs +6 -4
  359. data/sig/rigor/plugin/additional_initializer.rbs +36 -0
  360. data/sig/rigor/plugin/base.rbs +30 -7
  361. data/sig/rigor/plugin/effect_ancestry.rbs +27 -0
  362. data/sig/rigor/plugin/effect_attribution.rbs +66 -0
  363. data/sig/rigor/plugin/effect_edge.rbs +33 -0
  364. data/sig/rigor/plugin/effect_entry_points.rbs +25 -0
  365. data/sig/rigor/plugin/io_boundary.rbs +2 -1
  366. data/sig/rigor/plugin/loader.rbs +3 -3
  367. data/sig/rigor/plugin/manifest.rbs +50 -11
  368. data/sig/rigor/plugin/protocol_contract.rbs +68 -0
  369. data/sig/rigor/plugin/registry.rbs +62 -1
  370. data/sig/rigor/plugin.rbs +1 -1
  371. data/sig/rigor/rbs_extended.rbs +1 -1
  372. data/sig/rigor/reflection.rbs +7 -6
  373. data/sig/rigor/scope.rbs +177 -20
  374. data/sig/rigor/sig_gen/skip_reason_catalog.rbs +14 -7
  375. data/sig/rigor/source.rbs +4 -4
  376. data/sig/rigor/testing.rbs +10 -4
  377. data/sig/rigor/type.rbs +6 -0
  378. data/sig/rigor.rbs +38 -20
  379. data/skills/rigor-ask/SKILL.md +8 -5
  380. data/skills/rigor-baseline-reduce/SKILL.md +4 -6
  381. data/skills/rigor-ci-setup/SKILL.md +17 -21
  382. data/skills/rigor-doctor/SKILL.md +24 -22
  383. data/skills/rigor-doctor/references/01-checks.md +97 -33
  384. data/skills/rigor-editor-setup/SKILL.md +6 -4
  385. data/skills/rigor-mcp-setup/SKILL.md +5 -4
  386. data/skills/rigor-monkeypatch-resolve/SKILL.md +5 -3
  387. data/skills/rigor-next-steps/SKILL.md +4 -2
  388. data/skills/rigor-plugin-author/SKILL.md +19 -23
  389. data/skills/rigor-plugin-author/references/01-plan-and-scaffold.md +9 -8
  390. data/skills/rigor-plugin-author/references/02-walker-and-types.md +12 -25
  391. data/skills/rigor-plugin-author/references/03-test-and-ship.md +6 -8
  392. data/skills/rigor-plugin-review/SKILL.md +6 -4
  393. data/skills/rigor-plugin-review/references/01-best-practices-checklist.md +2 -1
  394. data/skills/rigor-plugin-tune/SKILL.md +4 -2
  395. data/skills/rigor-project-init/SKILL.md +46 -18
  396. data/skills/rigor-project-init/references/01-detect.md +13 -9
  397. data/skills/rigor-project-init/references/02-configure.md +40 -10
  398. data/skills/rigor-project-init/references/03-baseline-and-bugs.md +14 -14
  399. data/skills/rigor-project-init/references/04-sig-uplift.md +27 -14
  400. data/skills/rigor-protection-uplift/SKILL.md +4 -6
  401. data/skills/rigor-rbs-setup/SKILL.md +4 -2
  402. data/skills/rigor-type-oracle/SKILL.md +4 -6
  403. data/skills/rigor-type-oracle/references/01-oracle-commands.md +12 -8
  404. data/skills/rigor-type-oracle/references/03-gap-protocol.md +0 -3
  405. data/skills/rigor-unused-adjudicate/SKILL.md +4 -2
  406. data/skills/rigor-upgrade/SKILL.md +13 -8
  407. metadata +132 -1
@@ -1,7 +1,9 @@
1
1
  ---
2
2
  name: rigor-rbs-setup
3
- description: |
4
- Install community RBS for the project's gems with `rbs collection install`, so Rigor stops typing calls into RBS-less dependencies as `Dynamic` and gains real coverage (and real bug-catching) on them. Rigor auto-detects the resulting `rbs_collection.lock.yaml` — no Rigor config change needed. Triggers: "set up rbs collection", "my gems type as Dynamic", "rigor check says N gems have no RBS available", "reduce false positives from untyped gems". NOT for first-time Rigor setup (use rigor-project-init first) and NOT for a gem that has no entry in the community collection (that needs rigor-plugin-author or a Rigor issue).
3
+ description: >-
4
+ Install community RBS for a project's gems so Rigor can type dependencies that currently become
5
+ `Dynamic`. Use when `rbs collection` is missing or untyped gems limit coverage; not for first-time
6
+ Rigor setup or a gem with no community RBS entry.
5
7
  license: MPL-2.0
6
8
  metadata:
7
9
  version: 0.1.0
@@ -1,7 +1,9 @@
1
1
  ---
2
2
  name: rigor-type-oracle
3
- description: |
4
- Before writing or asserting ANY Ruby type, get it from Rigor rather than from reading the code: `rigor type-of FILE:LINE:COL` / `rigor annotate FILE` for an expression, `rigor sig-gen --print FILE` for a method signature, call-site observation for a parameter. A type you did not obtain from Rigor is a guess, and a guessed type is never written anywhere. Triggers: writing RBS under `sig/`, an inline `#:` / `# @rbs` annotation, a Sorbet `sig do … end`, a YARD `@param` / `@return`, a type stated in a doc sentence or a review comment, a nil check / `is_a?` / `respond_to?` guard justified by "this should be an X", "add types to this class / file", "document this method", "what type is this / what does this return?". Applies to Rigor's own tree too. When Rigor answers `Dynamic[top]` or `untyped`, or `sig-gen` skips the method, report the gap — never fill it in from inference of your own. NOT for setting Rigor up (use rigor-next-steps) or working a baseline down (use rigor-baseline-reduce).
3
+ description: >-
4
+ Obtain a Ruby type from Rigor before writing or asserting it, using `type-of`, `annotate`, or `sig-gen`
5
+ as appropriate. Use when adding RBS, inline annotations, Sorbet/YARD types, type-shaped docs, or
6
+ type-justified guards; not for Rigor setup or baseline reduction.
5
7
  license: MPL-2.0
6
8
  metadata:
7
9
  version: 0.1.0
@@ -59,10 +61,6 @@ scope the moment you are about to write or assert one:
59
61
  - Being asked "what type is this?", "what does this method return?",
60
62
  "add types to this class", "document this file".
61
63
 
62
- It applies to **Rigor's own tree** as well: `lib/`, the bundled plugins,
63
- and the examples are held to the same rule, and a gap found there is
64
- engine signal worth more than the annotation you would have written.
65
-
66
64
  ## When NOT to use
67
65
 
68
66
  - **Setting Rigor up on a project that has none** → `rigor-next-steps`
@@ -101,7 +101,7 @@ rigor sig-gen [paths]
101
101
  | `--overwrite` | Allow a tighter return to replace user-authored RBS. |
102
102
  | `--include-private` | Emit private / protected instance methods too (default: public only). |
103
103
  | `--params=untyped\|observed\|observed-strict` | Parameter policy. Default `untyped`. `observed-strict` is reserved and currently a usage error. |
104
- | `--observe=PATH` | Directory / file to scan for call-site observations. Repeatable. Defaults to `spec/` when present. |
104
+ | `--observe=PATH` | Directory / file to scan for call-site observations. Repeatable. Defaults to the configured `test_paths:` (unset: whichever of `spec/` and `test/` exist). |
105
105
  | `--new-files` / `--new-methods` / `--tighter-returns` | Emit only that classification. |
106
106
  | `--format=text\|json` | Text RBS, or the structured candidate report. |
107
107
  | `--config=PATH` | Explicit `.rigor.yml`. |
@@ -133,8 +133,9 @@ skip is a finding. `--format=json` names each one:
133
133
  "classification": "skipped", "skip_reason": "sig.skipped.untyped-return" }
134
134
  ```
135
135
 
136
- Classifications: `new-file`, `new-method`, `tighter-return`, `equivalent`
137
- (nothing to tighten; silently dropped), `skipped`. Skip reasons and what
136
+ Classifications (the JSON `classification` values): `new_file`,
137
+ `new_method`, `tighter_return`, `equivalent` (nothing to tighten;
138
+ silently dropped), `skipped`. Skip reasons and what
138
139
  each one means for you: [`03-gap-protocol.md`](03-gap-protocol.md).
139
140
 
140
141
  ### Deriving a parameter type from call sites
@@ -215,10 +216,11 @@ a family prefix (`call`, `flow`, `assert`, `dump`, `def`) it prints the
215
216
  rule's firing conditions, the severity per profile, the evidence tier,
216
217
  and how to suppress it.
217
218
 
218
- **`explain` covers diagnostic rules only.** A `sig.skipped.*` id is a
219
- sig-gen *skip reason*, not a diagnostic rule — `rigor explain
220
- sig.skipped.untyped-return` answers `Unknown rule`. Skip reasons are
221
- documented in [`03-gap-protocol.md`](03-gap-protocol.md).
219
+ **`explain` has two catalogues.** A `sig.skipped.*` id is a sig-gen
220
+ *skip reason*, not a diagnostic rule, but `rigor explain
221
+ sig.skipped.untyped-return` answers it from a second catalogue (no
222
+ severity, no profile, nothing to suppress). The table in
223
+ [`03-gap-protocol.md`](03-gap-protocol.md) is the summary.
222
224
 
223
225
  ## `rigor check` — the gate, not the oracle
224
226
 
@@ -255,7 +257,9 @@ Two shape differences from the CLI worth knowing:
255
257
  - `rigor_sig_gen` returns the **JSON candidate report**, always — there
256
258
  is no `--print` text mode and no `--diff`. Read `rbs` per candidate.
257
259
  - `rigor_sig_gen` exposes `params` but **not** `observe`; observation
258
- falls back to `spec/` when present. Point it elsewhere from the CLI.
260
+ reads the configured `test_paths:` (unset: whichever of `spec/` and
261
+ `test/` exist). To observe anything else, declare it in `test_paths:`
262
+ or use the CLI's `--observe`.
259
263
 
260
264
  `rigor_triage` and `rigor_coverage` are also served, and belong to
261
265
  `rigor-baseline-reduce` / `rigor-protection-uplift` rather than here.
@@ -123,6 +123,3 @@ more to the project than any annotation. File it at
123
123
  Also say `rigor --version`, and note whether `sig/` and the relevant
124
124
  plugins were in play — a gap that only appears without community RBS is a
125
125
  different bug from one that survives it.
126
-
127
- Inside Rigor's own tree the same report is the deliverable: the gap is
128
- the reason not to hand-write the RBS there.
@@ -1,7 +1,9 @@
1
1
  ---
2
2
  name: rigor-unused-adjudicate
3
- description: |
4
- Find dead code in a Ruby project with `rigor unused` — establish what the report can see on THIS project first, then adjudicate every row before proposing any deletion. Use this whenever someone asks to find or remove dead code, unused classes, unused constants, or "code nobody calls", whenever they ask what a `rigor unused` report means or which rows are safe to delete, and whenever a dead-code cleanup, codebase inventory, or legacy audit comes up — even if they never say "rigor". The report is a review queue and not a defect list; on an adjudicated corpus target only 4 of 57 rows were genuinely dead, so acting on it directly produces mostly wrong deletions. NOT for deleting a specific class you already know is dead, and NOT for `rigor check` diagnostics (those are ordinary type errors).
3
+ description: >-
4
+ Adjudicate a `rigor unused` report safely before proposing dead-code removal. Use when interpreting or
5
+ reviewing Rigor's unused classes/modules/constants, or when a cleanup is based on that report; not for
6
+ a specific deletion already known to be safe or for ordinary `rigor check` diagnostics.
5
7
  license: MPL-2.0
6
8
  metadata:
7
9
  version: 0.2.0
@@ -1,7 +1,9 @@
1
1
  ---
2
2
  name: rigor-upgrade
3
- description: |
4
- Adopt a new Rigor version cleanly: after upgrading the `rigortype` gem, re-run the analysis, diff the diagnostics against the committed baseline, and sort the changes into genuine new catches (sharper inference), known sig-quality false positives, and the baseline you should regenerate. Triggers: "I upgraded Rigor, what changed?", "new diagnostics after gem update rigortype", "adopt the new Rigor version", "rigor baseline drifted after upgrade". NOT for first-time setup (use rigor-project-init) or routine baseline work unrelated to an upgrade (use rigor-baseline-reduce).
3
+ description: >-
4
+ Adopt a new `rigortype` version by comparing its diagnostics with the committed baseline and separating
5
+ new catches from signature-quality false positives. Use after a Rigor gem upgrade; not for first-time
6
+ setup or routine baseline reduction.
5
7
  license: MPL-2.0
6
8
  metadata:
7
9
  version: 0.1.0
@@ -50,12 +52,15 @@ rigor --version
50
52
  ### Phase 2 — see the delta against the committed baseline
51
53
 
52
54
  ```sh
53
- rigor check
54
- rigor diff # compare current diagnostics to the saved baseline JSON
55
+ rigor check # everything outside the committed baseline's envelope
56
+ rigor baseline drift # per-bucket movement against .rigor-baseline.yml
55
57
  ```
56
58
 
57
- `rigor diff` shows what is **new** relative to the baseline — that set is
58
- what the upgrade changed.
59
+ With `baseline:` wired, `rigor check` already hides what the baseline
60
+ covers, so what it prints is **new** relative to the baseline — that set
61
+ is what the upgrade changed. `rigor baseline drift` adds the bucket view:
62
+ buckets now over their recorded count, and buckets the new version
63
+ cleared or shrank.
59
64
 
60
65
  ### Phase 3 — sort the new diagnostics
61
66
 
@@ -80,8 +85,8 @@ envelope so the regeneration does not bury what you just fixed:
80
85
  rigor baseline regenerate
81
86
  ```
82
87
 
83
- Commit the updated `.rigor-baseline.yml` together with any fixes, so the
84
- team adopts the same post-upgrade baseline.
88
+ Recommend committing the updated `.rigor-baseline.yml` together with any
89
+ fixes, so the team adopts the same post-upgrade baseline.
85
90
 
86
91
  ## Note
87
92
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rigortype
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.9
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rigor contributors
@@ -308,10 +308,15 @@ files:
308
308
  - data/builtins/ruby_core/time.yml
309
309
  - data/capability_roles/capability_roles.rbs
310
310
  - data/core_overlay/csv.rbs
311
+ - data/core_overlay/enumerable.rbs
312
+ - data/core_overlay/enumerator.rbs
313
+ - data/core_overlay/hash_rbs3.rbs
311
314
  - data/core_overlay/numeric.rbs
312
315
  - data/core_overlay/pathname.rbs
316
+ - data/core_overlay/process.rbs
313
317
  - data/core_overlay/psych.rbs
314
318
  - data/core_overlay/resolv.rbs
319
+ - data/core_overlay/string_io.rbs
315
320
  - data/core_overlay/string_scanner.rbs
316
321
  - data/effects/core.yml
317
322
  - data/effects/registry.yml
@@ -388,6 +393,7 @@ files:
388
393
  - docs/manual/plugins/rigor-actioncable.md
389
394
  - docs/manual/plugins/rigor-actionmailer.md
390
395
  - docs/manual/plugins/rigor-actionpack.md
396
+ - docs/manual/plugins/rigor-active-model-serializers.md
391
397
  - docs/manual/plugins/rigor-activejob.md
392
398
  - docs/manual/plugins/rigor-activerecord.md
393
399
  - docs/manual/plugins/rigor-activestorage.md
@@ -398,6 +404,7 @@ files:
398
404
  - docs/manual/plugins/rigor-dry-types.md
399
405
  - docs/manual/plugins/rigor-dry-validation.md
400
406
  - docs/manual/plugins/rigor-factorybot.md
407
+ - docs/manual/plugins/rigor-grape.md
401
408
  - docs/manual/plugins/rigor-graphql.md
402
409
  - docs/manual/plugins/rigor-hanami.md
403
410
  - docs/manual/plugins/rigor-mangrove.md
@@ -427,6 +434,7 @@ files:
427
434
  - lib/rigor/analysis/check_rules/duplicate_hash_key_collector.rb
428
435
  - lib/rigor/analysis/check_rules/inferred_param_guard.rb
429
436
  - lib/rigor/analysis/check_rules/ivar_write_collector.rb
437
+ - lib/rigor/analysis/check_rules/lexical_method_sites.rb
430
438
  - lib/rigor/analysis/check_rules/main_pass_collector.rb
431
439
  - lib/rigor/analysis/check_rules/published_constant_guard.rb
432
440
  - lib/rigor/analysis/check_rules/return_in_ensure_collector.rb
@@ -434,6 +442,8 @@ files:
434
442
  - lib/rigor/analysis/check_rules/rule_walk.rb
435
443
  - lib/rigor/analysis/check_rules/self_closedness_scanner.rb
436
444
  - lib/rigor/analysis/check_rules/shadowed_rescue_collector.rb
445
+ - lib/rigor/analysis/check_rules/source_arity.rb
446
+ - lib/rigor/analysis/check_rules/special_global_setters.rb
437
447
  - lib/rigor/analysis/check_rules/unreachable_clause_collector.rb
438
448
  - lib/rigor/analysis/check_rules/void_value_use_collector.rb
439
449
  - lib/rigor/analysis/crash_signature.rb
@@ -450,6 +460,8 @@ files:
450
460
  - lib/rigor/analysis/erb_template_detector.rb
451
461
  - lib/rigor/analysis/fact_store.rb
452
462
  - lib/rigor/analysis/incremental.rb
463
+ - lib/rigor/analysis/incremental_run_slot.rb
464
+ - lib/rigor/analysis/incremental_run_slot/write_guard.rb
453
465
  - lib/rigor/analysis/incremental_session.rb
454
466
  - lib/rigor/analysis/path_expansion.rb
455
467
  - lib/rigor/analysis/plugin_fact_fingerprint.rb
@@ -477,6 +489,12 @@ files:
477
489
  - lib/rigor/analysis/runner/run_snapshots.rb
478
490
  - lib/rigor/analysis/self_call_resolution_recorder.rb
479
491
  - lib/rigor/analysis/severity_stamp.rb
492
+ - lib/rigor/analysis/shadow_harness.rb
493
+ - lib/rigor/analysis/source_rbs_gate.rb
494
+ - lib/rigor/analysis/template_unit_collector.rb
495
+ - lib/rigor/analysis/template_unit_paths.rb
496
+ - lib/rigor/analysis/template_unit_positions.rb
497
+ - lib/rigor/analysis/template_units.rb
480
498
  - lib/rigor/analysis/worker_session.rb
481
499
  - lib/rigor/ast.rb
482
500
  - lib/rigor/ast/type_node.rb
@@ -500,6 +518,7 @@ files:
500
518
  - lib/rigor/cache/rbs_environment_marshal_patch.rb
501
519
  - lib/rigor/cache/rbs_known_class_names.rb
502
520
  - lib/rigor/cache/store.rb
521
+ - lib/rigor/cache/value_digest.rb
503
522
  - lib/rigor/ci_detector.rb
504
523
  - lib/rigor/cli.rb
505
524
  - lib/rigor/cli/annotate_command.rb
@@ -553,21 +572,26 @@ files:
553
572
  - lib/rigor/cli/triage_renderer.rb
554
573
  - lib/rigor/cli/type_of_command.rb
555
574
  - lib/rigor/cli/type_of_renderer.rb
575
+ - lib/rigor/cli/type_of_template_probe.rb
556
576
  - lib/rigor/cli/type_scan_command.rb
557
577
  - lib/rigor/cli/type_scan_renderer.rb
558
578
  - lib/rigor/cli/type_scan_report.rb
559
579
  - lib/rigor/cli/unused_command.rb
560
580
  - lib/rigor/cli/upgrade_command.rb
561
581
  - lib/rigor/config_audit.rb
582
+ - lib/rigor/config_path.rb
562
583
  - lib/rigor/configuration.rb
563
584
  - lib/rigor/configuration/dependencies.rb
564
585
  - lib/rigor/configuration/severity_profile.rb
565
586
  - lib/rigor/configuration_error.rb
566
587
  - lib/rigor/effects.rb
588
+ - lib/rigor/effects/ancestry_recorder.rb
567
589
  - lib/rigor/effects/attribution.rb
590
+ - lib/rigor/effects/callee_rule.rb
568
591
  - lib/rigor/effects/catalog.rb
569
592
  - lib/rigor/effects/collector.rb
570
593
  - lib/rigor/effects/config_envelopes.rb
594
+ - lib/rigor/effects/definition_context.rb
571
595
  - lib/rigor/effects/definition_lines.rb
572
596
  - lib/rigor/effects/discharge.rb
573
597
  - lib/rigor/effects/effect_table.rb
@@ -601,6 +625,7 @@ files:
601
625
  - lib/rigor/effects/unit_scan.rb
602
626
  - lib/rigor/effects/unknown_label_check.rb
603
627
  - lib/rigor/effects/unknown_label_report.rb
628
+ - lib/rigor/effects/visibility.rb
604
629
  - lib/rigor/environment.rb
605
630
  - lib/rigor/environment/bundle_sig_discovery.rb
606
631
  - lib/rigor/environment/class_registry.rb
@@ -610,6 +635,8 @@ files:
610
635
  - lib/rigor/environment/hkt_registry_holder.rb
611
636
  - lib/rigor/environment/installed_gem_set.rb
612
637
  - lib/rigor/environment/lockfile_resolver.rb
638
+ - lib/rigor/environment/member_consistency.rb
639
+ - lib/rigor/environment/member_consistency/comparator.rb
613
640
  - lib/rigor/environment/missing_gem_constant_index.rb
614
641
  - lib/rigor/environment/rbs_collection_discovery.rb
615
642
  - lib/rigor/environment/rbs_coverage_report.rb
@@ -617,15 +644,20 @@ files:
617
644
  - lib/rigor/environment/rbs_loader.rb
618
645
  - lib/rigor/environment/reflection.rb
619
646
  - lib/rigor/environment/reporters.rb
647
+ - lib/rigor/environment/source_rbs_synthesis.rb
620
648
  - lib/rigor/flow_contribution.rb
621
649
  - lib/rigor/flow_contribution/conflict.rb
622
650
  - lib/rigor/flow_contribution/element.rb
623
651
  - lib/rigor/flow_contribution/fact.rb
624
652
  - lib/rigor/flow_contribution/merge_result.rb
625
653
  - lib/rigor/flow_contribution/merger.rb
654
+ - lib/rigor/hashing/xxh3.rb
626
655
  - lib/rigor/inference/acceptance.rb
627
656
  - lib/rigor/inference/anonymous_meta_class.rb
657
+ - lib/rigor/inference/block_auto_splat.rb
658
+ - lib/rigor/inference/block_call_timing.rb
628
659
  - lib/rigor/inference/block_parameter_binder.rb
660
+ - lib/rigor/inference/block_repetition.rb
629
661
  - lib/rigor/inference/body_fixpoint.rb
630
662
  - lib/rigor/inference/budget_trace.rb
631
663
  - lib/rigor/inference/builtins/array_catalog.rb
@@ -652,16 +684,29 @@ files:
652
684
  - lib/rigor/inference/closure_escape_analyzer.rb
653
685
  - lib/rigor/inference/content_join.rb
654
686
  - lib/rigor/inference/coverage_scanner.rb
687
+ - lib/rigor/inference/declaration_walk.rb
688
+ - lib/rigor/inference/declaration_walk/context.rb
689
+ - lib/rigor/inference/declaration_walk/errors.rb
690
+ - lib/rigor/inference/declaration_walk/shadow.rb
691
+ - lib/rigor/inference/declaration_walk/traversal.rb
655
692
  - lib/rigor/inference/def_handle.rb
656
693
  - lib/rigor/inference/def_node_resolver.rb
657
694
  - lib/rigor/inference/def_return_typer.rb
695
+ - lib/rigor/inference/define_method_block_self.rb
696
+ - lib/rigor/inference/definer_resolution.rb
658
697
  - lib/rigor/inference/dynamic_origin.rb
659
698
  - lib/rigor/inference/element_read_widening.rb
699
+ - lib/rigor/inference/error_info.rb
660
700
  - lib/rigor/inference/expression_typer.rb
701
+ - lib/rigor/inference/external_ancestor_resolution.rb
661
702
  - lib/rigor/inference/fallback.rb
662
703
  - lib/rigor/inference/fallback_tracer.rb
663
704
  - lib/rigor/inference/flow_tracer.rb
664
705
  - lib/rigor/inference/fork_map.rb
706
+ - lib/rigor/inference/fresh_frame_blocks.rb
707
+ - lib/rigor/inference/global_write_census.rb
708
+ - lib/rigor/inference/guard_rebinding.rb
709
+ - lib/rigor/inference/hash_lookup_mutation.rb
665
710
  - lib/rigor/inference/hkt_body.rb
666
711
  - lib/rigor/inference/hkt_body_parser.rb
667
712
  - lib/rigor/inference/hkt_reducer.rb
@@ -669,28 +714,45 @@ files:
669
714
  - lib/rigor/inference/hkt_sugar_translator.rb
670
715
  - lib/rigor/inference/index_write_widening.rb
671
716
  - lib/rigor/inference/indexed_narrowing.rb
717
+ - lib/rigor/inference/jump_targets.rb
718
+ - lib/rigor/inference/last_line.rb
719
+ - lib/rigor/inference/last_line/implicit_self.rb
720
+ - lib/rigor/inference/last_line/self_evidence.rb
721
+ - lib/rigor/inference/last_status.rb
672
722
  - lib/rigor/inference/macro_block_self_type.rb
723
+ - lib/rigor/inference/match_rebinding.rb
724
+ - lib/rigor/inference/match_rebinding/calls.rb
725
+ - lib/rigor/inference/match_rebinding/frame.rb
726
+ - lib/rigor/inference/match_rebinding/operands.rb
727
+ - lib/rigor/inference/match_rebinding/self_calls.rb
673
728
  - lib/rigor/inference/method_dispatcher.rb
729
+ - lib/rigor/inference/method_dispatcher/alias_strict_nominals.rb
674
730
  - lib/rigor/inference/method_dispatcher/array_to_h_folding.rb
675
731
  - lib/rigor/inference/method_dispatcher/block_folding.rb
676
732
  - lib/rigor/inference/method_dispatcher/call_context.rb
677
733
  - lib/rigor/inference/method_dispatcher/cgi_folding.rb
678
734
  - lib/rigor/inference/method_dispatcher/constant_folding.rb
679
735
  - lib/rigor/inference/method_dispatcher/data_folding.rb
736
+ - lib/rigor/inference/method_dispatcher/facet_distribution.rb
680
737
  - lib/rigor/inference/method_dispatcher/file_folding.rb
738
+ - lib/rigor/inference/method_dispatcher/hash_transform_keys_folding.rb
681
739
  - lib/rigor/inference/method_dispatcher/iterator_dispatch.rb
682
740
  - lib/rigor/inference/method_dispatcher/json_folding.rb
683
741
  - lib/rigor/inference/method_dispatcher/kernel_dispatch.rb
684
742
  - lib/rigor/inference/method_dispatcher/literal_string_folding.rb
743
+ - lib/rigor/inference/method_dispatcher/match_data_folding.rb
685
744
  - lib/rigor/inference/method_dispatcher/math_folding.rb
686
745
  - lib/rigor/inference/method_dispatcher/member_shape_projection.rb
687
746
  - lib/rigor/inference/method_dispatcher/method_folding.rb
688
747
  - lib/rigor/inference/method_dispatcher/overload_selector.rb
748
+ - lib/rigor/inference/method_dispatcher/process_folding.rb
749
+ - lib/rigor/inference/method_dispatcher/proven_overload.rb
689
750
  - lib/rigor/inference/method_dispatcher/random_folding.rb
690
751
  - lib/rigor/inference/method_dispatcher/rbs_dispatch.rb
691
752
  - lib/rigor/inference/method_dispatcher/receiver_affinity.rb
692
753
  - lib/rigor/inference/method_dispatcher/reduce_folding.rb
693
754
  - lib/rigor/inference/method_dispatcher/regexp_folding.rb
755
+ - lib/rigor/inference/method_dispatcher/self_substitute.rb
694
756
  - lib/rigor/inference/method_dispatcher/set_folding.rb
695
757
  - lib/rigor/inference/method_dispatcher/shape_dispatch.rb
696
758
  - lib/rigor/inference/method_dispatcher/shellwords_folding.rb
@@ -702,30 +764,49 @@ files:
702
764
  - lib/rigor/inference/method_dispatcher/universal_object_dispatch.rb
703
765
  - lib/rigor/inference/method_dispatcher/uri_folding.rb
704
766
  - lib/rigor/inference/method_parameter_binder.rb
767
+ - lib/rigor/inference/module_function_state.rb
705
768
  - lib/rigor/inference/multi_target_binder.rb
706
769
  - lib/rigor/inference/mutation_rejoin.rb
707
770
  - lib/rigor/inference/mutation_widening.rb
708
771
  - lib/rigor/inference/narrowing.rb
772
+ - lib/rigor/inference/operand_effects.rb
773
+ - lib/rigor/inference/operand_walk.rb
709
774
  - lib/rigor/inference/optimistic_origin.rb
710
775
  - lib/rigor/inference/origin_lookup.rb
711
776
  - lib/rigor/inference/parameter_inference_collector.rb
712
777
  - lib/rigor/inference/pre_eval_constants.rb
713
778
  - lib/rigor/inference/precision_scanner.rb
779
+ - lib/rigor/inference/project_method_ownership.rb
714
780
  - lib/rigor/inference/project_patched_methods.rb
715
781
  - lib/rigor/inference/project_patched_scanner.rb
716
782
  - lib/rigor/inference/protection_scanner.rb
717
783
  - lib/rigor/inference/range_constant.rb
718
784
  - lib/rigor/inference/rbs_type_translator.rb
719
785
  - lib/rigor/inference/receiver_alias.rb
786
+ - lib/rigor/inference/receiver_blind_block.rb
720
787
  - lib/rigor/inference/refinement_mutation.rb
788
+ - lib/rigor/inference/repeated_or_writes.rb
789
+ - lib/rigor/inference/return_barrier.rb
790
+ - lib/rigor/inference/rewrite_mutation.rb
721
791
  - lib/rigor/inference/scope_indexer.rb
792
+ - lib/rigor/inference/scope_indexer/certainty.rb
793
+ - lib/rigor/inference/scope_indexer/class_cvars_collector.rb
794
+ - lib/rigor/inference/scope_indexer/def_nestings_collector.rb
795
+ - lib/rigor/inference/scope_indexer/layered_def_nestings.rb
796
+ - lib/rigor/inference/scope_indexer/member_layouts_collector.rb
797
+ - lib/rigor/inference/scope_indexer/mixin_accumulator.rb
798
+ - lib/rigor/inference/scope_indexer/superclasses_collector.rb
799
+ - lib/rigor/inference/singleton_hook_decline.rb
722
800
  - lib/rigor/inference/singleton_object_constant.rb
723
801
  - lib/rigor/inference/statement_evaluator.rb
802
+ - lib/rigor/inference/stored_block_call.rb
724
803
  - lib/rigor/inference/string_mutation.rb
725
804
  - lib/rigor/inference/struct_fold_safety.rb
726
805
  - lib/rigor/inference/synthetic_method.rb
727
806
  - lib/rigor/inference/synthetic_method_index.rb
728
807
  - lib/rigor/inference/synthetic_method_scanner.rb
808
+ - lib/rigor/inference/unknown_store_widening.rb
809
+ - lib/rigor/inference/unthreaded_rebinds.rb
729
810
  - lib/rigor/inference/version_guard.rb
730
811
  - lib/rigor/inference/void_origin.rb
731
812
  - lib/rigor/inference/void_tail_summary.rb
@@ -757,6 +838,7 @@ files:
757
838
  - lib/rigor/plugin/base.rb
758
839
  - lib/rigor/plugin/blueprint.rb
759
840
  - lib/rigor/plugin/box.rb
841
+ - lib/rigor/plugin/box_probe.rb
760
842
  - lib/rigor/plugin/bundled_catalog.rb
761
843
  - lib/rigor/plugin/effect_ancestry.rb
762
844
  - lib/rigor/plugin/effect_attribution.rb
@@ -781,6 +863,7 @@ files:
781
863
  - lib/rigor/plugin/registry.rb
782
864
  - lib/rigor/plugin/services.rb
783
865
  - lib/rigor/plugin/source_rbs_synthesis_reporter.rb
866
+ - lib/rigor/plugin/template_unit.rb
784
867
  - lib/rigor/plugin/trust_policy.rb
785
868
  - lib/rigor/plugin/type_node_resolver.rb
786
869
  - lib/rigor/plugin_gap_advisory.rb
@@ -802,13 +885,20 @@ files:
802
885
  - lib/rigor/rbs_extended/hkt_directives.rb
803
886
  - lib/rigor/rbs_extended/reporter.rb
804
887
  - lib/rigor/reflection.rb
888
+ - lib/rigor/reflection/constant_ancestors.rb
805
889
  - lib/rigor/reflection/constant_path.rb
806
890
  - lib/rigor/runtime/jit.rb
807
891
  - lib/rigor/scope.rb
808
892
  - lib/rigor/scope/discovery_index.rb
893
+ - lib/rigor/scope/resolution_chain.rb
894
+ - lib/rigor/scope/resolution_chain/relevance.rb
809
895
  - lib/rigor/sig_gen.rb
896
+ - lib/rigor/sig_gen/alias_index.rb
810
897
  - lib/rigor/sig_gen/classification.rb
898
+ - lib/rigor/sig_gen/declaration_equivalence.rb
899
+ - lib/rigor/sig_gen/effect_annotation.rb
811
900
  - lib/rigor/sig_gen/generator.rb
901
+ - lib/rigor/sig_gen/inline_declarations.rb
812
902
  - lib/rigor/sig_gen/layout_index.rb
813
903
  - lib/rigor/sig_gen/meta_class_shape.rb
814
904
  - lib/rigor/sig_gen/method_candidate.rb
@@ -829,6 +919,7 @@ files:
829
919
  - lib/rigor/source/node_children.rb
830
920
  - lib/rigor/source/node_locator.rb
831
921
  - lib/rigor/source/node_walker.rb
922
+ - lib/rigor/source/parameter_envelope.rb
832
923
  - lib/rigor/testing.rb
833
924
  - lib/rigor/triage.rb
834
925
  - lib/rigor/triage/catalogue.rb
@@ -893,8 +984,19 @@ files:
893
984
  - plugins/rigor-actionpack/lib/rigor/plugin/actionpack/analyzer.rb
894
985
  - plugins/rigor-actionpack/lib/rigor/plugin/actionpack/controller_discoverer.rb
895
986
  - plugins/rigor-actionpack/lib/rigor/plugin/actionpack/controller_index.rb
987
+ - plugins/rigor-actionpack/lib/rigor/plugin/actionpack/controller_scan.rb
896
988
  - plugins/rigor-actionpack/lib/rigor/plugin/actionpack/effects.rb
989
+ - plugins/rigor-actionpack/lib/rigor/plugin/actionpack/erb_compiler.rb
990
+ - plugins/rigor-actionpack/lib/rigor/plugin/actionpack/render_locals.rb
991
+ - plugins/rigor-actionpack/lib/rigor/plugin/actionpack/view_assigns.rb
992
+ - plugins/rigor-actionpack/lib/rigor/plugin/actionpack/view_units.rb
897
993
  - plugins/rigor-actionpack/sig/action_controller.rbs
994
+ - plugins/rigor-actionpack/sig/action_view.rbs
995
+ - plugins/rigor-active-model-serializers/lib/rigor-active-model-serializers.rb
996
+ - plugins/rigor-active-model-serializers/lib/rigor/plugin/active_model_serializers.rb
997
+ - plugins/rigor-active-model-serializers/lib/rigor/plugin/active_model_serializers/serializer_discoverer.rb
998
+ - plugins/rigor-active-model-serializers/lib/rigor/plugin/active_model_serializers/serializer_index.rb
999
+ - plugins/rigor-active-model-serializers/sig/active_model_serializers.rbs
898
1000
  - plugins/rigor-activejob/lib/rigor-activejob.rb
899
1001
  - plugins/rigor-activejob/lib/rigor/plugin/activejob.rb
900
1002
  - plugins/rigor-activejob/lib/rigor/plugin/activejob/analyzer.rb
@@ -961,9 +1063,13 @@ files:
961
1063
  - plugins/rigor-ffi/lib/rigor/plugin/ffi/target_detector.rb
962
1064
  - plugins/rigor-ffi/lib/rigor/plugin/ffi/types.rb
963
1065
  - plugins/rigor-ffi/sig/ffi.rbs
1066
+ - plugins/rigor-grape/lib/rigor-grape.rb
1067
+ - plugins/rigor-grape/lib/rigor/plugin/grape.rb
1068
+ - plugins/rigor-grape/sig/grape.rbs
964
1069
  - plugins/rigor-graphql/lib/rigor-graphql.rb
965
1070
  - plugins/rigor-graphql/lib/rigor/plugin/graphql.rb
966
1071
  - plugins/rigor-graphql/lib/rigor/plugin/graphql/type_scanner.rb
1072
+ - plugins/rigor-graphql/sig/graphql.rbs
967
1073
  - plugins/rigor-hanami/lib/rigor-hanami.rb
968
1074
  - plugins/rigor-hanami/lib/rigor/plugin/hanami.rb
969
1075
  - plugins/rigor-hanami/lib/rigor/plugin/hanami/action_checker.rb
@@ -1004,6 +1110,7 @@ files:
1004
1110
  - plugins/rigor-rbnacl/sig/rbnacl.rbs
1005
1111
  - plugins/rigor-rbs-inline/lib/rigor-rbs-inline.rb
1006
1112
  - plugins/rigor-rbs-inline/lib/rigor/plugin/rbs_inline.rb
1113
+ - plugins/rigor-rbs-inline/lib/rigor/plugin/rbs_inline/same_line_annotations.rb
1007
1114
  - plugins/rigor-rspec-rails/lib/rigor-rspec-rails.rb
1008
1115
  - plugins/rigor-rspec-rails/lib/rigor/plugin/rspec_rails.rb
1009
1116
  - plugins/rigor-rspec-rails/lib/rigor/plugin/rspec_rails/have_http_status_analyzer.rb
@@ -1040,6 +1147,7 @@ files:
1040
1147
  - plugins/rigor-sorbet/lib/rigor/plugin/sorbet/sig_parser.rb
1041
1148
  - plugins/rigor-sorbet/lib/rigor/plugin/sorbet/sigil_detector.rb
1042
1149
  - plugins/rigor-sorbet/lib/rigor/plugin/sorbet/type_translator.rb
1150
+ - plugins/rigor-sorbet/sig/sorbet.rbs
1043
1151
  - plugins/rigor-statesman/lib/rigor-statesman.rb
1044
1152
  - plugins/rigor-statesman/lib/rigor/plugin/statesman.rb
1045
1153
  - plugins/rigor-typescript-utility-types/lib/rigor-typescript-utility-types.rb
@@ -1052,6 +1160,7 @@ files:
1052
1160
  - sig/rigor/analysis/dependency_source_inference/gem_resolver.rbs
1053
1161
  - sig/rigor/analysis/dependency_source_inference/index.rbs
1054
1162
  - sig/rigor/analysis/fact_store.rbs
1163
+ - sig/rigor/analysis/project_scan.rbs
1055
1164
  - sig/rigor/analysis/reachability/scan_cache.rbs
1056
1165
  - sig/rigor/ast.rbs
1057
1166
  - sig/rigor/cache.rbs
@@ -1059,20 +1168,40 @@ files:
1059
1168
  - sig/rigor/cli/explain_command.rbs
1060
1169
  - sig/rigor/cli/sig_gen_command.rbs
1061
1170
  - sig/rigor/cli/type_scan_command.rbs
1171
+ - sig/rigor/effects/config_envelopes.rbs
1172
+ - sig/rigor/effects/effect_table.rbs
1173
+ - sig/rigor/effects/envelope.rbs
1174
+ - sig/rigor/effects/envelope_index.rbs
1175
+ - sig/rigor/effects/file_collection.rbs
1176
+ - sig/rigor/effects/label.rbs
1177
+ - sig/rigor/effects/label_set.rbs
1178
+ - sig/rigor/effects/method_key.rbs
1179
+ - sig/rigor/effects/origin.rbs
1180
+ - sig/rigor/effects/plugin_facts.rbs
1181
+ - sig/rigor/effects/registry.rbs
1182
+ - sig/rigor/effects/summary.rbs
1183
+ - sig/rigor/effects/taint_cause.rbs
1062
1184
  - sig/rigor/environment.rbs
1063
1185
  - sig/rigor/inference.rbs
1064
1186
  - sig/rigor/inference/builtins.rbs
1065
1187
  - sig/rigor/inference/builtins/method_catalog.rbs
1188
+ - sig/rigor/inference/optimistic_origin.rbs
1066
1189
  - sig/rigor/inference/void_origin.rbs
1067
1190
  - sig/rigor/plugin.rbs
1068
1191
  - sig/rigor/plugin/access_denied_error.rbs
1192
+ - sig/rigor/plugin/additional_initializer.rbs
1069
1193
  - sig/rigor/plugin/base.rbs
1070
1194
  - sig/rigor/plugin/blueprint.rbs
1195
+ - sig/rigor/plugin/effect_ancestry.rbs
1196
+ - sig/rigor/plugin/effect_attribution.rbs
1197
+ - sig/rigor/plugin/effect_edge.rbs
1198
+ - sig/rigor/plugin/effect_entry_points.rbs
1071
1199
  - sig/rigor/plugin/fact_store.rbs
1072
1200
  - sig/rigor/plugin/io_boundary.rbs
1073
1201
  - sig/rigor/plugin/load_error.rbs
1074
1202
  - sig/rigor/plugin/loader.rbs
1075
1203
  - sig/rigor/plugin/manifest.rbs
1204
+ - sig/rigor/plugin/protocol_contract.rbs
1076
1205
  - sig/rigor/plugin/registry.rbs
1077
1206
  - sig/rigor/plugin/services.rbs
1078
1207
  - sig/rigor/plugin/trust_policy.rbs
@@ -1141,6 +1270,7 @@ require_paths:
1141
1270
  - plugins/rigor-actioncable/lib
1142
1271
  - plugins/rigor-actionmailer/lib
1143
1272
  - plugins/rigor-actionpack/lib
1273
+ - plugins/rigor-active-model-serializers/lib
1144
1274
  - plugins/rigor-activejob/lib
1145
1275
  - plugins/rigor-activerecord/lib
1146
1276
  - plugins/rigor-activestorage/lib
@@ -1155,6 +1285,7 @@ require_paths:
1155
1285
  - plugins/rigor-factorybot/lib
1156
1286
  - plugins/rigor-ffi/lib
1157
1287
  - plugins/rigor-ffi-rzmq/lib
1288
+ - plugins/rigor-grape/lib
1158
1289
  - plugins/rigor-graphql/lib
1159
1290
  - plugins/rigor-hanami/lib
1160
1291
  - plugins/rigor-mangrove/lib