(low) houses.py/_upsert_house_source: ON CONFLICT не обновляет matched_method/matched_at — провенанс врёт #1538

Closed
opened 2026-06-15 05:59:30 +00:00 by bot-backend · 0 comments
Collaborator

Severity: low · Категория: data-integrity · Файл: tradein-mvp/backend/app/services/matching/houses.py:349-352

houses.py:349-351. ON CONFLICT (ext_source, ext_id) DO UPDATE SET обновляет только confidence = GREATEST(EXCLUDED.confidence, house_sources.confidence) и last_seen_at = NOW(). matched_method и matched_at не обновляются. Сценарий: запись создана как geo_proximity/0.7, позже тот же (source, ext_id) совпал по cadastr_exact/1.0 -> confidence=1.0, но matched_method='geo_proximity'. Импакт: несогласованная пара conf=1.0 при method='geo_proximity'; отчёты/аудит по matched_method и low-conf review-очередь (индекс/поле из миграции 028) показывают неверный метод. Функционального слома нет, поэтому low. Как чинить: при ON CONFLICT обновлять matched_method и matched_at только когда EXCLUDED.confidence > house_sources.confidence (CASE WHEN), чтобы метод соответствовал победившей confidence.

Почему баг: Получается несогласованная пара: confidence=1.0 при matched_method='geo_proximity'. low-confidence review-очередь и любые отчёты/аналитика по matched_method (028 заводит индекс house_sources_low_conf_idx и поле matched_method именно под аудит качества матчинга) будут показывать неверный метод, не соответствующий confidence. Рассинхрон данных о происхождении матча.

Как чинить: Обновлять matched_method и matched_at в DO UPDATE согласованно с confidence — например через CASE: брать метод того источника confidence, который победил в GREATEST, либо просто matched_method=EXCLUDED.matched_method, matched_at=NOW().


deep-audit «армия ботов 2» · verify+harden, confidence 0.9 · unit U130

**Severity:** low · **Категория:** data-integrity · **Файл:** `tradein-mvp/backend/app/services/matching/houses.py:349-352` houses.py:349-351. ON CONFLICT (ext_source, ext_id) DO UPDATE SET обновляет только confidence = GREATEST(EXCLUDED.confidence, house_sources.confidence) и last_seen_at = NOW(). matched_method и matched_at не обновляются. Сценарий: запись создана как geo_proximity/0.7, позже тот же (source, ext_id) совпал по cadastr_exact/1.0 -> confidence=1.0, но matched_method='geo_proximity'. Импакт: несогласованная пара conf=1.0 при method='geo_proximity'; отчёты/аудит по matched_method и low-conf review-очередь (индекс/поле из миграции 028) показывают неверный метод. Функционального слома нет, поэтому low. Как чинить: при ON CONFLICT обновлять matched_method и matched_at только когда EXCLUDED.confidence > house_sources.confidence (CASE WHEN), чтобы метод соответствовал победившей confidence. **Почему баг:** Получается несогласованная пара: confidence=1.0 при matched_method='geo_proximity'. low-confidence review-очередь и любые отчёты/аналитика по matched_method (028 заводит индекс house_sources_low_conf_idx и поле matched_method именно под аудит качества матчинга) будут показывать неверный метод, не соответствующий confidence. Рассинхрон данных о происхождении матча. **Как чинить:** Обновлять matched_method и matched_at в DO UPDATE согласованно с confidence — например через CASE: брать метод того источника confidence, который победил в GREATEST, либо просто matched_method=EXCLUDED.matched_method, matched_at=NOW(). --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.9 · unit U130</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:59:30 +00:00
bot-backend added the
scope/backend
label 2026-06-15 11:02:20 +00:00
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#1538
No description provided.