Builds on the existing product-level hard claim gate + idempotent accrual.
- Per-engine sub-ceilings (engineCeilingsUsd) with per-engine accrual
(spentByEngineUsd). An engine at its sub-ceiling is routed around at claim
time via the same per-engine availability gate as the circuit breaker — it
never pauses the whole product, so other engines keep flowing. Gated by
FLEET_BUDGETS (defaults off).
- /fleet/metrics now surfaces a budget summary (ceiling/spend/status/projection
+ per-engine breakdown) and derives guardrail alerts: budget_overspend_projected
(burn-rate extrapolation, guarded against early-window false alarms),
budget_exhausted, and engine_budget_exhausted. Surfaced whenever a budget exists,
independent of the enforcement flag, so operators see the burn in dry-run.
projectBudgetSpend is pure + unit-tested; per-engine spend follows the same
idempotent accrual path as the total, so spentUsd and spentByEngineUsd agree.
Generated with [Devin](https://cli.devin.ai/docs)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>