The endpoint docstring (→ openapi description → api-types JSDoc) changed when
scrape_freshness was split into compute_freshness + thin handler, so the
committed api-types.ts was stale and openapi-codegen-check failed. Regenerated
via the CI chain (only JSDoc lines differ; no shape change). Refs #73
Extract compute_freshness(db) from the /admin/scrape/freshness handler (single
source of truth, endpoint response unchanged) and add a daily beat task
scrape_freshness_check that alerts via sentry_sdk.capture_message when a source
is stale/failed — level=error if a critical source fully failed, else warning;
also logs at matching severity so a no-DSN worker still surfaces it. Registered
in celery include + beat (09:00 MSK daily, after the nightly scraper cluster).
Closes #freshness-monitor (rank 7 follow-up)