concept
CH table metadata: esios.ingest_checkpoints
Ingestion checkpoints for indicators: when, how (trigger), and over which date range each indicator was (re)loaded into `esios.indicators`. One lifecycle covers both the user re-ingest queue (status pending/running) and the run ledger (done/failed). Scheduled worker refreshes insert `done` rows directly; paying users enqueue `pending` rows via POST /ingest/reingest (MCP tool `request_reingest`) and the worker drains them: cache-busts the requested range, force re-fetches it from ESIOS, deletes t
# `esios.ingest_checkpoints`
Ingestion checkpoints for indicators: when, how (trigger), and over which date range each indicator was (re)loaded into `esios.indicators`. One lifecycle covers both the user re-ingest queue (status pending/running) and the run ledger (done/failed). Scheduled worker refreshes insert `done` rows directly; paying users enqueue `pending` rows via POST /ingest/reingest (MCP tool `request_reingest`) and the worker drains them: cache-busts the requested range, force re-fetches it from ESIOS, deletes the CH range (authoritative reload — survives ESIOS retractions), re-syncs. Freshness surface: GET /ingest/freshness (MCP `data_freshness`). FK to `esios.indicators` gives catalog traversal and enqueue validation.