Roll out in waves
llms.txt lists every page for an agent
Show the whole prompt
Read https://intentius.io/chant/ci/waves/
Write the waves spec I describe as `waves.json`, with a `gate` on every wave past the first, and run `npx chant run --generate <forge> --spec waves.json`.
Open a change with the spec and the pipeline, and list each wave's gate name. Do not run `chant run wave` or `chant run resume` yourself.
Never deploy to a real cloud account or shared environment (with `chant run`, `chant components` or a platform's own CLI), approve (a pull request review, `chant approve` or `chant run approve`), override a policy denial (`chant approve policy-override`), or merge; never cut or publish a release (`chant release cut --yes` or `chant release publish`), push or delete a `ci/*` tag (`chant ci tick` pushes them), or change the value of an existing flag; never touch `.chant/allowed_signers` or `chant/lifecycle`.Optional: hand this page to your coding agent
Read https://intentius.io/chant/ci/waves/Write the waves spec I describe as `waves.json`, with a `gate` on every wave past the first, and run `npx chant run --generate <forge> --spec waves.json`.Open a change with the spec and the pipeline, and list each wave's gate name. Do not run `chant run wave` or `chant run resume` yourself.Never deploy to a real cloud account or shared environment (with `chant run`, `chant components` or a platform's own CLI), approve (a pull request review, `chant approve` or `chant run approve`), override a policy denial (`chant approve policy-override`), or merge; never cut or publish a release (`chant release cut --yes` or `chant release publish`), push or delete a `ci/*` tag (`chant ci tick` pushes them), or change the value of an existing flag; never touch `.chant/allowed_signers` or `chant/lifecycle`.{ "name": "migrations", "op": "migrate", "plan": ["./bin/plan", "{target}", "{plan}"], "apply": ["./bin/apply", "{target}", "{plan}"], "waves": [ { "name": "dev", "runs": [{ "target": "dev" }], "gate": "never" }, { "name": "staging", "runs": [{ "target": "staging" }], "gate": "on-destructive" }, { "name": "prod", "runs": [{ "target": "prod" }], "gate": "always" } ]}op names an Op in the repository. Render the jobs for your forge:
chant run --generate github --spec waves.jsonA push to main runs wave 1. Each job plans its wave and decides:
gate | The wave waits when |
|---|---|
always | a plan changes something |
on-destructive | a plan is destructive |
never | never |
A waiting wave applies nothing, exits 3 and prints its approve line. The approval covers one digest over all the wave’s plans, and the waves after it do not run until it passes.
chant approve migrations migrations-wave-3 --plan jcs1-sha256:... --resume--resume starts the waiting job again and needs a forge token. Resume the waiting job lists the scope on each forge.
A failed run blocks only the runs that depend on it. Under apply on merge, --wave-gate <name> gives each wave of the component graph its own gate. Every field is in Op waves.