servicepack v1.2.20 — two core concurrency bugs App.Run's deferred close(errCh)/wg.Wait/Stop ran BACKWARDS under LIFO, closing the error channel while its producer was still live: a stop signal racing a service error panicked the process with 'send on closed channel' mid-shutdown. handleServiceError blocked on a capacity-1 channel drained exactly once, so three or more simultaneous failures parked forever and Run's wg.Wait never returned — a hang instead of the reported error. Both ship with regression tests proven by reintroducing the old code. Also: make build built nothing (a live build: override shadowed the real target, breaking the quick start); make servicepack-update could execute commands out of .servicepackupdateignore via eval (local vector — that file is sync-excluded); base images are digest-pinned everywhere including build.sh; the image build now injects the app name; script diagnostics go to stderr.