fix(tradein): cadastre ЖКХ-fallback + COALESCE merge-key + median-floors guard
Серия sale-share data-quality (по находкам юзера):
- house_dedup_merge: cluster_key → tradein_canon_addr(COALESCE(short_address,
full_address, address)) — ловит дубли с район-noise в address (Вайнера 66).
- zhkh_flats_loader: cadastre-fallback (searchByAddress по cadastreNumber,
guid-независимо) — резолвит дома где gar_house_guid ≠ ЖКХ houseGuid
(Переходный 6: guid→0, cadastre→165). CLI --cadastre.
- мигр.153: плаузибилити-гард по медиане этажности листингов — denom >=
GREATEST(total_floors, median(listings.total_floors), 8); отсекает gar-недосчёт
башен без ЖКХ (gar=9 vs листинги 19-26 эт → NULL).
ruff clean, pytest 36 green.