The build-artifact cache is the one that caught me. My workflow cached the build output between runs, and a production deploy silently reused the staging build with staging API URLs baked in, because VITE_ values are sealed at build time. Now I cache node_modules only, never the build output, and treat every environment as its own fresh build. Reproducibility only works when the cache does not outlive its purpose.