gendesign/tradein-mvp/backend/app
bot-backend 10155eb0fb fix(tradein): word-boundary street match + cian unescape robustness (Refs #769 A1+D)
Часть A1 (#10 correctness): address ILIKE '%street%' давал ложные совпадения
(«Мира» матчит «Адмирала Макарова») → раздувало аналоги оценки. Добавлен
word-boundary regex (~* :street_regex, \m..\M) рядом с ILIKE-prefilter в
trade_in.py (street-deals) и estimator.py (_fetch_dkp_corridor). Bind-param,
не f-string. Только предикат street-match, anchor/pricing не тронуты.

Часть D (#16): cian_state_parser hand-rolled unescape был order-dependent
(\" заменялся раньше \ → порча) → backslash в описании ронял парс всей
страницы. Заменён на атомарный json.loads внешней quoted-строки.

Тесты: «Мира»≠«Адмирала Макарова» но =«Мира 5»; backslash-в-описании
парсится. 22 passed, ruff clean.

A2 (trgm index) / B (FDW options) / C (matview refresh) / E (geo centroid)
ОТЛОЖЕНЫ — нужна live tradein-DB / investigation (follow-up в #769).
2026-05-30 20:13:07 +03:00
..
api fix(tradein): word-boundary street match + cian unescape robustness (Refs #769 A1+D) 2026-05-30 20:13:07 +03:00
core fix(ratio): ppm² потолок asking→sold в конфиг, default 1.2M (Refs #767) (#790) 2026-05-30 16:57:09 +00:00
observability feat(tradein): enrich GlitchTip SDK init — integrations + PII scrub (#396) (#643) 2026-05-29 09:23:17 +00:00
schemas docs(tradein): clarify n_analogs vs analogs[] top-10 cap (#698) (#737) 2026-05-30 15:00:48 +00:00
services fix(tradein): word-boundary street match + cian unescape robustness (Refs #769 A1+D) 2026-05-30 20:13:07 +03:00
tasks fix(ratio): ppm² потолок asking→sold в конфиг, default 1.2M (Refs #767) (#790) 2026-05-30 16:57:09 +00:00
__init__.py feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
main.py feat(tradein): enrich GlitchTip SDK init — integrations + PII scrub (#396) (#643) 2026-05-29 09:23:17 +00:00