d431f68013
parseBackendOwnership returned [] for unreadable JSON and reapOrphans unconditionally rewrote survivors — one corrupt read replaced the roster with [], permanently orphaning every backend it described. The sweep now detects corruption, parks the file as .corrupt (evidence preserved), and skips the rewrite; empty/missing files keep the legacy sweep behavior.