ace-overseer 0.25.1 → 0.26.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 +4 -4
- data/CHANGELOG.md +12 -0
- data/README.md +11 -0
- data/handbook/workflow-instructions/overseer.wf.md +16 -2
- data/lib/ace/overseer/cli/commands/observe.rb +24 -0
- data/lib/ace/overseer/cli.rb +3 -0
- data/lib/ace/overseer/molecules/event_observation.rb +33 -0
- data/lib/ace/overseer/version.rb +1 -1
- metadata +10 -14
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ec144ec980c58f2cf9fde48558e42ffdb7798d45c94897dcd28112d4cf348d1a
|
|
4
|
+
data.tar.gz: 95a59adbdc0244152f79c0d0cce6f4cd60e4b1a29b84e8a86d18ff3130a2c63c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 30b3626aaf30e4297b6000aa0f00cc32320fb0b0eedbb98c33e26f1f867a60690dfdc6b008bcc737b59b80e0c87b28c616450763ad8c3c7acad22809435aba54
|
|
7
|
+
data.tar.gz: 397b3f3774a3e3f6d80aacf41bd8b2da542ee7597c08d48ce4d876d89b3dcd852f2a879fcead3f9ee511ea6ae2593ae596fc96ef7a622aa36ba77e5369205c2e
|
data/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.26.1] - 2026-10-25
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Add the semantic wake contract for pending delivery answers to the overseer workflow (PR74): scoped watch, end-of-turn wait, wake reconciliation.
|
|
15
|
+
|
|
16
|
+
## [0.26.0] - 2026-10-23
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- Expose canonical report observation and adoption filtering for event-driven continuation without creating another state owner.
|
|
21
|
+
|
|
10
22
|
## [0.25.1] - 2026-10-20
|
|
11
23
|
|
|
12
24
|
### 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.
|
|
@@ -6,8 +6,8 @@ doc-type: workflow
|
|
|
6
6
|
title: Overseer Workflow
|
|
7
7
|
purpose: Binding process contract for the overseer lifecycle (work-on, status, prune) with executed-check contracts for prune safety and status truth.
|
|
8
8
|
ace-docs:
|
|
9
|
-
last-updated: '2026-
|
|
10
|
-
last-checked: '2026-
|
|
9
|
+
last-updated: '2026-10-23'
|
|
10
|
+
last-checked: '2026-10-23'
|
|
11
11
|
---
|
|
12
12
|
# Overseer Workflow
|
|
13
13
|
|
|
@@ -145,6 +145,20 @@ candidate:
|
|
|
145
145
|
operator; never silently drop it and never bypass a failed proof with
|
|
146
146
|
`--force`. Preserve on ambiguity.
|
|
147
147
|
|
|
148
|
+
### 4) Wait: pending answers use the semantic wake, never polling
|
|
149
|
+
|
|
150
|
+
While an answer is pending (for example a RubyGems OTP window of ~30-45 s
|
|
151
|
+
during publication), the supervising session registers exactly ONE
|
|
152
|
+
in-process `/watch` scoped to the project ace-hitl transport folder (the
|
|
153
|
+
folder holding that case's reply/request files, e.g. `.ace-local/hitl`),
|
|
154
|
+
then ends its turn. On wake: run the project `ace-hitl-hermes sync` ONCE,
|
|
155
|
+
reconcile the exact case state (`ace-hitl show <id>`: answered, not merely
|
|
156
|
+
replies>0), and act within the answer window or report the precise blocker.
|
|
157
|
+
Never block a model turn with sleep/poll loops, and never introduce
|
|
158
|
+
cron/systemd/external heartbeats - none exists and none may be added.
|
|
159
|
+
Observed defect (eyes-20261023 OTP wait): the supervising session blocked
|
|
160
|
+
its turn with a 36x sleep-8 poll loop.
|
|
161
|
+
|
|
148
162
|
## Non-Negotiable Contracts Summary
|
|
149
163
|
|
|
150
164
|
| Contract | Claim | Executed proof |
|
|
@@ -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
|
data/lib/ace/overseer/cli.rb
CHANGED
|
@@ -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
|
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.26.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Michal Czyz
|
|
8
8
|
bindir: exe
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date: 2026-10-
|
|
10
|
+
date: 2026-10-25 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:
|
|
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:
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|