chore(docs): archive V0_801_RELEASE_SCOPE, retrospective, scope v0.802

This commit is contained in:
senke 2026-02-25 10:00:39 +01:00
parent 7c73af9b7f
commit 9bef4db8a6
5 changed files with 57 additions and 158 deletions

View file

@ -1,10 +1,10 @@
# Règles de Développement UI - Projet SaaS
## 0. Scope v0.801 (priorité absolue)
## 0. Scope v0.802 (priorité absolue)
- **Référence** : `docs/V0_801_RELEASE_SCOPE.md` et `docs/SCOPE_CONTROL.md`
- Avant toute modification : vérifier si le changement est **dans le scope v0.801**
- **Autorisé v0.801** : À définir (voir V0_801_RELEASE_SCOPE.md)
- **Référence** : `docs/V0_802_RELEASE_SCOPE.md` et `docs/SCOPE_CONTROL.md`
- Avant toute modification : vérifier si le changement est **dans le scope v0.802**
- **Autorisé v0.802** : À définir (voir V0_802_RELEASE_SCOPE.md)
- **Interdit** : nouvelles routes/pages hors scope, nouvelles dépendances (sauf correctif sécurité)
- En cas de doute : ne pas ajouter. Créer une issue pour une version ultérieure.

View file

@ -1,23 +1,23 @@
# Contrôle du scope — Anti-scope-creep
**Objectif** : Éviter toute dérive de scope. Chaque modification doit être intentionnelle et traçable.
**Référence active** : [V0_801_RELEASE_SCOPE.md](V0_801_RELEASE_SCOPE.md)
**Version précédente** : [V0_703_RELEASE_SCOPE.md](archive/V0_703_RELEASE_SCOPE.md)
**Référence active** : [V0_802_RELEASE_SCOPE.md](V0_802_RELEASE_SCOPE.md)
**Version précédente** : [V0_801_RELEASE_SCOPE.md](archive/V0_801_RELEASE_SCOPE.md)
---
## 1. Règle d'or
> **Avant d'ajouter quoi que ce soit : vérifier si c'est dans le scope v0.801.**
> **Avant d'ajouter quoi que ce soit : vérifier si c'est dans le scope v0.802.**
> Si non → ne pas ajouter. Créer un ticket pour une version ultérieure.
---
## 2. Pendant la phase v0.801 (jusqu'au tag)
## 2. Pendant la phase v0.802 (jusqu'au tag)
### 2.1 Autorisé
- **Corrections de bugs** sur les features IN SCOPE v0.801
- **Corrections de bugs** sur les features IN SCOPE v0.802
- **Stabilisation** : tests, refactoring sans changement de comportement
- **Nettoyage** : suppression de code mort, consolidation
- **Documentation** : mise à jour des docs existantes
@ -26,20 +26,20 @@
### 2.2 Interdit
- **Nouvelles features** hors scope v0.703
- **Nouvelles features** hors scope v0.802
- **Nouvelles routes** ou pages hors scope
- **Nouvelles dépendances** (sauf correctif sécurité)
- **Changements de comportement** sur les features HORS SCOPE
- **"Améliorations"** non liées à un bug identifié ou une feature IN SCOPE v0.801
- **"Améliorations"** non liées à un bug identifié ou une feature IN SCOPE v0.802
### 2.3 Cas limite
| Situation | Action |
|-----------|--------|
| Bug dans une feature HORS SCOPE | Corriger si blocant pour une feature IN SCOPE v0.801. Sinon : ticket pour plus tard. |
| Bug dans une feature HORS SCOPE | Corriger si blocant pour une feature IN SCOPE v0.802. Sinon : ticket pour plus tard. |
| Dépendance obsolète/vulnérable | Mettre à jour. Documenter dans la PR. |
| Refactoring qui change une API interne | Autorisé si 0 impact sur le contrat public et tests passent. |
| "Petite amélioration UX" | **Non.** Créer un ticket pour v0.704+. |
| "Petite amélioration UX" | **Non.** Créer un ticket pour v0.803+. |
---
@ -47,13 +47,13 @@
### 3.1 Checklist pré-commit (dans la tête)
1. **Mon changement modifie-t-il une feature IN SCOPE v0.801 ?**
1. **Mon changement modifie-t-il une feature IN SCOPE v0.802 ?**
- Oui → Continuer. S'assurer qu'il n'y a pas de régression.
- Non → **STOP.** Est-ce une correction de bug ? Si oui, la feature est-elle IN SCOPE ?
2. **Mon changement ajoute-t-il du code ?**
- Nouvelle route, nouveau composant, nouveau service → Vérifier V0_801_RELEASE_SCOPE. Si hors scope → **STOP.**
- Correction, refactoring, test → OK si lié à une feature IN SCOPE v0.801.
- Nouvelle route, nouveau composant, nouveau service → Vérifier V0_802_RELEASE_SCOPE. Si hors scope → **STOP.**
- Correction, refactoring, test → OK si lié à une feature IN SCOPE v0.802.
3. **Mes tests passent-ils ?**
- `npm test -- --run` (frontend)
@ -81,7 +81,7 @@ Format : `type(scope): description`
Dans chaque PR, le relecteur doit valider :
- [ ] Le changement est dans le scope v0.801 (voir [V0_801_RELEASE_SCOPE.md](V0_801_RELEASE_SCOPE.md))
- [ ] Le changement est dans le scope v0.802 (voir [V0_802_RELEASE_SCOPE.md](V0_802_RELEASE_SCOPE.md))
- [ ] Aucune nouvelle feature ajoutée
- [ ] Aucune régression sur les flows critiques
- [ ] Les tests passent
@ -92,7 +92,7 @@ Dans chaque PR, le relecteur doit valider :
Une PR sera rejetée si :
- Elle ajoute une nouvelle route, page ou feature
- Elle modifie le comportement d'une feature HORS SCOPE v0.801 (sauf correctif bug critique)
- Elle modifie le comportement d'une feature HORS SCOPE v0.802 (sauf correctif bug critique)
- Les tests échouent
- Elle introduit une dépendance non justifiée
@ -104,16 +104,16 @@ Une PR sera rejetée si :
Utiliser le template [Feature request](.github/ISSUE_TEMPLATE/feature_request.md) avec :
- **Alignement scope** : cocher "Hors scope v0.801 — pour v0.802+"
- **Alignement scope** : cocher "Hors scope v0.802 — pour v0.803+"
- **Justification** : pourquoi cette feature est nécessaire
- **Effort estimé** : S / M / L / XL
- **Dépendances** : quelles features v0.801 doivent être stables avant
- **Dépendances** : quelles features v0.802 doivent être stables avant
### 5.2 Workflow
1. Créer une issue avec le template
2. **Ne pas implémenter** tant que v0.801 n'est pas taguée
3. Une fois v0.801 stable, prioriser les issues post-v0.801 dans le scope suivant
2. **Ne pas implémenter** tant que v0.802 n'est pas taguée
3. Une fois v0.802 stable, prioriser les issues post-v0.802 dans le scope suivant
---
@ -132,7 +132,7 @@ Si une vulnérabilité critique est identifiée :
Si un bug bloque un déploiement ou un flow critique :
- Correctif autorisé
- La feature concernée doit être IN SCOPE v0.801 ou dépendance directe d'une feature IN SCOPE
- La feature concernée doit être IN SCOPE v0.802 ou dépendance directe d'une feature IN SCOPE
### 6.3 Décision collégiale
@ -140,7 +140,7 @@ Pour tout cas ambigu :
- Ouvrir une issue "Scope clarification"
- Décision documentée dans l'issue
- Mise à jour de V0_801_RELEASE_SCOPE.md si le scope est étendu (exception rare)
- Mise à jour de V0_802_RELEASE_SCOPE.md si le scope est étendu (exception rare)
---
@ -176,11 +176,12 @@ Pour tout cas ambigu :
- v0.701 : Phase 7 — Retry Transfers, Admin Dashboard, Deep Health — taguée
- v0.702 : Phase 7 — Reviews, Factures, Remboursements & Product Detail — taguée
- v0.703 : Phase 7 — Go Live & Streaming Complet — taguée
- v0.801 : Phase 8 — UX/UI Polish, Accessibilité & PWA — taguée
---
## 8. Rappel pour les contributeurs
- **Cursor / IA** : Les règles dans `.cursorrules` rappellent de vérifier le scope avant toute modification.
- **Humains** : Lire [V0_801_RELEASE_SCOPE.md](V0_801_RELEASE_SCOPE.md) avant de coder.
- **Humains** : Lire [V0_802_RELEASE_SCOPE.md](V0_802_RELEASE_SCOPE.md) avant de coder.
- **En doute ?** Ouvrir une issue "Scope clarification" plutôt que de coder.

View file

@ -1,148 +1,24 @@
# V0.802 Release Scope — Cloud Complet, Fichiers & Gear Avancé
# V0.802 Release Scope — Placeholder
**Statut** : Planifié
**Statut** : À définir
**Phase** : 8 (Polish & Scale — Lot 2)
**Prérequis** : v0.801 (taguée)
**Date cible** : TBD
**Estimation** : ~3 sprints (15 jours ouvrés)
**Précédente** : [v0.801](archive/V0_801_RELEASE_SCOPE.md)
---
## 1. Objectif
Deuxième version de la Phase 8. Complète les modules **Cloud Storage** (versioning, restauration, partage, backup, export GDPR), **Gestion de Fichiers** (batch upload, pause/resume, tags auto-suggest, formats supplémentaires), et **Gear Avancé** (garantie, factures, historique SAV). Ces fonctionnalités enrichissent les outils de gestion de contenu et de matériel pour les musiciens.
À définir. Candidats potentiels (hors scope v0.801) :
- Cloud Storage avancé
- Gear warranty tracking
- Autres améliorations UX/UI identifiées post-v0.801
---
## 2. État actuel (post-v0.801)
## 2. Références
| Composant | État | Détail |
|-----------|------|--------|
| **Cloud Storage MVP** | ✅ Livré v0.501 | Upload, dossiers, quota 5GB, prévisualisation audio, publication cloud→track |
| **Versioning fichiers** | ❌ Absent | Pas de versions historiques des fichiers |
| **Restauration versions** | ❌ Absent | Pas de rollback |
| **Partage fichiers** | ❌ Absent | Pas de liens de partage avec permissions |
| **Backup automatique** | ❌ Absent | Pas de backup planifié |
| **Export données GDPR** | ❌ Absent | Pas d'export complet des données utilisateur |
| **Upload fichier unique** | ✅ Livré | Upload avec progress bar |
| **Upload batch** | ❌ Absent | Un fichier à la fois uniquement |
| **Pause/resume upload** | ❌ Absent | Upload atomique, pas de reprise |
| **Tags auto-suggest** | ⚠️ Partiel | Tags manuels, pas de suggestions |
| **Formats additionnels** | ⚠️ Partiel | MP3, WAV, FLAC. Manque OGG, AIFF, M4A |
| **Gear inventaire** | ✅ Livré v0.501 | CRUD, profils publics, galerie images, recherche |
| **Garantie tracking** | ❌ Absent | Pas de date de garantie ni notification |
| **Upload facture** | ❌ Absent | Pas de stockage de facture/PDF sur le gear |
| **Historique SAV** | ❌ Absent | Pas de notes de réparation/coût |
---
## 3. Lots
### Lot CL1 — Cloud Storage Avancé
| # | Tâche | Fichiers impactés | Effort |
|---|-------|--------------------|--------|
| CL1-01 | Migration `119_cloud_file_versions.sql` — table `cloud_file_versions` (file_id, version, storage_key, size, created_at) | Migrations | S |
| CL1-02 | Service `CreateVersion` — sauvegarder version précédente avant écrasement, limit 10 versions par fichier | `internal/services/cloud_service.go` | M |
| CL1-03 | `GET /cloud/files/:id/versions` — lister les versions d'un fichier | `internal/handlers/cloud_handler.go` | S |
| CL1-04 | `POST /cloud/files/:id/restore/:version` — restaurer une version précédente | `internal/handlers/cloud_handler.go` | M |
| CL1-05 | Partage fichiers — `POST /cloud/files/:id/share` (génère lien unique, permissions read/write, expiration) | `internal/handlers/cloud_handler.go` | M |
| CL1-06 | `GET /cloud/shared/:token` — accéder à un fichier partagé (public, sans auth si token valide) | `internal/handlers/cloud_handler.go`, routes | M |
| CL1-07 | Backup auto — cron job background qui copie les fichiers cloud vers un bucket S3 dédié, configurable interval | `internal/services/cloud_backup.go` (nouveau) | L |
| CL1-08 | `POST /users/me/export` — export GDPR, génère un ZIP avec profil, tracks, playlists, messages, gear, cloud files | `internal/handlers/user_handler.go` | L |
| CL1-09 | Frontend CloudView — onglet versions, bouton restore, bouton share, lien copié | `apps/web/src/features/cloud/` | M |
| CL1-10 | MSW handlers cloud — versions, restore, share | `apps/web/src/mocks/handlers-cloud.ts` | S |
| CL1-11 | Tests — versioning CRUD, restore, share token, export | Tests | M |
### Lot FM1 — Gestion de Fichiers Avancée
| # | Tâche | Fichiers impactés | Effort |
|---|-------|--------------------|--------|
| FM1-01 | Batch upload — multi-file input, parallel upload queue (max 3 concurrent), individual progress bars | `apps/web/src/components/upload/` | L |
| FM1-02 | Pause/resume upload — chunked upload (5MB chunks), resume from last successful chunk, backend support | `internal/handlers/upload_handler.go`, frontend | L |
| FM1-03 | Tags auto-suggest — `GET /tags/suggest?q=...` basé sur les tags existants (top 10 par fréquence) | `internal/handlers/`, frontend | M |
| FM1-04 | Formats additionnels — validation MIME pour OGG, AIFF, M4A/AAC, transcoding vers MP3 standard | `internal/services/`, config | M |
| FM1-05 | Tests — batch upload, chunked resume, tag suggest, format validation | Tests | M |
### Lot GR1 — Gear Avancé
| # | Tâche | Fichiers impactés | Effort |
|---|-------|--------------------|--------|
| GR1-01 | Migration `120_gear_warranty.sql` — ajout colonnes `warranty_start`, `warranty_end`, `warranty_notes` sur gear | Migrations | S |
| GR1-02 | Migration `121_gear_documents.sql` — table `gear_documents` (gear_id, type, storage_key, filename, uploaded_at) | Migrations | S |
| GR1-03 | Migration `122_gear_repairs.sql` — table `gear_repairs` (gear_id, date, description, cost, provider) | Migrations | S |
| GR1-04 | Modèle et service — GearDocument, GearRepair, méthodes CRUD | `internal/models/gear.go`, `internal/services/gear_service.go` | M |
| GR1-05 | Handlers — POST /gear/:id/documents (upload facture/PDF), GET /gear/:id/documents, POST /gear/:id/repairs, GET /gear/:id/repairs | `internal/handlers/gear_handler.go` | M |
| GR1-06 | Notification garantie — cron background qui envoie notification 30 jours avant expiration warranty | `internal/services/gear_warranty_notifier.go` (nouveau) | M |
| GR1-07 | Frontend — onglets Documents et Réparations dans la fiche gear, upload PDF, formulaire réparation, badge "Warranty expires soon" | `apps/web/src/features/inventory/` | M |
| GR1-08 | MSW handlers gear — documents, repairs | `apps/web/src/mocks/handlers-gear.ts` | S |
| GR1-09 | Tests — warranty dates, document upload, repair CRUD, notification trigger | Tests | M |
### Lot QA1 — Tests & Release
| # | Tâche | Fichiers impactés | Effort |
|---|-------|--------------------|--------|
| QA1-01 | Smoke test v0.802 | `docs/SMOKE_TEST_V0802.md` | S |
| QA1-02 | Mise à jour PROJECT_STATE, FEATURE_STATUS, CHANGELOG | `docs/` | S |
| QA1-03 | Rétrospective, archivage, placeholder v0.803, tag | `docs/`, Git | S |
---
## 4. Hors scope v0.802
| Élément | Version cible |
|---------|---------------|
| OpenAPI/Swagger | v0.803 |
| Audit logs | v0.803 |
| Admin modération | v0.803 |
| Wishlist marketplace | v0.901 |
| Upload depuis cloud externe (Dropbox, Drive) | v2.0 |
| Scan antivirus | v2.0 |
| Watermarking automatique | v2.0 |
| Compression images automatique | v2.0 |
| Backup incrémental | v2.0 |
| ZFS snapshots | v2.0 |
| Assurance matériel | v2.0 |
---
## 5. Critères d'acceptation
- [ ] Versioning : upload écrase → ancienne version sauvegardée, 10 max par fichier
- [ ] Restore : version précédente restaurée, nouvelle version créée
- [ ] Share : lien unique avec token, permissions, expiration optionnelle
- [ ] Backup auto : cron copie vers bucket S3 dédié (configurable)
- [ ] Export GDPR : ZIP téléchargeable contenant toutes les données utilisateur
- [ ] Batch upload : multi-fichiers, progress individuel, max 3 concurrents
- [ ] Pause/resume : chunks 5MB, reprise depuis le dernier chunk
- [ ] Tags auto-suggest : top 10 par fréquence, recherche prefix
- [ ] Formats : OGG, AIFF, M4A acceptés et transcodés
- [ ] Gear warranty : dates, notification 30j avant expiration
- [ ] Gear documents : upload facture/PDF, liste documents
- [ ] Gear repairs : CRUD historique réparations avec coût
- [ ] Tag v0.802 créé
---
## 6. Risques
| Risque | Mitigation |
|--------|------------|
| Versioning storage explose | Limit 10 versions, cleanup cron des versions > 90 jours |
| Chunked upload complexité | Library tus.io ou implémentation simplifiée avec Content-Range |
| Export GDPR lent (gros utilisateurs) | Background job, notification quand prêt, lien temporaire |
| Backup auto coût S3 | Configurable, désactivé par défaut en dev |
| Warranty notifications spam | Max 1 notification par gear par période de 30j |
---
## 7. Références
- [V0_801_RELEASE_SCOPE.md](archive/V0_801_RELEASE_SCOPE.md)
- [SCOPE_CONTROL.md](SCOPE_CONTROL.md)
- `veza-backend-api/internal/services/cloud_service.go`
- `veza-backend-api/internal/handlers/cloud_handler.go`
- `veza-backend-api/internal/handlers/gear_handler.go`
- `apps/web/src/features/cloud/`
- `apps/web/src/features/inventory/`
- [V0_801_RELEASE_SCOPE.md](archive/V0_801_RELEASE_SCOPE.md)
- [RETROSPECTIVE_V0801.md](archive/RETROSPECTIVE_V0801.md)

View file

@ -0,0 +1,22 @@
# Rétrospective v0.801 — UX/UI Polish, Accessibilité & PWA
**Date** : 2026-02-25
**Phase** : 8 — Polish & Scale (Lot 1)
## Livré
- Migration 118 user_preferences avec champs appearance (contrast, density, accent_hue, font_size)
- PUT /users/me/preferences pour persister les préférences
- ThemeProvider étendu : contrast, density, accentHue, fontSize
- High contrast mode (WCAG AA)
- Density compact/comfortable
- Accent color personnalisable
- Font size 1420px
- useReducedMotion, useWakeLock
- PWA : service worker re-enabled, Install App dans Settings
- ARIA : labels sur boutons icônes, aria-haspopup menu, focus-visible
## Points d'amélioration
- Tests axe-core dans Storybook à valider manuellement
- Smoke test complet à exécuter selon SMOKE_TEST_V0801.md