idea of semver is that you bump the Z value, the "patch" version any time you release any kind of bugfix that doesn't change the API. In theory, it's always safe for users to upgrade to a new patch release. You change the Y value, the "minor" version, if there's an API addition or modification, but the semantics of the program are roughly the same, and existing programs "should" still work. (Should is naother red flag.) You bump the X value, the "major" version, whenever there is a fundamental change to the architecture or semantics of the program. Of course, in real life, you dont' know that a bugfix won't break some internal untested edge case that caused someone else's program to work by accident, even though it wasn't documented or anything.