# Coaster World v1.95.0 — Robustesse / erreurs / observabilité

Base : **v1.94.0**.

## Pages d’erreur Coaster World

- Ajout de pages autonomes pour les erreurs **403, 404, 419, 429, 500 et 503**.
- Les pages d’erreur ne dépendent pas du layout principal afin de rester affichables même lorsqu’un composant du site rencontre un problème.
- En production (`APP_DEBUG=false`), une erreur serveur n’expose plus l’écran technique Laravel aux visiteurs.
- Chaque requête reçoit un identifiant de corrélation unique. Sur les erreurs, cet identifiant est affiché afin de pouvoir retrouver l’incident dans les logs.

## Identifiant de requête / incident

Nouveau middleware `RequestTrace` :

- génère un identifiant ULID pour chaque requête ;
- accepte un `X-Request-ID` entrant uniquement s’il respecte un format sûr ;
- ajoute l’identifiant au contexte des logs Laravel ;
- renvoie `X-Request-ID` sur les réponses normales ;
- rend le même identifiant disponible aux pages d’erreur.

## Admin — Diagnostics runtime

Nouvelle page :

`/admin/diagnostics`

Elle contrôle sans modifier les données métier :

- connexion MySQL et latence ;
- lecture/écriture/suppression du cache Laravel ;
- droits d’écriture de `storage/framework/views`, du cache et des logs ;
- **test de renommage atomique** pour détecter le problème Windows `rename(...): Accès refusé` ;
- heartbeat Laravel Scheduler ;
- queue database, jobs en attente et jobs échoués ;
- espace disque libre ;
- version PHP et extensions indispensables ;
- configuration de production (`APP_DEBUG`, HTTPS, cookie de session sécurisé) ;
- état et volume des logs Laravel ;
- aperçu limité des dernières erreurs du journal avec masquage des secrets évidents.

La page Diagnostics est ajoutée à la navigation Administration et reliée à la page Santé système existante.

## Commandes terminal

### Diagnostic complet

```bat
php artisan cw:diagnose
```

Sortie JSON :

```bat
php artisan cw:diagnose --json
```

Sous Windows/Laragon :

```bat
tools\diagnose_windows.bat
```

### Purge contrôlée des anciens logs

Simulation uniquement :

```bat
php artisan cw:logs:prune --days=14
```

Suppression effective :

```bat
php artisan cw:logs:prune --days=14 --force
```

La commande ne supprime que les anciens fichiers `laravel-*.log`. Elle **ne supprime jamais `laravel.log`**.

## Santé système

- Correction d’un conteneur de modale déclaré deux fois dans la page Santé système.
- Ajout d’un accès rapide vers les Diagnostics runtime.

## Sécurité et fiabilité

- Les diagnostics individuels sont eux-mêmes isolés : si un test plante, le reste du rapport continue à s’afficher.
- Le test cache n’écrit qu’une valeur simple et temporaire.
- Les tests stockage utilisent uniquement des fichiers temporaires qui sont supprimés immédiatement.
- Aucune migration SQL.
