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>
This commit is contained in:
jpgiannetti
2026-02-01 11:31:41 +01:00
parent 841028d1b2
commit 37c62206ad
88 changed files with 625 additions and 67 deletions

View File

@@ -0,0 +1,274 @@
# language: fr
Fonctionnalité: Audio-guides modes vélo et transport
En tant qu'utilisateur à vélo ou en transport en commun
Je veux profiter d'un guidage GPS adapté à mon mode de déplacement
Afin d'avoir une expérience optimisée avec tolérances appropriées
Contexte:
Étant donné que l'application RoadWave est démarrée
Et que l'utilisateur "jean@example.com" est connecté
Et que le GPS est activé
# 16.4 - Modes Vélo et Transport
Plan du Scénario: Paramètres par mode de déplacement
Étant donné un audio-guide configuré en mode <mode>
Alors les paramètres suivants sont appliqués:
| paramètre | valeur |
| Rayon déclenchement | <rayon_declenchement> |
| Rayon tolérance "point manqué" | <rayon_tolerance> |
| Vitesse recommandée | <vitesse_recommandee> |
| Seuil warning sécurité | <seuil_warning> |
Exemples:
| mode | rayon_declenchement | rayon_tolerance | vitesse_recommandee | seuil_warning |
| Voiture | 30m | 100m | 20-50 km/h | >10 km/h |
| Vélo | 50m | 75m | 10-25 km/h | >5 km/h |
| Transport | 100m | 150m | Variable | Désactivé |
# Mode Vélo
Scénario: Déclenchement automatique avec rayon 50m (mode vélo)
Étant donné un audio-guide vélo "Circuit des châteaux de la Loire"
Et que le point GPS 3 a un rayon de 50m
Quand l'utilisateur à vélo entre à 45m du point
Alors la séquence 3 "Château de Chambord" se déclenche automatiquement
Scénario: Rayon plus large justifié pour le vélo
Étant donné qu'un cycliste roule sur piste cyclable
Et que sa vitesse varie entre 8 et 22 km/h (arrêts fréquents)
Et que le tracé est moins prévisible qu'en voiture
Quand un point GPS avec rayon 50m est défini
Alors le rayon plus large compense la variabilité de trajectoire
Scénario: Warning sécurité dès 5 km/h en vélo
Étant donné un audio-guide vélo en cours
Et que la vitesse actuelle est 12 km/h
Quand l'utilisateur clique sur [|] "Suivant"
Alors l'action est exécutée
Et un warning s'affiche: " Manipulation en déplacement détecté. Pour votre sécurité, arrêtez-vous."
Plan du Scénario: Warning vélo selon la vitesse
Étant donné que la vitesse actuelle à vélo est <vitesse> km/h
Quand l'utilisateur clique sur un bouton de navigation
Alors le warning est affiché : <warning>
Exemples:
| vitesse | warning |
| 0 | Non |
| 4 | Non |
| 6 | Oui |
| 15 | Oui |
| 25 | Oui |
Scénario: Tolérance GPS moins stricte en vélo
Étant donné qu'un cycliste passe à 65m du point GPS 4
Et que le rayon de déclenchement est 50m
Et que le rayon de tolérance est 75m
Quand la distance est détectée
Alors la popup "Point manqué" s'affiche avec 3 options
Et le système tolère l'écart (trajectoire vélo moins prévisible)
Scénario: Affichage adapté au vélo
Étant donné un audio-guide vélo en cours
Quand l'interface est affichée
Alors les informations suivantes sont visibles:
| information | valeur |
| Icône mode | 🚴 |
| Distance prochain point| "450 m" |
| ETA | " 2 minutes" |
| Direction | |
| Vitesse actuelle | "18 km/h" |
| Vitesse recommandée | "10-25 km/h" |
Scénario: Cas d'usage - Piste cyclable avec arrêts fréquents
Étant donné qu'un cycliste suit un circuit nature
Et qu'il s'arrête régulièrement (feux, photos, fatigue)
Quand il s'arrête à 40m d'un point GPS (rayon 50m)
Alors la séquence se déclenche automatiquement
Et le rayon large permet le déclenchement malgré l'arrêt
Scénario: Cas d'usage - Circulation mixte piétons/vélos
Étant donné qu'un cycliste roule sur voie partagée
Et qu'il doit ralentir fréquemment pour éviter les piétons
Quand sa vitesse varie entre 5 et 20 km/h
Alors le système s'adapte avec le rayon 50m
Et le déclenchement reste fiable
# Mode Transport
Scénario: Déclenchement automatique avec rayon 100m (mode transport)
Étant donné un audio-guide transport "Ligne touristique Paris"
Et que le point GPS "Tour Eiffel" a un rayon de 100m
Quand le bus touristique entre à 85m du point
Alors la séquence "Tour Eiffel" se déclenche automatiquement
Scénario: Rayon très large justifié pour le transport
Étant donné qu'un bus touristique suit une ligne fixe
Et qu'il effectue des arrêts fréquents (stations)
Et que l'utilisateur n'a aucun contrôle sur la trajectoire
Quand un point GPS avec rayon 100m est défini
Alors le rayon large compense les arrêts et la ligne fixe
Scénario: Pas de warning sécurité en mode transport
Étant donné un audio-guide transport en cours
Et que le bus roule à 50 km/h
Quand l'utilisateur clique sur [|] "Suivant"
Alors l'action est exécutée immédiatement
Et aucun warning n'est affiché
Parce que l'utilisateur est passager (pas conducteur)
Scénario: Vitesse recommandée "Selon ligne"
Étant donné un audio-guide transport
Quand l'interface est affichée
Alors la vitesse recommandée indique "Selon ligne"
Et aucune valeur fixe n'est affichée (car ligne de transport varie)
Scénario: Tolérance horaire pour retards
Étant donné qu'un bus touristique est en retard de 3 minutes
Et qu'il arrive au point GPS "Musée du Louvre" avec retard
Quand il entre dans le rayon de 100m
Alors la séquence se déclenche normalement
Et le système tolère le retard (pas de pénalité temporelle)
Scénario: Tolérance spatiale très large (150m)
Étant donné qu'un bus passe à 120m du point GPS "Arc de Triomphe"
Et que le rayon de déclenchement est 100m
Et que le rayon de tolérance est 150m
Quand la distance est détectée
Alors la popup "Point manqué" s'affiche avec 3 options
Scénario: Affichage adapté au transport
Étant donné un audio-guide transport en cours
Quand l'interface est affichée
Alors les informations suivantes sont visibles:
| information | valeur |
| Icône mode | 🚌 |
| Distance prochain point| "1.2 km" |
| ETA | " 3 minutes" |
| Direction | |
| Vitesse actuelle | "35 km/h" |
| Vitesse recommandée | "Selon ligne" |
Scénario: Cas d'usage - Bus touristique hop-on hop-off
Étant donné un bus touristique "Paris Open Tour"
Et qu'il suit un circuit fixe avec 15 arrêts
Quand il approche de chaque arrêt
Alors la séquence correspondante se déclenche automatiquement
Et l'utilisateur n'a rien à faire (expérience passive)
Scénario: Cas d'usage - Train panoramique
Étant donné un train touristique "Ligne des Alpes"
Et qu'il roule à vitesse variable (20-80 km/h)
Quand il passe près de points d'intérêt
Alors les séquences se déclenchent avec rayon 100m
Et le système compense la vitesse élevée
# Comportements identiques à la voiture
Scénario: Navigation manuelle conservée (vélo et transport)
Étant donné un audio-guide en mode <mode>
Quand l'utilisateur clique sur [|] ou [|]
Alors les boutons manuels fonctionnent normalement
Et aucune vérification GPS n'est effectuée
Exemples:
| mode |
| Vélo |
| Transport |
Scénario: Affichage distance + ETA + direction (tous modes)
Étant donné un audio-guide en mode <mode>
Quand l'interface est affichée
Alors les informations distance, ETA et direction sont affichées
Et le format est identique au mode voiture
Exemples:
| mode |
| Vélo |
| Transport |
Scénario: Gestion "Point manqué" identique
Étant donné un audio-guide en mode <mode>
Quand un point GPS est manqué (dans rayon tolérance)
Alors la popup avec 3 options s'affiche:
| option |
| 🔊 Écouter quand même |
| Passer au suivant |
| 🔙 Faire demi-tour |
Exemples:
| mode |
| Vélo |
| Transport |
# Publicités (identique tous modes)
Plan du Scénario: Insertion publicité dans tous les modes
Étant donné un utilisateur gratuit écoute un audio-guide en mode <mode>
Quand la séquence 5 se termine (1 pub / 5 séquences)
Alors la publicité s'enchaîne automatiquement
Et elle est skippable après 5 secondes
Exemples:
| mode |
| Voiture |
| Vélo |
| Transport |
| Piéton |
# Cas d'erreur
Scénario: GPS imprécis en forêt (vélo)
Étant donné un cycliste dans une forêt dense
Et que la précision GPS est ±80m
Quand il approche d'un point GPS avec rayon 50m
Alors un avertissement s'affiche:
"""
Signal GPS imprécis (±80m)
Le déclenchement peut être perturbé.
Utilisez les boutons manuels si nécessaire.
"""
Scénario: Bus dévié de son itinéraire (transport)
Étant donné un bus touristique avec déviation
Et que plusieurs points GPS deviennent inaccessibles
Quand l'utilisateur est informé
Alors un message s'affiche:
"""
Itinéraire modifié
Certains points ne seront pas atteints.
Utilisez la navigation manuelle.
"""
Scénario: Changement de mode en cours de route
Étant donné un audio-guide démarré en mode "Vélo"
Quand l'utilisateur décide de continuer à pied
Et qu'il ouvre les paramètres
Alors il peut changer le mode vers "Piéton"
Et les rayons sont reconfigurés automatiquement
Et une confirmation s'affiche:
"""
Mode changé : 🚶 Piéton
Navigation manuelle activée.
"""
Scénario: Détection automatique incohérente
Étant donné qu'un utilisateur marche rapidement (7 km/h)
Et que le système détecte "Vélo" par erreur
Quand la suggestion s'affiche
Alors l'utilisateur peut cliquer sur "Changer"
Et sélectionner manuellement "Piéton"
Scénario: Batterie en mode vélo longue distance
Étant donné un circuit vélo de 50 km avec 20 séquences
Et que l'utilisateur roule pendant 3 heures
Quand la batterie atteint 15%
Alors une notification suggère:
"""
🔋 Batterie à 15%
Recommandé : activer mode économie d'énergie
(Désactive affichage continu distance)
[Activer] [Ignorer]
"""