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.
- checksums.yaml +7 -0
- data/.ace-defaults/test/runner.yml +35 -0
- data/.ace-defaults/test/suite.yml +31 -0
- data/.ace-defaults/test-runner/config.yml +61 -0
- data/CHANGELOG.md +626 -0
- data/LICENSE +21 -0
- data/README.md +42 -0
- data/Rakefile +14 -0
- data/exe/ace-test +26 -0
- data/exe/ace-test-suite +149 -0
- data/lib/ace/test_runner/atoms/command_builder.rb +165 -0
- data/lib/ace/test_runner/atoms/lazy_loader.rb +62 -0
- data/lib/ace/test_runner/atoms/line_number_resolver.rb +86 -0
- data/lib/ace/test_runner/atoms/report_directory_resolver.rb +48 -0
- data/lib/ace/test_runner/atoms/report_path_resolver.rb +67 -0
- data/lib/ace/test_runner/atoms/result_parser.rb +254 -0
- data/lib/ace/test_runner/atoms/test_detector.rb +114 -0
- data/lib/ace/test_runner/atoms/test_folder_detector.rb +53 -0
- data/lib/ace/test_runner/atoms/test_type_detector.rb +83 -0
- data/lib/ace/test_runner/atoms/timestamp_generator.rb +103 -0
- data/lib/ace/test_runner/cli/commands/test.rb +326 -0
- data/lib/ace/test_runner/cli.rb +16 -0
- data/lib/ace/test_runner/formatters/base_formatter.rb +102 -0
- data/lib/ace/test_runner/formatters/json_formatter.rb +90 -0
- data/lib/ace/test_runner/formatters/markdown_formatter.rb +91 -0
- data/lib/ace/test_runner/formatters/progress_file_formatter.rb +164 -0
- data/lib/ace/test_runner/formatters/progress_formatter.rb +328 -0
- data/lib/ace/test_runner/models/test_configuration.rb +165 -0
- data/lib/ace/test_runner/models/test_failure.rb +95 -0
- data/lib/ace/test_runner/models/test_group.rb +105 -0
- data/lib/ace/test_runner/models/test_report.rb +145 -0
- data/lib/ace/test_runner/models/test_result.rb +86 -0
- data/lib/ace/test_runner/molecules/cli_argument_parser.rb +263 -0
- data/lib/ace/test_runner/molecules/config_loader.rb +162 -0
- data/lib/ace/test_runner/molecules/deprecation_fixer.rb +204 -0
- data/lib/ace/test_runner/molecules/failed_package_reporter.rb +100 -0
- data/lib/ace/test_runner/molecules/failure_analyzer.rb +249 -0
- data/lib/ace/test_runner/molecules/in_process_runner.rb +249 -0
- data/lib/ace/test_runner/molecules/package_resolver.rb +106 -0
- data/lib/ace/test_runner/molecules/pattern_resolver.rb +146 -0
- data/lib/ace/test_runner/molecules/rake_integration.rb +218 -0
- data/lib/ace/test_runner/molecules/report_storage.rb +303 -0
- data/lib/ace/test_runner/molecules/smart_test_executor.rb +107 -0
- data/lib/ace/test_runner/molecules/test_executor.rb +162 -0
- data/lib/ace/test_runner/organisms/agent_reporter.rb +384 -0
- data/lib/ace/test_runner/organisms/report_generator.rb +151 -0
- data/lib/ace/test_runner/organisms/sequential_group_executor.rb +185 -0
- data/lib/ace/test_runner/organisms/test_orchestrator.rb +648 -0
- data/lib/ace/test_runner/rake_task.rb +90 -0
- data/lib/ace/test_runner/suite/display_helpers.rb +117 -0
- data/lib/ace/test_runner/suite/display_manager.rb +204 -0
- data/lib/ace/test_runner/suite/duration_estimator.rb +50 -0
- data/lib/ace/test_runner/suite/orchestrator.rb +120 -0
- data/lib/ace/test_runner/suite/process_monitor.rb +268 -0
- data/lib/ace/test_runner/suite/result_aggregator.rb +176 -0
- data/lib/ace/test_runner/suite/simple_display_manager.rb +122 -0
- data/lib/ace/test_runner/suite.rb +22 -0
- data/lib/ace/test_runner/version.rb +7 -0
- data/lib/ace/test_runner.rb +69 -0
- 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
|
+

|
|
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)
|