The retained-versions discipline says a refresh creates a new entry beside the old one. Overwriting would destroy the only thing that makes a retained version worth having, which is that it stays available to compare against. The refresh brief worked out what that costs before any of it was built. It is one of the NVIDIA AICR pages. You can also view this as a markdown file.
What it is. AICR recipe aicr-eks-h100-training-kubeflow v0.18.0, as 17 Argo CD Applications.
Install it. Apply its Applications on a cluster that runs Argo CD. The five steps below give the commands.
Needs first. Apply the 16 component Applications in the 5 sync-waves they carry, from wave 1 to wave 14. The order is recorded as a route beside the bundle and no runtime has executed it. Argo CD renders 14 upstream charts and 3 AICR bundle paths at sync time. Their CRDs, hooks, certificates and operators are handled there, and this entry has not rendered or assessed them.
UNOFFICIAL/EXPERIMENTAL. This entry belongs to the AICR catalog overview. It retains AICR v0.18.0 from the same criteria as the v0.14.0 training entry, so the catalog now holds two retained versions of one platform and can say exactly what moved between them.
npm run aicr-training-v0180:verify
Why a second version rather than an upgrade
The brief also set a condition. A second version doubles the surface without adding a new shape, so it is only worth doing if it proves something new. It does, and the proof is below.
What was checked before the binary ran
This is the first AICR entry whose generating binary arrives with a verified provenance chain rather than a checksum alone.
The downloaded release asset matches the sha256 in the release's own aicr_checksums.txt, and that file's own hash is recorded so the check can be repeated against the same list. The tarball ships recipe-catalog.sigstore.json, and it is byte-identical to the copy this repository committed and verified offline with the signature lane. The binary reports build commit 1439f2fc, which is the commit named in the Fulcio certificate that the verified signature carries.
So the binary and the signature agree about which build produced them. The generation receipt also records what that does not cover: the signature attests the recipe catalog, not the binary, so the binary's provenance still rests partly on checksums served over HTTPS. Saying so is the difference between a provenance chain and a provenance impression.
The stricter resolver changed nothing here
v0.18.0 enforces stated-criteria coverage and fails fast when a recipe cannot satisfy its declared criteria. That was the one upstream change that could have altered what our criteria resolve to.
It resolved without complaint and produced the same fifteen components the v0.14.0 recipe declares. That is a real answer to a real question, and it is recorded in the receipt rather than assumed from a successful run.
What actually moved
npm run aicr-version-diff:verify
The version diff is computed from the committed bytes of both entries on every run, so it cannot drift from the entries it describes. The short version is that the platform did not change and the parts did. The component set is identical, the declared deployment order is identical, and both render seventeen Argo CD Applications. Nine components changed the chart version they pull, including the GPU Operator moving from 26.3.1 to 26.3.3, and one changed its versioning scheme entirely.
The scheduling change is the one that mattered to us
The distinct sync-wave count fell from sixteen to five while the number of Applications stayed the same. v0.14.0 gave every component its own wave, which is a strict sequence. v0.18.0 puts independent components in one wave, which is parallel deployment of everything that does not depend on anything else.
That broke two of our own checks, and both were wrong rather than upstream.
The digest-index compiler required the waves to be a contiguous unique range, which was a fair structural check when every component had its own wave and is simply false now. The ordering-parity lane compared the wave order against the recipe's deploymentOrder as a linearization, which a partial order cannot satisfy.
Both now check what the ordering was always meant to express. Every recipe carries the dependency edges its order was computed from, and the lane checks that each component's wave comes after the wave of everything it depends on. It checks deploymentOrder against the same edges, because a declared order that contradicts its own graph is worth catching. Seventeen edges hold in each entry, under both models.
An entry whose waves are all distinct is still held to the stronger claim that the rendered order equals the declared one exactly. An entry that groups them is not, and the ordering-parity record says which model each entry follows rather than flattening them into one rule.
One digest pins this entry too
The digest index pins the upstream source, the recipe criteria, and all seventeen rendered Applications under sha256:b9e5af994a0e1aeb2a055d43ccf88399c3d4faab880e1ae7ae03b06c14571575. It is compiled by the same compiler the other entries use.
What is proven and what is not
Proven: the generating binary's release asset matched its published checksum, it ships the signature bundle this repository verified offline, its build commit agrees with that signature, the criteria resolved under the stricter resolver to the same component set, every retained byte is pinned by one digest, and the dependency edges hold in the rendered waves.
Not proven, and stated rather than implied: this entry was never published, so it carries no public digest and no OCI transport receipts. It has no ConfigHub import, no variant, no promotion, and no delivery proof. The platform evidence record lists it with an empty ladder for exactly that reason. No GPU workload ran, no cluster was contacted, and one file had trailing spaces removed, which the receipt records as a normalization rather than passing off as upstream bytes.
Use this entry in ConfigHub
Every Catalog entry page carries these five steps in this order. Each step says what the Catalog has run for this entry, and a step with a missing precondition gives no command.
Steps 1 and 2 need no account. Install the cub CLI before any cub command. Step 2 uses cub config diff, which cub plugin install confighub/cub-workshop@v0.6.61 adds.
What is fixed, and what you supply
Fixed when this entry was built. These went into the build, so the objects already carry them. To change one, build the entry again from its source.
accelerator is h100
intent is training
os is ubuntu
platform is kubeflow
service is eks
acceleratedNodeSelector is nvidia.com/gpu.present=true
repoURL is oci://europe-west1-docker.pkg.dev/nth-fort-499605-q5/helm-expt
storageClass is gp3
workloadSelector is app.kubernetes.io/part-of=training
deployer is argocd-helm
selectedOverlay is h100-eks-ubuntu-training-kubeflow
appliedOverlays is base>monitoring-hpa>h100-any>eks>eks-training>h100-eks-training>h100-eks-ubuntu-training>h100-eks-ubuntu-training-kubeflow
Yours to supply or check. The destination must have these before the objects are applied. The words in italics say what the Catalog knows about each.
Argo CD and its Application API must exist on the destination, with the argocd namespace, because every object in this base is an Argo CD Application in that namespace. Declared. Not checked on any destination.
3 of the 17 Applications take their source from oci://europe-west1-docker.pkg.dev/nth-fort-499605-q5/helm-expt/aicr-bundle at 0.18.0. That package is not published, so a destination needs a reachable copy before Argo CD can resolve them. Declared. Not checked on any destination.
AICR generated this recipe for accelerator=h100, intent=training, os=ubuntu, platform=kubeflow, service=eks. A destination has to match those criteria, and nothing here has checked one. Declared. Not checked on any destination.
This entry's plan, and how to test it
These are the steps that plain objects cannot carry. ConfigHub stores them and does not carry them out. The words in italics say what the Catalog knows about each.
Once the destination is known. Apply the 16 component Applications in the 5 sync-waves they carry, from wave 1 to wave 14. The order is recorded as a route beside the bundle and no runtime has executed it. Who: Argo CD on the selected destination. Generated. Not run on a cluster.
Once the destination is known. Argo CD renders 14 upstream charts and 3 AICR bundle paths at sync time. Their CRDs, hooks, certificates and operators are handled there, and this entry has not rendered or assessed them. Who: Argo CD on the selected destination. Not evaluated.
The Catalog rendered this entry and retains its 17 Argo CD Applications as files that one inventory lists.
# make the directories the inventory names$ mkdir -p aicr-eks-h100-training-kubeflow-v0-18-0-argocd/templates
# fetch the inventory, then every file it lists$ curl -fsSL -o aicr-eks-h100-training-kubeflow-v0-18-0-argocd/checksums.txt https://raw.githubusercontent.com/confighub/helm-expt/main/examples/aicr/eks-h100-training-kubeflow-v0-18-0/argocd-rendered/checksums.txt
$ cut -c67- aicr-eks-h100-training-kubeflow-v0-18-0-argocd/checksums.txt | xargs -I{} curl -fsSL -o aicr-eks-h100-training-kubeflow-v0-18-0-argocd/{} https://raw.githubusercontent.com/confighub/helm-expt/main/examples/aicr/eks-h100-training-kubeflow-v0-18-0/argocd-rendered/{}
# check every file against the inventory$ (cd aicr-eks-h100-training-kubeflow-v0-18-0-argocd && shasum -a 256 -c checksums.txt)
# check the inventory against the listing digest$ shasum -a 256 aicr-eks-h100-training-kubeflow-v0-18-0-argocd/checksums.txt
3be7f77a32b1b09677a2b468606a0e0abe8bfa729e687ffd5eb3b8d4bc97771e aicr-eks-h100-training-kubeflow-v0-18-0-argocd/checksums.txt
# join the files into one for step 2$ cat aicr-eks-h100-training-kubeflow-v0-18-0-argocd/templates/*.yaml > aicr-eks-h100-training-kubeflow-v0-18-0-argocd.yaml
2. Compare with another version or base Not run for this entry
The listing records no comparison for this entry. The commands run on the retained files, with no account. The Catalog holds 4 other versions, v0.14.0, v0.19.0, v0.20.0 and v1.0.0.
# fetch the argocd base at version v0.14.0$ mkdir -p aicr-eks-h100-training-kubeflow-v0-14-0-argocd/templates
$ curl -fsSL -o aicr-eks-h100-training-kubeflow-v0-14-0-argocd/checksums.txt https://raw.githubusercontent.com/confighub/helm-expt/main/examples/aicr/eks-h100-training-kubeflow/argocd-rendered/checksums.txt
$ cut -c67- aicr-eks-h100-training-kubeflow-v0-14-0-argocd/checksums.txt | xargs -I{} curl -fsSL -o aicr-eks-h100-training-kubeflow-v0-14-0-argocd/{} https://raw.githubusercontent.com/confighub/helm-expt/main/examples/aicr/eks-h100-training-kubeflow/argocd-rendered/{}
# join them into one file$ cat aicr-eks-h100-training-kubeflow-v0-14-0-argocd/templates/*.yaml > aicr-eks-h100-training-kubeflow-v0-14-0-argocd.yaml
# list what changed from v0.14.0 to v0.18.0$ cub config diff aicr-eks-h100-training-kubeflow-v0-14-0-argocd.yaml aicr-eks-h100-training-kubeflow-v0-18-0-argocd.yaml --summary
3. Upload it as a variant Not available yet
This entry is not published, so there is no public artifact to upload. The listing records its literal configuration bundle as not published. Publishing the rendered objects as that bundle, with a receipt, would make this step available.
4. Deploy it Not available yet
This step needs an upload command from step 3, and this entry has none. A published artifact for this entry, with a receipt, would make this step available.
5. Promote a change Not available yet
This step needs an upload command from step 3, and this entry has none. A published artifact for this entry, with a receipt, would make this step available.
Technical notes and disclaimers
This entry is a set of Argo CD Applications, so a test needs Argo CD. The Catalog has no test script for it.