c58c5a5aab
Merge pull request 'fix(avito): gate 403 reconnect-retry on proxy presence only (was dead code in prod)' ( #1765 ) from fix/avito-403-reconnect-gate into main
...
Deploy Trade-In / changes (push) Successful in 6s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Successful in 1m6s
Deploy Trade-In / build-backend (push) Successful in 50s
Deploy Trade-In / deploy (push) Successful in 45s
Reviewed-on: #1765
2026-06-18 18:32:54 +00:00
44e316c514
fix(avito): gate 403 reconnect-retry on proxy presence only, not rotate_url absence
...
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
PR #1764 's reconnect-retry was dead code in prod: the gate excluded configs
with avito_proxy_rotate_url set, but prod has BOTH the backconnect SCRAPER_PROXY_URL
(what curl_cffi egresses through) AND a leftover changeip URL for the separate
auv/browser proxy. With max_rotations=0 neither path fired -> a single SERP 403
still aborted the sweep (run 212). The curl session always uses scraper_proxy_url,
so session-rebuild rotates the exit IP regardless of changeip config.
2026-06-18 21:31:20 +03:00
69ef61beb8
Merge pull request 'fix(avito): reconnect-retry on SERP 403/firewall under backconnect proxy' ( #1764 ) from fix/avito-403-backconnect-reconnect-retry into main
...
Deploy Trade-In / changes (push) Successful in 6s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Successful in 1m5s
Deploy Trade-In / build-backend (push) Successful in 49s
Deploy Trade-In / deploy (push) Successful in 44s
Reviewed-on: #1764
2026-06-18 18:13:20 +00:00
9dc3be56e3
fix(avito): reconnect-retry on SERP 403/firewall under backconnect proxy
...
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
Under a backconnect rotating proxy (no changeip URL) a single HTTP 403 or
firewall interstitial aborted the entire avito_full_load sweep via
AvitoBlockedError -> mark_banned. Each new connection through backconnect
gets a fresh exit IP, so retry by rebuilding the curl_cffi session up to
_AVITO_403_MAX_RETRIES times before giving up. Legacy single-IP changeip
rotation and browser-mode paths unchanged. Mirrors existing 429 short-retry.
2026-06-18 20:41:32 +03:00
8d516d0781
Merge pull request 'fix(tradein): avito _extract_total_count returns 0 on no-results page — stop empty-bracket split/rotate waste' ( #1763 ) from fix/avito-empty-page-total-zero into main
...
Deploy Trade-In / changes (push) Successful in 6s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / test (push) Successful in 1m4s
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 52s
Deploy Trade-In / deploy (push) Successful in 45s
Reviewed-on: #1763
2026-06-18 17:05:34 +00:00
6454aa312d
fix(tradein): avito _extract_total_count returns 0 on no-results page (stop empty-bracket split waste + fallback-listing scrape)
CI / backend-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
2026-06-18 20:01:41 +03:00
f82ee32f50
Merge pull request 'feat(tradein): avito curl_cffi 429 short-retry — enables backconnect curl SERP (×50 faster than browser)' ( #1762 ) from feat/avito-curl-429-retry into main
...
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Successful in 1m5s
Deploy Trade-In / build-backend (push) Successful in 49s
Deploy Trade-In / deploy (push) Successful in 46s
Reviewed-on: #1762
2026-06-18 16:26:28 +00:00
2c6d0e4c71
feat(tradein): avito curl_cffi 429 short-retry (backconnect conn-limit transient, no rotate/ban)
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
2026-06-18 19:24:05 +03:00
8a7538ab13
Merge pull request 'perf(browser): block image/media/font resources in camoufox fetch (~10x smaller pages, faster via proxy)' ( #1761 ) from perf/camoufox-block-resources into main
...
Deploy Trade-In / changes (push) Successful in 6s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Has been skipped
Deploy Trade-In / test (push) Has been skipped
Deploy Trade-In / build-browser (push) Successful in 2m26s
Deploy Trade-In / deploy (push) Successful in 1m31s
Reviewed-on: #1761
2026-06-18 15:18:28 +00:00
1533baad97
perf(browser): block image/media/font resources in camoufox fetch (~10x smaller pages, faster via proxy)
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI / changes (pull_request) Successful in 6s
2026-06-18 18:16:53 +03:00
e05e81f654
Merge pull request 'perf(tradein): shared EKB seed price-brackets across avito/cian/yandex (city-dict ready for multi-city)' ( #1760 ) from perf/shared-price-brackets-cian-yandex into main
...
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / changes (push) Successful in 6s
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Successful in 1m5s
Deploy Trade-In / build-backend (push) Successful in 51s
Deploy Trade-In / deploy (push) Successful in 49s
Reviewed-on: #1760
2026-06-18 14:57:41 +00:00
ffecc6962d
perf(tradein): shared EKB seed price-brackets across avito/cian/yandex (city-dict ready for multi-city)
CI / changes (pull_request) Successful in 7s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
2026-06-18 17:55:55 +03:00
0538834c6b
Merge pull request 'perf(tradein): avito seed price-brackets with open top bucket (≤2k blocks, no price ceiling)' ( #1759 ) from perf/avito-seed-price-brackets into main
...
Deploy Trade-In / changes (push) Successful in 6s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Successful in 33s
Deploy Trade-In / build-backend (push) Successful in 53s
Deploy Trade-In / deploy (push) Successful in 45s
Reviewed-on: #1759
2026-06-18 14:33:07 +00:00
3f85fa59ff
perf(tradein): avito seed price-brackets with open top bucket (≤2k blocks, no price ceiling)
CI / changes (pull_request) Successful in 7s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
2026-06-18 17:29:31 +03:00
c8f6fd1535
Merge pull request 'fix(tradein): praktika brand only under praktika account — drop kopylov mapping (brand leak)' ( #1758 ) from fix/praktika-brand-only-praktika-user into main
...
Deploy Trade-In / test (push) Successful in 35s
Deploy Trade-In / changes (push) Successful in 7s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 50s
Deploy Trade-In / deploy (push) Successful in 45s
Reviewed-on: #1758
2026-06-18 13:36:20 +00:00
5c37fcbfad
fix(tradein): praktika brand only under praktika account — drop kopylov mapping (brand leak)
CI / changes (pull_request) Successful in 7s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
2026-06-18 16:29:18 +03:00
add002e8d7
Merge pull request 'fix(tradein): avito full-load probe resilience — browser 500/timeout splits/skips instead of crashing run' ( #1757 ) from fix/avito-fullload-probe-resilience into main
...
Deploy Trade-In / changes (push) Successful in 7s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Successful in 40s
Deploy Trade-In / build-backend (push) Successful in 1m10s
Deploy Trade-In / deploy (push) Successful in 53s
Reviewed-on: #1757
2026-06-18 13:11:46 +00:00
5b14d88290
Merge pull request 'feat(site-finder): snapshot.pdf exclude_dev param — hide competitor by developer name' ( #1756 ) from feat/snapshot-exclude-dev into main
...
Deploy / changes (push) Successful in 6s
Deploy / build-backend (push) Successful in 2m11s
Deploy / build-frontend (push) Successful in 3m18s
Deploy / build-worker (push) Successful in 3m35s
Deploy / deploy (push) Successful in 1m24s
Reviewed-on: #1756
2026-06-18 13:11:29 +00:00
cbeeb9c414
fix(tradein): avito full-load probe resilience — browser 500/timeout splits/skips instead of crashing run
CI / changes (pull_request) Successful in 7s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
2026-06-18 16:03:39 +03:00
5408466905
chore(frontend): regen api-types for snapshot exclude_dev param
CI / changes (pull_request) Successful in 5s
CI / frontend-tests (pull_request) Successful in 1m1s
CI / openapi-codegen-check (pull_request) Successful in 1m50s
CI / backend-tests (pull_request) Successful in 8m50s
2026-06-18 15:51:56 +03:00
1302fe63d7
feat(site-finder): snapshot.pdf exclude_dev param — hide competitor by developer name
...
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Failing after 1m52s
CI / backend-tests (pull_request) Successful in 8m55s
Optional query param exclude_dev (CSV, case-insensitive) drops competitor
rows by dev_name from the «Конкуренты» block of the parcel snapshot PDF.
Client case: generate a report without a specific developer's offer.
Without the param behavior is unchanged (zero behavior change).
2026-06-18 15:23:28 +03:00
493142b990
Merge pull request 'feat(tradein): populate offer_price_history for yandex from gate price.previous/trend' ( #1754 ) from feat/yandex-price-history into main
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Successful in 34s
Deploy Trade-In / build-backend (push) Successful in 59s
Deploy Trade-In / deploy (push) Successful in 48s
2026-06-18 11:37:05 +00:00
0f975e8a53
Merge pull request 'fix(tradein): avito sweep page-level retry — transient page error no longer aborts run' ( #1755 ) from fix/avito-sweep-page-retry into main
Deploy Trade-In / changes (push) Successful in 7s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / test (push) Has been cancelled
Deploy Trade-In / build-backend (push) Has been cancelled
Deploy Trade-In / deploy (push) Has been cancelled
Deploy Trade-In / build-browser (push) Has been cancelled
2026-06-18 11:36:53 +00:00
6c132d7f0a
fix(tradein): avito sweep page-level retry — transient page error no longer aborts run
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
2026-06-18 14:29:01 +03:00
6c82528db5
feat(tradein): populate offer_price_history for yandex from gate price.previous/trend
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
2026-06-18 14:23:23 +03:00
00f6464f54
Merge pull request 'feat(tradein): avito exhaustive full-load (room×price bisection) — mirror cian' ( #1753 ) from feat/avito-exhaustive-fullload into main
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Successful in 34s
Deploy Trade-In / build-backend (push) Successful in 53s
Deploy Trade-In / deploy (push) Successful in 45s
2026-06-18 11:05:26 +00:00
1ddbf867f8
feat(tradein): avito exhaustive full-load (room×price bisection) — mirror cian
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
2026-06-18 13:55:18 +03:00
10b93011a3
Merge pull request 'feat(tradein): schedule cian_full_load (exhaustive secondary) + anchor sweep NB-only' ( #1752 ) from feat/cian-schedule-fullload-nb-only into main
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Successful in 36s
Deploy Trade-In / build-backend (push) Successful in 52s
Deploy Trade-In / deploy (push) Successful in 47s
2026-06-18 10:38:31 +00:00
158a24c25b
feat(tradein): schedule cian_full_load (exhaustive secondary) + anchor sweep NB-only
...
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
Подключает prod-проверенный run_cian_full_load (exhaustive региональный сбор
Cian ЕКБ вторички, room×price партиционирование, incremental on_bucket save) в
in-app scheduler как recurring-источник cian_full_load (окно 20-22 UTC — отделено
от cian_city_sweep/history_backfill на 2-5 чтобы не конкурировать на shared
kf-прокси).
run_cian_city_sweep теперь NB-only (newbuilding_only=True default): SERP-фаза
сохраняет только novostroyki-лоты, вторичку отбрасывает — ею авторитетно владеет
full_load. Убирает дубль secondary SERP-сейва. DETAIL/HOUSES-фазы не затронуты.
2026-06-18 13:25:23 +03:00
ca4a61124e
Merge pull request 'feat(cadastral): geo-nearest building matcher via local cad mirror' ( #1750 ) from feat/cadastral-geo-match into main
...
Deploy Trade-In / changes (push) Successful in 7s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Successful in 44s
Deploy Trade-In / build-backend (push) Successful in 1m13s
Deploy Trade-In / deploy (push) Successful in 57s
Reviewed-on: #1750
2026-06-18 08:44:24 +00:00
2b4f80e39f
Merge pull request 'feat(site-finder): карта точек подключения (НСПД) в секции «Сети» ( #1746 part)' ( #1751 ) from fix/1746-networks-section-map into main
...
Deploy / changes (push) Successful in 9s
Deploy / build-backend (push) Has been skipped
Deploy / build-worker (push) Has been skipped
Deploy / build-frontend (push) Successful in 3m45s
Deploy / deploy (push) Successful in 1m23s
Reviewed-on: #1751
2026-06-18 08:44:16 +00:00
48bedb5f65
Merge branch 'main' into feat/cadastral-geo-match
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
2026-06-18 08:44:06 +00:00
6fe72d2374
Merge pull request 'feat(site-finder): продуктовые решения по фидбеку analyze (#1741-1745)' ( #1749 ) from fix/sf-product-decisions into main
...
Deploy / deploy (push) Blocked by required conditions
Deploy / changes (push) Successful in 6s
Deploy / build-backend (push) Has been cancelled
Deploy / build-worker (push) Has been cancelled
Deploy / build-frontend (push) Has been cancelled
Reviewed-on: #1749
2026-06-18 08:43:43 +00:00
e89fd66639
feat(site-finder): карта точек подключения (НСПД) в секции «Сети» ( #1746 , доступная часть)
...
CI / changes (pull_request) Successful in 7s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Successful in 48s
CI / openapi-codegen-check (pull_request) Successful in 1m40s
Section2 «Сети и точки подключения» был только таблицей расстояний без карты — пользователь не видел ГДЕ точка. Добавлена карта (dynamic SiteMap ssr:false + useConnectionPoints + ConnectionPointsLayer/CpLayerControlPanel), label «Точки подключения и охранные зоны сетей (НСПД)», empty-state при отсутствии дампа квартала. Таблица расстояний не тронута. Frontend-only.
Полное обогащение 191-ФЗ (владелец/диаметр/мощность, единый источник истины) — остаётся за датасетом Минстроя (#1746 не закрыт целиком).
2026-06-18 12:48:23 +05:00
d93553c489
fix(site-finder): перенумеровать под-подписи Section3 4.1/4.2/4.3 под новый порядок + doc-хедеры ( #1741 хвост)
CI / changes (push) Successful in 8s
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (push) Successful in 1m17s
CI / frontend-tests (pull_request) Successful in 1m20s
CI / openapi-codegen-check (push) Successful in 2m13s
CI / openapi-codegen-check (pull_request) Successful in 1m40s
CI / backend-tests (pull_request) Successful in 9m0s
CI / backend-tests (push) Successful in 9m4s
2026-06-18 12:38:54 +05:00
f9769571a3
fix(cadastral): single-statement match UPDATE — OFFSET chunk skipped rows
...
CI / changes (pull_request) Successful in 7s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
The chunked matcher paged the candidate set with OFFSET over the very predicate
it mutates (building_cadastral_number IS NULL). Matched rows drop out, so OFFSET
(reset to 0 OR advanced) skips un-processed rows: once >= batch_size unmatched
listings (beyond threshold) accumulate at the low-id front, the chunk matches 0
and the loop breaks early, leaving higher-id matchable listings unfilled.
Counterexample (batch=3, matchable ids 1,4,7,10): matches 1 and 4 then breaks,
missing 7 and 10. Unit tests used single-chunk fixtures so never caught it.
The full UPDATE is ~5s for ~41k listings, so replace the loop with ONE set-based
LATERAL KNN UPDATE over all candidates — correct and fast. batch_size kept in the
signature for schedule-param compat (now unused).
2026-06-18 10:28:19 +03:00
edd187b47f
feat(cadastral): geo-nearest building matcher via local cad mirror
...
Backfill listings.building_cadastral_number (was 0%) from the nearest
cadastral building. gendesign_cad_buildings is a postgres_fdw foreign table
with no geom — a per-listing FDW nearest query is ~1.16s/row (~13h for 43k
listings). Instead materialize the FDW once into a LOCAL cad_buildings_local
table (Point geom + GIST), then run a fast local KNN nearest-neighbour join.
Perf: the distance gate uses geometry-space ST_DWithin(geom, point, deg) (GIST
index, no geography cast) + geom <-> KNN order + ST_DistanceSphere metric
recheck on the single nearest row. A geography-cast ST_DWithin in the WHERE
defeated the index (58s+, full update never finished); the geometry-gate design
does the whole ~41.9k-listing UPDATE in ~5.4s (refresh+match ~7s end-to-end),
matching 16027 listings at 50m across 2229 distinct buildings.
The match is GEO-NEAREST (approximate): a street-level-geocoded listing matches
the nearest building within threshold_m (default 50m), not necessarily its exact
cadastral building. Exact cadastral + parcel-containment deferred (cad_parcels
FDW not exposed). Threshold is logged.
- 124: cad_buildings_local table (empty) + GIST. Migration does not read the FDW
(deploy-independent); populated by the refresh job.
- 125: scrape_schedules seed source=cadastral_geo_match, enabled, next_run_at
tomorrow 09:00 UTC (after geocode_missing).
- tasks/cadastral_geo_match.py: refresh_cad_buildings_local (bulk FDW scan),
match_listings_to_buildings (chunked LATERAL KNN UPDATE), run_cadastral_geo_match
run-lifecycle wrapper.
- scheduler: trigger_cadastral_geo_match_run + dispatch (sync DB-only, executor).
2026-06-18 10:18:54 +03:00
8cd0620543
feat(site-finder): продуктовые решения по фидбеку analyze ( #1741 #1742 #1743 #1744 #1745 )
...
CI / changes (pull_request) Successful in 8s
CI / changes (push) Successful in 9s
CI / frontend-tests (push) Successful in 1m43s
CI / frontend-tests (pull_request) Successful in 1m59s
CI / openapi-codegen-check (push) Successful in 2m43s
CI / openapi-codegen-check (pull_request) Successful in 1m55s
CI / backend-tests (push) Successful in 9m28s
CI / backend-tests (pull_request) Successful in 9m28s
После ролевой дискуссии (аналитик×комдир×собственник):
- #1741 секции в 2 группы «Участок»→«Стройка и рынок» (Section1→4→2→3→5→6), gate-баннер вынесен НАД группой (убран дубль из Section4Estimate), nav-группы
- #1742 объяснение выбора класса: фраза-причина + мини-таблица 3 классов по deficit_index («+1 острый дефицит, −1 затоварка»). POI «обеспеченность»/market-overstock relabel — N/A (в UI не выводятся)
- #1743 «Остатки и скорость»→«Как продаётся рынок рядом» + headline-вердикт + «Темп продаж»/«Будущее предложение конкурентов (24 мес)» (убран англицизм Velocity-score/Pipeline) + интерпретированные единицы
- #1744 горизонт: caption+tooltip «пересчёт ~10-30с» + статус «Пересчитываем…»; колонки прогноза «…, квартир» + caveat advisory
- #1745 фаза1: таблица «Прогноз по всем форматам» (студия/1-5к × индекс дефицита/прогноз спроса/сигнал); backend пробросил per-format projected_demand_units + signal. Слайдеры/рубли — фаза2 после бэктеста #951
Verify: tsc 0 ошибок; py_compile; what_to_build/recommendation/report/exporter тесты pass.
Closes #1741
Closes #1742
Closes #1743
Closes #1744
Closes #1745
2026-06-18 12:18:04 +05:00
6214baf0c9
Merge pull request 'fix(site-finder): 5 дефектов из фидбека analyze (#1736-1740)' ( #1748 ) from fix/sf-feedback-batch into main
Deploy / changes (push) Successful in 7s
Deploy / build-backend (push) Successful in 2m55s
Deploy / build-worker (push) Successful in 4m23s
Deploy / build-frontend (push) Successful in 3m22s
Deploy / deploy (push) Successful in 1m54s
2026-06-18 07:06:45 +00:00
3280859170
Merge remote fix/sf-feedback-batch ( #1736 minimap test) into local
CI / changes (pull_request) Successful in 8s
CI / frontend-tests (pull_request) Successful in 1m39s
CI / openapi-codegen-check (pull_request) Successful in 3m30s
CI / backend-tests (pull_request) Successful in 9m35s
2026-06-18 10:05:56 +03:00
c859872217
fix(parcels): wrap forecast-export PDF in try/except+logger ( #1739 completion)
2026-06-18 10:05:25 +03:00
0f9babb7ff
test(site-finder): wrap MiniMap test render in QueryClientProvider ( #1736 )
...
CI / changes (pull_request) Successful in 11s
CI / changes (push) Successful in 15s
CI / frontend-tests (push) Successful in 1m31s
CI / frontend-tests (pull_request) Successful in 1m17s
CI / openapi-codegen-check (push) Successful in 2m28s
CI / openapi-codegen-check (pull_request) Successful in 2m37s
CI / backend-tests (push) Successful in 10m32s
CI / backend-tests (pull_request) Successful in 10m34s
#1736 added useConnectionPoints (useQuery) to MiniMap, but MiniMap.test.tsx
rendered without a QueryClient -> 'No QueryClient set' (2 failing tests in CI
frontend-tests). Wrap renders in a QueryClientProvider (retry:false).
2026-06-18 10:03:48 +03:00
bcd24923b8
Merge remote-tracking branch 'forgejo-backend/main' into fix/sf-feedback-batch
2026-06-18 10:01:43 +03:00
e7342d9f98
chore(frontend): regenerate api-types.ts for forecast pdf export ( #1739 )
...
CI / changes (pull_request) Successful in 8s
CI / changes (push) Successful in 10s
CI / frontend-tests (pull_request) Failing after 1m47s
CI / frontend-tests (push) Failing after 1m55s
CI / openapi-codegen-check (pull_request) Successful in 3m11s
CI / openapi-codegen-check (push) Successful in 3m1s
CI / backend-tests (pull_request) Successful in 10m29s
CI / backend-tests (push) Successful in 10m41s
#1748 added format=pdf to the forecast export endpoint but didn't regenerate
the frontend OpenAPI types, failing CI openapi-codegen-check. Regenerated via
the CI recipe (app.openapi() dump -> openapi-typescript -> prettier).
2026-06-18 10:00:26 +03:00
7448db0be0
Merge pull request 'feat(avito): dedicated newbuilding (novostroyka) citywide sweep' ( #1747 ) from feat/avito-newbuilding-sweep into main
Deploy Trade-In / changes (push) Successful in 9s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Successful in 50s
Deploy Trade-In / build-backend (push) Successful in 1m26s
Deploy Trade-In / deploy (push) Successful in 1m10s
2026-06-18 07:00:22 +00:00
b1c0ea1268
fix(site-finder): 5 дефектов из боевого фидбека analyze ( #1736 #1737 #1738 #1739 #1740 )
...
CI / changes (push) Successful in 9s
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (push) Failing after 1m50s
CI / frontend-tests (pull_request) Failing after 1m48s
CI / openapi-codegen-check (pull_request) Failing after 2m39s
CI / openapi-codegen-check (push) Failing after 2m46s
CI / backend-tests (pull_request) Successful in 9m25s
CI / backend-tests (push) Successful in 9m30s
- #1736 MiniMap: проброс useConnectionPoints → точки подключения на карте analyze (были только в /legacy)
- #1737 confidence: пронесено имя сервиса → RU-ярлык (Рынок/Будущее предложение/…) вместо «Компонент вкладывающий сервис»
- #1738 pipeline: self-exclusion субъекта (ST_DWithin 80м) — проект не считает сам себя будущим конкурентом
- #1739 PDF: snapshot_pdf обёрнут в try/except+logger.exception (причина 500 видна) + format=pdf в forecast export + font_url fallback
- #1740 gate↔recommendation: при can_build_mkd=False — gate_caveat на обоих рекомендаторах (противоречие явное, не молчит)
Verify: py_compile 5/5, tsc 0, ruff clean, pytest confidence/forecast 95 passed.
Closes #1736
Closes #1737
Closes #1738
Closes #1739
Closes #1740
2026-06-18 11:47:21 +05:00
1a658a65a6
feat(avito): dedicated newbuilding (novostroyka) citywide sweep
CI / changes (pull_request) Successful in 8s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
2026-06-18 09:45:54 +03:00
bf91eb0be0
Merge pull request 'feat(browser): per-source proxy pool behind FEATURE_BROWSER_POOL_ENABLED (Phase 1)' ( #1735 ) from feat/browser-per-source-proxy-pool into main
...
Deploy Trade-In / changes (push) Successful in 6s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / test (push) Successful in 34s
Deploy Trade-In / build-backend (push) Successful in 51s
Deploy Trade-In / build-browser (push) Successful in 2m5s
Deploy Trade-In / deploy (push) Successful in 1m25s
Reviewed-on: #1735
2026-06-18 06:06:57 +00:00
b9eb478c8f
feat(browser): per-source proxy pool behind FEATURE_BROWSER_POOL_ENABLED (Phase 1)
...
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
Route each scraper source (avito/cian/yandex/domclick) to its own camoufox
browser+proxy so they no longer wedge each other through a single global egress.
Feature-flagged (FEATURE_BROWSER_POOL_ENABLED, default OFF): with the flag off the
/fetch and /login paths are byte-for-byte the existing single-browser behavior.
When on, /fetch routes by body["source"] to a per-proxy browser via BROWSER_PROXY_MAP
(BROWSER_PROXY_AVITO/CIAN/YANDEX/DOMCLICK with legacy fallbacks), each guarded by its
own lazy-launched lock. /login stays single-browser in Phase 1.
BrowserFetcher gains a source arg (default avito) and sends it in the /fetch body;
all scraper callsites pass their source. No docker-compose/.env.runtime changes
(Phase 2, owner-gated).
2026-06-18 09:01:50 +03:00
635851a71c
Merge pull request 'fix(yandex): read predicted price from entity.predictions.predictedPrice ( #1725 )' ( #1734 ) from fix/yandex-predicted-price-path-1725 into main
...
Deploy Trade-In / changes (push) Successful in 6s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Successful in 32s
Deploy Trade-In / build-backend (push) Successful in 50s
Deploy Trade-In / deploy (push) Successful in 43s
Reviewed-on: #1734
2026-06-18 05:12:25 +00:00