Génération reproductible des captures du Tour
Ce dossier contient le script qui génère les captures d’écran du tour, de façon reproductible et sans fuite de secret. Les images produites atterrissent dans ../assets/.
Statut. Le script cible une instance réelle via un compte non-administrateur (de préférence neuf, sans donnée réelle visible). Tant que les variables d’environnement ne sont pas renseignées, il se met en pause automatiquement (
test.skip) — il ne s’exécute donc jamais, et n’échoue jamais, en intégration continue.
Pourquoi un script plutôt que des captures à la main ?
- Reproductibilité : on régénère toutes les images d’un coup quand l’interface change (montée de version, refonte UI).
- Anti-fuite par construction : le masquage (
maskde Playwright) est appliqué à chaque capture, plutôt que de compter sur un floutage manuel a posteriori. - Cohérence : même fenêtre, même zoom, mêmes conditions partout.
Principe anti-fuite
- Compte non-administrateur, de préférence neuf — la session de capture n’a pas les droits d’admin, et un compte neuf ne voit aucune donnée réelle d’établissement.
- Surfaces sans contenu réel uniquement — on ne capture que la connexion, un chat neuf sur invite fictive, et des panneaux de réglages vides. Les surfaces qui exposeraient du contenu (listes de modèles/bases internes, canaux) restent schématisées dans
../architecture.md, pas capturées. Le script applique cette règle par défaut : les captures à contenu réel (sélecteur de modèles, workspace, bases, canaux) sont sautées sauf opt-in expliciteDEMO_OWUI_CAPTURE_REAL_CONTENT=1(réservé à une instance à données fictives) — la sûreté ne dépend donc pas de la seule relecture a posteriori. - Masquage (
mask) des zones sensibles sur chaque image : identité, e-mail, et libellés portant un identifiant de ressource interne — par exemple le contrôle « Open Terminal (…) » du composer, dont le libellé contient le nom du workspace terminal de l’instance : on masque le bouton entier (le texte tronqué vit dans un<span class="truncate">de 150 px qui, masqué seul, laisse dépasser le libellé selon la vue). - Revue anti-fuite de chaque PNG en PR avant fusion — relecture humaine des images générées.
- Aucune URL réelle dans l’image : Playwright capture le contenu de la page, pas la barre d’adresse du navigateur.
Configuration
Les identifiants et l’URL vivent dans un fichier .env non commité (le dépôt ignore *.env). Copiez le gabarit et renseignez-le localement :
cp .env.example .env
# puis éditez .env avec l'URL de l'instance et le compte non-admin de captureVariables attendues (voir .env.example) :
| Variable | Rôle |
|---|---|
DEMO_OWUI_URL |
URL de l’instance ciblée |
DEMO_OWUI_EMAIL |
E-mail du compte non-admin de capture |
DEMO_OWUI_PASSWORD |
Mot de passe de ce compte |
DEMO_OWUI_REASONING_MODEL |
(optionnel) nom d’un modèle « thinking » pour la capture du raisonnement en direct (v0.10) ; vide → capture sautée |
DEMO_OWUI_CAPTURE_REAL_CONTENT |
(optionnel, défaut off) 1 pour autoriser les captures de surfaces à contenu réel (sélecteur de modèles, workspace, bases, canaux). À réserver à une instance à données fictives : par défaut ces surfaces sont sautées (test.skip) et restent schématisées dans ../architecture.md |
Exécution
Depuis ce dossier (capture/ est un projet Playwright autonome — le spec vit hors du testDir de la série QA, signe lui-même et résout ici son instance unique de @playwright/test) :
npm ci # première fois seulement
npx playwright testLes images sont écrites dans ../assets/. Vérifiez chaque image visuellement (revue anti-fuite) avant de la commiter.
Note sélecteurs. Les sélecteurs du script sont volontairement robustes (rôles ARIA, libellés multilingues) mais devront être confirmés contre la version live de l’instance — comme pour la série QA, l’interface peut dériver d’une version à l’autre.
Capture — Tour de la plateforme (Epic #4433, fermée — parcours livré ; parent #4427). FR-first. 0 secret commité.