resolveCheckoutHead ran a bare `git`, which resolves by PATH order and
so hits the same existing-but-unlaunchable Intel git the update check
now skips; execFileSync threw, was swallowed to null, and the
bootstrap-complete marker fell back to whatever pin was already on disk.
runBootstrap accepts `gitBinary` and threads it to resolveCheckoutHead;
main.ts passes resolveGitBinary(), so both paths use the same binary.