Commit graph

  • b3e7a9f9fa Merge pull request 'fix(tradein): cian fetch_newbuilding через BrowserFetcher (camoufox) — initialState под анти-ботом (#972)' (#1540) from fix/cian-newbuilding-browser-fetch into main lekss361 2026-06-15 15:44:42 +00:00
  • 3859624d1d Merge pull request 'feat(tradein): yandex_newbuilding sweep-entrypoint + market-схема enrichment, seed dormant (#974)' (#1541) from feat/yandex-newbuilding-sweep into main lekss361 2026-06-15 15:44:27 +00:00
  • c9daf8e268 fix(tradein): yandex sweep — guard ext_id=NULL перед fetch_jk + cleanup httpx (#974 review M1/M3) bot-backend 2026-06-15 18:41:08 +03:00
  • 8279b0ee1f fix(week-review): cross-file добивка код-ревью (#1338, #1363, #1419, #1421, #1424, #1480) Light1YT 2026-06-15 20:29:00 +05:00
  • feab585ad5 feat(tradein): yandex_newbuilding sweep-entrypoint + market-схема enrichment, seed dormant (#974) bot-backend 2026-06-15 18:28:58 +03:00
  • 86e9ea2937 fix(week-review): автофиксы код-ревью — 169 issue (label «week ревью 1») Light1YT 2026-06-15 20:21:11 +05:00
  • 480fbba3ca fix(tradein): cian fetch_newbuilding через BrowserFetcher (camoufox) — initialState под анти-ботом (#972) bot-backend 2026-06-15 18:19:32 +03:00
  • cab19020a9 perf(site-finder): pushdown obj_pricing CTE to nearby competitors (#70/#307) (#1335) bot-backend 2026-06-14 16:58:43 +00:00
  • af5e730438 perf(site-finder): pushdown obj_pricing CTE to nearby competitors in analyze (#70, #307) Light1YT 2026-06-14 21:48:45 +05:00
  • 863577beb6 feat(sql): corroborated trgm backfill objective_complex_mapping +17 (#307 OBJ-2 r2) (#1333) bot-backend 2026-06-14 16:45:55 +00:00
  • 5bf30570a5 perf(sql): geography GIST + covering index для analyze-пути Site Finder (157) (#1334) bot-backend 2026-06-14 16:45:22 +00:00
  • 904e945035 perf(sql): geography GIST + covering index для горячего analyze-пути SF (157) Light1YT 2026-06-14 21:32:38 +05:00
  • bcd1b53e25 feat(sql): corroborated trgm backfill objective_complex_mapping +17 (#307 OBJ-2 r2) Light1YT 2026-06-14 21:29:27 +05:00
  • b405ae291d feat(site-finder): additive objective_lots price fallback for competitors (#307 OBJ-3) (#1332) bot-backend 2026-06-14 16:10:02 +00:00
  • 0778af5d2c feat(site-finder): additive objective_lots price fallback for competitors (#307 OBJ-3) Light1YT 2026-06-14 20:59:50 +05:00
  • f9dd903f4d feat(sql): conservative trgm backfill objective_complex_mapping +23 (#307 OBJ-2) (#1331) bot-backend 2026-06-14 15:51:38 +00:00
  • b421f62b3c feat(sql): conservative trgm backfill of objective_complex_mapping (#307 OBJ-2) Light1YT 2026-06-14 20:41:51 +05:00
  • f376d8ce05 fix(tradein-browser): non-fatal launch + background proxy retry (crash-loop 3141x) (#1330) bot-backend 2026-06-14 15:18:58 +00:00
  • 74461e8611 fix(tradein-browser): non-fatal launch + background proxy retry Light1YT 2026-06-14 20:16:12 +05:00
  • 72e0b050f9 feat(site-finder): POI saturation per capita по районам ЕКБ (#42) (#1329) bot-backend 2026-06-14 15:05:22 +00:00
  • 1b77f479e7 feat(site-finder): POI saturation per capita по районам ЕКБ (#42) Light1YT 2026-06-14 19:51:42 +05:00
  • e5e0ccb283 feat(site-finder): сетевые обременения из ЗОУИТ (#1070, Refs #103) (#1328) bot-backend 2026-06-14 14:49:32 +00:00
  • 5507bbc1a4 feat(site-finder): domrf→cad geom-match + parking_ratio конкурентов (#96) (#1327) bot-backend 2026-06-14 14:49:28 +00:00
  • 3dee18743d chore(frontend): regen api-types.ts для /competitors-parking endpoint (#96 codegen-gate) Light1YT 2026-06-14 19:22:33 +05:00
  • 3f245026ee feat(site-finder): выделить сетевые обременения из ЗОУИТ (#1070, Refs #103) Light1YT 2026-06-14 19:17:33 +05:00
  • 7e2065a74f feat(site-finder): wire domrf→cad_buildings geom-match + parking_ratio конкурентов (#96) Light1YT 2026-06-14 19:17:30 +05:00
  • 2c22c3f7ea feat(site-finder): per-building помещения/машино-места + parking_ratio (on-demand MVP, #96) Light1YT 2026-06-14 18:48:16 +05:00
  • 11aa011d11 perf(db): covering-index objective_lots district-price (#70) + 152-ФЗ/perf audit docs (#70 #79) Light1YT 2026-06-14 00:09:09 +05:00
  • d030b04cf2 docs(infra): secrets rotation policy + procedure (#78) Light1YT 2026-06-13 23:48:14 +05:00
  • eb251ba7e7 ci(infra): coverage-gate (#68) + OpenAPI codegen-assert (#69) + uptime monitoring (#75) Light1YT 2026-06-13 23:28:06 +05:00
  • d38417d8af feat(admin): freshness endpoint (#73) + README Forgejo refresh (#83) + migrations doc (#72) Light1YT 2026-06-13 23:12:28 +05:00
  • 8107c23f18 feat(frontend): mobile responsiveness (#66) + data-sources страница (#80) Light1YT 2026-06-13 23:12:31 +05:00
  • e027f0a6ea feat(admin): freshness endpoint (#73) + README Forgejo refresh (#83) + migrations doc (#72) Light1YT 2026-06-13 23:12:28 +05:00
  • 0b20d98b45 feat(site-finder): ЗОУИТ visual layer на Leaflet карте (#255) Light1YT 2026-06-13 22:31:59 +05:00
  • 7d81b1b65f feat(site-finder): ЗОУИТ visual layer на Leaflet карте (#255) Light1YT 2026-06-13 22:31:59 +05:00
  • 50555821fb feat(site_finder): routing POI decay (#41) + OSM utility distances (#44) + ЗОУИТ geom (#255bk) Light1YT 2026-06-13 22:31:56 +05:00
  • adc6dde015 feat(site-finder): multi-cad сравнение (#50) + analytics поиск/cross-links (#65) Light1YT 2026-06-13 22:04:52 +05:00
  • 7d69364e5f feat(site-finder): multi-cad сравнение (#50) + analytics поиск/cross-links (#65) Light1YT 2026-06-13 22:04:52 +05:00
  • 658d724075 feat(analytics): velocity-anomaly alerts (#17) + ARN ДДУ price indicator (#99) Light1YT 2026-06-13 22:04:49 +05:00
  • 3bbbf25412 feat(concept): concept-компоненты (DrawMap/ParamsForm/VariantsResult/ResultMap/ExportButtons) (#57) Light1YT 2026-06-13 21:33:23 +05:00
  • 750d34d5cb feat(concept): Concept UI Stage 1d — ввод участка + варианты (#57) Light1YT 2026-06-13 21:32:35 +05:00
  • 72583ed026 feat(concept): concept-компоненты (DrawMap/ParamsForm/VariantsResult/ResultMap/ExportButtons) (#57) Light1YT 2026-06-13 21:33:23 +05:00
  • 8242e51b61 feat(generative): exporters (dxf/pdf) + generative test suite (#54 #55 #56) Light1YT 2026-06-13 21:33:20 +05:00
  • ab4126eaa1 feat(concept): Concept UI Stage 1d — ввод участка + варианты (#57) Light1YT 2026-06-13 21:32:35 +05:00
  • 3b79533f9f feat(generative): движок концепций Stage 1a/1b/1c (#54 #55 #56) Light1YT 2026-06-13 21:32:32 +05:00
  • d737307022 feat(site-finder): НСПД verify deep-links + landing GenDesign vs НСПД таблица (#97 #100) Light1YT 2026-06-13 20:45:08 +05:00
  • 35871a32bd feat(site-finder): НСПД verify deep-links + landing GenDesign vs НСПД таблица (#97 #100) Light1YT 2026-06-13 20:45:08 +05:00
  • 1883271908 fix(cadastre): NSPD 500-retry + per-layer skip (#252) + disable dead pzz-beat (#259) + geom backfill (#200) Light1YT 2026-06-13 20:45:05 +05:00
  • 84d08940c6 fix(analytics): свежая ипотечная ставка + recommend last_updated + drop dead route (#236 #237 #251) Light1YT 2026-06-13 20:14:57 +05:00
  • 1836a13fb5 fix(analytics): свежая ипотечная ставка + recommend last_updated + drop dead route (#236 #237 #251) Light1YT 2026-06-13 20:14:57 +05:00
  • 6883d14177 fix(ops): repair broken main-DB backup + harden auth scripts/docs (#71 #427 #429 #428) Light1YT 2026-06-13 20:13:04 +05:00
  • d1bc59a5dd chore(objective): fuzzy backfill objective_complex_mapping +115 dev-corroborated (#307 OBJ-2) Light1YT 2026-06-13 18:50:57 +05:00
  • 414601c1d2 test(analytics): vitest для ObjectSaleChart union-months alignment (#1246) Light1YT 2026-06-13 18:20:41 +05:00
  • e2c8c0e97b fix(analytics): выровнять ObjectSaleChart серии по union месяцев всех типов (#1246) Light1YT 2026-06-13 18:20:25 +05:00
  • 16e505326d perf(site-finder): honour AbortSignal в poll-цикле useParcelAnalyzeQuery (#1248) Light1YT 2026-06-13 18:10:21 +05:00
  • b95ba75ac8 perf(site-finder): honour AbortSignal в poll-цикле useParcelAnalyzeQuery (#1248) Light1YT 2026-06-13 18:10:21 +05:00
  • 3cf9fad683 fix(backend): экранировать Excel formula-injection (#1244) + увести chat-чтение с event loop (#1245) Light1YT 2026-06-13 18:10:21 +05:00
  • 99c9a130bc feat(forecast): расширить горизонт прогноза до 24 мес (ТЗ §12.1) Light1YT 2026-06-13 17:27:35 +05:00
  • 4454244ac2 chore(tradein-db): drop duplicate listings_geom_active_idx (#730) Light1YT 2026-06-13 16:47:58 +05:00
  • 851613c4e4 chore(tradein-db): drop duplicate listings_geom_active_idx (#730) Light1YT 2026-06-13 16:47:58 +05:00
  • 6444dc0ebd fix(tradein-frontend): остановить retry-storm на 401 — refetchOnMount:false + backoff (#800) Light1YT 2026-06-13 16:47:58 +05:00
  • e1442d3b1d feat(tradein-scheduler): nightly newbuilding-enrichment schedule (#973) Light1YT 2026-06-13 16:24:03 +05:00
  • b211183940 feat(site-finder): детерминированная атрибуция застройщика в analyze (#1088) Light1YT 2026-06-13 16:13:45 +05:00
  • 3df163f741 fix(snapshot-pdf): Unicode '—' вместо HTML-entity '—' в Jinja or-fallback (#1234) Light1YT 2026-06-13 15:04:12 +05:00
  • eada9a25ac fix(scrapers): izyatie OCR — '6б:' → '66:' для кад-номеров МСК-66 (#1228) Light1YT 2026-06-13 15:03:59 +05:00
  • 367ed890f1 fix(objective-sync): log seed failure вместо bare except pass (#1226) Light1YT 2026-06-13 15:03:34 +05:00
  • d8a2ad7854 fix(auth): отобразить роль analyst в UserMenu, расширить Role union в useMe (#1237) Light1YT 2026-06-13 15:03:15 +05:00
  • 49d26b4696 fix(poi_loader): timedelta(days=730) вместо replace(year=-2) → leap-year 29 февраля safe (#1232) Light1YT 2026-06-13 15:03:08 +05:00
  • c3c6e2cef1 fix(okn): expand registry coverage + load detail-card name/address (#1159) Light1YT 2026-06-13 14:30:29 +05:00
  • 2e428405d2 fix(site-finder): расширить except в parcel_ird_overlaps до DataError (#1095) Light1YT 2026-06-13 14:23:32 +05:00
  • d11c8d47e0 fix(workers): per-prefix db.commit() в gknspecial_harvest для durability (#1116) Light1YT 2026-06-13 14:14:56 +05:00
  • 8a30238564 fix(forecasting): propagate confounded flag DemandSupplyForecast → §15 (#1222) Light1YT 2026-06-13 13:15:18 +05:00
  • fbafb1bf68 fix(landing): mirror Pydantic schema в PilotRequestModal validation (#1240) Light1YT 2026-06-13 13:12:25 +05:00
  • 703d3905b8 fix(site-finder): normalize supply room_bucket vocabulary to velocity side (#1229) Light1YT 2026-06-13 13:09:42 +05:00
  • 780dd5640c fix(analytics): _district_market_saturation latest-snapshot filter (#1221) Light1YT 2026-06-13 13:09:22 +05:00
  • d694e735cd fix(site-finder): per-row SAVEPOINT в noise_loader (#1231) Light1YT 2026-06-13 12:51:35 +05:00
  • 285e8f974a fix(sf): ekb_ppt_tep post-фильтры + врезка в analyze (#1136) Light1YT 2026-06-13 14:28:41 +05:00
  • 3573690ebc fix(sf): ekb_ppt_tep post-фильтры + врезка в analyze (#1136) Light1YT 2026-06-13 14:28:41 +05:00
  • a5ff281bad fix(admin-jobs): UPSERT в PUT /admin/jobs/settings — не терять изменения (#1223) Light1YT 2026-06-13 13:12:30 +05:00
  • f5e7fcdad9 fix(workers): cadastre permanent-fail targets_failed + beat cleanup (#1236) Light1YT 2026-06-13 13:05:03 +05:00
  • 28c567a34e fix(scoring): correct price_feasibility reason — market rate, not subsidized (#1225) Light1YT 2026-06-13 13:08:32 +05:00
  • 1e2fa35c8e fix(admin): persist JSON extra_config при свёрнутой textarea (#1239) Light1YT 2026-06-13 13:05:08 +05:00
  • 816bb3d3bd fix(workers): re-raise SoftTimeLimitExceeded в nspd_geo, set paused (#1235) Light1YT 2026-06-13 13:04:58 +05:00
  • 01d00ec183 fix(custom-pois): invalidate canonical parcel-analyze + parcel-poi-score keys (#1241) Light1YT 2026-06-13 12:47:18 +05:00
  • dc4da28217 fix(admin-jobs): UPSERT в PUT /admin/jobs/settings — не терять изменения (#1223) Light1YT 2026-06-13 13:12:30 +05:00
  • 10df430cac fix(forecasting): _price_overlap zero-width discontinuity at §25.3 (#1224) Light1YT 2026-06-13 12:54:14 +05:00
  • 67d24e9bf7 fix(analytics): ObjectSaleChart tooltip показывает полный ₽/м², не /1000 (#1238) Light1YT 2026-06-13 12:47:23 +05:00
  • 514d627ce6 fix(scoring): correct price_feasibility reason — market rate, not subsidized (#1225) Light1YT 2026-06-13 13:08:32 +05:00
  • ac446236e7 fix(beat): rewrite 4 cron entries in MSK to match conf.timezone (#1233) fix/report-assembler-confounded-keys fix/parcel-ird-overlap-except-expand fix/okn-objects-full-registry-load fix/gknspecial-incremental-commit-per-prefix fix/best-layouts-bucket-normalization Light1YT 2026-06-13 12:44:23 +05:00
  • e71224ef54 fix(scrapers): commit outer tx в domrf_catalog scrape_catalog_batch (#1227) Light1YT 2026-06-13 12:44:18 +05:00
  • f21ffd927b fix(admin): persist JSON extra_config при свёрнутой textarea (#1239) Light1YT 2026-06-13 13:05:08 +05:00
  • fc3f8b890a fix(workers): cadastre permanent-fail targets_failed + beat cleanup (#1236) Light1YT 2026-06-13 13:05:03 +05:00
  • 582eb4e8b0 fix(workers): re-raise SoftTimeLimitExceeded в nspd_geo, set paused (#1235) Light1YT 2026-06-13 13:04:58 +05:00
  • 582f384a5f fix(forecasting): _price_overlap zero-width discontinuity at §25.3 (#1224) Light1YT 2026-06-13 12:54:14 +05:00
  • 931273628a fix(site-analysis): per-call AbortController, не shared cancelledRef (#1242) Light1YT 2026-06-13 12:43:47 +05:00
  • c97072314e fix(analytics): ObjectSaleChart tooltip показывает полный ₽/м², не /1000 (#1238) Light1YT 2026-06-13 12:47:23 +05:00
  • a1a0aaead6 fix(custom-pois): invalidate canonical parcel-analyze + parcel-poi-score keys (#1241) Light1YT 2026-06-13 12:47:18 +05:00
  • bcb57bafd3 fix(beat): rewrite 4 cron entries in MSK to match conf.timezone (#1233) Light1YT 2026-06-13 12:44:23 +05:00
  • 141873d061 fix(scrapers): commit outer tx в domrf_catalog scrape_catalog_batch (#1227) Light1YT 2026-06-13 12:44:18 +05:00
  • 9fbc28fa33 fix(site-analysis): per-call AbortController, не shared cancelledRef (#1242) Light1YT 2026-06-13 12:43:47 +05:00