Commit Graph
389 Commits
Author SHA1 Message Date
DevEnv nis2-agileandClaude Opus 4.8 c5fce7bdf7 [FEAT] A2 backend: Nis2ClassificationService v2 (matrice+bilancio, size-independent art.3 c.5, criteri sotto-soglia c.9 b/c/d, obblighi D.Lgs. art.23/24/25, esito 'preliminare non vincolante'); logica centralizzata (no duplicazione) + complete() salva i nuovi campi
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 17:06:17 +02:00
DevEnv nis2-agileandClaude Opus 4.8 b2f47c0a47 [FEAT] A2 migration 040: organizations += classificazione NIS2 (bilancio, autonomia, size-independent c.5, criteri c.9 b/c/d, mission, designation_basis, self_assessment preliminary) — applicata+verificata prod
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 16:56:56 +02:00
DevEnv nis2-agileandClaude Opus 4.8 37071e1d77 [DOCS] A2 onboarding: design + estratto verbatim art.3 D.Lgs.138/2024 (criteri sotto-soglia = c.9 lett.b/c/d CONFERMATO; individuazione = c.13)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 16:51:53 +02:00
DevEnv nis2-agileandClaude Opus 4.8 9fed095204 [FIX] A3: stringhe JS residue Asset -> bene/beni nelle pagine Inventario (titoli modale + notifiche)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 15:59:31 +02:00
DevEnv nis2-agileandClaude Opus 4.8 d009341d5a [FIX] Completamento A1/A3 (segnalazioni Fattori): help.js citazioni obblighi -> D.Lgs.138/2024 art.23/24/25 + terminologia Asset -> Inventario/beni (pagine + guida)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 15:57:54 +02:00
DevEnv nis2-agileandClaude Opus 4.8 121b8c2003 [FIX] Allineamento normativo segnalazioni Fattori (A1+A3): citazioni obblighi -> D.Lgs.138/2024 art.23/24/25 (non Direttiva) + terminologia Asset -> Inventario
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 15:27:07 +02:00
DevEnv nis2-agileandClaude Opus 4.8 d50955d95a [FEAT] Client CLI sicuro provisioning tester/admin (dry-run default, --expect guard, idempotente, SSO-sync-safe)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 08:10:26 +02:00
DevEnv nis2-agileandClaude Opus 4.8 eeeb014c49 [DOCS] Contesto: PWA v1.15.0 pushata+verificata + cron supervisore conferma autonoma (4 cicli rc=0)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 00:56:39 +02:00
DevEnv nis2-agileandClaude Opus 4.8 36513fa722 [FEAT] PWA installabile Android/iOS conforme AGID (v1.15.0)
- manifest.webmanifest + service worker (offline shell, /api network-only, asset stale-while-revalidate)
- set icone (192/512 + maskable + apple-touch + favicon), generate zero-deps (pure Node+zlib)
- tag PWA + viewport viewport-fit=cover (zoom mantenuto, WCAG 1.4.4) in 77 pagine HTML
- AGID/WCAG 2.1 AA: touch target >=44px, orientamento/zoom liberi, safe-area standalone
- generatori riproducibili: scripts/gen-pwa-icons.mjs + scripts/inject-pwa-head.mjs
- bump version 1.14.1 -> 1.15.0

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 21:09:54 +02:00
DevEnv nis2-agileandClaude Opus 4.8 b80bf2361c [BACKUP] Sessione 2026-06-14: supervisore autonomo + contesto + mig.039 + UI V2 plan
- Supervisore autonomo ticket: prompt operativo + dry-run (scripts/), DRAFT rimosso; gate normativo gia' committato
- docs/CONTEXT_LAST_SESSION.md: sessione 2026-06-14 (supervisore LIVE, run#1/#2, rotazione Anthropic rinviata)
- docs/sql/039_integrity_keys.sql: migrazione integrita' DB (PK/UNIQUE/FK) gia' applicata in prod 12/6
- docs/MIGRATION_UI_V2.md: piano migrazione UI V2
- docs/nis2/incidente_r00/: 2 mockup incidente (gateway+dashboard)
- .gitignore: versiona public/vendor/ (asset Bootstrap Italia self-hosted)
- Fix accumulati: EmailService (kill-switch email), Incident/Onboarding/Organization/Services controllers, questionnaire, ReportService, CLAUDE.md standard

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 16:35:41 +02:00
DevEnv nis2-agileandClaude Opus 4.8 489a032658 [DOCS] Archivio adozione supervisore autonomo NIS2 (run#1 gate + run#2 release path + cron 17 */4 LIVE)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 14:08:19 +02:00
DevEnv nis2-agileandClaude Opus 4.8 dcbce3de5c [FIX] Help online: rimossa icona FontAwesome morta (fa-comment-alt) post-swap V2
- public/js/help.js: rimossa unica occorrenza <i class="fas fa-comment-alt"></i>
  (residuo non renderizzato dopo lo swap a Bootstrap Italia V2) + collassato lo
  spazio ridondante, nella guida "Come aprire una segnalazione".
- Cache-buster mirato: help.js?v=20260613 -> 20260614 su 35 pagine public/*.html
  (sibling common-bi.js/i18n.js/common.js/api.js/style.css lasciati invariati).
- public/version.json: 1.14.0 -> 1.14.1.
- Nessuna modifica a dati o schema DB. Ticket #367 (collaudo release supervisore).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 13:33:29 +02:00
DevEnv nis2-agile 0b32d4708f [DOCS] Review NIS2 del prompt operativo supervisore: approvata + 2 aggiunte (cache-buster JS/CSS, git backup) + risposte 4 domande 2026-06-14 10:32:55 +02:00
DevEnv nis2-agile 2db5aa1407 [DOCS] Bozza gate normativo supervisore autonomo ticket (nis2-supervisor-prompt.md)
Gate 'fonti certe' per autonomous-supervisor-agent (AgileHub id=32): nessuna valutazione chiusa senza
fonte normativa citata; difesa prompt-injection; punti delicati (Allegati 3/4, IS-4, 24h/72h/1mese);
confini tecnici (DB container TLS SELECT-only, release edit+USR2 no maintenance flag). Per binding AgileHub.
2026-06-14 08:57:36 +02:00
DevEnv nis2-agile ad3532a90a [FIX] Pannello ARIA: chiusura (X+Esc) robusta + niente sovrapposizione ai pallini (stile TRPG)
Aprendo il pannello ARIA ora si nascondono nx-bar (campana/supporto) + ai-chat-fab -> niente overlap;
la X e Esc chiudono e ripristinano i pallini. Prima la X era fragile e il pannello copriva i bottoni.
Bump common.js?v=20260613d. (TRPG usa ai-assistant.js con stesso pattern toggle/hide.)
2026-06-14 08:56:08 +02:00
DevEnv nis2-agile 4341d86c4c [UI] Allineato a TRPG/AgileHub: rimosso auto-inject feedback.js (doppione) -> solo bug-reporter
NIS2 aveva DUE sistemi feedback: feedback.js (pill cyan 'Segnala/Feedback' + modale scuro) + bug-reporter
AgileHub (campana+supporto). TRPG/ALLTAX usano solo bug-reporter (verificato: trpg ha app/js/bug-reporter.js,
nessun feedback.js). Rimosso l'auto-inject di feedback.js da common.js -> resta il trittico pallini
(notifiche + supporto + ARIA) come la suite. Verificato headless: feedback-fab assente, nx-bell/nx-bug/ai-chat
presenti. Bump common.js?v=20260613c (auto-refetch). feedback.js/api restano nel repo, non iniettati.
2026-06-14 08:33:13 +02:00
DevEnv nis2-agile 30cac8479a [FIX] Modali showModal() invisibili su V2 (solo sfondo grigio): conflitto .modal con Bootstrap Italia
BI introduce .modal{display:none;position:fixed} che nascondeva i nostri modali custom (help, genera-AI,
conferme, crea-rischio...) -> si vedeva solo il backdrop grigio. Aggiunto override scoped
'.modal-overlay .modal{display:block;position:relative;...}' in style.css (specificità > BI, caricato dopo).
Verificato headless: modale help display:block height:765 visible:true. Bump style.css?v=20260613b (auto-refetch).
2026-06-14 08:00:13 +02:00
DevEnv nis2-agile 959ede968d [FIX] Feedback widget: cablata X-API-Key NIS2 (nis2_ak_dev_...) in common.js + bump common.js?v=20260613b
Risolve il 401 del bug-reporter ('Header X-API-Key o Authorization Bearer richiesto'): il widget ora
manda X-API-Key -> gateway ticket AgileHub OK (tenant 7, provenance corretta). Chiave fornita da AgileHub
(full tenant-key, va nel JS pubblico = stesso compromesso TRPG/ALLTAX; debito 'token low-priv' rimandato).
Bump versione common.js -> auto-refetch senza hard-refresh.
2026-06-13 19:21:56 +02:00
DevEnv nis2-agile 3c484fe604 [FIX] Cache-buster ?v=20260613 sui JS/CSS modificati (help/common/common-bi/i18n/feedback/style/demo) + bump bug-reporter + demo assets
Risolve 'le modifiche non si vedono': /js/help.js era senza ?v -> browser serviva la versione cached
vecchia. 281 ref su 57 pagine + injection demo/bug-reporter aggiornate.
2026-06-13 19:17:59 +02:00
DevEnv nis2-agile b49044c57f [FIX] FAB segnalazione/ARIA: icone FontAwesome -> SVG inline (regressione swap BI) + slot data-api-key
Icone: bug-reporter.js (nx-bell fa-bell, nx-bug fa-life-ring) + common.js ai-chat-fab/header/send
(fa-wand-magic-sparkles, fa-paper-plane) erano FA, rimosso dallo swap BI -> cerchi vuoti. Sostituite con
SVG inline (currentColor, self-contained). Verificato headless: 3 FAB renderizzano svg.
Auth widget: cablato s.dataset.apiKey <- window.NEXUS_WIDGET_API_KEY (X-API-Key gateway AgileHub, era
assente -> 401). _detectUser ora legge anche nis2_access_token. SERVE la chiave X-API-Key da AgileHub.
2026-06-13 18:49:49 +02:00
DevEnv nis2-agile 703831c556 [DEMO] Checklist: step 9 = Assets/GV.OC-04 (era cross-analysis gate-ato) + azione re-tag RAG AgileHub 2026-06-13 13:03:01 +02:00
DevEnv nis2-agile 8c0074aa5d [DEMO] Polish step 9: cross-analysis (gate consultant) -> Assets/GV.OC-04 (visibile al demo-user)
cross-analysis e gate-ato consultant/super_admin: per il demo-user (compliance_manager) renderizza
'riservata ai Consulenti/INSUFFICIENT_ROLE' e NON costruisce #chat-input/#quick-qs/#tab-chat -> highlight
impossibili. Sostituito con Assets (relevance scoring GV.OC-04): feature distintiva NIS2, pienamente
visibile, gia nel dataset 996001. Highlight #asset-stats + #assets-container verificati in browser reale
(ok:true, errs:[]). L'AI resta dimostrata da ARIA-narratore + AI gap analysis (step 2).
RICHIEDE re-tag RAG lato AgileHub: step9 -> mappa 08_assets (era 15_cross-analysis).
2026-06-13 13:02:34 +02:00
DevEnv nis2-agile 3ef69dfd74 [DEMO] Run 10-step browser reale: fix manifest step 9 (cross-analysis -> #portfolio-header)
Harness same-origin sui 10 step ha trovato 1 difetto reale: step 9 puntava a #quick-qs/#chat-input che
il JS non renderizza (tab chat non-default, assenti nel DOM) -> ri-ancorato a #portfolio-header (presente,
highlightApplied:true confermato). Gli altri 'NOT_FOUND' erano artefatti --virtual-time-budget: incidents
#crit-*, policies #ai-*, supply-chain #assessment-live-score sono presenti nel DOM renderizzato (dump 7s),
il vero avatar li trova al loro at_ms. 10/10 step ora risolvibili.
2026-06-13 12:51:07 +02:00
DevEnv nis2-agile d96a5b5f49 [DEMO] Checklist: postMessage->highlight PROVATO in browser reale (ok:true, highlightApplied:true, errs:[])
Harness same-origin temp sul sottodominio + headless chrome: ready -> highlight #compliance-gauge ->
classe nis2-demo-hl applicata, 0 errori. Il SPA esegue i comandi del widget in un browser vero.
Resta solo il giro completo 10 step col widget AgileHub live (conferma di produzione).
2026-06-13 11:47:22 +02:00
DevEnv nis2-agile 7008b9ecc4 [DEMO] Checklist: aggiunta validazione browser headless NIS2 (auth+runtime OK, 2 bug fixati fcf8b09) 2026-06-13 11:31:14 +02:00
DevEnv nis2-agile fcf8b0963b [DEMO] Fix 2 bug SPA-side trovati al collaudo browser headless (auth in-memory + boot seed)
Il collaudo curl validava il backend ma non l'esecuzione JS nel browser. Con google-chrome --dump-dom:
1) common-bi.js: sync api.token/orgId IN-MEMORY (api.js crea l'istanza prima leggendo localStorage vuoto
   → checkAuth vedeva token null → redirect a login). Ora la SPA si auto-autentica.
2) demo-mode.js boot(): non bloccare sul seed quando HMAC_ENFORCE=false (cross-origin il seed non arriva;
   non serve, HMAC off) → il runtime (banner/listener/ready) ora parte.
Verificato headless su dashboard/risks/incidents: login:0, banner+nis2-demo-on presenti.
2026-06-13 11:30:55 +02:00
DevEnv nis2-agile f946b3a9ca [DEMO] Checklist smoke avatar-in-the-loop + telemetria demo_events (parent origin confermato dimostrazione)
Criteri oggettivi per-step (navigate+highlight attesi, ARIA fonti certe), pre-flight verde, e query
demo_events per riscontro lato NIS2 post-giro. Smoke browser-driven da AgileHub, nessuna finestra bloccante.
2026-06-13 11:00:45 +02:00
DevEnv nis2-agile bf14d9937c [DEMO] Collaudo E2E lato NIS2 PASS (0 difetti, 5 dimensioni) — pronti per giro avatar-in-the-loop
Via sottodominio: integrità proxy (md5 parity, 17 viste+7 asset 200), auto-auth (read 200/write 403,
tenant isolation, spoof org ignorato), manifest 10 step 21/21 selettori presenti, endpoint codici attesi,
asset demo gated. Auth reale intatta. Workflow collaudo wf_c473580d-ec3.
2026-06-13 10:36:09 +02:00
DevEnv nis2-agile 1f77f91ec6 [DEMO] Archivio: AgileHub Fase1 RAG(415)+formazione G1+sottodominio reverse-proxy; handoff #2 RISOLTO
Sottodominio nis2.dimostrazione.agile.software live (reverse-proxy). DEMO_BASE allineato (3e8a90f).
Punto coordinamento #2 (same-origin) marcato RISOLTO via sottodominio. Collaudo E2E in corso.
2026-06-13 10:33:59 +02:00
DevEnv nis2-agile 3e8a90f969 [DEMO] Sottodominio: DEMO_BASE -> nis2.dimostrazione.agile.software + origin allowlist postMessage
AgileHub ha consegnato il reverse-proxy nis2.dimostrazione.agile.software -> nis2.agile.software.
- DemoController.DEMO_BASE default = sottodominio (spa_iframe_url/manifest/credentials lì); env DEMO_BASE_URL override.
- demo-mode.js: origin-check ora ALLOWLIST (dimostrazione + nis2.dimostrazione) robusto alla topologia widget;
  outbound postMessage mirato all'origin reale del parent (ancestorOrigins/captured).
2026-06-13 10:31:46 +02:00
DevEnv nis2-agile 460d435a47 [DEMO] Auto-auth SPA demo: demo_jwt nel fragment spa_iframe_url + bootstrap token sincrono in common-bi.js
Chiude il gap auth: la SPA demo si auto-autentica col demo_jwt (token API nis2_access_token + org dal
payload) PRIMA di checkAuth, cross-origin (niente sessionStorage same-origin). spa_iframe_url ora atterra
su /dashboard.html?demo=..#djwt=... DemoController.DEMO_BASE override via env DEMO_BASE_URL (switch a
sottodominio senza codice). USR2 richiesto per DemoController.
2026-06-13 10:00:28 +02:00
DevEnv nis2-agile 4222e827f9 [DEMO] Archivio scambio AgileHub 2026-06-13: HMAC #1 CHIUSO (runtime-avatar = no HMAC per-msg)
- INCOMING_FROM_AGILEHUB: contratto HMAC external/v1 (canale ticket) + chiarimento canale runtime-avatar
  (X-Internal-Key, no HMAC per-messaggio) + persona ARIA pronta (RAG 402) + piano Fase 1.
- OUTGOING aggiornato: punto coordinamento #1 marcato CHIUSO (demo-mode.js HMAC_ENFORCE=false, a851caf).
2026-06-13 09:41:22 +02:00
DevEnv nis2-agile a851caf669 [DEMO] HMAC per-messaggio OFF: canale runtime-avatar e origin-verified (chiarimento AgileHub 2026-06-13)
Il postMessage widget->SPA e il canale runtime avatar (non external/v1): server-to-server usa
X-Internal-Key (gia su reset-dataset), il postMessage si fida di ev.origin (same-origin). HMAC verify
resta flag-gated (HMAC_ENFORCE=false) da riaccendere solo se al collaudo il widget firma.
2026-06-13 09:39:05 +02:00
DevEnv nis2-agile 48ad479c01 [DEMO] Handoff ad AgileHub: product-side pronto (formazione+demo) — riepilogo + punti coordinamento
Stato punti 1,2,3,4,6,7,8 = FATTI/deployati/collaudati. Da coordinare: HMAC canonical messaggio,
ops same-origin dimostrazione.agile.software, data-demo-action anchors, sweep 132 id (non bloccante).
2026-06-13 09:01:53 +02:00
DevEnv nis2-agileandClaude Opus 4.8 d6d61885b4 [DEMO] Manifest tour (punto 4): nis2-tour-2026.json — 10 step ancorati a id reali verificati
Steps: dashboard/assessment/acn-gap/risks/incidents/policies/supply-chain/isms/cross-analysis/reports.
Highlight su selettori ESISTENTI verificati dalle mappe (non i 132 da-aggiungere). Narrazione senza
numeri inventati (ARIA usa RAG sul dataset 996001). express_subset [1,4,5,9]. Servito da GET /api/demo/manifest.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 09:00:04 +02:00
DevEnv nis2-agileandClaude Opus 4.8 d16fdd2c02 [DEMO] Frontend demo-mode (punto 4): demo-mode.js + demo-selectors.js + demo.css + hook ?demo=
Avatar di prodotto, product-demo-protocol v1.0.1 (NIS2 multi-page):
- public/js/demo-mode.js: runtime canale postMessage (inbound navigate/highlight/scroll_to/
  trigger_action/open_tab/...; outbound ready/spa_state_changed/step_animation_done/...),
  verifica origin+HMAC (chiave SHA-256(jwt:seed:demo-control-channel))+idempotency, banner read-only.
- public/js/demo-selectors.js: whitelist 17 viste (view->url) + azioni read-only sicure.
- public/css/demo.css: highlight pulse-blue/halo + banner.
- common-bi.js: hook che inietta gli asset SOLO con ?demo= (no-op per utenti normali).

NOTE: (a) HMAC canonical del MESSAGGIO da riconciliare con AgileHub al collaudo (canonicalize()).
(b) manca il manifest (steps+selettori) — dipende dagli id stabili in corso.
node --check OK su tutti.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 08:56:36 +02:00
DevEnv nis2-agileandClaude Opus 4.8 be29895446 [FORMAZIONE] Banca esercizi/quiz (punto 8): 32 domande + 9 esercizi sandbox, 10 moduli
Ancorata a tassonomia + mappe-logiche, risposte fondate su FONTI CERTE (Allegati 3/4, IS-4 solo
essenziali, ciclo 24h/72h/1mese, SoA 111 controlli, soglia rilevanza asset 40, ecc.). Formato per
motore quiz (esame soglia 80%). Esercizi pratici eseguibili nella sandbox org 996002.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 08:51:17 +02:00
DevEnv nis2-agileandClaude Opus 4.8 6900d942a4 [DEMO] resetDataset cablato a DemoSeedService (reset reale dataset demo/sandbox)
- application/services/DemoSeedService.php: logica seed/clone golden #151 -> 996001/996002 (riusabile)
- DemoController::resetDataset: re-seed reale via service (?scope=demo|sandbox|default both), non piu stub
- scripts/seed-demo-dataset.php: thin CLI wrapper sul service
Testato prod: POST /api/demo/reset-dataset (X-Internal-Key) scope=sandbox -> 200, 996002 ri-seedata.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 08:47:09 +02:00
DevEnv nis2-agile e0204dbaa7 [DEMO] fix seeder: utente demo via Database::insert (must_change_password default) + must_change_password=0
Eseguito su prod: org 996001 (DataCore Demo) + 996002 (sandbox) seedate. Guard deployato (USR2) e
testato end-to-end: read demo 200 (score 75), write demo 403 DEMO_READ_ONLY, auth reale intatta.
2026-06-13 08:39:32 +02:00
DevEnv nis2-agileandClaude Opus 4.8 e04eba62c1 [DEMO] Avatar prodotto: read-only guard (BaseController) + seeder dataset demo 996001/996002
Increment backend formazione-first (product-demo-protocol v1.0.1):
- BaseController::applyDemoGuard() — SAFE-BY-CONSTRUCTION (flusso auth normale invariato):
  riconosce demo_jwt scope=demo:read-only (blocca scritture 403 DEMO_READ_ONLY) e
  training:sandbox (scritture solo su org sandbox); contesto sintetico user=0 ruolo
  compliance_manager su org range 996xxx; mai super_admin. Short-circuit in requireAuth/
  requireOrgAccess/requireOrgRole. php -l OK. DA DEPLOYARE (USR2) + testare quando host disponibile.
- scripts/seed-demo-dataset.php — clona golden DataCore #151 in 996001 (demo RO) + 996002
  (sandbox scrivibile), idempotente, richiamabile da resetDataset. php -l OK. DA ESEGUIRE su host.

NB: chiave ssh host revocata a meta-sessione → seed/USR2/push in attesa di ri-provisioning.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 08:19:53 +02:00
DevEnv nis2-agileandClaude Opus 4.8 4dfab2a391 [FORMAZIONE] Avatar di prodotto — mappa-logica COMPLETA (22 viste) + SELETTORI_DEMO + tassonomia corso + fix kb.js
Deliverable formazione-first (DESIGN_AVATAR_FORMAZIONE / product-demo-complete):
- docs/mappa-logica/01..22_*.md: tutte le viste app V2 mappate (formato canonico standard §2),
  selettori VERIFICATI sul DOM reale, endpoint verificati su api.js/script, gate ruolo dai controller
- docs/mappa-logica/SELETTORI_DEMO.md: registry canonico (22 viste, 131 visualizzazione + 89 azioni)
  + worklist consolidata 132 id stabili da aggiungere (modifiche chirurgiche future)
- docs/formazione/TASSONOMIA_CORSO_NIS2.{md,json}: 10 moduli / 28 lezioni / ~7h45, prerequisiti+durate,
  esame con soglia 80%, sandbox 'prova tu' org 996002
- fix kb.js: ingest scope=ORG ora invia organization_id (prima 422 KB_ORG_REQUIRED) — bug trovato da A2

Prodotto con 4 trittici di agenti (A1 esecutore -> A2 revisore -> A3 controllore avversariale):
A2: ~14 correzioni (cross-ref, gate ruolo, comportamenti); A3 PASS: 38 selettori campionati 0 rotti,
18 endpoint reali, 0 violazioni normative (Allegati 3/4, IS-4, '1 mese', PII.* interna), 9 claim verificati.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 18:50:19 +02:00
DevEnv nis2-agileandClaude Opus 4.8 e1ab0b3ea0 [DEMO] Avatar di prodotto Fase 1 — fondazione backend (5 endpoint /api/demo/*)
product-demo-protocol v1.0.1, Modalita A. Additivo (zero impatto endpoint esistenti).

- DemoController: session-start, manifest, event, credentials, reset-dataset
  * demo_jwt scope=demo:read-only, org_id 996001 (range demo 996000-996999), TTL 30m
  * hmac_key_seed base64 44ch, rate-limit 5/min+50/h per IP, eventi idempotenti
- Migration 040: tabelle demo_sessions + demo_events
- Rotte 'demo' in index.php (chiavi camelCase: router camelCasa il segmento URL)
- docs/DEMO_AVATAR_NIS2.md: piano Fase1/Fase2, decisioni, punti integrazione AgileHub, gap protocollo

Smoke prod OK: session-start 201, manifest 200, credentials 200, event 204, reset 401(no key).
TODO Fase 1: read-only guard in requireAuth, dataset demo 996001, frontend demo-mode, manifest+mappe.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 18:15:37 +02:00
DevEnv nis2-agileandClaude Opus 4.8 2b197440f6 [KB] Script ingest Guida UI V2 nella KB AI (eseguito: 8 chunk, scope SYSTEM)
ARIA ora conosce la nuova interfaccia V2 (docs/kb/V2_UI_NAVIGAZIONE.md indicizzato in
Qdrant nis2_kb scope SYSTEM). Header documenta il workaround mount (copia sotto application/).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 15:14:39 +02:00
DevEnv nis2-agileandClaude Opus 4.8 1c64211685 [UI] SWAP V2: Bootstrap Italia ora UFFICIALE su 27 pagine app (kill della vecchia UI)
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>
2026-06-12 14:49:15 +02:00
DevEnv nis2-agileandClaude Opus 4.8 36967f9452 [UI] V2 completezza Bootstrap Italia: 11 pagine app -bi mancanti + companies + help.js + KB doc
Completa la copertura V2 al 100% delle pagine app autenticate (pre-swap).
Additivo: nessun file live HTML promosso ancora (lo swap e separato).

- 9 pagine app -bi: isms, acn-gap, normative, whistleblowing, kb, cross-analysis,
  service-continuity (doc standalone), guida, companies
- admin/{index,organizations,users}-bi.html (path corretti, common-bi.js)
- help.js: +89 righe help contestuale pagine V2 (vincolo fonti certe)
- docs/kb/V2_UI_NAVIGAZIONE.md: doc UI/navigazione V2 per la KB AI (ARIA)
- Verifica: tutte servite 200, 0 CDN/FontAwesome, sprite validi, parita ID

Prodotto via Workflow a trittici (run wf_c4962fbe-93f) + fix manuale companies/sprite.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 14:46:37 +02:00
DevEnv nis2-agileandClaude Opus 4.8 4d676f2e21 [UI] Bootstrap Italia rollout (Opzione B) — vendor self-hostato + 16 pagine -bi + sidebar BI
Pipeline a trittici (Esecutore->Revisore->Controllore avversariale), 6 trittici T1-T6.
Tutto ADDITIVO: nessuna pagina/JS live modificata, produzione intatta. Swap non incluso.

- public/vendor/bootstrap-italia/ : BI v2.18.1 self-hostato (CSS+JS bundle+16 woff2+sprite), MAI CDN
- 16 pagine *-bi.html (login/register/onboarding/forgot/reset/index + dashboard/assessment/
  risks/incidents/policies/supply-chain/training/assets/reports/settings)
- public/js/common-bi.js : sidebar/topbar in markup BI (additivo, riusa stessi ID + common.js)
- Verifica sul path servito reale: 16/16 -> 200, 0 CDN, 0 FontAwesome residui, parita ID/hook completa, WCAG AA
- docs/SISTEMA_TRITTICI_AGENTI.md : design del sistema a trittici

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 13:31:53 +02:00
DevEnv nis2-agileandClaude Opus 4.8 06c94b3c05 [REVISIONE] Progetto revisione conformità+UI + 2 agenti esperti + correzioni R3 (audit NIS2/ISO)
Progetto di revisione unificato (docs/PROGETTO_REVISIONE_NIS2.md) che fonde:
- docs/PRINCIPI_AI_E_CONFORMITA_NORMATIVA.md (cyber + AI Act/GDPR/L.132 + principi AI)
- docs/VERIFICA_GAP_UI_AGID_BOOTSTRAP_ITALIA.md (gap UI vs AGID/Bootstrap Italia)
Agenti esperti: .claude/agents/nis2-expert.md + iso-27001-expert.md (read-only/advisory).

Audit R1 (NIS2) + R2 (ISO SGSI) = conformi, riserve minori. Correzioni R3 applicate
(lint + login reale OK, app su container TLS):
- IncidentController: final_report_due +30gg fissi -> +1 mese calendario, ancorato alla
  notifica reale in sendNotification (Art.23.4 lett.d).
- AIService prompt "report 30d" -> "1 mese dalla notifica 72h".
- help.js: GV.SC Allegato 2 -> Allegati 1 e 2 (Art.21.2(d)).
- nis2_sources.php: esplicitato Allegato 3=importanti / 4=essenziali.
- IsmsModelController export: nota PII.* = codifica interna (non numeri ufficiali 27018).
A4 (label whistleblowing "Art.32") DEFERITO: cita Art.32 D.Lgs.138/2024, da verificare sul testo.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 09:54:14 +02:00
DevEnv nis2-agileandClaude Opus 4.8 ae7bb072d7 [DOCS] Manuale d'uso COMPLETO v1.14.0: accesso/registrazione/onboarding passo-passo + 18 moduli dall'help reale
Riscrittura completa: istruzioni concrete (login, registrazione 3 step, onboarding
4 step con campi reali, navigazione), per ogni modulo "cosa trovi e come si usa"
estratto dall'help contestuale del prodotto (help.js), FAQ, glossario. Rimosse le
interruzioni di pagina che lasciavano pagine vuote. Generatore self-contained
(estrae i contenuti da public/js/help.js via node).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 18:19:54 +02:00
DevEnv nis2-agileandClaude Opus 4.8 0a883b7cae [DOCS] Manuale d'uso prodotto NIS2 Agile (Word/.docx) v1.14.0 + generatore
Manuale completo in docs/MANUALE_UTENTE_NIS2_AGILE.docx (22 capitoli: intro,
onboarding, dashboard, Gap Analysis NIS2/ACN, Modello SGSI ISO 27001/17/18,
rischi, incidenti, policy, supply chain, formazione, asset, audit&report,
whistleblowing, normative, KB/AI, feedback, impostazioni, admin, API,
glossario, riferimenti). Generato con scripts/genera-manuale-utente.py
(OOXML puro, nessuna dipendenza esterna).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 17:43:46 +02:00
DevEnv nis2-agileandClaude Opus 4.8 9964b2b73c [FIX] migrate-isms runner: strip commenti --in coda riga (un commento conteneva ';')
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 17:08:17 +02:00