Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 9 additions & 4 deletions SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -670,10 +670,15 @@ Fields:
- Applies only in `polling` mode before reclaiming idle tracked PR workspaces.
- `review_comments.ignored_reviewers` (list of strings)
- Polling-mode default: `[]`.
- Extra GitHub users whose comments do not trigger PR review rework dispatch.
- The effective ignored set in `polling` mode is the union of `ignored_users`, the
auto-detected current `gh` user (when `gh api user` succeeds), and the PR author returned
by `gh pr view`. Operators do not need to configure their own identity here.
- Extra GitHub accounts whose comments are skipped entirely — they trigger neither
PR review rework dispatch nor an auto-reply. 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 the configured
`ignored_reviewers`, the auto-detected current `gh` user (when `gh api user` succeeds),
and the PR author returned by `gh pr view`. Operators do not need to configure their
own identity here.
- `review_comments.reply_after_addressing` (boolean)
- Polling-mode default: `false`.
- `review_comments.request_review_after_push` (boolean)
Expand Down
5 changes: 3 additions & 2 deletions lib/symphony_elixir/prompt_builder.ex
Original file line number Diff line number Diff line change
Expand Up @@ -667,16 +667,17 @@ defmodule SymphonyElixir.PromptBuilder do

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.

For each comment below, do EXACTLY ONE of the following before you stop:
a) Commit a fix that resolves the comment, reference the comment id in the commit message body, then reply with the commit hash and concrete change.
b) Reply with explicit pushback explaining why no code change is being made.
c) Reply deferring the change with concrete reasoning (e.g., out of scope for this PR plus a follow-up reference).
d) Reply that the comment is non-actionable when it is only a generated summary, duplicate, or informational note.
d) Reply that the comment is non-actionable only when it is a genuine duplicate of another comment, or a purely informational note (including an automated summary that slipped past `ignored_reviewers`) that requests no change.
Make each reply read as an automated Symphony AI response. Prefer specific wording like:
- "Symphony AI handled this in `<commit>`: removed the duplicate fallback while keeping the lookup order unchanged."
- "Symphony AI is leaving this unchanged because `<reason>`."
- "Symphony AI is deferring this because `<reason>`; follow-up: `<issue>`."
- "Symphony AI is not making a code change here because this is a generated PR overview, not an actionable request."
- "Symphony AI is treating this as informational and made no change because `<reason>`."
Never paste internal comment ids (for example `PRR_...` node ids or raw numeric ids) into reply text posted to GitHub; readers cannot interpret them. Refer to the comment naturally (for example "this review" or "this comment"). Comment ids belong only in commit message bodies.
Do not silently skip a comment, and do not rely on Symphony's generic auto-reply fallback as the primary response. The review agent verifies each comment id has either an associated commit or an outbound reply; that check is internal and does not require quoting the id in the reply text.

Expand Down
8 changes: 7 additions & 1 deletion symphony.yml
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,13 @@ pull_requests:
review_comments:
rework_delay_minutes: 1
# stale_after_days: 7
# ignored_reviewers: []
# Accounts whose PR comments are skipped (no rework, no reply). Scope this to
# bots that post automated, non-actionable status (coverage, CI, template
# reminders). Do NOT add review bots like copilot-pull-request-reviewer[bot]
# or coderabbitai[bot] here -- their comments are genuine, actionable reviews.
ignored_reviewers:
- github-actions[bot]
- jp-launch-control[bot]
reply_after_addressing: true
# request_review_after_push: false
checks:
Expand Down
2 changes: 1 addition & 1 deletion test/symphony_elixir/core_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2215,7 +2215,7 @@ defmodule SymphonyElixir.CoreTest do
assert prompt =~ "For each comment below, do EXACTLY ONE of the following"
assert prompt =~ "Make each reply read as an automated Symphony AI response."
assert prompt =~ "Symphony AI handled this in `<commit>`"
assert prompt =~ "generated PR overview, not an actionable request"
assert prompt =~ "Symphony AI is treating this as informational and made no change"
assert prompt =~ "Never paste internal comment ids"
assert prompt =~ "[id=comment-1] Reviewer: [inline_comment] lib/example.ex:42"
assert prompt =~ "<linear_reviewer_comment_body>\nPlease split this function.\n</linear_reviewer_comment_body>"
Expand Down
Loading