fix(pr-review): ignore status bots so they don't get nonsensical auto-replies#122
Conversation
There was a problem hiding this comment.
Pull request overview
Filters automated “status bot” PR comments out of Symphony’s PR review workflow so they don’t trigger rework dispatch or receive nonsensical auto-replies, and documents the new/expected configuration.
Changes:
- Add default
pull_requests.review_comments.ignored_reviewersentries insymphony.yml(status-bot focused). - Update
PromptBuilderreviewer-comment instructions to treat remaining comments as actionable by default and narrow the “non-actionable” path. - Document
review_comments.ignored_reviewersusage and the “don’t ignore review bots” caveat inSPEC.md.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
symphony.yml |
Adds default ignored_reviewers entries and guidance to keep it status-bot-only. |
SPEC.md |
Documents intended use of review_comments.ignored_reviewers and warns against ignoring review bots. |
lib/symphony_elixir/prompt_builder.ex |
Adjusts the review-comment ledger instructions to assume comments are actionable after upstream filtering. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
|
||
| defp reviewer_comments_ledger_instructions do | ||
| """ | ||
| Comments are genuine review feedback: human reviewers plus review bots such as `copilot-pull-request-reviewer[bot]` and `coderabbitai[bot]`. Status bots that post automated, non-actionable notices (coverage summaries, CI results, PR-template reminders) are filtered out upstream via `ignored_reviewers`, so default to treating every comment below as actionable. |
There was a problem hiding this comment.
[codex] Leaving this as a single line intentionally: each entry in this heredoc is one logical instruction on its own line (like a/b/c/d below it), and the rendered prompt is the literal text the agent reads — wrapping would inject mid-sentence newlines. Keeping it consistent with the surrounding block.
| - Extra GitHub accounts whose comments do not trigger PR review rework dispatch. | ||
| Use it to silence bots that post automated, non-actionable status (e.g. | ||
| `github-actions[bot]`, `jp-launch-control[bot]`). Do not list review bots such | ||
| as `copilot-pull-request-reviewer[bot]`, whose comments are actionable reviews. | ||
| - The effective ignored set in `polling` mode is the union of `ignored_users`, the |
There was a problem hiding this comment.
[codex] Accepted — fixed in db353ce. The description now says these accounts are skipped entirely (no rework dispatch and no auto-reply), and the effective-set line refers to the configured ignored_reviewers rather than the internal ignored_users name.
…a skip file #### Context `ignored_reviewers` (PR #122) silences whole bot accounts, but a review bot can post both actionable and non-actionable comments. The rework agent should be able to skip a single clearly non-actionable bot comment without silencing the account. #### TL;DR *Let the rework agent mark individual non-actionable bot comments to skip, so they get no auto-reply — humans are never skippable.* #### Summary - Prompt: agent writes non-actionable bot comment ids to `.symphony-skip-comments.json` instead of replying (path d); never for human reviewers. - Poller: consumes the skip file (reads + deletes), suppresses the auto-reply for those ids, guarded to bot authors only and intersected with the current batch; logs what it skipped. - Workspace: adds the skip file to the worktree git exclude so it is never tracked or committed. - Local workspaces only; missing/malformed file degrades to normal reply behavior. #### Alternatives - Turning off `reply_after_addressing` so the agent owns all replies: rejected, loses the actionable-reply safety net. - Only `ignored_reviewers`: rejected, it is per-account and cannot skip one comment from an otherwise-actionable bot. #### Test Plan - [ ] `make all` - [x] Poller: bot id in skip file gets no reply; human id ignored (guard); skip file consumed. - [x] Workspace: skip file is git-excluded in a created worktree. - [x] `mix format --check-formatted`, `mix specs.check`, `mix credo` on changed files.
Context
Symphony auto-replied a canned "marked complete" note to a coverage-summary bot on a PR (e.g. Automattic/jetpack#50000), which is nonsense. Status bots were never filtered, so they entered the review batch.
TL;DR
Filter automated status bots out of PR review handling so they don't get rework dispatch or auto-replies.
Summary
symphony.yml: addignored_reviewersdefaults (github-actions[bot],jp-launch-control[bot]) with guidance to scope it to status bots, not review bots.prompt_builder.ex: default in-pipeline comments to actionable since status noise is filtered upstream; narrow the non-actionable reply path.SPEC.md: documentignored_reviewerspurpose and the review-bot caveat.Alternatives
reply_after_addressingfallback replies regardless, so prompt silence does not hold.Test Plan
make allmix format --check-formatted,mix specs.checkon changed files.