fix(browser-sidecar): бан-страница площадки отдаётся 403, а не 500 (#3288 п.C) #3379
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
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3379
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/3288-sidecar-ban-status-code"
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?
Часть #3288 (п. C). Не закрывает issue.
Дефект. Сайдкар на
BanPageDetectedErrorотвечал HTTP 500 — «наша ошибка», хотя это отказ площадки; текстSidecarBanPageErrorв логах говорил про «sidecar 500» (см. error-text-names-the-messenger — ложный гонец в трёх местах:avito/detail.py,avito/serp.py,domclick/detail.py).Фикс.
browser/server.py::fetch_handler:BanPageDetectedError→ 403 (тело прежнее:error/ban_page/status). Клиентbrowser_fetcher.pyраспознаёт бан по телу (ban_page), не по коду — образы backend и browser деплоятся отдельно и расходятся на часы; гейт по коду уводил бы отказ площадки в инфра-ветку на время рассинхрона. Текст исключения:tradein-browser: площадка отдала бан-страницу (upstream 403, ответ сайдкара 403)— все три вызывающих подставляют{exc}, без правок провайдеров. 403 не 451 (451 — блок по закону). Своих 403 сайдкар не отдаёт (валидация 400/422, нет прокси/браузера — 503).classify_browser_probeкладёт любой>=400вsidecar— поведение пробы не меняется.SidecarBanPageErrorв avito/serp стоит ДО soft-ban-эвристик по 503.Тесты:
browser/test_server_http_status.py,backend/tests/test_kit_browser_fetcher_status.py(в т.ч. legacy-500 остаётся распознанным).Фальсификация (откат клиентского хунка + гейт «ban_page только на 500»): 4 failed — вместо
SidecarBanPageErrorподнимается голыйHTTPStatusError(инфра-ветка). Восстановлено.Прогоны: backend
-k "avito or ban or fetcher or sidecar or 3283 or 3287 or 3288"712 passed; сайдкар-сьют 233 passed; ruff OK.Приёмка на проде: после деплоя обоих образов первый зафиксированный бан площадки в логах backend — строка
upstream N, ответ сайдкара 403иban_kind=platformв run counters, безHTTPStatusError 500отtradein-browser.