build-cran-binaries/.crow
Repository files (latest commit first)
Filename Latest commit message Latest commit date
pat-s c216e44578
All checks were successful
ci/crow/manual/backfill-flat-safety/17 Pipeline was successful
feat(abi): backfill per-object flat-slot safety verdicts (#202)
## Why

bincraft #128 lets `union_index_records()` keep a carried flat record when that specific object is recorded safe. On its own it changes nothing for the records already being dropped, because they are legacy objects with no verdict:

```
4.4: 16398 dropped across 9 indexes  (~1822 each)
4.5: 20076 dropped across 9 indexes  (~2230 each)
4.6: 15532 dropped across 9 indexes  (~1726 each)
```

Every one of those resolves to CRAN source for clients the routing serves correctly. This backfill inspects the objects already in the bucket and writes their verdicts, which is what actually restores the coverage.

## How the verdict is made

By symbols, not heuristics. A binary fails at `dyn.load()` under minor M exactly when it references a symbol M does not export, and the volatile set is derived by diffing the `libR.so` exports of the R builds installed in the image — so a new R release updates it with no curated list to maintain.

That matters here because the source-level classifier calls **93%** of compiled packages risky (`LinkingTo: Rcpp` alone is enough), while a symbol scan of the same slot found **17** packages that break under 4.6 and **72** under 4.4. Recording the real answer per object is what makes the difference between ~2000 dropped records and the few dozen that genuinely need dropping.

## Safety

- **Refuses to run where fewer than two R minors are installed.** With nothing to compare, every verdict would read "safe" — writing a bucket full of false clearances is far worse than writing none.
- Skips packages with no compiled code: they cannot fail this way and are never dropped, so downloading them to prove it is wasted.
- Resumable; already-recorded objects cost one query.

`crow lint` passes.

## Sequencing

Merge and release bincraft #128 first, then run this per slot, then re-index. Verifying the drop counts fall is the point of the exercise, so that re-index is where the fix is confirmed rather than assumed.

Reviewed-on: #202
2026-09-05 09:35:47 +00:00
..
archive-missed-packages.yaml fix(index): add a slot repair for a broken Built stamp and retire alpine 3.21 (#150) 2026-08-07 09:15:04 +00:00
auto-apply-patches.yaml fix(ci): install RPostgres for audit workflows (#172) 2026-08-30 07:31:28 +00:00
backfill-abi-classification.yaml feat(abi): backfill classifier verdicts for pre-per-minor packages (#199) 2026-09-04 10:34:49 +00:00
backfill-flat-safety.yaml feat(abi): backfill per-object flat-slot safety verdicts (#202) 2026-09-05 09:35:47 +00:00
build-all-versions-install-deps.yaml fix(ci): make every manual gate default to a value that matches nothing (#158) 2026-08-09 15:31:14 +00:00
build-all-versions.yaml fix(ci): install RPostgres in build shards (#195) 2026-09-03 20:09:20 +00:00
process-updates.yaml fix(ci): install RPostgres for metadata updates 2026-08-28 08:48:58 +00:00
prune-stale-flat-binaries.yaml fix(abi): prune flat-slot binaries of ABI-risky packages (#200) 2026-09-04 10:54:09 +00:00
rebuild-abi-gap.yaml feat(ci): add a targeted per-R-minor rebuild workflow (#198) 2026-09-04 10:24:47 +00:00
reindex.yaml fix(ci): give the index writers the metadata database password (#201) 2026-09-04 19:26:55 +00:00
repair-built-stamp.yaml fix(ci): make every manual gate default to a value that matches nothing (#158) 2026-08-09 15:31:14 +00:00
trial-build-registry.yaml fix(ci): gate the three ungated pipelines on their own variable (#155) 2026-08-09 10:02:05 +00:00
weekly-audit-missing.yaml fix(ci): install RPostgres for audit workflows (#172) 2026-08-30 07:31:28 +00:00
weekly-patch-proposals.yaml fix(ci): install RPostgres for audit workflows (#172) 2026-08-30 07:31:28 +00:00
weekly-rebuild-missing.yaml Revert "fix(ci): split oversized weekly rebuild matrix" 2026-08-14 07:01:56 +00:00
weekly-rebuild-reindex.yaml fix(ci): give the index writers the metadata database password (#201) 2026-09-04 19:26:55 +00:00