Skip to content

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

Closed

Description

@rachel-petry

Summary

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)

  1. 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.
  2. 03:15:35–40: the remaining comments were dispositioned (minimized RESOLVED).
  3. 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.
  4. 03:16:18: needs-human-review re-applied by donpetry-bot.
  5. 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

  1. 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".
  2. 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.
  3. Regression test for the sequence: approve → self-dismiss (disposition gate) → comments dispositioned → re-run at the same head → approves.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions