2026-06-13 - 2026-09-13
Overview
1389 pull requests merged by 3 users
Merged
#3509 fix(mera): витрина сделок лэндинга — в расписание, дата прогона на страницу, монитор свежести (#3469)
Merged
#3512 Импорт msk_raw умеет областной ДомКлик, а не падает на нём
Merged
#3508 МЕРА: у запросов к БД появился потолок по времени и по ожиданию блокировки (#3463)
Merged
#3510 Коллектор ДомКлика умеет Московскую область, а не только Москву
Merged
#3506 fix(deploy): Caddy пересоздаётся только когда правка иначе не доедет (#3443)
Merged
#3507 Московская область считается по своему ряду Сбериндекса, а не по общероссийскому
Merged
#3505 Импорт сырья msk_raw умеет Московскую область, а не только Москву
Merged
#3504 Расписание импорта сделок Росреестра по Московской области
Merged
#3503 fix(tests): убрать реальные паузы из tradein-тестов (wave2)
Merged
#3502 perf(tests): заглушить форсайт-enqueue в analyze-тестах Site Finder
Merged
#3501 Московская область в реестре регионов, обход — по специфичности вместо кода
Merged
#3500 perf(tradein-tests): убираем реальные паузы из 5 медленных тестов
Merged
#3494 fix(tgbot): проверка темы при старте + общий rate limit на группу (#3471)
Merged
#3499 Прогон тестов перестаёт спать по-настоящему
Merged
#3498 Ряд Московской области в Сбериндексе — грузим заранее, до включения региона 50
Merged
#3495 fix(tradein): идемпотентная отправка сообщения в поддержку (#3471)
Merged
#3497 ДомКлик как четвёртый источник переливки московского сырья в listings
Merged
#3496 ДомКлик — четвёртая площадка ручного сбора Москвы
Merged
#3488 Ожидаемые исходы скрапинга перестают быть ошибками
Merged
#3492 fix(metrics): гасим crash-loop tg-relay через профиль relay
Merged
#3491 Продуктовые счётчики и дашборд воронки
Merged
#3465 Быстрый путь «правка только прокси» наконец включается: считаем изменённые файлы сами (#3448)
Merged
#3487 Продуктовый Telegram-трафик уходит через ретранслятор на Beget
Merged
#3490 Отказ в alert-ack перестаёт съедать следующий алерт
Merged
#3489 Очередь задач и Redis становятся видимыми
Merged
#3479 Ответ оператора не исчезает при сбое БД, и реплай на собственный ответ снова маршрутизируется
Merged
#3485 Алерт GlitchTip переживает недоступность Telegram: отправка уходит в фон, 502 остаётся
Merged
#3483 Меньше шума: выключенные платежи не засоряют ленту ошибок, провал прокси-пробы пишется строкой вместо трейса
Merged
#3476 Деплой метрик перечитывает конфиг Prometheus, а не только кладёт его на диск
Merged
#3484 Маршрут и секрет для резервного приёмника алертов GlitchTip
Merged
#3482 Резервный канал для алертов GlitchTip: приём на alert-ack, другой хост и другой провайдер
Merged
#3481 Alertmanager объявлен единственным путём доставки: встроенный алертинг Grafana выключен явно
Merged
#3478 Access-логи Caddy доезжают в Loki: статусы и латентность прокси наконец видны
Merged
#3477 Тревоги уровня приложения, cAdvisor и пропавшие фоновые контейнеры; critical переживает подавление
Merged
#3474 Панель классов ответов больше не стекируется — красная линия и есть число 5xx
Merged
#3472 Москва в реестре городов лендинга и кабинета
Merged
#3473 ДКП-коридор по Москве не строился: имя улицы не извлекалось из московского формата адреса
Merged
#3468 feat(mera/лендинг): витрина показывает полосу расхождения −5…+20 %; плитку «уверенность низкая» сменил замер 12.09
Merged
#3470 Московский city_hint больше не уходит молча в регион 66
Merged
#3464 Тревоги печатали не ту величину, которую называли: «2.684e+11% от mem_limit» и «доля HOT 75.21%» при пороге 20%
Merged
#3460 Оценка не теряется, когда геокодер не уложился в бюджет (#3449)
Merged
#3462 Коридор сделок с малой выборкой честно помечен справочным
Merged
#3461 Витрина «сделки против объявлений» перестаёт пустовать: снят предикат по синтетической комнатности сделок
Merged
#3459 Поддержка: доставленное сообщение не теряется при сбое БД, отказы Telegram расходуют бюджет
Merged
#3458 Связь с Telegram не встаёт колом, ответ оператора не теряется
Merged
#3457 Недоступный Telegram отдаёт 502 — теперь на всём дереве транспортных отказов
Merged
#3456 Недоступный Telegram отдаёт 502, а не 500
Merged
#3455 Сборщик: обрыв сети на машине не должен убивать многочасовой проход
Merged
#3454 Импортёр знает Яндекс: город из второго компонента адреса, ноль внешних вызовов
Merged
#3453 Красный main после #3440: тест полос по округам передаёт убранный параметр rooms
Merged
#3440 Москва: пред-геокод Авито, Яндекс третьей площадкой, продукт отвечает по региону 77
Merged
#3445 fix(mera/estimate): убран предикат d.rooms в коридоре ДКП — он был вторым фильтром по площади (#3256)
Merged
#3444 fix(mera/estimate): коннект БД не живёт через внешний HTTP; потолок пула ≥ суммы потолков одновременности (#3083, #3408)
Merged
#3447 ci(#3274): гейт против возврата фронта в общую команду и снятия ретрая (часть 2b/3)
Merged
#3446 fix(caddy): ретрай подключения к фронту МЕРЫ — остаток окна подмены (#3274, часть 2a/3)
Merged
#3442 fix(deploy): подменять фронт МЕРЫ отдельной командой — окно простоя 30–90 с уходит (#3274, часть 1/2)
Merged
#3441 fix(smoke): «ответа нет» ≠ «неверный код» — ретраи и честная формулировка в смоуке периметра МЕРА
Merged
#3438 МЕРА B2C: микроразметка schema.org и картинки превью ссылок
Merged
#3437 Версия согласия ПДн отстала от новой редакции политики — деплой МЕРЫ стоял, прод обновился наполовину
Merged
#3436 МЕРА B2C: Яндекс.Метрика и GA4 + открытие сайта для поисковой индексации
Merged
#3317 ЕЭСК: бинд-параметр в SQL-комментарии молча ронял все 71 UPDATE две недели
Merged
#3318 [SECURITY] Caddy: голый IP по HTTP спрашивал пароль пилота открытым текстом
Merged
#3435 fix(msk-collector): ретрай заливки батча на обрыве ssh
Merged
#3434 fix(msk-collector): страница выдачи — 50 карточек, не 60
Merged
#3433 fix(msk-collector): пересоздавать свою вкладку каждые 75 загрузок
Merged
#3432 feat(tradein/geocoder): регион-параметризация геокодера — region_code в geocode()/known_city_hint, --region-code у скрипта сделок, region_code у geocode-missing (#3051)
Merged
#3431 feat(tradein/estimator): deal_city_price_bands по ключу (region_code, city) — миграция 298, refresh per-region (#3051 sub-PR B)
Merged
#3430 test(tradein): тесты трека «Москва» — импорт ДКП по 77, чекпоинт per-source, wildcard-хендлер, регион-скоуп коридора, миграция 289, deploy-скрипт (#3051)
Merged
#3429 feat: bulk-дампы открытых данных ФНС по юрлицам + lookup по ИНН
Merged
#3428 feat(mera): слой ДТП (dtp-stat/ГИБДД) в PostGIS + радиусные агрегаты
Merged
#3427 feat(mera): макро-ряды ЦБ РФ — ипотека по субъектам и ключевая ставка
Merged
#3426 feat(mera): загрузчик реестра МКД АИС ФРТ → обогащение houses
Merged
#3425 fix(msk-collector): ограниченный ретрай goto на таймауте навигации
Merged
#3424 fix(msk-collector): узкий ретрай page.content() на гонке перенавигации
Merged
#3422 feat(tradein/rosreestr): импорт ДКП по Москве (77) — canonical_city, raw_payload, wildcard-расписание rosreestr_dkp_import_*, per-source чекпоинт (#3051)
Merged
#3423 feat(tradein/estimator): регион-скоуп ДКП-коридора — фильтр по deals.region_code (#3051 PR-A)
Merged
#3421 feat(#3051): deals.doc_type + регион и тип документа как параметры импорта Росреестра
Merged
#3420 feat(#2989): локальный ручной сборщик SERP Авито по Москве и МО
Merged
#3409 chore(tradein): последние обходы пула прокси — admin cian-login/domclick-debug через фабрику; снят костыль _PoolCurlConfig (#3197, #3386)
Merged
#3407 fix(tradein/proxy): операции пула прокси уходят с event loop публичного /estimate — acurl_proxy_url через to_thread (#3398 п.1)
Merged
#3406 fix(cian): капча видна в отчёте прогона (ban_kinds.platform по типу) и банит узел на curl-пути (#3402 follow-up)
Merged
#3405 feat(tradein/proxy): прогон знает свой узел, а снятый бан перестаёт стирать историю (#3404)
Merged
#3403 fix(cian): капча/страница ошибки Циана (HTTP 200) — отказ площадки в сайдкаре и kit, ротация аренды внутри батча (#3402)
Merged
#3400 refactor(tradein): одна реализация scrape_runs — kit orchestration/runs.py, app-модуль = алиас; counters везде мержатся (#3390)
Merged
#3399 fix(tradein/estimator): yandex/cian valuation в /estimate через пул прокси; честный лог при пустом пуле (#3398)
Merged
#3397 fix(tradein/estimator): IMV-путь /estimate через пул прокси; пустой пул — честная деградация без IMV (#3386 п.в)
Merged
#3396 fix(scraper-kit/cian): фаза houses cian_city_sweep через пул прокси + стоп на пустом пуле (#3394)
Merged
#3395 fix(tradein): прогоны, оборванные деплоем (interrupted=1), невидимы лестницам стриков и honest-status-гейтам (#3393)
Merged
#3392 fix(scraper-kit/scheduler): SIGTERM-drain помечает in-flight прогоны interrupted=1 при hard-cancel; честный лог drain'а (#3391)
Merged
#3389 fix(tradein/yandex): newbuilding resolve/fetch_jk через пул прокси + стоп на пустом пуле (#3197, точки 2-3)
Merged
#3388 fix(tradein): пустой пул на старте батча пишет no_proxy_stop у cian/domclick/avito detail-бэкфиллов (#3384)
Merged
#3383 fix(tradein): гейт против сдвига разряда (×10) в offer_price_history у всех писателей + миграция 286 (#3376)
Merged
#3387 fix(tradein/compose): USE_PROXY_POOL_CURL/BROWSER и сервису backend — не только scraper (#3386)
Merged
#3382 fix(tradein/cian): cian_history_backfill идёт через пул прокси + стоп на пустом пуле (#3197, точка 1 из 3)
Merged
#3378 fix(scraper-kit/yandex): full-load on_bucket отдаёт список лотов бакета, а не int (#3375)
Merged
#3379 fix(browser-sidecar): бан-страница площадки отдаётся 403, а не 500 (#3288 п.C)
Merged
#3381 fix(deploy-metrics): пересоздавать alloy после выката конфига + гейт по иноду (#3380)
Merged
#3377 fix(ops/alloy): второй слой маскировки query-секретов на сборщике логов (apps + infra) — defence-in-depth к #3353
Merged
#3371 fix(tradein/rbac): аноним на admin-префиксе получает единый 404 — существование admin-ручек снаружи не перебирается
Merged
#3373 fix(scraper-kit): yandex _leaf под CAP не пишется в done-леджер как complete — capped_buckets отдельным счётчиком
Merged
#3372 fix(scraper-kit): domclick city sweep — done_buckets во всех семи выходах, а не только в дрейне и одном бане
Merged
#3370 fix(tradein/domklik): diff_percent — проценты из соседних price_rub вместо рублей источника, гейт отвергает |x|>100, миграция 285 пересчитывает историю
Merged
#3374 chore(smoke): периметр-смоук бьёт в реальный роут истории — /api/v1/trade-in/history, а не в несуществующий /api/v1/history
Merged
#3367 fix(tradein/avito): брейкер добора считает долю только по отказам площадки — сайдкар/пустой пул не рвут прогон и не красят его banned
Merged
#3363 fix(scraper-kit): дрейн-метка interrupted=1 у domclick sweep и трёх full-load — резюм после SIGTERM для всех функций с чекпоинтом
Merged
#3364 fix(tradein/yandex): недорендеренная карточка — отказ, не успех: структурный маркер encryptedPhones + порог размера, карточка остаётся в очереди
Merged
#3362 fix(scraper-kit): containment до пробы у cian и yandex — резюм full-load не пере-пробивает готовые полосы
Merged
#3361 fix(tradein/payments): отказ банка на Init не блокирует покупателя на 30 минут — мёртвая попытка уходит из предиката живого платежа
Merged
#3365 fix(scraper-kit): свежесть источника — по последнему прогону, принёсшему данные, а не по статусу done
Merged
#3357 fix(scraper-kit): бан площадки не гасит здоровье узла для всех источников — report_ban по паре узел×источник вместо mark_health(ok=False)
Merged
#3356 fix(tradein/domclick): дом-поля карточки → houses, backfill total_units/material_* из raw_payload (миграция 284)
Merged
#3351 fix(scraper-kit): пропуск по куке двигает next_run_at на interval_minutes, а не на случайный час завтра
Merged
#3352 fix(tradein/rbac): 401-оракул закрыт — несуществующий путь под публичным префиксом отвечает так же, как любой другой мусор
Merged
#3358 fix(scraper-kit): резюм exhaustive не пере-пробивает готовые полосы — containment по done-леджеру до пробы, 17 911 запросов → 0
Merged
#3350 test(tradein/auth): флаки-замер «< 500 мс» заменён проверкой механизма — bcrypt обязан исполняться вне потока event loop
Merged
#3347 fix(tradein/backfill): save-False у yandex/avito больше не теряет попытку — attempted == сумма исходов у всех трёх бэкфиллов
Merged
#3353 fix(tradein): секрет вебхука GlitchTip не попадает в access-log — скруббер query-секретов + приём из заголовка
Merged
#3349 fix(tradein/front): число оценочной модели площадки подписано «рынок из N объявлений — в расчёт не входит» при тонком рынке
Merged
#3348 fix(caddy): окно деплоя — 503 «Сервис обновляется» с Retry-After вместо голого 502 на публичных путях МЕРЫ
Merged
#3346 fix(scraper-kit): метка дрейна interrupted=1 во всех city-свипах — yandex/cian/newbuilding больше не объявляют недоделанный обход готовым
Merged
#3336 fix(tradein/estimator): thin-market гейт IMV перестаёт быть витринным — рынок из 1 объявления больше не двигает headline и range_high
Merged
#3331 fix(tradein/auth): единый источник ролей — БД first, YAML только legacy-fallback (закрывает эскалацию до admin и 403 своим)
Merged
#3335 fix(tradein/domclick): обрыв «пул пуст» и save-False больше не теряют попытку — attempted == сумма исходов
Merged
#3330 fix(scraper-kit): чекпоинт avito_city_sweep доживает до финализатора — 0/67 прогонов писали done_buckets
Merged
#3345 fix(mera-public): подписи метрик снижения цены и бенчмарк отчёта не называют площадку
Merged
#3344 fix(tradein/pdf): клиентский PDF не называет площадки-источники — «Источник N», как в веб-отчёте (#3341)
Merged
#3342 fix(mera-public): публичная копия — сервис не называет себя оценщиком, площадки-источники не названы
Merged
#3340 fix(caddy): периметр МЕРЫ — секрет убран из анонимного пути, чанки закрытого контура не раздаются с meraocenka
Merged
#3337 fix(mera-public): честный текст покрытия и разные квартиры в раундах игры
Merged
#3334 fix(deploy): гейт деплоя ПТИЦЫ — мёртвый worker/beat/frontend больше не уезжает зелёным
Merged
#3329 fix(site_finder): Россети — стабильный ключ вместо сессионного fid, дедуп power_supply_centers ×10 → ~481
Merged
#3328 fix(tradein-v2): пустая выборка сделок больше не рисуется нулями — «0,00 млн · −100%» зелёным исчезает
Merged
#3327 fix(mera-public): этаж и состояние переживают переход на /estimate
Merged
#3326 v2: бейдж «Мои отчёты» показывает «использовано / доступно» — остаток квоты был не виден нигде
Merged
#3325 auth: тестовый аккаунт buyer1 (pilot) для потенциального покупателя
Merged
#3314 imv: HTTP 429 больше не приговаривает дом навечно
Merged
#3313 feat(tradein/avito): бан площадки не менял IP — прогон добивался в тот же забаненный адрес (#3283)
Merged
#3308 feat(tradein/browser): имитация чтения страницы человеком, целиком opt-in (#3283)
Merged
#3309 fix(tradein/support): один повтор терял каждое одиннадцатое сообщение в поддержку
Merged
#3306 fix(tradein/browser): снятый PoW-челлендж отдавался с протухшим статусом, и карточка выбрасывалась (#3283)
Merged
#3305 fix(tradein/proxy): успешный fetch затирал exit_ip и latency_ms в NULL (#3283)
Merged
#3304 fix(tradein/avito): бан-страница площадки уезжала в транспортные сбои и не банила узел (#3283)
Merged
#3302 feat(tradein/avito): ротация exit-IP по счётчику попыток в доборе карточек
Merged
#3303 fix(tradein/proxy_pool): истёкший прокси больше не выдаётся в аренду
Merged
#3301 chore(tradein/scheduler): добор карточек Яндекса и Циана шёл раз в сутки и простаивал
Merged
#3300 fix(tradein/avito): browser-путь добора не смотрел на HTTP-статус — отказ площадки уходил в ошибку парсинга (#3297)
Merged
#3298 feat(tradein/proxy_rotation): ротация IP через mobileproxy.space (aproxy.site)
Merged
#3292 лендинг: типографский ритм и мобильные отступы — подача без новых обещаний
Merged
#3293 первый экран: оговорки вынесены из блока преимуществ
Merged
#3296 липкая панель прячется, пока герой в кадре
Merged
#3290 лендинг: пятая плитка падала на вторую строку, столбец «Расхождение» читался пустым
Merged
#3295 числа лендинга: покрытие 88 % было выше всего диапазона представительных пересборок
Merged
#3291 витрина: строка без улицы больше не открывает страницу и игру
Merged
#3289 бэктест: выборка вразброс — ORDER BY id DESC садится на несколько улиц
Merged
#3294 «Для бизнеса» вела на форму входа — заведена страница /business
Merged
#3282 P1: лендинг отдавался без витрины — имя сервиса двоится между продуктами
Merged
#3287 fix(tradein/domclick): бан сайдкара наследуется от httpx-ошибки и уезжал в транспортные сбои (#3283)
Merged
#3286 fix(tradein/domclick): таймаут сайдкара и пустой пул считались отказами площадки (#3283)
Merged
#3285 feat(tradein/cian): у Циана не было добора карточек — только побочный эффект задачи про историю (#3284)
Merged
#3281 контраст: 32 → 2 → 0, проверено на живой странице; сторож теперь ловит выбор токена, а не только его значение
Merged
#3275 #3194: ключ шифрования кук и сами куки больше не уезжают в GlitchTip
Merged
#3279 лендинг: этаж перестал теряться на переходе к проверке
Merged
#3278 тикер: разброс показанных строк под лентой — она больше не опровергает заголовок
Merged
#3277 лендинг: 32 нарушения контраста WCAG AA — затемнены токены, поставлен сторож
Merged
#3276 подсказки адреса: пустые части адреса выпадают, а не печатаются
Merged
#3273 лендинг: имя боевого сервера убрано из пользовательской копии + гейт
Merged
#3269 витрина: разброс показанных строк рядом с медианой всей сверки
Merged
#3268 fix(tradein/domclick): «система защиты от протечек» в объявлении читалась как блок QRATOR
Merged
#3271 test(tradein): гонка на sleep(0.05) вешала тест потолка оценок на 120с (#3270)
Merged
#3267 fix(tradein/avito): браузерный путь ходил на каждую карточку холодным (#3251)
Merged
#3266 fix(tradein/domclick): свип брал BFF навигацией браузера — теперь подзапросом (#3264)
Merged
#3265 fix(tradein/domclick): свип ходил на QRATOR без кук и вис на PoW каждым запросом (#3264)
Merged
#3262 fix(tradein/browser): куки клались на поддомен и вечно держали QRATOR-загрузчик (#3261)
Merged
#3260 fix(tradein/browser): переход с Яндекса на площадку должен быть настоящим, а не заявленным
Merged
#3259 feat(mera/estimate): предзаполнять этажность, год и тип дома из справочника (UI)
Merged
#3257 feat(mera/estimate): ручка фактов дома для предзаполнения формы + гейт «этаж не выше дома»
Merged
#3258 feat(tradein/browser): на выдачу площадки заходить через настоящий поиск Яндекса, а не голым goto
Merged
#3255 fix(mera/estimate): перефит хедоники поверх area-бакетного ratio — крупное жильё занижалось на 21%
Merged
#3254 fix(mera/backtest): свежая фикстура не реплеилась, а разрез по сегментам врал по построению
Merged
#3250 feat(tradein/browser): ходить по Домклику как человек — с Referer и с перезагрузкой зависшего рукопожатия
Merged
#3249 docs(mera/estimate): сегментные множители откалиброваны на артефакте измерения — предупреждение в конфиге
Merged
#3247 fix(mera/b2c): восемь находок финального аудита прода — включая три моих собственных
Merged
#3245 feat(mera/b2c): настоящая карта улицы в карточке игры + мобильный лэндинг перестал съедать 45% экрана
Merged
#3244 perf(tradein/browser): якорная вкладка выдачи вместо переоткрытия origin на каждую карточку
Merged
#3243 feat(mera/b2c): витрина лэндинга переезжает с выдуманных чисел на замеренные
Merged
#3242 feat(mera/estimate): характеристики дома из справочника, а не только из формы
Merged
#3241 fix(tradein/domclick): подтверждённый отказ площадки уехал в ветку «сбой транспорта» и перестал банить узел
Merged
#3240 docs(tradein/domclick): два комментария описывали пул, которого нет с миграции 253
Merged
#3238 fix(smoke): периметр требовал 401 от вебхука, который PR-D3 открыл намеренно
Merged
#3235 chore(site-finder): удалить мёртвый код — 14 неиспользуемых символов
Merged
#3237 fix(tradein/domclick): мы считали блоком собственное недоделанное рукопожатие
Merged
#3236 feat(mera/b2c): новый дизайн становится корнем meraocenka.ru, функционал старого перенесён
Merged
#3233 fix(mera/b2c): выключенная ручка расчёта подтверждала своё существование и печатала схему
Merged
#3226 fix(mera/v2): форма принимала этаж больше этажности дома
Merged
#3231 feat(mera/b2c): платёжный роутер, статус-машина и доставка купленного (за флагом)
Merged
#3232 chore(tradein): две ручки ротации без читателей и врущий комментарий над ними
Merged
#3224 chore(tradein): четыре символа, на которые нет ни одной ссылки
Merged
#3230 feat(mera/b2c): анонимный расчёт и повторное чтение результата по токену (за флагом)
Merged
#3229 feat(mera/b2c): лента сделок и раунды игры — из реальных сделок с реальным прогнозом
Merged
#3228 feat(mera/b2c): метрики лэндинга считаются по проду, а не лежат литералами
Merged
#3227 fix(gendesign): FDW-роль не могла читать районы ЕКБ — витрина сделок МЕРЫ теряла район
Merged
#3223 feat(mera/b2c): раздел статей и хаб документов (макет 29.08) + числа статьи заменены на замер
Merged
#3222 fix(tradein/domclick): detail-бэкфилл ходил в сайдкар мимо прокси-пула (#3197 ч.1)
Merged
#3221 feat(mera/b2c): результат проверки в облике отчёта (макет 29.08 «МЕРА отчёт»)
Merged
#3214 chore(ci): node 20 отслужил — рантайм фронтов и оба CI-джоба на node 24 LTS
Merged
#3218 chore(deps/site-finder): vitest 2 → 3 — заодно уходит вся dev-цепочка vite/esbuild
Merged
#3213 chore(deps): три места, где сборка не воспроизводится — лок-призрак, глоб и неприпинованный сайдкар
Merged
#3217 fix(tradein/domclick): перезапуск браузера на карточку уничтожал пропуск QRATOR (#3212)
Merged
#3216 chore(deps/mera): vitest 2 → 3 — заодно уходит вся dev-цепочка vite/esbuild
Merged
#3215 feat(mera/b2c): лэндинг v3 доведён до макета 29.08 — лента, игра, два пути, возражения, статьи
Merged
#3211 fix(deps/mera): 6 уязвимых пакетов во фронт-локе — пересборка без правки package.json
Merged
#3210 fix(deps/site-finder): 19 уязвимых пакетов во фронт-локе — пересборка без правки package.json
Merged
#3207 fix(deps/site-finder): 53 advisory в backend/uv.lock — точечный апгрейд восьми пакетов
Merged
#3209 feat(glitchtip): включить встроенный MCP-сервер образа 6.1.6
Merged
#3206 fix(tradein/domclick): одна карточка на процесс браузера — перезапускать camoufox после каждой страницы (#3205)
Merged
#3204 fix(tradein/domclick): 401 — тот же отказ площадки, что 403, а классифицировался как unknown (#3196)
Merged
#3203 chore(rules): убрать осиротевшие после PR #3198 ветки bot-pipeline
Merged
#3201 fix(tradein/scrapers): ABORT-лог называл серию блоков, хотя рвал прогон по доле
Merged
#3202 fix(tradein/scrapers): диагноз блока из HTTP-статуса, а не из маркеров чужой площадки (#3196)
Merged
#3200 docs(tradein/scrapers): в репозитории лежало опровергнутое обоснование хранилища сессий Яндекса
Merged
#3199 fix(tradein/browser): дефолт block_images для avito вернулся к True — гипотеза не подтвердилась
Merged
#3198 chore(claude): retire autonomous bot-pipeline
Merged
#3193 fix(tradein/domclick): каждый запрос получал чистый браузерный контекст, куки реплеились протухшими (#3190)
Merged
#3195 feat(tradein/scrapers): хранилище авторизованной сессии Яндекс.Недвижимости
Merged
#3188 fix(tradein/scrapers): обрыв по серии блоков рвал каждый прогон, включая здоровые
Merged
#3186 fix(tradein/browser): сайдкар безусловно резал картинки, а camoufox предупреждал, что за это ловят WAF
Merged
#3183 fix(tradein/scrapers): диагноз блока терялся при схлопывании, а в алерт шла непроверенная причина
Merged
#3176 fix(tradein/ingest): rosreestr_dkp_import курсор переживает рестарт (#3168)
Merged
#3174 fix(tradein/domclick): исчерпание пула прокси помечалось как отказ сбора (#3118)
Merged
#3173 fix(tradein/yandex): чекпоинт combo ставился до save_listings, не после (#3170)
Merged
#3169 feat(tradein/scraper): чекпоинты для avito_newbuilding_sweep — страница как единица (#3074)
Merged
#3167 fix(ops/metrics): тема «метрики» задаётся дефолтом, а не ручным заведением секрета
Merged
#3165 feat(ops/metrics): инфра-алерты уезжают в тему «метрики», клиенты остаются в «алертах»
Merged
#3166 fix(tradein/tgbot): в логе сетевого сбоя не было причины — только пустота после двоеточия
Merged
#3162 fix(ops/metrics): Alertmanager отвечал 404 на /api/v2/alerts — Prometheus писал мимо
Merged
#3160 fix(ops/metrics): Prometheus не видел ни одного Alertmanager — цель file_sd осталась пустой
Merged
#3153 fix(frontend): нейтральный fallback ещё в 4 enum-lookup-местах (#2452)
Merged
#3152 fix(tradein/geocode): бюджет прогона проверяется внутри батча (#3151)
Merged
#3150 ci(tradein): гейт невалидных индексов в CI (#2990)
Merged
#3149 fix(tradein/scrapers): три прод-пути остались на chrome120, пока kit ушёл на chrome146
Merged
#3146 feat(ops): off-box копия рантайм-конфига — зашифрованной, иначе никак
Merged
#3145 fix(tradein/avito): браузерный бэкфилл ходил мимо пула прокси
Merged
#3144 fix(ops/metrics): postgres-exporter печатал пароль БД в лог при каждой ошибке
Merged
#3143 fix(tradein/avito): повтор после блока терял прокси и уходил с адреса машины
Merged
#3142 fix(ops/metrics): правки конфига Alertmanager молча не доезжали до контейнера
Merged
#3141 chore(ops): restore-дрель для базы tradein — она не покрывалась вовсе
Merged
#3140 feat(tradein/domclick): чекпоинты для city_sweep — корзина как единица возобновления (#3118)
Merged
#3136 feat(observability): кнопка «Принял в работу» под клиентским инцидентом (#3078)
Merged
#3139 fix(mera/v2): плашка версии лежала на главной кнопке и съедала клик
Merged
#3138 fix(mera/b2c): подсказка дублировала адрес, а числа в результате спорили
Merged
#3137 fix(mera/perimeter): www-формы доменов МЕРА обрывали TLS вместо редиректа
Merged
#3135 fix(observability): cadvisor перестаёт сканировать overlay-слои — упирался в лимит памяти
Merged
#3134 fix(observability): healthcheck Alertmanager стучится по правильному пути — контейнер был вечно unhealthy
Merged
#3133 fix(tradein): срок жизни оценки 24ч → 720ч — отчёты исчезали раньше, чем ими успевали воспользоваться
Merged
#3132 fix(tradein/auth): лимит попыток входа 5 → 20 на адрес — офис за одним NAT запирал сам себя
Merged
#3131 fix(mera/ui): карта перестала перекрывать интерфейс, страница помещается в окно
Merged
#3129 fix(ops): оповещения уходят в тему «алерты», а не в переговорку (#2203)
Merged
#3128 feat(observability): клиентский инцидент зовёт дежурного поимённо + чинит сломанное продолжение команды (#3078)
Merged
#3130 feat(tradein/db): дроп дублирующего listings_geom_idx (#2997)
Merged
#3127 fix(observability): конфиг Alertmanager читается контейнером — гейт падал на своих же правах (#3078)
Merged
#3125 feat(ops): сторож расхождения «прод ↔ main» — недоехавший деплой перестаёт быть молчаливым (#3029)
Merged
#3126 feat(observability): токен алертов приходит из секретов Actions, а не только с машины (#3078)
Merged
#3124 fix(tradein/scheduler): boot-reap виден и при нуле (#3122)
Merged
#3123 feat(tradein/scheduler): boot-reap — прогоны предыдущего контейнера снимаются на старте (#3122)
Merged
#3121 feat(tradein/matching): region_code у houses — вывод, а не выдумка (#3051 п.4)
Merged
#3120 chore(ops): адрес Poincare — 188.124.37.140 вместо заменённого 188.246.224.93 (#3110)
Merged
#3116 feat(tradein/geo): реестр регионов — единственный источник гео-границ (#3051, шард 1a)
Merged
#3117 feat(tradein/scraper): чекпоинт по якорям для cian_city_sweep (#3074)
Merged
#3115 fix(observability): пароли БД не уезжают в Loki — скруббер учётных данных в Alloy (#3114)
Merged
#2661 fix(tradein/estimate): фильтр свежести в якоре дома и знаменателе коэффициента выкупа (#2656)
Merged
#3113 fix(observability): у Grafana остаётся один вход — внешний basic_auth снят с витрины (#3078)
Merged
#3112 feat(tradein/scraper): чекпоинт по якорям для avito_city_sweep (#3074)
Merged
#3111 feat(observability): алерты адресуются в топик форумной группы + проверка конфига до подъёма (#3078)
Merged
#3109 fix(observability): cAdvisor 0.55.1 — 0.52 не видит контейнеры на Docker 29
Merged
#3108 fix(observability): контейнерные метрики терялись целиком + два хвоста стека
Merged
#3107 chore(hooks): точечный allowlist на три ключа метрик вместо снятия гарда
Merged
#3106 fix(observability): агент не падает из-за переменной чужой роли + DSN экспортеров собираются (#3078)
Merged
#3105 fix(observability): стек не поднимался — привилегированную роль спрашиваем у контейнера, а не угадываем (#3078)
Merged
#3104 ci(caddy): гард — import обязан быть покрыт volume-маунтом
Merged
#3103 fix(caddy): смонтировать сниппеты метрик — без них Caddy валит ВЕСЬ прод
Merged
#3102 feat(observability): /metrics в обоих бэкендах — счётчики, задержка, дашборд приложений
Merged
#3099 feat(observability): стек метрик и логов — Prometheus, Loki, Grafana на Beget, агенты на обоих хостах
Merged
#3101 fix(mera/ui): карточка прогресса перестала выдумывать стадии (#3081, вариант A)
Merged
#3100 feat(tradein/yandex): is_pro_seller из агентского блока + бэкфилл (#3063 п.2)
Merged
#3098 feat(tradein): чекпоинты #3074 — наследование при claim + yandex_city_sweep
Merged
#3097 feat(tradein/estimate): потолок одновременных оценок — 4 слота, быстрый 429 (#3082)
Merged
#3096 fix(tradein/observability): результат detail-бэкфиллов доезжает до total_seen (#3044)
Merged
#3095 fix(ops): алерт не теряется от одного сетевого отказа — ретрай в обеих notify() (#3059)
Merged
#3093 fix(tradein/deploy): подключить selectel-оверрайд — иначе после переезда бот умрёт молча
Merged
#2546 feat(mera/b2c): анти-абуз для анонимного трафика — этап 2 из 8
Merged
#3092 fix(ops): страж повторной заливки перестал молча пропускаться
Merged
#3091 chore(ops): backup-couchdb.sh исполняемый, как остальные бэкапы
Merged
#3090 feat(ops): у волта Obsidian появился автоматический бэкап
Merged
#3089 fix(ops): восстановление не падает в хвосте из-за незаведённых ролей
Merged
#3088 fix(caddy): разделение сайтов по хостам доходит до контейнера
Merged
#3087 fix(ci): стек CouchDB после переезда остаётся на своём хосте
Merged
#3086 fix(ops): бэкап без выгрузки в S3 падает, а не рапортует успех
Merged
#3084 chore(ci): деплой не убивает worker посреди скрап-прогона (заплатка до #3074)
Merged
#3079 feat(ci): деплой проверяет, к тому ли хосту подключился
Merged
#3080 feat(ops): лёгкий Postgres на Beget под forgejo и glitchtip (вариант А)
Merged
#3076 feat(tradein/domklik): ЖК в свою колонку вместо только raw_payload
Merged
#3077 docs(delegation): бюджет пишется в промпт сабагента, а не держится в голове
Merged
#3066 feat(tradein/deactivate-stale): страховочные рельсы объёма снятия (PR-B)
Merged
#3073 feat(ops): бэкапить конфигурацию Forgejo, а не только его содержимое
Merged
#3072 chore(ops): развести crontab по хостам под переезд
Merged
#3071 chore(ci): синхронизировать /opt/gendesign на остающемся хосте
Merged
#3070 feat(ops): запасной канал алертов на случай недоступного Telegram
Merged
#3069 fix(tests): объявить два живых теста #3063 в skip_allowlist — main красный, деплой встал
Merged
#3062 refactor(caddy): разделить site-блоки по хостам под переезд
Merged
#3067 fix(scraper-kit): бедный re-scrape больше не стирает признаки продавца
Merged
#3068 feat(tradein/domklik): пробросить isRosreestrApproved в колонку
Merged
#3065 fix(avito): считать HTTP 439 блокировкой, а не концом выдачи
Merged
#3060 fix(ops): закрепить рабочий адрес api.telegram.org на новом хосте
Merged
#3058 chore(compose): параметризовать ресурсы postgres под переезд на новый хост
Merged
#3056 fix(tradein/deactivate-stale): пол переобхода — LATERAL вместо equality-join по дате
Merged
#3055 feat(tradein/estimate): внешние оценки не ждутся в запросе — 9 секунд превращаются в 1
Merged
#3054 fix(tradein/avito): бэкфилл простаивал 23 часа из 24 — каденс был суточным
Merged
#3050 chore(ops): скрипты аудита и первичной настройки выделенного сервера Selectel
Merged
#3049 fix(tradein/avito): detail_backfill ходил curl'ом, который не решает PoW-челлендж
Merged
#3048 fix(tradein/avito): парсер карточки читал только первый блок параметров — параметры дома терялись молча
Merged
#3038 fix(tradein/scraper-kit): актуализация отпечатка Авито — impersonate, Sec-Fetch-Site, referer, проверка антибот-кук
Merged
#3025 ops(backup): missed-run detection + Forgejo code/DB backup to S3
Merged
#3026 fix(ops): дрилл восстановления ждал БД по сокету и умирал на старте настоящего сервера
Merged
#3046 fix(tradein/browser): дожидаться QRATOR PoW-челленджа Авито вместо тихой заглушки
Merged
#3042 feat(tradein/avito): путь вторички для якорного и citywide-обхода (#3033, follow-up)
Merged
#3040 feat(tradein/avito): house-поля с детальной страницы доезжают в houses (#3036)
Merged
#3041 fix(tradein/avito): страница SERP отдаёт 60 карточек, а не 50 — лишние 17% запросов
Merged
#3039 feat(tradein/avito): полный обход качает вторичку родным фильтром пути (#3033)
Merged
#3011 fix(db/ci): чистый старт БД не падает на 077 и не может уехать на пустой схеме
Merged
#3024 feat(tradein/v2): позиция квартиры на рынке — плашка на карточке рекомендованной цены (#2899)
Merged
#3023 fix(ci): деплой падает громко, если :latest отстаёт от головы по компоненту (#2950)
Merged
#3022 chore(format): нормализация под ruff 0.15.20 — 161 файл, только формат (#2864)
Merged
#3021 chore(tooling): pre-commit, pyproject и uv.lock — один ruff 0.15.20 (#2864)
Merged
#3019 fix(ops): бэкапы — +x на deploy-скриптах при деплое tradein, тихий s3 cp (#3005)
Merged
#3018 fix(best-layouts): avg_area_m2 = NULL вместо 0 при пустом окне сделок (#2867)
Merged
#3020 feat(db): GiST по (geom::geography) на houses — матчинг идёт по индексу (#2997)
Merged
#3017 fix(tradein): неудача резолва yandex_jk_slug помечает дом — очередь не упирается в одни и те же пять (#2924)
Merged
#3016 fix(tradein): апсерт не переписывает неизменившуюся строку — гейт IS DISTINCT FROM + МСК-день (#2992)
Merged
#3014 fix(data): партиции rosreestr_deals на Q2–Q4 2026 + загрузчик доходит до файла (#2998)
Merged
#3015 feat(tradein/estimator): штраф за неизвестный год/тип дома — флагом, default OFF (#2936)
Merged
#3010 feat(tradein): ручка «дома, уехавшие от собственных объявлений» (#2996)
Merged
#3013 fix(ops): проверка трейлера дампа падала на grep — ведущие -- принимались за опции (#2203)
Merged
#3012 chore(db): Postgres tradein уходит со стоковых настроек — конфиг в compose
Merged
#3008 feat(tradein): secondary_only — параметр расписания, выброшенное считается (#1781)
Merged
#3009 fix(ops): выгрузка бэкапа в S3 не проходила TLS — у aws-cli свой CA-бандл (#2203)
Merged
#3006 fix(ptica): «геологический риск» больше не выводится из шума (#2934)
Merged
#3007 fix(tradein/search): снять STORED-generated с listings.tsv, не пересчитывать на каждом UPDATE
Merged
#3004 fix(ops): бэкап не теряет роли, не глотает ошибки и умеет уезжать с машины (#2203)
Merged
#3003 fix(ptica): три места, где код делал не то, что говорил (#2464)
Merged
#3002 docs(ptica): две докстроки обещали то, чего в коде нет (#2464)
Merged
#3001 fix(ptica): подпись сетевого обременения называет все виды, а не первый (#2464)
Merged
#3000 fix(ptica): невозможные параметры регламента не превращаются в деньги (#2464)
Merged
#2999 fix(ptica): download_binary переживает транзиентный ответ, как и get_json (#2464)
Merged
#2987 fix(ptica): ключ gisogd_permits — id документа на портале, а не (группа, номер) (#2986)
Merged
#2988 docs(ptica): докстрока не обещает защиты, которой нет, и не шлёт на мёртвый хост (#2464)
Merged
#2984 fix(ptica): backfill act_date у 11 строк, куда уехала дата Генплана-2004 (#2464)
Merged
#2983 fix(ptica): лоты без площади — своя корзина, а не «<25 м²» (#2464)
Merged
#2981 fix(ptica): act_date — дата акта об изъятии, а не первой попавшейся ссылки (#2464)
Merged
#2980 fix(ptica): тип постановления — по первому упоминанию, а не по порядку проверок (#2464)
Merged
#2979 fix(ptica): «не продана» перестаёт означать «продана» (#2464)
Merged
#2978 fix(ptica): осиротевшие прогоны Объектива закрываются, а не висят вечно (#2464)
Merged
#2977 fix(workers): убрать max_retries, который ничего не делает (#2464)
Merged
#2976 fix(ptica): у пользователя не может быть двух дефолтных профилей весов (#2464)
Merged
#2975 fix(ptica): на worker_ready зомби помечается ЛЮБОЙ 'running', а не только со снапшотом (#2464)
Merged
#2974 fix(ptica): «объекта нет в БД» считается пропуском, а не сбоем (#2464)
Merged
#2973 fix(ptica): загрузчик теплоснабжения фиксирует по организациям, а не одной транзакцией (#2464)
Merged
#2972 fix(ptica): упавший прогон Объектива помечается failed, а не висит running вечно (#2464)
Merged
#2971 fix(ptica): серия WAF-блоков прерывает батч каталога, а не гонит его до конца (#2464)
Merged
#2970 fix(ptica): ключ синглтон-лока kn-свипа зависит от множества, а не от порядка (#2464)
Merged
#2969 fix(ptica): WAF-блок прерывает backfill_parcel_geom, а не гонит его дальше по кварталам (#2464)
Merged
#2968 docs(ptica): шесть мест, где документация расходилась с кодом (#2464)
Merged
#2966 fix(ptica): land_reservation перестаёт копить дубли — 91% таблицы были копиями (#2464)
Merged
#2965 fix(ptica): scope=manual_list перестаёт создавать задание из пустоты (#2464)
Merged
#2964 fix(ptica): два запроса connection-capacity перестают травить общую сессию (#2464)
Merged
#2963 fix(ptica): выручка и сделки в KPI лидов названы по своему охвату (#2464)
Merged
#2961 fix(ptica): число ЗОУИТ перестаёт подписываться как число типов (#2464)
Merged
#2960 fix(ptica): успехи батча каталога фиксируются по ходу, а не одним commit'ом в конце (#2464)
Merged
#2959 fix(ptica): HTML-экспортёр перестаёт выбрасывать легаси-зонирование, которое сам же проверил (#2464)
Merged
#2958 fix(ci): ожидание докер-лока оставляет след в логе (#2950)
Merged
#2957 fix(ptica): свежесть data-table источника считается по успешным строкам (#2956)
Merged
#2955 fix(ci): докер-секции прод-деплоев исключают друг друга через host-lock (#2950)
Merged
#2954 fix(tradein/geocoder): темп Nominatim сдерживается перед запросом, а не после успеха (#2953)
Merged
#2952 fix(ci): прод-деплои в одну группу concurrency — прун одного убивал pull другого (#2950)
Merged
#2951 fix(ptica): шесть lookup'ов /analyze глотали ошибку БД без SAVEPOINT (#2464)
Merged
#2949 fix(ptica): два блока analyze_parcel глотали ошибку БД без SAVEPOINT (#2464)
Merged
#2948 test(tradein): гейт «снять noindex можно только вместе с плейсхолдерами» (#2904)
Merged
#2947 fix(ptica): «0 мм осадков» перестаёт означать «данных нет» (#2464)
Merged
#2946 fix(ptica): resume_geo_job больше не возобновляет что попало (#2464)
Merged
#2945 fix(ptica): сноска концепт-PDF печатает фактический срок распродажи, а не «30 мес» (#2464)
Merged
#2944 fix(ptica): нечисловое значение от OSRM/ORS больше не даёт 500 вместо деградации (#2464)
Merged
#2943 docs(ptica): три комментария, утверждавших не то, что делает код (#2464 кластер H)
Merged
#2942 fix(ptica): дрейф формы ответа DaData не роняет весь гео-проход (#2464)
Merged
#2941 fix(ptica): проба глубины очереди перестаёт висеть без таймаута (#2464)
Merged
#2940 fix(ptica): пустой слой риск-зон перестаёт означать «рисков нет» (#2934)
Merged
#2938 test(ptica): снятие SAVEPOINT теперь роняет тест во всех местах кластера A (#2464)
Merged
#2939 fix(ptica): «Риск: Низкий» больше не выглядит вердиктом (#2934)
Merged
#2937 fix(ptica): job_settings не отравляет чужую сессию при сбое БД (#2464 кластер A)
Merged
#2935 fix(ptica): строка о подтоплении в PDF и DOCX перестаёт читаться как заключение (#2934)
Merged
#2933 fix(ptica): достоверность видит зону ПЗЗ из НСПД, а не только из пустой таблицы (#2464)
Merged
#2932 fix(tradein): обход Домклика начинается со сдвигом — комнатности 2+ перестают быть слепой зоной (#2854)
Merged
#2931 fix(ptica): шумовой скорер перестаёт считать водоёмы источниками шума (#2464-G)
Merged
#2930 test(ptica): покрыть переиспользование сессии после close() в отдаче фотографий (#2464-C)
Merged
#2929 fix(ptica): гео-проход не тратит геокод на занятых кандидатов и не «подтверждает» их (#2464)
Merged
#2928 fix(ptica): соединение БД отпускается до похода за фотографией наружу (#2464-C)
Merged
#2927 fix(ptica): защита таймаутом теперь реально ограничивает время (#2464-C)
Merged
#2926 feat(tradein): позиция квартиры внутри когорты аналогов — перцентиль (#2899)
Merged
#2925 ci: правка конфига прокси больше не тянет полный деплой Site Finder (#2916)
Merged
#2923 fix(tradein): фильтр выдачи Яндекса мёртв — slug ЖК ищем по странице объекта (#2860)
Merged
#2922 ci: смоук периметра МЕРЫ запускается сразу после деплоя (#2917)
Merged
#2921 fix(infra/caddy): site-блоки с секретами переживают деплой — import caddy/local/*.caddy
Merged
#2920 fix(tradein/estimate): залипший anchor_tier больше не глушит четыре механизма разом
Merged
#2836 fix(tradein/estimate): нет индекса у аналогов — нет квартальной поправки (#2583 C3)
Merged
#2919 fix(mera/b2c): житель Серова получал «вы вне области», а подсказки игнорировали выбранный город
Merged
#2918 fix(mera/b2c): /estimate снова закрывался гвардом — короткий адрес завели в Caddy, но не в RouteGuard
Merged
#2913 feat(mera/b2c): публичный периметр МЕРЫ — свой API, отдельный экран оценки, короткие адреса
Merged
#2786 fix(tradein): гейт номеров миграций берёт эталон из git, ручной манифест удалён
Merged
#2915 feat(tradein/ops): алерты GlitchTip доезжают в Telegram
Merged
#2794 fix(tradein/payments): тело нотификации не течёт в мониторинг и аудит, повторы банка не отбиваются лимитом
Merged
#2914 chore(ops): почта GlitchTip настраивается из окружения и на worker'е тоже
Merged
#2912 chore(ops): зависшие job-контейнеры, лимит журнала, мёртвый блок status в Caddy
Merged
#2751 chore(ci): деплой на изменение ролей, ruff-гейт для МЕРЫ, удаление мёртвого workflow
Merged
#2911 fix(tradein/scraper): строка с пустым сегментом самочинится при пересборе
Merged
#2819 fix(db): /dev/shm боевого postgres — 64 МБ умолчания Docker → 1 ГБ
Merged
#2882 fix(ptica): загрузка ЦП больше не пишется в категориальную колонку (#2464-B)
Merged
#2910 fix(mera/b2c): публичный лэндинг больше не показывает «Не удалось проверить доступ»
Merged
#2909 feat(tradein): бесплатная проба покрытия POST /coverage (#2894)
Merged
#2908 fix(tradein/deactivate): протухшие объявления с пустым сегментом больше не якорят оценку
Merged
#2907 fix(tradein/deactivate): потолок эффективного TTL — защита от разгона пола и опечатки в расписании
Merged
#2906 fix(observability): убрать 83% мусора из трекера ошибок
Merged
#2905 feat(mera/b2c): лэндинг v3 по макету — превью на /mera-public/v3
Merged
#2893 fix(health): HEAD на /health в обоих бэкендах — аптайм проверял то, что всегда отвечает 405
Merged
#2892 fix(tradein/scrapers): прогон больше не рапортует «done» поверх провала и нуля
Merged
#2891 fix(tradein/geocoder): фолбэк на локальные houses — часть адресов ЕКБ давала гарантированный ноль аналогов
Merged
#2890 chore(ci): не проглатывать падение сборки + починить самолечение buildcache
Merged
#2889 chore(ops): выставить +x на docker-prune.sh и restore.sh
Merged
#2888 chore(deploy): триггерить деплой на правку ops/docker-prune.sh
Merged
#2887 chore(ops): чинить корень утечки docker-томов + еженедельная уборка
Merged
#2880 fix(tradein/cian): вернуть сбор вторички — sweep выбрасывал всё найденное
Merged
#2886 fix(mera): кликабельная ссылка на политику ПДн в чекбоксе согласия + синхронизация версии (блоки 2, 5.4)
Merged
#2885 feat(mera/pdf): дисклеймер 135-ФЗ в подвале каждой страницы отчёта (блок 4.2)
Merged
#2884 feat(mera): «Ориентировочный расчёт. Не является официальной оценкой.» под диапазоном цены (блок 4.1)
Merged
#2883 feat(mera): формулировки шапки и заголовка вкладки по юр-требованиям (блок 3)
Merged
#2881 fix(ptica): бан НСПД по WAF больше не глотается сборщиком кварталов (#2464-A)
Merged
#2878 docs(ptica): фактор уверенности называл не ту величину (#2464-H)
Merged
#2876 test(ci): сторож пропусков кричит ::error:: под Actions (#2871)
Merged
#2879 feat(tradein): вся Свердловская область — 40 городов в city-sweep
Merged
#2877 fix(tradein/proxy): учитывать историю банов при выборе egress-узла
Merged
#2865 fix(ptica): фильтр класса в velocity ссылался на алиас, которого нет в CTE (#2464-G)
Merged
#2875 ci: печатать код возврата pytest явно (#2871)
Merged
#2873 fix(ptica): отказ слоя НСПД больше не выглядит как «здесь ничего нет» (#2464-G/H)
Merged
#2874 feat(mera): оферта, политика возврата и утверждённая политика ПДн + реквизиты
Merged
#2872 ci: сделать видимыми два безмолвных шага после pytest (#2871)
Merged
#2870 ci: убирать buildx-билдер в конце сборочных job'ов (#2869)
Merged
#2868 fix(ptica): нет сделок за окно — цена не 0 ₽/м², а «нет данных» (#2464-B)
Merged
#2866 docs(ptica): комментарии beat-расписания считали сдвиг МСК дважды (#2464-H)
Merged
#2863 fix(ptica): границы правдоподобия у средней цены конкурента (#2464-D)
Merged
#2861 fix(tradein/ui): этаж сделки скрывался у всех 96 974 — требовалось второе поле (#2674)
Merged
#2859 docs(tradein): снять устаревшее обоснование обрыва прогона Домклика (#2854)
Merged
#2858 chore(tradein/db): снести три колонки-заглушки из витрины поиска (#2857)
Merged
#2856 fix(tradein/proxy): проба Домклика спрашивает защищённый путь, а не robots.txt (#2855)
Merged
#2832 fix(tradein/domclick): распознанный QRATOR-блок свипа — ban_kind='platform', не 'unknown' (#2687)
Merged
#2851 fix(tradein/yandex): снести признак «панорама» — его нет на площадке
Merged
#2850 fix(tradein/quality): витрина перестаёт рапортовать «доля с кадастром» (#2674)
Merged
#2852 docs(tradein/estimator): докстринг домового IMV-якоря говорит правду о таблице (#2674)
Merged
#2816 fix(tradein/estimate): домовой IMV-якорь приводится к базису ремонта квартиры (#2677)
Merged
#2849 fix(tradein/sber): сторож мерит отставание загрузки, а не календарь (#2846)
Merged
#2847 fix(tradein/dkp): «ФАКТИЧЕСКИЕ СДЕЛКИ» называют свой возраст, а не окно поиска
Merged
#2845 feat(tradein/scheduler): планировщик подхватывает чекпоинт оборванного прогона (#930)
Merged
#2844 fix(tradein/ci): объявить пропуски живых тестов повтора IMV — деплой-лэйн без БД
Merged
#2843 fix(tradein/imv): «временная» ошибка снова временная — 1390 домов возвращаются в очередь
Merged
#2839 fix(tradein/estimate): убрать квартал соседа из квартального индекса (координатный резолв — за флагом OFF)
Merged
#2840 fix(tradein/yandex): 3535 source_url ведут на сайт застройщика — переписываем из offerId (#2838)
Merged
#2838 fix(tradein/yandex): «непригодных» 3535 не было — адресуем их по offerId
Merged
#2837 fix(tradein/geocoder): инвариант «чужой топоним + результат внутри ЕКБ = недостоверно» (#2590)
Merged
#2835 fix(tradein/estimate): отдавать фактический радиус подбора, а не выбор пользователя
Merged
#2834 fix(tradein/scraper): пустой пул прокси перестаёт стирать чекпоинт полного обхода
Merged
#2833 fix(tradein/scrapers): убрать оставшиеся обходы пула прокси (#2830)
Merged
#2831 fix(tradein/scrapers): egress по источнику из пула с учётом банов, а не статичный env
Merged
#2829 fix(tradein/admin): развести исходы проверки кук — бан не равен «плохим кукам»
Merged
#2828 fix(tradein/estimate): не перетирать дату обращения при оживлении оценки
Merged
#2826 fix(tradein/estimate): оживлять мёртвые сохранённые оценки при открытии
Merged
#2825 fix(tradein/estimate): уверенность не может противоречить надёжности выборки
Merged
#2824 feat(tradein): версионирование продукта — единый источник, подвал, PDF, /versions
Merged
#2823 fix(tradein/estimate): не блокировать оценку — расширять подбор и честно предупреждать
Merged
#2822 docs(tradein/scraper): 42 прогона, а не 52 — в замере считались пары «прогон × фаза» (#2700)
Merged
#2821 fix(tradein/cian): 403 снимает узел с выдачи, а не гаснет в return None (#2700)
Merged
#2820 fix(tradein/dedup): остаток схлопывания домов становится измеряемым числом, а не оценкой (#2690)
Merged
#2817 fix(site-finder): метка источника весов выводится из результата резолва, а не из входа (#2811)
Merged
#2818 fix(tradein/db): разовая чистка 1123 адресов Авито с приклеенным рейтингом (#2814)
Merged
#2815 fix(tradein/avito): рейтинг дома перестаёт уезжать в адрес объявления (#2814)
Merged
#2813 fix(tradein/scraper): прогон, у которого отказал каждый якорь, перестаёт быть успехом (#2625)
Merged
#2808 fix(tradein/matching): город развёртки доезжает до стража Tier-2a — межгородские склейки домов (#2777)
Merged
#2809 fix(tradein/newbuilding): счётчики записи различают вставку и обновление (#2807)
Merged
#2810 fix(site-finder): §4.1 «Применить» действительно применяет веса POI (#2790)
Merged
#2806 fix(tradein/scraper): сводка «что сейчас не собирает» — лестница вех не видит стрик 0 (#2670)
Merged
#2805 fix(tradein/proxy): упавшая проба присваивала себе бан боевого сбора (#2800)
Merged
#2804 fix(tradein/cian): Циан переименовал MFE карточки ЖК — читать оба имени (#2767)
Merged
#2803 fix(tradein/proxy): проба спрашивает каждую площадку, вердикт пишется на пару «узел × источник» (#2800 B)
Merged
#2802 fix(tradein/proxy): узел, зарезервированный за Домкликом, до Домклика не доходит (#2800 A)
Merged
#2801 fix(tradein/cian): банить узел только когда состояния НЕТ, а не по слову «captcha» (#2767)
Merged
#2799 chore(tradein/db): снести DEPRECATED-колонку listings.ceiling_height
Merged
#2798 fix(tradein/cian): обогащение ЖК падало не на разметке, а на сожжённом узле (#2767)
Merged
#2797 fix(tradein/deactivate): TTL не снимает объявления по порогу ниже собственного цикла обхода
Merged
#2796 fix(tradein/domclick): свип ходит через прокси-пул, а отказ узла не обнуляет прогон (#2657)
Merged
#2795 chore(tradein/db): вернуть снос дубля индекса expires_at — теперь с lock_timeout
Merged
#2754 feat(tradein/payments): оплаченный отчёт хранится год — retain_until и предохранители в задаче удаления
Merged
#2791 fix(migrations): закрепить lock_timeout для блокирующего DDL и ловить невалидные индексы
Merged
#2792 revert(tradein/db): снять 250 с деплоя — очередь за локом блокирует пайплайн
Merged
#2789 test(ci): развести «нагрузку не создать» и «защита сломана» в двух флапающих гейтах (#2783)
Merged
#2788 fix(site-finder): вернуть доступ к профилям весов — владелец из сессии (#2782)
Merged
#2787 fix(ptica): скраб ПДн перестаёт утекать то, что защищает + проводка проверяется поведением (#2753)
Merged
#2785 chore(tradein/frontend): удалить остаточный слой фикстур (#2755)
Merged
#2781 test(scrapers/krt): вернуть в прогон проверку многоблочной страницы (#2778)
Merged
#2776 refactor(security): убрать мёртвую проверку админского токена (#2775)
Merged
#2784 fix(tradein/db): снять побайтовый дубль индекса на trade_in_estimates(expires_at) (#2752)
Merged
#2779 fix(tradein): свести высоту потолков к одной колонке ceiling_height_m
Merged
#2780 fix(tradein/houses): вернуть координаты объявлений в дом, когда объявления согласны (#2771)
Merged
#2772 build(tradein/frontend): состав зависимостей перестаёт зависеть от даты сборки (#2770)
Merged
#2774 fix(tradein): поштучный процент гаснет вместе со сводным, когда причина — сама пара (#2672)
Merged
#2773 fix(tradein/yandex): просмотры режутся по разделителю тысяч + Циан молчит о непонятой фразе (#2669)
Merged
#2768 fix(tradein/cian): показать, ЧТО пришло вместо состояния ЖК-страницы, и честно закрывать нулевой прогон (#2767)
Merged
#2769 test(tradein/frontend): первые проверки поведения — пустое поле, погашенное число, отказ 429
Merged
#2765 fix(tradein/scraper): диагноз бана перестаёт назначаться по умолчанию (#2764)
Merged
#2763 fix(devops): дать trade-in связность с redis, потом уже задать REDIS_URL (#2709)
Merged
#2762 fix(devops): потолок логов основного стека — journald, как у trade-in (#2761)
Merged
#2760 fix(tradein/devops): починить окно времени в инструкции чтения журнала (#2741)
Merged
#2759 ci: гейт против публикации занятых на VPS портов в workflow (#2757)
Merged
#2758 fix(tradein/devops): логи в journald — переживают пересоздание контейнера (#2741)
Merged
#2756 ci(tradein): снять последний deselect — он пережил починку своего теста
Merged
#2747 chore(frontend): фикстуры макета не по умолчанию + удаление осиротевших компонентов
Merged
#2749 fix(ptica): скраб ПДн перед отправкой в мониторинг + честная подпись НДС в отчётах (#2457)
Merged
#2746 chore(tradein/db): уборка временных таблиц, дублей индексов и звёздочки в v_data_quality
Merged
#2750 fix(tests): объявить 4 live-DB проверки приватности в skip_allowlist
Merged
#2680 fix(tradein/deploy): скрапер пересобирается вместе с бэкендом + сверка образов после деплоя (#2679)
Merged
#2745 ci: пропуск теста обязан назвать себя — иначе прогон красный
Merged
#2547 feat(mera/b2c): правовая рамка — согласие до сохранения, удаление по сроку и по запросу — этап 4 из 8
Merged
#2744 fix(tests): починить и вычистить проверки, которые не исполнялись ни разу
Merged
#2743 fix(tradein/matching): listing_sources датируется построчно, а не стартом транзакции (#2731)
Merged
#2732 feat(tradein/payments): схема БД, конфиг и kill-switch платёжного контура
Merged
#2742 fix(tradein/scrapers): метка наблюдения — время строки, а не старта транзакции (#2731)
Merged
#2737 fix(tradein/payments): строгий разбор нотификации и отказ вместо догадок на враждебном входе
Merged
#2740 feat(tradein/houses): журнал слияний домов — слияние стало обратимым
Merged
#2739 fix(tradein/avito): серия отказов обрывается и называет причину, а не выедает бюджет (#2674)
Merged
#2738 fix(tradein/yandex): в очередь обогащения не берём то, что парсер отвергает до сети (#2674)
Merged
#2735 test(tradein/auth): правило про синхронную сверку — сторожем, а не комментарием (#2715)
Merged
#2734 fix(tradein/auth): отказ по насыщению — до выборки из БД и с агрегированным следом (#2715)
Merged
#2736 fix(tradein/proxy): проба узла ходит браузерным трактом, вердикт живёт отдельно от HTTP-пробы (#2723)
Merged
#2733 feat(tradein/payments): подпись Token, клиент Т-Банка и сборка чека
Merged
#2728 chore(tradein/db): DROP listings_snapshots.position_in_serp — шаг 2 из 2 (#2697)
Merged
#2727 fix(tradein/scraper): сигнал живости из середины батча — живые прогоны перестают числиться зависшими (#2725)
Merged
#2729 fix(tradein): молча задеселекченный тест починен, deselect снят (#2722)
Merged
#2726 ci(tradein): тесты браузерного сайдкара наконец бегут в пайплайне (#2722)
Merged
#2724 fix(tradein/browser): четыре теста сайдкара догоняют код — тест отстал, не код сломан (#2722)
Merged
#2717 fix(tradein/auth): доля слотов сверки пароля на адрес — потолок перестаёт бить по своим (#2714)
Merged
#2721 fix(tradein/browser): повтор evaluate на той же странице — гонка случается ПОСЛЕ load (#2676)
Merged
#2720 fix(tradein/scraper): длинная серия неудач перестаёт замолкать, оборванный прогон — называться успехом (#2670)
Merged
#2719 fix(tradein/houses): camelCase-типы домов приводятся к канону у источника (#2678)
Merged
#2718 fix(tradein/scraper): отметки времени прогона перестают замерзать в его же транзакции (#2702)
Merged
#2716 fix(tradein/browser): гонка «execution context destroyed» — восстановимая, ретрай без relaunch (#2676)
Merged
#2712 fix(tradein/auth): bcrypt вне событийного цикла + настоящий потолок темпа логинов (#2665)
Merged
#2710 fix(tradein): TTL-деактивация не исполняется, пока сбор по источнику лежит (#2659)
Merged
#2713 fix(tradein/scraper): сторож «ноль результатов» перестаёт читать «не измерено» как ноль (#2703)
Merged
#2711 fix(tradein/scraper): статус «забанен» перестаёт выдавать наш сбой за чужой (#2686)
Merged
#2707 fix(tradein/scraper): дневной снимок узнаёт свой прогон (#2701)
Merged
#2708 fix(tradein/imv): домовая оценка ходит в сайдкар через пул, а не через чужой env-прокси (#2698)
Merged
#2706 fix(tradein): «медианный торг» гаснет на псевдорепликах и на неправдоподобном минусе (#2672)
Merged
#2705 fix(tradein/cian): просмотры перестают теряться на int() по фразе (#2669)
Merged
#2696 fix(tradein/domclick): sale_type перестаёт быть третьим словарём (#2674)
Merged
#2695 fix(tradein/scraper): detail-backfill с нулём обогащений перестаёт называться успехом (#2674)
Merged
#2694 fix(tradein): такт в сохранении расписания, position_in_serp невыразим (#2674)
Merged
#2693 fix(tradein): вернуть фотографии подсказок Avito IMV задним числом (#2674)
Merged
#2692 chore(tradein): догнать _manifest_applied.txt до факта прода (31 имя)
Merged
#2689 chore(tradein): разбор мёртвого кода — подключить, удалить или задокументировать (#2674)
Merged
#2688 fix(tradein/matching): честность тиров сопоставления домов (#2674)
Merged
#2685 fix(tradein/avito): окно ретроспективы под недельный такт + диагноз полного обхода (#2674)
Merged
#2684 fix(tradein/admin): убрать показатели, которые не могут быть ненулевыми, и брать список источников из данных (#2674)
Merged
#2682 fix(tradein): писатели наконец пишут то, что обещает схема — фото подсказок, статус «снято», события объявлений (#2674)
Merged
#2681 fix(tradein): сигналы о сбоях наконец становятся событиями, а протухание кук предупреждает заранее (#2674)
Merged
#2675 fix(tradein/imv): домовая оценка перестаёт врать про ремонт и тип дома (#2674)
Merged
#2671 fix(tradein): гейт правдоподобия на «медианный торг» — не показывать артефакт пейринга как рыночный факт (#2666)
Merged
#2668 fix(tradein/cian): читать bti из offerData — BTI-персист в houses писал ноль строк (#2435)
Merged
#2667 fix(tradein/scraper): блок QRATOR у Домклика больше не помечает прогон успешным (#2657)
Merged
#2663 feat(tradein/auth): глобальный потолок попыток входа на имя пользователя (#2571)
Merged
#2662 fix(tradein/scraper): пропуск расписания пишет строку прогона со статусом skipped (#2658)
Merged
#2664 fix(tradein): сегментный гард в «медианном торге», свежесть в индексе локации, честные админ-счётчики (#2660)
Merged
#2655 fix(tradein/geocode): прошить city_hint в deals-скрипт + развести счётчики гейта (#2603)
Merged
#2654 feat(tradein/proxy): здоровье прокси по паре «узел × источник» (#2600 п.2)
Merged
#2653 fix(tradein/proxy): доводить сигнал бана площадки до пула (#2600 п.1)
Merged
#2652 fix(tradein/proxy): отличать ручное выключение узла от авто-выключения (#2610)
Merged
#2651 fix(tradein/ui): чистить TanStack Query cache при смене identity (#2567)
Merged
#2650 chore(tradein): удалить мёртвые mobileproxy env-переменные и rotate-ip (#2616 шаги 2-3)
Merged
#2649 fix(tradein/auth): убрать устаревшее «Caddy basic_auth required» из 401 (#2573)
Merged
#2648 fix(tradein): area-бакеты в asking→sold — и расчёт, и применение (#2620)
Merged
#2647 chore(tradein): вернуть domclick_detail_backfill после починки детекта (#2636)
Merged
#2646 fix(tradein): бэкфилл-чистка неверных oblast-меток city для yandex/cian (#2628)
Merged
#2645 fix(tradein/domclick): единый список QRATOR-маркеров serp+detail (#2636)
Merged
#2644 chore(mera-public): isolation guard + favicon + Caddy handle (#2631)
Merged
#2643 fix(tradein): честный радиус поиска аналогов на карте v2 (#2632)
Merged
#2642 fix(tradein/scraper): капча Cian и заглушки Yandex — banned, не done (#2625)
Merged
#2640 fix(tradein/proxy): один прокси на сессию браузера вместо смены на каждом запросе
Merged
#2641 fix(sql): re-grant mv_quarter_price_index to tradein_fdw_reader (C3, #2583)
Merged
#2634 fix(tradein/scraper): не ходить через мёртвый запасной прокси
Merged
#2639 feat(tradein/v2): срок экспозиции подстрокой в карточке «Ожидаемая цена сделки»
Merged
#2637 fix(tradein/scraper): подключить браузерный путь Авито к пулу прокси
Merged
#2635 feat(sitefinder): «Птица» принимает сессию общего реестра [PR-2c/6]
Merged
#2633 chore(tradein/scraper): cut wasteful scraping load - cian_full_load tempo + zero-yield jobs
Merged
#2630 fix(tradein/ui): показывать цену по сделкам Росреестра вместо «недостаточно данных»
Merged
#2545 feat(mera/b2c): публичный периметр на отдельном домене meraocenka.ru — этап 1 из 8
Merged
#2629 fix(tradein/estimate): не строить цену по одному-двум аналогам, не отдавать 0 ₽
Merged
#2621 fix(tradein/maps): убрать украинский флаг Leaflet и починить атрибуцию OSM
Merged
#2622 fix(tradein/geocoder): строгий матч литеры дома + починка DaData region-фильтра
Merged
#2627 fix(tradein/ui): городской фильтр в витрине «сделки против объявлений» (#2583 H4)
Merged
#2626 fix(tradein/scraper): не помечать городом развёртки объявления соседних городов
Merged
#2624 fix(tradein/estimate): не применять хедонику к неправдоподобному году постройки
Merged
#2623 fix(tradein/scraper): собирать вторичку Циана по области, а не только новостройки
Merged
#2618 fix(tradein/snapshot): починить зависающий запрос снапшотов и бюджет времени (#2607)
Merged
#2617 fix(tradein/pricing): скоупить сторону объявлений по городу, как сторону сделок (#2583 H2)
Merged
#2619 feat(tradein): DSN к БД auth собирается из AUTH_DB_PASSWORD, а не дублирует секрет
Merged
#2614 chore(tradein/proxy): выпилить мёртвые узлы mobileproxy и их ключи из пула (#2613)
Merged
#2615 feat(mera): публичный лэндинг «МЕРА» — контент и вёрстка
Merged
#2611 feat(tradein/proxy): ротация exit-IP ASocks по бану со счётчиком и громким отказом (#2600)
Merged
#2612 fix(tradein/data): убрать ложный region_code=66 у объявлений чужих городов (#2604)
Merged
#2609 fix(tradein/proxy): самовосстановление пула и запасной прокси чужой affinity (#2600)
Merged
#2608 feat(tradein): переключаемый реестр людей — подготовка переезда «Меры» в БД auth [PR-2b/6]
Merged
#2606 fix(tradein/geocode): бэкфилл listings.city из слага города в URL Авито (#2594)
Merged
#2605 fix(tradein/geocode): геокодировать только активные объявления (#2604)
Merged
#2602 feat(auth): роли и трёхзначное состояние доступа в БД auth [PR-2a/6]
Merged
#2601 fix(tradein/geocode): передавать город объявления как city_hint в геокодирование (#2594)
Merged
#2599 chore(tradein/geocoder): удалить остатки скриптов Яндекс-геокодера, часть 3 (#2593)
Merged
#2598 fix(tradein/scraper): проставлять город объявления из контекста развёртки (#2594)
Merged
#2597 feat(auth): отдельная БД auth — фундамент единого входа «Меры» и «Птицы» [PR-1/6]
Merged
#2596 chore(tradein/geocoder): удалить Яндекс-геокодер (#2593)
Merged
#2595 chore(tradein): удалить остатки источника N1 (#2593)
Merged
#2591 fix(tradein/ui): не обрезать длинные названия городов в селекторе (#2576)
Merged
#2592 chore(ci+rbac): auth/** в paths-фильтры + «Поиск домов» только у админа
Merged
#2589 fix(tradein/geocoder): fail-closed выбор ЕКБ-реестров вместо списка городов (#2582)
Merged
#2584 feat(tradein/ui): передавать город в геокодирование + честный признак неопределённости (#2576)
Merged
#2588 fix(tradein/tasks): городской гейт в ночном бэкфилле координат (#2583)
Merged
#2587 fix(tradein/rbac): скрыть «Доля в продаже» и «Кэш» от клиентских аккаунтов
Merged
#2580 fix(tradein/geocoder): не подставлять Екатеринбург молча — явный city_hint (#2576)
Merged
#2578 fix(tradein/avito): обогащать деталями листинги всей области, не только ЕКБ (#2576)
Merged
#2586 fix(tradein/estimator): гео-ограничение якорного тира — не брать чужие города (#2581)
Merged
#2579 feat(tradein/db): авто-refresh ценовых бэндов по городам + порог для малых городов (#2576)
Merged
#2577 feat(tradein/support): чат поддержки без входа — экран логина и «доступа нет»
Merged
#2575 fix(tradein/team): admin управляет менеджерами — сброс пароля и блокировка (#2556)
Merged
#2569 feat(tradein/caddy): снять basic_auth с /trade-in — своя авторизация (#2558)
Merged
#2570 fix(tradein/ui): вход в «Команду» из v2-навигации + понятный 401 (#2556)
Merged
#2565 feat(tradein/ui): team-дашборд менеджера — сотрудники, квоты, история (#2556)
Merged
#2564 feat(tradein/db): seed существующих юзеров + ASCII-CHECK на username (#2557)
Merged
#2566 fix(tradein/team): устойчивая сортировка списка + семантика unlimited в батч-квотах (#2554)
Merged
#2563 feat(tradein/team): team-management API — employees CRUD, quotas, stats (#2554)
Merged
#2562 feat(tradein/ui): login-форма + session-aware RouteGuard (#2555)
Merged
#2561 feat(tradein/auth): auth-core — login/logout, sessions, dual-mode rbac (#2552)
Merged
#2560 feat(tradein/auth): password hashing + session config foundation (#2550)
Merged
#2559 feat(tradein/db): tradein_users + tradein_sessions schema (#2551)
Merged
#2553 test(tradein/rbac): user2 → expired в test_get_role_known_users (после #2548)
Merged
#2548 fix(tradein/auth): закрыть доступ user2 (Брусника) — role pilot → expired
Merged
#2544 feat(tradein/auth): восстановить доступ praktika + безлимит через данные вместо хардкода
Merged
#2543 fix(tradein/tgbot): ограничение частоты на отправителя в мосте поддержки
Merged
#2541 fix(tradein/tests): тесты авторизации проверяют настоящий guard + реальный рендер PDF
Merged
#2540 fix(tradein/devops): проверка всего стека после деплоя + запас на остановку
Merged
#2539 fix(tradein/sql): цена в подписи дедупликации «доли квартир дома в продаже»
Merged
#2536 fix(tradein/security): утечка ключа прокси, аудит действий админа, отличимость неудачного входа, IDOR в заявке
Merged
#2535 fix(tradein/scrapers): детекция дрейфа разметки вместо тихой пустоты
Merged
#2538 fix(tradein): откат транзакции в backfill + неотрицательный счётчик квот
Merged
#2534 fix(tradein/estimator): граница номера дома в подборе аналогов «тот же дом»
Merged
#2542 fix(tradein/v2): доступность — ориентир главного содержимого и заголовок первого уровня
Merged
#2537 fix(tradein/v2): заглушка карты в шапке заезжала под адресную карточку
Merged
#2531 fix(tradein/location): заменить сломанный коэффициент локации на калиброванный индекс
Merged
#2533 feat(tradein/ui): окно чата поддержки на сайте вместо ухода в Telegram
Merged
#2532 feat(tradein/support): веб-чат поддержки — серверная часть поверх Telegram-моста
Merged
#2530 fix(tradein/v2): вернуть адресную карточку поверх карты и координаты при restore-by-id
Merged
#2529 fix(tradein/ui): мини-карта адреса вместо статичного фото чужого дома в шапке
Merged
#2528 fix(tradein/v2): настоящая карта Leaflet+OSM вместо декоративного псевдо-SVG
Merged
#2527 feat(tradein/ui): вход в поддержку с сайта — плавающая кнопка + живая «Помощь»
Merged
#2526 feat(tradein/tgbot): Telegram support-мост @MERAsupport_bot
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)
Merged
#1335 perf(site-finder): pushdown obj_pricing CTE to nearby competitors (#70/#307)
Merged
#1333 feat(sql): corroborated trgm backfill objective_complex_mapping +17 (#307 OBJ-2 r2)
Merged
#1334 perf(sql): geography GIST + covering index для analyze-пути Site Finder (157)
Merged
#1332 feat(site-finder): additive objective_lots price fallback for competitors (#307 OBJ-3)
Merged
#1331 feat(sql): conservative trgm backfill objective_complex_mapping +23 (#307 OBJ-2)
Merged
#1330 fix(tradein-browser): non-fatal launch + background proxy retry (crash-loop 3141x)
Merged
#1329 feat(site-finder): POI saturation per capita по районам ЕКБ (#42)
Merged
#1328 feat(site-finder): сетевые обременения из ЗОУИТ (#1070, Refs #103)
Merged
#1327 feat(site-finder): domrf→cad geom-match + parking_ratio конкурентов (#96)
Merged
#1326 feat(site-finder): ЕГРН помещения/машино-места + parking_ratio MVP (#96)
Merged
#1325 perf(db): objective_lots district-price index (#70) + PII/perf audit (#79)
Merged
#1324 docs(infra): secrets rotation policy (#78)
Merged
#1321 ci(infra): coverage-gate (#68) + codegen-assert (#69) + uptime (#75)
Merged
#1322 feat(admin): freshness endpoint (#73) + README Forgejo (#83) + migrations doc (#72)
Merged
#1323 feat(frontend): mobile responsiveness (#66) + data-sources (#80)
Merged
#1320 feat(site-finder): ЗОУИТ visual layer на Leaflet карте (#255)
Merged
#1319 feat(site_finder): routing POI decay (#41) + OSM utilities (#44) + ЗОУИТ geom (#255bk)
Merged
#1318 feat(site-finder): multi-cad сравнение (#50) + analytics поиск (#65)
Merged
#1317 feat(analytics): velocity-anomaly alerts (#17) + ARN ДДУ indicator (#99)
Merged
#1316 feat(concept): Concept UI Stage 1d (#57)
Merged
#1315 feat(generative): движок концепций застройки Stage 1a/1b/1c (#54 #55 #56)
Merged
#1314 feat(site-finder): НСПД verify deep-links + landing GenDesign vs НСПД (#97 #100)
Merged
#1313 fix(cadastre): NSPD 500-retry + disable dead pzz-beat + geom backfill (#252 #259 #200)
Merged
#1312 fix(analytics): mortgage rate sort + recommend last_updated + drop dead route (#236 #237 #251)
Merged
#1311 fix(ops): repair broken main-DB backup + harden auth (#71 #427 #429 #428)
Merged
#1310 chore(objective): fuzzy backfill objective_complex_mapping +115 (#307 OBJ-2)
Merged
#1309 fix(analytics): ObjectSaleChart выровнять серии по union месяцев (#1246)
Merged
#1308 perf(site-finder): honour AbortSignal в poll-цикле useParcelAnalyzeQuery (#1248)
Merged
#1307 fix(backend): Excel formula-injection (#1244) + chat read off event loop (#1245)
Merged
#1306 feat(forecast): расширить горизонт прогноза до 24 мес (ТЗ §12.1, Q1)
Merged
#1305 chore(tradein-db): drop duplicate listings_geom_active_idx (#730)
Merged
#1304 fix(tradein-frontend): остановить retry-storm на 401 (#800)
Merged
#1303 feat(tradein-scheduler): nightly newbuilding-enrichment schedule (#973)
Merged
#1302 feat(site-finder): детерминированная атрибуция застройщика в analyze (#1088)
Merged
#1301 fix(p3-batch): восстановление 13 Fable 5 P3-fixes из lost branches
Merged
#1299 fix(sf): ekb_ppt_tep post-фильтры + врезка в analyze (#1136)
Merged
#1294 fix(admin-jobs): UPSERT в PUT /admin/jobs/settings (#1223)
Merged
#1288 fix(workers): cadastre permanent-fail counter + beat cleanup (#1236)
Merged
#1290 fix(scoring): correct price_feasibility reason — market rate (#1225)
Merged
#1289 fix(admin): persist JSON extra_config при свёрнутой textarea (#1239)
Merged
#1287 fix(workers): re-raise SoftTimeLimitExceeded в nspd_geo (#1235)
Merged
#1274 fix(custom-pois): invalidate canonical parcel-analyze + parcel-poi-score keys (#1241)
Merged
#1277 fix(forecasting): _price_overlap zero-width discontinuity (#1224)
Merged
#1275 fix(analytics): ObjectSaleChart tooltip полный ₽/м², не /1000 (#1238)
Merged
#1273 fix(beat): rewrite 4 cron entries in MSK to match conf.timezone (#1233)
Merged
#1272 fix(scrapers): commit outer tx в domrf_catalog scrape_catalog_batch (#1227)
Merged
#1271 fix(site-analysis): per-call AbortController вместо shared cancelledRef (#1242)
Merged
#1270 fix(site-finder): склеить разорванный regex в _PLANNING_NO_MATCH_SQL (#1230)
Merged
#1267 fix(workers): count lots_pf failure correctly, no silent done (#1220)
Merged
#1266 fix(forecasting): resolve admin district to micros в _query_artificial_demand (#1205)
Merged
#1265 fix(analytics): rolling 6mo/6mo окна в _district_velocity_trend (#1203)
Merged
#1264 fix(competitors): _AVG_PRICE_SQL — фильтр latest snapshot (#1210)
Merged
#1263 fix(db): dedupe domrf_kn_documents + UNIQUE NULLS NOT DISTINCT (#1206)
863 issues closed from 6 users
Closed
#3469 Витрина сделок на лендинге МЕРЫ не пересчитывается: задачи нет в расписании, последний прогон 30.08 (13 суток назад), всего 3 прогона за всё вр…
Closed
#3463 tradein-backend: у запросов к БД нет потолка ни по времени, ни по ожиданию блокировки — одна заблокированная таблица вешает /estimate для всех
Closed
#3443 Полный деплой ПТИЦЫ роняет сам Caddy на 67 секунд — все домены отдают code=000, заглушка окна деплоя здесь бессильна по построению
Closed
#3448 Быстрый путь caddy_only не исполняется: мерж с единственным caddy-файлом пересоздал весь стек ПТИЦЫ, а пропущенная джоба показана как success
Closed
#3158 Grafana: ноль правил алертинга и ноль контакт-поинтов — решить, нужен ли он вообще
Closed
#3449 geocoder: отмена по бюджету оставляет поток работать с сессией запроса — следующий шаг ловит «another operation is in progress», персист оценки отдаёт 500
Closed
#3452 MERA/оценка: порог показа коридора (3) и порог доверия к нему (10) рассогласованы — клиенты в зоне 3..9 видят коридор, но ценовая страховка молча …
Closed
#3451 tradein: TVF street_sales_vs_listings фильтрует сделки по d.rooms — та же синтетика, что снята в #3256; /sales-vs-listings отдаёт пустое пересечение
Closed
#3418 scraper-kit/cian: бакет уходит в done_buckets, хотя фаза houses внутри отказала полностью — следующий прогон пропускает фазу и рапортует done с houses_attempted=0
Closed
#3417 scraper-kit/cian: бакет уходит в done_buckets, хотя фаза houses внутри отказала полностью — следующий прогон пропускает фазу и рапортует done с houses_attempted=0
Closed
#3416 scraper-kit/cian: бакет уходит в done_buckets, хотя фаза houses внутри отказала полностью — следующий прогон пропускает фазу и рапортует done с houses_attempted=0
Closed
#3414 tradein/browser: cian-инстанс camoufox отказывает в 63% запусков (99/156 за 30ч) — релонч браузера перед КАЖДЫМ fetch из-за чередования аренд; generic на том же узле 0%
Closed
#3413 tradein/browser: cian-инстанс camoufox отказывает в 63% запусков (99/156 за 30ч) — релонч браузера перед КАЖДЫМ fetch из-за чередования аренд; generic на том же узле 0%
Closed
#3197 Скрапперы A2: четыре точки ходят мимо пула прокси, и тёплый контекст сайдкара ключуется по провайдеру, а не по узлу
Closed
#3402 tradein/cian: капча Циана приходит с HTTP 200 и не распознаётся как отказ площадки — cian_detail_backfill сжигает батч (0/210, 0/400) на одном узле, парсер пишет «def…
Closed
#3390 tradein: две живые копии mark_failed/mark_done с разной семантикой counters — app/services/scrape_runs.py ЗАМЕНЯЕТ, scraper_kit/orchestration/runs.py МЕРЖИТ (||)
Closed
#3394 tradein/cian: фаза houses у cian_city_sweep падает 0/30 с 02.09 — fetch_newbuilding зовётся без proxy_provider → env-фолбэк на мёртвый узел 9 → сайдкар 503
Closed
#3393 tradein: прогоны, оборванные деплоем (interrupted=1), попадают в лестницы стриков — failed-ratio судит частичные counters, а done обнуляет стрик банов источника
Closed
#3391 tradein: SIGTERM-drain при деплое не помечает app-task бэкфиллы (cian_detail/cian_history/avito/domclick detail) — hard-cancel через 100 с, строки остаются running → boot-reap делает их zombie
Closed
#3384 tradein: «пул пуст на старте батча» у cian/domclick detail-бэкфиллов уходит мимо no_proxy_stop — scheduler пишет failed со стухшими counters
Closed
#3376 domklik price history: 42 скачка ровно ×10 (потерянный разряд в цене источника) — миграция 285 их честно пересчитала в +900 %, гейт лоадера такие занулит; п…
Closed
#3386 tradein-backend без USE_PROXY_POOL_* — браузерные скрейпы из backend (yandex full-load, админ-ручки) идут на SCRAPER_PROXY_URL = выключенный узел 9 (407) → camoufox InvalidIP, 83 провала …
Closed
#3375 [P1] yandex full-load: _leaf/_degraded передают on_bucket(key, len(seen), …) — int уезжает в save_listings как lots → TypeError, ручной full-load Яндекса ничего не сохраняет
Closed
#3380 deploy-metrics: up -d не перечитывает одно-файловый bind-mount конфига Alloy (Beget читал конфиг 26.08 после успешного деплоя #3377)
Closed
#3354 Alloy: второй слой скруббинга query-секретов (secret|token|api_key) в alloy-apps.alloy — defence-in-depth к #3154
Closed
#3360 [SECURITY] Caddy: /trade-in/api/v1/admin/* доступен снаружи анонимно до guard'а — нет среза админского префикса на периметре
Closed
#3368 yandex full-load: _leaf, обрезанный max_pages_per_bucket/CAP, пишется в done-леджер как complete — с containment (#3362) хвост крупного бакета не переобходится
Closed
#3369 domclick city sweep: cancel-ветка пишет counters без done_buckets — резюм cancelled-прогона пересобирает всё заново
Closed
#3225 tradein: offer_price_history.diff_percent у domklik — колонка смешанных единиц (рубли и проценты вперемешку)
Closed
#3355 scraper-kit: ещё 4 дрейна с живым чекпоинтом без метки interrupted — domclick sweep и три full-load (cian/yandex/avito) нерезюмируемы после SIGTERM
Closed
#3359 scraper-kit: containment-skip до пробы (#3315) подключён только у avito — cian/yandex full-load при резюме тоже пере-пробивают готовые полосы
Closed
#3172 Свежесть источника меряется по статусу done — источник с блоками числится мёртвым, пока приносит данные
Closed
#3324 Деплой ПТИЦЫ проверяет только backend /health — мёртвый frontend или crash-loop worker/beat уезжают зелёным деплоем
Closed
#3312 tradein/scheduler: пропуск по протухшим кукам Циана отбрасывает следующий запуск на сутки вместо шести часов — _defer_next_run_at не знает про interval_minutes
Closed
#3315 avito exhaustive: резюм пере-пробивает готовые полосы — на худом пуле весь бан-бюджет сгорает до первой новой корзины
Closed
#3343 Флаки: test_auth_api.py — замер «худший сторонний запрос < 500 мс» падает на нагруженном раннере и роняет деплой tradein
Closed
#3338 yandex/avito detail_backfill: save-False не начисляет исход — та же потеря попытки, что #3332 у domclick
Closed
#3339 v2: флаг thin_market карточки avito_imv нигде не отрисован — «display-only» обещание без display
Closed
#3333 scraper-kit: дрейн-метка interrupted только у avito_city_sweep — у yandex/cian/newbuilding дрейн по-прежнему неотличим от полного done
Closed
#3316 [SECURITY][P1] tradein/team: имя из roles.yaml при создании сотрудника даёт эскалацию до admin — IDOR по всем оценкам и безлимит квоты
Closed
#3332 domclick_detail_backfill: обрыв «пул пуст» бросает попытку неучтённой — attempted ≠ enriched+failed+blocked
Closed
#3319 avito_city_sweep: чекпоинт мёртв по построению — 0 из 67 прогонов за 60 дней записали done_buckets, плюс две дыры честности
Closed
#3341 PDF-отчёт клиента печатает реальные названия площадок — привести к норме publicLabel («Источник N»)
Closed
#3322 Россети WFS: сессионный feature.id как external_id — power_supply_centers раздут ×10, ON CONFLICT не сработал ни разу
Closed
#3320 v2: четыре места, где числа честно посчитаны и нечестно показаны — «0,00 млн · −100%» зелёным, смешанные выборки в футере, deals-only полоса, бейдж о…
Closed
#3321 лендинг: обязательные этаж и состояние уничтожаются непрочитанными — takeDraft() удаляет черновик целиком на монтировании /estimate
Closed
#3190 Домклик detail: сайдкар даёт чистый контекст на каждый запрос, мы реплеим протухший qrator_jsid2 — отсюда «одна карточка и стена»
Closed
#3192 Яндекс: авторизованная сессия открывает контакты продавца (author.phoneNumbers) — хранилище сессии и извлечение телефонов
Closed
#3297 tradein/avito: browser-путь detail не смотрит на HTTP-статус — отказ 439 приезжает как ошибка парсинга, узел не ротируется
Closed
#3194 Ключ шифрования кук и сами куки уезжают в GlitchTip через текст исключения SQLAlchemy (все три сервиса сессий)
Closed
#3078 Телеметрия: метрики и Grafana — сегодня тихий отказ не виден ничем
Closed
#3118 Домклик не собирается с 5 августа: 17 банов подряд, QRATOR рубит на первой из шести корзин
Closed
#2869 CI/деплой встали: диск VPS 94%, копятся buildx-билдеры (20 штук, до 2 месяцев)
Closed
#2275 [tradein][v2] Мобильной раскладки нет: 390px → overflowX 473px, десктопная сетка без брейкпоинта (из аудита #2266)
Closed
#2081 trade-in/v2: UI/UX аудит — round 2 (системный контраст · честность чисел: дедуп/фильтр/адрес · a11y drawer+автокомплит)
Closed
#2277 [tradein] cleanup-волна после стабилизации scraper-kit: удалить legacy-дубли скрапперов + косметика pool
Closed
#2320 [tradein][analytics] Point-in-time backtest на listing_source_snapshots — заблокировано данными, не кодом
Closed
#3283 tradein/domclick: пустой пул прокси и таймаут навигации считаются блоками площадки и вместе рвут добор карточек
Closed
#3272 tradein/domclick: «система защиты от протечек» в описании квартиры читалась свипом как блок QRATOR
Closed
#3270 CI Trade-In: test_fifth_concurrent_estimate_gets_fast_429 виснет на 120с — гонка на sleep(0.05)
Closed
#3063 Яндекс: is_homeowner / is_pro_seller стираются при каждом «бедном» re-scrape (живая потеря данных)
Closed
#3074 Скрапперы: чекпоинты — длинный прогон продолжается с места обрыва, а не начинается заново
Closed
#1781 [tradein] cian-первичка не освежается: 9205 заморожены с 31.05, 93% без house_id_fk, фантомы не гаснут (Савкова 29)
Closed
#2012 [tradein][estimator] Подключить house_type/kitchen/ceiling как фичи comp-scoring (+ обязательный backtest)
Closed
#2657 [HIGH] tradein/scraper: охват Домклика упал в 8-10 раз — прод-свип даёт ~1% предложения, а видимый пул держался внешним ручным ингестом
Closed
#2678 tradein/houses: хвосты после #2675 — camelCase-типы домов не нормализованы у источника, расхождение двух путей по монолиту, 369 замороженных строк
Closed
#2723 [HIGH] tradein/proxy: проверка здоровья прокси ходит обычным HTTP, а работа — браузером — 480 зелёных проб за 10 суток, когда сбор падал по 4-5 раз в день
Closed
#2857 Витрина поиска отдаёт четыре поля-заглушки: NULL прописан в самом определении, читателей у трёх — ноль
Closed
#2934 [HIGH] ПТИЦА: отчёт утверждает отсутствие природного риска, ни разу его не проверив — 12 мест
Closed
#2936 [HIGH] МЕРА/эстиматор: отбор сопоставимых предпочитает источник с худшими данными — отсутствие поля считается идеальным совпадением
Closed
#3264 tradein/domclick: свип ходит на QRATOR без кук сессии — все запросы виснут на PoW, 0 лотов
Closed
#3212 fix(tradein/domclick): перезапуск браузера на карточку уничтожает пропуск QRATOR — лечим симптом, который сами и создаём
Closed
#3261 tradein/domclick: проверить, не травят ли контекст инжектируемые куки сессии — последняя невыясненная разница между добором и ручными пробами
Closed
#3170 yandex_city_sweep: combo с упавшим сохранением уходит в чекпоинт — молчаливая дыра в покрытии
Closed
#3047 Парсер карточки Авито недобирает поля: параметры дома теряются молча, метро тянется из описания, собственник не парсится
Closed
#3168 import_rosreestr_dkp: курсор last_id живёт только в памяти — рестарт начинает импорт с нуля
Closed
#2950 Деплой Trade-In своим prune -af убивает compose pull деплоя ПТИЦЫ (разные группы concurrency, один докер-демон)
Closed
#3248 Пересчитать хедонические коэффициенты поверх area-бакетного ratio — площадь штрафуется дважды, 4+ комнат занижены на 21%
Closed
#3239 tradein/domclick: после #3237 настоящий отказ площадки перестал банить узел — уехал в ветку «сбой транспорта»
Closed
#3189 Домклик: критерий обрыва по доле блоков — нужна своя калибровка (один прокси без ротации, цена ошибки другая)
Closed
#3205 tradein/domclick: площадка отдаёт одну карточку на экземпляр браузера — перезапускать camoufox после каждой страницы
Closed
#3196 Скрапперы A1: detail-пути ДомКлика, Циана и Яндекса не проставляют ban_kind — 23 бана Авито числятся unknown, у Яндекса ветка бана мертва
Closed
#3184 Обрыв по серии блоков срабатывает на КАЖДОМ прогоне (40 из 40 за 14 дней) — критерий не несёт информации
Closed
#3185 Сайдкар безусловно блокирует картинки — camoufox предупреждает, что это детектируется WAF (44 раза за 3 часа)
Closed
#3178 Авито/Домклик: ban_kind теряет явное большинство при схлопывании + причина в алерте захардкожена
Closed
#2986 gisogd_permits: ключ (doc_group, doc_num) схлопывает 2243 разных документа — на проде нет 23.9% реестра
Closed
#2956 [needs-human] НСПД не отдаёт данные с 27.07 — 24 суток без единого успешного дампа, WAF 403 на IP VPS
Closed
#2848 Осиротевший прогон 6 часов числится «идёт»: деплой убил процесс, а status='running' остался — гейт деплоя врёт
Closed
#3027 Переезд: понизить TTL на 13 доменах за 24–48 часов до окна
Closed
#2997 Индексы: ~855 МБ мёртвых и дублирующих на listings, у houses вообще нет индекса под geography
Closed
#3163 Тема «метрики» в Telegram пуста: инфра-алерты и клиентские инциденты делят одну тему 158
Closed
#3156 tgbot: getUpdates падает 23 раза в сутки, а в логе пустая строка вместо причины
Closed
#3161 Alertmanager отвечает 404 на /api/v2/alerts: внешний префикс распространён на весь API
Closed
#3155 Prometheus не видел ни одного Alertmanager: цель file_sd осталась пустой при включённом профиле alerts
Closed
#2673 [КРИТИЧНО] МЕРА слепа: за всю историю не отправлено ни одного уведомления — в GlitchTip нет ни правил, ни получателей
Closed
#3114 Пароли БД утекают в логи: postgres_exporter печатает DSN при каждой неудачной сборке WAL-метрик (~210 строк в сутки)
Closed
#2452 fix(frontend): нейтральный fallback ещё в 4 enum-lookup-местах (follow-up #2445-B2/B3)
Closed
#3151 geocode-бэкфилл: budget_sec проверяется только между батчами — прогон ушёл на 175 % бюджета
Closed
#2860 yandex_newbuilding_sweep: восемь прогонов подряд «обработано 5, успешно 0» со статусом done, очередь растёт 351 → 389
Closed
#2953 tradein: 429 от Nominatim — сдерживатель темпа стоит на успешной ветке, при череде неудач его нет
Closed
#2990 Чистый старт БД падает на миграции 077: FDW-backfill выполняется до создания USER MAPPING
Closed
#3148 Легаси-периметр impersonate: три прод-пути бэкенда остались на chrome120, а тест это закрепляет
Closed
#2904 compliance: заменить маркетинговые метрики лэндинга на вычисляемые до снятия noindex
Closed
#3034 Авито: притворяемся Chrome 120 в 2026 году, и заголовки внутренне противоречивы
Closed
#2656 [HIGH] tradein/estimate: якорь дома и знаменатель коэффициента выкупа читают is_active без фильтра свежести — протухшие объявления напрямую двигают цену
Closed
#2203 [P0] Off-box бэкап tradein-postgres + restore-тест + hardening backup-скрипта
Closed
#3082 MERA: на /trade-in/estimate нет ограничителя одновременности — рейт-лимит меряет частоту, а не параллелизм
Closed
#3122 Планировщик: зомби после ребута хоста блокируют источники до 6 часов — нужен boot-reap по границе старта контейнера
Closed
#3110 Переезд: 188.246.224.93 заблокирован у российских операторов — продукты недоступны клиентам с 25.08
Closed
#3119 Poincare не отвечает с 00:41 МСК — продукты лежат девять часов, и об этом никто не узнал
Closed
#3032 Переезд: замерить фактическую задержку Beget ↔ Selectel СПб — оценка 10–15 мс не проверялась
Closed
#3081 MERA: карточка прогресса оценки показывает выдуманные стадии и ссылается на серверную механику, которой в этом пути нет
Closed
#3044 Авито detail: HTTP 439 не обработан вовсе, а 429 с бан-страницей QRATOR ретраится на сожжённом IP
Closed
#3036 Данные о доме с площадок не доезжают: консьерж заполнен у 5 домов из 10 131, а парсим мы его на каждой карточке
Closed
#3057 Переезд: раннбук окна cutover — порядок, тайминги, критерии отката
Closed
#3061 [БЛОКЕР] Переезд ломает сам Forgejo: его БД живёт внутри уезжающего gendesign-postgres-1
Closed
#3085 Блокер 30.08: на Poincare нет бэкапов вообще — пустой crontab, и отказ будет тихим
Closed
#3094 Переезд: на Poincare не задан TRADEIN_DATABASE_URL — newbuilding-crossload молча грузит 0 лотов вместо ~11 000/сут
Closed
#3028 Переезд: скрапперы остаются на Beget — построчный upsert через сеть станет часами ожидания
Closed
#3005 Cron бэкапа tradein вызывает скрипт сырым путём — потеря бита +x сломает бэкап молча
Closed
#3033 Авито: у площадки есть родной фильтр вторички — качаем впятеро больше, чем нужно
Closed
#2864 chore(tooling): pre-commit пинит ruff v0.7.4, в venv 0.15.12 — хук переформатирует чужие строки
Closed
#2899 estimator: положение объекта на рынке (перцентиль внутри когорты)
Closed
#2991 Postgres на стоковом конфиге: shared_buffers 128 МБ на базу 21 ГБ, wal_compression off при доле FPI 55-86%
Closed
#2992 Апсерт переписывает 41 колонку безусловно — корень 15 ГБ раздутости и 7 ГБ WAL в сутки
Closed
#2867 ПТИЦА: avg_area_m2 в топ-планировках показывает 0 м² вместо «нет данных» (нужна правка контракта)
Closed
#2924 tradein: очередь yandex_newbuilding упирается в одни и те же пять домов — неудача ничего не помечает
Closed
#2846 «ФАКТИЧЕСКИЕ СДЕЛКИ» на экране — сделки семимесячной давности, и возраст никуда не доезжает
Closed
#2998 Росреестр не грузится 39 суток: rosreestr_dkp_import каждый день рапортует done с total_seen=0
Closed
#2916 ops: правка Caddyfile ради МЕРЫ пересобирает и передеплоивает Site Finder, применяя все pending SQL
Closed
#2917 ops: смоук периметра МЕРЫ не запускается после деплоя — регресс живёт до суток
Closed
#9 Stage 2c: Интеграция Site Finder ↔ Generative + подача в реестр ПО
Closed
#2677 [HIGH] tradein/estimate: домовой якорь подбирается без учёта ремонта, а подмешивается только вверх — после починки параметров это станет системати…
Closed
#2382 fix(tradein/estimator): merge orphaned floor term for hedonic composite (#2002 roadmap item 1)
Closed
#2632 tradein: бэкенд не отдаёт фактический радиус поиска — карта рисует круг по выбору пользователя, а не по тому, что реально искали
Closed
#2625 [HIGH] tradein/scraper: капча Циана и пустые выдачи Яндекса засчитываются как успешный прогон — 41 из 68 прогонов за 2 недели забрали ноль лотов без ед…
Closed
#2590 tradein/geocoder: инвариант «назван чужой топоним + результат внутри ЕКБ = недостоверно» вместо перечисления городов
Closed
#2871 CI: backend-tests краснеет ПОСЛЕ зелёного pytest, и по логу нельзя понять, в каком шаге
Closed
#2841 Битый слой buildcache роняет сборку бэкенда — правка не доезжает до прода, а сигнала об этом нет
Closed
#2812 [HIGH] ptica/db: параллельные запросы Объектива падают на /dev/shm = 64 МБ (умолчание Docker) — 6 отказов за сутки
Closed
#2830 tradein: два места по-прежнему ходят мимо пула прокси (cian_price_history + /admin/scraper/health)
Closed
#2800 [HIGH] tradein/proxy: браузерная проба спрашивает только Авито — узел «здоров» и мёртв для Домклика одновременно
Closed
#2683 chore(tradein): _manifest_applied.txt отстал на 27 имён — гейт от коллизий номеров миграций не работает между ветками
Closed
#2700 [HIGH] tradein/cian: detail-страницы отдают 403 на 50 из 50 попыток 15 дней подряд — прогон пишет errors=0 и done, все домовые поля Циана нулевые
Closed
#2567 tradein/ui: чистить TanStack Query cache при смене identity (login/logout)
Closed
#2376 backend: POST /api/v1/trade-in/lead + persist (parent #1971)
Closed
#2457 fix(export): «НДС (паркинг)» → «НДС (паркинг + коммерция)» в full_report экспортёрах (follow-up #2445-C1)
Closed
#2369 [tradein][obs] scrape_runs.total_seen=0 у yandex (и проверить avito/cian) — counters пишутся только в jsonb
Closed
#2350 [tradein] scraper_kit Group F2: fix avito build_warmed_session() missing config= (#2330)
Closed
#2349 [tradein] scraper_kit Group F1: fix yandex/cian newbuilding BrowserFetcher missing endpoint= (#2322)
Closed
#400 feat(tradein): #3 — источник ДомКлик
Closed
#2087 trade-in/v2: data-contract — рассинхрон счётчика источников / ratio-vs-медианы / базы торга + кросс-source дедуп (из аудита #2081)
Closed
#2894 B2C: бесплатная проба покрытия — POST /trade-in/coverage
Closed
#2790 site-finder §4.1: «Применить» у весов POI ни к чему не приводит + системные пресеты не видны
Closed
#2755 tradein/frontend: остаточный слой фикстур — 600 строк выдуманных чисел без потребителей + комментарии, описывающие исчезнувший контракт
Closed
#2752 tradein/db: миграция 229 завела дубль индекса по expires_at — точная копия индекса из 001
Closed
#2699 tradein/estimate: высота потолков в двух колонках — эстиматор читает одну, карта приоритетов называет каноном другую, 855 значений Циана не видит …
Closed
#2691 tradein: успешный прогон загрузки не двигает отметку времени — здоровый источник будет выглядеть протухшим
Closed
#2670 tradein/scraper: длинная серия неудач замолкает навсегда, а прогон, оборванный после частичного сбора, отчитывается успешным
Closed
#2669 tradein/cian: views_total пуст у всех 21 682 объявлений — парсер делает int() по строке «146 просмотров, 8 за сегодня»
Closed
#2811 [HIGH] site-finder: weights_profile.source = "profile" ставится по факту параметра, а не по факту найденного профиля
Closed
#2814 [HIGH] tradein/avito: рейтинг дома подклеен в адрес объявления — у всех 1 123 таких строк нет координат (100%), 12.7% аналогов невидимы радиусу
Closed
#2585 [P0] tradein: ключ Яндекс-геокодера недействителен — 403 Invalid api key, работает только резервный Nominatim
Closed
#2574 [P0] tradein: скраперы отрабатывают вхолостую — данные не обновляются 5–18 дней, avito 0 активных
Closed
#2807 tradein/newbuilding: счётчик price_dynamics_rows меряет прирост таблицы, а читается как «сколько записали»
Closed
#2767 tradein/cian: обогащение новостроек не дало ни одной записи 8 суток подряд — 200 попыток, все прогоны done, причина в разборе а не в сети
Closed
#2793 Вернуть снос дубля индекса trade_in_estimates(expires_at) — теперь с lock_timeout
Closed
#2698 [HIGH] tradein/imv: домовая оценка Авито мертва 34 дня — 0 сохранённых из 35 попыток в каждом прогоне, все прогоны done
Closed
#2782 frontend/site-finder: CRUD профилей весов недостижим — UI просит Admin Token, которого негде взять
Closed
#2783 backend/weather_cache: тест требует single-flight, которого код НЕ обещает — гейт красит PR-ы по таймингу
Closed
#2753 ptica/observability: страховка скраба ПДн может утечь то, что защищает + проводка проверяется грепом по исходнику
Closed
#2775 backend/core: verify_admin_token / AdminTokenAuth — проверка без единого вызывающего
Closed
#2672 tradein: «медианный торг» считается по псевдорепликам — 34% показываемых чисел стоят на ОДНОМ объявлении, и гейт по числу пар этого не видит
Closed
#2702 tradein: отметки времени прогона не охватывают его работу — 153 прогона из 487 «длятся» дольше собственного окна, пятичасовой записан как 32 мс
Closed
#2703 tradein: сторож «ноль результатов» структурно слеп к backfill-задачам — читает поле, которого в их счётчиках нет, поэтому 78 пустых прогонов из 158 …
Closed
#2686 [HIGH] tradein: статус «забанен» на инфраошибке — из-за него сбор Авито замедлили вдвое по ложному основанию
Closed
#2679 [HIGH] tradein/deploy: список путей для пересборки скрапера — неполный allowlist, и PR #2675 уже уехал в контейнер, который его не исполняет
Closed
#2764 tradein/scraper: ban_kind проставляется по умолчанию у 9 вызывающих из 12 — метка выглядит доказательством, не будучи им
Closed
#2766 tradein/frontend: у фронтенда trade-in ноль проверок поведения — при том что сегодня через него прошли три видимых пользователю изменения
Closed
#2741 tradein/devops: логи умирают вместе с контейнером при каждом деплое — ночной прогон невозможно разобрать утром
Closed
#2731 tradein: «время наблюдения» у снимка — это время начала транзакции сбора; 219 строк семиминутного прогона несут одну метку
Closed
#2709 tradein: redis недостижим из контейнера ПО СЕТИ, а не из-за переменной — «просто задать REDIS_URL» сделает поиск вчетверо медленнее и молча
Closed
#2715 tradein/auth: хвост после #2712 — насыщение без следа в аудите и с логом, выселяющим прочие логи; гейт после выборки из БД; правило только в коммент…
Closed
#2771 [HIGH] tradein/houses: 20% домов без координат — геокодер чинит объявление, но в дом координаты не возвращаются
Closed
#2770 tradein/frontend: pnpm-lock.yaml никем не читается и врёт про состав зависимостей
Closed
#1951 [tradein][devops] Деплой неатомарен — recreate scraper посреди run убивает in-flight sweep (cian_full_load → zombie)
Closed
#2714 [HIGH] tradein/auth: потолок сверок бьёт и по своим — один IP на 5 запросах в секунду закрывает вход всем, бессрочно
Closed
#2665 [HIGH] tradein/auth: bcrypt блокирует единственный event loop — поток логинов кладёт весь API, и он же сейчас единственный настоящий ограничитель темпа
Closed
#2676 tradein/browser: сайдкар не считает восстановимой ошибку «execution context was destroyed» — страница уходит в навигацию между goto и evaluate, ретрая нет
Closed
#2722 tradein/ci: тесты браузерного сайдкара не запускаются в пайплайне — 4 из них лежат красными на main, и об этом никто не знает
Closed
#2701 tradein: 38% дневных снимков объявлений не знают своего прогона — три вызова save_listings из девяти теряют run_id
Closed
#2725 fix(tradein/scraper): сигнал живости cian_history_backfill шлётся один раз — живые прогоны reap'ятся как zombie
Closed
#2697 chore(tradein): DROP listings_snapshots.position_in_serp (шаг 2 из 2, #2674)
Closed
#2435 [tradein] Houses Catalog: Cian bti_data/valuation house_info распарсены, но выбрасываются (никогда не пишутся в houses)
Closed
#2571 tradein/auth: усилить защиту логина от перебора после снятия basic_auth
Closed
#2658 tradein/scraper: пропуск задачи не оставляет следа — статус «пропущено» построен и ни разу не использован, а алерт стоит в недостижимой ветке
Closed
#2660 tradein: витрины и «медианный торг» читают listings без сегмента и свежести — пользователь видит 14.5 тыс. мертвецов как живые, а в торг попадает пе…
Closed
#2603 tradein/geocode: хвосты после #2601 — непрошитый sibling-caller в geocode_deals_nominatim.py + наблюдаемость гейта
Closed
#2600 tradein: прокси-пул — здоровье глобальное, бан на одном источнике выбрасывает прокси отовсюду (и обычно не засчитывается)
Closed
#2613 [HIGH] tradein: 6 из 7 запасных прокси в окружении мертвы — подписка mobileproxy не отвечает с начала июля
Closed
#2610 tradein/proxy: пул не отличает «оператор выключил руками» от авто-отключения — проверка здоровья молча возвращает узел в строй
Closed
#2616 tradein/proxy: запретить сбор без прокси (сейчас пустой прокси = прямое подключение с IP сервера), затем убрать мёртвые переменные mobileproxy
Closed
#2573 tradein/auth: устаревший текст ошибки 401 — «Caddy basic_auth required» после cutover
Closed
#2620 tradein/pricing: у 4+ комнат коэффициент выкупа больше единицы — новостроечный гард стоит только на одной стороне, а deals.rooms обрезан на 4
Closed
#2593 tradein: выпилить Яндекс-геокодер и остатки источника N1
Closed
#2628 tradein: бэкфилл городских меток — ТОЛЬКО yandex/cian, наивный гео-критерий снесёт ~640 корректных меток Авито
Closed
#2636 tradein: вернуть domclick_detail_backfill после починки — выключена при 0 обогащений на 491 попытку
Closed
#2631 fix(mera/b2c): публичный лэндинг всё же дёргает /api/v1/me — инвариант «на публичной странице запроса к /me не происходит» нарушен
Closed
#2607 [HIGH] tradein: listing_source_snapshot падает в zombie каждую ночь 6 суток подряд, осиротевшие запросы висят по 46 часов и держат горизонт vacuum
Closed
#2604 [HIGH] tradein: ночное геокодирование даёт 0 сохранённых 8 прогонов подряд — очередь на 98% забита неактивными объявлениями чужих регионов
Closed
#2594 [CRITICAL] tradein: скрапер не пишет город в адрес объявления — данные области уходят в Екатеринбург
Closed
#2582 [CRITICAL] tradein: гейт EKB-геокодера держится на списке из 37 городов — всё остальное считается Екатеринбургом
Closed
#2581 [CRITICAL] tradein: Tier A «тот же дом» матчит листинги по всей области без гео-предиката → цена в 4-5 раз выше реальной
Closed
#2556 tradein/auth 6: Frontend — team-дашборд менеджера (сотрудники, квоты, статистика)
Closed
#2557 tradein/auth 7: Seed-миграция существующих юзеров в tradein_users
Closed
#2554 tradein/auth 4: Team-API — CRUD сотрудников, квоты, статистика (org-scoped)
Closed
#2555 tradein/auth 5: Frontend — login-форма + session-aware RouteGuard
Closed
#2552 tradein/auth 3: Auth-core — login/logout, session middleware, dual-mode rbac_guard
Closed
#2550 tradein/auth 1: Foundation — bcrypt, password.py, session-настройки config
Closed
#2551 tradein/auth 2: Schema — tradein_users + tradein_sessions (SQL 192_*)
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
#2337 [tradein] scraper_kit Group E4: финальное переключение estimator.py на kit (#2308 завершение)
Closed
#2308 [tradein] scraper_kit migration — Group E: core valuation (estimator.py) — МАКСИМАЛЬНЫЙ РИСК
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
#2062 trade-in/v2: UI/UX-полировка по аудиту (доступность, доверие к числам, иерархия, копирайт)
Closed
#1996 [UX-аудит #07] Иерархия «ответ → доказательство → тех-детали» на странице результата
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
#2266 [tradein][v2] Визуальный аудит — иерархия 3 цен, CTA, микрокопи, консистентность после honest-hero (эпик #2262)
Closed
#2265 [tradein][v2] Живой аудит честности чисел на проде — resolved ли жалоба оценщика + остаток #2087 (эпик #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
#2128 scraper-kit A: скаффолд пакета + workspace-подключение
Closed
#2129 scrapers K: fix _unix_to_date TZ-inconsistency (3 копии MSK/UTC/naive)
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
#1804 [tradein][frontend] Мера estimate — секция «Фото квартиры» 422 на preview-UUID (0/12 фото)
Closed
#1803 [tradein][frontend] Мера estimate — React hydration error #418 (SSR≠client mismatch)
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
#1512 (low) 06_match_economics.py/main: months_to_sellout смешивает сток разных месяцев окна со sold за всё окно
Closed
#1511 (low) 06_match_economics.py/main: median_price_m2 считается по равновзвешенным строкам room×month, а не по объёму сделок
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
#1647 stealth: BrowserSession.download_binary обходит семафор concurrency (в отличие от get_json)
Closed
#1646 [ekburg_permits] parse_xlsx не закрывает read_only workbook (wb.close()) — утечка дескриптора/буфера
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
#1598 ConceptInput.land_cost_rub без ge=0: отрицательная стоимость земли молча завышает маржу и IRR-proxy
Closed
#1597 place_strategy не отбраковывает стратегию с нулевым размещением: пустой концепт (revenue=0, margin=-land, IRR=-33%) выдаётся как валидный вариант
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
#1471 (low) EgrnPropertyTable/formatDate: невалидная дата ЕГРН рендерится как «Invalid Date» — мёртвый try/catch
Closed
#1470 (medium) PoiList2Gis/site-finder-api: «{totalScore}/100» может превышать 100 и в fallback показывает не POI-метрику
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
#1409 (low) prinzip/page.tsx KpiCard «Средний метраж»: двойной минус при avg≥49 и ложный «-0» при null
Closed
#1410 (high) ConceptVariantsResult: плотность (FAR) подписана как 'м²/га' — неверная единица и занижение в ~10000×
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)
Closed
#1487 (medium) site-finder-api.ts/applyFilters: фильтры district/vri в prod обнуляют карту (все участки district='—', vri='other')
Closed
#1436 (medium) QuartirographyChart.tsx/portfolioMap: portfolio по числу комнат сопоставлен с deals по площади под общими площадными ярлыками
Closed
#1480 (high) trade-in/page.tsx восстановление по ?id=: параметры объекта синтезируются нулями → EstimateResult показывает '0 м²', 'Студия', 'Этаж 0 из 0' и чужой адрес
Closed
#936 [tradein][estimator] Gate перед flip tier_aware_ratio_enabled ON — backtest + golden-regression (#928/#934 follow-up)
Closed
#42 Infra I1: POI saturation per capita (Росстат демография по районам)
Closed
#1186 [tradein] A: Query-side guard вторички — estimator/asking_to_sold/matview не должны читать novostroyki из listings
Closed
#1070 [ИРД][сети] ООО «Брик» — техприсоединение, образоват. объект ул. Железнодорожников 3 (66:41:0702048:26/:27)
Closed
#96 Demand: Помещения ЕГРН (38489) + Машино-места (38490) — per-flat cross-check + parking ratio
Closed
#107 ekburg.ru/isogd direct scraper: РНС/ППТ/ГПЗУ для ЕКБ-city
Closed
#79 B7-1: 152-ФЗ — аудит кода на PII в logs / Sentry / БД
Closed
#70 B4-3: Performance аудит — Sentry Tracing + EXPLAIN slow queries
Closed
#76 B6-2: VPS resources аудит — capacity headroom для пилотов
Closed
#78 B6-4: Secrets rotation policy + procedure documentation
Closed
#263 epic(infra): NSPD unify — Вариант B consolidation (cadastre as single scraper)
Closed
#28 Gate G1: Импорт ПЗЗ ЕКБ shape → pzz_zones_ekb
Closed
#68 B4-1: Test coverage — критичные пути (recommend / analyze / concepts)
Closed
#77 B6-3: Frontend build cache — npm + Turborepo remote
Closed
#69 B4-2: OpenAPI / TS codegen — добавить в CI assert
Closed
#75 B6-1: Uptime monitoring — Uptime Kuma / healthcheck.io
Closed
#83 B9-1: README — обновить под актуальное состояние + quick start
Closed
#73 B5-3: Data freshness monitoring — dashboard + alerts
Closed
#72 B5-2: Alembic vs raw SQL — синхронизация состояния схемы
Closed
#80 B7-2: License / ToS audit — OSM ODbL, Объектив, DOM.РФ, Open-Meteo
Closed
#66 B3-3: Mobile responsiveness — Leaflet + ECharts на планшете
Closed
#255 feat(#232): ЗОУИТ visual layer на Leaflet карте — схематичные полигоны охранных зон (требование Макса)
Closed
#44 Infra I3: Инженерные сети из OSM (вода/канал/электр/газ) — utility distance
Closed
#41 Access A3: Per-category routing-radius decay (closes Limit_POI_Factor_Tiny)
Closed
#65 B3-2: Analytics dashboard — поиск + drill-down + cross-links
Closed
#50 UX X4: Multi-cad сравнение (2-5 участков side-by-side)
Closed
#17 Analytics: velocity-anomaly detection — алерт на ЖК с сильным провалом продаж
Closed
#99 Demand: «Индикатор цен ДДУ» — применить ARN-framework НСПД к нашим первичным данным
Closed
#57 B1-4: Concept UI — фронт от полигона до вариантов и экспортов
Closed
#56 B1-3: Generative Stage 1c — TEAP + финмодель + PDF/Excel/DXF
Closed
#55 B1-2: Generative Stage 1b — Greedy алгоритм + STRtree коллизии
Closed
#54 B1-1: Generative Stage 1a — Shapely-парсер + placement grid
Closed
#100 UX: Differentiation от НСПД (сравнительная таблица + deep-links + footers)
Closed
#97 UX: Deep-links на сервисы НСПД из Site Finder (Open on ПКК, верификация)
Closed
#259 bug(#233): pzz_sync — pkk.rosreestr.ru PKK6 deprecated, мигрировать на NSPD WMS (territorial_zones)
Closed
#200 cadastre: докачать geom для 932 участков (371 квартал) из job 20
Closed
#252 bug(scrapers): NspdLiteError HTTP 500 на nspd.gov.ru WMS — нужна retry policy для transient ошибок
Closed
#106 ФГИС ТП Минэк: Функциональные зоны (846615) federal Генплан — bbox tiling для ЕКБ
Closed
#236 [QA] analytics/recommend: ипотечная ставка показывает "Январь 2026" — данные 4+ месяца назад
Closed
#237 [QA] analytics/recommend: нет индикатора актуальности данных (last_updated)
Closed
#251 bug(backend): GET /api/v1/parcels/{cad} возвращает 501 "Not implemented yet" — удалить или реализовать
Closed
#428 [low] docs/PILOT_ACCESS.md: заменить claudestars@proton.me на role-mailbox
Closed
#427 [low] basic_auth: расширить username regex под john.doe / jane_smith
Closed
#429 [low] basic_auth: list_users.sh fragile regex (может матчить комментарии)
Closed
#71 B5-1: Backup cron + S3 — СРОЧНО (риск потери 6.83M ДДУ)
Closed
#253 bug(frontend): React error #418 hydration mismatch на /admin/scrape/cadastre
Closed
#35 Demand D3: Absorption rate / прогноз месяцев до распродажи 80%
Closed
#254 feat(site-finder): Ad-hoc custom POI с весом — пользователь добавляет свою точку на карту (требование Макса)
Closed
#64 B3-1: Landing page редизайн — B2B value prop + CTA flow
Closed
#63 B2-4: Объектив coverage аудит + расширение групп если <70%
Closed
#62 B2-3: PRINZIP CRM — автоматизация стратегических инсайтов
Closed
#49 UX X3: PDF export «Site Analysis Report» (WeasyPrint)
Closed
#40 Access A2: Endpoint /parcels/{cad}/isochrones (walk/car 10/15/30 мин) + UI
Closed
#37 Demand D5: Buyer affordability index (CRM PRINZIP + CBR + rosreestr_deals)
Closed
#20 Analytics: mortgage-rate sensitivity — 'что будет, если ставка вырастет на 1pp?'
Closed
#244 bug(#232): cad_zouit fallback не срабатывает когда nspd_quarter_dumps вообще пуст (regression PR #240)
Closed
#232 [QA] ЗОУИТ "Нет пересечений" — cad_zouit имеет данные, но analyze их не использует
Closed
#31 Gate G4: Extract max_floors / FAR / parking из pzz_zones_ekb.raw_props
Closed
#29 Gate G2: Парсер ВРИ + категория земель из НСПД per cad
Closed
#256 feat(#126): Sub-PR B — интегрировать grid sampling в harvest_quarter (single-pixel WMS fix)
Closed
#102 Site Finder: WMS-overlay инженерных сетей НСПД на Leaflet карте (low-effort MVP)
Closed
#168 Bulk cadastre ingest ЕКБ — 2408 кварталов через NSPD
Closed
#126 🐛 NSPD WMS GetFeatureInfo НЕ bulk — Sprint 2 grid sampling fix
Closed
#115 🔌 Engineering: Точки подключения к сетям + параметры (KILLER FEATURE от Макса)
Closed
#94 NSPD API client: единый интегратор слоёв (foundation для G1/G2/G3/E1/#93)
Closed
#1246 [Fable 5][uncertain][P2] ObjectSaleChart: ось X строится по месяцам только первого type — серии parking/nonliv рисуются на чужих месяцах
Closed
#1248 [Fable 5][uncertain][P3] useParcelAnalyzeQuery: poll-цикл игнорирует AbortSignal — зомби-поллинг и лишние POST /analyze после навигации
Closed
#1245 [Fable 5][uncertain][P3] chat.py: async-хендлер /chat/ask выполняет синхронное чтение БД (JSONB-отчёт) в event loop'е
Closed
#1244 [Fable 5][uncertain][P3] Excel-экспортёр §13: строки отчёта, начинающиеся с '=', пишутся как живые формулы (formula/DDE-injection)
Closed
#1247 [Fable 5][uncertain][P3] Trade-in: чтение window.location.search во время рендера — hydration mismatch при открытии shareable-ссылки ?id=
Closed
#944 🔮 [EPIC][site-finder] Site Finder v2 — ИИ-прогноз продуктовой стратегии (ТЗ ГенГеныч)
Closed
#731 [tradein][db][tech-debt] Stale stats (ANALYZE никогда) + чистка мёртвой схемы
Closed
#732 [tradein][db][tech-debt] Унификация кадастровой колонки kadastr_num → cadastral_number
Closed
#769 [P3][tradein][backend] Data-layer/op хвост аудита: trgm-индекс на deals.address, FDW fetch_size, matview-refresh, cian-unescape, address-centroid
Closed
#730 [tradein][db][tech-debt] Index hygiene — дубли + 87 unused + бессмысленные партиалы (~42 МБ)
Closed
#800 [tradein][frontend][bug] Retry-storm + белый экран на 401 (/me+/quota без backoff)
Closed
#973 [SF-v2 #950] 950-E2: Расписание cian/yandex_newbuilding enrichment
Closed
#1088 [SF][future-supply] Geo-join земля↔застройщик (ДОМ.РФ + РНС-ИНН + КРТ) по кадастру/гео
Closed
#1087 [SF][future-supply][spike] Разведка ГИСОГД-СО gisogd66.midural.ru — API РНС/ввод + застройщик
Closed
#958 [site-finder] EPIC 14: UI: горизонт-селектор, экран прогноза/сценариев, слои карты, confidence
Closed
#960 [site-finder] EPIC 16: LLM-инфраструктура (провайдер, промпты, секреты, cost/guardrails)
Closed
#999 [SF-v2 #958] 958-B4: Слои карты: будущие ЖК / скрытый склад / зоны риска
Closed
#957 [site-finder] EPIC 13: Чат-интерфейс над движком (LLM-оркестрация + UI-панель)
Closed
#961 [site-finder] EPIC 17: Контракт API результата + версионирование анализа
Closed
#1169 [site-finder] §25.3 истинная каннибализация: overlap vs собственный портфель (own-portfolio)
Closed
#950 [site-finder] EPIC 6: 3-слойный склад (open/hidden/future) + индекс будущего давления
Closed
#946 [site-finder] EPIC 2: Росстат/ЕМИСС + Дом.РФ макро-ingest (доходы, инфляция, распроданность)
Closed
#947 [site-finder] EPIC 3: Сущность «Граддокумент» + парсер ППТ/ПМТ/слушаний/КРТ/ЕИСЖС
Closed
#1084 [sf] EKBGeoportalClient hardening при C8-wiring: CQL float-формат + User-Agent + httpx.Client pooling
Closed
#1134 krt_lookup: многострочный regex в _PLANNING_NO_MATCH_SQL ломает 2 топонима (#1131 follow-up)
Closed
#1119 [qa] post-deploy smoke: ird-блок в /analyze (enable_ird_analyze ON) + latency
Closed
#1122 land_reservation: parser/ingest hardening ПЕРЕД первым реальным прогоном (#1118 follow-up)
Closed
#1085 [SF][future-supply] Ingest ППТ/ПМТ ЕКБ — WFS геометрия + ТЭП из PDF (pdfplumber)
Closed
#1234 [Fable 5][P3] Snapshot-PDF: '—'-фоллбеки двойно экранируются автоэскейпом Jinja2 — в PDF печатается литеральный текст «—»
Closed
#1159 okn_objects: недозагрузка реестра (428 vs ~798 ЕГРОКН) + raw_props={id} без названия/адреса
Closed
#1116 gknspecial_harvest: incremental per-prefix commit (durability на больших прогонах)
Closed
#1095 [sf] parcel_ird_overlaps: расширить except + тест ProgrammingError (при D9b wiring)
Closed
#1222 [Fable 5][P3] §15 report-confidence: _confounded читает ключи, которых нет в forecast-диктах — шок-окно никогда не влияет на уверенность
Closed
#1240 [Fable 5][P3] PilotRequestModal: клиентская валидация слабее Pydantic-схемы — лид на лендинге получает сырой JSON 422
Closed
#1221 [Fable 5][P3] recommend_mix: _district_market_saturation без latest-snapshot фильтра — каждый ЖК считается ~3 раза, медиана и гейт n>=5 искажены
Closed
#1231 [Fable 5][P3] noise_loader: loop-UPSERT без begin_nested — один дефектный OSM-way (3-точечное кольцо) валит весь weekly-синк на каждом прогоне
Closed
#1226 [Fable 5][P3] objective_sync_config.get_config: голый except Exception: pass на seed-INSERT — запрещённый паттерн, сессия остаётся в aborted-состоянии
Closed
#1237 [Fable 5][P3] UserMenu: роль analyst (есть в backend с #962) отображается бейджем «Пилот»
Closed
#1228 [Fable 5][P3] OCR-нормализация не чинит задокументированный шум «6б:41:…» — кад-номера тихо теряются
Closed
#1229 [Fable 5][P3] best_layouts: supply-бакеты ('4+', euro-1/2) не стыкуются с velocity-бакетами objective ('4', '5+', '2') — supply=0/sold_pct искажены
Closed
#1232 [Fable 5][P3] Крах weekly POI-синка 29 февраля: date.replace(year=-2) бросает ValueError
Closed
#1136 ekb_ppt_tep: post-фильтры парсера + врезка в analyze + seed-URL (#1133 follow-up)
Closed
#1223 [Fable 5][P3] PUT /admin/jobs/settings/{job_type} для отсутствующей строки молча теряет изменения и отвечает 200 с fallback-дефолтами
Closed
#1236 [Fable 5][P3] scrape_cadastre: перманентный не-WAF фейл не инкрементит targets_failed → job вечно 'running'; cleanup-таска не в beat
Closed
#1225 [Fable 5][P3] §14.2 price_feasibility: reason говорит «субсид. ставка», хотя платёж считан по рыночной key_rate+4.5 п.п. (~19%)
Closed
#1239 [Fable 5][P3] JobSettingsPanel: правки JSON extra_config молча теряются, если textarea свёрнута при сохранении
Closed
#1235 [Fable 5][P3] nspd_geo: except (NspdLiteError, Exception) проглатывает SoftTimeLimitExceeded — 6-часовой лимит таски не работает
Closed
#1241 [Fable 5][P3] useCustomPois инвалидирует несуществующий ключ ["analyze", cad] — скор и breakdown не обновляются после изменения custom-POI
Closed
#1224 [Fable 5][P3] §25.3 _price_overlap: нулевая ширина ценовой вилки нашего проекта внутри вилки кандидата даёт 0.0 вместо 1.0/None
Closed
#1238 [Fable 5][P3] ObjectSaleChart: серия «цена ₽/м²» рисует значения, делённые на 1000, без valueFormatter — тултип читается с ошибкой в 1000 раз
Closed
#1233 [Fable 5][P3] beat_schedule: 4 cron'а написаны в UTC при timezone=Europe/Moscow — бегут на 3ч раньше; price-index ДО medians
Closed
#1227 [Fable 5][P3] scrape_catalog_batch не делает db.commit() — все UPDATE цен откатятся при закрытии сессии
Closed
#1242 [Fable 5][P3] useSiteAnalysis: общий cancelledRef между конкурентными мутациями — новый analyze воскрешает отменённый poll-цикл
Closed
#1230 [Fable 5][P3] Разорванный переносом строки regex в _PLANNING_NO_MATCH_SQL: ветки «Донбасской» и «Лумумбы» никогда не матчатся
Closed
#1220 [Fable 5][P2] scrape_objective: провал lots_pf-стрима (главный 600МБ отчёт) проглатывается — run завершается status='done'
Closed
#1205 [Fable 5][P2] Artificial Demand (§25.5) фильтрует objective_lots по админ-району без resolve_objective_districts — индекс молча пуст для 7 из 8 районов
Closed
#1203 [Fable 5][P2] recommend_mix: _district_velocity_trend — захардкоженные даты 2025: «recent»-окно растёт безгранично, trend_factor раздут до ~2x
Closed
#1210 [Fable 5][P2] _AVG_PRICE_SQL без snapshot-фильтра: цена конкурента — смесь исторических снапшотов, flats_sold кратно завышен
Closed
#1206 [Fable 5][P2] ON CONFLICT по nullable doc_num: документы без номера дублируются при каждом прогоне
832 issues created by 2 users
Opened
#1336 (critical) SRID: геометрия кварталов и зданий из rosreestr2coord (WGS84) ошибочно ST_Transform'ится из 3857 → коллапс к Null Island
Opened
#1337 (high) async-хендлер get_poi_score(decay=routing) делает синхронный блокирующий ORS-вызов на 12с в event loop
Opened
#1338 (high) Синхронный CPU-bound генеративный пайплайн geometry.generate блокирует event loop в create_concept
Opened
#1339 (high) useSiteAnalysis: re-POST на 'ready' использует apiFetch без проверки статуса — 202-гонка возвращает stub и крашит render tree
Opened
#1340 [high] obj_class_filter (англ.) сравнивается с русским obj_class в БД — фильтр класса всегда даёт 0 конкурентов (competitors + best_layouts)
Opened
#1341 [high] СЗЗ с упоминанием газ/электр ошибочно эскалируется в hard-blocker — вердикт «Нельзя» вместо «С ограничениями»
Opened
#1342 (high) parcels.analyze: optional DB-блоки без begin_nested() — один сбойный query отравляет всю tx, молча теряет данные и срывает persist рана
Opened
#1343 (high) poi_loader.sync_poi_to_db: UPSERT-цикл без per-row SAVEPOINT — одна битая строка валит весь weekly POI-sync
Opened
#1344 (high) cad_territorial_zones.geom объявлена GEOGRAPHY(POLYGON) — MultiPolygon ПЗЗ-зоны молча отбрасываются при harvest
Opened
#1345 (high) Sber pull: пойманный сбой UPSERT отравляет Session — нет db.rollback(), все оставшиеся серии каскадно падают
Opened
#1346 (medium) Блокирующий синхронный psycopg-IO в async-хендлере get_parcel_connection_points
Opened
#1347 (medium) BrowserSession Semaphore = 8 вместо задокументированных 3 — ~3x риск WAF-блокировки на DOM.РФ sweep
Opened
#1348 (medium) Sber pull выполняет блокирующий DB/CPU на event loop (async-таск без run_in_executor)
Opened
#1349 (medium) Geocode cache get/put делает блокирующий DB-IO на event loop, хотя тот же файл использует to_thread для других DB-вызовов
Opened
#1350 (medium) Аэродромы запрашиваются из OSM только как node — авиашум молча теряется в скоринге
Opened
#1351 (medium) PDF-отчёт Trade-In печатает period_months=24, тогда как данные за 12 месяцев — неверное окно в клиентском документе
Opened
#1352 (medium) refresh_ekb_districts_median: ST_Intersects двойного-счёта сделок на пограничных кварталах искажает медиану/среднюю цену района
Opened
#1353 [medium] is_residential_zone: prefix-проверка мертва для NSPD zone_code, детект жилой зоны держится на хрупкой подстроке 'жил' без negative-list
Opened
#1354 [medium] velocity: monthly_velocity делит суммарный объём конкурентов на MAX месяцев одного конкурента — занижение при разнородных окнах
Opened
#1355 [medium] supply_layers: один domrf-объект может учитываться И в Layer2 (hidden) И в Layer3 (future) — двойной счёт предложения на горизонтах 18/24 мес
Opened
#1356 [medium] fetch_status: завершённый/paused job с непустым target-статусом проваливается в неверный ответ 'not_in_nspd'
Opened
#1357 [medium] _score_label игнорирует порог 'хорошо'=25 — участки со score 15..25 помечены 'хорошо' вместо 'средне'
Opened
#1358 [medium] object_flats_quartirography: бакет 'Нежилые' дробится на дубли, когда у нежилого юнита rooms не NULL
Opened
#1359 (medium) recommend_mix: success-boost меняет share_pct, но не пересчитывает units/revenue/velocity → внутренне противоречивый ответ
Opened
#1360 (medium) gate_verdict: blocker subcategory=17 сравнивается через isinstance(int) — строковый subcategory из nspd-dump молча деградирует до warning
Opened
#1361 (medium) pzz_loader: rosreestr_id может быть NULL → дубли строк, ON CONFLICT не срабатывает при повторном sync
Opened
#1362 (medium) OwnPlannedProjectUpdate без price-range валидатора → PUT может сохранить инвертированную вилку (min > max)
Opened
#1363 (medium) reap_zombies может пометить живой sweep 'zombie' → терминальные mark_done/mark_failed молча no-op, риск дубль-sweep
Opened
#1364 (medium) asking→sold ratio: в asking-медиану попадают новостройки (нет listing_segment guard в seed-миграциях 080/098)
Opened
#1365 (medium) 062 address cleaner: regex 'Площадь \\d' усекает легитимные адреса ЕКБ ('Площадь 1905 года')
Opened
#1366 (medium) trade_in_pdf: страница «Сделки» рисует выдуманные дни экспозиции (4–118) для rosreestr ДКП-сделок
Opened
#1367 (medium) Не-idempotent миграции (110 ADD CONSTRAINT, 74 DROP TABLE→VIEW) при ложном заявлении об идемпотентности ломают DR-restore
Opened
#1368 (medium) Avito enrichment: пойманная ошибка оставляет общий Session в aborted-state → каскад на все оставшиеся строки
Opened
#1369 (medium) corp_sum: сбой парсера оставляет run помеченным 'done' (silent failure) — асимметрия с фиксом lots_pf #1220
Opened
#1370 (low) Глобальный per-cache Lock удерживается на время сетевого вызова Open-Meteo — сериализация всех analyze-запросов одного cache-типа
Opened
#1371 (low) get_connection_points игнорирует harvest_error/staleness — error-only дамп отдаётся как dump_available=true
Opened
#1372 (low) _classify зависит от порядка вставки в OSM_CATEGORIES — вторая категория multi-tag элемента молча теряется
Opened
#1373 (low) Несогласованный вывод quarter_cad для 3-сегментного кад. номера: REGEXP_REPLACE vs _quarter_cad
Opened
#1374 (low) trigger_kn_sweep: queued_at всегда null — берётся date_done (время завершения) только что поставленной задачи
Opened
#1375 (low) recommend_mix: comparables/competitors матчат obj_class = :cls точно, has_class_data проверяет лишь NOT NULL — молчаливо пустой результат при разном словаре (RU vs EN)
Opened
#1376 (low) scenarios.py: module-docstring численно противоречит реализации _horizon_widen_factor
Opened
#1377 (low) Air quality берёт hourly[0] (00:00 forecast-дня), а не текущий час — docstring обещает «текущий час»
Opened
#1378 (low) ForecastConfidenceBlock: coverage=1.0 (100%) рендерится как «1» вместо «100%» из-за строгого < 1
Opened
#1379 (low) SeasonalWeatherBlock: строка экстремумов мин/макс подписана как «макс» (только максимум)
Opened
#1380 (low) Cadastre jobs: React-key на внутреннем <tr> вместо mapped Fragment — нестабильная reconciliation / key-warning
Opened
#1381 (low) street-deals: period_from считается 30-дневными месяцами, а фильтр — календарными — отображаемое окно не совпадает с запросом
Opened
#1382 [low] velocity: знаменатель score использует число MAPPED конкурентов (включая с нулевыми продажами) — систематическое занижение velocity_score
Opened
#1383 [low] leads/stats: revenue/deals считаются за всё время под контрактом «за последние N месяцев»
Opened
#1384 [low] quartirography (deals): хардкод period_start_date >= '2025-07-01' — окно неограниченно растёт со временем
Opened
#1385 [low] Guard-2 same_quarter_ratio: знаменатель включает аналоги без кадастрового номера — занижение ratio, over-correction
Opened
#1386 [low] Avito detail abort: транзиентная не-block ошибка сбрасывает consecutive_blocks, маскируя продолжающийся IP-блок
Opened
#1387 [low] Avito relative-date parser возвращает None для бесцифровых форм ('час назад', 'неделю назад', 'день назад')
Opened
#1388 [low] Cian has_furniture: реальное False теряется через or-коалесинг двух boolean-полей
Opened
#1389 [low] TradeInEstimateInput допускает floor > total_floors (нет cross-field валидации)
Opened
#1390 [low] izyatie_client: мёртвый fallback a_tag.get('title', href) недостижим (title уже непуст)
Opened
#1391 (low) Fan-out по objective_complex_mapping завышает SUM-метрики в _INLINE_VELOCITY_SQL (best_layouts)
Opened
#1392 (low) own_portfolio: слабый regex-guard '^[0-9]+' позволяет non-numeric префиксу dev_id уронить весь current-portfolio запрос
Opened
#1393 (low) Cian _walk_price_range: force-paginate ветка молча теряет хвост ценового бакета (задокументированная потеря в hot path)
Opened
#1394 (low) POST /geo/bulk игнорирует rate_ms — все bulk-джобы создаются с дефолтом 600ms без контроля оператора
Opened
#1395 (low) queue_status: broker-failure except-блоки без логирования (silent swallow в UI hot-path)
Opened
#1396 (low) _fmt_number падает на NaN/Inf-float (ValueError в детерминированном fallback-пути chat)
Opened
#1397 (low) Классификация таймаута LLM по имени класса вместо isinstance (хрупко)
Opened
#1398 (low) De-partиализация 5 listings-индексов в 097 на ложной посылке «is_active = 100% true», которую 104 подтверждает устаревшей
Opened
#1399 (low) decode_to_file.py: f.write(decoded) падает TypeError, если JSON декодируется в list/dict
Opened
#1400 (low) 55_schema_scrape_resume.sql: partial-index на heartbeat_at мёртв — reaper фильтрует по COALESCE(heartbeat_at, started_at)
Opened
#1401 (medium) scrape/all/page.tsx logs: при filter=all кнопка «логи» не задаёт scraper_type — смешивает логи разных скраперов по совпадающему run_id
Opened
#1402 (medium) scrape/all/page.tsx: смена filter не сбрасывает logsRunId — стейл-стейт показывает логи чужого прогона
Opened
#1403 (low) scrape/all/page.tsx summary: плитки считают по top-30 и не покрывают статусы skipped/paused/queued — сумма плиток ≠ числу строк
Opened
#1404 (low) scrape/all/page.tsx isStale: UI-порог 5 мин расходится с backend-zombie 10 мин — ложный статус «stale» у живого kn-прогона
Opened
#1405 (high) QuartirographyChart.tsx/portfolioMap: бар «Студии» в портфеле всегда 0 — график противоречит вердикту «52% — студии и однушки»
Opened
#1406 (high) QuartirographyChart.tsx/portfolioMap: портфель по числу комнат наложен на ось площади (м²) — сравнение в разных единицах
Opened
#1407 (high) page.tsx / KpiCard «Sold % (квартиры)»: вердикт «выше/ниже среднего рынка» считается по собственному sold% объекта без рыночных данных
Opened
#1408 (medium) page.tsx / KpiCard «Нежилые» и «Машино-места»: hint гейтит на perc, но печатает realised → возможна строка «null продано»
Opened
#1409 (low) prinzip/page.tsx KpiCard «Средний метраж»: двойной минус при avg≥49 и ложный «-0» при null
Opened
#1410 (high) ConceptVariantsResult: плотность (FAR) подписана как 'м²/га' — неверная единица и занижение в ~10000×
Opened
#1411 (medium) concept/page.tsx: устаревший результат концепции против перерисованного полигона (стейл-стейт)
Opened
#1412 (low) ConceptVariantsResult: IRR-proxy подписан как 'IRR / Внутренняя норма доходности' — переобещание метрики
Opened
#1413 (low) data-sources/page.tsx · SOURCES «Объектив»: неверный домен атрибуции (objced.ru вместо objctv.ru)
Opened
#1414 (high) page.tsx/districtLabel: KPI «X км от центра» показывает дистанцию до границы района, а не до центра ЕКБ
Opened
#1415 (low) page.tsx/trendColor: цвет KPI тренда рассинхронизирован с текстовой меткой backend (порог 5% vs 8%)
Opened
#1416 (low) page.tsx/noiseColor: цвет KPI шума противоречит метке level на интервалах [45,50) и [60,65)
Opened
#1417 (low) page.tsx/noiseValue: число и цвет KPI шума считаются от разных значений (round vs raw)
Opened
#1418 (low) page.tsx/handleWeightsChange: смена весов во время первичного analyze (data ещё null) молча теряется
Opened
#1419 (medium) site-finder/page.tsx FilterBarBridge: счётчик показывает «0 / 0 участков» во время загрузки/смены bbox вместо состояния загрузки
Opened
#1420 (low) site-finder/page.tsx FilterBarBridge: matchCount и totalCount из двух независимых запросов → транзиентный рассинхрон (matchCount может временно > totalCount)
Opened
#1421 (low) site-finder-api.ts by-bbox адаптер: parcel с area_m2 === null приземляется в area_ha=0 → «0.00 га» как факт и тихое попадание в площадные фильтры
Opened
#1422 (medium) CompareTable velocity-строка + winnersFor: velocity_score=0 ('нет данных') рендерится как факт и выигрывает зелёную подсветку 'лучшее'
Opened
#1423 (low) compare/page.tsx handleResult: dedup-гард сравнивает не все отображаемые поля → возможен стейл медианной цены/района/подписей
Opened
#1424 (high) trade-in/page.tsx restoredEstimate: восстановленный по shared-ссылке отчёт показывает выдуманные параметры объекта (0 м², «Студия», «0 из 0», чужой адрес)
Opened
#1425 (medium) trade-in/page.tsx useEstimateId: чтение window.location.search вместо useSearchParams → SSR hydration mismatch и нереактивность к смене URL
Opened
#1426 (medium) trade-in/page.tsx: протухшая/битая shared-ссылка молча показывает EmptyState «Введите параметры», ошибка GET /estimate/{id} не отображается
Opened
#1427 (low) trade-in/page.tsx: freshResult навсегда перекрывает URL id — переход по другой shared-ссылке в той же сессии показывает устаревший результат
Opened
#1428 (medium) BulkGeoPanel/handleSubmit: очистка поля Parallelism шлёт parallelism=0 → 422, запуск молча проваливается
Opened
#1429 (low) JobSettingsPanel/isPendingFor: одна общая updateMutation — спиннер/opacity рассинхронизируются при параллельных Save
Opened
#1430 (low) JobSettingsPanel/handleSave: очистка max_concurrency/max_retries молча шлёт 0 → 422
Opened
#1431 (medium) RecommendVelocityPanel vs RecommendLiquidityChart: KPI ликвидности на per-bucket эластичности, график «24 мес = liquidity» — на единой scope-эластичности
Opened
#1432 (medium) RecommendVelocityPanel footnote: текст «темп = базовый × pf^elasticity» не совпадает с фактическим Темпом продаж
Opened
#1433 (low) DeveloperLeaderboard COLS: pct_three_plus/avg_area_sqm/sverdl_sqm_th со значением 0 рендерятся как «—» (falsy-zero)
Opened
#1434 (low) ObjectInfraMap: счётчик «Найдено N POI» и чипы категорий считаются по уже отфильтрованным бэкендом данным
Opened
#1435 (medium) QuartirographyChart.tsx/portfolioMap: бар «строится · Студии» всегда 0% — рассинхрон с подписью «52% портфеля — студии»
Opened
#1436 (medium) QuartirographyChart.tsx/portfolioMap: portfolio по числу комнат сопоставлен с deals по площади под общими площадными ярлыками
Opened
#1437 (low) PrinzipGapBar.tsx: единая безымянная value-ось X смешивает м² и % — несопоставимые длины баров между строками
Opened
#1438 (low) RecommendRevenueChart.tsx: при total=0 подписи «0.0 млн» показываются на всех нулевых сегментах
Opened
#1439 (medium) RouteGuard.tsx/RouteGuard: analyst на запрещённом /admin/* молча редиректится в /trade-in/ вместо NoAccessScreen
Opened
#1440 (low) UserMenu.tsx/UserMenu: роль вне TS-union даёт пустой role-badge (нет рантайм-валидации /me)
Opened
#1441 (medium) ConceptVariantsResult/VariantPanel: FAR (безразмерный) подписан единицей «м²/га» — неверная единица и рассинхрон с PDF движка
Opened
#1442 (low) ConceptResultMap/FitBounds: нестабильная зависимость bounds перезапускает fitBounds на каждом ре-рендере, сбрасывая ручной zoom/pan
Opened
#1443 (low) ConceptExportButtons: error/serverLoading не сбрасываются при смене variant — стейл-сообщение/disabled под чужой вкладкой
Opened
#1444 (low) ConceptVariantsResult/VariantPanel: нулевая валовая прибыль подписывается как «Положительная маржа»
Opened
#1445 (low) ConceptVariantsResult: IRR-proxy движка подаётся в UI как полноценная «Внутренняя норма доходности»
Opened
#1446 (low) ConceptDrawMap: нарисованный полигон отрисовывается дважды (FeatureGroup-слой + внешний GeoJSON по prop)
Opened
#1447 (low) PilotRequestModal/deriveTrackingId: показанный лиду «Номер заявки GD-XXXXXXXX» не хранится в БД и не находится поддержкой
Opened
#1448 (medium) BestLayoutsBlock/handleDownloadPdf: PDF собирается из живого состояния контролов, а не из показанного расчёта
Opened
#1449 (medium) BestLayoutsBlock/TopLayoutsTable: тултип >100% жёстко пишет «за 24 мес» вместо выбранного time_window
Opened
#1450 (low) EnvironmentTab/WeatherBlock: футер жёстко пишет «7 дн.» при динамическом forecast_days
Opened
#1451 (medium) ScoreBreakdownStackedBar.tsx / source-view barWidth: знаменатель = макс. знаковый вклад, а не макс. модуль — шкала ломается при отрицательном лидере
Opened
#1452 (low) WeightProfilePanel.tsx / handleSliderChange: дебаунс-таймер дублирует немедленный setDraft и не чистится при unmount
Opened
#1453 (medium) Pipeline24moBlock.tsx / fmtMonth: new Date(ISO-date) даёт UTC-полночь — месяц «Сдача» уезжает на предыдущий в отрицательных TZ
Opened
#1454 (low) ScoreBreakdownStackedBar.tsx / легенда показывает категории с contribution===0, отсутствующие в обеих полосах
Opened
#1455 (high) ZouitLayer.tsx/ZouitLayer: хеш-сегмент React-key константен для Polygon — старая геометрия ЗОУИТ остаётся на карте
Opened
#1456 (high) VelocityBlock.tsx/VelocityBlock: рассинхрон bucket-ключей — 4-комн. и 5+ сделки молча выпадают из «По комнатности» и «Топ продавцов»
Opened
#1457 (medium) MarketTab.tsx/MarketTab: подпись «строящихся» не соответствует activeCount (включает сданные ≤1 года)
Opened
#1458 (medium) VelocityBlock.tsx/VelocityBlock: «Топ продавцов» показывает «Продано 0 м²» при отсутствии данных velocity
Opened
#1459 (low) CpLayerControlPanel.tsx/CpLayerControlPanel: «Показать все» рассинхронизируется при наличии пустых категорий
Opened
#1460 (medium) MarketTrendBlock.tsx/LABEL_COLORS: бейдж тренда всегда серый — ключи карты не совпадают с label из бэкенда
Opened
#1461 (medium) NspdEngineeringNearbyBlock.tsx: смешение радиусов 200 м (analyze) и 500 м (connection-points) под подписью «200 м»
Opened
#1462 (medium) NspdEngineeringNearbyBlock.tsx: дедуп label+round(distance) пропускает дубли — расстояния меряются до разных опорных точек
Opened
#1463 (high) Section2NetworksUtilities.getUtilityConfig: реальные subtype сетей не маппятся → сырые англ. ключи в таблице
Opened
#1464 (high) Section2NetworksUtilities.buildSubtitle: газ/водопровод теряются в подзаголовке (неверные subtype-ключи)
Opened
#1465 (low) Section2NetworksUtilities.buildSubtitle: расстояния в подзаголовке без ru-группировки ('1234 м' vs '1 234 м' в таблице)
Opened
#1466 (medium) Section1ParcelInfo POI-fallback: инвест-балл участка показывается как POI-score «X / 100» с фейковыми weight/score_contribution
Opened
#1467 (low) Section1ParcelInfo headlineSubtitle: захардкоженный «Score +12 vs район» в fallback-подзаголовке
Opened
#1468 (low) AnalysisSidebar.tsx — мёртвый компонент с неверными подписями секций (4. Инфраструктура / 5. Свежесть) и без section-6
Opened
#1470 (medium) PoiList2Gis/site-finder-api: «{totalScore}/100» может превышать 100 и в fallback показывает не POI-метрику
Opened
#1469 (medium) ScenariosBlock/ScenarioCard: индекс дефицита берётся с самого длинного горизонта, но подписывается целевым — рассинхрон числа и подписи
Opened
#1471 (low) EgrnPropertyTable/formatDate: невалидная дата ЕГРН рендерится как «Invalid Date» — мёртвый try/catch
Opened
#1472 (medium) compare/page.tsx handleResult: дедуп по подмножеству полей теряет обновления district/цены/scoreLabel/errorMsg → стейл-данные в таблице сравнения
Opened
#1473 (low) CompareTable.tsx строка velocity: velocity_score рендерится как «N / 100», канонический VelocityBlock — как «N%» → рассинхрон единицы метрики
Opened
#1474 (high) EntryMap/ParcelDrawer: deselect-overlay z399 перекрывает карточку участка (z20) — drawer некликабелен
Opened
#1475 (high) site-finder-api/applyFilters: фильтры «Район» и «ВРИ» в prod дают пустую карту (клиентская фильтрация по плейсхолдерам)
Opened
#1476 (medium) site-finder/useRecentParcels: «Недавние» не обновляются до 60с после визита (нет инвалидации кэша)
Opened
#1477 (low) site-finder: визит пишется только из map-попапа — переход из ParcelDrawer/CadInput/RecentParcels не попадает в «Недавние»
Opened
#1478 (medium) EstimateResult.tsx hero-бейдж: 'N аналогов' = listings+deals, не совпадает с таблицей аналогов
Opened
#1479 (medium) AnalogsTable.tsx сортировка по 'Дней': days_on_market=null трактуется как 0, пустые всплывают как самые свежие
Opened
#1480 (high) trade-in/page.tsx восстановление по ?id=: параметры объекта синтезируются нулями → EstimateResult показывает '0 м²', 'Студия', 'Этаж 0 из 0' и чужой адрес
Opened
#1481 (low) Drawer.tsx/Drawer: slide-out анимация при закрытии не проигрывается (ветка !open рендерит новый пустой узел)
Opened
#1482 (low) Drawer.tsx/Drawer: prop width молча игнорируется для side='bottom'
Opened
#1483 (low) Drawer.tsx/Drawer: восстановление фокуса на close может не сработать для размонтированного триггера
Opened
#1484 (low) useCustomPois/customPoisKey: session_id отсутствует в queryKey — кэш может переиспользоваться между сессиями
Opened
#1485 (low) useSiteAnalysis poll-loop: неизвестный FetchStatus молча поллится до 2-мин таймаута вместо явной ошибки
Opened
#1486 (high) site-finder-api.ts/useParcelPoiScoreQuery: poi_weighted_score из weight в неверной шкале — клиент видит абсурдный «~10/100»
Opened
#1487 (medium) site-finder-api.ts/applyFilters: фильтры district/vri в prod обнуляют карту (все участки district='—', vri='other')
Opened
#1488 (medium) download.ts/triggerDownload: синхронный revokeObjectURL в том же тике после a.click() — гонка, срывающая скачивание в Firefox/Safari
Opened
#1489 (low) weightProfiles.ts/useWeightProfiles: admin-токен лишний в queryKey React Query
Opened
#1490 (low) weightProfiles.ts/useDeleteProfile: JSDoc 'Returns true if deleted' не соответствует поведению (хук возвращает undefined)
Opened
#1491 (high) migrate_kg_to_obsidian.py extract_date/_DATE_PATTERNS: ведущий \b перед месяцем срывает извлечение даты у entity с разделителем '_'
Opened
#1492 (medium) migrate_kg_to_obsidian.py _moc_for_subdir/sort_key: хроносортировка MOC вырождается в обратно-алфавитную из-за None от extract_date
Opened
#1493 (low) cleanup-worktrees-aggressive.py fetch_all_prs: жёсткий лимит 30 страниц (1500 PR) может пометить ветку с PR за пределом как stale и удалить worktree
Opened
#1494 (medium) cleanup_ghosts.py main: _all_docs limit=10000 без пагинации — при росте vault живые chunks ошибочно удаляются как orphan
Opened
#1495 (low) check-no-print.py/normalize_path: rfind('backend/') матчит подстроку, а не сегмент пути
Opened
#1496 (low) check-no-print.py/normalize_path: rfind берёт последнее 'backend/' — ломает allow-prefix для вложенных backend-каталогов
Opened
#1497 (low) check-no-print.py/PRINT_RE: ловит закомментированный print, строковые литералы и method-call .print() — ложные блокировки
Opened
#1498 (low) check-no-print.py/main: matcher только Edit|Write — print через MultiEdit не блокируется
Opened
#1499 (low) server.py/developer_track_record: двойной учёт лотов при N сайтах на один Objective-проект
Opened
#1500 (medium) server.py/jk_full: import psycopg2 в проде (psycopg v3 only) → photos/sale_graph всегда пустые
Opened
#1501 (low) server.py/district_time_machine: AVG(price) выдаётся под ключом median_price_kr
Opened
#1502 (low) server.py/price_distribution: квантиль int(p*n) завышает p25/p50/p75 на малых выборках
Opened
#1503 (low) server.py/smart_suggestions: нет фильтра 'score выше точки', обещанного в докстринге
Opened
#1504 (high) 04_report.py/main: JSON weights_used не соответствует реальным весам скоринга и не содержит economic
Opened
#1505 (high) 04_report.py/build_html: HTML-подпись весов противоречит JSON weights_used в том же отчёте
Opened
#1506 (medium) 04_report.py/build_html: заголовок «последние 90 дней» не соответствует реальным периодам real_* (12 мес / всё время)
Opened
#1507 (medium) 04_report.py/build_html: селектор .r.r красит все числовые ячейки в красный и перебивает зелёный
Opened
#1508 (medium) 09_macro_and_trend.py/main: trend_ratio=2.0 при v_prior==0 даёт максимальный буст районам без истории продаж
Opened
#1509 (low) 10_score_v2.py/main: sat_factor вычисляется и пишется, но не применяется к скорости (мёртвая логика vs комментарий)
Opened
#1510 (medium) 12_more_pois.py/main: bbox padding ±0.005° меньше радиуса привязки 2 км — POI у границ теряются
Opened
#1511 (low) 06_match_economics.py/main: median_price_m2 считается по равновзвешенным строкам room×month, а не по объёму сделок
Opened
#1512 (low) 06_match_economics.py/main: months_to_sellout смешивает сток разных месяцев окна со sold за всё окно
Opened
#1513 (low) 08_enrich_economics.py/main: real_n_lots/sold_pct/price считаются по всем лотам, но отчёт подписывает их как период (12 мес/90 дней)
Opened
#1514 (high) search.py/search_query.py: кадастровый номер всегда NULL в выдаче поиска — рассинхрон имён cadastral_number vs kadastr_num
Opened
#1515 (medium) search.py/search(): cache_hit всегда false даже при отдаче из кэша — поле врёт
Opened
#1516 (low) schemas/search.py _validate_geo_pair: нет проверки инвертированных вилок floor/year_built/floors_total (min>max)
Opened
#1517 (low) search.py/_validate_geo_pair: cross-field min>max через truthiness — граничный 0 обходит проверку
Opened
#1518 (medium) estimator.py/estimate_quality SB-anchor: границы диапазона из RAW comp_ppm2 без repair_coef рассинхронизированы с центром
Opened
#1519 (low) estimator.py/estimate_quality: freshness/last_scraped_at/days_on_market считаются по listings_clean, а не по показанным anchor_comps_used
Opened
#1520 (low) estimator.py/_fetch_dkp_corridor: low/high_ppm2 = чистые min/max выборки, а не P10/P90 — advisory-текст по одиночному выбросу
Opened
#1521 (medium) scrape_pipeline.run_avito_city_sweep: IMV-фаза отравляет сессию → update_heartbeat без rollback переводит успешный sweep в 'failed'
Opened
#1522 (medium) scheduler.py/trigger_cian_backfill_run: при протухших cookies next_run_at не сдвигается → verify_session бьёт по Cian каждые 60с
Opened
#1523 (low) house_imv_backfill.py/pick_lot_params: нет инварианта floor<=floor_at_home → при total_floors=NULL везде floor_at_home падает на 9
Opened
#1524 (medium) house_imv_backfill.py/_process_one_house: IMV вернул price=0 → дом помечается imv_status='ok' и больше не переоценивается
Opened
#1525 (low) scheduler.py/import_rosreestr_dkp: substring(floor FROM '[0-9]+') теряет минус — этаж '-1' импортируется как 1
Opened
#1526 (medium) image_sanitizer.sanitize_image: EXIF orientation срезается без поворота пикселей → фото клиента лежат на боку
Opened
#1527 (medium) admin.test_cian_auth: 403-бан Cian отдаётся как authenticated=True (VERIFY_BAN_SENTINEL не различается)
Opened
#1528 (low) cian_price_history.backfill: saved считает len(price_changes), а не реально вставленные строки
Opened
#1529 (low) dadata._classify_kind: fias_level 65 (planning) и 75 (plot) ошибочно попадают в kind='house'
Opened
#1530 (medium) trade_in_pdf._build_cover: «Срок действия данных» захардкожен today+30д, игнорирует estimate.expires_at (=now+24ч)
Opened
#1531 (low) trade_in_pdf._build_listings_page: строка «(с учётом ремонта)» дублирует тот же n_total, фильтрации по ремонту нет
Opened
#1532 (low) trade_in_pdf._build_deals_page: house_label не содержит monolith_brick/other — рассинхрон «Тип дома» между стр.2 и стр.3
Opened
#1533 (low) trade_in_pdf._examples_rows: days_on_market==0 рендерится как «—» из-за or вместо is not None
Opened
#1534 (high) normalize.py/normalize_address: асимметричное раскрытие ' д '->' дом ' даёт разные ключи для одного дома
Opened
#1535 (medium) normalize.py/normalize_address: инициалы 'К.'/'Д.' в названии улицы раскрываются в 'корпус'/'дом'
Opened
#1536 (low) conflict_resolution.py/_resolve cross_validate: молча возвращает медиану, не сигнализирует расхождение цен
Opened
#1537 (medium) houses.py/match_or_create_house Tier 0: cadastr_exact не регистрирует alias -> риск дубля при бескадастровом скрейпе
Opened
#1538 (low) houses.py/_upsert_house_source: ON CONFLICT не обновляет matched_method/matched_at — провенанс врёт
Opened
#1539 (low) conflict_resolution.py/_resolve: строковые правила игнорируют приоритет источников (порядок dict)
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
#1648 fetch_via_rosreestr2coord глотает все исключения → None: WAF-блоки не детектируются, цель помечается 'done' с 0 features, run-статус лжёт
Opened
#1649 extract_obj_checks фабрикует passed=False для отсутствующих в payload проверок → UNKNOWN трактуется как FAILED (латентно, endpoint отключён)
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 подтверждённых находок
Opened
#2549 [EPIC] tradein: DB-backed auth + ролевка manager→employee (login-форма, сессии, team-management)
Opened
#2550 tradein/auth 1: Foundation — bcrypt, password.py, session-настройки config
Opened
#2551 tradein/auth 2: Schema — tradein_users + tradein_sessions (SQL 192_*)
Opened
#2552 tradein/auth 3: Auth-core — login/logout, session middleware, dual-mode rbac_guard
Opened
#2554 tradein/auth 4: Team-API — CRUD сотрудников, квоты, статистика (org-scoped)
Opened
#2555 tradein/auth 5: Frontend — login-форма + session-aware RouteGuard
Opened
#2556 tradein/auth 6: Frontend — team-дашборд менеджера (сотрудники, квоты, статистика)
Opened
#2557 tradein/auth 7: Seed-миграция существующих юзеров в tradein_users
Opened
#2558 tradein/auth 8: DevOps — SESSION_SECRET + AUTH_MODE=dual на прод; cutover follow-up
Opened
#2567 tradein/ui: чистить TanStack Query cache при смене identity (login/logout)
Opened
#2568 tradein/db: recovery-прогон сида 193 упадёт при демоутнутой seed-роли (узкий fail-mode)
Opened
#2571 tradein/auth: усилить защиту логина от перебора после снятия basic_auth
Opened
#2572 tradein/auth: переключить AUTH_MODE=db_only после обкатки cutover
Opened
#2573 tradein/auth: устаревший текст ошибки 401 — «Caddy basic_auth required» после cutover
Opened
#2574 [P0] tradein: скраперы отрабатывают вхолостую — данные не обновляются 5–18 дней, avito 0 активных
Opened
#2576 [EPIC] tradein: расширение Меры на всю Свердловскую область
Opened
#2581 [CRITICAL] tradein: Tier A «тот же дом» матчит листинги по всей области без гео-предиката → цена в 4-5 раз выше реальной
Opened
#2582 [CRITICAL] tradein: гейт EKB-геокодера держится на списке из 37 городов — всё остальное считается Екатеринбургом
Opened
#2583 tradein: остальные находки аудита области — C3 (квартальный индекс) + H1-H5
Opened
#2585 [P0] tradein: ключ Яндекс-геокодера недействителен — 403 Invalid api key, работает только резервный Nominatim
Opened
#2590 tradein/geocoder: инвариант «назван чужой топоним + результат внутри ЕКБ = недостоверно» вместо перечисления городов
Opened
#2593 tradein: выпилить Яндекс-геокодер и остатки источника N1
Opened
#2594 [CRITICAL] tradein: скрапер не пишет город в адрес объявления — данные области уходят в Екатеринбург
Opened
#2600 tradein: прокси-пул — здоровье глобальное, бан на одном источнике выбрасывает прокси отовсюду (и обычно не засчитывается)
Opened
#2603 tradein/geocode: хвосты после #2601 — непрошитый sibling-caller в geocode_deals_nominatim.py + наблюдаемость гейта
Opened
#2604 [HIGH] tradein: ночное геокодирование даёт 0 сохранённых 8 прогонов подряд — очередь на 98% забита неактивными объявлениями чужих регионов
Opened
#2607 [HIGH] tradein: listing_source_snapshot падает в zombie каждую ночь 6 суток подряд, осиротевшие запросы висят по 46 часов и держат горизонт vacuum
Opened
#2610 tradein/proxy: пул не отличает «оператор выключил руками» от авто-отключения — проверка здоровья молча возвращает узел в строй
Opened
#2613 [HIGH] tradein: 6 из 7 запасных прокси в окружении мертвы — подписка mobileproxy не отвечает с начала июля
Opened
#2616 tradein/proxy: запретить сбор без прокси (сейчас пустой прокси = прямое подключение с IP сервера), затем убрать мёртвые переменные mobileproxy
Opened
#2620 tradein/pricing: у 4+ комнат коэффициент выкупа больше единицы — новостроечный гард стоит только на одной стороне, а deals.rooms обрезан на 4
Opened
#2625 [HIGH] tradein/scraper: капча Циана и пустые выдачи Яндекса засчитываются как успешный прогон — 41 из 68 прогонов за 2 недели забрали ноль лотов без ед…
Opened
#2628 tradein: бэкфилл городских меток — ТОЛЬКО yandex/cian, наивный гео-критерий снесёт ~640 корректных меток Авито
Opened
#2631 fix(mera/b2c): публичный лэндинг всё же дёргает /api/v1/me — инвариант «на публичной странице запроса к /me не происходит» нарушен
Opened
#2632 tradein: бэкенд не отдаёт фактический радиус поиска — карта рисует круг по выбору пользователя, а не по тому, что реально искали
Opened
#2636 tradein: вернуть domclick_detail_backfill после починки — выключена при 0 обогащений на 491 попытку
Opened
#2638 [ВЛАДЕЛЬЦУ] Один рабочий прокси на три источника — 37 из 53 банов от исчерпания пула, а не от площадок
Opened
#2656 [HIGH] tradein/estimate: якорь дома и знаменатель коэффициента выкупа читают is_active без фильтра свежести — протухшие объявления напрямую двигают цену
Opened
#2657 [HIGH] tradein/scraper: охват Домклика упал в 8-10 раз — прод-свип даёт ~1% предложения, а видимый пул держался внешним ручным ингестом
Opened
#2658 tradein/scraper: пропуск задачи не оставляет следа — статус «пропущено» построен и ни разу не использован, а алерт стоит в недостижимой ветке
Opened
#2659 tradein: деактивация по TTL не знает про баны и покрытие — паушальный TTL уже выкосил 9033 живых строки, у Циана первичка не подметается вовсе
Opened
#2660 tradein: витрины и «медианный торг» читают listings без сегмента и свежести — пользователь видит 14.5 тыс. мертвецов как живые, а в торг попадает пе…
Opened
#2665 [HIGH] tradein/auth: bcrypt блокирует единственный event loop — поток логинов кладёт весь API, и он же сейчас единственный настоящий ограничитель темпа
Opened
#2666 tradein: два видимых пользователю числа отдаются без гейта правдоподобия — «медианный торг +36%» и индекс локации с шумом ±20 п.п.
Opened
#2669 tradein/cian: views_total пуст у всех 21 682 объявлений — парсер делает int() по строке «146 просмотров, 8 за сегодня»
Opened
#2670 tradein/scraper: длинная серия неудач замолкает навсегда, а прогон, оборванный после частичного сбора, отчитывается успешным
Opened
#2672 tradein: «медианный торг» считается по псевдорепликам — 34% показываемых чисел стоят на ОДНОМ объявлении, и гейт по числу пар этого не видит
Opened
#2673 [КРИТИЧНО] МЕРА слепа: за всю историю не отправлено ни одного уведомления — в GlitchTip нет ни правил, ни получателей
Opened
#2674 [EPIC] МЕРА: 47 мест, где код написан, отревьюен, смержен — и ни разу не сработал на проде
Opened
#2676 tradein/browser: сайдкар не считает восстановимой ошибку «execution context was destroyed» — страница уходит в навигацию между goto и evaluate, ретрая нет
Opened
#2677 [HIGH] tradein/estimate: домовой якорь подбирается без учёта ремонта, а подмешивается только вверх — после починки параметров это станет системати…
Opened
#2678 tradein/houses: хвосты после #2675 — camelCase-типы домов не нормализованы у источника, расхождение двух путей по монолиту, 369 замороженных строк
Opened
#2679 [HIGH] tradein/deploy: список путей для пересборки скрапера — неполный allowlist, и PR #2675 уже уехал в контейнер, который его не исполняет
Opened
#2683 chore(tradein): _manifest_applied.txt отстал на 27 имён — гейт от коллизий номеров миграций не работает между ветками
Opened
#2686 [HIGH] tradein: статус «забанен» на инфраошибке — из-за него сбор Авито замедлили вдвое по ложному основанию
Opened
#2687 tradein/avito: решить по данным 9–10.08 — нужны ли два недельных полных обхода, и как делать пробный прогон с узким окном
Opened
#2690 [HIGH] tradein: 781 дубль домов не схлопнуть — «независимый идентификатор здания» оказался тем же адресом, а слияние необратимо и без аудита
Opened
#2691 tradein: успешный прогон загрузки не двигает отметку времени — здоровый источник будет выглядеть протухшим
Opened
#2697 chore(tradein): DROP listings_snapshots.position_in_serp (шаг 2 из 2, #2674)
Opened
#2698 [HIGH] tradein/imv: домовая оценка Авито мертва 34 дня — 0 сохранённых из 35 попыток в каждом прогоне, все прогоны done
Opened
#2699 tradein/estimate: высота потолков в двух колонках — эстиматор читает одну, карта приоритетов называет каноном другую, 855 значений Циана не видит …
Opened
#2700 [HIGH] tradein/cian: detail-страницы отдают 403 на 50 из 50 попыток 15 дней подряд — прогон пишет errors=0 и done, все домовые поля Циана нулевые
Opened
#2701 tradein: 38% дневных снимков объявлений не знают своего прогона — три вызова save_listings из девяти теряют run_id
Opened
#2702 tradein: отметки времени прогона не охватывают его работу — 153 прогона из 487 «длятся» дольше собственного окна, пятичасовой записан как 32 мс
Opened
#2703 tradein: сторож «ноль результатов» структурно слеп к backfill-задачам — читает поле, которого в их счётчиках нет, поэтому 78 пустых прогонов из 158 …
Opened
#2704 [ВЛАДЕЛЬЦУ] Сводка: 8 пунктов, которые не чинятся кодом — учётки, ключи, получатель уведомлений, два решения
Opened
#2709 tradein: redis недостижим из контейнера ПО СЕТИ, а не из-за переменной — «просто задать REDIS_URL» сделает поиск вчетверо медленнее и молча
Opened
#2714 [HIGH] tradein/auth: потолок сверок бьёт и по своим — один IP на 5 запросах в секунду закрывает вход всем, бессрочно
Opened
#2715 tradein/auth: хвост после #2712 — насыщение без следа в аудите и с логом, выселяющим прочие логи; гейт после выборки из БД; правило только в коммент…
Opened
#2722 tradein/ci: тесты браузерного сайдкара не запускаются в пайплайне — 4 из них лежат красными на main, и об этом никто не знает
Opened
#2723 [HIGH] tradein/proxy: проверка здоровья прокси ходит обычным HTTP, а работа — браузером — 480 зелёных проб за 10 суток, когда сбор падал по 4-5 раз в день
Opened
#2725 fix(tradein/scraper): сигнал живости cian_history_backfill шлётся один раз — живые прогоны reap'ятся как zombie
Opened
#2731 tradein: «время наблюдения» у снимка — это время начала транзакции сбора; 219 строк семиминутного прогона несут одну метку
Opened
#2741 tradein/devops: логи умирают вместе с контейнером при каждом деплое — ночной прогон невозможно разобрать утром
Opened
#2752 tradein/db: миграция 229 завела дубль индекса по expires_at — точная копия индекса из 001
Opened
#2753 ptica/observability: страховка скраба ПДн может утечь то, что защищает + проводка проверяется грепом по исходнику
Opened
#2755 tradein/frontend: остаточный слой фикстур — 600 строк выдуманных чисел без потребителей + комментарии, описывающие исчезнувший контракт
Opened
#2757 [HIGH] ci: сервис-контейнер сборки с портом 5432 попадает в БОЕВОЙ Postgres — раннер работает в сети хоста, спасло только несовпадение пароля
Opened
#2761 ops: 13 ГБ из 113 занятых — логи двух контейнеров без ротации; наши compose вообще без потолка
Opened
#2764 tradein/scraper: ban_kind проставляется по умолчанию у 9 вызывающих из 12 — метка выглядит доказательством, не будучи им
Opened
#2766 tradein/frontend: у фронтенда trade-in ноль проверок поведения — при том что сегодня через него прошли три видимых пользователю изменения
Opened
#2767 tradein/cian: обогащение новостроек не дало ни одной записи 8 суток подряд — 200 попыток, все прогоны done, причина в разборе а не в сети
Opened
#2770 tradein/frontend: pnpm-lock.yaml никем не читается и врёт про состав зависимостей
Opened
#2771 [HIGH] tradein/houses: 20% домов без координат — геокодер чинит объявление, но в дом координаты не возвращаются
Opened
#2775 backend/core: verify_admin_token / AdminTokenAuth — проверка без единого вызывающего
Opened
#2777 [HIGH] tradein/houses: 108 домов сшиты сопоставителем из объявлений разных населённых пунктов (до 290 км разброса)
Opened
#2778 backend/tests: 6 проверок парсера ППТ ждут PDF-образец, которого нет ни у кого — нужен файл от Anton
Opened
#2782 frontend/site-finder: CRUD профилей весов недостижим — UI просит Admin Token, которого негде взять
Opened
#2783 backend/weather_cache: тест требует single-flight, которого код НЕ обещает — гейт красит PR-ы по таймингу
Opened
#2790 site-finder §4.1: «Применить» у весов POI ни к чему не приводит + системные пресеты не видны
Opened
#2793 Вернуть снос дубля индекса trade_in_estimates(expires_at) — теперь с lock_timeout
Opened
#2800 [HIGH] tradein/proxy: браузерная проба спрашивает только Авито — узел «здоров» и мёртв для Домклика одновременно
Opened
#2807 tradein/newbuilding: счётчик price_dynamics_rows меряет прирост таблицы, а читается как «сколько записали»
Opened
#2811 [HIGH] site-finder: weights_profile.source = "profile" ставится по факту параметра, а не по факту найденного профиля
Opened
#2812 [HIGH] ptica/db: параллельные запросы Объектива падают на /dev/shm = 64 МБ (умолчание Docker) — 6 отказов за сутки
Opened
#2814 [HIGH] tradein/avito: рейтинг дома подклеен в адрес объявления — у всех 1 123 таких строк нет координат (100%), 12.7% аналогов невидимы радиусу
Opened
#2827 tradein/avito: detail-страницы отдают HTTP 439 firewall независимо от IP и клиента
Opened
#2830 tradein: два места по-прежнему ходят мимо пула прокси (cian_price_history + /admin/scraper/health)
Opened
#2841 Битый слой buildcache роняет сборку бэкенда — правка не доезжает до прода, а сигнала об этом нет
Opened
#2842 source_url записывается только при вставке — колонка не способна залечиться сама (решение не очевидно, поэтому не чинил)
Opened
#2846 «ФАКТИЧЕСКИЕ СДЕЛКИ» на экране — сделки семимесячной давности, и возраст никуда не доезжает
Opened
#2848 Осиротевший прогон 6 часов числится «идёт»: деплой убил процесс, а status='running' остался — гейт деплоя врёт
Opened
#2853 Коэффициент «хороший ремонт» — не константа: 1.000 в фонде до 1990 против 1.023 в новом, применяется 1.05
Opened
#2854 Домклик: блок бьёт внутри первой корзины, ротация узла его не видит — шесть корзин не доводятся никогда
Opened
#2855 Проба узла спрашивает robots.txt, а работа — защищённый API: «пара здорова» ровно там, где свип получает QRATOR
Opened
#2857 Витрина поиска отдаёт четыре поля-заглушки: NULL прописан в самом определении, читателей у трёх — ноль
Opened
#2860 yandex_newbuilding_sweep: восемь прогонов подряд «обработано 5, успешно 0» со статусом done, очередь растёт 351 → 389
Opened
#2862 Бэктест калибрует оценщик с выключенным штрафом за тип дома: deals.house_type пуст у 96 974 из 96 974, у источника заполнен на 99.74%
Opened
#2864 chore(tooling): pre-commit пинит ruff v0.7.4, в venv 0.15.12 — хук переформатирует чужие строки
Opened
#2867 ПТИЦА: avg_area_m2 в топ-планировках показывает 0 м² вместо «нет данных» (нужна правка контракта)
Opened
#2869 CI/деплой встали: диск VPS 94%, копятся buildx-билдеры (20 штук, до 2 месяцев)
Opened
#2871 CI: backend-tests краснеет ПОСЛЕ зелёного pytest, и по логу нельзя понять, в каком шаге
Opened
#2894 B2C: бесплатная проба покрытия — POST /trade-in/coverage
Opened
#2896 B2C: платёжный контур 150 ₽ (CloudPayments) + серверный пейволл
Opened
#2895 B2C: анонимный периметр — открыть geocode/suggest и coverage без авторизации
Opened
#2897 B2C: страница отчёта /r/<token> + доставка на e-mail
Opened
#2898 estimator: окно прогноза срока продажи вместо одного числа + персист
Opened
#2899 estimator: положение объекта на рынке (перцентиль внутри когорты)
Opened
#2900 B2C data: контур сверки «прогноз → факт сделки»
Opened
#2901 B2C: раздел статей (SEO-контур)
Opened
#2902 B2C: «Продажа под ключ» — приём заявки на агентскую услугу
Opened
#2904 compliance: заменить маркетинговые метрики лэндинга на вычисляемые до снятия noindex
Opened
#2903 B2C: игра «Проверьте себя» на реальных сделках
Opened
#2916 ops: правка Caddyfile ради МЕРЫ пересобирает и передеплоивает Site Finder, применяя все pending SQL
Opened
#2917 ops: смоук периметра МЕРЫ не запускается после деплоя — регресс живёт до суток
Opened
#2924 tradein: очередь yandex_newbuilding упирается в одни и те же пять домов — неудача ничего не помечает
Opened
#2934 [HIGH] ПТИЦА: отчёт утверждает отсутствие природного риска, ни разу его не проверив — 12 мест
Opened
#2936 [HIGH] МЕРА/эстиматор: отбор сопоставимых предпочитает источник с худшими данными — отсутствие поля считается идеальным совпадением
Opened
#2950 Деплой Trade-In своим prune -af убивает compose pull деплоя ПТИЦЫ (разные группы concurrency, один докер-демон)
Opened
#2953 tradein: 429 от Nominatim — сдерживатель темпа стоит на успешной ветке, при череде неудач его нет
Opened
#2956 [needs-human] НСПД не отдаёт данные с 27.07 — 24 суток без единого успешного дампа, WAF 403 на IP VPS
Opened
#2962 tradein/ПТИЦА: мост gap-fill по objective_lots.complex_id тянет чужие ЖК — скорость и цена раздуты вчетверо у 185 конкурентов
Opened
#2967 ПТИЦА: основной источник скорости продаж (objective) не выбирался ни разу — порог 50%, максимум покрытия 23.7%
Opened
#2982 act_number не извлекается ни у одной строки land_reservation — регекс ждёт суффикс областных актов
Opened
#2985 cad_territorial_zones: запрос к НСПД на каждый квартал, 1 строка в таблице и ни одного читателя
Opened
#2986 gisogd_permits: ключ (doc_group, doc_num) схлопывает 2243 разных документа — на проде нет 23.9% реестра
Opened
#2989 [EPIC] МЕРА: пересборка базы начисто при переезде на выделенный сервер
Opened
#2990 Чистый старт БД падает на миграции 077: FDW-backfill выполняется до создания USER MAPPING
Opened
#2991 Postgres на стоковом конфиге: shared_buffers 128 МБ на базу 21 ГБ, wal_compression off при доле FPI 55-86%
Opened
#2992 Апсерт переписывает 41 колонку безусловно — корень 15 ГБ раздутости и 7 ГБ WAL в сутки
Opened
#2993 listing_source_snapshot пишет полную копию всех источников каждые сутки — 97,6% строк дубли по построению
Opened
#2994 26 203 мёртвых объявления числятся активными: deactivate_stale_* читают last_seen_at, который лжёт
Opened
#2995 Кросс-источниковый дедуп объявлений невозможен по построению: dedup_hash = source + source_id, матчер не вызывается ни разу
Opened
#2996 Блокер Москвы: город входит в ценовую формулу текстом, нормализованный адрес считается уникальным по всей стране
Opened
#2997 Индексы: ~855 МБ мёртвых и дублирующих на listings, у houses вообще нет индекса под geography
Opened
#2998 Росреестр не грузится 39 суток: rosreestr_dkp_import каждый день рапортует done с total_seen=0
Opened
#3005 Cron бэкапа tradein вызывает скрипт сырым путём — потеря бита +x сломает бэкап молча
Opened
#3027 Переезд: понизить TTL на 13 доменах за 24–48 часов до окна
Opened
#3028 Переезд: скрапперы остаются на Beget — построчный upsert через сеть станет часами ожидания
Opened
#3029 Переезд: деплой-конвейер разворачивается наизнанку — раннеры на Beget катят на Selectel
Opened
#3030 Переезд: лимиты потребления на Beget после разгрузки — cgroup, своп, prune, мониторинг
Opened
#3031 Переезд: зоопарк дашбордов в LXC на новом хосте, сертификаты 13 сайтов перевыпустить, 94.228.121.73 погасить
Opened
#3032 Переезд: замерить фактическую задержку Beget ↔ Selectel СПб — оценка 10–15 мс не проверялась
Opened
#3033 Авито: у площадки есть родной фильтр вторички — качаем впятеро больше, чем нужно
Opened
#3034 Авито: притворяемся Chrome 120 в 2026 году, и заголовки внутренне противоречивы
Opened
#3035 Авито detail-бэкфилл отрезает ?context= — теряется searchHash, карточка выглядит пришедшей ниоткуда
Opened
#3036 Данные о доме с площадок не доезжают: консьерж заполнен у 5 домов из 10 131, а парсим мы его на каждой карточке
Opened
#3037 Авито отдаёт историю цен по объявлению — не запрашиваем вовсе
Opened
#3043 Авито: geoCoords/radius в SERP-URL сервером не применяются — якорный city-sweep качает 5× одну и ту же городскую выдачу
Opened
#3044 Авито detail: HTTP 439 не обработан вовсе, а 429 с бан-страницей QRATOR ретраится на сожжённом IP
Opened
#3045 Корень отказов Авито: QRATOR отдаёт proof-of-work челлендж, а мы его не проходим ни одним из путей
Opened
#3047 Парсер карточки Авито недобирает поля: параметры дома теряются молча, метро тянется из описания, собственник не парсится
Opened
#3051 Москва, часть 1/3: ключи регионов — реестр вместо констант, city_fias_id, doc_type
Opened
#3052 Москва, часть 2/3: гард по полигону вместо радиуса 3 км — адрес перестаёт быть уникальным по стране
Opened
#3053 Москва, часть 3/3: решение по FDW — обогащение ходит в чужую базу, переезд рвёт связь
Opened
#3057 Переезд: раннбук окна cutover — порядок, тайминги, критерии отката
Opened
#3059 Переезд: перечень интеграций, привязанных к IP 46.173.16.127 — что ломается молча
Opened
#3061 [БЛОКЕР] Переезд ломает сам Forgejo: его БД живёт внутри уезжающего gendesign-postgres-1
Opened
#3063 Яндекс: is_homeowner / is_pro_seller стираются при каждом «бедном» re-scrape (живая потеря данных)
Opened
#3064 Домклик: богатые поля SERP оседают в raw_payload и никуда не доезжают (100 % NULL в колонках)
Opened
#3074 Скрапперы: чекпоинты — длинный прогон продолжается с места обрыва, а не начинается заново
Opened
#3075 После переезда: сузить периметр доступа — отзыв старого ключа, узкие правила SSH, уборка секретов
Opened
#3078 Телеметрия: метрики и Grafana — сегодня тихий отказ не виден ничем
Opened
#3081 MERA: карточка прогресса оценки показывает выдуманные стадии и ссылается на серверную механику, которой в этом пути нет
Opened
#3082 MERA: на /trade-in/estimate нет ограничителя одновременности — рейт-лимит меряет частоту, а не параллелизм
Opened
#3083 MERA: бэкенд оценки крутится в один воркер uvicorn — тяжёлый /estimate внутри event loop блокирует всех
Opened
#3085 Блокер 30.08: на Poincare нет бэкапов вообще — пустой crontab, и отказ будет тихим
Opened
#3094 Переезд: на Poincare не задан TRADEIN_DATABASE_URL — newbuilding-crossload молча грузит 0 лотов вместо ~11 000/сут
Opened
#3110 Переезд: 188.246.224.93 заблокирован у российских операторов — продукты недоступны клиентам с 25.08
Opened
#3114 Пароли БД утекают в логи: postgres_exporter печатает DSN при каждой неудачной сборке WAL-метрик (~210 строк в сутки)
Opened
#3118 Домклик не собирается с 5 августа: 17 банов подряд, QRATOR рубит на первой из шести корзин
Opened
#3119 Poincare не отвечает с 00:41 МСК — продукты лежат девять часов, и об этом никто не узнал
Opened
#3122 Планировщик: зомби после ребута хоста блокируют источники до 6 часов — нужен boot-reap по границе старта контейнера
Opened
#3148 Легаси-периметр impersonate: три прод-пути бэкенда остались на chrome120, а тест это закрепляет
Opened
#3151 geocode-бэкфилл: budget_sec проверяется только между батчами — прогон ушёл на 175 % бюджета
Opened
#3154 Секрет вебхука GlitchTip уходит в Loki: uvicorn логирует query-параметр, скруббер #3115 его не ловит
Opened
#3155 Prometheus не видел ни одного Alertmanager: цель file_sd осталась пустой при включённом профиле alerts
Opened
#3156 tgbot: getUpdates падает 23 раза в сутки, а в логе пустая строка вместо причины
Opened
#3157 Доставка уведомлений GlitchTip ненаблюдаема: is_sent не означает, что кто-то их получил
Opened
#3159 GlitchTip: почта уходит в /dev/null (EMAIL_URL=consolemail://), uptime-мониторы шлют в никуда
Opened
#3158 Grafana: ноль правил алертинга и ноль контакт-поинтов — решить, нужен ли он вообще
Opened
#3161 Alertmanager отвечает 404 на /api/v2/alerts: внешний префикс распространён на весь API
Opened
#3163 Тема «метрики» в Telegram пуста: инфра-алерты и клиентские инциденты делят одну тему 158
Opened
#3164 Уведомления бэкапов уходят в общую тему форума: TELEGRAM_TOPIC_ID не задан ни в одном env бэкапов
Opened
#3168 import_rosreestr_dkp: курсор last_id живёт только в памяти — рестарт начинает импорт с нуля
Opened
#3170 yandex_city_sweep: combo с упавшим сохранением уходит в чекпоинт — молчаливая дыра в покрытии
Opened
#3171 Ротация IP прокси построена, но не вызвана ни разу: единственный вызывающий — ручка админки
Opened
#3172 Свежесть источника меряется по статусу done — источник с блоками числится мёртвым, пока приносит данные
Opened
#3175 Квартальный harvest НСПД не догоняет устаревание: 50 кварталов в неделю на 11 048 — покрытие сходится к 6%
Opened
#3177 Авито detail: авторизованные сессии — хранение кук, липкость к прокси, прогрев в браузерном пути
Opened
#3178 Авито/Домклик: ban_kind теряет явное большинство при схлопывании + причина в алерте захардкожена
Opened
#3179 Авито: распространить существующее хранилище сессий (как у Циана/Домклика) + липкость к exit-IP
Opened
#3180 Авито: браузерный путь берёт сохранённую сессию + прогрев, сейчас ходит холодным
Opened
#3181 Авито: измерить потолок карточек на сессию и развести «аккаунт vs прогретые куки»
Opened
#3182 Флаг AVITO_DETAIL_BACKFILL_USE_CURL имеет разные значения в контейнерах, которые оба исполняют задачи
Opened
#3184 Обрыв по серии блоков срабатывает на КАЖДОМ прогоне (40 из 40 за 14 дней) — критерий не несёт информации
Opened
#3185 Сайдкар безусловно блокирует картинки — camoufox предупреждает, что это детектируется WAF (44 раза за 3 часа)
Opened
#3187 Сайдкар жёстко задаёт таймзону МСК поверх geoip — camoufox предупреждает о детекте при расхождении с IP
Opened
#3189 Домклик: критерий обрыва по доле блоков — нужна своя калибровка (один прокси без ротации, цена ошибки другая)
Opened
#3190 Домклик detail: сайдкар даёт чистый контекст на каждый запрос, мы реплеим протухший qrator_jsid2 — отсюда «одна карточка и стена»
Opened
#3191 Яндекс: недорендеренная карточка (1,8 МБ вместо 3,9) принимается за успешную — проверка размера отвечает не на тот вопрос
Opened
#3192 Яндекс: авторизованная сессия открывает контакты продавца (author.phoneNumbers) — хранилище сессии и извлечение телефонов
Opened
#3194 Ключ шифрования кук и сами куки уезжают в GlitchTip через текст исключения SQLAlchemy (все три сервиса сессий)
Opened
#3196 Скрапперы A1: detail-пути ДомКлика, Циана и Яндекса не проставляют ban_kind — 23 бана Авито числятся unknown, у Яндекса ветка бана мертва
Opened
#3197 Скрапперы A2: четыре точки ходят мимо пула прокси, и тёплый контекст сайдкара ключуется по провайдеру, а не по узлу
Opened
#3205 tradein/domclick: площадка отдаёт одну карточку на экземпляр браузера — перезапускать camoufox после каждой страницы
Opened
#3208 dev-env: разделить трафик рабочей машины (VPN / геохайд / прод-прокси / обычный) — сейчас DNS тормозит и мешает воспроизводить прод локально
Opened
#3212 fix(tradein/domclick): перезапуск браузера на карточку уничтожает пропуск QRATOR — лечим симптом, который сами и создаём
Opened
#3219 MCP-стек рефакторинга: хвосты после PR #3209 (DuckDB, покрытие codanna, копипаста в forecasting)
Opened
#3225 tradein: offer_price_history.diff_percent у domklik — колонка смешанных единиц (рубли и проценты вперемешку)
Opened
#3234 Аналоги подбираются без учёта класса дома — total_floors как прокси серии
Opened
#3239 tradein/domclick: после #3237 настоящий отказ площадки перестал банить узел — уехал в ветку «сбой транспорта»
Opened
#3246 tradein/proxy: блок Домклика банит узел пула на двое суток там, где хватило бы сброса контекста
Opened
#3248 Пересчитать хедонические коэффициенты поверх area-бакетного ratio — площадь штрафуется дважды, 4+ комнат занижены на 21%
Opened
#3251 tradein/scrapers: проверить Авито, Циан и Яндекс тем же способом, что вскрыл дефекты Домклика
Opened
#3252 tradein/domclick: аудит полноты — что есть на странице карточки и чего мы не забираем
Opened
#3253 tradein/domclick: данные о доме с карточки не доезжают до houses — 400 домов против 3061 объявления
Opened
#3256 Пересчитать asking_to_sold_ratios — бакет ≥85 м² занижен на 5%, остаток занижения крупного жилья
Opened
#3261 tradein/domclick: проверить, не травят ли контекст инжектируемые куки сессии — последняя невыясненная разница между добором и ручными пробами
Opened
#3263 tradein/browser: заход через поиск Яндекса срабатывает 2 раза из 9 — капча на выдаче, откат без Referer
Opened
#3264 tradein/domclick: свип ходит на QRATOR без кук сессии — все запросы виснут на PoW, 0 лотов
Opened
#3270 CI Trade-In: test_fifth_concurrent_estimate_gets_fast_429 виснет на 120с — гонка на sleep(0.05)
Opened
#3272 tradein/domclick: «система защиты от протечек» в описании квартиры читалась свипом как блок QRATOR
Opened
#3274 Публичный лендинг лежит 30–90 секунд при КАЖДОМ деплое: подмена контейнера всплывает как 502
Opened
#3280 Лендинг на мобильном: тикер — 39% узлов страницы (446 из 1142). Анимация при этом невиновна
Opened
#3283 tradein/domclick: пустой пул прокси и таймаут навигации считаются блоками площадки и вместе рвут добор карточек
Opened
#3284 tradein/cian: добор карточек работает без единого отказа, но квота 100/сутки — остаток разгребается 190 дней
Opened
#3288 tradein/avito: отказ сайдкара и пустой пул считаются блоками площадки и рвут добор по доле — тот же дефект, что #3283, но по ratio
Opened
#3297 tradein/avito: browser-путь detail не смотрит на HTTP-статус — отказ 439 приезжает как ошибка парсинга, узел не ротируется
Opened
#3299 tradein/proxy_pool: защита «последнего узла выделенной affinity» не считает узлы 'any' и прячет свободный узел от всех источников
Opened
#3307 domrf_kn: наш.дом.рф сменил анти-бот на StormWall — IP Poincare блокируется, конвейер КН стоит с 28.06
Opened
#3310 proxy_pool: защита последнего узла бережёт бан, но не счётчик отказов — узел выбывает через 3 мс после обещания «продолжит выдаваться»
Opened
#3311 tradein/scrapers: 101 городское расписание выключено и не запускалось ни разу — 39 городов области не отличимы от «собрано и пусто»
Opened
#3312 tradein/scheduler: пропуск по протухшим кукам Циана отбрасывает следующий запуск на сутки вместо шести часов — _defer_next_run_at не знает про interval_minutes
Opened
#3315 avito exhaustive: резюм пере-пробивает готовые полосы — на худом пуле весь бан-бюджет сгорает до первой новой корзины
Opened
#3316 [SECURITY][P1] tradein/team: имя из roles.yaml при создании сотрудника даёт эскалацию до admin — IDOR по всем оценкам и безлимит квоты
Opened
#3319 avito_city_sweep: чекпоинт мёртв по построению — 0 из 67 прогонов за 60 дней записали done_buckets, плюс две дыры честности
Opened
#3320 v2: четыре места, где числа честно посчитаны и нечестно показаны — «0,00 млн · −100%» зелёным, смешанные выборки в футере, deals-only полоса, бейдж о…
Opened
#3321 лендинг: обязательные этаж и состояние уничтожаются непрочитанными — takeDraft() удаляет черновик целиком на монтировании /estimate
Opened
#3322 Россети WFS: сессионный feature.id как external_id — power_supply_centers раздут ×10, ON CONFLICT не сработал ни разу
Opened
#3323 Сборник аудита 02.09 — средние/низкие подтверждённые находки (7 шт., каждая с уликой скептика)
Opened
#3324 Деплой ПТИЦЫ проверяет только backend /health — мёртвый frontend или crash-loop worker/beat уезжают зелёным деплоем
Opened
#3332 domclick_detail_backfill: обрыв «пул пуст» бросает попытку неучтённой — attempted ≠ enriched+failed+blocked
Opened
#3333 scraper-kit: дрейн-метка interrupted только у avito_city_sweep — у yandex/cian/newbuilding дрейн по-прежнему неотличим от полного done
Opened
#3338 yandex/avito detail_backfill: save-False не начисляет исход — та же потеря попытки, что #3332 у domclick
Opened
#3339 v2: флаг thin_market карточки avito_imv нигде не отрисован — «display-only» обещание без display
Opened
#3341 PDF-отчёт клиента печатает реальные названия площадок — привести к норме publicLabel («Источник N»)
Opened
#3343 Флаки: test_auth_api.py — замер «худший сторонний запрос < 500 мс» падает на нагруженном раннере и роняет деплой tradein
Opened
#3354 Alloy: второй слой скруббинга query-секретов (secret|token|api_key) в alloy-apps.alloy — defence-in-depth к #3154
Opened
#3355 scraper-kit: ещё 4 дрейна с живым чекпоинтом без метки interrupted — domclick sweep и три full-load (cian/yandex/avito) нерезюмируемы после SIGTERM
Opened
#3359 scraper-kit: containment-skip до пробы (#3315) подключён только у avito — cian/yandex full-load при резюме тоже пере-пробивают готовые полосы
Opened
#3360 [SECURITY] Caddy: /trade-in/api/v1/admin/* доступен снаружи анонимно до guard'а — нет среза админского префикса на периметре
Opened
#3366 scraper-kit: run_yandex_full_load не имеет job'а в планировщике — единственный вход админский POST, резюм/чекпоинт без авто-потребителя
Opened
#3368 yandex full-load: _leaf, обрезанный max_pages_per_bucket/CAP, пишется в done-леджер как complete — с containment (#3362) хвост крупного бакета не переобходится
Opened
#3369 domclick city sweep: cancel-ветка пишет counters без done_buckets — резюм cancelled-прогона пересобирает всё заново
Opened
#3375 [P1] yandex full-load: _leaf/_degraded передают on_bucket(key, len(seen), …) — int уезжает в save_listings как lots → TypeError, ручной full-load Яндекса ничего не сохраняет
Opened
#3376 domklik price history: 42 скачка ровно ×10 (потерянный разряд в цене источника) — миграция 285 их честно пересчитала в +900 %, гейт лоадера такие занулит; п…
Opened
#3380 deploy-metrics: up -d не перечитывает одно-файловый bind-mount конфига Alloy (Beget читал конфиг 26.08 после успешного деплоя #3377)
Opened
#3384 tradein: «пул пуст на старте батча» у cian/domclick detail-бэкфиллов уходит мимо no_proxy_stop — scheduler пишет failed со стухшими counters
Opened
#3385 tradein/yandex: сдвиг разряда (×10) в истории цен Яндекса структурно не ловится на записи — нужен отлов «на следующем наблюдении»
Opened
#3386 tradein-backend без USE_PROXY_POOL_* — браузерные скрейпы из backend (yandex full-load, админ-ручки) идут на SCRAPER_PROXY_URL = выключенный узел 9 (407) → camoufox InvalidIP, 83 провала …
Opened
#3390 tradein: две живые копии mark_failed/mark_done с разной семантикой counters — app/services/scrape_runs.py ЗАМЕНЯЕТ, scraper_kit/orchestration/runs.py МЕРЖИТ (||)
Opened
#3391 tradein: SIGTERM-drain при деплое не помечает app-task бэкфиллы (cian_detail/cian_history/avito/domclick detail) — hard-cancel через 100 с, строки остаются running → boot-reap делает их zombie
Opened
#3393 tradein: прогоны, оборванные деплоем (interrupted=1), попадают в лестницы стриков — failed-ratio судит частичные counters, а done обнуляет стрик банов источника
Opened
#3394 tradein/cian: фаза houses у cian_city_sweep падает 0/30 с 02.09 — fetch_newbuilding зовётся без proxy_provider → env-фолбэк на мёртвый узел 9 → сайдкар 503
Opened
#3398 tradein: пул прокси на пути /estimate — синхронный acquire без statement_timeout на event loop, IMV-баны атрибутируются источнику avito целиком, house_imv_backfill curl-путь без …
Opened
#3401 tradein/dadata: услуга CLEAN (стандартизация) выключена на аккаунте — HTTP 403, /estimate работает через suggest-fallback без canonical/cadnum (решение владельца: включить…
Opened
#3402 tradein/cian: капча Циана приходит с HTTP 200 и не распознаётся как отказ площадки — cian_detail_backfill сжигает батч (0/210, 0/400) на одном узле, парсер пишет «def…
Opened
#3404 Выбор оператора прокси неизмерим: прогон не связан с узлом, а история банов стирается успешной ротацией
Opened
#3408 tradein-backend: пул коннектов SQLAlchemy 15 против пикового спроса до 28 на /estimate; sync db.execute/commit в estimator и cian_price_history на публичном event loop
Opened
#3410 tradein/browser: /login сайдкара не принимает proxy-override — cian auto-login всегда идёт с env-узла сайдкара (сейчас выключенный узел 9 → InvalidIP)
Opened
#3411 tradein/cian: страницы ЖК (zhk-*.cian.ru) не грузятся — Page.goto timeout 60s, фаза houses городского свипа остаётся пустой даже через пул
Opened
#3412 tradein/browser: cian-инстанс camoufox отказывает в 63% запусков (99/156 за 30ч) — релонч браузера перед КАЖДЫМ fetch из-за чередования аренд; generic на том же узле 0%
Opened
#3413 tradein/browser: cian-инстанс camoufox отказывает в 63% запусков (99/156 за 30ч) — релонч браузера перед КАЖДЫМ fetch из-за чередования аренд; generic на том же узле 0%
Opened
#3414 tradein/browser: cian-инстанс camoufox отказывает в 63% запусков (99/156 за 30ч) — релонч браузера перед КАЖДЫМ fetch из-за чередования аренд; generic на том же узле 0%
Opened
#3415 scraper-kit/cian: бакет уходит в done_buckets, хотя фаза houses внутри отказала полностью — следующий прогон пропускает фазу и рапортует done с houses_attempted=0
Opened
#3416 scraper-kit/cian: бакет уходит в done_buckets, хотя фаза houses внутри отказала полностью — следующий прогон пропускает фазу и рапортует done с houses_attempted=0
Opened
#3417 scraper-kit/cian: бакет уходит в done_buckets, хотя фаза houses внутри отказала полностью — следующий прогон пропускает фазу и рапортует done с houses_attempted=0
Opened
#3418 scraper-kit/cian: бакет уходит в done_buckets, хотя фаза houses внутри отказала полностью — следующий прогон пропускает фазу и рапортует done с houses_attempted=0
Opened
#3419 tradein/cian: 80 таймаутов навигации в сутки на ПРОГРЕТЫХ инстансах — хвост латентности Циана против BROWSER_NAV_TIMEOUT_MS=60000 не измерен
Opened
#3439 tradein/avito: серия отказов НАШЕГО тракта не рвёт detail-бэкфилл — 4 прогона × 1600 попыток дали 8 карточек и статус done (infra провалился между ratio-брейк…
Opened
#3443 Полный деплой ПТИЦЫ роняет сам Caddy на 67 секунд — все домены отдают code=000, заглушка окна деплоя здесь бессильна по построению
Opened
#3448 Быстрый путь caddy_only не исполняется: мерж с единственным caddy-файлом пересоздал весь стек ПТИЦЫ, а пропущенная джоба показана как success
Opened
#3449 geocoder: отмена по бюджету оставляет поток работать с сессией запроса — следующий шаг ловит «another operation is in progress», персист оценки отдаёт 500
Opened
#3450 MERA/оценка: премиальный лот прижимается к коридору сделок обычной вторички своей улицы — Малышева 84 теряет 41.8% от клампа
Opened
#3451 tradein: TVF street_sales_vs_listings фильтрует сделки по d.rooms — та же синтетика, что снята в #3256; /sales-vs-listings отдаёт пустое пересечение
Opened
#3452 MERA/оценка: порог показа коридора (3) и порог доверия к нему (10) рассогласованы — клиенты в зоне 3..9 видят коридор, но ценовая страховка молча …
Opened
#3463 tradein-backend: у запросов к БД нет потолка ни по времени, ни по ожиданию блокировки — одна заблокированная таблица вешает /estimate для всех
Opened
#3466 MERA/оценка: пометка «коридор справочный» не покрывает Tier A — там сделок много, пометки нет, а кламп всё равно выключен
Opened
#3467 Деплой метрик кладёт правила на диск, но Prometheus их не перечитывает — правка алерта не вступает в силу, а деплой зелёный
Opened
#3469 Витрина сделок на лендинге МЕРЫ не пересчитывается: задачи нет в расписании, последний прогон 30.08 (13 суток назад), всего 3 прогона за всё вр…
Opened
#3471 Инвентаризация проблем прода 12.09.2026: потерянный ответ клиенту, доставка алертов, слепые зоны мониторинга
Opened
#3480 tradein: транзакция живёт дольше часа регулярно (50 замеров из 4033 за 14 суток, пик 2.2 ч) — пока она жива, vacuum не убирает мёртвые строки во ВСЕЙ базе
Opened
#3486 postgres-exporter: queries.yml примонтирован одиночным файлом и читается только при старте — правка не вступит в силу, джобы агентов пересоздают тольк…
Opened
#3493 NoActiveCeleryWorkers врёт: воркер жив и берёт задачи каждую минуту, а тревога говорит «все periodic-таски встали» — на самом деле не поднят экспортер (ag…
Opened
#3511 Витрина лендинга: прогон с нулём строк завершается успехом, гасит часы свежести и снимает со страницы весь блок вместе с датой
8 unresolved conversations
Open
#667
[tradein][analytics] Point-in-time backtest estimator через listing_source_snapshots (#570)
Open
#401
feat(tradein): #5 — источник Дом.РФ
Open
#301
feat(generative): reverse-train generative engine on real DOM.РФ plans — Phase 3
Open
#81
B8-1: Product analytics — PostHog self-hosted EU
Open
#300
feat(plans): semantic floor plan vectorization — Phase 2 (CubiCasa5K)
Open
#59
B1-6: Pilot tracker / коммерческая воронка (50 leads → 3 пилота)
Open
#58
B1-5: Реестр ПО — подготовка заявки (60-180 дней рассмотрения!)
Open
#52
Extra E2: B2B integration registry (вопросы для Макса)