build-cran-binaries/.crow
Repository files (latest commit first)
Filename Latest commit message Latest commit date
pat-s a84cca1949 fix(abi): prune the objects recorded broken, not every risky package (#211)
## Why

A dry run of the prune on `ubuntu-2404-amd64` (pipeline 12494):

```
Dry run: 3013 object(s) left in place. Re-run with --apply to delete.
```

3013 objects on one slot. The recorded verdicts say roughly **230** of that slot's objects actually fail `dyn.load()` anywhere.

The gap is the selector: the prune used `abi_cache_risky_packages()`, the source classifier, which calls **93%** of compiled packages risky where the binaries' own symbols say **4.3%**. Applying it would have deleted ~2800 working binaries and turned each into a source fallback for every client that cannot be routed by R minor.

This is the same mistake #129 fixed in the index writer. The prune was written before the per-object verdicts existed (#200, before #128/#129) and was never brought forward.

## What changed

- Selection comes from `abi_flat_safety`, every `NOT safe` row for the slot regardless of which minor it fails under, since the flat object is served to clients on all of them.
- Matching is by **object**, `<package>_<version>`, not by package name. A package can have a safe flat binary at one version and an unsafe one at another; the old code deleted both.
- The explicit `[pkg ...]` override is unchanged in behaviour and still matches by package name, which is what you want when naming a package by hand.
- The refusal guard moves with the selector. An empty result now means the slot's flat-safety backfill never ran — the exact state rhel8 was found in today — and pruning nothing while reporting success would have hidden it.

## Not changed

Still a dry run unless `PRUNE_APPLY=yes`, and still refuses to delete an object whose package CRAN no longer ships, since there would be no source to fall back to.

## Ordering note

A prune converts each deleted binary into a source fallback. bincraft #131 fixes source fallbacks of *archived* versions being advertised as binaries, which breaks `uvr` outright. That should land before any large prune, or this will manufacture new instances of it.

Reviewed-on: #211
2026-09-09 15:01:21 +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 fix(ci): authenticate uvr's GitHub resolution in the index workflows (#204) 2026-09-05 15:59:16 +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 the objects recorded broken, not every risky package (#211) 2026-09-09 15:01:21 +00:00
rebuild-abi-gap.yaml fix(ci): do not gate the targeted repair on the source classifier (#205) 2026-09-07 06:20:04 +00:00
reindex.yaml fix(ci): authenticate uvr's GitHub resolution in the index workflows (#204) 2026-09-05 15:59:16 +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
repair-unsafe-flat-objects.yaml feat(abi): repair from the recorded verdicts rather than an ad-hoc scan (#206) 2026-09-07 18:46:50 +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
verify-repo-routing.yaml feat(ci): verify what clients actually receive from every published slot (#209) 2026-09-09 12:52:16 +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): authenticate uvr's GitHub resolution in the index workflows (#204) 2026-09-05 15:59:16 +00:00