docs: améliorer rendu markdown et navigation mkdocs

- Ajouter ADR-018 (librairies Go) dans TECHNICAL.md
- Transformer Shared en menu dépliable dans mkdocs (cohérence avec autres domaines)
- Corriger listes markdown (ajout lignes vides avant listes)
- Corriger line breaks dans génération BDD (étapes "Et" sur nouvelles lignes)
- Ajouter script fix-markdown-lists.sh pour corrections futures

Impacte 86 fichiers de documentation et 164 fichiers BDD générés.
This commit is contained in:
jpgiannetti
2026-02-09 20:49:52 +01:00
parent 95c65b8be1
commit 35aaa105d0
87 changed files with 1044 additions and 91 deletions

View File

@@ -14,18 +14,21 @@ La géolocalisation est **critique** pour RoadWave, mais les permissions arrièr
### Problématiques Identifiées
#### iOS App Store
- **Taux de rejet ~70%** si permission "Always Location" mal justifiée
- Apple exige que l'app soit **pleinement utilisable** sans "Always Location"
- Textes `Info.plist` scrutés manuellement par reviewers humains
- Rejection si suspicion de tracking publicitaire ou vente de données
#### Android Play Store
- Depuis Android 10 : `ACCESS_BACKGROUND_LOCATION` nécessite **déclaration justifiée**
- Vidéo démo **obligatoire** montrant le flow de demande (< 30s)
- Google vérifie que la permission est **réellement optionnelle**
- Foreground service notification **obligatoire** en arrière-plan (Android 12+)
#### RGPD (Règle 02)
- Permissions doivent être **optionnelles**
- Utilisateur doit pouvoir **refuser sans pénalité**
- App doit fonctionner en **mode dégradé acceptable**
@@ -62,6 +65,7 @@ La géolocalisation est **critique** pour RoadWave, mais les permissions arrièr
## Étape 1 : Permission de Base (Onboarding)
### Quand
- **Premier lancement** de l'app
- Avant de pouvoir utiliser les fonctionnalités principales
@@ -109,6 +113,7 @@ La géolocalisation est **critique** pour RoadWave, mais les permissions arrièr
### Si Permission Refusée
**Mode dégradé (IP2Location)** :
- Détection pays/ville via adresse IP (IP2Location Lite, voir [ADR-019](../adr/019-geolocalisation-ip.md))
- Contenus nationaux et régionaux disponibles
- Pas de contenus hyperlocaux (< 10km)
@@ -246,6 +251,7 @@ class LocationOnboardingScreen extends StatelessWidget {
## Étape 2 : Permission Arrière-Plan (Optionnelle)
### Quand
- User **active explicitement** "Notifications audio-guides piéton" dans Settings
- **Jamais au premier lancement**
@@ -547,6 +553,7 @@ class _NotificationsSettingsScreenState extends State<NotificationsSettingsScree
| **Denied** | ⚠️ IP2Location (ville) | ❌ Désactivé | ❌ Aucun | Aucune |
**Garanties** :
- App **utilisable** à tous niveaux de permission ✅
- Pas de fonctionnalité **bloquante** sans permission ✅
- Mode dégradé **acceptable** (contenus régionaux) ✅
@@ -632,6 +639,7 @@ class _NotificationsSettingsScreenState extends State<NotificationsSettingsScree
- [ ] Fonctionnalité précise ("audio-guides piéton")
- [ ] **Optionnalité** ("Cette fonctionnalité est optionnelle")
- [ ] Pas de mention tracking/publicité
- [ ] App fonctionne **complètement** avec permission "When In Use" uniquement
- [ ] App fonctionne en **mode dégradé** sans aucune permission (IP2Location)
- [ ] Screenshots montrant app fonctionnelle sans permission "Always"
@@ -642,11 +650,13 @@ class _NotificationsSettingsScreenState extends State<NotificationsSettingsScree
- [ ] Déclaration `ACCESS_BACKGROUND_LOCATION` avec justification dans Play Console :
- [ ] "Notifications géolocalisées pour audio-guides touristiques en arrière-plan"
- [ ] "Permet aux utilisateurs de recevoir des alertes lorsqu'ils passent près de monuments"
- [ ] **Vidéo démo obligatoire** (< 30s) montrant :
- [ ] Activation toggle "Mode piéton" dans Settings
- [ ] Écran d'éducation pré-permission
- [ ] Demande permission système Android
- [ ] App fonctionnelle si permission refusée
- [ ] Foreground service notification visible en mode piéton (Android 12+)
- [ ] App fonctionne **complètement** avec `ACCESS_FINE_LOCATION` uniquement
- [ ] App fonctionne en **mode dégradé** sans permissions
@@ -729,6 +739,7 @@ void main() {
### Tests Manuels (Devices Réels)
**iOS** :
- [ ] iPhone avec iOS 14, 15, 16, 17, 18
- [ ] Tester flow onboarding permission "When In Use"
- [ ] Tester activation mode piéton avec permission "Always"
@@ -736,6 +747,7 @@ void main() {
- [ ] Tester changement permission dans Settings iOS → app réagit correctement
**Android** :
- [ ] Android 10, 11, 12, 13, 14, 15
- [ ] Tester flow onboarding permission `FINE_LOCATION`
- [ ] Tester activation mode piéton avec `BACKGROUND_LOCATION`
@@ -755,11 +767,13 @@ void main() {
**Durée** : 2 semaines
**Checklist** :
- [ ] Upload build vers TestFlight
- [ ] Compléter questionnaire App Store Connect :
- [ ] "Why does your app use background location?"
→ "To send push notifications when users walk near tourist audio-guides, even when app is closed. This feature is optional and can be disabled in settings."
- [ ] Screenshots montrant app fonctionnelle sans permission "Always"
- [ ] Attendre review Apple (24-48h)
- [ ] Si rejet : analyser feedback, ajuster textes/flow, re-soumettre
- [ ] Si accepté : lancer beta test avec testeurs
@@ -772,6 +786,7 @@ void main() {
5. Désactiver mode piéton → vérifier app toujours fonctionnelle
**Métriques collectées** :
- Taux acceptation permission "When In Use" : cible >85%
- Taux acceptation permission "Always" : cible >40%
- Taux rejet App Review : cible 0%
@@ -785,10 +800,12 @@ void main() {
**Durée** : 1 semaine
**Checklist** :
- [ ] Upload build vers Play Console (Internal Testing)
- [ ] Compléter déclaration permissions :
- [ ] `ACCESS_BACKGROUND_LOCATION` justification
- [ ] Upload vidéo démo (< 30s)
- [ ] Tester sur Android 10, 11, 12, 13, 14, 15
- [ ] Vérifier foreground notification visible (Android 12+)
@@ -800,6 +817,7 @@ void main() {
5. Vérifier notification foreground service visible dans panneau notifications
**Métriques collectées** :
- Consommation batterie mode piéton : cible <5% par heure
- Taux crash background service : cible <0.1%
@@ -843,6 +861,7 @@ void main() {
### Q4 : Combien de temps pour validation TestFlight/Play Store ?
**R** :
- TestFlight : 24-48h (review Apple)
- Play Console Internal Testing : Immédiat (pas de review)
- Play Console Production : 3-7 jours (review Google)

View File

@@ -39,11 +39,13 @@ Semaine 6 : Validation finale + go/no-go production
- [ ] `NSLocationAlwaysAndWhenInUseUsageDescription` ≤ 200 caractères
- [ ] Pas de mention tracking/publicité
- [ ] Mention explicite "optionnel"
- [ ] Vérifier `UIBackgroundModes` contient `location`
- [ ] Build & Archive (Xcode)
- [ ] Version : `1.0.0 (1)` (beta)
- [ ] Bundle ID : `com.roadwave.app`
- [ ] Signing : Distribution certificate
- [ ] Upload vers App Store Connect
- [ ] Attendre processing (15-30 min)
@@ -55,11 +57,13 @@ Semaine 6 : Validation finale + go/no-go production
- [ ] `ACCESS_BACKGROUND_LOCATION`
- [ ] `FOREGROUND_SERVICE`
- [ ] `FOREGROUND_SERVICE_LOCATION`
- [ ] Vérifier foreground service déclaration
- [ ] Build AAB (Android App Bundle)
- [ ] Version : `1.0.0 (1)`
- [ ] Package : `com.roadwave.app`
- [ ] Signing : Release keystore
- [ ] Upload vers Play Console (Internal Testing)
### Documentation App Store Connect
@@ -79,10 +83,12 @@ Users can use RoadWave fully without enabling background location - they
will simply use the "car mode" which only requires location "while using".
Background location is ONLY used for:
- Detecting proximity to audio-guide points of interest (200m radius)
- Sending a single push notification to alert the user
Background location is NEVER used for:
- Advertising or tracking
- Selling data to third parties
- Analytics beyond core functionality
@@ -116,11 +122,13 @@ notifications push géolocalisées aux utilisateurs en mode piéton (touristes
à pied).
Usage précis :
- Geofencing radius 200m autour des points d'intérêt (monuments, musées)
- Notification push unique lorsque l'utilisateur entre dans la zone
- Permet découverte de contenus audio-guides sans ouvrir l'app
Cette fonctionnalité est OPTIONNELLE :
- Demandée uniquement si utilisateur active "Mode piéton" dans Settings
- Écran explicatif affiché AVANT demande permission système
- L'app fonctionne pleinement sans cette permission (mode voiture disponible)
@@ -128,12 +136,14 @@ Cette fonctionnalité est OPTIONNELLE :
Foreground service notification visible (Android 12+) lorsque geofencing actif.
Données de localisation :
- JAMAIS vendues ou partagées avec tiers
- JAMAIS utilisées pour publicité ciblée
- Anonymisées après 24h (conformité RGPD)
```
**Vidéo démo** (requis) :
- [ ] Enregistrer screen recording (25-30s)
- [ ] Montrer activation mode piéton depuis Settings
- [ ] Montrer écran d'éducation
@@ -157,6 +167,7 @@ Données de localisation :
| **External 2** | 20-30 | Grand public varié | Tests UX/acceptation réelle |
**Configuration** :
- [ ] Créer groupe "Internal Testers" (accès immédiat)
- [ ] Créer groupe "External Beta 1" (review Apple requise, 24-48h)
- [ ] Créer groupe "External Beta 2" (après succès Beta 1)
@@ -168,6 +179,7 @@ Données de localisation :
**Durée** : 2-3 jours
**Devices** :
- iPhone 12 (iOS 15)
- iPhone 13 Pro (iOS 16)
- iPhone 14 (iOS 17)
@@ -325,10 +337,13 @@ analytics.logEvent(
- Taux acceptation "When In Use" : `granted / requested`
- Cible : >85%
- Taux activation mode piéton : `toggle_attempted / total_users`
- Cible : >30%
- Taux acceptation "Always" : `always_granted / education_continued`
- Cible : >40%
- Taux abandon education : `education_dismissed / education_shown`
- Cible : <60%
@@ -355,11 +370,13 @@ Si Apple **rejette** External Beta :
### Configuration Play Console Internal Testing
**Testeurs** :
- [ ] Ajouter emails testeurs (max 100 pour Internal Testing)
- [ ] Créer "testers list" dans Play Console
- [ ] Share lien installation (pas de review Google pour Internal)
**Devices** :
- Google Pixel 5 (Android 12)
- Samsung Galaxy S21 (Android 13)
- OnePlus 9 (Android 14)
@@ -415,6 +432,7 @@ Then:
### Vidéo Démo Play Store
**Enregistrement** :
- [ ] Device : Pixel 8 (Android 15, UI stock)
- [ ] Screen recorder : Android natif (Game Toolbar)
- [ ] Durée : 25-30s
@@ -430,6 +448,7 @@ Then:
6. (22-25s) Retour Settings, toggle ON confirmé
**Post-production** :
- [ ] Ajouter text overlays : "Utilisateur active mode piéton", "Écran explicatif affiché", etc.
- [ ] Exporter MP4 < 50MB
- [ ] Upload Play Console > Permissions > Background Location > Video demo
@@ -462,6 +481,7 @@ Then:
### Décision Go/No-Go Production
**Critères GO** (tous doivent être ✅) :
- [ ] Apple a approuvé External Beta TestFlight
- [ ] Taux acceptation permission base iOS ≥ 80%
- [ ] Taux acceptation permission base Android ≥ 80%
@@ -488,6 +508,7 @@ Then:
### iOS App Store
**Checklist soumission** :
- [ ] Build production uploadé (même code que TestFlight validé)
- [ ] Version : `1.0.0 (1)`
- [ ] Screenshots stores (5 minimum, incluant permissions flow)
@@ -500,6 +521,7 @@ Then:
**App Privacy (obligatoire iOS 14+)** :
Location Data Collection :
- [ ] "Precise Location" : Yes
- [ ] Purpose : "App Functionality" + "Product Personalization"
- [ ] Linked to user : Yes
@@ -507,6 +529,7 @@ Location Data Collection :
- [ ] "Coarse Location" : No
**Timing** :
- Review Apple : 24-48h (généralement)
- Si rejet : corrections + re-soumission (24h)
- **Total prévu** : 3-7 jours
@@ -514,6 +537,7 @@ Location Data Collection :
### Android Play Store
**Checklist soumission** :
- [ ] Build production (Release AAB)
- [ ] Version : `1.0.0 (1)`
- [ ] Screenshots (8 minimum)
@@ -527,6 +551,7 @@ Location Data Collection :
**Data Safety Form** :
Location Data :
- [ ] "Approximate location" : No
- [ ] "Precise location" : Yes
- [ ] Purpose : "App functionality" + "Personalization"
@@ -535,6 +560,7 @@ Location Data :
- [ ] User can request deletion : Yes
**Timing** :
- Review Google : 3-7 jours
- Si rejet : corrections + re-soumission (1-2 jours)
- **Total prévu** : 5-10 jours