6.2 KiB
6.2 KiB
Checklist: Da Design a Prototipo Giocabile
Obiettivo: Qualcuno clona il repo e in <30 min gioca un turno. Target: Singolo utente, browser, esecuzione locale on-premise.
Fase 0 — Setup Progetto (priorità: critica)
git initnella directory /home/codex/rpg/- Struttura directory (src/, tests/, data/, frontend/)
requirements.txt: FastAPI, uvicorn, ollama-python, aiohttpdocker-compose.ymlopzionale (per isolamento)- Script
start.sh/start.batche avvia tutto con un comando .gitignore: dcc/pdf_pages/, pycache, *.db
Fase 1 — Backend Core (priorità: critica)
1.1 State Machine
src/engine/state_machine.py: orchestratore turni (Leggi -> LLM -> Valida -> Esegui -> Scrivi)- Retry logic con backoff esponenziale + jitter
- Idempotenza: cache risultati per turn_id
- Safe fallback narrativo su errore
1.2 SQLite / Stato Gioco
src/engine/db.py: connessione, init schema, migrazioni- Implementare schema: campaign, characters, adventure_state, quest_log, turn_log
- CRUD base per ogni tabella
- Backup automatico (copia .db a ogni avvio)
1.3 Approved Tools (10)
roll-dice: d20, d%, d24, catena dadi, modificatoricombat: iniziativa, attacco, mighty-deed, furtivo, critico, fumbleability-check: abilità ladro (con dado dedicato) e altri (d20+mod)saving-throw: Tempra/Riflessi/Volontàmovement: esplorazione stanze, distanza, incontrispellcasting: prova incantesimo, tabella risultati, corruzione/ritorsioneupdate-inventory: aggiungi/rimuovi/equipaggiaaward-xp: 0-4 PE per incontro, avanzamento livelloupdate-quest: stato missionidm-override: modifica stato, forza risultato, ignora regola
Fase 2 — LLM Integration (priorità: critica)
src/llm/client.py: wrapper chiamate Ollama API (gemma2:9b)src/llm/prompts.py: template system prompt con:- Regole fondamentali (d20, CD/CA, catena dadi)
- Approved Tools (nome, parametri, quando usarli)
- Mappa avventura (aree, CD, statistiche mostri)
- Regole classi (Dado Cimento, abilità ladro, ecc.)
src/llm/parser.py: parsing risposta LLM -> tool calls strutturati- Tool calling: filtraggio tool contro allowlist + validazione parametri
- Test: chiamata singola a Ollama, verificare risposta in italiano
Fase 3 — Avventura Machine-Readable (priorità: alta)
data/adventure/areas.json: tutte le 9 aree con descrizione, CD, mostri, tesoridata/adventure/monsters.json: tutte le creature con statistiche completedata/adventure/items.json: oggetti recuperabili (corno demoniaco, soldatini, ecc.)data/adventure/quests.json: quest principale + secondaria della driade- Completare Aree 1.1, 1.3 e 1.9 (mancano) — scrivere descrizioni originali ispirate al tema
- Completare pagina 39 (setup avventura, plot hook: Vorkhul Ksh'tharan, il Vincolato alle Stelle)
- Completare tabelle equipaggiamento (armi, armature, equipaggiamento — tradotte dal Reference Booklet)
- Completa tabella critici (I-V) e fumble in italiano (tradotta dal Reference Booklet)
- Completa tabella mestieri d100 (tradotta dal Reference Booklet)
- Completa tabelle classi + abilità ladro + mighty deeds (tradotte dal Reference Booklet)
Fase 4 — Frontend (priorità: alta)
frontend/index.html: pagina singola con chat + pannello statofrontend/style.css: tema scuro DCC, leggibile, essenzialefrontend/app.js: connessione WebSocket/Fetch al backend- Pannello stato personaggi (PF, classe, PE, equipaggiamento)
- Pannello mappa (aree visitate/da visitare)
- Log azioni recenti (ultimi N turni)
- Input testuale per azioni giocatore
- DM-Override: pulsante per attivare modalità DM + comandi
- Adattamento mobile (giocabile da telefono)
Fase 5 — Colmare Gap OCR (priorità: media)
- Recuperare pagina 39: scritta ex-novo (Vorkhul Ksh'tharan background)
- Estrarre strutturalmente le tabelle critici/fumble (formato Markdown, tradotte dal Reference Booklet)
- Completare tabella equipaggiamento (Reference Booklet → Italiano)
- Ripetere OCR pagine 1-2 con pre-processing (contrasto, bianco/nero)
- Completare risultati incantesimi fascia alta (20-31+) da screenshot
Fase 6 — Testing (priorità: media)
tests/test_tools.py: test unitari per ogni Approved Tool- roll-dice: distribuzione, catena dadi, modificatori
- combat: critico/fumble, mighty-deed, CA
- ability-check: dado ladro vs d20 standard
- spellcasting: corruzione, ritorsione, tabella risultati
tests/test_state_machine.py: flusso completo di un turnotests/test_avventura.py: integrità dati (aree collegabili, mostri referenziati)tests/test_llm_parser.py: parsing risposte LLM, filtraggio allowlist
Fase 7 — Documentazione (priorità: media)
README.mdaggiornato con "Come avviare":- Prerequisiti (Python 3.11+, Ollama in esecuzione)
pip install -r requirements.txtpython start.py- Aprire browser a http://localhost:8000
docs/setup.md: configurazione Ollama, gestione API keydocs/architettura.md: diagramma flusso, spiegazione pattern NSLdocs/dm-guide.md: come usare DM-Override, comandi disponibili
Fase 8 — Rifiniture (priorità: bassa)
- Rate limiting azioni (anti-spam)
- Salvataggio automatico ogni N turni
- Logging strutturato (token usage, latenza, errori)
- Backup automatico SQLite
- Supporto "setaccio": 4 personaggi per giocatore da gestire in UI
- Excalidraw/mappa visuale delle stanze
- Effetti sonori (opzionale, per atmosfera)
Riepilogo Tempo Stimato
| Fase | Ore | Priorità |
|---|---|---|
| 0 — Setup Progetto | 0.5 | 🔴 Critica |
| 1 — Backend Core | 4-6 | 🔴 Critica |
| 2 — LLM Integration | 2-3 | 🔴 Critica |
| 3 — Avventura Machine-Readable | 2-3 | 🟡 Alta |
| 4 — Frontend | 3-4 | 🟡 Alta |
| 5 — Gap OCR | 2 | 🟠 Media |
| 6 — Testing | 2 | 🟠 Media |
| 7 — Documentazione | 1 | 🟠 Media |
| 8 — Rifiniture | 2-3 | 🔵 Bassa |
Totale: ~18-25 ore per MVP giocabile da altri.