- services/scores-api: microservizio (solo stdlib) con SQLite WAL, idempotenza per
submission_id, limiti di frequenza e validazione; immagine Docker non-root.
- nginx: reverse proxy su /api/zombie-fps/ (stessa origine del gioco, niente CORS).
- scripts/leaderboard.gd: client HTTP con retry idempotente; su desktop la classifica
resta disattivata senza --api=, cosi' i test non sporcano la classifica pubblica.
- scripts/player_profile.gd: nome, id anonimo e miglior punteggio in user:// e in
window.localStorage; il nome scelto non viene piu' richiesto; riparazione dei
profili con la stringa "null".
- scripts/start_screen.gd: menu con nome, GIOCA e classifica; la partita parte solo
dal pulsante (via la rete di sicurezza sull'input, Invio nel campo non avvia).
- scripts/main.gd, player.gd: avvio esplicito, segnale died, nota dell'invio.
- tools: test_scores_api.py (42), test_leaderboard (14), test_player_profile (21),
test_start_screen (10); suite esistenti adeguate all'avvio manuale.
- docs/HIGHSCORES.md + docs/WEB-DEPLOY.md aggiornati.
- assets/audio/music/zombie_industrial_loop.ogg: 57.60 s Ogg Vorbis loop
generated locally with YuE2-3B on the Tesla V100 (score written for this
track; vocals removed with HTDemucs). The loop is spliced at the track's
structural repeat with a 0.6 s crossfade: measured seam dip <= 1.6 dB.
- scripts/main.gd: "Music" AudioStreamPlayer at -11 dB, started at boot on
desktop and on the start click on Web (browser autoplay policy). It forces
stream.loop at runtime because the Web staging step re-imports the OGG with
loop=false.
- tools/test_music.gd: soundtrack test (loop, length, volume, playback,
still playing after player death).
- docs/MUSIC.md: source, loop construction, verification, licence.
- docs/WEB-DEPLOY.md: release ab6054111f5919a8 notes.
Initial commit of the project.