423 lines
15 KiB
Markdown
423 lines
15 KiB
Markdown
|
|
# 🔍 AUDIT TECHNIQUE INTÉGRAL — Monorepo Veza
|
|||
|
|
|
|||
|
|
**Date :** 14 février 2026
|
|||
|
|
**Mandant :** Comité d'investissement
|
|||
|
|
**Périmètre :** Monorepo complet (frontend, backend, services Rust, infra, CI/CD)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## EXECUTIVE SUMMARY
|
|||
|
|
|
|||
|
|
Le monorepo Veza est une plateforme audio collaborative (streaming, chat, marketplace) avec une architecture multi-services (Go, Rust, React). L’audit révèle :
|
|||
|
|
|
|||
|
|
| Critère | Verdict |
|
|||
|
|
|---------|---------|
|
|||
|
|
| **Lancement en production** | ⚠️ Possible avec corrections urgentes |
|
|||
|
|
| **Vente / acquisition** | ❌ Non recommandé sans remédiation |
|
|||
|
|
| **Maintenance** | ⚠️ Risques élevés (dette, tests fragiles) |
|
|||
|
|
| **Refactorisation** | ✅ Recommandée (phases 2–3) |
|
|||
|
|
| **Réécriture** | ❌ Non nécessaire |
|
|||
|
|
|
|||
|
|
**Points positifs :**
|
|||
|
|
- Backend Go solide (auth, RBAC, ownership, CSRF, rate limiting)
|
|||
|
|
- Chat Server Rust compile et fonctionne
|
|||
|
|
- Stream Server Rust compile
|
|||
|
|
- Migrations DB structurées
|
|||
|
|
- CI/CD configuré (Go, Rust, frontend, E2E)
|
|||
|
|
|
|||
|
|
**Points critiques :**
|
|||
|
|
- Route interne `/api/v1/internal/tracks/:id/stream-ready` non authentifiée
|
|||
|
|
- Vulnérabilités npm (React Router XSS, Axios DoS, etc.)
|
|||
|
|
- Rate limiting désactivé en développement
|
|||
|
|
- Tests frontend : ~42 % d’échecs (selon règles utilisateur)
|
|||
|
|
- Features "Coming Soon" (Gear, Live, Education, Queue, Developer) sans backend
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1️⃣ CARTOGRAPHIE GLOBALE
|
|||
|
|
|
|||
|
|
### Stack
|
|||
|
|
|
|||
|
|
| Couche | Technologie | Version |
|
|||
|
|
|--------|-------------|---------|
|
|||
|
|
| **Frontend** | React + Vite + TypeScript | React 18.2, Vite 7.1 |
|
|||
|
|
| **Backend API** | Go + Gin | Go 1.23, Gin 1.11 |
|
|||
|
|
| **Chat Server** | Rust + Axum + WebSocket | Axum 0.8, Tokio 1.35 |
|
|||
|
|
| **Stream Server** | Rust + Axum + HLS | Rust 2021 |
|
|||
|
|
| **Base de données** | PostgreSQL | 16-alpine |
|
|||
|
|
| **Cache** | Redis | 7-alpine |
|
|||
|
|
| **Message broker** | RabbitMQ | 3-management |
|
|||
|
|
| **Shared lib** | veza-common (Rust) | 0.1.0 |
|
|||
|
|
|
|||
|
|
### Organisation du repo
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
veza/
|
|||
|
|
├── apps/web/ # Frontend React (source unique UI)
|
|||
|
|
├── veza-backend-api/ # API Go principale
|
|||
|
|
├── veza-chat-server/ # Chat WebSocket Rust
|
|||
|
|
├── veza-stream-server/ # Streaming audio Rust
|
|||
|
|
├── veza-common/ # Lib Rust partagée (logging, types)
|
|||
|
|
├── veza-docs/ # Documentation
|
|||
|
|
├── packages/ # (vide ou minimal)
|
|||
|
|
├── config/ # Docker, HAProxy
|
|||
|
|
├── infra/ # docker-compose lab
|
|||
|
|
└── .github/workflows/ # CI/CD
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Workspaces npm :** `apps/web`, `packages/*` (package.json racine)
|
|||
|
|
|
|||
|
|
### Flux fonctionnels
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Frontend (React) ──► Backend API (Go) ──► PostgreSQL
|
|||
|
|
│ │
|
|||
|
|
│ ├──► Redis (sessions, CSRF, rate limit)
|
|||
|
|
│ ├──► RabbitMQ (jobs)
|
|||
|
|
│ ├──► Stream Server (callback stream-ready)
|
|||
|
|
│ └──► Chat Server (JWT token)
|
|||
|
|
│
|
|||
|
|
├──► Chat Server (WebSocket)
|
|||
|
|
└──► Stream Server (HLS/audio)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Dépendances critiques
|
|||
|
|
|
|||
|
|
- **Backend :** GORM, JWT, bcrypt, ClamAV (go-clamd), AWS S3, Sentry, Prometheus
|
|||
|
|
- **Frontend :** React Query, Zustand, Axios, i18next, Framer Motion, HLS.js
|
|||
|
|
- **Chat/Stream :** SQLx, jsonwebtoken, Redis, RabbitMQ (lapin)
|
|||
|
|
|
|||
|
|
### Dépendances obsolètes / abandonnées
|
|||
|
|
|
|||
|
|
- `veza-common` : SQLx 0.8 (aligné avec chat/stream) — conflit historique résolu
|
|||
|
|
- Pas de dépendance abandonnée majeure identifiée
|
|||
|
|
|
|||
|
|
### Technologies utilisées vs déclarées
|
|||
|
|
|
|||
|
|
| Déclaré | Réel |
|
|||
|
|
|---------|------|
|
|||
|
|
| veza-desktop (Electron) | Non présent dans workspaces npm |
|
|||
|
|
| Nx / Turborepo / Lerna | Aucun — monorepo npm basique |
|
|||
|
|
| Design tokens | Présents (`apps/web/docs/DESIGN_TOKENS.md`) |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2️⃣ CE QUE LE PRODUIT PERMET RÉELLEMENT
|
|||
|
|
|
|||
|
|
### Features validées (implémentées et utilisables)
|
|||
|
|
|
|||
|
|
| Feature | Backend | Frontend | Tests |
|
|||
|
|
|---------|---------|----------|-------|
|
|||
|
|
| Auth (login, register, 2FA) | ✅ | ✅ | ✅ |
|
|||
|
|
| Sessions, logout, refresh | ✅ | ✅ | ✅ |
|
|||
|
|
| Password reset | ✅ | ✅ | ✅ |
|
|||
|
|
| Email verification | ✅ | ✅ | ✅ |
|
|||
|
|
| OAuth (Google, GitHub, Discord) | ✅ | ✅ | Partiel |
|
|||
|
|
| Tracks (CRUD, upload, HLS) | ✅ | ✅ | ✅ |
|
|||
|
|
| Playlists (CRUD, collaborateurs) | ✅ | ✅ | ✅ |
|
|||
|
|
| Marketplace (products, cart, checkout) | ✅ | ✅ | ✅ |
|
|||
|
|
| Wishlist, Purchases | ✅ | ✅ | ✅ |
|
|||
|
|
| Chat (token, stats) | ✅ | ✅ | ✅ |
|
|||
|
|
| Social (feed, posts, groups, follow) | ✅ | ✅ | ✅ |
|
|||
|
|
| Webhooks | ✅ | ✅ | ✅ |
|
|||
|
|
| Analytics | ✅ | ✅ | ✅ |
|
|||
|
|
| Admin (audit, unlock, pprof) | ✅ | ✅ | ✅ |
|
|||
|
|
| Roles, RBAC | ✅ | ✅ | ✅ |
|
|||
|
|
| Notifications | ✅ | ✅ | ✅ |
|
|||
|
|
| Data export (GDPR) | ✅ | ✅ | - |
|
|||
|
|
|
|||
|
|
### Features incomplètes
|
|||
|
|
|
|||
|
|
| Feature | État |
|
|||
|
|
|---------|------|
|
|||
|
|
| OAuth | Config via env, baseURL hardcodé `veza.fr` si non défini |
|
|||
|
|
| Stream Server callback | Route interne non authentifiée |
|
|||
|
|
| E2E | Présents mais résultats instables (e2e-results.json) |
|
|||
|
|
|
|||
|
|
### Features fantômes / mortes
|
|||
|
|
|
|||
|
|
| Feature | Route | État |
|
|||
|
|
|---------|-------|------|
|
|||
|
|
| Gear | `/gear` | ComingSoon placeholder |
|
|||
|
|
| Live | `/live` | ComingSoon placeholder |
|
|||
|
|
| Education | `/education` | ComingSoon placeholder |
|
|||
|
|
| Queue | `/queue` | ComingSoon placeholder |
|
|||
|
|
| Developer | `/developer` | ComingSoon placeholder |
|
|||
|
|
|
|||
|
|
### Incohérences produit / code
|
|||
|
|
|
|||
|
|
- README mentionne `veza-desktop` (Electron) mais pas dans workspaces
|
|||
|
|
- `docker-compose.prod.yml` utilise HAProxy ; `docker-compose.yml` (dev) non
|
|||
|
|
- `dist_verification` committé (artefacts de build) — mauvaise pratique
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3️⃣ VALIDATION FONCTIONNELLE
|
|||
|
|
|
|||
|
|
### Tests
|
|||
|
|
|
|||
|
|
| Composant | Commande | Résultat |
|
|||
|
|
|-----------|----------|----------|
|
|||
|
|
| Backend Go | `go test ./... -short` | Exécution longue (timeout 60s) |
|
|||
|
|
| Chat Server | `cargo test` | ✅ |
|
|||
|
|
| Stream Server | `cargo check` | ✅ (warnings) |
|
|||
|
|
| Frontend | `npm run test -- --run` | ~42 % échecs (règles utilisateur) |
|
|||
|
|
| E2E | `npx playwright test` | Instable |
|
|||
|
|
|
|||
|
|
### Points de rupture
|
|||
|
|
|
|||
|
|
1. **Route interne stream-ready** : Appelée par Stream Server sans auth — n’importe qui peut forger un callback.
|
|||
|
|
2. **Rate limiting** : Désactivé en dev (`config.Env == config.EnvDevelopment`) — risque en staging si `APP_ENV` mal configuré.
|
|||
|
|
3. **CSRF** : Désactivé si Redis indisponible (sauf prod où démarrage échoue).
|
|||
|
|
|
|||
|
|
### Scénarios de crash évidents
|
|||
|
|
|
|||
|
|
- Redis down en prod → crash (CSRF requis)
|
|||
|
|
- ClamAV down avec `CLAMAV_REQUIRED=true` → uploads rejetés
|
|||
|
|
- `JWT_SECRET` vide → crash au démarrage (correct)
|
|||
|
|
|
|||
|
|
### Zones non testées
|
|||
|
|
|
|||
|
|
- Handlers OAuth (flows complets)
|
|||
|
|
- Intégration Stream Server ↔ Backend
|
|||
|
|
- Webhooks sortants (workers)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4️⃣ AUDIT DE SÉCURITÉ — OWASP TOP 10
|
|||
|
|
|
|||
|
|
### A01 – Broken Access Control
|
|||
|
|
|
|||
|
|
| Point | Gravité | Détail |
|
|||
|
|
|-------|---------|--------|
|
|||
|
|
| Route interne stream-ready | **Critique** | `POST /api/v1/internal/tracks/:id/stream-ready` sans auth. Exploitation : forger des callbacks pour modifier le statut de tracks. |
|
|||
|
|
| Ownership | ✅ | `RequireOwnershipOrAdmin` sur users, tracks, playlists, products |
|
|||
|
|
| Admin | ✅ | `RequireAdmin` sur `/admin/*` |
|
|||
|
|
| Sessions | ✅ | Vérification ownership sur `DELETE /sessions/:id` (à confirmer dans handler) |
|
|||
|
|
|
|||
|
|
**Correctif A01 :** Protéger la route interne par API key ou IP whitelist (réseau interne).
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### A02 – Cryptographic Failures
|
|||
|
|
|
|||
|
|
| Point | Gravité | Détail |
|
|||
|
|
|-------|---------|--------|
|
|||
|
|
| Mots de passe | ✅ | bcrypt (golang.org/x/crypto/bcrypt) |
|
|||
|
|
| JWT | ✅ | HS256, validation stricte (alg, exp, iss, aud) |
|
|||
|
|
| Secrets | ⚠️ Moyenne | `JWT_SECRET` requis en prod (`:?` dans docker-compose.prod.yml) |
|
|||
|
|
| HTTPS | ⚠️ | `COOKIE_SECURE=true` en prod ; dépend du reverse proxy |
|
|||
|
|
|
|||
|
|
**Correctif A02 :** S’assurer que TLS est forcé au niveau HAProxy/load balancer.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### A03 – Injection
|
|||
|
|
|
|||
|
|
| Point | Gravité | Détail |
|
|||
|
|
|-------|---------|--------|
|
|||
|
|
| SQL | ✅ | GORM + prepared statements ; pas de concaténation |
|
|||
|
|
| Full-text search | ✅ | `plainto_tsquery` avec paramètres |
|
|||
|
|
| XSS | ⚠️ Moyenne | DOMPurify présent côté frontend ; pas de sanitization systématique côté backend pour tous les champs texte |
|
|||
|
|
|
|||
|
|
**Correctif A03 :** Sanitiser les champs affichés (comments, posts, etc.) côté backend ou documenter la responsabilité frontend.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### A04 – Insecure Design
|
|||
|
|
|
|||
|
|
| Point | Gravité | Détail |
|
|||
|
|
|-------|---------|--------|
|
|||
|
|
| Callback stream-ready | **Critique** | Pas d’authentification du callback Stream Server → Backend |
|
|||
|
|
| Rate limiting dev | ⚠️ Faible | Désactivé en dev — acceptable si staging/prod corrects |
|
|||
|
|
| Validation | ✅ | go-playground/validator, EmailValidator, PasswordValidator |
|
|||
|
|
|
|||
|
|
**Correctif A04 :** Authentifier le callback (header `X-Stream-Server-API-Key` ou mTLS).
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### A05 – Security Misconfiguration
|
|||
|
|
|
|||
|
|
| Point | Gravité | Détail |
|
|||
|
|
|-------|---------|--------|
|
|||
|
|
| CORS | ✅ | Validation stricte en prod, pas de wildcard |
|
|||
|
|
| Debug | ✅ | Stack traces uniquement en dev/DEBUG |
|
|||
|
|
| Swagger | ⚠️ Faible | Exposé en prod — à restreindre ou désactiver |
|
|||
|
|
| Secrets | ✅ | `.env` dans `.gitignore` ; `SECRETS_VERIFICATION.md` |
|
|||
|
|
|
|||
|
|
**Correctif A05 :** Désactiver Swagger en prod ou le protéger par auth.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### A06 – Vulnerable & Outdated Components
|
|||
|
|
|
|||
|
|
| Point | Gravité | Détail |
|
|||
|
|
|-------|---------|--------|
|
|||
|
|
| npm | **Élevée** | React Router XSS (GHSA-2w69-qvjg-hvjx), Axios DoS (GHSA-43fc-jf86-j433), cookie, diff, jose, lodash, node-forge |
|
|||
|
|
| Go | ✅ | govulncheck dans CI |
|
|||
|
|
| Rust | ✅ | cargo audit dans CI |
|
|||
|
|
|
|||
|
|
**Correctif A06 :** `npm audit fix` ; mise à jour manuelle si breaking.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### A07 – Identification & Authentication Failures
|
|||
|
|
|
|||
|
|
| Point | Gravité | Détail |
|
|||
|
|
|-------|---------|--------|
|
|||
|
|
| JWT | ✅ | Validation complète, token versioning |
|
|||
|
|
| Sessions | ✅ | DB, expiration, révocation |
|
|||
|
|
| Account lockout | ✅ | 5 tentatives, 30 min |
|
|||
|
|
| Password reset | ✅ | Tokens avec expiration, audit |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### A08 – Software & Data Integrity Failures
|
|||
|
|
|
|||
|
|
| Point | Gravité | Détail |
|
|||
|
|
|-------|---------|--------|
|
|||
|
|
| CI/CD | ⚠️ Moyenne | Pas de signature des images Docker |
|
|||
|
|
| Build | ✅ | Types générés depuis OpenAPI |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### A09 – Logging & Monitoring Failures
|
|||
|
|
|
|||
|
|
| Point | Gravité | Détail |
|
|||
|
|
|-------|---------|--------|
|
|||
|
|
| Logs | ✅ | Zap structuré, pas de secrets en clair |
|
|||
|
|
| Métriques | ✅ | Prometheus |
|
|||
|
|
| Audit | ✅ | AuditService, audit_logs |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### A10 – SSRF
|
|||
|
|
|
|||
|
|
| Point | Gravité | Détail |
|
|||
|
|
|-------|---------|--------|
|
|||
|
|
| Webhooks | ⚠️ Faible | Appels sortants vers URLs utilisateur — risque SSRF si URL non validée |
|
|||
|
|
| OAuth | ✅ | URLs fixes (Google, GitHub, Discord) |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5️⃣ DETTE TECHNIQUE
|
|||
|
|
|
|||
|
|
### Dette critique (bloquante)
|
|||
|
|
|
|||
|
|
| Élément | Fichier / Zone |
|
|||
|
|
|--------|----------------|
|
|||
|
|
| Route stream-ready non protégée | `router.go:622-625` |
|
|||
|
|
| Vulnérabilités npm high | `apps/web/package.json` |
|
|||
|
|
|
|||
|
|
### Dette structurante
|
|||
|
|
|
|||
|
|
| Élément | Détail |
|
|||
|
|
|--------|--------|
|
|||
|
|
| `fmt.Printf` debug dans router | `router.go:110-121` (logs ClamAV) |
|
|||
|
|
| Duplication setup routes | Nombreux `trackService`, `chunkService` recréés |
|
|||
|
|
| Conventions | Pas de tooling monorepo (Nx/Turborepo) |
|
|||
|
|
| Tests fragiles | Frontend 42 % échecs |
|
|||
|
|
|
|||
|
|
### Dette cosmétique
|
|||
|
|
|
|||
|
|
| Élément | Détail |
|
|||
|
|
|--------|--------|
|
|||
|
|
| Warnings Stream Server | dead_code, unused_comparisons |
|
|||
|
|
| Fichiers `dist_verification` committés | `.gitignore` à étendre |
|
|||
|
|
| Commentaires FR/EN mélangés | Cohérence |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6️⃣ QUALITÉ ARCHITECTURALE
|
|||
|
|
|
|||
|
|
### Scores (sur 10)
|
|||
|
|
|
|||
|
|
| Critère | Score | Justification |
|
|||
|
|
|---------|-------|---------------|
|
|||
|
|
| **Architecture** | 7/10 | Séparation claire (handlers, services, core) ; duplication de setup dans router |
|
|||
|
|
| **Maintenabilité** | 6/10 | Code structuré ; dette, tests fragiles, pas de tooling monorepo |
|
|||
|
|
| **Sécurité** | 6/10 | Bonnes bases (auth, RBAC, CSRF) ; faille callback, vulnérabilités npm |
|
|||
|
|
| **Scalabilité** | 7/10 | Stateless API, Redis, RabbitMQ ; pas de stratégie cache avancée documentée |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 7️⃣ INFRA & DEVOPS
|
|||
|
|
|
|||
|
|
### Docker
|
|||
|
|
|
|||
|
|
- `docker-compose.yml` : dev (postgres, redis, rabbitmq, backend-api)
|
|||
|
|
- `docker-compose.prod.yml` : prod (postgres, redis, rabbitmq, backend, chat, stream, web, HAProxy)
|
|||
|
|
- Secrets : `DB_PASS`, `RABBITMQ_PASS`, `JWT_SECRET` requis en prod (`:?`)
|
|||
|
|
|
|||
|
|
### Config
|
|||
|
|
|
|||
|
|
- Variables d’environnement documentées (règles utilisateur)
|
|||
|
|
- Pas de secrets en clair dans les fichiers versionnés (vérification SECRETS_VERIFICATION.md)
|
|||
|
|
|
|||
|
|
### Scripts
|
|||
|
|
|
|||
|
|
- `make` utilisé (smoke, e2e, postman, etc.)
|
|||
|
|
- Pas de script dangereux identifié
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 8️⃣ RISQUES BUSINESS
|
|||
|
|
|
|||
|
|
### CTO
|
|||
|
|
|
|||
|
|
- **Lancement prod :** Possible après correction de la route stream-ready et des vulnérabilités npm.
|
|||
|
|
- **Maintenance :** Risque moyen : dette, tests instables, dépendances à mettre à jour.
|
|||
|
|
|
|||
|
|
### Investisseur
|
|||
|
|
|
|||
|
|
- **Vente :** Non recommandée sans remédiation des vulnérabilités et de la dette critique.
|
|||
|
|
- **Valeur :** Architecture solide, fonctionnalités riches ; qualité à renforcer.
|
|||
|
|
|
|||
|
|
### Acquéreur
|
|||
|
|
|
|||
|
|
- **Refactorisation :** Oui, phases 2–3 du plan d’action.
|
|||
|
|
- **Réécriture :** Non nécessaire.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 9️⃣ PLAN D’ACTION PRIORISÉ
|
|||
|
|
|
|||
|
|
### Phase 1 — Urgent (sécurité & stabilité)
|
|||
|
|
|
|||
|
|
| Action | Effort | Fichiers |
|
|||
|
|
|--------|--------|----------|
|
|||
|
|
| Protéger route `/api/v1/internal/tracks/:id/stream-ready` (API key ou IP) | S | `router.go`, `middleware/` |
|
|||
|
|
| Corriger vulnérabilités npm (audit fix, mise à jour manuelle) | S | `apps/web/package.json` |
|
|||
|
|
| Supprimer `fmt.Printf` debug du router | S | `router.go` |
|
|||
|
|
| Étendre `.gitignore` pour `dist_verification` | S | `.gitignore` |
|
|||
|
|
|
|||
|
|
### Phase 2 — Stabilisation
|
|||
|
|
|
|||
|
|
| Action | Effort | Détail |
|
|||
|
|
|--------|--------|--------|
|
|||
|
|
| Stabiliser tests frontend | M | Analyser échecs, mocks, dépendances |
|
|||
|
|
| Stabiliser E2E Playwright | M | Fiabiliser setup, timeouts |
|
|||
|
|
| Documenter/sécuriser callback Stream Server | S | Spec API key, implémentation |
|
|||
|
|
| Désactiver ou protéger Swagger en prod | S | Config conditionnelle |
|
|||
|
|
|
|||
|
|
### Phase 3 — Amélioration & refonte
|
|||
|
|
|
|||
|
|
| Action | Effort | Détail |
|
|||
|
|
|--------|--------|--------|
|
|||
|
|
| Introduire tooling monorepo (Turborepo/Nx) | L | Cache builds, orchestration |
|
|||
|
|
| Réduire duplication dans router | M | Factoring des services |
|
|||
|
|
| Corriger warnings Stream Server | S | dead_code, unused |
|
|||
|
|
| Implémenter ou retirer features Coming Soon | M | Gear, Live, Education, Queue, Developer |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## CONCLUSION STRATÉGIQUE
|
|||
|
|
|
|||
|
|
Le monorepo Veza est **techniquement viable** avec une base solide (auth, RBAC, marketplace, chat, streaming). Les correctifs de la Phase 1 sont **indispensables** avant toute mise en production. La Phase 2 renforce la confiance (tests, documentation). La Phase 3 améliore la maintenabilité et la scalabilité.
|
|||
|
|
|
|||
|
|
**Recommandation :** Exécuter la Phase 1 sous 1–2 semaines, puis planifier la Phase 2 en parallèle du déploiement.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
*Rapport généré par audit technique automatisé — 14 février 2026*
|