Divvent

For Divvent’s own team. It is generated from the operations document in our repository, which is the one to edit. If you use Divvent, the help centre is for you.

6n. The outside watch: nothing else watches the watcher

Monitoring, incidents and operator mail run inside the control plane's scheduler (§6k), so a failure of the control plane alone could never page anybody through them (the full analysis, A4). Two things watch from outside Cloudflare, holding no platform credential:

  1. **watch.yml**, hourly and by hand: node scripts/watch.mjs, with no install. For each environment in infra/watch.json it asks the portal's /_divvent/health; the scheduler's pulse, /_divvent/scheduler, which answers 503 once no hourly fleet-health pass has been kept for 135 minutes; the console's Access door (Access turning a stranger away is up — a 2xx means the perimeter is gone, and pages); and the canary at vars.WATCH_CANARY_URL. Anything down pages by ntfy and/or Pushover and fails the run. Hourly, not every fifteen minutes, because a scheduled run is billed a whole minute and fifteen would be about 2,900 a month — more than the included allowance.
  2. An external uptime monitor, the fast path, because GitHub delays and drops schedules (deploys.yml records gaps of hours). Recommended: UptimeRobot's free tier (five-minute checks) on https://app.divvent.dev/_divvent/health (expects 200), https://app.divvent.dev/_divvent/scheduler (200; 503 is a stopped scheduler) and the canary's /_divvent/health, alerting to its phone app and the same ntfy topic. Its free tier cannot count a 403 as up, so the console's door stays watch.yml's.

Set up — BY HAND (awaiting Ant): the ntfy app on your phone and an unguessable topic set to maximum priority (or a Pushover application); GitHub repository secrets WATCH_NTFY_TOPIC (and WATCH_NTFY_TOKEN for a protected topic) and/or WATCH_PUSHOVER_TOKEN + WATCH_PUSHOVER_USER; the variable WATCH_CANARY_URL, the canary's workers.dev origin as divvent doctor prints it; and the UptimeRobot monitors. Test the pager by dispatching watch.yml with WATCH_CANARY_URL pointed at an address that answers 500. When production serves, add "prod" to infra/watch.json and the same monitors for its hostnames.