Applica una soglia minima di campione a Media voto e MVP in home (DD-028)

Rimuove l'hint statico "+2 questo mese" dalla StatTile Presenze. La StatTile
Media voto usa ora la stessa soglia minima di voti del badge Pagellone
(VOTI_MINIMI_PAGELLA), tramite la nuova funzione pura testabile
mediaVotoColpoDOcchio(). L'MVP di partita richiede un quorum minimo di 2
voti totali (VOTI_MINIMI_MVP) oltre al margine netto già richiesto: un
solo voto non assegna più la vittoria, con effetto anche sui conteggi
già mostrati. Aggiorna test unitari e di integrazione, e documenta la
decisione in DESIGN_DECISIONS.md, pagelle.md, mvp.md e CHANGELOG.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-09 09:56:56 +02:00
co-authored by Claude Sonnet 5
parent 6d177d5d8a
commit 00235d1594
12 changed files with 165 additions and 19 deletions
+8 -1
View File
@@ -127,13 +127,20 @@ if (!locale) {
const badgeVg2 = statoBadge(mvpDef, giocatoreAzzerato(vinti["vg2"] ?? 0));
assert.equal(badgeVg2.grado, null, "zero vittorie nette: nessun badge sbloccato");
// Una terza vittoria netta porta vg1 da bronzo ad argento (soglia 3).
// Una terza vittoria netta porta vg1 da bronzo ad argento (soglia 3). Due voti,
// non uno solo: sotto il quorum minimo (VOTI_MINIMI_MVP) nessuna vittoria conterebbe.
await upsert({
match_id: `${PREFISSO}-m4`,
votante_id: "va",
votato_id: "vg1",
votato_nome: "Uno",
});
await upsert({
match_id: `${PREFISSO}-m4`,
votante_id: "vb",
votato_id: "vg1",
votato_nome: "Uno",
});
const vintiDopo = mvpVintiPerGiocatore(await leggiVoti());
assert.equal(vintiDopo["vg1"], 3);
assert.equal(
+15 -2
View File
@@ -89,20 +89,33 @@ if (!locale) {
await prova(
"sotto la soglia minima di voti pagella, 2 MVP e media alta non bastano",
async () => {
// "tb1" vince nettamente m1 e m2 (2 MVP), e riceve un solo voto pagella da 9 (media
// alta ma su un campione troppo piccolo): il segreto deve restare bloccato.
// "tb1" vince nettamente m1 e m2 (2 MVP, due voti a testa per rispettare il quorum
// minimo), e riceve un solo voto pagella da 9 (media alta ma su un campione troppo
// piccolo): il segreto deve restare bloccato.
await votaMvp({
match_id: `${PREFISSO}-m1`,
votante_id: "va",
votato_id: "tb1",
votato_nome: "Uno",
});
await votaMvp({
match_id: `${PREFISSO}-m1`,
votante_id: "vf",
votato_id: "tb1",
votato_nome: "Uno",
});
await votaMvp({
match_id: `${PREFISSO}-m2`,
votante_id: "va",
votato_id: "tb1",
votato_nome: "Uno",
});
await votaMvp({
match_id: `${PREFISSO}-m2`,
votante_id: "vf",
votato_id: "tb1",
votato_nome: "Uno",
});
await votaPagella({
match_id: `${PREFISSO}-m1`,
votante_id: "va",