before: pinned={'immich-machine-learning': 'ghcr.io/immich-app/immich-machine-learning:v3.2.2', 'immich-postgres': 'ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0', 'immich-redis': 'redis:7-alpine', 'immich-server': 'ghcr.io/immich-app/immich-server:v3.2.2'}
drill: 28721cd DRILL immich: {'immich-server': 'ghcr.io/immich-app/immich-server:v3.2.4', 'immich-machine-learning': 'ghcr.io/immich-app/immich-machine-learning:v3.2.4'} (box proof)
  phase +0.0s backing-up | err=None
  phase +17.5s safety-dump | err=None
  phase +21.6s pulling | err=None
  phase +74.0s copying | err=None
  phase +79.1s starting | err=None
  phase +90.4s verifying | err=None
  phase +112.0s done | err=None
    immich: readback found=True (http 200, control passed)
2026/09/30 12:32:25 update.go:536: [INFO] [stacks] update immich: accepted — guarded update started
2026/09/30 12:32:25 update.go:1365: [INFO] [stacks] update immich: phase checking
2026/09/30 12:32:25 update.go:786: [INFO] [stacks] update immich: ladder — the last step (3 of 3) — the catalog's current definition
2026/09/30 12:32:25 update.go:816: [INFO] [stacks] update immich: no usable copy on any tier — younger than 24h0m0s and not older than this install's deploy (2026-09-30T12:30:53Z) (found: none) — backing up first
2026/09/30 12:32:25 update.go:1365: [INFO] [stacks] update immich: phase backing-up
2026/09/30 12:32:42 update.go:831: [INFO] [stacks] update immich: precondition met after the backup — Tier 1 (own recovery unit) copy from 2026-09-30T12:32:26Z
2026/09/30 12:32:42 update.go:1365: [INFO] [stacks] update immich: phase safety-dump
2026/09/30 12:32:44 update.go:846: [INFO] [stacks] update immich: safety dump done (1 file(s)) [/mnt/felhom-drives/scratch_hdd/userdata/immich/backups/primary/immich/db-dumps/pre-restore-20260930T123242Z-immich-postgres.sql]
2026/09/30 12:32:46 undo.go:287: [INFO] [stacks] update immich: the undo copy will hold 3 named volume(s), 308.3 MiB
2026/09/30 12:32:46 update.go:1365: [INFO] [stacks] update immich: phase pinning
2026/09/30 12:32:46 pin.go:373: [INFO] [stacks] update immich: pin advanced to /opt/docker/felhom-controller/data/catalog-cache/templates/immich/docker-compose.yml (immich-machine-learning=ghcr.io/immich-app/immich-machine-learning:v3.2.4, immich-postgres=ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0, immich-redis=redis:7-alpine, immich-server=ghcr.io/immich-app/immich-server:v3.2
2026/09/30 12:32:46 update.go:1365: [INFO] [stacks] update immich: phase pulling
2026/09/30 12:33:39 update.go:1365: [INFO] [stacks] update immich: phase copying
2026/09/30 12:33:41 update.go:1365: [INFO] [stacks] update immich: phase copying
2026/09/30 12:33:41 undo.go:437: [INFO] [stacks] update immich: copied immich_immich_ml_cache → immich_immich_ml_cache.pre-update-20260930T123341Z in 624ms
2026/09/30 12:33:41 update.go:1365: [INFO] [stacks] update immich: phase copying
2026/09/30 12:33:43 undo.go:437: [INFO] [stacks] update immich: copied immich_immich_postgres_data → immich_immich_postgres_data.pre-update-20260930T123341Z in 1.974s
2026/09/30 12:33:43 update.go:1365: [INFO] [stacks] update immich: phase copying
2026/09/30 12:33:44 undo.go:437: [INFO] [stacks] update immich: copied immich_immich_redis_data → immich_immich_redis_data.pre-update-20260930T123341Z in 574ms
2026/09/30 12:33:44 update.go:1365: [INFO] [stacks] update immich: phase starting
2026/09/30 12:33:55 update.go:1365: [INFO] [stacks] update immich: phase verifying
2026/09/30 12:34:16 update.go:997: [INFO] [stacks] update immich: healthy after 20s (the app's health check passed)
2026/09/30 12:34:17 update.go:1033: [INFO] [stacks] update immich: DONE in 1m51s

RESULT final_phase=done after={'immich-machine-learning': 'ghcr.io/immich-app/immich-machine-learning:v3.2.4', 'immich-postgres': 'ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0', 'immich-redis': 'redis:7-alpine', 'immich-server': 'ghcr.io/immich-app/immich-server:v3.2.4'} seed_after=True verdict=proven (112.0 s)
