OP was suggesting not to have included backwards-incompatible changes, using deprecation warnings instead and branding it as a minor upgrade
I don't recall responding to a comment that mentioned using deprecation warnings instead. :/
Why would they do that? To have extra work and to have to carry deprecated garbage and compatibility ports for a few releases more, instead of making a clean new version?
Those that need compatibility can stick with 4 until they're ready.
In fact, they suggest the opposite: "Before you completely remove the functionality in a new major release there should be at least one minor release that contains the deprecation so that users can smoothly transition to the new API."
https://semver.org/#how-should-i-handle-deprecating-function...