test(verify): follow redirects, and allow the guard's deliberate drops #185

Merged
pat-s merged 2 commits from test/union-check-and-redirects into main 2026-08-31 13:01:31 +00:00
Owner

Two checks that no longer matched the system.

fetch() did not pass -L, so every --live check against a routed index read a 302 body rather than the index a client receives — 48 spurious failures against production. It also did not bypass the edge cache. Both were fixed on the branch behind #180, but that PR merged at +9/-5, capturing only the parity commit, so neither reached main.

The union check asserted flat ⊆ every per-minor index. Since rpkgs/bincraft#116, that is deliberately false: amd64/resolute drops 2228 packages from its 4.6 index because their only binary was built under another R minor. Those absences are the fix working.

It now asserts the thing that must hold — no generic package built under this minor may go missing — and reports the deliberate drops as context.

Verified against production: amd64/resolute goes from 5 failures to 14 passed / 0 failed.

Two checks that no longer matched the system. `fetch()` did not pass `-L`, so every `--live` check against a routed index read a 302 body rather than the index a client receives — 48 spurious failures against production. It also did not bypass the edge cache. Both were fixed on the branch behind #180, but that PR merged at `+9/-5`, capturing only the parity commit, so neither reached `main`. The union check asserted flat ⊆ every per-minor index. Since rpkgs/bincraft#116, that is deliberately false: `amd64/resolute` drops 2228 packages from its 4.6 index because their only binary was built under another R minor. Those absences **are** the fix working. It now asserts the thing that must hold — no generic package built under *this* minor may go missing — and reports the deliberate drops as context. Verified against production: `amd64/resolute` goes from 5 failures to 14 passed / 0 failed.
Two checks that no longer matched the system.

fetch() did not pass -L, so every --live check against a routed index read
a 302 body instead of the index a client receives. It also did not bypass
the edge, so a run right after a reindex measured stale copies. Both were
fixed on the branch behind #180 but the merge captured that PR at an
earlier commit, so neither reached main.

The union check asserted flat is a subset of every per-minor index. Since
bincraft learned to drop an ABI-risky package whose only binary was built
under another R minor, that is deliberately false: amd64/resolute drops
2228 from its 4.6 index, and those absences are the fix working.

What must never go missing is a generic package built under this very
minor - safe to serve, no reason to disappear. That is what it now
asserts, reporting the deliberate drops alongside.
The comprehensive production sweep passed 236/0 while 2608 records were
being served that crash at load: the exact failure this whole effort was
about. Nothing in the suite looked for them.

The guard in bincraft drops them at index time, so it only takes effect
where a reindex has run since it shipped. amd64/resolute is clean;
fourteen slots are not, and no check said so.

A package carrying a Path in any per-minor index is risky by
construction, which is the signal for the ones absent from this minor's
index. Serving such a package from the generic slot with a binary built
under a different minor is the crash; that count must be zero.
pat-s merged commit 4413f499f1 into main 2026-08-31 13:01:31 +00:00
pat-s deleted branch test/union-check-and-redirects 2026-08-31 13:01:32 +00:00
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!185
No description provided.