Fixes a bug where a transient lookup or database hiccup could silently drop an available domain from the daily report - the report would cheerfully say "0 domain updates" even though the domain was still available.
What's changed:
- Failed checks no longer destroy known state - a transient RDAP or D1 error keeps the domain's last definitive status instead of flipping it to
error - Reports are built from stored state, so an available domain shows up every day even if that day's check fails
- New "Check Failures" section in Slack, Discord and email reports - failures are visible instead of hidden behind an "all quiet" message
- Retries for RDAP lookups (429 / 5xx / timeouts) and transient D1 write errors
- Registered domains without expiry data (e.g.
.de/.ch) are included in cron checks again instead of being excluded forever