ace-git 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. checksums.yaml +7 -0
  2. data/.ace-defaults/git/config.yml +83 -0
  3. data/.ace-defaults/nav/protocols/guide-sources/ace-git.yml +10 -0
  4. data/.ace-defaults/nav/protocols/tmpl-sources/ace-git.yml +19 -0
  5. data/.ace-defaults/nav/protocols/wfi-sources/ace-git.yml +19 -0
  6. data/CHANGELOG.md +762 -0
  7. data/LICENSE +21 -0
  8. data/README.md +48 -0
  9. data/Rakefile +14 -0
  10. data/docs/demo/ace-git-getting-started.gif +0 -0
  11. data/docs/demo/ace-git-getting-started.tape.yml +18 -0
  12. data/docs/demo/fixtures/README.md +3 -0
  13. data/docs/demo/fixtures/sample.txt +1 -0
  14. data/docs/getting-started.md +87 -0
  15. data/docs/handbook.md +50 -0
  16. data/docs/usage.md +259 -0
  17. data/exe/ace-git +37 -0
  18. data/handbook/guides/version-control/ruby.md +41 -0
  19. data/handbook/guides/version-control/rust.md +49 -0
  20. data/handbook/guides/version-control/typescript.md +47 -0
  21. data/handbook/guides/version-control-system-git.g.md +829 -0
  22. data/handbook/skills/as-git-rebase/SKILL.md +43 -0
  23. data/handbook/skills/as-git-reorganize-commits/SKILL.md +41 -0
  24. data/handbook/skills/as-github-pr-create/SKILL.md +60 -0
  25. data/handbook/skills/as-github-pr-update/SKILL.md +41 -0
  26. data/handbook/skills/as-github-release-publish/SKILL.md +58 -0
  27. data/handbook/templates/commit/squash.template.md +59 -0
  28. data/handbook/templates/pr/bugfix.template.md +103 -0
  29. data/handbook/templates/pr/default.template.md +40 -0
  30. data/handbook/templates/pr/feature.template.md +41 -0
  31. data/handbook/workflow-instructions/git/rebase.wf.md +402 -0
  32. data/handbook/workflow-instructions/git/reorganize-commits.wf.md +158 -0
  33. data/handbook/workflow-instructions/github/pr/create.wf.md +282 -0
  34. data/handbook/workflow-instructions/github/pr/update.wf.md +199 -0
  35. data/handbook/workflow-instructions/github/release-publish.wf.md +162 -0
  36. data/lib/ace/git/atoms/command_executor.rb +253 -0
  37. data/lib/ace/git/atoms/date_resolver.rb +129 -0
  38. data/lib/ace/git/atoms/diff_numstat_parser.rb +82 -0
  39. data/lib/ace/git/atoms/diff_parser.rb +110 -0
  40. data/lib/ace/git/atoms/file_grouper.rb +152 -0
  41. data/lib/ace/git/atoms/git_scope_filter.rb +86 -0
  42. data/lib/ace/git/atoms/git_status_fetcher.rb +29 -0
  43. data/lib/ace/git/atoms/grouped_stats_formatter.rb +233 -0
  44. data/lib/ace/git/atoms/lock_error_detector.rb +79 -0
  45. data/lib/ace/git/atoms/pattern_filter.rb +156 -0
  46. data/lib/ace/git/atoms/pr_identifier_parser.rb +88 -0
  47. data/lib/ace/git/atoms/repository_checker.rb +97 -0
  48. data/lib/ace/git/atoms/repository_state_detector.rb +92 -0
  49. data/lib/ace/git/atoms/stale_lock_cleaner.rb +247 -0
  50. data/lib/ace/git/atoms/status_formatter.rb +180 -0
  51. data/lib/ace/git/atoms/task_pattern_extractor.rb +57 -0
  52. data/lib/ace/git/atoms/time_formatter.rb +84 -0
  53. data/lib/ace/git/cli/commands/branch.rb +62 -0
  54. data/lib/ace/git/cli/commands/diff.rb +252 -0
  55. data/lib/ace/git/cli/commands/pr.rb +119 -0
  56. data/lib/ace/git/cli/commands/status.rb +84 -0
  57. data/lib/ace/git/cli.rb +87 -0
  58. data/lib/ace/git/models/diff_config.rb +185 -0
  59. data/lib/ace/git/models/diff_result.rb +94 -0
  60. data/lib/ace/git/models/repo_status.rb +202 -0
  61. data/lib/ace/git/molecules/branch_reader.rb +92 -0
  62. data/lib/ace/git/molecules/config_loader.rb +108 -0
  63. data/lib/ace/git/molecules/diff_filter.rb +102 -0
  64. data/lib/ace/git/molecules/diff_generator.rb +160 -0
  65. data/lib/ace/git/molecules/git_status_fetcher.rb +32 -0
  66. data/lib/ace/git/molecules/pr_metadata_fetcher.rb +286 -0
  67. data/lib/ace/git/molecules/recent_commits_fetcher.rb +53 -0
  68. data/lib/ace/git/organisms/diff_orchestrator.rb +178 -0
  69. data/lib/ace/git/organisms/repo_status_loader.rb +264 -0
  70. data/lib/ace/git/version.rb +7 -0
  71. data/lib/ace/git.rb +230 -0
  72. metadata +201 -0
data/CHANGELOG.md ADDED
@@ -0,0 +1,762 @@
1
+ # Changelog
2
+
3
+ All notable changes to ace-git will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.18.0] - 2026-03-23
11
+
12
+ ### Added
13
+ - Installation section in README for quick onboarding.
14
+
15
+ ### Changed
16
+ - Aligned gemspec description with README intro messaging.
17
+ - Clarified agent workflow references in Use Cases (removed raw `/as-` prefix, linked to Handbook catalog).
18
+ - Expanded template paths in handbook catalog to use full `handbook/templates/pr/` prefix.
19
+ - Re-recorded getting-started demo GIF against live repo (removed sandbox/fixture setup from tape).
20
+
21
+ ## [0.17.2] - 2026-03-23
22
+
23
+ ### Changed
24
+ - Refreshed package README structure, quick-link navigation, and section flow to align with the current package layout pattern.
25
+
26
+ ## [0.17.1] - 2026-03-22
27
+
28
+ ### Fixed
29
+ - Added `docs/**/*` to the gemspec file manifest so the packaged gem ships the documentation files linked from the README.
30
+
31
+ ## [0.17.0] - 2026-03-22
32
+
33
+ ### Changed
34
+ - Rewrote the README as a landing page, added getting-started and handbook docs, refreshed the usage reference, added committed demo artifacts, and aligned gemspec metadata with the new package messaging.
35
+
36
+ ## [0.16.1] - 2026-03-21
37
+
38
+ ### Added
39
+ - Add GitHub release publish workflow (`wfi://github/release-publish`) for creating GitHub releases from unpublished CHANGELOG entries with daily grouping, commit targeting, and dry-run support.
40
+ - Add `as-github-release-publish` skill for invoking the GitHub release publish workflow.
41
+
42
+ ## [0.16.0] - 2026-03-20
43
+
44
+ ### Changed
45
+ - Expanded `TS-GIT-001` E2E coverage with new goal-level checks for diff output-path security and deterministic status JSON/no-PR behavior.
46
+ - Tightened PR summary runner/verifier contracts to require explicit fallback evidence when PR context is unavailable.
47
+
48
+ ## [0.15.1] - 2026-03-18
49
+
50
+ ### Changed
51
+ - Migrated CLI namespace from `Ace::Core::CLI::*` to `Ace::Support::Cli::*` (ace-support-cli is now the canonical home for CLI infrastructure).
52
+
53
+
54
+ ## [0.15.0] - 2026-03-18
55
+
56
+ ### Changed
57
+ - Removed legacy backward-compatibility behavior as part of the 0.10 cleanup release.
58
+
59
+
60
+ ## [0.14.6] - 2026-03-17
61
+
62
+ ### Fixed
63
+ - Updated CLI routing tests to match the shared `ace-support-cli` help output headers and short-help behavior.
64
+
65
+ ## [0.14.5] - 2026-03-15
66
+
67
+ ### Changed
68
+ - Migrated CLI framework from dry-cli to ace-support-cli
69
+
70
+ ## [0.14.4] - 2026-03-13
71
+
72
+ ### Technical
73
+ - Updated canonical Git workflow skills for workflow-first execution compatibility.
74
+
75
+ ## [0.14.3] - 2026-03-13
76
+
77
+ ### Changed
78
+ - Updated canonical git workflow skills to explicitly run bundled workflows in the current project and execute them end-to-end.
79
+
80
+ ## [0.14.2] - 2026-03-13
81
+
82
+ ### Changed
83
+ - Replaced provider-specific Codex execution metadata on the canonical `as-github-pr-create` skill with a unified canonical skill body that declares arguments, variables, and explicit workflow-execution guidance.
84
+ - Removed the Codex-specific delegated execution metadata from the canonical `as-github-pr-update` skill so provider projections now inherit the canonical skill body unchanged.
85
+ - Limited provider-specific forking for `as-github-pr-create` to Claude frontmatter only.
86
+
87
+ ## [0.14.1] - 2026-03-12
88
+
89
+ ### Changed
90
+ - Updated README and handbook guide examples to load workflows through `ace-bundle` and removed legacy shared-handbook path assumptions.
91
+
92
+ ## [0.14.0] - 2026-03-12
93
+
94
+ ### Added
95
+ - Added Codex-specific delegated execution metadata to the canonical `as-github-pr-create` and `as-github-pr-update` skills so the generated Codex skills run in fork context on `gpt-5.3-codex-spark`.
96
+
97
+ ## [0.13.0] - 2026-03-10
98
+
99
+ ### Added
100
+ - Added canonical handbook-owned git and GitHub PR skills for rebase, commit reorganization, and PR create/update workflows.
101
+
102
+
103
+ ## [0.12.0] - 2026-03-09
104
+
105
+ ### Changed
106
+ - Rebase workflow now treats localized conflicts as continue-first instead of automatically aborting into cherry-pick fallback.
107
+ - Cherry-pick fallback is now documented as an escalation path for repeated, large, or explicitly requested conflict handling.
108
+
109
+ ### Fixed
110
+ - Cherry-pick replay progress now uses session-local applied SHA tracking instead of commit-subject matching, making resumed replay more reliable.
111
+
112
+ ## [0.11.18] - 2026-03-05
113
+
114
+ ### Fixed
115
+ - Rebase workflow cherry-pick skip detection now uses commit subject matching instead of SHA comparison (cherry-pick produces new SHAs, so SHA-based skip never fired on resume).
116
+ - Rebase workflow Phase 3.3 now restores upstream tracking after `git branch -m` rename, which silently drops the upstream config.
117
+ - Rebase workflow Phase 5 push now uses `-u` flag to guarantee tracking is set after force-push.
118
+
119
+ ## [0.11.17] - 2026-03-05
120
+
121
+ ### Changed
122
+ - Diff generation now falls back safely when default git refs are unavailable, using tracking branch, `origin/main`, then `HEAD~1`.
123
+
124
+
125
+ ## [0.11.16] - 2026-03-04
126
+
127
+ ### Changed
128
+ - Default diff ignore artifacts now use `.ace-local/**/*`.
129
+
130
+
131
+ ## [0.11.15] - 2026-03-04
132
+
133
+ ### Fixed
134
+ - Rebase workflow cleanup `find` command corrected to `.ace-local/git/` (missed one occurrence in previous fix)
135
+
136
+ ## [0.11.14] - 2026-03-04
137
+
138
+ ### Fixed
139
+ - Rebase workflow session path corrected to short-name convention (`.ace-local/git/` not `.ace-local/ace-git/`)
140
+
141
+ ## [0.11.13] - 2026-03-04
142
+
143
+ ### Changed
144
+ - Rename PR workflows to domain-namespaced URIs and paths:
145
+ - `wfi://git/create-pr` -> `wfi://github/pr/create`
146
+ - `wfi://git/update-pr-desc` -> `wfi://github/pr/update`
147
+ - `handbook/workflow-instructions/git/{create-pr,update-pr-desc}.wf.md` -> `handbook/workflow-instructions/github/pr/{create,update}.wf.md`
148
+ - Update PR workflow frontmatter names to `github-pr-create` and `github-pr-update`
149
+ - Update README workflow references to the new `wfi://github/pr/create` URI
150
+
151
+ ## [0.11.12] - 2026-02-27
152
+
153
+ ### Changed
154
+ - Add explicit code-block formatting rule and correct/incorrect example for grouped-stats output in PR creation and update workflows
155
+ - Update embedded PR templates (feature, bugfix, default) to instruct verbatim code-block pasting of grouped-stats output
156
+
157
+ ## [0.11.11] - 2026-02-26
158
+
159
+ ### Fixed
160
+ - Add untracked-file detection helper in command execution so callers can correctly treat untracked-only repositories as having changes.
161
+
162
+ ### Technical
163
+ - Add regression tests for untracked change detection helper behavior.
164
+
165
+ ## [0.11.10] - 2026-02-26
166
+
167
+ ### Changed
168
+ - Refine grouped-stats header rendering so icon and label are displayed as separate columns with consistent spacing and no extra icon-side padding
169
+ - Keep file rows aligned to the same name column as package/layer headers while preserving explicit icon-column separation
170
+
171
+ ## [0.11.9] - 2026-02-26
172
+
173
+ ### Fixed
174
+ - Parse brace renames with an empty side (for example `{ => _archive}`) in numstat output so grouped-stats keeps move entries in the correct group
175
+
176
+ ### Changed
177
+ - Compact shared rename prefixes in grouped-stats file lines to surface only the changed destination tail on the first rename line
178
+ - Normalize project-root group labeling to `./`, hide redundant layer headers when layer totals match the group totals, and suppress anonymous `other/` summary rows
179
+ - Switch repeated path-prefix squashing from space padding to explicit `.../basename` formatting for clearer relative context
180
+
181
+ ## [0.11.8] - 2026-02-26
182
+
183
+ ### Added
184
+ - Add emoji-prefixed grouped-stats layer headers for faster visual scanning: `🧱 lib/`, `🧪 test/`, and `📚 handbook/`
185
+
186
+ ## [0.11.7] - 2026-02-25
187
+
188
+ ### Changed
189
+ - Update `create-pr` and `update-pr-desc` workflows to use emoji section headers (`📋 Summary`, `✏️ Changes`, `📁 File Changes`, `🧪 Test Evidence`, `📦 Releases`) for visual section separation
190
+ - Add bullet formatting rules requiring the first key term (feature name, class name, CLI flag) to be bolded in Changes, Test Evidence, and Releases bullets
191
+
192
+ ## [0.11.6] - 2026-02-25
193
+
194
+ ### Added
195
+ - Squash repeated directory prefixes in `grouped-stats` file lines — consecutive files in the same directory show the shared prefix once, subsequent files show only the basename indented to align
196
+ - Squash consecutive renames sharing the same from-dir and to-dir — second and later renames show only the indented basenames on each side of the arrow
197
+ - Non-rename file following a rename always shows its full path (rename dir is not a real filesystem directory for comparison purposes)
198
+
199
+ ### Changed
200
+ - Update `update-pr-desc` workflow: `## File Changes` must use the complete, untruncated `grouped-stats` output — trimming or abbreviating is explicitly forbidden
201
+
202
+ ## [0.11.5] - 2026-02-25
203
+
204
+ ### Fixed
205
+ - Remove blank lines within groups in `grouped-stats` plain output (between group header and first layer, and between layers)
206
+ - Wire positional `range` argument in `ace-git diff` so `ace-git diff origin/main..HEAD` correctly passes the range to the diff generator instead of silently falling back to working-tree state
207
+
208
+ ### Changed
209
+ - Align stats and name columns in `grouped-stats` output: stats use `%5s, %5s` (12 chars, handles ±9999) and file-count field is right-padded so names start at a consistent column across package, layer, and file lines
210
+ - Update `update-pr-desc` workflow to use `ace-git diff $(git merge-base HEAD origin/main)..HEAD --format grouped-stats` for correct PR diff coverage
211
+
212
+ ## [0.11.4] - 2026-02-25
213
+
214
+ ### Fixed
215
+ - Classify single-segment dotfiles (e.g. `.gitignore`) as "Project root" instead of creating per-file groups
216
+
217
+ ### Technical
218
+ - Add inline comment for unbraced exact rename fallback in `DiffNumstatParser`
219
+
220
+ ## [0.11.3] - 2026-02-25
221
+
222
+ ### Fixed
223
+ - Filter numstat entries by `rename_from` path in addition to `rename_to` so renames from excluded locations are correctly suppressed
224
+ - Consolidate duplicate `ace-` and dot-prefix classification branches in `FileGrouper#classify`
225
+
226
+ ## [0.11.2] - 2026-02-25
227
+
228
+ ### Fixed
229
+ - Short-circuit full diff generation for `grouped-stats` format to avoid redundant git subprocess
230
+ - Standardize zero-value display in grouped stats — file-level stats now show `+0`/`-0` consistently with group totals
231
+
232
+ ## [0.11.1] - 2026-02-25
233
+
234
+ ### Changed
235
+ - Rewrite PR description workflows to require evidence-based sections and sourcing rules (`Summary`, `Changes`, `File Changes`, `Test Evidence`, `Releases`) derived from diff, commit, test, and changelog evidence.
236
+ - Align PR creation workflow guidance with grouped-stats-first file change reporting, user-impact-first summary writing, and explicit omission/fallback rules for missing evidence.
237
+
238
+ ### Technical
239
+ - Replace feature/default PR template scaffolds with concise evidence-oriented placeholders and update embedded workflow template blocks accordingly.
240
+
241
+ ## [0.11.0] - 2026-02-25
242
+
243
+ ### Added
244
+ - Add `ace-git diff --format grouped-stats` with package/layer grouped and aligned diff statistics output.
245
+ - Add grouped stats configuration defaults (`layers`, `collapse_above`, `show_full_tree`, `dotfile_groups`) and numstat-based grouping/formatting internals.
246
+
247
+ ### Changed
248
+ - Normalize `--format grouped-stats` handling to internal `:grouped_stats` format dispatch and support markdown-oriented grouped rendering for file output.
249
+
250
+ ### Technical
251
+ - Add grouped-stats unit coverage for parser, grouper, formatter, diff config, diff generator, orchestrator, and diff command integration points.
252
+
253
+ ## [0.10.18] - 2026-02-23
254
+
255
+ ### Technical
256
+ - Updated internal dependency version constraints to current releases
257
+
258
+ ## [0.10.17] - 2026-02-22
259
+
260
+ ### Changed
261
+ - Migrate `ace-git` CLI to standard multi-command help pattern with registered `help`, `--help`, and `-h` commands.
262
+ - Move shorthand git range routing (`ace-git HEAD~5..HEAD`) to the executable wrapper while preserving `diff` shorthand behavior.
263
+
264
+ ### Technical
265
+ - Rewrite CLI routing integration tests to executable-level assertions for help/version/default routing behavior.
266
+ - Update usage documentation to reflect explicit help invocation and shorthand diff examples.
267
+
268
+ ## [0.10.15] - 2026-02-22
269
+
270
+ ### Changed
271
+ - Migrate skill naming and invocation references to hyphenated `ace-*` format (no underscores).
272
+
273
+ ## [0.10.14] - 2026-02-19
274
+
275
+ ### Technical
276
+ - Namespace workflow instructions into git/ subdirectory with updated wfi:// URIs
277
+
278
+ ## [0.10.13] - 2026-02-17
279
+
280
+ ### Added
281
+
282
+ - `dirty_file_count` method to RepoStatus for counting uncommitted files from git status output
283
+ - `dirty_files` key in RepoStatus#to_h for downstream consumers
284
+
285
+ ## [0.10.12] - 2026-02-17
286
+
287
+ ### Fixed
288
+
289
+ - `fetch_pr_data_parallel` now matches PRs in any state (OPEN, MERGED, CLOSED) for the current branch, preferring OPEN over MERGED over CLOSED, so branches with merged PRs show PR metadata in status views
290
+
291
+ ## [0.10.11] - 2026-02-04
292
+
293
+ ### Changed
294
+ - Add scope determination guidance to reorganize-commits workflow for handling user-provided vs embedded status scope
295
+
296
+ ## [0.10.10] - 2026-02-01
297
+
298
+ ### Changed
299
+ - Use progressive retry delays (1s, 2s, 3s, 4s) for lock handling instead of fixed 500ms
300
+ - Lower stale lock threshold from 60s to 10s for faster orphan detection
301
+ - Always show lock wait messages (not just in debug mode)
302
+
303
+ ## [0.10.9] - 2026-01-31
304
+
305
+ ### Fixed
306
+ - `load_for_pr` no longer fetches unnecessary PR activity (saves ~1s per call)
307
+
308
+ ### Technical
309
+ - Add missing stubs for `fetch_recently_merged`/`fetch_open_prs` in test helper (2.3s → 16ms)
310
+
311
+ ## [0.10.8] - 2026-01-31
312
+
313
+ ### Technical
314
+ - Stub Kernel.sleep in lock retry tests for 98% speedup (2.5s → 32ms)
315
+
316
+ ## [0.10.7] - 2026-01-30
317
+
318
+ ### Changed
319
+ - Simplify rebase workflow from 677 to 373 lines (45% reduction)
320
+
321
+ ## [0.10.6] - 2026-01-30
322
+
323
+ ### Added
324
+ - Improve rebase workflow with state capture and verification
325
+
326
+ ### Technical
327
+ - Apply review feedback to rebase workflow documentation
328
+ - Clarify ace-git-commit usage for automatic scope grouping
329
+
330
+ ## [0.10.5] - 2026-01-29
331
+
332
+ ### Added
333
+ - Integrate exception-based CLI error handling
334
+ - Enhance commit reorganization workflow with bundle integration
335
+
336
+ ### Technical
337
+ - Clarify reorganize-commits workflow: reorganize means reorder, not squash
338
+
339
+ ## [0.10.4] - 2026-01-28
340
+
341
+ ### Added
342
+ - Add bundle section to reorganize-commits workflow for context loading via ace-bundle
343
+
344
+ ## [0.10.3] - 2026-01-27
345
+
346
+ ### Changed
347
+ - Lock retry now detects active lock PID and increases wait time on active locks
348
+ - Lock cleanup reports lock status metadata (pid/age) for better diagnostics
349
+ - CLI now shows error for unknown commands instead of routing to diff
350
+
351
+ ## [0.10.2] - 2026-01-27
352
+
353
+ ### Technical
354
+ - Simplified reorganize-commits workflow documentation
355
+
356
+ ## [0.10.1] - 2026-01-27
357
+
358
+ ### Changed
359
+ - Renamed squash-commits workflow and skill to reorganize-commits
360
+ - Workflow: `squash-commits.wf.md` → `reorganize-commits.wf.md`
361
+ - Skill: `ace:squash-commits` → `ace:reorganize-commits`
362
+ - Better reflects the workflow purpose: organizing commits into logical groups
363
+
364
+ ## [0.10.0] - 2026-01-26
365
+
366
+ ### Added
367
+ - **Reset-split rebase strategy** as default in rebase workflow
368
+ - Uses `ace-git-commit` path-based splitting for zero-conflict rebases
369
+ - Automatically groups files by scope and generates distinct messages
370
+ - Orders commits logically: feat → fix → chore → docs
371
+ - Eliminates manual CHANGELOG conflict resolution for most rebases
372
+
373
+ ### Changed
374
+ - Rebase workflow redesigned with three named strategies:
375
+ - `reset-split` (DEFAULT): Soft reset + ace-git-commit for clean history
376
+ - `manual`: Traditional rebase for preserving exact commit history
377
+ - `interactive`: For commit squashing/reordering
378
+ - Simplified default rebase to 3 steps: fetch, reset --soft, ace-git-commit
379
+
380
+ ## [0.9.0] - 2026-01-19
381
+
382
+ ### Added
383
+ - Package-based commit squashing strategy (default for monorepo)
384
+ - Documents one commit per package/module approach
385
+ - Includes package-prefixed commit message format (e.g., `feat(ace-lint): ...`)
386
+ - Added Strategy 1: Package-Based as default monorepo approach
387
+ - Renumbered existing strategies (Logical Grouping, Commit Per Feature, One Commit Per Version)
388
+
389
+ ### Changed
390
+ - Renamed squash-pr workflow and skill to squash-commits
391
+ - Workflow: `squash-pr.wf.md` → `squash-commits.wf.md`
392
+ - Skill: `ace:squash-pr` → `ace:squash-commits`
393
+ - Updated ace-git-commit path handling documentation
394
+ - Removed incorrect `git add` + `ace-git-commit paths` pattern
395
+ - Documented correct pattern: `ace-git-commit <path1> <path2> --intention "..."`
396
+ - Added warning about passing paths directly to ace-git-commit
397
+ - Clarified PR-based vs commit-range-based workflow usage methods
398
+ - Updated for ace-bundle integration
399
+ - Workflow integration via wfi:// protocol
400
+ - Improved workflow discovery and loading
401
+
402
+ ## [0.8.2] - 2026-01-16
403
+
404
+ ### Changed
405
+ - Updated README.md workflow examples from /ace:load-context to /ace:bundle (task 206)
406
+
407
+ ## [0.8.1] - 2026-01-13
408
+
409
+ ### Added
410
+ - PID-based orphan detection for git lock files
411
+ - New `orphaned?` method checks if lock-owning process still exists
412
+ - Instant cleanup of orphaned locks (dead PID) regardless of age
413
+ - Age-based stale detection remains as fallback for edge cases
414
+
415
+ ### Changed
416
+ - Lock retry now uses fixed 500ms delay (was exponential 50→100→200→400ms)
417
+ - Lock cleanup attempted on every retry (was only first retry)
418
+ - Updated `initial_delay_ms` default from 50 to 500 in config
419
+ - Updated create-pr workflow to use worktree metadata for target_branch detection
420
+ - Added `yq` command to read `target_branch` from `.ace-taskflow/task.yml`
421
+ - Worktree metadata is now the preferred method for determining PR target branch
422
+ - Falls back to legacy parent task detection when metadata unavailable
423
+ - Updated rebase workflow with auto-detection from worktree metadata
424
+ - Added example for rebasing subtasks against parent branch
425
+ - `target_branch` now auto-detects from worktree metadata → origin/main fallback
426
+
427
+ ## [0.8.0] - 2026-01-12
428
+
429
+ ### Added
430
+ - Git index lock retry with stale lock cleanup (task 210)
431
+ - `LockErrorDetector` atom to detect git index lock errors from stderr
432
+ - `StaleLockCleaner` atom to detect and remove stale lock files (>60s old)
433
+ - Automatic retry with exponential backoff (50ms → 100ms → 200ms → 400ms)
434
+ - `lock_retry` configuration section in `.ace-defaults/git/config.yml`
435
+ - Configurable retry behavior: `enabled`, `max_retries`, `initial_delay_ms`, `stale_cleanup`, `stale_threshold_seconds`
436
+
437
+ ### Changed
438
+ - Modified `CommandExecutor.execute()` to wrap git commands with lock retry logic
439
+ - Updated `CommandExecutor.repo_root()` to use `execute_once()` directly to prevent recursion
440
+ - All 459 tests pass including 30 new tests for lock retry behavior
441
+
442
+ ## [0.7.1] - 2026-01-09
443
+
444
+ ### Changed
445
+ - **BREAKING**: Eliminate wrapper pattern in dry-cli commands
446
+ - Merged business logic directly into `Branch`, `Diff`, `PR`, and `Status` dry-cli command classes
447
+ - Deleted `branch_command.rb`, `diff_command.rb`, `pr_command.rb`, and `status_command.rb` wrapper files
448
+ - Simplified architecture by removing unnecessary delegation layer
449
+
450
+ ## [0.7.0] - 2026-01-07
451
+
452
+ ### Changed
453
+ - **BREAKING**: Migrated CLI framework from Thor to dry-cli (task 179.06)
454
+ - Replaced `thor` dependency with `dry-cli ~> 1.0`
455
+ - Created dry-cli command wrappers for all commands (diff, status, branch, pr)
456
+ - Maintained magic git range routing (HEAD~5..HEAD -> diff)
457
+ - All 423 tests pass with complete feature parity
458
+
459
+ ## [0.6.1] - 2026-01-05
460
+
461
+ ### Changed
462
+ - Adopted Ace::Core::CLI::Base for standardized options (--quiet, --verbose, --debug)
463
+ - Added method_missing for default subcommand support
464
+
465
+ ### Fixed
466
+ - Resolved -v flag conflict between --verbose and --version
467
+ - Addressed PR #123 review findings for Medium and higher priority issues
468
+
469
+ ## [0.6.0] - 2026-01-03
470
+
471
+ ### Changed
472
+ - **BREAKING**: Minimum Ruby version raised to 3.3.0 (was 3.2.0)
473
+ - Standardized gemspec file patterns with deterministic Dir.glob
474
+ - Added MIT LICENSE file
475
+
476
+ ## [0.5.2] - 2026-01-03
477
+
478
+ ### Changed
479
+
480
+ - Optimize test execution time from 6.54s to 4.37s (33% reduction)
481
+ - Created `with_mock_repo_load` helper to replace 6-7 levels of nested stubs
482
+ - Created `with_mock_diff_orchestrator` helper for consolidated stub management
483
+ - Extracted `build_mock_prs` to test_helper.rb for reuse
484
+ - Reused single temp directory instead of per-test Dir.mktmpdir calls
485
+ - Organisms layer: 4.82s → 2.72s (44% faster)
486
+
487
+ ### Technical
488
+
489
+ - Add `setup_repo_status_loader_defaults` helper for cleaner test setup
490
+ - Add comprehensive YARD documentation for test helpers
491
+ - Improve test hermeticity with proper stub defaults for `find_pr_for_branch` and `fetch_metadata`
492
+
493
+ ## [0.5.1] - 2025-12-30
494
+
495
+ ### Changed
496
+
497
+ - Replace ace-support-core dependency with ace-config for configuration cascade
498
+ - Migrate from Ace::Core to Ace::Config.create() API
499
+ - Migrate from `resolve_for` to `resolve_namespace` for cleaner config loading
500
+
501
+ ## [0.5.0] - 2025-12-30
502
+
503
+ ### Changed
504
+
505
+ * Rename `.ace.example/` to `.ace-defaults/` for gem defaults directory
506
+
507
+
508
+ ## [0.4.0] - 2025-12-27
509
+
510
+ ### Changed
511
+
512
+ - **PrMetadataFetcher**: Extracted `PR_FIELDS` constant for maintainability
513
+ - Field list now defined as frozen constant array
514
+ - Easier to review and modify PR metadata fields
515
+ - **BREAKING**: Renamed `context` to `status` throughout
516
+ - CLI: `ace-git status` (no `context` alias)
517
+ - Config: `git.status.*` (not `git.context.*`)
518
+ - Classes: `StatusCommand`, `StatusFormatter`, `RepoStatus`, `RepoStatusLoader`
519
+ - Files: `status_command.rb`, `status_formatter.rb`, `repo_status.rb`, `repo_status_loader.rb`
520
+ - Output header: "# Repository Status" (was "# Repository Context")
521
+ - Output format and JSON structure unchanged
522
+
523
+ ### Removed
524
+
525
+ - **TimeFormatter.add_relative_times**: Removed unused method (YAGNI cleanup)
526
+ - Method was marked "kept for potential future use" but never used in production
527
+ - StatusFormatter.format_merged_time_compact is the actual method used
528
+ - Related tests removed: test_add_relative_times_adds_merged_ago_field, test_add_relative_times_handles_missing_merged_at
529
+
530
+ ## [0.3.6] - 2025-12-26
531
+
532
+ ### Added
533
+
534
+ - **PrMetadataFetcher**: Expanded PR metadata with fork detection fields
535
+ - `isCrossRepository`: Boolean indicating if PR is from a fork
536
+ - `headRepositoryOwner`: Object with fork owner's `login` field
537
+ - Enables ace-git-worktree to detect and handle forked PR workflows
538
+
539
+ - **BranchReader.detached?**: New method to explicitly check if HEAD is detached
540
+ - Returns true when in detached HEAD state
541
+ - Separate from current_branch for clearer API
542
+
543
+ ### Changed
544
+
545
+ - **CommandExecutor.current_branch**: Now returns commit SHA when in detached HEAD state
546
+ - Previously returned literal string "HEAD" for detached state
547
+ - Consumers no longer need workarounds to get the SHA
548
+ - Use `BranchReader.detached?` instead for explicit detached state detection
549
+
550
+ ## [0.3.5] - 2025-12-24
551
+
552
+ ### Fixed
553
+
554
+ - **TimeFormatter "0y ago" Bug**: Fixed relative time display for 11-12 month intervals
555
+ - Previously showed "0y ago" for 360-364 day intervals due to rounding error
556
+ - Now correctly shows "12mo ago" for intervals less than 365 days
557
+ - Added regression tests for month/year boundary cases
558
+
559
+ - **Nil Title Handling**: ContextFormatter now handles missing PR titles gracefully
560
+ - Shows "(no title)" instead of empty string when PR title is nil
561
+
562
+ - **Git Color Output**: GitStatusFetcher now disables colors with `-c color.status=false`
563
+ - Ensures clean output for LLM context regardless of user's git configuration
564
+
565
+ ### Added
566
+
567
+ - **CLI Alias**: Added `-n` alias for `--no-pr` option in `ace-git status`
568
+ - **Open PR Limit**: `fetch_open_prs` now accepts `limit` parameter (default: 10)
569
+ - Keeps latency predictable on repositories with many open PRs
570
+
571
+ ### Changed
572
+
573
+ - **Constants**: Extracted `DEFAULT_COMMITS_LIMIT` constant for consistency
574
+ - Referenced by both CLI options and RepoContextLoader defaults
575
+ - **Hash Key Normalization**: ContextFormatter now expects symbol keys for pr_activity
576
+ - Documented expected key types in method comments
577
+
578
+ ## [0.3.4] - 2025-12-24
579
+
580
+ ### Changed
581
+
582
+ - **PR Workflow Improvements**: Enhanced create-pr and update-pr-description workflows
583
+ - Added target branch detection based on task hierarchy from `ace-taskflow status`
584
+ - Subtasks now correctly target parent task branch instead of main
585
+ - PR title format: `<task-id>: <description>` when task ID present (e.g., `140.10: Add feature`)
586
+ - Auto-fix for PRs incorrectly targeting main when parent branch exists
587
+
588
+ ## [0.3.3] - 2025-12-24
589
+
590
+ ### Added
591
+
592
+ - **PR Activity Awareness**: `ace-git status` now shows recent PR activity
593
+ - Recently merged PRs (last 3) with relative timestamps (e.g., "1d ago")
594
+ - Open PRs from other team members (excluding current branch)
595
+ - New `--no-pr` flag to skip PR lookups for faster output
596
+ - TimeFormatter atom for relative time display
597
+
598
+ - **Enhanced Context Output**: Improved UX and readability
599
+ - Git status (`git status -sb`) displayed in Position section
600
+ - Recent commits section (configurable via `--commits N`, default: 3)
601
+ - Task ID shown in Position header: `## Position (task: 140.10)`
602
+
603
+ ### Changed
604
+
605
+ - **Simplified Position Section**: Combined Position and Working Tree into single section
606
+ - Raw `git status -sb` output used directly (no custom formatting)
607
+ - Cleaner, more compact output matching git conventions
608
+
609
+ ### Fixed
610
+
611
+ - Removed code fences from status output that confused display
612
+ - Added proper spacing after section headers for readability
613
+
614
+ ## [0.3.2] - 2025-12-22
615
+
616
+ ### Fixed
617
+
618
+ - **Error Propagation**: `ace-git diff` now properly reports git errors for invalid ranges
619
+ - Previously returned "(no changes)" silently when git failed
620
+ - Now shows actual git error message and exits with code 1
621
+ - Added `handle_result` helper in DiffGenerator for consistent error handling
622
+
623
+ ## [0.3.1] - 2025-12-22
624
+
625
+ ### Added
626
+
627
+ - **Examples in Main Help**: `ace-git --help` now shows common usage examples
628
+ - **Explicit Diff Command**: `ace-git diff --help` shows full help with options
629
+ - **SYNTAX Section**: Clear `[RANGE] [OPTIONS]` documentation in diff help
630
+
631
+ ### Changed
632
+
633
+ - **Compact PR Output**: Reduced PR section from ~11 lines to ~4 lines
634
+ - Header line with PR #, title, and status in brackets
635
+ - Key-value lines for branch, author, URL
636
+ - Applies to both `ace-git context` and `ace-git pr` commands
637
+
638
+ ## [0.3.0] - 2025-12-22
639
+
640
+ ### Added
641
+
642
+ - **CLI Executable** (`ace-git`): Full CLI with Thor for all git operations
643
+ - `ace-git diff [RANGE]` - Generate git diff with filtering (migrated from ace-git-diff)
644
+ - `ace-git context` - Show repository context (branch, PR, task pattern)
645
+ - `ace-git branch` - Show current branch information with tracking status
646
+ - `ace-git pr [NUMBER]` - Fetch and display PR metadata via GitHub CLI
647
+ - All commands support `--format json` for machine-readable output
648
+
649
+ - **Migrated Components** (from ace-git-diff):
650
+ - Atoms: CommandExecutor, DateResolver, DiffParser, PatternFilter
651
+ - Molecules: ConfigLoader, DiffFilter, DiffGenerator
652
+ - Organisms: DiffOrchestrator
653
+ - Models: DiffConfig, DiffResult
654
+ - Full backward compatibility with ace-git-diff functionality
655
+
656
+ - **New Components**:
657
+ - `TaskPatternExtractor` atom: Extract task IDs from branch names (e.g., "140-feature" -> "140")
658
+ - `PrIdentifierParser` atom: Parse PR identifiers (number, owner/repo#number, GitHub URLs)
659
+ - `RepositoryStateDetector` atom: Detect repository state (:clean, :dirty, :rebasing, :merging)
660
+ - `RepositoryChecker` atom: Check repository type (normal, detached, bare, worktree)
661
+ - `GitScopeFilter` atom: Filter files by git scope (staged, tracked, changed)
662
+ - `BranchReader` molecule: Read branch info with tracking status
663
+ - `PrMetadataFetcher` molecule: Fetch PR metadata via gh CLI
664
+ - `RepoContextLoader` organism: Orchestrate complete context loading
665
+ - `RepoContext` model: Structured repository context with markdown/JSON output
666
+
667
+ - **Dependencies**:
668
+ - Added `thor` (~> 1.3) for CLI framework
669
+ - Updated `ace-support-core` to ~> 0.11
670
+
671
+ ### Changed
672
+
673
+ - Package now includes CLI executable (previously workflow-only)
674
+ - Updated gemspec to include exe directory and thor dependency
675
+ - Summary updated to reflect unified git operations
676
+
677
+ ### Migration Notes
678
+
679
+ - This version consolidates functionality from ace-git-diff
680
+ - ace-git-diff will be deprecated in favor of ace-git
681
+ - Use `ace-git diff` instead of `ace-git-diff` for equivalent functionality
682
+ - Existing ace-git workflows (wfi://rebase, wfi://create-pr, wfi://squash-pr) remain unchanged
683
+
684
+ ## [0.2.2] - 2025-12-13
685
+
686
+ ### Changed
687
+
688
+ - **Squash Workflow Enhancement**: Updated `wfi://squash-pr` to recommend logical grouping over single-commit squashing
689
+ - Reframed purpose: "cohesive, logical commits" instead of "one commit per version"
690
+ - Added RECOMMENDED banner for Logical Grouping strategy
691
+ - Reordered strategies: Logical Grouping (1st), Commit Per Feature (2nd), One Commit (3rd)
692
+ - Added real-world example: PR #72 squashed 16 → 3 logical commits
693
+ - Rationale: Single-commit squashing loses valuable context; logical grouping preserves separation of concerns
694
+
695
+ ## [0.2.1] - 2025-11-16
696
+
697
+ ### Changed
698
+
699
+ - **Dependency Update**: Updated ace-support-core dependency from `~> 0.9` to `~> 0.11`
700
+ - Provides access to latest PromptCacheManager features and infrastructure improvements
701
+ - Maintains compatibility with standardized ACE ecosystem patterns
702
+
703
+ ## [0.2.0] - 2025-11-15
704
+
705
+ ### Added
706
+
707
+ - **PR Description Workflow** (`wfi://update-pr-description`): Automated PR title and description generation
708
+ - New `/ace:update-pr-desc` command for easy invocation from Claude Code
709
+ - Extracts metadata from CHANGELOG.md entries and task files
710
+ - Analyzes commit messages to identify change patterns and types
711
+ - Generates structured PR descriptions with summary, changes breakdown, breaking changes, and related tasks
712
+ - Auto-detects PR number from current branch or accepts explicit PR number argument
713
+ - Uses conventional commits format for PR titles (e.g., `feat(scope): description`)
714
+ - GitHub CLI integration for updating PR titles and descriptions
715
+ - Comprehensive documentation with examples and best practices
716
+ - Supports multi-line body formatting with heredoc for clean PR updates
717
+
718
+ ## [0.1.0] - 2025-11-11
719
+
720
+ ### Added
721
+
722
+ - Initial release of ace-git workflow package
723
+ - **Rebase Workflow** (`wfi://rebase`): Changelog-preserving rebase operations
724
+ - CHANGELOG.md conflict resolution strategies
725
+ - Version file preservation patterns
726
+ - Recovery procedures for failed rebases
727
+ - **PR Creation Workflow** (`wfi://create-pr`): Pull request creation with templates
728
+ - GitHub CLI integration examples
729
+ - Three PR templates: default, feature, bugfix
730
+ - Draft PR workflow support
731
+ - Alternative platform instructions (GitLab, Bitbucket)
732
+ - **Squash Workflow** (`wfi://squash-pr`): Version-based commit squashing
733
+ - Automatic version boundary detection
734
+ - Multiple squashing strategies (version, interactive, manual)
735
+ - CHANGELOG preservation during squash
736
+ - Comprehensive commit message templates
737
+ - **Templates**: Structured templates for consistent documentation
738
+ - PR templates: default, feature, bugfix
739
+ - Commit squash template with structured format
740
+ - **Protocol Integration**: ace-nav protocol support
741
+ - wfi:// protocol for workflow discovery
742
+ - template:// protocol for template access
743
+ - **Configuration**: Minimal, preference-based configuration
744
+ - Optional user preferences in `.ace/git/config.yml`
745
+ - Sensible defaults inline in workflows
746
+ - Comprehensive README with usage examples
747
+ - MIT License
748
+
749
+ ### Design Decisions
750
+
751
+ - Workflow-first architecture (no CLI executables)
752
+ - Self-contained workflows following ADR-001 principles
753
+ - Minimal configuration (preferences only, not behavior control)
754
+ - GitHub CLI as primary PR creation method with alternatives documented
755
+
756
+ [0.1.0]: https://github.com/cs3b/ace/releases/tag/ace-git-v0.1.0
757
+
758
+
759
+ ## [0.10.16] - 2026-02-22
760
+
761
+ ### Fixed
762
+ - Standardized quiet, verbose, debug option descriptions to canonical strings