Originally https://stackoverflow.com/q/58816567/369489
- There are tow separate projects within the same organization:
P(product, at versionp) which depends onL(library, at versionl).plistslin its dependencies and all is well. - The new feature
Xrequires changes to bothP(->p+1) andL(->l+1). The changes are such thatpwould not work withl+1. - For some reason (don't ask) the changes in
Lare approved but the changes inPare not: latest version ofLis nowl+1butPis still atp. No problem (yet) becauseppoints toland notl+1so although the latest version ofLis indeedl+1but sinceP(which is still atp) is not using it (yet) , no problem (for now). - A serious bug in
Lis fixed (->l+2) andPis updated (->p+1) to use this new version ofL(->p+1depends onl+2) butl+2hasXin it (since it was branched off ofl+1, the latestLat the time) ->p+1does not compile because theXparts ofPare not approved yet (step 3 above) !
Question 1: what is the best way to proceed in such a situation ? at the moment the solution is to revert the X in l+2 to create a l+3 which is: (l + bug fix) - X.
Question 2: how can we come up with a release process that avoids such situations altogether ?
l+1l 2.0. Then, if a bug is found and1.0still supported it would have been backported to1.1. Obviously this imposes some maintenance overhead on the library developers but this is inevitable. TL;DR: semver, used properly, is specifically designed to solve this exact problem.