Promosse le pagine -bi a nomi ufficiali (contenuto BI), link -bi->plain, titoli '(BI)' rimossi.
La vecchia UI delle pagine app e sostituita. Backup: git (commit 36967f9) + /tmp/nis2-v1-backup.
Promosse (27): auth (login/register/onboarding/forgot/reset) + app (dashboard/assessment/
risks/incidents/policies/supply-chain/training/assets/reports/settings/isms/acn-gap/normative/
whistleblowing/kb/cross-analysis/service-continuity/guida/companies) + admin (index/orgs/users).
common-bi.js: sidebar BI ora linka le pagine ufficiali.
ESCLUSA: index.html (landing marketing 1298 righe) -> conversione dedicata a parte (la -bi
era 557 righe, rischio perdita contenuti). Pagine marketing/demo (presentation/simulate/
workflow/architecture/index-en) restano vecchio stile (fuori scope app autenticata).
Verifica produzione: 27/27 servite 200 con BI, 0 link -bi residui, 0 '(BI)' nei titoli,
auth intatta (401 su pwd errata), common-bi.js node --check OK.
Rollback: git revert HEAD (oppure ripristino da /tmp/nis2-v1-backup).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- dashboard: complianceScore ora ritorna 'score' (overall_score ultimo assessment);
la gauge usa avg_implementation se >0, altrimenti il punteggio assessment.
Prima mostrava 0% per org con gap analysis ma senza modulo controlli (H2).
- risks.html backToList(): ripristina la vista corrente tra le 4 (table/matrix/fair/kri),
prima cadeva sempre su table/matrix (H1); renderDetail nasconde tutte e 4.
- risks.html loadFair(): legge risksRes.data.items (endpoint paginato), prima
risksRes.data.risks era undefined e il dropdown FAIR restava vuoto (M1).
php -l + node --check OK. version 1.10.3.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bug PRE-ESISTENTE (commit 7823898 del 2026-02-20, presente anche in 94d7867): gli apostrofi in
"dell'attivita" (riga 512) e "l'anno" (riga 513) chiudevano le stringhe a singolo apice ->
SyntaxError che azzerava l'INTERO blocco <script> della pagina Rischi (tabella, matrice, FAIR,
KRI, dettaglio: tutti gli onclick davano ReferenceError). La pagina era servita 200 ma JS morto.
Trovato dalla review multi-agente (agente frontend). node --check ora OK.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- common.js: idle session timeout 30min con avviso countdown 5min prima del logout
- common.js: checkAuth() attiva automaticamente il monitor di inattività
- api.js: messaggi errore connessione usano i18n (IT/EN) tramite I18n.t()
- risks.html: saveRisk() e aiSuggest() con setButtonLoading durante salvataggio
- risks.html: deleteRisk() ricarica la matrice se si è in matrix view
- incidents.html: createIncident() con setButtonLoading durante registrazione
- policies.html: savePolicy() e saveAIGeneratedPolicy() con setButtonLoading
- policies.html: banner AI-draft con pulsante X per dismissione
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- common.js: aggiunto i18nKey a navItems, data-i18n su sezioni e voci
sidebar → toggle IT/EN ora traduce la navigazione in tempo reale
- Tutte e 10 le pagine HTML: aggiunto data-i18n="*.title" agli h2
(dashboard, assessment, risks, incidents, policies, supply-chain,
training, assets, reports, settings)
- FIX BUG: sidebar puntava ad audit.html (inesistente) → corretto
in reports.html
- HelpSystem: funziona correttamente in tutte le 10 pagine
(content-header-actions presente, init() chiamato)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Rimozione prefisso /nis2/ da tutti i path frontend e router:
- index.php: basePath '' (da '/nis2')
- api.js: baseUrl '/api' (da '/nis2/api')
- Tutti i file HTML: path assoluti senza prefisso /nis2/
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- i18n.js: sistema traduzioni IT/EN con ~150 chiavi, localStorage, data-i18n
- help.js: help contestuale per 10 pagine con riferimenti NIS2
- architecture.html: descrizione architettura sistema completa
- common.js: language toggle sidebar (IT/EN), link Architettura, icone
- Integrato i18n + help in tutte le 14 pagine app + 3 admin
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>