fix(tradein/scrapers): диагноз блока терялся при схлопывании, а в алерт шла непроверенная причина #3183

Merged
bot-backend merged 1 commit from fix/3178-honest-ban-kind into main 2026-08-28 17:15:03 +00:00

1 commit

Author SHA1 Message Date
bot-backend
4adde9d7fb fix(tradein/scrapers): диагноз блока терялся при схлопывании, а в алерт шла непроверенная причина
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / changes (pull_request) Successful in 11s
CI / backend-tests (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 4m47s
Прогоны 5140-5190 писали ban_kind=unknown при том, что причина была
одна и та же во всех: AvitoBlockedError, firewall/soft-block (browser-mode).
Диагноз обнулял один нетипичный блок из пяти — правило схлопывания
требовало РОВНО одного вида, иначе unknown. Явное большинство (4 из 5)
пропадало вместе с редким.

Теперь mark_backfill_finished принимает перепись диагнозов, кладёт её
в counters["ban_kinds"] и выбирает по строгому большинству. Замысел
#2764 сохранён: пустая перепись и настоящая ничья по-прежнему дают
unknown — диагноз не назначается там, где его не видели.

Заодно убраны захардкоженные причины из ABORT-логов: "IP rate-limited"
у Авито и "QRATOR reputation likely burned" у Домклика. Ни одна из них
не проверялась кодом, и первая скрывала настоящий диагноз, лежавший
рядом в error_text прогона. Авито теперь пишет измеренную подпись
отказа, Домклик — "причина не определена": там нет failure_census,
и выдумывать измерение вместо него нечестно.

Refs #3178
2026-08-28 20:08:40 +03:00