fix(tradein/ui): единый source-registry + честные знаменатели/лейблы источников (#2211) #2227

Merged
lekss361 merged 1 commit from fix/tradein-ui-source-honesty into main 2026-07-02 20:57:27 +00:00
Owner

Summary

  • Новый src/lib/source-registry.ts — один источник правды для ростера/лейблов/точек источников (SOURCES as const satisfies — type-level инвариант против фейк-источников). Канон сверен с backend estimator._canonical_sources (avito/cian/yandex/domklik + rosreestr + avito_imv/yandex_valuation/cian_valuation); n1 live:false (мёртв, деактивирован #2204) — убран из живого ростера.
  • HeroSummary: убран сфабрикованный знаменатель «/7» («агрегация N источников» со склонением); пустой sources_used → честное «источники не зафиксированы» вместо 4 фейк-чипов; убрана выдуманная «классическая» планировка; псевдо-CV → честная метрика (реальный estimate.cv = σ/mean, иначе лейбл «разброс» без аббревиатуры CV).
  • ListingsCard: знаменатель убран совсем (sources_used включает и оценочные источники — фиксированный знаменатель либо врёт, либо меньше числителя; по итогу ревью); fix невидимой rosreestr-точки (dot "ros""rosreestr" — класса .src-dot.ros в CSS не существует).
  • SourcesProgress: ростер из registry, мёртвый N1 убран; DealsCard — лейблы/точки из registry.
  • EstimateForm: убран всегда-зелёный фейковый «● готов» cache-индикатор (реального статуса в пропсах нет).
  • page.tsx: восстановленные отчёты показывают created_at оценки, не new Date(); подзаголовок — живые источники из registry.
  • types: +cv/source_counts/created_at (поля уже были в backend-схеме, сверено с app/schemas/trade_in.py).

Как проверено

  • type-check / lint / build — exit 0 (13 роутов).
  • code-reviewer: ⚠️ MINOR → исправлено в этом же PR (знаменатель ListingsCard убран, unused import вычищен), остальное (канон/типы/CSS/optional-chaining сверены с backend).
  • Известный follow-up (вне scope): /v2/** и saleShareUtils.ts — свои хардкоды источников, отдельные поверхности (#2081/#2087).

Refs #2211

## Summary - Новый `src/lib/source-registry.ts` — один источник правды для ростера/лейблов/точек источников (`SOURCES as const satisfies` — type-level инвариант против фейк-источников). Канон сверен с backend `estimator._canonical_sources` (avito/cian/yandex/domklik + rosreestr + avito_imv/yandex_valuation/cian_valuation); **n1 live:false** (мёртв, деактивирован #2204) — убран из живого ростера. - HeroSummary: убран сфабрикованный знаменатель «/7» («агрегация N источников» со склонением); пустой `sources_used` → честное «источники не зафиксированы» вместо 4 фейк-чипов; убрана выдуманная «классическая» планировка; псевдо-CV → честная метрика (реальный `estimate.cv` = σ/mean, иначе лейбл «разброс» без аббревиатуры CV). - ListingsCard: знаменатель убран совсем (sources_used включает и оценочные источники — фиксированный знаменатель либо врёт, либо меньше числителя; по итогу ревью); fix невидимой rosreestr-точки (`dot "ros"` → `"rosreestr"` — класса `.src-dot.ros` в CSS не существует). - SourcesProgress: ростер из registry, мёртвый N1 убран; DealsCard — лейблы/точки из registry. - EstimateForm: убран всегда-зелёный фейковый «● готов» cache-индикатор (реального статуса в пропсах нет). - page.tsx: восстановленные отчёты показывают `created_at` оценки, не `new Date()`; подзаголовок — живые источники из registry. - types: +`cv`/`source_counts`/`created_at` (поля уже были в backend-схеме, сверено с `app/schemas/trade_in.py`). ## Как проверено - type-check / lint / build — exit 0 (13 роутов). - code-reviewer: ⚠️ MINOR → исправлено в этом же PR (знаменатель ListingsCard убран, unused import вычищен), остальное ✅ (канон/типы/CSS/optional-chaining сверены с backend). - Известный follow-up (вне scope): `/v2/**` и `saleShareUtils.ts` — свои хардкоды источников, отдельные поверхности (#2081/#2087). Refs #2211
lekss361 added 1 commit 2026-07-02 20:51:03 +00:00
fix(tradein/ui): единый source-registry + честные знаменатели/лейблы источников (#2211)
All checks were successful
CI / changes (pull_request) Successful in 8s
CI / frontend-tests (pull_request) Has been skipped
CI Trade-In / changes (pull_request) Successful in 8s
CI / backend-tests (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 1m10s
b815b23655
- новый src/lib/source-registry.ts — один источник правды (SOURCES as const,
  канон сверен с estimator._canonical_sources); n1 live:false, убран из ростера
- HeroSummary: убран сфабрикованный «/7»; пустой sources_used → «источники не
  зафиксированы» вместо фейк-чипов; убрана выдуманная «классическая»; CV →
  честная метрика (реальный estimate.cv или лейбл «разброс»)
- ListingsCard: знаменатель убран совсем (sources_used включает оценочные
  источники — фиксированный знаменатель либо врёт, либо меньше числителя);
  fix невидимой rosreestr-точки (dot "ros"→"rosreestr", класса .ros нет в CSS)
- SourcesProgress: ростер из registry, мёртвый N1 убран
- EstimateForm: убран всегда-зелёный фейковый «● готов» cache-индикатор
- page.tsx: восстановленный отчёт показывает created_at, не new Date()
- types: +cv/source_counts/created_at (уже были в backend-схеме)
- инвариант: type-level (as const satisfies) + контракт-комментарий против
  хардкод-массивов источников

Refs #2211
lekss361 merged commit 19ecd941f3 into main 2026-07-02 20:57:27 +00:00
lekss361 deleted branch fix/tradein-ui-source-honesty 2026-07-02 20:57:27 +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#2227
No description provided.