(low) DeveloperLeaderboard COLS: pct_three_plus/avg_area_sqm/sverdl_sqm_th со значением 0 рендерятся как «—» (falsy-zero) #1433

Closed
opened 2026-06-15 05:54:48 +00:00 by bot-backend · 0 comments
Collaborator

Severity: low · Категория: frontend · Файл: frontend/src/components/analytics/DeveloperLeaderboard.tsx:21-46

DeveloperLeaderboard.tsx:21-46. Три форматтера используют truthy-проверку вместо null-проверки: sverdl_sqm_th (стр. 24) (v) => (v ? v.toFixed(0) : "—"), avg_area_sqm (стр. 41) (v) => (v ? v.toFixed(1) : "—"), pct_three_plus (стр. 45) (v) => (v ? v.toFixed(0) : "—"). Для сравнения sold_pct (стр. 29) и sold_delta_pp (стр. 34-35) корректно используют v != null. Импакт: валидный 0 отображается как «нет данных». Наиболее реалистичный кейс — pct_three_plus = 0 у девелопера, строящего только студии/однушки: в ячейке покажется «—», хотя по столбцу есть сортировка (стр. 67 a[sortBy] ?? -Infinity), т.е. 0 участвует в ранжировании, но рисуется прочерком. Для sverdl_sqm_th и avg_area_sqm реальный 0 практически невозможен (девелопер с 0 м²/0 средней площади не попадёт в топ-15), поэтому импакт ограничен в основном pct_three_plus. Чинить: заменить v ? на v != null во всех трёх форматтерах.

Почему баг: 0 — валидные данные, а не отсутствие. Девелопер, строящий только студии/однушки, имеет pct_three_plus = 0; в ячейке он покажется как «—». При этом по этому столбцу есть сортировка (строка 67 a[sortBy] ?? -Infinity), то есть число участвует в ранжировании, но отрисовывается как прочерк.

Как чинить: Заменить truthy-проверки на v != null во всех трёх форматтерах, как уже сделано для sold_pct.


deep-audit «армия ботов 2» · verify+harden, confidence 0.88 · unit U86

**Severity:** low · **Категория:** frontend · **Файл:** `frontend/src/components/analytics/DeveloperLeaderboard.tsx:21-46` DeveloperLeaderboard.tsx:21-46. Три форматтера используют truthy-проверку вместо null-проверки: sverdl_sqm_th (стр. 24) `(v) => (v ? v.toFixed(0) : "—")`, avg_area_sqm (стр. 41) `(v) => (v ? v.toFixed(1) : "—")`, pct_three_plus (стр. 45) `(v) => (v ? v.toFixed(0) : "—")`. Для сравнения sold_pct (стр. 29) и sold_delta_pp (стр. 34-35) корректно используют `v != null`. Импакт: валидный 0 отображается как «нет данных». Наиболее реалистичный кейс — pct_three_plus = 0 у девелопера, строящего только студии/однушки: в ячейке покажется «—», хотя по столбцу есть сортировка (стр. 67 a[sortBy] ?? -Infinity), т.е. 0 участвует в ранжировании, но рисуется прочерком. Для sverdl_sqm_th и avg_area_sqm реальный 0 практически невозможен (девелопер с 0 м²/0 средней площади не попадёт в топ-15), поэтому импакт ограничен в основном pct_three_plus. Чинить: заменить `v ?` на `v != null` во всех трёх форматтерах. **Почему баг:** 0 — валидные данные, а не отсутствие. Девелопер, строящий только студии/однушки, имеет pct_three_plus = 0; в ячейке он покажется как «—». При этом по этому столбцу есть сортировка (строка 67 a[sortBy] ?? -Infinity), то есть число участвует в ранжировании, но отрисовывается как прочерк. **Как чинить:** Заменить truthy-проверки на `v != null` во всех трёх форматтерах, как уже сделано для sold_pct. --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.88 · unit U86</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:54:48 +00:00
bot-backend added the
scope/backend
label 2026-06-15 11:02:04 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1433
No description provided.