rigortype 0.3.7 → 0.3.9

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 (450) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/data/capability_roles/capability_roles.rbs +36 -0
  4. data/data/gem_overlay/activesupport/core_ext.rbs +109 -13
  5. data/docs/handbook/02-everyday-types.md +17 -14
  6. data/docs/handbook/03-narrowing.md +37 -4
  7. data/docs/handbook/05-methods-and-blocks.md +1 -1
  8. data/docs/handbook/06-classes.md +2 -2
  9. data/docs/handbook/07-rbs-and-extended.md +14 -1
  10. data/docs/handbook/11-sig-gen.md +96 -15
  11. data/docs/handbook/README.md +1 -1
  12. data/docs/handbook/appendix-elixir.md +2 -2
  13. data/docs/handbook/appendix-go.md +2 -2
  14. data/docs/handbook/appendix-java-csharp.md +2 -2
  15. data/docs/handbook/appendix-mypy.md +2 -2
  16. data/docs/handbook/appendix-phpstan.md +1 -1
  17. data/docs/handbook/appendix-rust.md +1 -1
  18. data/docs/handbook/appendix-type-theory.md +4 -4
  19. data/docs/handbook/appendix-typescript.md +1 -1
  20. data/docs/llms.txt +2 -0
  21. data/docs/manual/02-cli-reference.md +39 -4
  22. data/docs/manual/03-configuration.md +11 -0
  23. data/docs/manual/04-diagnostics.md +12 -1
  24. data/docs/manual/07-plugins.md +15 -5
  25. data/docs/manual/08-skills.md +23 -2
  26. data/docs/manual/11-ci.md +9 -0
  27. data/docs/manual/15-type-protection-coverage.md +8 -0
  28. data/docs/manual/16-rbs-extended-annotations.md +6 -1
  29. data/docs/manual/18-removing-dead-code.md +10 -8
  30. data/docs/manual/plugins/rigor-actionpack.md +18 -0
  31. data/docs/manual/plugins/rigor-activerecord.md +28 -0
  32. data/docs/manual/plugins/rigor-activesupport-core-ext.md +32 -2
  33. data/docs/manual/plugins/rigor-rbs-inline.md +42 -1
  34. data/lib/rigor/analysis/baseline.rb +2 -2
  35. data/lib/rigor/analysis/check_rules/always_truthy_condition_collector.rb +1 -1
  36. data/lib/rigor/analysis/check_rules/dead_version_guard_arms.rb +1 -5
  37. data/lib/rigor/analysis/check_rules/ivar_write_collector.rb +10 -2
  38. data/lib/rigor/analysis/check_rules/main_pass_collector.rb +1 -1
  39. data/lib/rigor/analysis/check_rules/published_constant_guard.rb +15 -6
  40. data/lib/rigor/analysis/check_rules/rule_ids.rb +1 -1
  41. data/lib/rigor/analysis/check_rules/rule_walk.rb +39 -4
  42. data/lib/rigor/analysis/check_rules/self_closedness_scanner.rb +1 -1
  43. data/lib/rigor/analysis/check_rules/shadowed_rescue_collector.rb +1 -1
  44. data/lib/rigor/analysis/check_rules/unreachable_clause_collector.rb +2 -2
  45. data/lib/rigor/analysis/check_rules/void_value_use_collector.rb +0 -1
  46. data/lib/rigor/analysis/check_rules.rb +200 -32
  47. data/lib/rigor/analysis/crash_signature.rb +69 -13
  48. data/lib/rigor/analysis/dependency_source_inference/boundary_cross_reporter.rb +1 -1
  49. data/lib/rigor/analysis/dependency_source_inference/builder.rb +0 -2
  50. data/lib/rigor/analysis/dependency_source_inference/gem_resolver.rb +0 -2
  51. data/lib/rigor/analysis/dependency_source_inference/index.rb +5 -5
  52. data/lib/rigor/analysis/dependency_source_inference/return_type_heuristic.rb +1 -2
  53. data/lib/rigor/analysis/dependency_source_inference/walker.rb +4 -4
  54. data/lib/rigor/analysis/effects_cache_probe.rb +3 -4
  55. data/lib/rigor/analysis/erb_template_detector.rb +1 -2
  56. data/lib/rigor/analysis/fact_store.rb +6 -1
  57. data/lib/rigor/analysis/incremental.rb +16 -0
  58. data/lib/rigor/analysis/incremental_session.rb +100 -29
  59. data/lib/rigor/analysis/plugin_fact_fingerprint.rb +0 -1
  60. data/lib/rigor/analysis/reachability/graph.rb +3 -5
  61. data/lib/rigor/analysis/reachability/plugin_roots.rb +6 -5
  62. data/lib/rigor/analysis/reachability/project_files.rb +2 -2
  63. data/lib/rigor/analysis/reachability/scan.rb +5 -5
  64. data/lib/rigor/analysis/reachability/scan_cache.rb +2 -2
  65. data/lib/rigor/analysis/reachability/signature_scan.rb +2 -2
  66. data/lib/rigor/analysis/result.rb +1 -3
  67. data/lib/rigor/analysis/rule_catalog.rb +4 -1
  68. data/lib/rigor/analysis/run_cache_key.rb +1 -1
  69. data/lib/rigor/analysis/run_cache_probe.rb +3 -5
  70. data/lib/rigor/analysis/runner/buffer_pool_dispatcher.rb +6 -8
  71. data/lib/rigor/analysis/runner/declaration_position.rb +1 -2
  72. data/lib/rigor/analysis/runner/diagnostic_aggregator.rb +316 -40
  73. data/lib/rigor/analysis/runner/effect_annotation_residual_pass.rb +2 -3
  74. data/lib/rigor/analysis/runner/effect_envelope_pass.rb +9 -10
  75. data/lib/rigor/analysis/runner/pool_coordinator.rb +430 -77
  76. data/lib/rigor/analysis/runner/project_pre_passes.rb +12 -6
  77. data/lib/rigor/analysis/runner/run_snapshots.rb +13 -3
  78. data/lib/rigor/analysis/runner.rb +200 -43
  79. data/lib/rigor/analysis/worker_session.rb +36 -12
  80. data/lib/rigor/bleeding_edge.rb +12 -24
  81. data/lib/rigor/builtins/hkt_builtins.rb +2 -2
  82. data/lib/rigor/builtins/imported_refinements.rb +166 -30
  83. data/lib/rigor/builtins/predefined_constant_refinements.rb +5 -7
  84. data/lib/rigor/builtins/regex_refinement.rb +4 -4
  85. data/lib/rigor/builtins/static_return_refinements.rb +5 -6
  86. data/lib/rigor/cache/annotation_location.rb +70 -0
  87. data/lib/rigor/cache/descriptor.rb +58 -20
  88. data/lib/rigor/cache/engine_source.rb +4 -4
  89. data/lib/rigor/cache/file_digest.rb +9 -1
  90. data/lib/rigor/cache/incremental_snapshot.rb +40 -6
  91. data/lib/rigor/cache/rbs_class_ancestor_table.rb +0 -3
  92. data/lib/rigor/cache/rbs_class_type_param_names.rb +0 -3
  93. data/lib/rigor/cache/rbs_constant_table.rb +0 -3
  94. data/lib/rigor/cache/rbs_descriptor.rb +79 -11
  95. data/lib/rigor/cache/rbs_environment.rb +8 -4
  96. data/lib/rigor/cache/rbs_environment_marshal_patch.rb +39 -0
  97. data/lib/rigor/cache/rbs_known_class_names.rb +0 -3
  98. data/lib/rigor/cache/store.rb +85 -33
  99. data/lib/rigor/cli/annotate_command.rb +5 -6
  100. data/lib/rigor/cli/check_command.rb +57 -10
  101. data/lib/rigor/cli/check_invocation.rb +6 -11
  102. data/lib/rigor/cli/check_runner_factory.rb +1 -5
  103. data/lib/rigor/cli/coverage_command.rb +1 -1
  104. data/lib/rigor/cli/coverage_mutation.rb +12 -3
  105. data/lib/rigor/cli/coverage_scan.rb +1 -5
  106. data/lib/rigor/cli/diff_command.rb +1 -1
  107. data/lib/rigor/cli/doc_links.rb +3 -3
  108. data/lib/rigor/cli/docs_command.rb +2 -2
  109. data/lib/rigor/cli/doctor_command.rb +85 -38
  110. data/lib/rigor/cli/effects_command.rb +2 -2
  111. data/lib/rigor/cli/effects_diff_renderer.rb +3 -3
  112. data/lib/rigor/cli/effects_snapshot_command.rb +1 -1
  113. data/lib/rigor/cli/explain_command.rb +34 -1
  114. data/lib/rigor/cli/fused_protection_report.rb +7 -1
  115. data/lib/rigor/cli/lsp_command.rb +1 -1
  116. data/lib/rigor/cli/mcp_command.rb +1 -1
  117. data/lib/rigor/cli/measurement_integrity_warning.rb +4 -5
  118. data/lib/rigor/cli/mutation_fork_scan.rb +6 -6
  119. data/lib/rigor/cli/mutation_protection_report.rb +7 -1
  120. data/lib/rigor/cli/plugin_command.rb +1 -1
  121. data/lib/rigor/cli/plugins_command.rb +2 -1
  122. data/lib/rigor/cli/prism_colorizer.rb +2 -2
  123. data/lib/rigor/cli/protection_fork_scan.rb +6 -6
  124. data/lib/rigor/cli/show_bleedingedge_command.rb +1 -1
  125. data/lib/rigor/cli/sig_gen_command.rb +31 -2
  126. data/lib/rigor/cli/skill_command.rb +1 -1
  127. data/lib/rigor/cli/skill_deep_probe.rb +4 -4
  128. data/lib/rigor/cli/skill_describe.rb +36 -35
  129. data/lib/rigor/cli/trace_command.rb +4 -4
  130. data/lib/rigor/cli/trace_renderer.rb +5 -6
  131. data/lib/rigor/cli/triage_command.rb +1 -1
  132. data/lib/rigor/cli/type_of_command.rb +10 -6
  133. data/lib/rigor/cli/type_scan_command.rb +4 -4
  134. data/lib/rigor/cli/unused_command.rb +11 -3
  135. data/lib/rigor/cli/upgrade_command.rb +1 -1
  136. data/lib/rigor/cli.rb +68 -6
  137. data/lib/rigor/config_audit.rb +30 -5
  138. data/lib/rigor/configuration/severity_profile.rb +6 -6
  139. data/lib/rigor/configuration.rb +43 -4
  140. data/lib/rigor/effects/attribution.rb +1 -3
  141. data/lib/rigor/effects/config_envelopes.rb +6 -8
  142. data/lib/rigor/effects/definition_lines.rb +25 -6
  143. data/lib/rigor/effects/effect_table.rb +0 -1
  144. data/lib/rigor/effects/entry_points.rb +0 -2
  145. data/lib/rigor/effects/envelope_check.rb +8 -8
  146. data/lib/rigor/effects/envelope_index.rb +5 -8
  147. data/lib/rigor/effects/framework_units.rb +4 -6
  148. data/lib/rigor/effects/identity.rb +4 -6
  149. data/lib/rigor/effects/inline_anchor.rb +7 -7
  150. data/lib/rigor/effects/label_intent.rb +3 -4
  151. data/lib/rigor/effects/liskov_check.rb +8 -8
  152. data/lib/rigor/effects/method_key.rb +1 -1
  153. data/lib/rigor/effects/plugin_facts.rb +4 -6
  154. data/lib/rigor/effects/propagator.rb +2 -3
  155. data/lib/rigor/effects/scanner.rb +1 -1
  156. data/lib/rigor/effects/signature_sources.rb +3 -5
  157. data/lib/rigor/effects/snapshot.rb +10 -10
  158. data/lib/rigor/effects/snapshot_diff.rb +1 -1
  159. data/lib/rigor/effects/unit_scan.rb +10 -10
  160. data/lib/rigor/effects/unknown_label_check.rb +3 -8
  161. data/lib/rigor/effects/unknown_label_report.rb +3 -4
  162. data/lib/rigor/environment/bundle_sig_discovery.rb +6 -6
  163. data/lib/rigor/environment/class_registry.rb +3 -1
  164. data/lib/rigor/environment/failure_slot.rb +28 -0
  165. data/lib/rigor/environment/installed_gem_set.rb +85 -0
  166. data/lib/rigor/environment/lockfile_resolver.rb +51 -4
  167. data/lib/rigor/environment/missing_gem_constant_index.rb +4 -4
  168. data/lib/rigor/environment/rbs_collection_discovery.rb +5 -5
  169. data/lib/rigor/environment/rbs_coverage_report.rb +5 -5
  170. data/lib/rigor/environment/rbs_hierarchy.rb +3 -1
  171. data/lib/rigor/environment/rbs_loader.rb +613 -113
  172. data/lib/rigor/environment.rb +189 -27
  173. data/lib/rigor/flow_contribution/merger.rb +0 -2
  174. data/lib/rigor/flow_contribution.rb +11 -13
  175. data/lib/rigor/inference/acceptance.rb +153 -8
  176. data/lib/rigor/inference/block_parameter_binder.rb +2 -3
  177. data/lib/rigor/inference/body_fixpoint.rb +5 -5
  178. data/lib/rigor/inference/budget_trace.rb +1 -5
  179. data/lib/rigor/inference/captured_locals.rb +2 -3
  180. data/lib/rigor/inference/closure_escape_analyzer.rb +2 -4
  181. data/lib/rigor/inference/coverage_scanner.rb +4 -6
  182. data/lib/rigor/inference/dynamic_origin.rb +1 -1
  183. data/lib/rigor/inference/element_read_widening.rb +168 -0
  184. data/lib/rigor/inference/expression_typer.rb +763 -143
  185. data/lib/rigor/inference/fork_map.rb +5 -7
  186. data/lib/rigor/inference/hkt_reducer.rb +2 -3
  187. data/lib/rigor/inference/hkt_registry.rb +19 -10
  188. data/lib/rigor/inference/hkt_sugar_translator.rb +15 -21
  189. data/lib/rigor/inference/index_write_widening.rb +1 -5
  190. data/lib/rigor/inference/macro_block_self_type.rb +1 -4
  191. data/lib/rigor/inference/method_dispatcher/block_folding.rb +2 -9
  192. data/lib/rigor/inference/method_dispatcher/cgi_folding.rb +1 -1
  193. data/lib/rigor/inference/method_dispatcher/constant_folding.rb +305 -19
  194. data/lib/rigor/inference/method_dispatcher/data_folding.rb +1 -1
  195. data/lib/rigor/inference/method_dispatcher/file_folding.rb +1 -1
  196. data/lib/rigor/inference/method_dispatcher/iterator_dispatch.rb +2 -2
  197. data/lib/rigor/inference/method_dispatcher/json_folding.rb +1 -1
  198. data/lib/rigor/inference/method_dispatcher/kernel_dispatch.rb +7 -1
  199. data/lib/rigor/inference/method_dispatcher/math_folding.rb +41 -3
  200. data/lib/rigor/inference/method_dispatcher/method_folding.rb +2 -5
  201. data/lib/rigor/inference/method_dispatcher/overload_selector.rb +61 -47
  202. data/lib/rigor/inference/method_dispatcher/random_folding.rb +82 -0
  203. data/lib/rigor/inference/method_dispatcher/rbs_dispatch.rb +165 -31
  204. data/lib/rigor/inference/method_dispatcher/receiver_affinity.rb +25 -4
  205. data/lib/rigor/inference/method_dispatcher/reduce_folding.rb +2 -8
  206. data/lib/rigor/inference/method_dispatcher/regexp_folding.rb +1 -1
  207. data/lib/rigor/inference/method_dispatcher/set_folding.rb +1 -1
  208. data/lib/rigor/inference/method_dispatcher/shape_dispatch.rb +1 -1
  209. data/lib/rigor/inference/method_dispatcher/shellwords_folding.rb +1 -1
  210. data/lib/rigor/inference/method_dispatcher/singleton_mixin_dispatch.rb +1 -2
  211. data/lib/rigor/inference/method_dispatcher/struct_folding.rb +4 -5
  212. data/lib/rigor/inference/method_dispatcher/struct_materialization.rb +85 -4
  213. data/lib/rigor/inference/method_dispatcher/time_folding.rb +1 -1
  214. data/lib/rigor/inference/method_dispatcher/universal_object_dispatch.rb +1 -2
  215. data/lib/rigor/inference/method_dispatcher/uri_folding.rb +1 -1
  216. data/lib/rigor/inference/method_dispatcher.rb +12 -13
  217. data/lib/rigor/inference/method_parameter_binder.rb +4 -6
  218. data/lib/rigor/inference/multi_target_binder.rb +1 -3
  219. data/lib/rigor/inference/mutation_rejoin.rb +168 -0
  220. data/lib/rigor/inference/mutation_widening.rb +100 -51
  221. data/lib/rigor/inference/narrowing.rb +299 -46
  222. data/lib/rigor/inference/optimistic_origin.rb +1 -7
  223. data/lib/rigor/inference/origin_lookup.rb +2 -3
  224. data/lib/rigor/inference/parameter_inference_collector.rb +5 -6
  225. data/lib/rigor/inference/pre_eval_constants.rb +6 -5
  226. data/lib/rigor/inference/precision_scanner.rb +3 -4
  227. data/lib/rigor/inference/project_patched_methods.rb +2 -2
  228. data/lib/rigor/inference/project_patched_scanner.rb +3 -3
  229. data/lib/rigor/inference/protection_scanner.rb +1 -2
  230. data/lib/rigor/inference/range_constant.rb +57 -0
  231. data/lib/rigor/inference/rbs_type_translator.rb +49 -11
  232. data/lib/rigor/inference/receiver_alias.rb +3 -3
  233. data/lib/rigor/inference/refinement_mutation.rb +72 -0
  234. data/lib/rigor/inference/scope_indexer.rb +688 -151
  235. data/lib/rigor/inference/statement_evaluator.rb +221 -50
  236. data/lib/rigor/inference/string_mutation.rb +60 -0
  237. data/lib/rigor/inference/struct_fold_safety.rb +6 -7
  238. data/lib/rigor/inference/synthetic_method_index.rb +1 -2
  239. data/lib/rigor/inference/synthetic_method_scanner.rb +4 -6
  240. data/lib/rigor/inference/version_guard.rb +28 -21
  241. data/lib/rigor/inference/void_origin.rb +3 -3
  242. data/lib/rigor/inference/void_tail_summary.rb +2 -4
  243. data/lib/rigor/language_server/buffer_table.rb +4 -4
  244. data/lib/rigor/language_server/completion_provider.rb +1 -1
  245. data/lib/rigor/language_server/debouncer.rb +1 -1
  246. data/lib/rigor/language_server/diagnostic_publisher.rb +4 -4
  247. data/lib/rigor/language_server/document_symbol_provider.rb +1 -1
  248. data/lib/rigor/language_server/folding_range_provider.rb +1 -1
  249. data/lib/rigor/language_server/hover_provider.rb +1 -1
  250. data/lib/rigor/language_server/hover_renderer.rb +2 -2
  251. data/lib/rigor/language_server/incremental_sync.rb +6 -6
  252. data/lib/rigor/language_server/project_context.rb +2 -5
  253. data/lib/rigor/language_server/publish_batcher.rb +2 -2
  254. data/lib/rigor/language_server/selection_range_provider.rb +2 -2
  255. data/lib/rigor/language_server/server.rb +9 -9
  256. data/lib/rigor/language_server/signature_help_provider.rb +1 -1
  257. data/lib/rigor/language_server/uri.rb +1 -1
  258. data/lib/rigor/plugin/base.rb +90 -21
  259. data/lib/rigor/plugin/bundled_catalog.rb +167 -0
  260. data/lib/rigor/plugin/effect_attribution.rb +7 -7
  261. data/lib/rigor/plugin/effect_entry_points.rb +3 -3
  262. data/lib/rigor/plugin/fact_store.rb +6 -6
  263. data/lib/rigor/plugin/io_boundary.rb +93 -8
  264. data/lib/rigor/plugin/isolation.rb +29 -6
  265. data/lib/rigor/plugin/loader.rb +31 -12
  266. data/lib/rigor/plugin/macro/heredoc_template.rb +1 -1
  267. data/lib/rigor/plugin/macro/trait_registry.rb +1 -1
  268. data/lib/rigor/plugin/manifest.rb +23 -1
  269. data/lib/rigor/plugin/registry.rb +67 -14
  270. data/lib/rigor/plugin/source_rbs_synthesis_reporter.rb +12 -1
  271. data/lib/rigor/plugin/trust_policy.rb +2 -4
  272. data/lib/rigor/plugin/type_node_resolver.rb +3 -3
  273. data/lib/rigor/plugin_gap_advisory.rb +96 -0
  274. data/lib/rigor/project_environment.rb +138 -0
  275. data/lib/rigor/protection/analysis_guard.rb +93 -14
  276. data/lib/rigor/protection/closure_kill_oracle.rb +67 -23
  277. data/lib/rigor/protection/dependency_closure.rb +5 -8
  278. data/lib/rigor/protection/diagnostic_oracle.rb +2 -2
  279. data/lib/rigor/protection/discovery_seed.rb +11 -11
  280. data/lib/rigor/protection/kill_signature.rb +2 -4
  281. data/lib/rigor/protection/measurement_integrity.rb +1 -3
  282. data/lib/rigor/protection/mutation_cache.rb +6 -9
  283. data/lib/rigor/protection/mutation_scanner.rb +12 -15
  284. data/lib/rigor/protection/mutator.rb +2 -1
  285. data/lib/rigor/protection/test_suite_oracle.rb +5 -5
  286. data/lib/rigor/rbs_extended/conformance_checker.rb +4 -3
  287. data/lib/rigor/rbs_extended/envelope_scanner.rb +12 -13
  288. data/lib/rigor/rbs_extended/hkt_directives.rb +16 -1
  289. data/lib/rigor/rbs_extended/reporter.rb +122 -16
  290. data/lib/rigor/rbs_extended.rb +67 -22
  291. data/lib/rigor/reflection/constant_path.rb +126 -0
  292. data/lib/rigor/reflection.rb +26 -10
  293. data/lib/rigor/runtime/jit.rb +6 -8
  294. data/lib/rigor/scope/discovery_index.rb +30 -0
  295. data/lib/rigor/scope.rb +203 -4
  296. data/lib/rigor/sig_gen/generator.rb +181 -102
  297. data/lib/rigor/sig_gen/layout_index.rb +3 -4
  298. data/lib/rigor/sig_gen/meta_class_shape.rb +3 -5
  299. data/lib/rigor/sig_gen/observation_collector.rb +17 -15
  300. data/lib/rigor/sig_gen/path_mapper.rb +4 -6
  301. data/lib/rigor/sig_gen/rbs_validity.rb +4 -4
  302. data/lib/rigor/sig_gen/renderer.rb +17 -11
  303. data/lib/rigor/sig_gen/skip_reason_catalog.rb +111 -0
  304. data/lib/rigor/sig_gen/superclass_spelling.rb +27 -0
  305. data/lib/rigor/sig_gen/type_elaborator.rb +1 -3
  306. data/lib/rigor/sig_gen/writer.rb +23 -6
  307. data/lib/rigor/signature_path_audit.rb +153 -6
  308. data/lib/rigor/source/literals.rb +0 -23
  309. data/lib/rigor/source/node_children.rb +0 -2
  310. data/lib/rigor/source/node_locator.rb +5 -11
  311. data/lib/rigor/source/node_walker.rb +2 -5
  312. data/lib/rigor/triage/catalogue.rb +1 -3
  313. data/lib/rigor/triage.rb +3 -5
  314. data/lib/rigor/type/accepts_result.rb +24 -6
  315. data/lib/rigor/type/combinator.rb +68 -5
  316. data/lib/rigor/type/data_class.rb +2 -2
  317. data/lib/rigor/type/data_instance.rb +4 -4
  318. data/lib/rigor/type/float_range.rb +128 -0
  319. data/lib/rigor/type/hash_shape.rb +5 -5
  320. data/lib/rigor/type/integer_range.rb +13 -8
  321. data/lib/rigor/type/nominal.rb +8 -2
  322. data/lib/rigor/type/refined.rb +3 -3
  323. data/lib/rigor/type/struct_class.rb +3 -3
  324. data/lib/rigor/type/struct_instance.rb +4 -4
  325. data/lib/rigor/type.rb +1 -0
  326. data/lib/rigor/type_node/generic.rb +1 -1
  327. data/lib/rigor/type_node/range_literal.rb +25 -0
  328. data/lib/rigor/type_node/resolver_chain.rb +1 -1
  329. data/lib/rigor/type_node.rb +1 -0
  330. data/lib/rigor/version.rb +1 -1
  331. data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable/analyzer.rb +0 -4
  332. data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable/channel_discoverer.rb +0 -1
  333. data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable/channel_index.rb +0 -2
  334. data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable.rb +1 -0
  335. data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer/analyzer.rb +0 -4
  336. data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer/mailer_discoverer.rb +3 -5
  337. data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer/mailer_index.rb +1 -4
  338. data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer.rb +1 -0
  339. data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/analyzer.rb +33 -30
  340. data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/controller_discoverer.rb +0 -1
  341. data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/controller_index.rb +1 -3
  342. data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack.rb +28 -2
  343. data/plugins/rigor-actionpack/sig/action_controller.rbs +71 -0
  344. data/plugins/rigor-activejob/lib/rigor/plugin/activejob/analyzer.rb +0 -4
  345. data/plugins/rigor-activejob/lib/rigor/plugin/activejob/effects.rb +1 -1
  346. data/plugins/rigor-activejob/lib/rigor/plugin/activejob/job_discoverer.rb +0 -1
  347. data/plugins/rigor-activejob/lib/rigor/plugin/activejob/job_index.rb +0 -2
  348. data/plugins/rigor-activejob/lib/rigor/plugin/activejob/recurring_scan.rb +1 -1
  349. data/plugins/rigor-activejob/lib/rigor/plugin/activejob.rb +1 -0
  350. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/model_discoverer.rb +3 -4
  351. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/schema_parser.rb +1 -2
  352. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/structure_sql_parser.rb +1 -2
  353. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord.rb +42 -7
  354. data/plugins/rigor-activerecord/sig/active_record/framework.rbs +123 -0
  355. data/plugins/rigor-activestorage/lib/rigor/plugin/activestorage.rb +1 -0
  356. data/plugins/rigor-activesupport-core-ext/lib/rigor/plugin/activesupport_core_ext.rb +9 -2
  357. data/plugins/rigor-activesupport-core-ext/sig/active_support/core_ext.rbs +119 -14
  358. data/plugins/rigor-devise/lib/rigor/plugin/devise.rb +1 -0
  359. data/plugins/rigor-dry-monads/lib/rigor/plugin/dry_monads.rb +1 -0
  360. data/plugins/rigor-dry-schema/lib/rigor/plugin/dry_schema/schema_scanner.rb +9 -7
  361. data/plugins/rigor-dry-schema/lib/rigor/plugin/dry_schema.rb +7 -3
  362. data/plugins/rigor-dry-struct/lib/rigor/plugin/dry_struct.rb +1 -0
  363. data/plugins/rigor-dry-types/lib/rigor/plugin/dry_types/alias_scanner.rb +8 -6
  364. data/plugins/rigor-dry-types/lib/rigor/plugin/dry_types.rb +11 -7
  365. data/plugins/rigor-dry-validation/lib/rigor/plugin/dry_validation/contract_scanner.rb +13 -11
  366. data/plugins/rigor-dry-validation/lib/rigor/plugin/dry_validation.rb +9 -4
  367. data/plugins/rigor-ethon/lib/rigor/plugin/ethon.rb +1 -0
  368. data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot/analyzer.rb +0 -5
  369. data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot/factory_discoverer.rb +0 -1
  370. data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot/factory_index.rb +0 -1
  371. data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot.rb +8 -1
  372. data/plugins/rigor-ffi/lib/rigor/plugin/ffi.rb +36 -4
  373. data/plugins/rigor-ffi-rzmq/lib/rigor/plugin/ffi_rzmq.rb +1 -0
  374. data/plugins/rigor-graphql/lib/rigor/plugin/graphql/type_scanner.rb +8 -6
  375. data/plugins/rigor-graphql/lib/rigor/plugin/graphql.rb +6 -3
  376. data/plugins/rigor-hanami/lib/rigor/plugin/hanami.rb +1 -0
  377. data/plugins/rigor-mangrove/lib/rigor/plugin/mangrove.rb +2 -1
  378. data/plugins/rigor-minitest/lib/rigor/plugin/minitest/assertion_analyzer.rb +0 -3
  379. data/plugins/rigor-minitest/lib/rigor/plugin/minitest.rb +1 -0
  380. data/plugins/rigor-pundit/lib/rigor/plugin/pundit/analyzer.rb +0 -5
  381. data/plugins/rigor-pundit/lib/rigor/plugin/pundit/authorization_scan.rb +2 -2
  382. data/plugins/rigor-pundit/lib/rigor/plugin/pundit/policy_discoverer.rb +0 -1
  383. data/plugins/rigor-pundit/lib/rigor/plugin/pundit/policy_index.rb +0 -1
  384. data/plugins/rigor-pundit/lib/rigor/plugin/pundit.rb +1 -0
  385. data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n/analyzer.rb +0 -12
  386. data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n/locale_index.rb +1 -3
  387. data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n/locale_loader.rb +0 -1
  388. data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n.rb +1 -0
  389. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/acronyms.rb +5 -5
  390. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/analyzer.rb +1 -10
  391. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/devise_routes.rb +3 -3
  392. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/doorkeeper_routes.rb +2 -2
  393. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/grape_api_discoverer.rb +2 -2
  394. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/helper_discoverer.rb +2 -2
  395. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/helper_table.rb +9 -10
  396. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/routes_parser.rb +2 -3
  397. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes.rb +1 -0
  398. data/plugins/rigor-railties/lib/rigor/plugin/railties.rb +1 -0
  399. data/plugins/rigor-rbnacl/lib/rigor/plugin/rbnacl.rb +13 -1
  400. data/plugins/rigor-rbs-inline/lib/rigor/plugin/rbs_inline.rb +128 -3
  401. data/plugins/rigor-rspec/lib/rigor/plugin/rspec/analyzer.rb +0 -3
  402. data/plugins/rigor-rspec/lib/rigor/plugin/rspec/let_scope_index.rb +0 -3
  403. data/plugins/rigor-rspec/lib/rigor/plugin/rspec/let_type_resolver.rb +1 -5
  404. data/plugins/rigor-rspec/lib/rigor/plugin/rspec/matcher_analyzer.rb +2 -3
  405. data/plugins/rigor-rspec/lib/rigor/plugin/rspec.rb +1 -0
  406. data/plugins/rigor-rspec-rails/lib/rigor/plugin/rspec_rails/have_http_status_analyzer.rb +0 -3
  407. data/plugins/rigor-rspec-rails/lib/rigor/plugin/rspec_rails.rb +1 -0
  408. data/plugins/rigor-sassc/lib/rigor/plugin/sassc.rb +1 -0
  409. data/plugins/rigor-shoulda-matchers/lib/rigor/plugin/shoulda_matchers/analyzer.rb +1 -9
  410. data/plugins/rigor-shoulda-matchers/lib/rigor/plugin/shoulda_matchers.rb +1 -0
  411. data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq/analyzer.rb +0 -4
  412. data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq/effects.rb +1 -1
  413. data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq/schedule_scan.rb +1 -1
  414. data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq/worker_discoverer.rb +0 -1
  415. data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq/worker_index.rb +0 -2
  416. data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq.rb +1 -0
  417. data/plugins/rigor-sinatra/lib/rigor/plugin/sinatra.rb +1 -0
  418. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/absurd_recognizer.rb +2 -5
  419. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/assertion_recognizer.rb +1 -4
  420. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/catalog.rb +3 -9
  421. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/catalog_walker.rb +4 -4
  422. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/sig_parser.rb +1 -2
  423. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/sigil_detector.rb +4 -5
  424. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/type_translator.rb +7 -5
  425. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet.rb +5 -5
  426. data/plugins/rigor-statesman/lib/rigor/plugin/statesman.rb +1 -0
  427. data/sig/rigor/analysis/reachability/scan_cache.rbs +12 -0
  428. data/sig/rigor/cache.rbs +2 -3
  429. data/sig/rigor/environment.rbs +11 -0
  430. data/sig/rigor/inference.rbs +3 -10
  431. data/sig/rigor/plugin/io_boundary.rbs +4 -0
  432. data/sig/rigor/plugin/manifest.rbs +2 -1
  433. data/sig/rigor/reflection.rbs +3 -1
  434. data/sig/rigor/scope.rbs +24 -3
  435. data/sig/rigor/sig_gen/skip_reason_catalog.rbs +14 -0
  436. data/sig/rigor/type.rbs +27 -1
  437. data/sig/rigor.rbs +1 -0
  438. data/skills/rigor-ask/SKILL.md +8 -6
  439. data/skills/rigor-plugin-author/references/02-walker-and-types.md +13 -2
  440. data/skills/rigor-project-init/SKILL.md +6 -3
  441. data/skills/rigor-project-init/references/02-configure.md +10 -6
  442. data/skills/rigor-project-init/references/06-agent-contract.md +67 -0
  443. data/skills/rigor-type-oracle/SKILL.md +228 -0
  444. data/skills/rigor-type-oracle/references/01-oracle-commands.md +261 -0
  445. data/skills/rigor-type-oracle/references/02-agents-md-fragment.md +52 -0
  446. data/skills/rigor-type-oracle/references/03-gap-protocol.md +128 -0
  447. data/skills/rigor-unused-adjudicate/SKILL.md +8 -5
  448. metadata +28 -3
  449. data/lib/rigor/cli/probe_environment.rb +0 -85
  450. data/sig/rigor/inference/builtins/numeric_catalog.rbs +0 -3
@@ -31,11 +31,14 @@ and skipping one is how a live class ends up on a deletion list.
31
31
 
32
32
  Run the report and answer these against the project in front of you.
33
33
 
34
- **Are framework roots actually supplied?** The summary prints
35
- `roots: N (M from plugins, …)`. On a framework application `0 from plugins`
36
- means nothing is naming your controllers, jobs or policies, so most of the
37
- report is noise. Stop and fix the plugin configuration — `rigor docs
38
- 07-plugins` — rather than adjudicating hundreds of rows.
34
+ **Are framework roots actually supplied?** When a plugin contributes roots, the
35
+ summary's `roots:` line grows a parenthetical: `roots: N (M from plugins, K
36
+ matched no declaration)`. The parenthetical is omitted entirely when no plugin
37
+ contributed — so on a framework application, a bare `roots: N` with **no**
38
+ `(… from plugins …)` note means nothing is naming your controllers, jobs or
39
+ policies, and most of the report is noise. Stop and fix the plugin
40
+ configuration — `rigor docs 07-plugins` — rather than adjudicating hundreds of
41
+ rows.
39
42
 
40
43
  **Does the project ship signatures?** If `signature_paths:` is configured, also
41
44
  run with it emptied and compare:
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.7
4
+ version: 0.3.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rigor contributors
@@ -306,6 +306,7 @@ files:
306
306
  - data/builtins/ruby_core/string.yml
307
307
  - data/builtins/ruby_core/struct.yml
308
308
  - data/builtins/ruby_core/time.yml
309
+ - data/capability_roles/capability_roles.rbs
309
310
  - data/core_overlay/csv.rbs
310
311
  - data/core_overlay/numeric.rbs
311
312
  - data/core_overlay/pathname.rbs
@@ -485,6 +486,7 @@ files:
485
486
  - lib/rigor/builtins/predefined_constant_refinements.rb
486
487
  - lib/rigor/builtins/regex_refinement.rb
487
488
  - lib/rigor/builtins/static_return_refinements.rb
489
+ - lib/rigor/cache/annotation_location.rb
488
490
  - lib/rigor/cache/descriptor.rb
489
491
  - lib/rigor/cache/engine_source.rb
490
492
  - lib/rigor/cache/file_digest.rb
@@ -536,7 +538,6 @@ files:
536
538
  - lib/rigor/cli/plugins_command.rb
537
539
  - lib/rigor/cli/plugins_renderer.rb
538
540
  - lib/rigor/cli/prism_colorizer.rb
539
- - lib/rigor/cli/probe_environment.rb
540
541
  - lib/rigor/cli/protection_fork_scan.rb
541
542
  - lib/rigor/cli/protection_renderer.rb
542
543
  - lib/rigor/cli/protection_report.rb
@@ -605,7 +606,9 @@ files:
605
606
  - lib/rigor/environment/class_registry.rb
606
607
  - lib/rigor/environment/constant_type_cache_holder.rb
607
608
  - lib/rigor/environment/default_libraries.rb
609
+ - lib/rigor/environment/failure_slot.rb
608
610
  - lib/rigor/environment/hkt_registry_holder.rb
611
+ - lib/rigor/environment/installed_gem_set.rb
609
612
  - lib/rigor/environment/lockfile_resolver.rb
610
613
  - lib/rigor/environment/missing_gem_constant_index.rb
611
614
  - lib/rigor/environment/rbs_collection_discovery.rb
@@ -653,6 +656,7 @@ files:
653
656
  - lib/rigor/inference/def_node_resolver.rb
654
657
  - lib/rigor/inference/def_return_typer.rb
655
658
  - lib/rigor/inference/dynamic_origin.rb
659
+ - lib/rigor/inference/element_read_widening.rb
656
660
  - lib/rigor/inference/expression_typer.rb
657
661
  - lib/rigor/inference/fallback.rb
658
662
  - lib/rigor/inference/fallback_tracer.rb
@@ -682,6 +686,7 @@ files:
682
686
  - lib/rigor/inference/method_dispatcher/member_shape_projection.rb
683
687
  - lib/rigor/inference/method_dispatcher/method_folding.rb
684
688
  - lib/rigor/inference/method_dispatcher/overload_selector.rb
689
+ - lib/rigor/inference/method_dispatcher/random_folding.rb
685
690
  - lib/rigor/inference/method_dispatcher/rbs_dispatch.rb
686
691
  - lib/rigor/inference/method_dispatcher/receiver_affinity.rb
687
692
  - lib/rigor/inference/method_dispatcher/reduce_folding.rb
@@ -698,6 +703,7 @@ files:
698
703
  - lib/rigor/inference/method_dispatcher/uri_folding.rb
699
704
  - lib/rigor/inference/method_parameter_binder.rb
700
705
  - lib/rigor/inference/multi_target_binder.rb
706
+ - lib/rigor/inference/mutation_rejoin.rb
701
707
  - lib/rigor/inference/mutation_widening.rb
702
708
  - lib/rigor/inference/narrowing.rb
703
709
  - lib/rigor/inference/optimistic_origin.rb
@@ -708,11 +714,14 @@ files:
708
714
  - lib/rigor/inference/project_patched_methods.rb
709
715
  - lib/rigor/inference/project_patched_scanner.rb
710
716
  - lib/rigor/inference/protection_scanner.rb
717
+ - lib/rigor/inference/range_constant.rb
711
718
  - lib/rigor/inference/rbs_type_translator.rb
712
719
  - lib/rigor/inference/receiver_alias.rb
720
+ - lib/rigor/inference/refinement_mutation.rb
713
721
  - lib/rigor/inference/scope_indexer.rb
714
722
  - lib/rigor/inference/singleton_object_constant.rb
715
723
  - lib/rigor/inference/statement_evaluator.rb
724
+ - lib/rigor/inference/string_mutation.rb
716
725
  - lib/rigor/inference/struct_fold_safety.rb
717
726
  - lib/rigor/inference/synthetic_method.rb
718
727
  - lib/rigor/inference/synthetic_method_index.rb
@@ -748,6 +757,7 @@ files:
748
757
  - lib/rigor/plugin/base.rb
749
758
  - lib/rigor/plugin/blueprint.rb
750
759
  - lib/rigor/plugin/box.rb
760
+ - lib/rigor/plugin/bundled_catalog.rb
751
761
  - lib/rigor/plugin/effect_ancestry.rb
752
762
  - lib/rigor/plugin/effect_attribution.rb
753
763
  - lib/rigor/plugin/effect_edge.rb
@@ -773,6 +783,8 @@ files:
773
783
  - lib/rigor/plugin/source_rbs_synthesis_reporter.rb
774
784
  - lib/rigor/plugin/trust_policy.rb
775
785
  - lib/rigor/plugin/type_node_resolver.rb
786
+ - lib/rigor/plugin_gap_advisory.rb
787
+ - lib/rigor/project_environment.rb
776
788
  - lib/rigor/protection/analysis_guard.rb
777
789
  - lib/rigor/protection/closure_kill_oracle.rb
778
790
  - lib/rigor/protection/dependency_closure.rb
@@ -790,6 +802,7 @@ files:
790
802
  - lib/rigor/rbs_extended/hkt_directives.rb
791
803
  - lib/rigor/rbs_extended/reporter.rb
792
804
  - lib/rigor/reflection.rb
805
+ - lib/rigor/reflection/constant_path.rb
793
806
  - lib/rigor/runtime/jit.rb
794
807
  - lib/rigor/scope.rb
795
808
  - lib/rigor/scope/discovery_index.rb
@@ -804,6 +817,8 @@ files:
804
817
  - lib/rigor/sig_gen/path_mapper.rb
805
818
  - lib/rigor/sig_gen/rbs_validity.rb
806
819
  - lib/rigor/sig_gen/renderer.rb
820
+ - lib/rigor/sig_gen/skip_reason_catalog.rb
821
+ - lib/rigor/sig_gen/superclass_spelling.rb
807
822
  - lib/rigor/sig_gen/type_elaborator.rb
808
823
  - lib/rigor/sig_gen/write_result.rb
809
824
  - lib/rigor/sig_gen/writer.rb
@@ -832,6 +847,7 @@ files:
832
847
  - lib/rigor/type/data_instance.rb
833
848
  - lib/rigor/type/difference.rb
834
849
  - lib/rigor/type/dynamic.rb
850
+ - lib/rigor/type/float_range.rb
835
851
  - lib/rigor/type/hash_shape.rb
836
852
  - lib/rigor/type/integer_range.rb
837
853
  - lib/rigor/type/intersection.rb
@@ -852,6 +868,7 @@ files:
852
868
  - lib/rigor/type_node/indexed_access.rb
853
869
  - lib/rigor/type_node/integer_literal.rb
854
870
  - lib/rigor/type_node/name_scope.rb
871
+ - lib/rigor/type_node/range_literal.rb
855
872
  - lib/rigor/type_node/resolver_chain.rb
856
873
  - lib/rigor/type_node/string_literal.rb
857
874
  - lib/rigor/type_node/symbol_literal.rb
@@ -877,6 +894,7 @@ files:
877
894
  - plugins/rigor-actionpack/lib/rigor/plugin/actionpack/controller_discoverer.rb
878
895
  - plugins/rigor-actionpack/lib/rigor/plugin/actionpack/controller_index.rb
879
896
  - plugins/rigor-actionpack/lib/rigor/plugin/actionpack/effects.rb
897
+ - plugins/rigor-actionpack/sig/action_controller.rbs
880
898
  - plugins/rigor-activejob/lib/rigor-activejob.rb
881
899
  - plugins/rigor-activejob/lib/rigor/plugin/activejob.rb
882
900
  - plugins/rigor-activejob/lib/rigor/plugin/activejob/analyzer.rb
@@ -893,6 +911,7 @@ files:
893
911
  - plugins/rigor-activerecord/lib/rigor/plugin/activerecord/schema_parser.rb
894
912
  - plugins/rigor-activerecord/lib/rigor/plugin/activerecord/schema_table.rb
895
913
  - plugins/rigor-activerecord/lib/rigor/plugin/activerecord/structure_sql_parser.rb
914
+ - plugins/rigor-activerecord/sig/active_record/framework.rbs
896
915
  - plugins/rigor-activerecord/sig/active_record/relation.rbs
897
916
  - plugins/rigor-activestorage/lib/rigor-activestorage.rb
898
917
  - plugins/rigor-activestorage/lib/rigor/plugin/activestorage.rb
@@ -1033,6 +1052,7 @@ files:
1033
1052
  - sig/rigor/analysis/dependency_source_inference/gem_resolver.rbs
1034
1053
  - sig/rigor/analysis/dependency_source_inference/index.rbs
1035
1054
  - sig/rigor/analysis/fact_store.rbs
1055
+ - sig/rigor/analysis/reachability/scan_cache.rbs
1036
1056
  - sig/rigor/ast.rbs
1037
1057
  - sig/rigor/cache.rbs
1038
1058
  - sig/rigor/cli/diff_command.rbs
@@ -1043,7 +1063,6 @@ files:
1043
1063
  - sig/rigor/inference.rbs
1044
1064
  - sig/rigor/inference/builtins.rbs
1045
1065
  - sig/rigor/inference/builtins/method_catalog.rbs
1046
- - sig/rigor/inference/builtins/numeric_catalog.rbs
1047
1066
  - sig/rigor/inference/void_origin.rbs
1048
1067
  - sig/rigor/plugin.rbs
1049
1068
  - sig/rigor/plugin/access_denied_error.rbs
@@ -1061,6 +1080,7 @@ files:
1061
1080
  - sig/rigor/rbs_extended.rbs
1062
1081
  - sig/rigor/reflection.rbs
1063
1082
  - sig/rigor/scope.rbs
1083
+ - sig/rigor/sig_gen/skip_reason_catalog.rbs
1064
1084
  - sig/rigor/source.rbs
1065
1085
  - sig/rigor/testing.rbs
1066
1086
  - sig/rigor/trinary.rbs
@@ -1089,8 +1109,13 @@ files:
1089
1109
  - skills/rigor-project-init/references/03-baseline-and-bugs.md
1090
1110
  - skills/rigor-project-init/references/04-sig-uplift.md
1091
1111
  - skills/rigor-project-init/references/05-jit-performance.md
1112
+ - skills/rigor-project-init/references/06-agent-contract.md
1092
1113
  - skills/rigor-protection-uplift/SKILL.md
1093
1114
  - skills/rigor-rbs-setup/SKILL.md
1115
+ - skills/rigor-type-oracle/SKILL.md
1116
+ - skills/rigor-type-oracle/references/01-oracle-commands.md
1117
+ - skills/rigor-type-oracle/references/02-agents-md-fragment.md
1118
+ - skills/rigor-type-oracle/references/03-gap-protocol.md
1094
1119
  - skills/rigor-unused-adjudicate/SKILL.md
1095
1120
  - skills/rigor-upgrade/SKILL.md
1096
1121
  homepage: https://github.com/rigortype/rigor
@@ -1,85 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "../environment"
4
- require_relative "../plugin"
5
- require_relative "../plugin/loader"
6
- require_relative "../plugin/services"
7
- require_relative "../reflection"
8
- require_relative "../type/combinator"
9
-
10
- module Rigor
11
- class CLI
12
- # Shared construction of the analysis-observing environment for the single-shot probe commands
13
- # (`type-of`, `type-scan`, `trace`, `annotate`). Each of these answers "what does the engine infer here?"
14
- # for a hand-picked file or position, so the environment they type against MUST match the one `rigor check`
15
- # analyses with — otherwise a probe reports a type the real run never computes.
16
- #
17
- # The gap this closes: the probes historically built their environment with
18
- # `Environment.for_project(libraries:, signature_paths:)` only — no plugin registry, no `source_files:`. The
19
- # `source_rbs_synthesizer` plugin hook (ADR-32 / ADR-93's auto-wired `rigor-rbs-inline`) therefore never
20
- # ran there, so a class whose only signature comes from an inline `#: () -> void` annotation typed as
21
- # `Dynamic[top]` under a probe while `check` resolved it through the synthesized RBS. That divergence
22
- # misattributed a dispatch tier during the #162 transitive-void design pass (see the 2026-07-19 addendum in
23
- # docs/adr/100-static-diagnostic-family-and-void-origins.md).
24
- #
25
- # This threads the two things that were missing — the plugin registry built by the plugin loader, and the
26
- # `source_files:` the synthesizers run over — matching `rigor check`'s `Environment.for_project` call
27
- # (built in `Analysis::Runner::PoolCoordinator#build_runner_environment`). A probe legitimately simplifies
28
- # relative to check: no synthesis-failure reporter (a probe has no diagnostic pipeline) and no synthesis
29
- # cache store (a single-position probe recomputes cheaply). Plugin loading itself matches check — same
30
- # `.rigor.yml` `plugins:` config, same ADR-93 auto-wire (already applied by `Configuration.load`), same
31
- # `enabled:` / `require_magic_comment` semantics via `Plugin::Loader.load`.
32
- #
33
- # Fail-soft is the invariant: a project with no plugins, an unresolvable plugin gem, or any error during the
34
- # plugin-aware build degrades to the bare environment the probes used before — never a crash. `Plugin::Loader`
35
- # already isolates per-entry load failures onto the registry; the `rescue` here is the belt-and-suspenders
36
- # around anything the loader or the plugin-aware env build itself might raise.
37
- module ProbeEnvironment
38
- module_function
39
-
40
- # Builds the plugin-aware {Rigor::Environment} a probe types against.
41
- #
42
- # @param configuration [Rigor::Configuration] the loaded project configuration (already carries the
43
- # ADR-93 auto-wired `rigor-rbs-inline` entry when the library is resolvable).
44
- # @param source_files [Array<String>] the file(s) the probe inspects. Threaded so each loaded plugin's
45
- # `source_rbs_synthesizer` runs over them at env-build time; an empty list contributes no synthesized RBS.
46
- # @return [Rigor::Environment]
47
- def build(configuration:, source_files:)
48
- Environment.for_project(
49
- libraries: configuration.libraries,
50
- signature_paths: configuration.signature_paths,
51
- plugin_registry: load_plugin_registry(configuration),
52
- source_files: source_files
53
- )
54
- rescue StandardError
55
- bare(configuration)
56
- end
57
-
58
- # Loads the project's configured plugins the same way the plugin-inspection commands (`rigor plugins`,
59
- # `rigor doctor`) do: a `Plugin::Services` with no cache store (the probe recomputes) driving
60
- # `Plugin::Loader.load`. Returns `nil` — so `Environment.for_project` skips the plugin tier entirely —
61
- # when the project declares no plugins.
62
- def load_plugin_registry(configuration)
63
- return nil if configuration.plugins.empty?
64
-
65
- services = Plugin::Services.new(
66
- reflection: Reflection,
67
- type: Type::Combinator,
68
- configuration: configuration,
69
- cache_store: nil
70
- )
71
- Plugin::Loader.load(configuration: configuration, services: services)
72
- end
73
-
74
- # The pre-fix environment: RBS + project signatures only, no plugin tier and no synthesized RBS. The
75
- # fail-soft floor — a probe on a project with broken or absent plugin setup lands here and behaves exactly
76
- # as it did before this parity fix.
77
- def bare(configuration)
78
- Environment.for_project(
79
- libraries: configuration.libraries,
80
- signature_paths: configuration.signature_paths
81
- )
82
- end
83
- end
84
- end
85
- end
@@ -1,3 +0,0 @@
1
- class Rigor::Inference::Builtins::NumericCatalog
2
- def self.reset!: () -> nil
3
- end