fix(ptica): пустой слой риск-зон перестаёт означать «рисков нет» (#2934) #2940
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#2940
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2934-risk-coverage-signal"
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?
Плашка «Риски не обнаружены» показывалась всегда
Бэкенд всегда присылает
nspd_risk_zones— пустым списком, если ничего нет. Условие показа вLandTab(data.nspd_risk_zones !== undefined) поэтому истинно всегда, а веткаzones.length === 0рисовала зелёную плашку (#f0fdf4/#15803d):Пустой список неоднозначен: «слой опрошен, на участке чисто» и «слой не дал ничего вообще» выглядят одинаково.
Замер на проде 19.08:
То есть плашка показывалась всегда и всегда без основания.
Три состояния вместо двух
Признак
risks_countуже вычитывался из строки дампа (quarter_dump_lookup.py:277) и лежал вlayer_counts— просто не выходил наружу.None, а не0, когда дампа нет: ноль означал бы «спросили и не нашли».layers_fetchedнаружу не отдаю.layers_fetched.append(...)вnspd_client.py:956стоит до запроса, поэтому как признак «слой опрошен» он лжёт — говорит лишь «собирались спросить». Записал это прямо в коде, чтобы следующий читатель не подхватил его как готовый признак покрытия.Заодно: счётчик слоя на карте
Зоны риска 0стояло в одном ряду с измереннымиКонкуренты 14иКрасные линии 2. Такой ноль читается как измеренный. При пустом слое теперь «н/д».Проверка
origin/mainUnable to find an element with the text: Не провереноДва последних — контроли: без них правка могла бы свестись к «никогда не показывать зелёное», что было бы такой же неправдой с другой стороны.
tsc --noEmit: rc=0 ·vitest: 35 файлов, 275 тестов, rc=0pytest tests/test_quarter_dump_lookup.py: 23 passed ·pytest tests/api/v1: 354 passed, 1 skipped, rc=0Всё перепрогнано после того, как pre-commit прогнал ruff-format и prettier.
Про размер диффа
CpLayerControlPanel.tsx— 267 изменённых строк при правке в две. Это работа pre-commit prettier: файл не проходил prettier уже наorigin/main(проверил отдельно, прогнав prettier по версии из main). Хук нормализовал его целиком, когда я его тронул.Тот же класс, что расхождение ruff в #2864: хук гоняется только по staged-файлам, поэтому файлы, которых давно не касались, остаются нестандартизованными до первой правки.
Refs #2934
Бэкенд ВСЕГДА присылает nspd_risk_zones — пустым списком, если ничего нет. Условие показа в LandTab (`!== undefined`) поэтому истинно всегда, а ветка zones.length === 0 рисовала ЗЕЛЁНУЮ плашку «Риски не обнаружены» с текстом «Риск-зоны НСПД на участке не выявлены». Пустой список неоднозначен: «слой опрошен, на участке чисто» и «слой не дал ничего вообще» выглядят одинаково. Замер на проде 19.08: risks_count = 0 у ВСЕХ 669 дампов (для сравнения zouit_count > 0 у 581) — одиннадцать слоёв природного риска ни разу не вернули ни одного объекта. То есть плашка показывалась всегда и всегда без основания. Провёл наружу risks_count из строки дампа (он уже вычитывался, в ответ не попадал). Три состояния вместо двух: risks_count > 0 -> «Риски не обнаружены» — законно, слой отработал risks_count == 0 -> «Не проверено», нейтральным серым risks_count is None -> «Не проверено» (дампа нет; None, а не 0, потому что ноль означал бы «спросили и не нашли») layers_fetched наружу НЕ отдаю: append в nspd_client.py:956 стоит ДО запроса, поэтому как признак «слой опрошен» он лжёт. Записано в коде, чтобы следующий читатель не подхватил его как готовый признак. Заодно счётчик слоя в тумблере карты: при пустом слое «н/д» вместо «0». Ноль в одном ряду с измеренными «Конкуренты 14» и «Красные линии 2» читался как измеренный ноль. Тесты двусторонние: на origin/main обе проверки падают с «Unable to find an element with the text: Не проверено»; два контроля (слой отработал → зелёная плашка законна; зоны найдены → карточки) зелёные с обеих сторон. Большой дифф CpLayerControlPanel.tsx (267 строк при правке в две) — работа pre-commit prettier: файл НЕ проходил prettier уже на origin/main (проверено отдельно), хук нормализовал его целиком, когда я его тронул. Тот же класс, что расхождение ruff в #2864: хук гоняется только по staged-файлам, поэтому файлы, которых давно не касались, остаются нестандартизованными. tsc --noEmit rc=0 · vitest 35 файлов / 275 тестов rc=0 (перепрогнано ПОСЛЕ хуков) pytest tests/test_quarter_dump_lookup.py: 23 passed pytest tests/api/v1 (контракт ответа): 354 passed, 1 skipped, rc=0 Refs #2934