ace-handbook 0.27.4 → 0.29.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 +4 -4
- data/.ace-defaults/handbook/config.yml +2 -1
- data/.ace-defaults/handbook/providers/agents.yml +2 -0
- data/CHANGELOG.md +25 -0
- data/README.md +2 -2
- data/handbook/cookbooks/setup-starting-a-multi-ruby-gem-monorepo-with-ace.cookbook.md +3 -3
- data/handbook/guides/changelog.g.md +1 -1
- data/handbook/guides/meta/workflow-instructions-definition.g.md +3 -2
- data/handbook/skills/as-release/SKILL.md +4 -3
- data/handbook/workflow-instructions/handbook/perform-delivery.wf.md +3 -3
- data/lib/ace/handbook/atoms/provider_registry.rb +8 -9
- data/lib/ace/handbook/organisms/provider_syncer.rb +27 -12
- data/lib/ace/handbook/organisms/status_collector.rb +31 -4
- data/lib/ace/handbook/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 72ea6d4981e8c7686fa38ae9f12c868bb0d910b148ee8150d4de55b7d5ccc07e
|
|
4
|
+
data.tar.gz: aa19a72eb4faca05a8ddc78bfdff8dd1a19c7e5875ffae32da1d59097aec8630
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1c0ba11fdb8f55c87ce15642d34746c994b38480e920f98f2c3bfb447092fdaba2e9e69efac60d4a13e588242326db28c99d2b9b130093d9e331f05fd7862233
|
|
7
|
+
data.tar.gz: 82ccfe66ee207de57e86524684a28ba4f518a1c8ca252c49cc89dab3706ac7f305ddf56532883ffe64cc26ff8a7d8a0b618f22a48d247553387182414bd9e59f
|
data/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,31 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.29.0] - 2026-06-30
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- Added the built-in `agents` skill projection target, generating `.agents/skills/` for default handbook sync.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
- Changed plain `ace-handbook sync` and `ace-handbook status` to use the default/enabled projection set, with `agents` as the default when no providers are configured.
|
|
17
|
+
- Allowed explicit provider sync, such as `ace-handbook sync --provider codex`, even when the provider is not part of the default enabled set unless it is explicitly disabled.
|
|
18
|
+
|
|
19
|
+
### Technical
|
|
20
|
+
- Added regression coverage for default `.agents/skills` projection, explicit Codex projection, disabled-provider blocking, and default status filtering.
|
|
21
|
+
|
|
22
|
+
## [0.28.1] - 2026-04-23
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
- Updated the monorepo setup cookbook to use `ace-config sync ace-llm-providers-cli` before handbook sync.
|
|
26
|
+
|
|
27
|
+
## [0.28.0] - 2026-04-22
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
- **ace-handbook v0.28.0**: Added the local release workflow (`release/local`) and switched the package release workflow to a local-only preparation flow.
|
|
31
|
+
|
|
32
|
+
### Technical
|
|
33
|
+
- **ace-handbook v0.28.0**: Kept `as-release` behavior focused on local release prep without publishing to RubyGems.
|
|
34
|
+
|
|
10
35
|
## [0.27.4] - 2026-04-16
|
|
11
36
|
|
|
12
37
|
### Technical
|
data/README.md
CHANGED
|
@@ -34,9 +34,9 @@
|
|
|
34
34
|
|
|
35
35
|
**Coordinate larger handbook deliveries** - use `/as-handbook-update-docs` to plan, execute, and synthesize multi-step documentation changes across package handbook assets.
|
|
36
36
|
|
|
37
|
-
**Integrate with resource discovery and context loading** - pair with [ace-nav](../ace-support-nav) for workflow and resource discovery, [ace-bundle](../ace-bundle) for loading complete workflow instructions, and provider integrations (`ace-handbook-integration-*`) that project canonical handbook skills into
|
|
37
|
+
**Integrate with resource discovery and context loading** - pair with [ace-nav](../ace-support-nav) for workflow and resource discovery, [ace-bundle](../ace-bundle) for loading complete workflow instructions, and provider integrations (`ace-handbook-integration-*`) that can project canonical handbook skills into harness-native folders on request.
|
|
38
38
|
|
|
39
|
-
**Sync and inspect
|
|
39
|
+
**Sync and inspect skill projections** - run `ace-handbook sync` to project canonical skills into `.agents/skills/` by default, or use `ace-handbook sync --provider PROVIDER` for harness-native folders such as `.codex/skills/`.
|
|
40
40
|
|
|
41
41
|
**Extend handbook content in normal projects** - put project-specific workflows, guides, cookbooks, templates, and skills under `.ace-handbook/` and discover them with protocol URLs (`wfi://`, `guide://`, `cookbook://`, `tmpl://`, `skill://`). See [Usage Guide](docs/usage.md) for path conventions.
|
|
42
42
|
|
|
@@ -32,7 +32,7 @@ This cookbook distills monorepo setup patterns from ACE package conventions and
|
|
|
32
32
|
- Add one monorepo quickstart page that covers prerequisites, workspace bootstrap, and E2E smoke checks.
|
|
33
33
|
- Add a short troubleshooting section for permission and timeout pitfalls during E2E runs.
|
|
34
34
|
- Agent guidance updates to apply:
|
|
35
|
-
- Add concise rules only: "use `ace-test` (not bundle exec)", "run `ace-config
|
|
35
|
+
- Add concise rules only: "use `ace-test` (not bundle exec)", "run `ace-config sync ace-llm-providers-cli` + `ace-handbook sync` before nav/bundle checks", and "scope E2E scenarios to monorepo-level concerns".
|
|
36
36
|
- Summary-only propagation target notes (do not copy full cookbook body):
|
|
37
37
|
- `README.md`
|
|
38
38
|
- `docs/quick-start.md`
|
|
@@ -64,7 +64,7 @@ rg --files | rg "handbook/"
|
|
|
64
64
|
**Commands/Actions:**
|
|
65
65
|
|
|
66
66
|
```bash
|
|
67
|
-
ace-config
|
|
67
|
+
ace-config sync ace-llm-providers-cli
|
|
68
68
|
ace-handbook sync
|
|
69
69
|
```
|
|
70
70
|
|
|
@@ -125,7 +125,7 @@ Document these defaults in repo docs and concise agent guidance:
|
|
|
125
125
|
**Validation:**
|
|
126
126
|
|
|
127
127
|
```bash
|
|
128
|
-
rg -n "ace-config
|
|
128
|
+
rg -n "ace-config sync|ace-handbook sync|ace-test-e2e" README.md docs AGENTS.md
|
|
129
129
|
```
|
|
130
130
|
|
|
131
131
|
## Validation & Testing
|
|
@@ -328,6 +328,6 @@ For projects without public repositories, use internal tracking systems or omit
|
|
|
328
328
|
|
|
329
329
|
- [Version Control Message Guide](./version-control-system-message.g.md) (Commit message standards)
|
|
330
330
|
- [Project Management Guide](./project-management.g.md) (Release workflow integration)
|
|
331
|
-
- [
|
|
331
|
+
- [Release Workflow (Local)](wfi://release/local) (Release process overview and step-by-step actions)
|
|
332
332
|
- [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) (External reference)
|
|
333
333
|
- [Semantic Versioning](https://semver.org/) (Versioning standards)
|
|
@@ -236,11 +236,12 @@ Review these refactored workflow instructions that demonstrate self-containment
|
|
|
236
236
|
|
|
237
237
|
### Command Reference Example
|
|
238
238
|
|
|
239
|
-
`wfi://release/
|
|
239
|
+
`wfi://release/local`:
|
|
240
240
|
|
|
241
241
|
- Embeds package registry commands for all major platforms
|
|
242
242
|
- Includes changelog format specification
|
|
243
|
-
- Contains complete release process without external references
|
|
243
|
+
- Contains complete multi-package release preparation process without external references
|
|
244
|
+
- `wfi://release/publish` remains a compatibility alias that forwards to this workflow.
|
|
244
245
|
|
|
245
246
|
## Key Refactoring Principles
|
|
246
247
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: as-release
|
|
3
3
|
description: Release modified ACE packages with coordinated package and root changelog updates
|
|
4
|
-
# bundle: wfi://release/
|
|
4
|
+
# bundle: wfi://release/local
|
|
5
5
|
# agent: general-purpose
|
|
6
6
|
user-invocable: true
|
|
7
7
|
allowed-tools:
|
|
@@ -29,7 +29,7 @@ integration:
|
|
|
29
29
|
skill:
|
|
30
30
|
kind: workflow
|
|
31
31
|
execution:
|
|
32
|
-
workflow: wfi://release/
|
|
32
|
+
workflow: wfi://release/local
|
|
33
33
|
---
|
|
34
34
|
|
|
35
35
|
## Arguments
|
|
@@ -43,7 +43,8 @@ None
|
|
|
43
43
|
## Execution
|
|
44
44
|
|
|
45
45
|
- You are working in the current project.
|
|
46
|
-
-
|
|
46
|
+
- This is a local release-preparation workflow and does **not** publish to RubyGems.
|
|
47
|
+
- Run `ace-bundle wfi://release/local` in the current project to load the workflow instructions.
|
|
47
48
|
- Read the loaded workflow and execute it end-to-end in this project.
|
|
48
49
|
- Follow the workflow as the source of truth.
|
|
49
50
|
- Do the work described by the workflow instead of only summarizing it.
|
|
@@ -39,7 +39,7 @@ Execute complete delivery workflow for a task with automatic step tracking, ensu
|
|
|
39
39
|
* [ ] Enter plan mode if implementation required
|
|
40
40
|
* [ ] Execute implementation via `ace-bundle wfi://task/work` or inline instructions
|
|
41
41
|
* [ ] Commit all changes (`ace-git-commit`)
|
|
42
|
-
* [ ] Release modified packages (`ace-bundle wfi://release/
|
|
42
|
+
* [ ] Release modified packages (`ace-bundle wfi://release/local` if applicable)
|
|
43
43
|
* [ ] Mark task done and push to remote
|
|
44
44
|
|
|
45
45
|
### Phase 2: PR & Initial Review
|
|
@@ -76,7 +76,7 @@ Execute complete delivery workflow for a task with automatic step tracking, ensu
|
|
|
76
76
|
```
|
|
77
77
|
1. Implement task (via `ace-bundle wfi://task/work` or inline)
|
|
78
78
|
2. Commit all changes (`ace-git-commit`)
|
|
79
|
-
3. Release modified packages (`ace-bundle wfi://release/
|
|
79
|
+
3. Release modified packages (`ace-bundle wfi://release/local`)
|
|
80
80
|
4. Mark task done and push to remote
|
|
81
81
|
5. Create/update PR (`ace-bundle wfi://github/pr/create`)
|
|
82
82
|
6. Initial review (`ace-bundle wfi://review/pr`)
|
|
@@ -109,7 +109,7 @@ Execute complete delivery workflow for a task with automatic step tracking, ensu
|
|
|
109
109
|
* Use descriptive commit message
|
|
110
110
|
|
|
111
111
|
5. **Release Packages (if applicable):**
|
|
112
|
-
* Load `ace-bundle wfi://release/
|
|
112
|
+
* Load `ace-bundle wfi://release/local` when a release is required
|
|
113
113
|
* Follow versioning conventions
|
|
114
114
|
|
|
115
115
|
6. **Complete Task:**
|
|
@@ -7,13 +7,10 @@ module Ace
|
|
|
7
7
|
module Handbook
|
|
8
8
|
module Atoms
|
|
9
9
|
class ProviderRegistry
|
|
10
|
-
|
|
11
|
-
"ace-handbook-
|
|
12
|
-
".ace-defaults",
|
|
13
|
-
|
|
14
|
-
"providers",
|
|
15
|
-
"*.yml"
|
|
16
|
-
).freeze
|
|
10
|
+
LOCAL_MANIFEST_GLOBS = [
|
|
11
|
+
File.join("ace-handbook", ".ace-defaults", "handbook", "providers", "*.yml"),
|
|
12
|
+
File.join("ace-handbook-integration-*", ".ace-defaults", "handbook", "providers", "*.yml")
|
|
13
|
+
].freeze
|
|
17
14
|
|
|
18
15
|
attr_reader :project_root
|
|
19
16
|
|
|
@@ -54,12 +51,14 @@ module Ace
|
|
|
54
51
|
private
|
|
55
52
|
|
|
56
53
|
def local_manifest_paths
|
|
57
|
-
|
|
54
|
+
LOCAL_MANIFEST_GLOBS.flat_map do |glob|
|
|
55
|
+
Dir.glob(File.join(project_root, glob))
|
|
56
|
+
end.sort
|
|
58
57
|
end
|
|
59
58
|
|
|
60
59
|
def installed_manifest_paths
|
|
61
60
|
Gem::Specification.find_all.filter_map do |spec|
|
|
62
|
-
next unless spec.name.start_with?("ace-handbook-integration-")
|
|
61
|
+
next unless spec.name == "ace-handbook" || spec.name.start_with?("ace-handbook-integration-")
|
|
63
62
|
|
|
64
63
|
Dir.glob(File.join(spec.full_gem_path, ".ace-defaults", "handbook", "providers", "*.yml"))
|
|
65
64
|
end.flatten.sort
|
|
@@ -73,30 +73,45 @@ module Ace
|
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
def providers_to_sync(requested_provider)
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
if requested_provider
|
|
77
|
+
provider = requested_provider.to_s
|
|
78
|
+
raise ArgumentError, "Unknown provider: #{provider}" unless registry.known?(provider)
|
|
79
|
+
if provider_disabled?(provider)
|
|
80
|
+
raise ArgumentError, "Provider '#{provider}' is disabled in handbook sync config"
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
return [provider]
|
|
80
84
|
end
|
|
81
85
|
|
|
86
|
+
providers = default_sync_providers
|
|
82
87
|
unknown = providers.reject { |provider| registry.known?(provider) }
|
|
83
88
|
raise ArgumentError, "Unknown provider: #{unknown.join(", ")}" if unknown.any?
|
|
84
89
|
|
|
85
|
-
|
|
86
|
-
|
|
90
|
+
providers.reject { |provider| provider_disabled?(provider) }
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def default_sync_providers
|
|
94
|
+
enabled = enabled_providers
|
|
95
|
+
return enabled unless enabled.empty?
|
|
96
|
+
|
|
97
|
+
return ["agents"] if registry.known?("agents") && !provider_disabled?("agents")
|
|
87
98
|
|
|
88
|
-
|
|
99
|
+
registry.providers
|
|
89
100
|
end
|
|
90
101
|
|
|
91
|
-
def
|
|
102
|
+
def enabled_providers
|
|
92
103
|
sync_config = config.fetch("sync", {})
|
|
93
104
|
providers = sync_config.fetch("providers", {})
|
|
94
|
-
enabled = Array(providers["enabled"]).map(&:to_s)
|
|
95
|
-
disabled = Array(providers["disabled"]).map(&:to_s)
|
|
96
105
|
|
|
97
|
-
|
|
106
|
+
Array(providers["enabled"]).map(&:to_s)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def provider_disabled?(provider)
|
|
110
|
+
sync_config = config.fetch("sync", {})
|
|
111
|
+
providers = sync_config.fetch("providers", {})
|
|
112
|
+
disabled = Array(providers["disabled"]).map(&:to_s)
|
|
98
113
|
|
|
99
|
-
|
|
114
|
+
disabled.include?(provider.to_s)
|
|
100
115
|
end
|
|
101
116
|
|
|
102
117
|
def prepare_output_dir(output_dir)
|
|
@@ -150,22 +150,49 @@ module Ace
|
|
|
150
150
|
end
|
|
151
151
|
|
|
152
152
|
def selected_providers(provider)
|
|
153
|
-
selected =
|
|
153
|
+
selected = if provider
|
|
154
|
+
[provider.to_s]
|
|
155
|
+
else
|
|
156
|
+
default_status_providers
|
|
157
|
+
end
|
|
154
158
|
unknown = selected.reject { |provider_id| registry.known?(provider_id) }
|
|
155
159
|
raise ArgumentError, "Unknown provider: #{unknown.join(", ")}" if unknown.any?
|
|
156
160
|
|
|
157
161
|
selected
|
|
158
162
|
end
|
|
159
163
|
|
|
160
|
-
def
|
|
164
|
+
def default_status_providers
|
|
165
|
+
enabled = enabled_providers
|
|
166
|
+
return enabled unless enabled.empty?
|
|
167
|
+
|
|
168
|
+
return ["agents"] if registry.known?("agents") && !provider_disabled?("agents")
|
|
169
|
+
|
|
170
|
+
registry.providers.reject { |provider| provider_disabled?(provider) }
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def enabled_providers
|
|
174
|
+
sync_config = config.fetch("sync", {})
|
|
175
|
+
providers = sync_config.fetch("providers", {})
|
|
176
|
+
|
|
177
|
+
Array(providers["enabled"]).map(&:to_s)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def provider_disabled?(provider)
|
|
161
181
|
sync_config = config.fetch("sync", {})
|
|
162
182
|
providers = sync_config.fetch("providers", {})
|
|
163
|
-
enabled = Array(providers["enabled"]).map(&:to_s)
|
|
164
183
|
disabled = Array(providers["disabled"]).map(&:to_s)
|
|
165
184
|
|
|
185
|
+
disabled.include?(provider.to_s)
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def provider_enabled?(provider)
|
|
189
|
+
enabled = enabled_providers
|
|
190
|
+
|
|
166
191
|
return enabled.include?(provider) unless enabled.empty?
|
|
167
192
|
|
|
168
|
-
|
|
193
|
+
return provider.to_s == "agents" if registry.known?("agents")
|
|
194
|
+
|
|
195
|
+
!provider_disabled?(provider)
|
|
169
196
|
end
|
|
170
197
|
|
|
171
198
|
def path_type(path)
|
data/lib/ace/handbook/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ace-handbook
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.29.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Michal Czyz
|
|
8
8
|
bindir: exe
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date: 2026-
|
|
10
|
+
date: 2026-06-30 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: ace-support-config
|
|
@@ -117,6 +117,7 @@ extensions: []
|
|
|
117
117
|
extra_rdoc_files: []
|
|
118
118
|
files:
|
|
119
119
|
- ".ace-defaults/handbook/config.yml"
|
|
120
|
+
- ".ace-defaults/handbook/providers/agents.yml"
|
|
120
121
|
- ".ace-defaults/nav/protocols/cookbook-sources/ace-handbook.yml"
|
|
121
122
|
- ".ace-defaults/nav/protocols/guide-sources/ace-handbook.yml"
|
|
122
123
|
- ".ace-defaults/nav/protocols/skill-sources/ace-handbook.yml"
|