fix(frontend): нейтральный fallback ещё в 4 enum-lookup-местах (#2452) #3153

Merged
bot-backend merged 1 commit from fix/2452-neutral-enum-fallback into main 2026-08-27 16:39:09 +00:00
Collaborator

Summary

Тот же ?? нейтральный паттерн, что в #2451, в четырёх местах из постановки. Промах union'а ломается по-разному, и это отражено в комментариях:

место что происходило без guard'а
BestLayoutsBlock (DataQualityCard) .fg/.bg у undefinedкраш рендера всей карточки
ForecastChart.confidenceByHorizon подпись уверенности пропадает молча, хотя прогноз для горизонта есть
compare/CompareTable «73% · » и обрыв — число выглядит недосказанным
ptica/compare/PticaCompare то же

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

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

Test plan

  • 12 новых тестов в 4 файлах (not.toThrow + проверка самого «—» + проверка, что fallback не семантический)
  • проверены на слом: снял все четыре fallback'а → упало ровно 5 проверок out-of-union; 7 остальных (известные значения, отсутствующие данные) остались зелёными
  • vitest run src/components/site-finder — 145 passed
  • tsc --noEmit — чисто
  • prettier прогнан; посторонние переформатирования (другая версия prettier) откатил, диff только по существу

Closes #2452
Refs #2445, #2451

## Summary Тот же `?? нейтральный` паттерн, что в #2451, в четырёх местах из постановки. Промах union'а ломается по-разному, и это отражено в комментариях: | место | что происходило без guard'а | |---|---| | `BestLayoutsBlock` (`DataQualityCard`) | `.fg`/`.bg` у `undefined` — **краш рендера** всей карточки | | `ForecastChart.confidenceByHorizon` | подпись уверенности **пропадает молча**, хотя прогноз для горизонта есть | | `compare/CompareTable` | «73% · » и обрыв — число выглядит недосказанным | | `ptica/compare/PticaCompare` | то же | Fallback серый + «—», намеренно не семантический. Фон бейджа — существующий `--border-soft`: список токенов закрыт (`ui-tokens.md` — «НЕ выдумывать новые»), нейтральной заливки в нём нет. `DataQualityCard`, `confidenceByHorizon`, `METRIC_ROWS` (ptica) экспортированы ради тестов — тем же приёмом, что уже применён к `isDeficitDegenerate`. ## Test plan - [x] 12 новых тестов в 4 файлах (`not.toThrow` + проверка самого «—» + проверка, что fallback не семантический) - [x] **проверены на слом**: снял все четыре fallback'а → упало ровно 5 проверок out-of-union; 7 остальных (известные значения, отсутствующие данные) остались зелёными - [x] `vitest run src/components/site-finder` — 145 passed - [x] `tsc --noEmit` — чисто - [x] prettier прогнан; посторонние переформатирования (другая версия prettier) откатил, диff только по существу Closes #2452 Refs #2445, #2451
bot-backend added 1 commit 2026-08-27 16:36:26 +00:00
fix(frontend): нейтральный fallback ещё в 4 enum-lookup-местах
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
abe76ca980
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
bot-backend merged commit 737918985b into main 2026-08-27 16:39:09 +00:00
bot-backend deleted branch fix/2452-neutral-enum-fallback 2026-08-27 16:39:10 +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#3153
No description provided.