Files
nis2-agile/docs/STUDIO_MODELLO_ORGANIZZATIVO_ISO27001.md
T
DevEnv nis2-agile 3f74165531 [FEAT] Modello Organizzativo SGSI (ISO 27001/27017/27018) + SoA pre-popolato da NIS2
Nuovo modulo guidato in 6 step (cl. 4-10 + Statement of Applicability):
- migration 037 (isms_models/roles/soa/documents) + 038 (dataset 111 controlli:
  93 Annex A:2022 + 7 CLD/27017 + 11 PII/27018) + runner scripts/migrate-isms.php
- IsmsModelController (16 endpoint) registrato in index.php
- SoA pre-popolato dalle risposte Gap Analysis NIS2 (mapping iso27001_control)
- estensioni cloud condizionali 27017/27018 via flag uses_public_cloud/
  is_cloud_provider/processes_pii_in_cloud
- AIService::generateIsmsDocument + fonti ISO in nis2_sources.php
- frontend isms.html/isms.js + api client + sidebar + help + i18n IT/EN
- ingest KB ISO (scope SYSTEM, solo titoli/sintesi: no testo coperto da copyright)
- version.json 1.14.0; doc studio + deploy handoff

Strumento di supporto/pre-audit (non certificazione). Migration DA APPLICARE su host.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 11:32:42 +02:00

249 lines
21 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.
# Studio — Modulo "Modello Organizzativo ISO 27000 (SGSI)" + Onboarding PMI
> **Tipo**: documento di studio e piano di implementazione (NO codice applicato).
> **Data**: 2026-06-11 — Autore: sessione Claude (devapp3)
> **Stato**: bozza in attesa di revisione utente prima di toccare codice.
> **Decisioni utente (2026-06-11)**:
> 1. Ambito = **SGSI completo** (clausole ISO/IEC 27001:2022 4–10 + Statement of Applicability)
> 2. Deliverable corrente = **questo documento di studio + piano** (niente migration/controller finché non approvato)
> 3. Percorso PMI = **stesso wizard completo, con più guida e supporto AI** (nessuna semplificazione dei contenuti normativi)
> 4. **Aggiornamento 2026-06-11**: includere le estensioni cloud della famiglia 27000 nelle versioni **attuali** — **ISO/IEC 27017:2015** (controlli sicurezza servizi cloud) e **ISO/IEC 27018:2019** (protezione PII in cloud pubblico per PII processor), come **estensioni condizionali** del SoA (vedi §3.3bis e §4.2).
---
## 1. Obiettivo
Estendere NIS2 Agile con una **procedura guidata (wizard)** che accompagni l'azienda nella costruzione del proprio **Sistema di Gestione della Sicurezza delle Informazioni (SGSI / ISMS)** secondo **ISO/IEC 27001:2022**, riusando il più possibile i dati e i moduli già presenti per la compliance NIS2.
Il wizard deve produrre, a fine percorso, gli artefatti minimi di un SGSI:
- **Ambito e contesto** del SGSI (cl. 4)
- **Policy SGSI + ruoli/responsabilità** (cl. 5)
- **Metodologia di risk assessment + obiettivi** (cl. 6)
- **Statement of Applicability (SoA)** sui 93 controlli Annex A:2022 (cl. 6.1.3 d), **estendibile** con i controlli cloud **ISO 27017:2015** e i controlli privacy-cloud **ISO 27018:2019** quando pertinenti (vedi §3.3bis / §4.2)
- **Documented information** minima obbligatoria (cl. 7–8)
- **Piano di monitoraggio, audit interni e miglioramento** (cl. 9–10)
**Famiglia ISO 27000 coperta** (versioni attuali):
- **ISO/IEC 27001:2022** — requisiti SGSI (base del wizard)
- **ISO/IEC 27002:2022** — guida implementativa Annex A
- **ISO/IEC 27017:2015** — *estensione condizionale*: controlli di sicurezza per servizi cloud (cliente e/o fornitore cloud)
- **ISO/IEC 27018:2019** — *estensione condizionale*: protezione dei PII in cloud pubblico per chi agisce da PII processor (ponte verso GDPR)
Per le **PMI**, lo stesso percorso resta integrale ma viene arricchito di guida contestuale, esempi e bozze AI dimensionate alla realtà di una piccola/media impresa (vedi §8).
---
## 2. Stato dell'arte — cosa esiste già (riuso, non riscrittura)
Il prodotto contiene già un ponte significativo NIS2 ↔ ISO 27001. Riuso previsto:
| Componente esistente | File / Tabella | Come lo riuso |
|---|---|---|
| ENUM framework controlli | `compliance_controls.framework` = `nis2 \| iso27001 \| both` | La tabella regge nativamente i controlli ISO: i record SoA finiscono qui con `framework='iso27001'` |
| Mapping per-domanda | `application/data/nis2_questionnaire.json` → ogni domanda ha `iso27001_control` (es. `A.5.1`); ogni categoria ha `iso27001_controls[]` | **Pre-popolazione del SoA** dalle risposte NIS2 già date |
| Matrice articoli→ISO | `AuditController::iso27001Mapping` (NIS2 Art.21.2.a–j → Annex A) | Base per derivare lo stato iniziale dei controlli |
| Modulo Risk | `RiskController`, risk register, matrice 5×5, AI suggest | Clausola 6 (risk assessment & treatment) — si aggancia, non si riscrive |
| Audit + NCR/CAPA | `AuditController`, `non_conformities`, `corrective_actions` | Clausole 9–10 (audit interni, riesame, miglioramento) |
| AI | `AIService` (gap, policy gen) + vincolo fonti certe `application/config/nis2_sources.php` | Bozze policy/SoA con citazione fonte (da estendere a ISO 27002) |
| KB / RAG | `KnowledgeBaseController`, `RagService`, Qdrant `nis2_kb` | Ingest testo ISO 27001/27002 scope SYSTEM per la guida contestuale |
| Audit chain | `AuditService` hash-chain SHA-256 | Tracciamento immutabile di ogni step del wizard SGSI |
| Multi-tenancy | `organization_id` su ogni tabella + `requireOrgAccess()` | Stesso isolamento per i nuovi dati SGSI |
| Pattern onboarding | `OnboardingController::initializeComplianceControls()` (13 controlli NIS2 a setup org) | Pattern speculare per inizializzare il SoA ISO |
**Gap attuale**: i 93 controlli **Annex A:2022 non sono seedati** (oggi a onboarding nascono solo i 13 control-code NIS2). Vanno introdotti come dataset di riferimento.
---
## 3. Architettura proposta (additiva, zero breaking change)
Stesso stack: PHP 8.4 vanilla, Front Controller, PDO singleton, JWT multi-tenant, frontend HTML/JS vanilla. Nessun rebuild Docker (edit live `.php`/`.html` + `kill -USR2 1`). Migration da eseguire sull'**host MySQL** (`mysql -h localhost`), coerente con la topologia DB documentata (l'app HTTP fpm parla con l'host via socket).
### 3.1 Nuove tabelle (migration `037_isms_model.sql` → eventualmente `038`)
> Convenzioni del repo: ALTER/CREATE idempotenti via check su `information_schema` (no `IF NOT EXISTS` su ADD COLUMN in MySQL 8.0). Niente `DELIMITER` via pipe.
- **`isms_models`** — un SGSI per organization
`id, organization_id, status (draft/active/under_review), scope_statement TEXT, context_internal TEXT, context_external TEXT, interested_parties JSON, boundaries TEXT, exclusions TEXT, risk_methodology TEXT, isms_objectives JSON, version, created_at, updated_at, approved_by, approved_at`
- **`isms_roles`** — ruoli e responsabilità (RACI SGSI), cl. 5.3
`id, isms_model_id, role_name, user_id NULL, responsibility TEXT, raci ENUM(R,A,C,I), created_at`
- **`iso27001_annex_controls`** — **dataset di riferimento** dei controlli (globale, non per-org)
`control_code (A.5.1…A.8.34, CLD.*, PII.*), standard ENUM(iso27001/iso27017/iso27018), theme, title_it, title_en, purpose_it, iso27002_ref, condition_tag NULL` — seedato da migration. La colonna `standard` distingue i 93 controlli Annex A:2022 dai controlli aggiuntivi cloud (27017) e privacy-cloud (27018); `condition_tag` segna se un controllo è condizionale (es. `cloud_customer`, `cloud_provider`, `pii_processor`).
- **`isms_soa`** — Statement of Applicability per org (il cuore)
`id, isms_model_id, control_code, applicable BOOL, justification_inclusion TEXT, justification_exclusion TEXT, implementation_status (not_started/in_progress/implemented/verified), implementation_pct, derived_from_nis2 BOOL, linked_control_id (→compliance_controls), updated_by, updated_at`
- **`isms_documents`** — documented information minima (cl. 7.5), bozze AI
`id, isms_model_id, doc_type, title, status (draft/review/approved), ai_generated BOOL, body_html LONGTEXT, version, linked_policy_id NULL`
(Il monitoraggio/audit interni cl. 9–10 **non** crea tabelle nuove: si appoggia ad `AuditController` + `non_conformities`/`corrective_actions` esistenti, con un `isms_model_id` opzionale come tag.)
### 3.2 Nuovo controller — `IsmsModelController.php`
Registrato in `public/index.php` (controllerMap + actionMap), pattern identico agli altri controller. Endpoint additivi:
| Metodo | Endpoint | Scopo |
|---|---|---|
| GET | `/api/isms/model` | SGSI dell'org corrente (o 404 → wizard da iniziare) |
| POST | `/api/isms/model` | Crea/inizializza SGSI (scope, contesto) — cl. 4 |
| PUT | `/api/isms/model` | Salva step (leadership, risk methodology, objectives) |
| GET | `/api/isms/annex-controls` | I 93 controlli di riferimento (per il SoA) |
| GET | `/api/isms/soa` | SoA dell'org, **pre-popolato dal NIS2** al primo accesso |
| PUT | `/api/isms/soa/{code}` | Aggiorna applicabilità + motivazione + stato di un controllo |
| POST | `/api/isms/soa/derive` | (Ri)deriva lo stato iniziale del SoA dalle risposte NIS2 |
| GET | `/api/isms/documents` / POST / PUT | Documented information + bozze |
| POST | `/api/isms/documents/ai-generate` | Genera bozza policy/procedura via AIService |
| GET | `/api/isms/readiness` | % completamento SGSI + checklist clausole 4–10 |
| GET | `/api/isms/export` | Export SGSI completo (HTML stampabile / SoA CSV) |
### 3.3 Frontend
- **`public/isms.html`** — wizard a 6 step (struttura `assessment.html`: `app-layout` → `sidebar` + `main-content`), stepper in alto, salvataggio per step.
- **`public/js/isms.js`** — handler wizard via client `api.js`, auto-detect ruolo/firm da `/api/auth/me`.
- Voce sidebar **"Modello Organizzativo (SGSI)"** in sezione *Gestione* di `common.js` (icona scudo/organigramma).
- Aggiornare `help.js` (help contestuale IT/EN) e KB AI come da regola progetto.
### 3.3bis Estensioni cloud — ISO 27017:2015 e ISO 27018:2019
Le due norme **non sono SGSI a sé**: sono *code of practice* che **estendono** i controlli 27002. Nel modulo diventano **set di controlli aggiuntivi e condizionali** dentro lo stesso SoA, attivati in base al profilo dell'org raccolto allo Step 1.
**ISO/IEC 27017:2015 — servizi cloud.** Fornisce guida cloud-specifica su ~37 controlli 27002 + **7 controlli aggiuntivi `CLD.*`**:
- `CLD.6.3.1` — Ruoli e responsabilità condivisi in ambiente cloud
- `CLD.8.1.5` — Rimozione degli asset del cliente cloud (a fine contratto)
- `CLD.9.5.1` — Segregazione negli ambienti di virtual computing
- `CLD.9.5.2` — Hardening delle virtual machine
- `CLD.12.1.5` — Sicurezza operativa dell'amministratore
- `CLD.12.4.5` — Monitoraggio dei servizi cloud
- `CLD.13.1.4` — Allineamento sicurezza reti virtuali e fisiche
Si applicano sia al **cliente cloud** sia al **fornitore cloud** (alcuni hanno responsabilità diverse per ruolo → si usa `raci`/`condition_tag`).
> ⚠️ **Numerazione**: 27017:2015 è scritta sul **27002:2013** (vecchia numerazione, es. `CLD.9.5.x`). Il modulo è su Annex A:**2022**. Va mantenuto un **cross-reference** 2013↔2022 nel dataset (`iso27002_ref`) per non confondere l'utente. Nessuna revisione 2022 di 27017 esiste a oggi → resta `27017:2015`.
**ISO/IEC 27018:2019 — PII in cloud pubblico (PII processor).** Aumenta i controlli 27002 con guida per la protezione dei dati personali e aggiunge un set di controlli (Annex A della 27018) organizzati sui **principi privacy ISO 29100** (consenso/scelta, limitazione finalità, minimizzazione, limitazione uso/conservazione/divulgazione, trasparenza, partecipazione dell'interessato, accountability, sicurezza, conformità privacy). Mappabili come `PII.*` nel dataset.
**Ponte GDPR/NIS2**: 27018 copre obblighi del *responsabile del trattamento* in cloud → si collega ai riferimenti GDPR già citati nel prodotto (es. Art.17 erasure, codice etico persona digitale) e rafforza il dominio NIS2 *supply chain*/*cloud*. Da NON spacciare come conformità GDPR automatica (disclaimer, vedi §7).
**Attivazione condizionale (Step 1 del wizard)**: tre flag sul profilo SGSI —
`uses_public_cloud` (→ abilita 27017 lato cliente), `is_cloud_provider` (→ 27017 lato fornitore), `processes_pii_in_cloud` (→ 27018). I controlli `CLD.*`/`PII.*` entrano nel SoA **solo** se il relativo flag è attivo; altrimenti restano fuori (con motivazione di esclusione precompilata "non applicabile: l'org non eroga/usa servizi cloud / non tratta PII in cloud"). Segnali utili già disponibili per **proporre** i flag: settore, `assets` (asset di tipo cloud), modulo `suppliers` (fornitori cloud).
---
## 4. Il wizard SGSI — 6 step mappati alle clausole 27001:2022
| Step | Clausola | Cosa raccoglie | Riuso |
|---|---|---|---|
| **1. Contesto & Ambito** | 4 | Perimetro, sedi, asset coperti, parti interessate, confini, esclusioni motivate | Asset module per il perimetro |
| **2. Leadership** | 5 | Policy SGSI, organigramma sicurezza, ruoli/responsabilità (RACI), comitato | Tabella `isms_roles`; PolicyController per la policy |
| **3. Risk** | 6 | Metodologia (es. ISO 27005), criteri, obiettivi SGSI misurabili | **Aggancia `RiskController` esistente** (no doppione del risk register) |
| **4. Statement of Applicability** | 6.1.3 | I 93 controlli Annex A: applicabile sì/no + motivazione, **pre-spuntati dal NIS2**; + estensioni condizionali **27017** (cloud) e **27018** (PII-cloud) | `iso27001_control` del questionario + `iso27001Mapping`; flag cloud/PII (§3.3bis, §4.2) |
| **5. Documented Information** | 7–8 | Policy/procedure obbligatorie, bozze AI, versioning | `AIService::generatePolicy`, `isms_documents` |
| **6. Monitoraggio & Miglioramento** | 9–10 | Piano audit interni, riesame direzione, gestione NC | **Aggancia Audit + NCR/CAPA esistenti** |
### 4.1 Logica di pre-popolazione del SoA (valore chiave)
Al primo accesso al SoA (o via `POST /api/isms/soa/derive`):
1. Per ogni controllo Annex A si guarda quali domande NIS2 hanno quel `iso27001_control`.
2. Si aggrega lo stato delle risposte (`implemented`/`partial`/`not_implemented`/`not_applicable`).
3. Si imposta una **proposta** iniziale: `applicable=true`, `implementation_status` e `implementation_pct` derivati, `derived_from_nis2=true`, e una bozza di `justification_inclusion` citando l'articolo NIS2 di origine.
4. L'utente conferma/modifica. I controlli ISO **senza** corrispondenza NIS2 (es. parte di A.7 fisici) restano da compilare manualmente, evidenziati come "non coperti dall'assessment NIS2".
Questo trasforma un assessment NIS2 già fatto in una **prima bozza di SoA pronta all'80%**, che è il principale argomento di vendita del modulo.
### 4.2 SoA esteso con 27017/27018 (condizionale)
Lo Step 4 mostra il SoA **stratificato per standard**:
1. **Sezione base** — 93 controlli Annex A:2022 (sempre).
2. **Sezione cloud (27017)** — i 7 `CLD.*` + i ~37 controlli 27002 con guida cloud, visibili solo se `uses_public_cloud` o `is_cloud_provider`. Per ogni controllo: lente "cosa cambia in cloud" e distinzione responsabilità cliente vs fornitore.
3. **Sezione PII-cloud (27018)** — controlli `PII.*` (principi 29100), visibili solo se `processes_pii_in_cloud`, con tag del principio privacy e link al riferimento GDPR pertinente.
`isms_soa` distingue le righe via il `standard` del controllo collegato. La derivazione automatica dal NIS2 (§4.1) copre la sezione base; le sezioni cloud/PII partono da bozze di motivazione AI (non hanno corrispondenza diretta nel questionario NIS2) e sono evidenziate come "da compilare — estensione cloud/privacy".
---
## 5. Integrazione AI (fonti certe)
- Estendere `application/config/nis2_sources.php` (registry fonti certe) con i riferimenti **ISO/IEC 27001:2022, 27002:2022, 27017:2015 e 27018:2019** così che `AIService::authoritativeSourcesBlock()` possa citarli e vietare riferimenti inventati. Marcare 27017/27018 come *code of practice* (guida, non requisiti certificabili a sé).
- Nuovi prompt:
- **Motivazione SoA**: data una scelta di applicabilità, genera/propone la `justification_inclusion`/`exclusion`.
- **Bozza documented information**: policy/procedura per un controllo o gruppo di controlli (riusa il pattern `generatePolicy`).
- **Spiegazione clausola** (guida contestuale, soprattutto PMI).
- Ingest del testo ISO 27001/27002 in KB Qdrant `nis2_kb` scope SYSTEM (pipeline `scripts/ingest-*` esistente) → `askWithRag()` risponde alle domande dell'utente durante il wizard.
> ⚠️ Il testo integrale ISO è coperto da copyright: ingestare **parafrasi/sintesi proprietarie + riferimenti**, non il testo letterale della norma. Da chiarire con l'utente (vedi §10).
---
## 6. Schema migrazioni — punto di partenza
Ultima migration presente: **`036_acn_gap_assessment.sql`**. Le nuove partono da:
- `037_isms_model.sql` — `isms_models`, `isms_roles`, `isms_soa`, `isms_documents` + indici
- `038_iso27001_annex_controls.sql` — tabella di riferimento + **seed dei 93 controlli Annex A:2022** (4 temi) + **7 controlli `CLD.*` ISO 27017:2015** + **controlli `PII.*` ISO 27018:2019** (con `standard` e `condition_tag`); ALTER `isms_models` per i 3 flag `uses_public_cloud`/`is_cloud_provider`/`processes_pii_in_cloud`
Tutte additive, idempotenti, da girare sull'host MySQL.
---
## 7. Impatto e rischi
**Impatto basso / additivo:**
- Nessuna modifica a schema esistente se non un eventuale ALTER `compliance_controls` per linkare al SoA (valutare: forse non serve, si usa `isms_soa.linked_control_id`).
- Nessun controller esistente toccato nella logica (solo registrazione del nuovo in `index.php`).
- Nessun rebuild Docker.
**Rischi / attenzioni:**
1. **Copyright ISO** (vedi §5/§10) — non ingestare testo letterale.
2. **Volume dataset Annex A** (93 controlli × bilingue) — lavoro di data-entry/curatela contenuti.
3. **Disallineamento mapping** — il mapping NIS2→ISO è una *guida*, non una corrispondenza 1:1 certificabile: il SoA derivato è una **bozza assistita**, va dichiarato chiaramente nell'UI (disclaimer, come già fatto per gauge/bozze AI).
4. **Topologia DB** — migration sull'host, non `docker exec nis2-db` (path secondario non-prod).
5. **Governance**: ogni step va proposto e confermato; commit immediato post-smoke; push via host se cache token vuota.
---
## 8. Modello onboarding PMI (decisione: stesso percorso + più AI)
`employee_count` e `annual_turnover_eur` sono già raccolti a onboarding → si può **rilevare automaticamente** che l'org è una PMI e attivare un *layer di assistenza*, **senza** ridurre i contenuti:
- **Guida contestuale potenziata**: ogni step del wizard mostra spiegazione "cosa significa per una PMI", esempi concreti dimensionati, stima di effort.
- **Bozze AI dimensionate**: prompt arricchiti col contesto PMI (settore, dimensione, range dipendenti — già anonimizzato in `AIService`) → policy/procedure realistiche e snelle ma complete.
- **Co-pilota conversazionale**: `askWithRag()` disponibile nel wizard per domande libere ("devo davvero fare l'audit interno?").
- **Roadmap a fasi suggerita**: stesso SoA completo, ma con priorità/sequenza proposta per non sovraccaricare (quick win prima), riusando la logica `quick_wins`/`compliance_roadmap` già prodotta dall'AI gap analysis.
- **Estensioni cloud per PMI**: molte PMI usano SaaS/cloud pubblico ma non se ne rendono conto → l'AI, dai segnali (suppliers, asset), **propone** di attivare 27017/27018 spiegando in linguaggio semplice perché ("usi Microsoft 365/AWS → questi 7 controlli cloud ti riguardano").
- **Nessun contenuto rimosso**: i 93 controlli e le 6 clausole restano tutti; cambia solo il *supporto*, coerente con la scelta utente.
---
## 9. Roadmap di implementazione proposta (a fasi)
| Fase | Contenuto | Output verificabile |
|---|---|---|
| **F0 — Dataset** | Curatela + seed 93 controlli Annex A:2022 + 7 `CLD.*` (27017) + `PII.*` (27018) con cross-ref numerazione (`038`) + estensione `nis2_sources.php` | Tabella popolata (3 standard), fonti ISO citabili |
| **F1 — Backend SGSI** | Migration `037`, `IsmsModelController`, endpoint model/SoA + derive, registrazione `index.php` | curl: crea modello, deriva SoA dal NIS2, legge readiness |
| **F2 — Wizard frontend** | `isms.html` + `isms.js` 6 step, voce sidebar, help.js | Wizard navigabile end-to-end su org demo |
| **F3 — AI & docs** | Prompt SoA/policy, `ai-generate`, ingest KB ISO | Bozza policy generata + risposta RAG nel wizard |
| **F4 — PMI layer** | Guida contestuale, co-pilota, roadmap a fasi | Org PMI demo: percorso completo con assistenza |
| **F5 — Export & polish** | Export SGSI HTML stampabile + SoA CSV, audit-chain tag, version.json bump | Documento SGSI esportabile |
Ogni fase: edit → `kill -USR2 1` → smoke curl → commit → push (via host se serve). Test su org demo (id≤4 / `%.demo%`), reset con `reset-demo.sql`.
---
## 10. Decisioni aperte da chiarire con l'utente
1. **Copyright ISO**: confermo l'approccio "sintesi/parafrasi proprietarie + riferimenti" per la KB e i titoli controlli? (necessario per non violare il copyright della norma)
2. **Versione Annex A**: confermato **2022 (93 controlli, 4 temi)**? (lo studio assume 2022; il questionario usa già codici `A.5.x`/`A.8.x` 2022)
2bis. **Estensioni cloud**: confermo le versioni attuali **27017:2015** e **27018:2019** (non esistono revisioni più recenti) e l'approccio a **sezioni condizionali** del SoA attivate dai 3 flag cloud/PII? Includo anche il **cross-reference numerazione 27017 (2013→2022)** nel dataset?
3. **Posizionamento**: il SGSI è un modulo **a sé** in sidebar, o un percorso che parte dalla pagina assessment esistente?
4. **Certificabilità**: il modulo è di **supporto/pre-audit** (bozze assistite con disclaimer) — confermi che NON deve presentarsi come certificazione automatica?
5. **Mobile/multi-superficie**: rilevante il tag `data-app-version`/`surface` (std feedback-version-provenance) anche per le nuove pagine? (di default sì, additivo)
---
## 11. Riepilogo
Il modulo è **realizzabile in larga parte per riuso**: il dato più prezioso (mapping NIS2→ISO per domanda) è già nel prodotto e abilita un **SoA pre-popolato all'80%** da un assessment NIS2 esistente — il vero differenziatore. L'implementazione è additiva, non breaking, su pattern noti. Il percorso PMI è un layer di assistenza AI sopra lo stesso wizard completo.
**Prossimo passo**: revisione di questo studio + risposte alle decisioni aperte (§10) → poi avvio Fase F0/F1 mostrando i diff prima di qualsiasi commit.