gendesign/tradein-mvp/backend/app
lekss361 e9eb812d8b fix(tradein): recompute expected_sold_* after IMV blend + band-guard anchor (#651)
Review-bot findings:
- CRITICAL: expected_sold_* were derived from PRE-blend median/range/ppm2, so
  after the #651 blend raised median_price the UI showed asking (blended) vs
  expected-sold (un-blended) → nonsensical discount. Moved the asking→sold
  derivation to AFTER the blend block; INSERT + returned estimate now use the
  post-blend values.
- IMV anchor had no rooms/area band → a studio-only IMV row could anchor a
  3-room target and inflate via the x1.15 trigger. Added NULL-tolerant guard
  (abs(Δrooms)<=1 AND area_m2 BETWEEN area*0.7..1.3) in _fetch_house_imv_anchor.
- Tests: expected_sold↔blended-median consistency, band rejection, weight clamp
  [0,1], corridor count branch. ruff clean; 26 + 145 estimator regression pass.
2026-05-29 20:11:25 +03:00
..
api fix(tradein): scope GET /history to caller, close cross-pilot data leak (#656) (#670) 2026-05-29 15:59:03 +00:00
core Merge remote-tracking branch 'forgejo/main' into feat/tradein-651-652-accuracy 2026-05-29 19:11:51 +03:00
observability feat(tradein): enrich GlitchTip SDK init — integrations + PII scrub (#396) (#643) 2026-05-29 09:23:17 +00:00
schemas feat(tradein): blend Avito IMV anchor into estimate + ДКП corridor advisory — backend (#651, #652) 2026-05-29 18:58:10 +03:00
services fix(tradein): recompute expected_sold_* after IMV blend + band-guard anchor (#651) 2026-05-29 20:11:25 +03:00
tasks feat(tradein): daily asking→sold ratio refresh (#648 S4) (#663) 2026-05-29 13:49:36 +00:00
__init__.py feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
main.py feat(tradein): enrich GlitchTip SDK init — integrations + PII scrub (#396) (#643) 2026-05-29 09:23:17 +00:00