Be Nice and Write Stable Code
SemVer is a social construct, not a contract. It's nice when it applies, but you cannot rely on other developers to adhere to it.<p>One man's bugfix is another man's breaking change. If product A implements a workaround for a bug in product B, but the bug gets fixed in a patch version, it could break product A's code, so it becomes a breaking change. The only way to anticipate these changes is reading the change logs/release notes, and thorough automated regression testing. (Obviously unfeasible for every dependency.)<p>Maybe versions should be a single number, like a build number. It just gets tricky when you have multiple versions out there, each requiring patches.