StorageOverrideError (introduced in backend PR #36) raises uncaught through the settings.projects_dir property (app/core/config.py:38-43). Since nearly every request touches that property, one corrupt or truncated override file turns the entire API into 500s — the app is down until someone SSHes in and deletes the file.
The atomic-write change in the same PR makes corruption unlikely, but the blast radius is wrong. Catch the error at the property (or at startup), log it loudly, and fall back to internal storage — the same behavior the unmount path already has, where removing the active external drive auto-reverts the override. A visible warning in the UI ("external storage override was invalid; using internal storage") beats a dead appliance.
StorageOverrideError(introduced in backend PR #36) raises uncaught through thesettings.projects_dirproperty (app/core/config.py:38-43). Since nearly every request touches that property, one corrupt or truncated override file turns the entire API into 500s — the app is down until someone SSHes in and deletes the file.The atomic-write change in the same PR makes corruption unlikely, but the blast radius is wrong. Catch the error at the property (or at startup), log it loudly, and fall back to internal storage — the same behavior the unmount path already has, where removing the active external drive auto-reverts the override. A visible warning in the UI ("external storage override was invalid; using internal storage") beats a dead appliance.