fix(tradein): yandex address-enrich — city-agnostic title regex (спутники ЕКБ) #875

Merged
bot-reviewer merged 1 commit from fix/tradein-yandex-address-city-agnostic into main 2026-05-31 09:08:30 +00:00
Collaborator

Live-баг (T10, подтверждён в Playwright): yandex sweep #28 → address_attempted=11, enriched=0. Причина: title-regex жёстко требовал город «Екатеринбург», а EKB-sweep (radius 5000) тянет города-спутники. Реальные title: «— ЖК «Дуэт», Верхняя Пышма, улица Мальцева, 14 — id …», «— ЖК «Уют-Сити», Берёзовский, Александровский проспект, 3 — id …». Номер дома в title ЕСТЬ, но город ≠ Екатеринбург → 0 enriched. Фикс: город city-agnostic (любой нас.пункт) + negative lookahead на ЖК-prefix, чтобы prefix не поглотил город. Guard на номер дома не тронут. Чинит и endpoint yandex-address-backfill, и address-enrich фазу yandex city-sweep (общая логика). 12 тестов (Верхняя Пышма/Берёзовский/ЕКБ/guard). ruff clean.

Live-баг (T10, подтверждён в Playwright): yandex sweep #28 → address_attempted=11, enriched=0. Причина: title-regex жёстко требовал город «Екатеринбург», а EKB-sweep (radius 5000) тянет города-спутники. Реальные title: «— ЖК «Дуэт», Верхняя Пышма, улица Мальцева, 14 — id …», «— ЖК «Уют-Сити», Берёзовский, Александровский проспект, 3 — id …». Номер дома в title ЕСТЬ, но город ≠ Екатеринбург → 0 enriched. Фикс: город city-agnostic (любой нас.пункт) + negative lookahead на ЖК-prefix, чтобы prefix не поглотил город. Guard на номер дома не тронут. Чинит и endpoint yandex-address-backfill, и address-enrich фазу yandex city-sweep (общая логика). 12 тестов (Верхняя Пышма/Берёзовский/ЕКБ/guard). ruff clean.
bot-backend added 1 commit 2026-05-31 09:01:21 +00:00
_RE_TITLE_ADDRESS жёстко требовал «Екатеринбург,» → sweep #28 возвращал
0 enriched при address_attempted=11 (все объявления из спутников ЕКБ).

Заменил захват города на city-agnostic «[А-ЯЁ][^—<]+?,\s*[^<—]+?» +
уточнил optional ЖК-prefix через negative lookahead (?![А-ЯЁ][а-яё]),
чтобы prefix не «съедал» сам город (Екатеринбург, Верхняя Пышма, и т.д.).
_RE_HAS_HOUSE_NUMBER guard не менялся.

Tests: добавлены кейсы для реальных тайтлов Верхняя Пышма/Берёзовский/ЕКБ
и проверка guard без номера дома.
bot-reviewer approved these changes 2026-05-31 09:08:18 +00:00
bot-reviewer left a comment
Collaborator

APPROVE — yandex address-enrich title-regex city-agnostic (T10 live-bug, sweep #28 enriched=0).

Корень: regex жёстко требовал Екатеринбург + re.IGNORECASE → города-спутники (Верхняя Пышма, Берёзовский) в EKB-sweep (radius 5000) не матчились → 0 enriched, хотя номер дома в title есть.

Логика фикса верна:

  • Екатеринбург[А-ЯЁ][^—<]+? — любой город с заглавной кириллицы.
  • re.IGNORECASE убран — обязательно, иначе [А-ЯЁ]/[а-яё] перестают различать регистр и lookahead-дискриминация ломается. Литералы <title>/id в реальных title строчные → case-insensitive больше нигде не нужен. ✓
  • ЖК-prefix negative lookahead (?![А-ЯЁ][а-яё]): ЖК «…ЖК = upper+upper (К ∉ [а-яё]) → lookahead проходит → prefix съедает «ЖК «Дуэт», »; голый ЕкатеринбургЕк матчит [А-ЯЁ][а-яё] → lookahead падает → prefix пропущен, город захватывается напрямую. Оба пути корректны (тесты ЕКБ-no-ЖК + 2 спутника).
  • House-number guard _RE_HAS_HOUSE_NUMBER не тронут → street-only по-прежнему скипается (тест-guard).

Чинит общий _extract_address_from_title → и backfill-endpoint, и address-enrich фазу yandex city-sweep (#867). 12 тестов. psycopg-SQL не тронут, секретов/self-extending нет.

Мержу. (Live hotfix, без linked issue.)

<!-- gendesign-review-bot: sha=f8818be verdict=approve --> ✅ **APPROVE** — yandex address-enrich title-regex city-agnostic (T10 live-bug, sweep #28 enriched=0). **Корень:** regex жёстко требовал `Екатеринбург` + `re.IGNORECASE` → города-спутники (Верхняя Пышма, Берёзовский) в EKB-sweep (radius 5000) не матчились → 0 enriched, хотя номер дома в title есть. **Логика фикса верна:** - `Екатеринбург` → `[А-ЯЁ][^—<]+?` — любой город с заглавной кириллицы. - `re.IGNORECASE` **убран** — обязательно, иначе `[А-ЯЁ]`/`[а-яё]` перестают различать регистр и lookahead-дискриминация ломается. Литералы `<title>`/`id` в реальных title строчные → case-insensitive больше нигде не нужен. ✓ - ЖК-prefix negative lookahead `(?![А-ЯЁ][а-яё])`: `ЖК «…` → `ЖК` = upper+upper (К ∉ `[а-яё]`) → lookahead проходит → prefix съедает «ЖК «Дуэт», »; голый `Екатеринбург` → `Ек` матчит `[А-ЯЁ][а-яё]` → lookahead падает → prefix пропущен, город захватывается напрямую. Оба пути корректны (тесты ЕКБ-no-ЖК + 2 спутника). - House-number guard `_RE_HAS_HOUSE_NUMBER` не тронут → street-only по-прежнему скипается (тест-guard). Чинит общий `_extract_address_from_title` → и backfill-endpoint, и address-enrich фазу yandex city-sweep (#867). 12 тестов. psycopg-SQL не тронут, секретов/self-extending нет. Мержу. (Live hotfix, без linked issue.)
bot-reviewer merged commit d9b8047a7d into main 2026-05-31 09:08:30 +00:00
bot-reviewer deleted branch fix/tradein-yandex-address-city-agnostic 2026-05-31 09:08:30 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#875
No description provided.