тикер: разброс показанных строк под лентой — она больше не опровергает заголовок #3278

Merged
bot-backend merged 2 commits from fix/mera-ticker-context into main 2026-08-30 10:22:52 +00:00
Collaborator

Из отчёта тестировщика 30.08.2026, пункт 2.

Дефект

Над лентой написано «медианное расхождение с ценой ДКП — 14,5 % по 327 сделкам», а в самой ленте пять записей из двадцати расходятся больше чем на 30 %. Первое, что видит посетитель на странице про точность, — крупный промах без всякого пояснения.

Уточнение к отчёту. Названный там максимум +146,7 % (прогноз 11 594 798 против ДКП 4 699 984) на проде уже отсутствует: витрину пересчитали утром, и цены ДКП стали настоящими суммами договоров вместо реконструированных (площадь × цена_м²) — именно из реконструкции тот выброс и рождался. Сейчас максимум 75,7 %. Но счёт остался прежним: строк выше 30 % ровно пять (75,7 · 63,6 · 47,4 · 41,4 · 38,5), то есть структурно замечание в силе.

Чего сделано НЕ было

Строки не переупорядочены и не отфильтрованы. Отбор идёт по полноте и свежести (_sort_key в landing_showcase_deals.py), а отбор по величине ошибки был дефектом и уже убран — возвращать его под видом «улучшения ленты» нельзя. Промахи остаются видны.

Правка

Под лентой появляется подпись: медиана расхождения показанных строк и худшая из них. Оба числа — из уже существующей shownSpread(deals), второго расчёта не заведено: любое второе место подсчёта рано или поздно отстанет от строк на экране.

Формулировки вроде «зато обычно точно» нет намеренно — она протухнет на первом же пересчёте витрины, а два числа рядом не протухают.

Разметка: бегущая часть выделена в .tickerStrip, иначе абсолютный .tickerBadge растянулся бы на подпись.

Подпись намеренно не aria-hidden (в отличие от самой бегущей строки): прятать от скринридера числа контекста хуже, чем продублировать их.

Проверки

Тест: те же строки с худшей записью и без неё дают разные числа в подписи — то есть она сосчитана по показанному, а не вписана константой.

Мутация ревьюером: «вписать числа руками» роняет кейс по значению (ожидалось 7,8 %, получено 11,5 %), и независимо краснеет landing-numbers-gate.

vitest 10 файлов / 125 passed · tsc rc=0 · eslint --max-warnings 0 rc=0.

Оговорки

  • Спред считается по deals, а не по удвоенному items карусели — отмечено комментарием в коде.
  • Страницу в браузере не открывали: подпись — обычный p без nowrap, риск только в возросшей высоте тёмной полосы над первым экраном.
  • Тест не отличит перестановку медианы и худшей местами (обе проверки через toContain, без порядка) — замечание ревьюера.
  • prettier прогнан и откачен: он переформатировал чужие куски landing-v3.module.css. У tradein-frontend конвенции prettier нет, соответствующий pre-commit шаг на этих файлах пропускается.

⚠️ Конфликтует с #3277 по landing-v3.module.css — мержить вторым, после него.

Из отчёта тестировщика 30.08.2026, пункт 2. ## Дефект Над лентой написано «медианное расхождение с ценой ДКП — 14,5 % по 327 сделкам», а в самой ленте пять записей из двадцати расходятся больше чем на 30 %. Первое, что видит посетитель на странице про точность, — крупный промах без всякого пояснения. **Уточнение к отчёту.** Названный там максимум `+146,7 %` (прогноз 11 594 798 против ДКП 4 699 984) на проде уже отсутствует: витрину пересчитали утром, и цены ДКП стали настоящими суммами договоров вместо реконструированных (`площадь × цена_м²`) — именно из реконструкции тот выброс и рождался. Сейчас максимум **75,7 %**. Но **счёт остался прежним**: строк выше 30 % ровно пять (75,7 · 63,6 · 47,4 · 41,4 · 38,5), то есть структурно замечание в силе. ## Чего сделано НЕ было Строки не переупорядочены и не отфильтрованы. Отбор идёт по полноте и свежести (`_sort_key` в `landing_showcase_deals.py`), а отбор по величине ошибки был дефектом и уже убран — возвращать его под видом «улучшения ленты» нельзя. Промахи остаются видны. ## Правка Под лентой появляется подпись: медиана расхождения показанных строк и худшая из них. Оба числа — из уже существующей `shownSpread(deals)`, второго расчёта не заведено: любое второе место подсчёта рано или поздно отстанет от строк на экране. Формулировки вроде «зато обычно точно» нет намеренно — она протухнет на первом же пересчёте витрины, а два числа рядом не протухают. Разметка: бегущая часть выделена в `.tickerStrip`, иначе абсолютный `.tickerBadge` растянулся бы на подпись. Подпись намеренно **не** `aria-hidden` (в отличие от самой бегущей строки): прятать от скринридера числа контекста хуже, чем продублировать их. ## Проверки Тест: те же строки с худшей записью и без неё дают **разные** числа в подписи — то есть она сосчитана по показанному, а не вписана константой. Мутация ревьюером: «вписать числа руками» роняет кейс **по значению** (ожидалось 7,8 %, получено 11,5 %), и независимо краснеет `landing-numbers-gate`. `vitest` 10 файлов / 125 passed · `tsc` rc=0 · `eslint --max-warnings 0` rc=0. ## Оговорки - Спред считается по `deals`, а не по удвоенному `items` карусели — отмечено комментарием в коде. - Страницу в браузере не открывали: подпись — обычный `p` без `nowrap`, риск только в возросшей высоте тёмной полосы над первым экраном. - Тест не отличит перестановку медианы и худшей местами (обе проверки через `toContain`, без порядка) — замечание ревьюера. - `prettier` прогнан и **откачен**: он переформатировал чужие куски `landing-v3.module.css`. У `tradein-frontend` конвенции prettier нет, соответствующий pre-commit шаг на этих файлах пропускается. ⚠️ Конфликтует с #3277 по `landing-v3.module.css` — мержить вторым, после него.
bot-backend added 1 commit 2026-08-30 10:05:40 +00:00
МЕРА: лента над первым экраном получает контекст разброса
All checks were successful
CI Trade-In / changes (pull_request) Successful in 12s
CI / changes (pull_request) Successful in 19s
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 1m45s
7d6caed5fb
Над лентой стояло «медианное расхождение с ценой ДКП — 14,5 % по 327
сделкам», а в самой ленте 5 строк из 20 расходились больше чем на 30 %
(75,7 · 63,6 · 47,4 · 41,4 · 38,5). Первое, что видел посетитель страницы
про точность, — крупный промах без единой цифры контекста.

Промахи не прячутся: строки витрины отобраны по ПОЛНОТЕ и СВЕЖЕСТИ
(_sort_key в app/tasks/landing_showcase_deals.py), отбор по величине
ошибки был дефектом и снят. Лечится контекстом — под лентой печатается
тот же разброс ПОКАЗАННЫХ строк, что уже стоит под таблицей сверок:
медиана модуля и худшая, обе из shownSpread() (deal-view.ts), второго
расчёта не заводится. Вывода вида «зато обычно точно» в подписи нет: он
протух бы на первом пересчёте витрины, а два числа рядом — нет.

Разметка: бегущая часть выделена в .tickerStrip — position/overflow
нужны только ей, иначе абсолютный бейдж растянулся бы и на подпись.

Проверка (landing-v3-render.test.tsx): те же строки с худшей и без неё
дают РАЗНЫЕ числа в подписи — она сосчитана по показанному, а не вписана.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bot-backend added 1 commit 2026-08-30 10:15:26 +00:00
Merge branch 'main' into fix/mera-ticker-context
All checks were successful
CI Trade-In / changes (pull_request) Successful in 12s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 14s
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 1m15s
619e38b1e7
bot-backend merged commit 98325d33a9 into main 2026-08-30 10:22:52 +00:00
bot-backend deleted branch fix/mera-ticker-context 2026-08-30 10:22:52 +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#3278
No description provided.