fix(tradein): cian newbuilding MFE/reliability drift — initialState extraction (#972) #1544

Merged
lekss361 merged 1 commit from fix/cian-newbuilding-mfe-drift into main 2026-06-15 18:13:45 +00:00
Owner

Проблема

После деплоя #1540 (#972, BrowserFetcher) валидационный backfill cian newbuilding всё равно давал failed_fetch для всех домов (succeeded=0), хотя страница ЖК тянется живой (verified: title «ЖК Светлый», _cianConfig×60, initialState×14, egress = мобильный IP). Диагностика через прод-браузер-контейнер (camoufox, прод egress) показала два drift'а структуры Cianextract_state возвращал None:

  1. MFE переименован: newbuilding-card-desktop-fichering-frontendnewbuilding-card-desktop-frontend (старого имени на странице больше нет → initialState=None → главный блокер).
  2. reliability вложен глубже: initialState.reliabilityinitialState.reliabilityState.reliability (inner dict сохранил форму {checkStatus, details[], banner, actions}).

reviews в initialState отсутствует (грузится отдельным XHR) — вне scope, baseline и так 0.

Изменения

  • cian_newbuilding.py: mfe → актуальное имя; rel_state читает reliabilityState.reliability; docstring синхронизирован. Только новая реализация (без legacy-fallback на старые ключи).
  • test_cian_newbuilding.py: fixture fake_state обновлён под reliabilityState.reliability.

Верификация (live, прод-браузер 2026-06-15)

ЖК «Светлый» (nb 17556): newbuilding.id=17556, realtyValuation chart = 27 точек, reliabilityState.reliability.checkStatus (status=reliable) + 2 details — всё извлекается.

Test plan

  • uv run ruff check — passed
  • uv run pytest -q1779 passed. 2 несвязанных локальных env-only падения (test_cian_valuation::test_cache_hit_returns_cached KeyError, test_search_api::test_search_cache_hit 401) — в чужих модулях, мой diff их не касается; в CI проходят (job test на main @ 483fdb0c был success минуты назад).

После merge+deploy — повторить валидационный backfill (#972) + полный прогон.

Refs #972

## Проблема После деплоя #1540 (#972, BrowserFetcher) валидационный backfill cian newbuilding всё равно давал `failed_fetch` для всех домов (`succeeded=0`), хотя страница ЖК тянется живой (verified: title «ЖК Светлый», `_cianConfig`×60, `initialState`×14, egress = мобильный IP). Диагностика через прод-браузер-контейнер (camoufox, прод egress) показала **два drift'а структуры Cian** — `extract_state` возвращал `None`: 1. **MFE переименован**: `newbuilding-card-desktop-fichering-frontend` → `newbuilding-card-desktop-frontend` (старого имени на странице больше нет → `initialState=None` → главный блокер). 2. **reliability вложен глубже**: `initialState.reliability` → `initialState.reliabilityState.reliability` (inner dict сохранил форму `{checkStatus, details[], banner, actions}`). `reviews` в `initialState` отсутствует (грузится отдельным XHR) — вне scope, baseline и так 0. ## Изменения - `cian_newbuilding.py`: `mfe` → актуальное имя; `rel_state` читает `reliabilityState.reliability`; docstring синхронизирован. Только новая реализация (без legacy-fallback на старые ключи). - `test_cian_newbuilding.py`: fixture `fake_state` обновлён под `reliabilityState.reliability`. ## Верификация (live, прод-браузер 2026-06-15) ЖК «Светлый» (nb 17556): `newbuilding.id=17556`, `realtyValuation` chart = 27 точек, `reliabilityState.reliability.checkStatus` (status=reliable) + 2 details — всё извлекается. ## Test plan - [x] `uv run ruff check` — passed - [x] `uv run pytest -q` — **1779 passed**. 2 несвязанных локальных env-only падения (`test_cian_valuation::test_cache_hit_returns_cached` KeyError, `test_search_api::test_search_cache_hit` 401) — в чужих модулях, мой diff их не касается; в CI проходят (job `test` на main @ 483fdb0c был success минуты назад). После merge+deploy — повторить валидационный backfill (#972) + полный прогон. Refs #972
lekss361 added 1 commit 2026-06-15 18:12:34 +00:00
fix(tradein): cian newbuilding MFE/reliability drift — initialState extraction (#972)
All checks were successful
CI / changes (push) Successful in 8s
CI / backend-tests (push) Has been skipped
CI / frontend-tests (push) Has been skipped
CI / openapi-codegen-check (push) Has been skipped
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
891598a5d7
Cian переименовал MFE ЖК-карточки и переместил reliability-контейнер, из-за чего
fetch_newbuilding получал initialState=None → failed_fetch для всех домов
(verified live 2026-06-15 на прод-браузере через мобильный egress):

- MFE: 'newbuilding-card-desktop-fichering-frontend' → 'newbuilding-card-desktop-frontend'
  (старое имя на странице отсутствует → extract_state=None → backfill succeeded=0)
- reliability: initialState.reliability → initialState.reliabilityState.reliability
  (inner dict сохранил форму {checkStatus, details[], banner, actions})

Проверено на ЖК «Светлый» (nb 17556): newbuilding.id, realtyValuation chart (27 точек),
reliabilityState.reliability.checkStatus + 2 details — всё извлекается.

test_fetch_newbuilding_parses_state: fixture обновлён под reliabilityState.reliability.
Полный suite зелёный (1779 passed; 2 несвязанных env-only локальных падения —
cian_valuation cache / search_api auth — в CI проходят).

Refs #972
lekss361 added the
scope/backend
scrapers
status/review
labels 2026-06-15 18:12:58 +00:00
lekss361 merged commit 0f95a15c8e into main 2026-06-15 18:13:45 +00:00
lekss361 deleted branch fix/cian-newbuilding-mfe-drift 2026-06-15 18:13:46 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1544
No description provided.