before: pinned={'rallly': 'lukevella/rallly:4.11.1', 'rallly-postgres': 'postgres:18-alpine'}
drill: 3ce8e5e DRILL rallly: {'rallly': 'lukevella/rallly:4.15.3'} (box proof)
  phase +0.0s backing-up | err=None
  phase +18.5s safety-dump | err=None
  phase +19.5s pulling | err=None
  phase +36.0s copying | err=None
  phase +48.2s starting | err=None
  phase +54.4s verifying | err=None
  phase +64.6s done | err=None
    rallly: readback of the seeded poll http=200 found=True
2026/09/30 16:18:00 update.go:536: [INFO] [stacks] update rallly: accepted — guarded update started
2026/09/30 16:18:00 update.go:1365: [INFO] [stacks] update rallly: phase checking
2026/09/30 16:18:00 update.go:786: [INFO] [stacks] update rallly: ladder — the last step (2 of 2) — the catalog's current definition
2026/09/30 16:18:00 update.go:816: [INFO] [stacks] update rallly: no usable copy on any tier — younger than 24h0m0s and not older than this install's deploy (2026-09-30T16:16:57Z) (found: none) — backing up first
2026/09/30 16:18:00 update.go:1365: [INFO] [stacks] update rallly: phase backing-up
2026/09/30 16:18:19 update.go:831: [INFO] [stacks] update rallly: precondition met after the backup — Tier 2 (second drive) copy from 2026-09-30T16:18:01Z
2026/09/30 16:18:19 update.go:1365: [INFO] [stacks] update rallly: phase safety-dump
2026/09/30 16:18:19 update.go:846: [INFO] [stacks] update rallly: safety dump done (1 file(s)) [/mnt/sys_drive/felhom-data/backups/primary/rallly/db-dumps/pre-restore-20260930T161819Z-rallly-postgres.sql]
2026/09/30 16:18:20 undo.go:287: [INFO] [stacks] update rallly: the undo copy will hold 1 named volume(s), 64.9 MiB
2026/09/30 16:18:20 update.go:1365: [INFO] [stacks] update rallly: phase pinning
2026/09/30 16:18:20 pin.go:373: [INFO] [stacks] update rallly: pin advanced to /opt/docker/felhom-controller/data/catalog-cache/templates/rallly/docker-compose.yml (rallly=lukevella/rallly:4.15.3, rallly-postgres=postgres:18-alpine)
2026/09/30 16:18:20 update.go:1365: [INFO] [stacks] update rallly: phase pulling
2026/09/30 16:18:36 update.go:1365: [INFO] [stacks] update rallly: phase copying
2026/09/30 16:18:47 update.go:1365: [INFO] [stacks] update rallly: phase copying
2026/09/30 16:18:48 undo.go:437: [INFO] [stacks] update rallly: copied rallly_rallly_postgres_data → rallly_rallly_postgres_data.pre-update-20260930T161847Z in 876ms
2026/09/30 16:18:48 update.go:1365: [INFO] [stacks] update rallly: phase starting
2026/09/30 16:18:54 update.go:1365: [INFO] [stacks] update rallly: phase verifying
2026/09/30 16:19:04 update.go:997: [INFO] [stacks] update rallly: healthy after 10s (the app's health check passed)
2026/09/30 16:19:05 update.go:1033: [INFO] [stacks] update rallly: DONE in 1m4s

RESULT final_phase=done after={'rallly': 'lukevella/rallly:4.15.3', 'rallly-postgres': 'postgres:18-alpine'} seed_after=True verdict=proven (64.7 s)
