I finally had some time to test org-roam links behavior and your repair function.
First of all, thanks for clarifying the actual functionality of roam: links, it makes the whole discussion clearer.
After a few tests, I am definitely convinced by your repair mechanism. It works very well, I was surprised that all my test links were repaired without any action on my part, just by saving the newly created node’s buffer. I originally thought that I would have to call it interactively, or add it to a ‘buffer save’ hook myself. That must be what you refered to as the ‘buffer-save’ protocol in some of your posts. I was not aware of this mechanism. It makes the process completely transparent so there is actually no reason I can think of not to use it. Except maybe the buffer saving performance issues you talked about, but I have not experienced this kind of inconvenience so far.
As I was saying earlier, this repair mechanism only makes sense to me now that I understand how to use roam: links properly. It would integrate very well with the first instinct I had to give temporary ‘placeholder’ titles as the roam: target ID for my dangling links while still in the early writing/canvassing process. This does not constitute a major interruption of the flow of writing IMO because, even if I need more consideration to find a descriptive and meaningful title, I instinctively always have some kind of variable name(s) in my mind to address the content of that ‘future node’ when I think about it.
I should add that where the repair function would really shine IMO, is when completing a writing project the ‘Zettel’ way using many distributed notes. When I started this thread, I was writing a structured manual in on single file, and wanted to link sections not yet created which I also use as a reminder/task for the need of a future section. But I was always reluctant to write structured pieces in a distributed manner, like a note per chapter or section by fear of it being impossible to maintain. Writing is an iterative process that requires a lot of reviewing, restructuring and modifying (depending on the nature of the piece of course), and I never felt comfortable starting a project this way. Maybe I will give it a try using roam: links and these two ‘dangling links’ functions.
So thanks for this addition, I think that was a very good idea, and really improves the writing and reviewing process in my opinion.
This brings me to your ‘node title change propagation’ project. If I understood correctly, the idea is to update all id: (and :roam ?) links pointing to a node which title is being modified. The description part of those links would then be updated to reflect the new node title state. I also assume that a mechanism would be in place so that only links descriptions are only modified if their description matches the old title state of the modified node.
To illustrate my assumption more clearly I hope:
- Modified node: id = 999, old title = ‘foo’ , new title = ‘bar’
- link 1 =
[[id:999][desc:foo]]
- link 1 becomes
[[id:999][desc:bar]]
- link 2 =
[[id:999][desc:something else]]
- link 2 remains
[[id:999][desc:something else]]
If my understanding of your ‘title change propagation’ idea is correct, that would answer a persistent frustration of mine across all my attempts at ‘Zettelkasten’ implementation. Namely, the difficulty of maintaining structure notes link descriptions when modifying notes titles (here is a link to an article describing the concept of strucuture notes in case that helps some readers).
Even if I rarely use the node’s titles in links descritptions, I always do in structure notes, and it is an important part of the ‘Zettelkasten framework’. Personally, I think this could be a nice addition as well to keep notes up to date and organized with less effort.
I would have reservations though for a user who actually manages to use node titles as is in their link descriptions, and semantically integrate them in sentences. For them, that could end up messing up their notes meaning…