gendesign/frontend/src/components
bot-backend abe76ca980
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 10s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-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 1m4s
CI / openapi-codegen-check (pull_request) Successful in 2m7s
fix(frontend): нейтральный fallback ещё в 4 enum-lookup-местах
Follow-up #2451 (эпик #2445, B2/B3): тот же класс — object-literal lookup по
значению, пришедшему из API, без runtime-guard. Значение вне закрытого union'а
(schema drift / частичный деплой) даёт `undefined`, и дальше по-разному плохо:

- `BestLayoutsBlock` (DataQualityCard) — обращение `.fg`/`.bg` к undefined
  РОНЯЕТ рендер всей карточки качества данных;
- `ForecastChart.confidenceByHorizon` — подпись уверенности для горизонта
  пропадает МОЛЧА, при том что прогноз для него есть;
- `compare/CompareTable` и `ptica/compare/PticaCompare` — рядом с процентом
  остаётся «73% · » и обрыв: число выглядит недосказанным, а не неизвестным.

Везде нейтральный fallback по образцу VelocityBlock/ParcelDrawer: серый + «—»,
намеренно НЕ семантический цвет — неизвестное качество не должно читаться ни
как хорошее, ни как плохое.

Фон бейджа взят из существующего `--border-soft`: список токенов закрыт
(ui-tokens.md — «НЕ выдумывать новые»), нейтральной заливки в нём нет.

`DataQualityCard`, `confidenceByHorizon` и `METRIC_ROWS` (ptica) экспортированы
ради тестов — тем же приёмом, что уже применён к `isDeficitDegenerate`.

Тесты: 12 новых в 4 файлах. Проверены на слом — снял все четыре fallback'а,
упало ровно 5 проверок out-of-union, остальные 7 (известные значения,
отсутствующие данные) остались зелёными.

`vitest run src/components/site-finder` — 145 passed, `tsc --noEmit` чисто.

Closes #2452
Refs #2445, #2451
2026-08-27 19:35:56 +03:00
..
admin fix(week-review): автофиксы код-ревью — 169 issue (label «week ревью 1») 2026-06-15 20:21:11 +05:00
analytics fix(analytics): align portfolio series to area buckets in quartirography (#1406) 2026-06-17 20:25:17 +03:00
auth fix(tradein/auth): always-available logout button on NoAccessScreen 2026-06-27 15:16:42 +03:00
concept fix(ptica): скраб ПДн перестаёт утекать то, что защищает + проводка проверяется поведением (#2753) (#2787) 2026-08-07 10:11:36 +00:00
landing fix(landing): Trade-In nav как внешний <a> на /trade-in/v2 (ChunkLoadError) (#2365) 2026-07-04 01:10:57 +00:00
site-finder fix(frontend): нейтральный fallback ещё в 4 enum-lookup-местах 2026-08-27 19:35:56 +03:00
trade-in refactor(tradein/v2): перенос HUD v2 в tradein-mvp frontend 2026-06-28 13:10:23 +03:00
ui fix(week-review): автофиксы код-ревью — 169 issue (label «week ревью 1») 2026-06-15 20:21:11 +05:00