git does not track empty directories, so COPY web/ ./ failed on a clean checkout with "/web: not found" — the Dockerfile built locally, where the directory exists, and only in CI. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>