fix(ci): do not gate the targeted repair on the source classifier #205

Merged
pat-s merged 1 commit from fix/repair-must-not-gate-on-source-classifier into main 2026-09-07 06:20:04 +00:00
Owner

Why

The repair workflow ran build-one.R --sensitive-only. That flag skips any version the source classifier does not call r-minor-sensitive — and it misses Rcpp.

So the repair skipped Rcpp on every slot, leaving its 4.5-built flat binary as the only copy:

flat   200  built under R 4.5.3
4.4/   404
4.5/   404
4.6/   404

Every R 4.4 client on those slots then failed at dyn.load(). A real install check across 8 slots x 3 minors x 3 repository forms found 44 such failures, Rcpp, Matrix and RJSONIO among them.

What changed

Drops --sensitive-only.

Since bincraft v5.3.0 the destination is decided by the built binary's symbols in upload_single_binary(), so building unconditionally is safe and correct: a package that needs a per-minor slot lands there, one that does not lands in the flat slot. Skipping before the build is exactly what removed that decision from the path.

crow lint passes.

Companion

bincraft #129 is the other half: the index build could not compensate either, because it only considered dropping records whose package was flagged risky, and Rcpp is not — even though the backfill had recorded that object as unable to load under 4.4.

## Why The repair workflow ran `build-one.R --sensitive-only`. That flag skips any version the **source** classifier does not call r-minor-sensitive — and it misses `Rcpp`. So the repair skipped `Rcpp` on every slot, leaving its 4.5-built flat binary as the only copy: ``` flat 200 built under R 4.5.3 4.4/ 404 4.5/ 404 4.6/ 404 ``` Every R 4.4 client on those slots then failed at `dyn.load()`. A real install check across 8 slots x 3 minors x 3 repository forms found **44 such failures**, `Rcpp`, `Matrix` and `RJSONIO` among them. ## What changed Drops `--sensitive-only`. Since bincraft v5.3.0 the destination is decided by the built binary's symbols in `upload_single_binary()`, so building unconditionally is safe and correct: a package that needs a per-minor slot lands there, one that does not lands in the flat slot. Skipping before the build is exactly what removed that decision from the path. `crow lint` passes. ## Companion bincraft #129 is the other half: the index build could not compensate either, because it only considered dropping records whose *package* was flagged risky, and `Rcpp` is not — even though the backfill had recorded that object as unable to load under 4.4.
rebuild-abi-gap ran build-one.R with --sensitive-only, which skips a version the
source classifier does not call r-minor-sensitive. That classifier misses Rcpp,
so the repair skipped it on every slot, leaving its 4.5-built flat binary as the
only copy:

  flat   200  built under R 4.5.3
  4.4/   404   4.5/  404   4.6/  404

Every R 4.4 client on those slots then failed at dyn.load(). A real install
check across 8 slots and 3 minors found 44 such failures, Rcpp, Matrix and
RJSONIO among them.

Since bincraft v5.3.0 the destination is decided by the built binary's symbols
in upload_single_binary(), so building unconditionally is safe: a package that
needs a per-minor slot lands there, one that does not lands in the flat slot.
Skipping before the build is precisely what removed that decision.
pat-s merged commit cceda03935 into main 2026-09-07 06:20:04 +00:00
pat-s deleted branch fix/repair-must-not-gate-on-source-classifier 2026-09-07 06:20:05 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
devxy/build-cran-binaries!205
No description provided.