Обход yandex_newbuilding_sweep не разрешил НИ ОДНОГО дома с 16.07.2026:
четырнадцать прогонов подряд `processed 5, succeeded 0`, витрина
market.yandex_jk_enrichment замерла на 34 строках, очередь выросла 351 → 397.
При этом статус у всех — `done`, error_text пуст.
ЧТО ИМЕННО СЛОМАЛОСЬ (замер 19.08 через браузерный сайдкар прода, тем же
трактом, каким ходит сам обход)
Резолвер искал slug на выдаче с фильтром `?siteId=<jk_id>`. Фильтр Яндексом
больше НЕ применяется: страница отдаёт общий список новостроек — 1.7 МБ,
35 разных ЖК, запрошенного id среди них нет. Проверено на двух разных id,
ответы почти совпадают.
Разметка при этом ЦЕЛА: прежний regex находил 128 ссылок нужной формы. То
есть парсер работал, а стратегия умерла — и предположение «markup drift?»
в логе было неверным. Вопросительный знак из кода убран вместе с догадкой.
ПОЧЕМУ НОВЫЙ ПУТЬ РАБОТАЕТ
В URL Яндекса авторитетен id, slug — косметика. Запрос страницы с
плейсхолдером вместо slug доезжает до нужного ЖК:
/kupit/novostrojka/zhk-286394/ → ЖК «Успенский», slug uspenskij
/kupit/novostrojka/zhk-2671892/ → «ШишкINN», slug shishkinn
Отрицательный контроль: несуществующий id 999999999 отдаёт общий список,
ссылок с этим id нет → None, а не чужой slug.
Плейсхолдер отфильтрован из результата: страница ссылается сама на себя
запрошенным адресом, и без этого мы бы «разрешили» slug в тот, что сами же
и придумали.
СТАТУС ПРОГОНА
processed > 0 при succeeded == 0 больше не `done`. Счётчик был честный —
не хватало вывода из него (эпик #2674, «механизм исполняется, вывод не
делает никто»). Счётчик НЕ подгоняем: если дома не разрешаются, честный
исход — назвать прогон неуспешным.
Тесты двусторонние: против main падают 3 из 4 у резолвера
(requests_jk_page, reads_real_slug, does_not_return_placeholder) и 1 из 3
у статуса (zero_resolved_marks_run_failed). Остальные — контроли:
«общий список → None» зелёный с обеих сторон (в этом и была поломка),
«1 из 5 разрешён → done» и «пустая очередь → не отказ» защищают от
обратной крайности.
Хунк форматирования — не мой: pre-commit ruff v0.7.4 против 0.15.12 (#2864).
Refs #2860