(medium) scrape_pipeline.run_avito_city_sweep: IMV-фаза отравляет сессию → update_heartbeat без rollback переводит успешный sweep в 'failed'
(low) estimator.py/estimate_quality: freshness/last_scraped_at/days_on_market считаются по listings_clean, а не по показанным anchor_comps_used
(medium) estimator.py/estimate_quality SB-anchor: границы диапазона из RAW comp_ppm2 без repair_coef рассинхронизированы с центром
(low) search.py/_validate_geo_pair: cross-field min>max через truthiness — граничный 0 обходит проверку
(low) schemas/search.py _validate_geo_pair: нет проверки инвертированных вилок floor/year_built/floors_total (min>max)
(medium) search.py/search(): cache_hit всегда false даже при отдаче из кэша — поле врёт
(high) search.py/search_query.py: кадастровый номер всегда NULL в выдаче поиска — рассинхрон имён cadastral_number vs kadastr_num
(medium) 12_more_pois.py/main: bbox padding ±0.005° меньше радиуса привязки 2 км — POI у границ теряются
(medium) 04_report.py/build_html: селектор .r.r красит все числовые ячейки в красный и перебивает зелёный
(medium) 04_report.py/build_html: заголовок «последние 90 дней» не соответствует реальным периодам real_* (12 мес / всё время)
(high) 04_report.py/build_html: HTML-подпись весов противоречит JSON weights_used в том же отчёте
(high) 04_report.py/main: JSON weights_used не соответствует реальным весам скоринга и не содержит economic
(low) server.py/price_distribution: квантиль int(p*n) завышает p25/p50/p75 на малых выборках
(low) server.py/district_time_machine: AVG(price) выдаётся под ключом median_price_kr
(medium) server.py/jk_full: import psycopg2 в проде (psycopg v3 only) → photos/sale_graph всегда пустые
(low) server.py/developer_track_record: двойной учёт лотов при N сайтах на один Objective-проект
(low) check-no-print.py/main: matcher только Edit|Write — print через MultiEdit не блокируется
(low) check-no-print.py/PRINT_RE: ловит закомментированный print, строковые литералы и method-call .print() — ложные блокировки
(low) check-no-print.py/normalize_path: rfind берёт последнее 'backend/' — ломает allow-prefix для вложенных backend-каталогов
(low) check-no-print.py/normalize_path: rfind('backend/') матчит подстроку, а не сегмент пути