gendesign/tradein-mvp/backend
bot-backend de491f4dec
All checks were successful
CI / changes (pull_request) Successful in 9s
CI Trade-In / browser-tests (pull_request) Has been skipped
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 3m57s
CI Trade-In / changes (pull_request) Successful in 9s
fix(tradein/yandex): «непригодных» 3535 не было — адресуем их по offerId
unenrichable_pending шесть прогонов подряд равнялся ровно 3535. Счётчик
считается живым SELECT'ом (кэша/матвьюхи нет), но множество замкнуто: после
#2235 продюсер таких строк не создаёт (0 из 6892 yandex-строк, вставленных
после самой свежей его строки id 2583989), а выйти оттуда нельзя — обогащение
недостижимо, а source_url не переписывается. Замкнутое множество и обязано
быть константой; вопрос был не «почему не растёт», а «правда ли непригодны».

Непригодны они не были. У всех 3535 в source_id лежит числовой yandex offerId
(у 3523 продублирован в yandex_offer_id), а канонический адрес из него
собирается — тот же инвариант #2235 и та же формула, которой чинила легаси
миграция 164. Живая проба прод-трактом (тот же прокси, curl_cffi chrome120,
тот же parse): 6 из 6 HTTP 200 + parse OK, включая строки, чей сохранённый
source_url — рекламный редирект na100.pro/go.php.

Откуда стухший адрес: source_url пишется только при вставке — его нет ни в
ON CONFLICT DO UPDATE, ни в reconcile-UPDATE save_listings. Поэтому #2235
вылечил только новые строки, а миграция 164 — только те легаси, чей URL делили
несколько строк (она искала дубли URL, а не непарсимость). Строки с уникальной
ссылкой на карточку застройщика не попали никуда и носят адрес, замороженный в
момент вставки, хотя свип переобходит ~511 из них в сутки.

Что сделано: очередь адресует такие строки URL, вычисленным из source_id, а
остаток очереди разделён по причине — url_from_offer_id (адрес чиним, должен
убывать) и unenrichable_pending (адресовать нечем; на проде 0). Одно число на
две разные судьбы читалось как «тут делать нечего» и держало 3535 квартир вне
обогащения неделю.

Проверено на проде (read-only): новый снапшот-SELECT отдаёт 800/800 строк с
адресом, который парсер принимает; счётчики 3535/0; разбиение точное —
queueable 13921 = pending 13921, unaddressable 0.

Не входит сюда: починка самой колонки source_url одноразовым UPDATE (тот же
164 без условия на дубли) — за миграцией; от неё зависит и
yandex_address_backfill, где 1618 из 5217 кандидатов ходят на сайты
застройщиков вместо Яндекса.
2026-08-12 19:58:34 +05:00
..
app fix(tradein/yandex): «непригодных» 3535 не было — адресуем их по offerId 2026-08-12 19:58:34 +05:00
data/sql fix(tradein/estimate): не перетирать дату обращения при оживлении оценки (#2828) 2026-08-11 05:52:05 +00:00
scripts fix(tradein/scraper): дневной снимок узнаёт свой прогон (#2701) (#2707) 2026-08-06 07:00:17 +00:00
tests fix(tradein/yandex): «непригодных» 3535 не было — адресуем их по offerId 2026-08-12 19:58:34 +05:00
.dockerignore feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
Dockerfile feat(tradein): версионирование продукта — единый источник, подвал, PDF, /versions (#2824) 2026-08-10 16:00:54 +00:00
pyproject.toml feat(tradein/auth): password hashing + session config foundation (#2550) 2026-07-30 09:40:51 +03:00