diff --git a/PROJECT_STATE.md b/PROJECT_STATE.md index f29839c..0ee00bc 100644 --- a/PROJECT_STATE.md +++ b/PROJECT_STATE.md @@ -37,7 +37,8 @@ schema in [docs/DATABASE.md](docs/DATABASE.md), le procedure in collega al primo accesso (DD-018). - **Lavoro in corso:** branch `feature/gara` per le funzioni di gara (correzioni e nuove funzioni; in futuro anche lo scouting). Primo lavoro: il voto MVP definitivo, segreto, a tempo e - tra presenti, con i pari merito (DD-051, DD-052). Non ancora in `main`, non rilasciato, versione + tra presenti, con i pari merito (DD-051, DD-052). Poi lo scout live ridotto alle valutazioni − / + + per set (DD-053): da completare la chiusura di set e partita senza punti. Non ancora in `main`, non rilasciato, versione invariata. Le altre voci aperte stanno in [docs/ROADMAP.md](docs/ROADMAP.md), sotto «Prossimo». ## Cose da sapere diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 5e4db1e..7713d7b 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -23,6 +23,9 @@ Cinque migration, da `m35` a `m39`, **non ancora applicate in produzione**. ### Modificato +- Scout live: tolti i tasti dei punti, il tabellone del punteggio e il blocco avversario / in casa / + trasferta; resta la scelta del giocatore e la valutazione − / + per set + ([DD-053](decisions/DD-053.md)). Per ora «Chiudi set» e «Fine partita» non salvano senza punti. - Il voto MVP è definitivo ([DD-051](decisions/DD-051.md)): si sceglie un nome, si conferma e non si può più cambiare. Il database lo impone (solo gli admin possono correggere un voto). - In caso di parità in testa gli MVP sono più d'uno: ognuno dei pari merito conta un titolo, e in diff --git a/docs/decisions/DD-053.md b/docs/decisions/DD-053.md index a93710d..897f06d 100644 --- a/docs/decisions/DD-053.md +++ b/docs/decisions/DD-053.md @@ -17,6 +17,11 @@ giudizio sul resto del gioco — battuta, ricezione, attacco, muro — che non c - Stato in corso dentro `scout_live.stato` (jsonb, nessuna modifica); partita archiviata nella nuova colonna `scout_partite.valutazioni jsonb NOT NULL DEFAULT '[]'` (`m39`, solo additiva). +- Nella schermata dello scout, su richiesta, sono stati tolti i tasti delle azioni, il tabellone del + punteggio e il blocco avversario/campo: lo scout è fatto solo di valutazioni. Non c'è più una + chiusura di set né di partita che funzioni senza punti (vedi + [modulo Scout Live](../modules/scout-live.md), «Limiti noti»). + **Alternative scartate** - Nuovi `AzioneTipo` dentro `azioni` → ogni consumatore (punteggio, totali, CSV) andrebbe filtrato diff --git a/docs/modules/scout-live.md b/docs/modules/scout-live.md index 0057799..bfd03ec 100644 --- a/docs/modules/scout-live.md +++ b/docs/modules/scout-live.md @@ -10,9 +10,8 @@ ## Obiettivo Permettere a un solo referente per volta di registrare in tempo reale, durante la partita, -punti, ace, muri ed errori di ciascun giocatore in campo — più un giudizio − / + sui -fondamentali, per set — con salvataggio condiviso su -Supabase (non più solo `localStorage`, fix M7) così che tutta la squadra veda lo stato +un giudizio − / + sui fondamentali (battuta, ricezione, attacco, muro) di ciascun convocato, +per set, con salvataggio condiviso su Supabase (non più solo `localStorage`, fix M7) così che tutta la squadra veda lo stato aggiornato da qualunque dispositivo. --- @@ -67,12 +66,18 @@ perché occupava spazio 6 giorni su 7. ## Cosa registra -Tipi di azione (`AzioneTipo`, `scout-store.ts`): `attacco`, `ace`, `muro`, `errore`, -`punto_avv`, `errore_avv` — attacco/ace/muro ed errore avversario valgono come punto nostro, -errore nostro e punto avversario come punto avversario. Le azioni con giocatore -(attacco/ace/muro/errore) richiedono di selezionarlo prima dalla griglia dei convocati -(filtrati sulle risposte "presente"/"ritardo", con fallback a tutta la rosa se nessuno ha -risposto). Salvataggio automatico su `scout_live` con debounce di 800ms a ogni cambiamento. +La schermata `/scout` ha due passi: **1. Tocca il giocatore** (griglia dei convocati, filtrati sulle +risposte "presente"/"ritardo", con fallback a tutta la rosa se nessuno ha risposto) e **2. Valuta** +(vedi sotto), seguiti da «Ultime azioni», «Chiudi set» e «Fine partita». Salvataggio automatico su +`scout_live` con debounce di 800ms a ogni cambiamento. + +**Punteggio e azioni.** L'interfaccia non registra più il punteggio: sono stati tolti i tasti delle +azioni (punto attacco, ace, muro, errore nostro, punto e errore avversario), il tabellone con punti +e set e il blocco avversario / in casa / trasferta. Avversario e campo restano quelli ricavati dal +titolo della partita (o dallo stato già salvato) e non si modificano. I tipi di azione +(`AzioneTipo`, `scout-store.ts`: `attacco`, `ace`, `muro`, `errore`, `punto_avv`, `errore_avv`), +i totali `totaliPerGiocatore()` e il campo `scout_partite.azioni` restano nel codice e nei dati: +leggono le partite scoutate prima di questa modifica, ma oggi nessuna schermata crea nuove azioni. --- @@ -80,9 +85,10 @@ risposto). Salvataggio automatico su `scout_live` con debounce di 800ms a ogni c Per ogni convocato lo scout può segnare un **−** o un **+** su battuta, ricezione, attacco e muro ([DD-053](../decisions/DD-053.md)). Non sono punti: restano fuori dal punteggio, dai parziali e dai -totali P/A/M/E. Si seleziona il giocatore (passo 1) e si tocca − o + sul fondamentale (passo 3); +totali P/A/M/E. Si seleziona il giocatore (passo 1) e si tocca − o + sul fondamentale (passo 2, il cui titolo mostra +cognome e numero del giocatore e il set in corso); accanto a ogni tasto compare il conteggio di quel giocatore **nel set in corso**. «Annulla» nella -sezione toglie l'ultima valutazione del set in corso (l'«Annulla» in alto resta per le azioni). +sezione toglie l'ultima valutazione del set in corso (l'«Annulla» in alto agisce solo sulle azioni, quindi oggi è sempre spento). Ogni tocco è una riga `Valutazione` (`giocatoreId`, `fondamentale`, `segno`, `set`, `ts`) in una lista separata da `azioni`; i conteggi per set si calcolano con `contaValutazioni()` @@ -93,6 +99,10 @@ stati salvati prima: vale lista vuota); a fine partita finiscono in `scout_parti ## Fine partita +**Limite attuale:** `chiudiSet()` e `finePartita()` si basano sui punti, che non si registrano più. «Chiudi +set» risponde «Set senza azioni» (quindi il set resta sempre il 1) e «Fine partita» «Nessun set da +salvare»: le valutazioni restano nello stato in corso e non arrivano in `scout_partite`. + `finePartita()` (`scout.tsx`) compone i parziali finali, inserisce la partita in `scout_partite` (INSERT, non upsert), poi cancella la riga da `scout_live` (stato consumato) e rilascia la sessione. @@ -134,10 +144,13 @@ calcolati a runtime). ## Limiti noti +- Senza punteggio, set e partita non si chiudono (vedi «Fine partita»): da risolvere, per esempio + chiudendo il set anche senza punti e salvando la partita con le sole valutazioni. - Scout aperto a tutta la squadra: nessun filtro su chi può registrare le azioni, l'unica garanzia è il lock di sessione (vedi sopra). - Possibile, per quanto improbabile, doppio "successo" applicativo nel prendere il lock: lettura e upsert non sono atomici. +- Avversario e campo non si correggono dallo scout. - `scout_partite` si inserisce ma non si corregge dall'interfaccia: solo eliminazione totale. - Abbinamento partita↔scout fatto anche per uguaglianza di data come fallback: ambiguo se due partite cadono lo stesso giorno.