ace-git-worktree 0.27.0 → 0.27.3

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.
data/CHANGELOG.md CHANGED
@@ -7,1201 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ## [0.27.0] - 2026-10-17
11
10
 
12
- ### Added
13
-
14
- - `ace-git-worktree list` now defaults to a compact active-worktree table: one
15
- enriched row per worktree whose last commit or uncommitted changes fall inside
16
- the activity window (`--active-within`, default `18h`), plus a two-line count
17
- footer. Columns: Task, Branch, Age, Commit, Changes, PR, Path.
18
- - `--full` lists every worktree in the same columns with absolute, untruncated
19
- paths; `--compact` is the explicit default and is mutually exclusive with
20
- `--full`.
21
- - Name-independent task association with provenance: recorded task metadata,
22
- the `_current` symlink, validated path/branch names, then task files modified
23
- in the worktree (uncommitted first, then commits vs the primary branch
24
- merge-base). Ambiguous inference renders `<id>+N` and exposes all candidates.
25
- - PR resolution through one bounded forge query per run: branch match, then HEAD
26
- commit sha, then a unique task reference in the PR title/body.
27
- - Per-worktree probing in isolated forked children: at most 16 live children,
28
- 5 second per-probe budget, process-group kill on timeout, deterministic
29
- `git worktree list` order, and a sequential fallback where `fork` is
30
- unavailable. Probe failures render `?` without failing the command.
31
- - Width-aware table layout driven by `COLUMNS`/the terminal size: columns shrink
32
- in priority order (Path, Commit, Branch) and Path/Commit drop on narrow
33
- terminals; compact output never exceeds the detected width.
34
- - `--format json` additions per selected worktree: `task_id_source`, `task_ids`,
35
- `active_within_window`, `last_commit`, `uncommitted`, and `pr` with `state`,
36
- `draft`, and `matched_by`. Existing keys are unchanged.
37
-
38
- ### Changed
39
-
40
- - `ace-git-worktree list` output is now the active-worktree table; the legacy
41
- plain Task/Branch/Path/Status table and the `Summary:` block are gone.
42
- - Invalid `--active-within` values, mutually exclusive detail flags, and removed
43
- flags fail with actionable one-line errors and a non-zero exit.
44
-
45
- ### Removed
46
-
47
- - `--show-tasks`: the Task column is always present and association is always
48
- inferred. Passing `--show-tasks` now fails as an unknown option (ADR-024, no
49
- compatibility layer).
50
-
51
- ## [0.26.1] - 2026-10-10
52
-
53
- ### Fixed
54
-
55
- - Make `TaskCommitter#commit_scoped` public so task-aware worktree creation can commit task bookkeeping through the orchestrator.
56
- - Describe automatic draft creation through the configured forge provider in the shipped defaults.
57
-
58
- ## [0.26.0] - 2026-10-05
59
-
60
- ### Changed
61
-
62
- - Declare the required direct dependencies and minimum producer versions for this coordinated release: `ace-git ~> 0.29`, `ace-herdr ~> 0.4`.
63
-
64
- - Describe cleanup preservation using selected-forge PR evidence rather than GitHub-specific evidence.
65
-
66
- ## [0.25.1] - 2026-10-04
67
-
68
- ### Changed
69
-
70
- - Install both Herdr and tmux runtime adapters for standalone runtime switching, through an acyclic dependency graph.
71
-
72
- ## [0.25.0] - 2026-10-04
73
-
74
- ### Added
75
- - Post-create terminal opening goes through the `ace-runtime` contract: inside a live runtime a window/tab rooted at the worktree opens via `ensure_window`; with tmux explicitly selected outside any runtime, `ace-tmux start` bootstraps the session; explicit herdr never launches tmux; without a live runtime the cd hint is shown. Config key `tmux` renamed to `terminal` (no legacy alias, ADR-024).
76
- - New dependencies: `ace-runtime` (~> 0.1) and `ace-tmux` (~> 0.18, tmux adapter).
77
-
78
- ## [0.24.1] - 2026-09-29
79
-
80
- ### Fixed
81
- - Cleanup merge proof requires PR evidence provenance (server, repository,
82
- branch, base) to agree with the resolved selection; incomplete or
83
- conflicting provenance retains the candidate, so identical branch/PR
84
- numbers in different repositories can never cross-prove removal.
85
- - Cleanup targets resolve to the PR base branch across ref forms:
86
- bare ("main"), remote-prefixed ("origin/main"), and fully qualified
87
- ("refs/heads/main", "refs/remotes/origin/main").
88
-
89
- ## [0.24.0] - 2026-09-28
90
-
91
- ### Added
92
- - Forge-neutral PR worktree checkout: the exact declared source
93
- repository/ref is fetched and its head SHA verified against normalized PR
94
- evidence before any worktree is created (fork and canonical sources are
95
- equally valid).
96
- - `--server` / `--default-server` selection for PR creation, task-PR
97
- creation, and cleanup; `--remote` remains a local Git remote name only.
98
- - Task PR creation proves the pushed branch head SHA to the provider
99
- (`expected_head`); PR identity is never inferred from branch names.
100
- - Cleanup report digests now bind the resolved server identity and each
101
- item's provider proof (status, PR, proven head, merge commit); `--apply`
102
- recomputes the full report immediately before executing and refuses any
103
- drift from the approved digest.
104
-
105
- ### Removed
106
- - Direct GitHub coupling from worktree correctness paths: `ace/git/github`
107
- requires, `Github::PrFetcher` usage, `gh` CLI checks and troubleshooting,
108
- the raw gh-based `PrCreator` molecule, and the `ace-git-github` gemspec
109
- dependency. Provider execution lives behind the neutral ace-git provider
110
- contract.
111
-
112
-
113
-
114
- ### Added
115
- - Forge-neutral PR worktree checkout: the exact declared source
116
- repository/ref is fetched and its head SHA verified against normalized PR
117
- evidence before any worktree is created (fork and canonical sources are
118
- equally valid).
119
- - `--server` / `--default-server` selection for PR creation, task-PR
120
- creation, and cleanup; `--remote` remains a local Git remote name only.
121
- - Task PR creation proves the pushed branch head SHA to the provider
122
- (`expected_head`); PR identity is never inferred from branch names.
123
- - Cleanup report digests now bind the resolved server identity and each
124
- item's provider proof (status, PR, proven head, merge commit); `--apply`
125
- recomputes the full report immediately before executing and refuses any
126
- drift from the approved digest.
127
-
128
- ### Removed
129
- - Direct GitHub coupling from worktree correctness paths: `ace/git/github`
130
- requires, `Github::PrFetcher` usage, `gh` CLI checks and troubleshooting,
131
- the raw gh-based `PrCreator` molecule, and the `ace-git-github` gemspec
132
- dependency. Provider execution lives behind the neutral ace-git provider
133
- contract.
134
-
135
-
136
-
137
- ## [0.23.0] - 2026-09-27
138
-
139
- ### Changed
140
- - PR lookups now go through the `ace-git-github` provider (`Ace::Git::Github::PrFetcher`) instead of the `PrMetadataFetcher` molecule removed from the ace-git 0.24 core; provider failures surface as classified `Provider*Error`s instead of the removed `Gh*Error` classes.
141
- - Raised the `ace-git` dependency floor to `~> 0.24` and added `ace-git-github ~> 0.1.1` (cross-repository PR argument fix). Resolves the require-time `LoadError` (`ace/git/molecules/pr_metadata_fetcher`) that made released 0.22.1 incompatible with ace-git 0.24 and blocked adopting ace-review 0.55.0.
142
- ## [0.22.1] - 2026-09-02
143
-
144
- ### Technical
145
- - Included in the coordinated all-package patch release preparation for ACE monorepo review.
146
- ## [0.22.0] - 2026-08-13
147
- ### Added
148
- - Add cleanup plan application with drift guards
149
- - Classify merged refs with GitHub PR evidence
150
- - Report repository inventory with ancestry proof
151
- - Run recoverable preparation phases in place
152
- - Add bootstrap config management and provenance
153
- - Fail closed on tracked mise trust verification
154
- ### Fixed
155
- - Resolve PR 316 findings and finalize cleanup proofs
156
- - Restrict bookkeeping commits to owned paths
157
-
158
- ## [0.21.8] - 2026-08-12
159
-
160
- ### Technical
161
- - Raised the `ace-support-core` dependency floor to `~> 0.31` after the principles-first bootstrap guidance release.
162
- ## [0.21.7] - 2026-08-12
163
-
164
- ### Technical
165
- - Aligned gemspec dependency floors with current ACE package minor release lines and safe external minor dependency bumps (no major version jumps).
166
-
167
- ## [0.21.6] - 2026-04-23
168
-
169
- ### Technical
170
- - Narrowed retained `switch` E2E verification to the documented public contract by proving the returned task worktree path exists immediately and appears in `switch --list` instead of asserting deeper internal layout details.
171
-
172
- ## [0.21.5] - 2026-04-23
173
-
174
- ### Technical
175
- - Tightened retained basic-lifecycle and task-aware E2E coverage so remove/prune cleanup is verified from the exact removed worktree path and final post-cleanup snapshots.
176
-
177
- ### Fixed
178
- - **ace-git-worktree v0.20.5**: Used `ace-tmux window` when already in a tmux session and `ace-tmux start` otherwise, so nested worktree creation stays correctly in-session.
179
- - **ace-git-worktree v0.20.4**: Fixed `create --pr <number>` to avoid an `ace-tmux` subcommand mismatch when launching project tmux sessions.
180
- - **ace-git-worktree v0.20.3**: Fixed `create --pr <number>` parsing so `--pr` is not treated as a positional branch argument when routed through `ace-support-cli`.
181
-
182
- ## [0.21.4] - 2026-04-19
183
-
184
- ### Technical
185
- - Updated the retained task-aware PR lifecycle E2E contract to treat missing or unauthenticated GitHub CLI access as a valid graceful-prerequisite branch when the command surfaces an actionable error and leaves no partial PR worktree behind.
186
-
187
- ## [0.21.3] - 2026-04-18
188
-
189
- ### Technical
190
- - Persisted the exact dry-run remove target in retained lifecycle E2E coverage so `TS-WORKTREE-001` verifies no-op behavior from the real created worktree instead of a brittle hardcoded path check.
191
-
192
- ## [0.21.2] - 2026-04-16
193
-
194
- ### Technical
195
- - Aligned retained task-aware JSON metadata E2E verification with the current compact `task_id` contract and the main-worktree null-task behavior.
196
-
197
- ## [0.21.1] - 2026-04-16
198
-
199
- ### Technical
200
- - Corrected `TS-WORKTREE-001` lifecycle verification so post-create worktree evidence is judged before later remove/prune steps intentionally clean up the sandbox state.
201
-
202
- ## [0.21.0] - 2026-04-14
203
-
204
- ### Changed
205
- - Rewrote retained basic-lifecycle and task-aware E2E runner/verifier contracts around explicit public command journeys and impact-first end-state checks.
206
- - Added new goal-style E2E coverage for config surface validation and PR worktree lifecycle flows.
207
- - Updated usage and getting-started docs with the minimal JSON output contract, task/non-task filter examples, and remove-by-task `--delete-branch` guidance.
208
-
209
- ## [0.20.2] - 2026-04-13
210
-
211
- ### Changed
212
- - Hardened the basic lifecycle and task-aware E2E scenario contracts so worktree setup, remove/prune evidence, and task-worktree creation checks are stable across reruns.
213
-
214
- ## [0.20.1] - 2026-04-13
215
-
216
- ### Changed
217
- - Completed the batch i05 migration follow-through for this package and aligned it with the restarted `fast` / `feat` / `e2e` verification model.
218
-
219
- ### Technical
220
- - Included in the coordinated assignment-driven patch release for batch i05 package updates.
221
-
222
-
223
- ## [0.20.0] - 2026-04-12
224
-
225
- ### Changed
226
- - Migrated package tests to the `fast` / `feat` / `e2e` model, moving deterministic coverage from legacy test directories into `test/fast` and `test/feat`.
227
- - Updated retained E2E scenario contracts and metadata for task-aware and lifecycle workflows, including deterministic coverage references and sandbox setup normalization.
228
- - Updated package docs (`README`, usage, getting-started) to teach the `ace-test`, `ace-test ... feat`, and `ace-test-e2e` split contract.
229
-
230
- ## [0.19.5] - 2026-04-10
231
-
232
- ### Fixed
233
- - Hardened `WorktreeRemover` cleanup semantics to fail when the worktree directory still exists after cleanup, including explicit error results on removal exceptions.
234
- - Updated prune execution to run `git worktree prune --expire now` for immediate stale-metadata cleanup.
235
-
236
- ### Technical
237
- - Added regression coverage asserting `--expire now` prune args and stuck-directory failure behavior in worktree remover tests.
238
-
239
- ## [0.19.4] - 2026-03-29
240
-
241
- ### Technical
242
- - Normalized published gem metadata so RubyGems and Ruby Toolbox use current release information instead of the 1980 fallback date.
243
-
244
- ## [0.19.3] - 2026-03-29
245
-
246
- ### Fixed
247
- - Bumped the `ace-git` runtime dependency constraint to `~> 0.19` so ace-git-worktree stays aligned with the current git workflow release.
248
-
249
- ## [0.19.2] - 2026-03-29
250
-
251
- ### Technical
252
- - Register package-level `.ace-defaults` skill-sources for ace-git-worktree to enable canonical skill discovery in fresh installs.
253
-
254
-
255
- ## [0.19.1] - 2026-03-29
256
-
257
- ### Fixed
258
- - **ace-git-worktree v0.19.1**: Bumped dependency constraints to currently available `~>` ranges on RubyGems and updated release metadata after dependency synchronization.
259
-
260
- ## [0.19.0] - 2026-03-23
261
-
262
- ### Changed
263
- - Moved Installation from README to Getting Started guide.
264
- - Clarified agent workflow references in Use Cases (removed raw `/as-` prefix).
265
- - Replaced generic "coordinate with git tools" use case with ace-overseer integration paragraph.
266
- - Explained "hooks" in README intro with parenthetical definition.
267
- - Converted Related Tools in usage guide to linked sibling packages.
268
- - Redesigned getting-started demo tape: proper sandbox setup with git-init, branch-based worktree creation.
269
- - Re-recorded getting-started demo GIF from new tape.
270
-
271
- ## [0.18.3] - 2026-03-23
272
-
273
- ### Changed
274
- - Refreshed the package README to align with the current ACE layout pattern, including standardized section labels, bullet style, and footer link format.
275
-
276
- ## [0.18.2] - 2026-03-22
277
-
278
- ### Changed
279
- - 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`.
280
- - Added explicit sandbox git bootstrap setup in the demo scenario to keep dry-run worktree commands reproducible in clean environments.
281
-
282
- ## [0.18.1] - 2026-03-22
283
-
284
- ### Technical
285
- - Removed `release` template-variable support and references from task configuration runtime paths, aligning package behavior with task ID-based defaults.
286
-
287
- ## [0.18.0] - 2026-03-22
288
-
289
- ### Changed
290
- - Shortened default task worktree naming to `t.{task_id}` for all default package behavior.
291
- - Expanded task worktree ID parsing so short and short-prefixed task IDs (`t.*`, `ace-t.*`) resolve consistently with existing `task.*` and `ace-task.*` formats.
292
-
293
- ## [0.17.2] - 2026-03-22
294
-
295
- ### Technical
296
- - Aligned the getting-started demo tape output path with the checked-in `docs/demo` asset.
297
-
298
- ## [0.17.1] - 2026-03-22
299
-
300
- ### Fixed
301
- - Corrected user-doc frontmatter and Markdown table rendering in the README plus getting-started, usage, and handbook docs.
302
- - Replaced Kramdown-only code block markup with fenced Markdown blocks in user-facing docs.
303
- - Added `docs/**/*` to the gemspec file manifest and removed the duplicated `--keep-directory` option entry from the usage reference.
304
-
305
- ## [0.17.0] - 2026-03-22
306
-
307
- ### Changed
308
- - Rewrote the README as a landing page and split long-form package documentation into getting-started, usage, and handbook guides.
309
- - Added committed demo tape and GIF assets for the new documentation flow.
310
- - Refreshed package metadata messaging to match the landing-page positioning.
311
-
312
- ## [0.16.1] - 2026-03-18
313
-
314
- ### Changed
315
- - Migrated CLI namespace from `Ace::Core::CLI::*` to `Ace::Support::Cli::*` (ace-support-cli is now the canonical home for CLI infrastructure).
316
-
317
-
318
- ## [0.16.0] - 2026-03-18
319
-
320
- ### Changed
321
- - Removed legacy backward-compatibility behavior as part of the 0.10 cleanup release.
322
-
323
-
324
- ## [0.15.7] - 2026-03-17
325
-
326
- ### Fixed
327
- - Updated CLI help-output tests to accept the shared `ace-support-cli` help header format after framework migration.
328
-
329
- ## [0.15.6] - 2026-03-15
330
-
331
- ### Fixed
332
- - 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
333
-
334
- ## [0.15.5] - 2026-03-15
335
-
336
- ### Fixed
337
- - Fixed `list` command returning "No worktrees found" after ace-support-cli migration by guarding nil option values from being treated as explicit `--no-*` filters
338
-
339
- ## [0.15.4] - 2026-03-15
340
-
341
- ### Changed
342
- - Migrated CLI framework from dry-cli to ace-support-cli
343
-
344
- ## [0.15.3] - 2026-03-13
345
-
346
- ### Changed
347
- - Updated canonical worktree skills to explicitly run bundled workflows in the current project and execute them end-to-end.
348
-
349
- ## [0.15.2] - 2026-03-13
350
-
351
- ### Changed
352
- - 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.
353
-
354
- ## [0.15.1] - 2026-03-12
355
-
356
- ### Fixed
357
- - Kept `ace-git-worktree list --format json` stdout JSON-only by suppressing CLI config summaries and legacy summary footers in JSON mode.
358
-
359
- ### Technical
360
- - Added regression coverage for JSON list output to ensure downstream parsers receive a single valid JSON document.
361
-
362
- ## [0.15.0] - 2026-03-12
363
-
364
- ### Added
365
- - 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`.
366
-
367
- ## [0.14.0] - 2026-03-10
368
-
369
- ### Added
370
- - Added the canonical handbook-owned git worktree skill for task-aware worktree management.
371
-
372
-
373
- ## [0.13.22] - 2026-03-05
374
-
375
- ### Fixed
376
- - 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.
377
-
378
- ## [0.13.21] - 2026-03-05
379
-
380
- ### Changed
381
- - Worktree task-aware E2E scenarios were migrated to non-legacy `.ace-tasks` fixtures and modern task IDs.
382
-
383
- ## [0.13.20] - 2026-03-03
384
-
385
- ### Fixed
386
- - `TaskIDExtractor`: support B36TS directory naming (`ace-task.hy4`, `task.hy4`) in path-based extraction, fixing task ID resolution for new-format worktree paths
387
-
388
- ## [0.13.19] - 2026-03-03
389
-
390
- ### Fixed
391
- - `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
392
-
393
- ## [0.13.18] - 2026-03-02
394
-
395
- ### Changed
396
- - Replace `ace-taskflow` dependency with `ace-task` — migrate `TaskFetcher`, `TaskStatusUpdater`, and `TaskIDExtractor` to ace-task APIs
397
- - Update CLI fallback commands from `ace-taskflow` to `ace-task`
398
- - Update user-facing error messages and help text to reference `ace-task`
399
-
400
- ## [0.13.17] - 2026-02-25
401
-
402
- ### Technical
403
- - Bump runtime dependency constraint from `ace-git ~> 0.10` to `ace-git ~> 0.11`.
404
-
405
- ## [0.13.16] - 2026-02-24
406
-
407
- ### Fixed
408
- - 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.
409
-
410
- ### Technical
411
- - Add CLI regression coverage to assert forwarding of `--task-associated`, `--no-task-associated`, and `--no-usable` to `ListCommand`.
412
-
413
- ## [0.13.15] - 2026-02-24
414
-
415
- ### Fixed
416
- - Resolve task-association listing via task-aware worktree metadata whenever `--task-associated` or `--no-task-associated` filters are requested, even without `--show-tasks`.
417
-
418
- ### Technical
419
- - Add regression coverage for CLI filter option propagation and manager-side task-filter listing path selection.
420
-
421
- ## [0.13.14] - 2026-02-24
422
-
423
- ### Fixed
424
- - Compute list statistics from the filtered worktree set in `list` output so `--task-associated` and other filtered views report accurate totals.
425
-
426
- ## [0.13.13] - 2026-02-23
427
-
428
- ### Technical
429
- - Updated internal dependency version constraints to current releases
430
-
431
- ## [0.13.12] - 2026-02-22
432
-
433
- ### Changed
434
- - Migrate CLI to standard multi-command help pattern with explicit `help`, `--help`, and `-h` registration via `HelpCommand`
435
- - Remove implicit default routing behavior and require explicit command selection for unknown inputs
436
-
437
- ### Technical
438
- - Route executable through `Dry::CLI.new(...).call(arguments: ...)` with no-argument normalization to `--help`
439
- - Update CLI command tests to use explicit `Dry::CLI` and executable-level routing assertions
440
-
441
- ## [0.13.10] - 2026-02-21
442
-
443
- ### Fixed
444
- - 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
445
-
446
- ### Technical
447
- - Add `WorktreeInfoTest` covering task ID extraction from porcelain output, parent-path false matches, and branch fallback
448
-
449
- ## [0.13.9] - 2026-02-21
450
-
451
- ### Fixed
452
- - 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
453
-
454
- ## [0.13.8] - 2026-02-21
455
-
456
- ### Fixed
457
- - 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")
458
- - Show `target_branch` in dry-run output when present
459
-
460
- ### Technical
461
- - Add tests for `list_all` with `false` filter values to prevent regression
462
- - Improve E2E test for `switch` command to verify path existence dynamically
463
-
464
- ## [0.13.7] - 2026-02-19
465
-
466
- ### Technical
467
- - Namespace worktree workflow instructions into git/ subdirectory
468
-
469
- ## [0.13.6] - 2026-02-19
470
-
471
- ### Fixed
472
- - Update TaskIDExtractor tests to remove `.00` orchestrator suffix references after TaskReferenceParser change
473
-
474
- ## [0.13.5] - 2026-02-19
475
-
476
- ### Fixed
477
- - Pass `--force` flag to `git worktree remove` when force removal is requested, fixing "contains modified or untracked files" errors during forced prune
478
-
479
- ## [0.13.4] - 2026-02-19
480
-
481
- ### Fixed
482
- - Add `ignore_untracked` support to worktree removal dirty checks so callers can treat untracked-only trees as safe while still blocking tracked changes
483
-
484
- ## [0.13.3] - 2026-02-18
485
-
486
- ### Fixed
487
- - Ensure parent directory exists before worktree path validation to prevent PathExpander rejection when `.ace-wt/` directory doesn't exist yet
488
-
489
- ## [0.13.2] - 2026-02-16
490
-
491
- ### Fixed
492
- - 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)
493
-
494
- ## [0.13.1] - 2026-02-16
495
-
496
- ### Fixed
497
- - 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
498
-
499
- ## [0.13.0] - 2026-02-16
500
-
501
- ### Added
502
- - Tmux integration for worktree creation: optional `tmux: true` config under `git.worktree` launches an `ace-tmux` session rooted at the new worktree after creation
503
- - `tmux?` config accessor in WorktreeConfig model
504
- - Runtime detection of `ace-tmux` binary with graceful fallback to `cd` hint when unavailable
505
-
506
- ### Technical
507
- - Migrate E2E tests to TS-format and enhance task-awareness
508
- - Consolidate E2E test configuration fixtures
509
-
510
- ## [0.12.7] - 2026-02-11
511
-
512
- ### Fixed
513
- - TaskIDExtractor regex now correctly matches `task.NNN` in paths containing `ace-task.NNN` directory prefixes
514
-
515
- ### Technical
516
- - Add path extraction test cases for TaskIDExtractor
517
-
518
- ## [0.12.6] - 2026-02-01
519
-
520
- ### Fixed
521
- - Prevent non-zero exit on help command
522
- - Correct target branch fallback for non-subtask worktrees
523
- - Stub `GitCommand.current_branch` in integration tests to prevent tests from reading actual git branch
524
-
525
- ### Technical
526
- - Adopt exception-based exit codes
527
- - Standardize E2E test artifact paths
528
- - Update E2E test directory structure for worktree operations
529
-
530
- ## [0.12.5] - 2026-01-28
531
-
532
- ### Fixed
533
-
534
- - 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
535
-
536
- ## [0.12.4] - 2026-01-22
537
-
538
- ### Fixed
539
- - 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)
540
- - 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
541
-
542
- ## [0.12.3] - 2026-01-20
543
-
544
- ### Fixed
545
- - Fallback to current branch for target branch resolution when parent task has no worktree metadata (Task 222)
546
-
547
- ## [0.12.2] - 2026-01-16
548
-
549
- ### Changed
550
- - Rename context: to bundle: keys in configuration files
551
-
552
- ## [0.12.1] - 2026-01-14
553
-
554
- ### Changed
555
- - Migrate CLI to Hanami pattern (per ADR-023)
556
- - Moved command classes from `cli/*.rb` to `cli/commands/*.rb`
557
- - Updated namespace from `CLI::*` to `CLI::Commands::*`
558
- - SharedHelpers module moved to `cli/commands/shared_helpers.rb`
559
- - Commands still delegate to `commands/*_command.rb` for business logic
560
-
561
- ## [0.12.0] - 2026-01-13
562
-
563
- ### Added
564
- - Target branch tracking in worktree metadata
565
- - `WorktreeMetadata` now includes `target_branch` attribute for tracking PR target branch
566
- - `ParentTaskResolver` molecule automatically determines target branch from parent task
567
- - Subtasks target their orchestrator's worktree branch instead of defaulting to main
568
- - CLI `--target-branch` option allows manual override of auto-detected target branch
569
- - Fallback to `main` when parent task or worktree metadata is not found
570
-
571
- ### Technical
572
- - New `ParentTaskResolver` molecule for resolving parent task's worktree branch
573
- - Updated `WorktreeMetadata` model with optional `target_branch` field
574
- - Updated `WorktreeCreator.create_for_task` to accept and return `target_branch`
575
- - Updated `TaskWorktreeOrchestrator` to determine and pass target branch through workflow
576
-
577
- ## [0.11.0] - 2026-01-07
578
-
579
- ### Changed
580
- - **BREAKING**: Migrate CLI framework from Thor to dry-cli (per ADR-018)
581
- - Replaced `thor` dependency with `dry-cli ~> 1.0`
582
- - Added `ace-support-core ~> 0.10` dependency for CLI base classes
583
- - New CLI structure: `lib/ace/git/worktree/cli/` contains dry-cli command classes
584
- - Existing `commands/` directory preserved (contains command implementations)
585
- - Command aliases: `list` → `ls`, `switch` → `cd`, `remove` → `rm`
586
- - Version command now uses standardized `Ace::Core::CLI::DryCli::VersionCommand`
587
- - `--verbose` (`-v`) is now verbose output, `--version` is for version (ADR-018)
588
- - Tests updated to check output instead of return values (dry-cli limitation)
589
- - **BREAKING**: Renamed `--branch`/`-b` option to `--from`/`-b` in create command
590
- - Clarifies that this specifies the source branch, not the target branch name
591
- - The `-b` short alias still works for backward compatibility
592
-
593
- ### Fixed
594
- - **Critical**: Command aliases (`ls`, `cd`, `rm`) now work correctly
595
- - Previously, aliases were misrouted to the default `create` command
596
- - Added `COMMAND_ALIASES` constant to `KNOWN_COMMANDS` for proper routing
597
- - Fixed `ConfigSummary.display` to pass actual CLI options instead of empty hash
598
- - Fixed security validation test to use `capture_io` for proper output capture
599
-
600
- ### Technical
601
- - CLI module now extends `Dry::CLI::Registry` with command registration
602
- - Command classes in `cli/` directory wrap existing `commands/` implementations
603
- - Config command accepts subcommand as positional argument (backward compatibility)
604
- - All commands support `--quiet`, `--verbose`, `--debug` flags from base module
605
- - Default command routing preserved (empty args → `create`)
606
- - Extracted shared helpers into `cli/shared_helpers.rb` module (DRY)
607
- - Standardized verbose option aliases to just `["-v"]` across all commands
608
-
609
- ## [0.10.2] - 2026-01-06
610
-
611
- ### Fixed
612
- - Thor CLI consuming `--files` option in `config` command instead of passing to ConfigCommand
613
-
614
- ### Changed
615
- - Add `:config` to `stop_on_unknown_option!` to fix `ace-git-worktree config --files`
616
-
617
- ## [0.10.1] - 2026-01-06
618
-
619
- ### Fixed
620
- - 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
621
-
622
- ### Changed
623
- - Add `stop_on_unknown_option!` to let command handlers parse their own options
624
-
625
- ## [0.10.0] - 2026-01-05
626
-
627
- ### Added
628
- - Thor CLI migration with standardized command structure
629
- - ConfigSummary display for effective configuration with sensitive key filtering
630
- - Comprehensive CLI help documentation across all commands
631
- - self.help overrides for custom command descriptions
632
-
633
- ### Changed
634
- - Adopted Ace::Core::CLI::Base for standardized options (--quiet, --verbose, --debug)
635
- - Migrated from OptionParser to Thor framework
636
- - Added method_missing for default subcommand support
637
-
638
- ### Fixed
639
- - CLI routing and dependency management for feature parity
640
- - --help dispatch for all ACE commands
641
-
642
- ### Technical
643
- - Refactored tests to use capture_io and assert exceptions
644
-
645
- ## [0.9.0] - 2026-01-03
646
-
647
- ### Changed
648
- - **BREAKING**: Minimum Ruby version raised to 3.3.0 (was 3.0.0)
649
- - Standardized gemspec file patterns with deterministic Dir.glob
650
- - Added MIT LICENSE file
651
-
652
- ## [0.8.4] - 2026-01-03
653
-
654
- ### Changed
655
-
656
- * Optimize test execution time from 6.6s to under 5s (28% improvement)
657
- * Strengthen security assertions and add dependency injection to commands
658
- * Remove unnecessary git init calls from test setup
659
-
660
- ### Technical
661
-
662
- * Add detailed implementation plan for test performance optimization
663
-
664
- ## [0.8.3] - 2026-01-02
665
-
666
- ### Changed
667
-
668
- * **BREAKING**: `TaskStatusUpdater#update_status`, `#mark_in_progress`, `#mark_done`, `#mark_blocked` now return `{success: Boolean, message: String}` instead of Boolean
669
- - Enables rich error propagation for dependency-blocked tasks
670
- - Orchestrator now displays actionable error messages with hints
671
- * Improved error message for dependency-blocked tasks with `--no-status-update` hint
672
-
673
- ## [0.8.2] - 2026-01-01
674
-
675
- ### Changed
676
-
677
- * Centralize timeout configuration in gem config file
678
- * Add `default_timeout` and `max_timeout` to `.ace-defaults/git/worktree.yml`
679
-
680
- ## [0.8.1] - 2025-12-30
681
-
682
- ### Changed
683
-
684
- - Replace ace-support-core dependency with ace-config for configuration cascade
685
- - Migrate from Ace::Core to Ace::Config.create() API
686
- - Migrate from `resolve_for` to `resolve_namespace` for cleaner config loading
687
-
688
- ## [0.8.0] - 2025-12-30
689
-
690
- ### Changed
691
-
692
- * Rename `.ace.example/` to `.ace-defaults/` for gem defaults directory
693
-
694
-
695
- ## [0.7.0] - 2025-12-27
696
-
697
- ### Changed
698
- - **Configuration**: Migrate to ADR-022 configuration pattern
699
- - Removed unused `DEFAULT_*` constants from Configuration module
700
- - Configuration now fully delegated to ace-support-core cascade and `.ace.example` defaults
701
- - Reduces code duplication (~40 LOC) and aligns with project-wide configuration standards
702
- - Default values remain available via `WorktreeConfig::DEFAULT_CONFIG` model
703
-
704
- ## [0.6.1] - 2025-12-27
705
-
706
- ### Changed
707
- - **Error Handling**: Removed `StandardError` from inner rescue clause in `create_pr_worktree`
708
- - Specific ace-git errors now bubble up correctly to top-level handler
709
- - Prevents silently swallowing unexpected errors
710
- - **Code Organization**: Extracted error handling methods from `handle_pr_fetch_error`
711
- - `handle_pr_not_found`, `handle_gh_auth_error`, `handle_gh_not_installed`, `handle_unknown_error`
712
- - Improved code readability and maintainability
713
- - **Debug Output**: Added backtrace info for unknown errors when `ENV["DEBUG"]` is set
714
- - **Documentation**: Added schema documentation for `pr_data_from_metadata` method
715
- - **Defensive Access**: Added fallback to "unknown" for `headRepositoryOwner` dig access
716
- - **README**: Added version compatibility table for ace-git dependency
717
- - **Dependency**: Updated ace-git dependency constraint to `~> 0.4`
718
-
719
- ## [0.6.0] - 2025-12-26
720
-
721
- ### Added
722
- - **Fork PR Detection**: PR worktree creation now detects and warns about fork PRs
723
- - Shows warning when PR is from a fork (`isCrossRepository`)
724
- - Displays fork owner info (`headRepositoryOwner`)
725
- - Informs user they cannot push to fork PR branches directly
726
- - **PR Number Validation**: Extracted `PR_NUMBER_PATTERN` constant for consistent validation
727
- - **Debug Output**: Added `ENV["DEBUG"]` support for unexpected error diagnostics
728
- - **Test Coverage**: Added CLI integration tests for `--pr` flag and timeout parameter tests
729
-
730
- ### Changed
731
- - **Dependency Update**: Replaced ace-git-diff dependency with ace-git (~> 0.3)
732
- - GitCommand atom now delegates to `Ace::Git::Atoms::CommandExecutor` from ace-git
733
- - Creates unified Git operations across ACE ecosystem packages
734
- - Maintains full backward compatibility for existing code
735
- - **PR Worktree Creation**: Migrated to use `Ace::Git::Molecules::PrMetadataFetcher`
736
- - More robust PR metadata fetching with better error handling
737
- - Consistent with ace-git's PR operations used across other packages
738
- - **Simplified GitCommand**: `current_branch` now delegates directly to ace-git
739
- - ace-git handles detached HEAD state internally (returns SHA)
740
- - Removed local workaround code (~20 lines)
741
- - **Ruby 3 Syntax**: Updated to use keyword argument forwarding (`timeout:`)
742
- - **Test Helpers**: Promoted `with_git_stubs` to shared `test_helper.rb`
743
-
744
- ### Removed
745
- - Deleted `molecules/pr_fetcher.rb` - replaced by ace-git's `PrMetadataFetcher`
746
- - Deleted corresponding `test/molecules/pr_fetcher_test.rb`
747
-
748
- ## [0.5.0] - 2025-12-17
749
-
750
- ### Added
751
- - **Current Task Symlink**: Creates `_current` symlink inside worktree when creating task worktrees
752
- - Symlink created at worktree root (e.g., `.ace-wt/task.145/_current`)
753
- - Points to the task directory within the worktree (e.g., `.ace-taskflow/v.0.9.0/tasks/145-feat/`)
754
- - Quick access from worktree: `cat _current/*.s.md`, `ls _current/`
755
- - Uses relative paths for portability
756
- - Configurable: `task.create_current_symlink` (default: `true`) and `task.current_symlink_name` (default: `"_current"`)
757
- - Non-blocking: symlink failure doesn't abort worktree creation
758
- - New `CurrentTaskLinker` molecule handles symlink lifecycle
759
- - Dry-run shows planned symlink creation
760
-
761
- ## [0.4.8] - 2025-12-03
762
-
763
- ### Fixed
764
- - **Upstream Branch Reliability**: Enhanced upstream tracking setup with fallback mechanism
765
- - Added `set_upstream` method to TaskPusher using `git branch --set-upstream-to`
766
- - `setup_upstream_for_worktree` now tries `git push -u` first, falls back to `--set-upstream-to` if push fails but remote branch exists
767
- - Added `remote_branch_exists?` helper to check remote branch availability
768
- - Fixes inconsistent upstream tracking when creating task worktrees
769
-
770
- ## [0.4.7] - 2025-12-01
771
-
772
- ### Changed
773
- - **Default Behavior**: `auto_setup_upstream` and `auto_create_pr` now default to `false`
774
- - Pushing branches and creating PRs now require explicit opt-in via config or CLI flags
775
- - Follows principle of least surprise - network/remote operations should not happen unexpectedly
776
- - To enable: set `git.worktree.task.auto_setup_upstream: true` and `auto_create_pr: true` in config
777
-
778
- ### Fixed
779
- - **Detached HEAD PR Base**: When creating PR from a detached HEAD (SHA as start_point):
780
- - Now creates a branch on remote (`base-{sha-short}`) for the commit SHA
781
- - Uses that branch as PR base instead of failing with invalid `--base` argument
782
- - Falls back to `main` only if remote branch creation fails
783
-
784
- ## [0.4.6] - 2025-11-30
785
-
786
- ### Fixed
787
- - **Worktree Task Update**: Set `PROJECT_ROOT_PATH` env var when updating task in worktree
788
- - Ensures TaskManager updates the task file in the worktree, not the main project
789
- - Fixes "No commits between branches" error when creating PRs
790
- - The `started_at` timestamp is now correctly committed to the worktree branch
791
-
792
- ## [0.4.5] - 2025-11-30
793
-
794
- ### Added
795
- - **Initial Worktree Commit**: Adds `started_at` timestamp to task before PR creation
796
- - Creates initial commit in worktree branch enabling PR creation
797
- - GitHub requires at least one commit difference between branches for PRs
798
- - New step 9.5 in workflow: update task → commit → push → then create PR
799
- - Uses `TaskStatusUpdater.add_started_at_timestamp()` method
800
-
801
- ## [0.4.4] - 2025-11-30
802
-
803
- ### Fixed
804
- - **PR Creation Bug**: Always pass `--body` flag when creating draft PRs
805
- - `gh pr create` requires both `--title` and `--body` in non-interactive mode
806
- - Now defaults `--body` to the PR title when no body is provided
807
-
808
- ## [0.4.3] - 2025-11-30
809
-
810
- ### Fixed
811
- - **Metadata Commit Bug**: Task changes now properly commit when metadata is added
812
- - Previously, commits only happened when task status was updated
813
- - Now commits happen when either status is updated OR metadata is added
814
- - Ensures worktree metadata is committed before detaching to new worktree
815
- - Dry run (`--dry-run`) now accurately reflects when commit/push will happen
816
-
817
- ## [0.4.2] - 2025-11-29
818
-
819
- ### Fixed
820
- - **Branch Source Bug**: New worktree branches now correctly use the current branch as their start-point
821
- - Previously, worktrees created from within another worktree would base their branch on main worktree's HEAD
822
- - Now `git worktree add` explicitly passes the current branch (or commit SHA) as the start-point
823
- - Added `--source <ref>` option to specify a custom git ref as branch start-point (e.g., `--source main`)
824
- - Handles detached HEAD state by using the commit SHA as start-point
825
-
826
- ### Added
827
- - `GitCommand.ref_exists?`: New method to validate that a git ref exists before using it
828
- - `--source` CLI option for `create` command: Explicitly specify which git ref to base the new branch on
829
- - Result hash now includes `start_point` field showing which ref was used as the branch base
830
-
831
- ## [0.4.1] - 2025-11-28
832
-
833
- ### Fixed
834
- - **TaskPusher Loading**: Add missing require statement for TaskPusher module
835
- - Fixes "uninitialized constant Ace::Git::Worktree::Molecules::TaskPusher" error
836
- - Restores functionality of `ace-git-worktree remove --task` command
837
-
838
- ## [0.4.0] - 2025-11-28
839
-
840
- ### Added
841
- - **TaskIDExtractor Atom**: Shared helper for consistent task ID extraction across all components
842
- - Properly handles hierarchical subtask IDs (e.g., `121.01`)
843
- - Provides `extract()` for task data hashes and `normalize()` for reference strings
844
- - Uses ace-taskflow's `TaskReferenceParser` when available, with regex fallback
845
- - **PR and Branch Worktree Creation**: Create worktrees from GitHub pull requests or branches
846
- - `--pr <number>` flag fetches PR metadata and creates worktree
847
- - `-b <branch>` flag for local and remote branches
848
-
849
- ### Changed
850
- - **TaskFetcher**: Now uses `TaskManager` (organism-level API) instead of `TaskLoader` (molecule)
851
- - Let ace-taskflow handle all path resolution internally
852
- - Simplified initialization (no root_path needed)
853
- - Uses `TaskIDExtractor` in `parse_cli_output` for deriving task numbers
854
- - **Unified Task ID Extraction**: All components now use `TaskIDExtractor` for consistent subtask support
855
- - `worktree_info.rb`: Uses `TaskIDExtractor.normalize()` for path/branch extraction
856
- - `worktree_manager.rb`: Uses `TaskIDExtractor.normalize()` in `find_worktree_by_identifier`
857
- - `task_worktree_orchestrator.rb`: Uses `TaskIDExtractor` for task ref normalization
858
- - `task_status_updater.rb`: Uses `TaskIDExtractor.normalize()`
859
- - `worktree_creator.rb`: Uses `TaskIDExtractor.extract()`
860
- - `worktree_config.rb`: Uses `TaskIDExtractor.extract()`
861
- - `remove_command.rb`: Uses `TaskIDExtractor` for task matching
862
-
863
- ### Fixed
864
- - **Subtask ID Handling**: Fixed critical bug where subtask IDs (e.g., `121.01`) were stripped to parent ID (`121`)
865
- - Worktree operations now correctly distinguish between parent tasks and subtasks
866
- - Prevents accidental operations on wrong tasks (e.g., deleting `task.121` instead of `task.121.01`)
867
- - **Worktree Lookup by Subtask**: Fixed `remove --task 121.01` not finding worktrees
868
- - `find_worktree_by_identifier` now correctly matches subtask worktrees
869
- - `WorktreeInfo.extract_task_id` preserves subtask suffix in parsed output
870
- - All failing tests from PR/branch worktree integration
871
-
872
- ### Technical
873
- - Mocked sleep in `pr_fetcher` tests for 65% speedup
874
- - Configured push for mismatched branch names
875
-
876
- ## [0.3.0] - 2025-11-13
877
-
878
- ### Added
879
- - **PR-based Worktree Creation**: `--pr <number>` flag to create worktrees from GitHub pull requests
880
- - Automatically fetches PR metadata using GitHub CLI (`gh`)
881
- - Creates worktree with remote tracking
882
- - Detects and warns about fork PRs
883
- - Configurable directory and branch naming via `.ace/git/worktree.yml`
884
- - **Branch-based Worktree Creation**: `-b <branch>` flag for local and remote branches
885
- - Auto-detects remote vs. local branches
886
- - Automatically fetches remote branches before creation
887
- - Sets up tracking for remote branches
888
- - Preserves full branch path to avoid naming collisions
889
- - **PrFetcher Molecule**: GitHub CLI integration with comprehensive error handling
890
- - Custom exception classes for clear error types
891
- - Timeout support (30s default)
892
- - Input validation and security checks
893
- - Fork PR detection
894
- - **Retry Logic**: Automatic retry with exponential backoff for transient network failures
895
- - Up to 2 retries by default (configurable)
896
- - Smart retry only for NetworkError, not permanent errors
897
- - **Performance**: Cached gh CLI availability check to avoid repeated system calls
898
-
899
- ### Changed
900
- - Extended `WorktreeCreator` with `create_for_pr()` and `create_for_branch()` methods
901
- - Extended `WorktreeConfig` model with `pr` and `branch` configuration namespaces
902
- - Extended `WorktreeManager` with `create_pr()` and `create_branch()` orchestration
903
- - Improved branch naming to use full path and avoid collisions (e.g., `feature/auth/v1` → `feature-auth-v1`)
904
- - Enhanced CLI help text with PR and branch usage examples
11
+ ## [0.27.3] - 2026-10-20
905
12
 
906
13
  ### Fixed
907
- - Branch name collision issue when multiple remote branches share the same last segment
908
- - Changed from `branch.split("/").last` to full branch path preservation
909
- - Example: Both `origin/feature/auth/v1` and `origin/login/auth/v1` now create unique worktrees
910
-
911
- ### Documentation
912
- - Added "PR and Branch-Based Workflows" section to README
913
- - Comprehensive usage examples for `--pr` and `-b` options
914
- - Configuration examples with template variables
915
- - Requirements and troubleshooting guidance
916
14
 
917
- ### Testing
918
- - Added 12 new unit tests for WorktreeCreator PR/branch methods
919
- - Added 14 unit tests for PrFetcher molecule
920
- - Test coverage for happy paths, error scenarios, and edge cases
921
-
922
- ### Technical
923
- - Follows ATOM architecture pattern (Atoms → Molecules → Organisms)
924
- - GitHub CLI (`gh`) is required for PR functionality
925
- - Supports template variables: `{number}`, `{slug}`, `{base_branch}` for PR naming
926
-
927
- ## [0.2.2] - 2025-11-12
928
-
929
- ### Changed
930
- - Simplified test suite architecture from complex mocks to focused smoke tests (843 line reduction)
931
- - Converted organism/molecule tests to verify public API contracts instead of internal implementation
932
- - Updated command tests to match actual method signatures and result formats
933
-
934
- ### Added
935
- - Missing `--no-mise-trust` flag support in create command
936
- - Missing `--force` flag support in prune command
937
- - Security validation for dangerous patterns in paths and search queries
938
- - Help display when create command invoked without arguments
939
-
940
- ### Fixed
941
- - Config command now accepts subcommand arguments (show/validate) as aliases for flags
942
- - Test helper to require ace/git_diff for CommandExecutor mocking
943
- - Mock expectations in command tests to match actual API signatures
944
- - Integration test skips with clear explanatory messages
945
-
946
- ### Technical
947
- - Added ace/git_diff dependency to test_helper for proper mocking
948
- - Improved test maintainability by focusing on behavior over implementation
949
- - Enhanced security validation across user input points
950
-
951
- ## [0.2.1] - 2025-11-11
952
-
953
- ### Fixed
954
- - Execute after-create hooks for classic branches (previously only worked for task-based branches)
955
- - Proper hook configuration structure in tests for reliable test execution
956
-
957
- ### Changed
958
- - Made `WorktreeRemover#delete_branch_if_safe` public for better API encapsulation
959
- - Improved error messages for orphaned branch deletion to include detailed reasons
960
- - Enhanced documentation with hooks configuration examples and orphaned branch cleanup guide
961
-
962
- ### Technical
963
- - Addressed code review feedback improving encapsulation and test coverage
964
- - Added test for hook failure handling as non-blocking warnings
965
- - Fixed tests to use correct `@hooks_config` structure instead of direct instance variable
966
-
967
- ## [0.2.0] - 2025-11-11
968
-
969
- ### Added
970
- - **Configurable Worktree Root Path**: `root_path` configuration now supports paths outside the project directory
971
- - Relative paths are resolved relative to project root (not current directory)
972
- - Allows worktrees in parent directory (`../`), home directory (`~/worktrees`), or custom locations
973
- - Benefits: keeps project clean, avoids IDE file watcher overhead, prevents nested git issues
974
- - **Branch Deletion on Worktree Removal**: New `--delete-branch` flag for remove command
975
- - Safely deletes branches when removing worktrees
976
- - Without `--force`: only deletes merged branches (safe mode)
977
- - With `--force`: can delete unmerged branches (use with caution)
978
- - Clear user feedback when branch is kept vs. deleted
979
-
980
- ### Changed
981
- - **Path Expansion**: `PathExpander.expand()` now accepts optional `base` parameter for context-aware expansion
982
- - **Path Validation**: Relaxed to allow worktrees in subdirectories or outside git root (only prevents creation AT git root)
983
- - **WorktreeCreator**: Now accepts configuration object to respect `root_path` setting for traditional worktrees
984
- - **WorktreeRemover**: Enhanced with `delete_branch_if_safe()` method that checks merge status before deletion
985
-
986
- ### Fixed
987
- - **Configuration Respect**: Fixed bug where `root_path` configuration was ignored for traditional worktrees
988
- - **Branch Orphaning**: Fixed issue where removing worktrees left orphaned branches causing "branch already exists" errors
989
-
990
- ## [0.1.11] - 2025-11-05
991
-
992
- ### Fixed
993
- - **Ruby API Integration**: Replace CLI dependency with direct ace-taskflow Ruby API calls
994
- - **TaskFetcher**: Update availability check to prioritize Ruby API over CLI subprocess calls
995
- - **TaskStatusUpdater**: Add Ruby API integration via TaskManager with CLI fallback
996
- - **Mono-repo Optimization**: Improve performance by using in-process Ruby API instead of subprocess calls
997
- - **Error Messages**: Better distinction between mono-repo and standalone installation environments
998
- - **Configuration**: Update default worktree path for Git compatibility
999
-
1000
- ### Changed
1001
- - **Architecture**: Both TaskFetcher and TaskStatusUpdater now use Ruby API as primary method
1002
- - **Fallback Strategy**: Graceful degradation to CLI when Ruby API unavailable
1003
- - **Debug Output**: Enhanced debugging capabilities for troubleshooting integration issues
1004
- - **Performance**: Eliminate subprocess overhead when Ruby API available
1005
-
1006
- ## [0.1.10] - 2025-11-05
1007
-
1008
- ### Fixed
1009
- - **Completed Task Cleanup Messaging**: Replace confusing "Task metadata cleanup would require task access - skipped for completed task" message with clear status-based messaging
1010
- - **Task Status Detection**: Fix status parsing to handle stripped format (" done" instead of "done") from CLI output
1011
- - **User Experience**: Provide clear feedback when removing worktrees for completed tasks, which is the normal workflow
1012
-
1013
- ### Added
1014
- - **Clear Completion Messages**: Show "Task completed: no metadata cleanup needed" for done/completed tasks
1015
- - **Status-based Messaging**: Different messages for different task statuses to avoid confusion
1016
-
1017
- ### Changed
1018
- - **Remove Command Logic**: Updated messaging to be informative rather than suggesting errors for normal completed task workflows
1019
- - **User Communication**: Focus on clarity and explaining normal workflow expectations
1020
-
1021
- ## [0.1.9] - 2025-11-05
1022
-
1023
- ### Fixed
1024
- - **CLI Format Parsing**: Major rewrite of TaskMetadata parser to handle ace-taskflow CLI human-readable format instead of expected YAML frontmatter
1025
- - **Method Resolution Failures**: Implement inline parsing logic as workaround for Ruby class method loading issues
1026
- - **Task ID Extraction**: Fix parsing of task IDs from "v.0.9.0+task.089" format in CLI output
1027
- - **Timeout Parameter Error**: Fix Open3.capture3 timeout parameter syntax causing command execution failures
1028
- - **TaskMetadata Branch Accessor**: Add missing branch method for completed tasks returning nil
15
+ - `TaskIDExtractor`: preserve the complete subtask segment chain of
16
+ multi-level task ids. `extract`, `short_id`, and `normalize` now accept
17
+ any depth (`8xh.t.ddd.0.0` -> `ddd.0.0`), so third/fourth-level tasks
18
+ get deterministic, reversible worktree directories (`t.ddd.0.0`) and
19
+ branches (`ddd.0.0-<slug>`) instead of collapsing every deep leaf onto
20
+ `t.unknown` / `unknown-<slug>`; directory-name normalization
21
+ (`t.ddd.0.0`) keeps the same chain.
1029
22
 
1030
- ### Added
1031
- - **Inline CLI Parser**: Complete implementation for parsing ace-taskflow CLI key-value format
1032
- - **Comprehensive Debug Output**: Added DEBUG environment variable support for troubleshooting integration issues
1033
- - **Fallback Logic**: Enhanced error handling when ace-taskflow direct API integration fails
1034
-
1035
- ### Changed
1036
- - **TaskMetadata Architecture**: Rewrote from_ace_taskflow_output() to parse CLI format instead of YAML frontmatter
1037
- - **Error Handling**: Better distinction between task not found vs worktree not found scenarios
1038
-
1039
- ## [0.1.8] - 2025-11-04
1040
-
1041
- ### Fixed
1042
- - **Remove Command Dry-run Inconsistency**: Fix critical bug where `--dry-run` worked but actual execution failed for completed tasks
1043
- - **Task Lookup for Completed Tasks**: Add fallback logic to remove worktrees even when task metadata not found (tasks moved to done/)
1044
- - **Consistent Task Validation**: Ensure dry-run and actual execution use identical task validation logic
1045
- - **Graceful Worktree Removal**: Remove worktrees with clear messaging when tasks are completed but worktrees exist
1046
- - **PathExpander Namespace**: Fix namespaced PathExpander reference for proper module loading
1047
-
1048
- ### Added
1049
- - **Fallback Worktree Detection**: Search for worktrees by task reference when ace-taskflow metadata unavailable
1050
- - **Direct Git Worktree Removal**: Use direct git worktree commands to bypass problematic safety checks
1051
- - **Clear User Feedback**: Inform users when task not found but worktree removal proceeds
1052
- - **Completed Task Support**: Enable cleanup of worktrees for tasks marked as done in ace-taskflow
1053
-
1054
- ### Changed
1055
- - **Task Removal Logic**: Remove dependency on task metadata availability for worktree cleanup
1056
- - **Error Handling**: Provide helpful messages instead of failures when tasks are completed
1057
- - **Remove Command Behavior**: Now works consistently across all task states (active, completed, missing)
1058
-
1059
- ## [0.1.7] - 2025-11-04
1060
-
1061
- ### Fixed
1062
- - **Worktree Detection**: Fix critical issue where `ace-git-worktree list` showed "No worktrees found" despite existing worktrees
1063
- - **Git Output Parsing**: Update porcelain format parsing to handle 3-line format per worktree (worktree/HEAD/branch lines)
1064
- - **CommandExecutor Integration**: Fix timeout parameter mismatch causing git help output instead of worktree listing
1065
- - **Module Path**: Correct require path from `ace/git/diff/atoms/command_executor` to `ace/git_diff/atoms/command_executor`
1066
- - **YAML Loading**: Add missing `require "yaml"` to ConfigLoader classes
1067
-
1068
- ### Added
1069
- - **Full Worktree Support**: Now detects and displays all 7 existing worktrees (6 task-associated + 1 main)
1070
- - **Task Association**: Proper task ID extraction from existing worktree paths (086, 089, 090, 091, 093, 097)
1071
- - **Mixed Environment**: Support for both task-aware and traditional worktrees in unified view
1072
-
1073
- ### Changed
1074
- - **Porcelain Parsing**: Complete rewrite of `from_git_output_list()` to handle structured porcelain format
1075
- - **Worktree Information**: Enhanced display showing Task, Branch, Path, and Status for all worktrees
1076
-
1077
- ## [0.1.6] - 2025-11-04
1078
-
1079
- ### Fixed
1080
- - **Binstub**: Fix hardcoded path from `.ace-wt/task.089-zai/ace-git-worktree/` to `ace-git-worktree/`
1081
- - **VERSION**: Eliminate duplicate VERSION constant warnings by loading from correct gem location
1082
- - **Open3**: Add fallback for `Open3::CommandTimeout` constant for Ruby installations where it's not available
1083
- - **Configuration**: Improve template validation to be template-specific rather than overly strict
1084
- - **Configuration**: Add YAML fallback loading when `ace-support-core` is not available
1085
-
1086
- ### Changed
1087
- - **Template Validation**: Directory format requires `{task_id}`, branch format requires `{id, slug}`, commit format requires `{release, task_id, slug}`
1088
- - **Configuration Loading**: Now loads from `.ace/git/worktree.yml` even when ace-support-core gem is missing
1089
-
1090
- ## [0.1.5] - 2025-11-04
1091
-
1092
- ### Fixed
1093
- - **Documentation**: Remove duplicate changelog entry for version [0.9.109] in project CHANGELOG.md
1094
- - **Documentation**: Remove duplicated retrospective template content from task 0891 retro document
1095
- - Clean up placeholder template sections that were accidentally included in documentation
1096
- - Improve professional documentation quality by eliminating redundancies
1097
-
1098
- ### Added
1099
- - Comprehensive review documentation including GPT-5 codex review and Google Pro review reports
1100
- - Complete documentation of all review feedback implementations and resolutions
1101
- - Enhanced project documentation with detailed review metadata and analysis
1102
-
1103
- ### Documentation
1104
- - Verified README.md version flag documentation is correct
1105
- - Clean changelog without duplicate entries for better maintainability
1106
- - Professional documentation standards meeting Google Pro review recommendations
1107
-
1108
- ## [0.1.4] - 2025-11-04
1109
-
1110
- ### Fixed
1111
- - **CRITICAL**: Fix CLI override flags being ignored (--no-mise-trust, --no-status-update, --no-commit, --commit-message)
1112
- - **CRITICAL**: Fix overly restrictive branch validation that rejected / characters and main/master branches
1113
- - WorktreeManager now properly respects --no-mise-trust flag before applying configuration defaults
1114
- - TaskWorktreeOrchestrator respects all CLI override flags instead of always using configuration defaults
1115
- - Branch validation now follows Git's actual branch naming rules while maintaining security
1116
- - Fix regex syntax errors in task_fetcher.rb and mise_trustor.rb character classes
1117
-
1118
- ### Added
1119
- - Comprehensive test coverage for branch validation with slash characters and main/master branches
1120
- - Integration tests for CLI override functionality across all override flags
1121
- - Tests for custom commit message functionality
1122
- - Enhanced CLI command tests with override flag verification
1123
-
1124
- ### Technical
1125
- - Updated valid_branch_name? to allow legitimate Git branch patterns (feature/login, bugfix/issue-123, etc.)
1126
- - Enhanced option merging logic in WorktreeManager and TaskWorktreeOrchestrator
1127
- - Fixed CreateCommand initialization to use fully qualified constant names
1128
- - Maintained all existing security protections while fixing functional regressions
1129
-
1130
- ## [0.1.3] - 2025-11-04
1131
-
1132
- ### Security
1133
- - **CRITICAL**: Fix path traversal vulnerability in PathExpander atom
1134
- - **CRITICAL**: Fix command injection vulnerability in MiseTrustor and TaskFetcher
1135
- - Add comprehensive input validation for task IDs and file paths
1136
- - Implement command whitelisting and argument sanitization
1137
- - Add protection against symlink-based attacks with realpath resolution
1138
-
1139
- ### Fixed
1140
- - Update gemspec metadata from placeholder ACE team values to correct author information
1141
- - Fix Gemfile to use eval_gemfile pattern following ACE standards
1142
- - Modernize Rakefile to use ace-test patterns instead of outdated rake/testtask
1143
- - Remove Gemfile.lock from gem directory to follow ACE conventions
1144
-
1145
- ### Added
1146
- - Comprehensive test coverage for all CLI commands (6/6 commands)
1147
- - Security tests for path traversal and command injection prevention
1148
- - Integration tests for molecules and organisms
1149
- - Graceful error handling when ace-taskflow is unavailable
1150
- - Helpful error messages with installation guidance
1151
- - Troubleshooting section in README.md with step-by-step solutions
1152
-
1153
- ### Technical
1154
- - Enhanced security validation across all user input points
1155
- - Improved dependency management with graceful degradation
1156
- - Better error reporting with specific guidance for common issues
1157
- - Comprehensive security test suite with attack vector coverage
1158
-
1159
- ## [0.1.2] - 2025-11-04
1160
-
1161
- ### Fixed
1162
- - Update dependency from ace-core to ace-support-core in gemspec
1163
- - Add required support gems (ace-support-markdown, ace-support-mac-clipboard) to Gemfile
1164
- - Resolves dependency conflicts after ace-core → ace-support-core migration
1165
-
1166
- ## [0.1.1] - 2025-11-04
1167
-
1168
- ### Fixed
1169
- - Resolve syntax and runtime errors in ace-git-worktree gem
1170
- - Fix comment formatting errors in model files (task_metadata.rb, worktree_metadata.rb)
1171
- - Fix Ruby syntax errors (hash conditional values, constant assignment in methods)
1172
- - Fix initialization order in WorktreeManager
1173
- - Implement lazy loading for CLI commands to prevent configuration validation during help
1174
-
1175
- ### Technical
1176
- - Update gemspec dependencies to use less restrictive version constraints
1177
- - Improve CLI command registration with lazy loading pattern
1178
-
1179
- ## [0.1.0] - 2025-11-04
1180
-
1181
- ### Added
1182
- - Initial release of ace-git-worktree gem
1183
- - Task-aware worktree creation with ace-taskflow integration
1184
- - Configuration-driven naming conventions
1185
- - Automatic mise trust execution
1186
- - Traditional worktree operations (create, list, remove, prune, switch)
1187
- - ATOM architecture implementation
1188
- - CLI interface with comprehensive commands
1189
- - Configuration cascade support via ace-core
1190
-
1191
- ### Features
1192
- - Task metadata fetching from ace-taskflow
1193
- - Automatic task status updates
1194
- - Worktree metadata tracking in task frontmatter
1195
- - Configurable directory and branch naming
1196
- - Support for multiple worktrees per task
1197
- - Error handling and validation
1198
- - Comprehensive test coverage
1199
-
1200
- [Unreleased]: https://github.com/cs3b/ace/compare/v0.1.0...HEAD
1201
- [0.1.0]: https://github.com/cs3b/ace/releases/tag/v0.1.0
1202
-
1203
-
1204
- ## [0.13.11] - 2026-02-22
1205
-
1206
- ### Fixed
1207
- - Standardized quiet, verbose, debug option descriptions to canonical strings