Messaggio di fine partita, test a inizio stagione e documenti di stato

Il messaggio dopo «Fine partita» dice solo «Partita salvata» (il voto MVP apre 2 ore dopo
l'inizio, non dipende dallo scout). I due test che pretendevano una gara CSI già giocata
tollerano l'inizio stagione (uno si salta). «Calendario ufficiale» passa in «Fatto» nella
roadmap; PROJECT_STATE conta le migration fino alla m39.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
davideandClaude Sonnet 5.5 committed 2026-11-02 08:49:57 +01:00
1 parent ebafb98b32
commit 252e1528f6
5 files changed
+20 -19

No files matched your search

+7 -7
View File
@@ -1,6 +1,6 @@
# Project State
Ultimo aggiornamento: 26/10/2026
Ultimo aggiornamento: 02/11/2026
Questo file dice **a che punto siamo ora**. Le funzionalità stanno in
[docs/ROADMAP.md](docs/ROADMAP.md), i rilasci in [docs/CHANGELOG.md](docs/CHANGELOG.md), lo
@@ -21,11 +21,11 @@ schema in [docs/DATABASE.md](docs/DATABASE.md), le procedure in
[docs/CHANGELOG.md](docs/CHANGELOG.md).
- **Backend:** Supabase proprietario (`kfkcldwncxqaixetsjes`). Lovable Cloud e il vecchio
Project Ref `hetycilxgkdmccelwerq` non si usano più.
- **Migration:** 49 file in `supabase/migrations/`, fino a `m38_nome_votato_badge_social`. In produzione
sono applicate 45 su 49, fino alla `m34_link_maps_evento` (verificato con
`npx supabase migration list --linked` il 26/10/2026: le uniche mancanti sono `m35`-`m38`, nessuna
migration remota è assente dal repository). **Da applicare ancora: `m35`-`m38`**
(voto MVP e badge social, DD-051 e DD-052, branch `feature/gara`): `npx supabase db push` è rinviato
- **Migration:** 50 file in `supabase/migrations/`, fino a `m39_scout_valutazioni`. In produzione
sono applicate 45 su 50, fino alla `m34_link_maps_evento` (verificato con
`npx supabase migration list --linked` il 26/10/2026: le uniche mancanti sono `m35`-`m39`, nessuna
migration remota è assente dal repository). **Da applicare ancora: `m35`-`m39`**
(voto MVP e badge social, DD-051 e DD-052, valutazioni dello scout, DD-053; branch `feature/gara`): `npx supabase db push` è rinviato
per scelta, non è stato eseguito. Vanno applicate subito prima del rilascio del codice: con le sole
migration il voto MVP dell'app in produzione (1.4.2) smette di funzionare, con il solo codice la
vista dei conteggi non esiste.
@@ -38,7 +38,7 @@ schema in [docs/DATABASE.md](docs/DATABASE.md), le procedure in
- **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). Poi lo scout live ridotto alle valutazioni − / +
per set (DD-053), salvate subito su database. Migration `m39` da applicare in produzione. Non ancora in `main`, non rilasciato, versione
per set (DD-053), salvate subito su database. 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
+2 -2
View File
@@ -34,6 +34,8 @@ Tutto quello che è rilasciato, fino alla versione 1.0.0 (vedi `CHANGELOG.md`).
- [x] Collegamento CSI (stagione 2026/27)
- [x] Classifica automatica (campionato e Coppa)
- [x] Risultati campionato
- [x] Calendario ufficiale — le gare future del feed CSI compaiono già nella pagina Campionato:
a inizio stagione il calendario c'è prima dei risultati
- [x] Dettaglio partita — formazioni, storico scontri diretti e probabilità di vittoria
calcolata dal CSI
- [x] Ruolo allenatore — gestisce gli eventi e sollecita le presenze, profilo ridotto senza
@@ -54,8 +56,6 @@ Tutto quello che è rilasciato, fino alla versione 1.0.0 (vedi `CHANGELOG.md`).
## Prossimo
- [ ] Calendario ufficiale — i dati delle gare future arrivano già dal feed CSI, la pagina
Campionato usa solo quelle giocate
- [ ] Database esercizi
- [ ] AI Allenamenti
- [ ] Archivio allenamenti
+1 -1
View File
@@ -330,7 +330,7 @@ function ScoutBoard({
toast.error("Salvataggio non riuscito, riprova");
return;
}
toast.success("Partita salvata: ora la squadra può votare l'MVP");
toast.success("Partita salvata");
finito.current = true;
void cancella.mutateAsync(partita.id);
onFine();
+2 -4
View File
@@ -62,10 +62,8 @@ try {
const csi = (await json(res)) as DatiCsi;
const noi = csi.classifica.find((r) => isNostraSquadra(r.squadra));
assert.ok(noi, "la nostra squadra arriva dal portale");
assert.ok(
csi.partite.some((p) => p.setNostri !== null),
"ci sono risultati giocati",
);
// A inizio stagione il calendario c'è ma nessuna gara è ancora stata giocata.
assert.ok(csi.partite.length > 0, "le gare della stagione arrivano dal portale");
const html = await pagina("/classifica");
assert.match(titolo(html), /Classifica campionato/);
+8 -5
View File
@@ -124,9 +124,13 @@ try {
assert.ok(Date.now() - t0 < 2_000, "risposta immediata");
});
await provaCsi(
"GET /api/public/csi-partita/$id restituisce formazioni e precedenti",
async () => {
// A inizio stagione il calendario c'è ma nessuna gara è ancora stata giocata: il test
// del dettaglio non ha un bersaglio e si salta, come per il portale non raggiungibile.
const nomeDettaglio = "GET /api/public/csi-partita/$id restituisce formazioni e precedenti";
if (csiRaggiungibile && !partiteGiocate(csi?.partite ?? [])[0]) {
salta(nomeDettaglio, "nessuna gara ancora giocata nella stagione");
} else
await provaCsi(nomeDettaglio, async () => {
const primaGiocata = partiteGiocate(csi?.partite ?? [])[0];
assert.ok(primaGiocata, "serve almeno una gara giocata per testare il dettaglio");
const res = await fetch(url(`/api/public/csi-partita/${primaGiocata.id}`));
@@ -147,8 +151,7 @@ try {
const secondo = await fetch(url(`/api/public/csi-partita/${primaGiocata.id}`));
assert.equal(secondo.status, 200);
assert.ok(Date.now() - t0 < 2_000, "seconda chiamata dalla cache: risposta immediata");
},
);
});
await provaCsi(
"GET /api/public/csi-partita/$id con un id davvero inesistente risponde 503, non rompe",