Three failures came from the same update path. Restoration stopped at the first
file it could not move back, so the application directory could end up without
ZapretKVN.exe — the user saw a restart where simply nothing happened. Each file
is now restored independently, and if the exe is still missing afterwards it is
copied from the extracted update: a working exe matters more than which version
it is.
The temporary directory is only removed on the successful path, so every
interrupted update left an extracted build and its archive behind. The user had
accumulated more than two gigabytes of them. Abandoned directories are now
purged before a new attempt.
Switching a node gave the control plane two seconds and no second chance. Under
disk load, or right after the core starts, that timeout expired, the switch was
reported as rejected and fell back to a full core restart — which is why it
looked random. The call now has room to answer and retries, while a refusal from
the core itself is still final.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>