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,193 @@
# language: fr
Fonctionnalité: Évolution des jauges d'intérêt
En tant que système de recommandation
Je veux faire évoluer les jauges d'intérêt selon les actions utilisateur
Afin d'affiner les recommandations personnalisées
Contexte:
Étant donné que l'API RoadWave est disponible
Et qu'un utilisateur est connecté
Scénario: Like automatique renforcé après écoute ≥80%
Étant donné qu'un contenu de 5 minutes est tagué "Automobile"
Et que ma jauge "Automobile" est à 45%
Quand j'écoute le contenu pendant 4 minutes 30 secondes (90%)
Alors je reçois un like automatique renforcé
Et ma jauge "Automobile" augmente de 2%
Et ma jauge "Automobile" est maintenant à 47%
Scénario: Like automatique renforcé exactement à 80%
Étant donné qu'un contenu de 10 minutes est tagué "Voyage"
Et que ma jauge "Voyage" est à 60%
Quand j'écoute le contenu pendant exactement 8 minutes (80%)
Alors je reçois un like automatique renforcé
Et ma jauge "Voyage" augmente de 2%
Et ma jauge "Voyage" est maintenant à 62%
Scénario: Like automatique standard après écoute 30-79%
Étant donné qu'un contenu de 5 minutes est tagué "Automobile"
Et que ma jauge "Automobile" est à 45%
Quand j'écoute le contenu pendant 2 minutes 30 secondes (50%)
Alors je reçois un like automatique standard
Et ma jauge "Automobile" augmente de 1%
Et ma jauge "Automobile" est maintenant à 46%
Scénario: Like automatique standard à 30% exactement
Étant donné qu'un contenu de 10 minutes est tagué "Musique"
Et que ma jauge "Musique" est à 40%
Quand j'écoute le contenu pendant exactement 3 minutes (30%)
Alors je reçois un like automatique standard
Et ma jauge "Musique" augmente de 1%
Scénario: Like automatique standard à 79%
Étant donné qu'un contenu de 10 minutes est tagué "Sport"
Et que ma jauge "Sport" est à 55%
Quand j'écoute le contenu pendant 7 minutes 54 secondes (79%)
Alors je reçois un like automatique standard
Et ma jauge "Sport" augmente de 1%
Et ma jauge "Sport" est maintenant à 56%
Scénario: Like explicite (manuel) +2%
Étant donné qu'un contenu est tagué "Économie"
Et que ma jauge "Économie" est à 70%
Quand j'écoute le contenu partiellement
Et que je clique manuellement sur le bouton "Like"
Alors ma jauge "Économie" augmente de 2%
Et ma jauge "Économie" est maintenant à 72%
Scénario: Like manuel cumulable avec like automatique
Étant donné qu'un contenu de 5 minutes est tagué "Automobile"
Et que ma jauge "Automobile" est à 45%
Quand j'écoute le contenu pendant 2 minutes 30 secondes (50%)
Alors je reçois un like automatique standard (+1%)
Quand je clique ensuite sur le bouton "Like"
Alors ma jauge augmente encore de 2% (like manuel)
Et ma jauge "Automobile" a augmenté de 3% au total
Et ma jauge "Automobile" est maintenant à 48%
Scénario: Abonnement créateur impacte tous ses tags
Étant donné qu'un créateur publie des contenus tagués "Automobile" et "Technologie"
Et que mes jauges sont:
| catégorie | niveau |
| Automobile | 50% |
| Technologie | 45% |
Quand je m'abonne à ce créateur
Alors ma jauge "Automobile" augmente de 5%
Et ma jauge "Technologie" augmente de 5%
Et mes nouvelles jauges sont:
| catégorie | niveau |
| Automobile | 55% |
| Technologie | 50% |
Scénario: Skip rapide (<10s) diminue la jauge
Étant donné qu'un contenu est tagué "Économie"
Et que ma jauge "Économie" est à 45%
Quand je skip le contenu après 5 secondes
Alors ma jauge "Économie" diminue de 0.5%
Et ma jauge "Économie" est maintenant à 44.5%
Scénario: Skip à exactement 10s ne diminue pas la jauge
Étant donné qu'un contenu est tagué "Politique"
Et que ma jauge "Politique" est à 50%
Quand je skip le contenu après exactement 10 secondes
Alors ma jauge "Politique" ne change pas
Et reste à 50%
Scénario: Skip tardif (≥30%) est neutre
Étant donné qu'un contenu de 10 minutes est tagué "Musique"
Et que ma jauge "Musique" est à 60%
Quand j'écoute pendant 3 minutes (30%)
Et que je skip ensuite
Alors ma jauge "Musique" ne diminue pas (signal neutre)
Et ma jauge reste à 60% (plus le +1% de like auto si applicable)
Scénario: Contenu avec plusieurs tags impacte toutes les jauges
Étant donné qu'un contenu est tagué "Automobile" et "Voyage"
Et que mes jauges sont:
| catégorie | niveau |
| Automobile | 45% |
| Voyage | 60% |
Quand j'écoute le contenu à 90%
Alors les deux jauges augmentent de 2%
Et mes nouvelles jauges sont:
| catégorie | niveau |
| Automobile | 47% |
| Voyage | 62% |
Scénario: Contenu avec 3 tags impacte les 3 jauges
Étant donné qu'un contenu est tagué "Sport", "Santé" et "Technologie"
Et que mes jauges sont à 50% pour chaque catégorie
Quand je skip rapidement après 5 secondes
Alors les 3 jauges diminuent de 0.5%
Et toutes passent à 49.5%
Scénario: Jauges bornées - ne peut pas dépasser 100%
Étant donné que ma jauge "Cryptomonnaie" est à 99%
Et qu'un contenu tagué "Cryptomonnaie" est disponible
Quand j'écoute le contenu à 95% (like auto renforcé +2%)
Alors ma jauge "Cryptomonnaie" passe à 100% (maximum)
Et ne dépasse pas 100%
Scénario: Jauges bornées - ne peut pas descendre sous 0%
Étant donné que ma jauge "Politique" est à 0.3%
Et qu'un contenu tagué "Politique" est disponible
Quand je skip rapidement après 3 secondes (-0.5%)
Alors ma jauge "Politique" passe à 0% (minimum)
Et ne devient pas négative
Scénario: Calcul immédiat à chaque action
Étant donné que ma jauge "Voyage" est à 50%
Quand j'écoute un contenu "Voyage" à 85%
Alors la jauge est mise à jour immédiatement (pas de batch)
Et passe à 52%
Quand je demande mes recommandations dans la seconde suivante
Alors l'algorithme utilise déjà la valeur 52%
Scénario: Like manuel après écoute <30% (pas de like auto)
Étant donné qu'un contenu de 10 minutes est tagué "Culture"
Et que ma jauge "Culture" est à 60%
Quand j'écoute pendant 2 minutes (20%)
Alors je ne reçois pas de like automatique
Quand je clique sur le bouton "Like"
Alors ma jauge "Culture" augmente de 2% uniquement
Et ma jauge "Culture" est maintenant à 62%
Scénario: Unlike retire le like manuel
Étant donné que j'ai liké manuellement un contenu "Sport"
Et que ma jauge "Sport" est passée de 55% à 57% (+2%)
Quand je clique sur "Unlike"
Alors ma jauge "Sport" diminue de 2%
Et ma jauge "Sport" revient à 55%
Scénario: Unlike ne peut pas retirer un like automatique
Étant donné que j'ai écouté un contenu "Musique" à 90%
Et que j'ai reçu un like automatique renforcé (+2%)
Et que ma jauge "Musique" est à 52%
Quand j'essaie de faire "Unlike"
Alors l'action n'est pas disponible
Et ma jauge reste à 52%
Car les likes automatiques ne peuvent pas être retirés
Scénario: Tags définis par créateur à la publication
Étant donné que je suis un créateur
Quand je publie un contenu
Alors je dois sélectionner 1 à 3 tags
Et ces tags sont fixés après publication
Et impacteront les jauges de tous les auditeurs
Plan du Scénario: Calculs avec différentes durées d'écoute
Étant donné qu'un contenu de 10 minutes est tagué "Voyage"
Et que ma jauge "Voyage" est à 50%
Quand j'écoute pendant <duree> (<pourcentage>)
Alors ma jauge évolue de <impact>
Et ma nouvelle jauge est à <nouveau_niveau>
Exemples:
| duree | pourcentage | impact | nouveau_niveau |
| 1 min | 10% | 0% | 50% |
| 3 min | 30% | +1% | 51% |
| 5 min | 50% | +1% | 51% |
| 7.9 min | 79% | +1% | 51% |
| 8 min | 80% | +2% | 52% |
| 9.5 min | 95% | +2% | 52% |
| 5 sec | <1% | -0.5% | 49.5% |