PASS: manual batch starts from cursor and honors limit PASS: manual batch cursor wraps PASS: manual batch wraps across end PASS: manual batch next cursor is correct PASS: time budget stops long web runs PASS: time budget allows short runs PASS: manual run uses POST action PASS: legacy GET manual run removed PASS: manual run has separate log PASS: cron log remains visible separately PASS: health-paused source is not presented as effectively active PASS: cron shares global scraper lock PASS: base schema contains weather_cities header SCRAPER_MANUAL_RUN_OK