Primo capitolo: la torcia nella fessura del bastione mostra il palio e due occhi gialli

- le impronte portano a una fessura nel bastione; con la torcia si vede un angolo del palio (l'omino con la
  maglia rossa del quadro vero, già descritto sul manifesto) e due occhi gialli: fine del primo capitolo
- la soluzione passa per indovinello, oratorio e catena del ghiacciolo; tragitti calcolati dalle uscite
- il Trebbio ha un indizio per ogni tappa della torcia
- tools/pronuncia.json: le parole che XTTS legge male, riscritte solo per la voce («celo» → «ce l'ho»)
- voci delle battute nuove

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ApqNBvNbNCwXqR2RLo8QJh
This commit is contained in:
2026-10-24 13:20:31 +02:00
co-authored by Claude Opus 5.5
parent 605e9a6dd1
commit 8ff18acf28
46 changed files with 353 additions and 38 deletions
+9
View File
@@ -95,3 +95,12 @@ test('la pausa ferma la voce e riprendendo continua; stop la toglie', () => {
delete globalThis.Audio;
}
});
test('le parole che XTTS legge male si riscrivono solo per la voce, intere e con la maiuscola', async () => {
const { spoken, rules } = await import('../tools/pronuncia.mjs');
assert.equal(spoken('Qui si scambiavano le figurine: celo, celo, manca.'), 'Qui si scambiavano le figurine: ce l\'ho, ce l\'ho, manca.');
assert.equal(spoken('Celo!'), 'Ce l\'ho!');
assert.equal(spoken('Guarda il cielo e il celofan.'), 'Guarda il cielo e il celofan.', 'non i pezzi di altre parole');
assert.equal(spoken('Il Regolo', { regolo: 'Règolo' }), 'Il Règolo');
for (const [w, s] of Object.entries(rules)) if (!w.startsWith('_')) assert.ok(typeof s === 'string' && s.trim(), `pronuncia vuota per ${w}`);
});