Aggiunge alle doc di presenze/pagelle il collegamento con le StatTile di home «Colpo d'occhio» e registra nel changelog la rimozione dell'hint statico. Uniforma i moduli allo stato "implementato" senza tag di versione e riscrive in DESIGN_DECISIONS.md i riferimenti a v1.0/v1.1/v2.0 con descrizioni neutre, coerenti con il fatto che il progetto non usa più quella numerazione. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
6.4 KiB
6.4 KiB
Changelog
Tutte le modifiche significative del progetto, dalla più recente. Il formato segue
Keep a Changelog e la numerazione
Semantic Versioning: il numero di versione è quello di
package.json.
L'elenco delle funzionalità disponibili e previste non si ripete qui: sta in ROADMAP.md, che elenca il cosa senza numeri di versione — quelli stanno solo qui.
[Non rilasciato] — 0.9.0
Prima versione, pre-release.
Aggiunto
- Login con Google tramite Supabase Auth e collegamento automatico dell'account al proprio
giocatore confrontando l'email (DD-011, DD-018; migration
m5_email_giocatori_squadra): senza sessione non si entra in nessuna schermata. - Dashboard amministratore
/admin: stato dei profili, download di documento, certificato e foto tessera, export CSV per il tesseramento, aggiunta e disattivazione dei giocatori (la riga non viene mai eliminata, così presenze, voti e badge restano agganciati al suo id). - Profilo giocatore: dati anagrafici, documento, certificato medico e foto tessera con le
relative scadenze (migration
m2_profili_giocatore, bucket privato), divisi nelle tab Stagione, Documenti e Opzioni — modules/profilo-giocatore.md. - Tracciamento del tesseramento CSI: numero e data di tessera in
giocatori_squadra, badge e contatore in dashboard (migrationm8_tesseramento_csi). - Foto profilo condivise tra dispositivi tramite il bucket pubblico
avatar-giocatori(migrationm6_avatar_giocatori). - Serie di presenze calcolate sui dati reali (
serieConsecutiva()), con la colonnarisposto_ilche congela l'istante della prima risposta tramite trigger (migrationm9_risposte_presenze_risposto_il): sblocca la serie "Conferme 24h" e i badge "Risposta lampo" e "Mai un forfait" — modules/serie-presenze.md. - Scout Live sincronizzato tra dispositivi: il blocco "chi sta scoutando" passa dalla tabella
scout_sessionie le partite concluse vengono archiviate inscout_partite(migrationm7_scout_partite). Si apre dalla sezione «Scout live» di/partita/$id, solo il giorno della partita, e può usarlo chiunque sia autenticato: uno per volta, grazie al lock. - Votazione MVP legata all'evento CrAPP e non al referto CSI o allo Scout: si apre due ore
dopo
data+oradella partita, anche senza risultato caricato — modules/mvp.md. - Badge Pagellone: la media pagelle conta per il badge solo con almeno
VOTI_MINIMI_PAGELLA(5) voti ricevuti — prima un singolo voto poteva sbloccarlo o farlo sparire senza nessuna significatività statistica — modules/badge.md. - Sondaggio pre-partita aperto dalle 8:00 del giorno della partita fino al fischio d'inizio
(poi resta chiuso, anche nei giorni successivi) e pulsante «Avvisa tutti del sondaggio» per
gli amministratori (
POST /api/public/apri-sondaggio); nessun cron, l'invio è manuale. - Turni palloni con rotazione automatica sulle partite e assegnazione manuale per gli allenamenti, che restano «da assegnare» finché non si sceglie (migration M10).
- Notifiche push con il testo cifrato dentro la push (
aes128gcm, RFC 8291), così arrivano anche ad app chiusa e a schermo bloccato (DD-026). - Collegamento CSI: classifica e risultati ufficiali letti dal portale Livescore CSI Bologna (stagione 2025/26, Open Misto Eccellenza, Girone B) — modules/collegamento-csi.md.
- Note dell'evento visibili in
/allenamento/$ide/partita/$id, con gli a capo mantenuti. - «Segnala un bug» e «Suggerisci una nuova funzionalità» in
/profilo: due link che aprono una issue GitHub sul template giusto, senza tabelle né schermate di gestione. - Interfaccia accessibile: contrasto dei token colore sopra 4.5:1,
viewport-fit=coveretheme-colorcoerenti con un'app chiara,lang="it",:focus-visibleglobale, tocchi da 44px,aria-current/aria-pressed/aria-controls/aria-busy, niente testo sotto i 12px. - Movimento con molle interrompibili di
motional posto delle@keyframesa durata fissa, swipe fra i mesi del calendario e barre di progresso che misurano l'avanzamento tra un traguardo e il successivo (DD-021). - Suite di test in
test/(unit, integration, end-to-end) eseguita con bun e senza nuove dipendenze:npm run testenpm run test:all. - Convenzioni interne: primitive condivise (
Card,Campo,classiInputinui-bits), cache aggiornata consetQueryDatainvece di rileggere il database dopo ogni scrittura, e logica pura estratta insrc/lib/con i suoi test. - Infrastruttura di sviluppo: migrazione da Lovable a sviluppo locale, repository GitHub indipendente, deploy automatico su Vercel.
Modificato
- In Squadra la classifica interna (filtro «Classifica per» + elenco) è sotto i 6 riquadri di Statistiche; la tab «Classifica» è stata rimossa dalla barra delle sottosezioni.
- Tolto l'hint statico "+2 questo mese" dalla StatTile Presenze in home (sezione «Colpo d'occhio»): mostrava un testo fisso, non un dato calcolato.
Sicurezza
- Migration
m4_solo_autenticati: tolto al ruoloanonl'accesso alle tabelle dell'app (applicata in produzione il 03/09/2026). - I permessi di amministrazione arrivano solo da
user_roles(src/lib/ruoli.ts): senza, basterebbe scegliere il nome giusto per amministrare. - Migration
m11_scritture_per_ruolo: ogni voto è firmato con lo slot collegato all'account (DD-023); il collegamento account → giocatore non è modificabile dal giocatore stesso (DD-016). - Migration
m12_niente_autovoto: i vincolimvp_no_autovotoebadge_social_no_autovotorifiutano l'auto-voto anche a chi scrive direttamente su PostgREST, come già facevapagelle_voti. - Al voto MVP partecipano solo i presenti (o in ritardo) di quell'evento; il filtro è applicativo, non RLS (modules/mvp.md).
- Migration
m13_convocati_e_pagelle_chiuse(DD-027): la policy di M11 supagelle_voti,mvp_votiebadge_social_votiverifica ora anche che votante e votato siano tra i convocati dell'evento, e per le sole pagelle chepagelle_chiusesia falso — prima erano filtri solo applicativi, aggirabili scrivendo direttamente su PostgREST. - La suite copre i rifiuti
401dirichiediAdmin(DD-024), i permessi dibadge_social_votie le deroghe admin di M11, e verifica che un ripensamento non riscrivarisposto_il(trigger dim9).