fix(tradein/scrapers): диагноз блока терялся при схлопывании, а в алерт шла непроверенная причина #3183
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3183
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/3178-honest-ban-kind"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Суть
Прогоны 5140-5190 писали
ban_kind=unknown, хотя причина во всех была одна и та же — она всё это время лежала вerror_text:Разница между
unknownиplatform— один нетипичный блок из пяти. Правило схлопывания требовало ровно одного вида, и явное большинство пропадало вместе с редким.Что изменено
mark_backfill_finishedпринимает перепись диагнозов (Counter), кладёт её вcounters["ban_kinds"]и выбирает диагноз через новую чистую функцию_dominant_ban_kind— строгое большинство (count > total / 2).unknown. Диагноз не назначается там, где его не видели — ослаблено ровно то, что теряло большинство."IP rate-limited"(Авито) и"QRATOR reputation likely burned for the session/proxy"(Домклик). Ни одна не проверялась кодом. Первая скрывала настоящий диагноз, лежавший рядом._top_failure(failure_census)); Домклик — «причина не определена»: тамfailure_censusнет вовсе, и подставлять вместо него выдуманное измерение было бы тем же дефектом.Обратная совместимость
Counter(ban_kinds)одинаково принимает и старыйCollection[str], и новыйMapping[str, int]. Для старого вызова каждый вид получает count=1, и1 > n/2истинно только при n=1 — то есть поведение в точности старое. Из четырёх вызывающихban_kindsпередаёт только Авито; остальные идут на дефолт.Тесты
7 новых:
platform+ 1infra→platform(регрессия этого тикета)unknown(ничья честно неизвестна)counters["ban_kinds"]run_avito_detail_backfillIP rate-limitedruffчист по всем шести файлам. Ревью пройдено, замечаний нет.Test plan
ban_kindнеunknown, а вcountersпоявилась переписьCloses #3178