chore(tradein): четыре символа, на которые нет ни одной ссылки #3224
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3224
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "chore/3212-dead-code-tradein"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Первый кусок чистки. Только удаления: 24 строки, 0 добавленных.
Как искалось
Сверка двух независимых источников, а не глазами:
serena find_referencing_symbols— это LSP, он видит косвенные ссылки, которых не видит подсчёт по тексту;yml/sql/ts/tsx/md— на случай ссылки строкой (имя celery-задачи, конфиг, контракт с фронтом).Третий шаг оказался не формальностью — см. ниже.
Удалено
_qr_code_data_url(trade_in_pdf)_local_name(gar_flats_loader)AvitoParseErrorIMVCityMismatchErrorВместе с первым ушёл осиротевший
import segno.import ioоставлен —io.BytesIOиспользуется дальше по файлу (строка 774); проверял отдельно, потому что на глаз он выглядел таким же осиротевшим.Что фильтр показал, но трогать нельзя
Из 367 первичных кандидатов настоящими оказались 33, а после разбора — 4. Остальное:
.claude/rules/delegation.mdпроanalyze_impact;refresh_ddu_price_indicator— точка ручного обслуживания, задокументирована в комментарии к матвью:data/sql/152_mv_ddu_price_indicator.sql→ «Refresh:ddu_price_indicator.refresh_ddu_price_indicator()(не в beat)». Ссылок из кода нет намеренно;schemas/parcel.py::MarketPrice— половина контракта, фронт использует:frontend/src/types/site-finder.ts→market_price?: MarketPrice | null;JobSetting— SQLAlchemy-модель, живёт через metadataBase.Follow-up
segnoпосле этого PR не используется в кодовой базе нигде, но остаётся вbackend/pyproject.toml. Снятие зависимости требует пересборки лока — отдельным PR.Приёмка
ruff check— clean.pytest— 4974 passed, 37 skipped.Найдено сверкой двух независимых источников: подсчёт упоминаний по всем python-файлам (включая тесты) дал имена, встречающиеся ровно один раз — в собственном объявлении; каждое затем подтверждено serena find_referencing_symbols (LSP, видит и косвенные ссылки) и проверено grep'ом по yml/sql/ts/md на случай ссылки строкой. Удалено: * _qr_code_data_url (trade_in_pdf) — QR как SVG data URL, не вызывался ниоткуда; вместе с ним ушёл осиротевший import segno. `io` ОСТАВЛЕН — io.BytesIO используется дальше по файлу (строка 774); * _local_name (gar_flats_loader) — снятие namespace с имени тега; * AvitoParseError — класс никто не поднимает и не ловит; * IMVCityMismatchError — то же. Что НЕ тронуто, хотя фильтр их показал: * ~200 обработчиков FastAPI и celery-задач — их поднимает декоратор, по имени их действительно никто не зовёт; * refresh_ddu_price_indicator — точка ручного обслуживания, задокументирована в комментарии к матвью (data/sql/152_mv_ddu_price_indicator.sql: «Refresh: ... (не в beat)»); * schemas/parcel.py::MarketPrice — половина контракта, фронт использует (frontend/src/types/site-finder.ts: market_price?: MarketPrice); * JobSetting — SQLAlchemy-модель, живёт через metadata Base. segno остался в backend/pyproject.toml и больше нигде не используется — снятие зависимости требует пересборки лока, поэтому отдельным PR. ruff clean, 4974 passed / 37 skipped.