ace-overseer 0.23.1 → 0.25.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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.ace-defaults/overseer/config.yml +9 -0
  3. data/CHANGELOG.md +24 -813
  4. data/README.md +60 -42
  5. data/docs/getting-started.md +9 -4
  6. data/docs/handbook.md +1 -18
  7. data/docs/usage.md +297 -209
  8. data/handbook/workflow-instructions/overseer/queue.wf.md +210 -0
  9. data/handbook/workflow-instructions/overseer.wf.md +17 -32
  10. data/lib/ace/overseer/atoms/dependency_readiness.rb +48 -0
  11. data/lib/ace/overseer/atoms/handoff_readiness.rb +75 -0
  12. data/lib/ace/overseer/atoms/report_interpretation.rb +236 -0
  13. data/lib/ace/overseer/atoms/status_formatter.rb +0 -1
  14. data/lib/ace/overseer/cli/commands/handoff.rb +69 -0
  15. data/lib/ace/overseer/cli/commands/process_reports.rb +50 -0
  16. data/lib/ace/overseer/cli/commands/prune.rb +3 -50
  17. data/lib/ace/overseer/cli/commands/status.rb +8 -55
  18. data/lib/ace/overseer/cli/commands/work_on.rb +6 -50
  19. data/lib/ace/overseer/cli.rb +10 -14
  20. data/lib/ace/overseer/models/assignment_prune_candidate.rb +5 -5
  21. data/lib/ace/overseer/models/prune_candidate.rb +5 -5
  22. data/lib/ace/overseer/molecules/assignment_prune_safety_checker.rb +22 -84
  23. data/lib/ace/overseer/molecules/git_preservation_checker.rb +33 -21
  24. data/lib/ace/overseer/molecules/handoff_probe.rb +101 -0
  25. data/lib/ace/overseer/molecules/hitl_inbox.rb +43 -0
  26. data/lib/ace/overseer/molecules/prune_safety_checker.rb +43 -88
  27. data/lib/ace/overseer/molecules/worktree_context_collector.rb +4 -18
  28. data/lib/ace/overseer/organisms/handoff_orchestrator.rb +122 -0
  29. data/lib/ace/overseer/organisms/prune_orchestrator.rb +1 -1
  30. data/lib/ace/overseer/organisms/report_processor.rb +241 -0
  31. data/lib/ace/overseer/organisms/status_attention.rb +306 -0
  32. data/lib/ace/overseer/organisms/status_collector.rb +266 -2
  33. data/lib/ace/overseer/organisms/status_sources.rb +276 -0
  34. data/lib/ace/overseer/organisms/work_on_orchestrator.rb +49 -9
  35. data/lib/ace/overseer/version.rb +1 -1
  36. data/lib/ace/overseer.rb +12 -1
  37. metadata +44 -25
  38. data/handbook/skills/as-overseer-configure-project/SKILL.md +0 -32
  39. data/handbook/workflow-instructions/overseer/configure-project.wf.md +0 -238
  40. data/handbook/workflow-instructions/overseer/maintain-continuation.wf.md +0 -115
  41. data/handbook/workflow-instructions/roles/lab-coordinator.wf.md +0 -106
  42. data/handbook/workflow-instructions/roles/project-overseer.wf.md +0 -182
  43. data/handbook/workflow-instructions/roles/second-commander.wf.md +0 -95
  44. data/lib/ace/overseer/cli/commands/ordinary.rb +0 -37
  45. data/lib/ace/overseer/cli/commands/prompt.rb +0 -63
  46. data/lib/ace/overseer/cli/commands/review.rb +0 -44
  47. data/lib/ace/overseer/cli/commands/stop.rb +0 -33
  48. data/lib/ace/overseer/molecules/launch_request.rb +0 -216
  49. data/lib/ace/overseer/molecules/original_launch_child.rb +0 -165
  50. data/lib/ace/overseer/molecules/proposal_tick.rb +0 -56
  51. data/lib/ace/overseer/molecules/protected_selection.rb +0 -46
  52. data/lib/ace/overseer/organisms/launch_recovery.rb +0 -65
  53. data/lib/ace/overseer/organisms/ordinary_work_on.rb +0 -186
  54. data/lib/ace/overseer/organisms/protected_prune.rb +0 -116
  55. data/lib/ace/overseer/organisms/protected_review.rb +0 -167
  56. data/lib/ace/overseer/organisms/protected_status.rb +0 -157
  57. data/lib/ace/overseer/organisms/protected_steering.rb +0 -78
  58. data/lib/ace/overseer/organisms/protected_work_on.rb +0 -102
data/CHANGELOG.md CHANGED
@@ -7,832 +7,43 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ## [0.23.1] - 2026-10-17
11
10
 
12
- ### Changed
13
-
14
- - Adapt status and prune collection to `ace-git-worktree`'s inventory-based
15
- `list_all` (no `show_tasks:` argument) after the 0.27 active-worktree listing
16
- rework, and raise the dependency floor to `ace-git-worktree ~> 0.27` so
17
- overseer stays aligned with the current worktree minor release line.
18
-
19
- ## [0.23.0] - 2026-10-16
20
-
21
- ### Added
22
-
23
- - Add explicit ordinary preparation/launch/resume using existing worktree, native pane and provider mechanisms. Preserve original identities and dispatch intent on response loss; use native filesystem watches only as canonical-inspection hints.
24
-
25
- ### Changed
26
-
27
- - Follow ace-review 0.61 campaign head-assessment contracts (dependency floor).
28
-
29
- ## [0.22.0] - 2026-10-16
30
-
31
- ### Added
32
-
33
- - Package native continuation duties with ten-minute progress and hourly cleanup audits, exact session restoration, independent project progress and explicit unknown outcomes. Align role workflows with canonical Assign ownership and accepted-head review.
34
-
35
- ## [0.21.1] - 2026-10-14
36
-
37
- ### Changed
38
-
39
- - Package the coordination-contract role-guide updates in the project-overseer and configure-project workflows: serial preparation and serial integration per delivery candidate, queue-item closure as reconciled merge receipt, release-batch lifecycle with separate publication authority, and overseer-owned close-on-accept for delegated panes and worktabs.
40
- - Follow the ace-lab 0.6 producer line in the dependency manifest; no code or behavior change (constraint-only correction so the coordinated h8x graph resolves).
41
-
42
- ## [0.21.0] - 2026-10-12
43
-
44
- ### Added
45
-
46
- - Add the `as-overseer-configure-project` skill and packaged `wfi://overseer/configure-project` workflow for idempotent, customization-preserving delivery supervision adaptation.
47
-
48
- ## [0.20.2] - 2026-10-10
49
-
50
- ### Fixed
51
-
52
- - Require the published producer and consumer patch versions containing the protected context and managed-attempt APIs; exclude incompatible prior dependency graphs.
53
-
54
- ## [0.20.1] - 2026-10-08
55
-
56
- ### Changed
57
-
58
- - Require the coordinated Assign, Herdr, Lab and Review producer versions for ordinary CLI worker launch and current protected delivery contracts.
59
-
60
- - Repair protected work-on composition fixtures to retain the originally provisioned workspace lifecycle resource, exercise the real worker reader, and return the simulated fork before post-readiness steering without changing product admission.
61
-
62
- - Route protected delivery through original worker merge request, canonical status and exact result consumption while preserving ordinary delivery and unresolved protected PR policy.
63
-
64
-
65
- ### Added
66
-
67
- - Consume protected prune preview through the fixed service receiver, persist its complete result for explicitly authorized apply, and query canonical service status without repeating cleanup.
68
-
69
- - Package canonical project-overseer, Lab coordinator and second-commander role workflows with scoped authority, responsive delegation and the existing confirmed-delivery decision policy.
70
-
71
- - Execute protected candidate review through original launcher delegation, immutable Git snapshot, the maintained review engine and canonical receipt acceptance; expose explicit status/cancel modes without labd forwarding or automatic replay.
72
-
73
- - Discover protected project assignments through the actual authority inventory and public topology, preserving pinned pages, restart metadata and partial visibility without a local-journal fallback or proposal effects during status reads.
74
-
75
- ## [0.20.0] - 2026-10-05
76
-
77
- ### Added
78
-
79
- - Resolve immutable second-commander proposals through confirmed-delivery sixteen-hour policy and canonical Assign authorization.
80
- - Expose assignment recovery liveness/reasons and show unreadable evidence as unknown rather than omitting it.
81
-
82
- ### Fixed
83
-
84
- - Expose deferred proposal ticks in Lab status diagnostics and object JSON while preserving status availability and array output.
85
-
86
- - Keep watch/status alive on proposal tick failure and queue project-scoped HITL reconciliation under the proposer identity.
87
-
88
- ### Changed
89
-
90
- - Declare the required direct dependencies and minimum producer versions for this coordinated release: `ace-assign ~> 0.64`, `ace-git ~> 0.29`, `ace-git-worktree ~> 0.26`, `ace-herdr ~> 0.4`.
91
-
92
- ## [0.19.1] - 2026-10-04
93
-
94
- ### Changed
95
-
96
- - Install both Herdr and tmux runtime adapters for standalone runtime switching, through an acyclic dependency graph.
97
-
98
- ## [0.19.0] - 2026-10-04
99
-
100
- ### Added
101
- - Work-on and prune manage worktree windows through the `ace-runtime` contract (`TmuxWindowOpener` replaced by `WindowOpener`); the terminal runtime comes from the new `runtime:` config key (`tmux` | `herdr` | `auto`; `ACE_RUNTIME` env wins, detection as fallback, explicit fail when nothing is live).
102
- - Config key `tmux_window_presets` renamed to `window_presets` (no legacy alias, ADR-024); "tmux window" progress text is runtime-neutral.
103
- - New dependency: `ace-runtime` (~> 0.1); `ace-tmux` is kept to install the tmux adapter.
104
-
105
- ## [0.18.2] - 2026-10-02
106
-
107
- ### Technical
108
- - Follow the ace-assign 0.61 release line for journal-backed service effects.
109
- - Updated the ace-tmux dependency to the 0.18 adapter release line.
110
-
111
- ## [0.18.1] - 2026-10-01
112
-
113
- ### Technical
114
- - Follow the ace-assign 0.60 release line for durable review campaign evidence.
115
-
116
- ## [0.18.0] - 2026-09-29
117
-
118
- ### Added
119
- - Preservation manifest for prune: `ace-overseer prune --preservation FILE` accepts a strict `version: 1` YAML manifest declaring cross-repository destinations (source repo/base/head, destination repo/base/head/branch); entries are resolved to exact commits, and duplicate, self-destination, or unmatched entries fail before any apply action.
120
- - Git preservation proofs on the actual prune path: accepted-ancestor containment against the surviving base branch, or verified-destination proof by full-tree equality or exact path-by-path transition (paths, modes, symlinks, binary content) across separate bases. Patch-range proofs require the independently recorded attempt baseline (`base_head`), and the baseline itself must survive on an accepted ref; empty or truncated ranges are never proof.
121
- - Fail-closed Lab prune classification: `ace-overseer prune WORK --runtime lab` requires an authoritative terminal Work state plus preservation data (`repo`/`head`/`branch`) provable in the hosted repository; apply re-reads state immediately before `lab work destroy` and blocked Works are never destroyed.
122
-
123
- ### Changed
124
- - BREAKING: `--force` no longer removes unsafe worktrees; it only skips the confirmation for already-safe candidates. Missing, failed or ambiguous preservation evidence, dirty tracked or untracked files, active or uncertain attempts, unreadable lifecycle state, and failed rechecks now always block deletion -- including under `--yes` and `--quiet`.
125
- - Prune preview is read-only (no stale-metadata mutation); apply holds a durable lifecycle exclusion shared with assignment/driver/work-on start paths from final evidence reads through removal, deletes the worktree without force or untracked suppression, and deletes the branch only after re-verifying its tip identity. Removal is recorded so later starts fail closed instead of recreating a deleted identity.
126
- - Assignment cache prune requires the durable evidence ref (`refs/ace/execution`, never deleted) to confirm every attempt terminal for managed assignments; only the assignment cache directory is removed.
127
- - Unmatched explicit prune targets are errors, apply exits nonzero when any candidate is blocked or removal fails (independent safe candidates still complete), quiet mode suppresses progress but never failure signaling, and dry-run performs the same proof classification with no cleanup side effects.
128
-
129
- ## [0.17.0] - 2026-09-29
130
-
131
- ### Added
132
- - Added an explicit Lab runtime adapter for listing projects and agents, preparing and dispatching Works, forwarding prompts over stdin, starting exact-head reviews, and stopping workers.
133
- - Added installed-consumer probe coverage: the suite builds the current gem artifacts, installs them into an isolated consumer environment (fresh gem home, unrelated cwd, sanitized HOME), and proves `ace-nav resolve wfi://overseer` and `ace-bundle wfi://overseer` succeed from packaged content only, with a registration-removal fixture proving the probe detects masking.
134
-
135
- ### Changed
136
- - Kept tmux as the default runtime while allowing `work-on`, `status`, and dry-run `prune` to delegate through the system-owned `/usr/local/bin/lab` boundary.
137
- - Strengthened the overseer prune-safety contract: migrated-work preservation now requires a declared, verified destination plus tree/artifact or patch equivalence (the subject-only successor search is gone), plus a positive executed no-active-writer check from overseer/assignment/Lab status; ambiguity preserves.
138
-
139
-
140
- ## [0.16.0] - 2026-09-20
141
-
142
- ### Added
143
- - Shipped the overseer lifecycle workflow so `wfi://overseer` resolves for gem consumers: the gem now registers `.ace-defaults/nav/protocols/wfi-sources/ace-overseer.yml` (ace-hitl pattern) and ships real workflow instructions for `work-on`, `status`, and `prune` in `handbook/workflow-instructions/overseer.wf.md`, with prune-safety and status-truth executed-check contracts as first-class non-negotiable steps.
144
- - Added a packaging test proving the built gem ships both the workflow-instructions payload and the wfi source registration so a future gemspec glob change cannot silently drop them.
145
-
146
- ## [0.15.6] - 2026-09-02
147
-
148
- ### Technical
149
- - Included in the coordinated all-package patch release preparation for ACE monorepo review.
150
- ## [0.15.5] - 2026-08-12
151
-
152
- ### Technical
153
- - Raised the `ace-support-core` dependency floor to `~> 0.31` after the principles-first bootstrap guidance release.
154
- ## [0.15.4] - 2026-08-12
155
-
156
- ### Fixed
157
- - Updated the `ace-tmux` runtime dependency constraint to `~> 0.17` so overseer stays compatible with the current tmux runtime control release line.
158
-
159
- ### Technical
160
- - Aligned gemspec dependency floors with current ACE package minor release lines and safe external minor dependency bumps (no major version jumps).
161
-
162
- ## [0.15.3] - 2026-04-23
163
-
164
- ### Technical
165
- - 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.
166
-
167
- ## [0.15.2] - 2026-04-23
168
-
169
- ### Technical
170
- - 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.
171
-
172
- ## [0.15.1] - 2026-04-23
173
-
174
- ### Technical
175
- - Updated the `ace-git-worktree` runtime dependency constraint to `~> 0.21` so overseer stays aligned with the current worktree minor release line.
176
-
177
- ## [0.15.0] - 2026-04-23
178
-
179
- ### Changed
180
- - 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.
181
- - 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.
182
-
183
- ## [0.14.14] - 2026-04-23
184
-
185
-
186
- ### Changed
187
- - Reworked tmux window-open behavior to align with shared session targeting and reduce ambiguity when launching and reusing worktree windows.
188
- - Updated overseer tmux-window coverage to verify the current session/window lifecycle against the improved launcher behavior.
189
-
190
-
191
- ## [0.14.13] - 2026-04-22
192
-
193
- ### Fixed
194
- - Matched existing tmux windows through the shared `ace-tmux` sanitized window-name policy so worktrees with punctuation are not reopened under duplicate names.
195
-
196
- ## [0.14.12] - 2026-04-19
197
-
198
- ### Technical
199
- - 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.
200
-
201
- ## [0.14.11] - 2026-04-18
202
-
203
- ### Technical
204
- - 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.
205
-
206
- ## [0.14.10] - 2026-04-16
207
-
208
- ### Fixed
209
- - 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.
210
-
211
- ## [0.14.9] - 2026-04-16
212
-
213
- ### Fixed
214
- - 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.
215
-
216
- ## [0.14.8] - 2026-04-16
217
-
218
- ### Fixed
219
- - 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.
220
-
221
- ## [0.14.7] - 2026-04-16
222
-
223
- ### Fixed
224
- - 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.
225
-
226
- ## [0.14.6] - 2026-04-15
227
-
228
- ### Changed
229
- - 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.
230
- - Added `TS-OVERSEER-002` status-and-operations coverage with watch-refresh and multi-task bundle journeys.
231
- - Updated `docs/usage.md` with explicit public verification paths for preset override, idempotent rerun, and minimal prune lifecycle checks.
232
-
233
- ### Fixed
234
- - Updated the `ace-assign` runtime dependency constraint to `~> 0.53` so overseer remains aligned with the current assign minor release line.
235
-
236
- ## [0.14.4] - 2026-04-13
237
-
238
- ### Fixed
239
- - 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.
240
-
241
- ## [0.14.3] - 2026-04-13
242
-
243
- ### Fixed
244
- - 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.
245
-
246
- ## [0.14.2] - 2026-04-13
247
-
248
- ### Fixed
249
- - Updated the `ace-assign` runtime dependency constraint to `~> 0.49` so overseer remains compatible with the new assign minor release line.
250
-
251
- ## [0.14.1] - 2026-04-13
252
-
253
- ### Changed
254
- - Completed the batch i05 migration follow-through for this package and aligned it with the restarted `fast` / `feat` / `e2e` verification model.
255
-
256
- ### Technical
257
- - Included in the coordinated assignment-driven patch release for batch i05 package updates.
258
-
259
-
260
- ## [0.14.0] - 2026-04-12
261
-
262
- ### Changed
263
- - Migrated package tests to the `fast` / `feat` / `e2e` model by moving deterministic coverage from `test/{atoms,commands,models,molecules,organisms}` into `test/fast/*`.
264
- - Added E2E migration decision tracking for `TS-OVERSEER-001` via `test/e2e/TS-OVERSEER-001-overseer-workflow/e2e-decision-record.md`.
265
- - 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`.
266
-
267
- ### Fixed
268
- - Hardened `TS-OVERSEER-001` sandbox setup by loading `mise.toml` from `${ACE_E2E_SOURCE_ROOT:-$PROJECT_ROOT_PATH}`.
269
- - 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.
270
-
271
- ## [0.13.12] - 2026-04-12
272
-
273
- ### Fixed
274
- - Updated the `ace-git-worktree` runtime dependency constraint to `~> 0.20` so overseer remains compatible with the new worktree minor release line.
275
-
276
- ## [0.13.11] - 2026-04-11
277
-
278
- ### Fixed
279
- - Updated the `ace-assign` runtime dependency constraint to `~> 0.47` so overseer remains compatible with the latest assign minor release line.
280
-
281
- ## [0.13.10] - 2026-04-07
282
-
283
- ### Fixed
284
- - Updated the `ace-assign` runtime dependency constraint to `~> 0.44` so overseer remains compatible with the new assign minor release line.
285
-
286
- ## [0.13.9] - 2026-04-01
287
-
288
- ### Fixed
289
- - Updated the `ace-assign` runtime dependency constraint to `~> 0.42` so overseer remains compatible with the new assign minor release line.
290
-
291
- ## [0.13.8] - 2026-03-29
292
-
293
- ### Technical
294
- - Normalized published gem metadata so RubyGems and Ruby Toolbox use current release information instead of the 1980 fallback date.
295
-
296
- ## [0.13.7] - 2026-03-29
297
-
298
- ### Fixed
299
- - Bumped the `ace-git` runtime dependency constraint to `~> 0.19` so ace-overseer stays aligned with the current git workflow release.
300
-
301
- ## [0.13.6] - 2026-03-29
302
-
303
- ### Fixed
304
- - Updated the `ace-assign` runtime dependency constraint to `~> 0.41` to stay aligned with the current released assign API.
305
-
306
- ## [0.13.5] - 2026-03-29
307
-
308
- ### Technical
309
- - Register package-level `.ace-defaults` skill-sources for ace-overseer to enable canonical skill discovery in fresh installs.
310
-
311
- ## [0.13.4] - 2026-03-29
312
-
313
- ### Fixed
314
- - Bumped dependency constraints to currently available `~>` ranges on RubyGems and updated release metadata after dependency synchronization.
315
-
316
- ## [0.13.3] - 2026-03-28
317
-
318
- ### Fixed
319
- - Added an explicit git-repository guard for operational commands so `work-on`, `status`, and `prune` fail cleanly outside a repo or worktree instead of leaking raw `git` errors.
320
-
321
- ### Technical
322
- - Added command coverage for non-repo failure paths and updated launcher fixtures to initialize real git repos in temporary worktree test directories.
323
-
324
- ## [0.13.2] - 2026-03-27
325
-
326
- ### Fixed
327
- - Preserved taskref-only preset compatibility by collapsing launcher task refs to the primary task when a preset does not declare `taskrefs`.
328
-
329
- ## [0.13.1] - 2026-03-27
330
-
331
- ### Fixed
332
- - Updated work-on preset guard checks to evaluate active resolved refs after terminal filtering, preventing false single-task preset rejections on mixed terminal/non-terminal inputs.
333
- - Preserved parent refs during taskref expansion when all subtasks are terminal, preventing empty expansion results from valid parent-task inputs.
334
-
335
- ## [0.13.0] - 2026-03-27
336
-
337
- ### Changed
338
- - Routed `ace-overseer work-on` assignment launch through the shared `ace-assign create --task ...` creation path while preserving the existing CLI and pre-side-effect validation behavior.
339
- - Updated package docs to describe the shared task-driven assignment creation flow with `ace-assign`.
340
-
341
- ### Technical
342
- - Added launcher and orchestrator coverage for the shared creator path and explicit task fixture resolution.
343
-
344
- ## [0.12.1] - 2026-03-26
345
-
346
- ### Fixed
347
- - Tightened `ace-assign` gemspec constraint from `~> 0.16` to `~> 0.38` to match the runtime dependency introduced in v0.12.0.
348
-
349
- ## [0.12.0] - 2026-03-26
11
+ ## [0.25.0] - 2026-10-20
350
12
 
351
13
  ### Added
352
- - Terminal task filtering in `WorkOnOrchestrator`: tasks with `done`, `skipped`, or `cancelled` status are automatically excluded before assignment creation, with user-visible skip reporting via progress callbacks.
353
14
 
354
- ### Changed
355
- - `resolve_requested_refs` now returns skipped terminal refs alongside resolved refs, raising an error when all requested refs are terminal.
356
- - `expand_task_refs_in_order` and `extract_subtask_refs` filter out terminal subtasks during parent-to-subtask expansion.
15
+ - Add the derived attention section to `ace-overseer status` (L7.4): blockers, failures and missing data in one view, clearly distinguished from healthy progress. The one-shot table (and `--format json`) now opens with `-- attention`, and the JSON payload gains `attention: {blockers:, failures:, missing_data:}` — computed live from the already-collected status sources plus the read-only `Molecules::HitlInbox`, no new fetchers and nothing persisted (new organism `Organisms::StatusAttention`). BLOCKER rows list startable tasks (`pending` in the project or `_overseer` tree) whose dependencies are unsatisfied, plus tasks explicitly `blocked`, each with the concrete per-dependency reason from `Atoms::DependencyReadiness` (predecessor status, missing/cyclic dependency) and a next action. FAILURE rows cover source errors (with origin), `failed`/`stalled` assignments, per-worktree executor probe errors, and escalations (pending ace-hitl questions awaiting an answer). MISSING DATA rows make gaps explicit — disabled sources, unknown `status_sources` keys, unreadable task trees (dependency readiness unverified), unrecognized task statuses, unknown executor states (the worktree is not free), an unreachable hitl inbox — because absence of data never confirms a free worktree or a finished task. When nothing needs attention the section states that explicitly.
357
16
 
358
- ### Technical
359
- - Added 4 tests covering single-terminal rejection, all-terminal rejection, mixed-set filtering, and subtask-level terminal filtering.
17
+ - Add configurable status sources to `ace-overseer status` (L7.2): the command aggregates every source configured under `status_sources` (defaults: `worktrees`, `forge` (default OFF), `project_tasks`, `overseer_tree`, `herdr`, `coworkers`) into one live, read-only view — ongoing steps, finished work, dependencies, and available resources. Each source is a thin adapter over its owner's interface (ace-git-worktree WorktreeManager, ace-git forge Providers `recent_pull_requests`, ace-task TaskManager for `.ace-tasks/` and `.ace-tasks/_overseer/`, ace-herdr ControlSurface + StatusComposer read-only, ace-coworker WorktreeExecutorProbe + ActiveExecutorRule). A disabled source is marked `disabled`; a failing source is marked `error` with its origin, rendered NEXT TO the healthy results — missing data never reads as a free worktree or a finished task (an unknown or unparseable coworker commission reports `active: true` with state `unknown`/`unparseable`). `--format json` emits the per-source contract `{sources: {<name>: {status: ok|disabled|error, origin:, data:|error:}}}` for the next role/tool; nothing is persisted (new organism `Organisms::StatusSources`, `StatusCollector#collect_sources`).
360
18
 
361
- ## [0.11.0] - 2026-03-23
362
-
363
- ### Changed
364
- - Clarified README intro and How It Works section to describe assignment expansion into `.ace-local/assign/` and agent-driven orchestration.
365
- - Re-recorded getting-started demo GIF against live project context showing the full worktree dashboard with progress bars, PR status, and failure counts.
366
-
367
- ## [0.10.3] - 2026-03-23
368
-
369
- ### Changed
370
- - Refreshed package README layout, quick-link navigation, and section flow to align with the current package pattern.
371
-
372
- ## [0.10.2] - 2026-03-22
373
-
374
- ### Fixed
375
- - Updated `work_on` orchestration messaging and preset expectations to use the canonical `work-on-task` preset name for taskref-driven batch flows.
376
-
377
- ### Changed
378
- - Aligned default tmux window preset mapping and associated test coverage with singular `work-on-task` preset naming.
379
-
380
- ## [0.10.1] - 2026-03-22
381
-
382
- ### Changed
383
- - Remove `mise exec --` wrapper from error message string in worktree provisioner.
384
-
385
- ## [0.10.0] - 2026-03-22
386
-
387
- ### Added
388
- - Added configurable tmux window preset selection for `work-on` when using the `work-on-tasks` assignment preset.
389
- - Added an overseer-specific `work-on-tasks` layout that launches `cc /as-assign-drive`, opens the active assignment report folder in `nvim`, and runs both `ace-task status` and `ace-assign status`.
390
-
391
- ## [0.9.0] - 2026-03-22
392
-
393
- ### Changed
394
- - Updated task context collection to recognize short task worktree naming prefixes (`t.*`, `ace-t.*`) when resolving task IDs from worktree paths.
395
-
396
- ## [0.8.2] - 2026-03-22
397
-
398
- ### Fixed
399
- - Align README messaging: changed "start an assignment" to "prepare an assignment for execution" to match actual `work-on` behavior.
400
-
401
- ## [0.8.1] - 2026-03-22
402
-
403
- ### Fixed
404
- - Include `docs/**/*` in gemspec so documentation ships with the gem.
405
-
406
- ## [0.8.0] - 2026-03-22
407
-
408
- ### Added
409
- - Reworked package documentation with a new landing-page README, tutorial getting-started guide, full usage reference, handbook catalog, demo assets, and aligned gem metadata messaging.
410
-
411
- ## [0.7.1] - 2026-03-19
412
-
413
- ### Changed
414
- - Refined `TS-OVERSEER-001` E2E verifier structure with explicit impact-first validation and normalized check sections across all goals.
415
- - Expanded Goal 2 E2E coverage to require both `ace-overseer status --format json` and `--format table` evidence artifacts.
416
-
417
- ## [0.7.0] - 2026-03-18
418
-
419
- ### Changed
420
- - Updated assignment system references from "phase" to "step" terminology: `first_phase` → `first_step`, `current_phase` → `current_step`, `phase_summary` → `step_summary` across launcher, orchestrator, status formatter, and context collector
421
-
422
- ## [0.6.1] - 2026-03-18
423
-
424
- ### Changed
425
- - Migrated CLI namespace from `Ace::Core::CLI::*` to `Ace::Support::Cli::*` (ace-support-cli is now the canonical home for CLI infrastructure).
426
-
427
-
428
- ## [0.6.0] - 2026-03-18
429
-
430
- ### Changed
431
- - Removed legacy backward-compatibility behavior as part of the 0.10 cleanup release.
432
-
433
-
434
- ## [0.5.6] - 2026-03-15
435
-
436
- ### Fixed
437
- - Restructured TC-005 prune workflow runner with explicit numbered steps to prevent LLM runner from executing prune before assignment completion
438
-
439
- ## [0.5.5] - 2026-03-15
440
-
441
- ### Fixed
442
- - Removed dead `DryCli::ArgvCoalescer` call that caused NameError after ace-support-cli migration
443
-
444
- ## [0.5.4] - 2026-03-15
445
-
446
- ### Changed
447
- - Migrated CLI framework from dry-cli to ace-support-cli
448
-
449
- ## [0.5.3] - 2026-03-13
450
-
451
- ### Fixed
452
- - Reject tasks with `draft` status at assignment creation time with actionable review guidance, preventing unattended forks from stalling on interactive confirmation.
453
-
454
- ## [0.5.2] - 2026-03-13
455
-
456
- ### Changed
457
- - Updated the canonical overseer skill to explicitly run its bundled workflow in the current project and execute it end-to-end.
458
-
459
- ## [0.5.1] - 2026-03-12
460
-
461
- ### Fixed
462
- - Registered the package WFI source so `wfi://overseer` resolves for the canonical overseer skill.
463
-
464
- ## [0.5.0] - 2026-03-10
465
-
466
- ### Added
467
- - Added the canonical handbook-owned overseer skill and a package workflow for task worktree orchestration.
468
-
469
-
470
- ## [0.4.21] - 2026-03-08
471
-
472
- ### Fixed
473
- - `WorktreeProvisioner` now recovers from stale worktree metadata by pruning and retrying provisioning, and raises actionable errors when paths remain missing.
474
- - `PruneOrchestrator` no longer crashes on missing/prunable worktree paths and marks those entries as unsafe candidates instead.
475
-
476
- ### Changed
477
- - `prune` now runs a stale metadata prune pass before scanning and defaults to task-associated worktrees when no explicit targets are provided.
478
-
479
- ## [0.4.20] - 2026-03-05
480
-
481
- ### Changed
482
- - Overseer task-workflow fixtures were migrated to non-legacy task IDs and `.ace-tasks` fixture layout.
483
-
484
- ## [0.4.19] - 2026-03-04
485
-
486
- ### Changed
487
- - Assignment launcher temporary job files now use `.ace-local/overseer`.
488
-
489
-
490
- ## [0.4.18] - 2026-03-03
491
-
492
- ### Added
493
- - `StatusCollector`: show non-task worktrees in status when they have active assignments
494
- - `WorktreeContextCollector`: support B36TS task ID extraction from worktree paths and branch names
495
-
496
- ### Fixed
497
- - `PruneOrchestrator`: allow pruning non-task worktrees when targeted by path (removes `task_associated` filter)
498
-
499
- ## [0.4.17] - 2026-03-02
500
-
501
- ### Changed
502
- - Replace `ace-taskflow` dependency with `ace-task` -- migrate `WorkOnOrchestrator` and `PruneSafetyChecker` to use `Ace::Task::Organisms::TaskManager` API
503
- - Remove bare `require "ace/taskflow"` import, add `require "ace/task"`
504
-
505
- ## [0.4.16] - 2026-02-26
506
-
507
- ### Fixed
508
- - Fix repeated `--task` flags (`--task 288 --task 287`) being silently dropped by dry-cli; values are now coalesced before parsing
509
-
510
- ## [0.4.15] - 2026-02-26
511
-
512
- ### Fixed
513
- - Raise descriptive error when no valid task references are provided to `WorkOnOrchestrator`, preventing `NoMethodError` on empty input.
514
-
515
- ## [0.4.14] - 2026-02-26
516
-
517
- ### Added
518
- - Support ordered multi-task input for `ace-overseer work-on --task` using repeated flags, comma-separated values, or mixed forms.
519
- - Add explicit `task_refs` launch parameter support in `AssignmentLauncher` for multi-task presets using `taskrefs`.
520
-
521
- ### Fixed
522
- - Validate all provided task references before worktree/tmux/assignment side effects.
523
- - Fail early with actionable guidance when multiple task refs are provided to a single-task (`taskref`) preset.
524
-
525
- ### Changed
526
- - Preserve left-to-right task execution order while expanding orchestrator refs in-place to subtask sequences.
527
-
528
- ## [0.4.13] - 2026-02-24
529
-
530
- ### Fixed
531
- - Isolate `TS-OVERSEER-001` E2E tmux execution per run by switching scenario setup to `tmux-session: { name-source: run-id }`, preventing cross-run/default-session collisions.
532
-
533
- ### Changed
534
- - Clarify runner guidance for tmux evidence collection to always target `ACE_TMUX_SESSION` explicitly.
535
-
536
- ## [0.4.12] - 2026-02-24
537
-
538
- ### Changed
539
- - Refine `TS-OVERSEER-001` TC-005 prune workflow runner instructions to explicitly resolve task.001 worktree path and execute `ace-assign` steps from that worktree while writing artifacts to the sandbox `results/` tree.
540
-
541
- ## [0.4.11] - 2026-02-24
542
-
543
- ### Changed
544
- - Update `TS-OVERSEER-001` TC-005 prune workflow instructions to require explicit assignment-completion evidence and post-prune verification artifacts.
545
-
546
- ## [0.4.10] - 2026-02-23
547
-
548
- ### Technical
549
- - Updated internal dependency version constraints to current releases
550
-
551
- ## [0.4.9] - 2026-02-22
552
-
553
- ### Changed
554
- - Migrate CLI to standard dry-cli help pattern with HelpCommand registration
555
- - Remove custom `start()` method and `KNOWN_COMMANDS` constant in favor of standard pattern
556
-
557
- ## [0.4.8] - 2026-02-22
558
-
559
- ### Fixed
560
- - Standardized quiet, verbose, debug option descriptions to canonical strings
561
-
562
- ## [0.4.7] - 2026-02-22
563
-
564
- ### Changed
565
- - Migrate skill naming and invocation references to hyphenated `ace-*` format (no underscores).
566
-
567
- ## [0.4.6] - 2026-02-21
568
-
569
- ### Fixed
570
- - Fix TC-003 tmux window verification to use `tmux list-windows -a` (all sessions) to avoid env var propagation issues in E2E test agents
571
-
572
- ## [0.4.5] - 2026-02-21
573
-
574
- ### Fixed
575
- - Fix `WorkOnOrchestrator` to pass `task_root_path` (resolved from `PROJECT_ROOT_PATH` env var or `Dir.pwd`) to `TaskLoader`, ensuring tasks are found correctly in worktree environments
576
- - Fix E2E tests to use `ACE_TMUX_SESSION` variable instead of hardcoded `ace-e2e-test` session name for tmux window verification
577
-
578
- ## [0.4.4] - 2026-02-20
579
-
580
- ### Fixed
581
- - E2E scenarios (TS-OVERSEER-001, TS-OVERSEER-002) now use `tmux-session` setup step for isolated tmux sessions instead of leaking windows into the developer's active session
582
- - Remove hardcoded `tmux kill-session -t "ace-e2e-test"` from TS-OVERSEER-002 setup that was polluting the developer environment
583
-
584
- ## [0.4.3] - 2026-02-19
585
-
586
- ### Fixed
587
- - Prune orchestrator now passes `delete_branch: true` to worktree manager's `remove` call, ensuring git branches are cleaned up when worktrees are pruned
588
-
589
- ## [0.4.2] - 2026-02-19
590
-
591
- ### Added
592
- - Orchestrator subtask expansion for `work-on-tasks` preset -- when a task is an orchestrator with subtasks, `AssignmentLauncher` expands subtask refs into individual foreach steps (e.g., `work-on-272.01`, `work-on-272.02`) instead of a single `work-on-272` step
593
- - `extract_subtask_refs` helper in `WorkOnOrchestrator` to extract subtask numbers from orchestrator task data
594
- - `subtask_refs:` keyword argument on `AssignmentLauncher#launch` for passing expanded subtask references
595
-
596
- ## [0.4.1] - 2026-02-19
597
-
598
- ### Added
599
- - `--watch` / `-w` option for `status` command -- auto-refreshing dashboard with ANSI screen clear
600
- - Two-tier refresh: fast interval (15s default) refreshes assignment data only, slow interval (5min default) does full git/PR refresh
601
- - `collect_assignments_only` method on `WorktreeContextCollector` for lightweight assignment-only collection with cached git data
602
- - `collect_quick` method on `StatusCollector` to reuse previous snapshot's git data while refreshing assignments
603
- - `format_watch_footer` on `StatusFormatter` showing dim timestamp and countdown to next full refresh
604
- - Configurable watch intervals via `watch.refresh_interval` and `watch.git_refresh_interval` in overseer config
605
-
606
- ## [0.4.0] - 2026-02-19
607
-
608
- ### Added
609
- - Progress bar visualization in assignment sub-rows -- filled/empty bar segments alongside numeric counts
610
- - Current step name display for running assignments (e.g., `implement` shown dimmed after progress)
611
- - Header row and separator line above hierarchical dashboard for column labeling
612
- - Blank line separators between location groups for visual breathing room
613
- - `current_step` field propagated from `QueueState` through `WorktreeContextCollector` to status display
614
-
615
- ### Changed
616
- - Widen progress column to accommodate progress bar and current step text
617
-
618
- ## [0.3.1] - 2026-02-19
619
-
620
- ### Changed
621
- - Hierarchical status display -- location header rows with assignment sub-rows replace flat single-row format
622
- - `WorkContext` model uses `assignments` array instead of singular `assignment_status` + `assignment_count`
623
- - `WorktreeContextCollector` loads all assignments via `AssignmentDiscoverer` instead of only active via `AssignmentExecutor`
624
- - `StatusFormatter` emits two row types: location header (basename + PR + Git) and indented assignment sub-rows (ID + name + state + progress)
625
- - IPC serialization in `StatusCollector` uses `assignments` array
626
- - Main branch inclusion check uses `assignments.any?` instead of `assignment_status`
19
+ - Add `ace-overseer process-reports` (L6.5): interpret every incoming ace-hitl event against the private `_overseer` task tree, record the outcome through the existing `ace-task update` surface, and continue the queue by reusing the existing gates. Matching uses the assignment reference recorded on a step (or the managing task's `project_task` with exactly one non-terminal step); a success report records `processed_report`/`report_result` on the step and advances it to `done`, then continues with the next unblocked step — via `ace-overseer handoff` when the family records a worktree (next role in the SAME worktree) or the work-on gate otherwise. A repeated delivery of a processed report is detected from the recorded `processed_report` and re-runs nothing, and so is a success report under a NEW id whose only assignment match is a terminal step (no reopen path: it resolves to the recorded result instead of re-advancing the done step); ambiguous cross-manager matches stay unmatched instead of silently picking one; an error report or a question never advances a step (questions surface the `ace-hitl update <id> --answer` path); a report matching no open allocation stays for clarification. Continuation refusals (dependency gate, handoff gate) surface as blocked with reasons, never as success (new pure atom `Atoms::ReportInterpretation`, molecule `Molecules::HitlInbox`, organism `Organisms::ReportProcessor`; new runtime dependency `ace-hitl`).
20
+ - Add `ace-overseer handoff --task <ref>` (L6.4): hand the SAME task worktree to the next role in the prepared role sequence. The gate reads only real state — the worktree's role-sequence assignments (ace-assign files, composition order) with their current states, the per-leg start configs from `ace-coworker prepare`, and the worktree's executor truth via the coworker `ActiveExecutorRule` (new runtime dependency `ace-coworker`) — so two active executors are impossible: a failed, in-flight, stalled, or unknown-state predecessor refuses the handoff with reasons (unknown state is never a free resource), and a busy worktree never gets a second executor. On success it opens the next executor's window in the same worktree and prints `ace-coworker start --config .ace-local/coworker/prepare/<role>.yml`; nothing is re-prepared and no worktree is ever created (new pure atom `Atoms::HandoffReadiness`, molecule `Molecules::HandoffProbe`, organism `Organisms::HandoffOrchestrator`).
21
+ - Gate `work-on` starts on dependency readiness (L6.3): a step starts only when every recorded `dependencies` predecessor has status `done` (accepted and integrated result). A finished worker or open PR does not unlock a dependent step; cancelled, skipped, missing, or cyclic predecessors block the start with explicit reasons before any worktree/assignment side effect (new pure atom `Atoms::DependencyReadiness`, wired into `WorkOnOrchestrator`).
627
22
 
628
23
  ### Removed
629
- - `assignment_executor_factory` dependency from `WorktreeContextCollector`
630
- - Flat single-row dashboard format with header/separator lines
631
-
632
- ## [0.3.0] - 2026-02-19
633
-
634
- ### Added
635
- - Assignment-aware status display -- main branch appears in `status` when it has active assignments
636
- - Assignment count shown in Assign column when location has multiple assignments (e.g., `abc12 (3)`)
637
- - `--assignment` / `-a` option for `prune` command to remove a specific assignment's cache directory
638
- - `AssignmentPruneCandidate` model for assignment-level prune safety checking
639
- - `AssignmentPruneSafetyChecker` molecule to evaluate assignment prune safety
640
- - `AssignmentManager#delete` method in ace-assign for removing assignment cache and cleaning up symlinks
641
- - `assignment_count` and `location_type` fields on `WorkContext` model
642
-
643
- ### Changed
644
- - `StatusCollector` now collects main branch context alongside worktree contexts
645
- - `StatusFormatter` sorts main branch row last, displays `main` in Task column with dim styling
646
- - `WorktreeContextCollector` counts assignments per location via `AssignmentDiscoverer`
647
- - `PruneOrchestrator` supports assignment-level pruning path with safety checks and force override
648
- - Widened Assign column from 6 to 10 characters to accommodate count display
649
- - IPC serialization includes `assignment_count` for parallel subprocess collection
650
-
651
- ## [0.2.17] - 2026-02-19
652
-
653
- ### Changed
654
-
655
- - `TmuxWindowOpener` delegates entirely to `ace-tmux window` CLI -- no longer manages session names, window names, or presets
656
- - Remove `tmux_session_name`, `window_name_format`, and `window_preset` config options
657
- - Remove `WindowNameFormatter` atom -- window naming is ace-tmux's responsibility
658
- - `PruneOrchestrator` uses worktree path basename for window cleanup instead of formatted names
659
-
660
- ## [0.2.16] - 2026-02-19
661
-
662
- ### Changed
663
-
664
- - `TmuxWindowOpener` no longer manages tmux sessions -- delegates entirely to ace-tmux `WindowManager` for window creation, session detection, and dedup
665
-
666
- ## [0.2.15] - 2026-02-19
667
-
668
- ### Fixed
669
- - Task ID extraction now recognizes `ace-task.NNN` worktree paths, fixing mismatch where overseer status showed branch-derived task ID instead of the path-derived one
670
-
671
- ## [0.2.14] - 2026-02-19
672
-
673
- ### Added
674
- - `--force` (`-f`) flag for `prune` command to bypass safety checks and force-remove unsafe worktrees
675
- - Positional target arguments for `prune` to filter by task ref or folder name (e.g., `ace-overseer prune 230 265`)
676
- - Dry-run output shows `[FORCE]` tag on forced candidates
677
-
678
- ## [0.2.13] - 2026-02-19
679
-
680
- ### Added
681
- - Progress callbacks (`on_progress:`) for `work-on` and `prune` orchestrators -- one-line status output per step
682
- - Prune now displays safe/skipped candidates with reasons before the "Continue?" confirmation prompt
683
-
684
- ### Changed
685
- - `work-on` command output replaced with real-time progress messages instead of post-hoc summary
686
-
687
- ## [0.2.12] - 2026-02-19
688
-
689
- ### Fixed
690
- - Prune workflow now removes safe worktrees with `ignore_untracked: true`, allowing untracked-only trees to be pruned while still protecting tracked changes
691
- - Tighten prune E2E assertions with task-specific grep patterns and aligned fixture/config expectations for TS-OVERSEER-002
692
-
693
- ## [0.2.11] - 2026-02-19
694
-
695
- ### Fixed
696
- - Add `exit!(1)` safety net after `exec` in forked status worker to prevent child process leaking parent state if exec fails
697
- - Filter nil contexts from failed parallel workers with `.compact` to prevent `NoMethodError` in dashboard formatting
698
-
699
- ## [0.2.10] - 2026-02-18
700
-
701
- ### Changed
702
- - Right-size `ace-overseer` E2E coverage from 11 to 6 focused test cases by removing command error-path duplicates already covered in package tests.
703
- - Consolidate prune workflow assertions so retained E2E cases validate dry-run no-side-effects and tmux cleanup in fewer scenarios.
704
-
705
- ### Fixed
706
- - Reuse existing tmux windows in `work-on` to avoid duplicate task windows on idempotent reruns.
707
- - Treat repositories with only untracked files as prune-safe when tracked changes are clean, preventing false `git not clean` outcomes.
708
- - Return a user-friendly CLI error when `ace-overseer work-on` is invoked without `--task`.
709
-
710
- ### Added
711
- - Add command tests for `work-on` missing `--task` and task-not-found error behavior.
712
-
713
- ## [0.2.9] - 2026-02-18
714
-
715
- ### Fixed
716
- - Manage PROJECT_ROOT_PATH environment variable and clear ProjectRootFinder cache when switching worktree contexts to ensure ace-assign and other tools find correct configuration
717
-
718
- ### Technical
719
- - Add comprehensive E2E test cases for overseer workflows
720
- - Add E2E test configuration presets
721
-
722
- ## [0.2.8] - 2026-02-17
723
-
724
- ### Changed
725
-
726
- - Parallelize worktree context collection using fork/exec for 3-4x speedup (5-7s → 1.5s for 6 worktrees)
727
- - Use subprocess isolation to avoid Dir.chdir thread-safety issues
728
-
729
- ### Fixed
730
24
 
731
- - Test expectation for status header ("ASSIGNMENTS" → "Assign")
732
-
733
- ## [0.2.7] - 2026-02-17
734
-
735
- ### Added
736
-
737
- - Assign column showing compact assignment ID for quick reference
738
- - Git dirty file count display (e.g., `✗ 3`) instead of just `✗`
25
+ - Remove the installed `ordinary` CLI command and `OrdinaryWorkOn` launcher: the `/as-assign-drive --ordinary` handoff is invalid after the local file-based rework.
26
+ - Remove installed journal/attempt dependencies from local prune and status: `WorktreeContextCollector` no longer reads attempt recovery state, and `PruneSafetyChecker`/`AssignmentPruneSafetyChecker` classify candidates from local assignment records (completed state, no active/pending steps), task state, worktree cleanliness, and executed Git preservation proofs only.
739
27
 
740
28
  ### Changed
741
29
 
742
- - Reorder columns: Assign first, Progress last
743
- - Fix column alignment by pre-padding colored fields before ANSI codes
744
- - Remove redundant "ASSIGNMENTS" title (table header is self-explanatory)
745
-
746
- ## [0.2.6] - 2026-02-17
747
-
748
- ### Changed
749
-
750
- - Replace text status labels with Unicode icons and ANSI colors for compact, scannable output
751
- - Sort dashboard rows by PR number descending; rows without PR appear first (sorted by task desc)
752
- - Remove Path column (redundant with Task ID) to save horizontal space
753
- - Colorize PR state (OPN green, MRG blue, CLS dim, DFT yellow) and Git state (✓/✗ with colors)
754
-
755
- ### Added
756
-
757
- - Support for new `:stalled` assignment state icon (◼ yellow)
758
-
759
- ## [0.2.5] - 2026-02-17
30
+ - Prune-safety and status guidance no longer refer to attempt baselines or terminal attempts; use assignment status and unresolved-work evidence instead.
31
+ - Rename the prune candidate safety field from `attempts_terminal` to `work_terminal` (local assignment work, not attempts).
32
+ - Patch-range preservation proofs derive their creation baseline from Git: the declared source base must equal the fork point of the candidate head and the accepted base tip. A declared base newer than the fork point blocks because it could hide candidate work.
760
33
 
761
34
  ### Fixed
762
35
 
763
- - Set `PROJECT_ROOT_PATH` per worktree in context collector so each worktree resolves its own assignment cache directory instead of all sharing the invoking worktree's data
764
- - Restore `PROJECT_ROOT_PATH` and clear `ProjectRootFinder` cache after collection to prevent cross-worktree contamination
765
-
766
- ## [0.2.4] - 2026-02-17
767
-
768
- ### Changed
769
-
770
- - Replace release-centric status view with assignment-focused dashboard showing path, state, progress, and PR columns.
771
- - Remove release resolver dependency from status collector.
772
- - Add step summary data (total/done/failed) to worktree context collection.
773
- - Add PR metadata display with abbreviated state (OPN, MRG, CLS, DFT) in status output.
774
-
775
- ## [0.2.3] - 2026-02-17
776
-
777
- ### Changed
778
-
779
- - Protect `gem_root` memoization with mutex synchronization.
780
- - Use atomic tempfile writes for generated assignment job files.
781
- - Improve task ID extraction robustness in worktree context collector.
782
-
783
- ## [0.2.2] - 2026-02-17
784
-
785
- ### Fixed
786
-
787
- - Ensure `prune --quiet` still executes prune logic instead of returning early.
788
- - Add missing runtime dependencies in gemspec for required ACE gems.
789
- - Handle `SIGINT` in executable with exit code `130`.
790
-
791
- ### Changed
792
-
793
- - Expand assignment preset lookup to include `.ace/assign/presets` before defaults.
794
- - Use post-action wording in `work-on` command output for accurate UX timing.
795
- - Improve prune task-done checks to account for repository common root context.
796
-
797
- ## [0.2.1] - 2026-02-17
798
-
799
- ### Changed
800
-
801
- - Release patch after the valid review cycle with no additional code changes required.
802
-
803
- ## [0.2.0] - 2026-02-17
804
-
805
- ### Changed
806
-
807
- - Promote the initial `ace-overseer` implementation set to a minor release.
808
- - Align release metadata for assignment-driven delivery flow.
809
-
810
- ## [0.1.0] - 2026-02-17
811
-
812
- ### Added
36
+ - Recover the preparation readiness crash cut (PR393 final audit finding #4): after preparation became `done` with its readiness report recorded (`processed_report` persisted) but the continuation never dispatched (crash between persist and handoff), the re-delivered assignment-less readiness report fell out `unmatched` — worker dispatch never resumed. Matching now checks the already-recorded report identity BEFORE filtering new matches to non-terminal steps, so the exact re-delivered event resolves to the recorded duplicate and the existing duplicate-with-recorded-success path re-evaluates the continuation from current state; a distinct unknown event id still fits no open allocation (no task-only fallback restored).
37
+ - Root the status sources' descendant re-scan at the task manager's actual `root_dir` instead of a hardcoded CWD-relative `.ace-tasks` literal (review fix): `TreeRows.linked_descendants` built its `TaskScanner` from `".ace-tasks"`, disconnected from the manager that produced the tree — a tree rooted elsewhere (e.g. `--root`/configured `root_dir`) was scanned relative to the process CWD. The scanner root now travels from the manager (`TaskManager#root_dir`) through `TreeRows.flatten`, so descendants of any rooted tree resolve against their own root.
38
+ - Restrict report matching to its actual allocation (PR393 P1): an explicit assignment that matches no step is `unmatched` — the previous task-only fallback let any `success` report complete the sole non-terminal step even when it belonged to a different assignment (e.g. a stale planner readiness report completing pending integration). Assignment-less reports (planner readiness) now bind only to the preparation role: the sole non-terminal step whose own assignment is blank; absence of an assignment is never evidence that whichever role remains finished.
39
+ - Recover the queue continuation after a failed or interrupted dispatch (PR393 P2): the report result/ID is persisted BEFORE the continuation, so a handoff failure (or a process death between the write and the dispatch) previously left a recorded duplicate that suppressed the next role forever. A duplicate whose recorded result is success now re-checks the continuation from current task/assignment state through the same gates; duplicate starts stay impossible because the gates read real allocation state (work-on reuses an active assignment, handoff refuses a busy worktree).
40
+ - `process-reports` handoff outcomes no longer claim the worktree "was handed to the next role" when only the window was ensured: per `queue.wf.md` section 4 the overseer agent runs the printed command, so the outcome message now carries the actionable start command (`ace-coworker start --config .ace-local/coworker/prepare/<role>.yml`, exactly what the Handoff CLI prints) instead of asserting the handoff already happened.
41
+ - Flatten the full descendant task tree in the status sources (PR393 P2): `project_tasks` and `overseer_tree` serialized only the root rows of what `TaskManager.list` returns, hiding blocked lifecycle steps and dropping dependencies that name subtasks. Rows now cover every descendant (attached subtasks, plus deeper levels re-read through the owner's own TaskScanner/TaskLoader), and `overseer_tree` rows carry the step's recorded `processed_report`.
42
+ - Stop labeling processed reports as permanently unprocessed in attention (PR393 P2): `StatusAttention` flagged every inbox report `unprocessed_report` without checking that `ReportProcessor` had already recorded it on a step. Processed state is now derived from the existing owner (the `processed_report` metadata carried by the `overseer_tree` source) — no second registry.
43
+ - The `forge` status source now covers issues, not pull requests only (spec `.6.1` "PR/issues GitHub or Forgejo"): the source lists issues through the provider's own `recent_issues` API when it exposes one, and otherwise renders an explicit per-source `issues: UNAVAILABLE` marker (with the reason) instead of silently substituting PR-only data; `format_forge_rows` renders both sections distinctly.
44
+ - Preserve the `main` location label in the new sources-table worktrees section: `context_to_h`/`context_from_h` now round-trip `location_type` (and `tmux_window`), so a main checkout with assignments renders with its dimmed `main` row and sorts last again, like the legacy dashboard.
45
+ - Warn on unknown keys under `status_sources` instead of silently ignoring them: a typo'd source name (`herder:`) renders `-- herder: unknown source (ignored)` and a typo'd option (`enabeld: false`) renders `-- forge.enabeld: unknown option (ignored)`; both also appear as `unknown_keys` in the JSON payload next to `sources`.
46
+ - Forward an injected `config` to the default `StatusCollector` in the `status` CLI command, so source configuration no longer falls back to the global config when a config is injected.
47
+ - Validate the forge source `limit` config: `Integer()` parsing with a fallback to the default (typos, missing values), explicit `0` lists nothing, and negative values clamp to `0`.
48
+ - Restore `ace-overseer prune --preservation` patch-range proofs after the attempt/journal removal: squash/cherry-pick transfers into a destination that also carries unrelated content can be proven and cleaned up again without any attempt-recorded baseline.
813
49
 
814
- - New `ace-overseer` gem scaffold, executable, and CLI registry.
815
- - `work-on` command orchestration:
816
- - provision/reuse task worktree
817
- - open tmux window for task context
818
- - create assignment from configured preset
819
- - `status` command with table and JSON output for active task worktrees.
820
- - `prune` command with safety checks, dry-run mode, and confirmation flow.
821
- - Core models:
822
- - `WorkContext`
823
- - `PruneCandidate`
824
- - Core atoms:
825
- - `WindowNameFormatter`
826
- - `PresetResolver`
827
- - `StatusFormatter`
828
- - Molecule layer:
829
- - `WorktreeProvisioner`
830
- - `TmuxWindowOpener`
831
- - `AssignmentLauncher`
832
- - `WorktreeContextCollector`
833
- - `PruneSafetyChecker`
834
- - Organism layer:
835
- - `WorkOnOrchestrator`
836
- - `StatusCollector`
837
- - `PruneOrchestrator`
838
- - Test coverage for atoms, models, molecules, organisms, and CLI command registration.