publishDirectory moved a finished product into place with one renameSync. On Windows an antivirus scanner opens every freshly written file, so the rename onto build/native-deps (right after hud-modifier-monitor.exe is compiled) or hermes_cli/web_dist failed EPERM and threw away a build that took minutes. retryHeld retries EPERM/EACCES/EBUSY for about 3s and raises every other code at once. All three publication renames use it, as does the HUD helper's staging rename. The previous product's backup now sits beside the output instead of inside withProduct's scratch tree, so a rollback that also fails no longer has its only copy deleted by scratch cleanup; the error names where it is. Co-authored-by: dskwe <6286305+dskwe@users.noreply.github.com> Co-authored-by: juliorobertoalvarez <39749815+juliorobertoalvarez@users.noreply.github.com> Co-authored-by: bighamx <10262931+bighamx@users.noreply.github.com> Co-authored-by: lzmuhioin <1814826+lzmuhioin@users.noreply.github.com>