From 00b26b3e1e7036154303e21174995c074569ac1c Mon Sep 17 00:00:00 2001 From: Inferencebot Date: Fri, 30 Oct 2026 21:23:48 +0000 Subject: [PATCH] =?UTF-8?q?migration:=20point=20=C2=A75=20at=20verify-rest?= =?UTF-8?q?ore.py,=20the=20executable=20post-restore=20check?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Diffs the restored server against migration-before-state.json: app inventory, env var names, image tags, backup target, portal row counts, DNS, federation, mail ports, site responses. Dry run 2026-10-30: 50 pass / 1 warn / 13 fail, every failure explained by pre-cutover DNS or port 25. --- cloudron-server-migration.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/cloudron-server-migration.md b/cloudron-server-migration.md index a1a9c67..fe1007c 100644 --- a/cloudron-server-migration.md +++ b/cloudron-server-migration.md @@ -196,6 +196,17 @@ and a spot-check misses. ## 5. Post-restore verification +Run `python3 ~/.hermes/scripts/verify-restore.py` from the **agent** host — it stays up through the +migration, so it is the one machine that can judge the new box. It diffs the restored server against +`migration-before-state.json`: app inventory, **env var NAMES** (a lost var comes back as an app that +will not start), image tags, backup target and schedule, portal data fingerprints (row counts must +never drop), DNS, federation, mail ports, and whether each site answers. Exit 1 = at least one +regression. `--quiet` prints failures and warnings only; `--only ` runs one group. + +Run it **before** cutover too: DNS and port-25 failures are expected then, and they are exactly what +cutover is meant to clear. The 2026-10-30 dry run gave 50 pass / 1 warn / 13 fail, all 13 explained +by pre-cutover DNS plus port 25 — the point is that no *unexplained* failure appears. + - [ ] Dashboard loads with a valid certificate; all 16 apps `running`. - [ ] **One custom app loads** — e.g. `panel.inference.coop`. This is the proof the registry restored; without it nothing custom starts.