Sync Snapshot
data class SyncSnapshot(val entries: List<SyncEntry>, val isEmpty: Boolean = entries.none { it.source !is SyncSource.Absent }, val allowShrink: Boolean = false)(source)
The complete desired remote set. Anything the engine knows about that is not here gets deleted.
isEmpty tells the engine the app's data is empty even when scaffold files (an empty manifest, a settings file) are still listed; it drives the empty-over-existing guard. The default is "no entry has a source", which is right only for apps without scaffold files.