We are currently actively designing the “application model” for mesh applications (and are thinking about the various types and related app experiences, some of which you mention below) – we will have more information to share about the specifics on this topic later this year.
The mesh synchronization infrastructure essentially detects conflicts at the DataEntry level – so in the case of file synchronization, this happens at the file file/metadata level. While the system is able to resolve conflicts “automatically” if needed, in general it leaves the conflict resolution logic to the application layer. For example, using the scenario you describe below where “two users are working on something and one saves right before the other” – the mesh user experience (e.g., Live Folders) will prompt the user with information about the two conflicting files and allow the user to select how they would like to resolve the conflict. This approach enables applications which are able to handle conflicts at different levels to apply the appropriate logic for their users. In other scenarios where multiple users may be editing different DataEntries within the same Feed in the system – the system will automatically apply merge semantics for the changes.