Сайдкар распознаёт бан-страницу Авито («доступ ограничен: проблема с IP») по
маркерам тела и отдаёт 500 с ban_page=true; клиент поднимает
SidecarBanPageError. У Домклика её разбирают (#3239/#3283), у Авито — нет:
она попадала в общий `except Exception` и заворачивалась в
AvitoSidecarUnavailableError, то есть в ban_kind='infra'. Следствие — не
ярлык, а неработающая защита: report_ban не вызывался, узел не попадал в
scrape_proxy_source_bans и продолжал выдаваться в аренду для source=avito.
Прод, прогон 5606 (31.08): 64 бан-страницы за 23 минуты,
ban_kinds={"infra":26,"platform":7}, ноль записей бана для avito, прогон
оборван по доле блоков 14/20.
detail.py — ветка `except SidecarBanPageError` перед общим `except Exception`
(порядок важен: это подкласс httpx.HTTPStatusError). serp.py — та же проверка
ДО ротации и transient-бюджета: ротация в этой ветке мертва (max_rot=0),
поэтому ретраи маркерного бана ушли бы на тот же забаненный адрес — ещё два
захода на площадку и ~4-5 с задержки перед report_ban. Бюджет задуман под
блипы сайдкара (503 «browser unavailable»), а не под отказ площадки.
Обычная 500 без ban_page по-прежнему остаётся транспортным сбоем и report_ban
не вызывает — закреплено тестами в обе стороны.
Тесты: 5257 passed, 37 skipped.