I will give you vision on this (there are many others though as you already found out):
First, do not decide what to (and how to) map stuff based on how it looks in a certain map (mapnik or osmarender, or any other). Map stuff as it physically is, then adapt the renderers to render the images properly is the consensus about this.
As for mapping cycleways I have two rules: If a cycleway is physically detached (i.e. separated by a grass strip, a wall, trees, etc.) from the adjacent way, I add a separate way with ‘highway=cycleway’, others might tag it as ‘cycleway=track’. If the cycleway is part of the way (e.g. a different colored surface on the road, dividing lines, etc), I map it as ‘cycleway=lane’.
You can find lots of cycleways in Apeldoorn (The Netherlands), just scroll around…
I have followed this approach as well, but come now to a point where I might change my view. In the mapping features it states that for highway=cycleway that names are currently not rendered. For cycleways that is not required as the “main” road has the same name and that is currently rendered.
A logical consequence is then: if there is a highway=… name=xxxx and the name=xxx holds for the highway=cycleway as well, use the tag cycleway=track. Only for cycleways without a related main road, use the tag highway is cycleway.
Sorry that it requires redo. The Apeldoorn environment is one of the best for cyclist as far as i have seen so far.
I am working around Heemstede and there are quite some cycleways which are tracks (cycleway=track), but 2 ways for cyclists. I think that the value: opposite_track can be used. Are there situations known where that leads to an ambiguous situation? This what I would like to model (Dutch situation),
I like to think that highway=cycleways in general allow traffic to flow in both directions. Where this is not the case I add oneway = yes
Also, a cycleway=track is generally considered oneway so a second tag has indeed to be added when cyclists are allowed to cycle in both directions. One can do that with cycleway=opposite_track as you describe above, or perhaps using oneway=no.