Build and Deploy / build-and-deploy (push) Successful in 2m2s
RecomputeService now tracks running/processed/total sources and the last run's new-intersection count via atomics (recompute() is already synchronized to one run at a time, so plain shared state is enough). New GET /api/recompute/status exposes it. The header polls this every second while a recompute is in flight (whether triggered by the button or an already-running scheduled job picked up on page load) and shows a progress bar + "processed / total" counter instead of just a static "Пересчёт..." label. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>