[P1] Честность UI-источников: убрать «/7», фолбэк-чипы, «классическую», зелёный cache-дот, «CV» #2211

Closed
opened 2026-07-02 19:18:28 +00:00 by lekss361 · 2 comments
Owner

Эпик: #2200

Находка (Frontend, verified high + medium): долг честности класса #1968 отрос заново:

  • 3 противоречащих знаменателя на одном экране: page.tsx:185 «4 источника», SourcesProgress:81-95 «X/5», HeroSummary:219 + ListingsCard:126 «X/7» — «/7» сфабрикован (backend даёт ≤8, прод 5 источников).
  • Пустой sources_used фолбэчит на 4 хардкод-чипа ["avito","cian","yandex","rosreestr"] как будто участвовали (HeroSummary:620-623).
  • «Планировка: классическая» выдумана (HeroSummary:287-289, поля нет).
  • Всегда-зелёный cache-дот «● готов» (EstimateForm:516), прогресс-театр, мёртвый error-state.
  • «CV» = (range_high−range_low)/median под именем «Коэффициент вариации» (HeroSummary:65-70).
  • domklik участвует, но не показан; n1 рекламируется как живой.

Acceptance:

  • Единый source-registry (один источник правды для ростера/лейблов/знаменателя); убрать «/7» и хардкоды.
  • Пустой sources_used → честное «нет вклада», не фолбэк-чипы.
  • Убрать выдуманную «классическую», починить/убрать «CV», убрать фейк cache-дот и мёртвый error-state.
  • Восстановленные отчёты: показывать created_at, не new Date().

Scope: tradein-mvp/frontend/src/components/trade-in/. Тема эпика: долг честности без инвариантов.

Эпик: #2200 **Находка (Frontend, verified high + medium):** долг честности класса #1968 отрос заново: - 3 противоречащих знаменателя на одном экране: `page.tsx:185` «4 источника», `SourcesProgress:81-95` «X/5», `HeroSummary:219` + `ListingsCard:126` «X/7» — «/7» сфабрикован (backend даёт ≤8, прод 5 источников). - Пустой `sources_used` фолбэчит на 4 хардкод-чипа `["avito","cian","yandex","rosreestr"]` как будто участвовали (`HeroSummary:620-623`). - «Планировка: классическая» выдумана (`HeroSummary:287-289`, поля нет). - Всегда-зелёный cache-дот «● готов» (`EstimateForm:516`), прогресс-театр, мёртвый error-state. - «CV» = (range_high−range_low)/median под именем «Коэффициент вариации» (`HeroSummary:65-70`). - domklik участвует, но не показан; n1 рекламируется как живой. **Acceptance:** - [ ] Единый source-registry (один источник правды для ростера/лейблов/знаменателя); убрать «/7» и хардкоды. - [ ] Пустой `sources_used` → честное «нет вклада», не фолбэк-чипы. - [ ] Убрать выдуманную «классическую», починить/убрать «CV», убрать фейк cache-дот и мёртвый error-state. - [ ] Восстановленные отчёты: показывать `created_at`, не `new Date()`. Scope: `tradein-mvp/frontend/src/components/trade-in/`. Тема эпика: долг честности без инвариантов.
lekss361 added the
priority/p1
scope/frontend
tradein
ux
labels 2026-07-02 19:20:22 +00:00
Author
Owner

Working on this (night shift), ветка fix/tradein-ui-source-honesty. Все находки перепроверены на текущем main — живы (HeroSummary:242 «/7», :719 фолбэк-чипы, :319 «классическая», :246 псевдо-CV, EstimateForm:525 вечнозелёный дот, page.tsx:201 new Date()). Канон ростера сверен с backend (estimator.py sources_used: листинговые + rosreestr + avito_imv/yandex_valuation/cian_valuation; n1 мёртв и деактивирован в #2204). Делаю единый src/lib/source-registry.ts + производные знаменатели + инвариант против отрастания фолбэк-чипов.

Working on this (night shift), ветка `fix/tradein-ui-source-honesty`. Все находки перепроверены на текущем main — живы (HeroSummary:242 «/7», :719 фолбэк-чипы, :319 «классическая», :246 псевдо-CV, EstimateForm:525 вечнозелёный дот, page.tsx:201 new Date()). Канон ростера сверен с backend (estimator.py sources_used: листинговые + rosreestr + avito_imv/yandex_valuation/cian_valuation; n1 мёртв и деактивирован в #2204). Делаю единый src/lib/source-registry.ts + производные знаменатели + инвариант против отрастания фолбэк-чипов.
Author
Owner

Сделано в PR #2227 (смержен, deploy success, frontend пересобран).

Acceptance:

  • Единый source-registry (src/lib/source-registry.ts, канон сверен с backend estimator._canonical_sources; n1 live:false); все знаменатели/чипы/лейблы — производные от registry или фактического sources_used; «/7» и хардкоды убраны (в HeroSummary и ListingsCard знаменатель убран совсем — честнее любого фиксированного числа).
  • Пустой sources_used → «источники не зафиксированы» (фейк-чипы удалены физически).
  • «Классическая» убрана; псевдо-CV → реальный estimate.cv (σ/mean) или честный лейбл «разброс»; вечнозелёный «● готов» убран.
  • Восстановленные отчёты показывают created_at, не new Date().
  • Инвариант: type-level (SOURCES as const satisfies) + контракт-комментарий; бонус — починена невидимая rosreestr-точка (класса .src-dot.ros не существовало).

Follow-up (вне scope, зафиксировано в PR): /v2/** и saleShareUtils.ts несут свои хардкоды источников — отдельные поверхности (#2081/#2087).

Сделано в PR #2227 (смержен, deploy success, frontend пересобран). Acceptance: - ✅ Единый source-registry (`src/lib/source-registry.ts`, канон сверен с backend estimator._canonical_sources; n1 live:false); все знаменатели/чипы/лейблы — производные от registry или фактического sources_used; «/7» и хардкоды убраны (в HeroSummary и ListingsCard знаменатель убран совсем — честнее любого фиксированного числа). - ✅ Пустой sources_used → «источники не зафиксированы» (фейк-чипы удалены физически). - ✅ «Классическая» убрана; псевдо-CV → реальный estimate.cv (σ/mean) или честный лейбл «разброс»; вечнозелёный «● готов» убран. - ✅ Восстановленные отчёты показывают created_at, не new Date(). - ✅ Инвариант: type-level (SOURCES as const satisfies) + контракт-комментарий; бонус — починена невидимая rosreestr-точка (класса .src-dot.ros не существовало). Follow-up (вне scope, зафиксировано в PR): /v2/** и saleShareUtils.ts несут свои хардкоды источников — отдельные поверхности (#2081/#2087).
Sign in to join this conversation.
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#2211
No description provided.