From f946b3a9ca98e70c0b040dfefba51786cc4a4c8b Mon Sep 17 00:00:00 2001 From: DevEnv nis2-agile Date: Sat, 13 Jun 2026 11:00:45 +0200 Subject: [PATCH] [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. --- docs/COLLAUDO_SMOKE_AVATAR_CHECKLIST.md | 37 +++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 docs/COLLAUDO_SMOKE_AVATAR_CHECKLIST.md diff --git a/docs/COLLAUDO_SMOKE_AVATAR_CHECKLIST.md b/docs/COLLAUDO_SMOKE_AVATAR_CHECKLIST.md new file mode 100644 index 0000000..f4cf5d6 --- /dev/null +++ b/docs/COLLAUDO_SMOKE_AVATAR_CHECKLIST.md @@ -0,0 +1,37 @@ +# 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=#djwt=` 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 ``: +```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. + +## 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.