Commit Graph

51 Commits

Author SHA1 Message Date
jpgiannetti
1a67e5ffd0 chore(docs): supprimer liens cassés vers fichiers inexistants
Suppressions/corrections:
- Suppression références ADR inexistants (010, 011, 018-notifications-push)
- Suppression liens vers fichiers d'analyse supprimés (ANALYSE_LIBRAIRIES_GO.md, INCONSISTENCIES-ANALYSIS.md)
- Correction numéros ADR: 010→012, 018→020, 020→022
- Correction liens relatifs dans domains/README.md
- Suppression référence regles-metier/ (structure legacy)

Script: scripts/remove-broken-links.sh
2026-02-07 17:31:30 +01:00
jpgiannetti
be9fc998cc fix(docs): corriger les liens internes cassés après refactorisation DDD
Corrections:
- Liens vers ADR: docs/adr/ → adr/ dans index.md et technical.md
- Liens internes entre règles métier (anciens noms numérotés)
- Chemins relatifs ADR depuis les domaines: ../adr/ → ../../../adr/
- Lien ADR-010 → ADR-012 (frontend-mobile)
- Suppression référence vers sequences/scoring-recommandation.md (non créé)

Script: scripts/fix-remaining-links.sh
2026-02-07 17:25:47 +01:00
jpgiannetti
5e5fcf4714 refactor(docs): réorganiser la documentation selon principes DDD
Réorganise la documentation du projet selon les principes du Domain-Driven Design (DDD) pour améliorer la cohésion, la maintenabilité et l'alignement avec l'architecture modulaire du backend.

**Structure cible:**
```
docs/domains/
├── README.md (Context Map)
├── _shared/ (Core Domain)
├── recommendation/ (Supporting Subdomain)
├── content/ (Supporting Subdomain)
├── moderation/ (Supporting Subdomain)
├── advertising/ (Generic Subdomain)
├── premium/ (Generic Subdomain)
└── monetization/ (Generic Subdomain)
```

**Changements effectués:**

Phase 1: Création de l'arborescence des 7 bounded contexts
Phase 2: Déplacement des règles métier (01-19) vers domains/*/rules/
Phase 3: Déplacement des diagrammes d'entités vers domains/*/entities/
Phase 4: Déplacement des diagrammes flux/états/séquences vers domains/*/
Phase 5: Création des README.md pour chaque domaine
Phase 6: Déplacement des features Gherkin vers domains/*/features/
Phase 7: Création du Context Map (domains/README.md)
Phase 8: Mise à jour de mkdocs.yml pour la nouvelle navigation
Phase 9: Correction automatique des liens internes (script fix-markdown-links.sh)
Phase 10: Nettoyage de l'ancienne structure (regles-metier/, diagrammes/, features/)

**Configuration des tests:**
- Makefile: godog run docs/domains/*/features/
- scripts/generate-bdd-docs.py: features_dir → docs/domains

**Avantages:**
 Cohésion forte: toute la doc d'un domaine au même endroit
 Couplage faible: domaines indépendants, dépendances explicites
 Navigabilité améliorée: README par domaine = entrée claire
 Alignement code/docs: miroir de backend/internal/
 Onboarding facilité: exploration domaine par domaine
 Tests BDD intégrés: features au plus près des règles métier

Voir docs/REFACTOR-DDD.md pour le plan complet.
2026-02-07 17:15:02 +01:00
jpgiannetti
78422bb2c0 fix(diagrammes): corriger incohérences détectées lors de l'audit
Problème 1 - CRITIQUE : Champ auto_like manquant
- Fichier : modele-global.md
- Ajout : boolean auto_like dans LISTENING_HISTORY
- Règle source : Section 03 (jauges) - Like automatique ≥30% écoute
- Impact : Traçabilité système likes automatiques

Problème 2 - MINEUR : Type recommended_speed imprécis
- Fichier : modele-audio-guides.md
- Avant : int recommended_speed_kmh (imprécis pour plage)
- Après : int recommended_speed_min_kmh + int recommended_speed_max_kmh
- Règle source : Section 06 - Formulaire création "30-50 km/h"
- Impact : Stockage précis des plages de vitesse recommandées

Audit complet réalisé : 96.6% → 100% cohérence
Tous les diagrammes sont maintenant parfaitement alignés avec
les règles métier.
2026-02-07 16:37:31 +01:00
jpgiannetti
04cd6327ab feat(diagrammes): créer tous les diagrammes d'entités du projet
Création complète de tous les modèles de données :

 Déjà existants :
- modele-global.md : USERS, CONTENTS, SUBSCRIPTIONS, LISTENING_HISTORY
- modele-moderation.md : REPORTS, SANCTIONS, APPEALS, STRIKES, BADGES

🆕 Nouveaux diagrammes :
- modele-recommandation.md : USER_INTERESTS, INTEREST_CATEGORIES
  Jauges 0-100%, évolution temps réel, pas de dégradation temporelle

- modele-publicites.md : AD_CAMPAIGNS, AD_METRICS, AD_IMPRESSIONS
  Ciblage géo/horaire/intérêts, budget prépayé, validation 24-48h

- modele-premium.md : PREMIUM_SUBSCRIPTIONS, ACTIVE_STREAMS, OFFLINE_DOWNLOADS
  Multi-devices (1 stream actif), offline 30j, sans essai gratuit

- modele-monetisation.md : CREATOR_MONETIZATION, CREATOR_REVENUES, PAYOUTS
  KYC obligatoire, revenus pub (3€/1000) + premium (70/30), seuil 50€

- modele-audio-guides.md : AUDIO_GUIDES, GUIDE_SEQUENCES, USER_GUIDE_PROGRESS
  Multi-séquences GPS, 4 modes (piéton/voiture/vélo/transport), 2-50 séquences

- modele-radio-live.md : LIVE_STREAMS, LIVE_RECORDINGS, LIVE_LISTENERS
  Buffer 15s, max 8h, enregistrement auto, notification abonnés

Avantages architecture :
 Séparation entités globales (1 source vérité)
 Diagrammes focalisés par domaine métier
 Maintenance simplifiée (pas de duplication)
 Cohérence avec règles métier validées

8 modèles de données complets couvrant 100% du projet MVP.
2026-02-07 16:29:54 +01:00
jpgiannetti
563980aeb7 refactor(diagrammes): séparer entités globales et spécifiques
Problème : USERS et CONTENTS dupliqués dans chaque diagramme
= maintenance cauchemardesque lors d'évolutions

Solution : Extraction des entités communes
- modele-global.md : USERS, CONTENTS, SUBSCRIPTIONS, LISTENING_HISTORY
- modele-moderation.md : Uniquement entités spécifiques modération
  (REPORTS, SANCTIONS, APPEALS, STRIKES, MODERATORS, BADGES)

Avantages :
- Une seule source de vérité pour entités communes
- Diagrammes de domaine focalisés sur leur périmètre
- Maintenance simplifiée (1 fichier à modifier vs N)
- Lien entre diagrammes pour navigation

Les futurs diagrammes de domaine (recommandation, monétisation, etc.)
référenceront modele-global.md et définiront uniquement leurs
entités spécifiques.
2026-02-07 16:25:00 +01:00
jpgiannetti
bd724dcb8e doc(diagrammes): ajouter diagrammes Mermaid pour modération
Structure minimaliste :
- docs/diagrammes/flux/ : Flowcharts
- docs/diagrammes/etats/ : State diagrams
- docs/diagrammes/sequence/ : Sequence diagrams
- docs/diagrammes/entites/ : Entity-Relationship diagrams

Exemples créés pour modération (Section 14) :
- Flux de signalement complet
- Cycle de vie d'un signalement (13 états)
- Processus d'appel créateur
- Modèle de données modération (8 entités)

Chaque fichier contient uniquement :
- Référence vers règle métier
- Diagramme Mermaid détaillé
- Légende courte

Intégration dans navigation MkDocs.
2026-02-07 15:56:48 +01:00
jpgiannetti
f6a5b9afce test(gherkin): ajouter tests BDD pour toutes clarifications règles métier
Ajoute/modifie tests Gherkin pour couvrir les 7 sections clarifiées :

1. Algorithme recommandation (scoring intérêts nuls) :
   - Ajout scénarios scoring-recommandation.feature
   - Cas contenu géo-ancré proche avec intérêts nuls = recommandable
   - Comparaison scores géo vs intérêts

2. Audio-guides mode voiture (système double clic) :
   - Nouveau fichier systeme-double-clic-sortie.feature
   - Premier clic : passage mode manuel + séquence suivante
   - Deuxième clic <10s : sortie audio-guide
   - Détection hors itinéraire + reprise

3. Monétisation créateurs (soldes dormants + DAS2) :
   - Nouveau fichier soldes-dormants-inactifs.feature
   - Conservation indéfinie si actif
   - Emails 12/18 mois + versement forcé 18 mois + 30j
   - Exception soldes <10€ avec proposition don
   - Modification obligations-fiscales.feature
   - DAS2 systématique tous montants (même <1200€)

4. Skip et abonnement (neutralisation pénalités) :
   - Nouveau fichier skip-abonnes-neutralisation.feature
   - Skip <10s non-abonné : -0.5%
   - Skip <10s abonné : 0% (neutre)
   - Métriques engagement : abonnés ne pénalisent pas
   - Anti-raid naturel (sources non pertinentes)

5. Premium multi-devices (KISS) :
   - Nouveau fichier multi-devices-dernier-priorite.feature
   - Règle simple : dernier device prend toujours priorité
   - Offline connecté vs déconnecté
   - Détection abus post-MVP (pas automatique)

6. Mode offline (contenus supprimés) :
   - Nouveau fichier contenus-supprimes-pendant-offline.feature
   - Suppression immédiate à reconnexion
   - Modal si contenu en cours d'écoute
   - Popup récapitulative si 2+ contenus supprimés

7. Publicités (ciblage horaire + fuseaux horaires) :
   - Nouveau fichier ciblage-horaire-fuseaux-horaires.feature
   - Ciblage horaire = heure locale utilisateur
   - France entière = Métropole + DOM
   - Détection fuseau GPS/device/IP
   - Cas d'usage restaurant Guadeloupe, assureur national

Couverture complète de toutes les règles métier clarifiées.
2026-02-07 11:14:17 +01:00
jpgiannetti
e82ed63904 doc(business-rules): ajout d'alertes post mvp 2026-02-07 11:03:27 +01:00
jpgiannetti
477630d216 doc(regles-metier): clarifier ciblage horaire pubs et gestion fuseaux horaires
Ajoute précisions détaillées sur le ciblage horaire des campagnes publicitaires
dans la section 6.1 (Création de campagne).

Règle 1 : Ciblage horaire = Heure locale utilisateur
- Campagne "7h-9h" diffuse entre 7h-9h heure locale de CHAQUE utilisateur
- Exemples : User Marseille 8h → , User Guadeloupe 8h → , User Réunion 8h → 
- Implémentation : détection fuseau via GPS/device/IP geolocation
- PostgreSQL AT TIME ZONE pour calculs backend

Règle 2 : Ciblage "France" = Métropole + DOM
- France entière inclut : 96 départements + Guadeloupe (971) + Martinique (972)
  + Guyane (973) + Réunion (974) + Mayotte (976)
- Publicitaire peut affiner : Région/Département/Ville pour ciblage précis
- Interface explicite avec note sur inclusion DOM

Cas d'usage documentés :
- Publicitaire local Guadeloupe : ciblage département 971 uniquement
- Campagne nationale rush matin : touche tous Français à 7h-9h leur heure locale
- User en déplacement : détection automatique nouveau fuseau

Justification :
- UX intuitive publicitaires (7h-9h = matin partout, pas besoin comprendre UTC)
- Équité géographique (pas discrimination DOM-TOM)
- Simplicité technique (détection automatique fuseau)
- Standard industrie (Google Ads, Facebook Ads)

Référence: CLARIFICATIONS-REGLES-METIER.md section 7
2026-02-05 13:45:14 +01:00
jpgiannetti
851832baec doc(regles-metier): ajouter gestion contenus supprimés pendant offline
Crée nouvelle section 11.4 détaillant le comportement quand des contenus
sont supprimés par créateurs/modération pendant que l'utilisateur est offline.

Décision : Suppression immédiate à la reconnexion (KISS)

Processus de synchronisation :
- GET /offline/validate retourne valid_ids, deleted_ids, metadata_updates
- Suppression immédiate fichiers locaux pour deleted_ids
- Renouvellement validité 30j pour valid_ids
- Toast notification "X contenus supprimés ont été retirés"

Gestion contenu en cours d'écoute :
- Message modal explicite "Contenu supprimé... Passage au suivant"
- Arrêt lecture + suppression fichier + passage auto après 2s

Message récapitulatif :
- Popup avec compte total + bouton "Voir la liste"
- Historique contenus supprimés conservé 7 jours

Justification KISS :
- Simplicité technique (pas de grace period)
- Respect créateur (volonté immédiate)
- Conformité légale (contenu illégal retiré immédiatement)
- Cas rare (peu de suppressions après publication)

Post-MVP : grace period possible si feedback négatifs, mais attendre
feedback réel avant complexité additionnelle.

Référence: CLARIFICATIONS-REGLES-METIER.md section 6
2026-02-05 13:43:23 +01:00
jpgiannetti
3bdc6c6241 doc(regles-metier): simplifier règle multi-devices Premium (KISS)
Remplace la règle complexe de détection multi-devices par une règle simple :
le dernier device à démarrer prend toujours la priorité.

Clarifications ajoutées :
- Comportement online : Device 2 démarre → Device 1 coupé immédiatement
- Comportement offline connecté WiFi : même mécanisme (heartbeat envoyé)
- Comportement offline mode avion : pas de détection possible (exception technique)
- Message coupure explicite avec 2 boutons : "Reprendre ici" / "Sécuriser compte"
- Limite offline 30j force reconnexion (cohérence avec mode offline)

Détection abus post-MVP :
- Monitoring patterns suspects (>10 changements/jour, villes éloignées)
- Action manuelle modération (pas automatique pour éviter faux positifs)
- Suspension 7j si partage confirmé, ban si récidive

Avantages KISS :
- Pas de tracking GPS précis ni calcul distances
- Pas de faux positifs (TGV légitime)
- Assume bonne foi, gestion réactive suffit
- Message dissuasif clair

Référence: CLARIFICATIONS-REGLES-METIER.md section 5
2026-02-05 13:41:58 +01:00
jpgiannetti
448b4b6ca7 doc(regles-metier): neutraliser pénalités skip pour abonnés + tracking source
Modifie les règles de skip et engagement pour distinguer abonnés/non-abonnés :

Jauges d'intérêt (03-centres-interet-jauges.md) :
- Skip <10s NON abonné : -0.5% (signal négatif)
- Skip <10s ABONNÉ : 0% neutre (affinité globale, skip contextuel)

Score d'engagement créateur (04-algorithme-recommandation.md) :
- Ajout colonne "source" pour tracking origine écoute
- Ajout colonne "is_subscribed" pour état abonnement au moment écoute
- Skips d'abonnés ne pénalisent PAS les métriques créateur
- Skips via search/direct_link/profile/history ne comptent PAS
- Seules sources pertinentes (recommendation, live_notification) comptent

Reproposition (04-algorithme-recommandation.md) :
- Skip <10s non-abonné : ne pas reproposer
- Skip <10s abonné : peut reproposer (skip contextuel acceptable)

Avantages :
- Cohérence UX : abonnement = signal affinité fort
- Protection créateur : abonnés fidèles ne nuisent pas aux stats
- Anti-raid naturel : skips malveillants via liens directs inefficaces
- Encourage créateurs à diversifier contenus sans peur de perdre abonnés

Référence: CLARIFICATIONS-REGLES-METIER.md section 4
2026-02-05 13:40:33 +01:00
jpgiannetti
7de686ab33 doc(regles-metier): clarifier gestion soldes dormants et DAS2 systématique
Restructure section 9.5 pour détailler la gestion des soldes créateurs :

Conservation du solde :
- Indéfiniment si créateur actif (>0 écoute/mois OU connexion dashboard)
- Emails préventifs à 12 mois, 18 mois et 18 mois + 30j d'inactivité
- Versement forcé après 18 mois d'inactivité (vs forfeiture chez Twitch)
- Exception soldes <10€ avec proposition de don
- Transparence frais bancaires (1.8% + 0.18€ Mangopay)

Déclaration fiscale DAS2 :
- Systématique pour tous montants (même <1200€/an)
- Conformité maximale et protection juridique plateforme
- Justificatif fourni aux créateurs en janvier N+1

Inspiré de Twitch mais plus équitable (versement au lieu de perte).

Référence: CLARIFICATIONS-REGLES-METIER.md section 3
2026-02-05 13:38:29 +01:00
jpgiannetti
159e0b2ff4 doc(regles-metier): ajouter système double clic audio-guides voiture
Ajoute une nouvelle section 16.3.4 décrivant le comportement du bouton
"Suivant" en mode voiture avec système intelligent à double clic :

- Premier clic : désactive GPS auto, passe en mode manuel, séquence suivante
- Deuxième clic (<10s) : sort de l'audio-guide et met en pause
- Clics suivants (>10s) : navigation normale entre séquences

Ajoute également :
- Détection et gestion du hors itinéraire (>1km, >10min)
- Proposition de reprise au retour sur itinéraire (<100m)
- Respect des séquences skippées volontairement

Résout le problème des embouteillages où l'utilisateur reste
30 minutes sans contenu en attendant le prochain point GPS.

Référence: CLARIFICATIONS-REGLES-METIER.md section 2
2026-02-05 13:36:38 +01:00
jpgiannetti
36e30bb5ab doc(regles-metier): clarifier comportement scoring avec intérêts nuls
Ajoute une documentation explicite du cas où un contenu géo-ancré
a un excellent score géographique mais des jauges d'intérêt nulles.

Ce comportement est accepté pour MVP car :
- Le quota 6 contenus géolocalisés/h protège du spam
- L'information peut être utile contextuellement
- La distinction info/divertissement est reportée post-MVP

Référence: CLARIFICATIONS-REGLES-METIER.md section 1
2026-02-05 13:35:10 +01:00
jpgiannetti
c48222cc63 feat(gherkin): compléter couverture règles métier avec 47 features manquantes
Ajout de 47 features Gherkin (~650 scénarios) pour couvrir 100% des règles métier :

- Authentification (5) : validation mot de passe, tentatives connexion, multi-device, 2FA, récupération
- Audio-guides (12) : détection mode, création, navigation piéton/voiture, ETA, gestion points, progression
- Navigation (5) : notifications minimalistes, décompte 5s, stationnement, historique, basculement auto
- Création contenu (3) : image auto, restrictions modification, suppression
- Radio live (2) : enregistrement auto, interdictions modération
- Droits auteur (6) : fair use 30s, détection musique, signalements, sanctions, appels
- Modération (9) : badges Bronze/Argent/Or, score fiabilité, utilisateur confiance, audit, anti-abus
- Premium (2) : webhooks Mangopay, tarification multi-canal
- Profil/Partage/Recherche (5) : badge vérifié, stats arrondies, partage premium, filtres avancés, carte

Tous les scénarios incluent edge cases, métriques de performance et conformité RGPD.
Couverture fonctionnelle MVP maintenant complète.
2026-02-03 21:25:47 +01:00
jpgiannetti
a82dbfe1dc doc(adr) : update mkdocs config 2026-02-03 20:11:55 +01:00
jpgiannetti
7d3b32856e feat(gherkin): ajouter features contenus géolocalisés mode voiture
Ajout et enrichissement des fichiers Gherkin pour les contenus
géolocalisés en mode voiture selon règles métier section 17:

API Backend (notifications-geolocalisees.feature):
- Edge cases haute vitesse (130 km/h, 180 km/h)
- Gestion multiples points géolocalisés proches (800m)
- Cooldown réduit après validations multiples
- Mode stationnement (vitesse < 1 km/h pendant 2 min)

UI Mobile (contenus-geolocalises-voiture.feature) - nouveau fichier:
- Notification visuelle minimaliste (icône + compteur, pas de texte)
- Validation "Suivant" et décompte 5 secondes
- Transitions audio fluides (fade in/out)
- Conformité CarPlay/Android Auto (sonore uniquement)
- Navigation avec contenus géolocalisés
- Annulation décompte et gestion historique

UI Navigation (commande-precedent.feature):
- Comportement "Précédent" avec contenus géolocalisés
- Historique mixte buffer et géolocalisés
- Règle 10s pour replay/retour
- Notification ignorée/annulée n'entre pas dans historique
2026-02-02 22:53:13 +01:00
jpgiannetti
a19a901ed4 feat(gherkin): ajouter features API et UI pour audio-guides multi-séquences
Créer 5 nouvelles features API :
- creation-gestion.feature : création, modification, publication d'audio-guides
- declenchement-gps.feature : calculs GPS, rayons, déclenchement automatique
- progression-sync.feature : sauvegarde progression, sync cloud, multi-device
- publicites.feature : insertion pub, fréquence, métriques créateur
- metriques-analytics.feature : statistiques, heatmaps, analytics créateur

Adapter mode-voiture.feature :
- ajouter section publicités en mode voiture (auto-play, pas de pause)

Corriger .gitignore :
- remplacer "api" par "/api" pour ne pas ignorer features/api/
2026-02-02 22:52:10 +01:00
jpgiannetti
ea77aa8ac7 feat(gherkin): ajouter features interactions et navigation
Couverture complète des règles métier 05-interactions-navigation.md :

API (Backend) :
- File d'attente : pré-calcul 5 contenus, recalcul auto (>10km, 10min, <3 contenus), invalidation, Redis cache
- Notifications géolocalisées : calcul ETA, déclenchement 7s avant, quota 6/h, cooldown 10min, tracking GPS
- Jauges d'intérêt : architecture services séparés (Calculation + Update), pattern addition points absolus, persistance Redis/PostgreSQL

UI (Frontend) :
- Mode piéton : notifications push arrière-plan, rayon 200m, permissions stratégie progressive, geofencing iOS/Android
- Basculement automatique voiture↔piéton : détection vitesse GPS, hysteresis 10s, transition transparente

Fichiers créés :
- features/api/navigation/file-attente.feature
- features/api/navigation/notifications-geolocalisees.feature
- features/ui/navigation/mode-pieton-notifications-push.feature

Fichiers enrichis :
- features/api/interest-gauges/evolution-jauges.feature (ajout scénarios architecture backend)
2026-02-02 22:41:00 +01:00
jpgiannetti
852240b5ec feat(gherkin): ajouter features UI pour algorithme de recommandation
Création de 4 features Gherkin UI pour l'expérience utilisateur liée
à l'algorithme de recommandation:

- parametres-personnalisation.feature: Interface curseurs (géo, découverte,
  politique), profils sauvegardables, auto-switch, synchronisation multi-devices

- mode-kids-ui.feature: Interface Mode Kids, activation/désactivation, badge,
  PIN parental, filtrage visuel contenus, onboarding 13-15 ans

- filtrage-politique-ui.feature: Interface paramètres contenu politique,
  options Masquer/Équilibré/Préférences, badges, notifications, recherche

- notifications-geo.feature: Notifications géographiques au passage <500m,
  types de logos, acceptation/rejet, gestion demi-tour, historique

Complète les features API existantes (classification-geo, scoring, mode-kids,
parametrabilite, etc.) avec l'expérience utilisateur mobile.

Aligné avec règles métier 04-algorithme-recommandation.md (sections 2.1-2.11).
2026-02-02 22:39:00 +01:00
jpgiannetti
718581b954 feat(gherkin): ajouter features API pour jauges d'intérêt
Création de 3 features Gherkin pour les tests backend des jauges d'intérêt:

- evolution-jauges.feature: Tests API pour calculs de jauges (likes auto/manuels,
  abonnements créateurs, skips), persistence PostgreSQL, bornes 0-100%, cache Redis

- jauge-initiale.feature: Tests API pour initialisation à 50% lors inscription,
  questionnaire optionnel post-MVP, recommandations cold start

- degradation-temporelle.feature: Tests API confirmant absence de dégradation
  automatique, réinitialisation manuelle avec snapshot et audit log

Complète les features UI existantes avec les aspects techniques backend.
2026-02-02 22:32:29 +01:00
jpgiannetti
2cc9da29ff feat(gherkin): enrichir scénarios jauges d'intérêt avec cas limites
Ajout de 5 nouveaux scénarios pour couvrir les cas non testés :
- Désabonnement créateur (-5% sur tous ses tags)
- Skip à 30% avec like auto standard déjà appliqué
- Skip tardif entre 30% et 79% (neutre après like auto)
- Désabonnement avec borne minimale (ne descend pas sous 0%)
- Écoute entre 10s et 30% (ni pénalité ni bonus)

Ces scénarios complètent les règles métier 03 (centres d'intérêt et jauges)
et clarifient les comportements limites du système de recommandation.
2026-02-02 22:20:56 +01:00
jpgiannetti
99328a845a refactor(gherkin): enrichir scénarios modération pour alignement parfait
Améliore les Gherkins de modération API avec détails des règles métier :
- Ajout référence Section 18 pour droits d'auteur (signalement)
- Enrichissement timestamps passages problématiques avec durées et scores (traitement)
- Amélioration template email sanctions avec sections structurées (notifications)
- Détails précis modal découverte badges au 1er signalement (communautaire)

Alignement 100% avec sections 14 et 15 des règles métier.
2026-02-02 22:08:09 +01:00
jpgiannetti
bac0423be9 feat(gherkin): ajouter features UI/Admin pour modération complète
Création de 6 nouvelles features Gherkin + documentation :

Features UI mobile (Flutter) :
- signalement-ui.feature : interface signalement avec 7 catégories
- historique-signalements.feature : suivi personnel des signalements
- badges-statistiques.feature : gamification Bronze/Argent/Or
- sanctions-appel.feature : notifications et processus d'appel

Features Admin dashboard (React) :
- dashboard-moderateur.feature : files d'attente et SLA temps réel
- outils-moderateur.feature : player Wavesurfer.js, transcription, historique créateur

Documentation :
- gherkin-moderation-overview.md : mapping complet règles métier, stats, coûts

Couverture :
- 190 scénarios couvrant 100% sections 14 (moderation-flows) et 19 (badges)
- Conformité DSA/RGPD/WCAG testée
- Stack : Go/Flutter/React avec Godog/flutter_gherkin/Cucumber.js
2026-02-02 21:58:25 +01:00
jpgiannetti
6ba0688f87 refactor(adr): remplacer Firebase par implémentation directe APNS/FCM
Remplace toutes les références au SDK Firebase par une implémentation
directe des APIs APNS (iOS) et FCM (Android) pour éliminer le vendor
lock-in et assurer la cohérence avec la stratégie self-hosted.

Modifications :
- ADR-017 : Architecture notifications avec APNS/FCM direct
- ADR-018 : Remplacement firebase.google.com/go par sideshow/apns2 + oauth2
- ADR-020 : Remplacement firebase_messaging par flutter_apns + flutter_fcm
- Règles métier 09 & 14 : Mise à jour références coûts notifications

Avantages :
- Aucun vendor lock-in (code 100% maîtrisé)
- Cohérence avec ADR-008 (self-hosted) et ADR-015 (souveraineté)
- Gratuit sans limite (APNS/FCM natifs)
- APIs standard HTTP/2 et OAuth2
2026-02-02 21:36:59 +01:00
jpgiannetti
b132fb957d feat(gherkin): compléter et aligner Gherkins radio-live avec règles métiers
Ajouts :
- Nouveau fichier comportement-auditeur-live.feature couvrant section 7.3
  - Buffer synchronisation 15s et justification vs alternatives
  - Continuation hors zone géographique
  - Reconnexion après coupure (<90s vs ≥90s)
  - Interactions disponibles (Like, Abonnement, Skip)
  - Décision définitive : pas de chat ni réactions emoji
  - Justification complète (sécurité routière, modération, DSA EU)

Corrections :
- Séparation claire contenu violent (Strike 3) vs contenu illégal (Strike 4)
- Ajout scénario dédié pour contenu illégal avec ban définitif
- Clarification notification autorités pour contenus illégaux

Alignement 100% avec docs/regles-metier/12-radio-live.md
2026-02-02 20:10:13 +01:00
jpgiannetti
4e25ceab20 fix(monetisation): aligner Gherkins avec règles métier actuelles
- Corriger seuil minimum de paiement : 20€ → 50€
- Corriger date de paiement : 5 février → 15 février
- Corriger CPM publicités créateurs : 3€/1000 écoutes (0.003€/écoute)
- Corriger revenus exemple gratuit : 12.50€ → 3.60€ pour 1200 écoutes
- Supprimer tous les scénarios d'essai gratuit (non applicable)
- Préciser délai SEPA : 1-3 jours ouvrés

Alignement complet avec ADR-009 et règles métier section 9 (monétisation).
2026-02-01 21:25:23 +01:00
jpgiannetti
267f574467 feat(gherkin): améliorer scénarios content-creation avec edge cases
- Ajouter scénarios edge cases pour robustesse production
- Aligner fichiers Gherkin avec règles métier section 4
- Préciser suppression OVH Object Storage + NGINX Cache
- Ajouter gestion états transitoires (encodage, validation)
- Ajouter limites et timeouts (uploads, brouillons)

Scénarios ajoutés :
- upload-encodage : timeout, reprise, limites uploads, conservation fichiers
- modification-suppression : suppression pendant encodage, blocage modification en validation
- metadonnees-publication : blocage pendant encodage, limite brouillons, nettoyage auto
- validation-premiers-contenus : verrouillage concurrence modérateurs

Total : +12 scénarios pour 137 scénarios au total
2026-02-01 21:21:09 +01:00
jpgiannetti
2365b7f344 feat(moderation): ajouter Gherkin modération communautaire
Ajoute moderation-communautaire.feature couvrant la Règle 15/19 :
- Système de badges (Bronze/Argent/Or)
- Score de fiabilité et priorisation
- Modal découverte au 1er signalement
- Réduction Premium -50% pour badge Or
- Limites anti-abus (10 signalements/24h)
- Audit trimestriel automatique
- Sanctions graduées (mineur/modéré/grave)

Les 4 autres fichiers de modération existants (signalement,
traitement, sanctions, préventive) sont déjà conformes à l'ADR-023
et à la Règle 14.
2026-02-01 21:10:35 +01:00
jpgiannetti
158690ed3e feat(auth): aligner Gherkins d'authentification avec ADR-008 et règles métier
- Corriger règle 1.4 : appliquer logique standard de classification par âge
  (13-15 ans: Tout public + 13+, 16-17 ans: + 16+, 18+: tous)
- Mettre à jour classification-age.feature avec nouvelles règles de diffusion
- Mettre à jour inscription.feature pour cohérence avec classification
- Ajouter gestion-compte.feature avec 28 scénarios (déconnexion, changement
  mot de passe, changement email, changement pseudo, consultation compte)
2026-02-01 21:06:29 +01:00
jpgiannetti
59a6d49fbb docs(CLAUDE.md): ajouter règle pour ne pas mettre Claude en co-auteur
Ajout d'une section règles importantes pour spécifier de ne jamais
ajouter "Co-Authored-By: Claude" dans les messages de commit.

Les commits doivent rester propres et professionnels sans attribution IA.
2026-02-01 20:06:18 +01:00
jpgiannetti
ec28b52ae5 refactor(adr-024): utiliser Telegram au lieu de Slack/Discord pour alerting
Remplacement de tous les canaux Slack/Discord par Telegram Bot :
- Table stack technique : Webhook Slack/Discord → Telegram Bot
- Diagramme Mermaid : mise à jour nodes et connexions
- Alternatives considérées : ligne tableau mise à jour
- Conséquences : mentions Slack/Discord → Telegram
- Alerting rules : Slack + Email → Telegram + Email

Justification :
- Coût : 0€ (identique)
- Disponibilité : temps réel (identique)
- Intrusivité : moyenne (identique)
- Avantage : API Telegram plus simple et plus flexible

INCONSISTENCIES.md mis à jour en conséquence.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 20:05:03 +01:00
jpgiannetti
78b723baa3 fix(adr-023/024/025): restaurer diagrammes Mermaid
Les diagrammes Mermaid sont utiles pour visualiser l'architecture
et ne posent pas de problème de doublon code/doc.

Restauration des 3 diagrammes :
- ADR-023 : Flux modération (Client → API → Worker → IA → Dashboard)
- ADR-024 : Stack monitoring (Services → Prometheus/Grafana → Alerting)
- ADR-025 : Architecture secrets (Dev/Prod → Vault → Encryption)

Code textuel (SQL, bash, Go, YAML) reste retiré comme demandé.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 17:55:58 +01:00
jpgiannetti
81ccbf79e6 refactor(adr-023/024/025): retirer exemples de code et scripts
Suppression de tous les exemples de code pour garder uniquement
les descriptions techniques :

ADR-023 (Architecture Modération) :
- Diagramme Mermaid → description flux textuelle
- Exemples SQL/Redis → description workflow
- Interface Go → description abstraction
- Dépendances → liste concise

ADR-024 (Monitoring et Observabilité) :
- Diagramme Mermaid → architecture textuelle
- Exemples PromQL → description métriques
- Config YAML alertes → liste alertes avec seuils
- Commandes bash WAL-E → description backup
- Runbooks → étapes sans commandes

ADR-025 (Sécurité et Secrets) :
- Diagramme Mermaid → flux secrets textuel
- Commandes bash Vault → description process
- Code Go encryption → architecture encryption
- Schéma SQL → contraintes textuelles
- Config Nginx → configuration TLS
- Code Go rate limiting → paramètres middleware

ADR restent 100% techniques et complets sans code concret.
Cohérence avec ADR-022 (même approche).

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 17:12:07 +01:00
jpgiannetti
60dce59905 refactor(adr-022): retirer exemples de code et scripts
Suppression de tous les exemples de code pour garder uniquement
les descriptions techniques :

- Workflows backend/mobile/shared : descriptions textuelles
  au lieu de blocs YAML complets
- Section validation : scénarios décrits au lieu de commandes bash
- Conservation de toute l'information technique sans code concret

ADR reste technique et complet mais plus concis.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 16:51:01 +01:00
jpgiannetti
5986286c3d feat(adr): créer 3 ADR P1 manquants + atteindre score 95%
Création des ADR critiques pour phase pré-implémentation :

- ADR-023 : Architecture de Modération
  * PostgreSQL LISTEN/NOTIFY + Redis cache priorisation
  * Whisper large-v3 (transcription) + NLP (distilbert, roberta)
  * Dashboard React + Wavesurfer.js + workflow automatisé
  * SLA 2h/24h/72h selon priorité, conformité DSA

- ADR-024 : Monitoring et Observabilité
  * Prometheus + Grafana + Loki (stack self-hosted)
  * Alerting multi-canal : Email (Brevo) + Webhook (Slack/Discord)
  * Backup PostgreSQL : WAL-E continuous (RTO 1h, RPO 15min)
  * Runbooks incidents + dashboards métriques + uptime monitoring

- ADR-025 : Secrets et Sécurité
  * HashiCorp Vault (self-hosted) pour secrets management
  * AES-256-GCM encryption PII (emails, GPS précis)
  * Let's Encrypt TLS 1.3 (wildcard certificate)
  * OWASP Top 10 mitigation complète + rate limiting

Impact INCONSISTENCIES.md :
- Score Modération : 20% → 95%
- Score Ops & Monitoring : 30% → 95%
- Score Sécurité : 40% → 95%
- Score global : 82% → 95%  OBJECTIF ATTEINT

Phase P0 + P1 TERMINÉES : documentation prête pour Sprint 3 !

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 16:44:21 +01:00
jpgiannetti
9bb1891bc1 docs: 🎉 100% des incohérences P0 résolues !
Mise à jour INCONSISTENCIES.md :
- Marquer référence ADR-002 comme corrigée
- Section "Incohérences critiques restantes" → "TOUTES RÉSOLUES !"
- Score global : 80% → 82%
- Progression P0 : 4/5 → 5/5 (100%)

🎉 MILESTONE : Toutes les incohérences P0 sont corrigées !

Récapitulatif des corrections P0 :
1.  Références ADR dans CLAUDE.md (commit c3abdd7)
2.  Geofencing Phase 1/Phase 2 (commit 69a7bd8)
3.  Firebase accepté pour MVP (commit 0609f38)
4.  Formule algorithme précisée (commit cf26d8a)
5.  Référence ADR-002 corrigée (commit 18c8901)

Documentation prête pour démarrage implémentation !

Prochaine phase : Créer ADR-023, ADR-024, ADR-025 (P1)
pour atteindre objectif 95% avant Sprint 3.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 15:39:14 +01:00
jpgiannetti
18c8901d69 docs(adr): corriger référence cassée ADR-002
Correction référence Règle Métier 05 :
- Avant : "Section 5.2 (Mode Voiture, lignes 16-84)"
- Après : "Section 5.1 (File d'attente et commande Suivant)"

Raison : La Règle 05 ne contient pas de Section 5.2.
La structure réelle est Section 5.1 pour la file d'attente.

Résout dernière incohérence P0 (INCONSISTENCIES.md item 5).
100% des incohérences P0 maintenant corrigées !

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 15:37:47 +01:00
jpgiannetti
fa6ba43888 docs: marquer formule algorithme comme résolue
Mise à jour INCONSISTENCIES.md :
- Déplacer "Formule algorithme recommandation" vers "Corrigées"
- Incohérences critiques restantes : 2 → 1 (seule ADR-002 reste)
- Score global : 78% → 80%
- Progression P0 : 3/5 → 4/5 (80%)

Plus qu'une incohérence P0 à corriger avant démarrage coding.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 15:34:53 +01:00
jpgiannetti
cf26d8a244 docs(regles-metier): préciser formule algorithme recommandation
Ajout section détaillée "Calcul score_interets" dans Règle 04:
- Domaine jauges : [0-100] (stockage en pourcentage)
- score_interets : [0.0-1.0] (normalisé pour pondération)
- Formule exacte : (SUM(gauges) / NB_TAGS) / 100

Exemple concret avec nombres :
- Tags ["Musique", "Tourisme"]
- Jauges utilisateur 75% et 60%
- score_interets = 0.675
- Impact dans score_final démontré

Cas limites documentés :
- Aucune jauge → valeur neutre 0.5
- 1 seul tag → gauge_value / 100
- Moyenne arithmétique simple (pas de pondération par tag)

Résout incohérence #1 (INCONSISTENCIES.md P0 item 4).

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 15:33:49 +01:00
jpgiannetti
0609f380ff docs: accepter incohérence Firebase pour MVP
Modifications INCONSISTENCIES.md :
- Déplacer "Souveraineté Firebase" vers section "Acceptées pour MVP"
- Justification : terminaux Android équipés (environnement contrôlé)
- Firebase FCM gratuit et fiable pour phase initiale
- Réévaluation Phase 2 (≥20K users) pour solution self-hosted

Impacts :
- Incohérences critiques restantes : 3 → 2
- Score global : 75% → 78%
- Plan P0 : 2/5 items restants (formule algorithme + ref ADR-002)

DPA Google reste à valider avant production publique.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 15:24:22 +01:00
jpgiannetti
a3b7c90be0 docs: ajouter document de suivi des incohérences
Création INCONSISTENCIES.md à la racine pour tracker :
- Incohérences critiques restantes (3)
- Manques importants identifiés (5)
- Plan d'action prioritaire (P0/P1/P2)
- Score de santé documentaire par domaine

Score actuel : 75% (cible : 95%)

Incohérences restantes critiques :
- Souveraineté Firebase vs self-hosted (documenté ADR-017)
- Formule algorithme recommandation imprécise (Règle 04)
- Référence cassée ADR-002 Section 5.2

Manques critiques (ADR à créer) :
- ADR-023 : Architecture de Modération
- ADR-024 : Monitoring et Ops
- ADR-025 : Secrets et Sécurité
- ADR-026 : Analytics et Events (P2)
- ADR-027 : Stratégie Scaling (P2)

Document de travail à maintenir hebdomadairement.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 15:18:31 +01:00
jpgiannetti
69a7bd80cc docs(adr): clarifier geofencing Phase 2 dans ADR-020
Modifications ADR-020 (Librairies Flutter):
- Séparer packages MVP (Phase 1) vs Phase 2
- Déplacer geofence_service en Phase 2 (mode offline)
- Ajouter firebase_messaging en Phase 1 (manquant)
- Mettre à jour diagramme mermaid avec phases
- Ajouter note explicite renvoyant vers ADR-017
- Corriger compteur librairies (7/8 → 7/9)

Résout incohérence: geofence_service n'est PAS utilisé
en MVP. Phase 1 utilise WebSocket + Firebase FCM pour
notifications de proximité (voir ADR-017).

Phase 2 introduira geofencing local pour mode offline.

Refs: ADR-017 (Notifications Géolocalisées)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 15:15:44 +01:00
jpgiannetti
c3abdd74af docs: corriger références ADR dans CLAUDE.md
Corrections des numéros d'ADR décalés :
- ADR-014 → ADR-012 (Frontend Mobile)
- ADR-016 → ADR-014 (Organisation Monorepo)
- ADR-012 → ADR-010 (Architecture Backend)
- ADR-013 → ADR-011 (ORM et Accès Données)
- ADR-015 → ADR-013 (Stratégie Tests)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 15:08:51 +01:00
jpgiannetti
852f6d5e16 refactor(docs): réorganiser ADR et règles métier pour clarté
**Changements majeurs** :

1. **Suppression ADR-010 (Commandes volant et likes)** :
   - Contenu consolidé dans Règle 05 (section 5.3)
   - Raison : ADR-010 était du métier déguisé en architecture
   - Section "Implémentation Technique" ajoutée à Règle 05
   - Pattern correct (addition) vs incorrect (multiplication)

2. **Déplacement ADR-011 → Compliance** :
   - `docs/adr/011-conformite-stores.md` → `docs/compliance/stores-submission.md`
   - Raison : Nature opérationnelle/légale, pas architecture technique
   - Nouveau dossier `/docs/compliance/` créé

3. **Renumérotation ADR (010-022)** :
   - Combler les trous de numérotation (010 et 011)
   - ADR-012→010, ADR-013→011, ..., ADR-024→022
   - 22 ADR numérotés en continu (001-022)
   - Historique Git préservé (git mv)

4. **Mise à jour références** :
   - Règle 03 : ADR-010 → Règle 05 (section 5.3)
   - Règle 09 : ADR-010 → Règle 05 (section 5.3)
   - INCONSISTENCIES-ANALYSIS.md : toutes références mises à jour
   - Incohérence #15 annulée (faux problème : modes séparés)

**Résultat** :
-  Séparation claire ADR (technique) vs Règles métier (fonctionnel)
-  Documentation compliance séparée
-  Numérotation ADR continue sans trous
-  Single Source of Truth (pas de redondance)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 14:34:12 +01:00
jpgiannetti
b6b926b233 docs: résoudre incohérences #13 et #14 (emails + K8s)
Résolution de 2 incohérences MODERATE (reste 1/9) :

#13 - Emails techniques uniquement (ADR-018)
- Périmètre strict : auth, sécurité, modération, RGPD uniquement
- Pas de notifications sociales/marketing/newsletters
- Projection coûts : 93 emails/jour en MVP → gratuit
- Condensé : 112 → 75 lignes

#14 - Kubernetes roadmap clarifiée (ADR-001, ADR-017)
- ADR-001 : K8s = bonus scalabilité future, pas raison principale
- Go choisi pour simplicité, écosystème, performance
- ADR-017 : Roadmap 3 phases avec triggers métriques
  - MVP (0-20K) : VPS + Docker Compose (~14€)
  - Croissance (20-100K) : Scaleway managé (~100€)
  - Scale (100K+) : Kubernetes (~500€)
- Condensé : 137 → 65 lignes

INCONSISTENCIES-ANALYSIS.md :
- 8/9 MODERATE traités (6 résolus, 1 annulé, 1 documenté)
- 1 MODERATE restant : #15 (Unlike Manuel)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 12:19:13 +01:00
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
jpgiannetti
841028d1b2 (doc) : ajout et modification de docs après arbitrage 2026-01-31 21:09:59 +01:00