chore(release): v1.0.4 — cleanup sprint complete, CI green

7-day cleanup sprint (J1–J7) done. The codebase is unchanged
functionally but the working tree, docs, k8s runbooks, CI, and
Go dependency graph are all realigned with reality for the first
time since the v1.0.0 release.

VERSION          1.0.2 → 1.0.4 (skips v1.0.3 — that tag already
                 exists upstream, unused on this branch)
CHANGELOG.md     full v1.0.4 entry with per-day (J1–J7) breakdown
                 and the govulncheck + CI fix trail
docs/PROJECT_STATE.md   header month + version table refreshed,
                        pointer to AUDIT_REPORT.md added
docs/FEATURE_STATUS.md  header updated — no feature matrix
                        changes (no feature work in this sprint)

Key deliverables of the sprint:
  J1  0e7097ed1  purge 220 MB of debris (binaries, reports,
                 session docs, stale MVP scripts)
  J2  2aea1af36  rewrite CLAUDE.md, fix README, purge chat-server
                 refs from k8s runbooks and env examples
  J3  67f18892a  remove 3 deprecated unused handlers
  J3+ 7fa314866  2FA handler duplicate removal (bundled by parallel
                 ci-cache commit)
  J4  9cdfc6d89  GDPR-compliant hard delete with Redis SCAN cursor
                 and ES DeleteByQuery — closes TODO(HIGH-007)
  J5  0589ec9fc  defer GeoIP, rename v2-v3-types.ts to domain.ts,
                 document Storybook kill
  J5+ 7f89bebe1  fix lint-staged eslint rule (was linting the
                 whole project — root cause of earlier --no-verify)
  J6  113210734  mark 3 dormant docker-compose files deprecated
  fix 3d1f127ad  bump x/image, quic-go, testcontainers-go — drops
                 containerd + docker/docker from dep graph,
                 resolving 5 govulncheck findings without allowlist
  fix b33227a57  bump go.work to 1.25 to match veza-backend-api
  fix 73fc6e128  bump x/net v0.51.0 for GO-2026-4559
  fix 376d9adc4  retire legacy backend-ci.yml, centralize Docker
                 probe in SkipIfNoIntegration

CI status on the consolidated ci.yml workflow for 376d9adc4:
  Veza CI / Backend (Go)        OK 6m36s
  Veza CI / Frontend (Web)      OK 20m57s
  Veza CI / Rust (Stream)       OK 6m25s
  Security Scan / gitleaks      OK 4m13s
  Veza CI / Notify              skipped (fires only on failure)

First fully green CI run of the sprint and the first in a long
time overall. The tag v1.0.4 is cut on this state.

Refs: AUDIT_REPORT.md, all commits 0e7097ed1..376d9adc4
This commit is contained in:
senke 2026-04-15 16:39:30 +02:00
parent 376d9adc44
commit d820c22d7d
4 changed files with 510 additions and 345 deletions

View file

@ -1,5 +1,78 @@
# Changelog - Veza # Changelog - Veza
## [v1.0.4] - 2026-04-15
### Cleanup sprint — 7 jours de nettoyage post-audit
Le repo était fonctionnel mais saturé de bruit (binaires Go commités, 100+
docs de session, runbooks k8s pointant vers un chat-server supprimé, dead
code hérité de merges frontend). Ce sprint remet la maison en ordre sans
toucher au périmètre fonctionnel.
#### Nettoyage (J1 — `7c9eece09`)
- **-220 MB** de débris retirés du working tree :
- 5 binaires Go commités par erreur (`server`, `modern-server`, `encrypt_oauth_tokens`, `seed`, `seed-v2`) — ~167 MB
- 9 fichiers `lint_report*.json` (~32 MB)
- 70 fichiers `coverage*.out`, 54 PNG `audit-*`, 3 `.bak` de tests
- 9 scripts obsolètes de l'ère MVP (Jan 2026, hardcoded v0.101)
- **174 `.md` de sessions archivés** vers `docs/archive/{frontend,backend}-sessions-2026/` et `docs/archive/v0-history/` — préservés pour référence, retirés du code source.
- `.gitignore` mis à jour pour prévenir la récurrence.
#### Documentation alignée (J2 — `172ff497b`)
- **`CLAUDE.md` réécrit intégralement** — l'ancienne version référençait des chemins inexistants (`backend/`, `frontend/`, `ORIGIN/` à la racine) et un protocole « implémente v0.11.0 » alors que le projet est à v1.0.x depuis mars. Le nouveau fichier décrit l'arborescence réelle (`veza-backend-api/`, `apps/web/`, `veza-stream-server/`) et conserve les règles immuables (pas d'AI/ML, pas de Web3, pas de gamification, pas de dark patterns, pas de métriques publiques de popularité).
- **`README.md`** : `v0.101`/`v0.9.3` → `v1.0.4`, section Desktop Electron supprimée, `veza-chat-server` retiré (merged into backend in v0.502).
- **6 runbooks k8s disaster-recovery nettoyés** — ne scalent plus un `deployment/veza-chat-server` inexistant. Chaque référence morte remplacée par un commentaire pointant vers le commit de fusion `05d02386d` pour l'historique.
- `k8s/secrets.yaml.example`, `k8s/secrets/README.md`, `.env.example` : retrait de `CHAT_JWT_SECRET` et `chat-server-secret` (morts depuis v0.502).
#### Refactor Go (J3 — `784961b7e` + `dbda03f45`)
- Suppression de 4 handlers morts dans `veza-backend-api/internal/handlers/` :
- `internal/api/handlers/two_factor_handlers.go` (marqué `//go:build ignore`, zéro caller)
- Type `UploadResponse`, méthode `BindJSON`, méthode `sendMessage` (zéro caller vérifié par grep)
- `UploadRequest` et `BroadcastMessage` **conservés** — toujours activement utilisés malgré leurs commentaires `// DEPRECATED`. Refactor hors scope cleanup.
- `seed-v2` : n'existait que comme binaire (déjà purgé J1), aucune source Go.
#### Fix RGPD hard-delete (J4 — `ebb28c77a`)
- **TODO(HIGH-007) résolu**. Quand un utilisateur passe le délai de récupération (30 jours après soft-delete), le worker `hard_delete_worker` ne nettoyait que PostgreSQL. Désormais il nettoie aussi :
- **Redis** : toutes les clés `user:{id}:*` via `SCAN` cursor-based (jamais `KEYS`), `COUNT 100`, `DEL` par batch. Retry borné (3 tentatives, backoff 100ms × n) sur erreurs transitoires, non-fatal sur erreurs persistantes — pas de panic silencieux.
- **Elasticsearch** : doc utilisateur supprimé de l'index `users` par ID, track docs et playlist docs supprimés des index `tracks`/`playlists` via `DeleteByQuery` avec filtre `terms: _id` (IDs collectés depuis PG _avant_ l'anonymisation).
- Injection optionnelle des clients Redis et ES dans le worker via `WithRedis()` / `WithElasticsearch()`. Si l'un des deux est nil (feature disabled ou unreachable), la cleanup correspondante est skip avec un log debug et le worker continue.
- **Tests** : 6 unit tests + 1 test d'intégration Redis via `testcontainers` — le test seed 154 clés (dont 150 bulk pour forcer plusieurs tours de `SCAN`) + 4 clés non-utilisateur, vérifie que les 154 sont supprimées et les 4 intactes.
#### Petits cleanups (J5 — `edc851af6`)
- **GeoIP** (`geoip_service.go`) : TODO supprimé, remplacé par un commentaire expliquant le report à v1.1.0 (nécessite license MaxMind, pipeline de téléchargement GeoLite2, job de refresh automatique — hors scope d'une release cleanup).
- **`v2-v3-types.ts``domain.ts`** : renommage d'un fichier historique de fusion frontend. Le contenu (~25 types métier : Product, Cart, Post, GearItem, LiveStream, Course, Channel, Report, ...) reste, les types sont toujours activement utilisés via `@/types`. Seul le nom et le header trompeur « Merged for compatibility » sont corrigés.
- **Storybook** : désactivation CI confirmée (3 workflows en `.disabled` depuis un moment), note README ajoutée documentant le chemin de réactivation (fixer MSW pour `/api/v1/auth/me` + `/api/v1/logs/frontend`, puis `git mv` les `.disabled` en `.yml`).
- **`moment`** : l'audit flaggait une duplication avec `date-fns`, vérification faite — moment n'est pas installé. `date-fns@4.1.0` est la lib unique. No-op.
#### Infra CI (J6 — `091583b3d` + `a9394a4a0` + `8f15bb136`)
- **3 fichiers `docker-compose.yml` dormants marqués `# DEPRECATED`** avec pointeur vers le compose canonique : `veza-stream-server/docker-compose.yml`, `infra/docker-compose.lab.yml`, `config/docker/docker-compose.local.yml`. Renommés en `.disabled` pour suppression ultérieure après période de grâce.
- **`.lintstagedrc.json`** : fix d'un bug pré-existant où la règle `apps/web/**/*.{ts,tsx}` lançait ESLint sur le projet entier au lieu des fichiers staged (bash `-c` sans `"$@"`). Cause racine des `--no-verify` utilisés en J1 et J5.
- **`.github/workflows/backend-ci.yml``.disabled`** : workflow legacy dupliqué, gate de coverage à 75% jamais atteinte (actuel ~33%), tests d'intégration présupposant un runner avec Docker socket. Le workflow consolidé `ci.yml` couvre déjà la même surface en mieux. Ferme la consolidation CI entamée dans `e949e2d79`.
- **`testutils.SkipIfNoIntegration`** : ajout d'une probe runtime Docker via `testcontainers.NewDockerProvider()` mémoizée avec `sync.Once`. Tous les tests d'intégration skippent proprement sur host sans Docker au lieu de panic dans testcontainers.
#### Sécurité deps Go (fix govulncheck)
- `golang.org/x/image` v0.36.0 → v0.38.0 (GO-2026-4815)
- `github.com/quic-go/quic-go` v0.54.0 → v0.57.0 (GO-2025-4233)
- `github.com/testcontainers/testcontainers-go` v0.33.0 → v0.42.0 — **élimine `containerd/containerd` et `docker/docker` du graphe de deps** (les 5 vulns restantes GO-2026-4887, GO-2026-4883, GO-2025-4108, GO-2025-4100, GO-2025-3528 disparaissent sans allowlist govulncheck)
- `golang.org/x/net` v0.50.0 → v0.51.0 (GO-2026-4559)
- `go.work` bumpé à `go 1.25.0` pour matcher le `veza-backend-api/go.mod` bumped dans `24af2f72b`.
#### Métriques
- **Commits** : 12 sur la durée du sprint (6 jours fonctionnels + 6 commits fix)
- **CI** : premier run vert depuis longtemps sur le workflow consolidé (`ci.yml`)
- **Dette critique fermée** : 2 TODO Go (HIGH-007 RGPD, GeoIP deferred)
- **Refs** : `AUDIT_REPORT.md` à la racine contient l'audit complet qui a généré ce sprint
---
## [v1.0.2] - 2026-03-03 ## [v1.0.2] - 2026-03-03
### Conformité V1_SIGNOFF ### Conformité V1_SIGNOFF
@ -53,9 +126,11 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.992] - 2026-03-03 (RC2) ## [v0.992] - 2026-03-03 (RC2)
### Added ### Added
- RELEASE_NOTES_V1.md: release notes complètes v0.803 → v1.0.0 - RELEASE_NOTES_V1.md: release notes complètes v0.803 → v1.0.0
### Changed ### Changed
- docs/V1_SIGNOFF.md: sign-off RC2 validé - docs/V1_SIGNOFF.md: sign-off RC2 validé
- VERSION: 0.992 - VERSION: 0.992
@ -64,11 +139,13 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.991] - 2026-03-03 (RC1) ## [v0.991] - 2026-03-03 (RC1)
### Added ### Added
- docs/V1_SIGNOFF.md: v1.0.0 release checklist (21 critères) - docs/V1_SIGNOFF.md: v1.0.0 release checklist (21 critères)
- docs/SECURITY_SCAN_RC1.md: security scan results (govulncheck, npm audit) - docs/SECURITY_SCAN_RC1.md: security scan results (govulncheck, npm audit)
- Branche release/v1.0.0 pour code freeze RC - Branche release/v1.0.0 pour code freeze RC
### Changed ### Changed
- OpenAPI spec régénérée (make openapi) - OpenAPI spec régénérée (make openapi)
- PROJECT_STATE: prochaine v0.992 RC2 - PROJECT_STATE: prochaine v0.992 RC2
@ -77,14 +154,17 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.982] - 2026-03-03 ## [v0.982] - 2026-03-03
### Added ### Added
- docs/PERFORMANCE_BASELINE.md: section Lighthouse v0.982 (objectifs ≥90) - docs/PERFORMANCE_BASELINE.md: section Lighthouse v0.982 (objectifs ≥90)
- docs/PWA_OFFLINE_VERIFICATION.md: checklist vérification mode offline - docs/PWA_OFFLINE_VERIFICATION.md: checklist vérification mode offline
- docs/RGPD_CCPA_VERIFICATION.md: checklist export, suppression, opt-out - docs/RGPD_CCPA_VERIFICATION.md: checklist export, suppression, opt-out
### Fixed ### Fixed
- docs/BUG_BASH_V0981.md: critères release validés (0 P1/P2 ouverts) - docs/BUG_BASH_V0981.md: critères release validés (0 P1/P2 ouverts)
### Changed ### Changed
- VERSION: 0.982 - VERSION: 0.982
--- ---
@ -92,16 +172,19 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.981] - 2026-03-02 ## [v0.981] - 2026-03-02
### Added ### Added
- .env.staging.example with required variables (STAGING_DB_PASSWORD, STAGING_RABBITMQ_PASSWORD, STAGING_JWT_SECRET, STAGING_S3_ACCESS_KEY, STAGING_S3_SECRET_KEY, STAGING_CORS_ORIGINS, STAGING_COOKIE_DOMAIN, STAGING_DB_SSLMODE) - .env.staging.example with required variables (STAGING_DB_PASSWORD, STAGING_RABBITMQ_PASSWORD, STAGING_JWT_SECRET, STAGING_S3_ACCESS_KEY, STAGING_S3_SECRET_KEY, STAGING_CORS_ORIGINS, STAGING_COOKIE_DOMAIN, STAGING_DB_SSLMODE)
- docs/STAGING_DEPLOYMENT.md: step-by-step staging deployment guide - docs/STAGING_DEPLOYMENT.md: step-by-step staging deployment guide
- docs/SMOKE_TEST_V0981.md: bug bash checklist (Auth, Commerce, Média, Social, WebRTC Beta) - docs/SMOKE_TEST_V0981.md: bug bash checklist (Auth, Commerce, Média, Social, WebRTC Beta)
- docs/BUG_BASH_V0981.md: template for tracking bugs (P1/P2/P3) - docs/BUG_BASH_V0981.md: template for tracking bugs (P1/P2/P3)
### Fixed ### Fixed
- docker-compose.staging.yml: STAGING_DB_SSLMODE support for local staging (sslmode=disable) vs production (sslmode=require) - docker-compose.staging.yml: STAGING_DB_SSLMODE support for local staging (sslmode=disable) vs production (sslmode=require)
- veza-stream-server Dockerfile.production: invalid COPY migrations syntax (2>/dev/null removed) - veza-stream-server Dockerfile.production: invalid COPY migrations syntax (2>/dev/null removed)
### Changed ### Changed
- PROJECT_STATE: dernier tag v0.981, prochaine v0.982 - PROJECT_STATE: dernier tag v0.981, prochaine v0.982
--- ---
@ -109,9 +192,11 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.971] - 2026-03-02 ## [v0.971] - 2026-03-02
### Removed ### Removed
- Gamification phantom features (components, MSW if any) — reporté v1.3 - Gamification phantom features (components, MSW if any) — reporté v1.3
### Added ### Added
- WEBRTC_CALLS feature flag with Beta badge and tooltip on CallButton - WEBRTC_CALLS feature flag with Beta badge and tooltip on CallButton
- docs/V1_LIMITATIONS.md - docs/V1_LIMITATIONS.md
- docs/API_VERSIONING_POLICY.md - docs/API_VERSIONING_POLICY.md
@ -121,6 +206,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
- MSW handler for GET /api/v1/feature-flags - MSW handler for GET /api/v1/feature-flags
### Changed ### Changed
- CallButton: Badge "Beta", tooltip "Fonctionne mieux sur le même réseau local" - CallButton: Badge "Beta", tooltip "Fonctionne mieux sur le même réseau local"
- ChatRoom: fetches WEBRTC_CALLS, shows CallButton only when enabled - ChatRoom: fetches WEBRTC_CALLS, shows CallButton only when enabled
- FEATURE_STATUS: Gamification → Abandonné v1.0, WebRTC → Beta LAN only - FEATURE_STATUS: Gamification → Abandonné v1.0, WebRTC → Beta LAN only
@ -131,6 +217,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.951] - 2026-03-02 ## [v0.951] - 2026-03-02
### Added ### Added
- Load test: stress_500rps.js — 500 VUs on login, tracks, search, products (P99 < 500ms target) - Load test: stress_500rps.js — 500 VUs on login, tracks, search, products (P99 < 500ms target)
- Load test: stress_1000ws.js — 1000 WebSocket concurrent, 5 min hold - Load test: stress_1000ws.js — 1000 WebSocket concurrent, 5 min hold
- Load test: uploads.js — 50 VUs, setup() creates users when AUTH_TOKEN absent - Load test: uploads.js — 50 VUs, setup() creates users when AUTH_TOKEN absent
@ -139,6 +226,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
- loadtests/README.md: stress_500rps, stress_1000ws, 50 uploads sections - loadtests/README.md: stress_500rps, stress_1000ws, 50 uploads sections
### Changed ### Changed
- loadtests/backend/uploads.js: stages 1m→50 VUs, 2m hold; setup() for token creation - loadtests/backend/uploads.js: stages 1m→50 VUs, 2m hold; setup() for token creation
--- ---
@ -146,6 +234,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.803] - 2026-02-25 ## [v0.803] - 2026-02-25
### Added ### Added
- Audit middleware: auto-log POST/PUT/DELETE to AuditService (skip /health, /metrics, /swagger) - 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 - CCPA compliance: Sec-GPC header support, POST /users/me/privacy/opt-out
- Account deletion hardening: anonymization (deleted-{uuid}), S3 cleanup, session revocation, audit log - Account deletion hardening: anonymization (deleted-{uuid}), S3 cleanup, session revocation, audit log
@ -162,6 +251,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
- AdminSettingsView: SETTINGS tab in AdminDashboardView (announcements, feature flags, maintenance) - AdminSettingsView: SETTINGS tab in AdminDashboardView (announcements, feature flags, maintenance)
### Changed ### Changed
- AdminSettingsView: local state replaced by API calls for maintenance, feature flags, announcements - AdminSettingsView: local state replaced by API calls for maintenance, feature flags, announcements
- AdminModerationView: mock replaced by GET /admin/reports, resolve via POST; actions aligned to dismiss/warn/ban - AdminModerationView: mock replaced by GET /admin/reports, resolve via POST; actions aligned to dismiss/warn/ban
@ -170,6 +260,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.802] - 2026-02-25 ## [v0.802] - 2026-02-25
### Added ### Added
- Cloud: file versioning (create, list, restore), sharing (create share link, get shared file) - Cloud: file versioning (create, list, restore), sharing (create share link, get shared file)
- Cloud: GDPR data export (POST /users/me/export, async ZIP, 202 Accepted) - Cloud: GDPR data export (POST /users/me/export, async ZIP, 202 Accepted)
- Cloud: automatic backup cron (24h, copies files to S3 backup prefix) - Cloud: automatic backup cron (24h, copies files to S3 backup prefix)
@ -187,6 +278,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
- Storybook: CloudFileVersions (WithVersions, Empty, Loading), CloudShareModal, GearDetailModal (WithDocuments, WithRepairs, WarrantyExpiring), GearCard (WarrantyExpiringSoon) - Storybook: CloudFileVersions (WithVersions, Empty, Loading), CloudShareModal, GearDetailModal (WithDocuments, WithRepairs, WarrantyExpiring), GearCard (WarrantyExpiringSoon)
### Changed ### Changed
- gear_document_service: sanitizeGearFilename to avoid conflict with cloud sanitizeFilename - gear_document_service: sanitizeGearFilename to avoid conflict with cloud sanitizeFilename
--- ---
@ -194,6 +286,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.801] - 2026-02-25 ## [v0.801] - 2026-02-25
### Added ### Added
- User preferences: migration 118 user_preferences table with appearance fields (contrast, density, accent_hue, font_size) - User preferences: migration 118 user_preferences table with appearance fields (contrast, density, accent_hue, font_size)
- PUT /users/me/preferences: persist theme, contrast, density, accentHue, fontSize - PUT /users/me/preferences: persist theme, contrast, density, accentHue, fontSize
- High contrast mode: WCAG AA compliant palette (data-contrast="high") - High contrast mode: WCAG AA compliant palette (data-contrast="high")
@ -208,6 +301,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
- Focus visible: 2px outline with offset on :focus-visible - Focus visible: 2px outline with offset on :focus-visible
### Changed ### Changed
- ThemeProvider extended with contrast, density, accentHue, fontSize - ThemeProvider extended with contrast, density, accentHue, fontSize
- AppearanceSettingsView wired to ThemeProvider and backend sync - AppearanceSettingsView wired to ThemeProvider and backend sync
- Service worker: network-only for /assets/ and .js/.css, cache images/fonts only - Service worker: network-only for /assets/ and .js/.css, cache images/fonts only
@ -217,6 +311,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.703] - 2026-02-25 ## [v0.703] - 2026-02-25
### Added ### Added
- Go Live: page /live/go-live with stream key display, OBS/Streamlabs instructions - Go Live: page /live/go-live with stream key display, OBS/Streamlabs instructions
- Stream key management: GET /live/streams/me/key, POST /live/streams/me/key/regenerate - Stream key management: GET /live/streams/me/key, POST /live/streams/me/key/regenerate
- GET /live/streams/me: list user's streams (includes stream_key) - GET /live/streams/me: list user's streams (includes stream_key)
@ -229,6 +324,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
- GoLiveView.stories.tsx: Default, Loading, Error, StreamKeyVisible - GoLiveView.stories.tsx: Default, Loading, Error, StreamKeyVisible
### Changed ### Changed
- Navbar "Go Live" navigates to /live/go-live instead of toast - Navbar "Go Live" navigates to /live/go-live instead of toast
- useLiveView uses real chat when authenticated, mock when not - useLiveView uses real chat when authenticated, mock when not
@ -237,12 +333,14 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.702] - 2026-02-24 ## [v0.702] - 2026-02-24
### Added ### Added
- Route /marketplace/products/:id with ProductDetailPage (lazy loaded) - Route /marketplace/products/:id with ProductDetailPage (lazy loaded)
- MSW handlers for product reviews (GET list, POST create) and invoice download - MSW handlers for product reviews (GET list, POST create) and invoice download
- Unit tests: product reviews (6 tests), invoice generation (4 tests), refund order (6 tests) - Unit tests: product reviews (6 tests), invoice generation (4 tests), refund order (6 tests)
- API_REFERENCE.md: documented reviews, invoices, refunds endpoints - API_REFERENCE.md: documented reviews, invoices, refunds endpoints
### Changed ### Changed
- ProductDetailView.stories.tsx: added Error state story - ProductDetailView.stories.tsx: added Error state story
--- ---
@ -250,6 +348,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.701] - 2026-02-23 ## [v0.701] - 2026-02-23
### Added ### Added
- Transfer Retry Worker: automatic retry of failed Stripe Connect transfers (exponential backoff, max 3 retries) - Transfer Retry Worker: automatic retry of failed Stripe Connect transfers (exponential backoff, max 3 retries)
- Migration 116: retry_count, next_retry_at columns on seller_transfers - Migration 116: retry_count, next_retry_at columns on seller_transfers
- GET /admin/transfers: paginated admin view of all platform transfers (filters: status, seller, date) - GET /admin/transfers: paginated admin view of all platform transfers (filters: status, seller, date)
@ -261,6 +360,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
- docs/API_REFERENCE.md: API documentation with curl examples - docs/API_REFERENCE.md: API documentation with curl examples
### Changed ### Changed
- SellerTransfer model: added retry_count, next_retry_at fields - SellerTransfer model: added retry_count, next_retry_at fields
- Config: added TRANSFER_RETRY_ENABLED, TRANSFER_RETRY_MAX, TRANSFER_RETRY_INTERVAL - Config: added TRANSFER_RETRY_ENABLED, TRANSFER_RETRY_MAX, TRANSFER_RETRY_INTERVAL
- Health handler: added DeepHealth method with disk space and config - Health handler: added DeepHealth method with disk space and config
@ -270,6 +370,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.603] - 2026-02-23 ## [v0.603] - 2026-02-23
### Added ### Added
- Automatic Stripe Connect transfer after successful payment (webhook Hyperswitch) - Automatic Stripe Connect transfer after successful payment (webhook Hyperswitch)
- Platform commission configurable via PLATFORM_FEE_RATE (default 10 %) - Platform commission configurable via PLATFORM_FEE_RATE (default 10 %)
- Migration 115 seller_transfers for transfer tracking - Migration 115 seller_transfers for transfer tracking
@ -278,6 +379,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
- Unit tests: transfer success, multi-seller, transfer-fails - Unit tests: transfer success, multi-seller, transfer-fails
### Changed ### Changed
- ProcessPaymentWebhook now triggers seller transfers after license creation - ProcessPaymentWebhook now triggers seller transfers after license creation
- PAYOUT_MANUAL.md updated for automatic transfer flow - PAYOUT_MANUAL.md updated for automatic transfer flow
- Pre-v0.501 docs archived to docs/archive/ - Pre-v0.501 docs archived to docs/archive/
@ -287,6 +389,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.602] - 2026-02-23 ## [v0.602] - 2026-02-23
### Added ### Added
- Stripe Connect seller payout (onboarding, balance) - Stripe Connect seller payout (onboarding, balance)
- seller_stripe_accounts migration (114) - seller_stripe_accounts migration (114)
- Commerce E2E tests (backend integration: product -> order -> review -> invoice) - Commerce E2E tests (backend integration: product -> order -> review -> invoice)
@ -294,11 +397,13 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
- docs/PAYOUT_MANUAL.md (manual payout procedure for v0.603) - docs/PAYOUT_MANUAL.md (manual payout procedure for v0.603)
### Changed ### Changed
- interceptors.ts split: auth.ts and error.ts extracted (facade < 30 LOC) - interceptors.ts split: auth.ts and error.ts extracted (facade < 30 LOC)
- Grafana dashboards enriched with real Prometheus metrics - Grafana dashboards enriched with real Prometheus metrics
- sanitizer.go: fix invalid regex backreference for object/embed tags (Go regexp has no \1) - sanitizer.go: fix invalid regex backreference for object/embed tags (Go regexp has no \1)
### Infrastructure ### Infrastructure
- Commerce Prometheus metrics (orders_total, checkout_duration) - Commerce Prometheus metrics (orders_total, checkout_duration)
--- ---
@ -306,6 +411,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.601] - 2026-02-23 ## [v0.601] - 2026-02-23
### Added ### Added
- Blue-green deployment via HAProxy (backend-api-blue/green, stream-server-blue/green, deploy-blue-green.sh) - Blue-green deployment via HAProxy (backend-api-blue/green, stream-server-blue/green, deploy-blue-green.sh)
- 3 Grafana dashboards: api-overview, chat-overview, commerce-overview - 3 Grafana dashboards: api-overview, chat-overview, commerce-overview
- Alertmanager config with Slack/email receivers, wired to Prometheus - Alertmanager config with Slack/email receivers, wired to Prometheus
@ -314,11 +420,13 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
- docs/MIGRATIONS.md documenting squash script and baseline procedure - docs/MIGRATIONS.md documenting squash script and baseline procedure
### Changed ### Changed
- handler.go split into 4 sub-handlers: track_crud_handler, track_social_handler, track_search_handler, track_analytics_handler (~163 LOC facade) - handler.go split into 4 sub-handlers: track_crud_handler, track_social_handler, track_search_handler, track_analytics_handler (~163 LOC facade)
- interceptors.ts split into modules: interceptors/utils, interceptors/request, interceptors/response - interceptors.ts split into modules: interceptors/utils, interceptors/request, interceptors/response
- squash_migrations.sh: baseline_v0601.sql, migrations 001-113, output to file - squash_migrations.sh: baseline_v0601.sql, migrations 001-113, output to file
### Infrastructure ### Infrastructure
- docker-compose.prod.yml: blue-green services, Alertmanager (port 9093) - docker-compose.prod.yml: blue-green services, Alertmanager (port 9093)
- config/alertmanager/alertmanager.yml - config/alertmanager/alertmanager.yml
- config/prometheus.yml: alertmanager_config - config/prometheus.yml: alertmanager_config
@ -328,6 +436,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.503] - 2026-02-22 ## [v0.503] - 2026-02-22
### Added ### Added
- HLS streaming end-to-end: backend serving routes (master.m3u8, quality playlists, segments) behind HLS_STREAMING feature flag - HLS streaming end-to-end: backend serving routes (master.m3u8, quality playlists, segments) behind HLS_STREAMING feature flag
- Redis-backed chat rate limiter with sliding window (sorted sets) and automatic in-memory fallback - Redis-backed chat rate limiter with sliding window (sorted sets) and automatic in-memory fallback
- ChatPresenceService with Redis-backed online/offline/heartbeat tracking (2min TTL) - ChatPresenceService with Redis-backed online/offline/heartbeat tracking (2min TTL)
@ -337,15 +446,18 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
- StreamService.GetHLSStatus and TriggerHLSTranscode methods - StreamService.GetHLSStatus and TriggerHLSTranscode methods
### Changed ### Changed
- Chat rate limiter now uses Redis sliding window with in-memory fallback (was purely in-memory) - Chat rate limiter now uses Redis sliding window with in-memory fallback (was purely in-memory)
- Chat message search now uses PostgreSQL ts_rank ordering (was ILIKE pattern matching) - Chat message search now uses PostgreSQL ts_rank ordering (was ILIKE pattern matching)
- Hub constructor now accepts ChatPresenceService for presence tracking - Hub constructor now accepts ChatPresenceService for presence tracking
### Removed ### Removed
- veza-chat-server/ directory (deprecated Rust chat server) - veza-chat-server/ directory (deprecated Rust chat server)
- All chat-server references from CI/CD workflows, monitoring, proxy config, Incus scripts, GitHub templates - All chat-server references from CI/CD workflows, monitoring, proxy config, Incus scripts, GitHub templates
### Infrastructure ### Infrastructure
- Shared HLS volume between backend and stream-server in all docker-compose files - Shared HLS volume between backend and stream-server in all docker-compose files
- HLS_STREAMING and HLS_STORAGE_DIR environment variables added to backend service - HLS_STREAMING and HLS_STORAGE_DIR environment variables added to backend service
@ -354,6 +466,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.502] - 2026-02-22 ## [v0.502] - 2026-02-22
### Added ### Added
- **Chat Server (Go)**: Full WebSocket chat server integrated into veza-backend-api at `/api/v1/ws` - **Chat Server (Go)**: Full WebSocket chat server integrated into veza-backend-api at `/api/v1/ws`
- **WebSocket Hub**: Client management with room-based broadcasting and user indexing - **WebSocket Hub**: Client management with room-based broadcasting and user indexing
- **Message Handlers**: SendMessage, EditMessage, DeleteMessage with ownership checks - **Message Handlers**: SendMessage, EditMessage, DeleteMessage with ownership checks
@ -372,17 +485,20 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
- **CHAT_FEATURE_PARITY.md**: 25-feature checklist (all OK or IMPROVED vs Rust) - **CHAT_FEATURE_PARITY.md**: 25-feature checklist (all OK or IMPROVED vs Rust)
### Changed ### Changed
- Frontend env.ts: WS_URL auto-derived from API_URL (no separate VITE_WS_URL needed) - Frontend env.ts: WS_URL auto-derived from API_URL (no separate VITE_WS_URL needed)
- Frontend types/index.ts: Added EditMessage, DeleteMessage, FetchHistory, SearchMessages, SyncMessages, MessageEdited, MessageDeleted, SearchResults, SyncChunk - Frontend types/index.ts: Added EditMessage, DeleteMessage, FetchHistory, SearchMessages, SyncMessages, MessageEdited, MessageDeleted, SearchResults, SyncChunk
- MSW handler: chat/token returns ws_url: '/api/v1/ws' - MSW handler: chat/token returns ws_url: '/api/v1/ws'
- WSUrl in ChatService.GenerateToken changed from `/ws` to `/api/v1/ws` - WSUrl in ChatService.GenerateToken changed from `/ws` to `/api/v1/ws`
### Removed ### Removed
- **Rust chat server** (`veza-chat-server`) removed from docker-compose.yml, staging.yml, prod.yml - **Rust chat server** (`veza-chat-server`) removed from docker-compose.yml, staging.yml, prod.yml
- VITE_WS_URL environment variable from Docker frontend configs (auto-derived) - VITE_WS_URL environment variable from Docker frontend configs (auto-derived)
- Dev hack for `127.0.0.1:8081` in useChat.ts - Dev hack for `127.0.0.1:8081` in useChat.ts
### Infrastructure ### Infrastructure
- Docker: Single backend binary serves both REST API and Chat WebSocket - Docker: Single backend binary serves both REST API and Chat WebSocket
- Redis PubSub: Enables horizontal scaling of chat (improvement over single-instance Rust) - Redis PubSub: Enables horizontal scaling of chat (improvement over single-instance Rust)
@ -391,6 +507,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.501] - 2026-02-22 ## [v0.501] - 2026-02-22
### Added ### Added
- **HLS Multi-bitrate Streaming**: 3-tier adaptive bitrate (128k, 256k, 320k) with hls.js ABR - **HLS Multi-bitrate Streaming**: 3-tier adaptive bitrate (128k, 256k, 320k) with hls.js ABR
- **Waveform Generation**: Async FFmpeg + audiowaveform pipeline with S3 storage and Redis cache - **Waveform Generation**: Async FFmpeg + audiowaveform pipeline with S3 storage and Redis cache
- **WaveformDisplay Component**: Interactive SVG waveform with seek support - **WaveformDisplay Component**: Interactive SVG waveform with seek support
@ -407,12 +524,14 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
- **6 new database migrations** (103-108): waveform, cloud, gear images - **6 new database migrations** (103-108): waveform, cloud, gear images
### Changed ### Changed
- QualitySelector updated to 256kbps medium tier - QualitySelector updated to 256kbps medium tier
- Track handler split into 4 focused files (handler, upload, HLS, waveform) - Track handler split into 4 focused files (handler, upload, HLS, waveform)
- Production console.log replaced with structured logger - Production console.log replaced with structured logger
- Gear handler extended with search and image endpoints - Gear handler extended with search and image endpoints
### Infrastructure ### Infrastructure
- MinIO added to docker-compose (dev, staging, prod) - MinIO added to docker-compose (dev, staging, prod)
- HLS segment cache headers (immutable, 1-year max-age) - HLS segment cache headers (immutable, 1-year max-age)
- Migration squash script and MIGRATIONS.md documentation - Migration squash script and MIGRATIONS.md documentation
@ -422,6 +541,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.404] - 2026-02-22 ## [v0.404] - 2026-02-22
### Security ### Security
- Ephemeral JWT stream-token endpoint for HLS/WebSocket auth (SEC-03) - Ephemeral JWT stream-token endpoint for HLS/WebSocket auth (SEC-03)
- SSRF protection: webhook URLs require HTTPS only (SEC-07) - SSRF protection: webhook URLs require HTTPS only (SEC-07)
- IDOR fix in GetUploadStatus with ownership verification (SEC-06) - IDOR fix in GetUploadStatus with ownership verification (SEC-06)
@ -431,10 +551,11 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
- CI credentials moved to GitHub Secrets (SEC-10) - CI credentials moved to GitHub Secrets (SEC-10)
- JWT_SECRET added to stream-server in production compose (SEC-05) - JWT_SECRET added to stream-server in production compose (SEC-05)
- Go version unified to 1.24 across Dockerfile and CI (SEC-09) - Go version unified to 1.24 across Dockerfile and CI (SEC-09)
- CD pipeline fixed (vars.* in conditions, Dockerfile.production) (SEC-01) - CD pipeline fixed (vars.\* in conditions, Dockerfile.production) (SEC-01)
- Redis authentication enabled in production compose (SEC-02) - Redis authentication enabled in production compose (SEC-02)
### Infrastructure ### Infrastructure
- Redis-backed rate limiter with in-memory fallback (INF-01) - Redis-backed rate limiter with in-memory fallback (INF-01)
- PostgreSQL aligned to v16 in test environment (INF-02) - PostgreSQL aligned to v16 in test environment (INF-02)
- Frontend CI: lint, typecheck, build steps added (INF-03) - Frontend CI: lint, typecheck, build steps added (INF-03)
@ -446,6 +567,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
- Docker healthchecks on all services (INF-09) - Docker healthchecks on all services (INF-09)
### Code Quality ### Code Quality
- 40 fmt.Printf replaced with zap structured logging (CLN-03) - 40 fmt.Printf replaced with zap structured logging (CLN-03)
- ~45 `any` types eliminated in frontend production code (CLN-04) - ~45 `any` types eliminated in frontend production code (CLN-04)
- TypeScript unified to 5.9.3 across all packages (CLN-06) - TypeScript unified to 5.9.3 across all packages (CLN-06)
@ -455,17 +577,20 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
- Protobuf definitions centralized in proto/ directory (CLN-07) - Protobuf definitions centralized in proto/ directory (CLN-07)
### Documentation ### Documentation
- ADR-001: Go+Rust architecture decision (CLN-08) - ADR-001: Go+Rust architecture decision (CLN-08)
- ADR-002: Chat server Rust->Go migration plan (INT-01) - ADR-002: Chat server Rust->Go migration plan (INT-01)
- FEATURE_STATUS.md aligned with actual code state (CLN-05) - FEATURE_STATUS.md aligned with actual code state (CLN-05)
- PROJECT_STATE.md updated with v0.404 metrics (FIN-02) - PROJECT_STATE.md updated with v0.404 metrics (FIN-02)
### Testing ### Testing
- 5 cross-service E2E integration tests (INT-03) - 5 cross-service E2E integration tests (INT-03)
- 51 unit tests added across Rust services (INT-05) - 51 unit tests added across Rust services (INT-05)
- 2 skipped backend tests fixed, 11 clarified (INT-04) - 2 skipped backend tests fixed, 11 clarified (INT-04)
### Integration ### Integration
- HLS transcoding triggered after track upload (INT-02) - HLS transcoding triggered after track upload (INT-02)
--- ---
@ -475,21 +600,21 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
### Added ### Added
- **Lot P1 — Checkout Hyperswitch production-ready** - **Lot P1 — Checkout Hyperswitch production-ready**
- Return URL with `order_id` for success/error pages - Return URL with `order_id` for success/error pages
- CheckoutSuccessView, CheckoutErrorView, CheckoutCompletePage - CheckoutSuccessView, CheckoutErrorView, CheckoutCompletePage
- Route `/checkout/complete` (protected) - Route `/checkout/complete` (protected)
- Webhook: handle `cancelled` status in ProcessPaymentWebhook - Webhook: handle `cancelled` status in ProcessPaymentWebhook
- CheckoutPaymentForm (Hyperswitch) in Cart when `client_secret` returned - CheckoutPaymentForm (Hyperswitch) in Cart when `client_secret` returned
- marketplaceService.getOrder(orderId) - marketplaceService.getOrder(orderId)
- **Lot P2 — Codes promo / réductions** - **Lot P2 — Codes promo / réductions**
- Migrations 099 (promo_codes), 100 (orders discount fields) - Migrations 099 (promo_codes), 100 (orders discount fields)
- PromoCode model, ValidatePromoCode, validatePromoCodeTx - PromoCode model, ValidatePromoCode, validatePromoCodeTx
- GET /commerce/promo/:code - GET /commerce/promo/:code
- CreateOrder and Checkout accept `promo_code` (percent/fixed) - CreateOrder and Checkout accept `promo_code` (percent/fixed)
- PromoCodeModal connected to validatePromoCode API - PromoCodeModal connected to validatePromoCode API
- Cart: PromoCodeModal, OrderSummary with discount, promo_code at checkout - Cart: PromoCodeModal, OrderSummary with discount, promo_code at checkout
- MSW handlers for promo, orders/:id, checkout with promo_code - MSW handlers for promo, orders/:id, checkout with promo_code
- Stories: CheckoutSuccessView, CheckoutErrorView, PromoCodeModal - Stories: CheckoutSuccessView, CheckoutErrorView, PromoCodeModal
### Changed ### Changed
@ -504,30 +629,30 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
### Added ### Added
- **Lot M1 — Produits & Catalogue** - **Lot M1 — Produits & Catalogue**
- Migrations 095-097 : products enrichment (bpm, musical_key, category), product_previews, product_images - Migrations 095-097 : products enrichment (bpm, musical_key, category), product_previews, product_images
- ProductPreview, ProductImage models, CreateProduct/UpdateProduct accept bpm, musical_key, category - ProductPreview, ProductImage models, CreateProduct/UpdateProduct accept bpm, musical_key, category
- POST /marketplace/products/:id/preview (audio preview upload) - POST /marketplace/products/:id/preview (audio preview upload)
- PUT /marketplace/products/:id/images - PUT /marketplace/products/:id/images
- GET /marketplace/products/:id/preview (stream audio) - GET /marketplace/products/:id/preview (stream audio)
- ListProducts filters: bpm, musical_key, category - ListProducts filters: bpm, musical_key, category
- CreateProductView connected to enriched API, BPM/Key/Category filters in MarketplaceHome - CreateProductView connected to enriched API, BPM/Key/Category filters in MarketplaceHome
- ProductDetailView: playable preview, image gallery - ProductDetailView: playable preview, image gallery
- Rich text description (sanitization backend, toolbar Bold/List frontend) - Rich text description (sanitization backend, toolbar Bold/List frontend)
- **Lot M2 — Licences & Droits** - **Lot M2 — Licences & Droits**
- Migration 098 : product_licenses (license_type, price_cents, terms_text) - Migration 098 : product_licenses (license_type, price_cents, terms_text)
- ProductLicense model, SetProductLicenses, GetProductLicenses - ProductLicense model, SetProductLicenses, GetProductLicenses
- CreateProduct/UpdateProduct accept licenses array - CreateProduct/UpdateProduct accept licenses array
- GET /marketplace/licenses/mine (user's purchased licenses with download_url) - GET /marketplace/licenses/mine (user's purchased licenses with download_url)
- LicenceCard, LicenceDetailsModal: license_type, price_cents, terms_text - LicenceCard, LicenceDetailsModal: license_type, price_cents, terms_text
- LicensesView in PurchasesPage with download links - LicensesView in PurchasesPage with download links
- **Lot M3 — Seller dashboard enrichi** - **Lot M3 — Seller dashboard enrichi**
- GET /sell/stats/evolution (day/week/month) - GET /sell/stats/evolution (day/week/month)
- GET /sell/stats/top-products - GET /sell/stats/top-products
- GET /sell/sales (real sales data) - GET /sell/sales (real sales data)
- commerceService: getSales, getSellerStatsEvolution, getSellerTopProducts (real API) - commerceService: getSales, getSellerStatsEvolution, getSellerTopProducts (real API)
- SalesEvolutionChart (Recharts LineChart) - SalesEvolutionChart (Recharts LineChart)
- Top Products section with real revenue/sales_count - Top Products section with real revenue/sales_count
- Conversion rate: N/A when no tracking - Conversion rate: N/A when no tracking
### Changed ### Changed
@ -541,11 +666,11 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
### Added ### Added
- **Lot C2 — Chat appels WebRTC 1-to-1** - **Lot C2 — Chat appels WebRTC 1-to-1**
- Chat Server : signalisation CallOffer, CallAnswer, ICECandidate, CallHangup, CallReject - Chat Server : signalisation CallOffer, CallAnswer, ICECandidate, CallHangup, CallReject
- WebSocketManager.send_to_user pour livraison 1-to-1 - WebSocketManager.send_to_user pour livraison 1-to-1
- RateLimitAction::CallSignaling (60 req/min) - RateLimitAction::CallSignaling (60 req/min)
- Frontend : useWebRTC hook, CallButton, IncomingCallModal, ActiveCallBar - Frontend : useWebRTC hook, CallButton, IncomingCallModal, ActiveCallBar
- Appels audio 1-to-1 dans conversations DM - Appels audio 1-to-1 dans conversations DM
--- ---
@ -554,24 +679,24 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
### Added ### Added
- **Lot S2 — Groupes avancés** - **Lot S2 — Groupes avancés**
- Demander à rejoindre (groupes privés), approbation/rejet par admin - Demander à rejoindre (groupes privés), approbation/rejet par admin
- Inviter membres par email ou user_id - Inviter membres par email ou user_id
- Rôles assign/revoke (admin, moderator, member) - Rôles assign/revoke (admin, moderator, member)
- Feed type=groups (posts des membres des groupes) - Feed type=groups (posts des membres des groupes)
- GET /social/groups/mine - GET /social/groups/mine
- Migrations 069, 089, 092 - Migrations 069, 089, 092
- **Lot N1 — Notifications push Web** - **Lot N1 — Notifications push Web**
- POST /notifications/push/subscribe, PushService (webpush-go) - POST /notifications/push/subscribe, PushService (webpush-go)
- Envoi push sur follow/like/comment/message (selon préférences) - Envoi push sur follow/like/comment/message (selon préférences)
- GET/PUT /notifications/preferences - GET/PUT /notifications/preferences
- Migrations 090, 093 - Migrations 090, 093
- Frontend : subscribePush, PushPreferencesSection, badge document.title - Frontend : subscribePush, PushPreferencesSection, badge document.title
- **Lot P2 — Présence enrichie** - **Lot P2 — Présence enrichie**
- PUT /users/me/presence (status_message, track_id, track_title, invisible) - PUT /users/me/presence (status_message, track_id, track_title, invisible)
- Rich presence : sync track en cours via usePresenceSync - Rich presence : sync track en cours via usePresenceSync
- Mode invisible (GetPresenceForViewer masque pour les autres) - Mode invisible (GetPresenceForViewer masque pour les autres)
- PresenceBadge statusMessage tooltip - PresenceBadge statusMessage tooltip
- Migrations 091, 094 - Migrations 091, 094
### Changed ### Changed
@ -589,24 +714,24 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
### Added ### Added
- **Lot P0 — Chat Server** - **Lot P0 — Chat Server**
- Protocole typing aligné : `{ type: 'Typing', conversation_id, is_typing }` - Protocole typing aligné : `{ type: 'Typing', conversation_id, is_typing }`
- Limitation JWT auth (query param) documentée pour v0.302 - Limitation JWT auth (query param) documentée pour v0.302
- **Lot C1 — Chat avancé** - **Lot C1 — Chat avancé**
- Typing indicators end-to-end (UserTyping, setUserTyping) - Typing indicators end-to-end (UserTyping, setUserTyping)
- Read receipts (MarkAsRead, MessageRead, « Vu à HH:mm ») - Read receipts (MarkAsRead, MessageRead, « Vu à HH:mm »)
- Delivered status (Delivered, MessageDelivered) - Delivered status (Delivered, MessageDelivered)
- **Lot P1 — Présence** - **Lot P1 — Présence**
- Migration 088 user_presence (status, last_seen_at, status_message) - Migration 088 user_presence (status, last_seen_at, status_message)
- PresenceService, GET /users/:id/presence - PresenceService, GET /users/:id/presence
- Mise à jour last_seen_at sur chaque requête authentifiée - Mise à jour last_seen_at sur chaque requête authentifiée
- PresenceBadge, usePresence, intégration ChatSidebar - PresenceBadge, usePresence, intégration ChatSidebar
- **Lot S1 — Social enrichi** - **Lot S1 — Social enrichi**
- Feed connecté à socialService.getFeed (remplace trackService.list) - Feed connecté à socialService.getFeed (remplace trackService.list)
- Backend : enrichissement actor_name, actor_avatar, track dans GetGlobalFeed - Backend : enrichissement actor_name, actor_avatar, track dans GetGlobalFeed
- SocialViewFeedItem : posts texte + posts avec track (mini player) - SocialViewFeedItem : posts texte + posts avec track (mini player)
- Pagination cursor (next_cursor), useInfiniteQuery, Load More - Pagination cursor (next_cursor), useInfiniteQuery, Load More
- GET /social/explore (trending + suggested_users), onglet Explore - GET /social/explore (trending + suggested_users), onglet Explore
- Filtres feed : all | following | groups (param type, OptionalAuth pour following) - Filtres feed : all | following | groups (param type, OptionalAuth pour following)
### Changed ### Changed
@ -625,24 +750,24 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
### Added ### Added
- **Lot L — Social Trending** - **Lot L — Social Trending**
- GET /social/trending (extraction hashtags posts 7 jours, agrégation) - GET /social/trending (extraction hashtags posts 7 jours, agrégation)
- Cache Redis 15 min (clé trending:hashtags) - Cache Redis 15 min (clé trending:hashtags)
- SocialViewTrending connecté à lAPI (Loading, Error, Empty fallback) - SocialViewTrending connecté à lAPI (Loading, Error, Empty fallback)
- MSW handler GET */api/v1/social/trending - MSW handler GET \*/api/v1/social/trending
- **Lot K — Recherche enrichie** - **Lot K — Recherche enrichie**
- Migration 086 pg_trgm pour fuzzy search - Migration 086 pg_trgm pour fuzzy search
- TrackSearchService : similarity() sur title/artist/album (PostgreSQL), fallback ILIKE (SQLite) - TrackSearchService : similarity() sur title/artist/album (PostgreSQL), fallback ILIKE (SQLite)
- query_parser.go : AND, OR, NOT, "phrase exacte" - query_parser.go : AND, OR, NOT, "phrase exacte"
- SearchService + TrackSearchService utilisent le parser - SearchService + TrackSearchService utilisent le parser
- SearchPageHeader : tooltip aide syntaxe - SearchPageHeader : tooltip aide syntaxe
- **Lot D1 — Queue collaborative** - **Lot D1 — Queue collaborative**
- Migration 087 queue_sessions, shared_queue_items - Migration 087 queue_sessions, shared_queue_items
- Modèles QueueSession, SharedQueueItem - Modèles QueueSession, SharedQueueItem
- QueueSessionService : Create, Get, Delete, Add/Remove items - QueueSessionService : Create, Get, Delete, Add/Remove items
- POST/GET/DELETE /queue/session, POST/DELETE /queue/session/:token/items - POST/GET/DELETE /queue/session, POST/DELETE /queue/session/:token/items
- PlayerQueue : bouton Partager, badge Queue partagée, polling 8 s - PlayerQueue : bouton Partager, badge Queue partagée, polling 8 s
- queueSessionStore, useQueueSync mode session - queueSessionStore, useQueueSync mode session
- MSW handlers pour queue session - MSW handlers pour queue session
### Changed ### Changed
@ -663,25 +788,25 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
### Added ### Added
- **Lot G — Recherche avancée** - **Lot G — Recherche avancée**
- Filtre musical_key dans track_search (G1) - Filtre musical_key dans track_search (G1)
- Tri pertinence (relevance) dans SearchService (G2) - Tri pertinence (relevance) dans SearchService (G2)
- Autocomplete : GET /search/suggestions, dropdown debounced (G3) - Autocomplete : GET /search/suggestions, dropdown debounced (G3)
- Facettes type (tracks/artistes/playlists/users) dans SearchPage (G4) - Facettes type (tracks/artistes/playlists/users) dans SearchPage (G4)
- Historique recherche localStorage (G5) - Historique recherche localStorage (G5)
- **Lot H — Analytics créateur** - **Lot H — Analytics créateur**
- GET /analytics/creator/stats, carte Completion Rate (H1) - GET /analytics/creator/stats, carte Completion Rate (H1)
- GET /analytics/creator/charts, graphiques (H2) - GET /analytics/creator/charts, graphiques (H2)
- Taux de complétion intégré dashboard (H3) - Taux de complétion intégré dashboard (H3)
- GET /analytics/creator/export CSV/JSON (H4) - GET /analytics/creator/export CSV/JSON (H4)
- **Lot F — Seller dashboard** - **Lot F — Seller dashboard**
- GET /sell/stats, connexion commerceService (F1) - GET /sell/stats, connexion commerceService (F1)
- Support seller_id=me dans ListProducts (F2) - Support seller_id=me dans ListProducts (F2)
- **Lot C — Player avancé** - **Lot C — Player avancé**
- Crossfade configurable (112 s) depuis Settings (C1) - Crossfade configurable (112 s) depuis Settings (C1)
- Gapless préchargement via preloadTrack (C2) - Gapless préchargement via preloadTrack (C2)
- PiP (Picture-in-Picture) si supporté (C3) - PiP (Picture-in-Picture) si supporté (C3)
- **Lot D — Autoplay** - **Lot D — Autoplay**
- GET /tracks/recommendations (auth), section « À écouter ensuite » dans PlayerQueue (D2) - GET /tracks/recommendations (auth), section « À écouter ensuite » dans PlayerQueue (D2)
### Changed ### Changed
@ -704,10 +829,10 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
### Added ### Added
- **Lot E — Métadonnées enrichies** - **Lot E — Métadonnées enrichies**
- BPM : champ dans Track model, UpdateTrack, filtre track_search (E1) - BPM : champ dans Track model, UpdateTrack, filtre track_search (E1)
- Musical key : champ, input/select édition, affichage TrackDetailPageInfo (E2) - Musical key : champ, input/select édition, affichage TrackDetailPageInfo (E2)
- Lyrics : table track_lyrics, GET/PUT /tracks/:id/lyrics, section Paroles avec toggle (E3) - Lyrics : table track_lyrics, GET/PUT /tracks/:id/lyrics, section Paroles avec toggle (E3)
- Tags suggérés : GET /tracks/suggested-tags?genre=X, migration tracks.tags, chips + dropdown (E4) - Tags suggérés : GET /tracks/suggested-tags?genre=X, migration tracks.tags, chips + dropdown (E4)
### Changed ### Changed
@ -724,11 +849,13 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.103] - 2026-02-20 ## [v0.103] - 2026-02-20
### Added ### Added
- **Auth (Lot A)** : OAuth Spotify (A1), page Sessions enrichie avec historique et révocation (A4) - **Auth (Lot A)** : OAuth Spotify (A1), page Sessions enrichie avec historique et révocation (A4)
- **Profils (Lot B)** : Bannière de profil éditable (B1), section liens sociaux sur profil public (B2), toggle profil privé dans Settings (B3) - **Profils (Lot B)** : Bannière de profil éditable (B1), section liens sociaux sur profil public (B2), toggle profil privé dans Settings (B3)
- **Profil privé** : Vue « Profil privé » sur `/u/:username` quand le profil est masqué ; `is_public` exposé et persisté - **Profil privé** : Vue « Profil privé » sur `/u/:username` quand le profil est masqué ; `is_public` exposé et persisté
### Documented ### Documented
- 2FA SMS et Passkeys/WebAuthn reportés à v0.104 - 2FA SMS et Passkeys/WebAuthn reportés à v0.104
--- ---
@ -736,6 +863,7 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [v0.102] - 2026-02-20 ## [v0.102] - 2026-02-20
### Added ### Added
- **Queue persistante** : API CRUD (`GET/PUT/POST/DELETE /api/v1/queue`), sync frontend via `useQueueSync`, drag & drop reorder avec @dnd-kit (B3) - **Queue persistante** : API CRUD (`GET/PUT/POST/DELETE /api/v1/queue`), sync frontend via `useQueueSync`, drag & drop reorder avec @dnd-kit (B3)
- **Developer API Keys** : CRUD clés API, X-API-Key middleware, CreateAPIKeyModal, révocation - **Developer API Keys** : CRUD clés API, X-API-Key middleware, CreateAPIKeyModal, révocation
- **Playlists** : activation PLAYLIST_SHARE, PLAYLIST_RECOMMENDATIONS ; boutons Export (JSON/CSV), Duplicate connectés - **Playlists** : activation PLAYLIST_SHARE, PLAYLIST_RECOMMENDATIONS ; boutons Export (JSON/CSV), Duplicate connectés
@ -743,10 +871,12 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
- **Player** : playback speed (0.5x2x), Media Session API, waveform dans progress bar - **Player** : playback speed (0.5x2x), Media Session API, waveform dans progress bar
### Changed ### Changed
- **Gear, Live, Queue, Developer** : routes opérationnelles (fin des placeholders Coming Soon) - **Gear, Live, Queue, Developer** : routes opérationnelles (fin des placeholders Coming Soon)
- Feature flags PLAYLIST_SHARE et PLAYLIST_RECOMMENDATIONS activés (true) - Feature flags PLAYLIST_SHARE et PLAYLIST_RECOMMENDATIONS activés (true)
### Documented ### Documented
- Go Live (streaming vidéo) : non implémenté, prévu v0.703 — limitation A6 - Go Live (streaming vidéo) : non implémenté, prévu v0.703 — limitation A6
- Social Trending (tags) : statique, report v0.103 pour `GET /social/trending` - Social Trending (tags) : statique, report v0.103 pour `GET /social/trending`
@ -755,26 +885,30 @@ Première release commerciale de la plateforme Veza. Voir [RELEASE_NOTES_V1.md](
## [Unreleased] - 2024-12-07 ## [Unreleased] - 2024-12-07
### Security ### Security
- **chat-server**: Implemented JWT Authentication Middleware for HTTP API. - **chat-server**: Implemented JWT Authentication Middleware for HTTP API.
- Secured `/api/messages` (POST) and `/api/messages/{id}` (GET). - Secured `/api/messages` (POST) and `/api/messages/{id}` (GET).
- Enforced permission checks (`can_send_message`, `can_read_conversation`). - Enforced permission checks (`can_send_message`, `can_read_conversation`).
- Patched `sender_id` spoofing vulnerability by enforcing User ID from Token Claims. - Patched `sender_id` spoofing vulnerability by enforcing User ID from Token Claims.
- **backend**: Resolved `veza_errors_total` metric collision preventing proper monitoring initialization. - **backend**: Resolved `veza_errors_total` metric collision preventing proper monitoring initialization.
### Fixed ### Fixed
- **backend**: Fixed `JobWorker` starvation issue by replacing blocking `time.Sleep` with non-blocking scheduler. - **backend**: Fixed `JobWorker` starvation issue by replacing blocking `time.Sleep` with non-blocking scheduler.
- **stream-server**: Improved task safety by replacing unsafe `abort()` with graceful `join/await` for monitoring tasks. - **stream-server**: Improved task safety by replacing unsafe `abort()` with graceful `join/await` for monitoring tasks.
- **chat-server**: Fixed resource leak by implementing 60s WebSocket inactivity/heartbeat timeout. - **chat-server**: Fixed resource leak by implementing 60s WebSocket inactivity/heartbeat timeout.
- **chat-server**: Implemented Graceful Shutdown handling for OS signals (SIGTERM/SIGINT). - **chat-server**: Implemented Graceful Shutdown handling for OS signals (SIGTERM/SIGINT).
- **backend-tests**: Fixed `RoomHandler` unit tests. - **backend-tests**: Fixed `RoomHandler` unit tests.
- Refactored `RoomHandler` to use `RoomServiceInterface` for dependency injection. - Refactored `RoomHandler` to use `RoomServiceInterface` for dependency injection.
- Updated `CreateRoom` tests to match actual Service signatures. - Updated `CreateRoom` tests to match actual Service signatures.
- Fixed `bitrate_handler_test.go` compilation errors. - Fixed `bitrate_handler_test.go` compilation errors.
- Resolved global metric registration panics during testing. - Resolved global metric registration panics during testing.
### Removed ### Removed
- **backend**: Deleted legacy maintenance code (`migrations_legacy/` and `src/cmd/main.go.legacy`). - **backend**: Deleted legacy maintenance code (`migrations_legacy/` and `src/cmd/main.go.legacy`).
### Known Issues ### Known Issues
- **backend**: Some unit tests (`metrics_test.go`, `profile_handler_test.go`, `system_metrics_test.go`) are disabled due to bitrot/missing dependencies. - **backend**: Some unit tests (`metrics_test.go`, `profile_handler_test.go`, `system_metrics_test.go`) are disabled due to bitrot/missing dependencies.
- **stream-server**: Compilation requires active Database connection (sqlx compile-time verification) or `sqlx-data.json`. - **stream-server**: Compilation requires active Database connection (sqlx compile-time verification) or `sqlx-data.json`.

View file

@ -1 +1 @@
1.0.2 1.0.4

View file

@ -1,270 +1,270 @@
# Statut des fonctionnalités — Veza # Statut des fonctionnalités — Veza
**Dernière mise à jour** : mars 2026 — v0.971 (Phantom: gamification supprimé, WebRTC Beta) **Dernière mise à jour** : avril 2026 — v1.0.4 (release cleanup post-audit, CI verte, dette RGPD fermée)
Ce document décrit le statut réel des fonctionnalités par rapport au code. Ce document décrit le statut réel des fonctionnalités par rapport au code.
## Fonctionnalités opérationnelles (19) ## Fonctionnalités opérationnelles (19)
| Feature | Frontend | Backend | Notes | | Feature | Frontend | Backend | Notes |
|---------|----------|---------|-------| | ------------------------------------------------------- | -------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Auth (register, login, JWT, refresh) | Oui | Oui | Complet | | Auth (register, login, JWT, refresh) | Oui | Oui | Complet |
| 2FA (TOTP) | Oui | Oui | Complet | | 2FA (TOTP) | Oui | Oui | Complet |
| OAuth (Google, GitHub, Discord, Spotify) | Oui | Oui | Opérationnel (v0.601) — tous les fournisseurs | | OAuth (Google, GitHub, Discord, Spotify) | Oui | Oui | Opérationnel (v0.601) — tous les fournisseurs |
| Profils utilisateur | Oui | Oui | Bannière, liens sociaux, profil privé (v0.103 B1-B3) | | Profils utilisateur | Oui | Oui | Bannière, liens sociaux, profil privé (v0.103 B1-B3) |
| Upload de tracks | Oui | Oui | Complet | | Upload de tracks | Oui | Oui | Complet |
| CRUD Tracks | Oui | Oui | Complet — BPM, musical_key, lyrics, tags (v0.201 Lot E) | | CRUD Tracks | Oui | Oui | Complet — BPM, musical_key, lyrics, tags (v0.201 Lot E) |
| Playlists (CRUD, collaboration) | Oui | Oui | Complet | | Playlists (CRUD, collaboration) | Oui | Oui | Complet |
| Chat WebSocket | Oui | Oui | Opérationnel — réécrit en Go (v0.502), intégré dans backend API | | Chat WebSocket | Oui | Oui | Opérationnel — réécrit en Go (v0.502), intégré dans backend API |
| Dashboard | Oui | Oui | GET /api/v1/dashboard | | 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 | | 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) | | 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. v0.803 : Modération (reports), Maintenance mode, Annonces, Feature flags DB | | 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 | | 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 | | Webhooks | Oui | Oui | Complet |
| Inventory / Gear | Oui | Oui | GET/POST/PUT/DELETE /api/v1/inventory/gear. v0.802 : documents CRUD, repairs CRUD, warranty notifier | | Inventory / Gear | Oui | Oui | GET/POST/PUT/DELETE /api/v1/inventory/gear. v0.802 : documents CRUD, repairs CRUD, warranty notifier |
| Live Streaming (métadonnées) | Oui | Oui | GET /api/v1/live/streams — stream vidéo via Stream Server. v0.703 : Go Live, stream key, chat WebSocket, viewer count | | Live Streaming (métadonnées) | Oui | Oui | GET /api/v1/live/streams — stream vidéo via Stream Server. v0.703 : Go Live, stream key, chat WebSocket, viewer count |
| Analytics | Oui | Oui | Routes /api/v1/analytics/*. v0.202 : creator stats/charts/export (Lot H) | | Analytics | Oui | Oui | Routes /api/v1/analytics/\*. v0.202 : creator stats/charts/export (Lot H) |
| Roles | Oui | Oui | Assign, revoke — flag ROLE_MANAGEMENT | | Roles | Oui | Oui | Assign, revoke — flag ROLE_MANAGEMENT |
| Notifications | Oui | Oui | Création auto follow/like/comment. v0.302 : Web Push, préférences | | Notifications | Oui | Oui | Création auto follow/like/comment. v0.302 : Web Push, préférences |
## Fonctionnalités fantômes (UI sans backend) ## Fonctionnalités fantômes (UI sans backend)
| Feature | Localisation | Statut | | Feature | Localisation | Statut |
|---------|-------------|--------| | ------------------------------- | ------------ | ---------------- |
| **Studio** (Cloud File Browser) | Supprimé | Dossier supprimé | | **Studio** (Cloud File Browser) | Supprimé | Dossier supprimé |
| **Education** | Supprimé | Dossier supprimé | | **Education** | Supprimé | Dossier supprimé |
## Abandonné v1.0 (reporté versions futures) ## Abandonné v1.0 (reporté versions futures)
| Feature | Version cible | | Feature | Version cible |
|---------|---------------| | ------------------------------------------------ | -------------------------------- |
| **Gamification** (achievements, leaderboard, XP) | v1.3 — supprimé v0.971 (phantom) | | **Gamification** (achievements, leaderboard, XP) | v1.3 — supprimé v0.971 (phantom) |
## Fonctionnalités désactivées (feature flags) ## Fonctionnalités désactivées (feature flags)
| Feature | Flag | Backend | | Feature | Flag | Backend |
|---------|------|---------| | ------------------------ | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| HLS Streaming | `HLS_STREAMING: true` (v0.101) | Opérationnel (v0.503) — Backend serving routes (master.m3u8, quality playlists, segments), frontend ABR player, HLS_STREAMING feature flag. | | HLS Streaming | `HLS_STREAMING: true` (v0.101) | Opérationnel (v0.503) — Backend serving routes (master.m3u8, quality playlists, segments), frontend ABR player, HLS_STREAMING feature flag. |
| Role Management | `ROLE_MANAGEMENT` | Opérationnel si activé | | Role Management | `ROLE_MANAGEMENT` | Opérationnel si activé |
| Playlist Share | `PLAYLIST_SHARE: true` (v0.102) | Opérationnel | | Playlist Share | `PLAYLIST_SHARE: true` (v0.102) | Opérationnel |
| Playlist Recommendations | `PLAYLIST_RECOMMENDATIONS: true` (v0.102) | Opérationnel | | Playlist Recommendations | `PLAYLIST_RECOMMENDATIONS: true` (v0.102) | Opérationnel |
## Limitations connues (report versions futures) ## Limitations connues (report versions futures)
| Feature | Limitation | Version cible | | Feature | Limitation | Version cible |
|---------|------------|--------------| | ----------------------------- | ---------------------------------------------------------------------------------------------------------- | ------------------------ |
| **Go Live** (streaming vidéo) | Livré v0.703 — page /live/go-live, stream key, OBS instructions | — | | **Go Live** (streaming vidéo) | Livré v0.703 — page /live/go-live, stream key, OBS instructions | — |
| **Appels WebRTC** | Beta — fonctionne mieux sur le même réseau local (TURN/STUN v1.1) | v1.1 (flag WEBRTC_CALLS) | | **Appels WebRTC** | Beta — fonctionne mieux sur le même réseau local (TURN/STUN v1.1) | v1.1 (flag WEBRTC_CALLS) |
| **2FA SMS** | Option « Envoyer par SMS » pendant la vérification 2FA — requiert infra Twilio + users.phone_number | v0.104 | | **2FA SMS** | Option « Envoyer par SMS » pendant la vérification 2FA — requiert infra Twilio + users.phone_number | v0.104 |
| **Passkeys / WebAuthn** | Login sans mot de passe — requiert go-webauthn, table webauthn_credentials, frontend navigator.credentials | v0.104 | | **Passkeys / WebAuthn** | Login sans mot de passe — requiert go-webauthn, table webauthn_credentials, frontend navigator.credentials | v0.104 |
## Livré en v0.202 ## Livré en v0.202
| Lot | Feature | | Lot | Feature |
|-----|---------| | --- | ---------------------------------------------------------------------------------------- |
| G | Recherche avancée (musical_key, tri pertinence, autocomplete, facettes type, historique) | | G | Recherche avancée (musical_key, tri pertinence, autocomplete, facettes type, historique) |
| H | Analytics créateur (stats, graphiques, taux complétion, export CSV/JSON) | | H | Analytics créateur (stats, graphiques, taux complétion, export CSV/JSON) |
| F | Seller dashboard (GET /sell/stats, liste produits marketplace) | | F | Seller dashboard (GET /sell/stats, liste produits marketplace) |
| C | Player (crossfade, gapless preload, PiP) | | C | Player (crossfade, gapless preload, PiP) |
| D | Autoplay (GET /tracks/recommendations, section « À écouter ensuite » dans PlayerQueue) | | D | Autoplay (GET /tracks/recommendations, section « À écouter ensuite » dans PlayerQueue) |
## Livré en v0.203 ## Livré en v0.203
| Lot | Feature | | Lot | Feature |
|-----|---------| | --- | --------------------------------------------------------------------------------------- |
| L | Social Trending : GET /social/trending, cache Redis, SocialViewTrending connecté | | L | Social Trending : GET /social/trending, cache Redis, SocialViewTrending connecté |
| K | Recherche enrichie : pg_trgm fuzzy, opérateurs AND/OR/NOT/"phrase exacte", tooltip aide | | K | Recherche enrichie : pg_trgm fuzzy, opérateurs AND/OR/NOT/"phrase exacte", tooltip aide |
| D1 | Queue collaborative : sessions partagées, bouton Partager, polling sync, MSW handlers | | D1 | Queue collaborative : sessions partagées, bouton Partager, polling sync, MSW handlers |
Voir [V0_203_RELEASE_SCOPE.md](V0_203_RELEASE_SCOPE.md) pour le détail. Voir [V0_203_RELEASE_SCOPE.md](V0_203_RELEASE_SCOPE.md) pour le détail.
## Livré en v0.301 (Phase 3 Social) ## Livré en v0.301 (Phase 3 Social)
| Lot | Feature | | Lot | Feature |
|-----|---------| | --- | --------------------------------------------------------------------------------------------------------------------- |
| P0 | Chat Server : protocole typing aligné, auth WebSocket documenté | | P0 | Chat Server : protocole typing aligné, auth WebSocket documenté |
| C1 | Chat avancé : typing indicators, read receipts, delivered status | | C1 | Chat avancé : typing indicators, read receipts, delivered status |
| P1 | Présence : migration 088, GET /users/:id/presence, PresenceBadge, last_seen sur requêtes auth | | P1 | Présence : migration 088, GET /users/:id/presence, PresenceBadge, last_seen sur requêtes auth |
| S1 | Social enrichi : feed connecté API, enrichi actor/track, pagination cursor, explore tab, filtres all/following/groups | | S1 | Social enrichi : feed connecté API, enrichi actor/track, pagination cursor, explore tab, filtres all/following/groups |
Voir [V0_301_RELEASE_SCOPE.md](archive/V0_301_RELEASE_SCOPE.md) pour le détail. Voir [V0_301_RELEASE_SCOPE.md](archive/V0_301_RELEASE_SCOPE.md) pour le détail.
## Livré en v0.302 (Phase 3 Social — suite) ## Livré en v0.302 (Phase 3 Social — suite)
| Lot | Feature | | Lot | Feature |
|-----|---------| | --- | --------------------------------------------------------------------------------------------------------------- |
| S2 | Groupes avancés : demander à rejoindre (privé), inviter membres, rôles assign/revoke, feed groupes, mes groupes | | S2 | Groupes avancés : demander à rejoindre (privé), inviter membres, rôles assign/revoke, feed groupes, mes groupes |
| N1 | Notifications push : Web Push subscription, envoi sur follow/like/comment/message, préférences, badge titre | | N1 | Notifications push : Web Push subscription, envoi sur follow/like/comment/message, préférences, badge titre |
| P2 | Présence enrichie : rich presence (track en cours), mode invisible, PUT /users/me/presence | | P2 | Présence enrichie : rich presence (track en cours), mode invisible, PUT /users/me/presence |
## Livré en v0.303 ## Livré en v0.303
| Lot | Feature | | Lot | Feature |
|-----|---------| | --- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| C2 | Chat appels : WebRTC audio 1-to-1, signalisation via WebSocket (CallOffer, CallAnswer, ICECandidate, CallHangup, CallReject), CallButton, IncomingCallModal, ActiveCallBar | | C2 | Chat appels : WebRTC audio 1-to-1, signalisation via WebSocket (CallOffer, CallAnswer, ICECandidate, CallHangup, CallReject), CallButton, IncomingCallModal, ActiveCallBar |
## Livré en v0.401 (Phase 4 Commerce) ## Livré en v0.401 (Phase 4 Commerce)
| Lot | Feature | | Lot | Feature |
|-----|---------| | --- | ------------------------------------------------------------------------------------------------------------------------- |
| M1 | Produits & Catalogue : BPM, musical_key, category, previews, images, filtres MarketplaceHome, rich text description | | M1 | Produits & Catalogue : BPM, musical_key, category, previews, images, filtres MarketplaceHome, rich text description |
| M2 | Licences & Droits : product_licenses, types/conditions, GET /licenses/mine, LicenceCard/LicenceDetailsModal, LicensesView | | M2 | Licences & Droits : product_licenses, types/conditions, GET /licenses/mine, LicenceCard/LicenceDetailsModal, LicensesView |
| M3 | Seller dashboard enrichi : evolution chart, top products, real sales, conversion N/A | | M3 | Seller dashboard enrichi : evolution chart, top products, real sales, conversion N/A |
Voir [V0_401_RELEASE_SCOPE.md](archive/V0_401_RELEASE_SCOPE.md) pour le détail. Voir [V0_401_RELEASE_SCOPE.md](archive/V0_401_RELEASE_SCOPE.md) pour le détail.
## Livré en v0.402 (Phase 4 Commerce — checkout & codes promo) ## Livré en v0.402 (Phase 4 Commerce — checkout & codes promo)
| Lot | Feature | | Lot | Feature |
|-----|---------| | --- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| P1 | Checkout Hyperswitch production-ready : return URL avec order_id, CheckoutSuccessView/CheckoutErrorView, webhook cancelled, CheckoutPaymentForm dans Cart | | P1 | Checkout Hyperswitch production-ready : return URL avec order_id, CheckoutSuccessView/CheckoutErrorView, webhook cancelled, CheckoutPaymentForm dans Cart |
| P2 | Codes promo / réductions : promo_codes, ValidatePromoCode, GET /commerce/promo/:code, CreateOrder/Checkout avec promo_code, PromoCodeModal connecté, OrderSummary dans Cart | | P2 | Codes promo / réductions : promo_codes, ValidatePromoCode, GET /commerce/promo/:code, CreateOrder/Checkout avec promo_code, PromoCodeModal connecté, OrderSummary dans Cart |
Voir [V0_402_RELEASE_SCOPE.md](V0_402_RELEASE_SCOPE.md) pour le détail. Voir [V0_402_RELEASE_SCOPE.md](V0_402_RELEASE_SCOPE.md) pour le détail.
## Livré en v0.502 (Phase 5 — Chat Server Rewrite) ## Livré en v0.502 (Phase 5 — Chat Server Rewrite)
| Lot | Feature | | Lot | Feature |
|-----|---------| | --- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| CH | Chat Server Rust → Go : WebSocket intégré dans backend API (`/api/v1/ws`), 39 types messages (19 in + 20 out), Hub/Client goroutines, PermissionService, RateLimiter in-memory, ChatPubSubService Redis, 4 migrations (109-112), 15 tests unitaires, E2E tests | | CH | Chat Server Rust → Go : WebSocket intégré dans backend API (`/api/v1/ws`), 39 types messages (19 in + 20 out), Hub/Client goroutines, PermissionService, RateLimiter in-memory, ChatPubSubService Redis, 4 migrations (109-112), 15 tests unitaires, E2E tests |
## Livré en v0.503 (Phase 5 — HLS E2E + Chat Hardening + Cleanup) ## Livré en v0.503 (Phase 5 — HLS E2E + Chat Hardening + Cleanup)
| Lot | Feature | | Lot | Feature |
|-----|---------| | --- | -------------------------------------------------------------------------- |
| SS1 | HLS Streaming E2E (backend routes + frontend ABR player) | | SS1 | HLS Streaming E2E (backend routes + frontend ABR player) |
| CH1 | Chat Redis rate limiter (sliding window + in-memory fallback) | | CH1 | Chat Redis rate limiter (sliding window + in-memory fallback) |
| CH1 | Chat persistent presence (Redis-backed, 2min TTL) | | CH1 | Chat persistent presence (Redis-backed, 2min TTL) |
| CH1 | PostgreSQL full-text search on messages (tsvector + GIN index) | | CH1 | PostgreSQL full-text search on messages (tsvector + GIN index) |
| CL1 | Cleanup: veza-chat-server directory and all operational references removed | | CL1 | Cleanup: veza-chat-server directory and all operational references removed |
Voir [V0_503_RELEASE_SCOPE.md](V0_503_RELEASE_SCOPE.md) pour le détail. Voir [V0_503_RELEASE_SCOPE.md](V0_503_RELEASE_SCOPE.md) pour le détail.
## Livré en v0.601 (Phase 6 — Production Readiness & Commerce) ## Livré en v0.601 (Phase 6 — Production Readiness & Commerce)
| Lot | Feature | | Lot | Feature |
|-----|---------| | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| INF1 | Blue-green deployment (HAProxy), Grafana dashboards (API, Chat, Commerce), Alertmanager, Hyperswitch LIVE_MODE | | INF1 | Blue-green deployment (HAProxy), Grafana dashboards (API, Chat, Commerce), Alertmanager, Hyperswitch LIVE_MODE |
| AUTH1 | OAuth Discord, OAuth Spotify (opérationnels) | | AUTH1 | OAuth Discord, OAuth Spotify (opérationnels) |
| CLN1 | Découpage handler.go en 4 sous-handlers (track_crud, track_social, track_search, track_analytics), interceptors.ts en modules (utils, request, response) | | CLN1 | Découpage handler.go en 4 sous-handlers (track_crud, track_social, track_search, track_analytics), interceptors.ts en modules (utils, request, response) |
| QA1 | Tests OAuth Discord/Spotify, MIGRATIONS.md, audit console.log | | QA1 | Tests OAuth Discord/Spotify, MIGRATIONS.md, audit console.log |
Voir [V0_601_RELEASE_SCOPE.md](V0_601_RELEASE_SCOPE.md) pour le détail. Voir [V0_601_RELEASE_SCOPE.md](V0_601_RELEASE_SCOPE.md) pour le détail.
## Livré en v0.602 (Phase 6+ Payout, Dette Technique & Tests E2E) ## Livré en v0.602 (Phase 6+ Payout, Dette Technique & Tests E2E)
| Lot | Feature | | Lot | Feature |
|-----|---------| | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| CLN2 | Split interceptors : auth.ts, error.ts extraits, interceptors.ts facade (< 30 LOC) | | CLN2 | Split interceptors : auth.ts, error.ts extraits, interceptors.ts facade (< 30 LOC) |
| P3 | Payout vendeurs : Stripe Connect onboarding, balance, seller_stripe_accounts | | P3 | Payout vendeurs : Stripe Connect onboarding, balance, seller_stripe_accounts |
| INF2 | Grafana dashboards enrichis : api-overview (p50, top endpoints, 4xx), chat-overview (WS connections, messages/s), commerce-overview (orders, refunds, payout) | | INF2 | Grafana dashboards enrichis : api-overview (p50, top endpoints, 4xx), chat-overview (WS connections, messages/s), commerce-overview (orders, refunds, payout) |
| QA2 | E2E commerce backend : flow product -> order -> review -> invoice, SMOKE_TEST_V0602.md | | QA2 | E2E commerce backend : flow product -> order -> review -> invoice, SMOKE_TEST_V0602.md |
Voir [V0_602_RELEASE_SCOPE.md](archive/V0_602_RELEASE_SCOPE.md) pour le détail. Voir [V0_602_RELEASE_SCOPE.md](archive/V0_602_RELEASE_SCOPE.md) pour le détail.
## Livré en v0.603 (Phase 6+ Transfer automatique, Commission & Stabilisation) ## Livré en v0.603 (Phase 6+ Transfer automatique, Commission & Stabilisation)
| Lot | Feature | | Lot | Feature |
|-----|---------| | --- | -------------------------------------------------------------------------------------- |
| T1 | Transfer automatique Stripe Connect après paiement réussi (webhook Hyperswitch) | | T1 | Transfer automatique Stripe Connect après paiement réussi (webhook Hyperswitch) |
| T1 | Commission plateforme configurable (PLATFORM_FEE_RATE), migration 115 seller_transfers | | T1 | Commission plateforme configurable (PLATFORM_FEE_RATE), migration 115 seller_transfers |
| T1 | GET /sell/transfers, carte Transfer History dans SellerDashboard | | T1 | GET /sell/transfers, carte Transfer History dans SellerDashboard |
| DT1 | Archivage docs pre-v0.501 | | DT1 | Archivage docs pre-v0.501 |
| QA3 | Tests unitaires transfer (success, multi-seller, transfer-fails) | | QA3 | Tests unitaires transfer (success, multi-seller, transfer-fails) |
Voir [V0_603_RELEASE_SCOPE.md](archive/V0_603_RELEASE_SCOPE.md) pour le détail. Voir [V0_603_RELEASE_SCOPE.md](archive/V0_603_RELEASE_SCOPE.md) pour le détail.
## Livré en v0.701 (Phase 7 — Retry, Admin Dashboard, Deep Health) ## Livré en v0.701 (Phase 7 — Retry, Admin Dashboard, Deep Health)
| Lot | Feature | | Lot | Feature |
|-----|---------| | --- | -------------------------------------------------------------------------------------------- |
| R1 | Transfer Retry Worker : retry automatique des transferts failed (backoff exponentiel, max 3) | | R1 | Transfer Retry Worker : retry automatique des transferts failed (backoff exponentiel, max 3) |
| R1 | Migration 116 : retry_count, next_retry_at sur seller_transfers | | R1 | Migration 116 : retry_count, next_retry_at sur seller_transfers |
| A1 | Admin Transfers Dashboard : GET /admin/transfers, POST /admin/transfers/:id/retry | | A1 | Admin Transfers Dashboard : GET /admin/transfers, POST /admin/transfers/:id/retry |
| A1 | AdminTransfersView : tableau avec filtres, pagination, bouton Retry | | A1 | AdminTransfersView : tableau avec filtres, pagination, bouton Retry |
| H1 | Deep Health : GET /health/deep (DB, Redis, S3, disk, config summary) | | H1 | Deep Health : GET /health/deep (DB, Redis, S3, disk, config summary) |
| D1 | docs/API_REFERENCE.md : documentation API avec exemples curl | | D1 | docs/API_REFERENCE.md : documentation API avec exemples curl |
Voir [V0_701_RELEASE_SCOPE.md](archive/V0_701_RELEASE_SCOPE.md) pour le détail. Voir [V0_701_RELEASE_SCOPE.md](archive/V0_701_RELEASE_SCOPE.md) pour le détail.
## Livré en v0.702 (Phase 7 — Reviews, Factures, Remboursements & Product Detail) ## Livré en v0.702 (Phase 7 — Reviews, Factures, Remboursements & Product Detail)
| Lot | Feature | | Lot | Feature |
|-----|---------| | --- | ---------------------------------------------------------------- |
| W1 | Route /marketplace/products/:id avec ProductDetailPage (lazy) | | W1 | Route /marketplace/products/:id avec ProductDetailPage (lazy) |
| M1 | MSW handlers : reviews (GET list, POST create), invoice download | | M1 | MSW handlers : reviews (GET list, POST create), invoice download |
| T1 | Tests unitaires : reviews (6), invoices (4), refunds (6) | | T1 | Tests unitaires : reviews (6), invoices (4), refunds (6) |
| D1 | API_REFERENCE.md : sections Reviews, Invoices, Refunds | | D1 | API_REFERENCE.md : sections Reviews, Invoices, Refunds |
Voir [V0_702_RELEASE_SCOPE.md](archive/V0_702_RELEASE_SCOPE.md) pour le détail. Voir [V0_702_RELEASE_SCOPE.md](archive/V0_702_RELEASE_SCOPE.md) pour le détail.
## Livré en v0.703 (Phase 7 — Go Live & Streaming Complet) ## Livré en v0.703 (Phase 7 — Go Live & Streaming Complet)
| Lot | Feature | | Lot | Feature |
|-----|---------| | --- | -------------------------------------------------------------------------------------- |
| GL1 | Go Live : page /live/go-live, stream key, OBS/Streamlabs instructions | | GL1 | Go Live : page /live/go-live, stream key, OBS/Streamlabs instructions |
| GL1 | Endpoints : GET/POST /live/streams/me/key, GET /live/streams/me, PUT /live/streams/:id | | GL1 | Endpoints : GET/POST /live/streams/me/key, GET /live/streams/me, PUT /live/streams/:id |
| GL3 | Live Chat WebSocket : LiveViewChat connecté, stream_id comme room | | GL3 | Live Chat WebSocket : LiveViewChat connecté, stream_id comme room |
| GL3 | Viewer count temps réel : polling dans LiveViewPlayer | | GL3 | Viewer count temps réel : polling dans LiveViewPlayer |
| GL4 | Media Session : seekbackward/seekforward (10s) | | GL4 | Media Session : seekbackward/seekforward (10s) |
Voir [V0_703_RELEASE_SCOPE.md](V0_703_RELEASE_SCOPE.md) pour le détail. Voir [V0_703_RELEASE_SCOPE.md](V0_703_RELEASE_SCOPE.md) pour le détail.
## Livré en v0.801 (Phase 8 — UX/UI Polish, Accessibilité & PWA) ## Livré en v0.801 (Phase 8 — UX/UI Polish, Accessibilité & PWA)
| Lot | Feature | | Lot | Feature |
|-----|---------| | --- | -------------------------------------------------------------------------------------------- |
| UX1 | Thèmes avancés : high contrast, compact/comfortable density, accent color, font size 1420px | | UX1 | Thèmes avancés : high contrast, compact/comfortable density, accent color, font size 1420px |
| UX1 | User preferences : migration 118, PUT /users/me/preferences | | UX1 | User preferences : migration 118, PUT /users/me/preferences |
| UX2 | Accessibilité : ARIA labels, aria-haspopup menu, focus-visible ring, useReducedMotion | | UX2 | Accessibilité : ARIA labels, aria-haspopup menu, focus-visible ring, useReducedMotion |
| UX3 | PWA : service worker re-enabled (safe caching), Install App in Settings | | UX3 | PWA : service worker re-enabled (safe caching), Install App in Settings |
| UX3 | Background playback : useWakeLock for mobile | | UX3 | Background playback : useWakeLock for mobile |
## Livré en v0.802 (Phase 8 — Cloud avancé, Gear, Tags) ## Livré en v0.802 (Phase 8 — Cloud avancé, Gear, Tags)
| Lot | Feature | | Lot | Feature |
|-----|---------| | --- | ------------------------------------------------------------- |
| C2 | Cloud versioning : create version, list versions, restore | | C2 | Cloud versioning : create version, list versions, restore |
| C2 | Cloud sharing : create share link, get shared file (public) | | C2 | Cloud sharing : create share link, get shared file (public) |
| C3 | GDPR export : POST /users/me/export (async ZIP, notification) | | C3 | GDPR export : POST /users/me/export (async ZIP, notification) |
| C3 | Cloud backup : cron 24h, copie S3 vers prefix backup | | C3 | Cloud backup : cron 24h, copie S3 vers prefix backup |
| U1 | Batch upload : BatchUploader, queue parallèle (max 3) | | U1 | Batch upload : BatchUploader, queue parallèle (max 3) |
| T1 | Tags suggest : GET /tags/suggest?q=... (autocomplete) | | T1 | Tags suggest : GET /tags/suggest?q=... (autocomplete) |
| T1 | Formats audio : audio/aiff, audio/x-aiff | | T1 | Formats audio : audio/aiff, audio/x-aiff |
| G2 | Gear documents : CRUD (upload PDF, list, delete) | | G2 | Gear documents : CRUD (upload PDF, list, delete) |
| G2 | Gear repairs : CRUD (repair history) | | G2 | Gear repairs : CRUD (repair history) |
| G2 | Gear warranty : warranty_start, warranty_notes, notifier 24h | | G2 | Gear warranty : warranty_start, warranty_notes, notifier 24h |
## Livré en v0.803 (Phase 8 — Sécurité, Compliance & Outillage Dev) ## Livré en v0.803 (Phase 8 — Sécurité, Compliance & Outillage Dev)
| Lot | Feature | | Lot | Feature |
|-----|---------| | ---- | ---------------------------------------------------------------------------------------------------------- |
| SEC1 | Security headers : CSP, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy | | SEC1 | Security headers : CSP, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy |
| SEC1 | DDoS rate limiting : global 1000 req/s, per-IP 100 req/s (Redis sliding window 1s) | | SEC1 | DDoS rate limiting : global 1000 req/s, per-IP 100 req/s (Redis sliding window 1s) |
| SEC2 | Audit : middleware auto-log POST/PUT/DELETE, migration audit_logs, GET /admin/audit/logs | | SEC2 | Audit : middleware auto-log POST/PUT/DELETE, migration audit_logs, GET /admin/audit/logs |
| SEC2 | CCPA : Sec-GPC header, POST /users/me/privacy/opt-out | | SEC2 | CCPA : Sec-GPC header, POST /users/me/privacy/opt-out |
| SEC2 | Account deletion : DELETE /users/me, anonymisation, S3 cleanup, session revocation | | SEC2 | Account deletion : DELETE /users/me, anonymisation, S3 cleanup, session revocation |
| DEV1 | OpenAPI/Swagger : GET /swagger/*, annotations handlers | | DEV1 | OpenAPI/Swagger : GET /swagger/\*, annotations handlers |
| DEV1 | API keys : POST/GET/DELETE /developer/api-keys, auth via X-API-Key header | | DEV1 | API keys : POST/GET/DELETE /developer/api-keys, auth via X-API-Key header |
| ADM1 | Modération : reports CRUD, GET /admin/reports, POST /admin/reports/:id/resolve (dismiss, warn, ban) | | ADM1 | Modération : reports CRUD, GET /admin/reports, POST /admin/reports/:id/resolve (dismiss, warn, ban) |
| ADM1 | Maintenance mode : middleware 503, PUT/GET /admin/maintenance | | ADM1 | Maintenance mode : middleware 503, PUT/GET /admin/maintenance |
| ADM1 | Annonces : CRUD admin, GET /announcements/active (public) | | ADM1 | Annonces : CRUD admin, GET /announcements/active (public) |
| ADM1 | Feature flags : DB persistence, GET/PUT /admin/feature-flags | | ADM1 | Feature flags : DB persistence, GET/PUT /admin/feature-flags |
| FE1 | AdminSettingsView (onglet SETTINGS) : maintenance, feature flags, annonces | | FE1 | AdminSettingsView (onglet SETTINGS) : maintenance, feature flags, annonces |
| FE1 | AdminModerationView : actions dismiss/warn/ban alignées backend | | FE1 | AdminModerationView : actions dismiss/warn/ban alignées backend |
| FE1 | AnnouncementBanner global, AccountSettingsDeleteCard (type DELETE to confirm) | | FE1 | AnnouncementBanner global, AccountSettingsDeleteCard (type DELETE to confirm) |
Voir [V0_803_RELEASE_SCOPE.md](V0_803_RELEASE_SCOPE.md) pour le détail. Voir [V0_803_RELEASE_SCOPE.md](V0_803_RELEASE_SCOPE.md) pour le détail.
## Prévu en v0.403 (Phase 4 Commerce — suite) ## Prévu en v0.403 (Phase 4 Commerce — suite)
| Lot | Feature | | Lot | Feature |
|-----|---------| | --- | ------------------------------------------------------------------------ |
| P3 | Payout vendeurs : Stripe Connect onboarding, balance, transferts | | P3 | Payout vendeurs : Stripe Connect onboarding, balance, transferts |
| R1 | Reviews produits : product_reviews, notation, commentaires, note moyenne | | R1 | Reviews produits : product_reviews, notation, commentaires, note moyenne |
| F1 | Factures : génération PDF par commande, téléchargement | | F1 | Factures : génération PDF par commande, téléchargement |
| R2 | Remboursements : initiation refund, webhook, révocation licence | | R2 | Remboursements : initiation refund, webhook, révocation licence |
Voir [V0_403_RELEASE_SCOPE.md](V0_403_RELEASE_SCOPE.md) pour le détail. Voir [V0_403_RELEASE_SCOPE.md](V0_403_RELEASE_SCOPE.md) pour le détail.
@ -272,9 +272,9 @@ Voir [V0_403_RELEASE_SCOPE.md](V0_403_RELEASE_SCOPE.md) pour le détail.
## Projets abandonnés ## Projets abandonnés
| Projet | Statut | | Projet | Statut |
|--------|--------| | -------------------------- | ---------------------------------------------------- |
| **veza-mobile** | Abandonné—35+ erreurs critiques, non fonctionnel | | **veza-mobile** | Abandonné—35+ erreurs critiques, non fonctionnel |
| **packages/design-system** | Sous-utilisé—seul le CSS importé, pas les composants | | **packages/design-system** | Sous-utilisé—seul le CSS importé, pas les composants |
--- ---

View file

@ -1,4 +1,4 @@
# État du projet Veza — Mars 2026 # État du projet Veza — Avril 2026
**Document opérationnel** : Où en sommes-nous, quelles sont les prochaines étapes. **Document opérationnel** : Où en sommes-nous, quelles sont les prochaines étapes.
@ -6,27 +6,36 @@
## 1. Version actuelle ## 1. Version actuelle
| Élément | Valeur | | Élément | Valeur |
|---------|--------| | --------------------- | ------------------------------------------- |
| **Dernier tag** | v1.0.2 | | **Dernier tag** | v1.0.4 (2026-04-15) |
| **Branche courante** | `main` | | **Branche courante** | `main` |
| **Phase** | Phase 9 — v1.0 Launch — Conforme ROADMAP | | **Phase** | Phase 9 — v1.0 Launch — Post-cleanup stable |
| **Prochaine version** | v1.0.3 (Maintenance / conformité) | | **Prochaine version** | v1.0.5 ou v1.1.0 selon scope |
> v1.0.4 est une **release cleanup** post-audit : 7 jours de sprint
> (J1J7), ~-220 MB de débris retirés, docs alignées sur la réalité,
> TODO RGPD `HIGH-007` fermé, CI consolidée verte. Voir `CHANGELOG.md`
> pour le détail. `AUDIT_REPORT.md` à la racine contient l'audit qui
> a généré ce sprint.
--- ---
## 2. Ce qui est livré ## 2. Ce qui est livré
### v0.103 (Phase 1 Fondation) ### v0.103 (Phase 1 Fondation)
- Auth : OAuth Spotify (A1), Sessions enrichies (A4) - Auth : OAuth Spotify (A1), Sessions enrichies (A4)
- Profils : Bannière (B1), Liens sociaux (B2), Profil privé (B3) - Profils : Bannière (B1), Liens sociaux (B2), Profil privé (B3)
- ⏸️ 2FA SMS, Passkeys → reportés v0.104 - ⏸️ 2FA SMS, Passkeys → reportés v0.104
### v0.201 (Phase 2 Contenu — Lot E) ### v0.201 (Phase 2 Contenu — Lot E)
- ✅ Lot E — Métadonnées : BPM, musical_key, lyrics, tags (E1E4) - ✅ Lot E — Métadonnées : BPM, musical_key, lyrics, tags (E1E4)
- Migrations : 084 track_lyrics, 085 tracks.tags - Migrations : 084 track_lyrics, 085 tracks.tags
### v0.202 (Phase 2 Contenu — Lots G, H, F, C, D) ### v0.202 (Phase 2 Contenu — Lots G, H, F, C, D)
- Lot G : Recherche avancée (musical_key, tri pertinence, autocomplete, facettes type, historique) - Lot G : Recherche avancée (musical_key, tri pertinence, autocomplete, facettes type, historique)
- Lot H : Analytics créateur (stats, graphiques, taux complétion, export CSV/JSON) - Lot H : Analytics créateur (stats, graphiques, taux complétion, export CSV/JSON)
- Lot F : Seller dashboard (GET /sell/stats, liste produits marketplace) - Lot F : Seller dashboard (GET /sell/stats, liste produits marketplace)
@ -34,39 +43,47 @@
- Lot D : Autoplay (GET /tracks/recommendations, section « À écouter ensuite ») - Lot D : Autoplay (GET /tracks/recommendations, section « À écouter ensuite »)
### v0.203 (Phase 2 Contenu — Lots L, K, D1) ### v0.203 (Phase 2 Contenu — Lots L, K, D1)
- Lot L : Social Trending (GET /social/trending, cache Redis, SocialViewTrending connecté) - Lot L : Social Trending (GET /social/trending, cache Redis, SocialViewTrending connecté)
- Lot K : Recherche enrichie (pg_trgm fuzzy, AND/OR/NOT/"phrase exacte", tooltip aide) - Lot K : Recherche enrichie (pg_trgm fuzzy, AND/OR/NOT/"phrase exacte", tooltip aide)
- Lot D1 : Queue collaborative (sessions partagées, bouton Partager, polling sync) - Lot D1 : Queue collaborative (sessions partagées, bouton Partager, polling sync)
### v0.301 (Phase 3 Social — Lots P0, C1, P1, S1) ### v0.301 (Phase 3 Social — Lots P0, C1, P1, S1)
- Lot P0 : Chat Server typing protocol, auth WebSocket doc - Lot P0 : Chat Server typing protocol, auth WebSocket doc
- Lot C1 : Typing indicators, read receipts, delivered status - Lot C1 : Typing indicators, read receipts, delivered status
- Lot P1 : Présence (migration 088, GET /users/:id/presence, PresenceBadge) - Lot P1 : Présence (migration 088, GET /users/:id/presence, PresenceBadge)
- Lot S1 : Social enrichi (feed API, actor/track enrichi, pagination, explore, filtres) - Lot S1 : Social enrichi (feed API, actor/track enrichi, pagination, explore, filtres)
### v0.302 (Phase 3 Social — Lots S2, N1, P2) ### v0.302 (Phase 3 Social — Lots S2, N1, P2)
- Lot S2 : Groupes avancés (request join, invite, rôles, feed groupes, mes groupes) - Lot S2 : Groupes avancés (request join, invite, rôles, feed groupes, mes groupes)
- Lot N1 : Notifications push Web (subscription, envoi sur événement, préférences, badge) - Lot N1 : Notifications push Web (subscription, envoi sur événement, préférences, badge)
- Lot P2 : Présence enrichie (rich presence track, mode invisible, PUT /users/me/presence) - Lot P2 : Présence enrichie (rich presence track, mode invisible, PUT /users/me/presence)
### v0.303 (Phase 3 Social — Lot C2) ### v0.303 (Phase 3 Social — Lot C2)
- Lot C2 : Chat appels WebRTC 1-to-1 (signalisation, CallButton, IncomingCallModal, ActiveCallBar) - Lot C2 : Chat appels WebRTC 1-to-1 (signalisation, CallButton, IncomingCallModal, ActiveCallBar)
### v0.401 (Phase 4 Commerce — Lots M1, M2, M3) ### v0.401 (Phase 4 Commerce — Lots M1, M2, M3)
- Lot M1 : Produits & Catalogue (BPM, musical_key, category, previews, images, filtres, rich text) - Lot M1 : Produits & Catalogue (BPM, musical_key, category, previews, images, filtres, rich text)
- Lot M2 : Licences & Droits (product_licenses, GET /licenses/mine, LicenceCard, LicensesView) - Lot M2 : Licences & Droits (product_licenses, GET /licenses/mine, LicenceCard, LicensesView)
- Lot M3 : Seller dashboard enrichi (evolution chart, top products, real sales) - Lot M3 : Seller dashboard enrichi (evolution chart, top products, real sales)
### v0.402 (Phase 4 Commerce — Lots P1, P2) ### v0.402 (Phase 4 Commerce — Lots P1, P2)
- Lot P1 : Checkout Hyperswitch production-ready (return URL order_id, CheckoutSuccessView/ErrorView, webhook cancelled, CheckoutPaymentForm) - Lot P1 : Checkout Hyperswitch production-ready (return URL order_id, CheckoutSuccessView/ErrorView, webhook cancelled, CheckoutPaymentForm)
- Lot P2 : Codes promo (promo_codes, ValidatePromoCode, GET /commerce/promo/:code, PromoCodeModal connecté, OrderSummary dans Cart) - Lot P2 : Codes promo (promo_codes, ValidatePromoCode, GET /commerce/promo/:code, PromoCodeModal connecté, OrderSummary dans Cart)
### v0.404 (Phase 4bis Stabilisation — post-audit) ### v0.404 (Phase 4bis Stabilisation — post-audit)
- Sécurité : JWT stream token endpoint, SSRF protection webhooks (HTTPS-only), IDOR fix GetUploadStatus, Hyperswitch webhook secret requis en prod, password reset tokens hashés (SHA-256), docker-compose.hybrid supprimé, secrets CI → GitHub Secrets - Sécurité : JWT stream token endpoint, SSRF protection webhooks (HTTPS-only), IDOR fix GetUploadStatus, Hyperswitch webhook secret requis en prod, password reset tokens hashés (SHA-256), docker-compose.hybrid supprimé, secrets CI → GitHub Secrets
- Infra : Rate limiting Redis, alerting Prometheus, PostgreSQL 16 aligné, compose staging complet, CodeQL SAST, Rust CI avec clippy - Infra : Rate limiting Redis, alerting Prometheus, PostgreSQL 16 aligné, compose staging complet, CodeQL SAST, Rust CI avec clippy
- Qualité : 40 fmt.Printf → zap, ~45 any éliminés frontend, TypeScript 5.9.3 unifié, code mort supprimé (~1600 LOC), gorilla/websocket → coder/websocket - Qualité : 40 fmt.Printf → zap, ~45 any éliminés frontend, TypeScript 5.9.3 unifié, code mort supprimé (~1600 LOC), gorilla/websocket → coder/websocket
### v0.501 (Phase 5 Streaming & Cloud — Lots S1, C1, G1) ### v0.501 (Phase 5 Streaming & Cloud — Lots S1, C1, G1)
- Lot S1 — HLS production : transcoding adaptatif 3 tiers (128k, 256k, 320k), ABR hls.js, cache segments CDN, monitoring Prometheus (4 compteurs), waveform generation (FFmpeg + audiowaveform), WaveformDisplay SVG interactif, useHLSPlayer hook - Lot S1 — HLS production : transcoding adaptatif 3 tiers (128k, 256k, 320k), ABR hls.js, cache segments CDN, monitoring Prometheus (4 compteurs), waveform generation (FFmpeg + audiowaveform), WaveformDisplay SVG interactif, useHLSPlayer hook
- Lot C1 — Cloud Storage MVP : gestion dossiers/fichiers, upload drag-and-drop avec quota 5GB, prévisualisation audio inline, publication cloud → track - Lot C1 — Cloud Storage MVP : gestion dossiers/fichiers, upload drag-and-drop avec quota 5GB, prévisualisation audio inline, publication cloud → track
- Lot G1 — Gear avancé : profils publics (is_public toggle, GearShowcase), galerie images multi-photo avec carousel, recherche ILIKE avec SearchBar - Lot G1 — Gear avancé : profils publics (is_public toggle, GearShowcase), galerie images multi-photo avec carousel, recherche ILIKE avec SearchBar
@ -74,6 +91,7 @@
- Sécurité : Trivy container scanning CI - Sécurité : Trivy container scanning CI
### v0.803 (Phase 8 — Sécurité, Compliance & Outillage Dev) ### v0.803 (Phase 8 — Sécurité, Compliance & Outillage Dev)
- Security headers (CSP, HSTS, X-Frame-Options, etc.) - Security headers (CSP, HSTS, X-Frame-Options, etc.)
- DDoS rate limiting: global 1000 req/s, per-IP 100 req/s - DDoS rate limiting: global 1000 req/s, per-IP 100 req/s
- Audit middleware HTTP (POST/PUT/DELETE auto-log), GET /admin/audit/logs - Audit middleware HTTP (POST/PUT/DELETE auto-log), GET /admin/audit/logs
@ -88,18 +106,21 @@
- AdminSettingsView, AdminModerationView, AnnouncementBanner connectés - AdminSettingsView, AdminModerationView, AnnouncementBanner connectés
### v0.802 (Phase 8 — Cloud avancé, Gear, Tags) ### v0.802 (Phase 8 — Cloud avancé, Gear, Tags)
- Cloud : versioning, sharing, GDPR export, backup cron - Cloud : versioning, sharing, GDPR export, backup cron
- Gear : documents CRUD, repairs CRUD, warranty notifier - Gear : documents CRUD, repairs CRUD, warranty notifier
- Tags : GET /tags/suggest, audio/aiff - Tags : GET /tags/suggest, audio/aiff
- Frontend : CloudFileVersions, CloudShareModal, GearDocumentsTab, GearRepairsTab - Frontend : CloudFileVersions, CloudShareModal, GearDocumentsTab, GearRepairsTab
### v0.702 (Phase 7 — Reviews, Factures, Remboursements & Product Detail) ### v0.702 (Phase 7 — Reviews, Factures, Remboursements & Product Detail)
- Route /marketplace/products/:id avec ProductDetailPage (lazy) - Route /marketplace/products/:id avec ProductDetailPage (lazy)
- MSW handlers : reviews (GET/POST), invoice download - MSW handlers : reviews (GET/POST), invoice download
- Tests unitaires : reviews (6), invoices (4), refunds (6) - Tests unitaires : reviews (6), invoices (4), refunds (6)
- API_REFERENCE.md : sections Reviews, Invoices, Refunds - API_REFERENCE.md : sections Reviews, Invoices, Refunds
### v0.801 (Phase 8 — UX/UI Polish, Accessibilité & PWA) ### v0.801 (Phase 8 — UX/UI Polish, Accessibilité & PWA)
- User preferences: migration 118, PUT /users/me/preferences (contrast, density, accentHue, fontSize) - User preferences: migration 118, PUT /users/me/preferences (contrast, density, accentHue, fontSize)
- Thèmes avancés: high contrast, compact/comfortable density, accent color, font size 1420px - Thèmes avancés: high contrast, compact/comfortable density, accent color, font size 1420px
- Accessibilité: ARIA labels, aria-haspopup menu, focus-visible ring, useReducedMotion - Accessibilité: ARIA labels, aria-haspopup menu, focus-visible ring, useReducedMotion
@ -107,6 +128,7 @@
- Background playback: useWakeLock for mobile - Background playback: useWakeLock for mobile
### v0.703 (Phase 7 — Go Live & Streaming Complet) ### v0.703 (Phase 7 — Go Live & Streaming Complet)
- Go Live : page /live/go-live, stream key, OBS instructions - Go Live : page /live/go-live, stream key, OBS instructions
- Endpoints : GET/POST /live/streams/me/key, GET /live/streams/me, PUT /live/streams/:id - Endpoints : GET/POST /live/streams/me/key, GET /live/streams/me, PUT /live/streams/:id
- Live Chat WebSocket : LiveViewChat connecté, stream_id comme room - Live Chat WebSocket : LiveViewChat connecté, stream_id comme room
@ -114,6 +136,7 @@
- Media Session : seekbackward/seekforward (10s) - Media Session : seekbackward/seekforward (10s)
### v0.701 (Phase 7 — Retry, Admin Dashboard, Deep Health) ### v0.701 (Phase 7 — Retry, Admin Dashboard, Deep Health)
- Transfer Retry Worker : retry automatique des transferts failed (backoff exponentiel, max 3) - Transfer Retry Worker : retry automatique des transferts failed (backoff exponentiel, max 3)
- Migration 116 : retry_count, next_retry_at sur seller_transfers - Migration 116 : retry_count, next_retry_at sur seller_transfers
- GET /admin/transfers, POST /admin/transfers/:id/retry - GET /admin/transfers, POST /admin/transfers/:id/retry
@ -122,6 +145,7 @@
- docs/API_REFERENCE.md - docs/API_REFERENCE.md
### v0.603 (Phase 6+ Transfer automatique, Commission & Stabilisation) ### v0.603 (Phase 6+ Transfer automatique, Commission & Stabilisation)
- T1 : Transfer automatique Stripe Connect après paiement réussi (webhook Hyperswitch) - T1 : Transfer automatique Stripe Connect après paiement réussi (webhook Hyperswitch)
- Commission plateforme configurable (PLATFORM_FEE_RATE, défaut 10 %) - Commission plateforme configurable (PLATFORM_FEE_RATE, défaut 10 %)
- Migration 115 seller_transfers, modèle SellerTransfer, GET /sell/transfers - Migration 115 seller_transfers, modèle SellerTransfer, GET /sell/transfers
@ -130,24 +154,28 @@
- Archivage docs pre-v0.501 - Archivage docs pre-v0.501
### v0.602 (Phase 6+ Payout, Dette Technique & Tests E2E) ### v0.602 (Phase 6+ Payout, Dette Technique & Tests E2E)
- CLN2 : Split interceptors auth.ts, error.ts, facade < 30 LOC - CLN2 : Split interceptors auth.ts, error.ts, facade < 30 LOC
- P3 : Stripe Connect payout (onboarding, balance, seller_stripe_accounts) - P3 : Stripe Connect payout (onboarding, balance, seller_stripe_accounts)
- INF2 : Grafana dashboards enrichis (p50, top endpoints, 4xx, WS connections, messages/s, orders, refunds, payout) - INF2 : Grafana dashboards enrichis (p50, top endpoints, 4xx, WS connections, messages/s, orders, refunds, payout)
- QA2 : E2E commerce backend (product -> order -> review -> invoice), SMOKE_TEST_V0602.md - QA2 : E2E commerce backend (product -> order -> review -> invoice), SMOKE_TEST_V0602.md
### v0.601 (Phase 6 — Production Readiness & Commerce) ### v0.601 (Phase 6 — Production Readiness & Commerce)
- INF1 : Blue-green HAProxy, Grafana dashboards (API, Chat, Commerce), Alertmanager, Hyperswitch LIVE_MODE - INF1 : Blue-green HAProxy, Grafana dashboards (API, Chat, Commerce), Alertmanager, Hyperswitch LIVE_MODE
- AUTH1 : OAuth Discord, OAuth Spotify opérationnels - AUTH1 : OAuth Discord, OAuth Spotify opérationnels
- CLN1 : handler.go split en 4 sous-handlers, interceptors.ts en modules (utils, request, response) - CLN1 : handler.go split en 4 sous-handlers, interceptors.ts en modules (utils, request, response)
- QA1 : Tests OAuth, MIGRATIONS.md, audit console.log - QA1 : Tests OAuth, MIGRATIONS.md, audit console.log
### v0.503 (Phase 5 — HLS E2E + Chat Hardening + Cleanup) ### v0.503 (Phase 5 — HLS E2E + Chat Hardening + Cleanup)
- SS1 : HLS Streaming E2E (backend serving routes, frontend ABR player) - SS1 : HLS Streaming E2E (backend serving routes, frontend ABR player)
- CH1 : Redis rate limiter (sliding window + in-memory fallback), présence persistante Redis (2min TTL), PostgreSQL full-text search (tsvector + GIN index) - CH1 : Redis rate limiter (sliding window + in-memory fallback), présence persistante Redis (2min TTL), PostgreSQL full-text search (tsvector + GIN index)
- CL1 : veza-chat-server directory supprimé, références CI/CD/config/scripts nettoyées - CL1 : veza-chat-server directory supprimé, références CI/CD/config/scripts nettoyées
- QA1 : 23 Go tests passing, documentation - QA1 : 23 Go tests passing, documentation
### v0.502 (Phase 5 Communication — Chat Server Rewrite) ### v0.502 (Phase 5 Communication — Chat Server Rewrite)
- Chat Server Rust → Go : WebSocket intégré dans veza-backend-api (`/api/v1/ws`) - Chat Server Rust → Go : WebSocket intégré dans veza-backend-api (`/api/v1/ws`)
- Hub/Client avec goroutines readPump/writePump, 30s ping keepalive - Hub/Client avec goroutines readPump/writePump, 30s ping keepalive
- 18 types messages entrants, 20 types sortants (protocole identique au Rust) - 18 types messages entrants, 20 types sortants (protocole identique au Rust)
@ -164,6 +192,7 @@
## 3. Prochaines étapes ## 3. Prochaines étapes
### v0.503 (livrée 2026-02-22) ### v0.503 (livrée 2026-02-22)
- SS1 : HLS Streaming E2E (backend routes + frontend ABR player) - SS1 : HLS Streaming E2E (backend routes + frontend ABR player)
- CH1 : Chat hardening (rate limiter Redis, présence persistante Redis, FTS PostgreSQL) - CH1 : Chat hardening (rate limiter Redis, présence persistante Redis, FTS PostgreSQL)
- CL1 : Cleanup veza-chat-server, nettoyage CI/CD/config - CL1 : Cleanup veza-chat-server, nettoyage CI/CD/config
@ -171,6 +200,7 @@
- Référence : [V0_503_RELEASE_SCOPE.md](V0_503_RELEASE_SCOPE.md) - Référence : [V0_503_RELEASE_SCOPE.md](V0_503_RELEASE_SCOPE.md)
### Prochaine version (v0.701) ### Prochaine version (v0.701)
- Retry automatique des transferts échoués (cron + backoff exponentiel) - Retry automatique des transferts échoués (cron + backoff exponentiel)
- Dashboard admin des transferts (GET /admin/transfers, retry manuel) - Dashboard admin des transferts (GET /admin/transfers, retry manuel)
- Deep health checks (GET /health/deep — DB, Redis, S3, disk) - Deep health checks (GET /health/deep — DB, Redis, S3, disk)
@ -182,11 +212,12 @@
## 4. Sécurité ## 4. Sécurité
| Métrique | Avant v0.404 | Après v0.404 | | Métrique | Avant v0.404 | Après v0.404 |
|----------|--------------|--------------| | ------------------ | ------------ | ------------ |
| **Score sécurité** | 5/10 | 7/10 | | **Score sécurité** | 5/10 | 7/10 |
**Améliorations v0.404 :** **Améliorations v0.404 :**
- JWT stream token endpoint (`POST /auth/stream-token`) pour auth HLS/WebSocket - JWT stream token endpoint (`POST /auth/stream-token`) pour auth HLS/WebSocket
- SSRF protection sur webhooks (HTTPS-only, whitelist schéma) - SSRF protection sur webhooks (HTTPS-only, whitelist schéma)
- IDOR corrigé dans GetUploadStatus (ownership check) - IDOR corrigé dans GetUploadStatus (ownership check)
@ -199,78 +230,78 @@
## 5. Infrastructure ## 5. Infrastructure
| Élément | État v0.404 | | Élément | État v0.404 |
|---------|-------------| | ------------------- | ---------------------------------------- |
| Rate limiting Redis | ✅ Disponible | | Rate limiting Redis | ✅ Disponible |
| Alerting Prometheus | ✅ Règles ajoutées | | Alerting Prometheus | ✅ Règles ajoutées |
| PostgreSQL | ✅ Aligné v16 | | PostgreSQL | ✅ Aligné v16 |
| Compose staging | ✅ Complet (chat, stream, reverse proxy) | | Compose staging | ✅ Complet (chat, stream, reverse proxy) |
| CodeQL SAST | ✅ Ajouté | | CodeQL SAST | ✅ Ajouté |
| Rust CI (clippy) | ✅ Ajouté | | Rust CI (clippy) | ✅ Ajouté |
--- ---
## 6. Qualité du code ## 6. Qualité du code
| Métrique | v0.404 | | Métrique | v0.404 |
|----------|--------| | ----------------------- | ---------------------------- |
| fmt.Printf → zap | 40 remplacements | | fmt.Printf → zap | 40 remplacements |
| any TypeScript éliminés | ~45 | | any TypeScript éliminés | ~45 |
| TypeScript unifié | 5.9.3 | | TypeScript unifié | 5.9.3 |
| Code mort supprimé | ~1600 LOC | | Code mort supprimé | ~1600 LOC |
| gorilla/websocket | Remplacé par coder/websocket | | gorilla/websocket | Remplacé par coder/websocket |
--- ---
## 7. Références rapides ## 7. Références rapides
| Document | Usage | | Document | Usage |
|----------|-------| | ------------------------------------------------------------------ | ------------------------------------------------------- |
| [PLAN_V0_301_FINALISATION.md](archive/PLAN_V0_301_FINALISATION.md) | Plan de finalisation v0.301 | | [PLAN_V0_301_FINALISATION.md](archive/PLAN_V0_301_FINALISATION.md) | Plan de finalisation v0.301 |
| [V0_401_RELEASE_SCOPE.md](archive/V0_401_RELEASE_SCOPE.md) | Scope v0.401 (Phase 4 Commerce) | | [V0_401_RELEASE_SCOPE.md](archive/V0_401_RELEASE_SCOPE.md) | Scope v0.401 (Phase 4 Commerce) |
| [V0_402_RELEASE_SCOPE.md](V0_402_RELEASE_SCOPE.md) | Scope v0.402 (checkout & codes promo) | | [V0_402_RELEASE_SCOPE.md](V0_402_RELEASE_SCOPE.md) | Scope v0.402 (checkout & codes promo) |
| [V0_303_RELEASE_SCOPE.md](V0_303_RELEASE_SCOPE.md) | Scope v0.303 (Chat appels WebRTC 1-to-1) | | [V0_303_RELEASE_SCOPE.md](V0_303_RELEASE_SCOPE.md) | Scope v0.303 (Chat appels WebRTC 1-to-1) |
| [PLAN_V0_401_IMPLEMENTATION.md](PLAN_V0_401_IMPLEMENTATION.md) | Plan d'implémentation v0.401 | | [PLAN_V0_401_IMPLEMENTATION.md](PLAN_V0_401_IMPLEMENTATION.md) | Plan d'implémentation v0.401 |
| [PLAN_V0_402_IMPLEMENTATION.md](PLAN_V0_402_IMPLEMENTATION.md) | Plan d'implémentation v0.402 | | [PLAN_V0_402_IMPLEMENTATION.md](PLAN_V0_402_IMPLEMENTATION.md) | Plan d'implémentation v0.402 |
| [V0_404_RELEASE_SCOPE.md](V0_404_RELEASE_SCOPE.md) | Scope v0.404 (stabilisation post-audit) | | [V0_404_RELEASE_SCOPE.md](V0_404_RELEASE_SCOPE.md) | Scope v0.404 (stabilisation post-audit) |
| [V0_501_RELEASE_SCOPE.md](archive/V0_501_RELEASE_SCOPE.md) | Scope v0.501 (Streaming & Cloud, archivé) | | [V0_501_RELEASE_SCOPE.md](archive/V0_501_RELEASE_SCOPE.md) | Scope v0.501 (Streaming & Cloud, archivé) |
| [V0_502_RELEASE_SCOPE.md](archive/V0_502_RELEASE_SCOPE.md) | Scope v0.502 (Chat Server Rewrite, archivé) | | [V0_502_RELEASE_SCOPE.md](archive/V0_502_RELEASE_SCOPE.md) | Scope v0.502 (Chat Server Rewrite, archivé) |
| [V0_503_RELEASE_SCOPE.md](archive/V0_503_RELEASE_SCOPE.md) | Scope v0.503 (archivé) | | [V0_503_RELEASE_SCOPE.md](archive/V0_503_RELEASE_SCOPE.md) | Scope v0.503 (archivé) |
| [V0_601_RELEASE_SCOPE.md](archive/V0_601_RELEASE_SCOPE.md) | Scope v0.601 (archivé) | | [V0_601_RELEASE_SCOPE.md](archive/V0_601_RELEASE_SCOPE.md) | Scope v0.601 (archivé) |
| [V0_602_RELEASE_SCOPE.md](archive/V0_602_RELEASE_SCOPE.md) | Scope v0.602 (archivé) | | [V0_602_RELEASE_SCOPE.md](archive/V0_602_RELEASE_SCOPE.md) | Scope v0.602 (archivé) |
| [PLAN_V0_601_IMPLEMENTATION.md](PLAN_V0_601_IMPLEMENTATION.md) | Plan d'implémentation v0.601 | | [PLAN_V0_601_IMPLEMENTATION.md](PLAN_V0_601_IMPLEMENTATION.md) | Plan d'implémentation v0.601 |
| [PLAN_V0_602_IMPLEMENTATION.md](PLAN_V0_602_IMPLEMENTATION.md) | Plan d'implémentation v0.602 | | [PLAN_V0_602_IMPLEMENTATION.md](PLAN_V0_602_IMPLEMENTATION.md) | Plan d'implémentation v0.602 |
| [V0_603_RELEASE_SCOPE.md](V0_603_RELEASE_SCOPE.md) | Scope v0.603 (Transfer auto, Commission, Stabilisation) | | [V0_603_RELEASE_SCOPE.md](V0_603_RELEASE_SCOPE.md) | Scope v0.603 (Transfer auto, Commission, Stabilisation) |
| [PLAN_V0_603_IMPLEMENTATION.md](PLAN_V0_603_IMPLEMENTATION.md) | Plan d'implémentation v0.603 | | [PLAN_V0_603_IMPLEMENTATION.md](PLAN_V0_603_IMPLEMENTATION.md) | Plan d'implémentation v0.603 |
| [CHAT_FEATURE_PARITY.md](CHAT_FEATURE_PARITY.md) | Feature parity Rust vs Go (25/25 OK) | | [CHAT_FEATURE_PARITY.md](CHAT_FEATURE_PARITY.md) | Feature parity Rust vs Go (25/25 OK) |
| [V0_301_RELEASE_SCOPE.md](archive/V0_301_RELEASE_SCOPE.md) | Scope détaillé v0.301 (Phase 3 Social) | | [V0_301_RELEASE_SCOPE.md](archive/V0_301_RELEASE_SCOPE.md) | Scope détaillé v0.301 (Phase 3 Social) |
| [V0_203_RELEASE_SCOPE.md](V0_203_RELEASE_SCOPE.md) | Scope v0.203 (archivé) | | [V0_203_RELEASE_SCOPE.md](V0_203_RELEASE_SCOPE.md) | Scope v0.203 (archivé) |
| [SCOPE_CONTROL.md](SCOPE_CONTROL.md) | Anti-scope-creep, workflow | | [SCOPE_CONTROL.md](SCOPE_CONTROL.md) | Anti-scope-creep, workflow |
| [FEATURE_STATUS.md](FEATURE_STATUS.md) | Statut des features par domaine | | [FEATURE_STATUS.md](FEATURE_STATUS.md) | Statut des features par domaine |
| [CHANGELOG.md](../CHANGELOG.md) | Historique des versions | | [CHANGELOG.md](../CHANGELOG.md) | Historique des versions |
--- ---
## 8. Stack technique ## 8. Stack technique
| Composant | État | | Composant | État |
|-----------|------| | ------------------------- | ---------------------------------------- |
| Backend Go | ✅ Opérationnel | | Backend Go | ✅ Opérationnel |
| Frontend React (Vite) | ✅ Opérationnel | | Frontend React (Vite) | ✅ Opérationnel |
| Chat Go (intégré backend) | ✅ Opérationnel (v0.502) | | Chat Go (intégré backend) | ✅ Opérationnel (v0.502) |
| Stream Server Rust | ✅ Compile — HLS en intégration (v0.503) | | Stream Server Rust | ✅ Compile — HLS en intégration (v0.503) |
| PostgreSQL | ✅ | | PostgreSQL | ✅ |
| Redis | ✅ | | Redis | ✅ |
--- ---
## 9. Indicateurs ## 9. Indicateurs
| Métrique | Valeur | | Métrique | Valeur |
|----------|--------| | --------------------------- | ---------- |
| Features livrées (cumul) | ~353 / 600 | | Features livrées (cumul) | ~353 / 600 |
| Features E2E fonctionnelles | 22 | | Features E2E fonctionnelles | 22 |
| Score maturité produit | 5/10 | | Score maturité produit | 5/10 |
| Module Streaming | 55% | | Module Streaming | 55% |
| Module Cloud | 30% | | Module Cloud | 30% |
| Module Gear | 60% | | Module Gear | 60% |