fix(mera-public): честный текст покрытия и разные квартиры в раундах игры #3337

Merged
bot-backend merged 2 commits from fix/3323-coverage-copy-honesty into main 2026-09-02 12:46:06 +00:00
Collaborator

Refs #3323 п.4 [medium] (сборник аудита; НЕ auto-close). Три подпункта честности публичного лендинга.

1. «В остальных N расчёт всё равно сделаем» — было неправдой

В rest входили пробы с пустой когортой, для которых ветка not_covered отдаёт «не считаем». Теперь три доли и все названы своими именами:

«В городе X выборки хватает на уверенный расчёт в 16 проверках из 100. Ещё в 73 данных меньше — расчёт мы сделаем, но разброс будет шире, и в ответе это будет написано. В оставшихся 11 рядом не находится ни одной похожей квартиры — так и скажем, а считать не станем.»

2. «В среднем» → медиана

Бэкенд считает percentile_cont(0.5) (не трогали). Подпись: «столько и дольше висит каждое второе объявление» (+ partial-вариант с «дата известна у N из M»). Слово «объявление» сохранено — на нём стоит существующий пин «не срок продажи».

3. Раунды игры без «трёх студий на одной улице»

pickVariedDeals(deals, n): жадный выбор с различающимися rooms И улицей (null-улица повтором не считается), добор первыми, детерминированно (SSR, без random).

Тесты

172 passed по всей папке __tests__, tsc чисто. Фальсификация: откат src — 7 красных по значению (в т.ч. «нет доли „посчитаем, но шире"»); для выбора примеров полный откат дал бы «функции нет» — поэтому мутация тела в старое slice(0,3): expected [0,0,0] to deeply equal [0,1,2] — ровно прод-дефект «три студии». Числа в тестах сверяются извлечением \d+ из строки, а не toContain("3") («3» нашлось бы в «83»).

Проверка глазами после деплоя

/ meraocenka: блок покрытия — три доли, суммы сходятся; «Угадай цену» — три разные квартиры/улицы; подпись возраста без «в среднем».

Refs #3323 п.4 [medium] (сборник аудита; НЕ auto-close). Три подпункта честности публичного лендинга. ## 1. «В остальных N расчёт всё равно сделаем» — было неправдой В rest входили пробы с пустой когортой, для которых ветка not_covered отдаёт «не считаем». Теперь три доли и все названы своими именами: > «В городе X выборки хватает на уверенный расчёт в 16 проверках из 100. Ещё в 73 данных меньше — расчёт мы сделаем, но разброс будет шире, и в ответе это будет написано. В оставшихся 11 рядом не находится ни одной похожей квартиры — так и скажем, а считать не станем.» ## 2. «В среднем» → медиана Бэкенд считает `percentile_cont(0.5)` (не трогали). Подпись: «столько и дольше висит каждое второе объявление» (+ partial-вариант с «дата известна у N из M»). Слово «объявление» сохранено — на нём стоит существующий пин «не срок продажи». ## 3. Раунды игры без «трёх студий на одной улице» `pickVariedDeals(deals, n)`: жадный выбор с различающимися rooms И улицей (null-улица повтором не считается), добор первыми, детерминированно (SSR, без random). ## Тесты `172 passed` по всей папке `__tests__`, tsc чисто. Фальсификация: откат src — 7 красных по значению (в т.ч. «нет доли „посчитаем, но шире"»); для выбора примеров полный откат дал бы «функции нет» — поэтому мутация тела в старое `slice(0,3)`: `expected [0,0,0] to deeply equal [0,1,2]` — ровно прод-дефект «три студии». Числа в тестах сверяются извлечением `\d+` из строки, а не `toContain("3")` («3» нашлось бы в «83»). ## Проверка глазами после деплоя `/` meraocenka: блок покрытия — три доли, суммы сходятся; «Угадай цену» — три разные квартиры/улицы; подпись возраста без «в среднем».
bot-backend added 1 commit 2026-09-02 12:38:24 +00:00
fix(mera-public): честный текст покрытия и разные квартиры в раундах игры
All checks were successful
CI Trade-In / changes (pull_request) Successful in 11s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 14s
CI / frontend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 1m8s
c093212eae
Остаток «100 − уверенные» в подписи города был однородным только на словах:
внутрь него входят пустые пробы, на которые describeCoverage отвечает «рядом
не продаётся ничего похожего» и расчёт не предлагает. Текст обещал расчёт и
на них — две наши же строки спорили друг с другом. Остаток разложен на долю
«посчитаем, но разброс шире» и долю «считать не станем».

Возраст объявления бэкенд считает percentile_cont(0.5) — это медиана, а
«в среднем» под скошенным распределением называет другую величину.

Раунды игры брались первыми тремя строками витрины, а она отсортирована по
полноте и свежести: на проде это давало три студии с одной улицы. Выбор
жадный по комнатности и улице, детерминированный — страница серверная.
Light1YT added 1 commit 2026-09-02 12:44:02 +00:00
fix(mera-public): защиты вместо тавтологий в coverage-тексте и выборе раундов
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
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 / openapi-codegen-check (pull_request) Has been skipped
CI / changes (pull_request) Successful in 10s
CI / frontend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 1m9s
ef166eaf21
Проверка «уверенные + средние + пустые = 100» была верна по определению
средней доли и упасть не могла. Инвариант перенесён на сам замер: уверенные и
пустые обязаны оставлять место третьей доле. Если её всё-таки не останется
(перезамер 85 + 15), текст теперь двухчастный — «Ещё в 0 данных меньше»
отрендериться не может.

`street_name !== null` считал пустую строку названием улицы, и вторая такая
строка вылетала из игры как «повтор». Проверка на пустоту.
bot-backend merged commit 72a17922ee into main 2026-09-02 12:46:06 +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#3337
No description provided.