nel , manca meta description/canonical/OG/Twitter - intenzionale? da chiedere a Carmine, dato che e' una copia funzionale dell'app e non una pagina indicizzabile; escHTML() (riga 7688) scappa solo & < > mentre esc() scappa anche le virgolette - nessun uso attuale in contesto attributo quindi non sfruttabile oggi, ma nome ambiguo che invita a un uso futuro sbagliato; spellSortKey e alcune ricerche .find() su SPELLS/FEATS dentro comparator di ordinamento sono O(n) per elemento invece di usare una Map precostruita - irrilevante alle dimensioni attuali del compendio (405 incantesimi), da rivedere solo se il compendio crescesse molto. Verificato: node --check 14/14 blocchi OK; Playwright - render() su tutte le view principali D&D e Pathfinder senza eccezioni (home, characters, compendium, bestiary, spellbook, forge, dmscreen, campaign, explore, settings), zero nomi duplicati in MAGIC_ITEMS/SPELLS/FEATS/bestiario, le tre correzioni verificate puntualmente (testo Corno/Anello aggiornato, payload di export senza "154, +16 creature, nuova costante PF_BESTIARY_10): Centopiede Gigante, Sciame di Centopiedi, Draco del Gelo, Yeti, Hryngar Bombardiere (nano delle profondita', Remaster dei duergar), Grick, Mohrg, Vespa Gigante, Skum, Sciame di Pipistrelli Vampiro, Witchwarg (Remaster del lupo invernale), Spettro, Pescatore delle Caverne, Remorhaz, Formica Gigante, Vite Assassina. Copertura mirata su tipologie sottorappresentate: insetti giganti, sciami, non-morti oltre i lemuri, creature artiche, creature delle Darklands/profondita', pianta. OGGETTI MAGICI (105->117, +12 oggetti, nuova costante PF_ITEMS_7): Anello di Stregoneria, Anello di Riflessione degli Incantesimi, Anello degli Arcani Minori, Bastone di Abiurazione, Bastone dei Fantasmi, Ferri di Cavallo Alacri, Decantatore d'Acqua Infinita, Torcia Inestinguibile, Collana delle Palle di Fuoco, Gemma Elementale, Polvere di Scomparsa, Moneta della Fortuna. Copertura mirata su categorie sottorappresentate: anelli, bastoni, oggetto per animale compagno, consumabili alternativi alle pozioni. Nota di trasparenza sulle fonti: 14 delle 16 creature e tutti i 12 oggetti verificati con fetch diretto delle pagine Archives of Nethys; Grick e Mohrg erano stati inseriti citando fonti legacy (Crown of the Kobold King/Pathfinder #157 il primo, Bestiary 2 il secondo) perche' privi di una pagina Monster Core dedicata - prima della pubblicazione ho verificato entrambi con fetch diretto delle loro pagine reali su Archives of Nethys (2e.aonprd.com): Grick (CA20/PF35/tiri salvezza/resistenza fisica 5/attacchi/fonte) e Mohrg (CA28/PF120 guarigione negativa/tiri salvezza/immunita'/resistenze/attacchi/paralisi CD26/fonte) confermati identici in ogni dettaglio ai dati gia' inseriti, nessuna correzione necessaria. Verificato con node --check su tutti i 14 blocchi script (OK), conteggio programmatico via script Python con parser a profondita' di parentesi: 154 creature/117 oggetti, nessuna chiave duplicata su 10 blocchi PF_BESTIARY_1..10 e 7 blocchi PF_ITEMS_1..7. Isolato come sempre dal motore D&D (MONSTERS_SRD invariato) e dalle altre sezioni Pathfinder (incantesimi, talenti, classi, ascendenze, equipaggiamento comune PF_GEAR non toccati). | v1.43.0 (22/9): ventiseiesima milestone, settima espansione del BESTIARIO Pathfinder (su richiesta esplicita di Carmine: "espandi il bestiario"), con attenzione alla varieta' di tipologie oltre che al numero. 16 nuove creature verificate su Archives of Nethys (Monster Core, Monster Core 2, Bestiary, Bestiary 2, Bestiary 3, NPC Core), nuova costante PF_BESTIARY_9 — Skulk (PNG intrigo urbano), Otyugh, Grindylow, Slurk, Granchio Eremita Gigante, Guerriero Merfolk (nome non tradotto in assenza di localizzazione italiana ufficiale certa, come gia' fatto per altre razze), Basidirond e Miceloide (funghi), Soldato Meccanico (costrutto), Melma Grigia, Ort — rinomina Remaster confermata del Lemure (statblock strutturalmente identico, verificato su AoN), Lyrakien (Azata Vagabonda), Vrock/Demone dell'Ira, Assassino e Accolito di Iomedae (PNG umanoidi di classe), Mitflit. Copertura voluta su tipologie meno rappresentate: aberrazioni, creature acquatiche, funghi, costrutti, melme, outsider planari su tutto lo spettro sacro/empio, PNG di classe, fatati. Bestiario Pathfinder: 122→138 creature. Nota di trasparenza sulle fonti: 15 delle 16 creature verificate con fetch diretto delle pagine Archives of Nethys; il Vrock era stato inizialmente verificato solo su due fonti secondarie indipendenti concordanti (la pagina AoN attesa non si apriva correttamente in prima battuta) — controllato con una verifica aggiuntiva indipendente prima della pubblicazione, fetch diretto della pagina AoN del Vrock: CA 28, PF 185, tiri salvezza +20/+18/+15, percezione +18, resistenza elettricita' 10, debolezza ferro freddo 10 e sacro 10 (rinomina Remaster di "bene"), attacchi becco/artiglio/zampa con bonus e danni esatti, tutto confermato identico ai dati gia' inseriti — nessuna correzione necessaria. Verificato con node --check su tutti i 14 blocchi script (OK), conteggio programmatico del bestiario Pathfinder (138, nessuna chiave duplicata su 9 blocchi PF_BESTIARY_1..9). Isolato come sempre dal motore D&D: bestiario D&D (MONSTERS_SRD, 400 creature) confermato intatto, oggetti magici (105) ed equipaggiamento comune (34, PF_GEAR) non toccati. Prossimo lavoro naturale, non vincolato da roadmap: ulteriore espansione bestiario/oggetti quando Carmine vorra' riprenderla — il compendio ufficiale resta molto piu' ampio. SHA-256 di questa build: 2c08a0a819f8f6d9cee45689715384167c5c41ecd80d6780bd4d485c7be9dcca. | v1.42.0 (22/9): venticinquesima milestone, ripresa dell'espansione di contenuti Pathfinder (bestiario e oggetti) su richiesta esplicita di Carmine, con verifica incrociata sul web. BESTIARIO: 17 nuove creature verificate su Archives of Nethys (Monster Core/Bestiary), nuova costante PF_BESTIARY_8 — Homunculus, Guerriero Xulgath (rinomina Remaster di Troglodyte), Rana Gigante, Guerriero Boggard, Spettro Vivente/Wight, Cockatrice, Barghest, Jaathoom/Genio dell'Aria (la tassonomia classica dei geni Djinni/Efreeti/Shaitan/Marid è stata sostituita nel Remaster da nuovi nomi), Ettin, Viverna, Incubo, Salamandra, Anaconda Gigante, Giovane Drago Tempestato (ex Drago Blu, linea rinominata Stormcrown nel Remaster), Tirannosauro, Gigante delle Nuvole, Guardiano di Ferro (ex Golem di Ferro, rinominato Iron Warden nel Remaster, confermato anche via ricerca incrociata indipendente). Bestiario Pathfinder passa da 105 a 122 creature. OGGETTI MAGICI: 15 nuovi verificati su AoN, nuova costante PF_ITEMS_6 — pergamene di rango 7-10 (completa la serie 1°-10°), Corno che Spacca, Stivali del Balzo (base+Superiori), Fasce da Combattimento Potenziate, Mantello del Pipistrello, Anello di Scalata, Cintura dei Cinque Re, Bande di Forza (rinomina Remaster di Bracers of Armor), Anello dei Contro-incantesimi, Bracciale dello Scatto, Gettone di Piuma (Albero). Oggetti magici passano da 90 a 105. EQUIPAGGIAMENTO COMUNE: contenuto nuovo mai avuto prima per Pathfinder — nuova costante PF_GEAR con 34 oggetti non magici di uso quotidiano (zaino, sacco a pelo, kit da arrampicata, kit del guaritore, lanterna cieca, cannocchiale, manette, libro di formule vuoto, ecc.), collegata alla vista Oggetti Pathfinder esistente tramite un nuovo switch "Tipo" (Oggetti Magici / Equipaggiamento Comune) sullo stesso motore di ricerca/filtro già in uso, senza nuove viste. Nota di trasparenza sulle fonti: il bestiario e gli oggetti magici sono verificati direttamente su Archives of Nethys pagina per pagina; l'equipaggiamento comune è verificato su valori stabili del Core Rulebook (immutati dal Remaster) incrociati con un mirror di compendio (Roll20), perché la pagina Equipment di AoN non espone i singoli oggetti come voci indicizzate singolarmente allo stesso modo del bestiario — nessun prezzo o dato inventato, ma la fonte per questa sola categoria è indiretta anziché diretta e va detto onestamente. Corretto anche un piccolo bug collaterale scoperto nella stessa vista: viewPfItems() leggeva solo il campo i.activation ma circa metà degli oggetti magici preesistenti (batch 2-5) usa invece il campo i.activate, quindi la sezione attivazione non veniva mai mostrata per quegli oggetti — aggiunto fallback i.activation||i.activate, cambio additivo che non tocca i dati. Verificato con node --check su tutti i 14 blocchi script (OK), conteggio programmatico di bestiario/oggetti/gear (122/105/34, nessuna chiave duplicata in nessuno dei tre), test Playwright con navigazione e apertura schede in entrambe le modalità della vista Oggetti (zero errori console), verifica incrociata via ricerca web indipendente su un campione di statblock (Homunculus: CA/PF/tiri salvezza/veleno confermati identici su AoN) e di una rinomina Remaster (Iron Golem → Iron Warden, confermato). Nessuna regressione: bestiario D&D (400 creature) e oggetti D&D esistenti intatti, motore Pathfinder isolato come sempre da quello D&D. Prossimo lavoro naturale, non vincolato da roadmap: ulteriore espansione di bestiario/oggetti (il compendio ufficiale resta molto più ampio) quando Carmine vorrà riprenderla. SHA-256 di questa build: bb12897c9f9e39e930e2664a8fcbb98d34932cfbf581459911b57b70c11d395a. | v1.41.0 (22/9): ventiquattresima milestone, due correzioni mirate ai due gap noti rimasti aperti dopo il completamento della parità di piattaforma (v1.40.0). PRIMA: colmato il gap di sincronizzazione cloud per Pathfinder segnalato onestamente dalla v1.38.0 in poi — mpSanitizeAccountStateForCloud() e mpApplyCloudAccountState() ora includono pfCharacters, pfWizard, pfCurrent, rpgGame e le tre collezioni Forgia (pfCustomMonsters/pfCustomItems/pfCustomSpells), che prima restavano fuori dal salvataggio automatico via account e sopravvivevano solo nell'esportazione/importazione JSON manuale introdotta in v1.38.0. Ora un personaggio Pathfinder o una creazione Forgia sopravvivono al cambio dispositivo/accesso account esattamente come già accadeva per i personaggi D&D, senza bisogno di alcun backup manuale. Nessuna migrazione di schema richiesta: i campi erano già letti da persist()/loadState(), mancavano solo nel percorso cloud. SECONDA: rimosso il duplicato silenzioso individuato e documentato dalla v1.37.0 — la costante SPECIES_CHOICES conteneva due voci "Aasimar" (bug minore, mai visibile all'utente perché la seconda vinceva sempre secondo la semantica JS degli object literal, ma codice morto e fragile: un editing futuro della prima versione non avrebbe mai avuto effetto). Rimossa la prima voce (testo leggermente diverso, mai realmente in uso), mantenuta la seconda ("Trasformazione (dal 3º livello)") che era già quella effettivamente mostrata ai giocatori Aasimar. Nessun cambiamento visibile per gli utenti che già vedevano il testo corretto. Isolato come sempre dal resto: nessun'altra funzione toccata. Verificato con node --check su tutti i 14 blocchi script: OK. Verificato manualmente che STATE.rpgGame di default resti null (nessuna migrazione forzata a "pathfinder" per chi non ha mai creato un personaggio Pathfinder) e che il fallback in mpApplyCloudAccountState() preservi il game engine locale quando il cloud non riporta rpgGame. Con questa release restano aperti solo lavori non più vincolati da roadmap: ulteriore espansione di bestiario/oggetti magici Pathfinder oltre le 105/90 voci attuali (compendio ufficiale ha centinaia di voci in più manuali, lavoro potenzialmente senza fine). SHA-256 di questa build: 50f642f2a05a19a9ccc5862f3e0b65ec2cd20e14301887f88503d29e91449bd3. | v1.40.0 (22/9): ventitreesima milestone della roadmap Pathfinder delegata — QUARTA e ULTIMA funzionalità di piattaforma completata: il TAVOLO (VTT), ora condiviso fra D&D e Pathfinder. Con questa milestone tutte le quattro funzionalità di piattaforma pianificate (Schermo del DM v1.37.0, Forgia v1.38.0, Esplora Dungeon v1.39.0, Tavolo v1.40.0) sono complete per entrambi i motori di gioco. Trovato lo stesso bug di routing già corretto per Esplora Dungeon: "tavolo" era ancora escluso per Pathfinder (dentro DND_ONLY_VIEWS, pulsante con classe game-dnd), nonostante il motore di mappa/token/nebbia di guerra/disegno/chat/presenza/musica fosse già tecnicamente neutro rispetto al sistema di gioco — rimosso, la voce è ora visibile e funzionante in entrambe le modalità. Aggiunto lo strato specifico Pathfinder sopra l'infrastruttura condivisa: un personaggio Pathfinder può ora essere agganciato a una campagna condivisa Supabase (nuove mpActiveCharList()/mpFindLocalChar(), ramo Pathfinder in mpCharacterSummary()/mpPushMyCharacter()/mpBindCharacter(), nessuna migrazione di schema necessaria: la colonna dati della tabella characters era già generica); il tracker di combattimento del Tavolo può ora aggiungere avversari direttamente dal Bestiario Pathfinder (105 creature, incluse le creazioni Forgia) con iniziativa su Percezione, tramite la nuova mpAddFromBestiaryModal() (stessa logica già usata per lo Schermo del DM, non duplicata a memoria ma riportata coerente); un combattente PF nel tracker apre ora la sua scheda statistiche Pathfinder corretta (showPfStatblock) invece di quella D&D; la lista condizioni sulle pedine mappa mostra le 42 condizioni ufficiali Pathfinder invece di quelle D&D quando attivo quel motore (vttConditionList()); il pulsante "Bastione" (regola D&D 2024 senza equivalente ufficiale in PF2e) resta nascosto in modalità Pathfinder, come già lo XP D&D nello Schermo del DM. Verificato con node --check su tutti i 14 blocchi script e con Playwright: navigazione al Tavolo in modalità Pathfinder, aggancio personaggio PF alla campagna, aggiunta mostro dal Bestiario PF al tracker con iniziativa corretta, apertura scheda statistiche PF, lista condizioni corretta per sistema, nessuna eccezione JS non gestita in nessun flusso testato — e nessuna regressione sul Tavolo D&D esistente, verificato con lo stesso identico flusso. Limite onesto dichiarato: il roundtrip multiplayer reale a due client (sincronizzazione realtime via Supabase fra due sessioni distinte) non è verificabile in un ambiente di test locale isolato e non è stato simulato — verificate solo interfaccia, logica di selezione bestiario/statblock, e le chiamate preparate verso Supabase, che falliscono in modo pulito con credenziali di test come già accadeva per la parte D&D. Le pedine sulla mappa (aggiunta libera nome+colore, senza collegamento a statistiche) restano invariate e identiche per entrambi i giochi, non essendo mai state specifiche di sistema. Gap noto confermato ma non risolto in questa milestone perché non necessario al funzionamento base: la sincronizzazione cloud dell'account (mpSanitizeAccountStateForCloud/mpApplyCloudAccountState) non include ancora i personaggi e le creazioni Forgia Pathfinder — il backup JSON locale invece li include già dal v1.38.0; l'aggancio personaggio-campagna Pathfinder funziona comunque sulla stessa sessione/dispositivo. Isolato come sempre dal motore D&D: nessun dato/funzione D&D preesistente alterato, comportamento D&D verificato identico bit-per-bit prima/dopo. Con la parità di piattaforma raggiunta, il prossimo lavoro naturale è la ripresa dell'espansione di bestiario e oggetti magici oltre le 105/90 voci attuali, e la sincronizzazione cloud dei dati Pathfinder. SHA-256 di questa build: 443dc8f40c728a91cd914b973afeb8b5f91d1cdbee078eb6669d6b68c8fbbdab. | v1.39.0 (22/9): ventiduesima milestone della roadmap Pathfinder delegata — terza funzionalità di piattaforma completata: ESPLORA DUNGEON, ora condivisa fra D&D e Pathfinder invece di essere esclusiva D&D. In sede di implementazione trovato e corretto un bug preesistente indipendente dal gioco: in render() era rimasto un redirect residuo che forzava STATE.view="home" ogni volta che si tentava di aprire "explore", rendendo la funzionalità irraggiungibile ANCHE per D&D nonostante fosse stata riattivata l'11/9 — rimosso, la voce di menu è ora davvero cliccabile per entrambi i giochi. Motore procedurale (generazione stanze/corridoi/porte/trappole, array di sapore narrativo, gestione blocchi/allarme/salvataggio in extremis) riutilizzato invariato, perché non è una regola ufficiale di alcun sistema ma contenuto originale dell'app. Aggiunto ex novo lo strato specifico Pathfinder: gli incontri pescano dal Bestiario Pathfinder (105 creature, comprese le creature homebrew forgiate nella Forgia) invece che dal bestiario D&D, il tesoro dagli Oggetti Magici Pathfinder (90 oggetti, comprese le creazioni homebrew), e il personaggio di riferimento è sempre quello Pathfinder attivo. La scalatura del pericolo per livello è una stima originale dell'app, dichiarata come tale nel codice: NON è la tabella ufficiale di bilanciamento incontri del GM Core, che non è stata citata a memoria. Stato isolato dentro ogni personaggio Pathfinder (analogo a come già funziona per D&D, che salva lo stato del dungeon nel personaggio e non in un campo globale): nessuna nuova chiave STATE globale da aggiungere a salvataggio/export/import, già coperto automaticamente. Verificato con node --check su tutti i 14 blocchi script e con Playwright: generazione dungeon, cammino fra stanze, incontri e tesori sempre dal pool Pathfinder (incluse le creazioni Forgia, verificato su 500 estrazioni statistiche), combattimento completo, estrazione del bottino, salvataggio/ricarica pagina, nessun errore console — e soprattutto nessuna regressione sul motore D&D esistente, testato con lo stesso identico flusso. Limiti onesti dichiarati: nessun "dungeon conosciuto" precostruito per Pathfinder (solo generazione libera, come per D&D); i personaggi Pathfinder non hanno ancora un inventario strutturato in questa app, quindi il bottino estratto diventa testo libero in scheda invece di oggetti tracciati singolarmente. Isolato come sempre dal motore D&D: nessun dato/funzione D&D preesistente alterato oltre al fix di routing condiviso. Restano da completare nella roadmap di piattaforma: Tavolo/VTT per Pathfinder; poi ripresa dell'espansione di bestiario e oggetti magici oltre le 105/90 voci attuali. SHA-256 di questa build: c06c1e557a58fcff542e2d24aec4b484d7850f7988bd5690c1757ba479cdf735. | v1.38.1 (17/9): correzione bug segnalato da Carmine ("problema con le griglie, combattimenti ecc...non funzionano, non sono attivabili, inserisco i mostri ma non viene visualizzato nulla"): Griglia tattica (mappa 2D nello Scontro) e Tavolo (VTT) erano rimasti bloccati su "disattivato" per chi aveva un salvataggio precedente al 28/8, quando erano stati forzati spenti e i relativi interruttori tolti da Impostazioni; l'11/9 la disattivazione forzata era stata tolta dal codice (nuovi utenti li hanno attivi di default) ma nessun controllo era stato restituito a Impostazioni, quindi chi aveva già "disattivato" salvato non poteva più riaccenderli da nessuna parte nell'app. Aggiunta in Impostazioni la card "Griglia tattica e Tavolo" con due interruttori indipendenti, stesso funzionamento di quelli già esistenti per Campagna AI/Dungeon AI: attivabili/disattivabili in ogni momento, visibili sia in modalità Giocatore sia Dungeon Master (il Tavolo si usa in entrambe). Lo Scontro restava comunque pienamente funzionante anche a griglia disattivata (iniziativa, PF, CA, turno IA nemica, cronaca): mancava solo la mappa visuale. Testato con Playwright: partendo da un salvataggio con tacticalGrid/tavoloEnabled a false, i due nuovi interruttori li riportano a true e la griglia/il Tavolo tornano visibili immediatamente, senza dover cancellare dati o reinstallare. Storico: v1.38.0 (16/9): diciannovesima milestone, seconda funzionalita di piattaforma Pathfinder completata su richiesta esplicita dell'utente ("completa le funzionalita della piattaforma e poi passa al resto"): la Forgia. Nuova voce di menu "Forgia" per Pathfinder (schede Mostro, Oggetto, Incantesimo) che permette di creare creature, oggetti magici e incantesimi homebrew sugli stessi campi usati dai contenuti ufficiali PF2e (livello invece di Grado Sfida, tratti, percezione/tiri salvezza per le creature; livello/prezzo/categoria/tratti per gli oggetti; rango/tradizione/azioni per gli incantesimi). Le creazioni compaiono subito nel Bestiario, negli Oggetti Magici e nel Compendio (scheda Incantesimi), segnalate con un'etichetta "Homebrew" per restare sempre distinguibili dal contenuto ufficiale verificato; le creature forgiate sono anche aggiungibili allo Schermo del DM/Scontro esattamente come quelle del bestiario ufficiale, con scheda statistiche dedicata (stesso motore introdotto in v1.37.0). Corretto nello stesso rilascio un bug preesistente mai segnalato prima: il backup completo (Esporta/Importa dati, ed "Elimina account e dati"/"Azzera tutti i dati") non includeva affatto personaggi o creazioni Pathfinder (mancavano pfCharacters e, ora, le nuove pfCustomMonsters/pfCustomItems/pfCustomSpells) — chi avesse ripristinato un backup su un altro dispositivo avrebbe perso tutti i progressi Pathfinder; aggiunti a persist/loadState (salvataggio automatico) ed export/import JSON, così come agli azzeramenti completi dei dati, per coerenza. La Forgia Pathfinder non cerca parita 1:1 con quella D&D (niente rarita/sintonia/import PDF, concetti diversi o non ancora rilevanti così com'e implementata qui): prima versione funzionante, ampliabile come gia avvenuto per bestiario/oggetti/incantesimi ufficiali. Testato con Playwright: creazione di mostro/oggetto/incantesimo homebrew, comparsa in Bestiario/Oggetti/Compendio con etichetta Homebrew, aggiunta della creatura forgiata allo scontro, apertura della sua scheda statistiche, libreria delle creazioni con eliminazione, round-trip di esportazione/importazione dei nuovi campi. Sintassi verificata su tutti i blocchi