0008: Schedule polling outside the web workers

Status:

Accepted

Date:

2026-10-19

Context

Timers inside web workers multiply with replicas and workers and are hard to observe. Operators still need a manual refresh.

Decision

Scheduled polling runs as adriano poll from cron or a Kubernetes CronJob. Operators with the operate permission can also trigger a poll with POST /api/v1/sources/poll or /sources/{id}/poll; the request is answered with 202 and the same polling service runs in a background worker thread.

Consequences

  • No timers in the backend; replicas stay interchangeable.

  • Overlapping polls of one registration serialize on its advisory lock.

  • Progress and outcome are visible through GET /api/v1/sources and the intake_run log.