UI (frontend/src/app/admin/scrape/page.tsx):
Новая секция "Catalog-object (SSR)" на /admin/scrape с:
- input max_objects (default 300)
- кнопка "Грузить (skip today)" — POST с force=false (пропускает уже сегодня)
- кнопка "⚡ Загрузить ВСЕ (force)" — POST с force=true (через confirm())
Backend (services/scrapers/domrf_catalog_object.py):
jitter_sleep между запросами 800-1500ms → 300-700ms (~2.3x speedup).
Catalog page менее sensitive чем kn-API; стабильно держала batch 300
без 429/WAF на bookkeeping тесте.
Effect: full sweep 1532 obj ~50 min → ~22 min. Повторный запуск с
skip-today вернёт 0 obj если всё уже сегодня обновлено.
PR #335 использовал `with db.begin_nested():` SAVEPOINT для per-row UPDATE,
но outer transaction никогда не commit'ился. После цикла Celery task
закрывал session (`db.close()` в finally) → autobegin'd outer tx
rollback → все UPDATE'ы теряются.
Симптом: task завершается с processed=3 succeeded=3, в Glitchtip нет ошибок,
но в БД ни одного catalog_scraped_at != NULL.
Fix: добавлен db.commit() после цикла + rollback на ошибку commit'а.