- **Fix – RedirectResponse type error**: aggiunto `use Illuminate\Http\RedirectResponse;` in `EmailSettingsController.php`
- **Fix – UrlGenerationException in sender routes**: sostituito `route('impostazioni.sender.update', '') + id` con `'__ID__'.replace('__ID__', id)` in `admin/email-settings/index.blade.php` (stessa correzione per `impostazioni.sender.test`)
- **Fix – Messaggi email visibili dopo eliminazione configurazione**: `destroy()` ora cancella sempre allegati su disco, cartelle email (cascata messaggi/allegati) e poi le impostazioni. Risolto bug che faceva uscire subito se `EmailSetting::first()` era null
- **Fix – Tab guida Installazione/Backup/Docker non funzionanti**: rimosso `</div>` di chiusura `tab-content` prematuro (linea 290) in `help/index.blade.php` — i tre tab-pane erano fuori dal container
- **Guida aggiornata – rimosso wizard web installer**: sostituiti tutti i riferimenti alla cartella `installer/` con comandi Artisan in `help/index.blade.php` e `help/pdf.blade.php`. Passi 3-6 semplificati in un unico `php install.php`
- **Script install.sh rimosso**, sostituito da **`install.php`** (PHP CLI interattivo): modalità Apache/Docker/Restore, preflight, `.env` + `APP_KEY`, `CREATE DATABASE IF NOT EXISTS`, composer, `package:discover`, `migrate --seed`, admin via tinker, asset npm, permessi. Docker build + admin nel container
- **Fix – Migration `app_settings` mancante**: creata `2026_05_15_000001_create_app_settings_table.php` con tutte le colonne. Aggiornate 4 migration alter esistenti con guardie `Schema::hasTable()` + `Schema::hasColumn()`. Aggiunto `Schema::hasTable()` in `AppSetting::getSetting()` per evitare eccezioni su DB fresco
- **Fix – Database non creato durante install**: `install.php` ora esegue `CREATE DATABASE IF NOT EXISTS`
- **Fix – Remember checkbox mancante `name`**: aggiunto `name="remember"` al checkbox "Ricordami" in `resources/views/auth/login.blade.php`
- **Fix – Admin via tinker senza `is_admin`/`permissions`**: tutti e 3 i tinker script in `install.php` ora impostano `is_admin = true`, `status = 'active'`, `permissions` completo (tutti i moduli a livello FULL)
- **Fix –`2>/dev/null` rimosso da tinker/artisan commands**: `install.php` non sopprime più stderr su `tinker --execute`, `package:discover`, `storage:link`, `chown`, `cp`. Eventuali errori ora sono visibili all'utente
- **Fix – Controllo permessi sessione**: aggiunto check esplicito `is_writable(storage/framework/sessions/)` in `install.php` con warning su potenziale errore 419 CSRF
- **Fix – Migrations non cross-DB**: convertiti `enum()` a `string(50)` in tutte le migration delle tabelle `documenti` (create + alter) per compatibilità MySQL/SQLite. Rimossa raw SQL `ALTER TABLE MODIFY COLUMN`. Aggiunto `dropIndex()` prima di `dropColumn('ruolo_id')` in `change_ruolo_to_multi.php` per compatibilità SQLite
- **Fix – ExampleTest**: aggiornato per matchare comportamento reale (root `/` fa redirect 302 a login)
- Script installazione in PHP CLI invece di bash: usa direttamente API Laravel/PDO, gestione errori con try/catch, readline per input, nessun problema di sintassi shell
- Migrazione `app_settings`: unica migration `Schema::create()` con tutte le colonne + guardie `hasColumn()` nelle alter esistenti invece di modificare i timestamp
- Cleanup email: eseguito sempre (anche se `EmailSetting` già cancellato) per gestire stato orfano
-`enum()` rimosso a livello DB in favore di `string()` + validazione app-level (consistente con AGENTS.md)
-`dropIndex()` esplicito prima di `dropColumn()` per compatibilità SQLite