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
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 3b28e15301bd4cac4a828be1dbe5a7c13bb09dc8014d0f0d803fcd53fe0e7e88
|
|
4
|
+
data.tar.gz: 8f8fe4b4948fd41aa12af6588a4a6e90a1a6eaa357208aaab54f997ebfbd69f1
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 24cf2c6f78e9df0663cab9c9f073d4e1ab07d9206146b38d8c579b7874d285f07423b5d38602b6dafa683b957866f2f04a79be91dccac8cbcf6c67054c9fe0a5
|
|
7
|
+
data.tar.gz: e72a57f50f8fa8ef5a9ed5593134c4c72aa29119c66023596d50b573edd6bf44ca88cbfa5c7fba76f6f0b967476cd2ff3050b3548fbc09a4cac1a9d53bd44e48
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Kramdown configuration for ace-lint
|
|
2
|
+
# Place this in .ace/lint/kramdown.yml in your project
|
|
3
|
+
# Documentation: https://kramdown.gettalong.org/options.html
|
|
4
|
+
|
|
5
|
+
# Parser input format (GFM = GitHub Flavored Markdown)
|
|
6
|
+
input: GFM
|
|
7
|
+
|
|
8
|
+
# Line width for formatting (--fix, --format commands)
|
|
9
|
+
line_width: 120
|
|
10
|
+
|
|
11
|
+
# Generate anchor IDs for headings
|
|
12
|
+
# Set to false for clean markdown without {#anchor-id} tags
|
|
13
|
+
auto_ids: false
|
|
14
|
+
|
|
15
|
+
# Hard wrap lines at line_width
|
|
16
|
+
# Set to false for soft wrapping (recommended)
|
|
17
|
+
hard_wrap: false
|
|
18
|
+
|
|
19
|
+
# Parse block-level HTML tags
|
|
20
|
+
parse_block_html: true
|
|
21
|
+
|
|
22
|
+
# Parse span-level HTML tags
|
|
23
|
+
parse_span_html: true
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Markdown linting configuration for ace-lint
|
|
2
|
+
# Follows ADR-022 configuration pattern
|
|
3
|
+
#
|
|
4
|
+
# Typography settings control detection of problematic characters
|
|
5
|
+
# that should typically be replaced with ASCII equivalents.
|
|
6
|
+
|
|
7
|
+
typography:
|
|
8
|
+
# Em-dash character (—) detection
|
|
9
|
+
# Typically should be replaced with double hyphens (--)
|
|
10
|
+
# Values: error | warn | off
|
|
11
|
+
em_dash: warn
|
|
12
|
+
|
|
13
|
+
# Smart quote detection (", ", ', ')
|
|
14
|
+
# Typically should be replaced with ASCII quotes (" and ')
|
|
15
|
+
# Values: error | warn | off
|
|
16
|
+
smart_quotes: warn
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Ruby linting configuration for ace-lint
|
|
2
|
+
# Follows ADR-022 configuration pattern
|
|
3
|
+
#
|
|
4
|
+
# MULTI-VALIDATOR ARCHITECTURE (v0.10+)
|
|
5
|
+
# =====================================
|
|
6
|
+
# Configure different validators for different file patterns using groups.
|
|
7
|
+
# Each group has patterns (globs) and validators (ordered list to run).
|
|
8
|
+
#
|
|
9
|
+
# Example custom configuration (.ace/lint/ruby.yml):
|
|
10
|
+
#
|
|
11
|
+
# groups:
|
|
12
|
+
# strict:
|
|
13
|
+
# patterns:
|
|
14
|
+
# - "lib/**/*.rb"
|
|
15
|
+
# - "app/**/*.rb"
|
|
16
|
+
# validators:
|
|
17
|
+
# - standardrb
|
|
18
|
+
# - rubocop
|
|
19
|
+
# tests:
|
|
20
|
+
# patterns:
|
|
21
|
+
# - "test/**/*.rb"
|
|
22
|
+
# - "spec/**/*.rb"
|
|
23
|
+
# validators:
|
|
24
|
+
# - rubocop
|
|
25
|
+
# default:
|
|
26
|
+
# patterns:
|
|
27
|
+
# - "**/*.rb"
|
|
28
|
+
# validators:
|
|
29
|
+
# - standardrb
|
|
30
|
+
# fallback_validators:
|
|
31
|
+
# - rubocop
|
|
32
|
+
#
|
|
33
|
+
# Pattern Specificity:
|
|
34
|
+
# More specific patterns (deeper paths, fewer wildcards) take precedence.
|
|
35
|
+
# The 'default' group catches files not matched by other patterns.
|
|
36
|
+
#
|
|
37
|
+
# CLI Override:
|
|
38
|
+
# Use --validators flag to override group configuration:
|
|
39
|
+
# ace-lint **/*.rb --validators standardrb,rubocop
|
|
40
|
+
|
|
41
|
+
# Ruby linting settings
|
|
42
|
+
ruby:
|
|
43
|
+
# Enable Ruby linting
|
|
44
|
+
enabled: true
|
|
45
|
+
|
|
46
|
+
# Primary linter to use for Ruby files (legacy single-linter mode)
|
|
47
|
+
linter: standardrb
|
|
48
|
+
|
|
49
|
+
# Fallback linter when primary is unavailable (legacy mode)
|
|
50
|
+
fallback_linter: rubocop
|
|
51
|
+
|
|
52
|
+
# Default groups configuration (backward-compatible defaults)
|
|
53
|
+
# Uses StandardRB as primary with RuboCop fallback - same as legacy behavior
|
|
54
|
+
groups:
|
|
55
|
+
default:
|
|
56
|
+
patterns:
|
|
57
|
+
- "**/*.rb"
|
|
58
|
+
validators:
|
|
59
|
+
- standardrb
|
|
60
|
+
fallback_validators:
|
|
61
|
+
- rubocop
|
|
62
|
+
|
|
63
|
+
# StandardRB is intentionally zero-config (preferred)
|
|
64
|
+
# When StandardRB is not installed, RuboCop is used as fallback
|
|
65
|
+
# RuboCop uses .ace-defaults/lint/.rubocop.yml for configuration
|
|
66
|
+
# See: https://github.com/standardrb/standard
|
|
67
|
+
# See: https://docs.rubocop.org/
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Skill validation configuration for ace-lint
|
|
2
|
+
# Follows ADR-022 configuration pattern
|
|
3
|
+
#
|
|
4
|
+
# This configuration defines validation rules for:
|
|
5
|
+
# - SKILL.md files (Claude Code skills)
|
|
6
|
+
# - *.wf.md files (workflow instructions)
|
|
7
|
+
# - *.ag.md files (agent definitions)
|
|
8
|
+
|
|
9
|
+
# Known tool names for allowed-tools validation
|
|
10
|
+
# These are the valid tool names that can appear in allowed-tools frontmatter
|
|
11
|
+
known_tools:
|
|
12
|
+
- Bash
|
|
13
|
+
- Read
|
|
14
|
+
- Edit
|
|
15
|
+
- MultiEdit
|
|
16
|
+
- Write
|
|
17
|
+
- Glob
|
|
18
|
+
- Grep
|
|
19
|
+
- LS
|
|
20
|
+
- WebFetch
|
|
21
|
+
- WebSearch
|
|
22
|
+
- TodoWrite
|
|
23
|
+
- Task
|
|
24
|
+
- NotebookEdit
|
|
25
|
+
- AskUserQuestion
|
|
26
|
+
- Skill
|
|
27
|
+
- EnterPlanMode
|
|
28
|
+
- ExitPlanMode
|
|
29
|
+
- KillShell
|
|
30
|
+
- TaskOutput
|
|
31
|
+
|
|
32
|
+
# Bash pattern prefixes (for Bash(ace-*:*) patterns)
|
|
33
|
+
# When allowed-tools contains "Bash(prefix:*)", the prefix must match one of these
|
|
34
|
+
known_bash_prefixes:
|
|
35
|
+
- ace-assign
|
|
36
|
+
- ace-b36ts
|
|
37
|
+
- ace-bundle
|
|
38
|
+
- ace-demo
|
|
39
|
+
- ace-docs
|
|
40
|
+
- ace-git
|
|
41
|
+
- ace-git-commit
|
|
42
|
+
- ace-git-secrets
|
|
43
|
+
- ace-git-worktree
|
|
44
|
+
- ace-handbook
|
|
45
|
+
- ace-handbook-integration-claude
|
|
46
|
+
- ace-idea
|
|
47
|
+
- ace-lint
|
|
48
|
+
- ace-nav
|
|
49
|
+
- ace-overseer
|
|
50
|
+
- ace-prompt-prep
|
|
51
|
+
- ace-retro
|
|
52
|
+
- ace-review
|
|
53
|
+
- ace-search
|
|
54
|
+
- ace-sim
|
|
55
|
+
- ace-task
|
|
56
|
+
- ace-test
|
|
57
|
+
- ace-test-suite
|
|
58
|
+
- firebase
|
|
59
|
+
- git
|
|
60
|
+
- gh
|
|
61
|
+
- npm
|
|
62
|
+
- npx
|
|
63
|
+
- bundle
|
|
64
|
+
- mise
|
|
65
|
+
- ruby
|
|
66
|
+
|
|
67
|
+
known_integration_providers:
|
|
68
|
+
- claude
|
|
69
|
+
- codex
|
|
70
|
+
- gemini
|
|
71
|
+
- opencode
|
|
72
|
+
- pi
|
|
73
|
+
|
|
74
|
+
# Schema definitions by file type
|
|
75
|
+
schemas:
|
|
76
|
+
skill:
|
|
77
|
+
required_fields:
|
|
78
|
+
- name
|
|
79
|
+
- description
|
|
80
|
+
- user-invocable
|
|
81
|
+
- allowed-tools
|
|
82
|
+
- source
|
|
83
|
+
- skill
|
|
84
|
+
required_nested_fields:
|
|
85
|
+
- skill.kind
|
|
86
|
+
- skill.execution.workflow
|
|
87
|
+
required_comments:
|
|
88
|
+
- "# bundle:"
|
|
89
|
+
- "# agent:"
|
|
90
|
+
field_validations:
|
|
91
|
+
name:
|
|
92
|
+
type: string
|
|
93
|
+
pattern: "^(as|ace)-[a-z0-9-]+$"
|
|
94
|
+
error_message: "name must use lowercase alphanumerics and hyphens, and start with 'as-' or 'ace-'"
|
|
95
|
+
user-invocable:
|
|
96
|
+
type: boolean
|
|
97
|
+
allowed-tools:
|
|
98
|
+
type: array
|
|
99
|
+
validate_tools: true
|
|
100
|
+
source:
|
|
101
|
+
type: string
|
|
102
|
+
skill.kind:
|
|
103
|
+
type: string
|
|
104
|
+
values:
|
|
105
|
+
- capability
|
|
106
|
+
- workflow
|
|
107
|
+
- orchestration
|
|
108
|
+
error_message: "skill.kind must be one of: capability, workflow, orchestration"
|
|
109
|
+
skill.execution.workflow:
|
|
110
|
+
type: string
|
|
111
|
+
pattern: "^wfi://[a-z0-9][a-z0-9/_-]*$"
|
|
112
|
+
error_message: "skill.execution.workflow must use a wfi:// workflow reference"
|
|
113
|
+
|
|
114
|
+
workflow:
|
|
115
|
+
required_fields:
|
|
116
|
+
- name
|
|
117
|
+
- description
|
|
118
|
+
- allowed-tools
|
|
119
|
+
field_validations:
|
|
120
|
+
name:
|
|
121
|
+
type: string
|
|
122
|
+
pattern: "^[a-z][a-z0-9-]*$"
|
|
123
|
+
error_message: "name must be lowercase with hyphens (e.g., 'my-workflow')"
|
|
124
|
+
allowed-tools:
|
|
125
|
+
type: array
|
|
126
|
+
validate_tools: true
|
|
127
|
+
|
|
128
|
+
agent:
|
|
129
|
+
required_fields:
|
|
130
|
+
- name
|
|
131
|
+
- description
|
|
132
|
+
- type
|
|
133
|
+
field_validations:
|
|
134
|
+
type:
|
|
135
|
+
type: string
|
|
136
|
+
values:
|
|
137
|
+
- agent
|
|
138
|
+
error_message: "type must be 'agent'"
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
# WFI Sources Protocol Configuration for ace-lint gem
|
|
3
|
+
name: ace-lint
|
|
4
|
+
type: gem
|
|
5
|
+
description: Lint workflow instructions from ace-lint gem
|
|
6
|
+
priority: 10
|
|
7
|
+
|
|
8
|
+
config:
|
|
9
|
+
relative_path: handbook/workflow-instructions
|
|
10
|
+
pattern: "*.wf.md"
|
|
11
|
+
enabled: true
|