Leaderboard attiva di default, senza configurazione

La classifica globale non dipende più da un argomento: sui build desktop il client
usa il servizio pubblico DEFAULT_API_BASE (https://enne2.net/api/zombie-fps).

- scripts/leaderboard.gd: resolve_base() statica con priorità --api=<url> (test)
  → --offline/--no-api (opt-out esplicito per le partite di prova) → origine della
  pagina sul Web → servizio pubblico. Rimosso l'avviso "Classifica disattivata".
- Le suite di test (--script) restano spente a meno di un --api= esplicito, così
  nessun test può scrivere nella classifica pubblica.
- tools/test_start_screen.gd: verifica default attivo, opt-out e override;
  tools/test_rebalance_branding.gd: suite di test senza invii.
- docs/HIGHSCORES.md: nuova regola della base URL e diagnostica aggiornata.

Verifiche: test_start_screen 18/18 PASS con display; test_rebalance_branding
14/14 PASS; test_leaderboard.sh invariato (12 PASS, 2 FAIL preesistenti su questa
macchina anche prima della modifica).
This commit is contained in:
Matteo Benedetto
2026-10-24 15:57:42 +02:00
parent 4af402f8bf
commit 323a7cdbae
4 changed files with 66 additions and 24 deletions
+12 -8
View File
@@ -125,13 +125,17 @@ sudo nginx -t && sudo systemctl reload nginx # se -t fallisce: ripristinar
## 5. Client Godot
* **Base URL** (`scripts/leaderboard.gd`, `_resolve_base()`):
1. argomento `--api=http://host:porta` (test);
2. su Web: `window.location.origin + /api/zombie-fps`;
3. altrimenti **niente**: la classifica resta disattivata con
`DISABLED_REASON = "classifica non attiva in questa build"`.
Regola importante: una build desktop di prova **non deve** poter inviare punteggi
alla classifica pubblica (è già successo: ci sono finite righe `Test`).
* **Base URL** (`scripts/leaderboard.gd`, `resolve_base()`):
1. argomento `--api=http://host:porta` (test o servizio alternativo);
2. argomento `--offline` / `--no-api` → classifica **spenta** (partite di prova);
3. su Web: `window.location.origin + /api/zombie-fps`;
4. altrimenti il servizio pubblico `DEFAULT_API_BASE =
https://enne2.net/api/zombie-fps`.
La classifica è quindi **attiva di default**: non serve nesuna configurazione né
argomento per leggere e inviare punteggi. L'opt-out esiste solo per le partite di
prova, che non devono finire nella classifica pubblica (è già successo: ci sono
finite righe `Test`). Le suite di test girano con `--script` e restano spente a
meno di un `--api=` esplicito.
* Due nodi `HTTPRequest` separati (lettura e invio non si sovrappongono); timeout 12 s,
`body_size_limit` 256 KB / 64 KB.
* Retry su 429/5xx/errore di trasporto: fino a 3 tentativi, 6 s di pausa, **stesso
@@ -223,4 +227,4 @@ curl -s "https://enne2.net/api/zombie-fps/scores?limit=5"
| `classifica non disponibile (rete non disponibile)` nel menu | servizio spento o nginx non ricaricato: `docker ps`, `curl 127.0.0.1:8791/health`, `sudo nginx -t` |
| punteggio non inviato (`429`) | limite di frequenza per IP (20/ora, 5 s tra invii); i retry riusano lo stesso `submission_id`, quindi non raddoppiano |
| la pagina resta su una release vecchia | `index.html` è servito con `cache-control: no-cache`; forzare il ricaricamento della pagina |
| righe di prova nella classifica pubblica | una build desktop ha inviato senza `--api=`: verificare `leaderboard.disabled` (test `test_start_screen.gd`) |
| righe di prova nella classifica pubblica | la classifica è attiva di default: le partite di prova vanno lanciate con `-- --offline` (verificare `leaderboard.disabled`, test `test_start_screen.gd`) |