Your “worth considering” is excellent advice for evaluation all the time. Indeed, when I first started the library I tried ordered maps The problem is, ordered maps are second-class citizens in Clojure and have lots of issues with normal functions converting them back in to unordered maps. Since I am moving toward a solution that further involves storing them in a database and retrieving them there, using ordered maps would just be asking for problems.
The idea of using an id key is a good one. But the idea of a path is to be able to use it in a function that operates like (get-in structure [:meaningful1 :meaningful2]), and the solution is non-obvious for a function that uses something other than the primary keyword for that purpose. I guess you would have to manually implement a lookup table that links ids to the map keywords, in which case you are running perilously close to bad complexity…
specter, though, looks like it might just be what I need. I haven’t looked at it with this project in mind, and had forgotten how promising it is. Thanks!