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,100 @@
# language: fr
Fonctionnalité: Classification de géo-pertinence des contenus
En tant que plateforme de contenu géolocalisé
Je veux classifier les contenus selon leur pertinence géographique
Afin d'adapter l'algorithme de recommandation
Contexte:
Étant donné que l'API RoadWave est disponible
Scénario: Créateur choisit le type géo-ancré pour un audio-guide
Étant donné que je suis un créateur connecté
Quand je publie un audio-guide de la Tour Eiffel
Et que je choisis la classification "Géo-ancré"
Alors le contenu est enregistré avec:
| champ | valeur |
| type_geo | geo_ancre |
| ponderation_geo | 0.7 |
| ponderation_interets | 0.1 |
Scénario: Créateur choisit le type géo-contextuel pour actualité régionale
Étant donné que je suis un créateur connecté
Quand je publie une actualité régionale en Bretagne
Et que je choisis la classification "Géo-contextuel"
Alors le contenu est enregistré avec:
| champ | valeur |
| type_geo | geo_contextuel |
| ponderation_geo | 0.5 |
| ponderation_interets | 0.3 |
Scénario: Créateur choisit le type géo-neutre pour un podcast philosophie
Étant donné que je suis un créateur connecté
Quand je publie un podcast de philosophie
Et que je choisis la classification "Géo-neutre"
Alors le contenu est enregistré avec:
| champ | valeur |
| type_geo | geo_neutre |
| ponderation_geo | 0.2 |
| ponderation_interets | 0.6 |
Scénario: Publication impossible sans classification géographique
Étant donné que je crée un contenu audio
Quand j'essaie de publier sans sélectionner de type géographique
Alors la publication échoue
Et je vois le message "Vous devez sélectionner un type de géo-pertinence"
Scénario: Modérateur reclassifie un contenu mal catégorisé
Étant donné qu'un contenu podcast générique est classifié "Géo-ancré"
Et que le modérateur examine le contenu
Quand le modérateur le reclassifie en "Géo-neutre"
Alors la nouvelle classification est appliquée immédiatement
Et l'algorithme utilise la pondération géo = 0.2
Et le créateur reçoit une notification de reclassification
Scénario: Créateur modifie la classification après publication
Étant donné que j'ai publié un contenu classifié "Géo-contextuel"
Et que je réalise qu'il devrait être "Géo-neutre"
Quand je modifie la classification en "Géo-neutre"
Alors la modification est enregistrée
Et l'algorithme utilise la nouvelle pondération
Et je vois le message "Classification modifiée avec succès"
Scénario: Statistiques de classification dans le profil créateur
Étant donné que je suis un créateur
Et que j'ai publié 30 contenus:
| type | nombre |
| Géo-ancré | 10 |
| Géo-contextuel | 15 |
| Géo-neutre | 5 |
Quand je consulte mes statistiques
Alors je vois la répartition de mes classifications
Et des suggestions pour optimiser la portée
Scénario: Contenu géo-ancré fortement pondéré par la proximité
Étant donné qu'un audio-guide "Géo-ancré" existe à la Tour Eiffel
Et qu'un utilisateur est à 100m de la Tour Eiffel
Quand l'algorithme calcule le score
Alors la pondération géo est de 0.7
Et le score géo est proche de 1 (très proche)
Et le contenu a un score final élevé
Scénario: Contenu géo-neutre moins sensible à la distance
Étant donné qu'un podcast philosophie "Géo-neutre" existe à Paris
Et qu'un utilisateur est à Marseille (750 km)
Quand l'algorithme calcule le score
Alors la pondération géo est de 0.2
Et le score géo est bas (distance élevée)
Mais le score intérêts (0.6) peut compenser
Et le contenu peut quand même être recommandé si intérêts match
Scénario: Comparaison scores entre types géo pour même distance
Étant donné 3 contenus au même endroit (Paris):
| type | ponderation_geo |
| Géo-ancré | 0.7 |
| Géo-contextuel | 0.5 |
| Géo-neutre | 0.2 |
Et qu'un utilisateur est à 50 km de Paris
Quand l'algorithme calcule les scores
Alors le contenu "Géo-ancré" a le score géo le plus élevé
Et le contenu "Géo-neutre" a le score géo le plus faible
Mais peut avoir un score final plus élevé si forte correspondance intérêts