I’m still a bit confused – this is certainly pure python package, i.e. no architecture specific, but apparently not completely Python-version independent.
Hmm – astroid itself is python-version-dependent. But there are builds of 3.* for python < 3.12, so this selector is needed (unless the upstream has it wrong…)
You could technically have a series of noarch: python packages with some Jinja trickery, but in most cases it’s not worth the trouble; as you said, you can take the strictest subset and you are good to go.
In other cases where the constraints are not really compatible (e.g. astroid<2 and astroid>=2 for two different Python versions), then the simplest thing is to abandon noarch.
Several noarch packages are really a last resort if you had a HUGE matrix.