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