Files
CRAPP/docs/decisions/DD-028.md
T
davideandClaude Sonnet 5.5 8f25143aa5 Riorganizza la documentazione per l'uso con assistenti AI
- Spezza il registro delle decisioni in docs/decisions/DD-XXX.md, con indice
- Ripulisce DATABASE.md dalla storia delle migration e aggiunge la sezione Lettura
- Riduce PROJECT_STATE.md a una pagina; la procedura di allestimento passa in OPERATIONS.md
- Aggiunge OPERATIONS.md, GLOSSARIO.md, trappole note e checklist in ARCHITECTURE.md
- Sintetizza la copertura test di badge.md e documenta docs/archive
- Allinea AGENTS.md, README.md e la regola Cursor (tolto l'obbligo di develop, in contrasto con DD-019)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 08:53:38 +02:00

2.8 KiB

DD-028 — Soglia minima di campione per Media voto e MVP in home

Data: 9 settembre 2026
Stato: Accettata

Contesto
Un audit della sezione «Colpo d'occhio» in home (index.tsx, StatTile Presenze/Media voto/MVP) ha trovato che due delle tre statistiche non avevano nessun minimo campionario: mediePagelle() calcola una media aritmetica pura, così un giocatore con un solo voto da 10 mostrava "10" in home, più alto di un titolare con 40 voti e media 7.2 — lo stesso problema che il badge Pagellone già risolve con VOTI_MINIMI_PAGELLA (badge.md), ma applicato solo al badge, non alla StatTile home. Allo stesso modo mvpVintiPerGiocatore()/vincitoriMvp() assegnavano un MVP di partita anche con un solo voto totale: bastava che un solo giocatore votasse perché il votato "vincesse" nettamente, senza nessun quorum di partecipazione.

Decisione

  • Media voto in home usa la stessa soglia del badge Pagellone: sotto VOTI_MINIMI_PAGELLA (5) voti ricevuti, la StatTile mostra — invece della media, tramite la funzione pura mediaVotoColpoDOcchio() (pagelle.ts), estratta dalla route per restare testabile (DD-020). La funzione mediePagelle() non cambia: il filtro resta lato chiamante, come già faceva il badge.
  • MVP: conteggioPartita's aggregazione, tramite vincitoriMvp() e mvpVintiPerGiocatore(), richiede ora un quorum minimo di voti totali sulla partita (VOTI_MINIMI_MVP = 2, mvp-voti.ts) prima di assegnare un vincitore, oltre alla regola già esistente del margine netto tra primo e secondo. Un solo voto non basta più a incoronare nessuno, nemmeno in assenza di concorrenza.

Alternative scartate

  • Alzare la soglia MVP oltre 2 (es. metà dei convocati) → serve conoscere i convocati dell'evento dentro una funzione che oggi lavora solo sui voti; complessità non giustificata per il gap trovato in audit.
  • Lasciare l'MVP senza quorum e limitarsi al fix della Media voto → il problema di fondo (un numero esiguo di voti che decide una statistica mostrata come solida) resterebbe aperto per l'MVP.

Conseguenze

  • Alcuni MVP di partita già assegnati con un solo voto totale non contano più nel conteggio mvp del giocatore: è una modifica retroattiva al dato mostrato, non solo al calcolo futuro, perché mvpVintiPerGiocatore() deriva sempre il conteggio dai voti grezzi, senza storico persistito a parte.
  • mediePagelle() resta invariata: chi la chiama altrove (profilo, squadra) senza applicare la soglia continua a mostrare la media grezza — non tocca questa decisione, resta il limite già noto in pagelle.md.

Riesame
Se la squadra segnala che il quorum di 2 voti per l'MVP è troppo permissivo o troppo severo, o se si vuole applicare la stessa soglia di Media voto anche alle StatTile di profilo e squadra.