One budget, used everywhere
One number in the catalog
The catalog entry carries monthly_budget, in US dollars, production and non-production together. The cost rules read it from the entry, the Grafana root sets the cost dashboard's thresholds from it, and the project factory splits it 70 to 30 into a Google Cloud budget on each billed project, alerting at 80 and 100 percent.
The merge request knows the cost
At each approval the executor plans every root of the product, prices each plan with Infracost and posts one note per root, with that root's monthly cost against the budget and what is left out. The gate adds the roots' monthly costs and sets the merge request's Airframe cost check: it fails when the total or any one root is above the budget, or when a root could not be priced, and GitLab keeps the merge closed. The check's reason, which the executor prints in its job log, gives the total and each root's share. The refusal says to raise the budget in the catalog.
The cost dashboard shows it
A daily job reads the billing export and pushes each product's cost as metrics. Each product's Grafana folder has a cost dashboard: month to date and the forecast against the budget, orange at 80 percent and red at 100. The Grafana root creates it, with its thresholds from monthly_budget, when the product's catalog entry is merged.
Drift is reported, not hidden
On a repository's daily schedule, the drift job plans every root without applying it. When a plan is not empty, the platform opens an issue for that root listing the resources and their actions, never their values, rewrites it while the drift lasts, and closes it when the root converges again.