ace-test-runner 0.18.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 (60) hide show
  1. checksums.yaml +7 -0
  2. data/.ace-defaults/test/runner.yml +35 -0
  3. data/.ace-defaults/test/suite.yml +31 -0
  4. data/.ace-defaults/test-runner/config.yml +61 -0
  5. data/CHANGELOG.md +626 -0
  6. data/LICENSE +21 -0
  7. data/README.md +42 -0
  8. data/Rakefile +14 -0
  9. data/exe/ace-test +26 -0
  10. data/exe/ace-test-suite +149 -0
  11. data/lib/ace/test_runner/atoms/command_builder.rb +165 -0
  12. data/lib/ace/test_runner/atoms/lazy_loader.rb +62 -0
  13. data/lib/ace/test_runner/atoms/line_number_resolver.rb +86 -0
  14. data/lib/ace/test_runner/atoms/report_directory_resolver.rb +48 -0
  15. data/lib/ace/test_runner/atoms/report_path_resolver.rb +67 -0
  16. data/lib/ace/test_runner/atoms/result_parser.rb +254 -0
  17. data/lib/ace/test_runner/atoms/test_detector.rb +114 -0
  18. data/lib/ace/test_runner/atoms/test_folder_detector.rb +53 -0
  19. data/lib/ace/test_runner/atoms/test_type_detector.rb +83 -0
  20. data/lib/ace/test_runner/atoms/timestamp_generator.rb +103 -0
  21. data/lib/ace/test_runner/cli/commands/test.rb +326 -0
  22. data/lib/ace/test_runner/cli.rb +16 -0
  23. data/lib/ace/test_runner/formatters/base_formatter.rb +102 -0
  24. data/lib/ace/test_runner/formatters/json_formatter.rb +90 -0
  25. data/lib/ace/test_runner/formatters/markdown_formatter.rb +91 -0
  26. data/lib/ace/test_runner/formatters/progress_file_formatter.rb +164 -0
  27. data/lib/ace/test_runner/formatters/progress_formatter.rb +328 -0
  28. data/lib/ace/test_runner/models/test_configuration.rb +165 -0
  29. data/lib/ace/test_runner/models/test_failure.rb +95 -0
  30. data/lib/ace/test_runner/models/test_group.rb +105 -0
  31. data/lib/ace/test_runner/models/test_report.rb +145 -0
  32. data/lib/ace/test_runner/models/test_result.rb +86 -0
  33. data/lib/ace/test_runner/molecules/cli_argument_parser.rb +263 -0
  34. data/lib/ace/test_runner/molecules/config_loader.rb +162 -0
  35. data/lib/ace/test_runner/molecules/deprecation_fixer.rb +204 -0
  36. data/lib/ace/test_runner/molecules/failed_package_reporter.rb +100 -0
  37. data/lib/ace/test_runner/molecules/failure_analyzer.rb +249 -0
  38. data/lib/ace/test_runner/molecules/in_process_runner.rb +249 -0
  39. data/lib/ace/test_runner/molecules/package_resolver.rb +106 -0
  40. data/lib/ace/test_runner/molecules/pattern_resolver.rb +146 -0
  41. data/lib/ace/test_runner/molecules/rake_integration.rb +218 -0
  42. data/lib/ace/test_runner/molecules/report_storage.rb +303 -0
  43. data/lib/ace/test_runner/molecules/smart_test_executor.rb +107 -0
  44. data/lib/ace/test_runner/molecules/test_executor.rb +162 -0
  45. data/lib/ace/test_runner/organisms/agent_reporter.rb +384 -0
  46. data/lib/ace/test_runner/organisms/report_generator.rb +151 -0
  47. data/lib/ace/test_runner/organisms/sequential_group_executor.rb +185 -0
  48. data/lib/ace/test_runner/organisms/test_orchestrator.rb +648 -0
  49. data/lib/ace/test_runner/rake_task.rb +90 -0
  50. data/lib/ace/test_runner/suite/display_helpers.rb +117 -0
  51. data/lib/ace/test_runner/suite/display_manager.rb +204 -0
  52. data/lib/ace/test_runner/suite/duration_estimator.rb +50 -0
  53. data/lib/ace/test_runner/suite/orchestrator.rb +120 -0
  54. data/lib/ace/test_runner/suite/process_monitor.rb +268 -0
  55. data/lib/ace/test_runner/suite/result_aggregator.rb +176 -0
  56. data/lib/ace/test_runner/suite/simple_display_manager.rb +122 -0
  57. data/lib/ace/test_runner/suite.rb +22 -0
  58. data/lib/ace/test_runner/version.rb +7 -0
  59. data/lib/ace/test_runner.rb +69 -0
  60. metadata +246 -0
data/CHANGELOG.md ADDED
@@ -0,0 +1,626 @@
1
+ # Changelog
2
+
3
+ All notable changes to ace-test-runner will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.18.0] - 2026-03-24
11
+
12
+ ### Changed
13
+ - Updated README intro to highlight Minitest wrapping, smart grouping, and cross-package resolution.
14
+ - Updated gemspec description to mention Minitest explicitly.
15
+ - Streamlined handbook to defer skill catalog to ace-test; fixed capitalization in workflow table.
16
+ - Re-recorded getting-started demo with real `ace-b36ts` test runs and suite execution.
17
+ - Simplified getting-started guide installation section.
18
+
19
+ ## [0.17.2] - 2026-03-23
20
+
21
+ ### Changed
22
+ - Refreshed `README.md` structure and navigation links to align with the current package README layout pattern.
23
+
24
+ ## [0.17.1] - 2026-03-22
25
+
26
+ ### Changed
27
+ - Replaced the getting-started demo placeholder command with real `ace-test` workflow commands (`--help` and atoms run) so the recording demonstrates actual package usage.
28
+
29
+ ## [0.17.0] - 2026-03-22
30
+
31
+ ### Changed
32
+ - Rewrote README as concise landing page (~60 lines, down from 275)
33
+ - Updated gemspec summary and description to match new tagline
34
+
35
+ ### Added
36
+ - New `docs/getting-started.md` tutorial-style guide
37
+ - New `docs/usage.md` with full CLI reference
38
+ - New `docs/handbook.md` with skills and workflows catalog
39
+ - Demo VHS tape and GIF in `docs/demo/`
40
+
41
+ ## [0.16.1] - 2026-03-22
42
+
43
+ ### Fixed
44
+ - Suite report-dir now includes the package subdirectory so the result aggregator finds reports at `<root>/<package>/<timestamp>/` instead of flat `<root>/<timestamp>/`.
45
+
46
+ ## [0.16.0] - 2026-03-20
47
+
48
+ ### Changed
49
+ - Tightened E2E verifier contracts for `TS-TEST-001` and `TS-TEST-002` with explicit `.exit`, command-capture, and report-artifact evidence requirements to improve assertion reliability.
50
+
51
+ ## [0.15.17] - 2026-03-18
52
+
53
+ ### Fixed
54
+ - Fixed CLI option precedence so `--report-dir` now properly overrides config defaults.
55
+
56
+ ## [0.15.16] - 2026-03-18
57
+
58
+ ### Fixed
59
+ - Fixed explicit `--report-dir` resolution for package-scoped and single-file execution so report artifacts are written exactly where the user requested.
60
+
61
+ ### Technical
62
+ - Clarified E2E failure-propagation cleanup requirements by documenting fixture removal for intentional-failure injection scenarios.
63
+
64
+ ## [0.15.15] - 2026-03-18
65
+
66
+ ### Changed
67
+ - Migrated CLI namespace from `Ace::Core::CLI::*` to `Ace::Support::Cli::*` (ace-support-cli is now the canonical home for CLI infrastructure).
68
+
69
+
70
+ ## [0.15.14] - 2026-03-17
71
+
72
+ ### Fixed
73
+ - Updated CLI routing help tests for direct command invocation to align with current help and exit behavior.
74
+
75
+ ## [0.15.13] - 2026-03-15
76
+
77
+ ### Fixed
78
+ - Made E2E report-files.txt capture instructions explicit with `find`/`ls -R` for reliable artifact listing
79
+ - Updated suite E2E sandbox to preserve real monorepo root path so `ace-test-suite` can discover packages
80
+
81
+ ## [0.15.12] - 2026-03-15
82
+
83
+ ### Changed
84
+ - Migrated CLI framework from dry-cli to ace-support-cli
85
+
86
+ ## [0.15.11] - 2026-03-13
87
+
88
+ ### Fixed
89
+ - Updated `ace-test` to propagate test failures via the process exit code and made `ace-test-suite` emit a clear configuration error when suite YAML is missing or malformed.
90
+ - Ensured `ace-test-suite` E2E sandbox setup includes the suite configuration so full-suite aggregation scenarios run with actual package orchestration.
91
+
92
+ ## [0.15.10] - 2026-03-12
93
+
94
+ ### Changed
95
+ - Updated the core `ace-test` E2E runner/verifier instructions to capture explicit command and report-file evidence for single-file and group-scoped executions instead of relying on fragile stdout phrasing.
96
+
97
+ ## [0.15.9] - 2026-03-04
98
+
99
+ ### Changed
100
+ - Default `ace-test` report storage now uses centralized `.ace-local/test/reports/<short-package>/<runid>/` paths
101
+ - Suite report discovery and subprocess report routing now use configured report roots instead of package-local `test-reports/`
102
+
103
+ ### Fixed
104
+ - Report cleanup now handles nested centralized layouts (`<root>/<package>/<runid>/`) in addition to legacy flat layouts
105
+ - Report path resolution and failed-package hints now prioritize centralized report roots with legacy `test-reports` fallback
106
+ - Test configuration writable-directory validation now accepts nested report paths when an ancestor directory is writable
107
+
108
+ ### Technical
109
+ - Added centralized report directory resolver atom and focused regression coverage for suite aggregation/duration fallback behavior
110
+ - Updated defaults, fixtures, and documentation to `.ace-local/test/reports` conventions
111
+
112
+ ## [0.15.8] - 2026-02-27
113
+
114
+ ### Fixed
115
+ - Strip `ACE_ASSIGN_ID` and `ACE_ASSIGN_FORK_ROOT` from subprocess environments in `test_executor`, `process_monitor`, and rake-task invocation paths to prevent assignment context leakage into test runs
116
+ - Add regression coverage in `rake_task_test` verifying assignment context variables are unset for spawned test processes
117
+
118
+ ## [0.15.7] - 2026-02-24
119
+
120
+ ### Technical
121
+ - Patch release requested for `ace-test-runner` with no functional code changes since `0.15.6`
122
+
123
+ ## [0.15.6] - 2026-02-23
124
+
125
+ ### Fixed
126
+ - Enabled ace-support-core integration (was disabled with stale TODO since v0.10)
127
+
128
+ ### Technical
129
+ - Updated internal dependency version constraints to current releases
130
+
131
+ ## [0.15.5] - 2026-02-22
132
+
133
+ ### Changed
134
+ - Migrate `ace-test` from registry/default-routing to single-command dry-cli entrypoint while preserving no-arg "run all tests" behavior
135
+ - Handle `--version` directly in the test command path for single-command mode
136
+
137
+ ### Technical
138
+ - Remove legacy routing constants/scaffolding from `CLI` module and update CLI routing tests for single-command invocation
139
+
140
+ ## [0.15.3] - 2026-02-12
141
+
142
+ ### Fixed
143
+ - Replace shell-out to `hostname` with `Socket.gethostname` in test report environment capture
144
+ - Backtick `hostname` fails on systems without `inetutils` (e.g., minimal Arch installs)
145
+ - `Socket.gethostname` is Ruby stdlib — works everywhere with no external dependency
146
+ - Fixes `ace-test-suite` reporting 1 error per package despite all tests passing
147
+
148
+ ## [0.15.2] - 2026-01-31
149
+
150
+ ### Fixed
151
+ - **Profile verbose mode**: Fix `--profile` to inject `--verbose` into Minitest ARGV instead of Ruby interpreter
152
+ - Ruby's `--verbose` flag only sets `$VERBOSE = true` (Ruby warnings), not Minitest verbose mode
153
+ - Minitest needs `--verbose` in ARGV to enable per-test timing output for profiling
154
+ - Fixes `ace-test package --profile N` not showing slowest tests
155
+ - Affects: multiple files, single files, and line-number test execution
156
+ - **Result parser test_time pattern**: Support both Minitest::Reporters and standard Minitest verbose formats
157
+ - Minitest::Reporters format: ` test_name PASS (0.00s)`
158
+ - Standard Minitest format: `ClassName#test_name = 0.00 s = .`
159
+
160
+ ## [0.15.1] - 2026-01-31
161
+
162
+ ### Added
163
+ - Expanded default test patterns: smoke, commands, cli, prompts, fixtures, support, edge
164
+ - Unit group now includes all expanded patterns for comprehensive test discovery
165
+
166
+ ## [0.15.0] - 2026-01-31
167
+
168
+ ### Added
169
+ - **Execution Mode CLI Flags**: New `--run-in-sequence`/`--ris` and `--run-in-single-batch`/`--risb` flags
170
+ - `--run-in-sequence` (default): Run test groups sequentially (atoms → molecules → organisms)
171
+ - `--run-in-single-batch`: Run all tests together in a single batch, bypassing grouped execution
172
+ - `ace-test-suite` now passes `--run-in-single-batch` to each package for cleaner output
173
+
174
+ ## [0.14.0] - 2026-01-31
175
+
176
+ ### Fixed
177
+ - **Profiling with Grouped Execution**: Bypass grouped mode when `--profile` is used without a specific target
178
+ - Previously, `ace-test package --profile N` showed 0.000s for all tests due to grouped execution
179
+ - Now runs all tests in a single batch when profiling without target, enabling accurate timing
180
+ - Group-specific profiling (`ace-test package group --profile N`) unchanged
181
+
182
+ ## [0.13.0] - 2026-01-31
183
+
184
+ ### Added
185
+ - **Slowest-First Package Scheduling**: Packages with longest expected duration now start first
186
+ - New `DurationEstimator` reads historical duration from `test-reports/latest/summary.json`
187
+ - Orchestrator sorts by expected duration (descending), then priority
188
+ - Prevents slow packages from becoming bottlenecks at end of parallel test runs
189
+
190
+ ## [0.12.6] - 2026-01-31
191
+
192
+ ### Fixed
193
+ - **Test Suite Timing Accuracy**: Display managers now use `results[:duration]` instead of wall-clock `status[:elapsed]`
194
+ - Previously reported times included subprocess startup overhead (~5s per package)
195
+ - Now shows actual Minitest execution duration from `summary.json`
196
+ - Affected files: `DisplayManager`, `SimpleDisplayManager`
197
+
198
+ ## [0.12.5] - 2026-01-30
199
+
200
+ ### Changed
201
+ - **DisplayHelpers Docstring Clarified**: Improved documentation to explain `color()`/`colorize()` relationship
202
+ - **Dynamic Package Column Width**: Package names now use dynamically calculated width based on actual package list
203
+
204
+ ### Removed
205
+ - **Dead Code Cleanup**: Removed unused `build_summary_text` method and its tests
206
+
207
+ ### Technical
208
+ - Added `create_display_manager` factory tests for orchestrator
209
+
210
+ ## [0.12.4] - 2026-01-30
211
+
212
+ ### Fixed
213
+ - **Orphaned Tests Discovered**: Suite tests in `test/suite/` were not being run by test runner
214
+ - Moved to `test/integration/suite/` where they are now discovered and executed
215
+ - Fixed require paths for new location
216
+ - Updated test assertions to match current `DisplayHelpers` output format
217
+
218
+ ## [0.12.3] - 2026-01-30
219
+
220
+ ### Changed
221
+ - **Progress Mode Aligned with Simple Mode**: Consistent column ordering across display modes
222
+ - Status icon first: `·` (waiting), `⋯` (running), `✓`/`?`/`✗` (completed)
223
+ - Time second (right-aligned 5.2f format)
224
+ - Package name without brackets (25 chars, left-justified)
225
+ - Progress bar and count for running state
226
+ - Columnar stats for completed: `N tests M asserts F fail`
227
+
228
+ ## [0.12.2] - 2026-01-30
229
+
230
+ ### Changed
231
+ - **Summary Output Reorder**: Status line now appears last for better visibility
232
+ - Skipped packages shown as compact single line at top: `Skipped: pkg1 (2), pkg2 (14)`
233
+ - Stats (duration, packages, tests, assertions) in middle
234
+ - Pass/fail status (`✓ ALL TESTS PASSED`) at bottom, always visible
235
+ - Simplified stat format: removed totals, shows just `passed, failed`
236
+
237
+ ## [0.12.1] - 2026-01-30
238
+
239
+ ### Changed
240
+ - **Improved Output Format**: Columnar format for better readability
241
+ - Status icon first (✓/✗/?) for easy visual scanning
242
+ - Time second (right-aligned) to spot slow packages
243
+ - Package name without brackets (cleaner)
244
+ - Abbreviated labels: `tests`, `asserts`, `fail`
245
+ - Example: `✓ 1.46s ace-support-core 221 tests 601 asserts 0 fail`
246
+
247
+ ## [0.12.0] - 2026-01-30
248
+
249
+ ### Added
250
+ - **Simple Output Mode**: New default output mode with line-by-line results (task 244)
251
+ - `ace-test-suite` now produces clean, pipe-friendly output by default
252
+ - One line per package as it completes (printed in completion order)
253
+ - No ANSI cursor control or screen clearing
254
+ - Works cleanly when piped: `ace-test-suite 2>&1 | cat`
255
+ - New `SimpleDisplayManager` class for agent-friendly output
256
+ - Columnar format: `✓ 1.46s package-name 65 tests 186 asserts 0 fail`
257
+ - Status first (✓/✗/?), time second for easy scanning
258
+
259
+ - **Progress Flag**: `--progress` flag enables animated progress bars
260
+ - Enables original animated ANSI display with live progress bars
261
+ - Skips redundant final results table (results shown inline during updates)
262
+ - Preserves same summary format and exit codes
263
+
264
+ - **DisplayHelpers Module**: Extracted shared display formatting logic
265
+ - Shared `build_summary_text` and `render_summary` methods
266
+ - Reduces code duplication between display managers
267
+
268
+ - **Exception-based Exit Codes**: Improved CLI error handling
269
+ - Commands now use exception-based exit codes for cleaner control flow
270
+
271
+ ### Changed
272
+ - **Default Display Mode**: Switched from animated to simple output mode
273
+ - Better for CI/CD pipelines, log files, and agent consumption
274
+ - Use `--progress` flag for interactive terminal experience
275
+
276
+ ### Fixed
277
+ - Fixed timestamp generator for new compact ID format
278
+ - Fixed test require paths and fixtures in DisplayHelpersTest
279
+
280
+ ## [0.11.0] - 2026-01-22
281
+
282
+ ### Changed
283
+ - Move testing guides to ace-test package (16 files)
284
+ - Removed .ace-defaults/nav/protocols/guide-sources/ace-test-runner.yml
285
+ - Testing guides now consolidated in ace-test package
286
+
287
+ ## [0.10.6] - 2026-01-22
288
+
289
+ ### Changed
290
+ - Update references to new ace-test package for consolidated testing documentation
291
+
292
+ ### Technical
293
+ - Lower Ruby version requirement to >= 3.2.0
294
+ - Update for ace-bundle integration
295
+
296
+ ## [0.10.5] - 2026-01-16
297
+
298
+ ### Changed
299
+ - Updated package references from ace-context to ace-bundle (task 206)
300
+
301
+ ## [0.10.4] - 2026-01-15
302
+
303
+ ### Changed
304
+ - Migrate CLI commands to Hanami pattern
305
+ - Move `commands/test.rb` to `cli/commands/test.rb`
306
+ - Update namespace from `Commands::Test` to `CLI::Commands::Test`
307
+ - Update test file references for new namespace
308
+
309
+ ## [0.10.3] - 2026-01-09
310
+
311
+ ### Changed
312
+ - **BREAKING**: Eliminate wrapper pattern in dry-cli command
313
+ - Merged business logic directly into `Test` dry-cli command class
314
+ - Deleted `test_command.rb` wrapper file
315
+ - Simplified architecture by removing unnecessary delegation layer
316
+
317
+ ## [0.10.2] - 2026-01-08
318
+
319
+ ### Fixed
320
+ - Improved report path resolution robustness and documentation
321
+ - Use relative paths in Markdown output and cleanup FailedPackageReporter
322
+
323
+ ### Technical
324
+ - Add coverage for FailedPackageReporter relative path fallback
325
+
326
+ ## [0.10.1] - 2026-01-08
327
+
328
+ ### Fixed
329
+ - Fixed broken `guide://` protocol links in handbook guides (added `.g` suffix for `.g.md` files)
330
+ - Fixed relative links from `handbook/guides/testing/` to `docs/testing-patterns.md`
331
+ - Removed placeholder `<rewrite_this>` tags from meta-documentation guide
332
+ - Cleaned up citation artifacts (e.g., `citeturn0search3`, unicode citations) from TDD guides
333
+
334
+ ## [0.10.0] - 2026-01-07
335
+
336
+ ### Changed
337
+ - **BREAKING**: Migrated CLI framework from Thor to dry-cli (task 179.12)
338
+ - Replaced `thor` dependency with `dry-cli ~> 1.0`
339
+ - Created dry-cli command class (test)
340
+ - All tests pass (155 tests, 2 skips for help TTY issues)
341
+
342
+ ## [0.9.0] - 2026-01-07
343
+
344
+ ### Changed
345
+ - **BREAKING**: Test report directories changed from 14-character timestamps to 6-character Base36 compact IDs
346
+ - Example: `20251129-143000/` → `i50jj3/`
347
+ - Reports are temporary, so no backward compatibility needed
348
+ - Migrate TimestampGenerator to use ace-timestamp for Base36 compact IDs
349
+ - Simplified configuration loading using ADR-022 config cascade pattern
350
+
351
+ ### Added
352
+ - Dependency on ace-timestamp for compact ID generation
353
+
354
+ ## [0.8.0] - 2026-01-05
355
+
356
+ ### Added
357
+ - Thor CLI migration with ConfigSummary display
358
+
359
+ ### Changed
360
+ - Adopted Ace::Core::CLI::Base for standardized options
361
+
362
+
363
+ ## [0.7.0] - 2026-01-03
364
+
365
+ ### Changed
366
+ - **BREAKING**: Minimum Ruby version raised to 3.3.0 (was 3.1.0)
367
+ - Standardized gemspec file patterns with deterministic Dir.glob
368
+ - Added MIT LICENSE file
369
+
370
+ ## [0.6.2] - 2026-01-03
371
+
372
+ ### Changed
373
+
374
+ * **Test Performance Optimization**: Reduce test suite execution time by 46% (3.3s → 1.78s)
375
+ * Convert 2 E2E integration tests to use mocked subprocess execution
376
+ * Retain 1 representative E2E test for genuine CLI validation
377
+ * Improve assertions per second from 105 to 194 (85% improvement)
378
+ * Add E2E Coverage Analysis documenting risk mitigation
379
+
380
+ ### Technical
381
+
382
+ * Enhanced code comments explaining E2E test rationale
383
+ * Added performance measurement commands to documentation
384
+ * Documented CI benchmark/regression guard (5s threshold)
385
+
386
+ ## [0.6.1] - 2025-12-30
387
+
388
+ ### Changed
389
+
390
+ * Replace ace-support-core dependency with ace-config for configuration cascade
391
+ * Migrate from Ace::Core to Ace::Config.create() API
392
+
393
+ ## [0.6.0] - 2025-12-30
394
+
395
+ ### Changed
396
+
397
+ * Rename `.ace.example/` to `.ace-defaults/` for gem defaults directory
398
+
399
+
400
+ ## [0.5.0] - 2025-12-29
401
+
402
+ ### Changed
403
+ - Migrate ProjectRootFinder dependency from `Ace::Core::Molecules` to `Ace::Support::Fs::Molecules` for direct ace-support-fs usage
404
+
405
+ ## [0.4.0] - 2025-12-27
406
+
407
+ ### Added
408
+ - **ADR-022 Configuration Pattern**: Migrate configuration to load defaults from `.ace.example/` and merge with user overrides
409
+ - Defaults loaded from `.ace.example/test-runner/config.yml` at runtime
410
+ - User config from `.ace/test/runner.yml` merged over defaults (deep merge)
411
+ - Removed hardcoded defaults from Ruby code
412
+ - New `normalize_config` method for consistent configuration normalization
413
+
414
+ ### Fixed
415
+ - **Test Isolation**: Improved test isolation for config-dependent tests
416
+ - Tests now properly stub configuration loading to avoid interference
417
+ - Better cleanup of configuration state between tests
418
+
419
+ ### Technical
420
+ - Optimized integration tests with stubbing and better config handling
421
+
422
+ ## [0.3.0] - 2025-12-20
423
+
424
+ ### Added
425
+ - **Package Argument Support**: Run tests for any package in the mono-repo from any directory
426
+ - `ace-test ace-context` runs all tests in ace-context package
427
+ - `ace-test ace-nav atoms` runs only atom tests in ace-nav
428
+ - `ace-test ./ace-search` supports relative paths
429
+ - `ace-test /path/to/ace-docs` supports absolute paths
430
+ - `ace-test ace-context/test/foo_test.rb` supports package-prefixed file paths
431
+ - `ace-test ace-context/test/foo_test.rb:42` supports package-prefixed file paths with line numbers
432
+ - Automatically detects and changes to package directory for test execution
433
+ - Restores original directory after test completion
434
+ - New `PackageResolver` atom for package name/path resolution
435
+ - Integration tests for package argument functionality
436
+
437
+ ### Changed
438
+ - CLI help updated with package examples
439
+ - README updated with package argument documentation
440
+
441
+ ## [0.2.1] - 2025-12-13
442
+
443
+ ### Fixed
444
+
445
+ - **File Not Found Error Message**: Improved error message when target file doesn't exist
446
+ - Changed from confusing "Unknown target: <path>" to clear "File not found: <path>"
447
+ - Added helpful guidance: "Make sure you're running from the correct directory or use an absolute path"
448
+ - Distinguishes between file paths (contain "/" or end with ".rb") and unknown target names
449
+ - Location: `lib/ace/test_runner/molecules/pattern_resolver.rb:27-29,76-78`
450
+
451
+ ## [0.2.0] - 2025-11-17
452
+
453
+ ### Fixed
454
+ - **Explicit File Execution**: Fixed ace-test to respect explicit file path arguments and bypass group execution
455
+ - Running `ace-test test/atoms/foo_test.rb` now executes ONLY that file, not configured test groups
456
+ - File arguments always take precedence over group targets
457
+ - Supports single files, multiple files, and file:line syntax
458
+ - Dramatically improves feedback loop during development and debugging
459
+ - Technical: Modified `TestOrchestrator#should_execute_sequentially?` to check for explicit files before entering group execution mode
460
+
461
+ ### Technical
462
+ - Strengthened integration test assertions for explicit file execution
463
+ - Replaced non-deterministic boolean assertions with specific expected values
464
+ - Added explicit target configuration for grouped execution tests
465
+ - Improved test documentation explaining behavior with config cascade
466
+
467
+ ## [0.1.7] - 2025-11-13
468
+
469
+ ### Added
470
+ - **Skipped Test Reporting**: Added comprehensive skipped test reporting to console output and suite summaries
471
+ - Displays count and visual indicators for skipped tests in execution summaries
472
+ - Shows detailed skipped test information including reason when available
473
+ - Includes skipped tests in final statistics with skip percentage
474
+ - Helper methods for status icons and skipped test text formatting
475
+
476
+ ### Changed
477
+ - **Refactoring**: Extracted helper methods for status icons and skipped text handling
478
+ - Consolidated status icon generation into reusable helper methods
479
+ - Improved code organization for test result display formatting
480
+ - Enhanced maintainability of output formatting logic
481
+
482
+ ### Technical
483
+ - Updated documentation references from ace-core to ace-support-core
484
+ - Improved code hygiene based on code review feedback
485
+
486
+ ## [0.1.6] - 2025-11-01
487
+
488
+ ### Changed
489
+
490
+ - **Dependency Migration**: Updated to use renamed infrastructure gems
491
+ - Changed dependency from `ace-core` to `ace-support-core`
492
+ - Changed dependency from `ace-test-support` to `ace-support-test-helpers`
493
+ - Part of ecosystem-wide naming convention alignment for infrastructure gems
494
+
495
+ ## [0.1.5] - 2025-10-08
496
+
497
+ ### Added
498
+
499
+ - **Smoke Test Pattern**: Added support for root-level smoke tests
500
+ - New pattern: `smoke: "test/*_test.rb"` for basic sanity checks
501
+ - Added to `unit` test group as first item
502
+ - Enables discovery of module-level tests (e.g., `core_test.rb`, `nav_test.rb`)
503
+ - Updated documentation and example configurations
504
+
505
+ ## [0.1.4] - 2025-10-08
506
+
507
+ ### Changed
508
+
509
+ - **Test Structure Migration**: Migrated to flat ATOM structure
510
+ - From: `test/ace/test_runner/atoms/`, `test/unit/molecules/`
511
+ - To: `test/atoms/`, `test/molecules/`, `test/models/`
512
+ - Consolidated nested test structures into standard flat organization
513
+ - Updated require paths to match new structure
514
+
515
+ - **Configuration Patterns**: Added support for `commands` and `edge` test patterns
516
+ - `commands: "test/commands/**/*_test.rb"` for CLI command tests
517
+ - `edge: "test/edge/**/*_test.rb"` for edge case tests
518
+ - Updated both global config and example config
519
+
520
+ ## [0.1.3] - 2025-10-08
521
+
522
+ ### Added
523
+
524
+ - **Configuration Cascade**: Integrated ace-core for hierarchical configuration discovery
525
+ - Automatically searches parent directories for `.ace/test/runner.yml`
526
+ - Enables project-wide configuration from repository root
527
+ - Graceful fallback if ace-core is not available
528
+ - Location: `lib/ace/test_runner/molecules/config_loader.rb:6-10,103-114`
529
+
530
+ - **Dual Execution Modes**: New high-level execution mode configuration
531
+ - `execution.mode: grouped` - Run test groups sequentially with headers
532
+ - `execution.mode: all-at-once` - Run all tests together (default, faster)
533
+ - Replaces low-level `sequential_groups_mode` with user-friendly controls
534
+ - Location: `lib/ace/test_runner/models/test_configuration.rb:57-60`
535
+
536
+ - **Group Isolation Control**: New `group_isolation` boolean configuration
537
+ - `true` - Run each group in separate subprocess (slower, better isolation)
538
+ - `false` - Run groups in same process (15.6x faster for simple tests)
539
+ - Only applies when `mode: grouped`
540
+ - Location: `lib/ace/test_runner/models/test_configuration.rb:62-68`
541
+
542
+ ### Fixed
543
+
544
+ - **Boolean Configuration Handling**: Fixed `group_isolation: false` being ignored
545
+ - Previous code used `||` operator which treated `false` as falsy
546
+ - Changed to explicit nil checks to properly handle boolean values
547
+ - Location: `lib/ace/test_runner/models/test_configuration.rb:62-68`
548
+
549
+ - **Test Accumulation in In-Process Mode**: Fixed test count inflation in grouped mode
550
+ - Cleared `Minitest::Runnable.runnables` between groups to prevent re-running previous tests
551
+ - Was showing 90 tests instead of 65 (re-running atoms when executing molecules)
552
+ - Location: `lib/ace/test_runner/molecules/in_process_runner.rb:77-85`
553
+
554
+ - **Grouped Mode Default Target**: Added automatic "all" target when none specified
555
+ - `mode: grouped` without explicit target now defaults to running "all" group
556
+ - Prevents need to always specify target when using grouped mode
557
+ - Location: `lib/ace/test_runner/organisms/test_orchestrator.rb:51-54,263-273`
558
+
559
+ ### Changed
560
+
561
+ - **Configuration Structure**: Simplified execution configuration
562
+ - Old: `sequential_groups_mode: subprocess | in-process`
563
+ - New: `group_isolation: true | false` (clearer intent)
564
+ - Example configs updated in `.ace.example/test-runner/config.yml`
565
+
566
+ - **Formatter Initialization**: Disabled duplicate group headers
567
+ - Set `show_groups: false` to prevent `on_test_complete` from printing headers
568
+ - Avoids duplicate headers when using `SequentialGroupExecutor`
569
+ - Headers now only come from `on_group_start`/`on_group_complete`
570
+ - Location: `lib/ace/test_runner/organisms/test_orchestrator.rb:40-42`
571
+
572
+ ### Known Limitations
573
+
574
+ - **In-Process Mode Progress Dots**: Progress dots only show for first group in grouped in-process mode
575
+ - Subsequent groups show correct test counts and results but no progress dots
576
+ - This is a Minitest::Reporters state management limitation
577
+ - Workaround: Use `group_isolation: true` for full progress output
578
+ - Test results remain 100% accurate
579
+
580
+ ## [0.1.2] - 2025-10-08
581
+
582
+ ### Fixed
583
+
584
+ - **Progress Formatter**: Improved test name pattern matching
585
+ - Updated regex to handle underscores in test names (e.g., `test_create_idea_with_git_commit`)
586
+ - Previously only matched `test_\w+` which stopped at the first underscore
587
+ - Now matches `test_[\w_]+` to capture full test names with multiple underscores
588
+ - Location: `lib/ace/test_runner/formatters/progress_formatter.rb:168`
589
+
590
+ - **Minitest::Reporters Setup**: Fixed reporter initialization timing
591
+ - Moved reporter setup to before loading test files
592
+ - Ensures reporter is configured before Minitest initializes
593
+ - Prevents conflicts with test file initialization
594
+ - Location: `lib/ace/test_runner/molecules/in_process_runner.rb:77-80`
595
+
596
+ ### Changed
597
+
598
+ - Progress formatter now properly handles ANSI-colored output from Minitest::Reporters
599
+ - Improved documentation of regex pattern for test result line matching
600
+
601
+ ## [0.1.1] - 2025-10-08
602
+
603
+ ### Fixed
604
+ - **InProcessRunner Minitest::Reporters initialization**: Fixed `undefined method 'fetch' for StringIO` error
605
+ - Changed `Minitest::Reporters::DefaultReporter.new($stdout)` to use `io:` parameter
606
+ - Fixes error when running tests with direct/in-process execution mode
607
+ - Location: `lib/ace/test_runner/molecules/in_process_runner.rb:208`
608
+
609
+ - **Double test execution**: Fixed tests running twice (once by ace-test, once by Minitest autorun)
610
+ - Preserved `ENV['MT_NO_AUTORUN']` value instead of deleting it in InProcessRunner cleanup
611
+ - Changed main executable to use `exit!` instead of `exit` to skip at_exit handlers
612
+ - Prevents Minitest autorun from executing after ace-test completes
613
+ - Locations:
614
+ - `lib/ace/test_runner/molecules/in_process_runner.rb:30,121-125`
615
+ - `exe/ace-test:299-301`
616
+
617
+ ## [0.1.0] - 2025-10-05
618
+
619
+ Initial release with test execution and reporting capabilities.
620
+
621
+
622
+ ## [0.15.4] - 2026-02-22
623
+
624
+ ### Fixed
625
+ - Stripped duplicate command name prefix from test examples
626
+ - Standardized quiet, verbose, debug option descriptions to canonical strings
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2025 Ace Meta Team
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,42 @@
1
+ <div align="center">
2
+ <h1> ACE - Test Runner </h1>
3
+
4
+ AI-friendly test runner with smart grouping, failure analysis, and persistent reports.
5
+
6
+ <img src="https://raw.githubusercontent.com/cs3b/ace/main/docs/brand/AgenticCodingEnvironment.Logo.XS.jpg" alt="ACE Logo" width="480">
7
+ <br><br>
8
+
9
+ <a href="https://rubygems.org/gems/ace-test-runner"><img alt="Gem Version" src="https://img.shields.io/gem/v/ace-test-runner.svg" /></a>
10
+ <a href="https://www.ruby-lang.org"><img alt="Ruby" src="https://img.shields.io/badge/Ruby-3.2+-CC342D?logo=ruby" /></a>
11
+ <a href="https://opensource.org/licenses/MIT"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-blue.svg" /></a>
12
+
13
+ </div>
14
+
15
+ > Works with: Claude Code, Codex CLI, OpenCode, Gemini CLI, pi-agent, and more.
16
+
17
+ [Getting Started](docs/getting-started.md) | [Usage Guide](docs/usage.md) | [Handbook - Skills, Agents, Templates](docs/handbook.md)
18
+
19
+ ![ace-test-runner demo](docs/demo/ace-test-runner-getting-started.gif)
20
+
21
+ `ace-test-runner` wraps [Minitest](https://github.com/minitest/minitest) with smart grouping, cross-package resolution, and persistent reports so both developers and coding agents can run focused checks quickly, diagnose failures with context, and retain searchable execution history. It handles the execution side of testing; use [ace-test](../ace-test) for planning, review, and suite improvement workflows.
22
+
23
+ ## How It Works
24
+
25
+ 1. Resolve the target package and test scope from a package name, group (`atoms`, `molecules`, `organisms`, `unit`, `integration`, `system`, `all`, `quick`), or direct `file:line` selector.
26
+ 2. Execute the matching tests with failure-oriented output and optional profiling of the slowest cases.
27
+ 3. Persist structured run reports for historical debugging and searchable triage across runs.
28
+
29
+ ## Use Cases
30
+
31
+ **Run package tests from anywhere in the monorepo** - execute [`ace-test [package]`](docs/usage.md) by name without changing directories, keeping outputs consistent across local and CI environments.
32
+
33
+ **Target exactly the scope you need** - run by test groups (`ace-test atoms`, `ace-test molecules`) or direct file/line selectors (`ace-test test/file_test.rb:42`) to focus on the code you are changing.
34
+
35
+ **Speed up triage on broken builds** - use failure-oriented output and persisted reports to locate regressions and continue diagnosis without rerunning broad suites.
36
+
37
+ **Validate the full monorepo before shipping** - run `ace-test-suite` for cross-package execution orchestration that covers every package in one sweep.
38
+
39
+ **Profile slow tests** - run `ace-test molecules --profile 10` to identify the slowest tests and prioritize optimization with [ace-test](../ace-test) performance audit workflows.
40
+
41
+ ---
42
+ [Getting Started](docs/getting-started.md) | [Usage Guide](docs/usage.md) | [Handbook - Skills, Agents, Templates](docs/handbook.md) | Part of [ACE](https://github.com/cs3b/ace)