diff --git a/CHANGELOG.md b/CHANGELOG.md index d543f075f..890e77880 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,27 @@ # Changelog - Veza +## [v0.803] - 2026-02-25 + +### Added +- Audit middleware: auto-log POST/PUT/DELETE to AuditService (skip /health, /metrics, /swagger) +- CCPA compliance: Sec-GPC header support, POST /users/me/privacy/opt-out +- Account deletion hardening: anonymization (deleted-{uuid}), S3 cleanup, session revocation, audit log +- Moderation queue: migration reports, model, service, handler; GET /admin/reports, POST /admin/reports/:id/resolve, POST /reports (user report) +- Maintenance mode: middleware 503 when enabled, PUT/GET /admin/maintenance (admin toggle) +- Announcements: migration, model, service, handler; GET /announcements/active (public), GET/POST/DELETE /admin/announcements +- Feature flags: migration, model, service, handler; GET /admin/feature-flags, PUT /admin/feature-flags/:name +- Frontend: AdminSettingsView connected to maintenance, announcements, feature flags; AdminModerationView to real reports API +- AnnouncementBanner: global banner fetching GET /announcements/active, integrated in DashboardLayout +- MSW handlers: reports, announcements, feature flags, maintenance +- Swagger annotations: privacy opt-out, account deletion +- Unit tests: CCPA, reports, announcements, feature flags handlers + +### Changed +- AdminSettingsView: local state replaced by API calls for maintenance, feature flags, announcements +- AdminModerationView: mock replaced by GET /admin/reports, resolve via POST + +--- + ## [v0.802] - 2026-02-25 ### Added @@ -16,7 +38,8 @@ - Frontend: CloudFileVersions, CloudShareModal, Versions/Share buttons in CloudFileList - Frontend: GearDetailModal tabs (Documents, Repairs), warranty badge - MSW handlers: cloud versions/share, gear documents/repairs, tags suggest -- Storybook: CloudFileVersions, CloudShareModal, GearDetailModalWithDocuments/WithRepairs/WarrantyExpiring +- Backend unit tests: TagSuggestService, GearWarrantyNotifier +- Storybook: CloudFileVersions (WithVersions, Empty, Loading), CloudShareModal, GearDetailModal (WithDocuments, WithRepairs, WarrantyExpiring), GearCard (WarrantyExpiringSoon) ### Changed - gear_document_service: sanitizeGearFilename to avoid conflict with cloud sanitizeFilename diff --git a/docs/API_REFERENCE.md b/docs/API_REFERENCE.md index 3ec25bb80..5848beafc 100644 --- a/docs/API_REFERENCE.md +++ b/docs/API_REFERENCE.md @@ -705,6 +705,108 @@ Request GDPR data export. Returns 202 Accepted; export runs asynchronously. User --- +## Security & Compliance (v0.803) + +### Audit Middleware + +All POST, PUT, DELETE requests are automatically logged to the audit service (user, action, resource, IP). Skipped paths: `/health`, `/metrics`, `/swagger`, `/api/v1/admin`. + +### CCPA / Sec-GPC + +When the client sends `Sec-GPC: 1` (Global Privacy Control), the server sets `do_not_sell=true` in context and responds with `GPC: 1`. + +### POST /users/me/privacy/opt-out + +Set Do Not Sell preference (CCPA compliance). + +**Auth:** Bearer token (required) + +**Body:** `{ "do_not_sell": true }` + +--- + +## Moderation (v0.803) + +### GET /admin/reports + +List reports (admin only). Query: `status` (pending|resolved|dismissed|all), `limit`, `offset`. + +**Auth:** Bearer token + admin role + +### POST /admin/reports/:id/resolve + +Resolve a report. Body: `{ "action": "resolve"|"dismiss"|"ban"|"warn" }`. + +**Auth:** Bearer token + admin role + +### POST /reports + +Create a report (authenticated user). Body: `{ "content_type": "user"|"track"|"comment", "content_id": "uuid", "reason": "..." }`. + +**Auth:** Bearer token (required) + +--- + +## Announcements (v0.803) + +### GET /announcements/active + +List active announcements (public). Used by AnnouncementBanner. + +**Auth:** None + +### GET /admin/announcements + +List all announcements (admin). + +**Auth:** Bearer token + admin role + +### POST /admin/announcements + +Create announcement. Body: `{ "title": "...", "content": "...", "type": "info"|"warning"|"error" }`. + +**Auth:** Bearer token + admin role + +### DELETE /admin/announcements/:id + +Delete an announcement. + +**Auth:** Bearer token + admin role + +--- + +## Feature Flags (v0.803) + +### GET /admin/feature-flags + +List all feature flags (admin). + +**Auth:** Bearer token + admin role + +### PUT /admin/feature-flags/:name + +Toggle a feature flag. Body: `{ "enabled": true|false }`. + +**Auth:** Bearer token + admin role + +--- + +## Maintenance Mode (v0.803) + +### GET /admin/maintenance + +Get current maintenance mode status. + +**Auth:** Bearer token + admin role + +### PUT /admin/maintenance + +Enable or disable maintenance mode. Body: `{ "enabled": true|false }`. When enabled, non-admin routes return 503 except `/health`, `/api/v1/admin/*`. + +**Auth:** Bearer token + admin role + +--- + ## Legacy routes (deprecated) The following routes are also available at the root (without `/api/v1` prefix) but are deprecated: diff --git a/docs/FEATURE_STATUS.md b/docs/FEATURE_STATUS.md index 23bd258fb..fe76d06db 100644 --- a/docs/FEATURE_STATUS.md +++ b/docs/FEATURE_STATUS.md @@ -1,6 +1,6 @@ # Statut des fonctionnalités — Veza -**Dernière mise à jour** : février 2026 — v0.802 livrée (Cloud avancé, Gear documents/repairs, Tags suggest) +**Dernière mise à jour** : février 2026 — v0.803 livrée (Sécurité, Compliance, Modération, Maintenance, Annonces, Feature flags) Ce document décrit le statut réel des fonctionnalités par rapport au code. @@ -19,7 +19,7 @@ Ce document décrit le statut réel des fonctionnalités par rapport au code. | Dashboard | Oui | Oui | GET /api/v1/dashboard | | Recherche | Oui | Oui | GET /search unifié, GET /tracks/search. v0.202 : musical_key, tri pertinence. v0.203 : pg_trgm fuzzy, AND/OR/NOT, tooltip aide | | Social (feed, posts, groups, follows, blocks, trending) | Oui | Oui | v0.301 : feed API, explore. v0.302 : groupes avancés (request join, invite, rôles, mes groupes) | -| Administration | Oui | Oui | Complet | +| Administration | Oui | Oui | Complet. v0.803 : Modération (reports), Maintenance mode, Annonces, Feature flags DB | | Marketplace | Oui | Oui | Complet (Hyperswitch). v0.603 : Transfer auto Stripe Connect. v0.701 : Retry auto failed transfers, Admin Dashboard. v0.702 : Route product detail, tests reviews/invoices/refunds | | Webhooks | Oui | Oui | Complet | | Inventory / Gear | Oui | Oui | GET/POST/PUT/DELETE /api/v1/inventory/gear. v0.802 : documents CRUD, repairs CRUD, warranty notifier | @@ -230,6 +230,19 @@ Voir [V0_703_RELEASE_SCOPE.md](V0_703_RELEASE_SCOPE.md) pour le détail. | G2 | Gear repairs : CRUD (repair history) | | G2 | Gear warranty : warranty_start, warranty_notes, notifier 24h | +## Livré en v0.803 (Phase 8 — Sécurité, Compliance & Outillage Dev) + +| Lot | Feature | +|-----|---------| +| SEC1 | Audit middleware : auto-log POST/PUT/DELETE | +| SEC2 | CCPA : Sec-GPC header, POST /users/me/privacy/opt-out | +| SEC3 | Account deletion : anonymisation, S3 cleanup, session revocation | +| ADM1 | Modération : reports CRUD, GET /admin/reports, POST /admin/reports/:id/resolve | +| ADM2 | Maintenance mode : middleware 503, PUT/GET /admin/maintenance | +| ADM3 | Annonces : CRUD, GET /announcements/active (public) | +| ADM4 | Feature flags : DB persistence, GET/PUT /admin/feature-flags | +| FE1 | AdminSettingsView, AdminModerationView, AnnouncementBanner connectés | + ## Prévu en v0.403 (Phase 4 Commerce — suite) | Lot | Feature | diff --git a/docs/PROJECT_STATE.md b/docs/PROJECT_STATE.md index f5b414371..114d87858 100644 --- a/docs/PROJECT_STATE.md +++ b/docs/PROJECT_STATE.md @@ -8,10 +8,10 @@ | Élément | Valeur | |---------|--------| -| **Dernier tag** | v0.802 | +| **Dernier tag** | v0.803 | | **Branche courante** | `main` | | **Phase** | Phase 8 — Polish & Scale | -| **Prochaine version** | v0.803 | +| **Prochaine version** | v0.901 | --- @@ -73,6 +73,16 @@ - Infra : MinIO S3-compatible (dev, staging, prod), 6 migrations (103–108) - Sécurité : Trivy container scanning CI +### v0.803 (Phase 8 — Sécurité, Compliance & Outillage Dev) +- Audit middleware HTTP (POST/PUT/DELETE auto-log) +- CCPA Sec-GPC, opt-out endpoint +- Account deletion hardening (anonymisation, S3, sessions) +- Moderation queue (reports CRUD) +- Maintenance mode (503, admin toggle) +- Announcements CRUD, GET /announcements/active +- Feature flags DB persistence +- AdminSettingsView, AdminModerationView, AnnouncementBanner connectés + ### v0.802 (Phase 8 — Cloud avancé, Gear, Tags) - Cloud : versioning, sharing, GDPR export, backup cron - Gear : documents CRUD, repairs CRUD, warranty notifier diff --git a/docs/SCOPE_CONTROL.md b/docs/SCOPE_CONTROL.md index c3bd4c466..477f817bd 100644 --- a/docs/SCOPE_CONTROL.md +++ b/docs/SCOPE_CONTROL.md @@ -1,14 +1,14 @@ # 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_803_RELEASE_SCOPE.md](V0_803_RELEASE_SCOPE.md) -**Version précédente** : [V0_802_RELEASE_SCOPE.md](archive/V0_802_RELEASE_SCOPE.md) +**Référence active** : [V0_901_RELEASE_SCOPE.md](V0_901_RELEASE_SCOPE.md) +**Version précédente** : [V0_803_RELEASE_SCOPE.md](V0_803_RELEASE_SCOPE.md) --- ## 1. Règle d'or -> **Avant d'ajouter quoi que ce soit : vérifier si c'est dans le scope v0.803.** +> **Avant d'ajouter quoi que ce soit : vérifier si c'est dans le scope v0.901.** > Si non → ne pas ajouter. Créer un ticket pour une version ultérieure. --- @@ -17,7 +17,7 @@ ### 2.1 Autorisé -- **Corrections de bugs** sur les features IN SCOPE v0.803 +- **Corrections de bugs** sur les features IN SCOPE v0.901 - **Stabilisation** : tests, refactoring sans changement de comportement - **Nettoyage** : suppression de code mort, consolidation - **Documentation** : mise à jour des docs existantes @@ -26,17 +26,17 @@ ### 2.2 Interdit -- **Nouvelles features** hors scope v0.803 +- **Nouvelles features** hors scope v0.901 - **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.803 +- **"Améliorations"** non liées à un bug identifié ou une feature IN SCOPE v0.901 ### 2.3 Cas limite | Situation | Action | |-----------|--------| -| Bug dans une feature HORS SCOPE | Corriger si blocant pour une feature IN SCOPE v0.803. Sinon : ticket pour plus tard. | +| Bug dans une feature HORS SCOPE | Corriger si blocant pour une feature IN SCOPE v0.901. 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.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.803 ?** +1. **Mon changement modifie-t-il une feature IN SCOPE v0.901 ?** - 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_803_RELEASE_SCOPE. Si hors scope → **STOP.** - - Correction, refactoring, test → OK si lié à une feature IN SCOPE v0.803. + - Nouvelle route, nouveau composant, nouveau service → Vérifier V0_901_RELEASE_SCOPE. Si hors scope → **STOP.** + - Correction, refactoring, test → OK si lié à une feature IN SCOPE v0.901. 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.803 (voir [V0_803_RELEASE_SCOPE.md](V0_803_RELEASE_SCOPE.md)) +- [ ] Le changement est dans le scope v0.901 (voir [V0_901_RELEASE_SCOPE.md](V0_901_RELEASE_SCOPE.md)) - [ ] Aucune nouvelle feature ajoutée - [ ] Aucune régression sur les flows critiques - [ ] Les tests passent @@ -92,19 +92,19 @@ 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.803 (sauf correctif bug critique) +- Elle modifie le comportement d'une feature HORS SCOPE v0.901 (sauf correctif bug critique) - Les tests échouent - Elle introduit une dépendance non justifiée --- -## 5. Proposer une feature pour APRÈS v0.702 +## 5. Proposer une feature pour APRÈS v0.803 ### 5.1 Template Utiliser le template [Feature request](.github/ISSUE_TEMPLATE/feature_request.md) avec : -- **Alignement scope** : cocher "Hors scope v0.803 — pour v0.804+" +- **Alignement scope** : cocher "Hors scope v0.901 — pour v0.902+" - **Justification** : pourquoi cette feature est nécessaire - **Effort estimé** : S / M / L / XL - **Dépendances** : quelles features v0.802 doivent être stables avant @@ -112,8 +112,8 @@ Utiliser le template [Feature request](.github/ISSUE_TEMPLATE/feature_request.md ### 5.2 Workflow 1. Créer une issue avec le template -2. **Ne pas implémenter** tant que v0.803 n'est pas taguée -3. Une fois v0.803 stable, prioriser les issues post-v0.803 dans le scope suivant +2. **Ne pas implémenter** tant que v0.901 n'est pas défini +3. Une fois v0.901 défini, prioriser les issues dans le scope suivant --- @@ -178,11 +178,12 @@ Pour tout cas ambigu : - v0.703 : Phase 7 — Go Live & Streaming Complet — taguée - v0.801 : Phase 8 — UX/UI Polish, Accessibilité & PWA — taguée - v0.802 : Phase 8 — Cloud avancé, Gear documents/repairs, Tags suggest — taguée +- v0.803 : Phase 8 — Sécurité, Compliance & Outillage Dev — 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_803_RELEASE_SCOPE.md](V0_803_RELEASE_SCOPE.md) avant de coder. +- **Humains** : Lire [V0_901_RELEASE_SCOPE.md](V0_901_RELEASE_SCOPE.md) avant de coder. - **En doute ?** Ouvrir une issue "Scope clarification" plutôt que de coder. diff --git a/docs/V0_901_RELEASE_SCOPE.md b/docs/V0_901_RELEASE_SCOPE.md index 8e402917b..54b73232c 100644 --- a/docs/V0_901_RELEASE_SCOPE.md +++ b/docs/V0_901_RELEASE_SCOPE.md @@ -1,150 +1,10 @@ -# V0.901 Release Scope — Marketplace Complet & Analytics Avancés +# Scope v0.901 — À définir -**Statut** : Planifié -**Phase** : 9 (v1.0 Launch — Lot 1) -**Prérequis** : v0.803 (taguée) -**Date cible** : TBD -**Estimation** : ~3 sprints (15 jours ouvrés) -**Précédente** : [v0.803](archive/V0_803_RELEASE_SCOPE.md) +**Statut** : Placeholder. Le scope sera défini après stabilisation de v0.803. --- -## 1. Objectif +## Référence -Première version de la Phase 9. Complète le module **Marketplace** (wishlist, promotions/flash sales, dispute/réclamation, réponses aux reviews, re-téléchargement illimité, informations fiscales) et les **Analytics avancés** (géographie auditeurs, démographie, devices, sources de trafic, projections revenus, analytics admin). Ces fonctionnalités finalisent le volet commerce et données pour la v1.0. - ---- - -## 2. État actuel (post-v0.803) - -| Composant | État | Détail | -|-----------|------|--------| -| **Produits & Catalogue** | ✅ Livré v0.401 | CRUD, filtres, images, previews | -| **Licences & Droits** | ✅ Livré v0.401 | Types, conditions, LicenceCard | -| **Checkout Hyperswitch** | ✅ Livré v0.402 | Production-ready, return URL | -| **Codes promo** | ✅ Livré v0.402 | Validation, OrderSummary | -| **Reviews** | ✅ Livré v0.702 | Create, List, tests unitaires | -| **Factures PDF** | ✅ Livré v0.702 | GenerateInvoice, download | -| **Remboursements** | ✅ Livré v0.702 | RefundOrder, licence revocation | -| **Seller dashboard** | ✅ Livré v0.401 | Stats, evolution chart, top products | -| **Transfer auto** | ✅ Livré v0.603 | Stripe Connect, commission plateforme | -| **Wishlist** | ❌ Absent | wishlist.go existe mais non connecté frontend | -| **Promotions / flash sales** | ❌ Absent | Pas de système de promotions dynamiques | -| **Dispute / réclamation** | ❌ Absent | Pas de flow dispute client | -| **Répondre aux reviews** | ❌ Absent | Pas de réponse vendeur aux reviews | -| **Re-téléchargement illimité** | ❌ Absent | Pas de re-download après achat | -| **Informations fiscales** | ❌ Absent | Pas de calcul taxes automatique | -| **Analytics créateur** | ✅ Livré v0.202 | Stats, charts, export CSV/JSON | -| **Géographie auditeurs** | ❌ Absent | Pas de carte géographique | -| **Démographie** | ❌ Absent | Pas de données démographiques | -| **Device analytics** | ❌ Absent | Pas de breakdown par device | -| **Admin analytics** | ❌ Absent | Pas de DAU/MAU, rétention | - ---- - -## 3. Lots - -### Lot MK1 — Marketplace Avancé - -| # | Tâche | Fichiers impactés | Effort | -|---|-------|--------------------|--------| -| MK1-01 | Wishlist frontend — connecter wishlist.go existant, `WishlistView`, bouton coeur sur ProductCard, `GET /marketplace/wishlist` | Frontend + routes | M | -| MK1-02 | `POST /marketplace/wishlist/:productId`, `DELETE /marketplace/wishlist/:productId` — ajout/retrait wishlist | Backend routes | S | -| MK1-03 | Promotions — migration `126_promotions.sql` (table promotions: product_id, discount_percent, starts_at, ends_at, is_active), CRUD endpoints | Migrations, handlers | L | -| MK1-04 | Flash sales frontend — badge "PROMO -X%" sur ProductCard, countdown timer, page /marketplace/deals | Frontend | M | -| MK1-05 | Dispute / réclamation — migration `127_disputes.sql` (table disputes: order_id, buyer_id, reason, status, resolution), `POST /marketplace/orders/:id/dispute`, `GET /admin/disputes` | Migrations, handlers | L | -| MK1-06 | Réponse aux reviews — `POST /marketplace/reviews/:id/reply` (seller uniquement), affichage reply dans ProductDetailViewReviews | Backend, frontend | M | -| MK1-07 | Re-download — `GET /marketplace/orders/:id/download` retourne lien S3 temporaire pour les fichiers achetés, illimité dans le temps | Backend | M | -| MK1-08 | Taxes — config `TAX_RATE` par pays (défaut 0), calcul automatique dans checkout, affichage dans OrderSummary | Backend, frontend | M | -| MK1-09 | MSW handlers — wishlist, promotions, disputes, review reply, download | MSW | S | -| MK1-10 | Tests — wishlist CRUD, promotion validity, dispute flow, re-download auth | Tests | M | - -### Lot AN1 — Creator Analytics Complet - -| # | Tâche | Fichiers impactés | Effort | -|---|-------|--------------------|--------| -| AN1-01 | Géographie auditeurs — collecte IP → country (MaxMind GeoIP2-Lite), `GET /analytics/geography` | Backend | L | -| AN1-02 | Carte géographique frontend — composant carte avec heatmap par pays (bibliothèque légère, ex: react-simple-maps) | Frontend | L | -| AN1-03 | Démographie — user-agent parsing (device, OS, browser), `GET /analytics/demographics` | Backend | M | -| AN1-04 | Device analytics — breakdown desktop/mobile/tablet, chart donut | Frontend | M | -| AN1-05 | Sources de trafic — referrer tracking, `GET /analytics/traffic-sources` | Backend | M | -| AN1-06 | Revenue projections — `GET /analytics/revenue/projection` basé sur tendance 30/60/90 jours (régression linéaire simple) | Backend | M | -| AN1-07 | Comparaison périodes — `GET /analytics/compare?period1=...&period2=...` | Backend | M | -| AN1-08 | Frontend analytics dashboard enrichi — onglets Geography, Demographics, Traffic, Revenue | Frontend | L | -| AN1-09 | Tests — geography parsing, projection calculation, comparison | Tests | M | - -### Lot AN2 — Admin Analytics - -| # | Tâche | Fichiers impactés | Effort | -|---|-------|--------------------|--------| -| AN2-01 | DAU/MAU — `GET /admin/analytics/users` basé sur last_active_at | Backend | M | -| AN2-02 | Nouveaux inscrits — `GET /admin/analytics/signups?period=30d` | Backend | S | -| AN2-03 | Taux de rétention — calcul D1, D7, D30 retention | Backend | M | -| AN2-04 | Volume de transactions — `GET /admin/analytics/transactions` (revenus, nombre, ticket moyen) | Backend | S | -| AN2-05 | Performances infrastructure — `GET /admin/analytics/performance` (p50, p95 latency, error rate) via Prometheus API | Backend | M | -| AN2-06 | Frontend admin analytics — dashboard avec widgets DAU/MAU, signups chart, retention curve, transactions summary | Frontend | L | -| AN2-07 | Tests — DAU calculation, retention formula, transaction aggregation | Tests | M | - -### Lot QA1 — Tests & Release - -| # | Tâche | Fichiers impactés | Effort | -|---|-------|--------------------|--------| -| QA1-01 | Smoke test v0.901 | `docs/SMOKE_TEST_V0901.md` | S | -| QA1-02 | Mise à jour docs | `docs/` | S | -| QA1-03 | Rétrospective, archivage, placeholder v0.902, tag | `docs/`, Git | S | - ---- - -## 4. Hors scope v0.901 - -| Élément | Version cible | -|---------|---------------| -| Chat enrichi (images, GIFs) | v0.902 | -| Transactional emails | v0.902 | -| Social complete (hashtags, QR) | v0.902 | -| Profiles complete (verified badge) | v0.902 | -| Search recommendations ML | v0.903 | -| PayPal support | v2.0 | -| Crypto payments | v2.0 | -| Signature électronique licences | v2.0 | -| Contrat automatique généré | v2.0 | - ---- - -## 5. Critères d'acceptation - -- [ ] Wishlist : ajout/retrait produit, page /marketplace/wishlist, coeur sur ProductCard -- [ ] Promotions : CRUD, discount appliqué au checkout, badge PROMO, countdown, page /deals -- [ ] Dispute : création par buyer, liste admin, résolution (refund/dismiss) -- [ ] Review reply : vendeur peut répondre, reply affiché sous la review -- [ ] Re-download : lien S3 temporaire illimité pour les achats -- [ ] Taxes : calcul auto par pays, affiché dans OrderSummary -- [ ] Géographie : carte heatmap des auditeurs par pays -- [ ] Démographie : breakdown device/OS/browser -- [ ] Traffic sources : referrer top 10 -- [ ] Revenue projections : prévision 30/60/90j -- [ ] Admin DAU/MAU, signups, retention, transactions -- [ ] Tag v0.901 créé - ---- - -## 6. Risques - -| Risque | Mitigation | -|--------|------------| -| GeoIP database size | Utiliser MaxMind GeoIP2-Lite (gratuit, ~60MB), refresh mensuel | -| Projections revenus fausses | Disclaimer "estimation basée sur les 90 derniers jours" | -| Carte géographique lourde (SVG) | react-simple-maps avec lazy load, simplification polygones | -| Dispute flow complexe | Flow simple v1 (open → resolve), workflow avancé en v2 | -| Taxes multi-pays | Taux configurables par pays dans admin, pas de calcul auto TVA complexe | - ---- - -## 7. Références - -- [V0_803_RELEASE_SCOPE.md](archive/V0_803_RELEASE_SCOPE.md) -- [SCOPE_CONTROL.md](SCOPE_CONTROL.md) -- `veza-backend-api/internal/core/marketplace/` (service, models, wishlist.go) -- `veza-backend-api/internal/core/analytics/` -- `apps/web/src/features/marketplace/` -- `apps/web/src/features/analytics/` +- Version précédente : [V0_803_RELEASE_SCOPE.md](V0_803_RELEASE_SCOPE.md) +- [SCOPE_CONTROL.md](SCOPE_CONTROL.md) — Anti-scope-creep