docs: implementation plans for R-minor-sensitive builds

Split into two sequenced plans: bincraft 4.2.0 enhancements (per-minor index +
classifier-driven process_cran_updates) and the pipeline integration (full +
iterative). Spec revised to classify at the orchestration layer instead of a
build_binary_package "auto" mode.
This commit is contained in:
Patrick Schratz 2026-06-13 19:10:55 +02:00
commit d328f261d2
Signed by: pat-s
GPG key ID: 3C6318841EF78925

View file

@ -103,22 +103,29 @@ Driven by the bincraft enhancement below; the single build step becomes:
## Required bincraft enhancements (separate PR, coordinated release)
1. `build_binary_package()`:
- Accept `is_r_minor_sensitive = "auto"` — classify the source it already clones via
`abi_classify()` and route the artifact to the per-minor slot iff `risky`.
- Add `r_minor_sensitive_only` — when `TRUE`, skip (return `"skipped"`) non-risky
packages early, after classification, before building.
2. `process_cran_updates()`:
`build_binary_package()` needs **no change** — it already accepts a concrete
`is_r_minor_sensitive` logical and routes the slot accordingly. Classification stays at
the orchestration layer (mirroring the full-build precompute), which keeps
`build_binary_package`'s pre-build S3 skip-check and source clone untouched.
1. `process_cran_updates()`:
- Add `r_minor_detection = c("none", "issue", "classifier")` (default `"none"` to
preserve current behavior; `"issue"` is today's `filter_r_minor_sensitive` path).
- Add `r_minor_sensitive_only`, threaded down to `build_binary_package()`.
- With `"classifier"`, pass `is_r_minor_sensitive = "auto"` per package instead of a
single run-wide bool.
3. `upload_package_index()`:
- Add per-minor slot support: write/upload `PACKAGES*` (and `Meta/archive.rds`) under
`…/contrib/<major.minor>/`, mirroring the generic-slot logic. Invocable per minor.
- Add `r_minor_sensitive_only` (default `FALSE`).
- With `"classifier"`: for each candidate `(name, version)`, clone the source to a temp
dir and call `bincraft::needs_per_minor_recompile()`; pass the resulting concrete
logical as `is_r_minor_sensitive` to `build_binary_package()`. When
`r_minor_sensitive_only = TRUE`, drop non-risky candidates before building.
- Implemented via a small internal helper `classify_r_minor_sensitive(name, tag,
source_org_url, local_clone_dir)` returning a logical — the unit-testable seam.
2. `upload_package_index()`:
- Add an `r_minor = NULL` argument. When non-NULL (e.g. `"4.4"`), point the remote dir
at `…/contrib/<r_minor>/` and write/upload `PACKAGES*` (and `Meta/archive.rds`) there,
mirroring the generic-slot logic. Extract the remote-dir construction into a pure
helper `package_index_remote_dir(s3_bucket, arch, codename, r_minor = NULL)` — the
unit-testable seam.
These three are the only bincraft changes; detection itself (PR #49) is already merged.
These two are the only bincraft changes; detection itself (PR #49) is already merged.
## Scope and cleanup