Every usage-priced platform says it has budgets. The test is simple: what happens on the call that would cross the line? If the answer is "an alert fires", the budget is decorative.
In AstroFabric, the plan's credit envelope is written onto the workspace and enforced by a cost ledger. Every paid call reserves its estimated cost before executing and settles or releases after - and a lookup that returns nothing releases rather than settles, which is how pay-on-answer is enforced rather than promised. When the reservation would cross the ceiling, the call returns a structured 402 your code can catch. Nothing about that path is advisory.
Degrade in the right order
A hard stop at 100% is necessary, but the road to it matters. As the month fills, the platform drops freshness first (optional enrichment stops, signal sweeps slow), then fidelity (classification moves to a cheaper model), and only at the end coverage. A customer would rather have a smaller list refreshed daily than a bigger one refreshed weekly, so the ladder is ordered to protect the daily habit. The ordering is pinned by a monotonicity test in CI.
The same ledger meters revenue: data calls and agent runs land on usage meters that flow to billing, so what you are charged and what the ledger governed are one number, not two systems drifting apart.
Every playbook on this blog ships as a runnable mission.
Open a workspace and the playbook library is waiting - describe the outcome and the agents carry it end to end, on your plan's monthly credits.