evilution 1.2.0 → 1.4.0

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 (213) hide show
  1. checksums.yaml +4 -4
  2. data/.beads/interactions.jsonl +100 -0
  3. data/.rubocop_todo.yml +14 -0
  4. data/CHANGELOG.md +124 -0
  5. data/README.md +142 -28
  6. data/docs/architecture.md +123 -9
  7. data/docs/ast_pattern_syntax.md +50 -5
  8. data/docs/isolation.md +39 -2
  9. data/docs/migration-from-mutant.md +1 -1
  10. data/lib/evilution/ast/aasm_declaration.rb +133 -0
  11. data/lib/evilution/ast/callback_declaration.rb +91 -0
  12. data/lib/evilution/ast/included_block.rb +27 -0
  13. data/lib/evilution/ast/literal_callable.rb +21 -0
  14. data/lib/evilution/ast/parser.rb +120 -16
  15. data/lib/evilution/ast/pattern/filter.rb +1 -0
  16. data/lib/evilution/ast/pattern/method_name.rb +63 -0
  17. data/lib/evilution/ast/pattern/parser.rb +15 -15
  18. data/lib/evilution/ast/pattern.rb +2 -0
  19. data/lib/evilution/ast/regexp_pattern.rb +104 -0
  20. data/lib/evilution/ast/scope_declaration.rb +45 -0
  21. data/lib/evilution/ast/sorbet_sig_detector.rb +1 -0
  22. data/lib/evilution/ast/uncovered_code.rb +88 -0
  23. data/lib/evilution/ast/value_object_definition.rb +25 -0
  24. data/lib/evilution/baseline/failure_formatter.rb +27 -0
  25. data/lib/evilution/baseline/report.rb +66 -0
  26. data/lib/evilution/baseline/spec_failure.rb +38 -0
  27. data/lib/evilution/baseline.rb +101 -42
  28. data/lib/evilution/child_output.rb +1 -1
  29. data/lib/evilution/cli/command.rb +1 -0
  30. data/lib/evilution/cli/commands/tests_list.rb +4 -3
  31. data/lib/evilution/cli/commands.rb +2 -0
  32. data/lib/evilution/cli/dispatcher.rb +2 -0
  33. data/lib/evilution/cli/exit_guard.rb +2 -0
  34. data/lib/evilution/cli/parsed_args.rb +2 -0
  35. data/lib/evilution/cli/parser/command_extractor.rb +2 -0
  36. data/lib/evilution/cli/parser/file_args.rb +4 -1
  37. data/lib/evilution/cli/parser/options_builder.rb +4 -1
  38. data/lib/evilution/cli/parser/stdin_reader.rb +1 -0
  39. data/lib/evilution/cli/parser.rb +1 -0
  40. data/lib/evilution/cli/printers/tests_list.rb +5 -4
  41. data/lib/evilution/cli/printers.rb +2 -0
  42. data/lib/evilution/cli/result.rb +2 -0
  43. data/lib/evilution/cli.rb +8 -2
  44. data/lib/evilution/config/builders.rb +2 -0
  45. data/lib/evilution/config/env_loader.rb +2 -0
  46. data/lib/evilution/config/file_loader.rb +1 -0
  47. data/lib/evilution/config/sources.rb +1 -0
  48. data/lib/evilution/config/validators/example_targeting_cache.rb +1 -0
  49. data/lib/evilution/config/validators/example_targeting_fallback.rb +1 -0
  50. data/lib/evilution/config/validators/example_targeting_strategy.rb +1 -0
  51. data/lib/evilution/config/validators/fail_fast.rb +1 -0
  52. data/lib/evilution/config/validators/hooks.rb +1 -0
  53. data/lib/evilution/config/validators/ignore_patterns.rb +1 -0
  54. data/lib/evilution/config/validators/integration.rb +1 -0
  55. data/lib/evilution/config/validators/isolation.rb +1 -0
  56. data/lib/evilution/config/validators/jobs.rb +1 -0
  57. data/lib/evilution/config/validators/preload.rb +1 -0
  58. data/lib/evilution/config/validators/profile.rb +1 -0
  59. data/lib/evilution/config/validators/spec_mappings.rb +3 -1
  60. data/lib/evilution/config/validators/spec_pattern.rb +1 -0
  61. data/lib/evilution/config/validators/warmup.rb +17 -0
  62. data/lib/evilution/config/validators.rb +2 -0
  63. data/lib/evilution/config.rb +7 -5
  64. data/lib/evilution/coverage.rb +1 -1
  65. data/lib/evilution/coverage_example_filter.rb +1 -1
  66. data/lib/evilution/diagnostic.rb +1 -1
  67. data/lib/evilution/equivalent/detector.rb +3 -1
  68. data/lib/evilution/equivalent/heuristic/guarded_index_fetch/condition.rb +66 -0
  69. data/lib/evilution/equivalent/heuristic/guarded_index_fetch/disturbance.rb +54 -0
  70. data/lib/evilution/equivalent/heuristic/guarded_index_fetch/early_exit.rb +73 -0
  71. data/lib/evilution/equivalent/heuristic/guarded_index_fetch/guard.rb +36 -0
  72. data/lib/evilution/equivalent/heuristic/guarded_index_fetch/index_read.rb +82 -0
  73. data/lib/evilution/equivalent/heuristic/guarded_index_fetch/node_path.rb +43 -0
  74. data/lib/evilution/equivalent/heuristic/guarded_index_fetch.rb +65 -0
  75. data/lib/evilution/example_filter.rb +46 -1
  76. data/lib/evilution/hooks/registry.rb +2 -1
  77. data/lib/evilution/integration/base.rb +2 -0
  78. data/lib/evilution/integration/known_failures.rb +26 -0
  79. data/lib/evilution/integration/loading/body_call_neutralizer.rb +139 -12
  80. data/lib/evilution/integration/loading/callback_redeclaration.rb +186 -0
  81. data/lib/evilution/integration/loading/concern_redeclaration.rb +61 -0
  82. data/lib/evilution/integration/loading/concern_state_cleaner.rb +19 -12
  83. data/lib/evilution/integration/loading/mutation_applier.rb +16 -0
  84. data/lib/evilution/integration/loading/test_class_cache.rb +46 -0
  85. data/lib/evilution/integration/loading/test_load_path.rb +21 -13
  86. data/lib/evilution/integration/minitest/test_ids.rb +21 -0
  87. data/lib/evilution/integration/minitest.rb +45 -6
  88. data/lib/evilution/integration/rspec/baseline_runner.rb +47 -3
  89. data/lib/evilution/integration/rspec/example_ids.rb +35 -0
  90. data/lib/evilution/integration/rspec/result_builder.rb +6 -1
  91. data/lib/evilution/integration/rspec/state_guard/anonymous_example_group_examples.rb +36 -0
  92. data/lib/evilution/integration/rspec/state_guard/configuration_state.rb +1 -0
  93. data/lib/evilution/integration/rspec/state_guard/configuration_streams.rb +1 -0
  94. data/lib/evilution/integration/rspec/state_guard/example_groups_constants.rb +1 -2
  95. data/lib/evilution/integration/rspec/state_guard/internals.rb +1 -2
  96. data/lib/evilution/integration/rspec/state_guard/object_space_example_groups.rb +1 -2
  97. data/lib/evilution/integration/rspec/state_guard/reporter_arrays.rb +1 -0
  98. data/lib/evilution/integration/rspec/state_guard/world_example_groups.rb +1 -0
  99. data/lib/evilution/integration/rspec/state_guard/world_filtered_examples.rb +1 -0
  100. data/lib/evilution/integration/rspec/state_guard/world_sources_by_path.rb +1 -0
  101. data/lib/evilution/integration/rspec/state_guard.rb +10 -1
  102. data/lib/evilution/integration/rspec.rb +22 -4
  103. data/lib/evilution/integration/test_unit/result_builder.rb +6 -0
  104. data/lib/evilution/integration/test_unit/test_ids.rb +18 -0
  105. data/lib/evilution/integration/test_unit.rb +37 -9
  106. data/lib/evilution/isolation/fork.rb +2 -1
  107. data/lib/evilution/isolation/in_process.rb +21 -4
  108. data/lib/evilution/mcp/info_tool/actions/environment.rb +1 -0
  109. data/lib/evilution/mcp/info_tool/actions/feedback.rb +1 -0
  110. data/lib/evilution/mcp/info_tool/actions/statuses.rb +1 -0
  111. data/lib/evilution/mcp/info_tool/actions/subjects.rb +1 -0
  112. data/lib/evilution/mcp/info_tool/actions/tests.rb +1 -0
  113. data/lib/evilution/mcp/info_tool/status_glossary.rb +2 -2
  114. data/lib/evilution/mcp/mutate_tool/progress_streamer.rb +2 -1
  115. data/lib/evilution/memory/leak_check.rb +27 -3
  116. data/lib/evilution/mutation.rb +8 -3
  117. data/lib/evilution/mutator/base.rb +49 -5
  118. data/lib/evilution/mutator/operator/alias_removal.rb +126 -0
  119. data/lib/evilution/mutator/operator/argument_list_removal.rb +52 -0
  120. data/lib/evilution/mutator/operator/argument_order_permutation.rb +101 -0
  121. data/lib/evilution/mutator/operator/argument_propagation.rb +54 -0
  122. data/lib/evilution/mutator/operator/argument_removal.rb +9 -1
  123. data/lib/evilution/mutator/operator/array_coercion_to_literal.rb +34 -0
  124. data/lib/evilution/mutator/operator/attribute_write_to_read.rb +34 -0
  125. data/lib/evilution/mutator/operator/bang_method.rb +11 -3
  126. data/lib/evilution/mutator/operator/binary_operand_promotion.rb +63 -0
  127. data/lib/evilution/mutator/operator/block_body_promotion.rb +45 -0
  128. data/lib/evilution/mutator/operator/block_body_to_nil.rb +52 -0
  129. data/lib/evilution/mutator/operator/block_body_to_raise.rb +34 -0
  130. data/lib/evilution/mutator/operator/call_to_nil.rb +34 -0
  131. data/lib/evilution/mutator/operator/coercion_emptying.rb +60 -0
  132. data/lib/evilution/mutator/operator/collection_replacement.rb +19 -9
  133. data/lib/evilution/mutator/operator/comparison_operand_swap.rb +54 -0
  134. data/lib/evilution/mutator/operator/comparison_replacement.rb +37 -12
  135. data/lib/evilution/mutator/operator/const_get_to_constant_path.rb +50 -0
  136. data/lib/evilution/mutator/operator/data_struct_member.rb +82 -0
  137. data/lib/evilution/mutator/operator/dig_to_fetch_chain.rb +45 -0
  138. data/lib/evilution/mutator/operator/double_negation_removal.rb +22 -0
  139. data/lib/evilution/mutator/operator/dynamic_dispatch_resolution.rb +79 -0
  140. data/lib/evilution/mutator/operator/exception_swallow.rb +84 -0
  141. data/lib/evilution/mutator/operator/format_specifier_swap.rb +100 -0
  142. data/lib/evilution/mutator/operator/forwarded_argument_drop.rb +142 -0
  143. data/lib/evilution/mutator/operator/inequality_to_negated_identity.rb +43 -0
  144. data/lib/evilution/mutator/operator/integer_division_to_fdiv.rb +62 -0
  145. data/lib/evilution/mutator/operator/keyword_argument.rb +25 -2
  146. data/lib/evilution/mutator/operator/keyword_argument_removal.rb +47 -0
  147. data/lib/evilution/mutator/operator/keyword_value_swap.rb +75 -0
  148. data/lib/evilution/mutator/operator/no_matching_pattern_else.rb +47 -0
  149. data/lib/evilution/mutator/operator/numbered_parameter_swap.rb +78 -0
  150. data/lib/evilution/mutator/operator/off_by_one_boundary.rb +68 -0
  151. data/lib/evilution/mutator/operator/optional_parameter_to_required.rb +14 -3
  152. data/lib/evilution/mutator/operator/pattern_matching_array.rb +12 -1
  153. data/lib/evilution/mutator/operator/pattern_wildcard_widening.rb +117 -0
  154. data/lib/evilution/mutator/operator/pin_operator_removal.rb +48 -0
  155. data/lib/evilution/mutator/operator/proc_to_lambda.rb +43 -0
  156. data/lib/evilution/mutator/operator/receiver_constructor_swap.rb +51 -0
  157. data/lib/evilution/mutator/operator/reduce_to_sum.rb +58 -0
  158. data/lib/evilution/mutator/operator/regex_simplification.rb +53 -132
  159. data/lib/evilution/mutator/operator/regexp_alternation_branch_deletion.rb +54 -0
  160. data/lib/evilution/mutator/operator/regexp_anchor_promotion.rb +43 -0
  161. data/lib/evilution/mutator/operator/regexp_anchor_to_predicate.rb +136 -0
  162. data/lib/evilution/mutator/operator/regexp_capture_to_passive.rb +61 -0
  163. data/lib/evilution/mutator/operator/regexp_character_type_complement.rb +54 -0
  164. data/lib/evilution/mutator/operator/regexp_named_group_rename.rb +106 -0
  165. data/lib/evilution/mutator/operator/regexp_option_removal.rb +51 -0
  166. data/lib/evilution/mutator/operator/regexp_quantifier_minimum_swap.rb +45 -0
  167. data/lib/evilution/mutator/operator/rescue_else_concatenation.rb +62 -0
  168. data/lib/evilution/mutator/operator/rescue_handler_concatenation.rb +69 -0
  169. data/lib/evilution/mutator/operator/rescue_handler_promotion.rb +65 -0
  170. data/lib/evilution/mutator/operator/return_keyword_removal.rb +79 -0
  171. data/lib/evilution/mutator/operator/rightward_assignment.rb +46 -0
  172. data/lib/evilution/mutator/operator/safe_navigation_removal.rb +67 -0
  173. data/lib/evilution/mutator/operator/send_mutation.rb +44 -6
  174. data/lib/evilution/mutator/operator/splat_operator.rb +38 -13
  175. data/lib/evilution/mutator/operator/statement_reorder.rb +153 -0
  176. data/lib/evilution/mutator/operator/symbol_to_proc_replacement.rb +59 -0
  177. data/lib/evilution/mutator/operator/to_i_to_integer.rb +38 -0
  178. data/lib/evilution/mutator/primitives.rb +25 -0
  179. data/lib/evilution/mutator/registry.rb +54 -2
  180. data/lib/evilution/mutator/rescue_handlers.rb +81 -0
  181. data/lib/evilution/parallel/pool.rb +1 -0
  182. data/lib/evilution/parallel_db_warning.rb +1 -1
  183. data/lib/evilution/process_supervisor.rb +3 -2
  184. data/lib/evilution/rails_warmup.rb +61 -0
  185. data/lib/evilution/reporter/cli/line_formatters/baseline_neutralized_notice.rb +55 -0
  186. data/lib/evilution/reporter/cli/metrics_block.rb +2 -0
  187. data/lib/evilution/reporter/html/report.rb +1 -0
  188. data/lib/evilution/reporter/json/baseline.rb +15 -0
  189. data/lib/evilution/reporter/json.rb +7 -2
  190. data/lib/evilution/result/baseline_neutralization.rb +10 -0
  191. data/lib/evilution/result/coverage_gap_grouper.rb +1 -0
  192. data/lib/evilution/result/mutation_result.rb +9 -1
  193. data/lib/evilution/result/subject_scorer.rb +1 -0
  194. data/lib/evilution/result/summary.rb +42 -2
  195. data/lib/evilution/runner/baseline_runner.rb +26 -11
  196. data/lib/evilution/runner/canary.rb +2 -57
  197. data/lib/evilution/runner/canary_failure_message.rb +101 -0
  198. data/lib/evilution/runner/isolation_resolver.rb +23 -2
  199. data/lib/evilution/runner/mutation_executor/neutralizer/baseline_failed.rb +35 -14
  200. data/lib/evilution/runner/mutation_executor/result_cache.rb +3 -0
  201. data/lib/evilution/runner/mutation_executor/result_packer.rb +4 -2
  202. data/lib/evilution/runner/mutation_executor.rb +1 -1
  203. data/lib/evilution/runner/mutation_planner.rb +11 -2
  204. data/lib/evilution/runner/report_publisher.rb +3 -2
  205. data/lib/evilution/runner/subject_pipeline.rb +46 -1
  206. data/lib/evilution/runner.rb +4 -1
  207. data/lib/evilution/source_ast_cache.rb +1 -1
  208. data/lib/evilution/spec_ast_cache.rb +1 -1
  209. data/lib/evilution/subject.rb +8 -2
  210. data/lib/evilution/version.rb +1 -1
  211. data/lib/evilution.rb +51 -0
  212. data/script/memory_check +62 -16
  213. metadata +108 -4
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evilution
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Denis Kiselev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-09-21 00:00:00.000000000 Z
11
+ date: 2026-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: diff-lcs
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '1.5'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '3'
22
+ version: '2'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '1.5'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '3'
32
+ version: '2'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: mcp
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -70,6 +70,26 @@ dependencies:
70
70
  - - "<"
71
71
  - !ruby/object:Gem::Version
72
72
  version: '2'
73
+ - !ruby/object:Gem::Dependency
74
+ name: regexp_parser
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '2.9'
80
+ - - "<"
81
+ - !ruby/object:Gem::Version
82
+ version: '3'
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '2.9'
90
+ - - "<"
91
+ - !ruby/object:Gem::Version
92
+ version: '3'
73
93
  description: Evilution is a mutation testing tool for Ruby. It validates test suite
74
94
  quality by making small code changes and checking if tests catch them. AI-agent-first
75
95
  design with JSON output, diff-based targeting, and coverage-based filtering.
@@ -120,18 +140,30 @@ files:
120
140
  - exe/evilution
121
141
  - lib/evilution.rb
122
142
  - lib/evilution/ast.rb
143
+ - lib/evilution/ast/aasm_declaration.rb
144
+ - lib/evilution/ast/callback_declaration.rb
123
145
  - lib/evilution/ast/constant_names.rb
124
146
  - lib/evilution/ast/heredoc_span.rb
147
+ - lib/evilution/ast/included_block.rb
125
148
  - lib/evilution/ast/inheritance_scanner.rb
149
+ - lib/evilution/ast/literal_callable.rb
126
150
  - lib/evilution/ast/local_reads.rb
127
151
  - lib/evilution/ast/parser.rb
128
152
  - lib/evilution/ast/pattern.rb
129
153
  - lib/evilution/ast/pattern/filter.rb
130
154
  - lib/evilution/ast/pattern/matcher.rb
155
+ - lib/evilution/ast/pattern/method_name.rb
131
156
  - lib/evilution/ast/pattern/parser.rb
157
+ - lib/evilution/ast/regexp_pattern.rb
158
+ - lib/evilution/ast/scope_declaration.rb
132
159
  - lib/evilution/ast/sorbet_sig_detector.rb
133
160
  - lib/evilution/ast/source_surgeon.rb
161
+ - lib/evilution/ast/uncovered_code.rb
162
+ - lib/evilution/ast/value_object_definition.rb
134
163
  - lib/evilution/baseline.rb
164
+ - lib/evilution/baseline/failure_formatter.rb
165
+ - lib/evilution/baseline/report.rb
166
+ - lib/evilution/baseline/spec_failure.rb
135
167
  - lib/evilution/cache.rb
136
168
  - lib/evilution/child_output.rb
137
169
  - lib/evilution/cli.rb
@@ -201,6 +233,7 @@ files:
201
233
  - lib/evilution/config/validators/profile.rb
202
234
  - lib/evilution/config/validators/spec_mappings.rb
203
235
  - lib/evilution/config/validators/spec_pattern.rb
236
+ - lib/evilution/config/validators/warmup.rb
204
237
  - lib/evilution/coverage.rb
205
238
  - lib/evilution/coverage/digest.rb
206
239
  - lib/evilution/coverage/map.rb
@@ -217,6 +250,13 @@ files:
217
250
  - lib/evilution/equivalent/heuristic/arithmetic_identity.rb
218
251
  - lib/evilution/equivalent/heuristic/comment_marking.rb
219
252
  - lib/evilution/equivalent/heuristic/dead_code.rb
253
+ - lib/evilution/equivalent/heuristic/guarded_index_fetch.rb
254
+ - lib/evilution/equivalent/heuristic/guarded_index_fetch/condition.rb
255
+ - lib/evilution/equivalent/heuristic/guarded_index_fetch/disturbance.rb
256
+ - lib/evilution/equivalent/heuristic/guarded_index_fetch/early_exit.rb
257
+ - lib/evilution/equivalent/heuristic/guarded_index_fetch/guard.rb
258
+ - lib/evilution/equivalent/heuristic/guarded_index_fetch/index_read.rb
259
+ - lib/evilution/equivalent/heuristic/guarded_index_fetch/node_path.rb
220
260
  - lib/evilution/equivalent/heuristic/method_body_nil.rb
221
261
  - lib/evilution/equivalent/heuristic/noop_source.rb
222
262
  - lib/evilution/equivalent/heuristic/void_context.rb
@@ -234,8 +274,11 @@ files:
234
274
  - lib/evilution/integration.rb
235
275
  - lib/evilution/integration/base.rb
236
276
  - lib/evilution/integration/crash_detector.rb
277
+ - lib/evilution/integration/known_failures.rb
237
278
  - lib/evilution/integration/loading.rb
238
279
  - lib/evilution/integration/loading/body_call_neutralizer.rb
280
+ - lib/evilution/integration/loading/callback_redeclaration.rb
281
+ - lib/evilution/integration/loading/concern_redeclaration.rb
239
282
  - lib/evilution/integration/loading/concern_state_cleaner.rb
240
283
  - lib/evilution/integration/loading/constant_pinner.rb
241
284
  - lib/evilution/integration/loading/mutation_applier.rb
@@ -243,16 +286,20 @@ files:
243
286
  - lib/evilution/integration/loading/reeval_warning_filter.rb
244
287
  - lib/evilution/integration/loading/source_evaluator.rb
245
288
  - lib/evilution/integration/loading/syntax_validator.rb
289
+ - lib/evilution/integration/loading/test_class_cache.rb
246
290
  - lib/evilution/integration/loading/test_load_path.rb
247
291
  - lib/evilution/integration/minitest.rb
292
+ - lib/evilution/integration/minitest/test_ids.rb
248
293
  - lib/evilution/integration/minitest_crash_detector.rb
249
294
  - lib/evilution/integration/rspec.rb
250
295
  - lib/evilution/integration/rspec/baseline_runner.rb
251
296
  - lib/evilution/integration/rspec/crash_detector_lifecycle.rb
252
297
  - lib/evilution/integration/rspec/example_filter_applier.rb
298
+ - lib/evilution/integration/rspec/example_ids.rb
253
299
  - lib/evilution/integration/rspec/framework_loader.rb
254
300
  - lib/evilution/integration/rspec/result_builder.rb
255
301
  - lib/evilution/integration/rspec/state_guard.rb
302
+ - lib/evilution/integration/rspec/state_guard/anonymous_example_group_examples.rb
256
303
  - lib/evilution/integration/rspec/state_guard/configuration_state.rb
257
304
  - lib/evilution/integration/rspec/state_guard/configuration_streams.rb
258
305
  - lib/evilution/integration/rspec/state_guard/example_groups_constants.rb
@@ -270,6 +317,7 @@ files:
270
317
  - lib/evilution/integration/test_unit/result_builder.rb
271
318
  - lib/evilution/integration/test_unit/subject_class_registry.rb
272
319
  - lib/evilution/integration/test_unit/test_file_resolver.rb
320
+ - lib/evilution/integration/test_unit/test_ids.rb
273
321
  - lib/evilution/integration/test_unit_crash_detector.rb
274
322
  - lib/evilution/isolation.rb
275
323
  - lib/evilution/isolation/fork.rb
@@ -306,15 +354,25 @@ files:
306
354
  - lib/evilution/mutator.rb
307
355
  - lib/evilution/mutator/base.rb
308
356
  - lib/evilution/mutator/operator.rb
357
+ - lib/evilution/mutator/operator/alias_removal.rb
358
+ - lib/evilution/mutator/operator/argument_list_removal.rb
309
359
  - lib/evilution/mutator/operator/argument_method_call_replacement.rb
310
360
  - lib/evilution/mutator/operator/argument_nil_substitution.rb
361
+ - lib/evilution/mutator/operator/argument_order_permutation.rb
362
+ - lib/evilution/mutator/operator/argument_propagation.rb
311
363
  - lib/evilution/mutator/operator/argument_removal.rb
312
364
  - lib/evilution/mutator/operator/arithmetic_replacement.rb
365
+ - lib/evilution/mutator/operator/array_coercion_to_literal.rb
313
366
  - lib/evilution/mutator/operator/array_literal.rb
367
+ - lib/evilution/mutator/operator/attribute_write_to_read.rb
314
368
  - lib/evilution/mutator/operator/bang_method.rb
315
369
  - lib/evilution/mutator/operator/begin_unwrap.rb
370
+ - lib/evilution/mutator/operator/binary_operand_promotion.rb
316
371
  - lib/evilution/mutator/operator/bitwise_complement.rb
317
372
  - lib/evilution/mutator/operator/bitwise_replacement.rb
373
+ - lib/evilution/mutator/operator/block_body_promotion.rb
374
+ - lib/evilution/mutator/operator/block_body_to_nil.rb
375
+ - lib/evilution/mutator/operator/block_body_to_raise.rb
318
376
  - lib/evilution/mutator/operator/block_destructuring_expansion.rb
319
377
  - lib/evilution/mutator/operator/block_param_removal.rb
320
378
  - lib/evilution/mutator/operator/block_parameter_drop.rb
@@ -325,21 +383,32 @@ files:
325
383
  - lib/evilution/mutator/operator/boolean_operand_promotion.rb
326
384
  - lib/evilution/mutator/operator/boolean_operator_replacement.rb
327
385
  - lib/evilution/mutator/operator/break_statement.rb
386
+ - lib/evilution/mutator/operator/call_to_nil.rb
328
387
  - lib/evilution/mutator/operator/case_in.rb
329
388
  - lib/evilution/mutator/operator/case_when.rb
330
389
  - lib/evilution/mutator/operator/class_variable_write.rb
390
+ - lib/evilution/mutator/operator/coercion_emptying.rb
331
391
  - lib/evilution/mutator/operator/collection_replacement.rb
332
392
  - lib/evilution/mutator/operator/collection_return.rb
393
+ - lib/evilution/mutator/operator/comparison_operand_swap.rb
333
394
  - lib/evilution/mutator/operator/comparison_replacement.rb
334
395
  - lib/evilution/mutator/operator/compound_assignment.rb
335
396
  - lib/evilution/mutator/operator/conditional_branch.rb
336
397
  - lib/evilution/mutator/operator/conditional_flip.rb
337
398
  - lib/evilution/mutator/operator/conditional_negation.rb
399
+ - lib/evilution/mutator/operator/const_get_to_constant_path.rb
400
+ - lib/evilution/mutator/operator/data_struct_member.rb
338
401
  - lib/evilution/mutator/operator/defined_check.rb
402
+ - lib/evilution/mutator/operator/dig_to_fetch_chain.rb
403
+ - lib/evilution/mutator/operator/double_negation_removal.rb
404
+ - lib/evilution/mutator/operator/dynamic_dispatch_resolution.rb
339
405
  - lib/evilution/mutator/operator/ensure_removal.rb
340
406
  - lib/evilution/mutator/operator/equality_to_identity.rb
407
+ - lib/evilution/mutator/operator/exception_swallow.rb
341
408
  - lib/evilution/mutator/operator/explicit_super_mutation.rb
342
409
  - lib/evilution/mutator/operator/float_literal.rb
410
+ - lib/evilution/mutator/operator/format_specifier_swap.rb
411
+ - lib/evilution/mutator/operator/forwarded_argument_drop.rb
343
412
  - lib/evilution/mutator/operator/forwarding_super_to_explicit.rb
344
413
  - lib/evilution/mutator/operator/global_variable_write.rb
345
414
  - lib/evilution/mutator/operator/hash_literal.rb
@@ -348,10 +417,14 @@ files:
348
417
  - lib/evilution/mutator/operator/index_to_at.rb
349
418
  - lib/evilution/mutator/operator/index_to_dig.rb
350
419
  - lib/evilution/mutator/operator/index_to_fetch.rb
420
+ - lib/evilution/mutator/operator/inequality_to_negated_identity.rb
351
421
  - lib/evilution/mutator/operator/inline_rescue.rb
352
422
  - lib/evilution/mutator/operator/instance_variable_write.rb
423
+ - lib/evilution/mutator/operator/integer_division_to_fdiv.rb
353
424
  - lib/evilution/mutator/operator/integer_literal.rb
354
425
  - lib/evilution/mutator/operator/keyword_argument.rb
426
+ - lib/evilution/mutator/operator/keyword_argument_removal.rb
427
+ - lib/evilution/mutator/operator/keyword_value_swap.rb
355
428
  - lib/evilution/mutator/operator/lambda_body.rb
356
429
  - lib/evilution/mutator/operator/last_expression_removal.rb
357
430
  - lib/evilution/mutator/operator/local_variable_assignment.rb
@@ -366,37 +439,63 @@ files:
366
439
  - lib/evilution/mutator/operator/negation_insertion.rb
367
440
  - lib/evilution/mutator/operator/next_statement.rb
368
441
  - lib/evilution/mutator/operator/nil_replacement.rb
442
+ - lib/evilution/mutator/operator/no_matching_pattern_else.rb
443
+ - lib/evilution/mutator/operator/numbered_parameter_swap.rb
444
+ - lib/evilution/mutator/operator/off_by_one_boundary.rb
369
445
  - lib/evilution/mutator/operator/optional_default_injection.rb
370
446
  - lib/evilution/mutator/operator/optional_parameter_to_required.rb
371
447
  - lib/evilution/mutator/operator/pattern_matching_alternative.rb
372
448
  - lib/evilution/mutator/operator/pattern_matching_array.rb
373
449
  - lib/evilution/mutator/operator/pattern_matching_guard.rb
374
450
  - lib/evilution/mutator/operator/pattern_predicate.rb
451
+ - lib/evilution/mutator/operator/pattern_wildcard_widening.rb
452
+ - lib/evilution/mutator/operator/pin_operator_removal.rb
375
453
  - lib/evilution/mutator/operator/predicate_replacement.rb
376
454
  - lib/evilution/mutator/operator/predicate_to_nil.rb
455
+ - lib/evilution/mutator/operator/proc_to_lambda.rb
377
456
  - lib/evilution/mutator/operator/range_replacement.rb
457
+ - lib/evilution/mutator/operator/receiver_constructor_swap.rb
378
458
  - lib/evilution/mutator/operator/receiver_replacement.rb
379
459
  - lib/evilution/mutator/operator/redo_statement.rb
460
+ - lib/evilution/mutator/operator/reduce_to_sum.rb
380
461
  - lib/evilution/mutator/operator/regex_capture.rb
381
462
  - lib/evilution/mutator/operator/regex_simplification.rb
463
+ - lib/evilution/mutator/operator/regexp_alternation_branch_deletion.rb
464
+ - lib/evilution/mutator/operator/regexp_anchor_promotion.rb
465
+ - lib/evilution/mutator/operator/regexp_anchor_to_predicate.rb
466
+ - lib/evilution/mutator/operator/regexp_capture_to_passive.rb
467
+ - lib/evilution/mutator/operator/regexp_character_type_complement.rb
382
468
  - lib/evilution/mutator/operator/regexp_mutation.rb
469
+ - lib/evilution/mutator/operator/regexp_named_group_rename.rb
470
+ - lib/evilution/mutator/operator/regexp_option_removal.rb
471
+ - lib/evilution/mutator/operator/regexp_quantifier_minimum_swap.rb
383
472
  - lib/evilution/mutator/operator/rescue_body_replacement.rb
473
+ - lib/evilution/mutator/operator/rescue_else_concatenation.rb
474
+ - lib/evilution/mutator/operator/rescue_handler_concatenation.rb
475
+ - lib/evilution/mutator/operator/rescue_handler_promotion.rb
384
476
  - lib/evilution/mutator/operator/rescue_removal.rb
385
477
  - lib/evilution/mutator/operator/retry_removal.rb
478
+ - lib/evilution/mutator/operator/return_keyword_removal.rb
386
479
  - lib/evilution/mutator/operator/return_value_removal.rb
480
+ - lib/evilution/mutator/operator/rightward_assignment.rb
481
+ - lib/evilution/mutator/operator/safe_navigation_removal.rb
387
482
  - lib/evilution/mutator/operator/scalar_return.rb
388
483
  - lib/evilution/mutator/operator/send_mutation.rb
389
484
  - lib/evilution/mutator/operator/splat_operator.rb
390
485
  - lib/evilution/mutator/operator/statement_deletion.rb
486
+ - lib/evilution/mutator/operator/statement_reorder.rb
391
487
  - lib/evilution/mutator/operator/string_interpolation.rb
392
488
  - lib/evilution/mutator/operator/string_literal.rb
393
489
  - lib/evilution/mutator/operator/superclass_removal.rb
394
490
  - lib/evilution/mutator/operator/symbol_literal.rb
491
+ - lib/evilution/mutator/operator/symbol_to_proc_replacement.rb
492
+ - lib/evilution/mutator/operator/to_i_to_integer.rb
395
493
  - lib/evilution/mutator/operator/typed_default_return.rb
396
494
  - lib/evilution/mutator/operator/yield_statement.rb
397
495
  - lib/evilution/mutator/operator/zsuper_removal.rb
398
496
  - lib/evilution/mutator/primitives.rb
399
497
  - lib/evilution/mutator/registry.rb
498
+ - lib/evilution/mutator/rescue_handlers.rb
400
499
  - lib/evilution/parallel.rb
401
500
  - lib/evilution/parallel/pool.rb
402
501
  - lib/evilution/parallel/work_queue.rb
@@ -416,6 +515,7 @@ files:
416
515
  - lib/evilution/process_cleanup.rb
417
516
  - lib/evilution/process_supervisor.rb
418
517
  - lib/evilution/rails_detector.rb
518
+ - lib/evilution/rails_warmup.rb
419
519
  - lib/evilution/related_spec_heuristic.rb
420
520
  - lib/evilution/reporter.rb
421
521
  - lib/evilution/reporter/cli.rb
@@ -428,6 +528,7 @@ files:
428
528
  - lib/evilution/reporter/cli/item_formatters/subject_score.rb
429
529
  - lib/evilution/reporter/cli/item_formatters/subject_score_group.rb
430
530
  - lib/evilution/reporter/cli/line_formatters.rb
531
+ - lib/evilution/reporter/cli/line_formatters/baseline_neutralized_notice.rb
431
532
  - lib/evilution/reporter/cli/line_formatters/duration.rb
432
533
  - lib/evilution/reporter/cli/line_formatters/efficiency.rb
433
534
  - lib/evilution/reporter/cli/line_formatters/error_rate_warning.rb
@@ -483,6 +584,7 @@ files:
483
584
  - lib/evilution/reporter/html/templates/unparseable_details.html.erb
484
585
  - lib/evilution/reporter/html/templates/unresolved_details.html.erb
485
586
  - lib/evilution/reporter/json.rb
587
+ - lib/evilution/reporter/json/baseline.rb
486
588
  - lib/evilution/reporter/json/subjects.rb
487
589
  - lib/evilution/reporter/progress_bar.rb
488
590
  - lib/evilution/reporter/suggestion.rb
@@ -494,6 +596,7 @@ files:
494
596
  - lib/evilution/reporter/suggestion/templates/minitest.rb
495
597
  - lib/evilution/reporter/suggestion/templates/rspec.rb
496
598
  - lib/evilution/result.rb
599
+ - lib/evilution/result/baseline_neutralization.rb
497
600
  - lib/evilution/result/coverage_gap.rb
498
601
  - lib/evilution/result/coverage_gap_grouper.rb
499
602
  - lib/evilution/result/error_info.rb
@@ -506,6 +609,7 @@ files:
506
609
  - lib/evilution/runner.rb
507
610
  - lib/evilution/runner/baseline_runner.rb
508
611
  - lib/evilution/runner/canary.rb
612
+ - lib/evilution/runner/canary_failure_message.rb
509
613
  - lib/evilution/runner/diagnostics.rb
510
614
  - lib/evilution/runner/isolation_resolver.rb
511
615
  - lib/evilution/runner/mutation_executor.rb