ace-git-worktree 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.ace-defaults/git/worktree.yml +250 -0
- data/.ace-defaults/nav/protocols/wfi-sources/ace-git-worktree.yml +19 -0
- data/CHANGELOG.md +957 -0
- data/LICENSE +21 -0
- data/README.md +40 -0
- data/Rakefile +14 -0
- data/docs/demo/ace-git-worktree-getting-started.gif +0 -0
- data/docs/demo/ace-git-worktree-getting-started.tape.yml +28 -0
- data/docs/demo/fixtures/README.md +3 -0
- data/docs/demo/fixtures/sample.txt +1 -0
- data/docs/getting-started.md +114 -0
- data/docs/handbook.md +38 -0
- data/docs/usage.md +334 -0
- data/exe/ace-git-worktree +24 -0
- data/handbook/agents/worktree.ag.md +189 -0
- data/handbook/skills/as-git-worktree/SKILL.md +27 -0
- data/handbook/skills/as-git-worktree-create/SKILL.md +21 -0
- data/handbook/skills/as-git-worktree-manage/SKILL.md +20 -0
- data/handbook/workflow-instructions/git/worktree-create.wf.md +262 -0
- data/handbook/workflow-instructions/git/worktree-manage.wf.md +384 -0
- data/handbook/workflow-instructions/git/worktree.wf.md +224 -0
- data/lib/ace/git/worktree/atoms/git_command.rb +121 -0
- data/lib/ace/git/worktree/atoms/path_expander.rb +189 -0
- data/lib/ace/git/worktree/atoms/slug_generator.rb +235 -0
- data/lib/ace/git/worktree/atoms/task_id_extractor.rb +91 -0
- data/lib/ace/git/worktree/cli/commands/config.rb +50 -0
- data/lib/ace/git/worktree/cli/commands/create.rb +80 -0
- data/lib/ace/git/worktree/cli/commands/list.rb +76 -0
- data/lib/ace/git/worktree/cli/commands/prune.rb +43 -0
- data/lib/ace/git/worktree/cli/commands/remove.rb +48 -0
- data/lib/ace/git/worktree/cli/commands/shared_helpers.rb +66 -0
- data/lib/ace/git/worktree/cli/commands/switch.rb +44 -0
- data/lib/ace/git/worktree/cli.rb +103 -0
- data/lib/ace/git/worktree/commands/config_command.rb +351 -0
- data/lib/ace/git/worktree/commands/create_command.rb +961 -0
- data/lib/ace/git/worktree/commands/list_command.rb +247 -0
- data/lib/ace/git/worktree/commands/prune_command.rb +260 -0
- data/lib/ace/git/worktree/commands/remove_command.rb +522 -0
- data/lib/ace/git/worktree/commands/switch_command.rb +249 -0
- data/lib/ace/git/worktree/configuration.rb +167 -0
- data/lib/ace/git/worktree/models/worktree_config.rb +502 -0
- data/lib/ace/git/worktree/models/worktree_info.rb +303 -0
- data/lib/ace/git/worktree/models/worktree_metadata.rb +294 -0
- data/lib/ace/git/worktree/molecules/config_loader.rb +125 -0
- data/lib/ace/git/worktree/molecules/current_task_linker.rb +136 -0
- data/lib/ace/git/worktree/molecules/hook_executor.rb +361 -0
- data/lib/ace/git/worktree/molecules/parent_task_resolver.rb +186 -0
- data/lib/ace/git/worktree/molecules/pr_creator.rb +253 -0
- data/lib/ace/git/worktree/molecules/task_committer.rb +329 -0
- data/lib/ace/git/worktree/molecules/task_fetcher.rb +244 -0
- data/lib/ace/git/worktree/molecules/task_pusher.rb +183 -0
- data/lib/ace/git/worktree/molecules/task_status_updater.rb +447 -0
- data/lib/ace/git/worktree/molecules/worktree_creator.rb +832 -0
- data/lib/ace/git/worktree/molecules/worktree_lister.rb +337 -0
- data/lib/ace/git/worktree/molecules/worktree_remover.rb +416 -0
- data/lib/ace/git/worktree/organisms/task_worktree_orchestrator.rb +906 -0
- data/lib/ace/git/worktree/organisms/worktree_manager.rb +714 -0
- data/lib/ace/git/worktree/version.rb +9 -0
- data/lib/ace/git/worktree.rb +215 -0
- metadata +218 -0
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,957 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.19.0] - 2026-03-23
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- Moved Installation from README to Getting Started guide.
|
|
14
|
+
- Clarified agent workflow references in Use Cases (removed raw `/as-` prefix).
|
|
15
|
+
- Replaced generic "coordinate with git tools" use case with ace-overseer integration paragraph.
|
|
16
|
+
- Explained "hooks" in README intro with parenthetical definition.
|
|
17
|
+
- Converted Related Tools in usage guide to linked sibling packages.
|
|
18
|
+
- Redesigned getting-started demo tape: proper sandbox setup with git-init, branch-based worktree creation.
|
|
19
|
+
- Re-recorded getting-started demo GIF from new tape.
|
|
20
|
+
|
|
21
|
+
## [0.18.3] - 2026-03-23
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
- Refreshed the package README to align with the current ACE layout pattern, including standardized section labels, bullet style, and footer link format.
|
|
25
|
+
|
|
26
|
+
## [0.18.2] - 2026-03-22
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
- Updated the getting-started demo to create and reuse a runtime `ace-task` ID for task-aware worktree preview commands instead of hard-coded `001`.
|
|
30
|
+
- Added explicit sandbox git bootstrap setup in the demo scenario to keep dry-run worktree commands reproducible in clean environments.
|
|
31
|
+
|
|
32
|
+
## [0.18.1] - 2026-03-22
|
|
33
|
+
|
|
34
|
+
### Technical
|
|
35
|
+
- Removed `release` template-variable support and references from task configuration runtime paths, aligning package behavior with task ID-based defaults.
|
|
36
|
+
|
|
37
|
+
## [0.18.0] - 2026-03-22
|
|
38
|
+
|
|
39
|
+
### Changed
|
|
40
|
+
- Shortened default task worktree naming to `t.{task_id}` for all default package behavior.
|
|
41
|
+
- Expanded task worktree ID parsing so short and short-prefixed task IDs (`t.*`, `ace-t.*`) resolve consistently with existing `task.*` and `ace-task.*` formats.
|
|
42
|
+
|
|
43
|
+
## [0.17.2] - 2026-03-22
|
|
44
|
+
|
|
45
|
+
### Technical
|
|
46
|
+
- Aligned the getting-started demo tape output path with the checked-in `docs/demo` asset.
|
|
47
|
+
|
|
48
|
+
## [0.17.1] - 2026-03-22
|
|
49
|
+
|
|
50
|
+
### Fixed
|
|
51
|
+
- Corrected user-doc frontmatter and Markdown table rendering in the README plus getting-started, usage, and handbook docs.
|
|
52
|
+
- Replaced Kramdown-only code block markup with fenced Markdown blocks in user-facing docs.
|
|
53
|
+
- Added `docs/**/*` to the gemspec file manifest and removed the duplicated `--keep-directory` option entry from the usage reference.
|
|
54
|
+
|
|
55
|
+
## [0.17.0] - 2026-03-22
|
|
56
|
+
|
|
57
|
+
### Changed
|
|
58
|
+
- Rewrote the README as a landing page and split long-form package documentation into getting-started, usage, and handbook guides.
|
|
59
|
+
- Added committed demo tape and GIF assets for the new documentation flow.
|
|
60
|
+
- Refreshed package metadata messaging to match the landing-page positioning.
|
|
61
|
+
|
|
62
|
+
## [0.16.1] - 2026-03-18
|
|
63
|
+
|
|
64
|
+
### Changed
|
|
65
|
+
- Migrated CLI namespace from `Ace::Core::CLI::*` to `Ace::Support::Cli::*` (ace-support-cli is now the canonical home for CLI infrastructure).
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
## [0.16.0] - 2026-03-18
|
|
69
|
+
|
|
70
|
+
### Changed
|
|
71
|
+
- Removed legacy backward-compatibility behavior as part of the 0.10 cleanup release.
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
## [0.15.7] - 2026-03-17
|
|
75
|
+
|
|
76
|
+
### Fixed
|
|
77
|
+
- Updated CLI help-output tests to accept the shared `ace-support-cli` help header format after framework migration.
|
|
78
|
+
|
|
79
|
+
## [0.15.6] - 2026-03-15
|
|
80
|
+
|
|
81
|
+
### Fixed
|
|
82
|
+
- Fixed `--delete-branch` flag raising "missing argument" error after ace-support-cli migration by replacing multi-char `-db` alias with single-char `-D` to avoid OptionParser misparse
|
|
83
|
+
|
|
84
|
+
## [0.15.5] - 2026-03-15
|
|
85
|
+
|
|
86
|
+
### Fixed
|
|
87
|
+
- Fixed `list` command returning "No worktrees found" after ace-support-cli migration by guarding nil option values from being treated as explicit `--no-*` filters
|
|
88
|
+
|
|
89
|
+
## [0.15.4] - 2026-03-15
|
|
90
|
+
|
|
91
|
+
### Changed
|
|
92
|
+
- Migrated CLI framework from dry-cli to ace-support-cli
|
|
93
|
+
|
|
94
|
+
## [0.15.3] - 2026-03-13
|
|
95
|
+
|
|
96
|
+
### Changed
|
|
97
|
+
- Updated canonical worktree skills to explicitly run bundled workflows in the current project and execute them end-to-end.
|
|
98
|
+
|
|
99
|
+
## [0.15.2] - 2026-03-13
|
|
100
|
+
|
|
101
|
+
### Changed
|
|
102
|
+
- Removed the Codex-specific delegated execution metadata from the canonical `as-git-worktree` and `as-git-worktree-manage` skills so provider projections now inherit the canonical skill body unchanged.
|
|
103
|
+
|
|
104
|
+
## [0.15.1] - 2026-03-12
|
|
105
|
+
|
|
106
|
+
### Fixed
|
|
107
|
+
- Kept `ace-git-worktree list --format json` stdout JSON-only by suppressing CLI config summaries and legacy summary footers in JSON mode.
|
|
108
|
+
|
|
109
|
+
### Technical
|
|
110
|
+
- Added regression coverage for JSON list output to ensure downstream parsers receive a single valid JSON document.
|
|
111
|
+
|
|
112
|
+
## [0.15.0] - 2026-03-12
|
|
113
|
+
|
|
114
|
+
### Added
|
|
115
|
+
- Added Codex-specific delegated execution metadata to the canonical `as-git-worktree` and `as-git-worktree-manage` skills so the generated Codex skills run in fork context on `gpt-5.3-codex-spark`.
|
|
116
|
+
|
|
117
|
+
## [0.14.0] - 2026-03-10
|
|
118
|
+
|
|
119
|
+
### Added
|
|
120
|
+
- Added the canonical handbook-owned git worktree skill for task-aware worktree management.
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
## [0.13.22] - 2026-03-05
|
|
124
|
+
|
|
125
|
+
### Fixed
|
|
126
|
+
- Fixed `ace-git-worktree` exit-code propagation for command failures so missing tasks and invalid remove/create operations now return a non-zero status from the executable.
|
|
127
|
+
|
|
128
|
+
## [0.13.21] - 2026-03-05
|
|
129
|
+
|
|
130
|
+
### Changed
|
|
131
|
+
- Worktree task-aware E2E scenarios were migrated to non-legacy `.ace-tasks` fixtures and modern task IDs.
|
|
132
|
+
|
|
133
|
+
## [0.13.20] - 2026-03-03
|
|
134
|
+
|
|
135
|
+
### Fixed
|
|
136
|
+
- `TaskIDExtractor`: support B36TS directory naming (`ace-task.hy4`, `task.hy4`) in path-based extraction, fixing task ID resolution for new-format worktree paths
|
|
137
|
+
|
|
138
|
+
## [0.13.19] - 2026-03-03
|
|
139
|
+
|
|
140
|
+
### Fixed
|
|
141
|
+
- `TaskIDExtractor`: support B36TS task ID format (`8pp.t.hy4`) in `extract` and `normalize` methods, fixing `ace-overseer work-on` failure when updating task status with new ace-task IDs
|
|
142
|
+
|
|
143
|
+
## [0.13.18] - 2026-03-02
|
|
144
|
+
|
|
145
|
+
### Changed
|
|
146
|
+
- Replace `ace-taskflow` dependency with `ace-task` — migrate `TaskFetcher`, `TaskStatusUpdater`, and `TaskIDExtractor` to ace-task APIs
|
|
147
|
+
- Update CLI fallback commands from `ace-taskflow` to `ace-task`
|
|
148
|
+
- Update user-facing error messages and help text to reference `ace-task`
|
|
149
|
+
|
|
150
|
+
## [0.13.17] - 2026-02-25
|
|
151
|
+
|
|
152
|
+
### Technical
|
|
153
|
+
- Bump runtime dependency constraint from `ace-git ~> 0.10` to `ace-git ~> 0.11`.
|
|
154
|
+
|
|
155
|
+
## [0.13.16] - 2026-02-24
|
|
156
|
+
|
|
157
|
+
### Fixed
|
|
158
|
+
- Restore correct `list` filter behavior for `--task-associated`, `--no-task-associated`, and `--no-usable` when invoked via the dry-cli command path by preserving explicit false flags during CLI-to-legacy argument forwarding.
|
|
159
|
+
|
|
160
|
+
### Technical
|
|
161
|
+
- Add CLI regression coverage to assert forwarding of `--task-associated`, `--no-task-associated`, and `--no-usable` to `ListCommand`.
|
|
162
|
+
|
|
163
|
+
## [0.13.15] - 2026-02-24
|
|
164
|
+
|
|
165
|
+
### Fixed
|
|
166
|
+
- Resolve task-association listing via task-aware worktree metadata whenever `--task-associated` or `--no-task-associated` filters are requested, even without `--show-tasks`.
|
|
167
|
+
|
|
168
|
+
### Technical
|
|
169
|
+
- Add regression coverage for CLI filter option propagation and manager-side task-filter listing path selection.
|
|
170
|
+
|
|
171
|
+
## [0.13.14] - 2026-02-24
|
|
172
|
+
|
|
173
|
+
### Fixed
|
|
174
|
+
- Compute list statistics from the filtered worktree set in `list` output so `--task-associated` and other filtered views report accurate totals.
|
|
175
|
+
|
|
176
|
+
## [0.13.13] - 2026-02-23
|
|
177
|
+
|
|
178
|
+
### Technical
|
|
179
|
+
- Updated internal dependency version constraints to current releases
|
|
180
|
+
|
|
181
|
+
## [0.13.12] - 2026-02-22
|
|
182
|
+
|
|
183
|
+
### Changed
|
|
184
|
+
- Migrate CLI to standard multi-command help pattern with explicit `help`, `--help`, and `-h` registration via `HelpCommand`
|
|
185
|
+
- Remove implicit default routing behavior and require explicit command selection for unknown inputs
|
|
186
|
+
|
|
187
|
+
### Technical
|
|
188
|
+
- Route executable through `Dry::CLI.new(...).call(arguments: ...)` with no-argument normalization to `--help`
|
|
189
|
+
- Update CLI command tests to use explicit `Dry::CLI` and executable-level routing assertions
|
|
190
|
+
|
|
191
|
+
## [0.13.10] - 2026-02-21
|
|
192
|
+
|
|
193
|
+
### Fixed
|
|
194
|
+
- Fix task ID extraction from worktree path matching incidental 3-digit numbers in parent directories (e.g., `ace-task.273`) by using `File.basename` instead of full path
|
|
195
|
+
|
|
196
|
+
### Technical
|
|
197
|
+
- Add `WorktreeInfoTest` covering task ID extraction from porcelain output, parent-path false matches, and branch fallback
|
|
198
|
+
|
|
199
|
+
## [0.13.9] - 2026-02-21
|
|
200
|
+
|
|
201
|
+
### Fixed
|
|
202
|
+
- Rewrite `from_git_output_list` to parse porcelain format by blank-line-separated blocks instead of fixed 3-line assumption, correctly handling prunable and detached worktrees
|
|
203
|
+
|
|
204
|
+
## [0.13.8] - 2026-02-21
|
|
205
|
+
|
|
206
|
+
### Fixed
|
|
207
|
+
- Fix worktree filter to handle `false` values for `task_associated` and `usable` options (use nil check instead of truthy check, preventing false from being treated as "not set")
|
|
208
|
+
- Show `target_branch` in dry-run output when present
|
|
209
|
+
|
|
210
|
+
### Technical
|
|
211
|
+
- Add tests for `list_all` with `false` filter values to prevent regression
|
|
212
|
+
- Improve E2E test for `switch` command to verify path existence dynamically
|
|
213
|
+
|
|
214
|
+
## [0.13.7] - 2026-02-19
|
|
215
|
+
|
|
216
|
+
### Technical
|
|
217
|
+
- Namespace worktree workflow instructions into git/ subdirectory
|
|
218
|
+
|
|
219
|
+
## [0.13.6] - 2026-02-19
|
|
220
|
+
|
|
221
|
+
### Fixed
|
|
222
|
+
- Update TaskIDExtractor tests to remove `.00` orchestrator suffix references after TaskReferenceParser change
|
|
223
|
+
|
|
224
|
+
## [0.13.5] - 2026-02-19
|
|
225
|
+
|
|
226
|
+
### Fixed
|
|
227
|
+
- Pass `--force` flag to `git worktree remove` when force removal is requested, fixing "contains modified or untracked files" errors during forced prune
|
|
228
|
+
|
|
229
|
+
## [0.13.4] - 2026-02-19
|
|
230
|
+
|
|
231
|
+
### Fixed
|
|
232
|
+
- Add `ignore_untracked` support to worktree removal dirty checks so callers can treat untracked-only trees as safe while still blocking tracked changes
|
|
233
|
+
|
|
234
|
+
## [0.13.3] - 2026-02-18
|
|
235
|
+
|
|
236
|
+
### Fixed
|
|
237
|
+
- Ensure parent directory exists before worktree path validation to prevent PathExpander rejection when `.ace-wt/` directory doesn't exist yet
|
|
238
|
+
|
|
239
|
+
## [0.13.2] - 2026-02-16
|
|
240
|
+
|
|
241
|
+
### Fixed
|
|
242
|
+
- Fix ace-tmux invocation in CreateCommand: remove hardcoded `start` subcommand so ace-tmux can auto-detect context (add window inside existing tmux session vs start new session)
|
|
243
|
+
|
|
244
|
+
## [0.13.1] - 2026-02-16
|
|
245
|
+
|
|
246
|
+
### Fixed
|
|
247
|
+
- Fix `tmux_enabled?` and `should_auto_navigate?` config loading: `ConfigLoader#load` returns a `WorktreeConfig` object, not a raw hash — remove redundant `WorktreeConfig.new()` wrapping that caused tmux config to be silently ignored
|
|
248
|
+
|
|
249
|
+
## [0.13.0] - 2026-02-16
|
|
250
|
+
|
|
251
|
+
### Added
|
|
252
|
+
- Tmux integration for worktree creation: optional `tmux: true` config under `git.worktree` launches an `ace-tmux` session rooted at the new worktree after creation
|
|
253
|
+
- `tmux?` config accessor in WorktreeConfig model
|
|
254
|
+
- Runtime detection of `ace-tmux` binary with graceful fallback to `cd` hint when unavailable
|
|
255
|
+
|
|
256
|
+
### Technical
|
|
257
|
+
- Migrate E2E tests to TS-format and enhance task-awareness
|
|
258
|
+
- Consolidate E2E test configuration fixtures
|
|
259
|
+
|
|
260
|
+
## [0.12.7] - 2026-02-11
|
|
261
|
+
|
|
262
|
+
### Fixed
|
|
263
|
+
- TaskIDExtractor regex now correctly matches `task.NNN` in paths containing `ace-task.NNN` directory prefixes
|
|
264
|
+
|
|
265
|
+
### Technical
|
|
266
|
+
- Add path extraction test cases for TaskIDExtractor
|
|
267
|
+
|
|
268
|
+
## [0.12.6] - 2026-02-01
|
|
269
|
+
|
|
270
|
+
### Fixed
|
|
271
|
+
- Prevent non-zero exit on help command
|
|
272
|
+
- Correct target branch fallback for non-subtask worktrees
|
|
273
|
+
- Stub `GitCommand.current_branch` in integration tests to prevent tests from reading actual git branch
|
|
274
|
+
|
|
275
|
+
### Technical
|
|
276
|
+
- Adopt exception-based exit codes
|
|
277
|
+
- Standardize E2E test artifact paths
|
|
278
|
+
- Update E2E test directory structure for worktree operations
|
|
279
|
+
|
|
280
|
+
## [0.12.5] - 2026-01-28
|
|
281
|
+
|
|
282
|
+
### Fixed
|
|
283
|
+
|
|
284
|
+
- Use current branch as target branch fallback for non-subtask tasks instead of always defaulting to main, fixing wrong PR target branch when creating worktrees from feature branches
|
|
285
|
+
|
|
286
|
+
## [0.12.4] - 2026-01-22
|
|
287
|
+
|
|
288
|
+
### Fixed
|
|
289
|
+
- Correct branch existence detection in `branch_exists?` to check local and remote refs separately (git show-ref --verify requires ALL refs to exist, not ANY)
|
|
290
|
+
- Correct remote branch detection in `detect_remote_branch` to validate remote names via `validate_remote_exists`, preventing branches like `feature/login` from being incorrectly treated as remote branches
|
|
291
|
+
|
|
292
|
+
## [0.12.3] - 2026-01-20
|
|
293
|
+
|
|
294
|
+
### Fixed
|
|
295
|
+
- Fallback to current branch for target branch resolution when parent task has no worktree metadata (Task 222)
|
|
296
|
+
|
|
297
|
+
## [0.12.2] - 2026-01-16
|
|
298
|
+
|
|
299
|
+
### Changed
|
|
300
|
+
- Rename context: to bundle: keys in configuration files
|
|
301
|
+
|
|
302
|
+
## [0.12.1] - 2026-01-14
|
|
303
|
+
|
|
304
|
+
### Changed
|
|
305
|
+
- Migrate CLI to Hanami pattern (per ADR-023)
|
|
306
|
+
- Moved command classes from `cli/*.rb` to `cli/commands/*.rb`
|
|
307
|
+
- Updated namespace from `CLI::*` to `CLI::Commands::*`
|
|
308
|
+
- SharedHelpers module moved to `cli/commands/shared_helpers.rb`
|
|
309
|
+
- Commands still delegate to `commands/*_command.rb` for business logic
|
|
310
|
+
|
|
311
|
+
## [0.12.0] - 2026-01-13
|
|
312
|
+
|
|
313
|
+
### Added
|
|
314
|
+
- Target branch tracking in worktree metadata
|
|
315
|
+
- `WorktreeMetadata` now includes `target_branch` attribute for tracking PR target branch
|
|
316
|
+
- `ParentTaskResolver` molecule automatically determines target branch from parent task
|
|
317
|
+
- Subtasks target their orchestrator's worktree branch instead of defaulting to main
|
|
318
|
+
- CLI `--target-branch` option allows manual override of auto-detected target branch
|
|
319
|
+
- Fallback to `main` when parent task or worktree metadata is not found
|
|
320
|
+
|
|
321
|
+
### Technical
|
|
322
|
+
- New `ParentTaskResolver` molecule for resolving parent task's worktree branch
|
|
323
|
+
- Updated `WorktreeMetadata` model with optional `target_branch` field
|
|
324
|
+
- Updated `WorktreeCreator.create_for_task` to accept and return `target_branch`
|
|
325
|
+
- Updated `TaskWorktreeOrchestrator` to determine and pass target branch through workflow
|
|
326
|
+
|
|
327
|
+
## [0.11.0] - 2026-01-07
|
|
328
|
+
|
|
329
|
+
### Changed
|
|
330
|
+
- **BREAKING**: Migrate CLI framework from Thor to dry-cli (per ADR-018)
|
|
331
|
+
- Replaced `thor` dependency with `dry-cli ~> 1.0`
|
|
332
|
+
- Added `ace-support-core ~> 0.10` dependency for CLI base classes
|
|
333
|
+
- New CLI structure: `lib/ace/git/worktree/cli/` contains dry-cli command classes
|
|
334
|
+
- Existing `commands/` directory preserved (contains command implementations)
|
|
335
|
+
- Command aliases: `list` → `ls`, `switch` → `cd`, `remove` → `rm`
|
|
336
|
+
- Version command now uses standardized `Ace::Core::CLI::DryCli::VersionCommand`
|
|
337
|
+
- `--verbose` (`-v`) is now verbose output, `--version` is for version (ADR-018)
|
|
338
|
+
- Tests updated to check output instead of return values (dry-cli limitation)
|
|
339
|
+
- **BREAKING**: Renamed `--branch`/`-b` option to `--from`/`-b` in create command
|
|
340
|
+
- Clarifies that this specifies the source branch, not the target branch name
|
|
341
|
+
- The `-b` short alias still works for backward compatibility
|
|
342
|
+
|
|
343
|
+
### Fixed
|
|
344
|
+
- **Critical**: Command aliases (`ls`, `cd`, `rm`) now work correctly
|
|
345
|
+
- Previously, aliases were misrouted to the default `create` command
|
|
346
|
+
- Added `COMMAND_ALIASES` constant to `KNOWN_COMMANDS` for proper routing
|
|
347
|
+
- Fixed `ConfigSummary.display` to pass actual CLI options instead of empty hash
|
|
348
|
+
- Fixed security validation test to use `capture_io` for proper output capture
|
|
349
|
+
|
|
350
|
+
### Technical
|
|
351
|
+
- CLI module now extends `Dry::CLI::Registry` with command registration
|
|
352
|
+
- Command classes in `cli/` directory wrap existing `commands/` implementations
|
|
353
|
+
- Config command accepts subcommand as positional argument (backward compatibility)
|
|
354
|
+
- All commands support `--quiet`, `--verbose`, `--debug` flags from base module
|
|
355
|
+
- Default command routing preserved (empty args → `create`)
|
|
356
|
+
- Extracted shared helpers into `cli/shared_helpers.rb` module (DRY)
|
|
357
|
+
- Standardized verbose option aliases to just `["-v"]` across all commands
|
|
358
|
+
|
|
359
|
+
## [0.10.2] - 2026-01-06
|
|
360
|
+
|
|
361
|
+
### Fixed
|
|
362
|
+
- Thor CLI consuming `--files` option in `config` command instead of passing to ConfigCommand
|
|
363
|
+
|
|
364
|
+
### Changed
|
|
365
|
+
- Add `:config` to `stop_on_unknown_option!` to fix `ace-git-worktree config --files`
|
|
366
|
+
|
|
367
|
+
## [0.10.1] - 2026-01-06
|
|
368
|
+
|
|
369
|
+
### Fixed
|
|
370
|
+
- Thor CLI consuming command-specific options (`--task`, `--pr`, `--branch`, etc.) instead of passing them to command handlers, causing `ace-git-worktree create --task 178` to show help instead of executing
|
|
371
|
+
|
|
372
|
+
### Changed
|
|
373
|
+
- Add `stop_on_unknown_option!` to let command handlers parse their own options
|
|
374
|
+
|
|
375
|
+
## [0.10.0] - 2026-01-05
|
|
376
|
+
|
|
377
|
+
### Added
|
|
378
|
+
- Thor CLI migration with standardized command structure
|
|
379
|
+
- ConfigSummary display for effective configuration with sensitive key filtering
|
|
380
|
+
- Comprehensive CLI help documentation across all commands
|
|
381
|
+
- self.help overrides for custom command descriptions
|
|
382
|
+
|
|
383
|
+
### Changed
|
|
384
|
+
- Adopted Ace::Core::CLI::Base for standardized options (--quiet, --verbose, --debug)
|
|
385
|
+
- Migrated from OptionParser to Thor framework
|
|
386
|
+
- Added method_missing for default subcommand support
|
|
387
|
+
|
|
388
|
+
### Fixed
|
|
389
|
+
- CLI routing and dependency management for feature parity
|
|
390
|
+
- --help dispatch for all ACE commands
|
|
391
|
+
|
|
392
|
+
### Technical
|
|
393
|
+
- Refactored tests to use capture_io and assert exceptions
|
|
394
|
+
|
|
395
|
+
## [0.9.0] - 2026-01-03
|
|
396
|
+
|
|
397
|
+
### Changed
|
|
398
|
+
- **BREAKING**: Minimum Ruby version raised to 3.3.0 (was 3.0.0)
|
|
399
|
+
- Standardized gemspec file patterns with deterministic Dir.glob
|
|
400
|
+
- Added MIT LICENSE file
|
|
401
|
+
|
|
402
|
+
## [0.8.4] - 2026-01-03
|
|
403
|
+
|
|
404
|
+
### Changed
|
|
405
|
+
|
|
406
|
+
* Optimize test execution time from 6.6s to under 5s (28% improvement)
|
|
407
|
+
* Strengthen security assertions and add dependency injection to commands
|
|
408
|
+
* Remove unnecessary git init calls from test setup
|
|
409
|
+
|
|
410
|
+
### Technical
|
|
411
|
+
|
|
412
|
+
* Add detailed implementation plan for test performance optimization
|
|
413
|
+
|
|
414
|
+
## [0.8.3] - 2026-01-02
|
|
415
|
+
|
|
416
|
+
### Changed
|
|
417
|
+
|
|
418
|
+
* **BREAKING**: `TaskStatusUpdater#update_status`, `#mark_in_progress`, `#mark_done`, `#mark_blocked` now return `{success: Boolean, message: String}` instead of Boolean
|
|
419
|
+
- Enables rich error propagation for dependency-blocked tasks
|
|
420
|
+
- Orchestrator now displays actionable error messages with hints
|
|
421
|
+
* Improved error message for dependency-blocked tasks with `--no-status-update` hint
|
|
422
|
+
|
|
423
|
+
## [0.8.2] - 2026-01-01
|
|
424
|
+
|
|
425
|
+
### Changed
|
|
426
|
+
|
|
427
|
+
* Centralize timeout configuration in gem config file
|
|
428
|
+
* Add `default_timeout` and `max_timeout` to `.ace-defaults/git/worktree.yml`
|
|
429
|
+
|
|
430
|
+
## [0.8.1] - 2025-12-30
|
|
431
|
+
|
|
432
|
+
### Changed
|
|
433
|
+
|
|
434
|
+
- Replace ace-support-core dependency with ace-config for configuration cascade
|
|
435
|
+
- Migrate from Ace::Core to Ace::Config.create() API
|
|
436
|
+
- Migrate from `resolve_for` to `resolve_namespace` for cleaner config loading
|
|
437
|
+
|
|
438
|
+
## [0.8.0] - 2025-12-30
|
|
439
|
+
|
|
440
|
+
### Changed
|
|
441
|
+
|
|
442
|
+
* Rename `.ace.example/` to `.ace-defaults/` for gem defaults directory
|
|
443
|
+
|
|
444
|
+
|
|
445
|
+
## [0.7.0] - 2025-12-27
|
|
446
|
+
|
|
447
|
+
### Changed
|
|
448
|
+
- **Configuration**: Migrate to ADR-022 configuration pattern
|
|
449
|
+
- Removed unused `DEFAULT_*` constants from Configuration module
|
|
450
|
+
- Configuration now fully delegated to ace-support-core cascade and `.ace.example` defaults
|
|
451
|
+
- Reduces code duplication (~40 LOC) and aligns with project-wide configuration standards
|
|
452
|
+
- Default values remain available via `WorktreeConfig::DEFAULT_CONFIG` model
|
|
453
|
+
|
|
454
|
+
## [0.6.1] - 2025-12-27
|
|
455
|
+
|
|
456
|
+
### Changed
|
|
457
|
+
- **Error Handling**: Removed `StandardError` from inner rescue clause in `create_pr_worktree`
|
|
458
|
+
- Specific ace-git errors now bubble up correctly to top-level handler
|
|
459
|
+
- Prevents silently swallowing unexpected errors
|
|
460
|
+
- **Code Organization**: Extracted error handling methods from `handle_pr_fetch_error`
|
|
461
|
+
- `handle_pr_not_found`, `handle_gh_auth_error`, `handle_gh_not_installed`, `handle_unknown_error`
|
|
462
|
+
- Improved code readability and maintainability
|
|
463
|
+
- **Debug Output**: Added backtrace info for unknown errors when `ENV["DEBUG"]` is set
|
|
464
|
+
- **Documentation**: Added schema documentation for `pr_data_from_metadata` method
|
|
465
|
+
- **Defensive Access**: Added fallback to "unknown" for `headRepositoryOwner` dig access
|
|
466
|
+
- **README**: Added version compatibility table for ace-git dependency
|
|
467
|
+
- **Dependency**: Updated ace-git dependency constraint to `~> 0.4`
|
|
468
|
+
|
|
469
|
+
## [0.6.0] - 2025-12-26
|
|
470
|
+
|
|
471
|
+
### Added
|
|
472
|
+
- **Fork PR Detection**: PR worktree creation now detects and warns about fork PRs
|
|
473
|
+
- Shows warning when PR is from a fork (`isCrossRepository`)
|
|
474
|
+
- Displays fork owner info (`headRepositoryOwner`)
|
|
475
|
+
- Informs user they cannot push to fork PR branches directly
|
|
476
|
+
- **PR Number Validation**: Extracted `PR_NUMBER_PATTERN` constant for consistent validation
|
|
477
|
+
- **Debug Output**: Added `ENV["DEBUG"]` support for unexpected error diagnostics
|
|
478
|
+
- **Test Coverage**: Added CLI integration tests for `--pr` flag and timeout parameter tests
|
|
479
|
+
|
|
480
|
+
### Changed
|
|
481
|
+
- **Dependency Update**: Replaced ace-git-diff dependency with ace-git (~> 0.3)
|
|
482
|
+
- GitCommand atom now delegates to `Ace::Git::Atoms::CommandExecutor` from ace-git
|
|
483
|
+
- Creates unified Git operations across ACE ecosystem packages
|
|
484
|
+
- Maintains full backward compatibility for existing code
|
|
485
|
+
- **PR Worktree Creation**: Migrated to use `Ace::Git::Molecules::PrMetadataFetcher`
|
|
486
|
+
- More robust PR metadata fetching with better error handling
|
|
487
|
+
- Consistent with ace-git's PR operations used across other packages
|
|
488
|
+
- **Simplified GitCommand**: `current_branch` now delegates directly to ace-git
|
|
489
|
+
- ace-git handles detached HEAD state internally (returns SHA)
|
|
490
|
+
- Removed local workaround code (~20 lines)
|
|
491
|
+
- **Ruby 3 Syntax**: Updated to use keyword argument forwarding (`timeout:`)
|
|
492
|
+
- **Test Helpers**: Promoted `with_git_stubs` to shared `test_helper.rb`
|
|
493
|
+
|
|
494
|
+
### Removed
|
|
495
|
+
- Deleted `molecules/pr_fetcher.rb` - replaced by ace-git's `PrMetadataFetcher`
|
|
496
|
+
- Deleted corresponding `test/molecules/pr_fetcher_test.rb`
|
|
497
|
+
|
|
498
|
+
## [0.5.0] - 2025-12-17
|
|
499
|
+
|
|
500
|
+
### Added
|
|
501
|
+
- **Current Task Symlink**: Creates `_current` symlink inside worktree when creating task worktrees
|
|
502
|
+
- Symlink created at worktree root (e.g., `.ace-wt/task.145/_current`)
|
|
503
|
+
- Points to the task directory within the worktree (e.g., `.ace-taskflow/v.0.9.0/tasks/145-feat/`)
|
|
504
|
+
- Quick access from worktree: `cat _current/*.s.md`, `ls _current/`
|
|
505
|
+
- Uses relative paths for portability
|
|
506
|
+
- Configurable: `task.create_current_symlink` (default: `true`) and `task.current_symlink_name` (default: `"_current"`)
|
|
507
|
+
- Non-blocking: symlink failure doesn't abort worktree creation
|
|
508
|
+
- New `CurrentTaskLinker` molecule handles symlink lifecycle
|
|
509
|
+
- Dry-run shows planned symlink creation
|
|
510
|
+
|
|
511
|
+
## [0.4.8] - 2025-12-03
|
|
512
|
+
|
|
513
|
+
### Fixed
|
|
514
|
+
- **Upstream Branch Reliability**: Enhanced upstream tracking setup with fallback mechanism
|
|
515
|
+
- Added `set_upstream` method to TaskPusher using `git branch --set-upstream-to`
|
|
516
|
+
- `setup_upstream_for_worktree` now tries `git push -u` first, falls back to `--set-upstream-to` if push fails but remote branch exists
|
|
517
|
+
- Added `remote_branch_exists?` helper to check remote branch availability
|
|
518
|
+
- Fixes inconsistent upstream tracking when creating task worktrees
|
|
519
|
+
|
|
520
|
+
## [0.4.7] - 2025-12-01
|
|
521
|
+
|
|
522
|
+
### Changed
|
|
523
|
+
- **Default Behavior**: `auto_setup_upstream` and `auto_create_pr` now default to `false`
|
|
524
|
+
- Pushing branches and creating PRs now require explicit opt-in via config or CLI flags
|
|
525
|
+
- Follows principle of least surprise - network/remote operations should not happen unexpectedly
|
|
526
|
+
- To enable: set `git.worktree.task.auto_setup_upstream: true` and `auto_create_pr: true` in config
|
|
527
|
+
|
|
528
|
+
### Fixed
|
|
529
|
+
- **Detached HEAD PR Base**: When creating PR from a detached HEAD (SHA as start_point):
|
|
530
|
+
- Now creates a branch on remote (`base-{sha-short}`) for the commit SHA
|
|
531
|
+
- Uses that branch as PR base instead of failing with invalid `--base` argument
|
|
532
|
+
- Falls back to `main` only if remote branch creation fails
|
|
533
|
+
|
|
534
|
+
## [0.4.6] - 2025-11-30
|
|
535
|
+
|
|
536
|
+
### Fixed
|
|
537
|
+
- **Worktree Task Update**: Set `PROJECT_ROOT_PATH` env var when updating task in worktree
|
|
538
|
+
- Ensures TaskManager updates the task file in the worktree, not the main project
|
|
539
|
+
- Fixes "No commits between branches" error when creating PRs
|
|
540
|
+
- The `started_at` timestamp is now correctly committed to the worktree branch
|
|
541
|
+
|
|
542
|
+
## [0.4.5] - 2025-11-30
|
|
543
|
+
|
|
544
|
+
### Added
|
|
545
|
+
- **Initial Worktree Commit**: Adds `started_at` timestamp to task before PR creation
|
|
546
|
+
- Creates initial commit in worktree branch enabling PR creation
|
|
547
|
+
- GitHub requires at least one commit difference between branches for PRs
|
|
548
|
+
- New step 9.5 in workflow: update task → commit → push → then create PR
|
|
549
|
+
- Uses `TaskStatusUpdater.add_started_at_timestamp()` method
|
|
550
|
+
|
|
551
|
+
## [0.4.4] - 2025-11-30
|
|
552
|
+
|
|
553
|
+
### Fixed
|
|
554
|
+
- **PR Creation Bug**: Always pass `--body` flag when creating draft PRs
|
|
555
|
+
- `gh pr create` requires both `--title` and `--body` in non-interactive mode
|
|
556
|
+
- Now defaults `--body` to the PR title when no body is provided
|
|
557
|
+
|
|
558
|
+
## [0.4.3] - 2025-11-30
|
|
559
|
+
|
|
560
|
+
### Fixed
|
|
561
|
+
- **Metadata Commit Bug**: Task changes now properly commit when metadata is added
|
|
562
|
+
- Previously, commits only happened when task status was updated
|
|
563
|
+
- Now commits happen when either status is updated OR metadata is added
|
|
564
|
+
- Ensures worktree metadata is committed before detaching to new worktree
|
|
565
|
+
- Dry run (`--dry-run`) now accurately reflects when commit/push will happen
|
|
566
|
+
|
|
567
|
+
## [0.4.2] - 2025-11-29
|
|
568
|
+
|
|
569
|
+
### Fixed
|
|
570
|
+
- **Branch Source Bug**: New worktree branches now correctly use the current branch as their start-point
|
|
571
|
+
- Previously, worktrees created from within another worktree would base their branch on main worktree's HEAD
|
|
572
|
+
- Now `git worktree add` explicitly passes the current branch (or commit SHA) as the start-point
|
|
573
|
+
- Added `--source <ref>` option to specify a custom git ref as branch start-point (e.g., `--source main`)
|
|
574
|
+
- Handles detached HEAD state by using the commit SHA as start-point
|
|
575
|
+
|
|
576
|
+
### Added
|
|
577
|
+
- `GitCommand.ref_exists?`: New method to validate that a git ref exists before using it
|
|
578
|
+
- `--source` CLI option for `create` command: Explicitly specify which git ref to base the new branch on
|
|
579
|
+
- Result hash now includes `start_point` field showing which ref was used as the branch base
|
|
580
|
+
|
|
581
|
+
## [0.4.1] - 2025-11-28
|
|
582
|
+
|
|
583
|
+
### Fixed
|
|
584
|
+
- **TaskPusher Loading**: Add missing require statement for TaskPusher module
|
|
585
|
+
- Fixes "uninitialized constant Ace::Git::Worktree::Molecules::TaskPusher" error
|
|
586
|
+
- Restores functionality of `ace-git-worktree remove --task` command
|
|
587
|
+
|
|
588
|
+
## [0.4.0] - 2025-11-28
|
|
589
|
+
|
|
590
|
+
### Added
|
|
591
|
+
- **TaskIDExtractor Atom**: Shared helper for consistent task ID extraction across all components
|
|
592
|
+
- Properly handles hierarchical subtask IDs (e.g., `121.01`)
|
|
593
|
+
- Provides `extract()` for task data hashes and `normalize()` for reference strings
|
|
594
|
+
- Uses ace-taskflow's `TaskReferenceParser` when available, with regex fallback
|
|
595
|
+
- **PR and Branch Worktree Creation**: Create worktrees from GitHub pull requests or branches
|
|
596
|
+
- `--pr <number>` flag fetches PR metadata and creates worktree
|
|
597
|
+
- `-b <branch>` flag for local and remote branches
|
|
598
|
+
|
|
599
|
+
### Changed
|
|
600
|
+
- **TaskFetcher**: Now uses `TaskManager` (organism-level API) instead of `TaskLoader` (molecule)
|
|
601
|
+
- Let ace-taskflow handle all path resolution internally
|
|
602
|
+
- Simplified initialization (no root_path needed)
|
|
603
|
+
- Uses `TaskIDExtractor` in `parse_cli_output` for deriving task numbers
|
|
604
|
+
- **Unified Task ID Extraction**: All components now use `TaskIDExtractor` for consistent subtask support
|
|
605
|
+
- `worktree_info.rb`: Uses `TaskIDExtractor.normalize()` for path/branch extraction
|
|
606
|
+
- `worktree_manager.rb`: Uses `TaskIDExtractor.normalize()` in `find_worktree_by_identifier`
|
|
607
|
+
- `task_worktree_orchestrator.rb`: Uses `TaskIDExtractor` for task ref normalization
|
|
608
|
+
- `task_status_updater.rb`: Uses `TaskIDExtractor.normalize()`
|
|
609
|
+
- `worktree_creator.rb`: Uses `TaskIDExtractor.extract()`
|
|
610
|
+
- `worktree_config.rb`: Uses `TaskIDExtractor.extract()`
|
|
611
|
+
- `remove_command.rb`: Uses `TaskIDExtractor` for task matching
|
|
612
|
+
|
|
613
|
+
### Fixed
|
|
614
|
+
- **Subtask ID Handling**: Fixed critical bug where subtask IDs (e.g., `121.01`) were stripped to parent ID (`121`)
|
|
615
|
+
- Worktree operations now correctly distinguish between parent tasks and subtasks
|
|
616
|
+
- Prevents accidental operations on wrong tasks (e.g., deleting `task.121` instead of `task.121.01`)
|
|
617
|
+
- **Worktree Lookup by Subtask**: Fixed `remove --task 121.01` not finding worktrees
|
|
618
|
+
- `find_worktree_by_identifier` now correctly matches subtask worktrees
|
|
619
|
+
- `WorktreeInfo.extract_task_id` preserves subtask suffix in parsed output
|
|
620
|
+
- All failing tests from PR/branch worktree integration
|
|
621
|
+
|
|
622
|
+
### Technical
|
|
623
|
+
- Mocked sleep in `pr_fetcher` tests for 65% speedup
|
|
624
|
+
- Configured push for mismatched branch names
|
|
625
|
+
|
|
626
|
+
## [0.3.0] - 2025-11-13
|
|
627
|
+
|
|
628
|
+
### Added
|
|
629
|
+
- **PR-based Worktree Creation**: `--pr <number>` flag to create worktrees from GitHub pull requests
|
|
630
|
+
- Automatically fetches PR metadata using GitHub CLI (`gh`)
|
|
631
|
+
- Creates worktree with remote tracking
|
|
632
|
+
- Detects and warns about fork PRs
|
|
633
|
+
- Configurable directory and branch naming via `.ace/git/worktree.yml`
|
|
634
|
+
- **Branch-based Worktree Creation**: `-b <branch>` flag for local and remote branches
|
|
635
|
+
- Auto-detects remote vs. local branches
|
|
636
|
+
- Automatically fetches remote branches before creation
|
|
637
|
+
- Sets up tracking for remote branches
|
|
638
|
+
- Preserves full branch path to avoid naming collisions
|
|
639
|
+
- **PrFetcher Molecule**: GitHub CLI integration with comprehensive error handling
|
|
640
|
+
- Custom exception classes for clear error types
|
|
641
|
+
- Timeout support (30s default)
|
|
642
|
+
- Input validation and security checks
|
|
643
|
+
- Fork PR detection
|
|
644
|
+
- **Retry Logic**: Automatic retry with exponential backoff for transient network failures
|
|
645
|
+
- Up to 2 retries by default (configurable)
|
|
646
|
+
- Smart retry only for NetworkError, not permanent errors
|
|
647
|
+
- **Performance**: Cached gh CLI availability check to avoid repeated system calls
|
|
648
|
+
|
|
649
|
+
### Changed
|
|
650
|
+
- Extended `WorktreeCreator` with `create_for_pr()` and `create_for_branch()` methods
|
|
651
|
+
- Extended `WorktreeConfig` model with `pr` and `branch` configuration namespaces
|
|
652
|
+
- Extended `WorktreeManager` with `create_pr()` and `create_branch()` orchestration
|
|
653
|
+
- Improved branch naming to use full path and avoid collisions (e.g., `feature/auth/v1` → `feature-auth-v1`)
|
|
654
|
+
- Enhanced CLI help text with PR and branch usage examples
|
|
655
|
+
|
|
656
|
+
### Fixed
|
|
657
|
+
- Branch name collision issue when multiple remote branches share the same last segment
|
|
658
|
+
- Changed from `branch.split("/").last` to full branch path preservation
|
|
659
|
+
- Example: Both `origin/feature/auth/v1` and `origin/login/auth/v1` now create unique worktrees
|
|
660
|
+
|
|
661
|
+
### Documentation
|
|
662
|
+
- Added "PR and Branch-Based Workflows" section to README
|
|
663
|
+
- Comprehensive usage examples for `--pr` and `-b` options
|
|
664
|
+
- Configuration examples with template variables
|
|
665
|
+
- Requirements and troubleshooting guidance
|
|
666
|
+
|
|
667
|
+
### Testing
|
|
668
|
+
- Added 12 new unit tests for WorktreeCreator PR/branch methods
|
|
669
|
+
- Added 14 unit tests for PrFetcher molecule
|
|
670
|
+
- Test coverage for happy paths, error scenarios, and edge cases
|
|
671
|
+
|
|
672
|
+
### Technical
|
|
673
|
+
- Follows ATOM architecture pattern (Atoms → Molecules → Organisms)
|
|
674
|
+
- GitHub CLI (`gh`) is required for PR functionality
|
|
675
|
+
- Supports template variables: `{number}`, `{slug}`, `{base_branch}` for PR naming
|
|
676
|
+
|
|
677
|
+
## [0.2.2] - 2025-11-12
|
|
678
|
+
|
|
679
|
+
### Changed
|
|
680
|
+
- Simplified test suite architecture from complex mocks to focused smoke tests (843 line reduction)
|
|
681
|
+
- Converted organism/molecule tests to verify public API contracts instead of internal implementation
|
|
682
|
+
- Updated command tests to match actual method signatures and result formats
|
|
683
|
+
|
|
684
|
+
### Added
|
|
685
|
+
- Missing `--no-mise-trust` flag support in create command
|
|
686
|
+
- Missing `--force` flag support in prune command
|
|
687
|
+
- Security validation for dangerous patterns in paths and search queries
|
|
688
|
+
- Help display when create command invoked without arguments
|
|
689
|
+
|
|
690
|
+
### Fixed
|
|
691
|
+
- Config command now accepts subcommand arguments (show/validate) as aliases for flags
|
|
692
|
+
- Test helper to require ace/git_diff for CommandExecutor mocking
|
|
693
|
+
- Mock expectations in command tests to match actual API signatures
|
|
694
|
+
- Integration test skips with clear explanatory messages
|
|
695
|
+
|
|
696
|
+
### Technical
|
|
697
|
+
- Added ace/git_diff dependency to test_helper for proper mocking
|
|
698
|
+
- Improved test maintainability by focusing on behavior over implementation
|
|
699
|
+
- Enhanced security validation across user input points
|
|
700
|
+
|
|
701
|
+
## [0.2.1] - 2025-11-11
|
|
702
|
+
|
|
703
|
+
### Fixed
|
|
704
|
+
- Execute after-create hooks for classic branches (previously only worked for task-based branches)
|
|
705
|
+
- Proper hook configuration structure in tests for reliable test execution
|
|
706
|
+
|
|
707
|
+
### Changed
|
|
708
|
+
- Made `WorktreeRemover#delete_branch_if_safe` public for better API encapsulation
|
|
709
|
+
- Improved error messages for orphaned branch deletion to include detailed reasons
|
|
710
|
+
- Enhanced documentation with hooks configuration examples and orphaned branch cleanup guide
|
|
711
|
+
|
|
712
|
+
### Technical
|
|
713
|
+
- Addressed code review feedback improving encapsulation and test coverage
|
|
714
|
+
- Added test for hook failure handling as non-blocking warnings
|
|
715
|
+
- Fixed tests to use correct `@hooks_config` structure instead of direct instance variable
|
|
716
|
+
|
|
717
|
+
## [0.2.0] - 2025-11-11
|
|
718
|
+
|
|
719
|
+
### Added
|
|
720
|
+
- **Configurable Worktree Root Path**: `root_path` configuration now supports paths outside the project directory
|
|
721
|
+
- Relative paths are resolved relative to project root (not current directory)
|
|
722
|
+
- Allows worktrees in parent directory (`../`), home directory (`~/worktrees`), or custom locations
|
|
723
|
+
- Benefits: keeps project clean, avoids IDE file watcher overhead, prevents nested git issues
|
|
724
|
+
- **Branch Deletion on Worktree Removal**: New `--delete-branch` flag for remove command
|
|
725
|
+
- Safely deletes branches when removing worktrees
|
|
726
|
+
- Without `--force`: only deletes merged branches (safe mode)
|
|
727
|
+
- With `--force`: can delete unmerged branches (use with caution)
|
|
728
|
+
- Clear user feedback when branch is kept vs. deleted
|
|
729
|
+
|
|
730
|
+
### Changed
|
|
731
|
+
- **Path Expansion**: `PathExpander.expand()` now accepts optional `base` parameter for context-aware expansion
|
|
732
|
+
- **Path Validation**: Relaxed to allow worktrees in subdirectories or outside git root (only prevents creation AT git root)
|
|
733
|
+
- **WorktreeCreator**: Now accepts configuration object to respect `root_path` setting for traditional worktrees
|
|
734
|
+
- **WorktreeRemover**: Enhanced with `delete_branch_if_safe()` method that checks merge status before deletion
|
|
735
|
+
|
|
736
|
+
### Fixed
|
|
737
|
+
- **Configuration Respect**: Fixed bug where `root_path` configuration was ignored for traditional worktrees
|
|
738
|
+
- **Branch Orphaning**: Fixed issue where removing worktrees left orphaned branches causing "branch already exists" errors
|
|
739
|
+
|
|
740
|
+
## [0.1.11] - 2025-11-05
|
|
741
|
+
|
|
742
|
+
### Fixed
|
|
743
|
+
- **Ruby API Integration**: Replace CLI dependency with direct ace-taskflow Ruby API calls
|
|
744
|
+
- **TaskFetcher**: Update availability check to prioritize Ruby API over CLI subprocess calls
|
|
745
|
+
- **TaskStatusUpdater**: Add Ruby API integration via TaskManager with CLI fallback
|
|
746
|
+
- **Mono-repo Optimization**: Improve performance by using in-process Ruby API instead of subprocess calls
|
|
747
|
+
- **Error Messages**: Better distinction between mono-repo and standalone installation environments
|
|
748
|
+
- **Configuration**: Update default worktree path for Git compatibility
|
|
749
|
+
|
|
750
|
+
### Changed
|
|
751
|
+
- **Architecture**: Both TaskFetcher and TaskStatusUpdater now use Ruby API as primary method
|
|
752
|
+
- **Fallback Strategy**: Graceful degradation to CLI when Ruby API unavailable
|
|
753
|
+
- **Debug Output**: Enhanced debugging capabilities for troubleshooting integration issues
|
|
754
|
+
- **Performance**: Eliminate subprocess overhead when Ruby API available
|
|
755
|
+
|
|
756
|
+
## [0.1.10] - 2025-11-05
|
|
757
|
+
|
|
758
|
+
### Fixed
|
|
759
|
+
- **Completed Task Cleanup Messaging**: Replace confusing "Task metadata cleanup would require task access - skipped for completed task" message with clear status-based messaging
|
|
760
|
+
- **Task Status Detection**: Fix status parsing to handle stripped format (" done" instead of "done") from CLI output
|
|
761
|
+
- **User Experience**: Provide clear feedback when removing worktrees for completed tasks, which is the normal workflow
|
|
762
|
+
|
|
763
|
+
### Added
|
|
764
|
+
- **Clear Completion Messages**: Show "Task completed: no metadata cleanup needed" for done/completed tasks
|
|
765
|
+
- **Status-based Messaging**: Different messages for different task statuses to avoid confusion
|
|
766
|
+
|
|
767
|
+
### Changed
|
|
768
|
+
- **Remove Command Logic**: Updated messaging to be informative rather than suggesting errors for normal completed task workflows
|
|
769
|
+
- **User Communication**: Focus on clarity and explaining normal workflow expectations
|
|
770
|
+
|
|
771
|
+
## [0.1.9] - 2025-11-05
|
|
772
|
+
|
|
773
|
+
### Fixed
|
|
774
|
+
- **CLI Format Parsing**: Major rewrite of TaskMetadata parser to handle ace-taskflow CLI human-readable format instead of expected YAML frontmatter
|
|
775
|
+
- **Method Resolution Failures**: Implement inline parsing logic as workaround for Ruby class method loading issues
|
|
776
|
+
- **Task ID Extraction**: Fix parsing of task IDs from "v.0.9.0+task.089" format in CLI output
|
|
777
|
+
- **Timeout Parameter Error**: Fix Open3.capture3 timeout parameter syntax causing command execution failures
|
|
778
|
+
- **TaskMetadata Branch Accessor**: Add missing branch method for completed tasks returning nil
|
|
779
|
+
|
|
780
|
+
### Added
|
|
781
|
+
- **Inline CLI Parser**: Complete implementation for parsing ace-taskflow CLI key-value format
|
|
782
|
+
- **Comprehensive Debug Output**: Added DEBUG environment variable support for troubleshooting integration issues
|
|
783
|
+
- **Fallback Logic**: Enhanced error handling when ace-taskflow direct API integration fails
|
|
784
|
+
|
|
785
|
+
### Changed
|
|
786
|
+
- **TaskMetadata Architecture**: Rewrote from_ace_taskflow_output() to parse CLI format instead of YAML frontmatter
|
|
787
|
+
- **Error Handling**: Better distinction between task not found vs worktree not found scenarios
|
|
788
|
+
|
|
789
|
+
## [0.1.8] - 2025-11-04
|
|
790
|
+
|
|
791
|
+
### Fixed
|
|
792
|
+
- **Remove Command Dry-run Inconsistency**: Fix critical bug where `--dry-run` worked but actual execution failed for completed tasks
|
|
793
|
+
- **Task Lookup for Completed Tasks**: Add fallback logic to remove worktrees even when task metadata not found (tasks moved to done/)
|
|
794
|
+
- **Consistent Task Validation**: Ensure dry-run and actual execution use identical task validation logic
|
|
795
|
+
- **Graceful Worktree Removal**: Remove worktrees with clear messaging when tasks are completed but worktrees exist
|
|
796
|
+
- **PathExpander Namespace**: Fix namespaced PathExpander reference for proper module loading
|
|
797
|
+
|
|
798
|
+
### Added
|
|
799
|
+
- **Fallback Worktree Detection**: Search for worktrees by task reference when ace-taskflow metadata unavailable
|
|
800
|
+
- **Direct Git Worktree Removal**: Use direct git worktree commands to bypass problematic safety checks
|
|
801
|
+
- **Clear User Feedback**: Inform users when task not found but worktree removal proceeds
|
|
802
|
+
- **Completed Task Support**: Enable cleanup of worktrees for tasks marked as done in ace-taskflow
|
|
803
|
+
|
|
804
|
+
### Changed
|
|
805
|
+
- **Task Removal Logic**: Remove dependency on task metadata availability for worktree cleanup
|
|
806
|
+
- **Error Handling**: Provide helpful messages instead of failures when tasks are completed
|
|
807
|
+
- **Remove Command Behavior**: Now works consistently across all task states (active, completed, missing)
|
|
808
|
+
|
|
809
|
+
## [0.1.7] - 2025-11-04
|
|
810
|
+
|
|
811
|
+
### Fixed
|
|
812
|
+
- **Worktree Detection**: Fix critical issue where `ace-git-worktree list` showed "No worktrees found" despite existing worktrees
|
|
813
|
+
- **Git Output Parsing**: Update porcelain format parsing to handle 3-line format per worktree (worktree/HEAD/branch lines)
|
|
814
|
+
- **CommandExecutor Integration**: Fix timeout parameter mismatch causing git help output instead of worktree listing
|
|
815
|
+
- **Module Path**: Correct require path from `ace/git/diff/atoms/command_executor` to `ace/git_diff/atoms/command_executor`
|
|
816
|
+
- **YAML Loading**: Add missing `require "yaml"` to ConfigLoader classes
|
|
817
|
+
|
|
818
|
+
### Added
|
|
819
|
+
- **Full Worktree Support**: Now detects and displays all 7 existing worktrees (6 task-associated + 1 main)
|
|
820
|
+
- **Task Association**: Proper task ID extraction from existing worktree paths (086, 089, 090, 091, 093, 097)
|
|
821
|
+
- **Mixed Environment**: Support for both task-aware and traditional worktrees in unified view
|
|
822
|
+
|
|
823
|
+
### Changed
|
|
824
|
+
- **Porcelain Parsing**: Complete rewrite of `from_git_output_list()` to handle structured porcelain format
|
|
825
|
+
- **Worktree Information**: Enhanced display showing Task, Branch, Path, and Status for all worktrees
|
|
826
|
+
|
|
827
|
+
## [0.1.6] - 2025-11-04
|
|
828
|
+
|
|
829
|
+
### Fixed
|
|
830
|
+
- **Binstub**: Fix hardcoded path from `.ace-wt/task.089-zai/ace-git-worktree/` to `ace-git-worktree/`
|
|
831
|
+
- **VERSION**: Eliminate duplicate VERSION constant warnings by loading from correct gem location
|
|
832
|
+
- **Open3**: Add fallback for `Open3::CommandTimeout` constant for Ruby installations where it's not available
|
|
833
|
+
- **Configuration**: Improve template validation to be template-specific rather than overly strict
|
|
834
|
+
- **Configuration**: Add YAML fallback loading when `ace-support-core` is not available
|
|
835
|
+
|
|
836
|
+
### Changed
|
|
837
|
+
- **Template Validation**: Directory format requires `{task_id}`, branch format requires `{id, slug}`, commit format requires `{release, task_id, slug}`
|
|
838
|
+
- **Configuration Loading**: Now loads from `.ace/git/worktree.yml` even when ace-support-core gem is missing
|
|
839
|
+
|
|
840
|
+
## [0.1.5] - 2025-11-04
|
|
841
|
+
|
|
842
|
+
### Fixed
|
|
843
|
+
- **Documentation**: Remove duplicate changelog entry for version [0.9.109] in project CHANGELOG.md
|
|
844
|
+
- **Documentation**: Remove duplicated retrospective template content from task 0891 retro document
|
|
845
|
+
- Clean up placeholder template sections that were accidentally included in documentation
|
|
846
|
+
- Improve professional documentation quality by eliminating redundancies
|
|
847
|
+
|
|
848
|
+
### Added
|
|
849
|
+
- Comprehensive review documentation including GPT-5 codex review and Google Pro review reports
|
|
850
|
+
- Complete documentation of all review feedback implementations and resolutions
|
|
851
|
+
- Enhanced project documentation with detailed review metadata and analysis
|
|
852
|
+
|
|
853
|
+
### Documentation
|
|
854
|
+
- Verified README.md version flag documentation is correct
|
|
855
|
+
- Clean changelog without duplicate entries for better maintainability
|
|
856
|
+
- Professional documentation standards meeting Google Pro review recommendations
|
|
857
|
+
|
|
858
|
+
## [0.1.4] - 2025-11-04
|
|
859
|
+
|
|
860
|
+
### Fixed
|
|
861
|
+
- **CRITICAL**: Fix CLI override flags being ignored (--no-mise-trust, --no-status-update, --no-commit, --commit-message)
|
|
862
|
+
- **CRITICAL**: Fix overly restrictive branch validation that rejected / characters and main/master branches
|
|
863
|
+
- WorktreeManager now properly respects --no-mise-trust flag before applying configuration defaults
|
|
864
|
+
- TaskWorktreeOrchestrator respects all CLI override flags instead of always using configuration defaults
|
|
865
|
+
- Branch validation now follows Git's actual branch naming rules while maintaining security
|
|
866
|
+
- Fix regex syntax errors in task_fetcher.rb and mise_trustor.rb character classes
|
|
867
|
+
|
|
868
|
+
### Added
|
|
869
|
+
- Comprehensive test coverage for branch validation with slash characters and main/master branches
|
|
870
|
+
- Integration tests for CLI override functionality across all override flags
|
|
871
|
+
- Tests for custom commit message functionality
|
|
872
|
+
- Enhanced CLI command tests with override flag verification
|
|
873
|
+
|
|
874
|
+
### Technical
|
|
875
|
+
- Updated valid_branch_name? to allow legitimate Git branch patterns (feature/login, bugfix/issue-123, etc.)
|
|
876
|
+
- Enhanced option merging logic in WorktreeManager and TaskWorktreeOrchestrator
|
|
877
|
+
- Fixed CreateCommand initialization to use fully qualified constant names
|
|
878
|
+
- Maintained all existing security protections while fixing functional regressions
|
|
879
|
+
|
|
880
|
+
## [0.1.3] - 2025-11-04
|
|
881
|
+
|
|
882
|
+
### Security
|
|
883
|
+
- **CRITICAL**: Fix path traversal vulnerability in PathExpander atom
|
|
884
|
+
- **CRITICAL**: Fix command injection vulnerability in MiseTrustor and TaskFetcher
|
|
885
|
+
- Add comprehensive input validation for task IDs and file paths
|
|
886
|
+
- Implement command whitelisting and argument sanitization
|
|
887
|
+
- Add protection against symlink-based attacks with realpath resolution
|
|
888
|
+
|
|
889
|
+
### Fixed
|
|
890
|
+
- Update gemspec metadata from placeholder ACE team values to correct author information
|
|
891
|
+
- Fix Gemfile to use eval_gemfile pattern following ACE standards
|
|
892
|
+
- Modernize Rakefile to use ace-test patterns instead of outdated rake/testtask
|
|
893
|
+
- Remove Gemfile.lock from gem directory to follow ACE conventions
|
|
894
|
+
|
|
895
|
+
### Added
|
|
896
|
+
- Comprehensive test coverage for all CLI commands (6/6 commands)
|
|
897
|
+
- Security tests for path traversal and command injection prevention
|
|
898
|
+
- Integration tests for molecules and organisms
|
|
899
|
+
- Graceful error handling when ace-taskflow is unavailable
|
|
900
|
+
- Helpful error messages with installation guidance
|
|
901
|
+
- Troubleshooting section in README.md with step-by-step solutions
|
|
902
|
+
|
|
903
|
+
### Technical
|
|
904
|
+
- Enhanced security validation across all user input points
|
|
905
|
+
- Improved dependency management with graceful degradation
|
|
906
|
+
- Better error reporting with specific guidance for common issues
|
|
907
|
+
- Comprehensive security test suite with attack vector coverage
|
|
908
|
+
|
|
909
|
+
## [0.1.2] - 2025-11-04
|
|
910
|
+
|
|
911
|
+
### Fixed
|
|
912
|
+
- Update dependency from ace-core to ace-support-core in gemspec
|
|
913
|
+
- Add required support gems (ace-support-markdown, ace-support-mac-clipboard) to Gemfile
|
|
914
|
+
- Resolves dependency conflicts after ace-core → ace-support-core migration
|
|
915
|
+
|
|
916
|
+
## [0.1.1] - 2025-11-04
|
|
917
|
+
|
|
918
|
+
### Fixed
|
|
919
|
+
- Resolve syntax and runtime errors in ace-git-worktree gem
|
|
920
|
+
- Fix comment formatting errors in model files (task_metadata.rb, worktree_metadata.rb)
|
|
921
|
+
- Fix Ruby syntax errors (hash conditional values, constant assignment in methods)
|
|
922
|
+
- Fix initialization order in WorktreeManager
|
|
923
|
+
- Implement lazy loading for CLI commands to prevent configuration validation during help
|
|
924
|
+
|
|
925
|
+
### Technical
|
|
926
|
+
- Update gemspec dependencies to use less restrictive version constraints
|
|
927
|
+
- Improve CLI command registration with lazy loading pattern
|
|
928
|
+
|
|
929
|
+
## [0.1.0] - 2025-11-04
|
|
930
|
+
|
|
931
|
+
### Added
|
|
932
|
+
- Initial release of ace-git-worktree gem
|
|
933
|
+
- Task-aware worktree creation with ace-taskflow integration
|
|
934
|
+
- Configuration-driven naming conventions
|
|
935
|
+
- Automatic mise trust execution
|
|
936
|
+
- Traditional worktree operations (create, list, remove, prune, switch)
|
|
937
|
+
- ATOM architecture implementation
|
|
938
|
+
- CLI interface with comprehensive commands
|
|
939
|
+
- Configuration cascade support via ace-core
|
|
940
|
+
|
|
941
|
+
### Features
|
|
942
|
+
- Task metadata fetching from ace-taskflow
|
|
943
|
+
- Automatic task status updates
|
|
944
|
+
- Worktree metadata tracking in task frontmatter
|
|
945
|
+
- Configurable directory and branch naming
|
|
946
|
+
- Support for multiple worktrees per task
|
|
947
|
+
- Error handling and validation
|
|
948
|
+
- Comprehensive test coverage
|
|
949
|
+
|
|
950
|
+
[Unreleased]: https://github.com/cs3b/ace/compare/v0.1.0...HEAD
|
|
951
|
+
[0.1.0]: https://github.com/cs3b/ace/releases/tag/v0.1.0
|
|
952
|
+
|
|
953
|
+
|
|
954
|
+
## [0.13.11] - 2026-02-22
|
|
955
|
+
|
|
956
|
+
### Fixed
|
|
957
|
+
- Standardized quiet, verbose, debug option descriptions to canonical strings
|