Почему: detail-парсер извлекал has_concierge/closed_yard/total_floors_house/
house_type на каждой карточке и выбрасывал всё, кроме house_type/house_url
для listings (комментарий в шапке: «собираются но НЕ сохраняются, Stage 2c»,
а Stage 2c почти не отрабатывает). На проде при 10 051 обогащённых карточках
с привязкой к дому has_concierge заполнен у 5 домов из 10 131, closed_yard —
у 19; при этом API отдаёт эти поля, и «неизвестно» читается как «нет».
Что: в save_detail_enrichment — единственной точке для пайплайна (×2) и
бэкфилла — вторым оператором fill-only UPDATE houses … FROM listings WHERE
house_id_fk = h.id: COALESCE(houses.X, новое) для has_concierge, closed_yard,
total_floors, house_type; под SAVEPOINT (отказ не роняет обогащение
листинга); нет house-полей с карточки — оператора нет. Лифты не пишутся:
колонок в houses нет (conflict_resolution их объявляет, схема — нет).
Тесты: подменный Session — второй оператор, fill-only, SAVEPOINT, без
лифтов, без полей — без оператора, листинг не найден — дом не трогаем (на
main красный по значению); live (CI БД): fill → не затирает → без привязки
дом не тронут.
Refs #3036