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.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.ace-defaults/lint/config.yml +5 -0
  3. data/.ace-defaults/lint/kramdown.yml +23 -0
  4. data/.ace-defaults/lint/markdown.yml +16 -0
  5. data/.ace-defaults/lint/ruby.yml +67 -0
  6. data/.ace-defaults/lint/skills.yml +138 -0
  7. data/.ace-defaults/nav/protocols/wfi-sources/ace-lint.yml +11 -0
  8. data/CHANGELOG.md +584 -0
  9. data/LICENSE +21 -0
  10. data/README.md +40 -0
  11. data/Rakefile +14 -0
  12. data/exe/ace-lint +14 -0
  13. data/handbook/skills/as-lint-fix-issue-from/SKILL.md +34 -0
  14. data/handbook/skills/as-lint-process-report/SKILL.md +29 -0
  15. data/handbook/skills/as-lint-run/SKILL.md +27 -0
  16. data/handbook/workflow-instructions/lint/process-report.wf.md +175 -0
  17. data/handbook/workflow-instructions/lint/run.wf.md +145 -0
  18. data/lib/ace/lint/atoms/allowed_tools_validator.rb +100 -0
  19. data/lib/ace/lint/atoms/base_runner.rb +239 -0
  20. data/lib/ace/lint/atoms/comment_validator.rb +63 -0
  21. data/lib/ace/lint/atoms/config_locator.rb +162 -0
  22. data/lib/ace/lint/atoms/frontmatter_extractor.rb +74 -0
  23. data/lib/ace/lint/atoms/kramdown_parser.rb +81 -0
  24. data/lib/ace/lint/atoms/pattern_matcher.rb +96 -0
  25. data/lib/ace/lint/atoms/rubocop_runner.rb +67 -0
  26. data/lib/ace/lint/atoms/skill_schema_loader.rb +83 -0
  27. data/lib/ace/lint/atoms/standardrb_runner.rb +45 -0
  28. data/lib/ace/lint/atoms/type_detector.rb +121 -0
  29. data/lib/ace/lint/atoms/validator_registry.rb +113 -0
  30. data/lib/ace/lint/atoms/yaml_parser.rb +11 -0
  31. data/lib/ace/lint/atoms/yaml_validator.rb +69 -0
  32. data/lib/ace/lint/cli/commands/lint.rb +318 -0
  33. data/lib/ace/lint/cli.rb +25 -0
  34. data/lib/ace/lint/models/lint_result.rb +87 -0
  35. data/lib/ace/lint/models/validation_error.rb +31 -0
  36. data/lib/ace/lint/molecules/frontmatter_validator.rb +131 -0
  37. data/lib/ace/lint/molecules/group_resolver.rb +122 -0
  38. data/lib/ace/lint/molecules/kramdown_formatter.rb +66 -0
  39. data/lib/ace/lint/molecules/markdown_linter.rb +249 -0
  40. data/lib/ace/lint/molecules/offense_deduplicator.rb +65 -0
  41. data/lib/ace/lint/molecules/ruby_linter.rb +205 -0
  42. data/lib/ace/lint/molecules/skill_validator.rb +462 -0
  43. data/lib/ace/lint/molecules/validator_chain.rb +150 -0
  44. data/lib/ace/lint/molecules/yaml_linter.rb +53 -0
  45. data/lib/ace/lint/organisms/lint_doctor.rb +289 -0
  46. data/lib/ace/lint/organisms/lint_orchestrator.rb +294 -0
  47. data/lib/ace/lint/organisms/report_generator.rb +213 -0
  48. data/lib/ace/lint/organisms/result_reporter.rb +130 -0
  49. data/lib/ace/lint/version.rb +7 -0
  50. data/lib/ace/lint.rb +141 -0
  51. 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,5 @@
1
+ # ace-lint general configuration
2
+ # Place this in .ace/lint/config.yml in your project
3
+
4
+ # General ace-lint settings (currently using defaults)
5
+ # Future: enable/disable specific linters, custom rules, etc.
@@ -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