feat: add path-filtered CLI UX review and scope reviews by change type#822
feat: add path-filtered CLI UX review and scope reviews by change type#822
Conversation
4f2b528 to
4baf57a
Compare
3cd152f to
cb49a53
Compare
…hange type ## Summary - Add new `claude-ux-review` job that evaluates CLI user experience: help text, error messages, log/JSON output consistency, and behavioral consistency with existing commands - Path-filter all three Claude review jobs so they only run when relevant files change: - **Standard code review** (`code`): `src/**`, `integration/**`, `deno.json` - **Adversarial review** (`core`): `src/domain/**`, `src/infrastructure/**`, `src/libswamp/**` - **UX review** (`ux`): `src/cli/commands/**`, `src/presentation/**`, `src/domain/errors.ts`, `src/libswamp/**` - PRs that only touch docs, skills, workflows, or scripts skip all Claude reviews and auto-merge faster - UX review uses Sonnet for speed; standard and adversarial reviews remain on Opus ## Test plan - [ ] Open a PR that only changes README.md — verify all three Claude reviews are skipped and auto-merge proceeds - [ ] Open a PR that changes a file in `src/presentation/` — verify standard code review and UX review run, adversarial review is skipped - [ ] Open a PR that changes a file in `src/domain/` — verify all three reviews run - [ ] Verify UX review approves quickly on a PR that touches `src/libswamp/` internals without changing user-facing output shapes - [ ] Verify UX review catches a missing `--json` output field or inconsistent flag name
cb49a53 to
2910d55
Compare
There was a problem hiding this comment.
Code Review
Blocking Issues
None.
Suggestions
-
Consider adding
codepath filter toclaude-review: The comment says it runs on every non-draft PR intentionally for branch protection approval, which makes sense. However, for docs/scripts-only PRs, this means a full Claude Opus code review still runs (and bills API tokens) even when there's no source code to review. If branch protection requires this job to pass, you could have it auto-approve whenneeds.changes.outputs.code != 'true'with a fast no-op step instead of running the full review. This would save API costs on non-code PRs while still satisfying branch protection. -
Sentinel file path is shared across jobs: Each review job writes to
/tmp/review-failedin its own runner, so there's no actual collision risk since they run on separateubuntu-latestinstances. Just noting this is fine as-is — no action needed.
Overall this is a clean, well-structured improvement to the CI pipeline. The path filtering will reduce unnecessary review runs, and the sentinel file mechanism correctly ensures that --request-changes reviews block auto-merge.
Summary
claude-ux-reviewjob that evaluates CLI user experience: help text, error messages, log/JSON output consistency, and behavioral consistency with existing commands (runs on Sonnet for speed)code):src/**,integration/**,deno.jsoncore):src/domain/**,src/infrastructure/**,src/libswamp/**ux):src/cli/commands/**,src/presentation/**,src/domain/errors.ts,src/libswamp/**/tmp/review-failedsentinel file when requesting changes, and a follow-up step checks for it and fails the job. This ensures--request-changesreviews actually block auto-merge.Test plan
src/presentation/— verify code review and UX review run, adversarial review is skippedsrc/domain/— verify all three reviews run--request-changescreates/tmp/review-failedand the job fails, blocking auto-merge--approvedoes not create the sentinel file and the job succeeds