node:20-slim defaults NODE_ENV=production which causes npm to skip dev
deps (typescript, ts-node), preventing tsc from being found.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Avoids stale Docker layer cache issue where tsc was not found because
an old npm ci layer (without dev deps) was cached on the build host.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>