ace-review 0.49.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 (108) hide show
  1. checksums.yaml +7 -0
  2. data/.ace-defaults/nav/protocols/guide-sources/ace-review.yml +10 -0
  3. data/.ace-defaults/nav/protocols/prompt-sources/ace-review.yml +36 -0
  4. data/.ace-defaults/nav/protocols/tmpl-sources/ace-review.yml +10 -0
  5. data/.ace-defaults/nav/protocols/wfi-sources/ace-review.yml +19 -0
  6. data/.ace-defaults/review/config.yml +79 -0
  7. data/.ace-defaults/review/presets/code-fit.yml +64 -0
  8. data/.ace-defaults/review/presets/code-shine.yml +44 -0
  9. data/.ace-defaults/review/presets/code-valid.yml +39 -0
  10. data/.ace-defaults/review/presets/docs.yml +42 -0
  11. data/.ace-defaults/review/presets/spec.yml +37 -0
  12. data/CHANGELOG.md +1780 -0
  13. data/LICENSE +21 -0
  14. data/README.md +42 -0
  15. data/Rakefile +14 -0
  16. data/exe/ace-review +27 -0
  17. data/exe/ace-review-feedback +17 -0
  18. data/handbook/guides/code-review-process.g.md +234 -0
  19. data/handbook/prompts/base/sections.md +23 -0
  20. data/handbook/prompts/base/system.md +60 -0
  21. data/handbook/prompts/focus/architecture/atom.md +30 -0
  22. data/handbook/prompts/focus/architecture/reflection.md +60 -0
  23. data/handbook/prompts/focus/frameworks/rails.md +40 -0
  24. data/handbook/prompts/focus/frameworks/vue-firebase.md +45 -0
  25. data/handbook/prompts/focus/languages/ruby.md +50 -0
  26. data/handbook/prompts/focus/phase/correctness.md +51 -0
  27. data/handbook/prompts/focus/phase/polish.md +43 -0
  28. data/handbook/prompts/focus/phase/quality.md +42 -0
  29. data/handbook/prompts/focus/quality/performance.md +48 -0
  30. data/handbook/prompts/focus/quality/security.md +47 -0
  31. data/handbook/prompts/focus/scope/docs.md +38 -0
  32. data/handbook/prompts/focus/scope/spec.md +58 -0
  33. data/handbook/prompts/focus/scope/tests.md +36 -0
  34. data/handbook/prompts/format/compact.md +12 -0
  35. data/handbook/prompts/format/detailed.md +39 -0
  36. data/handbook/prompts/format/standard.md +16 -0
  37. data/handbook/prompts/guidelines/icons.md +19 -0
  38. data/handbook/prompts/guidelines/tone.md +21 -0
  39. data/handbook/prompts/synthesis-review-reports.system.md +318 -0
  40. data/handbook/prompts/synthesize-feedback.system.md +147 -0
  41. data/handbook/skills/as-review-apply-feedback/SKILL.md +39 -0
  42. data/handbook/skills/as-review-package/SKILL.md +36 -0
  43. data/handbook/skills/as-review-pr/SKILL.md +38 -0
  44. data/handbook/skills/as-review-run/SKILL.md +30 -0
  45. data/handbook/skills/as-review-verify-feedback/SKILL.md +31 -0
  46. data/handbook/templates/review-tasks/task-review-summary.template.md +148 -0
  47. data/handbook/workflow-instructions/review/apply-feedback.wf.md +212 -0
  48. data/handbook/workflow-instructions/review/package.wf.md +16 -0
  49. data/handbook/workflow-instructions/review/pr.wf.md +284 -0
  50. data/handbook/workflow-instructions/review/run.wf.md +262 -0
  51. data/handbook/workflow-instructions/review/verify-feedback.wf.md +286 -0
  52. data/lib/ace/review/atoms/context_limit_resolver.rb +162 -0
  53. data/lib/ace/review/atoms/diff_boundary_finder.rb +133 -0
  54. data/lib/ace/review/atoms/feedback_id_generator.rb +66 -0
  55. data/lib/ace/review/atoms/feedback_slug_generator.rb +61 -0
  56. data/lib/ace/review/atoms/feedback_state_validator.rb +98 -0
  57. data/lib/ace/review/atoms/pr_comment_formatter.rb +325 -0
  58. data/lib/ace/review/atoms/preset_validator.rb +103 -0
  59. data/lib/ace/review/atoms/priority_filter.rb +115 -0
  60. data/lib/ace/review/atoms/retry_with_backoff.rb +75 -0
  61. data/lib/ace/review/atoms/slug_generator.rb +50 -0
  62. data/lib/ace/review/atoms/token_estimator.rb +86 -0
  63. data/lib/ace/review/cli/commands/feedback/create.rb +173 -0
  64. data/lib/ace/review/cli/commands/feedback/list.rb +280 -0
  65. data/lib/ace/review/cli/commands/feedback/resolve.rb +109 -0
  66. data/lib/ace/review/cli/commands/feedback/session_discovery.rb +70 -0
  67. data/lib/ace/review/cli/commands/feedback/show.rb +177 -0
  68. data/lib/ace/review/cli/commands/feedback/skip.rb +125 -0
  69. data/lib/ace/review/cli/commands/feedback/verify.rb +149 -0
  70. data/lib/ace/review/cli/commands/feedback.rb +79 -0
  71. data/lib/ace/review/cli/commands/review.rb +378 -0
  72. data/lib/ace/review/cli/feedback_cli.rb +71 -0
  73. data/lib/ace/review/cli.rb +103 -0
  74. data/lib/ace/review/errors.rb +146 -0
  75. data/lib/ace/review/models/feedback_item.rb +216 -0
  76. data/lib/ace/review/models/review_options.rb +208 -0
  77. data/lib/ace/review/models/reviewer.rb +181 -0
  78. data/lib/ace/review/molecules/context_composer.rb +123 -0
  79. data/lib/ace/review/molecules/context_extractor.rb +159 -0
  80. data/lib/ace/review/molecules/feedback_directory_manager.rb +183 -0
  81. data/lib/ace/review/molecules/feedback_file_reader.rb +178 -0
  82. data/lib/ace/review/molecules/feedback_file_writer.rb +210 -0
  83. data/lib/ace/review/molecules/feedback_synthesizer.rb +588 -0
  84. data/lib/ace/review/molecules/gh_cli_executor.rb +124 -0
  85. data/lib/ace/review/molecules/gh_comment_poster.rb +205 -0
  86. data/lib/ace/review/molecules/gh_comment_resolver.rb +199 -0
  87. data/lib/ace/review/molecules/gh_pr_comment_fetcher.rb +408 -0
  88. data/lib/ace/review/molecules/gh_pr_fetcher.rb +240 -0
  89. data/lib/ace/review/molecules/llm_executor.rb +142 -0
  90. data/lib/ace/review/molecules/multi_model_executor.rb +278 -0
  91. data/lib/ace/review/molecules/nav_prompt_resolver.rb +145 -0
  92. data/lib/ace/review/molecules/pr_task_spec_resolver.rb +58 -0
  93. data/lib/ace/review/molecules/preset_manager.rb +494 -0
  94. data/lib/ace/review/molecules/prompt_composer.rb +76 -0
  95. data/lib/ace/review/molecules/prompt_resolver.rb +168 -0
  96. data/lib/ace/review/molecules/strategies/adaptive_strategy.rb +193 -0
  97. data/lib/ace/review/molecules/strategies/chunked_strategy.rb +459 -0
  98. data/lib/ace/review/molecules/strategies/full_strategy.rb +114 -0
  99. data/lib/ace/review/molecules/subject_extractor.rb +315 -0
  100. data/lib/ace/review/molecules/subject_filter.rb +199 -0
  101. data/lib/ace/review/molecules/subject_strategy.rb +96 -0
  102. data/lib/ace/review/molecules/task_report_saver.rb +161 -0
  103. data/lib/ace/review/molecules/task_resolver.rb +48 -0
  104. data/lib/ace/review/organisms/feedback_manager.rb +386 -0
  105. data/lib/ace/review/organisms/review_manager.rb +1059 -0
  106. data/lib/ace/review/version.rb +7 -0
  107. data/lib/ace/review.rb +135 -0
  108. metadata +351 -0
data/CHANGELOG.md ADDED
@@ -0,0 +1,1780 @@
1
+ # Changelog
2
+
3
+ All notable changes to ace-review 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.49.0] - 2026-03-24
11
+
12
+ ### Fixed
13
+ - Added missing `ace-review-feedback` executable to gemspec — gem consumers now get both CLIs installed.
14
+
15
+ ### Changed
16
+ - Removed stale task-symlink documentation from feedback workflow guide (task-linking was removed in v0.46.0).
17
+ - Updated stale code comment in review manager referencing removed symlink architecture.
18
+ - Re-recorded getting-started demo with live review execution.
19
+
20
+ ## [0.48.1] - 2026-03-23
21
+
22
+ ### Changed
23
+ - Refreshed the package README overview, section flow, and quick links to align with the current ACE package layout pattern.
24
+
25
+ ## [0.48.0] - 2026-03-18
26
+
27
+ ### Changed
28
+ - Refined `TS-REVIEW-001` E2E verifier goal structure with explicit impact-first validation and check sections across all review workflow goals.
29
+
30
+ ## [0.47.1] - 2026-03-18
31
+
32
+ ### Changed
33
+ - Migrated CLI namespace from `Ace::Core::CLI::*` to `Ace::Support::Cli::*` (ace-support-cli is now the canonical home for CLI infrastructure).
34
+
35
+
36
+ ## [0.47.0] - 2026-03-18
37
+
38
+ ### Changed
39
+ - Removed legacy backward-compatibility behavior as part of the 0.10 cleanup release.
40
+
41
+
42
+ ## [0.46.1] - 2026-03-18
43
+
44
+ ### Fixed
45
+ - Hardened feedback synthesis to preserve raw output, clean common malformed JSON, and run a bounded JSON-repair pass before failing extraction.
46
+ - Switched the default feedback synthesis model to `gemini:flash-latest@ro` so synthesis uses the Gemini CLI read-only provider path.
47
+
48
+ ### Technical
49
+ - Isolated review-driven synthesis artifacts under a dedicated `feedback-synthesis` session subdirectory to avoid prompt-file collisions with the parent review session.
50
+ - Added regression coverage for malformed JSON cleanup/repair and review-manager session propagation during feedback extraction.
51
+
52
+ ## [0.46.0] - 2026-03-18
53
+
54
+ ### Changed
55
+ - Removed `--task` and `--no-auto-save` CLI options and all review-to-task linking integration (symlink creation, branch-based task detection, `auto_save` config).
56
+ - Removed `task_reference` state, `link_session_to_task`, `link_session_to_task_if_requested`, `auto_link_session_if_enabled`, and dead-code task feedback methods from `ReviewManager`.
57
+ - Simplified `PrTaskSpecResolver.extract_from_branch` to use inline branch-prefix extraction instead of external `TaskPatternExtractor`.
58
+
59
+ ### Technical
60
+ - Removed 15 task-linking tests and cleaned up stale `@task_reference` references in remaining tests.
61
+
62
+ ## [0.45.4] - 2026-03-18
63
+
64
+ ### Fixed
65
+ - Fixed review CLI option precedence so `auto_execute` now uses config default when the flag is omitted and `--dry-run` remains authoritative.
66
+
67
+ ## [0.45.3] - 2026-03-17
68
+
69
+ ### Fixed
70
+ - Fixed local PR diff fallback to fetch and compare against the PR head ref instead of caller `HEAD`.
71
+ - Unified review model timeout handling and raised the default to 900 seconds.
72
+
73
+ ### Technical
74
+ - Exposed structured Claude CLI response metadata when successful subprocess output is empty.
75
+ - Added regression coverage for timeout forwarding and PR diff fallback behavior.
76
+
77
+ ## [0.45.2] - 2026-03-17
78
+
79
+ ### Fixed
80
+ - Updated Claude context limits from 200K to 1M tokens in hardcoded fallback table.
81
+ - Added GPT-5.x (1.05M) and o4 (1.05M) model patterns to context limit resolver.
82
+ - Raised prompt size warning threshold from 160K to 800K tokens to eliminate spurious warnings with modern LLMs.
83
+ - Updated default context limit for unknown models from 128K to 200K tokens.
84
+
85
+ ## [0.45.1] - 2026-03-17
86
+
87
+ ### Changed
88
+ - Removed hardcoded `sandbox` injection from review CLI execution so review model presets control CLI flags consistently.
89
+ - Standardized `code-valid`, `code-fit`, and `code-shine` presets to use `codex:gpt@ro` and moved thinking/behavior configuration into preset configuration.
90
+
91
+ ## [0.45.0] - 2026-03-15
92
+
93
+ ### Added
94
+ - `DiffTooLargeError` for detecting GitHub API 406 responses on large PR diffs
95
+ - Local git diff fallback in `GhPrFetcher` when GitHub API rejects diffs exceeding 300-file limit
96
+ - Connection error retry guidance in PR review workflow (wait 30s, retry up to 2x)
97
+
98
+ ### Technical
99
+ - New `GhPrFetcherTest` covering 406 detection, fallback success, and fallback error paths
100
+
101
+ ## [0.44.5] - 2026-03-15
102
+
103
+ ### Changed
104
+ - Migrated CLI framework from dry-cli to ace-support-cli
105
+
106
+ ## [0.44.4] - 2026-03-13
107
+
108
+ ### Technical
109
+ - Updated canonical review skills to rely on workspace workflow execution flow.
110
+
111
+ ## [0.44.3] - 2026-03-13
112
+
113
+ ### Changed
114
+ - Updated canonical review skills to explicitly run bundled workflows in the current project and execute them end-to-end.
115
+
116
+ ## [0.44.2] - 2026-03-13
117
+
118
+ ### Changed
119
+ - Updated the review E2E error-handling scenario to distinguish real dry-run validation failures from invalid-model dry-run preparation behavior.
120
+
121
+ ## [0.44.1] - 2026-03-12
122
+
123
+ ### Changed
124
+ - Updated review workflow instructions to reference bundle-first review flows instead of slash-command examples.
125
+
126
+ ## [0.44.0] - 2026-03-10
127
+
128
+ ### Added
129
+ - Added canonical handbook-owned review skills and the new `wfi://review/package` workflow for package-level review.
130
+
131
+
132
+ ## [0.43.8] - 2026-03-08
133
+
134
+ ### Fixed
135
+ - Resolve review preset/config discovery from the caller's explicit `project_root` and gem-default preset files, preventing temp-dir context extraction from crashing after project-root hardening in `ace-support-fs`.
136
+
137
+ ### Technical
138
+ - Add regression coverage for gem-default preset discovery and temp-dir file-path context extraction.
139
+
140
+ ## [0.43.7] - 2026-03-06
141
+
142
+ ### Fixed
143
+ - Make `--dry-run` disable automatic model execution even when project defaults enable `auto_execute`.
144
+ - Allow `@` in review model identifiers so preset models can use `@ro`, `@rw`, and `@yolo` suffixes.
145
+
146
+ ### Changed
147
+ - Reduce the shipped review preset surface to five explicit single-file presets: `code-valid`, `code-fit`, `code-shine`, `docs`, and `spec`.
148
+ - Align both package defaults and repo-level `.ace/review` overrides on the explicit five-preset review model.
149
+
150
+ ## [0.43.6] - 2026-03-05
151
+
152
+ ### Changed
153
+ - Renamed config key `auto_save_branch_patterns` → `task_branch_patterns` to reflect broader usage (task spec resolution, not just auto-save)
154
+
155
+ ## [0.43.5] - 2026-03-04
156
+
157
+ ### Fixed
158
+ - Feedback session discovery now prefers `.ace-local/review/sessions` with legacy `.cache` fallback.
159
+
160
+
161
+ ## [0.43.4] - 2026-03-04
162
+
163
+ ### Fixed
164
+ - Review workflow instructions (apply-feedback, pr, run) corrected to use `.ace-local/review/` (not `.ace-local/ace-review/`)
165
+
166
+ ## [0.43.3] - 2026-03-04
167
+
168
+ ### Fixed
169
+ - `feedback-workflow.md` session path examples corrected to short-name convention (`.ace-local/review/` not `.ace-local/ace-review/`)
170
+
171
+ ## [0.43.2] - 2026-03-04
172
+
173
+ ### Fixed
174
+ - Reverted feedback synthesis workspace handling to standard `Dir.mktmpdir` behavior instead of project-local temporary workspaces.
175
+
176
+ ## [0.43.1] - 2026-03-04
177
+
178
+ ### Fixed
179
+ - README session storage path examples corrected to short-name convention (`.ace-local/review/` not `.ace-local/ace-review/`)
180
+
181
+ ## [0.43.0] - 2026-03-04
182
+
183
+ ### Changed
184
+ - Default session directory migrated from `.cache/ace-review/sessions` to `.ace-local/review/sessions`
185
+ - Feedback synthesis workspace now uses `Ace::Support::Items::Atoms::TmpWorkspace` for deterministic `.ace-local/tmp` paths
186
+
187
+ ## [0.42.7] - 2026-03-02
188
+
189
+ ### Changed
190
+ - Replace `ace-taskflow` dependency with `ace-task` — migrate `TaskResolver`, `SubjectExtractor`, and `PresetManager` to ace-task APIs
191
+ - Remove dead `save_to_release` method from `TaskReportSaver` (used `ReleaseManager` from ace-taskflow, never called in production)
192
+ - Update CLI subprocess call from `ace-taskflow task REF --path` to `ace-task show REF --path`
193
+
194
+ ## [0.42.6] - 2026-02-25
195
+
196
+ ### Technical
197
+ - Bump runtime dependency constraint from `ace-git ~> 0.10` to `ace-git ~> 0.11`.
198
+
199
+ ## [0.42.5] - 2026-02-25
200
+
201
+ ### Technical
202
+ - Add test case for `nil` return from `extract_task_reference` when PR metadata contains no task reference
203
+
204
+ ## [0.42.4] - 2026-02-25
205
+
206
+ ### Fixed
207
+ - Safely extract task reference from PR text using safe navigation to avoid NoMethodError when regex match returns nil
208
+
209
+ ## [0.42.3] - 2026-02-25
210
+
211
+ ### Added
212
+ - Automatically include the task behavioral spec (`.s.md`) in PR review context when a task can be discovered from PR branch metadata or PR text references.
213
+ - Add `PrTaskSpecResolver` to map PR metadata to a single primary task spec file with graceful fallback.
214
+
215
+ ### Changed
216
+ - Extend task resolution metadata with `spec_path` for direct behavioral spec selection.
217
+ - Extend PR metadata fetch fields to include PR `body` for task reference fallback detection.
218
+
219
+ ## [0.42.2] - 2026-02-24
220
+
221
+ ### Technical
222
+ - Strengthen TS-REVIEW-001 preset-composition E2E runner/verifier instructions by requiring explicit dry-run subject input and resilient artifact-based verification criteria.
223
+
224
+ ## [0.42.1] - 2026-02-23
225
+
226
+ ### Changed
227
+ - Centralized ContextComposerError and UnknownStrategyError into Ace::Review::Errors module
228
+ - Narrowed exception handling in feedback_file_reader, feedback_file_writer, and task_report_saver
229
+
230
+ ### Technical
231
+ - Updated internal dependency version constraints to current releases
232
+
233
+ ## [0.42.0] - 2026-02-22
234
+
235
+ ### Changed
236
+ - **Breaking:** Migrated from multi-command Registry to single-command pattern (task 278)
237
+ - Removed `review` subcommand: `ace-review review --preset pr` → `ace-review --preset pr`
238
+ - Removed `list-presets` subcommand: `ace-review list-presets` → `ace-review --list-presets`
239
+ - Removed `list-prompts` subcommand: `ace-review list-prompts` → `ace-review --list-prompts`
240
+ - Removed `version`/`help` subcommands: use `--version`/`--help` flags only
241
+ - Added `--version`, `--list-presets`, `--list-prompts` flags to main command
242
+ - Simplified `preprocess_array_options` (no command name detection needed)
243
+ - No backward compatibility (per ADR-024)
244
+
245
+ ## [0.41.2] - 2026-02-22
246
+
247
+ ### Fixed
248
+ - Add flag variants (`--help`, `-h`, `--version`) to KNOWN_COMMAND_NAMES for preprocessing safety
249
+
250
+ ## [0.41.1] - 2026-02-22
251
+
252
+ ### Fixed
253
+ - Include built-in help/version commands in KNOWN_COMMAND_NAMES for correct array option preprocessing
254
+
255
+ ## [0.41.0] - 2026-02-22
256
+
257
+ ### Changed
258
+ - Migrate ace-review-feedback CLI to standard help pattern (task 278.13)
259
+ - Remove DWIM default routing — no args now shows help instead of running list command
260
+
261
+ ## [0.40.5] - 2026-02-22
262
+
263
+ ### Fixed
264
+ - Migrate to standard help pattern with explicit `review` subcommand
265
+ - Remove DWIM default routing — no args now shows help instead of running review
266
+
267
+ ## [0.40.3] - 2026-02-22
268
+
269
+ ### Changed
270
+ - Migrate skill naming and invocation references to hyphenated `ace-*` format (no underscores).
271
+
272
+ ## [0.40.2] - 2026-02-19
273
+
274
+ ### Technical
275
+ - Namespace workflow instructions into review/ subdirectory with updated wfi:// URIs
276
+
277
+ ## [0.40.1] - 2026-02-19
278
+
279
+ ### Fixed
280
+ - Architecture-reflection preset diff range changed from `HEAD~1..HEAD` to `origin/main..HEAD` to capture all implementation commits
281
+
282
+ ## [0.40.0] - 2026-02-19
283
+
284
+ ### Added
285
+ - New `architecture-reflection` review preset for pre-PR self-assessment — combines ATOM compliance, over-engineering detection, and missing abstraction analysis
286
+ - New `reflection` focus prompt (`focus/architecture/reflection.md`) with refactor/accept/skip categorization output format
287
+
288
+ ### Fixed
289
+ - **Feedback extraction failures no longer silently swallowed**: When synthesis LLM call fails, error is now propagated to CLI output and response hash instead of being silently dropped
290
+ - **CLI reports feedback status**: Multi-model review output now shows feedback item count on success or error message on failure
291
+
292
+ ### Added
293
+ - **Fallback model support for feedback synthesis**: Configure `feedback.fallback_models` in config.yml to try alternative models when primary synthesis model fails
294
+ - Default fallback model `claude:glm` added to config
295
+
296
+ ## [0.39.3] - 2026-02-17
297
+
298
+ ### Changed
299
+ - Clarify review workflow execution guards to prevent premature follow-up actions:
300
+ - `review-pr.wf.md`: explicitly require process exit before feedback commands
301
+ - `review.wf.md`: explicitly require process exit before feedback commands
302
+ - Standardize timeout handling guidance for review workflows (10-minute timeout with stop-on-timeout behavior)
303
+ - Add explicit precondition + session-targeted feedback examples to reduce session ambiguity in feedback listing
304
+
305
+ ## [0.39.2] - 2026-02-16
306
+
307
+ ### Added
308
+ - **Phased review presets**: `code-valid` (correctness), `code-fit` (quality), `code-shine` (polish) for laser-focused review cycles
309
+ - **Backward-compatible** `code-deep` preset as composition of `code` with detailed format
310
+ - **Focus prompts**: `phase/correctness.md`, `phase/quality.md`, `phase/polish.md` with explicit scope and DO NOT Review sections
311
+ - Project-level preset configuration files for monorepo discovery
312
+
313
+ ### Changed
314
+ - **Multi-model reviewers**: All 3 phased presets use `claude:opus`, `codex:max`, `gemini:pro-latest`
315
+ - **Focus distribution**: All 6 focus modules from `code` preset distributed across the 3 phased presets (security→code-fit, tests+ruby→code-fit, docs→code-shine)
316
+
317
+ ## [0.38.1] - 2026-02-15
318
+
319
+ ### Changed
320
+ - **LlmExecutor**: Pass `sandbox: "read-only"` to `QueryInterface.query()` to enforce non-agentic mode for CLI providers during reviews
321
+
322
+ ## [0.38.0] - 2026-02-08
323
+
324
+ ### Added
325
+ - Unified feedback verification workflow with single `verify` command supporting three modes
326
+ - `--skip` option to `feedback verify` for marking items as skipped (correct but not fixing)
327
+ - Support for skipping both draft and pending status items (previously skip only worked on draft)
328
+ - Enhanced documentation with clear examples for when to use --valid, --invalid, or --skip
329
+ - Comprehensive test coverage for --skip mode and backward compatibility
330
+
331
+ ### Changed
332
+ - `FeedbackManager.verify()` now supports `skip:` mode in addition to `valid:` parameter
333
+ - `FeedbackManager.skip()` now delegates to `verify()` with `skip: true` (backward compatible)
334
+ - Enhanced verification workflow documentation with clear decision criteria
335
+ - Improved CLI help text with examples for each verification mode
336
+
337
+ ### Technical
338
+ - Added tests for skip mode transition from both draft and pending states
339
+ - Added tests for mutually exclusive validation in verify command
340
+ - Ensured backward compatibility for existing skip command usage
341
+
342
+ ### Changed
343
+ - Embed CLI help reference in apply-feedback and verify-feedback workflows via bundle frontmatter
344
+ - Agents now see exact flag syntax per subcommand (verify/resolve/skip) when workflows load
345
+
346
+ ## [0.37.3] - 2026-02-04
347
+
348
+ ### Added
349
+ - Priority range filtering with `+` suffix for `feedback list` command
350
+ - `--priority medium+` filters for medium, high, and critical items
351
+ - `--priority high+` filters for high and critical items
352
+ - New `PriorityFilter` atom for priority filtering logic
353
+
354
+ ## [0.37.2] - 2026-02-04
355
+
356
+ ### Added
357
+ - `SubjectFilter` molecule extracting file filtering logic from Reviewer model
358
+ - README documentation for Subject Strategy Configuration (strategy types, adaptive mode)
359
+ - README documentation for Reviewers Format (attributes, file patterns, migration)
360
+ - `ContextLimitResolver` integration with ace-llm provider config for context limits
361
+
362
+ ### Changed
363
+ - `Reviewer` model now delegates filtering to `SubjectFilter` molecule (ATOM architecture)
364
+
365
+ ### Technical
366
+ - Comprehensive tests for `SubjectFilter` molecule
367
+
368
+ ## [0.37.1] - 2026-02-04
369
+
370
+ ### Fixed
371
+ - Graceful error handling for preset composition failures (circular deps, missing refs)
372
+ - E2E test MT-REVIEW-001 preset data now includes required `instructions:` key
373
+ - E2E test MT-REVIEW-001 uses valid model provider format
374
+
375
+ ## [0.37.0] - 2026-02-04
376
+
377
+ ### Added
378
+ - Token estimation foundation with `TokenEstimator` (chars/4 heuristic) and `ContextLimitResolver`
379
+ - `DiffBoundaryFinder` atom for parsing unified diffs into file blocks
380
+ - Subject strategy system with `SubjectStrategy` factory and registry
381
+ - `FullStrategy` for complete subject pass-through when content fits context
382
+ - `ChunkedStrategy` for file-boundary diff splitting of large subjects
383
+ - `AdaptiveStrategy` for auto-selecting between Full/Chunked based on token estimate
384
+ - `Reviewer` entity model with configurable focus, file patterns, and prompt additions
385
+
386
+ ### Changed
387
+ - `FullStrategy` accepts `headroom` config option to customize context margin (aligns with `AdaptiveStrategy`)
388
+
389
+ ### Fixed
390
+ - GPT-4 variant handling for 32k and preview models (gpt-4-32k, gpt-4-NNNN)
391
+ - Extended diff header preservation during truncation (rename operations)
392
+ - Chunk edge cases with non-positive available tokens
393
+
394
+ ## [0.36.17] - 2026-02-04
395
+
396
+ ### Added
397
+ - `--session all` flag for `feedback list` to aggregate feedback from all sessions
398
+ - `find_all_sessions` helper in `SessionDiscovery` module
399
+ - SESSION column in table output when viewing all sessions
400
+ - `session` field in JSON output when using `--session all`
401
+
402
+ ## [0.36.16] - 2026-02-03
403
+
404
+ ### Added
405
+ - `SessionDiscovery` shared module for DRY session resolution across feedback CLI commands
406
+
407
+ ### Changed
408
+ - Refactored 6 feedback CLI commands to use shared `SessionDiscovery` module
409
+ - Updated CLI descriptions and error messages to remove obsolete `--task` references
410
+ - Added warn statement for lock file cleanup failures in `FeedbackFileWriter`
411
+
412
+ ### Removed
413
+ - 5 deprecated auto-save methods from `ReviewManager` (~150 lines of dead code):
414
+ - `save_multi_model_to_task`
415
+ - `auto_save_review_if_enabled`
416
+ - `auto_save_multi_model_reports`
417
+ - `auto_save_to_release`
418
+ - `save_to_task_if_requested`
419
+ - 11 deprecated auto-save tests (~270 lines)
420
+
421
+ ### Fixed
422
+ - Documentation referencing outdated `--no-synthesize` flag in README.md
423
+ - Documentation referencing removed `--task` flag in feedback-workflow.md
424
+
425
+ ## [0.36.15] - 2026-02-03
426
+
427
+ ### Added
428
+ - Feedback list shows archived count when no active items exist with helpful hint to use `--archived`
429
+ - Status-based sorting for feedback list: draft → pending → done → skip → invalid (then by ID)
430
+
431
+ ### Changed
432
+ - Feedback list summary now shows archived count hint when viewing active items only
433
+
434
+ ## [0.36.14] - 2026-02-03
435
+
436
+ ### Fixed
437
+ - Feedback CLI commands failing from subdirectories - now uses `ProjectRootFinder` for session discovery
438
+
439
+ ## [0.36.13] - 2026-02-03
440
+
441
+ ### Fixed
442
+ - Workflow documentation referencing removed `--task` CLI flag in session discovery
443
+
444
+ ### Changed
445
+ - Improved feedback categorization guide in review workflows with clearer skip/defer semantics
446
+
447
+ ## [0.36.12] - 2026-02-03
448
+
449
+ ### Fixed
450
+ - Non-unique feedback IDs when multiple items created in rapid succession within same millisecond
451
+
452
+ ### Added
453
+ - `FeedbackIdGenerator.generate_sequence(count)` for batch unique ID generation using `encode_sequence`
454
+
455
+ ### Changed
456
+ - `FeedbackSynthesizer.parse_synthesis_response` pre-generates unique sequential IDs for all findings
457
+ - `FeedbackSynthesizer.create_feedback_item` accepts optional `id:` keyword argument
458
+
459
+ ## [0.36.11] - 2026-02-03
460
+
461
+ ### Fixed
462
+ - Missing `feedback.synthesis_model` configuration in default config files
463
+
464
+ ## [0.36.10] - 2026-02-03
465
+
466
+ ### Fixed
467
+ - JSON parsing for Claude Opus responses that include text before JSON code fence
468
+ - `FeedbackSynthesizer.parse_synthesis_response` now handles "Based on my analysis..." preamble
469
+
470
+ ### Technical
471
+ - Extracted `extract_json_from_response` helper for robust JSON extraction from LLM responses
472
+ - Added test case for text-before-JSON-fence pattern
473
+
474
+ ## [0.36.9] - 2026-02-03
475
+
476
+ ### Removed
477
+ - `extraction_model` config option (legacy alias) - use `synthesis_model` only
478
+ - `extract-feedback.system.md` prompt - unified into `synthesize-feedback.system.md`
479
+
480
+ ### Changed
481
+ - Feedback model configuration simplified to single `synthesis_model` option
482
+ - `FeedbackSynthesizer.default_synthesis_model` cascade simplified to remove `extraction_model` fallback
483
+ - `ReviewManager.extract_feedback` cascade simplified to use `synthesis_model` only
484
+
485
+ ### Technical
486
+ - Removed ~140 lines of legacy prompt code
487
+ - Simplified configuration cascade - reduces confusion from duplicate config options
488
+
489
+ ## [0.36.8] - 2026-02-03
490
+
491
+ **BREAKING CHANGES**: Feedback CLI now session-scoped only (--task option removed)
492
+
493
+ ### Removed
494
+ - `FeedbackContextResolver` molecule - task-based path resolution no longer needed
495
+ - `--task` option from all feedback commands (create, list, show, verify, skip, resolve)
496
+
497
+ ### Changed
498
+ - **Feedback is now session-scoped only** - all commands use `--session` flag with latest session default
499
+ - Simplified path resolution across all feedback commands to use consistent session-based pattern
500
+ - Updated test helper to remove `with_context_resolver_stub` helper
501
+ - All feedback command tests updated to use `session:` option directly
502
+
503
+ ### Technical
504
+ - Removed ~546 lines of overengineered task-based resolution code
505
+ - Simplified feedback path resolution to: explicit session → latest session cache
506
+
507
+ ### Fixed
508
+ - Documentation drift: ID format updated from "10-char" to "8-char" in feedback-workflow.md
509
+ - Test base class violations: FeedbackFileWriter, FeedbackFileReader, FeedbackDirectoryManager tests now inherit from AceReviewTest
510
+ - Missing trailing newline in .ace-defaults/review/config.yml
511
+
512
+ ## [0.36.6] - 2026-02-03
513
+
514
+ ### Removed
515
+ - `FeedbackDeduplicator` atom - superseded by LLM-based deduplication in FeedbackSynthesizer
516
+ - `FeedbackExtractor` molecule - replaced by FeedbackSynthesizer which handles multi-report synthesis
517
+
518
+ ### Technical
519
+ - Removed ~600 lines of dead code and tests that were not used in the current feedback architecture
520
+
521
+ ## [0.36.5] - 2026-02-03
522
+
523
+ ### Added
524
+ - Prompt size warning before LLM execution - warns when prompt exceeds 80% of typical context window (~160K tokens)
525
+ - `--session` flag for `feedback list` command - allows explicit session directory path
526
+ - Documentation for session-scoped feedback context in workflow instructions
527
+
528
+ ### Fixed
529
+ - Lock file (.feedback.lock) now cleaned up after writes - prevents clutter in feedback directories
530
+
531
+ ### Technical
532
+ - Added LlmExecutor and MultiModelExecutor prompt size warning with formatted token count
533
+ - Updated FeedbackFileWriter with ensure block for lock file cleanup
534
+ - Added tests for prompt size warning, lock file cleanup, and --session flag
535
+
536
+ ## [0.36.4] - 2026-02-03
537
+
538
+ **BREAKING CHANGES**: Feedback-first architecture replaces synthesis-report.md output
539
+
540
+ ### Changed
541
+ - **Feedback is now the primary output** - synthesis-report.md has been removed entirely
542
+ - FeedbackIdGenerator now uses 8-char millisecond timestamp format (was 10-char with random suffix)
543
+ - `should_extract_feedback?` always returns true if results exist (no config toggle)
544
+ - Workflow instructions updated to use feedback commands instead of synthesis
545
+
546
+ ### Removed
547
+ - **ReportSynthesizer molecule** - no longer needed with feedback-first architecture
548
+ - `ace-review synthesize` CLI command removed
549
+ - `--synthesize`, `--no-synthesize`, `--synthesis-model` CLI flags removed
550
+ - `synthesis:` config section removed from config files
551
+ - `feedback.enabled` config removed (feedback always runs)
552
+ - `synthesize`, `no_synthesize`, `synthesis_model` options from ReviewOptions
553
+
554
+ ### Technical
555
+ - Updated review.wf.md and review-pr.wf.md with feedback verification workflow
556
+ - Simplified ReviewManager by removing synthesis-related methods
557
+ - Tests updated for new 8-char feedback IDs and removed synthesis tests
558
+
559
+ ## [0.36.3] - 2026-02-03
560
+
561
+ ### Fixed
562
+ - Synthesis now disabled by default (feedback files are primary output per task 227 spec)
563
+ - Added `--synthesize` flag to opt-in to synthesis-report.md generation
564
+ - Added explicit `feedback.enabled: true` default to config
565
+
566
+ ### Changed
567
+ - `should_synthesize?` now defaults to false, checks for --synthesize CLI flag
568
+ - ReviewOptions now includes :synthesize attribute
569
+
570
+ ### Technical
571
+ - Updated default config to clarify synthesis is opt-in
572
+
573
+ ## [0.36.2] - 2026-02-03
574
+
575
+ ### Added
576
+ - FeedbackSynthesizer molecule for multi-reviewer consensus analysis
577
+ - Support for multiple reviewers per FeedbackItem (reviewers array format)
578
+ - Consensus detection: marks items agreed upon by 3+ models
579
+ - Synthesize feedback prompt template at handbook/prompts/synthesize-feedback.system.md
580
+
581
+ ### Changed
582
+ - FeedbackItem now stores multiple reviewers with consensus flag
583
+ - FeedbackFileWriter handles new multi-reviewer format
584
+ - FeedbackManager integrates synthesis workflow
585
+ - ReviewManager adds synthesis step for multi-model reviews
586
+
587
+ ### Technical
588
+ - Added FeedbackSynthesizer with LLM-based consensus detection
589
+ - Updated tests for multi-reviewer workflow
590
+
591
+ ## [0.36.1] - 2026-02-03
592
+
593
+ ### Changed
594
+ - **Session Symlink Architecture**: Task reviews now symlink to session directories instead of copying files
595
+ - Multiple review sessions can be linked to the same task
596
+ - All session artifacts (prompts, metadata, feedback) accessible via symlink
597
+ - Feedback stays in session directory (gitignored via .cache)
598
+ - New methods: `link_session_to_task`, `link_session_to_task_if_requested`, `auto_link_session_if_enabled`
599
+ - Deprecated: `save_to_task_if_requested`, `save_multi_model_to_task`, `save_synthesis_to_task`
600
+
601
+ ### Technical
602
+ - Simplified `determine_feedback_path` to always return session directory
603
+ - Updated feedback-workflow.md documentation for symlink architecture
604
+
605
+ ## [0.36.0] - 2026-02-03
606
+
607
+ ### Added
608
+ - **Feedback System**: Replace monolithic synthesis reports with tracked feedback items
609
+ - `FeedbackItem` model with full lifecycle support (task 227.01)
610
+ - File I/O with atomic writes and locking (task 227.02)
611
+ - LLM-based feedback extraction with deduplication (task 227.03)
612
+ - `FeedbackManager` organism for lifecycle orchestration (task 227.04)
613
+ - Integration with review pipeline via `--no-feedback` flag (task 227.05)
614
+ - CLI commands: `feedback list`, `show`, `verify`, `skip`, `resolve` (task 227.06)
615
+ - Task integration with automatic directory creation (task 227.07)
616
+ - Single-model feedback extraction (previously only multi-model supported)
617
+ - Documentation at `docs/feedback-workflow.md` (task 227.08)
618
+
619
+ ### Fixed
620
+ - Use blocking lock for reliable concurrent feedback file access
621
+ - Expand branch pattern to match `task-` prefix for auto-save
622
+ - Merge files on deduplication instead of discarding
623
+ - Use `extraction_model` config key for consistency
624
+ - Use dynamic distance threshold for deduplication
625
+ - Use dedicated lock file for concurrent write coordination
626
+ - Add random suffix to FeedbackIdGenerator for uniqueness
627
+
628
+ ### Technical
629
+ - Update ID format documentation from 6-char to 10-char
630
+
631
+ ## [0.35.6] - 2026-02-02
632
+
633
+ ### Added
634
+
635
+ - Batch review preset for consolidated task evaluation
636
+ - Integration test for prompt path resolution
637
+
638
+ ### Changed
639
+
640
+ - Review workflows now default to "medium and higher" priority threshold for coworker automation
641
+ - Removed AskUserQuestion from review skill allowed-tools (no longer needed)
642
+ - Migrated integration tests to E2E format with consolidated DeepMerger
643
+
644
+ ### Fixed
645
+
646
+ - Guarantee 0 exit code for help requests
647
+
648
+ ## [0.35.5] - 2026-01-31
649
+
650
+ ### Performance
651
+
652
+ - Optimized test suite from 14.68s to 5.52s (62% reduction)
653
+ - Added `SharedTempDir` module for opt-in per-class temp directory sharing
654
+ - Reduces setup/teardown overhead from ~10ms per test to near-zero
655
+ - Test classes opt-in with `def self.use_shared_temp_dir?; true; end`
656
+
657
+ ### Changed
658
+
659
+ - Migrated 58 integration-style molecule tests to E2E format
660
+ - Created MT-REVIEW-004 (GitHub CLI integration) - 7 test cases
661
+ - Created MT-REVIEW-005 (multi-model executor) - 5 test cases
662
+ - Removed gh_cli_executor_test.rb (13 tests)
663
+ - Removed gh_pr_fetcher_test.rb (13 tests)
664
+ - Removed gh_pr_comment_fetcher_test.rb (19 tests)
665
+ - Removed multi_model_executor_test.rb (13 tests)
666
+
667
+ ## [0.35.4] - 2026-01-31
668
+
669
+ ### Refactored
670
+
671
+ - Consolidated `deep_merge_hash` utility into centralized `Ace::Support::Config::Atoms::DeepMerger`
672
+ - Removed duplicate implementations from `PresetManager` and `ReviewManager`
673
+ - Both now use `DeepMerger.merge(base, overlay, array_strategy: :union)`
674
+ - Improves maintainability and aligns with ATOM architecture (ADR-011)
675
+
676
+ ### Performance
677
+
678
+ - Moved 8 integration test files to E2E test suite
679
+ - Created MT-REVIEW-001 (preset composition), MT-REVIEW-002 (multi-subject), MT-REVIEW-003 (auto-save workflow)
680
+ - E2E tests run via `/ace:run-e2e-test ace-review MT-REVIEW-001`
681
+ - Test execution time reduced from 19.52s to ~13.5s (31% reduction)
682
+ - Remaining time due to legitimate timeout tests in molecules layer
683
+
684
+ ### Changed
685
+
686
+ - Removed integration test files (replaced by E2E tests):
687
+ - preset_composition_integration_test.rb (12 tests)
688
+ - multi_subject_integration_test.rb (8 tests)
689
+ - auto_save_integration_test.rb (E2E flow moved, unit tests covered elsewhere)
690
+ - preset_diff_integration_test.rb
691
+ - multi_model_cli_test.rb
692
+ - full_prompt_generation_test.rb
693
+ - pr_diff_generation_test.rb
694
+ - synthesis_test.rb
695
+
696
+ ## [0.35.3] - 2026-01-29
697
+
698
+ ### Fixed
699
+ - Multi-model executor hanging on slow CLI providers by adding timeout to Thread.join
700
+ - Added deadline-based join to ensure total wait is bounded regardless of stuck threads
701
+ - Suppressed IOError exceptions from killed threads for cleaner output
702
+ - Added warning display for threads killed after timeout
703
+
704
+ ## [0.35.2] - 2026-01-29
705
+
706
+ ### Added
707
+ - Enhanced review synthesis prompts with accuracy and conflict resolution guidelines
708
+ - Added "Verification Required" section for unverifiable model claims
709
+ - Added "Future Considerations" section to separate speculation from action items
710
+ - Added severity classification and scope boundary guidance to base review prompt
711
+
712
+ ### Fixed
713
+ - Exception-based CLI error handling for consistent exit codes
714
+
715
+ ## [0.35.1] - 2026-01-16
716
+
717
+ ### Changed
718
+ - Rename context: to bundle: keys in configuration files
719
+
720
+ ## [0.35.0] - 2026-01-15
721
+
722
+ ### Changed
723
+ - **Dependency Migration**: Replaced ace-context dependency with ace-bundle (~> 0.29)
724
+ - Updated gemspec dependency from `ace-context ~> 0.9` to `ace-bundle ~> 0.29`
725
+ - Updated all `require 'ace/context'` to `require 'ace/bundle'`
726
+ - Updated all `Ace::Context` references to `Ace::Bundle`
727
+ - Renamed `load_context_via_ace_context` to `load_context_via_ace_bundle`
728
+ - Renamed `ace_context_preset_exists?` to `ace_bundle_preset_exists?`
729
+ - Updated error messages and comments to reference ace-bundle
730
+
731
+ ### Technical
732
+ - Updated test helpers to stub Ace::Bundle instead of Ace::Context
733
+ - Updated all test files with ace-bundle references
734
+
735
+ ## [0.34.0] - 2026-01-14
736
+
737
+ ### Added
738
+ - Support for Gemini provider in all review presets
739
+ - Google Gemini 2.5 Flash as default model for code reviews
740
+
741
+ ### Changed
742
+ - Updated LLM executor to handle gemini provider configuration
743
+ - All review presets now use gemini:gemini-2.5-flash as default model
744
+
745
+ ## [0.33.2] - 2026-01-13
746
+
747
+ ### Fixed
748
+ - Fix multi-model option handling: store parsed models in `:models` key (array) instead of `:model` key
749
+ - Resolves issue where multi-model reviews failed due to incorrect option key usage
750
+
751
+ ### Changed
752
+ - Update dependencies: ace-support-nav (renamed from ace-nav), ace-support-config (renamed from ace-config)
753
+
754
+ ## [0.33.1] - 2026-01-09
755
+
756
+ ### Changed
757
+ - **BREAKING**: Eliminate wrapper pattern in dry-cli commands
758
+ - Merged business logic directly into `ListPresets`, `ListPrompts`, `Review`, and `Synthesize` dry-cli command classes
759
+ - Deleted `list_presets_command.rb`, `list_prompts_command.rb`, `review_command.rb`, and `synthesize_command.rb` wrapper files
760
+ - Simplified architecture by removing unnecessary delegation layer
761
+
762
+ ## [0.33.0] - 2026-01-07
763
+
764
+ ### Changed
765
+ - **BREAKING**: Migrated CLI framework from Thor to dry-cli (task 179.14)
766
+ - Replaced `thor` dependency with `dry-cli ~> 1.0`
767
+ - Converted CLI to dry-cli Registry pattern
768
+ - Created dry-cli command classes (list_presets, list_prompts, review, synthesize)
769
+
770
+ ## [0.32.1] - 2026-01-07
771
+
772
+ ### Added
773
+ - Support `commit:HASH` subject type for reviewing individual commits
774
+ - Accepts commit hashes with 6-40 hexadecimal characters
775
+ - Validates hash format before git operations
776
+ - Generates diff using `COMMIT~1..COMMIT` syntax to show commit's changes
777
+ - Provides clear error messages for invalid formats
778
+ - Updated documentation with usage examples
779
+
780
+ ## [0.32.0] - 2026-01-07
781
+
782
+ ### Changed
783
+ - **BREAKING**: Review report filenames changed from 14-character timestamps to 6-character Base36 compact IDs
784
+ - Example: `20251129-143000-model-preset-review.md` → `i50jj3-model-preset-review.md`
785
+ - Synthesis reports: `20251129-143000-synthesis.md` → `i50jj3-synthesis.md`
786
+ - Migrate to Base36 compact IDs for session directories (via ace-timestamp)
787
+
788
+ ### Added
789
+ - Dependency on ace-timestamp for compact ID generation
790
+
791
+ ## [0.31.1] - 2026-01-05
792
+
793
+ ### Technical
794
+ - Clarified subject type prefix requirement in workflow documentation with explicit warnings and common mistakes examples
795
+
796
+ ## [0.31.0] - 2026-01-05
797
+
798
+ ### Added
799
+ - Thor CLI migration with ConfigSummary display
800
+
801
+ ### Changed
802
+ - Adopted Ace::Core::CLI::Base for standardized options
803
+
804
+
805
+ ## [0.30.0] - 2026-01-03
806
+
807
+ ### Changed
808
+ - **BREAKING**: Minimum Ruby version raised to 3.3.0 (was 3.1.0)
809
+ - Standardized gemspec file patterns with deterministic Dir.glob
810
+ - Added MIT LICENSE file
811
+
812
+ ## [0.29.4] - 2026-01-03
813
+
814
+ ### Changed
815
+
816
+ - **Test performance optimization**: Reduced test suite execution time from 7.15s to 1.77s (75% reduction)
817
+ - Removed unnecessary git init from MultiModelCliTest (tests only parse CLI options)
818
+ - Added shared `stub_synthesizer_prompt_path` helper to avoid ace-nav subprocess calls (~150-400ms per call)
819
+ - Optimized `mock_llm_synthesis` to use block-based stubbing pattern for better isolation
820
+
821
+ ### Technical
822
+
823
+ - Extract shared prompt path stubbing to `AceReviewTest#stub_synthesizer_prompt_path`
824
+ - Include `Ace::TestSupport::Fixtures::PromptHelpers` mixin in test helper
825
+ - Remove unused `require "tmpdir"` from multi_model_cli_test.rb
826
+
827
+ ## [0.29.3] - 2026-01-01
828
+
829
+ ### Fixed
830
+
831
+ - **Configurable timeout for gh CLI operations**: `execute_simple` and `execute` methods now use configurable timeout from config instead of hardcoded values
832
+ - Added `gh_simple_timeout` config option (default: 10s) for simple commands like `--version`, `auth status`
833
+ - `execute` now reads `gh_timeout` from config (default: 30s) instead of hardcoded fallback
834
+ - Follows ADR-022 pattern with `Ace::Review.get("defaults", "key")` for config access
835
+
836
+ ## [0.29.2] - 2025-12-30
837
+
838
+ ### Changed
839
+
840
+ - Add ace-config dependency for configuration cascade management
841
+ - Migrate from Ace::Core to Ace::Config.create() API (keep ace-support-core for ProcessTerminator)
842
+ - Migrate from `resolve_for` to `resolve_namespace` for cleaner config loading
843
+
844
+ ## [0.29.1] - 2025-12-30
845
+
846
+ ### Changed
847
+
848
+ - **Workflow presentation format**: Improved review results presentation in `review.wf.md` and `review-pr.wf.md`
849
+ - Separate "No Action Needed" section (no numbering) for INVALID and VERIFIED CORRECT items
850
+ - Numbered "Action Items" table with priority column
851
+ - New priority threshold selection: All, Medium+, High+, Critical only
852
+ - Clearer categorization step (Step 5) before presentation
853
+
854
+ ## [0.29.0] - 2025-12-30
855
+
856
+ ### Changed
857
+
858
+ * Rename `.ace.example/` to `.ace-defaults/` for gem defaults directory
859
+
860
+
861
+ ## [0.28.0] - 2025-12-29
862
+
863
+ ### Changed
864
+ - Migrate file system operations from `Ace::Core::Molecules` to `Ace::Support::Fs::Molecules` for direct ace-support-fs usage
865
+
866
+ ## [0.27.2] - 2025-12-28
867
+
868
+ ### Added
869
+ - **Prioritize developer feedback in synthesis**: Human reviewer comments now receive special handling
870
+ - New "Developer Action Required" section appears before Consensus Findings
871
+ - Each unresolved comment gets its own subsection with exact text preserved
872
+ - Priority boosting ensures developer feedback is never ranked lower than Medium
873
+ - Added completeness requirements to prevent summarization of dev comments
874
+ - Added anti-patterns and verification checklist for developer feedback
875
+
876
+ ## [0.27.1] - 2025-12-28
877
+
878
+ ### Fixed
879
+ - **Auto-discover repo for inline PR comments**: When running `ace-review --pr <number>` (local PR number), inline code comments were silently not fetched because GraphQL requires owner/repo format. Now automatically discovers repository via `gh repo view --json owner,name`
880
+ - **Improved warning messages**: Upgraded warning messages from Debug to Warning level for better visibility when inline comments cannot be fetched
881
+
882
+ ## [0.27.0] - 2025-12-28
883
+
884
+ ### Added
885
+ - **ADR-022 Configuration Pattern**: Migrate to gem defaults from `.ace.example/` with user override support
886
+ - Load defaults from `.ace.example/review/config.yml` at runtime
887
+ - Deep merge with user config via ace-core cascade
888
+ - Follows "gem defaults < user config" priority
889
+
890
+ ### Fixed
891
+ - **Debug Check Consistency**: Standardized `debug?` method to use `== "1"` pattern (was `== "true"`)
892
+
893
+ ## [0.26.3] - 2025-12-27
894
+
895
+ ### Changed
896
+
897
+ - **Add verification step to review workflows**: New Step 3 in `review.wf.md` and `review-pr.wf.md` requires verifying Critical/High priority action items before presenting to user
898
+ - Categorize items as VALID/INVALID/EDGE CASE/SUGGESTION
899
+ - Filter out false positives from LLM reviewers
900
+ - Prevents wasted investigation time on non-issues
901
+
902
+ ## [0.26.2] - 2025-12-26
903
+
904
+ ### Technical
905
+
906
+ - Add timeout guidance for Claude Code agents in workflow instructions (10-minute timeout, inline mode)
907
+
908
+ ## [0.26.1] - 2025-12-26
909
+
910
+ ### Fixed
911
+
912
+ - **Complete ace-git migration in SubjectExtractor**: Replace remaining ace-context references with ace-git equivalents
913
+ - `Ace::Context::Atoms::GitExtractor.tracking_branch` → `Ace::Git::Molecules::BranchReader.tracking_branch`
914
+ - `Ace::Context::Atoms::PrIdentifierParser.parse` → `Ace::Git::Atoms::PrIdentifierParser.parse`
915
+ - Fixes `uninitialized constant` errors when using ace-review after ace-context v0.16 migration
916
+
917
+ ## [0.26.0] - 2025-12-26
918
+
919
+ ### Changed
920
+
921
+ - **Migrate to ace-git**: Replace duplicated Git/GitHub code with ace-git dependency
922
+ - Removed `Ace::Review::Molecules::GitBranchReader` - now uses `Ace::Git::Molecules::BranchReader`
923
+ - Removed `Ace::Review::Atoms::TaskAutoDetector` - now uses `Ace::Git::Atoms::TaskPatternExtractor`
924
+ - Removed `Ace::Review::Molecules::PrIdentifierParser` - now uses `Ace::Git::Atoms::PrIdentifierParser`
925
+ - Added `ace-git (~> 0.3)` as runtime dependency
926
+ - Eliminates code duplication and centralizes Git operations in ace-git package
927
+ - **Fail fast on ace-git load**: Remove defensive begin/rescue around ace-git require since it's a hard dependency
928
+
929
+ ### Fixed
930
+
931
+ - **GhCommentPoster fallback URL**: Fix URL construction when gh CLI output doesn't include URL
932
+ - Now correctly uses ace-git's combined `:repo` format (owner/repo) instead of legacy separate `:owner`/`:repo` keys
933
+
934
+ ### Removed
935
+
936
+ - Deleted `lib/ace/review/molecules/git_branch_reader.rb`
937
+ - Deleted `lib/ace/review/atoms/task_auto_detector.rb`
938
+ - Deleted `lib/ace/review/molecules/pr_identifier_parser.rb`
939
+ - Deleted corresponding test files
940
+ - Removed `ace-git-diff` dependency (functionality migrated to ace-git)
941
+
942
+ ### Added
943
+
944
+ - `mock_parse_result` test helper in test_helper.rb for consistent ParseResult mock creation
945
+ - Tests for GhCommentPoster.extract_comment_url fallback path scenarios
946
+
947
+ ## [0.25.0] - 2025-12-17
948
+
949
+ ### Added
950
+
951
+ * **Multiple `--subject` Flags**: Support combining multiple subject sources in a single review
952
+ * `ace-review --subject pr:77 --subject files:README.md --subject pr:79`
953
+ * Subjects are merged into unified ace-context config
954
+ * New `merge_typed_subject_configs()` public API for config merging
955
+
956
+ ### Fixed
957
+
958
+ * **Nested Hash Merging**: Fixed `deep_merge_arrays` to recursively merge nested hashes
959
+ * Two typed subjects like `diff:HEAD~3` and `diff:HEAD` now correctly merge their nested `context.diffs` arrays
960
+ * Made merge operation immutable (no longer mutates input hashes)
961
+
962
+ ### Changed
963
+
964
+ * **Simplified Subject Extraction**: Removed legacy content extraction paths
965
+ * Removed `extract(Array)` - arrays now handled via `merge_typed_subject_configs`
966
+ * Removed `extract_and_merge_multiple` - replaced by config passthrough
967
+ * Removed `subject-content.md` creation - all subjects use ace-context config passthrough
968
+ * Cleaner API: `parse_typed_subject_config` for single, `merge_typed_subject_configs` for multiple
969
+
970
+ ### Technical
971
+
972
+ * Removed 17 tests for deprecated array extraction functionality
973
+ * Added 8 tests for `merge_typed_subject_configs` merged config validation
974
+ * Cleaned up `:subjects` intermediate key in CLI options
975
+
976
+ ## [0.24.2] - 2025-12-16
977
+
978
+ ### Fixed
979
+
980
+ * **PR Subject Parsing**: Refined context diff detection and PR subject parsing for more reliable PR reviews
981
+ * Improved handling of PR references in subject configurations
982
+ * Better validation of PR references before fetching
983
+
984
+ ### Changed
985
+
986
+ * **ContentChecker Extraction**: Refactored diff merging logic into dedicated ContentChecker component
987
+ * Cleaner architecture for content validation
988
+ * Improved maintainability of review subject processing
989
+
990
+ ### Technical
991
+
992
+ * Added test coverage for PR and section processing features
993
+
994
+ ## [0.24.1] - 2025-12-16
995
+
996
+ ### Fixed
997
+ - **pr: Array Consistency**: Changed `pr:` typed subject to return array format (`{"pr" => ["77"]}`) for consistency with `diffs:` and `files:` which are always arrays
998
+
999
+ ## [0.24.0] - 2025-12-16
1000
+
1001
+ ### Added
1002
+ - **Subprocess Timeout Protection**: Added 10-second timeout to `ace-taskflow` subprocess in `task:` subject resolution
1003
+ - Prevents indefinite hangs when task lookup is stuck
1004
+ - New `CommandTimeoutError` provides clear error message with command and timeout details
1005
+ - Uses Ruby's `Timeout` module wrapping `Open3.capture3`
1006
+ - **Dual Extraction Paths Documentation**: Added class-level documentation to `SubjectExtractor` explaining the two code paths
1007
+ - Direct extraction via `extract()` for immediate content
1008
+ - Config passthrough via `parse_typed_subject_config()` for optimized ReviewManager flow
1009
+
1010
+ ### Fixed
1011
+ - **Comment Accuracy**: Updated misleading comment in `SubjectExtractor#use_ace_context`
1012
+ - Comment now correctly reflects that ace-context supports both flat keys and nested `context:` structure
1013
+
1014
+ ## [0.23.2] - 2025-12-14
1015
+
1016
+ ### Fixed
1017
+ - **Upstream bug fixes**: ace-llm dependency fixes benefit ace-review users
1018
+ - Zero-value generation parameters (`temperature: 0`) now preserved in MistralClient, AnthropicClient, GoogleClient
1019
+ - All LLM clients standardized with GENERATION_KEYS pattern for consistency
1020
+
1021
+ ## [0.23.1] - 2025-12-14
1022
+
1023
+ ### Changed
1024
+ - **Workflow Simplification**: Simplified `review.wf.md` to match `review-pr.wf.md` pattern with full cycle workflow (review → plan → confirm → implement)
1025
+
1026
+ ## [0.23.0] - 2025-12-08
1027
+
1028
+ ### Added
1029
+ - **PR Comment Developer Feedback**: Extract developer feedback from PR comments and inline review threads
1030
+ - New `--[no-]pr-comments` flag to control inclusion (default: true for `--pr` reviews)
1031
+ - Creates `review-dev-feedback.md` report alongside LLM reviews
1032
+ - Includes issue comments, review comments, and approval/change-request state
1033
+ - Integrated into synthesis reports when multi-model review is used
1034
+ - **GhCommentResolver**: New molecule to reply to PRs and resolve review threads
1035
+ - `reply` - Post comment with commit reference
1036
+ - `resolve_thread` - Resolve review threads via GitHub GraphQL API
1037
+ - `reply_and_resolve` - Combined operation for workflow automation
1038
+ - **Empty-Body Review Support**: Approvals and change-requests without body text now included with placeholder
1039
+
1040
+ ### Fixed
1041
+ - **Thread ID Validation**: Added format validation (`PRRT_xxx` pattern) to prevent GraphQL injection
1042
+ - **Markdown Table Safety**: Escape pipe characters in table preview to prevent broken rendering
1043
+
1044
+ ### Changed
1045
+ - **Pagination Warnings**: Warn when GraphQL results are truncated (>100 threads or >50 comments per thread)
1046
+ - **Comment Fetch Failure Logging**: Log warning instead of silent failure when PR comment fetch fails
1047
+ - **Table Readability**: Wrap IDs in backticks for improved readability in markdown tables
1048
+
1049
+ ### Documentation
1050
+ - **README Updated**: Document `--[no-]pr-comments` flag and developer feedback feature
1051
+ - **CLI Reference**: Added `--[no-]pr-comments` to GitHub PR options section
1052
+
1053
+ ## [0.22.0] - 2025-12-03
1054
+
1055
+ ### Added
1056
+ - **Auto-Save Feature**: Automatically save reviews to task directories based on git branch name
1057
+ - Enable with `auto_save: true` in config
1058
+ - Configurable branch patterns via `auto_save_branch_patterns`
1059
+ - Release directory fallback via `auto_save_release_fallback`
1060
+ - Disable per-command with `--no-auto-save` flag
1061
+ - **Multi-Model Auto-Save**: Individual model reports now saved to task directory (not just synthesis)
1062
+ - **Auto-Save Integration Tests**: Comprehensive test coverage for branch detection and task resolution
1063
+
1064
+ ### Fixed
1065
+ - **Multi-Model Auto-Save**: All model reports now saved to task directory, matching explicit `--task` behavior
1066
+
1067
+ ### Technical
1068
+ - Remove unused `project_root` variable in TaskReportSaver
1069
+ - Stabilize GitBranchReader tests with Open3 mocking and real detached HEAD test
1070
+
1071
+ ## [0.21.0] - 2025-12-03
1072
+
1073
+ ### Added
1074
+ - **Multi-Model Report Synthesis**: Automatically synthesize reviews from multiple LLM models
1075
+ - New `ace-review synthesize --session <dir>` standalone command
1076
+ - Auto-triggered after multi-model execution when 2+ models succeed
1077
+ - Identifies consensus findings, strong recommendations, unique insights, and conflicting views
1078
+ - Produces prioritized action items combining all model feedback
1079
+ - Configurable synthesis model via `--synthesis-model` or `synthesis.model` config
1080
+ - Disable with `--no-synthesize` flag or `synthesis.enabled: false` config
1081
+ - **ReportSynthesizer Molecule**: LLM-powered report consolidation with structured prompt
1082
+ - **Synthesis Prompt Template**: `handbook/prompts/synthesis-review-reports.system.md`
1083
+ - **E2E Integration Test**: Full test coverage for multi-model auto-synthesis flow
1084
+
1085
+ ### Changed
1086
+ - **Default Synthesis Model**: `claude:sonnet` (was `google:gemini-2.5-flash`)
1087
+
1088
+ ### Documentation
1089
+ - **Configuration Defaults**: Clarify gem defaults in README
1090
+ - Default preset is `code` (basic single-model review)
1091
+ - Default `auto_execute` is `false` (prompts for confirmation)
1092
+ - Projects can override in their `.ace/review/config.yml`
1093
+
1094
+ ## [0.20.6] - 2025-12-02
1095
+
1096
+ ### Fixed
1097
+ - **SlugGenerator**: Remove trailing hyphen after max_length truncation
1098
+
1099
+ ### Documentation
1100
+ - **Multi-Model Reviews**: Add section documenting CLI usage, preset config, and output structure
1101
+ - **Preset Resolution Chain**: Document preset lookup order (project → gem defaults)
1102
+
1103
+ ## [0.20.5] - 2025-12-02
1104
+
1105
+ ### Technical
1106
+ - Update documentation to use `code-pr` preset instead of deprecated `pr` preset
1107
+
1108
+ ## [0.20.4] - 2025-12-02
1109
+
1110
+ ### Added
1111
+ - **LLM Timeout**: Configurable timeout (default: 300s) to prevent indefinite hangs
1112
+ - Set via `defaults.llm_timeout` in config
1113
+ - **Model Name Validation**: CLI validates model names contain only safe characters
1114
+
1115
+ ### Fixed
1116
+ - **Example Config**: Default preset changed from 'pr' to 'code' (existing preset)
1117
+
1118
+ ## [0.20.3] - 2025-12-02
1119
+
1120
+ ### Fixed
1121
+ - **Config Loading**: Use correct `Ace::Core.get` API to load `.ace/review/config.yml`
1122
+ - Was using `Ace::Core.config.get("ace", "review")` which returned nil
1123
+ - Now `defaults.preset` and other settings are properly read from config
1124
+
1125
+ ## [0.20.2] - 2025-12-02
1126
+
1127
+ ### Changed
1128
+ - **Config-based Preset Default**: `defaults.preset` in config now used instead of hardcoded "pr" fallback
1129
+ - CLI `--preset NAME` overrides config default
1130
+ - Helpful error message when no preset specified and no config default set
1131
+
1132
+ ## [0.20.1] - 2025-12-02
1133
+
1134
+ ### Added
1135
+ - **Config-based Settings**: Move runtime options from ENV to config file
1136
+ - `max_concurrent_models` - configurable in `defaults` section
1137
+ - `auto_execute` - skip confirmation prompt when set to `true`
1138
+ - **Improved CLI Output**: Task directory output now shows directory once, then lists filenames
1139
+
1140
+ ### Changed
1141
+ - **Preset Consolidation**: Replace duplicated `pr.yml` with DRY `code-pr.yml` extending `code`
1142
+ - **Concurrency Guard**: Clamp `max_concurrent_models` to minimum 1 to prevent crashes
1143
+ - **Input Validation**: Filter blank entries from comma-separated model lists
1144
+
1145
+ ## [0.20.0] - 2025-12-02
1146
+
1147
+ ### Added
1148
+ - **Multi-Model Concurrent Execution**: Run code reviews against multiple LLM models simultaneously
1149
+ - New `--model` flag accepts comma-separated models or multiple flags (e.g., `--model claude:opus,gpro`)
1150
+ - Configurable concurrency via `ACE_REVIEW_MAX_CONCURRENT_MODELS` environment variable (default: 3)
1151
+ - Thread-safe parallel execution with progress indicators
1152
+ - Individual model failures don't stop other executions
1153
+ - Preset support via `models:` array in YAML configuration
1154
+
1155
+ ### Fixed
1156
+ - **Output File Handling**: Pass `output_file` parameter to LlmExecutor for correct file creation
1157
+ - **Effective Model Logic**: `effective_model` now respects `models` array for metadata and filenames
1158
+ - **Task Report Filenames**: Use full model slug in filenames to prevent overwrites when using same-provider models
1159
+ - **Task Path Propagation**: Fix result key from `:task_path` to `:path` so saved locations surface in CLI output
1160
+
1161
+ ## [0.19.2] - 2025-12-01
1162
+
1163
+ ### Fixed
1164
+ - **Task Integration Fixes**: Multiple fixes to ensure `--task` flag works correctly
1165
+ - Add missing `require` for `ace/taskflow/organisms/task_manager` in TaskResolver
1166
+ - Pass actual review file path to TaskReportSaver instead of session directory
1167
+ - Add defensive guard for nil/empty `task[:path]` to prevent crashes
1168
+
1169
+ ### Changed
1170
+ - **Test Consistency**: Refactored TaskResolver tests to use `Minitest::Mock` consistently
1171
+
1172
+ ## [0.19.1] - 2025-11-29
1173
+
1174
+ ### Fixed
1175
+ - Fix PR diff generation to use actual PR content instead of origin...HEAD when using `--pr` flag with presets
1176
+ - Remove problematic default subject from `code-pr.yml` preset that contained `origin...HEAD`
1177
+ - Add comprehensive integration tests for PR diff generation behavior
1178
+
1179
+ ## [0.19.0] - 2025-11-27
1180
+
1181
+ ### Added
1182
+ - **Specification Review Focus**: New `scope/spec` focus for reviewing specifications and proposals
1183
+ - Goal clarity validation (single objective, no ambiguous terms, clear success criteria)
1184
+ - Usage expectations analysis (target audience, scenarios, inputs/outputs)
1185
+ - Test strategy evaluation (testable criteria, edge cases, validation approach)
1186
+ - Completeness checking (required sections, dependencies, assumptions)
1187
+ - Implementation feasibility assessment (achievable requirements, realistic estimates)
1188
+ - Consistency and traceability verification
1189
+ - **Spec Preset**: New `spec.yml` preset for specification reviews
1190
+ - Default subject: `origin/main...HEAD` filtered to `**/*.s.md` (task specs)
1191
+ - Combines spec focus with standard format and tone guidelines
1192
+
1193
+ ## [0.18.0] - 2025-11-17
1194
+
1195
+ ### Added
1196
+ - **GitHub Pull Request Review Mode**: Support for reviewing GitHub pull requests directly
1197
+ - New `--pr` option to specify pull request identifier (number, URL, or owner/repo#number)
1198
+ - `--post-comment` option to automatically post review as GitHub comment (requires `gh` CLI)
1199
+ - `--dry-run` option to preview comment without posting
1200
+ - Multiple PR identifier formats supported: `123`, `https://github.com/owner/repo/pull/123`, `owner/repo#123`
1201
+ - Automatic repository detection from git remote when using PR number only
1202
+ - Comprehensive error handling for authentication, network issues, and PR state
1203
+ - Retry logic with exponential backoff (capped at 32 seconds) for network resilience
1204
+ - PR state validation (prevents posting to closed/merged PRs)
1205
+ - Rich PR metadata included in review context (title, author, branch names, state)
1206
+ - Secure comment posting via tempfiles (prevents command injection)
1207
+ - Review cache saved to `.cache/ace-review/sessions/review-{timestamp}/`
1208
+ - **New Molecules**:
1209
+ - `GhCliExecutor`: Safe execution of GitHub CLI commands with timeout and error handling
1210
+ - `PrIdentifierParser`: Parse and normalize PR identifiers to owner/repo/number format
1211
+ - `GhPrFetcher`: Fetch PR diffs and metadata with retry logic
1212
+ - `GhCommentPoster`: Post review comments to GitHub with dry-run support
1213
+ - **New Atoms**:
1214
+ - `RetryWithBackoff`: Reusable retry logic with exponential backoff for operations with transient failures
1215
+ - **New Error Classes**: Specific errors for GitHub integration (`GhCliNotInstalledError`, `GhAuthenticationError`, `PrNotFoundError`, `PrStateError`, `GhNetworkError`)
1216
+ - **CLI Options**:
1217
+ - `--gh-timeout <seconds>`: Configure timeout for GitHub CLI operations (default: 30 seconds)
1218
+ - **Markdown Sanitization**: LLM review output is now sanitized and wrapped in collapsible `<details>` tags
1219
+ - Automatically closes unclosed code fences to prevent broken GitHub comment rendering
1220
+ - Wraps review content in expandable section for better PR comment readability
1221
+ - **README Documentation**: Comprehensive guide for GitHub PR review mode with examples, timeout configuration, and troubleshooting
1222
+
1223
+ ### Changed
1224
+ - **Default Timeout**: Reduced default timeout for GitHub CLI operations from 600 seconds (10 minutes) to 30 seconds
1225
+ - Provides faster failure feedback for network issues
1226
+ - Users can override with `--gh-timeout` option for large PRs or slow connections
1227
+ - **Retry Logic Architecture**: Extracted retry logic from `GhPrFetcher` into reusable `RetryWithBackoff` atom
1228
+ - Improves testability and code reusability
1229
+ - Cleaner separation of concerns following ATOM architecture
1230
+
1231
+ ### Fixed
1232
+ - **Architectural Compliance**: Moved `GhCliExecutor` from `atoms/` to `molecules/` to properly reflect its side effects (shell command execution)
1233
+ - **Test Coverage**: Uncommented and fixed previously failing tests in `gh_pr_fetcher_test.rb`
1234
+ - Fixed complex mocking chain issues by extracting retry logic into testable atom
1235
+ - All failure path and retry exhaustion tests now pass
1236
+
1237
+ ## [0.17.0] - 2025-11-17
1238
+
1239
+ ### Added
1240
+ - **Task Integration**: New `--task` flag to save review reports to task directories
1241
+ - Accepts task references in multiple formats: `114`, `task.114`, `v.0.9.0+114`
1242
+ - Reports saved to `<task-dir>/reviews/` with timestamped filenames
1243
+ - Filename format: `YYYYMMDD-HHMMSS-{provider}-{preset}-review.md`
1244
+ - Graceful degradation when ace-taskflow unavailable or task not found
1245
+ - Created `TaskResolver` molecule for task reference resolution
1246
+ - Created `TaskReportSaver` molecule for report persistence
1247
+ - Updated `ReviewManager` organism to orchestrate task-aware saving
1248
+ - Added ace-taskflow ~> 0.19 as runtime dependency
1249
+
1250
+ ## [0.16.1] - 2025-11-15
1251
+
1252
+ ### Fixed
1253
+ - **Git Worktree Cache Path Resolution**: Fixed cache directory creation to use project root instead of current working directory
1254
+ - Resolves issue where caches were created in deeply nested, incorrect paths in git worktrees (e.g., `/path/.ace-wt/task.094/ace-context/.cache/ace-review/sessions/`)
1255
+ - Modified `ReviewManager#create_cache_directory` to use `Ace::Core::Molecules::ProjectRootFinder.find_or_current`
1256
+ - Added `require "ace/core/molecules/project_root_finder"` to review_manager.rb
1257
+ - Each worktree now maintains its own cache at `.cache/ace-review/sessions/` relative to worktree root
1258
+ - Updated tests to expect cache at project root location
1259
+ - All 161 ace-review tests pass with no breaking changes to main repo usage
1260
+ - Transparent fix - tool "just works" in worktrees without user configuration
1261
+
1262
+ ### Changed
1263
+ - **Dependencies**: Updated to use ace-support-core ~> 0.10.1 for worktree support
1264
+
1265
+ ## [0.16.0] - 2025-11-13
1266
+
1267
+ ### Added
1268
+ - **Preset Composition**: Support for composing review presets from reusable base configurations
1269
+ - New `presets:` array at root level for preset composition
1270
+ - Recursive preset loading with circular dependency detection (max depth: 10)
1271
+ - Smart merging strategies: arrays concatenate+deduplicate, hashes deep merge, scalars last-wins
1272
+ - **Composition order**: Base presets are loaded first, then the composing preset (last wins for scalars)
1273
+ - Full backward compatibility - existing presets without `presets:` key continue to work unchanged
1274
+ - New `PresetValidator` atom for validation and circular dependency detection
1275
+ - Preset name validation (prevents path traversal, enforces length limits)
1276
+ - Enhanced `PresetManager` molecule with `load_preset_with_composition` method
1277
+ - Comprehensive test coverage: 23 validator tests, 22 manager composition tests, 11 integration tests
1278
+ - **Example Preset Refactoring**: New DRY preset structure
1279
+ - `code.yml` base preset with common review instructions
1280
+ - `code-pr.yml` composed preset for pull request reviews
1281
+ - `code-wip.yml` composed preset for work-in-progress reviews
1282
+
1283
+ ### Changed
1284
+ - **PresetManager**: Enhanced to support preset composition while maintaining backward compatibility
1285
+ - Recursive loading with visited set tracking
1286
+ - Deep merge support for nested hash structures
1287
+ - Array deduplication during composition
1288
+ - Intermediate caching prevents redundant composition (particularly beneficial for deeply nested presets)
1289
+ - Standardized internal metadata format (string keys for consistency)
1290
+ - Deep metadata stripping from nested structures
1291
+ - Added `strip_composition_metadata` helper method for DRY code
1292
+ - Performance instrumentation with debug mode support
1293
+
1294
+ ### Technical
1295
+ - Integrated test suite performance optimizations from v0.15.1
1296
+ - Updated test patterns to match new test helper structure
1297
+ - All 56 tests passing (23 validator + 22 manager + 11 integration)
1298
+
1299
+ ## [0.15.1] - 2025-11-11
1300
+
1301
+ ### Technical
1302
+ - Optimize test suite performance with mocking (2.2x faster, 2.03s → 0.93s)
1303
+ - Add `Ace::Context.load_auto()` mocking in test_helper
1304
+ - Add `GitExtractor` mocking (staged_diff, working_diff, tracking_branch)
1305
+ - Remove real git operations from integration tests
1306
+ - Fix test issues (super calls, initialization timing, assertions)
1307
+ - All 108 tests passing (16 atoms + 53 molecules + 29 organisms + 10 integration)
1308
+
1309
+ ## [0.15.0] - 2025-11-10
1310
+
1311
+ ### Added
1312
+ - **Section-Based Content Organization**: Support for `instructions.context.sections` format
1313
+ - Integration with ace-context v0.17.5+ section-based content organization
1314
+ - Structured organization of review content into semantic sections (focus, style, diff, etc.)
1315
+ - All built-in presets (pr, code, security, docs, performance, ruby-atom, agents, test) now use sections
1316
+ - PresetManager enhanced to preserve `instructions` field through resolution chain
1317
+ - New format detection helper for automatic backward compatibility
1318
+
1319
+ ### Changed
1320
+ - **ReviewManager**: Enhanced to support both legacy `system_prompt` and new `instructions` formats
1321
+ - Automatic format detection ensures seamless migration
1322
+ - New `create_system_context_file_with_instructions()` method for section-based contexts
1323
+ - Full backward compatibility maintained for existing user presets
1324
+ - **CLI Output**: Updated to properly display system and user prompt file paths
1325
+ - Shows both `system.prompt.md` and `user.prompt.md` file paths
1326
+ - Provides correct `ace-llm query` command with `--file` and `--context` parameters
1327
+ - Maintains backward compatibility with legacy `prompt_file` format
1328
+
1329
+ ### Documentation
1330
+ - **README.md**: Added comprehensive documentation for new section-based format
1331
+ - Examples of `instructions` format with section organization
1332
+ - Legacy format documentation for backward compatibility
1333
+ - Migration guidance and best practices
1334
+
1335
+ ### Testing
1336
+ - **Comprehensive Test Coverage**: Added 6 new test methods for section-based functionality
1337
+ - Format detection validation
1338
+ - Section-based context file creation
1339
+ - Integration testing for both formats
1340
+ - Backward compatibility verification
1341
+ - All tests passing with 100% success rate
1342
+
1343
+ ## [0.14.0] - 2025-11-05
1344
+
1345
+ ### 🚀 **Major Performance Upgrade - Ruby API Migration & Context Fix**
1346
+
1347
+ ### Changed
1348
+ - **Architecture**: Complete migration from CLI subprocess to Ruby API calls
1349
+ - Replaced `ace-llm-query` subprocess calls with direct `Ace::LLM::QueryInterface.query()` calls
1350
+ - Eliminated all temp file creation and subprocess overhead
1351
+ - Achieved 98-99% reduction in LLM call latency (70-135ms → 1-2ms)
1352
+
1353
+ ### Added
1354
+ - **Ruby API Integration**: Direct ace-llm Ruby library usage
1355
+ - No more temp file management for prompts
1356
+ - Rich response metadata (usage stats, model info, provider details)
1357
+ - Structured exception-based error handling
1358
+ - Enhanced session files with `llm_metadata.yml`
1359
+
1360
+ - **Performance Benefits**:
1361
+ - Eliminated process spawning overhead
1362
+ - Removed shell interpretation delays
1363
+ - Native Ruby object handling (no JSON parsing)
1364
+ - Direct method calls with immediate response
1365
+
1366
+ - **Enhanced Error Handling**:
1367
+ - Specific exception types (`Ace::LLM::Error`, `Ace::LLM::ProviderError`, etc.)
1368
+ - Structured error responses with error categorization
1369
+ - Better debugging information with error types
1370
+ - Graceful handling of API vs CLI availability
1371
+
1372
+ - **Rich Metadata**:
1373
+ - Token usage information (`usage` field)
1374
+ - Model information and provider details
1375
+ - Response timing and metadata
1376
+ - Session persistence of LLM interaction data
1377
+
1378
+ ### Technical
1379
+ - **Dependency**: Added `ace-llm (~> 0.1)` runtime dependency
1380
+ - **API Compatibility**: Maintains identical external interface
1381
+ - **Backward Compatibility**: All existing CLI options and workflows unchanged
1382
+ - **Error Recovery**: Enhanced error messages and recovery paths
1383
+
1384
+ ### Fixed
1385
+ - **Context Generation Bug**: Fixed empty user.context.md files that had no subject configuration
1386
+ - Updated `create_user_context_file` method to properly handle subject configuration fallbacks
1387
+ - Eliminated redundant subject.md file creation (subject now handled via ace-context workflow)
1388
+ - Enhanced configuration flow: explicit config → preset config → default "staged" configuration
1389
+ - Improved handling of file paths, preset shortcuts, and structured configurations
1390
+
1391
+ ### Performance
1392
+ - **98-99% faster** LLM calls
1393
+ - **Zero temp file overhead**
1394
+ - **Direct Ruby object responses**
1395
+ - **Immediate availability** of results and metadata
1396
+
1397
+ ### Technical
1398
+ - **Streamlined Session Structure**: Removed subject.md and context.md files, now using ace-context workflow
1399
+ - **Enhanced Configuration Handling**: Better fallback logic for subject configuration processing
1400
+ - **Updated Tests**: Modified test expectations to match new v0.14.0 session structure
1401
+
1402
+ ## [0.13.1] - 2025-11-05
1403
+
1404
+ ### Fixed
1405
+ - **Implementation Gap**: Actually completed the v0.13.0 architectural changes that were documented but not fully implemented
1406
+ - **Removed Legacy Code**: Eliminated all prompt splitting logic and fallback methods as claimed in v0.13.0 CHANGELOG
1407
+ - **Updated Tests**: Fixed test expectations to match new architecture and removed tests for removed methods
1408
+ - **File Structure**: Corrected session file naming to use `system.prompt.md` and `user.prompt.md`
1409
+ - **CLI Integration**: Fixed `undefined method 'subject_config'` error in ReviewManager parameter naming
1410
+ - **ace-llm-query Interface**: Updated to use correct `--system` and `--prompt` flags instead of non-existent `--user` flag
1411
+
1412
+ ### Technical
1413
+ - **Code Cleanup**: Removed 214 lines of legacy code while maintaining functionality
1414
+ - **Syntax Validation**: All Ruby files now pass syntax validation
1415
+ - **Architecture Alignment**: Implementation now matches documented CHANGELOG claims
1416
+
1417
+ ## [0.13.0] - 2025-11-05
1418
+
1419
+ ### 🎯 **Major Architecture Fix - System/User Prompt Separation**
1420
+
1421
+ ### Changed
1422
+ - **Architecture**: Complete overhaul of prompt generation and processing
1423
+ - Removed arbitrary prompt splitting (`split_and_save_prompts` method)
1424
+ - Removed combined prompt generation (`build_review_prompt` method)
1425
+ - Implemented proper ace-context integration throughout
1426
+ - Fixed fundamental misunderstanding of system vs user prompts
1427
+
1428
+ ### Added
1429
+ - **System Prompt Generation**:
1430
+ - Creates `system.context.md` with YAML frontmatter containing prompt:// references
1431
+ - Integrates context configuration (e.g., "project" → presets: ["project"])
1432
+ - Uses ace-context to generate `system.prompt.md`
1433
+ - Proper base system instructions included after frontmatter
1434
+
1435
+ - **User Prompt Generation**:
1436
+ - Creates `user.context.md` with subject configuration
1437
+ - Supports commands, files, diffs, and inline content from presets
1438
+ - Uses ace-context to generate `user.prompt.md`
1439
+ - Handles all subject types from preset configurations
1440
+
1441
+ - **LLM Integration**:
1442
+ - LlmExecutor requires separate system and user prompts
1443
+ - New format: `--system-prompt` and `--user-prompt` flags via ace-llm-query
1444
+ - Removed legacy single prompt support for cleaner architecture
1445
+
1446
+ - **Session Structure**:
1447
+ ```
1448
+ session/
1449
+ ├── system.context.md # ace-context input (system prompt config)
1450
+ ├── system.prompt.md # ace-context output (generated system prompt)
1451
+ ├── user.context.md # ace-context input (user prompt config)
1452
+ ├── user.prompt.md # ace-context output (generated user prompt)
1453
+ ├── subject.md # Extracted subject content
1454
+ ├── context.md # Legacy context content
1455
+ ├── metadata.yml # Session metadata
1456
+ └── review.md # LLM output
1457
+ ```
1458
+
1459
+ ### Fixed
1460
+ - **Configuration Structure**: Renamed `prompt_composition` → `system_prompt` in all preset configs
1461
+ - **Preset Parsing**: Updated all preset parsing logic to use new structure
1462
+ - **Backward Compatibility**: All existing preset configurations continue to work unchanged
1463
+ - **Ruby Syntax**: All syntax errors resolved and code validated
1464
+
1465
+ ### Technical
1466
+ - **YAML Frontmatter**: Follows ace-context patterns exactly with proper context structure
1467
+ - **Error Handling**: Comprehensive fallback mechanisms for ace-context failures
1468
+ - **Cache Management**: Enhanced cache-first storage model with proper file organization
1469
+ - **Token Optimization**: Potential to reduce token usage through ace-context processing
1470
+
1471
+ ### Breaking Changes
1472
+ - **LlmExecutor API**: Removed legacy single prompt support, now requires system_prompt and user_prompt parameters
1473
+ - **ReviewManager**: Removed fallback prompt generation methods, ace-context is now required
1474
+ - **Session Structure**: Updated file naming from legacy `prompt.md` to `system.prompt.md` and `user.prompt.md`
1475
+
1476
+ ## [0.12.0] - 2025-11-05
1477
+
1478
+ ### Added
1479
+ - **Context.md Pattern**: Adopt ace-docs context.md pattern for improved reproducibility
1480
+ - ContextComposer molecule generates context.md with YAML frontmatter
1481
+ - ContextExtractor delegates to ContextComposer for ace-context integration
1482
+ - Cache-first storage with `.cache/ace-review/sessions/` directory
1483
+ - Context.md files saved with embedded files and ace-context configuration
1484
+
1485
+ ### Changed
1486
+ - **Storage Model**: Implement cache-first storage approach
1487
+ - Working files stored in cache directory instead of release folder
1488
+ - Final reports copied to release folder `.ace-taskflow/v.*/reviews/`
1489
+ - Removed `.tmp` extensions from all session files
1490
+ - Split prompts into `prompt-system.md` and `prompt-user.md` files
1491
+
1492
+ ### Enhanced
1493
+ - **Ace-Context Integration**: Full integration with ace-context via `load_file_as_preset()`
1494
+ - Follows ace-docs pattern exactly for consistency
1495
+ - Support for presets, files, diffs, and commands in YAML frontmatter
1496
+ - Fail-fast error handling with clear error messages
1497
+ - Backward compatible CLI interface
1498
+
1499
+ ### Technical
1500
+ - **ContextComposer**: New molecule for context.md generation
1501
+ - **ReviewManager**: Updated with cache-first storage and prompt splitting
1502
+ - **ContextExtractor**: Refactored to delegate to ContextComposer
1503
+ - **Comprehensive Tests**: Added test coverage for all new functionality
1504
+ - **Backward Compatibility**: All existing presets work without modification
1505
+
1506
+ ## [0.11.2] - 2025-11-01
1507
+
1508
+ ### Changed
1509
+
1510
+ - **Dependency Migration**: Updated to use renamed infrastructure gems
1511
+ - Changed dependency from `ace-core` to `ace-support-core`
1512
+ - Changed dependency from `ace-test-support`
1513
+ - Part of ecosystem-wide naming convention alignment for infrastructure gems
1514
+
1515
+ ## [0.11.1]
1516
+ - 2025-10-24
1517
+
1518
+ ### Fixed
1519
+ - Address PR #3 review issues for ace-git-diff integration
1520
+
1521
+ ### Technical
1522
+ - Standardize diff/diffs API documentation to ace-git-diff format
1523
+ - Add comprehensive integration and unit tests
1524
+ - Update all presets and workflow instructions with standardized diff format
1525
+
1526
+ ## [0.11.0] - 2025-10-23
1527
+
1528
+ ### Changed
1529
+ - Integrated with ace-git-diff for unified diff operations
1530
+ - SubjectExtractor now handles new diff: format with ranges
1531
+ - All example presets updated to use diff: key instead of commands:
1532
+ - Added ace-git-diff (~> 0.1.0) as runtime dependency
1533
+ - Delegates to ace-context which now uses ace-git-diff
1534
+
1535
+ ### Technical
1536
+ - Maintains backward compatibility with old diff: string format
1537
+ - Supports both diff: { ranges: [...] } and legacy diff: "range" formats
1538
+
1539
+ ## [0.10.0] - 2025-10-14
1540
+
1541
+ ### Added
1542
+ - Standardize Rakefile test commands and add CI fallback
1543
+
1544
+ ### Technical
1545
+ - Add proper frontmatter with git dates to all managed documents
1546
+
1547
+ ## [0.9.9] - 2025-10-08
1548
+
1549
+ ### Changed
1550
+
1551
+ - **Test Structure Migration**: Migrated to flat ATOM structure
1552
+ - From: `test/ace/review/molecules/`
1553
+ - To: `test/molecules/`
1554
+ - Aligns with standardized test organization across all ACE packages
1555
+
1556
+ ## [0.9.8] - 2025-10-07
1557
+
1558
+ ### Changed
1559
+
1560
+ - **Workflow documentation updated** for ace-context v0.9.6+ integration
1561
+ - Updated `review.wf.md` to reflect unified YAML schema
1562
+ - Removed references to deprecated `patterns:` key
1563
+ - Added comprehensive configuration schema section documenting `files:`, `diffs:`, `commands:`, `presets:`
1564
+ - Enhanced common scenarios with file-based review examples
1565
+ - Added "Review Specific Files" and "Compose Multiple Sources" scenarios
1566
+ - Improved troubleshooting section with "No code to review" → use `files:` guidance
1567
+ - Updated preset file examples to show proper YAML structure
1568
+ - Added simple string shortcuts documentation (staged, working, pr)
1569
+ - Updated all command examples to use correct YAML keys
1570
+
1571
+ ## [0.9.7] - 2025-10-07
1572
+
1573
+ ### Fixed
1574
+
1575
+ - **ace-llm-query integration**: Fixed command construction to work with updated ace-llm-query API
1576
+ - Replaced non-existent `--file` flag with new `--prompt` flag (added in ace-llm v0.9.1)
1577
+ - Added proper PROVIDER:MODEL positional argument as first parameter
1578
+ - Added `--output` flag to save review reports directly to session directory
1579
+ - Added `--timeout 600` for 10-minute timeout on long reviews
1580
+ - Added `--format markdown` for consistent markdown output
1581
+ - Output filename now uses model short name: `review-report-{model-short}.md`
1582
+ - Example: `review-report-gemini-2.5-flash.md` for model `google:gemini-2.5-flash`
1583
+
1584
+ ### Changed
1585
+
1586
+ - **LlmExecutor API**: Updated `execute` method to require `session_dir:` parameter
1587
+ - Enables direct file output to session directory
1588
+ - Returns `output_file` path in result hash
1589
+ - **ReviewManager**: Updated to pass `session_dir` to LlmExecutor
1590
+ - Simplified result handling (no longer needs to save output separately)
1591
+
1592
+ ## [0.9.6] - 2025-10-06
1593
+
1594
+ ### Changed
1595
+
1596
+ - **ace-context integration**: Refactored to use ace-context for unified content aggregation
1597
+ - `SubjectExtractor` now delegates to `Ace::Context.load_auto` for all content extraction
1598
+ - `ContextExtractor` now delegates to `Ace::Context.load_auto` for all content extraction
1599
+ - Preserved special behaviors (staged/working/pr keywords, project context defaults)
1600
+ - Eliminated duplicated file reading, command execution, and git extraction logic
1601
+
1602
+ ### Added
1603
+
1604
+ - **ace-context dependency**: Added `ace-context ~> 0.9` as runtime dependency
1605
+ - **Enhanced composition**: Can now combine files + commands + diffs + presets in unified configs
1606
+ - **Preset support in context**: `presets:` key now functional in context configuration
1607
+ - **Diffs support**: New `diffs:` key supported in subject and context configs
1608
+
1609
+ ### Removed
1610
+
1611
+ - **Redundant atoms**: Deleted `git_extractor.rb` and `file_reader.rb` (now in ace-context)
1612
+ - **Duplicated logic**: All content extraction now centralized in ace-context
1613
+
1614
+ ## [0.9.5] - 2025-10-06
1615
+
1616
+ ### Changed
1617
+
1618
+ - **Workflow command renamed**: `review-code.wf.md` → `review.wf.md`
1619
+ - Claude command changed from `/ace:review-code` to `/ace:review` for simplicity
1620
+ - Updated workflow invocation from `wfi://review-code` to `wfi://review`
1621
+
1622
+ ### Fixed
1623
+
1624
+ - **Storage path detection**: Removed hardcoded storage defaults that prevented smart detection
1625
+ - `storage_config` now only checks user config, not module defaults
1626
+ - Properly implements 3-tier priority: user config → ace-taskflow → cache directory
1627
+ - Fallback path changed from `./reviews` to `.cache/ace-review/sessions/`
1628
+ - **LLM command execution**: Fixed remaining `ace-llm` command reference in `llm_executor.rb`
1629
+ - Changed from `ace-llm query` to direct `ace-llm-query` invocation
1630
+ - Renamed method from `execute_ace_llm` to `execute_ace_llm_query` for clarity
1631
+ - **Configuration comments**: Updated config file comments to reflect correct detection order
1632
+
1633
+ ## [0.9.4] - 2025-10-05
1634
+
1635
+ ### Changed
1636
+
1637
+ - **Dynamic storage path**: Storage now defaults to `$(ace-taskflow release --path reviews)`
1638
+ - Falls back to `./reviews` if ace-taskflow not available
1639
+ - Config `storage.base_path` commented out by default, uses smart detection
1640
+ - User can still override by uncommenting and setting custom path
1641
+ - **Review file organization**: All review files now stored together with `.tmp` pattern
1642
+ - Session files in `{release_path}/reviews/review-{timestamp}/`
1643
+ - Temporary files use `.tmp` extension: `prompt.md.tmp`, `subject.md.tmp`, `context.md.tmp`
1644
+ - Committable files: `metadata.yml`, `review.md`
1645
+ - Gitignore pattern changed from `.ace-review-sessions/` to `**/*.tmp`
1646
+ - **Command detection**: Binary check updated from `ace-llm` to `ace-llm-query`
1647
+ - Error message now correctly references `ace-llm-query`
1648
+
1649
+ ### Fixed
1650
+
1651
+ - Review sessions no longer create separate `.ace-review-sessions` directory
1652
+ - All review artifacts now properly organized in release-specific folders
1653
+ - Temporary working files automatically gitignored via `.tmp` extension
1654
+
1655
+ ## [0.9.3] - 2025-10-05
1656
+
1657
+ ### Changed
1658
+
1659
+ - **Configuration file renamed**: `code.yml` → `config.yml` for consistency with ace-* naming conventions
1660
+ - Updated all references in code, tests, and documentation
1661
+ - Both `.ace.example/review/config.yml` and `.ace/review/config.yml` now use new name
1662
+ - **Preset organization improved**: All presets now stored as individual files
1663
+ - Extracted 7 presets from main config to separate `.yml` files in `review/presets/`
1664
+ - Main `config.yml` now contains only defaults and storage settings
1665
+ - Presets: pr, code, docs, security, performance, test, agents, ruby-atom
1666
+ - **Configuration cascade integration**: Removed hardcoded paths in favor of ace-core
1667
+ - `PresetManager` now uses `Ace::Core::Molecules::ConfigFinder` for all file discovery
1668
+ - Automatic cascade resolution across `./.ace → ~/.ace` without hardcoded paths
1669
+ - Preset files discovered automatically across entire configuration cascade
1670
+ - Maintains backward compatibility with fallback for environments without ace-core
1671
+
1672
+ ### Fixed
1673
+
1674
+ - Configuration system now properly respects ace-core's configuration cascade
1675
+ - Preset loading works correctly from both local and user config directories
1676
+
1677
+ ## [0.9.2] - 2025-10-05
1678
+
1679
+ ### Fixed
1680
+
1681
+ - **Prompt resolution** now works correctly via ace-nav integration
1682
+ - Fixed custom `PromptResolver` that wasn't working properly
1683
+ - Replaced with `NavPromptResolver` using ace-nav's universal resolution
1684
+ - Registered ace-review prompts with ace-nav protocol for proper discovery
1685
+ - **Critical command injection vulnerability** in `GitExtractor`
1686
+ - Fixed unsafe string interpolation in git commands
1687
+ - Now uses array arguments with `Open3.capture3(*command_parts)`
1688
+ - **Code organization issues**
1689
+ - Fixed overly complex `ReviewManager#execute_review` method
1690
+ - Replaced hash options with proper `ReviewOptions` class
1691
+ - Improved separation of concerns throughout
1692
+
1693
+ ### Changed
1694
+
1695
+ - Refactored `ReviewManager` into clearer, testable steps
1696
+ - Dependencies now include `ace-nav ~> 0.9` for proper prompt resolution
1697
+
1698
+ ## [0.9.1] - 2025-10-05
1699
+
1700
+ ### Fixed
1701
+
1702
+ - Replaced Zeitwerk with explicit requires following ace-gems conventions
1703
+ - Fixed all require_relative paths and namespace references
1704
+ - Removed unnecessary dependencies (zeitwerk, tty-*, rainbow, dry-cli)
1705
+ - Replaced dry-cli with OptionParser for consistency with other ace gems
1706
+ - Simplified output formatting to use plain text without external libraries
1707
+
1708
+ ### Changed
1709
+
1710
+ - Minimal dependencies - now only requires ace-core (~> 0.9)
1711
+ - CLI implementation now follows standard ace-gems patterns
1712
+
1713
+ ## [0.9.0] - 2025-10-05
1714
+
1715
+ ### Changed
1716
+
1717
+ - **BREAKING**: Simplified CLI interface from `ace-review code` to just `ace-review`
1718
+ - Tool is now more universal - presets determine what type of review (code, docs, security, etc.)
1719
+ - Cleaner, more intuitive command structure
1720
+ - Migration from v0.8 legacy code-review system
1721
+
1722
+ ### Migration
1723
+
1724
+ Update all commands from:
1725
+ ```bash
1726
+ ace-review code --preset pr
1727
+ ```
1728
+
1729
+ To:
1730
+ ```bash
1731
+ ace-review --preset pr
1732
+ ```
1733
+
1734
+ ## [0.1.0] - 2025-10-05
1735
+
1736
+ ### Added
1737
+
1738
+ - Initial release of ace-review gem
1739
+ - Migrated from dev-tools code-review implementation
1740
+ - ATOM architecture with atoms, molecules, organisms, and models
1741
+ - Preset-based review configuration system
1742
+ - Prompt composition with base, format, focus, and guidelines modules
1743
+ - Prompt cascade resolution (project → user → gem)
1744
+ - prompt:// URI protocol for prompt references
1745
+ - Support for direct file path references in prompts
1746
+ - Multiple focus module composition
1747
+ - Integration with ace-taskflow for release-based storage
1748
+ - CLI command: `ace-review code` with various options
1749
+ - Built-in presets: pr, code, docs, security, performance, test, agents
1750
+ - Example configuration files in .ace.example/
1751
+ - Comprehensive prompt library migrated from dev-handbook
1752
+ - LLM execution via ace-llm integration
1753
+ - Session management for dry-run mode
1754
+ - List commands for presets and prompts
1755
+
1756
+ ### Changed
1757
+
1758
+ - **BREAKING**: Replaced `code-review` command with `ace-review code`
1759
+ - **BREAKING**: Removed `code-review-synthesize` CLI (use `wfi://synthesize-reviews` workflow)
1760
+ - **BREAKING**: Configuration moved from `.coding-agent/code-review.yml` to `.ace/review/config.yml`
1761
+ - **BREAKING**: Storage location now defaults to `.ace-taskflow/<release>/reviews/`
1762
+ - Preset files now support separate directory at `.ace/review/presets/`
1763
+ - Improved preset override system with `--add-focus` option
1764
+ - Enhanced prompt resolution with multiple lookup strategies
1765
+
1766
+ ### Migration Notes
1767
+
1768
+ To migrate from the old code-review system:
1769
+
1770
+ 1. Install ace-review gem
1771
+ 2. Copy `.coding-agent/code-review.yml` to `.ace/review/config.yml`
1772
+ 3. Update workflow files to use `ace-review code` instead of `code-review`
1773
+ 4. Synthesis is now handled via workflow instructions only (no CLI command)
1774
+
1775
+
1776
+ ## [0.40.4] - 2026-02-22
1777
+
1778
+ ### Fixed
1779
+ - Hidden deprecated 'feedback skip' subcommand from help (use 'verify --skip' instead)
1780
+ - Standardized quiet, verbose, debug option descriptions to canonical strings