Skip to content

docs: document PR review states#1306

Merged
ajbozarth merged 3 commits into
generative-computing:mainfrom
ajbozarth:docs/pr-review-states
Jun 26, 2026
Merged

docs: document PR review states#1306
ajbozarth merged 3 commits into
generative-computing:mainfrom
ajbozarth:docs/pr-review-states

Conversation

@ajbozarth

Copy link
Copy Markdown
Contributor

Pull Request

Issue

Fixes #

Description

Adds a Review States subsection to CONTRIBUTING.md describing when to use GitHub's three PR review states — APPROVE, REQUEST CHANGES, and COMMENT. Adds a one-line pointer in AGENTS.md Section 6 so AI reviewers find it.

A few spots worth weighing in on during review:

  • The "personally want to validate before merge" case under REQUEST CHANGES — does the team agree this belongs there, or is it a COMMENT + re-request review?
  • The "follow-up issues not yet filed" case — wording reads as "the action is filing issues, not changing the PR." OK?
  • Quick-reference table at the top — keep it, or is the prose alone enough?

Testing

  • Tests added to the respective file if code was changed
  • New code has 100% coverage if code was added
  • Ensure existing tests and github automation passes (a maintainer will kick off the github automation when the rest of the PR is populated)

Attribution

  • AI coding assistants used

Adding a new component, requirement, sampling strategy, or tool?

If your PR adds or modifies one of the types below, check the matching box. A checklist of type-specific review items will be posted as a comment.

  • Component
  • Requirement
  • Sampling Strategy
  • Tool

NOTE: Please ensure you have an issue that has been acknowledged by a core contributor and routed you to open a pull request against this repository. Otherwise, please open an issue before continuing with this pull request.

Adds a Review States subsection under the Pull Request Process in
CONTRIBUTING.md describing when to use APPROVE, REQUEST CHANGES, or
COMMENT, plus a one-line pointer in AGENTS.md so AI reviewers find it.

Assisted-by: Claude Code
Signed-off-by: Alex Bozarth <ajbozart@us.ibm.com>
@ajbozarth ajbozarth requested a review from a team as a code owner June 19, 2026 18:16
@ajbozarth ajbozarth self-assigned this Jun 19, 2026
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Jun 19, 2026
@ajbozarth

Copy link
Copy Markdown
Contributor Author

Here's a first stab at a short doc update with how to choose a PR review state as we discussed in scrum. This was generated based on the notes I transcribed from memory, so it could easily have mistakes compared to our discussion points

Comment thread CONTRIBUTING.md Outdated
Comment on lines +410 to +413
**`REQUEST CHANGES`** — the PR should not merge in its current form. Use when:
- There is an actual blocking or breaking issue (correctness, regression, missing tests, etc.).
- The reviewer wants to personally validate something before the PR merges, and is withholding their approval until the next round.
- Important follow-up issues have not yet been opened, and the reviewer doesn't want them forgotten. The expectation here is that the issues get filed, not that the PR itself changes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I could see another scenario here: I want to be able to re-review before this merges. That is similar to your second bullet, but the intent is slightly different.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I wonder if we should just soften bullet two to that. I could see it as a subset of that scenario

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I'm not sure 'I want' is enough in it's own right. it should be supported by the other criteria - ie believing there'd be a regression, or that the code is incomplete/slightly regressive without followups.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It's not always quite so cut and dry. Sometimes reviews are a conversation (why did you do this approach? Have you thought about that other approach? etc.), and in those cases the original reviewer might want to be able to re-review. This also ties in with the auto-merge discussion below. I guess the larger question (which we're sort of hinting around without explicitly addressing) is, when is it ok to merge a PR?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

if you don't "request changes"/block then you have to realize that a merge might happen and comments/threads may get lost (missed/forgotten). But we also have a typically better behavior than that, and the norm is that nobody presses the merge button w/o proper follow-up. It's not perfect. When stuff gets missed this way the fix is to enter issues, have discussions... If that isn't good enough for a concern then it should be a request changes.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Agreed with actual blocking portion or important followup not open yet. I think the "I want to re-review" portion makes sense as well, though in this case I think having the blocking change request is a prerequisite.

As for Paul's comment about when it's OK to merge my 2C:

  1. All of CI passes
  2. Minimum approvals are already in, ie one could actually merge
  3. Nobody has requested a major change that is not yet addressed - this is a small caveat as sometimes there is a discussion here without an explicit requests changes.

Comment thread CONTRIBUTING.md

### Review States

When submitting a PR review, pick one of GitHub's three states. Using them consistently keeps the merge signal meaningful: an `APPROVE` should mean the reviewer is willing to support the change, and a `REQUEST CHANGES` should mean something is actually blocking.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'm not sure I agree request changes == blocking. I think it just means I'm requesting changes before I approve.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Another thing to note: if a PR is set to auto-merge, an approve does not allow others a chance to weigh in (though it also means the original reviewer check back later if they don't approve and no one else does).

We also have a do-not-merge/hold label that in theory can be used with an approve to work around that... not elegant but I think this is a scenario we may need to account for.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I'm not sure I agree request changes == blocking. I think it just means I'm requesting changes before I approve.

I agree that the wording could be better, but from a technical perspective it is true, our CI does block merging when requests changes is true.

if a PR is set to auto-merge, an approve does not allow others a chance to weigh in

This only happens if a requests change review doesn't also exist, which lines up with the I want to be able to re-review before this merges idea above, but a reviewer could still miss if they haven't submitted a review yet (like if they're mid review locally)

We also have a do-not-merge/hold label

I could see including that as part of this doc, but I'm not sure in what way would be best

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

if a PR is set to auto-merge, an approve does not allow others a chance to weigh in

This only happens if a requests change review doesn't also exist, which lines up with the I want to be able to re-review before this merges idea above, but a reviewer could still miss if they haven't submitted a review yet (like if they're mid review locally)

One of the the scenarios I'm thinking of is something like this:

  • You and I are tagged as reviewers on a PR
  • You review, and the author makes changes to address your review
  • I review, and the author makes changes to address my review

Who approves in that scenario? In theory we both should, but if auto-merge is on only one of us can. Which is mildly annoying. Not majorly, because there's numerous ways to work around this (requesting changes, 1st reviewer just comments, approve+hold, get rid of auto merge, only have one person review a PR, etc.). Just nothing that feels exactly right (though in the real world, sometimes good enough is good enough 😄 )

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I agree that the wording could be better, but from a technical perspective it is true, our CI does block merging when requests changes is true.

Fair enough. The bullets below are more nuanced as well, so all good.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

it almost sounds like @psschwei wants to disable auto-merge, but I know it ain't so

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I can see the issue here with multiple requested changes from multiple people - at the end of the day I think the LGTM/approve bestows with the co-responsibility of understanding/maintaining that area in the future.

We could have a community guideline that if there are multiple changes requested reviews, all but the last would simply "dismiss" their review - which becomes unblocking. This guideline would mean the last person with changes requested not yet re-reviewed would be the only approval.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

it almost sounds like @psschwei wants to disable auto-merge, but I know it ain't so

I go back and forth... I think, this morning, I leans towards reviewer merges (which makes the auto-merge question moo), but I reserve the right to wake up smarter tomorrow...

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I personally like the PR creator to merge; if they want the reviewer to merge, they can just set auto-merge.

I also think request changes should be soft blocking; ie the pr opener can dismiss a review and move on without it but that should be an operation imbued with seriousness and responsibility.

Comment thread CONTRIBUTING.md Outdated
| `COMMENT` | Anything else, or a follow-up that doesn't change the prior status. |

**`APPROVE`** — the reviewer is willing to support the change.
- The PR is ready to merge as-is, with or without non-blocking nits or follow-up suggestions that the author may address or skip with no harm.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

and specifically that don't require any followup

Comment thread CONTRIBUTING.md Outdated

**`REQUEST CHANGES`** — the PR should not merge in its current form. Use when:
- There is an actual blocking or breaking issue (correctness, regression, missing tests, etc.).
- The reviewer wants to personally validate something before the PR merges, and is withholding their approval until the next round.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I would say that they have a significant concern they need to validate.

Comment thread CONTRIBUTING.md Outdated
Comment on lines +410 to +413
**`REQUEST CHANGES`** — the PR should not merge in its current form. Use when:
- There is an actual blocking or breaking issue (correctness, regression, missing tests, etc.).
- The reviewer wants to personally validate something before the PR merges, and is withholding their approval until the next round.
- Important follow-up issues have not yet been opened, and the reviewer doesn't want them forgotten. The expectation here is that the issues get filed, not that the PR itself changes.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I'm not sure 'I want' is enough in it's own right. it should be supported by the other criteria - ie believing there'd be a regression, or that the code is incomplete/slightly regressive without followups.

@AngeloDanducci AngeloDanducci left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

May be worth adding to the document somewhere to encourage suggestion blocks for small nits for comment/approval scenarios.

Making it easy to incorporate non blocking but nice to have things from reviews could help reduce some of the review cycle friction.

@AngeloDanducci

Copy link
Copy Markdown
Contributor

One other thing to align on. We assign multiple reviewers. If a reviewer has already approved or requested changes should additional reviewers still make an effort to review in addition?

Generally if I see a LGTM or a requested change I assume the responsibility on followups is already assumed and won't devote time to additional review - however more eyes can't hurt.

@ajbozarth

Copy link
Copy Markdown
Contributor Author

Generally if I see a LGTM or a requested change I assume the responsibility on followups is already assumed and won't devote time to additional review - however more eyes can't hurt.

As a reviewer if the content of the PR matter to me I'll sometime want to do my own review even if someone has already approved it, also if the only approval has no context, ie just a flat approval with not feedback at all I'll sometime also feel like I need to double check.

Either way I usually ping the author on Slack to warn them I'm doing a review and the hold off on merge because the only other idea is to put a action less needs review just to block on yourself, which feels icky

@psschwei

psschwei commented Jun 22, 2026

Copy link
Copy Markdown
Member

Another idea: we could disable auto merge and make it the responsibility of the reviewer(s) to merge. Almost every other project I've ever worked on has followed that model (and to be honest, I'm not sure why we aren't), plus it standardizes the process for both maintainer PRs and external contributor PRs.

@ajbozarth

Copy link
Copy Markdown
Contributor Author

Almost every other project I've ever worked on has followed that model

My experience has kind of been the opposite, PRs by maintainers have been merged by their authors (or at least either author or reviewer) on most of my OSS projects.

Pre-AI I would probably be fine doing reviewer-merge, but given the prevalence of AI generated PRs and AI reviewers I tend to trust the author more than the reviewer nowadays to be the final controller.

@akihikokuroda

Copy link
Copy Markdown
Member

It may be good to add a "PR review process" section. It may explain:

  1. How reviews are assigned
  2. What are requester's and review's responsibilities
  3. When / how PRs are merged
  4. etc..

@psschwei

Copy link
Copy Markdown
Member

Pre-AI I would probably be fine doing reviewer-merge, but given the prevalence of AI generated PRs and AI reviewers I tend to trust the author more than the reviewer nowadays to be the final controller.

I do not follow your logic here.

@ajbozarth

Copy link
Copy Markdown
Contributor Author

I do not follow your logic here.

I don't trust that if we document that it's up to reviewers to merge that an AI reviewer wouldn't try to merge things on it's own when posting approving reviews

@psschwei

Copy link
Copy Markdown
Member

I do not follow your logic here.

I don't trust that if we document that it's up to reviewers to merge that an AI reviewer wouldn't try to merge things on it's own when posting approving reviews

You can prevent that by using an appropriately-scoped PAT, having read-only permissions on Contents

@markstur markstur left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Note: I wrote this earlier today and somehow it got stuck in pending, but it's fine...

LGTM -- so I'm going to COMMENT this APPROVAL (goes back to read again). :)

Yes, I have no problem with what's added. Thanks!
Sure, additional reviews and discussion here is expected.

Comment thread CONTRIBUTING.md

### Review States

When submitting a PR review, pick one of GitHub's three states. Using them consistently keeps the merge signal meaningful: an `APPROVE` should mean the reviewer is willing to support the change, and a `REQUEST CHANGES` should mean something is actually blocking.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

it almost sounds like @psschwei wants to disable auto-merge, but I know it ain't so

Comment thread CONTRIBUTING.md Outdated
Comment on lines +410 to +413
**`REQUEST CHANGES`** — the PR should not merge in its current form. Use when:
- There is an actual blocking or breaking issue (correctness, regression, missing tests, etc.).
- The reviewer wants to personally validate something before the PR merges, and is withholding their approval until the next round.
- Important follow-up issues have not yet been opened, and the reviewer doesn't want them forgotten. The expectation here is that the issues get filed, not that the PR itself changes.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

if you don't "request changes"/block then you have to realize that a merge might happen and comments/threads may get lost (missed/forgotten). But we also have a typically better behavior than that, and the norm is that nobody presses the merge button w/o proper follow-up. It's not perfect. When stuff gets missed this way the fix is to enter issues, have discussions... If that isn't good enough for a concern then it should be a request changes.

Comment thread CONTRIBUTING.md
**`COMMENT`** — for everything else. Use when:
- Posting a follow-up review that shouldn't change the PR's status from a prior `APPROVE` or `REQUEST CHANGES` (e.g., re-reviewing after a push when nothing material changed).
- The review falls between `APPROVE` and `REQUEST CHANGES` and the reviewer doesn't want to block.
- The reviewer wants to defer the final call to other reviewers.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Maybe somewhere we should mention something about deferring to other reviewers. Is there a concise rule that says you should comment about your intentions or just leave that to implied/common sense? Curious but wouldn't want to get to wordy about that here.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I do think we should at least make it socially acceptable to say that you would prefer someone else to review this area of the code. For instance, if I was requested on a PR about telemetry not opened by Alex, I would ask that he be requested as well (or even review instead of me).

Comment thread CONTRIBUTING.md

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I don't want this to get too big because people don't read anymore, but contrary to that, it's nice to have stuff written down when it helps.

A few things come time mind that I didn't see addressed (maybe off topic):

  • we don't have an official stance on auto-merge -- ok... that means it is allowed
  • we don't have a stance on "dismiss review". Common sense?
  • I'm really curious about use of the resolve button. Sometimes I really like to use that as a contributor to clean up conversation, but the better practice is probably for the reviewer to do that. So stuff stays unresolved.

I don't think any of those ^^^ need to be part of this unless some interesting team decision follows.

@markstur

Copy link
Copy Markdown
Contributor

Almost every other project I've ever worked on has followed that model

My experience has kind of been the opposite, PRs by maintainers have been merged by their authors (or at least either author or reviewer) on most of my OSS projects.

Pre-AI I would probably be fine doing reviewer-merge, but given the prevalence of AI generated PRs and AI reviewers I tend to trust the author more than the reviewer nowadays to be the final controller.

I am used to the approver pushing the merge button, but somehow in this project it feels okay to have the committer do it. Maybe that's because a committer with multiple PRs might like to choose the order? Or maybe to let simmer in case another reviewer is still looking... As an approver, occasionally I push the button just to get things moving along (you're welcome?)

@psschwei

Copy link
Copy Markdown
Member

We should also probably have a stance on resolving conversations in PRs (?)

@AngeloDanducci

Copy link
Copy Markdown
Contributor

We should also probably have a stance on resolving conversations in PRs (?)

Valid - I usually automatically resolve things when I push an updated and they become outdated (or are outdated even if the github UI doesn't think so) for simple do foo type things.

For more complex or open ended things that were maybe a question instead of a directive anyway I usually leave those open 🤔

Fold in discussion from the PR review-states doc into a fuller policy:
add a Review Assignment section (CODEOWNERS subset, one-approval rule,
deferring to area owners), a Merging section taking the maintainer-action
hybrid position and documenting the do-not-merge/hold label, and a Review
comments section covering suggestion blocks and thread resolution. Tighten
the APPROVE and REQUEST CHANGES bullets so nits require no follow-up and
holding for re-review requires a concrete concern.

Assisted-by: Claude Code
Signed-off-by: Alex Bozarth <ajbozart@us.ibm.com>
@ajbozarth

Copy link
Copy Markdown
Contributor Author

Pushed an update folding in the feedback so far. Summary of what changed and what's still open.

Incorporated (where we'd converged):

  • Added a Review Assignment section: subset of CODEOWNERS requested at random, one approval satisfies the merge requirement, and it's fine to defer to / request the maintainer who owns an area (@jakelorocco's point).
  • APPROVE: nits/suggestions must be non-blocking and require no follow-up — anything that needs a follow-up so it isn't forgotten goes under REQUEST CHANGES (@planetf1). Approval now also notes the shared maintenance responsibility it carries.
  • REQUEST CHANGES: the "validate before merge" bullet now requires a concrete concern; wanting another pass without one isn't on its own a reason to block (per @planetf1 / @AngeloDanducci / @markstur).
  • Added a Merging section taking the hybrid position: merging is a maintainer action by either author or reviewer, "merge when ready" just schedules it, and whoever merges confirms real readiness — not just green checks.
  • Documented the do-not-merge/hold label as a CI-enforced block separate from a review.
  • Review comments section: encourage suggestion blocks for small nits (@AngeloDanducci).

Deliberately took a position — please push back if you disagree:

  • The Merging hybrid. This is where we were most split (author-merge vs reviewer-merge). I wrote it as one rule — merging is a maintainer action — since author-vs-reviewer is really a non-distinction when both are maintainers. @psschwei flagging you since you leaned reviewer-merge.
  • The re-review bullet requiring a concrete concern. @psschwei, this partly addresses your "auto-merge can merge out from under me" worry via the "whoever merges confirms readiness" line, but doesn't fully resolve it — worth your read.

Left out, want input before encoding:

  • do-not-merge/hold intended uses. Documented only the mechanism. I see a review as carrying actionable items and the label as for non-actionable holds (upstream issues, dependencies) — but I didn't want to assert that unilaterally. Worth aligning on.
  • Multiple reviewers requesting changes. Dropped the section since the convention wasn't settled (@AngeloDanducci's "all but the last dismisses," and the auto-merge-only-counts-one race). Do we want a stated rule here, or leave it to GitHub's default behavior?

@psschwei

Copy link
Copy Markdown
Member
  • The Merging hybrid. This is where we were most split (author-merge vs reviewer-merge). I wrote it as one rule — merging is a maintainer action — since author-vs-reviewer is really a non-distinction when both are maintainers. @psschwei flagging you since you leaned reviewer-merge.

I'm happy to go with whatever the majority decides, especially as our process here is still a bit manual. If we were using more automation / gitops (e.g. prow), I would have a stronger opinion.

  • The re-review bullet requiring a concrete concern. @psschwei, this partly addresses your "auto-merge can merge out from under me" worry via the "whoever merges confirms readiness" line, but doesn't fully resolve it — worth your read.

I'm not sure what exactly the change was here, but nothing looks amiss.

  • do-not-merge/hold intended uses. Documented only the mechanism. I see a review as carrying actionable items and the label as for non-actionable holds (upstream issues, dependencies) — but I didn't want to assert that unilaterally. Worth aligning on.

In the past, I've used this in two ways: the non-actional items like you say, but also as a chance for lazy consensus without blocking (i.e. I approve but hold, which allows others to take a look. If no one does within a decent timeframe, can remove the label and merge)

The latter instance matters more if we have automation that merges right after approval.

@planetf1 planetf1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Three suggestions inline — no blocking issues.

Comment thread CONTRIBUTING.md Outdated
**`REQUEST CHANGES`** — the PR should not merge in its current form. Use when:
- There is an actual blocking or breaking issue (correctness, regression, missing tests, etc.).
- The reviewer needs to validate a concrete concern (a suspected regression, an incomplete change) before the PR merges, and is withholding approval until the next round. Wanting another pass without a specific concern isn't on its own a reason to block; coordinate with the author by comment instead.
- Important follow-up issues have not yet been opened, and the reviewer doesn't want them forgotten. The expectation here is that the issues get filed, not that the PR itself changes.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The intent here is clear, but a reader encountering this cold might wonder: once the issues are filed, who re-approves and when does the block clear? Suggesting an exit condition to close the loop:

Suggested change
- Important follow-up issues have not yet been opened, and the reviewer doesn't want them forgotten. The expectation here is that the issues get filed, not that the PR itself changes.
- Important follow-up issues have not yet been opened, and the reviewer doesn't want them forgotten. The expectation is that the issues get filednot that the PR itself changes — at which point the reviewer re-approves.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

updated

Comment thread CONTRIBUTING.md

### Merging

Merging is a maintainer action, performed by either the author or a reviewer; "merge when ready" only schedules it once requirements pass. Whoever merges confirms the PR is actually ready, not just that the queue requirements are green. CI passing and the minimum approval make a PR *mergeable*, but a concern raised in discussion that never became an explicit `REQUEST CHANGES` should still be resolved first.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

"Whoever merges confirms the PR is actually ready" is sound guidance, but there's no stated mechanism for the merger to discover unresolved concerns. One option is to make this self-enforcing: GitHub's branch-protection setting "Require conversation resolution before merging" would enforce it at the repo level and remove the need for the prose instruction entirely. Worth considering alongside this doc update.

cc @psschwei — you were discussing the auto-merge / merge-gate setup earlier in this thread, so this seems relevant.

@psschwei psschwei Jun 24, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I like that
edit: and by that, I mean requiring conversation resolution

Comment thread CONTRIBUTING.md

Merging is a maintainer action, performed by either the author or a reviewer; "merge when ready" only schedules it once requirements pass. Whoever merges confirms the PR is actually ready, not just that the queue requirements are green. CI passing and the minimum approval make a PR *mergeable*, but a concern raised in discussion that never became an explicit `REQUEST CHANGES` should still be resolved first.

The `do-not-merge/hold` label blocks merging while it is applied, enforced by CI independent of review state. It is a separate mechanism from a `REQUEST CHANGES` review and is removed once the blocking condition clears.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
The `do-not-merge/hold` label blocks merging while it is applied, enforced by CI independent of review state. It is a separate mechanism from a `REQUEST CHANGES` review and is removed once the blocking condition clears.
The `do-not-merge/hold` label blocks merging while it is applied, enforced by CI independent of review state. It is a separate mechanism from a `REQUEST CHANGES` review and is removed by a maintainer once the blocking condition clears.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I'd rather not specific this here as anyone with triage access could edit labels, not just maintainers.

Spell out how the block clears: filing the issues, not changing the PR,
after which the reviewer re-approves.

Assisted-by: Claude Code
Signed-off-by: Alex Bozarth <ajbozart@us.ibm.com>
@psschwei

Copy link
Copy Markdown
Member

A codex generated summary of the doc:

Defined scenarios

Scenario Documented handling
Multiple reviewers are requested A random subset of relevant CODEOWNERS is requested. Only one relevant CODEOWNER approval is required; every requested reviewer does not need to review.
Another reviewer has better ownership or context Request that maintainer as a reviewer or explicitly defer to them.
The PR is ready, with only optional nits Use APPROVE. Suggestions must require no follow-up and must be safe for the author to ignore.
There is a correctness issue, regression, missing test, or other blocking problem Use REQUEST CHANGES, which blocks merging.
A reviewer needs another pass Use REQUEST CHANGES only when there is a concrete concern to validate. Merely wanting to review again is not sufficient; coordinate with the author through comments instead.
Important follow-up issues must be filed Use REQUEST CHANGES until the issues are opened. The PR itself does not need to change. Once the issues are filed, the reviewer re-approves to clear the block.
A reviewer checks an insignificant update after previously approving or requesting changes Use COMMENT so the prior review status remains unchanged.
A reviewer has concerns but does not want to block merging Use COMMENT.
A reviewer wants another reviewer to make the final decision Use COMMENT and explicitly defer to the other reviewer.
Feedback is purely informational Use COMMENT; the reviewer is not gating the PR.
It is time to merge Either the author or a reviewer may merge if they are a maintainer. Whoever merges must confirm that the PR is actually ready, not merely that CI is green and the minimum approval requirement is met.
A concern was raised in discussion without an explicit REQUEST CHANGES review Resolve the concern before merging, even if GitHub technically considers the PR mergeable.
The PR must be held independently of its review status Apply do-not-merge/hold. CI blocks merging until the blocking condition clears and the label is removed.
A reviewer proposes a small, non-blocking edit Prefer a GitHub suggestion block so the author can apply it directly.
A review conversation has been addressed Resolve the conversation, preferably by the reviewer who raised it, so unresolved threads reliably represent open concerns.

Scenarios not defined

The current proposal does not establish rules for:

  • Multiple reviewers having outstanding REQUEST CHANGES reviews, including
    who dismisses, supersedes, or re-approves each review.
  • Ensuring that every requested reviewer gets a chance to approve before
    auto-merge runs.
  • The intended reasons for applying do-not-merge/hold, beyond its mechanical
    effect of blocking a merge.
  • When and by whom an existing review should be dismissed.
  • Requiring conversation resolution through GitHub branch protection. This was
    suggested during the PR discussion but is not part of the documented change.

Overall multi-reviewer policy

The proposal's effective multi-reviewer policy is:

  1. One relevant CODEOWNER approval satisfies the formal review requirement.
  2. Requested reviewers may review, defer, or bring in a maintainer with more
    relevant ownership.
  3. The maintainer who merges remains responsible for noticing and resolving
    outstanding concerns, including concerns that were not submitted as
    REQUEST CHANGES.

The more difficult coordination case—several reviewers independently requesting
changes—remains deliberately unspecified.

@ajbozarth

Copy link
Copy Markdown
Contributor Author

That summary is pretty solid, my opinions on a couple of the "Scenarios not defined" items:

When and by whom an existing review should be dismissed.

Unless there is a reason for a maintainer to dismiss a review only the reviewer should do so, I can specifiy this if necessary, but this is standard GitHub PR practice so I didn't think It was worth specifying

The intended reasons for applying do-not-merge/hold, beyond its mechanical
effect of blocking a merge.

I wanted to add this, but I couldn't come up with a list of good reasons without feeling like I was limiting its use by documenting them

@psschwei

Copy link
Copy Markdown
Member

The intended reasons for applying do-not-merge/hold, beyond its mechanical
effect of blocking a merge.

I wanted to add this, but I couldn't come up with a list of good reasons without feeling like I was limiting its use by documenting them

It may be that there isn't a good reason and we should get rid of it (wouldn't hurt my feelings)

@ajbozarth

Copy link
Copy Markdown
Contributor Author

It may be that there isn't a good reason and we should get rid of it (wouldn't hurt my feelings)

Oh I think there are good reasons to keep it. I just think that documenting the reasons I can think of myself would limit its use in the minds of those that read the doc. (ie if I doc its used for blocking due to upstream work or design decisions someone might read that and not use it for lets say "don't merge yet it will break another in flight PR" or "don't merge until after the release" etc)

@ajbozarth ajbozarth enabled auto-merge June 26, 2026 15:09
@ajbozarth ajbozarth added this pull request to the merge queue Jun 26, 2026
Merged via the queue into generative-computing:main with commit 398455d Jun 26, 2026
7 checks passed
@ajbozarth ajbozarth deleted the docs/pr-review-states branch June 26, 2026 15:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants