116: AFTER UPDATE OF price_rub trigger on listings writes derived
offer_price_history rows for avito/yandex; cian excluded to preserve
source-provided backfill (cian_price_history.py LEFT JOIN oph IS NULL guard).
117: partial composite index (source, last_seen_at) WHERE is_active to
accelerate deactivate_stale_listings seq-scan on ~39k rows.