ace-overseer 0.13.9 → 0.15.3
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/CHANGELOG.md +126 -0
- data/README.md +12 -0
- data/docs/usage.md +24 -0
- data/lib/ace/overseer/atoms/status_formatter.rb +7 -2
- data/lib/ace/overseer/cli/commands/status.rb +2 -0
- data/lib/ace/overseer/molecules/tmux_window_opener.rb +16 -4
- data/lib/ace/overseer/molecules/worktree_context_collector.rb +5 -3
- data/lib/ace/overseer/organisms/work_on_orchestrator.rb +20 -5
- data/lib/ace/overseer/version.rb +1 -1
- metadata +8 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3ad5c1cd73b433965d9e8ac955ca8230dd677c6c5067bcdee1a2ff6427603deb
|
|
4
|
+
data.tar.gz: efa22f74cc5af23a2e686c924558ca276d539369646f89825739b5255c3d307d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 819bcbfad49d1edacfb604f39727573b83524c8fd49370ca35f8ff342f0a24850e7f25e8de59f1097f3c1d644fac2721a05bd0cae92df34231d0d4dfe6511f1e
|
|
7
|
+
data.tar.gz: 4cc5095cf8a5189e1b000234eda8fda11f8d841a7e8f3c294ca0756477e6f0e4b90aa84b9854c3648c6a783128c08bf4472fb5fd15b3501a09dec8b0f0bdc60a
|
data/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,132 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
|
+
### Fixed
|
|
10
|
+
- Updated the `ace-tmux` runtime dependency constraint to `~> 0.17` so overseer stays compatible with the current tmux runtime control release line.
|
|
11
|
+
|
|
12
|
+
## [0.15.3] - 2026-04-23
|
|
13
|
+
|
|
14
|
+
### Technical
|
|
15
|
+
- Tightened retained `status --watch` E2E coverage to use a controlled bounded-session shutdown with explicit command captures, keeping refresh verification aligned with the documented watch contract.
|
|
16
|
+
|
|
17
|
+
## [0.15.2] - 2026-04-23
|
|
18
|
+
|
|
19
|
+
### Technical
|
|
20
|
+
- Aligned retained `work-on` E2E verification with the current prepared-assignment contract so post-launch status accepts `paused` plus `next_step` until `/ace-assign-drive` actually starts work.
|
|
21
|
+
|
|
22
|
+
## [0.15.1] - 2026-04-23
|
|
23
|
+
|
|
24
|
+
### Technical
|
|
25
|
+
- Updated the `ace-git-worktree` runtime dependency constraint to `~> 0.21` so overseer stays aligned with the current worktree minor release line.
|
|
26
|
+
|
|
27
|
+
## [0.15.0] - 2026-04-23
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
- Updated overseer status collection, formatting, and work-on orchestration to consume `ace-assign`'s `active_steps`/`next_step` lifecycle contract instead of the old singular `current_step`/`in_progress` model.
|
|
31
|
+
- Revised overseer test fixtures and resume behavior so existing assignments now prefer the focused active step and otherwise fall back to the next pending step in scope.
|
|
32
|
+
|
|
33
|
+
## [0.14.14] - 2026-04-23
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
- Reworked tmux window-open behavior to align with shared session targeting and reduce ambiguity when launching and reusing worktree windows.
|
|
38
|
+
- Updated overseer tmux-window coverage to verify the current session/window lifecycle against the improved launcher behavior.
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
## [0.14.13] - 2026-04-22
|
|
42
|
+
|
|
43
|
+
### Fixed
|
|
44
|
+
- Matched existing tmux windows through the shared `ace-tmux` sanitized window-name policy so worktrees with punctuation are not reopened under duplicate names.
|
|
45
|
+
|
|
46
|
+
## [0.14.12] - 2026-04-19
|
|
47
|
+
|
|
48
|
+
### Technical
|
|
49
|
+
- Tightened retained overseer E2E runner and verifier contracts so `work-on` postcondition captures cannot run before the primary command has completed, and preset-override verification requires public `r8x` worktree evidence.
|
|
50
|
+
|
|
51
|
+
## [0.14.11] - 2026-04-18
|
|
52
|
+
|
|
53
|
+
### Technical
|
|
54
|
+
- Relaxed retained watch-mode E2E verification to tolerate bounded `Open3` stream-closure noise when the visible `status --watch` behavior and controlled shutdown codes are otherwise correct.
|
|
55
|
+
|
|
56
|
+
## [0.14.10] - 2026-04-16
|
|
57
|
+
|
|
58
|
+
### Fixed
|
|
59
|
+
- Normalized `status --watch` interrupt handling so watch-mode exits no longer dump a Ruby stack trace, and aligned retained E2E verification with the bounded termination codes the command now emits.
|
|
60
|
+
|
|
61
|
+
## [0.14.9] - 2026-04-16
|
|
62
|
+
|
|
63
|
+
### Fixed
|
|
64
|
+
- Reused the orchestrator task manager when launching default assignments so multi-task `work-on` flows no longer partially provision a task and then fail lookup against a different task-resolution path.
|
|
65
|
+
|
|
66
|
+
## [0.14.8] - 2026-04-16
|
|
67
|
+
|
|
68
|
+
### Fixed
|
|
69
|
+
- Relaxed `TS-OVERSEER-001` prune verification to judge the documented public prune flow from captured dry-run/prune artifacts and resulting state instead of requiring echoed command lines.
|
|
70
|
+
|
|
71
|
+
## [0.14.7] - 2026-04-16
|
|
72
|
+
|
|
73
|
+
### Fixed
|
|
74
|
+
- Taught tmux window opening to create the target session when it is missing so sandboxed overseer E2E runs can open task windows reliably on the intended socket.
|
|
75
|
+
|
|
76
|
+
## [0.14.6] - 2026-04-15
|
|
77
|
+
|
|
78
|
+
### Changed
|
|
79
|
+
- Reworked `TS-OVERSEER-001` into a public-surface goal contract by absorbing standalone help survey into Goal 2 preflight, simplifying prune flow to normal lifecycle commands, and tightening rerun/override checks to stable status/worktree oracles.
|
|
80
|
+
- Added `TS-OVERSEER-002` status-and-operations coverage with watch-refresh and multi-task bundle journeys.
|
|
81
|
+
- Updated `docs/usage.md` with explicit public verification paths for preset override, idempotent rerun, and minimal prune lifecycle checks.
|
|
82
|
+
|
|
83
|
+
### Fixed
|
|
84
|
+
- Updated the `ace-assign` runtime dependency constraint to `~> 0.53` so overseer remains aligned with the current assign minor release line.
|
|
85
|
+
|
|
86
|
+
## [0.14.4] - 2026-04-13
|
|
87
|
+
|
|
88
|
+
### Fixed
|
|
89
|
+
- Rewrote the retained `TS-OVERSEER-001` workflow-value cases around final sandbox state and runner observations so preset-override and prune verification no longer depend on brittle helper artifacts.
|
|
90
|
+
|
|
91
|
+
## [0.14.3] - 2026-04-13
|
|
92
|
+
|
|
93
|
+
### Fixed
|
|
94
|
+
- Tightened `TS-OVERSEER-001` preset-override and prune scenario contracts so path-check artifacts are explicit and optional pre-completion status captures no longer fail the workflow before semantic verification.
|
|
95
|
+
|
|
96
|
+
## [0.14.2] - 2026-04-13
|
|
97
|
+
|
|
98
|
+
### Fixed
|
|
99
|
+
- Updated the `ace-assign` runtime dependency constraint to `~> 0.49` so overseer remains compatible with the new assign minor release line.
|
|
100
|
+
|
|
101
|
+
## [0.14.1] - 2026-04-13
|
|
102
|
+
|
|
103
|
+
### Changed
|
|
104
|
+
- Completed the batch i05 migration follow-through for this package and aligned it with the restarted `fast` / `feat` / `e2e` verification model.
|
|
105
|
+
|
|
106
|
+
### Technical
|
|
107
|
+
- Included in the coordinated assignment-driven patch release for batch i05 package updates.
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
## [0.14.0] - 2026-04-12
|
|
111
|
+
|
|
112
|
+
### Changed
|
|
113
|
+
- Migrated package tests to the `fast` / `feat` / `e2e` model by moving deterministic coverage from `test/{atoms,commands,models,molecules,organisms}` into `test/fast/*`.
|
|
114
|
+
- Added E2E migration decision tracking for `TS-OVERSEER-001` via `test/e2e/TS-OVERSEER-001-overseer-workflow/e2e-decision-record.md`.
|
|
115
|
+
- Updated package README testing guidance to teach only `ace-test ace-overseer`, `ace-test ace-overseer feat`, `ace-test ace-overseer all`, and `ace-test-e2e ace-overseer`.
|
|
116
|
+
|
|
117
|
+
### Fixed
|
|
118
|
+
- Hardened `TS-OVERSEER-001` sandbox setup by loading `mise.toml` from `${ACE_E2E_SOURCE_ROOT:-$PROJECT_ROOT_PATH}`.
|
|
119
|
+
- Updated TC-002/TC-003 verifier expectations to use the JSON status oracle and task-window-scoped tmux duplicate checks, eliminating false negatives in rerun validation.
|
|
120
|
+
|
|
121
|
+
## [0.13.12] - 2026-04-12
|
|
122
|
+
|
|
123
|
+
### Fixed
|
|
124
|
+
- Updated the `ace-git-worktree` runtime dependency constraint to `~> 0.20` so overseer remains compatible with the new worktree minor release line.
|
|
125
|
+
|
|
126
|
+
## [0.13.11] - 2026-04-11
|
|
127
|
+
|
|
128
|
+
### Fixed
|
|
129
|
+
- Updated the `ace-assign` runtime dependency constraint to `~> 0.47` so overseer remains compatible with the latest assign minor release line.
|
|
130
|
+
|
|
131
|
+
## [0.13.10] - 2026-04-07
|
|
132
|
+
|
|
133
|
+
### Fixed
|
|
134
|
+
- Updated the `ace-assign` runtime dependency constraint to `~> 0.44` so overseer remains compatible with the new assign minor release line.
|
|
9
135
|
|
|
10
136
|
## [0.13.9] - 2026-04-01
|
|
11
137
|
|
data/README.md
CHANGED
|
@@ -46,5 +46,17 @@ ace-overseer status --watch
|
|
|
46
46
|
|
|
47
47
|
**Customize the workflow** - the full pipeline is defined in two layers: the [assignment preset](../ace-assign/.ace-defaults/assign/presets/work-on-task.yml) controls which steps run and in what order (onboard, implement, test, release, review, PR), while each step references a [workflow instruction](../ace-task/handbook/workflow-instructions/task/work.wf.md) that defines how it executes. Browse [available presets](../ace-assign/.ace-defaults/assign/presets/) or create your own to tailor the pipeline to your project.
|
|
48
48
|
|
|
49
|
+
For explicit end-to-end validation paths, see [Public Verification Paths](docs/usage.md#public-verification-paths).
|
|
50
|
+
|
|
51
|
+
## Testing
|
|
52
|
+
|
|
53
|
+
- `ace-test ace-overseer` runs deterministic fast coverage from `test/fast/`.
|
|
54
|
+
- `ace-test ace-overseer feat` runs deterministic feature coverage from `test/feat/` when present.
|
|
55
|
+
- `ace-test ace-overseer all` runs fast + feat deterministic coverage.
|
|
56
|
+
- `ace-test-e2e ace-overseer` runs retained workflow scenarios from `test/e2e/`.
|
|
57
|
+
|
|
58
|
+
The package no longer uses deterministic `*_test.rb` files under `test/e2e/` and
|
|
59
|
+
does not use `ace-test ace-overseer e2e` as a deterministic test path.
|
|
60
|
+
|
|
49
61
|
---
|
|
50
62
|
[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)
|
data/docs/usage.md
CHANGED
|
@@ -72,3 +72,27 @@ Start task work: `ace-overseer work-on --task 8q4.t.umu.1`.
|
|
|
72
72
|
Check dashboard: `ace-overseer status`.
|
|
73
73
|
|
|
74
74
|
Preview then prune: `ace-overseer prune --dry-run`, then `ace-overseer prune --yes`.
|
|
75
|
+
|
|
76
|
+
## Public Verification Paths
|
|
77
|
+
|
|
78
|
+
Use these user-visible checks when validating behavior end-to-end:
|
|
79
|
+
|
|
80
|
+
- Preset override path:
|
|
81
|
+
|
|
82
|
+
1. `ace-overseer work-on --task <task-ref> --preset <preset-name>`
|
|
83
|
+
2. `ace-git-worktree list` (confirm worktree exists for `<task-ref>`)
|
|
84
|
+
3. `ace-overseer status --format json` (confirm the task appears with assignment/preset details)
|
|
85
|
+
|
|
86
|
+
- Idempotent rerun oracle:
|
|
87
|
+
|
|
88
|
+
1. Run `ace-overseer work-on --task <task-ref>` twice
|
|
89
|
+
2. Verify one task entry remains in `ace-overseer status --format json`
|
|
90
|
+
3. Verify only one matching worktree exists in `ace-git-worktree list`
|
|
91
|
+
|
|
92
|
+
- Prune lifecycle minimal flow:
|
|
93
|
+
|
|
94
|
+
1. `ace-task done <task-ref>`
|
|
95
|
+
2. `ace-overseer prune --dry-run`
|
|
96
|
+
3. `ace-overseer prune --yes`
|
|
97
|
+
4. `ace-git-worktree list` to confirm removed vs retained task worktrees
|
|
98
|
+
5. `ace-overseer prune --dry-run` to confirm no remaining safe candidates
|
|
@@ -128,9 +128,14 @@ module Ace
|
|
|
128
128
|
bar = progress_bar(done.to_i, total.to_i)
|
|
129
129
|
counts = "#{done}/#{total}"
|
|
130
130
|
counts = "#{counts} (#{failed} failed)" if failed.positive?
|
|
131
|
-
|
|
131
|
+
active_steps = assignment["active_steps"] || assignment[:active_steps]
|
|
132
|
+
next_step = assignment["next_step"] || assignment[:next_step]
|
|
132
133
|
parts = "#{bar} #{counts}"
|
|
133
|
-
|
|
134
|
+
if active_steps.is_a?(Array) && !active_steps.empty?
|
|
135
|
+
parts = "#{parts} #{colorize(active_steps.join(", "), :dim)}"
|
|
136
|
+
elsif next_step
|
|
137
|
+
parts = "#{parts} #{colorize("next: #{next_step}", :dim)}"
|
|
138
|
+
end
|
|
134
139
|
parts
|
|
135
140
|
end
|
|
136
141
|
private_class_method :format_progress
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "ace/tmux"
|
|
4
|
+
|
|
3
5
|
module Ace
|
|
4
6
|
module Overseer
|
|
5
7
|
module Molecules
|
|
6
8
|
class TmuxWindowOpener
|
|
7
|
-
def initialize(tmux_window_command: nil)
|
|
9
|
+
def initialize(tmux_window_command: nil, tmux_executor: nil)
|
|
8
10
|
@tmux_window_command = tmux_window_command || Ace::Tmux::CLI::Commands::Window.new
|
|
11
|
+
@tmux_executor = tmux_executor || Ace::Tmux::Molecules::TmuxExecutor.new
|
|
9
12
|
end
|
|
10
13
|
|
|
11
14
|
def open(worktree_path:, preset: nil)
|
|
15
|
+
ensure_session_exists
|
|
12
16
|
return if window_already_open?(worktree_path)
|
|
13
17
|
|
|
14
18
|
@tmux_window_command.call(
|
|
@@ -21,13 +25,21 @@ module Ace
|
|
|
21
25
|
|
|
22
26
|
private
|
|
23
27
|
|
|
28
|
+
def ensure_session_exists
|
|
29
|
+
session = ENV["ACE_TMUX_SESSION"]
|
|
30
|
+
return unless session && !session.empty?
|
|
31
|
+
return if @tmux_executor.capture(["tmux", "has-session", "-t", session]).success?
|
|
32
|
+
|
|
33
|
+
created = @tmux_executor.run(["tmux", "new-session", "-d", "-s", session])
|
|
34
|
+
raise "Failed to create tmux session '#{session}'" unless created
|
|
35
|
+
end
|
|
36
|
+
|
|
24
37
|
def window_already_open?(worktree_path)
|
|
25
38
|
session = ENV["ACE_TMUX_SESSION"]
|
|
26
39
|
return false unless session
|
|
27
40
|
|
|
28
|
-
name = File.basename(worktree_path.to_s)
|
|
29
|
-
|
|
30
|
-
result = executor.capture(["tmux", "list-windows", "-t", session, "-F", '#{window_name}'])
|
|
41
|
+
name = Ace::Tmux::Atoms::WindowNameSanitizer.call(File.basename(worktree_path.to_s))
|
|
42
|
+
result = @tmux_executor.capture(["tmux", "list-windows", "-t", session, "-F", '#{window_name}'])
|
|
31
43
|
return false unless result.success?
|
|
32
44
|
|
|
33
45
|
result.stdout.split("\n").any? { |w| w.strip == name }
|
|
@@ -54,7 +54,8 @@ module Ace
|
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
def assignment_info_to_h(info)
|
|
57
|
-
|
|
57
|
+
active_steps = info.queue_state.active_steps
|
|
58
|
+
next_step = active_steps.empty? ? info.queue_state.next_workable : nil
|
|
58
59
|
{
|
|
59
60
|
"assignment" => {
|
|
60
61
|
"id" => info.id,
|
|
@@ -65,10 +66,11 @@ module Ace
|
|
|
65
66
|
"total" => info.queue_state.summary[:total],
|
|
66
67
|
"done" => info.queue_state.summary[:done],
|
|
67
68
|
"failed" => info.queue_state.summary[:failed],
|
|
68
|
-
"
|
|
69
|
+
"active" => info.queue_state.summary[:active],
|
|
69
70
|
"pending" => info.queue_state.summary[:pending]
|
|
70
71
|
},
|
|
71
|
-
"
|
|
72
|
+
"active_steps" => active_steps.map(&:name),
|
|
73
|
+
"next_step" => next_step&.name
|
|
72
74
|
}
|
|
73
75
|
end
|
|
74
76
|
|
|
@@ -11,8 +11,8 @@ module Ace
|
|
|
11
11
|
task_loader: nil, config: nil, assignment_detector: nil)
|
|
12
12
|
@worktree_provisioner = worktree_provisioner || Molecules::WorktreeProvisioner.new
|
|
13
13
|
@tmux_window_opener = tmux_window_opener || Molecules::TmuxWindowOpener.new
|
|
14
|
-
@assignment_launcher = assignment_launcher || Molecules::AssignmentLauncher.new
|
|
15
14
|
@task_manager = task_loader || Ace::Task::Organisms::TaskManager.new
|
|
15
|
+
@assignment_launcher = assignment_launcher || Molecules::AssignmentLauncher.new(task_manager: @task_manager)
|
|
16
16
|
@config = config || Ace::Overseer.config
|
|
17
17
|
@assignment_detector = assignment_detector
|
|
18
18
|
end
|
|
@@ -70,9 +70,10 @@ module Ace
|
|
|
70
70
|
end
|
|
71
71
|
assignment_result = if existing
|
|
72
72
|
progress.call("Assignment already active: #{existing.dig("assignment", "id")}")
|
|
73
|
+
focused_step = existing.dig("focus_step", "number") || existing.dig("next_step", "number")
|
|
73
74
|
{
|
|
74
75
|
assignment_id: existing.dig("assignment", "id"),
|
|
75
|
-
first_step:
|
|
76
|
+
first_step: focused_step,
|
|
76
77
|
created: false
|
|
77
78
|
}
|
|
78
79
|
else
|
|
@@ -185,15 +186,29 @@ module Ace
|
|
|
185
186
|
Ace::Assign.reset_config!
|
|
186
187
|
executor = Ace::Assign::Organisms::AssignmentExecutor.new
|
|
187
188
|
result = executor.status
|
|
189
|
+
focus_step = result[:current]
|
|
190
|
+
next_step = result[:state].active_steps.empty? ? result[:state].next_workable : nil
|
|
188
191
|
{
|
|
189
192
|
"assignment" => {
|
|
190
193
|
"id" => result[:assignment].id,
|
|
191
194
|
"name" => result[:assignment].name,
|
|
192
195
|
"state" => result[:state].assignment_state.to_s
|
|
193
196
|
},
|
|
194
|
-
"
|
|
195
|
-
|
|
196
|
-
|
|
197
|
+
"active_steps" => result[:state].active_steps.map do |step|
|
|
198
|
+
{
|
|
199
|
+
"number" => step.number,
|
|
200
|
+
"name" => step.name
|
|
201
|
+
}
|
|
202
|
+
end,
|
|
203
|
+
"next_step" => if result[:state].active_steps.empty? && result[:state].next_workable
|
|
204
|
+
{
|
|
205
|
+
"number" => next_step.number,
|
|
206
|
+
"name" => next_step.name
|
|
207
|
+
}
|
|
208
|
+
end,
|
|
209
|
+
"focus_step" => focus_step && {
|
|
210
|
+
"number" => focus_step.number,
|
|
211
|
+
"name" => focus_step.name
|
|
197
212
|
}
|
|
198
213
|
}
|
|
199
214
|
rescue Ace::Assign::AssignmentErrors::NoActive
|
data/lib/ace/overseer/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ace-overseer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.15.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Michal Czyz
|
|
8
8
|
bindir: exe
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date: 2026-04-
|
|
10
|
+
date: 2026-04-26 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: ace-support-cli
|
|
@@ -71,14 +71,14 @@ dependencies:
|
|
|
71
71
|
requirements:
|
|
72
72
|
- - "~>"
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: '0.
|
|
74
|
+
version: '0.54'
|
|
75
75
|
type: :runtime
|
|
76
76
|
prerelease: false
|
|
77
77
|
version_requirements: !ruby/object:Gem::Requirement
|
|
78
78
|
requirements:
|
|
79
79
|
- - "~>"
|
|
80
80
|
- !ruby/object:Gem::Version
|
|
81
|
-
version: '0.
|
|
81
|
+
version: '0.54'
|
|
82
82
|
- !ruby/object:Gem::Dependency
|
|
83
83
|
name: ace-git
|
|
84
84
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -99,14 +99,14 @@ dependencies:
|
|
|
99
99
|
requirements:
|
|
100
100
|
- - "~>"
|
|
101
101
|
- !ruby/object:Gem::Version
|
|
102
|
-
version: '0.
|
|
102
|
+
version: '0.21'
|
|
103
103
|
type: :runtime
|
|
104
104
|
prerelease: false
|
|
105
105
|
version_requirements: !ruby/object:Gem::Requirement
|
|
106
106
|
requirements:
|
|
107
107
|
- - "~>"
|
|
108
108
|
- !ruby/object:Gem::Version
|
|
109
|
-
version: '0.
|
|
109
|
+
version: '0.21'
|
|
110
110
|
- !ruby/object:Gem::Dependency
|
|
111
111
|
name: ace-task
|
|
112
112
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -127,14 +127,14 @@ dependencies:
|
|
|
127
127
|
requirements:
|
|
128
128
|
- - "~>"
|
|
129
129
|
- !ruby/object:Gem::Version
|
|
130
|
-
version: '0.
|
|
130
|
+
version: '0.17'
|
|
131
131
|
type: :runtime
|
|
132
132
|
prerelease: false
|
|
133
133
|
version_requirements: !ruby/object:Gem::Requirement
|
|
134
134
|
requirements:
|
|
135
135
|
- - "~>"
|
|
136
136
|
- !ruby/object:Gem::Version
|
|
137
|
-
version: '0.
|
|
137
|
+
version: '0.17'
|
|
138
138
|
- !ruby/object:Gem::Dependency
|
|
139
139
|
name: ace-support-test-helpers
|
|
140
140
|
requirement: !ruby/object:Gem::Requirement
|