persistPreviewAsset
abstract suspend fun persistPreviewAsset(assetId: String, sourcePath: Path, assetDataSize: Long, extension: String?): Either<CoreFailure, Path>
Copies a caller-owned preview into the cache without ever deleting the source.