Add smarter caching to reduce redundant work in cron jobs
ETag caching for state.json and GitHub tags API skips the full 2900-server
upsert and version update when data hasn't changed. Enrichment reuses
cached DNS/geo data from SQLite instead of re-resolving every run.
Cache-Control headers on HTML/API responses (1hr max-age). Batch size
bumped from 50 to 75.