feat(ci): verify what clients actually receive from every published slot #209
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/verify-repo-routing"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
Everything built so far reasons about the binaries:
abi_flat_safetyrecords what an object's symbols say it can load under, and the index writer drops records on that verdict.None of it proves what a client actually receives, which is the product of the CDN rewrite, the per-minor indexes and the
Path:field acting together.The reprex that found the
base64encfailure ran on a workstation, could only reach amd64, and did not survive the session.This makes it a pipeline.
What it does
For every slot, under every R minor the image carries, it installs a fixed package set through each URL form the website documents and checks that each one loads in a fresh subprocess.
archhttps://cran.rpkgs.com/<arch>/<codename>/latestgenerichttps://cran.rpkgs.com/flatcurl/8.5.0, so the edge cannot read an R minorarchandgenericare contractual, so a failure there fails the run.flatmeasures what a client hiding its R minor is exposed to: it is reported and never fatal, because pruning the flat slot is a separate decision.Two details that matter:
repos. A package missing from our index must fail loudly rather than be quietly compiled from source, which would hide exactly the gap this exists to find.available.packages()caches its index intempdir()keyed by repository URL, andarchandflatshare a URL. In a single process the second form would read the first form's index and prove nothing.Verification
Run against the live repository in
build-env-ubuntu:nobleunder R 4.6.0, mid-repair:The three
flatfailures areRcpp,data.tableandyaml, eachBuilt: R 4.4.3and each failingdyn.load()under 4.6.That is the unrouted-client exposure, measured rather than estimated.
The rows also show the routed forms serving a mix of per-minor and flat objects (
RcppatR 4.6.0,stringiatR 4.4.3), which is the intended behaviour: only objects that cannot load cross-minor get a per-minor copy.