fix(ptica): «геологический риск» больше не выводится из шума (#2934) #3006
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#3006
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2934-risks-coverage"
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?
Пункт 2 из порядка починки #2934.
Что было
Поле называется геологическим риском, а считается из подтопления и шума. Геологии в нём нет ни одного бита.
Хуже:
cad_risk_zonesпуста — 0 строк, писателя нет (п.6 той же задачи). Значит_floodвсегдаFalse, и подтопление приходит только из OSM-прокси «река или канал ближе 200 м». На тихом участке без реки поле всегда говорит"low"— зелёный вердикт, ни разу не подкреплённый проверкой геологии.Правка
Поле убрано, а не переименовано. Замена не нужна: соседний блок
geologyуже честно отдаётdata_available: false, когда данных нет.noise_scoreостаётся — он измерен честно.flood_zoneостаётся — его судьба это отдельный пункт задачи (п.4, перевод на ЗОУИТ-35, где замер показал 8 объектов на 8 кварталов из 669).Обоснование удаления — замером, а не словом
Убрать поле из публичного ответа можно только зная, что его никто не читает. Проверил и закрепил тестом, который перечитывает дерево исходников:
Тест не даст этому утверждению протухнуть.
Как проверено
origin/mainтри теста красные — «метка всё ещё выдаётся», «шум по-прежнему участвует в риск-блоке», «поле где-то ещё читается»."high"|"medium"|"low") в риск-блоке. Без него «починка» переименованием оставила бы тот же обман.noise_scoreна месте,flood_zoneтоже.pytest backend/tests/api/— 377 passed, 1 skipped.Проверка потребителей отличает комментарий от использования: иначе она краснеет на собственном объяснении правки — на это я наступал трижды за сутки, и здесь защита стоит явно.
`risks.geology_risk_label` назывался геологическим риском, а вычислялся так: high — если подтопление medium — если шум ≥ 65 дБ low — иначе Геологии в нём не было ни одного бита. При этом `cad_risk_zones` пуста (0 строк, писателя нет — #2934 п.6), поэтому подтопление приходило только из OSM-прокси «река ближе 200 м». На тихом участке без реки поле ВСЕГДА говорило «low» — зелёный вердикт, ни разу не подкреплённый проверкой геологии. Поле убрано, а не переименовано: соседний блок `geology` честно отдаёт `data_available: false`, когда данных нет. Замена не нужна. Удаление поля из публичного ответа обосновано замером, а не словом: потребителей нет ни в backend, ни во фронте, ни в §19-allowlist чата, ни в экспортёрах; в схеме `risks: dict[str, Any]`, поэтому OpenAPI не меняется. На это поставлен отдельный тест, который перечитывает дерево исходников — иначе обоснование держалось бы на моём слове. Двусторонне: против origin/main три теста красные («метка всё ещё выдаётся», «шум по-прежнему участвует в риск-блоке», «поле где-то ещё читается»). Контроли зелёные с обеих сторон: измеренный `noise_score` остаётся на месте, `flood_zone` тоже (его судьба — отдельный пункт задачи). Контроль подмены отдельно: тест запрещает словесные градации риска в блоке, иначе «починка» переименованием оставила бы тот же обман. Проверка потребителей отличает комментарий от использования — иначе она краснеет на собственном объяснении правки (на это я наступал трижды за сутки, см. соседние PR). pytest backend/tests/api/ — 377 passed, 1 skipped. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>