ace-review 0.61.0 → 0.62.2

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