A shell file the shell could not read is not overwritten
A change merged into quattro leaves a shell configuration the shell could not use in place, so a later bar change does not replace that file with the defaults.
A shell.json that fails to parse, or parses without version 1, makes the shell run on the shipped defaults. Every bar change went through the save, which wrote whatever was in memory to the file. After a hand-edit typo, the next right-click on the clock, a widget drag, a tray pin, or a bar setting replaced the whole configuration with the defaults, with no backup.
The shell records when the file has text it could not use, and the one place it writes that file leaves the file alone while the shell still cannot use that text. The change still applies in memory for the session. Once the user corrects the file, the file watch reloads it and changes are saved as before. An empty or missing file is unaffected, so a first run still creates it.
A file that exists but cannot be read, and a change made in the moment between a corrupted file and the shell's reload of it, stay outside this guard.