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:
100
features/api/recommendation/classification-geo.feature
Normal file
100
features/api/recommendation/classification-geo.feature
Normal 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
|
||||
Reference in New Issue
Block a user