Latest Results
Cache resolver Python requirement markers (#20461)
## Summary
Cache the canonical marker representation of the target Python
requirement in `PythonRequirement`, and refresh it whenever the
requirement is constructed, narrowed, or split.
The resolver repeatedly converts the same Python requirement while
flattening requirements and evaluating forks. On the marker-heavy
Transformers workload, profiling showed roughly 4,000 conversions at
each of those two sites. Reusing the interned `MarkerTree` removes that
repeated work without changing resolution or lockfile output.
## Performance
| workload | wall (base → head) | wall change (95% CI) | CPU (base →
head) | CPU change (95% CI) |
| --- | ---: | ---: | ---: | ---: |
| Transformers | 351.7 → 346.1 ms | **-1.6% [-2.2, -0.6]** | 388.4 →
380.2 ms | **-2.1% [-2.8, -1.8]** |
| Home Assistant | 135.4 → 136.2 ms | +0.6% [-1.8, +3.2] | 97.3 → 97.6
ms | +0.3% [-0.8, +1.4] |
| Warehouse | 194.9 → 193.3 ms | -0.8% [-2.4, +1.4] | 205.1 → 203.5 ms |
**-0.8% [-1.8, -0.2]** |
| JupyterLab | 116.0 → 115.5 ms | -0.4% [-2.4, +0.9] | 64.0 → 64.1 ms |
+0.2% [-0.9, +1.3] |
| Semantic Kernel | 134.0 → 134.5 ms | +0.4% [-1.8, +2.5] | 87.9 → 87.2
ms | -0.8% [-1.7, -0.0] |
Transformers was repeated across three independent blocks (360 pairs
total), and landed at **-1.7% wall [-2.4, -1.0]** and **-1.7% CPU [-2.1,
-1.3]**, with CPU improving in 269/360 pairs.
Co-authored-by: Charlie Marsh <charliemarsh@openai.com> Skip fully cutoff-excluded resolver candidates (#20460)
## Summary
Warm locking with `exclude-newer` can encounter tens of thousands of
registry versions whose files are all beyond the cutoff. Resolution
intentionally treats those versions as nonexistent, but candidate
selection previously materialized each lazy `PrioritizedDist` first,
deserializing files and performing compatibility work only to discard
the candidate.
This PR adds a cutoff-aware candidate iterator that checks archived
upload times before materialization.
## Performance
| Workload | Wall time | Wall change (95% CI) | CPU time | CPU change
(95% CI) |
| --- | ---: | ---: | ---: | ---: |
| Transformers | 343.0 → 315.1 ms | −8.1% [−9.2, −5.7] | 378.8 → 352.8
ms | −6.9% [−7.4, −6.0] |
| Home Assistant | 132.1 → 119.9 ms | −9.2% [−10.3, −6.8] | 95.2 → 81.9
ms | −13.9% [−15.2, −12.4] |
| Warehouse | 187.4 → 170.1 ms | −9.2% [−11.6, −7.1] | 197.9 → 178.2 ms
| −10.0% [−11.6, −9.0] |
| JupyterLab | 117.4 → 110.4 ms | −6.0% [−8.1, −3.7] | 62.9 → 57.4 ms |
−8.7% [−9.6, −7.8] |
| Semantic Kernel | 132.7 → 119.9 ms | −9.7% [−12.2, −6.8] | 86.0 → 69.4
ms | −19.2% [−20.2, −18.7] |
| **Geometric mean** | | **−8.5% [−9.3, −7.4]** | | **−11.9% [−12.4,
−11.4]** |
Co-authored-by: Charlie Marsh <charliemarsh@openai.com> Latest Branches
+1%
charlie/codex-prefetch-once +17%
charlie/codex-cache-payload-pool 0%
charlie/codex-reuse-resolver-fork-markers © 2026 CodSpeed Technology