I’m pretty sure this isn’t compliant with the standard. Specifically,
Pre-releases of any kind, including developmental releases, are implicitly excluded from all version specifiers, unless they are already present on the system, explicitly requested by the user, or if the only available version that satisfies the version specifier is a pre-release.
Note that the final possibility is if the only available version *that satisfies the version specifier" is a pre-release. So if foo 1.0 and foo 2.0a1 exist, the standard says that foo>1.0
should pick foo 2.0a1. Your rules don’t do that.
Maybe what you do is “good enough”, but if you’re not following the standards, you need to either say so, or propose an amendment to the standards based on your real-world experience.