6d85d790e4
`hermes update` on Windows detached on every run, including the `Already up to date!` no-op that never touches the venv. emozilla hit the visible half: the shim exits, PowerShell takes the console back, and a child prints the result under a fresh prompt — it reads as a frozen update. The invisible half is worse: the hand-off sat ahead of the fetch, so it also carried off the stash and branch-switch questions, which #90205 then had to answer by closing stdin. Nobody who mods Hermes got asked about their local changes again. The shim lock is real and the child is still required — a launcher holds venv\Scripts\hermes.exe open without FILE_SHARE_DELETE for the whole command, so the quarantine rename is refused and uv fails with os error 32. A parent that waits deadlocks against the handle it is itself holding, and Windows has no exec to escape with. But that lock only binds one step. Move the hand-off to the dependency sync boundary, beside the native-module deferral that solves the same "this process holds a file the sync must replace" problem — and for the reason that placement already exists (#86735: a preflight ahead of the fetch re-bricked the flow it was meant to protect). Everything before the sync now runs foreground in the user's console: the preflight, the stash question, the branch switch, git pull. An up-to-date run never hands off at all. Deferring to the next launch cannot substitute here the way it does for a mapped .pyd: every future `hermes` launch is also the shim, so the marker would defer forever. The child re-runs the update to keep the node/web/lazy-refresh tail, and takes the sync it was spawned for rather than the up-to-date early return.