gendesign/tradein-mvp/backend/app
bot-backend 9a83b79d91
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 7s
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 54s
fix(tradein/estimator): дом «2» вместо «15» при глухом названии станции метро в avito-адресе (#2423)
Root cause: _DEDUP_HOUSE_NO_RE требовал trailing \b после захваченной
цифры/литеры. Кириллическая буква и цифра — оба \w, между ними нет
word-boundary, поэтому когда avito приклеивает название станции метро
прямо к номеру дома без пробела («2Чкаловская11-15 мин. пешком»), матч
цифры «2» целиком отменялся, и .search() уезжал вправо до дистанции
«11-15» (где дефис даёт настоящую границу), ошибочно принимая «15» за
номер дома.

Фикс: убрали trailing \b (незачем — \d+ уже жадный), сузили суффикс-
литеру условием "это последний word-символ токена" через (?!\w) — не
просто "не кириллическая буква", а вообще ЛЮБОЙ word-символ (буква ИЛИ
цифра). Первая версия фикса ((?![а-яё]), из первоначального дизайна)
ловила метро-кейс, но ломала 4 существующих теста: avito-формат «6к1»
(литера корпуса приклеена к цифре без пробела) стал давать house="6к",
расходясь с эквивалентным domklik-форматом «6 к1» → "6" — guard_house
видел «6к» != «6» и блокировал законный cross-source merge. (?!\w)
устраняет и метро-баг, и эту регрессию разом: «6к1» теперь тоже даёт "6".

guard_house/union() не тронуты — чистая extraction-фикс, guard уже
корректно обрабатывает equal-or-missing house_no.

9 новых тестов (глухие метро-имена: обычное/дефисное/короткое; пин
letter-suffix/corpus-slash; partial-capture для глухого corpus-letter;
limitation-пин для двух склеенных числовых прогонов; 2 e2e merge/no-merge)
+ обновлены 2 существующих pinned-ожидания под улучшенное поведение "6к1".
2026-07-04 18:36:10 +03:00
..
api chore(tradein/proxy-pool): добавить domclick в provider_affinity CHECK (residential ASocks для #2000) 2026-07-04 17:21:07 +03:00
core refactor(tradein/scheduler): удалить legacy scheduler_loop + scraper-scheduling, kit единственный путь (#2397 Part C) 2026-07-04 13:00:30 +03:00
observability feat(tradein): enrich GlitchTip SDK init — integrations + PII scrub (#396) (#643) 2026-05-29 09:23:17 +00:00
schemas fix(tradein/estimator): lock honest asking_to_sold_ratio invariant + disambiguate torg bases (#2087 M2/M3) (#2387) 2026-07-04 06:48:51 +00:00
services fix(tradein/estimator): дом «2» вместо «15» при глухом названии станции метро в avito-адресе (#2423) 2026-07-04 18:36:10 +03:00
tasks Merge pull request 'refactor(tradein/tasks): yandex_newbuilding_sweep на kit + config= (#2397 Part D5)' (#2412) from refactor/tradein-partD5-yandex-nb-sweep-kit into main 2026-07-04 12:29:56 +00:00
__init__.py feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
main.py refactor(tradein/scheduler): удалить legacy scheduler_loop + scraper-scheduling, kit единственный путь (#2397 Part C) 2026-07-04 13:00:30 +03:00
scheduler_main.py refactor(tradein/scheduler): удалить legacy scheduler_loop + scraper-scheduling, kit единственный путь (#2397 Part C) 2026-07-04 13:00:30 +03:00