4b6be0b0df
The Bun.env scrub and filterProcessEnv used isValidEnvName (strict shell identifier shape), which deleted standard Windows variables like ProgramFiles(x86) and CommonProgramFiles(x86). procmgr.ts imports this module before resolving the shell and reads Bun.env['ProgramFiles(x86)'] to find Git Bash under 32-bit Program Files, so installations that only had Git there were no longer discovered and failed with 'No bash shell found'. The unsafe cases for native execve are '=' or NUL in names and NUL in values, not parentheses. Introduce isSafeEnvName covering exactly those cases and use it for the in-place Bun.env scrub and the spawn-env filter. Keep isValidEnvName (strict) for dotenv parsing, where strict shell-identifier shape is the right contract.