ccb3da51ad
Running it against the live service exposed two gaps. It announced "App restarted" the moment the container existed, so the very next request got a 502 from an app that wasn't listening yet; it now polls /healthz until the app is actually serving. And it only checked that the archive contained the right files — it now opens the archived database and runs SQLite's integrity_check, because an archive that exists but won't restore is the worst kind of backup. End to end on the server, with a throwaway part and photo inserted to exercise the verification path: 2.6 seconds of downtime, archive verified, service answering immediately on return, throwaway data removed afterwards. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>