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>
This commit is contained in:
@@ -16,8 +16,8 @@ Cette analyse a identifié **15 incohérences** entre les décisions d'architect
|
||||
|----------|--------|---------|--------|-----------------|
|
||||
| 🔴 **CRITICAL** | 2 | 14% | ✅ **RÉSOLU** | ~~avant implémentation~~ |
|
||||
| 🟠 **HIGH** | 2 | 14% | ✅ **RÉSOLU** (2 résolus, 1 annulé) | ~~Résolution Sprint 1-2~~ |
|
||||
| 🟡 **MODERATE** | 9 | 64% | ⏳ **1 restant** (6 résolus, 1 annulé, 1 documenté) | Résolution Sprint 3-5 |
|
||||
| 🟢 **LOW** | 1 | 7% | ⏳ En cours | À clarifier lors du développement |
|
||||
| 🟡 **MODERATE** | 9 | 64% | ✅ **RÉSOLU** (6 résolus, 2 annulés, 1 documenté) | ~~Résolution Sprint 3-5~~ |
|
||||
| 🟢 **LOW** | 1 | 7% | ✅ **ANNULÉ** (Faux problème) | ~~À clarifier lors du développement~~ |
|
||||
|
||||
### Impact par Domaine
|
||||
|
||||
@@ -36,7 +36,7 @@ Cette analyse a identifié **15 incohérences** entre les décisions d'architect
|
||||
|
||||
### #1 : HLS ne supporte pas les Notifications Push en Arrière-plan
|
||||
|
||||
**Statut** : ✅ **RÉSOLU** (ADR-019 créé)
|
||||
**Statut** : ✅ **RÉSOLU** (ADR-017 créé)
|
||||
|
||||
| Élément | Détail |
|
||||
|---------|--------|
|
||||
@@ -54,7 +54,7 @@ Réel: Rien (HLS ne peut pas notifier)
|
||||
```
|
||||
|
||||
**Solution implémentée** :
|
||||
- ✅ **ADR-019** : Architecture hybride WebSocket + Firebase Cloud Messaging
|
||||
- ✅ **ADR-017** : Architecture hybride WebSocket + Firebase Cloud Messaging
|
||||
- Phase 1 (MVP) : Push serveur via FCM/APNS
|
||||
- Phase 2 : Geofencing natif iOS/Android pour mode offline
|
||||
|
||||
@@ -134,11 +134,11 @@ Résultat: Audio démarre 200m APRÈS le point ❌
|
||||
|
||||
### #4 : ORM sqlc vs Types PostGIS
|
||||
|
||||
**Statut** : ✅ **RÉSOLU** (ADR-013 mis à jour)
|
||||
**Statut** : ✅ **RÉSOLU** (ADR-011 mis à jour)
|
||||
|
||||
| Élément | Détail |
|
||||
|---------|--------|
|
||||
| **ADR concerné** | ADR-013 (section "Gestion des Types PostGIS") |
|
||||
| **ADR concerné** | ADR-011 (section "Gestion des Types PostGIS") |
|
||||
| **Règle métier** | N/A (problème technique pur) |
|
||||
| **Conflit** | sqlc génère types Go depuis SQL, mais PostGIS geography/geometry ne mappent pas proprement |
|
||||
| **Impact** | Risque de type `interface{}` ou `[]byte` pour géographie → perte de type safety revendiquée |
|
||||
@@ -187,7 +187,7 @@ WHERE ST_DWithin(location, $1::geography, $2);
|
||||
- [ ] Tests d'intégration avec Testcontainers (PostGIS réel)
|
||||
- [ ] Documenter patterns dans `backend/README.md`
|
||||
|
||||
**Référence** : [ADR-013 - Gestion des Types PostGIS](docs/adr/013-orm-acces-donnees.md#gestion-des-types-postgis)
|
||||
**Référence** : [ADR-011 - Gestion des Types PostGIS](docs/adr/011-orm-acces-donnees.md#gestion-des-types-postgis)
|
||||
|
||||
---
|
||||
|
||||
@@ -214,7 +214,7 @@ WHERE ST_DWithin(location, $1::geography, $2);
|
||||
|
||||
| Élément | Détail |
|
||||
|---------|--------|
|
||||
| **ADR concerné** | ADR-014 (Frontend Mobile, mis à jour) |
|
||||
| **ADR concerné** | ADR-010 (Frontend Mobile, mis à jour) |
|
||||
| **Règle métier** | Règle 05 (section 5.1.2, mis à jour), Règle 02 (RGPD) |
|
||||
| **Conflit** | ~~Package `geofence_service` choisi, mais pas de doc sur compatibilité permissions "optionnelles"~~ |
|
||||
| **Impact** | ~~Risque de rejet App Store/Play Store si permissions obligatoires mal gérées~~ |
|
||||
@@ -252,7 +252,7 @@ class GeofencingService {
|
||||
```
|
||||
|
||||
**Actions complétées** :
|
||||
- [x] ✅ ADR-014 mis à jour avec section complète "Stratégie de Permissions"
|
||||
- [x] ✅ ADR-010 mis à jour avec section complète "Stratégie de Permissions"
|
||||
- [x] ✅ Règle 05 (section 5.1.2) mise à jour avec clarifications permissions progressive
|
||||
- [x] ✅ Documentation détaillée créée : `/docs/mobile/permissions-strategy.md`
|
||||
- [x] ✅ Plan de validation TestFlight créé : `/docs/mobile/testflight-validation-plan.md`
|
||||
@@ -266,7 +266,7 @@ class GeofencingService {
|
||||
- ✅ Plan de validation beta (TestFlight + Play Console Internal Testing)
|
||||
|
||||
**Références** :
|
||||
- [ADR-014 - Stratégie de Permissions](../adr/014-frontend-mobile.md#stratégie-de-permissions-iosandroid)
|
||||
- [ADR-010 - Stratégie de Permissions](../adr/010-frontend-mobile.md#stratégie-de-permissions-iosandroid)
|
||||
- [Documentation Permissions](../mobile/permissions-strategy.md)
|
||||
- [Plan Validation TestFlight](../mobile/testflight-validation-plan.md)
|
||||
- [Règle 05 - Mode Piéton](../regles-metier/05-interactions-navigation.md#512-mode-piéton-audio-guides)
|
||||
@@ -281,7 +281,7 @@ class GeofencingService {
|
||||
|
||||
| Élément | Détail |
|
||||
|---------|--------|
|
||||
| **ADR concerné** | ADR-010 (Commandes Volant, mis à jour) |
|
||||
| **ADR concerné** | Règle 05 (section 5.3) (Commandes Volant, mis à jour) |
|
||||
| **Règle métier** | Règle 03 (Centres d'intérêt, mis à jour) |
|
||||
| **Conflit** | ~~ADR dit "+2 **points**", Règle dit "+2**%**" pour même action~~ |
|
||||
| **Impact** | ~~Ambiguïté sur calcul : +2 points absolus ou +2% relatifs ?~~ |
|
||||
@@ -306,34 +306,30 @@ NOT 45 × 1.02 = 45.9% ❌
|
||||
- ✅ **Prédictibilité UX** : "+2%" signifie vraiment +2 points de pourcentage
|
||||
|
||||
**Actions complétées** :
|
||||
- [x] ✅ ADR-010 mis à jour : "points" → "+2%" avec note explicite "points de pourcentage absolus"
|
||||
- [x] ✅ ADR-010 : Section "Implémentation Technique" ajoutée avec code Go complet
|
||||
- [x] ✅ Règle 05 (section 5.3) mis à jour : "points" → "+2%" avec note explicite "points de pourcentage absolus"
|
||||
- [x] ✅ Règle 05 (section 5.3) : Section "Implémentation Technique" ajoutée (architecture 2 services)
|
||||
- [x] ✅ Règle 03 : Note ajoutée clarifiant calcul absolu vs relatif
|
||||
- [x] ✅ Règle 03 : Exemples de calcul vérifiés et cohérents
|
||||
- [x] ✅ Référence croisée ADR-010 ↔ Règle 03
|
||||
- [x] ✅ Référence croisée Règle 05 (section 5.3) ↔ Règle 03
|
||||
- [x] ✅ ADR-010 supprimé : Contenu consolidé dans Règle 05 (métier) pour éviter redondance
|
||||
|
||||
**Changements apportés** :
|
||||
|
||||
**ADR-010** :
|
||||
**Règle 05 (section 5.3)** :
|
||||
- Règles reformulées : "+2 **points**" → "**+2%**" (points de pourcentage absolus)
|
||||
- Note explicite ajoutée : "Par exemple, si jauge = 45%, +2% → 47%"
|
||||
- Nouvelle section "Implémentation Technique" avec formule Go :
|
||||
```go
|
||||
func CalculateGaugeIncrease(listenPercentage float64) float64 {
|
||||
if listenPercentage >= 80.0 { return 2.0 } // +2 points de pourcentage
|
||||
// ...
|
||||
}
|
||||
```
|
||||
- Nouvelle section "Implémentation Technique" avec architecture 2 services (Calculation + Update)
|
||||
- Pattern de calcul correct (addition) vs incorrect (multiplication)
|
||||
- Exemples de calcul concrets
|
||||
|
||||
**Règle 03** :
|
||||
- Tableau mis à jour : valeurs en gras (**+2%**, **+1%**, etc.)
|
||||
- Note importante ajoutée : "points de pourcentage absolus, PAS relatifs"
|
||||
- Exemple anti-pattern : "NOT 45 × 1.02 = 45.9% ❌"
|
||||
- Référence croisée vers ADR-010 pour implémentation
|
||||
- Référence croisée vers Règle 05 (section 5.3) pour implémentation
|
||||
|
||||
**Références** :
|
||||
- [ADR-010 - Implémentation Technique](../adr/010-commandes-volant.md#implémentation-technique)
|
||||
- [Règle 05 - Implémentation Technique](../regles-metier/05-interactions-navigation.md#implémentation-technique-backend)
|
||||
- [Règle 03 - Évolution des Jauges](../regles-metier/03-centres-interet-jauges.md#31-évolution-des-jauges)
|
||||
|
||||
---
|
||||
@@ -392,11 +388,11 @@ User → Formulaire email/password (app mobile)
|
||||
|
||||
### #9 : GeoIP Database (MaxMind)
|
||||
|
||||
**Statut** : ✅ **RÉSOLU** (ADR-021 créé)
|
||||
**Statut** : ✅ **RÉSOLU** (ADR-019 créé)
|
||||
|
||||
| Élément | Détail |
|
||||
|---------|--------|
|
||||
| **ADR concerné** | ADR-021 (créé) |
|
||||
| **ADR concerné** | ADR-019 (créé) |
|
||||
| **Règle métier** | Règle 02 (RGPD, mis à jour) |
|
||||
| **Conflit** | ~~Règle citait "MaxMind GeoLite2 (gratuit)", mais offre a changé en 2019~~ |
|
||||
| **Impact** | ~~Coût caché potentiel~~ |
|
||||
@@ -434,14 +430,14 @@ User → Formulaire email/password (app mobile)
|
||||
- ✅ Mise à jour mensuelle automatisable
|
||||
|
||||
**Actions complétées** :
|
||||
- [x] ✅ ADR-021 créé : Service de Géolocalisation par IP
|
||||
- [x] ✅ ADR-019 créé : Service de Géolocalisation par IP
|
||||
- [x] ✅ Règle 02 mise à jour (ligne 147 et 317)
|
||||
|
||||
**Actions requises** :
|
||||
- [ ] Backend : Implémenter service GeoIP avec IP2Location
|
||||
- [ ] DevOps : Cron job màj mensuelle de la DB
|
||||
|
||||
**Référence** : [ADR-021 - Service de Géolocalisation par IP](../adr/021-geolocalisation-ip.md)
|
||||
**Référence** : [ADR-019 - Service de Géolocalisation par IP](../adr/019-geolocalisation-ip.md)
|
||||
|
||||
---
|
||||
|
||||
@@ -451,7 +447,7 @@ User → Formulaire email/password (app mobile)
|
||||
|
||||
| Élément | Détail |
|
||||
|---------|--------|
|
||||
| **ADR concernés** | ADR-007 (mis à jour), ADR-015 (Stratégie, lignes 59-62) |
|
||||
| **ADR concernés** | ADR-007 (mis à jour), ADR-011 (Stratégie, lignes 59-62) |
|
||||
| **Règle métier** | Toutes (Gherkin) |
|
||||
| **Conflit** | ~~Features partagées `/features`, step definitions séparées → qui exécute quoi ?~~ |
|
||||
| **Impact** | ~~Risque de divergence backend/mobile si tests pas synchronisés~~ |
|
||||
@@ -496,17 +492,17 @@ User → Formulaire email/password (app mobile)
|
||||
**Changements apportés** :
|
||||
- ✅ 93 features réorganisées en 3 catégories (api/ui/e2e)
|
||||
- ✅ ADR-007 mis à jour avec section complète "Convention de Catégorisation"
|
||||
- ✅ ADR-016 mis à jour avec stratégie CI/CD path filters (documentée, implémentation reportée)
|
||||
- ✅ ADR-014 mis à jour avec stratégie CI/CD path filters (documentée, implémentation reportée)
|
||||
- ✅ Historique Git préservé via `git mv` (pas de perte d'historique)
|
||||
|
||||
**Actions complétées** :
|
||||
- [x] ✅ Réorganiser `/features` en 3 catégories (api, ui, e2e)
|
||||
- [x] ✅ Mettre à jour ADR-007 avec convention de nommage et exemples
|
||||
- [x] ⏸️ CI/CD : Documenté dans ADR-016 (implémentation reportée jusqu'au développement backend/mobile)
|
||||
- [x] ⏸️ CI/CD : Documenté dans ADR-014 (implémentation reportée jusqu'au développement backend/mobile)
|
||||
|
||||
**Références** :
|
||||
- [ADR-007 - Convention de Catégorisation](../adr/007-tests-bdd.md#convention-de-catégorisation)
|
||||
- [ADR-024 - Stratégie CI/CD Path Filters](../adr/024-strategie-cicd-monorepo.md)
|
||||
- [ADR-020 - Stratégie CI/CD Path Filters](../adr/020-strategie-cicd-monorepo.md)
|
||||
|
||||
---
|
||||
|
||||
@@ -570,7 +566,7 @@ User → Formulaire email/password (app mobile)
|
||||
|
||||
| Élément | Détail |
|
||||
|---------|--------|
|
||||
| **ADR concernés** | ADR-016 (Monorepo, mis à jour) |
|
||||
| **ADR concernés** | ADR-014 (Monorepo, mis à jour) |
|
||||
| **Règle métier** | N/A (problème CI/CD) |
|
||||
| **Conflit initial** | ~~Path filters pour éviter rebuild tout, mais features partagées déclenchent tout~~ |
|
||||
| **Impact** | ~~Optimisation CI/CD inefficace~~ → **Résolu par catégorisation #10** |
|
||||
@@ -608,7 +604,7 @@ on:
|
||||
|
||||
**Changements apportés** :
|
||||
- ✅ Catégorisation features (point #10) : **résolue** → permet path filters sélectifs
|
||||
- ✅ ADR-016 mis à jour avec section complète "Stratégie CI/CD avec Path Filters"
|
||||
- ✅ ADR-014 mis à jour avec section complète "Stratégie CI/CD avec Path Filters"
|
||||
- Architecture workflows séparés (backend.yml, mobile.yml, shared.yml)
|
||||
- Configuration path filters détaillée
|
||||
- Tableau de déclenchement par type de modification
|
||||
@@ -616,13 +612,13 @@ on:
|
||||
|
||||
**Actions complétées** :
|
||||
- [x] ✅ Catégorisation features implémentée (résolution #10)
|
||||
- [x] ✅ ADR-016 mis à jour avec stratégie path filters complète
|
||||
- [x] ✅ ADR-014 mis à jour avec stratégie path filters complète
|
||||
- [x] ⏸️ Implémentation workflows CI/CD : **Reportée jusqu'à l'implémentation du code backend/mobile**
|
||||
|
||||
**Note importante** : Le projet est actuellement en **phase de documentation uniquement** (aucun code backend/mobile implémenté). L'implémentation des workflows CI/CD sera faite lors du Sprint d'implémentation backend/mobile.
|
||||
|
||||
**Références** :
|
||||
- [ADR-024 - Stratégie CI/CD Path Filters](../adr/024-strategie-cicd-monorepo.md)
|
||||
- [ADR-020 - Stratégie CI/CD Path Filters](../adr/020-strategie-cicd-monorepo.md)
|
||||
- Point #10 résolu (catégorisation features)
|
||||
|
||||
---
|
||||
@@ -633,7 +629,7 @@ on:
|
||||
|
||||
| Élément | Détail |
|
||||
|---------|--------|
|
||||
| **ADR concernés** | ADR-018 (mis à jour) |
|
||||
| **ADR concernés** | ADR-016 (mis à jour) |
|
||||
| **Règle métier** | N/A (économique) |
|
||||
| **Conflit initial** | ~~ADR citait "gratuit" mais volume estimé dépassait 9000 emails/mois~~ |
|
||||
| **Impact initial** | ~~Coût surprise lors de la croissance~~ |
|
||||
@@ -679,11 +675,11 @@ Total: ~0.28 emails/user/mois
|
||||
- Upgrade temporaire Lite (19€) si pic > 300/jour sur 3+ jours
|
||||
|
||||
**Actions complétées** :
|
||||
- [x] ✅ ADR-018 mis à jour avec périmètre strict et projection coûts
|
||||
- [x] ✅ ADR-016 mis à jour avec périmètre strict et projection coûts
|
||||
- [x] ✅ Clarification : pas d'emails notifications/marketing/paiements
|
||||
- [x] ✅ Stratégie gestion pics d'inscription documentée
|
||||
|
||||
**Référence** : [ADR-018 - Service d'Emailing Transactionnel](../adr/018-service-emailing.md)
|
||||
**Référence** : [ADR-016 - Service d'Emailing Transactionnel](../adr/016-service-emailing.md)
|
||||
|
||||
---
|
||||
|
||||
@@ -693,15 +689,15 @@ Total: ~0.28 emails/user/mois
|
||||
|
||||
| Élément | Détail |
|
||||
|---------|--------|
|
||||
| **ADR concernés** | ADR-017 (mis à jour), ADR-001 (mis à jour) |
|
||||
| **ADR concernés** | ADR-015 (mis à jour), ADR-001 (mis à jour) |
|
||||
| **Règle métier** | N/A (infrastructure) |
|
||||
| **Conflit initial** | ~~ADR-001 justifiait Go pour "Kubernetes first-class", mais ADR-017 utilisait VPS simple~~ |
|
||||
| **Conflit initial** | ~~ADR-001 justifiait Go pour "Kubernetes first-class", mais ADR-015 utilisait VPS simple~~ |
|
||||
| **Impact initial** | ~~Ambiguïté : Go choisi pour K8s mais K8s pas utilisé en MVP~~ |
|
||||
|
||||
**Analyse** :
|
||||
|
||||
- **ADR-001 initial** : Mentionnait "Kubernetes first-class" dans tooling natif
|
||||
- **ADR-017 initial** : MVP sur OVH VPS Essential (Docker Compose), K8s à "100K+ users"
|
||||
- **ADR-015 initial** : MVP sur OVH VPS Essential (Docker Compose), K8s à "100K+ users"
|
||||
- **Problème perçu** : Incohérence entre choix Go (pour K8s) et infra MVP (pas K8s)
|
||||
|
||||
**Clarification apportée** :
|
||||
@@ -721,7 +717,7 @@ Kubernetes est un **bonus** pour scalabilité future (Phase 3 : 100K+ users), **
|
||||
- Go choisi **principalement** pour simplicité, écosystème, performance
|
||||
- Support K8s = **bonus** scalabilité future, pas driver du choix
|
||||
|
||||
**ADR-017** : Section complète "Roadmap Infrastructure" ajoutée :
|
||||
**ADR-015** : Section complète "Roadmap Infrastructure" ajoutée :
|
||||
|
||||
| Phase | Users | Infrastructure | Trigger principal |
|
||||
|-------|-------|----------------|-------------------|
|
||||
@@ -735,12 +731,12 @@ Kubernetes est un **bonus** pour scalabilité future (Phase 3 : 100K+ users), **
|
||||
|
||||
**Actions complétées** :
|
||||
- [x] ✅ ADR-001 mis à jour : Note explicite "K8s = bonus, pas raison principale"
|
||||
- [x] ✅ ADR-017 : Section "Roadmap Infrastructure" complète (3 phases + triggers)
|
||||
- [x] ✅ ADR-015 : Section "Roadmap Infrastructure" complète (3 phases + triggers)
|
||||
- [x] ✅ Cohérence architecture : Vision long-terme clarifiée sans sur-architecture MVP
|
||||
|
||||
**Références** :
|
||||
- [ADR-001 - Justification Go (K8s bonus)](../adr/001-langage-backend.md#pourquoi-go-plutôt-que-rust-)
|
||||
- [ADR-017 - Roadmap Infrastructure](../adr/017-hebergement.md#roadmap-infrastructure)
|
||||
- [ADR-015 - Roadmap Infrastructure](../adr/015-hebergement.md#roadmap-infrastructure)
|
||||
|
||||
---
|
||||
|
||||
@@ -748,29 +744,40 @@ Kubernetes est un **bonus** pour scalabilité future (Phase 3 : 100K+ users), **
|
||||
|
||||
### #15 : Unlike Manuel sur Contenu Auto-liké
|
||||
|
||||
**Statut** : ✅ **ANNULÉ** (Faux problème - séparation mode voiture/piéton)
|
||||
|
||||
| Élément | Détail |
|
||||
|---------|--------|
|
||||
| **ADR concerné** | ADR-010 (ligne 15-21) |
|
||||
| **Règle métier** | Règle 05 (lignes 248-323), Règle 03 (lignes 93-99) |
|
||||
| **Conflit** | Auto-like +2% documenté, mais unlike manuel non spécifié |
|
||||
| **Impact** | Ambiguïté : faut-il annuler (+2%) si unlike ? |
|
||||
| **ADR concerné** | Règle 05 (section 5.3) (ligne 15-21) |
|
||||
| **Règle métier** | Règle 05 (lignes 343-346, "Disponibilité"), Règle 03 (lignes 93-99) |
|
||||
| **Conflit initial** | ~~Auto-like +2% documenté, mais unlike manuel non spécifié~~ |
|
||||
| **Impact initial** | ~~Ambiguïté : faut-il annuler (+2%) si unlike ?~~ |
|
||||
|
||||
**Scénario** :
|
||||
**Raison de l'annulation** : Le scénario du conflit **ne peut pas se produire** car les deux fonctionnalités sont **mutuellement exclusives** selon le mode de déplacement :
|
||||
|
||||
**Séparation stricte par mode** (Règle 05, lignes 343-346) :
|
||||
- **Mode voiture** (vitesse ≥ 5 km/h) :
|
||||
- ✅ Auto-like actif (basé sur temps d'écoute)
|
||||
- ❌ **Pas de bouton Unlike** (aucune action manuelle, sécurité routière)
|
||||
- **Mode piéton** (vitesse < 5 km/h) :
|
||||
- ✅ Bouton Like/Unlike disponible (interactions manuelles)
|
||||
- ❌ **Pas d'auto-like** (seulement actions explicites)
|
||||
|
||||
**Scénario impossible** :
|
||||
```
|
||||
1. Utilisateur écoute 85% → auto-like → jauge +2%
|
||||
2. Utilisateur clique "Unlike" (toggle)
|
||||
3. Que se passe-t-il ?
|
||||
Option A: Jauge -2% (annulation)
|
||||
Option B: Jauge reste (unlike n'affecte pas)
|
||||
1. Utilisateur écoute 85% en mode voiture → auto-like → jauge +2%
|
||||
→ Pas de bouton Unlike (mode conduite) ❌
|
||||
|
||||
2. Utilisateur en mode piéton → bouton Unlike disponible
|
||||
→ Pas d'auto-like (seulement like manuel) ❌
|
||||
```
|
||||
|
||||
**Recommandation** : **Option A** (annulation symétrique)
|
||||
**Justification** :
|
||||
- L'écoute longue (85%) **éveille la curiosité** (justifie auto-like en mode voiture)
|
||||
- Le unlike ne se fait **qu'en mode piéton** (où il n'y a pas d'auto-like)
|
||||
- Les deux systèmes sont **isolés** et ne peuvent pas interagir
|
||||
|
||||
**Justification** : Unlike explicite = signal fort "pas intéressé"
|
||||
|
||||
**Actions** :
|
||||
- [ ] Clarifier Règle 03 : section "Unlike Manuel"
|
||||
- [ ] Backend : Implémenter logique annulation dans `GaugeService`
|
||||
**Aucune action requise** : Ce point est un faux problème et peut être ignoré.
|
||||
|
||||
---
|
||||
|
||||
@@ -780,7 +787,7 @@ Kubernetes est un **bonus** pour scalabilité future (Phase 3 : 100K+ users), **
|
||||
|
||||
| # | Tâche | Responsable | Effort | Deadline |
|
||||
|---|-------|-------------|--------|----------|
|
||||
| 1 | ✅ Créer ADR-019 (Notifications) | Architecture | 2h | ✅ Fait |
|
||||
| 1 | ✅ Créer ADR-017 (Notifications) | Architecture | 2h | ✅ Fait |
|
||||
| 2 | ✅ Mettre à jour ADR-002 (Pre-buffering) | Architecture | 1h | ✅ Fait |
|
||||
| 3 | Implémenter WebSocket backend | Backend Lead | 3j | Sprint 1 |
|
||||
| 4 | Implémenter Pre-buffer mobile | Mobile Lead | 2j | Sprint 1 |
|
||||
@@ -798,13 +805,13 @@ Kubernetes est un **bonus** pour scalabilité future (Phase 3 : 100K+ users), **
|
||||
|
||||
| # | Tâche | Responsable | Effort | Statut |
|
||||
|---|-------|-------------|--------|--------|
|
||||
| 9 | ✅ Clarification Points vs Pourcentages (ADR-010 + Règle 03) | Tech Writer | 0.5j | ✅ **Fait** |
|
||||
| 9 | ✅ Clarification Points vs Pourcentages (Règle 05 + Règle 03, ADR-010 supprimé) | Tech Writer | 0.5j | ✅ **Fait** |
|
||||
| 10 | ✅ Clarification OAuth2 protocole vs providers (ADR-008 + Règle 01) | Tech Writer | 0.5j | ✅ **Fait** |
|
||||
| 11 | ✅ GeoIP Database (ADR-021 + Règle 02) | Tech Writer | 0.5j | ✅ **Fait** |
|
||||
| 12 | ✅ Réorganisation features BDD + CI/CD path filters (ADR-007, ADR-024) | QA Lead | 2j | ✅ **Fait** |
|
||||
| 13 | ✅ Projection coûts Email (ADR-018, périmètre réduit) | Tech Writer | 0.5j | ✅ **Fait** |
|
||||
| 14 | ✅ Clarification Kubernetes (ADR-001, ADR-017 roadmap) | Tech Writer | 0.5j | ✅ **Fait** |
|
||||
| 15 | Clarification Unlike Manuel (Règle 03 + ADR-010) | Tech Writer | 0.5j | ⏳ Sprint 3-4 |
|
||||
| 11 | ✅ GeoIP Database (ADR-019 + Règle 02) | Tech Writer | 0.5j | ✅ **Fait** |
|
||||
| 12 | ✅ Réorganisation features BDD + CI/CD path filters (ADR-007, ADR-020) | QA Lead | 2j | ✅ **Fait** |
|
||||
| 13 | ✅ Projection coûts Email (ADR-016, périmètre réduit) | Tech Writer | 0.5j | ✅ **Fait** |
|
||||
| 14 | ✅ Clarification Kubernetes (ADR-001, ADR-015 roadmap) | Tech Writer | 0.5j | ✅ **Fait** |
|
||||
| 15 | ✅ Unlike Manuel (Faux problème - modes séparés) | Tech Writer | 0.5j | ❌ **Annulé** |
|
||||
|
||||
---
|
||||
|
||||
@@ -814,23 +821,26 @@ Kubernetes est un **bonus** pour scalabilité future (Phase 3 : 100K+ users), **
|
||||
|----------|----------------|-------|--------|
|
||||
| Incohérences CRITICAL | 2 | 0 | ✅ **0** (2/2 résolues) |
|
||||
| Incohérences HIGH | 4 | 0 | ✅ **0** (2 résolues, 1 annulée) |
|
||||
| Incohérences MODERATE | 9 | ≤2 | ✅ **1 restante** (#7-#14 traités : 6 résolus + 1 annulé + 1 documenté) |
|
||||
| ADR à jour | 66% (12/18) | 100% | ✅ **100%** (19/19 - ADR-018 mis à jour) |
|
||||
| Incohérences MODERATE | 9 | ≤2 | ✅ **0** (6 résolus, 2 annulés, 1 documenté) |
|
||||
| Incohérences LOW | 1 | 0 | ✅ **0** (1 annulée) |
|
||||
| ADR à jour | 66% (12/18) | 100% | ✅ **100%** (19/19 - ADR-016 mis à jour) |
|
||||
| Coverage documentation | N/A | >90% | ✅ **95%** |
|
||||
|
||||
**Dernière mise à jour** : 2026-02-01
|
||||
|
||||
**Détail MODERATE** :
|
||||
- ✅ **Traités (8/9)** : #7 (résolu), #8 (résolu), #9 (résolu), #10 (résolu), #11 (annulé), #12 (documenté), #13 (résolu), #14 (résolu)
|
||||
- ⏳ **Restant (1/9)** : #15 (Unlike Manuel)
|
||||
- ✅ **Traités (9/9)** : #7 (résolu), #8 (résolu), #9 (résolu), #10 (résolu), #11 (annulé), #12 (documenté), #13 (résolu), #14 (résolu), #15 (annulé)
|
||||
|
||||
**Détail LOW** :
|
||||
- ✅ **Traité (1/1)** : #15 (Unlike Manuel - annulé, reclassé de MODERATE → LOW puis annulé car faux problème)
|
||||
|
||||
---
|
||||
|
||||
## Contacts et Ressources
|
||||
|
||||
- **Analyse complète** : Ce document
|
||||
- **ADR-019** : `/docs/adr/019-notifications-geolocalisees.md`
|
||||
- **ADR-021** : `/docs/adr/021-geolocalisation-ip.md`
|
||||
- **ADR-017** : `/docs/adr/017-notifications-geolocalisees.md`
|
||||
- **ADR-019** : `/docs/adr/019-geolocalisation-ip.md`
|
||||
- **ADR-002 (mis à jour)** : `/docs/adr/002-protocole-streaming.md`
|
||||
- **Questions** : Créer une issue GitHub avec tag `[architecture]`
|
||||
|
||||
|
||||
Reference in New Issue
Block a user