3a915c46d3
Two cache-key correctness follow-ups to #82229 (review feedback): 1. Abbreviated commit pins are immutable too. The installer's is_valid_commit() accepts 7-40 hex chars, but the Python refresh exempted only exactly-40-hex names — an abbreviated pin like install-4ce1994.ps1 could be overwritten with a branch script. The predicate now mirrors the Rust rule (7-40 hex = immutable, never rewritten), applied to the sanitized target ref. 2. Refresh only the update-target ref's cache key. The helper rewrote EVERY mutable-ref entry with the active checkout's script: with install-main.ps1 and install-bb_gui.ps1 coexisting, updating main replaced both with main's script — cross-branch cache poisoning in the other direction. It now computes the single cache key for the branch being updated, using the installer's own ref sanitization (sanitize_ref: non [A-Za-z0-9._-] -> '_', so bb/gui -> install-bb_gui.ps1), and touches nothing else. Entries the bootstrapper never wrote are not created. The branch is threaded from the existing `branch = _resolve_update_branch(args)` in both _cmd_update_impl call sites and _update_via_zip (main-only by its own guard). Regression tests lock down both invariants: abbreviated-SHA pin untouched (including when passed as the branch), coexisting mutable refs (main refresh leaves install-bb_gui.ps1 byte-identical), sanitize_ref parity, and uncached-ref no-op. E2E on the incident machine's real bootstrap-cache: planted a stale install-main.ps1 + sibling install-bb_gui.ps1 + abbreviated pin install-4ce1994.ps1; refresh("main") healed main byte-exact and left both others untouched; refresh("4ce1994") was a no-op. The pre-existing 40-hex pin entry in the real cache was also untouched.