OK. I’m back Some thoughts on this:
a. It looks like the use case you are mostly thinking about is making sure that two writes (uploads) of the same resource (e.g., .ttl) don’t happen and overwrite each other. One possibility is the
If-None-Match header. Not sure if you’ve looked into that. However, at least when I tried this with the NSS, it didn’t appear to be implemented at least for PUT requests. I’m wondering if what could work in your situation (at least hypothetically, with Solid support) is if the web page had the last known Etag value, and then it made it’s modification HTTP request conditional upon that page still having that same Etag value.
b. Perhaps obviously, the situation gets considerably more complex if one is trying to resolve merge conflicts. My means of dealing with this in my application is that I have a custom server that does two things in this regard: 1) it serializes changes to the specific file in question in user storage, and 2) it uses file-type based conflict resolution algorithms to make the changes. The file types in this application are specialized and designed to always allow conflicts to be resolved without user interaction. To try to be a little more clear: Only a few of the files types in the application actually can be changed (beyond the first version of the file), and their file contents are structured in such a way as to allow conflicts to just not happen.
c. Even more generally, I think it would be great if we as a community had an ongoing discussion about the issue of handling conflicting file writes, conflict resolution, merges etc. in Solid. It might be argued that much of this should be handled by the client. But there might be useful primitives that can be incorporated into Solid that would greatly help the client architecture and ease application development. These primitives may be especially useful when applications are written without having an associated custom server. When you have your own custom server with the application you can take steps like I mention above to serialize changes to specific files. But having your own custom server adds considerable burden to application development.