Skip to content

Give a run of one the gap to the next published version (rstudio/package-manager#22613) - #100

Merged
jonyoder merged 3 commits into
mainfrom
fix-depender-run-of-one-gap
Nov 14, 2026
Merged

jonyoder merged 3 commits into
mainfrom
fix-depender-run-of-one-gap

Conversation

@jonyoder

Copy link
Copy Markdown
Collaborator

A depender version that forms a run of one (no identical neighbour) now covers the gap up to the next published version, so learned conflicts of adjacent turned-down versions merge into one span instead of one span each. Fixes two real PPM out-of-memory solves. For rstudio/package-manager#22613.


Why it is sound

  • A run of one for v is now [v, next published version).
  • No published version lies strictly inside that gap, so the solver can never pick anything the old span [v] excluded.
  • Pins and failures are unchanged; only failure text can get shorter (a range where it listed versions one by one).

Measurements

Measured in PPM (f8679e25ba) with base = v0.21.0 and new = this change on v0.21.0 (go-pubgrub v0.5.0), before the merge with v0.22.0/v0.23.0. Production cache sizes, 6 GB container, 8 CPUs, machine under load. RS = RunningSatisfier.

Case (RSF) base RS on base RS off new RS on new RS off
s3fs + anndata, 30 envs (11-12) OOM at 7 s (4.9 GB heap) hit 5.5 GB heap cap at 929 s 13.4 s, 1.35 GB, 59 pins 115.9 s, 1.60 GB, 59 pins
s3fs + scanpy, 30 envs (11-12) OOM at 8 s (5.1 GB) not done at 600 s 24.8 s, 1.44 GB, 94 pins 223.9 s, 1.87 GB, 94 pins
f1 (11-12, parity run) OOM at 11 GB 184 s, 3.3 GB

The anndata pins equal uv's exactly. On the 09-27 RSF there is no gain on f1 (2.3 -> 2.3 s), s1 (noise) or s2-105 (both builds hit the 5-minute deadline), and a small gain on s3-400 (RS on 30.9 -> 27.1 s, off 20.5 -> 16.9 s). Same pins, failures and warnings in every pair; heap peaks within noise. Rounds and Dependencies calls do not drop: the gain is smaller learned clauses.

scanpy: uv pins 95, PPM 94. On Python 3.11 PPM picks anndata 0.12.6 where uv picks 0.12.19 + scverse-misc 0.0.3. s3fs+scanpy+anndata==0.12.6 resolves in uv, so PPM's answer is valid but older; it comes from PPM's curated layer, not this change (base never finishes this case).

Parity

114 + 111 environment sets on the 09-27 and 11-12 RSFs: no pin differences. Every differing cell is failure text only (shorter explanations), in 6 sets per run. Some cap reruns (sets that hit the 4.5 GB harness cap in one build only) were not finished.

Checks

  • go test -race ./... and golangci-lint (0 issues) pass after merging origin/main.
  • RoboRev 5255 (code + CHANGELOG) and 5256 (merge) passed with no findings.
  • Independence audit (go-pubgrub audit.sh, scoped to this worktree): PASS, no known reference retrieved in 236 sessions. Process finding only; it says nothing about model weights. Two cross-repo notes are downloads of the uv release binary, not source.

🤖 Generated with Claude Code

jonyoder and others added 3 commits November 13, 2026 20:07
…age-manager#22613)

Adjacent turned-down versions then merge into one span. Pins and failures
are unchanged; two failure explanations in the golden get shorter.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@jonyoder
jonyoder merged commit 24d591e into main Nov 14, 2026
2 checks passed
@jonyoder
jonyoder deleted the fix-depender-run-of-one-gap branch November 14, 2026 03:20
@jonyoder jonyoder mentioned this pull request Nov 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant