По решению владельца рейтинг теперь один — по всем партиям приложения. Отдельной групповой цепочки нет.
Страница группы (текущий состав, #76): игры, победы, винрейт и среднее место считаются по партиям группы, рейтинг — общий, порядок — по общему рейтингу.
«Новичок» определяется по общему числу партий. Новое поле rating_confirmed означает MIN_GAMES+ партий всего. Поэтому опытный игрок в новой группе ранжирован, даже если сыграл в ней одну партию.
Участники, не игравшие в группе («Ещё не играли»), показывают свой общий рейтинг, если он есть.
Главная и профиль — общие показатели. В блоке «Активная группа» игры и победы по группе, рейтинг общий.
Код:load_history всегда грузит всю историю, одно проигрывание на запрос. У profile_stats убран неиспользуемый параметр group_id.
Фронт: цвет рейтинга (золото/серебро) в списках берётся из rating_confirmed, а не из блока, в котором стоит строка.
Справка: карточка «Один рейтинг на всё приложение». Документ рейтинга: раздел 8 «Расчёт» и решение 7 в разделе 9.
Исправление: «пустые» партии в профиле (второй коммит)
В профиле Ivan висели две карточки с одним участником, и они уходили в «Партия не найдена». Причин две.
Партии без соперников.
Dev-удаление аккаунта (dev_admin) вычёркивает игрока из партий, но сами партии оставляет. 17.06 в dev-БД так опустели партии 2, 3, 6 и 7.
Такие партии засчитывались оставшемуся в число игр с ΔR 0.0 и показывались в истории и списке группы. Вдобавок бэкфилл 0014 проставил им last_standing.
Теперь партия меньше чем с двумя участниками — не игра: её нет в рейтинге и счётчиках, в истории игрока и в списке партий группы. Админка её по-прежнему видит и может удалить. Семантику самого dev-удаления не менял: она закреплена тестом.
Бэкфилл last_standing в 0014 теперь требует хотя бы двух участников. На уже мигрированной dev-БД такие партии и так скрыты.
«Не найдена» вместо «нет доступа».
Из чужого профиля можно перейти в партию группы, где зритель не состоит; сервер отвечает 403. Судя по журналу аудита, в тот момент был вход под Epta, а он не состоит в группе «уууу».
Страница партии теперь так и пишет, а не «Партия не найдена». Правила доступа не менялись.
Коммиты
640f712 Рейтинг: единый рейтинг вместо группового
1e04f13 Рейтинг: партии без соперников не считаются, понятная причина недоступной партии
Проверки
.\.venv\Scripts\python.exe -m pytest — 194 passed. Новое и изменённое:
на страницах двух групп score равен общему, а игры и победы — групповые;
главная: профиль общий, блок активной группы — игры в группе и общий рейтинг;
ветеран (10 партий в одной группе) во второй группе ранжирован с games = 1, новичок — в «Новичках»;
в «Ещё не играли» опытный игрок стоит с общим рейтингом и rating_confirmed, не игравший нигде — без рейтинга;
партия, опустевшая после dev-удаления, не попадает в историю, список и счётчик группы; рейтинг считается только по настоящей партии;
на главной по-прежнему одна загрузка истории.
npm run gen:api + npm run build — зелёные.
HTTP на свежей копии dev-БД:
у всех игроков группы score совпадает с общим топом;
в истории Ivan больше нет партий 6 и 7 (7 партий вместо 9);
от лица Ivan все его партии открываются, от лица не участника группы — 403.
Бэкфилл 0014 на scratch-БД (откат до 0013, добавлена партия с одним участником, снова 0014): настоящая партия с одним выжившим получила last_standing, партия-обрубок осталась «по целям».
Не проверено: вёрстка в браузере — расширение Chrome не подключено.
Что ломается
Числа рейтинга на странице группы становятся общими, порядок в группе может измениться, часть «Новичков» в группах становится ранжированными.
Партии, где осталось меньше двух участников, пропадают из рейтинга, историй и списков партий. На проде их быть не может: dev-удаление там недоступно.
API: у LeaderboardEntry новое поле rating_confirmed. Данные и миграции не затрагиваются, кроме условия бэкфилла в ещё не выпущенной 0014.
Отклонения от плана
Второй коммит — исправление по замечанию владельца: пустые партии в профиле и сообщение о недоступной партии.
Партия 4 в dev-БД (из трёх участников осталось два, места 1 и 3) по-прежнему считается как дуэль. Её места выглядят странно, но это корректная партия двух игроков.
## Что сделано
По решению владельца рейтинг теперь один — по всем партиям приложения. Отдельной групповой цепочки нет.
- **Страница группы** (текущий состав, #76): игры, победы, винрейт и среднее место считаются по партиям группы, рейтинг — общий, порядок — по общему рейтингу.
- «Новичок» определяется по общему числу партий. Новое поле `rating_confirmed` означает `MIN_GAMES`+ партий всего. Поэтому опытный игрок в новой группе ранжирован, даже если сыграл в ней одну партию.
- Участники, не игравшие в группе («Ещё не играли»), показывают свой общий рейтинг, если он есть.
- **Главная и профиль** — общие показатели. В блоке «Активная группа» игры и победы по группе, рейтинг общий.
- **Код:** `load_history` всегда грузит всю историю, одно проигрывание на запрос. У `profile_stats` убран неиспользуемый параметр `group_id`.
- **Фронт:** цвет рейтинга (золото/серебро) в списках берётся из `rating_confirmed`, а не из блока, в котором стоит строка.
- **Справка:** карточка «Один рейтинг на всё приложение». **Документ рейтинга:** раздел 8 «Расчёт» и решение 7 в разделе 9.
### Исправление: «пустые» партии в профиле (второй коммит)
В профиле Ivan висели две карточки с одним участником, и они уходили в «Партия не найдена». Причин две.
1. **Партии без соперников.**
- Dev-удаление аккаунта (`dev_admin`) вычёркивает игрока из партий, но сами партии оставляет. 17.06 в dev-БД так опустели партии 2, 3, 6 и 7.
- Такие партии засчитывались оставшемуся в число игр с ΔR 0.0 и показывались в истории и списке группы. Вдобавок бэкфилл 0014 проставил им `last_standing`.
- Теперь партия меньше чем с двумя участниками — не игра: её нет в рейтинге и счётчиках, в истории игрока и в списке партий группы. Админка её по-прежнему видит и может удалить. Семантику самого dev-удаления не менял: она закреплена тестом.
- Бэкфилл `last_standing` в 0014 теперь требует хотя бы двух участников. На уже мигрированной dev-БД такие партии и так скрыты.
2. **«Не найдена» вместо «нет доступа».**
- Из чужого профиля можно перейти в партию группы, где зритель не состоит; сервер отвечает 403. Судя по журналу аудита, в тот момент был вход под Epta, а он не состоит в группе «уууу».
- Страница партии теперь так и пишет, а не «Партия не найдена». Правила доступа не менялись.
## Коммиты
- `640f712` Рейтинг: единый рейтинг вместо группового
- `1e04f13` Рейтинг: партии без соперников не считаются, понятная причина недоступной партии
## Проверки
- `.\.venv\Scripts\python.exe -m pytest` — **194 passed**. Новое и изменённое:
- на страницах двух групп `score` равен общему, а игры и победы — групповые;
- главная: профиль общий, блок активной группы — игры в группе и общий рейтинг;
- ветеран (10 партий в одной группе) во второй группе ранжирован с `games = 1`, новичок — в «Новичках»;
- в «Ещё не играли» опытный игрок стоит с общим рейтингом и `rating_confirmed`, не игравший нигде — без рейтинга;
- партия, опустевшая после dev-удаления, не попадает в историю, список и счётчик группы; рейтинг считается только по настоящей партии;
- на главной по-прежнему одна загрузка истории.
- `npm run gen:api` + `npm run build` — зелёные.
- **HTTP на свежей копии dev-БД:**
- у всех игроков группы `score` совпадает с общим топом;
- в истории Ivan больше нет партий 6 и 7 (7 партий вместо 9);
- от лица Ivan все его партии открываются, от лица не участника группы — 403.
- **Бэкфилл 0014 на scratch-БД** (откат до 0013, добавлена партия с одним участником, снова 0014): настоящая партия с одним выжившим получила `last_standing`, партия-обрубок осталась «по целям».
- **Не проверено:** вёрстка в браузере — расширение Chrome не подключено.
## Что ломается
- Числа рейтинга на странице группы становятся общими, порядок в группе может измениться, часть «Новичков» в группах становится ранжированными.
- Партии, где осталось меньше двух участников, пропадают из рейтинга, историй и списков партий. На проде их быть не может: dev-удаление там недоступно.
- API: у `LeaderboardEntry` новое поле `rating_confirmed`. Данные и миграции не затрагиваются, кроме условия бэкфилла в ещё не выпущенной 0014.
## Отклонения от плана
- Второй коммит — исправление по замечанию владельца: пустые партии в профиле и сообщение о недоступной партии.
- Партия 4 в dev-БД (из трёх участников осталось два, места 1 и 3) по-прежнему считается как дуэль. Её места выглядят странно, но это корректная партия двух игроков.
Closes #80
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01LqSoRj99iwVEH5U5fnZgsd
Групповая цепочка убрана: рейтинг у игрока один, по всем партиям приложения
(решение владельца). load_history всегда грузит всю историю, одно
проигрывание на запрос. Страница группы: игры, победы, винрейт и среднее
место — по партиям группы, рейтинг — общий; «Новичок» тоже по общему числу
партий (новое поле rating_confirmed), поэтому опытный игрок в новой группе
ранжирован. Участники, не игравшие в группе, показывают общий рейтинг.
Главная и профиль — общие показатели; в блоке активной группы игры по
группе, рейтинг общий. У profile_stats убран неиспользуемый group_id.
Фронт: цвет рейтинга в списках берётся из rating_confirmed; справка —
«Один рейтинг на всё приложение». Документ рейтинга: раздел 8 и решение 7
в разделе 9.
Тесты: рейтинг в группах равен общему при групповых играх и победах,
главная и блок активной группы, ветеран в новой группе ранжирован,
«Ещё не играли» с общим рейтингом. #80
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LqSoRj99iwVEH5U5fnZgsd
В профиле Ivan висели две «партии» с одним участником, которые не
открывались. Dev-удаление аккаунта (dev_admin) вычёркивает игрока из партий,
не трогая сами партии, и 17.06 в dev-БД так опустели партии 2, 3, 6 и 7.
Они засчитывались оставшемуся в число игр с ΔR 0.0, показывались в истории
и списке группы, а бэкфилл 0014 проставил им last_standing.
Партия меньше чем с двумя участниками больше не считается игрой: её нет
в рейтинге и счётчиках (load_history), в истории игрока и в списке партий
группы; админка её по-прежнему видит. Бэкфилл last_standing в 0014 теперь
требует хотя бы двух участников (на уже мигрированных БД такие партии и так
скрыты).
«Партия не найдена» при переходе из чужого профиля в партию группы, где
зритель не состоит, — это 403; страница партии теперь так и пишет.
Тест: партия, опустевшая после dev-удаления, не попадает в историю, список
и счётчик группы, рейтинг считается только по настоящей партии. #80
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LqSoRj99iwVEH5U5fnZgsd
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Что сделано
По решению владельца рейтинг теперь один — по всем партиям приложения. Отдельной групповой цепочки нет.
rating_confirmedозначаетMIN_GAMES+ партий всего. Поэтому опытный игрок в новой группе ранжирован, даже если сыграл в ней одну партию.load_historyвсегда грузит всю историю, одно проигрывание на запрос. Уprofile_statsубран неиспользуемый параметрgroup_id.rating_confirmed, а не из блока, в котором стоит строка.Исправление: «пустые» партии в профиле (второй коммит)
В профиле Ivan висели две карточки с одним участником, и они уходили в «Партия не найдена». Причин две.
dev_admin) вычёркивает игрока из партий, но сами партии оставляет. 17.06 в dev-БД так опустели партии 2, 3, 6 и 7.last_standing.last_standingв 0014 теперь требует хотя бы двух участников. На уже мигрированной dev-БД такие партии и так скрыты.Коммиты
640f712Рейтинг: единый рейтинг вместо группового1e04f13Рейтинг: партии без соперников не считаются, понятная причина недоступной партииПроверки
.\.venv\Scripts\python.exe -m pytest— 194 passed. Новое и изменённое:scoreравен общему, а игры и победы — групповые;games = 1, новичок — в «Новичках»;rating_confirmed, не игравший нигде — без рейтинга;npm run gen:api+npm run build— зелёные.scoreсовпадает с общим топом;last_standing, партия-обрубок осталась «по целям».Что ломается
LeaderboardEntryновое полеrating_confirmed. Данные и миграции не затрагиваются, кроме условия бэкфилла в ещё не выпущенной 0014.Отклонения от плана
Closes #80
🤖 Generated with Claude Code
https://claude.ai/code/session_01LqSoRj99iwVEH5U5fnZgsd