ace-overseer 0.23.0 → 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 -804
  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 +2 -2
  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 +267 -3
  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 +46 -27
  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,823 +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.0] - 2026-10-16
11
10
 
12
- ### Added
13
-
14
- - 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.
15
-
16
- ### Changed
17
-
18
- - Follow ace-review 0.61 campaign head-assessment contracts (dependency floor).
19
-
20
- ## [0.22.0] - 2026-10-16
21
-
22
- ### Added
23
-
24
- - 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.
25
-
26
- ## [0.21.1] - 2026-10-14
27
-
28
- ### Changed
29
-
30
- - 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.
31
- - 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).
32
-
33
- ## [0.21.0] - 2026-10-12
34
-
35
- ### Added
36
-
37
- - Add the `as-overseer-configure-project` skill and packaged `wfi://overseer/configure-project` workflow for idempotent, customization-preserving delivery supervision adaptation.
38
-
39
- ## [0.20.2] - 2026-10-10
40
-
41
- ### Fixed
42
-
43
- - Require the published producer and consumer patch versions containing the protected context and managed-attempt APIs; exclude incompatible prior dependency graphs.
44
-
45
- ## [0.20.1] - 2026-10-08
46
-
47
- ### Changed
48
-
49
- - Require the coordinated Assign, Herdr, Lab and Review producer versions for ordinary CLI worker launch and current protected delivery contracts.
50
-
51
- - 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.
52
-
53
- - Route protected delivery through original worker merge request, canonical status and exact result consumption while preserving ordinary delivery and unresolved protected PR policy.
54
-
55
-
56
- ### Added
57
-
58
- - 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.
59
-
60
- - Package canonical project-overseer, Lab coordinator and second-commander role workflows with scoped authority, responsive delegation and the existing confirmed-delivery decision policy.
61
-
62
- - 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.
63
-
64
- - 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.
65
-
66
- ## [0.20.0] - 2026-10-05
67
-
68
- ### Added
69
-
70
- - Resolve immutable second-commander proposals through confirmed-delivery sixteen-hour policy and canonical Assign authorization.
71
- - Expose assignment recovery liveness/reasons and show unreadable evidence as unknown rather than omitting it.
72
-
73
- ### Fixed
74
-
75
- - Expose deferred proposal ticks in Lab status diagnostics and object JSON while preserving status availability and array output.
76
-
77
- - Keep watch/status alive on proposal tick failure and queue project-scoped HITL reconciliation under the proposer identity.
78
-
79
- ### Changed
80
-
81
- - 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`.
82
-
83
- ## [0.19.1] - 2026-10-04
84
-
85
- ### Changed
86
-
87
- - Install both Herdr and tmux runtime adapters for standalone runtime switching, through an acyclic dependency graph.
88
-
89
- ## [0.19.0] - 2026-10-04
90
-
91
- ### Added
92
- - 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).
93
- - Config key `tmux_window_presets` renamed to `window_presets` (no legacy alias, ADR-024); "tmux window" progress text is runtime-neutral.
94
- - New dependency: `ace-runtime` (~> 0.1); `ace-tmux` is kept to install the tmux adapter.
95
-
96
- ## [0.18.2] - 2026-10-02
97
-
98
- ### Technical
99
- - Follow the ace-assign 0.61 release line for journal-backed service effects.
100
- - Updated the ace-tmux dependency to the 0.18 adapter release line.
101
-
102
- ## [0.18.1] - 2026-10-01
103
-
104
- ### Technical
105
- - Follow the ace-assign 0.60 release line for durable review campaign evidence.
106
-
107
- ## [0.18.0] - 2026-09-29
108
-
109
- ### Added
110
- - 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.
111
- - 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.
112
- - 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.
113
-
114
- ### Changed
115
- - 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`.
116
- - 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.
117
- - 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.
118
- - 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.
119
-
120
- ## [0.17.0] - 2026-09-29
121
-
122
- ### Added
123
- - 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.
124
- - 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.
125
-
126
- ### Changed
127
- - 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.
128
- - 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.
129
-
130
-
131
- ## [0.16.0] - 2026-09-20
132
-
133
- ### Added
134
- - 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.
135
- - 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.
136
-
137
- ## [0.15.6] - 2026-09-02
138
-
139
- ### Technical
140
- - Included in the coordinated all-package patch release preparation for ACE monorepo review.
141
- ## [0.15.5] - 2026-08-12
142
-
143
- ### Technical
144
- - Raised the `ace-support-core` dependency floor to `~> 0.31` after the principles-first bootstrap guidance release.
145
- ## [0.15.4] - 2026-08-12
146
-
147
- ### Fixed
148
- - Updated the `ace-tmux` runtime dependency constraint to `~> 0.17` so overseer stays compatible with the current tmux runtime control release line.
149
-
150
- ### Technical
151
- - Aligned gemspec dependency floors with current ACE package minor release lines and safe external minor dependency bumps (no major version jumps).
152
-
153
- ## [0.15.3] - 2026-04-23
154
-
155
- ### Technical
156
- - 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.
157
-
158
- ## [0.15.2] - 2026-04-23
159
-
160
- ### Technical
161
- - 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.
162
-
163
- ## [0.15.1] - 2026-04-23
164
-
165
- ### Technical
166
- - Updated the `ace-git-worktree` runtime dependency constraint to `~> 0.21` so overseer stays aligned with the current worktree minor release line.
167
-
168
- ## [0.15.0] - 2026-04-23
169
-
170
- ### Changed
171
- - 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.
172
- - 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.
173
-
174
- ## [0.14.14] - 2026-04-23
175
-
176
-
177
- ### Changed
178
- - Reworked tmux window-open behavior to align with shared session targeting and reduce ambiguity when launching and reusing worktree windows.
179
- - Updated overseer tmux-window coverage to verify the current session/window lifecycle against the improved launcher behavior.
180
-
181
-
182
- ## [0.14.13] - 2026-04-22
183
-
184
- ### Fixed
185
- - Matched existing tmux windows through the shared `ace-tmux` sanitized window-name policy so worktrees with punctuation are not reopened under duplicate names.
186
-
187
- ## [0.14.12] - 2026-04-19
188
-
189
- ### Technical
190
- - 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.
191
-
192
- ## [0.14.11] - 2026-04-18
193
-
194
- ### Technical
195
- - 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.
196
-
197
- ## [0.14.10] - 2026-04-16
198
-
199
- ### Fixed
200
- - 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.
201
-
202
- ## [0.14.9] - 2026-04-16
203
-
204
- ### Fixed
205
- - 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.
206
-
207
- ## [0.14.8] - 2026-04-16
208
-
209
- ### Fixed
210
- - 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.
211
-
212
- ## [0.14.7] - 2026-04-16
213
-
214
- ### Fixed
215
- - 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.
216
-
217
- ## [0.14.6] - 2026-04-15
218
-
219
- ### Changed
220
- - 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.
221
- - Added `TS-OVERSEER-002` status-and-operations coverage with watch-refresh and multi-task bundle journeys.
222
- - Updated `docs/usage.md` with explicit public verification paths for preset override, idempotent rerun, and minimal prune lifecycle checks.
223
-
224
- ### Fixed
225
- - Updated the `ace-assign` runtime dependency constraint to `~> 0.53` so overseer remains aligned with the current assign minor release line.
226
-
227
- ## [0.14.4] - 2026-04-13
228
-
229
- ### Fixed
230
- - 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.
231
-
232
- ## [0.14.3] - 2026-04-13
233
-
234
- ### Fixed
235
- - 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.
236
-
237
- ## [0.14.2] - 2026-04-13
238
-
239
- ### Fixed
240
- - Updated the `ace-assign` runtime dependency constraint to `~> 0.49` so overseer remains compatible with the new assign minor release line.
241
-
242
- ## [0.14.1] - 2026-04-13
243
-
244
- ### Changed
245
- - Completed the batch i05 migration follow-through for this package and aligned it with the restarted `fast` / `feat` / `e2e` verification model.
246
-
247
- ### Technical
248
- - Included in the coordinated assignment-driven patch release for batch i05 package updates.
249
-
250
-
251
- ## [0.14.0] - 2026-04-12
252
-
253
- ### Changed
254
- - Migrated package tests to the `fast` / `feat` / `e2e` model by moving deterministic coverage from `test/{atoms,commands,models,molecules,organisms}` into `test/fast/*`.
255
- - Added E2E migration decision tracking for `TS-OVERSEER-001` via `test/e2e/TS-OVERSEER-001-overseer-workflow/e2e-decision-record.md`.
256
- - 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`.
257
-
258
- ### Fixed
259
- - Hardened `TS-OVERSEER-001` sandbox setup by loading `mise.toml` from `${ACE_E2E_SOURCE_ROOT:-$PROJECT_ROOT_PATH}`.
260
- - 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.
261
-
262
- ## [0.13.12] - 2026-04-12
263
-
264
- ### Fixed
265
- - Updated the `ace-git-worktree` runtime dependency constraint to `~> 0.20` so overseer remains compatible with the new worktree minor release line.
266
-
267
- ## [0.13.11] - 2026-04-11
268
-
269
- ### Fixed
270
- - Updated the `ace-assign` runtime dependency constraint to `~> 0.47` so overseer remains compatible with the latest assign minor release line.
271
-
272
- ## [0.13.10] - 2026-04-07
273
-
274
- ### Fixed
275
- - Updated the `ace-assign` runtime dependency constraint to `~> 0.44` so overseer remains compatible with the new assign minor release line.
276
-
277
- ## [0.13.9] - 2026-04-01
278
-
279
- ### Fixed
280
- - Updated the `ace-assign` runtime dependency constraint to `~> 0.42` so overseer remains compatible with the new assign minor release line.
281
-
282
- ## [0.13.8] - 2026-03-29
283
-
284
- ### Technical
285
- - Normalized published gem metadata so RubyGems and Ruby Toolbox use current release information instead of the 1980 fallback date.
286
-
287
- ## [0.13.7] - 2026-03-29
288
-
289
- ### Fixed
290
- - Bumped the `ace-git` runtime dependency constraint to `~> 0.19` so ace-overseer stays aligned with the current git workflow release.
291
-
292
- ## [0.13.6] - 2026-03-29
293
-
294
- ### Fixed
295
- - Updated the `ace-assign` runtime dependency constraint to `~> 0.41` to stay aligned with the current released assign API.
296
-
297
- ## [0.13.5] - 2026-03-29
298
-
299
- ### Technical
300
- - Register package-level `.ace-defaults` skill-sources for ace-overseer to enable canonical skill discovery in fresh installs.
301
-
302
- ## [0.13.4] - 2026-03-29
303
-
304
- ### Fixed
305
- - Bumped dependency constraints to currently available `~>` ranges on RubyGems and updated release metadata after dependency synchronization.
306
-
307
- ## [0.13.3] - 2026-03-28
308
-
309
- ### Fixed
310
- - 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.
311
-
312
- ### Technical
313
- - Added command coverage for non-repo failure paths and updated launcher fixtures to initialize real git repos in temporary worktree test directories.
314
-
315
- ## [0.13.2] - 2026-03-27
316
-
317
- ### Fixed
318
- - Preserved taskref-only preset compatibility by collapsing launcher task refs to the primary task when a preset does not declare `taskrefs`.
319
-
320
- ## [0.13.1] - 2026-03-27
321
-
322
- ### Fixed
323
- - 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.
324
- - Preserved parent refs during taskref expansion when all subtasks are terminal, preventing empty expansion results from valid parent-task inputs.
325
-
326
- ## [0.13.0] - 2026-03-27
327
-
328
- ### Changed
329
- - 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.
330
- - Updated package docs to describe the shared task-driven assignment creation flow with `ace-assign`.
331
-
332
- ### Technical
333
- - Added launcher and orchestrator coverage for the shared creator path and explicit task fixture resolution.
334
-
335
- ## [0.12.1] - 2026-03-26
336
-
337
- ### Fixed
338
- - Tightened `ace-assign` gemspec constraint from `~> 0.16` to `~> 0.38` to match the runtime dependency introduced in v0.12.0.
339
-
340
- ## [0.12.0] - 2026-03-26
11
+ ## [0.25.0] - 2026-10-20
341
12
 
342
13
  ### Added
343
- - 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.
344
14
 
345
- ### Changed
346
- - `resolve_requested_refs` now returns skipped terminal refs alongside resolved refs, raising an error when all requested refs are terminal.
347
- - `expand_task_refs_in_order` and `extract_subtask_refs` filter out terminal subtasks during parent-to-subtask expansion.
348
-
349
- ### Technical
350
- - Added 4 tests covering single-terminal rejection, all-terminal rejection, mixed-set filtering, and subtask-level terminal filtering.
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.
351
16
 
352
- ## [0.11.0] - 2026-03-23
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`).
353
18
 
354
- ### Changed
355
- - Clarified README intro and How It Works section to describe assignment expansion into `.ace-local/assign/` and agent-driven orchestration.
356
- - Re-recorded getting-started demo GIF against live project context showing the full worktree dashboard with progress bars, PR status, and failure counts.
357
-
358
- ## [0.10.3] - 2026-03-23
359
-
360
- ### Changed
361
- - Refreshed package README layout, quick-link navigation, and section flow to align with the current package pattern.
362
-
363
- ## [0.10.2] - 2026-03-22
364
-
365
- ### Fixed
366
- - Updated `work_on` orchestration messaging and preset expectations to use the canonical `work-on-task` preset name for taskref-driven batch flows.
367
-
368
- ### Changed
369
- - Aligned default tmux window preset mapping and associated test coverage with singular `work-on-task` preset naming.
370
-
371
- ## [0.10.1] - 2026-03-22
372
-
373
- ### Changed
374
- - Remove `mise exec --` wrapper from error message string in worktree provisioner.
375
-
376
- ## [0.10.0] - 2026-03-22
377
-
378
- ### Added
379
- - Added configurable tmux window preset selection for `work-on` when using the `work-on-tasks` assignment preset.
380
- - 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`.
381
-
382
- ## [0.9.0] - 2026-03-22
383
-
384
- ### Changed
385
- - Updated task context collection to recognize short task worktree naming prefixes (`t.*`, `ace-t.*`) when resolving task IDs from worktree paths.
386
-
387
- ## [0.8.2] - 2026-03-22
388
-
389
- ### Fixed
390
- - Align README messaging: changed "start an assignment" to "prepare an assignment for execution" to match actual `work-on` behavior.
391
-
392
- ## [0.8.1] - 2026-03-22
393
-
394
- ### Fixed
395
- - Include `docs/**/*` in gemspec so documentation ships with the gem.
396
-
397
- ## [0.8.0] - 2026-03-22
398
-
399
- ### Added
400
- - 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.
401
-
402
- ## [0.7.1] - 2026-03-19
403
-
404
- ### Changed
405
- - Refined `TS-OVERSEER-001` E2E verifier structure with explicit impact-first validation and normalized check sections across all goals.
406
- - Expanded Goal 2 E2E coverage to require both `ace-overseer status --format json` and `--format table` evidence artifacts.
407
-
408
- ## [0.7.0] - 2026-03-18
409
-
410
- ### Changed
411
- - 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
412
-
413
- ## [0.6.1] - 2026-03-18
414
-
415
- ### Changed
416
- - Migrated CLI namespace from `Ace::Core::CLI::*` to `Ace::Support::Cli::*` (ace-support-cli is now the canonical home for CLI infrastructure).
417
-
418
-
419
- ## [0.6.0] - 2026-03-18
420
-
421
- ### Changed
422
- - Removed legacy backward-compatibility behavior as part of the 0.10 cleanup release.
423
-
424
-
425
- ## [0.5.6] - 2026-03-15
426
-
427
- ### Fixed
428
- - Restructured TC-005 prune workflow runner with explicit numbered steps to prevent LLM runner from executing prune before assignment completion
429
-
430
- ## [0.5.5] - 2026-03-15
431
-
432
- ### Fixed
433
- - Removed dead `DryCli::ArgvCoalescer` call that caused NameError after ace-support-cli migration
434
-
435
- ## [0.5.4] - 2026-03-15
436
-
437
- ### Changed
438
- - Migrated CLI framework from dry-cli to ace-support-cli
439
-
440
- ## [0.5.3] - 2026-03-13
441
-
442
- ### Fixed
443
- - Reject tasks with `draft` status at assignment creation time with actionable review guidance, preventing unattended forks from stalling on interactive confirmation.
444
-
445
- ## [0.5.2] - 2026-03-13
446
-
447
- ### Changed
448
- - Updated the canonical overseer skill to explicitly run its bundled workflow in the current project and execute it end-to-end.
449
-
450
- ## [0.5.1] - 2026-03-12
451
-
452
- ### Fixed
453
- - Registered the package WFI source so `wfi://overseer` resolves for the canonical overseer skill.
454
-
455
- ## [0.5.0] - 2026-03-10
456
-
457
- ### Added
458
- - Added the canonical handbook-owned overseer skill and a package workflow for task worktree orchestration.
459
-
460
-
461
- ## [0.4.21] - 2026-03-08
462
-
463
- ### Fixed
464
- - `WorktreeProvisioner` now recovers from stale worktree metadata by pruning and retrying provisioning, and raises actionable errors when paths remain missing.
465
- - `PruneOrchestrator` no longer crashes on missing/prunable worktree paths and marks those entries as unsafe candidates instead.
466
-
467
- ### Changed
468
- - `prune` now runs a stale metadata prune pass before scanning and defaults to task-associated worktrees when no explicit targets are provided.
469
-
470
- ## [0.4.20] - 2026-03-05
471
-
472
- ### Changed
473
- - Overseer task-workflow fixtures were migrated to non-legacy task IDs and `.ace-tasks` fixture layout.
474
-
475
- ## [0.4.19] - 2026-03-04
476
-
477
- ### Changed
478
- - Assignment launcher temporary job files now use `.ace-local/overseer`.
479
-
480
-
481
- ## [0.4.18] - 2026-03-03
482
-
483
- ### Added
484
- - `StatusCollector`: show non-task worktrees in status when they have active assignments
485
- - `WorktreeContextCollector`: support B36TS task ID extraction from worktree paths and branch names
486
-
487
- ### Fixed
488
- - `PruneOrchestrator`: allow pruning non-task worktrees when targeted by path (removes `task_associated` filter)
489
-
490
- ## [0.4.17] - 2026-03-02
491
-
492
- ### Changed
493
- - Replace `ace-taskflow` dependency with `ace-task` -- migrate `WorkOnOrchestrator` and `PruneSafetyChecker` to use `Ace::Task::Organisms::TaskManager` API
494
- - Remove bare `require "ace/taskflow"` import, add `require "ace/task"`
495
-
496
- ## [0.4.16] - 2026-02-26
497
-
498
- ### Fixed
499
- - Fix repeated `--task` flags (`--task 288 --task 287`) being silently dropped by dry-cli; values are now coalesced before parsing
500
-
501
- ## [0.4.15] - 2026-02-26
502
-
503
- ### Fixed
504
- - Raise descriptive error when no valid task references are provided to `WorkOnOrchestrator`, preventing `NoMethodError` on empty input.
505
-
506
- ## [0.4.14] - 2026-02-26
507
-
508
- ### Added
509
- - Support ordered multi-task input for `ace-overseer work-on --task` using repeated flags, comma-separated values, or mixed forms.
510
- - Add explicit `task_refs` launch parameter support in `AssignmentLauncher` for multi-task presets using `taskrefs`.
511
-
512
- ### Fixed
513
- - Validate all provided task references before worktree/tmux/assignment side effects.
514
- - Fail early with actionable guidance when multiple task refs are provided to a single-task (`taskref`) preset.
515
-
516
- ### Changed
517
- - Preserve left-to-right task execution order while expanding orchestrator refs in-place to subtask sequences.
518
-
519
- ## [0.4.13] - 2026-02-24
520
-
521
- ### Fixed
522
- - 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.
523
-
524
- ### Changed
525
- - Clarify runner guidance for tmux evidence collection to always target `ACE_TMUX_SESSION` explicitly.
526
-
527
- ## [0.4.12] - 2026-02-24
528
-
529
- ### Changed
530
- - 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.
531
-
532
- ## [0.4.11] - 2026-02-24
533
-
534
- ### Changed
535
- - Update `TS-OVERSEER-001` TC-005 prune workflow instructions to require explicit assignment-completion evidence and post-prune verification artifacts.
536
-
537
- ## [0.4.10] - 2026-02-23
538
-
539
- ### Technical
540
- - Updated internal dependency version constraints to current releases
541
-
542
- ## [0.4.9] - 2026-02-22
543
-
544
- ### Changed
545
- - Migrate CLI to standard dry-cli help pattern with HelpCommand registration
546
- - Remove custom `start()` method and `KNOWN_COMMANDS` constant in favor of standard pattern
547
-
548
- ## [0.4.8] - 2026-02-22
549
-
550
- ### Fixed
551
- - Standardized quiet, verbose, debug option descriptions to canonical strings
552
-
553
- ## [0.4.7] - 2026-02-22
554
-
555
- ### Changed
556
- - Migrate skill naming and invocation references to hyphenated `ace-*` format (no underscores).
557
-
558
- ## [0.4.6] - 2026-02-21
559
-
560
- ### Fixed
561
- - Fix TC-003 tmux window verification to use `tmux list-windows -a` (all sessions) to avoid env var propagation issues in E2E test agents
562
-
563
- ## [0.4.5] - 2026-02-21
564
-
565
- ### Fixed
566
- - 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
567
- - Fix E2E tests to use `ACE_TMUX_SESSION` variable instead of hardcoded `ace-e2e-test` session name for tmux window verification
568
-
569
- ## [0.4.4] - 2026-02-20
570
-
571
- ### Fixed
572
- - 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
573
- - Remove hardcoded `tmux kill-session -t "ace-e2e-test"` from TS-OVERSEER-002 setup that was polluting the developer environment
574
-
575
- ## [0.4.3] - 2026-02-19
576
-
577
- ### Fixed
578
- - Prune orchestrator now passes `delete_branch: true` to worktree manager's `remove` call, ensuring git branches are cleaned up when worktrees are pruned
579
-
580
- ## [0.4.2] - 2026-02-19
581
-
582
- ### Added
583
- - 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
584
- - `extract_subtask_refs` helper in `WorkOnOrchestrator` to extract subtask numbers from orchestrator task data
585
- - `subtask_refs:` keyword argument on `AssignmentLauncher#launch` for passing expanded subtask references
586
-
587
- ## [0.4.1] - 2026-02-19
588
-
589
- ### Added
590
- - `--watch` / `-w` option for `status` command -- auto-refreshing dashboard with ANSI screen clear
591
- - Two-tier refresh: fast interval (15s default) refreshes assignment data only, slow interval (5min default) does full git/PR refresh
592
- - `collect_assignments_only` method on `WorktreeContextCollector` for lightweight assignment-only collection with cached git data
593
- - `collect_quick` method on `StatusCollector` to reuse previous snapshot's git data while refreshing assignments
594
- - `format_watch_footer` on `StatusFormatter` showing dim timestamp and countdown to next full refresh
595
- - Configurable watch intervals via `watch.refresh_interval` and `watch.git_refresh_interval` in overseer config
596
-
597
- ## [0.4.0] - 2026-02-19
598
-
599
- ### Added
600
- - Progress bar visualization in assignment sub-rows -- filled/empty bar segments alongside numeric counts
601
- - Current step name display for running assignments (e.g., `implement` shown dimmed after progress)
602
- - Header row and separator line above hierarchical dashboard for column labeling
603
- - Blank line separators between location groups for visual breathing room
604
- - `current_step` field propagated from `QueueState` through `WorktreeContextCollector` to status display
605
-
606
- ### Changed
607
- - Widen progress column to accommodate progress bar and current step text
608
-
609
- ## [0.3.1] - 2026-02-19
610
-
611
- ### Changed
612
- - Hierarchical status display -- location header rows with assignment sub-rows replace flat single-row format
613
- - `WorkContext` model uses `assignments` array instead of singular `assignment_status` + `assignment_count`
614
- - `WorktreeContextCollector` loads all assignments via `AssignmentDiscoverer` instead of only active via `AssignmentExecutor`
615
- - `StatusFormatter` emits two row types: location header (basename + PR + Git) and indented assignment sub-rows (ID + name + state + progress)
616
- - IPC serialization in `StatusCollector` uses `assignments` array
617
- - 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`).
618
22
 
619
23
  ### Removed
620
- - `assignment_executor_factory` dependency from `WorktreeContextCollector`
621
- - Flat single-row dashboard format with header/separator lines
622
24
 
623
- ## [0.3.0] - 2026-02-19
624
-
625
- ### Added
626
- - Assignment-aware status display -- main branch appears in `status` when it has active assignments
627
- - Assignment count shown in Assign column when location has multiple assignments (e.g., `abc12 (3)`)
628
- - `--assignment` / `-a` option for `prune` command to remove a specific assignment's cache directory
629
- - `AssignmentPruneCandidate` model for assignment-level prune safety checking
630
- - `AssignmentPruneSafetyChecker` molecule to evaluate assignment prune safety
631
- - `AssignmentManager#delete` method in ace-assign for removing assignment cache and cleaning up symlinks
632
- - `assignment_count` and `location_type` fields on `WorkContext` model
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.
633
27
 
634
28
  ### Changed
635
- - `StatusCollector` now collects main branch context alongside worktree contexts
636
- - `StatusFormatter` sorts main branch row last, displays `main` in Task column with dim styling
637
- - `WorktreeContextCollector` counts assignments per location via `AssignmentDiscoverer`
638
- - `PruneOrchestrator` supports assignment-level pruning path with safety checks and force override
639
- - Widened Assign column from 6 to 10 characters to accommodate count display
640
- - IPC serialization includes `assignment_count` for parallel subprocess collection
641
-
642
- ## [0.2.17] - 2026-02-19
643
-
644
- ### Changed
645
-
646
- - `TmuxWindowOpener` delegates entirely to `ace-tmux window` CLI -- no longer manages session names, window names, or presets
647
- - Remove `tmux_session_name`, `window_name_format`, and `window_preset` config options
648
- - Remove `WindowNameFormatter` atom -- window naming is ace-tmux's responsibility
649
- - `PruneOrchestrator` uses worktree path basename for window cleanup instead of formatted names
650
-
651
- ## [0.2.16] - 2026-02-19
652
-
653
- ### Changed
654
-
655
- - `TmuxWindowOpener` no longer manages tmux sessions -- delegates entirely to ace-tmux `WindowManager` for window creation, session detection, and dedup
656
29
 
657
- ## [0.2.15] - 2026-02-19
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.
658
33
 
659
34
  ### Fixed
660
- - 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
661
-
662
- ## [0.2.14] - 2026-02-19
663
-
664
- ### Added
665
- - `--force` (`-f`) flag for `prune` command to bypass safety checks and force-remove unsafe worktrees
666
- - Positional target arguments for `prune` to filter by task ref or folder name (e.g., `ace-overseer prune 230 265`)
667
- - Dry-run output shows `[FORCE]` tag on forced candidates
668
-
669
- ## [0.2.13] - 2026-02-19
670
-
671
- ### Added
672
- - Progress callbacks (`on_progress:`) for `work-on` and `prune` orchestrators -- one-line status output per step
673
- - Prune now displays safe/skipped candidates with reasons before the "Continue?" confirmation prompt
674
-
675
- ### Changed
676
- - `work-on` command output replaced with real-time progress messages instead of post-hoc summary
677
-
678
- ## [0.2.12] - 2026-02-19
679
-
680
- ### Fixed
681
- - Prune workflow now removes safe worktrees with `ignore_untracked: true`, allowing untracked-only trees to be pruned while still protecting tracked changes
682
- - Tighten prune E2E assertions with task-specific grep patterns and aligned fixture/config expectations for TS-OVERSEER-002
683
-
684
- ## [0.2.11] - 2026-02-19
685
-
686
- ### Fixed
687
- - Add `exit!(1)` safety net after `exec` in forked status worker to prevent child process leaking parent state if exec fails
688
- - Filter nil contexts from failed parallel workers with `.compact` to prevent `NoMethodError` in dashboard formatting
689
-
690
- ## [0.2.10] - 2026-02-18
691
-
692
- ### Changed
693
- - Right-size `ace-overseer` E2E coverage from 11 to 6 focused test cases by removing command error-path duplicates already covered in package tests.
694
- - Consolidate prune workflow assertions so retained E2E cases validate dry-run no-side-effects and tmux cleanup in fewer scenarios.
695
-
696
- ### Fixed
697
- - Reuse existing tmux windows in `work-on` to avoid duplicate task windows on idempotent reruns.
698
- - Treat repositories with only untracked files as prune-safe when tracked changes are clean, preventing false `git not clean` outcomes.
699
- - Return a user-friendly CLI error when `ace-overseer work-on` is invoked without `--task`.
700
-
701
- ### Added
702
- - Add command tests for `work-on` missing `--task` and task-not-found error behavior.
703
-
704
- ## [0.2.9] - 2026-02-18
705
-
706
- ### Fixed
707
- - Manage PROJECT_ROOT_PATH environment variable and clear ProjectRootFinder cache when switching worktree contexts to ensure ace-assign and other tools find correct configuration
708
-
709
- ### Technical
710
- - Add comprehensive E2E test cases for overseer workflows
711
- - Add E2E test configuration presets
712
35
 
713
- ## [0.2.8] - 2026-02-17
714
-
715
- ### Changed
716
-
717
- - Parallelize worktree context collection using fork/exec for 3-4x speedup (5-7s → 1.5s for 6 worktrees)
718
- - Use subprocess isolation to avoid Dir.chdir thread-safety issues
719
-
720
- ### Fixed
721
-
722
- - Test expectation for status header ("ASSIGNMENTS" → "Assign")
723
-
724
- ## [0.2.7] - 2026-02-17
725
-
726
- ### Added
727
-
728
- - Assign column showing compact assignment ID for quick reference
729
- - Git dirty file count display (e.g., `✗ 3`) instead of just `✗`
730
-
731
- ### Changed
732
-
733
- - Reorder columns: Assign first, Progress last
734
- - Fix column alignment by pre-padding colored fields before ANSI codes
735
- - Remove redundant "ASSIGNMENTS" title (table header is self-explanatory)
736
-
737
- ## [0.2.6] - 2026-02-17
738
-
739
- ### Changed
740
-
741
- - Replace text status labels with Unicode icons and ANSI colors for compact, scannable output
742
- - Sort dashboard rows by PR number descending; rows without PR appear first (sorted by task desc)
743
- - Remove Path column (redundant with Task ID) to save horizontal space
744
- - Colorize PR state (OPN green, MRG blue, CLS dim, DFT yellow) and Git state (✓/✗ with colors)
745
-
746
- ### Added
747
-
748
- - Support for new `:stalled` assignment state icon (◼ yellow)
749
-
750
- ## [0.2.5] - 2026-02-17
751
-
752
- ### Fixed
753
-
754
- - 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
755
- - Restore `PROJECT_ROOT_PATH` and clear `ProjectRootFinder` cache after collection to prevent cross-worktree contamination
756
-
757
- ## [0.2.4] - 2026-02-17
758
-
759
- ### Changed
760
-
761
- - Replace release-centric status view with assignment-focused dashboard showing path, state, progress, and PR columns.
762
- - Remove release resolver dependency from status collector.
763
- - Add step summary data (total/done/failed) to worktree context collection.
764
- - Add PR metadata display with abbreviated state (OPN, MRG, CLS, DFT) in status output.
765
-
766
- ## [0.2.3] - 2026-02-17
767
-
768
- ### Changed
769
-
770
- - Protect `gem_root` memoization with mutex synchronization.
771
- - Use atomic tempfile writes for generated assignment job files.
772
- - Improve task ID extraction robustness in worktree context collector.
773
-
774
- ## [0.2.2] - 2026-02-17
775
-
776
- ### Fixed
777
-
778
- - Ensure `prune --quiet` still executes prune logic instead of returning early.
779
- - Add missing runtime dependencies in gemspec for required ACE gems.
780
- - Handle `SIGINT` in executable with exit code `130`.
781
-
782
- ### Changed
783
-
784
- - Expand assignment preset lookup to include `.ace/assign/presets` before defaults.
785
- - Use post-action wording in `work-on` command output for accurate UX timing.
786
- - Improve prune task-done checks to account for repository common root context.
787
-
788
- ## [0.2.1] - 2026-02-17
789
-
790
- ### Changed
791
-
792
- - Release patch after the valid review cycle with no additional code changes required.
793
-
794
- ## [0.2.0] - 2026-02-17
795
-
796
- ### Changed
797
-
798
- - Promote the initial `ace-overseer` implementation set to a minor release.
799
- - Align release metadata for assignment-driven delivery flow.
800
-
801
- ## [0.1.0] - 2026-02-17
802
-
803
- ### 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.
804
49
 
805
- - New `ace-overseer` gem scaffold, executable, and CLI registry.
806
- - `work-on` command orchestration:
807
- - provision/reuse task worktree
808
- - open tmux window for task context
809
- - create assignment from configured preset
810
- - `status` command with table and JSON output for active task worktrees.
811
- - `prune` command with safety checks, dry-run mode, and confirmation flow.
812
- - Core models:
813
- - `WorkContext`
814
- - `PruneCandidate`
815
- - Core atoms:
816
- - `WindowNameFormatter`
817
- - `PresetResolver`
818
- - `StatusFormatter`
819
- - Molecule layer:
820
- - `WorktreeProvisioner`
821
- - `TmuxWindowOpener`
822
- - `AssignmentLauncher`
823
- - `WorktreeContextCollector`
824
- - `PruneSafetyChecker`
825
- - Organism layer:
826
- - `WorkOnOrchestrator`
827
- - `StatusCollector`
828
- - `PruneOrchestrator`
829
- - Test coverage for atoms, models, molecules, organisms, and CLI command registration.