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.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/.ace-defaults/git/worktree.yml +250 -0
  3. data/.ace-defaults/nav/protocols/wfi-sources/ace-git-worktree.yml +19 -0
  4. data/CHANGELOG.md +957 -0
  5. data/LICENSE +21 -0
  6. data/README.md +40 -0
  7. data/Rakefile +14 -0
  8. data/docs/demo/ace-git-worktree-getting-started.gif +0 -0
  9. data/docs/demo/ace-git-worktree-getting-started.tape.yml +28 -0
  10. data/docs/demo/fixtures/README.md +3 -0
  11. data/docs/demo/fixtures/sample.txt +1 -0
  12. data/docs/getting-started.md +114 -0
  13. data/docs/handbook.md +38 -0
  14. data/docs/usage.md +334 -0
  15. data/exe/ace-git-worktree +24 -0
  16. data/handbook/agents/worktree.ag.md +189 -0
  17. data/handbook/skills/as-git-worktree/SKILL.md +27 -0
  18. data/handbook/skills/as-git-worktree-create/SKILL.md +21 -0
  19. data/handbook/skills/as-git-worktree-manage/SKILL.md +20 -0
  20. data/handbook/workflow-instructions/git/worktree-create.wf.md +262 -0
  21. data/handbook/workflow-instructions/git/worktree-manage.wf.md +384 -0
  22. data/handbook/workflow-instructions/git/worktree.wf.md +224 -0
  23. data/lib/ace/git/worktree/atoms/git_command.rb +121 -0
  24. data/lib/ace/git/worktree/atoms/path_expander.rb +189 -0
  25. data/lib/ace/git/worktree/atoms/slug_generator.rb +235 -0
  26. data/lib/ace/git/worktree/atoms/task_id_extractor.rb +91 -0
  27. data/lib/ace/git/worktree/cli/commands/config.rb +50 -0
  28. data/lib/ace/git/worktree/cli/commands/create.rb +80 -0
  29. data/lib/ace/git/worktree/cli/commands/list.rb +76 -0
  30. data/lib/ace/git/worktree/cli/commands/prune.rb +43 -0
  31. data/lib/ace/git/worktree/cli/commands/remove.rb +48 -0
  32. data/lib/ace/git/worktree/cli/commands/shared_helpers.rb +66 -0
  33. data/lib/ace/git/worktree/cli/commands/switch.rb +44 -0
  34. data/lib/ace/git/worktree/cli.rb +103 -0
  35. data/lib/ace/git/worktree/commands/config_command.rb +351 -0
  36. data/lib/ace/git/worktree/commands/create_command.rb +961 -0
  37. data/lib/ace/git/worktree/commands/list_command.rb +247 -0
  38. data/lib/ace/git/worktree/commands/prune_command.rb +260 -0
  39. data/lib/ace/git/worktree/commands/remove_command.rb +522 -0
  40. data/lib/ace/git/worktree/commands/switch_command.rb +249 -0
  41. data/lib/ace/git/worktree/configuration.rb +167 -0
  42. data/lib/ace/git/worktree/models/worktree_config.rb +502 -0
  43. data/lib/ace/git/worktree/models/worktree_info.rb +303 -0
  44. data/lib/ace/git/worktree/models/worktree_metadata.rb +294 -0
  45. data/lib/ace/git/worktree/molecules/config_loader.rb +125 -0
  46. data/lib/ace/git/worktree/molecules/current_task_linker.rb +136 -0
  47. data/lib/ace/git/worktree/molecules/hook_executor.rb +361 -0
  48. data/lib/ace/git/worktree/molecules/parent_task_resolver.rb +186 -0
  49. data/lib/ace/git/worktree/molecules/pr_creator.rb +253 -0
  50. data/lib/ace/git/worktree/molecules/task_committer.rb +329 -0
  51. data/lib/ace/git/worktree/molecules/task_fetcher.rb +244 -0
  52. data/lib/ace/git/worktree/molecules/task_pusher.rb +183 -0
  53. data/lib/ace/git/worktree/molecules/task_status_updater.rb +447 -0
  54. data/lib/ace/git/worktree/molecules/worktree_creator.rb +832 -0
  55. data/lib/ace/git/worktree/molecules/worktree_lister.rb +337 -0
  56. data/lib/ace/git/worktree/molecules/worktree_remover.rb +416 -0
  57. data/lib/ace/git/worktree/organisms/task_worktree_orchestrator.rb +906 -0
  58. data/lib/ace/git/worktree/organisms/worktree_manager.rb +714 -0
  59. data/lib/ace/git/worktree/version.rb +9 -0
  60. data/lib/ace/git/worktree.rb +215 -0
  61. 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