[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>
This commit is contained in:
DevEnv nis2-agile
2026-06-14 14:08:19 +02:00
co-authored by Claude Opus 4.8
parent dcbce3de5c
commit 489a032658
@@ -0,0 +1,46 @@
# INCOMING FROM AGILEHUB — Adozione supervisore autonomo ticket (NIS2)
> Data: 2026-06-14 (Europe/Rome). Standard: `autonomous-supervisor-agent` (`hub_standards` id=32).
> NIS2 = **primo adopter LIVE** dello standard. Stato: cron registrato, periodo di osservazione in corso.
## 1. Cos'è
Un agente supervisore (`claude -p --model opus`, headless nel devenv NIS2, chiave SSH **effimera per ciclo**) prende in carico **end-to-end** i ticket del prodotto NIS2: analizza, approva/risponde, applica fix, rilascia, notifica. NIS2 esce dal `ticket-agent-cron` generico — l'owner unico diventa il supervisore.
Governance: **supervised-by-exception** (niente stato `AWAITING_USER_CONFIRMATION`), opt-in, **kill switch sempre attivo**. Ogni azione → email azione + heartbeat al referente. Audit JSONL.
## 2. Decisioni utente (a/b/c/d)
- **(a) Input fidato**: ticket di tagliavini, mascagni, benassati, simon.
- **(b) Auth**: il supervisore usa l'identità che NIS2 usa già (`devapp3@`).
- **(c) Gate normativo**: presente un agente/gate dedicato → registrato lato AgileHub.
- **(d) Email heartbeat**: referente **cristiano.benassati@gmail.com**.
## 3. Prompt
- **Operativo** (ciclo poll→approve→verify→release→email): `scripts/nis2-supervisor-acting-prompt.md` (autore AgileHub, revisionato NIS2-side).
- 2 aggiunte NIS2 obbligatorie integrate: **(1) cache-buster `?v=`** su ogni fix JS/CSS (bump su TUTTI gli HTML referenti — i JS/CSS sono serviti senza versioning, il browser cache-a a oltranza); **(2) git backup + commit chirurgico**.
- **Gate di dominio "fonti certe"**: `docs/nis2-supervisor-prompt.md`. Punti cardine:
- Nessuna chiusura di rischio/misura/adempimento/conformità senza **almeno una fonte normativa ammessa** citata; in dubbio → `[DA VERIFICARE]`, mai affermazione secca; **vietato inventare** articoli/allegati/scadenze.
- Difesa prompt-injection: il corpo del ticket è **dato non fidato**.
- Errori ricorrenti: **Allegato 3 = IMPORTANTI / Allegato 4 = ESSENZIALI**; **IS-4 solo essenziali**; **24h / 72h / 1 mese** (relazione finale entro 1 mese dalla notifica 72h, NON "30 giorni dal rilevamento"); misure base 37/87 (importanti) · 43/116 (essenziali); SoA ISO 111 = 93+7+11; il punteggio compliance = % misure tecniche, non conformità legale.
- Confini tecnici: DB **SELECT-only** su container `nis2-db` via **TCP+TLS** (host MySQL in decommissioning); release = edit + `kill -USR2 1` **senza** maintenance mode; effetti giuridici → escala Direzione/Legale.
## 4. Validazione (run osservate, non-cron)
- **run #1 — ticket #366** (domanda: obblighi/tempistiche notifica incidenti) → **PASS gate**.
- 24h / 72h / **1 mese** corretti (rifiuta esplicitamente "30 giorni dal rilevamento"); Allegato 3/4 corretto; fonti: Dir.(UE) 2022/2555 Art.23 · D.Lgs.138/2024 **Art.25** (notifica nel decreto è Art.25, Art.23=governance) · Det. ACN 164179/2025 + 333017/2025; comma non presente nel registro fonti marcato `[DA VERIFICARE]` (nessuna invenzione); disclaimer compliance + escala legale.
- 0 scritture DB, 0 edit codice (ticket-domanda).
- **run #2 — ticket #367** (fix release: rimossa icona FontAwesome morta `fa-comment-alt` in `help.js:770`, residuo post-swap Bootstrap Italia V2) → **PASS path release**.
- Commit `dcbce3d` chirurgico: **37 file / 37+ 37−** = 35 HTML con `help.js?v=20260613→20260614` + `help.js` + `version.json` (1.14.0→1.14.1). **0 file backend/DB.** HEAD == origin/main. Fix reso live (help.js servito = 0 occorrenze `fa-comment-alt`).
- Nota tecnica: per modifiche **solo JS/HTML/JSON** l'USR2 è no-op (propagazione reale = bind-mount + `?v=`); resta rito di release innocuo.
## 5. Cron LIVE
- File: `/etc/cron.d/nis2-supervisor` (644 root:root, cron service active).
- Schedule: `17 */4 * * * root SUPERVISOR_PRODUCT=nis2 ... supervisor-agent-cron.sh` → ogni 4h al minuto 17 (00/04/08/12/16/20:17 CEST). Primo giro: 16:17 CEST 14/6 (no-op a coda vuota, valida la meccanica).
- **Kill switch**: `touch /etc/agilehub/supervisor-nis2.disabled`.
- **Rollback cron**: `rm /etc/cron.d/nis2-supervisor`.
- Log run: `/var/log/nis2-supervisor-*.log` · Audit: `/var/log/nis2-supervisor-audit.jsonl` · Registro: `docs/CRON_REGISTRY.md` (sez. NIS2) + `VIGILE_AUDIT_LOG.md`.
## 6. Piano osservazione
3 giorni di monitoraggio (log auth + audit JSONL + email heartbeat, kill switch a portata). `hub_standards_adoption`[id=32, nis2] → **implemented** dopo ≥1 settimana stabile (~21/06/2026).
## 7. Pendenze
- **Rotazione chiave Anthropic** (era stata incollata in chat = esposta; "ruotiamo dopo i test"). In vault: `tier1__nis2-app__anthropic / api_key`.
- Debito: cache headers server-side (per evitare i bump manuali `?v=`); token widget a basso privilegio (debito AgileHub-side).