Files
roadwave/features/ui/navigation/commandes-vocales.feature
jpgiannetti 37c62206ad feat(bdd): réorganiser features en catégories api/ui/e2e et créer ADR-024
Résolution des incohérences #10, #11, et #12 de l'analyse d'architecture.

## Phase 1 : Réorganisation Features BDD (Point #10 - RÉSOLU)

- Créer structure features/{api,ui,e2e}
- Déplacer 83 features en 3 catégories via git mv (historique préservé)
  - features/api/ : 53 features (tests API backend)
  - features/ui/ : 22 features (tests UI mobile)
  - features/e2e/ : 8 features (tests end-to-end)

Domaines déplacés :
- API : authentication, recommendation, rgpd-compliance, content-creation,
  moderation, monetisation, premium, radio-live, publicites
- UI : audio-guides, navigation, interest-gauges, mode-offline,
  partage, profil, recherche
- E2E : abonnements, error-handling

## Phase 2 : Mise à jour Documentation

### ADR-007 - Tests BDD
- Ajouter section "Convention de Catégorisation des Features"
- Documenter règles api/ui/e2e avec exemples concrets
- Spécifier step definitions (backend Go, mobile Dart)

### ADR-024 - Stratégie CI/CD Monorepo (NOUVEAU)
- Créer ADR dédié pour stratégie CI/CD avec path filters
- Architecture workflows séparés (backend.yml, mobile.yml, shared.yml)
- Configuration path filters détaillée avec exemples YAML
- Matrice de déclenchement et optimisations (~70% gain temps CI)
- Plan d'implémentation (~2h, reporté jusqu'au développement)

### ADR-016 - Organisation Monorepo
- Simplifier en retirant section CI/CD détaillée
- Ajouter référence vers ADR-024 pour stratégie CI/CD

### INCONSISTENCIES-ANALYSIS.md
- Point #10 (Tests BDD synchronisés) :  RÉSOLU
  - Catégorisation features implémentée
  - ADR-007 mis à jour avec convention complète
- Point #11 (70/30 Split paiements) :  ANNULÉ (faux problème)
  - ADR-009 et Règle 18 parfaitement cohérents
  - Documentation exhaustive existante (formule, SQL, comparaisons)
- Point #12 (Monorepo path filters) : ⏸️ DOCUMENTÉ
  - Architecture CI/CD complète dans ADR-024
  - Implémentation reportée (projet en phase documentation)
- Métriques mises à jour :
  - MODERATE : 6/9 traités (4 résolus + 1 annulé + 1 documenté)
  - ADR à jour : 100% (19/19 avec ADR-024)

## Phase 3 : Validation

- Structure features validée (api/ui/e2e, aucun répertoire restant)
- Historique Git préservé (git mv, renommages détectés)
- 83 features total (API: 53, UI: 22, E2E: 8)

Closes: Point #10 (résolu), Point #11 (annulé), Point #12 (documenté)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 11:31:41 +01:00

239 lines
12 KiB
Gherkin

# language: fr
Fonctionnalité: Commandes vocales CarPlay et Android Auto
En tant que conducteur avec CarPlay ou Android Auto
Je veux utiliser des commandes vocales pour interagir avec l'application
Afin de garder les mains sur le volant et les yeux sur la route
Contexte:
Étant donné que l'API RoadWave est disponible
Et qu'un utilisateur est connecté
Et que CarPlay ou Android Auto est activé
Scénario: Disponibilité des commandes vocales uniquement avec CarPlay/Android Auto
Étant donné que je conduis avec CarPlay activé
Quand je dis "Hey Siri"
Alors Siri est disponible pour les commandes RoadWave
Étant donné que je conduis avec Android Auto activé
Quand je dis "OK Google"
Alors Google Assistant est disponible pour les commandes RoadWave
Scénario: Parc automobile compatible avec vocal (30-40% en 2026)
Étant donné que nous sommes en 2026
Quand je consulte les statistiques du parc automobile EU
Alors environ 30-40% des véhicules ont CarPlay ou Android Auto
Et ces utilisateurs peuvent utiliser les commandes vocales
Et les 60-70% restants utilisent les commandes au volant uniquement
Scénario: Commande vocale "Like ce podcast" avec Siri
Étant donné que j'écoute un contenu tagué "Automobile"
Et que ma jauge "Automobile" est à 60%
Quand je dis "Hey Siri, like ce podcast"
Alors un like explicite (+2%) est enregistré
Et ma jauge "Automobile" passe à 62%
Et Siri confirme vocalement "J'ai ajouté ce contenu à vos favoris"
Et aucune interaction écran n'est requise
Scénario: Commande vocale "Like ce contenu" avec Google Assistant
Étant donné que j'écoute un contenu tagué "Voyage"
Quand je dis "OK Google, like ce contenu"
Alors un like explicite est enregistré (+2%)
Et Google Assistant confirme "J'ai liké ce contenu pour vous"
Et la commande fonctionne sans toucher l'écran
Scénario: Commande vocale "Abonne-moi à ce créateur"
Étant donné que j'écoute un contenu d'un créateur tagué "Automobile" et "Technologie"
Et que mes jauges sont à 50% et 45%
Quand je dis "Hey Siri, abonne-moi à ce créateur"
Alors l'abonnement est enregistré
Et mes jauges augmentent de 5% chacune (55% et 50%)
Et Siri confirme "Vous êtes maintenant abonné à [Nom du créateur]"
Scénario: Commande vocale "Passe au contenu suivant"
Étant donné que j'écoute un contenu "A"
Quand je dis "Hey Siri, passe au contenu suivant"
Alors le contenu "B" démarre immédiatement
Et la commande a le même effet que le bouton physique "Suivant"
Scénario: Commande vocale "Signale ce contenu"
Étant donné que j'écoute un contenu inapproprié
Quand je dis "OK Google, signale ce contenu"
Alors Google Assistant demande "Quelle catégorie ?"
Et je réponds vocalement "Spam"
Alors le signalement est enregistré avec la catégorie "Spam"
Et Google Assistant confirme "J'ai signalé ce contenu"
Scénario: Commande vocale avec catégorie de signalement
Étant donné que j'écoute un contenu
Quand je dis "Hey Siri, signale ce contenu pour haine"
Alors le signalement est enregistré avec la catégorie "Haine et violence"
Et Siri confirme "J'ai signalé ce contenu pour haine et violence"
Et le flux de modération reçoit le signalement
Scénario: Liste des catégories de signalement vocales supportées
Étant donné que je dis "signale ce contenu pour [catégorie]"
Quand la catégorie est:
| Mot-clé vocal | Catégorie mappée |
| "haine" | Haine et violence |
| "sexuel" | Contenu sexuel |
| "illégalité" | Illégalité |
| "droits d'auteur" | Droits d'auteur |
| "spam" | Spam |
| "fake news" | Désinformation |
| "autre" | Autre |
Alors le signalement est enregistré avec la bonne catégorie
Scénario: Commande vocale non reconnue - fallback
Étant donné que je dis "Hey Siri, super ce podcast"
Quand Siri ne reconnaît pas l'intent RoadWave
Alors Siri répond "Je ne comprends pas cette commande RoadWave"
Et elle suggère "Dites 'like ce podcast' ou 'passe au suivant'"
Scénario: Commandes vocales disponibles en conduite uniquement
Étant donné que je roule à 50 km/h
Quand j'utilise les commandes vocales
Alors toutes les commandes sont disponibles:
| Commande | Action |
| "Like ce podcast" | Like explicite +2% |
| "Abonne-moi à ce créateur" | Abonnement +5% |
| "Passe au suivant" | Contenu suivant |
| "Reviens au précédent" | Contenu précédent (règle 10s) |
| "Pause" | Pause lecture |
| "Reprends la lecture" | Play |
| "Signale ce contenu" | Signalement |
Scénario: Intent iOS personnalisé pour RoadWave
Étant donné que l'app iOS implémente les Intents
Quand je configure les Shortcuts iOS
Alors les intents suivants sont disponibles:
| Intent Name | Action |
| LikeCurrentContentIntent | Like explicite |
| SubscribeToCreatorIntent | Abonnement |
| ReportContentIntent | Signalement |
| SkipToNextContentIntent | Suivant |
Et Siri les reconnaît automatiquement
Scénario: Intent Android personnalisé pour RoadWave
Étant donné que l'app Android implémente les Voice Actions
Quand je configure les actions Google Assistant
Alors les actions suivantes sont disponibles:
| Action Name | Action |
| com.roadwave.LIKE_CONTENT | Like explicite |
| com.roadwave.SUBSCRIBE_CREATOR | Abonnement |
| com.roadwave.REPORT_CONTENT | Signalement |
| com.roadwave.SKIP_NEXT | Suivant |
Et Google Assistant les reconnaît
Scénario: Confirmation vocale après action réussie
Étant donné que je dis "Hey Siri, like ce podcast"
Quand l'action est enregistrée avec succès
Alors Siri répond immédiatement avec confirmation:
"""
J'ai ajouté ce contenu à vos favoris
"""
Et la réponse est naturelle et concise
Et elle ne distrait pas de la conduite
Scénario: Gestion d'erreur vocale si action échoue
Étant donné que je dis "Hey Siri, abonne-moi à ce créateur"
Et que j'ai atteint la limite de 200 abonnements
Quand Siri essaie d'enregistrer l'abonnement
Alors l'action échoue
Et Siri répond "Impossible de s'abonner, limite de 200 abonnements atteinte"
Et elle suggère "Désabonnez-vous d'un créateur pour continuer"
Scénario: Commandes vocales multilingues (français)
Étant donné que mon Siri est configuré en français
Quand je dis "Hey Siri, j'aime ce podcast"
Alors la commande est reconnue (variante de "like ce podcast")
Quand je dis "Hey Siri, mets une étoile"
Alors la commande est reconnue (variante de "like")
Scénario: Implémentation post-MVP (Sprint 5)
Étant donné que les commandes vocales sont une feature Sprint 5
Quand le MVP est lancé
Alors seules les commandes au volant physiques sont disponibles
Quand le Sprint 5 est déployé
Alors les intents iOS/Android sont activés
Et les commandes vocales deviennent disponibles
Scénario: Priorisation commandes vocales vs boutons physiques
Étant donné que je conduis avec CarPlay
Et que j'ai accès aux boutons physiques ET aux commandes vocales
Quand je veux liker un contenu
Alors je peux soit:
- Attendre l'arrêt et cliquer le bouton cœur (recommandé)
- Dire "Hey Siri, like ce podcast" (en conduite)
- Laisser le like automatique se faire (écoute 80%)
Et les 3 méthodes sont valides
Scénario: Statistiques d'usage des commandes vocales
Étant donné que 100 utilisateurs avec CarPlay utilisent RoadWave
Quand je consulte les analytics
Alors je peux voir:
| Métrique | Exemple valeur |
| Taux d'utilisation commandes vocal | 15% |
| Commande la plus utilisée | "Like" |
| Taux de reconnaissance réussie | 92% |
| Taux d'échec / incompréhension | 8% |
Scénario: Feedback haptique désactivé pour commandes vocales
Étant donné que je like un contenu via commande vocale
Quand l'action est enregistrée
Alors aucune vibration haptique n'est déclenchée
Et seule la confirmation vocale est donnée
Car je n'ai pas le téléphone en main
Scénario: Badge visuel mis à jour après commande vocale
Étant donné que je dis "Hey Siri, like ce podcast"
Quand l'action est enregistrée
Alors le badge " Ajouté à vos favoris" s'affiche sur l'écran CarPlay
Et le cœur devient rouge plein dans l'interface
Et la mise à jour est visible même sans toucher l'écran
Scénario: Commandes vocales avec contenu sans créateur
Étant donné que j'écoute un contenu anonyme (créateur supprimé)
Quand je dis "Hey Siri, abonne-moi à ce créateur"
Alors Siri répond "Ce créateur n'est plus disponible"
Et aucun abonnement n'est enregistré
Scénario: Limitation temporelle des commandes vocales
Étant donné que je dis "Hey Siri, like ce podcast"
Et que le contenu change 1 seconde après
Quand Siri traite la commande 2 secondes plus tard
Alors la commande s'applique au contenu qui était en lecture au moment de la commande
Et non au contenu actuel (système de timestamp)
Plan du Scénario: Commandes vocales avec différents assistants
Étant donné que j'utilise <assistant>
Quand je dis <commande>
Alors l'action <action> est exécutée
Et la confirmation est <confirmation>
Exemples:
| assistant | commande | action | confirmation |
| Siri | "Like ce podcast" | Like +2% | "Ajouté à vos favoris" |
| Google Assistant | "Like ce contenu" | Like +2% | "J'ai liké ce contenu" |
| Siri | "Abonne-moi à ce créateur" | Abonnement +5% | "Vous êtes abonné" |
| Google Assistant | "Abonne-moi à ce créateur" | Abonnement +5% | "Abonnement enregistré" |
| Siri | "Signale ce contenu" | Signalement | "J'ai signalé ce contenu" |
| Google Assistant | "Signale ce contenu" | Signalement | "Contenu signalé" |
Plan du Scénario: Mapping catégories signalement vocal
Étant donné que je dis "signale ce contenu pour <mot_cle>"
Quand <mot_cle> est reconnu
Alors la catégorie mappée est <categorie>
Exemples:
| mot_cle | categorie |
| haine | Haine et violence |
| violence | Haine et violence |
| sexuel | Contenu sexuel |
| porno | Contenu sexuel |
| illégal | Illégalité |
| terrorisme | Illégalité |
| copyright | Droits d'auteur |
| droits auteur | Droits d'auteur |
| spam | Spam |
| fake news | Désinformation |
| fausse info | Désinformation |