e4a809cfc0
The previous version piped a heredoc to `ssh -t host bash -s` — which can't work because `-t` requires a real TTY and heredoc puts stdin in pipe mode. They're mutually exclusive (orientation.md gotcha, tripped over once already). The remote sudo therefore aborted with 'a terminal is required to read the password' before doing anything. Restructured: the remote half of each phase is built as a tempfile locally, scp'd to /tmp on irv-ml1, made executable, and invoked via `ssh -t host /tmp/upgrade-cuda-remote.sh phase1`. Now stdin is the real TTY (no pipe), sudo prompts work, and the rest of the script runs as before. Same three phases, same rollback behavior, same idempotency story. Just a transport fix for the local→remote half.