fix(tradein): TTL-деактивация не исполняется, пока сбор по источнику лежит (#2659) #2710

Merged
bot-backend merged 1 commit from fix/2659-ttl-knows-coverage into main 2026-08-06 08:40:42 +00:00

1 commit

Author SHA1 Message Date
917c911eb9 fix(tradein): TTL-деактивация не исполняется, пока сбор по источнику лежит
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 8s
CI Trade-In / frontend-checks (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 3m2s
Авито 10.07-26.07.2026: 17 суток подряд без единой собранной страницы, TTL=10
снял за отрезок 9 033 строки. 1 270 из них потом вернулись живыми, как только
сбор восстановился (сверка listing_source_snapshots с текущим last_seen_at) —
задача прочитала «мы не смогли зайти» как «объявление снято».

Гейт меряет здоровье НЕ статусом прогона, а результатом: сколько строк источник
подтвердил свежими за 3 суток, по той же колонке (last_seen_at / scraped_at) и
тому же срезу source+segment, что и сам UPDATE. Статус не годится — оба других
провала для него невидимы: yandex 18.07-30.07 (13 суток, все прогоны 'done',
ноль 'banned', total_seen=0) и domklik 20.07-30.07, чей TTL 02.08 снял 6 131
строку разом.

Пороги посчитаны по ряду подтверждений из listing_source_snapshots и лежат между
максимумом провала и минимумом здоровых суток: avito 1500 (провал 0..970,
здоровье 3542..6079), yandex/cian 500, domklik 200. Миграция 219 кладёт их в
default_params, не затирая ручную настройку; страховочный дефолт в коде — 500.
Цена ошибки асимметрична (пропущенная деактивация чинится следующим прогоном,
ложная — только повторным сбором), поэтому при сомнении прогон пропускается.

Пропущенный прогон закрывается mark_done со счётчиками
{deactivated: 0, confirmations: N, skipped_unhealthy: 1} — ни одна строка не
тронута, статусы прогонов не менялись.

Тест test_gate_blocks_every_day_of_the_17_day_avito_ban проигрывает реальный
прод-ряд по дням: каждые сутки провала блокируются, здоровые — нет.

Refs #2659
2026-08-06 13:12:31 +05:00