compute_dedup_hash включал price_rub и волатильный source_url (?context=) в
ключ → смена цены / ре-скрейп того же объявления давали новый hash → INSERT
дубля вместо ON CONFLICT DO UPDATE → дубли активных listings → искажение
asking_to_sold_ratio / sales-vs-listings / активного инвентаря.
Фикс (base.py.compute_dedup_hash):
- price_rub убран из ключа (смена цены = UPDATE строки, не новый объект);
- source_url-fallback стрипает query-string (?...) перед хешированием.
Avito source_id (DoD п.1): УЖЕ выставляется avito.py:404
(source_id=data-item-id, добавлено #726) — премиса issue про '0 совпадений
source_id' устарела. avito.py НЕ менялся, конфликт зафиксирован в PR/комменте.
Разовый эффект: существующие строки получат новый hash → следующий скрейп
upsert'нет их по новому ключу (всплеск дублей разовый, как и оговорено в issue).
Tests (test_base_save_listings.py): same item разная цена+context→один hash;
no-source_id query-strip; разные source_id→разный hash; source в ключе.