fix(abi): prune flat-slot binaries of ABI-risky packages #200
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/prune-stale-flat-binaries"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
base64encstill fails to install under R 4.6 even after it was built into the 4.6 slot:The per-minor binary is correct and serves correctly to any client the router can identify. But the flat slot still holds a binary built under R 4.4.3, and that is what every client receives when it cannot be routed by R minor.
That object should not exist.
upload_single_binary()writes an ABI-risky package only to the per-minor path:base64enc's flat binary is a legacy artifact from before it was classified risky. Removing it makes the outcome correct regardless of routing, user agent, downloader or renv configuration, which is the part I could not otherwise guarantee.What it does
local/prune-stale-flat-binaries.Rlists a slot's flat objects, intersects them with the risky set, and deletes them. Deleting is safe here: the source fallback republishes the CRAN source under the same key, so the package stays installable everywhere and compiles against the client's own R, while routed clients keep getting the per-minor binary.Safety posture, given this deletes production objects:
--applyUse
crow lintpasses.Sequencing
Run with an explicit list first, on one slot, and confirm the flat URL then serves source while the per-minor URLs still serve binaries. Only widen to the cache-derived set once the backfill has finished and its output looks sane: the first 250 classifications came back 232 r-minor-sensitive, and a rate that high suggests the source-grep classifier is broader than the set that actually breaks, which is worth checking before pruning thousands of flat binaries.