2026-06-15 - 2026-07-15
Overview
660 pull requests merged by 3 users
Merged
#2525 fix(tradein/scraper): per-city SERP location for oblast city-sweep (#12)
Merged
#2524 feat(tradein/ui): admin links to audit + analytics in UserMenu
Merged
#2523 fix(tradein/avito): route sidecar timeout/transport errors as transient, not crash
Merged
#2522 fix(tradein/audit): exclude /api/v1/admin/* from api_request events
Merged
#2521 feat(tradein/admin): audit + activity dashboards (Feature 2/3 UI)
Merged
#2520 feat(tradein/admin): audit + analytics read API over user_events
Merged
#2518 fix(tradein/estimator): analogs cards match n_analogs, no cross-source dups
Merged
#2516 fix(tradein/auth): honest 401/error screens in RouteGuard instead of misleading text
Merged
#2517 fix(tradein/quota): per-user quota override + no burn on empty result
Merged
#2519 feat(tradein/audit): request-audit middleware + estimate_request logging → user_events
Merged
#2515 feat(tradein/db): user_events table — unified login/IP audit + behavior event log
Merged
#2514 feat(tradein/ui): Telegram feedback button in Topbar (env-gated)
Merged
#2513 fix(tradein/pdf): МЕРА branding + 4-page report (no empty pages)
Merged
#2512 fix(tradein/auth): restore brusnika (user2) pilot access
Merged
#2511 feat(tradein/lead): persist 152-ФЗ proof-of-consent (LOW audit R2 #9)
Merged
#2510 fix(tradein/scheduler): re-enable deactivate_stale_domklik now that domclick sweeps run (LOW audit R2 #10)
Merged
#2509 fix(tradein/location-coef): re-center coefficient band so a strong central location ~= 1.0 (LOW audit R2 #7a)
Merged
#2508 fix(tradein/v2): location coefficient informational + price-history clarity (LOW audit R2 #7c/#8)
Merged
#2507 fix(tradein/scrapers): clamp implausible listing/publish dates (LOW audit R2 #6)
Merged
#2506 fix(tradein/pdf): scale offer-page rent by room count (LOW audit R2 #5)
Merged
#2505 fix(tradein/estimator): honest repair-note + ratio_basis label; doc EKB-calibrated constants (LOW audit R2 #1-4)
Merged
#2504 fix(tradein/geocoder): gate EKB-local tiers for non-EKB oblast addresses (#11)
Merged
#2502 fix(tradein/matching): Tier-2a city-guard для non-ЕКБ coord-less (п.2, defense-in-depth)
Merged
#2503 feat(tradein): sber-index freshness monitor (п.1 observability)
Merged
#2501 refactor(tradein): консолидировать corridor/street-deals city-scope на _resolve_target_city (п.3)
Merged
#2500 fix(tradein): oblast avito-sweep city-slug + Tier-2b geo-guard (R2, latent)
Merged
#2499 fix(tradein/v2): honesty + a11y — histogram outlier-guard, scatter-релейбл, mobile-notice, keyboard-nav (R2)
Merged
#2498 fix(tradein/rbac): энфорсить roles.yaml scope на всех non-admin путях (R2 H3 security)
Merged
#2497 fix(tradein/lead): phone digit-guard, убрать dead landing-литерал, 152-ФЗ audit (R2)
Merged
#2496 fix(tradein): ingest/scheduler integrity — year sanity, propagate geo-guard, dkp_import counters + DO UPDATE (R2)
Merged
#2495 fix(tradein): image_sanitizer — reject decompression-bomb до декода (R2 security)
Merged
#2494 fix(tradein/pdf): честность отчёта — убрать фейк-сроки, хардкод EKБ, противоречивый дисконт (R2)
Merged
#2493 fix(tradein/estimator): СберИндекс только вторичка + confidence dispersion-ceiling (R2 H1+H2)
Merged
#2492 fix(tradein/estimator): non-EKB headline из deals + geo-bound Tier-S analog leak
Merged
#2491 feat(tradein/backtest): --city per-city валидация точности + corridor city-parity
Merged
#2490 fix(tradein/estimator): резолвить target-город коридора из payload.address (C2 hotfix)
Merged
#2488 fix(tradein/estimator): city-scope ДКП-коридора + oblast city-tokens/bbox
Merged
#2489 fix(tradein): city-scope ДКП-запросы — убрать oblast-контаминацию (C1+C2)
Merged
#2487 feat(tradein/scraper): per-city sweep capability для 5 городов области (schedules disabled)
Merged
#2486 fix(tradein/dadata): suggest-fallback для house_fias_id когда CLEAN выключен
Merged
#2485 fix(tradein/estimator): per-city ценовой band ДКП-сделок для всей Свердловской обл. (66)
Merged
#2484 fix(tradein/geocoder): раз-хардкод геокодера/DaData на всю Свердловскую обл. (region 66)
Merged
#2483 fix(tradein/v2): аналитика — выровнять два графика в равную высоту
Merged
#2482 fix(tradein/ingest): раз-хардкод rosreestr DKP импорта на всю Свердловскую обл. (region 66)
Merged
#2481 fix(tradein/v2): честность+консистентность — реконсиляция счётчика аналогов, убрать фейк-donut/линейку, outlier-guard, created_at, дисклеймеры
Merged
#2480 fix(tradein/v2): аналитика — 2 графика в ряд, чтобы Цена×срок влезала на экран
Merged
#2479 fix(tradein/v2): polish АНАЛИТИКА — растянуть scatter, клэмп оси к 0, честные легенды/бакеты, убрать фейк-тренд
Merged
#2478 feat(tradein/v2): карта вторички — сделки Росреестра + объявления по источникам (SourcesView)
Merged
#2477 fix(tradein): repoint rosreestr_poll to /data-sets/ + verify Content-Type (СДЕЛКИ dataset moved off /opendata)
Merged
#2476 feat(tradein): fill houses.year_built/material_walls from ДОМ.РФ КР1.1/1.2 + zhkh_year, propagate to listings (#2013)
Merged
#2475 tech-debt(tradein/estimator): collapse won estimate_* flags into defaults (#1970)
Merged
#2473 test(rbac): user2 expected role expired after brusnika trial cutoff
Merged
#2472 fix(tradein/auth): expire brusnika (user2) trial access
Merged
#2471 fix(honesty): true competitors/neighbors totals + permits truncation disclosure (#2464 cluster B)
Merged
#2470 fix(analytics): de-inflate domrf_kn snapshot counts (8.49×) + backfill UPSERT columns (#2464)
Merged
#2469 fix(site_finder): SAVEPOINT supply/market + convert 2 bare rollbacks (#2464 Wave 2)
Merged
#2468 fix(site_finder): SAVEPOINT-isolate gate-lookup db.execute swallows (#2464 Wave 2)
Merged
#2467 fix(site_finder): SAVEPOINT-isolate quarter-dump lookup db.execute (#2464 Wave 2)
Merged
#2466 fix(forecasting): SAVEPOINT-isolate §22 db.execute failures + close RELEASE-trap (#2464)
Merged
#2465 fix(site_finder): SAVEPOINT-isolate DB errors across cluster A (#2464)
Merged
#2463 fix(concept): §7 massing-сцена осознаёт весь MultiPolygon (соседи уезжали до 1.6км) (#2180)
Merged
#2461 fix(scrapers): rate-limit/backoff/circuit-breaker для ОКН EGRKN-скрапера (#2445-D3)
Merged
#2460 fix(workers): izyatie per-doc isolation + newbuilding-crossload breadcrumb (#2445-D5/D6)
Merged
#2459 fix(scrapers): WAF-guard эндпоинтов + throttled catalog BrowserSession (#2445-D1/D2)
Merged
#2458 fix(backend): reservation_ingest пейсинг + короткоживущая DB-сессия (#2445-D4)
Merged
#2456 fix(export): недостающая §13.7 «Уверенность» в PDF-экспортёре отчёта (#2445-C2)
Merged
#2455 fix(generative): устаревший VAT/office caveat в concept PDF (#2445-C1)
Merged
#2454 fix(site-finder): remount analysis-дерева при смене cad (#2445-B4)
Merged
#2451 fix(frontend): нейтральный fallback для gate/velocity enum-lookup (#2445-B2/B3)
Merged
#2453 fix(generative): отклонять спроецированные координаты до pyproj CRSError → 422 (#2445-B1)
Merged
#2450 fix(site-finder): true-counts вместо молча-усечённых len(list) в connection-points/utility (#2445-A1/A2)
Merged
#2448 fix(site-finder): раскрыть proxy-fraction в EKB-median velocity-бенчмарке (#2445-A4)
Merged
#2447 fix(site-finder): competitors avg-price по per-object снапшоту, не глобальному (#2445-A5)
Merged
#2446 fix(site-finder): L2 hidden-supply не обнуляет неизвестный flat_count (#2445-A3)
Merged
#2444 feat(scrapers): wire per-flat DOM.РФ catalog scraper + propagate catalog_url_hash (#2442)
Merged
#2441 feat(scrapers): extract + download DOM.РФ flat plan images (#2440)
Merged
#2439 fix(devops): переносим deploy-obsidian.yml в .forgejo/workflows/ (#2416)
Merged
#2438 fix(tradein/cian): extract_all_states — discover new .concat() format, not just legacy .push()
Merged
#2437 fix(tradein/cian): персист bti_data/valuation house_info в houses + дедуп УК (#2435)
Merged
#2436 feat(tradein/domclick): production Layer B detail-backfill orchestrator (#2000)
Merged
#2434 feat(tradein/pdf): редизайн отчёта в реальном языке МЕРА (v2 HUD)
Merged
#2433 feat(tradein/domclick): cookie-injection MVP для обхода QRATOR-блока (#2000)
Merged
#2432 fix(tradein/estimator): восстановить и канонизировать корпус дома в дедупе (регрессия #2429)
Merged
#2430 fix(tradein/domclick): органический заход через SERP перед card-fetch (anti-QRATOR)
Merged
#2429 fix(tradein/estimator): дом «2» вместо «15» при глухом названии станции метро в avito-адресе
Merged
#2428 fix(tradein/v2): гонка при клике по строке «Предыдущие оценки» — отчёт не загружался
Merged
#2427 fix(tradein/pdf): честный embedded-шрифт (PT Sans/PT Serif) + matplotlib-график вместо div
Merged
#2426 chore(tradein/proxy-pool): добавить domclick в provider_affinity CHECK (residential ASocks для #2000)
Merged
#2424 feat(tradein/v2): кликабельные строки + параметры в оверлее «Предыдущие оценки»
Merged
#2421 feat(exporters): зеркалим permits_nearby (ГИСОГД 500м) в DOCX §6
Merged
#2419 chore(tradein/scrapers): удалить весь legacy scrapers/ каталог — final E (#2397, #2277)
Merged
#2420 feat(tradein/history): вернуть все параметры оценки в GET /history
Merged
#2418 fix(devops): cleanup-merged-worktrees.sh — 3 бага, найденные вживую на 69 забытых worktree
Merged
#2417 fix(tradein/estimator): устранить остаточные кросс-сорс дубли (#2291)
Merged
#2412 refactor(tradein/tasks): yandex_newbuilding_sweep на kit + config= (#2397 Part D5)
Merged
#2414 refactor(tradein/admin): debug newbuilding endpoints на kit + config=, fix stray await (#2397 Part D4)
Merged
#2415 refactor(tradein/tasks): newbuilding_enrich_backfill на kit cian.newbuilding + config= (#2397 Part D3)
Merged
#2411 refactor(tradein/tasks): cian_history_backfill valuation+newbuilding на kit + config= (#2397 Part D2)
Merged
#2410 refactor(tradein/tasks): avito_detail_backfill build_warmed_session на kit + config= (#2397 Part D1, #2330)
Merged
#2413 fix(devops): couchdb healthcheck ложный 401 — auth /_up кредами
Merged
#2407 refactor(tradein/scrapers): удалить 6 осиротевших legacy scraper-модулей + тест-хирургия (#2397 Part E2)
Merged
#2405 refactor(tradein/scrapers): удалить legacy scrape_pipeline.py + тест-хирургия (#2397 Part E1)
Merged
#2404 fix(tradein/scraper-kit): клампить diff_percent перед INSERT offer_price_history
Merged
#2403 feat(site-finder): PermitsNearbyBlock — разрешения на строительство в §6 (#2367 PR-2, frontend-half)
Merged
#2402 refactor(tradein/scheduler): удалить legacy scheduler_loop, kit единственный путь (#2397 Part C)
Merged
#2401 feat(gisogd66): permits_nearby — точный радиус-запрос РНС/РВЭ (#2367 PR-2, backend-half)
Merged
#2400 refactor(tradein/admin): debug sweep endpoints на kit orchestration (#2397 slice A)
Merged
#2399 refactor(tradein/avito): avito_detail_backfill off scrape_pipeline helpers (#2397 slice B)
Merged
#2398 fix(tradein/v2): смонтировать форму лида (#2377) в живое v2-дерево (#2395)
Merged
#2396 fix(tradein/estimator): kitchen_area_m2/ceiling_height_m/is_apartments comp-scoring (#2012)
Merged
#2393 feat(tradein/v2): replace mailto lead CTA with real form (#2377)
Merged
#2392 fix(tradein/v2): audit #2081 residual — 404 short-circuit, disabled-tab tooltips, stale hex token, ДКП decode
Merged
#2394 chore(tradein/scraper-kit): удалить 5 orphaned legacy-модулей (#2277 финальный шаг, частичный)
Merged
#2391 fix(tradein/estimator): rebase ground-floor hedonic term onto current main (#2002, #2382)
Merged
#2390 feat(tradein/lead): POST /api/v1/trade-in/lead — persist contact leads (#2376)
Merged
#2389 fix(tradein/v2): mobile layout — remove overflow floor + honest stacked mobile block (#2275)
Merged
#2383 fix(gisogd66): CAST(:geojson AS text) — AmbiguousParameter ронял каждый upsert
Merged
#2388 fix(tradein/deploy): atomic recreate + graceful scraper drain + startup-reap (#1951)
Merged
#2387 fix(tradein/estimator): lock honest asking_to_sold_ratio invariant + disambiguate torg bases (#2087 M2/M3)
Merged
#2384 refactor(tradein/scraper-kit): yandex providers on shared _base.py (#2363)
Merged
#2375 refactor(tradein/scraper-kit): avito providers on shared _base.py (#2361)
Merged
#2374 refactor(tradein/scraper-kit): cian providers on shared _base.py (#2362)
Merged
#2372 refactor(tradein/scraper-kit): domclick providers on shared _base.py (#2364)
Merged
#2371 fix(gisogd66): битый 500-сегмент портала — no-retry карточек, circuit breaker, периодический commit
Merged
#2370 feat(scrapers): реестр РНС/РВЭ ГИСОГД-СО из открытого API — миграция + лоадер (#2367 PR-1)
Merged
#2368 feat(forecast-ui): confidence band на ForecastChart — качественный интервал уверенности (#1926)
Merged
#2366 feat(chat): tool get_parcel_info — курируемый градрегламент/ЗОУИТ/ЕГРН в контекст чата
Merged
#2365 fix(landing): Trade-In nav как внешний <a> на /trade-in/v2 (ChunkLoadError)
Merged
#2360 feat(tradein/scraper-kit): shared base/utils для providers/* (#2358, Foundation)
Merged
#2359 fix(tradein/houses): персистить house_class из avito «Класс жилья» и yandex parse (#2003)
Merged
#2357 fix(report-pdf): best-effort inline §22-форсайт на холодном участке — отчёт самодостаточен
Merged
#2356 fix(tradein/scraper-kit): проброс endpoint= в yandex/cian newbuilding BrowserFetcher (#2322)
Merged
#2355 fix(tradein/estimator): честная маркировка quarter-precision дат ДКП + insufficient_data флаг для sell-time-sensitivity (#1995)
Merged
#2354 fix(tradein/scraper-kit): проброс config= в avito build_warmed_session (#2330)
Merged
#2353 fix(report-ui): ретрай docx-preflight против 502-гонки сразу после ready
Merged
#2348 feat(tradein/estimator): switch core valuation call sites to scraper_kit (#2337)
Merged
#2347 fix(report): дата сборки в POST-ответе на fast-path из кэша (последний хвост R2 #2259)
Merged
#2346 fix(tradein/scrapers): подключить geoportal coords backfill в scheduler (#1967)
Merged
#2343 fix(reports): HEAD-поддержка на /report/download — qa поймал 405, DOCX не скачивался из UI
Merged
#2345 test(tradein/scraper-kit): prove yandex_valuation kit path safe for #2337 (#2336)
Merged
#2344 test(tradein/scraper-kit): golden-parity + config-footgun proof for avito_imv (#2334)
Merged
#2342 test(tradein/scraper-kit): prove cian_valuation kit path safe for #2337 (#2335)
Merged
#2341 fix(tradein/v2): подключить реальные данные location-coef в LocationDrawer + HeroBar (#2317)
Merged
#2340 fix(tradein/avito): консолидировать house_type normalizer + актуализировать docstring (#2009)
Merged
#2339 fix(tradein/scrapers): cian_city_sweep честный статус при defensive abort (#1949)
Merged
#2338 feat(ptica/reports): DOCX-скачивание полного отчёта в UI (#2259 R2)
Merged
#2333 feat(tradein/scraper-kit): migrate backfill/enrichment tasks to kit (#2310)
Merged
#2331 perf(sql): покрывающий индекс под offer-trend §4.3 — 6.8с → 1.1с (миграция 186)
Merged
#2329 fix(market-metrics): offer-trend таймаут — warning вместо exception (ложные GlitchTip-события)
Merged
#2332 fix(tradein/v2): гейтить PDF-кнопку на hasEstimate (#2081 M4)
Merged
#2328 fix(tradein/scrapers): wire proxy_pool into Avito legacy pipeline, rotate on ban (#2202)
Merged
#2325 fix(freshness): пороги nspd_geo под on-demand каденцию (убирает еженедельный ложный stale)
Merged
#2327 fix(tradein/pdf): sold-price consistency + актуальные допущения + свой дизайн отчёта
Merged
#2326 feat(tradein/scraper-kit): migrate admin debug endpoints + domclick ingest to kit (#2305)
Merged
#2319 fix(generative): честные типы в dxf-экспортёре — strict mypy проходит (#2316)
Merged
#2324 feat(tradein/scraper-kit): migrate cian/yandex price-history & session to kit (#2306)
Merged
#2321 fix(tradein/v2): пометка «В ОФФЕР» + сузить реестровую карточку (#1991)
Merged
#2318 feat(tradein/scraper-kit): port domclick_detail + ekb_geoportal_client to kit (#2307)
Merged
#2315 fix(generative): MultiPolygon-участки — крупнейший контур в _parse_polygon (#2295)
Merged
#2314 feat(tradein): location-coef MVP через FDW-мост к OSM POI Птицы (#2045 PR-B)
Merged
#2313 test(tradein): reusable legacy/scraper_kit parity harness (#2304)
Merged
#2312 fix(tradein/v2): визуальный аудит — иерархия/честность/микрокопи (#2266)
Merged
#2311 fix(tradein/estimator): дедуп кросс-source дублей в anchor-пути (#2265 follow-up)
Merged
#2303 fix(tradein/pii): удалить телефоны продавцов (NULL) + PII клиента (DROP) (#2217, #1969)
Merged
#2301 feat(exporters): DOCX-вариант полного отчёта ПТИЦА (#2259 R2)
Merged
#2300 feat(tradein/v2): реальный display-профиль в TopNav через /me (#2046)
Merged
#2299 feat(site-finder): view v_tradein_osm_poi_ekb для FDW-моста trade-in location-coef (#2045 PR-A)
Merged
#2302 chore(claude): явный CI-gate перед merge (false-green trap) + анти-rubber-stamp формат verdict'а
Merged
#2298 fix(tradein/v2): реальный cv + единый source-registry в overlay-мапперах (#2040, #2041)
Merged
#2297 fix(full-report): generic-маркеры областных админ-единиц в ЕКБ-фильтре тепла
Merged
#2296 fix(full-report): §7 на MultiPolygon + чистка печатного шума §3/§4 (вычитка живого отчёта)
Merged
#2293 feat(tradein/estimator): сегментная поправка headline+выкуп по ценовому бэнду за флагом (#2255)
Merged
#2292 chore(claude): token-diet — worker-агенты на sonnet (opus только deep-code-reviewer)
Merged
#2290 fix(tradein/estimator): парсер адресов — имя-перед-типом, glued-суффикс, микрорайоны (#2269)
Merged
#2289 fix(site-finder): «Скачать отчёт» без пустых скобок на fast-path из кэша
Merged
#2288 feat(site-finder): кнопка «Полный отчёт (PDF)» (#2259 PR-E, финал эпика)
Merged
#2287 feat(reports): Celery-джоба полного PDF-отчёта + кэш + 3 endpoint'а (#2259 PR-D)
Merged
#2286 feat(exporters): серверный статик-рендер карт для PDF-отчёта (#2259 PR-C Maps)
Merged
#2285 feat(exporters): PURE HTML §4–§7 полного PDF-отчёта (#2259 PR-B Sections)
Merged
#2284 feat(exporters): PURE HTML-агрегатор §1–§3 + альтернативы (#2259 PR-A Foundation)
Merged
#2283 fix(site-finder): SET LOCAL литералом — bind-параметр ломал nearby_network_zones
Merged
#2282 feat(site-finder): блок «Сети рядом с участком» в §3 (Фаза C2-UI)
Merged
#2281 feat(site-finder): позитив-разрез сетевых ЗОУИТ «сеть рядом с участком» (Фаза C2/C3)
Merged
#2280 feat(site-finder): теплотрассы из OSM в слой инженерной инфраструктуры (Фаза C1)
Merged
#2278 feat: ревью-инструмент авто-маппингов Объектив↔ДОМ.РФ (/admin/mapping-review)
Merged
#2273 fix(tradein/estimator): кросс-source дедуп street+house union-find + savepoint вокруг ratio-lookup (#2265)
Merged
#2279 fix(tradein/v2/a11y): немодальный SectionOverlay + контраст токенов + headings — a11y round 3 (#2264)
Merged
#2274 chore(design-sync): durable-инпуты DS-панели tradein — 6 floor-card превью, шрифты Manrope/Plex, source-kit fork-фикс (#2267)
Merged
#2276 chore(tradein): полное выключение источника n1 — миграция 165 + вычистка backend/ops/frontend (#2204)
Merged
#2272 fix(tradein/scraper-kit): scale cian anchor watchdog for proxy-pool browser fetches (#2160)
Merged
#2270 feat(eias-heat): +6 тепло-организаций ЕКБ — ненулевые резервы ×10 (#2119)
Merged
#2271 fix(tradein/data): yandex url-«дубли» — каноникализация URL (скрейпер + миграция 164) + manifest 162 (#2235, #2216)
Merged
#2263 fix(tradein/data): external_valuations.house_id — резолв в write-path + идемпотентный бэкфилл (#2236)
Merged
#2260 feat(exporters): §4.2 supply-only блок в ТЗ-PDF (#2177)
Merged
#2268 fix(tradein/scraper-kit): wire browser proxy-pool into yandex/cian SERP + persist activation flags (#2160)
Merged
#2257 fix(site-finder): три честности-фикса — B1 ГРС «выход №N» + околонуль + Росреестр-квартал
Merged
#2261 fix(tradein/security): admin.py — generic detail + error-id вместо сырого текста исключений (#2234)
Merged
#2258 fix(tradein/security): photo-upload — чанковое чтение с капом 10MB + Caddy request_body 12MB (#2233)
Merged
#2256 feat(site-finder): «Пересчитать §7 с этой программой» из блока альтернатив (#2181 хвост)
Merged
#2232 feat(tradein/ui): честное раскрытие покрытия диапазона в hero (#2209)
Merged
#2253 fix(tradein): оставить domklik активным — отключить его TTL-деактивацию (#2204)
Merged
#2252 feat(site-finder): OSM-геокод городских ТП/РП ЕКБ (#2119 B2, финальный хвост)
Merged
#2251 feat(site-finder): Celery + §3 точки выхода газосети (#2119 B2, PR-4/4 — финал формы-6)
Merged
#2250 fix(dadata): фолбэк на suggest/address при отключённой фиче CLEAN
Merged
#2249 feat(ekgas): геокод точек выхода через DaData (#2119 B2, PR-3/4)
Merged
#2248 fix(ekgas): label-детект сетки формы 6 — живой файл сдвинут (#2119 B2)
Merged
#2247 feat(site-finder): лоадер точек выхода ГРС «Екатеринбурггаз» — форма 6 (#2119 B2, PR-2/4)
Merged
#2246 feat(db): схема gas_grs_outlet_points — форма 6 Екатеринбурггаза (#2119 B2, PR-1/4)
Merged
#2245 fix(etl): гео-проход — префикс «г Екатеринбург» адресам без города (#2177 остаток)
Merged
#2244 feat(etl): гео-проход auto_core_geo_v6 для tier_b/ambiguous mapping (#2177 остаток)
Merged
#2243 perf(db): physflat-covering индекс v2 с price_per_m2_rub в INCLUDE (#2177 follow-up)
Merged
#2242 fix(report): авторетрай §7 с densify — «не вместила ни одной секции» больше не 422 при загрузке
Merged
#2241 fix(best-layouts): lots-проекты в пуле core-матчинга — supply-only реально наполняется (#2177)
Merged
#2240 feat(site-finder): supply-only fallback в §4.2 — предложение без темпа продаж (#2177 шаг 3)
Merged
#2239 feat(best-layouts): атрибуция velocity по ядру комплекса (#2177 шаг 2b)
Merged
#2238 fix(vodokanal): column-aligned парсинг DOCX — реальные резервы вместо № п/п (#2119/#2126)
Merged
#2237 feat(etl): auto_core_dev_v5 — core-name+dev backfill mapping'а (#2177 шаг 2)
Merged
#2231 fix(tradein/ops): health-check валит деплой + mem-лимиты + log-rotation (#2214)
Merged
#2230 fix(tradein/estimator): min-width floor ±12% на ценовой диапазон (#2209)
Merged
#2229 fix(tradein/security): defense-in-depth trusted-header auth + rate-limiter fix (#2213)
Merged
#2228 fix(tradein/deploy): миграции ДО подъёма app-контейнеров + manifest-инвариант (#2216)
Merged
#2227 fix(tradein/ui): единый source-registry + честные знаменатели/лейблы источников (#2211)
Merged
#2222 feat(site-finder): оптимизатор программ — «Как участок сходится» при отрицательном вердикте (#2181)
Merged
#2226 feat(tradein/monitor): алерт на staleness данных deals по max(deal_date) (#2212)
Merged
#2225 perf(tradein): снять блокировку event loop на POST /estimate (#2207)
Merged
#2224 fix(tradein/scrapers): bump scraped_at при ре-подтверждении живым + бэкфилл (#2206)
Merged
#2223 fix(tradein): не запекать preview-флаг в прод-образ + noindex/баннер (#2205)
Merged
#2221 fix(tradein): deactivate_stale для domklik/n1 + честная freshness по scraped_at (#2204)
Merged
#2220 ci(tradein): pre-merge гейт — backend pytest + frontend type-check/lint (#2208)
Merged
#2198 fix(best-layouts): покрытие §4.2 в комплексах, не в сырых obj_id (#2177, шаг 1/3)
Merged
#2210 feat(concept): 3D-макет окружения — соседние здания из кадастра в §7 (#2180)
Merged
#2219 feat(proxy-pool): P4 — browser dynamic pool-proxy (acquire→/fetch→relaunch) + orchestration wiring, ship-dark (#2164)
Merged
#2199 fix(tradein/deploy): scraper+backend paths-filter — matching/dedup/scraper-kit trigger rebuilds (#2188)
Merged
#2197 feat(proxy-pool): P3 — kit curl-paths acquire/release from pool behind USE_PROXY_POOL_CURL, ship-dark (#2163)
Merged
#2195 fix(tradein/dedup): drop geo-guard in fias-pass — same-fias identity outranks proximity (#2187)
Merged
#2194 fix(tradein/matching): P1 extended — never create a house from a numberless address (no cadastral)
Merged
#2196 feat(rewire): scheduler_main → kit-scheduler behind USE_KIT_SCHEDULER flag, ship-dark (#2192)
Merged
#2193 fix(tradein/v2): keep top nav active over overlays, stronger «К оценке» button, backdrop-close
Merged
#2191 fix(eias-heat): не терять резерв при одинаковых именах систем (#2119 B2)
Merged
#2190 feat(site-finder): §4.3 тренд из цен предложения Объектива при устаревших сделках (#2178)
Merged
#2186 feat(tradein/frontend): pass suggest fias_id as target_fias_id in estimate request
Merged
#2173 feat(tradein/estimator): кросс-source физдедуп аналогов за флагом (#2087 H4)
Merged
#2185 fix(tradein/dedup): fias-key clustering + cross-fias merge guard + identity carry-over (#1772 follow-up)
Merged
#2184 feat(tradein/matching): fias_exact tier + estimate fias persist + suggest fias_id contract
Merged
#2176 fix(eias-heat): column-aligned парсинг листа ТП по реальной сетке (#2119 B2)
Merged
#2183 feat(report): §7 открыт по умолчанию + выделение участка на подложке + шире карта (#2179)
Merged
#2182 feat(scraper-kit): copy scheduler with registry-dispatch (25+ trigger_* → dict), strangler (#2136)
Merged
#2175 fix(tradein/estimator): не отравлять asking→sold ratio-кэш транзиентной ошибкой
Merged
#2174 feat(scraper-kit): copy remaining sweep orchestrators (yandex/cian/domclick/full-load), strangler (#2135 F2)
Merged
#2172 fix(eias-heat): ссылка TemplatePrinter из onclick + период «N кв. YYYY» (#2119 B2)
Merged
#2171 feat(scraper-kit): copy sweep pipeline orchestration (avito) with protocol injection, strangler (#2135)
Merged
#2170 fix(scraper-kit): sync RealScraperConfig adapter with ScraperConfig protocol (cookie_encryption_key)
Merged
#2165 feat(site-finder): ЕЭСК-резервы городских ПС/ТП + тепло из ФГИС ФАС (#2119 B2)
Merged
#2169 feat(proxy-pool): pool service (acquire/release/health) + healthcheck scheduler task (#2162)
Merged
#2168 refactor(scraper-kit): unify price bisection engine across providers + dedup (#2134)
Merged
#2166 fix(tradein/frontend): redirect legacy /trade-in root to canonical /v2
Merged
#2167 feat(proxy-pool): scrape_proxies table + admin bulk-load/list endpoints (#2161)
Merged
#2159 fix(tradein/v2): честная подача интервала оценки — одна цифра-герой + честный разброс
Merged
#2158 feat(scraper-kit): copy yandex providers with protocol injection, strangler (#2133 yandex)
Merged
#2157 feat(scraper-kit): copy cian providers with protocol injection, strangler (#2133 cian)
Merged
#2156 feat(scraper-kit): copy domclick provider with protocol injection, strangler (#2133 domclick)
Merged
#2155 feat(scraper-kit): copy avito providers with protocol injection, strangler (#2133 avito)
Merged
#2154 docs(claude): delegation.md — routing-таблица, effort-правила, экономика пачек
Merged
#2153 feat(scraper-kit): copy core layer (base/save_listings/transport) with protocol injection, strangler (#2132)
Merged
#2152 fix(tradein/estimator): честный asking_to_sold_ratio — бейдж «−N% к рынку» больше не врёт
Merged
#2146 chore(claude): актуализация .claude-конфигов — политика 2026-06-27, delegation-лимиты, stale refs
Merged
#2151 feat(scraper-kit): protocol boundaries (matcher/config/session/jobs) + backend adapters (#2131)
Merged
#2150 chore(claude): security hardening — dangerous-commands hook, settings в git, restricted DB, throttle
Merged
#2149 feat(market): revoke gendesign_reader direct SELECT on raw tables (#2138 step 3/3)
Merged
#2148 feat(etl): read tradein data via market.v_* contract views (#2138 step 2/3)
Merged
#2147 feat(market): grant gendesign_reader SELECT on contract views (#2138 step 1/3)
Merged
#2145 fix(site-finder): ГРС-парсер переписан под реальную структуру таблицы ГТЕ
Merged
#2144 fix(tradein/v2): канонический sources_used — стабильный счётчик «ИСТОЧНИКОВ X/7» (#2087 M1)
Merged
#2143 chore(scraper-kit): docker-context wiring + restore backend workspace dep (#2137)
Merged
#2139 chore(scraper-kit): scaffold internal package + uv workspace (#2128)
Merged
#2142 fix(scrapers/avito): unify _unix_to_date timezone across serp/houses/imv (#2129)
Merged
#2141 feat(market): contract views market.v_* over producer tables (#2130)
Merged
#2140 feat(tradein): #2043 BE-1 (cv/source_counts/created_at + history/cache-KPI) + #2044 BE-2 (radius_m query-params)
Merged
#2125 fix(site-finder): ГРС-лоадер — HARICA-интермедиат в CA-бандл (неполная цепочка Газпрома)
Merged
#2124 fix(site-finder): ГРС-лоадер — Russian Trusted CA для домена Газпрома
Merged
#2123 feat(site-finder): газ — свободная мощность ГРС + пометка ЕЭСК в §3 (#2119 Фаза B1)
Merged
#2122 fix(site-finder): секции отчёта изначально раскрыты («Свернуть» для компакта)
Merged
#2121 fix(site-finder): Россети-раскрытие — URL-энкоженные href, ссылки на xlsx не находились
Merged
#2120 feat(site-finder): резервы мощности для ТП — электро+вода на карте §3 (#2119 Фаза A)
Merged
#2118 fix(site-finder): §4.3 график «По кварталам» — бары вылезали за край карточки
Merged
#2117 fix(site-finder): §4.3 — укомпановать 3 колонки в единообразные карточки
Merged
#2115 fix(site-finder): §4.3 подпись — убрать сырое имя поля planned_commissioning
Merged
#2116 feat(site-finder): прогрессивное раскрытие секций отчёта §1–§6 («Раскрыть всё»)
Merged
#2114 fix(site-finder): попап конкурента — NUMERIC-поля приходят строкой (цена/площадь не рендерились)
Merged
#2113 feat(site-finder): max-info попапы — конкурент / §3-таблица / польз.точка / соседи (#2111)
Merged
#2112 feat(site-finder): §3 «Сети и точки подключения» — попапы показывают характеристики (#2111)
Merged
#2110 feat(site-finder): §1 POI-точки карты показывают максимум информации
Merged
#2109 feat(concept): 3D-масса корпусов на карте с тенями (§7) (#1953)
Merged
#2107 feat(networks): человеко-язык типов §3 + реальные имена НСПД-точек (#1953)
Merged
#2108 fix(report): §4.3 выравнивание колонок (уплыло) + двойная точка в вердикте (#1953)
Merged
#2106 fix(report): sticky-сайдбар навигации — overflow-x: clip вместо hidden (#958)
Merged
#2105 fix(report): instant nav jump + scroll-position scrollspy (#958)
Merged
#2104 feat(report): nav scrollspy + offset-jump, чат в плавающее окно справа (#958)
Merged
#2103 fix(concept): step="any" — stepMismatch блокировал submit «Рассчитать концепцию» (#1953)
Merged
#2102 feat(section7): editable section footprint + корпус plural/program hint (#1953)
Merged
#2101 feat(section7): unify «Концепция» into one engine driven by building_program (#1953)
Merged
#2100 fix(site-finder): §4.2 «Качество данных» — inline-стили (Tailwind flex/gap не применяется) (#1953)
Merged
#2099 fix(site-finder): §4.2 «Качество данных» — воздух вокруг разделителя (#1953)
Merged
#2098 feat(site-finder): §7 «Концепция» — методики + синхронизация подписей (#1953, batch D)
Merged
#2097 fix(site-finder): unify §3 «Сети» table↔map source + enrich popups (#1953, batch C)
Merged
#2096 fix(forecast): §6 honesty layer — pegged deficit, non-residential caveat, segment/pipeline note (#1953)
Merged
#2095 fix(site-finder): report microcopy batch A — gate titles, breadcrumb area, §4.2/4.3 (#1953)
Merged
#2094 fix(site-finder): invest-score advisory flag + velocity data-honesty + h1 a11y (#1926)
Merged
#2093 fix(tradein/v2): убрать средний скаттер «ЦЕНА × СРОК ПРОДАЖИ» из результата
Merged
#2092 feat(tradein/sale-share): тумблер «Сейчас / За 45 дней» + фильтр «мин. объявлений»
Merged
#2091 fix(tradein/v2): источники N1+Restate вон, Домклик в текст; disabled-палитра до AA (#2081 follow-up)
Merged
#2089 fix(tradein/avito-detail): живой прогрев сессии + батч-на-сессию — снимает 403 на curl-backfill (#1551)
Merged
#2090 fix(tradein): cadastre ЖКХ-fallback + COALESCE merge-key + median-floors guard
Merged
#2088 feat(tradein/sale-share): standalone «Поиск домов» — de-Mera + gendsgn.ru/sale-share
Merged
#2086 fix(tradein/v2): UI/UX аудит round 2 — AA-контраст, честность чисел, a11y (#2081)
Merged
#2085 fix(tradein/dedup): canon cluster-key + geo/digit guard в house-merge (P4c)
Merged
#2084 fix(tradein/sale-share): гард по этажности — отсечь near-neighbor mis-match
Merged
#2083 fix(tradein/sale-share): дедуп карточки листингов + чистка голых алиасов (#4 + P4a)
Merged
#2082 fix(tradein/matching): не сваливать листинги в чужой дом (P1-P3 хардненинг матчера)
Merged
#2080 fix(tradein/sale-share): гео-фильтр числителя ≤300м — отсечь mis-bucketed листинги
Merged
#2079 fix(tradein/v2): a11y contrast — source badges ≥AA в оверлеях (#2062)
Merged
#2078 fix(tradein/v2): a11y P3b — клавиатурная форма 01 (#2062)
Merged
#2077 feat(tradein/zhkh): ЖКХ-приоритет знаменателя «квартир в доме» + loader
Merged
#2076 fix(tradein/v2): a11y P3a — нативные контролы + модальный диалог + aria-live (#2062)
Merged
#2075 fix(tradein): дедуп объявлений по квартире + over_100 NULL-фикс (500 на списке) (148)
Merged
#2074 feat(tradein/scheduler): cooperative drain coverage for sweeps/full-loads (phase 3a)
Merged
#2073 fix(tradein): канон срезает гео-префиксы (Россия/Екатеринбург/мкр/пр-т) + REINDEX — покрытие 38%→~70% (147)
Merged
#2072 fix(tradein/v2): UI/UX-аудит P2 — контент/честность/иерархия (#2062)
Merged
#2071 feat(tradein): второй % «за 45 дней» + zhkh-знаменатель slot (146)
Merged
#2067 perf(objective_lots): inline DISTINCT ON for 3 view-fullscan consumers + cache landing stats (#1953)
Merged
#2070 feat(tradein/scheduler): cooperative SIGTERM-drain — in-flight scrape unit commits before exit (phase 2)
Merged
#2069 fix(tradein/v2): a11y follow-up — «скоро» pill contrast + drawer aria-hidden (#2062)
Merged
#2068 feat(sitefinder): rosreestr cadastral-value loader + 0.7x denoise of quarter price index
Merged
#2065 chore(tradein/deploy): scraper deploy-decouple phase 0+1 — no recreate on infra-only deploys + 120s graceful stop
Merged
#2066 fix(tradein/v2): UI/UX-аудит P1 quick-wins (#2062)
Merged
#2064 fix(tradein): guard ГАР-undercount знаменателя в v_building_sale_share (145)
Merged
#2063 feat(tradein): канонический матч ГАР↔houses (0%→41% yield) + tradein_canon_addr + --match-only
Merged
#2061 fix(tradein): гарантировать lxml в backend-образе — bust кэша uv sync + assert import
Merged
#2060 fix(tradein/v2): wire РАДИУС (backend radius_m) + map +/− zoom + building image + deglue word+word
Merged
#2059 feat(tradein): ГАР-loader знаменателя — apartments-per-house → gar_house_flats + match к houses
Merged
#2058 feat(tradein): страница «доля квартир дома в продаже» — % слайдер, адреса, карта
Merged
#2056 perf(objective_lots): drop 3 dead indexes (status/rooms_area/bank) — write-amp (#1953)
Merged
#2057 fix(tradein/v2): audit findings — de-fabricate location drawer, real map markers, validation, hero image, real user
Merged
#2055 feat(tradein): API домов «доли квартир в продаже» — /buildings/sale-share (+ listings, summary)
Merged
#2054 perf(objective_lots): inline-pushdown competitors._SOLD_COUNT_SQL + covering physflat index (#1953)
Merged
#2053 feat(tradein): схема «доли квартир дома в продаже» — gar_house_flats + houses.gar_* + v_building_sale_share (143)
Merged
#2052 feat(tradein/v2): CacheView history + PDF + quota + address autocomplete (FE-5)
Merged
#2050 fix(scrapers): разблокировать domrf_kn flats — изоляция flats от poison-extras + throttle (#1945)
Merged
#2051 feat(tradein/v2): wire overlays History/Analytics/Sources to real API (FE-2/3/4)
Merged
#2049 fix(tradein/v2): address parse (Cyrillic \b bug) + scatter from listing_date
Merged
#2048 feat(tradein/v2) [FE-1]: wire main dashboard to real API (mappers + page shell)
Merged
#2047 fix(tradein/avito): reap dead 404 listings in detail backfill (don't trip block breaker)
Merged
#2037 refactor(tradein/v2): перенос HUD v2 в tradein-mvp (прод-app) → /trade-in/v2
Merged
#2035 feat(tradein/v2): HUD-редизайн страницы оценки (Макс) → /trade-in/v2
Merged
#2034 fix(tradein/avito): detect HTTP-200 soft-block → rotate (vs silent failed) + coords-priority backfill ordering
Merged
#2033 feat(tradein/domclick): local-runner + ingest tooling (mergeable split from #2005)
Merged
#2032 fix(objective): physflat-dedup objective_lots — view + inline (request-path) + n_sold window-fix (#1964)
Merged
#2031 fix: audit follow-up мелочи — индекс domrf_kn_flats + max_height_m coercion + hide empty reg-date (#1953)
Merged
#2030 feat(concept): picker «выбери дом» + каталог-эндпоинт — Stage 3b, финал #1965
Merged
#2029 feat(concept): каталог типовых домов + program-placement (#1965 Stage 3a)
Merged
#2028 fix(tradein/avito): hard-timeout on detail-backfill fetch — prevent zombie-hang (#1950)
Merged
#2027 feat(tradein/estimator): elite-segment manual_review trigger by asking ppm² (#2002)
Merged
#2026 feat(concept): живой 3D-massing → пересчёт финмодели в «7. Концепция» (#1965 Stage 2b)
Merged
#2024 feat(generative): POST /concepts/recompute — live финрасчёт по massing-program (#1965 Stage 2a)
Merged
#2025 chore(tradein/backtest): --resolve-house-id flag to measure Tier-S + IMV anchor (#2002)
Merged
#2023 feat(site-finder): «7. Концепция» в light-отчёте — Stage 1 #1965
Merged
#2022 feat(tradein/ui): manual-review banner + premium-building badge on estimate (#2002)
Merged
#2020 fix(best-layouts): per-object latest snapshot для supply → срок продажи/% продано (#1956)
Merged
#2021 feat(tradein): AI-curated premium-building overlay — class + false-positive demotion (#2002)
Merged
#2018 fix(forecast): segment + dedup demand/supply → индекс дефицита больше не −1.00 везде (#1959)
Merged
#2019 feat(tradein/estimator): manual_review recommendation flag (#2002)
Merged
#2017 feat(tradein/cian): promote kitchen/mortgage/apartments + normalize house_type (#2008)
Merged
#2016 feat(tradein/yandex): normalize house_type + promote kitchen/ceiling to columns (#2007)
Merged
#2015 fix(tradein/estimator): remove dead tier-aware-ratio path — truncation artifact + footgun (#2002)
Merged
#2014 fix(tradein/avito): persist house_type + house_catalog_url in save_detail_enrichment (#2009)
Merged
#2006 feat(tradein): premium_houses MV + premium_building flag (#2002)
Merged
#2004 feat(tradein/estimator): hedonic year+area correction on expected_sold (#2002)
Merged
#2001 feat(tradein/estimator): calibrated 80% prediction interval for expected_sold range (#1966)
Merged
#1999 feat(tradein/domclick): обогащение Layer A поиска — description, repair-инференс, minhash, seller
Merged
#1998 fix(site-finder): сети и точки подключения на карте Раздела 3 (#1961)
Merged
#1988 fix(report): человеческий язык в Разделе 6 — дефицит/затоварка, 6.2/6.3/6.5 (#1963)
Merged
#1997 feat(tradein/backtest): hermetic estimator regression gate — frozen fixture + baseline (#1966 PR 3/3)
Merged
#1987 fix(report): вывести ПЗЗ-градрегламент НСПД в Раздел 1 + coerceFloat КСИТ (#1962)
Merged
#1986 fix(tradein/auth): always-available logout button on NoAccessScreen
Merged
#1985 fix(site-finder): фронт light-отчёта — encumbrance/obj_class/ЗОУИТ display + forecast axis & flat-state (#1954 #1955 #1957 #1958)
Merged
#1984 chore(design-sync): sync inputs for claude.ai/design trade-in DS
Merged
#1978 fix(report): newbuild-consistent медиана + obj_class/Comfort dedup + recommend_mix regression (#1955 #1960)
Merged
#1981 fix(ci): pin prettier 3.9.0 (codegen-check + pre-commit) + regenerate stale api-types.ts
Merged
#1983 feat(tradein/backtest): full-spine prediction + range-coverage/calibration/segment metrics (#1966 PR 2/3)
Merged
#1980 fix(tradein/ux): honest source list — drop dead domklik/restate, remove fake per-source median (#1968)
Merged
#1979 fix(tradein/domclick): рекан скрейпера на BFF JSON API + честный статус (#1846, #1968)
Merged
#1977 feat(tradein/auth): expire praktika trial access + trial-ended screen (contact Artem)
Merged
#1976 refactor(tradein/estimator): extract deterministic pricing into pure _price_from_inputs (#1966 foundation)
Merged
#1975 chore(claude-config): secret-read + psycopg2 hooks, tradein.md rule, tradein-mvp globs
Merged
#1974 chore(claude-config): self-merge policy (Mera/Ptica) + config-audit fixes
Merged
#1973 fix(report): EGRN площадь/обновлено + forecast-confidence dedup + ЗОУИТ типизация (#1954 #1958 #1957)
Merged
#1952 fix(scrapers): cian full_load anti-zombie + avito changeip-resilience & честный статус (#1949 #1950)
Merged
#1948 fix(freshness): output-floor on cycle-SUM over fresh_days window (#1945, #1947)
Merged
#1947 feat(freshness): zero-output check + kn_flats source — catch "ran but produced nothing" (#1945)
Merged
#1946 perf(estimate): trigram expr index for same-building anchor Tier A (~94x)
Merged
#1944 fix(site_finder): correct best-layouts supply fan-out (~8.5x) + objects-first perf
Merged
#1943 fix(perf): move migration 171 to repo-root data/sql/ so deploy applies it
Merged
#1942 perf(analyze): partial index on objective_corpus_room_month (~3.8x on hot velocity baseline)
Merged
#1941 fix(backend): emit app.* INFO logs to stdout on the API process (#1926)
Merged
#1939 fix(estimator): deterministic comp tie-breaker + n_analogs counts priced analogs
Merged
#1938 fix(tradein-browser): in-page fetch retry + settle tuning for /fetch-json (#1917)
Merged
#1937 test(tradein): cover avito/cian + mark_failed total_seen persistence (#1926)
Merged
#1936 fix(tradein): backfill house_id_fk via source-identity path (#1781)
Merged
#1935 feat(analyze): per-category OSRM routing — foot vs driving (#39 A3)
Merged
#1934 feat(site-finder): OSM инж.сети на карту analyze (#1746)
Merged
#1933 feat(tradein): recurring house-dedup merge (schedule dormant) (#1772)
Merged
#1932 feat(site-finder): OSRM road-distance in /analyze behind flag (#39 A2)
Merged
#1931 fix(site-finder): Overpass retry-backoff + mirror fallback for utility loader (#1746)
Merged
#1930 feat(site-finder): OSM engineering-networks loader + endpoint (#1746)
Merged
#1929 feat(devops): self-hosted OSRM routing engine for site-finder (#39)
Merged
#1927 fix(site-finder): align competitor flats_sold to objective_lots.contract_date (#1926)
Merged
#1928 fix(tradein): persist scrape_runs.total_seen/new_count from sweep counters (#1926)
Merged
#1925 fix(test): test_849 expects 3 begin_nested/lot after #1921 upsert-reconcile SAVEPOINT — unblock red main gate
Merged
#1924 perf(tradein): GIST index on (geom::geography) for estimator radius filter (#1189)
Merged
#1922 fix(trade-in/ui): расшифровка ДКП/IMV/CV + графики на --viz токены + убрать emoji (#1871)
Merged
#1921 fix(scrapers): avito_full_load краш (source_id-reconcile) + cian/yandex ban-ротация
Merged
#1919 fix(estimator): флаг + тесты для ghost-anchor guard и radius-dedup (#1871)
Merged
#1920 fix(estimator): ghost-anchor — confidence='low' when radius analogs empty (#1871)
Merged
#1916 feat(tradein-imv): route IMV backfill через BrowserFetcher.fetch_json за dormant-флагом (#915 Stage 3)
Merged
#1915 feat(tradein-browser): additive POST /fetch-json + BrowserFetcher.fetch_json (#915 Stage 2)
Merged
#1914 fix(migration-133): dedup via cascade-delete, not child re-point (prod hotfix)
Merged
#1912 fix(cian): recover new-build house via cadastral anchor + listings (source,source_id) dedup (#1773)
Merged
#1910 feat(scheduler): wire house_imv_backfill as scheduled source (#854)
Merged
#1913 fix(scrapers): named BrowserSession concurrency const, fix Semaphore(3) doc drift (#1347)
Merged
#1911 feat(etl): housing-class normalization fallback via yandex_realty trigram match (#38)
Merged
#1909 fix(avito): post-merge polish — unify fetch_mode guard + empty-render guard (#1811)
Merged
#1908 fix(freshness): repoint nspd source to live nspd_quarter_dumps (data-table mode)
Merged
#1907 fix(freshness): calibrate kn staleness thresholds to weekly cadence
Merged
#1906 feat(financial/dcf): dormant separate-index inflation capability (default OFF)
Merged
#1905 feat(financial): ground-floor нежилое (office/commercial) tranche
Merged
#1904 feat(workers): data-freshness monitor (Celery beat → GlitchTip)
Merged
#1902 fix(site-finder): isolate zone-regulation cache write off the request session (#1850 item 4)
Merged
#1903 chore(mocks): regenerate parcel-analyze financial_estimate (consistent with current backend)
Merged
#1901 fix(site-finder): optimize zone-regulation resolve in /analyze (#1850)
Merged
#1900 feat(financial): levered (equity) IRR — capstone финмодели #1881
Merged
#1899 feat(site-finder): geo-radius market-price calibration in /analyze (#1881 follow-up)
Merged
#1898 fix(generative/financial): VAT only on parking, residential ДДУ exempt (ст. 149 НК)
Merged
#1897 chore(agents): bump all worker + analyst agents to opus 4.8
Merged
#1896 fix(avito): graceful sidecar HTTP 500/503 in browser SERP fetch (#1790)
Merged
#1895 feat(financial): LTC 70%/equity 30% норматив МКД РФ в модели финансирования
Merged
#1894 feat(cockpit): поверхностить financial_estimate в Development Scan / Investment Clearance (#1881 rank-5)
Merged
#1893 fix(financial): парковка price/cost по классу — econom наземная, business=Excel (#1881)
Merged
#1892 fix(gate): area-gate ЗОУИТ utility-easement blocker (sub-17) — снять over-block can_build (#1881)
Merged
#1891 fix(site-finder): разгейтить geoportal зон-резолвер от gappy NSPD-дампа — починить видимость финмодели (#1881)
Merged
#1890 feat(financial): DCF-график продаж по реальному темпу поглощения (rank 1, #1881)
Merged
#1889 feat(site-finder): backfill ЕКБ зон-регламента — разблокировать видимость финмодели (#1881)
Merged
#1888 chore(mocks): add financial_estimate to parcel-analyze mock for local preview (#1881)
Merged
#1887 fix(estimator): enable split-home disclosure at validated threshold 1.2 (audit #1871)
Merged
#1886 feat(finmodel): financing overlay (кредит 15%) поверх unlevered DCF (epic #1881 PR-5)
Merged
#1885 feat(site-finder): bridge финмодели (DCF) в кокпит Investment Clearance (epic #1881 PR-4)
Merged
#1884 feat(finmodel): monthly DCF — real NPV/IRR/PBP, replace IRR-proxy (epic #1881 PR-3)
Merged
#1883 feat(generative): calibrate finmodel sale price from Objective market (epic #1881 PR-2)
Merged
#1882 feat(generative): full static developer financial cascade (epic #1881 PR-1)
Merged
#1880 fix(estimator): radius (source,source_id) dedup + split-house corridor disclosure (audit #1871 P2)
Merged
#1879 fix(tradein): drop non-EKB avito detail coords on ingest (audit #1871 P2)
Merged
#1878 fix(site-finder): P3 a11y/UI batch from audit #1871
Merged
#1877 fix(site-finder): honest POI-score label + drop duplicate MOI column (audit #1871 P2)
Merged
#1876 fix(site-finder): velocity fallback 4500→750, coverage/proxy disclosure, market_trend staleness honesty (audit #1871 P2)
Merged
#1875 fix(ptica): honest isReal flags — placeholder stubs no longer marked real (audit #1871 P1.3)
Merged
#1874 fix(tradein/estimator): ghost-anchor invariant guard — n_analogs=0 forces low (audit #1871 P1.2)
Merged
#1873 fix(forecasting): honest scenarios collapse when β rate-sensitivity gate fails (audit #1871 P1)
Merged
#1872 revert: remove Site Finder v2 cockpit (PR #1866/#1868/#1870)
Merged
#1870 fix(site-finder/v2): remove resource legend overlay (dup of ИНЖЕНЕРИЯ card + POI overlap)
Merged
#1869 fix(site-finder/v2): move resource legend to bottom-left (no overlap with POI legend)
Merged
#1868 feat(site-finder/v2): resource legend + light theme polish
Merged
#1867 revert(site-finder): откат тёмной /site-finder обратно на светлую
Merged
#1866 feat(site-finder): Site Finder v2 cockpit route (ПТИЦА v2)
Merged
#1865 revert(ptica): старый Section1-6 дизайн как дефолтный роут
Merged
#1864 feat(ptica): Сценарии 6.6 + Отчёты «Параметры» (tab prototype-parity)
Merged
#1863 fix(estimator): low-findings аудита «Мера» — cian sanity, deal floor-edge, price_trend dedup, DEAL_MAX verify
Merged
#1859 fix(estimator): robustness — ratio-tier по финалу, radius-floor, yandex area, expected_sold ≤ asking
Merged
#1862 feat(ptica): ВРИ row in Градостроительство (real ЕГРН)
Merged
#1861 feat(ptica): map glyph pins + compass, equal-height grids, full-height rail; dark Site Finder
Merged
#1860 feat(ptica): live 3D massing in Инсоляция card + honest Recommended Product verdict
Merged
#1858 fix(ptica): button font-size — :where() so component classes win over reset
Merged
#1857 fix(ptica): populate scan cards with real /analyze data + product tabs + map zoom
Merged
#1856 feat(ptica): slow turntable rotation on insolation preview cube
Merged
#1855 fix(ptica): load Inter, surface map legend, drop flag, honest product chart, home link
Merged
#1854 fix(ptica): visual parity 1:1 with prototype (ОКС stretch + restored elements)
Merged
#1853 fix(ptica): left-rail — 7 icon+label items + working nav (match reference)
Merged
#1852 feat(ptica): complete cockpit — lower-grid + bottom-grid (Potential/Product/Clearance/Verdict)
Merged
#1851 feat(ptica): rich dark map (POI/connections/competitors/satellite) + ПТИЦА as default analysis route
Merged
#1849 feat(ptica): wire real КСИТ/height/zone/density into cockpit (frontend of #1843)
Merged
#1848 fix(scrapers): avito ban-triggered IP rotation (#1790) разблокирует houses-enrichment (#1789) + rating_score
Merged
#1847 feat(analyze): real ПЗЗ КСИТ/height into nspd_zoning (ПТИЦА оживление, #1843 Route 2)
Merged
#1842 fix(ptica): drawer modal a11y (focus-trap + restore) + polish
Merged
#1844 fix(site_finder): read real NSPD territorial-zone keys (nspd_zoning.zone_code was always null)
Merged
#1845 fix(tradein/yandex): инкрементальный per-combo save + bounded gate-timeout (анти-зомби city_sweep)
Merged
#1841 feat(tradein): бэкфилл координат листингов из ekb_geoportal_buildings (street+house match)
Merged
#1840 feat(tradein/avito): per-card ЕКБ гео-фильтр (отсечь padding по России)
Merged
#1839 fix(ci): deploy-tradein paths-filter base = last deployed SHA (накопленный diff, fail-safe build-all)
Merged
#1838 feat(tradein/scrapers): detail_backfill через curl_cffi+backconnect вместо браузера/auv (развязка прокси)
Merged
#1835 feat(ptica): 3D building-massing module (Three.js) [PR#5]
Merged
#1834 feat(ptica): detail drawer system + 17 drawers [PR#4]
Merged
#1833 feat(ptica): Отчёты + Сравнение cockpit tabs [PR#3]
Merged
#1832 feat(ptica): Сценарии tab (§22 forecast) + real hero invest-score [PR#2]
Merged
#1831 feat(site-finder): ПТИЦА dark cockpit — increment 1 (shell + hero + Development Scan)
Merged
#1830 feat(scrapers/ui): backfill+full-load триггеры, source-фильтр, pacing-слайдер, coverage-таблица
Merged
#1829 feat(scrapers): live pacing-регулятор + data-quality coverage API
Merged
#1837 feat(trade-in/ui): transparency «Мера» — analog_tier, address_precision, expected_sold бар, ratio_basis
Merged
#1836 fix(estimator): топ-5 фиксов аудита «Мера» (anchor gate, analog_tier, freshness, MAD-order, data-age)
Merged
#1828 feat(tradein/scrapers): full_load пропускает листинги обновлённые сегодня при повторном прогоне
Merged
#1826 feat(tradein-browser): per-provider page-interval override (#1812 follow-up)
Merged
#1827 fix(tradein/db): widen offer_price_history.diff_percent (5,2)→(8,2) + clamp в триггере (краш full_load)
Merged
#1824 fix(scrapers/ui): дедуп queryKey cian test-auth + a11y (Phase-1 polish)
Merged
#1825 fix(scrapers/backend): socks5 health-probe + status Literal + #1820 ext_id=0 dedup
Merged
#1823 feat(tradein/ui): две равноправные hero-цены (выставить/получить) + компактный ряд бенчмарков
Merged
#1822 fix(scrapers): avito pipeline — новостройки house graceful + AvitoBlockedError per-item не крашит прогон (#1820)
Merged
#1821 fix(tradein/ui): убрать debug cache-key, гейт тонких графиков, разграничить динамику цен
Merged
#1819 feat(tradein-frontend): единая scrapers-страница — табы, proxy-health+rotate, runs-история (scrapers UI Phase 1)
Merged
#1818 feat(admin): unified scrape/runs + scraper/health + rotate-ip API (scrapers UI Phase 1)
Merged
#1817 fix(tradein/estimator): расширить corridor-clamp slack 0.25→0.40 для премиума без own-листингов
Merged
#1815 fix(scrapers): avito_detail_backfill — снапшот ЕКБ+active, detail browser-only без curl-fallback на бан (#1814)
Merged
#1813 feat(browser): per-provider page pacing + resource-block tuning — снизить proxy fan-out (#1812)
Merged
#1809 feat(scrapers): avito SERP дефолт на BrowserFetcher (camoufox), curl_cffi fallback (#1805)
Merged
#1810 feat(scrapers): cian SERP на BrowserFetcher (camoufox), снят code-side rotate (#1806)
Merged
#1808 fix(tradein-frontend): Мера estimate — hydration #418 + photos 422 (#1803 #1804)
Merged
#1807 fix(tradein/estimator): clamp premium headline к коридору сделок + робастный anchor (#1795)
Merged
#1802 test(browser): удалить устаревшие pool-routing тесты (CI red после #1793)
Merged
#1800 fix(scrapers): cian_detail — ceiling из offer.building.ceilingHeight, repair из decoration (#1791)
Merged
#1799 fix(scrapers): yandex_detail — area/ceiling/kitchen из INITIAL_STATE, покрытие area 63%→~95% (#1792)
Merged
#1798 fix(tradein-browser): camoufox hardening — block_images/webrtc + форс МСК tz (#1796)
Merged
#1797 fix(scrapers): avito_houses — отзывы/история/тип ЖК долетают (виджет-payload вложен глубже) (#1789)
Merged
#1794 feat(browser): per-provider concurrency — параллель между поставщиками, ≤1 коннект на поставщика (#1793)
Merged
#1788 fix(tradein): verify=False для WFS геопортала ЕКБ (российский CA-серт)
Merged
#1787 fix(tradein): чинит main-red — патч _geoportal_house_match в cadastral-тесте (хвост #1786)
Merged
#1784 fix(db): #1781 backfill listings.house_id_fk from house_sources (cian novostroyki)
Merged
#1786 feat(tradein): ингест зданий из геопортала ЕКБ + tier в геокодере (полный кадастр города)
Merged
#1783 feat(tradein): фронт передаёт координаты выбранной подсказки в /estimate (Variant A, frontend)
Merged
#1782 feat(tradein): /estimate принимает координаты от автокомплита, минует geocode (Variant A, backend)
Merged
#1780 fix(tradein): чинит кадастр-матчер геокодера — резолв адресов из своей базы (~60% упавших)
Merged
#1779 fix(tradein): удалить white-label бренд «Практика» целиком (БД + маппинг + ассеты)
Merged
#1777 fix(tradein): budget Cian valuation call to stop 25s estimate stalls («не считает»)
Merged
#1778 fix(tradein): убрать хардкод «Практика» из offer-баннера
Merged
#1776 fix(estimator): #1774 Tier A admits same-building novostroyki resales (secondary-dominant gate)
Merged
#1775 fix(avito): de-glue house number from district in _clean_address (#1773 part)
Merged
#1771 fix(avito): reconnect-retry on detail 429 under backconnect proxy
Merged
#1770 feat(avito): incremental daily + exhaustive weekly schedule split (+ scheduler interval_days)
Merged
#1769 fix(avito): tolerate 429 per-bucket instead of banning whole sweep
Merged
#1768 fix(avito): reconnect-retry on detail 403/firewall under backconnect proxy
Merged
#1766 feat(avito): incremental SERP pagination with date early-stop (param-gated, default off)
Merged
#1767 feat(listings): card_hash column + snapshot-dedup on unchanged cards
Merged
#1765 fix(avito): gate 403 reconnect-retry on proxy presence only (was dead code in prod)
Merged
#1764 fix(avito): reconnect-retry on SERP 403/firewall under backconnect proxy
Merged
#1763 fix(tradein): avito _extract_total_count returns 0 on no-results page — stop empty-bracket split/rotate waste
Merged
#1762 feat(tradein): avito curl_cffi 429 short-retry — enables backconnect curl SERP (×50 faster than browser)
Merged
#1761 perf(browser): block image/media/font resources in camoufox fetch (~10x smaller pages, faster via proxy)
Merged
#1760 perf(tradein): shared EKB seed price-brackets across avito/cian/yandex (city-dict ready for multi-city)
Merged
#1759 perf(tradein): avito seed price-brackets with open top bucket (≤2k blocks, no price ceiling)
Merged
#1758 fix(tradein): praktika brand only under praktika account — drop kopylov mapping (brand leak)
Merged
#1757 fix(tradein): avito full-load probe resilience — browser 500/timeout splits/skips instead of crashing run
Merged
#1756 feat(site-finder): snapshot.pdf exclude_dev param — hide competitor by developer name
Merged
#1754 feat(tradein): populate offer_price_history for yandex from gate price.previous/trend
Merged
#1755 fix(tradein): avito sweep page-level retry — transient page error no longer aborts run
Merged
#1753 feat(tradein): avito exhaustive full-load (room×price bisection) — mirror cian
Merged
#1752 feat(tradein): schedule cian_full_load (exhaustive secondary) + anchor sweep NB-only
Merged
#1750 feat(cadastral): geo-nearest building matcher via local cad mirror
Merged
#1751 feat(site-finder): карта точек подключения (НСПД) в секции «Сети» (#1746 part)
Merged
#1749 feat(site-finder): продуктовые решения по фидбеку analyze (#1741-1745)
Merged
#1748 fix(site-finder): 5 дефектов из фидбека analyze (#1736-1740)
Merged
#1747 feat(avito): dedicated newbuilding (novostroyka) citywide sweep
Merged
#1735 feat(browser): per-source proxy pool behind FEATURE_BROWSER_POOL_ENABLED (Phase 1)
Merged
#1734 fix(yandex): read predicted price from entity.predictions.predictedPrice (#1725)
Merged
#1733 feat(browser): concurrent page pool (BROWSER_CONCURRENCY, default 4) + raise mem_limit to 5g
Merged
#1732 fix(backfill): drop nonexistent kadastr_num column from listings SELECT
Merged
#1731 fix(avito): proactive IP rotate at sweep start + raise max_rotations 2→4 (Datadome ban recovery)
Merged
#1730 feat(domclick): wire DomClick citywide sweep into pipeline+scheduler (seeded disabled)
Merged
#1729 feat(avito): capture newbuilding ЖК id/url from SERP card
Merged
#1728 docs(readme): refresh to Jun 2026 — Trade-In/Мера + Site Finder v2 + structure + remove debug.log
Merged
#1727 fix(scrapers): write resolved house_id to listings.house_id_fk in realtime link hook
Merged
#1725 feat(yandex): map rich entity fields (predictedPrice, seller, listing_date, trend, metro)
Merged
#1726 fix(sql): ALTER TABLE IF EXISTS in migration 162 (deploy red — district_economics absent)
Merged
#1724 fix(tradein): correct SberIndex hedonic/asking dataset filter dims + 404 warning (#902)
Merged
#1712 feat(site-finder): РИАСУРТ Свердл 14-layer harvest client+schema+task for ЕКБ agglomeration (#108)
Merged
#1722 fix(matching): conflict_resolution picks freshest (last_seen_at) value, deterministic (#1539)
Merged
#1719 feat(objective): diff-gated objective_lots_history writer trigger (#307 OBJ-6)
Merged
#1711 feat(sql): sales-tracker velocity + absorption MVs for Site Finder (#61)
Merged
#1720 fix(site-finder): gate velocity on confidence of objective_complex_mapping (#307 OBJ-2)
Merged
#1718 fix(cian): persist detail rich fields (description) + stamp detail_enriched_at
Merged
#1721 test(etl): fix stale assert in objective_backfill dry_run test (#1709 systemic CI red)
Merged
#1710 feat(tradein): segment=vtorichka|novostroyki|all on listings search (#1188)
Merged
#1715 feat(yandex): ingest novostroyki via gate-API newFlat=YES
Merged
#1716 fix(avito): classify novostroyki by item-development-name marker; map переуступка sale_type
Merged
#1714 fix(frontend): regen api-types.ts — POI-score fields (#1709 systemic CI red)
Merged
#1717 ci: cache uv + skip dev deps to speed up gate jobs (#1709)
Merged
#1713 ci: drop push-on-feature-branch trigger to kill duplicate CI runs (#1709)
Merged
#1706 fix(sql): EMISS PK includes period_type so yearly+Q1 coexist (#1606 follow-up)
Merged
#1707 fix(leads): replace ::interval cast with make_interval (psycopg v3 trap) (#1383 follow-up)
Merged
#1708 docs(estimator): DKP corridor described as P10/P90 not min/max in schema+TS (#1520 follow-up)
Merged
#1701 fix(admin-scrape): ge=1 on /failures limit + enforce LLM finish_reason
Merged
#1703 fix(llm): word-boundary INN match, tighten edge cases (#1640 follow-up)
Merged
#1702 fix(exporters): annotate scenario deficit horizon in excel too (#1590 follow-up)
Merged
#1700 fix(weather): wind_d returns None when no valid samples, not fabricated 0.0°
Merged
#1704 fix(scrapers): narrow domrf Level-1 status badge-class regex (#1609 follow-up)
Merged
#1705 test(site-finder): cover is_residential_zone raw_props/subcategory branch (#1353 follow-up)
Merged
#1699 feat(yandex): route gate-API fetch through camoufox (sustainable, no proxy burn)
Merged
#1698 fix(site-finder): remove dead sat_factor (computed+written, never applied) (#1509)
Merged
#1697 fix(site-finder): NO_ENGINEERING_NEARBY is a warning, not a verdict blocker (#1617)
Merged
#1696 fix(forecasting): thread room_bucket velocity into format ranking (#1593)
Merged
#1694 fix(leads): window revenue_total/deals_total to leads_window (#1383)
Merged
#1691 fix(site-finder): apply 12mo cutoff to n_lots/sold_pct/price in enrich economics (#1513)
Merged
#1695 fix(estimator): DKP corridor uses P10/P90 not min/max (#1520)
Merged
#1693 fix(sql): restore partial WHERE is_active predicate on listings indexes (#1398)
Merged
#1692 fix(site-finder): smart_suggestions filter parcels above documented score threshold (#1503)
Merged
#1690 fix(site-finder): volume-weighted median_price_m2 (#1511) + consistent-period MTS (#1512)
Merged
#1684 fix(forecasting): deal_count confidence note carries «за N мес» window (#1637)
Merged
#1686 fix(scrapers): scope+stem domrf status classification (#1609)
Merged
#1689 fix(scrapers): cian _walk_price_range stop silently truncating tail (#1393)
Merged
#1688 fix(sql): v_supply_layers_latest keep dev_group_name in DISTINCT ON key (#1650)
Merged
#1687 fix(scrapers): disambiguate EMISS yearly vs Q1 in dedup key (#1606)
Merged
#1685 fix(forecasting): correct _geo_weight unknown floor so far projects rank low (#1633)
Merged
#1683 fix(forecasting): count non-zero observations in normalize guard (#1638)
Merged
#1682 fix(llm): INN redaction requires context anchor, stop eating large numbers (#1640)
Merged
#1681 fix(site-finder): robust is_residential_zone detection for NSPD zone codes (#1353)
Merged
#1680 fix(parcels): _score_label honor «хорошо»=25→«отлично» boundary (#1357)
Merged
#1674 fix(site-finder): normalize POI weighted score to 0..100 on backend (#1486)
Merged
#1678 fix(sql): dedup deals-to-district assignment in ekb districts median refresh (#1352)
Merged
#1673 fix(cadastre): cad_territorial_zones MULTIPOLYGON typmod + ST_Multi coercion (#1344)
Merged
#1679 fix(forecasting): cap trend_ratio by v_rec magnitude when v_prior==0 (#1508)
Merged
#1677 fix(site-finder): non-overlapping L2/L3 ready_dt windows, stop double-count of 13-24mo supply (#1355)
Merged
#1676 fix(tradein): trade-in PDF cover uses estimate.expires_at, not hardcoded +30d (#1530)
Merged
#1675 fix(analytics): align portfolio series to area buckets in quartirography (#1406)
Merged
#1672 fix(analytics): drop false market verdict from per-object Sold % KpiCard (#1407)
Merged
#1662 fix(week-review): дожим — 4 фикса (#1569, #1590, #1642, #801)
Merged
#1660 fix(week-review): backend-аудит v2 — 82 фиксов
Merged
#1670 fix(site-finder): nearest_top3 metro from osm_poi_ekb (#1667)
Merged
#1671 docs(site-finder): analyze confidence by-design distinct from §15 (#1668)
Merged
#1669 fix(workers): schedule mv_layout_velocity refresh (#1666)
Merged
#1663 feat(scripts): Potrace floor-plan vectorization spike (#299)
Merged
#1665 feat(yandex): switch SERP scraping to JSON gate-API (bypasses bandwidth tarpit)
Merged
#1664 fix(yandex): rotate proxy IP + retry on tarpit-timeout/captcha in combos sweep
Merged
#1661 fix(avito): scale per-anchor timeout for detail-enrich + durable SERP counters
Merged
#1659 fix(tradein): yandex combos watchdog timeout (P0) + deploy scraper filter gap
Merged
#1658 feat(tradein): yandex city sweep — EKB-center rooms×price combos (replaces 5-anchor shallow)
Merged
#1657 feat(cian): collect price history via BrowserFetcher (fixes silent no-op backfill)
Merged
#1568 feat(scrapers): enable cian_city_sweep (proxy alive, sweep is cookieless)
Merged
#1559 feat(tradein/db): derived price-history trigger (avito/yandex) + last_seen_at deactivate index
Merged
#1558 feat(scrapers): segment-aware generic deactivate_stale for yandex/cian
Merged
#1557 fix(scrapers): deactivate pre-#753 ghost duplicate listings (dedup correctness)
Merged
#1556 chore(scrapers): убрать устаревший n1-скраппер (n1.ru → cian), сохранить историч. данные
Merged
#1555 fix(scrapers): cian detail — извлечение kitchen_area_m2 (part of #1553)
Merged
#1554 feat(scrapers): yandex detail-enrichment — save + ночной backfill через прокси (part of #1553)
Merged
#1552 feat(scrapers): ночной avito detail-enrichment backfill для legacy listings (Closes #1551)
Merged
#1549 fix(scrapers): geocode-missing listings nightly scheduler — listings geom coverage backfill (all sources)
Merged
#1550 fix(scrapers): avito detail parser — захват Жилая площадь / Высота потолков / Отделка
Merged
#1548 fix(tradein): починить 3 теста-регрессии из #1543 — разблокировать deploy gate
Merged
#1547 fix(tradein): hotfix миграции 108 — deploy red (typo + collision-safe репойнт)
Merged
#1543 fix(week-review): аудит код-ревью — 181 фиксов (label week ревью 1)
Merged
#1546 fix(tradein): avito houses dedup через match_or_create_house + merge-миграция дублей (108)
Merged
#1545 fix(tradein): yandex newbuilding rating drift — «4.3из 5» без пробела (#974)
Merged
#1544 fix(tradein): cian newbuilding MFE/reliability drift — initialState extraction (#972)
Merged
#1296 feat(tradein): scheduler-источник cian_city_sweep (newbuilding Phase 4), seed dormant (#973)
Merged
#1542 fix(tradein): обновить test_scraper_proxy под BrowserFetcher-транспорт fetch_newbuilding
Merged
#1540 fix(tradein): cian fetch_newbuilding через BrowserFetcher (camoufox) — initialState под анти-ботом (#972)
Merged
#1541 feat(tradein): yandex_newbuilding sweep-entrypoint + market-схема enrichment, seed dormant (#974)
516 issues closed from 6 users
Closed
#2445 EPIC: аудит кода ПТИЦЫ (мульти-агентный code review 2026-07-05) — 18 подтверждённых находок
Closed
#2416 [needs-human][devops] deploy-obsidian.yml: живо ли GitHub-зеркало, или workflow мёртв с 16.05?
Closed
#2000 DomClick Layer B (deep detail-backfill) заблокирован QRATOR — нужен dedicated residential RU proxy
Closed
#2309 [tradein] scraper_kit migration — Group F: широкий рефактор структуры providers/*
Closed
#2352 [tradein] scraper_kit Group F4: shared base classes + consistent naming/layout providers/*
Closed
#2431 [tradein] dedup regression: PR #2429 сломал сравнение корпуса дома между avito/cian («NкM») и domklik («N/M»)
Closed
#2423 [tradein] dedup: avito house-no regex хватает цифры из приклеенного названия метро вместо реального номера дома
Closed
#1846 DomClick scraper мёртв: VPS-IP заблокирован QRATOR + редизайн сайта (нужен прокси + rewrite на новый API)
Closed
#2323 [tradein] admin.py: scrape_cian_newbuilding awaits sync save_newbuilding_enrichment — TypeError at runtime
Closed
#2397 [tradein] scraper_kit: decommission legacy orchestration (scrape_pipeline.py / scheduler.py) — enable full legacy deletion
Closed
#1746 (site-finder) [feature/data] все инженерные сети на карту + единый источник (191-ФЗ engineering_networks не используется)
Closed
#2367 [site-finder] ИСОГД Свердл: реестр РНС как ранний сигнал future-supply (§6) — наследник Потока 2 из #103
Closed
#2213 [P1] Defense-in-depth для trusted-header auth + rate-limiter fix
Closed
#2218 [needs-human] Продуктовая ясность: мот vs бесплатных оценок + конверсионный слой + README
Closed
#2377 frontend: заменить mailto-CTA на форму лида в HeroTransparency (parent #1971)
Closed
#2395 [tradein][v2] Форма лида (#2377) невидима на проде — смонтирована в мёртвом legacy-дереве, не в v2
Closed
#2363 [tradein] scraper_kit Group F4c: миграция yandex/* на shared base (_base.py)
Closed
#2361 [tradein] scraper_kit Group F4a: миграция avito/* на shared base (_base.py)
Closed
#2362 [tradein] scraper_kit Group F4b: миграция cian/* на shared base (_base.py)
Closed
#2364 [tradein] scraper_kit Group F4d: миграция domclick/* на shared base (_base.py)
Closed
#2217 [needs-human] 152-ФЗ позиция (17342 телефона) + права на переопубликование скрейпленных данных
Closed
#1926 [AUDIT #1871 остаток] invest_score advisory flag + units_sold align + yandex total_seen obs + frontend polish
Closed
#103 Engineering networks: Hybrid plan (ФГИС ТП XSD + ИСОГД + Водоканал ЕКБ) — альтернативные источники
Closed
#2358 [tradein] scraper_kit Group F4-Foundation: shared base/utils для providers/*
Closed
#2003 [tradein][tech-debt] houses.house_class never populated — dead merge engine + Avito «Класс жилья» not extracted
Closed
#2322 [tradein] scraper_kit bug: yandex/cian newbuilding providers — BrowserFetcher без endpoint= ломает любого caller'а
Closed
#1995 [UX-аудит #06b] Данные сделок-заглушки: все даты 01.01.26 + немонотонный sell-time (backend/data)
Closed
#2330 [tradein] scraper_kit: avito build_warmed_session() не выставляет config= — тихо теряет sticky-proxy на prod-default пути
Closed
#2351 [tradein] scraper_kit Group F3: системный аудит config-footgun паттерна во всех providers/*
Closed
#2308 [tradein] scraper_kit migration — Group E: core valuation (estimator.py) — МАКСИМАЛЬНЫЙ РИСК
Closed
#2337 [tradein] scraper_kit Group E4: финальное переключение estimator.py на kit (#2308 завершение)
Closed
#1967 [tradein][data] avito 54% NULL lat → невидим PostGIS-радиусу: geo-backfill + dedup на ингесте (рычаг точности массы оценок)
Closed
#2336 [tradein] scraper_kit Group E3: yandex_valuation → kit (estimator.py dependency, часть #2308)
Closed
#2334 [tradein] scraper_kit Group E1: avito_imv → kit (estimator.py dependency, часть #2308)
Closed
#2011 [tradein] Аудит покрытия полей скрапперов avito/cian/yandex — сводка + прод-замер (2026-06-27)
Closed
#1950 [tradein][scrapers] avito: changeip-recovery одношотный (30s timeout роняет run) + статус 'banned' завышен когда SERP отработал
Closed
#2335 [tradein] scraper_kit Group E2: cian_valuation → kit (estimator.py dependency, часть #2308)
Closed
#2317 trade-in/v2: подключить LocationDrawer к GET /location-coef (frontend wiring, follow-up #2045)
Closed
#2009 [tradein][avito] detail: дописать house_type + house_catalog_url (+5 house-level полей) в save_detail_enrichment
Closed
#2010 [tradein][avito] IMV: персист comparables + searchSimilarUrl (сейчас полностью выбрасываются)
Closed
#2008 [tradein][cian] SERP: промоут полей из raw_payload в колонки — kitchen_area_m2, mortgage_available (+ новые is_apartments, is_rosreestr_checked)
Closed
#2007 [tradein][yandex] SERP _entity_to_lot: писать ceiling_height + kitchen_area_m2 в колонки + нормализовать house_type
Closed
#1949 [tradein][scrapers] cian: full_load зомбится ~43% + city_sweep self-inflicted watchdog-бан → 86% инвентаря stale
Closed
#2310 [tradein] scraper_kit migration — Group C: backfill/enrichment tasks
Closed
#2202 [P0] Подключить scrape_proxies pool к боевым скрейперам — убрать single-IP SPOF
Closed
#1996 [UX-аудит #07] Иерархия «ответ → доказательство → тех-детали» на странице результата
Closed
#2062 trade-in/v2: UI/UX-полировка по аудиту (доступность, доверие к числам, иерархия, копирайт)
Closed
#1993 [UX-аудит #05] Убрать сырые внутренние подписи с витрины (start_price, benchmark, yandex_valuation, asking…)
Closed
#1994 [UX-аудит #06a] Прятать пустые блоки + единый формат сумм (frontend)
Closed
#1990 [UX-аудит #02] Дедуп чисел на странице результата — одни и те же суммы повторяются 3–4 раза
Closed
#1989 [UX-аудит #01] Закрепить итог (выкупная стоимость + «Скачать PDF») вверху страницы результата
Closed
#1992 [UX-аудит #04] Один источник вводных + один инструмент «что-если» (сейчас три места пересчёта)
Closed
#1972 [tradein][ux] Редизайн результата «Тихая уверенность»: одна цифра-герой (expected_sold) + confidence-driven типографика + снять тройное дублирование цен
Closed
#1991 [UX-аудит #03] Свести четыре цены к двум + явная пометка «эта идёт в оффер»
Closed
#2305 [tradein] scraper_kit migration — Group A: admin/scripts debug (низкий риск)
Closed
#2316 [P4] mypy strict: 3 пред-существующие ошибки в generative/exporters/dxf.py
Closed
#2306 [tradein] scraper_kit migration — Group B: cian/yandex price-history & session
Closed
#1966 [tradein][analytics] Accuracy-loop → CI-гейт: point-in-time backtest на ПОЛНОМ движке (per-rooms MAPE + range-coverage SLA)
Closed
#2295 [P3] POST /concepts отдаёт 422 на многоконтурных участках (MultiPolygon)
Closed
#2307 [tradein] scraper_kit migration — Group D: порт orphan-модулей (domclick_detail, ekb_geoportal_client)
Closed
#2036 trade-in/v2: подключить боевые ручки к новому UI (/trade-in/v2)
Closed
#2045 trade-in/v2 [BE-3]: Коэффициент локации + POI-разложение (LocationDrawer) — DEFER / решение
Closed
#2304 [tradein] scraper_kit migration — Stage 0: общий parity-test harness
Closed
#2262 [tradein][v2] Жёсткий аудит нового дизайна «Мера» v2 (пост honest-interval + design-sync) — ЭПИК
Closed
#2265 [tradein][v2] Живой аудит честности чисел на проде — resolved ли жалоба оценщика + остаток #2087 (эпик #2262)
Closed
#2266 [tradein][v2] Визуальный аудит — иерархия 3 цен, CTA, микрокопи, консистентность после honest-hero (эпик #2262)
Closed
#2046 trade-in/v2 [BE-4]: профиль пользователя (name/org/email) для TopNav — DEFER
Closed
#2041 trade-in/v2 [FE-4]: overlay «РЫНОК / Аналогичные объявления» (SourcesView)
Closed
#2040 trade-in/v2 [FE-3]: overlay «Аналитика дома» (AnalyticsView)
Closed
#2264 [tradein][v2][a11y] Жёсткий аудит доступности — клавиатура/SR end-to-end + aria-modal оверлеев (эпик #2262)
Closed
#2255 [P3] Эстиматор: сегментная калибровка по классу жилья — за фичефлагом (follow-up #2209)
Closed
#2269 [P2] Кросс-source дедуп: ключ схлопывает лишь 13.5% дублей — канонизация по house_id_fk (follow-up #2215)
Closed
#2259 Полный PDF/DOCX-экспорт ПТИЦА-отчёта (/analyze): §1-§7 + альтернативы
Closed
#2119 Точки подключения с характеристиками: 51 источник, 27 верифицированы (research 2026-07-02)
Closed
#2201 [P0] Продлить 3 mobile-прокси до 15.07 (иначе avito+cian+yandex умрут вместе)
Closed
#2267 [tradein][v2][design-sync] Аудит DS-панели claude.ai/design + авторинг 6 floor-card v2-компонентов (эпик #2262)
Closed
#2126 [EPIC] scraper-kit — внутренний код-пакет монорепо (консолидация скрапперов)
Closed
#2160 [EPIC] proxy-pool — хранилище прокси в БД + автовыбор свободного/рабочего
Closed
#2204 [P0] deactivate_stale для domklik/n1 + честный трекинг freshness domklik
Closed
#2235 [P2] yandex: 204 активных URL-дубля — дедуп + уникальность source_url
Closed
#2236 [P2] external_valuations.house_id всегда NULL (1579/1579) — привязать к houses
Closed
#2234 [P2] admin.py: текст исключений утекает в HTTP-ответы (8 мест detail=f"...: {e}")
Closed
#2233 [P1] photo-upload буферизует всё тело в RAM до проверки лимита (OOM-риск при mem_limit 768m)
Closed
#2209 [P1] Честность диапазона оценки: раскрыть/рекалибровать 56.6% + min-width floor + backtest baseline + CI-гейт
Closed
#2177 §4.2 «Анализ планировок»: покрытие 17% при 100% данных в Объективе — дедуп ЖК + расширение mapping + lots-fallback
Closed
#2215 [P2] Кросс-источник дедуп аналогов (house+floor+area) — убрать ~19% двойного счёта
Closed
#2216 [P2] Миграции tradein: порядок (до рестарта) + реконсиляция 152 vs 131 + дубль-префиксы
Closed
#2181 Альтернативы при отрицательном вердикте: оптимизатор программы (класс × этажность × mix) в конце отчёта
Closed
#2211 [P1] Честность UI-источников: убрать «/7», фолбэк-чипы, «классическую», зелёный cache-дот, «CV»
Closed
#2212 [P1] Починить rosreestr_dkp_import (deals заморожены 182д) + алерт на max(deal_date)
Closed
#2207 [P1] Снять блокировку event loop на POST /estimate (asyncio.to_thread)
Closed
#2206 [P1] Обновлять scraped_at в upsert (base.py) — вернуть ~55% инвентаря эстиматору
Closed
#2205 [P0] Убрать публичную фейк-оценку /trade-in/ui-preview с прода + noindex
Closed
#2208 [P1] Pre-merge CI-гейт для tradein-mvp (backend pytest + frontend typecheck/lint)
Closed
#2178 §4.3 «Тренд рынка»: считать динамику цен из objective_lots_history вместо устаревшего Росреестра
Closed
#2180 3D-макет окружения в «Размещении застройки»: соседние здания из cad_buildings
Closed
#2179 §7 отчёта: раскрыт по умолчанию + участок выделен на 3D-подложке + больший кусок карты
Closed
#2164 proxy-pool P4: динамический browser server (acquire + relaunch + release)
Closed
#2188 tradein/deploy: tradein-scraper не пересоздаётся при изменении matching/dedup-кода — DORMANT-дедуп запустил бы старый код
Closed
#2163 proxy-pool P3: интеграция curl-путей на пул (acquire/release)
Closed
#2187 tradein/dedup: ослабить geo-guard в fias-pass — 130 same-fias групп не смержены (NULL geom / >250 м)
Closed
#2192 rewire: scheduler_main на kit-scheduler за флагом USE_KIT_SCHEDULER (ship-dark)
Closed
#2136 scraper-kit G: scheduler + registry-dispatch (25+ trigger_* → dict-реестр)
Closed
#2135 scraper-kit F: перенос pipeline (scrape_pipeline) в пакет
Closed
#2162 proxy-pool P2: сервис proxy_pool (acquire/release/health) + health-checker
Closed
#2134 scraper-kit E: консолидация бисекции цены (4 копии → pricing/bisection.py)
Closed
#2161 proxy-pool P1: таблица scrape_proxies + admin bulk-load + seed env
Closed
#2133 scraper-kit D: перенос провайдеров (avito/cian/yandex/domclick)
Closed
#2132 scraper-kit C: перенос core-слоя в пакет
Closed
#2131 scraper-kit B: Protocol-границы (matcher/config/session/jobs) + adapters
Closed
#2127 [EPIC] market — контракт данных скрапперов для внешних потребителей
Closed
#2138 market J: перенацелить gendesign_reader на market.v_* + обновить ETL #976
Closed
#2137 scraper-kit H: Docker/build wiring для пакета
Closed
#2130 market I: contract-view market.v_* поверх producer-таблиц
Closed
#2129 scrapers K: fix _unix_to_date TZ-inconsistency (3 копии MSK/UTC/naive)
Closed
#2128 scraper-kit A: скаффолд пакета + workspace-подключение
Closed
#2043 trade-in/v2 [BE-1]: estimate +cv +source_counts +created_at; /history +sources_used; cache-KPI
Closed
#2044 trade-in/v2 [BE-2]: optional radius_m param (estimate / house-analytics / sell-time-sensitivity)
Closed
#2111 «Все точки показывают максимум информации» — карты-попапы недоливают данные (verified audit)
Closed
#1953 [EPIC] ПТИЦА analysis report — UX + data-honesty аудит (на примере 66:41:0205010:287)
Closed
#1961 P1 Сети/точки подключения не на карте (нет слоя источника + радиус 500м vs 2км + полигоны без центроида) (эпик #1953)
Closed
#1960 P1 «Медиана рынка» 64k — квартальная n=1 ДКП-медиана вместо новостроечного базиса (эпик #1953)
Closed
#1958 P0 График дефицита: оси налезают + плоское/пустое состояние; фактор «Прогноз спрос/предложение» ×4 дубль (эпик #1953)
Closed
#1957 P0 ЗОУИТ: сырой «cad_zouit», дубли, пустые «Охраняемые зоны» + СЗЗ-смысл и баннер «жильё ограничено» (эпик #1953)
Closed
#1955 P0 «Что хорошо продаётся» — дубли бакетов (obj_class не проброшен) + фантом Comfort/Комфорт (эпик #1953)
Closed
#1954 P0 Объект-карточка: площадь «—», обременения «—», «обновлено» — читаются мёртвые колонки (эпик #1953)
Closed
#2042 trade-in/v2 [FE-5]: «Предыдущие оценки» (CacheView) + PDF-ссылка + quota + автокомплит адреса
Closed
#1945 [site-finder][scrapers] domrf_kn FLATS loader сломан с ~17.05 (DOM.РФ WAF): flats 376k→~0, best-layouts supply пустой 5 недель
Closed
#2039 trade-in/v2 [FE-2]: overlay «История / Продажи в доме» (HistoryView)
Closed
#2038 trade-in/v2 [FE-1]: data shell + main dashboard wiring (page.tsx + mappers + ParamsPanel/ResultPanel/ObjectSummary/Hero/Footer)
Closed
#1964 P2 Data-quality: objective_lots раздут (1.75M), n_sold=99110 аномалия, registration_date разрежен (эпик #1953)
Closed
#1965 [feat] Консолидация фин-модели/Концепции в отчёт + интерактив house-picker → 3D → пересчёт (эпик #1953)
Closed
#1956 P0 4.2 Планировки: «срок продажи 0 мес» / «% продано —» — per-object snapshot (регрессия #1944) (эпик #1953)
Closed
#1959 P0 Индекс дефицита −1.00 ВЕЗДЕ — basis mismatch (спрос сегмент vs предложение район) + honesty-guard (эпик #1953)
Closed
#1963 P2 Человеческий язык / микрокопия отчёта (6.2/6.3/6.5 + легенды дефицита/затоварки) (эпик #1953)
Closed
#1962 P1 Градрегламент НСПД (тер.зона/КСИТ/высота/этажность) — вывести в Раздел 1 (эпик #1953)
Closed
#1968 [tradein][ux] Honesty-fix вывода: «7 источников»→честные 4, убрать фейковую per-source медиану, выпилить domclick из sources
Closed
#1723 [tradein][data] Objective bank_name/registration_number не отдаётся на текущем тарифе (ЕГРН-поля)
Closed
#39 Access A1: OSRM-докер + osm.pbf Свердл (routing-engine infra)
Closed
#1917 [tradein][scrapers] /fetch-json: тюнинг settle после навигации (транзиентный NetworkError на первом XHR)
Closed
#815 [EPIC/tracking][tradein] Launch readiness всех скрейперов — подготовить к регулярному сбору
Closed
#883 [EPIC][tradein][scrapers] Миграция fetch-слоя на camoufox (real browser anti-bot)
Closed
#886 [tradein][scrapers] Phase 2 — cian/n1/yandex на camoufox + снять анти-бот костыли (#883)
Closed
#446 epic(infra): Pilot infra status 2026-05-23 — после security pivot
Closed
#972 [SF-v2 #950] 950-E1: Backfill enrichment-таблиц newbuilding (3 пустые)
Closed
#559 [EPIC][tradein] Полная автоматизация scrapers с persistence через redeploy
Closed
#1871 [AUDIT 2026-06-22] ПТИЦА deep-audit: реестр дефектов (цифры/логика/минусы/дизайн)
Closed
#1189 [tradein] D: QA полной загрузки сегментов на проде — counts, стабильность estimator, EXPLAIN → решение об индексе
Closed
#974 [SF-v2 #950] 950-E3: Активировать yandex_newbuilding (0 строк сегодня)
Closed
#1918 [tradein] yandex browser-proxy мёртв (za.mobileproxy.space:62011) → yandex detail/newbuilding/address enrichment в 503
Closed
#1184 [tradein] tradein-browser в crash-loop: camoufox InvalidProxy mproxy.site:16928 (прокси недоступен/истёк)
Closed
#402 feat(tradein): #13 — Yandex Geocoder API-ключ
Closed
#562 [tradein][scrapers] Avito IMV + Houses batch enrichment после city sweep
Closed
#915 [tradein][scrapers] Завершить browser-миграцию avito: пайплайн SERP+detail+houses+IMV (#883)
Closed
#736 [P1][tradein][qa] Pre-demo consolidated acceptance: milestone-6 estimator/data-quality фиксы вместе на проде
Closed
#888 [tradein][backend][devops] Scheduled poll Росреестра на новый квартал → авто-ingest ДКП (deferred из #727)
Closed
#905 [tradein][scrapers][devops] Phase 0.5 — вынести camoufox в отдельный tradein-browser сервис (server/connect) (#883)
Closed
#930 feat(tradein): checkpoint/resume для *-full-load скраперов — переживать рестарт/деплой
Closed
#1347 (medium) BrowserSession Semaphore = 8 вместо задокументированных 3 — ~3x риск WAF-блокировки на DOM.РФ sweep
Closed
#1773 [tradein] Адреса убивают same-building anchor: cian-новостройка без номера дома, avito «29р-н» слип, дубль-листинги
Closed
#38 Demand D6: Класс жилья normalization через yandex_realty (fallback obj_class)
Closed
#854 [tradein][backend][db] IMV bulk backfill → in-app scheduler task (наполнение house_imv_evaluations)
Closed
#1811 [tradein][scrapers] Post-merge polish PR #1809 (avito SERP browser) — косметические минор'ы из ревью
Closed
#60 B2-1: Sales Tracker v1 — шахматки 3-5 застройщиков ЕКБ
Closed
#933 [tradein][scrapers] Верифицировать Yandex totalItems extraction после 1-го prod-прогона full-load (#931 follow-up)
Closed
#941 [tradein][devops] Persistent volume-mount для yandex_cookies.json — переживёт git-reset deploy (#940 follow-up)
Closed
#1187 [tradein] B: Полная загрузка всех сегментов — secondary_only=False (cian/yandex), верификация avito
Closed
#1190 [tradein] E (backlog): N1 — режим первички (отдельный URL-паттерн)
Closed
#884 [tradein][scrapers] Phase 0 — BrowserFetcher (camoufox) abstraction + Docker (#883)
Closed
#885 [tradein][scrapers] Phase 1 — avito на camoufox BrowserFetcher (#883)
Closed
#1774 [tradein] Эстиматор: same-building anchor хрупок (один house_id, exclude avito) — резолвить через фрагменты/кадастр + same-house avito
Closed
#1795 tradein/estimator: завышение оценки в бизнес/премиум — кламп к коридору сделок + робастный anchor
Closed
#1843 [site-finder][ПТИЦА][data] Оживить КСИТ/высоту/зону в /analyze — crosswalk reg_numb_border → zone_index (+ латентный null zone_code)
Closed
#1790 [tradein][scrapers] Avito прокси-ротация выключена на проде (AVITO_PROXY_MAX_ROTATIONS=0) → avito_full_load банится мгновенно
Closed
#1881 [epic] Настоящая финмодель проекта (DCF/NPV/IRR/PBP) — объединить геометрию ПТИЦА + полноту девелоперской БДДС
Closed
#1850 [site-finder][perf] Оптимизировать zone-regulation резолв в /analyze (мемоизация zone_index_at, двойной резолв, timeout)
Closed
#1796 tradein: Avito-баны режут покрытие аналогов и кросс-валидацию оценки
Closed
#1820 [tradein][scrapers] avito pipeline: новостройки house-страница (housePage widget missing) + AvitoBlockedError крашит весь прогон
Closed
#1785 Кадастр: bulk NSPD grid-walk структурно теряет дома (покрытие МКД ~25-30%) — нужен анализ + денсер-сетка
Closed
#1816 tradein: HTTP POST /estimate отдаёт инвариантный центрально-схлопнутый результат и не персистит (estimate_quality напрямую — корректен)
Closed
#1814 [tradein][scrapers] avito_detail_backfill: browser-fetch падает → curl-fallback → анти-бот 429 (+ снапшот тащит legacy не-ЕКБ листинги)
Closed
#1812 [tradein][scrapers] tradein-browser: снизить per-page fan-out — within-provider rate-cap прокси (~12% fetch-fail при бэкфиле)
Closed
#1805 [tradein][scrapers] #883 Phase 2: avito.py SERP — дефолт на BrowserFetcher (camoufox)
Closed
#1806 [tradein][scrapers] #883 Phase 2: cian.py SERP — миграция на BrowserFetcher (camoufox)
Closed
#1803 [tradein][frontend] Мера estimate — React hydration error #418 (SSR≠client mismatch)
Closed
#1804 [tradein][frontend] Мера estimate — секция «Фото квартиры» 422 на preview-UUID (0/12 фото)
Closed
#1801 [tradein][scrapers] Cian прокси деградировали — CIAN_PROXY_URL (socks5) таймаут + BROWSER_PROXY_CIAN 503 → detail-покрытие cian ≤3%
Closed
#1791 [tradein][scrapers] Cian detail-обогащение: kitchen 3% / ceiling 0% / описание 3% не долетают; отзывы ЖК не садятся
Closed
#1792 [tradein][scrapers] Yandex покрытие полей: area 63%, ceiling 0, описание 50%, kitchen 0; отзывы/рейтинг ЖК не садятся
Closed
#1789 [tradein][scrapers] Avito ЖК-enrichment не долетает в БД — отзывы/тип/история по дому пусты (house_reviews=0, avito_validated_at=0)
Closed
#1793 [tradein][scrapers] tradein-browser: per-provider concurrency — параллель между поставщиками, ≤1 коннект на поставщика
Closed
#1709 CI-шторм 2026-06-17 ~18:30 UTC — очередь раннеров забита, tradein-деплой #1699 застрял на ~17+ мин
Closed
#1745 (site-finder) [feature] прогноз продаж по ВСЕМ типам квартир (студии/1-5к) для игры ассортиментом
Closed
#1744 (site-finder) прогноз и горизонты неясны: переключатель без подсказки + голые числа без единиц
Closed
#1743 (site-finder) отчёт «Остатки и скорость» непонятен (3 разнородных понятия, англицизм Velocity-score)
Closed
#1742 (site-finder) объяснимость: «затоваренность» = 2 разных смысла; не ясно почему класс рекомендации
Closed
#1741 (site-finder) порядок блоков analyze: характеристики участка и стройки вперемешку
Closed
#1740 (site-finder) противоречие: gate «МКД нельзя», но рекомендация советует квартирографию
Closed
#1739 (site-finder) PDF analyze не скачивается — 500 (snapshot_pdf глотает причину) + forecast/export?format=pdf→422
Closed
#1738 (site-finder) future-supply/pipeline считает СУБЪЕКТ анализа как будущего конкурента (self-count) + уже строящиеся как «будущее»
Closed
#1737 (site-finder) confidence: сырой ярлык «Компонент · вкладывающий сервис: high» — теряется имя сервиса
Closed
#1736 (site-finder) точки подключения ресурсов не отображаются на карте analyze (рендеринг-баг)
Closed
#902 [tradein][backend] СберИндекс pull: hedonic + asking слаги 404 на /api/sowa — тянется только real_estate_deals
Closed
#814 [tradein][backend][ops] Включить avito_city_sweep schedule + verify полного проксированного свипа
Closed
#108 РИАСУРТ Свердл: 14 ключевых layerIds для агломерации ЕКБ (multi-city scaling)
Closed
#1539 (low) conflict_resolution.py/_resolve: строковые правила игнорируют приоритет источников (порядок dict)
Closed
#61 B2-2: Velocity MV для Site Finder + Generative (на данных B2-1)
Closed
#307 feat(objective): активировать data goldmine — 303k lots, 81% цен, mapping backfill (P0)
Closed
#850 [P1][tradein][backend][вторичка] #774-3 Estimator Tier A → house_id/cadastre-join вместо regex-address (CLIENT-VISIBLE, backtest-gated)
Closed
#774 [needs-human][P2][tradein][backend] Matching-subsystem мёртв для оценки — estimator на regex-address, не house_id/cad-join (архитектура)
Closed
#1188 [tradein] C: API-параметр segment=vtorichka|novostroyki|all в выдаче listings
Closed
#920 [tradein][estimator] Backtest gate для СберИндекс time-adjust перед активацией (#794 follow-up)
Closed
#1509 (low) 10_score_v2.py/main: sat_factor вычисляется и пишется, но не применяется к скорости (мёртвая логика vs комментарий)
Closed
#1617 gate_verdict: warning NO_ENGINEERING_NEARBY при ОТСУТСТВИИ инж.сетей форсирует «С ограничениями» вместо «Можно» — чистый вердикт недостижим для жилого учас…
Closed
#1593 demand_only overlay: deficit_index ранжирует форматы по rate-крутизне (§9.5 segment_steepness), а не по силе спроса — §9.2/§9.4-компоненты сокращаются
Closed
#1383 [low] leads/stats: revenue/deals считаются за всё время под контрактом «за последние N месяцев»
Closed
#1513 (low) 08_enrich_economics.py/main: real_n_lots/sold_pct/price считаются по всем лотам, но отчёт подписывает их как период (12 мес/90 дней)
Closed
#1520 (low) estimator.py/_fetch_dkp_corridor: low/high_ppm2 = чистые min/max выборки, а не P10/P90 — advisory-текст по одиночному выбросу
Closed
#1398 (low) De-partиализация 5 listings-индексов в 097 на ложной посылке «is_active = 100% true», которую 104 подтверждает устаревшей
Closed
#1503 (low) server.py/smart_suggestions: нет фильтра 'score выше точки', обещанного в докстринге
Closed
#1511 (low) 06_match_economics.py/main: median_price_m2 считается по равновзвешенным строкам room×month, а не по объёму сделок
Closed
#1512 (low) 06_match_economics.py/main: months_to_sellout смешивает сток разных месяцев окна со sold за всё окно
Closed
#1637 [Fable 5][P3] §15 confidence: нота deal_count теряет окно «за N мес» — расходится с контракт-примером модуля
Closed
#1609 domrf_catalog status: классификация по первому ключевому слову во всём HTML + 'продано'≠'продана' → sold помечается free
Closed
#1393 (low) Cian _walk_price_range: force-paginate ветка молча теряет хвост ценового бакета (задокументированная потеря в hot path)
Closed
#1650 v_supply_layers_latest (м.125) схлопывает все L3 dev_group'ы района в 1 строку — DISTINCT ON без dev_group_name заново вносит #970 на read-слое future_supply
Closed
#1606 EMISS-парсер: годовой агрегат (PERIOD='год') и I квартал коллидируют по obs_date=date(year,1,1) — последний Series молча затирает первый
Closed
#1633 [Fable 5][P4] §25.3 _geo_weight: подтверждённо-далёкий проект (>6.9 км) получает вес ниже floor для проекта без координат — инверсия против комментария
Closed
#1638 normalize.py: 0-заполненная сетка SalesSeries.units сводит guard _count_full_years к диапазону дат, а не к числу реальных наблюдений (латентно, до подключения #979)
Closed
#1640 INN-regex затирает легитимные слитные 10/12-значные числа (крупные суммы в рублях) в text/строковых fields перед отправкой в LLM
Closed
#1353 [medium] is_residential_zone: prefix-проверка мертва для NSPD zone_code, детект жилой зоны держится на хрупкой подстроке 'жил' без negative-list
Closed
#1357 [medium] _score_label игнорирует порог 'хорошо'=25 — участки со score 15..25 помечены 'хорошо' вместо 'средне'
Closed
#1486 (high) site-finder-api.ts/useParcelPoiScoreQuery: poi_weighted_score из weight в неверной шкале — клиент видит абсурдный «~10/100»
Closed
#1352 (medium) refresh_ekb_districts_median: ST_Intersects двойного-счёта сделок на пограничных кварталах искажает медиану/среднюю цену района
Closed
#1344 (high) cad_territorial_zones.geom объявлена GEOGRAPHY(POLYGON) — MultiPolygon ПЗЗ-зоны молча отбрасываются при harvest
Closed
#1508 (medium) 09_macro_and_trend.py/main: trend_ratio=2.0 при v_prior==0 даёт максимальный буст районам без истории продаж
Closed
#1355 [medium] supply_layers: один domrf-объект может учитываться И в Layer2 (hidden) И в Layer3 (future) — двойной счёт предложения на горизонтах 18/24 мес
Closed
#1530 (medium) trade_in_pdf._build_cover: «Срок действия данных» захардкожен today+30д, игнорирует estimate.expires_at (=now+24ч)
Closed
#1406 (high) QuartirographyChart.tsx/portfolioMap: портфель по числу комнат наложен на ось площади (м²) — сравнение в разных единицах
Closed
#1407 (high) page.tsx / KpiCard «Sold % (квартиры)»: вердикт «выше/ниже среднего рынка» считается по собственному sold% объекта без рыночных данных
Closed
#775 [P2][tradein][backend][scrapers] Парсить из embedded-state JSON: Yandex 82% NULL area + Cian buildingCadastralNumber не персистится
Closed
#1575 cian offer_price_history frozen since 2026-05-24 — server backfill is a silent no-op; needs local Playwright runner
Closed
#1405 (high) QuartirographyChart.tsx/portfolioMap: бар «Студии» в портфеле всегда 0 — график противоречит вердикту «52% — студии и однушки»
Closed
#1668 (site-finder) analyze inline confidence — stub, не дотянут до §15 confidence_engine (форсайт)
Closed
#1667 (site-finder) analyze: metro_block — заглушка nearest_top3=None (скрапер метро не подключён)
Closed
#1666 (site-finder) mv_layout_velocity не рефрешится по расписанию → best_layouts молча устаревают в проде
Closed
#1635 commercial: sell_through_pct (темп распродажи нежилого) мислейблится как «доля коммерции» (commercial_share_pct)
Closed
#299 feat(plans): vectorize DOM.РФ floor plans — Phase 1 Potrace spike (P0)
Closed
#801 [tradein][frontend][infra] Mock-render/MSW для прогона a11y+lighthouse (UI без бэкенда = белый экран)
Closed
#1642 make_thumbnail: пропуск по факту существования → устаревшая миниатюра после перекачки оригинала
Closed
#1590 Экспортёры report_*: подпись «Индекс дефицита (12 мес)» лжёт при отсутствии 12-мес прогноза — fallback берёт дефицит чужого горизонта
Closed
#1569 alembic/env.py регистрирует только Parcel — JobSetting и ~50 реальных таблиц невидимы для drift-detection, autogenerate сгенерировал бы фантомный CREATE TABLE parcels
Closed
#1656 [backend][celery] Beat-таски refresh_quarter_price_index_chain и etl_newbuilding_crossload не зарегистрированы на воркере (отсутствуют в include) — молча никогда не выполняются
Closed
#1655 nspd_geo: jobs, застрявшие в 'queued' (потерянное брокер-сообщение), никогда не ре-reap'ятся — cleanup_zombies и worker_ready матчат только 'running'/'paused'
Closed
#1654 scrape_cadastre: enqueue_cadastre_harvest freshness-skip не идемпотентен — на resume targets_total сжимается ниже targets_done → преждевременный 'done' + раздутый targets_skipped
Closed
#1653 ppt_tep OR-JOIN (doc_ref=source_key ИЛИ doc_full_name ILIKE) может вернуть один ППТ-документ несколько раз → дубли ТЭП в ИРД-блоке
Closed
#1652 Fallback REFRESH MV CONCURRENTLY: проверка подстроки 'cannot refresh materialized view' не матчит реальное сообщение PostgreSQL → recovery-ветка мёртвый код
Closed
#1651 zone_regulation._RE_FLOORS требует литерал 'этаж' после числа → документированная форма 'предельное количество этажей – N' (голое число) не извлекаетс…
Closed
#1649 extract_obj_checks фабрикует passed=False для отсутствующих в payload проверок → UNKNOWN трактуется как FAILED (латентно, endpoint отключён)
Closed
#1648 fetch_via_rosreestr2coord глотает все исключения → None: WAF-блоки не детектируются, цель помечается 'done' с 0 features, run-статус лжёт
Closed
#1646 [ekburg_permits] parse_xlsx не закрывает read_only workbook (wb.close()) — утечка дескриптора/буфера
Closed
#1647 stealth: BrowserSession.download_binary обходит семафор concurrency (в отличие от get_json)
Closed
#1645 [domrf_catalog] price_rub regex ловит цену за м² раньше полной цены → price_rub=NULL при наличии цены на странице
Closed
#1644 _norm_flat: деривация price_per_m2 падает с TypeError при строковом totalArea — необработанное исключение роняет весь run
Closed
#1643 Сбой загрузки квартир глотается молча — провал /portal/table не пишется в kn_scrape_failures, run рапортует ложную полноту
Closed
#1641 Форматированный 10-значный мобильный без кода страны (922 123 45 67 / 922-123-45-67) проходит redaction нетронутым
Closed
#1639 affordability.py:339-342: payment_at_scenario считает аннуитет по rate_path[h] без спреда, хотя rate_path в стеке = key_rate ЦБ → занижен и на иной базе, чем monthly_payment_rub (латент…
Closed
#1636 §9.6 Almon-адаптер хардкодит confounded=False → §15 шок-фактор (#1222) частично мёртв в production
Closed
#1634 market_now.summary: district-wide счёт ЖК-выборки (obj_count) выдаётся за «N ЖК-конкурентов рядом»
Closed
#1632 report_md._md_kv_lines: многострочное значение (напр. product_tz.summary «Резюме») ломает Markdown-буллет — нет свёртки переводов строк
Closed
#1631 trade_in_pdf._analog_rows: floor==0 (или total_floors==0) у аналога рендерится как «—» из-за truthiness вместо is not None
Closed
#1630 intents.py: _render_why_forecast объявляет future_market источником provenance даже когда из него не выведено ни строки
Closed
#1629 grid_geometry.py:59-61 — sanity-check сравнивает искажённые единицы EPSG:3857 с порогами, заданными как наземные метры → валидные крупные/вытянутые квартал…
Closed
#1628 date_cr минует _parse_nspd_date → CAST(:date_cr AS date) роняет upsert_quarter_stats и весь harvest_quarter квартала (нет savepoint)
Closed
#1627 wms_feature_info (nspd_bulk_client.py:418-420): отсутствует isinstance(data, dict)-guard — non-dict JSON-ответ роняет ячейку grid-walk через AttributeError, потеря без сигнала
Closed
#1626 search_by_quarter (nspd_bulk_client.py:305-316): подстрочная классификация 404/400 по тексту исключения с подмешанным body_preview проглатывает 5xx и валидный 400 как «кв…
Closed
#1625 Parcel.geometry объявлена как POLYGON — реинтродукция класса крашей на многоконтурных (MultiPolygon) участках, который чинила миграция 93 (латентно: модел…
Closed
#1624 [opportunity_harvest] n_features инкрементится до per-quarter commit — отчёт завышает число persisted фич при сбое commit
Closed
#1623 [objective_etl] import_anton_objective: FileNotFoundError возвращает dict без raise — Celery-таск SUCCESS при проваленном ETL
Closed
#1622 [scrape_kn_catalog_objects] force=True «Загрузить все» молча ограничивается LIMIT 300 — каталог недогружается
Closed
#1621 process_nspd_geo_job (nspd_geo.py:374-408, 82-97) не имеет атомарного claim → дублирующие task-сообщения для одного job_id могут идти параллельно (двойные WAF-хиты + зат…
Closed
#1620 worker_ready (lifecycle.py:160-171) немедленно ре-enqueue'ит WAF-paused nspd_geo jobs, обходя 30-минутный WAF-cooldown из cleanup_zombies
Closed
#1619 ppt_tep JOIN: slug-fallback ILIKE перевёрнут (doc_ref ILIKE '%doc_full_name%') — никогда не матчит + LIKE-метасимволы не экранированы
Closed
#1618 granddoc is_active: регистрозависимое сравнение == "Действующий" расходится с документированным lowercase doc_status_name → флаг и сортировка ломаются
Closed
#1616 premises_lookup: KNN ближайшего здания ранжирует в ГРАДУСАХ (LIMIT 1) — на широте ЕКБ выбирает не ближайшее по метрам, parking_ratio чужого дома / потеря вали…
Closed
#1615 competitors.py:491-502 — ценовой fallback покрывает только objective_complex_mapping, игнорируя nearest_cx gap-fill: конкурент с velocity>0 из спатиального матча получает avg_price=None
Closed
#1614 nspd_lite.fetch_geoportal / nspd_client._http_get_json: json.loads на HTTP 200 не обёрнут → WAF-челлендж со статусом 200 даёт JSONDecodeError мимо autoretry harvest_quarter
Closed
#1613 obj_checks.extract_obj_checks: bool() на строковом флаге → 'false'/'0'/'нет' трактуется как пройдено
Closed
#1612 obj_checks.extract_obj_checks: or-коалесинг passed-значения (list-ветка) теряет boolean False → проваленная проверка пишется как пройденная
Closed
#1611 nspd_denorm.denorm_dump: штатный пропуск feature без cad_num считается ошибкой → завышенный error-счётчик в метрике прогона
Closed
#1610 domrf_catalog scrape_one_flat: success=True даже при updated=False / 0 извлечённых полей — ложь в статистике батча
Closed
#1608 domrf_catalog _TextCollector: void-теги (<br>/<img>/<input>) рассинхронизируют стек/буфер — текст блоков теряется
Closed
#1607 ekburg_permits: _COORD_FIRST_RE требует дробную часть — целочисленные координаты МСК-66 теряют геопривязку молча
Closed
#1605 Phase A не пагинирует и молча теряет хвост объектов при limit=999999, run всё равно 'done'
Closed
#1603 make_thumbnail: неатомарная запись WebP (thumbs.py:53) — усечённый thumb навсегда кэшируется и отдаётся как валидный
Closed
#1604 Lazy-загрузка фото: при провале make_thumbnail оригинал записан на диск, но local_path не сохранён в БД (photos.py:113-125) — вечный re-fetch + осиротевший файл
Closed
#1602 LLMResult.from_provider теряет finish_reason — content_filter/length-обрезка возвращаются как ok=True
Closed
#1601 _parse_openai_response: int() на нечисловых usage-токенах бросает ValueError/TypeError мимо fallback-гарантии complete
Closed
#1600 Подписи секций в DXF привязаны по левому-нижнему углу к центроиду, а не отцентрованы на нём
Closed
#1599 DXF-экспорт теряет внутренние кольца (отверстия) участка/пятна застройки — вырезы зарисовываются сплошняком
Closed
#1597 place_strategy не отбраковывает стратегию с нулевым размещением: пустой концепт (revenue=0, margin=-land, IRR=-33%) выдаётся как валидный вариант
Closed
#1598 ConceptInput.land_cost_rub без ge=0: отрицательная стоимость земли молча завышает маржу и IRR-proxy
Closed
#1596 [Fable 5][P3] §15 confidence_engine: advisory-cap сообщение дублируется в rationale при all-high (самый частый advisory-случай)
Closed
#1595 _score_future_competition: count = len(всех конкурентов), а mean_weight — только по не-None весам → возможное завышение плотности при частичных данных
Closed
#1594 demand_only: rate_future=0.0 placeholder при отсутствии будущей ставки даёт максимальный аплифт §9.4 (clamp 1.2), а не нейтраль — комментарий ложный
Closed
#1592 [Fable 5][P2] §25 compute_special_indices: итоговый confidence считается по ВСЕМ 6 индексам (включая unavailable→'low'), а не «MIN по доступным» — карточка систематически …
Closed
#1591 Snapshot-PDF: блок «Конкуренты (топ 5)» отбирает крупнейшие ЖК по flat_count, а не ближайшие — расходится с комментарием кода
Closed
#1589 trade_in_pdf.py:256 — бейдж достоверности печатает n_analogs=объявления+сделки, завышая «N аналогов» и противореча заголовку стр.2
Closed
#1588 objective_distinct не фильтрует group_name, но objective_group хардкодится 'Екатеринбург' — латентный кросс-город mislabel при расширении датасета (#307)
Closed
#1587 dry_run objective-backfill возвращает auto_accepted=0 вместо числа потенциальных auto-accept — preview вводит в заблуждение
Closed
#1586 intents.py: при наличии headline подавляется честная пометка о пустом разделе product_tz (what_to_build)
Closed
#1585 intents.py: _fmt_number отдаёт английские 'nan'/'inf' в RU-прозу детерминированного chat-ответа при NaN/Inf-числах
Closed
#1584 Grid-walk discovered-счётчик завышается на skipped/чужекатегорийные features и misattribution parcels/buildings
Closed
#1583 Phase 2.5 ПЗЗ собирается ДО auto-heal геометрии квартала — broken-geom кварталы молча остаются без территориальных зон при первом harvest
Closed
#1582 ddu_price_indicator: missing MV даёт ProgrammingError, а ловится только OperationalError — диагностический except мёртв для своего же кейса
Closed
#1581 velocity_alerts: prior_n использует COUNT(*) вместо COUNT(realised) — NULL-строки засчитываются в гейт значимости z-score
Closed
#1580 _jsonb_param: json.dumps без allow_nan=False — NaN/Infinity ломают jsonb-INSERT, ран теряется молча
Closed
#1579 objective_etl.get_sqlite_info: утечка SQLite-соединения/fd на error-path (close() не в finally)
Closed
#1578 weather_cache._fetch_seasonal_remote: ZeroDivisionError/ValueError при пустых t_min/precip и непустом t_max (раздельные None-guard'ы)
Closed
#1577 weather_cache._fetch_weather_remote: агрегаты min/max/sum по daily-массивам падают на None-днях -> весь 7-day forecast молча теряется
Closed
#1576 recommend_mix: weighted_avg_price_per_m2 не пересчитывается после success-boost share_pct → средневзвешенная цена рассогласована с долями бакетов (пробел в фиксе #1359)
Closed
#1574 Голый int(cat_id)/int(total) в парсинге meta search_by_quarter падает на нечисловом NSPD-ответе и валит Phase 1 квартала
Closed
#1573 get_features_in_bbox_grid молча глотает WAF-403 и server-error для ПЗЗ-grid-walk → ложный tz_count=0, без layer_failed
Closed
#1572 ChatAskRequest.history: max_length=20 даёт hard-422 на длинном диалоге вместо задокументированного усечения (контракт-vs-поведение)
Closed
#1571 JobSetting.updated_at — NOT NULL без Python/server default: ORM-вставка строки даст IntegrityError (латентная ловушка)
Closed
#1570 ORM-модель Parcel мапится на несуществующую таблицу 'parcels' с устаревшими колонками — мёртвый и вводящий в заблуждение код
Closed
#1567 Sentry/GlitchTip scrub-хук навешен только на transaction-события (before_send_transaction), error-события не редактятся — apiKey из URL/spans/breadcrumbs утекает в трекер
Closed
#1566 DDU-индикатор: нет валидации формата/порядка periodFrom/periodTo — мусорный или инвертированный period тихо отдаёт пустой/усечённый ряд
Closed
#1565 DDU-индикатор: area_ranges целиком вне диапазона 1..6 молча возвращает ВСЕ площади вместо пустого/422
Closed
#1564 estimate_pdf (trade_in.py:347): TTL-проверка через .replace(tzinfo=UTC) перепривязывает, а не конвертирует timestamptz — при не-UTC session TZ просроченные оценки отдаются ка…
Closed
#1563 Отрицательный query-param limit на 7 GET-эндпоинтах admin_scrape → 'LIMIT -N' → необработанный 500 вместо 422
Closed
#1562 bulk_enqueue_geo (/geo/bulk): невалидный thematic_id в середине списка → 400 при уже запущенных geo-jobs (partial execution, нет atomicity/idempotency)
Closed
#1561 persist_analysis_run коммитит result ДО дописывания forecast/ird/developer_attribution — сохранённый ран расходится с live-ответом
Closed
#1560 Три async-хендлера competitors / best-layouts / best-layouts-pdf блокируют event loop sync DB-IO (и WeasyPrint write_pdf)
Closed
#1553 Yandex detail-enrichment не реализован: нет save + detail не fetch'ится в свипе (area_m2 23%, repair 1%)
Closed
#1551 Avito detail-enrichment backfill для legacy listings (detail_enriched_at IS NULL) — прокси уже есть
Closed
#1538 (low) houses.py/_upsert_house_source: ON CONFLICT не обновляет matched_method/matched_at — провенанс врёт
Closed
#1537 (medium) houses.py/match_or_create_house Tier 0: cadastr_exact не регистрирует alias -> риск дубля при бескадастровом скрейпе
Closed
#1536 (low) conflict_resolution.py/_resolve cross_validate: молча возвращает медиану, не сигнализирует расхождение цен
Closed
#1535 (medium) normalize.py/normalize_address: инициалы 'К.'/'Д.' в названии улицы раскрываются в 'корпус'/'дом'
Closed
#1534 (high) normalize.py/normalize_address: асимметричное раскрытие ' д '->' дом ' даёт разные ключи для одного дома
Closed
#1533 (low) trade_in_pdf._examples_rows: days_on_market==0 рендерится как «—» из-за or вместо is not None
Closed
#1532 (low) trade_in_pdf._build_deals_page: house_label не содержит monolith_brick/other — рассинхрон «Тип дома» между стр.2 и стр.3
Closed
#1531 (low) trade_in_pdf._build_listings_page: строка «(с учётом ремонта)» дублирует тот же n_total, фильтрации по ремонту нет
Closed
#1529 (low) dadata._classify_kind: fias_level 65 (planning) и 75 (plot) ошибочно попадают в kind='house'
Closed
#1528 (low) cian_price_history.backfill: saved считает len(price_changes), а не реально вставленные строки
Closed
#1527 (medium) admin.test_cian_auth: 403-бан Cian отдаётся как authenticated=True (VERIFY_BAN_SENTINEL не различается)
Closed
#1526 (medium) image_sanitizer.sanitize_image: EXIF orientation срезается без поворота пикселей → фото клиента лежат на боку
Closed
#1525 (low) scheduler.py/import_rosreestr_dkp: substring(floor FROM '[0-9]+') теряет минус — этаж '-1' импортируется как 1
Closed
#1524 (medium) house_imv_backfill.py/_process_one_house: IMV вернул price=0 → дом помечается imv_status='ok' и больше не переоценивается
Closed
#1523 (low) house_imv_backfill.py/pick_lot_params: нет инварианта floor<=floor_at_home → при total_floors=NULL везде floor_at_home падает на 9
Closed
#1522 (medium) scheduler.py/trigger_cian_backfill_run: при протухших cookies next_run_at не сдвигается → verify_session бьёт по Cian каждые 60с
Closed
#1521 (medium) scrape_pipeline.run_avito_city_sweep: IMV-фаза отравляет сессию → update_heartbeat без rollback переводит успешный sweep в 'failed'
Closed
#1519 (low) estimator.py/estimate_quality: freshness/last_scraped_at/days_on_market считаются по listings_clean, а не по показанным anchor_comps_used
Closed
#1518 (medium) estimator.py/estimate_quality SB-anchor: границы диапазона из RAW comp_ppm2 без repair_coef рассинхронизированы с центром
Closed
#1517 (low) search.py/_validate_geo_pair: cross-field min>max через truthiness — граничный 0 обходит проверку
Closed
#1516 (low) schemas/search.py _validate_geo_pair: нет проверки инвертированных вилок floor/year_built/floors_total (min>max)
Closed
#1515 (medium) search.py/search(): cache_hit всегда false даже при отдаче из кэша — поле врёт
Closed
#1514 (high) search.py/search_query.py: кадастровый номер всегда NULL в выдаче поиска — рассинхрон имён cadastral_number vs kadastr_num
Closed
#1510 (medium) 12_more_pois.py/main: bbox padding ±0.005° меньше радиуса привязки 2 км — POI у границ теряются
Closed
#1507 (medium) 04_report.py/build_html: селектор .r.r красит все числовые ячейки в красный и перебивает зелёный
Closed
#1506 (medium) 04_report.py/build_html: заголовок «последние 90 дней» не соответствует реальным периодам real_* (12 мес / всё время)
Closed
#1505 (high) 04_report.py/build_html: HTML-подпись весов противоречит JSON weights_used в том же отчёте
Closed
#1504 (high) 04_report.py/main: JSON weights_used не соответствует реальным весам скоринга и не содержит economic
Closed
#1502 (low) server.py/price_distribution: квантиль int(p*n) завышает p25/p50/p75 на малых выборках
Closed
#1501 (low) server.py/district_time_machine: AVG(price) выдаётся под ключом median_price_kr
Closed
#1500 (medium) server.py/jk_full: import psycopg2 в проде (psycopg v3 only) → photos/sale_graph всегда пустые
Closed
#1499 (low) server.py/developer_track_record: двойной учёт лотов при N сайтах на один Objective-проект
Closed
#1498 (low) check-no-print.py/main: matcher только Edit|Write — print через MultiEdit не блокируется
Closed
#1497 (low) check-no-print.py/PRINT_RE: ловит закомментированный print, строковые литералы и method-call .print() — ложные блокировки
Closed
#1496 (low) check-no-print.py/normalize_path: rfind берёт последнее 'backend/' — ломает allow-prefix для вложенных backend-каталогов
Closed
#1495 (low) check-no-print.py/normalize_path: rfind('backend/') матчит подстроку, а не сегмент пути
Closed
#1494 (medium) cleanup_ghosts.py main: _all_docs limit=10000 без пагинации — при росте vault живые chunks ошибочно удаляются как orphan
Closed
#1493 (low) cleanup-worktrees-aggressive.py fetch_all_prs: жёсткий лимит 30 страниц (1500 PR) может пометить ветку с PR за пределом как stale и удалить worktree
Closed
#1492 (medium) migrate_kg_to_obsidian.py _moc_for_subdir/sort_key: хроносортировка MOC вырождается в обратно-алфавитную из-за None от extract_date
Closed
#1491 (high) migrate_kg_to_obsidian.py extract_date/_DATE_PATTERNS: ведущий \b перед месяцем срывает извлечение даты у entity с разделителем '_'
Closed
#1490 (low) weightProfiles.ts/useDeleteProfile: JSDoc 'Returns true if deleted' не соответствует поведению (хук возвращает undefined)
Closed
#1489 (low) weightProfiles.ts/useWeightProfiles: admin-токен лишний в queryKey React Query
Closed
#1488 (medium) download.ts/triggerDownload: синхронный revokeObjectURL в том же тике после a.click() — гонка, срывающая скачивание в Firefox/Safari
Closed
#1485 (low) useSiteAnalysis poll-loop: неизвестный FetchStatus молча поллится до 2-мин таймаута вместо явной ошибки
Closed
#1484 (low) useCustomPois/customPoisKey: session_id отсутствует в queryKey — кэш может переиспользоваться между сессиями
Closed
#1483 (low) Drawer.tsx/Drawer: восстановление фокуса на close может не сработать для размонтированного триггера
Closed
#1482 (low) Drawer.tsx/Drawer: prop width молча игнорируется для side='bottom'
Closed
#1481 (low) Drawer.tsx/Drawer: slide-out анимация при закрытии не проигрывается (ветка !open рендерит новый пустой узел)
Closed
#1479 (medium) AnalogsTable.tsx сортировка по 'Дней': days_on_market=null трактуется как 0, пустые всплывают как самые свежие
Closed
#1478 (medium) EstimateResult.tsx hero-бейдж: 'N аналогов' = listings+deals, не совпадает с таблицей аналогов
Closed
#1477 (low) site-finder: визит пишется только из map-попапа — переход из ParcelDrawer/CadInput/RecentParcels не попадает в «Недавние»
Closed
#1476 (medium) site-finder/useRecentParcels: «Недавние» не обновляются до 60с после визита (нет инвалидации кэша)
Closed
#1475 (high) site-finder-api/applyFilters: фильтры «Район» и «ВРИ» в prod дают пустую карту (клиентская фильтрация по плейсхолдерам)
Closed
#1474 (high) EntryMap/ParcelDrawer: deselect-overlay z399 перекрывает карточку участка (z20) — drawer некликабелен
Closed
#1473 (low) CompareTable.tsx строка velocity: velocity_score рендерится как «N / 100», канонический VelocityBlock — как «N%» → рассинхрон единицы метрики
Closed
#1472 (medium) compare/page.tsx handleResult: дедуп по подмножеству полей теряет обновления district/цены/scoreLabel/errorMsg → стейл-данные в таблице сравнения
Closed
#1470 (medium) PoiList2Gis/site-finder-api: «{totalScore}/100» может превышать 100 и в fallback показывает не POI-метрику
Closed
#1471 (low) EgrnPropertyTable/formatDate: невалидная дата ЕГРН рендерится как «Invalid Date» — мёртвый try/catch
Closed
#1469 (medium) ScenariosBlock/ScenarioCard: индекс дефицита берётся с самого длинного горизонта, но подписывается целевым — рассинхрон числа и подписи
Closed
#1468 (low) AnalysisSidebar.tsx — мёртвый компонент с неверными подписями секций (4. Инфраструктура / 5. Свежесть) и без section-6
Closed
#1467 (low) Section1ParcelInfo headlineSubtitle: захардкоженный «Score +12 vs район» в fallback-подзаголовке
Closed
#1466 (medium) Section1ParcelInfo POI-fallback: инвест-балл участка показывается как POI-score «X / 100» с фейковыми weight/score_contribution
Closed
#1465 (low) Section2NetworksUtilities.buildSubtitle: расстояния в подзаголовке без ru-группировки ('1234 м' vs '1 234 м' в таблице)
Closed
#1464 (high) Section2NetworksUtilities.buildSubtitle: газ/водопровод теряются в подзаголовке (неверные subtype-ключи)
Closed
#1463 (high) Section2NetworksUtilities.getUtilityConfig: реальные subtype сетей не маппятся → сырые англ. ключи в таблице
Closed
#1462 (medium) NspdEngineeringNearbyBlock.tsx: дедуп label+round(distance) пропускает дубли — расстояния меряются до разных опорных точек
Closed
#1461 (medium) NspdEngineeringNearbyBlock.tsx: смешение радиусов 200 м (analyze) и 500 м (connection-points) под подписью «200 м»
Closed
#1460 (medium) MarketTrendBlock.tsx/LABEL_COLORS: бейдж тренда всегда серый — ключи карты не совпадают с label из бэкенда
Closed
#1459 (low) CpLayerControlPanel.tsx/CpLayerControlPanel: «Показать все» рассинхронизируется при наличии пустых категорий
Closed
#1458 (medium) VelocityBlock.tsx/VelocityBlock: «Топ продавцов» показывает «Продано 0 м²» при отсутствии данных velocity
Closed
#1457 (medium) MarketTab.tsx/MarketTab: подпись «строящихся» не соответствует activeCount (включает сданные ≤1 года)
Closed
#1456 (high) VelocityBlock.tsx/VelocityBlock: рассинхрон bucket-ключей — 4-комн. и 5+ сделки молча выпадают из «По комнатности» и «Топ продавцов»
Closed
#1455 (high) ZouitLayer.tsx/ZouitLayer: хеш-сегмент React-key константен для Polygon — старая геометрия ЗОУИТ остаётся на карте
Closed
#1454 (low) ScoreBreakdownStackedBar.tsx / легенда показывает категории с contribution===0, отсутствующие в обеих полосах
Closed
#1453 (medium) Pipeline24moBlock.tsx / fmtMonth: new Date(ISO-date) даёт UTC-полночь — месяц «Сдача» уезжает на предыдущий в отрицательных TZ
Closed
#1452 (low) WeightProfilePanel.tsx / handleSliderChange: дебаунс-таймер дублирует немедленный setDraft и не чистится при unmount
Closed
#1451 (medium) ScoreBreakdownStackedBar.tsx / source-view barWidth: знаменатель = макс. знаковый вклад, а не макс. модуль — шкала ломается при отрицательном лидере
Closed
#1450 (low) EnvironmentTab/WeatherBlock: футер жёстко пишет «7 дн.» при динамическом forecast_days
Closed
#1449 (medium) BestLayoutsBlock/TopLayoutsTable: тултип >100% жёстко пишет «за 24 мес» вместо выбранного time_window
Closed
#1448 (medium) BestLayoutsBlock/handleDownloadPdf: PDF собирается из живого состояния контролов, а не из показанного расчёта
Closed
#1447 (low) PilotRequestModal/deriveTrackingId: показанный лиду «Номер заявки GD-XXXXXXXX» не хранится в БД и не находится поддержкой
Closed
#1446 (low) ConceptDrawMap: нарисованный полигон отрисовывается дважды (FeatureGroup-слой + внешний GeoJSON по prop)
Closed
#1445 (low) ConceptVariantsResult: IRR-proxy движка подаётся в UI как полноценная «Внутренняя норма доходности»
Closed
#1444 (low) ConceptVariantsResult/VariantPanel: нулевая валовая прибыль подписывается как «Положительная маржа»
Closed
#1442 (low) ConceptResultMap/FitBounds: нестабильная зависимость bounds перезапускает fitBounds на каждом ре-рендере, сбрасывая ручной zoom/pan
Closed
#1443 (low) ConceptExportButtons: error/serverLoading не сбрасываются при смене variant — стейл-сообщение/disabled под чужой вкладкой
Closed
#1441 (medium) ConceptVariantsResult/VariantPanel: FAR (безразмерный) подписан единицей «м²/га» — неверная единица и рассинхрон с PDF движка
Closed
#1440 (low) UserMenu.tsx/UserMenu: роль вне TS-union даёт пустой role-badge (нет рантайм-валидации /me)
Closed
#1439 (medium) RouteGuard.tsx/RouteGuard: analyst на запрещённом /admin/* молча редиректится в /trade-in/ вместо NoAccessScreen
Closed
#1438 (low) RecommendRevenueChart.tsx: при total=0 подписи «0.0 млн» показываются на всех нулевых сегментах
Closed
#1437 (low) PrinzipGapBar.tsx: единая безымянная value-ось X смешивает м² и % — несопоставимые длины баров между строками
Closed
#1435 (medium) QuartirographyChart.tsx/portfolioMap: бар «строится · Студии» всегда 0% — рассинхрон с подписью «52% портфеля — студии»
Closed
#1434 (low) ObjectInfraMap: счётчик «Найдено N POI» и чипы категорий считаются по уже отфильтрованным бэкендом данным
Closed
#1433 (low) DeveloperLeaderboard COLS: pct_three_plus/avg_area_sqm/sverdl_sqm_th со значением 0 рендерятся как «—» (falsy-zero)
Closed
#1432 (medium) RecommendVelocityPanel footnote: текст «темп = базовый × pf^elasticity» не совпадает с фактическим Темпом продаж
Closed
#1431 (medium) RecommendVelocityPanel vs RecommendLiquidityChart: KPI ликвидности на per-bucket эластичности, график «24 мес = liquidity» — на единой scope-эластичности
Closed
#1430 (low) JobSettingsPanel/handleSave: очистка max_concurrency/max_retries молча шлёт 0 → 422
Closed
#1429 (low) JobSettingsPanel/isPendingFor: одна общая updateMutation — спиннер/opacity рассинхронизируются при параллельных Save
Closed
#1428 (medium) BulkGeoPanel/handleSubmit: очистка поля Parallelism шлёт parallelism=0 → 422, запуск молча проваливается
Closed
#1427 (low) trade-in/page.tsx: freshResult навсегда перекрывает URL id — переход по другой shared-ссылке в той же сессии показывает устаревший результат
Closed
#1426 (medium) trade-in/page.tsx: протухшая/битая shared-ссылка молча показывает EmptyState «Введите параметры», ошибка GET /estimate/{id} не отображается
Closed
#1425 (medium) trade-in/page.tsx useEstimateId: чтение window.location.search вместо useSearchParams → SSR hydration mismatch и нереактивность к смене URL
Closed
#1424 (high) trade-in/page.tsx restoredEstimate: восстановленный по shared-ссылке отчёт показывает выдуманные параметры объекта (0 м², «Студия», «0 из 0», чужой адрес)
Closed
#1423 (low) compare/page.tsx handleResult: dedup-гард сравнивает не все отображаемые поля → возможен стейл медианной цены/района/подписей
Closed
#1422 (medium) CompareTable velocity-строка + winnersFor: velocity_score=0 ('нет данных') рендерится как факт и выигрывает зелёную подсветку 'лучшее'
Closed
#1421 (low) site-finder-api.ts by-bbox адаптер: parcel с area_m2 === null приземляется в area_ha=0 → «0.00 га» как факт и тихое попадание в площадные фильтры
Closed
#1420 (low) site-finder/page.tsx FilterBarBridge: matchCount и totalCount из двух независимых запросов → транзиентный рассинхрон (matchCount может временно > totalCount)
Closed
#1419 (medium) site-finder/page.tsx FilterBarBridge: счётчик показывает «0 / 0 участков» во время загрузки/смены bbox вместо состояния загрузки
Closed
#1418 (low) page.tsx/handleWeightsChange: смена весов во время первичного analyze (data ещё null) молча теряется
Closed
#1417 (low) page.tsx/noiseValue: число и цвет KPI шума считаются от разных значений (round vs raw)
Closed
#1416 (low) page.tsx/noiseColor: цвет KPI шума противоречит метке level на интервалах [45,50) и [60,65)
Closed
#1415 (low) page.tsx/trendColor: цвет KPI тренда рассинхронизирован с текстовой меткой backend (порог 5% vs 8%)
Closed
#1414 (high) page.tsx/districtLabel: KPI «X км от центра» показывает дистанцию до границы района, а не до центра ЕКБ
Closed
#1413 (low) data-sources/page.tsx · SOURCES «Объектив»: неверный домен атрибуции (objced.ru вместо objctv.ru)
Closed
#1412 (low) ConceptVariantsResult: IRR-proxy подписан как 'IRR / Внутренняя норма доходности' — переобещание метрики
Closed
#1411 (medium) concept/page.tsx: устаревший результат концепции против перерисованного полигона (стейл-стейт)
Closed
#1410 (high) ConceptVariantsResult: плотность (FAR) подписана как 'м²/га' — неверная единица и занижение в ~10000×
Closed
#1409 (low) prinzip/page.tsx KpiCard «Средний метраж»: двойной минус при avg≥49 и ложный «-0» при null
Closed
#1408 (medium) page.tsx / KpiCard «Нежилые» и «Машино-места»: hint гейтит на perc, но печатает realised → возможна строка «null продано»
Closed
#1404 (low) scrape/all/page.tsx isStale: UI-порог 5 мин расходится с backend-zombie 10 мин — ложный статус «stale» у живого kn-прогона
Closed
#1403 (low) scrape/all/page.tsx summary: плитки считают по top-30 и не покрывают статусы skipped/paused/queued — сумма плиток ≠ числу строк
Closed
#1402 (medium) scrape/all/page.tsx: смена filter не сбрасывает logsRunId — стейл-стейт показывает логи чужого прогона
Closed
#1401 (medium) scrape/all/page.tsx logs: при filter=all кнопка «логи» не задаёт scraper_type — смешивает логи разных скраперов по совпадающему run_id
Closed
#1400 (low) 55_schema_scrape_resume.sql: partial-index на heartbeat_at мёртв — reaper фильтрует по COALESCE(heartbeat_at, started_at)
Closed
#1399 (low) decode_to_file.py: f.write(decoded) падает TypeError, если JSON декодируется в list/dict
Closed
#1396 (low) _fmt_number падает на NaN/Inf-float (ValueError в детерминированном fallback-пути chat)
Closed
#1397 (low) Классификация таймаута LLM по имени класса вместо isinstance (хрупко)
Closed
#1395 (low) queue_status: broker-failure except-блоки без логирования (silent swallow в UI hot-path)
Closed
#1394 (low) POST /geo/bulk игнорирует rate_ms — все bulk-джобы создаются с дефолтом 600ms без контроля оператора
Closed
#1392 (low) own_portfolio: слабый regex-guard '^[0-9]+' позволяет non-numeric префиксу dev_id уронить весь current-portfolio запрос
Closed
#1391 (low) Fan-out по objective_complex_mapping завышает SUM-метрики в _INLINE_VELOCITY_SQL (best_layouts)
Closed
#1390 [low] izyatie_client: мёртвый fallback a_tag.get('title', href) недостижим (title уже непуст)
Closed
#1389 [low] TradeInEstimateInput допускает floor > total_floors (нет cross-field валидации)
Closed
#1388 [low] Cian has_furniture: реальное False теряется через or-коалесинг двух boolean-полей
Closed
#1387 [low] Avito relative-date parser возвращает None для бесцифровых форм ('час назад', 'неделю назад', 'день назад')
Closed
#1386 [low] Avito detail abort: транзиентная не-block ошибка сбрасывает consecutive_blocks, маскируя продолжающийся IP-блок
Closed
#1385 [low] Guard-2 same_quarter_ratio: знаменатель включает аналоги без кадастрового номера — занижение ratio, over-correction
Closed
#1384 [low] quartirography (deals): хардкод period_start_date >= '2025-07-01' — окно неограниченно растёт со временем
Closed
#1382 [low] velocity: знаменатель score использует число MAPPED конкурентов (включая с нулевыми продажами) — систематическое занижение velocity_score
Closed
#1381 (low) street-deals: period_from считается 30-дневными месяцами, а фильтр — календарными — отображаемое окно не совпадает с запросом
Closed
#1380 (low) Cadastre jobs: React-key на внутреннем <tr> вместо mapped Fragment — нестабильная reconciliation / key-warning
Closed
#1379 (low) SeasonalWeatherBlock: строка экстремумов мин/макс подписана как «макс» (только максимум)
Closed
#1378 (low) ForecastConfidenceBlock: coverage=1.0 (100%) рендерится как «1» вместо «100%» из-за строгого < 1
Closed
#1377 (low) Air quality берёт hourly[0] (00:00 forecast-дня), а не текущий час — docstring обещает «текущий час»
Closed
#1376 (low) scenarios.py: module-docstring численно противоречит реализации _horizon_widen_factor
Closed
#1375 (low) recommend_mix: comparables/competitors матчат obj_class = :cls точно, has_class_data проверяет лишь NOT NULL — молчаливо пустой результат при разном словаре (RU vs EN)
Closed
#1374 (low) trigger_kn_sweep: queued_at всегда null — берётся date_done (время завершения) только что поставленной задачи
Closed
#1373 (low) Несогласованный вывод quarter_cad для 3-сегментного кад. номера: REGEXP_REPLACE vs _quarter_cad
Closed
#1372 (low) _classify зависит от порядка вставки в OSM_CATEGORIES — вторая категория multi-tag элемента молча теряется
Closed
#1371 (low) get_connection_points игнорирует harvest_error/staleness — error-only дамп отдаётся как dump_available=true
Closed
#1370 (low) Глобальный per-cache Lock удерживается на время сетевого вызова Open-Meteo — сериализация всех analyze-запросов одного cache-типа
Closed
#1369 (medium) corp_sum: сбой парсера оставляет run помеченным 'done' (silent failure) — асимметрия с фиксом lots_pf #1220
Closed
#1368 (medium) Avito enrichment: пойманная ошибка оставляет общий Session в aborted-state → каскад на все оставшиеся строки
Closed
#1367 (medium) Не-idempotent миграции (110 ADD CONSTRAINT, 74 DROP TABLE→VIEW) при ложном заявлении об идемпотентности ломают DR-restore
Closed
#1366 (medium) trade_in_pdf: страница «Сделки» рисует выдуманные дни экспозиции (4–118) для rosreestr ДКП-сделок
Closed
#1365 (medium) 062 address cleaner: regex 'Площадь \\d' усекает легитимные адреса ЕКБ ('Площадь 1905 года')
Closed
#1364 (medium) asking→sold ratio: в asking-медиану попадают новостройки (нет listing_segment guard в seed-миграциях 080/098)
Closed
#1363 (medium) reap_zombies может пометить живой sweep 'zombie' → терминальные mark_done/mark_failed молча no-op, риск дубль-sweep
Closed
#1362 (medium) OwnPlannedProjectUpdate без price-range валидатора → PUT может сохранить инвертированную вилку (min > max)
Closed
#1361 (medium) pzz_loader: rosreestr_id может быть NULL → дубли строк, ON CONFLICT не срабатывает при повторном sync
Closed
#1360 (medium) gate_verdict: blocker subcategory=17 сравнивается через isinstance(int) — строковый subcategory из nspd-dump молча деградирует до warning
Closed
#1359 (medium) recommend_mix: success-boost меняет share_pct, но не пересчитывает units/revenue/velocity → внутренне противоречивый ответ
Closed
#1358 [medium] object_flats_quartirography: бакет 'Нежилые' дробится на дубли, когда у нежилого юнита rooms не NULL
Closed
#1356 [medium] fetch_status: завершённый/paused job с непустым target-статусом проваливается в неверный ответ 'not_in_nspd'
Closed
#1354 [medium] velocity: monthly_velocity делит суммарный объём конкурентов на MAX месяцев одного конкурента — занижение при разнородных окнах
Closed
#1351 (medium) PDF-отчёт Trade-In печатает period_months=24, тогда как данные за 12 месяцев — неверное окно в клиентском документе
Closed
#1350 (medium) Аэродромы запрашиваются из OSM только как node — авиашум молча теряется в скоринге
Closed
#1349 (medium) Geocode cache get/put делает блокирующий DB-IO на event loop, хотя тот же файл использует to_thread для других DB-вызовов
Closed
#1348 (medium) Sber pull выполняет блокирующий DB/CPU на event loop (async-таск без run_in_executor)
Closed
#1346 (medium) Блокирующий синхронный psycopg-IO в async-хендлере get_parcel_connection_points
Closed
#1345 (high) Sber pull: пойманный сбой UPSERT отравляет Session — нет db.rollback(), все оставшиеся серии каскадно падают
Closed
#1343 (high) poi_loader.sync_poi_to_db: UPSERT-цикл без per-row SAVEPOINT — одна битая строка валит весь weekly POI-sync
Closed
#1342 (high) parcels.analyze: optional DB-блоки без begin_nested() — один сбойный query отравляет всю tx, молча теряет данные и срывает persist рана
Closed
#1341 [high] СЗЗ с упоминанием газ/электр ошибочно эскалируется в hard-blocker — вердикт «Нельзя» вместо «С ограничениями»
Closed
#1340 [high] obj_class_filter (англ.) сравнивается с русским obj_class в БД — фильтр класса всегда даёт 0 конкурентов (competitors + best_layouts)
Closed
#1339 (high) useSiteAnalysis: re-POST на 'ready' использует apiFetch без проверки статуса — 202-гонка возвращает stub и крашит render tree
Closed
#1338 (high) Синхронный CPU-bound генеративный пайплайн geometry.generate блокирует event loop в create_concept
Closed
#1337 (high) async-хендлер get_poi_score(decay=routing) делает синхронный блокирующий ORS-вызов на 12с в event loop
Closed
#1336 (critical) SRID: геометрия кварталов и зданий из rosreestr2coord (WGS84) ошибочно ST_Transform'ится из 3857 → коллапс к Null Island
Closed
#956 [site-finder] EPIC 12: Извлечение факт/гипотеза/уверенность из граддок (NLP §7.4)
322 issues created by 2 users
Opened
#1551 Avito detail-enrichment backfill для legacy listings (detail_enriched_at IS NULL) — прокси уже есть
Opened
#1553 Yandex detail-enrichment не реализован: нет save + detail не fetch'ится в свипе (area_m2 23%, repair 1%)
Opened
#1560 Три async-хендлера competitors / best-layouts / best-layouts-pdf блокируют event loop sync DB-IO (и WeasyPrint write_pdf)
Opened
#1561 persist_analysis_run коммитит result ДО дописывания forecast/ird/developer_attribution — сохранённый ран расходится с live-ответом
Opened
#1562 bulk_enqueue_geo (/geo/bulk): невалидный thematic_id в середине списка → 400 при уже запущенных geo-jobs (partial execution, нет atomicity/idempotency)
Opened
#1563 Отрицательный query-param limit на 7 GET-эндпоинтах admin_scrape → 'LIMIT -N' → необработанный 500 вместо 422
Opened
#1564 estimate_pdf (trade_in.py:347): TTL-проверка через .replace(tzinfo=UTC) перепривязывает, а не конвертирует timestamptz — при не-UTC session TZ просроченные оценки отдаются ка…
Opened
#1565 DDU-индикатор: area_ranges целиком вне диапазона 1..6 молча возвращает ВСЕ площади вместо пустого/422
Opened
#1566 DDU-индикатор: нет валидации формата/порядка periodFrom/periodTo — мусорный или инвертированный period тихо отдаёт пустой/усечённый ряд
Opened
#1567 Sentry/GlitchTip scrub-хук навешен только на transaction-события (before_send_transaction), error-события не редактятся — apiKey из URL/spans/breadcrumbs утекает в трекер
Opened
#1569 alembic/env.py регистрирует только Parcel — JobSetting и ~50 реальных таблиц невидимы для drift-detection, autogenerate сгенерировал бы фантомный CREATE TABLE parcels
Opened
#1570 ORM-модель Parcel мапится на несуществующую таблицу 'parcels' с устаревшими колонками — мёртвый и вводящий в заблуждение код
Opened
#1571 JobSetting.updated_at — NOT NULL без Python/server default: ORM-вставка строки даст IntegrityError (латентная ловушка)
Opened
#1572 ChatAskRequest.history: max_length=20 даёт hard-422 на длинном диалоге вместо задокументированного усечения (контракт-vs-поведение)
Opened
#1573 get_features_in_bbox_grid молча глотает WAF-403 и server-error для ПЗЗ-grid-walk → ложный tz_count=0, без layer_failed
Opened
#1574 Голый int(cat_id)/int(total) в парсинге meta search_by_quarter падает на нечисловом NSPD-ответе и валит Phase 1 квартала
Opened
#1575 cian offer_price_history frozen since 2026-05-24 — server backfill is a silent no-op; needs local Playwright runner
Opened
#1576 recommend_mix: weighted_avg_price_per_m2 не пересчитывается после success-boost share_pct → средневзвешенная цена рассогласована с долями бакетов (пробел в фиксе #1359)
Opened
#1577 weather_cache._fetch_weather_remote: агрегаты min/max/sum по daily-массивам падают на None-днях -> весь 7-day forecast молча теряется
Opened
#1578 weather_cache._fetch_seasonal_remote: ZeroDivisionError/ValueError при пустых t_min/precip и непустом t_max (раздельные None-guard'ы)
Opened
#1579 objective_etl.get_sqlite_info: утечка SQLite-соединения/fd на error-path (close() не в finally)
Opened
#1580 _jsonb_param: json.dumps без allow_nan=False — NaN/Infinity ломают jsonb-INSERT, ран теряется молча
Opened
#1581 velocity_alerts: prior_n использует COUNT(*) вместо COUNT(realised) — NULL-строки засчитываются в гейт значимости z-score
Opened
#1582 ddu_price_indicator: missing MV даёт ProgrammingError, а ловится только OperationalError — диагностический except мёртв для своего же кейса
Opened
#1583 Phase 2.5 ПЗЗ собирается ДО auto-heal геометрии квартала — broken-geom кварталы молча остаются без территориальных зон при первом harvest
Opened
#1584 Grid-walk discovered-счётчик завышается на skipped/чужекатегорийные features и misattribution parcels/buildings
Opened
#1585 intents.py: _fmt_number отдаёт английские 'nan'/'inf' в RU-прозу детерминированного chat-ответа при NaN/Inf-числах
Opened
#1586 intents.py: при наличии headline подавляется честная пометка о пустом разделе product_tz (what_to_build)
Opened
#1587 dry_run objective-backfill возвращает auto_accepted=0 вместо числа потенциальных auto-accept — preview вводит в заблуждение
Opened
#1588 objective_distinct не фильтрует group_name, но objective_group хардкодится 'Екатеринбург' — латентный кросс-город mislabel при расширении датасета (#307)
Opened
#1589 trade_in_pdf.py:256 — бейдж достоверности печатает n_analogs=объявления+сделки, завышая «N аналогов» и противореча заголовку стр.2
Opened
#1590 Экспортёры report_*: подпись «Индекс дефицита (12 мес)» лжёт при отсутствии 12-мес прогноза — fallback берёт дефицит чужого горизонта
Opened
#1591 Snapshot-PDF: блок «Конкуренты (топ 5)» отбирает крупнейшие ЖК по flat_count, а не ближайшие — расходится с комментарием кода
Opened
#1592 [Fable 5][P2] §25 compute_special_indices: итоговый confidence считается по ВСЕМ 6 индексам (включая unavailable→'low'), а не «MIN по доступным» — карточка систематически …
Opened
#1593 demand_only overlay: deficit_index ранжирует форматы по rate-крутизне (§9.5 segment_steepness), а не по силе спроса — §9.2/§9.4-компоненты сокращаются
Opened
#1594 demand_only: rate_future=0.0 placeholder при отсутствии будущей ставки даёт максимальный аплифт §9.4 (clamp 1.2), а не нейтраль — комментарий ложный
Opened
#1595 _score_future_competition: count = len(всех конкурентов), а mean_weight — только по не-None весам → возможное завышение плотности при частичных данных
Opened
#1596 [Fable 5][P3] §15 confidence_engine: advisory-cap сообщение дублируется в rationale при all-high (самый частый advisory-случай)
Opened
#1597 place_strategy не отбраковывает стратегию с нулевым размещением: пустой концепт (revenue=0, margin=-land, IRR=-33%) выдаётся как валидный вариант
Opened
#1598 ConceptInput.land_cost_rub без ge=0: отрицательная стоимость земли молча завышает маржу и IRR-proxy
Opened
#1599 DXF-экспорт теряет внутренние кольца (отверстия) участка/пятна застройки — вырезы зарисовываются сплошняком
Opened
#1600 Подписи секций в DXF привязаны по левому-нижнему углу к центроиду, а не отцентрованы на нём
Opened
#1601 _parse_openai_response: int() на нечисловых usage-токенах бросает ValueError/TypeError мимо fallback-гарантии complete
Opened
#1602 LLMResult.from_provider теряет finish_reason — content_filter/length-обрезка возвращаются как ok=True
Opened
#1603 make_thumbnail: неатомарная запись WebP (thumbs.py:53) — усечённый thumb навсегда кэшируется и отдаётся как валидный
Opened
#1604 Lazy-загрузка фото: при провале make_thumbnail оригинал записан на диск, но local_path не сохранён в БД (photos.py:113-125) — вечный re-fetch + осиротевший файл
Opened
#1605 Phase A не пагинирует и молча теряет хвост объектов при limit=999999, run всё равно 'done'
Opened
#1606 EMISS-парсер: годовой агрегат (PERIOD='год') и I квартал коллидируют по obs_date=date(year,1,1) — последний Series молча затирает первый
Opened
#1607 ekburg_permits: _COORD_FIRST_RE требует дробную часть — целочисленные координаты МСК-66 теряют геопривязку молча
Opened
#1608 domrf_catalog _TextCollector: void-теги (<br>/<img>/<input>) рассинхронизируют стек/буфер — текст блоков теряется
Opened
#1609 domrf_catalog status: классификация по первому ключевому слову во всём HTML + 'продано'≠'продана' → sold помечается free
Opened
#1610 domrf_catalog scrape_one_flat: success=True даже при updated=False / 0 извлечённых полей — ложь в статистике батча
Opened
#1611 nspd_denorm.denorm_dump: штатный пропуск feature без cad_num считается ошибкой → завышенный error-счётчик в метрике прогона
Opened
#1612 obj_checks.extract_obj_checks: or-коалесинг passed-значения (list-ветка) теряет boolean False → проваленная проверка пишется как пройденная
Opened
#1613 obj_checks.extract_obj_checks: bool() на строковом флаге → 'false'/'0'/'нет' трактуется как пройдено
Opened
#1614 nspd_lite.fetch_geoportal / nspd_client._http_get_json: json.loads на HTTP 200 не обёрнут → WAF-челлендж со статусом 200 даёт JSONDecodeError мимо autoretry harvest_quarter
Opened
#1615 competitors.py:491-502 — ценовой fallback покрывает только objective_complex_mapping, игнорируя nearest_cx gap-fill: конкурент с velocity>0 из спатиального матча получает avg_price=None
Opened
#1616 premises_lookup: KNN ближайшего здания ранжирует в ГРАДУСАХ (LIMIT 1) — на широте ЕКБ выбирает не ближайшее по метрам, parking_ratio чужого дома / потеря вали…
Opened
#1617 gate_verdict: warning NO_ENGINEERING_NEARBY при ОТСУТСТВИИ инж.сетей форсирует «С ограничениями» вместо «Можно» — чистый вердикт недостижим для жилого учас…
Opened
#1618 granddoc is_active: регистрозависимое сравнение == "Действующий" расходится с документированным lowercase doc_status_name → флаг и сортировка ломаются
Opened
#1619 ppt_tep JOIN: slug-fallback ILIKE перевёрнут (doc_ref ILIKE '%doc_full_name%') — никогда не матчит + LIKE-метасимволы не экранированы
Opened
#1620 worker_ready (lifecycle.py:160-171) немедленно ре-enqueue'ит WAF-paused nspd_geo jobs, обходя 30-минутный WAF-cooldown из cleanup_zombies
Opened
#1621 process_nspd_geo_job (nspd_geo.py:374-408, 82-97) не имеет атомарного claim → дублирующие task-сообщения для одного job_id могут идти параллельно (двойные WAF-хиты + зат…
Opened
#1622 [scrape_kn_catalog_objects] force=True «Загрузить все» молча ограничивается LIMIT 300 — каталог недогружается
Opened
#1623 [objective_etl] import_anton_objective: FileNotFoundError возвращает dict без raise — Celery-таск SUCCESS при проваленном ETL
Opened
#1624 [opportunity_harvest] n_features инкрементится до per-quarter commit — отчёт завышает число persisted фич при сбое commit
Opened
#1625 Parcel.geometry объявлена как POLYGON — реинтродукция класса крашей на многоконтурных (MultiPolygon) участках, который чинила миграция 93 (латентно: модел…
Opened
#1626 search_by_quarter (nspd_bulk_client.py:305-316): подстрочная классификация 404/400 по тексту исключения с подмешанным body_preview проглатывает 5xx и валидный 400 как «кв…
Opened
#1627 wms_feature_info (nspd_bulk_client.py:418-420): отсутствует isinstance(data, dict)-guard — non-dict JSON-ответ роняет ячейку grid-walk через AttributeError, потеря без сигнала
Opened
#1628 date_cr минует _parse_nspd_date → CAST(:date_cr AS date) роняет upsert_quarter_stats и весь harvest_quarter квартала (нет savepoint)
Opened
#1629 grid_geometry.py:59-61 — sanity-check сравнивает искажённые единицы EPSG:3857 с порогами, заданными как наземные метры → валидные крупные/вытянутые квартал…
Opened
#1630 intents.py: _render_why_forecast объявляет future_market источником provenance даже когда из него не выведено ни строки
Opened
#1631 trade_in_pdf._analog_rows: floor==0 (или total_floors==0) у аналога рендерится как «—» из-за truthiness вместо is not None
Opened
#1632 report_md._md_kv_lines: многострочное значение (напр. product_tz.summary «Резюме») ломает Markdown-буллет — нет свёртки переводов строк
Opened
#1633 [Fable 5][P4] §25.3 _geo_weight: подтверждённо-далёкий проект (>6.9 км) получает вес ниже floor для проекта без координат — инверсия против комментария
Opened
#1634 market_now.summary: district-wide счёт ЖК-выборки (obj_count) выдаётся за «N ЖК-конкурентов рядом»
Opened
#1635 commercial: sell_through_pct (темп распродажи нежилого) мислейблится как «доля коммерции» (commercial_share_pct)
Opened
#1636 §9.6 Almon-адаптер хардкодит confounded=False → §15 шок-фактор (#1222) частично мёртв в production
Opened
#1637 [Fable 5][P3] §15 confidence: нота deal_count теряет окно «за N мес» — расходится с контракт-примером модуля
Opened
#1638 normalize.py: 0-заполненная сетка SalesSeries.units сводит guard _count_full_years к диапазону дат, а не к числу реальных наблюдений (латентно, до подключения #979)
Opened
#1639 affordability.py:339-342: payment_at_scenario считает аннуитет по rate_path[h] без спреда, хотя rate_path в стеке = key_rate ЦБ → занижен и на иной базе, чем monthly_payment_rub (латент…
Opened
#1640 INN-regex затирает легитимные слитные 10/12-значные числа (крупные суммы в рублях) в text/строковых fields перед отправкой в LLM
Opened
#1641 Форматированный 10-значный мобильный без кода страны (922 123 45 67 / 922-123-45-67) проходит redaction нетронутым
Opened
#1642 make_thumbnail: пропуск по факту существования → устаревшая миниатюра после перекачки оригинала
Opened
#1643 Сбой загрузки квартир глотается молча — провал /portal/table не пишется в kn_scrape_failures, run рапортует ложную полноту
Opened
#1644 _norm_flat: деривация price_per_m2 падает с TypeError при строковом totalArea — необработанное исключение роняет весь run
Opened
#1645 [domrf_catalog] price_rub regex ловит цену за м² раньше полной цены → price_rub=NULL при наличии цены на странице
Opened
#1646 [ekburg_permits] parse_xlsx не закрывает read_only workbook (wb.close()) — утечка дескриптора/буфера
Opened
#1647 stealth: BrowserSession.download_binary обходит семафор concurrency (в отличие от get_json)
Opened
#1649 extract_obj_checks фабрикует passed=False для отсутствующих в payload проверок → UNKNOWN трактуется как FAILED (латентно, endpoint отключён)
Opened
#1648 fetch_via_rosreestr2coord глотает все исключения → None: WAF-блоки не детектируются, цель помечается 'done' с 0 features, run-статус лжёт
Opened
#1650 v_supply_layers_latest (м.125) схлопывает все L3 dev_group'ы района в 1 строку — DISTINCT ON без dev_group_name заново вносит #970 на read-слое future_supply
Opened
#1651 zone_regulation._RE_FLOORS требует литерал 'этаж' после числа → документированная форма 'предельное количество этажей – N' (голое число) не извлекаетс…
Opened
#1652 Fallback REFRESH MV CONCURRENTLY: проверка подстроки 'cannot refresh materialized view' не матчит реальное сообщение PostgreSQL → recovery-ветка мёртвый код
Opened
#1653 ppt_tep OR-JOIN (doc_ref=source_key ИЛИ doc_full_name ILIKE) может вернуть один ППТ-документ несколько раз → дубли ТЭП в ИРД-блоке
Opened
#1654 scrape_cadastre: enqueue_cadastre_harvest freshness-skip не идемпотентен — на resume targets_total сжимается ниже targets_done → преждевременный 'done' + раздутый targets_skipped
Opened
#1655 nspd_geo: jobs, застрявшие в 'queued' (потерянное брокер-сообщение), никогда не ре-reap'ятся — cleanup_zombies и worker_ready матчат только 'running'/'paused'
Opened
#1656 [backend][celery] Beat-таски refresh_quarter_price_index_chain и etl_newbuilding_crossload не зарегистрированы на воркере (отсутствуют в include) — молча никогда не выполняются
Opened
#1666 (site-finder) mv_layout_velocity не рефрешится по расписанию → best_layouts молча устаревают в проде
Opened
#1667 (site-finder) analyze: metro_block — заглушка nearest_top3=None (скрапер метро не подключён)
Opened
#1668 (site-finder) analyze inline confidence — stub, не дотянут до §15 confidence_engine (форсайт)
Opened
#1709 CI-шторм 2026-06-17 ~18:30 UTC — очередь раннеров забита, tradein-деплой #1699 застрял на ~17+ мин
Opened
#1723 [tradein][data] Objective bank_name/registration_number не отдаётся на текущем тарифе (ЕГРН-поля)
Opened
#1736 (site-finder) точки подключения ресурсов не отображаются на карте analyze (рендеринг-баг)
Opened
#1737 (site-finder) confidence: сырой ярлык «Компонент · вкладывающий сервис: high» — теряется имя сервиса
Opened
#1738 (site-finder) future-supply/pipeline считает СУБЪЕКТ анализа как будущего конкурента (self-count) + уже строящиеся как «будущее»
Opened
#1739 (site-finder) PDF analyze не скачивается — 500 (snapshot_pdf глотает причину) + forecast/export?format=pdf→422
Opened
#1740 (site-finder) противоречие: gate «МКД нельзя», но рекомендация советует квартирографию
Opened
#1741 (site-finder) порядок блоков analyze: характеристики участка и стройки вперемешку
Opened
#1742 (site-finder) объяснимость: «затоваренность» = 2 разных смысла; не ясно почему класс рекомендации
Opened
#1743 (site-finder) отчёт «Остатки и скорость» непонятен (3 разнородных понятия, англицизм Velocity-score)
Opened
#1744 (site-finder) прогноз и горизонты неясны: переключатель без подсказки + голые числа без единиц
Opened
#1745 (site-finder) [feature] прогноз продаж по ВСЕМ типам квартир (студии/1-5к) для игры ассортиментом
Opened
#1746 (site-finder) [feature/data] все инженерные сети на карту + единый источник (191-ФЗ engineering_networks не используется)
Opened
#1772 [tradein] Один дом дробится на несколько houses → same-building компы теряются (unify по кадастру)
Opened
#1773 [tradein] Адреса убивают same-building anchor: cian-новостройка без номера дома, avito «29р-н» слип, дубль-листинги
Opened
#1774 [tradein] Эстиматор: same-building anchor хрупок (один house_id, exclude avito) — резолвить через фрагменты/кадастр + same-house avito
Opened
#1781 [tradein] cian-первичка не освежается: 9205 заморожены с 31.05, 93% без house_id_fk, фантомы не гаснут (Савкова 29)
Opened
#1785 Кадастр: bulk NSPD grid-walk структурно теряет дома (покрытие МКД ~25-30%) — нужен анализ + денсер-сетка
Opened
#1789 [tradein][scrapers] Avito ЖК-enrichment не долетает в БД — отзывы/тип/история по дому пусты (house_reviews=0, avito_validated_at=0)
Opened
#1790 [tradein][scrapers] Avito прокси-ротация выключена на проде (AVITO_PROXY_MAX_ROTATIONS=0) → avito_full_load банится мгновенно
Opened
#1791 [tradein][scrapers] Cian detail-обогащение: kitchen 3% / ceiling 0% / описание 3% не долетают; отзывы ЖК не садятся
Opened
#1792 [tradein][scrapers] Yandex покрытие полей: area 63%, ceiling 0, описание 50%, kitchen 0; отзывы/рейтинг ЖК не садятся
Opened
#1793 [tradein][scrapers] tradein-browser: per-provider concurrency — параллель между поставщиками, ≤1 коннект на поставщика
Opened
#1795 tradein/estimator: завышение оценки в бизнес/премиум — кламп к коридору сделок + робастный anchor
Opened
#1796 tradein: Avito-баны режут покрытие аналогов и кросс-валидацию оценки
Opened
#1801 [tradein][scrapers] Cian прокси деградировали — CIAN_PROXY_URL (socks5) таймаут + BROWSER_PROXY_CIAN 503 → detail-покрытие cian ≤3%
Opened
#1803 [tradein][frontend] Мера estimate — React hydration error #418 (SSR≠client mismatch)
Opened
#1804 [tradein][frontend] Мера estimate — секция «Фото квартиры» 422 на preview-UUID (0/12 фото)
Opened
#1805 [tradein][scrapers] #883 Phase 2: avito.py SERP — дефолт на BrowserFetcher (camoufox)
Opened
#1806 [tradein][scrapers] #883 Phase 2: cian.py SERP — миграция на BrowserFetcher (camoufox)
Opened
#1811 [tradein][scrapers] Post-merge polish PR #1809 (avito SERP browser) — косметические минор'ы из ревью
Opened
#1812 [tradein][scrapers] tradein-browser: снизить per-page fan-out — within-provider rate-cap прокси (~12% fetch-fail при бэкфиле)
Opened
#1814 [tradein][scrapers] avito_detail_backfill: browser-fetch падает → curl-fallback → анти-бот 429 (+ снапшот тащит legacy не-ЕКБ листинги)
Opened
#1816 tradein: HTTP POST /estimate отдаёт инвариантный центрально-схлопнутый результат и не персистит (estimate_quality напрямую — корректен)
Opened
#1820 [tradein][scrapers] avito pipeline: новостройки house-страница (housePage widget missing) + AvitoBlockedError крашит весь прогон
Opened
#1843 [site-finder][ПТИЦА][data] Оживить КСИТ/высоту/зону в /analyze — crosswalk reg_numb_border → zone_index (+ латентный null zone_code)
Opened
#1846 DomClick scraper мёртв: VPS-IP заблокирован QRATOR + редизайн сайта (нужен прокси + rewrite на новый API)
Opened
#1850 [site-finder][perf] Оптимизировать zone-regulation резолв в /analyze (мемоизация zone_index_at, двойной резолв, timeout)
Opened
#1871 [AUDIT 2026-06-22] ПТИЦА deep-audit: реестр дефектов (цифры/логика/минусы/дизайн)
Opened
#1881 [epic] Настоящая финмодель проекта (DCF/NPV/IRR/PBP) — объединить геометрию ПТИЦА + полноту девелоперской БДДС
Opened
#1917 [tradein][scrapers] /fetch-json: тюнинг settle после навигации (транзиентный NetworkError на первом XHR)
Opened
#1918 [tradein] yandex browser-proxy мёртв (za.mobileproxy.space:62011) → yandex detail/newbuilding/address enrichment в 503
Opened
#1926 [AUDIT #1871 остаток] invest_score advisory flag + units_sold align + yandex total_seen obs + frontend polish
Opened
#1940 [tradein][scrapers] Browser-sweep'ы зависают ДО первого HTTP (http_requests=0) → zombie/stuck-running на 6ч, источник теряет день
Opened
#1945 [site-finder][scrapers] domrf_kn FLATS loader сломан с ~17.05 (DOM.РФ WAF): flats 376k→~0, best-layouts supply пустой 5 недель
Opened
#1949 [tradein][scrapers] cian: full_load зомбится ~43% + city_sweep self-inflicted watchdog-бан → 86% инвентаря stale
Opened
#1950 [tradein][scrapers] avito: changeip-recovery одношотный (30s timeout роняет run) + статус 'banned' завышен когда SERP отработал
Opened
#1951 [tradein][devops] Деплой неатомарен — recreate scraper посреди run убивает in-flight sweep (cian_full_load → zombie)
Opened
#1953 [EPIC] ПТИЦА analysis report — UX + data-honesty аудит (на примере 66:41:0205010:287)
Opened
#1954 P0 Объект-карточка: площадь «—», обременения «—», «обновлено» — читаются мёртвые колонки (эпик #1953)
Opened
#1955 P0 «Что хорошо продаётся» — дубли бакетов (obj_class не проброшен) + фантом Comfort/Комфорт (эпик #1953)
Opened
#1956 P0 4.2 Планировки: «срок продажи 0 мес» / «% продано —» — per-object snapshot (регрессия #1944) (эпик #1953)
Opened
#1957 P0 ЗОУИТ: сырой «cad_zouit», дубли, пустые «Охраняемые зоны» + СЗЗ-смысл и баннер «жильё ограничено» (эпик #1953)
Opened
#1958 P0 График дефицита: оси налезают + плоское/пустое состояние; фактор «Прогноз спрос/предложение» ×4 дубль (эпик #1953)
Opened
#1959 P0 Индекс дефицита −1.00 ВЕЗДЕ — basis mismatch (спрос сегмент vs предложение район) + honesty-guard (эпик #1953)
Opened
#1960 P1 «Медиана рынка» 64k — квартальная n=1 ДКП-медиана вместо новостроечного базиса (эпик #1953)
Opened
#1961 P1 Сети/точки подключения не на карте (нет слоя источника + радиус 500м vs 2км + полигоны без центроида) (эпик #1953)
Opened
#1962 P1 Градрегламент НСПД (тер.зона/КСИТ/высота/этажность) — вывести в Раздел 1 (эпик #1953)
Opened
#1963 P2 Человеческий язык / микрокопия отчёта (6.2/6.3/6.5 + легенды дефицита/затоварки) (эпик #1953)
Opened
#1964 P2 Data-quality: objective_lots раздут (1.75M), n_sold=99110 аномалия, registration_date разрежен (эпик #1953)
Opened
#1965 [feat] Консолидация фин-модели/Концепции в отчёт + интерактив house-picker → 3D → пересчёт (эпик #1953)
Opened
#1966 [tradein][analytics] Accuracy-loop → CI-гейт: point-in-time backtest на ПОЛНОМ движке (per-rooms MAPE + range-coverage SLA)
Opened
#1967 [tradein][data] avito 54% NULL lat → невидим PostGIS-радиусу: geo-backfill + dedup на ингесте (рычаг точности массы оценок)
Opened
#1968 [tradein][ux] Honesty-fix вывода: «7 источников»→честные 4, убрать фейковую per-source медиану, выпилить domclick из sources
Opened
#1969 [tradein][compliance] ФЗ-152 / ToS — блокер B2C: PII потребителей в БД + правовой риск скрейпа
Opened
#1970 [tradein][tech-debt] Flag sprawl: ~40 estimate_* флагов, матрица взаимодействий непротестирована → паралич правок
Opened
#1971 [tradein][business] Лид-флоу — тупик: CTA = mailto-стаб, нет реального POST /lead → воронка в никуда
Opened
#1972 [tradein][ux] Редизайн результата «Тихая уверенность»: одна цифра-герой (expected_sold) + confidence-driven типографика + снять тройное дублирование цен
Opened
#1989 [UX-аудит #01] Закрепить итог (выкупная стоимость + «Скачать PDF») вверху страницы результата
Opened
#1990 [UX-аудит #02] Дедуп чисел на странице результата — одни и те же суммы повторяются 3–4 раза
Opened
#1991 [UX-аудит #03] Свести четыре цены к двум + явная пометка «эта идёт в оффер»
Opened
#1992 [UX-аудит #04] Один источник вводных + один инструмент «что-если» (сейчас три места пересчёта)
Opened
#1993 [UX-аудит #05] Убрать сырые внутренние подписи с витрины (start_price, benchmark, yandex_valuation, asking…)
Opened
#1994 [UX-аудит #06a] Прятать пустые блоки + единый формат сумм (frontend)
Opened
#1995 [UX-аудит #06b] Данные сделок-заглушки: все даты 01.01.26 + немонотонный sell-time (backend/data)
Opened
#1996 [UX-аудит #07] Иерархия «ответ → доказательство → тех-детали» на странице результата
Opened
#2000 DomClick Layer B (deep detail-backfill) заблокирован QRATOR — нужен dedicated residential RU proxy
Opened
#2002 [tradein][analytics] Elite/premium estimate accuracy — data-research findings + roadmap
Opened
#2003 [tradein][tech-debt] houses.house_class never populated — dead merge engine + Avito «Класс жилья» not extracted
Opened
#2007 [tradein][yandex] SERP _entity_to_lot: писать ceiling_height + kitchen_area_m2 в колонки + нормализовать house_type
Opened
#2008 [tradein][cian] SERP: промоут полей из raw_payload в колонки — kitchen_area_m2, mortgage_available (+ новые is_apartments, is_rosreestr_checked)
Opened
#2009 [tradein][avito] detail: дописать house_type + house_catalog_url (+5 house-level полей) в save_detail_enrichment
Opened
#2010 [tradein][avito] IMV: персист comparables + searchSimilarUrl (сейчас полностью выбрасываются)
Opened
#2011 [tradein] Аудит покрытия полей скрапперов avito/cian/yandex — сводка + прод-замер (2026-06-27)
Opened
#2012 [tradein][estimator] Подключить house_type/kitchen/ceiling как фичи comp-scoring (+ обязательный backtest)
Opened
#2013 [tradein][avito] year_built = 0% — источник не отдаёт год постройки (потолок ~1.7% через houses-catalog)
Opened
#2036 trade-in/v2: подключить боевые ручки к новому UI (/trade-in/v2)
Opened
#2038 trade-in/v2 [FE-1]: data shell + main dashboard wiring (page.tsx + mappers + ParamsPanel/ResultPanel/ObjectSummary/Hero/Footer)
Opened
#2039 trade-in/v2 [FE-2]: overlay «История / Продажи в доме» (HistoryView)
Opened
#2040 trade-in/v2 [FE-3]: overlay «Аналитика дома» (AnalyticsView)
Opened
#2041 trade-in/v2 [FE-4]: overlay «РЫНОК / Аналогичные объявления» (SourcesView)
Opened
#2042 trade-in/v2 [FE-5]: «Предыдущие оценки» (CacheView) + PDF-ссылка + quota + автокомплит адреса
Opened
#2043 trade-in/v2 [BE-1]: estimate +cv +source_counts +created_at; /history +sources_used; cache-KPI
Opened
#2044 trade-in/v2 [BE-2]: optional radius_m param (estimate / house-analytics / sell-time-sensitivity)
Opened
#2045 trade-in/v2 [BE-3]: Коэффициент локации + POI-разложение (LocationDrawer) — DEFER / решение
Opened
#2046 trade-in/v2 [BE-4]: профиль пользователя (name/org/email) для TopNav — DEFER
Opened
#2062 trade-in/v2: UI/UX-полировка по аудиту (доступность, доверие к числам, иерархия, копирайт)
Opened
#2081 trade-in/v2: UI/UX аудит — round 2 (системный контраст · честность чисел: дедуп/фильтр/адрес · a11y drawer+автокомплит)
Opened
#2087 trade-in/v2: data-contract — рассинхрон счётчика источников / ratio-vs-медианы / базы торга + кросс-source дедуп (из аудита #2081)
Opened
#2111 «Все точки показывают максимум информации» — карты-попапы недоливают данные (verified audit)
Opened
#2119 Точки подключения с характеристиками: 51 источник, 27 верифицированы (research 2026-07-02)
Opened
#2126 [EPIC] scraper-kit — внутренний код-пакет монорепо (консолидация скрапперов)
Opened
#2127 [EPIC] market — контракт данных скрапперов для внешних потребителей
Opened
#2128 scraper-kit A: скаффолд пакета + workspace-подключение
Opened
#2129 scrapers K: fix _unix_to_date TZ-inconsistency (3 копии MSK/UTC/naive)
Opened
#2130 market I: contract-view market.v_* поверх producer-таблиц
Opened
#2131 scraper-kit B: Protocol-границы (matcher/config/session/jobs) + adapters
Opened
#2132 scraper-kit C: перенос core-слоя в пакет
Opened
#2133 scraper-kit D: перенос провайдеров (avito/cian/yandex/domclick)
Opened
#2134 scraper-kit E: консолидация бисекции цены (4 копии → pricing/bisection.py)
Opened
#2135 scraper-kit F: перенос pipeline (scrape_pipeline) в пакет
Opened
#2136 scraper-kit G: scheduler + registry-dispatch (25+ trigger_* → dict-реестр)
Opened
#2137 scraper-kit H: Docker/build wiring для пакета
Opened
#2138 market J: перенацелить gendesign_reader на market.v_* + обновить ETL #976
Opened
#2160 [EPIC] proxy-pool — хранилище прокси в БД + автовыбор свободного/рабочего
Opened
#2161 proxy-pool P1: таблица scrape_proxies + admin bulk-load + seed env
Opened
#2162 proxy-pool P2: сервис proxy_pool (acquire/release/health) + health-checker
Opened
#2163 proxy-pool P3: интеграция curl-путей на пул (acquire/release)
Opened
#2164 proxy-pool P4: динамический browser server (acquire + relaunch + release)
Opened
#2177 §4.2 «Анализ планировок»: покрытие 17% при 100% данных в Объективе — дедуп ЖК + расширение mapping + lots-fallback
Opened
#2178 §4.3 «Тренд рынка»: считать динамику цен из objective_lots_history вместо устаревшего Росреестра
Opened
#2179 §7 отчёта: раскрыт по умолчанию + участок выделен на 3D-подложке + больший кусок карты
Opened
#2180 3D-макет окружения в «Размещении застройки»: соседние здания из cad_buildings
Opened
#2181 Альтернативы при отрицательном вердикте: оптимизатор программы (класс × этажность × mix) в конце отчёта
Opened
#2187 tradein/dedup: ослабить geo-guard в fias-pass — 130 same-fias групп не смержены (NULL geom / >250 м)
Opened
#2188 tradein/deploy: tradein-scraper не пересоздаётся при изменении matching/dedup-кода — DORMANT-дедуп запустил бы старый код
Opened
#2189 tradein/canon: слэш-коллапс в tradein_canon_addr — «Сулимова, 32» ≡ «Сулимова, 3/2» (подтверждено ревизией DaData)
Opened
#2192 rewire: scheduler_main на kit-scheduler за флагом USE_KIT_SCHEDULER (ship-dark)
Opened
#2200 EPIC: Мера (trade-in) — ремедиация полного аудита 2026-07-02
Opened
#2201 [P0] Продлить 3 mobile-прокси до 15.07 (иначе avito+cian+yandex умрут вместе)
Opened
#2202 [P0] Подключить scrape_proxies pool к боевым скрейперам — убрать single-IP SPOF
Opened
#2203 [P0] Off-box бэкап tradein-postgres + restore-тест + hardening backup-скрипта
Opened
#2204 [P0] deactivate_stale для domklik/n1 + честный трекинг freshness domklik
Opened
#2205 [P0] Убрать публичную фейк-оценку /trade-in/ui-preview с прода + noindex
Opened
#2206 [P1] Обновлять scraped_at в upsert (base.py) — вернуть ~55% инвентаря эстиматору
Opened
#2207 [P1] Снять блокировку event loop на POST /estimate (asyncio.to_thread)
Opened
#2208 [P1] Pre-merge CI-гейт для tradein-mvp (backend pytest + frontend typecheck/lint)
Opened
#2209 [P1] Честность диапазона оценки: раскрыть/рекалибровать 56.6% + min-width floor + backtest baseline + CI-гейт
Opened
#2211 [P1] Честность UI-источников: убрать «/7», фолбэк-чипы, «классическую», зелёный cache-дот, «CV»
Opened
#2212 [P1] Починить rosreestr_dkp_import (deals заморожены 182д) + алерт на max(deal_date)
Opened
#2213 [P1] Defense-in-depth для trusted-header auth + rate-limiter fix
Opened
#2214 [P1] Observability: off-box uptime-probe + fail health-check на dead backend + mem-лимиты + log-rotation
Opened
#2215 [P2] Кросс-источник дедуп аналогов (house+floor+area) — убрать ~19% двойного счёта
Opened
#2216 [P2] Миграции tradein: порядок (до рестарта) + реконсиляция 152 vs 131 + дубль-префиксы
Opened
#2217 [needs-human] 152-ФЗ позиция (17342 телефона) + права на переопубликование скрейпленных данных
Opened
#2218 [needs-human] Продуктовая ясность: мот vs бесплатных оценок + конверсионный слой + README
Opened
#2233 [P1] photo-upload буферизует всё тело в RAM до проверки лимита (OOM-риск при mem_limit 768m)
Opened
#2234 [P2] admin.py: текст исключений утекает в HTTP-ответы (8 мест detail=f"...: {e}")
Opened
#2235 [P2] yandex: 204 активных URL-дубля — дедуп + уникальность source_url
Opened
#2236 [P2] external_valuations.house_id всегда NULL (1579/1579) — привязать к houses
Opened
#2254 B2B-запрос в ЕЭСК: реестр ТП/РП с адресами или координатами (полная карта точек подключения)
Opened
#2255 [P3] Эстиматор: сегментная калибровка по классу жилья — за фичефлагом (follow-up #2209)
Opened
#2259 Полный PDF/DOCX-экспорт ПТИЦА-отчёта (/analyze): §1-§7 + альтернативы
Opened
#2262 [tradein][v2] Жёсткий аудит нового дизайна «Мера» v2 (пост honest-interval + design-sync) — ЭПИК
Opened
#2264 [tradein][v2][a11y] Жёсткий аудит доступности — клавиатура/SR end-to-end + aria-modal оверлеев (эпик #2262)
Opened
#2265 [tradein][v2] Живой аудит честности чисел на проде — resolved ли жалоба оценщика + остаток #2087 (эпик #2262)
Opened
#2266 [tradein][v2] Визуальный аудит — иерархия 3 цен, CTA, микрокопи, консистентность после honest-hero (эпик #2262)
Opened
#2267 [tradein][v2][design-sync] Аудит DS-панели claude.ai/design + авторинг 6 floor-card v2-компонентов (эпик #2262)
Opened
#2269 [P2] Кросс-source дедуп: ключ схлопывает лишь 13.5% дублей — канонизация по house_id_fk (follow-up #2215)
Opened
#2275 [tradein][v2] Мобильной раскладки нет: 390px → overflowX 473px, десктопная сетка без брейкпоинта (из аудита #2266)
Opened
#2277 [tradein] cleanup-волна после стабилизации scraper-kit: удалить legacy-дубли скрапперов + косметика pool
Opened
#2291 [P3] Дедуп-остаток после #2269: mkr-misfire (334), ё/е-фолд (~60), area-straddle (139)
Opened
#2294 [P3] Сегментный множитель: confidence-гейт против band-by-predicted утечки (follow-up #2255)
Opened
#2295 [P3] POST /concepts отдаёт 422 на многоконтурных участках (MultiPolygon)
Opened
#2304 [tradein] scraper_kit migration — Stage 0: общий parity-test harness
Opened
#2305 [tradein] scraper_kit migration — Group A: admin/scripts debug (низкий риск)
Opened
#2306 [tradein] scraper_kit migration — Group B: cian/yandex price-history & session
Opened
#2307 [tradein] scraper_kit migration — Group D: порт orphan-модулей (domclick_detail, ekb_geoportal_client)
Opened
#2308 [tradein] scraper_kit migration — Group E: core valuation (estimator.py) — МАКСИМАЛЬНЫЙ РИСК
Opened
#2309 [tradein] scraper_kit migration — Group F: широкий рефактор структуры providers/*
Opened
#2310 [tradein] scraper_kit migration — Group C: backfill/enrichment tasks
Opened
#2316 [P4] mypy strict: 3 пред-существующие ошибки в generative/exporters/dxf.py
Opened
#2317 trade-in/v2: подключить LocationDrawer к GET /location-coef (frontend wiring, follow-up #2045)
Opened
#2320 [tradein][analytics] Point-in-time backtest на listing_source_snapshots — заблокировано данными, не кодом
Opened
#2322 [tradein] scraper_kit bug: yandex/cian newbuilding providers — BrowserFetcher без endpoint= ломает любого caller'а
Opened
#2323 [tradein] admin.py: scrape_cian_newbuilding awaits sync save_newbuilding_enrichment — TypeError at runtime
Opened
#2330 [tradein] scraper_kit: avito build_warmed_session() не выставляет config= — тихо теряет sticky-proxy на prod-default пути
Opened
#2334 [tradein] scraper_kit Group E1: avito_imv → kit (estimator.py dependency, часть #2308)
Opened
#2335 [tradein] scraper_kit Group E2: cian_valuation → kit (estimator.py dependency, часть #2308)
Opened
#2336 [tradein] scraper_kit Group E3: yandex_valuation → kit (estimator.py dependency, часть #2308)
Opened
#2337 [tradein] scraper_kit Group E4: финальное переключение estimator.py на kit (#2308 завершение)
Opened
#2349 [tradein] scraper_kit Group F1: fix yandex/cian newbuilding BrowserFetcher missing endpoint= (#2322)
Opened
#2350 [tradein] scraper_kit Group F2: fix avito build_warmed_session() missing config= (#2330)
Opened
#2351 [tradein] scraper_kit Group F3: системный аудит config-footgun паттерна во всех providers/*
Opened
#2352 [tradein] scraper_kit Group F4: shared base classes + consistent naming/layout providers/*
Opened
#2358 [tradein] scraper_kit Group F4-Foundation: shared base/utils для providers/*
Opened
#2361 [tradein] scraper_kit Group F4a: миграция avito/* на shared base (_base.py)
Opened
#2362 [tradein] scraper_kit Group F4b: миграция cian/* на shared base (_base.py)
Opened
#2363 [tradein] scraper_kit Group F4c: миграция yandex/* на shared base (_base.py)
Opened
#2364 [tradein] scraper_kit Group F4d: миграция domclick/* на shared base (_base.py)
Opened
#2367 [site-finder] ИСОГД Свердл: реестр РНС как ранний сигнал future-supply (§6) — наследник Потока 2 из #103
Opened
#2369 [tradein][obs] scrape_runs.total_seen=0 у yandex (и проверить avito/cian) — counters пишутся только в jsonb
Opened
#2376 backend: POST /api/v1/trade-in/lead + persist (parent #1971)
Opened
#2377 frontend: заменить mailto-CTA на форму лида в HeroTransparency (parent #1971)
Opened
#2378 chore(tradein/estimator): схлопнуть low-risk кластер флагов (dedup/disclosure/manual-review/confidence-floor) — #1970
Opened
#2379 chore(tradein/estimator): схлопнуть quarter-index price-correction флаги (#764) — #1970
Opened
#2380 chore(tradein/estimator): схлопнуть #1795 corridor-clamp/radius-floor/expected-sold-clamp флаги — #1970
Opened
#2381 chore(tradein/estimator): схлопнуть same-building-anchor + IMV-blend tuning флаги (#651/#652/#680/#1774) — #1970
Opened
#2382 fix(tradein/estimator): merge orphaned floor term for hedonic composite (#2002 roadmap item 1)
Opened
#2385 [tradein] scraper_kit F4 follow-up: сделать config mandatory в {cian,yandex}/newbuilding.py + домиграция на _base
Opened
#2386 [tradein] scraper_kit F4 follow-up: mock-target artifact блокирует миграцию avito/imv.py на _base
Opened
#2395 [tradein][v2] Форма лида (#2377) невидима на проде — смонтирована в мёртвом legacy-дереве, не в v2
Opened
#2397 [tradein] scraper_kit: decommission legacy orchestration (scrape_pipeline.py / scheduler.py) — enable full legacy deletion
Opened
#2406 [tradein] port legacy-only sweep edge cases (cancel-midway / watchdog-timeout / SIGTERM-drain) onto kit run_*_city_sweep
Opened
#2408 [tradein] standalone kit unit-тесты для SERP/houses парсеров (после удаления legacy golden-parity) + чистка orphaned fixtures
Opened
#2409 [needs-human][data] 191-ФЗ engineering_networks: нужен датасет из личного кабинета Минстроя (ФГИС ТП, QGIS.zip)
Opened
#2416 [needs-human][devops] deploy-obsidian.yml: живо ли GitHub-зеркало, или workflow мёртв с 16.05?
Opened
#2422 [tradein] kit standalone unit-покрытие после удаления legacy golden-parity (final E #2419) + чистка orphaned fixtures
Opened
#2423 [tradein] dedup: avito house-no regex хватает цифры из приклеенного названия метро вместо реального номера дома
Opened
#2425 [tradein] v2: клик по «Предыдущие оценки» не переключает вид, если в этой же SPA-сессии уже был submit свежей оценки
Opened
#2431 [tradein] dedup regression: PR #2429 сломал сравнение корпуса дома между avito/cian («NкM») и domklik («N/M»)
Opened
#2435 [tradein] Houses Catalog: Cian bti_data/valuation house_info распарсены, но выбрасываются (никогда не пишутся в houses)
Opened
#2440 feat(scraper): harvest plan_image из уже работающего catalog-скрапера (22d) — блокер для #299/#300
Opened
#2442 feat(scrapers): подключить flat-level catalog scraper в Celery + прокинуть catalog_url_hash
Opened
#2443 [needs-human] DOM.РФ WAF hard-ban на VPS IP с 2026-05-24 — статус cooldown не проверялся 6 недель
Opened
#2445 EPIC: аудит кода ПТИЦЫ (мульти-агентный code review 2026-07-05) — 18 подтверждённых находок
Opened
#2449 fix(site-finder): раскрыть/устранить 2 оставшихся *45.0 proxy-сайта в velocity.py (follow-up #2445-A4)
Opened
#2452 fix(frontend): нейтральный fallback ещё в 4 enum-lookup-местах (follow-up #2445-B2/B3)
Opened
#2457 fix(export): «НДС (паркинг)» → «НДС (паркинг + коммерция)» в full_report экспортёрах (follow-up #2445-C1)
Opened
#2462 [needs-human][devops] deploy-очередь: контейнер отстаёт от :latest при серии быстрых мержей + SENTRY_RELEASE-флаг врёт о готовности
Opened
#2464 EPIC: exhaustive line-by-line аудит backend ПТИЦЫ (2026-07-07) — 89 подтверждённых находок
10 unresolved conversations
Open
#9
Stage 2c: Интеграция Site Finder ↔ Generative + подача в реестр ПО
Open
#300
feat(plans): semantic floor plan vectorization — Phase 2 (CubiCasa5K)
Open
#52
Extra E2: B2B integration registry (вопросы для Макса)
Open
#667
[tradein][analytics] Point-in-time backtest estimator через listing_source_snapshots (#570)
Open
#401
feat(tradein): #5 — источник Дом.РФ
Open
#400
feat(tradein): #3 — источник ДомКлик
Open
#301
feat(generative): reverse-train generative engine on real DOM.РФ plans — Phase 3
Open
#58
B1-5: Реестр ПО — подготовка заявки (60-180 дней рассмотрения!)
Open
#59
B1-6: Pilot tracker / коммерческая воронка (50 leads → 3 пилота)
Open
#81
B8-1: Product analytics — PostHog self-hosted EU