fix(tradein): обход Домклика начинается со сдвигом — комнатности 2+ перестают быть слепой зоной (#2854) #2932

Merged
bot-backend merged 1 commit from fix/2854-domclick-bucket-rotation into main 2026-08-19 12:48:41 +00:00

1 commit

Author SHA1 Message Date
705c98801c fix(tradein): обход Домклика начинается со сдвигом — комнатности 2+ перестают быть слепой зоной (#2854)
All checks were successful
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 10s
CI Trade-In / browser-tests (pull_request) Has been skipped
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 4m55s
Блок QRATOR прилетает ВНУТРИ первой корзины: buckets_completed=0 во всех прод-
прогонах, включая тот, где собрано 389 лотов. Обход при этом всегда стартовал со
студий, поэтому корзины '2', '3', '4', '5+' не начинались вовсе.

Цена видна не в счётчиках, а в самих данных. Активные объявления по комнатности
(замер 19.08):

    комнат   домклик   циан   яндекс
    студии       575      3    2 451
    1            408  6 461    4 769
    2              1  7 352    4 895
    3              0  4 581    3 175
    4              0    873      780

Одна двушка и ноль трёшек. У соседних площадок 2+ комнат — около двух третей
выдачи, то есть Домклик как источник структурно не покрывает большую часть рынка.

Правка НЕ лечит блок. Она раздаёт то, что успевает собраться, по всем корзинам:
точка входа в ROOM_BUCKETS циклически сдвигается от прогона к прогону, состав
корзин не меняется. Работает при ОДНОМ свободном узле — это существенно, потому
что ротация lease, которую задача предлагает первой, сегодня упирается в пул: 3
включённых узла, 2 забанены Домкликом до 21.08.

Источник сдвига — run_id, не дата и не случайность: детерминирован (тест
воспроизводим), не зависит от часов, не требует нового состояния в БД. Строгого
round-robin не даёт, но за 30 суток каждая корзина получает порядка пяти стартов.

bucket_start_index попадает в counters: без него прогон неатрибутируем — «двушек
не собрали» и «до двушек не дошли» выглядят в данных одинаково.

Ложные деактивации при более редком сборе проверены и не подтвердились: сторож
здоровья источника работает, 15.08 прогон deactivate_stale_domklik показал
skipped_unhealthy=1 при confirmations=94.

Тесты: 3 красных на origin/main (TypeError на новом аргументе), 5 зелёных с обеих
сторон. Отдельный тест на ПРОВОДКУ — без него передачу сдвига можно снять, и
проверки скрейпера останутся зелёными; фальсифицирован снятием передачи.
2026-08-19 17:40:39 +05:00