# Recette à effectuer avant usage réel

Utiliser une base distincte et des données fictives. Noter chaque résultat, la version PHP, le navigateur et toute erreur expurgée de secrets.

## Socle

- [ ] Composer se termine sans erreur ; `composer.lock` conservé ; audit des dépendances acceptable.
- [ ] Les 30 tests PHPUnit passent dans un environnement compatible.
- [ ] `studio:install`, `studio:doctor` et `view:cache` réussissent.
- [ ] Visiteur non connecté renvoyé vers la connexion pour toute page métier.
- [ ] Connexion, déconnexion, rafraîchissement et expiration de session vérifiés.
- [ ] Cookies Secure, HttpOnly, SameSite ; accès uniquement HTTPS.
- [ ] Formulaire POST sans jeton CSRF refusé dans un essai réel.
- [ ] `.env`, `composer.json`, le répertoire `storage` et un chemin de fichier deviné ne sont pas accessibles publiquement.

## Identité et données

- [ ] Modifier le nom du Studio et recharger : nom conservé.
- [ ] Importer un logo PNG transparent, un JPEG et un WebP ; vérifier rendu et persistance.
- [ ] Remplacer puis retirer logo et avatar ; refus d’un SVG, d’un faux JPEG et d’une image trop grande.
- [ ] Modifier le logo d’un client sans affecter les autres.
- [ ] Créer client → projet → tâche ; fermer/réouvrir le navigateur et vérifier la persistance.
- [ ] Saisie rapide Livewire et boîte « À trier », y compris double clic / perte réseau.
- [ ] Éditer une tâche, la terminer, la rouvrir et la supprimer ; vérifier l’absence de perte inattendue.
- [ ] Tester un texte contenant des balises HTML : affichage comme texte, pas exécution.
- [ ] Vérifier la recherche de notes et projets, sans faire croire à une recherche dans les PDF.

## Temps et documents

- [ ] Créer puis déplacer un créneau : aucun temps réalisé ajouté ; budget initial inchangé.
- [ ] Confirmer une durée réelle différente de la durée prévue ; une double confirmation ne duplique pas le temps.
- [ ] Vérifier heure d’été/hiver, changement de date, affichage mobile et les créneaux proches de minuit.
- [ ] Déposer un fichier non sensible, télécharger, supprimer, tenter un fichier supérieur à la limite.
- [ ] Vérifier qu’un projet privé empêche l’accès client à ses documents, même marqués partagés.
- [ ] Références Abby manuelles : aucune création dans Abby, aucun total trompeur d’acomptes/factures.

## Cloisonnement client : bloquant avant ouverture

- [ ] Créer clients A et B, utilisateurs et documents distincts, après activation de recette du portail.
- [ ] Invitation unique : expiration, réutilisation, annulation et compte déjà existant.
- [ ] A ne peut lire ni les fichiers de B, ni son logo, ni les pages administrateur, même en changeant les ID dans l’URL.
- [ ] A ne voit jamais budget, temps, notes internes, brief privé ni tâches administrateur.
- [ ] Retirer le partage rend le document inaccessible au client à la requête suivante.
- [ ] Révoquer A coupe également une session déjà ouverte.
- [ ] Désactiver le portail coupe aussi les routes de téléchargement et les logos clients pour ces comptes.

## Assistant et exploitation

- [ ] AI_PROVIDER=none : aucune transmission externe.
- [ ] Vérifier le contexte affiché et le consentement, avec données fictives, puis le traitement d’erreurs et délais.
- [ ] Vérifier qu’aucune instruction figurant dans une note ne donne au modèle une capacité d’écriture (aucune n’est exposée).
- [ ] Tester l’export et surtout la restauration complète d’une sauvegarde sur une autre instance.
- [ ] Tester Safari sur Mac/iPhone et l’installation comme app web.
- [ ] Faire relire la sécurité avant données sensibles / comptes réels ; mettre en place une maintenance et des sauvegardes.

Une case non validée reste un point ouvert. Les contrôles statiques de la livraison ne précochent aucune de ces étapes serveur.
