ace-lint 0.27.8 → 0.30.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9e74bfda1a84df50fdd2c9a49fa26853e7f1dd817e30e1750793e74fa2c475ad
4
- data.tar.gz: fcdc1970670064b4f1408efe51b80c7dd358c82409cbdb189654da60d343636a
3
+ metadata.gz: 90f7ec2edad0e340d1431e04e429e47753083495cc1e71864e96c15af5b8d165
4
+ data.tar.gz: 6244b6ccfbc2a3c02a33ffa8b4051114689dc569991fdb05e0e4aff4092d4168
5
5
  SHA512:
6
- metadata.gz: 2a5f6a5adbb8425818335195357d4de46b7ad12ce99b7646716b6a2dddfa8f5ec9dd5f9fba8586c83bc3ddb728a617d8b6397ad6ff1f0be428ea5613f04823eb
7
- data.tar.gz: 8ce1b895bcabaca5aa0fde64e3259eb7671885598b5b08a26f9deced2a8fa45c4d3654c985fb18a1fc6d0d207a6b5d8a97e9052366c9d638a25cbca784c66307
6
+ metadata.gz: 8e7d686678e67c90ffc52eeed9db2bfec2b8efb942b20d54e338794aaeb073adc4ed02d2776009bbcdd9f047871d0cc654a2fd1845ba7e24ffb4436562f77a09
7
+ data.tar.gz: 220be5c4c510566f4af4f83571be35236fe0df70bfffd3c9a45c78828d5fe4cf7ffe386025c306cb9205ff049c31e21b13665b2bd3a3ef29d64dd384ab80eff5
@@ -83,7 +83,6 @@ schemas:
83
83
  - skill
84
84
  required_nested_fields:
85
85
  - skill.kind
86
- - skill.execution.workflow
87
86
  required_comments:
88
87
  - "# bundle:"
89
88
  - "# agent:"
data/CHANGELOG.md CHANGED
@@ -6,6 +6,75 @@ The format is based on [Keep a Changelog][1], and this project adheres to [Seman
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.30.7] - 2026-04-23
10
+
11
+ ### Technical
12
+ - Replaced the retained public-surface survey helper manifest with direct `ace-lint --help` evidence so the scenario stays compatible with strict declared-artifact contracts.
13
+
14
+ ## [0.30.6] - 2026-04-23
15
+
16
+ ### Technical
17
+ - Tightened retained `TS-LINT-001` no-report and doctor diagnostics coverage so `--no-report` assertions come from same-run command evidence and malformed-config checks write the exact `.ace/lint/.rubocop.yml` path inspected by `ace-lint --doctor`.
18
+
19
+ ## [0.30.5] - 2026-04-20
20
+
21
+ ### Technical
22
+ - Fixed validator chain unit-test mocks so command-path resolution is stubbed alongside validator availability, keeping the fast suite hermetic on machines without local `standardrb` or `rubocop` executables.
23
+
24
+ ## [0.30.4] - 2026-04-18
25
+
26
+ ### Technical
27
+ - Tightened retained lint E2E contracts to keep report-dir, fixed-count, and `--no-report` assertions anchored to same-run evidence, and added deterministic regression coverage for the public no-report and fixed-summary contracts.
28
+
29
+ ## [0.30.3] - 2026-04-16
30
+
31
+ ### Fixed
32
+ - Resolved validator executables from sandbox runtime and project-local `bin/` paths so Ruby validator runs work with scenario-local shims instead of ambient `PATH` assumptions.
33
+
34
+ ### Technical
35
+ - Aligned `TS-LINT-001` runner prompts and sandbox fixtures with hermetic validator-shim execution inside copied E2E sandboxes.
36
+
37
+ ## [0.30.2] - 2026-04-16
38
+
39
+ ### Fixed
40
+ - Corrected `TS-LINT-001` doctor diagnostics setup so the malformed configuration case writes the exact `.ace/lint/.rubocop.yml` path inspected by `ace-lint --doctor`, restoring real malformed-config coverage instead of a false healthy duplicate.
41
+
42
+ ## [0.30.1] - 2026-04-16
43
+
44
+ ### Technical
45
+ - Updated `TS-LINT-001` sandbox setup to source `mise.toml` from `${ACE_E2E_SOURCE_ROOT:-$PROJECT_ROOT_PATH}` so lint-pipeline E2E runs stay compatible with the shared sandbox model.
46
+
47
+ ## [0.30.0] - 2026-04-14
48
+
49
+ ### Changed
50
+ - Reworked `TS-LINT-001` to a stricter public-surface goal contract by mapping retained flows to docs/help and splitting integrated batch outcomes from the standalone `--no-report` contract.
51
+ - Added `TC-008-no-report-public-contract` coverage and updated runner/verifier bundles to eight goals.
52
+
53
+ ### Technical
54
+ - Added explicit grouped-validator config routing and doctor troubleshooting examples to `docs/usage.md` for self-serve scenario guidance.
55
+
56
+ ## [0.29.1] - 2026-04-13
57
+
58
+ ### Changed
59
+ - Completed the batch i05 migration follow-through for this package and aligned it with the restarted `fast` / `feat` / `e2e` verification model.
60
+
61
+ ### Technical
62
+ - Included in the coordinated assignment-driven patch release for batch i05 package updates.
63
+
64
+
65
+ ### Changed
66
+ - Migrated `ace-lint` package tests to the restarted `fast` / `feat` / `e2e` contract by moving deterministic coverage into `test/fast`, refreshing TS-LINT-001 scenario metadata/setup for sandbox portability, and updating package docs to teach the new test command surface.
67
+ - Allowed canonical `capability` skills without `skill.execution.workflow` while requiring workflow bindings for `workflow` and `orchestration` skills.
68
+ - Updated skill validator/schema coverage to enforce the kind-specific workflow-binding matrix and preserve `assign:` restrictions for capability skills.
69
+
70
+ ## [0.28.1] - 2026-04-07
71
+
72
+ ### Fixed
73
+ - Allowed canonical `assign.steps` metadata in skill validation for workflow/orchestration skills.
74
+
75
+ ### Technical
76
+ - Added regression coverage ensuring skills with `assign.steps` pass lint validation.
77
+
9
78
  ## [0.27.8] - 2026-03-31
10
79
 
11
80
  ### Changed
data/README.md CHANGED
@@ -38,5 +38,16 @@
38
38
 
39
39
  **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.
40
40
 
41
+ For public verification paths around grouped validator routing, doctor troubleshooting, and retained test commands, see the [Usage Guide](docs/usage.md#grouped-validator-config-routing), [doctor troubleshooting](docs/usage.md#doctor-troubleshooting), and [test commands](docs/usage.md#test-commands).
42
+
43
+ ## Testing Model
44
+
45
+ `ace-lint` follows the restarted testing contract:
46
+
47
+ - `ace-test ace-lint` runs deterministic fast tests (`test/fast`).
48
+ - `ace-test ace-lint feat` is reserved for explicit deterministic feature tests (`test/feat`) when present.
49
+ - `ace-test ace-lint all` runs all deterministic package tests.
50
+ - `ace-test-e2e ace-lint` runs retained workflow-value scenarios from `test/e2e`.
51
+
41
52
  ---
42
53
  [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)
@@ -11,12 +11,12 @@ ace-docs:
11
11
 
12
12
  ## Purpose
13
13
 
14
- Parse a lint report file and create structured tasks for issues requiring manual intervention. Groups issues by severity and type, generates fix proposals, and drafts tasks via ace-taskflow.
14
+ Parse a lint report file and create structured tasks for issues requiring manual intervention. Groups issues by severity and type, generates fix proposals, and drafts tasks via ace-task.
15
15
 
16
16
  ## Prerequisites
17
17
 
18
18
  - Lint report file exists (from `wfi://lint/run --report`)
19
- - **ace-taskflow is installed and available** - required for task creation commands
19
+ - **ace-task is installed and available** - required for task creation commands
20
20
  - Understanding of project lint rules
21
21
 
22
22
  ## Variables
@@ -57,7 +57,7 @@ Parse a lint report file and create structured tasks for issues requiring manual
57
57
  - **P2 (medium)**: Style/formatting issues
58
58
  - **P3 (low)**: Suggestions and improvements
59
59
 
60
- 5. **Create tasks via ace-taskflow**:
60
+ 5. **Create tasks via ace-task**:
61
61
 
62
62
  **For grouped issues (multiple similar errors):**
63
63
  ```bash
@@ -154,7 +154,7 @@ doc-type: [suggested-type]
154
154
  - Report successfully parsed
155
155
  - Issues grouped logically
156
156
  - Fix proposals generated for each issue
157
- - Tasks created in ace-taskflow
157
+ - Tasks created in ace-task
158
158
  - Summary report generated
159
159
  - No issues lost or duplicated
160
160
 
@@ -172,4 +172,4 @@ doc-type: [suggested-type]
172
172
 
173
173
  - **Empty report**: Report success, no tasks needed
174
174
  - **Invalid JSON**: Report parse error, suggest re-running lint
175
- - **ace-taskflow unavailable**: Output task drafts as markdown
175
+ - **ace-task unavailable**: Output task drafts as markdown
@@ -47,9 +47,11 @@ module Ace
47
47
  # @return [Hash] Result with :success, :errors, :warnings
48
48
  def run(file_paths, fix: false, config_path: nil)
49
49
  paths = Array(file_paths)
50
- return unavailable_result unless available?
50
+ executable = resolve_command_path(command_name)
51
+ return unavailable_result unless executable
51
52
 
52
53
  cmd = build_command(paths, fix: fix, config_path: config_path)
54
+ cmd[0] = executable if command_invocation?(cmd[0], command_name)
53
55
  stdout, stderr, status = Open3.capture3(*cmd)
54
56
 
55
57
  if status.success?
@@ -206,8 +208,43 @@ module Ace
206
208
  # @param cmd [String] Command name
207
209
  # @return [Boolean] True if command exists
208
210
  def system_has_command?(cmd)
209
- # Cross-platform: use system with redirect to null
210
- system("#{cmd} --version > /dev/null 2>&1")
211
+ !resolve_command_path(cmd).nil?
212
+ end
213
+
214
+ def resolve_command_path(cmd)
215
+ candidate = cmd.to_s
216
+ return nil if candidate.empty?
217
+ return candidate if command_path_executable?(candidate) && candidate.include?(File::SEPARATOR)
218
+
219
+ candidate_directories.each do |directory|
220
+ next if directory.to_s.empty?
221
+
222
+ path = File.join(directory, candidate)
223
+ return path if command_path_executable?(path)
224
+ end
225
+
226
+ nil
227
+ end
228
+
229
+ def candidate_directories
230
+ directories = []
231
+ runtime_root = ENV["ACE_E2E_SANDBOX_RUNTIME_ROOT"].to_s.strip
232
+ project_root = ENV["PROJECT_ROOT_PATH"].to_s.strip
233
+
234
+ directories << File.join(runtime_root, "bin") unless runtime_root.empty?
235
+ directories << File.join(project_root, "bin") unless project_root.empty?
236
+ directories << File.join(Dir.pwd, "bin")
237
+ directories.concat(ENV.fetch("PATH", "").split(File::PATH_SEPARATOR))
238
+ directories.map { |entry| File.expand_path(entry) }.uniq
239
+ end
240
+
241
+ def command_path_executable?(path)
242
+ File.file?(path) && File.executable?(path)
243
+ end
244
+
245
+ def command_invocation?(value, command)
246
+ invocation = value.to_s
247
+ invocation == command.to_s || File.basename(invocation) == command.to_s
211
248
  end
212
249
 
213
250
  # Check if severity indicates an error
@@ -305,6 +305,7 @@ module Ace
305
305
  return errors
306
306
  end
307
307
 
308
+ kind = skill_data["kind"]
308
309
  unknown_skill_keys = skill_data.keys - %w[kind execution]
309
310
  unknown_skill_keys.each do |key|
310
311
  errors << Models::ValidationError.new(
@@ -329,10 +330,18 @@ module Ace
329
330
  end
330
331
  end
331
332
 
333
+ workflow_line = field_lines["skill"] || 2
334
+ workflow = execution_data.is_a?(Hash) ? execution_data["workflow"] : nil
335
+ if %w[workflow orchestration].include?(kind) && !present_value?(workflow)
336
+ errors << Models::ValidationError.new(
337
+ line: workflow_line,
338
+ message: "Missing required field: 'skill.execution.workflow'"
339
+ )
340
+ end
341
+
332
342
  assign_data = frontmatter["assign"]
333
343
  if assign_data
334
344
  assign_line = field_lines["assign"] || 2
335
- kind = skill_data["kind"]
336
345
  if kind == "capability"
337
346
  errors << Models::ValidationError.new(
338
347
  line: assign_line,
@@ -348,7 +357,7 @@ module Ace
348
357
  return errors
349
358
  end
350
359
 
351
- unknown_assign_keys = assign_data.keys - %w[source phases]
360
+ unknown_assign_keys = assign_data.keys - %w[source phases steps]
352
361
  unknown_assign_keys.each do |key|
353
362
  errors << Models::ValidationError.new(
354
363
  line: assign_line,
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Ace
4
4
  module Lint
5
- VERSION = '0.27.8'
5
+ VERSION = '0.30.7'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ace-lint
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.27.8
4
+ version: 0.30.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michal Czyz
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2026-04-01 00:00:00.000000000 Z
10
+ date: 2026-04-26 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: ace-support-config