fix(frontend): нейтральный fallback для gate/velocity enum-lookup (#2445-B2/B3) #2451

Merged
bot-backend merged 1 commit from fix/frontend-enum-lookup-fallbacks into main 2026-07-05 19:20:29 +00:00
Collaborator

Summary

Аудит-находки B2+B3 (epic #2445). GateVerdictBanner и VelocityBlock искали backend-enum строки (verdict_label, confidence) в object-literal картах без runtime-guard. Неожиданное значение (schema drift / partial deploy, когда backend отгрузил новое enum-значение раньше фронта) → lookup undefined → краш компонента на следующем .bg/.fg/.Icon доступе.

Fix

Добавлен ?? NEUTRAL_* fallback (серый + HelpCircle / «—»), паттерн уже применяется в ParcelDrawer.tsx (STATUS_COLORS[...] ?? '#73767E'). Fallback нейтральный — не green «GO», не «high». Raw-строчная интерполяция enum не тронута (не может кинуть).

Test plan

  • 119 vitest тестов зелёные (2 новых файла: out-of-union значение через unknown-cast → not.toThrow + нейтральный fallback)
  • tsc --noEmit, next lint, prettier — чисто
  • code-reviewer: APPROVE (fallback покрывает ВСЕ access-сайты; нет stray artifacts)

Follow-up (вынесу отдельным issue)

Тот же класс бага в 4 sibling-местах: BestLayoutsBlock.tsx:66, ForecastChart.tsx:178, CompareTable.tsx:175, PticaCompare.tsx:151.

Refs #2445

## Summary Аудит-находки B2+B3 (epic #2445). `GateVerdictBanner` и `VelocityBlock` искали backend-enum строки (`verdict_label`, `confidence`) в object-literal картах без runtime-guard. Неожиданное значение (schema drift / partial deploy, когда backend отгрузил новое enum-значение раньше фронта) → lookup `undefined` → краш компонента на следующем `.bg`/`.fg`/`.Icon` доступе. ## Fix Добавлен `?? NEUTRAL_*` fallback (серый + `HelpCircle` / «—»), паттерн уже применяется в `ParcelDrawer.tsx` (`STATUS_COLORS[...] ?? '#73767E'`). Fallback нейтральный — не green «GO», не «high». Raw-строчная интерполяция enum не тронута (не может кинуть). ## Test plan - [x] 119 vitest тестов зелёные (2 новых файла: out-of-union значение через `unknown`-cast → not.toThrow + нейтральный fallback) - [x] tsc --noEmit, next lint, prettier — чисто - [x] code-reviewer: ✅ APPROVE (fallback покрывает ВСЕ access-сайты; нет stray artifacts) ## Follow-up (вынесу отдельным issue) Тот же класс бага в 4 sibling-местах: `BestLayoutsBlock.tsx:66`, `ForecastChart.tsx:178`, `CompareTable.tsx:175`, `PticaCompare.tsx:151`. Refs #2445
bot-backend added 1 commit 2026-07-05 19:03:33 +00:00
fix(frontend): нейтральный fallback для нераспознанных gate/velocity enum-значений (#2445-B2/B3)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 9s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Successful in 1m3s
CI / openapi-codegen-check (pull_request) Successful in 2m31s
9f00fe8819
GateVerdictBanner и VelocityBlock искали backend-enum строки (verdict_label,
confidence) в object-literal картах без runtime-guard. Неожиданное значение
(schema drift / partial deploy) → lookup undefined → краш компонента на
следующем .bg/.fg/.Icon доступе. Добавлен ?? нейтральный fallback (серый +
HelpCircle / «—»), паттерн ParcelDrawer STATUS_COLORS ?? '#73767E'.

Refs #2445
bot-backend merged commit de5da6ec35 into main 2026-07-05 19:20:29 +00:00
bot-backend deleted branch fix/frontend-enum-lookup-fallbacks 2026-07-05 19:20:29 +00:00
Sign in to join this conversation.
No reviewers
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#2451
No description provided.