Summary
The Python Environments extension team's May 25, 2026 telemetry shows pet.resolve p90 > 200s (p95 > 350s) for the cache_stale cohort on Windows v1.33 — paths that PET reports as invalid when the extension passes a cached path for resolution. 8500+ sessions affected over 7 days.
We do not yet know which code path stalls. Top hypotheses:
- Windows Store stub on a vanished package. Cached path
~/AppData/Local/Microsoft/WindowsApps/python.exe belongs to an uninstalled Store install. try_from may fall through to a resolve_executable that spawns the stub, which blocks on Store activation.
norm_case on a non-existent path under Defender. GetLongPathNameW can stall for tens of seconds on suspicious or quarantined paths.
- Retry loop in
resolve_symlink or a locator's try_from when the target is gone.
Tasks
Acceptance criteria
Summary
The Python Environments extension team's May 25, 2026 telemetry shows
pet.resolvep90 > 200s (p95 > 350s) for thecache_stalecohort on Windows v1.33 — paths that PET reports as invalid when the extension passes a cached path for resolution. 8500+ sessions affected over 7 days.We do not yet know which code path stalls. Top hypotheses:
~/AppData/Local/Microsoft/WindowsApps/python.exebelongs to an uninstalled Store install.try_frommay fall through to aresolve_executablethat spawns the stub, which blocks on Store activation.norm_caseon a non-existent path under Defender.GetLongPathNameWcan stall for tens of seconds on suspicious or quarantined paths.resolve_symlinkor a locator'stry_fromwhen the target is gone.Tasks
handle_resolveand everyLocator::try_fromlooking for unbounded loops, blocking spawns, or symlink chains.resolve(already partially present — extend withtry_from_msper locator andnorm_case_ms).Acceptance criteria
resolvefor a non-existent path returns within 1 second on Windows under default Defender configuration.