Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011VxSQeGQYUvPmSEoGdnidA
10 KiB
10 KiB
Plan de test — Studio lots 6 à 8 (mention IA, calibrage, narration)
Écrit le 2026-09-15, pour une première passe le 16/09. Rien de ce plan n'a encore tourné en réel : tout est couvert par des tests unitaires (353 verts côté service) et l'analyse Flutter / TypeScript, mais aucun écran n'a été affiché et aucun audio n'a été généré. Les résultats viennent de Thomas, pas du code.
Légende : colonne ✓ à remplir (✅ / ❌ + une note). Un ❌ dans § 0 arrête la suite. Référence : v2/studio-plan.md § 9.4 (calibrage) et lot 8.
0. Prérequis — une fois
| # | Étape | Attendu | ✓ |
|---|---|---|---|
| 0.1 | winget install Gyan.FFmpeg, rouvrir le terminal, ffmpeg -version |
Une version s'affiche. Sans ffmpeg, la génération audio échoue et les crédits sont remboursés | |
| 0.2 | dotnet user-secrets set "AI:ApiKey" "<clé Gemini>" --project manager-service/ManagerService |
dotnet user-secrets list montre AI:ApiKey (et Studio:Fal:Key) |
|
| 0.3 | Lancer Postgres puis dotnet ef database update avec MIGRATIONS_CONNECTION (voir la note mémoire EF) |
Migrations appliquées : AddAiWatermarkBurned, StudioCalibrationEngravingStyle, StudioCreditUnitPerReference, AddNarrators, AddGeoPointAudio |
|
| 0.4 | dotnet run (manager-service), flutter run -d chrome (manager-app) |
Les deux démarrent, connexion SuperAdmin OK | |
| 0.5 | Dialogue d'instance (SuperAdmin) : assistant et Studio activés, 100 crédits accordés | Solde 100 dans la jauge du menu | |
| 0.6 | Guide IA › Personnages : un personnage Léon avec une voix (Umbriel) et une intonation, un second La sentinelle avec une autre voix (Kore) | Les deux apparaissent dans la liste, sans « (sans voix) » | |
| 0.7 | Donner un portrait à Léon (onglet Visage → générer ou choisir une vue Portrait) | La vue Portrait est enregistrée |
1. Mention IA dans le fichier (lot 6)
| # | Étape | Attendu | ✓ |
|---|---|---|---|
| 1.1 | Studio : générer une image et la valider | L'image arrive dans la médiathèque avec la facette IA | |
| 1.2 | Télécharger le fichier validé, l'ouvrir dans un lecteur de métadonnées (ex. exiftool, ou Propriétés › Détails) | XMP DigitalSourceType = trainedAlgorithmicMedia, droits = nom de l'instance |
|
| 1.3 | Dialogue d'instance : cocher Graver la mention IA, générer et valider une nouvelle image | Bandeau « Généré par IA · AI-generated » en bas à droite de l'image. L'ancienne image n'a pas changé | |
| 1.4 | ⚠️ Enregistrer l'instance depuis un autre écran (ex. Abonnement) | La case gravure reste cochée : un enregistrement qui ne l'envoie pas ne la remet pas à faux | |
| 1.5 | Décocher la gravure | Les images suivantes n'ont plus de bandeau |
2. Calibrage et unité de crédit
| # | Étape | Attendu | ✓ |
|---|---|---|---|
| 2.1 | Studio › Identité : ouvrir la grille des styles | 8 tuiles avec un moulin, un style chacune (plus aucune tuile vide) | |
| 2.2 | Guide IA › Personnages › Visage : grille des archétypes | 12 mannequins au trait, un par pose | |
| 2.3 | Générer 3 variantes sans image de référence | Estimation et débit = 6 crédits (2 par image) | |
| 2.4 | Ajouter 3 images de référence à l'identité, relancer 3 variantes | Estimation = 15 crédits (3 × (2 + 3)) | |
| 2.5 | Style Gravure, gabarit « Décor d'énigme », 3 variantes | Images noir et blanc, aucune légende ni signature (c'était ~4/10 avant correction) | |
| 2.6 | Gabarit « Objet d'époque » depuis une photo d'objet portant une date | La date reste gravée sur l'objet | |
| 2.7 | Relire les planches outputs/studio-calibrage-2026-09-15/ |
Ton verdict « du même projet » par série, à reporter dans studio-plan § 9.4 |
3. Qui raconte quoi (lot 8a et 8c)
Préparer une configuration avec un parcours de 4 étapes (titre + description remplis en FR et NL) et un article avec du texte.
| # | Étape | Attendu | ✓ |
|---|---|---|---|
| 3.1 | Écran Configuration : carte Narration visible | Deux champs : « Guide de cette visite » et « Narrateur par défaut de la visite » | |
| 3.2 | Guide de la visite = Guide de l'instance, narrateur par défaut = Le guide raconte, Enregistrer | Enregistré ; recharger l'écran garde les valeurs | |
| 3.3 | Ouvrir le parcours : dans le rail, une entrée Narrateurs sous « Parcours » | L'onglet s'ouvre, une ligne par étape | |
| 3.4 | Sans rien choisir | Chaque étape affiche en gris « ↳ » + le guide de l'instance, ou « Aucun narrateur » s'il n'y en a pas | |
| 3.5 | Narrateur par défaut du parcours = Léon | Toutes les lignes passent à « ↳ Léon » en gris | |
| 3.6 | Étape 3 : choisir La sentinelle | La ligne 3 affiche La sentinelle en gras ; les autres restent « ↳ Léon » | |
| 3.7 | Fermer et rouvrir le parcours | Le choix de l'étape 3 et le défaut sont conservés | |
| 3.8 | Toutes les étapes suivent le défaut | Confirmation « Retirer le narrateur choisi sur 1 étape(s) ? », puis l'étape 3 repasse à « ↳ Léon » | |
| 3.9 | Remettre La sentinelle sur l'étape 3 (pour la suite) | — | |
| 3.10 | ⚠️ Archiver La sentinelle (Personnages) puis revenir à l'onglet | L'étape 3 retombe sur « ↳ Léon » : un personnage archivé ne parle plus | |
| 3.11 | Désarchiver La sentinelle | L'étape 3 la retrouve | |
| 3.12 | Instance sans Studio (décocher dans le dialogue) | L'entrée Narrateurs disparaît du rail et le bloc Narration de l'article aussi. Réactiver ensuite |
4. Générer l'audio (lot 8b et 8c)
| # | Étape | Attendu | ✓ |
|---|---|---|---|
| 4.1 | Onglet Narrateurs : colonne Audio | « 2 à générer · N crédits » par étape (FR + NL) ; barre du bas « X fichier(s) audio à générer · Y crédits » | |
| 4.2 | Générer l'audio | Confirmation qui répète le total. Rien ne part avant « Oui » | |
| 4.3 | Confirmer | Notification « Génération lancée » ; en moins d'une minute les lignes passent à Audio à jour sans rien toucher (relecture toutes les 5 s) | |
| 4.4 | Jauge de crédits | Débit ≈ 1 crédit par minute d'audio par langue, jamais plus que l'estimation affichée | |
| 4.5 | Médiathèque, filtre Audio | Un MP3 par étape et par langue, libellé « Léon · titre (FR) », facette IA | |
| 4.6 | Écouter un MP3 (étape 3) | Voix de La sentinelle, dans la bonne langue, avec l'intonation du personnage | |
| 4.7 | ⚠️ Piège corrigé : modifier le titre d'une étape juste après la génération, attendre l'enregistrement, rouvrir | L'audio de l'étape est toujours rattaché (avant correction, l'enregistrement le détachait) | |
| 4.8 | Revenir à l'onglet Narrateurs | L'étape modifiée est « 2 à régénérer » : son texte a changé | |
| 4.9 | Changer la voix de Léon (Personnages › Voix) | Toutes les étapes de Léon passent « à régénérer » ; celle de La sentinelle reste à jour | |
| 4.10 | Régénérer | L'ancien MP3 disparaît de la médiathèque, le nouveau le remplace | |
| 4.11 | Étape avec un audio déposé à la main en FR, puis générer FR | L'audio généré prend sa place dans l'étape, le fichier déposé reste dans la médiathèque | |
| 4.12 | Article : bloc Narration audio sous les réglages audio | Narrateur « ↳ Léon » (hérité), état, bouton Générer | |
| 4.13 | Article : générer, puis Enregistrer la section après le passage à « Audio à jour » | L'audio reste sur l'article après rechargement | |
| 4.14 | Personnage sans voix en narrateur, Générer | Message « Ce narrateur n'a pas de voix », aucun crédit réservé | |
| 4.15 | Solde à 0, Générer | Message « Crédits Studio insuffisants » | |
| 4.16 | Couper le réseau du serveur vers Gemini (ou mauvaise clé), Générer | Les lignes ne passent jamais à jour, et les crédits réservés sont remboursés (jauge) |
5. Côté visiteur — le portrait du narrateur (lot 8d)
Même configuration, avec l'audio généré en § 4. Léon a un portrait, La sentinelle non.
| # | App | Étape | Attendu | ✓ |
|---|---|---|---|---|
| 5.1 | visitapp-web | Ouvrir l'article | Le lecteur audio joue ; à la place de « GUIDE AUDIO », portrait + « Léon » | |
| 5.2 | visitapp-web | Parcours en liste, étapes 1 et 3 | L'audio joue (avant, un audio rangé par identifiant n'avait pas de lecteur) ; portrait de Léon à l'étape 1, disque neutre + « La sentinelle » à l'étape 3 | |
| 5.3 | visitapp-web | Parcours en carte (showMap) |
Même chose dans la vue carte | |
| 5.4 | visitapp-web | Changer la langue en NL | L'audio NL joue, même narrateur | |
| 5.5 | mymuseum-visitapp (en ligne) | Article | Lecteur replié à droite ; déplié, le portrait ouvre la ligne | |
| 5.6 | mymuseum-visitapp (en ligne) | Parcours, vue contenu et vue carte | L'audio de l'étape joue, portrait + nom au-dessus du lecteur | |
| 5.7 | mymuseum-visitapp (hors ligne) | Article téléchargé, mode avion | L'audio joue ; pas de portrait (limite connue, il n'est pas téléchargé) | |
| 5.8 | tablet-app | Article | Portrait + nom à gauche du bouton de lecture | |
| 5.9 | Les trois | Un audio déposé à la main (pas une narration) | Lecteur habituel, aucun portrait | |
| 5.10 | Les trois | Une ancienne étape dont l'audio est une URL | L'audio joue toujours |
6. Non-régression
| # | Étape | Attendu | ✓ |
|---|---|---|---|
| 6.1 | Guide IA (assistant) : poser une question sur un contenu dont le titre contient du gras ou un & |
Réponse normale, titre cité sans balises ni & (le nettoyage HTML de l'assistant est désormais partagé avec la narration) |
|
| 6.2 | Image générée côté visiteur | Mention « Image générée par IA » toujours présente (lot 6) | |
| 6.3 | Enregistrer un article sans toucher à la narration | Rien ne change dans ses audios | |
| 6.4 | Modifier un point de carte dans l'ancienne fenêtre | Enregistrement OK ; son audio éventuel n'est pas effacé |
Limites connues (pas des bugs)
- Les points de carte n'ont pas encore d'assignation de narrateur ni de bouton Générer dans le manager.
- Hors ligne, mymuseum-visitapp ne montre pas le portrait.
- Le portrait affiché est le portrait actuel du personnage ; le nom et la voix sont ceux de l'audio entendu.
- Les extraits d'écoute des voix (lot 7) ne sont pas encore produits.