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.