ace-lint 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.
- checksums.yaml +7 -0
- data/.ace-defaults/lint/config.yml +5 -0
- data/.ace-defaults/lint/kramdown.yml +23 -0
- data/.ace-defaults/lint/markdown.yml +16 -0
- data/.ace-defaults/lint/ruby.yml +67 -0
- data/.ace-defaults/lint/skills.yml +138 -0
- data/.ace-defaults/nav/protocols/wfi-sources/ace-lint.yml +11 -0
- data/CHANGELOG.md +584 -0
- data/LICENSE +21 -0
- data/README.md +40 -0
- data/Rakefile +14 -0
- data/exe/ace-lint +14 -0
- data/handbook/skills/as-lint-fix-issue-from/SKILL.md +34 -0
- data/handbook/skills/as-lint-process-report/SKILL.md +29 -0
- data/handbook/skills/as-lint-run/SKILL.md +27 -0
- data/handbook/workflow-instructions/lint/process-report.wf.md +175 -0
- data/handbook/workflow-instructions/lint/run.wf.md +145 -0
- data/lib/ace/lint/atoms/allowed_tools_validator.rb +100 -0
- data/lib/ace/lint/atoms/base_runner.rb +239 -0
- data/lib/ace/lint/atoms/comment_validator.rb +63 -0
- data/lib/ace/lint/atoms/config_locator.rb +162 -0
- data/lib/ace/lint/atoms/frontmatter_extractor.rb +74 -0
- data/lib/ace/lint/atoms/kramdown_parser.rb +81 -0
- data/lib/ace/lint/atoms/pattern_matcher.rb +96 -0
- data/lib/ace/lint/atoms/rubocop_runner.rb +67 -0
- data/lib/ace/lint/atoms/skill_schema_loader.rb +83 -0
- data/lib/ace/lint/atoms/standardrb_runner.rb +45 -0
- data/lib/ace/lint/atoms/type_detector.rb +121 -0
- data/lib/ace/lint/atoms/validator_registry.rb +113 -0
- data/lib/ace/lint/atoms/yaml_parser.rb +11 -0
- data/lib/ace/lint/atoms/yaml_validator.rb +69 -0
- data/lib/ace/lint/cli/commands/lint.rb +318 -0
- data/lib/ace/lint/cli.rb +25 -0
- data/lib/ace/lint/models/lint_result.rb +87 -0
- data/lib/ace/lint/models/validation_error.rb +31 -0
- data/lib/ace/lint/molecules/frontmatter_validator.rb +131 -0
- data/lib/ace/lint/molecules/group_resolver.rb +122 -0
- data/lib/ace/lint/molecules/kramdown_formatter.rb +66 -0
- data/lib/ace/lint/molecules/markdown_linter.rb +249 -0
- data/lib/ace/lint/molecules/offense_deduplicator.rb +65 -0
- data/lib/ace/lint/molecules/ruby_linter.rb +205 -0
- data/lib/ace/lint/molecules/skill_validator.rb +462 -0
- data/lib/ace/lint/molecules/validator_chain.rb +150 -0
- data/lib/ace/lint/molecules/yaml_linter.rb +53 -0
- data/lib/ace/lint/organisms/lint_doctor.rb +289 -0
- data/lib/ace/lint/organisms/lint_orchestrator.rb +294 -0
- data/lib/ace/lint/organisms/report_generator.rb +213 -0
- data/lib/ace/lint/organisms/result_reporter.rb +130 -0
- data/lib/ace/lint/version.rb +7 -0
- data/lib/ace/lint.rb +141 -0
- metadata +248 -0
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,584 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog][1], and this project adheres to [Semantic Versioning][2].
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [0.25.0] - 2026-03-23
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
- Aligned gemspec summary to "Ruby-native" matching README tagline (was "Ruby-only").
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
- Added example output section to `docs/usage.md` showing pass, fail, and doctor diagnostics.
|
|
16
|
+
- Rewrote demo tape with separate named scenes and real package files instead of sandbox fixtures.
|
|
17
|
+
- Re-recorded getting-started demo GIF.
|
|
18
|
+
|
|
19
|
+
## [0.24.3] - 2026-03-23
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
- Refreshed `README.md` to align with the standardized package README layout (quick links, use cases, and canonical skill listing).
|
|
23
|
+
|
|
24
|
+
## [0.24.2] - 2026-03-22
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
- Replaced placeholder commands in `docs/demo/ace-lint-getting-started.tape.yml` with real `ace-lint` getting-started command flow.
|
|
28
|
+
|
|
29
|
+
## [0.24.1] - 2026-03-22
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
- Reused shared `Ace::Core::Molecules::FrontmatterFreePolicy` for frontmatter-free config resolution and glob matching to keep lint behavior aligned with docs discovery.
|
|
33
|
+
|
|
34
|
+
## [0.24.0] - 2026-03-22
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
- Frontmatter-free file exemption in `FrontmatterValidator` — files matching configured `frontmatter_free` patterns (default: `**/README.md`) pass validation without requiring YAML frontmatter.
|
|
38
|
+
|
|
39
|
+
## [0.23.1] - 2026-03-22
|
|
40
|
+
|
|
41
|
+
### Changed
|
|
42
|
+
- Remove `mise exec --` wrapper from test fixture strings.
|
|
43
|
+
|
|
44
|
+
## [0.23.0] - 2026-03-22
|
|
45
|
+
|
|
46
|
+
### Changed
|
|
47
|
+
- Rewrote README into a landing page focused on value, integrations, and doc navigation.
|
|
48
|
+
- Added tutorial and reference docs: `docs/getting-started.md`, `docs/usage.md`, and `docs/handbook.md`.
|
|
49
|
+
- Added demo artifacts under `docs/demo/` and aligned gemspec messaging with the new Ruby-only positioning.
|
|
50
|
+
|
|
51
|
+
## [0.22.1] - 2026-03-21
|
|
52
|
+
|
|
53
|
+
### Fixed
|
|
54
|
+
- Restored malformed YAML in `test/fixtures/invalid.md` so invalid frontmatter coverage still exercises a genuinely broken fixture.
|
|
55
|
+
|
|
56
|
+
## [0.22.0] - 2026-03-18
|
|
57
|
+
|
|
58
|
+
### Changed
|
|
59
|
+
- Refined TS-LINT-001 E2E guidance by separating verifier validation order from explicit checks and clarifying config-routing fixture usage.
|
|
60
|
+
|
|
61
|
+
## [0.21.1] - 2026-03-18
|
|
62
|
+
|
|
63
|
+
### Changed
|
|
64
|
+
- Migrated CLI namespace from `Ace::Core::CLI::*` to `Ace::Support::Cli::*` (ace-support-cli is now the canonical home for CLI infrastructure).
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
## [0.21.0] - 2026-03-18
|
|
68
|
+
|
|
69
|
+
### Changed
|
|
70
|
+
- Removed legacy backward-compatibility behavior as part of the 0.10 cleanup release.
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
## [0.20.4] - 2026-03-15
|
|
74
|
+
|
|
75
|
+
### Changed
|
|
76
|
+
- Migrated CLI framework from dry-cli to ace-support-cli
|
|
77
|
+
|
|
78
|
+
## [0.20.3] - 2026-03-13
|
|
79
|
+
|
|
80
|
+
### Changed
|
|
81
|
+
- Updated canonical lint skills to explicitly run bundled workflows in the current project and execute them end-to-end.
|
|
82
|
+
|
|
83
|
+
### Technical
|
|
84
|
+
- Updated markdown-linter fixture coverage for the new compact canonical skill execution template.
|
|
85
|
+
|
|
86
|
+
## [0.20.2] - 2026-03-13
|
|
87
|
+
|
|
88
|
+
### Changed
|
|
89
|
+
- Removed the Codex-specific delegated execution metadata from the canonical `as-lint-run` skill so provider projections now inherit the canonical skill body unchanged.
|
|
90
|
+
|
|
91
|
+
## [0.20.1] - 2026-03-12
|
|
92
|
+
|
|
93
|
+
### Changed
|
|
94
|
+
- Updated README examples to reference current handbook skill and workflow paths instead of legacy provider-local example locations.
|
|
95
|
+
|
|
96
|
+
## [0.20.0] - 2026-03-12
|
|
97
|
+
|
|
98
|
+
### Added
|
|
99
|
+
- Added Codex-specific delegated execution metadata to the canonical `as-lint-run` skill so the generated Codex skill runs in fork context on `gpt-5.3-codex-spark`.
|
|
100
|
+
|
|
101
|
+
## [0.19.1] - 2026-03-12
|
|
102
|
+
|
|
103
|
+
### Technical
|
|
104
|
+
- Expanded canonical skill validation fixtures to cover provider-specific execution overrides such as `context: fork` and provider model hints under `integration.providers.<provider>.frontmatter`.
|
|
105
|
+
|
|
106
|
+
## [0.19.0] - 2026-03-10
|
|
107
|
+
|
|
108
|
+
### Added
|
|
109
|
+
- Added validation support for `integration.targets` and `integration.providers.<provider>.frontmatter` in canonical skill files.
|
|
110
|
+
|
|
111
|
+
### Changed
|
|
112
|
+
- Expanded canonical skill lint validation to recognize additional ACE CLI prefixes and handbook editing tools used by migrated package skills.
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
## [0.18.1] - 2026-03-10
|
|
116
|
+
|
|
117
|
+
### Fixed
|
|
118
|
+
- Ignored YAML frontmatter when running markdown lint checks so canonical `SKILL.md` metadata no longer triggers false heading/link warnings.
|
|
119
|
+
- Added `ace-idea` to the known Bash prefix allowlist for canonical skill validation.
|
|
120
|
+
|
|
121
|
+
### Technical
|
|
122
|
+
- Added regression coverage for frontmatter-aware markdown linting and real ACE CLI prefix validation.
|
|
123
|
+
|
|
124
|
+
## [0.18.0] - 2026-03-09
|
|
125
|
+
|
|
126
|
+
### Added
|
|
127
|
+
- Canonical SKILL schema validation now requires `skill.kind` and `skill.execution.workflow`.
|
|
128
|
+
- Added nested schema checks for canonical fields and actionable errors for unknown `skill`/`skill.execution` keys.
|
|
129
|
+
|
|
130
|
+
### Changed
|
|
131
|
+
- Skill name validation now accepts canonical `as-*` names in addition to legacy `ace-*`.
|
|
132
|
+
- `known_bash_prefixes` includes `ace-assign` and `ace-b36ts` for canonical skill validation coverage.
|
|
133
|
+
|
|
134
|
+
### Fixed
|
|
135
|
+
- Reject `assign` metadata for `capability` skills and detect duplicate `assign.phases[].name` values.
|
|
136
|
+
- `SkillSchemaLoader` now loads fallback defaults reliably by requiring `date` during YAML safe-load.
|
|
137
|
+
|
|
138
|
+
## [0.17.1] - 2026-03-04
|
|
139
|
+
|
|
140
|
+
### Technical
|
|
141
|
+
- Updated cache cleanup guidance comments to reference `.ace-local/`.
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
## [0.17.0] - 2026-03-04
|
|
145
|
+
|
|
146
|
+
### Changed
|
|
147
|
+
- Default report directory migrated from `.cache/ace-lint` to `.ace-local/lint`
|
|
148
|
+
|
|
149
|
+
## [0.16.1] - 2026-02-23
|
|
150
|
+
|
|
151
|
+
### Changed
|
|
152
|
+
- Renamed YamlParser atom to YamlValidator to reflect its validation purpose
|
|
153
|
+
- Added backward-compatibility alias (YamlParser = YamlValidator)
|
|
154
|
+
|
|
155
|
+
### Technical
|
|
156
|
+
- Updated internal dependency version constraints to current releases
|
|
157
|
+
|
|
158
|
+
## [0.16.0] - 2026-02-23
|
|
159
|
+
|
|
160
|
+
### Changed
|
|
161
|
+
- **BREAKING**: Drop multi-command Registry in favor of single-command CLI pattern (ADR-024)
|
|
162
|
+
- `ace-lint lint file.md` → `ace-lint file.md`
|
|
163
|
+
- `ace-lint doctor` → `ace-lint --doctor`
|
|
164
|
+
- `ace-lint doctor --verbose` → `ace-lint --doctor-verbose`
|
|
165
|
+
- Add `--version`, `--doctor`, `--doctor-verbose` options to main command
|
|
166
|
+
- Delete separate Doctor command class; logic absorbed into Lint command
|
|
167
|
+
|
|
168
|
+
## [0.15.14] - 2026-02-22
|
|
169
|
+
|
|
170
|
+
### Changed
|
|
171
|
+
- Migrate skill naming and invocation references to hyphenated `ace-*` format (no underscores).
|
|
172
|
+
|
|
173
|
+
## [0.15.13] - 2026-02-21
|
|
174
|
+
|
|
175
|
+
### Changed
|
|
176
|
+
- Update skill name validation pattern to colon-free convention (`ace_domain_action` format)
|
|
177
|
+
- Update test fixtures and validator tests for new skill naming convention
|
|
178
|
+
|
|
179
|
+
## [0.15.12] - 2026-02-19
|
|
180
|
+
|
|
181
|
+
### Technical
|
|
182
|
+
- Namespace workflow instructions into lint/ subdirectory with updated wfi:// URIs
|
|
183
|
+
|
|
184
|
+
## [0.15.11] - 2026-02-07
|
|
185
|
+
|
|
186
|
+
### Changed
|
|
187
|
+
- Further consolidate MT-LINT-004 bash blocks (10→7) and remove no-op cleanup block
|
|
188
|
+
|
|
189
|
+
## [0.15.10] - 2026-02-07
|
|
190
|
+
|
|
191
|
+
### Changed
|
|
192
|
+
- Consolidate bash blocks in E2E tests to reduce LLM round-trips and avoid timeouts
|
|
193
|
+
- MT-LINT-002: 21→11 blocks (merge jq queries, verification steps)
|
|
194
|
+
- MT-LINT-004: 17→10 blocks (merge exit code checks, report verification)
|
|
195
|
+
- MT-LINT-007: 10→7 blocks (merge lint calls, config+lint steps)
|
|
196
|
+
|
|
197
|
+
## [0.15.9] - 2026-02-07
|
|
198
|
+
|
|
199
|
+
### Changed
|
|
200
|
+
- Split E2E tests for parallel execution: 5 files (36 cases) → 8 files (31 cases)
|
|
201
|
+
- MT-LINT-001: 8→5 cases (validator overrides extracted to MT-LINT-007)
|
|
202
|
+
- MT-LINT-002: 9→5 cases (markdown reports extracted to MT-LINT-006, --no-report duplicate removed)
|
|
203
|
+
- MT-LINT-004: 7→5 cases (report default and --validators duplicates removed)
|
|
204
|
+
- MT-LINT-005: 8→4 cases (modes/exit codes extracted to MT-LINT-008)
|
|
205
|
+
- Remove 5 duplicate test cases across files (--no-report, --validators override, report generation)
|
|
206
|
+
|
|
207
|
+
### Added
|
|
208
|
+
- MT-LINT-006: Report markdown files (ok.md, fixed.md, pending.md) — 3 cases
|
|
209
|
+
- MT-LINT-007: Validator configuration overrides (CLI, config, group routing) — 3 cases
|
|
210
|
+
- MT-LINT-008: Doctor modes and exit codes (quiet, verbose, healthy, syntax error) — 4 cases
|
|
211
|
+
|
|
212
|
+
## [0.15.8] - 2026-02-07
|
|
213
|
+
|
|
214
|
+
### Fixed
|
|
215
|
+
- Fix single-file `lint()` success inconsistency with `lint_batch()` — convention/warning-only offenses now return `success: true` instead of relying on runner exit status (which exits non-zero for any offense)
|
|
216
|
+
|
|
217
|
+
## [0.15.7] - 2026-02-07
|
|
218
|
+
|
|
219
|
+
### Fixed
|
|
220
|
+
- Fix E2E test MT-LINT-004 TC-002 fixture: use `syntax_error.rb` instead of `style_issues.rb` which only has convention/warning-severity offenses (exit 0)
|
|
221
|
+
- Add clarifying note to MT-LINT-002 TC-009 explaining severity-to-exit-code behavior
|
|
222
|
+
|
|
223
|
+
## [0.15.6] - 2026-02-07
|
|
224
|
+
|
|
225
|
+
### Fixed
|
|
226
|
+
- Fix `formatted` flag in RubyLinter to reflect actual file changes instead of just the fix option
|
|
227
|
+
- Files are now marked as `formatted: true` only when their content actually changes
|
|
228
|
+
- Previously, all files processed with `--fix` were incorrectly marked as formatted
|
|
229
|
+
- E2E test improvements: fixed path extraction (`tr -d '/'` → `sed 's|/$||'`), added explicit PASS/FAIL echoes for weaker models
|
|
230
|
+
- TC-002 in MT-LINT-004 now uses `style_issues.rb` instead of `invalid.md` (which only had warnings)
|
|
231
|
+
|
|
232
|
+
## [0.15.5] - 2026-02-07
|
|
233
|
+
|
|
234
|
+
### Fixed
|
|
235
|
+
|
|
236
|
+
- Update E2E tests (MT-LINT-001 through MT-LINT-005) with verified results and improved test cases
|
|
237
|
+
- TC-002: Test fix mode instead of lint-only for style issues
|
|
238
|
+
- TC-005: Test fix mode categorization with passed/fixed results
|
|
239
|
+
- TC-008: Use syntax error file for pending.md testing (unfixable errors)
|
|
240
|
+
- MT-LINT-004: Simplify invalid markdown fixture, remove unsupported TC-005 (--output flag)
|
|
241
|
+
- MT-LINT-005: Fix invalid config fixtures with proper git init and file paths
|
|
242
|
+
|
|
243
|
+
## [0.15.4] - 2026-02-07
|
|
244
|
+
|
|
245
|
+
### Fixed
|
|
246
|
+
- Ensure help commands exit with status 0
|
|
247
|
+
- Migrate CLI and doctor integration tests to E2E, optimize with subprocess stubs
|
|
248
|
+
|
|
249
|
+
## [0.15.3] - 2026-01-31
|
|
250
|
+
|
|
251
|
+
### Fixed
|
|
252
|
+
- Eliminate random slow tests by pre-warming availability caches and ensuring all tests stub availability checks
|
|
253
|
+
- Moved cache resets from test setup into stub helper methods
|
|
254
|
+
- Added dual-runner cache pre-population in stub helpers
|
|
255
|
+
- Added `available?` stubs to tests that only stubbed `:run`
|
|
256
|
+
- Test suite now consistently runs in ~60-70ms (previously varied 60ms-1.6s randomly)
|
|
257
|
+
|
|
258
|
+
## [0.15.2] - 2026-01-31
|
|
259
|
+
|
|
260
|
+
### Performance
|
|
261
|
+
- Stub subprocess calls in slow tests to avoid real system() calls (task 251)
|
|
262
|
+
- Tests now stub `available?` method instead of running real `rubocop --version` etc.
|
|
263
|
+
- Test suite time reduced from ~2.1s to ~69ms
|
|
264
|
+
- Affected tests: `standardrb_runner_test.rb`, `rubocop_runner_test.rb`, `validator_registry_test.rb`, `lint_doctor_test.rb`
|
|
265
|
+
|
|
266
|
+
## [0.15.1] - 2026-01-31
|
|
267
|
+
|
|
268
|
+
### Performance
|
|
269
|
+
- Moved CLI integration tests to E2E test suite (task 251.03)
|
|
270
|
+
- Created `test/e2e/MT-LINT-004-cli-exit-codes.mt.md` for CLI behavior tests
|
|
271
|
+
- Created `test/e2e/MT-LINT-005-doctor-command.mt.md` for doctor command tests
|
|
272
|
+
- Removed `test/integration/cli_integration_test.rb` (7 tests)
|
|
273
|
+
- Removed `test/integration/doctor_integration_test.rb` (8 tests)
|
|
274
|
+
- Tests now run via `/ace:run-e2e-test ace-lint MT-LINT-004` and `MT-LINT-005`
|
|
275
|
+
- Existing atom/molecule tests already use Open3 mocks (no additional mocking needed)
|
|
276
|
+
|
|
277
|
+
## [0.14.0] - 2026-01-22
|
|
278
|
+
|
|
279
|
+
### Added
|
|
280
|
+
- Typography validation for markdown files (task 218.10)
|
|
281
|
+
- Detects em-dash characters (—) with suggestion to use double hyphens (--)
|
|
282
|
+
- Detects smart quotes (", ", ', ') with suggestion to use ASCII quotes
|
|
283
|
+
- Skips content inside fenced code blocks and inline code spans
|
|
284
|
+
- Configurable severity levels (error/warn/off) in `.ace/lint/markdown.yml`
|
|
285
|
+
- New `markdown_config` method following ADR-022 configuration cascade pattern
|
|
286
|
+
- Default configuration in `.ace-defaults/lint/markdown.yml`
|
|
287
|
+
|
|
288
|
+
## [0.13.0] - 2026-01-22
|
|
289
|
+
|
|
290
|
+
### Added
|
|
291
|
+
- Skill, workflow, and agent file validation (task 226)
|
|
292
|
+
- New `SkillSchemaLoader` atom for loading validation schemas from YAML
|
|
293
|
+
- New `AllowedToolsValidator` atom for validating tool declarations against known Claude tools
|
|
294
|
+
- New `CommentValidator` atom for verifying HTML-style markdown comment structure
|
|
295
|
+
- New `SkillValidator` molecule orchestrating complete skill/workflow/agent validation
|
|
296
|
+
- Extended `TypeDetector` to recognize SKILL.md, *.wf.md, and *.ag.md files
|
|
297
|
+
- Default validation schema in `.ace-defaults/lint/skills.yml`
|
|
298
|
+
- Auto-routing in `LintOrchestrator` for skill/workflow/agent file types
|
|
299
|
+
|
|
300
|
+
### Technical
|
|
301
|
+
- Validation checks: required frontmatter fields, allowed-tools against known tools, comment block structure
|
|
302
|
+
- Support for configurable validation rules per file type (skill, workflow, agent)
|
|
303
|
+
|
|
304
|
+
## [0.12.0] - 2026-01-19
|
|
305
|
+
|
|
306
|
+
### Added
|
|
307
|
+
- Three-file markdown report system for workflow delegation
|
|
308
|
+
- `ok.md` - Lists files that passed with no issues
|
|
309
|
+
- `fixed.md` - Lists files that were auto-fixed (only when --fix used)
|
|
310
|
+
- `pending.md` - Groups issues by file with checkboxes for tracking
|
|
311
|
+
- Report directory output shows generated files with counts
|
|
312
|
+
- JSON report generation with timestamped directories
|
|
313
|
+
|
|
314
|
+
### Changed
|
|
315
|
+
- Report output format now shows directory with file list instead of individual paths
|
|
316
|
+
- Pending issues grouped by file with issue counts for better readability
|
|
317
|
+
|
|
318
|
+
### Fixed
|
|
319
|
+
- Show concise summary when report is generated (suppress per-file output)
|
|
320
|
+
|
|
321
|
+
### Technical
|
|
322
|
+
- Thread-safety improvements to ConfigLocator cache
|
|
323
|
+
- Code style updates with RuboCop modern Ruby syntax
|
|
324
|
+
- Require path and dependency consistency updates
|
|
325
|
+
|
|
326
|
+
## [0.11.0] - 2026-01-18
|
|
327
|
+
|
|
328
|
+
### Added
|
|
329
|
+
- Multi-validator architecture for running multiple linters per file type (task 215.03)
|
|
330
|
+
- New `PatternMatcher` atom for glob pattern matching with specificity scoring
|
|
331
|
+
- New `ValidatorRegistry` atom for mapping tool names to runner classes
|
|
332
|
+
- New `ConfigLocator` atom for config file resolution with precedence rules
|
|
333
|
+
- New `GroupResolver` molecule for pattern-based validator group resolution
|
|
334
|
+
- New `ValidatorChain` molecule for executing multiple validators with deduplication
|
|
335
|
+
- New `LintDoctor` organism for configuration health diagnostics
|
|
336
|
+
- New `ace-lint doctor` CLI command for checking configuration health
|
|
337
|
+
- New `--validators` CLI flag for specifying validators (e.g., `--validators standardrb,rubocop`)
|
|
338
|
+
- Pattern-based groups configuration in `ruby.yml` for different validators per file pattern
|
|
339
|
+
- Result deduplication when running multiple validators on same files
|
|
340
|
+
|
|
341
|
+
### Changed
|
|
342
|
+
- Updated `RubyLinter` to support ValidatorChain for multi-validator execution
|
|
343
|
+
- Updated `LintOrchestrator` with group-aware routing for Ruby files
|
|
344
|
+
- Updated `ruby.yml` configuration schema with groups-based validator configuration
|
|
345
|
+
|
|
346
|
+
## [0.10.0] - 2026-01-17
|
|
347
|
+
|
|
348
|
+
### Added
|
|
349
|
+
- RuboCop fallback support for Ruby linting when StandardRB is unavailable (task 216)
|
|
350
|
+
- Automatic tool detection: tries StandardRB first, falls back to RuboCop
|
|
351
|
+
- New `RuboCopRunner` atom mirroring `StandardrbRunner` interface
|
|
352
|
+
- Updated `RubyLinter` molecule with fallback logic
|
|
353
|
+
- Minimal `.rubocop.yml` configuration in `.ace-defaults/lint/`
|
|
354
|
+
- Clear error messages when neither tool is installed
|
|
355
|
+
|
|
356
|
+
### Changed
|
|
357
|
+
- Updated README with Ruby linting fallback documentation
|
|
358
|
+
- Documented StandardRB as preferred (zero-config) option
|
|
359
|
+
- Documented RuboCop as automatic fallback
|
|
360
|
+
- Added troubleshooting section for "No Ruby linter available" message
|
|
361
|
+
- Updated `.ace-defaults/lint/ruby.yml` with `fallback_linter: rubocop` configuration
|
|
362
|
+
|
|
363
|
+
## [0.9.1] - 2026-01-16
|
|
364
|
+
|
|
365
|
+
### Changed
|
|
366
|
+
- Rename context: to bundle: keys in configuration files (task 206)
|
|
367
|
+
|
|
368
|
+
## [0.9.0] - 2026-01-15
|
|
369
|
+
|
|
370
|
+
### Added
|
|
371
|
+
- Ruby file linting support using StandardRB (task 215)
|
|
372
|
+
- Auto-detects .rb, .rake, and .gemspec files
|
|
373
|
+
- Supports --fix flag for auto-formatting with StandardRB
|
|
374
|
+
- Helpful error message when StandardRB is not installed
|
|
375
|
+
- Configuration in `.ace-defaults/lint/ruby.yml` following ADR-022 pattern
|
|
376
|
+
|
|
377
|
+
### Changed
|
|
378
|
+
- Skip unsupported file types instead of reporting errors
|
|
379
|
+
- Added `skipped` status to LintResult model
|
|
380
|
+
- Updated ResultReporter to display skipped files with ⊘ symbol
|
|
381
|
+
- Unknown file types are now gracefully skipped with summary count
|
|
382
|
+
- Renamed ace-config dependency to ace-support-config
|
|
383
|
+
|
|
384
|
+
### Technical
|
|
385
|
+
- Migrated CLI to Hanami pattern (task 213)
|
|
386
|
+
- Eliminated wrapper pattern in CLI command
|
|
387
|
+
|
|
388
|
+
## [0.8.1] - 2026-01-09
|
|
389
|
+
|
|
390
|
+
### Changed
|
|
391
|
+
- **BREAKING**: Eliminate wrapper pattern in dry-cli command
|
|
392
|
+
- Merged business logic directly into `Lint` dry-cli command class
|
|
393
|
+
- Deleted `lint_command.rb` wrapper file
|
|
394
|
+
- Simplified architecture by removing unnecessary delegation layer
|
|
395
|
+
|
|
396
|
+
## [0.8.0] - 2026-01-07
|
|
397
|
+
|
|
398
|
+
### Changed
|
|
399
|
+
- **BREAKING**: Migrated CLI framework from Thor to dry-cli (task 179.03)
|
|
400
|
+
- Replaced `thor` dependency with `dry-cli ~> 1.0`
|
|
401
|
+
- User-facing command interface remains identical
|
|
402
|
+
- All options and behavior preserved
|
|
403
|
+
- Improved internal command structure and testability
|
|
404
|
+
|
|
405
|
+
## [0.7.0] - 2026-01-05
|
|
406
|
+
|
|
407
|
+
### Added
|
|
408
|
+
- Thor CLI migration with ConfigSummary display
|
|
409
|
+
|
|
410
|
+
### Changed
|
|
411
|
+
- Adopted Ace::Core::CLI::Base for standardized options
|
|
412
|
+
|
|
413
|
+
|
|
414
|
+
## [0.6.0] - 2026-01-03
|
|
415
|
+
|
|
416
|
+
### Changed
|
|
417
|
+
- **BREAKING**: Minimum Ruby version raised to 3.3.0 (was 3.1.0)
|
|
418
|
+
- Standardized gemspec file patterns with deterministic Dir.glob
|
|
419
|
+
- Added MIT LICENSE file
|
|
420
|
+
|
|
421
|
+
## [0.5.1] - 2025-12-30
|
|
422
|
+
|
|
423
|
+
### Changed
|
|
424
|
+
|
|
425
|
+
- Replace ace-support-core dependency with ace-config for configuration cascade
|
|
426
|
+
- Migrate from Ace::Core to Ace::Support::Config.create() API
|
|
427
|
+
- Migrate from `resolve_for` to `resolve_namespace` for cleaner config loading
|
|
428
|
+
|
|
429
|
+
## [0.5.0] - 2025-12-30
|
|
430
|
+
|
|
431
|
+
### Changed
|
|
432
|
+
|
|
433
|
+
* Rename `.ace.example/` to `.ace-defaults/` for gem defaults directory
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
## [0.4.0] - 2025-12-28
|
|
437
|
+
|
|
438
|
+
### Added
|
|
439
|
+
- **ADR-022 Configuration Pattern**: Migrate to gem defaults from `.ace.example/` with user override support
|
|
440
|
+
- Load defaults from `.ace.example/lint/config.yml` and `.ace.example/lint/kramdown.yml` at runtime
|
|
441
|
+
- Deep merge with user config via ace-core cascade
|
|
442
|
+
- Follows "gem defaults < user config" priority
|
|
443
|
+
|
|
444
|
+
## [0.3.3] - 2025-11-16
|
|
445
|
+
|
|
446
|
+
### Changed
|
|
447
|
+
|
|
448
|
+
- **Dependency Update**: Updated ace-support-core dependency from `~> 0.9` to `~> 0.11`
|
|
449
|
+
- Ensures compatibility with latest PromptCacheManager features
|
|
450
|
+
- Aligns with standardized dependency versions across ACE ecosystem
|
|
451
|
+
|
|
452
|
+
## [0.3.2] - 2025-11-11
|
|
453
|
+
|
|
454
|
+
### Fixed
|
|
455
|
+
- Address code review feedback on documentation and hygiene
|
|
456
|
+
- Fix test discovery and execution issues with ace-test integration
|
|
457
|
+
|
|
458
|
+
### Changed
|
|
459
|
+
- Update test structure to work with ace-test smoke pattern
|
|
460
|
+
- Rename ace-core and ace-test-support dependencies
|
|
461
|
+
|
|
462
|
+
## 0.3.0 - 2025-10-13
|
|
463
|
+
|
|
464
|
+
### Changed
|
|
465
|
+
|
|
466
|
+
* **BREAKING**: Configuration structure changed to support multiple tool configs
|
|
467
|
+
- General config: `.ace/lint/config.yml`
|
|
468
|
+
- Kramdown config: `.ace/lint/kramdown.yml` (flat structure, no nesting)
|
|
469
|
+
- Future tool configs: `.ace/lint/yaml.yml`, etc.
|
|
470
|
+
* **BREAKING**: Removed custom ConfigLoader - now uses ace-core config cascade
|
|
471
|
+
* Configuration loaded via `Ace::Core.config.get('ace', 'lint', 'kramdown')`
|
|
472
|
+
* README updated with comprehensive configuration documentation
|
|
473
|
+
* Removed invented CONFIGURATION.md file (not used by other ace-* gems)
|
|
474
|
+
|
|
475
|
+
### Added
|
|
476
|
+
|
|
477
|
+
* Added ace-core dependency (~> 0.9) for config management
|
|
478
|
+
* Added `Ace::Lint.kramdown_config` method for tool-specific config
|
|
479
|
+
* Configuration examples in `.ace.example/lint/` directory
|
|
480
|
+
* Documentation for multi-tool config pattern
|
|
481
|
+
|
|
482
|
+
### Fixed
|
|
483
|
+
|
|
484
|
+
* Config loading now follows standard ace-* gem patterns
|
|
485
|
+
* No more hardcoded config file paths
|
|
486
|
+
* Proper config cascade: defaults → user home → project → CLI options
|
|
487
|
+
|
|
488
|
+
## 0.2.0 - 2025-10-13
|
|
489
|
+
|
|
490
|
+
### Changed
|
|
491
|
+
|
|
492
|
+
* **BREAKING**: Configuration moved from `.ace-lint.yml` to `.ace/lint/kramdown.yml`
|
|
493
|
+
* ConfigLoader now follows ace-* pattern with standard `.ace/` directory structure
|
|
494
|
+
* Configuration is now explicit - users see and edit kramdown settings directly
|
|
495
|
+
* All kramdown options now visible in config file (no hidden defaults)
|
|
496
|
+
|
|
497
|
+
### Added
|
|
498
|
+
|
|
499
|
+
* Configuration cascade: `.ace/lint/kramdown.yml` (project) → `~/.ace/lint/kramdown.yml` (user)
|
|
500
|
+
* Full kramdown configuration support in `.ace/lint/kramdown.yml`
|
|
501
|
+
* Updated CONFIGURATION.md with proper ace-* patterns and examples
|
|
502
|
+
|
|
503
|
+
### Fixed
|
|
504
|
+
|
|
505
|
+
* Removed `.ace-lint.yml` files (wrong location)
|
|
506
|
+
* Config now follows same pattern as other ace-* gems (e.g., `.ace/llm/providers/*.yml`)
|
|
507
|
+
|
|
508
|
+
## 0.1.3 - 2025-10-13
|
|
509
|
+
|
|
510
|
+
### Fixed
|
|
511
|
+
|
|
512
|
+
* Corrected kramdown warning handling - warnings are strings, not hashes
|
|
513
|
+
* Fixed parsing error that occurred with some markdown documents
|
|
514
|
+
* All kramdown warnings are now properly displayed as informational messages
|
|
515
|
+
|
|
516
|
+
## 0.1.2 - 2025-10-13
|
|
517
|
+
|
|
518
|
+
### Added
|
|
519
|
+
|
|
520
|
+
* Added markdown style checks with warnings for common issues:
|
|
521
|
+
* Missing blank line after headings
|
|
522
|
+
* Missing blank line before/after lists
|
|
523
|
+
* Missing blank line before/after code blocks
|
|
524
|
+
* Warnings are displayed but don't fail validation (only errors fail)
|
|
525
|
+
|
|
526
|
+
### Changed
|
|
527
|
+
|
|
528
|
+
* Made `lint` the default command - can now use `ace-lint file.md` instead of `ace-lint lint file.md`
|
|
529
|
+
* Commands `version` and `help` still work as before
|
|
530
|
+
|
|
531
|
+
## [0.3.1] - 2025-11-01
|
|
532
|
+
|
|
533
|
+
### Changed
|
|
534
|
+
|
|
535
|
+
- **Dependency Migration**: Updated to use renamed infrastructure gems
|
|
536
|
+
- Changed dependency from `ace-core` to `ace-support-core`
|
|
537
|
+
- Part of ecosystem-wide naming convention alignment for infrastructure gems
|
|
538
|
+
|
|
539
|
+
## [0.1.1] - 2025-10-13
|
|
540
|
+
|
|
541
|
+
### Fixed
|
|
542
|
+
|
|
543
|
+
* Fixed binstub availability by adding ace-lint to root Gemfile
|
|
544
|
+
* Committed all gem files to git so gemspec can detect executables
|
|
545
|
+
* ace-lint command now available in workspace after bundle install
|
|
546
|
+
|
|
547
|
+
## [0.1.0][4] - 2025-10-13
|
|
548
|
+
|
|
549
|
+
### Added
|
|
550
|
+
|
|
551
|
+
* Initial release of ace-lint standalone gem
|
|
552
|
+
* Ruby-only linting stack (kramdown + Psych, no Node.js or Python)
|
|
553
|
+
* Markdown validation via kramdown with GitHub Flavored Markdown support
|
|
554
|
+
* YAML validation via Psych (Ruby built-in)
|
|
555
|
+
* Frontmatter validation with schema checking
|
|
556
|
+
* Auto-fix/format support with kramdown formatter
|
|
557
|
+
* Colorized terminal output (green ✓, red ✗, yellow ⚠)
|
|
558
|
+
* CLI interface with Thor (`ace-lint lint [FILES] [OPTIONS]`)
|
|
559
|
+
* Command options: --fix, --format, --type, --quiet, --line-width
|
|
560
|
+
* Proper exit codes (0 = success, 1 = failures) for CI/CD integration
|
|
561
|
+
* Subprocess-callable interface for other ace-\* gems
|
|
562
|
+
* ATOM architecture (atoms, molecules, organisms, models, commands)
|
|
563
|
+
* Comprehensive README with usage examples and integration patterns
|
|
564
|
+
* Test fixtures for validation testing
|
|
565
|
+
|
|
566
|
+
### Technical Details
|
|
567
|
+
|
|
568
|
+
* Dependencies: kramdown ~> 2.4, kramdown-parser-gfm ~> 1.1, thor ~> 1.3, colorize ~> 1.1
|
|
569
|
+
* Ruby version requirement: >= 3.1.0
|
|
570
|
+
* Follows ace-\* gem conventions and ATOM pattern
|
|
571
|
+
* RuboCop compliant with auto-corrections applied
|
|
572
|
+
|
|
573
|
+
|
|
574
|
+
|
|
575
|
+
[1]: https://keepachangelog.com/en/1.0.0/
|
|
576
|
+
[2]: https://semver.org/spec/v2.0.0.html
|
|
577
|
+
[3]: https://github.com/your-org/ace-lint/compare/v0.1.0...v0.1.1
|
|
578
|
+
[4]: https://github.com/your-org/ace-lint/releases/tag/v0.1.0
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
## [0.15.15] - 2026-02-22
|
|
582
|
+
|
|
583
|
+
### Fixed
|
|
584
|
+
- Standardized quiet, verbose, debug option descriptions to canonical strings
|
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Michal Czyz
|
|
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 all
|
|
13
|
+
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 THE
|
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<h1> ACE - Lint </h1>
|
|
3
|
+
|
|
4
|
+
Ruby-native linting for markdown, YAML, and Ruby with no Node.js or Python runtime required.
|
|
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-lint"><img alt="Gem Version" src="https://img.shields.io/gem/v/ace-lint.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-lint` gives developers and coding agents a single Ruby-first lint command that validates docs and code, applies safe auto-fixes, and keeps behavior predictable through config cascade defaults. It covers markdown, YAML, Ruby, and frontmatter without requiring Node.js or Python tooling.
|
|
22
|
+
|
|
23
|
+
## How It Works
|
|
24
|
+
|
|
25
|
+
1. Run lint checks across markdown, YAML, Ruby, and frontmatter validators in one pass.
|
|
26
|
+
2. Apply safe auto-fixes with `--fix` for markdown and Ruby style issues.
|
|
27
|
+
3. Report results with colorized pass/fail output, using configuration cascade from CLI flags through project and user defaults.
|
|
28
|
+
|
|
29
|
+
## Use Cases
|
|
30
|
+
|
|
31
|
+
**Validate markdown, YAML, and Ruby in one pass** - run [`ace-lint`](docs/usage.md) for doc and code lint checks without mixing Node/Python tooling into Ruby projects. Use `/as-lint-run` for the full agent-driven lint workflow.
|
|
32
|
+
|
|
33
|
+
**Apply low-risk formatting fixes before review** - use `--fix` to automatically clean markdown and Ruby style issues prior to manual review. Run `/as-lint-fix-issue-from` to fix specific issues identified in lint reports.
|
|
34
|
+
|
|
35
|
+
**Standardize lint behavior across teams and repos** - rely on user/project/default cascade settings from [ace-support-config](../ace-support-config) for consistent validator sets and output modes.
|
|
36
|
+
|
|
37
|
+
**Process and act on lint reports** - use `/as-lint-process-report` to analyze lint output and coordinate fixes, pairing with [ace-docs](../ace-docs) for documentation maintenance workflows that complement lint validation.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
[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)
|
data/Rakefile
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bundler/gem_tasks"
|
|
4
|
+
require "minitest/test_task"
|
|
5
|
+
|
|
6
|
+
desc "Run tests using ace-test"
|
|
7
|
+
task :test do
|
|
8
|
+
sh "ace-test"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
desc "Run tests directly (CI mode)"
|
|
12
|
+
Minitest::TestTask.create(:ci)
|
|
13
|
+
|
|
14
|
+
task default: :test
|
data/exe/ace-lint
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require_relative "../lib/ace/lint"
|
|
5
|
+
require "ace/support/cli"
|
|
6
|
+
|
|
7
|
+
args = ARGV.empty? ? ["--help"] : ARGV
|
|
8
|
+
|
|
9
|
+
begin
|
|
10
|
+
Ace::Support::Cli::Runner.new(Ace::Lint::CLI::Commands::Lint).call(args: args)
|
|
11
|
+
rescue Ace::Support::Cli::Error => e
|
|
12
|
+
warn e.message
|
|
13
|
+
exit(e.exit_code)
|
|
14
|
+
end
|