The production economy DB (the Treasury ledger — system of record, ~1.5 GB, ~6.4M rows; ledger_postings + ledger_txns + chestshop_sale are ~93% of it) had no automated backup. The economy-flyway CI operator runbook treats a "pre-deploy DB backup" as the canonical rollback path, but that is a manual dump an operator takes before a Flyway migration. The 2026-05-30 suite audit flags this: "no automated rollback (backup restore only)."
New GitOps app apps/economy-db-backup/ (ParadauxIO/gitops) — a CronJob in the production namespace:
mariadb:11) — mariadb-dump --single-transaction (shared-hosting-safe flags) → gzip.rclone/rclone) — upload to Cloudflare R2, prune objects older than 14 days.treasury-rest-api-democracycraft-secrets (DB_URL/DB_USERNAME/DB_PASSWORD) — nothing new to rotate.apps/*/overlays/* ApplicationSet generator.economy-db-backups.kubectl -n production create secret generic economy-backup-r2-creds with ACCESS_KEY_ID / SECRET_ACCESS_KEY / ENDPOINT / BUCKET.Until the secret exists, the Job fails harmlessly (nothing reads the dump). Restore + verify procedure documented in apps/economy-db-backup/README.md.
Manifests written + kubectl kustomize validated locally. Pending: commit to gitops main + operator creates the R2 bucket/secret. StateCraft DB not covered (documented how to extend).