Supersedes #1250. Dependabot's 22 -> 26 bump fails the image build with
`corepack enable` exiting 127: Node 25 unbundled Corepack, so it is simply not
in the base image any more.
Two changes instead:
- both stages move to `node:24-alpine`, the current LTS line. Node 26 is still
Current until October 2026, so it is the wrong target for a self-hosted
runtime image.
- pnpm is installed globally at the exact `packageManager` version instead of
through Corepack, which keeps the install reproducible and stops the next
base-image major from breaking the build the same way.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>