Files
roadwave/features/e2e/abonnements/impact-algorithme.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

147 lines
7.2 KiB
Gherkin
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# language: fr
Fonctionnalité: Impact des abonnements sur l'algorithme
En tant qu'auditeur
Je veux que les contenus de mes créateurs suivis soient favorisés
Afin de ne pas rater leurs publications tout en découvrant de nouveaux contenus
Contexte:
Étant donné que l'API RoadWave est disponible
Et que je suis connecté en tant qu'auditeur
Et que je suis abonné au créateur "JeanDupont"
Scénario: Boost de +30% appliqué au score final
Étant donné un contenu du créateur "JeanDupont" avec:
| score_geo | 0.5 |
| score_interet | 0.6 |
| score_engage | 0.5 |
Quand le score final est calculé
Alors le score de base est 0.53
Et le boost abonnement de +30% est appliqué
Et le score final avec boost est 0.69
Scénario: Contenu non-suivi peut battre contenu suivi
Étant donné que je suis à Paris
Et que 2 contenus sont disponibles:
| contenu | createur_suivi | score_geo | score_interet | score_engage | score_final_base | score_avec_boost |
| Contenu A | Non | 0.9 | 0.8 | 0.7 | 0.80 | 0.80 |
| Contenu B | Oui | 0.5 | 0.6 | 0.5 | 0.53 | 0.69 |
Quand l'algorithme sélectionne le prochain contenu
Alors le Contenu A est proposé en premier
Car son score (0.80) est supérieur au Contenu B avec boost (0.69)
Scénario: Contenu suivi remporte grâce au boost
Étant donné que je suis à Paris
Et que 2 contenus sont disponibles:
| contenu | createur_suivi | score_final_base | score_avec_boost |
| Contenu A | Non | 0.70 | 0.70 |
| Contenu B | Oui | 0.60 | 0.78 |
Quand l'algorithme sélectionne le prochain contenu
Alors le Contenu B est proposé en premier
Car le boost fait pencher la balance (0.78 > 0.70)
Scénario: Contenu suivi avec faible engagement ne domine pas
Étant donné que je suis abonné au créateur "CreateurMoyen"
Et qu'il publie un contenu avec très faible engagement (score 0.30)
Et qu'un contenu viral d'un créateur non-suivi a un score de 0.85
Quand l'algorithme sélectionne le prochain contenu
Alors le contenu viral est proposé en premier (0.85)
Car même avec boost, le contenu suivi obtient seulement 0.39 (0.30 × 1.3)
Scénario: Pas de file dédiée aux abonnements
Étant donné que je suis abonné à 50 créateurs
Quand l'algorithme génère ma file d'attente de 5 contenus
Alors les contenus suivis et non-suivis sont mélangés
Et tous entrent en compétition selon leurs scores (avec boost si abonnement)
Et il n'y a pas de section séparée "Contenus de vos abonnements"
Scénario: Vérification du calcul du boost
Étant donné un contenu d'un créateur suivi
Et que le score final de base est calculé à 0.65
Quand le boost abonnement est appliqué
Alors le multiplicateur utilisé est exactement 1.3
Et le score final avec boost est 0.845 (0.65 × 1.3)
Et le résultat est arrondi à 2 décimales: 0.85
Scénario: Boost appliqué à tous les contenus du créateur suivi
Étant donné que je suis abonné au créateur "JeanDupont"
Et qu'il a publié 10 contenus différents
Quand l'algorithme évalue chacun de ces contenus
Alors le boost de +30% est appliqué à tous les 10 contenus
Et chaque contenu bénéficie du même multiplicateur 1.3
Scénario: Plusieurs créateurs suivis en compétition
Étant donné que je suis abonné à "Créateur A" et "Créateur B"
Et que les 2 ont des contenus disponibles dans ma zone:
| createur | score_base | score_avec_boost |
| Créateur A | 0.70 | 0.91 |
| Créateur B | 0.65 | 0.85 |
Quand l'algorithme sélectionne le prochain contenu
Alors le contenu du Créateur A est proposé en premier (0.91 > 0.85)
Et les 2 bénéficient du boost, mais le meilleur score gagne
Scénario: Contenu national d'un créateur suivi
Étant donné que je suis abonné à "MediaNational"
Et qu'il publie un contenu de type "National" (score_geo 0.2)
Quand le score est calculé avec:
| score_geo | score_interet | score_engage |
| 0.2 | 0.7 | 0.6 |
Alors le score de base est environ 0.50
Et avec le boost abonnement, le score devient 0.65
Et le contenu peut être proposé malgré son score géo faible
Scénario: Transparence du boost dans les paramètres
Quand j'accède aux paramètres de l'algorithme de recommandation
Alors je vois l'information: "Les contenus de vos créateurs suivis bénéficient d'un boost de +30%"
Et je comprends que ce n'est pas une priorité absolue
Et que la découverte de nouveaux contenus reste possible
Scénario: Boost désactivé si désabonnement
Étant donné que je suis abonné au créateur "JeanDupont"
Et qu'un de ses contenus bénéficiait du boost +30%
Quand je me désabonne de "JeanDupont"
Alors ses contenus n'ont plus le boost
Et leur score revient au score de base sans multiplicateur
Scénario: Contenu d'un créateur nouvellement suivi
Étant donné que je viens de m'abonner à "NouveauCreateur"
Et qu'il a publié un contenu il y a 2 jours
Quand l'algorithme recalcule les scores
Alors le boost de +30% est immédiatement appliqué à ce contenu
Et il peut apparaître dans ma prochaine file d'attente
Scénario: Impact sur le taux de contenu suivi dans le feed
Étant donné que je suis abonné à 30 créateurs
Et que j'écoute 100 contenus sur une semaine
Quand j'analyse la répartition
Alors environ 40-50% des contenus proviennent de créateurs suivis
Et 50-60% proviennent de créateurs non-suivis (découverte)
Car le boost favorise sans dominer
Scénario: Contenu suivi hors zone géographique
Étant donné que je suis à Paris
Et que je suis abonné à un créateur de Marseille
Et qu'il publie un contenu ancré à Marseille (hors de portée)
Quand l'algorithme évalue ce contenu
Alors le score géo est quasi nul (0.05)
Et même avec boost +30%, le score reste très faible
Et le contenu n'est probablement pas proposé
Scénario: Performance de calcul du boost
Étant donné que je suis abonné à 100 créateurs
Et que l'algorithme évalue 1000 contenus potentiels
Quand le calcul des scores avec boost est effectué
Alors le temps de calcul reste inférieur à 50ms
Car le boost est une simple multiplication (opération O(1))
Et la requête SQL utilise un JOIN sur la table abonnements
Scénario: Boost combiné avec d'autres facteurs
Étant donné un contenu d'un créateur suivi
Et que le contenu bénéficie aussi de:
| facteur | impact |
| Score d'engagement élevé | +20% |
| Contenu récent (<24h) | +10% |
| Boost abonnement | +30% |
Quand le score final est calculé
Alors le boost abonnement s'applique au score final (après tous les autres calculs)
Et les boosts ne s'additionnent pas, le boost abonnement est un multiplicateur final