It sounds like the real issue is the "stable ids" one. You need a Single Point of Truth that matches up stretches of waterway with an ID that won't change. You can then sprinkle .isNavigable and such onto your record along with a reference to that magic ID. But yeah, if they don't provide is, they're not a very good point of truth.
I have to deal with this in my little bouldering database as well, since the source I mentioned does in fact change or reuse its IDs every so often. There's already a periodic update that has to happen on any given boulder problem, to pull down changes from the other end. That also needs a way to self-heal if a record at the other end splits off into two pieces, and my ID now points to the wrong half of it.
It's all stuff you have to keep on top of, but your idea of keeping your own table with each record pointing back to OSM seems like the only path that avoids madness. Even it it does take some work to keep those references up to date.
OpenStreetMap does not and cannot offer permanent IDs. An entity might be mapped in more detail, resulting in something being split in two parts, or change from node to way, with wildly different IDs.
At the same time, a point might be repurposed as something else entirely.
Comments
It sounds like the real issue is the "stable ids" one. You need a Single Point of Truth that matches up stretches of waterway with an ID that won't change. You can then sprinkle .isNavigable and such onto your record along with a reference to that magic ID. But yeah, if they don't provide is, they're not a very good point of truth.
I have to deal with this in my little bouldering database as well, since the source I mentioned does in fact change or reuse its IDs every so often. There's already a periodic update that has to happen on any given boulder problem, to pull down changes from the other end. That also needs a way to self-heal if a record at the other end splits off into two pieces, and my ID now points to the wrong half of it.
It's all stuff you have to keep on top of, but your idea of keeping your own table with each record pointing back to OSM seems like the only path that avoids madness. Even it it does take some work to keep those references up to date.
OpenStreetMap does not and cannot offer permanent IDs. An entity might be mapped in more detail, resulting in something being split in two parts, or change from node to way, with wildly different IDs.
At the same time, a point might be repurposed as something else entirely.
You could store the ID in a tag. They already do this for e.g. wikidata[1] and gnis[2].
Though I kinda doubt they want to support maintaining these for every single project that wants one.
[1]: https://wiki.openstreetmap.org/wiki/Key:wikidata
[2]: https://wiki.openstreetmap.org/wiki/Key:gnis:feature_id