acme-stable in the examples below), your registry account name, your pull-only credential, age-encrypted, the channel public key channel.pub, and the signature repository the image signatures live in — see the channel. channel.pub is what every signature on this page is checked against; keep it, and pin it.
What you need
Preflight checks four of those five rows in step 2 and fails closed, so you find out now rather than at first sync: the version floor (P9), the default StorageClass (P8), the route to the channel registry and a real pull by digest (P5, P7), and whether the delivered set fits your nodes, quotas and pod-security (P1, P2, P3, P4, P6). The LoadBalancer/ingress row is yours — no preflight check reads it, because how you expose the gateway is your cluster’s business.
Step 1 — Get the kit
acme-stable with the channel name in your onboarding mail. A bad signature writes nothing to disk. The kit unpacks to ./vexa-kit, so read vexa-kit/... for kit/... in the steps below. Also: --version vX.Y.Z (default latest), --dest, --keep-tarball.
Step 2 — Preflight
Step 3 — Install
my-values.yaml is yours (start from kit/profiles/vexa/customer-values.example.yaml), applied over every release and never leaving your cluster.
Four of those flags are the difference between an install that syncs and one that does not, so none of them is optional against a credentialed channel:
Also:
--registry-ca <pem> for a private CA, --registry-insecure for a self-signed test registry, --staging-ns/--prod-ns, --dry-run. No CLI access (OpenShift, shared clusters)? Merge the signed station bundle chart into your config repo instead — see OpenShift. (Station bundle here means the machinery chart Vexa publishes into your cluster; the station-report.yaml of step 5 is the return leg, travelling the other way.)
Step 4 — Smoke, with a human in a real meeting
An unrecognized link fails immediately.
--non-interactive rehearses without the human phase: it records S3 as SKIP and the overall verdict stays PASS — it proves the tooling, not capture.
Rung. This step is the intended procedure and the tool implements it, but no audio has reached the pipeline in any delivery run yet — bot dispatch, the pinned image and pod lifecycle are proven; capture is not. What’s proven, and where.
Step 5 — Send the station report back
pyyaml, and jsonschema as well if you use --submit. Preflight, smoke and the report writer are stdlib-only — nothing to install for steps 2 and 4.
Runs steps 2 and 4; add --install for step 3 between them. Exit codes: 0 pass · 1 phase failed · 2 usage · 3 redaction leak.
Writes one file, station-report.yaml — your profile, your values with secrets redacted, the contract, and the receipts, each verbatim under a plain-English comment, with the sha256 of its own text at the foot. Read all of it, then send it — by hand, or with --submit, which pushes that same file to your own path on the channel using your own credential:
--submit-dry-run to actually send. Your contract.yaml must carry a report_scope — it is the clause that bounds what may leave, and a submit with no bound is refused locally. See the station gate.
Next: The station gate · Operations · Isolated networks