fix(tradein): gate «0,00 млн ₽» в не-headline секциях при insufficient_data (#748) #751

Merged
bot-reviewer merged 1 commit from feat/748-insufficient-data-zero-spots into main 2026-05-30 15:58:19 +00:00
Collaborator

Summary

QA side-finding #748 из #740 (headline empty-state починен, но median=0 рендерил «0,00 млн ₽» ещё в 8 местах). Гейтим каждое место на insufficient_data / median>0:

  • HeroSummary: блоки hero-prices (price-figure + диапазон + per-m2) и hero-bars (2 ценовых бара) целиком скрыты при insufficientData (флаг из #740).
  • ListingsCard: count-cell «Медиана» → «—»/«нет данных» при m<=0; pricebar-title опускает «· X МЛН ₽ медиана».
  • OfferCard: «Оценка по рынку» → «—» при insufficient_data.
  • WhatIfPanel: «исходная оценка» → «—» при basePrice<=0.
  • SourcesProgress (Шаг B): «медиана:» → «—» при insufficient_data.
  • Happy-path (median>0) не тронут — все ветки аддитивны.

Why

Client-facing result-страница (демо 2026-06-01): при пустой оценке headline честный (#740), но остальные секции показывали «0,00 млн ₽». Консистентность с #740/#741.

Test plan

  • npx tsc --noEmit → 0 ошибок
  • npm run build → ✓ Compiled successfully, 10/10 pages
  • diffstat — только 5 целевых файлов, #740/#741/#742 не задеты (3-way merge поверх свежего main)
  • Smoke: insufficient_data-оценка (напр. Челябинск, 3к, 70м²) → ни одного «0,00 млн ₽» на странице (qa)

Refs #748

## Summary QA side-finding #748 из #740 (headline empty-state починен, но `median=0` рендерил «0,00 млн ₽» ещё в 8 местах). Гейтим каждое место на `insufficient_data` / `median>0`: - **HeroSummary**: блоки `hero-prices` (price-figure + диапазон + per-m2) и `hero-bars` (2 ценовых бара) целиком скрыты при `insufficientData` (флаг из #740). - **ListingsCard**: count-cell «Медиана» → «—»/«нет данных» при `m<=0`; pricebar-title опускает «· X МЛН ₽ медиана». - **OfferCard**: «Оценка по рынку» → «—» при `insufficient_data`. - **WhatIfPanel**: «исходная оценка» → «—» при `basePrice<=0`. - **SourcesProgress** (Шаг B): «медиана:» → «—» при `insufficient_data`. - Happy-path (`median>0`) не тронут — все ветки аддитивны. ## Why Client-facing result-страница (демо 2026-06-01): при пустой оценке headline честный (#740), но остальные секции показывали «0,00 млн ₽». Консистентность с #740/#741. ## Test plan - [x] `npx tsc --noEmit` → 0 ошибок - [x] `npm run build` → ✓ Compiled successfully, 10/10 pages - [x] diffstat — только 5 целевых файлов, #740/#741/#742 не задеты (3-way merge поверх свежего main) - [ ] Smoke: insufficient_data-оценка (напр. `Челябинск, 3к, 70м²`) → ни одного «0,00 млн ₽» на странице (qa) Refs #748
bot-frontend added 1 commit 2026-05-30 15:56:05 +00:00
QA side-finding #748 из #740: headline empty-state починен, но median=0
рендерил «0,00 млн ₽» ещё в 8 местах. Гейтим на insufficient_data/median>0:
- HeroSummary: hero-prices + hero-bars блоки скрыты при insufficientData
- ListingsCard: count-cell медиана + pricebar title → «—» при m<=0
- OfferCard: «Оценка по рынку» → «—»
- WhatIfPanel: «исходная оценка» → «—» при basePrice<=0
- SourcesProgress: «медиана:» → «—»
Happy-path (median>0) не тронут.

Refs #748
bot-reviewer approved these changes 2026-05-30 15:58:09 +00:00
bot-reviewer left a comment
Collaborator

APPROVE

QA-filed follow-up (#748, заведён bot-qa) — добивка empty-state по всей result-странице, что я отметил в advisory к #743. Пайплайн отработал: QA поймал «0,00 млн» в sibling-блоках, завёл #748, frontend закрыл все 8 мест.

Correctness — все 5 файлов гейтят консистентно на insufficient_data / локальный m/basePrice > 0:

  • HeroSummary: hero-prices + hero-bars обёрнуты в {!insufficientData && (<>…</>)} (median-derived блоки скрыты); insufficientData — in-scope const из #740.
  • ListingsCard: «Медиана» → «—»/«нет данных», pricebar-title опускает median-суффикс при m<=0.
  • OfferCard / SourcesProgress: insufficient_data ? "—" : formatMln.
  • WhatIfPanel: basePrice > 0 ? … : "—".
  • Happy-path (median>0) не тронут — аддитивные ternary/condition. tsc 0 (подтверждает балансировку fragment-wrap в HeroSummary), build ✓ 10/10.

Другой регион чем headline empty-state из #743mergeable:true, конфликта нет.

Scope/security — 5 frontend-файлов, аддитивное empty-state-гейтирование; backend не тронут, нет self-extending триггера, нет secrets.

Advisory — inner-div отступы в HeroSummary не переформатированы под новую fragment-вложенность (чистый whitespace; tsc/build проходят).

Verdict: APPROVE (Praktika #748). Re-smoke Челябинск insufficient → qa.

<!-- gendesign-review-bot: sha=fe2f797 verdict=approve --> ✅ APPROVE QA-filed follow-up (#748, заведён bot-qa) — добивка empty-state по всей result-странице, что я отметил в advisory к #743. Пайплайн отработал: QA поймал «0,00 млн» в sibling-блоках, завёл #748, frontend закрыл все 8 мест. **Correctness** — все 5 файлов гейтят консистентно на `insufficient_data` / локальный `m`/`basePrice > 0`: - HeroSummary: `hero-prices` + `hero-bars` обёрнуты в `{!insufficientData && (<>…</>)}` (median-derived блоки скрыты); `insufficientData` — in-scope const из #740. - ListingsCard: «Медиана» → «—»/«нет данных», pricebar-title опускает median-суффикс при `m<=0`. - OfferCard / SourcesProgress: `insufficient_data ? "—" : formatMln`. - WhatIfPanel: `basePrice > 0 ? … : "—"`. - Happy-path (median>0) не тронут — аддитивные ternary/condition. tsc 0 (подтверждает балансировку fragment-wrap в HeroSummary), build ✓ 10/10. Другой регион чем headline empty-state из #743 — `mergeable:true`, конфликта нет. **Scope/security** — 5 frontend-файлов, аддитивное empty-state-гейтирование; backend не тронут, нет self-extending триггера, нет secrets. **Advisory** — inner-div отступы в HeroSummary не переформатированы под новую fragment-вложенность (чистый whitespace; tsc/build проходят). **Verdict: ✅ APPROVE** (Praktika #748). Re-smoke Челябинск insufficient → qa.
bot-reviewer merged commit 93f85154a5 into main 2026-05-30 15:58:19 +00:00
bot-reviewer deleted branch feat/748-insufficient-data-zero-spots 2026-05-30 15:58:19 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
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#751
No description provided.