fix: Normalize multi-language cache environment inputs (#13898)
## Summary
- separate contract environment projection from raw-value task hashing
so strict-mode execution still receives toolchain settings without
machine-specific paths fragmenting cache keys
- represent Cargo home, target/artifact directories, and rustup home
through configuration safety, resolved outputs, and compiler identity
rather than absolute path strings
- represent uv config roots and Python selection policy through
external-config safety and the resolved interpreter identity
- retain raw hashing or fail-closed behavior for environment values
whose contents or selected tools can materially affect outputs
- document the contract distinction and cover equivalent-path hashing,
strict execution projection, and existing fail-closed cases
---------
Co-authored-by: vercel-gh-bot-4[bot] <312518292+vercel-gh-bot-4[bot]@users.noreply.github.com>
Co-authored-by: vercel-gh-bot-5[bot] <312521305+vercel-gh-bot-5[bot]@users.noreply.github.com>
Co-authored-by: vercel-gh-bot-3[bot] <282332853+vercel-gh-bot-3[bot]@users.noreply.github.com>