Street parking with separate amenity=parking spaces

In regards to your question proper: I guess it is a fluent transition when one should still use separate and when no.

It helps to see it from the data consumer’s point of view. separate means that yes, there is a parking, but it is mapped separately. So, data consumers interested only in a lower level of detail, not wanting to process all those separately mapped areas, could interpret these as “yes, parking”. Data consumers interested in the full details interpret these as similar to “no parking”, to not count these twice.

The distinction between no and separate is thus only really useful for the former group, hence if the number of parking spaces in your example road is so small that it is almost “no parking” then I’d tag parking:<side>=no, even if there are a few parking spaces after all. In al other cases, I’d use separate.

You can also split up the road if there are sections with no parking at all.