Новички: серебряный рейтинг и порог 5 игр вместо 3

- рейтинг в блоках «Новички» (топ игроков и общая статистика) выводится
  серебряным (--silver, класс .lb-score.provisional), а не золотым;
- MIN_GAMES 3 -> 5 (scoring.py) — в ранжированный топ попадают с 5 игр;
  подпись «Новички (меньше N игр)» берёт порог из API, справка обновлена;
- pytest: 57 passed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-15 17:21:20 +03:00
co-authored by Claude Fable 5
parent c4f75d5de0
commit ac296a8f12
6 changed files with 14 additions and 9 deletions
+1 -1
View File
@@ -55,7 +55,7 @@ export function HelpPage() {
<div className="card">
<h3>Попадание в топ</h3>
<p className="small">
Чтобы попасть в ранжированный топ, нужно сыграть минимум <b>3 партии</b>. До этого
Чтобы попасть в ранжированный топ, нужно сыграть минимум <b>5 партий</b>. До этого
игрок показывается в блоке «Новички» — предварительно, без места в рейтинге.
</p>
</div>
+6 -4
View File
@@ -42,7 +42,7 @@ export function OverallStatsPage() {
const provisional = filterSort(data.provisional);
const arrow = (k: SortKey) => (k === sortKey ? (dir === 1 ? " ↑" : " ↓") : "");
const row = (e: LeaderboardEntry) => (
const row = (e: LeaderboardEntry, isProvisional = false) => (
<PlayerLink key={e.user_id} userId={e.user_id} className="st-row">
<span className={"st-num" + (e.rank && e.rank <= 3 ? " gold" : "")}>{e.rank ?? "—"}</span>
<span className="st-player">
@@ -52,7 +52,9 @@ export function OverallStatsPage() {
<span className="st-num">{e.games}</span>
<span className="st-num">{e.wins}</span>
<span className="st-num">{pct(e.win_rate)}</span>
<span className="st-num lb-score">{e.score ?? "—"}</span>
<span className={"st-num lb-score" + (isProvisional ? " provisional" : "")}>
{e.score ?? "—"}
</span>
</PlayerLink>
);
@@ -77,14 +79,14 @@ export function OverallStatsPage() {
Никого не найдено.
</div>
) : (
entries.map(row)
entries.map((e) => row(e))
)}
</div>
{provisional.length > 0 && (
<div className="card">
<div className="label">Новички (меньше {data.min_games} игр)</div>
{provisional.map(row)}
{provisional.map((e) => row(e, true))}
</div>
)}
</div>