From 9bef4db8a6db4a435ac9e1531fbc9f4b34069f60 Mon Sep 17 00:00:00 2001 From: senke Date: Wed, 25 Feb 2026 10:00:39 +0100 Subject: [PATCH] chore(docs): archive V0_801_RELEASE_SCOPE, retrospective, scope v0.802 --- .cursorrules | 8 +- docs/SCOPE_CONTROL.md | 43 ++++--- docs/V0_802_RELEASE_SCOPE.md | 142 ++------------------- docs/archive/RETROSPECTIVE_V0801.md | 22 ++++ docs/{ => archive}/V0_801_RELEASE_SCOPE.md | 0 5 files changed, 57 insertions(+), 158 deletions(-) create mode 100644 docs/archive/RETROSPECTIVE_V0801.md rename docs/{ => archive}/V0_801_RELEASE_SCOPE.md (100%) diff --git a/.cursorrules b/.cursorrules index 24601f344..690b5e555 100644 --- a/.cursorrules +++ b/.cursorrules @@ -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. diff --git a/docs/SCOPE_CONTROL.md b/docs/SCOPE_CONTROL.md index faf9ce58c..9f73e6748 100644 --- a/docs/SCOPE_CONTROL.md +++ b/docs/SCOPE_CONTROL.md @@ -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. diff --git a/docs/V0_802_RELEASE_SCOPE.md b/docs/V0_802_RELEASE_SCOPE.md index 380a90fc6..3382d81d0 100644 --- a/docs/V0_802_RELEASE_SCOPE.md +++ b/docs/V0_802_RELEASE_SCOPE.md @@ -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) diff --git a/docs/archive/RETROSPECTIVE_V0801.md b/docs/archive/RETROSPECTIVE_V0801.md new file mode 100644 index 000000000..2ea7de062 --- /dev/null +++ b/docs/archive/RETROSPECTIVE_V0801.md @@ -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 14–20px +- 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 diff --git a/docs/V0_801_RELEASE_SCOPE.md b/docs/archive/V0_801_RELEASE_SCOPE.md similarity index 100% rename from docs/V0_801_RELEASE_SCOPE.md rename to docs/archive/V0_801_RELEASE_SCOPE.md