ace-overseer 0.25.1 → 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: 4b30816c99a39ab2dad23a161794764d6ad7fc4eebd5309c0941b1b41972f992
4
- data.tar.gz: cfc7f540e1b925733144efbab0c4af6b28b1dfccd79bef2a42152a14f5bc5004
3
+ metadata.gz: 105fc700308987490a9f933ca8ce93eb6ce73a1322bd1892df9d7c7aaf94dd9f
4
+ data.tar.gz: 14574baa5c684cc096927171dbdae1fc2a3070939ad3160c1ace410c2304eae6
5
5
  SHA512:
6
- metadata.gz: 6d2099a61ef60bf8aa0608f5b6d9d122e9e2dd12f99e0c93103c1101acf80b505c77b8db0d3a676dbc53153da40c1bda71f3d8df1404e933b200510b44718d2d
7
- data.tar.gz: d6f7b7529144631552459798e2e53ecee291c68cafe32327160606e17f2745161e79d8c8ea73b623ea77679949af81fdecd96cebf601358e5cd5e350e311116a
6
+ metadata.gz: 66ee73e26f7a17d4d090d86e12b24e93292cefbddd44d11eb445297a2dab4e9f37a691b2aabc74e528d6715737046be4fd7296aa5a21cceaff97d8922807adbd
7
+ data.tar.gz: 88e2d7c66ec0d186a872c1deca9a47a2e0d0da984f122465029f627b46642def5a45363cf436b3f50111e85cf4ac53fb41d8174ef47cfcf8443e8dee1c15edfc
data/CHANGELOG.md CHANGED
@@ -7,6 +7,12 @@ 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
+
10
16
  ## [0.25.1] - 2026-10-20
11
17
 
12
18
  ### Fixed
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.
@@ -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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Ace
4
4
  module Overseer
5
- VERSION = "0.25.1"
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.1
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
@@ -139,34 +139,28 @@ dependencies:
139
139
  requirements:
140
140
  - - "~>"
141
141
  - !ruby/object:Gem::Version
142
- version: '0.5'
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: 0.6.1
142
+ version: 0.6.2
146
143
  type: :runtime
147
144
  prerelease: false
148
145
  version_requirements: !ruby/object:Gem::Requirement
149
146
  requirements:
150
147
  - - "~>"
151
148
  - !ruby/object:Gem::Version
152
- version: '0.5'
153
- - - ">="
154
- - !ruby/object:Gem::Version
155
- version: 0.6.1
149
+ version: 0.6.2
156
150
  - !ruby/object:Gem::Dependency
157
151
  name: ace-hitl
158
152
  requirement: !ruby/object:Gem::Requirement
159
153
  requirements:
160
154
  - - "~>"
161
155
  - !ruby/object:Gem::Version
162
- version: '0.23'
156
+ version: '0.24'
163
157
  type: :runtime
164
158
  prerelease: false
165
159
  version_requirements: !ruby/object:Gem::Requirement
166
160
  requirements:
167
161
  - - "~>"
168
162
  - !ruby/object:Gem::Version
169
- version: '0.23'
163
+ version: '0.24'
170
164
  - !ruby/object:Gem::Dependency
171
165
  name: ace-runtime
172
166
  requirement: !ruby/object:Gem::Requirement
@@ -235,14 +229,14 @@ dependencies:
235
229
  requirements:
236
230
  - - "~>"
237
231
  - !ruby/object:Gem::Version
238
- version: 0.62.0
232
+ version: 0.62.2
239
233
  type: :runtime
240
234
  prerelease: false
241
235
  version_requirements: !ruby/object:Gem::Requirement
242
236
  requirements:
243
237
  - - "~>"
244
238
  - !ruby/object:Gem::Version
245
- version: 0.62.0
239
+ version: 0.62.2
246
240
  - !ruby/object:Gem::Dependency
247
241
  name: ace-support-test-helpers
248
242
  requirement: !ruby/object:Gem::Requirement
@@ -337,6 +331,7 @@ files:
337
331
  - lib/ace/overseer/cli.rb
338
332
  - lib/ace/overseer/cli/commands/agents.rb
339
333
  - lib/ace/overseer/cli/commands/handoff.rb
334
+ - lib/ace/overseer/cli/commands/observe.rb
340
335
  - lib/ace/overseer/cli/commands/process_reports.rb
341
336
  - lib/ace/overseer/cli/commands/projects.rb
342
337
  - lib/ace/overseer/cli/commands/prune.rb
@@ -348,6 +343,7 @@ files:
348
343
  - lib/ace/overseer/models/work_context.rb
349
344
  - lib/ace/overseer/molecules/assignment_launcher.rb
350
345
  - lib/ace/overseer/molecules/assignment_prune_safety_checker.rb
346
+ - lib/ace/overseer/molecules/event_observation.rb
351
347
  - lib/ace/overseer/molecules/git_preservation_checker.rb
352
348
  - lib/ace/overseer/molecules/handoff_probe.rb
353
349
  - lib/ace/overseer/molecules/hitl_inbox.rb