fix(ptica): шумовой скорер перестаёт считать водоёмы источниками шума (#2464-G) #2931
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#2931
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2464g-noise-source-type-filter"
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?
Что не так
Запрос шумовых источников брал из
osm_noise_sources_ekbвсе типы. В таблице лежат и нешумовые слои — их отдельно читает блок гидрологии (9c) ниже в том же файле:Ключа в
NOISE_L_BASEу них нет, поэтому.get(key, 50.0)выдавал им ровно 50 дБ — значение, совпадающее с порогом попадания в список источников. Наorigin/mainтест печатает дефект буквально:Второе, менее заметное:
LIMIT 30берётся по близости, поэтому вода вытесняла настоящие источники.Замер (прод, 19.08, 1 000 участков, детерминированная выборка по cad_num)
Честно про масштаб: видимого эффекта у вытеснения нет — все вытесненные источники оказались тише порога 50 дБ, максимум дБ не меняется ни у одного участка. Видимый дефект — только водоём ближе 10 м. Правка убирает не столько видимую поломку, сколько скрытый потолок: почти половина бюджета
LIMITуходила на строки, которые скорер не умеет оценивать.Ловушка, из-за которой правка не в одну строку
Очевидный вариант — добавить фильтр и оставить
noise_sources_count=len(noise_rows)— сломал бы треть участков._compute_confidenceспрашивает «загружена ли шумовая карта» и при нуле пишет «Шумовая карта не загружена — noise score = stub». А у 345 участков из 1 000 в радиусе 2 км нет ни одного шумового источника при наличии воды. После наивной правки они получили бы это утверждение — неверное: карта загружена, просто рядом тихо.До правки верный ответ там выходил по случайности — ровно потому, что в счёт шли нешумовые строки. Поэтому покрытие карты считается отдельным дешёвым
COUNT(*)(таблица целиком — 10.5 тыс. строк), а параметр переименован вnoise_map_rows_nearby, чтобы смысл не приходилось угадывать.Проверка
origin/maintest_water_not_reported_as_noise_source'water' in {'water'})test_no_false_map_not_loaded_caveat...Второй тест — контроль: он зелёный по обе стороны от правки, но краснеет, если считать покрытие по отфильтрованному списку. Проверено подстановкой наивного варианта, не рассуждением.
pytest tests/api/v1на уже перебазированном дереве (то есть на том коде, что уйдёт в мерж): 348 passed, 1 skipped, rc=0, сторож пропусков молчит.Побочно: мок parcel_meta переведён на сигнатуры
test_analyze_parcel_meta.pyраздавал ответыdb.executeпо порядковому номеру вызова. Добавление любого запроса выше по коду ломало его — следы в истории самого файла (#29 G2, затем #2464 cluster B), и мой запрос покрытия сломал бы снова. Такое падение говорит не оparcel_meta, ради которого написан файл, а о том, что кто-то добавил блок выше.Переведён на матчинг по сигнатуре SQL — приём уже применён в соседнем
test_analyze_market_price.py, где эта хрупкость описана в докстринге. Проверено, что мок не потерял зубы: со специально сломанной сигнатурой тест краснеет. И что миграция сама по себе ничего не меняет: наorigin/mainон тоже зелёный.Refs #2464