Home / Forum / Suggerimenti / Tornei a squadre atto secondo

Tornei a squadre atto secondo

Ciao, riapro una nuova discussione su questo argomento, per due ragioni: la precedente stava diventando troppo lunga, in presenza di più pagine il forum anziché posizionarti nell'ultima pagina per poter aggiungere un messaggio ti posiziona nella prima pagina, e devi manualmente raggiungere l'ultima per poter scrivere un nuovo messaggio. Inoltre, per qualche ragione, ora ogni volta che raggiungo l'ultima pagina mi chiede nuovamente l'accesso per poter scrivere, ed effettuandolo mi riporta alla Home! Poco male, era ora di cominciare un nuoco thread.

Volevo darti una nuova lista di considerazioni, che sono emerse da alcune difficoltà durante le iscrizioni del nostro ultimo torneo; quando avrai tempo dagli un'occhiata, ed eventualmente posso dilungarmi sulle ragioni delle singole richieste se necessario:


- "Aggiungi giocatore spaiato" deve consentire l'iscrizione solo per Cognome, senza Nome.

- "Aggiungi giocatore spaiato", quando si digita qualche carattere e compaioni dei giocatori che soddisfano il filtro, aggiungere alle informazioni presentate l'anno di nascita (campo "B-Year").

- Il rating di default di un giocatore non esistente nelle liste Fide deve essere 1399.

- Quando si espande una squadra, consentire l'aggiunta di un giocatore non presente nelle liste Fide tramite Cognome, e opzionalmente Nome e Elo. Inoltre consentire l'aggiunta di un giocatore dalla lista spaiati. Devono essere presenti quindi 5 possibilità: dai giocatori dell'utente (come ora), da Fide (come ora), da Fide ID (come ora), dalla lista spaiati, e con il solo Cognome, Nome e Elo. "Aggiungi giocatore" da lista o da spaiati deve consentire un filtro per la ricerca. Da valutare se il giocatore aggiunto al volo con il Cognome debba andare a finire nella lista giocatori dell'utente, tendenzialmente direi di sì.

- Quando si fa "Nuova squadra dai selezionati", il focus deve subito andare sul campo del nome, per poter cominciare subito a scrivere. Questa è una regola aurea che va propagata ovunque, non costringere l'operatore a cliccare con il mouse nel campo per cominciare a scrivere.

- A volte capita che la Fide non separi il campo Cognome dal Nome con una virgola, e quindi se si aggiunge un giocatore da Fide con queste caratteristiche, pur trovandolo non consente di proseguire perché manca il Nome. Questo chiaramente non va bene. Si può risolvere "indovinando" quale sia il Nome e il Cognome, ma può non essere semplice. Secondo me la cosa migliore è (come evidenziato nel primo punto), accettare l'iscrizione con il solo Cognome.

- Nuovo accenno all'importazione di un file per le iscrizioni. Ne avevamo parlato, ma secondo me bisognerebbe consentire l'iscrizione Bulk, per lo meno nei giocatori spaiati. Quindi l'aggiunta spaiati deve poter accettare un'elenco di giocatori, da un file di testo o anche solo da un riquadro in cui incollare l'elenco. Il formato è da decidere, ma secondo me basterebbe un formato "Cognome,Nome,Elo", uno per riga. O, in alternativa, la riga dovrebbe poter consentire anche il Fide ID (non credo esistano cognomi composti da soli numeri). Al termine dell'iscrizione Bulk deve formtire un report sul numero di righe incollate, e quanti giocatori sono stati effettivamente iscritti, evidenziando le righe che non è stato possibile elaborare per una qualunque ragione (es. Fide ID inesistente, o comunque per parsing fallito). Rimarrebbe da considerare se un Cognome presente nelle liste Fide possa essere catturato dalla lista stessa, ma questo rischia di diventare complicato (omonimie, a volte con lo stesso identico Cognome e Nome, più altre infide situazioni. Meglio tenerlo semplice, a aggiungere solo il Cognome. In assenza di Nome accettarlo senza Nome, e in assenza di Elo impostarlo a 1399. Quindi la riga "Paperino,,1756" o "Paperino,Paolino" o "Paperino" sono tutte valide.


Senti, possiamo considerare il problema del doppio Bye e dell'impossibilità di generare il turno in seguito al ritiro di una squadra pienamente compresi e risolti per il futuro? Ti assicuro che è stata una situazione davvero spiacevole... quando oltre al torneo ci sono i premi di mezzo la gente non è molto comprensiva! :)


Ciao e grazie come sempre,

Claudio.

Traduzioni: CS · EN · ES · FR · RU

ciao @Claudio

grazie come sempre per il feedback dettagliato e per il tempo che dedichi a far girare ChessPairings sul campo. Le tue segnalazioni dopo un torneo vero valgono più di mille test.

Vado per punti, partendo dalla tua domanda finale che è la più importante.

SUI BUG DEL TUO TORNEO (doppio bye e blocco dopo ritiro)

Ti dirò la verità: credo di sì, ma non ho una garanzia al 100%.

Ecco cosa è successo dietro le quinte:

1) Doppio bye: corretto in v4.7.2. La causa era nel TRF che mandavamo al motore di abbinamento bbpPairings — dichiaravamo il bye come "pareggio col virtuale" invece che come "bye assegnato al sistema", e così il motore non aveva modo di sapere che la squadra ne aveva già preso uno. Ora usiamo il marker corretto (PAB) e bbp6 onora automaticamente la regola FIDE "no double bye".

2) Generazione turno bloccata dopo ritiro squadra: corretto in v4.7.6. Quando una squadra si ritirava a metà torneo, il TRF generato conteneva riferimenti a quella squadra (perché altre squadre l'avevano incontrata) ma non la sua riga di intestazione, quindi bbp6 falliva con "Invalid line". Ora le squadre ritirate vengono incluse nel TRF con il flag XXZ che le esclude dal pairing ma preserva la coerenza dello storico.

3) Stress simulator (v4.7.7): abbiamo aggiunto un test automatico che gira 12 scenari completi (incluso ritiro di squadra e doppio bye) prima di ogni nuova versione. Se uno dei due bug torna, ce ne accorgiamo prima del deploy invece che durante il tuo torneo.

La conferma serena però la potremo dare solo dopo che qualche tuo torneo reale sarà passato indenne attraverso queste situazioni.

Per quanto i test siano accurati, la realtà è sempre più creativa.

Mi spiace molto della brutta esperienza, capisco che con i premi in palio non c'è margine di tolleranza.


═══════════════════════════════════════════════════════════

SULLE TUE 7 RICHIESTE — disponibili in v4.8.0 (release oggi)

═══════════════════════════════════════════════════════════


Implementate 3 richieste su 7. Ecco il dettaglio:


═══ ACCETTATE ═══


✓ B-Year nei risultati di "Aggiungi giocatore spaiato" Ora la ricerca FIDE mostra anche l'anno di nascita, sia nel pannello spaiati che nella ricerca dentro le squadre. Aiuta tantissimo nei casi di omonimia.

✓ "Aggiungi giocatore" nell'espansione squadra — 5 modalità. Ho rifatto completamente quella sezione. Ora trovi un selettore a pill orizzontale con cinque modi:

1) Dalla mia rosa (con filtro live)

2) Cerca FIDE (con B-Year nei risultati)

3) FIDE ID (textarea bulk, come prima)

4) Spaiati — selezione dalla lista degli spaiati di questo torneo, con filtro

5) Manuale — Cognome + Nome + Elo opzionale, con checkbox "aggiungi anche alla mia rosa giocatori" attivo di default

Ogni cambio modalità mette automaticamente il focus sul primo campo (la tua "regola aurea"). Niente più click obbligatorio per cominciare a scrivere.

Il giocatore aggiunto in modalità "Manuale" finisce nella tua rosa (se la checkbox è attiva). Se in rosa esiste già un giocatore con stesso cognome+nome, viene riutilizzato quello esistente invece di creare un duplicato.

✓ Importazione bulk di spaiati

Nel pannello spaiati c'è un nuovo bottone "Importa elenco". Apre una textarea dove puoi incollare un giocatore per riga nel formato:

Cognome,Nome[,Elo|FIDE_ID]


Esempi validi:

Rossi,Mario,1750 → Elo 1750
Verdi,Giovanni,12345678 → lookup FIDE (ID 8 cifre o più)
Bianchi,M → Elo 0, nome solo iniziale
Neri,Anna → Elo 0


La regola: il terzo campo, se numerico tra 0 e 3500 viene letto come Elo, se >3500 come FIDE ID (e in quel caso cognome/nome/rating vengono presi dall'archivio FIDE, ignorando quanto digitato).

Al termine compare un report: righe lette, giocatori iscritti, righe scartate con motivo per ognuna.

Ho preferito tenerla solo come paste, niente file upload, per ragioni di sicurezza.


═══ NON ACCETTATE ═══


✗ Iscrizione spaiato col solo Cognome (senza Nome)

Preferisco richiedere almeno l'iniziale del nome. Cognome-only rischia di lasciare dati troppo sparsi e ambigui (specialmente in presenza di omonimie). La validazione accetta "Rossi M." o

"Rossi Mario", ma non "Rossi" da solo.

Per lo stesso motivo, non implemento il fix per i giocatori FIDE senza virgola tra cognome e nome — sono casi sporadici e provare a "indovinare" la separazione introdurrebbe più errori che fix.

In quei casi ti consiglio di aggiungere il giocatore manualmente con Cognome + iniziale.

✗ Default Elo 1399 per giocatori senza rating

Il valore 1399 è specifico della Federazione Italiana, mentre ChessPairings è multilingua e usato anche fuori dall'Italia. Il default è 0. Se per i tuoi tornei è importante il 1399, puoi

ovviamente digitarlo a mano (anche nel bulk).

✗ Upload file per import spaiati

Solo paste in textarea, per ragioni di sicurezza dell'app.


Quando provi le novità fammi sapere come va — soprattutto se trovi qualche workflow scomodo o qualche cosa da limare.

Ah, e sul forum: prendo nota del problema dell'ultima pagina che torna alla home dopo il login. Lo guardo a parte.

Buoni tornei!

Stefano


Modificato il 05/05/2026 08:16

Ciao, ti avevo scritto la solita noiosa disamina, con tanto di statistiche sulle tabelle Fide, ma quando ho premuto "Pubblica risposta" mi ha detto che dovevo accedere e mi ha perso tutto! Per qualche motivo a volte il Forum perde l'accesso, e richiede nuovamente l'accesso. Sono demoralizzato per aver perso tutto (avevo scritto parecchio) e per non aver seguito la mia regola di copiare sempre il contenuto del post prima di provare a pubblicarlo :( Pazienza, quando riacquisterò fiducia nel mondo ci riproverò.


Ciao,

Claudio.

CIao @Claudio

in questi giorni ci sono altri 5 tornei a squadre e non ho ricevuto segnalazioni (ma 5 son pochi e non è detto che non ce ne siano state)

Ciao @stefanoloberti,

noi ci risiamo, adesso avremo ben tre tornei a squadre (stavolta con squadre da tre giocatori), che faranno parte di una combinata. Al momento non vedo la possibilità di gestire addirittura delle combinate, con classifiche totali dei vari risultati nei singoli tornei, magari di questo ne parleremo più avanti. Per il momento li tratteremo come tre tornei separati; però vedi che già in questo caso sarebbe utile poter duplicare un torneo, o per lo meno effettuare un export degli iscritti, che a meno di eccezioni saranno gli stessi per i tre tornei... altrimenti dovremo manualmente creare ogni singolo torneo, e iscrivere nuovamente tutti i giocatori del primo. Anche questo sarà un aspetto che tratteremo più avanti.


Come al solito, devo sottoporti qualche segnalazione preliminare e qualche richiesta di chiarimenti, grazie come al solito.


- Nelle impostazioni del torneo, una volta aperte le iscrizioni, non si possono né vedere né modificare le regole di spareggio. Se non ricordo male avevi messo questa possiblità alla fine del torneo, ma credo che si dovrebbe poter fare in qualsiasi momento, soprattutto prima che il torneo parta.

- Bug: nella "Lista giocatori" (quelli del tuo circolo per intenderci), se li si seleziona tutti, e poi si cerca di cancellarli, dice correttamente che vorrebbe cancellarli (indicando il numero totale), ma poi ne cancella solo uno!

- Come si può caricare il bando del torneo, in modo che uno lo possa consultare prima dell'iscrizione?

- Forse non lo vedo io, ma come fa un non amministratore a vedere l'elenco degli iscritti? Dovrebbe esserci un link pubblico che punta al torneo, dove si possa visualizzarne le caratteristiche, vedere gli iscritti, scaricare/visualizzare il bando, e poter usare un link per iscriversi. Sono io che non sto vedendo qualcosa, o non è stato previsto?


Ciao,

Claudio.

CIao @LTB oggi sarò in viaggio per Basilea per il Bundesturnier.


In treno mi metto sotto a vedere nel dettaglio le richieste anche se credo che prima di introdurre nuove funzionalità andrebbe fatto uno stress test per vedere se quello in produzione produce errori ed eccezioni per evitare di lasciare l'organizzare con la patata bollente di qualcosa di rotto.


Piccola nota sul bando, questo non è caricabile (come qualsiasi altro file) ma c'è un campo note dove potrai scrivere informazioni all'interno e quello che ne esce è una pagina come questa: https://my.chesspairings.org/pubblico/torneo.php?id=1381&token=10705c963d87ab2fac5f0dd8e104769b35dc66197c083d3606ec16cfe6561c56&tab=bando

Modificato il 13/05/2026 07:32

Ciao Stefano,

Il punto è proprio questo: come fa il pubblico a visualizzare queste informazioni durante la fase di iscrizione? Se si va al link pubblico ad iscrizione aperte, si vede solo il bottone Standings, un laconico "Standings not available yet", e null'altro (Es. https://my.chesspairings.org/pubblico/torneo_squadre.php?id=208&token=5f5b5aa47b850102f0424a8bad91d113bad9d40eff9fc4c3fb31bd8177241113)... il tab "Regulation/Bando" non c'è. La soluzione sembra "semplice", bisogna abilitare i tab "Participants" e "Regulations" anche in fase di iscrizione, altrimenti, ripeto, come fanno i giocatori a vedere queste informazioni? La cosa è talmente grossa che ho davvero il sospetto di aver perso qualcosa :)


Buona fortuna per Basilea!


Ciao,

Claudio.

CIao @LTB si effettivamente nella sezione torneo a squadre questo non è implementato. Mi ci metto ora

Ciao @LTB


Vado per punti, partendo dalla notizia migliore: tutte e quattro le segnalazioni che hai sollevato erano confermate nel codice, e sono risolte in v4.8.9 (online da oggi).


═══════════════════════════════════════════════════════════

LE TUE 4 SEGNALAZIONI — risolte in v4.8.9

═══════════════════════════════════════════════════════════


✓ Spareggi non visibili/modificabili durante le iscrizioni


Confermato: la card "Configura spareggi" era sepolta dentro il tab Classifica, che però è nascosto finché il torneo è in fase di iscrizione (non c'è ancora classifica da mostrare). Risultato: non c'era proprio modo di arrivarci.


L'ho spostata nel tab Impostazioni, in fondo. Ora è sempre accessibile e modificabile in qualsiasi stato del torneo — iscrizioni, in corso, concluso. Stesso identico drag&drop di prima, stessi preset.


✓ Bug "cancella tutti i giocatori del circolo" che ne eliminava 1


Bug reale, e abbastanza ridicolo una volta capito: la pagina aveva due form HTML annidati l'uno dentro l'altro (uno per la cancellazione massiva, uno dentro ogni riga della tabella per la cancellazione singola). I browser chiudono automaticamente il form esterno appena incontrano quello interno — quindi solo la prima checkbox finiva davvero nel POST. Il messaggio "vuoi cancellare N" era corretto perché contato lato JavaScript, ma poi il server ne riceveva 1. Sistemato.


✓ Caricamento del bando del torneo


Tecnicamente il campo c'era già (la textarea "Note" nelle impostazioni), ma con quel nome generico nessuno poteva indovinare che fosse il bando pubblico. Ho rinominato il campo in "Bando / Note del torneo", con un placeholder esplicativo (data, sede, premi, regolamento, contatti...) e una riga sotto che chiarisce: "Verrà mostrato come tab Bando nella pagina pubblica del torneo.").


✓ Vista pubblica durante le iscrizioni — la più grossa


Avevi ragione su tutta la linea: la pagina pubblica del torneo a squadre prima delle iscrizioni mostrava solo il tab Classifica con "Standings not available yet" e basta. Niente squadre iscritte, niente bando, niente link per iscriversi. Non avevi perso qualcosa — era proprio così.


Ora la pagina pubblica del torneo a squadre ha:


- Tab "Squadre" (sempre visibile, con contatore) → elenco delle squadre iscritte, ognuna espandibile per vedere la rosa giocatore-per-giocatore (titolo, cognome+nome, rating, FIDE ID, eventuali riserve in fondo). Durante le iscrizioni è il tab predefinito che si apre.


- Tab "Bando" → visibile quando hai compilato le note del torneo.


- CTA verde in evidenza "Iscrivi la tua squadra" nell'header, quando le iscrizioni online sono aperte. Con contatore "N / max squadre iscritte" se hai impostato un tetto.


- Tab "Classifica" / "Abbinamenti" → compaiono quando il torneo parte (turno > 0).


- Badge stato chiaro nell'header: verde "Iscrizioni", LIVE animato quando il torneo è in corso, grigio "Concluso" a fine torneo.



═══════════════════════════════════════════════════════════

DUPLICAZIONE TORNEO A SQUADRE═══════════════════════════════════════════════════════════


Hai detto "anche questo lo tratteremo più avanti", ma siccome sui tornei singoli la duplicazione c'era già, replicare lo stesso pattern sui tornei a squadre era una mattinata di lavoro. Quindi è dentro.


Come funziona:


Nella lista dei tuoi tornei a squadre c'è una nuova icona (foglio sovrapposto, azzurra) sulla destra di ogni torneo. Click → modal con il nome precompilato come "X (copia)" → conferma → ti porta

direttamente sul nuovo torneo.


Cosa copia:

• Impostazioni complete (tipo, turni, scacchiere, cadenza, colore iniziale, motore, ecc.)

• Configurazione degli spareggi (così non li rifai ogni volta)

• Tutte le squadre attive (nome, sigla, capitano, email capitano, numero squadra di seeding, rating medio)

• Tutta la rosa giocatori di ogni squadra, con ordine scacchiere e flag titolare/riserva


Cosa NON copia (volutamente):

• Risultati, abbinamenti, formazioni dei turni — il nuovo torneo

nasce vergine

• Squadre ritirate

• Iscritti individuali ancora in attesa di assegnazione

• Token pubblici e short code → vengono rigenerati ex novo, così i link della copia sono diversi da quelli dell'originale


Il nuovo torneo nasce in stato "iscrizioni", turno 0, data odierna. Da lì lo modifichi normalmente (nome definitivo, date, eventuali piccole differenze nelle rose).


Per la tua combinata di 3 tornei: crei il primo come al solito, duplichi due volte, e in 30 secondi hai i 3 tornei pronti con gli stessi giocatori. Risparmio stimato: una mezz'oretta per ogni

torneo che avresti dovuto re-iscrivere a mano.




Come al solito, quando provi le novità fammi sapere come va — anche solo "ok funziona" è prezioso, perché conferma che il fix tiene sul campo e non solo nei miei test. Io ho provato a gestire questo flusso (non altri del torneo a squadre) e non ho trovato errori


Buon torneo (ai tornei, anzi!),


Stefano


Grandioso, mi sembra tutto indirizzato, grazie! Sono perplesso sulla volontà di non copiare i giocatori spaiati quando si duplica il torneo, ma ci potrebbe anche stare... io li avrei duplicati anch'essi, potrebbe essere comodo per duplicare un torneo (farne uno snapshot) prima di comporre le squadre.

Infine, sarebbe comodo che un eventuale link nella sezione Note/Regulation/Bando risultasse cliccabile, così se si inserisse un link al proprio bando (o a qualunque altra cosa) l'utente possa raggiungerlo cliccandoci sopra. Al momento è tutto in plain text.


Ciao,

Claudio.

Ciao @LTB il plain text (quindi no HTML) è più sicuro per evitare injection di link malevoli che possono portare a creare alert sul dominio.


Ci sono quasi mille utenti ed ogni giorno vengono generati 1000 abbinamenti, la sicurezza è qualcosa di molto importante.

@LTB ho risolto il bug del forum del logout

Grande! Ma la strada del successo è lastricata di difficoltà e utenti rompiballe! Ecco un'altra infornata di considerazioni, ottenute durante dei test per evitare di trovarmi a dover fare i turni a mano durante i prossimi tornei :) Tra le considerazioni, alcune di lato estetico e altre opinabili, la più importante è quella relativa a poter modificare le imspostazioni del torneo in qualunque momento:


Iscrizioni:

- La pagina pubblica del torneo dovrebbe consentire di espandere tutte le squadre o di collassarle, così come hai fatto per la pagina dell'admin.


Turni:

- La visualizzazione dei turni è "brutta", bisognerebbe cercare di rendere i campi allineati. La "Vista estesa" va bene, ma la "Vista compatta" ha tutti i risultati disallineati. Anche la "Stampa turno" dovrebbe avere la colonna "RISULTATO" centrata rispetto alla pagina. Anche la pagina pubblica dei Parings è tutta disallineata.

- Secondo me quando si fa "Avvia torneo" dovrebbe generare automaticamente il primo turno, trovo ridondante il bottone "Genera Turno". Se l'obiezione è che così si può fare il Turno Manuale, questa possibilità è comunque presente una volta generato il turno, non serve chiedere all'utente di generare il turno.

- La gestione delle formazioni va affinata... è molto efficace in fase di iscrizione (basta spostare i giocatori con il mouse), ma durante il torneo non è chiara. Facciamo un caso pratico: mi sbaglio, e faccio partire il torneo con una formazione sbagliata. Faccio il primo turno, e al momento di inserire i risultati mi rendo conto che una formazione è errata, ma fortunatamente c'è il bottone "Gestisci Formazione" :) Allora la cambio (e già qui il cambio è molto meno efficace, mi obbliga a mettere temporaneamente una scacchiera vacante, e a fare il gioco delle tre carte per correggere la formazione finale). Faccio "Conferma Formazione" e va tutto a posto. Inserisco i miei risultati (anche qui non è chiaro il significato del "Salva risultati", sembra ridondante come bottone...). Genero il nuovo turno, e mi ripropone la formazione iniziale. Ci potrebbe anche stare, ma come posso combiare una formazione in modo definitivo fino alla fine del torneo? Allora vado in "Formazioni", e lì posso cambiare la formazione (con un sistema ancora diverso, che ti lascia anche impostare due volte lo stesso giocatore, salvo poi non fare andare a buon fine il "Salva Formazione", bisogna uniformare il metodo di cambio formazione). Torno negli "Abbinamenti", ma la modifica non c'è, e dovrei cambiarla nuovamente anche lì (perché se cancello e ricreo il turno la modifica fatta in "Formazioni" viene persa. Ancora peggio: tornati al primo turno, cambio la formazione relativa al turno 1, genero il turno 2, e mi ripropone la formazione iniziale, di cui non c'è più traccia da nessuna parte! Insomma, secondo me bisognerebbe poter cambiare temporaneamente una formazione al momento dell'introduzione dei risultati (uniformando la modalità di cambio), e questo va bene, ma dovrebbe potermi permettere di modificare una formazione in modo stabile per i turni a venire. Ricordo che durante l'ultimo torneo è successo proprio questo, una squadra era stata inserita con una formazione sbagliata, e ad ogni turno manualmente bisognava ricordarsi di modificare la formazione prima di inserire i risultati.

- L'avevamo già visto nei tornei individuali, ma in quelli a squadre non trovo la possibilità di modificare il torneo durante i turni (es. il numero turni, o i metodi di spareggio). Questo è particolarmente grave perché se fai partire un torneo con un numero di turni eccessivo rispetto ai giocatori, non ne esci più: pur lasciandotelo fare, arrivi al punto in cui sei bloccato con il messaggio "Pairing engine error: Error while pairing /tmp/....trf. No valid pairings exists... etc.". Il messaggio di Pairing engine error durante un torneo *non* deve succedere, deve essere prevenuto! E in questo caso non hai nemmeno modo di uscirne! Le impostazioni del torneo devono sempre essere accessibili dall'inizio alla fine.


Fine torneo:

- La classifica finale comprende sia quella per le squadre che per scacchiera, ma l'Export (PDF, CSV, etc) comprende solo la classifica per squadra e non c'è quella per scacchiera. O la si mette in coda a quella per squadre, o serve un bottone specifico per esportarla. Inoltre la classifica per scacchiera non utilizza nessun Tie Break, bisognerebbe prevederli anche lì.


Ciao,

Claudio.

ciao @LTB

solita batteria di feedback solida, sempre con il vantaggio di venire dalla sala torneo e non da un test in laboratorio — grazie.

La v5.4.0 è online da oggi e contiene cinque dei sei punti che hai sollevato. Il sesto (l'avvio che genera anche il turno 1) l'ho lasciato fuori per scelta.


Vado per punti seguendo la struttura della risposta.

═══════════════════════════════════════════════════════════

ISCRIZIONI — espandi/collassa pagina pubblica

═══════════════════════════════════════════════════════════

✓ Fatto.

Sulla pagina pubblica del torneo a squadre, sopra la lista delle squadre, ora ci sono i due bottoni "Espandi tutte" / "Collassa tutte" identici a quelli dell'admin. I singoli triangolini sui <details> di ogni squadra continuano a funzionare in modo indipendente, quindi puoi aprire solo le squadre che ti interessano o aprirle tutte in colpo solo, come preferisci.

═══════════════════════════════════════════════════════════

TURNI — allineamenti

═══════════════════════════════════════════════════════════

✓ Fatto su tutti e tre i fronti che mi hai segnalato.

  1. Vista compatta abbinamenti (admin) — il problema era che la riga dell'header card si comportava come uno spazio "flex" libero: se un nome squadra era più lungo di un altro, il punteggio a destra slittava di qualche pixel. L'ho convertita a griglia con colonna punteggio fissa e cifre tabulari (così "1.5 - 0.5" e "2 - 0" occupano la stessa larghezza). Ora i risultati sono incolonnati anche scorrendo verticalmente.
  2. Stampa turno — la colonna RISULTATO era larga 55px, troppo per "½-½". Portata a 78px, table-layout fisso, vertical-align middle. La riga ora respira ed è simmetrica rispetto alla pagina.
  3. Pagina pubblica pairings — la griglia era rigida e su nomi lunghi rompeva l'allineamento. Riscritta con colonne nominate e minmax(0, 1fr) sui nomi, tabular-nums su rating e risultato.


Mentre ci lavoravo ho beccato anche un bug che tu non avevi segnalato ma che si manifestava: nell'export TXT della classifica squadre, la riga "LTBagna Càuda" era disallineata di un carattere rispetto alle altre. Causa: la "à" è 2 byte UTF-8 e PHP contava i byte invece dei caratteri quando faceva il padding della colonna. Sostituito sprintf con mb_str_pad. Riga ora dritta.

═══════════════════════════════════════════════════════════

TURNI — gestione formazioni

═══════════════════════════════════════════════════════════

✓ Fatto la cosa importante. Non ho unificato le tre UI sotto un componente unico (sarebbe stato troppo invasivo per ora), ma ho risolto il problema funzionale che descrivi.

Il caso che mi raccontavi — "una squadra parte con formazione sbagliata, ogni turno devo ricordarmi di sistemarla manualmente" — è ora gestito così:

  1. In ognuno dei tre punti dove oggi puoi modificare una formazione (drag&drop in iscrizione, tab Formazioni, "Gestisci Formazione" durante un turno) c'è una checkbox sotto la formazione: "☐ Applica anche come formazione predefinita per i prossimi turni". Se la lasci vuota, la modifica vale solo per questo turno (comportamento attuale, utile per il caso "oggi mi tengo X in panchina perché ha avuto la febbre"). Se la spunti, la modifica diventa anche la NUOVA formazione di default: la rosa viene riordinata (scacchiera_default aggiornata) e tutti i turni futuri partiranno da lì invece che dall'ordine iniziale.
  2. Validazione anti-duplicato server-side ovunque. Prima il tab "Formazioni" ti lasciava mettere lo stesso giocatore su due scacchiere e poi fallire al salvataggio in modo poco chiaro. Ora in tutti e tre i flussi (impostaFormazione, aggiornaFormazioneDefault, rigeneraPartiteMatch del match in turno) viene rifiutato con messaggio esplicito: "Lo stesso giocatore è assegnato a due scacchiere (1 e 2). Correggi la formazione prima di salvare."


In sostanza: durante il torneo, se al turno 2 ti accorgi che la formazione di una squadra era sbagliata, spunti la checkbox una volta sola e dai turni 3-4-5 viene presa quella corretta. Niente più "ricordarsi ad ogni turno". Nell'unificare graficamente le tre UI sotto un singolo componente drag&drop magari ci torno più avanti, ma il valore lo prende già la versione di adesso.

Sul "Salva risultati" che ti sembrava ridondante: la label non è ottimale, l'ho lasciata perché il bottone fa il commit definitivo dei risultati che fino a quel momento sono in autosave (lo storico viene aggiornato solo al click). Ma hai ragione che non si capisce benissimo. Ci ragiono.

═══════════════════════════════════════════════════════════

TURNI — modifica impostazioni in corso + "Pairing engine error"

═══════════════════════════════════════════════════════════

✓ Fatto, e secondo me è il fix più importante di questo giro.

Il caso che descrivevi — torneo con 9 turni e 6 squadre, ti arriva "No valid pairings exists" e non puoi uscirne — adesso non è più possibile. Due cose:


  1. La tab "Impostazioni" del torneo a squadre era visibile solo in fase di iscrizione. L'ho resa visibile sempre, in qualsiasi stato (iscrizioni, in corso, concluso). A torneo avviato ti compare un banner giallo "⚠ Torneo in corso..." che chiarisce cosa puoi cambiare (numero turni, spareggi) e cosa no (tipo torneo, numero scacchiere — quelli cambiarli a torneo iniziato farebbe danni). Il campo "Numero turni" ha min=turno_corrente, quindi non puoi mai ridurlo sotto il turno che stai giocando.
  2. Prima di chiamare il motore di pairing (bbpPairings/py4swiss) ho aggiunto una sanity check: se il numero di turni è oltre il limite teorico per le squadre attive (N-1 per N pari, N per N dispari, con il bye), genero un errore CHIARO prima ancora che il motore venga interrogato. Messaggio: "Numero di turni insufficiente o eccessivo per le N squadre attive: non è possibile generare ulteriori abbinamenti validi. Riduci i turni a X o concludi il torneo." E come fallback di sicurezza, se per qualche edge case il motore restituisse comunque "no valid pairings" nonostante la pre-check, intercetto il messaggio tecnico e lo sostituisco con la stessa formulazione user-friendly.


Detto in altri termini: "Pairing engine error" e le altre formulazioni criptiche del motore non dovrebbero più arrivare davanti agli occhi di un arbitro durante un torneo dal vivo. Mai più.

═══════════════════════════════════════════════════════════

FINE TORNEO — export classifica per scacchiera + tiebreak

═══════════════════════════════════════════════════════════

✓ Fatto entrambi.

• La classifica per scacchiera ora ha tiebreak: Buchholz (BH), Buchholz Cut1 (BH-C1) e Sonneborn-Berger (SB), calcolati sulle partite di quella scacchiera. L'ordinamento è Punti → BH → BH-C1 → SB → % → Rating, quindi due giocatori a pari punti su una scacchiera non vengono più ordinati arbitrariamente per rating.

• Gli export PDF, CSV e TXT ora includono in coda la sezione "Classifica per scacchiera", una tabella per ogni scacchiera con tutte le colonne (posizione, giocatore, squadra, rating, partite, punti, %, BH, BH-C1, SB). Per il PDF è uno scroll in più sotto la classifica squadre, per il CSV è un foglio aggiuntivo separato da righe vuote (così Excel ti rispetta le sezioni), per il TXT è la stessa sezione in monospaziato.

═══════════════════════════════════════════════════════════

"AVVIA TORNEO" GENERA AUTOMATICAMENTE IL TURNO 1 — non l'ho fatto

═══════════════════════════════════════════════════════════

Ho preso seriamente l'obiezione che la possibilità di "turno manuale" non è un vero motivo (sono d'accordo: una volta in stato in_corso il bottone "Turno manuale" è comunque disponibile a fianco di "Genera turno"). Però c'è un altro motivo, e per come la vedo è abbastanza pesante: "Avvia torneo" oggi è una transizione di stato esplicita: passa il torneo da "iscrizioni" (in cui chiunque può iscriversi/ritirarsi/correggere la rosa) a "in_corso" (in cui le squadre sono lockate per il pairing). È il momento in cui tu fai mentalmente check: ho confermato il numero di squadre? manca qualcuno che doveva arrivare e magari arriva tardi? c'è una rosa incompleta da sistemare? i miei dati di seeding sono giusti?

Mantenere "Avvia" e "Genera turno 1" come due step separati ti dà un cuscinetto di pochi secondi in cui hai il torneo "vivo" sotto gli occhi ma il primo abbinamento NON è ancora stato sorteggiato, quindi puoi ancora intervenire senza dover cancellare un turno (operazione che resta possibile ma è più "rumorosa" perché obbliga a rigenerare). Specialmente in tornei serali dove un capitano si presenta in ritardo, quel cuscinetto è prezioso.

In più, lo stesso pattern (Avvia → Genera turno) è già quello dei tornei singoli. Tenerlo simmetrico semplifica la documentazione e non sorprende chi usa entrambi.

L'extra click è 1 click. Il rischio nel saltarlo, per me, è strutturale.


Detto questo si parla di forse 1 o 2 secondi ad abbinamento, più che accettabile

═══════════════════════════════════════════════════════════

Come sempre, quando provi sul torneo vero fammi sapere com'è andata — soprattutto sul punto del pairing engine error (quello del torneo bloccato), che è quello che voglio essere davvero certo di aver chiuso.


Stefano


Ciao Stefano,

Wow! Così tante cose indirizzate in così poco tempo... complimenti!

C'è ancora qualche inezia grafica, ma le indirizzeremo risolte le cose importanti! :)


Una piccola apperente dimenticanza: prendo ancora il Pair Engine Error se modifico il numero turni a torneo in corso... accetta un numero esagerato, e poi quando non riesce più a generare il turno viene fuori il messaggio. Ma mi lascia generare un turno manuale senza fiatare (e questo va bene, lasciamolo, se non crea altri mal di pancia lasciamolo).


Secondo me poi dovresti dare la possibilità di riaprire un torneo concluso, al momento non pare esserci la possibilità. Ti faccio un caso pratico, metto dentro l'ultimo turno, concludo il torneo e pubblico la classifica; salta fuori tizio che dice che il suo risultato dell'ultimo turno è sbagliato! Cosa faccio?


Mi sono accorto anche che posso ritirare una squadra, ma non sono in grado di aggiungere una squadra a torneo iniziato; se mi arriva un ritardario che voglio fare entrare dal secondo turno che faccio?


Per il resto molto bene! Adesso, per gestire la nostra combinata, ho realizzato una piccola applicazione web, dove gli posso dare in pasto le classifiche esportate "TXT (Report)" (che sono utili come l'oro), le analizzo e faccio la classifica combinata dei vari tornei, pesando i risultati in base al numero di turni del singolo torneo. Se se interessato a vederlo al momento l'ho parcheggiato su un mio spazio web, ti posso inviare in privato l'URL. Al momento mi calcola solo le classifiche delle squadre, ma adesso che mi hai aggiunto le classifiche di scacchiera nell'export aggiungo anche quelle (spero non mi cambierai il layout a breve...). Magari un giorno riuscirai anche ad implementare il concetto di combinata.


Grazie ancora e ciao.

Claudio.

Ciao @LTB


grazie per la risposta e per essere tornato sui punti aperti con la solita precisione. Vado per i tre temi che hai sollevato, più una nota a piè di pagina sulla combinata.


═══════════════════════════════════════════════════════════

PAIRING ENGINE ERROR — chiuso davvero, stavolta (spero)

═══════════════════════════════════════════════════════════


✓ Fatto. Avevi ragione: nonostante il fix v5.4.0 lo prendevi ancora. Ho fatto autopsia e trovato due falle che si erano insinuate:


(1) Il salvataggio impostazioni accettava qualsiasi `num_turni` nel range 1-30 senza controllare il massimo teorico Swiss per le squadre attive. Quindi se mettevi "20 turni" con 6 squadre il salvataggio passava liscio e ti ritrovavi nel dead-end quando il motore arrivava al limite.


(2) Il fallback che intercettava l'errore tecnico per riformularlo user-friendly matchava solo la stringa "no valid pairings". Se bbp6 restituiva "Pairing engine error" alla lettera (o "Cannot pair", o altre formulazioni interne), il messaggio criptico passava intatto.


La cosa interessante della tua osservazione è la frase "ma mi lascia generare un turno manuale senza fiatare, e va bene, lasciamolo". Te l'ho presa come specifica esplicita: il punto NON è impedirti di salvare num_turni alti — quello ti taglierebbe via la valvola di sfogo del pairing manuale. Il punto è non farti finire davanti a un errore criptico.


Quindi ho strutturato il fix in tre livelli:


• Salvataggio impostazioni: se metti `num_turni > max_teorico` con torneo in corso, il salvataggio passa, ma compare un warning giallo: "Attenzione: con 6 squadre attive il pairing automatico copre al massimo 5 turni. I turni eccedenti andranno generati manualmente." Lo vedi e sai cosa aspettarti.


• Pairing automatico (Genera turno): blocca con un messaggio che esplicita la via d'uscita — "Pairing automatico esaurito per 6 squadre attive (massimo teorico 5 turni). Usa 'Pairing manuale' per generare turni aggiuntivi, oppure riduci num_turni a 5 e concludi il torneo." Niente più dead-end senza istruzioni operative.


• Pairing manuale: nessun blocco, mai. Esattamente come chiedevi.


Inoltre, indipendentemente dai tre livelli sopra, ho allargato il catch sull'errore del motore in modo che intercetti anche "Pairing engine error" alla lettera e qualsiasi altra formulazione tecnica generica. Se per qualunque motivo bbp6 fallisce per altre cause (per esempio vincoli di colore irrisolvibili al turno 3 con max teorico 5), invece di propagarti la stringa cruda vedi: "Il motore di pairing non è riuscito a generare il turno (...). Possibili cause: troppi turni per le squadre attive, vincoli di colore irrisolvibili. Puoi usare 'Pairing manuale' oppure ridurre num_turni e concludere."


In due parole: "Pairing engine error" e amici non dovrebbero mai più raggiungere l'arbitro in sala. Mai più davvero, stavolta.


═══════════════════════════════════════════════════════════

RIAPRI TORNEO CONCLUSO — fatto

═══════════════════════════════════════════════════════════


✓ Fatto. Il tuo caso pratico è perfetto come specifica: arbitro conclude il torneo, pubblica la classifica, salta fuori un risultato dell'ultimo turno sbagliato. Adesso c'è una via legittima.


Nel torneo a squadre concluso, accanto allo step finale del torneo trovi un bottone giallo "Riapri Torneo" con conferma esplicita. Cliccandolo:


• Lo stato del torneo torna a "in corso"

• La classifica finale delle squadre viene azzerata (verrà ricalcolata al prossimo "Concludi")

• Il turno_corrente resta invariato (siamo all'ultimo), quindi la UI risultati torna immediatamente disponibile per la correzione

• Correggi il risultato sbagliato e ripremi "Concludi Torneo" — la classifica finale viene ricalcolata e riassegnata


Curiosità: per i tornei individuali questa funzione esisteva già dalla v4.8.5 (nessuno me l'aveva mai chiesto per le squadre prima di te). Buona simmetria comunque ora.


═══════════════════════════════════════════════════════════

AGGIUNGI SQUADRA A TORNEO INIZIATO — rinviato a v5.6, e ti spiego perché

═══════════════════════════════════════════════════════════


Su questo non chiudo, e voglio essere onesto sul motivo.


La UI è banale (sbloccare il form "Aggiungi squadra" anche quando lo stato è "in_corso"). Quello che NON è banale è dire a bbp6 che esiste una squadra che non ha giocato i turni passati. Il formato TRF FIDE non ha un codice ufficiale per "squadra entrata al turno N". Si potrebbe:


• non scrivere niente per i turni mancati (riga 001 più corta delle altre)

• scrivere "Z" (zero-point bye) per ogni turno mancato — ma Z significa "ritirata permanente", bbp6 potrebbe escluderla anche dal turno corrente

• scrivere "U" (unplayed) — non ufficialmente FIDE ma supportato da alcune versioni del motore

• scrivere "H" (half-point bye) — le darebbe punti gratis, sbagliato


Quale di queste bbp6 accetta in modo che produca abbinamenti validi (con la nuova squadra effettivamente inclusa nel turno corrente)? Non Posso testarlo a freddo: posso solo provare in produzione e da Basilea mi viene difficile


Per non scrivere codice produttivo alla cieca su un caso che durante un torneo dal vivo sarebbe particolarmente fastidioso da scoprire rotto, ho preparato un PoC mirato e l'ho già fatto girare. Costruisce un torneo Swiss 4+1 squadre in memoria (non tocca DB), prova le 4 strategie sopra, chiama bbp6 reale per ciascuna e mostra abbinamenti/errore.


Risultato netto: SHORT e Z funzionano entrambe e bbp6 include la squadra nuova negli abbinamenti del turno corrente (Echo gioca contro Alpha nel turno 3, perfetto). U e H falliscono perché bbp6 verifica che la somma punti dei turni nella riga 001 quadri col campo punti dichiarato, e non riconosce quei codici.


Lato implementazione, la scoperta del PoC mi semplifica il lavoro: in v5.6 sblocco il form "Aggiungi squadra" anche a torneo in corso (con un warning del tipo "squadra senza punti per i turni passati"), assegno il numero di squadra successivo all'ultimo (senza riordinare le altre, sennò si rompono gli storici di pairing) e basta. Il fallback Z nel generatore TRF c'è già di suo, quindi non devo nemmeno scrivere record fittizi a DB. Stima 1-2 ore + test. Te lo do in v5.6 senza fretta — fammi sapere se nei prossimi tornei ti capita qualcuno in ritardo e ti accorgi che ti serve subito.


Workaround nel frattempo (pesante ma sicuro): in fase di iscrizioni, se sospetti che possa arrivare qualcuno in ritardo, lascia una squadra "placeholder" con un capitano fittizio. Se non si presenta nessuno la ritiri al turno 1 (e Z funziona già perfettamente per le ritirate). Se arriva il ritardatario, rinomini la placeholder e ci metti la sua rosa. È brutto ma è l'unica via certa adesso. Lo so, lo so.


═══════════════════════════════════════════════════════════

SULLA TUA APP DI COMBINATA

═══════════════════════════════════════════════════════════


Molto bello che ti sia costruito l'app per la combinata pesando i risultati per numero turni. Sul mio lato: l'export TXT delle classifiche lo tratto come API contract da qui in avanti — il layout non lo tocco senza avvisarti prima. Se aggiungi le classifiche di scacchiera (che adesso sono uscite anch'esse in TXT in v5.4) e ci trovi qualche piccolezza che ti farebbe comodo standardizzare, mandami due righe e la considero.


Sulla combinata nativa lato applicazione: la richiesta è interessante, ma per ora la lascio fuori. Vediamo come si evolve il tuo caso d'uso — se diventa qualcosa che usi tutti i mesi e vorresti integrato, ci torniamo con specifiche più stabili.


═══════════════════════════════════════════════════════════


Come sempre, dopo che hai messo le mani sui due fix in sala (engine error e riapri torneo concluso), fammi sapere com'è andata. Sul punto 3 mando io quando il PoC produce un risultato pulito.


Stefano


Modificato il 17/05/2026 10:43

Ciao Stefano,

ho provato le modifiche. La possibilità di riaprire il torneo funziona, e ti assicuro che è un'ancora di salvataggio imprescindibile!

- Pair Engine Error: ti confermo che i messaggi ora sembrano essere catturati e riconfezionati... forse si potrebbe dire che il tempo per il quale viene fuori il lungo e complicato messaggio difficilmente di consente di leggerlo, un messaggio del genere (che probabilmente genera panico) dovrebbe chiedere una conferma per continuare. Però c'è una stranezza bloccante: con un torneo a 6 squadre di tre componenti ognuna, anche se il programma ti accetta un numero di turni superiore a 5, non sembra esserci modo di andare oltre il terzo turno (anziché il quinto come direbbe la logica). Puoi controllare se effettivamente è il bbp6 a fare i capricci, o c'è qualche altra ragione? Se cancello tutti i turni (operazione un po' lunga se il numero di turni è elevato), e si cambia il torneo da Swiss a Round Robin (anche se ti accetta un numero di turni incongruente... bisognerebbe, nel caso di round robin, "grigiare" il numero turni a n-1. Anche perché in modo silente il programma ti cambia il numero turni a n-1 non appena fai partire il torneo, anche se avevi messo un numero diverso), il torneo va regolarmente al termine con 5 turni. Scusa l'eccessivo uso di parentesi per descrivere le situazioni, ma scrivo mentre provo.

- Iscrizione ritardatari: capisco le implicazioni. L'escamotage del Place Holder decisamente non è semplice, e dovresti sempre prevederlo in anticipo :) Vediamo se il PoC riesce a validare l'introduzione di una nuova squadra in qualunque momento...


Suggerimento: nella "Stampa turno", che generalmente l'arbitro usa per stampare e appendere i turni, aggiungi in alto a destra un QR Code che punta alla pagina pubblica del torneo, così chi vuole se lo inquadra e si guarda i turni sul suo telefono, compresi i successivi...


Ciao,

Claudio.

ciao @LTB

prima di tutto la cosa importante: il blocco sul tuo 6 squadre Swiss l'ho identificato e fixato. Va in v5.5.1, ti spiego sotto. Sugli altri punti ti rispondo per ordine.


═══════════════════════════════════════════════════════════

BUG BLOCCANTE — 6 SQUADRE SI FERMA AL TURNO 3 (FIX v5.5.1)

═══════════════════════════════════════════════════════════

✓ Fatto. E avevi ragione tu sul sospetto "bbp6 che fa i capricci": il colpevole era proprio bbp6, ma a causa di un'informazione sbagliata che gli stavamo passando noi.

Root cause: nel TRF che mandiamo al motore c'è un record (XXR) che dichiara quanti turni durerà il torneo. Se tu metti num_turni=7 con 6 squadre, noi gli scrivevamo "XXR 7" pari pari. bbp6 a quel punto fa lookahead: vede che il massimo teorico di un Swiss a 6 squadre è N-1 = 5 turni distinti, calcola che dopo il turno 3 gli restano solo 2 turni pairabili contro i 4 dichiarati, e rifiuta gli abbinamenti già dal turno 4 con "no valid pairings". Non è un capriccio, è proprio FIDE-compliant: il motore non vuole impegnarsi a iniziare un torneo che sa di non poter completare.

Soluzione: nel TRF cappiamo XXR a max_teorico (5 nel tuo caso) PRIMA di mandarlo a bbp6. Il num_turni che hai impostato nel torneo resta invariato in database — quindi i turni eccedenti li puoi sempre generare via pairing manuale, esattamente l'intento di v5.5.0. Semplicemente bbp6 vede solo quello che è in grado di completare automaticamente.

Conseguenza pratica per te: il tuo 6 squadre Swiss adesso ti pairizza fino al turno 5 senza intoppi, qualunque sia il num_turni che hai impostato (5, 6, 10, 30 — non importa). I turni 6+ continui a generarli a mano se ti servono.

Test automatici scritti per blindare: 4 scenari (cap pari, cap dispari con squadra ritirata, no-cap quando num_turni è già nel range), tutti passano.

═══════════════════════════════════════════════════════════

ROUND ROBIN — num_turni silenzioso (rinviato, non bloccante)

═══════════════════════════════════════════════════════════

Hai ragione: nel Round Robin il valore num_turni è di fatto inutilizzato (l'algoritmo Berger imposta sempre N-1 per N pari, N per N dispari). Però oggi il campo è un input libero, e questo è confondente.

Lo metto in lista per la prossima patch (v5.5.2 o v5.6): quando tipo_torneo='round_robin' il campo num_turni diventa disabilitato/grigiato e si auto-aggiorna a N-1 (o N con BYE) appena cambi il numero di squadre, con un piccolo tooltip che spiega perché.

Non l'ho messo in v5.5.1 perché è UX cosmetica e il fix sopra era urgente: meglio non rallentarlo.

═══════════════════════════════════════════════════════════

ENGINE ERROR — il messaggio sparisce troppo veloce

═══════════════════════════════════════════════════════════

Centrato. Oggi è un flash giallo/rosso che si auto-dismissa, ma se l'arbitro è in sala e gli sta intorno una decina di giocatori che chiedono "quando partiamo?", quel messaggio non lo legge.

In v5.5.2 (o v5.6) lo trasformo in modale con conferma esplicita "Ho capito" per gli errori del motore di pairing. Gli altri flash informativi restano come sono — non voglio appesantire la UX su roba routine, ma sull'errore del pairing engine sì, deve essere ostinato.

═══════════════════════════════════════════════════════════

QR CODE NELLA STAMPA TURNO — c'è già!

═══════════════════════════════════════════════════════════

Buona notizia: il QR code in "Stampa turno" è in produzione da un po', sia per i tornei individuali che per quelli a squadre. Lo trovi in alto a destra sulla stampa A4. Punta direttamente alla pagina pubblica del torneo, dove i giocatori vedono abbinamenti e classifica in tempo reale.

La ragione per cui forse non te l'eri visto: appare SOLO se il torneo ha la visibilità pubblica attivata (e quindi un token_pubblico generato). Se nelle impostazioni del torneo lasci "privato", il QR non viene stampato (sarebbe inutile, la pagina non sarebbe accessibile).

Quindi:

  1. Vai in Impostazioni torneo
  2. Visibilità → "Pubblico"
  3. Salva
  4. Ristampa il turno → il QR code apparirà in alto a destra


Se invece intendevi un QR sul foglio iscrizioni o sulla classifica, dimmelo e lo aggiungo lì.

═══════════════════════════════════════════════════════════

ISCRIZIONE RITARDATARI — PoC in corso

═══════════════════════════════════════════════════════════

Confermo che il PoC che ti raccontavo in v5.5.0 sta dando segnali positivi (Z e SHORT funzionano entrambe con bbp6). Te lo do in v5.6 quando l'ho integrato pulito nel form "Aggiungi squadra a torneo in corso". Sul placeholder hai ragione che è una stampella — la realtà è che fino a v5.6 è l'unica via certa, e te ne chiedo scusa.

═══════════════════════════════════════════════════════════


In sintesi:

• v5.5.1 (oggi): fix bug 6 squadre, ovvero il punto bloccante

• v5.5.2/v5.6 (a breve): RR greyout, modale conferma engine error

• v5.6: iscrizione ritardatari da PoC validato


Quando hai un attimo, riprova il tuo 6 squadre Swiss con il num_turni che vuoi: deve andare avanti fino al turno 5 senza più "Pairing engine error" né stop al turno 3. Fammi sapere com'è andata.


Ciao Stefano,

sono contento che abbiamo trovato questo "bug" nell'alimentazione di bbp6, era piuttosto infido! E ho visto che hai ormai messo la 5.6.3. Ho provato, ma il Genera Turno fallisce con lo stesso messaggio (stavolta modale). Ho anche provato a cancellare il turno (il terzo), e a ricrearlo, ma si ferma sempra al terzo turno e non genera il quarto. Allora ho provato a cancellare tutti i turni, in modo da ripassare dall'Avvia Torneo, e ha funzionato fino al quinto. A questo punto sospetto che la modifica abbia effetto solo se il torneo è stato avviato con la versione nuova, altrimenti l'XXR era già stato inviato.

Sì, il numero turni del Round Robin non è urgente, può aspettare.

Però il QR Code non lo vedo proprio :) Ovviamente io mi riferisco alla "Stampa turno" dell'admin, perché è quello che l'arbitro stampa e appende in sala. Per intenderci, come esempio, questo link: https://my.chesspairings.org/stampa_abbinamenti_squadre.php?id=225&turno=1. Mentre invece nella sezione pubblica effettivamente c'è un QR Code che punta a Telegram ("Segui questo torneo su Telegram"), ma il riquadro dedicato è comunque tutto bianco (es. https://my.chesspairings.org/pubblico/torneo_squadre.php?id=225&token=1cc53800c380a43d37ab097d5509b97ace5f78718b7e09f3a725f8ddcd0fdeb8). Però se sono già nella pagina pubblica non mi serve un QR Code alla pagina pubblica, serve a chi vede il turno stanpato dall'admin. E se vado nelle impostazioni del torneo, non trovo un flag "Visibilità -> Pubblico", vedo solo un "Iscrizioni squadra online" e un "Iscrizioni online individuali". Stessa cosa nella creazione del torneo. Inoltre, come dicevi, servirebbe un QR Code anche nella classifica (che punti alla classifica pubblica), oltre che per comodità anche per dare maggiore visibilità al tuo programma. Quindi qui sono un po' confuso. Però ho trovato il flag nei tornei individuali, forse non l'hai propagato alle squadre?!

Sono confuso anche sulla possibilità di aggiungere i ritardatari... avevo capito che dalla 5.6 ci sarebbe stata la possiblità, io vedo la 5.6.3 online, ma non vedo un "Aggiungi squadra a torneo in corso"... forse ho capito male.


Ciao,

Claudio.


Modificato il 18/05/2026 21:38

ciao @LTB

ho chiuso tutti i tre punti che mi avevi segnalato dopo la v5.6.3. Te li riepilogo per ordine. Sono già tutti in produzione (v5.6.9 al footer).

═══════════════════════════════════════════════════════════

ISCRIZIONE RITARDATARI SQUADRE — v5.6.4

═══════════════════════════════════════════════════════════


✓ Fatto. Replicato il pattern dei tornei individuali (esisteva già in mig 051) anche per le squadre.

Come si attiva: in Impostazioni torneo trovi un nuovo flag "Consenti iscrizione tardiva" (visibile solo per Swiss, l'RR per definizione ha calendario fisso). Quando è attivo e il torneo è in corso, nella scheda Squadre compare una card arancio "Aggiungi squadra a torneo in corso". La squadra entra dal turno successivo a 0 punti e con numero_squadra MAX+1 (non rinumero il seeding originale, mantengo la storia TRF di bbp6 coerente).


Il PoC (Proof of Concept) che ti raccontavo nella v5.5.0 mi aveva confermato che bbp6 accetta "0000 - Z" per i turni passati (zero-point bye, FIDE C.04.2 Art. 2.4) — quindi questo è il formato in produzione adesso, no placeholder fragili.

Sul cap XXR mi hai fatto pensare a un dettaglio importante: se aggiungi una squadra il max_teorico cresce (es. da 6 squadre a 7, max passa da 5 a 7). Però se questa squadra poi si ritira torni a 6 squadre — e nella v5.5.1 il cap si ricalcolava a max(N-1)=5, abbassando di nuovo il limite e potenzialmente rompendo pairing già prodotti col cap 7. Soluzione adottata (chiamiamola "opzione 3"): salvo il max_teorico AL MOMENTO DELL'AVVIO in una colonna `xxr_baseline`. Il cap effettivo nel TRF è ora `MAX(xxr_baseline, max_teorico_attuale)`. Late entry alza il cap, ritiri non lo abbassano sotto il baseline.

Test: ho aggiunto 12 nuovi test automatici al test runner squadre (PARTE C + PARTE D) — 31 verdi su 31. Il C10 in particolare conferma che bbp6 genera correttamente un turno 3 a 5 squadre quando il baseline è ancora 3 (chiamata reale al motore, non solo precheck logico).

══════════════════════════════════════════════════════════

QR CODE — VISIBILITÀ PUBBLICA E STAMPA CLASSIFICA (v5.6.5)

═══════════════════════════════════════════════════════════

Sul punto del QR Code nella vista pubblica hai centrato un buco: il flag "Visibilità privato/pubblico" esisteva sui tornei individuali ma non sulle squadre — io le avevo lasciate "sempre tecnicamente pubbliche" via token_pubblico autogenerato, scelta che era funzionale al sistema follower Telegram ma incoerente come UX. Adesso anche le squadre hanno il toggle, con un'unica differenza rispetto agli individuali: default 'pubblico' (sui nuovi e sui legacy via backfill) — così non rompo i follower esistenti. Quando lo metti privato la pagina pubblica dà 404, niente QR nelle stampe e i broadcast Telegram si auto-sospendono.

Stampa classifica: nuova pagina `stampa_classifica_squadre.php` (analoga a stampa_abbinamenti_squadre) con QR in alto a destra che porta alla classifica pubblica live. Ne ho fatto una anche per gli individuali. Le trovi col link "Stampa classifica" accanto al menu Esporta, nella scheda Classifica. A4 portrait, auto-stampa.

═══════════════════════════════════════════════════════════

QR TELEGRAM BIANCO NELLA VISTA PUBBLICA (v5.6.6 → v5.6.9)

═══════════════════════════════════════════════════════════

Questo punto è stato il più rognoso. La libreria QR che usavamo (davidshimjs/qrcodejs, una versione del 2013) ha smesso di funzionare su Chrome 148+: errore `f.getPatternPosition is not a function` riproducibile su qualsiasi testo, qualsiasi correctLevel. Identico in modalità incognito e con la lib inline o esterna — niente a che vedere con cache o estensioni. Probabilmente un'ottimizzazione JIT del browser che non digerisce la minificazione vecchia.

Soluzione: ho sostituito con `qrcode-generator` di Kazuhiko Arase (la lib autoritativa da cui qrcodejs aveva forkato), versione corrente, output SVG inline scalabile. Helper unico `renderQR(elemento, testo, sizePx)` su tutte le 10 pagine del progetto che generavano QR (le 4 stampe + le 2 pagine pubbliche + iscrizione + profilo + dashboard utente + marathon).

Risultato: i QR ora funzionano dappertutto, su tutti i browser. Test sul tuo Chrome dovrebbero passare al primo tentativo.

═══════════════════════════════════════════════════════════

TORNEI XXR GIÀ "ROTTI" — BACKFILL + DIAGNOSTICA (v5.6.7)

══════════════════════════════════════════════════════════

Sul punto che mi avevi sollevato dei tornei in corso che avevano già XXR storica gonfia: ho fatto due cose.

  1. (1) Backfill (migrazione 074): ho scritto retroattivamente `xxr_baseline` su 22 tornei legacy Swiss in_corso/concluso con baseline NULL. Il valore calcolato è identico al cap che si applicherebbe ora — quindi nessun comportamento attuale cambia, ma i tornei legacy diventano robusti contro ritiri futuri e protetti dall'opzione 3 esattamente come quelli creati in v5.6.4+.
  2. (2) Diagnostica salute torneo: in cima alla pagina del torneo Swiss in corso, se `num_turni > max_teorico_effettivo`, compare un banner giallo permanente che dice quante squadre attive ci sono, qual è il massimo Swiss raggiungibile, e suggerisce di ridurre num_turni o usare pairing manuale per gli eccedenti. Prima questo warning si vedeva SOLO dopo aver tentato un'azione (salva o genera turno); ora è visibile a colpo d'occhio appena apri il torneo. Resta poi il warning specifico in `aggiorna()` e il blocco preventivo in `generaTurno()` per dare il messaggio giusto al momento giusto.

═══════════════════════════════════════════════════════════

EXTRA — ZONA PERICOLOSA PER IL BOTTONE ELIMINA

═══════════════════════════════════════════════════════════

Aggiunta non richiesta ma utile: durante questa sessione un proprietario di torneo ha cliccato "Elimina" per sbaglio dalla scheda Impostazioni (era visualmente troppo vicino al bottone "Salva") e ha cancellato un torneo a 6 turni completi. Conferma JS passata senza pensarci, cascade DELETE su tutto.

Adesso il bottone Elimina è in una card rossa separata "Zona pericolosa" in fondo alla scheda, e per abilitarlo devi digitare un codice numerico random a 2 cifre (10-100) che compare a video. Click accidentale → bottone disabilitato → niente eliminazione. Per i tornei già esistenti dal momento del fix è già attivo.


In sintesi:

  1. • v5.6.4: late entry squadre Swiss
  2. • v5.6.5: visibilità pubblica per squadre + stampa classifica con QR
  3. • v5.6.6: codice random per Elimina
  4. • v5.6.7: backfill XXR legacy + banner diagnostica salute torneo
  5. • v5.6.8 / v5.6.9: sostituzione lib QR (problema browser-specific)


3 migrazioni DB (072, 073, 074), 10 file convertiti alla nuova lib QR, 31 test verdi.


Quando hai un attimo prova: (1) crea un nuovo torneo squadre, attiva il late entry, generaci 1-2 turni, aggiungi una squadra "ritardataria" e verifica che entri al turno successivo a 0 punti; (2) sui tuoi tornei esistenti la pagina pubblica dovrebbe mostrare il QR Telegram funzionante e nelle stampe trovi il bottone "Stampa classifica" nella scheda Classifica. Fammi sapere com'è andata.


12»
Accedi per partecipare alla discussione
Questo sito utilizza cookie tecnici e di analisi per migliorare l'esperienza.