Chiude i tre buchi di copertura rimasti dalla rilettura della documentazione:
comportamenti che la doc descrive come regole ma che nessun test verificava.
- conRisposta() esce da useSalvaPresenza e diventa una funzione pura in presenze.ts.
La mutation non rilegge dopo la scrittura, quindi la cache deve imitare il database:
l'istante si scrive solo se manca (??=) e il ritiro della risposta lo cancella. Erano
due dettagli che serie-presenze.md chiede di preservare e che un refactor poteva
perdere in silenzio, falsando la serie "Conferme 24h" fino al refresh successivo.
- permessi.test.ts copre ora anche il terzo gruppo di DD-023, le tabelle lasciate
aperte di proposito: scout_sessioni, scout_live, scout_partite e push_subscriptions.
Non dicono che sono sicure, dicono che sono aperte per scelta: se una prende un gate
nell'interfaccia, le policy devono seguirlo e questi casi vanno cambiati con loro.
- lettori-server.test.ts esegue leggiEventi() e leggiGiocatoriSquadra() sul database
locale, mettendo le credenziali in process.env prima della prima chiamata perché
supabaseAdmin nasce pigramente. Nessuna delle due controlla l'errore di PostgREST:
una colonna rinominata darebbe zero righe, zero destinatari e nessuna push, senza
che niente segnali il problema. Scrivendolo è emerso che eventi_app.note è NOT NULL,
mentre RigaEvento lo dichiara nullable.
PROJECT_STATE: m12_niente_autovoto è applicata in produzione dal 06/09/2026,
verificata con `npx supabase migration list` (23 migration, local = remote).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>