You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
pr-review never re-approves after dismissing its own approval: disposition gate self-dismisses, then 'already-reviewed-at-head' no-ops forever (the #1551 shape recurs) #1933
When pr-review's maintainer-comment gate revokes pr-review's own approval (an undispositioned comment appears), and the comment is then dispositioned on the same head, pr-review never re-approves. Its next run no-ops with already-reviewed-at-head, so the PR stays unapproved until a new commit lands or someone fires the force_review break-glass. This is the #1551 deadlock shape recurring through the disposition gate.
Evidence (PR #1907, head af711476, pr-review v1-next @ 1d6b38b5)
03:14:49 (run 36089574178): [maintainer-gate] WARNING: 5 PR issue comment(s) lack a verified disposition, then dismissPullRequestReview on pr-review's approval of af711476.
03:15:35–40: the remaining comments were dispositioned (minimized RESOLVED).
03:15:23 (run 36089615236): [maintainer-gate] no undispositioned PR issue comments, then {"decision":"noop","reason":"already-reviewed-at-head"}. The gate was clear, but pr-review refused to re-review the head whose approval it had just revoked.
03:16:18: needs-human-review re-applied by donpetry-bot.
Only gh workflow run pr-review-trigger.yml -f pr_url=… -f force_review=true (run 36089856215) produced the approval (03:21:24).
Acceptance criteria
already-reviewed-at-head must not no-op when the prior verdict at this head was an approval that pr-review itself dismissed for a gate reason (disposition, advisory quorum, CI). That dismissal is a "pending re-evaluation" state, not "reviewed".
When a gate that caused a self-dismissal clears, the next pr-review run at the same head re-evaluates and can re-approve without a new commit or force_review.
Regression test for the sequence: approve → self-dismiss (disposition gate) → comments dispositioned → re-run at the same head → approves.
Activity
fix(pr-review): re-evaluate at the same head after its own gate dismi…
fix(holds/pr-review): honour every hold label; pin the escalation hol…