витрина: разброс показанных строк рядом с медианой всей сверки #3269

Merged
bot-backend merged 2 commits from feat/showcase-spread-footnote into main 2026-08-30 09:19:33 +00:00
Collaborator

Что не так было

Посетитель видит 20 строк сверки «прогноз против ДКП» и не может понять, где они лежат относительно выборки. Первой в таблице стоит сделка с расхождением +75,7 % — она попала туда законно (отбор по полноте и свежести), но читается как «вот их точность».

Переупорядочить нельзя: отбор по величине ошибки — это ровно тот дефект, который уже был убран из landing_showcase_deals.py. Возвращать его в другом виде нельзя.

Что сделано

Не переупорядочиваем, а даём контекст. Под таблицей появляется строка:

Разброс показанных строк: медианное расхождение 11,5 %, в пределах 20 % — 12 из 20, худшая 75,7 %. Медиана по всей сверке — 14,5 % (327 сделок). Строки отобраны по полноте и свежести, не по величине ошибки.

Замер на проде 30.08.2026: показанные 11,5 % против 14,5 % по всей выборке — то есть двадцатка на экране немного удачнее случайной, и теперь это видно, а не скрыто.

Решения

  • Считается на фронте из тех же объектов, которые рисует таблица. Отдельного поля в API нет намеренно: второе место подсчёта рано или поздно отстанет от строк на экране.
  • Своей формулировки «чуть точнее» в подписи нет. Она протухнет на первом же пересчёте витрины. Два числа рядом не протухают — вывод делает читатель.
  • Порог вынесен в WITHIN_PCT рядом с фильтром. Гейт витринных чисел справедливо покраснел на вписанных руками «20 %» при <= 20 в коде — это две независимые величины, которые разъедутся при первой правке.

Проверки

shown-spread.test.ts — 6 проверок по ЗНАЧЕНИЮ: модуль вместо знака, медиана вместо среднего, включающая граница порога, числовая сортировка вместо лексикографической.

Мутационный прогон: снятие Math.abs в исходнике даёт expected 0.5 to be 21.5 — красное по значению, не ImportError.

Вся папка: 123 passed (10 файлов). tsc --noEmit и eslint --max-warnings 0 чисто.

Отдельно, вне этого PR

Витрина на проде до сих пор показывала реконструированные цены (2 900 008, 10 600 012 — только 2 из 20 круглых): правка fact_rub = deals.price_rub была смержена, но таблицу не пересчитывали. Пересчёт запущен, теперь 17 из 20 круглых, а все три некруглые (6 064 696, 5 934 451, 7 182 187) существуют в deals.price_rub дословно — это настоящие суммы договоров.

## Что не так было Посетитель видит 20 строк сверки «прогноз против ДКП» и не может понять, где они лежат относительно выборки. Первой в таблице стоит сделка с расхождением **+75,7 %** — она попала туда законно (отбор по полноте и свежести), но читается как «вот их точность». Переупорядочить нельзя: отбор по величине ошибки — это ровно тот дефект, который уже был убран из `landing_showcase_deals.py`. Возвращать его в другом виде нельзя. ## Что сделано Не переупорядочиваем, а даём контекст. Под таблицей появляется строка: > Разброс показанных строк: медианное расхождение 11,5 %, в пределах 20 % — 12 из 20, худшая 75,7 %. Медиана по всей сверке — 14,5 % (327 сделок). Строки отобраны по полноте и свежести, не по величине ошибки. **Замер на проде 30.08.2026:** показанные 11,5 % против 14,5 % по всей выборке — то есть двадцатка на экране немного удачнее случайной, и теперь это видно, а не скрыто. ## Решения - **Считается на фронте из тех же объектов, которые рисует таблица.** Отдельного поля в API нет намеренно: второе место подсчёта рано или поздно отстанет от строк на экране. - **Своей формулировки «чуть точнее» в подписи нет.** Она протухнет на первом же пересчёте витрины. Два числа рядом не протухают — вывод делает читатель. - **Порог вынесен в `WITHIN_PCT` рядом с фильтром.** Гейт витринных чисел справедливо покраснел на вписанных руками «20 %» при `<= 20` в коде — это две независимые величины, которые разъедутся при первой правке. ## Проверки `shown-spread.test.ts` — 6 проверок по ЗНАЧЕНИЮ: модуль вместо знака, медиана вместо среднего, включающая граница порога, числовая сортировка вместо лексикографической. **Мутационный прогон:** снятие `Math.abs` в исходнике даёт `expected 0.5 to be 21.5` — красное по значению, не ImportError. Вся папка: 123 passed (10 файлов). `tsc --noEmit` и `eslint --max-warnings 0` чисто. ## Отдельно, вне этого PR Витрина на проде до сих пор показывала **реконструированные** цены (`2 900 008`, `10 600 012` — только 2 из 20 круглых): правка `fact_rub = deals.price_rub` была смержена, но таблицу не пересчитывали. Пересчёт запущен, теперь 17 из 20 круглых, а все три некруглые (`6 064 696`, `5 934 451`, `7 182 187`) существуют в `deals.price_rub` дословно — это настоящие суммы договоров.
bot-backend added 1 commit 2026-08-30 08:54:57 +00:00
витрина: печатать разброс показанных строк рядом с медианой всей сверки
All checks were successful
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 11s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI Trade-In / changes (pull_request) Successful in 9s
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 1m18s
5f7ac0d50f
Посетитель видел 20 строк сверки и не мог понять, где они лежат
относительно выборки: первой в таблице стоит сделка с расхождением
+75,7 %, а медиана по всем 327 — 14,5 %. Порядок строк при этом верный
и менять его нельзя — отбор идёт по полноте и свежести, а не по
величине ошибки (отбор по ошибке был дефектом и уже убран).

Поэтому не переупорядочиваем, а добавляем контекст: медиана модуля
расхождения показанных строк, сколько из них в пределах порога и
худшая — рядом с медианой всей сверки. Замер на проде 30.08.2026:
показанные 11,5 % против 14,5 % по всей выборке, 12 из 20 в пределах
20 %, худшая 75,7 %.

Считается на фронте из тех же объектов, которые рисует таблица, —
второе место подсчёта рано или поздно отстало бы от строк на экране.
Своей формулировки «чуть точнее» в подписи нет: она протухнет на
первом же пересчёте витрины, а два числа рядом не протухают.

Порог вынесен в WITHIN_PCT рядом с фильтром: гейт витринных чисел
справедливо покраснел на вписанных руками «20 %» при <= 20 в коде.
bot-backend added 1 commit 2026-08-30 09:17:51 +00:00
Merge branch 'main' into feat/showcase-spread-footnote
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 11s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 58s
b77b17f75a
bot-backend merged commit 56e4de0b35 into main 2026-08-30 09:19:33 +00:00
bot-backend deleted branch feat/showcase-spread-footnote 2026-08-30 09:19:33 +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#3269
No description provided.