=== step 5: the guarded Update — the catalog offers no newer version (pin == catalog v0.12.1; no promotion tonight), so this is the same-version pass — 2026-09-13T16:48:35Z ===
card before: catalog_images={'adventurelog': 'ghcr.io/seanmorley15/adventurelog-backend:v0.12.1', 'adventurelog-frontend': 'ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1', 'adventurelog-postgres': 'postgis/postgis:16-3.5-alpine'} installed=None
units before:
/mnt/sys_drive/felhom-data/backups/primary/adventurelog:
  2026-09-13T16:38:33.2924199360 1350 manifest.json
  2026-09-13T16:38:33.2924199360 452 compose/app.yaml
  2026-09-13T16:38:33.2924199360 2623 compose/.felhom.yml
  2026-09-13T16:38:33.2914199240 3540 compose/docker-compose.yml
  2026-09-13T16:36:59.5722645580 200260608 volume-dumps/adventurelog_adventurelog_postgres_data.tar
  2026-09-13T16:36:58.3152490620 47497728 volume-dumps/adventurelog_adventurelog_media.tar
/mnt/felhom-drives/hdd_1/backups/primary/adventurelog: ABSENT
/mnt/felhom-drives/hdd_1/backups/secondary/adventurelog:
  2026-09-13T16:38:33.2924199360 2623 recovery-unit/compose/.felhom.yml
  2026-09-13T16:38:33.2914199240 3540 recovery-unit/compose/docker-compose.yml
  2026-09-13T16:38:33.2924199360 452 recovery-unit/compose/app.yaml
  2026-09-13T16:36:59.5722645580 200260608 recovery-unit/volume-dumps/adventurelog_adventurelog_postgres_data.tar
  2026-09-13T16:36:58.3152490620 47497728 recovery-unit/volume-dumps/adventurelog_adventurelog_media.tar
  2026-09-13T16:38:33.2924199360 1350 recovery-unit/manifest.json
  2026-09-13T16:38:35.6164485870 1 .felhom-tier2-layout
--- POST /api/stacks/adventurelog/update at 2026-09-13T16:48:37Z ---
HTTP 202
{"ok":true,"data":{"accepted":true,"completed":false},"message":"Frissítés elindult – az állapot a kártyán követhető"}
  +  0s phase safety-dump
  +  3s phase done
end (2026-09-13T16:48:40Z, +3s): state=running updating=False phase=done err='' hold=''
--- controller log ---
2026/09/13 16:48:37 update.go:336: [INFO] [stacks] update adventurelog: accepted — guarded update started
2026/09/13 16:48:37 update.go:763: [INFO] [stacks] update adventurelog: phase checking
2026/09/13 16:48:37 update_guard.go:173: [DEBUG] [backup] update precondition for adventurelog: no Tier-2 copy (nincs másodlagos fájlmásolat ehhez az alkalmazáshoz)
2026/09/13 16:48:37 update.go:450: [INFO] [stacks] update adventurelog: precondition met — Tier 1 (own recovery unit) copy from 2026-09-13T16:38:33Z (10m0s old, limit 24h0m0s)
2026/09/13 16:48:37 update.go:763: [INFO] [stacks] update adventurelog: phase safety-dump
2026/09/13 16:48:37 update_guard.go:403: [INFO] [backup] update safety dump for adventurelog: the app has no database — nothing to copy (no-op)
2026/09/13 16:48:37 update.go:482: [INFO] [stacks] update adventurelog: safety dump done (0 file(s)) []
2026/09/13 16:48:37 update.go:763: [INFO] [stacks] update adventurelog: phase pinning
2026/09/13 16:48:37 pin.go:362: [INFO] [stacks] update adventurelog: pin advanced to the catalog's current definition (adventurelog=ghcr.io/seanmorley15/adventurelog-backend:v0.12.1, adventurelog-frontend=ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1, adventurelog-postgres=postgis/postgis:16-3.5-alpine)
2026/09/13 16:48:37 update.go:763: [INFO] [stacks] update adventurelog: phase pulling
2026/09/13 16:48:38 update.go:763: [INFO] [stacks] update adventurelog: phase starting
2026/09/13 16:48:39 update.go:763: [INFO] [stacks] update adventurelog: phase verifying
2026/09/13 16:48:39 healthprobe.go:153: [DEBUG] Health probe adventurelog: API GET :8000/api/ → 200 (3ms)
2026/09/13 16:48:39 update.go:558: [INFO] [stacks] update adventurelog: healthy after 0s (the app's health check passed)
2026/09/13 16:48:39 installed.go:397: [DEBUG] [stacks] installed-images adventurelog: unchanged (3 service(s)) — app.yaml not rewritten
2026/09/13 16:48:39 update.go:564: [INFO] [stacks] update adventurelog: DONE in 2s
login: (302, '/')
READ BACK after the update IDENTICAL to the truth: True
=== step 5 done 2026-09-13T16:48:43Z ===
