budget dismiss-recovery
Dismiss the sticky recovery banner that displays after an auto-shutdown recovers. Equivalent to clicking "Dismiss" in the Console banner.
Usage
convox budget dismiss-recovery <app>
Examples
Dismiss the active recovery banner on myapp:
$ convox budget dismiss-recovery myapp
Dismissing recovery banner for myapp... OK
Idempotent — second call is a no-op:
$ convox budget dismiss-recovery myapp
Recovery banner already dismissed for myapp
No banner present:
$ convox budget dismiss-recovery myapp
No recovery banner present for myapp
Behavior
- The dismiss is per-app, not per-user. Once dismissed by any user the banner hides for everyone viewing that app.
- The dismiss timestamp is stored as a namespace annotation. The stale-annotation GC clears it one tick after the underlying shutdown-state annotation passes terminal-state, so cycle-N's dismiss never leaks into cycle-N+1's RECOVERED banner. (Pre-3.24.6 racks had a leak that has been fixed; for stuck pre-fix racks see the troubleshooting recipe.)
- Emits the
app:budget:auto-shutdown:dismissedaudit event with the authenticatedactor. Receivers ingesting auto-shutdown events should treat this as audit-only (not part of the 9 lifecycle events). See Webhook Signing. - Concurrent dismiss clicks (e.g. two operators clicking simultaneously) are
serialized via the per-app lock; only one fresh
:dismissedevent fires, the second observesStatus="already-dismissed".
See Also
- budget — full budget command group
- Recovery banner persistence — recovery for racks already in stuck state
- ack_by Derivation — actor field semantics