# apps App-tier manifests, rendered from `catalog/*.yaml` ServiceDefinitions by `catalog/render.py` and split into dependency-ordered **waves** (`wave-/`). - Each `wave-/` is reconciled by its own Flux Kustomization `apps-wave-` (`clusters/base/apps-wave-.yaml`), which `dependsOn` wave N-1 (wave 0 dependsOn `platform-config`) and health-gates (`wait: true`) ONLY that wave. A crashlooping workload in a later wave can no longer stall an earlier wave or block new revisions. - `wave-/kustomization.yaml` and `clusters/base/apps-wave-.yaml` are **generated** — run `python3 catalog/render.py --emit-waves` after onboarding a service; do not hand-edit them. - Wave assignment = longest dependency-path depth over the catalog `dependencies:` graph; a co-located CNPG database `-db` is a leaf and always lands strictly below its consumer. See [`../DESIGN-waves.md`](../DESIGN-waves.md) for the wave table, Flux topology, and the cutover runbook.