Deploy step 3 printed `git rev-parse HEAD` as "the deployed SHA" even after a failed restart; the Count check copy block could read a stale /tmp/mqcheck copy and report integrity ok. Apply the established pattern (subshell with set -eu, trap registered first, clean-up that keeps a nonzero status, success line only after everything passed) to Deploy step 3, the no-migration rollback, Restore the database steps 1-3 and 5, the Count check copy block and Restore photos (media). The volume listings, service states, health codes and file counts that the operator previously read by eye are now checked in the block. Task: 008c0a8a-2242-429b-a1fd-69346bc1d414 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>