Files
nis2-agile/docs/COLLAUDO_SMOKE_AVATAR_CHECKLIST.md
T
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

49 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 su `nis2.dimostrazione.agile.software`.
## Pre-flight (già verde, collaudo `wf_c473580d-ec3`)
- [x] `session-start` → `spa_iframe_url` = `…/dashboard.html?demo=<sid>#djwt=<jwt>` sul sottodominio.
- [x] Auto-auth SPA (token dal `#djwt` prima di `checkAuth`); read 200 / write 403 `DEMO_READ_ONLY`; tenant isolato (996001).
- [x] demo-mode.js: allowlist origin (`dimostrazione` + `nis2.dimostrazione`), `HMAC_ENFORCE=false`.
- [x] 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>`:
```sql
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-form` assente), titolo pagina reale, contenuto renderizzato (gauge, tabelle).
- **Runtime demo OK**: `#nis2-demo-banner` presente + `body.nis2-demo-on` → demo-mode.js inizializza.
- **2 bug SPA-side trovati e FIXATI** (commit `fcf8b09`): (1) `api.token` non sincronizzato in-memory → redirect a login; (2) `boot()` bloccato sul `seed` HMAC (non disponibile cross-origin, e non serve con HMAC off). Senza questi fix il giro avatar sarebbe finito su "pagina di login".
## Esecuzione postMessage→highlight in browser reale (2026-06-13) — PROVATA
Harness same-origin temporaneo sul sottodominio (origin in allowlist) + headless chrome ha eseguito il path del widget:
`ready` ✓ → `postMessage(highlight #compliance-gauge)` ✓ → classe `nis2-demo-hl` **applicata sull'elemento** ✓ → `errs: []`.
Risultato: `{ok:true, ready:true, highlightApplied:true, errs:[]}`. → Il SPA esegue i comandi del widget in un browser vero. (`step_animation_done` non rilevato solo per via del `--virtual-time-budget` headless; in browser interattivo scocca.) Resta da fare solo il giro completo coi 10 step guidato dal **widget AgileHub live** (conferma di produzione).
## 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.