Both files were dated v1.0.4 (2026-04-15) — three releases out of date. Surgical updates rather than a rewrite, since the underlying feature inventory is mostly unchanged. PROJECT_STATE.md - §1 "Version actuelle" : tag v1.0.4 → v1.0.8 (2026-04-26). Phase description + next-version hint refreshed (v1.0.9 with item G + WebRTC TURN as cibles). - §2 "Ce qui est livré" : prepended v1.0.8, v1.0.7, v1.0.5–v1.0.6.2 consolidated entries (with batch labels A/B/B9/C and the money-movement plan items A–F). The v0.x sections kept verbatim for archive — they document phases that pre-date the launch. - §3 "Prochaines étapes" : replaced the v0.701 retry/dashboard plan (long since shipped) with the v1.0.9 candidate list, ordered by effort × impact. Item G subscription pending_payment + WebRTC TURN are the two cibles. C6 flake stab + wrappers consolidation + multipart S3 + register UX + email tokens header migration listed alongside. FEATURE_STATUS.md - Header date refreshed to 2026-04-26 / v1.0.8 with the chantier summary. - "Upload de tracks" row : added the v1.0.8 MinIO/S3 wiring detail (TRACK_STORAGE_BACKEND flag, chunked upload assembly, signed-URL redirect 302). - "HLS Streaming" feature-flag row : flipped default from `true` (v0.101 era) to `false` (v1.0.7 default) — referencing the fallback /tracks/:id/stream Range cache bypass landed in v1.0.7-rc1 commit `b875efcff`. - "Appels WebRTC" limitation row : note refreshed — signaling OK, NAT traversal still HS without STUN/TURN per FUNCTIONAL_AUDIT 🟡 #1, cible bumped from v1.1 to v1.0.9 (matches the v1.0.9 plan above). The v0.x section in PROJECT_STATE.md (Phases 1–5) intentionally left as-is — it serves as historical record of what shipped before launch. Future agents reading the file should focus on §1, §2 v1.0.x, and §3 for current state. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
21 KiB
État du projet Veza — Avril 2026
Document opérationnel : Où en sommes-nous, quelles sont les prochaines étapes.
1. Version actuelle
| Élément | Valeur |
|---|---|
| Dernier tag | v1.0.8 (2026-04-26) |
| Branche courante | main |
| Phase | Phase 9+ — v1.0 Launch — Stabilisation continue |
| Prochaine version | v1.0.9 (Item G subscription + WebRTC TURN/STUN cibles) |
v1.0.8 (2026-04-26) — Quatre chantiers parallèles :
- Batch A : MinIO/S3 wired bout-en-bout (upload + read + transcode), ferme le 🟡 stockage local de FUNCTIONAL_AUDIT.
- Batch B : migration OpenAPI orval — 4 services migrés (dashboard / profile / playlist / track) + authService 9/9 (incluant register / refresh / password / verify migrés post-tag dans une session dédiée d'annotation queue + auth password).
- Batch B9 : suppression de
@openapitools/openapi-generator-cli— orval = source unique. −198 fichiers / 23k LOC legacy.- Batch C : workflow Playwright E2E sur Forgejo Actions (
@criticalPR / full push+nightly),--ciseed flag (~5s vs ~60s), runbookdocs/CI_E2E.md.v1.0.7 (2026-04-23) — Release post-BFG :
.git2.3 GB → 66 MB, transactions marketplaceb5281bec, UserRateLimiter wiredebf3276d, certs/clés rotatées hors git.v1.0.4 (2026-04-15) — Release cleanup post-audit AUDIT_REPORT v1 (~220 MB débris retirés, docs alignées sur la réalité, RGPD HIGH-007 fermé, CI consolidée).
Détail commit-par-commit :
CHANGELOG.md. Audits source :AUDIT_REPORT.mdv3 +FUNCTIONAL_AUDIT.mdv2 à la racine.
2. Ce qui est livré
v1.0.8 (2026-04-26 — Storage / OpenAPI / E2E CI)
- Batch A — MinIO/S3 :
tracks.storage_backendcolumn,S3StorageService.UploadStream+GetSignedURL,TrackService.UploadTrackwired S3, chunked upload assembly to S3, signed URL redirect 302 stream/download, transcoder lit signed HTTPS URL,cmd/migrate_storageCLI bulk local→S3. - Batch B — OpenAPI orval migration : install orval@^7 + Axios mutator, swaggo annotations sur 50+ endpoints (track / playlist / user / queue / password). 5 services migrés :
dashboardService,profileService,playlistService,trackService,authService(9/9 fonctions, dont les renames wire-shapepassword_confirm→password_confirmation,refreshToken→refresh_token,verifyEmailGET→POST).services/api/queue.tsmigré. - Batch B9 : suppression
@openapitools/openapi-generator-cli+apps/web/src/types/generated/(198 fichiers / 23k LOC). orval = source unique. Pre-commit drift guard simplifié. - Batch C — E2E Playwright CI :
.github/workflows/e2e.yml(@criticalPR / full push+nightly),--ciseed flag (cmd/tools/seed --ci, ~5s vs ~60s),playwright.config.tsreuseExistingServer: !CI, runbookdocs/CI_E2E.md. - Cleanup :
fast-checkinstall (débloque pre-commit hermétique), CLAUDE.md stack table à jour, frontend-ci.yml fold dans ci.yml.
v1.0.7 (2026-04-23 — BFG history rewrite + hardening)
- BFG pass :
.git2.3 GB → 66 MB (−97%). Stripped : binaires Go, kubectl vendoré (60 MB), audio uploads, 48 PNG racine,.playwright-mcp/,.env*, certs TLS, builds Incus. - Hardening backend :
core/marketplace/service.goUpdateProductImages+SetProductLicenseswrappés en transaction GORM (commitb5281bec).UserRateLimiterwired dansAuthMiddleware.RequireAuth()(commitebf3276d). docs/ENV_VARIABLES.md: réécriture complète (172 → ~600 lignes), ~180 env vars surveyées du code.- Orphelins :
internal/api/handlers/{chat,rbac,rbac_test}.go,internal/repository/user_repository.go,proto/chat/chat.proto,veza-common/src/types/{chat,websocket}.rs. 19 workflows.disabledarchivés. - MinIO + mc pinned aux tags datés (
RELEASE.2025-09-07*).
v1.0.5 / v1.0.6 / v1.0.6.1 / v1.0.6.2 (mars-avril 2026)
Money-movement hardening — items A à F du plan v1.0.7 livrés en
cascade (idempotency keys Hyperswitch, persist stripe_transfer_id,
async Stripe Connect reversal worker, reconciliation sweep, webhook
raw audit log, ledger-health Prometheus gauges + 3 alertes
Alertmanager). Détail dans CHANGELOG.md. Item G (subscription
pending_payment) deferred v1.0.9.
v0.103 (Phase 1 Fondation)
- Auth : OAuth Spotify (A1), Sessions enrichies (A4)
- Profils : Bannière (B1), Liens sociaux (B2), Profil privé (B3)
- ⏸️ 2FA SMS, Passkeys → reportés v0.104
v0.201 (Phase 2 Contenu — Lot E)
- ✅ Lot E — Métadonnées : BPM, musical_key, lyrics, tags (E1–E4)
- Migrations : 084 track_lyrics, 085 tracks.tags
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 H : Analytics créateur (stats, graphiques, taux complétion, export CSV/JSON)
- Lot F : Seller dashboard (GET /sell/stats, liste produits marketplace)
- Lot C : Player (crossfade, gapless preload, PiP)
- Lot D : Autoplay (GET /tracks/recommendations, section « À écouter ensuite »)
v0.203 (Phase 2 Contenu — Lots L, K, D1)
- 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 D1 : Queue collaborative (sessions partagées, bouton Partager, polling sync)
v0.301 (Phase 3 Social — Lots P0, C1, P1, S1)
- Lot P0 : Chat Server typing protocol, auth WebSocket doc
- Lot C1 : Typing indicators, read receipts, delivered status
- Lot P1 : Présence (migration 088, GET /users/:id/presence, PresenceBadge)
- Lot S1 : Social enrichi (feed API, actor/track enrichi, pagination, explore, filtres)
v0.302 (Phase 3 Social — Lots S2, N1, P2)
- 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 P2 : Présence enrichie (rich presence track, mode invisible, PUT /users/me/presence)
v0.303 (Phase 3 Social — Lot C2)
- Lot C2 : Chat appels WebRTC 1-to-1 (signalisation, CallButton, IncomingCallModal, ActiveCallBar)
v0.401 (Phase 4 Commerce — Lots M1, M2, M3)
- 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 M3 : Seller dashboard enrichi (evolution chart, top products, real sales)
v0.402 (Phase 4 Commerce — Lots P1, P2)
- 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)
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
- 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
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 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
- Infra : MinIO S3-compatible (dev, staging, prod), 6 migrations (103–108)
- Sécurité : Trivy container scanning CI
v0.803 (Phase 8 — Sécurité, Compliance & Outillage Dev)
- Security headers (CSP, HSTS, X-Frame-Options, etc.)
- DDoS rate limiting: global 1000 req/s, per-IP 100 req/s
- Audit middleware HTTP (POST/PUT/DELETE auto-log), GET /admin/audit/logs
- CCPA Sec-GPC, opt-out endpoint
- Account deletion hardening (anonymisation, S3, sessions)
- Moderation queue (reports CRUD, actions dismiss/warn/ban)
- Maintenance mode, announcements, feature flags
- AdminSettingsView (onglet SETTINGS) : maintenance, feature flags, annonces
- Maintenance mode (503, admin toggle)
- Announcements CRUD, GET /announcements/active
- Feature flags DB persistence
- AdminSettingsView, AdminModerationView, AnnouncementBanner connectés
v0.802 (Phase 8 — Cloud avancé, Gear, Tags)
- Cloud : versioning, sharing, GDPR export, backup cron
- Gear : documents CRUD, repairs CRUD, warranty notifier
- Tags : GET /tags/suggest, audio/aiff
- Frontend : CloudFileVersions, CloudShareModal, GearDocumentsTab, GearRepairsTab
v0.702 (Phase 7 — Reviews, Factures, Remboursements & Product Detail)
- Route /marketplace/products/:id avec ProductDetailPage (lazy)
- MSW handlers : reviews (GET/POST), invoice download
- Tests unitaires : reviews (6), invoices (4), refunds (6)
- API_REFERENCE.md : sections Reviews, Invoices, Refunds
v0.801 (Phase 8 — UX/UI Polish, Accessibilité & PWA)
- 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 14–20px
- Accessibilité: ARIA labels, aria-haspopup menu, focus-visible ring, useReducedMotion
- PWA: service worker re-enabled (safe caching), Install App in Settings
- Background playback: useWakeLock for mobile
v0.703 (Phase 7 — Go Live & Streaming Complet)
- 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
- Live Chat WebSocket : LiveViewChat connecté, stream_id comme room
- Viewer count temps réel : polling dans LiveViewPlayer
- Media Session : seekbackward/seekforward (10s)
v0.701 (Phase 7 — Retry, Admin Dashboard, Deep Health)
- Transfer Retry Worker : retry automatique des transferts failed (backoff exponentiel, max 3)
- Migration 116 : retry_count, next_retry_at sur seller_transfers
- GET /admin/transfers, POST /admin/transfers/:id/retry
- AdminTransfersView : tableau admin avec filtres, pagination, bouton Retry
- GET /health/deep : DB, Redis, S3, disk, config summary
- docs/API_REFERENCE.md
v0.603 (Phase 6+ Transfer automatique, Commission & Stabilisation)
- T1 : Transfer automatique Stripe Connect après paiement réussi (webhook Hyperswitch)
- Commission plateforme configurable (PLATFORM_FEE_RATE, défaut 10 %)
- Migration 115 seller_transfers, modèle SellerTransfer, GET /sell/transfers
- Carte Transfer History dans SellerDashboard
- Tests unitaires : transfer success, multi-seller, transfer-fails
- Archivage docs pre-v0.501
v0.602 (Phase 6+ Payout, Dette Technique & Tests E2E)
- CLN2 : Split interceptors auth.ts, error.ts, facade < 30 LOC
- P3 : Stripe Connect payout (onboarding, balance, seller_stripe_accounts)
- 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
v0.601 (Phase 6 — Production Readiness & Commerce)
- INF1 : Blue-green HAProxy, Grafana dashboards (API, Chat, Commerce), Alertmanager, Hyperswitch LIVE_MODE
- AUTH1 : OAuth Discord, OAuth Spotify opérationnels
- CLN1 : handler.go split en 4 sous-handlers, interceptors.ts en modules (utils, request, response)
- QA1 : Tests OAuth, MIGRATIONS.md, audit console.log
v0.503 (Phase 5 — HLS E2E + Chat Hardening + Cleanup)
- 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)
- CL1 : veza-chat-server directory supprimé, références CI/CD/config/scripts nettoyées
- QA1 : 23 Go tests passing, documentation
v0.502 (Phase 5 Communication — Chat Server Rewrite)
- Chat Server Rust → Go : WebSocket intégré dans veza-backend-api (
/api/v1/ws) - Hub/Client avec goroutines readPump/writePump, 30s ping keepalive
- 18 types messages entrants, 20 types sortants (protocole identique au Rust)
- Handlers : SendMessage, EditMessage, DeleteMessage, JoinConversation, LeaveConversation, FetchHistory, SearchMessages, SyncMessages, Typing, MarkAsRead, Delivered, AddReaction, RemoveReaction, WebRTC signaling (5 types)
- PermissionService (room_members), RateLimiter (per-user per-action)
- ChatPubSubService (Redis PubSub + fallback in-memory)
- 4 nouvelles migrations (109–112), 3 modèles GORM, 4 repositories enrichis
- Docker : suppression chat-server Rust de docker-compose.yml, staging.yml, prod.yml
- Frontend : dérivation WS_URL depuis API_URL, types TS mis à jour, MSW mis à jour
- 15 tests unitaires Go, E2E tests intégration, CHAT_FEATURE_PARITY.md (25/25 OK)
3. Prochaines étapes
Cible v1.0.9
Triés par effort × impact :
- Item G subscription
pending_payment(M, 3j) —docs/audit-2026-04/v107-plan.md§G. State machine + recovery endpoint + tests + E2E@critical. Le hotfix v1.0.6.2 compense via filter ; G replace le creation path. TODO marqué danssubscription/service.go. - WebRTC STUN/TURN (M, 1-2j) — FUNCTIONAL_AUDIT 🟡 #1. Coturn (Incus container ?), env vars, UI fallback si NAT échoue. Le seul 🟡 fonctionnel encore ouvert.
- Email tokens query→header (S, 0.5j) — FUNCTIONAL_AUDIT §4 #7. Sécu (anti-leak Referer/logs). Coupler avec migration
verifyEmailPOST déjà landée v1.0.8. - Register UX (S, 0.5j) — FUNCTIONAL_AUDIT §4 #8. JWT émis avant l'email send → 403 immédiat tant que non-vérifié. Friction UX.
- Multipart S3 chunked upload natif (M, 1-2j) — plan v1.0.8 D4 deferred. Aujourd'hui : assemble local puis single-shot stream 500 MB. Risque OOM en pic de concurrence.
- Consolider
services/api/*.tswrappers (M, 1j) — auth/users/tracks/playlists/search/social. Parallèles aux feature services ; rewire ~30 importers vers feature-direct. - C6 E2E flake stab (S, 0.5j) — après le 1er run E2E vert, identifier les vrais flakes en CI vs ceux observés en dev.
Plus tard (deferred v1.1+)
- Consolidation dual-trigger transcode gRPC + RabbitMQ (FUNCTIONAL §2 parcours 2 #5).
- Études OOM stockage si scale x10.
- Backfill
seller_transfers.stripe_transfer_idpour les rows pré-v1.0.7 (CHANGELOG ops task #38). - Sandbox Hyperswitch → prod réel (mode
live).
4. Sécurité
| Métrique | Avant v0.404 | Après v0.404 |
|---|---|---|
| Score sécurité | 5/10 | 7/10 |
Améliorations v0.404 :
- JWT stream token endpoint (
POST /auth/stream-token) pour auth HLS/WebSocket - SSRF protection sur webhooks (HTTPS-only, whitelist schéma)
- IDOR corrigé dans GetUploadStatus (ownership check)
- Hyperswitch webhook secret requis en production (HMAC)
- Password reset tokens hashés (SHA-256)
- Docker hybrid compose supprimé
- Credentials CI migrés vers GitHub Secrets
5. Infrastructure
| Élément | État v0.404 |
|---|---|
| Rate limiting Redis | ✅ Disponible |
| Alerting Prometheus | ✅ Règles ajoutées |
| PostgreSQL | ✅ Aligné v16 |
| Compose staging | ✅ Complet (chat, stream, reverse proxy) |
| CodeQL SAST | ✅ Ajouté |
| Rust CI (clippy) | ✅ Ajouté |
6. Qualité du code
| Métrique | v0.404 |
|---|---|
| fmt.Printf → zap | 40 remplacements |
| any TypeScript éliminés | ~45 |
| TypeScript unifié | 5.9.3 |
| Code mort supprimé | ~1600 LOC |
| gorilla/websocket | Remplacé par coder/websocket |
7. Références rapides
| Document | Usage |
|---|---|
| PLAN_V0_301_FINALISATION.md | Plan de finalisation v0.301 |
| V0_401_RELEASE_SCOPE.md | Scope v0.401 (Phase 4 Commerce) |
| V0_402_RELEASE_SCOPE.md | Scope v0.402 (checkout & codes promo) |
| V0_303_RELEASE_SCOPE.md | Scope v0.303 (Chat appels WebRTC 1-to-1) |
| PLAN_V0_401_IMPLEMENTATION.md | Plan d'implémentation v0.401 |
| PLAN_V0_402_IMPLEMENTATION.md | Plan d'implémentation v0.402 |
| V0_404_RELEASE_SCOPE.md | Scope v0.404 (stabilisation post-audit) |
| V0_501_RELEASE_SCOPE.md | Scope v0.501 (Streaming & Cloud, archivé) |
| V0_502_RELEASE_SCOPE.md | Scope v0.502 (Chat Server Rewrite, archivé) |
| V0_503_RELEASE_SCOPE.md | Scope v0.503 (archivé) |
| V0_601_RELEASE_SCOPE.md | Scope v0.601 (archivé) |
| V0_602_RELEASE_SCOPE.md | Scope v0.602 (archivé) |
| PLAN_V0_601_IMPLEMENTATION.md | Plan d'implémentation v0.601 |
| PLAN_V0_602_IMPLEMENTATION.md | Plan d'implémentation v0.602 |
| V0_603_RELEASE_SCOPE.md | Scope v0.603 (Transfer auto, Commission, Stabilisation) |
| PLAN_V0_603_IMPLEMENTATION.md | Plan d'implémentation v0.603 |
| CHAT_FEATURE_PARITY.md | Feature parity Rust vs Go (25/25 OK) |
| V0_301_RELEASE_SCOPE.md | Scope détaillé v0.301 (Phase 3 Social) |
| V0_203_RELEASE_SCOPE.md | Scope v0.203 (archivé) |
| SCOPE_CONTROL.md | Anti-scope-creep, workflow |
| FEATURE_STATUS.md | Statut des features par domaine |
| CHANGELOG.md | Historique des versions |
8. Stack technique
| Composant | État |
|---|---|
| Backend Go | ✅ Opérationnel |
| Frontend React (Vite) | ✅ Opérationnel |
| Chat Go (intégré backend) | ✅ Opérationnel (v0.502) |
| Stream Server Rust | ✅ Compile — HLS en intégration (v0.503) |
| PostgreSQL | ✅ |
| Redis | ✅ |
9. Indicateurs
| Métrique | Valeur |
|---|---|
| Features livrées (cumul) | ~353 / 600 |
| Features E2E fonctionnelles | 22 |
| Score maturité produit | 5/10 |
| Module Streaming | 55% |
| Module Cloud | 30% |
| Module Gear | 60% |