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
This commit is contained in:
jpgiannetti
2026-02-01 21:21:09 +01:00
parent 2365b7f344
commit 267f574467
7 changed files with 127 additions and 302 deletions

View File

@@ -184,14 +184,43 @@ Feature: Geolocalised recommendation
All technical decisions are documented in Architecture Decision Records (ADRs) in `/docs/adr/`: All technical decisions are documented in Architecture Decision Records (ADRs) in `/docs/adr/`:
### Core Architecture
- [ADR-001](docs/adr/001-langage-backend.md): Backend language (Go) - [ADR-001](docs/adr/001-langage-backend.md): Backend language (Go)
- [ADR-002](docs/adr/002-protocole-streaming.md): Streaming protocol (HLS)
- [ADR-005](docs/adr/005-base-de-donnees.md): Database (PostgreSQL + PostGIS)
- [ADR-008](docs/adr/008-authentification.md): Authentication (Zitadel)
- [ADR-010](docs/adr/010-architecture-backend.md): Backend architecture (modular monolith) - [ADR-010](docs/adr/010-architecture-backend.md): Backend architecture (modular monolith)
- [ADR-011](docs/adr/011-orm-acces-donnees.md): Data access (sqlc) - [ADR-011](docs/adr/011-orm-acces-donnees.md): Data access (sqlc)
- [ADR-012](docs/adr/012-frontend-mobile.md): Frontend mobile (Flutter)
- [ADR-014](docs/adr/014-organisation-monorepo.md): Monorepo organization - [ADR-014](docs/adr/014-organisation-monorepo.md): Monorepo organization
### Data & Infrastructure
- [ADR-005](docs/adr/005-base-de-donnees.md): Database (PostgreSQL + PostGIS)
- [ADR-021](docs/adr/021-solution-cache.md): Cache solution (Redis)
- [ADR-015](docs/adr/015-hebergement.md): Hosting (OVH)
- [ADR-019](docs/adr/019-geolocalisation-ip.md): IP geolocation fallback
### Streaming & Content
- [ADR-002](docs/adr/002-protocole-streaming.md): Streaming protocol (HLS)
- [ADR-003](docs/adr/003-codec-audio.md): Audio codec (Opus)
- [ADR-004](docs/adr/004-cdn.md): CDN strategy
### Security & Auth
- [ADR-006](docs/adr/006-chiffrement.md): Encryption (TLS 1.3)
- [ADR-008](docs/adr/008-authentification.md): Authentication (Zitadel)
- [ADR-025](docs/adr/025-securite-secrets.md): Secrets management
### Testing & Quality
- [ADR-007](docs/adr/007-tests-bdd.md): BDD tests (Gherkin)
- [ADR-013](docs/adr/013-strategie-tests.md): Test strategy
- [ADR-022](docs/adr/022-strategie-cicd-monorepo.md): CI/CD strategy
### Features & Operations
- [ADR-009](docs/adr/009-solution-paiement.md): Payment solution (Mangopay)
- [ADR-016](docs/adr/016-service-emailing.md): Email service (Brevo)
- [ADR-017](docs/adr/017-notifications-geolocalisees.md): Geo notifications
- [ADR-018](docs/adr/018-notifications-push.md): Push notifications
- [ADR-020](docs/adr/020-librairies-flutter.md): Flutter libraries
- [ADR-023](docs/adr/023-architecture-moderation.md): Moderation architecture
- [ADR-024](docs/adr/024-monitoring-observabilite.md): Monitoring & observability
**When making architectural decisions**, check if there's an existing ADR or create a new one following the established pattern. **When making architectural decisions**, check if there's an existing ADR or create a new one following the established pattern.
## Recommendation Algorithm ## Recommendation Algorithm

View File

@@ -1,286 +0,0 @@
# Incohérences et Manques - RoadWave
> **Statut** : Document de travail
> **Dernière mise à jour** : 2026-02-01
> **Score de santé documentaire** : 75% (après corrections récentes)
Ce document liste les incohérences et manques critiques identifiés dans la documentation technique (ADR + Règles Métier) du projet RoadWave.
---
## ✅ Incohérences récemment corrigées
- **✅ Références ADR dans CLAUDE.md** : Décalage -2 corrigé (commit `c3abdd7`)
- **✅ Geofencing MVP vs Phase 2** : ADR-020 clarifié avec séparation Phase 1/Phase 2 (commit `69a7bd8`)
- **✅ Formule algorithme recommandation** : Section détaillée ajoutée dans Règle 04 avec exemple concret (commit `cf26d8a`)
- **✅ Référence cassée ADR-002** : Section 5.2 → Section 5.1 corrigée (commit `18c8901`)
---
## ✅ Incohérences acceptées pour MVP
### Souveraineté données : Firebase vs Self-hosted
**Conflit initial** :
- [ADR-008](docs/adr/008-authentification.md) : "100% self-hosted, souveraineté France"
- [ADR-015](docs/adr/015-hebergement.md) : "OVH France, aucune dépendance US"
- **MAIS** [ADR-017](docs/adr/017-notifications-geolocalisees.md) : Firebase Cloud Messaging = **Google Cloud**
**Décision** : ✅ **Accepté pour MVP** (2026-02-01)
- Cible MVP : terminaux Android équipés (environnement contrôlé)
- Firebase FCM gratuit et fiable pour phase initiale
- Incohérence documentée dans [ADR-017](docs/adr/017-notifications-geolocalisees.md) avec mitigation
**Mitigation technique** :
- Abstraction layer `NotificationProvider` pour faciliter migration future
- Exit path vers solution custom < 1 sprint si besoin
- DPA Google à valider avant production publique
**Phase 2** : Réévaluation lors du scaling (≥20K users) pour solution self-hosted (Novu).
---
## 🎉 Incohérences critiques P0 : TOUTES RÉSOLUES !
## ⚠️ Manques critiques
### 1. Architecture de modération non documentée
**État actuel** :
- [Règle 14-15](docs/regles-metier/14-moderation-flows.md) : décrivent les flux métier
- **AUCUN ADR** ne couvre l'architecture technique
**Manque** :
- Comment l'IA pré-filtre fonctionne (Whisper + NLP) ?
- Quelle architecture de queue (PostgreSQL, Redis, RabbitMQ) ?
- Stack technique des modérateurs (dashboard) ?
- API endpoints pour signalement ?
- Workflow de traitement (automatique vs manuel) ?
**Impact** : 3-4 semaines de surprise en développement, pas de consensus technique.
**Action recommandée** : Créer **ADR-023 : Architecture de Modération**
```markdown
Contenu suggéré :
- Architecture queue signalements (PostgreSQL LISTEN/NOTIFY)
- Intégration Whisper API (transcription audio)
- ML pré-filtrage (OpenAI Moderation API ou modèle local)
- Dashboard modérateurs (interface web)
- Workflow et SLA (24h critique, 72h standard)
- Métriques et observabilité
```
---
### 2. Monitoring et Ops absents
**État actuel** :
- [ADR-015](docs/adr/015-hebergement.md) : mentionne OVH VPS
- **AUCUN ADR** sur monitoring, alerting, incident response
**Manque** :
- Stack de monitoring (Grafana + Prometheus ?)
- Alerting (PagerDuty, Slack, email ?)
- Incident runbooks (crash, data loss, breach)
- Backup/Disaster Recovery strategy
- SLO/SLA définition (99.9% availability = combien downtime ?)
- Performance metrics (p99 latency, throughput)
**Impact** : Équipe ops sera perdue le jour du lancement production.
**Action recommandée** : Créer **ADR-024 : Monitoring, Observabilité et Incident Response**
```markdown
Contenu suggéré :
- Stack monitoring (Prometheus + Grafana self-hosted)
- Alerting rules (latency p99 > 100ms, error rate > 1%)
- Incident response workflow (on-call rotation, escalation)
- Runbook templates (database down, API crash, high load)
- Backup strategy (PostgreSQL WAL-E, 7 jours retention)
- Disaster Recovery (RTO/RPO : 1h / 15min)
```
---
### 3. Gestion des secrets non documentée
**État actuel** :
- Aucun ADR ne couvre la gestion des secrets
**Manque** :
- Où stocker secrets production (Mangopay credentials, DB password, JWT signing key) ?
- Solution : Vault self-hosted ? Kubernetes secrets ? Variables d'environnement ?
- Rotation des secrets (fréquence, automatisation) ?
- Field-level encryption PII (GPS coordinates, emails, phone numbers) ?
- OWASP Top 10 checklist (injection, CSRF, XSS) ?
**Impact** : Secrets en plaintext dans env vars = faille de sécurité critique.
**Action recommandée** : Créer **ADR-025 : Sécurité - Secrets et Encryption**
```markdown
Contenu suggéré :
- Secrets management (HashiCorp Vault self-hosted vs managed)
- Field-level encryption (AES-256-GCM pour PII sensibles)
- HTTPS/TLS configuration (Let's Encrypt automatique)
- CORS/CSRF protection (middleware Fiber)
- API rate limiting (token bucket, 100 req/min/user)
- OWASP Top 10 mitigation checklist
```
---
### 4. Analytics et events tracking flous
**État actuel** :
- [Règle 02](docs/regles-metier/02-conformite-rgpd.md):13.7 : "Matomo self-hosted"
- Aucun détail sur les events à tracer
**Manque** :
- Quels events tracer (play, pause, like, skip, duration, GPS updates) ?
- Schéma JSON des events (format standardisé) ?
- Dashboard principales métriques (DAU, WAU, engagement, churn) ?
- Funnel analytics (signup → première écoute → monétisation) ?
- Retention cohort analysis ?
**Impact** : Analytics sera chaos, équipe produit ne saura pas quoi mesurer.
**Action recommandée** : Créer **ADR-026 : Analytics et Métriques Produit**
```markdown
Contenu suggéré :
- Events à tracer (JSON Schema pour validation)
- Matomo setup (Docker self-hosted, data retention 90j)
- Dashboard KPI (DAU, WAU, engagement rate, churn by cohort)
- Funnel metrics (signup → content discovery → monetization)
- Privacy-preserving analytics (IP anonymization, no cookies tiers)
```
---
### 5. Stratégie de scaling Post-MVP absente
**État actuel** :
- [ADR-015](docs/adr/015-hebergement.md) : "Phase 2 à 20K users = Scaleway managé"
- Aucun détail sur comment scaler
**Manque** :
- Database sharding strategy (par user_id ? par région géographique ?) ?
- Cache invalidation at scale (comment éviter cache stampede) ?
- Load balancing multi-région (GeoDNS pour latence optimale) ?
- API rate limiting global (par IP, par user, quotas) ?
- CDN multi-région (Cloudflare ? BunnyCDN ?) ?
**Impact** : Architecture ne tiendra pas à 100K+ users sans refonte complète.
**Action recommandée** : Créer **ADR-027 : Stratégie de Scaling 20K-500K Users**
```markdown
Contenu suggéré :
- Database partitioning (sharding horizontal par région EU)
- Cache strategy (locality-aware, TTL adaptatif, invalidation patterns)
- Load balancing (Nginx + health checks, failover automatique)
- API rate limiting (Redis + token bucket, quotas différenciés free/premium)
- Multi-région CDN (Bunny CDN pour souveraineté EU)
```
---
## 📊 Évaluation par domaine
| Domaine | Score | Verdict | Manques principaux |
|---------|-------|---------|-------------------|
| **Géolocalisation** | 90% | ✅ Excellent | - |
| **Authentification** | 85% | ✅ Bon | Glossaire OAuth2 PKCE |
| **Streaming Audio** | 80% | ✅ Bon | Détails pre-buffering |
| **Mobile & Permissions** | 80% | ✅ Bon | - (corrigé ✅) |
| **Paiements** | 80% | ✅ Bon | Multi-devise taux change |
| **Modération** | 95% | ✅ Excellent | **ADR-023 créé** ✅ |
| **Ops & Monitoring** | 95% | ✅ Excellent | **ADR-024 créé** ✅ |
| **Sécurité** | 95% | ✅ Excellent | **ADR-025 créé** ✅ |
| **Analytics** | 35% | ⚠️ Minimal | **ADR-026 recommandé** |
| **Scaling** | 40% | ⚠️ Minimal | **ADR-027 recommandé** |
| **Testing** | 85% | ✅ Bon | - |
**Score global** : **95%** (après corrections P0 + P1 complètes, était 82%)
---
## 🎯 Plan d'action prioritaire
### P0 - Bloquant implémentation (à faire AVANT coding)
1. **✅ FAIT** : Corriger références ADR dans CLAUDE.md
2. **✅ FAIT** : Clarifier geofencing Phase 1/Phase 2 dans ADR-020
3. **✅ FAIT** : Accepter incohérence Firebase pour MVP (terminaux Android contrôlés)
4. **✅ FAIT** : Préciser formule algorithme recommandation (Règle 04)
- Section "Calcul détaillé score_interets" ajoutée avec exemple concret
- Domaine jauges : 0-100, score final : 0-1
- Cas limites documentés
5. **✅ FAIT** : Corriger référence cassée ADR-002 (Section 5.2 → 5.1)
🎉 **TOUTES LES INCOHÉRENCES P0 SONT RÉSOLUES !** 🎉
### P1 - Important design (avant Sprint 3-4)
6. **✅ FAIT** : Créer **ADR-023 : Architecture de Modération**
- PostgreSQL LISTEN/NOTIFY + Redis cache
- Whisper large-v3 (transcription) + NLP (distilbert, roberta)
- Dashboard React + Wavesurfer.js
- SLA 2h/24h/72h selon priorité
7. **✅ FAIT** : Créer **ADR-024 : Monitoring et Observabilité**
- Prometheus + Grafana + Loki (self-hosted)
- Alerting : Email (Brevo) + Telegram Bot
- Backup PostgreSQL : WAL-E continuous (RTO 1h, RPO 15min)
- Runbooks incidents + dashboards métriques
8. **✅ FAIT** : Créer **ADR-025 : Secrets et Sécurité**
- HashiCorp Vault (self-hosted) pour secrets management
- AES-256-GCM encryption PII (emails, GPS)
- Let's Encrypt TLS 1.3 (wildcard certificate)
- OWASP Top 10 mitigation complète + rate limiting
### P2 - Nice-to-have (avant Sprint 6-8)
9. **🟡 TODO** : Créer **ADR-026 : Analytics et Events**
- JSON Schema events, dashboard KPI, funnel metrics
10. **🟡 TODO** : Créer **ADR-027 : Stratégie Scaling**
- Sharding DB, cache invalidation, load balancing multi-région
11. **🟡 TODO** : Ajouter glossaire dans CLAUDE.md
- OAuth2 PKCE vs Providers
- MVP vs Phase 2 vs Post-MVP
- Cache strategies (hot/cold, TTL)
---
## 📈 Objectif cible
**Score santé documentaire cible** : **95%** avant démarrage Sprint 3
**Actions minimales requises** :
- ✅ Corriger 2 incohérences critiques restantes (P0 : items 4-5)
- ✅ Créer 3 ADR manquants (P1 : Modération, Ops, Sécurité)
- 🎯 Atteindre score 95% dans tous les domaines critiques
**Deadline recommandée** : 2 semaines avant démarrage développement backend/mobile
**Statut actuel** :
- Incohérences P0 résolues : **5/5 (100%)****COMPLET !**
- ADR manquants P1 : **3/3 (100%)****COMPLET !**
- Score global : **95%****OBJECTIF ATTEINT !**
**🎉 PHASES P0 + P1 TERMINÉES !** 🎉
Documentation **prête pour démarrage Sprint 3** avec :
- ✅ Architecture de modération complète (ADR-023)
- ✅ Monitoring et observabilité (ADR-024)
- ✅ Sécurité et secrets management (ADR-025)
**Prochaine phase (optionnelle)** : ADR P2 (Analytics, Scaling) - Nice-to-have avant Sprint 6-8.
---
## 🔄 Maintenance de ce document
Ce document doit être mis à jour à chaque :
- Correction d'incohérence identifiée
- Création d'un nouvel ADR comblant un manque
- Identification d'une nouvelle incohérence
**Responsable** : Tech Lead / Architecte
**Fréquence de revue** : Hebdomadaire pendant phase documentation, mensuelle ensuite

View File

@@ -7,25 +7,31 @@
| Composant | Technologie | ADR | | Composant | Technologie | ADR |
|-----------|-------------|-----| |-----------|-------------|-----|
| **Backend** | Go + Fiber | [ADR-001](docs/adr/001-langage-backend.md) | | **Backend** | Go + Fiber | [ADR-001](docs/adr/001-langage-backend.md) |
| **Architecture Backend** | Monolithe Modulaire | [ADR-012](docs/adr/012-architecture-backend.md) | | **Architecture Backend** | Monolithe Modulaire | [ADR-010](docs/adr/010-architecture-backend.md) |
| **Authentification** | Zitadel (self-hosted OVH) | [ADR-008](docs/adr/008-authentification.md) | | **Authentification** | Zitadel (self-hosted OVH) | [ADR-008](docs/adr/008-authentification.md) |
| **Streaming** | HLS | [ADR-002](docs/adr/002-protocole-streaming.md) | | **Streaming** | HLS | [ADR-002](docs/adr/002-protocole-streaming.md) |
| **Codec** | Opus | [ADR-003](docs/adr/003-codec-audio.md) | | **Codec** | Opus | [ADR-003](docs/adr/003-codec-audio.md) |
| **CDN** | NGINX Cache (OVH VPS) | [ADR-004](docs/adr/004-cdn.md) | | **CDN** | NGINX Cache (OVH VPS) | [ADR-004](docs/adr/004-cdn.md) |
| **Storage** | OVH Object Storage | [ADR-004](docs/adr/004-cdn.md) | | **Storage** | OVH Object Storage | [ADR-004](docs/adr/004-cdn.md) |
| **Hébergement MVP** | OVH VPS Essential | [ADR-017](docs/adr/017-hebergement.md) | | **Hébergement MVP** | OVH VPS Essential | [ADR-015](docs/adr/015-hebergement.md) |
| **Organisation** | Monorepo | [ADR-016](docs/adr/016-organisation-monorepo.md) | | **Organisation** | Monorepo | [ADR-014](docs/adr/014-organisation-monorepo.md) |
| **Base de données** | PostgreSQL + PostGIS | [ADR-005](docs/adr/005-base-de-donnees.md) | | **Base de données** | PostgreSQL + PostGIS | [ADR-005](docs/adr/005-base-de-donnees.md) |
| **ORM/Accès données** | sqlc | [ADR-013](docs/adr/013-orm-acces-donnees.md) | | **ORM/Accès données** | sqlc | [ADR-011](docs/adr/011-orm-acces-donnees.md) |
| **Cache** | Redis Cluster | [ADR-005](docs/adr/005-base-de-donnees.md) | | **Cache** | Redis Cluster | [ADR-021](docs/adr/021-solution-cache.md) |
| **Chiffrement** | TLS 1.3 | [ADR-006](docs/adr/006-chiffrement.md) | | **Chiffrement** | TLS 1.3 | [ADR-006](docs/adr/006-chiffrement.md) |
| **Live** | WebRTC | [ADR-002](docs/adr/002-protocole-streaming.md) | | **Live** | WebRTC | [ADR-002](docs/adr/002-protocole-streaming.md) |
| **Frontend Mobile** | Flutter | [ADR-014](docs/adr/014-frontend-mobile.md) | | **Frontend Mobile** | Flutter | [ADR-012](docs/adr/012-frontend-mobile.md) |
| **Tests** | Testify + Godog (Gherkin) | [ADR-015](docs/adr/015-strategie-tests.md), [ADR-007](docs/adr/007-tests-bdd.md) | | **Tests** | Testify + Godog (Gherkin) | [ADR-013](docs/adr/013-strategie-tests.md), [ADR-007](docs/adr/007-tests-bdd.md) |
| **Paiements** | Mangopay | [ADR-009](docs/adr/009-solution-paiement.md) | | **Paiements** | Mangopay | [ADR-009](docs/adr/009-solution-paiement.md) |
| **Emailing** | Brevo | [ADR-018](docs/adr/018-service-emailing.md) | | **Emailing** | Brevo | [ADR-016](docs/adr/016-service-emailing.md) |
| **Commandes volant** | Like automatique | [ADR-010](docs/adr/010-commandes-volant.md) | | **Géolocalisation IP** | IP2Location (fallback) | [ADR-019](docs/adr/019-geolocalisation-ip.md) |
| **Conformité stores** | CarPlay, Android Auto, App/Play Store | [ADR-011](docs/adr/011-conformite-stores-carplay-android-auto.md) | | **Librairies Mobile** | Flutter packages | [ADR-020](docs/adr/020-librairies-flutter.md) |
| **CI/CD** | GitHub Actions (monorepo) | [ADR-022](docs/adr/022-strategie-cicd-monorepo.md) |
| **Modération** | Architecture modération | [ADR-023](docs/adr/023-architecture-moderation.md) |
| **Monitoring** | Prometheus + Grafana | [ADR-024](docs/adr/024-monitoring-observabilite.md) |
| **Secrets** | Vault + sealed secrets | [ADR-025](docs/adr/025-securite-secrets.md) |
| **Notifications géo** | Push + geofencing | [ADR-017](docs/adr/017-notifications-geolocalisees.md) |
| **Notifications push** | FCM + APNS | [ADR-018](docs/adr/018-notifications-push.md) |
--- ---

View File

@@ -230,3 +230,21 @@ Fonctionnalité: Métadonnées et publication de contenu
Quand j'accède à mes contenus Quand j'accède à mes contenus
Alors je vois le brouillon avec statut "📝 Brouillon" Alors je vois le brouillon avec statut "📝 Brouillon"
Et je peux reprendre la publication Et je peux reprendre la publication
Scénario: Impossible de publier pendant encodage en cours
Étant donné que mon fichier est en cours d'encodage
Quand j'essaie de remplir les métadonnées
Alors je vois le message "Encodage en cours, veuillez patienter"
Et l'interface de publication est désactivée
Scénario: Limite de 10 brouillons maximum
Étant donné que j'ai déjà 10 brouillons sauvegardés
Quand j'essaie de créer un 11ème brouillon
Alors le brouillon est refusé
Et je vois le message "Maximum 10 brouillons. Publiez ou supprimez un brouillon existant."
Scénario: Suppression automatique brouillons après 30 jours
Étant donné que j'ai un brouillon de plus de 30 jours
Quand le système effectue le nettoyage automatique
Alors le brouillon est supprimé automatiquement
Et je reçois une notification "Brouillon '[Titre]' supprimé (>30 jours)"

View File

@@ -142,10 +142,10 @@ Fonctionnalité: Modification et suppression de contenu
Alors la récupération est impossible Alors la récupération est impossible
Et le contenu est définitivement perdu Et le contenu est définitivement perdu
Scénario: Suppression BDD + CDN sous 5 minutes Scénario: Suppression BDD + Cache sous 5 minutes
Quand je supprime un contenu Quand je supprime un contenu
Alors l'entrée en base de données est marquée "deleted" Alors l'entrée en base de données est marquée "deleted"
Et les fichiers CDN sont marqués pour suppression Et les fichiers sont marqués pour suppression
Et la suppression effective a lieu sous 5 minutes Et la suppression effective a lieu sous 5 minutes
Scénario: Historique auditeurs conservé anonymisé Scénario: Historique auditeurs conservé anonymisé
@@ -166,10 +166,11 @@ Fonctionnalité: Modification et suppression de contenu
| Auteur | (anonymisé) | | Auteur | (anonymisé) |
Et c'est conforme RGPD Et c'est conforme RGPD
Scénario: Fichiers CDN supprimés sous 24h Scénario: Fichiers Cache + Storage supprimés sous 24h
Étant donné que mon contenu est supprimé Étant donné que mon contenu est supprimé
Quand 24 heures s'écoulent Quand 24 heures s'écoulent
Alors tous les fichiers audio sont purgés du NGINX Cache Alors tous les fichiers audio sont purgés du NGINX Cache
Et tous les fichiers sont supprimés de OVH Object Storage
Et l'espace de stockage est libéré Et l'espace de stockage est libéré
Scénario: Pas de notification aux auditeurs Scénario: Pas de notification aux auditeurs
@@ -219,3 +220,16 @@ Fonctionnalité: Modification et suppression de contenu
| 20/01/2026 | Tags modifiés | | 20/01/2026 | Tags modifiés |
| 19/01/2026 | Description ajoutée | | 19/01/2026 | Description ajoutée |
Et je peux tracer toutes les modifications Et je peux tracer toutes les modifications
Scénario: Suppression d'un contenu en cours d'encodage
Étant donné que mon contenu est en cours d'encodage (50%)
Quand je supprime le contenu
Alors l'encodage est annulé immédiatement
Et le fichier temporaire est supprimé
Et je vois le message "Contenu et encodage supprimés"
Scénario: Impossible de modifier un contenu en cours de validation
Étant donné que mon contenu est en file de validation
Quand j'essaie de modifier le titre
Alors la modification est refusée
Et je vois le message "Impossible de modifier pendant la validation"

View File

@@ -191,3 +191,41 @@ Fonctionnalité: Upload et encodage de contenu audio
Quand je clique sur "Réessayer" Quand je clique sur "Réessayer"
Alors un nouveau job d'encodage est lancé Alors un nouveau job d'encodage est lancé
Et je peux tenter à nouveau Et je peux tenter à nouveau
Scénario: Timeout upload après 30 minutes
Étant donné que mon upload dure plus de 30 minutes
Quand le timeout est atteint
Alors l'upload est annulé
Et je vois le message "Upload interrompu, veuillez réessayer"
Et je peux reprendre l'upload
Scénario: Reprise upload après interruption réseau
Étant donné que mon upload a échoué à 75%
Quand je clique sur "Reprendre"
Alors l'upload reprend à partir de 75%
Et le fichier partiel est conservé temporairement
Scénario: Limite de 3 uploads simultanés
Étant donné que j'ai déjà 3 uploads en cours
Quand j'essaie d'uploader un 4ème fichier
Alors l'upload est refusé
Et je vois le message "Maximum 3 uploads simultanés. Attendez qu'un upload se termine."
Scénario: Détection fichier corrompu pendant upload
Étant donné que j'uploade un fichier MP3 corrompu
Quand le backend détecte la corruption
Alors l'upload est rejeté immédiatement
Et je vois le message "Fichier corrompu, veuillez vérifier votre fichier"
Et je n'attends pas la fin de l'encodage
Scénario: Fichier original conservé pendant 48h après échec
Étant donné que mon encodage a échoué
Quand je clique sur "Réessayer" dans les 48h
Alors le fichier original est encore disponible
Et un nouvel encodage démarre sans réupload
Scénario: Fichier original supprimé après 48h
Étant donné que mon encodage a échoué il y a 48h
Quand j'essaie de réessayer
Alors je dois réuploader le fichier
Et je vois le message "Fichier original expiré, veuillez réuploader"

View File

@@ -209,3 +209,9 @@ Fonctionnalité: Validation des 3 premiers contenus
| Vérification metadata| 15s | | Vérification metadata| 15s |
| Décision | 5s | | Décision | 5s |
| Total | 110s | | Total | 110s |
Scénario: Verrouillage contenu pendant traitement modérateur
Étant donné que le modérateur A ouvre un contenu pour validation
Quand le modérateur B essaie d'ouvrir le même contenu
Alors le modérateur B voit le message "Contenu en cours de traitement par [Modérateur A]"
Et le contenu est verrouillé pour éviter doublon