Plugin version installs now swap in atomically after comparing the new and old file trees under a size budget
Installing a new version of a plugin now goes through a new subsystem that first compares the newly staged version's files against the currently installed copy, checking permissions, ownership, hardlinks, binary hook files, and node_modules, within a limited comparison budget. If the two are identical, the existing install is kept as-is. Otherwise, the old copy is atomically moved aside, the new version is published in its place, and the old copy is restored automatically if the swap fails partway through. On Windows, where directories can be temporarily locked, the swap retries with backoff, and it also guards against races when two installs happen at once.
This makes plugin version upgrades safer: an interrupted or failed update no longer risks leaving a plugin half-installed, and identical reinstalls are skipped rather than redone unnecessarily.