Commit graph

  • 70c079dd50 feat(cadastre): NSPDBulkClient + schemas for bulk ingest (#168 PR2/5) lekss361 2026-05-15 12:42:18 +03:00
  • c6fb30fdea feat(db): schema migration for bulk cadastre ingest layers (#168) lekss361 2026-05-15 12:33:08 +03:00
  • b4327635fa
    fix(site-finder): visible by-quarter pipeline bars (#167) lekss361 2026-05-15 10:35:51 +03:00
  • ca5d0acbff fix(site-finder): visible by-quarter pipeline bars lekss361 2026-05-15 10:31:32 +03:00
  • faa99abb94
    feat(site-finder): per-room bucket breakdown в VelocityBlock (#166) lekss361 2026-05-15 10:12:42 +03:00
  • d7fbaa0528
    feat(velocity): per-room-bucket breakdown in VelocityResult (#163) lekss361 2026-05-15 10:09:03 +03:00
  • 30d78c5030
    fix(pipeline): enrich obj_class via objective_lots COALESCE fallback (#165) lekss361 2026-05-15 10:07:52 +03:00
  • 8c41a66dbd feat(site-finder): per-room bucket breakdown в VelocityBlock lekss361 2026-05-15 10:05:38 +03:00
  • ee16d6c3fd fix(pipeline): enrich obj_class via objective_lots COALESCE fallback lekss361 2026-05-15 10:00:55 +03:00
  • fdfe023698 feat(velocity): add per-room-bucket breakdown to VelocityResult lekss361 2026-05-15 10:00:04 +03:00
  • 46584d7c75
    fix(velocity): :window_interval::interval cast syntax — same bug as PR #152 (#160) lekss361 2026-05-15 09:46:01 +03:00
  • a572cf39d1 fix(velocity): :window_interval::interval cast syntax — same bug as PR #152 lekss361 2026-05-15 09:39:06 +03:00
  • fbe926cbd7 fix(velocity): :window_interval::interval cast syntax — same bug as PR #152 lekss361 2026-05-15 09:39:06 +03:00
  • 8fa1d005fd
    feat(velocity): migrate D2 sales source → objective_corpus_room_month (#158) lekss361 2026-05-15 09:34:00 +03:00
  • 5c926470c6 fix(types): add 'objective' to velocity_source union (cherry-pick miss) lekss361 2026-05-15 09:29:01 +03:00
  • cc03ffa32d fix(velocity): cross-stack contract + NULL safety per pre-push review lekss361 2026-05-15 09:20:51 +03:00
  • a21f440dcf feat(velocity): migrate D2 sales source from stale sale_graph to objective_corpus_room_month lekss361 2026-05-15 09:16:03 +03:00
  • c29e6ab661 fix(velocity): cross-stack contract + NULL safety per pre-push review lekss361 2026-05-15 09:20:51 +03:00
  • fa6bbafa3f feat(velocity): migrate D2 sales source from stale sale_graph to objective_corpus_room_month lekss361 2026-05-15 09:16:03 +03:00
  • c39b53cf53
    fix(site-finder): cascade InFailedSqlTransaction — velocity internal rollback (#155) lekss361 2026-05-15 08:52:38 +03:00
  • 37fd4b5a8e fix(velocity): SAVEPOINT per query (not db.rollback) — correct SQLAlchemy 2.0 pattern lekss361 2026-05-15 08:49:28 +03:00
  • c3cafefb1a fix(site-finder): db.rollback() в velocity catches + SAVEPOINT zoning/success_rec lekss361 2026-05-15 08:40:48 +03:00
  • b13c4be0ed
    fix(parcels): SAVEPOINT around velocity compute → не abort outer tx (#154) lekss361 2026-05-15 08:29:24 +03:00
  • b08597ba61 fix(parcels): SAVEPOINT around velocity compute → не abort outer tx lekss361 2026-05-15 08:26:40 +03:00
  • d0b8eda6ad
    fix(deploy): source root .env (где POSTGRES_USER) не backend/.env (#153) lekss361 2026-05-15 08:19:17 +03:00
  • 2dd0b20669 fix(deploy): source root .env (где POSTGRES_USER) не backend/.env lekss361 2026-05-15 08:16:26 +03:00
  • af39e95f83
    fix(site-finder): SQLAlchemy syntax error :weights::jsonb → CAST(:weights AS jsonb) (#152) lekss361 2026-05-15 08:12:18 +03:00
  • 6164826805 fix(site-finder): SQLAlchemy syntax error :weights::jsonb → CAST(:weights AS jsonb) lekss361 2026-05-15 08:09:32 +03:00
  • 7c43bc5496
    feat(infra): auto-apply data/sql/*.sql migrations in deploy pipeline (#150) (#151) lekss361 2026-05-15 08:06:54 +03:00
  • e5d77b17b7 feat(infra): auto-apply data/sql/*.sql migrations in deploy pipeline (#150) lekss361 2026-05-15 07:57:51 +03:00
  • 142ed95d36
    fix(frontend): apiFetchWithStatus body stream double-read crash (#149) lekss361 2026-05-15 07:39:21 +03:00
  • 449be211f2 fix(frontend): apiFetchWithStatus body stream double-read crash lekss361 2026-05-15 07:36:36 +03:00
  • e109400fcd fix(frontend): apiFetchWithStatus body stream double-read crash lekss361 2026-05-15 07:34:37 +03:00
  • 088c1ab2cf
    feat(site-finder): VelocityBlock в MarketTab (#34 sub-PR 2/2 FINAL) (#147) lekss361 2026-05-15 01:44:16 +03:00
  • c6cabc1990 fix(site-finder): align VelocityBlock TS types with backend response shape lekss361 2026-05-15 01:37:11 +03:00
  • 33b6148cc5 feat(site-finder): VelocityBlock в MarketTab (#34 sub-PR 2/2 FINAL) lekss361 2026-05-15 01:31:23 +03:00
  • e93bb6121e
    feat(site-finder): D2 velocity-score from domrf_kn_sale_graph (#34 sub-PR 1/2) (#146) lekss361 2026-05-15 01:24:53 +03:00
  • 62836d9740 feat(site-finder): D2 velocity-score from domrf_kn_sale_graph (#34 sub-PR 1/2) lekss361 2026-05-15 01:19:40 +03:00
  • 95647a1c82
    feat(site-finder): G5 gate verdict banner in OverviewTab (#32 sub-PR 2/2 FINAL) (#143) lekss361 2026-05-15 01:09:34 +03:00
  • 2ad3797d03 feat(site-finder): G5 gate verdict banner in OverviewTab (#32 sub-PR 2/2 FINAL) lekss361 2026-05-15 01:03:48 +03:00
  • 76a88b2827
    feat(site-finder): gate verdict aggregator — can-build-MKD signal (#32 G5 sub-PR 1/2) (#142) lekss361 2026-05-15 00:59:53 +03:00
  • e6446456dd feat(site-finder): gate verdict aggregator — can-build-MKD signal (#32 G5 sub-PR 1/2) lekss361 2026-05-15 00:56:13 +03:00
  • b42c9dd8f5
    feat(site-finder): weight profile panel + analyze options (#114 sub-PR 4/4 FINAL) (#139) lekss361 2026-05-15 00:50:02 +03:00
  • 4e58998031 feat(site-finder): weight profile panel + analyze options (#114 sub-PR 4/4 FINAL) lekss361 2026-05-15 00:45:30 +03:00
  • 7250aa6187
    feat(site-finder): weight profiles endpoints + analyze integration (#114 sub-PR 3/4) (#138) lekss361 2026-05-15 00:40:06 +03:00
  • c8e510cbbe feat(site-finder): weight profiles endpoints + analyze integration (#114 sub-PR 3/4) lekss361 2026-05-15 00:34:33 +03:00
  • 5aea78c2d8
    feat(site-finder): weight profiles service — Pydantic + CRUD (#114 sub-PR 2/4) (#137) lekss361 2026-05-15 00:29:37 +03:00
  • be3b60e9c0 feat(site-finder): weight profiles service — Pydantic + CRUD (#114 sub-PR 2/4) lekss361 2026-05-15 00:25:59 +03:00
  • f3f1e7f6bc
    feat(db): schema user_weight_profiles (#114 sub-PR 1/4 — foundation) (#136) lekss361 2026-05-15 00:19:33 +03:00
  • 5d87050f4f feat(db): schema user_weight_profiles (#114 sub-PR 1/4 — foundation) lekss361 2026-05-15 00:16:05 +03:00
  • 6a256bfc1f
    refactor(workers): split celery_app.py god-object into 3 modules (#135) lekss361 2026-05-15 00:09:38 +03:00
  • dd3c126e4a refactor(workers): split celery_app.py god-object into 3 modules lekss361 2026-05-15 00:04:54 +03:00
  • 2416ed0db1
    refactor(frontend): extract SectionLabel + EmptyState + adminStyles shared (#132) lekss361 2026-05-14 23:55:38 +03:00
  • 96fc007609 docs(adminStyles): JSDoc warning про divergent local overrides lekss361 2026-05-14 23:54:35 +03:00
  • d33023d7d6 refactor(frontend): SectionLabel + EmptyState + adminStyles shared (fixup) lekss361 2026-05-14 23:49:15 +03:00
  • 389fd31fad
    refactor(admin): extract _check_token into shared AdminTokenAuth dep (#133) lekss361 2026-05-14 23:45:44 +03:00
  • f8023a16f8 refactor(admin): extract _check_token into shared AdminTokenAuth dep lekss361 2026-05-14 23:39:55 +03:00
  • 8647114b22
    fix(docs): block javascript: URLs in renderMarkdown href (XSS guard) (#131) lekss361 2026-05-14 23:39:47 +03:00
  • 6186804eb8 fix(docs): block javascript: URLs in renderMarkdown href (XSS guard) lekss361 2026-05-14 23:34:03 +03:00
  • 8a266502a1
    fix(sql): wrap 73_complexes_master.sql in BEGIN/COMMIT (atomic apply) (#125) lekss361 2026-05-14 23:29:28 +03:00
  • a3e7d21e3a
    fix(pzz_loader): replace bare db.rollback() with SAVEPOINT per-row (#124) lekss361 2026-05-14 23:29:23 +03:00
  • 8dfab7613d
    fix(nspd-geo): replace f-string bulk INSERT with parametrized batch execute (#123) lekss361 2026-05-14 23:29:12 +03:00
  • 7b32edc34d
    fix(db): DROP dead BRIN index rosreestr_deals_period_brin (#122) lekss361 2026-05-14 23:29:01 +03:00
  • f5794173de
    fix(celery): disable nspd-harvest-stale-quarters beat (Bug post-mortem #1) (#121) lekss361 2026-05-14 23:24:53 +03:00
  • b3f32ae927
    chore(infra): correct frontend healthcheck + tighten depends_on (re-apply #117) (#120) lekss361 2026-05-14 23:24:47 +03:00
  • f65f03c660 fix(sql): wrap 73_complexes_master.sql in BEGIN/COMMIT (atomic apply) lekss361 2026-05-14 23:23:19 +03:00
  • a7617a2cc4 fix(pzz_loader): replace bare db.rollback() with SAVEPOINT per-row lekss361 2026-05-14 23:22:53 +03:00
  • 08118f0476 fix(nspd-geo): replace f-string bulk INSERT with parametrized batch execute lekss361 2026-05-14 23:22:27 +03:00
  • 5acca40c08 fix(db): DROP dead BRIN index rosreestr_deals_period_brin lekss361 2026-05-14 23:21:33 +03:00
  • ecf9f568cb fix(celery): disable nspd-harvest-stale-quarters beat (Bug post-mortem #1) lekss361 2026-05-14 23:18:01 +03:00
  • 0c48166af6 chore(infra): correct frontend healthcheck + tighten depends_on (re-apply #117) lekss361 2026-05-14 23:15:46 +03:00
  • 6ea2dcd46c
    Revert "chore(infra): healthcheck frontend + tighten depends_on; pin rosreestr2coord>=5 (#117)" (#119) lekss361 2026-05-14 23:02:58 +03:00
  • c336fc52bc Revert "chore(infra): healthcheck frontend + tighten depends_on; pin rosreestr2coord>=5 (#117)" lekss361 2026-05-14 22:58:50 +03:00
  • d4cb56d093
    fix(sql): renumber engineering_networks 85→87 + dedup classid + add SRID 4326 (#118) lekss361 2026-05-14 22:51:11 +03:00
  • 3835be6c60 fix(sql): remove provisional 907015507, fix Фонати→Фонари typo lekss361 2026-05-14 22:45:25 +03:00
  • bade2f7772
    chore(infra): healthcheck frontend + tighten depends_on; pin rosreestr2coord>=5 (#117) lekss361 2026-05-14 22:42:09 +03:00
  • c50e2f0265 fix(sql): renumber engineering_networks 85→87, dedup classid, add SRID lekss361 2026-05-14 22:29:38 +03:00
  • a30e5a44c4 chore(infra): healthcheck frontend + tighten depends_on; pin rosreestr2coord>=5 lekss361 2026-05-14 22:28:02 +03:00
  • 1c2f80a4b8
    feat(site-finder): integrate nspd_quarter_dumps cache в analyze_parcel (#94 Sprint 1.1 FINAL) (#116) lekss361 2026-05-13 09:14:19 +03:00
  • 7ca4d35e88 fix(site-finder): rename _make_empty_result → make_empty_result (public) per PR #116 review lekss361 2026-05-13 09:11:41 +03:00
  • aef8308463 fix(site-finder): address PR #116 auto-review M1-M5 lekss361 2026-05-13 09:03:35 +03:00
  • 3068a9c531 feat(site-finder): integrate nspd_quarter_dumps cache в analyze_parcel (#94 Sprint 1.1 #4 FINAL) lekss361 2026-05-12 19:00:03 +03:00
  • f3b0ce5687
    feat(nspd): harvest_quarter Celery task + beat + admin endpoint (#94 pt.4 part A) (#111) lekss361 2026-05-12 18:45:57 +03:00
  • aca4b443aa fix(nspd-sync): address PR #111 auto-review M1-M5+M7 findings lekss361 2026-05-12 18:43:02 +03:00
  • 9b2a289e83 feat(nspd): harvest_quarter Celery task + beat + admin endpoint (#94 pt.4/4 part A) lekss361 2026-05-12 18:33:09 +03:00
  • 6fce81e10c
    feat(db): add nspd_quarter_dumps table for PKK harvest persistence (#94 pt.3/4) (#110) lekss361 2026-05-12 18:22:50 +03:00
  • 31471bc1e7 feat(db): add nspd_quarter_dumps table for PKK harvest persistence (#94 pt.3/4) lekss361 2026-05-12 18:19:30 +03:00
  • 9ee0b07003
    feat(scrapers): search_by_quarter orchestrator + QuarterDump (#94 pt.2/4) (#109) lekss361 2026-05-12 18:11:30 +03:00
  • 8196f0b6d9 feat(scrapers): search_by_quarter orchestrator + QuarterDump (#94 pt.2/4) lekss361 2026-05-12 18:04:55 +03:00
  • bc092b58f1
    feat(scrapers): NSPD client foundation (#94) — search + WMS + layers (#98) lekss361 2026-05-12 09:47:45 +03:00
  • 6ce73221a9 fix(scrapers): address PR #98 auto-review minor feedback lekss361 2026-05-12 09:45:45 +03:00
  • be143880d0 feat(scrapers): NSPD client foundation (#94) — search_by_cad + WMS + layers lekss361 2026-05-12 09:34:42 +03:00
  • 49fac806fc
    feat(site-finder): auto-fetch cadastre geometry on-demand (#93) (#95) lekss361 2026-05-12 09:02:17 +03:00
  • cce2bf3f3e fix(site-finder): address PR #95 auto-review minor feedback lekss361 2026-05-12 08:58:46 +03:00
  • 2252236ce2 feat(site-finder): auto-fetch cadastre geometry on-demand (#93) lekss361 2026-05-12 08:47:22 +03:00
  • f4a865060f
    feat(site-finder): D4 pipeline 24mo — future competition (#36) (#90) lekss361 2026-05-12 08:34:02 +03:00
  • 8f804d15dd fix(site-finder): address PR #90 auto-review minor feedback lekss361 2026-05-12 08:31:39 +03:00
  • 4e431bf950 merge: resolve conflicts с main (X1/X2/P1/P2 уже merged) lekss361 2026-05-12 08:21:49 +03:00
  • 1f8fd77825
    feat(site-finder): X1 score breakdown + verbal explain (#47) (#92) lekss361 2026-05-12 08:17:00 +03:00
  • d4c9930154 feat(site-finder): X1 score breakdown + verbal explain (#47) lekss361 2026-05-12 08:10:36 +03:00