status.sigil.ml is the public face of operational state for Sigil mainnet and the Evolve canary. It speaks for the chain during an incident.
Architecture
- Static page:
index.htmlplus inline CSS and JS, served from a Cloudflare R2 bucket. - State file:
state.jsonin the same R2 bucket, polled by the page every 30 s. - Worker:
worker.js, a Cloudflare Worker bound to the R2 bucket. Accepts Alertmanager webhooks and operator manual-incident POSTs.
sigil-rpc. When the chain or the platform cluster is down, the page must stay up — that is exactly when the audience needs it.
Components tracked
| Component | Source of truth |
|---|---|
Mainnet RPC (rpc.sigil.ml) | Cloudflare WAF event log + up{job="sigil-rpc-mainnet"} |
Mainnet RPC direct (rpc-direct.sigil.ml) | ingress-nginx access log + up{job="sigil-rpc-direct-mainnet"} |
| Mainnet explorer | Cloudflare R2 site + Pages health |
Canary RPC (canary-rpc.sigil.ml) | Cloudflare WAF + up{job="sigil-rpc-canary"} |
| Canary RPC direct | ingress-nginx + up{job="sigil-rpc-direct-canary"} |
| Canary explorer | Cloudflare R2 + Pages |
| Wallet extension distribution | Chrome Web Store admin API |
| Canary faucet | Faucet service health endpoint |
| Snapshot infrastructure | Snapshot publisher health |
Documentation (docs.sigil.ml) | Cloudflare Pages health |
component=<name>, the Worker receives the webhook, and the relevant state.components[] entry flips to warn or bad.
Operator procedures
Post a manual incident
severity is warn (yellow) or bad (red). Anything else falls through to warn.
Resolve an incident
state.incidents[]. Older entries roll off; permanent records live in the post-mortem repo.
Rotate the operator token
Rotate the Alertmanager token
When the status page itself is broken
The page pollsstate.json every 30 s. If the file is missing or malformed, the page renders “Status data unavailable” with a yellow dot — not green, not silent.
Failure modes the page handles gracefully:
state.json404 → “Status data unavailable”.state.jsonmalformed → “Status data unavailable”.- R2 outage → page falls back to the last cached state in the browser (edge cache TTL = 30 s).
index.html404 → page fully down. R2 is the single point of failure for v1. Mitigation: keep a local copy ofindex.htmlin the repo and serve it from a personal machine through a temporary Cloudflare tunnel.- DNS hijack → out of scope; see Cloudflare DNSSEC posture.
Verifying the deployment
Cost
R2 storage < 1 GiB → ~0.20/month.See also
- DDoS protection — Cloudflare WAF rules.
- RPC endpoints — public RPC matrix.