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,115 @@
# language: fr
@error-handling @no-content
Fonctionnalité: Élargissement automatique de zone quand aucun contenu n'est disponible
Contexte:
Étant donné que je suis un utilisateur connecté
Et que la géolocalisation est activée
Et que je suis en mode écoute
# 12.1 - Élargissement progressif
Scénario: Aucun contenu dans rayon 50km - élargissement à 100km
Étant donné que je suis situé à la position GPS 48.8566, 2.3522
Et qu'aucun contenu n'existe dans un rayon de 50 km autour de ma position
Mais qu'au moins 1 contenu existe dans un rayon de 100 km
Quand le système recherche du contenu à me proposer
Alors le système élargit automatiquement la zone de recherche à 100 km
Et je reçois un message "Aucun contenu dans votre zone immédiate. Voici du contenu à proximité (100 km)"
Et un contenu dans le rayon de 100 km m'est proposé
Scénario: Aucun contenu dans rayon 100km - élargissement au département
Étant donné que je suis situé dans le département "75" (Paris)
Et qu'aucun contenu n'existe dans un rayon de 100 km autour de ma position
Mais qu'au moins 1 contenu existe avec la zone "département" pour "75"
Quand le système recherche du contenu à me proposer
Alors le système élargit automatiquement la zone de recherche au département
Et je reçois un message "Aucun contenu local disponible. Voici du contenu dans votre département"
Et un contenu départemental m'est proposé
Scénario: Aucun contenu départemental - élargissement à la région
Étant donné que je suis situé dans la région "Île-de-France"
Et qu'aucun contenu n'existe dans un rayon de 100 km autour de ma position
Et qu'aucun contenu départemental n'existe pour mon département
Mais qu'au moins 1 contenu existe avec la zone "région" pour "Île-de-France"
Quand le système recherche du contenu à me proposer
Alors le système élargit automatiquement la zone de recherche à la région
Et je reçois un message "Aucun contenu local disponible. Voici du contenu dans votre région"
Et un contenu régional m'est proposé
Scénario: Aucun contenu régional - basculement sur contenu national
Étant donné que je suis situé en France
Et qu'aucun contenu n'existe dans un rayon de 100 km autour de ma position
Et qu'aucun contenu départemental n'existe pour mon département
Et qu'aucun contenu régional n'existe pour ma région
Quand le système recherche du contenu à me proposer
Alors le système bascule automatiquement sur du contenu national
Et je reçois un message "Aucun contenu local disponible. Voici du contenu national qui pourrait vous intéresser"
Et un contenu national m'est proposé
Et je ne reste jamais sans contenu disponible
Scénario: Élargissement progressif avec plusieurs étapes
Étant donné que je suis situé dans une zone rurale isolée
Et qu'aucun contenu n'existe dans un rayon de 50 km
Et qu'aucun contenu n'existe dans un rayon de 100 km
Et qu'aucun contenu départemental n'existe
Et qu'aucun contenu régional n'existe
Quand le système recherche du contenu à me proposer
Alors le système essaie d'abord 50 km
Puis essaie 100 km
Puis essaie le département
Puis essaie la région
Puis bascule sur le contenu national
Et tout ce processus se fait de manière transparente et automatique
Et je reçois le message correspondant au dernier niveau trouvé
# Messages adaptatifs selon le niveau d'élargissement
Scénario: Message personnalisé selon la distance trouvée
Étant donné que je suis situé à la position GPS 43.6047, 1.4442
Et que <niveau_geo> contenu(s) est/sont trouvé(s)
Quand le système me propose du contenu
Alors je reçois le message "<message_attendu>"
Exemples:
| niveau_geo | message_attendu |
| 100 km | Aucun contenu dans votre zone immédiate. Voici du contenu à proximité (100 km) |
| département | Aucun contenu local disponible. Voici du contenu dans votre département |
| région | Aucun contenu local disponible. Voici du contenu dans votre région |
| national | Aucun contenu local disponible. Voici du contenu national qui pourrait vous intéresser|
# Filet de sécurité - toujours du contenu disponible
Scénario: Le contenu national sert de filet de sécurité
Étant donné que le système a épuisé toutes les zones géographiques locales
Quand le système bascule sur du contenu national
Alors je dois toujours avoir au moins 1 contenu disponible
Et ce contenu peut être:
| type_contenu |
| Actualités Le Monde |
| Podcasts génériques |
| Contenu éducatif national |
| Contenu culturel national |
# Pas de message d'erreur bloquant
Scénario: Pas d'écran d'erreur "Aucun contenu"
Étant donné que je lance l'application
Et qu'aucun contenu local n'est disponible dans ma zone
Quand le système recherche du contenu
Alors je ne dois jamais voir un message d'erreur "Aucun contenu disponible"
Et je ne dois jamais voir un écran vide
Et un contenu doit toujours m'être proposé, même si c'est du contenu national
# Comportement avec historique d'écoute
Scénario: Élargissement avec prise en compte des centres d'intérêt
Étant donné que je suis situé dans une zone rurale
Et qu'aucun contenu n'existe dans un rayon de 50 km
Et que mes centres d'intérêt incluent "Automobile" à 80% et "Voyage" à 70%
Et qu'un contenu national existe avec le tag "Automobile"
Et qu'un contenu national existe avec le tag "Politique"
Quand le système bascule sur du contenu national
Alors le contenu national proposé prend en compte mes centres d'intérêt
Et le contenu "Automobile" a un score supérieur au contenu "Politique"