ace-overseer 0.13.8 → 0.14.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: debc37b9d66ae937fb227ae69cf7e91d44b9433e9fcb7274d814b3e32db207cf
4
- data.tar.gz: 68f4a63c201c5bdc8954e98d7a7e6ce6d90ff049467a28c701d33e75141166e2
3
+ metadata.gz: fb292ef843ffd5c7253b24cefe7e30f214be59f9e5b7dc1f4bd7ad263fc7bf4f
4
+ data.tar.gz: 21bbfe1148509df32512f1bbbf2aa2b001531c29e7da92407c7083e6dc822a5b
5
5
  SHA512:
6
- metadata.gz: a71de2ee77251750eaf1245ca025073001dfc82d24319bc5443f796ebb3df83a24f993c3c3b744fc180bfceafea0c0b92acb53fdec6825b4bb7934986a681b4b
7
- data.tar.gz: 6fcd307e247f6453d8ab1d55e7eb94e2dddf33604693cfbecaf9b946e00b221f7765caa6a829c6777579a0205519b85937263e58d926f8edb15ef34f2f3a6f60
6
+ metadata.gz: 52acbe53a83d98c940feb512bde7059b8f0bc60343d9ad1e1b83fe841691afc5177f550743fe444177b00952e2ed66df34037c2214095ddc4d397b4715e69b4d
7
+ data.tar.gz: d479e4f2444a12c12687f7b8cf4f329bb2c43e74ea855017d79299e89354fa1cd2bd81bafb7302dd34853059d5c07bc9a8ed9d645f3f94fac3b6dc5716bf4c57
data/CHANGELOG.md CHANGED
@@ -7,6 +7,101 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.14.12] - 2026-04-19
11
+
12
+ ### Technical
13
+ - 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.
14
+
15
+ ## [0.14.11] - 2026-04-18
16
+
17
+ ### Technical
18
+ - 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.
19
+
20
+ ## [0.14.10] - 2026-04-16
21
+
22
+ ### Fixed
23
+ - 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.
24
+
25
+ ## [0.14.9] - 2026-04-16
26
+
27
+ ### Fixed
28
+ - 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.
29
+
30
+ ## [0.14.8] - 2026-04-16
31
+
32
+ ### Fixed
33
+ - 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.
34
+
35
+ ## [0.14.7] - 2026-04-16
36
+
37
+ ### Fixed
38
+ - 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.
39
+
40
+ ## [0.14.6] - 2026-04-15
41
+
42
+ ### Changed
43
+ - 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.
44
+ - Added `TS-OVERSEER-002` status-and-operations coverage with watch-refresh and multi-task bundle journeys.
45
+ - Updated `docs/usage.md` with explicit public verification paths for preset override, idempotent rerun, and minimal prune lifecycle checks.
46
+
47
+ ### Fixed
48
+ - Updated the `ace-assign` runtime dependency constraint to `~> 0.53` so overseer remains aligned with the current assign minor release line.
49
+
50
+ ## [0.14.4] - 2026-04-13
51
+
52
+ ### Fixed
53
+ - 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.
54
+
55
+ ## [0.14.3] - 2026-04-13
56
+
57
+ ### Fixed
58
+ - 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.
59
+
60
+ ## [0.14.2] - 2026-04-13
61
+
62
+ ### Fixed
63
+ - Updated the `ace-assign` runtime dependency constraint to `~> 0.49` so overseer remains compatible with the new assign minor release line.
64
+
65
+ ## [0.14.1] - 2026-04-13
66
+
67
+ ### Changed
68
+ - Completed the batch i05 migration follow-through for this package and aligned it with the restarted `fast` / `feat` / `e2e` verification model.
69
+
70
+ ### Technical
71
+ - Included in the coordinated assignment-driven patch release for batch i05 package updates.
72
+
73
+
74
+ ## [0.14.0] - 2026-04-12
75
+
76
+ ### Changed
77
+ - Migrated package tests to the `fast` / `feat` / `e2e` model by moving deterministic coverage from `test/{atoms,commands,models,molecules,organisms}` into `test/fast/*`.
78
+ - Added E2E migration decision tracking for `TS-OVERSEER-001` via `test/e2e/TS-OVERSEER-001-overseer-workflow/e2e-decision-record.md`.
79
+ - 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`.
80
+
81
+ ### Fixed
82
+ - Hardened `TS-OVERSEER-001` sandbox setup by loading `mise.toml` from `${ACE_E2E_SOURCE_ROOT:-$PROJECT_ROOT_PATH}`.
83
+ - 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.
84
+
85
+ ## [0.13.12] - 2026-04-12
86
+
87
+ ### Fixed
88
+ - Updated the `ace-git-worktree` runtime dependency constraint to `~> 0.20` so overseer remains compatible with the new worktree minor release line.
89
+
90
+ ## [0.13.11] - 2026-04-11
91
+
92
+ ### Fixed
93
+ - Updated the `ace-assign` runtime dependency constraint to `~> 0.47` so overseer remains compatible with the latest assign minor release line.
94
+
95
+ ## [0.13.10] - 2026-04-07
96
+
97
+ ### Fixed
98
+ - Updated the `ace-assign` runtime dependency constraint to `~> 0.44` so overseer remains compatible with the new assign minor release line.
99
+
100
+ ## [0.13.9] - 2026-04-01
101
+
102
+ ### Fixed
103
+ - Updated the `ace-assign` runtime dependency constraint to `~> 0.42` so overseer remains compatible with the new assign minor release line.
104
+
10
105
  ## [0.13.8] - 2026-03-29
11
106
 
12
107
  ### Technical
data/README.md CHANGED
@@ -46,5 +46,17 @@ ace-overseer status --watch
46
46
 
47
47
  **Customize the workflow** - the full pipeline is defined in two layers: the [assignment preset](../ace-assign/.ace-defaults/assign/presets/work-on-task.yml) controls which steps run and in what order (onboard, implement, test, release, review, PR), while each step references a [workflow instruction](../ace-task/handbook/workflow-instructions/task/work.wf.md) that defines how it executes. Browse [available presets](../ace-assign/.ace-defaults/assign/presets/) or create your own to tailor the pipeline to your project.
48
48
 
49
+ For explicit end-to-end validation paths, see [Public Verification Paths](docs/usage.md#public-verification-paths).
50
+
51
+ ## Testing
52
+
53
+ - `ace-test ace-overseer` runs deterministic fast coverage from `test/fast/`.
54
+ - `ace-test ace-overseer feat` runs deterministic feature coverage from `test/feat/` when present.
55
+ - `ace-test ace-overseer all` runs fast + feat deterministic coverage.
56
+ - `ace-test-e2e ace-overseer` runs retained workflow scenarios from `test/e2e/`.
57
+
58
+ The package no longer uses deterministic `*_test.rb` files under `test/e2e/` and
59
+ does not use `ace-test ace-overseer e2e` as a deterministic test path.
60
+
49
61
  ---
50
62
  [Getting Started](docs/getting-started.md) | [Usage Guide](docs/usage.md) | [Handbook - Skills, Agents, Templates](docs/handbook.md) | Part of [ACE](https://github.com/cs3b/ace)
data/docs/usage.md CHANGED
@@ -72,3 +72,27 @@ Start task work: `ace-overseer work-on --task 8q4.t.umu.1`.
72
72
  Check dashboard: `ace-overseer status`.
73
73
 
74
74
  Preview then prune: `ace-overseer prune --dry-run`, then `ace-overseer prune --yes`.
75
+
76
+ ## Public Verification Paths
77
+
78
+ Use these user-visible checks when validating behavior end-to-end:
79
+
80
+ - Preset override path:
81
+
82
+ 1. `ace-overseer work-on --task <task-ref> --preset <preset-name>`
83
+ 2. `ace-git-worktree list` (confirm worktree exists for `<task-ref>`)
84
+ 3. `ace-overseer status --format json` (confirm the task appears with assignment/preset details)
85
+
86
+ - Idempotent rerun oracle:
87
+
88
+ 1. Run `ace-overseer work-on --task <task-ref>` twice
89
+ 2. Verify one task entry remains in `ace-overseer status --format json`
90
+ 3. Verify only one matching worktree exists in `ace-git-worktree list`
91
+
92
+ - Prune lifecycle minimal flow:
93
+
94
+ 1. `ace-task done <task-ref>`
95
+ 2. `ace-overseer prune --dry-run`
96
+ 3. `ace-overseer prune --yes`
97
+ 4. `ace-git-worktree list` to confirm removed vs retained task worktrees
98
+ 5. `ace-overseer prune --dry-run` to confirm no remaining safe candidates
@@ -31,6 +31,8 @@ module Ace
31
31
  else
32
32
  run_once(format)
33
33
  end
34
+ rescue Interrupt
35
+ nil
34
36
  rescue => e
35
37
  raise Ace::Support::Cli::Error.new(e.message)
36
38
  end
@@ -4,11 +4,13 @@ module Ace
4
4
  module Overseer
5
5
  module Molecules
6
6
  class TmuxWindowOpener
7
- def initialize(tmux_window_command: nil)
7
+ def initialize(tmux_window_command: nil, tmux_executor: nil)
8
8
  @tmux_window_command = tmux_window_command || Ace::Tmux::CLI::Commands::Window.new
9
+ @tmux_executor = tmux_executor || Ace::Tmux::Molecules::TmuxExecutor.new
9
10
  end
10
11
 
11
12
  def open(worktree_path:, preset: nil)
13
+ ensure_session_exists
12
14
  return if window_already_open?(worktree_path)
13
15
 
14
16
  @tmux_window_command.call(
@@ -21,13 +23,21 @@ module Ace
21
23
 
22
24
  private
23
25
 
26
+ def ensure_session_exists
27
+ session = ENV["ACE_TMUX_SESSION"]
28
+ return unless session && !session.empty?
29
+ return if @tmux_executor.capture(["tmux", "has-session", "-t", session]).success?
30
+
31
+ created = @tmux_executor.run(["tmux", "new-session", "-d", "-s", session])
32
+ raise "Failed to create tmux session '#{session}'" unless created
33
+ end
34
+
24
35
  def window_already_open?(worktree_path)
25
36
  session = ENV["ACE_TMUX_SESSION"]
26
37
  return false unless session
27
38
 
28
39
  name = File.basename(worktree_path.to_s)
29
- executor = Ace::Tmux::Molecules::TmuxExecutor.new
30
- result = executor.capture(["tmux", "list-windows", "-t", session, "-F", '#{window_name}'])
40
+ result = @tmux_executor.capture(["tmux", "list-windows", "-t", session, "-F", '#{window_name}'])
31
41
  return false unless result.success?
32
42
 
33
43
  result.stdout.split("\n").any? { |w| w.strip == name }
@@ -11,8 +11,8 @@ module Ace
11
11
  task_loader: nil, config: nil, assignment_detector: nil)
12
12
  @worktree_provisioner = worktree_provisioner || Molecules::WorktreeProvisioner.new
13
13
  @tmux_window_opener = tmux_window_opener || Molecules::TmuxWindowOpener.new
14
- @assignment_launcher = assignment_launcher || Molecules::AssignmentLauncher.new
15
14
  @task_manager = task_loader || Ace::Task::Organisms::TaskManager.new
15
+ @assignment_launcher = assignment_launcher || Molecules::AssignmentLauncher.new(task_manager: @task_manager)
16
16
  @config = config || Ace::Overseer.config
17
17
  @assignment_detector = assignment_detector
18
18
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Ace
4
4
  module Overseer
5
- VERSION = "0.13.8"
5
+ VERSION = '0.14.12'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ace-overseer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.8
4
+ version: 0.14.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michal Czyz
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2026-03-29 00:00:00.000000000 Z
10
+ date: 2026-04-20 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: ace-support-cli
@@ -71,14 +71,14 @@ dependencies:
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '0.41'
74
+ version: '0.53'
75
75
  type: :runtime
76
76
  prerelease: false
77
77
  version_requirements: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '0.41'
81
+ version: '0.53'
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: ace-git
84
84
  requirement: !ruby/object:Gem::Requirement
@@ -99,14 +99,14 @@ dependencies:
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '0.19'
102
+ version: '0.20'
103
103
  type: :runtime
104
104
  prerelease: false
105
105
  version_requirements: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '0.19'
109
+ version: '0.20'
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: ace-task
112
112
  requirement: !ruby/object:Gem::Requirement