fix(tradein/scrapers): обрыв по серии блоков рвал каждый прогон, включая здоровые #3188

Merged
bot-backend merged 1 commit from fix/3184-block-ratio-threshold into main 2026-08-28 18:22:26 +00:00

1 commit

Author SHA1 Message Date
bot-backend
745f15bdb1 fix(tradein/scrapers): обрыв по серии блоков рвал каждый прогон, включая здоровые
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 10s
CI / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 4m50s
Все 40 прогонов avito_detail_backfill за 14 суток закончились 'banned'.
Ни один не завершился штатно. Доля блоков при этом колебалась 25-100%:
прогон, обогативший 125 карточек из 190, получал тот же статус, что и
прогон 0 из 5.

Обрывало правило "N блоков подряд". Оно не отличает выгоревший пул от
здорового сбора, потому что блоки автокоррелированы и идут пачками: при
базовой доле 25-46% пачка из 5-6 подряд у независимой модели была бы
редкостью, а встречается в каждом прогоне. Критерий, срабатывающий
всегда, не несёт информации.

Теперь абортит доля блоков в скользящем окне последних N попыток
(дефолт 20 при пороге 0.7, оба в настройках с валидацией диапазона).
Пачка сама по себе обрыв не вызывает.

Safety-net старого поведения сохранён, но только для прогонов КОРОЧЕ
окна, где доля физически недостижима: 0/5 останавливается как раньше.
Без этого условия safety-net гасил бы сам фикс -- холодный старт
сессии самое вероятное место пачки, и длинный прогон обрывался бы на
пятой попытке точно так же, как до правки.

Домклик намеренно НЕ трогаем: у него один выделенный residential-прокси
без ротации, и max_consecutive_blocks=3 у него ниже avito осознанно
(data/sql/175) -- ранний обрыв бережёт репутацию единственного узла.
Наша калибровка сделана на пуле С ротацией и туда не переносится;
своя калибровка отдельной задачей.

В counters пишется гистограмма длин пачек -- без неё эффект этой и
любой следующей правки измерить нечем: сейчас там только итоги.

Refs #3184
2026-08-28 21:15:36 +03:00