Рейтинг: единый рейтинг вместо группового
Групповая цепочка убрана: рейтинг у игрока один, по всем партиям приложения (решение владельца). 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
This commit is contained in:
@@ -670,8 +670,11 @@ M_{ab} = \operatorname{clamp}(A_{ab},\; 0.5,\; 2.0) \cdot c_{ab}
|
||||
завершённых партий по порядку (`played_at`, `finished_at`, `id`), а не агрегатом SQL.
|
||||
Данных мало: сотни партий, микросекунды на пару. Существующий принцип «считается вживую»
|
||||
сохраняется, кэш можно ввести позже с инвалидацией по уже существующим SSE-событиям.
|
||||
- **Две цепочки:** общий рейтинг — по всем партиям приложения, групповой — по партиям
|
||||
группы. Это разные числа, как и сейчас.
|
||||
- **Одна цепочка** (решение владельца 2026-09-15, #80): рейтинг у игрока один — по всем
|
||||
партиям приложения, K — по всем его партиям. Отдельного группового рейтинга нет:
|
||||
на странице группы игры, победы, винрейт и среднее место считаются по партиям группы,
|
||||
а рейтинг и статус «Новичок» — общие. Первая версия реализации (#23) держала две
|
||||
цепочки, общую и групповую, — это оказалось неинтуитивно (раздел 9).
|
||||
- Правка или удаление прошлой партии автоматически меняет всё после неё: при пересчёте
|
||||
с нуля отдельной логики не нужно.
|
||||
- Эталон — `rate_match` в `simulate.py`. Примеры из раздела 6 стоит перенести в тесты
|
||||
@@ -728,6 +731,7 @@ M_{ab} = \operatorname{clamp}(A_{ab},\; 0.5,\; 2.0) \cdot c_{ab}
|
||||
| 4 | Ввод миров на конец партии | **Оставить** | без изменений: `w_w = 0.5` |
|
||||
| 5 | Затухание за неактивность | **Не добавлять** | без изменений |
|
||||
| 6 | Минимум партий для топа | **Оставить 10** | без изменений: `MIN_GAMES = 10` |
|
||||
| 7 | Групповой рейтинг отдельной цепочкой (после внедрения, #80, 2026-09-15) | **Убрать.** Рейтинг единый; на странице группы — показатели по партиям группы, на главной и в профиле — общие | раздел 8, «Расчёт» |
|
||||
|
||||
Открытых вопросов по предложению не осталось. Калибровка коэффициентов на реальных данных —
|
||||
после внедрения #23 (раздел 8, «Калибровка»).
|
||||
|
||||
Reference in New Issue
Block a user