Replies: 8 comments 19 replies
-
That's a good use for Discussions... and I've had similar thoughts myself over time but never paused to write them down, so thanks for pushing the conversation. I think the Gerrit model works a lot better here, but there's still need for some conventions and I've never managed to work out any clear protocol that's easy to follow and makes everyone happy. In general I agree with your suggested model, though I have a feeling it's not going to be quite so straightforward in reality. And at the heart is the fact that GitHub often makes "discussions" extremely hard to find, especially after many reviews, and through making files "Viewed" which I've found fairly important in managing the complexity of repeated reviews. A view that showed all the unresolved comments would be an enormous help here; without it I fear we're going to be thrashing in the dark more often than not. |
Beta Was this translation helpful? Give feedback.
-
Yes, of course the comments are there and can be exhumed; but it's supposed to be a code review, not a treasure hunt, and I continually gain the sense that GitHub has its own agenda in mind and doesn't care much about ours... |
Beta Was this translation helpful? Give feedback.
-
+1, that is the model I use with all of my PRs. Not to dismiss much of what you wrote, but fundamentally GitHub conversations is a very flawed model. They are attached to versions of code which are dropped by commits are amended, and they are displayed in some sequential fashion, with no facility to query which ones are resolved or unresolved, and whole groups of conversations will not be displayed. The Gerrit method of having comments attached to patch sets is fundamentally the better method, since the patch set is never removed, and the comments can be reviewed by patch set for a given commit. That said, given the current model, I think the owner of the PR should be responsible for resolving the conversation. If we agree that during a review we don't amend commits, then the conversations will be available off the commits, and if a reviewer does not agree with a conversation being closed, they can re-open it. |
Beta Was this translation helpful? Give feedback.
-
Good news, everybody! GitHub now offers a widget for getting a list of all of the unresolved (and all other) conversations! Unfortunately, it doesn't help you locate them except in fairly specific circumstances, but you can at least view the list. In any case, the conversations, even if they are attached to code lines which were later deleted or to commits which have since been amended, are always available on the main PR page (under the "Conversations" tab). You just have to scroll up, and possibly expand the sequence when GitHub elides it for you. If we are diligent about resolving conversations, then the unresolved ones are not hard to find. |
Beta Was this translation helpful? Give feedback.
-
Personally, I like to leave it up to the reviewer to resolve the conversation.
|
Beta Was this translation helpful? Give feedback.
-
This (#2113) is also discussed in #2555 and #2339. The fact that we have 3 discussions on this topic, and it is still a sore point with some means we need to deal with this going forward. And reading through this I don't believe the tool helps us deal with unresolved conversations. Too many times I have to track down a reviewer who just leaves a comment but approved the PR and the PR languishes until it is resolved. |
Beta Was this translation helpful? Give feedback.
-
The crux of the problem, at least for me and seemingly others, is 'Resolved' doesn't cover the actual use-case that such comments are trying to achieve. Instead of focusing on the tool, focus on the task. What are you trying to do with a comment requesting a change or even just asking for clarification? You're trying to signal to the author, 'Hey... can you address my concern here?' And that's the difference. An author is addressing the concern, or trying to, but it's the reviewer who can say if that does resolve the issue. But simply commenting back to the reviewer doesn't give them any signal where they can quickly say 'Show me all my issues that have been addressed' because a comment from the author has no state! That's why for me, what's missing is that interim step... 'Addressed'. It's something that lets an author signal back to the reviewer 'Hey... I believe I have addressed your concerns so get your eyes back on this.' This lets the reviewer quickly grep what the authors have or haven't (yet) addressed, and determine of those that have been if they're addressed satisfactorily, or to put another way... if they're 'Resolved!' If it's something simple like fixing a typo, then an author can and should be able to resolve them as that's not something a reviewer would need to 're-review', but for all other cases, they should exclusively use 'Addressed.' So to summarize, new comments from a reviewer puts the comment thread in the 'Unaddresssed' state. An author can respond themselves and/or move it to the 'Addressed' state. From there, the reviewer can quickly see what's addressed, and if appropriate, move them to the 'Resolved' state. If they add another comment, it goes back to 'Unaddressed'. That's my take anyway. Focuses on the task, not the tools. |
Beta Was this translation helpful? Give feedback.
-
Assuming that we yet have a number of pull request code reviews that we're going to conduct on GitHub, I think it might be handy if we shared some conventions around who marks a PR "conversation" as resolved and when.
I think its a good goal to have all conversations marked as resolved before a PR is accepted and merged. I'm not sure it's feasible to make this a hard requirement, but I think it's a worthy goal. Also, I think that, with some care, the open-vs.-resolved state can provide some nice support for us, indicating to the author of the PR (and the admin) when there are outstanding items or when there are issues which are under contention. The problem is, there is only one button, and it's not clear who is supposed to push it and what the conditions are which need to be met before it can be pushed. (Let's set aside for the moment that GitHub's presentation isn't the most graceful, and that it frequently hides conversations, even unresolved ones!)
A conversation starts with a comment on a code review from someone that we'll call the "reviewer". (For the moment, let's assume that it doesn't matter whether this person is an assigned reviewer or just a passer-by.) The reviewer might be making a comment, requesting a change, or asking a question. (Of course, just because it looks like a comment or a question doesn't mean it's not a request for change, and just because it seems to be a request for a change doesn't mean that it's not just a comment or possibly even a question, but I think the root of the communication falls into one of those three categories.)
If it's a comment, then the reviewer probably doesn't need anything more than acknowledgement that the author has read it and given it due consideration. In this case, having the author press the "resolve conversation" is probably sufficient. However, if the author feels inclined to respond to the comment, then we should probably treat it more like a question.
If it's a question, then the reviewer probably wants to see the author's response. This suggests that the author should not be the one to resolve the conversation: once the conversation is marked resolved, it is likely to be hidden at least one and possibly more clicks away from the reviewer's sight. Instead, it should probably be up to the reviewer to mark it resolved, assuming s/he is satisfied with the author's response. If the reviewer is impelled to post a followup, then the situation reverts to the initial state and we start only.
If the conversation begins with or reaches a request for a change, then things get murkier. Presumably, the author (if s/he agrees with the request) will make the change and request a new review from the reviewer. In the meantime, the open conversation serves as a reminder to the author of the outstanding issue. Once the requested change has been made and the reviewer is satisfied with the change, then the conversation can be resolved. Until then, the open conversation serves as a reminder to the reviewer to check for the change in the revised PR. So, here's the rub: until the author has made the change, both parties want the conversation open; once the author makes the change (long before the update is reviewed), the author wants it closed; however, until the reviewer does his/her re-review, s/he is best served by keeping it open.
So, to distill, it seems like the person who should mark a conversation resolved is the one who didn't "answer" or otherwise respond. That is, if the last post was a comment or answer, then the recipient (who doesn't otherwise respond) should mark the conversation as resolved (as an acknowledgement of the last post and in lieu of any other response). This works for conversations which start (or continue) as questions, with the questioner accepting the other party's answer by resolving the conversation. In the case of a requested change, the change itself is the answer or response, and the requestor should close the conversation when the change is accepted.
I think this covers things fairly well, but it does leaves us with two problems. First, the unresolved conversation list (if only it were actually available as a list!...) doesn't serve the author very well in terms of representing outstanding issues. However, perhaps this can be addressed by having the author make followup comments or by using emotes. These aren't as powerful as resolving the conversations, because they don't cause the conversations to be hidden from the author's view, but it's something, at least. Second, and more importantly, it doesn't support conversations with more than two people in them. However, these are uncommon, and in most cases it's obvious who the Reviewer is and who is just a Kibitzer, and the latter will just have to take his lumps -- if necessary, s/he can open a separate conversation to track his/her own facet of the issue and thereby become a Reviewer.
This was mostly just a brain dump -- it's not necessarily meant to be a concrete proposal. What does everyone else think??
Beta Was this translation helpful? Give feedback.
All reactions