> ## Documentation Index
> Fetch the complete documentation index at: https://delivery.vexa.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# The channel

> Where your releases live, who may pull them, and how your credential arrives.

**A private OCI repository on `channel.vexa.ai` carrying signed entries, the digest-pinned Helm chart, image signatures, the kit, and a `current` pointer.** Your staging follows `current`; your production follows a pin only you move. Mirroring the whole channel into your own registry is first-class — the guarantees are in the signatures and digests, not the transport.

|                 | **The open channel**                                                                                                    | **A private channel**                                                                                                     |
| --------------- | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| What it answers | keep me current with what upstream publishes                                                                            | I need something upstream does not have yet                                                                               |
| What it carries | the latest open-source release, exactly as published                                                                    | that fix, built into your channel — and sent upstream as a pull request, so you converge back rather than carrying a fork |
| Who is on it    | many subscribers of one estate **shape** — an OpenShift-bank shape, an AKS shape, a generic shape such as `acme-stable` | one customer                                                                                                              |
| Gating          | the standard bundle for that shape                                                                                      | rendered with your values, checked against your contract                                                                  |
| Support         | community                                                                                                               | a ticket lane with response commitments                                                                                   |
| Credentials     | per subscriber, independently revocable                                                                                 | per subscriber                                                                                                            |

The default is the open channel of your shape. Sharing one shares nothing else: your credential reads your channel only, your values never leave your cluster, your pin is yours.

## What a release is

One OCI artifact:

* **`entry.json`** — version, source commit, image digests, and the sha256 of every evidence file.
* **`evidence/`** — digest map, delivery receipt from our own production run, SLSA provenance, Sigstore trust material for offline verification.
* **`VERIFY.md`** — the commands, with this release's filenames filled in.
* Beside it, the Helm chart as an OCI artifact, every digest baked into its values — including the images the runtime spawns per meeting.

Two fields are contractual: **`evidence_absent`** names what this release lacks, and **`break_glass`** names who authorised an incomplete chain, and why.

Each stage that validates the artifact signs it. The bytes never change; a candidate that fails stops accumulating evidence.

## Your credential

One **pull-only** account scoped to your channel, minted, rotated and revoked with `vexa_subscriber.py list | add | revoke` (`add` also rotates; revocation lands within a minute). `channel.pub` is not secret — it is published and read aloud on a call. The secret half travels a different route, encrypted with [`age`](https://github.com/FiloSottile/age) to a key you already control, usually an SSH public key from your GitHub account with the fingerprint cited in the mail. Rotation invalidates nothing you already pulled.

```bash theme={null}
age -d -i ~/.ssh/id_ed25519 channel-credential.age
oras login channel.vexa.ai -u <your-account> --password-stdin
oras pull channel.vexa.ai/vexa/channel/acme-stable:current -o entry/
```

Then [verify](verify) before anything runs.

## Freshness and revocation

Entries **expire**. A channel nobody has published to goes stale, and your verifier says so in its own words — `FAIL STALE CHANNEL — this entry expired at …` — rather than in the vocabulary of a bad signature, because an expired entry and a forged one are different incidents. Your pinned release keeps running. `max_entry_age_days` in your contract tightens the horizon below ours; nothing widens it.

A release found defective is named on a cosign-signed **revocation list** on the channel with a reason and a destination, and your verifier refuses it before the next sync. No list published at all is an **empty** list, not an error. **Your admission controller cannot read this list** — revocation is enforced by the verify gate, not by Kyverno.

Both clauses are enforced by that PreSync verify gate, and **the gate is off unless you install with [`--verifier-image`](install#step-3-install)**.

<Note>
  **Rung.** Neither has been exercised against a live subscriber yet, and the deployed verifier, **v0.1.1, does not check freshness — so nothing enforces expiry inside a cluster today**. [What's proven, and where](tested).
</Note>

## Worth knowing

Pull-only is enforced at the **edge proxy**, not by the registry — htpasswd cannot express read-without-write, so mutating verbs are gated in front of it and require the publisher credential. Bypassing that gate would still admit nothing: entries are signed with a key that is not on the registry, images are digest-pinned, and your policy checks both.

Next: [Verify](verify) · [Install](install)
