3.8 KiB
Smoke congiunto avatar-in-the-loop NIS2 — checklist oggettiva + telemetria
Per il giro live browser-driven guidato da AgileHub (persona ARIA_SUPPORT_NIS2, tour_key
demo:nis2-tour-2026). Bar del brief: "mostra la cosa giusta · dice cose vere · 0 errori tecnici · mai una schermata sbagliata". Parent origin confermato:dimostrazione.agile.software(widget/hub) iframe-a la SPA sunis2.dimostrazione.agile.software.
Pre-flight (già verde, collaudo wf_c473580d-ec3)
session-start→spa_iframe_url=…/dashboard.html?demo=<sid>#djwt=<jwt>sul sottodominio.- Auto-auth SPA (token dal
#djwtprima dicheckAuth); read 200 / write 403DEMO_READ_ONLY; tenant isolato (996001). - demo-mode.js: allowlist origin (
dimostrazione+nis2.dimostrazione),HMAC_ENFORCE=false. - RAG 415 attivo (75 chunk + binding ARIA).
Comportamento atteso per i 10 step (cosa è "giusto")
| Step | navigate → vista | Highlight attesi (devono accendersi sull'elemento reale) | ARIA narra (dal RAG, NIENTE numeri inventati) |
|---|---|---|---|
| 1 | dashboard | #compliance-gauge, #stats-grid, #deadlines-list |
score Art.21 + KPI + scadenze |
| 2 | assessment | #assessment-results, #ai-analysis-card |
80 domande/10 cat + gap analysis AI |
| 3 | acn-gap | #acn-bar-fill, #acn-catalog |
requisiti Det. ACN, essenziali/importanti |
| 4 | risks | #btn-ai-suggest, #fair-histogram |
matrice 5x5 ISO 27005 + FAIR |
| 5 | incidents | #crit-users, #crit-duration, #crit-attack |
significatività + 24h/72h/1 mese |
| 6 | policies | #ai-generate-btn, #ai-preview-container |
bozza AI da rivedere/approvare |
| 7 | supply-chain | #criticality-chart, #assessment-live-score |
questionario fornitori pesato |
| 8 | isms | #btn-aigen, #docs-list |
SGSI 6 step + SoA 111 controlli |
| 9 | cross-analysis | #quick-qs, #chat-input |
ARIA fonti certe + analisi trasversale |
| 10 | reports | #report-container |
report CdA + audit hash-chain + ISO/NIST |
FAIL se: pagina sbagliata, highlight su selettore assente/vuoto, ARIA che inventa numeri, qualsiasi scrittura che passa (deve dare 403), o errore tecnico in console.
Telemetria lato NIS2 (osservabilità del giro)
Durante il giro gli eventi arrivano su POST /api/demo/event (tabella demo_events, idempotente). Dopo il giro, riscontro lato nostro per la sessione <sid>:
SELECT event_type, step_id, client_timestamp_iso FROM demo_events WHERE session_id = ? ORDER BY id;
Atteso: 10× step_completed (step_id 1..10), 0× error_encountered. Eventuali error_encountered riportano metadata.code (es. SELECTOR_NOT_FOUND, UNKNOWN_VIEW, ACTION_NOT_WHITELISTED) → triage immediato lato nostro.
Validazione browser headless lato NIS2 (2026-06-13) — eseguita
Con google-chrome --headless --dump-dom (esegue il JS, cosa che curl non fa) su nis2.dimostrazione.agile.software, sessione demo reale (?demo=<sid>#djwt=<jwt>), pagine dashboard/risks/incidents:
- Auth-bootstrap OK: nessun redirect a login (
login-formassente), titolo pagina reale, contenuto renderizzato (gauge, tabelle). - Runtime demo OK:
#nis2-demo-bannerpresente +body.nis2-demo-on→ demo-mode.js inizializza. - 2 bug SPA-side trovati e FIXATI (commit
fcf8b09): (1)api.tokennon sincronizzato in-memory → redirect a login; (2)boot()bloccato sulseedHMAC (non disponibile cross-origin, e non serve con HMAC off). Senza questi fix il giro avatar sarebbe finito su "pagina di login".
Coordinamento
Lo smoke è browser-driven e lo lancia AgileHub quando vuole (nessuna finestra oraria bloccante richiesta dal nostro lato). Dopo il giro: AgileHub verifica retrieval RAG 415 + comportamento persona; NIS2 verifica demo_events + console. Se emerge un difetto lato NIS2 → fix + USR2 in pochi minuti.