I admire your aim, but the reality is:
• routes which are relatively straightforward “thru routes” that don’t have a lot of complications or segmented routing are largely bidirectional
• routes which are NOT relatively straightforward and DO have complications (many roundabouts, many separated routing segments…) are largely unidirectional.
I don’t think you will find much consistency there, because both unidirectional routes and bidirectional routes are VALID routes (in the OSM sense of a route expressed as a relation, with the tagging we specify). Mappers: learn to parse both, as both exist. Routers, renderers, other downstream use-case parsers, learn to parse both, as both exist. And both are valid.