Status
The last 90 days. Green is a day with no recorded incident; amber is degraded; red is down. Every incident below the strip has a written note, and the build fails if one does not — a status page that can quietly drop a bad day is a status page that will.
Incidents
mempool.space stopped answering this server, and Bitcoin went quiet
2026-08-17 · 63 min · degraded
mempool.space began dropping this droplet's packets at roughly 3,400 requests a day — a rate limit, not an outage: the same host answered the outside world normally at the same second, and blockchain.info answered us in 0.48s from the same box. The wire had no way to notice. Every request carried its own timeout, so each call was bounded and the RUN was not: about 36 blocking connects a tick at 15 seconds each is 584 seconds before the tick wrote a word, against a 600-second limit. Ten ticks were killed in four hours, not computing but blocked. Bitcoin whale rows stopped for 63 minutes and the gap is on the ledger. Batch 12.46 added a per-host breaker, a Retry-After floor held on disk across processes, and a wall-clock budget per host per tick; 12.47 added a second road for Bitcoin so one host can no longer take the chain off the site. Batch 12.6 put the live daemon's own requests behind the same breaker — it had been the one process with no guard on it at all.
Ticks committed the news and deployed none of it
2026-08-17 · 33 min · degraded
The tick compared what it had rendered against a stored signature to decide whether to deploy. The comparison was against the signature of what was RUNNING rather than what had last SHIPPED, so a run that changed the site agreed with itself and skipped the deploy. For 33 minutes the wire published normally into data/, committed normally, and put nothing in front of a reader — the worst shape an outage can take, because every internal signal is green. Batch 12.45 made the gate compare against the last deployed signature and added a no-deploy counter: three consecutive commits without a deploy now raise wire-stuck.json with the words 'the wire is publishing news nobody can read'.
The wire stopped publishing for seven hours and nothing recovered it
2026-08-13 · 7h 16m · down
A local publish commit had not been pushed, and a merged branch had touched data/curation.json and data/cadence.json — two files every tick rewrites whether or not it publishes. The rebase hit a conflict it had no rule for, so run-wire.sh logged one warning and exited, and then did exactly that again every three minutes from 15:39 to 22:55 UTC. HEAD stayed on a seven-hour-old commit. The site kept updating only because unrelated code pushes were triggering the GitHub Actions fallback, which nobody had asked to be load-bearing — so from outside, a seven-hour outage looked like a quiet afternoon. What was missing was not detection: the failure was detected and reported correctly, 179 times, into a journal nobody was reading. What was missing was a way out of it and a way to say so. Batch 12.35 gave the rebase a conflict rule (resolve toward the remote for the files a tick regenerates, stop for anything else) and added wire-stuck.json, which reaches the public heartbeat after three consecutive failed ticks.
Publishing itself is a systemd timer that ticks every three minutes, and a live daemon holds two sockets open beside it. When the wire stalls, the public heartbeat says so — see heartbeat.json. Accuracy is the other half of this: this page is whether we were publishing, that one is whether we were right.