ace-overseer 0.25.0 → 0.26.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c671f6791c3a1fc868e5aaa602140ed7fb70e6afbc1865650eb20c40d847ebcd
4
- data.tar.gz: 3ca93220672da054795c719797b8daa9730baa47a840fdbe1caad49097beea01
3
+ metadata.gz: 105fc700308987490a9f933ca8ce93eb6ce73a1322bd1892df9d7c7aaf94dd9f
4
+ data.tar.gz: 14574baa5c684cc096927171dbdae1fc2a3070939ad3160c1ace410c2304eae6
5
5
  SHA512:
6
- metadata.gz: ec96c284abc889beeaa32042d592307c6ed7aabd0c157f0c3fd1fd74e478bafbe1ff89d749dd0857f9770a2a8c7ed1d9993a86e92edd1723d3e4987ec459f1f3
7
- data.tar.gz: de556356bf1092727d848b271d867f06473980dab3450120632fac57cfc2443bdf59006ab63ed3a61ff96e45b3f624b04ca04ef26b014f0a57a5fc24c4e97940
6
+ metadata.gz: 66ee73e26f7a17d4d090d86e12b24e93292cefbddd44d11eb445297a2dab4e9f37a691b2aabc74e528d6715737046be4fd7296aa5a21cceaff97d8922807adbd
7
+ data.tar.gz: 88e2d7c66ec0d186a872c1deca9a47a2e0d0da984f122465029f627b46642def5a45363cf436b3f50111e85cf4ac53fb41d8174ef47cfcf8443e8dee1c15edfc
data/CHANGELOG.md CHANGED
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.26.0] - 2026-10-23
11
+
12
+ ### Added
13
+
14
+ - Expose canonical report observation and adoption filtering for event-driven continuation without creating another state owner.
15
+
16
+ ## [0.25.1] - 2026-10-20
17
+
18
+ ### Fixed
19
+ - Preserve installed toolchain selection in next-role handoff commands.
20
+
10
21
 
11
22
  ## [0.25.0] - 2026-10-20
12
23
 
data/README.md CHANGED
@@ -98,3 +98,14 @@ or create your own.
98
98
 
99
99
  ---
100
100
  [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)
101
+
102
+ ### Read-only event observation
103
+
104
+ `ace-overseer observe --owner self --scope all --limit 500` combines the HITL
105
+ owner's semantic incoming-event projection with canonical report adoption from
106
+ the existing private task tree. `self` must be a configured HITL recipient alias.
107
+ The JSON contains `events` requiring reconciliation and `settled` revisions whose
108
+ matched managing tree is fully terminal (including archived managers). Recorded
109
+ reports on active managers remain eligible: adoption does not prove continuation.
110
+ No report, task, assignment, worktree, process or external operation is mutated.
111
+ Pi eyes uses this view, then the agent uses normal `process-reports` gates.
@@ -56,7 +56,7 @@ module Ace
56
56
  end
57
57
 
58
58
  puts "Handoff ready. In the worktree terminal run:"
59
- puts " ace-coworker start --config #{next_leg["start_config"]}"
59
+ puts " #{Ace::Support::Cli::Toolchain.shell_command("ace-coworker", "start", "--config", next_leg["start_config"])}"
60
60
  rescue Ace::Support::Cli::Error
61
61
  raise
62
62
  rescue => e
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+ require "json"
3
+ require_relative "../../molecules/event_observation"
4
+ module Ace
5
+ module Overseer
6
+ module CLI
7
+ module Commands
8
+ class Observe < Ace::Support::Cli::Command
9
+ desc "Read incoming semantic revisions requiring owner reconciliation; no effects"
10
+ option :owner, type: :string, required: true, desc: "Configured HITL recipient for this observer"
11
+ option :scope, type: :string, default: "current", desc: "current or all linked worktrees"
12
+ option :limit, type: :integer, default: 500, desc: "Maximum canonical events"
13
+ def call(owner:, scope: "current", limit: 500, **)
14
+ raise Ace::Support::Cli::Error, "invalid scope" unless %w[current all].include?(scope)
15
+ puts JSON.generate(Molecules::EventObservation.new.call(owner: owner, scope: scope, limit: limit))
16
+ rescue ArgumentError, Ace::Hitl::Molecules::HitlAddressResolver::UnknownRecipientError,
17
+ Ace::Hitl::Molecules::HitlAddressResolver::InvalidAddressError => e
18
+ raise Ace::Support::Cli::Error, e.message
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -6,6 +6,7 @@ require_relative "cli/commands/work_on"
6
6
  require_relative "cli/commands/handoff"
7
7
  require_relative "cli/commands/process_reports"
8
8
  require_relative "cli/commands/status"
9
+ require_relative "cli/commands/observe"
9
10
  require_relative "cli/commands/prune"
10
11
  require_relative "cli/commands/projects"
11
12
  require_relative "cli/commands/agents"
@@ -21,6 +22,7 @@ module Ace
21
22
  ["work-on", "Start local task work"],
22
23
  ["handoff", "Hand the task worktree to the next role"],
23
24
  ["process-reports", "Process ace-hitl reports and continue the queue"],
25
+ ["observe", "Read semantic events needing reconciliation"],
24
26
  ["status", "Show status of task worktrees"],
25
27
  ["prune", "Remove stale task worktrees"],
26
28
  ["projects", "List visible public projects"],
@@ -38,6 +40,7 @@ module Ace
38
40
  register "work-on", Commands::WorkOn
39
41
  register "handoff", Commands::Handoff
40
42
  register "process-reports", Commands::ProcessReports
43
+ register "observe", Commands::Observe
41
44
  register "status", Commands::Status
42
45
  register "prune", Commands::Prune
43
46
  register "projects", Commands::Projects
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+ require "ace/hitl/molecules/event_observation"
3
+
4
+ module Ace
5
+ module Overseer
6
+ module Molecules
7
+ # Read-only adoption filter. HITL owns semantic revisions; the existing
8
+ # private task tree owns report adoption and continuation, never this view.
9
+ class EventObservation
10
+ def initialize(hitl: nil, task_manager: nil)
11
+ @hitl = hitl || Ace::Hitl::Molecules::EventObservation.new
12
+ @tasks = task_manager || Ace::Task::Organisms::TaskManager.new
13
+ end
14
+
15
+ def call(owner:, scope: "current", limit: 500)
16
+ projection = @hitl.call(owner: owner, scope: scope, limit: limit)
17
+ managers = @tasks.list(in_folder: "all").select { |task| !task.metadata["project_task"].to_s.empty? }
18
+ settled, pending = projection.fetch("events").partition do |event|
19
+ next false unless event["type"] == "report"
20
+ verdict = Atoms::ReportInterpretation.evaluate(event: event, managers: managers)
21
+ next false unless verdict[:status] == :duplicate
22
+ manager = managers.find { |task| task.id.to_s == verdict[:manager_ref] }
23
+ # A persisted report alone is not proof its continuation ran. Keep
24
+ # active managers eligible after restart; their existing gates reconcile
25
+ # the same attempt. Only completed trees suppress historical reports.
26
+ manager && ([manager] + Array(manager.subtasks)).all? { |task| Ace::Task::Atoms::TaskValidationRules.terminal_status?(task.status.to_s) }
27
+ end
28
+ projection.merge("events" => pending, "settled" => settled)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -159,7 +159,7 @@ module Ace
159
159
  # guess, and so does this description).
160
160
  def start_command_of(next_leg)
161
161
  config = next_leg.is_a?(Hash) ? next_leg["start_config"].to_s : ""
162
- config.empty? ? nil : "ace-coworker start --config #{config}"
162
+ config.empty? ? nil : Ace::Support::Cli::Toolchain.shell_command("ace-coworker", "start", "--config", config)
163
163
  end
164
164
 
165
165
  # First non-terminal step (id order) whose recorded dependencies
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Ace
4
4
  module Overseer
5
- VERSION = "0.25.0"
5
+ VERSION = "0.26.0"
6
6
  end
7
7
  end
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.25.0
4
+ version: 0.26.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michal Czyz
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2026-10-20 00:00:00.000000000 Z
10
+ date: 2026-10-23 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: ace-support-cli
@@ -16,6 +16,9 @@ dependencies:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
18
  version: '0.6'
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: 0.6.10
19
22
  type: :runtime
20
23
  prerelease: false
21
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -23,6 +26,9 @@ dependencies:
23
26
  - - "~>"
24
27
  - !ruby/object:Gem::Version
25
28
  version: '0.6'
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: 0.6.10
26
32
  - !ruby/object:Gem::Dependency
27
33
  name: ace-support-core
28
34
  requirement: !ruby/object:Gem::Requirement
@@ -72,6 +78,9 @@ dependencies:
72
78
  - - "~>"
73
79
  - !ruby/object:Gem::Version
74
80
  version: '0.70'
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: 0.73.1
75
84
  type: :runtime
76
85
  prerelease: false
77
86
  version_requirements: !ruby/object:Gem::Requirement
@@ -79,6 +88,9 @@ dependencies:
79
88
  - - "~>"
80
89
  - !ruby/object:Gem::Version
81
90
  version: '0.70'
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: 0.73.1
82
94
  - !ruby/object:Gem::Dependency
83
95
  name: ace-git
84
96
  requirement: !ruby/object:Gem::Requirement
@@ -127,28 +139,28 @@ dependencies:
127
139
  requirements:
128
140
  - - "~>"
129
141
  - !ruby/object:Gem::Version
130
- version: '0.5'
142
+ version: 0.6.2
131
143
  type: :runtime
132
144
  prerelease: false
133
145
  version_requirements: !ruby/object:Gem::Requirement
134
146
  requirements:
135
147
  - - "~>"
136
148
  - !ruby/object:Gem::Version
137
- version: '0.5'
149
+ version: 0.6.2
138
150
  - !ruby/object:Gem::Dependency
139
151
  name: ace-hitl
140
152
  requirement: !ruby/object:Gem::Requirement
141
153
  requirements:
142
154
  - - "~>"
143
155
  - !ruby/object:Gem::Version
144
- version: '0.23'
156
+ version: '0.24'
145
157
  type: :runtime
146
158
  prerelease: false
147
159
  version_requirements: !ruby/object:Gem::Requirement
148
160
  requirements:
149
161
  - - "~>"
150
162
  - !ruby/object:Gem::Version
151
- version: '0.23'
163
+ version: '0.24'
152
164
  - !ruby/object:Gem::Dependency
153
165
  name: ace-runtime
154
166
  requirement: !ruby/object:Gem::Requirement
@@ -184,6 +196,9 @@ dependencies:
184
196
  - - "~>"
185
197
  - !ruby/object:Gem::Version
186
198
  version: '0.6'
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: 0.8.1
187
202
  type: :runtime
188
203
  prerelease: false
189
204
  version_requirements: !ruby/object:Gem::Requirement
@@ -191,6 +206,9 @@ dependencies:
191
206
  - - "~>"
192
207
  - !ruby/object:Gem::Version
193
208
  version: '0.6'
209
+ - - ">="
210
+ - !ruby/object:Gem::Version
211
+ version: 0.8.1
194
212
  - !ruby/object:Gem::Dependency
195
213
  name: ace-lab
196
214
  requirement: !ruby/object:Gem::Requirement
@@ -211,14 +229,14 @@ dependencies:
211
229
  requirements:
212
230
  - - "~>"
213
231
  - !ruby/object:Gem::Version
214
- version: 0.62.0
232
+ version: 0.62.2
215
233
  type: :runtime
216
234
  prerelease: false
217
235
  version_requirements: !ruby/object:Gem::Requirement
218
236
  requirements:
219
237
  - - "~>"
220
238
  - !ruby/object:Gem::Version
221
- version: 0.62.0
239
+ version: 0.62.2
222
240
  - !ruby/object:Gem::Dependency
223
241
  name: ace-support-test-helpers
224
242
  requirement: !ruby/object:Gem::Requirement
@@ -313,6 +331,7 @@ files:
313
331
  - lib/ace/overseer/cli.rb
314
332
  - lib/ace/overseer/cli/commands/agents.rb
315
333
  - lib/ace/overseer/cli/commands/handoff.rb
334
+ - lib/ace/overseer/cli/commands/observe.rb
316
335
  - lib/ace/overseer/cli/commands/process_reports.rb
317
336
  - lib/ace/overseer/cli/commands/projects.rb
318
337
  - lib/ace/overseer/cli/commands/prune.rb
@@ -324,6 +343,7 @@ files:
324
343
  - lib/ace/overseer/models/work_context.rb
325
344
  - lib/ace/overseer/molecules/assignment_launcher.rb
326
345
  - lib/ace/overseer/molecules/assignment_prune_safety_checker.rb
346
+ - lib/ace/overseer/molecules/event_observation.rb
327
347
  - lib/ace/overseer/molecules/git_preservation_checker.rb
328
348
  - lib/ace/overseer/molecules/handoff_probe.rb
329
349
  - lib/ace/overseer/molecules/hitl_inbox.rb