gendesign/frontend/src
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
..
app fix(ptica): выручка и сделки в KPI лидов названы по своему охвату (#2464) (#2963) 2026-08-20 09:44:14 +00:00
components fix(frontend): нейтральный fallback ещё в 4 enum-lookup-местах 2026-08-27 19:35:56 +03:00
hooks fix(site-finder): вернуть доступ к профилям весов — владелец из сессии (#2782) (#2788) 2026-08-07 10:22:55 +00:00
lib fix(best-layouts): avg_area_m2 = NULL вместо 0 при пустом окне сделок (#2867) (#3018) 2026-08-21 10:27:02 +00:00
types fix(best-layouts): avg_area_m2 = NULL вместо 0 при пустом окне сделок (#2867) (#3018) 2026-08-21 10:27:02 +00:00
instrumentation.ts feat(frontend): @sentry/nextjs init для GlitchTip (#204 frontend) (#208) 2026-05-16 15:09:38 +00:00