Anti-regression guards for PRs #877/#761/#784/#779/#743 (issues #755/#753/#773/#754/#740). All 5 defects had no dedicated lock test -- any refactor could silently re-introduce them. New file test_781_quality_gate.py (13 tests): #755: anchor n=2 < min_comps=4 does not fire; pure-unit confidence cap (n<5 != high) #753: compute_dedup_hash stable across reprice + ?context= query strip; source_id priority #773: expected_sold_price_rub > 0 on anchor-only path (radius=[]) when ratio present #754: page=1 HTTP-200 block raises AvitoContentBlockedError; page>1 graceful return #740: AggregatedEstimate.insufficient_data=True when median=0; survives model_dump() Updated test_estimator_pure_units.py: test_filter_outliers_passthrough_below_5_lots -- added docstring clarifying this tests the radius-path _filter_outliers (n<5 bypass Tukey is unchanged by #755); #755 added MAD-clip only to _compute_same_building_anchor, not to the radius-path filter. 325 tests pass under -k anchor|dedup|expected_sold|avito|insufficient|filter_outliers. ruff clean. |
||
|---|---|---|
| .. | ||
| app | ||
| data/sql | ||
| scripts | ||
| tests | ||
| .dockerignore | ||
| Dockerfile | ||
| pyproject.toml | ||