Look at this PR for several examples of "requested changes":
Look at this PR for several examples of "requested changes":
[1] https://docs.gitlab.com/ee/user/project/merge_requests/index...
With that setting there's no native way to distinguish between threads that are intended to be blockers and threads that are just comments. They all must be closed regardless of intention before merging can happen, and because there's no way for the commenter to signal their intent that process is error prone. If anyone and everyone can resolve comments then you'll get merges that shouldn't have happened. If only the commenter can resolve comments then you introduced a ton of friction in cases where a comment was just a comment.
It's not that you can't accomplish the same workflows with GitLab's current features, it's just the GitLab doesn't help you the way the other forges do.
This may have merit if your default workflow mindset was all threads are non-blocking unless an explicit "request change" action is invoked.
GitLab's unresolved threads simply comes at it from the inverse perspective of all threads are blocking unless intent to move forward is explicitly conveyed by positively marking threads resolved. If the objective is to avoid unintended merges that manifest from inattentiveness and/or poor communication, then this is clearly the safer approach that preserves accountability.
In the case of just a comment, I see any friction created there as a direct result of poor communication between collaborators; if you can't unambiguously decide whether an in-thread comment is non-blocking/unactionable, then clarity of intent wasn't clearly conveyed to begin with.
Another thing that I thought was presumptive with this "requested changes" flag is that it signals that you want to see code change, but maybe your intent is to block a merge until the PR submitter is given an opportunity to more clearly defend an implementation decision, which may or may not result in a change.
Between draft marking, unresolved threads, and approval rules[1] to safeguard against unintended merges, I struggle to see how GitLab could possibly help me more.
There's a part of me that feels like differences in value perspective are driven by what's generally effective for open distributed collaborations v. the needs of closed enterprise teams.
[1] https://docs.gitlab.com/ee/user/project/merge_requests/appro...
Say I, as a senior engineer, scan a junior’s MR and see a serious security issue. In GH I can request changes, and then re-verify prior to merge that the issue has been fixed correctly. With GL, the author, thinking they fixed it, can resolve the comment and merge.
In any case, setting unresolved threads as blocking is just a safeguard layer. The scenario you describe is a routine encounter for me. Really sounds like the technical control you want is required approval(s)...of course, GitLab sales recognized that's what enterprise managers also highly value, so it's bucketed as a pay-to-play Premium/Ultimate feature.
> of course, GitLab sales recognized that's what enterprise managers also highly value, so it's bucketed as a pay-to-play Premium/Ultimate feature.
And this is my number one complaint with GitLab. There's no way to pay $4/mo for the basics. If you want required approvals you have to pay for their whole CI system even if your org is already using Jenkins, and for their issue tracker even if you're using Jira. They're all or nothing, and most organizations don't want all.
This is why I say that the only people they're trying to appeal to are enterprise purchasers who like the idea of paying for an all-in-one "solution", not frontline developers who recognize that bundling isn't always better and just want to have a decent system for managing their code reviews. GitLab isn't that: not only is their code review system still missing features that people rely on in GitHub, the ones it does have are gated behind a subscription whose cheapest pricing manages to be more expensive than GitHub's most expensive tier.
Even more adversarial, why not just exploit the implied race condition of your process by having a new PR submitted for another maintainer to merge before you get a chance to block it?
If we're still in fact talking about a scenario involving a group of maintainers with equal authority over a protected branch, all I see is the inescapably human dilemma of collaborative communication and network of trust.
But if one "maintainer" has the asymmetric capacity to immutably block all others, then the goalposts have moved and we're not really talking about just maintainers with equal pull.
On an opinionated note, if there's anything I learned about embracing Microsoft, it's that you can't judge true TCO by merely comparing superficial sticker prices.
[1] https://docs.github.com/en/pull-requests/collaborating-with-...