Sync Entry
data class SyncEntry(val path: String, val source: SyncSource, val size: Long, val hash: String? = null)(source)
One file the app wants mirrored. hash (use sha256Hex) makes the entry hash-compared; null makes it size-compared, which suits write-once media. Hash-compared entries upload in snapshot order after the size-compared ones.