setProgressAsync (fire-and-forget) was dropping/coalescing updates before they were persisted. Switch to awaited suspend setProgress() in both UploadWorker and DownloadWorker so each progress write lands and the LiveData observer actually sees pct advance.