| Level | What is sent | Quiet hours |
|---|---|---|
| Wake | Push to your phone with I'm on it. No tap in 5 minutes: a phone call. No answer: the next person, push then call. | Ignored: wake always goes through |
| Tell | One message to the first person who can be reached (push, Slack, Telegram, email or webhook). No call. | Held until they end |
| Log | Nothing. Recorded on the problem and counted in the weekly email. | n/a |
The four floors
These always wake someone. The AI is never asked about them, and they are checked before anything else.
| Floor | Fires when |
|---|---|
| App silent | No heartbeat for 5 minutes (the SDK sends one every 60 seconds) |
| Crash loop | 3 or more restarts |
| 5xx burst | 10 or more server errors, at least 5% of requests and at least 3× your normal rate |
| Payments failing | 3 or more payment errors, and at least 2% of payment requests when request counts are known |
The decision order
- Floor? Wake.
- Same as the normal background for this app? Log.
- AI allowance used up? Tell, without the diagnosis.
- Otherwise the AI helper (Claude) picks the level from the scrubbed samples and recent deploys.
- If the AI is unsure, slow or fails: tell. Never log.
A failed alert path gets louder, never quieter. That rule is in the code, not just this page.