Currently, the acceptance condition for revisions is always:
- no blocking reviewers;
- no reject-current reviewers;
- no reject-previous reviewers; and
- at least one accept-current from a user (not a project).
When these conditions are satisfied, the revision transitions to "Accepted". Several installs have expressed interest in alternate acceptance conditions, particularly: all reviewers must accept and at least N reviewers must accept.
In the modern codebase, implementing alternate conditions per se is fairly straightforward. What's difficult is the stuff at the edges -- like configuring this stuff (the original request asks for this to be a per-revision option, and even if it's a global option we probably need to track it per-revision so things don't go goofy when it's changed, and most of the "N reviewers" use cases don't sound like users should be able to change it easily), making sure users understand what they need to do in order to get a revision accepted (i.e., "you need 2 more accepts" vs "you still need alincoln and htaft to accept"), getting revisions to bucket properly on the default revision list based on the acceptance criteria, and making reviewer status clear under these alternate conditions (e.g., if the rule is "all", every reviewer is essentially a blocking reviewer, and the UI should probably reflect that). Essentially, changing acceptance conditions touches a lot of interfaces, even though the core of it is a very small change.
Another area of interest is specific reviewers must accept, but blocking reviewers seem do do a reasonable job of that. T1279 discusses some improvements to make them less unwieldy.
(Once T1279 implements the reviewer! syntax, the original request would probably be served with Reviewers: a!, b!, too.)
We have some complex code that often requires sign off from more than one engineer when a change is pushed. Can phabricator add an "all or nothing" review approval checkbox such that a review must be approved by each person CC'd or added as a reviewer? At the discretion of the developer to click the checkbox.