Right, in general I agree, but it wouldn't be the case for everyone because of knowledge requirements for Best Effort. Because of that, the above benefit is illusory to a user in the actual modding scene. Again a "business" has the expectations of quality control that you are speaking to because they have infrastructure dedicated to acquiring talented and knowledgeable staff to interpret and implement the requirements. That is simply not the case here, and so enforcing helps some and hurts some - with it causing the most problems for those just starting out. It certainly brings value to a modder who understands all the requirements, no argument there - it is just that it is disingenuous to assume that all do. That wouldn't be a problem in and of itself, but as those who understand the requirements raise user expectation in this way, those who don't suffer a larger penalty of "user disappointment" that they don't.
The various systems we are discussing in this thread are optional, and not enabled by default (only warning will show on tooltip using logic Alex already has).
New modders and/or ones that do not want to learn (improve) should simply ignore the (in whatever form we get, if any) forced save incompatibility.
Without this modders that would want to make their lives easier (and can afford the cost of following whatever is decided) cannot, and like the rest, will have to default to costly "forum thread" support.
Yes, one could argue that "users don't read" and "forum support" will still be a thing, but at least the number of posts per release should drop (because some users do read, it's just now they get stack-trace when mod fails to load (or worse, during the gameplay later)).
I really fail to see a difference except the key one: best effort isn't a guarantee. Your example, of course, has no downsides because marking an update incompatible when it is, in fact, compatible leaves the user none the wiser. What about the reverse? You mark it compatible and it is not. Keep in mind, a user won't always know this when trying to load the save. Off the top of my head, they have a ship with a hullmod equipped in storage on some market somewhere and that hullmod was removed in the current (supposedly compatible) update. They won't get a crash until probably interacting with that market, etc. (Not really sure if this is true anymore, but it was at one time.)
We have two problems here:
* False positives (modder claiming mod is save compatible while it is not), and
* False negatives (modder claiming mod is not save compatible, while it is).
We already discussed the second case - regardless of modders reason to mark update as save incompatible (mistake or deliberate decision) user experience will not suffer, and modder benefits will not be affected.
As for former, mistakes happen. Without thorough testing it is impossible, and even then mistakes will happen.
Experience, and having a test plan that covers most use-cases help (in my case I have a save from all my versions, where I have all assets from my mod on "me" and try to load all saves with the new version).
Again, this being optional - modders that cannot accurately assess the compatibility can decide not to opt to whatever system we get.
Either way they will have false positives and negatives, only this time in a form of a forum thread.
Maybe I'm missing something here? I don't see how having internal exposed in the version, itself, helps make it more clear to the end user what their course of action should be. Like, if you release 23.1.3.4 and one user has 22.4.1.0 and another 23.0.8.5 there is still a lack of clarity what version to revert to unless the version of the save itself is exposed to the user (which it is already, right?). If you are speaking to the idea that the version is stored in the save file and the user can be pointed to it explicitly that way, then why does internal even need to be exposed? It would point to the version the user was last using regardless, and that version is guaranteed to be at the compatible internal level of the save...
User with 22.4.1.0 that upgraded to 23.1.3.4 should revert to latest 22.x.x.x.
User with 23.0.8.5 does not need to revert, as line 23.x.x.x is save compatible with any previous versions in that line.
In both cases we can present user correct version to downgrade (download latest Z.x.x.x, where Z is already stored in a save-game).
If a user's save is 1.4.4 (internal 22) and the release is 2.0.0 (internal 23), it doesn't matter whether a 1.4.5 (internal 23) exists or not, the message would still point the user back to the save's version (1.4.4 internal 22). Trying to be extra smart and say "Hey there is a 1.4.5 (internal 23) - go try that first!" - wouldn't be possible even if the versions were, respectively: 23.2.0.0 - 22.1.4.5 - 22.1.3.0. The message is still going to be pointing the user to their save's version - 22.1.3.0 even if, via the version control, 22.1.4.5 would technically be compatible.
"the message would still point the user back to the save's version (1.4.4 internal 22)." the message could and only would point to the version the save game uses. There could be 1.4.4.1 (22) but we could not advise the player to try 1.4.4.1, nor mention hidden internal 22. Only with exposing internal could we show user which line is compatible (use latest with suffix -22).
"Hey there is a 1.4.5 (internal 23) - go try that first!" is wrong, user is on 1.4.4 (internal 22) so he can only use internal 22 (1.4.4).Also, same as above, we can get Major from save and tell user to user downgrade to the latest Major release.
Let's shift a discussion a bit:
I don't think "at a glance" compatibility via the suffix implementation is worth entangling content and compatibility into the same number. That, I believe, was Tartiflette's point. What you at least seem to be thinking of in this case, is when a user asks why their save isn't loading and all they have is their current version number. It would would be useful, in some ways I suppose, to have at-a-glance compatibility then. Even that is a little suspect, come to think of it, because you'd still need to know the version the save is trying to reference - so you're back at square one. But when considering the warning message when trying to load a save? All pertinent information is already available from the perspective of what such a feature is trying to accomplish.
The essence of Tartiflette's internal is: hide Major (from SemVer point of view). So now we have Content.Minor.Patch, with Major (internal).
SemVer applies, but we have no idea what the Major is and what versions are compatible.
The essence of my "expose internal" is to bring back Major to Version, but consider it being elsewhere so that modders desire to be the first number a Content (large updates) be met.
Thus few explorations: Content.Minor.Patch-Major, Content.Major.Minor.Patch, Major.Content.Minor.Patch.Last option makes most sense as we take first part of version (but Content is not the king here), first option is second best (as for compatibility we take first part).
None of this by default would enforce save loading prevention (only when mod opts in), but all of this would (by having Major visible) direct user to correct version to downgrade to.