evilution 0.24.0 → 0.25.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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/.beads/interactions.jsonl +205 -0
  3. data/CHANGELOG.md +35 -0
  4. data/README.md +80 -4
  5. data/exe/evil +6 -0
  6. data/lib/evilution/ast/source_surgeon.rb +15 -1
  7. data/lib/evilution/cli/commands/compare.rb +68 -0
  8. data/lib/evilution/cli/parser/command_extractor.rb +2 -1
  9. data/lib/evilution/cli/parser/options_builder.rb +21 -1
  10. data/lib/evilution/cli/printers/compare.rb +159 -0
  11. data/lib/evilution/cli.rb +1 -0
  12. data/lib/evilution/compare/categorizer.rb +109 -0
  13. data/lib/evilution/compare/detector.rb +21 -0
  14. data/lib/evilution/compare/fingerprint.rb +83 -0
  15. data/lib/evilution/compare/normalizer.rb +106 -0
  16. data/lib/evilution/compare/record.rb +16 -0
  17. data/lib/evilution/compare.rb +15 -0
  18. data/lib/evilution/config.rb +165 -3
  19. data/lib/evilution/example_filter.rb +143 -0
  20. data/lib/evilution/integration/crash_detector.rb +5 -2
  21. data/lib/evilution/integration/minitest.rb +10 -5
  22. data/lib/evilution/integration/minitest_crash_detector.rb +5 -2
  23. data/lib/evilution/integration/rspec.rb +82 -7
  24. data/lib/evilution/isolation/fork.rb +25 -0
  25. data/lib/evilution/mcp/info_tool.rb +77 -5
  26. data/lib/evilution/mcp/mutate_tool/config_builder.rb +20 -0
  27. data/lib/evilution/mcp/mutate_tool/error_payload.rb +17 -0
  28. data/lib/evilution/mcp/mutate_tool/option_parser.rb +54 -0
  29. data/lib/evilution/mcp/mutate_tool/progress_streamer.rb +37 -0
  30. data/lib/evilution/mcp/mutate_tool/report_trimmer.rb +31 -0
  31. data/lib/evilution/mcp/mutate_tool/survived_enricher.rb +52 -0
  32. data/lib/evilution/mcp/mutate_tool.rb +34 -186
  33. data/lib/evilution/mutation.rb +43 -3
  34. data/lib/evilution/mutator/base.rb +39 -1
  35. data/lib/evilution/mutator/operator/argument_nil_substitution.rb +5 -1
  36. data/lib/evilution/mutator/operator/argument_removal.rb +5 -1
  37. data/lib/evilution/parallel/work_queue.rb +149 -31
  38. data/lib/evilution/parallel_db_warning.rb +68 -0
  39. data/lib/evilution/reporter/cli.rb +37 -11
  40. data/lib/evilution/reporter/html/assets/style.css +17 -0
  41. data/lib/evilution/reporter/html/sections/file_section.rb +15 -0
  42. data/lib/evilution/reporter/html/sections/neutral_details.rb +25 -0
  43. data/lib/evilution/reporter/html/sections/unparseable_details.rb +25 -0
  44. data/lib/evilution/reporter/html/sections/unresolved_details.rb +25 -0
  45. data/lib/evilution/reporter/html/templates/file_section.html.erb +3 -0
  46. data/lib/evilution/reporter/html/templates/neutral_details.html.erb +14 -0
  47. data/lib/evilution/reporter/html/templates/summary_cards.html.erb +3 -0
  48. data/lib/evilution/reporter/html/templates/unparseable_details.html.erb +11 -0
  49. data/lib/evilution/reporter/html/templates/unresolved_details.html.erb +11 -0
  50. data/lib/evilution/reporter/json.rb +8 -2
  51. data/lib/evilution/reporter/suggestion/diff_helpers.rb +28 -0
  52. data/lib/evilution/reporter/suggestion/registry.rb +64 -0
  53. data/lib/evilution/reporter/suggestion/templates/generic.rb +55 -0
  54. data/lib/evilution/reporter/suggestion/templates/minitest.rb +659 -0
  55. data/lib/evilution/reporter/suggestion/templates/rspec.rb +613 -0
  56. data/lib/evilution/reporter/suggestion.rb +8 -1327
  57. data/lib/evilution/result/mutation_result.rb +5 -1
  58. data/lib/evilution/result/summary.rb +13 -1
  59. data/lib/evilution/runner/baseline_runner.rb +23 -2
  60. data/lib/evilution/runner/mutation_executor.rb +83 -13
  61. data/lib/evilution/runner.rb +6 -0
  62. data/lib/evilution/source_ast_cache.rb +39 -0
  63. data/lib/evilution/spec_ast_cache.rb +166 -0
  64. data/lib/evilution/spec_resolver.rb +6 -1
  65. data/lib/evilution/spec_selector.rb +39 -0
  66. data/lib/evilution/temp_dir_tracker.rb +23 -3
  67. data/lib/evilution/version.rb +1 -1
  68. data/script/memory_check +7 -5
  69. metadata +34 -2
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: 0.24.0
4
+ version: 0.25.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-04-14 00:00:00.000000000 Z
11
+ date: 2026-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: diff-lcs
@@ -56,6 +56,7 @@ description: Evilution is a mutation testing tool for Ruby. It validates test su
56
56
  email:
57
57
  - denis.kiselyov@gmail.com
58
58
  executables:
59
+ - evil
59
60
  - evilution
60
61
  extensions: []
61
62
  extra_rdoc_files: []
@@ -83,6 +84,7 @@ files:
83
84
  - docs/ast_pattern_syntax.md
84
85
  - docs/isolation.md
85
86
  - docs/mutation_density_benchmark.md
87
+ - exe/evil
86
88
  - exe/evilution
87
89
  - lib/evilution.rb
88
90
  - lib/evilution/ast.rb
@@ -99,6 +101,7 @@ files:
99
101
  - lib/evilution/cli.rb
100
102
  - lib/evilution/cli/command.rb
101
103
  - lib/evilution/cli/commands.rb
104
+ - lib/evilution/cli/commands/compare.rb
102
105
  - lib/evilution/cli/commands/environment_show.rb
103
106
  - lib/evilution/cli/commands/init.rb
104
107
  - lib/evilution/cli/commands/mcp.rb
@@ -119,6 +122,7 @@ files:
119
122
  - lib/evilution/cli/parser/options_builder.rb
120
123
  - lib/evilution/cli/parser/stdin_reader.rb
121
124
  - lib/evilution/cli/printers.rb
125
+ - lib/evilution/cli/printers/compare.rb
122
126
  - lib/evilution/cli/printers/environment.rb
123
127
  - lib/evilution/cli/printers/session_detail.rb
124
128
  - lib/evilution/cli/printers/session_diff.rb
@@ -127,6 +131,12 @@ files:
127
131
  - lib/evilution/cli/printers/tests_list.rb
128
132
  - lib/evilution/cli/printers/util_mutation.rb
129
133
  - lib/evilution/cli/result.rb
134
+ - lib/evilution/compare.rb
135
+ - lib/evilution/compare/categorizer.rb
136
+ - lib/evilution/compare/detector.rb
137
+ - lib/evilution/compare/fingerprint.rb
138
+ - lib/evilution/compare/normalizer.rb
139
+ - lib/evilution/compare/record.rb
130
140
  - lib/evilution/config.rb
131
141
  - lib/evilution/disable_comment.rb
132
142
  - lib/evilution/equivalent.rb
@@ -139,6 +149,7 @@ files:
139
149
  - lib/evilution/equivalent/heuristic/method_body_nil.rb
140
150
  - lib/evilution/equivalent/heuristic/noop_source.rb
141
151
  - lib/evilution/equivalent/heuristic/void_context.rb
152
+ - lib/evilution/example_filter.rb
142
153
  - lib/evilution/git.rb
143
154
  - lib/evilution/git/changed_files.rb
144
155
  - lib/evilution/hooks.rb
@@ -156,6 +167,12 @@ files:
156
167
  - lib/evilution/mcp.rb
157
168
  - lib/evilution/mcp/info_tool.rb
158
169
  - lib/evilution/mcp/mutate_tool.rb
170
+ - lib/evilution/mcp/mutate_tool/config_builder.rb
171
+ - lib/evilution/mcp/mutate_tool/error_payload.rb
172
+ - lib/evilution/mcp/mutate_tool/option_parser.rb
173
+ - lib/evilution/mcp/mutate_tool/progress_streamer.rb
174
+ - lib/evilution/mcp/mutate_tool/report_trimmer.rb
175
+ - lib/evilution/mcp/mutate_tool/survived_enricher.rb
159
176
  - lib/evilution/mcp/server.rb
160
177
  - lib/evilution/mcp/session_diff_tool.rb
161
178
  - lib/evilution/mcp/session_list_tool.rb
@@ -243,6 +260,7 @@ files:
243
260
  - lib/evilution/parallel.rb
244
261
  - lib/evilution/parallel/pool.rb
245
262
  - lib/evilution/parallel/work_queue.rb
263
+ - lib/evilution/parallel_db_warning.rb
246
264
  - lib/evilution/rails_detector.rb
247
265
  - lib/evilution/related_spec_heuristic.rb
248
266
  - lib/evilution/reporter.rb
@@ -262,10 +280,13 @@ files:
262
280
  - lib/evilution/reporter/html/sections/file_section.rb
263
281
  - lib/evilution/reporter/html/sections/header.rb
264
282
  - lib/evilution/reporter/html/sections/mutation_map.rb
283
+ - lib/evilution/reporter/html/sections/neutral_details.rb
265
284
  - lib/evilution/reporter/html/sections/summary_cards.rb
266
285
  - lib/evilution/reporter/html/sections/survived_details.rb
267
286
  - lib/evilution/reporter/html/sections/survived_entry.rb
268
287
  - lib/evilution/reporter/html/sections/truncation_notice.rb
288
+ - lib/evilution/reporter/html/sections/unparseable_details.rb
289
+ - lib/evilution/reporter/html/sections/unresolved_details.rb
269
290
  - lib/evilution/reporter/html/stylesheet.rb
270
291
  - lib/evilution/reporter/html/templates/baseline_comparison.html.erb
271
292
  - lib/evilution/reporter/html/templates/error_details.html.erb
@@ -273,14 +294,22 @@ files:
273
294
  - lib/evilution/reporter/html/templates/file_section.html.erb
274
295
  - lib/evilution/reporter/html/templates/header.html.erb
275
296
  - lib/evilution/reporter/html/templates/mutation_map.html.erb
297
+ - lib/evilution/reporter/html/templates/neutral_details.html.erb
276
298
  - lib/evilution/reporter/html/templates/report.html.erb
277
299
  - lib/evilution/reporter/html/templates/summary_cards.html.erb
278
300
  - lib/evilution/reporter/html/templates/survived_details.html.erb
279
301
  - lib/evilution/reporter/html/templates/survived_entry.html.erb
280
302
  - lib/evilution/reporter/html/templates/truncation_notice.html.erb
303
+ - lib/evilution/reporter/html/templates/unparseable_details.html.erb
304
+ - lib/evilution/reporter/html/templates/unresolved_details.html.erb
281
305
  - lib/evilution/reporter/json.rb
282
306
  - lib/evilution/reporter/progress_bar.rb
283
307
  - lib/evilution/reporter/suggestion.rb
308
+ - lib/evilution/reporter/suggestion/diff_helpers.rb
309
+ - lib/evilution/reporter/suggestion/registry.rb
310
+ - lib/evilution/reporter/suggestion/templates/generic.rb
311
+ - lib/evilution/reporter/suggestion/templates/minitest.rb
312
+ - lib/evilution/reporter/suggestion/templates/rspec.rb
284
313
  - lib/evilution/result.rb
285
314
  - lib/evilution/result/coverage_gap.rb
286
315
  - lib/evilution/result/coverage_gap_grouper.rb
@@ -297,7 +326,10 @@ files:
297
326
  - lib/evilution/session.rb
298
327
  - lib/evilution/session/diff.rb
299
328
  - lib/evilution/session/store.rb
329
+ - lib/evilution/source_ast_cache.rb
330
+ - lib/evilution/spec_ast_cache.rb
300
331
  - lib/evilution/spec_resolver.rb
332
+ - lib/evilution/spec_selector.rb
301
333
  - lib/evilution/subject.rb
302
334
  - lib/evilution/temp_dir_tracker.rb
303
335
  - lib/evilution/version.rb