- scraper.py: --archive flag to scrape https://fundbureau.de/archiv.html
(past events), fixing a container-specific wait selector and a crash
on events with no door time that this surfaced.
- api: EventStore now merges an optional archive JSON file into the
main event list (deduped by date+name); adds GET /events/archive.
- api: GET /calendar.ics serves an RFC 5545 feed of all events for
webcal subscriptions, with an all-day fallback when no door time is
parseable.
- api: GET /health reports last-scrape time (from file mtime) and, via
new SCRAPE_CRON/ARCHIVE_SCRAPE_CRON env vars, the next scheduled run
and seconds until it, for both the regular and archive scrape.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>