veza/999_FULL_AUDIT_VEZA.md
senke 8a0f008345 chore: playwright workflow, docs, rapports audit, visual-tests, tmt unit
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 22:19:34 +01:00

29 KiB

I'll conduct a thorough technical audit of this monorepo. Let me start by exploring the codebase systematically across all layers.

[4 tools called]

Now let me dive deeper into specific areas that need more investigation.

[4 tools called]

I now have comprehensive data from all exploration passes. Let me verify a few final critical points before compiling the full report.

[8 tools called]

Now I have all the data needed. Let me note a critical finding: the .gitignore explicitly includes veza-stream-server/.env (line 77: !veza-stream-server/.env) meaning credentials are committed to git. Let me compile the complete audit report.


AUDIT TECHNIQUE INTEGRAL — MONOREPO VEZA

Date : 11 fevrier 2026 Scope : Monorepo /home/senke/git/talas/veza Auditeur : IA — Analyse statique exhaustive du code source


EXECUTIVE SUMMARY

Veza est une plateforme audio collaborative multi-services (Go, Rust x2, React) dotee d'une ambition technique importante mais dont la maturite est inegale selon les couches. Le backend Go est le composant le plus solide (architecture clean, securite robuste, tests). Le frontend React est volumineux et bien structure mais souffre de features fantomes et de tests fragiles. Les deux services Rust (chat, stream) presentent des vulnerabilites critiques (credentials hardcodees, authentification simulee) qui interdisent tout deploiement en production en l'etat.

Verdict global : Le monorepo n'est pas deployable en production sans remediation prealable des failles de securite critiques. La base de code est neanmoins viable a moyen terme apres un effort de stabilisation estime a 4-6 semaines.


1. CARTOGRAPHIE GLOBALE

Stack complete

Couche Technologie Version
Frontend React + TypeScript + Vite 18.2.0 / 5.3.3 / 7.1.5
Design System Tailwind CSS v4 + KODO tokens 4.0.0
State Zustand + TanStack React Query 4.5.0 / 5.17.0
Backend API Go + Gin + GORM + PostgreSQL Go 1.23.8 / Gin 1.9.1
Chat Server Rust + Axum + SQLx + WebSocket Axum 0.8
Stream Server Rust + Axum + FFmpeg + HLS Axum 0.7
Base de donnees PostgreSQL via Docker
Cache/Sessions Redis via Docker
Message Queue RabbitMQ via Docker (optionnel)
Reverse Proxy HAProxy Config fournie
CI/CD GitHub Actions (7 workflows)
Monitoring Prometheus + Grafana + Sentry Config fournie
Tests Vitest + Playwright + Go test + testcontainers
Infra Docker Compose (dev/staging/prod) + Incus/LXD + K8s

Organisation du repo

veza/
├── apps/web/              # Frontend React (coeur actif)
├── veza-backend-api/      # Backend Go (coeur actif)
├── veza-chat-server/      # Chat Rust (fonctionnel, failles)
├── veza-stream-server/    # Streaming Rust (incomplet, failles critiques)
├── veza-desktop/          # Electron wrapper (coquille vide)
├── veza-mobile/           # App mobile (abandonne, non fonctionnel)
├── veza-docs/             # Docusaurus (documentation)
├── veza-common/           # Lib Rust partagee (utilisee)
├── packages/design-system/# Design system (sous-utilise)
├── config/                # Docker, HAProxy, Incus, Prometheus, Grafana
├── k8s/                   # Manifestes Kubernetes
├── migrations/            # 29 fichiers SQL
├── make/                  # Systeme de build modulaire
├── scripts/               # Utilitaires
└── .github/workflows/     # 7 pipelines CI/CD

Gestion monorepo : NPM Workspaces uniquement. Pas de Turborepo, Nx ou Lerna. Le systeme de build repose sur un Makefile modulaire (make/*.mk) avec ~10 modules. C'est fonctionnel mais manque d'orchestration intelligente (pas de cache de build, pas de graph de dependances).

Dependances critiques

Dependance Criticite Statut
axios 1.6.7 CRITIQUE 4 CVE connues (SSRF, DoS) — upgrade >=1.12.0
gin-gonic/gin 1.9.1 Elevee Significativement derriere (1.11.0+)
jsonwebtoken (Rust) 9.2 Elevee Majeure disponible (10.x)
axum 0.7 (stream) Elevee Derriere (0.8+), incoherent avec chat (0.8)
sqlx 0.7 (les deux) Moyenne Derriere (0.8.6)
dutchcoders/go-clamd Faible Derniere MaJ 2017 — potentiellement abandonne

Schema des flux

Browser → HAProxy (:80/:443)
  ├── /              → apps/web (Vite SSR/SPA, :5173)
  ├── /api/v1/*      → veza-backend-api (Gin, :18080)
  │                     ├── PostgreSQL (:15432)
  │                     ├── Redis (:16379)
  │                     ├── RabbitMQ (:15672)
  │                     └── S3 (stockage fichiers)
  ├── /ws/*           → veza-chat-server (Axum WS, :3000)
  │                     └── PostgreSQL (messages)
  └── /stream/*       → veza-stream-server (Axum, :3002)
                        └── FFmpeg (transcodage)

Complexite globale

  • Couplage : Faible entre services (API REST/WS), mais fort entre frontend et MSW mocks
  • Modularite : Bonne cote backend Go, correcte cote frontend (feature-based), faible cote Rust (monolithes)
  • Coherence : Heterogene — 3 langages, 2 versions d'Axum differentes, conventions de nommage variables

2. CE QUE LE PRODUIT PERMET REELLEMENT

Features reellement implementees et fonctionnelles

Feature Frontend Backend Tests Statut
Authentification (register/login/JWT/refresh) OK OK OK Operationnelle
2FA (TOTP) OK OK OK Operationnelle
OAuth (Google, GitHub, Discord) OK OK Partiel Operationnelle
Gestion de profils utilisateur OK OK OK Operationnelle
Upload de tracks (chunked, validation, ClamAV) OK OK OK Operationnelle
CRUD Tracks (metadata, versions) OK OK OK Operationnelle
Playlists (CRUD, collaboration) OK OK OK Operationnelle
Chat WebSocket (temps reel) OK OK Partiel Operationnelle
Dashboard (stats, overview) OK MSW Partiel Fonctionnelle (mocks)
Recherche OK OK Partiel Operationnelle
Social (follows, blocks, feed) OK OK Partiel Operationnelle
Administration (RBAC, admin panel) OK OK Partiel Operationnelle
Marketplace (produits, commandes) OK OK Partiel Operationnelle
Webhooks OK OK Partiel Operationnelle
Analytics (playback, aggregation) OK OK Partiel Operationnelle

Features partiellement implementees

Feature % Probleme
HLS Streaming 60% Frontend pret, feature flag HLS_STREAMING: false, backend endpoints manquants
Notifications 40% Feature flag NOTIFICATIONS: false, backend non implemente
Role Management (RBAC dynamique) 50% Feature flag ROLE_MANAGEMENT: false, UI existe
Playlist Share Links 40% Feature flag PLAYLIST_SHARE: false
Playlist Recommendations 30% Feature flag PLAYLIST_RECOMMENDATIONS: false

Features fantomes (declarees mais non fonctionnelles)

Feature Preuves Verdict
Studio (Cloud File Browser) UI dans src/features/studio/, pas de route dans le router, pas de backend Fantome
Inventory/Gear UI dans src/features/inventory/, utilise mockGear.ts, pas de backend Fantome
Education/Courses UI dans src/features/, MSW mocks seulement Fantome (MSW only)
Gamification (achievements, leaderboard) MSW handlers existent, pas de backend Fantome
Live Streaming Route /live existe, contenu minimal Fantome

Features mortes (presentes mais inutilisees)

Feature Localisation Verdict
App Mobile veza-mobile/ 35+ erreurs critiques, imports absents, code web dans React Native, auth hardcodee a false. Mort.
Design System package packages/design-system/ Aucun import de composant trouve dans le frontend. Seul le CSS est utilise. Sous-utilise/mort.
Desktop Electron veza-desktop/ Coquille qui charge l'URL web. Aucune logique specifique. Coquille vide.

3. VALIDATION FONCTIONNELLE

Features critiques — Analyse detaillee

Authentification :

  • Flow complet (register, login, refresh, logout, 2FA, OAuth)
  • Account lockout apres 5 tentatives (30min, Redis-backed)
  • Token versioning pour revocation immediate
  • bcrypt cost 12
  • Tests : complets (service_test.go, auth_middleware_test.go, frontend hooks/components)
  • Errors : structurees avec codes
  • Verdict : Solide

Upload de fichiers :

  • Chunked upload avec validation magic bytes + MIME + extension
  • ClamAV scanning (optionnel mais configurable)
  • Limites de taille
  • Tests de charge (upload_load_test.go)
  • Verdict : Solide

Chat WebSocket :

  • Connexion WS avec authentification JWT
  • Messages persistes en batch (PostgreSQL COPY)
  • Reactions, typing indicators, read receipts
  • Risque : JWT revocation en memoire seulement (perdue au restart)
  • Tests frontend : 0 test trouve pour la feature chat
  • Verdict : Fonctionnel mais fragile

Player Audio :

  • 77 fichiers dans src/features/player/
  • Tests complets pour chaque composant (PlayPause, Volume, Progress, Quality, etc.)
  • Tests de qualite correcte (interactions, accessibilite, etats)
  • Verdict : Solide

Points de rupture identifies

  1. Restart du chat server = perte de toutes les revocations JWT en memoire
  2. ClamAV desactive = uploads non scannes en production (configurable mais ENABLE_CLAMAV=false dans la config Incus)
  3. RabbitMQ desactive (RABBITMQ_ENABLE=false dans config prod) = pas d'event bus, jobs asynchrones non fonctionnels
  4. Feature flags hardcodes dans le code TypeScript = impossible de les changer sans redeploy

Zones non testees

  • src/features/chat/ : 0 test pour 54 fichiers
  • src/features/inventory/ : 0 test pour 15 fichiers
  • src/features/studio/ : 0 test
  • src/features/library/ : tests limites
  • src/features/search/ : tests limites
  • src/features/notifications/ : tests limites
  • 9 suites de tests skippees (composants non implementes, imports casses)

4. AUDIT DE SECURITE — OWASP TOP 10

A01 — Broken Access Control

Constat Gravite Detail
Middleware RBAC present et applique OK RequireAdmin(), RequirePermission(), RequireOwnershipOrAdmin()
IDOR protection via ownership middleware OK Verifie user_id sur tracks, playlists, products
Endpoints internes stream server non authentifies Elevee /internal/jobs/transcode sans auth = DoS possible via job injection
WebSocket stream accepte sans auth obligatoire Elevee TODO: validate token in production dans le code

A02 — Cryptographic Failures

Constat Gravite Detail
Mots de passe : bcrypt cost 12 OK Standard correct
JWT : HMAC-SHA256 avec secret >= 32 chars OK Validation presente
veza-stream-server/.env commite dans Git CRITIQUE .gitignore ligne 77 : !veza-stream-server/.env — le fichier contient DATABASE_URL, JWT_SECRET, RABBITMQ_URL avec des credentials vers veza.fr
JWT secrets par defaut dans config/incus/ Elevee JWT_SECRET=your-super-secret-jwt-key-change-this-in-production-min-32-chars
Credentials PostgreSQL/RabbitMQ en clair Elevee password partout dans les configs trackees

A03 — Injection

Constat Gravite Detail
SQL injection (backend Go) : GORM parametrise OK Pas de concatenation SQL dans le code de production
SQL concatenation dans tests Faible fmt.Sprintf("DELETE FROM %s", table) dans testutils/db.go
Command injection Elevee exec.CommandContext dans 4 services Go (audio_transcode_service.go, backup_service.go, hls_transcode_service.go, track_export_service.go) avec chemins derivables
XSS : dangerouslySetInnerHTML pour le chat Attenuee DOMPurify correctement configure dans sanitize.ts

Detail command injection :

// exec.CommandContext calls at lines 83, 147, 297
// Arguments derived from file paths that could be user-influenced

Le risque est reel si les chemins de fichiers ne sont pas valides dans un allowlist.

A04 — Insecure Design

Constat Gravite Detail
Rate limiting implemente (Redis) OK IP + user-based, par endpoint
Rate limiting desactive en dev Attendu Acceptable
Validation serveur (Zod frontend + Go backend) OK Double validation
Feature flags hardcodes dans le code source Moyenne Impossible de desactiver une feature sans redeploy
Pas de circuit breaker explicite entre services Moyenne Si le chat server tombe, pas de degradation gracieuse

A05 — Security Misconfiguration

Constat Gravite Detail
Grafana admin password = admin Elevee config/docker/docker-compose.production.yml:116 : GF_SECURITY_ADMIN_PASSWORD=admin
CORS ALLOWED_ORIGINS=* dans stream server .env Elevee Fichier commite dans Git
Debug endpoints proteges par auth admin OK /admin/debug/pprof/*
Security headers presents OK HSTS, CSP, X-Frame-Options, X-Content-Type-Options
CSRF Redis-backed, desactive en dev OK Standard
APP_ENV=production avec credentials par defaut Elevee config/incus/env/backend-api.env est en mode prod avec password partout

A06 — Vulnerable & Outdated Components

Constat Gravite Detail
axios 1.6.7 CRITIQUE CVE-2024-39338 (SSRF), CVE-2025-27152 (SSRF+credential leak), CVE-2025-58754 (DoS), CVE-2024-57965
gin-gonic/gin 1.9.1 Elevee Significativement derriere (1.11.0+)
jsonwebtoken (Rust) 9.2 Elevee Majeure 10.x disponible
axum versions incoherentes (0.7 vs 0.8) Moyenne Fragmentation
go-clamd (2017) Faible Potentiellement abandonne

A07 — Identification & Authentication Failures

Constat Gravite Detail
Credentials hardcodees admin/admin123 CRITIQUE veza-stream-server/src/auth/mod.rs:160 — en production, n'importe qui peut s'authentifier en admin
JWT validation correcte (backend Go) OK Signature, expiration, issuer, audience, token version
JWT revocation en memoire (Rust services) Elevee Perdue au restart = tokens revoques redeviennent valides
Account lockout (5 tentatives, 30min) OK Redis-backed
Password reset flow present OK Token temporaire

Preuve du credential hardcode :

    pub async fn authenticate_user(
        &self,
        username: &str,
        password: &str,
    ) -> Result<UserInfo, AuthError> {
        // Simuler une authentification (à remplacer par votre logique réelle)
        if username == "admin" && password == "admin123" {
            Ok(UserInfo {
                id: "550e8400-e29b-41d4-a716-446655440001".to_string(),
                username: username.to_string(),
                email: Some("admin@example.com".to_string()),
                roles: vec![Role::Admin],

A08 — Software & Data Integrity Failures

Constat Gravite Detail
CI/CD present (7 workflows GitHub Actions) OK Tests automatises
Pas de signature des builds Moyenne Pas de digest verification sur les images Docker
Validation des inputs (Zod + Go validation) OK Double validation
Pas de SBOM (Software Bill of Materials) Faible Manque de tracabilite

A09 — Logging & Monitoring Failures

Constat Gravite Detail
Structured logging (zap) avec rotation OK Backend Go
Sentry error tracking OK Configure (optionnel)
Prometheus metrics OK Scrape config fourni
Grafana dashboards OK Dashboard JSON fourni
Secrets potentiellement logues Moyenne {:?} debug formatting en Rust peut exposer des structs contenant des secrets
Pas d'audit trail explicite pour actions admin Moyenne Modele AuditLog existe dans les migrations mais usage non verifie

A10 — SSRF

Constat Gravite Detail
axios 1.6.7 vulnerable au SSRF CRITIQUE CVE-2024-39338, CVE-2025-27152
OAuth callbacks : URL de redirection via env Moyenne FRONTEND_URL non valide contre une allowlist
Proxy Vite vers backend Faible Dev seulement

Resume securite

Categorie OWASP Score Constat principal
A01 Broken Access Control 7/10 RBAC solide, endpoints internes exposes
A02 Cryptographic Failures 3/10 Secrets commites dans Git, credentials par defaut
A03 Injection 7/10 GORM protege, mais exec.Command risque
A04 Insecure Design 6/10 Rate limiting OK, feature flags rigides
A05 Security Misconfiguration 4/10 Grafana admin=admin, CORS wildcard, configs prod avec defaults
A06 Vulnerable Components 3/10 axios CRITIQUE, Gin et Rust derriere
A07 Authentication Failures 2/10 admin/admin123 hardcode = showstopper
A08 Integrity Failures 6/10 CI/CD present, pas de signing
A09 Logging/Monitoring 7/10 Infrastructure presente
A10 SSRF 4/10 axios vulnerable

5. DETTE TECHNIQUE

Dette critique (bloquante)

Element Localisation Impact
Credentials hardcodees stream server veza-stream-server/src/auth/mod.rs:160 Bloquer tout deploiement
.env commite dans Git veza-stream-server/.env (via .gitignore ligne 77) Credentials exposees
axios 4 CVE apps/web/package.json Failles SSRF/DoS en production
9 suites de tests skippees Frontend (composants non implementes) Coverage artificielle
0 tests pour le chat apps/web/src/features/chat/ (54 fichiers) Zero confiance
JWT revocation memoire-only Chat + Stream servers Tokens revoques redeviennent valides au restart

Dette structurante

Element Localisation Impact
App mobile abandonnee veza-mobile/ (35+ erreurs, code web dans RN) Confusion, faux signal de completude
Features fantomes (Studio, Inventory, Education, Gamification, Live) apps/web/src/features/ Gonflent le codebase, confondent les devs
Design system package inutilise packages/design-system/ Duplication vs apps/web/src/components/ui/
3 langages sans justification formelle Go + Rust x2 + TypeScript Complexite d'onboarding, maintenance
Versions Axum incoherentes (0.7 vs 0.8) Stream vs Chat servers Fragmentation
Feature flags hardcodes apps/web/src/config/features.ts Impossible de toggler sans redeploy
Pas de monorepo tooling Pas de Turborepo/Nx Pas de cache, pas de graph de deps
Tests de service faisant de vrais appels API playlistService.test.ts Tests fragiles, lents

Dette cosmetique

Element Impact
TODO/FIXME/HACK dans le code (~10 occurrences) Maintenance
Placeholder images hardcodees (picsum.photos) Professionnalisme
OpenAPI generated types avec localhost:8080 Configuration
Dependency version mismatches (root vs apps/web) Surprises au build

6. QUALITE ARCHITECTURALE

Score d'architecture : 6.5/10

Justification : L'architecture multi-services est coherente (API REST, WebSocket, streaming) avec une separation claire. Le backend Go suit un pattern clean architecture. Le frontend est feature-based, ce qui scale. Mais l'absence de monorepo tooling, la fragmentation des versions Rust, et les features fantomes diluent la qualite globale. Le choix de 3 langages (Go + 2x Rust + TS) est defensible pour la performance audio mais augmente significativement la complexite d'equipe.

Score de maintenabilite : 5.5/10

Justification : Le code est globalement bien organise et documente (7 docs internes, DESIGN_TOKENS, APP_SHELL, etc.). Mais : 286 tests frontend dont 9 suites broken, 54 fichiers chat sans tests, features mortes jamais nettoyees, app mobile abandonnee toujours presente, design system package fantome. Un nouveau developpeur perdrait du temps a distinguer le code actif du code mort.

Score de securite : 4/10

Justification : Les fondamentaux sont la (RBAC, bcrypt, CSRF, rate limiting, security headers, input validation, DOMPurify). Mais les failles critiques (admin/admin123, .env commite, axios CVE, Grafana admin=admin, JWT revocation volatile) sont inacceptables pour la production. La surface d'attaque est large et certaines failles sont triviales a exploiter.

Score de scalabilite : 6/10

Justification : L'architecture micro-services permet le scaling horizontal. PostgreSQL + Redis + RabbitMQ est un stack eprouve. Docker Compose + K8s manifestes sont presents. Mais : pas d'auto-scaling configure, pas de connection pooling documente pour les services Rust, le message batching du chat est en memoire (perte de messages au crash), pas de CDN/edge pour le streaming.


7. INFRA & DEVOPS

Docker

  • Multi-stage builds : Oui, pour tous les services
  • Utilisateur non-root : Oui (app:app)
  • Health checks : Configures dans docker-compose
  • Fichiers propres : 4 variantes (dev, test, staging, prod)

Secrets exposes

Fichier Dans Git Contenu
veza-stream-server/.env OUI (.gitignore l'inclut explicitement) DB password, JWT secret, RabbitMQ creds, domaine veza.fr
config/incus/env/backend-api.env OUI (non ignore) DB password, JWT placeholder, RabbitMQ creds
config/incus/env/chat-server.env OUI (non ignore) Probablement memes patterns
config/incus/env/stream-server.env OUI (non ignore) Probablement memes patterns
config/docker/docker-compose.production.yml OUI Grafana admin/admin, DB passwords

Tous ces secrets doivent etre consideres comme compromis. Rotation obligatoire.

Gestion des environnements

  • Dev : docker-compose.yml (ports 15xxx/16xxx pour eviter les conflits) — bien pense
  • Test : docker-compose.test.yml (tmpfs pour la vitesse) — bien pense
  • Staging : docker-compose.staging.yml — present
  • Production : 2 fichiers concurrents (docker-compose.prod.yml et config/docker/docker-compose.production.yml) — confusion
  • Incus/LXD : Alternative native avec scripts de deploiement

Scripts dangereux

Pas de scripts destructifs identifies. Les scripts make/*.mk sont defensifs (checks d'outils, port availability).

Setup reproductible

make setup installe les dependances, demarre l'infra, execute les migrations. Correct mais non teste en CI (le CI utilise des steps specifiques).


8. RISQUES BUSINESS

Perspective CTO

Peut-on lancer en prod ? Non. Les failles A07 (admin/admin123) et A02 (secrets dans Git) l'interdisent. Apres remediation (estimee 2 semaines), un lancement MVP est envisageable en deployant uniquement le backend Go + frontend, en laissant les services Rust en staging.

Peut-on recruter dessus ? Difficilement. Le stack Go + 2x Rust + React exige des profils polyvalents rares. L'absence de monorepo tooling ralentira les nouveaux arrivants.

Complexite d'onboarding : Estimee 2-3 semaines pour un developpeur senior polyvalent, 4-6 semaines pour un specialiste d'un seul langage.

Perspective investisseur

Le produit est-il reel ? Partiellement. Le coeur (auth, tracks, playlists, chat) est fonctionnel. Mais 5 features sont fantomes (Studio, Inventory, Education, Gamification, Live), l'app mobile est un decor, et le design system package est inutilise. Le perimetre reel est ~60% de ce que le repo laisse croire.

ROI de l'investissement technique : Le backend Go (92% coverage revendique) est un actif solide. Le frontend est volumineux (286 tests, 23 features) mais gonfle par les fantomes. Les services Rust sont des PoC fonctionnels, pas des composants production-ready.

Red flags : Secrets dans Git = incident de securite latent. Mobile abandonne = pivot non assume. Features fantomes = sur-communication ou changement de direction non documente.

Perspective acquereur

Peut-on le vendre ? Avec disclosure honnete : oui, comme base technique a completer. La valeur est dans l'architecture et le backend Go. Le frontend necessite un nettoyage. Les services Rust necessitent une refonte securite.

Peut-on le maintenir ? Oui, avec une equipe de 3-4 (1 Go, 1 Rust, 1-2 React/TS). Cout annuel estime : 250-400k EUR selon localisation.

Faut-il le refactorer ou le reecrire ? Refactorer. La base est saine. Une reecriture serait un gaspillage. Le plan d'action ci-dessous estime le refactoring a 8-12 semaines.


9. PLAN D'ACTION PRIORISE

Phase 1 — URGENT : Securite & Stabilite (2-3 semaines)

Action Effort Impact
Supprimer admin/admin123 du stream server, implementer auth reelle M Ferme la faille critique A07
Retirer !veza-stream-server/.env du .gitignore, nettoyer l'historique Git S Supprime les secrets du repo
Ajouter config/incus/env/ au .gitignore S Arrete l'hemorragie
Rotationner TOUS les secrets exposes (DB, JWT, RabbitMQ, Grafana) M Invalide les credentials compromises
Upgrader axios vers >=1.12.0 S Ferme 4 CVE
Implementer JWT revocation persistante (Redis) pour chat + stream M Tokens revoques restent revoques
Changer Grafana admin password S Ferme A05
Valider URL de redirection OAuth contre allowlist S Ferme open redirect
Ajouter auth sur /internal/jobs/transcode S Ferme DoS vector
Implementer auth obligatoire WebSocket stream M Ferme acces anonyme

Phase 2 — STABILISATION (3-4 semaines)

Action Effort Impact
Ecrire tests pour features/chat/ (54 fichiers, 0 test) L Coverage reelle
Fixer les 9 suites de tests skippees ou les supprimer M Arreter les faux positifs
Supprimer veza-mobile/ (ou le mettre dans une branche) S Nettoyer le code mort
Supprimer ou documenter les features fantomes (Studio, Inventory, Education, Gamification, Live) M Alignement code/realite
Upgrader gin-gonic/gin vers 1.11.0+ M Securite + maintien
Upgrader jsonwebtoken Rust vers 10.x M Securite
Aligner versions Axum (0.7 → 0.8) pour stream server L Coherence
Valider/sanitiser les arguments exec.Command M Fermer command injection
Migrer feature flags vers env vars ou backend config M Flexibilite operationnelle
Resoudre la confusion 2 docker-compose prod S Clarte operationnelle

Phase 3 — AMELIORATION & REFONTE (4-6 semaines)

Action Effort Impact
Introduire Turborepo ou Nx L Cache de build, graph de deps, DX
Implementer secret management (Vault, AWS SM, ou K8s Secrets) L Securite long terme
Completer HLS streaming (backend endpoints) ou retirer le frontend L Feature promise
Ajouter SBOM et dependency scanning en CI M Conformite
Implementer circuit breakers entre services M Resilience
Ajouter CDN pour le streaming audio L Scalabilite
Audit de securite avec gosec, cargo audit, npm audit en CI M Prevention
Setup auto-scaling K8s XL Production-ready
Implementer notifications backend (feature flag → true) L Feature
Documenter l'architecture decision records (ADR) M Perennite

CONCLUSION STRATEGIQUE

Ce monorepo est le travail d'une equipe ambitieuse qui a construit un produit reel avec une architecture solide au niveau conceptuel. Le backend Go est l'actif le plus mature — clean architecture, securite robuste, tests extensifs. Le frontend React est volumineux et fonctionnel mais souffre de features fantomes qui diluent la credibilite. Les services Rust sont des prototypes techniques prometteurs mais interdits de production en l'etat.

Les 3 actions les plus urgentes sont :

  1. Supprimer les credentials hardcodees du stream server
  2. Nettoyer les secrets de l'historique Git et les rotationner
  3. Upgrader axios (4 CVE actives)

Sans ces 3 actions, aucun deploiement production ne doit avoir lieu.

Apres remediation, le produit est viable comme MVP avec le backend Go + frontend React. Les services Rust peuvent etre deployed progressivement apres hardening. Le cout total de mise en conformite est estime a 8-12 semaines-developpeur reparties sur les 3 phases.

Recommandation finale : Investissement conditionne a l'execution de la Phase 1 sous 3 semaines, avec audit de validation avant tout deploiement public.