Génération reproductible des captures du Tour

← Tour de la plateforme

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 (mask de 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

  1. 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.
  2. 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 explicite DEMO_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.
  3. 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).
  4. Revue anti-fuite de chaque PNG en PR avant fusion — relecture humaine des images générées.
  5. 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 capture

Variables 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 test

Les 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é.

Retour au sommet