Commit graph

  • 547ab37597 hotfix(caddy): named matcher @uipreview — handle не принимает несколько inline-путей → caddy crash-loop, прод down (#801) lekss361 2026-05-30 18:52:09 +00:00
  • 2ebfe2352d Merge pull request 'fix(caddy): exempt /trade-in/_next/static/* (ui-preview CSS) (#801)' (#816) from chore/caddy-ui-preview-next-static into main lekss361 2026-05-30 18:47:03 +00:00
  • b779376f9d fix(caddy): exempt /trade-in/_next/static/* too — CSS/JS на ui-preview грузились под auth → 401 (#801) lekss361 2026-05-30 18:47:01 +00:00
  • 7330d10dcc Merge pull request 'chore(tradein): enable /ui-preview on prod (NEXT_PUBLIC_ENABLE_PREVIEW) (#801)' (#813) from chore/enable-ui-preview-prod into main lekss361 2026-05-30 18:40:41 +00:00
  • ae1a35140c ci(tradein): pass NEXT_PUBLIC_ENABLE_PREVIEW=1 to frontend build (#801) lekss361 2026-05-30 18:40:22 +00:00
  • f72edb828a chore(tradein-fe): bake NEXT_PUBLIC_ENABLE_PREVIEW build-arg (#801) lekss361 2026-05-30 18:40:21 +00:00
  • 40a78c3670 Merge pull request 'chore(caddy): exempt /trade-in/ui-preview/* from basic_auth (#801)' (#810) from chore/caddy-ui-preview-exempt into main lekss361 2026-05-30 18:30:16 +00:00
  • c73a79ee6f Merge pull request 'feat(estimator): exclude city-centroid listings from radius analogs (Refs #769 Part E)' (#811) from fix/769-e-geo-centroid into main lekss361 2026-05-30 18:26:39 +00:00
  • 86d98aac30 Merge pull request 'fix(frontend): pilot-only юзер → auto-redirect на /trade-in/ вместо «Доступа нет» (#799)' (#809) from feat/799-pilot-redirect-tradein into main lekss361 2026-05-30 18:23:06 +00:00
  • e195828c7f fix(frontend): pilot-only юзер → auto-redirect на /trade-in/ вместо «Доступа нет» bot-frontend 2026-05-30 21:22:38 +03:00
  • b736d7b7e0 feat(estimator): exclude city-centroid listings from radius analogs (Refs #769 Part E) bot-backend 2026-05-30 21:22:21 +03:00
  • 84f6d57d9d chore(caddy): exempt /trade-in/ui-preview/* from basic_auth (#801) lekss361 2026-05-30 18:21:34 +00:00
  • 654ce7b6c8 fix(frontend): pilot-only юзер → auto-redirect на /trade-in/ вместо «Доступа нет» bot-frontend 2026-05-30 21:18:19 +03:00
  • ae820d3bd9 docs(agents): auto-analyst verify-before-ready + dedup/loop guardrails bot-analyst 2026-05-30 21:15:48 +03:00
  • a7a839b512 Merge pull request 'chore(auth): regenerate praktika pilot password' (#807) from chore/praktika-password into main lekss361 2026-05-30 18:15:28 +00:00
  • a42ca6a014 chore(auth): regenerate praktika pilot password (#635/#659) lekss361 2026-05-30 21:10:09 +03:00
  • 950d0f60de fix(tradein): sweep shared-session (SERP+detail) через mobile proxy (#623) (#805) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 18:07:37 +00:00
  • 5bf650c843 fix(tradein): route sweep shared-session (SERP+detail) через mobile proxy (#623) lekss361 2026-05-30 21:02:26 +03:00
  • a9e4aecb54 fix(tradein): data-layer tail A2+B+C — trgm index, FDW options, matview refresh (Refs #769) (#804) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 17:40:54 +00:00
  • dffe1ccc18 fix(tradein): data-layer tail A2+B+C — trgm index, FDW options, matview refresh (Refs #769) bot-backend 2026-05-30 20:38:32 +03:00
  • 046febcae8 feat(tradein): dev/CI preview route for a11y+lighthouse (#801) (#803) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 17:37:40 +00:00
  • 96491352df feat(tradein): dev/CI preview route for a11y+lighthouse audits (#801) lekss361 2026-05-30 20:35:22 +03:00
  • c76785308b feat(scrapers/n1): извлекать floor/total_floors из ведущего N/M-токена (Refs #795) (#802) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 17:31:13 +00:00
  • 7eb4d6d255 feat(scrapers/n1): извлекать floor/total_floors из ведущего N/M-токена (Refs #795) bot-backend 2026-05-30 20:27:59 +03:00
  • 4c275e04ea fix(tradein): word-boundary street match + cian unescape robustness (Refs #769 A1+D) (#798) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 17:18:33 +00:00
  • 87a5de0cae feat(db): quarter_price_index FDW foreign table + monthly refresh (Refs #762) (#797) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 17:16:28 +00:00
  • 679e75b9e8 fix(tradein): resilience-хвост аудита #770 (findings #25-33) (#793) Co-authored-by: bot-frontend <bot-frontend@gendsgn.local> Co-committed-by: bot-frontend <bot-frontend@gendsgn.local> bot-frontend 2026-05-30 17:13:31 +00:00
  • 10155eb0fb fix(tradein): word-boundary street match + cian unescape robustness (Refs #769 A1+D) bot-backend 2026-05-30 20:13:07 +03:00
  • 76baf8011d feat(db): quarter_price_index FDW foreign table + monthly refresh (Refs #762) bot-backend 2026-05-30 20:13:02 +03:00
  • 5af7542522 fix(tradein): resilience-хвост аудита (#770 findings #26-33 + global-error) bot-frontend 2026-05-30 20:09:16 +03:00
  • a4057a5b28 feat(db): mv_quarter_price_index — quarter price-index из ДКП (Refs #760) (#792) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 17:05:51 +00:00
  • 2e237d0288 feat(db): mv_quarter_price_index — quarter price-index из ДКП (Refs #760) bot-backend 2026-05-30 20:02:43 +03:00
  • b175ea4225 fix(tradein): санитизация brand.logo_url + валидация brand-цветов (#766) (#791) Co-authored-by: bot-frontend <bot-frontend@gendsgn.local> Co-committed-by: bot-frontend <bot-frontend@gendsgn.local> bot-frontend 2026-05-30 16:58:14 +00:00
  • 3653f020b6 fix(ratio): ppm² потолок asking→sold в конфиг, default 1.2M (Refs #767) (#790) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 16:57:09 +00:00
  • 38d44f46b7 fix(pdf): brand-spoof + median=0 empty-state + SSRF + дисклеймер + sources (Refs #772) (#789) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 16:55:56 +00:00
  • 639ab3f63d fix(tradein): санитизация brand.logo_url (safeUrl) + валидация brand-цветов bot-frontend 2026-05-30 19:53:02 +03:00
  • 96027357b5 feat(tradein): Avito mobile proxy egress + firewall detect + MSK date (#623, #726) (#788) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 16:52:35 +00:00
  • 4d93e5a1aa fix(ratio): ppm² потолок asking→sold в конфиг, default 1.2M (Refs #767) bot-backend 2026-05-30 19:51:18 +03:00
  • 77692b2244 fix(pdf): brand-spoof + median=0 empty-state + SSRF + дисклеймер + sources (Refs #772) bot-backend 2026-05-30 19:51:14 +03:00
  • 147c36d448 feat(tradein): Avito mobile proxy egress + firewall detect + MSK date (#623, #726) lekss361 2026-05-30 19:49:09 +03:00
  • a45d4b3cf4 fix(tradein): MapCard клик по пину + честная ДКП-легенда (#786) (#787) Co-authored-by: bot-frontend <bot-frontend@gendsgn.local> Co-committed-by: bot-frontend <bot-frontend@gendsgn.local> bot-frontend 2026-05-30 16:46:04 +00:00
  • 832a8895e5 fix(tradein): MapCard клик по пину + честная ДКП-легенда bot-frontend 2026-05-30 19:43:06 +03:00
  • 8f2ff10a1c fix(cian): verify_session на curl_cffi impersonate — ban != cookies expired (Refs #768) (#785) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 16:40:54 +00:00
  • ec84637abf fix(estimator): expected_sold guard listings_clean → median_price>0 (Refs #773) (#784) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 16:39:08 +00:00
  • 30ae4841a4 fix(scrapers): yandex area из embedded-state JSON (Refs #775) (#783) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 16:38:12 +00:00
  • fdbd6ed70d fix(tradein): MapPicker через portal в document.body — z-index конфликт с SourcesProgress (#771) (#782) Co-authored-by: bot-frontend <bot-frontend@gendsgn.local> Co-committed-by: bot-frontend <bot-frontend@gendsgn.local> bot-frontend 2026-05-30 16:37:03 +00:00
  • 800bc631bf fix(cian): verify_session на curl_cffi impersonate — ban != cookies expired (Refs #768) bot-backend 2026-05-30 19:35:22 +03:00
  • b547fca673 fix(estimator): expected_sold guard listings_clean → median_price>0 (Refs #773) bot-backend 2026-05-30 19:35:18 +03:00
  • d03c96a79a fix(scrapers): yandex area из embedded-state JSON (Refs #775) bot-backend 2026-05-30 19:35:13 +03:00
  • 52db40cc40 fix(tradein): MapPicker через portal в document.body (z-index конфликт) bot-frontend 2026-05-30 19:34:24 +03:00
  • 238f14a0d7 fix(tradein): account-бренд приоритетен над ?brand= — cross-brand leak (#765) (#780) Co-authored-by: bot-frontend <bot-frontend@gendsgn.local> Co-committed-by: bot-frontend <bot-frontend@gendsgn.local> bot-frontend 2026-05-30 16:29:11 +00:00
  • 489666c735 fix(tradein): avito content-block (HTTP-200) не маскируется под end-of-pagination (Refs #754) (#779) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 16:28:23 +00:00
  • bcd035034a fix(tradein): SSRF host-allowlist на admin scrape + удалён dead ADMIN_TOKEN (Refs #756) (#778) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 16:27:19 +00:00
  • 9954f4962f fix(tradein): /sales-vs-listings street_only не house_linked (Refs #757) (#777) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 16:26:08 +00:00
  • 652e0df10f fix(tradein): cron-scrape.sh log to writable path + graceful tee (Refs #758) (#776) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 16:25:19 +00:00
  • 5bf26c216f fix(tradein): account-бренд приоритетен над ?brand= (cross-brand leak) bot-frontend 2026-05-30 19:23:06 +03:00
  • 5b430d3ffe fix(tradein): avito content-block (HTTP-200) не маскируется под end-of-pagination (Refs #754) bot-backend 2026-05-30 19:21:35 +03:00
  • 5c559ed0e3 fix(tradein): SSRF host-allowlist на admin scrape + удалён dead ADMIN_TOKEN (Refs #756) bot-backend 2026-05-30 19:21:31 +03:00
  • da2abeac01 fix(tradein): /sales-vs-listings street_only не house_linked (Refs #757) bot-backend 2026-05-30 19:21:28 +03:00
  • 51cbff20f2 fix(tradein): cron-scrape.sh log to writable path + graceful tee (Refs #758) bot-backend 2026-05-30 19:21:26 +03:00
  • 79a79004cf fix(scrapers): stable dedup_hash — drop price_rub + strip URL query (Refs #753) (#761) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 16:10:27 +00:00
  • f25fa57141 fix(scrapers): stable dedup_hash — drop price_rub + strip URL query (Refs #753) bot-backend 2026-05-30 19:06:03 +03:00
  • 2226b16cd3 fix(scheduler): atomic _claim_run via advisory xact lock (Refs #750) (#752) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 16:04:33 +00:00
  • 9f950a5f17 fix(scheduler): atomic _claim_run via advisory xact lock (Refs #750) bot-backend 2026-05-30 19:01:37 +03:00
  • 93f85154a5 fix(tradein): gate «0,00 млн ₽» в не-headline секциях при insufficient_data (#748) (#751) Co-authored-by: bot-frontend <bot-frontend@gendsgn.local> Co-committed-by: bot-frontend <bot-frontend@gendsgn.local> bot-frontend 2026-05-30 15:58:19 +00:00
  • fe2f79792f fix(tradein): gate «0,00 млн ₽» в не-headline секциях при insufficient_data bot-frontend 2026-05-30 18:55:47 +03:00
  • a74591d7cc fix(tradein): atomic conditional quota increment — close TOCTOU (#747) (#749) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 15:52:34 +00:00
  • 850642548e fix(tradein): atomic conditional quota increment — close TOCTOU (#747) bot-backend 2026-05-30 18:49:41 +03:00
  • 1b8e3b1f25 fix(tradein): confidence «средняя» → amber + FIXME для compsTier (#742) (#746) Co-authored-by: bot-frontend <bot-frontend@gendsgn.local> Co-committed-by: bot-frontend <bot-frontend@gendsgn.local> bot-frontend 2026-05-30 15:44:37 +00:00
  • 6762a532eb feat(scrapers): wire N1.ru city sweep — pipeline + scheduler + admin endpoint (#575) (#745) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 15:43:38 +00:00
  • 0e76183efa fix(tradein): confidence «средняя» → amber + FIXME для compsTier bot-frontend 2026-05-30 18:40:57 +03:00
  • 2390c49d12 fix(tradein): guard деления на median=0 в ListingsCard/DealsCard (#741) (#744) Co-authored-by: bot-frontend <bot-frontend@gendsgn.local> Co-committed-by: bot-frontend <bot-frontend@gendsgn.local> bot-frontend 2026-05-30 15:40:01 +00:00
  • 8204802d36 feat(scrapers): wire N1.ru city sweep — pipeline + scheduler + admin endpoint (#575) bot-backend 2026-05-30 18:39:36 +03:00
  • 798fb12b4c feat(tradein): HeroSummary empty-state при insufficient_data (#740) (#743) Co-authored-by: bot-frontend <bot-frontend@gendsgn.local> Co-committed-by: bot-frontend <bot-frontend@gendsgn.local> bot-frontend 2026-05-30 15:37:13 +00:00
  • 7f46d6774e fix(tradein): guard деления на median=0 в ListingsCard/DealsCard bot-frontend 2026-05-30 18:36:32 +03:00
  • 9af88ebaa5 feat(tradein): HeroSummary empty-state при insufficient_data bot-frontend 2026-05-30 18:33:26 +03:00
  • 34a13d71c3 fix(tradein): sync n_analogs to anchor count when anchor drives headline (#695) (#739) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 15:25:35 +00:00
  • d688d24a12 fix(tradein): sync n_analogs to anchor count when anchor drives headline (#695) bot-backend 2026-05-30 18:23:30 +03:00
  • 2b3eb0b23d fix(tradein): confidence_explanation no longer contradicts counters (#695) (#738) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 15:10:31 +00:00
  • e6e2a2cdc4 fix(tradein): confidence_explanation no longer contradicts counters (#695) bot-backend 2026-05-30 18:07:44 +03:00
  • 83f3d70859 docs(tradein): clarify n_analogs vs analogs[] top-10 cap (#698) (#737) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 15:00:48 +00:00
  • 6647a9a8c1 docs(tradein): clarify n_analogs vs analogs[] top-10 cap (#698) bot-backend 2026-05-30 17:58:11 +03:00
  • 14541d4951 Merge pull request 'chore(agents): auto-resolver human-proxy persona для needs-human' (#735) from feat/auto-resolver-persona into main lekss361 2026-05-30 14:42:17 +00:00
  • bc3ecf80cc chore(agents): add auto-resolver human-proxy persona for needs-human queue lekss361 2026-05-30 17:40:36 +03:00
  • ef7b5f8c54 feat(tradein): insufficient_data flag on AggregatedEstimate (#697) (#734) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 14:40:04 +00:00
  • 01cc7057cd feat(tradein): insufficient_data flag on AggregatedEstimate (#697) bot-backend 2026-05-30 17:38:52 +03:00
  • 066fab11d3 fix(tradein): sanitize ДКП deal outliers (floor / ppm²) (#699) (#733) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 14:31:44 +00:00
  • d5ed6f0fe4 fix(tradein): sanitize ДКП deal outliers (floor / ppm²) (#699) bot-backend 2026-05-30 17:29:29 +03:00
  • e94929159b fix(scrapers): avito listing_date from sortTimeStamp JSON (#726) (#729) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 14:13:38 +00:00
  • d6dca24ea2 fix(scrapers): avito listing_date from sortTimeStamp JSON (#726) bot-backend 2026-05-30 17:09:41 +03:00
  • 1f3008d59e feat(tradein): street_only disclaimer in StreetDealsCard (#722) (#725) Co-authored-by: bot-frontend <bot-frontend@gendsgn.local> Co-committed-by: bot-frontend <bot-frontend@gendsgn.local> bot-frontend 2026-05-30 13:44:30 +00:00
  • 1699c1ced9 feat(tradein): street_only disclaimer in StreetDealsCard bot-frontend 2026-05-30 16:40:56 +03:00
  • 575d9abbf7 feat(tradein): add data_quality flag to /sales-vs-listings (#721) (#723) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 13:21:08 +00:00
  • 1917b6dbf7 feat(tradein): add data_quality flag to /sales-vs-listings (#721) bot-backend 2026-05-30 16:18:01 +03:00
  • a79cf7d5e0 fix(tradein): coarse-geo downgrade no longer shielded by Tier C anchor (#693) (#720) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 12:34:11 +00:00
  • 090a5c6e91 fix(tradein): coarse-geo downgrade no longer shielded by Tier C anchor (#693) bot-backend 2026-05-30 15:27:16 +03:00
  • 406ea8365a feat(health): expose app version in GET /health (#717) (#719) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 12:15:06 +00:00
  • d07d10f1df feat(health): expose app version in GET /health bot-backend 2026-05-30 15:13:03 +03:00
  • 0e2bba78b7 fix(tradein): coarse-geo downgrade works without DaData on prod (#693) (#718) Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local> bot-backend 2026-05-30 12:08:56 +00:00
  • 29222585d0 fix(tradein): coarse-geo downgrade works without DaData on prod (#693) bot-backend 2026-05-30 15:04:16 +03:00