Skip to content

test(recette): Phase T — recette testeur Control Vault (NE PAS FUSIONNER) - #34

Draft
iPoower wants to merge 3 commits into
mainfrom
test/recette-phase-t
Draft

iPoower wants to merge 3 commits into
mainfrom
test/recette-phase-t

Conversation

@iPoower

@iPoower iPoower commented Oct 29, 2026 •

Copy link
Copy Markdown
Owner

⚠️ NE PAS FUSIONNER — recette de référence (Phase T)

Recette « testeur » du code actuellement en production (main @ 551f3d9). Cette PR n’ajoute que des fichiers de recette et un workflow ; aucune ligne de src/ n’est modifiée et aucune anomalie n’est corrigée ici.

Contenu

  • tests/recette/ : banc séparé, configuration Playwright dédiée (playwright.recette.config.ts), jamais exécuté par npm run test:e2e (testDir tests/e2e).
    • Parcours utilisateur cliqué (Chromium bureau + WebKit iPhone 15 avec émulation PWA display-mode: standalone / navigator.standalone) : connexion Google simulée → confirmation du compte → dossier dédié → « Actualiser les versions » → « Vérifier et télécharger » (téléchargement réel, SHA-256 du fichier = SHA-256 de la copie chiffrée fictive, « octets vérifiés » affiché).
    • Exploration systématique : inventaire automatique de tous les boutons, liens et champs visibles de chaque écran (routes, 6 états de l’écran Google Drive, fenêtres modales découvertes), activation un par un avec réinitialisation complète (stockage vidé, rechargement, faux Drive remis à zéro). Verdicts OK / KO / DÉSACTIVÉ-SANS-EXPLICATION / NON TESTABLE, couverture n/N.
    • Monkey maison (graine reproductible) : 5 min par navigateur, clics/tapes/saisies/touches aléatoires, navigation externe bloquée.
    • Erreurs console et exceptions capturées et classées (attendue / inexpliquée), capture par étape, trace Playwright par navigateur et par phase.
    • Sorties : recette-output/ → matrix.json, MATRICE.md, errors.json, screenshots/, traces/, rapport HTML.
  • .github/workflows/recette.yml : pull_request (chemins tests/recette/**, le workflow) + workflow_dispatch, permissions: contents: read, actions épinglées par SHA (mêmes SHA que pipeline.yml), image mcr.microsoft.com/playwright:v1.56.1-noble, aucun secret ni variable Google, artefact recette-phase-t-<run_id> conservé 14 jours.

Données et réseau

Données fictives uniquement : paquets Race Control chiffrés par le codec propriétaire épinglé (tests/fixtures/race-packet.ts), compte recette-fictive@example.invalid, configuration publique inventée. GIS, Picker et Drive v3 sont entièrement simulés par des routes Playwright (repris de tests/e2e/connected-drive.spec.ts) ; toute autre requête est interrompue. Aucun contact avec Google, Drive ou un compte réel. Service worker bloqué pendant la recette.

Anomalies trouvées (reproductions marquées test.fail(), aucun correctif)

ID Test Constat
BUG-01 BUG-01 connexion : fermer (ou bloquer) la fenêtre de consentement Google affiche « Session Google expirée » Fermer/bloquer la fenêtre Google → « Session Google expirée : reconnecte-toi pour reprendre. » + « Synchronisation bloquée », alors qu’aucune session n’a existé.
BUG-02 BUG-02 connexion : refuser l’autorisation Google Drive affiche « Session Google expirée » … Autorisation drive.file décochée → même message « Session expirée », la permission manquante n’est pas expliquée.
BUG-03 BUG-03 dossier : annuler le sélecteur Google Drive affiche « Erreur — action nécessaire » … Annuler le Picker → « Opération non confirmée… » + « Erreur — action nécessaire ».
BUG-04 BUG-04 cohérence : sur l’origine connectable, l’Accueil annonce « Google Drive — Connexion vérifiée » … Sur l’origine où Google est configuré, l’Accueil (démo) affiche « Connexion vérifiée » alors que l’écran Google Drive indique « Prêt à connecter ». À arbitrer (état de démonstration).
BUG-05 BUG-05 accessibilité : « Restaurer cette version » est désactivé sans description accessible … Bouton désactivé tant que la case « Je remplace l’état actuel… » n’est pas cochée, sans aria-describedby/title (mineur, a11y).
BUG-06 BUG-06 sauvegarde : « Annuler » devient désactivé pendant le contrôle de l’empreinte sans aucune explication Le commentaire du code dit « on retire le bouton », mais il reste affiché, désactivé, sans raison (mineur).

Toutes reproduites sous Chromium bureau et WebKit iPhone dans le run CI. Ces tests ne tournent que dans « Recette Phase T » ; un test.fail() devient rouge (« unexpectedly passed ») le jour où l’anomalie est corrigée.

Résultats CI (run « Recette Phase T » sur la tête bddb22f, fusion de test ec1fec5)

Navigateur Parcours N trouvés n testés Couverture KO Désactivé sans explication Non testable Monkey 5 min Erreurs inexpliquées
Chromium bureau RÉUSSI 534 484 90,6 % 0 5 50 879 actions, 0 erreur 0
WebKit iPhone 15 (PWA standalone émulée) RÉUSSI 562 511 90,9 % 0 4 51 553 actions, 0 erreur 0

« Désactivé sans explication » = « Restaurer cette version » (BUG-05) et « Annuler » de la sauvegarde (BUG-06, état bref). « Non testable » = liens externes (Race Control, Reconversion Control) et éléments transitoires. 602 erreurs console, toutes expliquées : 8 × 404 nominal « réserver puis relire » du Drive simulé, 594 × feuille body {} injectée par Playwright WebKit avant chaque capture et refusée par la CSP style-src 'self' (artefact du banc, absent sous Chromium).

⚠️ Conflit connu avec les garde-fous du dépôt

Ajouter ce workflow fait échouer 2 tests unitaires existants de tests/unit/pipeline.test.ts (« un seul workflow existe », « aucun déclenchement manuel ni externe ») : « Vérification complète » sera rouge sur cette PR. Les garde-fous n’ont volontairement pas été modifiés (changement CI/sécurité sensible, hors périmètre). Décision propriétaire requise : autoriser explicitement recette.yml dans ces garde-fous, retirer workflow_dispatch, ou garder la recette hors de main.

Exécution locale

  • Chromium (révision préinstallée /opt/pw-browsers/chromium, via RECETTE_CHROMIUM_PATH) : parcours RÉUSSI, exploration complète, monkey 5 min sans erreur, BUG-01…06 reproduits.
  • Gabarit iPhone 15 sur moteur Chromium (contrôle local seulement, pas une preuve WebKit) : parcours RÉUSSI, exploration et monkey sans erreur.
  • WebKit absent de l’environnement local : la preuve WebKit iPhone est le run CI ci-dessus.

Non testable automatiquement (à faire à la main)

Vraie connexion Google et vrai Picker, vrai iPhone/Safari/PWA écran d’accueil, téléchargement réel dans Fichiers puis import et déchiffrement dans Race Control, liens externes, service worker / hors ligne réel.

Impact, risques, retour arrière

  • Impact production : aucun (pas de src/, pas de publication ; workflow lecture seule, sans secret).
  • Changement CI = sensible : revue humaine obligatoire, jamais de fusion automatique.
  • Retour arrière : fermer la PR et supprimer la branche test/recette-phase-t ; aucune donnée ni configuration à restaurer.

https://claude.ai/code/session_01E5jwZntqAvJaRThsuEjgja


Generated by Claude Code

…bKit iPhone)

Banc de recette séparé (tests/recette/, configuration Playwright dédiée,
jamais lancé par `npm run test:e2e`) et workflow « Recette Phase T » :

- parcours utilisateur cliqué : connexion Google simulée → dossier dédié →
  liste des versions → « Vérifier et télécharger » (SHA-256 du fichier reçu
  comparé à la copie chiffrée fictive) ;
- exploration systématique de tous les boutons, liens et champs visibles de
  chaque écran, état réinitialisé avant chaque élément, matrice OK / KO /
  DÉSACTIVÉ-SANS-EXPLICATION / NON TESTABLE et couverture n/N ;
- session « monkey » de 5 min par navigateur (graine reproductible) ;
- erreurs console / exceptions capturées et expliquées, captures par étape,
  traces Playwright, sorties recette-output/ (matrix.json, MATRICE.md,
  errors.json, screenshots/, traces/) ;
- reproductions BUG-01 à BUG-05 marquées test.fail(), sans correctif.

Données fictives uniquement ; Google, Picker et Drive entièrement simulés,
toute autre requête bloquée. Aucun changement dans src/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E5jwZntqAvJaRThsuEjgja
Comment thread tests/recette/report.ts
try { return JSON.parse(readFileSync(join(OUT, 'partials', file), 'utf8')) as T; } catch { return null; }
}
const pct = (n: number, d: number) => (d ? Math.round((1000 * n) / d) / 10 : 0);
const md = (s: unknown) => String(s ?? '').replace(/\|/g, '\\|').replace(/\n/g, ' ');
…G-06

- erreurs console reçues pendant une capture d'écran marquées (pendantCapture) ;
  sous WebKit, Playwright insère <style>body {}</style> avant chaque capture
  (synchronisation des animations) et la CSP style-src 'self' la refuse :
  classée « attendue », artefact du banc et non de l'application ;
- BUG-06 : « Annuler » de la sauvegarde désactivé sans explication pendant le
  contrôle de l'empreinte (test.fail, aucun correctif).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E5jwZntqAvJaRThsuEjgja
L'état « Annuler désactivé » dure trop peu pour un sondage : un observateur
dans la page enregistre l'instant exact et la description éventuelle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E5jwZntqAvJaRThsuEjgja

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants