(low) RecommendRevenueChart.tsx: при total=0 подписи «0.0 млн» показываются на всех нулевых сегментах #1438

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

Severity: low · Категория: numeric · Файл: frontend/src/components/analytics/RecommendRevenueChart.tsx:19-37

Файл frontend/src/components/analytics/RecommendRevenueChart.tsx:19,37. Порог показа подписи сегмента вычисляется как (valuesMln[i] ?? 0) >= total * 0.05, где total — сумма уже округлённых до 0.1 млн значений. Когда все выручки по бакетам null или округляются в 0.0, total=0 и условие вырождается в 0 >= 0 => true для всех 5 сегментов. Импакт: на stacked-баре нулевой длины рисуются 5 подписей «<бакет>\n0.0 млн» — визуальный мусор. Денежно не врёт, краша нет, поэтому low. Как чинить: защититься от total<=0, например show: total > 0 && (valuesMln[i] ?? 0) >= total * 0.05, или (valuesMln[i] ?? 0) > 0 && (valuesMln[i] ?? 0) >= total * 0.05.

Почему баг: total — сумма округлённых до 0.1 млн значений; при всех нулях он равен 0, и сравнение 0 >= total * 0.05 (т.е. 0 >= 0) истинно, тогда как намерение порога — прятать подписи мелких/нулевых сегментов. Это даёт визуальный мусор «0.0 млн» на нулевом баре. Импакт ограничен косметикой (не врёт в деньгах — значение действительно 0; не падает), поэтому low. Секция рендерится только при hasAllocation, но это не гарантирует ненулевую выручку.

Как чинить: Показывать подписи только при положительном total и значимой доле: show: total > 0 && (valuesMln[i] ?? 0) >= total * 0.05 (либо использовать абсолютный порог в млн).


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

**Severity:** low · **Категория:** numeric · **Файл:** `frontend/src/components/analytics/RecommendRevenueChart.tsx:19-37` Файл frontend/src/components/analytics/RecommendRevenueChart.tsx:19,37. Порог показа подписи сегмента вычисляется как (valuesMln[i] ?? 0) >= total * 0.05, где total — сумма уже округлённых до 0.1 млн значений. Когда все выручки по бакетам null или округляются в 0.0, total=0 и условие вырождается в 0 >= 0 => true для всех 5 сегментов. Импакт: на stacked-баре нулевой длины рисуются 5 подписей «<бакет>\n0.0 млн» — визуальный мусор. Денежно не врёт, краша нет, поэтому low. Как чинить: защититься от total<=0, например show: total > 0 && (valuesMln[i] ?? 0) >= total * 0.05, или (valuesMln[i] ?? 0) > 0 && (valuesMln[i] ?? 0) >= total * 0.05. **Почему баг:** `total` — сумма округлённых до 0.1 млн значений; при всех нулях он равен 0, и сравнение `0 >= total * 0.05` (т.е. `0 >= 0`) истинно, тогда как намерение порога — прятать подписи мелких/нулевых сегментов. Это даёт визуальный мусор «0.0 млн» на нулевом баре. Импакт ограничен косметикой (не врёт в деньгах — значение действительно 0; не падает), поэтому low. Секция рендерится только при `hasAllocation`, но это не гарантирует ненулевую выручку. **Как чинить:** Показывать подписи только при положительном `total` и значимой доле: `show: total > 0 && (valuesMln[i] ?? 0) >= total * 0.05` (либо использовать абсолютный порог в млн). --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.72 · unit U88</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:54:53 +00:00
bot-backend added the
scope/frontend
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#1438
No description provided.