Skip to content

fix(pr-review): ignore status bots so they don't get nonsensical auto-replies#122

Merged
chihsuan merged 3 commits into
mainfrom
fix/ignore-status-bots-in-pr-review
Jun 29, 2026
Merged

fix(pr-review): ignore status bots so they don't get nonsensical auto-replies#122
chihsuan merged 3 commits into
mainfrom
fix/ignore-status-bots-in-pr-review

Conversation

@chihsuan

Copy link
Copy Markdown
Member

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: add ignored_reviewers defaults (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: document ignored_reviewers purpose and the review-bot caveat.

Alternatives

  • Prompt-level "stay silent" path: rejected, the reply_after_addressing fallback replies regardless, so prompt silence does not hold.
  • Per-comment actionable gating in the poller: deferred, heavier change; status-bot filtering covers the observed noise.

Test Plan

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_reviewers entries in symphony.yml (status-bot focused).
  • Update PromptBuilder reviewer-comment instructions to treat remaining comments as actionable by default and narrow the “non-actionable” path.
  • Document review_comments.ignored_reviewers usage and the “don’t ignore review bots” caveat in SPEC.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.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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.

Comment thread SPEC.md Outdated
Comment on lines 673 to 677
- 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

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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.

@chihsuan chihsuan merged commit 4d32c80 into main Jun 29, 2026
11 checks passed
chihsuan added a commit that referenced this pull request Jun 29, 2026
…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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants