feat: implement issue #1290 — PR comments from maintainers are mechanically inert — they neither block merge nor reach dev-lead - #1344
Conversation
…ically inert — they neither block merge nor reach dev-lead
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Warning Review limit reached
Next review available in: 45 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughAdds a fail-closed maintainer issue-comment gate before automated approval, with timestamp-based clearing, bypass and dismissal handling, documentation, manifest wiring, and Bats coverage. Also adds HTML markers to selected dev-lead comments for deduplication and forensics. ChangesMaintainer comment gate
Review comment markers
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant review-one-pr.sh
participant maintainer-comment-gate.sh
participant GitHub
review-one-pr.sh->>maintainer-comment-gate.sh: Evaluate PR comment snapshot
maintainer-comment-gate.sh->>GitHub: Read PR head committer date
GitHub-->>maintainer-comment-gate.sh: Return head timestamp
maintainer-comment-gate.sh-->>review-one-pr.sh: Return gate status
review-one-pr.sh->>GitHub: Dismiss approval or continue approval flow
Possibly related PRs
Suggested labels: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Dev-Lead — waiting on PR blockers (intent: review-changes)PR: #1344 |
|
Note @don-petry I reviewed this PR and no code changes were needed, but it still has blocking checks or reviews (failing or cancelled checks, or changes-requested reviews), so I cannot mark it done yet. I'll re-check automatically. |
There was a problem hiding this comment.
Code Review
This pull request introduces a maintainer issue-comment gate to prevent PRs from auto-merging when there are unaddressed maintainer comments posted as issue comments. It includes the gate logic script, integration into the PR review process, updated comment markers to prevent self-blocking, comprehensive BATS tests, and documentation. The review feedback suggests enhancing the robustness of jq parsing in the gate script by using optional chaining (?) to safely handle potential null values, such as for deleted users or missing GraphQL resources, preventing script crashes under set -e.
There was a problem hiding this comment.
Pull request overview
Implements a new “maintainer issue-comment gate” to address #1290 by preventing pr-review from auto-approving when a (non-threaded) PR issue comment from a human/maintainer post-dates the last push, plus documents the behavioral difference between review threads vs issue comments.
Changes:
- Add
scripts/lib/maintainer-comment-gate.shand wire it intoscripts/review-one-pr.shso pr-review withholds approval (fail-closed) when a maintainer issue comment appears newer than the last push. - Add Bats unit coverage for the gate’s runtime behavior and its wiring into
review-one-pr.sh. - Add documentation explaining the two “comment tiers” and how the new gate works, and register the new script in the pr-review consumer manifest.
Reviewed changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/dev-lead/unit/test_maintainer_comment_gate.bats | Adds unit tests for the maintainer issue-comment gate logic and review-one-pr wiring. |
| scripts/review-one-pr.sh | Invokes the maintainer issue-comment gate before posting approvals, with FORCE_REVIEW bypass and fail-closed behavior. |
| scripts/lib/maintainer-comment-gate.sh | Introduces the gate logic to detect unaddressed maintainer issue comments from PR snapshot JSON. |
| scripts/lib/consumer-manifest.json | Registers the new gate script as part of the pr-review workflow surface. |
| scripts/dev-lead-fix-reviews.sh | Adds <!-- dev-lead --> / <!-- dev-lead rate-limit-ack --> markers so dev-lead automation comments aren’t misclassified as maintainer findings. |
| docs/pr-review-agent/maintainer-comment-gate.md | Documents the mechanical difference between issue comments vs review threads and the new gate semantics. |
| docs/pr-review-agent/implementation.md | Documents pr-review’s approval gates, including the new maintainer issue-comment gate. |
| docs/pr-review-agent/documentation-index.md | Adds the maintainer-comment-gate doc to the pr-review-agent documentation index. |
Dev-Lead — fix-reviews (applied)Changes committed and pushed. |
Updated .github/workflows/pr-review-mention.yml to use the stable channel pin and reflect the canonical PAT documentation, aligning with latest standards. This addresses the template-drift check failure for repo-template. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Dev-Lead — fix-bot-comment (applied)Changes committed and pushed. |
Dev-Lead — fix-bot-comment (no-changes)Agent reasoning |
|
@coderabbitai review |
✅ Action performedReview finished.
|
Dev-Lead — fix-bot-comment (applied)Changes committed and pushed. |
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
scripts/dev-lead-fix-reviews.sh (1)
1248-1270: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winRemove duplicate function definition.
The
post_reviews_rate_limitedfunction is defined twice in this file (starting at line 720 and again at line 1133), and both instances have been updated identically here. Since redefining a top-level function in Bash simply overwrites the previous definition, this is redundant duplicate code. Please remove the entire second duplicate definition (lines 1133-1281) to improve maintainability.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@scripts/dev-lead-fix-reviews.sh` around lines 1248 - 1270, Remove the second duplicate definition of post_reviews_rate_limited, including its entire body and closing boundary, while preserving the earlier definition and all surrounding on-mention handling.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@scripts/review-one-pr.sh`:
- Around line 318-328: Update the approval lookup in the
unaddressed-maintainer-comment branch to match the parameterized bot login from
BOT_USER, safely handling null reviews while extracting the review Node ID.
Replace the invalid gh pr review --dismiss invocation with a GitHub GraphQL
dismissPullRequestReview mutation using the extracted review ID, while
preserving the existing best-effort warning behavior.
---
Outside diff comments:
In `@scripts/dev-lead-fix-reviews.sh`:
- Around line 1248-1270: Remove the second duplicate definition of
post_reviews_rate_limited, including its entire body and closing boundary, while
preserving the earlier definition and all surrounding on-mention handling.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 6b2126d5-25c4-4bab-9781-8f0af41fe249
📒 Files selected for processing (8)
docs/pr-review-agent/documentation-index.mddocs/pr-review-agent/implementation.mddocs/pr-review-agent/maintainer-comment-gate.mdscripts/dev-lead-fix-reviews.shscripts/lib/consumer-manifest.jsonscripts/lib/maintainer-comment-gate.shscripts/review-one-pr.shtests/dev-lead/unit/test_maintainer_comment_gate.bats
…nt gate Addresses CodeRabbit critical finding on the #1290 fix: the dismissal of a prior pr-review-agent approval was doubly broken — 1. the jq filter hardcoded `.author.login == "pr-review-agent"` but the bot login is `${BOT_USER:-donpetry-bot}`, so it never matched; and 2. `gh pr review --dismiss` is not a real flag and the review id was never passed, so no dismissal ever occurred. Parameterize the bot login (null-safe on `.reviews`) and dismiss via the `dismissPullRequestReview` GraphQL mutation with the extracted review node id. Best-effort (non-fatal) as before. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Auto-dismissed (#617): coderabbitai[bot] CHANGES_REQUESTED on a superseded commit. The bot re-reviews the new head automatically — a valid concern will return as a fresh review.
|
donpetry-bot
left a comment
There was a problem hiding this comment.
Automated review — APPROVED ✓
Risk: MEDIUM
Reviewed commit: b3680f73c27510b2211ae779029a9e6312f29d4f
Review mode: triage-approved (single reviewer)
Summary
Implements the maintainer issue-comment gate from #1290: pr-review now withholds its automated approval while the latest maintainer issue comment postdates the last push, failing closed on undeterminable state. Triage's low-risk assessment is confirmed; rated MEDIUM here due to non-trivial logic in the approval path, but the change is purely restrictive (adds a gate), well-tested (25 bats tests incl. the #1290 regression), documented, and all prior bot findings are resolved.
Linked issue analysis
Closes #1290 (open). Acceptance criteria are substantively met: (a) an unaddressed maintainer comment now blocks auto-merge by withholding pr-review's code-owner approval and best-effort dismissing any stale approval; (b) behaviour is documented in docs/pr-review-agent/maintainer-comment-gate.md and implementation.md; (c) regression coverage exists (bats: unaddressed comment → rc=1 → skip, no approval); (d) fails closed — undeterminable push time blocks (rc=1) and a malformed snapshot fails the PR (rc=2 → exit 1). The optional 'dev-lead reads issue comments' direction (option 1 in the issue) is not implemented, which the issue permits ('either… or… ideally both').
Findings
No blocking findings. Notes: (1) the gate treats any push at/after the comment as 'addressed' — a documented tradeoff matching the issue's option 3; a push that does not substantively address the finding clears the gate. (2) Marker-based exclusion ( etc.) is necessary because dev-lead posts as the human owner account; a maintainer comment quoting such a marker would be excluded — minor, acceptable. (3) committer.date vs comment createdAt comparison errs toward blocking (push time ≥ committer.date), which is fail-safe. (4) Prior review-cycle findings (Gemini jq null-safety, Copilot source-time jq / approval-dismissal, CodeRabbit critical dismissal-command bug) are all resolved in the current head; CodeRabbit subsequently approved. Secret scan MCP tool unavailable in this run; gitleaks CI check passed.
CI status
All checks green at b3680f7: shellcheck, ShellCheck, bats, unit-tests, CodeQL (actions+python), Secret scan (gitleaks), agent-shield, Agent Security Scan, SonarCloud quality gate, actionlint, lint/guard/validation suite — all SUCCESS. CANCELLED entries in the rollup are concurrency-superseded duplicate runs, each with a later SUCCESS. Audit jobs SKIPPED (no matching ecosystems).
Reviewed automatically by the PR-review agent (single-reviewer mode: fable 5). Reply if you need a human review.
donpetry-bot
left a comment
There was a problem hiding this comment.
Automated review — APPROVED ✓
Risk: MEDIUM
Reviewed commit: b3680f73c27510b2211ae779029a9e6312f29d4f
Review mode: triage-approved (single reviewer)
Summary
Adds a maintainer issue-comment gate (scripts/lib/maintainer-comment-gate.sh) that withholds pr-review's automated approval while the latest human maintainer issue comment postdates the last push, wired into review-one-pr.sh ahead of approval with fail-closed semantics and a FORCE_REVIEW bypass. Existing automation comments posted as don-petry gain HTML markers so the gate does not self-block. Includes 24 bats tests, docs, and consumer-manifest registration.
Linked issue analysis
Closes #1290 (maintainer PR comments were mechanically inert). The PR closes the "does not block merge" half at the approval boundary: because pr-review is the code-owner approver, withholding its approval keeps the PR from auto-merging until a commit is pushed at/after the latest maintainer issue comment. The #1290 acceptance criterion — undeterminable state must block, never read as "no findings" — is implemented (empty head date → rc=1; malformed snapshot → rc=2 → fail the PR) and covered by tests. The "reach dev-lead" half is handled indirectly (the gate forces a re-review cycle; docs keep the review-thread path as the actionable route), which is a reasonable scope choice given the issue explicitly did not prescribe a direction.
Findings
No blocking findings.
- Prior bot findings all addressed: the CodeRabbit critical on the approval-dismissal jq filter is fixed — the filter now matches the actual gh pr view snapshot shape (reviews[].id is a GraphQL node ID usable by dismissPullRequestReview; commit.oid is present). All 5 review threads resolved; CodeRabbit's final review state is APPROVED.
- Gate is a pure function over the already-fetched snapshot (no extra API round-trip), with correct fail-closed returns and subshell isolation in the caller.
- Marker-based exclusion (<!-- pr-review-agent|persona:|dev-lead|dependency-advisory) is the right call since dev-lead/dependency-advisory post as the human owner account; the dev-lead-fix-reviews.sh acks and the @coderabbitai resolve nudge were updated to carry markers accordingly.
- Minor accepted tradeoffs (non-blocking): a rebase without content changes advances committer.date and clears the gate; a human comment quoting one of our markers would be excluded. Both are edge cases and the docs acknowledge the model.
- Secret scan: run_secret_scanning MCP tool unavailable in this environment; gitleaks CI check passed and manual diff inspection found no secret-like content.
CI status
All checks green on b3680f7: shellcheck, bats, unit-tests, actionlint, CodeQL (actions+python), Agent Security Scan, agent-shield, SonarCloud quality gate (0 new issues), gitleaks secret scan, validate-fixtures, caller-stub/permissions guards — all SUCCESS. CANCELLED entries in the rollup are superseded duplicate runs (each check name has a later SUCCESS or SKIPPED instance). mergeStateStatus BLOCKED reflects only the pending code-owner review this verdict satisfies.
Reviewed automatically by the PR-review agent (single-reviewer mode: fable 5). Reply if you need a human review.
…ically inert — they neither block merge nor reach dev-lead (#1344) * feat: implement issue #1290 — PR comments from maintainers are mechanically inert — they neither block merge nor reach dev-lead * fix(reviews): address review comments [skip ci-relay] * fix: sync pr-review-mention.yml with standards Updated .github/workflows/pr-review-mention.yml to use the stable channel pin and reflect the canonical PAT documentation, aligning with latest standards. This addresses the template-drift check failure for repo-template. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(bot): address bot feedback [skip ci-relay] * fix(bot): address bot feedback [skip ci-relay] * fix: correct stale-approval dismissal in unaddressed-maintainer-comment gate Addresses CodeRabbit critical finding on the #1290 fix: the dismissal of a prior pr-review-agent approval was doubly broken — 1. the jq filter hardcoded `.author.login == "pr-review-agent"` but the bot login is `${BOT_USER:-donpetry-bot}`, so it never matched; and 2. `gh pr review --dismiss` is not a real flag and the review id was never passed, so no dismissal ever occurred. Parameterize the bot login (null-safe on `.reviews`) and dismiss via the `dismissPullRequestReview` GraphQL mutation with the extracted review node id. Best-effort (non-fatal) as before. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: don-petry <{}+don-petry@users.noreply.github.com> Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com> Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com>
…ically inert — they neither block merge nor reach dev-lead (#1344) * feat: implement issue #1290 — PR comments from maintainers are mechanically inert — they neither block merge nor reach dev-lead * fix(reviews): address review comments [skip ci-relay] * fix: sync pr-review-mention.yml with standards Updated .github/workflows/pr-review-mention.yml to use the stable channel pin and reflect the canonical PAT documentation, aligning with latest standards. This addresses the template-drift check failure for repo-template. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(bot): address bot feedback [skip ci-relay] * fix(bot): address bot feedback [skip ci-relay] * fix: correct stale-approval dismissal in unaddressed-maintainer-comment gate Addresses CodeRabbit critical finding on the #1290 fix: the dismissal of a prior pr-review-agent approval was doubly broken — 1. the jq filter hardcoded `.author.login == "pr-review-agent"` but the bot login is `${BOT_USER:-donpetry-bot}`, so it never matched; and 2. `gh pr review --dismiss` is not a real flag and the review id was never passed, so no dismissal ever occurred. Parameterize the bot login (null-safe on `.reviews`) and dismiss via the `dismissPullRequestReview` GraphQL mutation with the extracted review node id. Best-effort (non-fatal) as before. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: don-petry <{}+don-petry@users.noreply.github.com> Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com> Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com>
…ically inert — they neither block merge nor reach dev-lead (#1344) * feat: implement issue #1290 — PR comments from maintainers are mechanically inert — they neither block merge nor reach dev-lead * fix(reviews): address review comments [skip ci-relay] * fix: sync pr-review-mention.yml with standards Updated .github/workflows/pr-review-mention.yml to use the stable channel pin and reflect the canonical PAT documentation, aligning with latest standards. This addresses the template-drift check failure for repo-template. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(bot): address bot feedback [skip ci-relay] * fix(bot): address bot feedback [skip ci-relay] * fix: correct stale-approval dismissal in unaddressed-maintainer-comment gate Addresses CodeRabbit critical finding on the #1290 fix: the dismissal of a prior pr-review-agent approval was doubly broken — 1. the jq filter hardcoded `.author.login == "pr-review-agent"` but the bot login is `${BOT_USER:-donpetry-bot}`, so it never matched; and 2. `gh pr review --dismiss` is not a real flag and the review id was never passed, so no dismissal ever occurred. Parameterize the bot login (null-safe on `.reviews`) and dismiss via the `dismissPullRequestReview` GraphQL mutation with the extracted review node id. Best-effort (non-fatal) as before. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: don-petry <{}+don-petry@users.noreply.github.com> Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com> Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com>
…ically inert — they neither block merge nor reach dev-lead (#1344) * feat: implement issue #1290 — PR comments from maintainers are mechanically inert — they neither block merge nor reach dev-lead * fix(reviews): address review comments [skip ci-relay] * fix: sync pr-review-mention.yml with standards Updated .github/workflows/pr-review-mention.yml to use the stable channel pin and reflect the canonical PAT documentation, aligning with latest standards. This addresses the template-drift check failure for repo-template. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(bot): address bot feedback [skip ci-relay] * fix(bot): address bot feedback [skip ci-relay] * fix: correct stale-approval dismissal in unaddressed-maintainer-comment gate Addresses CodeRabbit critical finding on the #1290 fix: the dismissal of a prior pr-review-agent approval was doubly broken — 1. the jq filter hardcoded `.author.login == "pr-review-agent"` but the bot login is `${BOT_USER:-donpetry-bot}`, so it never matched; and 2. `gh pr review --dismiss` is not a real flag and the review id was never passed, so no dismissal ever occurred. Parameterize the bot login (null-safe on `.reviews`) and dismiss via the `dismissPullRequestReview` GraphQL mutation with the extracted review node id. Best-effort (non-fatal) as before. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: don-petry <{}+don-petry@users.noreply.github.com> Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com> Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com>
…ically inert — they neither block merge nor reach dev-lead (#1344) * feat: implement issue #1290 — PR comments from maintainers are mechanically inert — they neither block merge nor reach dev-lead * fix(reviews): address review comments [skip ci-relay] * fix: sync pr-review-mention.yml with standards Updated .github/workflows/pr-review-mention.yml to use the stable channel pin and reflect the canonical PAT documentation, aligning with latest standards. This addresses the template-drift check failure for repo-template. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(bot): address bot feedback [skip ci-relay] * fix(bot): address bot feedback [skip ci-relay] * fix: correct stale-approval dismissal in unaddressed-maintainer-comment gate Addresses CodeRabbit critical finding on the #1290 fix: the dismissal of a prior pr-review-agent approval was doubly broken — 1. the jq filter hardcoded `.author.login == "pr-review-agent"` but the bot login is `${BOT_USER:-donpetry-bot}`, so it never matched; and 2. `gh pr review --dismiss` is not a real flag and the review id was never passed, so no dismissal ever occurred. Parameterize the bot login (null-safe on `.reviews`) and dismiss via the `dismissPullRequestReview` GraphQL mutation with the extracted review node id. Best-effort (non-fatal) as before. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: don-petry <{}+don-petry@users.noreply.github.com> Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com> Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com>
…ically inert — they neither block merge nor reach dev-lead (#1344) * feat: implement issue #1290 — PR comments from maintainers are mechanically inert — they neither block merge nor reach dev-lead * fix(reviews): address review comments [skip ci-relay] * fix: sync pr-review-mention.yml with standards Updated .github/workflows/pr-review-mention.yml to use the stable channel pin and reflect the canonical PAT documentation, aligning with latest standards. This addresses the template-drift check failure for repo-template. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(bot): address bot feedback [skip ci-relay] * fix(bot): address bot feedback [skip ci-relay] * fix: correct stale-approval dismissal in unaddressed-maintainer-comment gate Addresses CodeRabbit critical finding on the #1290 fix: the dismissal of a prior pr-review-agent approval was doubly broken — 1. the jq filter hardcoded `.author.login == "pr-review-agent"` but the bot login is `${BOT_USER:-donpetry-bot}`, so it never matched; and 2. `gh pr review --dismiss` is not a real flag and the review id was never passed, so no dismissal ever occurred. Parameterize the bot login (null-safe on `.reviews`) and dismiss via the `dismissPullRequestReview` GraphQL mutation with the extracted review node id. Best-effort (non-fatal) as before. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: don-petry <{}+don-petry@users.noreply.github.com> Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com> Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com>
…ically inert — they neither block merge nor reach dev-lead (#1344) * feat: implement issue #1290 — PR comments from maintainers are mechanically inert — they neither block merge nor reach dev-lead * fix(reviews): address review comments [skip ci-relay] * fix: sync pr-review-mention.yml with standards Updated .github/workflows/pr-review-mention.yml to use the stable channel pin and reflect the canonical PAT documentation, aligning with latest standards. This addresses the template-drift check failure for repo-template. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(bot): address bot feedback [skip ci-relay] * fix(bot): address bot feedback [skip ci-relay] * fix: correct stale-approval dismissal in unaddressed-maintainer-comment gate Addresses CodeRabbit critical finding on the #1290 fix: the dismissal of a prior pr-review-agent approval was doubly broken — 1. the jq filter hardcoded `.author.login == "pr-review-agent"` but the bot login is `${BOT_USER:-donpetry-bot}`, so it never matched; and 2. `gh pr review --dismiss` is not a real flag and the review id was never passed, so no dismissal ever occurred. Parameterize the bot login (null-safe on `.reviews`) and dismiss via the `dismissPullRequestReview` GraphQL mutation with the extracted review node id. Best-effort (non-fatal) as before. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: don-petry <{}+don-petry@users.noreply.github.com> Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com> Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com>
…ically inert — they neither block merge nor reach dev-lead (#1344) * feat: implement issue #1290 — PR comments from maintainers are mechanically inert — they neither block merge nor reach dev-lead * fix(reviews): address review comments [skip ci-relay] * fix: sync pr-review-mention.yml with standards Updated .github/workflows/pr-review-mention.yml to use the stable channel pin and reflect the canonical PAT documentation, aligning with latest standards. This addresses the template-drift check failure for repo-template. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(bot): address bot feedback [skip ci-relay] * fix(bot): address bot feedback [skip ci-relay] * fix: correct stale-approval dismissal in unaddressed-maintainer-comment gate Addresses CodeRabbit critical finding on the #1290 fix: the dismissal of a prior pr-review-agent approval was doubly broken — 1. the jq filter hardcoded `.author.login == "pr-review-agent"` but the bot login is `${BOT_USER:-donpetry-bot}`, so it never matched; and 2. `gh pr review --dismiss` is not a real flag and the review id was never passed, so no dismissal ever occurred. Parameterize the bot login (null-safe on `.reviews`) and dismiss via the `dismissPullRequestReview` GraphQL mutation with the extracted review node id. Best-effort (non-fatal) as before. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: don-petry <{}+don-petry@users.noreply.github.com> Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com> Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com>
…ically inert — they neither block merge nor reach dev-lead (#1344) * feat: implement issue #1290 — PR comments from maintainers are mechanically inert — they neither block merge nor reach dev-lead * fix(reviews): address review comments [skip ci-relay] * fix: sync pr-review-mention.yml with standards Updated .github/workflows/pr-review-mention.yml to use the stable channel pin and reflect the canonical PAT documentation, aligning with latest standards. This addresses the template-drift check failure for repo-template. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(bot): address bot feedback [skip ci-relay] * fix(bot): address bot feedback [skip ci-relay] * fix: correct stale-approval dismissal in unaddressed-maintainer-comment gate Addresses CodeRabbit critical finding on the #1290 fix: the dismissal of a prior pr-review-agent approval was doubly broken — 1. the jq filter hardcoded `.author.login == "pr-review-agent"` but the bot login is `${BOT_USER:-donpetry-bot}`, so it never matched; and 2. `gh pr review --dismiss` is not a real flag and the review id was never passed, so no dismissal ever occurred. Parameterize the bot login (null-safe on `.reviews`) and dismiss via the `dismissPullRequestReview` GraphQL mutation with the extracted review node id. Best-effort (non-fatal) as before. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: don-petry <{}+don-petry@users.noreply.github.com> Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com> Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com>
…ically inert — they neither block merge nor reach dev-lead (#1344) * feat: implement issue #1290 — PR comments from maintainers are mechanically inert — they neither block merge nor reach dev-lead * fix(reviews): address review comments [skip ci-relay] * fix: sync pr-review-mention.yml with standards Updated .github/workflows/pr-review-mention.yml to use the stable channel pin and reflect the canonical PAT documentation, aligning with latest standards. This addresses the template-drift check failure for repo-template. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(bot): address bot feedback [skip ci-relay] * fix(bot): address bot feedback [skip ci-relay] * fix: correct stale-approval dismissal in unaddressed-maintainer-comment gate Addresses CodeRabbit critical finding on the #1290 fix: the dismissal of a prior pr-review-agent approval was doubly broken — 1. the jq filter hardcoded `.author.login == "pr-review-agent"` but the bot login is `${BOT_USER:-donpetry-bot}`, so it never matched; and 2. `gh pr review --dismiss` is not a real flag and the review id was never passed, so no dismissal ever occurred. Parameterize the bot login (null-safe on `.reviews`) and dismiss via the `dismissPullRequestReview` GraphQL mutation with the extracted review node id. Best-effort (non-fatal) as before. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: don-petry <{}+don-petry@users.noreply.github.com> Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com> Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com>
…ically inert — they neither block merge nor reach dev-lead (#1344) * feat: implement issue #1290 — PR comments from maintainers are mechanically inert — they neither block merge nor reach dev-lead * fix(reviews): address review comments [skip ci-relay] * fix: sync pr-review-mention.yml with standards Updated .github/workflows/pr-review-mention.yml to use the stable channel pin and reflect the canonical PAT documentation, aligning with latest standards. This addresses the template-drift check failure for repo-template. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(bot): address bot feedback [skip ci-relay] * fix(bot): address bot feedback [skip ci-relay] * fix: correct stale-approval dismissal in unaddressed-maintainer-comment gate Addresses CodeRabbit critical finding on the #1290 fix: the dismissal of a prior pr-review-agent approval was doubly broken — 1. the jq filter hardcoded `.author.login == "pr-review-agent"` but the bot login is `${BOT_USER:-donpetry-bot}`, so it never matched; and 2. `gh pr review --dismiss` is not a real flag and the review id was never passed, so no dismissal ever occurred. Parameterize the bot login (null-safe on `.reviews`) and dismiss via the `dismissPullRequestReview` GraphQL mutation with the extracted review node id. Best-effort (non-fatal) as before. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: don-petry <{}+don-petry@users.noreply.github.com> Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com> Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com>
…ically inert — they neither block merge nor reach dev-lead (#1344) * feat: implement issue #1290 — PR comments from maintainers are mechanically inert — they neither block merge nor reach dev-lead * fix(reviews): address review comments [skip ci-relay] * fix: sync pr-review-mention.yml with standards Updated .github/workflows/pr-review-mention.yml to use the stable channel pin and reflect the canonical PAT documentation, aligning with latest standards. This addresses the template-drift check failure for repo-template. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(bot): address bot feedback [skip ci-relay] * fix(bot): address bot feedback [skip ci-relay] * fix: correct stale-approval dismissal in unaddressed-maintainer-comment gate Addresses CodeRabbit critical finding on the #1290 fix: the dismissal of a prior pr-review-agent approval was doubly broken — 1. the jq filter hardcoded `.author.login == "pr-review-agent"` but the bot login is `${BOT_USER:-donpetry-bot}`, so it never matched; and 2. `gh pr review --dismiss` is not a real flag and the review id was never passed, so no dismissal ever occurred. Parameterize the bot login (null-safe on `.reviews`) and dismiss via the `dismissPullRequestReview` GraphQL mutation with the extracted review node id. Best-effort (non-fatal) as before. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: don-petry <{}+don-petry@users.noreply.github.com> Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com> Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com>



Closes #1290
Implemented by dev-lead agent. Please review.
Summary by CodeRabbit
New Features
FORCE_REVIEWbypass for exceptional cases.Documentation
Bug Fixes
Tests