ace-handbook 0.29.1 → 0.30.1

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: b5891e10da284fc3b4b5df635911b246d461a1d0a498c4bae9b613155cc81685
4
- data.tar.gz: 547f392255e929055f804c772ce9e6b70789b672a955044b544ae4d7d9aede16
3
+ metadata.gz: 40af330ac77e755b410a9980a9fa75b816909fb03dc94081433e51ae9d260f62
4
+ data.tar.gz: 9bd06eb119329dcce38947dad0023f9fe38493d7956877627e056a4189ab8f5a
5
5
  SHA512:
6
- metadata.gz: c53f42ed35ea0bd2d359de9acdc369a1fa4e2e6973e40c142029a06233c80bcd91ac0d69963244eb4f3c3dd7c48fa605183dab3c6f0b91d7b6f945bcccf39ee5
7
- data.tar.gz: 66774b7c1aa3403aa5d86065c54f653168f4e2ae5766fe03c0a4acb8fc405b9a5a298e9a33c778f47ab065c87397a80215c39acfd24b6711c8674f1f54fb610e
6
+ metadata.gz: e2f88476c18b665fc2ea415ce37231534aa737b099546feab4cf2e01ffb464b6194dd2d26a80cff81dd78d406a98ee7458ab39eeedb863b385778636bcb0bccf
7
+ data.tar.gz: 2020c665a6a35b2d68586107a64f2f0bd7d197f63e4e21ae68bda110cf570c36fb30c3558fca9a4c4c1e67c91b429e31c61348f7f52090f559f81831b38c3316
data/CHANGELOG.md CHANGED
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.30.1] - 2026-07-15
11
+
12
+ ### Fixed
13
+ - Made the neutral `agents` projection recognize canonical skills targeting the full legacy provider set before
14
+ filtering unavailable provider manifests, so agents-only projects receive common workflows such as `as-git-commit`.
15
+
16
+ ## [0.30.0] - 2026-07-15
17
+
18
+ ### Added
19
+ - Added agents projection coverage fields to `ace-handbook status` JSON and table output, including projection policy,
20
+ excluded skill count, and the reason for curated projections.
21
+
22
+ ### Technical
23
+ - Added fast and E2E regression coverage for the neutral agents projection status contract.
24
+
10
25
  ## [0.29.1] - 2026-06-30
11
26
 
12
27
  ### Fixed
@@ -14,8 +14,9 @@ module Ace
14
14
  targets = integration["targets"]
15
15
  return registry.providers if targets.nil? || targets.empty?
16
16
 
17
- known_targets = Array(targets).map(&:to_s).select { |provider| registry.known?(provider) }
18
- if registry.known?("agents") && legacy_provider_target_set?(known_targets)
17
+ declared_targets = Array(targets).map(&:to_s).uniq
18
+ known_targets = declared_targets.select { |provider| registry.known?(provider) }
19
+ if registry.known?("agents") && legacy_provider_target_set?(declared_targets)
19
20
  known_targets = known_targets + ["agents"]
20
21
  end
21
22
 
@@ -35,6 +35,9 @@ module Ace
35
35
  entry.fetch("outdated").to_s,
36
36
  entry.fetch("missing").to_s,
37
37
  entry.fetch("extra").to_s,
38
+ entry.fetch("projection_policy", "").to_s,
39
+ entry.fetch("excluded_count", "").to_s,
40
+ entry.fetch("policy_reason", "").to_s,
38
41
  entry.fetch("relative_output_dir")
39
42
  ]
40
43
  end
@@ -48,19 +51,21 @@ module Ace
48
51
  ["IN_SYNC", *rows.map { |row| row[5] }].map(&:length).max,
49
52
  ["OUTDATED", *rows.map { |row| row[6] }].map(&:length).max,
50
53
  ["MISSING", *rows.map { |row| row[7] }].map(&:length).max,
51
- ["EXTRA", *rows.map { |row| row[8] }].map(&:length).max
54
+ ["EXTRA", *rows.map { |row| row[8] }].map(&:length).max,
55
+ ["POLICY", *rows.map { |row| row[9] }].map(&:length).max,
56
+ ["EXCLUDED", *rows.map { |row| row[10] }].map(&:length).max,
57
+ ["REASON", *rows.map { |row| row[11] }].map(&:length).max,
58
+ ["PATH", *rows.map { |row| row[12] }].map(&:length).max
52
59
  ]
53
60
 
54
- header = format(
55
- "%-#{widths[0]}s %-#{widths[1]}s %-#{widths[2]}s %#{widths[3]}s %#{widths[4]}s %#{widths[5]}s %#{widths[6]}s %#{widths[7]}s %#{widths[8]}s %s",
56
- "PROVIDER", "ENABLED", "TYPE", "EXPECTED", "INSTALLED", "IN_SYNC", "OUTDATED", "MISSING", "EXTRA", "PATH"
57
- )
58
- lines = rows.map do |provider, enabled, type, expected, installed, in_sync, outdated, missing, extra, path|
59
- format(
60
- "%-#{widths[0]}s %-#{widths[1]}s %-#{widths[2]}s %#{widths[3]}s %#{widths[4]}s %#{widths[5]}s %#{widths[6]}s %#{widths[7]}s %#{widths[8]}s %s",
61
- provider, enabled, type, expected, installed, in_sync, outdated, missing, extra, path
62
- )
61
+ right_aligned = (3..8).to_a + [10]
62
+ formats = widths.each_index.map do |index|
63
+ right_aligned.include?(index) ? "%#{widths[index]}s" : "%-#{widths[index]}s"
63
64
  end
65
+ table_format = formats.join(" ")
66
+ headers = %w[PROVIDER ENABLED TYPE EXPECTED INSTALLED IN_SYNC OUTDATED MISSING EXTRA POLICY EXCLUDED REASON PATH]
67
+ header = format(table_format, *headers)
68
+ lines = rows.map { |row| format(table_format, *row) }
64
69
 
65
70
  (summary_lines + ["", header] + lines).join("\n")
66
71
  end
@@ -102,7 +107,7 @@ module Ace
102
107
  end
103
108
  end
104
109
 
105
- {
110
+ status = {
106
111
  "provider" => provider,
107
112
  "enabled" => provider_enabled?(provider),
108
113
  "relative_output_dir" => relative_output_dir,
@@ -116,6 +121,19 @@ module Ace
116
121
  "missing" => (expected.keys - installed_names).size,
117
122
  "extra" => extra
118
123
  }
124
+
125
+ status.merge!(projection_coverage(skills, expected)) if provider == "agents"
126
+ status
127
+ end
128
+
129
+ def projection_coverage(skills, expected)
130
+ excluded_count = skills.size - expected.size
131
+
132
+ {
133
+ "projection_policy" => excluded_count.zero? ? "complete" : "curated",
134
+ "excluded_count" => excluded_count,
135
+ "policy_reason" => excluded_count.zero? ? nil : "provider-specific targeting"
136
+ }
119
137
  end
120
138
 
121
139
  def expected_projection_map(provider, skills)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Ace
4
4
  module Handbook
5
- VERSION = '0.29.1'
5
+ VERSION = '0.30.1'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ace-handbook
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.29.1
4
+ version: 0.30.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michal Czyz
8
+ autorequire:
8
9
  bindir: exe
9
10
  cert_chain: []
10
- date: 2026-06-30 00:00:00.000000000 Z
11
+ date: 2026-07-15 00:00:00.000000000 Z
11
12
  dependencies:
12
13
  - !ruby/object:Gem::Dependency
13
14
  name: ace-support-config
@@ -215,6 +216,7 @@ metadata:
215
216
  homepage_uri: https://github.com/cs3b/ace
216
217
  source_code_uri: https://github.com/cs3b/ace/tree/main/ace-handbook/
217
218
  changelog_uri: https://github.com/cs3b/ace/blob/main/ace-handbook/CHANGELOG.md
219
+ post_install_message:
218
220
  rdoc_options: []
219
221
  require_paths:
220
222
  - lib
@@ -229,7 +231,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
229
231
  - !ruby/object:Gem::Version
230
232
  version: '0'
231
233
  requirements: []
232
- rubygems_version: 3.6.9
234
+ rubygems_version: 3.0.3.1
235
+ signing_key:
233
236
  specification_version: 4
234
237
  summary: Standardized workflows for creating and managing guides, workflow instructions,
235
238
  and agent definitions.