(low) house_imv_backfill.py/pick_lot_params: нет инварианта floor<=floor_at_home → при total_floors=NULL везде floor_at_home падает на 9 #1523

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

Severity: low · Категория: data-integrity · Файл: tradein-mvp/backend/app/services/house_imv_backfill.py:136-146

house_imv_backfill.py:140-141 — floor (медиана этажа по listings) и floor_at_home (=int(total_floors or house.total_floors or 9)) вычисляются независимо, без clamp и без sanity-проверки. Если total_floors NULL у всех связанных listings и у дома, floor_at_home молча = 9, при этом медианный floor может быть, напр., 12 → в Avito IMV уходит квартира на 12 этаже в 9-этажном доме (floorAtHome отправляется в запрос, avito_imv.py:563). Импакт: либо отказ IMV (дом помечается not_found/error зря), либо искажённая оценка-anchor. Edge-case узкий (percentile по total_floors игнорит NULL, дефолт 9 включается только при полном отсутствии данных). Чинить: добавить clamp floor = min(floor, floor_at_home) либо помечать no_params/skip, когда total_floors отсутствует во всех источниках, вместо дефолта 9.

Почему баг: floor и floor_at_home вычисляются независимо из разных источников с независимыми дефолтами (1 и 9). Дефолт floor_at_home=9 не связан с реальным медианным этажом. Нет clamp floor = min(floor, floor_at_home). Подтверждено симуляцией: при total_floors отсутствующем во всех источниках floor_at_home=9 при любом медианном floor.

Как чинить: Добавить clamp: floor = min(floor, floor_at_home) или брать floor_at_home = max(default, median_floor); либо при отсутствии total_floors и при floor>дефолта помечать no_params вместо отправки заведомо невалидной пары.


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

**Severity:** low · **Категория:** data-integrity · **Файл:** `tradein-mvp/backend/app/services/house_imv_backfill.py:136-146` house_imv_backfill.py:140-141 — floor (медиана этажа по listings) и floor_at_home (=int(total_floors or house.total_floors or 9)) вычисляются независимо, без clamp и без sanity-проверки. Если total_floors NULL у всех связанных listings и у дома, floor_at_home молча = 9, при этом медианный floor может быть, напр., 12 → в Avito IMV уходит квартира на 12 этаже в 9-этажном доме (floorAtHome отправляется в запрос, avito_imv.py:563). Импакт: либо отказ IMV (дом помечается not_found/error зря), либо искажённая оценка-anchor. Edge-case узкий (percentile по total_floors игнорит NULL, дефолт 9 включается только при полном отсутствии данных). Чинить: добавить clamp floor = min(floor, floor_at_home) либо помечать no_params/skip, когда total_floors отсутствует во всех источниках, вместо дефолта 9. **Почему баг:** floor и floor_at_home вычисляются независимо из разных источников с независимыми дефолтами (1 и 9). Дефолт floor_at_home=9 не связан с реальным медианным этажом. Нет clamp floor = min(floor, floor_at_home). Подтверждено симуляцией: при total_floors отсутствующем во всех источниках floor_at_home=9 при любом медианном floor. **Как чинить:** Добавить clamp: floor = min(floor, floor_at_home) или брать floor_at_home = max(default, median_floor); либо при отсутствии total_floors и при floor>дефолта помечать no_params вместо отправки заведомо невалидной пары. --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.7 · unit U126</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:59:13 +00:00
bot-backend added the
scope/backend
label 2026-06-15 11:02:18 +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#1523
No description provided.