fe95ed3930
PR #92092 fixed the same vanished-launcher bug by restoring copies into the legacy in-checkout hermes-agent\bin from the update tail. That location is what this branch removes: untracked files there are swept by the update autostash on every cycle (restore/sweep treadmill, plus a parked stash entry per update under --keep-stash), and unconditional exe copies break on relocatable venvs ('uv trampoline failed to canonicalize script path'). This branch's managed-binary-dir layout supersedes both mechanisms, so the merge resolves to it: - drop _sync_windows_cli_launchers and its _ensure_acp_launcher call (Windows staging/repair lives in ensure_windows_bin_launchers at process start and migrate_windows_bin_path in the update tail); _ensure_acp_launcher is a Windows no-op again - keep #92092's genuinely better installer semantics: staging stays in a dedicated Install-HermesCommandLaunchers function that throws BEFORE any PATH mutation when the required launcher cannot be staged and verified -- previously Set-PathVariable could put an empty dir on PATH and still print 'hermes command ready'. Reworked for this branch's layout: caller passes the destination ($HermesHome\bin), launcher form follows the venv (exe copy vs .cmd delegator), and the verify step accepts either form - rework #92092's AST-lifted PowerShell test for the new function signature, keeping its fail-before-PATH-mutation assertions and adding relocatable-venv form-selection coverage - drop tests/hermes_cli/test_windows_cli_launcher_repair.py (pinned the superseded in-checkout mechanism; equivalent and broader coverage lives in tests/hermes_cli/test_ensure_windows_bin_launchers.py)