Development of support for ETags in rdflib.js is currently tracked here: Use If-Match header with latest known ETag in update manager · Issue #482 · linkeddata/rdflib.js · GitHub
I should have noted in the other thread that a trivial way of getting atomic transactions is to group objects in one resource and replace the entire resource at once.
In principle if you wanted ETags for each thing you could also store one thing per resource.
A peculiarity of allowing data interoperability is that another app could modify your data in a way that doesn’t respect this kind of metadata.
I would therefore definitely use Etags on the resource, because that is provided by the server. Append-only permissions for some resources and client-side conflict resolution are probably also part of the solution.
Beyond that, any solution you come up with should probably be tested against the possibility of third party changes.
This is definitely an area that’s in flux.
See also discussion here: Request for Comments: CRDTish approach to Solid
Note also that full implementation of RDF shapes and footprints would in principle allow the server to control what is saved and in what form, but this still seems to be quite far out still.
You might also be interested in how remote storage tackles conflict resolution: