=== Scenario F — the new version never becomes healthy (alpine:3.20 exits at once) — 2026-09-13T10:12:57Z ===
--- BEFORE ---
{
 "state": "running",
 "updating": false,
 "update_phase": null,
 "update_phase_label": null,
 "update_error": null,
 "hold_reason": null,
 "pinned_images": {
  "uptime-kuma": "louislam/uptime-kuma:2.4.0"
 },
 "installed_images": {
  "uptime-kuma": {
   "ref": "louislam/uptime-kuma:2.4.0",
   "digest": "sha256:91e963bfda569ba115206e843febb446f473ab525add4e08b2b9e3beffa16985",
   "at": "2026-09-13T10:08:19Z"
  }
 },
 "catalog_images": {
  "uptime-kuma": "louislam/uptime-kuma:2.4.999"
 }
}
louislam/uptime-kuma:2.4.0 Up 3 minutes (healthy)
--- POST /api/stacks/uptime-kuma/update at 2026-09-13T10:12:58Z ---
HTTP 202
{"ok":true,"data":{"accepted":true,"completed":false},"message":"Frissítés elindult – az állapot a kártyán követhető"}

10:12:59 U safety-dump
10:13:01 U verifying
10:18:04 - failed
--- AFTER 2026-09-13T10:18:04Z ---
{
 "state": "stopped",
 "updating": false,
 "update_phase": "failed",
 "update_phase_label": "A frissítés nem sikerült",
 "update_error": "A(z) uptime-kuma frissítése 2026-09-13 12:18-kor nem sikerült, és az alkalmazás nem indult el az új verzióval. Az alkalmazás biztonsági okból leállítva marad, hogy az adatai ne sérüljenek. Visszaállítható a(z) 2026-09-13 12:09-i biztonsági mentésből a Mentések oldalon.",
 "hold_reason": "A(z) uptime-kuma frissítése 2026-09-13 12:18-kor nem sikerült, és az alkalmazás nem indult el az új verzióval. Az alkalmazás biztonsági okból leállítva marad, hogy az adatai ne sérüljenek. Visszaállítható a(z) 2026-09-13 12:09-i biztonsági mentésből a Mentések oldalon.",
 "pinned_images": {
  "uptime-kuma": "alpine:3.20"
 },
 "installed_images": {
  "uptime-kuma": {
   "ref": "louislam/uptime-kuma:2.4.0",
   "digest": "sha256:91e963bfda569ba115206e843febb446f473ab525add4e08b2b9e3beffa16985",
   "at": "2026-09-13T10:08:19Z"
  }
 },
 "catalog_images": {
  "uptime-kuma": "alpine:3.20"
 }
}
--- the controller, verbatim (update + backup lines since 2026-09-13T10:12:58Z) ---
2026/09/13 10:12:59 router.go:567: [INFO] [api] update requested for stack: uptime-kuma
2026/09/13 10:12:59 update.go:278: [INFO] [stacks] update uptime-kuma: accepted — guarded update started
2026/09/13 10:12:59 update.go:701: [INFO] [stacks] update uptime-kuma: phase checking
2026/09/13 10:12:59 update.go:409: [INFO] [stacks] update uptime-kuma: precondition met — proven copy from 2026-09-13T10:09:51Z (3m0s old, limit 24h0m0s)
2026/09/13 10:12:59 update.go:701: [INFO] [stacks] update uptime-kuma: phase safety-dump
2026/09/13 10:12:59 update_guard.go:239: [INFO] [backup] update safety dump for uptime-kuma: the app has no database — nothing to copy (no-op)
2026/09/13 10:12:59 update.go:423: [INFO] [stacks] update uptime-kuma: safety dump done (0 file(s)) []
2026/09/13 10:12:59 update.go:701: [INFO] [stacks] update uptime-kuma: phase pinning
2026/09/13 10:12:59 pin.go:362: [INFO] [stacks] update uptime-kuma: pin advanced to the catalog's current definition (uptime-kuma=alpine:3.20)
2026/09/13 10:12:59 update.go:701: [INFO] [stacks] update uptime-kuma: phase pulling
2026/09/13 10:13:00 update.go:701: [INFO] [stacks] update uptime-kuma: phase starting
2026/09/13 10:13:01 update.go:701: [INFO] [stacks] update uptime-kuma: phase verifying
2026/09/13 10:18:02 update.go:510: [ERROR] [stacks] update uptime-kuma FAILED after the new version was started: not healthy: not healthy within 5m0s (last: state restarting) — stopping and HOLDING the app; the pin stays on the new version (its migration may have run)
2026/09/13 10:18:02 settings.go:1618: [WARN] [settings] restore hold SET for uptime-kuma — the app stays stopped until it is cleared
2026/09/13 10:18:02 update_guard.go:294: [WARN] [backup] uptime-kuma is HELD STOPPED after a failed update (restore point: 2026-09-13T10:09:51Z)
--- the stacks page card (badge / hold / phase fragments) ---
      1 Frissítés gombot.">Frissítés elérhető 
      1 data-held="true"
=== Scenario F — the new version never becomes healthy (alpine:3.20 exits at once) done ===
--- the hold record in settings.json ---
{
 "uptime-kuma": {
  "stack": "uptime-kuma",
  "at": "2026-09-13T10:18:02Z",
  "reason": "update_failed",
  "copy_date": "2026-09-13T10:09:51Z"
 }
}
--- units AFTER (did anything overwrite the restore point during the 5-minute verify window?) ---
primary-unit: image: alpine:3.20 manifest "created_at": "2026-09-13T10:17:09Z"
tier2-mirror: image: louislam/uptime-kuma:2.4.0 manifest "created_at": "2026-09-13T10:09:51Z"
--- containers ---
(none listed = removed by the hold's stop)
--- app_info page fragments (ASCII only; controls included) ---
      2 Mentések
      2 Visszaáll
      1 data-held="true"
      3 friss
      2 href="/backups/apps"
      3 leáll
--- controls: fragments that must be ABSENT on a held card ---
lifecycle buttons on the uptime-kuma card: 0
