before: pinned={'ghost': 'ghost:6.65.0-alpine'}
drill: dc614cd DRILL ghost: {'ghost': 'ghost:6.67.0-alpine'} (box proof)
  phase +0.0s backing-up | err=None
  phase +2.1s pulling | err=None
  phase +96.4s starting | err=None
  phase +97.4s verifying | err=None
  phase +107.7s done | err=None
    ghost: readback found=True (http 200, control passed)
2026/09/30 15:19:56 update.go:536: [INFO] [stacks] update ghost: accepted — guarded update started
2026/09/30 15:19:56 update.go:1365: [INFO] [stacks] update ghost: phase checking
2026/09/30 15:19:56 update.go:786: [INFO] [stacks] update ghost: ladder — the last step (3 of 3) — the catalog's current definition
2026/09/30 15:19:56 update.go:816: [INFO] [stacks] update ghost: no usable copy on any tier — younger than 24h0m0s and not older than this install's deploy (2026-09-30T15:18:17Z) (found: none) — backing up first
2026/09/30 15:19:56 update.go:1365: [INFO] [stacks] update ghost: phase backing-up
2026/09/30 15:19:57 update.go:831: [INFO] [stacks] update ghost: precondition met after the backup — Tier 2 (second drive) copy from 2026-09-30T15:19:57Z
2026/09/30 15:19:57 update.go:1365: [INFO] [stacks] update ghost: phase safety-dump
2026/09/30 15:19:57 update.go:846: [INFO] [stacks] update ghost: safety dump done (0 file(s)) []
2026/09/30 15:19:58 undo.go:287: [INFO] [stacks] update ghost: the undo copy will hold 1 named volume(s), 1.5 MiB
2026/09/30 15:19:58 update.go:1365: [INFO] [stacks] update ghost: phase pinning
2026/09/30 15:19:58 pin.go:373: [INFO] [stacks] update ghost: pin advanced to /opt/docker/felhom-controller/data/catalog-cache/templates/ghost/docker-compose.yml (ghost=ghost:6.67.0-alpine)
2026/09/30 15:19:58 update.go:1365: [INFO] [stacks] update ghost: phase pulling
2026/09/30 15:21:31 update.go:1365: [INFO] [stacks] update ghost: phase copying
2026/09/30 15:21:32 update.go:1365: [INFO] [stacks] update ghost: phase copying
2026/09/30 15:21:32 undo.go:437: [INFO] [stacks] update ghost: copied ghost_ghost_content → ghost_ghost_content.pre-update-20260930T152132Z in 481ms
2026/09/30 15:21:32 update.go:1365: [INFO] [stacks] update ghost: phase starting
2026/09/30 15:21:33 update.go:1365: [INFO] [stacks] update ghost: phase verifying
2026/09/30 15:21:43 update.go:997: [INFO] [stacks] update ghost: healthy after 10s (the app's health check passed)
2026/09/30 15:21:43 update.go:1033: [INFO] [stacks] update ghost: DONE in 1m47s

RESULT final_phase=done after={'ghost': 'ghost:6.67.0-alpine'} seed_after=True verdict=proven (107.7 s)
