fix(tradein/data): external_valuations.house_id — резолв в write-path + идемпотентный бэкфилл (#2236) #2263

Merged
lekss361 merged 2 commits from fix/tradein-extval-house-id into main 2026-07-03 06:40:23 +00:00
Owner

Summary

  • Write-path: оба call-site external valuations в estimate (Yandex Stage 8, Cian Stage 9) прокидывают уже разрезолвленный target_house_id (тот же match_house_readonly, что у estimate-target). INSERT пишет house_id + ON CONFLICT ... house_id = COALESCE(EXCLUDED.house_id, external_valuations.house_id) — существующее значение не перетирается NULL'ом, NULL добирается значением. Best-effort: резолв упал → house_id NULL, estimate не падает.
  • Бэкфилл: one-shot CLI python -m scripts.backfill_external_valuations_house_id по устоявшемуся паттерну проекта (backfill_house_coords.py): per-row SAVEPOINT (в т.ч. в dry-run — паритет), батчи id > after_id, --dry-run/--limit/--source, идемпотентен (WHERE house_id IS NULL + guard в UPDATE, повторный прогон — no-op). НЕ миграция (резолв требует Python), manifest #2216 не затронут.
  • Тесты: 13 новых (write-path Cian/Yandex × resolve/None; бэкфилл happy/unresolved/error-isolation/batching/limit/идемпотентность/dry-run).

Как проверено

  • Полный uv run pytest (deselect только test_search_cache_hit): 3033 passed, 6 skipped.
  • E2E dry-run против прод-БД (туннель :35432, только SELECT): выборка 400 строк → resolved=349, unresolved=51, errors=0 (~87%; в external_valuations нет lat/lon — резолв только по адресу, часть честно не резолвится).
  • code-reviewer: APPROVE (CAST/bind-params, COALESCE-семантика, идемпотентность, read-only matcher, best-effort — верифицированы; его minor про savepoint в dry-run применён follow-up коммитом).

После merge+deploy: прогон на проде --dry-run --limit 100 → полный прогон (ожидаемо ~87% из 1579 строк получат house_id).

Closes #2236

## Summary - **Write-path:** оба call-site external valuations в estimate (Yandex Stage 8, Cian Stage 9) прокидывают уже разрезолвленный `target_house_id` (тот же `match_house_readonly`, что у estimate-target). INSERT пишет `house_id` + `ON CONFLICT ... house_id = COALESCE(EXCLUDED.house_id, external_valuations.house_id)` — существующее значение не перетирается NULL'ом, NULL добирается значением. Best-effort: резолв упал → house_id NULL, estimate не падает. - **Бэкфилл:** one-shot CLI `python -m scripts.backfill_external_valuations_house_id` по устоявшемуся паттерну проекта (`backfill_house_coords.py`): per-row SAVEPOINT (в т.ч. в dry-run — паритет), батчи `id > after_id`, `--dry-run/--limit/--source`, идемпотентен (`WHERE house_id IS NULL` + guard в UPDATE, повторный прогон — no-op). НЕ миграция (резолв требует Python), manifest #2216 не затронут. - Тесты: 13 новых (write-path Cian/Yandex × resolve/None; бэкфилл happy/unresolved/error-isolation/batching/limit/идемпотентность/dry-run). ## Как проверено - Полный `uv run pytest` (deselect только `test_search_cache_hit`): **3033 passed, 6 skipped**. - E2E dry-run против прод-БД (туннель :35432, только SELECT): выборка 400 строк → **resolved=349, unresolved=51, errors=0** (~87%; в external_valuations нет lat/lon — резолв только по адресу, часть честно не резолвится). - code-reviewer: ✅ APPROVE (CAST/bind-params, COALESCE-семантика, идемпотентность, read-only matcher, best-effort — верифицированы; его minor про savepoint в dry-run применён follow-up коммитом). После merge+deploy: прогон на проде `--dry-run --limit 100` → полный прогон (ожидаемо ~87% из 1579 строк получат house_id). Closes #2236
lekss361 added 2 commits 2026-07-03 06:29:37 +00:00
fix(tradein/data): dry-run бэкфилла — savepoint-паритет с write-веткой (#2236)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 17s
CI / changes (pull_request) Successful in 18s
CI Trade-In / frontend-checks (pull_request) Has been skipped
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 Trade-In / backend-tests (pull_request) Successful in 2m58s
c2096249d5
lekss361 merged commit c44bb49809 into main 2026-07-03 06:40:23 +00:00
lekss361 deleted branch fix/tradein-extval-house-id 2026-07-03 06:40:23 +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#2263
No description provided.