@smcgivern How much effort do you estimate it will take to find all places that touch squashing and add project.feature_available?(:squash_and_merge) checks to them (both on frontend and backend), so that this feature can be turned off for a specific project in its entirety by having that method return false?
@DouweM what happens to the API in that case, if you've already set an MR as squashable?
I think this would take half a day, but I don't know much about the front-end for the MR widget. In most places, I'd suggest defining a squashable? method / variable, which lets us wrap that check, and which we could also backport to CE where appropriate.
@smcgivern Right, sorry, I missed the relevance of "API". I think the idea is that if you don't have access to the feature, the API behaves exactly like CE, where that attribute doesn't exist. Applications that interface with GitLab should already expect slight differences between CE and EE.
@smcgivern Since this is going to be used in "Making EE the default" so that even users who only need/want CE can install EE and just use it without a license, the goal is to get EE-without-license to behave exactly like CE would by itself. So I suggest not surfacing those attributes if the feature is not enabled.