D pull request review process -- strawman formal definition, query for tools

Steven Schveighoffer schveiguy at yahoo.com
Thu May 9 14:10:53 PDT 2013


The review process for D pull requests is basically non-existent.  We need  
to change this.  Without any understanding of how the process works, both  
reviewers and pull requesters are left to their own devices and  
assumptions to determine what is going on (see recent anecdote on a pull  
request: http://forum.dlang.org/post/kmdp2n$at4$1@digitalmars.com ).  We  
currently have a nice (informal but defined) process for large library  
changes, and it seems to work well.  We should do the same at a smaller  
scale, for pull requests.

I want to define a process for a requester to follow in order to submit a  
pull request, including pre-review requirements, objective measurements  
for acceptance, and review workflow/schedule.  We also need a way to have  
people generally responsible for reviews.  At the moment, reviews are  
ad-hoc, with no clear schedule or assignment.  This can result in  
misconceptions and bit-rotting of pull requests.  We need to try and  
present a friendly and inviting process so that people actually WANT to  
contribute (see previously mentioned thread).  I realize this is a large  
commitment, but if we don't have some sort of responsibility (myself  
included), we won't do it.  There are a lot of unpulled pull requests, and  
I think this can be a very detrimental/demotivating thing for a  
community-driven project.

To that end, here is a strawman for discussion.  This is for druntime and  
phobos only, I don't know if this will work for dmd or other projects:

1) pull request prerequisites
    a) pull must pass auto tester before being reviewed.  If you submit a  
pull request and it fails, you need to fix it before a review can be  
done.  Exceptions can be made if the auto tester isn't able to test the  
code properly (e.g. you have a pull for phobos and a pull for druntime  
that depend on each other).
    b) pull request description is sufficient to understand the reasoning  
behind the request.
    c) any related bugzilla requests should be identified.  If this fixes a  
bug, the bug MUST be in bugzilla before pull request is reviewed.  It is a  
good idea to make sure this is actually a bug before creating a pull  
request!  Use the forums/newsgroups.
    d) If pull request is for a large feature (e.g. replacement or addition  
of a module), the library change voting process should be followed on the  
newsgroups instead of this process.

2) pull request review process stages
    a) submitted - pull request awaiting initial verification of pull  
request prerequisites.
    b) unassigned - pull request passes prerequisites, and is awaiting  
assignment to an approved reviewer (process for assignment TBD)
    c) ready for review - pull request is assigned, but reviewer has not  
started looking at it.
    d) official review - pull request in review by reviewer.  Next stage  
can be e - h.
    e) needs work - pull request needs work to be able to be accepted (only  
use this stage if original requester is not immediately responsive).  Go  
back to c after fixed.
    f) rejected - pull request is rejected.  Can be re-opened by another  
official contributor.
    g) approved - pull request is approved for pull.
    h) conditionally approved - pull request is approved, but with minor  
changes (e.g. comment or ddoc changes).
    i) pulled/closed - pull request is approved by second reviewer (this  
does not need to be an in-depth review)

3) Objective measurements required for pull.  All pulls must pass these  
requirements, plan accordingly.
    a) Passes auto-tester on all platforms.  Exceptions can be made if the  
auto-tester fails because of a limitation in the auto-tester, but must  
pass unit tests on at least one failed platform if that is the case.
    b) Code is formatted properly (TBD).
    c) 2 reviewers must approve of the feature.  Secondary review does not  
need to be in-depth
    d) License must be boost.  Any copyrights must be CORRECTLY attributed  
to authors in the designated comment area (if you used code from somewhere  
else, you must include the appropriate copyright information, and the  
license must be able to be re-licensed as boost).  Any large port of code  
should include a courtesy link to the original project unless the original  
project's author is OK with not including the link.
    e) Any related bugzilla entries must be referenced BY LINK in the pull  
request, and the bugzilla entries must reference BY LINK the pull  
request.  This is the requester's responsibility to set up.
    f) Any public-facing code must be properly documented for DDoc to  
generate.  At this point, the actual docs don't have to be verified as  
properly building (because it's freaking annoying to build them).  If the  
auto-tester is able to do this at some point, then this would become a  
requirement.

4) Reviewers' roles and responsibilities.  I am not defining how a  
reviewer gets assigned, not sure how that should work, and it likely  
depends on the tool we use.
    a) When reviewer accepts role as primary reviewer, he/she should review  
the pull request or decline the role as soon as possible.
    b) if the role is accepted, the reviewer should review the pull request  
within a reasonable time frame (what is this, a month?  a week?), or at  
least acknowledge how long they think it should take to get to it.   
Feedback is very important so contributors are not discouraged.
    c) once the review has started, for complex pull requests (or issues  
with the reviewer's schedule) that would require more than a few days or  
so to review, the reviewer should note this.
    d) If there are extra volunteer participants during the review, the  
reviewer should moderate the discussion and comment on review criticisms  
that are not clear-cut.  In other words, the reviewer should be the  
official word on whether a criticism is valid and requires a change.  Not  
sure if there should be some sort of appeals system.
    e) Primary reviewer is responsible for ensuring any objective  
measurements are fulfilled that AREN'T automatically handled (we should  
handle as much as possible automatically).
    f) Secondary reviewer does not need to do an in-depth review.  This  
should not take more than 5-10 minutes.
    g) The primary reviewer is responsible for changing pull-request status  
in whatever tool we choose to track this.
    h) One of the reviewers (not sure if it should be primary or secondary)  
should close any bugzilla bugs fixed by the pull request.  Can this be  
automated?

==================

OK, so now to implement this kind of thing, we need to have a  
collaboration tool that allows tracking the review through its workflow.   
No idea what the best tool or what a good tool would be.  We need  
something kind of like an issue tracker (can github issue tracker do  
this?).  I don't have a lot of experience with doing online project  
collaboration except with D.  I like trello, but it seems to have not  
caught on here.

-Steve


More information about the Digitalmars-d mailing list