feat(build): allow the per-minor pass to run under R 4.6 #183

Merged
pat-s merged 1 commit from feat/build-all-versions-46 into main 2026-08-31 12:29:55 +00:00
Owner

Motivation

The supported window is the latest R minor plus the two previous, which the build images install as R_VERSION_LATEST=4.6.0, PREV1=4.5.3, PREV2=4.4.3. This pipeline's R_VERSION offered only the latter two, so no pipeline could run local/build-all.R --sensitive-only under 4.6 and its per-minor slots kept a backlog.

That backlog is the live bug. rlang is built for 4.4 and 4.5 on amd64/resolute but never for 4.6, so an R 4.6.1 client is served the generic 4.5.3 binary and dies with undefined symbol: SETLENGTH. 2709 records across the 16 slots are in that state.

Why not weekly-rebuild-missing

I tried that first (#182) and it is the wrong tool, for two independent reasons:

  • weekly-missing-binaries-audit.R reads only /latest/src/contrib/PACKAGES.gz and has no r_minor awareness, so its candidate list can only contain packages missing from the generic slot.
  • rebuild-missing.R:73 says it outright: "rebuild passes no is_r_minor_sensitive, so it only ever targets the flat".

Running it under 4.6 built with the right interpreter and wrote to the wrong slot. It built almost nothing, and I verified it contaminated nothing: amd64/resolute's flat slot is 22503 records at 4.5 and zero at 4.6. #182 should be closed.

build-all-versions already runs --sensitive-only, documented as "the extra per-minor passes under non-primary R versions". It only needed the option.

Change

Adds 4.6.0 to R_VERSION. Default unchanged.

crow pipeline create devxy/build-cran-binaries \
  --var target_arch=amd64 --var OS=ubuntu --var OS_VERSION=resolute --var R_VERSION=4.6.0

Follow-up worth doing separately

The audit has no per-minor awareness, so this gap is invisible to every existing check and will silently reopen. Nothing measures per-minor completeness today except scripts/verify-r-minor-routing.sh, which was written for routing rather than coverage.

## Motivation The supported window is the latest R minor plus the two previous, which the build images install as `R_VERSION_LATEST=4.6.0`, `PREV1=4.5.3`, `PREV2=4.4.3`. This pipeline's `R_VERSION` offered only the latter two, so **no pipeline could run `local/build-all.R --sensitive-only` under 4.6** and its per-minor slots kept a backlog. That backlog is the live bug. `rlang` is built for 4.4 and 4.5 on `amd64/resolute` but never for 4.6, so an R 4.6.1 client is served the generic 4.5.3 binary and dies with `undefined symbol: SETLENGTH`. 2709 records across the 16 slots are in that state. ## Why not weekly-rebuild-missing I tried that first (#182) and it is the wrong tool, for two independent reasons: - `weekly-missing-binaries-audit.R` reads only `/latest/src/contrib/PACKAGES.gz` and has no `r_minor` awareness, so its candidate list can only contain packages missing from the **generic** slot. - `rebuild-missing.R:73` says it outright: *"rebuild passes no `is_r_minor_sensitive`, so it only ever targets the flat"*. Running it under 4.6 built with the right interpreter and wrote to the wrong slot. It built almost nothing, and I verified it contaminated nothing: `amd64/resolute`'s flat slot is 22503 records at 4.5 and zero at 4.6. #182 should be closed. `build-all-versions` already runs `--sensitive-only`, documented as "the extra per-minor passes under non-primary R versions". It only needed the option. ## Change Adds `4.6.0` to `R_VERSION`. Default unchanged. ```sh crow pipeline create devxy/build-cran-binaries \ --var target_arch=amd64 --var OS=ubuntu --var OS_VERSION=resolute --var R_VERSION=4.6.0 ``` ## Follow-up worth doing separately The audit has no per-minor awareness, so this gap is invisible to every existing check and will silently reopen. Nothing measures per-minor completeness today except `scripts/verify-r-minor-routing.sh`, which was written for routing rather than coverage.
The supported window is the latest R minor plus the two previous, which
the build images install as R_VERSION_LATEST/PREV1/PREV2 (4.6.0, 4.5.3,
4.4.3). R_VERSION here offered only the latter two, so no pipeline could
run local/build-all.R --sensitive-only under 4.6 and its per-minor slots
kept a backlog.

That backlog is the live bug: rlang is built for 4.4 and 4.5 on
amd64/resolute but never for 4.6, so an R 4.6.1 client is served the
generic 4.5.3 binary and dies with 'undefined symbol: SETLENGTH'.

weekly-rebuild-missing cannot close it - its audit reads only the generic
index and rebuild-missing.R targets only the flat slot - so this is the
pipeline that has to grow the option.
pat-s merged commit 5f901312a6 into main 2026-08-31 12:29:55 +00:00
pat-s deleted branch feat/build-all-versions-46 2026-08-31 12:29:55 +00:00
Author
Owner

Closing: this was not needed, and I should have read the pipeline more carefully before proposing it.

build-all-versions already builds every installed R minor. The primary runs local/build-all.R, and the loop immediately after runs local/build-all.R --sensitive-only for each remaining interpreter:

PRIMARY_MINOR=$(echo "$R_VERSION" | cut -d. -f1-2)
for RBIN in /opt/R/[0-9]*/bin/R; do
  RMINOR=$(echo "$RV" | cut -d. -f1-2)
  [ "$RMINOR" = "$PRIMARY_MINOR" ] && continue
  ... local/build-all.R --sensitive-only ...
done

So the 4.6 pass happens when the pipeline is run with the slot's normal R_VERSION=4.5.3. Adding 4.6.0 as an option would have made the pipeline treat 4.6 as the primary minor for a slot whose generic binaries are 4.5-built, which is not what anyone wants.

It also means the Crow validation problem that blocked this option was never on the critical path.

The gaps are being filled by running the pipeline as it already stands.

Closing: this was not needed, and I should have read the pipeline more carefully before proposing it. `build-all-versions` already builds every installed R minor. The primary runs `local/build-all.R`, and the loop immediately after runs `local/build-all.R --sensitive-only` for each remaining interpreter: ```sh PRIMARY_MINOR=$(echo "$R_VERSION" | cut -d. -f1-2) for RBIN in /opt/R/[0-9]*/bin/R; do RMINOR=$(echo "$RV" | cut -d. -f1-2) [ "$RMINOR" = "$PRIMARY_MINOR" ] && continue ... local/build-all.R --sensitive-only ... done ``` So the 4.6 pass happens when the pipeline is run with the slot's normal `R_VERSION=4.5.3`. Adding `4.6.0` as an option would have made the pipeline treat 4.6 as the *primary* minor for a slot whose generic binaries are 4.5-built, which is not what anyone wants. It also means the Crow validation problem that blocked this option was never on the critical path. The gaps are being filled by running the pipeline as it already stands.
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!183
No description provided.