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

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.
This commit is contained in:
Patrick Schratz 2026-09-05 17:09:59 +00:00
commit 09b050399f
No known key found for this signature in database
GPG key ID: 62050D5BC68AB6DC

View file

@ -14,9 +14,15 @@
# minor from CI, only `just rebuild` from a workstation with the S3 and Postgres
# credentials to hand. This adds that path.
#
# `build-one.R --sensitive-only` re-runs the ABI classifier per version, so a
# package that turns out not to be risky is skipped rather than written into the
# wrong slot.
# `--sensitive-only` is deliberately NOT passed. That flag gates on the source
# classifier, which misses Rcpp: the repair therefore skipped Rcpp entirely,
# leaving its 4.5-built flat binary as the only copy and breaking every R 4.4
# client on the slot.
#
# 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, and one that does not lands in the
# flat slot. Skipping before the build is what removed that decision.
#
# Trigger with the slot and an explicit package list:
#
@ -207,7 +213,7 @@ steps:
continue
fi
echo "=== rebuilding $$pkg $$ver into $$ABI_R_MINOR ==="
"$$RBIN/Rscript" local/build-one.R --sensitive-only "$$pkg" "$$ver" || rc=1
"$$RBIN/Rscript" local/build-one.R "$$pkg" "$$ver" || rc=1
done
exit $$rc
backend_options: