[tradein] scraper_kit migration — Group E: core valuation (estimator.py) — МАКСИМАЛЬНЫЙ РИСК #2308

Closed
opened 2026-07-03 20:17:33 +00:00 by lekss361 · 1 comment
Owner

Родительский эпик: #2277. Зависит от #2304 (harness) + должна идти ПОСЛЕДНЕЙ из функциональных
групп (A/B/C/D) — стабильность остальных снижает шум при отладке этой самой рискованной части.

Почему риск максимальный

app/services/estimator.py — core-логика оценки стоимости, показывается пользователю как
итоговая цена/оценка. Импортирует avito_imv, cian_valuation, yandex_valuation из legacy.
Регрессия здесь = неверная оценка стоимости, показанная реальному клиенту.

Scope (вероятно нужно дробить дальше при оценке — L на входе)

  1. Мигрировать avito_imv → kit-эквивалент, parity-тест на реальных листингах
  2. Мигрировать cian_valuation → kit-эквивалент, parity-тест
  3. Мигрировать yandex_valuation → kit-эквивалент, parity-тест
  4. Финальное переключение импорта в estimator.py — отдельный маленький изолированный PR
    ПОСЛЕ того как 1-3 стабильны

DoD

  • Parity-тест (harness #2304) на реальных листингах для КАЖДОГО из 3 providers — diff=0
    (или задокументированный float-tolerance)
  • Shadow-run: посчитать оценку старым и новым путём на выборке реальных объектов ДО
    переключения estimator.py, сравнить расхождение
  • deep-code-reviewer explicit APPROVE обязателен перед мерджем финального шага
    (переключение импорта в estimator.py) — не self-merge по обычной политике, здесь
    дополнительный gate
  • Откат — тривиален (вернуть импорт на legacy), проверить что это правда так на практике

Риск

Максимальный в эпике — идёт последней, с максимальным ревью.

Родительский эпик: #2277. Зависит от #2304 (harness) + должна идти ПОСЛЕДНЕЙ из функциональных групп (A/B/C/D) — стабильность остальных снижает шум при отладке этой самой рискованной части. ## Почему риск максимальный `app/services/estimator.py` — core-логика оценки стоимости, показывается пользователю как итоговая цена/оценка. Импортирует `avito_imv`, `cian_valuation`, `yandex_valuation` из legacy. Регрессия здесь = неверная оценка стоимости, показанная реальному клиенту. ## Scope (вероятно нужно дробить дальше при оценке — L на входе) 1. Мигрировать `avito_imv` → kit-эквивалент, parity-тест на реальных листингах 2. Мигрировать `cian_valuation` → kit-эквивалент, parity-тест 3. Мигрировать `yandex_valuation` → kit-эквивалент, parity-тест 4. Финальное переключение импорта в `estimator.py` — отдельный маленький изолированный PR ПОСЛЕ того как 1-3 стабильны ## DoD - [ ] Parity-тест (harness #2304) на реальных листингах для КАЖДОГО из 3 providers — diff=0 (или задокументированный float-tolerance) - [ ] Shadow-run: посчитать оценку старым и новым путём на выборке реальных объектов ДО переключения `estimator.py`, сравнить расхождение - [ ] **`deep-code-reviewer` explicit APPROVE обязателен** перед мерджем финального шага (переключение импорта в `estimator.py`) — не self-merge по обычной политике, здесь дополнительный gate - [ ] Откат — тривиален (вернуть импорт на legacy), проверить что это правда так на практике ## Риск Максимальный в эпике — идёт последней, с максимальным ревью.
lekss361 added the
scope/backend
scrapers
tech-debt
tradein
labels 2026-07-03 20:18:00 +00:00
Author
Owner

Разбил на 4 sub-issue по итогам разведки (estimator.py + 3 valuation-модуля — каждый со своим
подтверждённым config-footgun риском, вскрыто перед стартом):

  • #2334 — E1: avito_imv (4-й подряд случай config-footgun в эпике — прокси молча отключается
    без config=; плюс отсутствует golden-parity тест вообще, строить с нуля)
  • #2335 — E2: cian_valuation (config обязателен → TypeError, но проглатывается blanket except
    в estimator.py — риск "невидимого" бага, не просто отсутствия proxy)
  • #2336 — E3: yandex_valuation (тот же TypeError-риск + НОВЫЙ footgun: delay_provider тихо
    падает на хардкод 5.0s вместо DB-admin-настройки throttle)
  • #2337 — E4: финальное переключение estimator.py — маленький изолированный PR, ПОСЛЕ E1-E3
    стабильны, обязателен deep-code-reviewer APPROVE + shadow-run на реальных объектах

Стартую E1/E2/E3 параллельно (независимые файлы). E4 — строго после.

Разбил на 4 sub-issue по итогам разведки (estimator.py + 3 valuation-модуля — каждый со своим подтверждённым config-footgun риском, вскрыто перед стартом): - #2334 — E1: avito_imv (4-й подряд случай config-footgun в эпике — прокси молча отключается без `config=`; плюс отсутствует golden-parity тест вообще, строить с нуля) - #2335 — E2: cian_valuation (config обязателен → TypeError, но проглатывается blanket except в estimator.py — риск "невидимого" бага, не просто отсутствия proxy) - #2336 — E3: yandex_valuation (тот же TypeError-риск + НОВЫЙ footgun: `delay_provider` тихо падает на хардкод 5.0s вместо DB-admin-настройки throttle) - #2337 — E4: финальное переключение `estimator.py` — маленький изолированный PR, ПОСЛЕ E1-E3 стабильны, обязателен `deep-code-reviewer` APPROVE + shadow-run на реальных объектах Стартую E1/E2/E3 параллельно (независимые файлы). E4 — строго после.
Sign in to join this conversation.
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#2308
No description provided.