3783fd9ffe
On Windows, the Desktop update preflight scan (hermes_cli._scan_venv_blockers) classified only python -m http.server as a stoppable blocker. A hermes serve or dashboard backend that survived the Desktop teardown (or was launched manually) either dead-ended the hand-off with venv-blocked, or slipped past it and kept venv\Scripts\hermes.exe mapped, so the updater quarantine failed with os error 32 (#98336). The CLI updater downstream already owns exactly this holder class with positive-identity rungs: _ledger_reapable_backend_pids reaps dead-spawner orphans and _ledger_manual_serve_holders stops manual serves and relaunches them on their recorded host/port. Mirror the existing pausable-gateway exemption: defer ledger-verified serve/dashboard holders to those rungs instead of reporting them as blockers. Identity is positive-only, per the #99558 guard contract: token-parsed subcommand (never substring, #90778) + live-verified (pid, create_time) ledger entry with matching purpose + provable ownership (spawner dead, unrecorded, or the hand-off Desktop itself — an ancestor of the scan, verified by pid+create_time). A backend supervised by any other live process keeps blocking; ledger unreadable fails closed. Fixes #98336