gendesign/tradein-mvp/backend/app/services
bot-backend 5dc9abecc9
All checks were successful
CI Trade-In / changes (pull_request) Successful in 7s
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 / openapi-codegen-check (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 50s
feat(tradein/pdf): редизайн отчёта в реальном языке МЕРА (v2 HUD), не в PRINZIP-референсе
Оба предыдущих раунда (#2327, #2427) опирались на frontend/public/tradein.html +
trade-in.css — старый демо-мокап «PRINZIP», стилизованный под Брусника-конкурента
(footer файла: `data: brusnika-obmen-style`). Реальный бренд «МЕРА» — это
/trade-in/v2, HUD/blueprint-дэшборд с другой палитрой (v2/tokens.ts),
другими шрифтами (Manrope + IBM Plex Mono вместо PT Sans/Serif) и другим
словарём компонентов (glass-карточки с угловыми HUD-скобками, нумерованные
секции, donut-гейдж качества данных, пунктирные разделители, source-pill).

- Шрифты: Manrope (инстансирован из variable-файла через fonttools
  varLib.instancer, т.к. WeasyPrint не поддерживает variable-font @font-face)
  + IBM Plex Mono 400/500, embedded тем же _font_data_url()-паттерном, что
  PT Sans/Serif в #2427.
- Палитра/chrome: _ACCENT*/_BORDER* заменены на полный набор токенов 1:1 из
  v2/tokens.ts; _page_header/_page_footer переписаны по мотивам HeroBar.tsx/
  Footer.tsx (мono meta-ячейки, пунктирная градиентная линия с акцентной
  серединой, wordmark на brand.name — white-label не сломан).
- Контент: status-pill (свежесть данных), source-pill, donut-гейдж качества
  (inline SVG, техника из ObjectSummary.tsx), угловые HUD-скобки на
  карточках, нумерованные заголовки секций (01-04), пунктирные разделители
  строк — метрики качества данных (источники/CV/разброс) считаются из
  реальных полей AggregatedEstimate, не выдуманы.
- Overflow-hardening (главная жалоба к прошлому прототипу — «текст
  залезает друг на друга»): overflow-wrap:anywhere на всех
  data-производных строках (адрес, brand.name, названия аналогов, диск-
  лаймер с UUID), никакого nowrap кроме заведомо ограниченных полей
  (даты/номер отчёта/короткие лейблы), table-layout:fixed на таблице
  примеров, break-inside:avoid на карточках преимуществ.
- Верификация: реальный рендер в Docker (WeasyPrint) на normal + stress
  фикстурах (длинный адрес, длинный white-label бренд, экстремальные
  цены) + объективный PyMuPDF bbox-overlap детектор поверх текста —
  2 итерации fix (переполнение страницы на cover, перенос wordmark
  посреди слова в футере), 3-я verify — ALL_CLEAR. Полный pytest (2265
  passed) + ruff чисты; 1 непроходящий тест и 3 ruff-находки подтверждены
  pre-existing на main (git diff main пуст на этих файлах).
2026-07-04 21:34:26 +03:00
..
exporters feat(tradein/pdf): редизайн отчёта в реальном языке МЕРА (v2 HUD), не в PRINZIP-референсе 2026-07-04 21:34:26 +03:00
matching fix(tradein/pii): удалить телефоны продавцов (NULL) + PII клиента (DROP) (#2217, #1969) 2026-07-03 23:00:42 +03:00
__init__.py feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
account_quota.py fix(tradein): atomic conditional quota increment — close TOCTOU (#747) (#749) 2026-05-30 15:52:34 +00:00
brand.py feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
buildings_query.py fix(tradein/sale-share): гард по этажности — отсечь near-neighbor mis-match 2026-06-29 00:31:09 +03:00
cache.py feat(tradein): Phase 3.2 — /api/v1/search endpoint + Redis cache (#479) 2026-05-23 14:44:22 +00:00
cian_price_history.py chore(tradein/scrapers): удалить весь legacy scrapers/ каталог — final E (#2397, #2277) 2026-07-04 15:58:15 +03:00
cian_session.py chore(tradein/scrapers): удалить весь legacy scrapers/ каталог — final E (#2397, #2277) 2026-07-04 15:58:15 +03:00
dadata.py fix(week-review): автофиксы код-ревью — 169 issue (label «week ревью 1») 2026-06-15 20:21:11 +05:00
estimator.py fix(tradein/estimator): устранить остаточные кросс-сорс дубли (#2291) (#2417) 2026-07-04 12:58:15 +00:00
gar_flats_loader.py feat(tradein): канонический матч ГАР↔houses (0%→41% yield) + tradein_canon_addr + --match-only (#2063) 2026-06-28 15:50:07 +00:00
geocoder.py feat(tradein/matching): fias_exact tier + estimate fias persist + suggest fias_id contract 2026-07-02 20:49:04 +03:00
house_dedup_merge.py refactor(tradein/scheduler): удалить legacy scheduler_loop + scraper-scheduling, kit единственный путь (#2397 Part C) 2026-07-04 13:00:30 +03:00
house_imv_backfill.py refactor(tradein/scrapers): удалить legacy scrape_pipeline.py + тест-хирургия (#2397 Part E1) 2026-07-04 13:56:06 +03:00
house_metadata.py feat(tradein): postgres_fdw live read of gendesign.cad_buildings (replaces snapshot) (#493) 2026-05-24 08:57:30 +00:00
image_sanitizer.py fix(week-review): автофиксы код-ревью — 169 issue (label «week ревью 1») 2026-06-15 20:21:11 +05:00
location_coef.py feat(tradein): location-coef MVP через FDW-мост к OSM POI Птицы (#2045) 2026-07-03 23:44:55 +03:00
product_handlers.py fix(tradein/scrapers): подключить geoportal coords backfill в scheduler (#1967) (#2346) 2026-07-03 23:25:47 +00:00
proxy_pool.py feat(proxy-pool): pool service (acquire/release/health) + healthcheck scheduler task (#2162) 2026-07-02 16:41:39 +00:00
rosreestr_poll.py feat(tradein): scheduled monthly Rosreestr new-quarter poll → ingest alert (#888) (#894) 2026-05-31 13:13:55 +00:00
sber_index.py fix(tradein): correct SberIndex hedonic/asking dataset-paths + 404 warning (#902) 2026-06-17 22:50:52 +03:00
scheduler.py refactor(tradein/scheduler): удалить legacy scheduler_loop + scraper-scheduling, kit единственный путь (#2397 Part C) 2026-07-04 13:00:30 +03:00
scrape_runs.py fix(tradein): persist scrape_runs.total_seen/new_count from sweep counters (#1926) (#1928) 2026-06-26 18:09:17 +00:00
scraper_adapters.py feat(tradein/scraper-kit): shared base/utils для providers/* (#2358, Foundation) 2026-07-04 03:50:55 +03:00
scraper_settings.py chore(tradein): деактивировать N1.ru scraper — источник переехал в Cian 2026-06-16 14:50:51 +03:00
search_query.py feat(tradein): segment=vtorichka|novostroyki|all query-param on listings (#1188) 2026-06-17 21:43:01 +03:00
yandex_address_backfill.py fix(tradein): yandex address-enrich — city-agnostic title regex (спутники ЕКБ) (#875) 2026-05-31 09:08:29 +00:00
yandex_price_history.py chore(tradein/scrapers): удалить весь legacy scrapers/ каталог — final E (#2397, #2277) 2026-07-04 15:58:15 +03:00
zhkh_flats_loader.py fix(tradein): cadastre ЖКХ-fallback + COALESCE merge-key + median-floors guard 2026-06-29 01:32:48 +03:00